ZGlmZiAtLWdpdCBhLy5naXRtb2R1bGVzIGIvLmdpdG1vZHVsZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M1NGQ1MAotLS0gL2Rldi9udWxsCisrKyBiLy5naXRtb2R1bGVzCkBAIC0wLDAgKzEsNiBAQAorW3N1Ym1vZHVsZSAidmVyaWxvZy9ydGwveWlmaXZlL3ljcjFjIl0KKwlwYXRoID0gdmVyaWxvZy9ydGwveWlmaXZlL3ljcjFjCisJdXJsID0gaHR0cHM6Ly9naXRodWIuY29tL2RpbmVzaGFubmF5eWEveWNyMWMuZ2l0Citbc3VibW9kdWxlICJ2ZXJpbG9nL3J0bC9xc3BpbSJdCisJcGF0aCA9IHZlcmlsb2cvcnRsL3FzcGltCisJdXJsID0gaHR0cHM6Ly9naXRodWIuY29tL2RpbmVzaGFubmF5eWEvcXNwaW0uZ2l0CmRpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwNjc2MjcKLS0tIC9kZXYvbnVsbAorKysgYi9NYWtlZmlsZQpAQCAtMCwwICsxLDE5MyBAQAorIyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIwIEVmYWJsZXNzIENvcnBvcmF0aW9uCisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIworIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorCitDQVJBVkVMX1JPT1Q/PSQoUFdEKS9jYXJhdmVsCitQUkVDSEVDS19ST09UPz0ke0hPTUV9L21wd19wcmVjaGVjaworU0lNID89IFJUTAorRFVNUCA/PSBPRkYKKworIyBJbnN0YWxsIGxpdGUgdmVyc2lvbiBvZiBjYXJhdmVsLCAoMSk6IGNhcmF2ZWwtbGl0ZSwgKDApOiBjYXJhdmVsCitDQVJBVkVMX0xJVEU/PTEKKworaWZlcSAoJChDQVJBVkVMX0xJVEUpLDEpIAorCUNBUkFWRUxfTkFNRSA6PSBjYXJhdmVsLWxpdGUKKwlDQVJBVkVMX1JFUE8gOj0gaHR0cHM6Ly9naXRodWIuY29tL2VmYWJsZXNzL2NhcmF2ZWwtbGl0ZSAKKwlDQVJBVkVMX1RBRyA6PSAnbXB3LTVhJworZWxzZQorCUNBUkFWRUxfTkFNRSA6PSBjYXJhdmVsCisJQ0FSQVZFTF9SRVBPIDo9IGh0dHBzOi8vZ2l0aHViLmNvbS9lZmFibGVzcy9jYXJhdmVsIAorCUNBUkFWRUxfVEFHIDo9ICdtcHctNWEnCitlbmRpZgorCisjIEluc3RhbGwgY2FyYXZlbCBhcyBzdWJtb2R1bGUsICgxKTogc3VibW9kdWxlLCAoMCk6IGNsb25lCitTVUJNT0RVTEU/PTEKKworI1JJU0NWIENPTVBMSUFOQ0UgdGVzdCBFbnZpcm9ubWVudAorQ09SRU1BUktfRElSICAgPSB2ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvZGVwZW5kZW5jaWVzL2NvcmVtYXJrCitSSVNDVl9DT01QX0RJUiA9IHZlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy9kZXBlbmRlbmNpZXMvcmlzY3YtY29tcGxpYW5jZQorUklTQ1ZfVEVTVF9ESVIgPSB2ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvZGVwZW5kZW5jaWVzL3Jpc2N2LXRlc3RzCisKK0NPUkVNQVJLX1JFUE8gICA9ICBodHRwczovL2dpdGh1Yi5jb20vZWVtYmMvY29yZW1hcmsKK1JJU0NWX0NPTVBfUkVQTyA9ICBodHRwczovL2dpdGh1Yi5jb20vcmlzY3YvcmlzY3YtY29tcGxpYW5jZQorUklTQ1ZfVEVTVF9SRVBPID0gIGh0dHBzOi8vZ2l0aHViLmNvbS9yaXNjdi9yaXNjdi10ZXN0cworCitDT1JFTUFSS19CUkFOQ0ggICA9ICA3ZjQyMGI2YmRiZmY0MzY4MTBlZjc1MzgxMDU5OTQ0ZTJiMGQ3OWU4CitSSVNDVl9DT01QX0JSQU5DSCA9ICBkNTEyNTliMmE5NDliZTNhZjAyZTc3NmMzOWUxMzU0MDI2NzVhYzliCitSSVNDVl9URVNUX0JSQU5DSCA9ICBlMzA5NzhhNzE5MjExNTlhZWMzOGVlZWZkODQ4ZmNhNGVkMzlhODI2CisKKyMgSW5jbHVkZSBDYXJhdmVsIE1ha2VmaWxlIFRhcmdldHMKKy5QSE9OWTogJSA6IGNoZWNrLWNhcmF2ZWwKKyU6IAorCWV4cG9ydCBDQVJBVkVMX1JPT1Q9JChDQVJBVkVMX1JPT1QpICYmICQoTUFLRSkgLWYgJChDQVJBVkVMX1JPT1QpL01ha2VmaWxlICRACisKKyMgVmVyaWZ5IFRhcmdldCBmb3IgcnVubmluZyBzaW11bGF0aW9ucworLlBIT05ZOiB2ZXJpZnkKK3ZlcmlmeToKKwljZCAuL3Zlcmlsb2cvZHYvICYmIFwKKwlleHBvcnQgU0lNPSR7U0lNfSBEVU1QPSR7RFVNUH0gJiYgXAorCQkkKE1BS0UpIC1qJChUSFJFQURTKQorCisjIEluc3RhbGwgRFYgc2V0dXAKKy5QSE9OWTogc2ltZW52CitzaW1lbnY6CisJZG9ja2VyIHB1bGwgZGluZXNoYW5uYXl5YS9kdl9zZXR1cDpsYXRlc3QKKworUEFUVEVSTlM9JChzaGVsbCBjZCB2ZXJpbG9nL2R2ICYmIGZpbmQgKiAtbWF4ZGVwdGggMCAtdHlwZSBkKQorRFZfUEFUVEVSTlMgPSAkKGZvcmVhY2ggZHYsICQoUEFUVEVSTlMpLCB2ZXJpZnktJChkdikpCitUQVJHRVRfUEFUSD0kKHNoZWxsIHB3ZCkKK1BES19QQVRIPSR7UERLX1JPT1R9L3NreTEzMEEKK1ZFUklGWV9DT01NQU5EPSJjZCAke1RBUkdFVF9QQVRIfS92ZXJpbG9nL2R2LyQqICYmIGV4cG9ydCBTSU09JHtTSU19IERVTVA9JHtEVU1QfSAmJiBtYWtlIgorJChEVl9QQVRURVJOUyk6IHZlcmlmeS0lIDogLi92ZXJpbG9nL2R2LyUgY2hlY2stY29yZW1hcmtfcmVwbyBjaGVjay1yaXNjdl9jb21wX3JlcG8gY2hlY2stcmlzY3ZfdGVzdF9yZXBvCisJZG9ja2VyIHJ1biAtdiAke1RBUkdFVF9QQVRIfToke1RBUkdFVF9QQVRIfSAtdiAke1BES19QQVRIfToke1BES19QQVRIfSBcCisgICAgICAgICAgICAgICAgLXYgJHtDQVJBVkVMX1JPT1R9OiR7Q0FSQVZFTF9ST09UfSBcCisgICAgICAgICAgICAgICAgLWUgVEFSR0VUX1BBVEg9JHtUQVJHRVRfUEFUSH0gLWUgUERLX1BBVEg9JHtQREtfUEFUSH0gXAorICAgICAgICAgICAgICAgIC1lIENBUkFWRUxfUk9PVD0ke0NBUkFWRUxfUk9PVH0gXAorICAgICAgICAgICAgICAgIC11ICQoaWQgLXUgJCRVU0VSKTokKGlkIC1nICQkVVNFUikgZGluZXNoYW5uYXl5YS9kdl9zZXR1cDptcHc1IFwKKyAgICAgICAgICAgICAgICBzaCAtYyAkKFZFUklGWV9DT01NQU5EKQorCQkJCQorIyBPcGVubGFuZSBNYWtlZmlsZSBUYXJnZXRzCitCTE9DS1MgPSAkKHNoZWxsIGNkIG9wZW5sYW5lICYmIGZpbmQgKiAtbWF4ZGVwdGggMCAtdHlwZSBkKQorLlBIT05ZOiAkKEJMT0NLUykKKyQoQkxPQ0tTKTogJToKKwlleHBvcnQgQ0FSQVZFTF9ST09UPSQoQ0FSQVZFTF9ST09UKSAmJiBjZCBvcGVubGFuZSAmJiAkKE1BS0UpICQqCisKKyMgSW5zdGFsbCBjYXJhdmVsCisuUEhPTlk6IGluc3RhbGwKK2luc3RhbGw6CitpZmVxICgkKFNVQk1PRFVMRSksMSkKKwlAZWNobyAiSW5zdGFsbGluZyAkKENBUkFWRUxfTkFNRSkgYXMgYSBzdWJtb2R1bGUuLiIKKyMgQ29udmVydCBDQVJBVkVMX1JPT1QgdG8gcmVsYXRpdmUgcGF0aCBiZWNhdXNlIC5naXRtb2R1bGVzIGRvZXNuJ3QgYWNjZXB0ICcvJworCSQoZXZhbCBDQVJBVkVMX1BBVEggOj0gJChzaGVsbCByZWFscGF0aCAtLXJlbGF0aXZlLXRvPSQoc2hlbGwgcHdkKSAkKENBUkFWRUxfUk9PVCkpKQorCUBpZiBbICEgLWQgJChDQVJBVkVMX1JPT1QpIF07IHRoZW4gZ2l0IHN1Ym1vZHVsZSBhZGQgLS1uYW1lICQoQ0FSQVZFTF9OQU1FKSAkKENBUkFWRUxfUkVQTykgJChDQVJBVkVMX1BBVEgpOyBmaQorCUBnaXQgc3VibW9kdWxlIHVwZGF0ZSAtLWluaXQKKwlAY2QgJChDQVJBVkVMX1JPT1QpOyBnaXQgY2hlY2tvdXQgJChDQVJBVkVMX0JSQU5DSCkKKwkkKE1BS0UpIHNpbWxpbmsKK2Vsc2UKKwlAZWNobyAiSW5zdGFsbGluZyAkKENBUkFWRUxfTkFNRSkuLiIKKwlAZ2l0IGNsb25lIC1iICQoQ0FSQVZFTF9UQUcpICQoQ0FSQVZFTF9SRVBPKSAkKENBUkFWRUxfUk9PVCkKK2VuZGlmCisKKyMgQ3JlYXRlIHN5bWJvbGljIGxpbmtzIHRvIGNhcmF2ZWwncyBtYWluIGZpbGVzCisuUEhPTlk6IHNpbWxpbmsKK3NpbWxpbms6IGNoZWNrLWNhcmF2ZWwKKyMjIyBTeW1ib2xpYyBsaW5rcyByZWxhdGl2ZSBwYXRoIHRvICRDQVJBVkVMX1JPT1QgCisJJChldmFsIE1BS0VGSUxFX1BBVEggOj0gJChzaGVsbCByZWFscGF0aCAtLXJlbGF0aXZlLXRvPW9wZW5sYW5lICQoQ0FSQVZFTF9ST09UKS9vcGVubGFuZS9NYWtlZmlsZSkpCisJJChldmFsIFBJTl9DRkdfUEFUSCAgOj0gJChzaGVsbCByZWFscGF0aCAtLXJlbGF0aXZlLXRvPW9wZW5sYW5lL3VzZXJfcHJvamVjdF93cmFwcGVyICQoQ0FSQVZFTF9ST09UKS9vcGVubGFuZS91c2VyX3Byb2plY3Rfd3JhcHBlcl9lbXB0eS9waW5fb3JkZXIuY2ZnKSkKKwlta2RpciAtcCBvcGVubGFuZQorCW1rZGlyIC1wIG9wZW5sYW5lL3VzZXJfcHJvamVjdF93cmFwcGVyCisJY2Qgb3BlbmxhbmUgJiZcCisJbG4gLXNmICQoTUFLRUZJTEVfUEFUSCkgTWFrZWZpbGUKKwljZCBvcGVubGFuZS91c2VyX3Byb2plY3Rfd3JhcHBlciAmJlwKKwlsbiAtc2YgJChQSU5fQ0ZHX1BBVEgpIHBpbl9vcmRlci5jZmcKKworIyBVcGRhdGUgQ2FyYXZlbAorLlBIT05ZOiB1cGRhdGVfY2FyYXZlbAordXBkYXRlX2NhcmF2ZWw6IGNoZWNrLWNhcmF2ZWwKKwljZCAkKENBUkFWRUxfUk9PVCkvICYmIGdpdCBjaGVja291dCAkKENBUkFWRUxfVEFHKSAmJiBnaXQgcHVsbAorCisjIFVuaW5zdGFsbCBDYXJhdmVsCisuUEhPTlk6IHVuaW5zdGFsbAordW5pbnN0YWxsOiAKKwlybSAtcmYgJChDQVJBVkVMX1JPT1QpCisKKyMgSW5zdGFsbCBPcGVubGFuZQorLlBIT05ZOiBvcGVubGFuZQorb3BlbmxhbmU6IAorCWNkIG9wZW5sYW5lICYmICQoTUFLRSkgb3BlbmxhbmUKKworIyBJbnN0YWxsIFByZS1jaGVjaworIyBEZWZhdWx0IGluc3RhbGxzIHRvIHRoZSB1c2VyIGhvbWUgZGlyZWN0b3J5LCBvdmVycmlkZSBieSAiZXhwb3J0IFBSRUNIRUNLX1JPT1Q9PHByZWNoZWNrLWluc3RhbGxhdGlvbi1wYXRoPiIKKy5QSE9OWTogcHJlY2hlY2sKK3ByZWNoZWNrOgorCUBnaXQgY2xvbmUgLS1kZXB0aD0xIC0tYnJhbmNoIG1wdy01IGh0dHBzOi8vZ2l0aHViLmNvbS9lZmFibGVzcy9tcHdfcHJlY2hlY2suZ2l0ICQoUFJFQ0hFQ0tfUk9PVCkKKwlAZG9ja2VyIHB1bGwgZWZhYmxlc3MvbXB3X3ByZWNoZWNrOm1wdzUKKworLlBIT05ZOiBydW4tcHJlY2hlY2sKK3J1bi1wcmVjaGVjazogY2hlY2stcHJlY2hlY2sgY2hlY2stcGRrIGNoZWNrLWNhcmF2ZWwKKwkkKGV2YWwgSU5QVVRfRElSRUNUT1JZIDo9ICQoc2hlbGwgcHdkKSkKKwljZCAkKFBSRUNIRUNLX1JPT1QpICYmIFwKKwlkb2NrZXIgcnVuIC1lIElOUFVUX0RJUkVDVE9SWT0kKElOUFVUX0RJUkVDVE9SWSkgLWUgUERLX1JPT1Q9JChQREtfUk9PVCkgLXYgJChQUkVDSEVDS19ST09UKTokKFBSRUNIRUNLX1JPT1QpIC12ICQoSU5QVVRfRElSRUNUT1JZKTokKElOUFVUX0RJUkVDVE9SWSkgLXYgJChQREtfUk9PVCk6JChQREtfUk9PVCkgXAorCS11ICQoc2hlbGwgaWQgLXUgJChVU0VSKSk6JChzaGVsbCBpZCAtZyAkKFVTRVIpKSBlZmFibGVzcy9tcHdfcHJlY2hlY2s6bGF0ZXN0IGJhc2ggLWMgImNkICQoUFJFQ0hFQ0tfUk9PVCkgOyBweXRob24zIG1wd19wcmVjaGVjay5weSAtLXBka19yb290ICQoUERLX1JPT1QpIC0taW5wdXRfZGlyZWN0b3J5ICQoSU5QVVRfRElSRUNUT1JZKSIKKworIyBDbGVhbiAKKy5QSE9OWTogY2xlYW4KK2NsZWFuOgorCWNkIC4vdmVyaWxvZy9kdi8gJiYgXAorCQkkKE1BS0UpIC1qJChUSFJFQURTKSBjbGVhbgorCitjaGVjay1jYXJhdmVsOgorCUBpZiBbICEgLWQgIiQoQ0FSQVZFTF9ST09UKSIgXTsgdGhlbiBcCisJCWVjaG8gIkNhcmF2ZWwgUm9vdDogIiQoQ0FSQVZFTF9ST09UKSIgZG9lc24ndCBleGlzdHMsIHBsZWFzZSBleHBvcnQgdGhlIGNvcnJlY3QgcGF0aCBiZWZvcmUgcnVubmluZyBtYWtlLiAiOyBcCisJCWV4aXQgMTsgXAorCWZpCisKK2NoZWNrLXByZWNoZWNrOgorCUBpZiBbICEgLWQgIiQoUFJFQ0hFQ0tfUk9PVCkiIF07IHRoZW4gXAorCQllY2hvICJQcmUtY2hlY2sgUm9vdDogIiQoUFJFQ0hFQ0tfUk9PVCkiIGRvZXNuJ3QgZXhpc3RzLCBwbGVhc2UgZXhwb3J0IHRoZSBjb3JyZWN0IHBhdGggYmVmb3JlIHJ1bm5pbmcgbWFrZS4gIjsgXAorCQlleGl0IDE7IFwKKwlmaQorCitjaGVjay1wZGs6CisJQGlmIFsgISAtZCAiJChQREtfUk9PVCkiIF07IHRoZW4gXAorCQllY2hvICJQREsgUm9vdDogIiQoUERLX1JPT1QpIiBkb2Vzbid0IGV4aXN0cywgcGxlYXNlIGV4cG9ydCB0aGUgY29ycmVjdCBwYXRoIGJlZm9yZSBydW5uaW5nIG1ha2UuICI7IFwKKwkJZXhpdCAxOyBcCisJZmkKKworY2hlY2stY29yZW1hcmtfcmVwbzoKKwlAaWYgWyAhIC1kICIkKENPUkVNQVJLX0RJUikiIF07IHRoZW4gXAorCQllY2hvICJJbnN0YWxsaW5nIENvcmUgTWFyayBSZXBvLi4iOyBcCisJCWdpdCBjbG9uZSAkKENPUkVNQVJLX1JFUE8pICQoQ09SRU1BUktfRElSKTsgXAorCQljZCAkKENPUkVNQVJLX0RJUik7IGdpdCBjaGVja291dCAkKENPUkVNQVJLX0JSQU5DSCk7IFwKKwlmaQorCitjaGVjay1yaXNjdl9jb21wX3JlcG86CisJQGlmIFsgISAtZCAiJChSSVNDVl9DT01QX0RJUikiIF07IHRoZW4gXAorCQllY2hvICJJbnN0YWxsaW5nIFJpc2MgViBDb21wbGFuY2UgUmVwby4uIjsgXAorCQlnaXQgY2xvbmUgJChSSVNDVl9DT01QX1JFUE8pICQoUklTQ1ZfQ09NUF9ESVIpOyBcCisJCWNkICQoUklTQ1ZfQ09NUF9ESVIpOyBnaXQgY2hlY2tvdXQgJChSSVNDVl9DT01QX0JSQU5DSCk7IFwKKwlmaQorCitjaGVjay1yaXNjdl90ZXN0X3JlcG86CisJQGlmIFsgISAtZCAiJChSSVNDVl9URVNUX0RJUikiIF07IHRoZW4gXAorCQllY2hvICJJbnN0YWxsaW5nIFJpc2NWIFRlc3QgUmVwby4uIjsgXAorCQlnaXQgY2xvbmUgJChSSVNDVl9URVNUX1JFUE8pICQoUklTQ1ZfVEVTVF9ESVIpOyBcCisJCWNkICQoUklTQ1ZfVEVTVF9ESVIpOyBnaXQgY2hlY2tvdXQgJChSSVNDVl9URVNUX0JSQU5DSCk7IFwKKwlmaQorCisuUEhPTlk6IGhlbHAKK2hlbHA6CisJY2QgJChDQVJBVkVMX1JPT1QpICYmICQoTUFLRSkgaGVscCAKKwlAJChNQUtFKSAtcFJycSAtZiAkKGxhc3R3b3JkICQoTUFLRUZJTEVfTElTVCkpIDogMj4vZGV2L251bGwgfCBhd2sgLXYgUlM9IC1GOiAnL14jIEZpbGUvLC9eIyBGaW5pc2hlZCBNYWtlIGRhdGEgYmFzZS8ge2lmICgkJDEgIX4gIl5bIy5dIikge3ByaW50ICQkMX19JyB8IHNvcnQgfCBlZ3JlcCAtdiAtZSAnXlteWzphbG51bTpdXScgLWUgJ14kQCQkJwpkaWZmIC0tZ2l0IGEvUkVBRE1FLm1kIGIvUkVBRE1FLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyNzE5NjcKLS0tIC9kZXYvbnVsbAorKysgYi9SRUFETUUubWQKQEAgLTAsMCArMSw1ODQgQEAKK2BgYAorICBSaXNjZHVpbm8gU09DCisKKworUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2MgZm9yIGFueQorcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKworVEhFIFNPQyBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0MgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKK01FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCitBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCitXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KK0FDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCitPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPQy4KK2BgYAorCisjIFRhYmxlIG9mIGNvbnRlbnRzCistIFtPdmVydmlld10oI292ZXJ2aWV3KQorLSBbUmlzY2R1aW5vIEJsb2NrIERpYWdyYW1dKCNSaXNjZHVpbm8tYmxvY2stZGlhZ3JhbSkKKy0gW0tleSBGZWF0dXJlXSgja2V5LWZlYXR1cmVzKQorLSBbU3ViIElQIEZlYXR1cmVdKCNzdWItaXAtZmVhdHVyZXMpCistIFtTT0MgTWVtb3J5IE1hcF0oI3NvYy1tZW1vcnktbWFwKQorLSBbUGluIE1hcHBpbmddKCNzb2MtcGluLW1hcHBpbmcpCistIFtSZXBvc2l0b3J5IGNvbnRlbnRzXSgjcmVwb3NpdG9yeS1jb250ZW50cykKKy0gW1ByZXJlcXVpc2l0ZXNdKCNwcmVyZXF1aXNpdGVzKQorLSBbVGVzdHMgcHJlcGFyYXRpb25dKCN0ZXN0cy1wcmVwYXJhdGlvbikKKyAgICAtIFtSdW5uaW5nIFNpbXVhdGlvbl0oI3J1bm5pbmctc2ltdWxhdGlvbikKKy0gW1Rvb2wgc2V0c10oI3Rvb2wtc2V0cykKKy0gW0RvY3VtZW50YXRpb25dKCNkb2N1bWVudGF0aW9uKQorCisKKyMgT3ZlcnZpZXcKKworUmlzY2R1aW5vIGlzIGEgMzIgYml0IFJJU0MgViBiYXNlZCBTT0MgZGVzaWduIHBpbiBjb21wYXRpYmxlIHRvIGFydWRpbm8gcGxhdGZvcm0gYW5kIHRoaXMgc29jIHRhcmdldHRlZCBmb3IgZWZhYmxlc3MgU2h1dHRsZSBwcm9ncmFtLiAgVGhpcyBwcm9qZWN0IHVzZXMgb25seSBvcGVuIHNvdXJjZSB0b29sIHNldCBmb3Igc2ltdWxhdGlvbixzeW50aGVzaXMgYW5kIGJhY2tlbmQgdG9vbHMuICBUaGUgU09DIGZsb3cgZm9sbG93IHRoZSBvcGVubGFuZSBtZXRob2RvbG9neSBhbmQgU09DIGVudmlyb25tZW50IGlzIGNvbXBhdGlibGUgd2l0aCBlZmFibGVzcy9jYXJ2ZWwgbWV0aG9kb2xvZ3kuCisKKyMgUmlzY2R1aW5vIEJsb2NrIERpYWdyYW0KKworPHRhYmxlPgorICA8dHI+CisgICAgPHRkICBhbGlnbj0iY2VudGVyIj48aW1nIHNyYz0iLi9kb2NzL3NvdXJjZS9fc3RhdGljL1Jpc2NkdWlub19Tb2MucG5nIiA+PC90ZD4KKyAgPC90cj4KKworPC90YWJsZT4KKworCisjIEtleSBmZWF0dXJlcworYGBgCisgICAgKiBPcGVuIHNvdXJjZWQgdW5kZXIgQXBhY2hlLTIuMCBMaWNlbnNlIChzZWUgTElDRU5TRSBmaWxlKSAtIHVucmVzdHJpY3RlZCBjb21tZXJjaWFsIHVzZSBhbGxvd2VkLgorICAgICogaW5kdXN0cnktZ3JhZGUgYW5kIHNpbGljb24tcHJvdmVuIE9wZW4tU291cmNlIFJJU0MtViBjb3JlIGZyb20gc3ludGFjb3JlIAorICAgICogNEtCIFNSQU0gZm9yIGRhdGEgbWVtb3J5CisgICAgKiA4S0IgU1JBTSBmb3IgcHJvZ3JhbSBtZW1vcnkKKyAgICAqIFF1YWQgU1BJIE1hc3RlcgorICAgICogVUFSVCB3aXRoIDE2Qnl0ZSBGSUZPCisgICAgKiBVU0IgMS4xIEhvc3QKKyAgICAqIEkyQyBNYXN0ZXIKKyAgICAqIFNpbXBsZSBTUEkgTWFzdGVyCisgICAgKiBNQklTVCBjb250cm9sbGVyIGZvciA4S0IgUHJvZ3JhbSBtZW1vcnkKKyAgICAqIDYgQ2hhbm5lbCBBREMgKGluIFByb2dyZXNzKQorICAgICogNiBQV00KKyAgICAqIFBpbiBDb21wYXRiaWJsZSB0byBhcnVkaW5vIHVubworICAgICogV2lzaGJvbmUgY29tcGF0aWJsZSBkZXNpZ24KKyAgICAqIFdyaXR0ZW4gaW4gU3lzdGVtIFZlcmlsb2cKKyAgICAqIE9wZW4tc291cmNlIHRvb2wgc2V0CisgICAgICAgKiBzaW11bGF0aW9uIC0gaXZlcmlsb2cKKyAgICAgICAqIHN5bnRoZXNpcyAgLSB5b3N5cworICAgICAgICogYmFja2VuZC9zdGEgLSBvcGVubGFuZSB0b29sIHNldAorICAgICogVmVyaWZpY2F0aW9uIHN1aXRlIHByb3ZpZGVkLgorYGBgCisKKyMgU09DIFBpbiBNYXBwaW5nCitDYXJ2ZWwgU09DIHByb3ZpZGVzIDM4IEdQSU8gcGlucyBmb3IgdXNlciBmdW5jdGlvbmFsaXR5LiBSaXNjZHVpbm8gU09DIEdQSU8gUGluIE1hcHBpbmcgYXMgZm9sbG93cyB2cyBBVE1FR0EzMjggYW5kIEFydWRpbm8KKzx0YWJsZT4KKyAgPHRyPgorICAgIDx0ZCAgYWxpZ249ImNlbnRlciI+PGltZyBzcmM9Ii4vZG9jcy9zb3VyY2UvX3N0YXRpYy9SaXNjRHVuaW8tUGluTWFwcGluZy5wbmciID48L3RkPgorICA8L3RyPgorCis8L3RhYmxlPgorCis8dGFibGU+CisgIDx0ciBhbGlnbj0iY2VudGVyIj4gPHRkPiBBVE1HQTMyOCBQaW4gTm88L3RkPiA8dGQ+IEZ1bmN0aW9uYWxpdHkgICAgICAgICAgIDwvdGQ+IDx0ZD4gQXJ1ZGlubyBQaW4gTmFtZTwvdGQ+IDx0ZD4gQ2FydmVsIFBpbiBNYXBwaW5nICAgICAgICAgICAgICAgICAgIDwvdGQ+PC90cj4KKyAgPHRyIGFsaWduPSJjZW50ZXIiPiA8dGQ+IFBpbi0xICAgICAgICAgICA8L3RkPiA8dGQ+IFBDNi9SRVNFVCAgICAgICAgICAgICAgPC90ZD4gPHRkPiAgICAgICAgICAgICAgICAgPC90ZD4gPHRkPiBkaWdpdGFsX2lvWzBdICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD48L3RyPgorICA8dHIgYWxpZ249ImNlbnRlciI+IDx0ZD4gUGluLTIgICAgICAgICAgIDwvdGQ+IDx0ZD4gUEQwL1JYRCAgICAgICAgICAgICAgICA8L3RkPiA8dGQ+ICBEMCAgICAgICAgICAgICA8L3RkPiA8dGQ+IGRpZ2l0YWxfaW9bMV0gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPjwvdHI+CisgIDx0ciBhbGlnbj0iY2VudGVyIj4gPHRkPiBQaW4tMyAgICAgICAgICAgPC90ZD4gPHRkPiBQRDEvVFhEICAgICAgICAgICAgICAgIDwvdGQ+IDx0ZD4gIEQxICAgICAgICAgICAgIDwvdGQ+IDx0ZD4gZGlnaXRhbF9pb1syXSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+PC90cj4KKyAgPHRyIGFsaWduPSJjZW50ZXIiPiA8dGQ+IFBpbi00ICAgICAgICAgICA8L3RkPiA8dGQ+IFBEMi9JTlQwICAgICAgICAgICAgICAgPC90ZD4gPHRkPiAgRDIgICAgICAgICAgICAgPC90ZD4gPHRkPiBkaWdpdGFsX2lvWzNdICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD48L3RyPgorICA8dHIgYWxpZ249ImNlbnRlciI+IDx0ZD4gUGluLTUgICAgICAgICAgIDwvdGQ+IDx0ZD4gUEQzL0lOVDEvT0MyQihQV00wKSAgICA8L3RkPiA8dGQ+ICBEMyAgICAgICAgICAgICA8L3RkPiA8dGQ+IGRpZ2l0YWxfaW9bNF0gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPjwvdHI+CisgIDx0ciBhbGlnbj0iY2VudGVyIj4gPHRkPiBQaW4tNiAgICAgICAgICAgPC90ZD4gPHRkPiBQRDQgICAgICAgICAgICAgICAgICAgIDwvdGQ+IDx0ZD4gIEQ0ICAgICAgICAgICAgIDwvdGQ+IDx0ZD4gZGlnaXRhbF9pb1s1XSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+PC90cj4KKyAgPHRyIGFsaWduPSJjZW50ZXIiPiA8dGQ+IFBpbi03ICAgICAgICAgICA8L3RkPiA8dGQ+IFZDQyAgICAgICAgICAgICAgICAgICAgPC90ZD4gPHRkPiAgICAgICAgICAgICAgICAgPC90ZD4gPHRkPiAgLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD48L3RyPgorICA8dHIgYWxpZ249ImNlbnRlciI+IDx0ZD4gUGluLTggICAgICAgICAgIDwvdGQ+IDx0ZD4gR05EICAgICAgICAgICAgICAgICAgICA8L3RkPiA8dGQ+ICAgICAgICAgICAgICAgICA8L3RkPiA8dGQ+ICAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPjwvdHI+CisgIDx0ciBhbGlnbj0iY2VudGVyIj4gPHRkPiBQaW4tOSAgICAgICAgICAgPC90ZD4gPHRkPiBQQjYvWFRBTDEvVE9TQzEgICAgICAgIDwvdGQ+IDx0ZD4gICAgICAgICAgICAgICAgIDwvdGQ+IDx0ZD4gZGlnaXRhbF9pb1s2XSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+PC90cj4KKyAgPHRyIGFsaWduPSJjZW50ZXIiPiA8dGQ+IFBpbi0xMCAgICAgICAgICA8L3RkPiA8dGQ+IFBCNy9YVEFMMi9UT1NDMiAgICAgICAgPC90ZD4gPHRkPiAgICAgICAgICAgICAgICAgPC90ZD4gPHRkPiBkaWdpdGFsX2lvWzddICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD48L3RyPgorICA8dHIgYWxpZ249ImNlbnRlciI+IDx0ZD4gUGluLTExICAgICAgICAgIDwvdGQ+IDx0ZD4gUEQ1L09DMEIoUFdNMSkvVDEgICAgICA8L3RkPiA8dGQ+IEQ1ICAgICAgICAgICAgICA8L3RkPiA8dGQ+IGRpZ2l0YWxfaW9bOF0gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPjwvdHI+CisgIDx0ciBhbGlnbj0iY2VudGVyIj4gPHRkPiBQaW4tMTIgICAgICAgICAgPC90ZD4gPHRkPiBQRDYvT0MwQShQV00yKS9BSU4wICAgIDwvdGQ+IDx0ZD4gRDYgICAgICAgICAgICAgIDwvdGQ+IDx0ZD4gZGlnaXRhbF9pb1s5XSAvYW5hbG9nX2lvWzJdICAgICAgICAgIDwvdGQ+PC90cj4KKyAgPHRyIGFsaWduPSJjZW50ZXIiPiA8dGQ+IFBpbi0xMyAgICAgICAgICA8L3RkPiA8dGQ+IFBENy9BMU4xICAgICAgICAgICAgICAgPC90ZD4gPHRkPiBENyAgICAgICAgICAgICAgPC90ZD4gPHRkPiBkaWdpdGFsX2lvWzEwXS9hbmFsb2dfaW9bM10gICAgICAgICAgPC90ZD48L3RyPgorICA8dHIgYWxpZ249ImNlbnRlciI+IDx0ZD4gUGluLTE0ICAgICAgICAgIDwvdGQ+IDx0ZD4gUEIwL0NMS08vSUNQMSAgICAgICAgICA8L3RkPiA8dGQ+IEQ4ICAgICAgICAgICAgICA8L3RkPiA8dGQ+IGRpZ2l0YWxfaW9bMTFdICAgICAgICAgICAgICAgICAgICAgICA8L3RkPjwvdHI+CisgIDx0ciBhbGlnbj0iY2VudGVyIj4gPHRkPiBQaW4tMTUgICAgICAgICAgPC90ZD4gPHRkPiBQQjEvT0MxQShQV00zKSAgICAgICAgIDwvdGQ+IDx0ZD4gRDkgICAgICAgICAgICAgIDwvdGQ+IDx0ZD4gZGlnaXRhbF9pb1sxMl0gICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+PC90cj4KKyAgPHRyIGFsaWduPSJjZW50ZXIiPiA8dGQ+IFBpbi0xNiAgICAgICAgICA8L3RkPiA8dGQ+IFBCMi9TUy9PQzFCKFBXTTQpICAgICAgPC90ZD4gPHRkPiBEMTAgICAgICAgICAgICAgPC90ZD4gPHRkPiBkaWdpdGFsX2lvWzEzXSAgICAgICAgICAgICAgICAgICAgICAgPC90ZD48L3RyPgorICA8dHIgYWxpZ249ImNlbnRlciI+IDx0ZD4gUGluLTE3ICAgICAgICAgIDwvdGQ+IDx0ZD4gUEIzL01PU0kvT0MyQShQV001KSAgICA8L3RkPiA8dGQ+IEQxMSAgICAgICAgICAgICA8L3RkPiA8dGQ+IGRpZ2l0YWxfaW9bMTRdICAgICAgICAgICAgICAgICAgICAgICA8L3RkPjwvdHI+CisgIDx0ciBhbGlnbj0iY2VudGVyIj4gPHRkPiBQaW4tMTggICAgICAgICAgPC90ZD4gPHRkPiBQQjQvTUlTTyAgICAgICAgICAgICAgIDwvdGQ+IDx0ZD4gRDEyICAgICAgICAgICAgIDwvdGQ+IDx0ZD4gZGlnaXRhbF9pb1sxNV0gICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+PC90cj4KKyAgPHRyIGFsaWduPSJjZW50ZXIiPiA8dGQ+IFBpbi0xOSAgICAgICAgICA8L3RkPiA8dGQ+IFBCNS9TQ0sgICAgICAgICAgICAgICAgPC90ZD4gPHRkPiBEMTMgICAgICAgICAgICAgPC90ZD4gPHRkPiBkaWdpdGFsX2lvWzE2XSAgICAgICAgICAgICAgICAgICAgICAgPC90ZD48L3RyPgorICA8dHIgYWxpZ249ImNlbnRlciI+IDx0ZD4gUGluLTIwICAgICAgICAgIDwvdGQ+IDx0ZD4gQVZDQyAgICAgICAgICAgICAgICAgICA8L3RkPiA8dGQ+ICAgICAgICAgICAgICAgICA8L3RkPiA8dGQ+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPjwvdHI+CisgIDx0ciBhbGlnbj0iY2VudGVyIj4gPHRkPiBQaW4tMjEgICAgICAgICAgPC90ZD4gPHRkPiBBUkVGICAgICAgICAgICAgICAgICAgIDwvdGQ+IDx0ZD4gICAgICAgICAgICAgICAgIDwvdGQ+IDx0ZD4gYW5hbG9nX2lvWzEwXSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+PC90cj4KKyAgPHRyIGFsaWduPSJjZW50ZXIiPiA8dGQ+IFBpbi0yMiAgICAgICAgICA8L3RkPiA8dGQ+IEdORCAgICAgICAgICAgICAgICAgICAgPC90ZD4gPHRkPiAgICAgICAgICAgICAgICAgPC90ZD4gPHRkPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD48L3RyPgorICA8dHIgYWxpZ249ImNlbnRlciI+IDx0ZD4gUGluLTIzICAgICAgICAgIDwvdGQ+IDx0ZD4gUEMwL0FEQzAgICAgICAgICAgICAgICA8L3RkPiA8dGQ+ICBBMCAgICAgICAgICAgICA8L3RkPiA8dGQ+IGRpZ2l0YWxfaW9bMThdL2FuYWxvZ19pb1sxMV0gICAgICAgICA8L3RkPjwvdHI+CisgIDx0ciBhbGlnbj0iY2VudGVyIj4gPHRkPiBQaW4tMjQgICAgICAgICAgPC90ZD4gPHRkPiBQQzEvQURDMSAgICAgICAgICAgICAgIDwvdGQ+IDx0ZD4gIEExICAgICAgICAgICAgIDwvdGQ+IDx0ZD4gZGlnaXRhbF9pb1sxOV0vYW5hbG9nX2lvWzEyXSAgICAgICAgIDwvdGQ+PC90cj4KKyAgPHRyIGFsaWduPSJjZW50ZXIiPiA8dGQ+IFBpbi0yNSAgICAgICAgICA8L3RkPiA8dGQ+IFBDMi9BREMyICAgICAgICAgICAgICAgPC90ZD4gPHRkPiAgQTIgICAgICAgICAgICAgPC90ZD4gPHRkPiBkaWdpdGFsX2lvWzIwXS9hbmFsb2dfaW9bMTNdICAgICAgICAgPC90ZD48L3RyPgorICA8dHIgYWxpZ249ImNlbnRlciI+IDx0ZD4gUGluLTI2ICAgICAgICAgIDwvdGQ+IDx0ZD4gUEMzL0FEQzMgICAgICAgICAgICAgICA8L3RkPiA8dGQ+ICBBMyAgICAgICAgICAgICA8L3RkPiA8dGQ+IGRpZ2l0YWxfaW9bMjFdL2FuYWxvZ19pb1sxNF0gICAgICAgICA8L3RkPjwvdHI+CisgIDx0ciBhbGlnbj0iY2VudGVyIj4gPHRkPiBQaW4tMjcgICAgICAgICAgPC90ZD4gPHRkPiBQQzQvQURDNC9TREEgICAgICAgICAgIDwvdGQ+IDx0ZD4gIEE0ICAgICAgICAgICAgIDwvdGQ+IDx0ZD4gZGlnaXRhbF9pb1syMl0vYW5hbG9nX2lvWzE1XSAgICAgICAgIDwvdGQ+PC90cj4KKyAgPHRyIGFsaWduPSJjZW50ZXIiPiA8dGQ+IFBpbi0yOCAgICAgICAgICA8L3RkPiA8dGQ+IFBDNS9BREM1L1NDTCAgICAgICAgICAgPC90ZD4gPHRkPiAgQTUgICAgICAgICAgICAgPC90ZD4gPHRkPiBkaWdpdGFsX2lvWzIzXS9hbmFsb2dfaW9bMTZdICAgICAgICAgPC90ZD48L3RyPgorICA8dHIgYWxpZ249ImNlbnRlciI+IDx0ZCBjb2xzcGFuPSI0Ij4gICBBZGRpdGlvbmFsIFBhZCB1c2VkIGZvciBFeHRlcm5hbSBST00vUkFNL1VTQiA8L3RkPjwvdHI+CisgIDx0ciBhbGlnbj0iY2VudGVyIj4gPHRkPiBTZmxhc2ggICAgICAgICAgPC90ZD4gPHRkPiBzZmxhc2hfc2NrICAgICAgICAgICAgIDwvdGQ+IDx0ZD4gICAgICAgICAgICAgICAgIDwvdGQ+IDx0ZD4gZGlnaXRhbF9pb1syNF0gICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+PC90cj4KKyAgPHRyIGFsaWduPSJjZW50ZXIiPiA8dGQ+IFNGbGFzaCAgICAgICAgICA8L3RkPiA8dGQ+IHNmbGFzaF9zcyAgICAgICAgICAgICAgPC90ZD4gPHRkPiAgICAgICAgICAgICAgICAgPC90ZD4gPHRkPiBkaWdpdGFsX2lvWzI1XSAgICAgICAgICAgICAgICAgICAgICAgPC90ZD48L3RyPgorICA8dHIgYWxpZ249ImNlbnRlciI+IDx0ZD4gU0ZsYXNoICAgICAgICAgIDwvdGQ+IDx0ZD4gc2ZsYXNoX2lvMCAgICAgICAgICAgICA8L3RkPiA8dGQ+ICAgICAgICAgICAgICAgICA8L3RkPiA8dGQ+IGRpZ2l0YWxfaW9bMjZdICAgICAgICAgICAgICAgICAgICAgICA8L3RkPjwvdHI+CisgIDx0ciBhbGlnbj0iY2VudGVyIj4gPHRkPiBTRmxhc2ggICAgICAgICAgPC90ZD4gPHRkPiBzZmxhc2hfaW8xICAgICAgICAgICAgIDwvdGQ+IDx0ZD4gICAgICAgICAgICAgICAgIDwvdGQ+IDx0ZD4gZGlnaXRhbF9pb1syN10gICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+PC90cj4KKyAgPHRyIGFsaWduPSJjZW50ZXIiPiA8dGQ+IFNGbGFzaCAgICAgICAgICA8L3RkPiA8dGQ+IHNmbGFzaF9pbzIgICAgICAgICAgICAgPC90ZD4gPHRkPiAgICAgICAgICAgICAgICAgPC90ZD4gPHRkPiBkaWdpdGFsX2lvWzI4XSAgICAgICAgICAgICAgICAgICAgICAgPC90ZD48L3RyPgorICA8dHIgYWxpZ249ImNlbnRlciI+IDx0ZD4gU0ZsYXNoICAgICAgICAgIDwvdGQ+IDx0ZD4gc2ZsYXNoX2lvMyAgICAgICAgICAgICA8L3RkPiA8dGQ+ICAgICAgICAgICAgICAgICA8L3RkPiA8dGQ+IGRpZ2l0YWxfaW9bMjldICAgICAgICAgICAgICAgICAgICAgICA8L3RkPjwvdHI+CisgIDx0ciBhbGlnbj0iY2VudGVyIj4gPHRkPiBTU1JBTSAgICAgICAgICAgPC90ZD4gPHRkPiBSZXNlcnZlZCAgICAgICAgICAgICAgIDwvdGQ+IDx0ZD4gICAgICAgICAgICAgICAgIDwvdGQ+IDx0ZD4gZGlnaXRhbF9pb1szMF0gICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+PC90cj4KKyAgPHRyIGFsaWduPSJjZW50ZXIiPiA8dGQ+IFNTUkFNICAgICAgICAgICA8L3RkPiA8dGQ+IFJlc2VydmVkICAgICAgICAgICAgICAgPC90ZD4gPHRkPiAgICAgICAgICAgICAgICAgPC90ZD4gPHRkPiBkaWdpdGFsX2lvWzMxXSAgICAgICAgICAgICAgICAgICAgICAgPC90ZD48L3RyPgorICA8dHIgYWxpZ249ImNlbnRlciI+IDx0ZD4gU1NSQU0gICAgICAgICAgIDwvdGQ+IDx0ZD4gUmVzZXJ2ZWQgICAgICAgICAgICAgICA8L3RkPiA8dGQ+ICAgICAgICAgICAgICAgICA8L3RkPiA8dGQ+IGRpZ2l0YWxfaW9bMzJdICAgICAgICAgICAgICAgICAgICAgICA8L3RkPjwvdHI+CisgIDx0ciBhbGlnbj0iY2VudGVyIj4gPHRkPiBTU1JBTSAgICAgICAgICAgPC90ZD4gPHRkPiBSZXNlcnZlZCAgICAgICAgICAgICAgIDwvdGQ+IDx0ZD4gICAgICAgICAgICAgICAgIDwvdGQ+IDx0ZD4gZGlnaXRhbF9pb1szM10gICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+PC90cj4KKyAgPHRyIGFsaWduPSJjZW50ZXIiPiA8dGQ+IFNTUkFNICAgICAgICAgICA8L3RkPiA8dGQ+IHVhcnRtIHJ4ZCAgICAgICAgICAgICAgPC90ZD4gPHRkPiAgICAgICAgICAgICAgICAgPC90ZD4gPHRkPiBkaWdpdGFsX2lvWzM0XSAgICAgICAgICAgICAgICAgICAgICAgPC90ZD48L3RyPgorICA8dHIgYWxpZ249ImNlbnRlciI+IDx0ZD4gU1NSQU0gICAgICAgICAgIDwvdGQ+IDx0ZD4gdWFydG0gdHhkICAgICAgICAgICAgICA8L3RkPiA8dGQ+ICAgICAgICAgICAgICAgICA8L3RkPiA8dGQ+IGRpZ2l0YWxfaW9bMzVdICAgICAgICAgICAgICAgICAgICAgICA8L3RkPjwvdHI+CisgIDx0ciBhbGlnbj0iY2VudGVyIj4gPHRkPiB1c2IxLjEgICAgICAgICAgPC90ZD4gPHRkPiB1c2JfZHAgICAgICAgICAgICAgICAgIDwvdGQ+IDx0ZD4gICAgICAgICAgICAgICAgIDwvdGQ+IDx0ZD4gZGlnaXRhbF9pb1szNl0gICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+PC90cj4KKyAgPHRyIGFsaWduPSJjZW50ZXIiPiA8dGQ+IHVzYjEuMSAgICAgICAgICA8L3RkPiA8dGQ+IHVzYl9kbiAgICAgICAgICAgICAgICAgPC90ZD4gPHRkPiAgICAgICAgICAgICAgICAgPC90ZD4gPHRkPiBkaWdpdGFsX2lvWzM3XSAgICAgICAgICAgICAgICAgICAgICAgPC90ZD48L3RyPgorPC90YWJsZT4KKyMgU3ViIElQIGZlYXR1cmVzCisKKyMjIFJJU0MgViBDb3JlCisKK1Jpc2NkdWlubyBTT0MgSW50ZWdyYXRlZCBTeW50YWNvcmUgU0NSMSBPcGVuLXNvdXJjZSBSSVNWLVYgY29tcGF0aWJsZSBNQ1UtY2xhc3MgY29yZS4KK0l0IGlzIGluZHVzdHJ5LWdyYWRlIGFuZCBzaWxpY29uLXByb3ZlbiBJUC4gR2l0IGxpbms6IGh0dHBzOi8vZ2l0aHViLmNvbS9zeW50YWNvcmUvc2NyMQorCisjIyMgQmxvY2sgRGlhZ3JhbQorPHRhYmxlPgorICA8dHI+CisgICAgPHRkICBhbGlnbj0iY2VudGVyIj48aW1nIHNyYz0iLi9kb2NzL3NvdXJjZS9fc3RhdGljL3N5bnRhY29yZV9ibG9ja2RpYWdyYW0uc3ZnIiA+PC90ZD4KKyAgPC90cj4KKzwvdGFibGU+CisKKyMjIyBSSVNDIFYgQ29yZSBLZXkgZmVhdHVyZQorYGBgCisgICAqIFJWMzJJIG9yIFJWMzJFIElTQSBiYXNlICsgb3B0aW9uYWwgUlZNIGFuZCBSVkMgc3RhbmRhcmQgZXh0ZW5zaW9ucworICAgKiBNYWNoaW5lIHByaXZpbGVnZSBtb2RlIG9ubHkKKyAgICogMiB0byA0IHN0YWdlIHBpcGVsaW5lCisgICAqIE9wdGlvbmFsIEludGVncmF0ZWQgUHJvZ3JhbW1hYmxlIEludGVycnVwdCBDb250cm9sbGVyIHdpdGggMTYgSVJRIGxpbmVzCisgICAqIE9wdGlvbmFsIFJJU0MtViBEZWJ1ZyBzdWJzeXN0ZW0gd2l0aCBKVEFHIGludGVyZmFjZQorICAgKiBPcHRpb25hbCBvbi1jaGlwIFRpZ2h0bHktQ291cGxlZCBNZW1vcnkKK2BgYAorCisjIyMgUklTQyBWIGNvcmUgY3VzdG9taXphdGlvbiBSaXNjZHVpbm8gU09DCisgIAorCisqICoqVXBkYXRlKio6IE1vZGlmaWVkIHNvbWUgb2YgdGhlIHN5c3RlbSB2ZXJpbG9nIHN5bnRheCB0byBiYXNpYyB2ZXJpbG9nIHN5bnRheCB0byBjb21waWxlL3N5bnRoZXNpcyBpbiBvcGVuIHNvdXJjZSB0b29sIGxpa2Ugc2ltdWxhdG9yIChpdmVyaWxvZykgYW5kIHN5bnRoZXNpcyAoeW9zeXMpLgorKiAqKk1vZGlmaWNhdGlvbioqOiBNb2RpZmllZCB0aGUgQVhJL0FIQiBpbnRlcmZhY2UgdG8gd2lzaGJvbmUgaW50ZXJmYWNlIHRvd2FyZHMgaW5zdHJ1Y3Rpb24gJiBkYXRhIG1lbW9yeSBpbnRlcmZhY2UKKworCisjIFNPQyBNZW1vcnkgTWFwCisKKzx0YWJsZT4KKyAgPHRyPgorICAgIDx0ZCAgYWxpZ249ImNlbnRlciI+IFJJU0MgSU1FTTwvdGQ+IAorICAgIDx0ZCAgYWxpZ249ImNlbnRlciI+IFJJU0MgRE1FTTwvdGQ+CisgICAgPHRkICBhbGlnbj0iY2VudGVyIj4gRVhUIE1BUDwvdGQ+CisgICAgPHRkICBhbGlnbj0iY2VudGVyIj4gVGFyZ2V0IElQPC90ZD4KKyAgPC90cj4KKyAgPHRyPgorICAgIDx0ZCAgYWxpZ249ImNlbnRlciI+IDB4MDAwMF8wMDAwIHRvIDB4MEZGRl9GRkZGICA8L3RkPiAKKyAgICA8dGQgIGFsaWduPSJjZW50ZXIiPiAweDAwMDBfMDAwMCB0byAweDBGRkZfRkZGRiAgPC90ZD4KKyAgICA8dGQgIGFsaWduPSJjZW50ZXIiPiAweDAwMDBfMDAwMCB0byAweDBGRkZfRkZGRjwvdGQ+CisgICAgPHRkICBhbGlnbj0iY2VudGVyIj4gUVNQSSBGTEFTSCBNRU1PUlk8L3RkPgorICA8L3RyPgorICA8dHI+CisgICAgPHRkICBhbGlnbj0iY2VudGVyIj4gMHgxMDAwXzAwMDAgdG8gMHgxMDAwXzAwRkY8L3RkPiAKKyAgICA8dGQgIGFsaWduPSJjZW50ZXIiPiAweDEwMDBfMDAwMCB0byAweDEwMDBfMDBGRjwvdGQ+CisgICAgPHRkICBhbGlnbj0iY2VudGVyIj4gMHgxMDAwXzAwMDAgdG8gMHgxMDAwXzAwRkY8L3RkPgorICAgIDx0ZCAgYWxpZ249ImNlbnRlciI+IFFTUEkgQ29uZmlnIFJlZzwvdGQ+CisgIDwvdHI+CisgIDx0cj4KKyAgICA8dGQgIGFsaWduPSJjZW50ZXIiPiAweDEwMDFfMDAwMCB0byAweDEwMDFfMDAzRjwvdGQ+IAorICAgIDx0ZCAgYWxpZ249ImNlbnRlciI+IDB4MTAwMV8wMDAwIHRvIDB4MTAwMV8wMDNGPC90ZD4KKyAgICA8dGQgIGFsaWduPSJjZW50ZXIiPiAweDEwMDFfMDAwMCB0byAweDEwMDFfMDAzRjwvdGQ+CisgICAgPHRkICBhbGlnbj0iY2VudGVyIj4gVUFSVDwvdGQ+CisgIDwvdHI+CisgIDx0cj4KKyAgICA8dGQgIGFsaWduPSJjZW50ZXIiPiAweDEwMDFfMDA0MCB0byAweDEwMDFfMDA3RjwvdGQ+IAorICAgIDx0ZCAgYWxpZ249ImNlbnRlciI+IDB4MTAwMV8wMDQwIHRvIDB4MTAwMV8wMDdGPC90ZD4KKyAgICA8dGQgIGFsaWduPSJjZW50ZXIiPiAweDEwMDFfMDA0MCB0byAweDEwMDFfMDA3RjwvdGQ+CisgICAgPHRkICBhbGlnbj0iY2VudGVyIj4gSTJDPC90ZD4KKyAgPC90cj4KKyAgPHRyPgorICAgIDx0ZCAgYWxpZ249ImNlbnRlciI+IDB4MTAwMV8wMDgwIHRvIDB4MTAwMV8wMEJGPC90ZD4gCisgICAgPHRkICBhbGlnbj0iY2VudGVyIj4gMHgxMDAxXzAwODAgdG8gMHgxMDAxXzAwQkY8L3RkPgorICAgIDx0ZCAgYWxpZ249ImNlbnRlciI+IDB4MTAwMV8wMDgwIHRvIDB4MTAwMV8wMEJGPC90ZD4KKyAgICA8dGQgIGFsaWduPSJjZW50ZXIiPiBVU0I8L3RkPgorICA8L3RyPgorICA8dHI+CisgICAgPHRkICBhbGlnbj0iY2VudGVyIj4gMHgxMDAxXzAwQzAgdG8gMHgxMDAxXzAwRkY8L3RkPiAKKyAgICA8dGQgIGFsaWduPSJjZW50ZXIiPiAweDEwMDFfMDBDMCB0byAweDEwMDFfMDBGRjwvdGQ+CisgICAgPHRkICBhbGlnbj0iY2VudGVyIj4gMHgxMDAxXzAwQzAgdG8gMHgxMDAxXzAwRkY8L3RkPgorICAgIDx0ZCAgYWxpZ249ImNlbnRlciI+IFNTUEk8L3RkPgorICA8L3RyPgorICA8dHI+CisgICAgPHRkICBhbGlnbj0iY2VudGVyIj4gMHgxMDAyXzAwODAgdG8gMHgxMDAyXzAwRkY8L3RkPiAKKyAgICA8dGQgIGFsaWduPSJjZW50ZXIiPiAweDEwMDJfMDA4MCB0byAweDEwMDJfMDBGRjwvdGQ+CisgICAgPHRkICBhbGlnbj0iY2VudGVyIj4gMHgxMDAyXzAwODAgdG8gMHgxMDAyXzAwRkY8L3RkPgorICAgIDx0ZCAgYWxpZ249ImNlbnRlciI+IFBJTk1VWDwvdGQ+CisgIDwvdHI+CisgIDx0cj4KKyAgICA8dGQgIGFsaWduPSJjZW50ZXIiPiAweDEwMDNfMDA4MCB0byAweDEwMDNfMDdGRjwvdGQ+IAorICAgIDx0ZCAgYWxpZ249ImNlbnRlciI+IDB4MTAwM18wMDgwIHRvIDB4MTAwM18wN0ZGPC90ZD4KKyAgICA8dGQgIGFsaWduPSJjZW50ZXIiPiAweDEwMDNfMDA4MCB0byAweDEwMDNfMDdGRjwvdGQ+CisgICAgPHRkICBhbGlnbj0iY2VudGVyIj4gU1JBTS0wICgyS0IpPC90ZD4KKyAgPC90cj4KKyAgPHRyPgorICAgIDx0ZCAgYWxpZ249ImNlbnRlciI+IDB4MTAwM18wODAwIHRvIDB4MTAwM18wRkZGPC90ZD4gCisgICAgPHRkICBhbGlnbj0iY2VudGVyIj4gMHgxMDAzXzA4MDAgdG8gMHgxMDAzXzBGRkY8L3RkPgorICAgIDx0ZCAgYWxpZ249ImNlbnRlciI+IDB4MTAwM18wODAwIHRvIDB4MTAwM18wRkZGPC90ZD4KKyAgICA8dGQgIGFsaWduPSJjZW50ZXIiPiBTUkFNLTEgKDJLQik8L3RkPgorICA8L3RyPgorICA8dHI+CisgICAgPHRkICBhbGlnbj0iY2VudGVyIj4gMHgxMDAzXzEwMDAgdG8gMHgxMDAzXzE3RkY8L3RkPiAKKyAgICA8dGQgIGFsaWduPSJjZW50ZXIiPiAweDEwMDNfMTAwMCB0byAweDEwMDNfMTdGRjwvdGQ+CisgICAgPHRkICBhbGlnbj0iY2VudGVyIj4gMHgxMDAzXzEwMDAgdG8gMHgxMDAzXzE3RkY8L3RkPgorICAgIDx0ZCAgYWxpZ249ImNlbnRlciI+IFNSQU0tMiAoMktCKTwvdGQ+CisgIDwvdHI+CisgIDx0cj4KKyAgICA8dGQgIGFsaWduPSJjZW50ZXIiPiAweDEwMDNfMTgwMCB0byAweDEwMDNfMUZGRjwvdGQ+IAorICAgIDx0ZCAgYWxpZ249ImNlbnRlciI+IDB4MTAwM18xODAwIHRvIDB4MTAwM18xRkZGPC90ZD4KKyAgICA8dGQgIGFsaWduPSJjZW50ZXIiPiAweDEwMDNfMTgwMCB0byAweDEwMDNfMUZGRjwvdGQ+CisgICAgPHRkICBhbGlnbj0iY2VudGVyIj4gU1JBTS0zICgyS0IpPC90ZD4KKyAgPC90cj4KKyAgPHRyPgorICAgIDx0ZCAgYWxpZ249ImNlbnRlciI+IC08L3RkPiAKKyAgICA8dGQgIGFsaWduPSJjZW50ZXIiPiAtPC90ZD4KKyAgICA8dGQgIGFsaWduPSJjZW50ZXIiPiAweDMwODBfMDAwMCB0byAweDMwODBfMDBGRjwvdGQ+CisgICAgPHRkICBhbGlnbj0iY2VudGVyIj4gV0IgSE9TVDwvdGQ+CisgIDwvdHI+Cis8L3RhYmxlPgorCisjIFNPQyBTaXplCisKK3wgQmxvY2sgICAgICAgICAgICAgfCBUb3RhbCBDZWxsIHwgU2VxICAgICAgfCBDb21ibyAgIHwKK3wgLS0tLS0tICAgICAgICAgICAgfCAtLS0tLS0tLS0gIHwgLS0tLS0tLS0gfCAtLS0tLSAgIHwKK3wgUklTQyAgICAgICAgICAgICAgfCAyMDk4MiAgICAgIHwgMzE2NCAgICAgfCAxNzgxOCAgIHwKK3wgUElOTVVYICAgICAgICAgICAgfCA1NjkzICAgICAgIHwgMTAyMiAgICAgfCAgNDY3MSAgIHwKK3wgU1BJICAgICAgICAgICAgICAgfCA3MTIwICAgICAgIHwgMTI4MSAgICAgfCAgNTgzOSAgIHwKK3wgVUFSVF9JMkNfVVNCX1NQSSAgfCAxMTE5NiAgICAgIHwgMjQ0OCAgICAgfCAgODc0OCAgIHwKK3wgV0JfSE9TVCAgICAgICAgICAgfCAyNzk2ICAgICAgIHwgNTg4ICAgICAgfCAgMjIwOCAgIHwKK3wgV0JfSU5UQyAgICAgICAgICAgfCAxODc4ICAgICAgIHwgMTA4ICAgICAgfCAgMTc3MCAgIHwKK3wgU0FSX0FEQyAgICAgICAgICAgfCAxMTggICAgICAgIHwgIDE4ICAgICAgfCAgIDEwMCAgIHwKK3wgTUJJU1QgICAgICAgICAgICAgfCAzMTI1ICAgICAgIHwgNTQzICAgICAgfCAgMjU4MiAgIHwKK3wgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICAgIHwKK3wgVE9UQUwgICAgICAgICAgICAgfCA1MjkwOCAgICAgIHwgOTE3MiAgICAgfCA0MzczNiAgIHwKKworCisKKyMgU09DIFJlZ2lzdGVyIE1hcAorIyMjIyMgUmVnaXN0ZXIgTWFwOiBXaXNoYm9uZSBIT1NUCisKK3wgT2Zmc2V0IHwgTmFtZSAgICAgICB8IERlc2NyaXB0aW9uICAgfAorfCAtLS0tLS0gfCAtLS0tLS0tLS0gIHwgLS0tLS0tLS0tLS0tLSB8Cit8IDB4MDAgICB8IEdMQkxfQ1RSTCAgfCBbUlddIEdsb2JhbCBXaXNoYm9uZSBBY2Nlc3MgQ29udHJvbCBSZWdpc3RlciB8Cit8IDB4MDQgICB8IEJBTktfQ1RSTCAgfCBbUlddIEJhbmsgU2VsZWN0aW9uLCBNU0IgOCBiaXQgQWRkcmVzcyB8Cit8IDB4MDggICB8IENMS19TS0VXX0NUUkwxfCBbUlddIENsb2NrIFNrZXcgQ29udHJvbDIgfAorfCAweDBjICAgfCBDTEtfU0tFV19DVFJMMiB8IFtSV10gQ2xvY2sgU2tldyBDb250cm9sMiB8CisKKyMjIyMjIFJlZ2lzdGVyOiBHTEJMX0NUUkwKKworfCBCaXRzICB8IE5hbWUgICAgICAgICAgfCBEZXNjcmlwdGlvbiAgICB8Cit8IC0tLS0gIHwgLS0tLSAgICAgICAgICB8IC0tLS0tLS0tLS0tLS0tIHwKK3wgMzE6MjQgfCBSZXNldmVyZWQgICAgIHwgVW5zdXNlZCB8Cit8IDIzOjIwIHwgUlRDX0NMS19DVFJMICB8IFJUQyBDbG9jayBEaXYgU2VsZWN0aW9uIHwKK3wgMTk6MTYgfCBDUFVfQ0xLX0NUUkwgIHwgQ1BVIENsb2NrIERpdiBTZWxlY3Rpb24gfAorfCAxNToxMiB8IFNEQVJNX0NMS19DVFJMfCBTRFJBTSBDbG9jayBEaXYgU2VsZWN0aW9uIHwKK3wgMTA6OCAgfCBXQl9DTEtfQ1RSTCAgIHwgQ29yZSBXaXNoYm9uZSBDbG9jayBEaXYgU2VsZWN0aW9uIHwKK3wgICA3ICAgfCBVQVJUX0kyQ19TRUwgIHwgMCAtIFVBUlQgLCAxIC0gSTJDIE1hc3RlciBJTyBTZWxlY3Rpb24gfAorfCAgIDUgICB8IEkyQ19SU1QgICAgICAgfCBJMkMgUmVzZXQgQ29udHJvbCB8Cit8ICAgNCAgIHwgVUFSVF9SU1QgICAgICB8IFVBUlQgUmVzZXQgQ29udHJvbCB8Cit8ICAgMyAgIHwgU0RSQU1fUlNUICAgICB8IFNEUkFNIFJlc2V0IENvbnRyb2wgfAorfCAgIDIgICB8IFNQSV9SU1QgICAgICAgfCBTUEkgUmVzZXQgQ29udHJvbCB8Cit8ICAgMSAgIHwgQ1BVX1JTVCAgICAgICB8IENQVSBSZXNldCBDb250cm9sIHwKK3wgICAwICAgfCBXQl9SU1QgICAgICAgIHwgV2lzaGJvbmUgQ29yZSBSZXNldCBDb250cm9sIHwKKworIyMjIyMgUmVnaXN0ZXI6IEJBTktfQ1RSTAorCit8IEJpdHMgIHwgTmFtZSAgICAgICAgICB8IERlc2NyaXB0aW9uICAgIHwKK3wgLS0tLSAgfCAtLS0tICAgICAgICAgIHwgLS0tLS0tLS0tLS0tLS0gfAorfCAzMToyNCB8IFJlc2V2ZXJlZCAgICAgfCBVbnN1c2VkIHwKK3wgNzowICAgfCBCQU5LX1NFTCAgICAgIHwgSG9sZHMgdGhlIHVwcGVyIDggYml0IGFkZHJlc3MgY29yZSBXaXNoYm9uZSBBZGRyZXNzIHwKKworIyMjIyMgUmVnaXN0ZXI6IENMS19TS0VXX0NUUkwxCisKK3wgQml0cyAgfCBOYW1lICAgICAgICAgIHwgRGVzY3JpcHRpb24gICAgfAorfCAtLS0tICB8IC0tLS0gICAgICAgICAgfCAtLS0tLS0tLS0tLS0tLSB8Cit8IDMxOjI4IHwgUmVzZXZlcmVkICAgICB8IFVuc3VzZWQgfAorfCAyNzoyNCB8IENMS19TS0VXX1dCICAgfCBXaXNoQm9uZSBDb3JlIENsayBTa2V3IENvbnRyb2wgfAorfCAyMzoyMCB8IENMS19TS0VXX0dMQkwgfCBHbGJhbCBSZWdpc3RlciBDbGsgU2tldyBDb250cm9sIHwKK3wgMTk6MTYgfCBDTEtfU0tFV19TRFJBTXwgU0RSQU0gQ2xrIFNrZXcgQ29udHJvbCB8Cit8IDE1OjEyIHwgQ0xLX1NLRVdfU1BJICB8IFNQSSBDbGsgU2tldyBDb250cm9sIHwKK3wgMTE6OCAgfCBDTEtfU0tFV19VQVJUIHwgVUFSVC9JMkMgQ2xrIFNrZXcgQ29udHJvbCB8Cit8IDc6NCAgIHwgQ0xLX1NLRVdfUklTQyB8IFJJU0MgQ2xrIFNrZXcgQ29udHJvbCB8Cit8IDM6MCAgIHwgQ0xLX1NLRVdfV0kgICB8IFdpc2hib25lIENsayBTa2V3IENvbnRyb2wgfAorCisjIyMjIyBSZWdpc3RlciBNYXA6IFNQSSBNQVNURVIKKworfCBPZmZzZXQgfCBOYW1lICAgICAgIHwgRGVzY3JpcHRpb24gICB8Cit8IC0tLS0tLSB8IC0tLS0tLS0tLSAgfCAtLS0tLS0tLS0tLS0tIHwKK3wgMHgwMCAgIHwgR0xCTF9DVFJMICB8IFtSV10gR2xvYmFsIFNQSSBBY2Nlc3MgQ29udHJvbCBSZWdpc3RlciB8Cit8IDB4MDQgICB8IERNRU1fQ1RSTDEgfCBbUlddIERpcmVjdCBTUEkgTWVtb3J5IEFjY2VzcyBDb250cm9sIFJlZ2lzdGVyMSB8Cit8IDB4MDggICB8IERNRU1fQ1RSTDIgfCBbUlddIERpcmVjdCBTUEkgTWVtb3J5IEFjY2VzcyBDb250cm9sIFJlZ2lzdGVyMiB8Cit8IDB4MGMgICB8IElNRU1fQ1RSTDEgfCBbUlddIEluZGlyZWN0IFNQSSBNZW1vcnkgQWNjZXNzIENvbnRyb2wgUmVnaXN0ZXIxIHwKK3wgMHgxMCAgIHwgSU1FTV9DVFJMMiB8IFtSV10gSW5kaXJlY3QgU1BJIE1lbW9yeSBBY2Nlc3MgQ29udHJvbCBSZWdpc3RlcjIgfAorfCAweDE0ICAgfCBJTUVNX0FERFIgIHwgW1JXXSBJbmRpcmVjdCBTUEkgTWVtb3J5IEFkZHJlc3MgIHwKK3wgMHgxOCAgIHwgSU1FTV9XREFUQSB8IFtXXSAgSW5kaXJlY3QgU1BJIE1lbW9yeSBXcml0ZSBEYXRhIHwKK3wgMHgxYyAgIHwgSU1FTV9SREFUQSB8IFtSXSAgSW5kaXJlY3QgU1BJIE1lbW9yeSBSZWFkIERhdGEgfAorfCAweDIwICAgfCBTUElfU1RBVFVTIHwgW1JdIFNQSSBEZWJ1ZyBTdGF0dXMgfAorCisjIyMjIyBSZWdpc3RlcjogR0xCTF9DVFJMCisKK3wgQml0cyAgfCBOYW1lICAgICAgICB8IERlc2NyaXB0aW9uICAgIHwKK3wgLS0tLSAgfCAtLS0tICAgICAgICB8IC0tLS0tLS0tLS0tLS0tIHwKK3wgMzE6MTYgfCBSZXNldmVyZWQgICB8IFVuc3VzZWQgfAorfCAxNTo4ICB8IFNQSV9DTEtfRElWIHwgU1BJIENsb2NrIERpdiBSYXRvIFNlbGVjdGlvbiB8Cit8IDc6NCAgIHwgUmVzZXJ2ZWQgICAgfCBVbnVzZWQgfAorfCAzOjIgICB8IENTX0xBVEUgICAgIHwgQ1MgREVfQVNTRVJUSU9OIENPTlRST0wgfAorfCAxOjAgICB8IENTX0VBUkxZICAgIHwgQ1MgQVNTRVJUSU9OIENPTlRST0wgfAorCisjIyMjIyBSZWdpc3RlcjogRE1FTV9DVFJMMQorCit8IEJpdHMgfCBOYW1lICAgICAgIHwgRGVzY3JpcHRpb24gICAgfAorfCAtLS0tIHwgLS0tLSAgICAgICB8IC0tLS0tLS0tLS0tLS0tIHwKK3wgMzE6OSB8IFJlc2V2ZXJlZCAgfCBVbnN1c2VkICAgICAgICB8Cit8IDggICAgfCBGU01fUlNUICAgIHwgRGlyZWN0IE1lbSBTdGF0ZSBNYWNoaW5lIFJlc2V0IHwKK3wgNzo2ICB8IFNQSV9TV0lUQ0ggfCBQaGFzZSBhdCB3aGljaCBTUEkgTW9kZSBuZWVkIHRvIHN3aXRjaCB8Cit8IDU6NCAgfCBTUElfTU9ERSAgIHwgU1BJIE1vZGUsIDAgLSBTaW5nbGUsIDEgLSBEdWFsLCAyIC0gUXVhZCwgMyAtIFFERFIgfAorfCAzOjAgIHwgQ1NfU0VMRUNUICB8IENISVAgU0VMRUNUIHwKKworIyMjIyMgUmVnaXN0ZXI6IERNRU1fQ1RSTDIKKworfCBCaXRzIHwgTmFtZSAgICAgICB8IERlc2NyaXB0aW9uICAgIHwKK3wgLS0tLSB8IC0tLS0gICAgICAgfCAtLS0tLS0tLS0tLS0tLSB8Cit8IDMxOjI0IHwgREFUQV9DTlQgIHwgVG90YWwgRGF0YSBCeXRlIENvdW50ICAgICAgICB8Cit8IDIzOjIyIHwgRFVNTVlfQ05UIHwgVG90YWwgRHVtbXkgQnl0ZSBDb3VudCB8Cit8IDIxOjIwIHwgQUREUl9DTlQgIHwgVG90YWwgQWRkcmVzcyBCeXRlIENvdW50IHwKK3wgMTk6MTYgfCBTUElfU0VRICAgfCBTUEkgQWNjZXNzIFNlcXVlbmNlIHwKK3wgMTU6OCAgfCBNT0RFX1JFRyAgfCBNb2RlIFJlZ2lzdGVyIFZhbHVlIHwKK3wgNzowICAgfCBDTURfUkVHICAgfCBDb21tYW5kIFJlZ2lzdGVyIFZhbHVlIHwKKworIyMjIyMgUmVnaXN0ZXI6IElNRU1fQ1RSTDEKKworfCBCaXRzIHwgTmFtZSAgICAgICB8IERlc2NyaXB0aW9uICAgIHwKK3wgLS0tLSB8IC0tLS0gICAgICAgfCAtLS0tLS0tLS0tLS0tLSB8Cit8IDMxOjkgfCBSZXNldmVyZWQgIHwgVW5zdXNlZCAgICAgICAgfAorfCA4ICAgIHwgRlNNX1JTVCAgICB8IEluRGlyZWN0IE1lbSBTdGF0ZSBNYWNoaW5lIFJlc2V0IHwKK3wgNzo2ICB8IFNQSV9TV0lUQ0ggfCBQaGFzZSBhdCB3aGljaCBTUEkgTW9kZSBuZWVkIHRvIHN3aXRjaCB8Cit8IDU6NCAgfCBTUElfTU9ERSAgIHwgU1BJIE1vZGUsIDAgLSBTaW5nbGUsIDEgLSBEdWFsLCAyIC0gUXVhZCwgMyAtIFFERFIgfAorfCAzOjAgIHwgQ1NfU0VMRUNUICB8IENISVAgU0VMRUNUIHwKKworIyMjIyMgUmVnaXN0ZXI6IElNRU1fQ1RSTDIKKworfCBCaXRzIHwgTmFtZSAgICAgICB8IERlc2NyaXB0aW9uICAgIHwKK3wgLS0tLSB8IC0tLS0gICAgICAgfCAtLS0tLS0tLS0tLS0tLSB8Cit8IDMxOjI0IHwgREFUQV9DTlQgIHwgVG90YWwgRGF0YSBCeXRlIENvdW50ICAgICAgICB8Cit8IDIzOjIyIHwgRFVNTVlfQ05UIHwgVG90YWwgRHVtbXkgQnl0ZSBDb3VudCB8Cit8IDIxOjIwIHwgQUREUl9DTlQgIHwgVG90YWwgQWRkcmVzcyBCeXRlIENvdW50IHwKK3wgMTk6MTYgfCBTUElfU0VRICAgfCBTUEkgQWNjZXNzIFNlcXVlbmNlIHwKK3wgMTU6OCAgfCBNT0RFX1JFRyAgfCBNb2RlIFJlZ2lzdGVyIFZhbHVlIHwKK3wgNzowICAgfCBDTURfUkVHICAgfCBDb21tYW5kIFJlZ2lzdGVyIFZhbHVlIHwKKworIyMjIyMgUmVnaXN0ZXI6IElNRU1fQUREUgorCit8IEJpdHMgfCBOYW1lICAgICAgIHwgRGVzY3JpcHRpb24gICAgfAorfCAtLS0tIHwgLS0tLSAgICAgICB8IC0tLS0tLS0tLS0tLS0tIHwKK3wgMzE6MCB8IEFERFIgICAgICAgfCBJbmRpcmVjdCBNZW1vcnkgQWRkcmVzcyAgfAorCisjIyMjIyBSZWdpc3RlcjogSU1FTV9XREFUQQorCit8IEJpdHMgfCBOYW1lICAgICAgIHwgRGVzY3JpcHRpb24gICAgfAorfCAtLS0tIHwgLS0tLSAgICAgICB8IC0tLS0tLS0tLS0tLS0tIHwKK3wgMzE6MCB8IFdEQVRBICAgICAgfCBJbmRpcmVjdCBNZW1vcnkgV3JpdGUgRGF0YSAgfAorCisjIyMjIyBSZWdpc3RlcjogSU1FTV9SREFUQQorCit8IEJpdHMgfCBOYW1lICAgICAgIHwgRGVzY3JpcHRpb24gICAgfAorfCAtLS0tIHwgLS0tLSAgICAgICB8IC0tLS0tLS0tLS0tLS0tIHwKK3wgMzE6MCB8IFJEQVRBICAgICAgfCBJbmRpcmVjdCBNZW1vcnkgUmVhZCBEYXRhICB8CisKKyMjIyMjIFJlZ2lzdGVyOiBTUElfU1RBVFVTCisKK3wgQml0cyB8IE5hbWUgICAgICAgfCBEZXNjcmlwdGlvbiAgICB8Cit8IC0tLS0gfCAtLS0tICAgICAgIHwgLS0tLS0tLS0tLS0tLS0gfAorfCAzMTowIHwgREVCVUcgICAgICB8IFNQSSBEZWJ1ZyBTdGF0dXMgIHwKKworCisjIyMjIyBSZWdpc3RlciBNYXA6IEdsb2JhbCBSZWdpc3RlcgorCit8IE9mZnNldCB8IE5hbWUgICAgICAgIHwgRGVzY3JpcHRpb24gICB8Cit8IC0tLS0tLSB8IC0tLS0tLS0tLSAgIHwgLS0tLS0tLS0tLS0tLSB8Cit8IDB4MDAgICB8IFNPRlRfUkVHMCAgIHwgW1JXXSBTb2Z0d2FyZSBSZWdpc3RlcjAgfAorfCAweDA0ICAgfCBSSVNDX0ZVU0UgICB8IFtSV10gUmlzYyBGdXNlIFZhbHVlICB8Cit8IDB4MDggICB8IFNPRlRfUkVHMiAgIHwgW1JXXSBTb2Z0d2FyZSBSZWdpc3RlcjIgfAorfCAweDBjICAgfCBJTlRSX0NUUkwgICB8IFtSV10gSW50ZXJydXB0IENvbnRyb2wgfAorfCAweDEwICAgfCBTRFJBTV9DVFJMMSB8IFtSV10gSW5kaXJlY3QgU1BJIE1lbW9yeSBBY2Nlc3MgQ29udHJvbCBSZWdpc3RlcjIgfAorfCAweDE0ICAgfCBTRFJBTV9DVFJMMiB8IFtSV10gSW5kaXJlY3QgU1BJIE1lbW9yeSBBZGRyZXNzICB8Cit8IDB4MTggICB8IFNPRlRfUkVHNiAgIHwgW1JXXSBTb2Z0d2FyZSBSZWdpc3RlcjYgfAorfCAweDFDICAgfCBTT0ZUX1JFRzcgICB8IFtSV10gU29mdHdhcmUgUmVnaXN0ZXI3IHwKK3wgMHgyMCAgIHwgU09GVF9SRUc4ICAgfCBbUlddIFNvZnR3YXJlIFJlZ2lzdGVyOCB8Cit8IDB4MjQgICB8IFNPRlRfUkVHOSAgIHwgW1JXXSBTb2Z0d2FyZSBSZWdpc3RlcjkgfAorfCAweDI4ICAgfCBTT0ZUX1JFRzEwICB8IFtSV10gU29mdHdhcmUgUmVnaXN0ZXIxMCB8Cit8IDB4MkMgICB8IFNPRlRfUkVHMTEgIHwgW1JXXSBTb2Z0d2FyZSBSZWdpc3RlcjExIHwKK3wgMHgzMCAgIHwgU09GVF9SRUcxMiAgfCBbUlddIFNvZnR3YXJlIFJlZ2lzdGVyMTIgfAorfCAweDM0ICAgfCBTT0ZUX1JFRzEzICB8IFtSV10gU29mdHdhcmUgUmVnaXN0ZXIxMyB8Cit8IDB4MzggICB8IFNPRlRfUkVHMTQgIHwgW1JXXSBTb2Z0d2FyZSBSZWdpc3RlcjE0IHwKK3wgMHgzQyAgIHwgU09GVF9SRUcxNSAgfCBbUlddIFNvZnR3YXJlIFJlZ2lzdGVyMTUgfAorCisjIyMjIyBSZWdpc3RlcjogUklTQ19GVVNFCisKK3wgQml0cyAgfCBOYW1lICAgICAgICB8IERlc2NyaXB0aW9uICAgIHwKK3wgLS0tLSAgfCAtLS0tICAgICAgICB8IC0tLS0tLS0tLS0tLS0tIHwKK3wgMzE6MCAgfCBSSVNDX0ZVU0UgICB8IFJJU0MgQ29yZSBGdXNlIFZhbHVlIHwKKworIyMjIyMgUmVnaXN0ZXI6IElOVFJfQ1RSTAorCit8IEJpdHMgIHwgTmFtZSAgICAgICAgfCBEZXNjcmlwdGlvbiAgICB8Cit8IC0tLS0gIHwgLS0tLSAgICAgICAgfCAtLS0tLS0tLS0tLS0tLSB8Cit8IDMxOjIwIHwgUmVzZXJ2ZWQgICAgfCBVbnVzZWQgICAgICAgICB8Cit8IDE5OjE3IHwgVVNFUl9JUlEgICAgfCBVc2VyIEludGVycnVwdCBnZW5lcmF0aW9uIHRvd2FyZCByaXNjdiAgICAgICAgIHwKK3wgMTYgICAgfCBTT0ZUX0lSUSAgICB8IFNvZnR3YXJlIEludGVycnVwdCBnZW5lcmF0aW9uIHRvd2FyZCByaXNjdiAgICAgfAorfCAxNTowICB8IEVYVF9JUlEgICAgIHwgRXh0ZXJuYWwgSW50ZXJydXB0IGdlbmVyYXRpb24gdG93YXJkIHJpc2N2ICAgICB8CisKKworCisjIFJlcG9zaXRvcnkgY29udGVudHMKKworYGBgCit8dmVyaWxvZworfCAgIOKUnOKUgCAgcnRsCit8ICAgfCAgICAgfC0gIHN5bnRhY29yZQorfCAgIHwgICAgIHwgICAgIHzilIAgIHNjcjEKK3wgICB8ICAgICB8ICAgICB8ICAgIOKUnOKUgCAqKmRvY3MqKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKipTQ1IxIGRvY3VtZW50YXRpb24qKgorfCAgIHwgICAgIHwgICAgIHwgICAgfCAgICAgIOKUnOKUgCBzY3IxX2Vhcy5wZGYgwqAgwqAgwqAgwqAgwqAgwqAgwqAgIHwgU0NSMSBFeHRlcm5hbCBBcmNoaXRlY3R1cmUgU3BlY2lmaWNhdGlvbgorfCAgIHwgICAgIHwgICAgIHwgICAgfCAgICAgIOKUlOKUgCBzY3IxX3VtLnBkZiDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB8IFNDUjEgVXNlciBNYW51YWwKK3wgICB8ICAgICB8ICAgICB8ICAgIHzilIAgICoqc3JjKiogICAgICAgICAgICAgICAgICAgICAgICAgICB8ICoqU0NSMSBSVEwgc291cmNlIGFuZCB0ZXN0YmVuY2ggZmlsZXMqKgorfCAgIHwgICAgIHwgICAgIHwgICAgfCAgIOKUnOKUgCBpbmNsdWRlcyAgICAgICAgICAgICAgICAgICAgICAgfCBIZWFkZXIgZmlsZXMKK3wgICB8ICAgICB8ICAgICB8ICAgIHwgICDilJzilIAgY29yZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ29yZSB0b3Agc291cmNlIGZpbGVzCit8ICAgfCAgICAgfCAgICAgfCAgICB8ICAg4pSc4pSAIHRvcCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENsdXN0ZXIgc291cmNlIGZpbGVzCit8ICAgfCAgICAgfCAgICAgfCAgICB84pSAICAqKnN5bnRoKiogICAgICAgICAgICAgICAgICAgICAgICAgfCAqKlNDUjEgUlRMIFN5bnRoZXNpcyBmaWxlcyAqKgorfCAgIHwgICAgIHwtIFFzcGlfbWFzdGVyCit8ICAgfCAgICAgfCAgICAgfC0gc3JjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUWFyZCBTUEkgTWFzdGVyIFNvdXJjZSBmaWxlcworfCAgIHwgICAgIHwtd2JfaW50ZXJjb25uZWN0Cit8ICAgfCAgICAgfCAgICAgfC0gc3JjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgM3g0IFdpc2hib25lIEludGVyY29ubmVjdAorfCAgIHwgICAgIHwtIGRpZ2l0YWxfY29yZQorfCAgIHwgICAgIHwgICAgIHwtIHNyYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IERpZ2l0YWwgY29yZSBTb3VyY2UgZmlsZXMKK3wgICB8ICAgICB8LSBsaWIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjb21tb24gbGlicmFyeSBzb3VyY2UgZmlsZXMKK3wgICB8LSBkdgorfCAgIHwgICB8LSBsYV90ZXN0MSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNhcmV2ZWwgTEEgdGVzdAorfCAgIHwgICB8LSByaXNjX2Jvb3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHVzZXIgY29yZSByaXNjIGJvb3QgdGVzdAorfCAgIHwgICB8LSB3Yl9wb3J0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHVzZXIgd2lzaGJvbmUgdGVzdAorfCAgIHwgICB8LSB1c2VyX3Jpc2NfYm9vdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHVzZXIgc3RhbmRhbG9uZSB0ZXN0IHdpdGhvdXQgY2FyZXZlbCBzb2MKK3wgICB8LSBnbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAqKiBHTFMgU291cmNlIGZpbGVzICoqCit8Cit8LSBvcGVubGFuZQorICAgIHwtIHNwaV9tYXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNwaV9tYXN0ZXIgb3BlbmxhbmUgc2NyaXB0cyAgIAorICAgIHwtIHN5bnRhY29yZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFJpc2MgQ29yZSBvcGVubGFuZSBzY3JpcHRzICAgCisgICAgfC0gdXNlcl9wcm9qZWN0X3dyYXBwZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2FydmVsIHVzZXIgcHJvamVjdCB3cmFwcGVyIAorCitgYGAKKworCisjIFByZXJlcXVpc2l0ZXMKKyAgIC0gRG9ja2VyIChlbnN1cmUgZG9ja2VyIGRhZW1vbiBpcyBydW5uaW5nKSAtLSB0ZXN0ZWQgd2l0aCB2ZXJzaW9uIDE5LjAzLjEyLCBidXQgYW55IHJlY2VudCB2ZXJzaW9uIHNob3VsZCBzdWZmaWNlLgorIyMgU3RlcC0xOiBEb2NrZXIgaW4gdWJ1bnR1IDIwLjA0IHZlcnNpb24KK2BgYGJhc2gKKyAgIHN1ZG8gYXB0IHVwZGF0ZQorICAgc3VkbyBhcHQtZ2V0IGluc3RhbGwgYXB0LXRyYW5zcG9ydC1odHRwcyBjdXJsIHJ0aWZpY2F0ZXMgLWFnZW50IHNvZnR3YXJlLXByb3BlcnRpZXMtY29tbW9uCisgICBjdXJsIC1mc1NMIGh0dHBzOi8vZG93bmxvYWQuZG9ja2VyLmNvbS9saW51eC91YnVudHUvZ3BnIHwgc3VkbyBhcHQta2V5IGFkZCAtCisgICBzdWRvIGFkZC1hcHQtcmVwb3NpdG9yeSAiZGViIFthcmNoPWFtZDY0XSBodHRwczovL2Rvd25sb2FkLmRvY2tlci5jb20vbGludXgvdWJ1bnR1IGZvY2FsIHN0YWJsZSIKKyAgIHN1ZG8gYXB0IHVwZGF0ZQorICAgYXB0LWNhY2hlIHBvbGljeSBkb2NrZXItY2UKKyAgIHN1ZG8gYXB0IGluc3RhbGwgZG9ja2VyLWNlCisKKyAgICNBZGQgVXNlciBOYW1lIHRvIGRvY2tlcgorICAgc3VkbyB1c2VybW9kIC1hRyBkb2NrZXIgPHlvdXIgdXNlciBuYW1lPgorICAgIyBSZWJvb3QgdGhlIHN5c3RlbSB0byBlbmFibGUgdGhlIGRvY2tlciBzZXR1cAorYGBgCisjIyAgU3RlcC0yOiBVcGRhdGUgdGhlIFN1Ym1vZHVsZSwgVG8gdG8gcHJvamVjdCBhcmVhCitgYGBiYXNoCisgICBnaXQgc3VibW9kdWxlIGluaXQKKyAgIGdpdCBzdWJtb2R1bGUgdXBkYXRlCitgYGAKKyMjIFN0ZXAtMzogY2xvbmUgT3BlbmxhbmUgc2NyaXB0cyB1bmRlciB3b3JrYXJlYQorYGBgYmFzaAorICAgZ2l0IGNsb25lIGh0dHBzOi8vZ2l0aHViLmNvbS9UaGUtT3BlblJPQUQtUHJvamVjdC9PcGVuTGFuZS5naXQKK2BgYAorCisjIyBTdGVwLTQ6IGFkZCBFbnZpcm9ubWVudCBzZXR0aW5nCitgYGBiYXNoCisgICAgZXhwb3J0IENBUkFWRUxfUk9PVD08Q2FydmVsIEluc3RhbGxlZCBQYXRoPgorICAgIGV4cG9ydCBPUEVOTEFORV9ST09UPTxPcGVuTGFuZSBJbnN0YWxsZWQgUGF0aD4KKyAgICBleHBvcnQgT1BFTkxBTkVfSU1BR0VfTkFNRT1lZmFibGVzcy9vcGVubGFuZTpsYXRlc3QKKyAgICBleHBvcnQgUERLX1JPT1Q9PFBESyBJbnN0YWxsZWQgUEFUSD4KKyAgICBleHBvcnQgUERLX1BBVEg9PFBESyBJbnN0YWxsIFBhdGg+L3NreTEzMEEKK2BgYAorIyMgU3RlcC01OiBUbyBpbnN0YWxsIHRoZSBQREsKK2BgYGJhc2gKKyAgIHNvdXJjZSB+Ly5iYXNocmMKKyAgIGNkIE9wZW5MYW5lCisgICBtYWtlIHBkaworYGBgCisKKyMgVGVzdHMgcHJlcGFyYXRpb24KKworVGhlIHNpbXVsYXRpb24gcGFja2FnZSBpbmNsdWRlcyB0aGUgZm9sbG93aW5nIHRlc3RzOgorCisqICoqcmlzY19ib290KiogICAgICAgICAgIC0gU2ltcGxlIFVzZXIgUmlzYyBjb3JlIGJvb3QgCisqICoqd2JfcG9ydCoqICAgICAgICAgICAgIC0gVXNlciBXaXNoYm9uZSB2YWxpZGF0aW9uCisqICoqdXNlcl9yaXNjX2Jvb3QqKiAgICAgIC0gU3RhbmRhbG9uZSBVc2VyIFJpc2MgY29yZSBib290CisqICoqdXNlcl9tYmlzdF90ZXN0MSoqICAgIC0gU3RhbmRhbG9uZSBNQklTVCB0ZXN0CisqICoqdXNlcl9zcGkqKiAgICAgICAgICAgIC0gU3RhbmRhbG9uZSBTUEkgdGVzdAorKiAqKnVzZXJfaTJjKiogICAgICAgICAgICAtIFN0YW5kYWxvbmUgSTJDIHRlc3QKKyogKip1c2VyX3Jpc2Nfc29mdF9ib290KiogLSBTdGFuZGFsb25lIFJpc2Mgd2l0aCBTUkFNIGFzIEJvb3QKKworCisjIFJ1bm5pbmcgU2ltdWxhdGlvbgorCitFeGFtcGxlczoKK2BgYCBzaAorICAgIG1ha2UgdmVyaWZ5LXdiX3BvcnQgIAorICAgIG1ha2UgdmVyaWZ5LXJpc2NfYm9vdAorICAgIG1ha2UgdmVyaWZ5LXVzZXJfdWFydAorICAgIG1ha2UgdmVyaWZ5LXVzZXJfc3BpCisgICAgbWFrZSB2ZXJpZnktdXNlcl9pMmNtCisgICAgbWFrZSB2ZXJpZnktdXNlcl9yaXNjX2Jvb3QKKyAgICBtYWtlIHZlcmlmeS13Yl9wb3J0IFNJTT1SVEwgRFVNUD1PRkYKKyAgICBtYWtlIHZlcmlmeS13Yl9wb3J0IFNJTT1SVEwgRFVNUD1PTgorICAgIG1ha2UgdmVyaWZ5LXJpc2N2X3JlZ3Jlc3MKK2BgYAorCisjIFRvb2wgU2V0cworCitSaXNjZHVpbm8gU29jIGZsb3cgdXNlcyBPcGVubGFuZSB0b29sIHNldHMuCisKKzEuICoqU3ludGhlc2lzKioKKyAgICAxLiBgeW9zeXNgIC0gUGVyZm9ybXMgUlRMIHN5bnRoZXNpcworICAgIDIuIGBhYmNgIC0gUGVyZm9ybXMgdGVjaG5vbG9neSBtYXBwaW5nCisgICAgMy4gYE9wZW5TVEFgIC0gUGVmcm9tcyBzdGF0aWMgdGltaW5nIGFuYWx5c2lzIG9uIHRoZSByZXN1bHRpbmcgbmV0bGlzdCB0byBnZW5lcmF0ZSB0aW1pbmcgcmVwb3J0cworMi4gKipGbG9vcnBsYW4gYW5kIFBETioqCisgICAgMS4gYGluaXRfZnBgIC0gRGVmaW5lcyB0aGUgY29yZSBhcmVhIGZvciB0aGUgbWFjcm8gYXMgd2VsbCBhcyB0aGUgcm93cyAodXNlZCBmb3IgcGxhY2VtZW50KSBhbmQgdGhlIHRyYWNrcyAodXNlZCBmb3Igcm91dGluZykKKyAgICAyLiBgaW9wbGFjZXJgIC0gUGxhY2VzIHRoZSBtYWNybyBpbnB1dCBhbmQgb3V0cHV0IHBvcnRzCisgICAgMy4gYHBkbmAgLSBHZW5lcmF0ZXMgdGhlIHBvd2VyIGRpc3RyaWJ1dGlvbiBuZXR3b3JrCisgICAgNC4gYHRhcGNlbGxgIC0gSW5zZXJ0cyB3ZWxsdGFwIGFuZCBkZWNhcCBjZWxscyBpbiB0aGUgZmxvb3JwbGFuCiszLiAqKlBsYWNlbWVudCoqCisgICAgMS4gYFJlUExhY2VgIC0gUGVyZm9ybXMgZ2xvYmFsIHBsYWNlbWVudAorICAgIDIuIGBSZXNpemVyYCAtIFBlcmZvcm1zIG9wdGlvbmFsIG9wdGltaXphdGlvbnMgb24gdGhlIGRlc2lnbgorICAgIDMuIGBPcGVuUGh5U3luYCAtIFBlcmZvcm1zIHRpbWluZyBvcHRpbWl6YXRpb25zIG9uIHRoZSBkZXNpZ24KKyAgICA0LiBgT3BlbkRQYCAtIFBlcmZyb21zIGRldGFpbGVkIHBsYWNlbWVudCB0byBsZWdhbGl6ZSB0aGUgZ2xvYmFsbHkgcGxhY2VkIGNvbXBvbmVudHMKKzQuICoqQ1RTKioKKyAgICAxLiBgVHJpdG9uQ1RTYCAtIFN5bnRoZXNpemVzIHRoZSBjbG9jayBkaXN0cmlidXRpb24gbmV0d29yayAodGhlIGNsb2NrIHRyZWUpCis1LiAqKlJvdXRpbmcqKgorICAgIDEuIGBGYXN0Um91dGVgIC0gUGVyZm9ybXMgZ2xvYmFsIHJvdXRpbmcgdG8gZ2VuZXJhdGUgYSBndWlkZSBmaWxlIGZvciB0aGUgZGV0YWlsZWQgcm91dGVyCisgICAgMi4gYENVLUdSYCAtIEFub3RoZXIgb3B0aW9uIGZvciBwZXJmb3JtaW5nIGdsb2JhbCByb3V0aW5nLgorICAgIDMuIGBUcml0b25Sb3V0ZWAgLSBQZXJmb3JtcyBkZXRhaWxlZCByb3V0aW5nCisgICAgNC4gYFNQRUYtRXh0cmFjdG9yYCAtIFBlcmZvcm1zIFNQRUYgZXh0cmFjdGlvbgorNi4gKipHRFNJSSBHZW5lcmF0aW9uKioKKyAgICAxLiBgTWFnaWNgIC0gU3RyZWFtcyBvdXQgdGhlIGZpbmFsIEdEU0lJIGxheW91dCBmaWxlIGZyb20gdGhlIHJvdXRlZCBkZWYKKyAgICAyLiBgS2xheW91dGAgLSBTdHJlYW1zIG91dCB0aGUgZmluYWwgR0RTSUkgbGF5b3V0IGZpbGUgZnJvbSB0aGUgcm91dGVkIGRlZiBhcyBhIGJhY2stdXAKKzcuICoqQ2hlY2tzKioKKyAgICAxLiBgTWFnaWNgIC0gUGVyZm9ybXMgRFJDIENoZWNrcyAmIEFudGVubmEgQ2hlY2tzCisgICAgMi4gYEtsYXlvdXRgIC0gUGVyZm9ybXMgRFJDIENoZWNrcworICAgIDMuIGBOZXRnZW5gIC0gUGVyZm9ybXMgTFZTIENoZWNrcworICAgIDQuIGBDVkNgIC0gUGVyZm9ybXMgQ2lyY3VpdCBWYWxpZGl0eSBDaGVja3MKKworCisKKyMjIENvbnRhY3RzCisKK1JlcG9ydCBhbiBpc3N1ZTogPGh0dHBzOi8vZ2l0aHViLmNvbS9kaW5lc2hhbm5heXlhL3Jpc2NkdWluby9pc3N1ZXM+CisKKyMgRG9jdW1lbnRhdGlvbgorKiAqKlN5bnRhY29yZSBMaW5rKiogLSBodHRwczovL2dpdGh1Yi5jb20vc3ludGFjb3JlL3NjcjEKKworCisKKwpkaWZmIC0tZ2l0IGEvY2hlY2tzL2VyYXNlX2JveF91c2VyX3Byb2plY3Rfd3JhcHBlci5nZHMubG9nIGIvY2hlY2tzL2VyYXNlX2JveF91c2VyX3Byb2plY3Rfd3JhcHBlci5nZHMubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0NjRlY2UKLS0tIC9kZXYvbnVsbAorKysgYi9jaGVja3MvZXJhc2VfYm94X3VzZXJfcHJvamVjdF93cmFwcGVyLmdkcy5sb2cKQEAgLTAsMCArMSwyODY3IEBACisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvZ2RzLy91c2VyX3Byb2plY3Rfd3JhcHBlci5nZHMgL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL2NoZWNrcy91c2VyX3Byb2plY3Rfd3JhcHBlcl9lcmFzZWQuZ2RzIHVzZXJfcHJvamVjdF93cmFwcGVyCisKK01hZ2ljIDguMyByZXZpc2lvbiAxODIgLSBDb21waWxlZCBvbiBGcmkgSnVuIDI1IDIzOjU4OjEzIFVUQyAyMDIxLgorU3RhcnRpbmcgbWFnaWMgdW5kZXIgVGNsIGludGVycHJldGVyCitVc2luZyB0aGUgdGVybWluYWwgYXMgdGhlIGNvbnNvbGUuCitVc2luZyBOVUxMIGdyYXBoaWNzIGRldmljZS4KK1Byb2Nlc3Npbmcgc3lzdGVtIC5tYWdpY3JjIGZpbGUKK1NvdXJjaW5nIGRlc2lnbiAubWFnaWNyYyBmb3IgdGVjaG5vbG9neSBza3kxMzBBIC4uLgorMiBNYWdpYyBpbnRlcm5hbCB1bml0cyA9IDEgTGFtYmRhCitJbnB1dCBzdHlsZSBza3kxMzAoKTogc2NhbGVGYWN0b3I9MiwgbXVsdGlwbGllcj0yCitTY2FsZWQgdGVjaCB2YWx1ZXMgYnkgMiAvIDEgdG8gbWF0Y2ggaW50ZXJuYWwgZ3JpZCBzY2FsaW5nCitMb2FkaW5nIHNreTEzMEEgRGV2aWNlIEdlbmVyYXRvciBNZW51IC4uLgorVXNpbmcgdGVjaG5vbG9neSAic2t5MTMwQSIsIHZlcnNpb24gMS4wLjExNi00LWc1MjJhMzczCitJbnB1dCBzdHlsZSBza3kxMzAodmVuZG9yKTogc2NhbGVGYWN0b3I9MiwgbXVsdGlwbGllcj0yCitDSUYgaW5wdXQgc3R5bGUgaXMgbm93ICJza3kxMzAodmVuZG9yKSIKK1dhcm5pbmc6IENhbG1hIHJlYWRpbmcgaXMgbm90IHVuZG9hYmxlISAgSSBob3BlIHRoYXQncyBPSy4KK0xpYnJhcnkgd3JpdHRlbiB1c2luZyBHRFMtSUkgUmVsZWFzZSAzLjAKK0xpYnJhcnkgbmFtZTogdXNlcl9wcm9qZWN0X3dyYXBwZXIKK1JlYWRpbmcgInNreTEzMF9mZF9zY19oZF9fY2xrYnVmXzE2Ii4KK1JlYWRpbmcgInNreTEzMF9mZF9zY19oZF9fYnVmXzQiLgorUmVhZGluZyAic2t5MTMwX2ZkX3NjX2hkX19hMjFvXzQiLgorUmVhZGluZyAic2t5MTMwX2ZkX3NjX2hkX19jbGtidWZfMSIuCitSZWFkaW5nICJza3kxMzBfZmRfc2NfaGRfX2Rmc3RwXzQiLgorUmVhZGluZyAic2t5MTMwX2ZkX3NjX2hkX19vcjNfNCIuCitSZWFkaW5nICJza3kxMzBfZmRfc2NfaGRfX2EyMWJvaV80Ii4KK1JlYWRpbmcgInNreTEzMF9mZF9zY19oZF9fb3I0XzQiLgorUmVhZGluZyAic2t5MTMwX2ZkX3NjX2hkX19hMjJvaV80Ii4KK1JlYWRpbmcgInNreTEzMF9mZF9zY19oZF9fYW5kM180Ii4KK1JlYWRpbmcgInNreTEzMF9mZF9zY19oZF9fbzIxYWlfNCIuCitSZWFkaW5nICJza3kxMzBfZmRfc2NfaGRfX28zMmFfNCIuCitSZWFkaW5nICJza3kxMzBfZmRfc2NfaGRfX2FuZDJfNCIuCitSZWFkaW5nICJza3kxMzBfZmRfc2NfaGRfX2FuZDRfNCIuCitSZWFkaW5nICJza3kxMzBfZmRfc2NfaGRfX2RmeHRwXzQiLgorUmVhZGluZyAic2t5MTMwX2ZkX3NjX2hkX19vcjJfNCIuCitSZWFkaW5nICJza3kxMzBfZmRfc2NfaGRfX2Rpb2RlXzIiLgorUmVhZGluZyAic2t5MTMwX2ZkX3NjX2hkX19vMjJhXzQiLgorUmVhZGluZyAic2t5MTMwX2ZkX3NjX2hkX19ub3IyXzQiLgorUmVhZGluZyAic2t5MTMwX2ZkX3NjX2hkX19vMjFhXzQiLgorUmVhZGluZyAic2t5MTMwX2ZkX3NjX2hkX19hMzJvXzQiLgorUmVhZGluZyAic2t5MTMwX2ZkX3NjX2hkX19idWZfMiIuCitSZWFkaW5nICJza3kxMzBfZmRfc2NfaGRfX2EyMW9pXzQiLgorUmVhZGluZyAic2t5MTMwX2ZkX3NjX2hkX19uYW5kMl80Ii4KK1JlYWRpbmcgInNreTEzMF9mZF9zY19oZF9faW52XzIiLgorUmVhZGluZyAic2t5MTMwX2ZkX3NjX2hkX19kZnJ0cF80Ii4KK1JlYWRpbmcgInNreTEzMF9mZF9zY19oZF9fZGVjYXBfNCIuCitSZWFkaW5nICJza3kxMzBfZmRfc2NfaGRfX2EyMTFvXzQiLgorUmVhZGluZyAic2t5MTMwX2ZkX3NjX2hkX19maWxsXzIiLgorUmVhZGluZyAic2t5MTMwX2ZkX3NjX2hkX19kZWNhcF84Ii4KK1JlYWRpbmcgInNreTEzMF9mZF9zY19oZF9fYTJiYjJvXzQiLgorUmVhZGluZyAic2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIi4KK1JlYWRpbmcgInNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIiLgorUmVhZGluZyAic2t5MTMwX2ZkX3NjX2hkX19jb25iXzEiLgorUmVhZGluZyAic2t5MTMwX2ZkX3NjX2hkX19kZWNhcF82Ii4KK1JlYWRpbmcgInNreTEzMF9mZF9zY19oZF9fZmlsbF8xIi4KK1JlYWRpbmcgInNreTEzMF9mZF9zY19oZF9fZGVjYXBfMyIuCitSZWFkaW5nICJza3kxMzBfZmRfc2NfaGRfX2EyMTExb180Ii4KK1JlYWRpbmcgInNreTEzMF9mZF9zY19oZF9fYTIxYm9fNCIuCitSZWFkaW5nICJza3kxMzBfZmRfc2NfaGRfX280MWFfNCIuCitSZWFkaW5nICJza3kxMzBfZmRfc2NfaGRfX2J1Zl84Ii4KK1JlYWRpbmcgInNjcjFfY29yZV90b3AiLgorICAgIDEwMCB1c2VzCisgICAgMjAwIHVzZXMKKyAgICAzMDAgdXNlcworICAgIDQwMCB1c2VzCisgICAgNTAwIHVzZXMKKyAgICA2MDAgdXNlcworICAgIDcwMCB1c2VzCisgICAgODAwIHVzZXMKKyAgICA5MDAgdXNlcworICAgIDEwMDAgdXNlcworICAgIDExMDAgdXNlcworICAgIDEyMDAgdXNlcworICAgIDEzMDAgdXNlcworICAgIDE0MDAgdXNlcworICAgIDE1MDAgdXNlcworICAgIDE2MDAgdXNlcworICAgIDE3MDAgdXNlcworICAgIDE4MDAgdXNlcworICAgIDE5MDAgdXNlcworICAgIDIwMDAgdXNlcworICAgIDIxMDAgdXNlcworICAgIDIyMDAgdXNlcworICAgIDIzMDAgdXNlcworICAgIDI0MDAgdXNlcworICAgIDI1MDAgdXNlcworICAgIDI2MDAgdXNlcworICAgIDI3MDAgdXNlcworICAgIDI4MDAgdXNlcworICAgIDI5MDAgdXNlcworICAgIDMwMDAgdXNlcworICAgIDMxMDAgdXNlcworICAgIDMyMDAgdXNlcworICAgIDMzMDAgdXNlcworICAgIDM0MDAgdXNlcworICAgIDM1MDAgdXNlcworICAgIDM2MDAgdXNlcworICAgIDM3MDAgdXNlcworICAgIDM4MDAgdXNlcworICAgIDM5MDAgdXNlcworICAgIDQwMDAgdXNlcworICAgIDQxMDAgdXNlcworICAgIDQyMDAgdXNlcworICAgIDQzMDAgdXNlcworICAgIDQ0MDAgdXNlcworICAgIDQ1MDAgdXNlcworICAgIDQ2MDAgdXNlcworICAgIDQ3MDAgdXNlcworICAgIDQ4MDAgdXNlcworICAgIDQ5MDAgdXNlcworICAgIDUwMDAgdXNlcworICAgIDUxMDAgdXNlcworICAgIDUyMDAgdXNlcworICAgIDUzMDAgdXNlcworICAgIDU0MDAgdXNlcworICAgIDU1MDAgdXNlcworICAgIDU2MDAgdXNlcworICAgIDU3MDAgdXNlcworICAgIDU4MDAgdXNlcworICAgIDU5MDAgdXNlcworICAgIDYwMDAgdXNlcworICAgIDYxMDAgdXNlcworICAgIDYyMDAgdXNlcworICAgIDYzMDAgdXNlcworICAgIDY0MDAgdXNlcworICAgIDY1MDAgdXNlcworICAgIDY2MDAgdXNlcworICAgIDY3MDAgdXNlcworICAgIDY4MDAgdXNlcworICAgIDY5MDAgdXNlcworICAgIDcwMDAgdXNlcworICAgIDcxMDAgdXNlcworICAgIDcyMDAgdXNlcworICAgIDczMDAgdXNlcworICAgIDc0MDAgdXNlcworICAgIDc1MDAgdXNlcworICAgIDc2MDAgdXNlcworICAgIDc3MDAgdXNlcworICAgIDc4MDAgdXNlcworICAgIDc5MDAgdXNlcworICAgIDgwMDAgdXNlcworICAgIDgxMDAgdXNlcworICAgIDgyMDAgdXNlcworICAgIDgzMDAgdXNlcworICAgIDg0MDAgdXNlcworICAgIDg1MDAgdXNlcworICAgIDg2MDAgdXNlcworICAgIDg3MDAgdXNlcworICAgIDg4MDAgdXNlcworICAgIDg5MDAgdXNlcworICAgIDkwMDAgdXNlcworICAgIDkxMDAgdXNlcworICAgIDkyMDAgdXNlcworICAgIDkzMDAgdXNlcworICAgIDk0MDAgdXNlcworICAgIDk1MDAgdXNlcworICAgIDk2MDAgdXNlcworICAgIDk3MDAgdXNlcworICAgIDk4MDAgdXNlcworICAgIDk5MDAgdXNlcworICAgIDEwMDAwIHVzZXMKKyAgICAxMDEwMCB1c2VzCisgICAgMTAyMDAgdXNlcworICAgIDEwMzAwIHVzZXMKKyAgICAxMDQwMCB1c2VzCisgICAgMTA1MDAgdXNlcworICAgIDEwNjAwIHVzZXMKKyAgICAxMDcwMCB1c2VzCisgICAgMTA4MDAgdXNlcworICAgIDEwOTAwIHVzZXMKKyAgICAxMTAwMCB1c2VzCisgICAgMTExMDAgdXNlcworICAgIDExMjAwIHVzZXMKKyAgICAxMTMwMCB1c2VzCisgICAgMTE0MDAgdXNlcworICAgIDExNTAwIHVzZXMKKyAgICAxMTYwMCB1c2VzCisgICAgMTE3MDAgdXNlcworICAgIDExODAwIHVzZXMKKyAgICAxMTkwMCB1c2VzCisgICAgMTIwMDAgdXNlcworICAgIDEyMTAwIHVzZXMKKyAgICAxMjIwMCB1c2VzCisgICAgMTIzMDAgdXNlcworICAgIDEyNDAwIHVzZXMKKyAgICAxMjUwMCB1c2VzCisgICAgMTI2MDAgdXNlcworICAgIDEyNzAwIHVzZXMKKyAgICAxMjgwMCB1c2VzCisgICAgMTI5MDAgdXNlcworICAgIDEzMDAwIHVzZXMKKyAgICAxMzEwMCB1c2VzCisgICAgMTMyMDAgdXNlcworICAgIDEzMzAwIHVzZXMKKyAgICAxMzQwMCB1c2VzCisgICAgMTM1MDAgdXNlcworICAgIDEzNjAwIHVzZXMKKyAgICAxMzcwMCB1c2VzCisgICAgMTM4MDAgdXNlcworICAgIDEzOTAwIHVzZXMKKyAgICAxNDAwMCB1c2VzCisgICAgMTQxMDAgdXNlcworICAgIDE0MjAwIHVzZXMKKyAgICAxNDMwMCB1c2VzCisgICAgMTQ0MDAgdXNlcworICAgIDE0NTAwIHVzZXMKKyAgICAxNDYwMCB1c2VzCisgICAgMTQ3MDAgdXNlcworICAgIDE0ODAwIHVzZXMKKyAgICAxNDkwMCB1c2VzCisgICAgMTUwMDAgdXNlcworICAgIDE1MTAwIHVzZXMKKyAgICAxNTIwMCB1c2VzCisgICAgMTUzMDAgdXNlcworICAgIDE1NDAwIHVzZXMKKyAgICAxNTUwMCB1c2VzCisgICAgMTU2MDAgdXNlcworICAgIDE1NzAwIHVzZXMKKyAgICAxNTgwMCB1c2VzCisgICAgMTU5MDAgdXNlcworICAgIDE2MDAwIHVzZXMKKyAgICAxNjEwMCB1c2VzCisgICAgMTYyMDAgdXNlcworICAgIDE2MzAwIHVzZXMKKyAgICAxNjQwMCB1c2VzCisgICAgMTY1MDAgdXNlcworICAgIDE2NjAwIHVzZXMKKyAgICAxNjcwMCB1c2VzCisgICAgMTY4MDAgdXNlcworICAgIDE2OTAwIHVzZXMKKyAgICAxNzAwMCB1c2VzCisgICAgMTcxMDAgdXNlcworICAgIDE3MjAwIHVzZXMKKyAgICAxNzMwMCB1c2VzCisgICAgMTc0MDAgdXNlcworICAgIDE3NTAwIHVzZXMKKyAgICAxNzYwMCB1c2VzCisgICAgMTc3MDAgdXNlcworICAgIDE3ODAwIHVzZXMKKyAgICAxNzkwMCB1c2VzCisgICAgMTgwMDAgdXNlcworICAgIDE4MTAwIHVzZXMKKyAgICAxODIwMCB1c2VzCisgICAgMTgzMDAgdXNlcworICAgIDE4NDAwIHVzZXMKKyAgICAxODUwMCB1c2VzCisgICAgMTg2MDAgdXNlcworICAgIDE4NzAwIHVzZXMKKyAgICAxODgwMCB1c2VzCisgICAgMTg5MDAgdXNlcworICAgIDE5MDAwIHVzZXMKKyAgICAxOTEwMCB1c2VzCisgICAgMTkyMDAgdXNlcworICAgIDE5MzAwIHVzZXMKKyAgICAxOTQwMCB1c2VzCisgICAgMTk1MDAgdXNlcworICAgIDE5NjAwIHVzZXMKKyAgICAxOTcwMCB1c2VzCisgICAgMTk4MDAgdXNlcworICAgIDE5OTAwIHVzZXMKKyAgICAyMDAwMCB1c2VzCisgICAgMjAxMDAgdXNlcworICAgIDIwMjAwIHVzZXMKKyAgICAyMDMwMCB1c2VzCisgICAgMjA0MDAgdXNlcworICAgIDIwNTAwIHVzZXMKKyAgICAyMDYwMCB1c2VzCisgICAgMjA3MDAgdXNlcworICAgIDIwODAwIHVzZXMKKyAgICAyMDkwMCB1c2VzCisgICAgMjEwMDAgdXNlcworICAgIDIxMTAwIHVzZXMKKyAgICAyMTIwMCB1c2VzCisgICAgMjEzMDAgdXNlcworICAgIDIxNDAwIHVzZXMKKyAgICAyMTUwMCB1c2VzCisgICAgMjE2MDAgdXNlcworICAgIDIxNzAwIHVzZXMKKyAgICAyMTgwMCB1c2VzCisgICAgMjE5MDAgdXNlcworICAgIDIyMDAwIHVzZXMKKyAgICAyMjEwMCB1c2VzCisgICAgMjIyMDAgdXNlcworICAgIDIyMzAwIHVzZXMKKyAgICAyMjQwMCB1c2VzCisgICAgMjI1MDAgdXNlcworICAgIDIyNjAwIHVzZXMKKyAgICAyMjcwMCB1c2VzCisgICAgMjI4MDAgdXNlcworICAgIDIyOTAwIHVzZXMKKyAgICAyMzAwMCB1c2VzCisgICAgMjMxMDAgdXNlcworICAgIDIzMjAwIHVzZXMKKyAgICAyMzMwMCB1c2VzCisgICAgMjM0MDAgdXNlcworICAgIDIzNTAwIHVzZXMKKyAgICAyMzYwMCB1c2VzCisgICAgMjM3MDAgdXNlcworICAgIDIzODAwIHVzZXMKKyAgICAyMzkwMCB1c2VzCisgICAgMjQwMDAgdXNlcworICAgIDI0MTAwIHVzZXMKKyAgICAyNDIwMCB1c2VzCisgICAgMjQzMDAgdXNlcworICAgIDI0NDAwIHVzZXMKKyAgICAyNDUwMCB1c2VzCisgICAgMjQ2MDAgdXNlcworICAgIDI0NzAwIHVzZXMKKyAgICAyNDgwMCB1c2VzCisgICAgMjQ5MDAgdXNlcworICAgIDI1MDAwIHVzZXMKKyAgICAyNTEwMCB1c2VzCisgICAgMjUyMDAgdXNlcworICAgIDI1MzAwIHVzZXMKKyAgICAyNTQwMCB1c2VzCisgICAgMjU1MDAgdXNlcworICAgIDI1NjAwIHVzZXMKKyAgICAyNTcwMCB1c2VzCisgICAgMjU4MDAgdXNlcworICAgIDI1OTAwIHVzZXMKKyAgICAyNjAwMCB1c2VzCisgICAgMjYxMDAgdXNlcworICAgIDI2MjAwIHVzZXMKKyAgICAyNjMwMCB1c2VzCisgICAgMjY0MDAgdXNlcworICAgIDI2NTAwIHVzZXMKKyAgICAyNjYwMCB1c2VzCisgICAgMjY3MDAgdXNlcworICAgIDI2ODAwIHVzZXMKKyAgICAyNjkwMCB1c2VzCisgICAgMjcwMDAgdXNlcworICAgIDI3MTAwIHVzZXMKKyAgICAyNzIwMCB1c2VzCisgICAgMjczMDAgdXNlcworICAgIDI3NDAwIHVzZXMKKyAgICAyNzUwMCB1c2VzCisgICAgMjc2MDAgdXNlcworICAgIDI3NzAwIHVzZXMKKyAgICAyNzgwMCB1c2VzCisgICAgMjc5MDAgdXNlcworICAgIDI4MDAwIHVzZXMKKyAgICAyODEwMCB1c2VzCisgICAgMjgyMDAgdXNlcworICAgIDI4MzAwIHVzZXMKKyAgICAyODQwMCB1c2VzCisgICAgMjg1MDAgdXNlcworICAgIDI4NjAwIHVzZXMKKyAgICAyODcwMCB1c2VzCisgICAgMjg4MDAgdXNlcworICAgIDI4OTAwIHVzZXMKKyAgICAyOTAwMCB1c2VzCisgICAgMjkxMDAgdXNlcworICAgIDI5MjAwIHVzZXMKKyAgICAyOTMwMCB1c2VzCisgICAgMjk0MDAgdXNlcworICAgIDI5NTAwIHVzZXMKKyAgICAyOTYwMCB1c2VzCisgICAgMjk3MDAgdXNlcworICAgIDI5ODAwIHVzZXMKKyAgICAyOTkwMCB1c2VzCisgICAgMzAwMDAgdXNlcworICAgIDMwMTAwIHVzZXMKKyAgICAzMDIwMCB1c2VzCisgICAgMzAzMDAgdXNlcworICAgIDMwNDAwIHVzZXMKKyAgICAzMDUwMCB1c2VzCisgICAgMzA2MDAgdXNlcworICAgIDMwNzAwIHVzZXMKKyAgICAzMDgwMCB1c2VzCisgICAgMzA5MDAgdXNlcworICAgIDMxMDAwIHVzZXMKKyAgICAzMTEwMCB1c2VzCisgICAgMzEyMDAgdXNlcworICAgIDMxMzAwIHVzZXMKKyAgICAzMTQwMCB1c2VzCisgICAgMzE1MDAgdXNlcworICAgIDMxNjAwIHVzZXMKKyAgICAzMTcwMCB1c2VzCisgICAgMzE4MDAgdXNlcworICAgIDMxOTAwIHVzZXMKKyAgICAzMjAwMCB1c2VzCisgICAgMzIxMDAgdXNlcworICAgIDMyMjAwIHVzZXMKKyAgICAzMjMwMCB1c2VzCisgICAgMzI0MDAgdXNlcworICAgIDMyNTAwIHVzZXMKKyAgICAzMjYwMCB1c2VzCisgICAgMzI3MDAgdXNlcworICAgIDMyODAwIHVzZXMKKyAgICAzMjkwMCB1c2VzCisgICAgMzMwMDAgdXNlcworICAgIDMzMTAwIHVzZXMKKyAgICAzMzIwMCB1c2VzCisgICAgMzMzMDAgdXNlcworICAgIDMzNDAwIHVzZXMKKyAgICAzMzUwMCB1c2VzCisgICAgMzM2MDAgdXNlcworICAgIDMzNzAwIHVzZXMKKyAgICAzMzgwMCB1c2VzCisgICAgMzM5MDAgdXNlcworICAgIDM0MDAwIHVzZXMKKyAgICAzNDEwMCB1c2VzCisgICAgMzQyMDAgdXNlcworICAgIDM0MzAwIHVzZXMKKyAgICAzNDQwMCB1c2VzCisgICAgMzQ1MDAgdXNlcworICAgIDM0NjAwIHVzZXMKKyAgICAzNDcwMCB1c2VzCisgICAgMzQ4MDAgdXNlcworICAgIDM0OTAwIHVzZXMKKyAgICAzNTAwMCB1c2VzCisgICAgMzUxMDAgdXNlcworICAgIDM1MjAwIHVzZXMKKyAgICAzNTMwMCB1c2VzCisgICAgMzU0MDAgdXNlcworICAgIDM1NTAwIHVzZXMKKyAgICAzNTYwMCB1c2VzCisgICAgMzU3MDAgdXNlcworICAgIDM1ODAwIHVzZXMKKyAgICAzNTkwMCB1c2VzCisgICAgMzYwMDAgdXNlcworICAgIDM2MTAwIHVzZXMKKyAgICAzNjIwMCB1c2VzCisgICAgMzYzMDAgdXNlcworICAgIDM2NDAwIHVzZXMKKyAgICAzNjUwMCB1c2VzCisgICAgMzY2MDAgdXNlcworICAgIDM2NzAwIHVzZXMKKyAgICAzNjgwMCB1c2VzCisgICAgMzY5MDAgdXNlcworICAgIDM3MDAwIHVzZXMKKyAgICAzNzEwMCB1c2VzCisgICAgMzcyMDAgdXNlcworICAgIDM3MzAwIHVzZXMKKyAgICAzNzQwMCB1c2VzCisgICAgMzc1MDAgdXNlcworICAgIDM3NjAwIHVzZXMKKyAgICAzNzcwMCB1c2VzCisgICAgMzc4MDAgdXNlcworICAgIDM3OTAwIHVzZXMKKyAgICAzODAwMCB1c2VzCisgICAgMzgxMDAgdXNlcworICAgIDM4MjAwIHVzZXMKKyAgICAzODMwMCB1c2VzCisgICAgMzg0MDAgdXNlcworICAgIDM4NTAwIHVzZXMKKyAgICAzODYwMCB1c2VzCisgICAgMzg3MDAgdXNlcworICAgIDM4ODAwIHVzZXMKKyAgICAzODkwMCB1c2VzCisgICAgMzkwMDAgdXNlcworICAgIDM5MTAwIHVzZXMKKyAgICAzOTIwMCB1c2VzCisgICAgMzkzMDAgdXNlcworICAgIDM5NDAwIHVzZXMKKyAgICAzOTUwMCB1c2VzCisgICAgMzk2MDAgdXNlcworICAgIDM5NzAwIHVzZXMKKyAgICAzOTgwMCB1c2VzCisgICAgMzk5MDAgdXNlcworICAgIDQwMDAwIHVzZXMKKyAgICA0MDEwMCB1c2VzCisgICAgNDAyMDAgdXNlcworICAgIDQwMzAwIHVzZXMKKyAgICA0MDQwMCB1c2VzCisgICAgNDA1MDAgdXNlcworICAgIDQwNjAwIHVzZXMKKyAgICA0MDcwMCB1c2VzCisgICAgNDA4MDAgdXNlcworICAgIDQwOTAwIHVzZXMKKyAgICA0MTAwMCB1c2VzCisgICAgNDExMDAgdXNlcworICAgIDQxMjAwIHVzZXMKKyAgICA0MTMwMCB1c2VzCisgICAgNDE0MDAgdXNlcworICAgIDQxNTAwIHVzZXMKKyAgICA0MTYwMCB1c2VzCisgICAgNDE3MDAgdXNlcworICAgIDQxODAwIHVzZXMKKyAgICA0MTkwMCB1c2VzCisgICAgNDIwMDAgdXNlcworICAgIDQyMTAwIHVzZXMKKyAgICA0MjIwMCB1c2VzCisgICAgNDIzMDAgdXNlcworICAgIDQyNDAwIHVzZXMKKyAgICA0MjUwMCB1c2VzCisgICAgNDI2MDAgdXNlcworICAgIDQyNzAwIHVzZXMKKyAgICA0MjgwMCB1c2VzCisgICAgNDI5MDAgdXNlcworICAgIDQzMDAwIHVzZXMKKyAgICA0MzEwMCB1c2VzCisgICAgNDMyMDAgdXNlcworICAgIDQzMzAwIHVzZXMKKyAgICA0MzQwMCB1c2VzCisgICAgNDM1MDAgdXNlcworICAgIDQzNjAwIHVzZXMKKyAgICA0MzcwMCB1c2VzCisgICAgNDM4MDAgdXNlcworICAgIDQzOTAwIHVzZXMKKyAgICA0NDAwMCB1c2VzCisgICAgNDQxMDAgdXNlcworICAgIDQ0MjAwIHVzZXMKKyAgICA0NDMwMCB1c2VzCisgICAgNDQ0MDAgdXNlcworICAgIDQ0NTAwIHVzZXMKKyAgICA0NDYwMCB1c2VzCisgICAgNDQ3MDAgdXNlcworICAgIDQ0ODAwIHVzZXMKKyAgICA0NDkwMCB1c2VzCisgICAgNDUwMDAgdXNlcworICAgIDQ1MTAwIHVzZXMKKyAgICA0NTIwMCB1c2VzCisgICAgNDUzMDAgdXNlcworICAgIDQ1NDAwIHVzZXMKKyAgICA0NTUwMCB1c2VzCisgICAgNDU2MDAgdXNlcworICAgIDQ1NzAwIHVzZXMKKyAgICA0NTgwMCB1c2VzCisgICAgNDU5MDAgdXNlcworICAgIDQ2MDAwIHVzZXMKKyAgICA0NjEwMCB1c2VzCisgICAgNDYyMDAgdXNlcworICAgIDQ2MzAwIHVzZXMKKyAgICA0NjQwMCB1c2VzCisgICAgNDY1MDAgdXNlcworICAgIDQ2NjAwIHVzZXMKKyAgICA0NjcwMCB1c2VzCisgICAgNDY4MDAgdXNlcworICAgIDQ2OTAwIHVzZXMKKyAgICA0NzAwMCB1c2VzCisgICAgNDcxMDAgdXNlcworICAgIDQ3MjAwIHVzZXMKKyAgICA0NzMwMCB1c2VzCisgICAgNDc0MDAgdXNlcworICAgIDQ3NTAwIHVzZXMKKyAgICA0NzYwMCB1c2VzCisgICAgNDc3MDAgdXNlcworICAgIDQ3ODAwIHVzZXMKKyAgICA0NzkwMCB1c2VzCisgICAgNDgwMDAgdXNlcworICAgIDQ4MTAwIHVzZXMKKyAgICA0ODIwMCB1c2VzCisgICAgNDgzMDAgdXNlcworICAgIDQ4NDAwIHVzZXMKKyAgICA0ODUwMCB1c2VzCisgICAgNDg2MDAgdXNlcworICAgIDQ4NzAwIHVzZXMKKyAgICA0ODgwMCB1c2VzCisgICAgNDg5MDAgdXNlcworICAgIDQ5MDAwIHVzZXMKKyAgICA0OTEwMCB1c2VzCisgICAgNDkyMDAgdXNlcworICAgIDQ5MzAwIHVzZXMKKyAgICA0OTQwMCB1c2VzCisgICAgNDk1MDAgdXNlcworICAgIDQ5NjAwIHVzZXMKKyAgICA0OTcwMCB1c2VzCisgICAgNDk4MDAgdXNlcworICAgIDQ5OTAwIHVzZXMKKyAgICA1MDAwMCB1c2VzCisgICAgNTAxMDAgdXNlcworICAgIDUwMjAwIHVzZXMKKyAgICA1MDMwMCB1c2VzCisgICAgNTA0MDAgdXNlcworICAgIDUwNTAwIHVzZXMKKyAgICA1MDYwMCB1c2VzCisgICAgNTA3MDAgdXNlcworICAgIDUwODAwIHVzZXMKKyAgICA1MDkwMCB1c2VzCisgICAgNTEwMDAgdXNlcworICAgIDUxMTAwIHVzZXMKKyAgICA1MTIwMCB1c2VzCisgICAgNTEzMDAgdXNlcworICAgIDUxNDAwIHVzZXMKKyAgICA1MTUwMCB1c2VzCisgICAgNTE2MDAgdXNlcworICAgIDUxNzAwIHVzZXMKKyAgICA1MTgwMCB1c2VzCisgICAgNTE5MDAgdXNlcworICAgIDUyMDAwIHVzZXMKKyAgICA1MjEwMCB1c2VzCisgICAgNTIyMDAgdXNlcworICAgIDUyMzAwIHVzZXMKKyAgICA1MjQwMCB1c2VzCisgICAgNTI1MDAgdXNlcworICAgIDUyNjAwIHVzZXMKKyAgICA1MjcwMCB1c2VzCisgICAgNTI4MDAgdXNlcworICAgIDUyOTAwIHVzZXMKKyAgICA1MzAwMCB1c2VzCisgICAgNTMxMDAgdXNlcworICAgIDUzMjAwIHVzZXMKKyAgICA1MzMwMCB1c2VzCisgICAgNTM0MDAgdXNlcworICAgIDUzNTAwIHVzZXMKKyAgICA1MzYwMCB1c2VzCisgICAgNTM3MDAgdXNlcworICAgIDUzODAwIHVzZXMKKyAgICA1MzkwMCB1c2VzCisgICAgNTQwMDAgdXNlcworICAgIDU0MTAwIHVzZXMKKyAgICA1NDIwMCB1c2VzCisgICAgNTQzMDAgdXNlcworICAgIDU0NDAwIHVzZXMKKyAgICA1NDUwMCB1c2VzCisgICAgNTQ2MDAgdXNlcworICAgIDU0NzAwIHVzZXMKKyAgICA1NDgwMCB1c2VzCisgICAgNTQ5MDAgdXNlcworICAgIDU1MDAwIHVzZXMKKyAgICA1NTEwMCB1c2VzCisgICAgNTUyMDAgdXNlcworICAgIDU1MzAwIHVzZXMKKyAgICA1NTQwMCB1c2VzCisgICAgNTU1MDAgdXNlcworICAgIDU1NjAwIHVzZXMKKyAgICA1NTcwMCB1c2VzCisgICAgNTU4MDAgdXNlcworICAgIDU1OTAwIHVzZXMKKyAgICA1NjAwMCB1c2VzCisgICAgNTYxMDAgdXNlcworICAgIDU2MjAwIHVzZXMKKyAgICA1NjMwMCB1c2VzCisgICAgNTY0MDAgdXNlcworICAgIDU2NTAwIHVzZXMKKyAgICA1NjYwMCB1c2VzCisgICAgNTY3MDAgdXNlcworICAgIDU2ODAwIHVzZXMKKyAgICA1NjkwMCB1c2VzCisgICAgNTcwMDAgdXNlcworICAgIDU3MTAwIHVzZXMKKyAgICA1NzIwMCB1c2VzCisgICAgNTczMDAgdXNlcworICAgIDU3NDAwIHVzZXMKKyAgICA1NzUwMCB1c2VzCisgICAgNTc2MDAgdXNlcworICAgIDU3NzAwIHVzZXMKKyAgICA1NzgwMCB1c2VzCisgICAgNTc5MDAgdXNlcworICAgIDU4MDAwIHVzZXMKKyAgICA1ODEwMCB1c2VzCisgICAgNTgyMDAgdXNlcworICAgIDU4MzAwIHVzZXMKKyAgICA1ODQwMCB1c2VzCisgICAgNTg1MDAgdXNlcworICAgIDU4NjAwIHVzZXMKKyAgICA1ODcwMCB1c2VzCisgICAgNTg4MDAgdXNlcworICAgIDU4OTAwIHVzZXMKKyAgICA1OTAwMCB1c2VzCisgICAgNTkxMDAgdXNlcworICAgIDU5MjAwIHVzZXMKKyAgICA1OTMwMCB1c2VzCisgICAgNTk0MDAgdXNlcworICAgIDU5NTAwIHVzZXMKKyAgICA1OTYwMCB1c2VzCisgICAgNTk3MDAgdXNlcworICAgIDU5ODAwIHVzZXMKKyAgICA1OTkwMCB1c2VzCisgICAgNjAwMDAgdXNlcworICAgIDYwMTAwIHVzZXMKKyAgICA2MDIwMCB1c2VzCisgICAgNjAzMDAgdXNlcworICAgIDYwNDAwIHVzZXMKKyAgICA2MDUwMCB1c2VzCisgICAgNjA2MDAgdXNlcworICAgIDYwNzAwIHVzZXMKKyAgICA2MDgwMCB1c2VzCisgICAgNjA5MDAgdXNlcworICAgIDYxMDAwIHVzZXMKKyAgICA2MTEwMCB1c2VzCisgICAgNjEyMDAgdXNlcworICAgIDYxMzAwIHVzZXMKKyAgICA2MTQwMCB1c2VzCisgICAgNjE1MDAgdXNlcworICAgIDYxNjAwIHVzZXMKKyAgICA2MTcwMCB1c2VzCisgICAgNjE4MDAgdXNlcworICAgIDYxOTAwIHVzZXMKKyAgICA2MjAwMCB1c2VzCisgICAgNjIxMDAgdXNlcworICAgIDYyMjAwIHVzZXMKKyAgICA2MjMwMCB1c2VzCisgICAgNjI0MDAgdXNlcworICAgIDYyNTAwIHVzZXMKKyAgICA2MjYwMCB1c2VzCisgICAgNjI3MDAgdXNlcworICAgIDYyODAwIHVzZXMKKyAgICA2MjkwMCB1c2VzCisgICAgNjMwMDAgdXNlcworICAgIDYzMTAwIHVzZXMKKyAgICA2MzIwMCB1c2VzCisgICAgNjMzMDAgdXNlcworICAgIDYzNDAwIHVzZXMKKyAgICA2MzUwMCB1c2VzCisgICAgNjM2MDAgdXNlcworICAgIDYzNzAwIHVzZXMKKyAgICA2MzgwMCB1c2VzCisgICAgNjM5MDAgdXNlcworICAgIDY0MDAwIHVzZXMKKyAgICA2NDEwMCB1c2VzCisgICAgNjQyMDAgdXNlcworICAgIDY0MzAwIHVzZXMKKyAgICA2NDQwMCB1c2VzCisgICAgNjQ1MDAgdXNlcworICAgIDY0NjAwIHVzZXMKKyAgICA2NDcwMCB1c2VzCisgICAgNjQ4MDAgdXNlcworICAgIDY0OTAwIHVzZXMKKyAgICA2NTAwMCB1c2VzCisgICAgNjUxMDAgdXNlcworICAgIDY1MjAwIHVzZXMKKyAgICA2NTMwMCB1c2VzCisgICAgNjU0MDAgdXNlcworICAgIDY1NTAwIHVzZXMKKyAgICA2NTYwMCB1c2VzCisgICAgNjU3MDAgdXNlcworICAgIDY1ODAwIHVzZXMKKyAgICA2NTkwMCB1c2VzCisgICAgNjYwMDAgdXNlcworICAgIDY2MTAwIHVzZXMKKyAgICA2NjIwMCB1c2VzCisgICAgNjYzMDAgdXNlcworICAgIDY2NDAwIHVzZXMKKyAgICA2NjUwMCB1c2VzCisgICAgNjY2MDAgdXNlcworICAgIDY2NzAwIHVzZXMKKyAgICA2NjgwMCB1c2VzCisgICAgNjY5MDAgdXNlcworICAgIDY3MDAwIHVzZXMKKyAgICA2NzEwMCB1c2VzCisgICAgNjcyMDAgdXNlcworICAgIDY3MzAwIHVzZXMKKyAgICA2NzQwMCB1c2VzCisgICAgNjc1MDAgdXNlcworICAgIDY3NjAwIHVzZXMKKyAgICA2NzcwMCB1c2VzCisgICAgNjc4MDAgdXNlcworICAgIDY3OTAwIHVzZXMKKyAgICA2ODAwMCB1c2VzCisgICAgNjgxMDAgdXNlcworICAgIDY4MjAwIHVzZXMKKyAgICA2ODMwMCB1c2VzCisgICAgNjg0MDAgdXNlcworICAgIDY4NTAwIHVzZXMKKyAgICA2ODYwMCB1c2VzCisgICAgNjg3MDAgdXNlcworICAgIDY4ODAwIHVzZXMKKyAgICA2ODkwMCB1c2VzCisgICAgNjkwMDAgdXNlcworICAgIDY5MTAwIHVzZXMKKyAgICA2OTIwMCB1c2VzCisgICAgNjkzMDAgdXNlcworICAgIDY5NDAwIHVzZXMKKyAgICA2OTUwMCB1c2VzCisgICAgNjk2MDAgdXNlcworICAgIDY5NzAwIHVzZXMKKyAgICA2OTgwMCB1c2VzCisgICAgNjk5MDAgdXNlcworICAgIDcwMDAwIHVzZXMKKyAgICA3MDEwMCB1c2VzCisgICAgNzAyMDAgdXNlcworICAgIDcwMzAwIHVzZXMKKyAgICA3MDQwMCB1c2VzCisgICAgNzA1MDAgdXNlcworICAgIDcwNjAwIHVzZXMKKyAgICA3MDcwMCB1c2VzCisgICAgNzA4MDAgdXNlcworICAgIDcwOTAwIHVzZXMKKyAgICA3MTAwMCB1c2VzCisgICAgNzExMDAgdXNlcworICAgIDcxMjAwIHVzZXMKKyAgICA3MTMwMCB1c2VzCisgICAgNzE0MDAgdXNlcworICAgIDcxNTAwIHVzZXMKKyAgICA3MTYwMCB1c2VzCisgICAgNzE3MDAgdXNlcworICAgIDcxODAwIHVzZXMKKyAgICA3MTkwMCB1c2VzCisgICAgNzIwMDAgdXNlcworICAgIDcyMTAwIHVzZXMKKyAgICA3MjIwMCB1c2VzCisgICAgNzIzMDAgdXNlcworICAgIDcyNDAwIHVzZXMKKyAgICA3MjUwMCB1c2VzCisgICAgNzI2MDAgdXNlcworICAgIDcyNzAwIHVzZXMKKyAgICA3MjgwMCB1c2VzCisgICAgNzI5MDAgdXNlcworICAgIDczMDAwIHVzZXMKKyAgICA3MzEwMCB1c2VzCisgICAgNzMyMDAgdXNlcworICAgIDczMzAwIHVzZXMKKyAgICA3MzQwMCB1c2VzCisgICAgNzM1MDAgdXNlcworICAgIDczNjAwIHVzZXMKKyAgICA3MzcwMCB1c2VzCisgICAgNzM4MDAgdXNlcworICAgIDczOTAwIHVzZXMKKyAgICA3NDAwMCB1c2VzCisgICAgNzQxMDAgdXNlcworICAgIDc0MjAwIHVzZXMKKyAgICA3NDMwMCB1c2VzCisgICAgNzQ0MDAgdXNlcworICAgIDc0NTAwIHVzZXMKKyAgICA3NDYwMCB1c2VzCisgICAgNzQ3MDAgdXNlcworICAgIDc0ODAwIHVzZXMKKyAgICA3NDkwMCB1c2VzCisgICAgNzUwMDAgdXNlcworICAgIDc1MTAwIHVzZXMKKyAgICA3NTIwMCB1c2VzCisgICAgNzUzMDAgdXNlcworICAgIDc1NDAwIHVzZXMKKyAgICA3NTUwMCB1c2VzCisgICAgNzU2MDAgdXNlcworICAgIDc1NzAwIHVzZXMKKyAgICA3NTgwMCB1c2VzCisgICAgNzU5MDAgdXNlcworICAgIDc2MDAwIHVzZXMKKyAgICA3NjEwMCB1c2VzCisgICAgNzYyMDAgdXNlcworICAgIDc2MzAwIHVzZXMKKyAgICA3NjQwMCB1c2VzCisgICAgNzY1MDAgdXNlcworICAgIDc2NjAwIHVzZXMKKyAgICA3NjcwMCB1c2VzCisgICAgNzY4MDAgdXNlcworICAgIDc2OTAwIHVzZXMKKyAgICA3NzAwMCB1c2VzCisgICAgNzcxMDAgdXNlcworICAgIDc3MjAwIHVzZXMKKyAgICA3NzMwMCB1c2VzCisgICAgNzc0MDAgdXNlcworICAgIDc3NTAwIHVzZXMKKyAgICA3NzYwMCB1c2VzCisgICAgNzc3MDAgdXNlcworICAgIDc3ODAwIHVzZXMKKyAgICA3NzkwMCB1c2VzCisgICAgNzgwMDAgdXNlcworICAgIDc4MTAwIHVzZXMKKyAgICA3ODIwMCB1c2VzCisgICAgNzgzMDAgdXNlcworICAgIDc4NDAwIHVzZXMKKyAgICA3ODUwMCB1c2VzCisgICAgNzg2MDAgdXNlcworICAgIDc4NzAwIHVzZXMKKyAgICA3ODgwMCB1c2VzCisgICAgNzg5MDAgdXNlcworICAgIDc5MDAwIHVzZXMKKyAgICA3OTEwMCB1c2VzCisgICAgNzkyMDAgdXNlcworICAgIDc5MzAwIHVzZXMKKyAgICA3OTQwMCB1c2VzCisgICAgNzk1MDAgdXNlcworICAgIDc5NjAwIHVzZXMKKyAgICA3OTcwMCB1c2VzCisgICAgNzk4MDAgdXNlcworICAgIDc5OTAwIHVzZXMKKyAgICA4MDAwMCB1c2VzCisgICAgODAxMDAgdXNlcworICAgIDgwMjAwIHVzZXMKKyAgICA4MDMwMCB1c2VzCisgICAgODA0MDAgdXNlcworICAgIDgwNTAwIHVzZXMKKyAgICA4MDYwMCB1c2VzCisgICAgODA3MDAgdXNlcworICAgIDgwODAwIHVzZXMKKyAgICA4MDkwMCB1c2VzCisgICAgODEwMDAgdXNlcworICAgIDgxMTAwIHVzZXMKKyAgICA4MTIwMCB1c2VzCisgICAgODEzMDAgdXNlcworICAgIDgxNDAwIHVzZXMKKyAgICA4MTUwMCB1c2VzCisgICAgODE2MDAgdXNlcworICAgIDgxNzAwIHVzZXMKKyAgICA4MTgwMCB1c2VzCisgICAgODE5MDAgdXNlcworICAgIDgyMDAwIHVzZXMKKyAgICA4MjEwMCB1c2VzCisgICAgODIyMDAgdXNlcworICAgIDgyMzAwIHVzZXMKKyAgICA4MjQwMCB1c2VzCisgICAgODI1MDAgdXNlcworICAgIDgyNjAwIHVzZXMKKyAgICA4MjcwMCB1c2VzCisgICAgODI4MDAgdXNlcworICAgIDgyOTAwIHVzZXMKKyAgICA4MzAwMCB1c2VzCisgICAgODMxMDAgdXNlcworICAgIDgzMjAwIHVzZXMKKyAgICA4MzMwMCB1c2VzCisgICAgODM0MDAgdXNlcworICAgIDgzNTAwIHVzZXMKKyAgICA4MzYwMCB1c2VzCisgICAgODM3MDAgdXNlcworICAgIDgzODAwIHVzZXMKKyAgICA4MzkwMCB1c2VzCisgICAgODQwMDAgdXNlcworICAgIDg0MTAwIHVzZXMKKyAgICA4NDIwMCB1c2VzCisgICAgODQzMDAgdXNlcworICAgIDg0NDAwIHVzZXMKKyAgICA4NDUwMCB1c2VzCisgICAgODQ2MDAgdXNlcworICAgIDg0NzAwIHVzZXMKKyAgICA4NDgwMCB1c2VzCisgICAgODQ5MDAgdXNlcworICAgIDg1MDAwIHVzZXMKKyAgICA4NTEwMCB1c2VzCisgICAgODUyMDAgdXNlcworICAgIDg1MzAwIHVzZXMKKyAgICA4NTQwMCB1c2VzCisgICAgODU1MDAgdXNlcworICAgIDg1NjAwIHVzZXMKKyAgICA4NTcwMCB1c2VzCisgICAgODU4MDAgdXNlcworICAgIDg1OTAwIHVzZXMKKyAgICA4NjAwMCB1c2VzCisgICAgODYxMDAgdXNlcworICAgIDg2MjAwIHVzZXMKKyAgICA4NjMwMCB1c2VzCisgICAgODY0MDAgdXNlcworICAgIDg2NTAwIHVzZXMKKyAgICA4NjYwMCB1c2VzCisgICAgODY3MDAgdXNlcworICAgIDg2ODAwIHVzZXMKKyAgICA4NjkwMCB1c2VzCisgICAgODcwMDAgdXNlcworICAgIDg3MTAwIHVzZXMKKyAgICA4NzIwMCB1c2VzCisgICAgODczMDAgdXNlcworICAgIDg3NDAwIHVzZXMKKyAgICA4NzUwMCB1c2VzCisgICAgODc2MDAgdXNlcworICAgIDg3NzAwIHVzZXMKKyAgICA4NzgwMCB1c2VzCisgICAgODc5MDAgdXNlcworICAgIDg4MDAwIHVzZXMKKyAgICA4ODEwMCB1c2VzCisgICAgODgyMDAgdXNlcworICAgIDg4MzAwIHVzZXMKKyAgICA4ODQwMCB1c2VzCisgICAgODg1MDAgdXNlcworICAgIDg4NjAwIHVzZXMKKyAgICA4ODcwMCB1c2VzCisgICAgODg4MDAgdXNlcworICAgIDg4OTAwIHVzZXMKKyAgICA4OTAwMCB1c2VzCisgICAgODkxMDAgdXNlcworICAgIDg5MjAwIHVzZXMKKyAgICA4OTMwMCB1c2VzCisgICAgODk0MDAgdXNlcworICAgIDg5NTAwIHVzZXMKKyAgICA4OTYwMCB1c2VzCisgICAgODk3MDAgdXNlcworICAgIDg5ODAwIHVzZXMKKyAgICA4OTkwMCB1c2VzCisgICAgOTAwMDAgdXNlcworICAgIDkwMTAwIHVzZXMKKyAgICA5MDIwMCB1c2VzCisgICAgOTAzMDAgdXNlcworICAgIDkwNDAwIHVzZXMKKyAgICA5MDUwMCB1c2VzCisgICAgOTA2MDAgdXNlcworICAgIDkwNzAwIHVzZXMKKyAgICA5MDgwMCB1c2VzCisgICAgOTA5MDAgdXNlcworICAgIDkxMDAwIHVzZXMKKyAgICA5MTEwMCB1c2VzCisgICAgOTEyMDAgdXNlcworICAgIDkxMzAwIHVzZXMKKyAgICA5MTQwMCB1c2VzCisgICAgOTE1MDAgdXNlcworICAgIDkxNjAwIHVzZXMKKyAgICA5MTcwMCB1c2VzCisgICAgOTE4MDAgdXNlcworICAgIDkxOTAwIHVzZXMKKyAgICA5MjAwMCB1c2VzCisgICAgOTIxMDAgdXNlcworICAgIDkyMjAwIHVzZXMKKyAgICA5MjMwMCB1c2VzCisgICAgOTI0MDAgdXNlcworICAgIDkyNTAwIHVzZXMKKyAgICA5MjYwMCB1c2VzCisgICAgOTI3MDAgdXNlcworICAgIDkyODAwIHVzZXMKKyAgICA5MjkwMCB1c2VzCisgICAgOTMwMDAgdXNlcworICAgIDkzMTAwIHVzZXMKKyAgICA5MzIwMCB1c2VzCisgICAgOTMzMDAgdXNlcworICAgIDkzNDAwIHVzZXMKKyAgICA5MzUwMCB1c2VzCisgICAgOTM2MDAgdXNlcworICAgIDkzNzAwIHVzZXMKKyAgICA5MzgwMCB1c2VzCisgICAgOTM5MDAgdXNlcworICAgIDk0MDAwIHVzZXMKKyAgICA5NDEwMCB1c2VzCisgICAgOTQyMDAgdXNlcworICAgIDk0MzAwIHVzZXMKKyAgICA5NDQwMCB1c2VzCisgICAgOTQ1MDAgdXNlcworICAgIDk0NjAwIHVzZXMKKyAgICA5NDcwMCB1c2VzCisgICAgOTQ4MDAgdXNlcworICAgIDk0OTAwIHVzZXMKKyAgICA5NTAwMCB1c2VzCisgICAgOTUxMDAgdXNlcworICAgIDk1MjAwIHVzZXMKKyAgICA5NTMwMCB1c2VzCisgICAgOTU0MDAgdXNlcworICAgIDk1NTAwIHVzZXMKKyAgICA5NTYwMCB1c2VzCisgICAgOTU3MDAgdXNlcworICAgIDk1ODAwIHVzZXMKKyAgICA5NTkwMCB1c2VzCisgICAgOTYwMDAgdXNlcworICAgIDk2MTAwIHVzZXMKKyAgICA5NjIwMCB1c2VzCisgICAgOTYzMDAgdXNlcworICAgIDk2NDAwIHVzZXMKKyAgICA5NjUwMCB1c2VzCisgICAgOTY2MDAgdXNlcworICAgIDk2NzAwIHVzZXMKKyAgICA5NjgwMCB1c2VzCisgICAgOTY5MDAgdXNlcworICAgIDk3MDAwIHVzZXMKKyAgICA5NzEwMCB1c2VzCisgICAgOTcyMDAgdXNlcworICAgIDk3MzAwIHVzZXMKKyAgICA5NzQwMCB1c2VzCisgICAgOTc1MDAgdXNlcworICAgIDk3NjAwIHVzZXMKKyAgICA5NzcwMCB1c2VzCisgICAgOTc4MDAgdXNlcworICAgIDk3OTAwIHVzZXMKKyAgICA5ODAwMCB1c2VzCisgICAgOTgxMDAgdXNlcworICAgIDk4MjAwIHVzZXMKKyAgICA5ODMwMCB1c2VzCisgICAgOTg0MDAgdXNlcworICAgIDk4NTAwIHVzZXMKKyAgICA5ODYwMCB1c2VzCisgICAgOTg3MDAgdXNlcworICAgIDk4ODAwIHVzZXMKKyAgICA5ODkwMCB1c2VzCisgICAgOTkwMDAgdXNlcworICAgIDk5MTAwIHVzZXMKKyAgICA5OTIwMCB1c2VzCisgICAgOTkzMDAgdXNlcworICAgIDk5NDAwIHVzZXMKKyAgICA5OTUwMCB1c2VzCisgICAgOTk2MDAgdXNlcworICAgIDk5NzAwIHVzZXMKKyAgICA5OTgwMCB1c2VzCisgICAgOTk5MDAgdXNlcworICAgIDEwMDAwMCB1c2VzCisgICAgMTAwMTAwIHVzZXMKKyAgICAxMDAyMDAgdXNlcworICAgIDEwMDMwMCB1c2VzCisgICAgMTAwNDAwIHVzZXMKKyAgICAxMDA1MDAgdXNlcworICAgIDEwMDYwMCB1c2VzCisgICAgMTAwNzAwIHVzZXMKKyAgICAxMDA4MDAgdXNlcworICAgIDEwMDkwMCB1c2VzCisgICAgMTAxMDAwIHVzZXMKKyAgICAxMDExMDAgdXNlcworICAgIDEwMTIwMCB1c2VzCisgICAgMTAxMzAwIHVzZXMKKyAgICAxMDE0MDAgdXNlcworICAgIDEwMTUwMCB1c2VzCisgICAgMTAxNjAwIHVzZXMKKyAgICAxMDE3MDAgdXNlcworICAgIDEwMTgwMCB1c2VzCisgICAgMTAxOTAwIHVzZXMKKyAgICAxMDIwMDAgdXNlcworICAgIDEwMjEwMCB1c2VzCisgICAgMTAyMjAwIHVzZXMKKyAgICAxMDIzMDAgdXNlcworICAgIDEwMjQwMCB1c2VzCisgICAgMTAyNTAwIHVzZXMKKyAgICAxMDI2MDAgdXNlcworICAgIDEwMjcwMCB1c2VzCisgICAgMTAyODAwIHVzZXMKKyAgICAxMDI5MDAgdXNlcworICAgIDEwMzAwMCB1c2VzCisgICAgMTAzMTAwIHVzZXMKKyAgICAxMDMyMDAgdXNlcworICAgIDEwMzMwMCB1c2VzCisgICAgMTAzNDAwIHVzZXMKKyAgICAxMDM1MDAgdXNlcworICAgIDEwMzYwMCB1c2VzCisgICAgMTAzNzAwIHVzZXMKKyAgICAxMDM4MDAgdXNlcworICAgIDEwMzkwMCB1c2VzCisgICAgMTA0MDAwIHVzZXMKKyAgICAxMDQxMDAgdXNlcworICAgIDEwNDIwMCB1c2VzCisgICAgMTA0MzAwIHVzZXMKKyAgICAxMDQ0MDAgdXNlcworICAgIDEwNDUwMCB1c2VzCisgICAgMTA0NjAwIHVzZXMKKyAgICAxMDQ3MDAgdXNlcworICAgIDEwNDgwMCB1c2VzCisgICAgMTA0OTAwIHVzZXMKKyAgICAxMDUwMDAgdXNlcworICAgIDEwNTEwMCB1c2VzCisgICAgMTA1MjAwIHVzZXMKKyAgICAxMDUzMDAgdXNlcworICAgIDEwNTQwMCB1c2VzCisgICAgMTA1NTAwIHVzZXMKKyAgICAxMDU2MDAgdXNlcworICAgIDEwNTcwMCB1c2VzCisgICAgMTA1ODAwIHVzZXMKKyAgICAxMDU5MDAgdXNlcworICAgIDEwNjAwMCB1c2VzCisgICAgMTA2MTAwIHVzZXMKKyAgICAxMDYyMDAgdXNlcworICAgIDEwNjMwMCB1c2VzCisgICAgMTA2NDAwIHVzZXMKKyAgICAxMDY1MDAgdXNlcworICAgIDEwNjYwMCB1c2VzCisgICAgMTA2NzAwIHVzZXMKKyAgICAxMDY4MDAgdXNlcworICAgIDEwNjkwMCB1c2VzCisgICAgMTA3MDAwIHVzZXMKKyAgICAxMDcxMDAgdXNlcworICAgIDEwNzIwMCB1c2VzCisgICAgMTA3MzAwIHVzZXMKKyAgICAxMDc0MDAgdXNlcworICAgIDEwNzUwMCB1c2VzCisgICAgMTA3NjAwIHVzZXMKKyAgICAxMDc3MDAgdXNlcworICAgIDEwNzgwMCB1c2VzCisgICAgMTA3OTAwIHVzZXMKKyAgICAxMDgwMDAgdXNlcworICAgIDEwODEwMCB1c2VzCisgICAgMTA4MjAwIHVzZXMKKyAgICAxMDgzMDAgdXNlcworICAgIDEwODQwMCB1c2VzCisgICAgMTA4NTAwIHVzZXMKKyAgICAxMDg2MDAgdXNlcworICAgIDEwODcwMCB1c2VzCisgICAgMTA4ODAwIHVzZXMKKyAgICAxMDg5MDAgdXNlcworICAgIDEwOTAwMCB1c2VzCisgICAgMTA5MTAwIHVzZXMKKyAgICAxMDkyMDAgdXNlcworICAgIDEwOTMwMCB1c2VzCisgICAgMTA5NDAwIHVzZXMKKyAgICAxMDk1MDAgdXNlcworICAgIDEwOTYwMCB1c2VzCisgICAgMTA5NzAwIHVzZXMKKyAgICAxMDk4MDAgdXNlcworICAgIDEwOTkwMCB1c2VzCisgICAgMTEwMDAwIHVzZXMKKyAgICAxMTAxMDAgdXNlcworICAgIDExMDIwMCB1c2VzCisgICAgMTEwMzAwIHVzZXMKKyAgICAxMTA0MDAgdXNlcworICAgIDExMDUwMCB1c2VzCisgICAgMTEwNjAwIHVzZXMKKyAgICAxMTA3MDAgdXNlcworICAgIDExMDgwMCB1c2VzCisgICAgMTEwOTAwIHVzZXMKKyAgICAxMTEwMDAgdXNlcworICAgIDExMTEwMCB1c2VzCisgICAgMTExMjAwIHVzZXMKKyAgICAxMTEzMDAgdXNlcworICAgIDExMTQwMCB1c2VzCisgICAgMTExNTAwIHVzZXMKKyAgICAxMTE2MDAgdXNlcworICAgIDExMTcwMCB1c2VzCisgICAgMTExODAwIHVzZXMKKyAgICAxMTE5MDAgdXNlcworICAgIDExMjAwMCB1c2VzCisgICAgMTEyMTAwIHVzZXMKKyAgICAxMTIyMDAgdXNlcworICAgIDExMjMwMCB1c2VzCisgICAgMTEyNDAwIHVzZXMKKyAgICAxMTI1MDAgdXNlcworICAgIDExMjYwMCB1c2VzCisgICAgMTEyNzAwIHVzZXMKKyAgICAxMTI4MDAgdXNlcworICAgIDExMjkwMCB1c2VzCisgICAgMTEzMDAwIHVzZXMKKyAgICAxMTMxMDAgdXNlcworICAgIDExMzIwMCB1c2VzCisgICAgMTEzMzAwIHVzZXMKKyAgICAxMTM0MDAgdXNlcworICAgIDExMzUwMCB1c2VzCisgICAgMTEzNjAwIHVzZXMKKyAgICAxMTM3MDAgdXNlcworICAgIDExMzgwMCB1c2VzCisgICAgMTEzOTAwIHVzZXMKKyAgICAxMTQwMDAgdXNlcworICAgIDExNDEwMCB1c2VzCisgICAgMTE0MjAwIHVzZXMKKyAgICAxMTQzMDAgdXNlcworICAgIDExNDQwMCB1c2VzCisgICAgMTE0NTAwIHVzZXMKKyAgICAxMTQ2MDAgdXNlcworICAgIDExNDcwMCB1c2VzCisgICAgMTE0ODAwIHVzZXMKKyAgICAxMTQ5MDAgdXNlcworICAgIDExNTAwMCB1c2VzCisgICAgMTE1MTAwIHVzZXMKKyAgICAxMTUyMDAgdXNlcworICAgIDExNTMwMCB1c2VzCisgICAgMTE1NDAwIHVzZXMKKyAgICAxMTU1MDAgdXNlcworICAgIDExNTYwMCB1c2VzCisgICAgMTE1NzAwIHVzZXMKKyAgICAxMTU4MDAgdXNlcworICAgIDExNTkwMCB1c2VzCisgICAgMTE2MDAwIHVzZXMKKyAgICAxMTYxMDAgdXNlcworICAgIDExNjIwMCB1c2VzCisgICAgMTE2MzAwIHVzZXMKKyAgICAxMTY0MDAgdXNlcworICAgIDExNjUwMCB1c2VzCisgICAgMTE2NjAwIHVzZXMKKyAgICAxMTY3MDAgdXNlcworICAgIDExNjgwMCB1c2VzCisgICAgMTE2OTAwIHVzZXMKKyAgICAxMTcwMDAgdXNlcworICAgIDExNzEwMCB1c2VzCisgICAgMTE3MjAwIHVzZXMKKyAgICAxMTczMDAgdXNlcworICAgIDExNzQwMCB1c2VzCisgICAgMTE3NTAwIHVzZXMKKyAgICAxMTc2MDAgdXNlcworICAgIDExNzcwMCB1c2VzCisgICAgMTE3ODAwIHVzZXMKKyAgICAxMTc5MDAgdXNlcworICAgIDExODAwMCB1c2VzCisgICAgMTE4MTAwIHVzZXMKKyAgICAxMTgyMDAgdXNlcworICAgIDExODMwMCB1c2VzCisgICAgMTE4NDAwIHVzZXMKKyAgICAxMTg1MDAgdXNlcworICAgIDExODYwMCB1c2VzCisgICAgMTE4NzAwIHVzZXMKKyAgICAxMTg4MDAgdXNlcworICAgIDExODkwMCB1c2VzCisgICAgMTE5MDAwIHVzZXMKKyAgICAxMTkxMDAgdXNlcworICAgIDExOTIwMCB1c2VzCisgICAgMTE5MzAwIHVzZXMKKyAgICAxMTk0MDAgdXNlcworICAgIDExOTUwMCB1c2VzCisgICAgMTE5NjAwIHVzZXMKKyAgICAxMTk3MDAgdXNlcworICAgIDExOTgwMCB1c2VzCisgICAgMTE5OTAwIHVzZXMKKyAgICAxMjAwMDAgdXNlcworICAgIDEyMDEwMCB1c2VzCisgICAgMTIwMjAwIHVzZXMKKyAgICAxMjAzMDAgdXNlcworICAgIDEyMDQwMCB1c2VzCisgICAgMTIwNTAwIHVzZXMKKyAgICAxMjA2MDAgdXNlcworICAgIDEyMDcwMCB1c2VzCisgICAgMTIwODAwIHVzZXMKKyAgICAxMjA5MDAgdXNlcworICAgIDEyMTAwMCB1c2VzCisgICAgMTIxMTAwIHVzZXMKKyAgICAxMjEyMDAgdXNlcworICAgIDEyMTMwMCB1c2VzCisgICAgMTIxNDAwIHVzZXMKKyAgICAxMjE1MDAgdXNlcworICAgIDEyMTYwMCB1c2VzCisgICAgMTIxNzAwIHVzZXMKKyAgICAxMjE4MDAgdXNlcworUmVhZGluZyAic2t5MTMwX2ZkX3NjX2hkX19jbGtkbHlidWY0czE1XzIiLgorUmVhZGluZyAic2t5MTMwX2ZkX3NjX2hkX19tdXgyXzEiLgorUmVhZGluZyAic2t5MTMwX2ZkX3NjX2hkX19tdXgyXzQiLgorUmVhZGluZyAiY2xrX3NrZXdfYWRqdXN0Ii4KKyAgICAxMDAgdXNlcworICAgIDIwMCB1c2VzCisgICAgMzAwIHVzZXMKKyAgICA0MDAgdXNlcworICAgIDUwMCB1c2VzCisgICAgNjAwIHVzZXMKKyAgICA3MDAgdXNlcworUmVhZGluZyAic2t5MTMwX2VmX3NjX2hkX19mYWtlZGlvZGVfMiIuCitSZWFkaW5nICJza3kxMzBfZmRfc2NfaGRfX2J1ZmJ1Zl8xNiIuCitSZWFkaW5nICJ3Yl9ob3N0Ii4KKyAgICAxMDAgdXNlcworICAgIDIwMCB1c2VzCisgICAgMzAwIHVzZXMKKyAgICA0MDAgdXNlcworICAgIDUwMCB1c2VzCisgICAgNjAwIHVzZXMKKyAgICA3MDAgdXNlcworICAgIDgwMCB1c2VzCisgICAgOTAwIHVzZXMKKyAgICAxMDAwIHVzZXMKKyAgICAxMTAwIHVzZXMKKyAgICAxMjAwIHVzZXMKKyAgICAxMzAwIHVzZXMKKyAgICAxNDAwIHVzZXMKKyAgICAxNTAwIHVzZXMKKyAgICAxNjAwIHVzZXMKKyAgICAxNzAwIHVzZXMKKyAgICAxODAwIHVzZXMKKyAgICAxOTAwIHVzZXMKKyAgICAyMDAwIHVzZXMKKyAgICAyMTAwIHVzZXMKKyAgICAyMjAwIHVzZXMKKyAgICAyMzAwIHVzZXMKKyAgICAyNDAwIHVzZXMKKyAgICAyNTAwIHVzZXMKKyAgICAyNjAwIHVzZXMKKyAgICAyNzAwIHVzZXMKKyAgICAyODAwIHVzZXMKKyAgICAyOTAwIHVzZXMKKyAgICAzMDAwIHVzZXMKKyAgICAzMTAwIHVzZXMKKyAgICAzMjAwIHVzZXMKKyAgICAzMzAwIHVzZXMKKyAgICAzNDAwIHVzZXMKKyAgICAzNTAwIHVzZXMKKyAgICAzNjAwIHVzZXMKKyAgICAzNzAwIHVzZXMKKyAgICAzODAwIHVzZXMKKyAgICAzOTAwIHVzZXMKKyAgICA0MDAwIHVzZXMKKyAgICA0MTAwIHVzZXMKKyAgICA0MjAwIHVzZXMKKyAgICA0MzAwIHVzZXMKKyAgICA0NDAwIHVzZXMKKyAgICA0NTAwIHVzZXMKKyAgICA0NjAwIHVzZXMKKyAgICA0NzAwIHVzZXMKKyAgICA0ODAwIHVzZXMKKyAgICA0OTAwIHVzZXMKKyAgICA1MDAwIHVzZXMKKyAgICA1MTAwIHVzZXMKKyAgICA1MjAwIHVzZXMKKyAgICA1MzAwIHVzZXMKKyAgICA1NDAwIHVzZXMKKyAgICA1NTAwIHVzZXMKKyAgICA1NjAwIHVzZXMKKyAgICA1NzAwIHVzZXMKKyAgICA1ODAwIHVzZXMKKyAgICA1OTAwIHVzZXMKKyAgICA2MDAwIHVzZXMKKyAgICA2MTAwIHVzZXMKKyAgICA2MjAwIHVzZXMKKyAgICA2MzAwIHVzZXMKKyAgICA2NDAwIHVzZXMKKyAgICA2NTAwIHVzZXMKKyAgICA2NjAwIHVzZXMKKyAgICA2NzAwIHVzZXMKKyAgICA2ODAwIHVzZXMKKyAgICA2OTAwIHVzZXMKKyAgICA3MDAwIHVzZXMKKyAgICA3MTAwIHVzZXMKKyAgICA3MjAwIHVzZXMKKyAgICA3MzAwIHVzZXMKKyAgICA3NDAwIHVzZXMKKyAgICA3NTAwIHVzZXMKKyAgICA3NjAwIHVzZXMKKyAgICA3NzAwIHVzZXMKKyAgICA3ODAwIHVzZXMKKyAgICA3OTAwIHVzZXMKKyAgICA4MDAwIHVzZXMKKyAgICA4MTAwIHVzZXMKKyAgICA4MjAwIHVzZXMKKyAgICA4MzAwIHVzZXMKKyAgICA4NDAwIHVzZXMKKyAgICA4NTAwIHVzZXMKKyAgICA4NjAwIHVzZXMKKyAgICA4NzAwIHVzZXMKKyAgICA4ODAwIHVzZXMKKyAgICA4OTAwIHVzZXMKKyAgICA5MDAwIHVzZXMKKyAgICA5MTAwIHVzZXMKKyAgICA5MjAwIHVzZXMKKyAgICA5MzAwIHVzZXMKKyAgICA5NDAwIHVzZXMKKyAgICA5NTAwIHVzZXMKKyAgICA5NjAwIHVzZXMKKyAgICA5NzAwIHVzZXMKKyAgICA5ODAwIHVzZXMKKyAgICA5OTAwIHVzZXMKKyAgICAxMDAwMCB1c2VzCisgICAgMTAxMDAgdXNlcworICAgIDEwMjAwIHVzZXMKKyAgICAxMDMwMCB1c2VzCisgICAgMTA0MDAgdXNlcworICAgIDEwNTAwIHVzZXMKKyAgICAxMDYwMCB1c2VzCisgICAgMTA3MDAgdXNlcworICAgIDEwODAwIHVzZXMKKyAgICAxMDkwMCB1c2VzCisgICAgMTEwMDAgdXNlcworICAgIDExMTAwIHVzZXMKKyAgICAxMTIwMCB1c2VzCisgICAgMTEzMDAgdXNlcworICAgIDExNDAwIHVzZXMKKyAgICAxMTUwMCB1c2VzCisgICAgMTE2MDAgdXNlcworICAgIDExNzAwIHVzZXMKKyAgICAxMTgwMCB1c2VzCisgICAgMTE5MDAgdXNlcworICAgIDEyMDAwIHVzZXMKKyAgICAxMjEwMCB1c2VzCitSZWFkaW5nICJzY3IxX2ludGYiLgorICAgIDEwMCB1c2VzCisgICAgMjAwIHVzZXMKKyAgICAzMDAgdXNlcworICAgIDQwMCB1c2VzCisgICAgNTAwIHVzZXMKKyAgICA2MDAgdXNlcworICAgIDcwMCB1c2VzCisgICAgODAwIHVzZXMKKyAgICA5MDAgdXNlcworICAgIDEwMDAgdXNlcworICAgIDExMDAgdXNlcworICAgIDEyMDAgdXNlcworICAgIDEzMDAgdXNlcworICAgIDE0MDAgdXNlcworICAgIDE1MDAgdXNlcworICAgIDE2MDAgdXNlcworICAgIDE3MDAgdXNlcworICAgIDE4MDAgdXNlcworICAgIDE5MDAgdXNlcworICAgIDIwMDAgdXNlcworICAgIDIxMDAgdXNlcworICAgIDIyMDAgdXNlcworICAgIDIzMDAgdXNlcworICAgIDI0MDAgdXNlcworICAgIDI1MDAgdXNlcworICAgIDI2MDAgdXNlcworICAgIDI3MDAgdXNlcworICAgIDI4MDAgdXNlcworICAgIDI5MDAgdXNlcworICAgIDMwMDAgdXNlcworICAgIDMxMDAgdXNlcworICAgIDMyMDAgdXNlcworICAgIDMzMDAgdXNlcworICAgIDM0MDAgdXNlcworICAgIDM1MDAgdXNlcworICAgIDM2MDAgdXNlcworICAgIDM3MDAgdXNlcworICAgIDM4MDAgdXNlcworICAgIDM5MDAgdXNlcworICAgIDQwMDAgdXNlcworICAgIDQxMDAgdXNlcworICAgIDQyMDAgdXNlcworICAgIDQzMDAgdXNlcworICAgIDQ0MDAgdXNlcworICAgIDQ1MDAgdXNlcworICAgIDQ2MDAgdXNlcworICAgIDQ3MDAgdXNlcworICAgIDQ4MDAgdXNlcworICAgIDQ5MDAgdXNlcworICAgIDUwMDAgdXNlcworICAgIDUxMDAgdXNlcworICAgIDUyMDAgdXNlcworICAgIDUzMDAgdXNlcworICAgIDU0MDAgdXNlcworICAgIDU1MDAgdXNlcworICAgIDU2MDAgdXNlcworICAgIDU3MDAgdXNlcworICAgIDU4MDAgdXNlcworICAgIDU5MDAgdXNlcworICAgIDYwMDAgdXNlcworICAgIDYxMDAgdXNlcworICAgIDYyMDAgdXNlcworICAgIDYzMDAgdXNlcworICAgIDY0MDAgdXNlcworICAgIDY1MDAgdXNlcworICAgIDY2MDAgdXNlcworICAgIDY3MDAgdXNlcworICAgIDY4MDAgdXNlcworICAgIDY5MDAgdXNlcworICAgIDcwMDAgdXNlcworICAgIDcxMDAgdXNlcworICAgIDcyMDAgdXNlcworICAgIDczMDAgdXNlcworICAgIDc0MDAgdXNlcworICAgIDc1MDAgdXNlcworICAgIDc2MDAgdXNlcworICAgIDc3MDAgdXNlcworICAgIDc4MDAgdXNlcworICAgIDc5MDAgdXNlcworICAgIDgwMDAgdXNlcworICAgIDgxMDAgdXNlcworICAgIDgyMDAgdXNlcworICAgIDgzMDAgdXNlcworICAgIDg0MDAgdXNlcworICAgIDg1MDAgdXNlcworICAgIDg2MDAgdXNlcworICAgIDg3MDAgdXNlcworICAgIDg4MDAgdXNlcworICAgIDg5MDAgdXNlcworICAgIDkwMDAgdXNlcworICAgIDkxMDAgdXNlcworICAgIDkyMDAgdXNlcworICAgIDkzMDAgdXNlcworICAgIDk0MDAgdXNlcworICAgIDk1MDAgdXNlcworICAgIDk2MDAgdXNlcworICAgIDk3MDAgdXNlcworICAgIDk4MDAgdXNlcworICAgIDk5MDAgdXNlcworICAgIDEwMDAwIHVzZXMKKyAgICAxMDEwMCB1c2VzCisgICAgMTAyMDAgdXNlcworICAgIDEwMzAwIHVzZXMKKyAgICAxMDQwMCB1c2VzCisgICAgMTA1MDAgdXNlcworICAgIDEwNjAwIHVzZXMKKyAgICAxMDcwMCB1c2VzCisgICAgMTA4MDAgdXNlcworICAgIDEwOTAwIHVzZXMKKyAgICAxMTAwMCB1c2VzCisgICAgMTExMDAgdXNlcworICAgIDExMjAwIHVzZXMKKyAgICAxMTMwMCB1c2VzCisgICAgMTE0MDAgdXNlcworICAgIDExNTAwIHVzZXMKKyAgICAxMTYwMCB1c2VzCisgICAgMTE3MDAgdXNlcworICAgIDExODAwIHVzZXMKKyAgICAxMTkwMCB1c2VzCisgICAgMTIwMDAgdXNlcworICAgIDEyMTAwIHVzZXMKKyAgICAxMjIwMCB1c2VzCisgICAgMTIzMDAgdXNlcworICAgIDEyNDAwIHVzZXMKKyAgICAxMjUwMCB1c2VzCisgICAgMTI2MDAgdXNlcworICAgIDEyNzAwIHVzZXMKKyAgICAxMjgwMCB1c2VzCisgICAgMTI5MDAgdXNlcworICAgIDEzMDAwIHVzZXMKKyAgICAxMzEwMCB1c2VzCisgICAgMTMyMDAgdXNlcworICAgIDEzMzAwIHVzZXMKKyAgICAxMzQwMCB1c2VzCisgICAgMTM1MDAgdXNlcworICAgIDEzNjAwIHVzZXMKKyAgICAxMzcwMCB1c2VzCisgICAgMTM4MDAgdXNlcworICAgIDEzOTAwIHVzZXMKKyAgICAxNDAwMCB1c2VzCisgICAgMTQxMDAgdXNlcworICAgIDE0MjAwIHVzZXMKKyAgICAxNDMwMCB1c2VzCisgICAgMTQ0MDAgdXNlcworICAgIDE0NTAwIHVzZXMKKyAgICAxNDYwMCB1c2VzCisgICAgMTQ3MDAgdXNlcworICAgIDE0ODAwIHVzZXMKKyAgICAxNDkwMCB1c2VzCisgICAgMTUwMDAgdXNlcworICAgIDE1MTAwIHVzZXMKKyAgICAxNTIwMCB1c2VzCisgICAgMTUzMDAgdXNlcworICAgIDE1NDAwIHVzZXMKKyAgICAxNTUwMCB1c2VzCisgICAgMTU2MDAgdXNlcworICAgIDE1NzAwIHVzZXMKKyAgICAxNTgwMCB1c2VzCisgICAgMTU5MDAgdXNlcworICAgIDE2MDAwIHVzZXMKKyAgICAxNjEwMCB1c2VzCisgICAgMTYyMDAgdXNlcworICAgIDE2MzAwIHVzZXMKKyAgICAxNjQwMCB1c2VzCisgICAgMTY1MDAgdXNlcworICAgIDE2NjAwIHVzZXMKKyAgICAxNjcwMCB1c2VzCisgICAgMTY4MDAgdXNlcworICAgIDE2OTAwIHVzZXMKKyAgICAxNzAwMCB1c2VzCisgICAgMTcxMDAgdXNlcworICAgIDE3MjAwIHVzZXMKKyAgICAxNzMwMCB1c2VzCisgICAgMTc0MDAgdXNlcworICAgIDE3NTAwIHVzZXMKKyAgICAxNzYwMCB1c2VzCisgICAgMTc3MDAgdXNlcworICAgIDE3ODAwIHVzZXMKKyAgICAxNzkwMCB1c2VzCisgICAgMTgwMDAgdXNlcworICAgIDE4MTAwIHVzZXMKKyAgICAxODIwMCB1c2VzCisgICAgMTgzMDAgdXNlcworICAgIDE4NDAwIHVzZXMKKyAgICAxODUwMCB1c2VzCisgICAgMTg2MDAgdXNlcworICAgIDE4NzAwIHVzZXMKKyAgICAxODgwMCB1c2VzCisgICAgMTg5MDAgdXNlcworICAgIDE5MDAwIHVzZXMKKyAgICAxOTEwMCB1c2VzCisgICAgMTkyMDAgdXNlcworICAgIDE5MzAwIHVzZXMKKyAgICAxOTQwMCB1c2VzCisgICAgMTk1MDAgdXNlcworICAgIDE5NjAwIHVzZXMKKyAgICAxOTcwMCB1c2VzCisgICAgMTk4MDAgdXNlcworICAgIDE5OTAwIHVzZXMKKyAgICAyMDAwMCB1c2VzCisgICAgMjAxMDAgdXNlcworICAgIDIwMjAwIHVzZXMKKyAgICAyMDMwMCB1c2VzCisgICAgMjA0MDAgdXNlcworICAgIDIwNTAwIHVzZXMKKyAgICAyMDYwMCB1c2VzCisgICAgMjA3MDAgdXNlcworICAgIDIwODAwIHVzZXMKKyAgICAyMDkwMCB1c2VzCisgICAgMjEwMDAgdXNlcworICAgIDIxMTAwIHVzZXMKKyAgICAyMTIwMCB1c2VzCisgICAgMjEzMDAgdXNlcworICAgIDIxNDAwIHVzZXMKKyAgICAyMTUwMCB1c2VzCisgICAgMjE2MDAgdXNlcworICAgIDIxNzAwIHVzZXMKKyAgICAyMTgwMCB1c2VzCisgICAgMjE5MDAgdXNlcworICAgIDIyMDAwIHVzZXMKKyAgICAyMjEwMCB1c2VzCisgICAgMjIyMDAgdXNlcworICAgIDIyMzAwIHVzZXMKKyAgICAyMjQwMCB1c2VzCisgICAgMjI1MDAgdXNlcworICAgIDIyNjAwIHVzZXMKKyAgICAyMjcwMCB1c2VzCisgICAgMjI4MDAgdXNlcworICAgIDIyOTAwIHVzZXMKKyAgICAyMzAwMCB1c2VzCisgICAgMjMxMDAgdXNlcworICAgIDIzMjAwIHVzZXMKKyAgICAyMzMwMCB1c2VzCisgICAgMjM0MDAgdXNlcworICAgIDIzNTAwIHVzZXMKKyAgICAyMzYwMCB1c2VzCisgICAgMjM3MDAgdXNlcworICAgIDIzODAwIHVzZXMKKyAgICAyMzkwMCB1c2VzCisgICAgMjQwMDAgdXNlcworICAgIDI0MTAwIHVzZXMKKyAgICAyNDIwMCB1c2VzCisgICAgMjQzMDAgdXNlcworICAgIDI0NDAwIHVzZXMKKyAgICAyNDUwMCB1c2VzCisgICAgMjQ2MDAgdXNlcworICAgIDI0NzAwIHVzZXMKKyAgICAyNDgwMCB1c2VzCisgICAgMjQ5MDAgdXNlcworICAgIDI1MDAwIHVzZXMKKyAgICAyNTEwMCB1c2VzCisgICAgMjUyMDAgdXNlcworUmVhZGluZyAidWFydF9jb3JlIi4KKyAgICAxMDAgdXNlcworICAgIDIwMCB1c2VzCisgICAgMzAwIHVzZXMKKyAgICA0MDAgdXNlcworICAgIDUwMCB1c2VzCisgICAgNjAwIHVzZXMKKyAgICA3MDAgdXNlcworICAgIDgwMCB1c2VzCisgICAgOTAwIHVzZXMKKyAgICAxMDAwIHVzZXMKKyAgICAxMTAwIHVzZXMKKyAgICAxMjAwIHVzZXMKKyAgICAxMzAwIHVzZXMKKyAgICAxNDAwIHVzZXMKKyAgICAxNTAwIHVzZXMKKyAgICAxNjAwIHVzZXMKKyAgICAxNzAwIHVzZXMKKyAgICAxODAwIHVzZXMKKyAgICAxOTAwIHVzZXMKKyAgICAyMDAwIHVzZXMKKyAgICAyMTAwIHVzZXMKKyAgICAyMjAwIHVzZXMKKyAgICAyMzAwIHVzZXMKKyAgICAyNDAwIHVzZXMKKyAgICAyNTAwIHVzZXMKKyAgICAyNjAwIHVzZXMKKyAgICAyNzAwIHVzZXMKKyAgICAyODAwIHVzZXMKKyAgICAyOTAwIHVzZXMKKyAgICAzMDAwIHVzZXMKKyAgICAzMTAwIHVzZXMKKyAgICAzMjAwIHVzZXMKKyAgICAzMzAwIHVzZXMKKyAgICAzNDAwIHVzZXMKKyAgICAzNTAwIHVzZXMKKyAgICAzNjAwIHVzZXMKKyAgICAzNzAwIHVzZXMKKyAgICAzODAwIHVzZXMKKyAgICAzOTAwIHVzZXMKKyAgICA0MDAwIHVzZXMKKyAgICA0MTAwIHVzZXMKKyAgICA0MjAwIHVzZXMKKyAgICA0MzAwIHVzZXMKKyAgICA0NDAwIHVzZXMKKyAgICA0NTAwIHVzZXMKKyAgICA0NjAwIHVzZXMKKyAgICA0NzAwIHVzZXMKKyAgICA0ODAwIHVzZXMKKyAgICA0OTAwIHVzZXMKKyAgICA1MDAwIHVzZXMKKyAgICA1MTAwIHVzZXMKKyAgICA1MjAwIHVzZXMKKyAgICA1MzAwIHVzZXMKKyAgICA1NDAwIHVzZXMKKyAgICA1NTAwIHVzZXMKKyAgICA1NjAwIHVzZXMKKyAgICA1NzAwIHVzZXMKKyAgICA1ODAwIHVzZXMKKyAgICA1OTAwIHVzZXMKKyAgICA2MDAwIHVzZXMKKyAgICA2MTAwIHVzZXMKKyAgICA2MjAwIHVzZXMKKyAgICA2MzAwIHVzZXMKKyAgICA2NDAwIHVzZXMKKyAgICA2NTAwIHVzZXMKKyAgICA2NjAwIHVzZXMKKyAgICA2NzAwIHVzZXMKKyAgICA2ODAwIHVzZXMKKyAgICA2OTAwIHVzZXMKKyAgICA3MDAwIHVzZXMKKyAgICA3MTAwIHVzZXMKKyAgICA3MjAwIHVzZXMKKyAgICA3MzAwIHVzZXMKKyAgICA3NDAwIHVzZXMKKyAgICA3NTAwIHVzZXMKKyAgICA3NjAwIHVzZXMKKyAgICA3NzAwIHVzZXMKKyAgICA3ODAwIHVzZXMKKyAgICA3OTAwIHVzZXMKKyAgICA4MDAwIHVzZXMKKyAgICA4MTAwIHVzZXMKKyAgICA4MjAwIHVzZXMKKyAgICA4MzAwIHVzZXMKKyAgICA4NDAwIHVzZXMKKyAgICA4NTAwIHVzZXMKKyAgICA4NjAwIHVzZXMKKyAgICA4NzAwIHVzZXMKKyAgICA4ODAwIHVzZXMKKyAgICA4OTAwIHVzZXMKKyAgICA5MDAwIHVzZXMKKyAgICA5MTAwIHVzZXMKKyAgICA5MjAwIHVzZXMKKyAgICA5MzAwIHVzZXMKKyAgICA5NDAwIHVzZXMKKyAgICA5NTAwIHVzZXMKKyAgICA5NjAwIHVzZXMKKyAgICA5NzAwIHVzZXMKKyAgICA5ODAwIHVzZXMKKyAgICA5OTAwIHVzZXMKKyAgICAxMDAwMCB1c2VzCisgICAgMTAxMDAgdXNlcworICAgIDEwMjAwIHVzZXMKKyAgICAxMDMwMCB1c2VzCisgICAgMTA0MDAgdXNlcworICAgIDEwNTAwIHVzZXMKKyAgICAxMDYwMCB1c2VzCisgICAgMTA3MDAgdXNlcworICAgIDEwODAwIHVzZXMKKyAgICAxMDkwMCB1c2VzCisgICAgMTEwMDAgdXNlcworICAgIDExMTAwIHVzZXMKKyAgICAxMTIwMCB1c2VzCisgICAgMTEzMDAgdXNlcworICAgIDExNDAwIHVzZXMKKyAgICAxMTUwMCB1c2VzCisgICAgMTE2MDAgdXNlcworICAgIDExNzAwIHVzZXMKKyAgICAxMTgwMCB1c2VzCisgICAgMTE5MDAgdXNlcworICAgIDEyMDAwIHVzZXMKKyAgICAxMjEwMCB1c2VzCisgICAgMTIyMDAgdXNlcworICAgIDEyMzAwIHVzZXMKKyAgICAxMjQwMCB1c2VzCisgICAgMTI1MDAgdXNlcworICAgIDEyNjAwIHVzZXMKKyAgICAxMjcwMCB1c2VzCisgICAgMTI4MDAgdXNlcworICAgIDEyOTAwIHVzZXMKKyAgICAxMzAwMCB1c2VzCisgICAgMTMxMDAgdXNlcworICAgIDEzMjAwIHVzZXMKKyAgICAxMzMwMCB1c2VzCisgICAgMTM0MDAgdXNlcworICAgIDEzNTAwIHVzZXMKKyAgICAxMzYwMCB1c2VzCisgICAgMTM3MDAgdXNlcworUmVhZGluZyAid2JfaW50ZXJjb25uZWN0Ii4KKyAgICAxMDAgdXNlcworICAgIDIwMCB1c2VzCisgICAgMzAwIHVzZXMKKyAgICA0MDAgdXNlcworICAgIDUwMCB1c2VzCisgICAgNjAwIHVzZXMKKyAgICA3MDAgdXNlcworICAgIDgwMCB1c2VzCisgICAgOTAwIHVzZXMKKyAgICAxMDAwIHVzZXMKKyAgICAxMTAwIHVzZXMKKyAgICAxMjAwIHVzZXMKKyAgICAxMzAwIHVzZXMKKyAgICAxNDAwIHVzZXMKKyAgICAxNTAwIHVzZXMKKyAgICAxNjAwIHVzZXMKKyAgICAxNzAwIHVzZXMKKyAgICAxODAwIHVzZXMKKyAgICAxOTAwIHVzZXMKKyAgICAyMDAwIHVzZXMKKyAgICAyMTAwIHVzZXMKKyAgICAyMjAwIHVzZXMKKyAgICAyMzAwIHVzZXMKKyAgICAyNDAwIHVzZXMKKyAgICAyNTAwIHVzZXMKKyAgICAyNjAwIHVzZXMKKyAgICAyNzAwIHVzZXMKKyAgICAyODAwIHVzZXMKKyAgICAyOTAwIHVzZXMKKyAgICAzMDAwIHVzZXMKKyAgICAzMTAwIHVzZXMKKyAgICAzMjAwIHVzZXMKKyAgICAzMzAwIHVzZXMKKyAgICAzNDAwIHVzZXMKKyAgICAzNTAwIHVzZXMKKyAgICAzNjAwIHVzZXMKKyAgICAzNzAwIHVzZXMKKyAgICAzODAwIHVzZXMKKyAgICAzOTAwIHVzZXMKKyAgICA0MDAwIHVzZXMKKyAgICA0MTAwIHVzZXMKKyAgICA0MjAwIHVzZXMKKyAgICA0MzAwIHVzZXMKKyAgICA0NDAwIHVzZXMKKyAgICA0NTAwIHVzZXMKKyAgICA0NjAwIHVzZXMKKyAgICA0NzAwIHVzZXMKKyAgICA0ODAwIHVzZXMKKyAgICA0OTAwIHVzZXMKKyAgICA1MDAwIHVzZXMKKyAgICA1MTAwIHVzZXMKKyAgICA1MjAwIHVzZXMKKyAgICA1MzAwIHVzZXMKKyAgICA1NDAwIHVzZXMKKyAgICA1NTAwIHVzZXMKKyAgICA1NjAwIHVzZXMKKyAgICA1NzAwIHVzZXMKKyAgICA1ODAwIHVzZXMKKyAgICA1OTAwIHVzZXMKKyAgICA2MDAwIHVzZXMKKyAgICA2MTAwIHVzZXMKKyAgICA2MjAwIHVzZXMKKyAgICA2MzAwIHVzZXMKKyAgICA2NDAwIHVzZXMKKyAgICA2NTAwIHVzZXMKKyAgICA2NjAwIHVzZXMKKyAgICA2NzAwIHVzZXMKKyAgICA2ODAwIHVzZXMKKyAgICA2OTAwIHVzZXMKKyAgICA3MDAwIHVzZXMKKyAgICA3MTAwIHVzZXMKKyAgICA3MjAwIHVzZXMKKyAgICA3MzAwIHVzZXMKKyAgICA3NDAwIHVzZXMKKyAgICA3NTAwIHVzZXMKKyAgICA3NjAwIHVzZXMKKyAgICA3NzAwIHVzZXMKKyAgICA3ODAwIHVzZXMKKyAgICA3OTAwIHVzZXMKKyAgICA4MDAwIHVzZXMKKyAgICA4MTAwIHVzZXMKKyAgICA4MjAwIHVzZXMKKyAgICA4MzAwIHVzZXMKKyAgICA4NDAwIHVzZXMKKyAgICA4NTAwIHVzZXMKKyAgICA4NjAwIHVzZXMKKyAgICA4NzAwIHVzZXMKKyAgICA4ODAwIHVzZXMKKyAgICA4OTAwIHVzZXMKKyAgICA5MDAwIHVzZXMKKyAgICA5MTAwIHVzZXMKKyAgICA5MjAwIHVzZXMKKyAgICA5MzAwIHVzZXMKKyAgICA5NDAwIHVzZXMKKyAgICA5NTAwIHVzZXMKKyAgICA5NjAwIHVzZXMKKyAgICA5NzAwIHVzZXMKKyAgICA5ODAwIHVzZXMKKyAgICA5OTAwIHVzZXMKKyAgICAxMDAwMCB1c2VzCisgICAgMTAxMDAgdXNlcworICAgIDEwMjAwIHVzZXMKKyAgICAxMDMwMCB1c2VzCisgICAgMTA0MDAgdXNlcworICAgIDEwNTAwIHVzZXMKKyAgICAxMDYwMCB1c2VzCisgICAgMTA3MDAgdXNlcworICAgIDEwODAwIHVzZXMKKyAgICAxMDkwMCB1c2VzCisgICAgMTEwMDAgdXNlcworICAgIDExMTAwIHVzZXMKKyAgICAxMTIwMCB1c2VzCisgICAgMTEzMDAgdXNlcworICAgIDExNDAwIHVzZXMKKyAgICAxMTUwMCB1c2VzCisgICAgMTE2MDAgdXNlcworICAgIDExNzAwIHVzZXMKKyAgICAxMTgwMCB1c2VzCisgICAgMTE5MDAgdXNlcworICAgIDEyMDAwIHVzZXMKKyAgICAxMjEwMCB1c2VzCisgICAgMTIyMDAgdXNlcworICAgIDEyMzAwIHVzZXMKKyAgICAxMjQwMCB1c2VzCisgICAgMTI1MDAgdXNlcworICAgIDEyNjAwIHVzZXMKKyAgICAxMjcwMCB1c2VzCisgICAgMTI4MDAgdXNlcworICAgIDEyOTAwIHVzZXMKKyAgICAxMzAwMCB1c2VzCisgICAgMTMxMDAgdXNlcworICAgIDEzMjAwIHVzZXMKKyAgICAxMzMwMCB1c2VzCisgICAgMTM0MDAgdXNlcworICAgIDEzNTAwIHVzZXMKKyAgICAxMzYwMCB1c2VzCisgICAgMTM3MDAgdXNlcworICAgIDEzODAwIHVzZXMKKyAgICAxMzkwMCB1c2VzCisgICAgMTQwMDAgdXNlcworICAgIDE0MTAwIHVzZXMKKyAgICAxNDIwMCB1c2VzCisgICAgMTQzMDAgdXNlcworICAgIDE0NDAwIHVzZXMKKyAgICAxNDUwMCB1c2VzCisgICAgMTQ2MDAgdXNlcworICAgIDE0NzAwIHVzZXMKKyAgICAxNDgwMCB1c2VzCisgICAgMTQ5MDAgdXNlcworICAgIDE1MDAwIHVzZXMKKyAgICAxNTEwMCB1c2VzCisgICAgMTUyMDAgdXNlcworICAgIDE1MzAwIHVzZXMKKyAgICAxNTQwMCB1c2VzCisgICAgMTU1MDAgdXNlcworICAgIDE1NjAwIHVzZXMKKyAgICAxNTcwMCB1c2VzCisgICAgMTU4MDAgdXNlcworICAgIDE1OTAwIHVzZXMKKyAgICAxNjAwMCB1c2VzCisgICAgMTYxMDAgdXNlcworICAgIDE2MjAwIHVzZXMKKyAgICAxNjMwMCB1c2VzCisgICAgMTY0MDAgdXNlcworICAgIDE2NTAwIHVzZXMKKyAgICAxNjYwMCB1c2VzCisgICAgMTY3MDAgdXNlcworICAgIDE2ODAwIHVzZXMKKyAgICAxNjkwMCB1c2VzCisgICAgMTcwMDAgdXNlcworICAgIDE3MTAwIHVzZXMKKyAgICAxNzIwMCB1c2VzCisgICAgMTczMDAgdXNlcworICAgIDE3NDAwIHVzZXMKKyAgICAxNzUwMCB1c2VzCisgICAgMTc2MDAgdXNlcworICAgIDE3NzAwIHVzZXMKKyAgICAxNzgwMCB1c2VzCisgICAgMTc5MDAgdXNlcworICAgIDE4MDAwIHVzZXMKKyAgICAxODEwMCB1c2VzCisgICAgMTgyMDAgdXNlcworICAgIDE4MzAwIHVzZXMKKyAgICAxODQwMCB1c2VzCisgICAgMTg1MDAgdXNlcworICAgIDE4NjAwIHVzZXMKKyAgICAxODcwMCB1c2VzCisgICAgMTg4MDAgdXNlcworICAgIDE4OTAwIHVzZXMKKyAgICAxOTAwMCB1c2VzCisgICAgMTkxMDAgdXNlcworICAgIDE5MjAwIHVzZXMKKyAgICAxOTMwMCB1c2VzCisgICAgMTk0MDAgdXNlcworICAgIDE5NTAwIHVzZXMKKyAgICAxOTYwMCB1c2VzCisgICAgMTk3MDAgdXNlcworICAgIDE5ODAwIHVzZXMKKyAgICAxOTkwMCB1c2VzCisgICAgMjAwMDAgdXNlcworICAgIDIwMTAwIHVzZXMKKyAgICAyMDIwMCB1c2VzCisgICAgMjAzMDAgdXNlcworICAgIDIwNDAwIHVzZXMKKyAgICAyMDUwMCB1c2VzCisgICAgMjA2MDAgdXNlcworICAgIDIwNzAwIHVzZXMKKyAgICAyMDgwMCB1c2VzCisgICAgMjA5MDAgdXNlcworICAgIDIxMDAwIHVzZXMKKyAgICAyMTEwMCB1c2VzCisgICAgMjEyMDAgdXNlcworICAgIDIxMzAwIHVzZXMKKyAgICAyMTQwMCB1c2VzCisgICAgMjE1MDAgdXNlcworICAgIDIxNjAwIHVzZXMKKyAgICAyMTcwMCB1c2VzCisgICAgMjE4MDAgdXNlcworICAgIDIxOTAwIHVzZXMKKyAgICAyMjAwMCB1c2VzCisgICAgMjIxMDAgdXNlcworICAgIDIyMjAwIHVzZXMKKyAgICAyMjMwMCB1c2VzCisgICAgMjI0MDAgdXNlcworICAgIDIyNTAwIHVzZXMKKyAgICAyMjYwMCB1c2VzCisgICAgMjI3MDAgdXNlcworICAgIDIyODAwIHVzZXMKKyAgICAyMjkwMCB1c2VzCisgICAgMjMwMDAgdXNlcworICAgIDIzMTAwIHVzZXMKKyAgICAyMzIwMCB1c2VzCisgICAgMjMzMDAgdXNlcworICAgIDIzNDAwIHVzZXMKKyAgICAyMzUwMCB1c2VzCisgICAgMjM2MDAgdXNlcworICAgIDIzNzAwIHVzZXMKKyAgICAyMzgwMCB1c2VzCisgICAgMjM5MDAgdXNlcworICAgIDI0MDAwIHVzZXMKKyAgICAyNDEwMCB1c2VzCisgICAgMjQyMDAgdXNlcworICAgIDI0MzAwIHVzZXMKKyAgICAyNDQwMCB1c2VzCisgICAgMjQ1MDAgdXNlcworICAgIDI0NjAwIHVzZXMKKyAgICAyNDcwMCB1c2VzCisgICAgMjQ4MDAgdXNlcworICAgIDI0OTAwIHVzZXMKKyAgICAyNTAwMCB1c2VzCisgICAgMjUxMDAgdXNlcworICAgIDI1MjAwIHVzZXMKKyAgICAyNTMwMCB1c2VzCisgICAgMjU0MDAgdXNlcworICAgIDI1NTAwIHVzZXMKKyAgICAyNTYwMCB1c2VzCisgICAgMjU3MDAgdXNlcworICAgIDI1ODAwIHVzZXMKKyAgICAyNTkwMCB1c2VzCisgICAgMjYwMDAgdXNlcworICAgIDI2MTAwIHVzZXMKKyAgICAyNjIwMCB1c2VzCisgICAgMjYzMDAgdXNlcworICAgIDI2NDAwIHVzZXMKKyAgICAyNjUwMCB1c2VzCisgICAgMjY2MDAgdXNlcworUmVhZGluZyAic2RyY190b3AiLgorICAgIDEwMCB1c2VzCisgICAgMjAwIHVzZXMKKyAgICAzMDAgdXNlcworICAgIDQwMCB1c2VzCisgICAgNTAwIHVzZXMKKyAgICA2MDAgdXNlcworICAgIDcwMCB1c2VzCisgICAgODAwIHVzZXMKKyAgICA5MDAgdXNlcworICAgIDEwMDAgdXNlcworICAgIDExMDAgdXNlcworICAgIDEyMDAgdXNlcworICAgIDEzMDAgdXNlcworICAgIDE0MDAgdXNlcworICAgIDE1MDAgdXNlcworICAgIDE2MDAgdXNlcworICAgIDE3MDAgdXNlcworICAgIDE4MDAgdXNlcworICAgIDE5MDAgdXNlcworICAgIDIwMDAgdXNlcworICAgIDIxMDAgdXNlcworICAgIDIyMDAgdXNlcworICAgIDIzMDAgdXNlcworICAgIDI0MDAgdXNlcworICAgIDI1MDAgdXNlcworICAgIDI2MDAgdXNlcworICAgIDI3MDAgdXNlcworICAgIDI4MDAgdXNlcworICAgIDI5MDAgdXNlcworICAgIDMwMDAgdXNlcworICAgIDMxMDAgdXNlcworICAgIDMyMDAgdXNlcworICAgIDMzMDAgdXNlcworICAgIDM0MDAgdXNlcworICAgIDM1MDAgdXNlcworICAgIDM2MDAgdXNlcworICAgIDM3MDAgdXNlcworICAgIDM4MDAgdXNlcworICAgIDM5MDAgdXNlcworICAgIDQwMDAgdXNlcworICAgIDQxMDAgdXNlcworICAgIDQyMDAgdXNlcworICAgIDQzMDAgdXNlcworICAgIDQ0MDAgdXNlcworICAgIDQ1MDAgdXNlcworICAgIDQ2MDAgdXNlcworICAgIDQ3MDAgdXNlcworICAgIDQ4MDAgdXNlcworICAgIDQ5MDAgdXNlcworICAgIDUwMDAgdXNlcworICAgIDUxMDAgdXNlcworICAgIDUyMDAgdXNlcworICAgIDUzMDAgdXNlcworICAgIDU0MDAgdXNlcworICAgIDU1MDAgdXNlcworICAgIDU2MDAgdXNlcworICAgIDU3MDAgdXNlcworICAgIDU4MDAgdXNlcworICAgIDU5MDAgdXNlcworICAgIDYwMDAgdXNlcworICAgIDYxMDAgdXNlcworICAgIDYyMDAgdXNlcworICAgIDYzMDAgdXNlcworICAgIDY0MDAgdXNlcworICAgIDY1MDAgdXNlcworICAgIDY2MDAgdXNlcworICAgIDY3MDAgdXNlcworICAgIDY4MDAgdXNlcworICAgIDY5MDAgdXNlcworICAgIDcwMDAgdXNlcworICAgIDcxMDAgdXNlcworICAgIDcyMDAgdXNlcworICAgIDczMDAgdXNlcworICAgIDc0MDAgdXNlcworICAgIDc1MDAgdXNlcworICAgIDc2MDAgdXNlcworICAgIDc3MDAgdXNlcworICAgIDc4MDAgdXNlcworICAgIDc5MDAgdXNlcworICAgIDgwMDAgdXNlcworICAgIDgxMDAgdXNlcworICAgIDgyMDAgdXNlcworICAgIDgzMDAgdXNlcworICAgIDg0MDAgdXNlcworICAgIDg1MDAgdXNlcworICAgIDg2MDAgdXNlcworICAgIDg3MDAgdXNlcworICAgIDg4MDAgdXNlcworICAgIDg5MDAgdXNlcworICAgIDkwMDAgdXNlcworICAgIDkxMDAgdXNlcworICAgIDkyMDAgdXNlcworICAgIDkzMDAgdXNlcworICAgIDk0MDAgdXNlcworICAgIDk1MDAgdXNlcworICAgIDk2MDAgdXNlcworICAgIDk3MDAgdXNlcworICAgIDk4MDAgdXNlcworICAgIDk5MDAgdXNlcworICAgIDEwMDAwIHVzZXMKKyAgICAxMDEwMCB1c2VzCisgICAgMTAyMDAgdXNlcworICAgIDEwMzAwIHVzZXMKKyAgICAxMDQwMCB1c2VzCisgICAgMTA1MDAgdXNlcworICAgIDEwNjAwIHVzZXMKKyAgICAxMDcwMCB1c2VzCisgICAgMTA4MDAgdXNlcworICAgIDEwOTAwIHVzZXMKKyAgICAxMTAwMCB1c2VzCisgICAgMTExMDAgdXNlcworICAgIDExMjAwIHVzZXMKKyAgICAxMTMwMCB1c2VzCisgICAgMTE0MDAgdXNlcworICAgIDExNTAwIHVzZXMKKyAgICAxMTYwMCB1c2VzCisgICAgMTE3MDAgdXNlcworICAgIDExODAwIHVzZXMKKyAgICAxMTkwMCB1c2VzCisgICAgMTIwMDAgdXNlcworICAgIDEyMTAwIHVzZXMKKyAgICAxMjIwMCB1c2VzCisgICAgMTIzMDAgdXNlcworICAgIDEyNDAwIHVzZXMKKyAgICAxMjUwMCB1c2VzCisgICAgMTI2MDAgdXNlcworICAgIDEyNzAwIHVzZXMKKyAgICAxMjgwMCB1c2VzCisgICAgMTI5MDAgdXNlcworICAgIDEzMDAwIHVzZXMKKyAgICAxMzEwMCB1c2VzCisgICAgMTMyMDAgdXNlcworICAgIDEzMzAwIHVzZXMKKyAgICAxMzQwMCB1c2VzCisgICAgMTM1MDAgdXNlcworICAgIDEzNjAwIHVzZXMKKyAgICAxMzcwMCB1c2VzCisgICAgMTM4MDAgdXNlcworICAgIDEzOTAwIHVzZXMKKyAgICAxNDAwMCB1c2VzCisgICAgMTQxMDAgdXNlcworICAgIDE0MjAwIHVzZXMKKyAgICAxNDMwMCB1c2VzCisgICAgMTQ0MDAgdXNlcworICAgIDE0NTAwIHVzZXMKKyAgICAxNDYwMCB1c2VzCisgICAgMTQ3MDAgdXNlcworICAgIDE0ODAwIHVzZXMKKyAgICAxNDkwMCB1c2VzCisgICAgMTUwMDAgdXNlcworICAgIDE1MTAwIHVzZXMKKyAgICAxNTIwMCB1c2VzCisgICAgMTUzMDAgdXNlcworICAgIDE1NDAwIHVzZXMKKyAgICAxNTUwMCB1c2VzCisgICAgMTU2MDAgdXNlcworICAgIDE1NzAwIHVzZXMKKyAgICAxNTgwMCB1c2VzCisgICAgMTU5MDAgdXNlcworICAgIDE2MDAwIHVzZXMKKyAgICAxNjEwMCB1c2VzCisgICAgMTYyMDAgdXNlcworICAgIDE2MzAwIHVzZXMKKyAgICAxNjQwMCB1c2VzCisgICAgMTY1MDAgdXNlcworICAgIDE2NjAwIHVzZXMKKyAgICAxNjcwMCB1c2VzCisgICAgMTY4MDAgdXNlcworICAgIDE2OTAwIHVzZXMKKyAgICAxNzAwMCB1c2VzCisgICAgMTcxMDAgdXNlcworICAgIDE3MjAwIHVzZXMKKyAgICAxNzMwMCB1c2VzCisgICAgMTc0MDAgdXNlcworICAgIDE3NTAwIHVzZXMKKyAgICAxNzYwMCB1c2VzCisgICAgMTc3MDAgdXNlcworICAgIDE3ODAwIHVzZXMKKyAgICAxNzkwMCB1c2VzCisgICAgMTgwMDAgdXNlcworICAgIDE4MTAwIHVzZXMKKyAgICAxODIwMCB1c2VzCisgICAgMTgzMDAgdXNlcworICAgIDE4NDAwIHVzZXMKKyAgICAxODUwMCB1c2VzCisgICAgMTg2MDAgdXNlcworICAgIDE4NzAwIHVzZXMKKyAgICAxODgwMCB1c2VzCisgICAgMTg5MDAgdXNlcworICAgIDE5MDAwIHVzZXMKKyAgICAxOTEwMCB1c2VzCisgICAgMTkyMDAgdXNlcworICAgIDE5MzAwIHVzZXMKKyAgICAxOTQwMCB1c2VzCisgICAgMTk1MDAgdXNlcworICAgIDE5NjAwIHVzZXMKKyAgICAxOTcwMCB1c2VzCisgICAgMTk4MDAgdXNlcworICAgIDE5OTAwIHVzZXMKKyAgICAyMDAwMCB1c2VzCisgICAgMjAxMDAgdXNlcworICAgIDIwMjAwIHVzZXMKKyAgICAyMDMwMCB1c2VzCisgICAgMjA0MDAgdXNlcworICAgIDIwNTAwIHVzZXMKKyAgICAyMDYwMCB1c2VzCisgICAgMjA3MDAgdXNlcworICAgIDIwODAwIHVzZXMKKyAgICAyMDkwMCB1c2VzCisgICAgMjEwMDAgdXNlcworICAgIDIxMTAwIHVzZXMKKyAgICAyMTIwMCB1c2VzCisgICAgMjEzMDAgdXNlcworICAgIDIxNDAwIHVzZXMKKyAgICAyMTUwMCB1c2VzCisgICAgMjE2MDAgdXNlcworICAgIDIxNzAwIHVzZXMKKyAgICAyMTgwMCB1c2VzCisgICAgMjE5MDAgdXNlcworICAgIDIyMDAwIHVzZXMKKyAgICAyMjEwMCB1c2VzCisgICAgMjIyMDAgdXNlcworICAgIDIyMzAwIHVzZXMKKyAgICAyMjQwMCB1c2VzCisgICAgMjI1MDAgdXNlcworICAgIDIyNjAwIHVzZXMKKyAgICAyMjcwMCB1c2VzCisgICAgMjI4MDAgdXNlcworICAgIDIyOTAwIHVzZXMKKyAgICAyMzAwMCB1c2VzCisgICAgMjMxMDAgdXNlcworICAgIDIzMjAwIHVzZXMKKyAgICAyMzMwMCB1c2VzCisgICAgMjM0MDAgdXNlcworICAgIDIzNTAwIHVzZXMKKyAgICAyMzYwMCB1c2VzCisgICAgMjM3MDAgdXNlcworICAgIDIzODAwIHVzZXMKKyAgICAyMzkwMCB1c2VzCisgICAgMjQwMDAgdXNlcworICAgIDI0MTAwIHVzZXMKKyAgICAyNDIwMCB1c2VzCisgICAgMjQzMDAgdXNlcworICAgIDI0NDAwIHVzZXMKKyAgICAyNDUwMCB1c2VzCisgICAgMjQ2MDAgdXNlcworICAgIDI0NzAwIHVzZXMKKyAgICAyNDgwMCB1c2VzCisgICAgMjQ5MDAgdXNlcworICAgIDI1MDAwIHVzZXMKKyAgICAyNTEwMCB1c2VzCisgICAgMjUyMDAgdXNlcworICAgIDI1MzAwIHVzZXMKKyAgICAyNTQwMCB1c2VzCisgICAgMjU1MDAgdXNlcworICAgIDI1NjAwIHVzZXMKKyAgICAyNTcwMCB1c2VzCisgICAgMjU4MDAgdXNlcworICAgIDI1OTAwIHVzZXMKKyAgICAyNjAwMCB1c2VzCisgICAgMjYxMDAgdXNlcworICAgIDI2MjAwIHVzZXMKKyAgICAyNjMwMCB1c2VzCisgICAgMjY0MDAgdXNlcworICAgIDI2NTAwIHVzZXMKKyAgICAyNjYwMCB1c2VzCisgICAgMjY3MDAgdXNlcworICAgIDI2ODAwIHVzZXMKKyAgICAyNjkwMCB1c2VzCisgICAgMjcwMDAgdXNlcworICAgIDI3MTAwIHVzZXMKKyAgICAyNzIwMCB1c2VzCisgICAgMjczMDAgdXNlcworICAgIDI3NDAwIHVzZXMKKyAgICAyNzUwMCB1c2VzCisgICAgMjc2MDAgdXNlcworICAgIDI3NzAwIHVzZXMKKyAgICAyNzgwMCB1c2VzCisgICAgMjc5MDAgdXNlcworICAgIDI4MDAwIHVzZXMKKyAgICAyODEwMCB1c2VzCisgICAgMjgyMDAgdXNlcworICAgIDI4MzAwIHVzZXMKKyAgICAyODQwMCB1c2VzCisgICAgMjg1MDAgdXNlcworICAgIDI4NjAwIHVzZXMKKyAgICAyODcwMCB1c2VzCisgICAgMjg4MDAgdXNlcworICAgIDI4OTAwIHVzZXMKKyAgICAyOTAwMCB1c2VzCisgICAgMjkxMDAgdXNlcworICAgIDI5MjAwIHVzZXMKKyAgICAyOTMwMCB1c2VzCisgICAgMjk0MDAgdXNlcworICAgIDI5NTAwIHVzZXMKKyAgICAyOTYwMCB1c2VzCisgICAgMjk3MDAgdXNlcworICAgIDI5ODAwIHVzZXMKKyAgICAyOTkwMCB1c2VzCisgICAgMzAwMDAgdXNlcworICAgIDMwMTAwIHVzZXMKKyAgICAzMDIwMCB1c2VzCisgICAgMzAzMDAgdXNlcworICAgIDMwNDAwIHVzZXMKKyAgICAzMDUwMCB1c2VzCisgICAgMzA2MDAgdXNlcworICAgIDMwNzAwIHVzZXMKKyAgICAzMDgwMCB1c2VzCisgICAgMzA5MDAgdXNlcworICAgIDMxMDAwIHVzZXMKKyAgICAzMTEwMCB1c2VzCisgICAgMzEyMDAgdXNlcworICAgIDMxMzAwIHVzZXMKKyAgICAzMTQwMCB1c2VzCisgICAgMzE1MDAgdXNlcworICAgIDMxNjAwIHVzZXMKKyAgICAzMTcwMCB1c2VzCisgICAgMzE4MDAgdXNlcworICAgIDMxOTAwIHVzZXMKKyAgICAzMjAwMCB1c2VzCisgICAgMzIxMDAgdXNlcworICAgIDMyMjAwIHVzZXMKKyAgICAzMjMwMCB1c2VzCisgICAgMzI0MDAgdXNlcworICAgIDMyNTAwIHVzZXMKKyAgICAzMjYwMCB1c2VzCisgICAgMzI3MDAgdXNlcworICAgIDMyODAwIHVzZXMKKyAgICAzMjkwMCB1c2VzCisgICAgMzMwMDAgdXNlcworICAgIDMzMTAwIHVzZXMKKyAgICAzMzIwMCB1c2VzCisgICAgMzMzMDAgdXNlcworICAgIDMzNDAwIHVzZXMKKyAgICAzMzUwMCB1c2VzCisgICAgMzM2MDAgdXNlcworICAgIDMzNzAwIHVzZXMKKyAgICAzMzgwMCB1c2VzCisgICAgMzM5MDAgdXNlcworICAgIDM0MDAwIHVzZXMKKyAgICAzNDEwMCB1c2VzCisgICAgMzQyMDAgdXNlcworICAgIDM0MzAwIHVzZXMKKyAgICAzNDQwMCB1c2VzCisgICAgMzQ1MDAgdXNlcworICAgIDM0NjAwIHVzZXMKKyAgICAzNDcwMCB1c2VzCisgICAgMzQ4MDAgdXNlcworICAgIDM0OTAwIHVzZXMKKyAgICAzNTAwMCB1c2VzCisgICAgMzUxMDAgdXNlcworUmVhZGluZyAiZ2xibF9jZmciLgorICAgIDEwMCB1c2VzCisgICAgMjAwIHVzZXMKKyAgICAzMDAgdXNlcworICAgIDQwMCB1c2VzCisgICAgNTAwIHVzZXMKKyAgICA2MDAgdXNlcworICAgIDcwMCB1c2VzCisgICAgODAwIHVzZXMKKyAgICA5MDAgdXNlcworICAgIDEwMDAgdXNlcworICAgIDExMDAgdXNlcworICAgIDEyMDAgdXNlcworICAgIDEzMDAgdXNlcworICAgIDE0MDAgdXNlcworICAgIDE1MDAgdXNlcworICAgIDE2MDAgdXNlcworICAgIDE3MDAgdXNlcworICAgIDE4MDAgdXNlcworICAgIDE5MDAgdXNlcworICAgIDIwMDAgdXNlcworICAgIDIxMDAgdXNlcworICAgIDIyMDAgdXNlcworICAgIDIzMDAgdXNlcworICAgIDI0MDAgdXNlcworICAgIDI1MDAgdXNlcworICAgIDI2MDAgdXNlcworICAgIDI3MDAgdXNlcworICAgIDI4MDAgdXNlcworICAgIDI5MDAgdXNlcworICAgIDMwMDAgdXNlcworICAgIDMxMDAgdXNlcworICAgIDMyMDAgdXNlcworICAgIDMzMDAgdXNlcworICAgIDM0MDAgdXNlcworICAgIDM1MDAgdXNlcworICAgIDM2MDAgdXNlcworICAgIDM3MDAgdXNlcworICAgIDM4MDAgdXNlcworICAgIDM5MDAgdXNlcworICAgIDQwMDAgdXNlcworICAgIDQxMDAgdXNlcworICAgIDQyMDAgdXNlcworICAgIDQzMDAgdXNlcworICAgIDQ0MDAgdXNlcworICAgIDQ1MDAgdXNlcworICAgIDQ2MDAgdXNlcworICAgIDQ3MDAgdXNlcworICAgIDQ4MDAgdXNlcworICAgIDQ5MDAgdXNlcworICAgIDUwMDAgdXNlcworICAgIDUxMDAgdXNlcworICAgIDUyMDAgdXNlcworICAgIDUzMDAgdXNlcworICAgIDU0MDAgdXNlcworICAgIDU1MDAgdXNlcworICAgIDU2MDAgdXNlcworICAgIDU3MDAgdXNlcworICAgIDU4MDAgdXNlcworICAgIDU5MDAgdXNlcworICAgIDYwMDAgdXNlcworICAgIDYxMDAgdXNlcworICAgIDYyMDAgdXNlcworICAgIDYzMDAgdXNlcworICAgIDY0MDAgdXNlcworICAgIDY1MDAgdXNlcworICAgIDY2MDAgdXNlcworICAgIDY3MDAgdXNlcworICAgIDY4MDAgdXNlcworICAgIDY5MDAgdXNlcworICAgIDcwMDAgdXNlcworICAgIDcxMDAgdXNlcworICAgIDcyMDAgdXNlcworICAgIDczMDAgdXNlcworICAgIDc0MDAgdXNlcworICAgIDc1MDAgdXNlcworICAgIDc2MDAgdXNlcworICAgIDc3MDAgdXNlcworICAgIDc4MDAgdXNlcworICAgIDc5MDAgdXNlcworICAgIDgwMDAgdXNlcworICAgIDgxMDAgdXNlcworICAgIDgyMDAgdXNlcworICAgIDgzMDAgdXNlcworICAgIDg0MDAgdXNlcworICAgIDg1MDAgdXNlcworICAgIDg2MDAgdXNlcworICAgIDg3MDAgdXNlcworICAgIDg4MDAgdXNlcworICAgIDg5MDAgdXNlcworICAgIDkwMDAgdXNlcworICAgIDkxMDAgdXNlcworICAgIDkyMDAgdXNlcworICAgIDkzMDAgdXNlcworICAgIDk0MDAgdXNlcworICAgIDk1MDAgdXNlcworICAgIDk2MDAgdXNlcworICAgIDk3MDAgdXNlcworICAgIDk4MDAgdXNlcworICAgIDk5MDAgdXNlcworICAgIDEwMDAwIHVzZXMKKyAgICAxMDEwMCB1c2VzCisgICAgMTAyMDAgdXNlcworICAgIDEwMzAwIHVzZXMKKyAgICAxMDQwMCB1c2VzCisgICAgMTA1MDAgdXNlcworICAgIDEwNjAwIHVzZXMKKyAgICAxMDcwMCB1c2VzCisgICAgMTA4MDAgdXNlcworICAgIDEwOTAwIHVzZXMKKyAgICAxMTAwMCB1c2VzCisgICAgMTExMDAgdXNlcworICAgIDExMjAwIHVzZXMKKyAgICAxMTMwMCB1c2VzCisgICAgMTE0MDAgdXNlcworICAgIDExNTAwIHVzZXMKKyAgICAxMTYwMCB1c2VzCisgICAgMTE3MDAgdXNlcworICAgIDExODAwIHVzZXMKKyAgICAxMTkwMCB1c2VzCisgICAgMTIwMDAgdXNlcworICAgIDEyMTAwIHVzZXMKKyAgICAxMjIwMCB1c2VzCisgICAgMTIzMDAgdXNlcworICAgIDEyNDAwIHVzZXMKKyAgICAxMjUwMCB1c2VzCisgICAgMTI2MDAgdXNlcworICAgIDEyNzAwIHVzZXMKKyAgICAxMjgwMCB1c2VzCisgICAgMTI5MDAgdXNlcworICAgIDEzMDAwIHVzZXMKKyAgICAxMzEwMCB1c2VzCisgICAgMTMyMDAgdXNlcworICAgIDEzMzAwIHVzZXMKKyAgICAxMzQwMCB1c2VzCisgICAgMTM1MDAgdXNlcworICAgIDEzNjAwIHVzZXMKKyAgICAxMzcwMCB1c2VzCisgICAgMTM4MDAgdXNlcworICAgIDEzOTAwIHVzZXMKKyAgICAxNDAwMCB1c2VzCisgICAgMTQxMDAgdXNlcworUmVhZGluZyAic2t5MTMwX2ZkX3NjX2hkX19kbHlnYXRlNHNkM18xIi4KK1JlYWRpbmcgInNwaW1fdG9wIi4KKyAgICAxMDAgdXNlcworICAgIDIwMCB1c2VzCisgICAgMzAwIHVzZXMKKyAgICA0MDAgdXNlcworICAgIDUwMCB1c2VzCisgICAgNjAwIHVzZXMKKyAgICA3MDAgdXNlcworICAgIDgwMCB1c2VzCisgICAgOTAwIHVzZXMKKyAgICAxMDAwIHVzZXMKKyAgICAxMTAwIHVzZXMKKyAgICAxMjAwIHVzZXMKKyAgICAxMzAwIHVzZXMKKyAgICAxNDAwIHVzZXMKKyAgICAxNTAwIHVzZXMKKyAgICAxNjAwIHVzZXMKKyAgICAxNzAwIHVzZXMKKyAgICAxODAwIHVzZXMKKyAgICAxOTAwIHVzZXMKKyAgICAyMDAwIHVzZXMKKyAgICAyMTAwIHVzZXMKKyAgICAyMjAwIHVzZXMKKyAgICAyMzAwIHVzZXMKKyAgICAyNDAwIHVzZXMKKyAgICAyNTAwIHVzZXMKKyAgICAyNjAwIHVzZXMKKyAgICAyNzAwIHVzZXMKKyAgICAyODAwIHVzZXMKKyAgICAyOTAwIHVzZXMKKyAgICAzMDAwIHVzZXMKKyAgICAzMTAwIHVzZXMKKyAgICAzMjAwIHVzZXMKKyAgICAzMzAwIHVzZXMKKyAgICAzNDAwIHVzZXMKKyAgICAzNTAwIHVzZXMKKyAgICAzNjAwIHVzZXMKKyAgICAzNzAwIHVzZXMKKyAgICAzODAwIHVzZXMKKyAgICAzOTAwIHVzZXMKKyAgICA0MDAwIHVzZXMKKyAgICA0MTAwIHVzZXMKKyAgICA0MjAwIHVzZXMKKyAgICA0MzAwIHVzZXMKKyAgICA0NDAwIHVzZXMKKyAgICA0NTAwIHVzZXMKKyAgICA0NjAwIHVzZXMKKyAgICA0NzAwIHVzZXMKKyAgICA0ODAwIHVzZXMKKyAgICA0OTAwIHVzZXMKKyAgICA1MDAwIHVzZXMKKyAgICA1MTAwIHVzZXMKKyAgICA1MjAwIHVzZXMKKyAgICA1MzAwIHVzZXMKKyAgICA1NDAwIHVzZXMKKyAgICA1NTAwIHVzZXMKKyAgICA1NjAwIHVzZXMKKyAgICA1NzAwIHVzZXMKKyAgICA1ODAwIHVzZXMKKyAgICA1OTAwIHVzZXMKKyAgICA2MDAwIHVzZXMKKyAgICA2MTAwIHVzZXMKKyAgICA2MjAwIHVzZXMKKyAgICA2MzAwIHVzZXMKKyAgICA2NDAwIHVzZXMKKyAgICA2NTAwIHVzZXMKKyAgICA2NjAwIHVzZXMKKyAgICA2NzAwIHVzZXMKKyAgICA2ODAwIHVzZXMKKyAgICA2OTAwIHVzZXMKKyAgICA3MDAwIHVzZXMKKyAgICA3MTAwIHVzZXMKKyAgICA3MjAwIHVzZXMKKyAgICA3MzAwIHVzZXMKKyAgICA3NDAwIHVzZXMKKyAgICA3NTAwIHVzZXMKKyAgICA3NjAwIHVzZXMKKyAgICA3NzAwIHVzZXMKKyAgICA3ODAwIHVzZXMKKyAgICA3OTAwIHVzZXMKKyAgICA4MDAwIHVzZXMKKyAgICA4MTAwIHVzZXMKKyAgICA4MjAwIHVzZXMKKyAgICA4MzAwIHVzZXMKKyAgICA4NDAwIHVzZXMKKyAgICA4NTAwIHVzZXMKKyAgICA4NjAwIHVzZXMKKyAgICA4NzAwIHVzZXMKKyAgICA4ODAwIHVzZXMKKyAgICA4OTAwIHVzZXMKKyAgICA5MDAwIHVzZXMKKyAgICA5MTAwIHVzZXMKKyAgICA5MjAwIHVzZXMKKyAgICA5MzAwIHVzZXMKKyAgICA5NDAwIHVzZXMKKyAgICA5NTAwIHVzZXMKKyAgICA5NjAwIHVzZXMKKyAgICA5NzAwIHVzZXMKKyAgICA5ODAwIHVzZXMKKyAgICA5OTAwIHVzZXMKKyAgICAxMDAwMCB1c2VzCisgICAgMTAxMDAgdXNlcworICAgIDEwMjAwIHVzZXMKKyAgICAxMDMwMCB1c2VzCisgICAgMTA0MDAgdXNlcworICAgIDEwNTAwIHVzZXMKKyAgICAxMDYwMCB1c2VzCisgICAgMTA3MDAgdXNlcworICAgIDEwODAwIHVzZXMKKyAgICAxMDkwMCB1c2VzCisgICAgMTEwMDAgdXNlcworICAgIDExMTAwIHVzZXMKKyAgICAxMTIwMCB1c2VzCisgICAgMTEzMDAgdXNlcworICAgIDExNDAwIHVzZXMKKyAgICAxMTUwMCB1c2VzCisgICAgMTE2MDAgdXNlcworICAgIDExNzAwIHVzZXMKKyAgICAxMTgwMCB1c2VzCisgICAgMTE5MDAgdXNlcworICAgIDEyMDAwIHVzZXMKKyAgICAxMjEwMCB1c2VzCisgICAgMTIyMDAgdXNlcworICAgIDEyMzAwIHVzZXMKKyAgICAxMjQwMCB1c2VzCisgICAgMTI1MDAgdXNlcworICAgIDEyNjAwIHVzZXMKKyAgICAxMjcwMCB1c2VzCisgICAgMTI4MDAgdXNlcworICAgIDEyOTAwIHVzZXMKKyAgICAxMzAwMCB1c2VzCisgICAgMTMxMDAgdXNlcworICAgIDEzMjAwIHVzZXMKKyAgICAxMzMwMCB1c2VzCisgICAgMTM0MDAgdXNlcworICAgIDEzNTAwIHVzZXMKKyAgICAxMzYwMCB1c2VzCisgICAgMTM3MDAgdXNlcworICAgIDEzODAwIHVzZXMKKyAgICAxMzkwMCB1c2VzCisgICAgMTQwMDAgdXNlcworICAgIDE0MTAwIHVzZXMKKyAgICAxNDIwMCB1c2VzCisgICAgMTQzMDAgdXNlcworICAgIDE0NDAwIHVzZXMKKyAgICAxNDUwMCB1c2VzCisgICAgMTQ2MDAgdXNlcworICAgIDE0NzAwIHVzZXMKKyAgICAxNDgwMCB1c2VzCisgICAgMTQ5MDAgdXNlcworICAgIDE1MDAwIHVzZXMKKyAgICAxNTEwMCB1c2VzCisgICAgMTUyMDAgdXNlcworICAgIDE1MzAwIHVzZXMKKyAgICAxNTQwMCB1c2VzCisgICAgMTU1MDAgdXNlcworICAgIDE1NjAwIHVzZXMKKyAgICAxNTcwMCB1c2VzCisgICAgMTU4MDAgdXNlcworICAgIDE1OTAwIHVzZXMKKyAgICAxNjAwMCB1c2VzCisgICAgMTYxMDAgdXNlcworICAgIDE2MjAwIHVzZXMKKyAgICAxNjMwMCB1c2VzCisgICAgMTY0MDAgdXNlcworICAgIDE2NTAwIHVzZXMKKyAgICAxNjYwMCB1c2VzCisgICAgMTY3MDAgdXNlcworICAgIDE2ODAwIHVzZXMKKyAgICAxNjkwMCB1c2VzCisgICAgMTcwMDAgdXNlcworICAgIDE3MTAwIHVzZXMKKyAgICAxNzIwMCB1c2VzCisgICAgMTczMDAgdXNlcworICAgIDE3NDAwIHVzZXMKKyAgICAxNzUwMCB1c2VzCisgICAgMTc2MDAgdXNlcworICAgIDE3NzAwIHVzZXMKKyAgICAxNzgwMCB1c2VzCisgICAgMTc5MDAgdXNlcworICAgIDE4MDAwIHVzZXMKKyAgICAxODEwMCB1c2VzCisgICAgMTgyMDAgdXNlcworICAgIDE4MzAwIHVzZXMKKyAgICAxODQwMCB1c2VzCisgICAgMTg1MDAgdXNlcworICAgIDE4NjAwIHVzZXMKKyAgICAxODcwMCB1c2VzCisgICAgMTg4MDAgdXNlcworICAgIDE4OTAwIHVzZXMKKyAgICAxOTAwMCB1c2VzCisgICAgMTkxMDAgdXNlcworICAgIDE5MjAwIHVzZXMKKyAgICAxOTMwMCB1c2VzCisgICAgMTk0MDAgdXNlcworICAgIDE5NTAwIHVzZXMKKyAgICAxOTYwMCB1c2VzCisgICAgMTk3MDAgdXNlcworICAgIDE5ODAwIHVzZXMKKyAgICAxOTkwMCB1c2VzCisgICAgMjAwMDAgdXNlcworICAgIDIwMTAwIHVzZXMKKyAgICAyMDIwMCB1c2VzCisgICAgMjAzMDAgdXNlcworICAgIDIwNDAwIHVzZXMKKyAgICAyMDUwMCB1c2VzCisgICAgMjA2MDAgdXNlcworICAgIDIwNzAwIHVzZXMKKyAgICAyMDgwMCB1c2VzCisgICAgMjA5MDAgdXNlcworICAgIDIxMDAwIHVzZXMKKyAgICAyMTEwMCB1c2VzCisgICAgMjEyMDAgdXNlcworICAgIDIxMzAwIHVzZXMKKyAgICAyMTQwMCB1c2VzCisgICAgMjE1MDAgdXNlcworICAgIDIxNjAwIHVzZXMKKyAgICAyMTcwMCB1c2VzCisgICAgMjE4MDAgdXNlcworICAgIDIxOTAwIHVzZXMKKyAgICAyMjAwMCB1c2VzCisgICAgMjIxMDAgdXNlcworICAgIDIyMjAwIHVzZXMKKyAgICAyMjMwMCB1c2VzCisgICAgMjI0MDAgdXNlcworICAgIDIyNTAwIHVzZXMKKyAgICAyMjYwMCB1c2VzCisgICAgMjI3MDAgdXNlcworICAgIDIyODAwIHVzZXMKKyAgICAyMjkwMCB1c2VzCisgICAgMjMwMDAgdXNlcworICAgIDIzMTAwIHVzZXMKKyAgICAyMzIwMCB1c2VzCisgICAgMjMzMDAgdXNlcworICAgIDIzNDAwIHVzZXMKKyAgICAyMzUwMCB1c2VzCisgICAgMjM2MDAgdXNlcworICAgIDIzNzAwIHVzZXMKKyAgICAyMzgwMCB1c2VzCisgICAgMjM5MDAgdXNlcworICAgIDI0MDAwIHVzZXMKKyAgICAyNDEwMCB1c2VzCisgICAgMjQyMDAgdXNlcworICAgIDI0MzAwIHVzZXMKKyAgICAyNDQwMCB1c2VzCisgICAgMjQ1MDAgdXNlcworICAgIDI0NjAwIHVzZXMKKyAgICAyNDcwMCB1c2VzCisgICAgMjQ4MDAgdXNlcworICAgIDI0OTAwIHVzZXMKKyAgICAyNTAwMCB1c2VzCisgICAgMjUxMDAgdXNlcworICAgIDI1MjAwIHVzZXMKKyAgICAyNTMwMCB1c2VzCisgICAgMjU0MDAgdXNlcworICAgIDI1NTAwIHVzZXMKKyAgICAyNTYwMCB1c2VzCisgICAgMjU3MDAgdXNlcworICAgIDI1ODAwIHVzZXMKKyAgICAyNTkwMCB1c2VzCisgICAgMjYwMDAgdXNlcworICAgIDI2MTAwIHVzZXMKKyAgICAyNjIwMCB1c2VzCisgICAgMjYzMDAgdXNlcworICAgIDI2NDAwIHVzZXMKKyAgICAyNjUwMCB1c2VzCisgICAgMjY2MDAgdXNlcworICAgIDI2NzAwIHVzZXMKKyAgICAyNjgwMCB1c2VzCisgICAgMjY5MDAgdXNlcworICAgIDI3MDAwIHVzZXMKKyAgICAyNzEwMCB1c2VzCisgICAgMjcyMDAgdXNlcworICAgIDI3MzAwIHVzZXMKK1JlYWRpbmcgInVzZXJfcHJvamVjdF93cmFwcGVyIi4KK1Jvb3QgY2VsbCBib3g6CisgICAgICAgICAgIHdpZHRoIHggaGVpZ2h0ICAoICAgbGx4LCAgbGx5ICApLCAoICAgdXJ4LCAgdXJ5ICApICBhcmVhICh1bml0c14yKQorCittaWNyb25zOiAgIDIwLjAwIHggMzUyMC4wMCAgKC0yMC4wMCwgIDAuMDAgKSwgKCAgMC4wMCwgIDM1MjAuMDApICA3MDQwMC4wMCAgCitsYW1iZGE6ICAgMjAwMC4wMCB4IDM1MjAwMC4wMCAgKC0yMDAwLjAwLCAgMC4wMCApLCAoICAwLjAwLCAgMzUyMDAwLjAwKSAgNzA0MDAwMDAwLjAwCitpbnRlcm5hbDogICA0MDAwIHggNzA0MDAwICAoIC00MDAwLCAgMCAgICApLCAoICAgICAwLCAgNzA0MDAwKSAgMjgxNjAwMDAwMAorUm9vdCBjZWxsIGJveDoKKyAgICAgICAgICAgd2lkdGggeCBoZWlnaHQgICggICBsbHgsICBsbHkgICksICggICB1cngsICB1cnkgICkgIGFyZWEgKHVuaXRzXjIpCisKK21pY3JvbnM6ICAgMjAuMDAgeCAzNTIwLjAwICAoIDI5MjAuMDAsICAwLjAwICksICggMjk0MC4wMCwgIDM1MjAuMDApICA3MDQwMC4wMCAgCitsYW1iZGE6ICAgMjAwMC4wMCB4IDM1MjAwMC4wMCAgKCAyOTIwMDAuMDAsICAwLjAwICksICggMjk0MDAwLjAwLCAgMzUyMDAwLjAwKSAgNzA0MDAwMDAwLjAwCitpbnRlcm5hbDogICA0MDAwIHggNzA0MDAwICAoIDU4NDAwMCwgIDAgICAgKSwgKCA1ODgwMDAsICA3MDQwMDApICAyODE2MDAwMDAwCitSb290IGNlbGwgYm94OgorICAgICAgICAgICB3aWR0aCB4IGhlaWdodCAgKCAgIGxseCwgIGxseSAgKSwgKCAgIHVyeCwgIHVyeSAgKSAgYXJlYSAodW5pdHNeMikKKworbWljcm9uczogIDI5NjAuMDAgeCAyMC4wMCAgICgtMjAuMDAsIC0yMC4wMCksICggMjk0MC4wMCwgIDAuMDAgKSAgNTkyMDAuMDAgIAorbGFtYmRhOiAgIDI5NjAwMC4wMCB4IDIwMDAuMDAgICgtMjAwMC4wMCwgLTIwMDAuMDApLCAoIDI5NDAwMC4wMCwgIDAuMDAgKSAgNTkyMDAwMDAwLjAwCitpbnRlcm5hbDogNTkyMDAwIHggNDAwMCAgICAoIC00MDAwLCAtNDAwMCApLCAoIDU4ODAwMCwgIDAgICAgKSAgMjM2ODAwMDAwMAorUm9vdCBjZWxsIGJveDoKKyAgICAgICAgICAgd2lkdGggeCBoZWlnaHQgICggICBsbHgsICBsbHkgICksICggICB1cngsICB1cnkgICkgIGFyZWEgKHVuaXRzXjIpCisKK21pY3JvbnM6ICAyOTYwLjAwIHggMjAuMDAgICAoLTIwLjAwLCAgMzUyMC4wMCksICggMjk0MC4wMCwgIDM1NDAuMDApICA1OTIwMC4wMCAgCitsYW1iZGE6ICAgMjk2MDAwLjAwIHggMjAwMC4wMCAgKC0yMDAwLjAwLCAgMzUyMDAwLjAwKSwgKCAyOTQwMDAuMDAsICAzNTQwMDAuMDApICA1OTIwMDAwMDAuMDAKK2ludGVybmFsOiA1OTIwMDAgeCA0MDAwICAgICggLTQwMDAsICA3MDQwMDApLCAoIDU4ODAwMCwgIDcwODAwMCkgIDIzNjgwMDAwMDAKKyAgIEdlbmVyYXRpbmcgb3V0cHV0IGZvciBjZWxsIHhvcl90YXJnZXQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9jaGVja3MvdXNlcl9wcm9qZWN0X3dyYXBwZXJfZXJhc2VkLmdkcwpkaWZmIC0tZ2l0IGEvY2hlY2tzL2VyYXNlX2JveF91c2VyX3Byb2plY3Rfd3JhcHBlcl9lbXB0eS5nZHMubG9nIGIvY2hlY2tzL2VyYXNlX2JveF91c2VyX3Byb2plY3Rfd3JhcHBlcl9lbXB0eS5nZHMubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyZTQ3YjYKLS0tIC9kZXYvbnVsbAorKysgYi9jaGVja3MvZXJhc2VfYm94X3VzZXJfcHJvamVjdF93cmFwcGVyX2VtcHR5Lmdkcy5sb2cKQEAgLTAsMCArMSw0NSBAQAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL2NoZWNrcy91c2VyX3Byb2plY3Rfd3JhcHBlcl9lbXB0eS5nZHMgL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL2NoZWNrcy91c2VyX3Byb2plY3Rfd3JhcHBlcl9lbXB0eV9lcmFzZWQuZ2RzIHVzZXJfcHJvamVjdF93cmFwcGVyCisKK01hZ2ljIDguMyByZXZpc2lvbiAxODIgLSBDb21waWxlZCBvbiBGcmkgSnVuIDI1IDIzOjU4OjEzIFVUQyAyMDIxLgorU3RhcnRpbmcgbWFnaWMgdW5kZXIgVGNsIGludGVycHJldGVyCitVc2luZyB0aGUgdGVybWluYWwgYXMgdGhlIGNvbnNvbGUuCitVc2luZyBOVUxMIGdyYXBoaWNzIGRldmljZS4KK1Byb2Nlc3Npbmcgc3lzdGVtIC5tYWdpY3JjIGZpbGUKK1NvdXJjaW5nIGRlc2lnbiAubWFnaWNyYyBmb3IgdGVjaG5vbG9neSBza3kxMzBBIC4uLgorMiBNYWdpYyBpbnRlcm5hbCB1bml0cyA9IDEgTGFtYmRhCitJbnB1dCBzdHlsZSBza3kxMzAoKTogc2NhbGVGYWN0b3I9MiwgbXVsdGlwbGllcj0yCitTY2FsZWQgdGVjaCB2YWx1ZXMgYnkgMiAvIDEgdG8gbWF0Y2ggaW50ZXJuYWwgZ3JpZCBzY2FsaW5nCitMb2FkaW5nIHNreTEzMEEgRGV2aWNlIEdlbmVyYXRvciBNZW51IC4uLgorVXNpbmcgdGVjaG5vbG9neSAic2t5MTMwQSIsIHZlcnNpb24gMS4wLjExNi00LWc1MjJhMzczCitJbnB1dCBzdHlsZSBza3kxMzAodmVuZG9yKTogc2NhbGVGYWN0b3I9MiwgbXVsdGlwbGllcj0yCitDSUYgaW5wdXQgc3R5bGUgaXMgbm93ICJza3kxMzAodmVuZG9yKSIKK1dhcm5pbmc6IENhbG1hIHJlYWRpbmcgaXMgbm90IHVuZG9hYmxlISAgSSBob3BlIHRoYXQncyBPSy4KK0xpYnJhcnkgd3JpdHRlbiB1c2luZyBHRFMtSUkgUmVsZWFzZSAzLjAKK0xpYnJhcnkgbmFtZTogdXNlcl9wcm9qZWN0X3dyYXBwZXIKK1JlYWRpbmcgInVzZXJfcHJvamVjdF93cmFwcGVyIi4KK1Jvb3QgY2VsbCBib3g6CisgICAgICAgICAgIHdpZHRoIHggaGVpZ2h0ICAoICAgbGx4LCAgbGx5ICApLCAoICAgdXJ4LCAgdXJ5ICApICBhcmVhICh1bml0c14yKQorCittaWNyb25zOiAgIDIwLjAwIHggMzUyMC4wMCAgKC0yMC4wMCwgIDAuMDAgKSwgKCAgMC4wMCwgIDM1MjAuMDApICA3MDQwMC4wMCAgCitsYW1iZGE6ICAgMjAwMC4wMCB4IDM1MjAwMC4wMCAgKC0yMDAwLjAwLCAgMC4wMCApLCAoICAwLjAwLCAgMzUyMDAwLjAwKSAgNzA0MDAwMDAwLjAwCitpbnRlcm5hbDogICA0MDAwIHggNzA0MDAwICAoIC00MDAwLCAgMCAgICApLCAoICAgICAwLCAgNzA0MDAwKSAgMjgxNjAwMDAwMAorUm9vdCBjZWxsIGJveDoKKyAgICAgICAgICAgd2lkdGggeCBoZWlnaHQgICggICBsbHgsICBsbHkgICksICggICB1cngsICB1cnkgICkgIGFyZWEgKHVuaXRzXjIpCisKK21pY3JvbnM6ICAgMjAuMDAgeCAzNTIwLjAwICAoIDI5MjAuMDAsICAwLjAwICksICggMjk0MC4wMCwgIDM1MjAuMDApICA3MDQwMC4wMCAgCitsYW1iZGE6ICAgMjAwMC4wMCB4IDM1MjAwMC4wMCAgKCAyOTIwMDAuMDAsICAwLjAwICksICggMjk0MDAwLjAwLCAgMzUyMDAwLjAwKSAgNzA0MDAwMDAwLjAwCitpbnRlcm5hbDogICA0MDAwIHggNzA0MDAwICAoIDU4NDAwMCwgIDAgICAgKSwgKCA1ODgwMDAsICA3MDQwMDApICAyODE2MDAwMDAwCitSb290IGNlbGwgYm94OgorICAgICAgICAgICB3aWR0aCB4IGhlaWdodCAgKCAgIGxseCwgIGxseSAgKSwgKCAgIHVyeCwgIHVyeSAgKSAgYXJlYSAodW5pdHNeMikKKworbWljcm9uczogIDI5NjAuMDAgeCAyMC4wMCAgICgtMjAuMDAsIC0yMC4wMCksICggMjk0MC4wMCwgIDAuMDAgKSAgNTkyMDAuMDAgIAorbGFtYmRhOiAgIDI5NjAwMC4wMCB4IDIwMDAuMDAgICgtMjAwMC4wMCwgLTIwMDAuMDApLCAoIDI5NDAwMC4wMCwgIDAuMDAgKSAgNTkyMDAwMDAwLjAwCitpbnRlcm5hbDogNTkyMDAwIHggNDAwMCAgICAoIC00MDAwLCAtNDAwMCApLCAoIDU4ODAwMCwgIDAgICAgKSAgMjM2ODAwMDAwMAorUm9vdCBjZWxsIGJveDoKKyAgICAgICAgICAgd2lkdGggeCBoZWlnaHQgICggICBsbHgsICBsbHkgICksICggICB1cngsICB1cnkgICkgIGFyZWEgKHVuaXRzXjIpCisKK21pY3JvbnM6ICAyOTYwLjAwIHggMjAuMDAgICAoLTIwLjAwLCAgMzUyMC4wMCksICggMjk0MC4wMCwgIDM1NDAuMDApICA1OTIwMC4wMCAgCitsYW1iZGE6ICAgMjk2MDAwLjAwIHggMjAwMC4wMCAgKC0yMDAwLjAwLCAgMzUyMDAwLjAwKSwgKCAyOTQwMDAuMDAsICAzNTQwMDAuMDApICA1OTIwMDAwMDAuMDAKK2ludGVybmFsOiA1OTIwMDAgeCA0MDAwICAgICggLTQwMDAsICA3MDQwMDApLCAoIDU4ODAwMCwgIDcwODAwMCkgIDIzNjgwMDAwMDAKKyAgIEdlbmVyYXRpbmcgb3V0cHV0IGZvciBjZWxsIHhvcl90YXJnZXQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9jaGVja3MvdXNlcl9wcm9qZWN0X3dyYXBwZXJfZW1wdHlfZXJhc2VkLmdkcwpkaWZmIC0tZ2l0IGEvY2hlY2tzL2Z1bGxfbG9nLmxvZyBiL2NoZWNrcy9mdWxsX2xvZy5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI5NzU2YQotLS0gL2Rldi9udWxsCisrKyBiL2NoZWNrcy9mdWxsX2xvZy5sb2cKQEAgLTAsMCArMSw0MyBAQAorRlVMTCBSVU4gTE9HOgorIEV4ZWN1dGluZyBTdGVwIDAgb2YgODogRXh0cmFjdGluZyBHRFMgRmlsZXMKK1N0ZXAgMCBkb25lIHdpdGhvdXQgZmF0YWwgZXJyb3JzLgorIEV4ZWN1dGluZyBTdGVwIDEgb2YgODogUHJvamVjdCBMaWNlbnNlIENoZWNrCit7e0xJQ0VOU0UgQ09NUExJQU5DRSBQQVNTRUR9fSBBcGFjaGUtMi4wIExJQ0VOU0UgZmlsZSB3YXMgZm91bmQgaW4gcHJvamVjdCByb290CisgU1BEWCBDT01QTElBTkNFIEZvdW5kIDExMTAgbm9uLWNvbXBsaWFudCBmaWxlcyB3aXRoIHRoZSBTUERYIFN0YW5kYXJkLiBDaGVjayBmdWxsIGxvZyBmb3IgbW9yZSBpbmZvcm1hdGlvbgorU1BEWCBDT01QTElBTkNFOiBOT04tQ09NUExJQU5UIEZJTEVTIFBSRVZJRVc6IFsnL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL1JFQURNRS5tZCcsICcvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvc3BlZi91c2VyX3Byb2plY3Rfd3JhcHBlci5zcGVmJywgJy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9zcGVmL3diX2hvc3Quc3BlZicsICcvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvc3BlZi9zZHJjX3RvcC5zcGVmJywgJy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9zcGVmL3diX2ludGVyY29ubmVjdC5zcGVmJywgJy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9zcGVmL3NjcjFfdG9wX3diLnNwZWYnLCAnL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL3NwZWYvZ2xibF9jZmcuc3BlZicsICcvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvc3BlZi90ZXN0LnNwZWYnLCAnL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL3NwZWYvdWFydF9jb3JlLnNwZWYnLCAnL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL3NwZWYvY2xrX3NrZXdfYWRqdXN0LnNwZWYnLCAnL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL3NwZWYvY2xrX2J1Zi5zcGVmJywgJy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9zcGVmL3NwaW1fdG9wLnNwZWYnLCAnL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL2RlZmF1bHQuY3ZjcmMnLCAnL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9jb3JlL2FhJywgJy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zY3JfY29yZS9ydW5zL3Njcl9jb3JlL2NvbmZpZy50Y2wnLCAnL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9jb3JlL3J1bnMvc2NyX2NvcmUvdG1wL21hZ2ljX3NwaWNlLnRjbCcsICcvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2NyX2NvcmUvcnVucy9zY3JfY29yZS90bXAvb3B0LmxpYicsICcvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2NyX2NvcmUvcnVucy9zY3JfY29yZS90bXAvdHJpbW1lZC5saWInLCAnL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9jb3JlL3J1bnMvc2NyX2NvcmUvdG1wL3RyYWNrc19jb3B5LmluZm8nLCAnL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9jb3JlL3J1bnMvc2NyX2NvcmUvdG1wL3NreTEzMF9mZF9zY19oZF9fdHRfMDI1Q18xdjgwLm5vX3BnLmxpYiddCisgRXhlY3V0aW5nIFN0ZXAgMiBvZiA4OiBZQU1MIEZpbGUgQ2hlY2sKKyBZQU1MIGZpbGUgdmFsaWQhCitTdGVwIDIgZG9uZSB3aXRob3V0IGZhdGFsIGVycm9ycy4KKyBEZXRlY3RlZCBQcm9qZWN0IFR5cGUgaXMgImRpZ2l0YWwiCisgRXhlY3V0aW5nIFN0ZXAgMyBvZiA4OiBQcm9qZWN0IENvbXBsaWFuY2UgQ2hlY2tzCitiJ0dvaW5nIGludG8gL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL2NhcmF2ZWwnCitiJ1JlbW92aW5nIG1hbmlmZXN0JworYidGZXRjaGluZyBtYW5pZmVzdCcKK2InUnVubmluZyBzaGExc3VtIGNoZWNrcycKKyBNYW5pZmVzdCBDaGVja3MgUGFzc2VkLiBDYXJhdmVsIFZlcnNpb24gTWF0Y2hlcy4KKyBNYWtlZmlsZSBDaGVja3MgUGFzc2VkLgorIERvY3VtZW50YXRpb24gQ2hlY2tzIFBhc3NlZC4KKyBFeGVjdXRpbmcgU3RlcCA0IG9mIDg6IEZ1enp5IENvbnNpc3RlbmN5IENoZWNrcworaW5zdGFuY2UgY2FyYXZlbCBmb3VuZAoraW5zdGFuY2UgdXNlcl9wcm9qZWN0X3dyYXBwZXIgZm91bmQKK0Rlc2lnbiBpcyBjb21wbGV4IGFuZCBjb250YWluczogNDcgbW9kdWxlcworRGVzaWduIGlzIGNvbXBsZXggYW5kIGNvbnRhaW5zOiAyMCBtb2R1bGVzCit2ZXJpbG9nIENvbnNpc3RlbmN5IENoZWNrcyBQYXNzZWQuCisgQmFzaWMgSGllcmFyY2h5IENoZWNrcyBQYXNzZWQuCit7UFJPR1JFU1N9IFJ1bm5pbmcgUGlucyBhbmQgUG93ZXIgQ2hlY2tzLi4uCitQaW5zIGNoZWNrIHBhc3NlZAorSW50ZXJuYWwgUG93ZXIgQ2hlY2tzIFBhc3NlZCEKK1Bvd2VyIENoZWNrcyBQYXNzZWQKKyBGdXp6eSBDb25zaXN0ZW5jeSBDaGVja3MgUGFzc2VkIQorU3RlcCA0IGRvbmUgd2l0aG91dCBmYXRhbCBlcnJvcnMuCisgRXhlY3V0aW5nIFN0ZXAgNSBvZiA4OiBYT1IgQ29uc2lzdGVuY3kgQ2hlY2tzCisgUnVubmluZyBYT1IgQ2hlY2tzLi4uCitUb3RhbCBYT1IgZGlmZmVyZW5jZXMgPSAyNDg4CisgWE9SIENoZWNrcyBvbiBHRFMgRmFpbGVkLCBSZWFzb246IFhPUiBEaWZmZXJlbmNlcyBjb3VudCBpcyAyNDg4LiBQbGVhc2UgdmlldyAvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvY2hlY2tzLyoueG9yLiogZm9yIG1vcmUgZGV0YWlscy4KK1RFU1QgRkFJTEVEIEFUIFNURVAgNQorIEV4ZWN1dGluZyBTdGVwIDYgb2YgODogRFJDIFZpb2xhdGlvbnMgQ2hlY2tzCisgUnVubmluZyBNYWdpYyBEUkMgQ2hlY2tzLi4uCitWaW9sYXRpb24gTWVzc2FnZSAiQWxsIG53ZWxscyBtdXN0IGNvbnRhaW4gbWV0YWwtY29ubmVjdGVkIE4rIHRhcHMgKG53ZWxsLjQpICJmb3VuZCAxIFRpbWVzLgorIERSQyBDaGVja3Mgb24gR0RTIEZhaWxlZCwgUmVhc29uOiBUb3RhbCAjIG9mIERSQyB2aW9sYXRpb25zIGlzIDEKK1RFU1QgRkFJTEVEIEFUIFNURVAgNgorIFNPTUUgQ2hlY2tzIEZBSUxFRCAhISEKZGlmZiAtLWdpdCBhL2NoZWNrcy9tYWdpY19kcmMubG9nIGIvY2hlY2tzL21hZ2ljX2RyYy5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjkxOTI2YgotLS0gL2Rldi9udWxsCisrKyBiL2NoZWNrcy9tYWdpY19kcmMubG9nCkBAIC0wLDAgKzEsMjg0NyBAQAorCitNYWdpYyA4LjMgcmV2aXNpb24gMTgyIC0gQ29tcGlsZWQgb24gRnJpIEp1biAyNSAyMzo1ODoxMyBVVEMgMjAyMS4KK1N0YXJ0aW5nIG1hZ2ljIHVuZGVyIFRjbCBpbnRlcnByZXRlcgorVXNpbmcgdGhlIHRlcm1pbmFsIGFzIHRoZSBjb25zb2xlLgorVXNpbmcgTlVMTCBncmFwaGljcyBkZXZpY2UuCitQcm9jZXNzaW5nIHN5c3RlbSAubWFnaWNyYyBmaWxlCitTb3VyY2luZyBkZXNpZ24gLm1hZ2ljcmMgZm9yIHRlY2hub2xvZ3kgc2t5MTMwQSAuLi4KKzIgTWFnaWMgaW50ZXJuYWwgdW5pdHMgPSAxIExhbWJkYQorSW5wdXQgc3R5bGUgc2t5MTMwKCk6IHNjYWxlRmFjdG9yPTIsIG11bHRpcGxpZXI9MgorU2NhbGVkIHRlY2ggdmFsdWVzIGJ5IDIgLyAxIHRvIG1hdGNoIGludGVybmFsIGdyaWQgc2NhbGluZworTG9hZGluZyBza3kxMzBBIERldmljZSBHZW5lcmF0b3IgTWVudSAuLi4KK0xvYWRpbmcgIi91c3IvbG9jYWwvYmluL2RyY19jaGVja3MvbWFnaWNfZHJjX2NoZWNrLnRjbCIgZnJvbSBjb21tYW5kIGxpbmUuCitXYXJuaW5nOiBDYWxtYSByZWFkaW5nIGlzIG5vdCB1bmRvYWJsZSEgIEkgaG9wZSB0aGF0J3MgT0suCitMaWJyYXJ5IHdyaXR0ZW4gdXNpbmcgR0RTLUlJIFJlbGVhc2UgMy4wCitMaWJyYXJ5IG5hbWU6IHVzZXJfcHJvamVjdF93cmFwcGVyCitSZWFkaW5nICJza3kxMzBfZmRfc2NfaGRfX2Nsa2J1Zl8xNiIuCitSZWFkaW5nICJza3kxMzBfZmRfc2NfaGRfX2J1Zl80Ii4KK1JlYWRpbmcgInNreTEzMF9mZF9zY19oZF9fYTIxb180Ii4KK1JlYWRpbmcgInNreTEzMF9mZF9zY19oZF9fY2xrYnVmXzEiLgorUmVhZGluZyAic2t5MTMwX2ZkX3NjX2hkX19kZnN0cF80Ii4KK1JlYWRpbmcgInNreTEzMF9mZF9zY19oZF9fb3IzXzQiLgorUmVhZGluZyAic2t5MTMwX2ZkX3NjX2hkX19hMjFib2lfNCIuCitSZWFkaW5nICJza3kxMzBfZmRfc2NfaGRfX29yNF80Ii4KK1JlYWRpbmcgInNreTEzMF9mZF9zY19oZF9fYTIyb2lfNCIuCitSZWFkaW5nICJza3kxMzBfZmRfc2NfaGRfX2FuZDNfNCIuCitSZWFkaW5nICJza3kxMzBfZmRfc2NfaGRfX28yMWFpXzQiLgorUmVhZGluZyAic2t5MTMwX2ZkX3NjX2hkX19vMzJhXzQiLgorUmVhZGluZyAic2t5MTMwX2ZkX3NjX2hkX19hbmQyXzQiLgorUmVhZGluZyAic2t5MTMwX2ZkX3NjX2hkX19hbmQ0XzQiLgorUmVhZGluZyAic2t5MTMwX2ZkX3NjX2hkX19kZnh0cF80Ii4KK1JlYWRpbmcgInNreTEzMF9mZF9zY19oZF9fb3IyXzQiLgorUmVhZGluZyAic2t5MTMwX2ZkX3NjX2hkX19kaW9kZV8yIi4KK1JlYWRpbmcgInNreTEzMF9mZF9zY19oZF9fbzIyYV80Ii4KK1JlYWRpbmcgInNreTEzMF9mZF9zY19oZF9fbm9yMl80Ii4KK1JlYWRpbmcgInNreTEzMF9mZF9zY19oZF9fbzIxYV80Ii4KK1JlYWRpbmcgInNreTEzMF9mZF9zY19oZF9fYTMyb180Ii4KK1JlYWRpbmcgInNreTEzMF9mZF9zY19oZF9fYnVmXzIiLgorUmVhZGluZyAic2t5MTMwX2ZkX3NjX2hkX19hMjFvaV80Ii4KK1JlYWRpbmcgInNreTEzMF9mZF9zY19oZF9fbmFuZDJfNCIuCitSZWFkaW5nICJza3kxMzBfZmRfc2NfaGRfX2ludl8yIi4KK1JlYWRpbmcgInNreTEzMF9mZF9zY19oZF9fZGZydHBfNCIuCitSZWFkaW5nICJza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzQiLgorUmVhZGluZyAic2t5MTMwX2ZkX3NjX2hkX19hMjExb180Ii4KK1JlYWRpbmcgInNreTEzMF9mZF9zY19oZF9fZmlsbF8yIi4KK1JlYWRpbmcgInNreTEzMF9mZF9zY19oZF9fZGVjYXBfOCIuCitSZWFkaW5nICJza3kxMzBfZmRfc2NfaGRfX2EyYmIyb180Ii4KK1JlYWRpbmcgInNreTEzMF9mZF9zY19oZF9fdGFwdnB3cnZnbmRfMSIuCitSZWFkaW5nICJza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIi4KK1JlYWRpbmcgInNreTEzMF9mZF9zY19oZF9fY29uYl8xIi4KK1JlYWRpbmcgInNreTEzMF9mZF9zY19oZF9fZGVjYXBfNiIuCitSZWFkaW5nICJza3kxMzBfZmRfc2NfaGRfX2ZpbGxfMSIuCitSZWFkaW5nICJza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzMiLgorUmVhZGluZyAic2t5MTMwX2ZkX3NjX2hkX19hMjExMW9fNCIuCitSZWFkaW5nICJza3kxMzBfZmRfc2NfaGRfX2EyMWJvXzQiLgorUmVhZGluZyAic2t5MTMwX2ZkX3NjX2hkX19vNDFhXzQiLgorUmVhZGluZyAic2t5MTMwX2ZkX3NjX2hkX19idWZfOCIuCitSZWFkaW5nICJzY3IxX2NvcmVfdG9wIi4KKyAgICAxMDAgdXNlcworICAgIDIwMCB1c2VzCisgICAgMzAwIHVzZXMKKyAgICA0MDAgdXNlcworICAgIDUwMCB1c2VzCisgICAgNjAwIHVzZXMKKyAgICA3MDAgdXNlcworICAgIDgwMCB1c2VzCisgICAgOTAwIHVzZXMKKyAgICAxMDAwIHVzZXMKKyAgICAxMTAwIHVzZXMKKyAgICAxMjAwIHVzZXMKKyAgICAxMzAwIHVzZXMKKyAgICAxNDAwIHVzZXMKKyAgICAxNTAwIHVzZXMKKyAgICAxNjAwIHVzZXMKKyAgICAxNzAwIHVzZXMKKyAgICAxODAwIHVzZXMKKyAgICAxOTAwIHVzZXMKKyAgICAyMDAwIHVzZXMKKyAgICAyMTAwIHVzZXMKKyAgICAyMjAwIHVzZXMKKyAgICAyMzAwIHVzZXMKKyAgICAyNDAwIHVzZXMKKyAgICAyNTAwIHVzZXMKKyAgICAyNjAwIHVzZXMKKyAgICAyNzAwIHVzZXMKKyAgICAyODAwIHVzZXMKKyAgICAyOTAwIHVzZXMKKyAgICAzMDAwIHVzZXMKKyAgICAzMTAwIHVzZXMKKyAgICAzMjAwIHVzZXMKKyAgICAzMzAwIHVzZXMKKyAgICAzNDAwIHVzZXMKKyAgICAzNTAwIHVzZXMKKyAgICAzNjAwIHVzZXMKKyAgICAzNzAwIHVzZXMKKyAgICAzODAwIHVzZXMKKyAgICAzOTAwIHVzZXMKKyAgICA0MDAwIHVzZXMKKyAgICA0MTAwIHVzZXMKKyAgICA0MjAwIHVzZXMKKyAgICA0MzAwIHVzZXMKKyAgICA0NDAwIHVzZXMKKyAgICA0NTAwIHVzZXMKKyAgICA0NjAwIHVzZXMKKyAgICA0NzAwIHVzZXMKKyAgICA0ODAwIHVzZXMKKyAgICA0OTAwIHVzZXMKKyAgICA1MDAwIHVzZXMKKyAgICA1MTAwIHVzZXMKKyAgICA1MjAwIHVzZXMKKyAgICA1MzAwIHVzZXMKKyAgICA1NDAwIHVzZXMKKyAgICA1NTAwIHVzZXMKKyAgICA1NjAwIHVzZXMKKyAgICA1NzAwIHVzZXMKKyAgICA1ODAwIHVzZXMKKyAgICA1OTAwIHVzZXMKKyAgICA2MDAwIHVzZXMKKyAgICA2MTAwIHVzZXMKKyAgICA2MjAwIHVzZXMKKyAgICA2MzAwIHVzZXMKKyAgICA2NDAwIHVzZXMKKyAgICA2NTAwIHVzZXMKKyAgICA2NjAwIHVzZXMKKyAgICA2NzAwIHVzZXMKKyAgICA2ODAwIHVzZXMKKyAgICA2OTAwIHVzZXMKKyAgICA3MDAwIHVzZXMKKyAgICA3MTAwIHVzZXMKKyAgICA3MjAwIHVzZXMKKyAgICA3MzAwIHVzZXMKKyAgICA3NDAwIHVzZXMKKyAgICA3NTAwIHVzZXMKKyAgICA3NjAwIHVzZXMKKyAgICA3NzAwIHVzZXMKKyAgICA3ODAwIHVzZXMKKyAgICA3OTAwIHVzZXMKKyAgICA4MDAwIHVzZXMKKyAgICA4MTAwIHVzZXMKKyAgICA4MjAwIHVzZXMKKyAgICA4MzAwIHVzZXMKKyAgICA4NDAwIHVzZXMKKyAgICA4NTAwIHVzZXMKKyAgICA4NjAwIHVzZXMKKyAgICA4NzAwIHVzZXMKKyAgICA4ODAwIHVzZXMKKyAgICA4OTAwIHVzZXMKKyAgICA5MDAwIHVzZXMKKyAgICA5MTAwIHVzZXMKKyAgICA5MjAwIHVzZXMKKyAgICA5MzAwIHVzZXMKKyAgICA5NDAwIHVzZXMKKyAgICA5NTAwIHVzZXMKKyAgICA5NjAwIHVzZXMKKyAgICA5NzAwIHVzZXMKKyAgICA5ODAwIHVzZXMKKyAgICA5OTAwIHVzZXMKKyAgICAxMDAwMCB1c2VzCisgICAgMTAxMDAgdXNlcworICAgIDEwMjAwIHVzZXMKKyAgICAxMDMwMCB1c2VzCisgICAgMTA0MDAgdXNlcworICAgIDEwNTAwIHVzZXMKKyAgICAxMDYwMCB1c2VzCisgICAgMTA3MDAgdXNlcworICAgIDEwODAwIHVzZXMKKyAgICAxMDkwMCB1c2VzCisgICAgMTEwMDAgdXNlcworICAgIDExMTAwIHVzZXMKKyAgICAxMTIwMCB1c2VzCisgICAgMTEzMDAgdXNlcworICAgIDExNDAwIHVzZXMKKyAgICAxMTUwMCB1c2VzCisgICAgMTE2MDAgdXNlcworICAgIDExNzAwIHVzZXMKKyAgICAxMTgwMCB1c2VzCisgICAgMTE5MDAgdXNlcworICAgIDEyMDAwIHVzZXMKKyAgICAxMjEwMCB1c2VzCisgICAgMTIyMDAgdXNlcworICAgIDEyMzAwIHVzZXMKKyAgICAxMjQwMCB1c2VzCisgICAgMTI1MDAgdXNlcworICAgIDEyNjAwIHVzZXMKKyAgICAxMjcwMCB1c2VzCisgICAgMTI4MDAgdXNlcworICAgIDEyOTAwIHVzZXMKKyAgICAxMzAwMCB1c2VzCisgICAgMTMxMDAgdXNlcworICAgIDEzMjAwIHVzZXMKKyAgICAxMzMwMCB1c2VzCisgICAgMTM0MDAgdXNlcworICAgIDEzNTAwIHVzZXMKKyAgICAxMzYwMCB1c2VzCisgICAgMTM3MDAgdXNlcworICAgIDEzODAwIHVzZXMKKyAgICAxMzkwMCB1c2VzCisgICAgMTQwMDAgdXNlcworICAgIDE0MTAwIHVzZXMKKyAgICAxNDIwMCB1c2VzCisgICAgMTQzMDAgdXNlcworICAgIDE0NDAwIHVzZXMKKyAgICAxNDUwMCB1c2VzCisgICAgMTQ2MDAgdXNlcworICAgIDE0NzAwIHVzZXMKKyAgICAxNDgwMCB1c2VzCisgICAgMTQ5MDAgdXNlcworICAgIDE1MDAwIHVzZXMKKyAgICAxNTEwMCB1c2VzCisgICAgMTUyMDAgdXNlcworICAgIDE1MzAwIHVzZXMKKyAgICAxNTQwMCB1c2VzCisgICAgMTU1MDAgdXNlcworICAgIDE1NjAwIHVzZXMKKyAgICAxNTcwMCB1c2VzCisgICAgMTU4MDAgdXNlcworICAgIDE1OTAwIHVzZXMKKyAgICAxNjAwMCB1c2VzCisgICAgMTYxMDAgdXNlcworICAgIDE2MjAwIHVzZXMKKyAgICAxNjMwMCB1c2VzCisgICAgMTY0MDAgdXNlcworICAgIDE2NTAwIHVzZXMKKyAgICAxNjYwMCB1c2VzCisgICAgMTY3MDAgdXNlcworICAgIDE2ODAwIHVzZXMKKyAgICAxNjkwMCB1c2VzCisgICAgMTcwMDAgdXNlcworICAgIDE3MTAwIHVzZXMKKyAgICAxNzIwMCB1c2VzCisgICAgMTczMDAgdXNlcworICAgIDE3NDAwIHVzZXMKKyAgICAxNzUwMCB1c2VzCisgICAgMTc2MDAgdXNlcworICAgIDE3NzAwIHVzZXMKKyAgICAxNzgwMCB1c2VzCisgICAgMTc5MDAgdXNlcworICAgIDE4MDAwIHVzZXMKKyAgICAxODEwMCB1c2VzCisgICAgMTgyMDAgdXNlcworICAgIDE4MzAwIHVzZXMKKyAgICAxODQwMCB1c2VzCisgICAgMTg1MDAgdXNlcworICAgIDE4NjAwIHVzZXMKKyAgICAxODcwMCB1c2VzCisgICAgMTg4MDAgdXNlcworICAgIDE4OTAwIHVzZXMKKyAgICAxOTAwMCB1c2VzCisgICAgMTkxMDAgdXNlcworICAgIDE5MjAwIHVzZXMKKyAgICAxOTMwMCB1c2VzCisgICAgMTk0MDAgdXNlcworICAgIDE5NTAwIHVzZXMKKyAgICAxOTYwMCB1c2VzCisgICAgMTk3MDAgdXNlcworICAgIDE5ODAwIHVzZXMKKyAgICAxOTkwMCB1c2VzCisgICAgMjAwMDAgdXNlcworICAgIDIwMTAwIHVzZXMKKyAgICAyMDIwMCB1c2VzCisgICAgMjAzMDAgdXNlcworICAgIDIwNDAwIHVzZXMKKyAgICAyMDUwMCB1c2VzCisgICAgMjA2MDAgdXNlcworICAgIDIwNzAwIHVzZXMKKyAgICAyMDgwMCB1c2VzCisgICAgMjA5MDAgdXNlcworICAgIDIxMDAwIHVzZXMKKyAgICAyMTEwMCB1c2VzCisgICAgMjEyMDAgdXNlcworICAgIDIxMzAwIHVzZXMKKyAgICAyMTQwMCB1c2VzCisgICAgMjE1MDAgdXNlcworICAgIDIxNjAwIHVzZXMKKyAgICAyMTcwMCB1c2VzCisgICAgMjE4MDAgdXNlcworICAgIDIxOTAwIHVzZXMKKyAgICAyMjAwMCB1c2VzCisgICAgMjIxMDAgdXNlcworICAgIDIyMjAwIHVzZXMKKyAgICAyMjMwMCB1c2VzCisgICAgMjI0MDAgdXNlcworICAgIDIyNTAwIHVzZXMKKyAgICAyMjYwMCB1c2VzCisgICAgMjI3MDAgdXNlcworICAgIDIyODAwIHVzZXMKKyAgICAyMjkwMCB1c2VzCisgICAgMjMwMDAgdXNlcworICAgIDIzMTAwIHVzZXMKKyAgICAyMzIwMCB1c2VzCisgICAgMjMzMDAgdXNlcworICAgIDIzNDAwIHVzZXMKKyAgICAyMzUwMCB1c2VzCisgICAgMjM2MDAgdXNlcworICAgIDIzNzAwIHVzZXMKKyAgICAyMzgwMCB1c2VzCisgICAgMjM5MDAgdXNlcworICAgIDI0MDAwIHVzZXMKKyAgICAyNDEwMCB1c2VzCisgICAgMjQyMDAgdXNlcworICAgIDI0MzAwIHVzZXMKKyAgICAyNDQwMCB1c2VzCisgICAgMjQ1MDAgdXNlcworICAgIDI0NjAwIHVzZXMKKyAgICAyNDcwMCB1c2VzCisgICAgMjQ4MDAgdXNlcworICAgIDI0OTAwIHVzZXMKKyAgICAyNTAwMCB1c2VzCisgICAgMjUxMDAgdXNlcworICAgIDI1MjAwIHVzZXMKKyAgICAyNTMwMCB1c2VzCisgICAgMjU0MDAgdXNlcworICAgIDI1NTAwIHVzZXMKKyAgICAyNTYwMCB1c2VzCisgICAgMjU3MDAgdXNlcworICAgIDI1ODAwIHVzZXMKKyAgICAyNTkwMCB1c2VzCisgICAgMjYwMDAgdXNlcworICAgIDI2MTAwIHVzZXMKKyAgICAyNjIwMCB1c2VzCisgICAgMjYzMDAgdXNlcworICAgIDI2NDAwIHVzZXMKKyAgICAyNjUwMCB1c2VzCisgICAgMjY2MDAgdXNlcworICAgIDI2NzAwIHVzZXMKKyAgICAyNjgwMCB1c2VzCisgICAgMjY5MDAgdXNlcworICAgIDI3MDAwIHVzZXMKKyAgICAyNzEwMCB1c2VzCisgICAgMjcyMDAgdXNlcworICAgIDI3MzAwIHVzZXMKKyAgICAyNzQwMCB1c2VzCisgICAgMjc1MDAgdXNlcworICAgIDI3NjAwIHVzZXMKKyAgICAyNzcwMCB1c2VzCisgICAgMjc4MDAgdXNlcworICAgIDI3OTAwIHVzZXMKKyAgICAyODAwMCB1c2VzCisgICAgMjgxMDAgdXNlcworICAgIDI4MjAwIHVzZXMKKyAgICAyODMwMCB1c2VzCisgICAgMjg0MDAgdXNlcworICAgIDI4NTAwIHVzZXMKKyAgICAyODYwMCB1c2VzCisgICAgMjg3MDAgdXNlcworICAgIDI4ODAwIHVzZXMKKyAgICAyODkwMCB1c2VzCisgICAgMjkwMDAgdXNlcworICAgIDI5MTAwIHVzZXMKKyAgICAyOTIwMCB1c2VzCisgICAgMjkzMDAgdXNlcworICAgIDI5NDAwIHVzZXMKKyAgICAyOTUwMCB1c2VzCisgICAgMjk2MDAgdXNlcworICAgIDI5NzAwIHVzZXMKKyAgICAyOTgwMCB1c2VzCisgICAgMjk5MDAgdXNlcworICAgIDMwMDAwIHVzZXMKKyAgICAzMDEwMCB1c2VzCisgICAgMzAyMDAgdXNlcworICAgIDMwMzAwIHVzZXMKKyAgICAzMDQwMCB1c2VzCisgICAgMzA1MDAgdXNlcworICAgIDMwNjAwIHVzZXMKKyAgICAzMDcwMCB1c2VzCisgICAgMzA4MDAgdXNlcworICAgIDMwOTAwIHVzZXMKKyAgICAzMTAwMCB1c2VzCisgICAgMzExMDAgdXNlcworICAgIDMxMjAwIHVzZXMKKyAgICAzMTMwMCB1c2VzCisgICAgMzE0MDAgdXNlcworICAgIDMxNTAwIHVzZXMKKyAgICAzMTYwMCB1c2VzCisgICAgMzE3MDAgdXNlcworICAgIDMxODAwIHVzZXMKKyAgICAzMTkwMCB1c2VzCisgICAgMzIwMDAgdXNlcworICAgIDMyMTAwIHVzZXMKKyAgICAzMjIwMCB1c2VzCisgICAgMzIzMDAgdXNlcworICAgIDMyNDAwIHVzZXMKKyAgICAzMjUwMCB1c2VzCisgICAgMzI2MDAgdXNlcworICAgIDMyNzAwIHVzZXMKKyAgICAzMjgwMCB1c2VzCisgICAgMzI5MDAgdXNlcworICAgIDMzMDAwIHVzZXMKKyAgICAzMzEwMCB1c2VzCisgICAgMzMyMDAgdXNlcworICAgIDMzMzAwIHVzZXMKKyAgICAzMzQwMCB1c2VzCisgICAgMzM1MDAgdXNlcworICAgIDMzNjAwIHVzZXMKKyAgICAzMzcwMCB1c2VzCisgICAgMzM4MDAgdXNlcworICAgIDMzOTAwIHVzZXMKKyAgICAzNDAwMCB1c2VzCisgICAgMzQxMDAgdXNlcworICAgIDM0MjAwIHVzZXMKKyAgICAzNDMwMCB1c2VzCisgICAgMzQ0MDAgdXNlcworICAgIDM0NTAwIHVzZXMKKyAgICAzNDYwMCB1c2VzCisgICAgMzQ3MDAgdXNlcworICAgIDM0ODAwIHVzZXMKKyAgICAzNDkwMCB1c2VzCisgICAgMzUwMDAgdXNlcworICAgIDM1MTAwIHVzZXMKKyAgICAzNTIwMCB1c2VzCisgICAgMzUzMDAgdXNlcworICAgIDM1NDAwIHVzZXMKKyAgICAzNTUwMCB1c2VzCisgICAgMzU2MDAgdXNlcworICAgIDM1NzAwIHVzZXMKKyAgICAzNTgwMCB1c2VzCisgICAgMzU5MDAgdXNlcworICAgIDM2MDAwIHVzZXMKKyAgICAzNjEwMCB1c2VzCisgICAgMzYyMDAgdXNlcworICAgIDM2MzAwIHVzZXMKKyAgICAzNjQwMCB1c2VzCisgICAgMzY1MDAgdXNlcworICAgIDM2NjAwIHVzZXMKKyAgICAzNjcwMCB1c2VzCisgICAgMzY4MDAgdXNlcworICAgIDM2OTAwIHVzZXMKKyAgICAzNzAwMCB1c2VzCisgICAgMzcxMDAgdXNlcworICAgIDM3MjAwIHVzZXMKKyAgICAzNzMwMCB1c2VzCisgICAgMzc0MDAgdXNlcworICAgIDM3NTAwIHVzZXMKKyAgICAzNzYwMCB1c2VzCisgICAgMzc3MDAgdXNlcworICAgIDM3ODAwIHVzZXMKKyAgICAzNzkwMCB1c2VzCisgICAgMzgwMDAgdXNlcworICAgIDM4MTAwIHVzZXMKKyAgICAzODIwMCB1c2VzCisgICAgMzgzMDAgdXNlcworICAgIDM4NDAwIHVzZXMKKyAgICAzODUwMCB1c2VzCisgICAgMzg2MDAgdXNlcworICAgIDM4NzAwIHVzZXMKKyAgICAzODgwMCB1c2VzCisgICAgMzg5MDAgdXNlcworICAgIDM5MDAwIHVzZXMKKyAgICAzOTEwMCB1c2VzCisgICAgMzkyMDAgdXNlcworICAgIDM5MzAwIHVzZXMKKyAgICAzOTQwMCB1c2VzCisgICAgMzk1MDAgdXNlcworICAgIDM5NjAwIHVzZXMKKyAgICAzOTcwMCB1c2VzCisgICAgMzk4MDAgdXNlcworICAgIDM5OTAwIHVzZXMKKyAgICA0MDAwMCB1c2VzCisgICAgNDAxMDAgdXNlcworICAgIDQwMjAwIHVzZXMKKyAgICA0MDMwMCB1c2VzCisgICAgNDA0MDAgdXNlcworICAgIDQwNTAwIHVzZXMKKyAgICA0MDYwMCB1c2VzCisgICAgNDA3MDAgdXNlcworICAgIDQwODAwIHVzZXMKKyAgICA0MDkwMCB1c2VzCisgICAgNDEwMDAgdXNlcworICAgIDQxMTAwIHVzZXMKKyAgICA0MTIwMCB1c2VzCisgICAgNDEzMDAgdXNlcworICAgIDQxNDAwIHVzZXMKKyAgICA0MTUwMCB1c2VzCisgICAgNDE2MDAgdXNlcworICAgIDQxNzAwIHVzZXMKKyAgICA0MTgwMCB1c2VzCisgICAgNDE5MDAgdXNlcworICAgIDQyMDAwIHVzZXMKKyAgICA0MjEwMCB1c2VzCisgICAgNDIyMDAgdXNlcworICAgIDQyMzAwIHVzZXMKKyAgICA0MjQwMCB1c2VzCisgICAgNDI1MDAgdXNlcworICAgIDQyNjAwIHVzZXMKKyAgICA0MjcwMCB1c2VzCisgICAgNDI4MDAgdXNlcworICAgIDQyOTAwIHVzZXMKKyAgICA0MzAwMCB1c2VzCisgICAgNDMxMDAgdXNlcworICAgIDQzMjAwIHVzZXMKKyAgICA0MzMwMCB1c2VzCisgICAgNDM0MDAgdXNlcworICAgIDQzNTAwIHVzZXMKKyAgICA0MzYwMCB1c2VzCisgICAgNDM3MDAgdXNlcworICAgIDQzODAwIHVzZXMKKyAgICA0MzkwMCB1c2VzCisgICAgNDQwMDAgdXNlcworICAgIDQ0MTAwIHVzZXMKKyAgICA0NDIwMCB1c2VzCisgICAgNDQzMDAgdXNlcworICAgIDQ0NDAwIHVzZXMKKyAgICA0NDUwMCB1c2VzCisgICAgNDQ2MDAgdXNlcworICAgIDQ0NzAwIHVzZXMKKyAgICA0NDgwMCB1c2VzCisgICAgNDQ5MDAgdXNlcworICAgIDQ1MDAwIHVzZXMKKyAgICA0NTEwMCB1c2VzCisgICAgNDUyMDAgdXNlcworICAgIDQ1MzAwIHVzZXMKKyAgICA0NTQwMCB1c2VzCisgICAgNDU1MDAgdXNlcworICAgIDQ1NjAwIHVzZXMKKyAgICA0NTcwMCB1c2VzCisgICAgNDU4MDAgdXNlcworICAgIDQ1OTAwIHVzZXMKKyAgICA0NjAwMCB1c2VzCisgICAgNDYxMDAgdXNlcworICAgIDQ2MjAwIHVzZXMKKyAgICA0NjMwMCB1c2VzCisgICAgNDY0MDAgdXNlcworICAgIDQ2NTAwIHVzZXMKKyAgICA0NjYwMCB1c2VzCisgICAgNDY3MDAgdXNlcworICAgIDQ2ODAwIHVzZXMKKyAgICA0NjkwMCB1c2VzCisgICAgNDcwMDAgdXNlcworICAgIDQ3MTAwIHVzZXMKKyAgICA0NzIwMCB1c2VzCisgICAgNDczMDAgdXNlcworICAgIDQ3NDAwIHVzZXMKKyAgICA0NzUwMCB1c2VzCisgICAgNDc2MDAgdXNlcworICAgIDQ3NzAwIHVzZXMKKyAgICA0NzgwMCB1c2VzCisgICAgNDc5MDAgdXNlcworICAgIDQ4MDAwIHVzZXMKKyAgICA0ODEwMCB1c2VzCisgICAgNDgyMDAgdXNlcworICAgIDQ4MzAwIHVzZXMKKyAgICA0ODQwMCB1c2VzCisgICAgNDg1MDAgdXNlcworICAgIDQ4NjAwIHVzZXMKKyAgICA0ODcwMCB1c2VzCisgICAgNDg4MDAgdXNlcworICAgIDQ4OTAwIHVzZXMKKyAgICA0OTAwMCB1c2VzCisgICAgNDkxMDAgdXNlcworICAgIDQ5MjAwIHVzZXMKKyAgICA0OTMwMCB1c2VzCisgICAgNDk0MDAgdXNlcworICAgIDQ5NTAwIHVzZXMKKyAgICA0OTYwMCB1c2VzCisgICAgNDk3MDAgdXNlcworICAgIDQ5ODAwIHVzZXMKKyAgICA0OTkwMCB1c2VzCisgICAgNTAwMDAgdXNlcworICAgIDUwMTAwIHVzZXMKKyAgICA1MDIwMCB1c2VzCisgICAgNTAzMDAgdXNlcworICAgIDUwNDAwIHVzZXMKKyAgICA1MDUwMCB1c2VzCisgICAgNTA2MDAgdXNlcworICAgIDUwNzAwIHVzZXMKKyAgICA1MDgwMCB1c2VzCisgICAgNTA5MDAgdXNlcworICAgIDUxMDAwIHVzZXMKKyAgICA1MTEwMCB1c2VzCisgICAgNTEyMDAgdXNlcworICAgIDUxMzAwIHVzZXMKKyAgICA1MTQwMCB1c2VzCisgICAgNTE1MDAgdXNlcworICAgIDUxNjAwIHVzZXMKKyAgICA1MTcwMCB1c2VzCisgICAgNTE4MDAgdXNlcworICAgIDUxOTAwIHVzZXMKKyAgICA1MjAwMCB1c2VzCisgICAgNTIxMDAgdXNlcworICAgIDUyMjAwIHVzZXMKKyAgICA1MjMwMCB1c2VzCisgICAgNTI0MDAgdXNlcworICAgIDUyNTAwIHVzZXMKKyAgICA1MjYwMCB1c2VzCisgICAgNTI3MDAgdXNlcworICAgIDUyODAwIHVzZXMKKyAgICA1MjkwMCB1c2VzCisgICAgNTMwMDAgdXNlcworICAgIDUzMTAwIHVzZXMKKyAgICA1MzIwMCB1c2VzCisgICAgNTMzMDAgdXNlcworICAgIDUzNDAwIHVzZXMKKyAgICA1MzUwMCB1c2VzCisgICAgNTM2MDAgdXNlcworICAgIDUzNzAwIHVzZXMKKyAgICA1MzgwMCB1c2VzCisgICAgNTM5MDAgdXNlcworICAgIDU0MDAwIHVzZXMKKyAgICA1NDEwMCB1c2VzCisgICAgNTQyMDAgdXNlcworICAgIDU0MzAwIHVzZXMKKyAgICA1NDQwMCB1c2VzCisgICAgNTQ1MDAgdXNlcworICAgIDU0NjAwIHVzZXMKKyAgICA1NDcwMCB1c2VzCisgICAgNTQ4MDAgdXNlcworICAgIDU0OTAwIHVzZXMKKyAgICA1NTAwMCB1c2VzCisgICAgNTUxMDAgdXNlcworICAgIDU1MjAwIHVzZXMKKyAgICA1NTMwMCB1c2VzCisgICAgNTU0MDAgdXNlcworICAgIDU1NTAwIHVzZXMKKyAgICA1NTYwMCB1c2VzCisgICAgNTU3MDAgdXNlcworICAgIDU1ODAwIHVzZXMKKyAgICA1NTkwMCB1c2VzCisgICAgNTYwMDAgdXNlcworICAgIDU2MTAwIHVzZXMKKyAgICA1NjIwMCB1c2VzCisgICAgNTYzMDAgdXNlcworICAgIDU2NDAwIHVzZXMKKyAgICA1NjUwMCB1c2VzCisgICAgNTY2MDAgdXNlcworICAgIDU2NzAwIHVzZXMKKyAgICA1NjgwMCB1c2VzCisgICAgNTY5MDAgdXNlcworICAgIDU3MDAwIHVzZXMKKyAgICA1NzEwMCB1c2VzCisgICAgNTcyMDAgdXNlcworICAgIDU3MzAwIHVzZXMKKyAgICA1NzQwMCB1c2VzCisgICAgNTc1MDAgdXNlcworICAgIDU3NjAwIHVzZXMKKyAgICA1NzcwMCB1c2VzCisgICAgNTc4MDAgdXNlcworICAgIDU3OTAwIHVzZXMKKyAgICA1ODAwMCB1c2VzCisgICAgNTgxMDAgdXNlcworICAgIDU4MjAwIHVzZXMKKyAgICA1ODMwMCB1c2VzCisgICAgNTg0MDAgdXNlcworICAgIDU4NTAwIHVzZXMKKyAgICA1ODYwMCB1c2VzCisgICAgNTg3MDAgdXNlcworICAgIDU4ODAwIHVzZXMKKyAgICA1ODkwMCB1c2VzCisgICAgNTkwMDAgdXNlcworICAgIDU5MTAwIHVzZXMKKyAgICA1OTIwMCB1c2VzCisgICAgNTkzMDAgdXNlcworICAgIDU5NDAwIHVzZXMKKyAgICA1OTUwMCB1c2VzCisgICAgNTk2MDAgdXNlcworICAgIDU5NzAwIHVzZXMKKyAgICA1OTgwMCB1c2VzCisgICAgNTk5MDAgdXNlcworICAgIDYwMDAwIHVzZXMKKyAgICA2MDEwMCB1c2VzCisgICAgNjAyMDAgdXNlcworICAgIDYwMzAwIHVzZXMKKyAgICA2MDQwMCB1c2VzCisgICAgNjA1MDAgdXNlcworICAgIDYwNjAwIHVzZXMKKyAgICA2MDcwMCB1c2VzCisgICAgNjA4MDAgdXNlcworICAgIDYwOTAwIHVzZXMKKyAgICA2MTAwMCB1c2VzCisgICAgNjExMDAgdXNlcworICAgIDYxMjAwIHVzZXMKKyAgICA2MTMwMCB1c2VzCisgICAgNjE0MDAgdXNlcworICAgIDYxNTAwIHVzZXMKKyAgICA2MTYwMCB1c2VzCisgICAgNjE3MDAgdXNlcworICAgIDYxODAwIHVzZXMKKyAgICA2MTkwMCB1c2VzCisgICAgNjIwMDAgdXNlcworICAgIDYyMTAwIHVzZXMKKyAgICA2MjIwMCB1c2VzCisgICAgNjIzMDAgdXNlcworICAgIDYyNDAwIHVzZXMKKyAgICA2MjUwMCB1c2VzCisgICAgNjI2MDAgdXNlcworICAgIDYyNzAwIHVzZXMKKyAgICA2MjgwMCB1c2VzCisgICAgNjI5MDAgdXNlcworICAgIDYzMDAwIHVzZXMKKyAgICA2MzEwMCB1c2VzCisgICAgNjMyMDAgdXNlcworICAgIDYzMzAwIHVzZXMKKyAgICA2MzQwMCB1c2VzCisgICAgNjM1MDAgdXNlcworICAgIDYzNjAwIHVzZXMKKyAgICA2MzcwMCB1c2VzCisgICAgNjM4MDAgdXNlcworICAgIDYzOTAwIHVzZXMKKyAgICA2NDAwMCB1c2VzCisgICAgNjQxMDAgdXNlcworICAgIDY0MjAwIHVzZXMKKyAgICA2NDMwMCB1c2VzCisgICAgNjQ0MDAgdXNlcworICAgIDY0NTAwIHVzZXMKKyAgICA2NDYwMCB1c2VzCisgICAgNjQ3MDAgdXNlcworICAgIDY0ODAwIHVzZXMKKyAgICA2NDkwMCB1c2VzCisgICAgNjUwMDAgdXNlcworICAgIDY1MTAwIHVzZXMKKyAgICA2NTIwMCB1c2VzCisgICAgNjUzMDAgdXNlcworICAgIDY1NDAwIHVzZXMKKyAgICA2NTUwMCB1c2VzCisgICAgNjU2MDAgdXNlcworICAgIDY1NzAwIHVzZXMKKyAgICA2NTgwMCB1c2VzCisgICAgNjU5MDAgdXNlcworICAgIDY2MDAwIHVzZXMKKyAgICA2NjEwMCB1c2VzCisgICAgNjYyMDAgdXNlcworICAgIDY2MzAwIHVzZXMKKyAgICA2NjQwMCB1c2VzCisgICAgNjY1MDAgdXNlcworICAgIDY2NjAwIHVzZXMKKyAgICA2NjcwMCB1c2VzCisgICAgNjY4MDAgdXNlcworICAgIDY2OTAwIHVzZXMKKyAgICA2NzAwMCB1c2VzCisgICAgNjcxMDAgdXNlcworICAgIDY3MjAwIHVzZXMKKyAgICA2NzMwMCB1c2VzCisgICAgNjc0MDAgdXNlcworICAgIDY3NTAwIHVzZXMKKyAgICA2NzYwMCB1c2VzCisgICAgNjc3MDAgdXNlcworICAgIDY3ODAwIHVzZXMKKyAgICA2NzkwMCB1c2VzCisgICAgNjgwMDAgdXNlcworICAgIDY4MTAwIHVzZXMKKyAgICA2ODIwMCB1c2VzCisgICAgNjgzMDAgdXNlcworICAgIDY4NDAwIHVzZXMKKyAgICA2ODUwMCB1c2VzCisgICAgNjg2MDAgdXNlcworICAgIDY4NzAwIHVzZXMKKyAgICA2ODgwMCB1c2VzCisgICAgNjg5MDAgdXNlcworICAgIDY5MDAwIHVzZXMKKyAgICA2OTEwMCB1c2VzCisgICAgNjkyMDAgdXNlcworICAgIDY5MzAwIHVzZXMKKyAgICA2OTQwMCB1c2VzCisgICAgNjk1MDAgdXNlcworICAgIDY5NjAwIHVzZXMKKyAgICA2OTcwMCB1c2VzCisgICAgNjk4MDAgdXNlcworICAgIDY5OTAwIHVzZXMKKyAgICA3MDAwMCB1c2VzCisgICAgNzAxMDAgdXNlcworICAgIDcwMjAwIHVzZXMKKyAgICA3MDMwMCB1c2VzCisgICAgNzA0MDAgdXNlcworICAgIDcwNTAwIHVzZXMKKyAgICA3MDYwMCB1c2VzCisgICAgNzA3MDAgdXNlcworICAgIDcwODAwIHVzZXMKKyAgICA3MDkwMCB1c2VzCisgICAgNzEwMDAgdXNlcworICAgIDcxMTAwIHVzZXMKKyAgICA3MTIwMCB1c2VzCisgICAgNzEzMDAgdXNlcworICAgIDcxNDAwIHVzZXMKKyAgICA3MTUwMCB1c2VzCisgICAgNzE2MDAgdXNlcworICAgIDcxNzAwIHVzZXMKKyAgICA3MTgwMCB1c2VzCisgICAgNzE5MDAgdXNlcworICAgIDcyMDAwIHVzZXMKKyAgICA3MjEwMCB1c2VzCisgICAgNzIyMDAgdXNlcworICAgIDcyMzAwIHVzZXMKKyAgICA3MjQwMCB1c2VzCisgICAgNzI1MDAgdXNlcworICAgIDcyNjAwIHVzZXMKKyAgICA3MjcwMCB1c2VzCisgICAgNzI4MDAgdXNlcworICAgIDcyOTAwIHVzZXMKKyAgICA3MzAwMCB1c2VzCisgICAgNzMxMDAgdXNlcworICAgIDczMjAwIHVzZXMKKyAgICA3MzMwMCB1c2VzCisgICAgNzM0MDAgdXNlcworICAgIDczNTAwIHVzZXMKKyAgICA3MzYwMCB1c2VzCisgICAgNzM3MDAgdXNlcworICAgIDczODAwIHVzZXMKKyAgICA3MzkwMCB1c2VzCisgICAgNzQwMDAgdXNlcworICAgIDc0MTAwIHVzZXMKKyAgICA3NDIwMCB1c2VzCisgICAgNzQzMDAgdXNlcworICAgIDc0NDAwIHVzZXMKKyAgICA3NDUwMCB1c2VzCisgICAgNzQ2MDAgdXNlcworICAgIDc0NzAwIHVzZXMKKyAgICA3NDgwMCB1c2VzCisgICAgNzQ5MDAgdXNlcworICAgIDc1MDAwIHVzZXMKKyAgICA3NTEwMCB1c2VzCisgICAgNzUyMDAgdXNlcworICAgIDc1MzAwIHVzZXMKKyAgICA3NTQwMCB1c2VzCisgICAgNzU1MDAgdXNlcworICAgIDc1NjAwIHVzZXMKKyAgICA3NTcwMCB1c2VzCisgICAgNzU4MDAgdXNlcworICAgIDc1OTAwIHVzZXMKKyAgICA3NjAwMCB1c2VzCisgICAgNzYxMDAgdXNlcworICAgIDc2MjAwIHVzZXMKKyAgICA3NjMwMCB1c2VzCisgICAgNzY0MDAgdXNlcworICAgIDc2NTAwIHVzZXMKKyAgICA3NjYwMCB1c2VzCisgICAgNzY3MDAgdXNlcworICAgIDc2ODAwIHVzZXMKKyAgICA3NjkwMCB1c2VzCisgICAgNzcwMDAgdXNlcworICAgIDc3MTAwIHVzZXMKKyAgICA3NzIwMCB1c2VzCisgICAgNzczMDAgdXNlcworICAgIDc3NDAwIHVzZXMKKyAgICA3NzUwMCB1c2VzCisgICAgNzc2MDAgdXNlcworICAgIDc3NzAwIHVzZXMKKyAgICA3NzgwMCB1c2VzCisgICAgNzc5MDAgdXNlcworICAgIDc4MDAwIHVzZXMKKyAgICA3ODEwMCB1c2VzCisgICAgNzgyMDAgdXNlcworICAgIDc4MzAwIHVzZXMKKyAgICA3ODQwMCB1c2VzCisgICAgNzg1MDAgdXNlcworICAgIDc4NjAwIHVzZXMKKyAgICA3ODcwMCB1c2VzCisgICAgNzg4MDAgdXNlcworICAgIDc4OTAwIHVzZXMKKyAgICA3OTAwMCB1c2VzCisgICAgNzkxMDAgdXNlcworICAgIDc5MjAwIHVzZXMKKyAgICA3OTMwMCB1c2VzCisgICAgNzk0MDAgdXNlcworICAgIDc5NTAwIHVzZXMKKyAgICA3OTYwMCB1c2VzCisgICAgNzk3MDAgdXNlcworICAgIDc5ODAwIHVzZXMKKyAgICA3OTkwMCB1c2VzCisgICAgODAwMDAgdXNlcworICAgIDgwMTAwIHVzZXMKKyAgICA4MDIwMCB1c2VzCisgICAgODAzMDAgdXNlcworICAgIDgwNDAwIHVzZXMKKyAgICA4MDUwMCB1c2VzCisgICAgODA2MDAgdXNlcworICAgIDgwNzAwIHVzZXMKKyAgICA4MDgwMCB1c2VzCisgICAgODA5MDAgdXNlcworICAgIDgxMDAwIHVzZXMKKyAgICA4MTEwMCB1c2VzCisgICAgODEyMDAgdXNlcworICAgIDgxMzAwIHVzZXMKKyAgICA4MTQwMCB1c2VzCisgICAgODE1MDAgdXNlcworICAgIDgxNjAwIHVzZXMKKyAgICA4MTcwMCB1c2VzCisgICAgODE4MDAgdXNlcworICAgIDgxOTAwIHVzZXMKKyAgICA4MjAwMCB1c2VzCisgICAgODIxMDAgdXNlcworICAgIDgyMjAwIHVzZXMKKyAgICA4MjMwMCB1c2VzCisgICAgODI0MDAgdXNlcworICAgIDgyNTAwIHVzZXMKKyAgICA4MjYwMCB1c2VzCisgICAgODI3MDAgdXNlcworICAgIDgyODAwIHVzZXMKKyAgICA4MjkwMCB1c2VzCisgICAgODMwMDAgdXNlcworICAgIDgzMTAwIHVzZXMKKyAgICA4MzIwMCB1c2VzCisgICAgODMzMDAgdXNlcworICAgIDgzNDAwIHVzZXMKKyAgICA4MzUwMCB1c2VzCisgICAgODM2MDAgdXNlcworICAgIDgzNzAwIHVzZXMKKyAgICA4MzgwMCB1c2VzCisgICAgODM5MDAgdXNlcworICAgIDg0MDAwIHVzZXMKKyAgICA4NDEwMCB1c2VzCisgICAgODQyMDAgdXNlcworICAgIDg0MzAwIHVzZXMKKyAgICA4NDQwMCB1c2VzCisgICAgODQ1MDAgdXNlcworICAgIDg0NjAwIHVzZXMKKyAgICA4NDcwMCB1c2VzCisgICAgODQ4MDAgdXNlcworICAgIDg0OTAwIHVzZXMKKyAgICA4NTAwMCB1c2VzCisgICAgODUxMDAgdXNlcworICAgIDg1MjAwIHVzZXMKKyAgICA4NTMwMCB1c2VzCisgICAgODU0MDAgdXNlcworICAgIDg1NTAwIHVzZXMKKyAgICA4NTYwMCB1c2VzCisgICAgODU3MDAgdXNlcworICAgIDg1ODAwIHVzZXMKKyAgICA4NTkwMCB1c2VzCisgICAgODYwMDAgdXNlcworICAgIDg2MTAwIHVzZXMKKyAgICA4NjIwMCB1c2VzCisgICAgODYzMDAgdXNlcworICAgIDg2NDAwIHVzZXMKKyAgICA4NjUwMCB1c2VzCisgICAgODY2MDAgdXNlcworICAgIDg2NzAwIHVzZXMKKyAgICA4NjgwMCB1c2VzCisgICAgODY5MDAgdXNlcworICAgIDg3MDAwIHVzZXMKKyAgICA4NzEwMCB1c2VzCisgICAgODcyMDAgdXNlcworICAgIDg3MzAwIHVzZXMKKyAgICA4NzQwMCB1c2VzCisgICAgODc1MDAgdXNlcworICAgIDg3NjAwIHVzZXMKKyAgICA4NzcwMCB1c2VzCisgICAgODc4MDAgdXNlcworICAgIDg3OTAwIHVzZXMKKyAgICA4ODAwMCB1c2VzCisgICAgODgxMDAgdXNlcworICAgIDg4MjAwIHVzZXMKKyAgICA4ODMwMCB1c2VzCisgICAgODg0MDAgdXNlcworICAgIDg4NTAwIHVzZXMKKyAgICA4ODYwMCB1c2VzCisgICAgODg3MDAgdXNlcworICAgIDg4ODAwIHVzZXMKKyAgICA4ODkwMCB1c2VzCisgICAgODkwMDAgdXNlcworICAgIDg5MTAwIHVzZXMKKyAgICA4OTIwMCB1c2VzCisgICAgODkzMDAgdXNlcworICAgIDg5NDAwIHVzZXMKKyAgICA4OTUwMCB1c2VzCisgICAgODk2MDAgdXNlcworICAgIDg5NzAwIHVzZXMKKyAgICA4OTgwMCB1c2VzCisgICAgODk5MDAgdXNlcworICAgIDkwMDAwIHVzZXMKKyAgICA5MDEwMCB1c2VzCisgICAgOTAyMDAgdXNlcworICAgIDkwMzAwIHVzZXMKKyAgICA5MDQwMCB1c2VzCisgICAgOTA1MDAgdXNlcworICAgIDkwNjAwIHVzZXMKKyAgICA5MDcwMCB1c2VzCisgICAgOTA4MDAgdXNlcworICAgIDkwOTAwIHVzZXMKKyAgICA5MTAwMCB1c2VzCisgICAgOTExMDAgdXNlcworICAgIDkxMjAwIHVzZXMKKyAgICA5MTMwMCB1c2VzCisgICAgOTE0MDAgdXNlcworICAgIDkxNTAwIHVzZXMKKyAgICA5MTYwMCB1c2VzCisgICAgOTE3MDAgdXNlcworICAgIDkxODAwIHVzZXMKKyAgICA5MTkwMCB1c2VzCisgICAgOTIwMDAgdXNlcworICAgIDkyMTAwIHVzZXMKKyAgICA5MjIwMCB1c2VzCisgICAgOTIzMDAgdXNlcworICAgIDkyNDAwIHVzZXMKKyAgICA5MjUwMCB1c2VzCisgICAgOTI2MDAgdXNlcworICAgIDkyNzAwIHVzZXMKKyAgICA5MjgwMCB1c2VzCisgICAgOTI5MDAgdXNlcworICAgIDkzMDAwIHVzZXMKKyAgICA5MzEwMCB1c2VzCisgICAgOTMyMDAgdXNlcworICAgIDkzMzAwIHVzZXMKKyAgICA5MzQwMCB1c2VzCisgICAgOTM1MDAgdXNlcworICAgIDkzNjAwIHVzZXMKKyAgICA5MzcwMCB1c2VzCisgICAgOTM4MDAgdXNlcworICAgIDkzOTAwIHVzZXMKKyAgICA5NDAwMCB1c2VzCisgICAgOTQxMDAgdXNlcworICAgIDk0MjAwIHVzZXMKKyAgICA5NDMwMCB1c2VzCisgICAgOTQ0MDAgdXNlcworICAgIDk0NTAwIHVzZXMKKyAgICA5NDYwMCB1c2VzCisgICAgOTQ3MDAgdXNlcworICAgIDk0ODAwIHVzZXMKKyAgICA5NDkwMCB1c2VzCisgICAgOTUwMDAgdXNlcworICAgIDk1MTAwIHVzZXMKKyAgICA5NTIwMCB1c2VzCisgICAgOTUzMDAgdXNlcworICAgIDk1NDAwIHVzZXMKKyAgICA5NTUwMCB1c2VzCisgICAgOTU2MDAgdXNlcworICAgIDk1NzAwIHVzZXMKKyAgICA5NTgwMCB1c2VzCisgICAgOTU5MDAgdXNlcworICAgIDk2MDAwIHVzZXMKKyAgICA5NjEwMCB1c2VzCisgICAgOTYyMDAgdXNlcworICAgIDk2MzAwIHVzZXMKKyAgICA5NjQwMCB1c2VzCisgICAgOTY1MDAgdXNlcworICAgIDk2NjAwIHVzZXMKKyAgICA5NjcwMCB1c2VzCisgICAgOTY4MDAgdXNlcworICAgIDk2OTAwIHVzZXMKKyAgICA5NzAwMCB1c2VzCisgICAgOTcxMDAgdXNlcworICAgIDk3MjAwIHVzZXMKKyAgICA5NzMwMCB1c2VzCisgICAgOTc0MDAgdXNlcworICAgIDk3NTAwIHVzZXMKKyAgICA5NzYwMCB1c2VzCisgICAgOTc3MDAgdXNlcworICAgIDk3ODAwIHVzZXMKKyAgICA5NzkwMCB1c2VzCisgICAgOTgwMDAgdXNlcworICAgIDk4MTAwIHVzZXMKKyAgICA5ODIwMCB1c2VzCisgICAgOTgzMDAgdXNlcworICAgIDk4NDAwIHVzZXMKKyAgICA5ODUwMCB1c2VzCisgICAgOTg2MDAgdXNlcworICAgIDk4NzAwIHVzZXMKKyAgICA5ODgwMCB1c2VzCisgICAgOTg5MDAgdXNlcworICAgIDk5MDAwIHVzZXMKKyAgICA5OTEwMCB1c2VzCisgICAgOTkyMDAgdXNlcworICAgIDk5MzAwIHVzZXMKKyAgICA5OTQwMCB1c2VzCisgICAgOTk1MDAgdXNlcworICAgIDk5NjAwIHVzZXMKKyAgICA5OTcwMCB1c2VzCisgICAgOTk4MDAgdXNlcworICAgIDk5OTAwIHVzZXMKKyAgICAxMDAwMDAgdXNlcworICAgIDEwMDEwMCB1c2VzCisgICAgMTAwMjAwIHVzZXMKKyAgICAxMDAzMDAgdXNlcworICAgIDEwMDQwMCB1c2VzCisgICAgMTAwNTAwIHVzZXMKKyAgICAxMDA2MDAgdXNlcworICAgIDEwMDcwMCB1c2VzCisgICAgMTAwODAwIHVzZXMKKyAgICAxMDA5MDAgdXNlcworICAgIDEwMTAwMCB1c2VzCisgICAgMTAxMTAwIHVzZXMKKyAgICAxMDEyMDAgdXNlcworICAgIDEwMTMwMCB1c2VzCisgICAgMTAxNDAwIHVzZXMKKyAgICAxMDE1MDAgdXNlcworICAgIDEwMTYwMCB1c2VzCisgICAgMTAxNzAwIHVzZXMKKyAgICAxMDE4MDAgdXNlcworICAgIDEwMTkwMCB1c2VzCisgICAgMTAyMDAwIHVzZXMKKyAgICAxMDIxMDAgdXNlcworICAgIDEwMjIwMCB1c2VzCisgICAgMTAyMzAwIHVzZXMKKyAgICAxMDI0MDAgdXNlcworICAgIDEwMjUwMCB1c2VzCisgICAgMTAyNjAwIHVzZXMKKyAgICAxMDI3MDAgdXNlcworICAgIDEwMjgwMCB1c2VzCisgICAgMTAyOTAwIHVzZXMKKyAgICAxMDMwMDAgdXNlcworICAgIDEwMzEwMCB1c2VzCisgICAgMTAzMjAwIHVzZXMKKyAgICAxMDMzMDAgdXNlcworICAgIDEwMzQwMCB1c2VzCisgICAgMTAzNTAwIHVzZXMKKyAgICAxMDM2MDAgdXNlcworICAgIDEwMzcwMCB1c2VzCisgICAgMTAzODAwIHVzZXMKKyAgICAxMDM5MDAgdXNlcworICAgIDEwNDAwMCB1c2VzCisgICAgMTA0MTAwIHVzZXMKKyAgICAxMDQyMDAgdXNlcworICAgIDEwNDMwMCB1c2VzCisgICAgMTA0NDAwIHVzZXMKKyAgICAxMDQ1MDAgdXNlcworICAgIDEwNDYwMCB1c2VzCisgICAgMTA0NzAwIHVzZXMKKyAgICAxMDQ4MDAgdXNlcworICAgIDEwNDkwMCB1c2VzCisgICAgMTA1MDAwIHVzZXMKKyAgICAxMDUxMDAgdXNlcworICAgIDEwNTIwMCB1c2VzCisgICAgMTA1MzAwIHVzZXMKKyAgICAxMDU0MDAgdXNlcworICAgIDEwNTUwMCB1c2VzCisgICAgMTA1NjAwIHVzZXMKKyAgICAxMDU3MDAgdXNlcworICAgIDEwNTgwMCB1c2VzCisgICAgMTA1OTAwIHVzZXMKKyAgICAxMDYwMDAgdXNlcworICAgIDEwNjEwMCB1c2VzCisgICAgMTA2MjAwIHVzZXMKKyAgICAxMDYzMDAgdXNlcworICAgIDEwNjQwMCB1c2VzCisgICAgMTA2NTAwIHVzZXMKKyAgICAxMDY2MDAgdXNlcworICAgIDEwNjcwMCB1c2VzCisgICAgMTA2ODAwIHVzZXMKKyAgICAxMDY5MDAgdXNlcworICAgIDEwNzAwMCB1c2VzCisgICAgMTA3MTAwIHVzZXMKKyAgICAxMDcyMDAgdXNlcworICAgIDEwNzMwMCB1c2VzCisgICAgMTA3NDAwIHVzZXMKKyAgICAxMDc1MDAgdXNlcworICAgIDEwNzYwMCB1c2VzCisgICAgMTA3NzAwIHVzZXMKKyAgICAxMDc4MDAgdXNlcworICAgIDEwNzkwMCB1c2VzCisgICAgMTA4MDAwIHVzZXMKKyAgICAxMDgxMDAgdXNlcworICAgIDEwODIwMCB1c2VzCisgICAgMTA4MzAwIHVzZXMKKyAgICAxMDg0MDAgdXNlcworICAgIDEwODUwMCB1c2VzCisgICAgMTA4NjAwIHVzZXMKKyAgICAxMDg3MDAgdXNlcworICAgIDEwODgwMCB1c2VzCisgICAgMTA4OTAwIHVzZXMKKyAgICAxMDkwMDAgdXNlcworICAgIDEwOTEwMCB1c2VzCisgICAgMTA5MjAwIHVzZXMKKyAgICAxMDkzMDAgdXNlcworICAgIDEwOTQwMCB1c2VzCisgICAgMTA5NTAwIHVzZXMKKyAgICAxMDk2MDAgdXNlcworICAgIDEwOTcwMCB1c2VzCisgICAgMTA5ODAwIHVzZXMKKyAgICAxMDk5MDAgdXNlcworICAgIDExMDAwMCB1c2VzCisgICAgMTEwMTAwIHVzZXMKKyAgICAxMTAyMDAgdXNlcworICAgIDExMDMwMCB1c2VzCisgICAgMTEwNDAwIHVzZXMKKyAgICAxMTA1MDAgdXNlcworICAgIDExMDYwMCB1c2VzCisgICAgMTEwNzAwIHVzZXMKKyAgICAxMTA4MDAgdXNlcworICAgIDExMDkwMCB1c2VzCisgICAgMTExMDAwIHVzZXMKKyAgICAxMTExMDAgdXNlcworICAgIDExMTIwMCB1c2VzCisgICAgMTExMzAwIHVzZXMKKyAgICAxMTE0MDAgdXNlcworICAgIDExMTUwMCB1c2VzCisgICAgMTExNjAwIHVzZXMKKyAgICAxMTE3MDAgdXNlcworICAgIDExMTgwMCB1c2VzCisgICAgMTExOTAwIHVzZXMKKyAgICAxMTIwMDAgdXNlcworICAgIDExMjEwMCB1c2VzCisgICAgMTEyMjAwIHVzZXMKKyAgICAxMTIzMDAgdXNlcworICAgIDExMjQwMCB1c2VzCisgICAgMTEyNTAwIHVzZXMKKyAgICAxMTI2MDAgdXNlcworICAgIDExMjcwMCB1c2VzCisgICAgMTEyODAwIHVzZXMKKyAgICAxMTI5MDAgdXNlcworICAgIDExMzAwMCB1c2VzCisgICAgMTEzMTAwIHVzZXMKKyAgICAxMTMyMDAgdXNlcworICAgIDExMzMwMCB1c2VzCisgICAgMTEzNDAwIHVzZXMKKyAgICAxMTM1MDAgdXNlcworICAgIDExMzYwMCB1c2VzCisgICAgMTEzNzAwIHVzZXMKKyAgICAxMTM4MDAgdXNlcworICAgIDExMzkwMCB1c2VzCisgICAgMTE0MDAwIHVzZXMKKyAgICAxMTQxMDAgdXNlcworICAgIDExNDIwMCB1c2VzCisgICAgMTE0MzAwIHVzZXMKKyAgICAxMTQ0MDAgdXNlcworICAgIDExNDUwMCB1c2VzCisgICAgMTE0NjAwIHVzZXMKKyAgICAxMTQ3MDAgdXNlcworICAgIDExNDgwMCB1c2VzCisgICAgMTE0OTAwIHVzZXMKKyAgICAxMTUwMDAgdXNlcworICAgIDExNTEwMCB1c2VzCisgICAgMTE1MjAwIHVzZXMKKyAgICAxMTUzMDAgdXNlcworICAgIDExNTQwMCB1c2VzCisgICAgMTE1NTAwIHVzZXMKKyAgICAxMTU2MDAgdXNlcworICAgIDExNTcwMCB1c2VzCisgICAgMTE1ODAwIHVzZXMKKyAgICAxMTU5MDAgdXNlcworICAgIDExNjAwMCB1c2VzCisgICAgMTE2MTAwIHVzZXMKKyAgICAxMTYyMDAgdXNlcworICAgIDExNjMwMCB1c2VzCisgICAgMTE2NDAwIHVzZXMKKyAgICAxMTY1MDAgdXNlcworICAgIDExNjYwMCB1c2VzCisgICAgMTE2NzAwIHVzZXMKKyAgICAxMTY4MDAgdXNlcworICAgIDExNjkwMCB1c2VzCisgICAgMTE3MDAwIHVzZXMKKyAgICAxMTcxMDAgdXNlcworICAgIDExNzIwMCB1c2VzCisgICAgMTE3MzAwIHVzZXMKKyAgICAxMTc0MDAgdXNlcworICAgIDExNzUwMCB1c2VzCisgICAgMTE3NjAwIHVzZXMKKyAgICAxMTc3MDAgdXNlcworICAgIDExNzgwMCB1c2VzCisgICAgMTE3OTAwIHVzZXMKKyAgICAxMTgwMDAgdXNlcworICAgIDExODEwMCB1c2VzCisgICAgMTE4MjAwIHVzZXMKKyAgICAxMTgzMDAgdXNlcworICAgIDExODQwMCB1c2VzCisgICAgMTE4NTAwIHVzZXMKKyAgICAxMTg2MDAgdXNlcworICAgIDExODcwMCB1c2VzCisgICAgMTE4ODAwIHVzZXMKKyAgICAxMTg5MDAgdXNlcworICAgIDExOTAwMCB1c2VzCisgICAgMTE5MTAwIHVzZXMKKyAgICAxMTkyMDAgdXNlcworICAgIDExOTMwMCB1c2VzCisgICAgMTE5NDAwIHVzZXMKKyAgICAxMTk1MDAgdXNlcworICAgIDExOTYwMCB1c2VzCisgICAgMTE5NzAwIHVzZXMKKyAgICAxMTk4MDAgdXNlcworICAgIDExOTkwMCB1c2VzCisgICAgMTIwMDAwIHVzZXMKKyAgICAxMjAxMDAgdXNlcworICAgIDEyMDIwMCB1c2VzCisgICAgMTIwMzAwIHVzZXMKKyAgICAxMjA0MDAgdXNlcworICAgIDEyMDUwMCB1c2VzCisgICAgMTIwNjAwIHVzZXMKKyAgICAxMjA3MDAgdXNlcworICAgIDEyMDgwMCB1c2VzCisgICAgMTIwOTAwIHVzZXMKKyAgICAxMjEwMDAgdXNlcworICAgIDEyMTEwMCB1c2VzCisgICAgMTIxMjAwIHVzZXMKKyAgICAxMjEzMDAgdXNlcworICAgIDEyMTQwMCB1c2VzCisgICAgMTIxNTAwIHVzZXMKKyAgICAxMjE2MDAgdXNlcworICAgIDEyMTcwMCB1c2VzCisgICAgMTIxODAwIHVzZXMKK1JlYWRpbmcgInNreTEzMF9mZF9zY19oZF9fY2xrZGx5YnVmNHMxNV8yIi4KK1JlYWRpbmcgInNreTEzMF9mZF9zY19oZF9fbXV4Ml8xIi4KK1JlYWRpbmcgInNreTEzMF9mZF9zY19oZF9fbXV4Ml80Ii4KK1JlYWRpbmcgImNsa19za2V3X2FkanVzdCIuCisgICAgMTAwIHVzZXMKKyAgICAyMDAgdXNlcworICAgIDMwMCB1c2VzCisgICAgNDAwIHVzZXMKKyAgICA1MDAgdXNlcworICAgIDYwMCB1c2VzCisgICAgNzAwIHVzZXMKK1JlYWRpbmcgInNreTEzMF9lZl9zY19oZF9fZmFrZWRpb2RlXzIiLgorUmVhZGluZyAic2t5MTMwX2ZkX3NjX2hkX19idWZidWZfMTYiLgorUmVhZGluZyAid2JfaG9zdCIuCisgICAgMTAwIHVzZXMKKyAgICAyMDAgdXNlcworICAgIDMwMCB1c2VzCisgICAgNDAwIHVzZXMKKyAgICA1MDAgdXNlcworICAgIDYwMCB1c2VzCisgICAgNzAwIHVzZXMKKyAgICA4MDAgdXNlcworICAgIDkwMCB1c2VzCisgICAgMTAwMCB1c2VzCisgICAgMTEwMCB1c2VzCisgICAgMTIwMCB1c2VzCisgICAgMTMwMCB1c2VzCisgICAgMTQwMCB1c2VzCisgICAgMTUwMCB1c2VzCisgICAgMTYwMCB1c2VzCisgICAgMTcwMCB1c2VzCisgICAgMTgwMCB1c2VzCisgICAgMTkwMCB1c2VzCisgICAgMjAwMCB1c2VzCisgICAgMjEwMCB1c2VzCisgICAgMjIwMCB1c2VzCisgICAgMjMwMCB1c2VzCisgICAgMjQwMCB1c2VzCisgICAgMjUwMCB1c2VzCisgICAgMjYwMCB1c2VzCisgICAgMjcwMCB1c2VzCisgICAgMjgwMCB1c2VzCisgICAgMjkwMCB1c2VzCisgICAgMzAwMCB1c2VzCisgICAgMzEwMCB1c2VzCisgICAgMzIwMCB1c2VzCisgICAgMzMwMCB1c2VzCisgICAgMzQwMCB1c2VzCisgICAgMzUwMCB1c2VzCisgICAgMzYwMCB1c2VzCisgICAgMzcwMCB1c2VzCisgICAgMzgwMCB1c2VzCisgICAgMzkwMCB1c2VzCisgICAgNDAwMCB1c2VzCisgICAgNDEwMCB1c2VzCisgICAgNDIwMCB1c2VzCisgICAgNDMwMCB1c2VzCisgICAgNDQwMCB1c2VzCisgICAgNDUwMCB1c2VzCisgICAgNDYwMCB1c2VzCisgICAgNDcwMCB1c2VzCisgICAgNDgwMCB1c2VzCisgICAgNDkwMCB1c2VzCisgICAgNTAwMCB1c2VzCisgICAgNTEwMCB1c2VzCisgICAgNTIwMCB1c2VzCisgICAgNTMwMCB1c2VzCisgICAgNTQwMCB1c2VzCisgICAgNTUwMCB1c2VzCisgICAgNTYwMCB1c2VzCisgICAgNTcwMCB1c2VzCisgICAgNTgwMCB1c2VzCisgICAgNTkwMCB1c2VzCisgICAgNjAwMCB1c2VzCisgICAgNjEwMCB1c2VzCisgICAgNjIwMCB1c2VzCisgICAgNjMwMCB1c2VzCisgICAgNjQwMCB1c2VzCisgICAgNjUwMCB1c2VzCisgICAgNjYwMCB1c2VzCisgICAgNjcwMCB1c2VzCisgICAgNjgwMCB1c2VzCisgICAgNjkwMCB1c2VzCisgICAgNzAwMCB1c2VzCisgICAgNzEwMCB1c2VzCisgICAgNzIwMCB1c2VzCisgICAgNzMwMCB1c2VzCisgICAgNzQwMCB1c2VzCisgICAgNzUwMCB1c2VzCisgICAgNzYwMCB1c2VzCisgICAgNzcwMCB1c2VzCisgICAgNzgwMCB1c2VzCisgICAgNzkwMCB1c2VzCisgICAgODAwMCB1c2VzCisgICAgODEwMCB1c2VzCisgICAgODIwMCB1c2VzCisgICAgODMwMCB1c2VzCisgICAgODQwMCB1c2VzCisgICAgODUwMCB1c2VzCisgICAgODYwMCB1c2VzCisgICAgODcwMCB1c2VzCisgICAgODgwMCB1c2VzCisgICAgODkwMCB1c2VzCisgICAgOTAwMCB1c2VzCisgICAgOTEwMCB1c2VzCisgICAgOTIwMCB1c2VzCisgICAgOTMwMCB1c2VzCisgICAgOTQwMCB1c2VzCisgICAgOTUwMCB1c2VzCisgICAgOTYwMCB1c2VzCisgICAgOTcwMCB1c2VzCisgICAgOTgwMCB1c2VzCisgICAgOTkwMCB1c2VzCisgICAgMTAwMDAgdXNlcworICAgIDEwMTAwIHVzZXMKKyAgICAxMDIwMCB1c2VzCisgICAgMTAzMDAgdXNlcworICAgIDEwNDAwIHVzZXMKKyAgICAxMDUwMCB1c2VzCisgICAgMTA2MDAgdXNlcworICAgIDEwNzAwIHVzZXMKKyAgICAxMDgwMCB1c2VzCisgICAgMTA5MDAgdXNlcworICAgIDExMDAwIHVzZXMKKyAgICAxMTEwMCB1c2VzCisgICAgMTEyMDAgdXNlcworICAgIDExMzAwIHVzZXMKKyAgICAxMTQwMCB1c2VzCisgICAgMTE1MDAgdXNlcworICAgIDExNjAwIHVzZXMKKyAgICAxMTcwMCB1c2VzCisgICAgMTE4MDAgdXNlcworICAgIDExOTAwIHVzZXMKKyAgICAxMjAwMCB1c2VzCisgICAgMTIxMDAgdXNlcworUmVhZGluZyAic2NyMV9pbnRmIi4KKyAgICAxMDAgdXNlcworICAgIDIwMCB1c2VzCisgICAgMzAwIHVzZXMKKyAgICA0MDAgdXNlcworICAgIDUwMCB1c2VzCisgICAgNjAwIHVzZXMKKyAgICA3MDAgdXNlcworICAgIDgwMCB1c2VzCisgICAgOTAwIHVzZXMKKyAgICAxMDAwIHVzZXMKKyAgICAxMTAwIHVzZXMKKyAgICAxMjAwIHVzZXMKKyAgICAxMzAwIHVzZXMKKyAgICAxNDAwIHVzZXMKKyAgICAxNTAwIHVzZXMKKyAgICAxNjAwIHVzZXMKKyAgICAxNzAwIHVzZXMKKyAgICAxODAwIHVzZXMKKyAgICAxOTAwIHVzZXMKKyAgICAyMDAwIHVzZXMKKyAgICAyMTAwIHVzZXMKKyAgICAyMjAwIHVzZXMKKyAgICAyMzAwIHVzZXMKKyAgICAyNDAwIHVzZXMKKyAgICAyNTAwIHVzZXMKKyAgICAyNjAwIHVzZXMKKyAgICAyNzAwIHVzZXMKKyAgICAyODAwIHVzZXMKKyAgICAyOTAwIHVzZXMKKyAgICAzMDAwIHVzZXMKKyAgICAzMTAwIHVzZXMKKyAgICAzMjAwIHVzZXMKKyAgICAzMzAwIHVzZXMKKyAgICAzNDAwIHVzZXMKKyAgICAzNTAwIHVzZXMKKyAgICAzNjAwIHVzZXMKKyAgICAzNzAwIHVzZXMKKyAgICAzODAwIHVzZXMKKyAgICAzOTAwIHVzZXMKKyAgICA0MDAwIHVzZXMKKyAgICA0MTAwIHVzZXMKKyAgICA0MjAwIHVzZXMKKyAgICA0MzAwIHVzZXMKKyAgICA0NDAwIHVzZXMKKyAgICA0NTAwIHVzZXMKKyAgICA0NjAwIHVzZXMKKyAgICA0NzAwIHVzZXMKKyAgICA0ODAwIHVzZXMKKyAgICA0OTAwIHVzZXMKKyAgICA1MDAwIHVzZXMKKyAgICA1MTAwIHVzZXMKKyAgICA1MjAwIHVzZXMKKyAgICA1MzAwIHVzZXMKKyAgICA1NDAwIHVzZXMKKyAgICA1NTAwIHVzZXMKKyAgICA1NjAwIHVzZXMKKyAgICA1NzAwIHVzZXMKKyAgICA1ODAwIHVzZXMKKyAgICA1OTAwIHVzZXMKKyAgICA2MDAwIHVzZXMKKyAgICA2MTAwIHVzZXMKKyAgICA2MjAwIHVzZXMKKyAgICA2MzAwIHVzZXMKKyAgICA2NDAwIHVzZXMKKyAgICA2NTAwIHVzZXMKKyAgICA2NjAwIHVzZXMKKyAgICA2NzAwIHVzZXMKKyAgICA2ODAwIHVzZXMKKyAgICA2OTAwIHVzZXMKKyAgICA3MDAwIHVzZXMKKyAgICA3MTAwIHVzZXMKKyAgICA3MjAwIHVzZXMKKyAgICA3MzAwIHVzZXMKKyAgICA3NDAwIHVzZXMKKyAgICA3NTAwIHVzZXMKKyAgICA3NjAwIHVzZXMKKyAgICA3NzAwIHVzZXMKKyAgICA3ODAwIHVzZXMKKyAgICA3OTAwIHVzZXMKKyAgICA4MDAwIHVzZXMKKyAgICA4MTAwIHVzZXMKKyAgICA4MjAwIHVzZXMKKyAgICA4MzAwIHVzZXMKKyAgICA4NDAwIHVzZXMKKyAgICA4NTAwIHVzZXMKKyAgICA4NjAwIHVzZXMKKyAgICA4NzAwIHVzZXMKKyAgICA4ODAwIHVzZXMKKyAgICA4OTAwIHVzZXMKKyAgICA5MDAwIHVzZXMKKyAgICA5MTAwIHVzZXMKKyAgICA5MjAwIHVzZXMKKyAgICA5MzAwIHVzZXMKKyAgICA5NDAwIHVzZXMKKyAgICA5NTAwIHVzZXMKKyAgICA5NjAwIHVzZXMKKyAgICA5NzAwIHVzZXMKKyAgICA5ODAwIHVzZXMKKyAgICA5OTAwIHVzZXMKKyAgICAxMDAwMCB1c2VzCisgICAgMTAxMDAgdXNlcworICAgIDEwMjAwIHVzZXMKKyAgICAxMDMwMCB1c2VzCisgICAgMTA0MDAgdXNlcworICAgIDEwNTAwIHVzZXMKKyAgICAxMDYwMCB1c2VzCisgICAgMTA3MDAgdXNlcworICAgIDEwODAwIHVzZXMKKyAgICAxMDkwMCB1c2VzCisgICAgMTEwMDAgdXNlcworICAgIDExMTAwIHVzZXMKKyAgICAxMTIwMCB1c2VzCisgICAgMTEzMDAgdXNlcworICAgIDExNDAwIHVzZXMKKyAgICAxMTUwMCB1c2VzCisgICAgMTE2MDAgdXNlcworICAgIDExNzAwIHVzZXMKKyAgICAxMTgwMCB1c2VzCisgICAgMTE5MDAgdXNlcworICAgIDEyMDAwIHVzZXMKKyAgICAxMjEwMCB1c2VzCisgICAgMTIyMDAgdXNlcworICAgIDEyMzAwIHVzZXMKKyAgICAxMjQwMCB1c2VzCisgICAgMTI1MDAgdXNlcworICAgIDEyNjAwIHVzZXMKKyAgICAxMjcwMCB1c2VzCisgICAgMTI4MDAgdXNlcworICAgIDEyOTAwIHVzZXMKKyAgICAxMzAwMCB1c2VzCisgICAgMTMxMDAgdXNlcworICAgIDEzMjAwIHVzZXMKKyAgICAxMzMwMCB1c2VzCisgICAgMTM0MDAgdXNlcworICAgIDEzNTAwIHVzZXMKKyAgICAxMzYwMCB1c2VzCisgICAgMTM3MDAgdXNlcworICAgIDEzODAwIHVzZXMKKyAgICAxMzkwMCB1c2VzCisgICAgMTQwMDAgdXNlcworICAgIDE0MTAwIHVzZXMKKyAgICAxNDIwMCB1c2VzCisgICAgMTQzMDAgdXNlcworICAgIDE0NDAwIHVzZXMKKyAgICAxNDUwMCB1c2VzCisgICAgMTQ2MDAgdXNlcworICAgIDE0NzAwIHVzZXMKKyAgICAxNDgwMCB1c2VzCisgICAgMTQ5MDAgdXNlcworICAgIDE1MDAwIHVzZXMKKyAgICAxNTEwMCB1c2VzCisgICAgMTUyMDAgdXNlcworICAgIDE1MzAwIHVzZXMKKyAgICAxNTQwMCB1c2VzCisgICAgMTU1MDAgdXNlcworICAgIDE1NjAwIHVzZXMKKyAgICAxNTcwMCB1c2VzCisgICAgMTU4MDAgdXNlcworICAgIDE1OTAwIHVzZXMKKyAgICAxNjAwMCB1c2VzCisgICAgMTYxMDAgdXNlcworICAgIDE2MjAwIHVzZXMKKyAgICAxNjMwMCB1c2VzCisgICAgMTY0MDAgdXNlcworICAgIDE2NTAwIHVzZXMKKyAgICAxNjYwMCB1c2VzCisgICAgMTY3MDAgdXNlcworICAgIDE2ODAwIHVzZXMKKyAgICAxNjkwMCB1c2VzCisgICAgMTcwMDAgdXNlcworICAgIDE3MTAwIHVzZXMKKyAgICAxNzIwMCB1c2VzCisgICAgMTczMDAgdXNlcworICAgIDE3NDAwIHVzZXMKKyAgICAxNzUwMCB1c2VzCisgICAgMTc2MDAgdXNlcworICAgIDE3NzAwIHVzZXMKKyAgICAxNzgwMCB1c2VzCisgICAgMTc5MDAgdXNlcworICAgIDE4MDAwIHVzZXMKKyAgICAxODEwMCB1c2VzCisgICAgMTgyMDAgdXNlcworICAgIDE4MzAwIHVzZXMKKyAgICAxODQwMCB1c2VzCisgICAgMTg1MDAgdXNlcworICAgIDE4NjAwIHVzZXMKKyAgICAxODcwMCB1c2VzCisgICAgMTg4MDAgdXNlcworICAgIDE4OTAwIHVzZXMKKyAgICAxOTAwMCB1c2VzCisgICAgMTkxMDAgdXNlcworICAgIDE5MjAwIHVzZXMKKyAgICAxOTMwMCB1c2VzCisgICAgMTk0MDAgdXNlcworICAgIDE5NTAwIHVzZXMKKyAgICAxOTYwMCB1c2VzCisgICAgMTk3MDAgdXNlcworICAgIDE5ODAwIHVzZXMKKyAgICAxOTkwMCB1c2VzCisgICAgMjAwMDAgdXNlcworICAgIDIwMTAwIHVzZXMKKyAgICAyMDIwMCB1c2VzCisgICAgMjAzMDAgdXNlcworICAgIDIwNDAwIHVzZXMKKyAgICAyMDUwMCB1c2VzCisgICAgMjA2MDAgdXNlcworICAgIDIwNzAwIHVzZXMKKyAgICAyMDgwMCB1c2VzCisgICAgMjA5MDAgdXNlcworICAgIDIxMDAwIHVzZXMKKyAgICAyMTEwMCB1c2VzCisgICAgMjEyMDAgdXNlcworICAgIDIxMzAwIHVzZXMKKyAgICAyMTQwMCB1c2VzCisgICAgMjE1MDAgdXNlcworICAgIDIxNjAwIHVzZXMKKyAgICAyMTcwMCB1c2VzCisgICAgMjE4MDAgdXNlcworICAgIDIxOTAwIHVzZXMKKyAgICAyMjAwMCB1c2VzCisgICAgMjIxMDAgdXNlcworICAgIDIyMjAwIHVzZXMKKyAgICAyMjMwMCB1c2VzCisgICAgMjI0MDAgdXNlcworICAgIDIyNTAwIHVzZXMKKyAgICAyMjYwMCB1c2VzCisgICAgMjI3MDAgdXNlcworICAgIDIyODAwIHVzZXMKKyAgICAyMjkwMCB1c2VzCisgICAgMjMwMDAgdXNlcworICAgIDIzMTAwIHVzZXMKKyAgICAyMzIwMCB1c2VzCisgICAgMjMzMDAgdXNlcworICAgIDIzNDAwIHVzZXMKKyAgICAyMzUwMCB1c2VzCisgICAgMjM2MDAgdXNlcworICAgIDIzNzAwIHVzZXMKKyAgICAyMzgwMCB1c2VzCisgICAgMjM5MDAgdXNlcworICAgIDI0MDAwIHVzZXMKKyAgICAyNDEwMCB1c2VzCisgICAgMjQyMDAgdXNlcworICAgIDI0MzAwIHVzZXMKKyAgICAyNDQwMCB1c2VzCisgICAgMjQ1MDAgdXNlcworICAgIDI0NjAwIHVzZXMKKyAgICAyNDcwMCB1c2VzCisgICAgMjQ4MDAgdXNlcworICAgIDI0OTAwIHVzZXMKKyAgICAyNTAwMCB1c2VzCisgICAgMjUxMDAgdXNlcworICAgIDI1MjAwIHVzZXMKK1JlYWRpbmcgInVhcnRfY29yZSIuCisgICAgMTAwIHVzZXMKKyAgICAyMDAgdXNlcworICAgIDMwMCB1c2VzCisgICAgNDAwIHVzZXMKKyAgICA1MDAgdXNlcworICAgIDYwMCB1c2VzCisgICAgNzAwIHVzZXMKKyAgICA4MDAgdXNlcworICAgIDkwMCB1c2VzCisgICAgMTAwMCB1c2VzCisgICAgMTEwMCB1c2VzCisgICAgMTIwMCB1c2VzCisgICAgMTMwMCB1c2VzCisgICAgMTQwMCB1c2VzCisgICAgMTUwMCB1c2VzCisgICAgMTYwMCB1c2VzCisgICAgMTcwMCB1c2VzCisgICAgMTgwMCB1c2VzCisgICAgMTkwMCB1c2VzCisgICAgMjAwMCB1c2VzCisgICAgMjEwMCB1c2VzCisgICAgMjIwMCB1c2VzCisgICAgMjMwMCB1c2VzCisgICAgMjQwMCB1c2VzCisgICAgMjUwMCB1c2VzCisgICAgMjYwMCB1c2VzCisgICAgMjcwMCB1c2VzCisgICAgMjgwMCB1c2VzCisgICAgMjkwMCB1c2VzCisgICAgMzAwMCB1c2VzCisgICAgMzEwMCB1c2VzCisgICAgMzIwMCB1c2VzCisgICAgMzMwMCB1c2VzCisgICAgMzQwMCB1c2VzCisgICAgMzUwMCB1c2VzCisgICAgMzYwMCB1c2VzCisgICAgMzcwMCB1c2VzCisgICAgMzgwMCB1c2VzCisgICAgMzkwMCB1c2VzCisgICAgNDAwMCB1c2VzCisgICAgNDEwMCB1c2VzCisgICAgNDIwMCB1c2VzCisgICAgNDMwMCB1c2VzCisgICAgNDQwMCB1c2VzCisgICAgNDUwMCB1c2VzCisgICAgNDYwMCB1c2VzCisgICAgNDcwMCB1c2VzCisgICAgNDgwMCB1c2VzCisgICAgNDkwMCB1c2VzCisgICAgNTAwMCB1c2VzCisgICAgNTEwMCB1c2VzCisgICAgNTIwMCB1c2VzCisgICAgNTMwMCB1c2VzCisgICAgNTQwMCB1c2VzCisgICAgNTUwMCB1c2VzCisgICAgNTYwMCB1c2VzCisgICAgNTcwMCB1c2VzCisgICAgNTgwMCB1c2VzCisgICAgNTkwMCB1c2VzCisgICAgNjAwMCB1c2VzCisgICAgNjEwMCB1c2VzCisgICAgNjIwMCB1c2VzCisgICAgNjMwMCB1c2VzCisgICAgNjQwMCB1c2VzCisgICAgNjUwMCB1c2VzCisgICAgNjYwMCB1c2VzCisgICAgNjcwMCB1c2VzCisgICAgNjgwMCB1c2VzCisgICAgNjkwMCB1c2VzCisgICAgNzAwMCB1c2VzCisgICAgNzEwMCB1c2VzCisgICAgNzIwMCB1c2VzCisgICAgNzMwMCB1c2VzCisgICAgNzQwMCB1c2VzCisgICAgNzUwMCB1c2VzCisgICAgNzYwMCB1c2VzCisgICAgNzcwMCB1c2VzCisgICAgNzgwMCB1c2VzCisgICAgNzkwMCB1c2VzCisgICAgODAwMCB1c2VzCisgICAgODEwMCB1c2VzCisgICAgODIwMCB1c2VzCisgICAgODMwMCB1c2VzCisgICAgODQwMCB1c2VzCisgICAgODUwMCB1c2VzCisgICAgODYwMCB1c2VzCisgICAgODcwMCB1c2VzCisgICAgODgwMCB1c2VzCisgICAgODkwMCB1c2VzCisgICAgOTAwMCB1c2VzCisgICAgOTEwMCB1c2VzCisgICAgOTIwMCB1c2VzCisgICAgOTMwMCB1c2VzCisgICAgOTQwMCB1c2VzCisgICAgOTUwMCB1c2VzCisgICAgOTYwMCB1c2VzCisgICAgOTcwMCB1c2VzCisgICAgOTgwMCB1c2VzCisgICAgOTkwMCB1c2VzCisgICAgMTAwMDAgdXNlcworICAgIDEwMTAwIHVzZXMKKyAgICAxMDIwMCB1c2VzCisgICAgMTAzMDAgdXNlcworICAgIDEwNDAwIHVzZXMKKyAgICAxMDUwMCB1c2VzCisgICAgMTA2MDAgdXNlcworICAgIDEwNzAwIHVzZXMKKyAgICAxMDgwMCB1c2VzCisgICAgMTA5MDAgdXNlcworICAgIDExMDAwIHVzZXMKKyAgICAxMTEwMCB1c2VzCisgICAgMTEyMDAgdXNlcworICAgIDExMzAwIHVzZXMKKyAgICAxMTQwMCB1c2VzCisgICAgMTE1MDAgdXNlcworICAgIDExNjAwIHVzZXMKKyAgICAxMTcwMCB1c2VzCisgICAgMTE4MDAgdXNlcworICAgIDExOTAwIHVzZXMKKyAgICAxMjAwMCB1c2VzCisgICAgMTIxMDAgdXNlcworICAgIDEyMjAwIHVzZXMKKyAgICAxMjMwMCB1c2VzCisgICAgMTI0MDAgdXNlcworICAgIDEyNTAwIHVzZXMKKyAgICAxMjYwMCB1c2VzCisgICAgMTI3MDAgdXNlcworICAgIDEyODAwIHVzZXMKKyAgICAxMjkwMCB1c2VzCisgICAgMTMwMDAgdXNlcworICAgIDEzMTAwIHVzZXMKKyAgICAxMzIwMCB1c2VzCisgICAgMTMzMDAgdXNlcworICAgIDEzNDAwIHVzZXMKKyAgICAxMzUwMCB1c2VzCisgICAgMTM2MDAgdXNlcworICAgIDEzNzAwIHVzZXMKK1JlYWRpbmcgIndiX2ludGVyY29ubmVjdCIuCisgICAgMTAwIHVzZXMKKyAgICAyMDAgdXNlcworICAgIDMwMCB1c2VzCisgICAgNDAwIHVzZXMKKyAgICA1MDAgdXNlcworICAgIDYwMCB1c2VzCisgICAgNzAwIHVzZXMKKyAgICA4MDAgdXNlcworICAgIDkwMCB1c2VzCisgICAgMTAwMCB1c2VzCisgICAgMTEwMCB1c2VzCisgICAgMTIwMCB1c2VzCisgICAgMTMwMCB1c2VzCisgICAgMTQwMCB1c2VzCisgICAgMTUwMCB1c2VzCisgICAgMTYwMCB1c2VzCisgICAgMTcwMCB1c2VzCisgICAgMTgwMCB1c2VzCisgICAgMTkwMCB1c2VzCisgICAgMjAwMCB1c2VzCisgICAgMjEwMCB1c2VzCisgICAgMjIwMCB1c2VzCisgICAgMjMwMCB1c2VzCisgICAgMjQwMCB1c2VzCisgICAgMjUwMCB1c2VzCisgICAgMjYwMCB1c2VzCisgICAgMjcwMCB1c2VzCisgICAgMjgwMCB1c2VzCisgICAgMjkwMCB1c2VzCisgICAgMzAwMCB1c2VzCisgICAgMzEwMCB1c2VzCisgICAgMzIwMCB1c2VzCisgICAgMzMwMCB1c2VzCisgICAgMzQwMCB1c2VzCisgICAgMzUwMCB1c2VzCisgICAgMzYwMCB1c2VzCisgICAgMzcwMCB1c2VzCisgICAgMzgwMCB1c2VzCisgICAgMzkwMCB1c2VzCisgICAgNDAwMCB1c2VzCisgICAgNDEwMCB1c2VzCisgICAgNDIwMCB1c2VzCisgICAgNDMwMCB1c2VzCisgICAgNDQwMCB1c2VzCisgICAgNDUwMCB1c2VzCisgICAgNDYwMCB1c2VzCisgICAgNDcwMCB1c2VzCisgICAgNDgwMCB1c2VzCisgICAgNDkwMCB1c2VzCisgICAgNTAwMCB1c2VzCisgICAgNTEwMCB1c2VzCisgICAgNTIwMCB1c2VzCisgICAgNTMwMCB1c2VzCisgICAgNTQwMCB1c2VzCisgICAgNTUwMCB1c2VzCisgICAgNTYwMCB1c2VzCisgICAgNTcwMCB1c2VzCisgICAgNTgwMCB1c2VzCisgICAgNTkwMCB1c2VzCisgICAgNjAwMCB1c2VzCisgICAgNjEwMCB1c2VzCisgICAgNjIwMCB1c2VzCisgICAgNjMwMCB1c2VzCisgICAgNjQwMCB1c2VzCisgICAgNjUwMCB1c2VzCisgICAgNjYwMCB1c2VzCisgICAgNjcwMCB1c2VzCisgICAgNjgwMCB1c2VzCisgICAgNjkwMCB1c2VzCisgICAgNzAwMCB1c2VzCisgICAgNzEwMCB1c2VzCisgICAgNzIwMCB1c2VzCisgICAgNzMwMCB1c2VzCisgICAgNzQwMCB1c2VzCisgICAgNzUwMCB1c2VzCisgICAgNzYwMCB1c2VzCisgICAgNzcwMCB1c2VzCisgICAgNzgwMCB1c2VzCisgICAgNzkwMCB1c2VzCisgICAgODAwMCB1c2VzCisgICAgODEwMCB1c2VzCisgICAgODIwMCB1c2VzCisgICAgODMwMCB1c2VzCisgICAgODQwMCB1c2VzCisgICAgODUwMCB1c2VzCisgICAgODYwMCB1c2VzCisgICAgODcwMCB1c2VzCisgICAgODgwMCB1c2VzCisgICAgODkwMCB1c2VzCisgICAgOTAwMCB1c2VzCisgICAgOTEwMCB1c2VzCisgICAgOTIwMCB1c2VzCisgICAgOTMwMCB1c2VzCisgICAgOTQwMCB1c2VzCisgICAgOTUwMCB1c2VzCisgICAgOTYwMCB1c2VzCisgICAgOTcwMCB1c2VzCisgICAgOTgwMCB1c2VzCisgICAgOTkwMCB1c2VzCisgICAgMTAwMDAgdXNlcworICAgIDEwMTAwIHVzZXMKKyAgICAxMDIwMCB1c2VzCisgICAgMTAzMDAgdXNlcworICAgIDEwNDAwIHVzZXMKKyAgICAxMDUwMCB1c2VzCisgICAgMTA2MDAgdXNlcworICAgIDEwNzAwIHVzZXMKKyAgICAxMDgwMCB1c2VzCisgICAgMTA5MDAgdXNlcworICAgIDExMDAwIHVzZXMKKyAgICAxMTEwMCB1c2VzCisgICAgMTEyMDAgdXNlcworICAgIDExMzAwIHVzZXMKKyAgICAxMTQwMCB1c2VzCisgICAgMTE1MDAgdXNlcworICAgIDExNjAwIHVzZXMKKyAgICAxMTcwMCB1c2VzCisgICAgMTE4MDAgdXNlcworICAgIDExOTAwIHVzZXMKKyAgICAxMjAwMCB1c2VzCisgICAgMTIxMDAgdXNlcworICAgIDEyMjAwIHVzZXMKKyAgICAxMjMwMCB1c2VzCisgICAgMTI0MDAgdXNlcworICAgIDEyNTAwIHVzZXMKKyAgICAxMjYwMCB1c2VzCisgICAgMTI3MDAgdXNlcworICAgIDEyODAwIHVzZXMKKyAgICAxMjkwMCB1c2VzCisgICAgMTMwMDAgdXNlcworICAgIDEzMTAwIHVzZXMKKyAgICAxMzIwMCB1c2VzCisgICAgMTMzMDAgdXNlcworICAgIDEzNDAwIHVzZXMKKyAgICAxMzUwMCB1c2VzCisgICAgMTM2MDAgdXNlcworICAgIDEzNzAwIHVzZXMKKyAgICAxMzgwMCB1c2VzCisgICAgMTM5MDAgdXNlcworICAgIDE0MDAwIHVzZXMKKyAgICAxNDEwMCB1c2VzCisgICAgMTQyMDAgdXNlcworICAgIDE0MzAwIHVzZXMKKyAgICAxNDQwMCB1c2VzCisgICAgMTQ1MDAgdXNlcworICAgIDE0NjAwIHVzZXMKKyAgICAxNDcwMCB1c2VzCisgICAgMTQ4MDAgdXNlcworICAgIDE0OTAwIHVzZXMKKyAgICAxNTAwMCB1c2VzCisgICAgMTUxMDAgdXNlcworICAgIDE1MjAwIHVzZXMKKyAgICAxNTMwMCB1c2VzCisgICAgMTU0MDAgdXNlcworICAgIDE1NTAwIHVzZXMKKyAgICAxNTYwMCB1c2VzCisgICAgMTU3MDAgdXNlcworICAgIDE1ODAwIHVzZXMKKyAgICAxNTkwMCB1c2VzCisgICAgMTYwMDAgdXNlcworICAgIDE2MTAwIHVzZXMKKyAgICAxNjIwMCB1c2VzCisgICAgMTYzMDAgdXNlcworICAgIDE2NDAwIHVzZXMKKyAgICAxNjUwMCB1c2VzCisgICAgMTY2MDAgdXNlcworICAgIDE2NzAwIHVzZXMKKyAgICAxNjgwMCB1c2VzCisgICAgMTY5MDAgdXNlcworICAgIDE3MDAwIHVzZXMKKyAgICAxNzEwMCB1c2VzCisgICAgMTcyMDAgdXNlcworICAgIDE3MzAwIHVzZXMKKyAgICAxNzQwMCB1c2VzCisgICAgMTc1MDAgdXNlcworICAgIDE3NjAwIHVzZXMKKyAgICAxNzcwMCB1c2VzCisgICAgMTc4MDAgdXNlcworICAgIDE3OTAwIHVzZXMKKyAgICAxODAwMCB1c2VzCisgICAgMTgxMDAgdXNlcworICAgIDE4MjAwIHVzZXMKKyAgICAxODMwMCB1c2VzCisgICAgMTg0MDAgdXNlcworICAgIDE4NTAwIHVzZXMKKyAgICAxODYwMCB1c2VzCisgICAgMTg3MDAgdXNlcworICAgIDE4ODAwIHVzZXMKKyAgICAxODkwMCB1c2VzCisgICAgMTkwMDAgdXNlcworICAgIDE5MTAwIHVzZXMKKyAgICAxOTIwMCB1c2VzCisgICAgMTkzMDAgdXNlcworICAgIDE5NDAwIHVzZXMKKyAgICAxOTUwMCB1c2VzCisgICAgMTk2MDAgdXNlcworICAgIDE5NzAwIHVzZXMKKyAgICAxOTgwMCB1c2VzCisgICAgMTk5MDAgdXNlcworICAgIDIwMDAwIHVzZXMKKyAgICAyMDEwMCB1c2VzCisgICAgMjAyMDAgdXNlcworICAgIDIwMzAwIHVzZXMKKyAgICAyMDQwMCB1c2VzCisgICAgMjA1MDAgdXNlcworICAgIDIwNjAwIHVzZXMKKyAgICAyMDcwMCB1c2VzCisgICAgMjA4MDAgdXNlcworICAgIDIwOTAwIHVzZXMKKyAgICAyMTAwMCB1c2VzCisgICAgMjExMDAgdXNlcworICAgIDIxMjAwIHVzZXMKKyAgICAyMTMwMCB1c2VzCisgICAgMjE0MDAgdXNlcworICAgIDIxNTAwIHVzZXMKKyAgICAyMTYwMCB1c2VzCisgICAgMjE3MDAgdXNlcworICAgIDIxODAwIHVzZXMKKyAgICAyMTkwMCB1c2VzCisgICAgMjIwMDAgdXNlcworICAgIDIyMTAwIHVzZXMKKyAgICAyMjIwMCB1c2VzCisgICAgMjIzMDAgdXNlcworICAgIDIyNDAwIHVzZXMKKyAgICAyMjUwMCB1c2VzCisgICAgMjI2MDAgdXNlcworICAgIDIyNzAwIHVzZXMKKyAgICAyMjgwMCB1c2VzCisgICAgMjI5MDAgdXNlcworICAgIDIzMDAwIHVzZXMKKyAgICAyMzEwMCB1c2VzCisgICAgMjMyMDAgdXNlcworICAgIDIzMzAwIHVzZXMKKyAgICAyMzQwMCB1c2VzCisgICAgMjM1MDAgdXNlcworICAgIDIzNjAwIHVzZXMKKyAgICAyMzcwMCB1c2VzCisgICAgMjM4MDAgdXNlcworICAgIDIzOTAwIHVzZXMKKyAgICAyNDAwMCB1c2VzCisgICAgMjQxMDAgdXNlcworICAgIDI0MjAwIHVzZXMKKyAgICAyNDMwMCB1c2VzCisgICAgMjQ0MDAgdXNlcworICAgIDI0NTAwIHVzZXMKKyAgICAyNDYwMCB1c2VzCisgICAgMjQ3MDAgdXNlcworICAgIDI0ODAwIHVzZXMKKyAgICAyNDkwMCB1c2VzCisgICAgMjUwMDAgdXNlcworICAgIDI1MTAwIHVzZXMKKyAgICAyNTIwMCB1c2VzCisgICAgMjUzMDAgdXNlcworICAgIDI1NDAwIHVzZXMKKyAgICAyNTUwMCB1c2VzCisgICAgMjU2MDAgdXNlcworICAgIDI1NzAwIHVzZXMKKyAgICAyNTgwMCB1c2VzCisgICAgMjU5MDAgdXNlcworICAgIDI2MDAwIHVzZXMKKyAgICAyNjEwMCB1c2VzCisgICAgMjYyMDAgdXNlcworICAgIDI2MzAwIHVzZXMKKyAgICAyNjQwMCB1c2VzCisgICAgMjY1MDAgdXNlcworICAgIDI2NjAwIHVzZXMKK1JlYWRpbmcgInNkcmNfdG9wIi4KKyAgICAxMDAgdXNlcworICAgIDIwMCB1c2VzCisgICAgMzAwIHVzZXMKKyAgICA0MDAgdXNlcworICAgIDUwMCB1c2VzCisgICAgNjAwIHVzZXMKKyAgICA3MDAgdXNlcworICAgIDgwMCB1c2VzCisgICAgOTAwIHVzZXMKKyAgICAxMDAwIHVzZXMKKyAgICAxMTAwIHVzZXMKKyAgICAxMjAwIHVzZXMKKyAgICAxMzAwIHVzZXMKKyAgICAxNDAwIHVzZXMKKyAgICAxNTAwIHVzZXMKKyAgICAxNjAwIHVzZXMKKyAgICAxNzAwIHVzZXMKKyAgICAxODAwIHVzZXMKKyAgICAxOTAwIHVzZXMKKyAgICAyMDAwIHVzZXMKKyAgICAyMTAwIHVzZXMKKyAgICAyMjAwIHVzZXMKKyAgICAyMzAwIHVzZXMKKyAgICAyNDAwIHVzZXMKKyAgICAyNTAwIHVzZXMKKyAgICAyNjAwIHVzZXMKKyAgICAyNzAwIHVzZXMKKyAgICAyODAwIHVzZXMKKyAgICAyOTAwIHVzZXMKKyAgICAzMDAwIHVzZXMKKyAgICAzMTAwIHVzZXMKKyAgICAzMjAwIHVzZXMKKyAgICAzMzAwIHVzZXMKKyAgICAzNDAwIHVzZXMKKyAgICAzNTAwIHVzZXMKKyAgICAzNjAwIHVzZXMKKyAgICAzNzAwIHVzZXMKKyAgICAzODAwIHVzZXMKKyAgICAzOTAwIHVzZXMKKyAgICA0MDAwIHVzZXMKKyAgICA0MTAwIHVzZXMKKyAgICA0MjAwIHVzZXMKKyAgICA0MzAwIHVzZXMKKyAgICA0NDAwIHVzZXMKKyAgICA0NTAwIHVzZXMKKyAgICA0NjAwIHVzZXMKKyAgICA0NzAwIHVzZXMKKyAgICA0ODAwIHVzZXMKKyAgICA0OTAwIHVzZXMKKyAgICA1MDAwIHVzZXMKKyAgICA1MTAwIHVzZXMKKyAgICA1MjAwIHVzZXMKKyAgICA1MzAwIHVzZXMKKyAgICA1NDAwIHVzZXMKKyAgICA1NTAwIHVzZXMKKyAgICA1NjAwIHVzZXMKKyAgICA1NzAwIHVzZXMKKyAgICA1ODAwIHVzZXMKKyAgICA1OTAwIHVzZXMKKyAgICA2MDAwIHVzZXMKKyAgICA2MTAwIHVzZXMKKyAgICA2MjAwIHVzZXMKKyAgICA2MzAwIHVzZXMKKyAgICA2NDAwIHVzZXMKKyAgICA2NTAwIHVzZXMKKyAgICA2NjAwIHVzZXMKKyAgICA2NzAwIHVzZXMKKyAgICA2ODAwIHVzZXMKKyAgICA2OTAwIHVzZXMKKyAgICA3MDAwIHVzZXMKKyAgICA3MTAwIHVzZXMKKyAgICA3MjAwIHVzZXMKKyAgICA3MzAwIHVzZXMKKyAgICA3NDAwIHVzZXMKKyAgICA3NTAwIHVzZXMKKyAgICA3NjAwIHVzZXMKKyAgICA3NzAwIHVzZXMKKyAgICA3ODAwIHVzZXMKKyAgICA3OTAwIHVzZXMKKyAgICA4MDAwIHVzZXMKKyAgICA4MTAwIHVzZXMKKyAgICA4MjAwIHVzZXMKKyAgICA4MzAwIHVzZXMKKyAgICA4NDAwIHVzZXMKKyAgICA4NTAwIHVzZXMKKyAgICA4NjAwIHVzZXMKKyAgICA4NzAwIHVzZXMKKyAgICA4ODAwIHVzZXMKKyAgICA4OTAwIHVzZXMKKyAgICA5MDAwIHVzZXMKKyAgICA5MTAwIHVzZXMKKyAgICA5MjAwIHVzZXMKKyAgICA5MzAwIHVzZXMKKyAgICA5NDAwIHVzZXMKKyAgICA5NTAwIHVzZXMKKyAgICA5NjAwIHVzZXMKKyAgICA5NzAwIHVzZXMKKyAgICA5ODAwIHVzZXMKKyAgICA5OTAwIHVzZXMKKyAgICAxMDAwMCB1c2VzCisgICAgMTAxMDAgdXNlcworICAgIDEwMjAwIHVzZXMKKyAgICAxMDMwMCB1c2VzCisgICAgMTA0MDAgdXNlcworICAgIDEwNTAwIHVzZXMKKyAgICAxMDYwMCB1c2VzCisgICAgMTA3MDAgdXNlcworICAgIDEwODAwIHVzZXMKKyAgICAxMDkwMCB1c2VzCisgICAgMTEwMDAgdXNlcworICAgIDExMTAwIHVzZXMKKyAgICAxMTIwMCB1c2VzCisgICAgMTEzMDAgdXNlcworICAgIDExNDAwIHVzZXMKKyAgICAxMTUwMCB1c2VzCisgICAgMTE2MDAgdXNlcworICAgIDExNzAwIHVzZXMKKyAgICAxMTgwMCB1c2VzCisgICAgMTE5MDAgdXNlcworICAgIDEyMDAwIHVzZXMKKyAgICAxMjEwMCB1c2VzCisgICAgMTIyMDAgdXNlcworICAgIDEyMzAwIHVzZXMKKyAgICAxMjQwMCB1c2VzCisgICAgMTI1MDAgdXNlcworICAgIDEyNjAwIHVzZXMKKyAgICAxMjcwMCB1c2VzCisgICAgMTI4MDAgdXNlcworICAgIDEyOTAwIHVzZXMKKyAgICAxMzAwMCB1c2VzCisgICAgMTMxMDAgdXNlcworICAgIDEzMjAwIHVzZXMKKyAgICAxMzMwMCB1c2VzCisgICAgMTM0MDAgdXNlcworICAgIDEzNTAwIHVzZXMKKyAgICAxMzYwMCB1c2VzCisgICAgMTM3MDAgdXNlcworICAgIDEzODAwIHVzZXMKKyAgICAxMzkwMCB1c2VzCisgICAgMTQwMDAgdXNlcworICAgIDE0MTAwIHVzZXMKKyAgICAxNDIwMCB1c2VzCisgICAgMTQzMDAgdXNlcworICAgIDE0NDAwIHVzZXMKKyAgICAxNDUwMCB1c2VzCisgICAgMTQ2MDAgdXNlcworICAgIDE0NzAwIHVzZXMKKyAgICAxNDgwMCB1c2VzCisgICAgMTQ5MDAgdXNlcworICAgIDE1MDAwIHVzZXMKKyAgICAxNTEwMCB1c2VzCisgICAgMTUyMDAgdXNlcworICAgIDE1MzAwIHVzZXMKKyAgICAxNTQwMCB1c2VzCisgICAgMTU1MDAgdXNlcworICAgIDE1NjAwIHVzZXMKKyAgICAxNTcwMCB1c2VzCisgICAgMTU4MDAgdXNlcworICAgIDE1OTAwIHVzZXMKKyAgICAxNjAwMCB1c2VzCisgICAgMTYxMDAgdXNlcworICAgIDE2MjAwIHVzZXMKKyAgICAxNjMwMCB1c2VzCisgICAgMTY0MDAgdXNlcworICAgIDE2NTAwIHVzZXMKKyAgICAxNjYwMCB1c2VzCisgICAgMTY3MDAgdXNlcworICAgIDE2ODAwIHVzZXMKKyAgICAxNjkwMCB1c2VzCisgICAgMTcwMDAgdXNlcworICAgIDE3MTAwIHVzZXMKKyAgICAxNzIwMCB1c2VzCisgICAgMTczMDAgdXNlcworICAgIDE3NDAwIHVzZXMKKyAgICAxNzUwMCB1c2VzCisgICAgMTc2MDAgdXNlcworICAgIDE3NzAwIHVzZXMKKyAgICAxNzgwMCB1c2VzCisgICAgMTc5MDAgdXNlcworICAgIDE4MDAwIHVzZXMKKyAgICAxODEwMCB1c2VzCisgICAgMTgyMDAgdXNlcworICAgIDE4MzAwIHVzZXMKKyAgICAxODQwMCB1c2VzCisgICAgMTg1MDAgdXNlcworICAgIDE4NjAwIHVzZXMKKyAgICAxODcwMCB1c2VzCisgICAgMTg4MDAgdXNlcworICAgIDE4OTAwIHVzZXMKKyAgICAxOTAwMCB1c2VzCisgICAgMTkxMDAgdXNlcworICAgIDE5MjAwIHVzZXMKKyAgICAxOTMwMCB1c2VzCisgICAgMTk0MDAgdXNlcworICAgIDE5NTAwIHVzZXMKKyAgICAxOTYwMCB1c2VzCisgICAgMTk3MDAgdXNlcworICAgIDE5ODAwIHVzZXMKKyAgICAxOTkwMCB1c2VzCisgICAgMjAwMDAgdXNlcworICAgIDIwMTAwIHVzZXMKKyAgICAyMDIwMCB1c2VzCisgICAgMjAzMDAgdXNlcworICAgIDIwNDAwIHVzZXMKKyAgICAyMDUwMCB1c2VzCisgICAgMjA2MDAgdXNlcworICAgIDIwNzAwIHVzZXMKKyAgICAyMDgwMCB1c2VzCisgICAgMjA5MDAgdXNlcworICAgIDIxMDAwIHVzZXMKKyAgICAyMTEwMCB1c2VzCisgICAgMjEyMDAgdXNlcworICAgIDIxMzAwIHVzZXMKKyAgICAyMTQwMCB1c2VzCisgICAgMjE1MDAgdXNlcworICAgIDIxNjAwIHVzZXMKKyAgICAyMTcwMCB1c2VzCisgICAgMjE4MDAgdXNlcworICAgIDIxOTAwIHVzZXMKKyAgICAyMjAwMCB1c2VzCisgICAgMjIxMDAgdXNlcworICAgIDIyMjAwIHVzZXMKKyAgICAyMjMwMCB1c2VzCisgICAgMjI0MDAgdXNlcworICAgIDIyNTAwIHVzZXMKKyAgICAyMjYwMCB1c2VzCisgICAgMjI3MDAgdXNlcworICAgIDIyODAwIHVzZXMKKyAgICAyMjkwMCB1c2VzCisgICAgMjMwMDAgdXNlcworICAgIDIzMTAwIHVzZXMKKyAgICAyMzIwMCB1c2VzCisgICAgMjMzMDAgdXNlcworICAgIDIzNDAwIHVzZXMKKyAgICAyMzUwMCB1c2VzCisgICAgMjM2MDAgdXNlcworICAgIDIzNzAwIHVzZXMKKyAgICAyMzgwMCB1c2VzCisgICAgMjM5MDAgdXNlcworICAgIDI0MDAwIHVzZXMKKyAgICAyNDEwMCB1c2VzCisgICAgMjQyMDAgdXNlcworICAgIDI0MzAwIHVzZXMKKyAgICAyNDQwMCB1c2VzCisgICAgMjQ1MDAgdXNlcworICAgIDI0NjAwIHVzZXMKKyAgICAyNDcwMCB1c2VzCisgICAgMjQ4MDAgdXNlcworICAgIDI0OTAwIHVzZXMKKyAgICAyNTAwMCB1c2VzCisgICAgMjUxMDAgdXNlcworICAgIDI1MjAwIHVzZXMKKyAgICAyNTMwMCB1c2VzCisgICAgMjU0MDAgdXNlcworICAgIDI1NTAwIHVzZXMKKyAgICAyNTYwMCB1c2VzCisgICAgMjU3MDAgdXNlcworICAgIDI1ODAwIHVzZXMKKyAgICAyNTkwMCB1c2VzCisgICAgMjYwMDAgdXNlcworICAgIDI2MTAwIHVzZXMKKyAgICAyNjIwMCB1c2VzCisgICAgMjYzMDAgdXNlcworICAgIDI2NDAwIHVzZXMKKyAgICAyNjUwMCB1c2VzCisgICAgMjY2MDAgdXNlcworICAgIDI2NzAwIHVzZXMKKyAgICAyNjgwMCB1c2VzCisgICAgMjY5MDAgdXNlcworICAgIDI3MDAwIHVzZXMKKyAgICAyNzEwMCB1c2VzCisgICAgMjcyMDAgdXNlcworICAgIDI3MzAwIHVzZXMKKyAgICAyNzQwMCB1c2VzCisgICAgMjc1MDAgdXNlcworICAgIDI3NjAwIHVzZXMKKyAgICAyNzcwMCB1c2VzCisgICAgMjc4MDAgdXNlcworICAgIDI3OTAwIHVzZXMKKyAgICAyODAwMCB1c2VzCisgICAgMjgxMDAgdXNlcworICAgIDI4MjAwIHVzZXMKKyAgICAyODMwMCB1c2VzCisgICAgMjg0MDAgdXNlcworICAgIDI4NTAwIHVzZXMKKyAgICAyODYwMCB1c2VzCisgICAgMjg3MDAgdXNlcworICAgIDI4ODAwIHVzZXMKKyAgICAyODkwMCB1c2VzCisgICAgMjkwMDAgdXNlcworICAgIDI5MTAwIHVzZXMKKyAgICAyOTIwMCB1c2VzCisgICAgMjkzMDAgdXNlcworICAgIDI5NDAwIHVzZXMKKyAgICAyOTUwMCB1c2VzCisgICAgMjk2MDAgdXNlcworICAgIDI5NzAwIHVzZXMKKyAgICAyOTgwMCB1c2VzCisgICAgMjk5MDAgdXNlcworICAgIDMwMDAwIHVzZXMKKyAgICAzMDEwMCB1c2VzCisgICAgMzAyMDAgdXNlcworICAgIDMwMzAwIHVzZXMKKyAgICAzMDQwMCB1c2VzCisgICAgMzA1MDAgdXNlcworICAgIDMwNjAwIHVzZXMKKyAgICAzMDcwMCB1c2VzCisgICAgMzA4MDAgdXNlcworICAgIDMwOTAwIHVzZXMKKyAgICAzMTAwMCB1c2VzCisgICAgMzExMDAgdXNlcworICAgIDMxMjAwIHVzZXMKKyAgICAzMTMwMCB1c2VzCisgICAgMzE0MDAgdXNlcworICAgIDMxNTAwIHVzZXMKKyAgICAzMTYwMCB1c2VzCisgICAgMzE3MDAgdXNlcworICAgIDMxODAwIHVzZXMKKyAgICAzMTkwMCB1c2VzCisgICAgMzIwMDAgdXNlcworICAgIDMyMTAwIHVzZXMKKyAgICAzMjIwMCB1c2VzCisgICAgMzIzMDAgdXNlcworICAgIDMyNDAwIHVzZXMKKyAgICAzMjUwMCB1c2VzCisgICAgMzI2MDAgdXNlcworICAgIDMyNzAwIHVzZXMKKyAgICAzMjgwMCB1c2VzCisgICAgMzI5MDAgdXNlcworICAgIDMzMDAwIHVzZXMKKyAgICAzMzEwMCB1c2VzCisgICAgMzMyMDAgdXNlcworICAgIDMzMzAwIHVzZXMKKyAgICAzMzQwMCB1c2VzCisgICAgMzM1MDAgdXNlcworICAgIDMzNjAwIHVzZXMKKyAgICAzMzcwMCB1c2VzCisgICAgMzM4MDAgdXNlcworICAgIDMzOTAwIHVzZXMKKyAgICAzNDAwMCB1c2VzCisgICAgMzQxMDAgdXNlcworICAgIDM0MjAwIHVzZXMKKyAgICAzNDMwMCB1c2VzCisgICAgMzQ0MDAgdXNlcworICAgIDM0NTAwIHVzZXMKKyAgICAzNDYwMCB1c2VzCisgICAgMzQ3MDAgdXNlcworICAgIDM0ODAwIHVzZXMKKyAgICAzNDkwMCB1c2VzCisgICAgMzUwMDAgdXNlcworICAgIDM1MTAwIHVzZXMKK1JlYWRpbmcgImdsYmxfY2ZnIi4KKyAgICAxMDAgdXNlcworICAgIDIwMCB1c2VzCisgICAgMzAwIHVzZXMKKyAgICA0MDAgdXNlcworICAgIDUwMCB1c2VzCisgICAgNjAwIHVzZXMKKyAgICA3MDAgdXNlcworICAgIDgwMCB1c2VzCisgICAgOTAwIHVzZXMKKyAgICAxMDAwIHVzZXMKKyAgICAxMTAwIHVzZXMKKyAgICAxMjAwIHVzZXMKKyAgICAxMzAwIHVzZXMKKyAgICAxNDAwIHVzZXMKKyAgICAxNTAwIHVzZXMKKyAgICAxNjAwIHVzZXMKKyAgICAxNzAwIHVzZXMKKyAgICAxODAwIHVzZXMKKyAgICAxOTAwIHVzZXMKKyAgICAyMDAwIHVzZXMKKyAgICAyMTAwIHVzZXMKKyAgICAyMjAwIHVzZXMKKyAgICAyMzAwIHVzZXMKKyAgICAyNDAwIHVzZXMKKyAgICAyNTAwIHVzZXMKKyAgICAyNjAwIHVzZXMKKyAgICAyNzAwIHVzZXMKKyAgICAyODAwIHVzZXMKKyAgICAyOTAwIHVzZXMKKyAgICAzMDAwIHVzZXMKKyAgICAzMTAwIHVzZXMKKyAgICAzMjAwIHVzZXMKKyAgICAzMzAwIHVzZXMKKyAgICAzNDAwIHVzZXMKKyAgICAzNTAwIHVzZXMKKyAgICAzNjAwIHVzZXMKKyAgICAzNzAwIHVzZXMKKyAgICAzODAwIHVzZXMKKyAgICAzOTAwIHVzZXMKKyAgICA0MDAwIHVzZXMKKyAgICA0MTAwIHVzZXMKKyAgICA0MjAwIHVzZXMKKyAgICA0MzAwIHVzZXMKKyAgICA0NDAwIHVzZXMKKyAgICA0NTAwIHVzZXMKKyAgICA0NjAwIHVzZXMKKyAgICA0NzAwIHVzZXMKKyAgICA0ODAwIHVzZXMKKyAgICA0OTAwIHVzZXMKKyAgICA1MDAwIHVzZXMKKyAgICA1MTAwIHVzZXMKKyAgICA1MjAwIHVzZXMKKyAgICA1MzAwIHVzZXMKKyAgICA1NDAwIHVzZXMKKyAgICA1NTAwIHVzZXMKKyAgICA1NjAwIHVzZXMKKyAgICA1NzAwIHVzZXMKKyAgICA1ODAwIHVzZXMKKyAgICA1OTAwIHVzZXMKKyAgICA2MDAwIHVzZXMKKyAgICA2MTAwIHVzZXMKKyAgICA2MjAwIHVzZXMKKyAgICA2MzAwIHVzZXMKKyAgICA2NDAwIHVzZXMKKyAgICA2NTAwIHVzZXMKKyAgICA2NjAwIHVzZXMKKyAgICA2NzAwIHVzZXMKKyAgICA2ODAwIHVzZXMKKyAgICA2OTAwIHVzZXMKKyAgICA3MDAwIHVzZXMKKyAgICA3MTAwIHVzZXMKKyAgICA3MjAwIHVzZXMKKyAgICA3MzAwIHVzZXMKKyAgICA3NDAwIHVzZXMKKyAgICA3NTAwIHVzZXMKKyAgICA3NjAwIHVzZXMKKyAgICA3NzAwIHVzZXMKKyAgICA3ODAwIHVzZXMKKyAgICA3OTAwIHVzZXMKKyAgICA4MDAwIHVzZXMKKyAgICA4MTAwIHVzZXMKKyAgICA4MjAwIHVzZXMKKyAgICA4MzAwIHVzZXMKKyAgICA4NDAwIHVzZXMKKyAgICA4NTAwIHVzZXMKKyAgICA4NjAwIHVzZXMKKyAgICA4NzAwIHVzZXMKKyAgICA4ODAwIHVzZXMKKyAgICA4OTAwIHVzZXMKKyAgICA5MDAwIHVzZXMKKyAgICA5MTAwIHVzZXMKKyAgICA5MjAwIHVzZXMKKyAgICA5MzAwIHVzZXMKKyAgICA5NDAwIHVzZXMKKyAgICA5NTAwIHVzZXMKKyAgICA5NjAwIHVzZXMKKyAgICA5NzAwIHVzZXMKKyAgICA5ODAwIHVzZXMKKyAgICA5OTAwIHVzZXMKKyAgICAxMDAwMCB1c2VzCisgICAgMTAxMDAgdXNlcworICAgIDEwMjAwIHVzZXMKKyAgICAxMDMwMCB1c2VzCisgICAgMTA0MDAgdXNlcworICAgIDEwNTAwIHVzZXMKKyAgICAxMDYwMCB1c2VzCisgICAgMTA3MDAgdXNlcworICAgIDEwODAwIHVzZXMKKyAgICAxMDkwMCB1c2VzCisgICAgMTEwMDAgdXNlcworICAgIDExMTAwIHVzZXMKKyAgICAxMTIwMCB1c2VzCisgICAgMTEzMDAgdXNlcworICAgIDExNDAwIHVzZXMKKyAgICAxMTUwMCB1c2VzCisgICAgMTE2MDAgdXNlcworICAgIDExNzAwIHVzZXMKKyAgICAxMTgwMCB1c2VzCisgICAgMTE5MDAgdXNlcworICAgIDEyMDAwIHVzZXMKKyAgICAxMjEwMCB1c2VzCisgICAgMTIyMDAgdXNlcworICAgIDEyMzAwIHVzZXMKKyAgICAxMjQwMCB1c2VzCisgICAgMTI1MDAgdXNlcworICAgIDEyNjAwIHVzZXMKKyAgICAxMjcwMCB1c2VzCisgICAgMTI4MDAgdXNlcworICAgIDEyOTAwIHVzZXMKKyAgICAxMzAwMCB1c2VzCisgICAgMTMxMDAgdXNlcworICAgIDEzMjAwIHVzZXMKKyAgICAxMzMwMCB1c2VzCisgICAgMTM0MDAgdXNlcworICAgIDEzNTAwIHVzZXMKKyAgICAxMzYwMCB1c2VzCisgICAgMTM3MDAgdXNlcworICAgIDEzODAwIHVzZXMKKyAgICAxMzkwMCB1c2VzCisgICAgMTQwMDAgdXNlcworICAgIDE0MTAwIHVzZXMKK1JlYWRpbmcgInNreTEzMF9mZF9zY19oZF9fZGx5Z2F0ZTRzZDNfMSIuCitSZWFkaW5nICJzcGltX3RvcCIuCisgICAgMTAwIHVzZXMKKyAgICAyMDAgdXNlcworICAgIDMwMCB1c2VzCisgICAgNDAwIHVzZXMKKyAgICA1MDAgdXNlcworICAgIDYwMCB1c2VzCisgICAgNzAwIHVzZXMKKyAgICA4MDAgdXNlcworICAgIDkwMCB1c2VzCisgICAgMTAwMCB1c2VzCisgICAgMTEwMCB1c2VzCisgICAgMTIwMCB1c2VzCisgICAgMTMwMCB1c2VzCisgICAgMTQwMCB1c2VzCisgICAgMTUwMCB1c2VzCisgICAgMTYwMCB1c2VzCisgICAgMTcwMCB1c2VzCisgICAgMTgwMCB1c2VzCisgICAgMTkwMCB1c2VzCisgICAgMjAwMCB1c2VzCisgICAgMjEwMCB1c2VzCisgICAgMjIwMCB1c2VzCisgICAgMjMwMCB1c2VzCisgICAgMjQwMCB1c2VzCisgICAgMjUwMCB1c2VzCisgICAgMjYwMCB1c2VzCisgICAgMjcwMCB1c2VzCisgICAgMjgwMCB1c2VzCisgICAgMjkwMCB1c2VzCisgICAgMzAwMCB1c2VzCisgICAgMzEwMCB1c2VzCisgICAgMzIwMCB1c2VzCisgICAgMzMwMCB1c2VzCisgICAgMzQwMCB1c2VzCisgICAgMzUwMCB1c2VzCisgICAgMzYwMCB1c2VzCisgICAgMzcwMCB1c2VzCisgICAgMzgwMCB1c2VzCisgICAgMzkwMCB1c2VzCisgICAgNDAwMCB1c2VzCisgICAgNDEwMCB1c2VzCisgICAgNDIwMCB1c2VzCisgICAgNDMwMCB1c2VzCisgICAgNDQwMCB1c2VzCisgICAgNDUwMCB1c2VzCisgICAgNDYwMCB1c2VzCisgICAgNDcwMCB1c2VzCisgICAgNDgwMCB1c2VzCisgICAgNDkwMCB1c2VzCisgICAgNTAwMCB1c2VzCisgICAgNTEwMCB1c2VzCisgICAgNTIwMCB1c2VzCisgICAgNTMwMCB1c2VzCisgICAgNTQwMCB1c2VzCisgICAgNTUwMCB1c2VzCisgICAgNTYwMCB1c2VzCisgICAgNTcwMCB1c2VzCisgICAgNTgwMCB1c2VzCisgICAgNTkwMCB1c2VzCisgICAgNjAwMCB1c2VzCisgICAgNjEwMCB1c2VzCisgICAgNjIwMCB1c2VzCisgICAgNjMwMCB1c2VzCisgICAgNjQwMCB1c2VzCisgICAgNjUwMCB1c2VzCisgICAgNjYwMCB1c2VzCisgICAgNjcwMCB1c2VzCisgICAgNjgwMCB1c2VzCisgICAgNjkwMCB1c2VzCisgICAgNzAwMCB1c2VzCisgICAgNzEwMCB1c2VzCisgICAgNzIwMCB1c2VzCisgICAgNzMwMCB1c2VzCisgICAgNzQwMCB1c2VzCisgICAgNzUwMCB1c2VzCisgICAgNzYwMCB1c2VzCisgICAgNzcwMCB1c2VzCisgICAgNzgwMCB1c2VzCisgICAgNzkwMCB1c2VzCisgICAgODAwMCB1c2VzCisgICAgODEwMCB1c2VzCisgICAgODIwMCB1c2VzCisgICAgODMwMCB1c2VzCisgICAgODQwMCB1c2VzCisgICAgODUwMCB1c2VzCisgICAgODYwMCB1c2VzCisgICAgODcwMCB1c2VzCisgICAgODgwMCB1c2VzCisgICAgODkwMCB1c2VzCisgICAgOTAwMCB1c2VzCisgICAgOTEwMCB1c2VzCisgICAgOTIwMCB1c2VzCisgICAgOTMwMCB1c2VzCisgICAgOTQwMCB1c2VzCisgICAgOTUwMCB1c2VzCisgICAgOTYwMCB1c2VzCisgICAgOTcwMCB1c2VzCisgICAgOTgwMCB1c2VzCisgICAgOTkwMCB1c2VzCisgICAgMTAwMDAgdXNlcworICAgIDEwMTAwIHVzZXMKKyAgICAxMDIwMCB1c2VzCisgICAgMTAzMDAgdXNlcworICAgIDEwNDAwIHVzZXMKKyAgICAxMDUwMCB1c2VzCisgICAgMTA2MDAgdXNlcworICAgIDEwNzAwIHVzZXMKKyAgICAxMDgwMCB1c2VzCisgICAgMTA5MDAgdXNlcworICAgIDExMDAwIHVzZXMKKyAgICAxMTEwMCB1c2VzCisgICAgMTEyMDAgdXNlcworICAgIDExMzAwIHVzZXMKKyAgICAxMTQwMCB1c2VzCisgICAgMTE1MDAgdXNlcworICAgIDExNjAwIHVzZXMKKyAgICAxMTcwMCB1c2VzCisgICAgMTE4MDAgdXNlcworICAgIDExOTAwIHVzZXMKKyAgICAxMjAwMCB1c2VzCisgICAgMTIxMDAgdXNlcworICAgIDEyMjAwIHVzZXMKKyAgICAxMjMwMCB1c2VzCisgICAgMTI0MDAgdXNlcworICAgIDEyNTAwIHVzZXMKKyAgICAxMjYwMCB1c2VzCisgICAgMTI3MDAgdXNlcworICAgIDEyODAwIHVzZXMKKyAgICAxMjkwMCB1c2VzCisgICAgMTMwMDAgdXNlcworICAgIDEzMTAwIHVzZXMKKyAgICAxMzIwMCB1c2VzCisgICAgMTMzMDAgdXNlcworICAgIDEzNDAwIHVzZXMKKyAgICAxMzUwMCB1c2VzCisgICAgMTM2MDAgdXNlcworICAgIDEzNzAwIHVzZXMKKyAgICAxMzgwMCB1c2VzCisgICAgMTM5MDAgdXNlcworICAgIDE0MDAwIHVzZXMKKyAgICAxNDEwMCB1c2VzCisgICAgMTQyMDAgdXNlcworICAgIDE0MzAwIHVzZXMKKyAgICAxNDQwMCB1c2VzCisgICAgMTQ1MDAgdXNlcworICAgIDE0NjAwIHVzZXMKKyAgICAxNDcwMCB1c2VzCisgICAgMTQ4MDAgdXNlcworICAgIDE0OTAwIHVzZXMKKyAgICAxNTAwMCB1c2VzCisgICAgMTUxMDAgdXNlcworICAgIDE1MjAwIHVzZXMKKyAgICAxNTMwMCB1c2VzCisgICAgMTU0MDAgdXNlcworICAgIDE1NTAwIHVzZXMKKyAgICAxNTYwMCB1c2VzCisgICAgMTU3MDAgdXNlcworICAgIDE1ODAwIHVzZXMKKyAgICAxNTkwMCB1c2VzCisgICAgMTYwMDAgdXNlcworICAgIDE2MTAwIHVzZXMKKyAgICAxNjIwMCB1c2VzCisgICAgMTYzMDAgdXNlcworICAgIDE2NDAwIHVzZXMKKyAgICAxNjUwMCB1c2VzCisgICAgMTY2MDAgdXNlcworICAgIDE2NzAwIHVzZXMKKyAgICAxNjgwMCB1c2VzCisgICAgMTY5MDAgdXNlcworICAgIDE3MDAwIHVzZXMKKyAgICAxNzEwMCB1c2VzCisgICAgMTcyMDAgdXNlcworICAgIDE3MzAwIHVzZXMKKyAgICAxNzQwMCB1c2VzCisgICAgMTc1MDAgdXNlcworICAgIDE3NjAwIHVzZXMKKyAgICAxNzcwMCB1c2VzCisgICAgMTc4MDAgdXNlcworICAgIDE3OTAwIHVzZXMKKyAgICAxODAwMCB1c2VzCisgICAgMTgxMDAgdXNlcworICAgIDE4MjAwIHVzZXMKKyAgICAxODMwMCB1c2VzCisgICAgMTg0MDAgdXNlcworICAgIDE4NTAwIHVzZXMKKyAgICAxODYwMCB1c2VzCisgICAgMTg3MDAgdXNlcworICAgIDE4ODAwIHVzZXMKKyAgICAxODkwMCB1c2VzCisgICAgMTkwMDAgdXNlcworICAgIDE5MTAwIHVzZXMKKyAgICAxOTIwMCB1c2VzCisgICAgMTkzMDAgdXNlcworICAgIDE5NDAwIHVzZXMKKyAgICAxOTUwMCB1c2VzCisgICAgMTk2MDAgdXNlcworICAgIDE5NzAwIHVzZXMKKyAgICAxOTgwMCB1c2VzCisgICAgMTk5MDAgdXNlcworICAgIDIwMDAwIHVzZXMKKyAgICAyMDEwMCB1c2VzCisgICAgMjAyMDAgdXNlcworICAgIDIwMzAwIHVzZXMKKyAgICAyMDQwMCB1c2VzCisgICAgMjA1MDAgdXNlcworICAgIDIwNjAwIHVzZXMKKyAgICAyMDcwMCB1c2VzCisgICAgMjA4MDAgdXNlcworICAgIDIwOTAwIHVzZXMKKyAgICAyMTAwMCB1c2VzCisgICAgMjExMDAgdXNlcworICAgIDIxMjAwIHVzZXMKKyAgICAyMTMwMCB1c2VzCisgICAgMjE0MDAgdXNlcworICAgIDIxNTAwIHVzZXMKKyAgICAyMTYwMCB1c2VzCisgICAgMjE3MDAgdXNlcworICAgIDIxODAwIHVzZXMKKyAgICAyMTkwMCB1c2VzCisgICAgMjIwMDAgdXNlcworICAgIDIyMTAwIHVzZXMKKyAgICAyMjIwMCB1c2VzCisgICAgMjIzMDAgdXNlcworICAgIDIyNDAwIHVzZXMKKyAgICAyMjUwMCB1c2VzCisgICAgMjI2MDAgdXNlcworICAgIDIyNzAwIHVzZXMKKyAgICAyMjgwMCB1c2VzCisgICAgMjI5MDAgdXNlcworICAgIDIzMDAwIHVzZXMKKyAgICAyMzEwMCB1c2VzCisgICAgMjMyMDAgdXNlcworICAgIDIzMzAwIHVzZXMKKyAgICAyMzQwMCB1c2VzCisgICAgMjM1MDAgdXNlcworICAgIDIzNjAwIHVzZXMKKyAgICAyMzcwMCB1c2VzCisgICAgMjM4MDAgdXNlcworICAgIDIzOTAwIHVzZXMKKyAgICAyNDAwMCB1c2VzCisgICAgMjQxMDAgdXNlcworICAgIDI0MjAwIHVzZXMKKyAgICAyNDMwMCB1c2VzCisgICAgMjQ0MDAgdXNlcworICAgIDI0NTAwIHVzZXMKKyAgICAyNDYwMCB1c2VzCisgICAgMjQ3MDAgdXNlcworICAgIDI0ODAwIHVzZXMKKyAgICAyNDkwMCB1c2VzCisgICAgMjUwMDAgdXNlcworICAgIDI1MTAwIHVzZXMKKyAgICAyNTIwMCB1c2VzCisgICAgMjUzMDAgdXNlcworICAgIDI1NDAwIHVzZXMKKyAgICAyNTUwMCB1c2VzCisgICAgMjU2MDAgdXNlcworICAgIDI1NzAwIHVzZXMKKyAgICAyNTgwMCB1c2VzCisgICAgMjU5MDAgdXNlcworICAgIDI2MDAwIHVzZXMKKyAgICAyNjEwMCB1c2VzCisgICAgMjYyMDAgdXNlcworICAgIDI2MzAwIHVzZXMKKyAgICAyNjQwMCB1c2VzCisgICAgMjY1MDAgdXNlcworICAgIDI2NjAwIHVzZXMKKyAgICAyNjcwMCB1c2VzCisgICAgMjY4MDAgdXNlcworICAgIDI2OTAwIHVzZXMKKyAgICAyNzAwMCB1c2VzCisgICAgMjcxMDAgdXNlcworICAgIDI3MjAwIHVzZXMKKyAgICAyNzMwMCB1c2VzCitSZWFkaW5nICJ1c2VyX3Byb2plY3Rfd3JhcHBlciIuCitbSU5GT106IExvYWRpbmcgdXNlcl9wcm9qZWN0X3dyYXBwZXIKKworRFJDIHN0eWxlIGlzIG5vdyAiZHJjKGZ1bGwpIgorTG9hZGluZyBEUkMgQ0lGIHN0eWxlLgorW0lORk9dOiBDT1VOVDogMQorW0lORk9dOiBTaG91bGQgYmUgZGl2aWRlZCBieSAzIG9yIDQKK1tJTkZPXTogRFJDIENoZWNraW5nIERPTkUgKC9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9jaGVja3MvdXNlcl9wcm9qZWN0X3dyYXBwZXIubWFnaWMuZHJjKQorW0lORk9dOiBTYXZpbmcgbWFnIHZpZXcgd2l0aCBEUkMgZXJyb3JzKC9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9jaGVja3MvdXNlcl9wcm9qZWN0X3dyYXBwZXIubWFnaWMuZHJjLm1hZykKK1tJTkZPXTogU2F2ZWQKZGlmZiAtLWdpdCBhL2NoZWNrcy9tYW5pZmVzdF9jaGVjay5sb2cgYi9jaGVja3MvbWFuaWZlc3RfY2hlY2subG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzMDA1YTcKLS0tIC9kZXYvbnVsbAorKysgYi9jaGVja3MvbWFuaWZlc3RfY2hlY2subG9nCkBAIC0wLDAgKzEsNDcgQEAKK3Zlcmlsb2cvcnRsL0RGRlJBTS52OiBPSwordmVyaWxvZy9ydGwvREZGUkFNQkIudjogT0sKK3Zlcmlsb2cvcnRsL19fdXByal9hbmFsb2dfbmV0bGlzdHMudjogT0sKK3Zlcmlsb2cvcnRsL19fdXByal9uZXRsaXN0cy52OiBPSwordmVyaWxvZy9ydGwvX191c2VyX2FuYWxvZ19wcm9qZWN0X3dyYXBwZXIudjogT0sKK3Zlcmlsb2cvcnRsL19fdXNlcl9wcm9qZWN0X3dyYXBwZXIudjogT0sKK3Zlcmlsb2cvcnRsL2NhcmF2YW4udjogT0sKK3Zlcmlsb2cvcnRsL2NhcmF2YW5fbmV0bGlzdHMudjogT0sKK3Zlcmlsb2cvcnRsL2NhcmF2ZWwudjogT0sKK3Zlcmlsb2cvcnRsL2NhcmF2ZWxfY2xvY2tpbmcudjogT0sKK3Zlcmlsb2cvcnRsL2NoaXBfaW8udjogT0sKK3Zlcmlsb2cvcnRsL2NoaXBfaW9fYWx0LnY6IE9LCit2ZXJpbG9nL3J0bC9jbG9ja19kaXYudjogT0sKK3Zlcmlsb2cvcnRsL2NvbnZlcnRfZ3Bpb19zaWdzLnY6IE9LCit2ZXJpbG9nL3J0bC9jb3VudGVyX3RpbWVyX2hpZ2gudjogT0sKK3Zlcmlsb2cvcnRsL2NvdW50ZXJfdGltZXJfbG93LnY6IE9LCit2ZXJpbG9nL3J0bC9kaWdpdGFsX3BsbC52OiBPSwordmVyaWxvZy9ydGwvZGlnaXRhbF9wbGxfY29udHJvbGxlci52OiBPSwordmVyaWxvZy9ydGwvZ3Bpb19jb250cm9sX2Jsb2NrLnY6IE9LCit2ZXJpbG9nL3J0bC9ncGlvX3diLnY6IE9LCit2ZXJpbG9nL3J0bC9ob3VzZWtlZXBpbmdfc3BpLnY6IE9LCit2ZXJpbG9nL3J0bC9sYV93Yi52OiBPSwordmVyaWxvZy9ydGwvbWVtX3diLnY6IE9LCit2ZXJpbG9nL3J0bC9tZ210X2NvcmUudjogT0sKK3Zlcmlsb2cvcnRsL21nbXRfcHJvdGVjdC52OiBPSwordmVyaWxvZy9ydGwvbWdtdF9wcm90ZWN0X2h2LnY6IE9LCit2ZXJpbG9nL3J0bC9tZ210X3NvYy52OiBPSwordmVyaWxvZy9ydGwvbXByajJfbG9naWNfaGlnaC52OiBPSwordmVyaWxvZy9ydGwvbXByal9jdHJsLnY6IE9LCit2ZXJpbG9nL3J0bC9tcHJqX2lvLnY6IE9LCit2ZXJpbG9nL3J0bC9tcHJqX2xvZ2ljX2hpZ2gudjogT0sKK3Zlcmlsb2cvcnRsL3BhZHMudjogT0sKK3Zlcmlsb2cvcnRsL3BpY29ydjMyLnY6IE9LCit2ZXJpbG9nL3J0bC9yaW5nX29zYzJ4MTMudjogT0sKK3Zlcmlsb2cvcnRsL3NpbXBsZV9wb3IudjogT0sKK3Zlcmlsb2cvcnRsL3NpbXBsZV9zcGlfbWFzdGVyLnY6IE9LCit2ZXJpbG9nL3J0bC9zaW1wbGV1YXJ0LnY6IE9LCit2ZXJpbG9nL3J0bC9za3kxMzBfZmRfc2NfaHZsX19sc2J1Zmh2Mmx2XzFfd3JhcHBlZC52OiBPSwordmVyaWxvZy9ydGwvc3BpbWVtaW8udjogT0sKK3Zlcmlsb2cvcnRsL3NyYW1fMXJ3MXJfMzJfMjU2Xzhfc2t5MTMwLnY6IE9LCit2ZXJpbG9nL3J0bC9zdG9yYWdlLnY6IE9LCit2ZXJpbG9nL3J0bC9zdG9yYWdlX2JyaWRnZV93Yi52OiBPSwordmVyaWxvZy9ydGwvc3lzY3RybC52OiBPSwordmVyaWxvZy9ydGwvd2JfaW50ZXJjb24udjogT0sKK3NjcmlwdHMvc2V0X3VzZXJfaWQucHk6IE9LCitzY3JpcHRzL2dlbmVyYXRlX2ZpbGwucHk6IE9LCitzY3JpcHRzL2NvbXBvc2l0b3IucHk6IE9LCmRpZmYgLS1naXQgYS9jaGVja3Mvc3BkeF9jb21wbGlhbmNlX3JlcG9ydC5sb2cgYi9jaGVja3Mvc3BkeF9jb21wbGlhbmNlX3JlcG9ydC5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGNkZmRlZgotLS0gL2Rldi9udWxsCisrKyBiL2NoZWNrcy9zcGR4X2NvbXBsaWFuY2VfcmVwb3J0LmxvZwpAQCAtMCwwICsxLDExMTIgQEAKK0ZVTEwgUlVOIExPRzoKK1NQRFggTk9OLUNPTVBMSUFOVCBGSUxFUworL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL1JFQURNRS5tZAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL3NwZWYvdXNlcl9wcm9qZWN0X3dyYXBwZXIuc3BlZgorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL3NwZWYvd2JfaG9zdC5zcGVmCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvc3BlZi9zZHJjX3RvcC5zcGVmCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvc3BlZi93Yl9pbnRlcmNvbm5lY3Quc3BlZgorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL3NwZWYvc2NyMV90b3Bfd2Iuc3BlZgorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL3NwZWYvZ2xibF9jZmcuc3BlZgorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL3NwZWYvdGVzdC5zcGVmCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvc3BlZi91YXJ0X2NvcmUuc3BlZgorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL3NwZWYvY2xrX3NrZXdfYWRqdXN0LnNwZWYKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9zcGVmL2Nsa19idWYuc3BlZgorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL3NwZWYvc3BpbV90b3Auc3BlZgorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL2RlZmF1bHQuY3ZjcmMKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zY3JfY29yZS9hYQorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9jb3JlL3J1bnMvc2NyX2NvcmUvY29uZmlnLnRjbAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9jb3JlL3J1bnMvc2NyX2NvcmUvdG1wL21hZ2ljX3NwaWNlLnRjbAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9jb3JlL3J1bnMvc2NyX2NvcmUvdG1wL29wdC5saWIKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zY3JfY29yZS9ydW5zL3Njcl9jb3JlL3RtcC90cmltbWVkLmxpYgorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9jb3JlL3J1bnMvc2NyX2NvcmUvdG1wL3RyYWNrc19jb3B5LmluZm8KKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zY3JfY29yZS9ydW5zL3Njcl9jb3JlL3RtcC9za3kxMzBfZmRfc2NfaGRfX3R0XzAyNUNfMXY4MC5ub19wZy5saWIKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zY3JfY29yZS9ydW5zL3Njcl9jb3JlL3RtcC9zeW50aGVzaXMvaGllcmFyY2h5LmRvdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9jb3JlL3J1bnMvc2NyX2NvcmUvdG1wL3N5bnRoZXNpcy95b3N5cy5zZGMKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zY3JfY29yZS9ydW5zL3Njcl9jb3JlL3RtcC9yb3V0aW5nLzIwLWZhc3Ryb3V0ZV80Lmd1aWRlCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2NyX2NvcmUvcnVucy9zY3JfY29yZS90bXAvcm91dGluZy8yNC10cml0b25Sb3V0ZS5wYXJhbQorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9jb3JlL3J1bnMvc2NyX2NvcmUvdG1wL3JvdXRpbmcvMTctZmFzdHJvdXRlLmd1aWRlCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2NyX2NvcmUvcnVucy9zY3JfY29yZS90bXAvcm91dGluZy8yMS1mYXN0cm91dGVfNS5ndWlkZQorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9jb3JlL3J1bnMvc2NyX2NvcmUvdG1wL3JvdXRpbmcvMjQtdHJpdG9uUm91dGUuZ3VpZGUKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zY3JfY29yZS9ydW5zL3Njcl9jb3JlL3RtcC9yb3V0aW5nLzE5LWZhc3Ryb3V0ZV8zLmd1aWRlCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2NyX2NvcmUvcnVucy9zY3JfY29yZS90bXAvcm91dGluZy8xOC1mYXN0cm91dGVfMi5ndWlkZQorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9jb3JlL3J1bnMvc2NyX2NvcmUvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9faW52XzQuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2NyX2NvcmUvcnVucy9zY3JfY29yZS90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19jb25iXzEuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2NyX2NvcmUvcnVucy9zY3JfY29yZS90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19ub3IyXzQuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2NyX2NvcmUvcnVucy9zY3JfY29yZS90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19hbmQyXzQuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2NyX2NvcmUvcnVucy9zY3JfY29yZS90bXAvbWFnaWMvc2NyMV9jb3JlX3RvcC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zY3JfY29yZS9ydW5zL3Njcl9jb3JlL3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX2EyMW9pXzQuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2NyX2NvcmUvcnVucy9zY3JfY29yZS90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19maWxsXzIuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2NyX2NvcmUvcnVucy9zY3JfY29yZS90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19hMzJvXzQuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2NyX2NvcmUvcnVucy9zY3JfY29yZS90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19vcjJfNC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zY3JfY29yZS9ydW5zL3Njcl9jb3JlL3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX2Nsa2J1Zl8xNi5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zY3JfY29yZS9ydW5zL3Njcl9jb3JlL3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX2RlY2FwXzQuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2NyX2NvcmUvcnVucy9zY3JfY29yZS90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19kaW9kZV8yLmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9jb3JlL3J1bnMvc2NyX2NvcmUvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fYnVmXzQuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2NyX2NvcmUvcnVucy9zY3JfY29yZS90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19idWZfOC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zY3JfY29yZS9ydW5zL3Njcl9jb3JlL3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX25hbmQyXzQuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2NyX2NvcmUvcnVucy9zY3JfY29yZS90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19hMjExb180LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9jb3JlL3J1bnMvc2NyX2NvcmUvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fYTIxb180LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9jb3JlL3J1bnMvc2NyX2NvcmUvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fYTIxYm9pXzQuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2NyX2NvcmUvcnVucy9zY3JfY29yZS90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19idWZfMi5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zY3JfY29yZS9ydW5zL3Njcl9jb3JlL3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX29yM180LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9jb3JlL3J1bnMvc2NyX2NvcmUvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2NyX2NvcmUvcnVucy9zY3JfY29yZS90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19hMmJiMm9fNC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zY3JfY29yZS9ydW5zL3Njcl9jb3JlL3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX2FuZDRfNC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zY3JfY29yZS9ydW5zL3Njcl9jb3JlL3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX2RlY2FwXzMuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2NyX2NvcmUvcnVucy9zY3JfY29yZS90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19vMjFhaV80LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9jb3JlL3J1bnMvc2NyX2NvcmUvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fYTIyb2lfNC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zY3JfY29yZS9ydW5zL3Njcl9jb3JlL3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX2RmcnRwXzQuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2NyX2NvcmUvcnVucy9zY3JfY29yZS90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19kZnh0cF80LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9jb3JlL3J1bnMvc2NyX2NvcmUvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fdGFwdnB3cnZnbmRfMS5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zY3JfY29yZS9ydW5zL3Njcl9jb3JlL3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX2EyMTExb180LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9jb3JlL3J1bnMvc2NyX2NvcmUvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fbzQxYV80LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9jb3JlL3J1bnMvc2NyX2NvcmUvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fZmlsbF8xLmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9jb3JlL3J1bnMvc2NyX2NvcmUvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fY2xrYnVmXzEuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2NyX2NvcmUvcnVucy9zY3JfY29yZS90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19vMzJhXzQuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2NyX2NvcmUvcnVucy9zY3JfY29yZS90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF82LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9jb3JlL3J1bnMvc2NyX2NvcmUvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fb3I0XzQuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2NyX2NvcmUvcnVucy9zY3JfY29yZS90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19hMjFib180LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9jb3JlL3J1bnMvc2NyX2NvcmUvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fZGVjYXBfOC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zY3JfY29yZS9ydW5zL3Njcl9jb3JlL3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX2ludl8yLmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9jb3JlL3J1bnMvc2NyX2NvcmUvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fbzIxYV80LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9jb3JlL3J1bnMvc2NyX2NvcmUvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fbzIyYV80LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9jb3JlL3J1bnMvc2NyX2NvcmUvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fYW5kM180LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9jb3JlL3J1bnMvc2NyX2NvcmUvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fZGZzdHBfNC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zY3JfY29yZS9ydW5zL3Njcl9jb3JlL3RtcC9sdnMvc2V0dXBfZmlsZS5sZWYubHZzCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2NyX2NvcmUvcnVucy9zY3JfY29yZS9yZXBvcnRzL3J1bnRpbWVfc3VtbWFyeV9yZXBvcnQucnB0LnBhcnNhYmxlCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2NyX2NvcmUvcnVucy9zY3JfY29yZS9yZXBvcnRzL3J1bnRpbWVfc3VtbWFyeV9yZXBvcnQucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2NyX2NvcmUvcnVucy9zY3JfY29yZS9yZXBvcnRzL21hbnVmYWN0dXJhYmlsaXR5X3JlcG9ydC5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zY3JfY29yZS9ydW5zL3Njcl9jb3JlL3JlcG9ydHMvc3ludGhlc2lzLzEteW9zeXNfNC5jaGsucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2NyX2NvcmUvcnVucy9zY3JfY29yZS9yZXBvcnRzL3N5bnRoZXNpcy8yLW9wZW5zdGEubWluX21heC5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zY3JfY29yZS9ydW5zL3Njcl9jb3JlL3JlcG9ydHMvc3ludGhlc2lzLzEteW9zeXNfcHJlLnN0YXQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zY3JfY29yZS9ydW5zL3Njcl9jb3JlL3JlcG9ydHMvc3ludGhlc2lzLzItb3BlbnN0YV90bnMucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2NyX2NvcmUvcnVucy9zY3JfY29yZS9yZXBvcnRzL3N5bnRoZXNpcy8xMS1vcGVuc3RhX3Bvc3Rfb3BlbnBoeXN5bi5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zY3JfY29yZS9ydW5zL3Njcl9jb3JlL3JlcG9ydHMvc3ludGhlc2lzLzExLW9wZW5zdGFfcG9zdF9vcGVucGh5c3luLnNsZXcucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2NyX2NvcmUvcnVucy9zY3JfY29yZS9yZXBvcnRzL3N5bnRoZXNpcy8xMS1vcGVuc3RhX3Bvc3Rfb3BlbnBoeXN5bl90bnMucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2NyX2NvcmUvcnVucy9zY3JfY29yZS9yZXBvcnRzL3N5bnRoZXNpcy8yNy1vcGVuc3RhX3NwZWZfd25zLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9jb3JlL3J1bnMvc2NyX2NvcmUvcmVwb3J0cy9zeW50aGVzaXMvMS15b3N5c19kZmYuc3RhdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9jb3JlL3J1bnMvc2NyX2NvcmUvcmVwb3J0cy9zeW50aGVzaXMvMTEtb3BlbnN0YV9wb3N0X29wZW5waHlzeW4ubWluX21heC5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zY3JfY29yZS9ydW5zL3Njcl9jb3JlL3JlcG9ydHMvc3ludGhlc2lzLzExLW9wZW5zdGFfcG9zdF9vcGVucGh5c3luLnRpbWluZy5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zY3JfY29yZS9ydW5zL3Njcl9jb3JlL3JlcG9ydHMvc3ludGhlc2lzLzI3LW9wZW5zdGFfc3BlZi5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zY3JfY29yZS9ydW5zL3Njcl9jb3JlL3JlcG9ydHMvc3ludGhlc2lzLzItb3BlbnN0YV93bnMucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2NyX2NvcmUvcnVucy9zY3JfY29yZS9yZXBvcnRzL3N5bnRoZXNpcy8yNy1vcGVuc3RhX3NwZWZfdG5zLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9jb3JlL3J1bnMvc2NyX2NvcmUvcmVwb3J0cy9zeW50aGVzaXMvMi1vcGVuc3RhLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9jb3JlL3J1bnMvc2NyX2NvcmUvcmVwb3J0cy9zeW50aGVzaXMvMjctb3BlbnN0YV9zcGVmLnRpbWluZy5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zY3JfY29yZS9ydW5zL3Njcl9jb3JlL3JlcG9ydHMvc3ludGhlc2lzLzItb3BlbnN0YS5zbGV3LnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9jb3JlL3J1bnMvc2NyX2NvcmUvcmVwb3J0cy9zeW50aGVzaXMvMi1vcGVuc3RhLnRpbWluZy5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zY3JfY29yZS9ydW5zL3Njcl9jb3JlL3JlcG9ydHMvc3ludGhlc2lzLzExLW9wZW5zdGFfcG9zdF9vcGVucGh5c3luX3ducy5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zY3JfY29yZS9ydW5zL3Njcl9jb3JlL3JlcG9ydHMvc3ludGhlc2lzLzI3LW9wZW5zdGFfc3BlZi5taW5fbWF4LnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9jb3JlL3J1bnMvc2NyX2NvcmUvcmVwb3J0cy9zeW50aGVzaXMvMS15b3N5c180LnN0YXQucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2NyX2NvcmUvcnVucy9zY3JfY29yZS9yZXBvcnRzL3JvdXRpbmcvNDUtYW50ZW5uYS5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zY3JfY29yZS9ydW5zL3Njcl9jb3JlL3JlcG9ydHMvZmxvb3JwbGFuLzMtdmVyaWxvZzJkZWYuZGllX2FyZWEucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2NyX2NvcmUvcnVucy9zY3JfY29yZS9yZXBvcnRzL2Zsb29ycGxhbi8zLXZlcmlsb2cyZGVmLmNvcmVfYXJlYS5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zY3JfY29yZS9ydW5zL3Njcl9jb3JlL3JlcG9ydHMva2xheW91dC8zNy1rbGF5b3V0Lnhvci5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zY3JfY29yZS9ydW5zL3Njcl9jb3JlL3JlcG9ydHMva2xheW91dC8zOS1rbGF5b3V0Lnhvci5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zY3JfY29yZS9ydW5zL3Njcl9jb3JlL3JlcG9ydHMva2xheW91dC80My1rbGF5b3V0Lm1hZ2ljLmx5ZHJjCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2NyX2NvcmUvcnVucy9zY3JfY29yZS9yZXBvcnRzL3BsYWNlbWVudC85LW9wZW5waHlzeW5fYWxsY2hlY2tzLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9jb3JlL3J1bnMvc2NyX2NvcmUvcmVwb3J0cy9wbGFjZW1lbnQvOS1vcGVucGh5c3luX3Rucy5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zY3JfY29yZS9ydW5zL3Njcl9jb3JlL3JlcG9ydHMvcGxhY2VtZW50Lzktb3BlbnBoeXN5bl93bnMucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2NyX2NvcmUvcnVucy9zY3JfY29yZS9yZXBvcnRzL3BsYWNlbWVudC85LW9wZW5waHlzeW5fdmlvbGF0b3JzLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9jb3JlL3J1bnMvc2NyX2NvcmUvcmVzdWx0cy9zeW50aGVzaXMvc2NyMV9jb3JlX3RvcC5zeW50aGVzaXNfb3B0aW1pemVkLnYKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zY3JfY29yZS9ydW5zL3Njcl9jb3JlL3Jlc3VsdHMvc3ludGhlc2lzL3NjcjFfY29yZV90b3Auc3ludGhlc2lzX3ByZXJvdXRlLnYKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zY3JfY29yZS9ydW5zL3Njcl9jb3JlL3Jlc3VsdHMvc3ludGhlc2lzL3NjcjFfY29yZV90b3Auc3ludGhlc2lzX2N0cy52CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2NyX2NvcmUvcnVucy9zY3JfY29yZS9yZXN1bHRzL3N5bnRoZXNpcy9zY3IxX2NvcmVfdG9wLnN5bnRoZXNpcy52CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2NyX2NvcmUvcnVucy9zY3JfY29yZS9yZXN1bHRzL3JvdXRpbmcvc2NyMV9jb3JlX3RvcC5zcGVmCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2NyX2NvcmUvcnVucy9zY3JfY29yZS9yZXN1bHRzL3JvdXRpbmcvc2NyMV9jb3JlX3RvcC5kZWYucmVmCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2NyX2NvcmUvcnVucy9zY3JfY29yZS9yZXN1bHRzL21hZ2ljLy5tYWdpY3JjCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2NyX2NvcmUvcnVucy9zY3JfY29yZS9yZXN1bHRzL21hZ2ljL3NjcjFfY29yZV90b3AuZ2RzLmx5ZHJjCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2NyX2NvcmUvcnVucy9zY3JfY29yZS9yZXN1bHRzL2x2cy9zY3IxX2NvcmVfdG9wLmx2cy5sZWYuanNvbgorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9jb3JlL3J1bnMvc2NyX2NvcmUvcmVzdWx0cy9sdnMvc2NyMV9jb3JlX3RvcC5sdnMucG93ZXJlZC52CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2NyX2NvcmUvcnVucy9zY3JfY29yZS9yZXN1bHRzL2tsYXlvdXQvc2NyMV9jb3JlX3RvcC5seXAKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zeW50YWNvcmUvdW5jb25zdHJhaW50cy5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zeW50YWNvcmUvdGltaW5nLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3N5bnRhY29yZS9ydW5zL3N5bnRhY29yZS9jb25maWcudGNsCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc3ludGFjb3JlL3J1bnMvc3ludGFjb3JlL3RtcC9vcHQubGliCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc3ludGFjb3JlL3J1bnMvc3ludGFjb3JlL3RtcC90cmltbWVkLmxpYgorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3N5bnRhY29yZS9ydW5zL3N5bnRhY29yZS90bXAvdHJhY2tzX2NvcHkuaW5mbworL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3N5bnRhY29yZS9ydW5zL3N5bnRhY29yZS90bXAvc2t5MTMwX2ZkX3NjX2hkX190dF8wMjVDXzF2ODAubm9fcGcubGliCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc3ludGFjb3JlL3J1bnMvc3ludGFjb3JlL3RtcC9zeW50aGVzaXMvaGllcmFyY2h5LmRvdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3N5bnRhY29yZS9ydW5zL3N5bnRhY29yZS90bXAvc3ludGhlc2lzL3lvc3lzLnNkYworL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3N5bnRhY29yZS9ydW5zL3N5bnRhY29yZS90bXAvcm91dGluZy8yNS10cml0b25Sb3V0ZS5ndWlkZQorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3N5bnRhY29yZS9ydW5zL3N5bnRhY29yZS90bXAvcm91dGluZy8yMC1mYXN0cm91dGVfNC5ndWlkZQorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3N5bnRhY29yZS9ydW5zL3N5bnRhY29yZS90bXAvcm91dGluZy8xNy1mYXN0cm91dGUuZ3VpZGUKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zeW50YWNvcmUvcnVucy9zeW50YWNvcmUvdG1wL3JvdXRpbmcvMjEtZmFzdHJvdXRlXzUuZ3VpZGUKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zeW50YWNvcmUvcnVucy9zeW50YWNvcmUvdG1wL3JvdXRpbmcvMjItZmFzdHJvdXRlXzYuZ3VpZGUKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zeW50YWNvcmUvcnVucy9zeW50YWNvcmUvdG1wL3JvdXRpbmcvMTktZmFzdHJvdXRlXzMuZ3VpZGUKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zeW50YWNvcmUvcnVucy9zeW50YWNvcmUvdG1wL3JvdXRpbmcvMTgtZmFzdHJvdXRlXzIuZ3VpZGUKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zeW50YWNvcmUvcnVucy9zeW50YWNvcmUvdG1wL3JvdXRpbmcvMjUtdHJpdG9uUm91dGUucGFyYW0KKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zeW50YWNvcmUvcnVucy9zeW50YWNvcmUvcmVwb3J0cy9zeW50aGVzaXMvMS15b3N5c180LmNoay5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zeW50YWNvcmUvcnVucy9zeW50YWNvcmUvcmVwb3J0cy9zeW50aGVzaXMvMi1vcGVuc3RhLm1pbl9tYXgucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc3ludGFjb3JlL3J1bnMvc3ludGFjb3JlL3JlcG9ydHMvc3ludGhlc2lzLzEteW9zeXNfcHJlLnN0YXQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zeW50YWNvcmUvcnVucy9zeW50YWNvcmUvcmVwb3J0cy9zeW50aGVzaXMvMi1vcGVuc3RhX3Rucy5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zeW50YWNvcmUvcnVucy9zeW50YWNvcmUvcmVwb3J0cy9zeW50aGVzaXMvMTEtb3BlbnN0YV9wb3N0X29wZW5waHlzeW4ucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc3ludGFjb3JlL3J1bnMvc3ludGFjb3JlL3JlcG9ydHMvc3ludGhlc2lzLzExLW9wZW5zdGFfcG9zdF9vcGVucGh5c3luLnNsZXcucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc3ludGFjb3JlL3J1bnMvc3ludGFjb3JlL3JlcG9ydHMvc3ludGhlc2lzLzExLW9wZW5zdGFfcG9zdF9vcGVucGh5c3luX3Rucy5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zeW50YWNvcmUvcnVucy9zeW50YWNvcmUvcmVwb3J0cy9zeW50aGVzaXMvMS15b3N5c19kZmYuc3RhdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3N5bnRhY29yZS9ydW5zL3N5bnRhY29yZS9yZXBvcnRzL3N5bnRoZXNpcy8xMS1vcGVuc3RhX3Bvc3Rfb3BlbnBoeXN5bi5taW5fbWF4LnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3N5bnRhY29yZS9ydW5zL3N5bnRhY29yZS9yZXBvcnRzL3N5bnRoZXNpcy8xMS1vcGVuc3RhX3Bvc3Rfb3BlbnBoeXN5bi50aW1pbmcucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc3ludGFjb3JlL3J1bnMvc3ludGFjb3JlL3JlcG9ydHMvc3ludGhlc2lzLzItb3BlbnN0YV93bnMucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc3ludGFjb3JlL3J1bnMvc3ludGFjb3JlL3JlcG9ydHMvc3ludGhlc2lzLzItb3BlbnN0YS5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zeW50YWNvcmUvcnVucy9zeW50YWNvcmUvcmVwb3J0cy9zeW50aGVzaXMvMi1vcGVuc3RhLnNsZXcucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc3ludGFjb3JlL3J1bnMvc3ludGFjb3JlL3JlcG9ydHMvc3ludGhlc2lzLzItb3BlbnN0YS50aW1pbmcucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc3ludGFjb3JlL3J1bnMvc3ludGFjb3JlL3JlcG9ydHMvc3ludGhlc2lzLzExLW9wZW5zdGFfcG9zdF9vcGVucGh5c3luX3ducy5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zeW50YWNvcmUvcnVucy9zeW50YWNvcmUvcmVwb3J0cy9zeW50aGVzaXMvMS15b3N5c180LnN0YXQucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc3ludGFjb3JlL3J1bnMvc3ludGFjb3JlL3JlcG9ydHMvZmxvb3JwbGFuLzMtdmVyaWxvZzJkZWYuZGllX2FyZWEucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc3ludGFjb3JlL3J1bnMvc3ludGFjb3JlL3JlcG9ydHMvZmxvb3JwbGFuLzMtdmVyaWxvZzJkZWYuY29yZV9hcmVhLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3N5bnRhY29yZS9ydW5zL3N5bnRhY29yZS9yZXBvcnRzL3BsYWNlbWVudC85LW9wZW5waHlzeW5fYWxsY2hlY2tzLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3N5bnRhY29yZS9ydW5zL3N5bnRhY29yZS9yZXBvcnRzL3BsYWNlbWVudC85LW9wZW5waHlzeW5fdG5zLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3N5bnRhY29yZS9ydW5zL3N5bnRhY29yZS9yZXBvcnRzL3BsYWNlbWVudC85LW9wZW5waHlzeW5fd25zLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3N5bnRhY29yZS9ydW5zL3N5bnRhY29yZS9yZXN1bHRzL3N5bnRoZXNpcy9zY3IxX3RvcF93Yi5zeW50aGVzaXNfcHJlcm91dGUudgorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3N5bnRhY29yZS9ydW5zL3N5bnRhY29yZS9yZXN1bHRzL3N5bnRoZXNpcy9zY3IxX3RvcF93Yi5zeW50aGVzaXMudgorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3N5bnRhY29yZS9ydW5zL3N5bnRhY29yZS9yZXN1bHRzL3N5bnRoZXNpcy9zY3IxX3RvcF93Yi5zeW50aGVzaXNfY3RzLnYKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zeW50YWNvcmUvcnVucy9zeW50YWNvcmUvcmVzdWx0cy9zeW50aGVzaXMvc2NyMV90b3Bfd2Iuc3ludGhlc2lzX29wdGltaXplZC52CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc3ludGFjb3JlL3J1bnMvc3ludGFjb3JlL3Jlc3VsdHMvcm91dGluZy9zY3IxX3RvcF93Yi5kZWYucmVmCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvZ2xibF9jZmcvcnVucy9nbGJsX2NmZy9jb25maWcudGNsCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvZ2xibF9jZmcvcnVucy9nbGJsX2NmZy90bXAvbWFnaWNfc3BpY2UudGNsCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvZ2xibF9jZmcvcnVucy9nbGJsX2NmZy90bXAvb3B0LmxpYgorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL2dsYmxfY2ZnL3J1bnMvZ2xibF9jZmcvdG1wL3RyaW1tZWQubGliCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvZ2xibF9jZmcvcnVucy9nbGJsX2NmZy90bXAvdHJhY2tzX2NvcHkuaW5mbworL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL2dsYmxfY2ZnL3J1bnMvZ2xibF9jZmcvdG1wL3NreTEzMF9mZF9zY19oZF9fdHRfMDI1Q18xdjgwLm5vX3BnLmxpYgorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL2dsYmxfY2ZnL3J1bnMvZ2xibF9jZmcvdG1wL3N5bnRoZXNpcy9oaWVyYXJjaHkuZG90CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvZ2xibF9jZmcvcnVucy9nbGJsX2NmZy90bXAvc3ludGhlc2lzL3lvc3lzLnNkYworL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL2dsYmxfY2ZnL3J1bnMvZ2xibF9jZmcvdG1wL3JvdXRpbmcvMjMtdHJpdG9uUm91dGUuZ3VpZGUKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9nbGJsX2NmZy9ydW5zL2dsYmxfY2ZnL3RtcC9yb3V0aW5nLzIzLXRyaXRvblJvdXRlLnBhcmFtCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvZ2xibF9jZmcvcnVucy9nbGJsX2NmZy90bXAvcm91dGluZy8yMS1mYXN0cm91dGUuZ3VpZGUKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9nbGJsX2NmZy9ydW5zL2dsYmxfY2ZnL3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX25vcjJfNC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9nbGJsX2NmZy9ydW5zL2dsYmxfY2ZnL3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX2FuZDJfNC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9nbGJsX2NmZy9ydW5zL2dsYmxfY2ZnL3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX2ZpbGxfMi5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9nbGJsX2NmZy9ydW5zL2dsYmxfY2ZnL3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX2EzMm9fNC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9nbGJsX2NmZy9ydW5zL2dsYmxfY2ZnL3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX29yMl80LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL2dsYmxfY2ZnL3J1bnMvZ2xibF9jZmcvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fY2xrYnVmXzE2LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL2dsYmxfY2ZnL3J1bnMvZ2xibF9jZmcvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fZGVjYXBfNC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9nbGJsX2NmZy9ydW5zL2dsYmxfY2ZnL3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX2Rpb2RlXzIuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvZ2xibF9jZmcvcnVucy9nbGJsX2NmZy90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19uYW5kMl80LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL2dsYmxfY2ZnL3J1bnMvZ2xibF9jZmcvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fYnVmXzIuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvZ2xibF9jZmcvcnVucy9nbGJsX2NmZy90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19vcjNfNC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9nbGJsX2NmZy9ydW5zL2dsYmxfY2ZnL3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyLmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL2dsYmxfY2ZnL3J1bnMvZ2xibF9jZmcvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fYTJiYjJvXzQuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvZ2xibF9jZmcvcnVucy9nbGJsX2NmZy90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19hbmQ0XzQuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvZ2xibF9jZmcvcnVucy9nbGJsX2NmZy90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zLmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL2dsYmxfY2ZnL3J1bnMvZ2xibF9jZmcvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fZGZydHBfNC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9nbGJsX2NmZy9ydW5zL2dsYmxfY2ZnL3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX3RhcHZwd3J2Z25kXzEuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvZ2xibF9jZmcvcnVucy9nbGJsX2NmZy90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19maWxsXzEuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvZ2xibF9jZmcvcnVucy9nbGJsX2NmZy90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19jbGtidWZfMS5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9nbGJsX2NmZy9ydW5zL2dsYmxfY2ZnL3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX2RlY2FwXzYuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvZ2xibF9jZmcvcnVucy9nbGJsX2NmZy90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19vcjRfNC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9nbGJsX2NmZy9ydW5zL2dsYmxfY2ZnL3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX2RlY2FwXzguZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvZ2xibF9jZmcvcnVucy9nbGJsX2NmZy90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19pbnZfMi5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9nbGJsX2NmZy9ydW5zL2dsYmxfY2ZnL3RtcC9tYWdpYy9nbGJsX2NmZy5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9nbGJsX2NmZy9ydW5zL2dsYmxfY2ZnL3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX28yMWFfNC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9nbGJsX2NmZy9ydW5zL2dsYmxfY2ZnL3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX28yMmFfNC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9nbGJsX2NmZy9ydW5zL2dsYmxfY2ZnL3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX2FuZDNfNC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9nbGJsX2NmZy9ydW5zL2dsYmxfY2ZnL3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX2Rmc3RwXzQuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvZ2xibF9jZmcvcnVucy9nbGJsX2NmZy90bXAvbHZzL3NldHVwX2ZpbGUubGVmLmx2cworL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL2dsYmxfY2ZnL3J1bnMvZ2xibF9jZmcvcmVwb3J0cy9ydW50aW1lX3N1bW1hcnlfcmVwb3J0LnJwdC5wYXJzYWJsZQorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL2dsYmxfY2ZnL3J1bnMvZ2xibF9jZmcvcmVwb3J0cy9ydW50aW1lX3N1bW1hcnlfcmVwb3J0LnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL2dsYmxfY2ZnL3J1bnMvZ2xibF9jZmcvcmVwb3J0cy9tYW51ZmFjdHVyYWJpbGl0eV9yZXBvcnQucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvZ2xibF9jZmcvcnVucy9nbGJsX2NmZy9yZXBvcnRzL3N5bnRoZXNpcy8yNi1vcGVuc3RhX3NwZWZfd25zLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL2dsYmxfY2ZnL3J1bnMvZ2xibF9jZmcvcmVwb3J0cy9zeW50aGVzaXMvMS15b3N5c180LmNoay5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9nbGJsX2NmZy9ydW5zL2dsYmxfY2ZnL3JlcG9ydHMvc3ludGhlc2lzLzI2LW9wZW5zdGFfc3BlZi5taW5fbWF4LnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL2dsYmxfY2ZnL3J1bnMvZ2xibF9jZmcvcmVwb3J0cy9zeW50aGVzaXMvMjYtb3BlbnN0YV9zcGVmX3Rucy5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9nbGJsX2NmZy9ydW5zL2dsYmxfY2ZnL3JlcG9ydHMvc3ludGhlc2lzLzItb3BlbnN0YS5taW5fbWF4LnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL2dsYmxfY2ZnL3J1bnMvZ2xibF9jZmcvcmVwb3J0cy9zeW50aGVzaXMvMS15b3N5c19wcmUuc3RhdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL2dsYmxfY2ZnL3J1bnMvZ2xibF9jZmcvcmVwb3J0cy9zeW50aGVzaXMvMi1vcGVuc3RhX3Rucy5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9nbGJsX2NmZy9ydW5zL2dsYmxfY2ZnL3JlcG9ydHMvc3ludGhlc2lzLzExLW9wZW5zdGFfcG9zdF9vcGVucGh5c3luLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL2dsYmxfY2ZnL3J1bnMvZ2xibF9jZmcvcmVwb3J0cy9zeW50aGVzaXMvMTEtb3BlbnN0YV9wb3N0X29wZW5waHlzeW5fdG5zLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL2dsYmxfY2ZnL3J1bnMvZ2xibF9jZmcvcmVwb3J0cy9zeW50aGVzaXMvMS15b3N5c19kZmYuc3RhdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL2dsYmxfY2ZnL3J1bnMvZ2xibF9jZmcvcmVwb3J0cy9zeW50aGVzaXMvMTEtb3BlbnN0YV9wb3N0X29wZW5waHlzeW4ubWluX21heC5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9nbGJsX2NmZy9ydW5zL2dsYmxfY2ZnL3JlcG9ydHMvc3ludGhlc2lzLzExLW9wZW5zdGFfcG9zdF9vcGVucGh5c3luLnRpbWluZy5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9nbGJsX2NmZy9ydW5zL2dsYmxfY2ZnL3JlcG9ydHMvc3ludGhlc2lzLzItb3BlbnN0YV93bnMucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvZ2xibF9jZmcvcnVucy9nbGJsX2NmZy9yZXBvcnRzL3N5bnRoZXNpcy8yLW9wZW5zdGEucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvZ2xibF9jZmcvcnVucy9nbGJsX2NmZy9yZXBvcnRzL3N5bnRoZXNpcy8yNi1vcGVuc3RhX3NwZWYudGltaW5nLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL2dsYmxfY2ZnL3J1bnMvZ2xibF9jZmcvcmVwb3J0cy9zeW50aGVzaXMvMi1vcGVuc3RhLnRpbWluZy5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9nbGJsX2NmZy9ydW5zL2dsYmxfY2ZnL3JlcG9ydHMvc3ludGhlc2lzLzI2LW9wZW5zdGFfc3BlZi5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9nbGJsX2NmZy9ydW5zL2dsYmxfY2ZnL3JlcG9ydHMvc3ludGhlc2lzLzExLW9wZW5zdGFfcG9zdF9vcGVucGh5c3luX3ducy5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9nbGJsX2NmZy9ydW5zL2dsYmxfY2ZnL3JlcG9ydHMvc3ludGhlc2lzLzEteW9zeXNfNC5zdGF0LnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL2dsYmxfY2ZnL3J1bnMvZ2xibF9jZmcvcmVwb3J0cy9yb3V0aW5nLzQ0LWFudGVubmEucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvZ2xibF9jZmcvcnVucy9nbGJsX2NmZy9yZXBvcnRzL2Zsb29ycGxhbi8zLXZlcmlsb2cyZGVmLmRpZV9hcmVhLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL2dsYmxfY2ZnL3J1bnMvZ2xibF9jZmcvcmVwb3J0cy9mbG9vcnBsYW4vMy12ZXJpbG9nMmRlZi5jb3JlX2FyZWEucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvZ2xibF9jZmcvcnVucy9nbGJsX2NmZy9yZXBvcnRzL2tsYXlvdXQvMzYta2xheW91dC54b3IucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvZ2xibF9jZmcvcnVucy9nbGJsX2NmZy9yZXBvcnRzL2tsYXlvdXQvMzgta2xheW91dC54b3IucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvZ2xibF9jZmcvcnVucy9nbGJsX2NmZy9yZXBvcnRzL2tsYXlvdXQvNDIta2xheW91dC5tYWdpYy5seWRyYworL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL2dsYmxfY2ZnL3J1bnMvZ2xibF9jZmcvcmVwb3J0cy9wbGFjZW1lbnQvOS1vcGVucGh5c3luX2FsbGNoZWNrcy5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9nbGJsX2NmZy9ydW5zL2dsYmxfY2ZnL3JlcG9ydHMvcGxhY2VtZW50Lzktb3BlbnBoeXN5bl90bnMucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvZ2xibF9jZmcvcnVucy9nbGJsX2NmZy9yZXBvcnRzL3BsYWNlbWVudC85LW9wZW5waHlzeW5fd25zLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL2dsYmxfY2ZnL3J1bnMvZ2xibF9jZmcvcmVwb3J0cy9wbGFjZW1lbnQvOS1vcGVucGh5c3luX3Zpb2xhdG9ycy5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9nbGJsX2NmZy9ydW5zL2dsYmxfY2ZnL3Jlc3VsdHMvc3ludGhlc2lzL2dsYmxfY2ZnLnN5bnRoZXNpc19wcmVyb3V0ZS52CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvZ2xibF9jZmcvcnVucy9nbGJsX2NmZy9yZXN1bHRzL3N5bnRoZXNpcy9nbGJsX2NmZy5zeW50aGVzaXNfb3B0aW1pemVkLnYKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9nbGJsX2NmZy9ydW5zL2dsYmxfY2ZnL3Jlc3VsdHMvc3ludGhlc2lzL2dsYmxfY2ZnLnN5bnRoZXNpc19jdHMudgorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL2dsYmxfY2ZnL3J1bnMvZ2xibF9jZmcvcmVzdWx0cy9zeW50aGVzaXMvZ2xibF9jZmcuc3ludGhlc2lzLnYKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9nbGJsX2NmZy9ydW5zL2dsYmxfY2ZnL3Jlc3VsdHMvc3ludGhlc2lzL2dsYmxfY2ZnLnN5bnRoZXNpc19kaW9kZXMudgorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL2dsYmxfY2ZnL3J1bnMvZ2xibF9jZmcvcmVzdWx0cy9yb3V0aW5nL2dsYmxfY2ZnLmRlZi5yZWYKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9nbGJsX2NmZy9ydW5zL2dsYmxfY2ZnL3Jlc3VsdHMvcm91dGluZy9nbGJsX2NmZy5zcGVmCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvZ2xibF9jZmcvcnVucy9nbGJsX2NmZy9yZXN1bHRzL21hZ2ljLy5tYWdpY3JjCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvZ2xibF9jZmcvcnVucy9nbGJsX2NmZy9yZXN1bHRzL21hZ2ljL2dsYmxfY2ZnLmdkcy5seWRyYworL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL2dsYmxfY2ZnL3J1bnMvZ2xibF9jZmcvcmVzdWx0cy9sdnMvZ2xibF9jZmcubHZzLnBvd2VyZWQudgorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL2dsYmxfY2ZnL3J1bnMvZ2xibF9jZmcvcmVzdWx0cy9sdnMvZ2xibF9jZmcubHZzLmxlZi5qc29uCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvZ2xibF9jZmcvcnVucy9nbGJsX2NmZy9yZXN1bHRzL2tsYXlvdXQvZ2xibF9jZmcubHlwCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvY2xrX3NrZXdfYWRqdXN0L3J1bnMvY2xrX3NrZXdfYWRqdXN0L2NvbmZpZy50Y2wKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9jbGtfc2tld19hZGp1c3QvcnVucy9jbGtfc2tld19hZGp1c3QvdG1wL21hZ2ljX3NwaWNlLnRjbAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL2Nsa19za2V3X2FkanVzdC9ydW5zL2Nsa19za2V3X2FkanVzdC90bXAvb3B0LmxpYgorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL2Nsa19za2V3X2FkanVzdC9ydW5zL2Nsa19za2V3X2FkanVzdC90bXAvdHJpbW1lZC5saWIKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9jbGtfc2tld19hZGp1c3QvcnVucy9jbGtfc2tld19hZGp1c3QvdG1wL3RyYWNrc19jb3B5LmluZm8KKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9jbGtfc2tld19hZGp1c3QvcnVucy9jbGtfc2tld19hZGp1c3QvdG1wL3NreTEzMF9mZF9zY19oZF9fdHRfMDI1Q18xdjgwLm5vX3BnLmxpYgorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL2Nsa19za2V3X2FkanVzdC9ydW5zL2Nsa19za2V3X2FkanVzdC90bXAvc3ludGhlc2lzL2hpZXJhcmNoeS5kb3QKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9jbGtfc2tld19hZGp1c3QvcnVucy9jbGtfc2tld19hZGp1c3QvdG1wL3N5bnRoZXNpcy95b3N5cy5zZGMKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9jbGtfc2tld19hZGp1c3QvcnVucy9jbGtfc2tld19hZGp1c3QvdG1wL3JvdXRpbmcvMTMtZmFzdHJvdXRlLmd1aWRlCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvY2xrX3NrZXdfYWRqdXN0L3J1bnMvY2xrX3NrZXdfYWRqdXN0L3RtcC9yb3V0aW5nLzE2LXRyaXRvblJvdXRlLnBhcmFtCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvY2xrX3NrZXdfYWRqdXN0L3J1bnMvY2xrX3NrZXdfYWRqdXN0L3RtcC9yb3V0aW5nLzE2LXRyaXRvblJvdXRlLmd1aWRlCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvY2xrX3NrZXdfYWRqdXN0L3J1bnMvY2xrX3NrZXdfYWRqdXN0L3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX211eDJfNC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9jbGtfc2tld19hZGp1c3QvcnVucy9jbGtfc2tld19hZGp1c3QvdG1wL21hZ2ljL2Nsa19za2V3X2FkanVzdC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9jbGtfc2tld19hZGp1c3QvcnVucy9jbGtfc2tld19hZGp1c3QvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fY2xrZGx5YnVmNHMxNV8yLmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL2Nsa19za2V3X2FkanVzdC9ydW5zL2Nsa19za2V3X2FkanVzdC90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19tdXgyXzEuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvY2xrX3NrZXdfYWRqdXN0L3J1bnMvY2xrX3NrZXdfYWRqdXN0L3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX2ZpbGxfMi5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9jbGtfc2tld19hZGp1c3QvcnVucy9jbGtfc2tld19hZGp1c3QvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fZGVjYXBfNC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9jbGtfc2tld19hZGp1c3QvcnVucy9jbGtfc2tld19hZGp1c3QvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvY2xrX3NrZXdfYWRqdXN0L3J1bnMvY2xrX3NrZXdfYWRqdXN0L3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX2RlY2FwXzMuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvY2xrX3NrZXdfYWRqdXN0L3J1bnMvY2xrX3NrZXdfYWRqdXN0L3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX3RhcHZwd3J2Z25kXzEuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvY2xrX3NrZXdfYWRqdXN0L3J1bnMvY2xrX3NrZXdfYWRqdXN0L3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX2ZpbGxfMS5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9jbGtfc2tld19hZGp1c3QvcnVucy9jbGtfc2tld19hZGp1c3QvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fZGVjYXBfNi5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9jbGtfc2tld19hZGp1c3QvcnVucy9jbGtfc2tld19hZGp1c3QvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fZGVjYXBfOC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9jbGtfc2tld19hZGp1c3QvcnVucy9jbGtfc2tld19hZGp1c3QvdG1wL2x2cy9zZXR1cF9maWxlLmxlZi5sdnMKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9jbGtfc2tld19hZGp1c3QvcnVucy9jbGtfc2tld19hZGp1c3QvcmVwb3J0cy9ydW50aW1lX3N1bW1hcnlfcmVwb3J0LnJwdC5wYXJzYWJsZQorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL2Nsa19za2V3X2FkanVzdC9ydW5zL2Nsa19za2V3X2FkanVzdC9yZXBvcnRzL3J1bnRpbWVfc3VtbWFyeV9yZXBvcnQucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvY2xrX3NrZXdfYWRqdXN0L3J1bnMvY2xrX3NrZXdfYWRqdXN0L3JlcG9ydHMvbWFudWZhY3R1cmFiaWxpdHlfcmVwb3J0LnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL2Nsa19za2V3X2FkanVzdC9ydW5zL2Nsa19za2V3X2FkanVzdC9yZXBvcnRzL3N5bnRoZXNpcy8xLXlvc3lzXzQuY2hrLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL2Nsa19za2V3X2FkanVzdC9ydW5zL2Nsa19za2V3X2FkanVzdC9yZXBvcnRzL3N5bnRoZXNpcy8xLXlvc3lzX3ByZS5zdGF0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvY2xrX3NrZXdfYWRqdXN0L3J1bnMvY2xrX3NrZXdfYWRqdXN0L3JlcG9ydHMvc3ludGhlc2lzLzEteW9zeXNfZGZmLnN0YXQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9jbGtfc2tld19hZGp1c3QvcnVucy9jbGtfc2tld19hZGp1c3QvcmVwb3J0cy9zeW50aGVzaXMvMS15b3N5c180LnN0YXQucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvY2xrX3NrZXdfYWRqdXN0L3J1bnMvY2xrX3NrZXdfYWRqdXN0L3JlcG9ydHMvcm91dGluZy8zNi1hbnRlbm5hLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL2Nsa19za2V3X2FkanVzdC9ydW5zL2Nsa19za2V3X2FkanVzdC9yZXBvcnRzL2Zsb29ycGxhbi8yLXZlcmlsb2cyZGVmLmNvcmVfYXJlYS5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9jbGtfc2tld19hZGp1c3QvcnVucy9jbGtfc2tld19hZGp1c3QvcmVwb3J0cy9mbG9vcnBsYW4vMi12ZXJpbG9nMmRlZi5kaWVfYXJlYS5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9jbGtfc2tld19hZGp1c3QvcnVucy9jbGtfc2tld19hZGp1c3QvcmVwb3J0cy9rbGF5b3V0LzMwLWtsYXlvdXQueG9yLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL2Nsa19za2V3X2FkanVzdC9ydW5zL2Nsa19za2V3X2FkanVzdC9yZXBvcnRzL2tsYXlvdXQvMjgta2xheW91dC54b3IucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvY2xrX3NrZXdfYWRqdXN0L3J1bnMvY2xrX3NrZXdfYWRqdXN0L3JlcG9ydHMva2xheW91dC8zNC1rbGF5b3V0Lm1hZ2ljLmx5ZHJjCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvY2xrX3NrZXdfYWRqdXN0L3J1bnMvY2xrX3NrZXdfYWRqdXN0L3JlcG9ydHMvcGxhY2VtZW50Lzgtb3BlbnBoeXN5bl93bnMucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvY2xrX3NrZXdfYWRqdXN0L3J1bnMvY2xrX3NrZXdfYWRqdXN0L3JlcG9ydHMvcGxhY2VtZW50Lzgtb3BlbnBoeXN5bl90bnMucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvY2xrX3NrZXdfYWRqdXN0L3J1bnMvY2xrX3NrZXdfYWRqdXN0L3JlcG9ydHMvcGxhY2VtZW50Lzgtb3BlbnBoeXN5bl9hbGxjaGVja3MucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvY2xrX3NrZXdfYWRqdXN0L3J1bnMvY2xrX3NrZXdfYWRqdXN0L3Jlc3VsdHMvc3ludGhlc2lzL2Nsa19za2V3X2FkanVzdC5zeW50aGVzaXNfcHJlcm91dGUudgorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL2Nsa19za2V3X2FkanVzdC9ydW5zL2Nsa19za2V3X2FkanVzdC9yZXN1bHRzL3N5bnRoZXNpcy9jbGtfc2tld19hZGp1c3Quc3ludGhlc2lzX29wdGltaXplZC52CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvY2xrX3NrZXdfYWRqdXN0L3J1bnMvY2xrX3NrZXdfYWRqdXN0L3Jlc3VsdHMvc3ludGhlc2lzL2Nsa19za2V3X2FkanVzdC5zeW50aGVzaXMudgorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL2Nsa19za2V3X2FkanVzdC9ydW5zL2Nsa19za2V3X2FkanVzdC9yZXN1bHRzL2N2Yy9jdmNfY2xrX3NrZXdfYWRqdXN0LmVycm9yCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvY2xrX3NrZXdfYWRqdXN0L3J1bnMvY2xrX3NrZXdfYWRqdXN0L3Jlc3VsdHMvY3ZjL2N2Y19jbGtfc2tld19hZGp1c3QuZGVidWcKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9jbGtfc2tld19hZGp1c3QvcnVucy9jbGtfc2tld19hZGp1c3QvcmVzdWx0cy9jdmMvY2xrX3NrZXdfYWRqdXN0LmNkbAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL2Nsa19za2V3X2FkanVzdC9ydW5zL2Nsa19za2V3X2FkanVzdC9yZXN1bHRzL2N2Yy9jbGtfc2tld19hZGp1c3QucG93ZXIKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9jbGtfc2tld19hZGp1c3QvcnVucy9jbGtfc2tld19hZGp1c3QvcmVzdWx0cy9yb3V0aW5nL2Nsa19za2V3X2FkanVzdC5zcGVmCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvY2xrX3NrZXdfYWRqdXN0L3J1bnMvY2xrX3NrZXdfYWRqdXN0L3Jlc3VsdHMvcm91dGluZy9jbGtfc2tld19hZGp1c3QuZGVmLnJlZgorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL2Nsa19za2V3X2FkanVzdC9ydW5zL2Nsa19za2V3X2FkanVzdC9yZXN1bHRzL21hZ2ljLy5tYWdpY3JjCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvY2xrX3NrZXdfYWRqdXN0L3J1bnMvY2xrX3NrZXdfYWRqdXN0L3Jlc3VsdHMvbWFnaWMvY2xrX3NrZXdfYWRqdXN0Lmdkcy5seWRyYworL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL2Nsa19za2V3X2FkanVzdC9ydW5zL2Nsa19za2V3X2FkanVzdC9yZXN1bHRzL2x2cy9jbGtfc2tld19hZGp1c3QubHZzLnBvd2VyZWQudgorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL2Nsa19za2V3X2FkanVzdC9ydW5zL2Nsa19za2V3X2FkanVzdC9yZXN1bHRzL2x2cy9jbGtfc2tld19hZGp1c3QubHZzLmxlZi5qc29uCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvY2xrX3NrZXdfYWRqdXN0L3J1bnMvY2xrX3NrZXdfYWRqdXN0L3Jlc3VsdHMva2xheW91dC9jbGtfc2tld19hZGp1c3QubHlwCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2NyX2ludGYvYQorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9pbnRmL3J1bnMvc2NyX2ludGYvY29uZmlnLnRjbAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9pbnRmL3J1bnMvc2NyX2ludGYvdG1wL21hZ2ljX3NwaWNlLnRjbAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9pbnRmL3J1bnMvc2NyX2ludGYvdG1wL29wdC5saWIKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zY3JfaW50Zi9ydW5zL3Njcl9pbnRmL3RtcC90cmltbWVkLmxpYgorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9pbnRmL3J1bnMvc2NyX2ludGYvdG1wL3RyYWNrc19jb3B5LmluZm8KKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zY3JfaW50Zi9ydW5zL3Njcl9pbnRmL3RtcC9za3kxMzBfZmRfc2NfaGRfX3R0XzAyNUNfMXY4MC5ub19wZy5saWIKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zY3JfaW50Zi9ydW5zL3Njcl9pbnRmL3RtcC9zeW50aGVzaXMvaGllcmFyY2h5LmRvdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9pbnRmL3J1bnMvc2NyX2ludGYvdG1wL3N5bnRoZXNpcy95b3N5cy5zZGMKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zY3JfaW50Zi9ydW5zL3Njcl9pbnRmL3RtcC9yb3V0aW5nLzIwLWZhc3Ryb3V0ZV80Lmd1aWRlCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2NyX2ludGYvcnVucy9zY3JfaW50Zi90bXAvcm91dGluZy8yNC10cml0b25Sb3V0ZS5wYXJhbQorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9pbnRmL3J1bnMvc2NyX2ludGYvdG1wL3JvdXRpbmcvMTctZmFzdHJvdXRlLmd1aWRlCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2NyX2ludGYvcnVucy9zY3JfaW50Zi90bXAvcm91dGluZy8yMS1mYXN0cm91dGVfNS5ndWlkZQorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9pbnRmL3J1bnMvc2NyX2ludGYvdG1wL3JvdXRpbmcvMjQtdHJpdG9uUm91dGUuZ3VpZGUKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zY3JfaW50Zi9ydW5zL3Njcl9pbnRmL3RtcC9yb3V0aW5nLzE5LWZhc3Ryb3V0ZV8zLmd1aWRlCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2NyX2ludGYvcnVucy9zY3JfaW50Zi90bXAvcm91dGluZy8xOC1mYXN0cm91dGVfMi5ndWlkZQorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9pbnRmL3J1bnMvc2NyX2ludGYvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fY29uYl8xLmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9pbnRmL3J1bnMvc2NyX2ludGYvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fbm9yMl80LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9pbnRmL3J1bnMvc2NyX2ludGYvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fYW5kMl80LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9pbnRmL3J1bnMvc2NyX2ludGYvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fYTIxb2lfNC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zY3JfaW50Zi9ydW5zL3Njcl9pbnRmL3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX2ZpbGxfMi5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zY3JfaW50Zi9ydW5zL3Njcl9pbnRmL3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX2EzMm9fNC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zY3JfaW50Zi9ydW5zL3Njcl9pbnRmL3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX29yMl80LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9pbnRmL3J1bnMvc2NyX2ludGYvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fY2xrYnVmXzE2LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9pbnRmL3J1bnMvc2NyX2ludGYvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fZGVjYXBfNC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zY3JfaW50Zi9ydW5zL3Njcl9pbnRmL3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX2Rpb2RlXzIuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2NyX2ludGYvcnVucy9zY3JfaW50Zi90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19idWZfNC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zY3JfaW50Zi9ydW5zL3Njcl9pbnRmL3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX25hbmQyXzQuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2NyX2ludGYvcnVucy9zY3JfaW50Zi90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19hMjExb180LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9pbnRmL3J1bnMvc2NyX2ludGYvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fYTIxb180LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9pbnRmL3J1bnMvc2NyX2ludGYvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fYTIxYm9pXzQuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2NyX2ludGYvcnVucy9zY3JfaW50Zi90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19idWZfMi5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zY3JfaW50Zi9ydW5zL3Njcl9pbnRmL3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX29yM180LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9pbnRmL3J1bnMvc2NyX2ludGYvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2NyX2ludGYvcnVucy9zY3JfaW50Zi90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19hMmJiMm9fNC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zY3JfaW50Zi9ydW5zL3Njcl9pbnRmL3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX2FuZDRfNC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zY3JfaW50Zi9ydW5zL3Njcl9pbnRmL3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX2RlY2FwXzMuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2NyX2ludGYvcnVucy9zY3JfaW50Zi90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19vMjFhaV80LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9pbnRmL3J1bnMvc2NyX2ludGYvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fYTIyb2lfNC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zY3JfaW50Zi9ydW5zL3Njcl9pbnRmL3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX2RmcnRwXzQuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2NyX2ludGYvcnVucy9zY3JfaW50Zi90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19kZnh0cF80LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9pbnRmL3J1bnMvc2NyX2ludGYvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fdGFwdnB3cnZnbmRfMS5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zY3JfaW50Zi9ydW5zL3Njcl9pbnRmL3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX2ZpbGxfMS5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zY3JfaW50Zi9ydW5zL3Njcl9pbnRmL3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX2Nsa2J1Zl8xLmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9pbnRmL3J1bnMvc2NyX2ludGYvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fbzMyYV80LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9pbnRmL3J1bnMvc2NyX2ludGYvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fZGVjYXBfNi5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zY3JfaW50Zi9ydW5zL3Njcl9pbnRmL3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX29yNF80LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9pbnRmL3J1bnMvc2NyX2ludGYvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fZGVjYXBfOC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zY3JfaW50Zi9ydW5zL3Njcl9pbnRmL3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX2ludl8yLmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9pbnRmL3J1bnMvc2NyX2ludGYvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fbzIxYV80LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9pbnRmL3J1bnMvc2NyX2ludGYvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fbzIyYV80LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9pbnRmL3J1bnMvc2NyX2ludGYvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fYW5kM180LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9pbnRmL3J1bnMvc2NyX2ludGYvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fZGZzdHBfNC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zY3JfaW50Zi9ydW5zL3Njcl9pbnRmL3RtcC9tYWdpYy9zY3IxX2ludGYuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2NyX2ludGYvcnVucy9zY3JfaW50Zi90bXAvbHZzL3NldHVwX2ZpbGUubGVmLmx2cworL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9pbnRmL3J1bnMvc2NyX2ludGYvcmVwb3J0cy9ydW50aW1lX3N1bW1hcnlfcmVwb3J0LnJwdC5wYXJzYWJsZQorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9pbnRmL3J1bnMvc2NyX2ludGYvcmVwb3J0cy9ydW50aW1lX3N1bW1hcnlfcmVwb3J0LnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9pbnRmL3J1bnMvc2NyX2ludGYvcmVwb3J0cy9tYW51ZmFjdHVyYWJpbGl0eV9yZXBvcnQucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2NyX2ludGYvcnVucy9zY3JfaW50Zi9yZXBvcnRzL3N5bnRoZXNpcy8xLXlvc3lzXzQuY2hrLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9pbnRmL3J1bnMvc2NyX2ludGYvcmVwb3J0cy9zeW50aGVzaXMvMi1vcGVuc3RhLm1pbl9tYXgucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2NyX2ludGYvcnVucy9zY3JfaW50Zi9yZXBvcnRzL3N5bnRoZXNpcy8xLXlvc3lzX3ByZS5zdGF0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2NyX2ludGYvcnVucy9zY3JfaW50Zi9yZXBvcnRzL3N5bnRoZXNpcy8yLW9wZW5zdGFfdG5zLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9pbnRmL3J1bnMvc2NyX2ludGYvcmVwb3J0cy9zeW50aGVzaXMvMTEtb3BlbnN0YV9wb3N0X29wZW5waHlzeW4ucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2NyX2ludGYvcnVucy9zY3JfaW50Zi9yZXBvcnRzL3N5bnRoZXNpcy8xMS1vcGVuc3RhX3Bvc3Rfb3BlbnBoeXN5bl90bnMucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2NyX2ludGYvcnVucy9zY3JfaW50Zi9yZXBvcnRzL3N5bnRoZXNpcy8yNy1vcGVuc3RhX3NwZWZfd25zLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9pbnRmL3J1bnMvc2NyX2ludGYvcmVwb3J0cy9zeW50aGVzaXMvMS15b3N5c19kZmYuc3RhdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9pbnRmL3J1bnMvc2NyX2ludGYvcmVwb3J0cy9zeW50aGVzaXMvMTEtb3BlbnN0YV9wb3N0X29wZW5waHlzeW4ubWluX21heC5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zY3JfaW50Zi9ydW5zL3Njcl9pbnRmL3JlcG9ydHMvc3ludGhlc2lzLzExLW9wZW5zdGFfcG9zdF9vcGVucGh5c3luLnRpbWluZy5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zY3JfaW50Zi9ydW5zL3Njcl9pbnRmL3JlcG9ydHMvc3ludGhlc2lzLzI3LW9wZW5zdGFfc3BlZi5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zY3JfaW50Zi9ydW5zL3Njcl9pbnRmL3JlcG9ydHMvc3ludGhlc2lzLzItb3BlbnN0YV93bnMucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2NyX2ludGYvcnVucy9zY3JfaW50Zi9yZXBvcnRzL3N5bnRoZXNpcy8yNy1vcGVuc3RhX3NwZWZfdG5zLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9pbnRmL3J1bnMvc2NyX2ludGYvcmVwb3J0cy9zeW50aGVzaXMvMi1vcGVuc3RhLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9pbnRmL3J1bnMvc2NyX2ludGYvcmVwb3J0cy9zeW50aGVzaXMvMjctb3BlbnN0YV9zcGVmLnRpbWluZy5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zY3JfaW50Zi9ydW5zL3Njcl9pbnRmL3JlcG9ydHMvc3ludGhlc2lzLzItb3BlbnN0YS50aW1pbmcucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2NyX2ludGYvcnVucy9zY3JfaW50Zi9yZXBvcnRzL3N5bnRoZXNpcy8xMS1vcGVuc3RhX3Bvc3Rfb3BlbnBoeXN5bl93bnMucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2NyX2ludGYvcnVucy9zY3JfaW50Zi9yZXBvcnRzL3N5bnRoZXNpcy8yNy1vcGVuc3RhX3NwZWYubWluX21heC5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zY3JfaW50Zi9ydW5zL3Njcl9pbnRmL3JlcG9ydHMvc3ludGhlc2lzLzEteW9zeXNfNC5zdGF0LnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9pbnRmL3J1bnMvc2NyX2ludGYvcmVwb3J0cy9yb3V0aW5nLzQ1LWFudGVubmEucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2NyX2ludGYvcnVucy9zY3JfaW50Zi9yZXBvcnRzL2Zsb29ycGxhbi8zLXZlcmlsb2cyZGVmLmRpZV9hcmVhLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9pbnRmL3J1bnMvc2NyX2ludGYvcmVwb3J0cy9mbG9vcnBsYW4vMy12ZXJpbG9nMmRlZi5jb3JlX2FyZWEucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2NyX2ludGYvcnVucy9zY3JfaW50Zi9yZXBvcnRzL2tsYXlvdXQvMzcta2xheW91dC54b3IucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2NyX2ludGYvcnVucy9zY3JfaW50Zi9yZXBvcnRzL2tsYXlvdXQvMzkta2xheW91dC54b3IucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2NyX2ludGYvcnVucy9zY3JfaW50Zi9yZXBvcnRzL2tsYXlvdXQvNDMta2xheW91dC5tYWdpYy5seWRyYworL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9pbnRmL3J1bnMvc2NyX2ludGYvcmVwb3J0cy9wbGFjZW1lbnQvOS1vcGVucGh5c3luX2FsbGNoZWNrcy5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zY3JfaW50Zi9ydW5zL3Njcl9pbnRmL3JlcG9ydHMvcGxhY2VtZW50Lzktb3BlbnBoeXN5bl90bnMucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2NyX2ludGYvcnVucy9zY3JfaW50Zi9yZXBvcnRzL3BsYWNlbWVudC85LW9wZW5waHlzeW5fd25zLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9pbnRmL3J1bnMvc2NyX2ludGYvcmVwb3J0cy9wbGFjZW1lbnQvOS1vcGVucGh5c3luX3Zpb2xhdG9ycy5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zY3JfaW50Zi9ydW5zL3Njcl9pbnRmL3Jlc3VsdHMvc3ludGhlc2lzL3NjcjFfaW50Zi5zeW50aGVzaXNfb3B0aW1pemVkLnYKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zY3JfaW50Zi9ydW5zL3Njcl9pbnRmL3Jlc3VsdHMvc3ludGhlc2lzL3NjcjFfaW50Zi5zeW50aGVzaXMudgorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9pbnRmL3J1bnMvc2NyX2ludGYvcmVzdWx0cy9zeW50aGVzaXMvc2NyMV9pbnRmLnN5bnRoZXNpc19wcmVyb3V0ZS52CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2NyX2ludGYvcnVucy9zY3JfaW50Zi9yZXN1bHRzL3N5bnRoZXNpcy9zY3IxX2ludGYuc3ludGhlc2lzX2N0cy52CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2NyX2ludGYvcnVucy9zY3JfaW50Zi9yZXN1bHRzL3JvdXRpbmcvc2NyMV9pbnRmLmRlZi5yZWYKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zY3JfaW50Zi9ydW5zL3Njcl9pbnRmL3Jlc3VsdHMvcm91dGluZy9zY3IxX2ludGYuc3BlZgorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9pbnRmL3J1bnMvc2NyX2ludGYvcmVzdWx0cy9tYWdpYy8ubWFnaWNyYworL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9pbnRmL3J1bnMvc2NyX2ludGYvcmVzdWx0cy9tYWdpYy9zY3IxX2ludGYuZ2RzLmx5ZHJjCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2NyX2ludGYvcnVucy9zY3JfaW50Zi9yZXN1bHRzL2x2cy9zY3IxX2ludGYubHZzLmxlZi5qc29uCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2NyX2ludGYvcnVucy9zY3JfaW50Zi9yZXN1bHRzL2x2cy9zY3IxX2ludGYubHZzLnBvd2VyZWQudgorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Njcl9pbnRmL3J1bnMvc2NyX2ludGYvcmVzdWx0cy9rbGF5b3V0L3NjcjFfaW50Zi5seXAKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS93Yl9ob3N0L3J1bnMvd2JfaG9zdC9jb25maWcudGNsCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvd2JfaG9zdC9ydW5zL3diX2hvc3QvdG1wL21hZ2ljX3NwaWNlLnRjbAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3diX2hvc3QvcnVucy93Yl9ob3N0L3RtcC9vcHQubGliCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvd2JfaG9zdC9ydW5zL3diX2hvc3QvdG1wL3RyaW1tZWQubGliCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvd2JfaG9zdC9ydW5zL3diX2hvc3QvdG1wL3RyYWNrc19jb3B5LmluZm8KKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS93Yl9ob3N0L3J1bnMvd2JfaG9zdC90bXAvc2t5MTMwX2ZkX3NjX2hkX190dF8wMjVDXzF2ODAubm9fcGcubGliCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvd2JfaG9zdC9ydW5zL3diX2hvc3QvdG1wL3N5bnRoZXNpcy9oaWVyYXJjaHkuZG90CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvd2JfaG9zdC9ydW5zL3diX2hvc3QvdG1wL3N5bnRoZXNpcy95b3N5cy5zZGMKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS93Yl9ob3N0L3J1bnMvd2JfaG9zdC90bXAvcm91dGluZy8yMy10cml0b25Sb3V0ZS5ndWlkZQorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3diX2hvc3QvcnVucy93Yl9ob3N0L3RtcC9yb3V0aW5nLzIzLXRyaXRvblJvdXRlLnBhcmFtCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvd2JfaG9zdC9ydW5zL3diX2hvc3QvdG1wL3JvdXRpbmcvMjEtZmFzdHJvdXRlLmd1aWRlCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvd2JfaG9zdC9ydW5zL3diX2hvc3QvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fbm9yMl80LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3diX2hvc3QvcnVucy93Yl9ob3N0L3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX2FuZDJfNC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS93Yl9ob3N0L3J1bnMvd2JfaG9zdC90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19hMjFvaV80LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3diX2hvc3QvcnVucy93Yl9ob3N0L3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX2ZpbGxfMi5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS93Yl9ob3N0L3J1bnMvd2JfaG9zdC90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19hMzJvXzQuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvd2JfaG9zdC9ydW5zL3diX2hvc3QvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fb3IyXzQuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvd2JfaG9zdC9ydW5zL3diX2hvc3QvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fY2xrYnVmXzE2LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3diX2hvc3QvcnVucy93Yl9ob3N0L3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX2RlY2FwXzQuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvd2JfaG9zdC9ydW5zL3diX2hvc3QvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fZGlvZGVfMi5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS93Yl9ob3N0L3J1bnMvd2JfaG9zdC90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19hMjExb180LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3diX2hvc3QvcnVucy93Yl9ob3N0L3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX2EyMW9fNC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS93Yl9ob3N0L3J1bnMvd2JfaG9zdC90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19idWZfMi5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS93Yl9ob3N0L3J1bnMvd2JfaG9zdC90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19vcjNfNC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS93Yl9ob3N0L3J1bnMvd2JfaG9zdC90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMi5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS93Yl9ob3N0L3J1bnMvd2JfaG9zdC90bXAvbWFnaWMvc2t5MTMwX2VmX3NjX2hkX19mYWtlZGlvZGVfMi5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS93Yl9ob3N0L3J1bnMvd2JfaG9zdC90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19hMmJiMm9fNC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS93Yl9ob3N0L3J1bnMvd2JfaG9zdC90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19hbmQ0XzQuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvd2JfaG9zdC9ydW5zL3diX2hvc3QvdG1wL21hZ2ljL3diX2hvc3QuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvd2JfaG9zdC9ydW5zL3diX2hvc3QvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fZGVjYXBfMy5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS93Yl9ob3N0L3J1bnMvd2JfaG9zdC90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19vMjFhaV80LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3diX2hvc3QvcnVucy93Yl9ob3N0L3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX2RmcnRwXzQuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvd2JfaG9zdC9ydW5zL3diX2hvc3QvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fZGZ4dHBfNC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS93Yl9ob3N0L3J1bnMvd2JfaG9zdC90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xLmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3diX2hvc3QvcnVucy93Yl9ob3N0L3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX2EyMTExb180LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3diX2hvc3QvcnVucy93Yl9ob3N0L3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX2ZpbGxfMS5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS93Yl9ob3N0L3J1bnMvd2JfaG9zdC90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19jbGtidWZfMS5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS93Yl9ob3N0L3J1bnMvd2JfaG9zdC90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF82LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3diX2hvc3QvcnVucy93Yl9ob3N0L3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX29yNF80LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3diX2hvc3QvcnVucy93Yl9ob3N0L3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX2EyMWJvXzQuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvd2JfaG9zdC9ydW5zL3diX2hvc3QvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fYnVmYnVmXzE2LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3diX2hvc3QvcnVucy93Yl9ob3N0L3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX2RlY2FwXzguZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvd2JfaG9zdC9ydW5zL3diX2hvc3QvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9faW52XzIuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvd2JfaG9zdC9ydW5zL3diX2hvc3QvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fbzIxYV80LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3diX2hvc3QvcnVucy93Yl9ob3N0L3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX28yMmFfNC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS93Yl9ob3N0L3J1bnMvd2JfaG9zdC90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19hbmQzXzQuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvd2JfaG9zdC9ydW5zL3diX2hvc3QvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fZGZzdHBfNC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS93Yl9ob3N0L3J1bnMvd2JfaG9zdC90bXAvbHZzL3NldHVwX2ZpbGUubGVmLmx2cworL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3diX2hvc3QvcnVucy93Yl9ob3N0L3JlcG9ydHMvcnVudGltZV9zdW1tYXJ5X3JlcG9ydC5ycHQucGFyc2FibGUKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS93Yl9ob3N0L3J1bnMvd2JfaG9zdC9yZXBvcnRzL3J1bnRpbWVfc3VtbWFyeV9yZXBvcnQucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvd2JfaG9zdC9ydW5zL3diX2hvc3QvcmVwb3J0cy9tYW51ZmFjdHVyYWJpbGl0eV9yZXBvcnQucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvd2JfaG9zdC9ydW5zL3diX2hvc3QvcmVwb3J0cy9zeW50aGVzaXMvMjYtb3BlbnN0YV9zcGVmX3ducy5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS93Yl9ob3N0L3J1bnMvd2JfaG9zdC9yZXBvcnRzL3N5bnRoZXNpcy8xLXlvc3lzXzQuY2hrLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3diX2hvc3QvcnVucy93Yl9ob3N0L3JlcG9ydHMvc3ludGhlc2lzLzI2LW9wZW5zdGFfc3BlZi5taW5fbWF4LnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3diX2hvc3QvcnVucy93Yl9ob3N0L3JlcG9ydHMvc3ludGhlc2lzLzI2LW9wZW5zdGFfc3BlZl90bnMucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvd2JfaG9zdC9ydW5zL3diX2hvc3QvcmVwb3J0cy9zeW50aGVzaXMvMi1vcGVuc3RhLm1pbl9tYXgucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvd2JfaG9zdC9ydW5zL3diX2hvc3QvcmVwb3J0cy9zeW50aGVzaXMvMS15b3N5c19wcmUuc3RhdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3diX2hvc3QvcnVucy93Yl9ob3N0L3JlcG9ydHMvc3ludGhlc2lzLzItb3BlbnN0YV90bnMucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvd2JfaG9zdC9ydW5zL3diX2hvc3QvcmVwb3J0cy9zeW50aGVzaXMvMTEtb3BlbnN0YV9wb3N0X29wZW5waHlzeW4ucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvd2JfaG9zdC9ydW5zL3diX2hvc3QvcmVwb3J0cy9zeW50aGVzaXMvMTEtb3BlbnN0YV9wb3N0X29wZW5waHlzeW5fdG5zLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3diX2hvc3QvcnVucy93Yl9ob3N0L3JlcG9ydHMvc3ludGhlc2lzLzEteW9zeXNfZGZmLnN0YXQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS93Yl9ob3N0L3J1bnMvd2JfaG9zdC9yZXBvcnRzL3N5bnRoZXNpcy8xMS1vcGVuc3RhX3Bvc3Rfb3BlbnBoeXN5bi5taW5fbWF4LnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3diX2hvc3QvcnVucy93Yl9ob3N0L3JlcG9ydHMvc3ludGhlc2lzLzExLW9wZW5zdGFfcG9zdF9vcGVucGh5c3luLnRpbWluZy5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS93Yl9ob3N0L3J1bnMvd2JfaG9zdC9yZXBvcnRzL3N5bnRoZXNpcy8yLW9wZW5zdGFfd25zLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3diX2hvc3QvcnVucy93Yl9ob3N0L3JlcG9ydHMvc3ludGhlc2lzLzItb3BlbnN0YS5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS93Yl9ob3N0L3J1bnMvd2JfaG9zdC9yZXBvcnRzL3N5bnRoZXNpcy8yNi1vcGVuc3RhX3NwZWYudGltaW5nLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3diX2hvc3QvcnVucy93Yl9ob3N0L3JlcG9ydHMvc3ludGhlc2lzLzItb3BlbnN0YS50aW1pbmcucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvd2JfaG9zdC9ydW5zL3diX2hvc3QvcmVwb3J0cy9zeW50aGVzaXMvMjYtb3BlbnN0YV9zcGVmLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3diX2hvc3QvcnVucy93Yl9ob3N0L3JlcG9ydHMvc3ludGhlc2lzLzExLW9wZW5zdGFfcG9zdF9vcGVucGh5c3luX3ducy5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS93Yl9ob3N0L3J1bnMvd2JfaG9zdC9yZXBvcnRzL3N5bnRoZXNpcy8xLXlvc3lzXzQuc3RhdC5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS93Yl9ob3N0L3J1bnMvd2JfaG9zdC9yZXBvcnRzL3JvdXRpbmcvNDYtYW50ZW5uYS5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS93Yl9ob3N0L3J1bnMvd2JfaG9zdC9yZXBvcnRzL3JvdXRpbmcvMjgtYW50ZW5uYS5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS93Yl9ob3N0L3J1bnMvd2JfaG9zdC9yZXBvcnRzL2Zsb29ycGxhbi8zLXZlcmlsb2cyZGVmLmRpZV9hcmVhLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3diX2hvc3QvcnVucy93Yl9ob3N0L3JlcG9ydHMvZmxvb3JwbGFuLzMtdmVyaWxvZzJkZWYuY29yZV9hcmVhLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3diX2hvc3QvcnVucy93Yl9ob3N0L3JlcG9ydHMva2xheW91dC80MC1rbGF5b3V0Lnhvci5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS93Yl9ob3N0L3J1bnMvd2JfaG9zdC9yZXBvcnRzL2tsYXlvdXQvMzgta2xheW91dC54b3IucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvd2JfaG9zdC9ydW5zL3diX2hvc3QvcmVwb3J0cy9rbGF5b3V0LzQ0LWtsYXlvdXQubWFnaWMubHlkcmMKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS93Yl9ob3N0L3J1bnMvd2JfaG9zdC9yZXBvcnRzL3BsYWNlbWVudC85LW9wZW5waHlzeW5fYWxsY2hlY2tzLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3diX2hvc3QvcnVucy93Yl9ob3N0L3JlcG9ydHMvcGxhY2VtZW50Lzktb3BlbnBoeXN5bl90bnMucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvd2JfaG9zdC9ydW5zL3diX2hvc3QvcmVwb3J0cy9wbGFjZW1lbnQvOS1vcGVucGh5c3luX3ducy5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS93Yl9ob3N0L3J1bnMvd2JfaG9zdC9yZXN1bHRzL3N5bnRoZXNpcy93Yl9ob3N0LnN5bnRoZXNpc19jdHMudgorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3diX2hvc3QvcnVucy93Yl9ob3N0L3Jlc3VsdHMvc3ludGhlc2lzL3diX2hvc3Quc3ludGhlc2lzLnYKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS93Yl9ob3N0L3J1bnMvd2JfaG9zdC9yZXN1bHRzL3N5bnRoZXNpcy93Yl9ob3N0LnN5bnRoZXNpc19wcmVyb3V0ZS52CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvd2JfaG9zdC9ydW5zL3diX2hvc3QvcmVzdWx0cy9zeW50aGVzaXMvd2JfaG9zdC5zeW50aGVzaXNfZGlvZGVzLnYKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS93Yl9ob3N0L3J1bnMvd2JfaG9zdC9yZXN1bHRzL3N5bnRoZXNpcy93Yl9ob3N0LnN5bnRoZXNpc19vcHRpbWl6ZWQudgorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3diX2hvc3QvcnVucy93Yl9ob3N0L3Jlc3VsdHMvcm91dGluZy93Yl9ob3N0LnNwZWYKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS93Yl9ob3N0L3J1bnMvd2JfaG9zdC9yZXN1bHRzL3JvdXRpbmcvd2JfaG9zdC5kZWYucmVmCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvd2JfaG9zdC9ydW5zL3diX2hvc3QvcmVzdWx0cy9tYWdpYy8ubWFnaWNyYworL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3diX2hvc3QvcnVucy93Yl9ob3N0L3Jlc3VsdHMvbWFnaWMvd2JfaG9zdC5nZHMubHlkcmMKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS93Yl9ob3N0L3J1bnMvd2JfaG9zdC9yZXN1bHRzL2x2cy93Yl9ob3N0Lmx2cy5wb3dlcmVkLnYKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS93Yl9ob3N0L3J1bnMvd2JfaG9zdC9yZXN1bHRzL2x2cy93Yl9ob3N0Lmx2cy5sZWYuanNvbgorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3diX2hvc3QvcnVucy93Yl9ob3N0L3Jlc3VsdHMva2xheW91dC93Yl9ob3N0Lmx5cAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL2Nsa19idWYvcnVucy9jbGtfYnVmL2NvbmZpZy50Y2wKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9jbGtfYnVmL3J1bnMvY2xrX2J1Zi90bXAvdHJpbW1lZC5saWIKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9jbGtfYnVmL3J1bnMvY2xrX2J1Zi90bXAvdHJhY2tzX2NvcHkuaW5mbworL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL2Nsa19idWYvcnVucy9jbGtfYnVmL3RtcC9za3kxMzBfZmRfc2NfaGRfX3R0XzAyNUNfMXY4MC5ub19wZy5saWIKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9jbGtfYnVmL3J1bnMvY2xrX2J1Zi90bXAvc3ludGhlc2lzL2hpZXJhcmNoeS5kb3QKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9jbGtfYnVmL3J1bnMvY2xrX2J1Zi90bXAvc3ludGhlc2lzL3lvc3lzLnNkYworL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL2Nsa19idWYvcnVucy9jbGtfYnVmL3JlcG9ydHMvcnVudGltZV9zdW1tYXJ5X3JlcG9ydC5ycHQucGFyc2FibGUKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9jbGtfYnVmL3J1bnMvY2xrX2J1Zi9yZXBvcnRzL3J1bnRpbWVfc3VtbWFyeV9yZXBvcnQucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvY2xrX2J1Zi9ydW5zL2Nsa19idWYvcmVwb3J0cy9tYW51ZmFjdHVyYWJpbGl0eV9yZXBvcnQucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvY2xrX2J1Zi9ydW5zL2Nsa19idWYvcmVwb3J0cy9zeW50aGVzaXMvMS15b3N5c180LmNoay5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9jbGtfYnVmL3J1bnMvY2xrX2J1Zi9yZXBvcnRzL3N5bnRoZXNpcy8xLXlvc3lzX3ByZS5zdGF0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvY2xrX2J1Zi9ydW5zL2Nsa19idWYvcmVwb3J0cy9zeW50aGVzaXMvMS15b3N5c19kZmYuc3RhdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL2Nsa19idWYvcnVucy9jbGtfYnVmL3JlcG9ydHMvc3ludGhlc2lzLzEteW9zeXNfNC5zdGF0LnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL2Nsa19idWYvcnVucy9jbGtfYnVmL3JlcG9ydHMvZmxvb3JwbGFuLzItdmVyaWxvZzJkZWYuY29yZV9hcmVhLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL2Nsa19idWYvcnVucy9jbGtfYnVmL3JlcG9ydHMvZmxvb3JwbGFuLzItdmVyaWxvZzJkZWYuZGllX2FyZWEucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvY2xrX2J1Zi9ydW5zL2Nsa19idWYvcmVzdWx0cy9zeW50aGVzaXMvY2xrX2J1Zi5zeW50aGVzaXMudgorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3VhcnQvdW5jb25zdHJhaW50cy5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS91YXJ0L3J1bnMvdWFydC9jb25maWcudGNsCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdWFydC9ydW5zL3VhcnQvdG1wL21hZ2ljX3NwaWNlLnRjbAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3VhcnQvcnVucy91YXJ0L3RtcC9vcHQubGliCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdWFydC9ydW5zL3VhcnQvdG1wL3RyaW1tZWQubGliCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdWFydC9ydW5zL3VhcnQvdG1wL3RyYWNrc19jb3B5LmluZm8KKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS91YXJ0L3J1bnMvdWFydC90bXAvc2t5MTMwX2ZkX3NjX2hkX190dF8wMjVDXzF2ODAubm9fcGcubGliCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdWFydC9ydW5zL3VhcnQvdG1wL3N5bnRoZXNpcy9oaWVyYXJjaHkuZG90CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdWFydC9ydW5zL3VhcnQvdG1wL3N5bnRoZXNpcy95b3N5cy5zZGMKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS91YXJ0L3J1bnMvdWFydC90bXAvcm91dGluZy8yMy10cml0b25Sb3V0ZS5ndWlkZQorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3VhcnQvcnVucy91YXJ0L3RtcC9yb3V0aW5nLzIzLXRyaXRvblJvdXRlLnBhcmFtCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdWFydC9ydW5zL3VhcnQvdG1wL3JvdXRpbmcvMjEtZmFzdHJvdXRlLmd1aWRlCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdWFydC9ydW5zL3VhcnQvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fY29uYl8xLmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3VhcnQvcnVucy91YXJ0L3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX25vcjJfNC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS91YXJ0L3J1bnMvdWFydC90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19hbmQyXzQuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdWFydC9ydW5zL3VhcnQvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fYTIxb2lfNC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS91YXJ0L3J1bnMvdWFydC90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19maWxsXzIuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdWFydC9ydW5zL3VhcnQvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fYTMyb180LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3VhcnQvcnVucy91YXJ0L3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX29yMl80LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3VhcnQvcnVucy91YXJ0L3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX2Nsa2J1Zl8xNi5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS91YXJ0L3J1bnMvdWFydC90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF80LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3VhcnQvcnVucy91YXJ0L3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX2Rpb2RlXzIuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdWFydC9ydW5zL3VhcnQvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fYnVmXzQuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdWFydC9ydW5zL3VhcnQvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fYnVmXzguZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdWFydC9ydW5zL3VhcnQvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fbmFuZDJfNC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS91YXJ0L3J1bnMvdWFydC90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19hMjExb180LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3VhcnQvcnVucy91YXJ0L3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX2EyMW9fNC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS91YXJ0L3J1bnMvdWFydC90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19hMjFib2lfNC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS91YXJ0L3J1bnMvdWFydC90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19idWZfMi5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS91YXJ0L3J1bnMvdWFydC90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19vcjNfNC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS91YXJ0L3J1bnMvdWFydC90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMi5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS91YXJ0L3J1bnMvdWFydC90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19hMmJiMm9fNC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS91YXJ0L3J1bnMvdWFydC90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19hbmQ0XzQuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdWFydC9ydW5zL3VhcnQvdG1wL21hZ2ljL3VhcnRfY29yZS5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS91YXJ0L3J1bnMvdWFydC90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zLmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3VhcnQvcnVucy91YXJ0L3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX28yMWFpXzQuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdWFydC9ydW5zL3VhcnQvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fYTIyb2lfNC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS91YXJ0L3J1bnMvdWFydC90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19kZnJ0cF80LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3VhcnQvcnVucy91YXJ0L3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX2RmeHRwXzQuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdWFydC9ydW5zL3VhcnQvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fdGFwdnB3cnZnbmRfMS5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS91YXJ0L3J1bnMvdWFydC90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19hMjExMW9fNC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS91YXJ0L3J1bnMvdWFydC90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19maWxsXzEuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdWFydC9ydW5zL3VhcnQvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fY2xrYnVmXzEuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdWFydC9ydW5zL3VhcnQvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fZGVjYXBfNi5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS91YXJ0L3J1bnMvdWFydC90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19vcjRfNC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS91YXJ0L3J1bnMvdWFydC90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19hMjFib180LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3VhcnQvcnVucy91YXJ0L3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX2RlY2FwXzguZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdWFydC9ydW5zL3VhcnQvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9faW52XzIuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdWFydC9ydW5zL3VhcnQvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fbzIxYV80LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3VhcnQvcnVucy91YXJ0L3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX28yMmFfNC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS91YXJ0L3J1bnMvdWFydC90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19hbmQzXzQuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdWFydC9ydW5zL3VhcnQvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fZGZzdHBfNC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS91YXJ0L3J1bnMvdWFydC90bXAvbHZzL3NldHVwX2ZpbGUubGVmLmx2cworL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3VhcnQvcnVucy91YXJ0L3JlcG9ydHMvcnVudGltZV9zdW1tYXJ5X3JlcG9ydC5ycHQucGFyc2FibGUKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS91YXJ0L3J1bnMvdWFydC9yZXBvcnRzL3J1bnRpbWVfc3VtbWFyeV9yZXBvcnQucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdWFydC9ydW5zL3VhcnQvcmVwb3J0cy9tYW51ZmFjdHVyYWJpbGl0eV9yZXBvcnQucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdWFydC9ydW5zL3VhcnQvcmVwb3J0cy9zeW50aGVzaXMvMjYtb3BlbnN0YV9zcGVmX3ducy5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS91YXJ0L3J1bnMvdWFydC9yZXBvcnRzL3N5bnRoZXNpcy8xLXlvc3lzXzQuY2hrLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3VhcnQvcnVucy91YXJ0L3JlcG9ydHMvc3ludGhlc2lzLzI2LW9wZW5zdGFfc3BlZi5taW5fbWF4LnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3VhcnQvcnVucy91YXJ0L3JlcG9ydHMvc3ludGhlc2lzLzI2LW9wZW5zdGFfc3BlZl90bnMucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdWFydC9ydW5zL3VhcnQvcmVwb3J0cy9zeW50aGVzaXMvMi1vcGVuc3RhLm1pbl9tYXgucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdWFydC9ydW5zL3VhcnQvcmVwb3J0cy9zeW50aGVzaXMvMS15b3N5c19wcmUuc3RhdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3VhcnQvcnVucy91YXJ0L3JlcG9ydHMvc3ludGhlc2lzLzItb3BlbnN0YV90bnMucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdWFydC9ydW5zL3VhcnQvcmVwb3J0cy9zeW50aGVzaXMvMTEtb3BlbnN0YV9wb3N0X29wZW5waHlzeW4ucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdWFydC9ydW5zL3VhcnQvcmVwb3J0cy9zeW50aGVzaXMvMTEtb3BlbnN0YV9wb3N0X29wZW5waHlzeW5fdG5zLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3VhcnQvcnVucy91YXJ0L3JlcG9ydHMvc3ludGhlc2lzLzEteW9zeXNfZGZmLnN0YXQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS91YXJ0L3J1bnMvdWFydC9yZXBvcnRzL3N5bnRoZXNpcy8xMS1vcGVuc3RhX3Bvc3Rfb3BlbnBoeXN5bi5taW5fbWF4LnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3VhcnQvcnVucy91YXJ0L3JlcG9ydHMvc3ludGhlc2lzLzExLW9wZW5zdGFfcG9zdF9vcGVucGh5c3luLnRpbWluZy5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS91YXJ0L3J1bnMvdWFydC9yZXBvcnRzL3N5bnRoZXNpcy8yLW9wZW5zdGFfd25zLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3VhcnQvcnVucy91YXJ0L3JlcG9ydHMvc3ludGhlc2lzLzItb3BlbnN0YS5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS91YXJ0L3J1bnMvdWFydC9yZXBvcnRzL3N5bnRoZXNpcy8yNi1vcGVuc3RhX3NwZWYudGltaW5nLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3VhcnQvcnVucy91YXJ0L3JlcG9ydHMvc3ludGhlc2lzLzItb3BlbnN0YS50aW1pbmcucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdWFydC9ydW5zL3VhcnQvcmVwb3J0cy9zeW50aGVzaXMvMjYtb3BlbnN0YV9zcGVmLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3VhcnQvcnVucy91YXJ0L3JlcG9ydHMvc3ludGhlc2lzLzExLW9wZW5zdGFfcG9zdF9vcGVucGh5c3luX3ducy5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS91YXJ0L3J1bnMvdWFydC9yZXBvcnRzL3N5bnRoZXNpcy8xLXlvc3lzXzQuc3RhdC5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS91YXJ0L3J1bnMvdWFydC9yZXBvcnRzL3JvdXRpbmcvNDQtYW50ZW5uYS5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS91YXJ0L3J1bnMvdWFydC9yZXBvcnRzL2Zsb29ycGxhbi8zLXZlcmlsb2cyZGVmLmRpZV9hcmVhLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3VhcnQvcnVucy91YXJ0L3JlcG9ydHMvZmxvb3JwbGFuLzMtdmVyaWxvZzJkZWYuY29yZV9hcmVhLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3VhcnQvcnVucy91YXJ0L3JlcG9ydHMva2xheW91dC8zNi1rbGF5b3V0Lnhvci5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS91YXJ0L3J1bnMvdWFydC9yZXBvcnRzL2tsYXlvdXQvMzgta2xheW91dC54b3IucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdWFydC9ydW5zL3VhcnQvcmVwb3J0cy9rbGF5b3V0LzQyLWtsYXlvdXQubWFnaWMubHlkcmMKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS91YXJ0L3J1bnMvdWFydC9yZXBvcnRzL3BsYWNlbWVudC85LW9wZW5waHlzeW5fYWxsY2hlY2tzLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3VhcnQvcnVucy91YXJ0L3JlcG9ydHMvcGxhY2VtZW50Lzktb3BlbnBoeXN5bl90bnMucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdWFydC9ydW5zL3VhcnQvcmVwb3J0cy9wbGFjZW1lbnQvOS1vcGVucGh5c3luX3ducy5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS91YXJ0L3J1bnMvdWFydC9yZXN1bHRzL3N5bnRoZXNpcy91YXJ0X2NvcmUuc3ludGhlc2lzX2N0cy52CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdWFydC9ydW5zL3VhcnQvcmVzdWx0cy9zeW50aGVzaXMvdWFydF9jb3JlLnN5bnRoZXNpcy52CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdWFydC9ydW5zL3VhcnQvcmVzdWx0cy9zeW50aGVzaXMvdWFydF9jb3JlLnN5bnRoZXNpc19kaW9kZXMudgorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3VhcnQvcnVucy91YXJ0L3Jlc3VsdHMvc3ludGhlc2lzL3VhcnRfY29yZS5zeW50aGVzaXNfb3B0aW1pemVkLnYKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS91YXJ0L3J1bnMvdWFydC9yZXN1bHRzL3N5bnRoZXNpcy91YXJ0X2NvcmUuc3ludGhlc2lzX3ByZXJvdXRlLnYKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS91YXJ0L3J1bnMvdWFydC9yZXN1bHRzL3JvdXRpbmcvdWFydF9jb3JlLmRlZi5yZWYKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS91YXJ0L3J1bnMvdWFydC9yZXN1bHRzL3JvdXRpbmcvdWFydF9jb3JlLnNwZWYKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS91YXJ0L3J1bnMvdWFydC9yZXN1bHRzL21hZ2ljLy5tYWdpY3JjCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdWFydC9ydW5zL3VhcnQvcmVzdWx0cy9tYWdpYy91YXJ0X2NvcmUuZ2RzLmx5ZHJjCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdWFydC9ydW5zL3VhcnQvcmVzdWx0cy9sdnMvdWFydF9jb3JlLmx2cy5sZWYuanNvbgorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3VhcnQvcnVucy91YXJ0L3Jlc3VsdHMvbHZzL3VhcnRfY29yZS5sdnMucG93ZXJlZC52CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdWFydC9ydW5zL3VhcnQvcmVzdWx0cy9rbGF5b3V0L3VhcnRfY29yZS5seXAKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS90ZXN0L3VuY29uc3RyYWludHMucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdGVzdC9ydW5zL3RlbXAvY29uZmlnLnRjbAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Rlc3QvcnVucy90ZW1wL3RtcC9vcHQubGliCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdGVzdC9ydW5zL3RlbXAvdG1wL3RyaW1tZWQubGliCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdGVzdC9ydW5zL3RlbXAvdG1wL3RyYWNrc19jb3B5LmluZm8KKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS90ZXN0L3J1bnMvdGVtcC90bXAvc2t5MTMwX2ZkX3NjX2hkX190dF8wMjVDXzF2ODAubm9fcGcubGliCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdGVzdC9ydW5zL3RlbXAvdG1wL3N5bnRoZXNpcy9oaWVyYXJjaHkuZG90CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdGVzdC9ydW5zL3RlbXAvdG1wL3N5bnRoZXNpcy95b3N5cy5zZGMKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS90ZXN0L3J1bnMvdGVtcC9yZXBvcnRzL3J1bnRpbWVfc3VtbWFyeV9yZXBvcnQucnB0LnBhcnNhYmxlCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdGVzdC9ydW5zL3RlbXAvcmVwb3J0cy9ydW50aW1lX3N1bW1hcnlfcmVwb3J0LnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Rlc3QvcnVucy90ZW1wL3JlcG9ydHMvbWFudWZhY3R1cmFiaWxpdHlfcmVwb3J0LnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Rlc3QvcnVucy90ZW1wL3JlcG9ydHMvc3ludGhlc2lzLzEteW9zeXNfNC5jaGsucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdGVzdC9ydW5zL3RlbXAvcmVwb3J0cy9zeW50aGVzaXMvMi1vcGVuc3RhLm1pbl9tYXgucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdGVzdC9ydW5zL3RlbXAvcmVwb3J0cy9zeW50aGVzaXMvMS15b3N5c19wcmUuc3RhdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Rlc3QvcnVucy90ZW1wL3JlcG9ydHMvc3ludGhlc2lzLzItb3BlbnN0YV90bnMucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdGVzdC9ydW5zL3RlbXAvcmVwb3J0cy9zeW50aGVzaXMvMS15b3N5c19kZmYuc3RhdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Rlc3QvcnVucy90ZW1wL3JlcG9ydHMvc3ludGhlc2lzLzItb3BlbnN0YV93bnMucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdGVzdC9ydW5zL3RlbXAvcmVwb3J0cy9zeW50aGVzaXMvMi1vcGVuc3RhLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Rlc3QvcnVucy90ZW1wL3JlcG9ydHMvc3ludGhlc2lzLzItb3BlbnN0YS50aW1pbmcucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdGVzdC9ydW5zL3RlbXAvcmVwb3J0cy9zeW50aGVzaXMvMS15b3N5c180LnN0YXQucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdGVzdC9ydW5zL3RlbXAvcmVwb3J0cy9mbG9vcnBsYW4vMy12ZXJpbG9nMmRlZi5kaWVfYXJlYS5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS90ZXN0L3J1bnMvdGVtcC9yZXBvcnRzL2Zsb29ycGxhbi8zLXZlcmlsb2cyZGVmLmNvcmVfYXJlYS5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS90ZXN0L3J1bnMvdGVtcC9yZXN1bHRzL3N5bnRoZXNpcy90ZXN0LnN5bnRoZXNpcy52CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdGVzdC9ydW5zL3Rlc3QvY29uZmlnLnRjbAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Rlc3QvcnVucy90ZXN0L3RtcC9tYWdpY19zcGljZS50Y2wKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS90ZXN0L3J1bnMvdGVzdC90bXAvb3B0LmxpYgorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Rlc3QvcnVucy90ZXN0L3RtcC90cmltbWVkLmxpYgorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Rlc3QvcnVucy90ZXN0L3RtcC90cmFja3NfY29weS5pbmZvCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdGVzdC9ydW5zL3Rlc3QvdG1wL3NreTEzMF9mZF9zY19oZF9fdHRfMDI1Q18xdjgwLm5vX3BnLmxpYgorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Rlc3QvcnVucy90ZXN0L3RtcC9zeW50aGVzaXMvaGllcmFyY2h5LmRvdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Rlc3QvcnVucy90ZXN0L3RtcC9zeW50aGVzaXMveW9zeXMuc2RjCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdGVzdC9ydW5zL3Rlc3QvdG1wL3JvdXRpbmcvMjAtdHJpdG9uUm91dGUucGFyYW0KKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS90ZXN0L3J1bnMvdGVzdC90bXAvcm91dGluZy8yMC10cml0b25Sb3V0ZS5ndWlkZQorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Rlc3QvcnVucy90ZXN0L3RtcC9yb3V0aW5nLzE3LWZhc3Ryb3V0ZS5ndWlkZQorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Rlc3QvcnVucy90ZXN0L3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX2NvbmJfMS5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS90ZXN0L3J1bnMvdGVzdC90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19ub3IyXzQuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdGVzdC9ydW5zL3Rlc3QvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fYW5kMl80LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Rlc3QvcnVucy90ZXN0L3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX2EyMW9pXzQuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdGVzdC9ydW5zL3Rlc3QvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fZmlsbF8yLmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Rlc3QvcnVucy90ZXN0L3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX2EzMm9fNC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS90ZXN0L3J1bnMvdGVzdC90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19vcjJfNC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS90ZXN0L3J1bnMvdGVzdC90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19jbGtidWZfMTYuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdGVzdC9ydW5zL3Rlc3QvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fZGVjYXBfNC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS90ZXN0L3J1bnMvdGVzdC90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19idWZfOC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS90ZXN0L3J1bnMvdGVzdC90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19uYW5kMl80LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Rlc3QvcnVucy90ZXN0L3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX2EyMTFvXzQuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdGVzdC9ydW5zL3Rlc3QvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fYTIxb180LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Rlc3QvcnVucy90ZXN0L3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX2EyMWJvaV80LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Rlc3QvcnVucy90ZXN0L3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX2J1Zl8yLmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Rlc3QvcnVucy90ZXN0L3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX29yM180LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Rlc3QvcnVucy90ZXN0L3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyLmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Rlc3QvcnVucy90ZXN0L3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX2EyYmIyb180LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Rlc3QvcnVucy90ZXN0L3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX2FuZDRfNC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS90ZXN0L3J1bnMvdGVzdC90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zLmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Rlc3QvcnVucy90ZXN0L3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX28yMWFpXzQuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdGVzdC9ydW5zL3Rlc3QvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fYTIyb2lfNC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS90ZXN0L3J1bnMvdGVzdC90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19kZnJ0cF80LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Rlc3QvcnVucy90ZXN0L3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX2RmeHRwXzQuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdGVzdC9ydW5zL3Rlc3QvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fdGFwdnB3cnZnbmRfMS5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS90ZXN0L3J1bnMvdGVzdC90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19hMjExMW9fNC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS90ZXN0L3J1bnMvdGVzdC90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19kbHlnYXRlNHNkM18xLmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Rlc3QvcnVucy90ZXN0L3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX2ZpbGxfMS5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS90ZXN0L3J1bnMvdGVzdC90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19jbGtidWZfMS5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS90ZXN0L3J1bnMvdGVzdC90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19vMzJhXzQuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdGVzdC9ydW5zL3Rlc3QvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fZGVjYXBfNi5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS90ZXN0L3J1bnMvdGVzdC90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19vcjRfNC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS90ZXN0L3J1bnMvdGVzdC90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19hMjFib180LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Rlc3QvcnVucy90ZXN0L3RtcC9tYWdpYy90ZXN0LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Rlc3QvcnVucy90ZXN0L3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX2J1ZmJ1Zl8xNi5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS90ZXN0L3J1bnMvdGVzdC90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF84LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Rlc3QvcnVucy90ZXN0L3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX2ludl8yLmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Rlc3QvcnVucy90ZXN0L3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX28yMWFfNC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS90ZXN0L3J1bnMvdGVzdC90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19vMjJhXzQuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdGVzdC9ydW5zL3Rlc3QvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fYW5kM180LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Rlc3QvcnVucy90ZXN0L3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX2Rmc3RwXzQuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdGVzdC9ydW5zL3Rlc3QvdG1wL2x2cy9zZXR1cF9maWxlLmxlZi5sdnMKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS90ZXN0L3J1bnMvdGVzdC9yZXBvcnRzL3J1bnRpbWVfc3VtbWFyeV9yZXBvcnQucnB0LnBhcnNhYmxlCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdGVzdC9ydW5zL3Rlc3QvcmVwb3J0cy9ydW50aW1lX3N1bW1hcnlfcmVwb3J0LnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Rlc3QvcnVucy90ZXN0L3JlcG9ydHMvbWFudWZhY3R1cmFiaWxpdHlfcmVwb3J0LnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Rlc3QvcnVucy90ZXN0L3JlcG9ydHMvc3ludGhlc2lzLzEteW9zeXNfNC5jaGsucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdGVzdC9ydW5zL3Rlc3QvcmVwb3J0cy9zeW50aGVzaXMvMi1vcGVuc3RhLm1pbl9tYXgucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdGVzdC9ydW5zL3Rlc3QvcmVwb3J0cy9zeW50aGVzaXMvMS15b3N5c19wcmUuc3RhdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Rlc3QvcnVucy90ZXN0L3JlcG9ydHMvc3ludGhlc2lzLzItb3BlbnN0YV90bnMucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdGVzdC9ydW5zL3Rlc3QvcmVwb3J0cy9zeW50aGVzaXMvMTEtb3BlbnN0YV9wb3N0X29wZW5waHlzeW4ucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdGVzdC9ydW5zL3Rlc3QvcmVwb3J0cy9zeW50aGVzaXMvMTEtb3BlbnN0YV9wb3N0X29wZW5waHlzeW5fdG5zLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Rlc3QvcnVucy90ZXN0L3JlcG9ydHMvc3ludGhlc2lzLzEteW9zeXNfZGZmLnN0YXQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS90ZXN0L3J1bnMvdGVzdC9yZXBvcnRzL3N5bnRoZXNpcy8yMy1vcGVuc3RhX3NwZWZfdG5zLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Rlc3QvcnVucy90ZXN0L3JlcG9ydHMvc3ludGhlc2lzLzIzLW9wZW5zdGFfc3BlZi5taW5fbWF4LnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Rlc3QvcnVucy90ZXN0L3JlcG9ydHMvc3ludGhlc2lzLzExLW9wZW5zdGFfcG9zdF9vcGVucGh5c3luLm1pbl9tYXgucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdGVzdC9ydW5zL3Rlc3QvcmVwb3J0cy9zeW50aGVzaXMvMTEtb3BlbnN0YV9wb3N0X29wZW5waHlzeW4udGltaW5nLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Rlc3QvcnVucy90ZXN0L3JlcG9ydHMvc3ludGhlc2lzLzIzLW9wZW5zdGFfc3BlZi50aW1pbmcucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdGVzdC9ydW5zL3Rlc3QvcmVwb3J0cy9zeW50aGVzaXMvMi1vcGVuc3RhX3ducy5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS90ZXN0L3J1bnMvdGVzdC9yZXBvcnRzL3N5bnRoZXNpcy8yLW9wZW5zdGEucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdGVzdC9ydW5zL3Rlc3QvcmVwb3J0cy9zeW50aGVzaXMvMjMtb3BlbnN0YV9zcGVmX3ducy5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS90ZXN0L3J1bnMvdGVzdC9yZXBvcnRzL3N5bnRoZXNpcy8yLW9wZW5zdGEudGltaW5nLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Rlc3QvcnVucy90ZXN0L3JlcG9ydHMvc3ludGhlc2lzLzIzLW9wZW5zdGFfc3BlZi5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS90ZXN0L3J1bnMvdGVzdC9yZXBvcnRzL3N5bnRoZXNpcy8xMS1vcGVuc3RhX3Bvc3Rfb3BlbnBoeXN5bl93bnMucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdGVzdC9ydW5zL3Rlc3QvcmVwb3J0cy9zeW50aGVzaXMvMS15b3N5c180LnN0YXQucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdGVzdC9ydW5zL3Rlc3QvcmVwb3J0cy9yb3V0aW5nLzQxLWFudGVubmEucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdGVzdC9ydW5zL3Rlc3QvcmVwb3J0cy9mbG9vcnBsYW4vMy12ZXJpbG9nMmRlZi5kaWVfYXJlYS5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS90ZXN0L3J1bnMvdGVzdC9yZXBvcnRzL2Zsb29ycGxhbi8zLXZlcmlsb2cyZGVmLmNvcmVfYXJlYS5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS90ZXN0L3J1bnMvdGVzdC9yZXBvcnRzL2tsYXlvdXQvMzkta2xheW91dC5tYWdpYy5seWRyYworL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Rlc3QvcnVucy90ZXN0L3JlcG9ydHMva2xheW91dC8zNS1rbGF5b3V0Lnhvci5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS90ZXN0L3J1bnMvdGVzdC9yZXBvcnRzL2tsYXlvdXQvMzMta2xheW91dC54b3IucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdGVzdC9ydW5zL3Rlc3QvcmVwb3J0cy9wbGFjZW1lbnQvOS1vcGVucGh5c3luX2FsbGNoZWNrcy5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS90ZXN0L3J1bnMvdGVzdC9yZXBvcnRzL3BsYWNlbWVudC85LW9wZW5waHlzeW5fdG5zLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Rlc3QvcnVucy90ZXN0L3JlcG9ydHMvcGxhY2VtZW50Lzktb3BlbnBoeXN5bl93bnMucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdGVzdC9ydW5zL3Rlc3QvcmVwb3J0cy9wbGFjZW1lbnQvOS1vcGVucGh5c3luX3Zpb2xhdG9ycy5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS90ZXN0L3J1bnMvdGVzdC9yZXN1bHRzL3N5bnRoZXNpcy90ZXN0LnN5bnRoZXNpc19vcHRpbWl6ZWQudgorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Rlc3QvcnVucy90ZXN0L3Jlc3VsdHMvc3ludGhlc2lzL3Rlc3Quc3ludGhlc2lzX3ByZXJvdXRlLnYKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS90ZXN0L3J1bnMvdGVzdC9yZXN1bHRzL3N5bnRoZXNpcy90ZXN0LnN5bnRoZXNpc19jdHMudgorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Rlc3QvcnVucy90ZXN0L3Jlc3VsdHMvc3ludGhlc2lzL3Rlc3Quc3ludGhlc2lzLnYKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS90ZXN0L3J1bnMvdGVzdC9yZXN1bHRzL3JvdXRpbmcvdGVzdC5kZWYucmVmCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdGVzdC9ydW5zL3Rlc3QvcmVzdWx0cy9yb3V0aW5nL3Rlc3Quc3BlZgorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3Rlc3QvcnVucy90ZXN0L3Jlc3VsdHMvbWFnaWMvLm1hZ2ljcmMKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS90ZXN0L3J1bnMvdGVzdC9yZXN1bHRzL21hZ2ljL3Rlc3QuZ2RzLmx5ZHJjCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdGVzdC9ydW5zL3Rlc3QvcmVzdWx0cy9sdnMvdGVzdC5sdnMubGVmLmpzb24KKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS90ZXN0L3J1bnMvdGVzdC9yZXN1bHRzL2x2cy90ZXN0Lmx2cy5wb3dlcmVkLnYKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS90ZXN0L3J1bnMvdGVzdC9yZXN1bHRzL2tsYXlvdXQvdGVzdC5seXAKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS93Yl9pbnRlcmNvbm5lY3QvdW5jb25zdHJhaW50cy5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS93Yl9pbnRlcmNvbm5lY3QvdGltaW5nLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3diX2ludGVyY29ubmVjdC9ydW5zL3diX2ludGVyY29ubmVjdC9jb25maWcudGNsCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvd2JfaW50ZXJjb25uZWN0L3J1bnMvd2JfaW50ZXJjb25uZWN0L3RtcC9vcHQubGliCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvd2JfaW50ZXJjb25uZWN0L3J1bnMvd2JfaW50ZXJjb25uZWN0L3RtcC90cmltbWVkLmxpYgorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3diX2ludGVyY29ubmVjdC9ydW5zL3diX2ludGVyY29ubmVjdC90bXAvdHJhY2tzX2NvcHkuaW5mbworL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3diX2ludGVyY29ubmVjdC9ydW5zL3diX2ludGVyY29ubmVjdC90bXAvc2t5MTMwX2ZkX3NjX2hkX190dF8wMjVDXzF2ODAubm9fcGcubGliCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvd2JfaW50ZXJjb25uZWN0L3J1bnMvd2JfaW50ZXJjb25uZWN0L3RtcC9zeW50aGVzaXMvaGllcmFyY2h5LmRvdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3diX2ludGVyY29ubmVjdC9ydW5zL3diX2ludGVyY29ubmVjdC90bXAvc3ludGhlc2lzL3lvc3lzLnNkYworL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3diX2ludGVyY29ubmVjdC9ydW5zL3diX2ludGVyY29ubmVjdC90bXAvcm91dGluZy8yMy10cml0b25Sb3V0ZS5ndWlkZQorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3diX2ludGVyY29ubmVjdC9ydW5zL3diX2ludGVyY29ubmVjdC90bXAvcm91dGluZy8yMy10cml0b25Sb3V0ZS5wYXJhbQorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3diX2ludGVyY29ubmVjdC9ydW5zL3diX2ludGVyY29ubmVjdC90bXAvcm91dGluZy8yMS1mYXN0cm91dGUuZ3VpZGUKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS93Yl9pbnRlcmNvbm5lY3QvcnVucy93Yl9pbnRlcmNvbm5lY3QvcmVwb3J0cy9ydW50aW1lX3N1bW1hcnlfcmVwb3J0LnJwdC5wYXJzYWJsZQorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3diX2ludGVyY29ubmVjdC9ydW5zL3diX2ludGVyY29ubmVjdC9yZXBvcnRzL3J1bnRpbWVfc3VtbWFyeV9yZXBvcnQucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvd2JfaW50ZXJjb25uZWN0L3J1bnMvd2JfaW50ZXJjb25uZWN0L3JlcG9ydHMvbWFudWZhY3R1cmFiaWxpdHlfcmVwb3J0LnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3diX2ludGVyY29ubmVjdC9ydW5zL3diX2ludGVyY29ubmVjdC9yZXBvcnRzL3N5bnRoZXNpcy8xLXlvc3lzXzQuY2hrLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3diX2ludGVyY29ubmVjdC9ydW5zL3diX2ludGVyY29ubmVjdC9yZXBvcnRzL3N5bnRoZXNpcy8yLW9wZW5zdGEubWluX21heC5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS93Yl9pbnRlcmNvbm5lY3QvcnVucy93Yl9pbnRlcmNvbm5lY3QvcmVwb3J0cy9zeW50aGVzaXMvMS15b3N5c19wcmUuc3RhdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3diX2ludGVyY29ubmVjdC9ydW5zL3diX2ludGVyY29ubmVjdC9yZXBvcnRzL3N5bnRoZXNpcy8yLW9wZW5zdGFfdG5zLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3diX2ludGVyY29ubmVjdC9ydW5zL3diX2ludGVyY29ubmVjdC9yZXBvcnRzL3N5bnRoZXNpcy8xMS1vcGVuc3RhX3Bvc3Rfb3BlbnBoeXN5bi5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS93Yl9pbnRlcmNvbm5lY3QvcnVucy93Yl9pbnRlcmNvbm5lY3QvcmVwb3J0cy9zeW50aGVzaXMvMTEtb3BlbnN0YV9wb3N0X29wZW5waHlzeW5fdG5zLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3diX2ludGVyY29ubmVjdC9ydW5zL3diX2ludGVyY29ubmVjdC9yZXBvcnRzL3N5bnRoZXNpcy8xLXlvc3lzX2RmZi5zdGF0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvd2JfaW50ZXJjb25uZWN0L3J1bnMvd2JfaW50ZXJjb25uZWN0L3JlcG9ydHMvc3ludGhlc2lzLzExLW9wZW5zdGFfcG9zdF9vcGVucGh5c3luLm1pbl9tYXgucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvd2JfaW50ZXJjb25uZWN0L3J1bnMvd2JfaW50ZXJjb25uZWN0L3JlcG9ydHMvc3ludGhlc2lzLzExLW9wZW5zdGFfcG9zdF9vcGVucGh5c3luLnRpbWluZy5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS93Yl9pbnRlcmNvbm5lY3QvcnVucy93Yl9pbnRlcmNvbm5lY3QvcmVwb3J0cy9zeW50aGVzaXMvMi1vcGVuc3RhX3ducy5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS93Yl9pbnRlcmNvbm5lY3QvcnVucy93Yl9pbnRlcmNvbm5lY3QvcmVwb3J0cy9zeW50aGVzaXMvMi1vcGVuc3RhLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3diX2ludGVyY29ubmVjdC9ydW5zL3diX2ludGVyY29ubmVjdC9yZXBvcnRzL3N5bnRoZXNpcy8yLW9wZW5zdGEudGltaW5nLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3diX2ludGVyY29ubmVjdC9ydW5zL3diX2ludGVyY29ubmVjdC9yZXBvcnRzL3N5bnRoZXNpcy8xMS1vcGVuc3RhX3Bvc3Rfb3BlbnBoeXN5bl93bnMucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvd2JfaW50ZXJjb25uZWN0L3J1bnMvd2JfaW50ZXJjb25uZWN0L3JlcG9ydHMvc3ludGhlc2lzLzEteW9zeXNfNC5zdGF0LnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3diX2ludGVyY29ubmVjdC9ydW5zL3diX2ludGVyY29ubmVjdC9yZXBvcnRzL2Zsb29ycGxhbi8zLXZlcmlsb2cyZGVmLmRpZV9hcmVhLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3diX2ludGVyY29ubmVjdC9ydW5zL3diX2ludGVyY29ubmVjdC9yZXBvcnRzL2Zsb29ycGxhbi8zLXZlcmlsb2cyZGVmLmNvcmVfYXJlYS5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS93Yl9pbnRlcmNvbm5lY3QvcnVucy93Yl9pbnRlcmNvbm5lY3QvcmVwb3J0cy9wbGFjZW1lbnQvOS1vcGVucGh5c3luX2FsbGNoZWNrcy5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS93Yl9pbnRlcmNvbm5lY3QvcnVucy93Yl9pbnRlcmNvbm5lY3QvcmVwb3J0cy9wbGFjZW1lbnQvOS1vcGVucGh5c3luX3Rucy5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS93Yl9pbnRlcmNvbm5lY3QvcnVucy93Yl9pbnRlcmNvbm5lY3QvcmVwb3J0cy9wbGFjZW1lbnQvOS1vcGVucGh5c3luX3ducy5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS93Yl9pbnRlcmNvbm5lY3QvcnVucy93Yl9pbnRlcmNvbm5lY3QvcmVzdWx0cy9zeW50aGVzaXMvd2JfaW50ZXJjb25uZWN0LnN5bnRoZXNpcy52CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvd2JfaW50ZXJjb25uZWN0L3J1bnMvd2JfaW50ZXJjb25uZWN0L3Jlc3VsdHMvc3ludGhlc2lzL3diX2ludGVyY29ubmVjdC5zeW50aGVzaXNfZGlvZGVzLnYKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS93Yl9pbnRlcmNvbm5lY3QvcnVucy93Yl9pbnRlcmNvbm5lY3QvcmVzdWx0cy9zeW50aGVzaXMvd2JfaW50ZXJjb25uZWN0LnN5bnRoZXNpc19jdHMudgorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3diX2ludGVyY29ubmVjdC9ydW5zL3diX2ludGVyY29ubmVjdC9yZXN1bHRzL3N5bnRoZXNpcy93Yl9pbnRlcmNvbm5lY3Quc3ludGhlc2lzX3ByZXJvdXRlLnYKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS93Yl9pbnRlcmNvbm5lY3QvcnVucy93Yl9pbnRlcmNvbm5lY3QvcmVzdWx0cy9zeW50aGVzaXMvd2JfaW50ZXJjb25uZWN0LnN5bnRoZXNpc19vcHRpbWl6ZWQudgorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3diX2ludGVyY29ubmVjdC9ydW5zL3diX2ludGVyY29ubmVjdC9yZXN1bHRzL3JvdXRpbmcvd2JfaW50ZXJjb25uZWN0LmRlZi5yZWYKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zcGlfbWFzdGVyL3VuY29uc3RyYWludHMucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc3BpX21hc3Rlci9ydW5zL3NwaV9tYXN0ZXIvY29uZmlnLnRjbAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3NwaV9tYXN0ZXIvcnVucy9zcGlfbWFzdGVyL3RtcC9tYWdpY19zcGljZS50Y2wKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zcGlfbWFzdGVyL3J1bnMvc3BpX21hc3Rlci90bXAvb3B0LmxpYgorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3NwaV9tYXN0ZXIvcnVucy9zcGlfbWFzdGVyL3RtcC90cmltbWVkLmxpYgorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3NwaV9tYXN0ZXIvcnVucy9zcGlfbWFzdGVyL3RtcC90cmFja3NfY29weS5pbmZvCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc3BpX21hc3Rlci9ydW5zL3NwaV9tYXN0ZXIvdG1wL3NreTEzMF9mZF9zY19oZF9fdHRfMDI1Q18xdjgwLm5vX3BnLmxpYgorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3NwaV9tYXN0ZXIvcnVucy9zcGlfbWFzdGVyL3RtcC9zeW50aGVzaXMvaGllcmFyY2h5LmRvdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3NwaV9tYXN0ZXIvcnVucy9zcGlfbWFzdGVyL3RtcC9zeW50aGVzaXMveW9zeXMuc2RjCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc3BpX21hc3Rlci9ydW5zL3NwaV9tYXN0ZXIvdG1wL3JvdXRpbmcvMjEtdHJpdG9uUm91dGUuZ3VpZGUKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zcGlfbWFzdGVyL3J1bnMvc3BpX21hc3Rlci90bXAvcm91dGluZy8xNy1mYXN0cm91dGUuZ3VpZGUKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zcGlfbWFzdGVyL3J1bnMvc3BpX21hc3Rlci90bXAvcm91dGluZy8yMS10cml0b25Sb3V0ZS5wYXJhbQorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3NwaV9tYXN0ZXIvcnVucy9zcGlfbWFzdGVyL3RtcC9yb3V0aW5nLzE4LWZhc3Ryb3V0ZV8yLmd1aWRlCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc3BpX21hc3Rlci9ydW5zL3NwaV9tYXN0ZXIvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fY29uYl8xLmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3NwaV9tYXN0ZXIvcnVucy9zcGlfbWFzdGVyL3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX25vcjJfNC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zcGlfbWFzdGVyL3J1bnMvc3BpX21hc3Rlci90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19hbmQyXzQuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc3BpX21hc3Rlci9ydW5zL3NwaV9tYXN0ZXIvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fYTIxb2lfNC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zcGlfbWFzdGVyL3J1bnMvc3BpX21hc3Rlci90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19maWxsXzIuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc3BpX21hc3Rlci9ydW5zL3NwaV9tYXN0ZXIvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fYTMyb180LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3NwaV9tYXN0ZXIvcnVucy9zcGlfbWFzdGVyL3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX29yMl80LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3NwaV9tYXN0ZXIvcnVucy9zcGlfbWFzdGVyL3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX2Nsa2J1Zl8xNi5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zcGlfbWFzdGVyL3J1bnMvc3BpX21hc3Rlci90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF80LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3NwaV9tYXN0ZXIvcnVucy9zcGlfbWFzdGVyL3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX2Rpb2RlXzIuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc3BpX21hc3Rlci9ydW5zL3NwaV9tYXN0ZXIvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fYnVmXzQuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc3BpX21hc3Rlci9ydW5zL3NwaV9tYXN0ZXIvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fbmFuZDJfNC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zcGlfbWFzdGVyL3J1bnMvc3BpX21hc3Rlci90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19hMjExb180LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3NwaV9tYXN0ZXIvcnVucy9zcGlfbWFzdGVyL3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX2EyMW9fNC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zcGlfbWFzdGVyL3J1bnMvc3BpX21hc3Rlci90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19hMjFib2lfNC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zcGlfbWFzdGVyL3J1bnMvc3BpX21hc3Rlci90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19idWZfMi5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zcGlfbWFzdGVyL3J1bnMvc3BpX21hc3Rlci90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19vcjNfNC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zcGlfbWFzdGVyL3J1bnMvc3BpX21hc3Rlci90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMi5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zcGlfbWFzdGVyL3J1bnMvc3BpX21hc3Rlci90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19hMmJiMm9fNC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zcGlfbWFzdGVyL3J1bnMvc3BpX21hc3Rlci90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19hbmQ0XzQuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc3BpX21hc3Rlci9ydW5zL3NwaV9tYXN0ZXIvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fZGVjYXBfMy5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zcGlfbWFzdGVyL3J1bnMvc3BpX21hc3Rlci90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19vMjFhaV80LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3NwaV9tYXN0ZXIvcnVucy9zcGlfbWFzdGVyL3RtcC9tYWdpYy9zcGltX3RvcC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zcGlfbWFzdGVyL3J1bnMvc3BpX21hc3Rlci90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19hMjJvaV80LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3NwaV9tYXN0ZXIvcnVucy9zcGlfbWFzdGVyL3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX2RmcnRwXzQuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc3BpX21hc3Rlci9ydW5zL3NwaV9tYXN0ZXIvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fZGZ4dHBfNC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zcGlfbWFzdGVyL3J1bnMvc3BpX21hc3Rlci90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xLmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3NwaV9tYXN0ZXIvcnVucy9zcGlfbWFzdGVyL3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX2EyMTExb180LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3NwaV9tYXN0ZXIvcnVucy9zcGlfbWFzdGVyL3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX2RseWdhdGU0c2QzXzEuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc3BpX21hc3Rlci9ydW5zL3NwaV9tYXN0ZXIvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fZmlsbF8xLmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3NwaV9tYXN0ZXIvcnVucy9zcGlfbWFzdGVyL3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX2Nsa2J1Zl8xLmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3NwaV9tYXN0ZXIvcnVucy9zcGlfbWFzdGVyL3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX28zMmFfNC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zcGlfbWFzdGVyL3J1bnMvc3BpX21hc3Rlci90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF82LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3NwaV9tYXN0ZXIvcnVucy9zcGlfbWFzdGVyL3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX29yNF80LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3NwaV9tYXN0ZXIvcnVucy9zcGlfbWFzdGVyL3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX2EyMWJvXzQuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc3BpX21hc3Rlci9ydW5zL3NwaV9tYXN0ZXIvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fZGVjYXBfOC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zcGlfbWFzdGVyL3J1bnMvc3BpX21hc3Rlci90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19pbnZfMi5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zcGlfbWFzdGVyL3J1bnMvc3BpX21hc3Rlci90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19vMjFhXzQuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc3BpX21hc3Rlci9ydW5zL3NwaV9tYXN0ZXIvdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fbzIyYV80LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3NwaV9tYXN0ZXIvcnVucy9zcGlfbWFzdGVyL3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX2FuZDNfNC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zcGlfbWFzdGVyL3J1bnMvc3BpX21hc3Rlci90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19kZnN0cF80LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3NwaV9tYXN0ZXIvcnVucy9zcGlfbWFzdGVyL3RtcC9sdnMvc2V0dXBfZmlsZS5sZWYubHZzCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc3BpX21hc3Rlci9ydW5zL3NwaV9tYXN0ZXIvcmVwb3J0cy9ydW50aW1lX3N1bW1hcnlfcmVwb3J0LnJwdC5wYXJzYWJsZQorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3NwaV9tYXN0ZXIvcnVucy9zcGlfbWFzdGVyL3JlcG9ydHMvcnVudGltZV9zdW1tYXJ5X3JlcG9ydC5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zcGlfbWFzdGVyL3J1bnMvc3BpX21hc3Rlci9yZXBvcnRzL21hbnVmYWN0dXJhYmlsaXR5X3JlcG9ydC5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zcGlfbWFzdGVyL3J1bnMvc3BpX21hc3Rlci9yZXBvcnRzL3N5bnRoZXNpcy8xLXlvc3lzXzQuY2hrLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3NwaV9tYXN0ZXIvcnVucy9zcGlfbWFzdGVyL3JlcG9ydHMvc3ludGhlc2lzLzI0LW9wZW5zdGFfc3BlZi50aW1pbmcucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc3BpX21hc3Rlci9ydW5zL3NwaV9tYXN0ZXIvcmVwb3J0cy9zeW50aGVzaXMvMi1vcGVuc3RhLm1pbl9tYXgucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc3BpX21hc3Rlci9ydW5zL3NwaV9tYXN0ZXIvcmVwb3J0cy9zeW50aGVzaXMvMS15b3N5c19wcmUuc3RhdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3NwaV9tYXN0ZXIvcnVucy9zcGlfbWFzdGVyL3JlcG9ydHMvc3ludGhlc2lzLzItb3BlbnN0YV90bnMucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc3BpX21hc3Rlci9ydW5zL3NwaV9tYXN0ZXIvcmVwb3J0cy9zeW50aGVzaXMvMTEtb3BlbnN0YV9wb3N0X29wZW5waHlzeW4ucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc3BpX21hc3Rlci9ydW5zL3NwaV9tYXN0ZXIvcmVwb3J0cy9zeW50aGVzaXMvMTEtb3BlbnN0YV9wb3N0X29wZW5waHlzeW5fdG5zLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3NwaV9tYXN0ZXIvcnVucy9zcGlfbWFzdGVyL3JlcG9ydHMvc3ludGhlc2lzLzEteW9zeXNfZGZmLnN0YXQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zcGlfbWFzdGVyL3J1bnMvc3BpX21hc3Rlci9yZXBvcnRzL3N5bnRoZXNpcy8yNC1vcGVuc3RhX3NwZWYubWluX21heC5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zcGlfbWFzdGVyL3J1bnMvc3BpX21hc3Rlci9yZXBvcnRzL3N5bnRoZXNpcy8xMS1vcGVuc3RhX3Bvc3Rfb3BlbnBoeXN5bi5taW5fbWF4LnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3NwaV9tYXN0ZXIvcnVucy9zcGlfbWFzdGVyL3JlcG9ydHMvc3ludGhlc2lzLzExLW9wZW5zdGFfcG9zdF9vcGVucGh5c3luLnRpbWluZy5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zcGlfbWFzdGVyL3J1bnMvc3BpX21hc3Rlci9yZXBvcnRzL3N5bnRoZXNpcy8yLW9wZW5zdGFfd25zLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3NwaV9tYXN0ZXIvcnVucy9zcGlfbWFzdGVyL3JlcG9ydHMvc3ludGhlc2lzLzItb3BlbnN0YS5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zcGlfbWFzdGVyL3J1bnMvc3BpX21hc3Rlci9yZXBvcnRzL3N5bnRoZXNpcy8yLW9wZW5zdGEudGltaW5nLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3NwaV9tYXN0ZXIvcnVucy9zcGlfbWFzdGVyL3JlcG9ydHMvc3ludGhlc2lzLzI0LW9wZW5zdGFfc3BlZl90bnMucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc3BpX21hc3Rlci9ydW5zL3NwaV9tYXN0ZXIvcmVwb3J0cy9zeW50aGVzaXMvMjQtb3BlbnN0YV9zcGVmX3ducy5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zcGlfbWFzdGVyL3J1bnMvc3BpX21hc3Rlci9yZXBvcnRzL3N5bnRoZXNpcy8xMS1vcGVuc3RhX3Bvc3Rfb3BlbnBoeXN5bl93bnMucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc3BpX21hc3Rlci9ydW5zL3NwaV9tYXN0ZXIvcmVwb3J0cy9zeW50aGVzaXMvMjQtb3BlbnN0YV9zcGVmLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3NwaV9tYXN0ZXIvcnVucy9zcGlfbWFzdGVyL3JlcG9ydHMvc3ludGhlc2lzLzEteW9zeXNfNC5zdGF0LnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3NwaV9tYXN0ZXIvcnVucy9zcGlfbWFzdGVyL3JlcG9ydHMvcm91dGluZy80Mi1hbnRlbm5hLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3NwaV9tYXN0ZXIvcnVucy9zcGlfbWFzdGVyL3JlcG9ydHMvZmxvb3JwbGFuLzMtdmVyaWxvZzJkZWYuZGllX2FyZWEucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc3BpX21hc3Rlci9ydW5zL3NwaV9tYXN0ZXIvcmVwb3J0cy9mbG9vcnBsYW4vMy12ZXJpbG9nMmRlZi5jb3JlX2FyZWEucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc3BpX21hc3Rlci9ydW5zL3NwaV9tYXN0ZXIvcmVwb3J0cy9rbGF5b3V0LzM2LWtsYXlvdXQueG9yLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3NwaV9tYXN0ZXIvcnVucy9zcGlfbWFzdGVyL3JlcG9ydHMva2xheW91dC8zNC1rbGF5b3V0Lnhvci5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zcGlfbWFzdGVyL3J1bnMvc3BpX21hc3Rlci9yZXBvcnRzL2tsYXlvdXQvNDAta2xheW91dC5tYWdpYy5seWRyYworL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3NwaV9tYXN0ZXIvcnVucy9zcGlfbWFzdGVyL3JlcG9ydHMvcGxhY2VtZW50Lzktb3BlbnBoeXN5bl9hbGxjaGVja3MucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc3BpX21hc3Rlci9ydW5zL3NwaV9tYXN0ZXIvcmVwb3J0cy9wbGFjZW1lbnQvOS1vcGVucGh5c3luX3Rucy5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zcGlfbWFzdGVyL3J1bnMvc3BpX21hc3Rlci9yZXBvcnRzL3BsYWNlbWVudC85LW9wZW5waHlzeW5fd25zLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3NwaV9tYXN0ZXIvcnVucy9zcGlfbWFzdGVyL3JlcG9ydHMvcGxhY2VtZW50Lzktb3BlbnBoeXN5bl92aW9sYXRvcnMucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc3BpX21hc3Rlci9ydW5zL3NwaV9tYXN0ZXIvcmVzdWx0cy9zeW50aGVzaXMvc3BpbV90b3Auc3ludGhlc2lzX29wdGltaXplZC52CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc3BpX21hc3Rlci9ydW5zL3NwaV9tYXN0ZXIvcmVzdWx0cy9zeW50aGVzaXMvc3BpbV90b3Auc3ludGhlc2lzX3ByZXJvdXRlLnYKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zcGlfbWFzdGVyL3J1bnMvc3BpX21hc3Rlci9yZXN1bHRzL3N5bnRoZXNpcy9zcGltX3RvcC5zeW50aGVzaXMudgorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3NwaV9tYXN0ZXIvcnVucy9zcGlfbWFzdGVyL3Jlc3VsdHMvc3ludGhlc2lzL3NwaW1fdG9wLnN5bnRoZXNpc19jdHMudgorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3NwaV9tYXN0ZXIvcnVucy9zcGlfbWFzdGVyL3Jlc3VsdHMvcm91dGluZy9zcGltX3RvcC5kZWYucmVmCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc3BpX21hc3Rlci9ydW5zL3NwaV9tYXN0ZXIvcmVzdWx0cy9yb3V0aW5nL3NwaW1fdG9wLnNwZWYKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zcGlfbWFzdGVyL3J1bnMvc3BpX21hc3Rlci9yZXN1bHRzL21hZ2ljLy5tYWdpY3JjCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc3BpX21hc3Rlci9ydW5zL3NwaV9tYXN0ZXIvcmVzdWx0cy9tYWdpYy9zcGltX3RvcC5nZHMubHlkcmMKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zcGlfbWFzdGVyL3J1bnMvc3BpX21hc3Rlci9yZXN1bHRzL2x2cy9zcGltX3RvcC5sdnMucG93ZXJlZC52CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc3BpX21hc3Rlci9ydW5zL3NwaV9tYXN0ZXIvcmVzdWx0cy9sdnMvc3BpbV90b3AubHZzLmxlZi5qc29uCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc3BpX21hc3Rlci9ydW5zL3NwaV9tYXN0ZXIvcmVzdWx0cy9rbGF5b3V0L3NwaW1fdG9wLmx5cAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3lpZml2ZS9zcGVmL3diX2hvc3Quc3BlZgorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3lpZml2ZS9zcGVmL3NkcmNfdG9wLnNwZWYKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS95aWZpdmUvc3BlZi93Yl9pbnRlcmNvbm5lY3Quc3BlZgorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3lpZml2ZS9zcGVmL3NjcjFfdG9wX3diLnNwZWYKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS95aWZpdmUvc3BlZi9nbGJsX2NmZy5zcGVmCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUveWlmaXZlL3NwZWYvdWFydF9jb3JlLnNwZWYKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS95aWZpdmUvc3BlZi9jbGtfc2tld19hZGp1c3Quc3BlZgorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3lpZml2ZS9zcGVmL3lpZml2ZS5zcGVmCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUveWlmaXZlL3NwZWYvc3BpbV90b3Auc3BlZgorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3lpZml2ZS9ydW5zL3lpZml2ZS9jb25maWcudGNsCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUveWlmaXZlL3J1bnMveWlmaXZlL3RtcC9tYWdpY19zcGljZS50Y2wKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS95aWZpdmUvcnVucy95aWZpdmUvdG1wL29wdC5saWIKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS95aWZpdmUvcnVucy95aWZpdmUvdG1wL3RyaW1tZWQubGliCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUveWlmaXZlL3J1bnMveWlmaXZlL3RtcC90cmFja3NfY29weS5pbmZvCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUveWlmaXZlL3J1bnMveWlmaXZlL3RtcC9za3kxMzBfZmRfc2NfaGRfX3R0XzAyNUNfMXY4MC5ub19wZy5saWIKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS95aWZpdmUvcnVucy95aWZpdmUvdG1wL3N5bnRoZXNpcy95b3N5cy5wZ19kZWZpbmUudgorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3lpZml2ZS9ydW5zL3lpZml2ZS90bXAvc3ludGhlc2lzL2hpZXJhcmNoeS5kb3QKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS95aWZpdmUvcnVucy95aWZpdmUvdG1wL3N5bnRoZXNpcy95b3N5cy5zZGMKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS95aWZpdmUvcnVucy95aWZpdmUvdG1wL3JvdXRpbmcvMjAtZmFzdHJvdXRlLmd1aWRlCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUveWlmaXZlL3J1bnMveWlmaXZlL3RtcC9yb3V0aW5nLzIyLXRyaXRvblJvdXRlLnBhcmFtCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUveWlmaXZlL3J1bnMveWlmaXZlL3RtcC9yb3V0aW5nLzIyLXRyaXRvblJvdXRlLmd1aWRlCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUveWlmaXZlL3J1bnMveWlmaXZlL3RtcC9tYWdpYy9jbGtfc2tld19hZGp1c3QuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUveWlmaXZlL3J1bnMveWlmaXZlL3RtcC9tYWdpYy9zY3IxX3RvcF93Yi5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS95aWZpdmUvcnVucy95aWZpdmUvdG1wL21hZ2ljL3lpZml2ZS5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS95aWZpdmUvcnVucy95aWZpdmUvdG1wL21hZ2ljL3VhcnRfY29yZS5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS95aWZpdmUvcnVucy95aWZpdmUvdG1wL21hZ2ljL3diX2hvc3QuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUveWlmaXZlL3J1bnMveWlmaXZlL3RtcC9tYWdpYy9zcGltX3RvcC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS95aWZpdmUvcnVucy95aWZpdmUvdG1wL21hZ2ljL3diX2ludGVyY29ubmVjdC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS95aWZpdmUvcnVucy95aWZpdmUvdG1wL21hZ2ljL3NkcmNfdG9wLmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3lpZml2ZS9ydW5zL3lpZml2ZS90bXAvbWFnaWMvZ2xibF9jZmcuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUveWlmaXZlL3J1bnMveWlmaXZlL3RtcC9sdnMvc2V0dXBfZmlsZS5sZWYubHZzCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUveWlmaXZlL3J1bnMveWlmaXZlL3JlcG9ydHMvcnVudGltZV9zdW1tYXJ5X3JlcG9ydC5ycHQucGFyc2FibGUKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS95aWZpdmUvcnVucy95aWZpdmUvcmVwb3J0cy9ydW50aW1lX3N1bW1hcnlfcmVwb3J0LnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3lpZml2ZS9ydW5zL3lpZml2ZS9yZXBvcnRzL21hbnVmYWN0dXJhYmlsaXR5X3JlcG9ydC5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS95aWZpdmUvcnVucy95aWZpdmUvcmVwb3J0cy9zeW50aGVzaXMvMS15b3N5c180LmNoay5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS95aWZpdmUvcnVucy95aWZpdmUvcmVwb3J0cy9zeW50aGVzaXMvMjUtb3BlbnN0YV9zcGVmLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3lpZml2ZS9ydW5zL3lpZml2ZS9yZXBvcnRzL3N5bnRoZXNpcy8yLW9wZW5zdGEubWluX21heC5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS95aWZpdmUvcnVucy95aWZpdmUvcmVwb3J0cy9zeW50aGVzaXMvMS15b3N5c19wcmUuc3RhdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3lpZml2ZS9ydW5zL3lpZml2ZS9yZXBvcnRzL3N5bnRoZXNpcy8yLW9wZW5zdGFfdG5zLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3lpZml2ZS9ydW5zL3lpZml2ZS9yZXBvcnRzL3N5bnRoZXNpcy8xNS1vcGVuc3RhX3Bvc3Rfb3BlbnBoeXN5bi5taW5fbWF4LnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3lpZml2ZS9ydW5zL3lpZml2ZS9yZXBvcnRzL3N5bnRoZXNpcy8xLXlvc3lzX2RmZi5zdGF0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUveWlmaXZlL3J1bnMveWlmaXZlL3JlcG9ydHMvc3ludGhlc2lzLzMteW9zeXNfZGZmLnN0YXQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS95aWZpdmUvcnVucy95aWZpdmUvcmVwb3J0cy9zeW50aGVzaXMvMjUtb3BlbnN0YV9zcGVmX3ducy5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS95aWZpdmUvcnVucy95aWZpdmUvcmVwb3J0cy9zeW50aGVzaXMvMjUtb3BlbnN0YV9zcGVmLm1pbl9tYXgucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUveWlmaXZlL3J1bnMveWlmaXZlL3JlcG9ydHMvc3ludGhlc2lzLzE1LW9wZW5zdGFfcG9zdF9vcGVucGh5c3luLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3lpZml2ZS9ydW5zL3lpZml2ZS9yZXBvcnRzL3N5bnRoZXNpcy8yNS1vcGVuc3RhX3NwZWYudGltaW5nLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3lpZml2ZS9ydW5zL3lpZml2ZS9yZXBvcnRzL3N5bnRoZXNpcy8yLW9wZW5zdGFfd25zLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3lpZml2ZS9ydW5zL3lpZml2ZS9yZXBvcnRzL3N5bnRoZXNpcy8xNS1vcGVuc3RhX3Bvc3Rfb3BlbnBoeXN5bl93bnMucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUveWlmaXZlL3J1bnMveWlmaXZlL3JlcG9ydHMvc3ludGhlc2lzLzItb3BlbnN0YS5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS95aWZpdmUvcnVucy95aWZpdmUvcmVwb3J0cy9zeW50aGVzaXMvMy15b3N5c180LmNoay5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS95aWZpdmUvcnVucy95aWZpdmUvcmVwb3J0cy9zeW50aGVzaXMvMjUtb3BlbnN0YV9zcGVmX3Rucy5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS95aWZpdmUvcnVucy95aWZpdmUvcmVwb3J0cy9zeW50aGVzaXMvMTUtb3BlbnN0YV9wb3N0X29wZW5waHlzeW5fdG5zLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3lpZml2ZS9ydW5zL3lpZml2ZS9yZXBvcnRzL3N5bnRoZXNpcy8yLW9wZW5zdGEudGltaW5nLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3lpZml2ZS9ydW5zL3lpZml2ZS9yZXBvcnRzL3N5bnRoZXNpcy8xNS1vcGVuc3RhX3Bvc3Rfb3BlbnBoeXN5bi50aW1pbmcucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUveWlmaXZlL3J1bnMveWlmaXZlL3JlcG9ydHMvc3ludGhlc2lzLzMteW9zeXNfcHJlLnN0YXQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS95aWZpdmUvcnVucy95aWZpdmUvcmVwb3J0cy9zeW50aGVzaXMvMy15b3N5c180LnN0YXQucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUveWlmaXZlL3J1bnMveWlmaXZlL3JlcG9ydHMvc3ludGhlc2lzLzEteW9zeXNfNC5zdGF0LnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3lpZml2ZS9ydW5zL3lpZml2ZS9yZXBvcnRzL3JvdXRpbmcvNDItYW50ZW5uYS5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS95aWZpdmUvcnVucy95aWZpdmUvcmVwb3J0cy9mbG9vcnBsYW4vNC12ZXJpbG9nMmRlZi5kaWVfYXJlYS5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS95aWZpdmUvcnVucy95aWZpdmUvcmVwb3J0cy9mbG9vcnBsYW4vNC12ZXJpbG9nMmRlZi5jb3JlX2FyZWEucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUveWlmaXZlL3J1bnMveWlmaXZlL3JlcG9ydHMva2xheW91dC8zNy1rbGF5b3V0Lnhvci5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS95aWZpdmUvcnVucy95aWZpdmUvcmVwb3J0cy9rbGF5b3V0LzM1LWtsYXlvdXQueG9yLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3lpZml2ZS9ydW5zL3lpZml2ZS9yZXBvcnRzL3BsYWNlbWVudC8xMy1vcGVucGh5c3luX3ducy5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS95aWZpdmUvcnVucy95aWZpdmUvcmVwb3J0cy9wbGFjZW1lbnQvMTMtb3BlbnBoeXN5bl9hbGxjaGVja3MucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUveWlmaXZlL3J1bnMveWlmaXZlL3JlcG9ydHMvcGxhY2VtZW50LzEzLW9wZW5waHlzeW5fdG5zLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3lpZml2ZS9ydW5zL3lpZml2ZS9yZXN1bHRzL3N5bnRoZXNpcy95aWZpdmUuc3ludGhlc2lzX3ByZXJvdXRlLnYKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS95aWZpdmUvcnVucy95aWZpdmUvcmVzdWx0cy9zeW50aGVzaXMveWlmaXZlLnN5bnRoZXNpc19vcHRpbWl6ZWQudgorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3lpZml2ZS9ydW5zL3lpZml2ZS9yZXN1bHRzL3N5bnRoZXNpcy95aWZpdmUuc3ludGhlc2lzLnYKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS95aWZpdmUvcnVucy95aWZpdmUvcmVzdWx0cy9yb3V0aW5nL3lpZml2ZS5kZWYucmVmCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUveWlmaXZlL3J1bnMveWlmaXZlL3Jlc3VsdHMvcm91dGluZy95aWZpdmUuc3BlZgorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3lpZml2ZS9ydW5zL3lpZml2ZS9yZXN1bHRzL21hZ2ljLy5tYWdpY3JjCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUveWlmaXZlL3J1bnMveWlmaXZlL3Jlc3VsdHMvbHZzL3lpZml2ZS5sdnMubGVmLmpzb24KKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS95aWZpdmUvcnVucy95aWZpdmUvcmVzdWx0cy9sdnMveWlmaXZlLmx2cy5wb3dlcmVkLnYKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS95aWZpdmUvcnVucy95aWZpdmUvcmVzdWx0cy9rbGF5b3V0L3lpZml2ZS5seXAKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS95aWZpdmUvbmV0bGlzdC91YXJ0LnYKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS95aWZpdmUvbmV0bGlzdC95aWZpdmUudgorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3lpZml2ZS9uZXRsaXN0L3NkcmFtLnYKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS95aWZpdmUvbmV0bGlzdC93Yl9ob3N0LnYKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS95aWZpdmUvbmV0bGlzdC93Yl9pbnRlcmNvbm5lY3QudgorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3lpZml2ZS9uZXRsaXN0L2Nsa19za2V3X2FkanVzdC52CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUveWlmaXZlL25ldGxpc3QvdXNlcl9wcm9qZWN0X3dyYXBwZXIudgorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3lpZml2ZS9uZXRsaXN0L3N5bnRhY29yZS52CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUveWlmaXZlL25ldGxpc3QvZ2xibF9jZmcudgorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3lpZml2ZS9uZXRsaXN0L3NwaV9tYXN0ZXIudgorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3VzZXJfcHJvamVjdF93cmFwcGVyL2ludGVyYWN0aXZlLnRjbAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3VzZXJfcHJvamVjdF93cmFwcGVyL2dlbl9wZG4udGNsCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdXNlcl9wcm9qZWN0X3dyYXBwZXIvcGRuLnRjbAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3VzZXJfcHJvamVjdF93cmFwcGVyL3J1bnMvdXNlcl9wcm9qZWN0X3dyYXBwZXIvY29uZmlnLnRjbAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3VzZXJfcHJvamVjdF93cmFwcGVyL3J1bnMvdXNlcl9wcm9qZWN0X3dyYXBwZXIvdG1wL29wdC5saWIKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS91c2VyX3Byb2plY3Rfd3JhcHBlci9ydW5zL3VzZXJfcHJvamVjdF93cmFwcGVyL3RtcC90cmltbWVkLmxpYgorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3VzZXJfcHJvamVjdF93cmFwcGVyL3J1bnMvdXNlcl9wcm9qZWN0X3dyYXBwZXIvdG1wL3RyYWNrc19jb3B5LmluZm8KKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS91c2VyX3Byb2plY3Rfd3JhcHBlci9ydW5zL3VzZXJfcHJvamVjdF93cmFwcGVyL3RtcC9za3kxMzBfZmRfc2NfaGRfX3R0XzAyNUNfMXY4MC5ub19wZy5saWIKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS91c2VyX3Byb2plY3Rfd3JhcHBlci9ydW5zL3VzZXJfcHJvamVjdF93cmFwcGVyL3RtcC9zeW50aGVzaXMveW9zeXMucGdfZGVmaW5lLnYKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS91c2VyX3Byb2plY3Rfd3JhcHBlci9ydW5zL3VzZXJfcHJvamVjdF93cmFwcGVyL3RtcC9zeW50aGVzaXMvaGllcmFyY2h5LmRvdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3VzZXJfcHJvamVjdF93cmFwcGVyL3J1bnMvdXNlcl9wcm9qZWN0X3dyYXBwZXIvdG1wL3N5bnRoZXNpcy95b3N5cy5zZGMKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS91c2VyX3Byb2plY3Rfd3JhcHBlci9ydW5zL3VzZXJfcHJvamVjdF93cmFwcGVyL3RtcC9yb3V0aW5nLzE5LXRyaXRvblJvdXRlLnBhcmFtCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdXNlcl9wcm9qZWN0X3dyYXBwZXIvcnVucy91c2VyX3Byb2plY3Rfd3JhcHBlci90bXAvcm91dGluZy8xNy1mYXN0cm91dGUuZ3VpZGUKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS91c2VyX3Byb2plY3Rfd3JhcHBlci9ydW5zL3VzZXJfcHJvamVjdF93cmFwcGVyL3RtcC9yb3V0aW5nLzE5LXRyaXRvblJvdXRlLmd1aWRlCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdXNlcl9wcm9qZWN0X3dyYXBwZXIvcnVucy91c2VyX3Byb2plY3Rfd3JhcHBlci9yZXBvcnRzL3N5bnRoZXNpcy8xLXlvc3lzXzQuY2hrLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3VzZXJfcHJvamVjdF93cmFwcGVyL3J1bnMvdXNlcl9wcm9qZWN0X3dyYXBwZXIvcmVwb3J0cy9zeW50aGVzaXMvMi1vcGVuc3RhLm1pbl9tYXgucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdXNlcl9wcm9qZWN0X3dyYXBwZXIvcnVucy91c2VyX3Byb2plY3Rfd3JhcHBlci9yZXBvcnRzL3N5bnRoZXNpcy8xLXlvc3lzX3ByZS5zdGF0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdXNlcl9wcm9qZWN0X3dyYXBwZXIvcnVucy91c2VyX3Byb2plY3Rfd3JhcHBlci9yZXBvcnRzL3N5bnRoZXNpcy8yLW9wZW5zdGFfdG5zLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3VzZXJfcHJvamVjdF93cmFwcGVyL3J1bnMvdXNlcl9wcm9qZWN0X3dyYXBwZXIvcmVwb3J0cy9zeW50aGVzaXMvMS15b3N5c19kZmYuc3RhdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3VzZXJfcHJvamVjdF93cmFwcGVyL3J1bnMvdXNlcl9wcm9qZWN0X3dyYXBwZXIvcmVwb3J0cy9zeW50aGVzaXMvMy15b3N5c19kZmYuc3RhdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3VzZXJfcHJvamVjdF93cmFwcGVyL3J1bnMvdXNlcl9wcm9qZWN0X3dyYXBwZXIvcmVwb3J0cy9zeW50aGVzaXMvMTItb3BlbnN0YV9wb3N0X29wZW5waHlzeW4ucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdXNlcl9wcm9qZWN0X3dyYXBwZXIvcnVucy91c2VyX3Byb2plY3Rfd3JhcHBlci9yZXBvcnRzL3N5bnRoZXNpcy8xMi1vcGVuc3RhX3Bvc3Rfb3BlbnBoeXN5bi50aW1pbmcucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdXNlcl9wcm9qZWN0X3dyYXBwZXIvcnVucy91c2VyX3Byb2plY3Rfd3JhcHBlci9yZXBvcnRzL3N5bnRoZXNpcy8yLW9wZW5zdGFfd25zLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3VzZXJfcHJvamVjdF93cmFwcGVyL3J1bnMvdXNlcl9wcm9qZWN0X3dyYXBwZXIvcmVwb3J0cy9zeW50aGVzaXMvMi1vcGVuc3RhLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3VzZXJfcHJvamVjdF93cmFwcGVyL3J1bnMvdXNlcl9wcm9qZWN0X3dyYXBwZXIvcmVwb3J0cy9zeW50aGVzaXMvMTItb3BlbnN0YV9wb3N0X29wZW5waHlzeW5fdG5zLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3VzZXJfcHJvamVjdF93cmFwcGVyL3J1bnMvdXNlcl9wcm9qZWN0X3dyYXBwZXIvcmVwb3J0cy9zeW50aGVzaXMvMy15b3N5c180LmNoay5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS91c2VyX3Byb2plY3Rfd3JhcHBlci9ydW5zL3VzZXJfcHJvamVjdF93cmFwcGVyL3JlcG9ydHMvc3ludGhlc2lzLzItb3BlbnN0YS50aW1pbmcucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdXNlcl9wcm9qZWN0X3dyYXBwZXIvcnVucy91c2VyX3Byb2plY3Rfd3JhcHBlci9yZXBvcnRzL3N5bnRoZXNpcy8zLXlvc3lzX3ByZS5zdGF0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdXNlcl9wcm9qZWN0X3dyYXBwZXIvcnVucy91c2VyX3Byb2plY3Rfd3JhcHBlci9yZXBvcnRzL3N5bnRoZXNpcy8xMi1vcGVuc3RhX3Bvc3Rfb3BlbnBoeXN5bl93bnMucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdXNlcl9wcm9qZWN0X3dyYXBwZXIvcnVucy91c2VyX3Byb2plY3Rfd3JhcHBlci9yZXBvcnRzL3N5bnRoZXNpcy8xMi1vcGVuc3RhX3Bvc3Rfb3BlbnBoeXN5bi5taW5fbWF4LnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3VzZXJfcHJvamVjdF93cmFwcGVyL3J1bnMvdXNlcl9wcm9qZWN0X3dyYXBwZXIvcmVwb3J0cy9zeW50aGVzaXMvMy15b3N5c180LnN0YXQucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdXNlcl9wcm9qZWN0X3dyYXBwZXIvcnVucy91c2VyX3Byb2plY3Rfd3JhcHBlci9yZXBvcnRzL3N5bnRoZXNpcy8xLXlvc3lzXzQuc3RhdC5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS91c2VyX3Byb2plY3Rfd3JhcHBlci9ydW5zL3VzZXJfcHJvamVjdF93cmFwcGVyL3JlcG9ydHMvZmxvb3JwbGFuLzQtdmVyaWxvZzJkZWYuZGllX2FyZWEucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdXNlcl9wcm9qZWN0X3dyYXBwZXIvcnVucy91c2VyX3Byb2plY3Rfd3JhcHBlci9yZXBvcnRzL2Zsb29ycGxhbi80LXZlcmlsb2cyZGVmLmNvcmVfYXJlYS5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS91c2VyX3Byb2plY3Rfd3JhcHBlci9ydW5zL3VzZXJfcHJvamVjdF93cmFwcGVyL3JlcG9ydHMvcGxhY2VtZW50LzEwLW9wZW5waHlzeW5fd25zLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3VzZXJfcHJvamVjdF93cmFwcGVyL3J1bnMvdXNlcl9wcm9qZWN0X3dyYXBwZXIvcmVwb3J0cy9wbGFjZW1lbnQvMTAtb3BlbnBoeXN5bl90bnMucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdXNlcl9wcm9qZWN0X3dyYXBwZXIvcnVucy91c2VyX3Byb2plY3Rfd3JhcHBlci9yZXBvcnRzL3BsYWNlbWVudC8xMC1vcGVucGh5c3luX2FsbGNoZWNrcy5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS91c2VyX3Byb2plY3Rfd3JhcHBlci9ydW5zL3VzZXJfcHJvamVjdF93cmFwcGVyL3Jlc3VsdHMvc3ludGhlc2lzL3VzZXJfcHJvamVjdF93cmFwcGVyLnN5bnRoZXNpcy52CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdXNlcl9wcm9qZWN0X3dyYXBwZXIvcnVucy91c2VyX3Byb2plY3Rfd3JhcHBlci9yZXN1bHRzL3N5bnRoZXNpcy91c2VyX3Byb2plY3Rfd3JhcHBlci5zeW50aGVzaXNfcHJlcm91dGUudgorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3VzZXJfcHJvamVjdF93cmFwcGVyL3J1bnMvdXNlcl9wcm9qZWN0X3dyYXBwZXIvcmVzdWx0cy9zeW50aGVzaXMvdXNlcl9wcm9qZWN0X3dyYXBwZXIuc3ludGhlc2lzX29wdGltaXplZC52CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdXNlcl9wcm9qZWN0X3dyYXBwZXIvcnVucy91c2VyX3Byb2plY3Rfd3JhcHBlci9yZXN1bHRzL3JvdXRpbmcvdXNlcl9wcm9qZWN0X3dyYXBwZXIuZGVmLnJlZgorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3VzZXJfcHJvamVjdF93cmFwcGVyL25ldGxpc3QvdWFydC52CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdXNlcl9wcm9qZWN0X3dyYXBwZXIvbmV0bGlzdC9zZHJhbS52CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdXNlcl9wcm9qZWN0X3dyYXBwZXIvbmV0bGlzdC93Yl9ob3N0LnYKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS91c2VyX3Byb2plY3Rfd3JhcHBlci9uZXRsaXN0L3diX2ludGVyY29ubmVjdC52CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdXNlcl9wcm9qZWN0X3dyYXBwZXIvbmV0bGlzdC9jbGtfYnVmLnYKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS91c2VyX3Byb2plY3Rfd3JhcHBlci9uZXRsaXN0L2Nsa19za2V3X2FkanVzdC52CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdXNlcl9wcm9qZWN0X3dyYXBwZXIvbmV0bGlzdC91c2VyX3Byb2plY3Rfd3JhcHBlci52CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvdXNlcl9wcm9qZWN0X3dyYXBwZXIvbmV0bGlzdC9zeW50YWNvcmUudgorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3VzZXJfcHJvamVjdF93cmFwcGVyL25ldGxpc3QvZ2xibF9jZmcudgorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3VzZXJfcHJvamVjdF93cmFwcGVyL25ldGxpc3Qvc3BpX21hc3Rlci52CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2RyYW0vdW5jb25zdHJhaW50cy5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zZHJhbS90aW1pbmcucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2RyYW0vcnVucy9zZHJhbS9jb25maWcudGNsCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2RyYW0vcnVucy9zZHJhbS90bXAvbWFnaWNfc3BpY2UudGNsCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2RyYW0vcnVucy9zZHJhbS90bXAvb3B0LmxpYgorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3NkcmFtL3J1bnMvc2RyYW0vdG1wL3RyaW1tZWQubGliCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2RyYW0vcnVucy9zZHJhbS90bXAvdHJhY2tzX2NvcHkuaW5mbworL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3NkcmFtL3J1bnMvc2RyYW0vdG1wL3NreTEzMF9mZF9zY19oZF9fdHRfMDI1Q18xdjgwLm5vX3BnLmxpYgorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3NkcmFtL3J1bnMvc2RyYW0vdG1wL3N5bnRoZXNpcy9oaWVyYXJjaHkuZG90CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2RyYW0vcnVucy9zZHJhbS90bXAvc3ludGhlc2lzL3lvc3lzLnNkYworL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3NkcmFtL3J1bnMvc2RyYW0vdG1wL3JvdXRpbmcvMjEtdHJpdG9uUm91dGUuZ3VpZGUKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zZHJhbS9ydW5zL3NkcmFtL3RtcC9yb3V0aW5nLzE3LWZhc3Ryb3V0ZS5ndWlkZQorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3NkcmFtL3J1bnMvc2RyYW0vdG1wL3JvdXRpbmcvMjEtdHJpdG9uUm91dGUucGFyYW0KKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zZHJhbS9ydW5zL3NkcmFtL3RtcC9yb3V0aW5nLzE4LWZhc3Ryb3V0ZV8yLmd1aWRlCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2RyYW0vcnVucy9zZHJhbS90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19jb25iXzEuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2RyYW0vcnVucy9zZHJhbS90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19ub3IyXzQuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2RyYW0vcnVucy9zZHJhbS90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19hbmQyXzQuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2RyYW0vcnVucy9zZHJhbS90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19hMjFvaV80LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3NkcmFtL3J1bnMvc2RyYW0vdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fZmlsbF8yLmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3NkcmFtL3J1bnMvc2RyYW0vdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fYTMyb180LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3NkcmFtL3J1bnMvc2RyYW0vdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fb3IyXzQuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2RyYW0vcnVucy9zZHJhbS90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19jbGtidWZfMTYuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2RyYW0vcnVucy9zZHJhbS90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF80LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3NkcmFtL3J1bnMvc2RyYW0vdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fZGlvZGVfMi5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zZHJhbS9ydW5zL3NkcmFtL3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX25hbmQyXzQuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2RyYW0vcnVucy9zZHJhbS90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19hMjExb180LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3NkcmFtL3J1bnMvc2RyYW0vdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fYTIxb180LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3NkcmFtL3J1bnMvc2RyYW0vdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fYnVmXzIuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2RyYW0vcnVucy9zZHJhbS90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19vcjNfNC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zZHJhbS9ydW5zL3NkcmFtL3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyLmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3NkcmFtL3J1bnMvc2RyYW0vdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fYTJiYjJvXzQuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2RyYW0vcnVucy9zZHJhbS90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19hbmQ0XzQuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2RyYW0vcnVucy9zZHJhbS90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zLmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3NkcmFtL3J1bnMvc2RyYW0vdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fbzIxYWlfNC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zZHJhbS9ydW5zL3NkcmFtL3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX2EyMm9pXzQuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2RyYW0vcnVucy9zZHJhbS90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19kZnJ0cF80LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3NkcmFtL3J1bnMvc2RyYW0vdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9fZGZ4dHBfNC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zZHJhbS9ydW5zL3NkcmFtL3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX3RhcHZwd3J2Z25kXzEuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2RyYW0vcnVucy9zZHJhbS90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19maWxsXzEuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2RyYW0vcnVucy9zZHJhbS90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19jbGtidWZfMS5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zZHJhbS9ydW5zL3NkcmFtL3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX28zMmFfNC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zZHJhbS9ydW5zL3NkcmFtL3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX2RlY2FwXzYuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2RyYW0vcnVucy9zZHJhbS90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19vcjRfNC5leHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zZHJhbS9ydW5zL3NkcmFtL3RtcC9tYWdpYy9za3kxMzBfZmRfc2NfaGRfX2EyMWJvXzQuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2RyYW0vcnVucy9zZHJhbS90bXAvbWFnaWMvc2RyY190b3AuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2RyYW0vcnVucy9zZHJhbS90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF84LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3NkcmFtL3J1bnMvc2RyYW0vdG1wL21hZ2ljL3NreTEzMF9mZF9zY19oZF9faW52XzIuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2RyYW0vcnVucy9zZHJhbS90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19vMjFhXzQuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2RyYW0vcnVucy9zZHJhbS90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19vMjJhXzQuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2RyYW0vcnVucy9zZHJhbS90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19hbmQzXzQuZXh0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2RyYW0vcnVucy9zZHJhbS90bXAvbWFnaWMvc2t5MTMwX2ZkX3NjX2hkX19kZnN0cF80LmV4dAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3NkcmFtL3J1bnMvc2RyYW0vdG1wL2x2cy9zZXR1cF9maWxlLmxlZi5sdnMKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zZHJhbS9ydW5zL3NkcmFtL3JlcG9ydHMvcnVudGltZV9zdW1tYXJ5X3JlcG9ydC5ycHQucGFyc2FibGUKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zZHJhbS9ydW5zL3NkcmFtL3JlcG9ydHMvcnVudGltZV9zdW1tYXJ5X3JlcG9ydC5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zZHJhbS9ydW5zL3NkcmFtL3JlcG9ydHMvbWFudWZhY3R1cmFiaWxpdHlfcmVwb3J0LnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3NkcmFtL3J1bnMvc2RyYW0vcmVwb3J0cy9zeW50aGVzaXMvMS15b3N5c180LmNoay5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zZHJhbS9ydW5zL3NkcmFtL3JlcG9ydHMvc3ludGhlc2lzLzI0LW9wZW5zdGFfc3BlZi50aW1pbmcucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2RyYW0vcnVucy9zZHJhbS9yZXBvcnRzL3N5bnRoZXNpcy8yLW9wZW5zdGEubWluX21heC5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zZHJhbS9ydW5zL3NkcmFtL3JlcG9ydHMvc3ludGhlc2lzLzEteW9zeXNfcHJlLnN0YXQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zZHJhbS9ydW5zL3NkcmFtL3JlcG9ydHMvc3ludGhlc2lzLzItb3BlbnN0YV90bnMucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2RyYW0vcnVucy9zZHJhbS9yZXBvcnRzL3N5bnRoZXNpcy8xMS1vcGVuc3RhX3Bvc3Rfb3BlbnBoeXN5bi5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zZHJhbS9ydW5zL3NkcmFtL3JlcG9ydHMvc3ludGhlc2lzLzExLW9wZW5zdGFfcG9zdF9vcGVucGh5c3luX3Rucy5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zZHJhbS9ydW5zL3NkcmFtL3JlcG9ydHMvc3ludGhlc2lzLzEteW9zeXNfZGZmLnN0YXQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zZHJhbS9ydW5zL3NkcmFtL3JlcG9ydHMvc3ludGhlc2lzLzI0LW9wZW5zdGFfc3BlZi5taW5fbWF4LnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3NkcmFtL3J1bnMvc2RyYW0vcmVwb3J0cy9zeW50aGVzaXMvMTEtb3BlbnN0YV9wb3N0X29wZW5waHlzeW4ubWluX21heC5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zZHJhbS9ydW5zL3NkcmFtL3JlcG9ydHMvc3ludGhlc2lzLzExLW9wZW5zdGFfcG9zdF9vcGVucGh5c3luLnRpbWluZy5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zZHJhbS9ydW5zL3NkcmFtL3JlcG9ydHMvc3ludGhlc2lzLzItb3BlbnN0YV93bnMucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2RyYW0vcnVucy9zZHJhbS9yZXBvcnRzL3N5bnRoZXNpcy8yLW9wZW5zdGEucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2RyYW0vcnVucy9zZHJhbS9yZXBvcnRzL3N5bnRoZXNpcy8yLW9wZW5zdGEudGltaW5nLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3NkcmFtL3J1bnMvc2RyYW0vcmVwb3J0cy9zeW50aGVzaXMvMjQtb3BlbnN0YV9zcGVmX3Rucy5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zZHJhbS9ydW5zL3NkcmFtL3JlcG9ydHMvc3ludGhlc2lzLzI0LW9wZW5zdGFfc3BlZl93bnMucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2RyYW0vcnVucy9zZHJhbS9yZXBvcnRzL3N5bnRoZXNpcy8xMS1vcGVuc3RhX3Bvc3Rfb3BlbnBoeXN5bl93bnMucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2RyYW0vcnVucy9zZHJhbS9yZXBvcnRzL3N5bnRoZXNpcy8yNC1vcGVuc3RhX3NwZWYucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2RyYW0vcnVucy9zZHJhbS9yZXBvcnRzL3N5bnRoZXNpcy8xLXlvc3lzXzQuc3RhdC5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zZHJhbS9ydW5zL3NkcmFtL3JlcG9ydHMvcm91dGluZy80Mi1hbnRlbm5hLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3NkcmFtL3J1bnMvc2RyYW0vcmVwb3J0cy9mbG9vcnBsYW4vMy12ZXJpbG9nMmRlZi5kaWVfYXJlYS5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zZHJhbS9ydW5zL3NkcmFtL3JlcG9ydHMvZmxvb3JwbGFuLzMtdmVyaWxvZzJkZWYuY29yZV9hcmVhLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3NkcmFtL3J1bnMvc2RyYW0vcmVwb3J0cy9rbGF5b3V0LzM2LWtsYXlvdXQueG9yLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3NkcmFtL3J1bnMvc2RyYW0vcmVwb3J0cy9rbGF5b3V0LzM0LWtsYXlvdXQueG9yLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3NkcmFtL3J1bnMvc2RyYW0vcmVwb3J0cy9rbGF5b3V0LzQwLWtsYXlvdXQubWFnaWMubHlkcmMKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zZHJhbS9ydW5zL3NkcmFtL3JlcG9ydHMvcGxhY2VtZW50Lzktb3BlbnBoeXN5bl9hbGxjaGVja3MucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2RyYW0vcnVucy9zZHJhbS9yZXBvcnRzL3BsYWNlbWVudC85LW9wZW5waHlzeW5fdG5zLnJwdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3NkcmFtL3J1bnMvc2RyYW0vcmVwb3J0cy9wbGFjZW1lbnQvOS1vcGVucGh5c3luX3ducy5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zZHJhbS9ydW5zL3NkcmFtL3JlcG9ydHMvcGxhY2VtZW50Lzktb3BlbnBoeXN5bl92aW9sYXRvcnMucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2RyYW0vcnVucy9zZHJhbS9yZXN1bHRzL3N5bnRoZXNpcy9zZHJjX3RvcC5zeW50aGVzaXNfb3B0aW1pemVkLnYKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zZHJhbS9ydW5zL3NkcmFtL3Jlc3VsdHMvc3ludGhlc2lzL3NkcmNfdG9wLnN5bnRoZXNpc19jdHMudgorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3NkcmFtL3J1bnMvc2RyYW0vcmVzdWx0cy9zeW50aGVzaXMvc2RyY190b3Auc3ludGhlc2lzLnYKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zZHJhbS9ydW5zL3NkcmFtL3Jlc3VsdHMvc3ludGhlc2lzL3NkcmNfdG9wLnN5bnRoZXNpc19wcmVyb3V0ZS52CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2RyYW0vcnVucy9zZHJhbS9yZXN1bHRzL3JvdXRpbmcvc2RyY190b3Auc3BlZgorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL29wZW5sYW5lL3NkcmFtL3J1bnMvc2RyYW0vcmVzdWx0cy9yb3V0aW5nL3NkcmNfdG9wLmRlZi5yZWYKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zZHJhbS9ydW5zL3NkcmFtL3Jlc3VsdHMvbWFnaWMvLm1hZ2ljcmMKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zZHJhbS9ydW5zL3NkcmFtL3Jlc3VsdHMvbWFnaWMvc2RyY190b3AuZ2RzLmx5ZHJjCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2RyYW0vcnVucy9zZHJhbS9yZXN1bHRzL2x2cy9zZHJjX3RvcC5sdnMucG93ZXJlZC52CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvb3BlbmxhbmUvc2RyYW0vcnVucy9zZHJhbS9yZXN1bHRzL2x2cy9zZHJjX3RvcC5sdnMubGVmLmpzb24KKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9vcGVubGFuZS9zZHJhbS9ydW5zL3NkcmFtL3Jlc3VsdHMva2xheW91dC9zZHJjX3RvcC5seXAKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9jaGVja3MvdXNlcl9wcm9qZWN0X3dyYXBwZXIubWFnaWMuZHJjLnRjbAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL3Zlcmlsb2cvZHYvdXNlcl9zcGkvdXNlcl9yaXNjX2Jvb3QuZHVtcAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL3Zlcmlsb2cvZHYvdXNlcl9zcGkvdXNlcl9zcGkudnZwCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvdmVyaWxvZy9kdi9tb2RlbC9zMjVmbDI1NnMuc3YKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC92ZXJpbG9nL2R2L3Jpc2NfYm9vdC91c2VyX3VhcnQuZHVtcAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL3Zlcmlsb2cvZHYvcmlzY19ib290L3Jpc2NfYm9vdC52dnAKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC92ZXJpbG9nL2R2L3VzZXJfcmlzY19ib290L3VzZXJfcmlzY19ib290LmR1bXAKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC92ZXJpbG9nL2R2L3VzZXJfcmlzY19ib290L3VzZXJfcmlzY19ib290LnZ2cAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL3Zlcmlsb2cvZHYvdXNlcl91YXJ0L3VzZXJfdWFydC5kdW1wCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvdmVyaWxvZy9kdi91c2VyX3VhcnQvZ29sZGVuLmd0a3cKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC92ZXJpbG9nL2R2L3VzZXJfdWFydC91c2VyX3VhcnQudnZwCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvdmVyaWxvZy9kdi93Yl9wb3J0L3J1bl92ZXJpbG9nCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvUkVBRE1FLm1kCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL2FhCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3ludGgvdW5jb25zdHJhaW50cy5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zeW50aC90aW1pbmcucnB0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3ludGgvdG1wL3RyaW1tZWQubGliCisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3ludGgvdG1wL3N5bnRoZXNpcy9oaWVyYXJjaHkuZG90CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3ludGgvcmVwb3J0cy95b3N5c180LmNoay5ycHQKKy9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zeW50aC9yZXBvcnRzL3lvc3lzX2RmZi5zdGF0CisvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3ludGgvcmVwb3J0cy95b3N5c19wcmUuc3RhdAorL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3N5bnRoL25ldGxpc3Qvc2NyMV90b3Bfd2IuZ3YKZGlmZiAtLWdpdCBhL2NoZWNrcy91c2VyX3Byb2plY3Rfd3JhcHBlci5tYWdpYy5kcmMgYi9jaGVja3MvdXNlcl9wcm9qZWN0X3dyYXBwZXIubWFnaWMuZHJjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmNTEwMzQKLS0tIC9kZXYvbnVsbAorKysgYi9jaGVja3MvdXNlcl9wcm9qZWN0X3dyYXBwZXIubWFnaWMuZHJjCkBAIC0wLDAgKzEsOSBAQAordXNlcl9wcm9qZWN0X3dyYXBwZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FsbCBud2VsbHMgbXVzdCBjb250YWluIG1ldGFsLWNvbm5lY3RlZCBOKyB0YXBzIChud2VsbC40KQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIDQ0My43MTAgMTc0MC42MTAgNDQ1LjQ3MCAxNzQyLjIxNQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorW0lORk9dOiBDT1VOVDogMQorW0lORk9dOiBTaG91bGQgYmUgZGl2aWRlZCBieSAzIG9yIDQKKwpkaWZmIC0tZ2l0IGEvY2hlY2tzL3VzZXJfcHJvamVjdF93cmFwcGVyLnhvci5nZHMucG5nIGIvY2hlY2tzL3VzZXJfcHJvamVjdF93cmFwcGVyLnhvci5nZHMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkNjM0ODIKLS0tIC9kZXYvbnVsbAorKysgYi9jaGVja3MvdXNlcl9wcm9qZWN0X3dyYXBwZXIueG9yLmdkcy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvY2hlY2tzL3VzZXJfcHJvamVjdF93cmFwcGVyLnhvci54bWwgYi9jaGVja3MvdXNlcl9wcm9qZWN0X3dyYXBwZXIueG9yLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDQ0YjZkCi0tLSAvZGV2L251bGwKKysrIGIvY2hlY2tzL3VzZXJfcHJvamVjdF93cmFwcGVyLnhvci54bWwKQEAgLTAsMCArMSw2MyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxyZXBvcnQtZGF0YWJhc2U+CisgPGRlc2NyaXB0aW9uPlhPUiAvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvY2hlY2tzL3VzZXJfcHJvamVjdF93cmFwcGVyX2VtcHR5X2VyYXNlZC5nZHMgdnMuIC9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9jaGVja3MvdXNlcl9wcm9qZWN0X3dyYXBwZXJfZXJhc2VkLmdkczwvZGVzY3JpcHRpb24+CisgPG9yaWdpbmFsLWZpbGUvPgorIDxnZW5lcmF0b3I+ZHJjOiBzY3JpcHQ9Jy91c3IvbG9jYWwvYmluL3hvcl9jaGVja3MveG9yLmRyYyc8L2dlbmVyYXRvcj4KKyA8dG9wLWNlbGw+dXNlcl9wcm9qZWN0X3dyYXBwZXI8L3RvcC1jZWxsPgorIDx0YWdzPgorIDwvdGFncz4KKyA8Y2F0ZWdvcmllcz4KKyAgPGNhdGVnb3J5PgorICAgPG5hbWU+MjM1LzQ8L25hbWU+CisgICA8ZGVzY3JpcHRpb24+WE9SIHJlc3VsdHMgZm9yIGxheWVyIDIzNS80IDwvZGVzY3JpcHRpb24+CisgICA8Y2F0ZWdvcmllcz4KKyAgIDwvY2F0ZWdvcmllcz4KKyAgPC9jYXRlZ29yeT4KKyAgPGNhdGVnb3J5PgorICAgPG5hbWU+NjkvMjA8L25hbWU+CisgICA8ZGVzY3JpcHRpb24+WE9SIHJlc3VsdHMgZm9yIGxheWVyIDY5LzIwIDwvZGVzY3JpcHRpb24+CisgICA8Y2F0ZWdvcmllcz4KKyAgIDwvY2F0ZWdvcmllcz4KKyAgPC9jYXRlZ29yeT4KKyAgPGNhdGVnb3J5PgorICAgPG5hbWU+NzAvMjA8L25hbWU+CisgICA8ZGVzY3JpcHRpb24+WE9SIHJlc3VsdHMgZm9yIGxheWVyIDcwLzIwIDwvZGVzY3JpcHRpb24+CisgICA8Y2F0ZWdvcmllcz4KKyAgIDwvY2F0ZWdvcmllcz4KKyAgPC9jYXRlZ29yeT4KKyAgPGNhdGVnb3J5PgorICAgPG5hbWU+NzEvMjA8L25hbWU+CisgICA8ZGVzY3JpcHRpb24+WE9SIHJlc3VsdHMgZm9yIGxheWVyIDcxLzIwIDwvZGVzY3JpcHRpb24+CisgICA8Y2F0ZWdvcmllcz4KKyAgIDwvY2F0ZWdvcmllcz4KKyAgPC9jYXRlZ29yeT4KKyAgPGNhdGVnb3J5PgorICAgPG5hbWU+NzEvNDQ8L25hbWU+CisgICA8ZGVzY3JpcHRpb24+WE9SIHJlc3VsdHMgZm9yIGxheWVyIDcxLzQ0IDwvZGVzY3JpcHRpb24+CisgICA8Y2F0ZWdvcmllcz4KKyAgIDwvY2F0ZWdvcmllcz4KKyAgPC9jYXRlZ29yeT4KKyAgPGNhdGVnb3J5PgorICAgPG5hbWU+NzIvMjA8L25hbWU+CisgICA8ZGVzY3JpcHRpb24+WE9SIHJlc3VsdHMgZm9yIGxheWVyIDcyLzIwIDwvZGVzY3JpcHRpb24+CisgICA8Y2F0ZWdvcmllcz4KKyAgIDwvY2F0ZWdvcmllcz4KKyAgPC9jYXRlZ29yeT4KKyAgPGNhdGVnb3J5PgorICAgPG5hbWU+ODEvMTQ8L25hbWU+CisgICA8ZGVzY3JpcHRpb24+WE9SIHJlc3VsdHMgZm9yIGxheWVyIDgxLzE0IDwvZGVzY3JpcHRpb24+CisgICA8Y2F0ZWdvcmllcz4KKyAgIDwvY2F0ZWdvcmllcz4KKyAgPC9jYXRlZ29yeT4KKyA8L2NhdGVnb3JpZXM+CisgPGNlbGxzPgorICA8Y2VsbD4KKyAgIDxuYW1lPnVzZXJfcHJvamVjdF93cmFwcGVyPC9uYW1lPgorICAgPHZhcmlhbnQvPgorICAgPHJlZmVyZW5jZXM+CisgICA8L3JlZmVyZW5jZXM+CisgIDwvY2VsbD4KKyA8L2NlbGxzPgorIDxpdGVtcz4KKyA8L2l0ZW1zPgorPC9yZXBvcnQtZGF0YWJhc2U+CmRpZmYgLS1naXQgYS9jaGVja3MveG9yLmxvZyBiL2NoZWNrcy94b3IubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzM2NjMjQKLS0tIC9kZXYvbnVsbAorKysgYi9jaGVja3MveG9yLmxvZwpAQCAtMCwwICsxLDY4IEBACitGaXJzdCBMYXlvdXQ6IC9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9jaGVja3MvdXNlcl9wcm9qZWN0X3dyYXBwZXJfZW1wdHlfZXJhc2VkLmdkcworU2Vjb25kIExheW91dDogL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL2NoZWNrcy91c2VyX3Byb2plY3Rfd3JhcHBlcl9lcmFzZWQuZ2RzCitEZXNpZ24gTmFtZTogeG9yX3RhcmdldAorT3V0cHV0IEdEUyB3aWxsIGJlOiAvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvY2hlY2tzL3VzZXJfcHJvamVjdF93cmFwcGVyLnhvci5nZHMKK1JlYWRpbmcgL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL2NoZWNrcy91c2VyX3Byb2plY3Rfd3JhcHBlcl9lbXB0eV9lcmFzZWQuZ2RzIC4uCitSZWFkaW5nIC9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9jaGVja3MvdXNlcl9wcm9qZWN0X3dyYXBwZXJfZXJhc2VkLmdkcyAuLgorLS0tIFJ1bm5pbmcgWE9SIGZvciA2OS8yMCAtLS0KKyJfaW5wdXQiIGluOiB4b3IuZHJjOjM4CitFbGFwc2VkOiAwLjAxMHMKKyJfaW5wdXQiIGluOiB4b3IuZHJjOjM4CitFbGFwc2VkOiAwLjAxMHMKKyJeIiBpbjogeG9yLmRyYzozOAorRWxhcHNlZDogMC4wMDBzCitYT1IgZGlmZmVyZW5jZXM6IDAKKyJfb3V0cHV0IiBpbjogeG9yLmRyYzo0MQorRWxhcHNlZDogMC4wMTBzCistLS0gUnVubmluZyBYT1IgZm9yIDcwLzIwIC0tLQorIl9pbnB1dCIgaW46IHhvci5kcmM6MzgKK0VsYXBzZWQ6IDAuMDEwcworIl9pbnB1dCIgaW46IHhvci5kcmM6MzgKK0VsYXBzZWQ6IDAuMDAwcworIl4iIGluOiB4b3IuZHJjOjM4CitFbGFwc2VkOiAwLjAxMHMKK1hPUiBkaWZmZXJlbmNlczogMAorIl9vdXRwdXQiIGluOiB4b3IuZHJjOjQxCitFbGFwc2VkOiAwLjAwMHMKKy0tLSBSdW5uaW5nIFhPUiBmb3IgNzEvMjAgLS0tCisiX2lucHV0IiBpbjogeG9yLmRyYzozOAorRWxhcHNlZDogMC4wMTBzCisiX2lucHV0IiBpbjogeG9yLmRyYzozOAorRWxhcHNlZDogMC4wMDBzCisiXiIgaW46IHhvci5kcmM6MzgKK0VsYXBzZWQ6IDAuMDEwcworWE9SIGRpZmZlcmVuY2VzOiAzNTgKKyJfb3V0cHV0IiBpbjogeG9yLmRyYzo0MQorRWxhcHNlZDogMC4wMTBzCistLS0gUnVubmluZyBYT1IgZm9yIDcxLzQ0IC0tLQorIl9pbnB1dCIgaW46IHhvci5kcmM6MzgKK0VsYXBzZWQ6IDAuMDAwcworIl9pbnB1dCIgaW46IHhvci5kcmM6MzgKK0VsYXBzZWQ6IDAuMDEwcworIl4iIGluOiB4b3IuZHJjOjM4CitFbGFwc2VkOiAwLjAxMHMKK1hPUiBkaWZmZXJlbmNlczogMTE0NAorIl9vdXRwdXQiIGluOiB4b3IuZHJjOjQxCitFbGFwc2VkOiAwLjAwMHMKKy0tLSBSdW5uaW5nIFhPUiBmb3IgNzIvMjAgLS0tCisiX2lucHV0IiBpbjogeG9yLmRyYzozOAorRWxhcHNlZDogMC4wMTBzCisiX2lucHV0IiBpbjogeG9yLmRyYzozOAorRWxhcHNlZDogMC4wMDBzCisiXiIgaW46IHhvci5kcmM6MzgKK0VsYXBzZWQ6IDAuMDEwcworWE9SIGRpZmZlcmVuY2VzOiA5ODQKKyJfb3V0cHV0IiBpbjogeG9yLmRyYzo0MQorRWxhcHNlZDogMC4wMTBzCistLS0gUnVubmluZyBYT1IgZm9yIDgxLzE0IC0tLQorIl9pbnB1dCIgaW46IHhvci5kcmM6MzgKK0VsYXBzZWQ6IDAuMDEwcworIl9pbnB1dCIgaW46IHhvci5kcmM6MzgKK0VsYXBzZWQ6IDAuMDAwcworIl4iIGluOiB4b3IuZHJjOjM4CitFbGFwc2VkOiAwLjAxMHMKK1hPUiBkaWZmZXJlbmNlczogMgorIl9vdXRwdXQiIGluOiB4b3IuZHJjOjQxCitFbGFwc2VkOiAwLjAwMHMKK1dyaXRpbmcgbGF5b3V0IGZpbGU6IC9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9jaGVja3MvdXNlcl9wcm9qZWN0X3dyYXBwZXIueG9yLmdkcyAuLgorVG90YWwgcnVuIHRpbWU6IDAuMTYwcwpkaWZmIC0tZ2l0IGEvY2hlY2tzL3hvcl90b3RhbC50eHQgYi9jaGVja3MveG9yX3RvdGFsLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGI4ODBlCi0tLSAvZGV2L251bGwKKysrIGIvY2hlY2tzL3hvcl90b3RhbC50eHQKQEAgLTAsMCArMSBAQAorVG90YWwgWE9SIGRpZmZlcmVuY2VzID0gMjQ4OApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3Mvc291cmNlL19zdGF0aWMvUmlzY0R1bmlvLVBpbk1hcHBpbmcucG5nIGIvZG9jcy9zb3VyY2UvX3N0YXRpYy9SaXNjRHVuaW8tUGluTWFwcGluZy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRmZjQ0MAotLS0gL2Rldi9udWxsCisrKyBiL2RvY3Mvc291cmNlL19zdGF0aWMvUmlzY0R1bmlvLVBpbk1hcHBpbmcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvc291cmNlL19zdGF0aWMvUmlzY2R1aW5vX1NvYy5wbmcgYi9kb2NzL3NvdXJjZS9fc3RhdGljL1Jpc2NkdWlub19Tb2MucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmNmM4MjUKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL3NvdXJjZS9fc3RhdGljL1Jpc2NkdWlub19Tb2MucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvc291cmNlL19zdGF0aWMvc2RyYW1fY29udHJvbGxlci5qcGcgYi9kb2NzL3NvdXJjZS9fc3RhdGljL3NkcmFtX2NvbnRyb2xsZXIuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjMGNiODIKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL3NvdXJjZS9fc3RhdGljL3NkcmFtX2NvbnRyb2xsZXIuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3Mvc291cmNlL19zdGF0aWMvc3ludGFjb3JlX2Jsb2NrZGlhZ3JhbS5zdmcgYi9kb2NzL3NvdXJjZS9fc3RhdGljL3N5bnRhY29yZV9ibG9ja2RpYWdyYW0uc3ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlNjA2YTQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL3NvdXJjZS9fc3RhdGljL3N5bnRhY29yZV9ibG9ja2RpYWdyYW0uc3ZnCkBAIC0wLDAgKzEsNjE5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+Cis8IS0tINCh0L7Qt9C00LDQvdC+IE1pY3Jvc29mdCBWaXNpbywg0Y3QutGB0L/QvtGA0YIgU1ZHIHNjcjFfY2x1c3Rlci5zdmcgc2NyMV9jbHVzdGVyIC0tPgorPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWxuczpldj0iaHR0cDovL3d3dy53My5vcmcvMjAwMS94bWwtZXZlbnRzIgorCQl4bWxuczp2PSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL3Zpc2lvLzIwMDMvU1ZHRXh0ZW5zaW9ucy8iIHdpZHRoPSI1LjczOTU4aW4iIGhlaWdodD0iNS4xMTQ1OGluIgorCQl2aWV3Qm94PSIwIDAgNDEzLjI1IDM2OC4yNSIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIiBjbGFzcz0ic3QxMiI+CisJPHY6ZG9jdW1lbnRQcm9wZXJ0aWVzIHY6bGFuZ0lEPSIyMDU3IiB2OnZpZXdNYXJrdXA9ImZhbHNlIi8+CisKKwk8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorCTwhW0NEQVRBWworCQkuc3QxIHtmaWxsOiNkY2VkZmE7c3Ryb2tlOiMyNDM3NDA7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2Utd2lkdGg6MC43NX0KKwkJLnN0MiB7ZmlsbDojYjFkZGYwO3N0cm9rZTojMjQzNzQwO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLXdpZHRoOjAuNzV9CisJCS5zdDMge2ZpbGw6I2IwZTNlNjtzdHJva2U6IzI0Mzc0MDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS13aWR0aDowLjc1fQorCQkuc3Q0IHtmaWxsOm5vbmV9CisJCS5zdDUge3N0cm9rZTojMjQzNzQwO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLXdpZHRoOjEuNX0KKwkJLnN0NiB7ZmlsbDojMjQzNzQwO3N0cm9rZTojMjQzNzQwO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLXdpZHRoOjEuNX0KKwkJLnN0NyB7ZmlsbDpub25lO3N0cm9rZTpub25lO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLXdpZHRoOjAuNzV9CisJCS5zdDgge2ZpbGw6IzI0Mzc0MDtmb250LWZhbWlseTpDYWxpYnJpO2ZvbnQtc2l6ZTowLjc1ZW07Zm9udC13ZWlnaHQ6Ym9sZH0KKwkJLnN0OSB7ZmlsbDojMjQzNzQwO2ZvbnQtZmFtaWx5OkNhbGlicmk7Zm9udC1zaXplOjAuODMzMzM2ZW07Zm9udC13ZWlnaHQ6Ym9sZH0KKwkJLnN0MTAge2ZpbGw6IzBjMGMwYztmb250LWZhbWlseTpDYWxpYnJpO2ZvbnQtc2l6ZTowLjgzMzMzNmVtO2ZvbnQtd2VpZ2h0OmJvbGR9CisJCS5zdDExIHtmb250LXNpemU6MWVtfQorCQkuc3QxMiB7ZmlsbDpub25lO2ZpbGwtcnVsZTpldmVub2RkO2ZvbnQtc2l6ZToxMnB4O292ZXJmbG93OnZpc2libGU7c3Ryb2tlLWxpbmVjYXA6c3F1YXJlO3N0cm9rZS1taXRlcmxpbWl0OjN9CisJXV0+CisJPC9zdHlsZT4KKworCTxnIHY6bUlEPSIwIiB2OmluZGV4PSIxIiB2Omdyb3VwQ29udGV4dD0iZm9yZWdyb3VuZFBhZ2UiPgorCQk8dGl0bGU+c2NyMV9jbHVzdGVyPC90aXRsZT4KKwkJPHY6cGFnZVByb3BlcnRpZXMgdjpkcmF3aW5nU2NhbGU9IjEiIHY6cGFnZVNjYWxlPSIxIiB2OmRyYXdpbmdVbml0cz0iMTkiIHY6c2hhZG93T2Zmc2V0WD0iOSIgdjpzaGFkb3dPZmZzZXRZPSItOSIvPgorCQk8ZyBpZD0ic2hhcGUyLTEiIHY6bUlEPSIyIiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDYwLjM3NSwtMzAuMzc1KSI+CisJCQk8dGl0bGU+0JvQuNGB0YIuMjwvdGl0bGU+CisJCQk8cGF0aCBkPSJNMCAzNTYuNTUgQTExLjcwMDMgMTEuNzAwMyAtMTgwIDAgMCAxMS43IDM2OC4yNSBMMjgwLjggMzY4LjI1IEExMS43MDAzIDExLjcwMDMgLTE4MCAwIDAgMjkyLjUgMzU2LjU1IEwyOTIuNQorCQkJCQkJIDQyLjQ1IEExMS43MDAzIDExLjcwMDMgLTE4MCAwIDAgMjgwLjggMzAuNzUgTDExLjcgMzAuNzUgQTExLjcwMDMgMTEuNzAwMyAtMTgwIDAgMCAwIDQyLjQ1IEwwIDM1Ni41NSBaIgorCQkJCQljbGFzcz0ic3QxIi8+CisJCTwvZz4KKwkJPGcgaWQ9InNoYXBlMy0zIiB2Om1JRD0iMyIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg2Ny44NzUsLTIxMC4zNzUpIj4KKwkJCTx0aXRsZT7Qm9C40YHRgi4zPC90aXRsZT4KKwkJCTxwYXRoIGQ9Ik0wIDM2Mi44NSBBNS40MDAxMyA1LjQwMDEzIC0xODAgMCAwIDUuNCAzNjguMjUgTDI3Mi4xIDM2OC4yNSBBNS40MDAxMyA1LjQwMDEzIC0xODAgMCAwIDI3Ny41IDM2Mi44NSBMMjc3LjUgMjM4LjY1CisJCQkJCQkgQTUuNDAwMTMgNS40MDAxMyAtMTgwIDAgMCAyNzIuMSAyMzMuMjUgTDUuNCAyMzMuMjUgQTUuNDAwMTMgNS40MDAxMyAtMTgwIDAgMCAwIDIzOC42NSBMMCAzNjIuODUgWiIKKwkJCQkJY2xhc3M9InN0MiIvPgorCQk8L2c+CisJCTxnIGlkPSJzaGFwZTQtNSIgdjptSUQ9IjQiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNzUuMzc1LC0yMTcuODc1KSI+CisJCQk8dGl0bGU+0JvQuNGB0YIuNDwvdGl0bGU+CisJCQk8cGF0aCBkPSJNMCAzNjMuNzUgQTQuNTAwMSA0LjUwMDEgLTE4MCAwIDAgNC41IDM2OC4yNSBMNTUuNSAzNjguMjUgQTQuNTAwMSA0LjUwMDEgLTE4MCAwIDAgNjAgMzYzLjc1IEw2MCAzNDIuNzUgQTQuNTAwMQorCQkJCQkJIDQuNTAwMSAtMTgwIDAgMCA1NS41IDMzOC4yNSBMNC41IDMzOC4yNSBBNC41MDAxIDQuNTAwMSAtMTgwIDAgMCAwIDM0Mi43NSBMMCAzNjMuNzUgWiIgY2xhc3M9InN0MyIvPgorCQk8L2c+CisJCTxnIGlkPSJzaGFwZTUtNyIgdjptSUQ9IjUiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTQyLjg3NSwtMjE3Ljg3NSkiPgorCQkJPHRpdGxlPtCb0LjRgdGCLjU8L3RpdGxlPgorCQkJPHBhdGggZD0iTTAgMzYzLjc1IEE0LjUwMDEgNC41MDAxIC0xODAgMCAwIDQuNSAzNjguMjUgTDU1LjUgMzY4LjI1IEE0LjUwMDEgNC41MDAxIC0xODAgMCAwIDYwIDM2My43NSBMNjAgMzQyLjc1IEE0LjUwMDEKKwkJCQkJCSA0LjUwMDEgLTE4MCAwIDAgNTUuNSAzMzguMjUgTDQuNSAzMzguMjUgQTQuNTAwMSA0LjUwMDEgLTE4MCAwIDAgMCAzNDIuNzUgTDAgMzYzLjc1IFoiIGNsYXNzPSJzdDMiLz4KKwkJPC9nPgorCQk8ZyBpZD0ic2hhcGU2LTkiIHY6bUlEPSI2IiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIxMC4zNzUsLTIxNy44NzUpIj4KKwkJCTx0aXRsZT7Qm9C40YHRgi42PC90aXRsZT4KKwkJCTxwYXRoIGQ9Ik0wIDM2My43NSBBNC41MDAxIDQuNTAwMSAtMTgwIDAgMCA0LjUgMzY4LjI1IEw1NS41IDM2OC4yNSBBNC41MDAxIDQuNTAwMSAtMTgwIDAgMCA2MCAzNjMuNzUgTDYwIDM0Mi43NSBBNC41MDAxCisJCQkJCQkgNC41MDAxIC0xODAgMCAwIDU1LjUgMzM4LjI1IEw0LjUgMzM4LjI1IEE0LjUwMDEgNC41MDAxIC0xODAgMCAwIDAgMzQyLjc1IEwwIDM2My43NSBaIiBjbGFzcz0ic3QzIi8+CisJCTwvZz4KKwkJPGcgaWQ9InNoYXBlNy0xMSIgdjptSUQ9IjciIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjc3Ljg3NSwtMjE3Ljg3NSkiPgorCQkJPHRpdGxlPtCb0LjRgdGCLjc8L3RpdGxlPgorCQkJPHBhdGggZD0iTTAgMzYzLjc1IEE0LjUwMDEgNC41MDAxIC0xODAgMCAwIDQuNSAzNjguMjUgTDU1LjUgMzY4LjI1IEE0LjUwMDEgNC41MDAxIC0xODAgMCAwIDYwIDM2My43NSBMNjAgMzQyLjc1IEE0LjUwMDEKKwkJCQkJCSA0LjUwMDEgLTE4MCAwIDAgNTUuNSAzMzguMjUgTDQuNSAzMzguMjUgQTQuNTAwMSA0LjUwMDEgLTE4MCAwIDAgMCAzNDIuNzUgTDAgMzYzLjc1IFoiIGNsYXNzPSJzdDMiLz4KKwkJPC9nPgorCQk8ZyBpZD0ic2hhcGU4LTEzIiB2Om1JRD0iOCIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNDIuODc1LC0yNTUuMzc1KSI+CisJCQk8dGl0bGU+0JvQuNGB0YIuODwvdGl0bGU+CisJCQk8cGF0aCBkPSJNMCAzNjMuNzUgQTQuNTAwMSA0LjUwMDEgLTE4MCAwIDAgNC41IDM2OC4yNSBMNTUuNSAzNjguMjUgQTQuNTAwMSA0LjUwMDEgLTE4MCAwIDAgNjAgMzYzLjc1IEw2MCAzNDIuNzUgQTQuNTAwMQorCQkJCQkJIDQuNTAwMSAtMTgwIDAgMCA1NS41IDMzOC4yNSBMNC41IDMzOC4yNSBBNC41MDAxIDQuNTAwMSAtMTgwIDAgMCAwIDM0Mi43NSBMMCAzNjMuNzUgWiIgY2xhc3M9InN0MyIvPgorCQk8L2c+CisJCTxnIGlkPSJzaGFwZTktMTUiIHY6bUlEPSI5IiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDc1LjM3NSwtMjU1LjM3NSkiPgorCQkJPHRpdGxlPtCb0LjRgdGCLjk8L3RpdGxlPgorCQkJPHBhdGggZD0iTTAgMzYzLjc1IEE0LjUwMDEgNC41MDAxIC0xODAgMCAwIDQuNSAzNjguMjUgTDU1LjUgMzY4LjI1IEE0LjUwMDEgNC41MDAxIC0xODAgMCAwIDYwIDM2My43NSBMNjAgMzQyLjc1IEE0LjUwMDEKKwkJCQkJCSA0LjUwMDEgLTE4MCAwIDAgNTUuNSAzMzguMjUgTDQuNSAzMzguMjUgQTQuNTAwMSA0LjUwMDEgLTE4MCAwIDAgMCAzNDIuNzUgTDAgMzYzLjc1IFoiIGNsYXNzPSJzdDMiLz4KKwkJPC9nPgorCQk8ZyBpZD0ic2hhcGUxMC0xNyIgdjptSUQ9IjEwIiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIxMC4zNzUsLTI1NS4zNzUpIj4KKwkJCTx0aXRsZT7Qm9C40YHRgi4xMDwvdGl0bGU+CisJCQk8cGF0aCBkPSJNMCAzNjMuNzUgQTQuNTAwMSA0LjUwMDEgLTE4MCAwIDAgNC41IDM2OC4yNSBMNTUuNSAzNjguMjUgQTQuNTAwMSA0LjUwMDEgLTE4MCAwIDAgNjAgMzYzLjc1IEw2MCAzNDIuNzUgQTQuNTAwMQorCQkJCQkJIDQuNTAwMSAtMTgwIDAgMCA1NS41IDMzOC4yNSBMNC41IDMzOC4yNSBBNC41MDAxIDQuNTAwMSAtMTgwIDAgMCAwIDM0Mi43NSBMMCAzNjMuNzUgWiIgY2xhc3M9InN0MyIvPgorCQk8L2c+CisJCTxnIGlkPSJzaGFwZTExLTE5IiB2Om1JRD0iMTEiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNTIuMzA1LC0zMDcuNjM1KSI+CisJCQk8dGl0bGU+0JvQuNGB0YIuMTE8L3RpdGxlPgorCQkJPHBhdGggZD0iTTE2LjE0IDM2OC4wMSBMOC4wNyAzNjguMDEgTDguMDcgMzY4LjIzIEwwIDM2OC4yNSBMMTYuMTQgMzY4LjAxIFoiIGNsYXNzPSJzdDQiLz4KKwkJCTxwYXRoIGQ9Ik0xNi4xNCAzNjguMDEgTDguMDcgMzY4LjAxIEw4LjA3IDM2OC4yMyBMMCAzNjguMjUiIGNsYXNzPSJzdDUiLz4KKwkJPC9nPgorCQk8ZyBpZD0ic2hhcGUxMi0yMiIgdjptSUQ9IjEyIiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDY4LjQ0NSwtMzA1LjI1KSI+CisJCQk8dGl0bGU+0JvQuNGB0YIuMTI8L3RpdGxlPgorCQkJPHBhdGggZD0iTTUuMjUgMzY1LjYyIEwwIDM2OC4yNSBMMCAzNjMgTDUuMjUgMzY1LjYyIFoiIGNsYXNzPSJzdDYiLz4KKwkJPC9nPgorCQk8ZyBpZD0ic2hhcGUxMy0yNCIgdjptSUQ9IjEzIiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQ3LjA1NSwtMzA1LjAxKSI+CisJCQk8dGl0bGU+0JvQuNGB0YIuMTM8L3RpdGxlPgorCQkJPHBhdGggZD0iTTAgMzY1LjYzIEw1LjI0IDM2MyBMNS4yNSAzNjguMjUgTDAgMzY1LjYzIFoiIGNsYXNzPSJzdDYiLz4KKwkJPC9nPgorCQk8ZyBpZD0ic2hhcGUxNC0yNiIgdjptSUQ9IjE0IiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDc1LjM3NSwtMjkyLjg3NSkiPgorCQkJPHRpdGxlPtCb0LjRgdGCLjE0PC90aXRsZT4KKwkJCTxwYXRoIGQ9Ik0wIDM2My43NSBBNC41MDAxIDQuNTAwMSAtMTgwIDAgMCA0LjUgMzY4LjI1IEw1NS41IDM2OC4yNSBBNC41MDAxIDQuNTAwMSAtMTgwIDAgMCA2MCAzNjMuNzUgTDYwIDM0Mi43NSBBNC41MDAxCisJCQkJCQkgNC41MDAxIC0xODAgMCAwIDU1LjUgMzM4LjI1IEw0LjUgMzM4LjI1IEE0LjUwMDEgNC41MDAxIC0xODAgMCAwIC0wIDM0Mi43NSBMMCAzNjMuNzUgWiIgY2xhc3M9InN0MyIvPgorCQk8L2c+CisJCTxnIGlkPSJzaGFwZTE1LTI4IiB2Om1JRD0iMTUiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjc3Ljg3NSwtMjU1LjM3NSkiPgorCQkJPHRpdGxlPtCb0LjRgdGCLjE1PC90aXRsZT4KKwkJCTxwYXRoIGQ9Ik0wIDM2My43NSBBNC41MDAxIDQuNTAwMSAtMTgwIDAgMCA0LjUgMzY4LjI1IEw1NS41IDM2OC4yNSBBNC41MDAxIDQuNTAwMSAtMTgwIDAgMCA2MCAzNjMuNzUgTDYwIDM0Mi43NSBBNC41MDAxCisJCQkJCQkgNC41MDAxIC0xODAgMCAwIDU1LjUgMzM4LjI1IEw0LjUgMzM4LjI1IEE0LjUwMDEgNC41MDAxIC0xODAgMCAwIDAgMzQyLjc1IEwwIDM2My43NSBaIiBjbGFzcz0ic3QzIi8+CisJCTwvZz4KKwkJPGcgaWQ9InNoYXBlMTYtMzAiIHY6bUlEPSIxNiIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNDIuODc1LC0yOTIuODc1KSI+CisJCQk8dGl0bGU+0JvQuNGB0YIuMTY8L3RpdGxlPgorCQkJPHBhdGggZD0iTTAgMzYzLjc1IEE0LjUwMDEgNC41MDAxIC0xODAgMCAwIDQuNSAzNjguMjUgTDU1LjUgMzY4LjI1IEE0LjUwMDEgNC41MDAxIC0xODAgMCAwIDYwIDM2My43NSBMNjAgMzQyLjc1IEE0LjUwMDEKKwkJCQkJCSA0LjUwMDEgLTE4MCAwIDAgNTUuNSAzMzguMjUgTDQuNSAzMzguMjUgQTQuNTAwMSA0LjUwMDEgLTE4MCAwIDAgLTAgMzQyLjc1IEwwIDM2My43NSBaIiBjbGFzcz0ic3QzIi8+CisJCTwvZz4KKwkJPGcgaWQ9InNoYXBlMTctMzIiIHY6bUlEPSIxNyIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzNDQuODA1LC0zMDcuNjM1KSI+CisJCQk8dGl0bGU+0JvQuNGB0YIuMTc8L3RpdGxlPgorCQkJPHBhdGggZD0iTTAgMzY4LjAxIEw4LjA3IDM2OC4wMSBMOC4wNyAzNjguMjMgTDE2LjE0IDM2OC4yNSBMMCAzNjguMDEgWiIgY2xhc3M9InN0NCIvPgorCQkJPHBhdGggZD0iTTAgMzY4LjAxIEw4LjA3IDM2OC4wMSBMOC4wNyAzNjguMjMgTDE2LjE0IDM2OC4yNSIgY2xhc3M9InN0NSIvPgorCQk8L2c+CisJCTxnIGlkPSJzaGFwZTE4LTM1IiB2Om1JRD0iMTgiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzM5LjU1NSwtMzA1LjI1KSI+CisJCQk8dGl0bGU+0JvQuNGB0YIuMTg8L3RpdGxlPgorCQkJPHBhdGggZD0iTTAgMzY1LjYyIEw1LjI1IDM2MyBMNS4yNSAzNjguMjUgTDAgMzY1LjYyIFoiIGNsYXNzPSJzdDYiLz4KKwkJPC9nPgorCQk8ZyBpZD0ic2hhcGUxOS0zNyIgdjptSUQ9IjE5IiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDM2MC45NDUsLTMwNS4wMSkiPgorCQkJPHRpdGxlPtCb0LjRgdGCLjE5PC90aXRsZT4KKwkJCTxwYXRoIGQ9Ik01LjI1IDM2NS42MyBMMCAzNjguMjUgTDAuMDEgMzYzIEw1LjI1IDM2NS42MyBaIiBjbGFzcz0ic3Q2Ii8+CisJCTwvZz4KKwkJPGcgaWQ9InNoYXBlMjAtMzkiIHY6bUlEPSIyMCIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyNzcuODc1LC0yOTIuODc1KSI+CisJCQk8dGl0bGU+0JvQuNGB0YIuMjA8L3RpdGxlPgorCQkJPHBhdGggZD0iTS0wIDM2My43NSBBNC41MDAxIDQuNTAwMSAtMTgwIDAgMCA0LjUgMzY4LjI1IEw1NS41IDM2OC4yNSBBNC41MDAxIDQuNTAwMSAtMTgwIDAgMCA2MCAzNjMuNzUgTDYwIDM0Mi43NSBBNC41MDAxCisJCQkJCQkgNC41MDAxIC0xODAgMCAwIDU1LjUgMzM4LjI1IEw0LjUgMzM4LjI1IEE0LjUwMDEgNC41MDAxIC0xODAgMCAwIC0wIDM0Mi43NSBMMCAzNjMuNzUgWiIgY2xhc3M9InN0MyIvPgorCQk8L2c+CisJCTxnIGlkPSJzaGFwZTIxLTQxIiB2Om1JRD0iMjEiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjEwLjM3NSwtMjkyLjg3NSkiPgorCQkJPHRpdGxlPtCb0LjRgdGCLjIxPC90aXRsZT4KKwkJCTxwYXRoIGQ9Ik0tMCAzNjMuNzUgQTQuNTAwMSA0LjUwMDEgLTE4MCAwIDAgNC41IDM2OC4yNSBMNTUuNSAzNjguMjUgQTQuNTAwMSA0LjUwMDEgLTE4MCAwIDAgNjAgMzYzLjc1IEw2MCAzNDIuNzUgQTQuNTAwMQorCQkJCQkJIDQuNTAwMSAtMTgwIDAgMCA1NS41IDMzOC4yNSBMNC41IDMzOC4yNSBBNC41MDAxIDQuNTAwMSAtMTgwIDAgMCAtMCAzNDIuNzUgTDAgMzYzLjc1IFoiIGNsYXNzPSJzdDMiLz4KKwkJPC9nPgorCQk8ZyBpZD0ic2hhcGUyMi00MyIgdjptSUQ9IjIyIiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE1MC4zNzUsLTEyMy4zNzUpIj4KKwkJCTx0aXRsZT7Qm9C40YHRgi4yMjwvdGl0bGU+CisJCQk8cGF0aCBkPSJNMCAzNjAuMzcgQTcuODc1MTggNy44NzUxOCAtMTgwIDAgMCA3Ljg3IDM2OC4yNSBMMTA0LjYyIDM2OC4yNSBBNy44NzUxOCA3Ljg3NTE4IC0xODAgMCAwIDExMi41IDM2MC4zNyBMMTEyLjUKKwkJCQkJCSAzMjMuNjMgQTcuODc1MTggNy44NzUxOCAtMTgwIDAgMCAxMDQuNjIgMzE1Ljc1IEw3Ljg3IDMxNS43NSBBNy44NzUxOCA3Ljg3NTE4IC0xODAgMCAwIDAgMzIzLjYzIEwwIDM2MC4zNworCQkJCQkJIFoiIGNsYXNzPSJzdDIiLz4KKwkJPC9nPgorCQk8ZyBpZD0ic2hhcGUyMy00NSIgdjptSUQ9IjIzIiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE5NS4zNzUsLTg1Ljg3NSkiPgorCQkJPHRpdGxlPtCb0LjRgdGCLjIzPC90aXRsZT4KKwkJCTxwYXRoIGQ9Ik0tMCAzNjMuNzUgQTQuNTAwMSA0LjUwMDEgLTE4MCAwIDAgNC41IDM2OC4yNSBMNjMgMzY4LjI1IEE0LjUwMDEgNC41MDAxIC0xODAgMCAwIDY3LjUgMzYzLjc1IEw2Ny41IDM0Mi43NSBBNC41MDAxCisJCQkJCQkgNC41MDAxIC0xODAgMCAwIDYzIDMzOC4yNSBMNC41IDMzOC4yNSBBNC41MDAxIDQuNTAwMSAtMTgwIDAgMCAtMCAzNDIuNzUgTDAgMzYzLjc1IFoiIGNsYXNzPSJzdDIiLz4KKwkJPC9nPgorCQk8ZyBpZD0ic2hhcGUyNC00NyIgdjptSUQ9IjI0IiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEyMC4zNzUsLTE0OS42MjUpIj4KKwkJCTx0aXRsZT7Qm9C40YHRgi4yNDwvdGl0bGU+CisJCQk8cGF0aCBkPSJNMCAzNTkuNDMgTDAgMzY4LjI1IEwyMy4wNyAzNjguMjUgTDAgMzU5LjQzIFoiIGNsYXNzPSJzdDQiLz4KKwkJCTxwYXRoIGQ9Ik0wIDM1OS40MyBMMCAzNjguMjUgTDIzLjA3IDM2OC4yNSIgY2xhc3M9InN0NSIvPgorCQk8L2c+CisJCTxnIGlkPSJzaGFwZTI1LTUwIiB2Om1JRD0iMjUiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTE3Ljc1LC0xNTguNDQ1KSI+CisJCQk8dGl0bGU+0JvQuNGB0YIuMjU8L3RpdGxlPgorCQkJPHBhdGggZD0iTTIuNjMgMzYzIEw1LjI1IDM2OC4yNSBMMCAzNjguMjUgTDIuNjMgMzYzIFoiIGNsYXNzPSJzdDYiLz4KKwkJPC9nPgorCQk8ZyBpZD0ic2hhcGUyNi01MiIgdjptSUQ9IjI2IiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE0My40NDUsLTE0NykiPgorCQkJPHRpdGxlPtCb0LjRgdGCLjI2PC90aXRsZT4KKwkJCTxwYXRoIGQ9Ik01LjI1IDM2NS42MyBMMCAzNjguMjUgTDAgMzYzIEw1LjI1IDM2NS42MyBaIiBjbGFzcz0ic3Q2Ii8+CisJCTwvZz4KKwkJPGcgaWQ9InNoYXBlMjctNTQiIHY6bUlEPSIyNyIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMDUuMzc1LC0yMDIuMzA1KSI+CisJCQk8dGl0bGU+0JvQuNGB0YIuMjc8L3RpdGxlPgorCQkJPHBhdGggZD0iTTAgMzY4LjI1IEwwIDM1OS42MSBMMCAzNjguMjUgWiIgY2xhc3M9InN0NCIvPgorCQkJPHBhdGggZD0iTTAgMzY4LjI1IEwwIDM1OS42MSIgY2xhc3M9InN0NSIvPgorCQk8L2c+CisJCTxnIGlkPSJzaGFwZTI4LTU3IiB2Om1JRD0iMjgiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTAyLjc1LC0xOTcuMDU1KSI+CisJCQk8dGl0bGU+0JvQuNGB0YIuMjg8L3RpdGxlPgorCQkJPHBhdGggZD0iTTIuNjMgMzY4LjI1IEwwIDM2MyBMNS4yNSAzNjMgTDIuNjMgMzY4LjI1IFoiIGNsYXNzPSJzdDYiLz4KKwkJPC9nPgorCQk8ZyBpZD0ic2hhcGUyOS01OSIgdjptSUQ9IjI5IiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEwMi43NSwtMjEwLjk0NSkiPgorCQkJPHRpdGxlPtCb0LjRgdGCLjI5PC90aXRsZT4KKwkJCTxwYXRoIGQ9Ik0yLjYzIDM2MyBMNS4yNSAzNjguMjUgTDAgMzY4LjI1IEwyLjYzIDM2MyBaIiBjbGFzcz0ic3Q2Ii8+CisJCTwvZz4KKwkJPGcgaWQ9InNoYXBlMzAtNjEiIHY6bUlEPSIzMCIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg3NS4zNzUsLTE2NS4zNzUpIj4KKwkJCTx0aXRsZT7Qm9C40YHRgi4zMDwvdGl0bGU+CisJCQk8cGF0aCBkPSJNMCAzNjguMjUgTDEyIDMzOC4yNSBMNDggMzM4LjI1IEw2MCAzNjguMjUgTDAgMzY4LjI1IFoiIGNsYXNzPSJzdDIiLz4KKwkJPC9nPgorCQk8ZyBpZD0ic2hhcGUzMS02MyIgdjptSUQ9IjMxIiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI2OS44MDUsLTE0OS42MjUpIj4KKwkJCTx0aXRsZT7Qm9C40YHRgi4zMTwvdGl0bGU+CisJCQk8cGF0aCBkPSJNMjMuMDcgMzU5LjQzIEwyMy4wNyAzNjguMjUgTDAgMzY4LjI1IEwyMy4wNyAzNTkuNDMgWiIgY2xhc3M9InN0NCIvPgorCQkJPHBhdGggZD0iTTIzLjA3IDM1OS40MyBMMjMuMDcgMzY4LjI1IEwwIDM2OC4yNSIgY2xhc3M9InN0NSIvPgorCQk8L2c+CisJCTxnIGlkPSJzaGFwZTMyLTY2IiB2Om1JRD0iMzIiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjkwLjI1LC0xNTguNDQ1KSI+CisJCQk8dGl0bGU+0JvQuNGB0YIuMzI8L3RpdGxlPgorCQkJPHBhdGggZD0iTTIuNjMgMzYzIEw1LjI1IDM2OC4yNSBMMCAzNjguMjUgTDIuNjMgMzYzIFoiIGNsYXNzPSJzdDYiLz4KKwkJPC9nPgorCQk8ZyBpZD0ic2hhcGUzMy02OCIgdjptSUQ9IjMzIiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI2NC41NTUsLTE0NykiPgorCQkJPHRpdGxlPtCb0LjRgdGCLjMzPC90aXRsZT4KKwkJCTxwYXRoIGQ9Ik0wIDM2NS42MyBMNS4yNSAzNjMgTDUuMjUgMzY4LjI1IEwwIDM2NS42MyBaIiBjbGFzcz0ic3Q2Ii8+CisJCTwvZz4KKwkJPGcgaWQ9InNoYXBlMzQtNzAiIHY6bUlEPSIzNCIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyNzcuODc1LC0xNjUuMzc1KSI+CisJCQk8dGl0bGU+0JvQuNGB0YIuMzQ8L3RpdGxlPgorCQkJPHBhdGggZD0iTTAgMzY4LjI1IEwxMiAzMzguMjUgTDQ4IDMzOC4yNSBMNjAgMzY4LjI1IEwwIDM2OC4yNSBaIiBjbGFzcz0ic3QyIi8+CisJCTwvZz4KKwkJPGcgaWQ9InNoYXBlMzUtNzIiIHY6bUlEPSIzNSIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzMDcuODc1LC0yMDIuMzA1KSI+CisJCQk8dGl0bGU+0JvQuNGB0YIuMzU8L3RpdGxlPgorCQkJPHBhdGggZD0iTTAgMzU5LjYxIEwwIDM2OC4yNSBMMCAzNTkuNjEgWiIgY2xhc3M9InN0NCIvPgorCQkJPHBhdGggZD0iTTAgMzU5LjYxIEwwIDM2OC4yNSIgY2xhc3M9InN0NSIvPgorCQk8L2c+CisJCTxnIGlkPSJzaGFwZTM2LTc1IiB2Om1JRD0iMzYiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzA1LjI1LC0yMTAuOTQ1KSI+CisJCQk8dGl0bGU+0JvQuNGB0YIuMzY8L3RpdGxlPgorCQkJPHBhdGggZD0iTTIuNjMgMzYzIEw1LjI1IDM2OC4yNSBMMCAzNjguMjUgTDIuNjMgMzYzIFoiIGNsYXNzPSJzdDYiLz4KKwkJPC9nPgorCQk8ZyBpZD0ic2hhcGUzNy03NyIgdjptSUQ9IjM3IiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMwNS4yNSwtMTk3LjA1NSkiPgorCQkJPHRpdGxlPtCb0LjRgdGCLjM3PC90aXRsZT4KKwkJCTxwYXRoIGQ9Ik0yLjYzIDM2OC4yNSBMMCAzNjMgTDUuMjUgMzYzIEwyLjYzIDM2OC4yNSBaIiBjbGFzcz0ic3Q2Ii8+CisJCTwvZz4KKwkJPGcgaWQ9InNoYXBlMzgtNzkiIHY6bUlEPSIzOCIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyNjkuODA1LC0xMDAuODc1KSI+CisJCQk8dGl0bGU+0JvQuNGB0YIuMzg8L3RpdGxlPgorCQkJPHBhdGggZD0iTTAgMzY4LjI1IEwzOC4wNyAzNjguMjUgTDM4LjA3IDMxMC42OCBMMCAzNjguMjUgWiIgY2xhc3M9InN0NCIvPgorCQkJPHBhdGggZD0iTTAgMzY4LjI1IEwzOC4wNyAzNjguMjUgTDM4LjA3IDMxMC42OCIgY2xhc3M9InN0NSIvPgorCQk8L2c+CisJCTxnIGlkPSJzaGFwZTM5LTgyIiB2Om1JRD0iMzkiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjY0LjU1NSwtOTguMjUpIj4KKwkJCTx0aXRsZT7Qm9C40YHRgi4zOTwvdGl0bGU+CisJCQk8cGF0aCBkPSJNMCAzNjUuNjIgTDUuMjUgMzYzIEw1LjI1IDM2OC4yNSBMMCAzNjUuNjIgWiIgY2xhc3M9InN0NiIvPgorCQk8L2c+CisJCTxnIGlkPSJzaGFwZTQwLTg0IiB2Om1JRD0iNDAiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzA1LjI1LC0xNTguNDQ1KSI+CisJCQk8dGl0bGU+0JvQuNGB0YIuNDA8L3RpdGxlPgorCQkJPHBhdGggZD0iTTIuNjMgMzYzIEw1LjI1IDM2OC4yNSBMMCAzNjguMjUgTDIuNjMgMzYzIFoiIGNsYXNzPSJzdDYiLz4KKwkJPC9nPgorCQk8ZyBpZD0ic2hhcGU0MS04NiIgdjptSUQ9IjQxIiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDkwLjM3NSwtODkuODA1KSI+CisJCQk8dGl0bGU+0JvQuNGB0YIuNDE8L3RpdGxlPgorCQkJPHBhdGggZD0iTTAgMzY4LjI1IEwwIDI5OS42MSBMMCAzNjguMjUgWiIgY2xhc3M9InN0NCIvPgorCQkJPHBhdGggZD0iTTAgMzY4LjI1IEwwIDI5OS42MSIgY2xhc3M9InN0NSIvPgorCQk8L2c+CisJCTxnIGlkPSJzaGFwZTQyLTg5IiB2Om1JRD0iNDIiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoODcuNzUsLTg0LjU1NSkiPgorCQkJPHRpdGxlPtCb0LjRgdGCLjQyPC90aXRsZT4KKwkJCTxwYXRoIGQ9Ik0yLjYzIDM2OC4yNSBMMCAzNjMgTDUuMjUgMzYzIEwyLjYzIDM2OC4yNSBaIiBjbGFzcz0ic3Q2Ii8+CisJCTwvZz4KKwkJPGcgaWQ9InNoYXBlNDMtOTEiIHY6bUlEPSI0MyIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg4Ny43NSwtMTU4LjQ0NSkiPgorCQkJPHRpdGxlPtCb0LjRgdGCLjQzPC90aXRsZT4KKwkJCTxwYXRoIGQ9Ik0yLjYzIDM2MyBMNS4yNSAzNjguMjUgTDAgMzY4LjI1IEwyLjYzIDM2MyBaIiBjbGFzcz0ic3Q2Ii8+CisJCTwvZz4KKwkJPGcgaWQ9InNoYXBlNDQtOTMiIHY6bUlEPSI0NCIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg3NS4zNzUsLTQ1LjM3NSkiPgorCQkJPHRpdGxlPtCb0LjRgdGCLjQ0PC90aXRsZT4KKwkJCTxwYXRoIGQ9Ik0wIDM2Mi42MiBBNS42MjUxMyA1LjYyNTEzIC0xODAgMCAwIDUuNjMgMzY4LjI1IEw1NC4zOCAzNjguMjUgQTUuNjI1MTMgNS42MjUxMyAtMTgwIDAgMCA2MCAzNjIuNjIgTDYwIDMzNi4zOAorCQkJCQkJIEE1LjYyNTEzIDUuNjI1MTMgLTE4MCAwIDAgNTQuMzggMzMwLjc1IEw1LjYyIDMzMC43NSBBNS42MjUxMyA1LjYyNTEzIC0xODAgMCAwIDAgMzM2LjM4IEwwIDM2Mi42MiBaIgorCQkJCQljbGFzcz0ic3QyIi8+CisJCTwvZz4KKwkJPGcgaWQ9InNoYXBlNDUtOTUiIHY6bUlEPSI0NSIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyNzcuODc1LC00NS4zNzUpIj4KKwkJCTx0aXRsZT7Qm9C40YHRgi40NTwvdGl0bGU+CisJCQk8cGF0aCBkPSJNMCAzNjIuNjIgQTUuNjI1MTMgNS42MjUxMyAtMTgwIDAgMCA1LjYzIDM2OC4yNSBMNTQuMzggMzY4LjI1IEE1LjYyNTEzIDUuNjI1MTMgLTE4MCAwIDAgNjAgMzYyLjYyIEw2MCAzMzYuMzgKKwkJCQkJCSBBNS42MjUxMyA1LjYyNTEzIC0xODAgMCAwIDU0LjM4IDMzMC43NSBMNS42MiAzMzAuNzUgQTUuNjI1MTMgNS42MjUxMyAtMTgwIDAgMCAwIDMzNi4zOCBMMCAzNjIuNjIgWiIKKwkJCQkJY2xhc3M9InN0MiIvPgorCQk8L2c+CisJCTxnIGlkPSJzaGFwZTQ2LTk3IiB2Om1JRD0iNDYiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzIyLjg3NSwtODkuODA1KSI+CisJCQk8dGl0bGU+0JvQuNGB0YIuNDY8L3RpdGxlPgorCQkJPHBhdGggZD0iTTAgMjk5LjYxIEwwIDM2OC4yNSBMMCAyOTkuNjEgWiIgY2xhc3M9InN0NCIvPgorCQkJPHBhdGggZD0iTTAgMjk5LjYxIEwwIDM2OC4yNSIgY2xhc3M9InN0NSIvPgorCQk8L2c+CisJCTxnIGlkPSJzaGFwZTQ3LTEwMCIgdjptSUQ9IjQ3IiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMyMC4yNSwtMTU4LjQ0NSkiPgorCQkJPHRpdGxlPtCb0LjRgdGCLjQ3PC90aXRsZT4KKwkJCTxwYXRoIGQ9Ik0yLjYzIDM2MyBMNS4yNSAzNjguMjUgTDAgMzY4LjI1IEwyLjYzIDM2MyBaIiBjbGFzcz0ic3Q2Ii8+CisJCTwvZz4KKwkJPGcgaWQ9InNoYXBlNDgtMTAyIiB2Om1JRD0iNDgiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzIwLjI1LC04NC41NTUpIj4KKwkJCTx0aXRsZT7Qm9C40YHRgi40ODwvdGl0bGU+CisJCQk8cGF0aCBkPSJNMi42MyAzNjguMjUgTDAgMzYzIEw1LjI1IDM2MyBMMi42MyAzNjguMjUgWiIgY2xhc3M9InN0NiIvPgorCQk8L2c+CisJCTxnIGlkPSJzaGFwZTQ5LTEwNCIgdjptSUQ9IjQ5IiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDM2Ny44NzUsLTMwMC4zNzUpIj4KKwkJCTx0aXRsZT7Qm9C40YHRgi40OTwvdGl0bGU+CisJCQk8cmVjdCB4PSIwIiB5PSIzNTMuMjUiIHdpZHRoPSI0NSIgaGVpZ2h0PSIxNSIgY2xhc3M9InN0NyIvPgorCQk8L2c+CisJCTxnIGlkPSJzaGFwZTUwLTEwNiIgdjptSUQ9IjUwIiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDM1NC4zNSwtMzAyLjkyNSkiPgorCQkJPHRpdGxlPtCb0LjRgdGCLjUwPC90aXRsZT4KKwkJCTxkZXNjPkpUQUcgSS9GPC9kZXNjPgorCQkJPHY6dGV4dEJsb2NrIHY6bWFyZ2lucz0icmVjdCgwLDAsMCwwKSIvPgorCQkJPHY6dGV4dFJlY3QgY3g9IjM2LjAyNSIgY3k9IjM2Mi44NSIgd2lkdGg9IjcyLjA2IiBoZWlnaHQ9IjEwLjgiLz4KKwkJCTxyZWN0IHg9IjAiIHk9IjM1Ny40NSIgd2lkdGg9IjcyLjA1IiBoZWlnaHQ9IjEwLjgiIGNsYXNzPSJzdDciLz4KKwkJCTx0ZXh0IHg9IjIwLjUiIHk9IjM2NS41NSIgY2xhc3M9InN0OCIgdjpsYW5nSUQ9IjIwNTciPjx2OnBhcmFncmFwaCB2Omhvcml6QWxpZ249IjEiLz48djp0YWJMaXN0Lz5KVEFHIEkvRjwvdGV4dD4JCTwvZz4KKwkJPGcgaWQ9InNoYXBlNTEtMTA5IiB2Om1JRD0iNTEiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4zNzUsLTMwMC4zNzUpIj4KKwkJCTx0aXRsZT7Qm9C40YHRgi41MTwvdGl0bGU+CisJCQk8cmVjdCB4PSIwIiB5PSIzNTMuMjUiIHdpZHRoPSI0NSIgaGVpZ2h0PSIxNSIgY2xhc3M9InN0NyIvPgorCQk8L2c+CisJCTxnIGlkPSJzaGFwZTUyLTExMSIgdjptSUQ9IjUyIiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC04LjY1LC0zMDIuOTI1KSI+CisJCQk8dGl0bGU+0JvQuNGB0YIuNTI8L3RpdGxlPgorCQkJPGRlc2M+SVJRIEkvRjwvZGVzYz4KKwkJCTx2OnRleHRCbG9jayB2Om1hcmdpbnM9InJlY3QoMCwwLDAsMCkiLz4KKwkJCTx2OnRleHRSZWN0IGN4PSIzMS41MjUiIGN5PSIzNjIuODUiIHdpZHRoPSI2My4wNSIgaGVpZ2h0PSIxMC44Ii8+CisJCQk8cmVjdCB4PSIwIiB5PSIzNTcuNDUiIHdpZHRoPSI2My4wNSIgaGVpZ2h0PSIxMC44IiBjbGFzcz0ic3Q3Ii8+CisJCQk8dGV4dCB4PSIxOC40OSIgeT0iMzY1LjU1IiBjbGFzcz0ic3Q4IiB2OmxhbmdJRD0iMjA1NyI+PHY6cGFyYWdyYXBoIHY6aG9yaXpBbGlnbj0iMSIvPjx2OnRhYkxpc3QvPklSUSBJL0Y8L3RleHQ+CQk8L2c+CisJCTxnIGlkPSJzaGFwZTUzLTExNCIgdjptSUQ9IjUzIiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDY3Ljg3NSwtMC4zNzUpIj4KKwkJCTx0aXRsZT7Qm9C40YHRgi41MzwvdGl0bGU+CisJCQk8cmVjdCB4PSIwIiB5PSIzNTMuMjUiIHdpZHRoPSI3NSIgaGVpZ2h0PSIxNSIgY2xhc3M9InN0NyIvPgorCQk8L2c+CisJCTxnIGlkPSJzaGFwZTU0LTExNiIgdjptSUQ9IjU0IiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDU1Ljg1LC0yLjkyNSkiPgorCQkJPHRpdGxlPtCb0LjRgdGCLjU0PC90aXRsZT4KKwkJCTxkZXNjPkFIQi9BWEkgSS9GPC9kZXNjPgorCQkJPHY6dGV4dEJsb2NrIHY6bWFyZ2lucz0icmVjdCgwLDAsMCwwKSIvPgorCQkJPHY6dGV4dFJlY3QgY3g9IjQ5LjUyNSIgY3k9IjM2Mi44NSIgd2lkdGg9Ijk5LjA1IiBoZWlnaHQ9IjEwLjgiLz4KKwkJCTxyZWN0IHg9IjAiIHk9IjM1Ny40NSIgd2lkdGg9Ijk5LjA1IiBoZWlnaHQ9IjEwLjgiIGNsYXNzPSJzdDciLz4KKwkJCTx0ZXh0IHg9IjI0LjM3IiB5PSIzNjUuODUiIGNsYXNzPSJzdDkiIHY6bGFuZ0lEPSIyMDU3Ij48djpwYXJhZ3JhcGggdjpob3JpekFsaWduPSIxIi8+PHY6dGFiTGlzdC8+QUhCL0FYSSBJL0Y8L3RleHQ+CQk8L2c+CisJCTxnIGlkPSJzaGFwZTU1LTExOSIgdjptSUQ9IjU1IiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEwNS4zNzUsLTIyLjMwNSkiPgorCQkJPHRpdGxlPtCb0LjRgdGCLjU1PC90aXRsZT4KKwkJCTxwYXRoIGQ9Ik0wIDM1Mi4xMSBMMCAzNjguMjUgTDAgMzUyLjExIFoiIGNsYXNzPSJzdDQiLz4KKwkJCTxwYXRoIGQ9Ik0wIDM1Mi4xMSBMMCAzNjguMjUiIGNsYXNzPSJzdDUiLz4KKwkJPC9nPgorCQk8ZyBpZD0ic2hhcGU1Ni0xMjIiIHY6bUlEPSI1NiIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMDIuNzUsLTM4LjQ0NSkiPgorCQkJPHRpdGxlPtCb0LjRgdGCLjU2PC90aXRsZT4KKwkJCTxwYXRoIGQ9Ik0yLjYzIDM2MyBMNS4yNSAzNjguMjUgTDAgMzY4LjI1IEwyLjYzIDM2MyBaIiBjbGFzcz0ic3Q2Ii8+CisJCTwvZz4KKwkJPGcgaWQ9InNoYXBlNTctMTI0IiB2Om1JRD0iNTciIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTAyLjc1LC0xNy4wNTUpIj4KKwkJCTx0aXRsZT7Qm9C40YHRgi41NzwvdGl0bGU+CisJCQk8cGF0aCBkPSJNMi42MyAzNjguMjUgTDAgMzYzIEw1LjI1IDM2MyBMMi42MyAzNjguMjUgWiIgY2xhc3M9InN0NiIvPgorCQk8L2c+CisJCTxnIGlkPSJzaGFwZTU4LTEyNiIgdjptSUQ9IjU4IiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI3MC4zNzUsLTAuMzc1KSI+CisJCQk8dGl0bGU+0JvQuNGB0YIuNTg8L3RpdGxlPgorCQkJPHJlY3QgeD0iMCIgeT0iMzUzLjI1IiB3aWR0aD0iNzUiIGhlaWdodD0iMTUiIGNsYXNzPSJzdDciLz4KKwkJPC9nPgorCQk8ZyBpZD0ic2hhcGU1OS0xMjgiIHY6bUlEPSI1OSIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyNTguMzUsLTIuOTI1KSI+CisJCQk8dGl0bGU+0JvQuNGB0YIuNTk8L3RpdGxlPgorCQkJPGRlc2M+QUhCL0FYSSBJL0Y8L2Rlc2M+CisJCQk8djp0ZXh0QmxvY2sgdjptYXJnaW5zPSJyZWN0KDAsMCwwLDApIi8+CisJCQk8djp0ZXh0UmVjdCBjeD0iNDkuNTI1IiBjeT0iMzYyLjg1IiB3aWR0aD0iOTkuMDYiIGhlaWdodD0iMTAuOCIvPgorCQkJPHJlY3QgeD0iMCIgeT0iMzU3LjQ1IiB3aWR0aD0iOTkuMDUiIGhlaWdodD0iMTAuOCIgY2xhc3M9InN0NyIvPgorCQkJPHRleHQgeD0iMjQuMzciIHk9IjM2NS44NSIgY2xhc3M9InN0OSIgdjpsYW5nSUQ9IjIwNTciPjx2OnBhcmFncmFwaCB2Omhvcml6QWxpZ249IjEiLz48djp0YWJMaXN0Lz5BSEIvQVhJIEkvRjwvdGV4dD4JCTwvZz4KKwkJPGcgaWQ9InNoYXBlNjAtMTMxIiB2Om1JRD0iNjAiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzA3Ljg3NSwtMjIuMzA1KSI+CisJCQk8dGl0bGU+0JvQuNGB0YIuNjA8L3RpdGxlPgorCQkJPHBhdGggZD0iTTAgMzUyLjExIEwwIDM2OC4yNSBMMCAzNTIuMTEgWiIgY2xhc3M9InN0NCIvPgorCQkJPHBhdGggZD0iTTAgMzUyLjExIEwwIDM2OC4yNSIgY2xhc3M9InN0NSIvPgorCQk8L2c+CisJCTxnIGlkPSJzaGFwZTYxLTEzNCIgdjptSUQ9IjYxIiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMwNS4yNSwtMzguNDQ1KSI+CisJCQk8dGl0bGU+0JvQuNGB0YIuNjE8L3RpdGxlPgorCQkJPHBhdGggZD0iTTIuNjMgMzYzIEw1LjI1IDM2OC4yNSBMMCAzNjguMjUgTDIuNjMgMzYzIFoiIGNsYXNzPSJzdDYiLz4KKwkJPC9nPgorCQk8ZyBpZD0ic2hhcGU2Mi0xMzYiIHY6bUlEPSI2MiIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzMDUuMjUsLTE3LjA1NSkiPgorCQkJPHRpdGxlPtCb0LjRgdGCLjYyPC90aXRsZT4KKwkJCTxwYXRoIGQ9Ik0yLjYzIDM2OC4yNSBMMCAzNjMgTDUuMjUgMzYzIEwyLjYzIDM2OC4yNSBaIiBjbGFzcz0ic3Q2Ii8+CisJCTwvZz4KKwkJPGcgaWQ9InNoYXBlNjMtMTM4IiB2Om1JRD0iNjMiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNjcuODc1LC0zNDkuMTI1KSI+CisJCQk8dGl0bGU+0JvQuNGB0YIuNjM8L3RpdGxlPgorCQkJPHJlY3QgeD0iMCIgeT0iMzUzLjI1IiB3aWR0aD0iODIuNSIgaGVpZ2h0PSIxNSIgY2xhc3M9InN0NyIvPgorCQk8L2c+CisJCTxnIGlkPSJzaGFwZTY0LTE0MCIgdjptSUQ9IjY0IiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDgyLjY3NSwtMzUxLjQ1KSI+CisJCQk8dGl0bGU+0JvQuNGB0YIuNjQ8L3RpdGxlPgorCQkJPGRlc2M+U0NSMSBjbHVzdGVyPC9kZXNjPgorCQkJPHY6dGV4dEJsb2NrIHY6bWFyZ2lucz0icmVjdCgwLDAsMCwwKSIvPgorCQkJPHY6dGV4dFJlY3QgY3g9IjQzLjMyNSIgY3k9IjM2Mi44NSIgd2lkdGg9Ijg2LjY1IiBoZWlnaHQ9IjEwLjgiLz4KKwkJCTxyZWN0IHg9IjAiIHk9IjM1Ny40NSIgd2lkdGg9Ijg2LjY1IiBoZWlnaHQ9IjEwLjgiIGNsYXNzPSJzdDciLz4KKwkJCTx0ZXh0IHg9IjAiIHk9IjM2NS44NSIgY2xhc3M9InN0MTAiIHY6bGFuZ0lEPSIyMDU3Ij48djpwYXJhZ3JhcGgvPjx2OnRhYkxpc3QvPlNDUjEgY2x1c3RlcjwvdGV4dD4JCTwvZz4KKwkJPGcgaWQ9InNoYXBlNjUtMTQzIiB2Om1JRD0iNjUiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNzUuMzc1LC0zMjYuNjI1KSI+CisJCQk8dGl0bGU+0JvQuNGB0YIuNjU8L3RpdGxlPgorCQkJPHJlY3QgeD0iMCIgeT0iMzUzLjI1IiB3aWR0aD0iNzUiIGhlaWdodD0iMTUiIGNsYXNzPSJzdDciLz4KKwkJPC9nPgorCQk8ZyBpZD0ic2hhcGU2Ni0xNDUiIHY6bUlEPSI2NiIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg3Ni44NSwtMzI5LjE3NSkiPgorCQkJPHRpdGxlPtCb0LjRgdGCLjY2PC90aXRsZT4KKwkJCTxkZXNjPlNDUjEgY29yZTwvZGVzYz4KKwkJCTx2OnRleHRCbG9jayB2Om1hcmdpbnM9InJlY3QoMCwwLDAsMCkiLz4KKwkJCTx2OnRleHRSZWN0IGN4PSI0MC41MjUiIGN5PSIzNjIuODUiIHdpZHRoPSI4MS4wNiIgaGVpZ2h0PSIxMC44Ii8+CisJCQk8cmVjdCB4PSIwIiB5PSIzNTcuNDUiIHdpZHRoPSI4MS4wNSIgaGVpZ2h0PSIxMC44IiBjbGFzcz0ic3Q3Ii8+CisJCQk8dGV4dCB4PSIwIiB5PSIzNjUuODUiIGNsYXNzPSJzdDEwIiB2OmxhbmdJRD0iMjA1NyI+PHY6cGFyYWdyYXBoLz48djp0YWJMaXN0Lz5TQ1IxIGNvcmU8L3RleHQ+CQk8L2c+CisJCTxnIGlkPSJzaGFwZTY3LTE0OCIgdjptSUQ9IjY3IiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDkwLjM3NSwtMzAwLjM3NSkiPgorCQkJPHRpdGxlPtCb0LjRgdGCLjY3PC90aXRsZT4KKwkJCTxyZWN0IHg9IjAiIHk9IjM1My4yNSIgd2lkdGg9IjMwIiBoZWlnaHQ9IjE1IiBjbGFzcz0ic3Q3Ii8+CisJCTwvZz4KKwkJPGcgaWQ9InNoYXBlNjgtMTUwIiB2Om1JRD0iNjgiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNjQuMTI1LC0zMDEuOTUpIj4KKwkJCTx0aXRsZT7Qm9C40YHRgi42ODwvdGl0bGU+CisJCQk8ZGVzYz5JbnRlcnJ1cHQgQ29udHJvbGxlcjwvZGVzYz4KKwkJCTx2OnRleHRCbG9jayB2Om1hcmdpbnM9InJlY3QoMCwwLDAsMCkiLz4KKwkJCTx2OnRleHRSZWN0IGN4PSI0MC41MjUiIGN5PSIzNjIuODUiIHdpZHRoPSI4MS4wNSIgaGVpZ2h0PSIxMC44Ii8+CisJCQk8cmVjdCB4PSIwIiB5PSIzNTcuNDUiIHdpZHRoPSI4MS4wNSIgaGVpZ2h0PSIxMC44IiBjbGFzcz0ic3Q3Ii8+CisJCQk8dGV4dCB4PSIyMy41IiB5PSIzNjAuMTUiIGNsYXNzPSJzdDgiIHY6bGFuZ0lEPSIxMDMzIj48djpwYXJhZ3JhcGggdjpob3JpekFsaWduPSIxIi8+PHY6dGFiTGlzdC8+SW50ZXJydXB0IDx2OmxmLz48dHNwYW4KKwkJCQkJCXg9IjIxLjY1IiBkeT0iMS4yZW0iIGNsYXNzPSJzdDExIj5Db250cm9sbGVyPC90c3Bhbj48L3RleHQ+CQk8L2c+CisJCTxnIGlkPSJzaGFwZTY5LTE1NCIgdjptSUQ9IjY5IiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE1Ny44NzUsLTMwMC4zNzUpIj4KKwkJCTx0aXRsZT7Qm9C40YHRgi42OTwvdGl0bGU+CisJCQk8cmVjdCB4PSIwIiB5PSIzNTMuMjUiIHdpZHRoPSIzMCIgaGVpZ2h0PSIxNSIgY2xhc3M9InN0NyIvPgorCQk8L2c+CisJCTxnIGlkPSJzaGFwZTcwLTE1NiIgdjptSUQ9IjcwIiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEzMi4zNSwtMzAyLjkyNSkiPgorCQkJPHRpdGxlPtCb0LjRgdGCLjcwPC90aXRsZT4KKwkJCTxkZXNjPlN5c3RlbSBDb250cm9sIFVuaXQ8L2Rlc2M+CisJCQk8djp0ZXh0QmxvY2sgdjptYXJnaW5zPSJyZWN0KDAsMCwwLDApIi8+CisJCQk8djp0ZXh0UmVjdCBjeD0iNDAuNTI1IiBjeT0iMzYyLjg1IiB3aWR0aD0iODEuMDYiIGhlaWdodD0iMTAuOCIvPgorCQkJPHJlY3QgeD0iMCIgeT0iMzU3LjQ1IiB3aWR0aD0iODEuMDUiIGhlaWdodD0iMTAuOCIgY2xhc3M9InN0NyIvPgorCQkJPHRleHQgeD0iMjYuOTkiIHk9IjM2MC4xNSIgY2xhc3M9InN0OCIgdjpsYW5nSUQ9IjEwMzMiPjx2OnBhcmFncmFwaCB2Omhvcml6QWxpZ249IjEiLz48djp0YWJMaXN0Lz5TeXN0ZW0gPHY6bGYvPjx0c3BhbgorCQkJCQkJeD0iMTcuNTkiIGR5PSIxLjJlbSIgY2xhc3M9InN0MTEiPkNvbnRyb2wgVW5pdDwvdHNwYW4+PC90ZXh0PgkJPC9nPgorCQk8ZyBpZD0ic2hhcGU3MS0xNjAiIHY6bUlEPSI3MSIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMjUuMzc1LC0zMDAuMzc1KSI+CisJCQk8dGl0bGU+0JvQuNGB0YIuNzE8L3RpdGxlPgorCQkJPHJlY3QgeD0iMCIgeT0iMzUzLjI1IiB3aWR0aD0iMzAiIGhlaWdodD0iMTUiIGNsYXNzPSJzdDciLz4KKwkJPC9nPgorCQk8ZyBpZD0ic2hhcGU3Mi0xNjIiIHY6bUlEPSI3MiIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMDQuMzUsLTMwMi45MjUpIj4KKwkJCTx0aXRsZT7Qm9C40YHRgi43MjwvdGl0bGU+CisJCQk8ZGVzYz5EZWJ1ZyBNb2R1bGU8L2Rlc2M+CisJCQk8djp0ZXh0QmxvY2sgdjptYXJnaW5zPSJyZWN0KDAsMCwwLDApIi8+CisJCQk8djp0ZXh0UmVjdCBjeD0iMzYuMDI1IiBjeT0iMzYyLjg1IiB3aWR0aD0iNzIuMDYiIGhlaWdodD0iMTAuOCIvPgorCQkJPHJlY3QgeD0iMCIgeT0iMzU3LjQ1IiB3aWR0aD0iNzIuMDUiIGhlaWdodD0iMTAuOCIgY2xhc3M9InN0NyIvPgorCQkJPHRleHQgeD0iMjMuOTYiIHk9IjM2MC4xNSIgY2xhc3M9InN0OCIgdjpsYW5nSUQ9IjEwMzMiPjx2OnBhcmFncmFwaCB2Omhvcml6QWxpZ249IjEiLz48djp0YWJMaXN0Lz5EZWJ1ZyA8djpsZi8+PHRzcGFuCisJCQkJCQl4PSIyMS40NyIgZHk9IjEuMmVtIiBjbGFzcz0ic3QxMSI+TW9kdWxlPC90c3Bhbj48L3RleHQ+CQk8L2c+CisJCTxnIGlkPSJzaGFwZTczLTE2NiIgdjptSUQ9IjczIiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI5Mi44NzUsLTMwMC4zNzUpIj4KKwkJCTx0aXRsZT7Qm9C40YHRgi43MzwvdGl0bGU+CisJCQk8cmVjdCB4PSIwIiB5PSIzNTMuMjUiIHdpZHRoPSIzMCIgaGVpZ2h0PSIxNSIgY2xhc3M9InN0NyIvPgorCQk8L2c+CisJCTxnIGlkPSJzaGFwZTc0LTE2OCIgdjptSUQ9Ijc0IiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI2Ny4zNSwtMzAyLjkyNSkiPgorCQkJPHRpdGxlPtCb0LjRgdGCLjc0PC90aXRsZT4KKwkJCTxkZXNjPlRBUCBDb250cm9sbGVyPC9kZXNjPgorCQkJPHY6dGV4dEJsb2NrIHY6bWFyZ2lucz0icmVjdCgwLDAsMCwwKSIvPgorCQkJPHY6dGV4dFJlY3QgY3g9IjQwLjUyNSIgY3k9IjM2Mi44NSIgd2lkdGg9IjgxLjA2IiBoZWlnaHQ9IjEwLjgiLz4KKwkJCTxyZWN0IHg9IjAiIHk9IjM1Ny40NSIgd2lkdGg9IjgxLjA1IiBoZWlnaHQ9IjEwLjgiIGNsYXNzPSJzdDciLz4KKwkJCTx0ZXh0IHg9IjMzLjE4IiB5PSIzNjAuMTUiIGNsYXNzPSJzdDgiIHY6bGFuZ0lEPSIxMDMzIj48djpwYXJhZ3JhcGggdjpob3JpekFsaWduPSIxIi8+PHY6dGFiTGlzdC8+VEFQPHY6bGYvPjx0c3BhbgorCQkJCQkJeD0iMjEuNjUiIGR5PSIxLjJlbSIgY2xhc3M9InN0MTEiPkNvbnRyb2xsZXI8L3RzcGFuPjwvdGV4dD4JCTwvZz4KKwkJPGcgaWQ9InNoYXBlNzUtMTcyIiB2Om1JRD0iNzUiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOTAuMzc1LC0yNjIuODc1KSI+CisJCQk8dGl0bGU+0JvQuNGB0YIuNzU8L3RpdGxlPgorCQkJPHJlY3QgeD0iMCIgeT0iMzUzLjI1IiB3aWR0aD0iMzAiIGhlaWdodD0iMTUiIGNsYXNzPSJzdDciLz4KKwkJPC9nPgorCQk8ZyBpZD0ic2hhcGU3Ni0xNzQiIHY6bUlEPSI3NiIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg2NC44NSwtMjY1LjQyNSkiPgorCQkJPHRpdGxlPtCb0LjRgdGCLjc2PC90aXRsZT4KKwkJCTxkZXNjPkNvbnRyb2wtU3RhdHVzIFJlZ2lzdGVyIEZpbGU8L2Rlc2M+CisJCQk8djp0ZXh0QmxvY2sgdjptYXJnaW5zPSJyZWN0KDAsMCwwLDApIi8+CisJCQk8djp0ZXh0UmVjdCBjeD0iNDAuNTI1IiBjeT0iMzYyLjg1IiB3aWR0aD0iODEuMDUiIGhlaWdodD0iMTAuOCIvPgorCQkJPHJlY3QgeD0iMCIgeT0iMzU3LjQ1IiB3aWR0aD0iODEuMDUiIGhlaWdodD0iMTAuOCIgY2xhc3M9InN0NyIvPgorCQkJPHRleHQgeD0iMTMuNTciIHk9IjM2MC4xNSIgY2xhc3M9InN0OCIgdjpsYW5nSUQ9IjEwMzMiPjx2OnBhcmFncmFwaCB2Omhvcml6QWxpZ249IjEiLz48djp0YWJMaXN0Lz5Db250cm9sLVN0YXR1cyA8djpsZi8+PHRzcGFuCisJCQkJCQl4PSIxNy43MSIgZHk9IjEuMmVtIiBjbGFzcz0ic3QxMSI+UmVnaXN0ZXIgRmlsZTwvdHNwYW4+PC90ZXh0PgkJPC9nPgorCQk8ZyBpZD0ic2hhcGU3Ny0xNzgiIHY6bUlEPSI3NyIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxOTEuNjI1LC0xNDIuMTI1KSI+CisJCQk8dGl0bGU+0JvQuNGB0YIuNzc8L3RpdGxlPgorCQkJPHJlY3QgeD0iMCIgeT0iMzUzLjI1IiB3aWR0aD0iMzAiIGhlaWdodD0iMTUiIGNsYXNzPSJzdDciLz4KKwkJPC9nPgorCQk8ZyBpZD0ic2hhcGU3OC0xODAiIHY6bUlEPSI3OCIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjIsLTE0NCkiPgorCQkJPHRpdGxlPtCb0LjRgdGCLjc4PC90aXRsZT4KKwkJCTxkZXNjPlRpZ2h0bHktQ291cGxlZCBNZW1vcnk8L2Rlc2M+CisJCQk8djp0ZXh0QmxvY2sgdjptYXJnaW5zPSJyZWN0KDAsMCwwLDApIi8+CisJCQk8djp0ZXh0UmVjdCBjeD0iNDUiIGN5PSIzNjIuODUiIHdpZHRoPSI5MCIgaGVpZ2h0PSIxMC44Ii8+CisJCQk8cmVjdCB4PSIwIiB5PSIzNTcuNDUiIHdpZHRoPSI5MCIgaGVpZ2h0PSIxMC44IiBjbGFzcz0ic3Q3Ii8+CisJCQk8dGV4dCB4PSIxMi4yNSIgeT0iMzU5Ljg1IiBjbGFzcz0ic3Q5IiB2OmxhbmdJRD0iMTAzMyI+PHY6cGFyYWdyYXBoIHY6aG9yaXpBbGlnbj0iMSIvPjx2OnRhYkxpc3QvPlRpZ2h0bHktQ291cGxlZCA8dHNwYW4KKwkJCQkJCXg9IjI3LjIxIiBkeT0iMS4yZW0iIGNsYXNzPSJzdDExIj5NZW1vcnk8L3RzcGFuPjwvdGV4dD4JCTwvZz4KKwkJPGcgaWQ9InNoYXBlNzktMTg0IiB2Om1JRD0iNzkiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjE0LjEyNSwtOTMuMzc1KSI+CisJCQk8dGl0bGU+0JvQuNGB0YIuNzk8L3RpdGxlPgorCQkJPHJlY3QgeD0iMCIgeT0iMzUzLjI1IiB3aWR0aD0iMzAiIGhlaWdodD0iMTUiIGNsYXNzPSJzdDciLz4KKwkJPC9nPgorCQk8ZyBpZD0ic2hhcGU4MC0xODYiIHY6bUlEPSI4MCIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMDYuNiwtOTUuOTI1KSI+CisJCQk8dGl0bGU+0JvQuNGB0YIuODA8L3RpdGxlPgorCQkJPGRlc2M+VGltZXI8L2Rlc2M+CisJCQk8djp0ZXh0QmxvY2sgdjptYXJnaW5zPSJyZWN0KDAsMCwwLDApIi8+CisJCQk8djp0ZXh0UmVjdCBjeD0iMjIuNTI1IiBjeT0iMzYyLjg1IiB3aWR0aD0iNDUuMDUiIGhlaWdodD0iMTAuOCIvPgorCQkJPHJlY3QgeD0iMCIgeT0iMzU3LjQ1IiB3aWR0aD0iNDUuMDUiIGhlaWdodD0iMTAuOCIgY2xhc3M9InN0NyIvPgorCQkJPHRleHQgeD0iMTAuNDYiIHk9IjM2NS44NSIgY2xhc3M9InN0OSIgdjpsYW5nSUQ9IjIwNTciPjx2OnBhcmFncmFwaCB2Omhvcml6QWxpZ249IjEiLz48djp0YWJMaXN0Lz5UaW1lcjwvdGV4dD4JCTwvZz4KKwkJPGcgaWQ9InNoYXBlODEtMTg5IiB2Om1JRD0iODEiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTU3Ljg3NSwtMjI1LjM3NSkiPgorCQkJPHRpdGxlPtCb0LjRgdGCLjgxPC90aXRsZT4KKwkJCTxyZWN0IHg9IjAiIHk9IjM1My4yNSIgd2lkdGg9IjMwIiBoZWlnaHQ9IjE1IiBjbGFzcz0ic3Q3Ii8+CisJCTwvZz4KKwkJPGcgaWQ9InNoYXBlODItMTkxIiB2Om1JRD0iODIiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTMyLjM1LC0yMjcuOTI1KSI+CisJCQk8dGl0bGU+0JvQuNGB0YIuODI8L3RpdGxlPgorCQkJPGRlc2M+SW5zdHJ1Y3Rpb24gRGVjb2RlIFVuaXQ8L2Rlc2M+CisJCQk8djp0ZXh0QmxvY2sgdjptYXJnaW5zPSJyZWN0KDAsMCwwLDApIi8+CisJCQk8djp0ZXh0UmVjdCBjeD0iNDAuNTI1IiBjeT0iMzYyLjg1IiB3aWR0aD0iODEuMDYiIGhlaWdodD0iMTAuOCIvPgorCQkJPHJlY3QgeD0iMCIgeT0iMzU3LjQ1IiB3aWR0aD0iODEuMDUiIGhlaWdodD0iMTAuOCIgY2xhc3M9InN0NyIvPgorCQkJPHRleHQgeD0iMjAuMTYiIHk9IjM2MC4xNSIgY2xhc3M9InN0OCIgdjpsYW5nSUQ9IjEwMzMiPjx2OnBhcmFncmFwaCB2Omhvcml6QWxpZ249IjEiLz48djp0YWJMaXN0Lz5JbnN0cnVjdGlvbiA8djpsZi8+PHRzcGFuCisJCQkJCQl4PSIxNy40MSIgZHk9IjEuMmVtIiBjbGFzcz0ic3QxMSI+RGVjb2RlIFVuaXQ8L3RzcGFuPjwvdGV4dD4JCTwvZz4KKwkJPGcgaWQ9InNoYXBlODMtMTk1IiB2Om1JRD0iODMiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjI1LjM3NSwtMjI1LjM3NSkiPgorCQkJPHRpdGxlPtCb0LjRgdGCLjgzPC90aXRsZT4KKwkJCTxyZWN0IHg9IjAiIHk9IjM1My4yNSIgd2lkdGg9IjMwIiBoZWlnaHQ9IjE1IiBjbGFzcz0ic3Q3Ii8+CisJCTwvZz4KKwkJPGcgaWQ9InNoYXBlODQtMTk3IiB2Om1JRD0iODQiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTk5Ljg1LC0yMjcuOTI1KSI+CisJCQk8dGl0bGU+0JvQuNGB0YIuODQ8L3RpdGxlPgorCQkJPGRlc2M+RXhlY3V0aW9uIFVuaXQ8L2Rlc2M+CisJCQk8djp0ZXh0QmxvY2sgdjptYXJnaW5zPSJyZWN0KDAsMCwwLDApIi8+CisJCQk8djp0ZXh0UmVjdCBjeD0iNDAuNTI1IiBjeT0iMzYyLjg1IiB3aWR0aD0iODEuMDYiIGhlaWdodD0iMTAuOCIvPgorCQkJPHJlY3QgeD0iMCIgeT0iMzU3LjQ1IiB3aWR0aD0iODEuMDUiIGhlaWdodD0iMTAuOCIgY2xhc3M9InN0NyIvPgorCQkJPHRleHQgeD0iMjIuMiIgeT0iMzYwLjE1IiBjbGFzcz0ic3Q4IiB2OmxhbmdJRD0iMTAzMyI+PHY6cGFyYWdyYXBoIHY6aG9yaXpBbGlnbj0iMSIvPjx2OnRhYkxpc3QvPkV4ZWN1dGlvbiA8djpsZi8+PHRzcGFuCisJCQkJCQl4PSIzMi41MSIgZHk9IjEuMmVtIiBjbGFzcz0ic3QxMSI+VW5pdDwvdHNwYW4+PC90ZXh0PgkJPC9nPgorCQk8ZyBpZD0ic2hhcGU4NS0yMDEiIHY6bUlEPSI4NSIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyOTIuODc1LC0yMjUuMzc1KSI+CisJCQk8dGl0bGU+0JvQuNGB0YIuODU8L3RpdGxlPgorCQkJPHJlY3QgeD0iMCIgeT0iMzUzLjI1IiB3aWR0aD0iMzAiIGhlaWdodD0iMTUiIGNsYXNzPSJzdDciLz4KKwkJPC9nPgorCQk8ZyBpZD0ic2hhcGU4Ni0yMDMiIHY6bUlEPSI4NiIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyNjcuMzUsLTIyNy45MjUpIj4KKwkJCTx0aXRsZT7Qm9C40YHRgi44NjwvdGl0bGU+CisJCQk8ZGVzYz5Mb2FkLVN0b3JlIFVuaXQ8L2Rlc2M+CisJCQk8djp0ZXh0QmxvY2sgdjptYXJnaW5zPSJyZWN0KDAsMCwwLDApIi8+CisJCQk8djp0ZXh0UmVjdCBjeD0iNDAuNTI1IiBjeT0iMzYyLjg1IiB3aWR0aD0iODEuMDYiIGhlaWdodD0iMTAuOCIvPgorCQkJPHJlY3QgeD0iMCIgeT0iMzU3LjQ1IiB3aWR0aD0iODEuMDUiIGhlaWdodD0iMTAuOCIgY2xhc3M9InN0NyIvPgorCQkJPHRleHQgeD0iMjAuMjIiIHk9IjM2MC4xNSIgY2xhc3M9InN0OCIgdjpsYW5nSUQ9IjEwMzMiPjx2OnBhcmFncmFwaCB2Omhvcml6QWxpZ249IjEiLz48djp0YWJMaXN0Lz5Mb2FkLVN0b3JlIDx2OmxmLz48dHNwYW4KKwkJCQkJCXg9IjMyLjUxIiBkeT0iMS4yZW0iIGNsYXNzPSJzdDExIj5Vbml0PC90c3Bhbj48L3RleHQ+CQk8L2c+CisJCTxnIGlkPSJzaGFwZTg3LTIwNyIgdjptSUQ9Ijg3IiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIyNS4zNzUsLTI2Mi44NzUpIj4KKwkJCTx0aXRsZT7Qm9C40YHRgi44NzwvdGl0bGU+CisJCQk8cmVjdCB4PSIwIiB5PSIzNTMuMjUiIHdpZHRoPSIzMCIgaGVpZ2h0PSIxNSIgY2xhc3M9InN0NyIvPgorCQk8L2c+CisJCTxnIGlkPSJzaGFwZTg4LTIwOSIgdjptSUQ9Ijg4IiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE5OS44NSwtMjY1LjQyNSkiPgorCQkJPHRpdGxlPtCb0LjRgdGCLjg4PC90aXRsZT4KKwkJCTxkZXNjPlRyaWdnZXIgRGVidWcgVW5pdDwvZGVzYz4KKwkJCTx2OnRleHRCbG9jayB2Om1hcmdpbnM9InJlY3QoMCwwLDAsMCkiLz4KKwkJCTx2OnRleHRSZWN0IGN4PSI0MC41MjUiIGN5PSIzNjIuODUiIHdpZHRoPSI4MS4wNiIgaGVpZ2h0PSIxMC44Ii8+CisJCQk8cmVjdCB4PSIwIiB5PSIzNTcuNDUiIHdpZHRoPSI4MS4wNSIgaGVpZ2h0PSIxMC44IiBjbGFzcz0ic3Q3Ii8+CisJCQk8dGV4dCB4PSIyNy40NiIgeT0iMzYwLjE1IiBjbGFzcz0ic3Q4IiB2OmxhbmdJRD0iMTAzMyI+PHY6cGFyYWdyYXBoIHY6aG9yaXpBbGlnbj0iMSIvPjx2OnRhYkxpc3QvPlRyaWdnZXIgPHY6bGYvPjx0c3BhbgorCQkJCQkJeD0iMTkuNDIiIGR5PSIxLjJlbSIgY2xhc3M9InN0MTEiPkRlYnVnIFVuaXQ8L3RzcGFuPjwvdGV4dD4JCTwvZz4KKwkJPGcgaWQ9InNoYXBlODktMjEzIiB2Om1JRD0iODkiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOTAuMzc1LC02Ny44NzUpIj4KKwkJCTx0aXRsZT7Qm9C40YHRgi44OTwvdGl0bGU+CisJCQk8cmVjdCB4PSIwIiB5PSIzNjAuNzUiIHdpZHRoPSIzMCIgaGVpZ2h0PSI3LjUiIGNsYXNzPSJzdDciLz4KKwkJPC9nPgorCQk8ZyBpZD0ic2hhcGU5MC0yMTUiIHY6bUlEPSI5MCIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg4Ny4zNSwtNjYuNjc1KSI+CisJCQk8dGl0bGU+0JvQuNGB0YIuOTA8L3RpdGxlPgorCQkJPGRlc2M+SU1FTTwvZGVzYz4KKwkJCTx2OnRleHRCbG9jayB2Om1hcmdpbnM9InJlY3QoMCwwLDAsMCkiLz4KKwkJCTx2OnRleHRSZWN0IGN4PSIxOC4wMjUiIGN5PSIzNjIuODUiIHdpZHRoPSIzNi4wNSIgaGVpZ2h0PSIxMC44Ii8+CisJCQk8cmVjdCB4PSIwIiB5PSIzNTcuNDUiIHdpZHRoPSIzNi4wNSIgaGVpZ2h0PSIxMC44IiBjbGFzcz0ic3Q3Ii8+CisJCQk8dGV4dCB4PSI1LjUxIiB5PSIzNjUuODUiIGNsYXNzPSJzdDkiIHY6bGFuZ0lEPSIyMDU3Ij48djpwYXJhZ3JhcGggdjpob3JpekFsaWduPSIxIi8+PHY6dGFiTGlzdC8+SU1FTTwvdGV4dD4JCTwvZz4KKwkJPGcgaWQ9InNoYXBlOTEtMjE4IiB2Om1JRD0iOTEiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOTAuMzc1LC01OC44NzUpIj4KKwkJCTx0aXRsZT7Qm9C40YHRgi45MTwvdGl0bGU+CisJCQk8cmVjdCB4PSIwIiB5PSIzNjAuNzUiIHdpZHRoPSIzMCIgaGVpZ2h0PSI3LjUiIGNsYXNzPSJzdDciLz4KKwkJPC9nPgorCQk8ZyBpZD0ic2hhcGU5Mi0yMjAiIHY6bUlEPSI5MiIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg3My44NSwtNTcuNjc1KSI+CisJCQk8dGl0bGU+0JvQuNGB0YIuOTI8L3RpdGxlPgorCQkJPGRlc2M+QUhCL0FYSTwvZGVzYz4KKwkJCTx2OnRleHRCbG9jayB2Om1hcmdpbnM9InJlY3QoMCwwLDAsMCkiLz4KKwkJCTx2OnRleHRSZWN0IGN4PSIzMS41MjUiIGN5PSIzNjIuODUiIHdpZHRoPSI2My4wNSIgaGVpZ2h0PSIxMC44Ii8+CisJCQk8cmVjdCB4PSIwIiB5PSIzNTcuNDUiIHdpZHRoPSI2My4wNSIgaGVpZ2h0PSIxMC44IiBjbGFzcz0ic3Q3Ii8+CisJCQk8dGV4dCB4PSIxMy4yNyIgeT0iMzY1Ljg1IiBjbGFzcz0ic3Q5IiB2OmxhbmdJRD0iMjA1NyI+PHY6cGFyYWdyYXBoIHY6aG9yaXpBbGlnbj0iMSIvPjx2OnRhYkxpc3QvPkFIQi9BWEk8L3RleHQ+CQk8L2c+CisJCTxnIGlkPSJzaGFwZTkzLTIyMyIgdjptSUQ9IjkzIiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDkwLjM3NSwtNDkuODc1KSI+CisJCQk8dGl0bGU+0JvQuNGB0YIuOTM8L3RpdGxlPgorCQkJPHJlY3QgeD0iMCIgeT0iMzYwLjc1IiB3aWR0aD0iMzAiIGhlaWdodD0iNy41IiBjbGFzcz0ic3Q3Ii8+CisJCTwvZz4KKwkJPGcgaWQ9InNoYXBlOTQtMjI1IiB2Om1JRD0iOTQiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNzguMzUsLTQ4LjY3NSkiPgorCQkJPHRpdGxlPtCb0LjRgdGCLjk0PC90aXRsZT4KKwkJCTxkZXNjPmJyaWRnZTwvZGVzYz4KKwkJCTx2OnRleHRCbG9jayB2Om1hcmdpbnM9InJlY3QoMCwwLDAsMCkiLz4KKwkJCTx2OnRleHRSZWN0IGN4PSIyNy4wMjUiIGN5PSIzNjIuODUiIHdpZHRoPSI1NC4wNSIgaGVpZ2h0PSIxMC44Ii8+CisJCQk8cmVjdCB4PSIwIiB5PSIzNTcuNDUiIHdpZHRoPSI1NC4wNSIgaGVpZ2h0PSIxMC44IiBjbGFzcz0ic3Q3Ii8+CisJCQk8dGV4dCB4PSIxMy43NyIgeT0iMzY1Ljg1IiBjbGFzcz0ic3Q5IiB2OmxhbmdJRD0iMjA1NyI+PHY6cGFyYWdyYXBoIHY6aG9yaXpBbGlnbj0iMSIvPjx2OnRhYkxpc3QvPmJyaWRnZTwvdGV4dD4JCTwvZz4KKwkJPGcgaWQ9InNoYXBlOTUtMjI4IiB2Om1JRD0iOTUiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjkyLjg3NSwtNjcuODc1KSI+CisJCQk8dGl0bGU+0JvQuNGB0YIuOTU8L3RpdGxlPgorCQkJPHJlY3QgeD0iMCIgeT0iMzYwLjc1IiB3aWR0aD0iMzAiIGhlaWdodD0iNy41IiBjbGFzcz0ic3Q3Ii8+CisJCTwvZz4KKwkJPGcgaWQ9InNoYXBlOTYtMjMwIiB2Om1JRD0iOTYiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjg5Ljg1LC02Ni42NzUpIj4KKwkJCTx0aXRsZT7Qm9C40YHRgi45NjwvdGl0bGU+CisJCQk8ZGVzYz5ETUVNPC9kZXNjPgorCQkJPHY6dGV4dEJsb2NrIHY6bWFyZ2lucz0icmVjdCgwLDAsMCwwKSIvPgorCQkJPHY6dGV4dFJlY3QgY3g9IjE4LjAyNSIgY3k9IjM2Mi44NSIgd2lkdGg9IjM2LjA1IiBoZWlnaHQ9IjEwLjgiLz4KKwkJCTxyZWN0IHg9IjAiIHk9IjM1Ny40NSIgd2lkdGg9IjM2LjA1IiBoZWlnaHQ9IjEwLjgiIGNsYXNzPSJzdDciLz4KKwkJCTx0ZXh0IHg9IjMuNjkiIHk9IjM2NS44NSIgY2xhc3M9InN0OSIgdjpsYW5nSUQ9IjIwNTciPjx2OnBhcmFncmFwaCB2Omhvcml6QWxpZ249IjEiLz48djp0YWJMaXN0Lz5ETUVNPC90ZXh0PgkJPC9nPgorCQk8ZyBpZD0ic2hhcGU5Ny0yMzMiIHY6bUlEPSI5NyIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyOTIuODc1LC01OC44NzUpIj4KKwkJCTx0aXRsZT7Qm9C40YHRgi45NzwvdGl0bGU+CisJCQk8cmVjdCB4PSIwIiB5PSIzNjAuNzUiIHdpZHRoPSIzMCIgaGVpZ2h0PSI3LjUiIGNsYXNzPSJzdDciLz4KKwkJPC9nPgorCQk8ZyBpZD0ic2hhcGU5OC0yMzUiIHY6bUlEPSI5OCIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyNzYuMzUsLTU3LjY3NSkiPgorCQkJPHRpdGxlPtCb0LjRgdGCLjk4PC90aXRsZT4KKwkJCTxkZXNjPkFIQi9BWEk8L2Rlc2M+CisJCQk8djp0ZXh0QmxvY2sgdjptYXJnaW5zPSJyZWN0KDAsMCwwLDApIi8+CisJCQk8djp0ZXh0UmVjdCBjeD0iMzEuNTI1IiBjeT0iMzYyLjg1IiB3aWR0aD0iNjMuMDUiIGhlaWdodD0iMTAuOCIvPgorCQkJPHJlY3QgeD0iMCIgeT0iMzU3LjQ1IiB3aWR0aD0iNjMuMDUiIGhlaWdodD0iMTAuOCIgY2xhc3M9InN0NyIvPgorCQkJPHRleHQgeD0iMTMuMjciIHk9IjM2NS44NSIgY2xhc3M9InN0OSIgdjpsYW5nSUQ9IjIwNTciPjx2OnBhcmFncmFwaCB2Omhvcml6QWxpZ249IjEiLz48djp0YWJMaXN0Lz5BSEIvQVhJPC90ZXh0PgkJPC9nPgorCQk8ZyBpZD0ic2hhcGU5OS0yMzgiIHY6bUlEPSI5OSIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyOTIuODc1LC00OS44NzUpIj4KKwkJCTx0aXRsZT7Qm9C40YHRgi45OTwvdGl0bGU+CisJCQk8cmVjdCB4PSIwIiB5PSIzNjAuNzUiIHdpZHRoPSIzMCIgaGVpZ2h0PSI3LjUiIGNsYXNzPSJzdDciLz4KKwkJPC9nPgorCQk8ZyBpZD0ic2hhcGUxMDAtMjQwIiB2Om1JRD0iMTAwIiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI4MC44NSwtNDguNjc1KSI+CisJCQk8dGl0bGU+0JvQuNGB0YIuMTAwPC90aXRsZT4KKwkJCTxkZXNjPmJyaWRnZTwvZGVzYz4KKwkJCTx2OnRleHRCbG9jayB2Om1hcmdpbnM9InJlY3QoMCwwLDAsMCkiLz4KKwkJCTx2OnRleHRSZWN0IGN4PSIyNy4wMjUiIGN5PSIzNjIuODUiIHdpZHRoPSI1NC4wNSIgaGVpZ2h0PSIxMC44Ii8+CisJCQk8cmVjdCB4PSIwIiB5PSIzNTcuNDUiIHdpZHRoPSI1NC4wNSIgaGVpZ2h0PSIxMC44IiBjbGFzcz0ic3Q3Ii8+CisJCQk8dGV4dCB4PSIxMy43NyIgeT0iMzY1Ljg1IiBjbGFzcz0ic3Q5IiB2OmxhbmdJRD0iMjA1NyI+PHY6cGFyYWdyYXBoIHY6aG9yaXpBbGlnbj0iMSIvPjx2OnRhYkxpc3QvPmJyaWRnZTwvdGV4dD4JCTwvZz4KKwkJPGcgaWQ9InNoYXBlMTAxLTI0MyIgdjptSUQ9IjEwMSIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg5MC4zNzUsLTE4MC4zNzUpIj4KKwkJCTx0aXRsZT7Qm9C40YHRgi4xMDE8L3RpdGxlPgorCQkJPHJlY3QgeD0iMCIgeT0iMzYwLjc1IiB3aWR0aD0iMzAiIGhlaWdodD0iNy41IiBjbGFzcz0ic3Q3Ii8+CisJCTwvZz4KKwkJPGcgaWQ9InNoYXBlMTAyLTI0NSIgdjptSUQ9IjEwMiIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg4Ny4zNSwtMTc5LjE3NSkiPgorCQkJPHRpdGxlPtCb0LjRgdGCLjEwMjwvdGl0bGU+CisJCQk8ZGVzYz5JTUVNPC9kZXNjPgorCQkJPHY6dGV4dEJsb2NrIHY6bWFyZ2lucz0icmVjdCgwLDAsMCwwKSIvPgorCQkJPHY6dGV4dFJlY3QgY3g9IjE4LjAyNSIgY3k9IjM2Mi44NSIgd2lkdGg9IjM2LjA1IiBoZWlnaHQ9IjEwLjgiLz4KKwkJCTxyZWN0IHg9IjAiIHk9IjM1Ny40NSIgd2lkdGg9IjM2LjA1IiBoZWlnaHQ9IjEwLjgiIGNsYXNzPSJzdDciLz4KKwkJCTx0ZXh0IHg9IjUuNTEiIHk9IjM2NS44NSIgY2xhc3M9InN0OSIgdjpsYW5nSUQ9IjIwNTciPjx2OnBhcmFncmFwaCB2Omhvcml6QWxpZ249IjEiLz48djp0YWJMaXN0Lz5JTUVNPC90ZXh0PgkJPC9nPgorCQk8ZyBpZD0ic2hhcGUxMDMtMjQ4IiB2Om1JRD0iMTAzIiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDkwLjM3NSwtMTcxLjM3NSkiPgorCQkJPHRpdGxlPtCb0LjRgdGCLjEwMzwvdGl0bGU+CisJCQk8cmVjdCB4PSIwIiB5PSIzNjAuNzUiIHdpZHRoPSIzMCIgaGVpZ2h0PSI3LjUiIGNsYXNzPSJzdDciLz4KKwkJPC9nPgorCQk8ZyBpZD0ic2hhcGUxMDQtMjUwIiB2Om1JRD0iMTA0IiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDc4LjM1LC0xNzAuMTc1KSI+CisJCQk8dGl0bGU+0JvQuNGB0YIuMTA0PC90aXRsZT4KKwkJCTxkZXNjPnJvdXRlcjwvZGVzYz4KKwkJCTx2OnRleHRCbG9jayB2Om1hcmdpbnM9InJlY3QoMCwwLDAsMCkiLz4KKwkJCTx2OnRleHRSZWN0IGN4PSIyNy4wMjUiIGN5PSIzNjIuODUiIHdpZHRoPSI1NC4wNSIgaGVpZ2h0PSIxMC44Ii8+CisJCQk8cmVjdCB4PSIwIiB5PSIzNTcuNDUiIHdpZHRoPSI1NC4wNSIgaGVpZ2h0PSIxMC44IiBjbGFzcz0ic3Q3Ii8+CisJCQk8dGV4dCB4PSIxMy44NSIgeT0iMzY1Ljg1IiBjbGFzcz0ic3Q5IiB2OmxhbmdJRD0iMjA1NyI+PHY6cGFyYWdyYXBoIHY6aG9yaXpBbGlnbj0iMSIvPjx2OnRhYkxpc3QvPnJvdXRlcjwvdGV4dD4JCTwvZz4KKwkJPGcgaWQ9InNoYXBlMTA1LTI1MyIgdjptSUQ9IjEwNSIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyOTIuODc1LC0xODAuMzc1KSI+CisJCQk8dGl0bGU+0JvQuNGB0YIuMTA1PC90aXRsZT4KKwkJCTxyZWN0IHg9IjAiIHk9IjM2MC43NSIgd2lkdGg9IjMwIiBoZWlnaHQ9IjcuNSIgY2xhc3M9InN0NyIvPgorCQk8L2c+CisJCTxnIGlkPSJzaGFwZTEwNi0yNTUiIHY6bUlEPSIxMDYiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjg5Ljg1LC0xNzkuMTc1KSI+CisJCQk8dGl0bGU+0JvQuNGB0YIuMTA2PC90aXRsZT4KKwkJCTxkZXNjPkRNRU08L2Rlc2M+CisJCQk8djp0ZXh0QmxvY2sgdjptYXJnaW5zPSJyZWN0KDAsMCwwLDApIi8+CisJCQk8djp0ZXh0UmVjdCBjeD0iMTguMDI1IiBjeT0iMzYyLjg1IiB3aWR0aD0iMzYuMDUiIGhlaWdodD0iMTAuOCIvPgorCQkJPHJlY3QgeD0iMCIgeT0iMzU3LjQ1IiB3aWR0aD0iMzYuMDUiIGhlaWdodD0iMTAuOCIgY2xhc3M9InN0NyIvPgorCQkJPHRleHQgeD0iMy42OSIgeT0iMzY1Ljg1IiBjbGFzcz0ic3Q5IiB2OmxhbmdJRD0iMjA1NyI+PHY6cGFyYWdyYXBoIHY6aG9yaXpBbGlnbj0iMSIvPjx2OnRhYkxpc3QvPkRNRU08L3RleHQ+CQk8L2c+CisJCTxnIGlkPSJzaGFwZTEwNy0yNTgiIHY6bUlEPSIxMDciIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjkyLjg3NSwtMTcxLjM3NSkiPgorCQkJPHRpdGxlPtCb0LjRgdGCLjEwNzwvdGl0bGU+CisJCQk8cmVjdCB4PSIwIiB5PSIzNjAuNzUiIHdpZHRoPSIzMCIgaGVpZ2h0PSI3LjUiIGNsYXNzPSJzdDciLz4KKwkJPC9nPgorCQk8ZyBpZD0ic2hhcGUxMDgtMjYwIiB2Om1JRD0iMTA4IiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI4MC44NSwtMTcwLjE3NSkiPgorCQkJPHRpdGxlPtCb0LjRgdGCLjEwODwvdGl0bGU+CisJCQk8ZGVzYz5yb3V0ZXI8L2Rlc2M+CisJCQk8djp0ZXh0QmxvY2sgdjptYXJnaW5zPSJyZWN0KDAsMCwwLDApIi8+CisJCQk8djp0ZXh0UmVjdCBjeD0iMjcuMDI1IiBjeT0iMzYyLjg1IiB3aWR0aD0iNTQuMDUiIGhlaWdodD0iMTAuOCIvPgorCQkJPHJlY3QgeD0iMCIgeT0iMzU3LjQ1IiB3aWR0aD0iNTQuMDUiIGhlaWdodD0iMTAuOCIgY2xhc3M9InN0NyIvPgorCQkJPHRleHQgeD0iMTMuODUiIHk9IjM2NS44NSIgY2xhc3M9InN0OSIgdjpsYW5nSUQ9IjIwNTciPjx2OnBhcmFncmFwaCB2Omhvcml6QWxpZ249IjEiLz48djp0YWJMaXN0Lz5yb3V0ZXI8L3RleHQ+CQk8L2c+CisJCTxnIGlkPSJzaGFwZTEwOS0yNjMiIHY6bUlEPSIxMDkiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTU3Ljg3NSwtMjYyLjg3NSkiPgorCQkJPHRpdGxlPtCb0LjRgdGCLjEwOTwvdGl0bGU+CisJCQk8cmVjdCB4PSIwIiB5PSIzNTMuMjUiIHdpZHRoPSIzMCIgaGVpZ2h0PSIxNSIgY2xhc3M9InN0NyIvPgorCQk8L2c+CisJCTxnIGlkPSJzaGFwZTExMC0yNjUiIHY6bUlEPSIxMTAiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTMyLjM1LC0yNjUuNDI1KSI+CisJCQk8dGl0bGU+0JvQuNGB0YIuMTEwPC90aXRsZT4KKwkJCTxkZXNjPk11bHRpLVBvcnQgUmVnaXN0ZXIgRmlsZTwvZGVzYz4KKwkJCTx2OnRleHRCbG9jayB2Om1hcmdpbnM9InJlY3QoMCwwLDAsMCkiLz4KKwkJCTx2OnRleHRSZWN0IGN4PSI0MC41MjUiIGN5PSIzNjIuODUiIHdpZHRoPSI4MS4wNiIgaGVpZ2h0PSIxMC44Ii8+CisJCQk8cmVjdCB4PSIwIiB5PSIzNTcuNDUiIHdpZHRoPSI4MS4wNSIgaGVpZ2h0PSIxMC44IiBjbGFzcz0ic3Q3Ii8+CisJCQk8dGV4dCB4PSIyMS4wNiIgeT0iMzYwLjE1IiBjbGFzcz0ic3Q4IiB2OmxhbmdJRD0iMTAzMyI+PHY6cGFyYWdyYXBoIHY6aG9yaXpBbGlnbj0iMSIvPjx2OnRhYkxpc3QvPk11bHRpLVBvcnQgPHY6bGYvPjx0c3BhbgorCQkJCQkJeD0iMTcuNzEiIGR5PSIxLjJlbSIgY2xhc3M9InN0MTEiPlJlZ2lzdGVyIEZpbGU8L3RzcGFuPjwvdGV4dD4JCTwvZz4KKwkJPGcgaWQ9InNoYXBlMTExLTI2OSIgdjptSUQ9IjExMSIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyOTIuODc1LC0yNjIuODc1KSI+CisJCQk8dGl0bGU+0JvQuNGB0YIuMTExPC90aXRsZT4KKwkJCTxyZWN0IHg9IjAiIHk9IjM1My4yNSIgd2lkdGg9IjMwIiBoZWlnaHQ9IjE1IiBjbGFzcz0ic3Q3Ii8+CisJCTwvZz4KKwkJPGcgaWQ9InNoYXBlMTEyLTI3MSIgdjptSUQ9IjExMiIgdjpncm91cENvbnRleHQ9InNoYXBlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyNjcuMzUsLTI2NS40MjUpIj4KKwkJCTx0aXRsZT7Qm9C40YHRgi4xMTI8L3RpdGxlPgorCQkJPGRlc2M+SGFydCBEZWJ1ZyBVbml0PC9kZXNjPgorCQkJPHY6dGV4dEJsb2NrIHY6bWFyZ2lucz0icmVjdCgwLDAsMCwwKSIvPgorCQkJPHY6dGV4dFJlY3QgY3g9IjQwLjUyNSIgY3k9IjM2Mi44NSIgd2lkdGg9IjgxLjA2IiBoZWlnaHQ9IjEwLjgiLz4KKwkJCTxyZWN0IHg9IjAiIHk9IjM1Ny40NSIgd2lkdGg9IjgxLjA1IiBoZWlnaHQ9IjEwLjgiIGNsYXNzPSJzdDciLz4KKwkJCTx0ZXh0IHg9IjMyLjMxIiB5PSIzNjAuMTUiIGNsYXNzPSJzdDgiIHY6bGFuZ0lEPSIxMDMzIj48djpwYXJhZ3JhcGggdjpob3JpekFsaWduPSIxIi8+PHY6dGFiTGlzdC8+SGFydCA8djpsZi8+PHRzcGFuCisJCQkJCQl4PSIxOS40MiIgZHk9IjEuMmVtIiBjbGFzcz0ic3QxMSI+RGVidWcgVW5pdDwvdHNwYW4+PC90ZXh0PgkJPC9nPgorCQk8ZyBpZD0ic2hhcGUxMTMtMjc1IiB2Om1JRD0iMTEzIiB2Omdyb3VwQ29udGV4dD0ic2hhcGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDkwLjM3NSwtMjI1LjM3NSkiPgorCQkJPHRpdGxlPtCb0LjRgdGCLjExMzwvdGl0bGU+CisJCQk8cmVjdCB4PSIwIiB5PSIzNTMuMjUiIHdpZHRoPSIzMCIgaGVpZ2h0PSIxNSIgY2xhc3M9InN0NyIvPgorCQk8L2c+CisJCTxnIGlkPSJzaGFwZTExNC0yNzciIHY6bUlEPSIxMTQiIHY6Z3JvdXBDb250ZXh0PSJzaGFwZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNjQuODUsLTIyNy45MjUpIj4KKwkJCTx0aXRsZT7Qm9C40YHRgi4xMTQ8L3RpdGxlPgorCQkJPGRlc2M+SW5zdHJ1Y3Rpb24gRmV0Y2ggVW5pdDwvZGVzYz4KKwkJCTx2OnRleHRCbG9jayB2Om1hcmdpbnM9InJlY3QoMCwwLDAsMCkiLz4KKwkJCTx2OnRleHRSZWN0IGN4PSI0MC41MjUiIGN5PSIzNjIuODUiIHdpZHRoPSI4MS4wNSIgaGVpZ2h0PSIxMC44Ii8+CisJCQk8cmVjdCB4PSIwIiB5PSIzNTcuNDUiIHdpZHRoPSI4MS4wNSIgaGVpZ2h0PSIxMC44IiBjbGFzcz0ic3Q3Ii8+CisJCQk8dGV4dCB4PSIyMC4xNiIgeT0iMzYwLjE1IiBjbGFzcz0ic3Q4IiB2OmxhbmdJRD0iMTAzMyI+PHY6cGFyYWdyYXBoIHY6aG9yaXpBbGlnbj0iMSIvPjx2OnRhYkxpc3QvPkluc3RydWN0aW9uPHY6bmV3bGluZUNoYXIvPjx0c3BhbgorCQkJCQkJeD0iMjEuMyIgZHk9IjEuMmVtIiBjbGFzcz0ic3QxMSI+RmV0Y2ggVW5pdDwvdHNwYW4+PC90ZXh0PgkJPC9nPgorCTwvZz4KKzwvc3ZnPgpkaWZmIC0tZ2l0IGEvZG9jcy9zb3VyY2UvX3N0YXRpYy91c2VyX3Byb2plY3Rfd3JhcHBlci5nZHMucG5nIGIvZG9jcy9zb3VyY2UvX3N0YXRpYy91c2VyX3Byb2plY3Rfd3JhcHBlci5nZHMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmM2RmNWQKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL3NvdXJjZS9fc3RhdGljL3VzZXJfcHJvamVjdF93cmFwcGVyLmdkcy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvaGFja3MvcGF0Y2gvcGRuZ2VuLnBhdGNoIGIvaGFja3MvcGF0Y2gvcGRuZ2VuLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkNDRlYzgKLS0tIC9kZXYvbnVsbAorKysgYi9oYWNrcy9wYXRjaC9wZG5nZW4ucGF0Y2gKQEAgLTAsMCArMSwyNyBAQAorZGlmZiAtLWdpdCBhL3NyYy9wZG4vc3JjL1Bkbkdlbi50Y2wgYi9zcmMvcGRuL3NyYy9QZG5HZW4udGNsCitpbmRleCA3MzIyZDU0YWQuLjdmMTc4MTY3ZiAxMDA2NDQKKy0tLSBhL3NyYy9wZG4vc3JjL1Bkbkdlbi50Y2wKKysrKyBiL3NyYy9wZG4vc3JjL1Bkbkdlbi50Y2wKK0BAIC05NjYsOCArOTY2LDkgQEAgcHJvYyBhZGRfcGRuX3Jpbmcge2FyZ3N9IHsKKyAKKyAgIGlmIHtbZGljdCBleGlzdHMgJGFyZ3MgLWdyaWRdfSB7CisgICAgIHNldCBjdXJyZW50X2dyaWQgW2NoZWNrX2dyaWQgW2dldF9ncmlkIFtkaWN0IGdldCAkYXJncyAtZ3JpZF1dXQorKyAgICAjRGluZXNoLUE6IENvcmUgUmluZyB3aXRob3V0IFN0cmFwCisrICAgIHNldCBncmlkICRjdXJyZW50X2dyaWQKKyAgIH0KKy0gIHNldCBncmlkICRjdXJyZW50X2dyaWQKKyAgIHNldCBsYXllcnMgW2NoZWNrX2xheWVyX25hbWVzIFtkaWN0IGdldCAkYXJncyAtbGF5ZXJzXV0KKyAKKyAgIHNldCBwcm9jZXNzX2FyZ3MgJGFyZ3MKK0BAIC02Njg2LDcgKzY2ODcsMTAgQEAgcHJvYyBwbGFuX2dyaWQge30geworICAgfQorIAorICAgYWRkX2dyaWQKKy0gIHByb2Nlc3NfY2hhbm5lbHMKKysgICNEaW5lc2gtQTogQ29yZSBSaW5nIHdpdGhvdXQgU3RyYXAKKysgIGlmIHtbaW5mbyBleGlzdHMgJGdyaWRfZGF0YV19IHsKKysgIAlwcm9jZXNzX2NoYW5uZWxzCisrICB9CisgCisgICBmb3JlYWNoIHB3cl9uZXQgW2RpY3QgZ2V0ICRkZXNpZ25fZGF0YSBwb3dlcl9uZXRzXSB7CisgICAgIGdlbmVyYXRlX2dyaWRfdmlhcyAiUE9XRVIiICRwd3JfbmV0CmRpZmYgLS1naXQgYS9oYWNrcy9wYXRjaC9yZXNpemVyLnBhdGNoIGIvaGFja3MvcGF0Y2gvcmVzaXplci5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjU4N2M3Ci0tLSAvZGV2L251bGwKKysrIGIvaGFja3MvcGF0Y2gvcmVzaXplci5wYXRjaApAQCAtMCwwICsxLDE3IEBACitkaWZmIC0tZ2l0IGEvc3JjL3Jzei9zcmMvUmVzaXplci5jYyBiL3NyYy9yc3ovc3JjL1Jlc2l6ZXIuY2MKK2luZGV4IDNjYmUzMDZlMy4uMzAwYzZjNDc2IDEwMDY0NAorLS0tIGEvc3JjL3Jzei9zcmMvUmVzaXplci5jYworKysrIGIvc3JjL3Jzei9zcmMvUmVzaXplci5jYworQEAgLTE2OTEsOSArMTY5MSwxMSBAQCBSZXNpemVyOjpyZXNpemVUb1RhcmdldFNsZXcoY29uc3QgUGluICpkcnZyX3BpbiwKKyAgICAgZW5zdXJlV2lyZVBhcmFzaXRpYyhkcnZyX3Bpbik7CisgICAgIC8vIEluY2x1ZGVzIG5ldCBwYXJhc2l0aWMgY2FwYWNpdGFuY2UuCisgICAgIGZsb2F0IGxvYWRfY2FwID0gZ3JhcGhfZGVsYXlfY2FsY18tPmxvYWRDYXAoZHJ2cl9waW4sIHRndF9zbGV3X2RjYWxjX2FwXyk7CistICAgIGlmIChsb2FkX2NhcCA+IDAuMCkgeworKyAgICAvLyBESU5FU0gtQTogZGVsYXkgY2VsbHMgcmVzaXplIGRpc2FibGVkCisrICAgIGlmIChsb2FkX2NhcCA+IDAuMDAgJiYgKHN0cm5jbXAoY2VsbC0+bmFtZSgpLCJza3kxMzBfZmRfc2NfaGRfX2Nsa2RseWJ1ZjRzMTVfMiIsMjYpICE9IDApKSB7CisgICAgICAgTGliZXJ0eUNlbGwgKnRhcmdldF9jZWxsID0gZmluZFRhcmdldENlbGwoY2VsbCwgbG9hZF9jYXAsIHJldmlzaXRpbmdfaW5zdCk7CisgICAgICAgaWYgKHRhcmdldF9jZWxsICE9IGNlbGwpIHsKKysgICAgICAgIC8vcHJpbnRmKCJEaW5lc2gtQTogUmVzaXppbmcgOiAlcyA9PiAlcyAlcyBMb2FkX2NhcDogJWYgXG4iLHNkY19uZXR3b3JrXy0+cGF0aE5hbWUoZHJ2cl9waW4pLGNlbGwtPm5hbWUoKSx0YXJnZXRfY2VsbC0+bmFtZSgpLGxvYWRfY2FwKTsKKyAgICAgICAgIGRlYnVnUHJpbnQobG9nZ2VyXywgUlNaLCAicmVzaXplIiwgMiwgInt9IHt9IC0+IHt9IiwKKyAgICAgICAgICAgICAgICAgICAgc2RjX25ldHdvcmtfLT5wYXRoTmFtZShkcnZyX3BpbiksCisgICAgICAgICAgICAgICAgICAgIGNlbGwtPm5hbWUoKSwKZGlmZiAtLWdpdCBhL2hhY2tzL3BhdGNoL3NjYW5fc3dhcC5wYXRjaCBiL2hhY2tzL3BhdGNoL3NjYW5fc3dhcC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvaGFja3MvcGF0Y2gvc2Nhbl9zd2FwLnBhdGNoCmRpZmYgLS1naXQgYS9oYWNrcy9zcmMvT3BlblJPQUQvUGRuR2VuLnRjbCBiL2hhY2tzL3NyYy9PcGVuUk9BRC9QZG5HZW4udGNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmMTc4MTYKLS0tIC9kZXYvbnVsbAorKysgYi9oYWNrcy9zcmMvT3BlblJPQUQvUGRuR2VuLnRjbApAQCAtMCwwICsxLDY3NTEgQEAKKyNCU0QgMy1DbGF1c2UgTGljZW5zZQorIworI0NvcHlyaWdodCAoYykgMjAxOSwgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorI0FsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisjCisjMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisjICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjCisjMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorIyAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyMgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworI1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorI0FORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyNJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyNESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisjRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyNEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorI1NFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyNPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorI09GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK3N0YTo6ZGVmaW5lX2NtZF9hcmdzICJwZG5nZW4iIHtbLXZlcmJvc2VdIFtjb25maWdfZmlsZV19CisKK3Byb2MgcGRuZ2VuIHsgYXJncyB9IHsKKyAgc3RhOjpwYXJzZV9rZXlfYXJncyAicGRuZ2VuIiBhcmdzIFwKKyAgICBrZXlzIHt9IGZsYWdzIHstdmVyYm9zZX0KKworICBpZiB7W2luZm8gZXhpc3RzIGZsYWdzKC12ZXJib3NlKV19IHsKKyAgICBwZG5nZW46OnNldF92ZXJib3NlCisgIH0KKworICBpZiB7W2xsZW5ndGggJGFyZ3NdID4gMH0geworICAgIHNldCBjb25maWdfZmlsZSBbZmlsZSBuYXRpdmVuYW1lIFtsaW5kZXggJGFyZ3MgMF1dCisgICAgcGRuZ2VuOjphcHBseSAkY29uZmlnX2ZpbGUKKyAgfSBlbHNlIHsKKyAgICBwZG5nZW46OmFwcGx5CisgIH0KK30KKworc3RhOjpkZWZpbmVfY21kX2FyZ3MgImFkZF9nbG9iYWxfY29ubmVjdGlvbiIgey1uZXQgPG5ldF9uYW1lPiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLWluc3RfcGF0dGVybiA8aW5zdF9uYW1lX3BhdHRlcm4+IFwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLXBpbl9wYXR0ZXJuIDxwaW5fbmFtZV9wYXR0ZXJuPiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWygtcG93ZXJ8LWdyb3VuZCldfQorCitwcm9jIGFkZF9nbG9iYWxfY29ubmVjdGlvbiB7YXJnc30geworICBpZiB7W29yZDo6Z2V0X2RiX2Jsb2NrXSA9PSAiTlVMTCJ9IHsKKyAgICB1dGw6OmVycm9yIFBETiA5MSAiRGVzaWduIG11c3QgYmUgbG9hZGVkIGJlZm9yZSBjYWxsaW5nIHRoZSBhZGRfZ2xvYmFsX2Nvbm5lY3Rpb24gY29tbWFuZC4iCisgIH0KKworICBzdGE6OnBhcnNlX2tleV9hcmdzICJhZGRfZ2xvYmFsX2Nvbm5lY3Rpb24iIGFyZ3MgXAorICAgIGtleXMgey1uZXQgLWluc3RfcGF0dGVybiAtcGluX3BhdHRlcm59IFwKKyAgICBmbGFncyB7LXBvd2VyIC1ncm91bmR9CisKKyAgaWYge1tsbGVuZ3RoICRhcmdzXSA+IDB9IHsKKyAgICB1dGw6OmVycm9yIFBETiAxMzEgIlVuZXhwZWN0ZWQgYXJndW1lbnQgW2xpbmRleCAkYXJncyAwXSBmb3IgYWRkX2dsb2JhbF9jb25uZWN0aW9uIGNvbW1hbmQuIgorICB9CisKKyAgaWYge1tpbmZvIGV4aXN0cyBmbGFncygtcG93ZXIpXSAmJiBbaW5mbyBleGlzdHMgZmxhZ3MoLWdyb3VuZCldfSB7CisgICAgdXRsOjplcnJvciBQRE4gOTIgIlRoZSBmbGFncyAtcG93ZXIgYW5kIC1ncm91bmQgb2YgdGhlIGFkZF9nbG9iYWxfY29ubmVjdGlvbiBjb21tYW5kIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuIgorICB9CisKKyAgaWYgeyFbaW5mbyBleGlzdHMga2V5cygtbmV0KV19IHsKKyAgICB1dGw6OmVycm9yIFBETiA5MyAiVGhlIC1uZXQgb3B0aW9uIG9mIHRoZSBhZGRfZ2xvYmFsX2Nvbm5lY3Rpb24gY29tbWFuZCBpcyByZXF1aXJlZC4iCisgIH0KKworICBpZiB7IVtpbmZvIGV4aXN0cyBrZXlzKC1pbnN0X3BhdHRlcm4pXX0geworICAgIHNldCBrZXlzKC1pbnN0X3BhdHRlcm4pIHsuKn0KKyAgfSBlbHNlIHsKKyAgICBpZiB7W2NhdGNoIHtyZWdleHAgJGtleXMoLWluc3RfcGF0dGVybikgIiJ9XX0geworICAgICAgdXRsOjplcnJvciBQRE4gMTQyICJUaGUgLWluc3RfcGF0dGVybiBhcmd1bWVudCAoJGtleXMoLWluc3RfcGF0dGVybikpIGlzIG5vdCBhIHZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbi4iCisgICAgfQorICB9CisKKyAgaWYgeyFbaW5mbyBleGlzdHMga2V5cygtcGluX3BhdHRlcm4pXX0geyAKKyAgICB1dGw6OmVycm9yIFBETiA5NCAiVGhlIC1waW5fcGF0dGVybiBvcHRpb24gb2YgdGhlIGFkZF9nbG9iYWxfY29ubmVjdGlvbiBjb21tYW5kIGlzIHJlcXVpcmVkLiIKKyAgfSBlbHNlIHsKKyAgICBpZiB7W2NhdGNoIHtyZWdleHAgJGtleXMoLXBpbl9wYXR0ZXJuKSAiIn1dfSB7CisgICAgICB1dGw6OmVycm9yIFBETiAxNTcgIlRoZSAtcGluX3BhdHRlcm4gYXJndW1lbnQgKCRrZXlzKC1waW5fcGF0dGVybikpIGlzIG5vdCBhIHZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbi4iCisgICAgfQorICB9CisKKyAgaWYge1tpbmZvIGV4aXN0cyBmbGFncygtcG93ZXIpXX0geworICAgIGlmIHtbc2V0IG5ldCBbW29yZDo6Z2V0X2RiX2Jsb2NrXSBmaW5kTmV0ICRrZXlzKC1uZXQpXV0gPT0gIk5VTEwifSB7CisgICAgICBzZXQgbmV0IFtvZGI6OmRiTmV0X2NyZWF0ZSBbb3JkOjpnZXRfZGJfYmxvY2tdICRrZXlzKC1uZXQpXQorICAgIH0KKyAgICAkbmV0IHNldFNwZWNpYWwKKyAgICAkbmV0IHNldFNpZ1R5cGUgUE9XRVIKKyAgICBwZG5nZW46OmNoZWNrX3Bvd2VyICRrZXlzKC1uZXQpCisgICAgcGRuZ2VuOjphZGRfcG93ZXJfbmV0ICRrZXlzKC1uZXQpCisgIH0KKworICBpZiB7W2luZm8gZXhpc3RzIGZsYWdzKC1ncm91bmQpXX0geworICAgIGlmIHtbc2V0IG5ldCBbW29yZDo6Z2V0X2RiX2Jsb2NrXSBmaW5kTmV0ICRrZXlzKC1uZXQpXV0gPT0gIk5VTEwifSB7CisgICAgICBzZXQgbmV0IFtvZGI6OmRiTmV0X2NyZWF0ZSBbb3JkOjpnZXRfZGJfYmxvY2tdICRrZXlzKC1uZXQpXQorICAgIH0KKyAgICAkbmV0IHNldFNwZWNpYWwKKyAgICAkbmV0IHNldFNpZ1R5cGUgR1JPVU5ECisgICAgcGRuZ2VuOjpjaGVja19ncm91bmQgJGtleXMoLW5ldCkKKyAgICBwZG5nZW46OmFkZF9ncm91bmRfbmV0ICRrZXlzKC1uZXQpCisgIH0KKworICBkaWN0IGxhcHBlbmQgcGRuZ2VuOjpnbG9iYWxfY29ubmVjdGlvbnMgJGtleXMoLW5ldCkgW2xpc3QgaW5zdF9uYW1lICRrZXlzKC1pbnN0X3BhdHRlcm4pIHBpbl9uYW1lICRrZXlzKC1waW5fcGF0dGVybildCisKKyAgaWYge1tzZXQgbmV0IFtbb3JkOjpnZXRfZGJfYmxvY2tdIGZpbmROZXQgJGtleXMoLW5ldCldXSA9PSAiTlVMTCJ9IHsKKyAgICB1dGw6Ondhcm4gUEROIDE2NyAiTmV0IGNyZWF0ZWQgZm9yICRrZXlzKC1uZXQpLCBpZiBpbnRlbmRlZCBhcyBwb3dlciBvciBncm91bmQgbmV0IGFkZCB0aGUgLXBvd2VyLy1ncm91bmQgc3dpdGNoIGFzIGFwcHJvcHJpYXRlLiIKKyAgICBzZXQgbmV0IFtvZGI6OmRiTmV0X2NyZWF0ZSBbb3JkOjpnZXRfZGJfYmxvY2tdICRrZXlzKC1uZXQpXQorICB9CisgIHBkbjo6YWRkX2dsb2JhbF9jb25uZWN0ICRrZXlzKC1pbnN0X3BhdHRlcm4pICRrZXlzKC1waW5fcGF0dGVybikgJG5ldAorICBwZG46Omdsb2JhbF9jb25uZWN0IFtvcmQ6OmdldF9kYl9ibG9ja10KK30KKworIyBkZWZpbmVfcGRuX2dyaWQgLW5hbWUgbWFpbl9ncmlkIC1waW5zIHttZXRhbDd9IC12b2x0YWdlX2RvbWFpbnMge0NPUkUgVklOfQorIyBkZWZpbmVfcGRuX2dyaWQgLW1hY3JvIC1uYW1lIHJhbSAtb3JpZW50IHtSMCBSMTgwIE1YIE1ZfSAtc3RhcnRzX3dpdGggUE9XRVIgLXBpbl9kaXJlY3Rpb24gdmVydGljYWwgLWJsb2NrIG1ldGFsNgorCitzdGE6OmRlZmluZV9jbWRfYXJncyAiZGVmaW5lX3Bkbl9ncmlkIiB7Wy1uYW1lIDxuYW1lPl0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFstbWFjcm9dIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbLWdyaWRfb3Zlcl9wZ19waW5zfC1ncmlkX292ZXJfYm91bmRhcnldIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbLXZvbHRhZ2VfZG9tYWlucyA8bGlzdF9vZl92b2x0YWdlX2RvbWFpbnM+XSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWy1vcmllbnQgPGxpc3Rfb2ZfdmFsaWRfb3JpZW50YXRpb25zPl0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFstaW5zdGFuY2VzIDxsaXN0X29mX2luc3RhbmNlcz5dIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbLWNlbGxzIDxsaXN0X29mX2NlbGxfbmFtZXM+IF0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFstaGFsbyA8bGlzdF9vZl9oYWxvX3ZhbHVlcz5dIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbLXBpbl9kaXJlY3Rpb24gKGhvcml6b250YWx8dmVydGljYWwpXSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWy1waW5zIDxsaXN0X29mX3Bpbl9sYXllcnM+XSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWy1zdGFydHNfd2l0aCAoUE9XRVJ8R1JPVU5EKV19CisKK3Byb2MgZGVmaW5lX3Bkbl9ncmlkIHthcmdzfSB7CisgIHBkbmdlbjo6Y2hlY2tfZGVzaWduX3N0YXRlCisKKyAgc3RhOjpwYXJzZV9rZXlfYXJncyAiZGVmaW5lX3Bkbl9ncmlkIiBhcmdzIFwKKyAgICBrZXlzIHstbmFtZSAtdm9sdGFnZV9kb21haW5zIC1vcmllbnQgLWluc3RhbmNlcyAtY2VsbHMgLWhhbG8gLXBpbl9kaXJlY3Rpb24gLXBpbnMgLXN0YXJ0c193aXRofSBcCisgICAgZmxhZ3Mgey1tYWNybyAtZ3JpZF9vdmVyX3BnX3BpbnMgLWdyaWRfb3Zlcl9ib3VuZGFyeX0KKworICBpZiB7W2xsZW5ndGggJGFyZ3NdID4gMH0geworICAgIHV0bDo6ZXJyb3IgUEROIDEzMiAiVW5leHBlY3RlZCBhcmd1bWVudCBbbGluZGV4ICRhcmdzIDBdIGZvciBkZWZpbmVfcGRuX2dyaWQgY29tbWFuZC4iCisgIH0KKworICBpZiB7W2luZm8gZXhpc3RzIGZsYWdzKC1tYWNybyldfSB7CisgICAgc2V0IGtleXMoLW1hY3JvKSAxCisKKyAgICBpZiB7W2luZm8gZXhpc3RzIGZsYWdzKC1ncmlkX292ZXJfcGdfcGlucyldICYmIFtpbmZvIGV4aXN0cyBmbGFncygtZ3JpZF9vdmVyX2JvdW5hcnkpXX0geworICAgICAgdXRsOjplcnJvciBQRE4gMTc1ICJPcHRpb25zIC1ncmlkX292ZXJfcGdfcGlucyBhbmQgLWdyaWRfb3Zlcl9ib3VuZGFyeSBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiIKKyAgICB9CisKKyAgICBzZXQga2V5cygtZ3JpZF9vdmVyX3BnX3BpbnMpIDEKKyAgICBpZiB7W2luZm8gZXhpc3RzIGZsYWdzKC1ncmlkX292ZXJfYm91bmRhcnkpXX0geworICAgICAgc2V0IGtleXMoLWdyaWRfb3Zlcl9wZ19waW5zKSAwCisgICAgfQorICB9CisKKyAgaWYge1tsbGVuZ3RoICRhcmdzXSA+IDB9IHsKKyAgICB1dGw6OmVycm9yIFBETiA3MyAiVW5yZWNvZ25pemVkIGFyZ3VtZW50IFtsaW5kZXggJGFyZ3MgMF0gZm9yIGRlZmluZV9wZG5fZ3JpZC4iCisgIH0KKworICBpZiB7W2luZm8gZXhpc3RzIGtleXMoLWhhbG8pXX0geworICAgIGlmIHtbbGxlbmd0aCAka2V5cygtaGFsbyldID09IDF9IHsKKyAgICAgIHNldCBrZXlzKC1oYWxvKSBbbGlzdCAka2V5cygtaGFsbykgJGtleXMoLWhhbG8pICRrZXlzKC1oYWxvKSAka2V5cygtaGFsbyldCisgICAgfSBlbHNlaWYge1tsbGVuZ3RoICRrZXlzKC1oYWxvKV0gPT0gMn0geworICAgICAgc2V0IGtleXMoLWhhbG8pIFtsaXN0IHsqfSRrZXlzKC1oYWxvKSB7Kn0ka2V5cygtaGFsbyldCisgICAgfSBlbHNlaWYge1tsbGVuZ3RoICRrZXlzKC1oYWxvKV0gIT0gNH0geworICAgICAgdXRsOjplcnJvciBQRE4gMTYzICJBcmd1bWVudCAtaGFsbyBvZiBkZWZpbmVfcGRuX2dyaWQgbXVzdCBjb25zaXN0IG9mIDEsIDIgb3IgNCBlbnRyaWVzLiIKKyAgICB9CisgIH0KKyAgcGRuZ2VuOjpkZWZpbmVfcGRuX2dyaWQgeyp9W2FycmF5IGdldCBrZXlzXQorfQorCisjIHNldF92b2x0YWdlX2RvbWFpbiAtbmFtZSBDT1JFIC1wb3dlcl9uZXQgVkREICAtZ3JvdW5kX25ldCBWU1MKKyMgc2V0X3ZvbHRhZ2VfZG9tYWluIC1uYW1lIFZJTiAgLXJlZ2lvbl9uYW1lIFRFTVBfQU5BTE9HIC1wb3dlcl9uZXQgVlBXUiAtZ3JvdW5kX25ldCBWU1MKKworc3RhOjpkZWZpbmVfY21kX2FyZ3MgInNldF92b2x0YWdlX2RvbWFpbiIgey1uYW1lIGRvbWFpbl9uYW1lIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbLXJlZ2lvbiByZWdpb25fbmFtZV0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1wb3dlciBwb3dlcl9uZXRfbmFtZSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWy1zZWNvbmRhcnlfcG93ZXIgc2Vjb25kYXJ5X3Bvd2VyX25ldF9uYW1lXSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLWdyb3VuZCBncm91bmRfbmV0X25hbWV9CisKK3Byb2Mgc2V0X3ZvbHRhZ2VfZG9tYWluIHthcmdzfSB7CisgIHBkbmdlbjo6Y2hlY2tfZGVzaWduX3N0YXRlCisKKyAgc3RhOjpwYXJzZV9rZXlfYXJncyAic2V0X3ZvbHRhZ2VfZG9tYWluIiBhcmdzIFwKKyAgICBrZXlzIHstbmFtZSAtcmVnaW9uIC1wb3dlciAtc2Vjb25kYXJ5X3Bvd2VyIC1ncm91bmR9CisKKyAgaWYge1tsbGVuZ3RoICRhcmdzXSA+IDB9IHsKKyAgICB1dGw6OmVycm9yIFBETiAxMzMgIlVuZXhwZWN0ZWQgYXJndW1lbnQgW2xpbmRleCAkYXJncyAwXSBmb3Igc2V0X3ZvbHRhZ2VfZG9tYWluIGNvbW1hbmQuIgorICB9CisKKyAgaWYgeyFbaW5mbyBleGlzdHMga2V5cygtbmFtZSldfSB7CisgICAgdXRsOjplcnJvciBQRE4gOTcgIlRoZSAtbmFtZSBhcmd1bWVudCBpcyByZXF1aXJlZC4iCisgIH0KKworICBpZiB7IVtpbmZvIGV4aXN0cyBrZXlzKC1wb3dlcildfSB7CisgICAgdXRsOjplcnJvciBQRE4gOTggIlRoZSAtcG93ZXIgYXJndW1lbnQgaXMgcmVxdWlyZWQuIgorICB9CisKKyAgaWYgeyFbaW5mbyBleGlzdHMga2V5cygtZ3JvdW5kKV19IHsKKyAgICB1dGw6OmVycm9yIFBETiA5OSAiVGhlIC1ncm91bmQgYXJndW1lbnQgaXMgcmVxdWlyZWQuIgorICB9CisKKyAgaWYge1tsbGVuZ3RoICRhcmdzXSA+IDB9IHsKKyAgICB1dGw6OmVycm9yIFBETiAxMjAgIlVucmVjb2duaXplZCBhcmd1bWVudCBbbGluZGV4ICRhcmdzIDBdIGZvciBzZXRfdm9sdGFnZV9kb21haW4uIgorICB9CisKKyAgcGRuZ2VuOjpzZXRfdm9sdGFnZV9kb21haW4geyp9W2FycmF5IGdldCBrZXlzXQorfQorCisjIGFkZF9wZG5fc3RyaXBlIC1ncmlkIG1haW5fZ3JpZCAtbGF5ZXIgbWV0YWwxIC13aWR0aCAwLjE3IC1mb2xsb3dwaW5zCisjIGFkZF9wZG5fc3RyaXBlIC1ncmlkIG1haW5fZ3JpZCAtbGF5ZXIgbWV0YWwyIC13aWR0aCAwLjE3IC1mb2xsb3dwaW5zCisjIGFkZF9wZG5fc3RyaXBlIC1ncmlkIG1haW5fZ3JpZCAtbGF5ZXIgbWV0YWw0IC13aWR0aCAwLjQ4IC1waXRjaCA1Ni4wIC1vZmZzZXQgMiAtc3RhcnRzX3dpdGggUE9XRVIKKyMgYWRkX3Bkbl9zdHJpcGUgLWdyaWQgbWFpbl9ncmlkIC1sYXllciBtZXRhbDcgLXdpZHRoIDEuNDAgLXBpdGNoIDQwLjAgLW9mZnNldCAyIC1zdGFydHNfd2l0aCBQT1dFUgorc3RhOjpkZWZpbmVfY21kX2FyZ3MgImFkZF9wZG5fc3RyaXBlIiB7Wy1ncmlkIGdyaWRfbmFtZV0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLWxheWVyIGxheWVyX25hbWUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLXdpZHRoIHdpZHRoX3ZhbHVlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFstZm9sbG93cGluc10gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWy1leHRlbmRfdG9fY29yZV9yaW5nXSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbLXBpdGNoIHBpdGNoX3ZhbHVlXSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbLXNwYWNpbmcgc3BhY2luZ192YWx1ZV0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWy1vZmZzZXQgb2Zmc2V0X3ZhbHVlXSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbLXN0YXJ0c193aWR0aCAoUE9XRVJ8R1JPVU5EKV19CisKK3Byb2MgYWRkX3Bkbl9zdHJpcGUge2FyZ3N9IHsKKyAgcGRuZ2VuOjpjaGVja19kZXNpZ25fc3RhdGUKKworICBzdGE6OnBhcnNlX2tleV9hcmdzICJhZGRfcGRuX3N0cmlwZSIgYXJncyBcCisgICAga2V5cyB7LWdyaWQgLWxheWVyIC13aWR0aCAtcGl0Y2ggLXNwYWNpbmcgLW9mZnNldCAtc3RhcnRzX3dpdGh9IFwKKyAgICBmbGFncyB7LWZvbGxvd3BpbnMgLWV4dGVuZF90b19jb3JlX3Jpbmd9CisKKyAgaWYge1tsbGVuZ3RoICRhcmdzXSA+IDB9IHsKKyAgICB1dGw6OmVycm9yIFBETiAxMzQgIlVuZXhwZWN0ZWQgYXJndW1lbnQgW2xpbmRleCAkYXJncyAwXSBmb3IgYWRkX3Bkbl9zdHJpcGUgY29tbWFuZC4iCisgIH0KKworICBpZiB7IVtpbmZvIGV4aXN0cyBrZXlzKC1sYXllcildfSB7CisgICAgdXRsOjplcnJvciBQRE4gMTAwICJUaGUgLWxheWVyIGFyZ3VtZW50IGlzIHJlcXVpcmVkLiIKKyAgfQorCisgIGlmIHshW2luZm8gZXhpc3RzIGtleXMoLXdpZHRoKV19IHsKKyAgICB1dGw6OmVycm9yIFBETiAxMDEgIlRoZSAtd2lkdGggYXJndW1lbnQgaXMgcmVxdWlyZWQuIgorICB9CisKKyAgaWYgeyFbaW5mbyBleGlzdHMgZmxhZ3MoLWZvbGxvd3BpbnMpXSAmJiAhW2luZm8gZXhpc3RzIGtleXMoLXBpdGNoKV19IHsKKyAgICB1dGw6OmVycm9yIFBETiAxMDIgIlRoZSAtcGl0Y2ggYXJndW1lbnQgaXMgcmVxdWlyZWQgZm9yIG5vbi1mb2xsb3dwaW5zIHN0cmlwZXMuIgorICB9CisKKyAgaWYge1tpbmZvIGV4aXN0cyBmbGFncygtZm9sbG93cGlucyldfSB7CisgICAgc2V0IGtleXMoc3RyaXBlKSByYWlscworICB9IGVsc2UgeworICAgIHNldCBrZXlzKHN0cmlwZSkgc3RyYXBzCisgIH0KKworICBpZiB7W2luZm8gZXhpc3RzIGZsYWdzKC1leHRlbmRfdG9fY29yZV9yaW5nKV19IHsKKyAgICBzZXQga2V5cygtZXh0ZW5kX3RvX2NvcmVfcmluZykgMQorICB9CisKKyAgcGRuZ2VuOjphZGRfcGRuX3N0cmlwZSB7Kn1bYXJyYXkgZ2V0IGtleXNdCit9CisKKyMgYWRkX3Bkbl9yaW5nICAgLWdyaWQgbWFpbl9ncmlkIC1sYXllciBtZXRhbDYgLXdpZHRoIDUuMCAtc3BhY2luZyAgMy4wIC1jb3JlX29mZnNldCA1CisjIGFkZF9wZG5fcmluZyAgIC1ncmlkIG1haW5fZ3JpZCAtbGF5ZXIgbWV0YWw3IC13aWR0aCA1LjAgLXNwYWNpbmcgIDMuMCAtY29yZV9vZmZzZXQgNQorCitzdGE6OmRlZmluZV9jbWRfYXJncyAiYWRkX3Bkbl9yaW5nIiB7Wy1ncmlkIGdyaWRfbmFtZV0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1sYXllcnMgbGlzdF9vZl8yX2xheWVyX25hbWVzIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtd2lkdGhzICh3aWR0aF92YWx1ZXxsaXN0X29mX3dpZHRoX3ZhbHVlcykgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1zcGFjaW5ncyAoc3BhY2luZ192YWx1ZXxsaXN0X29mX3NwYWNpbmdfdmFsdWVzKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWy1jb3JlX29mZnNldHMgKG9mZnNldF92YWx1ZXxsaXN0X29mX29mZnNldF92YWx1ZXMpXSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWy1wYWRfb2Zmc2V0cyAob2Zmc2V0X3ZhbHVlfGxpc3Rfb2Zfb2Zmc2V0X3ZhbHVlcyldIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbLXBvd2VyX3BhZHMgbGlzdF9vZl9jb3JlX3Bvd2VyX3BhZGNlbGxzXSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWy1ncm91bmRfcGFkcyBsaXN0X29mX2NvcmVfZ3JvdW5kX3BhZGNlbGxzXX0KKworcHJvYyBhZGRfcGRuX3Jpbmcge2FyZ3N9IHsKKyAgcGRuZ2VuOjpjaGVja19kZXNpZ25fc3RhdGUKKworICBzdGE6OnBhcnNlX2tleV9hcmdzICJhZGRfcGRuX3JpbmciIGFyZ3MgXAorICAgIGtleXMgey1ncmlkIC1sYXllcnMgLXdpZHRocyAtc3BhY2luZ3MgLWNvcmVfb2Zmc2V0cyAtcGFkX29mZnNldHMgLXBvd2VyX3BhZHMgLWdyb3VuZF9wYWRzfSAKKworICBpZiB7W2xsZW5ndGggJGFyZ3NdID4gMH0geworICAgIHV0bDo6ZXJyb3IgUEROIDEzNSAiVW5leHBlY3RlZCBhcmd1bWVudCBbbGluZGV4ICRhcmdzIDBdIGZvciBhZGRfcGRuX3JpbmcgY29tbWFuZC4iCisgIH0KKworICBpZiB7IVtpbmZvIGV4aXN0cyBrZXlzKC1sYXllcnMpXX0geworICAgIHV0bDo6ZXJyb3IgUEROIDEwMyAiVGhlIC1sYXllcnMgYXJndW1lbnQgaXMgcmVxdWlyZWQuIgorICB9CisKKyAgaWYge1tsbGVuZ3RoICRrZXlzKC1sYXllcnMpXSAhPSAyfSB7CisgICAgdXRsOjplcnJvciBQRE4gMTM3ICJFeHBlY3RpbmcgYSBsaXN0IG9mIDIgZWxlbWVudHMgZm9yIC1sYXllcnMgb3B0aW9uIG9mIGFkZF9wZG5fcmluZyBjb21tYW5kLCBmb3VuZCBbbGxlbmd0aCAka2V5cygtbGF5ZXJzKV0uIgorICB9CisKKyAgaWYgeyFbaW5mbyBleGlzdHMga2V5cygtd2lkdGhzKV19IHsKKyAgICB1dGw6OmVycm9yIFBETiAxMDQgIlRoZSAtd2lkdGhzIGFyZ3VtZW50IGlzIHJlcXVpcmVkLiIKKyAgfQorCisgIGlmIHshW2luZm8gZXhpc3RzIGtleXMoLXNwYWNpbmdzKV19IHsKKyAgICB1dGw6OmVycm9yIFBETiAxMDUgIlRoZSAtc3BhY2luZ3MgYXJndW1lbnQgaXMgcmVxdWlyZWQuIgorICB9CisKKyAgaWYge1tpbmZvIGV4aXN0cyBrZXlzKC1jb3JlX29mZnNldHMpXSAmJiBbaW5mbyBleGlzdHMga2V5cygtcGFkX29mZnNldHMpXX0geworICAgIHV0bDo6ZXJyb3IgUEROIDEwNiAiT25seSBvbmUgb2YgLXBhZF9vZmZzZXRzIG9yIC1jb3JlX29mZnNldHMgY2FuIGJlIHNwZWNpZmllZC4iCisgIH0KKworICBpZiB7IVtpbmZvIGV4aXN0cyBrZXlzKC1jb3JlX29mZnNldHMpXSAmJiAhW2luZm8gZXhpc3RzIGtleXMoLXBhZF9vZmZzZXRzKV19IHsKKyAgICB1dGw6OmVycm9yIFBETiAxMDcgIk9uZSBvZiAtcGFkX29mZnNldHMgb3IgLWNvcmVfb2Zmc2V0cyBtdXN0IGJlIHNwZWNpZmllZC4iCisgIH0KKworICBpZiB7W2luZm8gZXhpc3RzIGtleXMoLXBhZF9vZmZzZXRzKV19IHsKKyAgICBpZiB7IVtpbmZvIGV4aXN0cyBrZXlzKC1wb3dlcl9wYWRzKV19IHsKKyAgICAgIHV0bDo6ZXJyb3IgUEROIDE0MyAiVGhlIC1wb3dlcl9wYWRzIG9wdGlvbiBpcyByZXF1aXJlZCB3aGVuIHRoZSAtcGFkX29mZnNldHMgb3B0aW9uIGlzIHVzZWQuIgorICAgIH0KKworICAgIGlmIHshW2luZm8gZXhpc3RzIGtleXMoLWdyb3VuZF9wYWRzKV19IHsKKyAgICAgIHV0bDo6ZXJyb3IgUEROIDE0NCAiVGhlIC1ncm91bmRfcGFkcyBvcHRpb24gaXMgcmVxdWlyZWQgd2hlbiB0aGUgLXBhZF9vZmZzZXRzIG9wdGlvbiBpcyB1c2VkLiIKKyAgICB9CisgIH0gZWxzZSB7CisgICAgaWYge1tpbmZvIGV4aXN0cyBrZXlzKC1wb3dlcl9wYWRzKV0gfHwgW2luZm8gZXhpc3RzIGtleXMoLWdyb3VuZF9wYWRzKV19IHsKKyAgICAgIHV0bDo6d2FybiBQRE4gMTQ1ICJPcHRpb25zIC1wb3dlcl9wYWRzIGFuZCAtZ3JvdW5kX3BhZHMgYXJlIG9ubHkgdXNlZCB3aGVuIHRoZSAtcGFkX29mZnNldHMgb3B0aW9uIGlzIHNwZWNpZmllZC4iCisgICAgfQorICB9CisKKyAgcGRuZ2VuOjphZGRfcGRuX3Jpbmcgeyp9W2FycmF5IGdldCBrZXlzXQorfQorCitzdGE6OmRlZmluZV9jbWRfYXJncyAiYWRkX3Bkbl9jb25uZWN0IiB7Wy1ncmlkIGdyaWRfbmFtZV0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1sYXllcnMgbGlzdF9vZl8yX2xheWVycyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWy1jdXRfcGl0Y2ggcGl0Y2hfdmFsdWVdIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbLWZpeGVkX3ZpYXMgbGlzdF9vZl92aWFzXX0KKworIyBhZGRfcGRuX2Nvbm5lY3QgLWdyaWQgbWFpbl9ncmlkIC1sYXllcnMge21ldGFsMSBtZXRhbDJ9IC1jdXRfcGl0Y2ggMC4xNgorIyBhZGRfcGRuX2Nvbm5lY3QgLWdyaWQgbWFpbl9ncmlkIC1sYXllcnMge21ldGFsMiBtZXRhbDR9CisjIGFkZF9wZG5fY29ubmVjdCAtZ3JpZCBtYWluX2dyaWQgLWxheWVycyB7bWV0YWw0IG1ldGFsN30KKworcHJvYyBhZGRfcGRuX2Nvbm5lY3Qge2FyZ3N9IHsKKyAgcGRuZ2VuOjpjaGVja19kZXNpZ25fc3RhdGUKKworICBzdGE6OnBhcnNlX2tleV9hcmdzICJhZGRfcGRuX2Nvbm5lY3QiIGFyZ3MgXAorICAgIGtleXMgey1ncmlkIC1sYXllcnMgLWN1dF9waXRjaCAtZml4ZWRfdmlhc30gXAorCisgIGlmIHtbbGxlbmd0aCAkYXJnc10gPiAwfSB7CisgICAgdXRsOjplcnJvciBQRE4gMTM2ICJVbmV4cGVjdGVkIGFyZ3VtZW50IFtsaW5kZXggJGFyZ3MgMF0gZm9yIGFkZF9wZG5fY29ubmVjdCBjb21tYW5kLiIKKyAgfQorCisgIGlmIHshW2luZm8gZXhpc3RzIGtleXMoLWxheWVycyldfSB7CisgICAgdXRsOjplcnJvciBQRE4gMTA4ICJUaGUgLWxheWVycyBhcmd1bWVudCBpcyByZXF1aXJlZC4iCisgIH0KKworICBwZG5nZW46OmFkZF9wZG5fY29ubmVjdCB7Kn1bYXJyYXkgZ2V0IGtleXNdCit9CisKK25hbWVzcGFjZSBldmFsIHBkbmdlbiB7Cit2YXJpYWJsZSBibG9ja19tYXN0ZXJzIHt9Cit2YXJpYWJsZSBsb2dpY2FsX3ZpYXJ1bGVzIHt9Cit2YXJpYWJsZSBwaHlzaWNhbF92aWFydWxlcyB7fQordmFyaWFibGUgdmlhcyB7fQordmFyaWFibGUgc3RyaXBlX2xvY3MKK3ZhcmlhYmxlIGxheWVycyB7fQordmFyaWFibGUgYmxvY2sKK3ZhcmlhYmxlIHRlY2gKK3ZhcmlhYmxlIGxpYnMKK3ZhcmlhYmxlIGRlc2lnbl9kYXRhIHt9Cit2YXJpYWJsZSBkZWZhdWx0X2dyaWRfZGF0YSB7fQordmFyaWFibGUgZGVmX291dHB1dAordmFyaWFibGUgd2lkdGhzCit2YXJpYWJsZSBwaXRjaGVzCit2YXJpYWJsZSBsb2Zmc2V0Cit2YXJpYWJsZSBib2Zmc2V0Cit2YXJpYWJsZSBzaXRlCit2YXJpYWJsZSByb3dfaGVpZ2h0Cit2YXJpYWJsZSBtZXRhbF9sYXllcnMge30KK3ZhcmlhYmxlIGJsb2NrYWdlcyB7fQordmFyaWFibGUgcGFkY2VsbF9ibG9ja2FnZXMge30KK3ZhcmlhYmxlIGluc3RhbmNlcyB7fQordmFyaWFibGUgZGVmYXVsdF90ZW1wbGF0ZV9uYW1lIHt9Cit2YXJpYWJsZSB0ZW1wbGF0ZSB7fQordmFyaWFibGUgZGVmYXVsdF9jdXRjbGFzcyB7fQordmFyaWFibGUgdHdvd2lkdGhzX3RhYmxlIHt9Cit2YXJpYWJsZSB0d293aWR0aHNfdGFibGVfd3JvbmdkaXJlY3Rpb24ge30KK3ZhcmlhYmxlIHN0ZGNlbGxfYXJlYSAiIgordmFyaWFibGUgcG93ZXJfbmV0cyB7fQordmFyaWFibGUgZ3JvdW5kX25ldHMge30KK3ZhcmlhYmxlIG1hY3JvcyB7fQordmFyaWFibGUgdmVyYm9zZSAwCit2YXJpYWJsZSBnbG9iYWxfY29ubmVjdGlvbnMge30KK3ZhcmlhYmxlIGRlZmF1bHRfZ2xvYmFsX2Nvbm5lY3Rpb25zIHsKKyAgVkREIHsKKyAgICB7aW5zdF9uYW1lIC4qIHBpbl9uYW1lIF5WREQkfQorICAgIHtpbnN0X25hbWUgLiogcGluX25hbWUgXlZERFBFJH0KKyAgICB7aW5zdF9uYW1lIC4qIHBpbl9uYW1lIF5WRERDRSR9CisgIH0KKyAgVlNTIHsKKyAgICB7aW5zdF9uYW1lIC4qIHBpbl9uYW1lIF5WU1MkfQorICAgIHtpbnN0X25hbWUgLiogcGluX25hbWUgXlZTU0UkfQorICB9Cit9Cit2YXJpYWJsZSB2b2x0YWdlX2RvbWFpbnMgeworICBDT1JFIHsKKyAgICBwcmltYXJ5X3Bvd2VyIFZERCBwcmltYXJ5X2dyb3VuZCBWU1MKKyAgfQorfQorCitwcm9jIGNoZWNrX2Rlc2lnbl9zdGF0ZSB7fSB7CisgIGlmIHtbb3JkOjpnZXRfZGJfYmxvY2tdID09ICJOVUxMIn0geworICAgIHV0bDo6ZXJyb3IgUEROIDcyICJEZXNpZ24gbXVzdCBiZSBsb2FkZWQgYmVmb3JlIGNhbGxpbmcgcGRuZ2VuIGNvbW1hbmRzLiIKKyAgfQorfQorCitwcm9jIGNoZWNrX29yaWVudGF0aW9ucyB7b3JpZW50YXRpb25zfSB7CisgIHNldCB2YWxpZF9vcmllbnRhdGlvbnMge1IwIFI5MCBSMTgwIFIyNzAgTVggTVkgTVhSOTAgTVlSOTB9CisgIHNldCBsZWZfb3JpZW50YXRpb25zIHtOIFIwIEZOIE1ZIFMgUjE4MCBGUyBNWCBFIFIyNzAgRkUgTVlSOTAgVyBSOTAgRlcgTVhSOTB9CisKKyAgc2V0IGNoZWNrZWRfb3JpZW50YXRpb25zIHt9CisgIGZvcmVhY2ggb3JpZW50ICRvcmllbnRhdGlvbnMgeworICAgIGlmIHtbbHNlYXJjaCAtZXhhY3QgJHZhbGlkX29yaWVudGF0aW9ucyAkb3JpZW50XSA+IC0xfSB7CisgICAgICBsYXBwZW5kIGNoZWNrZWRfb3JpZW50YXRpb25zICRvcmllbnQKKyAgICB9IGVsc2VpZiB7W2RpY3QgZXhpc3RzICRsZWZfb3JpZW50YXRpb25zICRvcmllbnRdfSB7CisgICAgICBsYXBwZW5kIGNoZWNrZWRfb3JpZW50YXRpb25zIFtkaWN0IGdldCAkbGVmX29yaWVudGF0aW9ucyAkb3JpZW50XQorICAgIH0gZWxzZSB7CisgICAgICB1dGw6OmVycm9yIFBETiA3NCAiSW52YWxpZCBvcmllbnRhdGlvbiAkb3JpZW50IHNwZWNpZmllZCwgbXVzdCBiZSBvbmUgb2YgW2pvaW4gJHZhbGlkX29yaWVudGF0aW9ucyB7LCB9XS4iCisgICAgfQorICB9CisgIHJldHVybiAkY2hlY2tlZF9vcmllbnRhdGlvbnMKK30KKworcHJvYyBjaGVja19sYXllcl9uYW1lcyB7bGF5ZXJfbmFtZXN9IHsKKyAgc2V0IHRlY2ggW29yZDo6Z2V0X2RiX3RlY2hdCisKKyAgZm9yZWFjaCBsYXllcl9uYW1lICRsYXllcl9uYW1lcyB7CisgICAgaWYge1skdGVjaCBmaW5kTGF5ZXIgJGxheWVyX25hbWVdID09ICJOVUxMIn0geworICAgICAgaWYge1tyZWdleHAgeyguKilfUElOXyhob3J8dmVyKSR9ICRsYXllcl9uYW1lIC0gYWN0dWFsX2xheWVyX25hbWVdfSB7CisgICAgICAgIGlmIHtbJHRlY2ggZmluZExheWVyICRhY3R1YWxfbGF5ZXJfbmFtZV0gPT0gIk5VTEwifSB7CisgICAgICAgICAgdXRsOjplcnJvciAiUEROIiA3NSAiTGF5ZXIgJGFjdHVhbF9sYXllcl9uYW1lIG5vdCBmb3VuZCBpbiBsb2FkZWQgdGVjaG5vbG9neSBkYXRhLiIKKyAgICAgICAgfQorICAgICAgfSBlbHNlIHsKKyAgICAgICAgdXRsOjplcnJvciAiUEROIiA3NiAiTGF5ZXIgJGxheWVyX25hbWUgbm90IGZvdW5kIGluIGxvYWRlZCB0ZWNobm9sb2d5IGRhdGEuIgorICAgICAgfQorICAgIH0gIAorICB9CisgIHJldHVybiAkbGF5ZXJfbmFtZXMKK30KKworcHJvYyBjaGVja19sYXllcl93aWR0aCB7bGF5ZXJfbmFtZSB3aWR0aH0geworICBzZXQgdGVjaCBbb3JkOjpnZXRfZGJfdGVjaF0KKworICBzZXQgbGF5ZXIgWyR0ZWNoIGZpbmRMYXllciAkbGF5ZXJfbmFtZV0KKyAgc2V0IG1pbldpZHRoIFskbGF5ZXIgZ2V0TWluV2lkdGhdCisgIHNldCBtYXhXaWR0aCBbJGxheWVyIGdldE1heFdpZHRoXQorCisgIGlmIHtbb3JkOjptaWNyb25zX3RvX2RidSAkd2lkdGhdIDwgJG1pbldpZHRofSB7CisgICAgdXRsOjplcnJvciAiUEROIiA3NyAiV2lkdGggKCR3aWR0aCkgc3BlY2lmaWVkIGZvciBsYXllciAkbGF5ZXJfbmFtZSBpcyBsZXNzIHRoYW4gbWluaW11bSB3aWR0aCAoW29yZDo6ZGJ1X3RvX21pY3JvbnMgJG1pbldpZHRoXSkuIgorICB9CisgIGlmIHtbb3JkOjptaWNyb25zX3RvX2RidSAkd2lkdGhdID4gJG1heFdpZHRofSB7CisgICAgdXRsOjplcnJvciAiUEROIiA3OCAiV2lkdGggKCR3aWR0aCkgc3BlY2lmaWVkIGZvciBsYXllciAkbGF5ZXJfbmFtZSBpcyBncmVhdGVyIHRoYW4gbWF4aW11bSB3aWR0aCAoW29yZDo6ZGJ1X3RvX21pY3JvbnMgJG1heFdpZHRoXSkuIgorICB9CisgIHJldHVybiAkd2lkdGgKK30KKworcHJvYyBjaGVja19sYXllcl9zcGFjaW5nIHtsYXllcl9uYW1lIHNwYWNpbmd9IHsKKyAgc2V0IHRlY2ggW29yZDo6Z2V0X2RiX3RlY2hdCisKKyAgc2V0IGxheWVyIFskdGVjaCBmaW5kTGF5ZXIgJGxheWVyX25hbWVdCisgIHNldCBtaW5TcGFjaW5nIFskbGF5ZXIgZ2V0U3BhY2luZ10KKworICBpZiB7W29yZDo6bWljcm9uc190b19kYnUgJHNwYWNpbmddIDwgJG1pblNwYWNpbmd9IHsKKyAgICB1dGw6OmVycm9yICJQRE4iIDc5ICJTcGFjaW5nICgkc3BhY2luZykgc3BlY2lmaWVkIGZvciBsYXllciAkbGF5ZXJfbmFtZSBpcyBsZXNzIHRoYW4gbWluaW11bSBzcGFjaW5nIChbb3JkOjpkYnVfdG9fbWljcm9ucyAkbWluU3BhY2luZyldLiIKKyAgfQorICByZXR1cm4gJHNwYWNpbmcKK30KKworcHJvYyBjaGVja19yYWlscyB7cmFpbHNfc3BlY30geworICBpZiB7W2xsZW5ndGggJHJhaWxzX3NwZWNdICUgMiA9PSAxfSB7CisgICAgdXRsOjplcnJvciAiUEROIiA4MSAiRXhwZWN0ZWQgYW4gZXZlbiBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGxpc3QgZm9yIC1yYWlscyBvcHRpb24sIGdvdCBbbGxlbmd0aCAkcmFpbHNfc3BlY10uIgorICB9CisgIGNoZWNrX2xheWVyX25hbWVzIFtkaWN0IGtleXMgJHJhaWxzX3NwZWNdCisgIGZvcmVhY2ggbGF5ZXJfbmFtZSBbZGljdCBrZXlzICRyYWlsc19zcGVjXSB7CisgICAgaWYge1tkaWN0IGV4aXN0cyAkcmFpbHNfc3BlYyAkbGF5ZXJfbmFtZSB3aWR0aF19IHsKKyAgICAgIGNoZWNrX2xheWVyX3dpZHRoICRsYXllcl9uYW1lIFtkaWN0IGdldCAkcmFpbHNfc3BlYyAkbGF5ZXJfbmFtZSB3aWR0aF0KKyAgICB9CisgICAgaWYge1tkaWN0IGV4aXN0cyAkcmFpbHNfc3BlYyAkbGF5ZXJfbmFtZSBzcGFjaW5nXX0geworICAgICAgY2hlY2tfbGF5ZXJfc3BhY2luZyAkbGF5ZXJfbmFtZSBbZGljdCBnZXQgJHJhaWxzX3NwZWMgJGxheWVyX25hbWUgc3BhY2luZ10KKyAgICB9CisgICAgaWYgeyFbZGljdCBleGlzdHMgJHJhaWxzX3NwZWMgJGxheWVyX25hbWUgcGl0Y2hdfSB7CisgICAgICBkaWN0IHNldCByYWlsc19zcGVjICRsYXllcl9uYW1lIHBpdGNoIFtvcmQ6OmRidV90b19taWNyb25zIFtleHByIFtnZXRfcm93X2hlaWdodF0gKiAyXV0KKyAgICB9CisgIH0KKyAgcmV0dXJuICRyYWlsc19zcGVjCit9CisKK3Byb2MgY2hlY2tfc3RyYXBzIHtzdHJhcHNfc3BlY30geworICBpZiB7W2xsZW5ndGggJHN0cmFwc19zcGVjXSAlIDIgPT0gMX0geworICAgIHV0bDo6ZXJyb3IgIlBETiIgODMgIkV4cGVjdGVkIGFuIGV2ZW4gbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBsaXN0IGZvciBzdHJhcHMgc3BlY2lmaWNhdGlvbiwgZ290IFtsbGVuZ3RoICRzdHJhcHNfc3BlY10uIgorICB9CisgIGNoZWNrX2xheWVyX25hbWVzIFtkaWN0IGtleXMgJHN0cmFwc19zcGVjXQorICBmb3JlYWNoIGxheWVyX25hbWUgW2RpY3Qga2V5cyAkc3RyYXBzX3NwZWNdIHsKKyAgICBpZiB7W2RpY3QgZXhpc3RzICRzdHJhcHNfc3BlYyAkbGF5ZXJfbmFtZSB3aWR0aF19IHsKKyAgICAgIGNoZWNrX2xheWVyX3dpZHRoICRsYXllcl9uYW1lIFtkaWN0IGdldCAkc3RyYXBzX3NwZWMgJGxheWVyX25hbWUgd2lkdGhdCisgICAgfSBlbHNlIHsKKyAgICAgIHV0bDo6ZXJyb3IgUEROIDg0ICJNaXNzaW5nIHdpZHRoIHNwZWNpZmljYXRpb24gZm9yIHN0cmFwIG9uIGxheWVyICRsYXllcl9uYW1lLiIKKyAgICB9CisgICAgc2V0IHdpZHRoIFtvcmQ6Om1pY3JvbnNfdG9fZGJ1IFtkaWN0IGdldCAkc3RyYXBzX3NwZWMgJGxheWVyX25hbWUgd2lkdGhdXQorCisgICAgaWYgeyFbZGljdCBleGlzdHMgJHN0cmFwc19zcGVjICRsYXllcl9uYW1lIHNwYWNpbmddfSB7CisgICAgICBkaWN0IHNldCBzdHJhcHNfc3BlYyAkbGF5ZXJfbmFtZSBzcGFjaW5nIFtleHByIFtkaWN0IGdldCAkc3RyYXBzX3NwZWMgJGxheWVyX25hbWUgcGl0Y2hdIC8gMi4wXQorICAgIH0KKyAgICBjaGVja19sYXllcl9zcGFjaW5nICRsYXllcl9uYW1lIFtkaWN0IGdldCAkc3RyYXBzX3NwZWMgJGxheWVyX25hbWUgc3BhY2luZ10KKyAgICBzZXQgc3BhY2luZyBbb3JkOjptaWNyb25zX3RvX2RidSBbZGljdCBnZXQgJHN0cmFwc19zcGVjICRsYXllcl9uYW1lIHNwYWNpbmddXQorCisgICAgaWYge1tkaWN0IGV4aXN0cyAkc3RyYXBzX3NwZWMgJGxheWVyX25hbWUgcGl0Y2hdfSB7CisgICAgICBzZXQgbGF5ZXIgW1tvcmQ6OmdldF9kYl90ZWNoXSBmaW5kTGF5ZXIgJGxheWVyX25hbWVdCisgICAgICBzZXQgbWluUGl0Y2ggW2V4cHIgMiAqIChbJGxheWVyIGdldFNwYWNpbmddICsgJHdpZHRoKV0KKyAgICAgIGlmIHtbb3JkOjptaWNyb25zX3RvX2RidSBbZGljdCBnZXQgJHN0cmFwc19zcGVjICRsYXllcl9uYW1lIHBpdGNoXV0gPCAkbWluUGl0Y2h9IHsKKyAgICAgICAgdXRsOjplcnJvciAiUEROIiA4NSAiUGl0Y2ggW2RpY3QgZ2V0ICRzdHJhcHNfc3BlYyAkbGF5ZXJfbmFtZSBwaXRjaF0gc3BlY2lmaWVkIGZvciBsYXllciAkbGF5ZXJfbmFtZSBpcyBsZXNzIHRoYW4gMiB4ICh3aWR0aCArIHNwYWNpbmcpICh3aWR0aD1bb3JkOjpkYnVfdG9fbWljcm9ucyAkd2lkdGhdLCBzcGFjaW5nPVtvcmQ6OmRidV90b19taWNyb25zICRzcGFjaW5nXSkuIgorICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICB1dGw6OmVycm9yIFBETiA4NiAiTm8gcGl0Y2ggc3BlY2lmaWVkIGZvciBzdHJhcCBvbiBsYXllciAkbGF5ZXJfbmFtZS4iCisgICAgfQorICB9CisgIHJldHVybiAkc3RyYXBzX3NwZWMKK30KKworcHJvYyBjaGVja19jb25uZWN0IHtncmlkIGNvbm5lY3Rfc3BlY30geworICBmb3JlYWNoIGNvbm5lY3Rfc3RhdGVtZW50ICRjb25uZWN0X3NwZWMgeworICAgIGlmIHtbbGxlbmd0aCAkY29ubmVjdF9zdGF0ZW1lbnRdIDwgMn0geworICAgICAgdXRsOjplcnJvciBQRE4gODcgIkNvbm5lY3Qgc3RhdGVtZW50IG11c3QgY29uc2lzdCBvZiBhdCBsZWFzdCAyIGVudHJpZXMuIgorICAgIH0KKyAgICBjaGVja19sYXllcl9uYW1lcyBbbHJhbmdlICRjb25uZWN0X3N0YXRlbWVudCAwIDFdCisgICAgZGljdCBzZXQgbGF5ZXJzIFtsaW5kZXggJGNvbm5lY3Rfc3RhdGVtZW50IDBdIDEKKyAgICBkaWN0IHNldCBsYXllcnMgW2xpbmRleCAkY29ubmVjdF9zdGF0ZW1lbnQgMV0gMQorICB9CisKKyAgaWYge1tkaWN0IGdldCAkZ3JpZCB0eXBlXSA9PSAibWFjcm8ifSB7CisgICAgc2V0IHBpbl9sYXllcl9kZWZpbmVkIDAKKyAgICBzZXQgYWN0dWFsX2xheWVycyB7fQorICAgIGZvcmVhY2ggbGF5ZXJfbmFtZSBbZGljdCBrZXlzICRsYXllcnNdIHsKKyAgICAgIGlmIHtbcmVnZXhwIHsoLiopX1BJTl8oaG9yfHZlcikkfSAkbGF5ZXJfbmFtZSAtIGxheWVyXX0geworICAgICAgICBsYXBwZW5kIGFjdHVhbF9sYXllcnMgJGxheWVyCisgICAgICB9IGVsc2UgeworICAgICAgICBsYXBwZW5kIGFjdHVhbF9sYXllcnMgJGxheWVyX25hbWUKKyAgICAgIH0KKyAgICB9CisgIH0KKyAgcmV0dXJuICRjb25uZWN0X3NwZWMKK30KKworcHJvYyBjaGVja19jb3JlX3Jpbmcge2NvcmVfcmluZ19zcGVjfSB7CisgIGlmIHtbbGxlbmd0aCAkY29yZV9yaW5nX3NwZWNdICUgMiA9PSAxfSB7CisgICAgdXRsOjplcnJvciAiUEROIiAxMDkgIkV4cGVjdGVkIGFuIGV2ZW4gbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBsaXN0IGZvciBjb3JlX3Jpbmcgc3BlY2lmaWNhdGlvbiwgZ290IFtsbGVuZ3RoICRjb3JlX3Jpbmdfc3BlY10uIgorICB9CisgIHNldCBsYXllcl9kaXJlY3Rpb25zIHt9CisgIGNoZWNrX2xheWVyX25hbWVzIFtkaWN0IGtleXMgJGNvcmVfcmluZ19zcGVjXQorICBmb3JlYWNoIGxheWVyX25hbWUgW2RpY3Qga2V5cyAkY29yZV9yaW5nX3NwZWNdIHsKKyAgICBpZiB7W2RpY3QgZXhpc3RzICRjb3JlX3Jpbmdfc3BlYyAkbGF5ZXJfbmFtZSB3aWR0aF19IHsKKyAgICAgIGNoZWNrX2xheWVyX3dpZHRoICRsYXllcl9uYW1lIFtkaWN0IGdldCAkY29yZV9yaW5nX3NwZWMgJGxheWVyX25hbWUgd2lkdGhdCisgICAgfSBlbHNlIHsKKyAgICAgIHV0bDo6ZXJyb3IgUEROIDEyMSAiTWlzc2luZyB3aWR0aCBzcGVjaWZpY2F0aW9uIGZvciBzdHJhcCBvbiBsYXllciAkbGF5ZXJfbmFtZS4iCisgICAgfQorICAgIHNldCB3aWR0aCBbb3JkOjptaWNyb25zX3RvX2RidSBbZGljdCBnZXQgJGNvcmVfcmluZ19zcGVjICRsYXllcl9uYW1lIHdpZHRoXV0KKworICAgIGlmIHshW2RpY3QgZXhpc3RzICRjb3JlX3Jpbmdfc3BlYyAkbGF5ZXJfbmFtZSBzcGFjaW5nXX0geworICAgICAgZGljdCBzZXQgY29yZV9yaW5nX3NwZWMgJGxheWVyX25hbWUgc3BhY2luZyBbZXhwciBbZGljdCBnZXQgJGNvcmVfcmluZ19zcGVjICRsYXllcl9uYW1lIHBpdGNoXSAvIDIuMF0KKyAgICB9CisgICAgY2hlY2tfbGF5ZXJfc3BhY2luZyAkbGF5ZXJfbmFtZSBbZGljdCBnZXQgJGNvcmVfcmluZ19zcGVjICRsYXllcl9uYW1lIHNwYWNpbmddCisgICAgc2V0IHNwYWNpbmcgW29yZDo6bWljcm9uc190b19kYnUgW2RpY3QgZ2V0ICRjb3JlX3Jpbmdfc3BlYyAkbGF5ZXJfbmFtZSBzcGFjaW5nXV0KKyAgICBkaWN0IHNldCBsYXllcl9kaXJlY3Rpb25zIFtnZXRfZGlyICRsYXllcl9uYW1lXSAkbGF5ZXJfbmFtZQorCisgICAgaWYge1tkaWN0IGV4aXN0cyAkY29yZV9yaW5nX3NwZWMgJGxheWVyX25hbWUgY29yZV9vZmZzZXRdfSB7CisgICAgICBjaGVja19sYXllcl9zcGFjaW5nICRsYXllcl9uYW1lIFtkaWN0IGdldCAkY29yZV9yaW5nX3NwZWMgJGxheWVyX25hbWUgY29yZV9vZmZzZXRdCisgICAgfSBlbHNlaWYge1tkaWN0IGV4aXN0cyAkY29yZV9yaW5nX3NwZWMgJGxheWVyX25hbWUgcGFkX29mZnNldF19IHsKKyAgICAgIGNoZWNrX2xheWVyX3NwYWNpbmcgJGxheWVyX25hbWUgW2RpY3QgZ2V0ICRjb3JlX3Jpbmdfc3BlYyAkbGF5ZXJfbmFtZSBwYWRfb2Zmc2V0XQorICAgIH0gZWxzZSB7CisgICAgICB1dGw6OmVycm9yIFBETiAxNDYgIk11c3Qgc3BlY2lmdSBhIHBhZF9vZmZzZXQgb3IgY29yZV9vZmZzZXQgZm9yIHJpbmdzLiIKKyAgICB9CisgIH0KKyAgaWYge1tsbGVuZ3RoIFtkaWN0IGtleXMgJGxheWVyX2RpcmVjdGlvbnNdXSA9PSAwfSB7CisgICAgdXRsOjplcnJvciBQRE4gMTM5ICJObyBkaXJlY3Rpb24gZGVmaWVuZCBmb3IgbGF5ZXJzIFtkaWN0IGtleXMgJGNvcmVfcmluZ19zcGVjXS4iIAorICB9IGVsc2VpZiB7W2xsZW5ndGggW2RpY3Qga2V5cyAkbGF5ZXJfZGlyZWN0aW9uc11dID09IDF9IHsKKyAgICBzZXQgZGlyIFtkaWN0IGtleXMgJGxheWVyX2RpcmVjdGlvbnNdCisgICAgc2V0IGRpcmVjdGlvbiBbZXhwciAkZGlyID09ICJ2ZXIiID8gInZlcnRpY2FsIiA6ICJob3Jpem9udGFsIl0KKyAgICBzZXQgbWlzc2luZ19kaXJlY3Rpb24gW2V4cHIgJGRpciA9PSAidmVyIiA/ICJob3Jpem9udGFsIiA6ICJ2ZXJ0aWNhbCJdCisgICAgCisgICAgdXRsOjplcnJvciBQRE4gMTQwICJMYXllcnMgW2RpY3Qga2V5cyAkY29yZV9yaW5nX3NwZWNdIGFyZSBib3RoICRkaXJlY3Rpb24sIG1pc3NpbmcgbGF5ZXIgaW4gZGlyZWN0aW9uICRvdGhlcl9kaXJlY3Rpb24uIiAKKyAgfSBlbHNlaWYge1tsbGVuZ3RoIFtkaWN0IGtleXMgJGxheWVyX2RpcmVjdGlvbnNdXSA+IDJ9IHsKKyAgICB1dGw6OmVycm9yIFBETiAxNDEgIlVuZXhwZWN0ZWQgbnVtYmVyIG9mIGRpcmVjdGlvbnMgZm91bmQgZm9yIGxheWVycyBbZGljdCBrZXlzICRjb3JlX3Jpbmdfc3BlY10sIChbZGljdCBrZXlzICRsYXllcl9kaXJlY3Rpb25zXSkuIiAKKyAgfQorCisgIHJldHVybiAkY29yZV9yaW5nX3NwZWMKK30KKworcHJvYyBjaGVja19zdGFydHNfd2l0aCB7dmFsdWV9IHsKKyAgaWYgeyR2YWx1ZSAhPSAiUE9XRVIiICYmICR2YWx1ZSAhPSAiR1JPVU5EIn0geworICAgIHV0bDo6ZXJyb3IgUEROIDk1ICJWYWx1ZSBzcGVjaWZpZWQgZm9yIC1zdGFydHNfd2l0aCBvcHRpb24gKCR2YWx1ZSksIG11c3QgYmUgUE9XRVIgb3IgR1JPVU5ELiIKKyAgfQorCisgIHJldHVybiAkdmFsdWUKK30KKworcHJvYyBjaGVja192b2x0YWdlX2RvbWFpbnMge2RvbWFpbnN9IHsKKyAgdmFyaWFibGUgdm9sdGFnZV9kb21haW5zCisKKyAgZm9yZWFjaCBkb21haW4gJGRvbWFpbnMgeworICAgIGlmIHtbbHNlYXJjaCBbZGljdCBrZXlzICR2b2x0YWdlX2RvbWFpbnNdICRkb21haW5dID09IC0xfSB7CisgICAgICB1dGw6OmVycm9yIFBETiAxMTAgIlZvbHRhZ2UgZG9tYWluICRkb21haW4gaGFzIG5vdCBiZWVuIHNwZWNpZmllZCwgdXNlIHNldF92b2x0YWdlX2RvbWFpbiB0byBjcmVhdGUgdGhpcyB2b2x0YWdlIGRvbWFpbi4iCisgICAgfQorICB9CisKKyAgcmV0dXJuICRkb21haW5zCit9CisKK3Byb2MgY2hlY2tfaW5zdGFuY2VzIHtpbnN0YW5jZXN9IHsKKyAgdmFyaWFibGUgJGJsb2NrCisKKyAgZm9yZWFjaCBpbnN0YW5jZSAkaW5zdGFuY2VzIHsKKyAgICBpZiB7WyRibG9jayBmaW5kSW5zdCAkaW5zdGFuY2VdID09ICJOVUxMIn0geworICAgICAgdXRsOjplcnJvciBQRE4gMTExICJJbnN0YW5jZSAkaW5zdGFuY2UgZG9lcyBub3QgZXhpc3QgaW4gdGhlIGRlc2lnbi4iCisgICAgfQorICB9CisKKyAgcmV0dXJuICRpbnN0YW5jZXMKK30KKworcHJvYyBjaGVja19jZWxscyB7Y2VsbHN9IHsKKyAgZm9yZWFjaCBjZWxsICRjZWxscyB7CisgICAgaWYge1tbb3JkOjpnZXRfZGJdIGZpbmRNYXN0ZXIgJGNlbGxdID09ICJOVUxMIn0geworICAgICAgdXRsOjp3YXJuIFBETiAxMTIgIkNlbGwgJGNlbGwgbm90IGxvYWRlZCBpbnRvIHRoZSBkYXRhYmFzZS4iCisgICAgfQorICB9CisKKyAgcmV0dXJuICRjZWxscworfQorCitwcm9jIGNoZWNrX3JlZ2lvbiB7cmVnaW9uX25hbWV9IHsKKyAgc2V0IGJsb2NrIFtvcmQ6OmdldF9kYl9ibG9ja10KKworICBpZiB7WyRibG9jayBmaW5kUmVnaW9uICRyZWdpb25fbmFtZV0gPT0gIk5VTEwifSB7CisgICAgdXRsOjplcnJvciBQRE4gMTI3ICJObyByZWdpb24gJHJlZ2lvbl9uYW1lIGZvdW5kIGluIHRoZSBkZXNpZ24gZm9yIHZvbHRhZ2VfZG9tYWluLiIKKyAgfQorCisgIHJldHVybiAkcmVnaW9uX25hbWUKK30KKworcHJvYyBjaGVja19wb3dlciB7cG93ZXJfbmV0X25hbWV9IHsKKyAgc2V0IGJsb2NrIFtvcmQ6OmdldF9kYl9ibG9ja10KKworICBpZiB7W3NldCBuZXQgWyRibG9jayBmaW5kTmV0ICRwb3dlcl9uZXRfbmFtZV1dID09ICJOVUxMIn0geworICAgIHNldCBuZXQgW29kYjo6ZGJOZXRfY3JlYXRlICRibG9jayAkcG93ZXJfbmV0X25hbWVdCisgICAgJG5ldCBzZXRTcGVjaWFsCisgICAgJG5ldCBzZXRTaWdUeXBlICJQT1dFUiIKKyAgfSBlbHNlIHsKKyAgICBpZiB7WyRuZXQgZ2V0U2lnVHlwZV0gIT0gIlBPV0VSIn0geworICAgICAgdXRsOjplcnJvciBQRE4gMTI4ICJOZXQgJHBvd2VyX25ldF9uYW1lIGFscmVhZHkgZXhpc3RzIGluIHRoZSBkZXNpZ24sIGJ1dCBpcyBvZiBzaWduYWwgdHlwZSBbJG5ldCBnZXRTaWdUeXBlXS4iCisgICAgfQorICB9CisgIHJldHVybiAkcG93ZXJfbmV0X25hbWUKK30KKworcHJvYyBjaGVja19zZWNvbmRhcnlfcG93ZXIge3NlY29uZGFyeV9wb3dlcl9uZXRfbmFtZX0geworICBzZXQgYmxvY2sgW29yZDo6Z2V0X2RiX2Jsb2NrXQorCisgIGZvcmVhY2ggc2Vjb25kYXJ5X3Bvd2VyICRzZWNvbmRhcnlfcG93ZXJfbmV0X25hbWUgeworICAgIGlmIHtbc2V0IG5ldCBbJGJsb2NrIGZpbmROZXQgJHNlY29uZGFyeV9wb3dlcl1dID09ICJOVUxMIn0geworICAgICAgc2V0IG5ldCBbb2RiOjpkYk5ldF9jcmVhdGUgJGJsb2NrICRzZWNvbmRhcnlfcG93ZXJdCisgICAgICAkbmV0IHNldFNwZWNpYWwKKyAgICAgICRuZXQgc2V0U2lnVHlwZSAiUE9XRVIiCisgICAgfSBlbHNlIHsKKyAgICAgIGlmIHtbJG5ldCBnZXRTaWdUeXBlXSAhPSAiUE9XRVIifSB7CisgICAgICAgIHV0bDo6ZXJyb3IgUEROIDE3NiAiTmV0ICRzZWNvbmRhcnlfcG93ZXIgYWxyZWFkeSBleGlzdHMgaW4gdGhlIGRlc2lnbiwgYnV0IGlzIG9mIHNpZ25hbCB0eXBlIFskbmV0IGdldFNpZ1R5cGVdLiIKKyAgICAgIH0KKyAgICB9CisgIH0KKyAgcmV0dXJuICRzZWNvbmRhcnlfcG93ZXJfbmV0X25hbWUKK30KKworcHJvYyBjaGVja19ncm91bmQge2dyb3VuZF9uZXRfbmFtZX0geworICBzZXQgYmxvY2sgW29yZDo6Z2V0X2RiX2Jsb2NrXQorCisgIGlmIHtbc2V0IG5ldCBbJGJsb2NrIGZpbmROZXQgJGdyb3VuZF9uZXRfbmFtZV1dID09ICJOVUxMIn0geworICAgIHNldCBuZXQgW29kYjo6ZGJOZXRfY3JlYXRlICRibG9jayAkZ3JvdW5kX25ldF9uYW1lXQorICAgICRuZXQgc2V0U3BlY2lhbAorICAgICRuZXQgc2V0U2lnVHlwZSAiR1JPVU5EIgorICB9IGVsc2UgeworICAgIGlmIHtbJG5ldCBnZXRTaWdUeXBlXSAhPSAiR1JPVU5EIn0geworICAgICAgdXRsOjplcnJvciBQRE4gMTI5ICJOZXQgJGdyb3VuZF9uZXRfbmFtZSBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgZGVzaWduLCBidXQgaXMgb2Ygc2lnbmFsIHR5cGUgWyRuZXQgZ2V0U2lnVHlwZV0uIgorICAgIH0KKyAgfQorICByZXR1cm4gJGdyb3VuZF9uZXRfbmFtZQorfQorCitwcm9jIHNldF92b2x0YWdlX2RvbWFpbiB7YXJnc30geworICB2YXJpYWJsZSB2b2x0YWdlX2RvbWFpbnMKKworICBzZXQgdm9sdGFnZV9kb21haW4ge30KKyAgc2V0IHByb2Nlc3NfYXJncyAkYXJncworICB3aGlsZSB7W2xsZW5ndGggJHByb2Nlc3NfYXJnc10gPiAwfSB7CisgICAgc2V0IGFyZyBbbGluZGV4ICRwcm9jZXNzX2FyZ3MgMF0KKyAgICBzZXQgdmFsdWUgW2xpbmRleCAkcHJvY2Vzc19hcmdzIDFdCisKKyAgICBzd2l0Y2ggJGFyZyB7CisgICAgICAtbmFtZSAgICAgICAgICAgIHtkaWN0IHNldCB2b2x0YWdlX2RvbWFpbiBuYW1lICR2YWx1ZX0KKyAgICAgIC1wb3dlciAgICAgICAgICAge2RpY3Qgc2V0IHZvbHRhZ2VfZG9tYWluIHByaW1hcnlfcG93ZXIgW2NoZWNrX3Bvd2VyICR2YWx1ZV19CisgICAgICAtc2Vjb25kYXJ5X3Bvd2VyIHtkaWN0IHNldCB2b2x0YWdlX2RvbWFpbiBzZWNvbmRhcnlfcG93ZXIgW2NoZWNrX3NlY29uZGFyeV9wb3dlciAkdmFsdWVdfQorICAgICAgLWdyb3VuZCAgICAgICAgICB7ZGljdCBzZXQgdm9sdGFnZV9kb21haW4gcHJpbWFyeV9ncm91bmQgW2NoZWNrX2dyb3VuZCAkdmFsdWVdfQorICAgICAgLXJlZ2lvbiAgICAgICAgICB7ZGljdCBzZXQgdm9sdGFnZV9kb21haW4gcmVnaW9uIFtjaGVja19yZWdpb24gJHZhbHVlXX0KKyAgICAgIGRlZmF1bHQgICAgICAgICAge3V0bDo6ZXJyb3IgUEROIDEzMCAiVW5yZWNvZ25pemVkIGFyZ3VtZW50ICRhcmcsIHNob3VsZCBiZSBvbmUgb2YgLW5hbWUsIC1wb3dlciwgLWdyb3VuZCAtcmVnaW9uLiJ9CisgICAgfQorCisgICAgc2V0IHByb2Nlc3NfYXJncyBbbHJhbmdlICRwcm9jZXNzX2FyZ3MgMiBlbmRdCisgIH0KKyAgZGljdCBzZXQgdm9sdGFnZV9kb21haW5zIFtkaWN0IGdldCAkdm9sdGFnZV9kb21haW4gbmFtZV0gJHZvbHRhZ2VfZG9tYWluCit9CisKK3Byb2MgY2hlY2tfZGlyZWN0aW9uIHtkaXJlY3Rpb259IHsKKyAgaWYgeyRkaXJlY3Rpb24gIT0gImhvcml6b250YWwiICYmICRkaXJlY3Rpb24gIT0gInZlcnRpY2FsIn0geworICAgIHV0bDo6ZXJyb3IgUEROIDEzOCAiVW5leHBlY3RlZCB2YWx1ZSBmb3IgZGlyZWN0aW9uICgkZGlyZWN0aW9uKSwgc2hvdWxkIGJlIGhvcml6b250YWwgb3IgdmVydGljYWwuIgorICB9CisgIHJldHVybiAkZGlyZWN0aW9uCit9CisKK3Byb2MgY2hlY2tfbnVtYmVyIHt2YWx1ZX0geworICBpZiB7IVtzdHJpbmcgaXMgZG91YmxlICR2YWx1ZV19IHsKKyAgICBlcnJvciAidmFsdWUgKCR2YWx1ZSkgbm90IHJlY29nbml6ZWQgYXMgYSBudW1iZXIuIgorICB9CisKKyAgcmV0dXJuICR2YWx1ZQorfQorCitwcm9jIGNoZWNrX2hhbG8ge3ZhbHVlfSB7CisgIGZvcmVhY2ggaXRlbSAkdmFsdWUgeworICAgIGlmIHtbY2F0Y2gge2NoZWNrX251bWJlciAkaXRlbX0gbXNnXX0geworICAgICAgdXRsOjplcnJvciBQRE4gMTY0ICJQcm9ibGVtIHdpdGggaGFsbyBzcGVjaWZpY2F0aW9uLCAkbXNnLiIKKyAgICB9CisgIH0KKworICByZXR1cm4gJHZhbHVlCit9CisKK3Byb2MgZGVmaW5lX3Bkbl9ncmlkIHthcmdzfSB7CisgIHZhcmlhYmxlIGN1cnJlbnRfZ3JpZAorCisgIHNldCBncmlkIHt9CisKKyAgc2V0IHByb2Nlc3NfYXJncyAkYXJncworICB3aGlsZSB7W2xsZW5ndGggJHByb2Nlc3NfYXJnc10gPiAwfSB7CisgICAgc2V0IGFyZyBbbGluZGV4ICRwcm9jZXNzX2FyZ3MgMF0KKyAgICBzZXQgdmFsdWUgW2xpbmRleCAkcHJvY2Vzc19hcmdzIDFdCisKKyAgICBzd2l0Y2ggJGFyZyB7CisgICAgICAtbmFtZSAgICAgICAgICAgICAge2RpY3Qgc2V0IGdyaWQgbmFtZSAkdmFsdWV9CisgICAgICAtdm9sdGFnZV9kb21haW5zICAge2RpY3Qgc2V0IGdyaWQgdm9sdGFnZV9kb21haW5zIFtjaGVja192b2x0YWdlX2RvbWFpbnMgJHZhbHVlXX0KKyAgICAgIC1tYWNybyAgICAgICAgICAgICB7ZGljdCBzZXQgZ3JpZCB0eXBlIG1hY3JvfQorICAgICAgLWdyaWRfb3Zlcl9wZ19waW5zIHtkaWN0IHNldCBncmlkIGdyaWRfb3Zlcl9wZ19waW5zICR2YWx1ZX0KKyAgICAgIC1vcmllbnQgICAgICAgICAgICB7ZGljdCBzZXQgZ3JpZCBvcmllbnQgW2NoZWNrX29yaWVudGF0aW9ucyAkdmFsdWVdfQorICAgICAgLWluc3RhbmNlcyAgICAgICAgIHtkaWN0IHNldCBncmlkIGluc3RhbmNlcyBbY2hlY2tfaW5zdGFuY2VzICR2YWx1ZV19CisgICAgICAtY2VsbHMgICAgICAgICAgICAge2RpY3Qgc2V0IGdyaWQgbWFjcm8gW2NoZWNrX2NlbGxzICR2YWx1ZV19CisgICAgICAtaGFsbyAgICAgICAgICAgICAge2RpY3Qgc2V0IGdyaWQgaGFsbyBbY2hlY2tfaGFsbyBbbG1hcCB4ICR2YWx1ZSB7b3JkOjptaWNyb25zX3RvX2RidSBbY2hlY2tfbnVtYmVyICR4XX1dXX0KKyAgICAgIC1waW5zICAgICAgICAgICAgICB7ZGljdCBzZXQgZ3JpZCBwaW5zIFtjaGVja19sYXllcl9uYW1lcyAkdmFsdWVdfQorICAgICAgLXN0YXJ0c193aXRoICAgICAgIHtkaWN0IHNldCBncmlkIHN0YXJ0c193aXRoIFtjaGVja19zdGFydHNfd2l0aCAkdmFsdWVdfQorICAgICAgLXBpbl9kaXJlY3Rpb24gICAgIHtkaWN0IHNldCBncmlkIHBpbl9kaXJlY3Rpb24gW2NoZWNrX2RpcmVjdGlvbiAkdmFsdWVdfQorICAgICAgZGVmYXVsdCAgICAgICAgICAgIHt1dGw6OmVycm9yIFBETiA4OCAiVW5yZWNvZ25pemVkIGFyZ3VtZW50ICRhcmcsIHNob3VsZCBiZSBvbmUgb2YgLW5hbWUsIC1vcmllbnQsIC1pbnN0YW5jZXMgLWNlbGxzIC1waW5zIC1zdGFydHNfd2l0aC4ifQorICAgIH0KKworICAgIHNldCBwcm9jZXNzX2FyZ3MgW2xyYW5nZSAkcHJvY2Vzc19hcmdzIDIgZW5kXQorICB9CisKKyAgc2V0IGN1cnJlbnRfZ3JpZCBbdmVyaWZ5X2dyaWQgJGdyaWRdCit9CisKK3Byb2MgZ2V0X2dyaWQge2dyaWRfbmFtZX0geworICB2YXJpYWJsZSBkZXNpZ25fZGF0YQorCisgIGlmIHtbZGljdCBleGlzdHMgJGRlc2lnbl9kYXRhIGdyaWRdfSB7CisgICAgZGljdCBmb3Ige3R5cGUgZ3JpZHN9IFtkaWN0IGdldCAkZGVzaWduX2RhdGEgZ3JpZF0geworICAgICAgZGljdCBmb3Ige25hbWUgZ3JpZH0gJGdyaWRzIHsKKyAgICAgICAgaWYgeyRuYW1lID09ICRncmlkX25hbWV9IHsKKyAgICAgICAgICByZXR1cm4gJGdyaWQKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorCisgIHJldHVybiB7fQorfQorCitwcm9jIGNoZWNrX2dyaWQge2dyaWR9IHsKKyAgaWYgeyRncmlkID09IHt9fSB7CisgICAgdXRsOjplcnJvciBQRE4gIDExMyAiVGhlIGdyaWQgJGdyaWRfbmFtZSBoYXMgbm90IGJlZW4gZGVmaW5lZC4iCisgIH0KKyAgcmV0dXJuICRncmlkCit9CisKK3Byb2MgY2hlY2tfcG93ZXJfZ3JvdW5kIHt2YWx1ZX0geworICBpZiB7JHZhbHVlID09ICJQT1dFUiIgfHwgJHZhbHVlID09ICJHUk9VTkQifSB7CisgICAgcmV0dXJuICR2YWx1ZQorICB9CisgIHV0bDo6ZXJyb3IgUEROIDExNCAiVW5leHBlY3RlZCB2YWx1ZSAoJHZhbHVlKSwgbXVzdCBiZSBlaXRoZXIgUE9XRVIgb3IgR1JPVU5ELiIKK30KKworcHJvYyBhZGRfcGRuX3N0cmlwZSB7YXJnc30geworICB2YXJpYWJsZSBjdXJyZW50X2dyaWQKKworICBpZiB7W2RpY3QgZXhpc3RzICRhcmdzIC1ncmlkXX0geworICAgIHNldCBjdXJyZW50X2dyaWQgW2NoZWNrX2dyaWQgW2dldF9ncmlkIFtkaWN0IGdldCAkYXJncyAtZ3JpZF1dXQorICB9CisgIHNldCBncmlkICRjdXJyZW50X2dyaWQKKworICBzZXQgc3RyaXBlIFtkaWN0IGdldCAkYXJncyBzdHJpcGVdCisgIHNldCBsYXllciBbY2hlY2tfbGF5ZXJfbmFtZXMgW2RpY3QgZ2V0ICRhcmdzIC1sYXllcl1dCisKKyAgc2V0IHByb2Nlc3NfYXJncyAkYXJncworICB3aGlsZSB7W2xsZW5ndGggJHByb2Nlc3NfYXJnc10gPiAwfSB7CisgICAgc2V0IGFyZyBbbGluZGV4ICRwcm9jZXNzX2FyZ3MgMF0KKyAgICBzZXQgdmFsdWUgW2xpbmRleCAkcHJvY2Vzc19hcmdzIDFdCisKKyAgICBzd2l0Y2ggJGFyZyB7CisgICAgICAtZ3JpZCAgICAgICAgICAgIHs7fQorICAgICAgLWxheWVyICAgICAgICAgICB7O30KKyAgICAgIC13aWR0aCAgICAgICAgICAge2RpY3Qgc2V0IGdyaWQgJHN0cmlwZSAkbGF5ZXIgd2lkdGggJHZhbHVlfQorICAgICAgLXNwYWNpbmcgICAgICAgICB7ZGljdCBzZXQgZ3JpZCAkc3RyaXBlICRsYXllciBzcGFjaW5nICR2YWx1ZX0KKyAgICAgIC1vZmZzZXQgICAgICAgICAge2RpY3Qgc2V0IGdyaWQgJHN0cmlwZSAkbGF5ZXIgb2Zmc2V0ICR2YWx1ZX0KKyAgICAgIC1waXRjaCAgICAgICAgICAge2RpY3Qgc2V0IGdyaWQgJHN0cmlwZSAkbGF5ZXIgcGl0Y2ggJHZhbHVlfQorICAgICAgLXN0YXJ0c193aXRoICAgICB7ZGljdCBzZXQgZ3JpZCAkc3RyaXBlICRsYXllciBzdGFydHNfd2l0aCBbY2hlY2tfcG93ZXJfZ3JvdW5kICR2YWx1ZV19CisgICAgICAtZXh0ZW5kX3RvX2NvcmVfcmluZyB7ZGljdCBzZXQgZ3JpZCAkc3RyaXBlICRsYXllciBleHRlbmRfdG9fY29yZV9yaW5nIDF9CisgICAgICBzdHJpcGUgICAgICAgICAgIHs7fQorICAgICAgZGVmYXVsdCAgICAgICAgICB7dXRsOjplcnJvciBQRE4gMTI0ICJVbnJlY29nbml6ZWQgYXJndW1lbnQgJGFyZywgc2hvdWxkIGJlIG9uZSBvZiAtZ3JpZCwgLXR5cGUsIC1vcmllbnQsIC1wb3dlcl9waW5zLCAtZ3JvdW5kX3BpbnMsIC1ibG9ja2FnZXMsIC1yYWlscywgLXN0cmFwcywgLWNvbm5lY3QuIn0KKyAgICB9CisKKyAgICBzZXQgcHJvY2Vzc19hcmdzIFtscmFuZ2UgJHByb2Nlc3NfYXJncyAyIGVuZF0KKyAgfQorCisgIHNldCBjdXJyZW50X2dyaWQgW3ZlcmlmeV9ncmlkICRncmlkXQorfQorCitwcm9jIGNoZWNrX21heF9sZW5ndGgge3ZhbHVlcyBtYXhfbGVuZ3RofSB7CisgIGlmIHtbbGxlbmd0aCAkdmFsdWVzXSA+ICRtYXhfbGVuZ3RofSB7CisgICAgZXJyb3IgIltsbGVuZ3RoICR2YWx1ZXNdIHByb3ZpZGVkLCBtYXhpbXVtIG9mICRtYXhfbGVuZ3RoIHZhbHVlcyBhbGxvd2VkLiIKKyAgfQorfQorCitwcm9jIGNoZWNrX2dyaWRfdm9sdGFnZV9kb21haW5zIHtncmlkfSB7CisgIGlmIHshW2RpY3QgZXhpc3RzICRncmlkIHZvbHRhZ2VfZG9tYWluc119IHsKKyAgICB1dGw6OmVycm9yIFBETiAxNTggIk5vIHZvbHRhZ2UgZG9tYWlucyBkZWZpbmVkIGZvciBncmlkLiIKKyAgfQorfQorCitwcm9jIGdldF92b2x0YWdlX2RvbWFpbl9ieV9uYW1lIHtkb21haW5fbmFtZX0geworICB2YXJpYWJsZSB2b2x0YWdlX2RvbWFpbnMKKworICBpZiB7W2RpY3QgZXhpc3RzICR2b2x0YWdlX2RvbWFpbnMgJGRvbWFpbl9uYW1lXX0geworICAgIHJldHVybiBbZGljdCBnZXQgJHZvbHRhZ2VfZG9tYWlucyAkZG9tYWluX25hbWVdCisgIH0KKworICB1dGw6OmVycm9yIFBETiAxNTkgIlZvbHRhZ2UgZG9tYWlucyAkZG9tYWluX25hbWUgaGFzIG5vdCBiZWVuIGRlZmluZWQuIgorfQorCitwcm9jIG1hdGNoX2luc3RfY29ubmVjdGlvbiB7aW5zdCBuZXRfbmFtZX0geworICB2YXJpYWJsZSBnbG9iYWxfY29ubmVjdGlvbnMKKworICBmb3JlYWNoIHBhdHRlcm4gW2RpY3QgZ2V0ICRnbG9iYWxfY29ubmVjdGlvbnMgJG5ldF9uYW1lXSB7CisgICAgaWYge1tyZWdleHAgW2RpY3QgZ2V0ICRwYXR0ZXJuIGluc3RfbmFtZV0gWyRpbnN0IGdldE5hbWVdXX0geworICAgICAgZm9yZWFjaCBwaW4gW1skaW5zdCBnZXRNYXN0ZXJdIGdldE1UZXJtc10geworICAgICAgICBpZiB7W3JlZ2V4cCBbZGljdCBnZXQgJHBhdHRlcm4gcGluX25hbWVdIFskcGluIGdldE5hbWVdXX0geworICAgICAgICAgIHJldHVybiAxCisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKyAgcmV0dXJuIDAKK30KKworcHJvYyBpc19pbnN0X2luX3ZvbHRhZ2VfZG9tYWluIHtpbnN0IGRvbWFpbl9uYW1lfSB7CisgIHNldCB2b2x0YWdlX2RvbWFpbiBbZ2V0X3ZvbHRhZ2VfZG9tYWluX2J5X25hbWUgJGRvbWFpbl9uYW1lXQorCisgICMgVGhlIGluc3RhbmNlIGlzIGluIHRoZSB2b2x0YWdlIGRvbWFpbiBpZiBpdCBjb25uZWN0ZWQgdG8gYm90aCByZWxhdGVkIHBvd2VyIGFuZCBncm91bmQgbmV0cworICBzZXQgcG93ZXJfbmV0IFtkaWN0IGdldCAkdm9sdGFnZV9kb21haW4gcHJpbWFyeV9wb3dlcl0KKyAgc2V0IGdyb3VuZF9uZXQgW2RpY3QgZ2V0ICR2b2x0YWdlX2RvbWFpbiBwcmltYXJ5X2dyb3VuZF0KKworICByZXR1cm4gW21hdGNoX2luc3RfY29ubmVjdGlvbiAkaW5zdCAkcG93ZXJfbmV0XSAmJiBbbWF0Y2hfaW5zdF9jb25uZWN0aW9uICRpbnN0ICRncm91bmRfbmV0XQorfQorCitwcm9jIGdldF9ibG9ja19pbnN0X21hc3RlcnMge30geworICB2YXJpYWJsZSBibG9ja19tYXN0ZXJzCisKKyAgaWYge1tsbGVuZ3RoICRibG9ja19tYXN0ZXJzXSA9PSAwfSB7CisgICAgZm9yZWFjaCBpbnN0IFtbb3JkOjpnZXRfZGJfYmxvY2tdIGdldEluc3RzXSB7CisgICAgICBpZiB7W2xzZWFyY2ggJGJsb2NrX21hc3RlcnMgW1skaW5zdCBnZXRNYXN0ZXJdIGdldE5hbWVdXSA9PSAtMX0geworICAgICAgICBsYXBwZW5kIGJsb2NrX21hc3RlcnMgW1skaW5zdCBnZXRNYXN0ZXJdIGdldE5hbWVdCisgICAgICB9CisgICAgfQorICB9CisgIHJldHVybiAkYmxvY2tfbWFzdGVycworfQorCitwcm9jIGlzX2NlbGxfcHJlc2VudCB7Y2VsbF9uYW1lfSB7CisgIHJldHVybiBbbHNlYXJjaCBbZ2V0X2Jsb2NrX2luc3RfbWFzdGVyc10gJGNlbGxfbmFtZV0gPiAtMQorfQorCitwcm9jIGNoZWNrX3B3cl9wYWRzIHtncmlkIGNlbGxzfSB7CisgIGNoZWNrX2dyaWRfdm9sdGFnZV9kb21haW5zICRncmlkCisgIHNldCB2b2x0YWdlX2RvbWFpbnMgW2RpY3QgZ2V0ICRncmlkIHZvbHRhZ2VfZG9tYWluc10KKyAgc2V0IHB3cl9wYWRzIHt9CisgIHNldCBpbnN0X2V4YW1wbGUge30KKyAgZm9yZWFjaCB2b2x0YWdlX2RvbWFpbiAkdm9sdGFnZV9kb21haW5zIHsKKworICAgIHNldCBuZXRfbmFtZSBbZ2V0X3ZvbHRhZ2VfZG9tYWluX3Bvd2VyICR2b2x0YWdlX2RvbWFpbl0KKyAgICBpZiB7W3NldCBuZXQgW1tvcmQ6OmdldF9kYl9ibG9ja10gZmluZE5ldCAkbmV0X25hbWVdXSA9PSAiTlVMTCJ9IHsKKyAgICAgIHV0bDo6ZXJyb3IgUEROIDE0OSAiUG93ZXIgbmV0ICRuZXRfbmFtZSBub3QgZm91bmQuIgorICAgIH0KKyAgICBzZXQgZmluZF9jZWxscyAkY2VsbHMKKyAgICBmb3JlYWNoIGluc3QgW1tvcmQ6OmdldF9kYl9ibG9ja10gZ2V0SW5zdHNdIHsKKyAgICAgIGlmIHtbc2V0IGlkeCBbbHNlYXJjaCAkZmluZF9jZWxscyBbWyRpbnN0IGdldE1hc3Rlcl0gZ2V0TmFtZV1dXSA+IC0xfSB7CisgICAgICAgIGlmIHshW2lzX2luc3RfaW5fdm9sdGFnZV9kb21haW4gJGluc3QgJHZvbHRhZ2VfZG9tYWluXX0ge2NvbnRpbnVlfQorICAgICAgICAjIE9ubHkgbmVlZCBvbmUgZXhhbXBsZSBvZiBlYWNoIGNlbGwKKyAgICAgICAgc2V0IGNlbGxfbmFtZSBbbGluZGV4ICRmaW5kX2NlbGxzICRpZHhdCisgICAgICAgIHNldCBmaW5kX2NlbGxzIFtscmVwbGFjZSAkZmluZF9jZWxscyAkaWR4ICRpZHhdCisgICAgICAgIGRpY3Qgc2V0IGluc3RfZXhhbXBsZSAkY2VsbF9uYW1lICRpbnN0CisgICAgICB9CisgICAgICBpZiB7W2xsZW5ndGggJGZpbmRfY2VsbHNdID09IDB9IHticmVha30KKyAgICB9CisgICAgaWYge1tsbGVuZ3RoICRmaW5kX2NlbGxzXSA+IDB9IHsKKyAgICAgIHV0bDo6d2FybiBQRE4gMTUwICJDYW5ub3QgZmluZCBjZWxscyAoW2pvaW4gJGZpbmRfY2VsbHMgeywgfV0pIGluIHZvbHRhZ2UgZG9tYWluICR2b2x0YWdlX2RvbWFpbi4iCisgICAgfQorICAgIGRpY3QgZm9yIHtjZWxsIGluc3R9ICRpbnN0X2V4YW1wbGUgeworICAgICAgc2V0IHBpbl9uYW1lIFtnZXRfaW5zdF9waW5fY29ubmVjdGVkX3RvX25ldCAkaW5zdCAkbmV0XQorICAgICAgZGljdCBsYXBwZW5kIHB3cl9wYWRzICRwaW5fbmFtZSAkY2VsbAorICAgIH0KKyAgfQorCisgIHJldHVybiAkcHdyX3BhZHMKK30KKworcHJvYyBjaGVja19nbmRfcGFkcyB7Z3JpZCBjZWxsc30geworICBjaGVja19ncmlkX3ZvbHRhZ2VfZG9tYWlucyAkZ3JpZAorICBzZXQgdm9sdGFnZV9kb21haW5zIFtkaWN0IGdldCAkZ3JpZCB2b2x0YWdlX2RvbWFpbnNdCisgIHNldCBnbmRfcGFkcyB7fQorICBzZXQgaW5zdF9leGFtcGxlIHt9CisgIGZvcmVhY2ggdm9sdGFnZV9kb21haW4gJHZvbHRhZ2VfZG9tYWlucyB7CisgICAgc2V0IG5ldF9uYW1lIFtnZXRfdm9sdGFnZV9kb21haW5fZ3JvdW5kICR2b2x0YWdlX2RvbWFpbl0KKyAgICBpZiB7W3NldCBuZXQgW1tvcmQ6OmdldF9kYl9ibG9ja10gZmluZE5ldCAkbmV0X25hbWVdXSA9PSAiTlVMTCJ9IHsKKyAgICAgIHV0bDo6ZXJyb3IgUEROIDE1MSAiR3JvdW5kIG5ldCAkbmV0X25hbWUgbm90IGZvdW5kLiIKKyAgICB9CisgICAgc2V0IGZpbmRfY2VsbHMgJGNlbGxzCisgICAgZm9yZWFjaCBpbnN0IFtbb3JkOjpnZXRfZGJfYmxvY2tdIGdldEluc3RzXSB7CisgICAgICBpZiB7W3NldCBpZHggW2xzZWFyY2ggJGZpbmRfY2VsbHMgW1skaW5zdCBnZXRNYXN0ZXJdIGdldE5hbWVdXV0gPiAtMX0geworICAgICAgICBpZiB7IVtpc19pbnN0X2luX3ZvbHRhZ2VfZG9tYWluICRpbnN0ICR2b2x0YWdlX2RvbWFpbl19IHtjb250aW51ZX0KKyAgICAgICAgIyBPbmx5IG5lZWQgb25lIGV4YW1wbGUgb2YgZWFjaCBjZWxsCisgICAgICAgIHNldCBjZWxsX25hbWUgW2xpbmRleCAkZmluZF9jZWxscyAkaWR4XQorICAgICAgICBzZXQgZmluZF9jZWxscyBbbHJlcGxhY2UgJGZpbmRfY2VsbHMgJGlkeCAkaWR4XQorICAgICAgICBkaWN0IHNldCBpbnN0X2V4YW1wbGUgJGNlbGxfbmFtZSAkaW5zdAorICAgICAgfQorICAgICAgaWYge1tsbGVuZ3RoICRmaW5kX2NlbGxzXSA9PSAwfSB7YnJlYWt9CisgICAgfQorICAgIGlmIHtbbGxlbmd0aCAkZmluZF9jZWxsc10gPiAwfSB7CisgICAgICB1dGw6Ondhcm4gUEROIDE1MiAiQ2Fubm90IGZpbmQgY2VsbHMgKFtqb2luICRmaW5kX2NlbGxzIHssIH1dKSBpbiB2b2x0YWdlIGRvbWFpbiAkdm9sdGFnZV9kb21haW4uIgorICAgIH0KKyAgICBkaWN0IGZvciB7Y2VsbCBpbnN0fSAkaW5zdF9leGFtcGxlIHsKKyAgICAgIHNldCBwaW5fbmFtZSBbZ2V0X2luc3RfcGluX2Nvbm5lY3RlZF90b19uZXQgJGluc3QgJG5ldF0KKyAgICAgIGRpY3QgbGFwcGVuZCBnbmRfcGFkcyAkcGluX25hbWUgJGNlbGwKKyAgICB9CisgIH0KKyAgcmV0dXJuICRnbmRfcGFkcworfQorCitwcm9jIGFkZF9wZG5fcmluZyB7YXJnc30geworICB2YXJpYWJsZSBjdXJyZW50X2dyaWQKKworICBpZiB7W2RpY3QgZXhpc3RzICRhcmdzIC1ncmlkXX0geworICAgIHNldCBjdXJyZW50X2dyaWQgW2NoZWNrX2dyaWQgW2dldF9ncmlkIFtkaWN0IGdldCAkYXJncyAtZ3JpZF1dXQorICAgICNEaW5lc2gtQTogQ29yZSBSaW5nIHdpdGhvdXQgU3RyYXAKKyAgICBzZXQgZ3JpZCAkY3VycmVudF9ncmlkCisgIH0KKyAgc2V0IGxheWVycyBbY2hlY2tfbGF5ZXJfbmFtZXMgW2RpY3QgZ2V0ICRhcmdzIC1sYXllcnNdXQorCisgIHNldCBwcm9jZXNzX2FyZ3MgJGFyZ3MKKyAgd2hpbGUge1tsbGVuZ3RoICRwcm9jZXNzX2FyZ3NdID4gMH0geworICAgIHNldCBhcmcgW2xpbmRleCAkcHJvY2Vzc19hcmdzIDBdCisgICAgc2V0IHZhbHVlIFtsaW5kZXggJHByb2Nlc3NfYXJncyAxXQorCisgICAgc3dpdGNoICRhcmcgeworICAgICAgLWdyaWQgICAgICAgICAgICB7O30KKyAgICAgIC1sYXllcnMgICAgICAgICAgezt9CisgICAgICAtd2lkdGhzIHsKKyAgICAgICAgaWYge1tjYXRjaCB7Y2hlY2tfbWF4X2xlbmd0aCAkdmFsdWUgMn0gbXNnXX0geworICAgICAgICAgIHV0bDo6ZXJyb3IgUEROIDExNSAiVW5leHBlY3RlZCBudW1iZXIgb2YgdmFsdWVzIGZvciAtd2lkdGhzLCAkbXNnLiIKKyAgICAgICAgfQorICAgICAgICBpZiB7W2xsZW5ndGggJHZhbHVlXSA9PSAxfSB7CisgICAgICAgICAgc2V0IHZhbHVlcyBbbGlzdCAkdmFsdWUgJHZhbHVlXQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHNldCB2YWx1ZXMgJHZhbHVlCisgICAgICAgIH0KKyAgICAgICAgZm9yZWFjaCBsYXllciAkbGF5ZXJzIHdpZHRoICR2YWx1ZXMgeworICAgICAgICAgIGRpY3Qgc2V0IGdyaWQgY29yZV9yaW5nICRsYXllciB3aWR0aCAkd2lkdGgKKyAgICAgICAgfQorICAgICAgfQorICAgICAgLXNwYWNpbmdzIHsKKyAgICAgICAgaWYge1tjYXRjaCB7Y2hlY2tfbWF4X2xlbmd0aCAkdmFsdWUgMn0gbXNnXX0geworICAgICAgICAgIHV0bDo6ZXJyb3IgUEROIDExNiAiVW5leHBlY3RlZCBudW1iZXIgb2YgdmFsdWVzIGZvciAtc3BhY2luZ3MsICRtc2cuIgorICAgICAgICB9CisgICAgICAgIGlmIHtbbGxlbmd0aCAkdmFsdWVdID09IDF9IHsKKyAgICAgICAgICBzZXQgdmFsdWVzIFtsaXN0ICR2YWx1ZSAkdmFsdWVdCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgc2V0IHZhbHVlcyAkdmFsdWUKKyAgICAgICAgfQorICAgICAgICBmb3JlYWNoIGxheWVyICRsYXllcnMgc3BhY2luZyAkdmFsdWVzIHsKKyAgICAgICAgICBkaWN0IHNldCBncmlkIGNvcmVfcmluZyAkbGF5ZXIgc3BhY2luZyAkc3BhY2luZworICAgICAgICB9CisgICAgICB9CisgICAgICAtY29yZV9vZmZzZXRzIHsKKyAgICAgICAgaWYge1tjYXRjaCB7Y2hlY2tfbWF4X2xlbmd0aCAkdmFsdWUgMn0gbXNnXX0geworICAgICAgICAgIHV0bDo6ZXJyb3IgUEROIDExNyAiVW5leHBlY3RlZCBudW1iZXIgb2YgdmFsdWVzIGZvciAtY29yZV9vZmZzZXRzLCAkbXNnLiIKKyAgICAgICAgfQorICAgICAgICBpZiB7W2xsZW5ndGggJHZhbHVlXSA9PSAxfSB7CisgICAgICAgICAgc2V0IHZhbHVlcyBbbGlzdCAkdmFsdWUgJHZhbHVlXQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHNldCB2YWx1ZXMgJHZhbHVlCisgICAgICAgIH0KKyAgICAgICAgZm9yZWFjaCBsYXllciAkbGF5ZXJzIG9mZnNldCAkdmFsdWVzIHsKKyAgICAgICAgICBkaWN0IHNldCBncmlkIGNvcmVfcmluZyAkbGF5ZXIgY29yZV9vZmZzZXQgJG9mZnNldAorICAgICAgICB9CisgICAgICB9CisgICAgICAtcGFkX29mZnNldHMgeworICAgICAgICBpZiB7W2NhdGNoIHtjaGVja19tYXhfbGVuZ3RoICR2YWx1ZSAyfSBtc2ddfSB7CisgICAgICAgICAgdXRsOjplcnJvciBQRE4gMTE4ICJVbmV4cGVjdGVkIG51bWJlciBvZiB2YWx1ZXMgZm9yIC1wYWRfb2Zmc2V0cywgJG1zZy4iCisgICAgICAgIH0KKyAgICAgICAgaWYge1tsbGVuZ3RoICR2YWx1ZV0gPT0gMX0geworICAgICAgICAgIHNldCB2YWx1ZXMgW2xpc3QgJHZhbHVlICR2YWx1ZV0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBzZXQgdmFsdWVzICR2YWx1ZQorICAgICAgICB9CisgICAgICAgIGZvcmVhY2ggbGF5ZXIgJGxheWVycyBvZmZzZXQgJHZhbHVlcyB7CisgICAgICAgICAgZGljdCBzZXQgZ3JpZCBjb3JlX3JpbmcgJGxheWVyIHBhZF9vZmZzZXQgJG9mZnNldAorICAgICAgICB9CisgICAgICB9CisgICAgICAtcG93ZXJfcGFkcyAgICAgIHtkaWN0IHNldCBncmlkIHB3cl9wYWRzIFtjaGVja19wd3JfcGFkcyAkZ3JpZCAkdmFsdWVdfQorICAgICAgLWdyb3VuZF9wYWRzICAgICB7ZGljdCBzZXQgZ3JpZCBnbmRfcGFkcyBbY2hlY2tfZ25kX3BhZHMgJGdyaWQgJHZhbHVlXX0KKyAgICAgIGRlZmF1bHQgICAgICAgICAge3V0bDo6ZXJyb3IgUEROIDEyNSAiVW5yZWNvZ25pemVkIGFyZ3VtZW50ICRhcmcsIHNob3VsZCBiZSBvbmUgb2YgLWdyaWQsIC10eXBlLCAtb3JpZW50LCAtcG93ZXJfcGlucywgLWdyb3VuZF9waW5zLCAtYmxvY2thZ2VzLCAtcmFpbHMsIC1zdHJhcHMsIC1jb25uZWN0LiJ9CisgICAgfQorCisgICAgc2V0IHByb2Nlc3NfYXJncyBbbHJhbmdlICRwcm9jZXNzX2FyZ3MgMiBlbmRdCisgIH0KKworICBzZXQgY3VycmVudF9ncmlkIFt2ZXJpZnlfZ3JpZCAkZ3JpZF0KK30KKworcHJvYyBjaGVja19maXhlZF92aWFzIHt2aWFfbmFtZXN9IHsKKyAgc2V0IHRlY2ggW29yZDo6Z2V0X2RiX3RlY2hdCisKKyAgZm9yZWFjaCB2aWFfbmFtZSAkdmlhX25hbWVzIHsKKyAgICBpZiB7W3NldCB2aWEgWyR0ZWNoIGZpbmRWaWEgJHZpYV9uYW1lXV0gPT0gIk5VTEwifSB7CisgICAgICB1dGw6OmVycm9yICJQRE4iIDExOSAiVmlhICR2aWFfbmFtZSBzcGVjaWZpZWQgaW4gdGhlIGdyaWQgc3BlY2lmaWNhdGlvbiBkb2VzIG5vdCBleGlzdCBpbiB0aGlzIHRlY2hub2xvZ3kuIgorICAgIH0KKyAgfQorCisgIHJldHVybiAkdmlhX25hbWVzCit9CisKK3Byb2MgYWRkX3Bkbl9jb25uZWN0IHthcmdzfSB7CisgIHZhcmlhYmxlIGN1cnJlbnRfZ3JpZAorCisgIGlmIHtbZGljdCBleGlzdHMgJGFyZ3MgLWdyaWRdfSB7CisgICAgc2V0IGN1cnJlbnRfZ3JpZCBbY2hlY2tfZ3JpZCBbZ2V0X2dyaWQgW2RpY3QgZ2V0ICRhcmdzIC1ncmlkXV1dCisgIH0KKyAgc2V0IGdyaWQgJGN1cnJlbnRfZ3JpZAorCisgIHNldCBsYXllcnMgW2NoZWNrX2xheWVyX25hbWVzIFtkaWN0IGdldCAkYXJncyAtbGF5ZXJzXV0KKworICBzZXQgcHJvY2Vzc19hcmdzICRhcmdzCisgIHdoaWxlIHtbbGxlbmd0aCAkcHJvY2Vzc19hcmdzXSA+IDB9IHsKKyAgICBzZXQgYXJnIFtsaW5kZXggJHByb2Nlc3NfYXJncyAwXQorICAgIHNldCB2YWx1ZSBbbGluZGV4ICRwcm9jZXNzX2FyZ3MgMV0KKworICAgIHN3aXRjaCAkYXJnIHsKKyAgICAgIC1ncmlkICAgICAgICAgICAgezt9CisgICAgICAtbGF5ZXJzICAgICAgICAgIHs7fQorICAgICAgLWN1dF9waXRjaCAgICAgICB7ZGljdCBzZXQgbGF5ZXJzIGNvbnN0cmFpbnRzIGN1dF9waXRjaCAkdmFsdWV9CisgICAgICAtZml4ZWRfdmlhcyAgICAgIHtkaWN0IHNldCBsYXllcnMgZml4ZWRfdmlhcyBbY2hlY2tfZml4ZWRfdmlhcyAkdmFsdWVdfQorICAgICAgZGVmYXVsdCAgICAgICAgICB7dXRsOjplcnJvciBQRE4gMTI2ICJVbnJlY29nbml6ZWQgYXJndW1lbnQgJGFyZywgc2hvdWxkIGJlIG9uZSBvZiAtZ3JpZCwgLXR5cGUsIC1vcmllbnQsIC1wb3dlcl9waW5zLCAtZ3JvdW5kX3BpbnMsIC1ibG9ja2FnZXMsIC1yYWlscywgLXN0cmFwcywgLWNvbm5lY3QuIn0KKyAgICB9CisKKyAgICBzZXQgcHJvY2Vzc19hcmdzIFtscmFuZ2UgJHByb2Nlc3NfYXJncyAyIGVuZF0KKyAgfQorCisgIGRpY3QgbGFwcGVuZCBncmlkIGNvbm5lY3QgJGxheWVycworICBzZXQgY3VycmVudF9ncmlkIFt2ZXJpZnlfZ3JpZCAkZ3JpZF0KK30KKworcHJvYyBjb252ZXJ0X2dyaWRfdG9fZGVmX3VuaXRzIHtncmlkfSB7CisgIGlmIHshW2RpY3QgZXhpc3RzICRncmlkIHVuaXRzXX0geworICAgIGlmIHtbZGljdCBleGlzdHMgJGdyaWQgY29yZV9yaW5nXX0geworICAgICAgZGljdCBmb3Ige2xheWVyIGRhdGF9IFtkaWN0IGdldCAkZ3JpZCBjb3JlX3JpbmddIHsKKyAgICAgICAgZGljdCBzZXQgZ3JpZCBjb3JlX3JpbmcgJGxheWVyIFtjb252ZXJ0X2xheWVyX3NwZWNfdG9fZGVmX3VuaXRzICRkYXRhXQorICAgICAgfQorICAgIH0KKyAgCisgICAgaWYge1tkaWN0IGV4aXN0cyAkZ3JpZCByYWlsc119IHsKKyAgICAgIGRpY3QgZm9yIHtsYXllciBkYXRhfSBbZGljdCBnZXQgJGdyaWQgcmFpbHNdIHsKKyAgICAgICAgZGljdCBzZXQgZ3JpZCByYWlscyAkbGF5ZXIgW2NvbnZlcnRfbGF5ZXJfc3BlY190b19kZWZfdW5pdHMgJGRhdGFdCisgICAgICAgIGlmIHtbZGljdCBleGlzdHMgJGdyaWQgdGVtcGxhdGVdfSB7CisgICAgICAgICAgZm9yZWFjaCB0ZW1wbGF0ZSBbZGljdCBnZXQgJGdyaWQgdGVtcGxhdGUgbmFtZXNdIHsKKyAgICAgICAgICAgIGlmIHtbZGljdCBleGlzdHMgJGdyaWQgbGF5ZXJzICRsYXllciAkdGVtcGxhdGVdfSB7CisgICAgICAgICAgICAgIGRpY3Qgc2V0IGdyaWQgcmFpbHMgJGxheWVyICR0ZW1wbGF0ZSBbY29udmVydF9sYXllcl9zcGVjX3RvX2RlZl91bml0cyBbZGljdCBnZXQgJGdyaWQgcmFpbHMgJGxheWVyICR0ZW1wbGF0ZV1dCisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgfQorICAgIGlmIHtbZGljdCBleGlzdHMgJGdyaWQgc3RyYXBzXX0geworICAgICAgZGljdCBmb3Ige2xheWVyIGRhdGF9IFtkaWN0IGdldCAkZ3JpZCBzdHJhcHNdIHsKKyAgICAgICAgZGljdCBzZXQgZ3JpZCBzdHJhcHMgJGxheWVyIFtjb252ZXJ0X2xheWVyX3NwZWNfdG9fZGVmX3VuaXRzICRkYXRhXQorICAgICAgICBpZiB7W2RpY3QgZXhpc3RzICRncmlkIHRlbXBsYXRlXX0geworICAgICAgICAgIGZvcmVhY2ggdGVtcGxhdGUgW2RpY3QgZ2V0ICRncmlkIHRlbXBsYXRlIG5hbWVzXSB7CisgICAgICAgICAgICBpZiB7W2RpY3QgZXhpc3RzICRncmlkIHN0cmFwcyAkbGF5ZXIgJHRlbXBsYXRlXX0geworICAgICAgICAgICAgICBkaWN0IHNldCBncmlkIHN0cmFwcyAkbGF5ZXIgJHRlbXBsYXRlIFtjb252ZXJ0X2xheWVyX3NwZWNfdG9fZGVmX3VuaXRzIFtkaWN0IGdldCAkZ3JpZCBzdHJhcHMgJGxheWVyICR0ZW1wbGF0ZV1dCisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgfQorICAgIGRpY3Qgc2V0IGdyaWQgdW5pdHMgImRiIgorICB9CisKKyAgcmV0dXJuICRncmlkCit9CisKK3Byb2MgZ2V0X2luc3RfcGluX2Nvbm5lY3RlZF90b19uZXQge2luc3QgbmV0fSB7CisgIGZvcmVhY2ggaXRlcm0gWyRpbnN0IGdldElUZXJtc10geworICAgICMgZGVidWcgIlskaW5zdCBnZXROYW1lXSBbJGl0ZXJtIGdldE5ldF0gPT0gJG5ldCIKKyAgICBpZiB7WyRpdGVybSBnZXROZXRdID09ICRuZXR9IHsKKyAgICAgIHJldHVybiBbWyRpdGVybSBnZXRNVGVybV0gZ2V0TmFtZV0KKyAgICB9CisgIH0KK30KKworcHJvYyBmaWx0ZXJfb3V0X3NlbGVjdGVkX2J5IHtpbnN0YW5jZXMgc2VsZWN0aW9ufSB7CisgIGRpY3QgZm9yIHtpbnN0X25hbWUgaW5zdGFuY2V9ICRpbnN0YW5jZXMgeworICAgIGlmIHtbZGljdCBleGlzdHMgJGluc3RhbmNlIHNlbGVjdGVkX2J5XX0geworICAgICAgaWYge1tkaWN0IGdldCAkaW5zdGFuY2Ugc2VsZWN0ZWRfYnldID09ICRzZWxlY3Rpb259IHsKKyAgICAgICAgc2V0IGluc3RhbmNlcyBbZGljdCByZW1vdmUgJGluc3RhbmNlcyAkaW5zdF9uYW1lXQorICAgICAgfQorICAgIH0KKyAgfQorCisgIHJldHVybiAkaW5zdGFuY2VzCit9CisKK3Byb2MgZ2V0X3ByaW9yaXR5X3ZhbHVlIHtwcmlvcml0eX0geworICBpZiB7JHByaW9yaXR5ID09ICJpbnN0X25hbWUifSB7cmV0dXJuIDR9CisgIGlmIHskcHJpb3JpdHkgPT0gImNlbGxfbmFtZSJ9IHtyZXR1cm4gM30KKyAgaWYgeyRwcmlvcml0eSA9PSAib3JpZW50In0ge3JldHVybiAyfQorICBpZiB7JHByaW9yaXR5ID09ICJub25lIn0ge3JldHVybiAxfQorfQorCitwcm9jIHNldF9pbnN0YW5jZV9ncmlkIHtpbnN0X25hbWUgZ3JpZCBwcmlvcml0eX0geworICB2YXJpYWJsZSBpbnN0YW5jZXMKKworICAjIGRlYnVnICJzdGFydC0gaW5zdF9uYW1lICRpbnN0X25hbWUsIGdyaWQ6IFtkaWN0IGdldCAkZ3JpZCBuYW1lXSwgcHJpb3JpdHk6ICRwcmlvcml0eSIKKyAgc2V0IGdyaWRfbmFtZSBbZGljdCBnZXQgJGdyaWQgbmFtZV0KKyAgc2V0IHByaW9yaXR5X3ZhbHVlIFtnZXRfcHJpb3JpdHlfdmFsdWUgJHByaW9yaXR5XQorICBzZXQgaW5zdGFuY2UgW2RpY3QgZ2V0ICRpbnN0YW5jZXMgJGluc3RfbmFtZV0KKyAgaWYge1tkaWN0IGV4aXN0cyAkaW5zdGFuY2UgZ3JpZF19IHsKKyAgICBpZiB7W2RpY3QgZ2V0ICRpbnN0YW5jZSBncmlkXSAhPSAkZ3JpZF9uYW1lfSB7CisgICAgICBzZXQgY3VycmVudF9wcmlvcml0eV92YWx1ZSBbZ2V0X3ByaW9yaXR5X3ZhbHVlIFtkaWN0IGdldCAkaW5zdGFuY2Ugc2VsZWN0ZWRfYnldXQorICAgICAgaWYgeyRwcmlvcml0eV92YWx1ZSA8ICRjdXJyZW50X3ByaW9yaXR5X3ZhbHVlfSB7CisgICAgICAgIHJldHVybgorICAgICAgfSBlbHNlaWYgeyRwcmlvcml0eV92YWx1ZSA9PSAkY3VycmVudF9wcmlvcml0eV92YWx1ZX0geworICAgICAgICB1dGw6OmVycm9yIFBETiAxNjUgIkNvbmZsaWN0IGZvdW5kLCBpbnN0YW5jZSAkaW5zdF9uYW1lIGlzIHBhcnQgb2YgdHdvIGdyaWQgZGVmaW5pdGlvbnMgKCRncmlkX25hbWUsIFtkaWN0IGdldCAkaW5zdGFuY2VzICRpbnN0X25hbWUgZ3JpZF0pLiIKKyAgICAgIH0KKyAgICB9CisgIH0gZWxzZSB7CisgICAgZGljdCBzZXQgaW5zdGFuY2VzICRpbnN0X25hbWUgZ3JpZCAkZ3JpZF9uYW1lCisgIH0KKworICBpZiB7W2RpY3QgZXhpc3RzICRncmlkIGhhbG9dfSB7CisgICAgc2V0X2luc3RhbmNlX2hhbG8gJGluc3RfbmFtZSBbZGljdCBnZXQgJGdyaWQgaGFsb10KKyAgfQorICBkaWN0IHNldCBpbnN0YW5jZXMgJGluc3RfbmFtZSBzZWxlY3RlZF9ieSAkcHJpb3JpdHkKKyAgZGljdCBzZXQgaW5zdGFuY2VzICRpbnN0X25hbWUgZ3JpZCAkZ3JpZF9uYW1lCisgIGRpY3Qgc2V0IGluc3RzICRpbnN0X25hbWUgc2VsZWN0ZWRfYnkgJHByaW9yaXR5CisgIGRpY3Qgc2V0IGluc3RzICRpbnN0X25hbWUgZ3JpZCAkZ3JpZF9uYW1lCit9CisKK3Byb2MgdmVyaWZ5X2dyaWQge2dyaWR9IHsKKyAgdmFyaWFibGUgZGVzaWduX2RhdGEKKyAgdmFyaWFibGUgZGVmYXVsdF9ncmlkX2RhdGEKKworICBpZiB7IVtkaWN0IGV4aXN0cyAkZ3JpZCB0eXBlXX0geworICAgIGRpY3Qgc2V0IGdyaWQgdHlwZSBzdGRjZWxsCisgIH0KKyAgc2V0IHR5cGUgW2RpY3QgZ2V0ICRncmlkIHR5cGVdCisKKyAgaWYgeyFbZGljdCBleGlzdHMgJGdyaWQgdm9sdGFnZV9kb21haW5zXX0geworICAgIGRpY3Qgc2V0IGdyaWQgdm9sdGFnZV9kb21haW5zICJDT1JFIgorICB9CisgIHNldCB2b2x0YWdlX2RvbWFpbnMgW2RpY3QgZ2V0ICRncmlkIHZvbHRhZ2VfZG9tYWluc10KKworICBpZiB7IVtkaWN0IGV4aXN0cyAkZ3JpZCBuYW1lXX0geworICAgIHNldCBpZHggMQorICAgIHNldCBuYW1lICJbam9pbiBbZGljdCBnZXQgJGdyaWQgdm9sdGFnZV9kb21haW5zXSB7X31dXyR7dHlwZX1fZ3JpZF8kaWR4IgorICAgIHdoaWxlIHtbZ2V0X2dyaWQgJG5hbWVdICE9IHt9fSB7CisgICAgICBpbmNyIGlkeAorICAgICAgc2V0IG5hbWUgIltqb2luIFtkaWN0IGdldCAkZ3JpZCB2b2x0YWdlX2RvbWFpbnNdIHtffV1fJHt0eXBlfV9ncmlkXyRpZHgiCisgICAgfQorICAgIGRpY3Qgc2V0IGdyaWQgbmFtZSAkbmFtZQorICB9CisgIHNldCBncmlkX25hbWUgW2RpY3QgZ2V0ICRncmlkIG5hbWVdCisKKyAgaWYge1tkaWN0IGV4aXN0cyAkZ3JpZCBjb3JlX3JpbmddfSB7CisgICAgY2hlY2tfY29yZV9yaW5nIFtkaWN0IGdldCAkZ3JpZCBjb3JlX3JpbmddCisgICAgc2V0IGxheWVyIFtsaW5kZXggW2RpY3Qga2V5cyBbZGljdCBnZXQgJGdyaWQgY29yZV9yaW5nXV1dCisgICAgaWYge1tkaWN0IGV4aXN0ICRncmlkIGNvcmVfcmluZyAkbGF5ZXIgcGFkX29mZnNldF19IHsKKyAgICAgIGlmIHshW2RpY3QgZXhpc3RzICRncmlkIHB3cl9wYWRzXX0geworICAgICAgICB1dGw6OmVycm9yIFBETiAxNDcgIk5vIGRlZmluaXRpb24gb2YgcG93ZXIgcGFkY2VsbHMgcHJvdmlkZWQsIHJlcXVpcmVkIHdoZW4gdXNpbmcgcGFkX29mZnNldC4iCisgICAgICB9CisgICAgICBpZiB7IVtkaWN0IGV4aXN0cyAkZ3JpZCBnbmRfcGFkc119IHsKKyAgICAgICAgdXRsOjplcnJvciBQRE4gMTQ4ICJObyBkZWZpbml0aW9uIG9mIGdyb3VuZCBwYWRjZWxscyBwcm92aWRlZCwgcmVxdWlyZWQgd2hlbiB1c2luZyBwYWRfb2Zmc2V0LiIKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBpZiB7W2RpY3QgZXhpc3RzICRncmlkIHB3cl9wYWRzXX0geworICAgIGRpY3QgZm9yIHtwaW5fbmFtZSBjZWxsc30gW2RpY3QgZ2V0ICRncmlkIHB3cl9wYWRzXSB7CisgICAgICBmb3JlYWNoIGNlbGwgJGNlbGxzIHsKKyAgICAgICAgaWYge1tzZXQgbWFzdGVyIFtbb3JkOjpnZXRfZGJdIGZpbmRNYXN0ZXIgJGNlbGxdXSA9PSAiTlVMTCJ9IHsKKyAgICAgICAgICB1dGw6OmVycm9yIFBETiAxNTMgICJDb3JlIHBvd2VyIHBhZGNlbGwgKCRjZWxsKSBub3QgZm91bmQgaW4gdGhlIGRhdGFiYXNlLiIKKyAgICAgICAgfSAKKyAgICAgICAgaWYge1skbWFzdGVyIGZpbmRNVGVybSAkcGluX25hbWVdID09ICJOVUxMIn0geworICAgICAgICAgIHV0bDo6ZXJyb3IgUEROIDE1NCAiQ2Fubm90IGZpbmQgcGluICgkcGluX25hbWUpIG9uIGNvcmUgcG93ZXIgcGFkY2VsbCAoJGNlbGwpLiIKKyAgICAgICAgfQorICAgICAgfSAKKyAgICB9CisgIH0KKworICBpZiB7W2RpY3QgZXhpc3RzICRncmlkIGduZF9wYWRzXX0geworICAgIGRpY3QgZm9yIHtwaW5fbmFtZSBjZWxsc30gW2RpY3QgZ2V0ICRncmlkIGduZF9wYWRzXSB7CisgICAgICBmb3JlYWNoIGNlbGwgJGNlbGxzIHsKKyAgICAgICAgaWYge1tzZXQgbWFzdGVyIFtbb3JkOjpnZXRfZGJdIGZpbmRNYXN0ZXIgJGNlbGxdXSA9PSAiTlVMTCJ9IHsKKyAgICAgICAgICB1dGw6OmVycm9yIFBETiAxNTUgICJDb3JlIGdyb3VuZCBwYWRjZWxsICgkY2VsbCkgbm90IGZvdW5kIGluIHRoZSBkYXRhYmFzZS4iCisgICAgICAgIH0gCisgICAgICAgIGlmIHtbJG1hc3RlciBmaW5kTVRlcm0gJHBpbl9uYW1lXSA9PSAiTlVMTCJ9IHsKKyAgICAgICAgICB1dGw6OmVycm9yIFBETiAxNTYgIkNhbm5vdCBmaW5kIHBpbiAoJHBpbl9uYW1lKSBvbiBjb3JlIGdyb3VuZCBwYWRjZWxsICgkY2VsbCkuIgorICAgICAgICB9CisgICAgICB9IAorICAgIH0KKyAgfQorCisgIGlmIHtbZGljdCBleGlzdHMgJGdyaWQgbWFjcm9dfSB7CisgICAgY2hlY2tfY2VsbHMgW2RpY3QgZ2V0ICRncmlkIG1hY3JvXQorICB9CisgCisgIGlmIHtbZGljdCBleGlzdHMgJGdyaWQgcmFpbHNdfSB7CisgICAgZGljdCBzZXQgZ3JpZCByYWlscyBbY2hlY2tfcmFpbHMgW2RpY3QgZ2V0ICRncmlkIHJhaWxzXV0KKyAgfQorCisgIGlmIHtbZGljdCBleGlzdHMgJGdyaWQgc3RyYXBzXX0geworICAgIGNoZWNrX3N0cmFwcyBbZGljdCBnZXQgJGdyaWQgc3RyYXBzXQorICB9CisKKyAgaWYge1tkaWN0IGV4aXN0cyAkZ3JpZCB0ZW1wbGF0ZV19IHsKKyAgICBzZXRfdGVtcGxhdGVfc2l6ZSB7Kn1bZGljdCBnZXQgJGdyaWQgdGVtcGxhdGUgc2l6ZV0KKyAgfQorICAKKyAgaWYge1tkaWN0IGV4aXN0cyAkZ3JpZCBvcmllbnRdfSB7CisgICAgaWYgeyR0eXBlID09ICJzdGRjZWxsIn0geworICAgICAgdXRsOjplcnJvciBQRE4gOTAgIlRoZSBvcmllbnQgYXR0cmlidXRlIGNhbm5vdCBiZSB1c2VkIHdpdGggc3RkY2VsbCBncmlkcy4iCisgICAgfQorICAgIGRpY3Qgc2V0IGdyaWQgb3JpZW50IFtjaGVja19vcmllbnRhdGlvbnMgW2RpY3QgZ2V0ICRncmlkIG9yaWVudF1dCisgIH0KKworICBpZiB7W2RpY3QgZXhpc3RzICRncmlkIGNvbm5lY3RdfSB7CisgICAgZGljdCBzZXQgZ3JpZCBjb25uZWN0IFtjaGVja19jb25uZWN0ICRncmlkIFtkaWN0IGdldCAkZ3JpZCBjb25uZWN0XV0KKyAgfQorCisgIGlmIHskdHlwZSA9PSAibWFjcm8ifSB7CisgICAgaWYgeyFbZGljdCBleGlzdHMgJGdyaWQgaGFsb119IHsKKyAgICAgIGRpY3Qgc2V0IGdyaWQgaGFsbyBbZ2V0X2RlZmF1bHRfaGFsb10KKyAgICB9CisgICAgY2hlY2tfaGFsbyBbZGljdCBnZXQgJGdyaWQgaGFsb10KKyAgfSBlbHNlIHsKKyAgICBzZXQgZGVmYXVsdF9ncmlkX2RhdGEgJGdyaWQKKyAgfQorCisgICMgZGVidWcgJGdyaWQKKworICBkaWN0IHNldCBkZXNpZ25fZGF0YSBncmlkICR0eXBlICRncmlkX25hbWUgJGdyaWQKKyAgcmV0dXJuICRncmlkCit9CisKK3Byb2MgY29tcGxldGVfbWFjcm9fZ3JpZF9zcGVjaWZpY2F0aW9ucyB7fSB7CisgIHZhcmlhYmxlIGRlc2lnbl9kYXRhCisgIHZhcmlhYmxlIGluc3RhbmNlcworICB2YXJpYWJsZSBtYWNyb3MKKworICBzZXQgbWFjcm9zIFtnZXRfbWFjcm9fYmxvY2tzXQorCisgIGRpY3QgZm9yIHt0eXBlIGdyaWRfdHlwZXN9IFtkaWN0IGdldCAkZGVzaWduX2RhdGEgZ3JpZF0geworICAgIGRpY3QgZm9yIHtuYW1lIGdyaWR9ICRncmlkX3R5cGVzIHsKKyAgICAgIGRpY3Qgc2V0IGRlc2lnbl9kYXRhIGdyaWQgJHR5cGUgJG5hbWUgW2NvbnZlcnRfZ3JpZF90b19kZWZfdW5pdHMgJGdyaWRdCisgICAgfQorICB9CisgIGlmIHshW2RpY3QgZXhpc3RzICRkZXNpZ25fZGF0YSBncmlkIG1hY3JvXX0geworICAgIHJldHVybgorICB9CisKKyAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAjIENyZWF0aW5nIGJsb2NrYWdlcyBiYXNlZCBvbiBtYWNybyBsb2NhdGlvbnMKKyAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICMgZGVidWcgImltcG9ydF9tYWNyb19ib3VuZGFyaWVzIgorICBpbXBvcnRfbWFjcm9fYm91bmRhcmllcworCisgICMgQXNzb2NpYXRlIGVhY2ggYmxvY2sgaW5zdGFuY2Ugd2l0aCBhIGdyaWQgc3BlY2lmaWNhdGlvbgorICBzZXQgbWFjcm9fbmFtZXMgW2RpY3Qga2V5cyAkbWFjcm9zXQorICBkaWN0IGZvciB7Z3JpZF9uYW1lIGdyaWR9IFtkaWN0IGdldCAkZGVzaWduX2RhdGEgZ3JpZCBtYWNyb10geworICAgIHNldCBpbnN0cyBbZmluZF9pbnN0YW5jZXNfb2YgJG1hY3JvX25hbWVzXQorICAgIHNldCBib3VuZGFyeSBbb2RiOjpuZXdTZXRGcm9tUmVjdCB7Kn1bZ2V0X2NvcmVfYXJlYV1dCisgICAgc2V0IGluc3RzIFtmaWx0ZXJlZF9pbnN0c193aXRoaW4gJGluc3RzICRib3VuZGFyeV0KKyAgICBpZiB7W2RpY3QgZXhpc3RzICRncmlkIGluc3RhbmNlc119IHsKKyAgICAgICMgZGVidWcgIkNoZWNrIG1hY3JvIG5hbWUgZm9yIFtkaWN0IGdldCAkZ3JpZCBuYW1lXSIKKyAgICAgIGRpY3QgZm9yIHtpbnN0X25hbWUgaW5zdGFuY2V9ICRpbnN0cyB7CisgICAgICAgIGlmIHtbbHNlYXJjaCBbZGljdCBnZXQgJGdyaWQgaW5zdGFuY2VzXSAkaW5zdF9uYW1lXSA+IC0xfSB7CisgICAgICAgICAgc2V0X2luc3RhbmNlX2dyaWQgJGluc3RfbmFtZSAkZ3JpZCBpbnN0X25hbWUKKwl9CisgICAgICB9CisgICAgICBzZXQgaW5zdHMgW3NldF9pbnN0YW5jZV9ncmlkICRzZWxlY3RlZF9pbnN0cyAkZ3JpZCBpbnN0X25hbWVdCisgICAgfSBlbHNlaWYge1tkaWN0IGV4aXN0cyAkZ3JpZCBtYWNyb119IHsKKyAgICAgICMgc2V0IGluc3RzIFtmaWx0ZXJfb3V0X3NlbGVjdGVkX2J5ICRpbnN0cyBpbnN0X25hbWVdCisgICAgICAjIGRlYnVnICJDaGVjayBpbnN0YW5jZSBuYW1lIGZvciBbZGljdCBnZXQgJGdyaWQgbmFtZV0iCisgICAgICBkaWN0IGZvciB7aW5zdF9uYW1lIGluc3RhbmNlfSAkaW5zdHMgeworICAgICAgICBzZXQgY2VsbF9uYW1lIFtkaWN0IGdldCAkaW5zdGFuY2UgbWFjcm9dCisgICAgICAgIGlmIHtbbHNlYXJjaCBbZGljdCBnZXQgJGdyaWQgbWFjcm9dICRjZWxsX25hbWVdID4gLTF9IHsKKyAgICAgICAgICBzZXRfaW5zdGFuY2VfZ3JpZCAkaW5zdF9uYW1lICRncmlkIGNlbGxfbmFtZQorICAgICAgICB9CisgICAgICB9CisgICAgfSBlbHNlaWYge1tkaWN0IGV4aXN0cyAkZ3JpZCBvcmllbnRdfSB7CisgICAgICAjIHNldCBpbnN0cyBbZmlsdGVyX291dF9zZWxlY3RlZF9ieSAkaW5zdHMgaW5zdF9uYW1lXQorICAgICAgIyBzZXQgaW5zdHMgW2ZpbHRlcl9vdXRfc2VsZWN0ZWRfYnkgJGluc3RzIGNlbGxfbmFtZV0KKyAgICAgICMgZGVidWcgIkNoZWNrIG9yaWVudGF0aW9uIGZvciBbZGljdCBnZXQgJGdyaWQgbmFtZV0iCisgICAgICBkaWN0IGZvciB7aW5zdF9uYW1lIGluc3RhbmNlfSAkaW5zdHMgeworICAgICAgICBzZXQgb3JpZW50IFtkaWN0IGdldCAkaW5zdGFuY2Ugb3JpZW50XQorCSMgZGVidWcgIkluc3Q6ICRpbnN0X25hbWUsIG9yaWVudDogJG9yaWVudCwgY29tcGFyZSB0bzogW2RpY3QgZ2V0ICRncmlkIG9yaWVudF0iCisgICAgICAgIGlmIHtbbHNlYXJjaCBbZGljdCBnZXQgJGdyaWQgb3JpZW50XSAkb3JpZW50XSA+IC0xfSB7CisgICAgICAgICAgc2V0X2luc3RhbmNlX2dyaWQgJGluc3RfbmFtZSAkZ3JpZCBvcmllbnQKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorICBkaWN0IGZvciB7Z3JpZF9uYW1lIGdyaWR9IFtkaWN0IGdldCAkZGVzaWduX2RhdGEgZ3JpZCBtYWNyb10geworICAgIHNldCByZWxhdGVkX2luc3RhbmNlcyB7fQorICAgIGRpY3QgZm9yIHtpbnN0IGluc3RhbmNlfSAkaW5zdGFuY2VzIHsKKyAgICAgIGlmIHshW2RpY3QgZXhpc3RzICRpbnN0YW5jZSBncmlkXX0geworICAgICAgICAjIHV0bDo6ZXJyb3IgUEROIDE2NiAiSW5zdGFuY2UgJGluc3Qgb2YgY2VsbCBbZGljdCBnZXQgJGluc3RhbmNlIG1hY3JvXSBpcyBub3QgYXNzb2NpYXRlZCB3aXRoIGFueSBncmlkLiIKKyAgICAgICAgZGljdCBzZXQgaW5zdGFuY2UgZ3JpZCAiX19ub25lX18iCisgICAgICB9CisgICAgICBpZiB7W2RpY3QgZ2V0ICRpbnN0YW5jZSBncmlkXSA9PSAkZ3JpZF9uYW1lfSB7CisgICAgICAgIGRpY3Qgc2V0IHJlbGF0ZWRfaW5zdGFuY2VzICRpbnN0ICRpbnN0YW5jZSAKKyAgICAgIH0KKyAgICB9CisgICAgZGljdCBzZXQgZGVzaWduX2RhdGEgZ3JpZCBtYWNybyAkZ3JpZF9uYW1lIF9yZWxhdGVkX2luc3RhbmNlcyAkcmVsYXRlZF9pbnN0YW5jZXMKKyAgfQorCisgIGRpY3QgZm9yIHtncmlkX25hbWUgZ3JpZH0gW2RpY3QgZ2V0ICRkZXNpZ25fZGF0YSBncmlkIG1hY3JvXSB7CisgICAgIyBTZXQgdGhlIHBpbiBsYXllciBvbiB0aGUgY29ubmVjdCBzdGF0ZW1lbnQgdG8gdGhlIHBpbiBsYXllciBvZiB0aGUgZGVmIHRvIGJlIF9QSU5fPGRpcj4KKyAgICBzZXQgYmxvY2thZ2VzIHt9CisgICAgc2V0IHBpbl9sYXllcnMge30KKyAgICBzZXQgcG93ZXJfcGlucyB7fQorICAgIHNldCBncm91bmRfcGlucyB7fQorICAgIGRpY3QgZm9yIHtpbnN0YW5jZV9uYW1lIGluc3RhbmNlfSBbZGljdCBnZXQgJGdyaWQgX3JlbGF0ZWRfaW5zdGFuY2VzXSB7CisgICAgICBsYXBwZW5kIGJsb2NrYWdlcyB7Kn1bZGljdCBnZXQgJG1hY3JvcyBbZGljdCBnZXQgJGluc3RhbmNlIG1hY3JvXSBibG9ja2FnZV9sYXllcnNdCisgICAgICBsYXBwZW5kIHBpbl9sYXllcnMgeyp9W2RpY3QgZ2V0ICRtYWNyb3MgW2RpY3QgZ2V0ICRpbnN0YW5jZSBtYWNyb10gcGluX2xheWVyc10KKyAgICAgIGxhcHBlbmQgcG93ZXJfcGlucyB7Kn1bZGljdCBnZXQgJG1hY3JvcyBbZGljdCBnZXQgJGluc3RhbmNlIG1hY3JvXSBwb3dlcl9waW5zXQorICAgICAgbGFwcGVuZCBncm91bmRfcGlucyB7Kn1bZGljdCBnZXQgJG1hY3JvcyBbZGljdCBnZXQgJGluc3RhbmNlIG1hY3JvXSBncm91bmRfcGluc10KKyAgICB9CisgICAgZGljdCBzZXQgZGVzaWduX2RhdGEgZ3JpZCBtYWNybyAkZ3JpZF9uYW1lIHBvd2VyX3BpbnMgW2xzb3J0IC11bmlxdWUgJHBvd2VyX3BpbnNdCisgICAgZGljdCBzZXQgZGVzaWduX2RhdGEgZ3JpZCBtYWNybyAkZ3JpZF9uYW1lIGdyb3VuZF9waW5zIFtsc29ydCAtdW5pcXVlICRncm91bmRfcGluc10KKworICAgIGlmIHtbZGljdCBleGlzdHMgJGdyaWQgcGluX2RpcmVjdGlvbl19IHsKKyAgICAgIGlmIHtbZGljdCBnZXQgJGdyaWQgcGluX2RpcmVjdGlvbl0gPT0gInZlcnRpY2FsIn0geworICAgICAgICBzZXQgZGlyZWN0aW9uIHZlcgorICAgICAgfSBlbHNlIHsKKyAgICAgICAgc2V0IGRpcmVjdGlvbiBob3IKKyAgICAgIH0KKyAgICAgIHNldCBwaW5fbGF5ZXJzIFtsc29ydCAtdW5pcXVlICRwaW5fbGF5ZXJzXQorCisgICAgICBmb3JlYWNoIHBpbl9sYXllciAkcGluX2xheWVycyB7CisgICAgICAgIHNldCBuZXdfY29ubmVjdGlvbnMge30KKyAgICAgICAgZm9yZWFjaCBjb25uZWN0IFtkaWN0IGdldCAkZ3JpZCBjb25uZWN0XSB7CisgICAgICAgICAgaWYge1tsaW5kZXggJGNvbm5lY3QgMF0gPT0gJHBpbl9sYXllcn0geworICAgICAgICAgICAgc2V0IGNvbm5lY3QgW2xyZXBsYWNlICRjb25uZWN0IDAgMCAke3Bpbl9sYXllcn1fUElOXyRkaXJlY3Rpb25dCisgICAgICAgICAgfQorICAgICAgICAgIGlmIHtbbGluZGV4ICRjb25uZWN0IDFdID09ICRwaW5fbGF5ZXJ9IHsKKyAgICAgICAgICAgIHNldCBjb25uZWN0IFtscmVwbGFjZSAkY29ubmVjdCAxIDEgJHtwaW5fbGF5ZXJ9X1BJTl8kZGlyZWN0aW9uXQorICAgICAgICAgIH0KKyAgICAgICAgICBsYXBwZW5kIG5ld19jb25uZWN0aW9ucyAkY29ubmVjdAorICAgICAgICB9CisgICAgICAgIGRpY3Qgc2V0IGRlc2lnbl9kYXRhIGdyaWQgbWFjcm8gJGdyaWRfbmFtZSBjb25uZWN0ICRuZXdfY29ubmVjdGlvbnMKKyAgICAgIH0KKyAgICB9CisgICAgCisgICAgaWYge1tkaWN0IGV4aXN0cyAkZ3JpZCBzdHJhcHNdfSB7CisgICAgICBmb3JlYWNoIHN0cmFwX2xheWVyIFtkaWN0IGtleXMgW2RpY3QgZ2V0ICRncmlkIHN0cmFwc11dIHsKKyAgICAgICAgbGFwcGVuZCBibG9ja2FnZXMgJHN0cmFwX2xheWVyCisgICAgICB9CisgICAgfQorICAgICMgZGVidWcgIkdyaWQ6ICRncmlkX25hbWUiCisgICAgIyBkZWJ1ZyAiICBpbnN0YW5jZXM6IFtkaWN0IGtleXMgW2RpY3QgZ2V0ICRncmlkIF9yZWxhdGVkX2luc3RhbmNlc11dIgorICAgICMgZGVidWcgIiAgYmxvY2thZ2VzOiBbbHNvcnQgLXVuaXF1ZSAkYmxvY2thZ2VzXSIKKyAgICAjIGRlYnVnICIgIGNvbm5lY3Q6IFtkaWN0IGdldCAkZGVzaWduX2RhdGEgZ3JpZCBtYWNybyAkZ3JpZF9uYW1lIGNvbm5lY3RdIgorCisgICAgZGljdCBzZXQgZGVzaWduX2RhdGEgZ3JpZCBtYWNybyAkZ3JpZF9uYW1lIGJsb2NrYWdlcyBbbHNvcnQgLXVuaXF1ZSAkYmxvY2thZ2VzXQorICB9CisKKyAjIGRlYnVnICJnZXRfbWVtb3J5X2luc3RhbmNlX3BnX3BpbnMiCisgIGdldF9tZW1vcnlfaW5zdGFuY2VfcGdfcGlucworfQorCisjVGhpcyBmaWxlIGNvbnRhaW5zIHByb2NlZHVyZXMgdGhhdCBhcmUgdXNlZCBmb3IgUEROIGdlbmVyYXRpb24KK3Byb2MgZGVidWcge21lc3NhZ2V9IHsKKyAgc2V0IHN0YXRlIFtpbmZvIGZyYW1lIC0xXQorICBzZXQgc3RyICIiCisgIGlmIHtbZGljdCBleGlzdHMgJHN0YXRlIGZpbGVdfSB7CisgICAgc2V0IHN0ciAiJHN0cltkaWN0IGdldCAkc3RhdGUgZmlsZV06IgorICB9CisgIGlmIHtbZGljdCBleGlzdHMgJHN0YXRlIHByb2NdfSB7CisgICAgc2V0IHN0ciAiJHN0cltkaWN0IGdldCAkc3RhdGUgcHJvY106IgorICB9CisgIGlmIHtbZGljdCBleGlzdHMgJHN0YXRlIGxpbmVdfSB7CisgICAgc2V0IHN0ciAiJHN0cltkaWN0IGdldCAkc3RhdGUgbGluZV0iCisgIH0KKyAgcHV0cyAiXFtERUJVR1xdICRzdHI6ICRtZXNzYWdlIgorfQorCitwcm9jIGxtYXAge2FyZ3N9IHsKKyAgc2V0IHJlc3VsdCB7fQorICBzZXQgdmFyIFtsaW5kZXggJGFyZ3MgMF0KKyAgZm9yZWFjaCBpdGVtIFtsaW5kZXggJGFyZ3MgMV0geworICAgIHVwbGV2ZWwgMSAic2V0ICR2YXIgJGl0ZW0iCisgICAgbGFwcGVuZCByZXN1bHQgW3VwbGV2ZWwgMSBbbGluZGV4ICRhcmdzIGVuZF1dCisgIH0KKyAgcmV0dXJuICRyZXN1bHQKK30KKworcHJvYyBnZXRfcm91dGluZ19kaXJlY3Rpb24ge2xheWVyX25hbWV9IHsKKyAgdmFyaWFibGUgbGF5ZXJzCisKKyAgaWYgeyRsYXllcnMgPT0gIiJ9IHsKKyAgICBpbml0X21ldGFsX2xheWVycworICB9CisKKyAgaWYgeyFbZGljdCBleGlzdHMgJGxheWVycyAkbGF5ZXJfbmFtZSBkaXJlY3Rpb25dfSB7CisgICAgdXRsOjplcnJvciAiUEROIiAzMyAiVW5rbm93biBkaXJlY3Rpb24gZm9yIGxheWVyICRsYXllcl9uYW1lLiIKKyAgfQorICByZXR1cm4gW2RpY3QgZ2V0ICRsYXllcnMgJGxheWVyX25hbWUgZGlyZWN0aW9uXQorfQorCitwcm9jIGdldF9kaXIge2xheWVyX25hbWV9IHsKKyAgaWYge1tyZWdleHAgey4qX1BJTl8oaG9yfHZlcil9ICRsYXllcl9uYW1lIC0gZGlyXX0geworICAgIHJldHVybiAkZGlyCisgIH0KKworICBpZiB7W2lzX3JhaWxzX2xheWVyICRsYXllcl9uYW1lXX0geworICAgIHJldHVybiAiaG9yIgorICB9CisKKyAgcmV0dXJuIFtnZXRfcm91dGluZ19kaXJlY3Rpb24gJGxheWVyX25hbWVdCit9CisKK3Byb2MgZ2V0X3JhaWxzX2xheWVycyB7fSB7CisgIHZhcmlhYmxlIGRlc2lnbl9kYXRhCisKKyAgaWYge1tkaWN0IGV4aXN0cyAkZGVzaWduX2RhdGEgZ3JpZF19IHsKKyAgICBmb3JlYWNoIHR5cGUgW2RpY3Qga2V5cyBbZGljdCBnZXQgJGRlc2lnbl9kYXRhIGdyaWRdXSB7CisgICAgICBkaWN0IGZvciB7bmFtZSBzcGVjaWZpY2F0aW9ufSBbZGljdCBnZXQgJGRlc2lnbl9kYXRhIGdyaWQgJHR5cGVdIHsKKyAgICAgICAgaWYge1tkaWN0IGV4aXN0cyAkc3BlY2lmaWNhdGlvbiByYWlsc119IHsKKyAgICAgICAgICByZXR1cm4gW2RpY3Qga2V5cyBbZGljdCBnZXQgJHNwZWNpZmljYXRpb24gcmFpbHNdXQorICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisgIHJldHVybiB7fQorfQorCitwcm9jIGlzX3JhaWxzX2xheWVyIHtsYXllcn0geworICByZXR1cm4gW2V4cHIge1tsc2VhcmNoIC1leGFjdCBbZ2V0X3JhaWxzX2xheWVyc10gJGxheWVyXSA+IC0xfV0KK30KKworcHJvYyB2aWFfbnVtYmVyIHtsYXllcl9ydWxlMSBsYXllcl9ydWxlMn0geworICByZXR1cm4gW2V4cHIgW1skbGF5ZXJfcnVsZTEgZ2V0TGF5ZXJdIGdldE51bWJlcl0gLSBbWyRsYXllcl9ydWxlMiBnZXRMYXllcl0gZ2V0TnVtYmVyXV0KK30KKworcHJvYyBpbml0X3ZpYV90ZWNoIHt9IHsKKyAgdmFyaWFibGUgdGVjaAorICB2YXJpYWJsZSBkZWZfdmlhX3RlY2gKKworICBzZXQgZGVmX3ZpYV90ZWNoIHt9CisgIGZvcmVhY2ggdmlhX3J1bGUgWyR0ZWNoIGdldFZpYUdlbmVyYXRlUnVsZXNdIHsKKyAgICBzZXQgbGV2ZWxzIFtsaXN0IFskdmlhX3J1bGUgZ2V0VmlhTGF5ZXJSdWxlIDBdIFskdmlhX3J1bGUgZ2V0VmlhTGF5ZXJSdWxlIDFdIFskdmlhX3J1bGUgZ2V0VmlhTGF5ZXJSdWxlIDJdXQorICAgIHNldCBsZXZlbHMgW2xzb3J0IC1jb21tYW5kIHZpYV9udW1iZXIgJGxldmVsc10KKyAgICBsYXNzaWduICRsZXZlbHMgbG93ZXIgY3V0IHVwcGVyCisKKyAgICBkaWN0IHNldCBkZWZfdmlhX3RlY2ggWyR2aWFfcnVsZSBnZXROYW1lXSBbbGlzdCBcCisgICAgICBsb3dlciBbbGlzdCBsYXllciBbWyRsb3dlciBnZXRMYXllcl0gZ2V0TmFtZV0gZW5jbG9zdXJlIFskbG93ZXIgZ2V0RW5jbG9zdXJlXV0gXAorICAgICAgdXBwZXIgW2xpc3QgbGF5ZXIgW1skdXBwZXIgZ2V0TGF5ZXJdIGdldE5hbWVdIGVuY2xvc3VyZSBbJHVwcGVyIGdldEVuY2xvc3VyZV1dIFwKKyAgICAgIGN1dCAgIFtsaXN0IGxheWVyIFtbJGN1dCBnZXRMYXllcl0gZ2V0TmFtZV0gc3BhY2luZyBbJGN1dCBnZXRTcGFjaW5nXSBzaXplIFtsaXN0IFtbJGN1dCBnZXRSZWN0XSBkeF0gW1skY3V0IGdldFJlY3RdIGR5XV1dIFwKKyAgICBdCisgIH0KKyAgIyBkZWJ1ZyAiZGVmX3ZpYV90ZWNoOiAkZGVmX3ZpYV90ZWNoIgorfQorCitwcm9jIHNldF9wcm9wX2xpbmVzIHtvYmogcHJvcF9uYW1lfSB7CisgIHZhcmlhYmxlIHByb3BfbGluZQorICBpZiB7W3NldCBwcm9wIFs6Om9kYjo6ZGJTdHJpbmdQcm9wZXJ0eV9maW5kICRvYmogJHByb3BfbmFtZV1dICE9ICJOVUxMIn0geworICAgIHNldCBwcm9wX2xpbmUgWyRwcm9wIGdldFZhbHVlXQorICB9IGVsc2UgeworICAgIHNldCBwcm9wX2xpbmUge30KKyAgfQorfQorCitwcm9jIHJlYWRfcHJvcGxpbmUge30geworICB2YXJpYWJsZSBwcm9wX2xpbmUKKworICBzZXQgd29yZCBbbGluZGV4ICRwcm9wX2xpbmUgMF0KKyAgc2V0IHByb3BfbGluZSBbbHJhbmdlICRwcm9wX2xpbmUgMSBlbmRdCisKKyAgc2V0IGxpbmUge30KKyAgd2hpbGUge1tsbGVuZ3RoICRwcm9wX2xpbmVdID4gMCAmJiAkd29yZCAhPSAiOyJ9IHsKKyAgICBsYXBwZW5kIGxpbmUgJHdvcmQKKyAgICBzZXQgd29yZCBbbGluZGV4ICRwcm9wX2xpbmUgMF0KKyAgICBzZXQgcHJvcF9saW5lIFtscmFuZ2UgJHByb3BfbGluZSAxIGVuZF0KKyAgfQorICByZXR1cm4gJGxpbmUKK30KKworcHJvYyBlbXB0eV9wcm9wbGluZSB7fSB7CisgIHZhcmlhYmxlIHByb3BfbGluZQorICByZXR1cm4gW2V4cHIgIVtsbGVuZ3RoICRwcm9wX2xpbmVdXQorfQorCitwcm9jIGZpbmRfbGF5ZXIge2xheWVyX25hbWV9IHsKKyAgdmFyaWFibGUgdGVjaAorCisgIGlmIHtbc2V0IGxheWVyIFskdGVjaCBmaW5kTGF5ZXIgJGxheWVyX25hbWVdXSA9PSAiTlVMTCJ9IHsKKyAgICB1dGw6OmVycm9yICJQRE4iIDE5ICJDYW5ub3QgZmluZCBsYXllciAkbGF5ZXJfbmFtZSBpbiBsb2FkZWQgdGVjaG5vbG9neS4iCisgIH0KKyAgcmV0dXJuICRsYXllcgorfQorCitwcm9jIHJlYWRfc3BhY2luZyB7bGF5ZXJfbmFtZX0geworICB2YXJpYWJsZSBsYXllcnMKKyAgdmFyaWFibGUgZGVmX3VuaXRzCisKKyAgc2V0IGxheWVyIFtmaW5kX2xheWVyICRsYXllcl9uYW1lXQorCisgIHNldF9wcm9wX2xpbmVzICRsYXllciBMRUY1OF9TUEFDSU5HCisgIHNldCBzcGFjaW5nIHt9CisKKyAgd2hpbGUgeyFbZW1wdHlfcHJvcGxpbmVdfSB7CisgICAgc2V0IGxpbmUgW3JlYWRfcHJvcGxpbmVdCisgICAgaWYge1tzZXQgaWR4IFtsc2VhcmNoIC1leGFjdCAkbGluZSBDVVRDTEFTU11dID4gLTF9IHsKKyAgICAgIHNldCBjdXRjbGFzcyBbbGluZGV4ICRsaW5lIFtleHByICRpZHggKyAxXV0KKyAgICAgIHNldCBsaW5lIFtscmVwbGFjZSAkbGluZSAkaWR4IFtleHByICRpZHggKyAxXV0KKworICAgICAgaWYge1tzZXQgaWR4IFtsc2VhcmNoIC1leGFjdCAkbGluZSBMQVlFUl1dID4gLTF9IHsKKyAgICAgICAgc2V0IG90aGVyX2xheWVyIFtsaW5kZXggJGxpbmUgW2V4cHIgJGlkeCArIDFdXQorICAgICAgICBzZXQgbGluZSBbbHJlcGxhY2UgJGxpbmUgJGlkeCBbZXhwciAkaWR4ICsgMV1dCisKKyAgICAgICAgaWYge1tzZXQgaWR4IFtsc2VhcmNoIC1leGFjdCAkbGluZSBDT05DQVZFQ09STkVSXV0gPiAtMX0geworICAgICAgICAgIHNldCBsaW5lIFtscmVwbGFjZSAkbGluZSAkaWR4ICRpZHhdCisKKyAgICAgICAgICBpZiB7W3NldCBpZHggW2xzZWFyY2ggLWV4YWN0ICRsaW5lIFNQQUNJTkddXSA+IC0xfSB7CisgICAgICAgICAgICBkaWN0IHNldCBzcGFjaW5nICRjdXRjbGFzcyAkb3RoZXJfbGF5ZXIgY29uY2F2ZSBbZXhwciByb3VuZChbbGluZGV4ICRsaW5lIFtleHByICRpZHggKyAxXV0gKiAkZGVmX3VuaXRzKV0KKyAgICAgICAgICAgICMgc2V0IGxpbmUgW2xyZXBsYWNlICRsaW5lICRpZHggW2V4cHIgJGlkeCArIDFdXQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorICAjIGRlYnVnICIkbGF5ZXJfbmFtZSAkc3BhY2luZyIKKyAgZGljdCBzZXQgbGF5ZXJzICRsYXllcl9uYW1lIHNwYWNpbmcgJHNwYWNpbmcKKyAgIyBkZWJ1ZyAiJGxheWVyX25hbWUgW2RpY3QgZ2V0ICRsYXllcnMgJGxheWVyX25hbWVdIgorfQorCitwcm9jIHJlYWRfc3BhY2luZ3RhYmxlcyB7bGF5ZXJfbmFtZX0geworICB2YXJpYWJsZSBsYXllcnMKKyAgdmFyaWFibGUgZGVmX3VuaXRzCisKKyAgc2V0IGxheWVyIFtmaW5kX2xheWVyICRsYXllcl9uYW1lXQorICBzZXQgcHJscyB7fQorCisgIGlmIHtbJGxheWVyIGhhc1R3b1dpZHRoc1NwYWNpbmdSdWxlc119IHsKKyAgICBzZXQgdHlwZSAiVFdPV0lEVEhTIgorICAgIHNldCBzdWJ0eXBlICJOT05FIgorCisgICAgc2V0IHRhYmxlX3NpemUgWyRsYXllciBnZXRUd29XaWR0aHNTcGFjaW5nVGFibGVOdW1XaWR0aHNdCisgICAgZm9yIHtzZXQgaSAwfSB7JGkgPCAkdGFibGVfc2l6ZX0ge2luY3IgaX0geworICAgICAgc2V0IHdpZHRoIFskbGF5ZXIgZ2V0VHdvV2lkdGhzU3BhY2luZ1RhYmxlV2lkdGggJGldCisKKyAgICAgIGlmIHtbJGxheWVyIGdldFR3b1dpZHRoc1NwYWNpbmdUYWJsZUhhc1BSTCAkaV19IHsKKyAgICAgICAgc2V0IHBybCBbJGxheWVyIGdldFR3b1dpZHRoc1NwYWNpbmdUYWJsZVBSTCAkaV0KKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHNldCBwcmwgMAorICAgICAgfQorICAgICAgc2V0IHNwYWNpbmdzIHt9CisgICAgICBmb3Ige3NldCBqIDB9IHskaiA8ICR0YWJsZV9zaXplfSB7aW5jciBqfSB7CisgICAgICAgIGxhcHBlbmQgc3BhY2luZ3MgWyRsYXllciBnZXRUd29XaWR0aHNTcGFjaW5nVGFibGVFbnRyeSAkaSAkal0KKyAgICAgIH0KKworICAgICAgZGljdCBzZXQgbGF5ZXJzICRsYXllcl9uYW1lIHNwYWNpbmd0YWJsZSAkdHlwZSAkc3VidHlwZSAkd2lkdGggW2xpc3QgcHJsICRwcmwgc3BhY2luZ3MgJHNwYWNpbmdzXQorICAgIH0KKyAgfQorCisgIHNldF9wcm9wX2xpbmVzICRsYXllciBMRUY1OF9TUEFDSU5HVEFCTEUKKyAgc2V0IHNwYWNpbmcge30KKworICB3aGlsZSB7IVtlbXB0eV9wcm9wbGluZV19IHsKKyAgICBzZXQgbGluZSBbcmVhZF9wcm9wbGluZV0KKyAgICAjIGRlYnVnICIkbGluZSIKKyAgICBzZXQgdHlwZSBbbGluZGV4ICRsaW5lIDFdCisgICAgc2V0IHN1YnR5cGUgW2xpbmRleCAkbGluZSAyXQorCisgICAgc2V0IHRhYmxlX2VudHJ5X2luZGV4ZXMgW2xzZWFyY2ggLWV4YWN0IC1hbGwgJGxpbmUgIldJRFRIIl0KKyAgICBzZXQgbnVtX2VudHJpZXMgW2xsZW5ndGggJHRhYmxlX2VudHJ5X2luZGV4ZXNdCisKKyAgICBmb3JlYWNoIHN0YXJ0X2luZGV4ICR0YWJsZV9lbnRyeV9pbmRleGVzIHsKKyAgICAgIHNldCBwb3MgJHN0YXJ0X2luZGV4CisgICAgICBpbmNyIHBvcworICAgICAgc2V0IHdpZHRoIFtleHByIHJvdW5kKFtsaW5kZXggJGxpbmUgJHBvc10gKiAkZGVmX3VuaXRzKV0KKyAgICAgIGluY3IgcG9zCisgICAgICBpZiB7W2xpbmRleCAkbGluZSAkcG9zXSA9PSAiUFJMIn0geworICAgICAgICBpbmNyIHBvcworICAgICAgICBzZXQgcHJsIFtleHByIHJvdW5kKFtsaW5kZXggJGxpbmUgJHBvc10gKiAkZGVmX3VuaXRzKV0KKyAgICAgICAgaW5jciBwb3MKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHNldCBwcmwgMAorICAgICAgfQorICAgICAgc2V0IHNwYWNpbmdzIHt9CisgICAgICBmb3Ige3NldCBpIDB9IHskaSA8ICRudW1fZW50cmllc30ge2luY3IgaX0geworICAgICAgICAjIGRlYnVnICJbZXhwciAkaSArICRwb3NdIFtsaW5kZXggJGxpbmUgW2V4cHIgJGkgKyAkcG9zXV0iCisgICAgICAgIGxhcHBlbmQgc3BhY2luZ3MgW2V4cHIgcm91bmQoW2xpbmRleCAkbGluZSBbZXhwciAkaSArICRwb3NdXSAqICRkZWZfdW5pdHMpXQorICAgICAgfQorICAgICAgZGljdCBzZXQgbGF5ZXJzICRsYXllcl9uYW1lIHNwYWNpbmd0YWJsZSAkdHlwZSAkc3VidHlwZSAkd2lkdGggW2xpc3QgcHJsICRwcmwgc3BhY2luZ3MgJHNwYWNpbmdzXQorICAgIH0KKyAgfQorCisgIGlmIHshW2RpY3QgZXhpc3RzICRsYXllcnMgJGxheWVyX25hbWUgc3BhY2luZ3RhYmxlXX0geworICAgIGRpY3Qgc2V0IGxheWVycyAkbGF5ZXJfbmFtZSBzcGFjaW5ndGFibGUge30KKyAgfQorICAjIGRlYnVnICIkbGF5ZXJfbmFtZSBbZGljdCBnZXQgJGxheWVycyAkbGF5ZXJfbmFtZV0iCit9CisKK3Byb2MgZ2V0X3NwYWNpbmd0YWJsZXMge2xheWVyX25hbWV9IHsKKyAgdmFyaWFibGUgbGF5ZXJzCisKKyAgaWYgeyFbZGljdCBleGlzdHMgJGxheWVycyAkbGF5ZXJfbmFtZSBzcGFjaW5ndGFibGVdfSB7CisgICAgcmVhZF9zcGFjaW5ndGFibGVzICRsYXllcl9uYW1lCisgIH0KKworICByZXR1cm4gW2RpY3QgZ2V0ICRsYXllcnMgJGxheWVyX25hbWUgc3BhY2luZ3RhYmxlXQorfQorCitwcm9jIGdldF9jb25jYXZlX3NwYWNpbmdfdmFsdWUge2xheWVyX25hbWUgb3RoZXJfbGF5ZXJfbmFtZX0geworICB2YXJpYWJsZSBsYXllcnMKKyAgdmFyaWFibGUgZGVmYXVsdF9jdXRjbGFzcworCisgIGlmIHshW2RpY3QgZXhpc3RzICRsYXllcnMgJGxheWVyX25hbWUgc3BhY2luZ119IHsKKyAgICByZWFkX3NwYWNpbmcgJGxheWVyX25hbWUKKyAgfQorICAjIGRlYnVnICIkbGF5ZXJfbmFtZSBbZGljdCBnZXQgJGxheWVycyAkbGF5ZXJfbmFtZV0iCisgIGlmIHtbZGljdCBleGlzdHMgJGxheWVycyAkbGF5ZXJfbmFtZSBzcGFjaW5nIFtkaWN0IGdldCAkZGVmYXVsdF9jdXRjbGFzcyAkbGF5ZXJfbmFtZV0gJG90aGVyX2xheWVyX25hbWUgY29uY2F2ZV19IHsKKyAgICByZXR1cm4gW2RpY3QgZ2V0ICRsYXllcnMgJGxheWVyX25hbWUgc3BhY2luZyBbZGljdCBnZXQgJGRlZmF1bHRfY3V0Y2xhc3MgJGxheWVyX25hbWVdICRvdGhlcl9sYXllcl9uYW1lIGNvbmNhdmVdCisgIH0KKyAgcmV0dXJuIDAKK30KKworcHJvYyByZWFkX2FycmF5c3BhY2luZyB7bGF5ZXJfbmFtZX0geworICB2YXJpYWJsZSBsYXllcnMKKyAgdmFyaWFibGUgZGVmX3VuaXRzCisKKyAgc2V0IGxheWVyIFtmaW5kX2xheWVyICRsYXllcl9uYW1lXQorCisgIHNldF9wcm9wX2xpbmVzICRsYXllciBMRUY1OF9BUlJBWVNQQUNJTkcKKyAgc2V0IGFycmF5c3BhY2luZyB7fQorCisgIHdoaWxlIHshW2VtcHR5X3Byb3BsaW5lXX0geworICAgIHNldCBsaW5lIFtyZWFkX3Byb3BsaW5lXQorICAgIGlmIHtbc2V0IGlkeCBbbHNlYXJjaCAtZXhhY3QgJGxpbmUgUEFSQUxMRUxPVkVSTEFQXV0gPiAtMX0geworICAgICAgZGljdCBzZXQgYXJyYXlzcGFjaW5nIHBhcmFsbGVsb3ZlcmxhcCAxCisgICAgICBzZXQgbGluZSBbbHJlcGxhY2UgJGxpbmUgJGlkeCAkaWR4XQorICAgIH0KKyAgICBpZiB7W3NldCBpZHggW2xzZWFyY2ggLWV4YWN0ICRsaW5lIExPTkdBUlJBWV1dID4gLTF9IHsKKyAgICAgIGRpY3Qgc2V0IGFycmF5c3BhY2luZyBsb25nYXJyYXkgMQorICAgICAgc2V0IGxpbmUgW2xyZXBsYWNlICRsaW5lICRpZHggJGlkeF0KKyAgICB9CisgICAgaWYge1tzZXQgaWR4IFtsc2VhcmNoIC1leGFjdCAkbGluZSBDVVRTUEFDSU5HXV0gPiAtMX0geworICAgICAgZGljdCBzZXQgYXJyYXlzcGFjaW5nIGN1dHNwYWNpbmcgW2V4cHIgcm91bmQoW2xpbmRleCAkbGluZSBbZXhwciAkaWR4ICsgMV1dICogJGRlZl91bml0cyldCisgICAgICBzZXQgbGluZSBbbHJlcGxhY2UgJGxpbmUgJGlkeCBbZXhwciAkaWR4ICsgMV1dCisgICAgfQorICAgIHdoaWxlIHtbc2V0IGlkeCBbbHNlYXJjaCAtZXhhY3QgJGxpbmUgQVJSQVlDVVRTXV0gPiAtMX0geworICAgICAgZGljdCBzZXQgYXJyYXlzcGFjaW5nIGFycmF5Y3V0cyBbbGluZGV4ICRsaW5lIFtleHByICRpZHggKyAxXV0gc3BhY2luZyBbZXhwciByb3VuZChbbGluZGV4ICRsaW5lIFtleHByICRpZHggKyAzXV0gKiAkZGVmX3VuaXRzKV0KKyAgICAgIHNldCBsaW5lIFtscmVwbGFjZSAkbGluZSAkaWR4IFtleHByICRpZHggKyAzXV0KKyAgICB9CisgIH0KKyAgZGljdCBzZXQgbGF5ZXJzICRsYXllcl9uYW1lIGFycmF5c3BhY2luZyAkYXJyYXlzcGFjaW5nCit9CisKK3Byb2MgcmVhZF9jdXRjbGFzcyB7bGF5ZXJfbmFtZX0geworICB2YXJpYWJsZSBsYXllcnMKKyAgdmFyaWFibGUgZGVmX3VuaXRzCisgIHZhcmlhYmxlIGRlZmF1bHRfY3V0Y2xhc3MKKworICBzZXQgbGF5ZXIgW2ZpbmRfbGF5ZXIgJGxheWVyX25hbWVdCisgIHNldF9wcm9wX2xpbmVzICRsYXllciBMRUY1OF9DVVRDTEFTUworICBkaWN0IHNldCBsYXllcnMgJGxheWVyX25hbWUgY3V0Y2xhc3Mge30KKyAgc2V0IG1pbl9hcmVhIC0xCisKKyAgd2hpbGUgeyFbZW1wdHlfcHJvcGxpbmVdfSB7CisgICAgc2V0IGxpbmUgW3JlYWRfcHJvcGxpbmVdCisgICAgaWYgeyFbcmVnZXhwIHtDVVRDTEFTU1xzKyhbXlxzXSspXHMrV0lEVEhccysoW15cc10rKX0gJGxpbmUgLSBjdXRfY2xhc3Mgd2lkdGhdfSB7CisgICAgICB1dGw6OmVycm9yICJQRE4iIDIwICJGYWlsZWQgdG8gcmVhZCBDVVRDTEFTUyBwcm9wZXJ0eSAnJGxpbmUnLiIKKyAgICB9CisgICAgaWYge1tyZWdleHAge0xFTkdUSFxzKyhbXlxzXSspfSAkbGluZSAtIGxlbmd0aF19IHsKKyAgICAgIHNldCBhcmVhIFtleHByICR3aWR0aCAqICRsZW5ndGhdCisgICAgfSBlbHNlIHsKKyAgICAgIHNldCBhcmVhIFtleHByICR3aWR0aCAqICR3aWR0aF0KKyAgICB9CisgICAgaWYgeyRtaW5fYXJlYSA9PSAtMSB8fCAkYXJlYSA8ICRtaW5fYXJlYX0geworICAgICAgZGljdCBzZXQgZGVmYXVsdF9jdXRjbGFzcyAkbGF5ZXJfbmFtZSAkY3V0X2NsYXNzCisgICAgICBzZXQgbWluX2FyZWEgJGFyZWEKKyAgICB9CisgICAgZGljdCBzZXQgbGF5ZXJzICRsYXllcl9uYW1lIGN1dGNsYXNzICRjdXRfY2xhc3MgW2xpc3Qgd2lkdGggW2V4cHIgcm91bmQoJHdpZHRoICogJGRlZl91bml0cyldIGxlbmd0aCBbZXhwciByb3VuZCgkbGVuZ3RoICogJGRlZl91bml0cyldXQorICB9Cit9CisKK3Byb2MgcmVhZF9lbmNsb3N1cmVzIHtsYXllcl9uYW1lfSB7CisgIHZhcmlhYmxlIGxheWVycworICB2YXJpYWJsZSBkZWZfdW5pdHMKKworICBzZXQgbGF5ZXIgW2ZpbmRfbGF5ZXIgJGxheWVyX25hbWVdCisgIHNldF9wcm9wX2xpbmVzICRsYXllciBMRUY1OF9FTkNMT1NVUkUKKyAgc2V0IHByZXZfY3V0Y2xhc3MgIiIKKworICB3aGlsZSB7IVtlbXB0eV9wcm9wbGluZV19IHsKKyAgICBzZXQgbGluZSBbcmVhZF9wcm9wbGluZV0KKyAgICAjIGRlYnVnICIkbGluZSIKKyAgICBzZXQgZW5jbG9zdXJlIHt9CisgICAgaWYge1tzZXQgaWR4IFtsc2VhcmNoIC1leGFjdCAkbGluZSBFT0xdXSA+IC0xfSB7CisgICAgICBjb250aW51ZQorICAgICAgZGljdCBzZXQgZW5jbG9zdXJlIGVvbCBbZXhwciByb3VuZChbbGluZGV4ICRsaW5lIFtleHByICRpZHggKyAxXV0gKiAkZGVmX3VuaXRzKV0KKyAgICAgIHNldCBsaW5lIFtscmVwbGFjZSAkbGluZSAkaWR4IFtleHByICRpZHggKyAxXV0KKyAgICB9CisgICAgaWYge1tzZXQgaWR4IFtsc2VhcmNoIC1leGFjdCAkbGluZSBFT0xPTkxZXV0gPiAtMX0geworICAgICAgZGljdCBzZXQgZW5jbG9zdXJlIGVvbG9ubHkgMQorICAgICAgc2V0IGxpbmUgW2xyZXBsYWNlICRsaW5lICRpZHggJGlkeF0KKyAgICB9CisgICAgaWYge1tzZXQgaWR4IFtsc2VhcmNoIC1leGFjdCAkbGluZSBTSE9SVEVER0VPTkVPTF1dID4gLTF9IHsKKyAgICAgIGRpY3Qgc2V0IGVuY2xvc3VyZSBzaG9ydGVkZ2VvbmVvbCAxCisgICAgICBzZXQgbGluZSBbbHJlcGxhY2UgJGxpbmUgJGlkeCAkaWR4XQorICAgIH0KKyAgICBpZiB7W3NldCBpZHggW2xzZWFyY2ggLWV4YWN0ICRsaW5lIE1JTkxFTkdUSF1dID4gLTF9IHsKKyAgICAgIGRpY3Qgc2V0IGVuY2xvc3VyZSBtaW5sZW5ndGggW2V4cHIgcm91bmQoW2xpbmRleCAkbGluZSBbZXhwciAkaWR4ICsgMV1dICogJGRlZl91bml0cyldCisgICAgICBzZXQgbGluZSBbbHJlcGxhY2UgJGxpbmUgJGlkeCBbZXhwciAkaWR4ICsgMV1dCisgICAgfQorICAgIGlmIHtbc2V0IGlkeCBbbHNlYXJjaCAtZXhhY3QgJGxpbmUgQUJPVkVdXSA+IC0xfSB7CisgICAgICBkaWN0IHNldCBlbmNsb3N1cmUgYWJvdmUgMQorICAgICAgc2V0IGxpbmUgW2xyZXBsYWNlICRsaW5lICRpZHggJGlkeF0KKyAgICB9CisgICAgaWYge1tzZXQgaWR4IFtsc2VhcmNoIC1leGFjdCAkbGluZSBCRUxPV11dID4gLTF9IHsKKyAgICAgIGRpY3Qgc2V0IGVuY2xvc3VyZSBiZWxvdyAxCisgICAgICBzZXQgbGluZSBbbHJlcGxhY2UgJGxpbmUgJGlkeCAkaWR4XQorICAgIH0KKyAgICBpZiB7W3NldCBpZHggW2xzZWFyY2ggLWV4YWN0ICRsaW5lIEVORF1dID4gLTF9IHsKKyAgICAgIGRpY3Qgc2V0IGVuY2xvc3VyZSBlbmQgMQorICAgICAgc2V0IGxpbmUgW2xyZXBsYWNlICRsaW5lICRpZHggJGlkeF0KKyAgICB9CisgICAgaWYge1tzZXQgaWR4IFtsc2VhcmNoIC1leGFjdCAkbGluZSBTSURFXV0gPiAtMX0geworICAgICAgZGljdCBzZXQgZW5jbG9zdXJlIHNpZGUgMQorICAgICAgc2V0IGxpbmUgW2xyZXBsYWNlICRsaW5lICRpZHggJGlkeF0KKyAgICB9CisKKyAgICBzZXQgd2lkdGggMAorICAgIHJlZ2V4cCB7V0lEVEhccysoW15cc10rKX0gJGxpbmUgLSB3aWR0aAorICAgIHNldCB3aWR0aCBbZXhwciByb3VuZCgkd2lkdGggKiAkZGVmX3VuaXRzKV0KKworICAgIGlmIHshW3JlZ2V4cCB7RU5DTE9TVVJFIENVVENMQVNTXHMrKFteXHNdKylccysoW15cc10rKVxzKyhbXlxzXSspfSAkbGluZSAtIGN1dF9jbGFzcyBvdmVybGFwMSBvdmVybGFwMl19IHsKKyAgICAgIHV0bDo6ZXJyb3IgIlBETiIgMjEgIkZhaWxlZCB0byByZWFkIEVOQ0xPU1VSRSBwcm9wZXJ0eSAnJGxpbmUnLiIKKyAgICB9CisgICAgZGljdCBzZXQgZW5jbG9zdXJlIG92ZXJsYXAxIFtleHByIHJvdW5kKCRvdmVybGFwMSAqICRkZWZfdW5pdHMpXQorICAgIGRpY3Qgc2V0IGVuY2xvc3VyZSBvdmVybGFwMiBbZXhwciByb3VuZCgkb3ZlcmxhcDIgKiAkZGVmX3VuaXRzKV0KKyAgICAjIGRlYnVnICJjbGFzcyAtICRjdXRfY2xhc3MgZW5jbG9zdXJlIC0gJGVuY2xvc3VyZSIKKyAgICBpZiB7JHByZXZfY3V0Y2xhc3MgIT0gJGN1dF9jbGFzc30geworICAgICAgc2V0IGVuY2xvc3VyZXMge30KKyAgICAgIHNldCBwcmV2X2N1dGNsYXNzICRjdXRfY2xhc3MKKyAgICB9CisgICAgZGljdCBsYXBwZW5kIGVuY2xvc3VyZXMgJHdpZHRoICRlbmNsb3N1cmUKKyAgICBkaWN0IHNldCBsYXllcnMgJGxheWVyX25hbWUgY3V0Y2xhc3MgJGN1dF9jbGFzcyBlbmNsb3N1cmVzICRlbmNsb3N1cmVzCisgIH0KKyAgIyBkZWJ1ZyAiZW5kIgorfQorCitwcm9jIHJlYWRfbWluaW11bWN1dHMge2xheWVyX25hbWV9IHsKKyAgdmFyaWFibGUgbGF5ZXJzCisgIHZhcmlhYmxlIGRlZl91bml0cworICB2YXJpYWJsZSBkZWZhdWx0X2N1dGNsYXNzCisKKyAgc2V0IGxheWVyIFtmaW5kX2xheWVyICRsYXllcl9uYW1lXQorICBzZXRfcHJvcF9saW5lcyAkbGF5ZXIgTEVGNThfTUlOSU1VTUNVVAorCisgIHdoaWxlIHshW2VtcHR5X3Byb3BsaW5lXX0geworICAgIHNldCBsaW5lIFtyZWFkX3Byb3BsaW5lXQorICAgIHNldCBjbGFzc2VzIHt9CisgICAgc2V0IGNvbnN0cmFpbnRzIHt9CisgICAgc2V0IGZyb21hYm92ZSAwCisgICAgc2V0IGZyb21iZWxvdyAwCisKKyAgICBpZiB7W3NldCBpZHggW2xzZWFyY2ggLWV4YWN0ICRsaW5lIEZST01BQk9WRV1dID4gLTF9IHsKKyAgICAgIHNldCBmcm9tYWJvdmUgMQorICAgICAgc2V0IGxpbmUgW2xyZXBsYWNlICRsaW5lICRpZHggJGlkeF0KKyAgICB9IGVsc2VpZiB7W3NldCBpZHggW2xzZWFyY2ggLWV4YWN0ICRsaW5lIEZST01CRUxPV11dID4gLTF9IHsKKyAgICAgIHNldCBmcm9tYmVsb3cgMQorICAgICAgc2V0IGxpbmUgW2xyZXBsYWNlICRsaW5lICRpZHggJGlkeF0KKyAgICB9IGVsc2UgeworICAgICAgc2V0IGZyb21hYm92ZSAxCisgICAgICBzZXQgZnJvbWJlbG93IDEKKyAgICB9CisKKyAgICBpZiB7W3NldCBpZHggW2xzZWFyY2ggLWV4YWN0ICRsaW5lIFdJRFRIXV0gPiAtMX0geworICAgICAgc2V0IHdpZHRoIFtleHByIHJvdW5kKFtsaW5kZXggJGxpbmUgW2V4cHIgJGlkeCArIDFdXSAqICRkZWZfdW5pdHMpXQorICAgIH0KKworICAgIGlmIHtbcmVnZXhwIHtMRU5HVEggKFswLTlcLl0qKSBXSVRISU4gKFswLTlcLl0qKX0gJGxpbmUgLSBsZW5ndGggd2l0aGluXX0geworICAgICAgIyBOb3QgZXhwZWN0aW5nIHRvIGRlYWwgd2l0aCB0aGlzIGtpbmcgb2Ygc3RydWN0dXJlLCBzbyBjYW4gaWdub3JlCisgICAgICBzZXQgbGluZSBbcmVnc3ViIHtMRU5HVEggKFswLTlcLl0qKSBXSVRISU4gKFswLTlcLl0qKX0gJGxpbmUge31dCisgICAgfQorCisgICAgaWYge1tyZWdleHAge0FSRUEgKFswLTlcLl0qKSBXSVRISU4gKFswLTlcLl0qKX0gJGxpbmUgLSBhcmVhIHdpdGhpbl19IHsKKyAgICAgICMgTm90IGV4cGVjdGluZyB0byBkZWFsIHdpdGggdGhpcyBraW5nIG9mIHN0cnVjdHVyZSwgc28gY2FuIGlnbm9yZQorICAgICAgc2V0IGxpbmUgW3JlZ3N1YiB7QVJFQSAoWzAtOVwuXSopIFdJVEhJTiAoWzAtOVwuXSopfSAkbGluZSB7fV0KKyAgICB9CisKKyAgICB3aGlsZSB7W3NldCBpZHggW2xzZWFyY2ggLWV4YWN0ICRsaW5lIENVVENMQVNTXV0gPiAtMX0geworICAgICAgc2V0IGN1dGNsYXNzIFtsaW5kZXggJGxpbmUgW2V4cHIgJGlkeCArIDFdXQorICAgICAgc2V0IG51bV9jdXRzIFtsaW5kZXggJGxpbmUgW2V4cHIgJGlkeCArIDJdXQorCisgICAgICBpZiB7JGZyb21hYm92ZSA9PSAxfSB7CisgICAgICAgIGRpY3Qgc2V0IGxheWVycyAkbGF5ZXJfbmFtZSBtaW5pbXVtY3V0IHdpZHRoICR3aWR0aCBmcm9tYWJvdmUgJGN1dGNsYXNzICRudW1fY3V0cworICAgICAgfQorICAgICAgaWYgeyRmcm9tYmVsb3cgPT0gMX0geworICAgICAgICBkaWN0IHNldCBsYXllcnMgJGxheWVyX25hbWUgbWluaW11bWN1dCB3aWR0aCAkd2lkdGggZnJvbWJlbG93ICRjdXRjbGFzcyAkbnVtX2N1dHMKKyAgICAgIH0KKworICAgICAgc2V0IGxpbmUgW2xyZXBsYWNlICRsaW5lICRpZHggW2V4cHIgJGlkeCArIDJdXQorICAgIH0KKyAgfQorfQorCitwcm9jIGdldF9taW5pbXVtY3V0cyB7bGF5ZXJfbmFtZSB3aWR0aCBmcm9tIGN1dGNsYXNzfSB7CisgIHZhcmlhYmxlIGxheWVycworICAjIGRlYnVnICIkbGF5ZXJfbmFtZSwgJHdpZHRoLCAkZnJvbSwgJGN1dGNsYXNzIgorICBpZiB7IVtkaWN0IGV4aXN0cyAkbGF5ZXJzICRsYXllcl9uYW1lIG1pbmltdW1jdXRdfSB7CisgICAgcmVhZF9taW5pbXVtY3V0cyAkbGF5ZXJfbmFtZQorICAgICMgZGVidWcgIltkaWN0IGdldCAkbGF5ZXJzICRsYXllcl9uYW1lIG1pbmltdW1jdXRdIgorICB9CisKKyAgc2V0IG1pbl9jdXRzIDEKKworICBpZiB7IVtkaWN0IGV4aXN0cyAkbGF5ZXJzICRsYXllcl9uYW1lIG1pbmltdW1jdXRdfSB7CisgICAgIyBkZWJ1ZyAiTm8gbWluY3V0IHJ1bGUgZm9yIGxheWVyICRsYXllcl9uYW1lIgorICAgIHJldHVybiAkbWluX2N1dHMKKyAgfQorCisgIHNldCBpZHggMAorICBzZXQgd2lkdGhzIFtsc29ydCAtaW50ZWdlciAtZGVjcmVhc2luZyBbZGljdCBrZXlzIFtkaWN0IGdldCAkbGF5ZXJzICRsYXllcl9uYW1lIG1pbmltdW1jdXQgd2lkdGhdXV0KKyAgaWYgeyR3aWR0aCA8PSBbbGluZGV4ICR3aWR0aHMgZW5kXX0geworICAgICMgZGVidWcgIndpZHRoICR3aWR0aCBsZXNzIHRoYW4gc21hbGxlc3Qgd2lkdGggYm91bmRhcnkgW2xpbmRleCAkd2lkdGhzIGVuZF0iCisgICAgcmV0dXJuICRtaW5fY3V0cworICB9CisgIGZvcmVhY2ggd2lkdGhfYm91bmRhcnkgW2xyZXZlcnNlICR3aWR0aHNdIHsKKyAgICBpZiB7JHdpZHRoID4gJHdpZHRoX2JvdW5kYXJ5ICYmIFtkaWN0IGV4aXN0cyAkbGF5ZXJzICRsYXllcl9uYW1lIG1pbmltdW1jdXQgd2lkdGggJHdpZHRoX2JvdW5kYXJ5ICRmcm9tXX0geworICAgICAgIyBkZWJ1ZyAiW2RpY3QgZ2V0ICRsYXllcnMgJGxheWVyX25hbWUgbWluaW11bWN1dCB3aWR0aCAkd2lkdGhfYm91bmRhcnldIgorICAgICAgaWYge1tkaWN0IGV4aXN0cyAkbGF5ZXJzICRsYXllcl9uYW1lIG1pbmltdW1jdXQgd2lkdGggJHdpZHRoX2JvdW5kYXJ5ICRmcm9tICRjdXRjbGFzc119IHsKKyAgICAgICAgc2V0IG1pbl9jdXRzIFtkaWN0IGdldCAkbGF5ZXJzICRsYXllcl9uYW1lIG1pbmltdW1jdXQgd2lkdGggJHdpZHRoX2JvdW5kYXJ5ICRmcm9tICRjdXRjbGFzc10KKyAgICAgIH0KKyAgICAgICMgZGVidWcgIlNlbGVjdGVkIHdpZHRoIGJvdW5kYXJ5ICR3aWR0aF9ib3VuZGFyeSBmb3IgJGxheWVyX25hbWUsICR3aWR0aCAkZnJvbSwgJGN1dGNsYXNzIFtkaWN0IGdldCAkbGF5ZXJzICRsYXllcl9uYW1lIG1pbmltdW1jdXQgd2lkdGggJHdpZHRoX2JvdW5kYXJ5ICRmcm9tICRjdXRjbGFzc10iCisgICAgICBicmVhaworICAgIH0KKyAgfQorCisgIHJldHVybiAkbWluX2N1dHMKK30KKworcHJvYyBnZXRfdmlhX2VuY2xvc3VyZSB7dmlhX2luZm8gbG93ZXJfd2lkdGggdXBwZXJfd2lkdGh9IHsKKyAgdmFyaWFibGUgbGF5ZXJzCisgIHZhcmlhYmxlIGRlZmF1bHRfY3V0Y2xhc3MKKyAgdmFyaWFibGUgbWluX2xvd2VyX2VuY2xvc3VyZQorICB2YXJpYWJsZSBtYXhfbG93ZXJfZW5jbG9zdXJlCisgIHZhcmlhYmxlIG1pbl91cHBlcl9lbmNsb3N1cmUKKyAgdmFyaWFibGUgbWF4X3VwcGVyX2VuY2xvc3VyZQorCisgICMgZGVidWcgInZpYV9pbmZvICR2aWFfaW5mbyB3aWR0aCAkbG93ZXJfd2lkdGgsJHVwcGVyX3dpZHRoIgorICBzZXQgbGF5ZXJfbmFtZSBbZGljdCBnZXQgJHZpYV9pbmZvIGN1dCBsYXllcl0KKworICBpZiB7IVtkaWN0IGV4aXN0cyAkbGF5ZXJzICRsYXllcl9uYW1lIGN1dGNsYXNzXX0geworICAgIHJlYWRfY3V0Y2xhc3MgJGxheWVyX25hbWUKKyAgICByZWFkX2VuY2xvc3VyZXMgJGxheWVyX25hbWUKKyAgfQorCisgIGlmIHshKFtkaWN0IGV4aXN0cyAkZGVmYXVsdF9jdXRjbGFzcyAkbGF5ZXJfbmFtZV0gJiYgW2RpY3QgZXhpc3RzICRsYXllcnMgJGxheWVyX25hbWUgY3V0Y2xhc3MgW2RpY3QgZ2V0ICRkZWZhdWx0X2N1dGNsYXNzICRsYXllcl9uYW1lXSBlbmNsb3N1cmVzXSl9IHsKKyAgICBzZXQgbG93ZXJfZW5jbG9zdXJlIFtkaWN0IGdldCAkdmlhX2luZm8gbG93ZXIgZW5jbG9zdXJlXQorICAgIHNldCB1cHBlcl9lbmNsb3N1cmUgW2RpY3QgZ2V0ICR2aWFfaW5mbyB1cHBlciBlbmNsb3N1cmVdCisKKyAgICBzZXQgbWluX2xvd2VyX2VuY2xvc3VyZSBbbGluZGV4ICRsb3dlcl9lbmNsb3N1cmUgMF0KKyAgICBzZXQgbWF4X2xvd2VyX2VuY2xvc3VyZSBbbGluZGV4ICRsb3dlcl9lbmNsb3N1cmUgMV0KKworICAgIGlmIHskbWF4X2xvd2VyX2VuY2xvc3VyZSA8ICRtaW5fbG93ZXJfZW5jbG9zdXJlfSB7CisgICAgICBzZXQgc3dhcCAkbWluX2xvd2VyX2VuY2xvc3VyZQorICAgICAgc2V0IG1pbl9sb3dlcl9lbmNsb3N1cmUgJG1heF9sb3dlcl9lbmNsb3N1cmUKKyAgICAgIHNldCBtYXhfbG93ZXJfZW5jbG9zdXJlICRzd2FwCisgICAgfQorCisgICAgc2V0IG1pbl91cHBlcl9lbmNsb3N1cmUgW2xpbmRleCAkdXBwZXJfZW5jbG9zdXJlIDBdCisgICAgc2V0IG1heF91cHBlcl9lbmNsb3N1cmUgW2xpbmRleCAkdXBwZXJfZW5jbG9zdXJlIDFdCisKKyAgICBpZiB7JG1heF91cHBlcl9lbmNsb3N1cmUgPCAkbWluX3VwcGVyX2VuY2xvc3VyZX0geworICAgICAgc2V0IHN3YXAgJG1pbl91cHBlcl9lbmNsb3N1cmUKKyAgICAgIHNldCBtaW5fdXBwZXJfZW5jbG9zdXJlICRtYXhfdXBwZXJfZW5jbG9zdXJlCisgICAgICBzZXQgbWF4X3VwcGVyX2VuY2xvc3VyZSAkc3dhcAorICAgIH0KKworICAgIHNldCBzZWxlY3RlZF9lbmNsb3N1cmUgW2xpc3QgJG1pbl9sb3dlcl9lbmNsb3N1cmUgJG1heF9sb3dlcl9lbmNsb3N1cmUgJG1pbl91cHBlcl9lbmNsb3N1cmUgJG1heF91cHBlcl9lbmNsb3N1cmVdCisgIH0gZWxzZSB7CisgICAgc2V0IGVuY2xvc3VyZXMgW2RpY3QgZ2V0ICRsYXllcnMgJGxheWVyX25hbWUgY3V0Y2xhc3MgW2RpY3QgZ2V0ICRkZWZhdWx0X2N1dGNsYXNzICRsYXllcl9uYW1lXSBlbmNsb3N1cmVzXQorICAgICMgZGVidWcgIkVuY2xvc3VyZSBzZXQgJGVuY2xvc3VyZXMiCisgICAgc2V0IHVwcGVyX2VuY2xvc3VyZXMge30KKyAgICBzZXQgbG93ZXJfZW5jbG9zdXJlcyB7fQorCisgICAgc2V0IHdpZHRoICRsb3dlcl93aWR0aAorCisgICAgZm9yZWFjaCBzaXplIFtscmV2ZXJzZSBbZGljdCBrZXlzICRlbmNsb3N1cmVzXV0geworICAgICAgaWYgeyR3aWR0aCA+PSAkc2l6ZX0geworICAgICAgICAgIGJyZWFrCisgICAgICB9CisgICAgfQorCisgICAgc2V0IGVuY2xvc3VyZV9saXN0IFtkaWN0IGdldCAkZW5jbG9zdXJlcyAkc2l6ZV0KKyAgICAjIGRlYnVnICJJbml0aWFsIGVuY2xvc3VyZV9saXN0IChzaXplID0gJHNpemUpLSAkZW5jbG9zdXJlX2xpc3QiCisgICAgaWYgeyRzaXplID4gMH0geworICAgICAgZm9yZWFjaCBlbmNsb3N1cmUgJGVuY2xvc3VyZV9saXN0IHsKKyAgICAgICAgaWYgeyFbZGljdCBleGlzdHMgJGVuY2xvc3VyZSBhYm92ZV19IHsKKyAgICAgICAgICBsYXBwZW5kIGxvd2VyX2VuY2xvc3VyZXMgJGVuY2xvc3VyZQorICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgc2V0IHdpZHRoICR1cHBlcl93aWR0aAorCisgICAgZm9yZWFjaCBzaXplIFtscmV2ZXJzZSBbZGljdCBrZXlzICRlbmNsb3N1cmVzXV0geworICAgICAgaWYgeyR3aWR0aCA+PSAkc2l6ZX0geworICAgICAgICAgIGJyZWFrCisgICAgICB9CisgICAgfQorCisgICAgc2V0IGVuY2xvc3VyZV9saXN0IFtkaWN0IGdldCAkZW5jbG9zdXJlcyAkc2l6ZV0KKyAgICAjIGRlYnVnICJJbml0aWFsIGVuY2xvc3VyZV9saXN0IChzaXplID0gJHNpemUpLSAkZW5jbG9zdXJlX2xpc3QiCisgICAgaWYgeyRzaXplID4gMH0geworICAgICAgZm9yZWFjaCBlbmNsb3N1cmUgJGVuY2xvc3VyZV9saXN0IHsKKyAgICAgICAgaWYgeyFbZGljdCBleGlzdHMgJGVuY2xvc3VyZSBiZWxvd119IHsKKyAgICAgICAgICBsYXBwZW5kIHVwcGVyX2VuY2xvc3VyZXMgJGVuY2xvc3VyZQorICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgICAgaWYge1tsbGVuZ3RoICR1cHBlcl9lbmNsb3N1cmVzXSA9PSAwfSB7CisgICAgICBzZXQgemVyb19lbmNsb3N1cmVzX2xpc3QgW2RpY3QgZ2V0ICRlbmNsb3N1cmVzIDBdCisgICAgICBmb3JlYWNoIGVuY2xvc3VyZSAkemVyb19lbmNsb3N1cmVzX2xpc3QgeworICAgICAgICBpZiB7IVtkaWN0IGV4aXN0cyAkZW5jbG9zdXJlIGJlbG93XX0geworICAgICAgICAgIGxhcHBlbmQgdXBwZXJfZW5jbG9zdXJlcyAkZW5jbG9zdXJlCisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgICAgaWYge1tsbGVuZ3RoICRsb3dlcl9lbmNsb3N1cmVzXSA9PSAwfSB7CisgICAgICBzZXQgemVyb19lbmNsb3N1cmVzX2xpc3QgW2RpY3QgZ2V0ICRlbmNsb3N1cmVzIDBdCisgICAgICBmb3JlYWNoIGVuY2xvc3VyZSAkemVyb19lbmNsb3N1cmVzX2xpc3QgeworICAgICAgICBpZiB7IVtkaWN0IGV4aXN0cyAkZW5jbG9zdXJlIGFib3ZlXX0geworICAgICAgICAgIGxhcHBlbmQgbG93ZXJfZW5jbG9zdXJlcyAkZW5jbG9zdXJlCisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgICAgc2V0IHVwcGVyX21pbiAtMQorICAgIHNldCBsb3dlcl9taW4gLTEKKyAgICBpZiB7W2xsZW5ndGggJHVwcGVyX2VuY2xvc3VyZXNdID4gMX0geworICAgICAgZm9yZWFjaCBlbmNsb3N1cmUgJHVwcGVyX2VuY2xvc3VyZXMgeworICAgICAgICAjIGRlYnVnICJ1cHBlciBlbmNsb3N1cmUgLSAkZW5jbG9zdXJlIgorICAgICAgICBzZXQgdGhpc19taW4gW2V4cHIgbWluKFtkaWN0IGdldCAkZW5jbG9zdXJlIG92ZXJsYXAxXSwgW2RpY3QgZ2V0ICRlbmNsb3N1cmUgb3ZlcmxhcDJdKV0KKyAgICAgICAgaWYgeyR1cHBlcl9taW4gPCAwIHx8ICR0aGlzX21pbiA8ICR1cHBlcl9taW59IHsKKyAgICAgICAgICBzZXQgdXBwZXJfbWluICR0aGlzX21pbgorICAgICAgICAgIHNldCB1cHBlcl9lbmMgW2xpc3QgW2RpY3QgZ2V0ICRlbmNsb3N1cmUgb3ZlcmxhcDFdIFtkaWN0IGdldCAkZW5jbG9zdXJlIG92ZXJsYXAyXV0KKyAgICAgICAgICAjIGRlYnVnICJ1cHBlcl9lbmM6ICR1cHBlcl9lbmMiCisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgc2V0IGVuY2xvc3VyZSBbbGluZGV4ICR1cHBlcl9lbmNsb3N1cmVzIDBdCisgICAgICBzZXQgdXBwZXJfZW5jIFtsaXN0IFtkaWN0IGdldCAkZW5jbG9zdXJlIG92ZXJsYXAxXSBbZGljdCBnZXQgJGVuY2xvc3VyZSBvdmVybGFwMl1dCisgICAgfQorICAgIGlmIHtbbGxlbmd0aCAkbG93ZXJfZW5jbG9zdXJlc10gPiAxfSB7CisgICAgICBmb3JlYWNoIGVuY2xvc3VyZSAkbG93ZXJfZW5jbG9zdXJlcyB7CisgICAgICAgICMgZGVidWcgImxvd2VyIGVuY2xvc3VyZSAtICRlbmNsb3N1cmUiCisgICAgICAgIHNldCB0aGlzX21pbiBbZXhwciBtaW4oW2RpY3QgZ2V0ICRlbmNsb3N1cmUgb3ZlcmxhcDFdLCBbZGljdCBnZXQgJGVuY2xvc3VyZSBvdmVybGFwMl0pXQorICAgICAgICBpZiB7JGxvd2VyX21pbiA8IDAgfHwgJHRoaXNfbWluIDwgJGxvd2VyX21pbn0geworICAgICAgICAgIHNldCBsb3dlcl9taW4gJHRoaXNfbWluCisgICAgICAgICAgc2V0IGxvd2VyX2VuYyBbbGlzdCBbZGljdCBnZXQgJGVuY2xvc3VyZSBvdmVybGFwMV0gW2RpY3QgZ2V0ICRlbmNsb3N1cmUgb3ZlcmxhcDJdXQorICAgICAgICB9CisgICAgICB9CisgICAgICAjIGRlYnVnICJbbGxlbmd0aCAkbG93ZXJfZW5jbG9zdXJlc10gbG93ZXJfZW5jOiAkbG93ZXJfZW5jIgorICAgIH0gZWxzZSB7CisgICAgICBzZXQgZW5jbG9zdXJlIFtsaW5kZXggJGxvd2VyX2VuY2xvc3VyZXMgMF0KKyAgICAgIHNldCBsb3dlcl9lbmMgW2xpc3QgW2RpY3QgZ2V0ICRlbmNsb3N1cmUgb3ZlcmxhcDFdIFtkaWN0IGdldCAkZW5jbG9zdXJlIG92ZXJsYXAyXV0KKyAgICAgICMgZGVidWcgIjEgbG93ZXJfZW5jOiBsb3dlcl9lbmM6ICRsb3dlcl9lbmMiCisgICAgfQorICAgIHNldCBzZWxlY3RlZF9lbmNsb3N1cmUgW2xpc3Qgeyp9JGxvd2VyX2VuYyB7Kn0kdXBwZXJfZW5jXQorICB9CisgICMgZGVidWcgInNlbGVjdGVkICRzZWxlY3RlZF9lbmNsb3N1cmUiCisgIHNldCBtaW5fbG93ZXJfZW5jbG9zdXJlIFtleHByIG1pbihbbGluZGV4ICRzZWxlY3RlZF9lbmNsb3N1cmUgMF0sIFtsaW5kZXggJHNlbGVjdGVkX2VuY2xvc3VyZSAxXSldCisgIHNldCBtYXhfbG93ZXJfZW5jbG9zdXJlIFtleHByIG1heChbbGluZGV4ICRzZWxlY3RlZF9lbmNsb3N1cmUgMF0sIFtsaW5kZXggJHNlbGVjdGVkX2VuY2xvc3VyZSAxXSldCisgIHNldCBtaW5fdXBwZXJfZW5jbG9zdXJlIFtleHByIG1pbihbbGluZGV4ICRzZWxlY3RlZF9lbmNsb3N1cmUgMl0sIFtsaW5kZXggJHNlbGVjdGVkX2VuY2xvc3VyZSAzXSldCisgIHNldCBtYXhfdXBwZXJfZW5jbG9zdXJlIFtleHByIG1heChbbGluZGV4ICRzZWxlY3RlZF9lbmNsb3N1cmUgMl0sIFtsaW5kZXggJHNlbGVjdGVkX2VuY2xvc3VyZSAzXSldCisgICMgZGVidWcgImVuY2xvc3VyZXMgLSBtaW5fbG93ZXIgJG1pbl9sb3dlcl9lbmNsb3N1cmUgbWF4X2xvd2VyICRtYXhfbG93ZXJfZW5jbG9zdXJlIG1pbl91cHBlciAkbWluX3VwcGVyX2VuY2xvc3VyZSBtYXhfdXBwZXIgJG1heF91cHBlcl9lbmNsb3N1cmUiCit9CisKK3Byb2Mgc2VsZWN0X3ZpYV9pbmZvIHtsb3dlcn0geworICB2YXJpYWJsZSBkZWZfdmlhX3RlY2gKKworICBzZXQgbGF5ZXJfbmFtZSAkbG93ZXIKKyAgcmVnZXhwIHsoLiopX1BJTn0gJGxvd2VyIC0gbGF5ZXJfbmFtZQorCisgIHJldHVybiBbZGljdCBmaWx0ZXIgJGRlZl92aWFfdGVjaCBzY3JpcHQge3J1bGVfbmFtZSBydWxlfSB7ZXhwciB7W2RpY3QgZ2V0ICRydWxlIGxvd2VyIGxheWVyXSA9PSAkbGF5ZXJfbmFtZX19XQorfQorCitwcm9jIHNldF9sYXllcl9pbmZvIHtsYXllcl9pbmZvfSB7CisgIHZhcmlhYmxlIGxheWVycworCisgIHNldCBsYXllcnMgJGxheWVyX2luZm8KK30KKworcHJvYyByZWFkX3dpZHRodGFibGUge2xheWVyX25hbWV9IHsKKyAgdmFyaWFibGUgdGVjaAorICB2YXJpYWJsZSBkZWZfdW5pdHMKKworICBzZXQgdGFibGUge30KKyAgc2V0IGxheWVyIFtmaW5kX2xheWVyICRsYXllcl9uYW1lXQorICBzZXRfcHJvcF9saW5lcyAkbGF5ZXIgTEVGNThfV0lEVEhUQUJMRQorCisgIHdoaWxlIHshW2VtcHR5X3Byb3BsaW5lXX0geworICAgIHNldCBsaW5lIFtyZWFkX3Byb3BsaW5lXQorICAgIHNldCBmbGFncyB7fQorICAgIGlmIHtbc2V0IGlkeCBbbHNlYXJjaCAtZXhhY3QgJGxpbmUgT1JUSE9HT05BTF1dID4gLTF9IHsKKyAgICAgIGRpY3Qgc2V0IGZsYWdzIG9ydGhvZ29uYWwgMQorICAgICAgc2V0IGxpbmUgW2xyZXBsYWNlICRsaW5lICRpZHggJGlkeF0KKyAgICB9CisgICAgaWYge1tzZXQgaWR4IFtsc2VhcmNoIC1leGFjdCAkbGluZSBXUk9OR0RJUkVDVElPTl1dID4gLTF9IHsKKyAgICAgIGRpY3Qgc2V0IGZsYWdzIHdyb25nZGlyZWN0aW9uIDEKKyAgICAgIHNldCBsaW5lIFtscmVwbGFjZSAkbGluZSAkaWR4ICRpZHhdCisgICAgfQorCisgICAgcmVnZXhwIHtXSURUSFRBQkxFXHMrKC4qKX0gJGxpbmUgLSB3aWR0aHRhYmxlCisgICAgc2V0IHdpZHRodGFibGUgW2xtYXAgeCAkd2lkdGh0YWJsZSB7b3JkOjptaWNyb25zX3RvX2RidSAkeH1dCisKKyAgICBpZiB7W2RpY3QgZXhpc3RzICRmbGFncyB3cm9uZ2RpcmVjdGlvbl19IHsKKyAgICAgIGRpY3Qgc2V0IHRhYmxlIHdyb25nZGlyZWN0aW9uICR3aWR0aHRhYmxlCisgICAgfSBlbHNlIHsKKyAgICAgIGRpY3Qgc2V0IHRhYmxlIHJpZ2h0ZGlyZWN0aW9uICR3aWR0aHRhYmxlCisgICAgfQorICB9CisgIHJldHVybiAkdGFibGUKK30KKworcHJvYyBnZXRfd2lkdGh0YWJsZSB7bGF5ZXJfbmFtZSBkaXJlY3Rpb259IHsKKyAgdmFyaWFibGUgbGF5ZXJzCisKKyAgaWYgeyFbZGljdCBleGlzdHMgJGxheWVycyAkbGF5ZXJfbmFtZSB3aWR0aHRhYmxlXX0geworICAgICAgZGljdCBzZXQgbGF5ZXJzICRsYXllcl9uYW1lIHdpZHRodGFibGUgW3JlYWRfd2lkdGh0YWJsZSAkbGF5ZXJfbmFtZV0KKyAgfQorCisgIGlmIHshW2RpY3QgZXhpc3RzICRsYXllcnMgJGxheWVyX25hbWUgd2lkdGh0YWJsZSAkZGlyZWN0aW9uXX0geworICAgIGlmIHskZGlyZWN0aW9uID09ICJ3cm9uZ2RpcmVjdGlvbiIgJiYgW2RpY3QgZXhpc3RzICRsYXllcnMgJGxheWVyX25hbWUgd2lkdGh0YWJsZSByaWdodGRpcmVjdGlvbl19IHsKKyAgICAgIGRpY3Qgc2V0IGxheWVycyAkbGF5ZXJfbmFtZSB3aWR0aHRhYmxlICRkaXJlY3Rpb24gW2RpY3QgZ2V0ICRsYXllcnMgJGxheWVyX25hbWUgd2lkdGh0YWJsZSByaWdodGRpcmVjdGlvbl0KKyAgICB9IGVsc2UgeworICAgICAgZGljdCBzZXQgbGF5ZXJzICRsYXllcl9uYW1lIHdpZHRodGFibGUgJGRpcmVjdGlvbiB7fQorICAgIH0KKyAgfQorCisgIHJldHVybiBbZGljdCBnZXQgJGxheWVycyAkbGF5ZXJfbmFtZSB3aWR0aHRhYmxlICRkaXJlY3Rpb25dCit9CisKKyMgTGF5ZXJzIHRoYXQgaGF2ZSBhIHdpZHRodGFibGUgd2lsbCBvbmx5IHN1cHBvcnQgc29tZSB3aWR0aCB2YWx1ZXMsIHRoZSB3aWR0aHRhYmxlIGRlZmluZXMgdGhlCisjIHNldCBvZiB3aWR0aHMgdGhhdCBhcmUgYWxsb3dlZCwgb3IgYW55IHdpZHRoIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgbGFzdCB2YWx1ZSBpbiB0aGUKKyMgdGFibGUKKyMKKworcHJvYyBhZGp1c3Rfd2lkdGgge3dpZHRodGFibGUgd2lkdGh9IHsKKyAgaWYge1tsbGVuZ3RoICR3aWR0aHRhYmxlXSA9PSAwfSB7cmV0dXJuICR3aWR0aH0KKyAgaWYge1tsc2VhcmNoIC1leGFjdCAkd2lkdGh0YWJsZSAkd2lkdGhdID4gLTF9IHtyZXR1cm4gJHdpZHRofQorICBpZiB7JHdpZHRoID4gW2xpbmRleCAkd2lkdGh0YWJsZSBlbmRdfSB7cmV0dXJuICR3aWR0aH0KKworICBmb3JlYWNoIHZhbHVlICR3aWR0aHRhYmxlIHsKKyAgICBpZiB7JHZhbHVlID4gJHdpZHRofSB7CisgICAgICAjIGRlYnVnICJBZGp1c3Qgd2lkdGggZnJvbSAkd2lkdGggdG8gJHZhbHVlIgorICAgICAgcmV0dXJuICR2YWx1ZQorICAgIH0KKyAgfQorCisgIHJldHVybiAkd2lkdGgKK30KKworcHJvYyBnZXRfYWRqdXN0ZWRfZFgge2xheWVyIHdpZHRofSB7CisgIGlmIHtbZ2V0X3JvdXRpbmdfZGlyZWN0aW9uICRsYXllcl0gPT0gInZlciJ9IHsKKyAgICAjIGRlYnVnICJVc2luZyByaWdodGRpcmVjdGlvbiBhZGp1c3RtZW50IGZvciBsYXllciAkbGF5ZXIgKGRYKSIKKyAgICByZXR1cm4gW2FkanVzdF93aWR0aCBbZ2V0X3dpZHRodGFibGUgJGxheWVyIHJpZ2h0ZGlyZWN0aW9uXSAkd2lkdGhdCisgIH0gZWxzZSB7CisgICAgIyBkZWJ1ZyAiVXNpbmcgd3JvbmdkaXJlY3Rpb24gYWRqdXN0bWVudCBmb3IgbGF5ZXIgJGxheWVyIChkWCkiCisgICAgcmV0dXJuIFthZGp1c3Rfd2lkdGggW2dldF93aWR0aHRhYmxlICRsYXllciB3cm9uZ2RpcmVjdGlvbl0gJHdpZHRoXQorICB9Cit9CisKK3Byb2MgZ2V0X2FkanVzdGVkX2RZIHtsYXllciBoZWlnaHR9IHsKKyAgaWYge1tnZXRfcm91dGluZ19kaXJlY3Rpb24gJGxheWVyXSA9PSAiaG9yIn0geworICAgICMgZGVidWcgIlVzaW5nIHJpZ2h0ZGlyZWN0aW9uIGFkanVzdG1lbnQgZm9yIGxheWVyICRsYXllciAoZFkpIgorICAgIHJldHVybiBbYWRqdXN0X3dpZHRoIFtnZXRfd2lkdGh0YWJsZSAkbGF5ZXIgcmlnaHRkaXJlY3Rpb25dICRoZWlnaHRdCisgIH0gZWxzZSB7CisgICAgIyBkZWJ1ZyAiVXNpbmcgd3JvbmdkaXJlY3Rpb24gYWRqdXN0bWVudCBmb3IgbGF5ZXIgJGxheWVyIChkWSkiCisgICAgcmV0dXJuIFthZGp1c3Rfd2lkdGggW2dldF93aWR0aHRhYmxlICRsYXllciB3cm9uZ2RpcmVjdGlvbl0gJGhlaWdodF0KKyAgfQorfQorCitwcm9jIGdldF9hcnJheXNwYWNpbmdfcnVsZSB7bGF5ZXJfbmFtZX0geworICB2YXJpYWJsZSBsYXllcnMKKworICBpZiB7IVtkaWN0IGV4aXN0cyAkbGF5ZXJzICRsYXllcl9uYW1lIGFycmF5c3BhY2luZ119IHsKKyAgICByZWFkX2FycmF5c3BhY2luZyAkbGF5ZXJfbmFtZQorICB9CisKKyAgcmV0dXJuIFtkaWN0IGdldCAkbGF5ZXJzICRsYXllcl9uYW1lIGFycmF5c3BhY2luZ10KK30KKworcHJvYyB1c2VfYXJyYXlzcGFjaW5nIHtsYXllcl9uYW1lIHJvd3MgY29sdW1uc30geworICBzZXQgYXJyYXlzcGFjaW5nIFtnZXRfYXJyYXlzcGFjaW5nX3J1bGUgJGxheWVyX25hbWVdCisgICMgZGVidWcgIiRhcnJheXNwYWNpbmciCisgICMgZGVidWcgIiRyb3dzICRjb2x1bW5zIgorICBpZiB7W2xsZW5ndGggJGFycmF5c3BhY2luZ10gPT0gMH0geworICAgICMgZGVidWcgIk5vIGFycmF5IHNwYWNpbmcgcnVsZSBkZWZpbmVkIgorICAgIHJldHVybiAwCisgIH0KKyAgIyBkZWJ1ZyAiW2RpY3Qga2V5cyBbZGljdCBnZXQgJGFycmF5c3BhY2luZyBhcnJheWN1dHNdXSIKKyAgaWYge1tkaWN0IGV4aXN0cyAkYXJyYXlzcGFjaW5nIGFycmF5Y3V0cyBbZXhwciBtaW4oJHJvd3MsJGNvbHVtbnMpXV19IHsKKyAgICAjIGRlYnVnICJNYXRjaGluZyBlbnRyeSBpbiBhcnJheXNwYWNpbmciCisgICAgcmV0dXJuIDEKKyAgfQorICBpZiB7bWluKCRyb3dzLCRjb2x1bW5zKSA8IFtsaW5kZXggW2RpY3Qga2V5cyBbZGljdCBnZXQgJGFycmF5c3BhY2luZyBhcnJheWN1dHNdXSAwXX0geworICAgICMgZGVidWcgInJvdy9jb2x1bW5zIGxlc3MgdGhhbiBtaW4gYXJyYXkgc3BhY2luZyIKKyAgICByZXR1cm4gMAorICB9CisgIGlmIHttaW4oJHJvd3MsJGNvbHVtbnMpID4gW2xpbmRleCBbZGljdCBrZXlzIFtkaWN0IGdldCAkYXJyYXlzcGFjaW5nIGFycmF5Y3V0c11dIGVuZF19IHsKKyAgICAjIGRlYnVnICJyb3cvY29sdW1ucyBncmVhdGVyIHRoYW4gbWluIGFycmF5IHNwYWNpbmciCisgICAgcmV0dXJuIDEKKyAgfQorICAjIGRlYnVnICJkZWZhdWx0IDEiCisgIHJldHVybiAxCit9CisKK3Byb2MgZGV0ZXJtaW5lX251bV92aWFfY29sdW1ucyB7dmlhX2luZm8gY29uc3RyYWludHN9IHsKKyAgdmFyaWFibGUgdXBwZXJfd2lkdGgKKyAgdmFyaWFibGUgbG93ZXJfd2lkdGgKKyAgdmFyaWFibGUgdXBwZXJfaGVpZ2h0CisgIHZhcmlhYmxlIGxvd2VyX2hlaWdodAorICB2YXJpYWJsZSBsb3dlcl9kaXIKKyAgdmFyaWFibGUgdXBwZXJfZGlyCisgIHZhcmlhYmxlIG1pbl9sb3dlcl9lbmNsb3N1cmUKKyAgdmFyaWFibGUgbWF4X2xvd2VyX2VuY2xvc3VyZQorICB2YXJpYWJsZSBtaW5fdXBwZXJfZW5jbG9zdXJlCisgIHZhcmlhYmxlIG1heF91cHBlcl9lbmNsb3N1cmUKKyAgdmFyaWFibGUgY3V0X3dpZHRoCisgIHZhcmlhYmxlIHhjdXRfcGl0Y2gKKyAgdmFyaWFibGUgeGN1dF9zcGFjaW5nCisgIHZhcmlhYmxlIGRlZl91bml0cworCisgICMgV2hhdCBhcmUgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNvbHVtbnMgdGhhdCB3ZSBjYW4gZml0IGluIHRoaXMgc3BhY2U/CisgIHNldCBpIDEKKyAgaWYgeyRsb3dlcl9kaXIgPT0gImhvciJ9IHsKKyAgICBzZXQgdmlhX3dpZHRoX2xvd2VyIFtleHByICRjdXRfd2lkdGggKyAkeGN1dF9waXRjaCAqICgkaSAtIDEpICsgMiAqICRtaW5fbG93ZXJfZW5jbG9zdXJlXQorICAgIHNldCB2aWFfd2lkdGhfdXBwZXIgW2V4cHIgJGN1dF93aWR0aCArICR4Y3V0X3BpdGNoICogKCRpIC0gMSkgKyAyICogJG1heF91cHBlcl9lbmNsb3N1cmVdCisgIH0gZWxzZSB7CisgICAgc2V0IHZpYV93aWR0aF9sb3dlciBbZXhwciAkY3V0X3dpZHRoICsgJHhjdXRfcGl0Y2ggKiAoJGkgLSAxKSArIDIgKiAkbWF4X2xvd2VyX2VuY2xvc3VyZV0KKyAgICBzZXQgdmlhX3dpZHRoX3VwcGVyIFtleHByICRjdXRfd2lkdGggKyAkeGN1dF9waXRjaCAqICgkaSAtIDEpICsgMiAqICRtaW5fdXBwZXJfZW5jbG9zdXJlXQorICB9CisgIGlmIHtbZGljdCBleGlzdHMgJGNvbnN0cmFpbnRzIGN1dF9waXRjaF19IHtzZXQgeGN1dF9waXRjaCBbZXhwciByb3VuZChbZGljdCBnZXQgJGNvbnN0cmFpbnRzIGN1dF9waXRjaF0gKiAkZGVmX3VuaXRzKV19CisKKyAgd2hpbGUgeyR2aWFfd2lkdGhfbG93ZXIgPD0gJGxvd2VyX3dpZHRoICYmICR2aWFfd2lkdGhfdXBwZXIgPD0gJHVwcGVyX3dpZHRofSB7CisgICAgaW5jciBpCisgICAgaWYgeyRsb3dlcl9kaXIgPT0gImhvciJ9IHsKKyAgICAgIHNldCB2aWFfd2lkdGhfbG93ZXIgW2V4cHIgJGN1dF93aWR0aCArICR4Y3V0X3BpdGNoICogKCRpIC0gMSkgKyAyICogJG1heF9sb3dlcl9lbmNsb3N1cmVdCisgICAgICBzZXQgdmlhX3dpZHRoX3VwcGVyIFtleHByICRjdXRfd2lkdGggKyAkeGN1dF9waXRjaCAqICgkaSAtIDEpICsgMiAqICRtaW5fdXBwZXJfZW5jbG9zdXJlXQorICAgIH0gZWxzZSB7CisgICAgICBzZXQgdmlhX3dpZHRoX2xvd2VyIFtleHByICRjdXRfd2lkdGggKyAkeGN1dF9waXRjaCAqICgkaSAtIDEpICsgMiAqICRtaW5fbG93ZXJfZW5jbG9zdXJlXQorICAgICAgc2V0IHZpYV93aWR0aF91cHBlciBbZXhwciAkY3V0X3dpZHRoICsgJHhjdXRfcGl0Y2ggKiAoJGkgLSAxKSArIDIgKiAkbWF4X3VwcGVyX2VuY2xvc3VyZV0KKyAgICB9CisgIH0KKyAgc2V0IHhjdXRfc3BhY2luZyBbZXhwciAkeGN1dF9waXRjaCAtICRjdXRfd2lkdGhdCisgIHNldCBjb2x1bW5zIFtleHByIG1heCgxLCAkaSAtIDEpXQorICAjIGRlYnVnICJjb2xzICRjb2x1bW5zIFc6IHZpYV93aWR0aF9sb3dlciAkdmlhX3dpZHRoX2xvd2VyID49IGxvd2VyX3dpZHRoICRsb3dlcl93aWR0aCB8fCB2aWFfd2lkdGhfdXBwZXIgJHZpYV93aWR0aF91cHBlciA+PSB1cHBlcl93aWR0aCAkdXBwZXJfd2lkdGgiCisgIGlmIHtbZGljdCBleGlzdHMgJGNvbnN0cmFpbnRzIG1heF9jb2x1bW5zXX0geworICAgIGlmIHskY29sdW1ucyA+IFtkaWN0IGdldCAkY29uc3RyYWludHMgbWF4X2NvbHVtbnNdfSB7CisgICAgICBzZXQgY29sdW1ucyBbZGljdCBnZXQgJGNvbnN0cmFpbnRzIG1heF9jb2x1bW5zXQorCisgICAgICBzZXQgbG93ZXJfY29uY2F2ZV9lbmNsb3N1cmUgW2dldF9jb25jYXZlX3NwYWNpbmdfdmFsdWUgW2RpY3QgZ2V0ICR2aWFfaW5mbyBjdXQgbGF5ZXJdIFtkaWN0IGdldCAkdmlhX2luZm8gbG93ZXIgbGF5ZXJdXQorICAgICAgIyBkZWJ1ZyAiJGxvd2VyX2NvbmNhdmVfZW5jbG9zdXJlICRtYXhfbG93ZXJfZW5jbG9zdXJlIgorICAgICAgaWYgeyRsb3dlcl9jb25jYXZlX2VuY2xvc3VyZSA+ICRtYXhfbG93ZXJfZW5jbG9zdXJlfSB7CisgICAgICAgIHNldCBtYXhfbG93ZXJfZW5jbG9zdXJlICRsb3dlcl9jb25jYXZlX2VuY2xvc3VyZQorICAgICAgfQorICAgICAgc2V0IHVwcGVyX2NvbmNhdmVfZW5jbG9zdXJlIFtnZXRfY29uY2F2ZV9zcGFjaW5nX3ZhbHVlIFtkaWN0IGdldCAkdmlhX2luZm8gY3V0IGxheWVyXSBbZGljdCBnZXQgJHZpYV9pbmZvIHVwcGVyIGxheWVyXV0KKyAgICAgICMgZGVidWcgIiR1cHBlcl9jb25jYXZlX2VuY2xvc3VyZSAkbWF4X3VwcGVyX2VuY2xvc3VyZSIKKyAgICAgIGlmIHskdXBwZXJfY29uY2F2ZV9lbmNsb3N1cmUgPiAkbWF4X3VwcGVyX2VuY2xvc3VyZX0geworICAgICAgICBzZXQgbWF4X3VwcGVyX2VuY2xvc3VyZSAkdXBwZXJfY29uY2F2ZV9lbmNsb3N1cmUKKyAgICAgIH0KKyAgICB9CisKKyAgfQorICAjIGRlYnVnICJMb3dlcjogW2RpY3QgZ2V0ICR2aWFfaW5mbyBsb3dlciBsYXllcl0gJGxvd2VyX2RpciIKKyAgIyBkZWJ1ZyAiVXBwZXI6IFtkaWN0IGdldCAkdmlhX2luZm8gdXBwZXIgbGF5ZXJdICR1cHBlcl9kaXIiCisgIGlmIHtbZ2V0X3JvdXRpbmdfZGlyZWN0aW9uIFtkaWN0IGdldCAkdmlhX2luZm8gdXBwZXIgbGF5ZXJdXSA9PSAidmVyIn0geworICAgIGlmIHtbZGljdCBnZXQgJGNvbnN0cmFpbnRzIHN0YWNrX3RvcF0gIT0gW2RpY3QgZ2V0ICR2aWFfaW5mbyB1cHBlciBsYXllcl19IHsKKyAgICAgICMgZGVidWcgIkFkanVzdCB3aWR0aCBvZiBbZGljdCBnZXQgJHZpYV9pbmZvIHVwcGVyIGxheWVyXSIKKyAgICAgIGdldF92aWFfZW5jbG9zdXJlICR2aWFfaW5mbyBbZXhwciBtaW4oJGxvd2VyX3dpZHRoLCRsb3dlcl9oZWlnaHQpXSBbZXhwciBtaW4oW2V4cHIgJGN1dF93aWR0aCArICR4Y3V0X3BpdGNoICogKCRjb2x1bW5zIC0gMSldLCR1cHBlcl9oZWlnaHQpXQorICAgICAgc2V0IHVwcGVyX3dpZHRoIFtleHByICRjdXRfd2lkdGggKyAkeGN1dF9waXRjaCAqICgkY29sdW1ucyAtIDEpICsgMiAqICRtaW5fdXBwZXJfZW5jbG9zdXJlXQorICAgIH0KKyAgfSAKKyAgaWYge1tnZXRfcm91dGluZ19kaXJlY3Rpb24gW2RpY3QgZ2V0ICR2aWFfaW5mbyBsb3dlciBsYXllcl1dID09ICJ2ZXIifSB7CisgICAgaWYge1tkaWN0IGdldCAkY29uc3RyYWludHMgc3RhY2tfYm90dG9tXSAhPSBbZGljdCBnZXQgJHZpYV9pbmZvIGxvd2VyIGxheWVyXX0geworICAgICAgIyBkZWJ1ZyAiQWRqdXN0IHdpZHRoIG9mIFtkaWN0IGdldCAkdmlhX2luZm8gbG93ZXIgbGF5ZXJdIgorICAgICAgZ2V0X3ZpYV9lbmNsb3N1cmUgJHZpYV9pbmZvIFtleHByIG1pbihbZXhwciAkY3V0X3dpZHRoICsgJHhjdXRfcGl0Y2ggKiAoJGNvbHVtbnMgLSAxKV0sJGxvd2VyX2hlaWdodCldIFtleHByIG1pbigkdXBwZXJfd2lkdGgsJHVwcGVyX2hlaWdodCldCisgICAgICBzZXQgbG93ZXJfd2lkdGggW2V4cHIgJGN1dF93aWR0aCArICR4Y3V0X3BpdGNoICogKCRjb2x1bW5zIC0gMSkgKyAyICogJG1pbl9sb3dlcl9lbmNsb3N1cmVdCisgICAgfQorICB9CisgICMgZGVidWcgImNvbHMgJGNvbHVtbnMgVzogbG93ZXIgJGxvd2VyX3dpZHRoIHVwcGVyICR1cHBlcl93aWR0aCIKKyAgc2V0IGxvd2VyX3dpZHRoIFtnZXRfYWRqdXN0ZWRfZFggW2RpY3QgZ2V0ICR2aWFfaW5mbyBsb3dlciBsYXllcl0gJGxvd2VyX3dpZHRoXQorICBzZXQgdXBwZXJfd2lkdGggW2dldF9hZGp1c3RlZF9kWCBbZGljdCBnZXQgJHZpYV9pbmZvIHVwcGVyIGxheWVyXSAkdXBwZXJfd2lkdGhdCisgICMgZGVidWcgImNvbHMgJGNvbHVtbnMgVzogbG93ZXIgJGxvd2VyX3dpZHRoIHVwcGVyICR1cHBlcl93aWR0aCIKKworICByZXR1cm4gJGNvbHVtbnMKK30KKworcHJvYyBkZXRlcm1pbmVfbnVtX3ZpYV9yb3dzIHt2aWFfaW5mbyBjb25zdHJhaW50c30geworICB2YXJpYWJsZSBjdXRfaGVpZ2h0CisgIHZhcmlhYmxlIHljdXRfcGl0Y2gKKyAgdmFyaWFibGUgeWN1dF9zcGFjaW5nCisgIHZhcmlhYmxlIHVwcGVyX2hlaWdodAorICB2YXJpYWJsZSBsb3dlcl9oZWlnaHQKKyAgdmFyaWFibGUgbG93ZXJfd2lkdGgKKyAgdmFyaWFibGUgdXBwZXJfd2lkdGgKKyAgdmFyaWFibGUgbG93ZXJfZGlyCisgIHZhcmlhYmxlIHVwcGVyX2RpcgorICB2YXJpYWJsZSBtaW5fbG93ZXJfZW5jbG9zdXJlCisgIHZhcmlhYmxlIG1heF9sb3dlcl9lbmNsb3N1cmUKKyAgdmFyaWFibGUgbWluX3VwcGVyX2VuY2xvc3VyZQorICB2YXJpYWJsZSBtYXhfdXBwZXJfZW5jbG9zdXJlCisgIHZhcmlhYmxlIGRlZl91bml0cworCisgICMgV2hhdCBhcmUgdGhlIG1heGltdW0gbnVtYmVyIG9mIHJvd3MgdGhhdCB3ZSBjYW4gZml0IGluIHRoaXMgc3BhY2U/CisgIHNldCBpIDEKKyAgaWYgeyRsb3dlcl9kaXIgPT0gImhvciJ9IHsKKyAgICBzZXQgdmlhX2hlaWdodF9sb3dlciBbZXhwciAkY3V0X2hlaWdodCArICR5Y3V0X3BpdGNoICogKCRpIC0gMSkgKyAyICogJG1pbl9sb3dlcl9lbmNsb3N1cmVdCisgICAgc2V0IHZpYV9oZWlnaHRfdXBwZXIgW2V4cHIgJGN1dF9oZWlnaHQgKyAkeWN1dF9waXRjaCAqICgkaSAtIDEpICsgMiAqICRtYXhfdXBwZXJfZW5jbG9zdXJlXQorICB9IGVsc2UgeworICAgIHNldCB2aWFfaGVpZ2h0X2xvd2VyIFtleHByICRjdXRfaGVpZ2h0ICsgJHljdXRfcGl0Y2ggKiAoJGkgLSAxKSArIDIgKiAkbWF4X2xvd2VyX2VuY2xvc3VyZV0KKyAgICBzZXQgdmlhX2hlaWdodF91cHBlciBbZXhwciAkY3V0X2hlaWdodCArICR5Y3V0X3BpdGNoICogKCRpIC0gMSkgKyAyICogJG1pbl91cHBlcl9lbmNsb3N1cmVdCisgIH0KKyAgaWYge1tkaWN0IGV4aXN0cyAkY29uc3RyYWludHMgY3V0X3BpdGNoXX0ge3NldCB5Y3V0X3BpdGNoIFtleHByIHJvdW5kKFtkaWN0IGdldCAkY29uc3RyYWludHMgY3V0X3BpdGNoXSAqICRkZWZfdW5pdHMpXX0KKyAgd2hpbGUgeyR2aWFfaGVpZ2h0X2xvd2VyIDwgJGxvd2VyX2hlaWdodCAmJiAkdmlhX2hlaWdodF91cHBlciA8ICR1cHBlcl9oZWlnaHR9IHsKKyAgICBpbmNyIGkKKyAgICBpZiB7JGxvd2VyX2RpciA9PSAiaG9yIn0geworICAgICAgc2V0IHZpYV9oZWlnaHRfbG93ZXIgW2V4cHIgJGN1dF9oZWlnaHQgKyAkeWN1dF9waXRjaCAqICgkaSAtIDEpICsgMiAqICRtaW5fbG93ZXJfZW5jbG9zdXJlXQorICAgICAgc2V0IHZpYV9oZWlnaHRfdXBwZXIgW2V4cHIgJGN1dF9oZWlnaHQgKyAkeWN1dF9waXRjaCAqICgkaSAtIDEpICsgMiAqICRtYXhfdXBwZXJfZW5jbG9zdXJlXQorICAgIH0gZWxzZSB7CisgICAgICBzZXQgdmlhX2hlaWdodF9sb3dlciBbZXhwciAkY3V0X2hlaWdodCArICR5Y3V0X3BpdGNoICogKCRpIC0gMSkgKyAyICogJG1heF9sb3dlcl9lbmNsb3N1cmVdCisgICAgICBzZXQgdmlhX2hlaWdodF91cHBlciBbZXhwciAkY3V0X2hlaWdodCArICR5Y3V0X3BpdGNoICogKCRpIC0gMSkgKyAyICogJG1pbl91cHBlcl9lbmNsb3N1cmVdCisgICAgfQorICB9CisgIHNldCB5Y3V0X3NwYWNpbmcgW2V4cHIgJHljdXRfcGl0Y2ggLSAkY3V0X2hlaWdodF0KKyAgc2V0IHJvd3MgW2V4cHIgbWF4KDEsJGkgLSAxKV0KKyAgIyBkZWJ1ZyAiJHJvd3MgSDogJHZpYV9oZWlnaHRfbG93ZXIgPj0gJGxvd2VyX2hlaWdodCAmJiAkdmlhX2hlaWdodF91cHBlciA+PSAkdXBwZXJfaGVpZ2h0IgorICBpZiB7W2RpY3QgZXhpc3RzICRjb25zdHJhaW50cyBtYXhfcm93c119IHsKKyAgICBpZiB7JHJvd3MgPiBbZGljdCBnZXQgJGNvbnN0cmFpbnRzIG1heF9yb3dzXX0geworICAgICAgc2V0IHJvd3MgW2RpY3QgZ2V0ICRjb25zdHJhaW50cyBtYXhfcm93c10KKworICAgICAgc2V0IGxvd2VyX2NvbmNhdmVfZW5jbG9zdXJlIFtnZXRfY29uY2F2ZV9zcGFjaW5nX3ZhbHVlIFtkaWN0IGdldCAkdmlhX2luZm8gY3V0IGxheWVyXSBbZGljdCBnZXQgJHZpYV9pbmZvIGxvd2VyIGxheWVyXV0KKyAgICAgICMgZGVidWcgIiRsb3dlcl9jb25jYXZlX2VuY2xvc3VyZSAkbWF4X2xvd2VyX2VuY2xvc3VyZSIKKyAgICAgIGlmIHskbG93ZXJfY29uY2F2ZV9lbmNsb3N1cmUgPiAkbWF4X2xvd2VyX2VuY2xvc3VyZX0geworICAgICAgICBzZXQgbWF4X2xvd2VyX2VuY2xvc3VyZSAkbG93ZXJfY29uY2F2ZV9lbmNsb3N1cmUKKyAgICAgIH0KKyAgICAgIHNldCB1cHBlcl9jb25jYXZlX2VuY2xvc3VyZSBbZ2V0X2NvbmNhdmVfc3BhY2luZ192YWx1ZSBbZGljdCBnZXQgJHZpYV9pbmZvIGN1dCBsYXllcl0gW2RpY3QgZ2V0ICR2aWFfaW5mbyB1cHBlciBsYXllcl1dCisgICAgICAjIGRlYnVnICIkdXBwZXJfY29uY2F2ZV9lbmNsb3N1cmUgJG1heF91cHBlcl9lbmNsb3N1cmUiCisgICAgICBpZiB7JHVwcGVyX2NvbmNhdmVfZW5jbG9zdXJlID4gJG1heF91cHBlcl9lbmNsb3N1cmV9IHsKKyAgICAgICAgc2V0IG1heF91cHBlcl9lbmNsb3N1cmUgJHVwcGVyX2NvbmNhdmVfZW5jbG9zdXJlCisgICAgICB9CisKKyAgICB9CisgIH0KKyAgaWYge1tnZXRfcm91dGluZ19kaXJlY3Rpb24gW2RpY3QgZ2V0ICR2aWFfaW5mbyBsb3dlciBsYXllcl1dID09ICJob3IifSB7CisgICAgIyBkZWJ1ZyAiW2RpY3QgZ2V0ICRjb25zdHJhaW50cyBzdGFja19ib3R0b21dICE9IFtkaWN0IGdldCAkdmlhX2luZm8gbG93ZXIgbGF5ZXJdIgorICAgIGlmIHtbZGljdCBnZXQgJGNvbnN0cmFpbnRzIHN0YWNrX2JvdHRvbV0gIT0gW2RpY3QgZ2V0ICR2aWFfaW5mbyBsb3dlciBsYXllcl19IHsKKyAgICAgICMgZGVidWcgIkFkanVzdCBoZWlnaHQgb2YgW2RpY3QgZ2V0ICR2aWFfaW5mbyBsb3dlciBsYXllcl0iCisgICAgICBnZXRfdmlhX2VuY2xvc3VyZSAkdmlhX2luZm8gW2V4cHIgbWluKCRsb3dlcl93aWR0aCxbZXhwciAkY3V0X2hlaWdodCArICR5Y3V0X3BpdGNoICogKCRyb3dzIC0gMSldKV0gW2V4cHIgbWluKCR1cHBlcl93aWR0aCwkdXBwZXJfaGVpZ2h0KV0KKyAgICAgIHNldCBsb3dlcl9oZWlnaHQgW2V4cHIgJGN1dF9oZWlnaHQgKyAkeWN1dF9waXRjaCAqICgkcm93cyAtIDEpICsgMiAqICRtaW5fbG93ZXJfZW5jbG9zdXJlXQorICAgICAgIyBkZWJ1ZyAibW9kaWZ5IGxvd2VyX2hlaWdodCB0byAkbG93ZXJfaGVpZ2h0ICgkY3V0X2hlaWdodCArICR5Y3V0X3BpdGNoICogKCRyb3dzIC0gMSkgKyAyICogJG1pbl9sb3dlcl9lbmNsb3N1cmUiCisgICAgfQorICB9IAorICBpZiB7W2dldF9yb3V0aW5nX2RpcmVjdGlvbiBbZGljdCBnZXQgJHZpYV9pbmZvIHVwcGVyIGxheWVyXV0gPT0gImhvciJ9IHsKKyAgICAjIGRlYnVnICJbZGljdCBnZXQgJGNvbnN0cmFpbnRzIHN0YWNrX3RvcF0gIT0gW2RpY3QgZ2V0ICR2aWFfaW5mbyB1cHBlciBsYXllcl0iCisgICAgaWYge1tkaWN0IGdldCAkY29uc3RyYWludHMgc3RhY2tfdG9wXSAhPSBbZGljdCBnZXQgJHZpYV9pbmZvIHVwcGVyIGxheWVyXX0geworICAgICAgIyBkZWJ1ZyAiQWRqdXN0IGhlaWdodCBvZiBbZGljdCBnZXQgJHZpYV9pbmZvIHVwcGVyIGxheWVyXSIKKyAgICAgIGdldF92aWFfZW5jbG9zdXJlICR2aWFfaW5mbyBbZXhwciBtaW4oJGxvd2VyX3dpZHRoLCRsb3dlcl9oZWlnaHQpXSBbZXhwciBtaW4oJHVwcGVyX3dpZHRoLFtleHByICRjdXRfaGVpZ2h0ICsgJHljdXRfcGl0Y2ggKiAoJHJvd3MgLSAxKV0pXQorICAgICAgc2V0IHVwcGVyX2hlaWdodCBbZXhwciAkY3V0X2hlaWdodCArICR5Y3V0X3BpdGNoICogKCRyb3dzIC0gMSkgKyAyICogJG1pbl91cHBlcl9lbmNsb3N1cmVdCisgICAgICAjIGRlYnVnICJtb2RpZnkgdXBwZXJfaGVpZ2h0IHRvICR1cHBlcl9oZWlnaHQgKCRjdXRfaGVpZ2h0ICsgJHljdXRfcGl0Y2ggKiAoJHJvd3MgLSAxKSArIDIgKiAkbWluX3VwcGVyX2VuY2xvc3VyZSIKKyAgICB9CisgIH0KKyAgIyBkZWJ1ZyAiJHJvd3MgSDogbG93ZXIgJGxvd2VyX2hlaWdodCB1cHBlciAkdXBwZXJfaGVpZ2h0IgorICBzZXQgbG93ZXJfaGVpZ2h0IFtnZXRfYWRqdXN0ZWRfZFkgW2RpY3QgZ2V0ICR2aWFfaW5mbyBsb3dlciBsYXllcl0gJGxvd2VyX2hlaWdodF0KKyAgc2V0IHVwcGVyX2hlaWdodCBbZ2V0X2FkanVzdGVkX2RZIFtkaWN0IGdldCAkdmlhX2luZm8gdXBwZXIgbGF5ZXJdICR1cHBlcl9oZWlnaHRdCisgICMgZGVidWcgIiRyb3dzIEg6IGxvd2VyICRsb3dlcl9oZWlnaHQgdXBwZXIgJHVwcGVyX2hlaWdodCIKKworICByZXR1cm4gJHJvd3MKK30KKworcHJvYyBpbml0X3ZpYV93aWR0aF9oZWlnaHQge3ZpYV9pbmZvIGxvd2VyX2xheWVyIHdpZHRoIGhlaWdodCBjb25zdHJhaW50c30geworICB2YXJpYWJsZSBkZWZfdW5pdHMKKyAgdmFyaWFibGUgdXBwZXJfd2lkdGgKKyAgdmFyaWFibGUgbG93ZXJfd2lkdGgKKyAgdmFyaWFibGUgdXBwZXJfaGVpZ2h0CisgIHZhcmlhYmxlIGxvd2VyX2hlaWdodAorICB2YXJpYWJsZSBsb3dlcl9kaXIKKyAgdmFyaWFibGUgdXBwZXJfZGlyCisgIHZhcmlhYmxlIG1pbl9sb3dlcl9lbmNsb3N1cmUKKyAgdmFyaWFibGUgbWF4X2xvd2VyX2VuY2xvc3VyZQorICB2YXJpYWJsZSBtaW5fdXBwZXJfZW5jbG9zdXJlCisgIHZhcmlhYmxlIG1heF91cHBlcl9lbmNsb3N1cmUKKyAgdmFyaWFibGUgY3V0X3dpZHRoCisgIHZhcmlhYmxlIGN1dF9oZWlnaHQKKyAgdmFyaWFibGUgeGN1dF9waXRjaAorICB2YXJpYWJsZSB5Y3V0X3BpdGNoCisgIHZhcmlhYmxlIHhjdXRfc3BhY2luZworICB2YXJpYWJsZSB5Y3V0X3NwYWNpbmcKKworICBzZXQgdXBwZXJfbGF5ZXIgW2RpY3QgZ2V0ICR2aWFfaW5mbyB1cHBlciBsYXllcl0KKworICBzZXQgeGN1dF9waXRjaCBbbGluZGV4IFtkaWN0IGdldCAkdmlhX2luZm8gY3V0IHNwYWNpbmddIDBdCisgIHNldCB5Y3V0X3BpdGNoIFtsaW5kZXggW2RpY3QgZ2V0ICR2aWFfaW5mbyBjdXQgc3BhY2luZ10gMF0KKworICBzZXQgY3V0X3dpZHRoICAgW2xpbmRleCBbZGljdCBnZXQgJHZpYV9pbmZvIGN1dCBzaXplXSAwXQorICBzZXQgY3V0X2hlaWdodCAgW2xpbmRleCBbZGljdCBnZXQgJHZpYV9pbmZvIGN1dCBzaXplXSAxXQorCisgIGlmIHtbZGljdCBleGlzdHMgJGNvbnN0cmFpbnRzIHNwbGl0X2N1dHMgJGxvd2VyX2xheWVyXX0geworICAgIGlmIHtbZ2V0X2RpciAkbG93ZXJfbGF5ZXJdID09ICJob3IifSB7CisgICAgICBzZXQgeWN1dF9waXRjaCBbZXhwciByb3VuZChbZGljdCBnZXQgJGNvbnN0cmFpbnRzIHNwbGl0X2N1dHMgJGxvd2VyX2xheWVyXSAqICRkZWZfdW5pdHMpXQorICAgIH0gZWxzZSB7CisgICAgICBzZXQgeGN1dF9waXRjaCBbZXhwciByb3VuZChbZGljdCBnZXQgJGNvbnN0cmFpbnRzIHNwbGl0X2N1dHMgJGxvd2VyX2xheWVyXSAqICRkZWZfdW5pdHMpXQorICAgIH0KKyAgfQorCisgIGlmIHtbZGljdCBleGlzdHMgJGNvbnN0cmFpbnRzIHNwbGl0X2N1dHMgJHVwcGVyX2xheWVyXX0geworICAgIGlmIHtbZ2V0X2RpciAkdXBwZXJfbGF5ZXJdID09ICJob3IifSB7CisgICAgICBzZXQgeWN1dF9waXRjaCBbZXhwciByb3VuZChbZGljdCBnZXQgJGNvbnN0cmFpbnRzIHNwbGl0X2N1dHMgJHVwcGVyX2xheWVyXSAqICRkZWZfdW5pdHMpXQorICAgIH0gZWxzZSB7CisgICAgICBzZXQgeGN1dF9waXRjaCBbZXhwciByb3VuZChbZGljdCBnZXQgJGNvbnN0cmFpbnRzIHNwbGl0X2N1dHMgJHVwcGVyX2xheWVyXSAqICRkZWZfdW5pdHMpXQorICAgIH0KKyAgfQorCisgIGlmIHtbZGljdCBleGlzdHMgJGNvbnN0cmFpbnRzIHdpZHRoICRsb3dlcl9sYXllcl19IHsKKyAgICBpZiB7W2dldF9kaXIgJGxvd2VyX2xheWVyXSA9PSAiaG9yIn0geworICAgICAgc2V0IGxvd2VyX2hlaWdodCBbZXhwciByb3VuZChbZGljdCBnZXQgJGNvbnN0cmFpbnRzIHdpZHRoICRsb3dlcl9sYXllcl0gKiAkZGVmX3VuaXRzKV0KKyAgICAgIHNldCBsb3dlcl93aWR0aCAgW2dldF9hZGp1c3RlZF9kWCAkbG93ZXJfbGF5ZXIgJHdpZHRoXQorICAgIH0gZWxzZSB7CisgICAgICBzZXQgbG93ZXJfd2lkdGggW2V4cHIgcm91bmQoW2RpY3QgZ2V0ICRjb25zdHJhaW50cyB3aWR0aCAkbG93ZXJfbGF5ZXJdICogJGRlZl91bml0cyldCisgICAgICBzZXQgbG93ZXJfaGVpZ2h0IFtnZXRfYWRqdXN0ZWRfZFkgJGxvd2VyX2xheWVyICRoZWlnaHRdCisgICAgfQorICB9IGVsc2UgeworICAgICMgQWRqdXN0IHRoZSB3aWR0aCBhbmQgaGVpZ2h0IHZhbHVlcyB0byB0aGUgbmV4dCBsYXJnZXN0IGFsbG93ZWQgdmFsdWUgaWYgbmVjZXNzYXJ5CisgICAgc2V0IGxvd2VyX3dpZHRoICBbZ2V0X2FkanVzdGVkX2RYICRsb3dlcl9sYXllciAkd2lkdGhdCisgICAgc2V0IGxvd2VyX2hlaWdodCBbZ2V0X2FkanVzdGVkX2RZICRsb3dlcl9sYXllciAkaGVpZ2h0XQorICB9CisgIGlmIHtbZGljdCBleGlzdHMgJGNvbnN0cmFpbnRzIHdpZHRoICR1cHBlcl9sYXllcl19IHsKKyAgICBpZiB7W2dldF9kaXIgJHVwcGVyX2xheWVyXSA9PSAiaG9yIn0geworICAgICAgc2V0IHVwcGVyX2hlaWdodCBbZXhwciByb3VuZChbZGljdCBnZXQgJGNvbnN0cmFpbnRzIHdpZHRoICR1cHBlcl9sYXllcl0gKiAkZGVmX3VuaXRzKV0KKyAgICAgIHNldCB1cHBlcl93aWR0aCAgW2dldF9hZGp1c3RlZF9kWCAkdXBwZXJfbGF5ZXIgJHdpZHRoXQorICAgIH0gZWxzZSB7CisgICAgICBzZXQgdXBwZXJfd2lkdGggW2V4cHIgcm91bmQoW2RpY3QgZ2V0ICRjb25zdHJhaW50cyB3aWR0aCAkdXBwZXJfbGF5ZXJdICogJGRlZl91bml0cyldCisgICAgICBzZXQgdXBwZXJfaGVpZ2h0IFtnZXRfYWRqdXN0ZWRfZFkgJHVwcGVyX2xheWVyICRoZWlnaHRdCisgICAgfQorICB9IGVsc2UgeworICAgIHNldCB1cHBlcl93aWR0aCAgW2dldF9hZGp1c3RlZF9kWCAkdXBwZXJfbGF5ZXIgJHdpZHRoXQorICAgIHNldCB1cHBlcl9oZWlnaHQgW2dldF9hZGp1c3RlZF9kWSAkdXBwZXJfbGF5ZXIgJGhlaWdodF0KKyAgfQorICAjIGRlYnVnICJsb3dlciAod2lkdGggJGxvd2VyX3dpZHRoIGhlaWdodCAkbG93ZXJfaGVpZ2h0KSB1cHBlciAod2lkdGggJHVwcGVyX3dpZHRoIGhlaWdodCAkdXBwZXJfaGVpZ2h0KSIKKyAgIyBkZWJ1ZyAibWluIC0gXFtleHByIG1pbigkbG93ZXJfd2lkdGgsJGxvd2VyX2hlaWdodCwkdXBwZXJfd2lkdGgsJHVwcGVyX2hlaWdodClcXSIKK30KKworcHJvYyBnZXRfZW5jbG9zdXJlX2J5X2RpcmVjdGlvbiB7bGF5ZXIgeGVuYyB5ZW5jIG1heF9lbmNsb3N1cmUgbWluX2VuY2xvc3VyZX0geworICBzZXQgaW5mbyB7fQorICBpZiB7JHhlbmMgPiAkbWF4X2VuY2xvc3VyZSAmJiAkeWVuYyA+ICRtaW5fZW5jbG9zdXJlIHx8ICR4ZW5jID4gJG1pbl9lbmNsb3N1cmUgJiYgJHllbmMgPiAkbWF4X2VuY2xvc3VyZX0geworICAgICMgSWYgdGhlIGN1cnJlbnQgZW5jbG9zdXJlIHZhbHVlcyBtZWV0IHRoZSBtaW4vbWF4IGVuY2xvc3VyZSByZXF1aXJlbWVudHMgZWl0aGVyIHdheSByb3VuZCwgdGhlbiBrZWVwCisgICAgIyB0aGUgY3VycmVudCBlbmNsc291cmUgc2V0dGluZ3MKKyAgICBkaWN0IHNldCBpbmZvIHhFbmNsb3N1cmUgJHhlbmMKKyAgICBkaWN0IHNldCBpbmZvIHlFbmNsb3N1cmUgJHllbmMKKyAgfSBlbHNlIHsKKyAgICAjIEVuZm9yY2UgbWluL21heCBlbmNsb3N1cmUgcnVsZSwgd2l0aCBtYXhfZW5jbG9zdXJlIGFsb25nIHRoZSBwcmVmZXJyZWQgZGlyZWN0aW9uIG9mIHRoZSBsYXllci4KKyAgICBpZiB7W2dldF9kaXIgJGxheWVyXSA9PSAiaG9yIn0geworICAgICAgZGljdCBzZXQgaW5mbyB4RW5jbG9zdXJlIFtleHByIG1heCgkeGVuYywkbWF4X2VuY2xvc3VyZSldCisgICAgICBkaWN0IHNldCBpbmZvIHlFbmNsb3N1cmUgW2V4cHIgbWF4KCR5ZW5jLCRtaW5fZW5jbG9zdXJlKV0KKyAgICB9IGVsc2UgeworICAgICAgZGljdCBzZXQgaW5mbyB4RW5jbG9zdXJlIFtleHByIG1heCgkeGVuYywkbWluX2VuY2xvc3VyZSldCisgICAgICBkaWN0IHNldCBpbmZvIHlFbmNsb3N1cmUgW2V4cHIgbWF4KCR5ZW5jLCRtYXhfZW5jbG9zdXJlKV0KKyAgICB9CisgIH0KKworICByZXR1cm4gJGluZm8KK30KKworcHJvYyB2aWFfZ2VuZXJhdGVfcnVsZSB7dmlhcnVsZV9uYW1lIHZpYV9pbmZvIHJ1bGVfbmFtZSByb3dzIGNvbHVtbnMgY29uc3RyYWludHN9IHsKKyAgdmFyaWFibGUgeGN1dF9waXRjaAorICB2YXJpYWJsZSB5Y3V0X3BpdGNoCisgIHZhcmlhYmxlIHhjdXRfc3BhY2luZworICB2YXJpYWJsZSB5Y3V0X3NwYWNpbmcKKyAgdmFyaWFibGUgY3V0X2hlaWdodAorICB2YXJpYWJsZSBjdXRfd2lkdGgKKyAgdmFyaWFibGUgdXBwZXJfd2lkdGgKKyAgdmFyaWFibGUgbG93ZXJfd2lkdGgKKyAgdmFyaWFibGUgdXBwZXJfaGVpZ2h0CisgIHZhcmlhYmxlIGxvd2VyX2hlaWdodAorICB2YXJpYWJsZSBsb3dlcl9kaXIKKyAgdmFyaWFibGUgbWluX2xvd2VyX2VuY2xvc3VyZQorICB2YXJpYWJsZSBtYXhfbG93ZXJfZW5jbG9zdXJlCisgIHZhcmlhYmxlIG1pbl91cHBlcl9lbmNsb3N1cmUKKyAgdmFyaWFibGUgbWF4X3VwcGVyX2VuY2xvc3VyZQorCisgIHNldCBsb3dlcl9lbmNfd2lkdGggIFtleHByIHJvdW5kKCgkbG93ZXJfd2lkdGggIC0gKCRjdXRfd2lkdGggICArICR4Y3V0X3BpdGNoICogKCRjb2x1bW5zIC0gMSkpKSAvIDIpXQorICBzZXQgbG93ZXJfZW5jX2hlaWdodCBbZXhwciByb3VuZCgoJGxvd2VyX2hlaWdodCAtICgkY3V0X2hlaWdodCAgKyAkeWN1dF9waXRjaCAqICgkcm93cyAgICAtIDEpKSkgLyAyKV0KKyAgc2V0IHVwcGVyX2VuY193aWR0aCAgW2V4cHIgcm91bmQoKCR1cHBlcl93aWR0aCAgLSAoJGN1dF93aWR0aCAgICsgJHhjdXRfcGl0Y2ggKiAoJGNvbHVtbnMgLSAxKSkpIC8gMildCisgIHNldCB1cHBlcl9lbmNfaGVpZ2h0IFtleHByIHJvdW5kKCgkdXBwZXJfaGVpZ2h0IC0gKCRjdXRfaGVpZ2h0ICArICR5Y3V0X3BpdGNoICogKCRyb3dzICAgIC0gMSkpKSAvIDIpXQorCisgIHNldCBsb3dlciBbZ2V0X2VuY2xvc3VyZV9ieV9kaXJlY3Rpb24gW2RpY3QgZ2V0ICR2aWFfaW5mbyBsb3dlciBsYXllcl0gJGxvd2VyX2VuY193aWR0aCAkbG93ZXJfZW5jX2hlaWdodCAkbWF4X2xvd2VyX2VuY2xvc3VyZSAkbWluX2xvd2VyX2VuY2xvc3VyZV0KKyAgc2V0IHVwcGVyIFtnZXRfZW5jbG9zdXJlX2J5X2RpcmVjdGlvbiBbZGljdCBnZXQgJHZpYV9pbmZvIHVwcGVyIGxheWVyXSAkdXBwZXJfZW5jX3dpZHRoICR1cHBlcl9lbmNfaGVpZ2h0ICRtYXhfdXBwZXJfZW5jbG9zdXJlICRtaW5fdXBwZXJfZW5jbG9zdXJlXQorICAjIGRlYnVnICJydWxlICRydWxlX25hbWUiCisgICMgZGVidWcgImxvd2VyOiB3aWR0aCAkbG93ZXJfd2lkdGggaGVpZ2h0ICRsb3dlcl9oZWlnaHQiCisgICMgZGVidWcgImxvd2VyOiBlbmNfd2lkdGggJGxvd2VyX2VuY193aWR0aCBlbmNfaGVpZ2h0ICRsb3dlcl9lbmNfaGVpZ2h0IGVuY2xvc3VyZV9ydWxlICRtYXhfbG93ZXJfZW5jbG9zdXJlICRtaW5fbG93ZXJfZW5jbG9zdXJlIgorICAjIGRlYnVnICJsb3dlcjogZW5jbG9zdXJlIFtkaWN0IGdldCAkbG93ZXIgeEVuY2xvc3VyZV0gW2RpY3QgZ2V0ICRsb3dlciB5RW5jbG9zdXJlXSIKKyAgIyBkZWJ1ZyAidXBwZXI6IGVuY193aWR0aCAkdXBwZXJfZW5jX3dpZHRoIGVuY19oZWlnaHQgJHVwcGVyX2VuY19oZWlnaHQgZW5jbG9zdXJlX3J1bGUgJG1heF91cHBlcl9lbmNsb3N1cmUgJG1pbl91cHBlcl9lbmNsb3N1cmUiCisgICMgZGVidWcgInVwcGVyOiBlbmNsb3N1cmUgW2RpY3QgZ2V0ICR1cHBlciB4RW5jbG9zdXJlXSBbZGljdCBnZXQgJHVwcGVyIHlFbmNsb3N1cmVdIgorCisgIHJldHVybiBbbGlzdCBbbGlzdCBcCisgICAgbmFtZSAkcnVsZV9uYW1lIFwKKyAgICBydWxlICR2aWFydWxlX25hbWUgXAorICAgIGN1dHNpemUgW2RpY3QgZ2V0ICR2aWFfaW5mbyBjdXQgc2l6ZV0gXAorICAgIGxheWVycyBbbGlzdCBbZGljdCBnZXQgJHZpYV9pbmZvIGxvd2VyIGxheWVyXSBbZGljdCBnZXQgJHZpYV9pbmZvIGN1dCBsYXllcl0gW2RpY3QgZ2V0ICR2aWFfaW5mbyB1cHBlciBsYXllcl1dIFwKKyAgICBjdXRzcGFjaW5nIFtsaXN0ICR4Y3V0X3NwYWNpbmcgJHljdXRfc3BhY2luZ10gXAorICAgIHJvd2NvbCBbbGlzdCAkcm93cyAkY29sdW1uc10gXAorICAgIGxvd2VyX3JlY3QgW2xpc3QgW2V4cHIgLTEgKiAkbG93ZXJfd2lkdGggLyAyXSBbZXhwciAtMSAqICRsb3dlcl9oZWlnaHQgLyAyXSBbZXhwciAkbG93ZXJfd2lkdGggLyAyXSBbZXhwciAkbG93ZXJfaGVpZ2h0IC8gMl1dIFwKKyAgICB1cHBlcl9yZWN0IFtsaXN0IFtleHByIC0xICogJHVwcGVyX3dpZHRoIC8gMl0gW2V4cHIgLTEgKiAkdXBwZXJfaGVpZ2h0IC8gMl0gW2V4cHIgJHVwcGVyX3dpZHRoIC8gMl0gW2V4cHIgJHVwcGVyX2hlaWdodCAvIDJdXSBcCisgICAgZW5jbG9zdXJlIFtsaXN0IFwKKyAgICAgIFtkaWN0IGdldCAkbG93ZXIgeEVuY2xvc3VyZV0gXAorICAgICAgW2RpY3QgZ2V0ICRsb3dlciB5RW5jbG9zdXJlXSBcCisgICAgICBbZGljdCBnZXQgJHVwcGVyIHhFbmNsb3N1cmVdIFwKKyAgICAgIFtkaWN0IGdldCAkdXBwZXIgeUVuY2xvc3VyZV0gXAorICAgIF0gXAorICAgIG9yaWdpbl94IDAgb3JpZ2luX3kgMAorICBdXQorfQorCitwcm9jIHZpYV9nZW5lcmF0ZV9hcnJheV9ydWxlIHt2aWFydWxlX25hbWUgdmlhX2luZm8gcnVsZV9uYW1lIHJvd3MgY29sdW1uc30geworICB2YXJpYWJsZSB4Y3V0X3BpdGNoCisgIHZhcmlhYmxlIHljdXRfcGl0Y2gKKyAgdmFyaWFibGUgeGN1dF9zcGFjaW5nCisgIHZhcmlhYmxlIHljdXRfc3BhY2luZworICB2YXJpYWJsZSBjdXRfaGVpZ2h0CisgIHZhcmlhYmxlIGN1dF93aWR0aAorICB2YXJpYWJsZSB1cHBlcl93aWR0aAorICB2YXJpYWJsZSBsb3dlcl93aWR0aAorICB2YXJpYWJsZSB1cHBlcl9oZWlnaHQKKyAgdmFyaWFibGUgbG93ZXJfaGVpZ2h0CisgIHZhcmlhYmxlIG1pbl9sb3dlcl9lbmNsb3N1cmUKKyAgdmFyaWFibGUgbWF4X2xvd2VyX2VuY2xvc3VyZQorICB2YXJpYWJsZSBtaW5fdXBwZXJfZW5jbG9zdXJlCisgIHZhcmlhYmxlIG1heF91cHBlcl9lbmNsb3N1cmUKKworICAjIFdlIG5lZWQgYXJyYXkgdmlhcyAtCisgICMgaWYgdGhlIG1pbihyb3dzLGNvbHVtbnMpID4gQVJSQVlDVVRTCisgICMgICBkZXRlcm1pbmUgd2hpY2ggZGlyZWN0aW9uIGdpdmVzIGJlc3QgbnVtYmVyIG9mIENVVHMgd2lkZSB1c2luZyBtaW4oQVJSQVlDVVRTKQorICAjICAgQWZ0ZXIgYWRkaW5nIEFSUkFZcywgaXMgdGhlcmUgc3BhY2UgZm9yIG1vcmUgdmlhcworICAjICAgQWRkIHZpYXMgdG8gdGhlIHJ1bGUgd2l0aCBhcHByb3ByaWF0ZSBvcmlnaW4gc2V0dGluZworICAjIGVsc2UKKyAgIyAgIGFkZCBhIHNpbmdsZSB2aWEgd2l0aCBtaW4ocm93cyxjb2x1bW5zKSBjdXRzIC0gaG9yL3ZlciBhcyByZXF1aXJlZAorCisKKyAgc2V0IHNwYWNpbmdfcnVsZSBbZ2V0X2FycmF5c3BhY2luZ19ydWxlIFtkaWN0IGdldCAkdmlhX2luZm8gY3V0IGxheWVyXV0KKyAgc2V0IGFycmF5X3NpemUgW2V4cHIgbWluKCRyb3dzLCAkY29sdW1ucyldCisKKyAgc2V0IGxvd2VyX2VuY193aWR0aCAgW2V4cHIgcm91bmQoKCRsb3dlcl93aWR0aCAgLSAoJGN1dF93aWR0aCAgICsgJHhjdXRfcGl0Y2ggKiAoJGNvbHVtbnMgLSAxKSkpIC8gMildCisgIHNldCBsb3dlcl9lbmNfaGVpZ2h0IFtleHByIHJvdW5kKCgkbG93ZXJfaGVpZ2h0IC0gKCRjdXRfaGVpZ2h0ICArICR5Y3V0X3BpdGNoICogKCRyb3dzICAgIC0gMSkpKSAvIDIpXQorICBzZXQgdXBwZXJfZW5jX3dpZHRoICBbZXhwciByb3VuZCgoJHVwcGVyX3dpZHRoICAtICgkY3V0X3dpZHRoICAgKyAkeGN1dF9waXRjaCAqICgkY29sdW1ucyAtIDEpKSkgLyAyKV0KKyAgc2V0IHVwcGVyX2VuY19oZWlnaHQgW2V4cHIgcm91bmQoKCR1cHBlcl9oZWlnaHQgLSAoJGN1dF9oZWlnaHQgICsgJHljdXRfcGl0Y2ggKiAoJHJvd3MgICAgLSAxKSkpIC8gMildCisKKyAgaWYgeyRhcnJheV9zaXplID4gW2xpbmRleCBbZGljdCBrZXlzIFtkaWN0IGdldCAkc3BhY2luZ19ydWxlIGFycmF5Y3V0c11dIGVuZF19IHsKKyAgICAjIGRlYnVnICJNdWx0aS12aWFBcnJheXNwYWNpbmcgcnVsZSIKKyAgICBzZXQgdXNlX2FycmF5X3NpemUgW2xpbmRleCBbZGljdCBrZXlzIFtkaWN0IGdldCAkc3BhY2luZ19ydWxlIGFycmF5Y3V0c11dIDBdCisgICAgZm9yZWFjaCBvdGhlcl9hcnJheV9zaXplIFtscmFuZ2UgW2RpY3Qga2V5cyBbZGljdCBnZXQgJHNwYWNpbmdfcnVsZSBhcnJheWN1dHNdXSAxIGVuZF0geworICAgICAgaWYgeyRhcnJheV9zaXplICUgJHVzZV9hcnJheV9zaXplID4gJGFycmF5X3NpemUgJSAkb3RoZXJfYXJyYXlfc2l6ZX0geworICAgICAgICBzZXQgdXNlX2FycmF5X3NpemUgJG90aGVyX2FycmF5X3NpemUKKyAgICAgIH0KKyAgICB9CisgICAgc2V0IG51bV9hcnJheXMgW2V4cHIgJGFycmF5X3NpemUgLyAkdXNlX2FycmF5X3NpemVdCisgICAgc2V0IGFycmF5X3NwYWNpbmcgW2V4cHIgbWF4KCR4Y3V0X3NwYWNpbmcsJHljdXRfc3BhY2luZyxbZGljdCBnZXQgJHNwYWNpbmdfcnVsZSBhcnJheWN1dHMgJHVzZV9hcnJheV9zaXplIHNwYWNpbmddKV0KKworICAgIHNldCBydWxlIFtsaXN0IFwKKyAgICAgIHJ1bGUgJHZpYXJ1bGVfbmFtZSBcCisgICAgICBjdXRzaXplIFtkaWN0IGdldCAkdmlhX2luZm8gY3V0IHNpemVdIFwKKyAgICAgIGxheWVycyBbbGlzdCBbZGljdCBnZXQgJHZpYV9pbmZvIGxvd2VyIGxheWVyXSBbZGljdCBnZXQgJHZpYV9pbmZvIGN1dCBsYXllcl0gW2RpY3QgZ2V0ICR2aWFfaW5mbyB1cHBlciBsYXllcl1dIFwKKyAgICAgIGN1dHNwYWNpbmcgW2xpc3QgJHhjdXRfc3BhY2luZyAkeWN1dF9zcGFjaW5nXSBcCisgICAgICBsb3dlcl9yZWN0IFtsaXN0IFtleHByIC0xICogJGxvd2VyX3dpZHRoIC8gMl0gW2V4cHIgLTEgKiAkbG93ZXJfaGVpZ2h0IC8gMl0gW2V4cHIgJGxvd2VyX3dpZHRoIC8gMl0gW2V4cHIgJGxvd2VyX2hlaWdodCAvIDJdXSBcCisgICAgICB1cHBlcl9yZWN0IFtsaXN0IFtleHByIC0xICogJHVwcGVyX3dpZHRoIC8gMl0gW2V4cHIgLTEgKiAkdXBwZXJfaGVpZ2h0IC8gMl0gW2V4cHIgJHVwcGVyX3dpZHRoIC8gMl0gW2V4cHIgJHVwcGVyX2hlaWdodCAvIDJdXSBcCisgICAgICBvcmlnaW5feCAwIFwKKyAgICAgIG9yaWdpbl95IDAgXAorICAgIF0KKyAgICAjIGRlYnVnICIkcnVsZSIKKyAgICBzZXQgcnVsZV9saXN0IHt9CisgICAgaWYgeyRhcnJheV9zaXplID09ICRyb3dzfSB7CisgICAgICAjIFNwbGl0IGludG8gbnVtX2FycmF5cyByb3dzIG9mIGFycmF5cworICAgICAgc2V0IGFycmF5X21pbl9zaXplIFtleHByIFtsaW5kZXggW2RpY3QgZ2V0ICR2aWFfaW5mbyBjdXQgc2l6ZV0gMF0gKiAkdXNlX2FycmF5X3NpemUgKyBbZGljdCBnZXQgJHNwYWNpbmdfcnVsZSBjdXRzcGFjaW5nXSAqICgkdXNlX2FycmF5X3NpemUgLSAxKV0KKyAgICAgIHNldCB0b3RhbF9hcnJheV9zaXplIFtleHByICRhcnJheV9taW5fc2l6ZSAqICRudW1fYXJyYXlzICsgJGFycmF5X3NwYWNpbmcgKiAoJG51bV9hcnJheXMgLSAxKV0KKyAgICAgICMgZGVidWcgIlNwbGl0IGludG8gJG51bV9hcnJheXMgcm93cyBvZiBhcnJheXMiCisKKyAgICAgIHNldCBsb3dlcl9lbmNfaGVpZ2h0IFtleHByIHJvdW5kKCgkbG93ZXJfaGVpZ2h0IC0gKCRjdXRfaGVpZ2h0ICArICR5Y3V0X3BpdGNoICogKCR1c2VfYXJyYXlfc2l6ZSAtIDEpKSkgLyAyKV0KKyAgICAgIHNldCB1cHBlcl9lbmNfaGVpZ2h0IFtleHByIHJvdW5kKCgkdXBwZXJfaGVpZ2h0IC0gKCRjdXRfaGVpZ2h0ICArICR5Y3V0X3BpdGNoICogKCR1c2VfYXJyYXlfc2l6ZSAtIDEpKSkgLyAyKV0KKworICAgICAgc2V0IGxvd2VyX2VuYyBbZ2V0X2VuY2xvc3VyZV9ieV9kaXJlY3Rpb24gW2RpY3QgZ2V0ICR2aWFfaW5mbyBsb3dlciBsYXllcl0gJGxvd2VyX2VuY193aWR0aCAkbG93ZXJfZW5jX2hlaWdodCAkbWF4X2xvd2VyX2VuY2xvc3VyZSAkbWluX2xvd2VyX2VuY2xvc3VyZV0KKyAgICAgIHNldCB1cHBlcl9lbmMgW2dldF9lbmNsb3N1cmVfYnlfZGlyZWN0aW9uIFtkaWN0IGdldCAkdmlhX2luZm8gdXBwZXIgbGF5ZXJdICR1cHBlcl9lbmNfd2lkdGggJHVwcGVyX2VuY19oZWlnaHQgJG1heF91cHBlcl9lbmNsb3N1cmUgJG1pbl91cHBlcl9lbmNsb3N1cmVdCisKKyAgICAgIGRpY3Qgc2V0IHJ1bGUgcm93Y29sIFtsaXN0ICR1c2VfYXJyYXlfc2l6ZSAkY29sdW1uc10KKyAgICAgIGRpY3Qgc2V0IHJ1bGUgbmFtZSAiW2RpY3QgZ2V0ICR2aWFfaW5mbyBjdXQgbGF5ZXJdX0FSUkFZXyR7dXNlX2FycmF5X3NpemV9WCR7Y29sdW1uc30iCisgICAgICBkaWN0IHNldCBydWxlIGVuY2xvc3VyZSBbbGlzdCBcCisgICAgICAgIFtkaWN0IGdldCAkbG93ZXJfZW5jIHhFbmNsb3N1cmVdIFwKKyAgICAgICAgW2RpY3QgZ2V0ICRsb3dlcl9lbmMgeUVuY2xvc3VyZV0gXAorICAgICAgICBbZGljdCBnZXQgJHVwcGVyX2VuYyB4RW5jbG9zdXJlXSBcCisgICAgICAgIFtkaWN0IGdldCAkdXBwZXJfZW5jIHlFbmNsb3N1cmVdIFwKKyAgICAgIF0KKworICAgICAgc2V0IHkgW2V4cHIgJGFycmF5X21pbl9zaXplIC8gMiAtICR0b3RhbF9hcnJheV9zaXplIC8gMl0KKyAgICAgIGZvciB7c2V0IGkgMH0geyRpIDwgJG51bV9hcnJheXN9IHtpbmNyIGl9IHsKKyAgICAgICAgZGljdCBzZXQgcnVsZSBvcmlnaW5feSAkeQorICAgICAgICBsYXBwZW5kIHJ1bGVfbGlzdCAkcnVsZQorICAgICAgICBzZXQgeSBbZXhwciAkeSArICRhcnJheV9zcGFjaW5nICsgJGFycmF5X21pbl9zaXplXQorICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAjIFNwbGl0IGludG8gbnVtX2FycmF5cyBjb2x1bW5zIG9mIGFycmF5cworICAgICAgc2V0IGFycmF5X21pbl9zaXplIFtleHByIFtsaW5kZXggW2RpY3QgZ2V0ICR2aWFfaW5mbyBjdXQgc2l6ZV0gMV0gKiAkdXNlX2FycmF5X3NpemUgKyBbZGljdCBnZXQgJHNwYWNpbmdfcnVsZSBjdXRzcGFjaW5nXSAqICgkdXNlX2FycmF5X3NpemUgLSAxKV0KKyAgICAgIHNldCB0b3RhbF9hcnJheV9zaXplIFtleHByICRhcnJheV9taW5fc2l6ZSAqICRudW1fYXJyYXlzICsgJGFycmF5X3NwYWNpbmcgKiAoJG51bV9hcnJheXMgLSAxKV0KKyAgICAgICMgZGVidWcgIlNwbGl0IGludG8gJG51bV9hcnJheXMgY29sdW1ucyBvZiBhcnJheXMiCisKKyAgICAgIHNldCBsb3dlcl9lbmNfd2lkdGggIFtleHByIHJvdW5kKCgkbG93ZXJfd2lkdGggIC0gKCRjdXRfd2lkdGggICArICR4Y3V0X3BpdGNoICogKCR1c2VfYXJyYXlfc2l6ZSAtIDEpKSkgLyAyKV0KKyAgICAgIHNldCB1cHBlcl9lbmNfd2lkdGggIFtleHByIHJvdW5kKCgkdXBwZXJfd2lkdGggIC0gKCRjdXRfd2lkdGggICArICR4Y3V0X3BpdGNoICogKCR1c2VfYXJyYXlfc2l6ZSAtIDEpKSkgLyAyKV0KKworICAgICAgc2V0IGxvd2VyX2VuYyBbZ2V0X2VuY2xvc3VyZV9ieV9kaXJlY3Rpb24gW2RpY3QgZ2V0ICR2aWFfaW5mbyBsb3dlciBsYXllcl0gJGxvd2VyX2VuY193aWR0aCAkbG93ZXJfZW5jX2hlaWdodCAkbWF4X2xvd2VyX2VuY2xvc3VyZSAkbWluX2xvd2VyX2VuY2xvc3VyZV0KKyAgICAgIHNldCB1cHBlcl9lbmMgW2dldF9lbmNsb3N1cmVfYnlfZGlyZWN0aW9uIFtkaWN0IGdldCAkdmlhX2luZm8gdXBwZXIgbGF5ZXJdICR1cHBlcl9lbmNfd2lkdGggJHVwcGVyX2VuY19oZWlnaHQgJG1heF91cHBlcl9lbmNsb3N1cmUgJG1pbl91cHBlcl9lbmNsb3N1cmVdCisKKyAgICAgIGRpY3Qgc2V0IHJ1bGUgcm93Y29sIFtsaXN0ICRyb3dzICR1c2VfYXJyYXlfc2l6ZV0KKyAgICAgIGRpY3Qgc2V0IHJ1bGUgbmFtZSAiW2RpY3QgZ2V0ICR2aWFfaW5mbyBjdXQgbGF5ZXJdX0FSUkFZXyR7cm93c31YJHt1c2VfYXJyYXlfc2l6ZX0iCisgICAgICBkaWN0IHNldCBydWxlIGVuY2xvc3VyZSBbbGlzdCBcCisgICAgICAgIFtkaWN0IGdldCAkbG93ZXJfZW5jIHhFbmNsb3N1cmVdIFwKKyAgICAgICAgW2RpY3QgZ2V0ICRsb3dlcl9lbmMgeUVuY2xvc3VyZV0gXAorICAgICAgICBbZGljdCBnZXQgJHVwcGVyX2VuYyB4RW5jbG9zdXJlXSBcCisgICAgICAgIFtkaWN0IGdldCAkdXBwZXJfZW5jIHlFbmNsb3N1cmVdIFwKKyAgICAgIF0KKworICAgICAgc2V0IHggW2V4cHIgJGFycmF5X21pbl9zaXplIC8gMiAtICR0b3RhbF9hcnJheV9zaXplIC8gMl0KKyAgICAgIGZvciB7c2V0IGkgMH0geyRpIDwgJG51bV9hcnJheXN9IHtpbmNyIGl9IHsKKyAgICAgICAgZGljdCBzZXQgcnVsZSBvcmlnaW5feCAkeAorICAgICAgICBsYXBwZW5kIHJ1bGVfbGlzdCAkcnVsZQorICAgICAgICBzZXQgeCBbZXhwciAkeCArICRhcnJheV9zcGFjaW5nICsgJGFycmF5X21pbl9zaXplXQorICAgICAgfQorICAgIH0KKyAgfSBlbHNlIHsKKyAgICAjIGRlYnVnICJBcnJheXNwYWNpbmcgcnVsZSIKKyAgICBzZXQgbG93ZXJfZW5jIFtnZXRfZW5jbG9zdXJlX2J5X2RpcmVjdGlvbiBbZGljdCBnZXQgJHZpYV9pbmZvIGxvd2VyIGxheWVyXSAkbG93ZXJfZW5jX3dpZHRoICRsb3dlcl9lbmNfaGVpZ2h0ICRtYXhfbG93ZXJfZW5jbG9zdXJlICRtaW5fbG93ZXJfZW5jbG9zdXJlXQorICAgIHNldCB1cHBlcl9lbmMgW2dldF9lbmNsb3N1cmVfYnlfZGlyZWN0aW9uIFtkaWN0IGdldCAkdmlhX2luZm8gdXBwZXIgbGF5ZXJdICR1cHBlcl9lbmNfd2lkdGggJHVwcGVyX2VuY19oZWlnaHQgJG1heF91cHBlcl9lbmNsb3N1cmUgJG1pbl91cHBlcl9lbmNsb3N1cmVdCisKKyAgICBzZXQgcnVsZSBbbGlzdCBcCisgICAgICBuYW1lICRydWxlX25hbWUgXAorICAgICAgcnVsZSAkdmlhcnVsZV9uYW1lIFwKKyAgICAgIGN1dHNpemUgW2RpY3QgZ2V0ICR2aWFfaW5mbyBjdXQgc2l6ZV0gXAorICAgICAgbGF5ZXJzIFtsaXN0IFtkaWN0IGdldCAkdmlhX2luZm8gbG93ZXIgbGF5ZXJdIFtkaWN0IGdldCAkdmlhX2luZm8gY3V0IGxheWVyXSBbZGljdCBnZXQgJHZpYV9pbmZvIHVwcGVyIGxheWVyXV0gXAorICAgICAgY3V0c3BhY2luZyBbbGlzdCAkeGN1dF9zcGFjaW5nICR5Y3V0X3NwYWNpbmddIFwKKyAgICAgIHJvd2NvbCBbbGlzdCAkcm93cyAkY29sdW1uc10gXAorICAgICAgZW5jbG9zdXJlIFtsaXN0IFwKKyAgICAgICAgW2RpY3QgZ2V0ICRsb3dlcl9lbmMgeEVuY2xvc3VyZV0gXAorICAgICAgICBbZGljdCBnZXQgJGxvd2VyX2VuYyB5RW5jbG9zdXJlXSBcCisgICAgICAgIFtkaWN0IGdldCAkdXBwZXJfZW5jIHhFbmNsb3N1cmVdIFwKKyAgICAgICAgW2RpY3QgZ2V0ICR1cHBlcl9lbmMgeUVuY2xvc3VyZV0gXAorICAgICAgXSBcCisgICAgICBvcmlnaW5feCAwIFwKKyAgICAgIG9yaWdpbl95IDAgXAorICAgIF0KKyAgICBzZXQgcnVsZV9saXN0IFtsaXN0ICRydWxlXQorICB9CisKKyAgcmV0dXJuICRydWxlX2xpc3QKK30KKworcHJvYyB2aWFfc3BsaXRfY3V0c19ydWxlIHtydWxlX25hbWUgdmlhX2luZm8gcm93cyBjb2x1bW5zIGNvbnN0cmFpbnRzfSB7CisgIHZhcmlhYmxlIHRlY2gKKyAgdmFyaWFibGUgZGVmX3VuaXRzCisgIHZhcmlhYmxlIG1pbl9sb3dlcl9lbmNsb3N1cmUKKyAgdmFyaWFibGUgbWF4X2xvd2VyX2VuY2xvc3VyZQorICB2YXJpYWJsZSBtaW5fdXBwZXJfZW5jbG9zdXJlCisgIHZhcmlhYmxlIG1heF91cHBlcl9lbmNsb3N1cmUKKyAgdmFyaWFibGUgY3V0X3dpZHRoCisgIHZhcmlhYmxlIGN1dF9oZWlnaHQKKyAgdmFyaWFibGUgeGN1dF9waXRjaAorICB2YXJpYWJsZSB5Y3V0X3BpdGNoCisgIHZhcmlhYmxlIHhjdXRfc3BhY2luZworICB2YXJpYWJsZSB5Y3V0X3NwYWNpbmcKKworICBzZXQgbG93ZXJfcmVjdHMge30KKyAgc2V0IGN1dF9yZWN0cyAgIHt9CisgIHNldCB1cHBlcl9yZWN0cyB7fQorCisgIHNldCBsb3dlciBbZGljdCBnZXQgJHZpYV9pbmZvIGxvd2VyIGxheWVyXQorICBzZXQgdXBwZXIgW2RpY3QgZ2V0ICR2aWFfaW5mbyB1cHBlciBsYXllcl0KKyAgIyBkZWJ1ZyAkdmlhX2luZm8KKyAgIyBkZWJ1ZyAibG93ZXIgJGxvd2VyIHVwcGVyICR1cHBlciIKKworICBzZXQgcnVsZSB7fQorICBzZXQgcnVsZSBbbGlzdCBcCisgICAgcnVsZSAkcnVsZV9uYW1lIFwKKyAgICBjdXRzaXplIFtkaWN0IGdldCAkdmlhX2luZm8gY3V0IHNpemVdIFwKKyAgICBsYXllcnMgW2xpc3QgJGxvd2VyIFtkaWN0IGdldCAkdmlhX2luZm8gY3V0IGxheWVyXSAkdXBwZXJdIFwKKyAgICBjdXRzcGFjaW5nIFtsaXN0ICR4Y3V0X3NwYWNpbmcgJHljdXRfc3BhY2luZ10gXAorICAgIHJvd2NvbCBbbGlzdCAxIDFdIFwKKyAgXQorCisgICMgRW5jbG9zdXJlIHdhcyBjYWxjdWxhdGVkIGZyb20gZnVsbCB3aWR0aCBvZiBpbnRlcnNlY3Rpb24gLSBuZWVkIHRvIHJlY2FsY3VsYXRlIGZvciBtaW4gY3V0IHNpemUuCisgIGdldF92aWFfZW5jbG9zdXJlICR2aWFfaW5mbyAwIDAKKworICAjIEFyZWEgaXMgc3RvcmVkIGluIHJlYWwgdW5pdHMsIGFkanVzdCB0byBkZWZfdW5pdHMKKyAgc2V0IGxvd2VyX2FyZWEgW2V4cHIgcm91bmQoW1tmaW5kX2xheWVyICRsb3dlcl0gZ2V0QXJlYV0gKiAkZGVmX3VuaXRzICogJGRlZl91bml0cyldCisgIHNldCB1cHBlcl9hcmVhIFtleHByIHJvdW5kKFtbZmluZF9sYXllciAkdXBwZXJdIGdldEFyZWFdICogJGRlZl91bml0cyAqICRkZWZfdW5pdHMpXQorCisgIGlmIHtbZ2V0X2RpciAkbG93ZXJdID09ICJob3IifSB7CisgICAgc2V0IGxvd2VyX2hlaWdodCBbZXhwciAkY3V0X2hlaWdodCArICRtaW5fbG93ZXJfZW5jbG9zdXJlXQorICAgIHNldCBsb3dlcl93aWR0aCAgW2V4cHIgJGN1dF93aWR0aCAgKyAkbWF4X2xvd2VyX2VuY2xvc3VyZV0KKyAgICBzZXQgdXBwZXJfaGVpZ2h0IFtleHByICRjdXRfaGVpZ2h0ICsgJG1heF91cHBlcl9lbmNsb3N1cmVdCisgICAgc2V0IHVwcGVyX3dpZHRoICBbZXhwciAkY3V0X3dpZHRoICArICRtaW5fdXBwZXJfZW5jbG9zdXJlXQorCisgICAgaWYge1tkaWN0IGV4aXN0cyAkY29uc3RyYWludHMgc3BsaXRfY3V0cyAkbG93ZXJdfSB7CisgICAgICBzZXQgbG93ZXJfd2lkdGggIFtleHByICRsb3dlcl9hcmVhIC8gJGxvd2VyX2hlaWdodF0KKyAgICAgIGlmIHskbG93ZXJfd2lkdGggJSAyID09IDF9IHtpbmNyIGxvd2VyX3dpZHRofQorICAgICAgc2V0IG1heF9sb3dlcl9lbmNsb3N1cmUgW2V4cHIgbWF4KCgkbG93ZXJfd2lkdGggLSAkY3V0X3dpZHRoKSAvIDIsICRtYXhfbG93ZXJfZW5jbG9zdXJlKV0KKyAgICB9CisKKyAgICBpZiB7W2RpY3QgZXhpc3RzICRjb25zdHJhaW50cyBzcGxpdF9jdXRzICR1cHBlcl19IHsKKyAgICAgIHNldCB1cHBlcl9oZWlnaHQgW2V4cHIgJHVwcGVyX2FyZWEgLyAkdXBwZXJfd2lkdGhdCisgICAgICBpZiB7JHVwcGVyX2hlaWdodCAlIDIgPT0gMX0ge2luY3IgdXBwZXJfaGVpZ2h0fQorICAgICAgc2V0IG1heF91cHBlcl9lbmNsb3N1cmUgW2V4cHIgbWF4KCgkdXBwZXJfaGVpZ2h0IC0gJGN1dF9oZWlnaHQpIC8gMiwgJG1heF91cHBlcl9lbmNsb3N1cmUpXQorICAgIH0KKworICAgIHNldCB3aWR0aCBbZXhwciAkbWF4X2xvd2VyX2VuY2xvc3VyZSAqIDIgKyAkY3V0X3dpZHRoXQorICAgIHNldCBoZWlnaHQgW2V4cHIgJG1heF91cHBlcl9lbmNsb3N1cmUgKiAyICsgJGN1dF93aWR0aF0KKworICAgIGRpY3Qgc2V0IHJ1bGUgbmFtZSBbZ2V0X3ZpYXJ1bGVfbmFtZSAkbG93ZXIgJHdpZHRoICRoZWlnaHRdCisgICAgZGljdCBzZXQgcnVsZSBlbmNsb3N1cmUgW2xpc3QgJG1heF9sb3dlcl9lbmNsb3N1cmUgJG1pbl9sb3dlcl9lbmNsb3N1cmUgJG1pbl91cHBlcl9lbmNsb3N1cmUgJG1heF91cHBlcl9lbmNsb3N1cmVdCisgIH0gZWxzZSB7CisgICAgc2V0IGxvd2VyX2hlaWdodCBbZXhwciAkY3V0X2hlaWdodCArICRtYXhfbG93ZXJfZW5jbG9zdXJlXQorICAgIHNldCBsb3dlcl93aWR0aCAgW2V4cHIgJGN1dF93aWR0aCAgKyAkbWluX2xvd2VyX2VuY2xvc3VyZV0KKyAgICBzZXQgdXBwZXJfaGVpZ2h0IFtleHByICRjdXRfaGVpZ2h0ICsgJG1pbl91cHBlcl9lbmNsb3N1cmVdCisgICAgc2V0IHVwcGVyX3dpZHRoICBbZXhwciAkY3V0X3dpZHRoICArICRtYXhfdXBwZXJfZW5jbG9zdXJlXQorCisgICAgaWYge1tkaWN0IGV4aXN0cyAkY29uc3RyYWludHMgc3BsaXRfY3V0cyAkbG93ZXJdfSB7CisgICAgICBzZXQgbG93ZXJfd2lkdGggIFtleHByICRjdXRfd2lkdGggKyAkbWluX2xvd2VyX2VuY2xvc3VyZV0KKyAgICAgIHNldCBsb3dlcl9oZWlnaHQgW2V4cHIgJGN1dF93aWR0aCArICRtYXhfbG93ZXJfZW5jbG9zdXJlXQorICAgICAgc2V0IG1pbl9sb3dlcl9sZW5ndGggW2V4cHIgJGxvd2VyX2FyZWEgLyAkbG93ZXJfd2lkdGhdCisgICAgICBpZiB7JG1pbl9sb3dlcl9sZW5ndGggJSAyID09IDF9IHtpbmNyIG1pbl9sb3dlcl9sZW5ndGh9CisgICAgICBzZXQgbWF4X2xvd2VyX2VuY2xvc3VyZSBbZXhwciBtYXgoKCRtaW5fbG93ZXJfbGVuZ3RoIC0gJGN1dF93aWR0aCkgLyAyLCAkbWF4X2xvd2VyX2VuY2xvc3VyZSldCisgICAgfQorCisgICAgaWYge1tkaWN0IGV4aXN0cyAkY29uc3RyYWludHMgc3BsaXRfY3V0cyAkdXBwZXJdfSB7CisgICAgICBzZXQgdXBwZXJfd2lkdGggIFtleHByICRjdXRfaGVpZ2h0ICsgJG1heF91cHBlcl9lbmNsb3N1cmVdCisgICAgICBzZXQgdXBwZXJfaGVpZ2h0IFtleHByICRjdXRfaGVpZ2h0ICsgJG1pbl91cHBlcl9lbmNsb3N1cmVdCisgICAgICBzZXQgbWluX3VwcGVyX2xlbmd0aCBbZXhwciAkdXBwZXJfYXJlYSAvICR1cHBlcl9oZWlnaHRdCisgICAgICBpZiB7JG1pbl91cHBlcl9sZW5ndGggJSAyID09IDF9IHtpbmNyIG1pbl91cHBlcl9sZW5ndGh9CisgICAgICBzZXQgbWF4X3VwcGVyX2VuY2xvc3VyZSBbZXhwciBtYXgoKCRtaW5fdXBwZXJfbGVuZ3RoIC0gJGN1dF9oZWlnaHQpIC8gMiwgJG1heF91cHBlcl9lbmNsb3N1cmUpXQorICAgIH0KKworICAgIHNldCB3aWR0aCBbZXhwciAkbWF4X3VwcGVyX2VuY2xvc3VyZSAqIDIgKyAkY3V0X3dpZHRoXQorICAgIHNldCBoZWlnaHQgW2V4cHIgJG1heF9sb3dlcl9lbmNsb3N1cmUgKiAyICsgJGN1dF93aWR0aF0KKworICAgIGRpY3Qgc2V0IHJ1bGUgbmFtZSBbZ2V0X3ZpYXJ1bGVfbmFtZSAkbG93ZXIgJHdpZHRoICRoZWlnaHRdCisgICAgZGljdCBzZXQgcnVsZSBlbmNsb3N1cmUgW2xpc3QgJG1pbl9sb3dlcl9lbmNsb3N1cmUgJG1heF9sb3dlcl9lbmNsb3N1cmUgJG1heF91cHBlcl9lbmNsb3N1cmUgJG1pbl91cHBlcl9lbmNsb3N1cmVdCisgIH0KKyAgZGljdCBzZXQgcnVsZSBsb3dlcl9yZWN0IFtsaXN0IFtleHByIC0xICogJGxvd2VyX3dpZHRoIC8gMl0gW2V4cHIgLTEgKiAkbG93ZXJfaGVpZ2h0IC8gMl0gW2V4cHIgJGxvd2VyX3dpZHRoIC8gMl0gW2V4cHIgJGxvd2VyX2hlaWdodCAvIDJdXQorICBkaWN0IHNldCBydWxlIHVwcGVyX3JlY3QgW2xpc3QgW2V4cHIgLTEgKiAkdXBwZXJfd2lkdGggLyAyXSBbZXhwciAtMSAqICR1cHBlcl9oZWlnaHQgLyAyXSBbZXhwciAkdXBwZXJfd2lkdGggLyAyXSBbZXhwciAkdXBwZXJfaGVpZ2h0IC8gMl1dCisgICMgZGVidWcgIm1pbl9sb3dlcl9lbmNsb3N1cmUgJG1pbl9sb3dlcl9lbmNsb3N1cmUiCisgICMgZGVidWcgImxvd2VyICRsb3dlciB1cHBlciAkdXBwZXIgZW5jbG9zdXJlIFtkaWN0IGdldCAkcnVsZSBlbmNsb3N1cmVdIgorCisgIGZvciB7c2V0IGkgMH0geyRpIDwgJHJvd3N9IHtpbmNyIGl9IHsKKyAgICBmb3Ige3NldCBqIDB9IHskaiA8ICRjb2x1bW5zfSB7aW5jciBqfSB7CisgICAgICBzZXQgY2VudHJlX3ggW2V4cHIgcm91bmQoKCRqIC0gKCgkY29sdW1ucyAtIDEpIC8gMi4wKSkgKiAkeGN1dF9waXRjaCldCisgICAgICBzZXQgY2VudHJlX3kgW2V4cHIgcm91bmQoKCRpIC0gKCgkcm93cyAtIDEpICAgIC8gMi4wKSkgKiAkeWN1dF9waXRjaCldCisKKyAgICAgIGRpY3Qgc2V0IHJ1bGUgb3JpZ2luX3ggJGNlbnRyZV94CisgICAgICBkaWN0IHNldCBydWxlIG9yaWdpbl95ICRjZW50cmVfeQorICAgICAgbGFwcGVuZCBydWxlX2xpc3QgJHJ1bGUKKyAgICB9CisgIH0KKyAgIyBkZWJ1ZyAic3BsaXQgaW50byBbbGxlbmd0aCAkcnVsZV9saXN0XSB2aWFzIgorICByZXR1cm4gJHJ1bGVfbGlzdAorfQorCisjIHZpYXJ1bGUgc3RydWN0dXJlOgorIyB7CisjICAgIG5hbWUgPHZpYV9uYW1lPgorIyAgICBydWxlIDx2aWFfcnVsZV9uYW1lPgorIyAgICBjdXRzaXplIHs8Y3V0X3NpemU+fQorIyAgICBsYXllcnMgezxsb3dlcj4gPGN1dD4gPHVwcGVyPn0KKyMgICAgY3V0c3BhY2luZyB7PHhfc3BhY2luZz4gPHlfc3BhY2luZz59CisjICAgIHJvd2NvbCB7PHJvd3M+IDxjb2x1bW5zPn0KKyMgICAgb3JpZ2luX3ggPHhfbG9jYXRpb24+CisjICAgIG9yaWdpbl95IDx5X2xvY2F0aW9uPgorIyAgICBlbmNsb3N1cmUgezx4X2xvd2VyX2VuY2xvc3VyZT4gPHlfbG93ZXJfZW5jbG9zdXJlPiA8eF91cHBlcl9lbmNsb3N1cmU+IDx5X3VwcGVyX2VuY2xvc3VyZT59CisjICAgIGxvd2VyX3JlY3QgezxsbHg+IDxsbHk+IDx1cng+IDx1cnk+fQorIyAgfQorCisjIEdpdmVuIHRoZSB2aWEgcnVsZSBleHByZXNzZWQgaW4gdmlhX2luZm8sIHdoYXQgaXMgdGhlIHZpYSB3aXRoIHRoZSBsYXJnZXN0IGN1dCBhcmVhIHRoYXQgd2UgY2FuIG1ha2UKKyMgVHJ5IHVzaW5nIGEgdmlhIGdlbmVyYXRlIHJ1bGUKK3Byb2MgZ2V0X3ZpYV9vcHRpb24ge3ZpYXJ1bGVfbmFtZSB2aWFfaW5mbyBsb3dlciB3aWR0aCBoZWlnaHQgY29uc3RyYWludHN9IHsKKyAgdmFyaWFibGUgdXBwZXJfd2lkdGgKKyAgdmFyaWFibGUgbG93ZXJfd2lkdGgKKyAgdmFyaWFibGUgdXBwZXJfaGVpZ2h0CisgIHZhcmlhYmxlIGxvd2VyX2hlaWdodAorICB2YXJpYWJsZSBsb3dlcl9kaXIKKyAgdmFyaWFibGUgdXBwZXJfZGlyCisgIHZhcmlhYmxlIG1pbl9sb3dlcl9lbmNsb3N1cmUKKyAgdmFyaWFibGUgbWF4X2xvd2VyX2VuY2xvc3VyZQorICB2YXJpYWJsZSBtaW5fdXBwZXJfZW5jbG9zdXJlCisgIHZhcmlhYmxlIG1heF91cHBlcl9lbmNsb3N1cmUKKyAgdmFyaWFibGUgZGVmYXVsdF9jdXRjbGFzcworICB2YXJpYWJsZSBncmlkX2RhdGEKKyAgdmFyaWFibGUgdmlhX2xvY2F0aW9uCisgIHZhcmlhYmxlIGRlZl91bml0cworCisgIHNldCB1cHBlciBbZGljdCBnZXQgJHZpYV9pbmZvIHVwcGVyIGxheWVyXQorCisgICMgZGVidWcgInskbG93ZXIgJHdpZHRoICRoZWlnaHR9IgorCisgIHNldCBsb3dlcl9kaXIgW2dldF9kaXIgJGxvd2VyXQorICBzZXQgdXBwZXJfZGlyIFtnZXRfZGlyICR1cHBlcl0KKworICBpbml0X3ZpYV93aWR0aF9oZWlnaHQgJHZpYV9pbmZvICRsb3dlciAkd2lkdGggJGhlaWdodCAkY29uc3RyYWludHMKKyAgIyBkZWJ1ZyAibG93ZXI6ICRsb3dlciwgd2lkdGg6ICR3aWR0aCwgaGVpZ2h0OiAkaGVpZ2h0LCBsb3dlcl93aWR0aDogJGxvd2VyX3dpZHRoLCBsb3dlcl9oZWlnaHQ6ICRsb3dlcl9oZWlnaHQiCisgIGdldF92aWFfZW5jbG9zdXJlICR2aWFfaW5mbyBbZXhwciBtaW4oJGxvd2VyX3dpZHRoLCRsb3dlcl9oZWlnaHQpXSBbZXhwciBtaW4oJHVwcGVyX3dpZHRoLCR1cHBlcl9oZWlnaHQpXQorCisgICMgZGVidWcgInNwbGl0IGN1dHM/IFtkaWN0IGV4aXN0cyAkY29uc3RyYWludHMgc3BsaXRfY3V0c10iCisgICMgZGVidWcgImxvd2VyICRsb3dlciB1cHBlciAkdXBwZXIiCisgICMgZGVidWcgW2RpY3QgZ2V0ICR2aWFfaW5mbyBjdXQgbGF5ZXJdCisKKyAgIyBEZXRlcm1pbmVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiByb3dzIGFuZCBjb2x1bW5zIHRoYXQgY2FuIGZpdCBpbnRvIHRoaXMgd2lkdGgvaGVpZ2h0CisgIHNldCBjb2x1bW5zIFtkZXRlcm1pbmVfbnVtX3ZpYV9jb2x1bW5zICR2aWFfaW5mbyAkY29uc3RyYWludHNdCisgIHNldCByb3dzICAgIFtkZXRlcm1pbmVfbnVtX3ZpYV9yb3dzICAgICR2aWFfaW5mbyAkY29uc3RyYWludHNdCisKKyAgIyBkZWJ1ZyAiY29sdW1uczogJGNvbHVtbnMsIHJvd3M6ICRyb3dzIgkgIAorICAjIGRlYnVnICJsb3dlcl93aWR0aCAkbG93ZXJfd2lkdGggbG93ZXJfaGVpZ2h0OiAkbG93ZXJfaGVpZ2h0LCBtaW5fbG93ZXJfZW5jbG9zdXJlICRtaW5fbG93ZXJfZW5jbG9zdXJlIgorICAjIGRlYnVnICJ1cHBlcl93aWR0aCAkdXBwZXJfd2lkdGggdXBwZXJfaGVpZ2h0OiAkdXBwZXJfaGVpZ2h0LCBtaW5fdXBwZXJfZW5jbG9zdXJlICRtaW5fdXBwZXJfZW5jbG9zdXJlIgorCisgIGlmIHtbZGljdCBleGlzdHMgJGNvbnN0cmFpbnRzIHNwbGl0X2N1dHNdICYmIChbbHNlYXJjaCAtZXhhY3QgW2RpY3QgZ2V0ICRjb25zdHJhaW50cyBzcGxpdF9jdXRzXSAkbG93ZXJdID4gLTEgfHwgW2xzZWFyY2ggLWV4YWN0IFtkaWN0IGdldCAkY29uc3RyYWludHMgc3BsaXRfY3V0c10gJHVwcGVyXSA+IC0xKX0geworICAgICMgZGVidWcgInZpYV9zcGxpdF9jdXRzX3J1bGUiCisgICAgc2V0IHJ1bGVzIFt2aWFfc3BsaXRfY3V0c19ydWxlICR2aWFydWxlX25hbWUgJHZpYV9pbmZvICRyb3dzICRjb2x1bW5zICRjb25zdHJhaW50c10KKyAgfSBlbHNlaWYge1t1c2VfYXJyYXlzcGFjaW5nIFtkaWN0IGdldCAkdmlhX2luZm8gY3V0IGxheWVyXSAkcm93cyAkY29sdW1uc119IHsKKyAgICAjIGRlYnVnICJ2aWFfZ2VuZXJhdGVfYXJyYXlfcnVsZSIKKyAgICBzZXQgcnVsZXMgW3ZpYV9nZW5lcmF0ZV9hcnJheV9ydWxlICR2aWFydWxlX25hbWUgJHZpYV9pbmZvIFtnZXRfdmlhcnVsZV9uYW1lICRsb3dlciAkd2lkdGggJGhlaWdodF0gJHJvd3MgJGNvbHVtbnNdCisgIH0gZWxzZSB7CisgICAgIyBkZWJ1ZyAidmlhX2dlbmVyYXRlX3J1bGUiCisgICAgc2V0IHJ1bGVzIFt2aWFfZ2VuZXJhdGVfcnVsZSAkdmlhcnVsZV9uYW1lICR2aWFfaW5mbyBbZ2V0X3ZpYXJ1bGVfbmFtZSAkbG93ZXIgJHdpZHRoICRoZWlnaHRdICRyb3dzICRjb2x1bW5zICRjb25zdHJhaW50c10KKyAgfQorCisgICMgQ2hlY2sgbWluaW11bV9jdXRzCisgIHNldCBjaGVja2VkX3J1bGVzIHt9CisgIGZvcmVhY2ggdmlhX3J1bGUgJHJ1bGVzIHsKKyAgICAjIGRlYnVnICIkdmlhX3J1bGUiCisgICAgc2V0IG51bV9jdXRzIFtleHByIFtsaW5kZXggW2RpY3QgZ2V0ICR2aWFfcnVsZSByb3djb2xdIDBdICogW2xpbmRleCBbZGljdCBnZXQgJHZpYV9ydWxlIHJvd2NvbF0gMV1dCisgICAgaWYge1tkaWN0IGV4aXN0cyAkZGVmYXVsdF9jdXRjbGFzcyBbbGluZGV4IFtkaWN0IGdldCAkdmlhX3J1bGUgbGF5ZXJzXSAxXV19IHsKKyAgICAgIHNldCBjdXRfY2xhc3MgW2RpY3QgZ2V0ICRkZWZhdWx0X2N1dGNsYXNzIFtsaW5kZXggW2RpY3QgZ2V0ICR2aWFfcnVsZSBsYXllcnNdIDFdXQorICAgIH0gZWxzZSB7CisgICAgICBzZXQgY3V0X2NsYXNzICJOT05FIgorICAgIH0KKyAgICBzZXQgbG93ZXJfbGF5ZXIgW2xpbmRleCBbZGljdCBnZXQgJHZpYV9ydWxlIGxheWVyc10gMF0KKyAgICBpZiB7W2RpY3QgZXhpc3RzICRjb25zdHJhaW50cyBzdGFja19ib3R0b21dfSB7CisgICAgICBpZiB7W2RpY3QgZXhpc3RzICRncmlkX2RhdGEgc3RyYXBzICRsb3dlcl9sYXllcl0gfHwgW2RpY3QgZXhpc3RzICRncmlkX2RhdGEgcmFpbHMgJGxvd2VyX2xheWVyXX0geworICAgICAgICBzZXQgbG93ZXJfd2lkdGggW2dldF9ncmlkX3dpcmVfd2lkdGggJGxvd2VyX2xheWVyXQorICAgICAgfSBlbHNlIHsKKyAgICAgICAgc2V0IGxvd2VyX3JlY3QgW2RpY3QgZ2V0ICR2aWFfcnVsZSBsb3dlcl9yZWN0XQorICAgICAgICBzZXQgbG93ZXJfd2lkdGggW2V4cHIgbWluKChbbGluZGV4ICRsb3dlcl9yZWN0IDJdIC0gW2xpbmRleCAkbG93ZXJfcmVjdCAwXSksIChbbGluZGV4ICRsb3dlcl9yZWN0IDNdIC0gW2xpbmRleCAkbG93ZXJfcmVjdCAxXSkpXQorICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICBzZXQgbG93ZXJfcmVjdCBbZGljdCBnZXQgJHZpYV9ydWxlIGxvd2VyX3JlY3RdCisgICAgICBzZXQgbG93ZXJfd2lkdGggW2V4cHIgbWluKChbbGluZGV4ICRsb3dlcl9yZWN0IDJdIC0gW2xpbmRleCAkbG93ZXJfcmVjdCAwXSksIChbbGluZGV4ICRsb3dlcl9yZWN0IDNdIC0gW2xpbmRleCAkbG93ZXJfcmVjdCAxXSkpXQorICAgIH0KKyAgICBzZXQgbWluX2N1dF9ydWxlIFtnZXRfbWluaW11bWN1dHMgJGxvd2VyX2xheWVyICRsb3dlcl93aWR0aCBmcm9tYWJvdmUgJGN1dF9jbGFzc10KKyAgICBpZiB7JG51bV9jdXRzIDwgJG1pbl9jdXRfcnVsZX0geworICAgICAgdXRsOjp3YXJuICJQRE4iIDM4ICJJbGxlZ2FsIHZpYTogbnVtYmVyIG9mIGN1dHMgKCRudW1fY3V0cyksIGRvZXMgbm90IG1lZXQgbWluaW11bSBjdXQgcnVsZSAoJG1pbl9jdXRfcnVsZSkgZm9yICRsb3dlcl9sYXllciB0byAkY3V0X2NsYXNzIHdpdGggd2lkdGggW2V4cHIgMS4wICogJGxvd2VyX3dpZHRoIC8gJGRlZl91bml0c10uIgorICAgICAgZGljdCBzZXQgdmlhX3J1bGUgaWxsZWdhbCAxCisgICAgfSBlbHNlIHsKKyAgICAgICMgZGVidWcgIkxlZ2FsIG51bWJlciBvZiBjdXRzICgkbnVtX2N1dHMpIG1lZXRzIG1pbmltdW0gY3V0IHJ1bGUgKCRtaW5fY3V0X3J1bGUpIGZvciAkbG93ZXJfbGF5ZXIsICRsb3dlcl93aWR0aCwgJGN1dF9jbGFzcyIKKyAgICB9CisKKyAgICBzZXQgdXBwZXJfbGF5ZXIgW2xpbmRleCBbZGljdCBnZXQgJHZpYV9ydWxlIGxheWVyc10gMl0KKyAgICBpZiB7W2RpY3QgZXhpc3RzICRjb25zdHJhaW50cyBzdGFja190b3BdfSB7CisgICAgICBpZiB7W2RpY3QgZXhpc3RzICRncmlkX2RhdGEgc3RyYXBzICR1cHBlcl9sYXllciB3aWR0aF0gfHwgW2RpY3QgZXhpc3RzICRncmlkX2RhdGEgcmFpbHMgJHVwcGVyX2xheWVyIHdpZHRoXX0geworICAgICAgICBzZXQgdXBwZXJfd2lkdGggW2dldF9ncmlkX3dpcmVfd2lkdGggJHVwcGVyX2xheWVyXQorICAgICAgfSBlbHNlIHsKKyAgICAgICAgc2V0IHVwcGVyX3JlY3QgW2RpY3QgZ2V0ICR2aWFfcnVsZSB1cHBlcl9yZWN0XQorICAgICAgICBzZXQgdXBwZXJfd2lkdGggW2V4cHIgbWluKChbbGluZGV4ICR1cHBlcl9yZWN0IDJdIC0gW2xpbmRleCAkdXBwZXJfcmVjdCAwXSksIChbbGluZGV4ICR1cHBlcl9yZWN0IDNdIC0gW2xpbmRleCAkdXBwZXJfcmVjdCAxXSkpXQorICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICBzZXQgdXBwZXJfcmVjdCBbZGljdCBnZXQgJHZpYV9ydWxlIHVwcGVyX3JlY3RdCisgICAgICBzZXQgdXBwZXJfd2lkdGggW2V4cHIgbWluKChbbGluZGV4ICR1cHBlcl9yZWN0IDJdIC0gW2xpbmRleCAkdXBwZXJfcmVjdCAwXSksIChbbGluZGV4ICR1cHBlcl9yZWN0IDNdIC0gW2xpbmRleCAkdXBwZXJfcmVjdCAxXSkpXQorICAgIH0KKyAgICBzZXQgbWluX2N1dF9ydWxlIFtnZXRfbWluaW11bWN1dHMgJHVwcGVyX2xheWVyICR1cHBlcl93aWR0aCBmcm9tYmVsb3cgJGN1dF9jbGFzc10KKworICAgIGlmIHskbnVtX2N1dHMgPCAkbWluX2N1dF9ydWxlfSB7CisgICAgICB1dGw6Ondhcm4gIlBETiIgMzkgIklsbGVnYWwgdmlhOiBudW1iZXIgb2YgY3V0cyAoJG51bV9jdXRzKSwgZG9lcyBub3QgbWVldCBtaW5pbXVtIGN1dCBydWxlICgkbWluX2N1dF9ydWxlKSBmb3IgJHVwcGVyX2xheWVyIHRvICRjdXRfY2xhc3Mgd2l0aCB3aWR0aCBbZXhwciAxLjAgKiAkdXBwZXJfd2lkdGggLyAkZGVmX3VuaXRzXS4iCisgICAgICBkaWN0IHNldCB2aWFfcnVsZSBpbGxlZ2FsIDEKKyAgICB9IGVsc2UgeworICAgICAgIyBkZWJ1ZyAiTGVnYWwgbnVtYmVyIG9mIGN1dHMgKCRudW1fY3V0cykgbWVldHMgbWluaW11bSBjdXQgcnVsZSAoJG1pbl9jdXRfcnVsZSkgZm9yICR1cHBlcl9sYXllciwgJHVwcGVyX3dpZHRoICRjdXRfY2xhc3MiCisgICAgfQorICAgIGlmIHtbZGljdCBleGlzdHMgJHZpYV9ydWxlIGlsbGVnYWxdfSB7CisgICAgICB1dGw6Ondhcm4gIlBETiIgMzYgIkF0dGVtcHQgdG8gYWRkIGlsbGVnYWwgdmlhIGF0IDogKFtleHByIDEuMCAqIFtsaW5kZXggJHZpYV9sb2NhdGlvbiAwXSAvICRkZWZfdW5pdHNdIFtleHByIDEuMCAqIFtsaW5kZXggJHZpYV9sb2NhdGlvbiAxXSAvICRkZWZfdW5pdHNdKSwgdmlhIHdpbGwgbm90IGJlIGFkZGVkLiIKKyAgICB9CisgICAgbGFwcGVuZCBjaGVja2VkX3J1bGVzICR2aWFfcnVsZQorICB9CisKKyAgcmV0dXJuICRjaGVja2VkX3J1bGVzCit9CisKK3Byb2MgZ2V0X3ZpYXJ1bGVfbmFtZSB7bG93ZXIgd2lkdGggaGVpZ2h0fSB7CisgIHNldCBydWxlcyBbc2VsZWN0X3ZpYV9pbmZvICRsb3dlcl0KKyAgaWYge1tsbGVuZ3RoICRydWxlc10gPiAwfSB7CisgICAgc2V0IGZpcnN0X2tleSBbbGluZGV4IFtkaWN0IGtleXMgJHJ1bGVzXSAwXQorICAgICNpZiB7IVtkaWN0IGV4aXN0cyAkcnVsZXMgJGZpcnN0X2tleSBjdXQgbGF5ZXJdfSB7CisgICAgIyAgZGVidWcgIiRsb3dlciAkd2lkdGggJGhlaWdodCIKKyAgICAjICBkZWJ1ZyAiJHJ1bGVzIgorICAgICMgIGRlYnVnICIkZmlyc3Rfa2V5IgorICAgICN9CisgICAgc2V0IGN1dF9sYXllciBbZGljdCBnZXQgJHJ1bGVzICRmaXJzdF9rZXkgY3V0IGxheWVyXQorICB9IGVsc2UgeworICAgIHNldCBjdXRfbGF5ZXIgJGxvd2VyCisgIH0KKworICByZXR1cm4gJHtjdXRfbGF5ZXJ9XyR7d2lkdGh9eCR7aGVpZ2h0fQorfQorCitwcm9jIGdldF9jdXRfYXJlYSB7cnVsZX0geworICBzZXQgYXJlYSAwCisgIGZvcmVhY2ggdmlhICRydWxlIHsKKyAgICBzZXQgYXJlYSBbZXhwciBbbGluZGV4IFtkaWN0IGdldCAkdmlhIHJvd2NvbF0gMF0gKiBbbGluZGV4IFtkaWN0IGdldCAkdmlhIHJvd2NvbF0gMF0gKiBbbGluZGV4IFtkaWN0IGdldCAkdmlhIGN1dHNpemVdIDBdICogW2xpbmRleCBbZGljdCBnZXQgJHZpYSBjdXRzaXplXSAxXV0KKyAgfQorICByZXR1cm4gJGFyZWEKK30KKworcHJvYyBzZWxlY3RfcnVsZSB7cnVsZTEgcnVsZTJ9IHsKKyAgaWYge1tnZXRfY3V0X2FyZWEgJHJ1bGUyXSA+IFtnZXRfY3V0X2FyZWEgJHJ1bGUxXX0geworICAgIHJldHVybiAkcnVsZTIKKyAgfQorICByZXR1cm4gJHJ1bGUxCit9CisKK3Byb2MgY29ubmVjdGlvbl9zcGVjaWZpZXNfZml4ZWRfdmlhIHtjb25zdHJhaW50cyBsb3dlcn0geworICBpZiB7W2RpY3QgZXhpc3RzICRjb25zdHJhaW50cyB1c2VfZml4ZWRfdmlhXX0geworICAgIHJldHVybiBbZGljdCBleGlzdHMgJGNvbnN0cmFpbnRzIHVzZV9maXhlZF92aWEgJGxvd2VyXQorICB9CisgIHJldHVybiAwCit9CisKK3Byb2MgZ2V0X3ZpYSB7bG93ZXIgd2lkdGggaGVpZ2h0IGNvbnN0cmFpbnRzfSB7CisgICMgRmlyc3QgY3VyIHdpbGwgYXNzdW1lIHRoYXQgYWxsIGNyb3NzaW5nIHBvaW50cyAoeCB5KSBhcmUgb24gZ3JpZCBmb3IgYm90aCBsb3dlciBhbmQgdXBwZXIgbGF5ZXJzCisgICMgVE9ETzogUmVmaW5lIHRoZSBhbGdvcml0aG0gdG8gY29wZSB3aXRoIG9mZmdyaWQgaW50ZXJzZWN0aW9uIHBvaW50cworICB2YXJpYWJsZSBwaHlzaWNhbF92aWFydWxlcworCisgIHNldCBydWxlX25hbWUgW2dldF92aWFydWxlX25hbWUgJGxvd2VyICR3aWR0aCAkaGVpZ2h0XQorCisgIGlmIHshW2RpY3QgZXhpc3RzICRwaHlzaWNhbF92aWFydWxlcyAkcnVsZV9uYW1lXX0geworICAgIHNldCBzZWxlY3RlZF9ydWxlIHt9CisgICAgIyBkZWJ1ZyAiJGNvbnN0cmFpbnRzIgorICAgIGlmIHtbY29ubmVjdGlvbl9zcGVjaWZpZXNfZml4ZWRfdmlhICRjb25zdHJhaW50cyAkbG93ZXJdfSB7CisgICAgICAjIGRlYnVnICJVc2luZyBmaXhlZF92aWEgZm9yICRydWxlX25hbWUiCisgICAgICBzZXQgdmlhX25hbWUgW2RpY3QgZ2V0ICRjb25zdHJhaW50cyB1c2VfZml4ZWRfdmlhICRsb3dlcl0KKyAgICAgIGRpY3Qgc2V0IHBoeXNpY2FsX3ZpYXJ1bGVzICRydWxlX25hbWUgW2xpc3QgW2xpc3QgbmFtZSAkdmlhX25hbWUgZml4ZWQgJHZpYV9uYW1lIG9yaWdpbl94IDAgb3JpZ2luX3kgMCBsYXllcnMgW2xpc3QgJGxvd2VyICJjdXQiICJ1cHBlciJdXV0KKyAgICB9IGVsc2UgeworICAgICAgZGljdCBmb3Ige25hbWUgcnVsZX0gW3NlbGVjdF92aWFfaW5mbyAkbG93ZXJdIHsKKyAgICAgICAgc2V0IHJlc3VsdCBbZ2V0X3ZpYV9vcHRpb24gJG5hbWUgJHJ1bGUgJGxvd2VyICR3aWR0aCAkaGVpZ2h0ICRjb25zdHJhaW50c10KKyAgICAgICAgaWYgeyRzZWxlY3RlZF9ydWxlID09IHt9fSB7CisgICAgICAgICAgc2V0IHNlbGVjdGVkX3J1bGUgJHJlc3VsdAorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICMgQ2hvb3NlIHRoZSBiZXN0IGJldHdlZW4gc2VsZWN0ZWQgcnVsZSBhbmQgY3VycmVudCByZXN1bHQsIHRoZSB3aW5uZXIgYmVjb21lcyB0aGUgbmV3IHNlbGVjdGVkIHJ1bGUKKyAgICAgICAgICBzZXQgc2VsZWN0ZWRfcnVsZSBbc2VsZWN0X3J1bGUgJHNlbGVjdGVkX3J1bGUgJHJlc3VsdF0KKyAgICAgICAgfQorICAgICAgfQorICAgICAgZGljdCBzZXQgcGh5c2ljYWxfdmlhcnVsZXMgJHJ1bGVfbmFtZSAkc2VsZWN0ZWRfcnVsZQorICAgICAgIyBkZWJ1ZyAiVmlhIFtkaWN0IHNpemUgJHBoeXNpY2FsX3ZpYXJ1bGVzXTogJHJ1bGVfbmFtZSIKKyAgICB9CisgIH0KKworICByZXR1cm4gJHJ1bGVfbmFtZQorfQorCitwcm9jIGluc3RhbnRpYXRlX3ZpYSB7cGh5c2ljYWxfdmlhX25hbWUgeCB5IGNvbnN0cmFpbnRzfSB7CisgIHZhcmlhYmxlIHBoeXNpY2FsX3ZpYXJ1bGVzCisgIHZhcmlhYmxlIGJsb2NrCisgIHZhcmlhYmxlIGxheWVycworCisgIHNldCB2aWFfaW5zdHMge30KKworICBmb3JlYWNoIHZpYSBbZGljdCBnZXQgJHBoeXNpY2FsX3ZpYXJ1bGVzICRwaHlzaWNhbF92aWFfbmFtZV0geworICAgICMgZGVidWcgInZpYSB4ICR4IHkgJHkgJHZpYSIKKworICAgICMgRG9udCBpbnN0YW50aWF0ZSBpbGxlZ2FsIHZpYXMKKyAgICBpZiB7W2RpY3QgZXhpc3RzICR2aWEgaWxsZWdhbF19IHtjb250aW51ZX0KKworICAgIHNldCB4X2xvY2F0aW9uIFtleHByICR4ICsgW2RpY3QgZ2V0ICR2aWEgb3JpZ2luX3hdXQorICAgIHNldCB5X2xvY2F0aW9uIFtleHByICR5ICsgW2RpY3QgZ2V0ICR2aWEgb3JpZ2luX3ldXQorCisgICAgc2V0IGxvd2VyX2xheWVyX25hbWUgW2xpbmRleCBbZGljdCBnZXQgJHZpYSBsYXllcnNdIDBdCisgICAgc2V0IHVwcGVyX2xheWVyX25hbWUgW2xpbmRleCBbZGljdCBnZXQgJHZpYSBsYXllcnNdIDJdCisKKyAgICBpZiB7W2RpY3QgZXhpc3RzICRjb25zdHJhaW50cyBvbmdyaWRdfSB7CisgICAgICBpZiB7W2xzZWFyY2ggLWV4YWN0IFtkaWN0IGdldCAkY29uc3RyYWludHMgb25ncmlkXSAkbG93ZXJfbGF5ZXJfbmFtZV0gPiAtMX0geworICAgICAgICBpZiB7W2dldF9kaXIgJGxvd2VyX2xheWVyX25hbWVdID09ICJob3IifSB7CisgICAgICAgICAgc2V0IHlfcGl0Y2ggW2RpY3QgZ2V0ICRsYXllcnMgJGxvd2VyX2xheWVyX25hbWUgcGl0Y2hdCisgICAgICAgICAgc2V0IHlfb2Zmc2V0IFtkaWN0IGdldCAkbGF5ZXJzICRsb3dlcl9sYXllcl9uYW1lIG9mZnNldFldCisKKyAgICAgICAgICBzZXQgeV9sb2NhdGlvbiBbZXhwciAoJHkgLSAkeV9vZmZzZXQgKyAkeV9waXRjaCAvIDIpIC8gJHlfcGl0Y2ggKiAkeV9waXRjaCArICR5X29mZnNldCArIFtkaWN0IGdldCAkdmlhIG9yaWdpbl95XV0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBzZXQgeF9waXRjaCBbZGljdCBnZXQgJGxheWVycyAkbG93ZXJfbGF5ZXJfbmFtZSBwaXRjaF0KKyAgICAgICAgICBzZXQgeF9vZmZzZXQgW2RpY3QgZ2V0ICRsYXllcnMgJGxvd2VyX2xheWVyX25hbWUgb2Zmc2V0WF0KKworICAgICAgICAgIHNldCB4X2xvY2F0aW9uIFtleHByICgkeCAtICR4X29mZnNldCArICR4X3BpdGNoIC8gMikgLyAkeF9waXRjaCAqICR4X3BpdGNoICsgJHhfb2Zmc2V0ICsgW2RpY3QgZ2V0ICR2aWEgb3JpZ2luX3hdXQorICAgICAgICB9CisgICAgICB9CisgICAgICBpZiB7W2xzZWFyY2ggLWV4YWN0IFtkaWN0IGdldCAkY29uc3RyYWludHMgb25ncmlkXSAkdXBwZXJfbGF5ZXJfbmFtZV0gPiAtMX0geworICAgICAgICBpZiB7W2dldF9kaXIgJGxvd2VyX2xheWVyX25hbWVdID09ICJob3IifSB7CisgICAgICAgICAgc2V0IHhfcGl0Y2ggW2RpY3QgZ2V0ICRsYXllcnMgJHVwcGVyX2xheWVyX25hbWUgcGl0Y2hdCisgICAgICAgICAgc2V0IHhfb2Zmc2V0IFtkaWN0IGdldCAkbGF5ZXJzICR1cHBlcl9sYXllcl9uYW1lIG9mZnNldFhdCisKKyAgICAgICAgICBzZXQgeF9sb2NhdGlvbiBbZXhwciAoJHggLSAkeF9vZmZzZXQgKyAkeF9waXRjaCAvIDIpIC8gJHhfcGl0Y2ggKiAkeF9waXRjaCArICR4X29mZnNldCArIFtkaWN0IGdldCAkdmlhIG9yaWdpbl94XV0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBzZXQgeV9waXRjaCBbZGljdCBnZXQgJGxheWVycyAkdXBwZXJfbGF5ZXJfbmFtZSBwaXRjaF0KKyAgICAgICAgICBzZXQgeV9vZmZzZXQgW2RpY3QgZ2V0ICRsYXllcnMgJHVwcGVyX2xheWVyX25hbWUgb2Zmc2V0WV0KKworICAgICAgICAgIHNldCB5X2xvY2F0aW9uIFtleHByICgkeSAtICR5X29mZnNldCArICR5X3BpdGNoIC8gMikgLyAkeV9waXRjaCAqICR5X3BpdGNoICsgJHlfb2Zmc2V0ICsgW2RpY3QgZ2V0ICR2aWEgb3JpZ2luX3ldXQorICAgICAgICB9CisgICAgICB9CisgICAgfQorICAgICMgZGVidWcgIng6ICR4IC0+ICR4X2xvY2F0aW9uIgorICAgICMgZGVidWcgInk6ICR5IC0+ICR5X2xvY2F0aW9uIgorCisgICAgZGljdCBzZXQgdmlhIHggJHhfbG9jYXRpb24KKyAgICBkaWN0IHNldCB2aWEgeSAkeV9sb2NhdGlvbgorCisgICAgbGFwcGVuZCB2aWFfaW5zdHMgJHZpYQorICB9CisgIHJldHVybiAkdmlhX2luc3RzCit9CisKK3Byb2MgZ2VuZXJhdGVfdmlhcyB7bGF5ZXIxIGxheWVyMiBpbnRlcnNlY3Rpb25zIGNvbm5lY3Rpb259IHsKKyAgdmFyaWFibGUgbG9naWNhbF92aWFydWxlcworICB2YXJpYWJsZSBtZXRhbF9sYXllcnMKKyAgdmFyaWFibGUgdmlhX2xvY2F0aW9uCisgIHZhcmlhYmxlIHRlY2gKKworICBzZXQgY29uc3RyYWludHMge30KKyAgaWYge1tkaWN0IGV4aXN0cyAkY29ubmVjdGlvbiBjb25zdHJhaW50c119IHsKKyAgICBzZXQgY29uc3RyYWludHMgW2RpY3QgZ2V0ICRjb25uZWN0aW9uIGNvbnN0cmFpbnRzXQorICB9CisgIGlmIHtbZGljdCBleGlzdHMgJGNvbm5lY3Rpb24gZml4ZWRfdmlhc119IHsKKyAgICBmb3JlYWNoIHZpYV9uYW1lIFtkaWN0IGdldCAkY29ubmVjdGlvbiBmaXhlZF92aWFzXSB7CisgICAgICBpZiB7W3NldCB2aWEgWyR0ZWNoIGZpbmRWaWEgJHZpYV9uYW1lXV0gIT0gIk5VTEwifSB7CisgICAgICAgIHNldCBsb3dlcl9sYXllcl9uYW1lIFtbJHZpYSBnZXRCb3R0b21MYXllcl0gZ2V0TmFtZV0KKyAgICAgICAgZGljdCBzZXQgY29uc3RyYWludHMgdXNlX2ZpeGVkX3ZpYSAkbG93ZXJfbGF5ZXJfbmFtZSAkdmlhX25hbWUKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHV0bDo6d2FybiAiUEROIiA2MyAiVmlhICR2aWFfbmFtZSBzcGVjaWZpZWQgaW4gdGhlIGdyaWQgc3BlY2lmaWNhdGlvbiBkb2VzIG5vdCBleGlzdCBpbiB0aGlzIHRlY2hub2xvZ3kuIgorICAgICAgfQorICAgIH0KKyAgfQorCisgICMgZGVidWcgIiAgICBDb25zdHJhaW50czogJGNvbnN0cmFpbnRzIgorICBzZXQgdmlhcyB7fQorICBzZXQgbGF5ZXIxX25hbWUgJGxheWVyMQorICBzZXQgbGF5ZXIyX25hbWUgJGxheWVyMgorICByZWdleHAgeyguKilfUElOXyhob3J8dmVyKX0gJGxheWVyMSAtIGxheWVyMV9uYW1lIGxheWVyMV9kaXJlY3Rpb24KKworICBzZXQgaTEgW2xzZWFyY2ggLWV4YWN0ICRtZXRhbF9sYXllcnMgJGxheWVyMV9uYW1lXQorICBzZXQgaTIgW2xzZWFyY2ggLWV4YWN0ICRtZXRhbF9sYXllcnMgJGxheWVyMl9uYW1lXQorICBpZiB7JGkxID09IC0xfSB7dXRsOjplcnJvciAiUEROIiAyMiAiQ2Fubm90IGZpbmQgbG93ZXIgbWV0YWwgbGF5ZXIgJGxheWVyMS4ifQorICBpZiB7JGkyID09IC0xfSB7dXRsOjplcnJvciAiUEROIiAyMyAiQ2Fubm90IGZpbmQgdXBwZXIgbWV0YWwgbGF5ZXIgJGxheWVyMi4ifQorCisgICMgRm9yIGVhY2ggbGF5ZXIgYmV0d2VlbiBsMSBhbmQgbDIsIGFkZCB2aWFzIGF0IHRoZSBpbnRlcnNlY3Rpb24KKyAgIyBkZWJ1ZyAiICAjIEludGVyc2VjdGlvbnMgW2xsZW5ndGggJGludGVyc2VjdGlvbnNdIgorICBzZXQgY291bnQgMAorICBmb3JlYWNoIGludGVyc2VjdGlvbiAkaW50ZXJzZWN0aW9ucyB7CisgICAgaWYgeyFbZGljdCBleGlzdHMgJGxvZ2ljYWxfdmlhcnVsZXMgW2RpY3QgZ2V0ICRpbnRlcnNlY3Rpb24gcnVsZV1dfSB7CisgICAgICB1dGw6OmVycm9yICJQRE4iIDI0ICJNaXNzaW5nIGxvZ2ljYWwgdmlhcnVsZSBbZGljdCBnZXQgJGludGVyc2VjdGlvbiBydWxlXS5cbkF2YWlsYWJsZSBsb2dpY2FsIHZpYXJ1bGVzIFtkaWN0IGtleXMgJGxvZ2ljYWxfdmlhcnVsZXNdLiIKKyAgICB9CisgICAgc2V0IGxvZ2ljYWxfcnVsZSBbZGljdCBnZXQgJGxvZ2ljYWxfdmlhcnVsZXMgW2RpY3QgZ2V0ICRpbnRlcnNlY3Rpb24gcnVsZV1dCisKKyAgICBzZXQgeCBbZGljdCBnZXQgJGludGVyc2VjdGlvbiB4XQorICAgIHNldCB5IFtkaWN0IGdldCAkaW50ZXJzZWN0aW9uIHldCisgICAgc2V0IHdpZHRoICBbZGljdCBnZXQgJGxvZ2ljYWxfcnVsZSB3aWR0aF0KKyAgICBzZXQgaGVpZ2h0ICBbZGljdCBnZXQgJGxvZ2ljYWxfcnVsZSBoZWlnaHRdCisgICAgc2V0IHZpYV9sb2NhdGlvbiBbbGlzdCAkeCAkeV0KKworICAgIHNldCBjb25uZWN0aW9uX2xheWVycyBbbHJhbmdlICRtZXRhbF9sYXllcnMgJGkxIFtleHByICRpMiAtIDFdXQorICAgICMgZGVidWcgIiAgIyBDb25uZWN0aW9uIGxheWVyczogW2xsZW5ndGggJGNvbm5lY3Rpb25fbGF5ZXJzXSIKKyAgICAjIGRlYnVnICIgIENvbm5lY3Rpb24gbGF5ZXJzOiAkY29ubmVjdGlvbl9sYXllcnMiCisgICAgZGljdCBzZXQgY29uc3RyYWludHMgc3RhY2tfdG9wICRsYXllcjJfbmFtZQorICAgIGRpY3Qgc2V0IGNvbnN0cmFpbnRzIHN0YWNrX2JvdHRvbSAkbGF5ZXIxX25hbWUKKyAgICBmb3JlYWNoIGxheSAkY29ubmVjdGlvbl9sYXllcnMgeworICAgICAgc2V0IHZpYV9uYW1lIFtnZXRfdmlhICRsYXkgJHdpZHRoICRoZWlnaHQgJGNvbnN0cmFpbnRzXQorICAgICAgZm9yZWFjaCB2aWEgW2luc3RhbnRpYXRlX3ZpYSAkdmlhX25hbWUgJHggJHkgJGNvbnN0cmFpbnRzXSB7CisgICAgICAgIGxhcHBlbmQgdmlhcyAkdmlhCisgICAgICB9CisgICAgfQorCisgICAgaW5jciBjb3VudAorICAgICNpZiB7JGNvdW50ICUgMTAwMCA9PSAwfSB7CisgICAgIyAgZGVidWcgIiAgIyAkY291bnQgLyBbbGxlbmd0aCAkaW50ZXJzZWN0aW9uc10iCisgICAgI30KKyAgfQorCisgIHJldHVybiAkdmlhcworfQorCitwcm9jIGdldF9sYXllcnNfZnJvbV90byB7ZnJvbSB0b30geworICB2YXJpYWJsZSBtZXRhbF9sYXllcnMKKworICBzZXQgbGF5ZXJzIHt9CisgIGZvciB7c2V0IGkgW2xzZWFyY2ggLWV4YWN0ICRtZXRhbF9sYXllcnMgJGZyb21dfSB7JGkgPD0gW2xzZWFyY2ggLWV4YWN0ICRtZXRhbF9sYXllcnMgJHRvXX0ge2luY3IgaX0geworICAgIGxhcHBlbmQgbGF5ZXJzIFtsaW5kZXggJG1ldGFsX2xheWVycyAkaV0KKyAgfQorICByZXR1cm4gJGxheWVycworfQorCitwcm9jIGdldF9ncmlkX2NoYW5uZWxfbGF5ZXJzIHt9IHsKKyAgdmFyaWFibGUgZ3JpZF9kYXRhCisKKyAgc2V0IGNoYW5uZWxfbGF5ZXJzIHt9CisgIGlmIHtbZGljdCBleGlzdHMgJGdyaWRfZGF0YSByYWlsc119IHsKKyAgICBsYXBwZW5kIGNoYW5uZWxfbGF5ZXJzIFtsaW5kZXggW2RpY3Qga2V5cyBbZGljdCBnZXQgJGdyaWRfZGF0YSByYWlsc11dIGVuZF0KKyAgfQorICBmb3JlYWNoIGxheWVyX25hbWUgW2RpY3Qga2V5cyBbZGljdCBnZXQgJGdyaWRfZGF0YSBzdHJhcHNdXSB7CisgICAgbGFwcGVuZCBjaGFubmVsX2xheWVycyAkbGF5ZXJfbmFtZQorICB9CisKKyAgcmV0dXJuICRjaGFubmVsX2xheWVycworfQorCitwcm9jIGdldF9ncmlkX2NoYW5uZWxfc3BhY2luZyB7bGF5ZXJfbmFtZSBwYXJhbGxlbF9sZW5ndGh9IHsKKyAgdmFyaWFibGUgZ3JpZF9kYXRhCisgIHZhcmlhYmxlIGRlZl91bml0cworCisgIGlmIHtbZGljdCBleGlzdHMgJGdyaWRfZGF0YSBzdHJhcHMgJGxheWVyX25hbWUgY2hhbm5lbF9zcGFjaW5nXX0geworICAgIHJldHVybiBbZXhwciByb3VuZChbZGljdCBnZXQgJGdyaWRfZGF0YSBzdHJhcHMgJGxheWVyX25hbWUgY2hhbm5lbF9zcGFjaW5nXSAqICRkZWZfdW5pdHMpXQorICB9IGVsc2VpZiB7W2RpY3QgZXhpc3RzICRncmlkX2RhdGEgc3RyYXBzICRsYXllcl9uYW1lXSAmJiBbZGljdCBleGlzdHMgJGdyaWRfZGF0YSB0ZW1wbGF0ZSBuYW1lc119IHsKKyAgICBzZXQgdGVtcGxhdGVfbmFtZSBbbGluZGV4IFtkaWN0IGdldCAkZ3JpZF9kYXRhIHRlbXBsYXRlIG5hbWVzXSAwXQorICAgIGlmIHtbZGljdCBleGlzdHMgJGdyaWRfZGF0YSBzdHJhcHMgJGxheWVyX25hbWUgJHRlbXBsYXRlX25hbWUgY2hhbm5lbF9zcGFjaW5nXX0geworICAgICAgcmV0dXJuIFtleHByIHJvdW5kKFtkaWN0IGdldCAkZ3JpZF9kYXRhIHN0cmFwcyAkbGF5ZXJfbmFtZSAkdGVtcGxhdGVfbmFtZSBjaGFubmVsX3NwYWNpbmddXQorICAgIH0KKyAgfSBlbHNlIHsKKyAgICBzZXQgbGF5ZXIgW1tvcmQ6OmdldF9kYl90ZWNoXSBmaW5kTGF5ZXIgJGxheWVyX25hbWVdCisgICAgaWYgeyRsYXllciA9PSAiTlVMTCJ9ICB7CisgICAgICB1dGw6OmVycm9yIFBETiAxNjggIkxheWVyICRsYXllcl9uYW1lIGRvZXMgbm90IGV4aXN0IgorICAgIH0KKyAgICBzZXQgbGF5ZXJfd2lkdGggW2dldF9ncmlkX3dpcmVfd2lkdGggJGxheWVyX25hbWVdCisgICAgaWYge1skbGF5ZXIgaGFzVHdvV2lkdGhzU3BhY2luZ1J1bGVzXX0geworICAgICAgc2V0IG51bV93aWR0aHMgWyRsYXllciBnZXRUd29XaWR0aHNTcGFjaW5nVGFibGVOdW1XaWR0aHNdCisgICAgICBzZXQgY3VycmVudF93aWR0aCAwCisgICAgICBzZXQgcHJsX3J1bGUgLTEKKyAgICAgIGZvciB7c2V0IHJ1bGUgMH0geyRydWxlIDwgJG51bV93aWR0aHN9IHtpbmNyIHJ1bGV9IHsKKyAgICAgICAgc2V0IHdpZHRoIFskbGF5ZXIgZ2V0VHdvV2lkdGhzU3BhY2luZ1RhYmxlV2lkdGggJHJ1bGVdCisgICAgICAgIGlmIHskd2lkdGggPT0gJGN1cnJlbnRfd2lkdGggJiYgJHBybF9ydWxlICE9IC0xfSB7CisgICAgICAgICAgY29udGludWUKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBzZXQgY3VycmVudF93aWR0aCAkd2lkdGgKKyAgICAgICAgICBpZiB7WyRsYXllciBnZXRUd29XaWR0aHNTcGFjaW5nVGFibGVIYXNQUkwgJHJ1bGVdID09IDB9IHsKKyAgICAgICAgICAgIHNldCBub25fcHJsX3J1bGUgJHJ1bGUKKyAgICAgICAgICAgIHNldCBwcmxfcnVsZSAtMQorICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiB7JHBhcmFsbGVsX2xlbmd0aCA+IFskbGF5ZXIgZ2V0VHdvV2lkdGhzU3BhY2luZ1RhYmxlUFJMICRydWxlXX0geworICAgICAgICAgICAgICBzZXQgcHJsX3J1bGUgJHJ1bGUKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgeyRsYXllcl93aWR0aCA8IFskbGF5ZXIgZ2V0VHdvV2lkdGhzU3BhY2luZ1RhYmxlV2lkdGggJHJ1bGVdfSB7CisgICAgICAgICAgaWYgeyRwcmxfcnVsZSA9PSAwfSB7CisgICAgICAgICAgICBzZXQgdXNlX3J1bGUgJG5vbl9wcmxfcnVsZQorICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzZXQgdXNlX3J1bGUgJHBybF9ydWxlCisgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrCisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgc2V0IHNwYWNpbmcgWyRsYXllciBnZXRUd29XaWR0aHNTcGFjaW5nVGFibGVFbnRyeSAkdXNlX3J1bGUgJHVzZV9ydWxlXQorICAgICAgIyBkZWJ1ZyAiVHdvIHdpZHRocyBzcGFjaW5nOiBsYXllcjogJGxheWVyX25hbWUsIHJ1bGU6ICR1c2VfcnVsZSwgc3BhY2luZzogJHNwYWNpbmciCisgICAgfSBlbHNlaWYge1skbGF5ZXIgaGFzVjU1U3BhY2luZ1J1bGVzXX0geworICAgICAgc2V0IGxheWVyX3dpZHRoIFtnZXRfZ3JpZF93aXJlX3dpZHRoICRsYXllcl9uYW1lXQorICAgICAgc2V0IHNwYWNpbmcgWyRsYXllciBmaW5kVjU1U3BhY2luZyAkbGF5ZXJfd2lkdGggJHBhcmFsbGVsX2xlbmd0aF0KKyAgICB9IGVsc2UgeworICAgICAgc2V0IHNwYWNpbmcgWyRsYXllciBnZXRTcGFjaW5nXQorICAgIH0KKyAgICAjIENhbid0IHN0b3JlIHZhbHVlLCBzaW5jZSBpdCBkZXBlbmRzIG9uIGNoYW5uZWwgaGVpZ2h0CisgICAgcmV0dXJuICRzcGFjaW5nCisgIH0KKworICB1dGw6OmVycm9yICJQRE4iIDUyICJVbmFibGUgdG8gZ2V0IGNoYW5uZWxfc3BhY2luZyBzZXR0aW5nIGZvciBsYXllciAkbGF5ZXJfbmFtZS4iCit9CisKK3Byb2MgZ2V0X2dyaWRfd2lyZV93aWR0aCB7bGF5ZXJfbmFtZX0geworICB2YXJpYWJsZSBncmlkX2RhdGEKKyAgdmFyaWFibGUgZGVmYXVsdF9ncmlkX2RhdGEKKyAgdmFyaWFibGUgZGVzaWduX2RhdGEKKworICBpZiB7W2luZm8gZXhpc3RzIGdyaWRfZGF0YV19IHsKKyAgICBpZiB7W2RpY3QgZXhpc3RzICRncmlkX2RhdGEgcmFpbHMgJGxheWVyX25hbWUgd2lkdGhdfSB7CisgICAgICBzZXQgd2lkdGggW2RpY3QgZ2V0ICRncmlkX2RhdGEgcmFpbHMgJGxheWVyX25hbWUgd2lkdGhdCisgICAgICByZXR1cm4gJHdpZHRoCisgICAgfSBlbHNlaWYge1tkaWN0IGV4aXN0cyAkZ3JpZF9kYXRhIHN0cmFwcyAkbGF5ZXJfbmFtZSB3aWR0aF19IHsKKyAgICAgIHNldCB3aWR0aCBbZGljdCBnZXQgJGdyaWRfZGF0YSBzdHJhcHMgJGxheWVyX25hbWUgd2lkdGhdCisgICAgICByZXR1cm4gJHdpZHRoCisgICAgfSBlbHNlaWYge1tkaWN0IGV4aXN0cyAkZ3JpZF9kYXRhIHN0cmFwcyAkbGF5ZXJfbmFtZV0gJiYgW2RpY3QgZXhpc3RzICRncmlkX2RhdGEgdGVtcGxhdGUgbmFtZXNdfSB7CisgICAgICBzZXQgdGVtcGxhdGVfbmFtZSBbbGluZGV4IFtkaWN0IGdldCAkZ3JpZF9kYXRhIHRlbXBsYXRlIG5hbWVzXSAwXQorICAgICAgc2V0IHdpZHRoIFtkaWN0IGdldCAkZ3JpZF9kYXRhIHN0cmFwcyAkbGF5ZXJfbmFtZSAkdGVtcGxhdGVfbmFtZSB3aWR0aF0KKyAgICAgIHJldHVybiAkd2lkdGgKKyAgICB9IGVsc2VpZiB7W2RpY3QgZXhpc3RzICRncmlkX2RhdGEgY29yZV9yaW5nICRsYXllcl9uYW1lIHdpZHRoXX0geworICAgICAgc2V0IHdpZHRoIFtkaWN0IGdldCAkZ3JpZF9kYXRhIGNvcmVfcmluZyAkbGF5ZXJfbmFtZSB3aWR0aF0KKyAgICAgIHJldHVybiAkd2lkdGgKKyAgICB9CisgIH0KKworICBpZiB7W2luZm8gZXhpc3RzIGRlZmF1bHRfZ3JpZF9kYXRhXX0geworICAgIGlmIHtbZGljdCBleGlzdHMgJGRlZmF1bHRfZ3JpZF9kYXRhIHJhaWxzICRsYXllcl9uYW1lIHdpZHRoXX0geworICAgICAgc2V0IHdpZHRoIFtkaWN0IGdldCAkZGVmYXVsdF9ncmlkX2RhdGEgcmFpbHMgJGxheWVyX25hbWUgd2lkdGhdCisgICAgICByZXR1cm4gJHdpZHRoCisgICAgfSBlbHNlaWYge1tkaWN0IGV4aXN0cyAkZGVmYXVsdF9ncmlkX2RhdGEgc3RyYXBzICRsYXllcl9uYW1lIHdpZHRoXX0geworICAgICAgc2V0IHdpZHRoIFtkaWN0IGdldCAkZGVmYXVsdF9ncmlkX2RhdGEgc3RyYXBzICRsYXllcl9uYW1lIHdpZHRoXQorICAgICAgcmV0dXJuICR3aWR0aAorICAgIH0gZWxzZWlmIHtbZGljdCBleGlzdHMgJGRlZmF1bHRfZ3JpZF9kYXRhIHN0cmFwcyAkbGF5ZXJfbmFtZV0gJiYgW2RpY3QgZXhpc3RzICRkZWZhdWx0X2dyaWRfZGF0YSB0ZW1wbGF0ZSBuYW1lc119IHsKKyAgICAgIHNldCB0ZW1wbGF0ZV9uYW1lIFtsaW5kZXggW2RpY3QgZ2V0ICRkZWZhdWx0X2dyaWRfZGF0YSB0ZW1wbGF0ZSBuYW1lc10gMF0KKyAgICAgIHNldCB3aWR0aCBbZGljdCBnZXQgJGRlZmF1bHRfZ3JpZF9kYXRhIHN0cmFwcyAkbGF5ZXJfbmFtZSAkdGVtcGxhdGVfbmFtZSB3aWR0aF0KKyAgICAgIHJldHVybiAkd2lkdGgKKyAgICB9CisgIH0KKyAgdXRsOjplcnJvciAiUEROIiA0NCAiTm8gd2lkdGggaW5mb3JtYXRpb24gZm91bmQgZm9yICRsYXllcl9uYW1lLiIKK30KKworcHJvYyBnZXRfZ3JpZF93aXJlX3BpdGNoIHtsYXllcl9uYW1lfSB7CisgIHZhcmlhYmxlIGdyaWRfZGF0YQorICB2YXJpYWJsZSBkZWZhdWx0X2dyaWRfZGF0YQorICB2YXJpYWJsZSBkZXNpZ25fZGF0YQorCisgIGlmIHtbZGljdCBleGlzdHMgJGdyaWRfZGF0YSByYWlscyAkbGF5ZXJfbmFtZSBwaXRjaF19IHsKKyAgICBzZXQgcGl0Y2ggW2RpY3QgZ2V0ICRncmlkX2RhdGEgcmFpbHMgJGxheWVyX25hbWUgcGl0Y2hdCisgIH0gZWxzZWlmIHtbZGljdCBleGlzdHMgJGdyaWRfZGF0YSBzdHJhcHMgJGxheWVyX25hbWUgcGl0Y2hdfSB7CisgICAgc2V0IHBpdGNoIFtkaWN0IGdldCAkZ3JpZF9kYXRhIHN0cmFwcyAkbGF5ZXJfbmFtZSBwaXRjaF0KKyAgfSBlbHNlaWYge1tkaWN0IGV4aXN0cyAkZ3JpZF9kYXRhIHN0cmFwcyAkbGF5ZXJfbmFtZV0gJiYgW2RpY3QgZXhpc3RzICRncmlkX2RhdGEgdGVtcGxhdGUgbmFtZXNdfSB7CisgICAgc2V0IHRlbXBsYXRlX25hbWUgW2xpbmRleCBbZGljdCBnZXQgJGdyaWRfZGF0YSB0ZW1wbGF0ZSBuYW1lc10gMF0KKyAgICBzZXQgcGl0Y2ggW2RpY3QgZ2V0ICRncmlkX2RhdGEgc3RyYXBzICRsYXllcl9uYW1lICR0ZW1wbGF0ZV9uYW1lIHBpdGNoXQorICB9IGVsc2VpZiB7W2RpY3QgZXhpc3RzICRkZWZhdWx0X2dyaWRfZGF0YSBzdHJhcHMgJGxheWVyX25hbWUgcGl0Y2hdfSB7CisgICAgc2V0IHBpdGNoIFtkaWN0IGdldCAkZGVmYXVsdF9ncmlkX2RhdGEgc3RyYXBzICRsYXllcl9uYW1lIHBpdGNoXQorICB9IGVsc2VpZiB7W2RpY3QgZXhpc3RzICRkZWZhdWx0X2dyaWRfZGF0YSBzdHJhcHMgJGxheWVyX25hbWVdICYmIFtkaWN0IGV4aXN0cyAkZGVmYXVsdF9ncmlkX2RhdGEgdGVtcGxhdGUgbmFtZXNdfSB7CisgICAgc2V0IHRlbXBsYXRlX25hbWUgW2xpbmRleCBbZGljdCBnZXQgJGRlZmF1bHRfZ3JpZF9kYXRhIHRlbXBsYXRlIG5hbWVzXSAwXQorICAgIHNldCBwaXRjaCBbZGljdCBnZXQgJGRlZmF1bHRfZ3JpZF9kYXRhIHN0cmFwcyAkbGF5ZXJfbmFtZSAkdGVtcGxhdGVfbmFtZSBwaXRjaF0KKyAgfSBlbHNlIHsKKyAgICB1dGw6OmVycm9yICJQRE4iIDQ1ICJObyBwaXRjaCBpbmZvcm1hdGlvbiBmb3VuZCBmb3IgJGxheWVyX25hbWUuIgorICB9CisKKyAgcmV0dXJuICRwaXRjaAorfQorCisjIyBQcm9jIHRvIGdlbmVyYXRlIHZpYSBsb2NhdGlvbnMsIGJvdGggZm9yIGEgbm9ybWFsIHZpYSBhbmQgc3RhY2tlZCB2aWEKK3Byb2MgZ2VuZXJhdGVfdmlhX3N0YWNrcyB7bDEgbDIgdGFnIGNvbm5lY3Rpb259IHsKKyAgdmFyaWFibGUgbG9naWNhbF92aWFydWxlcworICB2YXJpYWJsZSBzdHJpcGVfbG9jcworICB2YXJpYWJsZSBkZWZfdW5pdHMKKyAgdmFyaWFibGUgZ3JpZF9kYXRhCisKKyAgc2V0IGFyZWEgW2RpY3QgZ2V0ICRncmlkX2RhdGEgYXJlYV0KKyAgIyBkZWJ1ZyAiRnJvbSAkbDEgdG8gJGwyIgorCisgIGlmIHtbZGljdCBleGlzdHMgJGdyaWRfZGF0YSBjb3JlX3JpbmdfYXJlYSBjb21iaW5lZF19IHsKKyAgICBzZXQgZ3JpZF9hcmVhIFtkaWN0IGdldCAkZ3JpZF9kYXRhIGNvcmVfcmluZ19hcmVhIGNvbWJpbmVkXQorICAgIHNldCBmYWN0b3IgW2V4cHIgbWF4KFtsaW5kZXggJGFyZWEgMl0gLSBbbGluZGV4ICRhcmVhIDBdLCBbbGluZGV4ICRhcmVhIDNdIC0gW2xpbmRleCAkYXJlYSAxXSkgKiAyXQorICAgIHNldCBncmlkX2FyZWEgW29kYjo6c2hyaW5rU2V0IFtvZGI6OmJsb2F0U2V0ICRncmlkX2FyZWEgJGZhY3Rvcl0gJGZhY3Rvcl0KKyAgICAjIGRlYnVnICJPbGQgYXJlYSAoJGFyZWEpIgorICAgIHNldCBiYm94IFtsaW5kZXggW29kYjo6Z2V0UmVjdGFuZ2xlcyAkZ3JpZF9hcmVhXSAwXQorICAgIHNldCBhcmVhIFtsaXN0IHsqfVskYmJveCBsbF0geyp9WyRiYm94IHVyXV0KKyAgICAjIGRlYnVnICJSZWNhbGN1bGF0ZWQgYXJlYSB0byBiZSAoJGFyZWEpIgorICB9CisKKyAgI3RoaXMgdmFyaWFibGUgY29udGFpbnMgbG9jYXRpb25zIG9mIGludGVyc2VjdGluZyBwb2ludHMgb2YgdHdvIG9ydGhvZ29uYWwgbWV0YWwgbGF5ZXJzLCBiZXR3ZWVuIHdoaWNoIHZpYSBuZWVkcyB0byBiZSBpbnNlcnRlZAorICAjZm9yIGV2ZXJ5IGludGVyc2VjdGlvbi4gSGVyZSBsMSBhbmQgbDIgYXJlIGxheWVyIG5hbWVzLCBhbmQgaTEgYW5kIGkyIGFuZCB0aGVpciBpbmRpY2VzLCB0YWcgcmVwcmVzZW50cyBkb21haW4gKHBvd2VyIG9yIGdyb3VuZCkKKyAgc2V0IGludGVyc2VjdGlvbnMgIiIKKyAgI2NoZWNrIGlmIGxheWVyIHBhaXIgaXMgb3J0aG9nb25hbCwgY2FzZSAxCisgIHNldCBsYXllcjEgJGwxCisgIHJlZ2V4cCB7KC4qKV9QSU5fKGhvcnx2ZXIpfSAkbDEgLSBsYXllcjEgZGlyZWN0aW9uCisKKyAgc2V0IGxheWVyMiAkbDIKKworICBzZXQgaWdub3JlX2NvdW50IDAKKyAgaWYge1thcnJheSBuYW1lcyBzdHJpcGVfbG9jcyAiJGwxLCR0YWciXSA9PSAiIn0geworICAgIHV0bDo6d2FybiAiUEROIiAyICJObyBzaGFwZXMgb24gbGF5ZXIgJGwxIGZvciAkdGFnLiIKKyAgICByZXR1cm4ge30KKyAgfQorICBpZiB7W2FycmF5IG5hbWVzIHN0cmlwZV9sb2NzICIkbDIsJHRhZyJdID09ICIifSB7CisgICAgdXRsOjp3YXJuICJQRE4iIDMgIk5vIHNoYXBlcyBvbiBsYXllciAkbDIgZm9yICR0YWcuIgorICAgIHJldHVybiB7fQorICB9CisgIHNldCBpbnRlcnNlY3Rpb24gW29kYjo6YW5kU2V0IFtvZGI6OmFuZFNldCAkc3RyaXBlX2xvY3MoJGwxLCR0YWcpICRzdHJpcGVfbG9jcygkbDIsJHRhZyldIFtvZGI6Om5ld1NldEZyb21SZWN0IHsqfSRhcmVhXV0KKworICAjIGRlYnVnICJEZXRlY3RlZCBbbGxlbmd0aCBbOjpvZGI6OmdldFBvbHlnb25zICRpbnRlcnNlY3Rpb25dXSBpbnRlcnNlY3Rpb25zIG9mICRsMSBhbmQgJGwyIgorCisgIGZvcmVhY2ggc2hhcGUgWzo6b2RiOjpnZXRQb2x5Z29ucyAkaW50ZXJzZWN0aW9uXSB7CisgICAgc2V0IHBvaW50cyBbOjpvZGI6OmdldFBvaW50cyAkc2hhcGVdCisgICAgaWYge1tsbGVuZ3RoICRwb2ludHNdICE9IDR9IHsKKyAgICAgICAgdmFyaWFibGUgZGVmX3VuaXRzCisgICAgICAgIHV0bDo6d2FybiAiUEROIiA0ICJVbmV4cGVjdGVkIG51bWJlciBvZiBwb2ludHMgaW4gY29ubmVjdGlvbiBzaGFwZSAoJGwxLCRsMiAkdGFnIFtsbGVuZ3RoICRwb2ludHNdKS4iCisgICAgICAgIHNldCBzdHIgIiAgICAiCisgICAgICAgIGZvcmVhY2ggcG9pbnQgJHBvaW50cyB7c2V0IHN0ciAiJHN0ciAoW2V4cHIgMS4wICogWyRwb2ludCBnZXRYXSAvICRkZWZfdW5pdHMgXSBbZXhwciAxLjAgKiBbJHBvaW50IGdldFldIC8gJGRlZl91bml0c10pICJ9CisgICAgICAgIHV0bDo6d2FybiAiUEROIiA1ICRzdHIKKyAgICAgICAgY29udGludWUKKyAgICB9CisgICAgc2V0IHhNaW4gW2V4cHIgbWluKFtbbGluZGV4ICRwb2ludHMgMF0gZ2V0WF0sIFtbbGluZGV4ICRwb2ludHMgMV0gZ2V0WF0sIFtbbGluZGV4ICRwb2ludHMgMl0gZ2V0WF0sIFtbbGluZGV4ICRwb2ludHMgM10gZ2V0WF0pXQorICAgIHNldCB4TWF4IFtleHByIG1heChbW2xpbmRleCAkcG9pbnRzIDBdIGdldFhdLCBbW2xpbmRleCAkcG9pbnRzIDFdIGdldFhdLCBbW2xpbmRleCAkcG9pbnRzIDJdIGdldFhdLCBbW2xpbmRleCAkcG9pbnRzIDNdIGdldFhdKV0KKyAgICBzZXQgeU1pbiBbZXhwciBtaW4oW1tsaW5kZXggJHBvaW50cyAwXSBnZXRZXSwgW1tsaW5kZXggJHBvaW50cyAxXSBnZXRZXSwgW1tsaW5kZXggJHBvaW50cyAyXSBnZXRZXSwgW1tsaW5kZXggJHBvaW50cyAzXSBnZXRZXSldCisgICAgc2V0IHlNYXggW2V4cHIgbWF4KFtbbGluZGV4ICRwb2ludHMgMF0gZ2V0WV0sIFtbbGluZGV4ICRwb2ludHMgMV0gZ2V0WV0sIFtbbGluZGV4ICRwb2ludHMgMl0gZ2V0WV0sIFtbbGluZGV4ICRwb2ludHMgM10gZ2V0WV0pXQorCisgICAgc2V0IHdpZHRoIFtleHByICR4TWF4IC0gJHhNaW5dCisgICAgc2V0IGhlaWdodCBbZXhwciAkeU1heCAtICR5TWluXQorCisgICAgIyBFbnN1cmUgdGhhdCB0aGUgaW50ZXJzZWN0aW9ucyBhcmUgbm90IHBhcnRpYWwKKyAgICBpZiB7IVtyZWdleHAgeyguKilfUElOXyhob3J8dmVyKX0gJGwxXX0geworICAgICAgaWYge1tnZXRfZGlyICRsYXllcjFdID09ICJob3IifSB7CisgICAgICAgIGlmIHskaGVpZ2h0IDwgW2dldF9ncmlkX3dpcmVfd2lkdGggJGxheWVyMV19IHsKKyAgICAgICAgICAjIElmIHRoZSBpbnRlcnNlY3Rpb24gZG9lc250IGNvdmVyIHRoZSB3aG9sZSB3aWR0aCBvZiB0aGUgYm90dG9tIGxldmVsIHdpcmUsIHRoZW4gaWdub3JlCisgICAgICAgICAgdXRsOjp3YXJuICJQRE4iIDQwICJObyB2aWEgYWRkZWQgYXQgKFtleHByIDEuMCAqICR4TWluIC8gJGRlZl91bml0c10gW2V4cHIgMS4wICogJHlNaW4gLyAkZGVmX3VuaXRzXSBbZXhwciAxLjAgKiAkeE1heCAvICRkZWZfdW5pdHNdIFtleHByIDEuMCAqICR5TWF4IC8gJGRlZl91bml0c10pIGJlY2F1c2UgdGhlIGZ1bGwgaGVpZ2h0IG9mICRsYXllcjEgKFtleHByIDEuMCAqIFtnZXRfZ3JpZF93aXJlX3dpZHRoICRsYXllcjFdIC8gJGRlZl91bml0c10pIGlzIG5vdCBjb3ZlcmVkIGJ5IHRoZSBvdmVybGFwLiIKKyAgICAgICAgICBjb250aW51ZQorICAgICAgICB9CisgICAgICB9IGVsc2UgeworICAgICAgICBpZiB7JHdpZHRoIDwgW2dldF9ncmlkX3dpcmVfd2lkdGggJGxheWVyMV19IHsKKyAgICAgICAgICAjIElmIHRoZSBpbnRlcnNlY3Rpb24gZG9lc250IGNvdmVyIHRoZSB3aG9sZSB3aWR0aCBvZiB0aGUgYm90dG9tIGxldmVsIHdpcmUsIHRoZW4gaWdub3JlCisgICAgICAgICAgdXRsOjp3YXJuICJQRE4iIDQxICJObyB2aWEgYWRkZWQgYXQgKFtleHByIDEuMCAqICR4TWluIC8gJGRlZl91bml0c10gW2V4cHIgMS4wICogJHlNaW4gLyAkZGVmX3VuaXRzXSBbZXhwciAxLjAgKiAkeE1heCAvICRkZWZfdW5pdHNdIFtleHByIDEuMCAqICR5TWF4IC8gJGRlZl91bml0c10pIGJlY2F1c2UgdGhlIGZ1bGwgd2lkdGggb2YgJGxheWVyMSAoW2V4cHIgMS4wICogW2dldF9ncmlkX3dpcmVfd2lkdGggJGxheWVyMV0gLyAkZGVmX3VuaXRzXSkgaXMgbm90IGNvdmVyZWQgYnkgdGhlIG92ZXJsYXAuIgorICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgICAgaWYge1tnZXRfZGlyICRsYXllcjJdID09ICJob3IifSB7CisgICAgICBpZiB7JGhlaWdodCA8IFtnZXRfZ3JpZF93aXJlX3dpZHRoICRsYXllcjJdfSB7CisgICAgICAgICMgSWYgdGhlIGludGVyc2VjdGlvbiBkb2VzbnQgY292ZXIgdGhlIHdob2xlIHdpZHRoIG9mIHRoZSB0b3AgbGV2ZWwgd2lyZSwgdGhlbiBpZ25vcmUKKyAgICAgICAgdXRsOjp3YXJuICJQRE4iIDQyICJObyB2aWEgYWRkZWQgYXQgKFtleHByIDEuMCAqICR4TWluIC8gJGRlZl91bml0c10gW2V4cHIgMS4wICogJHlNaW4gLyAkZGVmX3VuaXRzXSBbZXhwciAxLjAgKiAkeE1heCAvICRkZWZfdW5pdHNdIFtleHByIDEuMCAqICR5TWF4IC8gJGRlZl91bml0c10pIGJlY2F1c2UgdGhlIGZ1bGwgaGVpZ2h0IG9mICRsYXllcjIgKFtleHByIDEuMCAqIFtnZXRfZ3JpZF93aXJlX3dpZHRoICRsYXllcjJdIC8gJGRlZl91bml0c10pIGlzIG5vdCBjb3ZlcmVkIGJ5IHRoZSBvdmVybGFwLiIKKyAgICAgICAgY29udGludWUKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgaWYgeyR3aWR0aCA8IFtnZXRfZ3JpZF93aXJlX3dpZHRoICRsYXllcjJdfSB7CisgICAgICAgICMgSWYgdGhlIGludGVyc2VjdGlvbiBkb2VzbnQgY292ZXIgdGhlIHdob2xlIHdpZHRoIG9mIHRoZSB0b3AgbGV2ZWwgd2lyZSwgdGhlbiBpZ25vcmUKKyAgICAgICAgdXRsOjp3YXJuICJQRE4iIDQzICJObyB2aWEgYWRkZWQgYXQgKFtleHByIDEuMCAqICR4TWluIC8gJGRlZl91bml0c10gW2V4cHIgMS4wICogJHlNaW4gLyAkZGVmX3VuaXRzXSBbZXhwciAxLjAgKiAkeE1heCAvICRkZWZfdW5pdHNdIFtleHByIDEuMCAqICR5TWF4IC8gJGRlZl91bml0c10pIGJlY2F1c2UgdGhlIGZ1bGwgd2lkdGggb2YgJGxheWVyMiAoW2V4cHIgMS4wICogW2dldF9ncmlkX3dpcmVfd2lkdGggJGxheWVyMl0gLyAkZGVmX3VuaXRzXSkgaXMgbm90IGNvdmVyZWQgYnkgdGhlIG92ZXJsYXAuIgorICAgICAgICBjb250aW51ZQorICAgICAgfQorICAgIH0KKworICAgIHNldCBydWxlX25hbWUgJHtsMX0ke2xheWVyMn1fJHt3aWR0aH14JHtoZWlnaHR9CisgICAgaWYgeyFbZGljdCBleGlzdHMgJGxvZ2ljYWxfdmlhcnVsZXMgJHJ1bGVfbmFtZV19IHsKKyAgICAgIGRpY3Qgc2V0IGxvZ2ljYWxfdmlhcnVsZXMgJHJ1bGVfbmFtZSBbbGlzdCBsb3dlciAkbDEgdXBwZXIgJGxheWVyMiB3aWR0aCAkd2lkdGggaGVpZ2h0ICRoZWlnaHRdCisgICAgfQorICAgIGxhcHBlbmQgaW50ZXJzZWN0aW9ucyAicnVsZSAkcnVsZV9uYW1lIHggW2V4cHIgKCR4TWF4ICsgJHhNaW4pIC8gMl0geSBbZXhwciAoJHlNYXggKyAkeU1pbikgLyAyXSIKKyAgfQorCisgICMgZGVidWcgIkFkZGVkIFtsbGVuZ3RoICRpbnRlcnNlY3Rpb25zXSBpbnRlcnNlY3Rpb25zIgorCisgIHJldHVybiBbZ2VuZXJhdGVfdmlhcyAkbDEgJGwyICRpbnRlcnNlY3Rpb25zICRjb25uZWN0aW9uXQorfQorCitwcm9jIGFkZF9zdHJpcGUge2xheWVyIHR5cGUgcG9seWdvbl9zZXR9IHsKKyAgdmFyaWFibGUgc3RyaXBlcworICAjIGRlYnVnICJzdGFydCIKKyAgbGFwcGVuZCBzdHJpcGVzKCRsYXllciwkdHlwZSkgJHBvbHlnb25fc2V0CisgICMgZGVidWcgImVuZCIKK30KKworcHJvYyBtZXJnZV9zdHJpcGVzIHt9IHsKKyAgdmFyaWFibGUgc3RyaXBlcworICB2YXJpYWJsZSBzdHJpcGVfbG9jcworCisgIGZvcmVhY2ggc3RyaXBlX3NldCBbYXJyYXkgbmFtZXMgc3RyaXBlc10geworICAgICMgZGVidWcgIiRzdHJpcGVfc2V0IFtsbGVuZ3RoICRzdHJpcGVzKCRzdHJpcGVfc2V0KV0iCisgICAgaWYge1tsbGVuZ3RoICRzdHJpcGVzKCRzdHJpcGVfc2V0KV0gPiAwfSB7CisgICAgICBzZXQgbWVyZ2VkX3N0cmlwZXMgW3NoYXBlc190b19wb2x5Z29uU2V0ICRzdHJpcGVzKCRzdHJpcGVfc2V0KV0KKyAgICAgIGlmIHtbYXJyYXkgbmFtZXMgc3RyaXBlX2xvY3MgJHN0cmlwZV9zZXRdICE9ICIifSB7CisgICAgICAgICMgZGVidWcgIiRzdHJpcGVfbG9jcygkc3RyaXBlX3NldCkiCisgICAgICAgIHNldCBzdHJpcGVfbG9jcygkc3RyaXBlX3NldCkgW29kYjo6b3JTZXQgJHN0cmlwZV9sb2NzKCRzdHJpcGVfc2V0KSAkbWVyZ2VkX3N0cmlwZXNdCisgICAgICB9IGVsc2UgeworICAgICAgICBzZXQgc3RyaXBlX2xvY3MoJHN0cmlwZV9zZXQpICRtZXJnZWRfc3RyaXBlcworICAgICAgfQorICAgIH0KKyAgICBzZXQgc3RyaXBlcygkc3RyaXBlX3NldCkge30KKyAgfQorfQorCitwcm9jIGdldF9jb3JlX3JpbmdfdmVydGljYWxfbGF5ZXJfbmFtZSB7fSB7CisgIHZhcmlhYmxlIGdyaWRfZGF0YQorCisgIGlmIHshW2RpY3QgZXhpc3RzICRncmlkX2RhdGEgY29yZV9yaW5nXX0geworICAgIHJldHVybiAiIgorICB9CisKKyAgZm9yZWFjaCBsYXllcl9uYW1lIFtkaWN0IGtleXMgW2RpY3QgZ2V0ICRncmlkX2RhdGEgY29yZV9yaW5nXV0geworICAgIGlmIHtbZ2V0X2RpciAkbGF5ZXJfbmFtZV0gPT0gInZlciJ9IHsKKyAgICAgIHJldHVybiAkbGF5ZXJfbmFtZQorICAgIH0KKyAgfQorCisgIHJldHVybiAiIgorfQorCitwcm9jIGlzX2V4dGVuZF90b19jb3JlX3Jpbmcge2xheWVyX25hbWV9IHsKKyAgdmFyaWFibGUgZ3JpZF9kYXRhCisKKyAgaWYgeyFbZGljdCBleGlzdHMgJGdyaWRfZGF0YSByYWlscyAkbGF5ZXJfbmFtZSBleHRlbmRfdG9fY29yZV9yaW5nXX0geworICAgIHJldHVybiAwCisgIH0KKyAgaWYgeyFbZGljdCBnZXQgJGdyaWRfZGF0YSByYWlscyAkbGF5ZXJfbmFtZSBleHRlbmRfdG9fY29yZV9yaW5nXX0geworICAgIHJldHVybiAwCisgIH0KKyAgaWYge1tnZXRfY29yZV9yaW5nX3ZlcnRpY2FsX2xheWVyX25hbWVdID09ICIifSB7CisgICAgcmV0dXJuIDAKKyAgfQorICByZXR1cm4gMQorfQorCisjIHByb2MgdG8gZ2VuZXJhdGUgZm9sbG93IHBpbiBsYXllcnMgb3Igc3RhbmRhcmQgY2VsbCByYWlscworcHJvYyBnZW5lcmF0ZV9sb3dlcl9tZXRhbF9mb2xsb3dwaW5fcmFpbHMge30geworICB2YXJpYWJsZSBibG9jaworICB2YXJpYWJsZSBncmlkX2RhdGEKKyAgdmFyaWFibGUgZGVzaWduX2RhdGEKKworICBzZXQgc3RkY2VsbF9hcmVhIFtnZXRfZXh0ZW50IFtnZXRfc3RkY2VsbF9hcmVhXV0KKyAgc2V0IHN0ZGNlbGxfbWluX3ggW2xpbmRleCAkc3RkY2VsbF9hcmVhIDBdCisgIHNldCBzdGRjZWxsX21heF94IFtsaW5kZXggJHN0ZGNlbGxfYXJlYSAyXQorCisgIGlmIHtbc2V0IHJpbmdfdmVydGljYWxfbGF5ZXIgW2dldF9jb3JlX3JpbmdfdmVydGljYWxfbGF5ZXJfbmFtZV1dICE9ICIifSB7CisgICAgIyBkZWJ1ZyAiUmluZyB2ZXJ0aWNhbCBsYXllcjogJHJpbmdfdmVydGljYWxfbGF5ZXIiCisgICAgIyBkZWJ1ZyAiR3JpZF9kYXRhOiAkZ3JpZF9kYXRhIgorICAgIGlmIHtbZGljdCBleGlzdHMgJGdyaWRfZGF0YSBjb3JlX3JpbmcgJHJpbmdfdmVydGljYWxfbGF5ZXIgcGFkX29mZnNldF19IHsKKyAgICAgIHNldCBwYWRfYXJlYSBbZmluZF9wYWRfb2Zmc2V0X2FyZWFdCisgICAgICBzZXQgb2Zmc2V0IFtleHByIFtkaWN0IGdldCAkZ3JpZF9kYXRhIGNvcmVfcmluZyAkcmluZ192ZXJ0aWNhbF9sYXllciBwYWRfb2Zmc2V0XV0KKyAgICAgIHNldCByaW5nX2FkanVzdG1lbnQgW2V4cHIgJHN0ZGNlbGxfbWluX3ggLSAoW2xpbmRleCAkcGFkX2FyZWEgMF0gKyAkb2Zmc2V0KV0KKyAgICB9CisgICAgaWYge1tkaWN0IGV4aXN0cyAkZ3JpZF9kYXRhIGNvcmVfcmluZyAkcmluZ192ZXJ0aWNhbF9sYXllciBjb3JlX29mZnNldF19IHsKKyAgICAgIHNldCByaW5nX2FkanVzdG1lbnQgW2V4cHIgXAorICAgICAgICBbZGljdCBnZXQgJGdyaWRfZGF0YSBjb3JlX3JpbmcgJHJpbmdfdmVydGljYWxfbGF5ZXIgY29yZV9vZmZzZXRdICsgXAorICAgICAgICBbZGljdCBnZXQgJGdyaWRfZGF0YSBjb3JlX3JpbmcgJHJpbmdfdmVydGljYWxfbGF5ZXIgc3BhY2luZ10gKyBcCisgICAgICAgIDMgKiBbZGljdCBnZXQgJGdyaWRfZGF0YSBjb3JlX3JpbmcgJHJpbmdfdmVydGljYWxfbGF5ZXIgd2lkdGhdIC8gMiBcCisgICAgICBdCisgICAgfQorICB9CisKKyAgZm9yZWFjaCByb3cgWyRibG9jayBnZXRSb3dzXSB7CisgICAgc2V0IG9yaWVudCBbJHJvdyBnZXRPcmllbnRdCisgICAgc2V0IGJveCBbJHJvdyBnZXRCQm94XQorICAgIHN3aXRjaCAtZXhhY3QgJG9yaWVudCB7CisgICAgICBSMCB7CisgICAgICAgIHNldCB2ZGRfeSBbJGJveCB5TWF4XQorICAgICAgICBzZXQgdnNzX3kgWyRib3ggeU1pbl0KKyAgICAgIH0KKyAgICAgIE1YIHsKKyAgICAgICAgc2V0IHZkZF95IFskYm94IHlNaW5dCisgICAgICAgIHNldCB2c3NfeSBbJGJveCB5TWF4XQorICAgICAgfQorICAgICAgZGVmYXVsdCB7CisgICAgICAgIHV0bDo6ZXJyb3IgIlBETiIgMjUgIlVuZXhwZWN0ZWQgcm93IG9yaWVudGF0aW9uICRvcmllbnQgZm9yIHJvdyBbJHJvdyBnZXROYW1lXS4iCisgICAgICB9CisgICAgfQorCisgICAgZm9yZWFjaCBsYXkgW2dldF9yYWlsc19sYXllcnNdIHsKKyAgICAgIHNldCB4TWluIFskYm94IHhNaW5dCisgICAgICBzZXQgeE1heCBbJGJveCB4TWF4XQorICAgICAgaWYge1tpc19leHRlbmRfdG9fY29yZV9yaW5nICRsYXldfSB7CisgICAgICAgICMgZGVidWcgIkV4dGVuZGluZyB0byBjb3JlX3JpbmcgLSBhZGp1c3RtZW50ICRyaW5nX2FkanVzdG1lbnQgKCR4TWluLyR4TWF4KSAoJHN0ZGNlbGxfbWluX3gvJHN0ZGNlbGxfbWF4X3gpIgorICAgICAgICBzZXQgdm9sdGFnZV9kb21haW4gW2dldF92b2x0YWdlX2RvbWFpbiAkeE1pbiBbJGJveCB5TWluXSAkeE1heCBbJGJveCB5TWF4XV0KKyAgICAgICAgaWYgeyR2b2x0YWdlX2RvbWFpbiA9PSBbZGljdCBnZXQgJGRlc2lnbl9kYXRhIGNvcmVfZG9tYWluXX0geworICAgICAgICAgIGlmIHskeE1pbiA9PSAkc3RkY2VsbF9taW5feH0geworICAgICAgICAgICAgc2V0IHhNaW4gW2V4cHIgJHhNaW4gLSAkcmluZ19hZGp1c3RtZW50XQorICAgICAgICAgIH0KKyAgICAgICAgICBpZiB7JHhNYXggPT0gJHN0ZGNlbGxfbWF4X3h9IHsKKyAgICAgICAgICAgIHNldCB4TWF4IFtleHByICR4TWF4ICsgJHJpbmdfYWRqdXN0bWVudF0KKyAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgI0NyZWF0ZSBsb3dlciBtZXRhbCBmb2xsb3dwaW4gcmFpbHMgZm9yIHZvbHRhZ2UgZG9tYWlucyB3aGVyZSB0aGUgc3RhcnRpbmcgcG9zaXRpb25zIGFyZSBub3Qgc3RkY2VsbF9taW5feAorICAgICAgICAgIHNldCBjb3JlX3Bvd2VyIFtnZXRfdm9sdGFnZV9kb21haW5fcG93ZXIgW2RpY3QgZ2V0ICRkZXNpZ25fZGF0YSBjb3JlX2RvbWFpbl1dCisgICAgICAgICAgc2V0IGNvcmVfZ3JvdW5kIFtnZXRfdm9sdGFnZV9kb21haW5fZ3JvdW5kIFtkaWN0IGdldCAkZGVzaWduX2RhdGEgY29yZV9kb21haW5dXQorICAgICAgICAgIHNldCBkb21haW5fcG93ZXIgW2dldF92b2x0YWdlX2RvbWFpbl9wb3dlciAkdm9sdGFnZV9kb21haW5dCisgICAgICAgICAgc2V0IGRvbWFpbl9ncm91bmQgW2dldF92b2x0YWdlX2RvbWFpbl9ncm91bmQgJHZvbHRhZ2VfZG9tYWluXQorCisgICAgICAgICAgc2V0IGZpcnN0X3JlY3QgW2xpbmRleCBbWyRibG9jayBmaW5kUmVnaW9uICR2b2x0YWdlX2RvbWFpbl0gZ2V0Qm91bmRhcmllc10gMF0KKyAgICAgICAgICBzZXQgZG9tYWluX3hNaW4gWyRmaXJzdF9yZWN0IHhNaW5dCisgICAgICAgICAgc2V0IGRvbWFpbl94TWF4IFskZmlyc3RfcmVjdCB4TWF4XQorCisgICAgICAgICAgaWYgeyR4TWluID09ICRkb21haW5feE1pbn0geworICAgICAgICAgICAgc2V0IHhNaW4gW2V4cHIgJHhNaW4gLSAkcmluZ19hZGp1c3RtZW50XQorICAgICAgICAgIH0KKyAgICAgICAgICBpZiB7JHhNYXggPT0gJGRvbWFpbl94TWF4fSB7CisgICAgICAgICAgICBzZXQgeE1heCBbZXhwciAkeE1heCArICRyaW5nX2FkanVzdG1lbnRdCisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgICMgZGVidWcgIkV4dGVuZGVkICB0byBjb3JlX3JpbmcgLSBhZGp1c3RtZW50ICRyaW5nX2FkanVzdG1lbnQgKCR4TWluLyR4TWF4KSIKKyAgICAgIH0KKyAgICAgIHNldCB3aWR0aCBbZGljdCBnZXQgJGdyaWRfZGF0YSByYWlscyAkbGF5IHdpZHRoXQorICAgICAgIyBkZWJ1ZyAiVkREOiAkeE1pbiBbZXhwciAkdmRkX3kgLSAkd2lkdGggLyAyXSAkeE1heCBbZXhwciAkdmRkX3kgKyAkd2lkdGggLyAyXSIKKyAgICAgIHNldCB2ZGRfYm94IFs6Om9kYjo6bmV3U2V0RnJvbVJlY3QgJHhNaW4gW2V4cHIgJHZkZF95IC0gJHdpZHRoIC8gMl0gJHhNYXggW2V4cHIgJHZkZF95ICsgJHdpZHRoIC8gMl1dCisgICAgICBzZXQgdmRkX25hbWUgW2dldF92b2x0YWdlX2RvbWFpbl9wb3dlciBbZ2V0X3ZvbHRhZ2VfZG9tYWluICR4TWluIFtleHByICR2ZGRfeSAtICR3aWR0aCAvIDJdICR4TWF4IFtleHByICR2ZGRfeSArICR3aWR0aCAvIDJdXV0KKyAgICAgIHNldCB2c3NfYm94IFs6Om9kYjo6bmV3U2V0RnJvbVJlY3QgJHhNaW4gW2V4cHIgJHZzc195IC0gJHdpZHRoIC8gMl0gJHhNYXggW2V4cHIgJHZzc195ICsgJHdpZHRoIC8gMl1dCisgICAgICBzZXQgdnNzX25hbWUgW2dldF92b2x0YWdlX2RvbWFpbl9ncm91bmQgW2dldF92b2x0YWdlX2RvbWFpbiAkeE1pbiBbZXhwciAkdnNzX3kgLSAkd2lkdGggLyAyXSAkeE1heCBbZXhwciAkdnNzX3kgKyAkd2lkdGggLyAyXV1dCisgICAgICAjIGdlbmVyYXRlIHBvd2VyX3JhaWxzIHVzaW5nIGZpcnN0IGRvbWFpbl9wb3dlcgorICAgICAgc2V0IGZpcnN0X3Bvd2VyX25hbWUgW2xpbmRleCAkdmRkX25hbWUgMF0KKyAgICAgICMgZGVidWcgIlskYm94IHhNaW5dIFtleHByICR2ZGRfeSAtICR3aWR0aCAvIDJdIFskYm94IHhNYXhdIFtleHByICR2ZGRfeSArICR3aWR0aCAvIDJdIgorICAgICAgaWYgeyRmaXJzdF9wb3dlcl9uYW1lID09IFtnZXRfdm9sdGFnZV9kb21haW5fcG93ZXIgW2RpY3QgZ2V0ICRkZXNpZ25fZGF0YSBjb3JlX2RvbWFpbl1dfSB7CisgICAgICAgIGFkZF9zdHJpcGUgJGxheSAiUE9XRVIiICR2ZGRfYm94CisgICAgICB9IGVsc2UgeworICAgICAgICBhZGRfc3RyaXBlICRsYXkgIlBPV0VSXyRmaXJzdF9wb3dlcl9uYW1lIiAkdmRkX2JveAorICAgICAgfQorICAgICAgaWYgeyR2c3NfbmFtZSA9PSBbZ2V0X3ZvbHRhZ2VfZG9tYWluX2dyb3VuZCBbZGljdCBnZXQgJGRlc2lnbl9kYXRhIGNvcmVfZG9tYWluXV19IHsKKyAgICAgICAgYWRkX3N0cmlwZSAkbGF5ICJHUk9VTkQiICR2c3NfYm94CisgICAgICB9IGVsc2UgeworICAgICAgICBhZGRfc3RyaXBlICRsYXkgIkdST1VORF8kdnNzX25hbWUiICR2c3NfYm94CisgICAgICB9CisgICAgfQorICB9Cit9CisKK3Byb2Mgc3RhcnRzX3dpdGgge2xheX0geworICB2YXJpYWJsZSBncmlkX2RhdGEKKyAgdmFyaWFibGUgc3RyaXBlc19zdGFydF93aXRoCisKKyAgaWYge1tkaWN0IGV4aXN0cyAkZ3JpZF9kYXRhIHN0cmFwcyAkbGF5IHN0YXJ0c193aXRoXX0geworICAgIHNldCBzdGFydHNfd2l0aCBbZGljdCBnZXQgJGdyaWRfZGF0YSBzdHJhcHMgJGxheSBzdGFydHNfd2l0aF0KKyAgfSBlbHNlaWYge1tkaWN0IGV4aXN0cyAkZ3JpZF9kYXRhIHN0YXJ0c193aXRoXX0geworICAgIHNldCBzdGFydHNfd2l0aCBbZGljdCBnZXQgJGdyaWRfZGF0YSBzdGFydHNfd2l0aF0KKyAgfSBlbHNlIHsKKyAgICBzZXQgc3RhcnRzX3dpdGggJHN0cmlwZXNfc3RhcnRfd2l0aAorICB9CisgIHJldHVybiAkc3RhcnRzX3dpdGgKK30KKworIyBwcm9jIGZvciBjcmVhdGluZyBwZG4gbWVzaCBmb3IgdXBwZXIgbWV0YWwgbGF5ZXJzCitwcm9jIGdlbmVyYXRlX3VwcGVyX21ldGFsX21lc2hfc3RyaXBlcyB7dGFnIGxheWVyIGxheWVyX2luZm8gYXJlYX0geworIyBJZiB0aGUgZ3JpZF9kYXRhIGRlZmluZXMgYSBzcGFjaW5nIGZvciB0aGUgbGF5ZXIsIHRoZW46CisjICAgIHBsYWNlIHRoZSBzZWNvbmQgc3RyaXBlIHNwYWNpbmcgKyB3aWR0aCBhd2F5IGZyb20gdGhlIGZpcnN0LAorIyBvdGhlcndpc2U6CisjICAgIHBsYWNlIHRoZSBzZWNvbmQgc3RyaXBlIHBpdGNoIC8gMiBhd2F5IGZyb20gdGhlIGZpcnN0LAorIworICBzZXQgd2lkdGggW2RpY3QgZ2V0ICRsYXllcl9pbmZvIHdpZHRoXQorICBzZXQgc3RhcnRfd2l0aCBbc3RhcnRzX3dpdGggJGxheWVyXQorICAjIGRlYnVnICJTdGFydHMgd2l0aDogJHN0YXJ0X3dpdGgiCisKKyAgaWYge1tnZXRfZGlyICRsYXllcl0gPT0gImhvciJ9IHsKKyAgICBzZXQgb2Zmc2V0IFtleHByIFtsaW5kZXggJGFyZWEgMV0gKyBbZGljdCBnZXQgJGxheWVyX2luZm8gb2Zmc2V0XV0KKyAgICBpZiB7IVtyZWdleHAgIiRzdGFydF93aXRoLioiICR0YWcgbWF0Y2hdfSB7IDsjSWYgbm90IHN0YXJ0aW5nIGZyb20gYm90dG9tIHdpdGggdGhpcyBuZXQsIAorICAgICAgaWYge1tkaWN0IGV4aXN0cyAkbGF5ZXJfaW5mbyBzcGFjaW5nXX0geworICAgICAgICBzZXQgb2Zmc2V0IFtleHByIHskb2Zmc2V0ICsgW2RpY3QgZ2V0ICRsYXllcl9pbmZvIHNwYWNpbmddICsgW2RpY3QgZ2V0ICRsYXllcl9pbmZvIHdpZHRoXX1dCisgICAgICB9IGVsc2UgeworICAgICAgICBzZXQgb2Zmc2V0IFtleHByIHskb2Zmc2V0ICsgKFtkaWN0IGdldCAkbGF5ZXJfaW5mbyBwaXRjaF0gLyAyKX1dCisgICAgICB9CisgICAgfQorICAgIGZvciB7c2V0IHkgJG9mZnNldH0geyR5IDwgW2V4cHIge1tsaW5kZXggJGFyZWEgM10gLSBbZGljdCBnZXQgJGxheWVyX2luZm8gd2lkdGhdfV19IHtzZXQgeSBbZXhwciB7W2RpY3QgZ2V0ICRsYXllcl9pbmZvIHBpdGNoXSArICR5fV19IHsKKyAgICAgIHNldCBib3ggWzo6b2RiOjpuZXdTZXRGcm9tUmVjdCBbbGluZGV4ICRhcmVhIDBdIFtleHByICR5IC0gJHdpZHRoIC8gMl0gW2xpbmRleCAkYXJlYSAyXSBbZXhwciAkeSArICR3aWR0aCAvIDJdXQorICAgICAgYWRkX3N0cmlwZSAkbGF5ZXIgJHRhZyAkYm94CisgICAgfQorICB9IGVsc2VpZiB7W2dldF9kaXIgJGxheWVyXSA9PSAidmVyIn0geworICAgIHNldCBvZmZzZXQgW2V4cHIgW2xpbmRleCAkYXJlYSAwXSArIFtkaWN0IGdldCAkbGF5ZXJfaW5mbyBvZmZzZXRdXQorCisgICAgaWYgeyFbcmVnZXhwICIkc3RhcnRfd2l0aC4qIiAkdGFnIG1hdGNoXX0geyA7I0lmIG5vdCBzdGFydGluZyBmcm9tIGJvdHRvbSB3aXRoIHRoaXMgbmV0LCAKKyAgICAgIGlmIHtbZGljdCBleGlzdHMgJGxheWVyX2luZm8gc3BhY2luZ119IHsKKyAgICAgICAgc2V0IG9mZnNldCBbZXhwciB7JG9mZnNldCArIFtkaWN0IGdldCAkbGF5ZXJfaW5mbyBzcGFjaW5nXSArIFtkaWN0IGdldCAkbGF5ZXJfaW5mbyB3aWR0aF19XQorICAgICAgfSBlbHNlIHsKKyAgICAgICAgc2V0IG9mZnNldCBbZXhwciB7JG9mZnNldCArIChbZGljdCBnZXQgJGxheWVyX2luZm8gcGl0Y2hdIC8gMil9XQorICAgICAgfQorICAgIH0KKyAgICBmb3Ige3NldCB4ICRvZmZzZXR9IHskeCA8IFtleHByIHtbbGluZGV4ICRhcmVhIDJdIC0gW2RpY3QgZ2V0ICRsYXllcl9pbmZvIHdpZHRoXX1dfSB7c2V0IHggW2V4cHIge1tkaWN0IGdldCAkbGF5ZXJfaW5mbyBwaXRjaF0gKyAkeH1dfSB7CisgICAgICBzZXQgYm94IFs6Om9kYjo6bmV3U2V0RnJvbVJlY3QgW2V4cHIgJHggLSAkd2lkdGggLyAyXSBbbGluZGV4ICRhcmVhIDFdIFtleHByICR4ICsgJHdpZHRoIC8gMl0gW2xpbmRleCAkYXJlYSAzXV0KKyAgICAgIGFkZF9zdHJpcGUgJGxheWVyICR0YWcgJGJveAorICAgIH0KKyAgfSBlbHNlIHsKKyAgICB1dGw6OmVycm9yICJQRE4iIDI2ICJJbnZhbGlkIGRpcmVjdGlvbiBcIltnZXRfZGlyICRsYXllcl1cIiBmb3IgbWV0YWwgbGF5ZXIgJHtsYXllcn0uIFNob3VsZCBiZSBlaXRoZXIgXCJob3JcIiBvciBcInZlclwiLiIKKyAgfQorfQorCitwcm9jIGFkanVzdF9hcmVhX2Zvcl9jb3JlX3JpbmdzIHtsYXllciBhcmVhIG51bWJlcn0geworICB2YXJpYWJsZSBncmlkX2RhdGEKKworICAjIFdoZW4gY29yZV9yaW5ncyBvdmVybGFwIHdpdGggdGhlIHN0ZGNlbGwgYXJlYSwgd2UgbmVlZCB0byBibG9jayBvdXQgdGhlIGFyZWEKKyAgIyB3aGVyZSB0aGUgY29yZSByaW5ncyBoYXZlIGJlZW4gcGxhY2VkLgorICBpZiB7W2RpY3QgZXhpc3RzICRncmlkX2RhdGEgY29yZV9yaW5nX2FyZWEgJGxheWVyXX0geworICAgIHNldCBjb3JlX3JpbmdfYXJlYSBbZGljdCBnZXQgJGdyaWRfZGF0YSBjb3JlX3JpbmdfYXJlYSAkbGF5ZXJdCisgICAgc2V0IGdyaWRfYXJlYSBbb2RiOjpuZXdTZXRGcm9tUmVjdCB7Kn0kYXJlYV0KKyAgICBzZXQgZ3JpZF9hcmVhIFtvZGI6OnN1YnRyYWN0U2V0ICRncmlkX2FyZWEgJGNvcmVfcmluZ19hcmVhXQorICAgIHNldCBhcmVhIFtnZXRfZXh0ZW50ICRncmlkX2FyZWFdCisgIH0KKworICAjIENhbGN1bGF0ZSBob3cgZmFyIHRvIGV4dGVuZCB0aGUgZ3JpZCB0byBtZWV0IHdpdGggdGhlIGNvcmUgcmluZ3MKKyAgaWYge1tkaWN0IGV4aXN0cyAkZ3JpZF9kYXRhIGNvcmVfcmluZyAkbGF5ZXIgcGFkX29mZnNldF19IHsKKyAgICBzZXQgcGFkX2FyZWEgW2ZpbmRfcGFkX29mZnNldF9hcmVhXQorICAgIHNldCB3aWR0aCBbZGljdCBnZXQgJGdyaWRfZGF0YSBjb3JlX3JpbmcgJGxheWVyIHdpZHRoXQorICAgIHNldCBvZmZzZXQgW2V4cHIgW2RpY3QgZ2V0ICRncmlkX2RhdGEgY29yZV9yaW5nICRsYXllciBwYWRfb2Zmc2V0XV0KKyAgICBzZXQgc3BhY2luZyBbZGljdCBnZXQgJGdyaWRfZGF0YSBjb3JlX3JpbmcgJGxheWVyIHNwYWNpbmddCisgICAgc2V0IHhNaW4gW2V4cHIgW2xpbmRleCAkcGFkX2FyZWEgMF0gKyAkb2Zmc2V0XQorICAgIHNldCB5TWluIFtleHByIFtsaW5kZXggJHBhZF9hcmVhIDFdICsgJG9mZnNldF0KKyAgICBzZXQgeE1heCBbZXhwciBbbGluZGV4ICRwYWRfYXJlYSAyXSAtICRvZmZzZXRdCisgICAgc2V0IHlNYXggW2V4cHIgW2xpbmRleCAkcGFkX2FyZWEgM10gLSAkb2Zmc2V0XQorICB9IGVsc2VpZiB7W2RpY3QgZXhpc3RzICRncmlkX2RhdGEgY29yZV9yaW5nICRsYXllciBjb3JlX29mZnNldF19IHsKKyAgICBzZXQgb2Zmc2V0IFtkaWN0IGdldCAkZ3JpZF9kYXRhIGNvcmVfcmluZyAkbGF5ZXIgY29yZV9vZmZzZXRdCisgICAgc2V0IHdpZHRoIFtkaWN0IGdldCAkZ3JpZF9kYXRhIGNvcmVfcmluZyAkbGF5ZXIgd2lkdGhdCisgICAgc2V0IHNwYWNpbmcgW2RpY3QgZ2V0ICRncmlkX2RhdGEgY29yZV9yaW5nICRsYXllciBzcGFjaW5nXQorICAgICMgZGVidWcgIkFyZWE6ICRhcmVhIgorICAgICMgZGVidWcgIk9mZnNldDogJG9mZnNldCwgV2lkdGggJHdpZHRoLCBTcGFjaW5nICRzcGFjaW5nIgorCisgICAgIyBUaGUgYXJlYSBmaWd1cmUgaW5jbHVkZXMgYSB5IG9mZnNldCBmb3IgdGhlIHdpZHRoIG9mIHRoZSBzdGRjZWxsIHJhaWwgLSBzbyBuZWVkIHRvIHN1YnRyYWN0IGl0IGhlcmUKKyAgICBzZXQgcmFpbF93aWR0aCBbZ2V0X3JhaWxzX21heF93aWR0aF0KKyAgICAKKyAgICAjIHNldCBleHRlbnNpb24gYXJlYSBhY2NvcmRpbmcgdG8gdGhlIG51bWJlciBvZiBwb3dlciByaW5ncyBvZiB0aGUgdm9sdGFnZSBkb21haW4sIHRoZSBkZWZhdWx0IG51bWJlciBpcyAyIAorICAgIHNldCB4TWluIFtleHByIFtsaW5kZXggJGFyZWEgMF0gLSAkb2Zmc2V0IC0gJHdpZHRoIC0gJHNwYWNpbmcgLSAkd2lkdGggLyAyIC0gKCRudW1iZXIgLSAyKSAqICgkd2lkdGggKyAkc3BhY2luZyldCisgICAgc2V0IHlNaW4gW2V4cHIgW2xpbmRleCAkYXJlYSAxXSAtICRvZmZzZXQgLSAkd2lkdGggLSAkc3BhY2luZyAtICR3aWR0aCAvIDIgKyAkcmFpbF93aWR0aCAvIDIgLSAoJG51bWJlciAtIDIpICogKCR3aWR0aCArICRzcGFjaW5nKV0KKyAgICBzZXQgeE1heCBbZXhwciBbbGluZGV4ICRhcmVhIDJdICsgJG9mZnNldCArICR3aWR0aCArICRzcGFjaW5nICsgJHdpZHRoIC8gMiArICgkbnVtYmVyIC0gMikgKiAoJHdpZHRoICsgJHNwYWNpbmcpXQorICAgIHNldCB5TWF4IFtleHByIFtsaW5kZXggJGFyZWEgM10gKyAkb2Zmc2V0ICsgJHdpZHRoICsgJHNwYWNpbmcgKyAkd2lkdGggLyAyIC0gJHJhaWxfd2lkdGggLyAyICsgKCRudW1iZXIgLSAyKSAqICgkd2lkdGggKyAkc3BhY2luZyldCisgIH0KKyAgaWYge1tnZXRfZGlyICRsYXllcl0gPT0gImhvciJ9IHsKKyAgICBzZXQgZXh0ZW5kZWRfYXJlYSBbbGlzdCAkeE1pbiBbbGluZGV4ICRhcmVhIDFdICR4TWF4IFtsaW5kZXggJGFyZWEgM11dCisgIH0gZWxzZSB7CisgICAgc2V0IGV4dGVuZGVkX2FyZWEgW2xpc3QgW2xpbmRleCAkYXJlYSAwXSAkeU1pbiBbbGluZGV4ICRhcmVhIDJdICR5TWF4XQorICB9CisgIHJldHVybiAkZXh0ZW5kZWRfYXJlYQorfQorCisjIyB0aGlzIGlzIGEgdG9wLWxldmVsIHByb2MgdG8gZ2VuZXJhdGUgUEROIHN0cmlwZXMgYW5kIGluc2VydCB2aWFzIGJldHdlZW4gdGhlc2Ugc3RyaXBlcworcHJvYyBnZW5lcmF0ZV9zdHJpcGVzIHt0YWcgbmV0X25hbWV9IHsKKyAgdmFyaWFibGUgcGxhbl90ZW1wbGF0ZQorICB2YXJpYWJsZSB0ZW1wbGF0ZQorICB2YXJpYWJsZSBncmlkX2RhdGEKKyAgdmFyaWFibGUgYmxvY2sKKyAgdmFyaWFibGUgZGVzaWduX2RhdGEKKyAgdmFyaWFibGUgdm9sdGFnZV9kb21haW5zCisKKyAgIyBkZWJ1ZyAic3RhcnQ6IGdyaWRfbmFtZTogW2RpY3QgZ2V0ICRncmlkX2RhdGEgbmFtZV0iCisgIGlmIHshW2RpY3QgZXhpc3RzICRncmlkX2RhdGEgc3RyYXBzXX0ge3JldHVybn0KKyAgZm9yZWFjaCBsYXkgW2RpY3Qga2V5cyBbZGljdCBnZXQgJGdyaWRfZGF0YSBzdHJhcHNdXSB7CisgICAgIyBkZWJ1ZyAiICAgIExheWVyICRsYXkgLi4uIgorICAgICNVcHBlciBsYXllciBzdHJpcGVzCisgICAgaWYge1tkaWN0IGV4aXN0cyAkZ3JpZF9kYXRhIHN0cmFwcyAkbGF5IHdpZHRoXX0geworICAgICAgc2V0IGFyZWEgW2RpY3QgZ2V0ICRncmlkX2RhdGEgYXJlYV0KKyAgICAgICMgZGVidWcgIkFyZWEgJGFyZWEiCisgICAgICAjIENhbGN1bGF0ZSB0aGUgbnVtZWJyIG9mIHJpbmdzIG9mIGNvcmVfZG9tYWluCisgICAgICBzZXQgcmluZ19udW1iZXIgMiAKKyAgICAgIGlmIHtbZGljdCBleGlzdHMgJGdyaWRfZGF0YSBjb3JlX3JpbmddICYmIFtkaWN0IGV4aXN0cyAkZ3JpZF9kYXRhIGNvcmVfcmluZyAkbGF5XX0geworICAgICAgICBzZXQgYXJlYSBbYWRqdXN0X2FyZWFfZm9yX2NvcmVfcmluZ3MgJGxheSAkYXJlYSAkcmluZ19udW1iZXJdCisgICAgICB9CisgICAgICAjIGRlYnVnICJhcmVhPSRhcmVhIChzcGVjIGFyZWE9W2RpY3QgZ2V0ICRncmlkX2RhdGEgYXJlYV0pIgorICAgICAgIyBDcmVhdGUgc3RyaXBlcyBmb3IgY29yZSBkb21haW4ncyBwd3IvZ25kIG5ldHMKKyAgICAgIAorICAgICAgaWYgeyRuZXRfbmFtZSA9PSBbZ2V0X3ZvbHRhZ2VfZG9tYWluX3Bvd2VyIFtkaWN0IGdldCAkZGVzaWduX2RhdGEgY29yZV9kb21haW5dXSB8fAorICAgICAgICAgICRuZXRfbmFtZSA9PSBbZ2V0X3ZvbHRhZ2VfZG9tYWluX2dyb3VuZCBbZGljdCBnZXQgJGRlc2lnbl9kYXRhIGNvcmVfZG9tYWluXV19IHsKKyAgICAgICAgZ2VuZXJhdGVfdXBwZXJfbWV0YWxfbWVzaF9zdHJpcGVzICR0YWcgJGxheSBbZGljdCBnZXQgJGdyaWRfZGF0YSBzdHJhcHMgJGxheV0gJGFyZWEKKyAgICAgICAgIyBTcGxpdCBjb3JlIGRvbWFpbnMgcHdyL2duZCBuZXRzIHdoZW4gdGhleSBjcm9zcyBvdGhlciB2b2x0YWdlIGRvbWFpbnMgdGhhdCBoYXZlIGRpZmZlcmVudCBwd3IvZ25kIG5ldHMKKyAgICAgICAgdXBkYXRlX21lc2hfc3RyaXBlc193aXRoX3ZvbGF0Z2VfZG9tYWlucyAkdGFnICRsYXkgJG5ldF9uYW1lCisgICAgICB9CisgICAgICAjIENyZWF0ZSBzdHJpcGVzIGZvciBlYWNoIHZvbHRhZ2UgZG9tYWlucworICAgICAgZm9yZWFjaCBkb21haW5fbmFtZSBbZGljdCBrZXlzICR2b2x0YWdlX2RvbWFpbnNdIHsKKyAgICAgICAgaWYgeyRkb21haW5fbmFtZSA9PSBbZGljdCBnZXQgJGRlc2lnbl9kYXRhIGNvcmVfZG9tYWluXX0ge2NvbnRpbnVlfQorICAgICAgICBzZXQgZG9tYWluIFskYmxvY2sgZmluZFJlZ2lvbiAkZG9tYWluX25hbWVdCisgICAgICAgIHNldCByZWN0IFtsaW5kZXggWyRkb21haW4gZ2V0Qm91bmRhcmllc10gMF0KKyAgICAgICAgc2V0IGRvbWFpbl9uYW1lIFskZG9tYWluIGdldE5hbWVdCisgICAgICAgIHNldCBkb21haW5feE1pbiBbJHJlY3QgeE1pbl0KKyAgICAgICAgc2V0IGRvbWFpbl95TWluIFskcmVjdCB5TWluXQorICAgICAgICBzZXQgZG9tYWluX3hNYXggWyRyZWN0IHhNYXhdCisgICAgICAgIHNldCBkb21haW5feU1heCBbJHJlY3QgeU1heF0KKyAgICAgICAgc2V0IHdpZHRoIFtkaWN0IGdldCAkZ3JpZF9kYXRhIGNvcmVfcmluZyAkbGF5IHdpZHRoXQorICAgICAgICBzZXQgc3BhY2luZyBbZGljdCBnZXQgJGdyaWRfZGF0YSBjb3JlX3JpbmcgJGxheSBzcGFjaW5nXQorICAgICAgICBzZXQgcmFpbF93aWR0aCBbZ2V0X3JhaWxzX21heF93aWR0aF0KKyAgICAgICAgIyBEbyBub3QgY3JlYXRlIGR1cGxpY2F0ZSBzdHJpcGVzIGlmIHRoZSB2b2x0YWdlIGRvbWFpbiBoYXMgdGhlIHNhbWUgcHdyL2duZCBuZXRzIGFzIHRoZSBjb3JlIGRvbWFpbgorICAgICAgICBpZiB7KCRuZXRfbmFtZSA9PSBbZ2V0X3ZvbHRhZ2VfZG9tYWluX3Bvd2VyICRkb21haW5fbmFtZV0gJiYgJG5ldF9uYW1lICE9IFtnZXRfdm9sdGFnZV9kb21haW5fcG93ZXIgW2RpY3QgZ2V0ICRkZXNpZ25fZGF0YSBjb3JlX2RvbWFpbl1dKSB8fAorICAgICAgICAgICAgICgkbmV0X25hbWUgPT0gW2dldF92b2x0YWdlX2RvbWFpbl9ncm91bmQgJGRvbWFpbl9uYW1lXSAmJiAkbmV0X25hbWUgIT0gW2dldF92b2x0YWdlX2RvbWFpbl9ncm91bmQgW2RpY3QgZ2V0ICRkZXNpZ25fZGF0YSBjb3JlX2RvbWFpbl1dKX0geworICAgICAgICAgIHNldCBhcmVhIFtsaXN0ICRkb21haW5feE1pbiBbZXhwciAkZG9tYWluX3lNaW4gLSAkcmFpbF93aWR0aCAvIDJdICRkb21haW5feE1heCBbZXhwciAkZG9tYWluX3lNYXggKyAkcmFpbF93aWR0aCAvIDJdXQorICAgICAgICAgIHNldCBhcmVhIFthZGp1c3RfYXJlYV9mb3JfY29yZV9yaW5ncyAkbGF5ICRhcmVhIDJdCisgICAgICAgICAgc2V0IHRhZyAiJHRhZ1xfJG5ldF9uYW1lIgorICAgICAgICAgIGdlbmVyYXRlX3VwcGVyX21ldGFsX21lc2hfc3RyaXBlcyAkdGFnICRsYXkgW2RpY3QgZ2V0ICRncmlkX2RhdGEgc3RyYXBzICRsYXldICRhcmVhCisgICAgICAgIH0KKyAgICAgICAgaWYge1tsc2VhcmNoIC1leGFjdCBbZ2V0X3ZvbHRhZ2VfZG9tYWluX3NlY29uZGFyeV9wb3dlciAkZG9tYWluX25hbWVdICRuZXRfbmFtZV0gPiAtMX0geworICAgICAgICAgICNDYWxjdWxhdGUgdGhlIHJpbmcgbnVtYmVyIG9mIHBvd2VyX2RvbWFpbgorICAgICAgICAgIHNldCByaW5nX251bWJlciBbbHNlYXJjaCAtZXhhY3QgW2dldF92b2x0YWdlX2RvbWFpbl9zZWNvbmRhcnlfcG93ZXIgJGRvbWFpbl9uYW1lXSAkbmV0X25hbWVdCisgICAgICAgICAgc2V0IGFyZWEgW2xpc3QgW2V4cHIgJGRvbWFpbl94TWluICsgJHJpbmdfbnVtYmVyICogKCR3aWR0aCArICRzcGFjaW5nKV0gW2V4cHIgJGRvbWFpbl95TWluIC0gJHJhaWxfd2lkdGggLyAyXSBbZXhwciAkZG9tYWluX3hNYXggKyAkcmluZ19udW1iZXIgKiAoJHdpZHRoICsgJHNwYWNpbmcpXSBbZXhwciAkZG9tYWluX3lNYXggKyAkcmFpbF93aWR0aCAvIDJdXQorICAgICAgICAgIHNldCBhcmVhIFthZGp1c3RfYXJlYV9mb3JfY29yZV9yaW5ncyAkbGF5ICRhcmVhIFtleHByIDMgKyAkcmluZ19udW1iZXJdXQorICAgICAgICAgIHNldCB0YWcgIiR0YWdcXyRuZXRfbmFtZSIKKyAgICAgICAgICBnZW5lcmF0ZV91cHBlcl9tZXRhbF9tZXNoX3N0cmlwZXMgJHRhZyAkbGF5IFtkaWN0IGdldCAkZ3JpZF9kYXRhIHN0cmFwcyAkbGF5XSAkYXJlYQorICAgICAgICB9CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIGZvcmVhY2ggeCBbbHNvcnQgLWludGVnZXIgW2RpY3Qga2V5cyAkcGxhbl90ZW1wbGF0ZV1dIHsKKyAgICAgICAgZm9yZWFjaCB5IFtsc29ydCAtaW50ZWdlciBbZGljdCBrZXlzIFtkaWN0IGdldCAkcGxhbl90ZW1wbGF0ZSAkeF1dXSB7CisgICAgICAgICAgc2V0IHRlbXBsYXRlX25hbWUgW2RpY3QgZ2V0ICRwbGFuX3RlbXBsYXRlICR4ICR5XQorICAgICAgICAgIHNldCBsYXllcl9pbmZvIFtkaWN0IGdldCAkZ3JpZF9kYXRhIHN0cmFwcyAkbGF5ICR0ZW1wbGF0ZV9uYW1lXQorICAgICAgICAgIHNldCBhcmVhIFtsaXN0ICR4ICR5IFtleHByICR4ICsgW2RpY3QgZ2V0ICR0ZW1wbGF0ZSB3aWR0aF1dIFtleHByICR5ICsgW2RpY3QgZ2V0ICR0ZW1wbGF0ZSBoZWlnaHRdXV0KKyAgICAgICAgICBnZW5lcmF0ZV91cHBlcl9tZXRhbF9tZXNoX3N0cmlwZXMgJHRhZyAkbGF5ICRsYXllcl9pbmZvICRhcmVhCisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KK30KKworcHJvYyBjdXRfYmxvY2tlZF9hcmVhcyB7dGFnfSB7CisgIHZhcmlhYmxlIHN0cmlwZV9sb2NzCisgIHZhcmlhYmxlIGdyaWRfZGF0YQorCisgIGlmIHshW2RpY3QgZXhpc3RzICAkZ3JpZF9kYXRhIHN0cmFwc119IHtyZXR1cm59CisKKyAgZm9yZWFjaCBsYXllcl9uYW1lIFtkaWN0IGtleXMgW2RpY3QgZ2V0ICRncmlkX2RhdGEgc3RyYXBzXV0geworICAgIHNldCB3aWR0aCBbZ2V0X2dyaWRfd2lyZV93aWR0aCAkbGF5ZXJfbmFtZV0KKworICAgIHNldCBibG9ja2FnZXMgW2dldF9ibG9ja2FnZXNdCisgICAgaWYge1tkaWN0IGV4aXN0cyAkYmxvY2thZ2VzICRsYXllcl9uYW1lXX0geworICAgICAgc2V0IHN0cmlwZV9sb2NzKCRsYXllcl9uYW1lLCR0YWcpIFs6Om9kYjo6c3VidHJhY3RTZXQgJHN0cmlwZV9sb2NzKCRsYXllcl9uYW1lLCR0YWcpIFtkaWN0IGdldCAkYmxvY2thZ2VzICRsYXllcl9uYW1lXV0KKworICAgICAgIyBUcmltIGFueSBzaGFwZXMgdGhhdCBhcmUgbGVzcyB0aGFuIHRoZSB3aWR0aCBvZiB0aGUgd2lyZQorICAgICAgc2V0IHNpemVfYnkgW2V4cHIgJHdpZHRoIC8gMiAtIDFdCisgICAgICBzZXQgdHJpbW1lZF9zZXQgWzo6b2RiOjpzaHJpbmtTZXQgJHN0cmlwZV9sb2NzKCRsYXllcl9uYW1lLCR0YWcpICRzaXplX2J5XQorICAgICAgc2V0IHN0cmlwZV9sb2NzKCRsYXllcl9uYW1lLCR0YWcpIFs6Om9kYjo6YmxvYXRTZXQgJHRyaW1tZWRfc2V0ICRzaXplX2J5XQorICAgIH0KKyAgfQorfQorCitwcm9jIGdlbmVyYXRlX2dyaWRfdmlhcyB7dGFnIG5ldF9uYW1lfSB7CisgIHZhcmlhYmxlIHZpYXMKKyAgdmFyaWFibGUgZ3JpZF9kYXRhCisgIHZhcmlhYmxlIGRlc2lnbl9kYXRhCisKKyAgaWYgeyRuZXRfbmFtZSAhPSBbZ2V0X3ZvbHRhZ2VfZG9tYWluX3Bvd2VyIFtkaWN0IGdldCAkZGVzaWduX2RhdGEgY29yZV9kb21haW5dXSAmJgorICAgICAgJG5ldF9uYW1lICE9IFtnZXRfdm9sdGFnZV9kb21haW5fZ3JvdW5kIFtkaWN0IGdldCAkZGVzaWduX2RhdGEgY29yZV9kb21haW5dXX0geworICAgIHNldCB0YWcgIiR0YWdcXyRuZXRfbmFtZSIKKyAgfQorCisgICNWaWEgc3RhY2tzCisgICMgZGVidWcgImdyaWRfZGF0YSAkZ3JpZF9kYXRhIgorICBpZiB7W2RpY3QgZXhpc3RzICRncmlkX2RhdGEgY29ubmVjdF19IHsKKyAgICAjIGRlYnVnICJBZGRpbmcgdmlhcyBmb3IgJG5ldF9uYW1lIChbbGxlbmd0aCBbZGljdCBnZXQgJGdyaWRfZGF0YSBjb25uZWN0XV0gY29ubmVjdGlvbnMpLi4uIgorICAgIGZvcmVhY2ggY29ubmVjdGlvbiBbZGljdCBnZXQgJGdyaWRfZGF0YSBjb25uZWN0XSB7CisgICAgICAgIHNldCBsMSBbbGluZGV4ICRjb25uZWN0aW9uIDBdCisgICAgICAgIHNldCBsMiBbbGluZGV4ICRjb25uZWN0aW9uIDFdCisgICAgICAgICMgZGVidWcgIiAgICAkbDEgdG8gJGwyIgorICAgICAgICBzZXQgY29ubmVjdGlvbnMgW2dlbmVyYXRlX3ZpYV9zdGFja3MgJGwxICRsMiAkdGFnICRjb25uZWN0aW9uXQorICAgICAgICBsYXBwZW5kIHZpYXMgW2xpc3QgbmV0X25hbWUgJG5ldF9uYW1lIGNvbm5lY3Rpb25zICRjb25uZWN0aW9uc10KKyAgICB9CisgIH0KKyAgIyBkZWJ1ZyAiRW5kIgorfQorCitwcm9jIGdldF9jb3JlX3JpbmdfY2VudHJlIHt0eXBlIHNpZGUgbGF5ZXJfaW5mb30geworICB2YXJpYWJsZSBncmlkX2RhdGEKKworICBzZXQgc3BhY2luZyBbZGljdCBnZXQgJGxheWVyX2luZm8gc3BhY2luZ10KKyAgc2V0IHdpZHRoIFtkaWN0IGdldCAkbGF5ZXJfaW5mbyB3aWR0aF0KKworICBpZiB7W2RpY3QgZXhpc3RzICRsYXllcl9pbmZvIHBhZF9vZmZzZXRdfSB7CisgICAgc2V0IGFyZWEgW2ZpbmRfcGFkX29mZnNldF9hcmVhXQorICAgIGxhc3NpZ24gJGFyZWEgeE1pbiB5TWluIHhNYXggeU1heAorICAgIHNldCBvZmZzZXQgW2V4cHIgW2RpY3QgZ2V0ICRsYXllcl9pbmZvIHBhZF9vZmZzZXRdICsgJHdpZHRoIC8gMl0KKyAgICAjIGRlYnVnICJhcmVhICAgICAgICAkYXJlYSIKKyAgICAjIGRlYnVnICJwYWRfb2Zmc2V0ICAkb2Zmc2V0IgorICAgICMgZGVidWcgInNwYWNpbmcgICAgICRzcGFjaW5nIgorICAgICMgZGVidWcgIndpZHRoICAgICAgICR3aWR0aCIKKyAgICBzd2l0Y2ggJHR5cGUgeworICAgICAgIkdST1VORCIgeworICAgICAgICBzd2l0Y2ggJHNpZGUgeworICAgICAgICAgICJ0IiB7cmV0dXJuIFtleHByICR5TWF4IC0gJG9mZnNldF19CisgICAgICAgICAgImIiIHtyZXR1cm4gW2V4cHIgJHlNaW4gKyAkb2Zmc2V0XX0KKyAgICAgICAgICAibCIge3JldHVybiBbZXhwciAkeE1pbiArICRvZmZzZXRdfQorICAgICAgICAgICJyIiB7cmV0dXJuIFtleHByICR4TWF4IC0gJG9mZnNldF19CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgICJQT1dFUiIgeworICAgICAgICBzd2l0Y2ggJHNpZGUgeworICAgICAgICAgICJ0IiB7cmV0dXJuIFtleHByICR5TWF4IC0gJG9mZnNldCAtICRzcGFjaW5nIC0gJHdpZHRoXX0KKyAgICAgICAgICAiYiIge3JldHVybiBbZXhwciAkeU1pbiArICRvZmZzZXQgKyAkc3BhY2luZyArICR3aWR0aF19CisgICAgICAgICAgImwiIHtyZXR1cm4gW2V4cHIgJHhNaW4gKyAkb2Zmc2V0ICsgJHNwYWNpbmcgKyAkd2lkdGhdfQorICAgICAgICAgICJyIiB7cmV0dXJuIFtleHByICR4TWF4IC0gJG9mZnNldCAtICRzcGFjaW5nIC0gJHdpZHRoXX0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfSBlbHNlaWYge1tkaWN0IGV4aXN0cyAkbGF5ZXJfaW5mbyBjb3JlX29mZnNldF19IHsKKyAgICBzZXQgYXJlYSBbZmluZF9jb3JlX2FyZWFdCisgICAgc2V0IHhNaW4gW2xpbmRleCAkYXJlYSAwXQorICAgIHNldCB5TWluIFtsaW5kZXggJGFyZWEgMV0KKyAgICBzZXQgeE1heCBbbGluZGV4ICRhcmVhIDJdCisgICAgc2V0IHlNYXggW2xpbmRleCAkYXJlYSAzXQorCisgICAgc2V0IG9mZnNldCBbZGljdCBnZXQgJGxheWVyX2luZm8gY29yZV9vZmZzZXRdCisgICAgIyBkZWJ1ZyAiYXJlYSAgICAgICAgJGFyZWEiCisgICAgIyBkZWJ1ZyAiY29yZV9vZmZzZXQgJG9mZnNldCIKKyAgICAjIGRlYnVnICJzcGFjaW5nICAgICAkc3BhY2luZyIKKyAgICAjIGRlYnVnICJ3aWR0aCAgICAgICAkd2lkdGgiCisgICAgc3dpdGNoICR0eXBlIHsKKyAgICAgICJQT1dFUiIgeworICAgICAgICBzd2l0Y2ggJHNpZGUgeworICAgICAgICAgICJ0IiB7cmV0dXJuIFtleHByICR5TWF4ICsgJG9mZnNldF19CisgICAgICAgICAgImIiIHtyZXR1cm4gW2V4cHIgJHlNaW4gLSAkb2Zmc2V0XX0KKyAgICAgICAgICAibCIge3JldHVybiBbZXhwciAkeE1pbiAtICRvZmZzZXRdfQorICAgICAgICAgICJyIiB7cmV0dXJuIFtleHByICR4TWF4ICsgJG9mZnNldF19CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgICJHUk9VTkQiIHsKKyAgICAgICAgc3dpdGNoICRzaWRlIHsKKyAgICAgICAgICAidCIge3JldHVybiBbZXhwciAkeU1heCArICRvZmZzZXQgKyAkc3BhY2luZyArICR3aWR0aF19CisgICAgICAgICAgImIiIHtyZXR1cm4gW2V4cHIgJHlNaW4gLSAkb2Zmc2V0IC0gJHNwYWNpbmcgLSAkd2lkdGhdfQorICAgICAgICAgICJsIiB7cmV0dXJuIFtleHByICR4TWluIC0gJG9mZnNldCAtICRzcGFjaW5nIC0gJHdpZHRoXX0KKyAgICAgICAgICAiciIge3JldHVybiBbZXhwciAkeE1heCArICRvZmZzZXQgKyAkc3BhY2luZyArICR3aWR0aF19CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KK30KKworcHJvYyByZWFsX3ZhbHVlIHt2YWx1ZX0geworICB2YXJpYWJsZSBkZWZfdW5pdHMKKworICByZXR1cm4gW2V4cHIgJHZhbHVlICogMS4wIC8gJGRlZl91bml0c10KK30KKworcHJvYyBmaW5kX3BhZF9vZmZzZXRfYXJlYSB7fSB7CisgIHZhcmlhYmxlIGJsb2NrCisgIHZhcmlhYmxlIGdyaWRfZGF0YQorICB2YXJpYWJsZSBkZXNpZ25fZGF0YQorCisgIGlmIHshKFtkaWN0IGV4aXN0cyAkZ3JpZF9kYXRhIHB3cl9wYWRzXSAmJiBbZGljdCBleGlzdHMgJGdyaWRfZGF0YSBnbmRfcGFkc10pfSB7CisgICAgdXRsOjplcnJvciAiUEROIiA0OCAiTmVlZCB0byBkZWZpbmUgcHdyX3BhZHMgYW5kIGduZF9wYWRzIGluIGNvbmZpZyBmaWxlIHRvIHVzZSBwYWRfb2Zmc2V0IG9wdGlvbi4iCisgIH0KKworICBpZiB7IVtkaWN0IGV4aXN0cyAkZGVzaWduX2RhdGEgY29uZmlnIHBhZF9vZmZzZXRfYXJlYV19IHsKKyAgICBzZXQgcGFkX25hbWVzIHt9CisgICAgZGljdCBmb3Ige3Bpbl9uYW1lIHBhZHN9IFtkaWN0IGdldCAkZ3JpZF9kYXRhIHB3cl9wYWRzXSB7CisgICAgICBzZXQgcGFkX25hbWVzIFtjb25jYXQgJHBhZF9uYW1lcyAkcGFkc10KKyAgICB9CisgICAgZGljdCBmb3Ige3Bpbl9uYW1lIHBhZHN9IFtkaWN0IGdldCAkZ3JpZF9kYXRhIGduZF9wYWRzXSB7CisgICAgICBzZXQgcGFkX25hbWVzIFtjb25jYXQgJHBhZF9uYW1lcyAkcGFkc10KKyAgICB9CisgICAgc2V0IHBhZF9uYW1lcyBbbHNvcnQgLXVuaXF1ZSAkcGFkX25hbWVzXQorICAgIHNldCBkaWVfYXJlYSBbZGljdCBnZXQgJGRlc2lnbl9kYXRhIGNvbmZpZyBkaWVfYXJlYV0KKyAgICBzZXQgeE1pbiBbbGluZGV4ICRkaWVfYXJlYSAwXQorICAgIHNldCB5TWluIFtsaW5kZXggJGRpZV9hcmVhIDFdCisgICAgc2V0IHhNYXggW2xpbmRleCAkZGllX2FyZWEgMl0KKyAgICBzZXQgeU1heCBbbGluZGV4ICRkaWVfYXJlYSAzXQorCisgICAgIyBkZWJ1ZyAicGFkX25hbWVzOiAkcGFkX25hbWVzIgorICAgIHNldCBmb3VuZF9iIDAKKyAgICBzZXQgZm91bmRfciAwCisgICAgc2V0IGZvdW5kX3QgMAorICAgIHNldCBmb3VuZF9sIDAKKyAgICBmb3JlYWNoIGluc3QgWyRibG9jayBnZXRJbnN0c10geworICAgICAgaWYge1tsc2VhcmNoICRwYWRfbmFtZXMgW1skaW5zdCBnZXRNYXN0ZXJdIGdldE5hbWVdXSA+IC0xfSB7CisgICAgICAgICMgZGVidWcgImluc3RfbWFzdGVyOiBbWyRpbnN0IGdldE1hc3Rlcl0gZ2V0TmFtZV0iCisgICAgICAgIHNldCBxdWFkcmFudCBbZ2V0X2Rlc2lnbl9xdWFkcmFudCB7Kn1bJGluc3QgZ2V0T3JpZ2luXV0KKyAgICAgICAgc3dpdGNoICRxdWFkcmFudCB7CisgICAgICAgICAgImIiIHsKKyAgICAgICAgICAgICMgZGVidWcgImluc3Q6IFskaW5zdCBnZXROYW1lXSwgc2lkZTogJHF1YWRyYW50LCB5TWF4OiBbcmVhbF92YWx1ZSBbWyRpbnN0IGdldEJCb3hdIHlNYXhdXSIKKyAgICAgICAgICAgIHNldCBmb3VuZF9iIDEKKyAgICAgICAgICAgIGlmIHskeU1pbiA8IFtzZXQgeSBbWyRpbnN0IGdldEJCb3hdIHlNYXhdXX0geworICAgICAgICAgICAgICBzZXQgeU1pbiAkeQorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICAiciIgeworICAgICAgICAgICAgIyBkZWJ1ZyAiaW5zdDogWyRpbnN0IGdldE5hbWVdLCBzaWRlOiAkcXVhZHJhbnQsIHhNaW46IFtyZWFsX3ZhbHVlIFtbJGluc3QgZ2V0QkJveF0geE1pbl1dIgorICAgICAgICAgICAgc2V0IGZvdW5kX3IgMQorICAgICAgICAgICAgaWYgeyR4TWF4ID4gW3NldCB4IFtbJGluc3QgZ2V0QkJveF0geE1pbl1dfSB7CisgICAgICAgICAgICAgIHNldCB4TWF4ICR4CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgICJ0IiB7CisgICAgICAgICAgICAjIGRlYnVnICJpbnN0OiBbJGluc3QgZ2V0TmFtZV0sIHNpZGU6ICRxdWFkcmFudCwgeU1pbjogW3JlYWxfdmFsdWUgW1skaW5zdCBnZXRCQm94XSB5TWluXV0iCisgICAgICAgICAgICBzZXQgZm91bmRfdCAxCisgICAgICAgICAgICBpZiB7JHlNYXggPiBbc2V0IHkgW1skaW5zdCBnZXRCQm94XSB5TWluXV19IHsKKyAgICAgICAgICAgICAgc2V0IHlNYXggJHkKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgICAgImwiIHsKKyAgICAgICAgICAgICMgZGVidWcgImluc3Q6IFskaW5zdCBnZXROYW1lXSwgc2lkZTogJHF1YWRyYW50LCB4TWF4OiBbcmVhbF92YWx1ZSBbWyRpbnN0IGdldEJCb3hdIHhNYXhdXSIKKyAgICAgICAgICAgIHNldCBmb3VuZF9sIDEKKyAgICAgICAgICAgIGlmIHskeE1pbiA8IFtzZXQgeCBbWyRpbnN0IGdldEJCb3hdIHhNYXhdXX0geworICAgICAgICAgICAgICBzZXQgeE1pbiAkeAorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICBpZiB7JGZvdW5kX2IgPT0gMH0geworICAgICAgdXRsOjp3YXJuICJQRE4iIDY0ICJObyBwb3dlci9ncm91bmQgcGFkcyBmb3VuZCBvbiBib3R0b20gZWRnZS4iCisgICAgfQorICAgIGlmIHskZm91bmRfciA9PSAwfSB7CisgICAgICB1dGw6Ondhcm4gIlBETiIgNjUgIk5vIHBvd2VyL2dyb3VuZCBwYWRzIGZvdW5kIG9uIHJpZ2h0IGVkZ2UuIgorICAgIH0KKyAgICBpZiB7JGZvdW5kX3QgPT0gMH0geworICAgICAgdXRsOjp3YXJuICJQRE4iIDY2ICJObyBwb3dlci9ncm91bmQgcGFkcyBmb3VuZCBvbiB0b3AgZWRnZS4iCisgICAgfQorICAgIGlmIHskZm91bmRfbCA9PSAwfSB7CisgICAgICB1dGw6Ondhcm4gIlBETiIgNjcgIk5vIHBvd2VyL2dyb3VuZCBwYWRzIGZvdW5kIG9uIGxlZnQgZWRnZS4iCisgICAgfQorICAgIGlmIHskZm91bmRfYiA9PSAwIHx8ICRmb3VuZF9yID09IDAgfHwgJGZvdW5kX3QgPT0gMCB8fCAkZm91bmRfbCA9PSAwfSB7CisgICAgICB1dGw6OmVycm9yICJQRE4iIDY4ICJDYW5ub3QgcGxhY2UgY29yZSByaW5ncyB3aXRob3V0IHB3ci9nbmQgcGFkcyBvbiBlYWNoIHNpZGUuIgorICAgIH0KKyAgICAjIGRlYnVnICJwYWRfYXJlYTogKFtyZWFsX3ZhbHVlICR4TWluXSBbcmVhbF92YWx1ZSAkeU1pbl0pIChbcmVhbF92YWx1ZSAkeE1heF0gW3JlYWxfdmFsdWUgJHlNYXhdKSIKKyAgICBkaWN0IHNldCBkZXNpZ25fZGF0YSBjb25maWcgcGFkX29mZnNldF9hcmVhIFtsaXN0ICR4TWluICR5TWluICR4TWF4ICR5TWF4XQorICB9CisKKyAgcmV0dXJuIFtkaWN0IGdldCAkZGVzaWduX2RhdGEgY29uZmlnIHBhZF9vZmZzZXRfYXJlYV0KK30KKworcHJvYyBnZW5lcmF0ZV9jb3JlX3JpbmdzIHtjb3JlX3JpbmdfZGF0YX0geworICB2YXJpYWJsZSBncmlkX2RhdGEKKworICBkaWN0IGZvciB7bGF5ZXIgbGF5ZXJfaW5mb30gJGNvcmVfcmluZ19kYXRhIHsKKyAgICBpZiB7W2RpY3QgZXhpc3RzICRsYXllcl9pbmZvIHBhZF9vZmZzZXRdfSB7CisgICAgICBzZXQgYXJlYSBbZmluZF9wYWRfb2Zmc2V0X2FyZWFdCisgICAgICBzZXQgb2Zmc2V0IFtleHByIFtkaWN0IGdldCAkbGF5ZXJfaW5mbyBwYWRfb2Zmc2V0XSArIFtkaWN0IGdldCAkbGF5ZXJfaW5mbyB3aWR0aF0gLyAyXQorCisgICAgICBzZXQgeE1pbiBbbGluZGV4ICRhcmVhIDBdCisgICAgICBzZXQgeU1pbiBbbGluZGV4ICRhcmVhIDFdCisgICAgICBzZXQgeE1heCBbbGluZGV4ICRhcmVhIDJdCisgICAgICBzZXQgeU1heCBbbGluZGV4ICRhcmVhIDNdCisKKyAgICAgIHNldCBzcGFjaW5nIFtkaWN0IGdldCAkbGF5ZXJfaW5mbyBzcGFjaW5nXQorICAgICAgc2V0IHdpZHRoIFtkaWN0IGdldCAkbGF5ZXJfaW5mbyB3aWR0aF0KKworICAgICAgc2V0IG91dGVyX2x4IFtleHByICR4TWluICsgJG9mZnNldF0KKyAgICAgIHNldCBvdXRlcl9seSBbZXhwciAkeU1pbiArICRvZmZzZXRdCisgICAgICBzZXQgb3V0ZXJfdXggW2V4cHIgJHhNYXggLSAkb2Zmc2V0XQorICAgICAgc2V0IG91dGVyX3V5IFtleHByICR5TWF4IC0gJG9mZnNldF0KKworICAgICAgc2V0IGlubmVyX2x4IFtleHByICR4TWluICsgJG9mZnNldCArICRzcGFjaW5nICsgJHdpZHRoXQorICAgICAgc2V0IGlubmVyX2x5IFtleHByICR5TWluICsgJG9mZnNldCArICRzcGFjaW5nICsgJHdpZHRoXQorICAgICAgc2V0IGlubmVyX3V4IFtleHByICR4TWF4IC0gJG9mZnNldCAtICRzcGFjaW5nIC0gJHdpZHRoXQorICAgICAgc2V0IGlubmVyX3V5IFtleHByICR5TWF4IC0gJG9mZnNldCAtICRzcGFjaW5nIC0gJHdpZHRoXQorICAgIH0gZWxzZWlmIHtbZGljdCBleGlzdHMgJGxheWVyX2luZm8gY29yZV9vZmZzZXRdfSB7CisKKyAgICAgIHNldCBhcmVhIFtsaXN0IHsqfVtbb3JkOjpnZXRfZGJfY29yZV0gbGxdIHsqfVtbb3JkOjpnZXRfZGJfY29yZV0gdXJdXQorICAgICAgc2V0IG9mZnNldCBbZGljdCBnZXQgJGxheWVyX2luZm8gY29yZV9vZmZzZXRdCisKKyAgICAgIHNldCB4TWluIFtsaW5kZXggJGFyZWEgMF0KKyAgICAgIHNldCB5TWluIFtsaW5kZXggJGFyZWEgMV0KKyAgICAgIHNldCB4TWF4IFtsaW5kZXggJGFyZWEgMl0KKyAgICAgIHNldCB5TWF4IFtsaW5kZXggJGFyZWEgM10KKworICAgICAgc2V0IHNwYWNpbmcgW2RpY3QgZ2V0ICRsYXllcl9pbmZvIHNwYWNpbmddCisgICAgICBzZXQgd2lkdGggW2RpY3QgZ2V0ICRsYXllcl9pbmZvIHdpZHRoXQorCisgICAgICBzZXQgaW5uZXJfbHggW2V4cHIgJHhNaW4gLSAkb2Zmc2V0XQorICAgICAgc2V0IGlubmVyX2x5IFtleHByICR5TWluIC0gJG9mZnNldF0KKyAgICAgIHNldCBpbm5lcl91eCBbZXhwciAkeE1heCArICRvZmZzZXRdCisgICAgICBzZXQgaW5uZXJfdXkgW2V4cHIgJHlNYXggKyAkb2Zmc2V0XQorCisgICAgICBzZXQgb3V0ZXJfbHggW2V4cHIgJHhNaW4gLSAkb2Zmc2V0IC0gJHNwYWNpbmcgLSAkd2lkdGhdCisgICAgICBzZXQgb3V0ZXJfbHkgW2V4cHIgJHlNaW4gLSAkb2Zmc2V0IC0gJHNwYWNpbmcgLSAkd2lkdGhdCisgICAgICBzZXQgb3V0ZXJfdXggW2V4cHIgJHhNYXggKyAkb2Zmc2V0ICsgJHNwYWNpbmcgKyAkd2lkdGhdCisgICAgICBzZXQgb3V0ZXJfdXkgW2V4cHIgJHlNYXggKyAkb2Zmc2V0ICsgJHNwYWNpbmcgKyAkd2lkdGhdCisgICAgfQorCisgICAgaWYge1tnZXRfZGlyICRsYXllcl0gPT0gImhvciJ9IHsKKyAgICAgIHNldCBsb3dlcl9wb3dlciBcCisgICAgICAgIFtvZGI6Om5ld1NldEZyb21SZWN0IFwKKyAgICAgICAgICBbZXhwciAkaW5uZXJfbHggLSAkd2lkdGggLyAyXSBcCisgICAgICAgICAgW2V4cHIgJGlubmVyX2x5IC0gJHdpZHRoIC8gMl0gXAorICAgICAgICAgIFtleHByICRpbm5lcl91eCArICR3aWR0aCAvIDJdIFwKKyAgICAgICAgICBbZXhwciAkaW5uZXJfbHkgKyAkd2lkdGggLyAyXSBcCisgICAgICAgIF0KKyAgICAgIAorICAgICAgc2V0IHVwcGVyX3Bvd2VyIFwKKyAgICAgICAgW29kYjo6bmV3U2V0RnJvbVJlY3QgXAorICAgICAgICAgIFtleHByICRpbm5lcl9seCAtICR3aWR0aCAvIDJdIFwKKyAgICAgICAgICBbZXhwciAkaW5uZXJfdXkgLSAkd2lkdGggLyAyXSBcCisgICAgICAgICAgW2V4cHIgJGlubmVyX3V4ICsgJHdpZHRoIC8gMl0gXAorICAgICAgICAgIFtleHByICRpbm5lcl91eSArICR3aWR0aCAvIDJdIFwKKyAgICAgICAgXQorCisgICAgICBzZXQgbG93ZXJfZ3JvdW5kIFwKKyAgICAgICAgW29kYjo6bmV3U2V0RnJvbVJlY3QgXAorICAgICAgICAgIFtleHByICRvdXRlcl9seCAtICR3aWR0aCAvIDJdIFwKKyAgICAgICAgICBbZXhwciAkb3V0ZXJfbHkgLSAkd2lkdGggLyAyXSBcCisgICAgICAgICAgW2V4cHIgJG91dGVyX3V4ICsgJHdpZHRoIC8gMl0gXAorICAgICAgICAgIFtleHByICRvdXRlcl9seSArICR3aWR0aCAvIDJdIFwKKyAgICAgICAgXQorICAgICAgc2V0IHVwcGVyX2dyb3VuZCBcCisgICAgICAgIFtvZGI6Om5ld1NldEZyb21SZWN0IFwKKyAgICAgICAgICBbZXhwciAkb3V0ZXJfbHggLSAkd2lkdGggLyAyXSBcCisgICAgICAgICAgW2V4cHIgJG91dGVyX3V5IC0gJHdpZHRoIC8gMl0gXAorICAgICAgICAgIFtleHByICRvdXRlcl91eCArICR3aWR0aCAvIDJdIFwKKyAgICAgICAgICBbZXhwciAkb3V0ZXJfdXkgKyAkd2lkdGggLyAyXSBcCisgICAgICAgIF0KKyAKKyAgICAgIGFkZF9zdHJpcGUgJGxheWVyICJQT1dFUiIgJHVwcGVyX3Bvd2VyCisgICAgICBhZGRfc3RyaXBlICRsYXllciAiUE9XRVIiICRsb3dlcl9wb3dlcgorICAgICAgYWRkX3N0cmlwZSAkbGF5ZXIgIkdST1VORCIgJHVwcGVyX2dyb3VuZAorICAgICAgYWRkX3N0cmlwZSAkbGF5ZXIgIkdST1VORCIgJGxvd2VyX2dyb3VuZAorCisgICAgICBzZXQgY29yZV9yaW5ncyBbb2RiOjpvclNldHMgW2xpc3QgXAorICAgICAgICBbb2RiOjpuZXdTZXRGcm9tUmVjdCBbZXhwciAkb3V0ZXJfbHggLSAkd2lkdGggLyAyXSBbZXhwciAkb3V0ZXJfbHkgLSAkd2lkdGggLyAyXSBbZXhwciAkb3V0ZXJfdXggKyAkd2lkdGggLyAyXSBbZXhwciAkaW5uZXJfbHkgKyAkd2lkdGggLyAyXV0gXAorICAgICAgICBbb2RiOjpuZXdTZXRGcm9tUmVjdCBbZXhwciAkb3V0ZXJfbHggLSAkd2lkdGggLyAyXSBbZXhwciAkaW5uZXJfdXkgLSAkd2lkdGggLyAyXSBbZXhwciAkb3V0ZXJfdXggKyAkd2lkdGggLyAyXSBbZXhwciAkb3V0ZXJfdXkgKyAkd2lkdGggLyAyXV0gXAorICAgICAgXV0KKworICAgICAgc2V0IGNvcmVfcmluZ19hcmVhIFtvZGI6OmJsb2F0U2V0ICRjb3JlX3JpbmdzICRzcGFjaW5nXQorICAgICAgZGljdCBzZXQgZ3JpZF9kYXRhIGNvcmVfcmluZ19hcmVhICRsYXllciAkY29yZV9yaW5nX2FyZWEKKworICAgIH0gZWxzZSB7CisgICAgICBzZXQgbGhzX3Bvd2VyIFwKKyAgICAgICAgW29kYjo6bmV3U2V0RnJvbVJlY3QgXAorICAgICAgICAgIFtleHByICRpbm5lcl9seCAtICR3aWR0aCAvIDJdIFwKKyAgICAgICAgICBbZXhwciAkaW5uZXJfbHkgLSAkd2lkdGggLyAyXSBcCisgICAgICAgICAgW2V4cHIgJGlubmVyX2x4ICsgJHdpZHRoIC8gMl0gXAorICAgICAgICAgIFtleHByICRpbm5lcl91eSArICR3aWR0aCAvIDJdIFwKKyAgICAgICAgXQorICAgICAgc2V0IHJoc19wb3dlciBcCisgICAgICAgIFtvZGI6Om5ld1NldEZyb21SZWN0IFwKKyAgICAgICAgICBbZXhwciAkaW5uZXJfdXggLSAkd2lkdGggLyAyXSBcCisgICAgICAgICAgW2V4cHIgJGlubmVyX2x5IC0gJHdpZHRoIC8gMl0gXAorICAgICAgICAgIFtleHByICRpbm5lcl91eCArICR3aWR0aCAvIDJdIFwKKyAgICAgICAgICBbZXhwciAkaW5uZXJfdXkgKyAkd2lkdGggLyAyXSBcCisgICAgICAgIF0KKworICAgICAgc2V0IGxoc19ncm91bmQgXAorICAgICAgICBbb2RiOjpuZXdTZXRGcm9tUmVjdCBcCisgICAgICAgICAgW2V4cHIgJG91dGVyX2x4IC0gJHdpZHRoIC8gMl0gXAorICAgICAgICAgIFtleHByICRvdXRlcl9seSAtICR3aWR0aCAvIDJdIFwKKyAgICAgICAgICBbZXhwciAkb3V0ZXJfbHggKyAkd2lkdGggLyAyXSBcCisgICAgICAgICAgW2V4cHIgJG91dGVyX3V5ICsgJHdpZHRoIC8gMl0gXAorICAgICAgICBdCisgICAgICBzZXQgcmhzX2dyb3VuZCBcCisgICAgICAgIFtvZGI6Om5ld1NldEZyb21SZWN0IFwKKyAgICAgICAgICBbZXhwciAkb3V0ZXJfdXggLSAkd2lkdGggLyAyXSBcCisgICAgICAgICAgW2V4cHIgJG91dGVyX2x5IC0gJHdpZHRoIC8gMl0gXAorICAgICAgICAgIFtleHByICRvdXRlcl91eCArICR3aWR0aCAvIDJdIFwKKyAgICAgICAgICBbZXhwciAkb3V0ZXJfdXkgKyAkd2lkdGggLyAyXSBcCisgICAgICAgIF0KKworICAgICAgYWRkX3N0cmlwZSAkbGF5ZXIgIlBPV0VSIiAkbGhzX3Bvd2VyCisgICAgICBhZGRfc3RyaXBlICRsYXllciAiUE9XRVIiICRyaHNfcG93ZXIKKyAgICAgIGFkZF9zdHJpcGUgJGxheWVyICJHUk9VTkQiICRsaHNfZ3JvdW5kCisgICAgICBhZGRfc3RyaXBlICRsYXllciAiR1JPVU5EIiAkcmhzX2dyb3VuZAorICAgICAgCisgICAgICBzZXQgY29yZV9yaW5ncyBbb2RiOjpvclNldHMgW2xpc3QgXAorICAgICAgICBbb2RiOjpuZXdTZXRGcm9tUmVjdCBbZXhwciAkb3V0ZXJfbHggLSAkd2lkdGggLyAyXSBbZXhwciAkb3V0ZXJfbHkgLSAkd2lkdGggLyAyXSBbZXhwciAkaW5uZXJfbHggKyAkd2lkdGggLyAyXSBbZXhwciAkb3V0ZXJfdXkgKyAkd2lkdGggLyAyXV0gXAorICAgICAgICBbb2RiOjpuZXdTZXRGcm9tUmVjdCBbZXhwciAkaW5uZXJfdXggLSAkd2lkdGggLyAyXSBbZXhwciAkb3V0ZXJfbHkgLSAkd2lkdGggLyAyXSBbZXhwciAkb3V0ZXJfdXggKyAkd2lkdGggLyAyXSBbZXhwciAkb3V0ZXJfdXkgKyAkd2lkdGggLyAyXV0gXAorICAgICAgXV0KKyAgICAgCisgICAgICBzZXQgY29yZV9yaW5nX2FyZWEgW29kYjo6YmxvYXRTZXQgJGNvcmVfcmluZ3MgJHNwYWNpbmddCisgICAgICBkaWN0IHNldCBncmlkX2RhdGEgY29yZV9yaW5nX2FyZWEgJGxheWVyICRjb3JlX3JpbmdfYXJlYQorCisgICAgfQorICB9CisgIHNldCByaW5nX2FyZWFzIHt9CisgIGZvcmVhY2ggbGF5ZXIgW2RpY3Qga2V5cyBbZGljdCBnZXQgJGdyaWRfZGF0YSBjb3JlX3JpbmdfYXJlYV1dIHsKKyAgICBsYXBwZW5kIHJpbmdfYXJlYXMgW2RpY3QgZ2V0ICRncmlkX2RhdGEgY29yZV9yaW5nX2FyZWEgJGxheWVyXQorICB9CisgIGRpY3Qgc2V0IGdyaWRfZGF0YSBjb3JlX3JpbmdfYXJlYSBjb21iaW5lZCBbb2RiOjpvclNldHMgJHJpbmdfYXJlYXNdCit9CisKK3Byb2MgZ2V0X21hY3JvX2JvdW5kYXJpZXMge30geworICB2YXJpYWJsZSBpbnN0YW5jZXMKKworICBzZXQgYm91bmRhcmllcyB7fQorICBmb3JlYWNoIGluc3RhbmNlIFtkaWN0IGtleXMgJGluc3RhbmNlc10geworICAgIGxhcHBlbmQgYm91bmRhcmllcyBbZGljdCBnZXQgJGluc3RhbmNlcyAkaW5zdGFuY2UgbWFjcm9fYm91bmRhcnldCisgIH0KKworICByZXR1cm4gJGJvdW5kYXJpZXMKK30KKworcHJvYyBnZXRfc3RkY2VsbF9zcGVjaWZpY2F0aW9uIHt9IHsKKyAgdmFyaWFibGUgZGVzaWduX2RhdGEKKworICBpZiB7W2RpY3QgZXhpc3RzICRkZXNpZ25fZGF0YSBncmlkIHN0ZGNlbGxdfSB7CisgICAgc2V0IGdyaWRfbmFtZSBbbGluZGV4IFtkaWN0IGtleXMgW2RpY3QgZ2V0ICRkZXNpZ25fZGF0YSBncmlkIHN0ZGNlbGxdXSAwXQorICAgIHJldHVybiBbZGljdCBnZXQgJGRlc2lnbl9kYXRhIGdyaWQgc3RkY2VsbCAkZ3JpZF9uYW1lXQorICB9IGVsc2UgeworICAgIGlmIHshW2RpY3QgZXhpc3RzICRkZXNpZ25fZGF0YSBncmlkIHN0ZGNlbGxdfSB7CisgICAgICB1dGw6OmVycm9yICJQRE4iIDE3ICJObyBzdGRjZWxsIGdyaWQgc3BlY2lmaWNhdGlvbiBmb3VuZCAtIG5vIHJhaWxzIGNhbiBiZSBpbnNlcnRlZC4iCisgICAgfQorICB9CisKKyAgcmV0dXJuIHt9Cit9CisKK3Byb2MgZ2V0X3JhaWxfd2lkdGgge30geworICB2YXJpYWJsZSBkZWZhdWx0X2dyaWRfZGF0YQorCisgIHNldCBtYXhfd2lkdGggMAorICBmb3JlYWNoIGxheWVyIFtnZXRfcmFpbHNfbGF5ZXJzXSB7CisgICAgc2V0IG1heF93aWR0aCBbZXhwciBtYXgoJG1heF93aWR0aCxbZ2V0X2dyaWRfd2lyZV93aWR0aCAkbGF5ZXJdKV0KKyAgfQorICBpZiB7IVtkaWN0IGV4aXN0cyAkZGVmYXVsdF9ncmlkX2RhdGEgdW5pdHNdfSB7CisgICAgc2V0IG1heF93aWR0aCBbb3JkOjptaWNyb25zX3RvX2RidSAkbWF4X3dpZHRoXQorICB9CisgIHJldHVybiAkbWF4X3dpZHRoCit9CisKKworcHJvYyBnZXRfbWFjcm9fYmxvY2tzIHt9IHsKKyAgdmFyaWFibGUgbWFjcm9zCisKKyAgaWYge1tsbGVuZ3RoICRtYWNyb3NdID4gMH0ge3JldHVybiAkbWFjcm9zfQorCisgICMgZGVidWcgInN0YXJ0IgorICBmb3JlYWNoIGxpYiBbW29yZDo6Z2V0X2RiXSBnZXRMaWJzXSB7CisgICAgZm9yZWFjaCBjZWxsIFskbGliIGdldE1hc3RlcnNdIHsKKyAgICAgIGlmIHshWyRjZWxsIGlzQmxvY2tdICYmICFbJGNlbGwgaXNQYWRdfSB7Y29udGludWV9CisgICAgICBzZXQgbWFjcm9fbmFtZSBbJGNlbGwgZ2V0TmFtZV0KKyAgICAgIGRpY3Qgc2V0IG1hY3JvcyAkbWFjcm9fbmFtZSB3aWR0aCAgWyRjZWxsIGdldFdpZHRoXQorICAgICAgZGljdCBzZXQgbWFjcm9zICRtYWNyb19uYW1lIGhlaWdodCBbJGNlbGwgZ2V0SGVpZ2h0XQorCisgICAgICBzZXQgYmxvY2thZ2VfbGF5ZXJzIHt9CisgICAgICBmb3JlYWNoIG9icyBbJGNlbGwgZ2V0T2JzdHJ1Y3Rpb25zXSB7CisgICAgICAgIHNldCBsYXllcl9uYW1lIFtbJG9icyBnZXRUZWNoTGF5ZXJdIGdldE5hbWVdCisgICAgICAgIGRpY3Qgc2V0IGJsb2NrYWdlX2xheWVycyAkbGF5ZXJfbmFtZSAxCisgICAgICB9CisgICAgICBkaWN0IHNldCBtYWNyb3MgJG1hY3JvX25hbWUgYmxvY2thZ2VfbGF5ZXJzIFtkaWN0IGtleXMgJGJsb2NrYWdlX2xheWVyc10KKworICAgICAgc2V0IHBpbl9sYXllcnMge30KKyAgICAgIHNldCBwb3dlcl9waW5zIHt9CisgICAgICBzZXQgZ3JvdW5kX3BpbnMge30KKyAgICAgIHNldCBmaXJzdF9zaGFwZSAxCisKKyAgICAgIGZvcmVhY2ggdGVybSBbJGNlbGwgZ2V0TVRlcm1zXSB7CisgICAgICAgIHNldCBzaWdfdHlwZSBbJHRlcm0gZ2V0U2lnVHlwZV0KKyAgICAgICAgaWYgeyRzaWdfdHlwZSA9PSAiUE9XRVIifSB7CisgICAgICAgICAgbGFwcGVuZCBwb3dlcl9waW5zIFskdGVybSBnZXROYW1lXQorICAgICAgICB9IGVsc2VpZiB7JHNpZ190eXBlID09ICJHUk9VTkQifSB7CisgICAgICAgICAgbGFwcGVuZCBncm91bmRfcGlucyBbJHRlcm0gZ2V0TmFtZV0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBjb250aW51ZQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmb3JlYWNoIHBpbiBbJHRlcm0gZ2V0TVBpbnNdIHsKKyAgICAgICAgICBmb3JlYWNoIHNoYXBlIFskcGluIGdldEdlb21ldHJ5XSB7CisgICAgICAgICAgICBsYXBwZW5kIHBpbl9sYXllcnMgW1skc2hhcGUgZ2V0VGVjaExheWVyXSBnZXROYW1lXQorICAgICAgICAgICAgaWYgeyRmaXJzdF9zaGFwZSA9PSAxfSB7CisgICAgICAgICAgICAgIHNldCB4TWluIFskc2hhcGUgeE1pbl0KKyAgICAgICAgICAgICAgc2V0IHhNYXggWyRzaGFwZSB4TWF4XQorICAgICAgICAgICAgICBzZXQgeU1pbiBbJHNoYXBlIHlNaW5dCisgICAgICAgICAgICAgIHNldCB5TWF4IFskc2hhcGUgeU1heF0KKyAgICAgICAgICAgICAgc2V0IGZpcnN0X3NoYXBlIDAKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIHNldCB4TWluIFtleHByIG1pbigkeE1pbixbJHNoYXBlIHhNaW5dKV0KKyAgICAgICAgICAgICAgc2V0IHhNYXggW2V4cHIgbWF4KCR4TWF4LFskc2hhcGUgeE1heF0pXQorICAgICAgICAgICAgICBzZXQgeU1pbiBbZXhwciBtaW4oJHlNaW4sWyRzaGFwZSB5TWluXSldCisgICAgICAgICAgICAgIHNldCB5TWF4IFtleHByIG1heCgkeU1heCxbJHNoYXBlIHlNYXhdKV0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgZGljdCBzZXQgbWFjcm9zICRtYWNyb19uYW1lIHBpbl9sYXllcnMgW2xzb3J0IC11bmlxdWUgJHBpbl9sYXllcnNdCisgICAgICBkaWN0IHNldCBtYWNyb3MgJG1hY3JvX25hbWUgcG93ZXJfcGlucyBbbHNvcnQgLXVuaXF1ZSAkcG93ZXJfcGluc10KKyAgICAgIGRpY3Qgc2V0IG1hY3JvcyAkbWFjcm9fbmFtZSBncm91bmRfcGlucyBbbHNvcnQgLXVuaXF1ZSAkZ3JvdW5kX3BpbnNdCisgICAgICBpZiB7JGZpcnN0X3NoYXBlID09IDB9ICB7CisgICAgICAgIGRpY3Qgc2V0IG1hY3JvcyAkbWFjcm9fbmFtZSBwaW5zX2FyZWEgW2xpc3QgJHhNaW4gJHlNaW4gJHhNYXggJHlNYXhdCisgICAgICB9IGVsc2UgeworICAgICAgICBkaWN0IHNldCBtYWNyb3MgJG1hY3JvX25hbWUgcGluc19hcmVhIFtsaXN0IDAgMCAwIDBdCisgICAgICB9CisgICAgfQorICB9CisKKyAgcmV0dXJuICRtYWNyb3MKK30KKworcHJvYyBmaWx0ZXJlZF9pbnN0c193aXRoaW4ge2luc3RhbmNlcyBib3VuZGFyeX0geworICBzZXQgZmlsdGVyZWRfaW5zdGFuY2VzIHt9CisgIGRpY3QgZm9yIHtpbnN0YW5jZV9uYW1lIGluc3RhbmNlfSAkaW5zdGFuY2VzIHsKKyAgICAjIElmIHRoZXJlIGFyZSBubyBzaGFwZXMgbGVmdCBhZnRlciAnYW5kJ2luZyB0aGUgYm91bmRhcmQgd2l0aCB0aGUgY2VsbCwgdGhlbgorICAgICMgdGhlIGNlbGwgbGllcyBvdXRzaWRlIHRoZSBhcmVhIHdoZXJlIHdlIGFyZSBhZGRpbmcgYSBwb3dlciBncmlkLgorICAgIHNldCBsbHggW2RpY3QgZ2V0ICRpbnN0YW5jZSB4bWluXQorICAgIHNldCBsbHkgW2RpY3QgZ2V0ICRpbnN0YW5jZSB5bWluXQorICAgIHNldCB1cnggW2RpY3QgZ2V0ICRpbnN0YW5jZSB4bWF4XQorICAgIHNldCB1cnkgW2RpY3QgZ2V0ICRpbnN0YW5jZSB5bWF4XQorCisgICAgc2V0IGJveCBbb2RiOjpuZXdTZXRGcm9tUmVjdCAkbGx4ICRsbHkgJHVyeCAkdXJ5XQorICAgIGlmIHtbbGxlbmd0aCBbb2RiOjpnZXRQb2x5Z29ucyBbb2RiOjphbmRTZXQgJGJvdW5kYXJ5ICRib3hdXV0gIT0gMH0geworICAgICAgZGljdCBzZXQgZmlsdGVyZWRfaW5zdGFuY2VzICRpbnN0YW5jZV9uYW1lICRpbnN0YW5jZQorICAgIH0KKyAgfQorICByZXR1cm4gJGZpbHRlcmVkX2luc3RhbmNlcworfQorCitwcm9jIGltcG9ydF9tYWNyb19ib3VuZGFyaWVzIHt9IHsKKyAgdmFyaWFibGUgbGlicworICB2YXJpYWJsZSBpbnN0YW5jZXMKKworICBzZXQgbWFjcm9zIFtnZXRfbWFjcm9fYmxvY2tzXQorICBzZXQgaW5zdGFuY2VzIFtmaW5kX2luc3RhbmNlc19vZiBbZGljdCBrZXlzICRtYWNyb3NdXQorCisgICMgZGVidWcgImVuZCIKK30KKworcHJvYyBnZXRfaW5zdGFuY2VzIHt9IHsKKyAgdmFyaWFibGUgaW5zdGFuY2VzCisKKyAgaWYge1tsbGVuZ3RoICRpbnN0YW5jZXNdID4gMH0ge3JldHVybiAkaW5zdGFuY2VzfQorCisgIHNldCBibG9jayBbb3JkOjpnZXRfZGJfYmxvY2tdCisgIGZvcmVhY2ggaW5zdCBbJGJsb2NrIGdldEluc3RzXSB7CisgICAgaWYgeyFbWyRpbnN0IGdldE1hc3Rlcl0gaXNCbG9ja10gJiYgIVtbJGluc3QgZ2V0TWFzdGVyXSBpc1BhZF19IHtjb250aW51ZX0KKyAgICBzZXQgaW5zdGFuY2Uge30KKyAgICBkaWN0IHNldCBpbnN0YW5jZSBuYW1lIFskaW5zdCBnZXROYW1lXQorICAgIGRpY3Qgc2V0IGluc3RhbmNlIGluc3QgJGluc3QKKyAgICBkaWN0IHNldCBpbnN0YW5jZSBtYWNybyBbWyRpbnN0IGdldE1hc3Rlcl0gZ2V0TmFtZV0KKyAgICBkaWN0IHNldCBpbnN0YW5jZSB4IFtsaW5kZXggWyRpbnN0IGdldE9yaWdpbl0gMF0KKyAgICBkaWN0IHNldCBpbnN0YW5jZSB5IFtsaW5kZXggWyRpbnN0IGdldE9yaWdpbl0gMV0KKyAgICBkaWN0IHNldCBpbnN0YW5jZSB4bWluIFtbJGluc3QgZ2V0QkJveF0geE1pbl0KKyAgICBkaWN0IHNldCBpbnN0YW5jZSB5bWluIFtbJGluc3QgZ2V0QkJveF0geU1pbl0KKyAgICBkaWN0IHNldCBpbnN0YW5jZSB4bWF4IFtbJGluc3QgZ2V0QkJveF0geE1heF0KKyAgICBkaWN0IHNldCBpbnN0YW5jZSB5bWF4IFtbJGluc3QgZ2V0QkJveF0geU1heF0KKyAgICBkaWN0IHNldCBpbnN0YW5jZSBvcmllbnQgWyRpbnN0IGdldE9yaWVudF0KKworCisgICAgc2V0IGxseCBbZGljdCBnZXQgJGluc3RhbmNlIHhtaW5dCisgICAgc2V0IGxseSBbZGljdCBnZXQgJGluc3RhbmNlIHltaW5dCisgICAgc2V0IHVyeCBbZGljdCBnZXQgJGluc3RhbmNlIHhtYXhdCisgICAgc2V0IHVyeSBbZGljdCBnZXQgJGluc3RhbmNlIHltYXhdCisgICAgZGljdCBzZXQgaW5zdGFuY2UgbWFjcm9fYm91bmRhcnkgW2xpc3QgJGxseCAkbGx5ICR1cnggJHVyeV0KKyAgICBkaWN0IHNldCBpbnN0YW5jZXMgWyRpbnN0IGdldE5hbWVdICRpbnN0YW5jZQorCisgICAgc2V0X2luc3RhbmNlX2hhbG8gWyRpbnN0IGdldE5hbWVdIFtnZXRfZGVmYXVsdF9oYWxvXQorICB9CisKKyAgcmV0dXJuICRpbnN0YW5jZXMKK30KKworcHJvYyBnZXRfbWFzdGVyX3BnX3BpbnNfYXJlYSB7bWFjcm9fbmFtZX0geworICB2YXJpYWJsZSBtYWNyb3MKKworICByZXR1cm4gW2RpY3QgZ2V0ICRtYWNyb3MgJG1hY3JvX25hbWUgcGluc19hcmVhXQorfQorCitwcm9jIGdldF9pbnN0YW5jZV9wZ19waW5zX2FyZWEge2luc3RfbmFtZX0geworICB2YXJpYWJsZSBpbnN0YW5jZXMKKworICBzZXQgaW5zdGFuY2UgW2RpY3QgZ2V0ICRpbnN0YW5jZXMgJGluc3RfbmFtZV0KKyAgc2V0IGluc3QgW2RpY3QgZ2V0ICRpbnN0YW5jZSBpbnN0XQorCisgIHNldCBtYXN0ZXJfYXJlYSBbdHJhbnNmb3JtX2JveCB7Kn1bZ2V0X21hc3Rlcl9wZ19waW5zX2FyZWEgW1skaW5zdCBnZXRNYXN0ZXJdIGdldE5hbWVdXSBbJGluc3QgZ2V0T3JpZ2luXSBbJGluc3QgZ2V0T3JpZW50XV0KK30KKworcHJvYyBzZXRfaW5zdGFuY2VfaGFsbyB7aW5zdF9uYW1lIGhhbG99IHsKKyAgdmFyaWFibGUgaW5zdGFuY2VzIAorCisgIHNldCBpbnN0YW5jZSBbZGljdCBnZXQgJGluc3RhbmNlcyAkaW5zdF9uYW1lXQorICBzZXQgaW5zdCBbZGljdCBnZXQgJGluc3RhbmNlIGluc3RdCisKKyAgaWYge1skaW5zdCBnZXRIYWxvXSAhPSAiTlVMTCJ9IHsKKyAgICBzZXQgaGFsbyBbbGlzdCBcCisgICAgICBbWyRpbnN0IGdldEhhbG9dIHhNaW5dIFwKKyAgICAgIFtbJGluc3QgZ2V0SGFsb10geU1pbl0gXAorICAgICAgW1skaW5zdCBnZXRIYWxvXSB4TWF4XSBcCisgICAgICBbWyRpbnN0IGdldEhhbG9dIHlNYXhdIFwKKyAgICBdCisgIH0KKyAgZGljdCBzZXQgaW5zdGFuY2VzICRpbnN0X25hbWUgaGFsbyAkaGFsbworICAjIGRlYnVnICJJbnN0OiBbJGluc3QgZ2V0TmFtZV0sIGhhbG86IFtkaWN0IGdldCAkaW5zdGFuY2VzICRpbnN0X25hbWUgaGFsb10iCisKKyAgc2V0IGxseCBbZXhwciByb3VuZChbZGljdCBnZXQgJGluc3RhbmNlIHhtaW5dIC0gW2xpbmRleCAkaGFsbyAwXSldCisgIHNldCBsbHkgW2V4cHIgcm91bmQoW2RpY3QgZ2V0ICRpbnN0YW5jZSB5bWluXSAtIChbbGluZGV4ICRoYWxvIDFdIC0gW2dldF9yYWlsX3dpZHRoXSAvIDIpKV0KKyAgc2V0IHVyeCBbZXhwciByb3VuZChbZGljdCBnZXQgJGluc3RhbmNlIHhtYXhdICsgW2xpbmRleCAkaGFsbyAyXSldCisgIHNldCB1cnkgW2V4cHIgcm91bmQoW2RpY3QgZ2V0ICRpbnN0YW5jZSB5bWF4XSArIChbbGluZGV4ICRoYWxvIDNdIC0gW2dldF9yYWlsX3dpZHRoXSAvIDIpKV0KKworICBkaWN0IHNldCBpbnN0YW5jZXMgJGluc3RfbmFtZSBoYWxvX2JvdW5kYXJ5IFtsaXN0ICRsbHggJGxseSAkdXJ4ICR1cnldCit9CisKK3Byb2MgZmluZF9pbnN0YW5jZXNfb2Yge21hY3JvX25hbWVzfSB7CisgIHZhcmlhYmxlIGRlc2lnbl9kYXRhCisgIHZhcmlhYmxlIG1hY3JvcworCisgIHNldCBzZWxlY3RlZF9pbnN0YW5jZXMge30KKworICBkaWN0IGZvciB7aW5zdF9uYW1lIGluc3RhbmNlfSBbZ2V0X2luc3RhbmNlc10geworICAgIHNldCBtYWNyb19uYW1lIFtkaWN0IGdldCAkaW5zdGFuY2UgbWFjcm9dCisgICAgaWYge1tsc2VhcmNoIC1leGFjdCAkbWFjcm9fbmFtZXMgJG1hY3JvX25hbWVdID09IC0xfSB7Y29udGludWV9CisgICAgZGljdCBzZXQgc2VsZWN0ZWRfaW5zdGFuY2VzICRpbnN0X25hbWUgJGluc3RhbmNlCisgIH0KKworICByZXR1cm4gJHNlbGVjdGVkX2luc3RhbmNlcworfQorCitwcm9jIGV4cG9ydF9vcGVuZGJfdmlhcyB7fSB7CisgIHZhcmlhYmxlIHBoeXNpY2FsX3ZpYXJ1bGVzCisgIHZhcmlhYmxlIGJsb2NrCisgIHZhcmlhYmxlIHRlY2gKKyAgIyBkZWJ1ZyAiW2xsZW5ndGggJHBoeXNpY2FsX3ZpYXJ1bGVzXSIKKyAgZGljdCBmb3Ige25hbWUgcnVsZXN9ICRwaHlzaWNhbF92aWFydWxlcyB7CisgICAgZm9yZWFjaCBydWxlICRydWxlcyB7CisgICAgICAjIERvbnQgY3JlYXRlIGlsbGVnYWwgdmlhcworICAgICAgaWYge1tkaWN0IGV4aXN0cyAkcnVsZSBpbGxlZ2FsXX0ge2NvbnRpbnVlfQorICAgICAgaWYge1tkaWN0IGV4aXN0cyAkcnVsZSBmaXhlZF19IHtjb250aW51ZX0KKworICAgICAgIyBkZWJ1ZyAiJHJ1bGUiCisgICAgICBzZXQgdmlhIFskYmxvY2sgZmluZFZpYSBbZGljdCBnZXQgJHJ1bGUgbmFtZV1dCisgICAgICBpZiB7JHZpYSA9PSAiTlVMTCJ9IHsKKyAgICAgICAgc2V0IHZpYSBbb2RiOjpkYlZpYV9jcmVhdGUgJGJsb2NrIFtkaWN0IGdldCAkcnVsZSBuYW1lXV0KKyAgICAgICAgIyBkZWJ1ZyAiVmlhICR2aWEiCisKKyAgICAgICAgJHZpYSBzZXRWaWFHZW5lcmF0ZVJ1bGUgWyR0ZWNoIGZpbmRWaWFHZW5lcmF0ZVJ1bGUgW2RpY3QgZ2V0ICRydWxlIHJ1bGVdXQorICAgICAgICBzZXQgcGFyYW1zIFskdmlhIGdldFZpYVBhcmFtc10KKyAgICAgICAgJHBhcmFtcyBzZXRCb3R0b21MYXllciBbJHRlY2ggZmluZExheWVyIFtsaW5kZXggW2RpY3QgZ2V0ICRydWxlIGxheWVyc10gMF1dCisgICAgICAgICRwYXJhbXMgc2V0Q3V0TGF5ZXIgWyR0ZWNoIGZpbmRMYXllciBbbGluZGV4IFtkaWN0IGdldCAkcnVsZSBsYXllcnNdIDFdXQorICAgICAgICAkcGFyYW1zIHNldFRvcExheWVyIFskdGVjaCBmaW5kTGF5ZXIgW2xpbmRleCBbZGljdCBnZXQgJHJ1bGUgbGF5ZXJzXSAyXV0KKyAgICAgICAgJHBhcmFtcyBzZXRYQ3V0U2l6ZSBbbGluZGV4IFtkaWN0IGdldCAkcnVsZSBjdXRzaXplXSAwXQorICAgICAgICAkcGFyYW1zIHNldFlDdXRTaXplIFtsaW5kZXggW2RpY3QgZ2V0ICRydWxlIGN1dHNpemVdIDFdCisgICAgICAgICRwYXJhbXMgc2V0WEN1dFNwYWNpbmcgW2xpbmRleCBbZGljdCBnZXQgJHJ1bGUgY3V0c3BhY2luZ10gMF0KKyAgICAgICAgJHBhcmFtcyBzZXRZQ3V0U3BhY2luZyBbbGluZGV4IFtkaWN0IGdldCAkcnVsZSBjdXRzcGFjaW5nXSAxXQorICAgICAgICAkcGFyYW1zIHNldFhCb3R0b21FbmNsb3N1cmUgW2xpbmRleCBbZGljdCBnZXQgJHJ1bGUgZW5jbG9zdXJlXSAwXQorICAgICAgICAkcGFyYW1zIHNldFlCb3R0b21FbmNsb3N1cmUgW2xpbmRleCBbZGljdCBnZXQgJHJ1bGUgZW5jbG9zdXJlXSAxXQorICAgICAgICAkcGFyYW1zIHNldFhUb3BFbmNsb3N1cmUgW2xpbmRleCBbZGljdCBnZXQgJHJ1bGUgZW5jbG9zdXJlXSAyXQorICAgICAgICAkcGFyYW1zIHNldFlUb3BFbmNsb3N1cmUgW2xpbmRleCBbZGljdCBnZXQgJHJ1bGUgZW5jbG9zdXJlXSAzXQorICAgICAgICAkcGFyYW1zIHNldE51bUN1dFJvd3MgW2xpbmRleCBbZGljdCBnZXQgJHJ1bGUgcm93Y29sXSAwXQorICAgICAgICAkcGFyYW1zIHNldE51bUN1dENvbHMgW2xpbmRleCBbZGljdCBnZXQgJHJ1bGUgcm93Y29sXSAxXQorCisgICAgICAgICR2aWEgc2V0VmlhUGFyYW1zICRwYXJhbXMKKyAgICAgIH0KKyAgICB9CisgIH0KKyAgIyBkZWJ1ZyAiZW5kIgorfQorCitwcm9jIGdldF9nbG9iYWxfY29ubmVjdF9saXN0X2RlZmF1bHQge3ZvbHRhZ2VfZG9tYWluIGlzX3JlZ2lvbn0geworICB2YXJpYWJsZSBibG9jaworICB2YXJpYWJsZSB2b2x0YWdlX2RvbWFpbnMKKworICBmb3JlYWNoIG5ldF90eXBlICJwcmltYXJ5X3Bvd2VyIHByaW1hcnlfZ3JvdW5kIiB7CisgICAgc2V0IG5ldF9uYW1lIFtkaWN0IGdldCAkdm9sdGFnZV9kb21haW5zICR2b2x0YWdlX2RvbWFpbiAkbmV0X3R5cGVdCisgICAgZm9yZWFjaCBzdWJfbmV0ICRuZXRfbmFtZSB7CisgICAgICBzZXQgbmV0IFskYmxvY2sgZmluZE5ldCAkc3ViX25ldF0KKyAgICAgIGZvcmVhY2ggdGVybSBbZ2V0X3ZhbGlkX210ZXJtcyAkc3ViX25ldF0geworICAgICAgICBpZiB7JGlzX3JlZ2lvbn0geworICAgICAgICAgIHBkbjo6YWRkX2dsb2JhbF9jb25uZWN0ICRibG9jayAkdm9sdGFnZV9kb21haW4gIi4qIiAkdGVybSAkbmV0CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgcGRuOjphZGRfZ2xvYmFsX2Nvbm5lY3QgIi4qIiAkdGVybSAkbmV0CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KK30KKworcHJvYyBnZXRfZ2xvYmFsX2Nvbm5lY3RfbGlzdCB7bmV0X25hbWV9IHsKKyAgdmFyaWFibGUgZGVzaWduX2RhdGEKKyAgdmFyaWFibGUgZ2xvYmFsX2Nvbm5lY3Rpb25zCisgIHZhcmlhYmxlIHZvbHRhZ2VfZG9tYWlucworCisgIHNldCBjb25uZWN0X3BhdHRlcm5zIHt9CisgIGlmIHtbZGljdCBleGlzdCAkZ2xvYmFsX2Nvbm5lY3Rpb25zICRuZXRfbmFtZV19IHsKKyAgICBmb3JlYWNoIHBhdHRlcm4gW2RpY3QgZ2V0ICRnbG9iYWxfY29ubmVjdGlvbnMgJG5ldF9uYW1lXSB7CisgICAgICBsYXBwZW5kIGNvbm5lY3RfcGF0dGVybnMgJHBhdHRlcm4KKyAgICB9CisgIH0KKworICByZXR1cm4gJGNvbm5lY3RfcGF0dGVybnMKK30KKworcHJvYyBleHBvcnRfb3BlbmRiX2dsb2JhbF9jb25uZWN0aW9uIHt9IHsKKyAgdmFyaWFibGUgYmxvY2sKKyAgdmFyaWFibGUgZGVzaWduX2RhdGEKKyAgdmFyaWFibGUgZ2xvYmFsX2Nvbm5lY3Rpb25zCisgIHZhcmlhYmxlIHZvbHRhZ2VfZG9tYWlucworCisgICMjIERvIGdsb2JhbCBjb25uZWN0IHN0YXRlbWVudHMgZmlyc3QKKyAgZ2V0X2dsb2JhbF9jb25uZWN0X2xpc3RfZGVmYXVsdCBbZGljdCBnZXQgJGRlc2lnbl9kYXRhIGNvcmVfZG9tYWluXSBmYWxzZQorICAKKyAgZm9yZWFjaCBuZXRfdHlwZSAicG93ZXJfbmV0cyBncm91bmRfbmV0cyIgeworICAgIGZvcmVhY2ggbmV0X25hbWUgW2RpY3QgZ2V0ICRkZXNpZ25fZGF0YSAkbmV0X3R5cGVdIHsKKyAgICAgIHNldCBuZXQgWyRibG9jayBmaW5kTmV0ICRuZXRfbmFtZV0KKyAgICAgIGZvcmVhY2ggcGF0dGVybiBbZ2V0X2dsb2JhbF9jb25uZWN0X2xpc3QgJG5ldF9uYW1lXSB7CisgICAgICAgIHBkbjo6YWRkX2dsb2JhbF9jb25uZWN0IFtkaWN0IGdldCAkcGF0dGVybiBpbnN0X25hbWVdIFtkaWN0IGdldCAkcGF0dGVybiBwaW5fbmFtZV0gJG5ldAorICAgICAgfQorICAgIH0KKyAgfQorCisgICMjIERvIHJlZ2lvbnMgc2Vjb25kCisgIHNldCBjb3JlX2RvbWFpbl9uYW1lIFtkaWN0IGdldCAkZGVzaWduX2RhdGEgY29yZV9kb21haW5dCisgIGZvcmVhY2ggdm9sdGFnZV9kb21haW4gW2RpY3Qga2V5cyAkdm9sdGFnZV9kb21haW5zXSB7CisgICAgaWYgeyR2b2x0YWdlX2RvbWFpbiAhPSAkY29yZV9kb21haW5fbmFtZX0geworICAgICAgZ2V0X2dsb2JhbF9jb25uZWN0X2xpc3RfZGVmYXVsdCAkdm9sdGFnZV9kb21haW4gdHJ1ZQorCisgICAgICBmb3JlYWNoIHtuZXRfdHlwZSBuZXRuYW1lfSBbZGljdCBnZXQgJHZvbHRhZ2VfZG9tYWlucyAkdm9sdGFnZV9kb21haW5dIHsKKyAgICAgICAgc2V0IG5ldCBbJGJsb2NrIGZpbmROZXQgJG5ldF9uYW1lXQorICAgICAgICAjIGxvb3Agb3ZlciBhbGwgcGF0dGVybnMKKyAgICAgICAgZm9yZWFjaCBwYXR0ZXJuIFtnZXRfZ2xvYmFsX2Nvbm5lY3RfbGlzdCAkbmV0X25hbWVdIHsKKyAgICAgICAgICBwZG46OmFkZF9nbG9iYWxfY29ubmVjdCAkYmxvY2sgJHZvbHRhZ2VfZG9tYWluIFtkaWN0IGdldCAkcGF0dGVybiBpbnN0X25hbWVdIFtkaWN0IGdldCAkcGF0dGVybiBwaW5fbmFtZV0gJG5ldAorICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisKKyAgcGRuOjpnbG9iYWxfY29ubmVjdCAkYmxvY2sKK30KKworcHJvYyBleHBvcnRfb3BlbmRiX3NwZWNpYWxuZXQge25ldF9uYW1lIHNpZ25hbF90eXBlfSB7CisgIHZhcmlhYmxlIGJsb2NrCisgIHZhcmlhYmxlIGluc3RhbmNlcworICB2YXJpYWJsZSBtZXRhbF9sYXllcnMKKyAgdmFyaWFibGUgdGVjaAorICB2YXJpYWJsZSBzdHJpcGVfbG9jcworICB2YXJpYWJsZSBnbG9iYWxfY29ubmVjdGlvbnMKKyAgdmFyaWFibGUgZGVzaWduX2RhdGEKKworICBzZXQgbmV0IFskYmxvY2sgZmluZE5ldCAkbmV0X25hbWVdCisgIGlmIHskbmV0ID09ICJOVUxMIn0geworICAgIHNldCBuZXQgW29kYjo6ZGJOZXRfY3JlYXRlICRibG9jayAkbmV0X25hbWVdCisgIH0KKyAgJG5ldCBzZXRTcGVjaWFsCisgICRuZXQgc2V0U2lnVHlwZSAkc2lnbmFsX3R5cGUKKyAgIyBkZWJ1ZyAibmV0ICRuZXRfbmFtZS4gc2lnbmFsdHlwZSwgJHNpZ25hbF90eXBlLCBnbG9iYWxfY29ubmVjdGlvbnM6ICRnbG9iYWxfY29ubmVjdGlvbnMiCisKKyAgaWYge1tjaGVja19zbmV0X2lzX3VuaXF1ZSAkbmV0XX0geworICAgICRuZXQgc2V0V2lsZENvbm5lY3RlZAorICB9CisgIHNldCBzd2lyZSBbb2RiOjpkYlNXaXJlX2NyZWF0ZSAkbmV0ICJST1VURUQiXQorICBpZiB7JG5ldF9uYW1lICE9IFtnZXRfdm9sdGFnZV9kb21haW5fcG93ZXIgW2RpY3QgZ2V0ICRkZXNpZ25fZGF0YSBjb3JlX2RvbWFpbl1dICYmCisgICAgICAkbmV0X25hbWUgIT0gW2dldF92b2x0YWdlX2RvbWFpbl9ncm91bmQgW2RpY3QgZ2V0ICRkZXNpZ25fZGF0YSBjb3JlX2RvbWFpbl1dfSB7CisgICAgc2V0IHNpZ25hbF90eXBlICIkc2lnbmFsX3R5cGVcXyRuZXRfbmFtZSIKKyAgfQorCisgICMgZGVidWcgImxheWVycyAtICRtZXRhbF9sYXllcnMiCisgIGZvcmVhY2ggbGF5ICRtZXRhbF9sYXllcnMgeworICAgIGlmIHtbYXJyYXkgbmFtZXMgc3RyaXBlX2xvY3MgIiRsYXksJHNpZ25hbF90eXBlIl0gPT0gIiJ9IHtjb250aW51ZX0KKworICAgIHNldCBsYXllciBbZmluZF9sYXllciAkbGF5XQorICAgIGZvcmVhY2ggcmVjdCBbOjpvZGI6OmdldFJlY3RhbmdsZXMgJHN0cmlwZV9sb2NzKCRsYXksJHNpZ25hbF90eXBlKV0geworICAgICAgc2V0IHhNaW4gWyRyZWN0IHhNaW5dCisgICAgICBzZXQgeE1heCBbJHJlY3QgeE1heF0KKyAgICAgIHNldCB5TWluIFskcmVjdCB5TWluXQorICAgICAgc2V0IHlNYXggWyRyZWN0IHlNYXhdCisKKyAgICAgIHNldCB3aWR0aCBbZXhwciAkeE1heCAtICR4TWluXQorICAgICAgc2V0IGhlaWdodCBbZXhwciAkeU1heCAtICR5TWluXQorCisgICAgICBzZXQgd2lyZV90eXBlICJTVFJJUEUiCisgICAgICBpZiB7W2lzX3JhaWxzX2xheWVyICRsYXldfSB7c2V0IHdpcmVfdHlwZSAiRk9MTE9XUElOIn0KKyAgICAgICMgZGVidWcgIiR4TWluICR5TWluICR4TWF4ICR5TWF4ICR3aXJlX3R5cGUiCisgICAgICBvZGI6OmRiU0JveF9jcmVhdGUgJHN3aXJlICRsYXllciAkeE1pbiAkeU1pbiAkeE1heCAkeU1heCAkd2lyZV90eXBlCisgICAgfQorICB9CisKKyAgdmFyaWFibGUgdmlhcworICAjIGRlYnVnICJ2aWFzIC0gW2xsZW5ndGggJHZpYXNdIgorICBmb3JlYWNoIHZpYSAkdmlhcyB7CisgICAgaWYge1tkaWN0IGdldCAkdmlhIG5ldF9uYW1lXSA9PSAkbmV0X25hbWV9IHsKKyAgICAgICMgRm9yIGVhY2ggbGF5ZXIgYmV0d2VlbiBsMSBhbmQgbDIsIGFkZCB2aWFzIGF0IHRoZSBpbnRlcnNlY3Rpb24KKyAgICAgIGZvcmVhY2ggdmlhX2luc3QgW2RpY3QgZ2V0ICR2aWEgY29ubmVjdGlvbnNdIHsKKyAgICAgICAgIyBkZWJ1ZyAiJHZpYV9pbnN0IgorICAgICAgICBzZXQgdmlhX25hbWUgW2RpY3QgZ2V0ICR2aWFfaW5zdCBuYW1lXQorICAgICAgICBzZXQgeCAgICAgICAgW2RpY3QgZ2V0ICR2aWFfaW5zdCB4XQorICAgICAgICBzZXQgeSAgICAgICAgW2RpY3QgZ2V0ICR2aWFfaW5zdCB5XQorICAgICAgICAjIGRlYnVnICIkdmlhX25hbWUgJHggJHkgWyRibG9jayBmaW5kVmlhICR2aWFfbmFtZV0iCisgICAgICAgIGlmIHtbc2V0IGRlZnZpYSBbJGJsb2NrIGZpbmRWaWEgJHZpYV9uYW1lXV0gIT0gIk5VTEwifSB7CisgICAgICAgICAgb2RiOjpkYlNCb3hfY3JlYXRlICRzd2lyZSAkZGVmdmlhICR4ICR5ICJTVFJJUEUiCisgICAgICAgIH0gZWxzZWlmIHtbc2V0IHRlY2h2aWEgWyR0ZWNoIGZpbmRWaWEgJHZpYV9uYW1lXV0gIT0gIk5VTEwifSB7CisgICAgICAgICAgb2RiOjpkYlNCb3hfY3JlYXRlICRzd2lyZSAkdGVjaHZpYSAkeCAkeSAiU1RSSVBFIgorICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHV0bDo6ZXJyb3IgIlBETiIgNjkgIkNhbm5vdCBmaW5kIHZpYSAkdmlhX25hbWUuIgorICAgICAgICB9CisgICAgICAgICMgZGVidWcgInZpYSBjcmVhdGVkIgorICAgICAgfQorICAgIH0KKyAgfQorICAjIGRlYnVnICJlbmQiCit9CisKK3Byb2MgZXhwb3J0X29wZW5kYl9zcGVjaWFsbmV0cyB7fSB7CisgIHZhcmlhYmxlIGJsb2NrCisgIHZhcmlhYmxlIGRlc2lnbl9kYXRhCisKKyAgZm9yZWFjaCBuZXRfbmFtZSBbZGljdCBnZXQgJGRlc2lnbl9kYXRhIHBvd2VyX25ldHNdIHsKKyAgICBleHBvcnRfb3BlbmRiX3NwZWNpYWxuZXQgJG5ldF9uYW1lICJQT1dFUiIKKyAgfQorCisgIGZvcmVhY2ggbmV0X25hbWUgW2RpY3QgZ2V0ICRkZXNpZ25fZGF0YSBncm91bmRfbmV0c10geworICAgIGV4cG9ydF9vcGVuZGJfc3BlY2lhbG5ldCAkbmV0X25hbWUgIkdST1VORCIKKyAgfQorCisgIGV4cG9ydF9vcGVuZGJfZ2xvYmFsX2Nvbm5lY3Rpb24KK30KKworcHJvYyBleHBvcnRfb3BlbmRiX3Bvd2VyX3BpbiB7bmV0X25hbWUgc2lnbmFsX3R5cGV9IHsKKyAgdmFyaWFibGUgbWV0YWxfbGF5ZXJzCisgIHZhcmlhYmxlIGJsb2NrCisgIHZhcmlhYmxlIHN0cmlwZV9sb2NzCisgIHZhcmlhYmxlIHRlY2gKKyAgdmFyaWFibGUgdm9sdGFnZV9kb21haW5zCisgIHZhcmlhYmxlIGRlc2lnbl9kYXRhCisKKyAgaWYgeyFbZGljdCBleGlzdHMgJGRlc2lnbl9kYXRhIGdyaWQgc3RkY2VsbF19IHtyZXR1cm59CisKKyAgc2V0IHBpbnNfbGF5ZXJzIHt9CisgIGRpY3QgZm9yIHtncmlkX25hbWUgZ3JpZH0gW2RpY3QgZ2V0ICRkZXNpZ25fZGF0YSBncmlkIHN0ZGNlbGxdIHsKKyAgICBpZiB7W2RpY3QgZXhpc3RzICRncmlkIHBpbnNdfSB7CisgICAgICBsYXBwZW5kIHBpbnNfbGF5ZXJzIHsqfVtkaWN0IGdldCAkZ3JpZCBwaW5zXQorICAgIH0KKyAgfQorICBzZXQgcGluc19sYXllcnMgW2xzb3J0IC11bmlxdWUgJHBpbnNfbGF5ZXJzXQorICBpZiB7W2xsZW5ndGggJHBpbnNfbGF5ZXJzXSA9PSAwfSB7cmV0dXJufQorCisgIHNldCBuZXQgWyRibG9jayBmaW5kTmV0ICRuZXRfbmFtZV0KKyAgaWYgeyRuZXQgPT0gIk5VTEwifSB7CisgICAgdXRsOjplcnJvciBQRE4gNzAgIkNhbm5vdCBmaW5kIG5ldCAkbmV0X25hbWUgaW4gdGhlIGRlc2lnbi4iCisgIH0KKyAgc2V0IGJ0ZXJtcyBbJG5ldCBnZXRCVGVybXNdCisgIGlmIHtbbGxlbmd0aCAkYnRlcm1zXSA8IDF9IHsKKyAgICBzZXQgYnRlcm0gW29kYjo6ZGJCVGVybV9jcmVhdGUgJG5ldCAiJHtuZXRfbmFtZX0iXQorICAgIGlmIHskYnRlcm0gPT0gIk5VTEwifSB7CisgICAgICB1dGw6OmVycm9yIFBETiA3MSAiQ2Fubm90IGNyZWF0ZSB0ZXJtaW5hbCBmb3IgbmV0ICRuZXRfbmFtZS4iCisgICAgfQorICB9CisgICMgZGVidWcgJGJ0ZXJtCisgIGZvcmVhY2ggYnRlcm0gWyRuZXQgZ2V0QlRlcm1zXSB7CisgICAgJGJ0ZXJtIHNldFNpZ1R5cGUgJHNpZ25hbF90eXBlCisgIH0KKyAgc2V0IGJ0ZXJtIFtsaW5kZXggWyRuZXQgZ2V0QlRlcm1zXSAwXQorICBzZXQgYnBpbiBbb2RiOjpkYkJQaW5fY3JlYXRlICRidGVybV0KKyAgJGJwaW4gc2V0UGxhY2VtZW50U3RhdHVzICJGSVJNIgorCisgIGRpY3QgZm9yIHtkb21haW4gZG9tYWluX2luZm99ICR2b2x0YWdlX2RvbWFpbnMgeworICAgIGlmIHskZG9tYWluICE9IFtkaWN0IGdldCAkZGVzaWduX2RhdGEgY29yZV9kb21haW5dICYmCisgICAgICAgICRuZXRfbmFtZSA9PSBbZGljdCBnZXQgJGRvbWFpbl9pbmZvIHByaW1hcnlfcG93ZXJdfSB7CisgICAgICBzZXQgcl9waW4gInJfJG5ldF9uYW1lIgorICAgICAgc2V0IHJfbmV0IFtvZGI6OmRiTmV0X2NyZWF0ZSAkYmxvY2sgJHJfcGluXQorICAgICAgc2V0IHJfYnRlcm0gW29kYjo6ZGJCVGVybV9jcmVhdGUgJHJfbmV0ICIke3JfcGlufSJdCisKKyAgICAgIHNldCByX2JwaW4gW29kYjo6ZGJCUGluX2NyZWF0ZSAkcl9idGVybV0KKyAgICAgICRyX2JwaW4gc2V0UGxhY2VtZW50U3RhdHVzICJGSVJNIgorICAgIH0KKyAgfQorCisgIGlmIHskbmV0X25hbWUgIT0gW2dldF92b2x0YWdlX2RvbWFpbl9wb3dlciBbZGljdCBnZXQgJGRlc2lnbl9kYXRhIGNvcmVfZG9tYWluXV0gJiYKKyAgICAgICRuZXRfbmFtZSAhPSBbZ2V0X3ZvbHRhZ2VfZG9tYWluX2dyb3VuZCBbZGljdCBnZXQgJGRlc2lnbl9kYXRhIGNvcmVfZG9tYWluXV19IHsKKyAgICBzZXQgc2lnbmFsX3R5cGUgIiRzaWduYWxfdHlwZVxfJG5ldF9uYW1lIgorICB9CisKKyAgZm9yZWFjaCBsYXkgW2xyZXZlcnNlICRtZXRhbF9sYXllcnNdIHsKKyAgICBpZiB7W2FycmF5IG5hbWVzIHN0cmlwZV9sb2NzICIkbGF5LCRzaWduYWxfdHlwZSJdID09ICIiIHx8CisgICAgICAgIFtsc2VhcmNoIC1leGFjdCAkcGluc19sYXllcnMgJGxheV0gPT0gLTF9IHtjb250aW51ZX0KKyAgICBmb3JlYWNoIHNoYXBlIFs6Om9kYjo6Z2V0UG9seWdvbnMgJHN0cmlwZV9sb2NzKCRsYXksJHNpZ25hbF90eXBlKV0geworICAgICAgc2V0IHBvaW50cyBbOjpvZGI6OmdldFBvaW50cyAkc2hhcGVdCisgICAgICBpZiB7W2xsZW5ndGggJHBvaW50c10gIT0gNH0geworICAgICAgICAjIFdlIGFscmVhZHkgaXNzdWVkIGEgbWVzc2FnZSBmb3IgdGhpcyAtIG5vIG5lZWQgdG8gcmVwZWF0CisgICAgICAgIGNvbnRpbnVlCisgICAgICB9CisgICAgICBzZXQgeE1pbiBbZXhwciBtaW4oW1tsaW5kZXggJHBvaW50cyAwXSBnZXRYXSwgW1tsaW5kZXggJHBvaW50cyAxXSBnZXRYXSwgW1tsaW5kZXggJHBvaW50cyAyXSBnZXRYXSwgW1tsaW5kZXggJHBvaW50cyAzXSBnZXRYXSldCisgICAgICBzZXQgeE1heCBbZXhwciBtYXgoW1tsaW5kZXggJHBvaW50cyAwXSBnZXRYXSwgW1tsaW5kZXggJHBvaW50cyAxXSBnZXRYXSwgW1tsaW5kZXggJHBvaW50cyAyXSBnZXRYXSwgW1tsaW5kZXggJHBvaW50cyAzXSBnZXRYXSldCisgICAgICBzZXQgeU1pbiBbZXhwciBtaW4oW1tsaW5kZXggJHBvaW50cyAwXSBnZXRZXSwgW1tsaW5kZXggJHBvaW50cyAxXSBnZXRZXSwgW1tsaW5kZXggJHBvaW50cyAyXSBnZXRZXSwgW1tsaW5kZXggJHBvaW50cyAzXSBnZXRZXSldCisgICAgICBzZXQgeU1heCBbZXhwciBtYXgoW1tsaW5kZXggJHBvaW50cyAwXSBnZXRZXSwgW1tsaW5kZXggJHBvaW50cyAxXSBnZXRZXSwgW1tsaW5kZXggJHBvaW50cyAyXSBnZXRZXSwgW1tsaW5kZXggJHBvaW50cyAzXSBnZXRZXSldCisKKyAgICAgIHNldCBsYXllciBbJHRlY2ggZmluZExheWVyICRsYXldCisgICAgICBvZGI6OmRiQm94X2NyZWF0ZSAkYnBpbiAkbGF5ZXIgJHhNaW4gJHlNaW4gJHhNYXggJHlNYXgKKyAgICAgIGlmIHtbaW5mbyBleGlzdHMgcl9icGluXX0geworICAgICAgICBvZGI6OmRiQm94X2NyZWF0ZSAkcl9icGluICRsYXllciAkeE1pbiAkeU1pbiAkeE1heCAkeU1heAorICAgICAgfQorCisgICAgfQorICB9Cit9CisKK3Byb2MgZXhwb3J0X29wZW5kYl9wb3dlcl9waW5zIHt9IHsKKyAgdmFyaWFibGUgYmxvY2sKKyAgdmFyaWFibGUgZGVzaWduX2RhdGEKKworICBmb3JlYWNoIG5ldF9uYW1lIFtkaWN0IGdldCAkZGVzaWduX2RhdGEgcG93ZXJfbmV0c10geworICAgIGV4cG9ydF9vcGVuZGJfcG93ZXJfcGluICRuZXRfbmFtZSAiUE9XRVIiCisgIH0KKworICBmb3JlYWNoIG5ldF9uYW1lIFtkaWN0IGdldCAkZGVzaWduX2RhdGEgZ3JvdW5kX25ldHNdIHsKKyAgICBleHBvcnRfb3BlbmRiX3Bvd2VyX3BpbiAkbmV0X25hbWUgIkdST1VORCIKKyAgfQorCit9CisKKyMjIHByb2NlZHVyZSBmb3IgZmlsZSBleGlzdGVuY2UgY2hlY2ssIHJldHVybnMgMCBpZiBmaWxlIGRvZXMgbm90IGV4aXN0IG9yIGZpbGUgZXhpc3RzLCBidXQgZW1wdHkKK3Byb2MgZmlsZV9leGlzdHNfbm9uX2VtcHR5IHtmaWxlbmFtZX0geworICByZXR1cm4gW2V4cHIgW2ZpbGUgZXhpc3RzICRmaWxlbmFtZV0gJiYgW2ZpbGUgc2l6ZSAkZmlsZW5hbWVdID4gMF0KK30KKworcHJvYyBnZXQge2FyZ3N9IHsKKyAgdmFyaWFibGUgZGVzaWduX2RhdGEKKworICByZXR1cm4gW2RpY3QgZ2V0ICRkZXNpZ25fZGF0YSB7Kn0kYXJnc10KK30KK3Byb2MgZ2V0X21hY3JvX3Bvd2VyX3BpbnMge2luc3RfbmFtZX0geworICBzZXQgc3BlY2lmaWNhdGlvbiBbc2VsZWN0X2luc3RhbmNlX3NwZWNpZmljYXRpb24gJGluc3RfbmFtZV0KKyAgaWYge1tkaWN0IGV4aXN0cyAkc3BlY2lmaWNhdGlvbiBwb3dlcl9waW5zXX0geworICAgIHJldHVybiBbZGljdCBnZXQgJHNwZWNpZmljYXRpb24gcG93ZXJfcGluc10KKyAgfQorICByZXR1cm4gIlZERFBFIFZERENFIgorfQorcHJvYyBnZXRfbWFjcm9fZ3JvdW5kX3BpbnMge2luc3RfbmFtZX0geworICBzZXQgc3BlY2lmaWNhdGlvbiBbc2VsZWN0X2luc3RhbmNlX3NwZWNpZmljYXRpb24gJGluc3RfbmFtZV0KKyAgaWYge1tkaWN0IGV4aXN0cyAkc3BlY2lmaWNhdGlvbiBncm91bmRfcGluc119IHsKKyAgICByZXR1cm4gW2RpY3QgZ2V0ICRzcGVjaWZpY2F0aW9uIGdyb3VuZF9waW5zXQorICB9CisgIHJldHVybiAiVlNTRSIKK30KKworcHJvYyB0cmFuc2Zvcm1fYm94IHt4bWluIHltaW4geG1heCB5bWF4IG9yaWdpbiBvcmllbnRhdGlvbn0geworICBzd2l0Y2ggLWV4YWN0ICRvcmllbnRhdGlvbiB7CisgICAgUjAgICAge3NldCBuZXdfYm94IFtsaXN0ICR4bWluICR5bWluICR4bWF4ICR5bWF4XX0KKyAgICBSOTAgICB7c2V0IG5ld19ib3ggW2xpc3QgW2V4cHIgLTEgKiAkeW1heF0gJHhtaW4gW2V4cHIgLTEgKiAkeW1pbl0gJHhtYXhdfQorICAgIFIxODAgIHtzZXQgbmV3X2JveCBbbGlzdCBbZXhwciAtMSAqICR4bWF4XSBbZXhwciAtMSAqICR5bWF4XSBbZXhwciAtMSAqICR4bWluXSBbZXhwciAtMSAqICR5bWluXV19CisgICAgUjI3MCAge3NldCBuZXdfYm94IFtsaXN0ICR5bWluIFtleHByIC0xICogJHhtYXhdICR5bWF4IFtleHByIC0xICogJHhtaW5dXX0KKyAgICBNWCAgICB7c2V0IG5ld19ib3ggW2xpc3QgJHhtaW4gW2V4cHIgLTEgKiAkeW1heF0gJHhtYXggW2V4cHIgLTEgKiAkeW1pbl1dfQorICAgIE1ZICAgIHtzZXQgbmV3X2JveCBbbGlzdCBbZXhwciAtMSAqICR4bWF4XSAkeW1pbiBbZXhwciAtMSAqICR4bWluXSAkeW1heF19CisgICAgTVhSOTAge3NldCBuZXdfYm94IFtsaXN0ICR5bWluICR4bWluICR5bWF4ICR4bWF4XX0KKyAgICBNWVI5MCB7c2V0IG5ld19ib3ggW2xpc3QgW2V4cHIgLTEgKiAkeW1heF0gW2V4cHIgLTEgKiAkeG1heF0gW2V4cHIgLTEgKiAkeW1pbl0gW2V4cHIgLTEgKiAkeG1pbl1dfQorICAgIGRlZmF1bHQge3V0bDo6ZXJyb3IgIlBETiIgMjcgIklsbGVnYWwgb3JpZW50YXRpb24gJG9yaWVudGF0aW9uIHNwZWNpZmllZC4ifQorICB9CisgIHJldHVybiBbbGlzdCBcCisgICAgW2V4cHIgW2xpbmRleCAkbmV3X2JveCAwXSArIFtsaW5kZXggJG9yaWdpbiAwXV0gXAorICAgIFtleHByIFtsaW5kZXggJG5ld19ib3ggMV0gKyBbbGluZGV4ICRvcmlnaW4gMV1dIFwKKyAgICBbZXhwciBbbGluZGV4ICRuZXdfYm94IDJdICsgW2xpbmRleCAkb3JpZ2luIDBdXSBcCisgICAgW2V4cHIgW2xpbmRleCAkbmV3X2JveCAzXSArIFtsaW5kZXggJG9yaWdpbiAxXV0gXAorICBdCit9CisKK3Byb2Mgc2V0X3RlbXBsYXRlX3NpemUge3dpZHRoIGhlaWdodH0geworICB2YXJpYWJsZSB0ZW1wbGF0ZQorICB2YXJpYWJsZSBkZWZfdW5pdHMKKworICBkaWN0IHNldCB0ZW1wbGF0ZSB3aWR0aCBbZXhwciByb3VuZCgkd2lkdGggKiAkZGVmX3VuaXRzKV0KKyAgZGljdCBzZXQgdGVtcGxhdGUgaGVpZ2h0IFtleHByIHJvdW5kKCRoZWlnaHQgKiAkZGVmX3VuaXRzKV0KK30KKworcHJvYyBnZXRfbWVtb3J5X2luc3RhbmNlX3BnX3BpbnMge30geworICB2YXJpYWJsZSBibG9jaworICB2YXJpYWJsZSBtZXRhbF9sYXllcnMKKworICAjIGRlYnVnICJzdGFydCIKKyAgc2V0IGJvdW5kYXJ5IFtvZGI6Om5ld1NldEZyb21SZWN0IHsqfVtnZXRfY29yZV9hcmVhXV0KKworICBmb3JlYWNoIGluc3QgWyRibG9jayBnZXRJbnN0c10geworICAgIHNldCBpbnN0X25hbWUgWyRpbnN0IGdldE5hbWVdCisgICAgc2V0IG1hc3RlciBbJGluc3QgZ2V0TWFzdGVyXQorCisgICAgaWYgeyFbJG1hc3RlciBpc0Jsb2NrXX0ge2NvbnRpbnVlfQorCisgICAgIyBJZiB0aGVyZSBhcmUgbm8gc2hhcGVzIGxlZnQgYWZ0ZXIgJ2FuZCdpbmcgdGhlIGJvdW5kYXJkIHdpdGggdGhlIGNlbGwsIHRoZW4KKyAgICAjIHRoZSBjZWxsIGxpZXMgb3V0c2lkZSB0aGUgYXJlYSB3aGVyZSB3ZSBhcmUgYWRkaW5nIGEgcG93ZXIgZ3JpZC4KKyAgICBzZXQgYmJveCBbJGluc3QgZ2V0QkJveF0KKyAgICBzZXQgYm94IFtvZGI6Om5ld1NldEZyb21SZWN0IFskYmJveCB4TWluXSBbJGJib3ggeU1pbl0gWyRiYm94IHhNYXhdIFskYmJveCB5TWF4XV0KKyAgICBpZiB7W2xsZW5ndGggW29kYjo6Z2V0UG9seWdvbnMgW29kYjo6YW5kU2V0ICRib3VuZGFyeSAkYm94XV1dID09IDB9IHsKKyAgICAgICMgZGVidWcgIkluc3RhbmNlIFskaW5zdCBnZXROYW1lXSBkb2VzIG5vdCBsaWUgaW4gdGhlIGNlbGwgYXJlYSIKKyAgICAgIGNvbnRpbnVlCisgICAgfQorCisgICAgIyBkZWJ1ZyAiY2VsbCBuYW1lIC0gWyRtYXN0ZXIgZ2V0TmFtZV0iCisKKyAgICBmb3JlYWNoIHRlcm1fbmFtZSBbY29uY2F0IFtnZXRfbWFjcm9fcG93ZXJfcGlucyAkaW5zdF9uYW1lXSBbZ2V0X21hY3JvX2dyb3VuZF9waW5zICRpbnN0X25hbWVdXSB7CisgICAgICBzZXQgbWFzdGVyIFskaW5zdCBnZXRNYXN0ZXJdCisgICAgICBzZXQgbXRlcm0gWyRtYXN0ZXIgZmluZE1UZXJtICR0ZXJtX25hbWVdCisgICAgICBpZiB7JG10ZXJtID09ICJOVUxMIn0geworICAgICAgICB1dGw6Ondhcm4gIlBETiIgMzcgIkNhbm5vdCBmaW5kIHBpbiAkdGVybV9uYW1lIG9uIGluc3RhbmNlIFskaW5zdCBnZXROYW1lXSAoW1skaW5zdCBnZXRNYXN0ZXJdIGdldE5hbWVdKS4iCisgICAgICAgIGNvbnRpbnVlCisgICAgICB9CisKKyAgICAgIHNldCB0eXBlIFskbXRlcm0gZ2V0U2lnVHlwZV0KKyAgICAgIGZvcmVhY2ggbVBpbiBbJG10ZXJtIGdldE1QaW5zXSB7CisgICAgICAgIGZvcmVhY2ggZ2VvbSBbJG1QaW4gZ2V0R2VvbWV0cnldIHsKKyAgICAgICAgICBzZXQgbGF5ZXIgW1skZ2VvbSBnZXRUZWNoTGF5ZXJdIGdldE5hbWVdCisgICAgICAgICAgaWYge1tsc2VhcmNoIC1leGFjdCAkbWV0YWxfbGF5ZXJzICRsYXllcl0gPT0gLTF9IHtjb250aW51ZX0KKworICAgICAgICAgIHNldCBib3ggW3RyYW5zZm9ybV9ib3ggWyRnZW9tIHhNaW5dIFskZ2VvbSB5TWluXSBbJGdlb20geE1heF0gWyRnZW9tIHlNYXhdIFskaW5zdCBnZXRPcmlnaW5dIFskaW5zdCBnZXRPcmllbnRdXQorCisgICAgICAgICAgc2V0IHdpZHRoICBbZXhwciBhYnMoW2xpbmRleCAkYm94IDJdIC0gW2xpbmRleCAkYm94IDBdKV0KKyAgICAgICAgICBzZXQgaGVpZ2h0IFtleHByIGFicyhbbGluZGV4ICRib3ggM10gLSBbbGluZGV4ICRib3ggMV0pXQorCisgICAgICAgICAgaWYgeyR3aWR0aCA+ICRoZWlnaHR9IHsKKyAgICAgICAgICAgIHNldCBsYXllcl9uYW1lICR7bGF5ZXJ9X1BJTl9ob3IKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc2V0IGxheWVyX25hbWUgJHtsYXllcn1fUElOX3ZlcgorICAgICAgICAgIH0KKyAgICAgICAgICAjIGRlYnVnICJBZGRpbmcgcGluIGZvciBbJGluc3QgZ2V0TmFtZV06WyRtdGVybSBnZXROYW1lXSB0byBsYXllciAkbGF5ZXJfbmFtZSAoJGJveCkiCisgICAgICAgICAgYWRkX3N0cmlwZSAkbGF5ZXJfbmFtZSAkdHlwZSBbb2RiOjpuZXdTZXRGcm9tUmVjdCB7Kn0kYm94XQorICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisgICMgZGVidWcgIlRvdGFsIHdhbGx0aW1lIHRpbGwgbWFjcm8gcGluIGdlb21ldHJ5IGNyZWF0aW9uID0gW2V4cHIge1tleHByIHtbY2xvY2sgY2xpY2tzIC1taWxsaXNlY29uZHNdIC0gJDo6c3RhcnRfdGltZX1dLzEwMDAuMH1dIHNlY29uZHMiCisgICMgZGVidWcgImVuZCIKK30KKworcHJvYyBzZXRfY29yZV9hcmVhIHt4bWluIHltaW4geG1heCB5bWF4fSB7CisgIHZhcmlhYmxlIGRlc2lnbl9kYXRhCisKKyAgZGljdCBzZXQgZGVzaWduX2RhdGEgY29uZmlnIGNvcmVfYXJlYSBbbGlzdCAkeG1pbiAkeW1pbiAkeG1heCAkeW1heF0KK30KKworcHJvYyBnZXRfY29yZV9hcmVhIHt9IHsKKyAgdmFyaWFibGUgZGVzaWduX2RhdGEKKworICByZXR1cm4gW2dldF9leHRlbnQgW2dldF9zdGRjZWxsX2FyZWFdXQorfQorCitwcm9jIHdyaXRlX3Bkbl9zdHJhdGVneSB7fSB7CisgIHZhcmlhYmxlIGRlc2lnbl9kYXRhCisKKyAgaWYge1tkaWN0IGV4aXN0cyAkZGVzaWduX2RhdGEgZ3JpZF19IHsKKyAgICBzZXRfcGRuX3N0cmluZ19wcm9wZXJ0eV92YWx1ZSAic3RyYXRlZ3kiIFtkaWN0IGdldCAkZGVzaWduX2RhdGEgZ3JpZF0KKyAgfQorCit9CisKK3Byb2MgaW5pdF90ZWNoIHt9IHsKKyAgdmFyaWFibGUgZGIKKyAgdmFyaWFibGUgYmxvY2sKKyAgdmFyaWFibGUgdGVjaAorICB2YXJpYWJsZSBsaWJzCisgIHZhcmlhYmxlIGRlZl91bml0cworCisgIHNldCBkYiBbb3JkOjpnZXRfZGJdCisgIHNldCB0ZWNoIFtvcmQ6OmdldF9kYl90ZWNoXQorICBzZXQgbGlicyBbJGRiIGdldExpYnNdCisgIHNldCBibG9jayBbb3JkOjpnZXRfZGJfYmxvY2tdCisKKyAgc2V0IGRlZl91bml0cyBbJGJsb2NrIGdldERlZlVuaXRzXQorCisgIGluaXRfbWV0YWxfbGF5ZXJzCisgIGluaXRfdmlhX3RlY2gKKworfQorCitwcm9jIGFkZF9wb3dlcl9uZXQge25ldF9uYW1lfSB7CisgIHZhcmlhYmxlIHBvd2VyX25ldHMKKworICBpZiB7W2xzZWFyY2ggLWV4YWN0ICRwb3dlcl9uZXRzICRuZXRfbmFtZV0gPT0gLTF9IHsKKyAgICBsYXBwZW5kIHBvd2VyX25ldHMgJG5ldF9uYW1lCisgIH0KK30KKworcHJvYyBhZGRfZ3JvdW5kX25ldCB7bmV0X25hbWV9IHsKKyAgdmFyaWFibGUgZ3JvdW5kX25ldHMKKworICBpZiB7W2xzZWFyY2ggLWV4YWN0ICRncm91bmRfbmV0cyAkbmV0X25hbWVdID09IC0xfSB7CisgICAgbGFwcGVuZCBncm91bmRfbmV0cyAkbmV0X25hbWUKKyAgfQorfQorCitwcm9jIGdldF9kZWZhdWx0X2hhbG8ge30geworICBpZiB7W2luZm8gdmFycyA6OmhhbG9dICE9ICIifSB7CisgICAgaWYge1tsbGVuZ3RoICQ6OmhhbG9dID09IDF9IHsKKyAgICAgIHNldCBkZWZhdWx0X2hhbG8gIiQ6OmhhbG8gJDo6aGFsbyAkOjpoYWxvICQ6OmhhbG8iCisgICAgfSBlbHNlaWYge1tsbGVuZ3RoICQ6OmhhbG9dID09IDJ9IHsKKyAgICAgIHNldCBkZWZhdWx0X2hhbG8gIiQ6OmhhbG8gJDo6aGFsbyIKKyAgICB9IGVsc2VpZiB7W2xsZW5ndGggJDo6aGFsb10gPT0gNH0geworICAgICAgc2V0IGRlZmF1bHRfaGFsbyAkOjpoYWxvCisgICAgfSBlbHNlIHsKKyAgICAgIHV0bDo6ZXJyb3IgIlBETiIgMjkgIklsbGVnYWwgbnVtYmVyIG9mIGVsZW1lbnRzIGRlZmluZWQgZm9yIDo6aGFsbyBcIiQ6OmhhbG9cIiAoMSwgMiBvciA0IGFsbG93ZWQpLiIKKyAgICB9CisgIH0gZWxzZSB7CisgICAgc2V0IGRlZmF1bHRfaGFsbyAiMCAwIDAgMCIKKyAgfQorICByZXR1cm4gW2xtYXAgeCAkZGVmYXVsdF9oYWxvIHtvcmQ6Om1pY3JvbnNfdG9fZGJ1ICR4fV0KK30KKworcHJvYyBnZXRfcm93X2hlaWdodCB7fSB7CisgIHNldCBmaXJzdF9yb3cgW2xpbmRleCBbW29yZDo6Z2V0X2RiX2Jsb2NrXSBnZXRSb3dzXSAwXQorICBzZXQgcm93X3NpdGUgWyRmaXJzdF9yb3cgZ2V0U2l0ZV0KKworICByZXR1cm4gWyRyb3dfc2l0ZSBnZXRIZWlnaHRdCit9CisKK3Byb2MgaW5pdCB7YXJnc30geworICB2YXJpYWJsZSBkYgorICB2YXJpYWJsZSBibG9jaworICB2YXJpYWJsZSB0ZWNoCisgIHZhcmlhYmxlIGxpYnMKKyAgdmFyaWFibGUgZGVzaWduX2RhdGEKKyAgdmFyaWFibGUgZGVmX291dHB1dAorICB2YXJpYWJsZSBkZWZhdWx0X2dyaWRfZGF0YQorICB2YXJpYWJsZSBkZXNpZ25fbmFtZQorICB2YXJpYWJsZSBzdHJpcGVfbG9jcworICB2YXJpYWJsZSBzaXRlCisgIHZhcmlhYmxlIHJvd19oZWlnaHQKKyAgdmFyaWFibGUgbWV0YWxfbGF5ZXJzCisgIHZhcmlhYmxlIGRlZl91bml0cworICB2YXJpYWJsZSBzdHJpcGVzX3N0YXJ0X3dpdGgKKyAgdmFyaWFibGUgcGh5c2ljYWxfdmlhcnVsZXMKKyAgdmFyaWFibGUgc3RkY2VsbF9hcmVhCisgIHZhcmlhYmxlIHZvbHRhZ2VfZG9tYWlucworICB2YXJpYWJsZSBnbG9iYWxfY29ubmVjdGlvbnMKKyAgdmFyaWFibGUgZGVmYXVsdF9nbG9iYWxfY29ubmVjdGlvbnMKKyAgdmFyaWFibGUgcG93ZXJfbmV0cworICB2YXJpYWJsZSBncm91bmRfbmV0cworCisgICMgZGVidWcgInN0YXJ0IiAKKyAgaW5pdF90ZWNoIAorCisgIHNldCBkZXNpZ25fbmFtZSBbJGJsb2NrIGdldE5hbWVdCisKKyAgc2V0IHBoeXNpY2FsX3ZpYXJ1bGVzIHt9CisgIHNldCBzdGRjZWxsX2FyZWEgIiIKKyAKKyAgc2V0IGRpZV9hcmVhIFskYmxvY2sgZ2V0RGllQXJlYV0KKworICB1dGw6OmluZm8gIlBETiIgOCAiRGVzaWduIG5hbWUgaXMgJGRlc2lnbl9uYW1lLiIKKyAgc2V0IGRlZl9vdXRwdXQgIiR7ZGVzaWduX25hbWV9X3Bkbi5kZWYiCisKKyAgIyBkZWJ1ZyAiZXhhbWluZSB2YXJzIgorICBpZiB7JHBvd2VyX25ldHMgPT0ge319IHsKKyAgICBpZiB7W2luZm8gdmFycyA6OnBvd2VyX25ldHNdID09ICIifSB7CisgICAgICBzZXQgcG93ZXJfbmV0cyAiVkREIgorICAgIH0gZWxzZSB7CisgICAgICBzZXQgcG93ZXJfbmV0cyAkOjpwb3dlcl9uZXRzCisgICAgfQorICB9CisgIAorICBpZiB7JGdyb3VuZF9uZXRzID09IHt9fSB7CisgICAgaWYge1tpbmZvIHZhcnMgOjpncm91bmRfbmV0c10gPT0gIiJ9IHsKKyAgICAgIHNldCBncm91bmRfbmV0cyAiVlNTIgorICAgIH0gZWxzZSB7CisgICAgICBzZXQgZ3JvdW5kX25ldHMgJDo6Z3JvdW5kX25ldHMKKyAgICB9CisgIH0KKworICBpZiB7W2luZm8gdmFycyA6OmNvcmVfZG9tYWluXSA9PSAiIn0geworICAgIHNldCBjb3JlX2RvbWFpbiAiQ09SRSIKKyAgICBpZiB7IVtkaWN0IGV4aXN0cyAkdm9sdGFnZV9kb21haW5zICRjb3JlX2RvbWFpbiBwcmltYXJ5X3Bvd2VyXX0geworICAgICAgZGljdCBzZXQgdm9sdGFnZV9kb21haW5zICRjb3JlX2RvbWFpbiBwcmltYXJ5X3Bvd2VyIFtsaW5kZXggJHBvd2VyX25ldHMgMF0KKyAgICB9CisgICAgaWYgeyFbZGljdCBleGlzdHMgJHZvbHRhZ2VfZG9tYWlucyAkY29yZV9kb21haW4gcHJpbWFyeV9ncm91bmRdfSB7CisgICAgICBkaWN0IHNldCB2b2x0YWdlX2RvbWFpbnMgJGNvcmVfZG9tYWluIHByaW1hcnlfZ3JvdW5kIFtsaW5kZXggJGdyb3VuZF9uZXRzIDBdCisgICAgfQorICB9IGVsc2UgeworICAgIHNldCBjb3JlX2RvbWFpbiAkOjpjb3JlX2RvbWFpbgorICB9CisKKyAgaWYge1tpbmZvIHZhcnMgOjpzdHJpcGVzX3N0YXJ0X3dpdGhdID09ICIifSB7CisgICAgc2V0IHN0cmlwZXNfc3RhcnRfd2l0aCAiR1JPVU5EIgorICB9IGVsc2UgeworICAgIHNldCBzdHJpcGVzX3N0YXJ0X3dpdGggJDo6c3RyaXBlc19zdGFydF93aXRoCisgIH0KKyAgCisgIGRpY3Qgc2V0IGRlc2lnbl9kYXRhIHBvd2VyX25ldHMgJHBvd2VyX25ldHMKKyAgZGljdCBzZXQgZGVzaWduX2RhdGEgZ3JvdW5kX25ldHMgJGdyb3VuZF9uZXRzCisgIGRpY3Qgc2V0IGRlc2lnbl9kYXRhIGNvcmVfZG9tYWluICRjb3JlX2RvbWFpbgorCisgICMgU291cmNpbmcgdXNlciBpbnB1dHMgZmlsZQorICAjCisgIHNldCByb3dfaGVpZ2h0IFtnZXRfcm93X2hlaWdodF0KKworICAjIyMjIyBHZXQgaW5mb3JtYXRpb24gZnJvbSBCRU9MIExFRgorICB1dGw6OmluZm8gIlBETiIgOSAiUmVhZGluZyB0ZWNobm9sb2d5IGRhdGEuIgorCisgIGlmIHtbaW5mbyB2YXJzIDo6bGF5ZXJzXSAhPSAiIn0geworICAgIGZvcmVhY2ggbGF5ZXIgJDo6bGF5ZXJzIHsKKyAgICAgIGlmIHtbZGljdCBleGlzdHMgJDo6bGF5ZXJzICRsYXllciB3aWR0aHRhYmxlXX0geworICAgICAgICBkaWN0IHNldCA6OmxheWVycyAkbGF5ZXIgd2lkdGh0YWJsZSBbbG1hcCB4IFtkaWN0IGdldCAkOjpsYXllcnMgJGxheWVyIHdpZHRodGFibGVdIHtleHByICR4ICogJGRlZl91bml0c31dCisgICAgICB9CisgICAgfQorICAgIHNldF9sYXllcl9pbmZvICQ6OmxheWVycworICB9CisKKyAgZGljdCBzZXQgZGVzaWduX2RhdGEgY29uZmlnIGRlZl9vdXRwdXQgICAkZGVmX291dHB1dAorICBkaWN0IHNldCBkZXNpZ25fZGF0YSBjb25maWcgZGVzaWduICAgICAgICRkZXNpZ25fbmFtZQorICBkaWN0IHNldCBkZXNpZ25fZGF0YSBjb25maWcgZGllX2FyZWEgICAgIFtsaXN0IFskZGllX2FyZWEgeE1pbl0gIFskZGllX2FyZWEgeU1pbl0gWyRkaWVfYXJlYSB4TWF4XSBbJGRpZV9hcmVhIHlNYXhdXQorCisgIGFycmF5IHVuc2V0IHN0cmlwZV9sb2NzCisKKyAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAjIFJlbW92ZSBleGlzdGluZyBwb3dlci9ncm91bmQgbmV0cworICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgZm9yZWFjaCBwZ19uZXQgW2NvbmNhdCBbZGljdCBnZXQgJGRlc2lnbl9kYXRhIHBvd2VyX25ldHNdIFtkaWN0IGdldCAkZGVzaWduX2RhdGEgZ3JvdW5kX25ldHNdXSB7CisgICAgc2V0IG5ldCBbJGJsb2NrIGZpbmROZXQgJHBnX25ldF0KKyAgICBpZiB7JG5ldCAhPSAiTlVMTCJ9IHsKKyAgICAgIGZvcmVhY2ggc3dpcmUgWyRuZXQgZ2V0U1dpcmVzXSB7CisgICAgICAgIG9kYjo6ZGJTV2lyZV9kZXN0cm95ICRzd2lyZQorICAgICAgfQorICAgIH0KKyAgfQorCisgICMgZGVidWcgIlNldCB0aGUgY29yZSBhcmVhIgorICAjIFNldCB0aGUgY29yZSBhcmVhCisgIGlmIHtbaW5mbyB2YXJzIDo6Y29yZV9hcmVhX2xseF0gIT0gIiIgJiYgW2luZm8gdmFycyA6OmNvcmVfYXJlYV9sbHldICE9ICIiICYmIFtpbmZvIHZhcnMgOjpjb3JlX2FyZWFfdXJ4XSAhPSAiIiAmJiBbaW5mbyB2YXJzIDo6Y29yZV9hcmVhX3VyeV0gIT0gIiJ9IHsKKyAgICAgIyBUaGUgY29yZSBhcmVhIGlzIGxhcmdlciB0aGFuIHRoZSBzdGRjZWxsIGFyZWEgYnkgaGFsZiBhIHJhaWwsIHNpbmNlIHRoZSBzdGRjZWxsIHJhaWxzIGV4dGVuZCBiZXlvbmQgdGhlIHJhaWxzCisgICAgIHNldF9jb3JlX2FyZWEgXAorICAgICAgIFtleHByIHJvdW5kKCQ6OmNvcmVfYXJlYV9sbHggKiAkZGVmX3VuaXRzKV0gXAorICAgICAgIFtleHByIHJvdW5kKCQ6OmNvcmVfYXJlYV9sbHkgKiAkZGVmX3VuaXRzKV0gXAorICAgICAgIFtleHByIHJvdW5kKCQ6OmNvcmVfYXJlYV91cnggKiAkZGVmX3VuaXRzKV0gXAorICAgICAgIFtleHByIHJvdW5kKCQ6OmNvcmVfYXJlYV91cnkgKiAkZGVmX3VuaXRzKV0KKyAgfSBlbHNlIHsKKyAgICBzZXRfY29yZV9hcmVhIHsqfVtnZXRfZXh0ZW50IFtnZXRfc3RkY2VsbF9wbHVzX2FyZWFdXQorICB9CisKKyAgIyMjIyMgQmFzaWMgc2FuaXR5IGNoZWNrcyB0byBzZWUgaWYgaW5wdXRzIGFyZSBnaXZlbiBjb3JyZWN0bHkKKyAgZm9yZWFjaCBsYXllciBbZ2V0X3JhaWxzX2xheWVyc10geworICAgIGlmIHtbbHNlYXJjaCAtZXhhY3QgJG1ldGFsX2xheWVycyAkbGF5ZXJdIDwgMH0geworICAgICAgdXRsOjplcnJvciAiUEROIiAzMCAiTGF5ZXIgc3BlY2lmaWVkIGZvciBzdGRjZWxsIHJhaWxzICckbGF5ZXInIG5vdCBpbiBsaXN0IG9mIGxheWVycy4iCisgICAgfQorICB9CisgICMgZGVidWcgImVuZCIKKworICByZXR1cm4gJGRlc2lnbl9kYXRhCit9CisKK3Byb2MgY29udmVydF9sYXllcl9zcGVjX3RvX2RlZl91bml0cyB7ZGF0YX0geworICBmb3JlYWNoIGtleSB7d2lkdGggcGl0Y2ggc3BhY2luZyBvZmZzZXQgcGFkX29mZnNldCBjb3JlX29mZnNldH0geworICAgIGlmIHtbZGljdCBleGlzdHMgJGRhdGEgJGtleV19IHsKKyAgICAgIGRpY3Qgc2V0IGRhdGEgJGtleSBbb3JkOjptaWNyb25zX3RvX2RidSBbZGljdCBnZXQgJGRhdGEgJGtleV1dCisgICAgfQorICB9CisgIHJldHVybiAkZGF0YQorfQorCitwcm9jIHNwZWNpZnlfZ3JpZCB7dHlwZSBzcGVjaWZpY2F0aW9ufSB7CisgIGlmIHshW2RpY3QgZXhpc3RzICRzcGVjaWZpY2F0aW9uIHR5cGVdfSB7CisgICAgZGljdCBzZXQgc3BlY2lmaWNhdGlvbiB0eXBlICR0eXBlCisgIH0KKyAgdmVyaWZ5X2dyaWQgJHNwZWNpZmljYXRpb24KK30KKworcHJvYyBnZXRfcXVhZHJhbnQge3JlY3QgeCB5fSB7CisgIHNldCBkdyBbZXhwciBbbGluZGV4ICRyZWN0IDJdIC0gW2xpbmRleCAkcmVjdCAwXV0KKyAgc2V0IGRoIFtleHByIFtsaW5kZXggJHJlY3QgM10gLSBbbGluZGV4ICRyZWN0IDFdXQorCisgIHNldCB0ZXN0X3ggW2V4cHIgJHggLSBbbGluZGV4ICRyZWN0IDBdXQorICBzZXQgdGVzdF95IFtleHByICR5IC0gW2xpbmRleCAkcmVjdCAxXV0KKyAgIyBkZWJ1ZyAiJGR3ICogJHRlc3RfeSAoW2V4cHIgJGR3ICogJHRlc3RfeV0pID4gZXhwciAkZGggKiAkdGVzdF94IChbZXhwciAkZGggKiAkdGVzdF94XSkiCisgIGlmIHskZHcgKiAkdGVzdF95ID4gJGRoICogJHRlc3RfeH0geworICAgICMgVG9wIG9yIGxlZnQKKyAgICBpZiB7KCRkdyAqICR0ZXN0X3kpICsgKCRkaCAqICR0ZXN0X3gpID4gKCRkdyAqICRkaCl9IHsKKyAgICAgICMgVG9wIG9yIHJpZ2h0CisgICAgICByZXR1cm4gInQiCisgICAgfSBlbHNlIHsKKyAgICAgICMgQm90dG9tIG9yIGxlZnQKKyAgICAgIHJldHVybiAibCIKKyAgICB9CisgIH0gZWxzZSB7CisgICAgIyBCb3R0b20gb3IgcmlnaHQKKyAgICBpZiB7KCRkdyAqICR0ZXN0X3kpICsgKCRkaCAqICR0ZXN0X3gpID4gKCRkdyAqICRkaCl9IHsKKyAgICAgICMgVG9wIG9yIHJpZ2h0CisgICAgICByZXR1cm4gInIiCisgICAgfSBlbHNlIHsKKyAgICAgICMgQm90dG9tIG9yIGxlZnQKKyAgICAgIHJldHVybiAiYiIKKyAgICB9CisgIH0KK30KKworcHJvYyBnZXRfZGVzaWduX3F1YWRyYW50IHt4IHl9IHsKKyAgdmFyaWFibGUgZGVzaWduX2RhdGEKKworICBzZXQgZGllX2FyZWEgW2RpY3QgZ2V0ICRkZXNpZ25fZGF0YSBjb25maWcgZGllX2FyZWFdCisgIHJldHVybiBbZ2V0X3F1YWRyYW50ICRkaWVfYXJlYSAkeCAkeV0KK30KKworcHJvYyBnZXRfY29yZV9mYWNpbmdfcGlucyB7aW5zdGFuY2UgcGluX25hbWUgc2lkZSBsYXllcn0geworICB2YXJpYWJsZSBibG9jaworICBzZXQgZ2VvbXMge30KKyAgc2V0IGNvcmVfcGlucyB7fQorICBzZXQgaW5zdCBbJGJsb2NrIGZpbmRJbnN0IFtkaWN0IGdldCAkaW5zdGFuY2UgbmFtZV1dCisgIGlmIHtbc2V0IGl0ZXJtIFskaW5zdCBmaW5kSVRlcm0gJHBpbl9uYW1lXV0gPT0gIk5VTEwifSB7CisgICAgdXRsOjp3YXJuICJQRE4iIDU1ICJDYW5ub3QgZmluZCBwaW4gJHBpbl9uYW1lIG9uIGluc3QgWyRpbnN0IGdldE5hbWVdLiIKKyAgICByZXR1cm4ge30KKyAgfQorICBpZiB7W3NldCBtdGVybSBbJGl0ZXJtIGdldE1UZXJtXV0gPT0gIk5VTEwifSB7CisgICAgdXRsOjp3YXJuICJQRE4iIDU2ICJDYW5ub3QgZmluZCBtYXN0ZXIgcGluICRwaW5fbmFtZSBmb3IgY2VsbCBbWyRpbnN0IGdldE1hc3Rlcl0gZ2V0TmFtZV0uIgorICAgIHJldHVybiB7fQorICB9CisgIHNldCBwaW5zIFskbXRlcm0gZ2V0TVBpbnNdCisKKyAgIyBkZWJ1ZyAic3RhcnQiCisgIGZvcmVhY2ggcGluICRwaW5zIHsKKyAgICBmb3JlYWNoIGdlb20gWyRwaW4gZ2V0R2VvbWV0cnldIHsKKyAgICAgIGlmIHtbWyRnZW9tIGdldFRlY2hMYXllcl0gZ2V0TmFtZV0gIT0gJGxheWVyfSB7Y29udGludWV9CisgICAgICBsYXBwZW5kIGdlb21zICRnZW9tCisgICAgfQorICB9CisgICMgZGVidWcgIiRwaW5zIgorICBmb3JlYWNoIGdlb20gJGdlb21zIHsKKyAgICBzZXQgaXBpbiBbdHJhbnNmb3JtX2JveCBbJGdlb20geE1pbl0gWyRnZW9tIHlNaW5dIFskZ2VvbSB4TWF4XSBbJGdlb20geU1heF0gWyRpbnN0IGdldE9yaWdpbl0gWyRpbnN0IGdldE9yaWVudF1dCisgICAgIyBkZWJ1ZyAiJGlwaW4gW1skaW5zdCBnZXRCQm94XSB4TWluXSBbWyRpbnN0IGdldEJCb3hdIHlNaW5dIFtbJGluc3QgZ2V0QkJveF0geE1heF0gW1skaW5zdCBnZXRCQm94XSB5TWF4XSAiCisgICAgc3dpdGNoICRzaWRlIHsKKyAgICAgICJ0IiB7CisgICAgICAgIGlmIHtbbGluZGV4ICRpcGluIDFdID09IFtbJGluc3QgZ2V0QkJveF0geU1pbl19IHsKKyAgICAgICAgICBsYXBwZW5kIGNvcmVfcGlucyBbbGlzdCBcCisgICAgICAgICAgICBjZW50cmUgW2V4cHIgKFtsaW5kZXggJGlwaW4gMl0gKyBbbGluZGV4ICRpcGluIDBdKSAvIDJdIFwKKyAgICAgICAgICAgIHdpZHRoIFtleHByIFtsaW5kZXggJGlwaW4gMl0gLSBbbGluZGV4ICRpcGluIDBdXSBcCisgICAgICAgICAgXQorICAgICAgICB9CisgICAgICB9CisgICAgICAiYiIgeworICAgICAgICBpZiB7W2xpbmRleCAkaXBpbiAzXSA9PSBbWyRpbnN0IGdldEJCb3hdIHlNYXhdfSB7CisgICAgICAgICAgbGFwcGVuZCBjb3JlX3BpbnMgW2xpc3QgXAorICAgICAgICAgICAgY2VudHJlIFtleHByIChbbGluZGV4ICRpcGluIDJdICsgW2xpbmRleCAkaXBpbiAwXSkgLyAyXSBcCisgICAgICAgICAgICB3aWR0aCBbZXhwciBbbGluZGV4ICRpcGluIDJdIC0gW2xpbmRleCAkaXBpbiAwXV0gXAorICAgICAgICAgIF0KKyAgICAgICAgfQorICAgICAgfQorICAgICAgImwiIHsKKyAgICAgICAgaWYge1tsaW5kZXggJGlwaW4gMl0gPT0gW1skaW5zdCBnZXRCQm94XSB4TWF4XX0geworICAgICAgICAgIGxhcHBlbmQgY29yZV9waW5zIFtsaXN0IFwKKyAgICAgICAgICAgIGNlbnRyZSBbZXhwciAoW2xpbmRleCAkaXBpbiAzXSArIFtsaW5kZXggJGlwaW4gMV0pIC8gMl0gXAorICAgICAgICAgICAgd2lkdGggW2V4cHIgW2xpbmRleCAkaXBpbiAzXSAtIFtsaW5kZXggJGlwaW4gMV1dIFwKKyAgICAgICAgICBdCisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgICJyIiB7CisgICAgICAgIGlmIHtbbGluZGV4ICRpcGluIDBdID09IFtbJGluc3QgZ2V0QkJveF0geE1pbl19IHsKKyAgICAgICAgICBsYXBwZW5kIGNvcmVfcGlucyBbbGlzdCBcCisgICAgICAgICAgICBjZW50cmUgW2V4cHIgKFtsaW5kZXggJGlwaW4gM10gKyBbbGluZGV4ICRpcGluIDFdKSAvIDJdIFwKKyAgICAgICAgICAgIHdpZHRoIFtleHByIFtsaW5kZXggJGlwaW4gM10gLSBbbGluZGV4ICRpcGluIDFdXSBcCisgICAgICAgICAgXQorICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisgICMgZGVidWcgIiRjb3JlX3BpbnMiCisgIHJldHVybiAkY29yZV9waW5zCit9CisKK3Byb2MgY29ubmVjdF9wYWRzX3RvX2NvcmVfcmluZyB7dHlwZSBwaW5fbmFtZSBwYWRzfSB7CisgIHZhcmlhYmxlIGdyaWRfZGF0YQorICB2YXJpYWJsZSBwYWRfY2VsbF9ibG9ja2FnZXMKKworICBkaWN0IGZvciB7aW5zdF9uYW1lIGluc3RhbmNlfSBbZmluZF9pbnN0YW5jZXNfb2YgJHBhZHNdIHsKKyAgICBzZXQgc2lkZSBbZ2V0X2Rlc2lnbl9xdWFkcmFudCBbZGljdCBnZXQgJGluc3RhbmNlIHhdIFtkaWN0IGdldCAkaW5zdGFuY2UgeV1dCisgICAgc3dpdGNoICRzaWRlIHsKKyAgICAgICJ0IiB7CisgICAgICAgIHNldCByZXF1aXJlZF9kaXJlY3Rpb24gInZlciIKKyAgICAgIH0KKyAgICAgICJiIiB7CisgICAgICAgIHNldCByZXF1aXJlZF9kaXJlY3Rpb24gInZlciIKKyAgICAgIH0KKyAgICAgICJsIiB7CisgICAgICAgIHNldCByZXF1aXJlZF9kaXJlY3Rpb24gImhvciIKKyAgICAgIH0KKyAgICAgICJyIiB7CisgICAgICAgIHNldCByZXF1aXJlZF9kaXJlY3Rpb24gImhvciIKKyAgICAgIH0KKyAgICB9CisgICAgZm9yZWFjaCBub25fcHJlZl9sYXllciBbZGljdCBrZXlzIFtkaWN0IGdldCAkZ3JpZF9kYXRhIGNvcmVfcmluZ11dIHsKKyAgICAgIGlmIHtbZ2V0X2RpciAkbm9uX3ByZWZfbGF5ZXJdICE9ICRyZXF1aXJlZF9kaXJlY3Rpb259IHsKKyAgICAgICAgc2V0IG5vbl9wcmVmX2xheWVyX2luZm8gW2RpY3QgZ2V0ICRncmlkX2RhdGEgY29yZV9yaW5nICRub25fcHJlZl9sYXllcl0KKyAgICAgICAgYnJlYWsKKyAgICAgIH0KKyAgICB9CisgICAgIyBkZWJ1ZyAiZmluZF9sYXllciIKKyAgICBmb3JlYWNoIHByZWZfbGF5ZXIgW2RpY3Qga2V5cyBbZGljdCBnZXQgJGdyaWRfZGF0YSBjb3JlX3JpbmddXSB7CisgICAgICBpZiB7W2dldF9kaXIgJHByZWZfbGF5ZXJdID09ICRyZXF1aXJlZF9kaXJlY3Rpb259IHsKKyAgICAgICAgYnJlYWsKKyAgICAgIH0KKyAgICB9CisgICAgc3dpdGNoICRzaWRlIHsKKyAgICAgICJ0IiB7CisgICAgICAgIHNldCB5X21pbiBbZXhwciBbZ2V0X2NvcmVfcmluZ19jZW50cmUgJHR5cGUgJHNpZGUgJG5vbl9wcmVmX2xheWVyX2luZm9dIC0gW2RpY3QgZ2V0ICRncmlkX2RhdGEgY29yZV9yaW5nICRub25fcHJlZl9sYXllciB3aWR0aF0gLyAyXQorICAgICAgICBzZXQgeV9taW5fYmxrIFtleHByICR5X21pbiAtIFtkaWN0IGdldCAkZ3JpZF9kYXRhIGNvcmVfcmluZyAkbm9uX3ByZWZfbGF5ZXIgc3BhY2luZ11dCisgICAgICAgIHNldCB5X21heCBbZGljdCBnZXQgJGluc3RhbmNlIHltaW5dCisgICAgICAgICMgZGVidWcgInQ6IFtkaWN0IGdldCAkaW5zdGFuY2UgeG1pbl0gJHlfbWluX2JsayBbZGljdCBnZXQgJGluc3RhbmNlIHhtYXhdIFtkaWN0IGdldCAkaW5zdGFuY2UgeW1heF0iCisgICAgICAgIGFkZF9wYWRjZWxsX2Jsb2NrYWdlICRwcmVmX2xheWVyIFtvZGI6Om5ld1NldEZyb21SZWN0IFtkaWN0IGdldCAkaW5zdGFuY2UgeG1pbl0gJHlfbWluX2JsayBbZGljdCBnZXQgJGluc3RhbmNlIHhtYXhdIFtkaWN0IGdldCAkaW5zdGFuY2UgeW1heF1dCisgICAgICB9CisgICAgICAiYiIgeworICAgICAgICAjIGRlYnVnICJbZ2V0X2NvcmVfcmluZ19jZW50cmUgJHR5cGUgJHNpZGUgJG5vbl9wcmVmX2xheWVyX2luZm9dICsgW2RpY3QgZ2V0ICRncmlkX2RhdGEgY29yZV9yaW5nICRub25fcHJlZl9sYXllciB3aWR0aF0gLyAyIgorICAgICAgICBzZXQgeV9tYXggW2V4cHIgW2dldF9jb3JlX3JpbmdfY2VudHJlICR0eXBlICRzaWRlICRub25fcHJlZl9sYXllcl9pbmZvXSArIFtkaWN0IGdldCAkZ3JpZF9kYXRhIGNvcmVfcmluZyAkbm9uX3ByZWZfbGF5ZXIgd2lkdGhdIC8gMl0KKyAgICAgICAgc2V0IHlfbWF4X2JsayBbZXhwciAkeV9tYXggKyBbZGljdCBnZXQgJGdyaWRfZGF0YSBjb3JlX3JpbmcgJG5vbl9wcmVmX2xheWVyIHNwYWNpbmddXQorICAgICAgICBzZXQgeV9taW4gW2RpY3QgZ2V0ICRpbnN0YW5jZSB5bWF4XQorICAgICAgICAjIGRlYnVnICJiOiBbZGljdCBnZXQgJGluc3RhbmNlIHhtaW5dIFtkaWN0IGdldCAkaW5zdGFuY2UgeW1pbl0gW2RpY3QgZ2V0ICRpbnN0YW5jZSB4bWF4XSAkeV9tYXgiCisgICAgICAgIGFkZF9wYWRjZWxsX2Jsb2NrYWdlICRwcmVmX2xheWVyIFtvZGI6Om5ld1NldEZyb21SZWN0IFtkaWN0IGdldCAkaW5zdGFuY2UgeG1pbl0gW2RpY3QgZ2V0ICRpbnN0YW5jZSB5bWluXSBbZGljdCBnZXQgJGluc3RhbmNlIHhtYXhdICR5X21heF9ibGtdCisgICAgICAgICMgZGVidWcgImVuZCBiIgorICAgICAgfQorICAgICAgImwiIHsKKyAgICAgICAgc2V0IHhfbWF4IFtleHByIFtnZXRfY29yZV9yaW5nX2NlbnRyZSAkdHlwZSAkc2lkZSAkbm9uX3ByZWZfbGF5ZXJfaW5mb10gKyBbZGljdCBnZXQgJGdyaWRfZGF0YSBjb3JlX3JpbmcgJG5vbl9wcmVmX2xheWVyIHdpZHRoXSAvIDJdCisgICAgICAgIHNldCB4X21heF9ibGsgW2V4cHIgJHhfbWF4ICsgW2RpY3QgZ2V0ICRncmlkX2RhdGEgY29yZV9yaW5nICRub25fcHJlZl9sYXllciBzcGFjaW5nXV0KKyAgICAgICAgc2V0IHhfbWluIFtkaWN0IGdldCAkaW5zdGFuY2UgeG1heF0KKyAgICAgICAgIyBkZWJ1ZyAibDogW2RpY3QgZ2V0ICRpbnN0YW5jZSB4bWluXSBbZGljdCBnZXQgJGluc3RhbmNlIHltaW5dICR4X21heCBbZGljdCBnZXQgJGluc3RhbmNlIHltYXhdIgorICAgICAgICBhZGRfcGFkY2VsbF9ibG9ja2FnZSAkcHJlZl9sYXllciBbb2RiOjpuZXdTZXRGcm9tUmVjdCBbZGljdCBnZXQgJGluc3RhbmNlIHhtaW5dIFtkaWN0IGdldCAkaW5zdGFuY2UgeW1pbl0gJHhfbWF4X2JsayBbZGljdCBnZXQgJGluc3RhbmNlIHltYXhdXQorICAgICAgfQorICAgICAgInIiIHsKKyAgICAgICAgc2V0IHhfbWluIFtleHByIFtnZXRfY29yZV9yaW5nX2NlbnRyZSAkdHlwZSAkc2lkZSAkbm9uX3ByZWZfbGF5ZXJfaW5mb10gLSBbZGljdCBnZXQgJGdyaWRfZGF0YSBjb3JlX3JpbmcgJG5vbl9wcmVmX2xheWVyIHdpZHRoXSAvIDJdCisgICAgICAgIHNldCB4X21pbl9ibGsgW2V4cHIgJHhfbWluIC0gW2RpY3QgZ2V0ICRncmlkX2RhdGEgY29yZV9yaW5nICRub25fcHJlZl9sYXllciBzcGFjaW5nXV0KKyAgICAgICAgc2V0IHhfbWF4IFtkaWN0IGdldCAkaW5zdGFuY2UgeG1pbl0KKyAgICAgICAgIyBkZWJ1ZyAicjogJHhfbWluX2JsayBbZGljdCBnZXQgJGluc3RhbmNlIHltaW5dIFtkaWN0IGdldCAkaW5zdGFuY2UgeG1heF0gW2RpY3QgZ2V0ICRpbnN0YW5jZSB5bWF4XSIKKyAgICAgICAgYWRkX3BhZGNlbGxfYmxvY2thZ2UgJHByZWZfbGF5ZXIgW29kYjo6bmV3U2V0RnJvbVJlY3QgJHhfbWluX2JsayBbZGljdCBnZXQgJGluc3RhbmNlIHltaW5dIFtkaWN0IGdldCAkaW5zdGFuY2UgeG1heF0gW2RpY3QgZ2V0ICRpbnN0YW5jZSB5bWF4XV0KKyAgICAgIH0KKyAgICB9CisKKyAgICAjIGRlYnVnICIkcHJlZl9sYXllciIKKyAgICBmb3JlYWNoIHBpbl9nZW9tZXRyeSBbZ2V0X2NvcmVfZmFjaW5nX3BpbnMgJGluc3RhbmNlICRwaW5fbmFtZSAkc2lkZSAkcHJlZl9sYXllcl0geworICAgICAgc2V0IGNlbnRyZSBbZGljdCBnZXQgJHBpbl9nZW9tZXRyeSBjZW50cmVdCisgICAgICBzZXQgd2lkdGggIFtkaWN0IGdldCAkcGluX2dlb21ldHJ5IHdpZHRoXQorCisgICAgICB2YXJpYWJsZSB0ZWNoCisgICAgICBpZiB7W1tzZXQgbGF5ZXIgWyR0ZWNoIGZpbmRMYXllciAkcHJlZl9sYXllcl1dIGdldE1heFdpZHRoXSAhPSAiTlVMTCIgJiYgJHdpZHRoID4gWyRsYXllciBnZXRNYXhXaWR0aF19IHsKKyAgICAgICAgc2V0IHdpZHRoIFskbGF5ZXIgZ2V0TWF4V2lkdGhdCisgICAgICB9CisgICAgICBpZiB7JHJlcXVpcmVkX2RpcmVjdGlvbiA9PSAiaG9yIn0geworICAgICAgICAjIGRlYnVnICJhZGRlZF9zdHJhcCAkcHJlZl9sYXllciAkdHlwZSAkeF9taW4gW2V4cHIgJGNlbnRyZSAtICR3aWR0aCAvIDJdICR4X21heCBbZXhwciAkY2VudHJlICsgJHdpZHRoIC8gMl0iCisgICAgICAgIGFkZF9zdHJpcGUgJHByZWZfbGF5ZXIgIlBBRF8kdHlwZSIgW29kYjo6bmV3U2V0RnJvbVJlY3QgJHhfbWluIFtleHByICRjZW50cmUgLSAkd2lkdGggLyAyXSAkeF9tYXggW2V4cHIgJGNlbnRyZSArICR3aWR0aCAvIDJdXQorICAgICAgfSBlbHNlIHsKKyAgICAgICAgIyBkZWJ1ZyAiYWRkZWRfc3RyYXAgJHByZWZfbGF5ZXIgJHR5cGUgW2V4cHIgJGNlbnRyZSAtICR3aWR0aCAvIDJdICR5X21pbiBbZXhwciAkY2VudHJlICsgJHdpZHRoIC8gMl0gJHlfbWF4IgorICAgICAgICBhZGRfc3RyaXBlICRwcmVmX2xheWVyICJQQURfJHR5cGUiIFtvZGI6Om5ld1NldEZyb21SZWN0IFtleHByICRjZW50cmUgLSAkd2lkdGggLyAyXSAkeV9taW4gW2V4cHIgJGNlbnRyZSArICR3aWR0aCAvIDJdICR5X21heF0KKyAgICAgIH0KKyAgICB9CisgIH0KKyAgIyBkZWJ1ZyAiZW5kIgorfQorCitwcm9jIGFkZF9wYWRfc3RyYXBzIHt0YWd9IHsKKyAgdmFyaWFibGUgc3RyaXBlX2xvY3MKKworICBmb3JlYWNoIHBhZF9jb25uZWN0aW9uIFthcnJheSBuYW1lcyBzdHJpcGVfbG9jcyAiKixQQURfKiJdIHsKKyAgICBpZiB7IVtyZWdleHAgIiguKiksUEFEXyR0YWciICRwYWRfY29ubmVjdGlvbiAtIGxheWVyXX0ge2NvbnRpbnVlfQorICAgICMgZGVidWcgIiRwYWRfY29ubmVjdGlvbiIKKyAgICBpZiB7W2FycmF5IG5hbWVzIHN0cmlwZV9sb2NzICIkbGF5ZXIsJHRhZyJdICE9ICIifSB7CisgICAgICAjIGRlYnVnIGFkZF9wYWRfc3RyYXBzICJCZWZvcmU6ICRsYXllciBbbGxlbmd0aCBbOjpvZGI6OmdldFBvbHlnb25zICRzdHJpcGVfbG9jcygkbGF5ZXIsJHRhZyldXSIKKyAgICAgICMgZGVidWcgYWRkX3BhZF9zdHJhcHMgIkFkZGluZzogW2xsZW5ndGggWzo6b2RiOjpnZXRQb2x5Z29ucyAkc3RyaXBlX2xvY3MoJHBhZF9jb25uZWN0aW9uKV1dIgorICAgICAgYWRkX3N0cmlwZSAkbGF5ZXIgJHRhZyAkc3RyaXBlX2xvY3MoJHBhZF9jb25uZWN0aW9uKQorICAgICAgIyBkZWJ1ZyBhZGRfcGFkX3N0cmFwcyAiQWZ0ZXI6ICAkbGF5ZXIgW2xsZW5ndGggWzo6b2RiOjpnZXRQb2x5Z29ucyAkc3RyaXBlX2xvY3MoJGxheWVyLCR0YWcpXV0iCisgICAgfQorICB9Cit9CisKK3Byb2MgcHJpbnRfc3BhY2luZ190YWJsZSB7bGF5ZXJfbmFtZX0geworICBzZXQgbGF5ZXIgW2ZpbmRfbGF5ZXIgJGxheWVyX25hbWVdCisgIGlmIHtbJGxheWVyIGhhc1R3b1dpZHRoc1NwYWNpbmdSdWxlc119IHsKKyAgICBzZXQgdGFibGVfc2l6ZSBbJGxheWVyIGdldFR3b1dpZHRoc1NwYWNpbmdUYWJsZU51bVdpZHRoc10KKyAgICBmb3Ige3NldCBpIDB9IHskaSA8ICR0YWJsZV9zaXplfSB7aW5jciBpfSB7CisgICAgICBzZXQgd2lkdGggWyRsYXllciBnZXRUd29XaWR0aHNTcGFjaW5nVGFibGVXaWR0aCAkaV0KKyAgICAgIHNldCByZXBvcnRfd2lkdGggIldJRFRIICR3aWR0aCIKKyAgICAgIGlmIHtbJGxheWVyIGdldFR3b1dpZHRoc1NwYWNpbmdUYWJsZUhhc1BSTCAkaV19IHsKKyAgICAgICAgc2V0IHBybCBbJGxheWVyIGdldFR3b1dpZHRoc1NwYWNpbmdUYWJsZVBSTCAkaV0KKyAgICAgICAgc2V0IHJlcG9ydF9wcmwgIiBQUkwgJHBybCIKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHNldCByZXBvcnRfcHJsICIiCisgICAgICB9CisgICAgICBzZXQgcmVwb3J0X3NwYWNpbmcgIiBbJGxheWVyIGdldFR3b1dpZHRoc1NwYWNpbmdUYWJsZUVudHJ5IDAgJGldICIKKyAgICB9CisgICAgdXRsOjpyZXBvcnQgIiR7cmVwb3J0X3dpZHRofSR7cmVwb3J0X3BybH0ke3JlcG9ydF9zcGFjaW5nfSIKKyAgfQorfQorCitwcm9jIGdldF90d293aWR0aHNfdGFibGUge3RhYmxlX3R5cGV9IHsKKyAgdmFyaWFibGUgbWV0YWxfbGF5ZXJzCisgIHNldCB0d293aWR0aHNfdGFibGUge30KKworICBmb3JlYWNoIGxheWVyX25hbWUgJG1ldGFsX2xheWVycyB7CisgICAgc2V0IHNwYWNpbmdfdGFibGUgW2dldF9zcGFjaW5ndGFibGVzICRsYXllcl9uYW1lXQorICAgIHNldCBwcmxzIHt9CisKKyAgICBpZiB7W2RpY3QgZXhpc3RzICRzcGFjaW5nX3RhYmxlIFRXT1dJRFRIUyAkdGFibGVfdHlwZV19IHsKKyAgICAgIHNldCBsYXllcl9zcGFjaW5nX3RhYmxlIFtkaWN0IGdldCAkc3BhY2luZ190YWJsZSBUV09XSURUSFMgJHRhYmxlX3R5cGVdCisgICAgICBzZXQgdGFibGVfc2l6ZSBbZGljdCBzaXplICRsYXllcl9zcGFjaW5nX3RhYmxlXQorICAgICAgc2V0IHRhYmxlX3dpZHRocyBbZGljdCBrZXlzICRsYXllcl9zcGFjaW5nX3RhYmxlXQorCisgICAgICBmb3Ige3NldCBpIDB9IHskaSA8ICR0YWJsZV9zaXplfSB7aW5jciBpfSB7CisKKyAgICAgICAgc2V0IHdpZHRoIFtsaW5kZXggJHRhYmxlX3dpZHRocyAkaV0KKyAgICAgICAgc2V0IHNwYWNpbmcgW2xpbmRleCBbZGljdCBnZXQgJGxheWVyX3NwYWNpbmdfdGFibGUgJHdpZHRoIHNwYWNpbmdzXSAkaV0KKworICAgICAgICBpZiB7W2RpY3QgZ2V0ICRsYXllcl9zcGFjaW5nX3RhYmxlICR3aWR0aCBwcmxdICE9IDB9IHsKKyAgICAgICAgICBzZXQgcHJsIFtkaWN0IGdldCAkbGF5ZXJfc3BhY2luZ190YWJsZSAkd2lkdGggcHJsXQorICAgICAgICAgIHNldCB1cGRhdGVfcHJscyB7fQorICAgICAgICAgIGRpY3QgZm9yIHtwcmxfZW50cnkgcHJsX3NldHRpbmd9ICRwcmxzIHsKKyAgICAgICAgICAgIGlmIHskcHJsIDw9IFtsaW5kZXggJHBybF9lbnRyeSAwXX0ge2JyZWFrfQorICAgICAgICAgICAgZGljdCBzZXQgdXBkYXRlX3BybHMgJHBybF9lbnRyeSAkcHJsX3NldHRpbmcKKyAgICAgICAgICAgIGRpY3Qgc2V0IHR3b3dpZHRoc190YWJsZSAkbGF5ZXJfbmFtZSAkd2lkdGggJHBybF9lbnRyeSAkcHJsX3NldHRpbmcKKyAgICAgICAgICB9CisgICAgICAgICAgZGljdCBzZXQgdXBkYXRlX3BybHMgJHBybCAkc3BhY2luZworICAgICAgICAgIGRpY3Qgc2V0IHR3b3dpZHRoc190YWJsZSAkbGF5ZXJfbmFtZSAkd2lkdGggJHBybCAkc3BhY2luZworICAgICAgICAgIHNldCBwcmxzICR1cGRhdGVfcHJscworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHNldCBwcmxzIHt9CisgICAgICAgICAgZGljdCBzZXQgcHJscyAwICRzcGFjaW5nCisgICAgICAgICAgZGljdCBzZXQgdHdvd2lkdGhzX3RhYmxlICRsYXllcl9uYW1lICR3aWR0aCAwICRzcGFjaW5nCisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKworICByZXR1cm4gJHR3b3dpZHRoc190YWJsZQorfQorCitwcm9jIGdldF90d293aWR0aHNfdGFibGVzIHt9IHsKKyAgdmFyaWFibGUgdHdvd2lkdGhzX3RhYmxlCisgIHZhcmlhYmxlIHR3b3dpZHRoc190YWJsZV93cm9uZ2RpcmVjdGlvbgorCisgIHNldCB0d293aWR0aHNfdGFibGUgW2dldF90d293aWR0aHNfdGFibGUgTk9ORV0KKyAgc2V0IHR3b3dpZHRoc190YWJsZV93cm9uZ2RpcmVjdGlvbiBbZ2V0X3R3b3dpZHRoc190YWJsZSBXUk9OR0RJUkVDVElPTl0KK30KKworcHJvYyBzZWxlY3RfZnJvbV90YWJsZSB7dGFibGUgd2lkdGh9IHsKKyAgZm9yZWFjaCB2YWx1ZSBbbHJldmVyc2UgW2xzb3J0IC1pbnRlZ2VyIFtkaWN0IGtleXMgJHRhYmxlXV1dIHsKKyAgICBpZiB7JHdpZHRoID4gJHZhbHVlfSB7CisgICAgICByZXR1cm4gJHZhbHVlCisgICAgfQorICB9CisgIHJldHVybiBbbGluZGV4IFtkaWN0IGtleXMgJHRhYmxlXSAwXQorfQorCitwcm9jIGdldF9wcmVmZXJyZWRfZGlyZWN0aW9uX3NwYWNpbmcge2xheWVyX25hbWUgd2lkdGggcHJsfSB7CisgIHZhcmlhYmxlIHR3b3dpZHRoc190YWJsZQorCisgICMgZGVidWcgIiRsYXllcl9uYW1lICR3aWR0aCAkcHJsIgorICAjIGRlYnVnICJ0d293aWR0aHNfdGFibGUgJHR3b3dpZHRoc190YWJsZSIKKyAgaWYgeyR0d293aWR0aHNfdGFibGUgPT0ge319IHsKKyAgICByZXR1cm4gW1tmaW5kX2xheWVyICRsYXllcl9uYW1lXSBnZXRTcGFjaW5nXQorICB9IGVsc2UgeworICAgIHNldCB3aWR0aF9rZXkgW3NlbGVjdF9mcm9tX3RhYmxlIFtkaWN0IGdldCAkdHdvd2lkdGhzX3RhYmxlICRsYXllcl9uYW1lXSAkd2lkdGhdCisgICAgc2V0IHBybF9rZXkgICBbc2VsZWN0X2Zyb21fdGFibGUgW2RpY3QgZ2V0ICR0d293aWR0aHNfdGFibGUgJGxheWVyX25hbWUgJHdpZHRoX2tleV0gJHBybF0KKyAgfQorCisgIHJldHVybiBbZGljdCBnZXQgJHR3b3dpZHRoc190YWJsZSAkbGF5ZXJfbmFtZSAkd2lkdGhfa2V5ICRwcmxfa2V5XQorfQorCitwcm9jIGdldF9ub25wcmVmZXJyZWRfZGlyZWN0aW9uX3NwYWNpbmcge2xheWVyX25hbWUgd2lkdGggcHJsfSB7CisgIHZhcmlhYmxlIHR3b3dpZHRoc190YWJsZV93cm9uZ2RpcmVjdGlvbgorCisgICMgZGVidWcgInR3b3dpZHRoc190YWJsZV93cm9uZ19kaXJlY3Rpb24gJHR3b3dpZHRoc190YWJsZV93cm9uZ2RpcmVjdGlvbiIKKyAgaWYge1tkaWN0IGV4aXN0cyAkdHdvd2lkdGhzX3RhYmxlX3dyb25nZGlyZWN0aW9uICRsYXllcl9uYW1lXX0geworICAgIHNldCB3aWR0aF9rZXkgW3NlbGVjdF9mcm9tX3RhYmxlIFtkaWN0IGdldCAkdHdvd2lkdGhzX3RhYmxlX3dyb25nZGlyZWN0aW9uICRsYXllcl9uYW1lXSAkd2lkdGhdCisgICAgc2V0IHBybF9rZXkgICBbc2VsZWN0X2Zyb21fdGFibGUgW2RpY3QgZ2V0ICR0d293aWR0aHNfdGFibGVfd3JvbmdkaXJlY3Rpb24gJGxheWVyX25hbWUgJHdpZHRoX2tleV0gJHBybF0KKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gW2dldF9wcmVmZXJyZWRfZGlyZWN0aW9uX3NwYWNpbmcgJGxheWVyX25hbWUgJHdpZHRoICRwcmxdCisgIH0KKworICByZXR1cm4gW2RpY3QgZ2V0ICR0d293aWR0aHNfdGFibGVfd3JvbmdkaXJlY3Rpb24gJGxheWVyX25hbWUgJHdpZHRoX2tleSAkcHJsX2tleV0KK30KKworcHJvYyBjcmVhdGVfb2JzdHJ1Y3Rpb25zIHtsYXllcl9uYW1lIHBvbHlnb25zfSB7CisgIHNldCBsYXllciBbZmluZF9sYXllciAkbGF5ZXJfbmFtZV0KKyAgc2V0IG1pbl9zcGFjaW5nIFtnZXRfcHJlZmVycmVkX2RpcmVjdGlvbl9zcGFjaW5nICRsYXllcl9uYW1lIDAgMF0KKworICAjIGRlYnVnICJOdW0gcG9seWdvbnMgW2xsZW5ndGggJHBvbHlnb25zXSIKKworICBmb3JlYWNoIHBvbHlnb24gJHBvbHlnb25zIHsKKyAgICBzZXQgcG9pbnRzIFs6Om9kYjo6Z2V0UG9pbnRzICRwb2x5Z29uXQorICAgIGlmIHtbbGxlbmd0aCAkcG9pbnRzXSAhPSA0fSB7CisgICAgICB1dGw6Ondhcm4gIlBETiIgNiAiVW5leHBlY3RlZCBudW1iZXIgb2YgcG9pbnRzIGluIHN0cmlwZSBvZiAkbGF5ZXJfbmFtZS4iCisgICAgICBjb250aW51ZQorICAgIH0KKyAgICBzZXQgeE1pbiBbZXhwciBtaW4oW1tsaW5kZXggJHBvaW50cyAwXSBnZXRYXSwgW1tsaW5kZXggJHBvaW50cyAxXSBnZXRYXSwgW1tsaW5kZXggJHBvaW50cyAyXSBnZXRYXSwgW1tsaW5kZXggJHBvaW50cyAzXSBnZXRYXSldCisgICAgc2V0IHhNYXggW2V4cHIgbWF4KFtbbGluZGV4ICRwb2ludHMgMF0gZ2V0WF0sIFtbbGluZGV4ICRwb2ludHMgMV0gZ2V0WF0sIFtbbGluZGV4ICRwb2ludHMgMl0gZ2V0WF0sIFtbbGluZGV4ICRwb2ludHMgM10gZ2V0WF0pXQorICAgIHNldCB5TWluIFtleHByIG1pbihbW2xpbmRleCAkcG9pbnRzIDBdIGdldFldLCBbW2xpbmRleCAkcG9pbnRzIDFdIGdldFldLCBbW2xpbmRleCAkcG9pbnRzIDJdIGdldFldLCBbW2xpbmRleCAkcG9pbnRzIDNdIGdldFldKV0KKyAgICBzZXQgeU1heCBbZXhwciBtYXgoW1tsaW5kZXggJHBvaW50cyAwXSBnZXRZXSwgW1tsaW5kZXggJHBvaW50cyAxXSBnZXRZXSwgW1tsaW5kZXggJHBvaW50cyAyXSBnZXRZXSwgW1tsaW5kZXggJHBvaW50cyAzXSBnZXRZXSldCisKKyAgICBpZiB7W2dldF9kaXIgJGxheWVyX25hbWVdID09ICJob3IifSB7CisgICAgICBzZXQgcmVxdWlyZWRfc3BhY2luZ19wcmVmICAgIFtnZXRfcHJlZmVycmVkX2RpcmVjdGlvbl9zcGFjaW5nICRsYXllcl9uYW1lIFtleHByICR5TWF4IC0gJHlNaW5dIFtleHByICR4TWF4IC0gJHhNaW5dXQorICAgICAgc2V0IHJlcXVpcmVkX3NwYWNpbmdfbm9ucHJlZiBbZ2V0X25vbnByZWZlcnJlZF9kaXJlY3Rpb25fc3BhY2luZyAkbGF5ZXJfbmFtZSBbZXhwciAkeE1heCAtICR4TWluXSBbZXhwciAkeU1heCAtICR5TWluXV0KKworICAgICAgc2V0IHlfY2hhbmdlIFtleHByICRyZXF1aXJlZF9zcGFjaW5nX3ByZWYgICAgLSAkbWluX3NwYWNpbmddCisgICAgICBzZXQgeF9jaGFuZ2UgW2V4cHIgJHJlcXVpcmVkX3NwYWNpbmdfbm9ucHJlZiAtICRtaW5fc3BhY2luZ10KKyAgICB9IGVsc2UgeworICAgICAgc2V0IHJlcXVpcmVkX3NwYWNpbmdfcHJlZiAgICBbZ2V0X3ByZWZlcnJlZF9kaXJlY3Rpb25fc3BhY2luZyAkbGF5ZXJfbmFtZSBbZXhwciAkeE1heCAtICR4TWluXSBbZXhwciAkeU1heCAtICR5TWluXV0KKyAgICAgIHNldCByZXF1aXJlZF9zcGFjaW5nX25vbnByZWYgW2dldF9ub25wcmVmZXJyZWRfZGlyZWN0aW9uX3NwYWNpbmcgJGxheWVyX25hbWUgW2V4cHIgJHlNYXggLSAkeU1pbl0gW2V4cHIgJHhNYXggLSAkeE1pbl1dCisKKyAgICAgIHNldCB4X2NoYW5nZSBbZXhwciAkcmVxdWlyZWRfc3BhY2luZ19wcmVmICAgIC0gJG1pbl9zcGFjaW5nXQorICAgICAgc2V0IHlfY2hhbmdlIFtleHByICRyZXF1aXJlZF9zcGFjaW5nX25vbnByZWYgLSAkbWluX3NwYWNpbmddCisgICAgfQorCisgICAgY3JlYXRlX29ic3RydWN0aW9uX29iamVjdF9ibG9ja2FnZSAkbGF5ZXIgJG1pbl9zcGFjaW5nIFtleHByICR4TWluIC0gJHhfY2hhbmdlXSBbZXhwciAkeU1pbiAtICR5X2NoYW5nZV0gW2V4cHIgJHhNYXggKyAkeF9jaGFuZ2VdIFtleHByICR5TWF4ICsgJHlfY2hhbmdlXQorICB9Cit9CisKK3Byb2MgY29tYmluZSB7bHNpZGUgcnNpZGV9IHsKKyAgIyBkZWJ1ZyAibCBbbGxlbmd0aCAkbHNpZGVdIHIgW2xsZW5ndGggJHJzaWRlXSIKKyAgaWYge1tsbGVuZ3RoICRsc2lkZV0gPiAxfSB7CisgICAgc2V0IGxzaWRlIFtjb21iaW5lIFtscmFuZ2UgJGxzaWRlIDAgW2V4cHIgW2xsZW5ndGggJGxzaWRlXSAvIDIgLSAxXV0gW2xyYW5nZSAkbHNpZGUgW2V4cHIgW2xsZW5ndGggJGxzaWRlXSAvIDJdIGVuZF1dCisgIH0KKyAgaWYge1tsbGVuZ3RoICRyc2lkZV0gPiAxfSB7CisgICAgc2V0IHJzaWRlIFtjb21iaW5lIFtscmFuZ2UgJHJzaWRlIDAgW2V4cHIgW2xsZW5ndGggJHJzaWRlXSAvIDIgLSAxXV0gW2xyYW5nZSAkcnNpZGUgW2V4cHIgW2xsZW5ndGggJHJzaWRlXSAvIDJdIGVuZF1dCisgIH0KKyAgcmV0dXJuIFtvZGI6Om9yU2V0ICRsc2lkZSAkcnNpZGVdCit9CisKK3Byb2Mgc2hhcGVzX3RvX3BvbHlnb25TZXQge3NoYXBlc30geworICBpZiB7W2xsZW5ndGggJHNoYXBlc10gPT0gMX0geworICAgIHJldHVybiAkc2hhcGVzCisgIH0KKyAgcmV0dXJuIFtjb21iaW5lIFtscmFuZ2UgJHNoYXBlcyAwIFtleHByIFtsbGVuZ3RoICRzaGFwZXNdIC8gMiAtIDFdXSBbbHJhbmdlICRzaGFwZXMgW2V4cHIgW2xsZW5ndGggJHNoYXBlc10gLyAyXSBlbmRdXQorfQorCitwcm9jIGdlbmVyYXRlX29ic3RydWN0aW9ucyB7bGF5ZXJfbmFtZX0geworICB2YXJpYWJsZSBzdHJpcGVfbG9jcworCisgICMgZGVidWcgImxheWVyICRsYXllcl9uYW1lIgorICBnZXRfdHdvd2lkdGhzX3RhYmxlcworCisgIHNldCBibG9ja19zaGFwZXMge30KKyAgZm9yZWFjaCB0YWcgeyJQT1dFUiIgIkdST1VORCJ9IHsKKyAgICBpZiB7W2FycmF5IG5hbWVzIHN0cmlwZV9sb2NzICRsYXllcl9uYW1lLCR0YWddID09ICIifSB7CisgICAgICAjIGRlYnVnICJObyBwb2x5Z29ucyBvbiAkbGF5ZXJfbmFtZSwkdGFnIgorICAgICAgY29udGludWUKKyAgICB9CisgICAgaWYgeyRibG9ja19zaGFwZXMgPT0ge319IHsKKyAgICAgIHNldCBibG9ja19zaGFwZXMgJHN0cmlwZV9sb2NzKCRsYXllcl9uYW1lLCR0YWcpCisgICAgfSBlbHNlIHsKKyAgICAgIHNldCBibG9ja19zaGFwZXMgW29kYjo6b3JTZXQgJGJsb2NrX3NoYXBlcyAkc3RyaXBlX2xvY3MoJGxheWVyX25hbWUsJHRhZyldCisgICAgfQorICB9CisgIHNldCB2aWFfc2hhcGVzIDAKKyAgdmFyaWFibGUgdmlhcworICAjIGRlYnVnICJ2aWFzIC0gW2xsZW5ndGggJHZpYXNdIgorICBmb3JlYWNoIHZpYSAkdmlhcyB7CisgICAgIyBGb3IgZWFjaCBsYXllciBiZXR3ZWVuIGwxIGFuZCBsMiwgYWRkIHZpYXMgYXQgdGhlIGludGVyc2VjdGlvbgorICAgIGZvcmVhY2ggdmlhX2luc3QgW2RpY3QgZ2V0ICR2aWEgY29ubmVjdGlvbnNdIHsKKyAgICAgICMgZGVidWcgIiR2aWFfaW5zdCIKKyAgICAgIHNldCB2aWFfbmFtZSBbZGljdCBnZXQgJHZpYV9pbnN0IG5hbWVdCisgICAgICBzZXQgeCAgICAgICAgW2RpY3QgZ2V0ICR2aWFfaW5zdCB4XQorICAgICAgc2V0IHkgICAgICAgIFtkaWN0IGdldCAkdmlhX2luc3QgeV0KKworICAgICAgc2V0IGxvd2VyX2xheWVyX25hbWUgW2xpbmRleCBbZGljdCBnZXQgJHZpYV9pbnN0IGxheWVyc10gMF0KKyAgICAgIHNldCB1cHBlcl9sYXllcl9uYW1lIFtsaW5kZXggW2RpY3QgZ2V0ICR2aWFfaW5zdCBsYXllcnNdIDJdCisKKyAgICAgIGlmIHskbG93ZXJfbGF5ZXJfbmFtZSA9PSAkbGF5ZXJfbmFtZSAmJiBbZGljdCBleGlzdHMgJHZpYV9pbnN0IGxvd2VyX3JlY3RdfSB7CisgICAgICAgIGxhcHBlbmQgYmxvY2tfc2hhcGVzIFtvZGI6Om5ld1NldEZyb21SZWN0IHsqfVt0cmFuc2Zvcm1fYm94IHsqfVtkaWN0IGdldCAkdmlhX2luc3QgbG93ZXJfcmVjdF0gW2xpc3QgJHggJHldICJSMCJdXQorICAgICAgICBpbmNyIHZpYV9zaGFwZXMKKyAgICAgIH0gZWxzZWlmIHskdXBwZXJfbGF5ZXJfbmFtZSA9PSAkbGF5ZXJfbmFtZSAmJiBbZGljdCBleGlzdHMgJHZpYV9pbnN0IHVwcGVyX3JlY3RdfSB7CisgICAgICAgIGxhcHBlbmQgYmxvY2tfc2hhcGVzIFtvZGI6Om5ld1NldEZyb21SZWN0IHsqfVt0cmFuc2Zvcm1fYm94IHsqfVtkaWN0IGdldCAkdmlhX2luc3QgdXBwZXJfcmVjdF0gW2xpc3QgJHggJHldICJSMCJdXQorICAgICAgICBpbmNyIHZpYV9zaGFwZXMKKyAgICAgIH0KKyAgICB9CisgIH0KKyAgIyBkZWJ1ZyAiVmlhIHNoYXBlcyAkbGF5ZXJfbmFtZSAkdmlhX3NoYXBlcyIKKyAgaWYgeyRibG9ja19zaGFwZXMgIT0ge319IHsKKyAgIyBkZWJ1ZyAiY3JlYXRlX29ic3RydWN0aW9ucyBbbGxlbmd0aCAkYmxvY2tfc2hhcGVzXSIKKyAgICBjcmVhdGVfb2JzdHJ1Y3Rpb25zICRsYXllcl9uYW1lIFtvZGI6OmdldFBvbHlnb25zIFtzaGFwZXNfdG9fcG9seWdvblNldCAkYmxvY2tfc2hhcGVzXV0KKyAgfQorICAjIGRlYnVnICJlbmQiCit9CisKK3Byb2MgY3JlYXRlX29ic3RydWN0aW9uX29iamVjdF9ibG9ja2FnZSB7bGF5ZXIgbWluX3NwYWNpbmcgeE1pbiB5TWluIHhNYXggeU1heH0geworICB2YXJpYWJsZSBibG9jaworCisKKyAgc2V0IGxheWVyX3BpdGNoIFtnZXRfcGl0Y2ggJGxheWVyXQorICBzZXQgbGF5ZXJfd2lkdGggWyRsYXllciBnZXRXaWR0aF0KKyAgIyBkZWJ1ZyAiTGF5ZXIgLSBbJGxheWVyIGdldE5hbWVdLCBwaXRjaCAkbGF5ZXJfcGl0Y2gsIHdpZHRoICRsYXllcl93aWR0aCIKKyAgc2V0IHRyYWNrcyBbJGJsb2NrIGZpbmRUcmFja0dyaWQgJGxheWVyXQorICBzZXQgb2Zmc2V0WCBbbGluZGV4IFskdHJhY2tzIGdldEdyaWRYXSAwXQorICBzZXQgb2Zmc2V0WSBbbGluZGV4IFskdHJhY2tzIGdldEdyaWRZXSAwXQorCisgICMgZGVidWcgIk9CUzogWyRsYXllciBnZXROYW1lXSAkeE1pbiAkeU1pbiAkeE1heCAkeU1heCAoZHggW2V4cHIgJHhNYXggLSAkeE1pbl0gZHkgW2V4cHIgJHlNYXggLSAkeU1pbl0pIgorICAjIGRlYnVnICJPZmZzZXRzOiB4ICRvZmZzZXRYIHkgJG9mZnNldFkiCisgIHNldCByZWxhdGl2ZV94TWluIFtleHByICR4TWluIC0gJG9mZnNldFhdCisgIHNldCByZWxhdGl2ZV94TWF4IFtleHByICR4TWF4IC0gJG9mZnNldFhdCisgIHNldCByZWxhdGl2ZV95TWluIFtleHByICR5TWluIC0gJG9mZnNldFldCisgIHNldCByZWxhdGl2ZV95TWF4IFtleHByICR5TWF4IC0gJG9mZnNldFldCisgICMgZGVidWcgInJlbGF0aXZlIHRvIGNvcmUgYXJlYSAkcmVsYXRpdmVfeE1pbiAkcmVsYXRpdmVfeU1pbiAkcmVsYXRpdmVfeE1heCAkcmVsYXRpdmVfeU1heCIKKworICAjIGRlYnVnICJPQlM6IFskbGF5ZXIgZ2V0TmFtZV0gJHhNaW4gJHlNaW4gJHhNYXggJHlNYXgiCisgICMgRGV0ZXJtaW5lIHdoaWNoIHRyYWNrcyBhcmUgYmxvY2tlZAorICBpZiB7W2dldF9kaXIgWyRsYXllciBnZXROYW1lXV0gPT0gImhvciJ9IHsKKyAgICBzZXQgcGl0Y2hfc3RhcnQgW2V4cHIgJHJlbGF0aXZlX3lNaW4gLyAkbGF5ZXJfcGl0Y2hdCisgICAgaWYgeyRyZWxhdGl2ZV95TWluICUgJGxheWVyX3BpdGNoID49ICgkbWluX3NwYWNpbmcgKyAkbGF5ZXJfd2lkdGggLyAyKX0geworICAgICAgaW5jciBwaXRjaF9zdGFydAorICAgIH0KKyAgICBzZXQgcGl0Y2hfZW5kIFtleHByICRyZWxhdGl2ZV95TWF4IC8gJGxheWVyX3BpdGNoXQorICAgIGlmIHskcmVsYXRpdmVfeU1heCAlICRsYXllcl9waXRjaCA+ICRsYXllcl93aWR0aCAvIDJ9IHsKKyAgICAgIGluY3IgcGl0Y2hfZW5kCisgICAgfQorICAgICMgZGVidWcgInBpdGNoOiBzdGFydCAkcGl0Y2hfc3RhcnQgZW5kICRwaXRjaF9lbmQiCisgICAgZm9yIHtzZXQgaSAkcGl0Y2hfc3RhcnR9IHskaSA8PSAkcGl0Y2hfZW5kfSB7aW5jciBpfSB7CisgICAgICBzZXQgb2JzIFtvZGI6OmRiT2JzdHJ1Y3Rpb25fY3JlYXRlICRibG9jayAkbGF5ZXIgXAorICAgICAgICAkeE1pbiBcCisgICAgICAgIFtleHByICRpICogJGxheWVyX3BpdGNoICsgJG9mZnNldFkgLSAkbGF5ZXJfd2lkdGggLyAyXSBcCisgICAgICAgICR4TWF4IFwKKyAgICAgICAgW2V4cHIgJGkgKiAkbGF5ZXJfcGl0Y2ggKyAkb2Zmc2V0WSArICRsYXllcl93aWR0aCAvIDJdIFwKKyAgICAgIF0KKyAgICB9CisgIH0gZWxzZSB7CisgICAgc2V0IHBpdGNoX3N0YXJ0IFtleHByICRyZWxhdGl2ZV94TWluIC8gJGxheWVyX3BpdGNoXQorICAgIGlmIHskcmVsYXRpdmVfeE1pbiAlICRsYXllcl9waXRjaCA+PSAoJG1pbl9zcGFjaW5nICsgJGxheWVyX3dpZHRoIC8gMil9IHsKKyAgICAgIGluY3IgcGl0Y2hfc3RhcnQKKyAgICB9CisgICAgc2V0IHBpdGNoX2VuZCBbZXhwciAkcmVsYXRpdmVfeE1heCAvICRsYXllcl9waXRjaF0KKyAgICBpZiB7JHJlbGF0aXZlX3hNYXggJSAkbGF5ZXJfcGl0Y2ggPiAkbGF5ZXJfd2lkdGggLyAyfSB7CisgICAgICBpbmNyIHBpdGNoX2VuZAorICAgIH0KKyAgICAjIGRlYnVnICJwaXRjaDogc3RhcnQgJHBpdGNoX3N0YXJ0IGVuZCAkcGl0Y2hfZW5kIgorICAgIGZvciB7c2V0IGkgJHBpdGNoX3N0YXJ0fSB7JGkgPD0gJHBpdGNoX2VuZH0ge2luY3IgaX0geworICAgICAgc2V0IG9icyBbb2RiOjpkYk9ic3RydWN0aW9uX2NyZWF0ZSAkYmxvY2sgJGxheWVyIFwKKyAgICAgICAgW2V4cHIgJGkgKiAkbGF5ZXJfcGl0Y2ggKyAkb2Zmc2V0WCAtICRsYXllcl93aWR0aCAvIDJdIFwKKyAgICAgICAgJHlNaW4gXAorICAgICAgICBbZXhwciAkaSAqICRsYXllcl9waXRjaCArICRvZmZzZXRYICsgJGxheWVyX3dpZHRoIC8gMl0gXAorICAgICAgICAkeU1heCBcCisgICAgICBdCisgICAgfQorICB9Cit9CisKK3Byb2MgY3JlYXRlX29ic3RydWN0aW9uX29iamVjdF9uZXQge2xheWVyIG1pbl9zcGFjaW5nIHhNaW4geU1pbiB4TWF4IHlNYXh9IHsKKyAgdmFyaWFibGUgYmxvY2sKKyAgdmFyaWFibGUgb2JzdHJ1Y3Rpb25faW5kZXgKKworICBpbmNyIG9ic3RydWN0aW9uX2luZGV4CisgIHNldCBuZXRfbmFtZSAib2JzdHJ1Y3Rpb25fJG9ic3RydWN0aW9uX2luZGV4IgorICBpZiB7W3NldCBvYnNfbmV0IFskYmxvY2sgZmluZE5ldCAkbmV0X25hbWVdXSA9PSAiTlVMTCJ9IHsKKyAgICBzZXQgb2JzX25ldCBbb2RiOjpkYk5ldF9jcmVhdGUgJGJsb2NrICRuZXRfbmFtZV0KKyAgfQorICAjIGRlYnVnICJvYnNfbmV0IFskb2JzX25ldCBnZXROYW1lXSIKKyAgaWYge1tzZXQgd2lyZSBbJG9ic19uZXQgZ2V0V2lyZV1dID09ICJOVUxMIn0geworICAgIHNldCB3aXJlIFtvZGI6OmRiV2lyZV9jcmVhdGUgJG9ic19uZXRdCisgIH0KKyAgIyBkZWJ1ZyAiV2lyZSAtIG5ldCBbWyR3aXJlIGdldE5ldF0gZ2V0TmFtZV0iCisgIHNldCBlbmNvZGVyIFtvZGI6OmRiV2lyZUVuY29kZXJdCisgICRlbmNvZGVyIGJlZ2luICR3aXJlCisKKyAgc2V0IGxheWVyX3BpdGNoIFskbGF5ZXIgZ2V0UGl0Y2hdCisgIHNldCBsYXllcl93aWR0aCBbJGxheWVyIGdldFdpZHRoXQorICAjIGRlYnVnICJMYXllciAtIFskbGF5ZXIgZ2V0TmFtZV0sIHBpdGNoICRsYXllcl9waXRjaCwgd2lkdGggJGxheWVyX3dpZHRoIgorICBzZXQgY29yZV9hcmVhIFtnZXRfY29yZV9hcmVhXQorICAjIGRlYnVnICJjb3JlX2FyZWEgJGNvcmVfYXJlYSIKKyAgc2V0IHJlbGF0aXZlX3hNaW4gW2V4cHIgJHhNaW4gLSBbbGluZGV4ICRjb3JlX2FyZWEgMF1dCisgIHNldCByZWxhdGl2ZV94TWF4IFtleHByICR4TWF4IC0gW2xpbmRleCAkY29yZV9hcmVhIDBdXQorICBzZXQgcmVsYXRpdmVfeU1pbiBbZXhwciAkeU1pbiAtIFtsaW5kZXggJGNvcmVfYXJlYSAxXV0KKyAgc2V0IHJlbGF0aXZlX3lNYXggW2V4cHIgJHlNYXggLSBbbGluZGV4ICRjb3JlX2FyZWEgMV1dCisgICMgZGVidWcgInJlbGF0aXZlIHRvIGNvcmUgYXJlYSAkcmVsYXRpdmVfeE1pbiAkcmVsYXRpdmVfeU1pbiAkcmVsYXRpdmVfeE1heCAkcmVsYXRpdmVfeU1heCIKKworICAjIGRlYnVnICJPQlM6IFskbGF5ZXIgZ2V0TmFtZV0gJHhNaW4gJHlNaW4gJHhNYXggJHlNYXgiCisgICMgRGV0ZXJtaW5lIHdoaWNoIHRyYWNrcyBhcmUgYmxvY2tlZAorICBpZiB7W2dldF9kaXIgWyRsYXllciBnZXROYW1lXV0gPT0gImhvciJ9IHsKKyAgICBzZXQgcGl0Y2hfc3RhcnQgW2V4cHIgJHJlbGF0aXZlX3lNaW4gLyAkbGF5ZXJfcGl0Y2hdCisgICAgaWYgeyRyZWxhdGl2ZV95TWluICUgJGxheWVyX3BpdGNoID4gKCRtaW5fc3BhY2luZyArICRsYXllcl93aWR0aCAvIDIpfSB7CisgICAgICBpbmNyIHBpdGNoX3N0YXJ0CisgICAgfQorICAgIHNldCBwaXRjaF9lbmQgW2V4cHIgJHJlbGF0aXZlX3lNYXggLyAkbGF5ZXJfcGl0Y2hdCisgICAgaWYgeyRyZWxhdGl2ZV95TWF4ICUgJGxheWVyX3BpdGNoID4gJGxheWVyX3dpZHRoIC8gMn0geworICAgICAgaW5jciBwaXRjaF9lbmQKKyAgICB9CisgICAgZm9yIHtzZXQgaSAkcGl0Y2hfc3RhcnR9IHskaSA8PSAkcGl0Y2hfZW5kfSB7aW5jciBpfSB7CisgICAgICAkZW5jb2RlciBuZXdQYXRoICRsYXllciBST1VURUQKKyAgICAgICRlbmNvZGVyIGFkZFBvaW50IFtleHByICRyZWxhdGl2ZV94TWluICsgW2xpbmRleCAkY29yZV9hcmVhIDBdXSBbZXhwciAkaSAqICRsYXllcl9waXRjaCArIFtsaW5kZXggJGNvcmVfYXJlYSAxXV0KKyAgICAgICRlbmNvZGVyIGFkZFBvaW50IFtleHByICRyZWxhdGl2ZV94TWF4ICsgW2xpbmRleCAkY29yZV9hcmVhIDBdXSBbZXhwciAkaSAqICRsYXllcl9waXRjaCArIFtsaW5kZXggJGNvcmVfYXJlYSAxXV0KKyAgICB9CisgIH0gZWxzZSB7CisgICAgc2V0IHBpdGNoX3N0YXJ0IFtleHByICRyZWxhdGl2ZV94TWluIC8gJGxheWVyX3BpdGNoXQorICAgIGlmIHskcmVsYXRpdmVfeE1pbiAlICRsYXllcl9waXRjaCA+ICgkbWluX3NwYWNpbmcgKyAkbGF5ZXJfd2lkdGggLyAyKX0geworICAgICAgaW5jciBwaXRjaF9zdGFydAorICAgIH0KKyAgICBzZXQgcGl0Y2hfZW5kIFtleHByICRyZWxhdGl2ZV94TWF4IC8gJGxheWVyX3BpdGNoXQorICAgIGlmIHskcmVsYXRpdmVfeE1heCAlICRsYXllcl9waXRjaCA+ICRsYXllcl93aWR0aCAvIDJ9IHsKKyAgICAgIGluY3IgcGl0Y2hfZW5kCisgICAgfQorICAgIGZvciB7c2V0IGkgJHBpdGNoX3N0YXJ0fSB7JGkgPD0gJHBpdGNoX2VuZH0ge2luY3IgaX0geworICAgICAgJGVuY29kZXIgbmV3UGF0aCAkbGF5ZXIgUk9VVEVECisgICAgICAkZW5jb2RlciBhZGRQb2ludCBbZXhwciAkaSAqICRsYXllcl9waXRjaCArIFtsaW5kZXggJGNvcmVfYXJlYSAwXV0gW2V4cHIgJHJlbGF0aXZlX3lNaW4gKyBbbGluZGV4ICRjb3JlX2FyZWEgMV1dCisgICAgICAkZW5jb2RlciBhZGRQb2ludCBbZXhwciAkaSAqICRsYXllcl9waXRjaCArIFtsaW5kZXggJGNvcmVfYXJlYSAwXV0gW2V4cHIgJHJlbGF0aXZlX3lNYXggKyBbbGluZGV4ICRjb3JlX2FyZWEgMV1dCisgICAgfQorICB9CisgICRlbmNvZGVyIGVuZAorfQorCitwcm9jIGFkZF9ncmlkIHt9IHsKKyAgdmFyaWFibGUgZGVzaWduX2RhdGEKKyAgdmFyaWFibGUgZ3JpZF9kYXRhCisKKyAgaWYge1tkaWN0IGV4aXN0cyAkZ3JpZF9kYXRhIGNvcmVfcmluZ119IHsKKyAgICBzZXQgYXJlYSBbZGljdCBnZXQgJGdyaWRfZGF0YSBhcmVhXQorICAgICMgZGVidWcgIkFyZWEgJGFyZWEiCisgICAgCisgICAgZ2VuZXJhdGVfY29yZV9yaW5ncyBbZGljdCBnZXQgJGdyaWRfZGF0YSBjb3JlX3JpbmddCisgICAgCisgICAgaWYge1tkaWN0IGV4aXN0cyAkZ3JpZF9kYXRhIGduZF9wYWRzXX0geworICAgICAgZGljdCBmb3Ige3Bpbl9uYW1lIGNlbGxzfSBbZGljdCBnZXQgJGdyaWRfZGF0YSBnbmRfcGFkc10geworICAgICAgICBjb25uZWN0X3BhZHNfdG9fY29yZV9yaW5nICJHUk9VTkQiICRwaW5fbmFtZSAkY2VsbHMKKyAgICAgIH0KKyAgICB9CisgICAgaWYge1tkaWN0IGV4aXN0cyAkZ3JpZF9kYXRhIHB3cl9wYWRzXX0geworICAgICAgZGljdCBmb3Ige3Bpbl9uYW1lIGNlbGxzfSBbZGljdCBnZXQgJGdyaWRfZGF0YSBwd3JfcGFkc10geworICAgICAgICBjb25uZWN0X3BhZHNfdG9fY29yZV9yaW5nICJQT1dFUiIgJHBpbl9uYW1lICRjZWxscworICAgICAgfQorICAgIH0KKyAgICAKKyAgICBnZW5lcmF0ZV92b2x0YWdlX2RvbWFpbl9yaW5ncyBbZGljdCBnZXQgJGdyaWRfZGF0YSBjb3JlX3JpbmddCisgICAgIyBtZXJnZV9zdHJpcGVzCisgICAgIyBzZXQgaW50ZXJzZWN0aW9ucyBbb2RiOjphbmRTZXQgJHN0cmlwZV9sb2NzKEcxLFBPV0VSKSAkc3RyaXBlX2xvY3MoRzIsUE9XRVIpXQorICAgICMgZGVidWcgIiMgaW50ZXJzZWN0aW9ucyBbbGxlbmd0aCBbb2RiOjpnZXRQb2x5Z29ucyAkaW50ZXJzZWN0aW9uc11dIgorICAgICMgZm9yZWFjaCBwd3JfbmV0IFtkaWN0IGdldCAkZGVzaWduX2RhdGEgcG93ZXJfbmV0c10geworICAgICMgICBnZW5lcmF0ZV9ncmlkX3ZpYXMgIlBPV0VSIiAkcHdyX25ldAorICAgICMgfQorICAgICMgZm9yZWFjaCBnbmRfbmV0IFtkaWN0IGdldCAkZGVzaWduX2RhdGEgZ3JvdW5kX25ldHNdIHsKKyAgICAjICAgZ2VuZXJhdGVfZ3JpZF92aWFzICJHUk9VTkQiICRnbmRfbmV0CisgICAgIyB9CisgICAgYXBwbHlfcGFkY2VsbF9ibG9ja2FnZXMKKyAgfQorCisgIHNldCBhcmVhIFtkaWN0IGdldCAkZ3JpZF9kYXRhIGFyZWFdCisKKyAgaWYge1tkaWN0IGV4aXN0cyAkZ3JpZF9kYXRhIHJhaWxzXX0geworICAgICMgZGVidWcgIkFkZGluZyBzdGRjZWxsIHJhaWxzIgorICAgICMgZGVidWcgImFyZWE6IFtkaWN0IGdldCAkZ3JpZF9kYXRhIGFyZWFdIgorICAgIHNldCBhcmVhIFtkaWN0IGdldCAkZ3JpZF9kYXRhIGFyZWFdCisgICAgIyBkZWJ1ZyAiQXJlYSAkYXJlYSIKKyAgICBnZW5lcmF0ZV9sb3dlcl9tZXRhbF9mb2xsb3dwaW5fcmFpbHMKKyAgfQorCisgICMjIFBvd2VyIG5ldHMKKyAgZm9yZWFjaCBwd3JfbmV0IFtkaWN0IGdldCAkZGVzaWduX2RhdGEgcG93ZXJfbmV0c10geworICAgIHNldCB0YWcgIlBPV0VSIgorICAgIGdlbmVyYXRlX3N0cmlwZXMgJHRhZyAkcHdyX25ldAorICB9CisKKyAgIyMgR3JvdW5kIG5ldHMKKyAgZm9yZWFjaCBnbmRfbmV0IFtkaWN0IGdldCAkZGVzaWduX2RhdGEgZ3JvdW5kX25ldHNdIHsKKyAgICBzZXQgdGFnICJHUk9VTkQiCisgICAgZ2VuZXJhdGVfc3RyaXBlcyAkdGFnICRnbmRfbmV0CisgIH0KKworICBtZXJnZV9zdHJpcGVzCisKKyAgIyMgUG93ZXIgbmV0cworICAjIGRlYnVnICJQb3dlciBzdHJhcHMiCisgIGZvcmVhY2ggcHdyX25ldCBbZGljdCBnZXQgJGRlc2lnbl9kYXRhIHBvd2VyX25ldHNdIHsKKyAgICBzZXQgdGFnICJQT1dFUiIKKyAgICBjdXRfYmxvY2tlZF9hcmVhcyAkdGFnCisgICAgYWRkX3BhZF9zdHJhcHMgJHRhZworICB9CisKKyAgIyMgR3JvdW5kIG5ldHMKKyAgIyBkZWJ1ZyAiR3JvdW5kIHN0cmFwcyIKKyAgZm9yZWFjaCBnbmRfbmV0IFtkaWN0IGdldCAkZGVzaWduX2RhdGEgZ3JvdW5kX25ldHNdIHsKKyAgICBzZXQgdGFnICJHUk9VTkQiCisgICAgY3V0X2Jsb2NrZWRfYXJlYXMgJHRhZworICAgIGFkZF9wYWRfc3RyYXBzICR0YWcKKyAgfQorICBtZXJnZV9zdHJpcGVzCisKKyAgaWYge1tkaWN0IGV4aXN0cyAkZ3JpZF9kYXRhIG9ic3RydWN0aW9uc119IHsKKyAgICB1dGw6OmluZm8gIlBETiIgMzIgIkdlbmVyYXRpbmcgYmxvY2thZ2VzIGZvciBUcml0b25Sb3V0ZS4iCisgICAgIyBkZWJ1ZyAiT2JzdHJ1Y3Rpb25zOiBbZGljdCBnZXQgJGdyaWRfZGF0YSBvYnN0cnVjdGlvbnNdIgorICAgIGZvcmVhY2ggbGF5ZXJfbmFtZSBbZGljdCBnZXQgJGdyaWRfZGF0YSBvYnN0cnVjdGlvbnNdIHsKKyAgICAgIGdlbmVyYXRlX29ic3RydWN0aW9ucyAkbGF5ZXJfbmFtZQorICAgIH0KKyAgfQorICAjIGRlYnVnICJlbmQiCit9CisKK3Byb2Mgc2VsZWN0X2luc3RhbmNlX3NwZWNpZmljYXRpb24ge2luc3RhbmNlfSB7CisgIHZhcmlhYmxlIGRlc2lnbl9kYXRhCisgIHZhcmlhYmxlIGluc3RhbmNlcworCisgIGlmIHshW2RpY3QgZXhpc3RzICRpbnN0YW5jZXMgJGluc3RhbmNlIGdyaWRdfSB7CisgICAgdXRsOjplcnJvciBQQUQgMjQ4ICJJbnN0YW5jZSAkaW5zdGFuY2UgaXMgbm90IGFzc29jaWF0ZWQgd2l0aCBhbnkgZ3JpZCIKKyAgfQorICByZXR1cm4gW2RpY3QgZ2V0ICRkZXNpZ25fZGF0YSBncmlkIG1hY3JvIFtkaWN0IGdldCAkaW5zdGFuY2VzICRpbnN0YW5jZSBncmlkXV0KK30KKworcHJvYyBnZXRfaW5zdGFuY2Vfc3BlY2lmaWNhdGlvbiB7aW5zdGFuY2V9IHsKKyAgdmFyaWFibGUgaW5zdGFuY2VzCisKKyAgc2V0IHNwZWNpZmljYXRpb24gW3NlbGVjdF9pbnN0YW5jZV9zcGVjaWZpY2F0aW9uICRpbnN0YW5jZV0KKworICBpZiB7IVtkaWN0IGV4aXN0cyAkc3BlY2lmaWNhdGlvbiBibG9ja2FnZXNdfSB7CisgICAgZGljdCBzZXQgc3BlY2lmaWNhdGlvbiBibG9ja2FnZXMge30KKyAgfQorICBkaWN0IHNldCBzcGVjaWZpY2F0aW9uIGFyZWEgW2RpY3QgZ2V0ICRpbnN0YW5jZXMgJGluc3RhbmNlIG1hY3JvX2JvdW5kYXJ5XQorCisgIHJldHVybiAkc3BlY2lmaWNhdGlvbgorfQorCitwcm9jIGdldF9waXRjaCB7bGF5ZXJ9IHsKKyAgaWYge1skbGF5ZXIgaGFzWFlQaXRjaF19IHsKKyAgICBpZiB7W2dldF9kaXIgWyRsYXllciBnZXROYW1lXV0gPT0gImhvciJ9IHsKKyAgICAgIHJldHVybiBbJGxheWVyIGdldFBpdGNoWV0KKyAgICB9IGVsc2UgeworICAgICAgcmV0dXJuIFskbGF5ZXIgZ2V0UGl0Y2hYXQorICAgIH0KKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gWyRsYXllciBnZXRQaXRjaF0KKyAgfQorfQorCitwcm9jIGdldF9sYXllcl9udW1iZXIge2xheWVyX25hbWV9IHsKKyAgc2V0IGxheWVyIFtbb3JkOjpnZXRfZGJfdGVjaF0gZmluZExheWVyICRsYXllcl9uYW1lXQorICBpZiB7JGxheWVyID09ICJOVUxMIn0geworICAgIHV0bDo6ZXJyb3IgUEROIDE2MCAiQ2Fubm90IGZpbmQgbGF5ZXIgJGxheWVyX25hbWUuIgorICB9CisgIHJldHVybiBbJGxheWVyIGdldE51bWJlcl0KK30KKworcHJvYyBpbml0X21ldGFsX2xheWVycyB7fSB7CisgIHZhcmlhYmxlIG1ldGFsX2xheWVycworICB2YXJpYWJsZSBsYXllcnMKKyAgdmFyaWFibGUgYmxvY2sKKworICBzZXQgdGVjaCBbb3JkOjpnZXRfZGJfdGVjaF0KKyAgc2V0IGJsb2NrIFtvcmQ6OmdldF9kYl9ibG9ja10KKyAgc2V0IG1ldGFsX2xheWVycyB7fQorCisgIGZvcmVhY2ggbGF5ZXIgWyR0ZWNoIGdldExheWVyc10geworICAgIGlmIHtbJGxheWVyIGdldFR5cGVdID09ICJST1VUSU5HIn0geworICAgICAgc2V0X3Byb3BfbGluZXMgJGxheWVyIExFRjU4X1RZUEUKKyAgICAgICMgTGF5ZXJzIHRoYXQgaGF2ZSBMRUY1OF9UWVBFIGFyZSBub3Qgbm9ybWFsIFJPVVRJTkcgbGF5ZXJzLCBzbyBzaG91bGQgbm90IGJlIGNvbnNpZGVyZWQKKyAgICAgIGlmIHshW2VtcHR5X3Byb3BsaW5lXX0ge2NvbnRpbnVlfQorCisgICAgICBzZXQgbGF5ZXJfbmFtZSBbJGxheWVyIGdldE5hbWVdCisgICAgICBsYXBwZW5kIG1ldGFsX2xheWVycyAkbGF5ZXJfbmFtZQorCisgICAgICAjIGRlYnVnICJEaXJlY3Rpb24gKCRsYXllcl9uYW1lKTogWyRsYXllciBnZXREaXJlY3Rpb25dIgorICAgICAgaWYge1skbGF5ZXIgZ2V0RGlyZWN0aW9uXSA9PSAiSE9SSVpPTlRBTCJ9IHsKKyAgICAgICAgZGljdCBzZXQgbGF5ZXJzICRsYXllcl9uYW1lIGRpcmVjdGlvbiAiaG9yIgorICAgICAgfSBlbHNlIHsKKyAgICAgICAgZGljdCBzZXQgbGF5ZXJzICRsYXllcl9uYW1lIGRpcmVjdGlvbiAidmVyIgorICAgICAgfQorICAgICAgZGljdCBzZXQgbGF5ZXJzICRsYXllcl9uYW1lIHBpdGNoIFtnZXRfcGl0Y2ggJGxheWVyXQorCisgICAgICBzZXQgdHJhY2tzIFskYmxvY2sgZmluZFRyYWNrR3JpZCAkbGF5ZXJdCisgICAgICBpZiB7JHRyYWNrcyA9PSAiTlVMTCJ9IHsKKyAgICAgICAgdXRsOjp3YXJuICJQRE4iIDM1ICJObyB0cmFjayBpbmZvcm1hdGlvbiBmb3VuZCBmb3IgbGF5ZXIgJGxheWVyX25hbWUuIgorICAgICAgfSBlbHNlIHsKKyAgICAgICAgZGljdCBzZXQgbGF5ZXJzICRsYXllcl9uYW1lIG9mZnNldFggW2xpbmRleCBbJHRyYWNrcyBnZXRHcmlkWF0gMF0KKyAgICAgICAgZGljdCBzZXQgbGF5ZXJzICRsYXllcl9uYW1lIG9mZnNldFkgW2xpbmRleCBbJHRyYWNrcyBnZXRHcmlkWV0gMF0KKyAgICAgIH0KKyAgICB9CisgIH0KK30KKworcHJvYyBnZXRfaW5zdGFuY2VfbGx4IHtpbnN0YW5jZX0geworICB2YXJpYWJsZSBpbnN0YW5jZXMKKyAgcmV0dXJuIFtsaW5kZXggW2RpY3QgZ2V0ICRpbnN0YW5jZXMgJGluc3RhbmNlIGhhbG9fYm91bmRhcnldIDBdCit9CisKK3Byb2MgZ2V0X2luc3RhbmNlX2xseSB7aW5zdGFuY2V9IHsKKyAgdmFyaWFibGUgaW5zdGFuY2VzCisgIHJldHVybiBbbGluZGV4IFtkaWN0IGdldCAkaW5zdGFuY2VzICRpbnN0YW5jZSBoYWxvX2JvdW5kYXJ5XSAxXQorfQorCitwcm9jIGdldF9pbnN0YW5jZV91cngge2luc3RhbmNlfSB7CisgIHZhcmlhYmxlIGluc3RhbmNlcworICByZXR1cm4gW2xpbmRleCBbZGljdCBnZXQgJGluc3RhbmNlcyAkaW5zdGFuY2UgaGFsb19ib3VuZGFyeV0gMl0KK30KKworcHJvYyBnZXRfaW5zdGFuY2VfdXJ5IHtpbnN0YW5jZX0geworICB2YXJpYWJsZSBpbnN0YW5jZXMKKyAgcmV0dXJuIFtsaW5kZXggW2RpY3QgZ2V0ICRpbnN0YW5jZXMgJGluc3RhbmNlIGhhbG9fYm91bmRhcnldIDNdCit9CisKK3Byb2MgZ2V0X21hY3JvX2Jsb2NrYWdlX2xheWVycyB7aW5zdGFuY2V9IHsKKyAgdmFyaWFibGUgbWV0YWxfbGF5ZXJzCisKKyAgc2V0IHNwZWNpZmljYXRpb24gW3NlbGVjdF9pbnN0YW5jZV9zcGVjaWZpY2F0aW9uICRpbnN0YW5jZV0KKyAgaWYge1tkaWN0IGV4aXN0cyAkc3BlY2lmaWNhdGlvbiBibG9ja2FnZXNdfSB7CisgICAgIyBkZWJ1ZyAiQmxvY2sgW2RpY3QgZ2V0ICRzcGVjaWZpY2F0aW9uIGJsb2NrYWdlc10gZm9yICRpbnN0YW5jZSIKKyAgICByZXR1cm4gW2RpY3QgZ2V0ICRzcGVjaWZpY2F0aW9uIGJsb2NrYWdlc10KKyAgfQorICByZXR1cm4gJG1ldGFsX2xheWVycworfQorCitwcm9jIHJlcG9ydF9sYXllcl9kZXRhaWxzIHtsYXllcn0geworICB2YXJpYWJsZSBkZWZfdW5pdHMKKworICBzZXQgc3RyICIgLSAiCisgIGZvcmVhY2ggZWxlbWVudCB7d2lkdGggcGl0Y2ggc3BhY2luZyBvZmZzZXQgcGFkX29mZnNldCBjb3JlX29mZnNldH0geworICAgIGlmIHtbZGljdCBleGlzdHMgJGxheWVyICRlbGVtZW50XX0geworICAgICAgc2V0IHN0ciBbZm9ybWF0ICIkc3RyICRlbGVtZW50OiAlLjNmICIgW2V4cHIgMS4wICogW2RpY3QgZ2V0ICRsYXllciAkZWxlbWVudF0gLyAkZGVmX3VuaXRzXV0KKyAgICB9CisgIH0KKyAgcmV0dXJuICRzdHIKK30KKworcHJvYyBwcmludF9zdHJhdGVneSB7dHlwZSBzcGVjaWZpY2F0aW9ufSB7CisgIGlmIHtbZGljdCBleGlzdHMgJHNwZWNpZmljYXRpb24gbmFtZV19IHsKKyAgICBzZXQgaGVhZGVyICJUeXBlOiAke3R5cGV9LCBbZGljdCBnZXQgJHNwZWNpZmljYXRpb24gbmFtZV0iCisgIH0gZWxzZSB7CisgICAgc2V0IGhlYWRlciAiVHlwZTogJHR5cGUiCisgIH0KKworICBpZiB7JHR5cGUgPT0gIm1hY3JvIn0geworICAgIGlmIHtbZGljdCBleGlzdHMgJHNwZWNpZmljYXRpb24gZ3JpZF9vdmVyX3BnX3BpbnNdfSB7CisgICAgICBpZiB7W2RpY3QgZ2V0ICRzcGVjaWZpY2F0aW9uIGdyaWRfb3Zlcl9wZ19waW5zXSA9PSAxfSB7CisgICAgICAgIHNldCBoZWFkZXIgIiRoZWFkZXIgLWdyaWRfb3Zlcl9wZ19waW5zIgorICAgICAgfSBlbHNlIHsKKyAgICAgICAgc2V0IGhlYWRlciAiJGhlYWRlciAtZ3JpZF9vdmVyX2JvdW5kYXJ5IgorICAgICAgfQorICAgIH0KKyAgfQorCisgIHV0bDo6cmVwb3J0ICRoZWFkZXIKKworICBpZiB7W2RpY3QgZXhpc3RzICRzcGVjaWZpY2F0aW9uIGNvcmVfcmluZ119IHsKKyAgICB1dGw6OnJlcG9ydCAiICAgIENvcmUgUmluZ3MiCisgICAgZGljdCBmb3Ige2xheWVyX25hbWUgbGF5ZXJ9IFtkaWN0IGdldCAkc3BlY2lmaWNhdGlvbiBjb3JlX3JpbmddIHsKKyAgICAgIHNldCBzdHIgIiAgICAgIExheWVyOiAkbGF5ZXJfbmFtZSIKKyAgICAgIGlmIHtbZGljdCBleGlzdHMgJGxheWVyIHdpZHRoXX0geworICAgICAgICBzZXQgc3RyICIkc3RyIFtyZXBvcnRfbGF5ZXJfZGV0YWlscyAkbGF5ZXJdIgorICAgICAgICB1dGw6OnJlcG9ydCAkc3RyCisgICAgICB9IGVsc2UgeworICAgICAgICB1dGw6OnJlcG9ydCAkc3RyCisgICAgICAgIGZvcmVhY2ggdGVtcGxhdGUgW2RpY3Qga2V5cyAkbGF5ZXJdIHsKKyAgICAgICAgICB1dGw6OnJlcG9ydCAtbm9uZXdsaW5lIFtmb3JtYXQgIiAgICAgICAgICAlLTE0cyAlcyIgJHRlbXBsYXRlIFtyZXBvcnRfbGF5ZXJfZGV0YWlscyBbZGljdCBnZXQgJGxheWVyICR0ZW1wbGF0ZV1dXQorICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisgIGlmIHtbZGljdCBleGlzdHMgJHNwZWNpZmljYXRpb24gcmFpbHNdfSB7CisgICAgdXRsOjpyZXBvcnQgIiAgICBTdGRjZWxsIFJhaWxzIgorICAgIGRpY3QgZm9yIHtsYXllcl9uYW1lIGxheWVyfSBbZGljdCBnZXQgJHNwZWNpZmljYXRpb24gcmFpbHNdIHsKKyAgICAgIGlmIHtbZGljdCBleGlzdHMgJGxheWVyIHdpZHRoXX0geworICAgICAgICB1dGw6OnJlcG9ydCAiICAgICAgTGF5ZXI6ICRsYXllcl9uYW1lIFtyZXBvcnRfbGF5ZXJfZGV0YWlscyAkbGF5ZXJdIgorICAgICAgfSBlbHNlIHsKKyAgICAgICAgdXRsOjpyZXBvcnQgIiAgICAgIExheWVyOiAkbGF5ZXJfbmFtZSIKKyAgICAgICAgZm9yZWFjaCB0ZW1wbGF0ZSBbZGljdCBrZXlzICRsYXllcl0geworICAgICAgICAgIHV0bDo6cmVwb3J0IFtmb3JtYXQgIiAgICAgICAgICAlLTE0cyAlcyIgJHRlbXBsYXRlIFtyZXBvcnRfbGF5ZXJfZGV0YWlscyBbZGljdCBnZXQgJGxheWVyICR0ZW1wbGF0ZV1dXQorICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisgIGlmIHtbZGljdCBleGlzdHMgJHNwZWNpZmljYXRpb24gaW5zdGFuY2VdfSB7CisgICAgdXRsOjpyZXBvcnQgIiAgICBJbnN0YW5jZTogW2RpY3QgZ2V0ICRzcGVjaWZpY2F0aW9uIGluc3RhbmNlXSIKKyAgfQorICBpZiB7W2RpY3QgZXhpc3RzICRzcGVjaWZpY2F0aW9uIG1hY3JvXX0geworICAgIHV0bDo6cmVwb3J0ICIgICAgTWFjcm86IFtkaWN0IGdldCAkc3BlY2lmaWNhdGlvbiBtYWNyb10iCisgIH0KKyAgaWYge1tkaWN0IGV4aXN0cyAkc3BlY2lmaWNhdGlvbiBvcmllbnRdfSB7CisgICAgdXRsOjpyZXBvcnQgIiAgICBNYWNybyBvcmllbnRhdGlvbjogW2RpY3QgZ2V0ICRzcGVjaWZpY2F0aW9uIG9yaWVudF0iCisgIH0KKyAgaWYge1tkaWN0IGV4aXN0cyAkc3BlY2lmaWNhdGlvbiBzdHJhcHNdfSB7CisgICAgdXRsOjpyZXBvcnQgIiAgICBTdHJhcHMiCisgICAgZGljdCBmb3Ige2xheWVyX25hbWUgbGF5ZXJ9IFtkaWN0IGdldCAkc3BlY2lmaWNhdGlvbiBzdHJhcHNdIHsKKyAgICAgIGlmIHtbZGljdCBleGlzdHMgJGxheWVyIHdpZHRoXX0geworICAgICAgICB1dGw6OnJlcG9ydCAiICAgICAgTGF5ZXI6ICRsYXllcl9uYW1lIFtyZXBvcnRfbGF5ZXJfZGV0YWlscyAkbGF5ZXJdIgorICAgICAgfSBlbHNlIHsKKyAgICAgICAgdXRsOjpyZXBvcnQgIiAgICAgIExheWVyOiAkbGF5ZXJfbmFtZSIKKyAgICAgICAgZm9yZWFjaCB0ZW1wbGF0ZSBbZGljdCBrZXlzICRsYXllcl0geworICAgICAgICAgIHV0bDo6cmVwb3J0IFtmb3JtYXQgIiAgICAgICAgICAlLTE0cyAlcyIgJHRlbXBsYXRlIFtyZXBvcnRfbGF5ZXJfZGV0YWlscyBbZGljdCBnZXQgJGxheWVyICR0ZW1wbGF0ZV1dXQorICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisgIGlmIHtbZGljdCBleGlzdHMgJHNwZWNpZmljYXRpb24gY29ubmVjdF19IHsKKyAgICB1dGw6OnJlcG9ydCAiICAgIENvbm5lY3Q6IFtkaWN0IGdldCAkc3BlY2lmaWNhdGlvbiBjb25uZWN0XSIKKyAgfQorfQorCitwcm9jIHJlYWRfdGVtcGxhdGVfcGxhY2VtZW50IHt9IHsKKyAgdmFyaWFibGUgcGxhbl90ZW1wbGF0ZQorICB2YXJpYWJsZSBkZWZfdW5pdHMKKyAgdmFyaWFibGUgcHJvcF9saW5lCisKKyAgaWYgeyFbaXNfZGVmaW5lZF9wZG5fcHJvcGVydHkgInBsYW5fdGVtcGxhdGUiXX0geworICAgIGRlZmluZV90ZW1wbGF0ZV9ncmlkCisgIH0gZWxzZSB7CisgICAgc2V0IHBsYW5fdGVtcGxhdGUge30KKyAgICBzZXQgcHJvcF9saW5lIFtnZXRfcGRuX3N0cmluZ19wcm9wZXJ0eV92YWx1ZSAicGxhbl90ZW1wbGF0ZSJdCisgICAgd2hpbGUgeyFbZW1wdHlfcHJvcGxpbmVdfSB7CisgICAgICBzZXQgbGluZSBbcmVhZF9wcm9wbGluZV0KKyAgICAgIGlmIHtbbGxlbmd0aCAkbGluZV0gPT0gMH0ge2NvbnRpbnVlfQorICAgICAgc2V0IHggIFtleHByIHJvdW5kKFtsaW5kZXggJGxpbmUgMF0gKiAkZGVmX3VuaXRzKV0KKyAgICAgIHNldCB5ICBbZXhwciByb3VuZChbbGluZGV4ICRsaW5lIDFdICogJGRlZl91bml0cyldCisgICAgICBzZXQgeDEgW2V4cHIgcm91bmQoW2xpbmRleCAkbGluZSAyXSAqICRkZWZfdW5pdHMpXQorICAgICAgc2V0IHkxIFtleHByIHJvdW5kKFtsaW5kZXggJGxpbmUgM10gKiAkZGVmX3VuaXRzKV0KKyAgICAgIHNldCB0ZW1wbGF0ZSBbbGluZGV4ICRsaW5lIGVuZF0KKworICAgICAgZGljdCBzZXQgcGxhbl90ZW1wbGF0ZSAkeCAkeSAkdGVtcGxhdGUKKyAgICB9CisgIH0KK30KKworcHJvYyBpc19kZWZpbmVkX3Bkbl9wcm9wZXJ0eSB7bmFtZX0geworICB2YXJpYWJsZSBibG9jaworCisgIGlmIHtbc2V0IHBkbl9wcm9wcyBbOjpvZGI6OmRiQm9vbFByb3BlcnR5X2ZpbmQgJGJsb2NrIFBETl1dID09ICJOVUxMIn0geworICAgIHJldHVybiAwCisgIH0KKworICBpZiB7Wzo6b2RiOjpkYlN0cmluZ1Byb3BlcnR5X2ZpbmQgJHBkbl9wcm9wcyAkbmFtZV0gPT0gIk5VTEwifSB7CisgICAgcmV0dXJuIDAKKyAgfQorICByZXR1cm4gMQorfQorCitwcm9jIGdldF9wZG5fc3RyaW5nX3Byb3BlcnR5IHtuYW1lfSB7CisgIHZhcmlhYmxlIGJsb2NrCisKKyAgaWYge1tzZXQgcGRuX3Byb3BzIFs6Om9kYjo6ZGJCb29sUHJvcGVydHlfZmluZCAkYmxvY2sgUEROXV0gPT0gIk5VTEwifSB7CisgICAgc2V0IHBkbl9wcm9wcyBbOjpvZGI6OmRiQm9vbFByb3BlcnR5X2NyZWF0ZSAkYmxvY2sgUEROIDFdCisgIH0KKworICBpZiB7W3NldCBwcm9wIFs6Om9kYjo6ZGJTdHJpbmdQcm9wZXJ0eV9maW5kICRwZG5fcHJvcHMgJG5hbWVdXSA9PSAiTlVMTCJ9IHsKKyAgICBzZXQgcHJvcCBbOjpvZGI6OmRiU3RyaW5nUHJvcGVydHlfY3JlYXRlICRwZG5fcHJvcHMgJG5hbWUgIiJdCisgIH0KKworICByZXR1cm4gJHByb3AKK30KKworcHJvYyBzZXRfcGRuX3N0cmluZ19wcm9wZXJ0eV92YWx1ZSB7bmFtZSB2YWx1ZX0geworICBzZXQgcHJvcCBbZ2V0X3Bkbl9zdHJpbmdfcHJvcGVydHkgJG5hbWVdCisgICRwcm9wIHNldFZhbHVlICR2YWx1ZQorfQorCitwcm9jIGdldF9wZG5fc3RyaW5nX3Byb3BlcnR5X3ZhbHVlIHtuYW1lfSB7CisgIHNldCBwcm9wIFtnZXRfcGRuX3N0cmluZ19wcm9wZXJ0eSAkbmFtZV0KKworICByZXR1cm4gWyRwcm9wIGdldFZhbHVlXQorfQorCitwcm9jIHdyaXRlX3RlbXBsYXRlX3BsYWNlbWVudCB7fSB7CisgIHZhcmlhYmxlIHBsYW5fdGVtcGxhdGUKKyAgdmFyaWFibGUgdGVtcGxhdGUKKyAgdmFyaWFibGUgZGVmX3VuaXRzCisKKyAgc2V0IHN0ciAiIgorICBmb3JlYWNoIHggW2xzb3J0IC1pbnRlZ2VyIFtkaWN0IGtleXMgJHBsYW5fdGVtcGxhdGVdXSB7CisgICAgZm9yZWFjaCB5IFtsc29ydCAtaW50ZWdlciBbZGljdCBrZXlzIFtkaWN0IGdldCAkcGxhbl90ZW1wbGF0ZSAkeF1dXSB7CisgICAgICBzZXQgc3RyIFtmb3JtYXQgIiR7c3RyfSUuM2YgJS4zZiAlLjNmICUuM2YgJXMgO1xuIiBcCisgICAgICAgIFtleHByIDEuMCAqICR4IC8gJGRlZl91bml0c10gW2V4cHIgMS4wICogJHkgLyAkZGVmX3VuaXRzXSBcCisgICAgICAgIFtleHByIDEuMCAqICgkeCArIFtkaWN0IGdldCAkdGVtcGxhdGUgd2lkdGhdKSAvICRkZWZfdW5pdHNdIFtleHByIDEuMCAqICgkeSArIFtkaWN0IGdldCAkdGVtcGxhdGUgaGVpZ2h0XSkgLyAkZGVmX3VuaXRzXSBcCisgICAgICAgIFtkaWN0IGdldCAkcGxhbl90ZW1wbGF0ZSAkeCAkeV0KKyAgICAgIF0KKyAgICB9CisgIH0KKworICBzZXRfcGRuX3N0cmluZ19wcm9wZXJ0eV92YWx1ZSAicGxhbl90ZW1wbGF0ZSIgJHN0cgorfQorCitwcm9jIGdldF9leHRlbnQge3BvbHlnb25fc2V0fSB7CisgIHNldCBmaXJzdF9wb2ludCAgW2xpbmRleCBbb2RiOjpnZXRQb2ludHMgW2xpbmRleCBbb2RiOjpnZXRQb2x5Z29ucyAkcG9seWdvbl9zZXRdIDBdXSAwXQorICBzZXQgbWluWCBbc2V0IG1heFggWyRmaXJzdF9wb2ludCBnZXRYXV0KKyAgc2V0IG1pblkgW3NldCBtYXhZIFskZmlyc3RfcG9pbnQgZ2V0WV1dCisKKyAgZm9yZWFjaCBzaGFwZSBbb2RiOjpnZXRQb2x5Z29ucyAkcG9seWdvbl9zZXRdIHsKKyAgICBmb3JlYWNoIHBvaW50IFtvZGI6OmdldFBvaW50cyAkc2hhcGVdIHsKKyAgICAgIHNldCB4IFskcG9pbnQgZ2V0WF0KKyAgICAgIHNldCB5IFskcG9pbnQgZ2V0WV0KKyAgICAgIHNldCBtaW5YIFtleHByIG1pbigkbWluWCwkeCldCisgICAgICBzZXQgbWF4WCBbZXhwciBtYXgoJG1heFgsJHgpXQorICAgICAgc2V0IG1pblkgW2V4cHIgbWluKCRtaW5ZLCR5KV0KKyAgICAgIHNldCBtYXhZIFtleHByIG1heCgkbWF4WSwkeSldCisgICAgfQorICB9CisKKyAgcmV0dXJuIFtsaXN0ICRtaW5YICRtaW5ZICRtYXhYICRtYXhZXQorfQorCitwcm9jIHJvdW5kX3RvX3JvdXRpbmdfZ3JpZCB7bGF5ZXJfbmFtZSBsb2NhdGlvbn0geworICB2YXJpYWJsZSB0ZWNoCisgIHZhcmlhYmxlIGJsb2NrCisKKyAgc2V0IGdyaWQgWyRibG9jayBmaW5kVHJhY2tHcmlkIFskdGVjaCBmaW5kTGF5ZXIgJGxheWVyX25hbWVdXQorCisgIGlmIHtbZ2V0X2RpciAkbGF5ZXJfbmFtZV0gPT0gImhvciJ9IHsKKyAgICBzZXQgZ3JpZF9wb2ludHMgWyRncmlkIGdldEdyaWRZXQorICB9IGVsc2UgeworICAgIHNldCBncmlkX3BvaW50cyBbJGdyaWQgZ2V0R3JpZFhdCisgIH0KKworICBzZXQgc2l6ZSBbbGxlbmd0aCAkZ3JpZF9wb2ludHNdCisgIHNldCBwb3MgW2V4cHIgKCRzaXplICsgMSkgLyAyXQorCisgIGlmIHtbbHNlYXJjaCAtZXhhY3QgJGdyaWRfcG9pbnRzICRsb2NhdGlvbl0gIT0gLTF9IHsKKyAgICByZXR1cm4gJGxvY2F0aW9uCisgIH0KKyAgc2V0IHByZXZfcG9zIC0xCisgIHNldCBzaXplIFtleHByICgkc2l6ZSArIDEpIC8gMl0KKyAgd2hpbGUgeyEoKFtsaW5kZXggJGdyaWRfcG9pbnRzICRwb3NdIDwgJGxvY2F0aW9uKSAmJiAoJGxvY2F0aW9uIDwgW2xpbmRleCAkZ3JpZF9wb2ludHMgW2V4cHIgJHBvcyArIDFdXSkpfSB7CisgICAgaWYgeyRwcmV2X3BvcyA9PSAkcG9zfSB7dXRsOjplcnJvciAiUEROIiA1MSAiSW5maW5pdGUgbG9vcCBkZXRlY3RlZCB0cnlpbmcgdG8gcm91bmQgdG8gZ3JpZC4ifQorICAgIHNldCBwcmV2X3BvcyAkcG9zCisgICAgc2V0IHNpemUgW2V4cHIgKCRzaXplICsgMSkgLyAyXQorCisgICAgaWYgeyRsb2NhdGlvbiA+IFtsaW5kZXggJGdyaWRfcG9pbnRzICRwb3NdfSB7CisgICAgICBzZXQgcG9zIFtleHByICRwb3MgKyAkc2l6ZV0KKyAgICB9IGVsc2UgeworICAgICAgc2V0IHBvcyBbZXhwciAkcG9zIC0gJHNpemVdCisgICAgfQorICAgICMgZGVidWcgIltsaW5kZXggJGdyaWRfcG9pbnRzICRwb3NdIDwgJGxvY2F0aW9uIDwgW2xpbmRleCAkZ3JpZF9wb2ludHMgW2V4cHIgJHBvcyArIDFdXSIKKyAgICAjIGRlYnVnIFtleHByICgoW2xpbmRleCAkZ3JpZF9wb2ludHMgJHBvc10gPCAkbG9jYXRpb24pICYmICgkbG9jYXRpb24gPCBbbGluZGV4ICRncmlkX3BvaW50cyBbZXhwciAkcG9zICsgMV1dKSldCisgIH0KKworICByZXR1cm4gW2xpbmRleCAkZ3JpZF9wb2ludHMgJHBvc10KK30KKworcHJvYyBpZGVudGlmeV9jaGFubmVscyB7bG93ZXJfbGF5ZXJfbmFtZSB1cHBlcl9sYXllcl9uYW1lIHRhZ30geworICB2YXJpYWJsZSBibG9jaworICB2YXJpYWJsZSBzdHJpcGVfbG9jcworCisgIHNldCBjaGFubmVscyB7fQorICBzZXQgd2lyZV9ncm91cHMge30KKworICBzZXQgdXBwZXJfcGl0Y2hfY2hlY2sgW2V4cHIgcm91bmQoMS4xICogW2dldF9ncmlkX3dpcmVfcGl0Y2ggJHVwcGVyX2xheWVyX25hbWVdKV0KKyAgc2V0IGxvd2VyX3BpdGNoX2NoZWNrIFtleHByIHJvdW5kKDEuMSAqIFtnZXRfZ3JpZF93aXJlX3BpdGNoICRsb3dlcl9sYXllcl9uYW1lXSldCisgICMgZGVidWcgInN0cmlwZXMgJGxvd2VyX2xheWVyX25hbWUsIHRhZzogJHRhZywgJHN0cmlwZV9sb2NzKCRsb3dlcl9sYXllcl9uYW1lLCR0YWcpIgorICAjIGRlYnVnICJEaXJlY3Rpb24gKGxvd2VyLSRsb3dlcl9sYXllcl9uYW1lKTogW2dldF9kaXIgJGxvd2VyX2xheWVyX25hbWVdICh1cHBlci0kdXBwZXJfbGF5ZXJfbmFtZSk6IFtnZXRfZGlyICR1cHBlcl9sYXllcl9uYW1lXSIKKyAgIyBkZWJ1ZyAiUGl0Y2ggY2hlY2sgKGxvd2VyKTogW29yZDo6ZGJ1X3RvX21pY3JvbnMgJGxvd2VyX3BpdGNoX2NoZWNrXSwgKHVwcGVyKTogW29yZDo6ZGJ1X3RvX21pY3JvbnMgJHVwcGVyX3BpdGNoX2NoZWNrXSIKKyAgaWYge1tnZXRfZGlyICRsb3dlcl9sYXllcl9uYW1lXSA9PSAgImhvciJ9IHsKKyAgICBzZXQgY2hhbm5lbF93aXJlcyBbb2RiOjpzdWJ0cmFjdFNldCAkc3RyaXBlX2xvY3MoJGxvd2VyX2xheWVyX25hbWUsJHRhZykgW29kYjo6YmxvYXRTZXQgW29kYjo6c2hyaW5rU2V0ICRzdHJpcGVfbG9jcygkbG93ZXJfbGF5ZXJfbmFtZSwkdGFnKSAkdXBwZXJfcGl0Y2hfY2hlY2sgMF0gJHVwcGVyX3BpdGNoX2NoZWNrIDBdXQorICAgICMgR3JvdXAgd2lyZXMgd2l0aCBzYW1lIHhNaW4gYW5kIHhNYXggc28gdGhhdCB0aGUgY2hhbm5lbHMgZm9ybSByZWN0YW5nbGVzCisgICAgZm9yZWFjaCB3aXJlIFtvZGI6OmdldFJlY3RhbmdsZXMgJGNoYW5uZWxfd2lyZXNdIHsKKyAgICAgIHNldCB4TWluIFskd2lyZSB4TWluXQorICAgICAgc2V0IHhNYXggWyR3aXJlIHhNYXhdCisgICAgICBkaWN0IGxhcHBlbmQgd2lyZV9ncm91cHMgIiR4TWluLCR4TWF4IiBbb2RiOjpuZXdTZXRGcm9tUmVjdCBbJHdpcmUgeE1pbl0gWyR3aXJlIHlNaW5dIFskd2lyZSB4TWF4XSBbJHdpcmUgeU1heF1dCisgICAgfQorICAgIGlmIHtbZGljdCBzaXplICR3aXJlX2dyb3Vwc10gPiAxfSB7CisgICAgICBkaWN0IGZvciB7cG9zaXRpb24gd2lyZXN9ICR3aXJlX2dyb3VwcyB7CisgICAgICAgIGxhcHBlbmQgY2hhbm5lbHMgW29kYjo6c2hyaW5rU2V0IFtvZGI6OmJsb2F0U2V0IFtvZGI6Om9yU2V0cyAkd2lyZXNdIDAgJGxvd2VyX3BpdGNoX2NoZWNrXSAwICRsb3dlcl9waXRjaF9jaGVja10KKyAgICAgIH0KKyAgICB9CisKKyAgICBzZXQgY2hhbm5lbHMgW29kYjo6b3JTZXRzICRjaGFubmVsc10KKyAgICAjIGRlYnVnICJDaGFubmVsIHdpcmVzOiBbbGxlbmd0aCBbb2RiOjpnZXRSZWN0YW5nbGVzICRjaGFubmVsX3dpcmVzXV0iCisgICAgIyBkZWJ1ZyAiQ2hhbm5lbHM6IFtsbGVuZ3RoIFtvZGI6OmdldFJlY3RhbmdsZXMgJGNoYW5uZWxzXV0iCisgIH0gZWxzZSB7CisgICAgc2V0IGNoYW5uZWxfd2lyZXMgW29kYjo6c3VidHJhY3RTZXQgJHN0cmlwZV9sb2NzKCRsb3dlcl9sYXllcl9uYW1lLCR0YWcpIFtvZGI6OmJsb2F0U2V0IFtvZGI6OnNocmlua1NldCAkc3RyaXBlX2xvY3MoJGxvd2VyX2xheWVyX25hbWUsJHRhZykgMCAkdXBwZXJfcGl0Y2hfY2hlY2tdIDAgJHVwcGVyX3BpdGNoX2NoZWNrXV0KKyAgICAjIEdyb3VwIHdpcmVzIHdpdGggc2FtZSB5TWluIGFuZCB5TWF4IHNvIHRoYXQgdGhlIGNoYW5uZWxzIGZvcm0gcmVjdGFuZ2xlcworICAgIGZvcmVhY2ggd2lyZSBbb2RiOjpnZXRSZWN0YW5nbGVzICRjaGFubmVsX3dpcmVzXSB7CisgICAgICBzZXQgeU1pbiBbJHdpcmUgeU1pbl0KKyAgICAgIHNldCB5TWF4IFskd2lyZSB5TWF4XQorICAgICAgZGljdCBsYXBwZW5kIHdpcmVfZ3JvdXBzICIkeU1pbiwkeU1heCIgW29kYjo6bmV3U2V0RnJvbVJlY3QgWyR3aXJlIHhNaW5dIFskd2lyZSB5TWluXSBbJHdpcmUgeE1heF0gWyR3aXJlIHlNYXhdXQorICAgIH0KKyAgICBpZiB7W2RpY3Qgc2l6ZSAkd2lyZV9ncm91cHNdID4gMX0geworICAgICAgZGljdCBmb3Ige3Bvc2l0aW9uIHdpcmVzfSAkd2lyZV9ncm91cHMgeworICAgICAgICBsYXBwZW5kIGNoYW5uZWxzIFtvZGI6OnNocmlua1NldCBbb2RiOjpibG9hdFNldCBbb2RiOjpvclNldHMgJHdpcmVzXSAkbG93ZXJfcGl0Y2hfY2hlY2sgMF0gJGxvd2VyX3BpdGNoX2NoZWNrIDBdCisgICAgICB9CisgICAgfQorCisgICAgc2V0IGNoYW5uZWxzIFtvZGI6Om9yU2V0cyAkY2hhbm5lbHNdCisgICAgIyBkZWJ1ZyAiQ2hhbm5lbCB3aXJlczogW2xsZW5ndGggW29kYjo6Z2V0UmVjdGFuZ2xlcyAkY2hhbm5lbF93aXJlc11dIgorICAgICMgZGVidWcgIkNoYW5uZWxzOiBbbGxlbmd0aCBbb2RiOjpnZXRSZWN0YW5nbGVzICRjaGFubmVsc11dIgorICB9CisKKyAgZm9yZWFjaCByZWN0IFtvZGI6OmdldFJlY3RhbmdsZXMgJGNoYW5uZWxzXSB7CisgICAgIyBkZWJ1ZyAiKFtvcmQ6OmRidV90b19taWNyb25zIFskcmVjdCB4TWluXV0gW29yZDo6ZGJ1X3RvX21pY3JvbnMgWyRyZWN0IHlNaW5dXSkgLSAoW29yZDo6ZGJ1X3RvX21pY3JvbnMgWyRyZWN0IHhNYXhdXSBbb3JkOjpkYnVfdG9fbWljcm9ucyBbJHJlY3QgeU1heF1dKSIKKyAgfQorICAjIGRlYnVnICJOdW1iZXIgb2YgY2hhbm5lbHMgW2xsZW5ndGggWzo6b2RiOjpnZXRQb2x5Z29ucyAkY2hhbm5lbHNdXSIKKworICByZXR1cm4gJGNoYW5uZWxzCit9CisKKworcHJvYyByZXBhaXJfY2hhbm5lbCB7Y2hhbm5lbCBsYXllcl9uYW1lIHRhZyBtaW5fc2l6ZX0geworICB2YXJpYWJsZSBzdHJpcGVfbG9jcworCisgIGlmIHtbZ2V0X2RpciAkbGF5ZXJfbmFtZV0gPT0gImhvciJ9IHsKKyAgICBzZXQgY2hhbm5lbF9oZWlnaHQgWyRjaGFubmVsIGR4XQorICB9IGVsc2UgeworICAgIHNldCBjaGFubmVsX2hlaWdodCBbJGNoYW5uZWwgZHldCisgIH0KKyAgc2V0IHdpZHRoIFtnZXRfZ3JpZF93aXJlX3dpZHRoICRsYXllcl9uYW1lXQorCisgIHNldCB4TWluIFskY2hhbm5lbCB4TWluXQorICBzZXQgeE1heCBbJGNoYW5uZWwgeE1heF0KKyAgc2V0IHlNaW4gWyRjaGFubmVsIHlNaW5dCisgIHNldCB5TWF4IFskY2hhbm5lbCB5TWF4XQorCisgIGlmIHskdGFnID09ICJQT1dFUiJ9IHsKKyAgICBzZXQgb3RoZXJfdGFnICJHUk9VTkQiCisgIH0gZWxzZSB7CisgICAgc2V0IG90aGVyX3RhZyAiUE9XRVIiCisgIH0KKworICBpZiB7W2NoYW5uZWxfaGFzX3BnX3N0cmFwICRjaGFubmVsICRsYXllcl9uYW1lICRvdGhlcl90YWddfSB7CisgICAgc2V0IG90aGVyX3N0cmFwIFtsaW5kZXggW29kYjo6Z2V0UmVjdGFuZ2xlcyBbb2RiOjphbmRTZXQgW29kYjo6bmV3U2V0RnJvbVJlY3QgJHhNaW4gJHlNaW4gJHhNYXggJHlNYXhdICRzdHJpcGVfbG9jcygkbGF5ZXJfbmFtZSwkb3RoZXJfdGFnKV1dIDBdCisKKyAgICBpZiB7W2dldF9kaXIgJGxheWVyX25hbWVdID09ICJob3IifSB7CisgICAgICBzZXQgY2VudGVyIFtleHByICgkeE1heCArICR4TWluKSAvIDJdCisgICAgICBzZXQgbWlkX2NoYW5uZWwgW2V4cHIgKCR5TWF4ICsgJHlNaW4pIC8gMl0KKyAgICAgIGlmIHskeE1heCAtICR4TWluIDwgJG1pbl9zaXplfSB7CisgICAgICAgIHNldCB4TWluIFtleHByICRjZW50ZXIgLSAkbWluX3NpemUgLyAyXQorICAgICAgICBzZXQgeE1heCBbZXhwciAkY2VudGVyICsgJG1pbl9zaXplIC8gMl0KKyAgICAgIH0KKyAgICAgIHNldCBjaGFubmVsX3NwYWNpbmcgW2dldF9ncmlkX2NoYW5uZWxfc3BhY2luZyAkbGF5ZXJfbmFtZSBbZXhwciAkeE1heCAtICR4TWluXV0KKworICAgICAgc2V0IG90aGVyX3N0cmFwX21pZCBbZXhwciAoWyRvdGhlcl9zdHJhcCB5TWluXSArIFskb3RoZXJfc3RyYXAgeU1heF0pIC8gMl0KKyAgICAgIGlmIHsoJG1pZF9jaGFubmVsIDw9ICRvdGhlcl9zdHJhcF9taWQpICYmIChbJG90aGVyX3N0cmFwIHlNaW5dIC0gJGNoYW5uZWxfc3BhY2luZyAtICR3aWR0aCA+ICR5TWluKX0geworICAgICAgICAjIGRlYnVnICJTdHJpcGUgYmVsb3cgJG90aGVyX3N0cmFwIgorICAgICAgICBzZXQgc3RyaXBlIFtvZGI6Om5ld1NldEZyb21SZWN0ICR4TWluIFtleHByIFskb3RoZXJfc3RyYXAgeU1pbl0gLSAkY2hhbm5lbF9zcGFjaW5nIC0gJHdpZHRoXSAkeE1heCBbZXhwciBbJG90aGVyX3N0cmFwIHlNaW5dIC0gJGNoYW5uZWxfc3BhY2luZ11dCisgICAgICB9IGVsc2VpZiB7KCRtaWRfY2hhbm5lbCA+ICRvdGhlcl9zdHJhcF9taWQpICYmIChbJG90aGVyX3N0cmFwIHlNYXhdICsgJGNoYW5uZWxfc3BhY2luZyArICR3aWR0aCA8ICR5TWF4KX0geworICAgICAgICAjIGRlYnVnICJTdHJpcGUgYWJvdmUgJG90aGVyX3N0cmFwIgorICAgICAgICBzZXQgc3RyaXBlIFtvZGI6Om5ld1NldEZyb21SZWN0ICR4TWluIFtleHByIFskb3RoZXJfc3RyYXAgeU1heF0gKyAkY2hhbm5lbF9zcGFjaW5nXSAkeE1heCBbZXhwciBbJG90aGVyX3N0cmFwIHlNYXhdICsgJGNoYW5uZWxfc3BhY2luZyArICR3aWR0aF1dCisgICAgICB9IGVsc2UgeworCXNldCBzdHJpcGUge30KKyAgICAgICAgdXRsOjp3YXJuIFBETiAxNjkgIkNhbm5vdCBmaXQgYWRkaXRpb25hbCAkdGFnIGhvcml6b250YWwgc3RyYXAgaW4gY2hhbm5lbCAoW29yZDo6ZGJ1X3RvX21pY3JvbnMgJHhNaW5dIFtvcmQ6OmRidV90b19taWNyb25zICR5TWluXSkgLSAoW29yZDo6ZGJ1X3RvX21pY3JvbnMgJHhNYXhdLCBbb3JkOjpkYnVfdG9fbWljcm9ucyAkeU1heF0pIgorICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICBzZXQgY2VudGVyIFtleHByICgkeU1heCArICR5TWluKSAvIDJdCisgICAgICBzZXQgbWlkX2NoYW5uZWwgW2V4cHIgKCR4TWF4ICsgJHhNaW4pIC8gMl0KKyAgICAgIGlmIHskeU1heCAtICR5TWluIDwgJG1pbl9zaXplfSB7CisgICAgICAgIHNldCB5TWluIFtleHByICRjZW50ZXIgLSAkbWluX3NpemUgLyAyXQorICAgICAgICBzZXQgeU1heCBbZXhwciAkY2VudGVyICsgJG1pbl9zaXplIC8gMl0KKyAgICAgIH0KKyAgICAgIHNldCBjaGFubmVsX3NwYWNpbmcgW2dldF9ncmlkX2NoYW5uZWxfc3BhY2luZyAkbGF5ZXJfbmFtZSBbZXhwciAkeU1heCAtICR5TWluXV0KKworICAgICAgc2V0IG90aGVyX3N0cmFwX21pZCBbZXhwciAoWyRvdGhlcl9zdHJhcCB4TWluXSArIFskb3RoZXJfc3RyYXAgeE1heF0pIC8gMl0KKyAgICAgIGlmIHsoJG1pZF9jaGFubmVsIDw9ICRvdGhlcl9zdHJhcF9taWQpICYmIChbJG90aGVyX3N0cmFwIHhNaW5dIC0gJGNoYW5uZWxfc3BhY2luZyAtICR3aWR0aCA+ICR4TWluKX0geworICAgICAgICAjIGRlYnVnICJTdHJpcGUgbGVmdCBvZiAkb3RoZXJfc3RyYXAgb24gbGF5ZXIgJGxheWVyX25hbWUsIHNwYWNpbmc6ICRjaGFubmVsX3NwYWNpbmcsIHdpZHRoICR3aWR0aCwgc3RyYXBfZWRnZTogWyRvdGhlcl9zdHJhcCB4TWluXSIKKyAgICAgICAgc2V0IHN0cmlwZSBbb2RiOjpuZXdTZXRGcm9tUmVjdCBbZXhwciBbJG90aGVyX3N0cmFwIHhNaW5dIC0gJGNoYW5uZWxfc3BhY2luZyAtICR3aWR0aF0gJHlNaW4gW2V4cHIgWyRvdGhlcl9zdHJhcCB4TWluXSAtICRjaGFubmVsX3NwYWNpbmddICR5TWF4XQorICAgICAgfSBlbHNlaWYgeygkbWlkX2NoYW5uZWwgPiAkb3RoZXJfc3RyYXBfbWlkKSAmJiAoWyRvdGhlcl9zdHJhcCB4TWF4XSArICRjaGFubmVsX3NwYWNpbmcgKyAkd2lkdGggPCAkeE1heCl9IHsKKyAgICAgICAgIyBkZWJ1ZyAiU3RyaXBlIHJpZ2h0IG9mICRvdGhlcl9zdHJhcCIKKyAgICAgICAgc2V0IHN0cmlwZSBbb2RiOjpuZXdTZXRGcm9tUmVjdCBbZXhwciBbJG90aGVyX3N0cmFwIHhNYXhdICsgJGNoYW5uZWxfc3BhY2luZ10gJHlNaW4gW2V4cHIgWyRvdGhlcl9zdHJhcCB4TWF4XSArICRjaGFubmVsX3NwYWNpbmcgKyAkd2lkdGhdICR5TWF4XQorICAgICAgfSBlbHNlIHsKKwlzZXQgc3RyaXBlIHt9CisgICAgICAgIHV0bDo6d2FybiBQRE4gMTcwICJDYW5ub3QgZml0IGFkZGl0aW9uYWwgJHRhZyB2ZXJ0aWNhbCBzdHJhcCBpbiBjaGFubmVsIChbb3JkOjpkYnVfdG9fbWljcm9ucyAkeE1pbl0gW29yZDo6ZGJ1X3RvX21pY3JvbnMgJHlNaW5dKSAtIChbb3JkOjpkYnVfdG9fbWljcm9ucyAkeE1heF0sIFtvcmQ6OmRidV90b19taWNyb25zICR5TWF4XSkiCisgICAgICB9CisgICAgfQorICB9IGVsc2UgeworICAgIGlmIHtbZ2V0X2RpciAkbGF5ZXJfbmFtZV0gPT0gImhvciJ9IHsKKyAgICAgIHNldCBjaGFubmVsX3NwYWNpbmcgW2dldF9ncmlkX2NoYW5uZWxfc3BhY2luZyAkbGF5ZXJfbmFtZSBbZXhwciAkeE1heCAtICR4TWluXV0KKyAgICAgIHNldCByb3V0aW5nX2dyaWQgW3JvdW5kX3RvX3JvdXRpbmdfZ3JpZCAkbGF5ZXJfbmFtZSBbZXhwciAoJHlNYXggKyAkeU1pbiAtICRjaGFubmVsX3NwYWNpbmcpIC8gMl1dCisgICAgICBpZiB7KFtleHByICRyb3V0aW5nX2dyaWQgLSAkd2lkdGggLyAyXSA8ICR5TWluKSB8fCAoW2V4cHIgJHJvdXRpbmdfZ3JpZCArICR3aWR0aCAvIDJdID4gJHlNYXgpfSB7CisgICAgICAgIHV0bDo6d2FybiAiUEROIiAxNzEgIkNoYW5uZWwgKFtvcmQ6OmRidV90b19taWNyb25zICR4TWluXSBbb3JkOjpkYnVfdG9fbWljcm9ucyAkeU1pbl0gW29yZDo6ZGJ1X3RvX21pY3JvbnMgJHhNYXhdIFtvcmQ6OmRidV90b19taWNyb25zICR5TWF4XSkgdG9vIG5hcnJvdy4gQ2hhbm5lbCBvbiBsYXllciAkbGF5ZXJfbmFtZSBtdXN0IGJlIGF0IGxlYXN0IFtvcmQ6OmRidV90b19taWNyb25zIFtleHByIHJvdW5kKDIuMCAqICR3aWR0aCArICRjaGFubmVsX3NwYWNpbmcpXV0gd2lkZS4iCisgICAgICB9CisKKyAgICAgIHNldCBzdHJpcGUgW29kYjo6bmV3U2V0RnJvbVJlY3QgJHhNaW4gW2V4cHIgJHJvdXRpbmdfZ3JpZCAtICR3aWR0aCAvIDJdICR4TWF4IFtleHByICRyb3V0aW5nX2dyaWQgKyAkd2lkdGggLyAyXV0KKyAgICB9IGVsc2UgeworICAgICAgc2V0IGNoYW5uZWxfc3BhY2luZyBbZ2V0X2dyaWRfY2hhbm5lbF9zcGFjaW5nICRsYXllcl9uYW1lIFtleHByICR5TWF4IC0gJHlNaW5dXQorICAgICAgc2V0IHJvdXRpbmdfZ3JpZCBbcm91bmRfdG9fcm91dGluZ19ncmlkICRsYXllcl9uYW1lIFtleHByICgkeE1heCArICR4TWluIC0gJGNoYW5uZWxfc3BhY2luZykgLyAyXV0KKworICAgICAgaWYgeyhbZXhwciAkcm91dGluZ19ncmlkIC0gJHdpZHRoIC8gMl0gPCAkeE1pbikgfHwgKFtleHByICRyb3V0aW5nX2dyaWQgKyAkd2lkdGggLyAyXSA+ICR4TWF4KX0geworICAgICAgICB1dGw6Ondhcm4gIlBETiIgMTcyICJDaGFubmVsIChbb3JkOjpkYnVfdG9fbWljcm9ucyAkeE1pbl0gW29yZDo6ZGJ1X3RvX21pY3JvbnMgJHlNaW5dIFtvcmQ6OmRidV90b19taWNyb25zICR4TWF4XSBbb3JkOjpkYnVfdG9fbWljcm9ucyAkeU1heF0pIHRvbyBuYXJyb3cuIENoYW5uZWwgb24gbGF5ZXIgJGxheWVyX25hbWUgbXVzdCBiZSBhdCBsZWFzdCBbb3JkOjpkYnVfdG9fbWljcm9ucyBbZXhwciByb3VuZCgyLjAgKiAkd2lkdGggKyAkY2hhbm5lbF9zcGFjaW5nKV1dIHdpZGUuIgorICAgICAgfQorCisgICAgICBzZXQgc3RyaXBlIFtvZGI6Om5ld1NldEZyb21SZWN0IFtleHByICRyb3V0aW5nX2dyaWQgLSAkd2lkdGggLyAyXSAkeU1pbiBbZXhwciAkcm91dGluZ19ncmlkICsgJHdpZHRoIC8gMl0gJHlNYXhdCisgICAgfQorICB9CisKKyAgaWYgeyRzdHJpcGUgIT0ge319IHsKKyAgICBhZGRfc3RyaXBlICRsYXllcl9uYW1lICR0YWcgJHN0cmlwZQorICB9Cit9CisKK3Byb2MgY2hhbm5lbF9oYXNfcGdfc3RyYXAge2NoYW5uZWwgbGF5ZXJfbmFtZSB0YWd9ICB7CisgIHZhcmlhYmxlIHN0cmlwZV9sb2NzCisgICMgZGVidWcgInN0YXJ0LCBjaGFubmVsOiAkY2hhbm5lbCwgbGF5ZXI6ICRsYXllcl9uYW1lIgorICAjIGRlYnVnICIgICAgICAgKFtvcmQ6OmRidV90b19taWNyb25zIFskY2hhbm5lbCB4TWluXV0gW29yZDo6ZGJ1X3RvX21pY3JvbnMgWyRjaGFubmVsIHlNaW5dXSkgLSAoW29yZDo6ZGJ1X3RvX21pY3JvbnMgWyRjaGFubmVsIHhNYXhdXSBbb3JkOjpkYnVfdG9fbWljcm9ucyBbJGNoYW5uZWwgeU1heF1dKSIKKworICBzZXQgcG93ZXJfc3RyYXAgMAorICBzZXQgZ3JvdW5kX3N0cmFwIDAKKworICBzZXQgY2hhbm5lbF9zZXQgW29kYjo6bmV3U2V0RnJvbVJlY3QgWyRjaGFubmVsIHhNaW5dIFskY2hhbm5lbCB5TWluXSBbJGNoYW5uZWwgeE1heF0gWyRjaGFubmVsIHlNYXhdXQorICBzZXQgY2hlY2tfc2V0IFtvZGI6OmFuZFNldCAkc3RyaXBlX2xvY3MoJGxheWVyX25hbWUsJHRhZykgJGNoYW5uZWxfc2V0XQorCisgIGZvcmVhY2ggcmVjdCBbb2RiOjpnZXRSZWN0YW5nbGVzICRjaGVja19zZXRdIHsKKyAgICBpZiB7W2dldF9kaXIgJGxheWVyX25hbWVdID09ICJ2ZXIiICYmIFskcmVjdCBkeF0gPCBbZ2V0X2dyaWRfd2lyZV93aWR0aCAkbGF5ZXJfbmFtZV19IHtjb250aW51ZX0KKyAgICBpZiB7W2dldF9kaXIgJGxheWVyX25hbWVdID09ICJob3IiICYmIFskcmVjdCBkeV0gPCBbZ2V0X2dyaWRfd2lyZV93aWR0aCAkbGF5ZXJfbmFtZV19IHtjb250aW51ZX0KKyAgICAjIGRlYnVnICJPdmVybGFwIGZvdW5kIgorICAgICMgZGVidWcgIiAgICAgICBEaXJlY3Rpb246IFtnZXRfZGlyICRsYXllcl9uYW1lXSIKKyAgICAjIGRlYnVnICIgICAgICAgTGF5ZXIgd2lkdGg6IFtnZXRfZ3JpZF93aXJlX3dpZHRoICRsYXllcl9uYW1lXSIKKyAgICAjIGRlYnVnICIgICAgICAgKFtvcmQ6OmRidV90b19taWNyb25zIFskcmVjdCB4TWluXV0gW29yZDo6ZGJ1X3RvX21pY3JvbnMgWyRyZWN0IHlNaW5dXSkgLSAoW29yZDo6ZGJ1X3RvX21pY3JvbnMgWyRyZWN0IHhNYXhdXSBbb3JkOjpkYnVfdG9fbWljcm9ucyBbJHJlY3QgeU1heF1dKSIKKyAgICByZXR1cm4gMQorICB9CisKKyAgIyBkZWJ1ZyAiZW5kOiBjaGFubmVsIG5lZWRzIHJlcGFpciIKKyAgcmV0dXJuIDAKK30KKworcHJvYyBwcm9jZXNzX2NoYW5uZWxzIHt9IHsKKyAgc2V0IGxheWVycyBbZ2V0X2dyaWRfY2hhbm5lbF9sYXllcnNdCisgIHNldCBsb3dlcl9sYXllcnMgW2xyYW5nZSAkbGF5ZXJzIDAgZW5kLTFdCisgIHNldCB1cHBlcl9sYXllcnMgW2xyYW5nZSAkbGF5ZXJzIDEgZW5kXQorICBmb3JlYWNoIGxvd2VyX2xheWVyX25hbWUgJGxvd2VyX2xheWVycyB1cHBlcl9sYXllcl9uYW1lICR1cHBlcl9sYXllcnMgeworICAgIGZvcmVhY2ggdGFnIHtQT1dFUiBHUk9VTkR9IHsKKyAgICAgIHNldCBjaGFubmVscyBbaWRlbnRpZnlfY2hhbm5lbHMgJGxvd2VyX2xheWVyX25hbWUgJHVwcGVyX2xheWVyX25hbWUgJHRhZ10KKyAgICAgIGlmIHskY2hhbm5lbHMgPT0ge319IHtjb250aW51ZX0KKyAgICAgICMgZGVidWcgIlRhZzogJHRhZywgQ2hhbm5lbHMgZm91bmQ6IFtsbGVuZ3RoIFtvZGI6OmdldFBvbHlnb25zICRjaGFubmVsc11dIgorICAgICAgZm9yZWFjaCBjaGFubmVsIFs6Om9kYjo6Z2V0UmVjdGFuZ2xlcyAkY2hhbm5lbHNdIHsKKyAgICAgICAgaWYgeyFbY2hhbm5lbF9oYXNfcGdfc3RyYXAgJGNoYW5uZWwgJHVwcGVyX2xheWVyX25hbWUgJHRhZ119IHsKKyAgICAgICAgICBzZXQgbmV4dF91cHBlcl9sYXllcl9pZHggW2V4cHIgW2xzZWFyY2ggLWV4YWN0ICRsYXllcnMgJHVwcGVyX2xheWVyX25hbWVdICsgMV0KKyAgICAgICAgICBpZiB7JG5leHRfdXBwZXJfbGF5ZXJfaWR4IDwgW2xsZW5ndGggJGxheWVyc119IHsKKyAgICAgICAgICAgIHNldCBuZXh0X3VwcGVyX2xheWVyIFtsaW5kZXggJGxheWVycyAkbmV4dF91cHBlcl9sYXllcl9pZHhdCisgICAgICAgICAgICBzZXQgbWluX3NpemUgW2V4cHIgW2dldF9ncmlkX3dpcmVfcGl0Y2ggJG5leHRfdXBwZXJfbGF5ZXJdICsgW2dldF9ncmlkX3dpcmVfd2lkdGggJG5leHRfdXBwZXJfbGF5ZXJdXQorICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzZXQgbWluX3NpemUgMAorICAgICAgICAgIH0KKyAgICAgICAgICAjIGRlYnVnICJSZXBhaXIgY2hhbm5lbDogKFtvcmQ6OmRidV90b19taWNyb25zIFskY2hhbm5lbCB4TWluXV0gW29yZDo6ZGJ1X3RvX21pY3JvbnMgWyRjaGFubmVsIHlNaW5dXSktKFtvcmQ6OmRidV90b19taWNyb25zIFskY2hhbm5lbCB4TWF4XV0gW29yZDo6ZGJ1X3RvX21pY3JvbnMgWyRjaGFubmVsIHlNYXhdXV0pLCB0YWc6ICR0YWcsIGxheWVyOiAkdXBwZXJfbGF5ZXJfbmFtZSwgbWluX3NpemU6ICRtaW5fc2l6ZSIKKyAgICAgICAgICByZXBhaXJfY2hhbm5lbCAkY2hhbm5lbCAkdXBwZXJfbGF5ZXJfbmFtZSAkdGFnICRtaW5fc2l6ZQorICAgICAgICB9CisgICAgICB9CisgICAgICBtZXJnZV9zdHJpcGVzCisgICAgfQorICB9Cit9CisKK3Byb2MgZ2V0X3N0ZGNlbGxfcGx1c19hcmVhIHt9IHsKKyAgdmFyaWFibGUgc3RkY2VsbF9hcmVhCisgIHZhcmlhYmxlIHN0ZGNlbGxfcGx1c19hcmVhCisKKyAgaWYgeyRzdGRjZWxsX2FyZWEgPT0gIiJ9IHsKKyAgICBnZXRfc3RkY2VsbF9hcmVhCisgIH0KKyAgIyBkZWJ1ZyAic3RkY2VsbF9hcmVhICAgICAgW2dldF9leHRlbnQgJHN0ZGNlbGxfYXJlYV0iCisgICMgZGVidWcgInN0ZGNlbGxfcGx1c19hcmVhIFtnZXRfZXh0ZW50ICRzdGRjZWxsX3BsdXNfYXJlYV0iCisgIHJldHVybiAkc3RkY2VsbF9wbHVzX2FyZWEKK30KKworcHJvYyBnZXRfc3RkY2VsbF9hcmVhIHt9IHsKKyAgdmFyaWFibGUgc3RkY2VsbF9hcmVhCisgIHZhcmlhYmxlIHN0ZGNlbGxfcGx1c19hcmVhCisKKyAgaWYgeyRzdGRjZWxsX2FyZWEgIT0gIiJ9IHtyZXR1cm4gJHN0ZGNlbGxfYXJlYX0KKyAgc2V0IHJhaWxzX3dpZHRoIFtnZXRfcmFpbHNfbWF4X3dpZHRoXQorCisgIHNldCByb3dzIFtbb3JkOjpnZXRfZGJfYmxvY2tdIGdldFJvd3NdCisgIHNldCBmaXJzdF9yb3cgW1tsaW5kZXggJHJvd3MgMF0gZ2V0QkJveF0KKworICBzZXQgbWluWCBbJGZpcnN0X3JvdyB4TWluXQorICBzZXQgbWF4WCBbJGZpcnN0X3JvdyB4TWF4XQorICBzZXQgbWluWSBbJGZpcnN0X3JvdyB5TWluXQorICBzZXQgbWF4WSBbJGZpcnN0X3JvdyB5TWF4XQorICBzZXQgc3RkY2VsbF9hcmVhIFtvZGI6Om5ld1NldEZyb21SZWN0ICRtaW5YICRtaW5ZICRtYXhYICRtYXhZXQorICBzZXQgc3RkY2VsbF9wbHVzX2FyZWEgW29kYjo6bmV3U2V0RnJvbVJlY3QgJG1pblggW2V4cHIgJG1pblkgLSAkcmFpbHNfd2lkdGggLyAyXSAkbWF4WCBbZXhwciAkbWF4WSArICRyYWlsc193aWR0aCAvIDJdXQorCisgIGZvcmVhY2ggcm93IFtscmFuZ2UgJHJvd3MgMSBlbmRdIHsKKyAgICBzZXQgYm94IFskcm93IGdldEJCb3hdCisgICAgc2V0IG1pblggWyRib3ggeE1pbl0KKyAgICBzZXQgbWF4WCBbJGJveCB4TWF4XQorICAgIHNldCBtaW5ZIFskYm94IHlNaW5dCisgICAgc2V0IG1heFkgWyRib3ggeU1heF0KKyAgICBzZXQgc3RkY2VsbF9hcmVhIFtvZGI6Om9yU2V0ICRzdGRjZWxsX2FyZWEgW29kYjo6bmV3U2V0RnJvbVJlY3QgJG1pblggJG1pblkgJG1heFggJG1heFldXQorICAgIHNldCBzdGRjZWxsX3BsdXNfYXJlYSBbb2RiOjpvclNldCAkc3RkY2VsbF9wbHVzX2FyZWEgW29kYjo6bmV3U2V0RnJvbVJlY3QgJG1pblggW2V4cHIgJG1pblkgLSAkcmFpbHNfd2lkdGggLyAyXSAkbWF4WCBbZXhwciAkbWF4WSArICRyYWlsc193aWR0aCAvIDJdXV0KKyAgfQorCisgIHJldHVybiAkc3RkY2VsbF9hcmVhCit9CisKK3Byb2MgZmluZF9jb3JlX2FyZWEge30geworICB2YXJpYWJsZSBibG9jaworCisgIHNldCBhcmVhIFtnZXRfc3RkY2VsbF9hcmVhXQorCisgIHJldHVybiBbZ2V0X2V4dGVudCAkYXJlYV0KK30KKworcHJvYyBnZXRfcmFpbHNfbWF4X3dpZHRoIHt9IHsKKyAgdmFyaWFibGUgZGVzaWduX2RhdGEKKyAgdmFyaWFibGUgZGVmYXVsdF9ncmlkX2RhdGEKKworICBzZXQgbWF4X3dpZHRoIDAKKyAgZm9yZWFjaCBsYXllciBbZ2V0X3JhaWxzX2xheWVyc10geworICAgICBpZiB7W2RpY3QgZXhpc3RzICRkZWZhdWx0X2dyaWRfZGF0YSByYWlscyAkbGF5ZXJdfSB7CisgICAgICAgaWYge1tzZXQgd2lkdGggW2RpY3QgZ2V0ICRkZWZhdWx0X2dyaWRfZGF0YSByYWlscyAkbGF5ZXIgd2lkdGhdXSA+ICRtYXhfd2lkdGh9IHsKKyAgICAgICAgIHNldCBtYXhfd2lkdGggJHdpZHRoCisgICAgICAgfQorICAgICB9CisgIH0KKyAgaWYgeyFbZGljdCBleGlzdHMgJGRlZmF1bHRfZ3JpZF9kYXRhIHVuaXRzXX0geworICAgIHNldCBtYXhfd2lkdGggW29yZDo6bWljcm9uc190b19kYnUgJG1heF93aWR0aF0KKyAgfQorICByZXR1cm4gJG1heF93aWR0aAorfQorCisKKyMgVGhpcyBpcyBhIHByb2MgdG8gZ2V0IHRoZSBmaXJzdCB2b2x0YWdlIGRvbWFpbiB0aGF0IG92ZXJsYXBzIHdpdGggdGhlIGlucHV0IGJveAorcHJvYyBnZXRfdm9sdGFnZV9kb21haW4ge2xseCBsbHkgdXJ4IHVyeX0geworICB2YXJpYWJsZSBibG9jaworICB2YXJpYWJsZSBkZXNpZ25fZGF0YQorICB2YXJpYWJsZSB2b2x0YWdlX2RvbWFpbnMKKworCisgIHNldCBuYW1lIFtkaWN0IGdldCAkZGVzaWduX2RhdGEgY29yZV9kb21haW5dCisgIGZvcmVhY2ggZG9tYWluX25hbWUgW2RpY3Qga2V5cyAkdm9sdGFnZV9kb21haW5zXSB7CisgICAgaWYgeyRkb21haW5fbmFtZSA9PSBbZGljdCBnZXQgJGRlc2lnbl9kYXRhIGNvcmVfZG9tYWluXX0ge2NvbnRpbnVlfQorICAgIHNldCBkb21haW4gWyRibG9jayBmaW5kUmVnaW9uICRkb21haW5fbmFtZV0KKyAgICBzZXQgcmVjdCBbbGluZGV4IFskZG9tYWluIGdldEJvdW5kYXJpZXNdIDBdCisKKyAgICBzZXQgZG9tYWluX3hNaW4gWyRyZWN0IHhNaW5dCisgICAgc2V0IGRvbWFpbl95TWluIFskcmVjdCB5TWluXQorICAgIHNldCBkb21haW5feE1heCBbJHJlY3QgeE1heF0KKyAgICBzZXQgZG9tYWluX3lNYXggWyRyZWN0IHlNYXhdCisKKyAgICBpZiB7ISgkZG9tYWluX3lNaW4gPj0gJHVyeSB8fCAkZG9tYWluX3hNaW4gPj0gJHVyeCB8fCAkZG9tYWluX3hNYXggPD0gJGxseCB8fCAkZG9tYWluX3lNYXggPD0gJGxseSl9IHsKKyAgICAgIHNldCBuYW1lIFskZG9tYWluIGdldE5hbWVdCisgICAgICBicmVhaworICAgIH0KKyAgfQorICByZXR1cm4gJG5hbWUKK30KKworcHJvYyBnZXRfdm9sdGFnZV9kb21haW5fcG93ZXIge2RvbWFpbn0geworICB2YXJpYWJsZSB2b2x0YWdlX2RvbWFpbnMKKworICByZXR1cm4gW2RpY3QgZ2V0ICR2b2x0YWdlX2RvbWFpbnMgJGRvbWFpbiBwcmltYXJ5X3Bvd2VyXQorfQorCitwcm9jIGdldF92b2x0YWdlX2RvbWFpbl9zZWNvbmRhcnlfcG93ZXIge2RvbWFpbn0geworICB2YXJpYWJsZSB2b2x0YWdlX2RvbWFpbnMKKyAgCisgIGlmIHtbZGljdCBleGlzdHMgJHZvbHRhZ2VfZG9tYWlucyAkZG9tYWluIHNlY29uZGFyeV9wb3dlcl19IHsKKyAgICByZXR1cm4gW2RpY3QgZ2V0ICR2b2x0YWdlX2RvbWFpbnMgJGRvbWFpbiBzZWNvbmRhcnlfcG93ZXJdCisgIH0gZWxzZSB7CisgICAgcmV0dXJuIFtdCisgIH0KK30KKworcHJvYyBnZXRfdm9sdGFnZV9kb21haW5fZ3JvdW5kIHtkb21haW59IHsKKyAgdmFyaWFibGUgdm9sdGFnZV9kb21haW5zCisKKyAgcmV0dXJuIFtkaWN0IGdldCAkdm9sdGFnZV9kb21haW5zICRkb21haW4gcHJpbWFyeV9ncm91bmRdCit9CisKKyMgVGhpcyBwcm9jIGlzIHRvIHNwbGl0IGNvcmUgZG9tYWluJ3MgcG93ZXIgc3RyaXBlcyBpZiB0aGV5IGNyb3NzIGludGVyYWwgdm9sdGFnZSBkb21haW5zIHRoYXQgaGF2ZSBkaWZmZXJlbnQgcHdyL2duZCBuZXRzCitwcm9jIHVwZGF0ZV9tZXNoX3N0cmlwZXNfd2l0aF92b2xhdGdlX2RvbWFpbnMge3RhZyBsYXkgc25ldF9uYW1lfSB7CisgIHZhcmlhYmxlIGJsb2NrCisgIHZhcmlhYmxlIHN0cmlwZXMKKyAgdmFyaWFibGUgZ3JpZF9kYXRhCisgIHZhcmlhYmxlIGRlc2lnbl9kYXRhCisgIHZhcmlhYmxlIHZvbHRhZ2VfZG9tYWlucworCisgIHNldCByYWlsc193aWR0aCBbZ2V0X3JhaWxzX21heF93aWR0aF0KKworICBzZXQgc3RkY2VsbF9hcmVhIFtnZXRfZXh0ZW50IFtnZXRfc3RkY2VsbF9hcmVhXV0KKyAgc2V0IHN0ZGNlbGxfbWluX3ggW2xpbmRleCAkc3RkY2VsbF9hcmVhIDBdCisgIHNldCBzdGRjZWxsX21pbl95IFtsaW5kZXggJHN0ZGNlbGxfYXJlYSAxXQorICBzZXQgc3RkY2VsbF9tYXhfeCBbbGluZGV4ICRzdGRjZWxsX2FyZWEgMl0KKyAgc2V0IHN0ZGNlbGxfbWF4X3kgW2xpbmRleCAkc3RkY2VsbF9hcmVhIDNdCisKKyAgc2V0IHJpbmdfYWRqdXN0bWVudCAwCisgIGlmIHtbc2V0IHJpbmdfdmVydGljYWxfbGF5ZXIgW2dldF9jb3JlX3JpbmdfdmVydGljYWxfbGF5ZXJfbmFtZV1dICE9ICIifSB7CisgICAgaWYge1tkaWN0IGV4aXN0cyAkZ3JpZF9kYXRhIGNvcmVfcmluZyAkcmluZ192ZXJ0aWNhbF9sYXllciBwYWRfb2Zmc2V0XX0geworICAgICAgc2V0IHBhZF9hcmVhIFtmaW5kX3BhZF9vZmZzZXRfYXJlYV0KKyAgICAgIHNldCBvZmZzZXQgW2V4cHIgW2RpY3QgZ2V0ICRncmlkX2RhdGEgY29yZV9yaW5nICRyaW5nX3ZlcnRpY2FsX2xheWVyIHBhZF9vZmZzZXRdXQorICAgICAgc2V0IHJpbmdfYWRqdXN0bWVudCBbZXhwciAkc3RkY2VsbF9taW5feCAtIChbbGluZGV4ICRwYWRfYXJlYSAwXSArICRvZmZzZXQpXQorICAgIH0KKyAgICBpZiB7W2RpY3QgZXhpc3RzICRncmlkX2RhdGEgY29yZV9yaW5nICRyaW5nX3ZlcnRpY2FsX2xheWVyIGNvcmVfb2Zmc2V0XX0geworICAgICAgc2V0IHJpbmdfYWRqdXN0bWVudCBbZXhwciBcCisgICAgICAgIFtkaWN0IGdldCAkZ3JpZF9kYXRhIGNvcmVfcmluZyAkcmluZ192ZXJ0aWNhbF9sYXllciBjb3JlX29mZnNldF0gKyBcCisgICAgICAgIFtkaWN0IGdldCAkZ3JpZF9kYXRhIGNvcmVfcmluZyAkcmluZ192ZXJ0aWNhbF9sYXllciBzcGFjaW5nXSArIFwKKyAgICAgICAgMyAqIFtkaWN0IGdldCAkZ3JpZF9kYXRhIGNvcmVfcmluZyAkcmluZ192ZXJ0aWNhbF9sYXllciB3aWR0aF0gLyAyIFwKKyAgICAgIF0KKyAgICB9CisgIH0KKworICBzZXQgZmlyc3Rfcm93IFtsaW5kZXggWyRibG9jayBnZXRSb3dzXSAwXQorICBzZXQgcm93X3NpdGUgWyRmaXJzdF9yb3cgZ2V0U2l0ZV0KKyAgc2V0IHNpdGVfd2lkdGggWyRyb3dfc2l0ZSBnZXRXaWR0aF0KKyAgc2V0IHJvd19oZWlnaHQgWyRyb3dfc2l0ZSBnZXRIZWlnaHRdCisKKyAgIyBUaGlzIHZvbHRhZ2UgZG9tYWluIHRvIGNvcmUgZG9tYWluIG1hcmdpbiBpcyBoYXJkIGNvZGVkIGZvciBub3cKKyAgc2V0IE1BUkdJTiA2CisgIHNldCBYX01BUkdJTiBbZXhwciAoJE1BUkdJTiAqICRyb3dfaGVpZ2h0IC8gJHNpdGVfd2lkdGgpICogJHNpdGVfd2lkdGhdCisgIHNldCBZX01BUkdJTiBbZXhwciAkTUFSR0lOICogJHJvd19oZWlnaHRdCisKKyAgZm9yZWFjaCBkb21haW5fbmFtZSBbZGljdCBrZXlzICR2b2x0YWdlX2RvbWFpbnNdIHsKKyAgICBpZiB7JGRvbWFpbl9uYW1lID09IFtkaWN0IGdldCAkZGVzaWduX2RhdGEgY29yZV9kb21haW5dfSB7Y29udGludWV9CisgICAgc2V0IGRvbWFpbiBbJGJsb2NrIGZpbmRSZWdpb24gJGRvbWFpbl9uYW1lXQorICAgIHNldCBmaXJzdF9yZWN0IFtsaW5kZXggWyRkb21haW4gZ2V0Qm91bmRhcmllc10gMF0KKworICAgICMgdm9sdGFnZSBkb21haW4gYXJlYQorICAgIHNldCBkb21haW5feE1pbiBbZXhwciBbJGZpcnN0X3JlY3QgeE1pbl1dCisgICAgc2V0IGRvbWFpbl95TWluIFtleHByIFskZmlyc3RfcmVjdCB5TWluXV0KKyAgICBzZXQgZG9tYWluX3hNYXggW2V4cHIgWyRmaXJzdF9yZWN0IHhNYXhdXQorICAgIHNldCBkb21haW5feU1heCBbZXhwciBbJGZpcnN0X3JlY3QgeU1heF1dCisKKyAgICAjIHZvbHRhZ2UgZG9tYWluIGFyZWEgKyBtYXJnaW4KKyAgICBzZXQgZG9tYWluX2JvdW5kYXJ5X3hNaW4gW2V4cHIgWyRmaXJzdF9yZWN0IHhNaW5dIC0gJFhfTUFSR0lOXQorICAgIHNldCBkb21haW5fYm91bmRhcnlfeU1pbiBbZXhwciBbJGZpcnN0X3JlY3QgeU1pbl0gLSAkWV9NQVJHSU4gKyAkcmFpbHNfd2lkdGggLyAyXQorICAgIHNldCBkb21haW5fYm91bmRhcnlfeE1heCBbZXhwciBbJGZpcnN0X3JlY3QgeE1heF0gKyAkWF9NQVJHSU5dCisgICAgc2V0IGRvbWFpbl9ib3VuZGFyeV95TWF4IFtleHByIFskZmlyc3RfcmVjdCB5TWF4XSArICRZX01BUkdJTiAtICRyYWlsc193aWR0aCAvIDJdCisKKyAgICBpZiB7W2dldF9kaXIgJGxheV0gPT0gImhvciJ9IHsKKyAgICAgIGlmIHskZG9tYWluX2JvdW5kYXJ5X3hNaW4gPCAkc3RkY2VsbF9taW5feCArICRzaXRlX3dpZHRofSB7CisgICAgICAgIHNldCBkb21haW5fYm91bmRhcnlfeE1pbiBbZXhwciAkc3RkY2VsbF9taW5feCAtICRyaW5nX2FkanVzdG1lbnRdCisgICAgICB9CisgICAgICBpZiB7JGRvbWFpbl9ib3VuZGFyeV94TWF4ID4gJHN0ZGNlbGxfbWF4X3ggLSAkc2l0ZV93aWR0aH0geworICAgICAgICBzZXQgZG9tYWluX2JvdW5kYXJ5X3hNYXggW2V4cHIgJHN0ZGNlbGxfbWF4X3ggKyAkcmluZ19hZGp1c3RtZW50XQorICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICBpZiB7JGRvbWFpbl9ib3VuZGFyeV95TWluIDwgJHN0ZGNlbGxfbWluX3kgKyAkcm93X2hlaWdodH0geworICAgICAgICBzZXQgZG9tYWluX2JvdW5kYXJ5X3lNaW4gW2V4cHIgJHN0ZGNlbGxfbWluX3kgLSAkcmluZ19hZGp1c3RtZW50XQorICAgICAgfQorICAgICAgaWYgeyRkb21haW5fYm91bmRhcnlfeU1heCA+ICRzdGRjZWxsX21heF95IC0gJHJvd19oZWlnaHR9IHsKKyAgICAgICAgc2V0IGRvbWFpbl9ib3VuZGFyeV95TWF4IFtleHByICRzdGRjZWxsX21heF95ICsgJHJpbmdfYWRqdXN0bWVudF0KKyAgICAgIH0KKyAgICB9CisKKyAgICAjIENvcmUgZG9tYWluJ3MgcHdyL2duZCBuZXRzIHRoYXQgYXJlIG5vdCBzaGFyZWQgc2hvdWxkIG5vdCBjcm9zcyB0aGUgZW50aXJlIHZvbHRhZ2UgZG9tYWluIGFyZWEKKyAgICBzZXQgYm91bmRhcnlfYm94IFwKKyAgICAgICAgW29kYjo6bmV3U2V0RnJvbVJlY3QgXAorICAgICAgICAgICRkb21haW5fYm91bmRhcnlfeE1pbiBcCisgICAgICAgICAgJGRvbWFpbl9ib3VuZGFyeV95TWluIFwKKyAgICAgICAgICAkZG9tYWluX2JvdW5kYXJ5X3hNYXggXAorICAgICAgICAgICRkb21haW5fYm91bmRhcnlfeU1heCBcCisgICAgICAgIF0KKworICAgIGlmIHtbZ2V0X2RpciAkbGF5XSA9PSAiaG9yIn0geworICAgICAgc2V0IGRvbWFpbl9ib3ggXAorICAgICAgICBbb2RiOjpuZXdTZXRGcm9tUmVjdCBcCisgICAgICAgICAgJGRvbWFpbl9ib3VuZGFyeV94TWluIFwKKyAgICAgICAgICAkZG9tYWluX3lNaW4gXAorICAgICAgICAgICRkb21haW5fYm91bmRhcnlfeE1heCBcCisgICAgICAgICAgJGRvbWFpbl95TWF4IFwKKyAgICAgICAgXQorICAgIH0gZWxzZSB7CisgICAgICBzZXQgZG9tYWluX2JveCBcCisgICAgICAgIFtvZGI6Om5ld1NldEZyb21SZWN0IFwKKyAgICAgICAgICAkZG9tYWluX3hNaW4gXAorICAgICAgICAgICRkb21haW5fYm91bmRhcnlfeU1pbiBcCisgICAgICAgICAgJGRvbWFpbl94TWF4IFwKKyAgICAgICAgICAkZG9tYWluX2JvdW5kYXJ5X3lNYXggXAorICAgICAgICBdCisgICAgfQorICAgICMgQ29yZSBkb21haW4ncyBwd3IvZ25kIG5ldHMgc2hhcmVkIHdpdGggYSB2b2x0YWdlIGRvbWFpbiBzaG91bGQgbm90IGNyb3NzIHRoZSBkb21haW5zJyBwd3IvZ25kIHJpbmdzCisgICAgc2V0IGJvdW5kYXJ5X2JveF9mb3JfY3Jvc3NpbmdfY29yZV9uZXQgW29kYjo6c3VidHJhY3RTZXQgJGJvdW5kYXJ5X2JveCAkZG9tYWluX2JveF0KKworICAgIGZvciB7c2V0IGkgMH0geyRpIDwgW2xsZW5ndGggJHN0cmlwZXMoJGxheSwkdGFnKV19IHtpbmNyIGl9IHsKKyAgICAgIHNldCB1cGRhdGVkX3BvbHlnb25TZXQgW2xpbmRleCAkc3RyaXBlcygkbGF5LCR0YWcpICRpXQorICAgICAgIyBDaGVjayBpZiBjb3JlIGRvbWFpbidzIHBvd2VyIGlzIHRoZSBzYW1lIGFzIHZvbHRhZ2UgZG9tYWluJ3MgcG93ZXIgCisgICAgICBpZiB7JHNuZXRfbmFtZSA9PSBbZ2V0X3ZvbHRhZ2VfZG9tYWluX3Bvd2VyICRkb21haW5fbmFtZV0gfHwKKyAgICAgICAgICAkc25ldF9uYW1lID09IFtnZXRfdm9sdGFnZV9kb21haW5fZ3JvdW5kICRkb21haW5fbmFtZV19IHsKKyAgICAgICAgc2V0IHVwZGF0ZWRfcG9seWdvblNldCBbb2RiOjpzdWJ0cmFjdFNldCAkdXBkYXRlZF9wb2x5Z29uU2V0ICRib3VuZGFyeV9ib3hfZm9yX2Nyb3NzaW5nX2NvcmVfbmV0XQorICAgICAgfSBlbHNlIHsKKyAgICAgICAgc2V0IHVwZGF0ZWRfcG9seWdvblNldCBbb2RiOjpzdWJ0cmFjdFNldCAkdXBkYXRlZF9wb2x5Z29uU2V0ICRib3VuZGFyeV9ib3hdCisgICAgICB9CisgICAgICAjIFRoaXMgaWYgc3RhdGVtZXQgcHJldmVudHMgZnJvbSBkZWxldGluZyBkb21haW4gcmluZ3MKKyAgICAgIGlmIHtbbGxlbmd0aCBbb2RiOjpnZXRQb2x5Z29ucyAkdXBkYXRlZF9wb2x5Z29uU2V0XV0gPiAwfSB7CisgICAgICAgIHNldCBzdHJpcGVzKCRsYXksJHRhZykgW2xyZXBsYWNlICRzdHJpcGVzKCRsYXksJHRhZykgJGkgJGkgJHVwZGF0ZWRfcG9seWdvblNldF0KKyAgICAgIH0KKyAgICB9CisgIH0KK30KKworIyBUaGlzIHByb2MgaXMgdG8gY2hlY2sgaWYgYSBwd3IvZ25kIG5ldCBpcyB1bmlxdWUgZm9yIGFsbCB2b2x0YWdlIGRvbWFpbnMsIHRoZSBzZXRXaWxkQ29ubmVjdGVkIGNhbiBiZSB1c2VkCitwcm9jIGNoZWNrX3NuZXRfaXNfdW5pcXVlIHtuZXR9IHsKKyAgdmFyaWFibGUgdm9sdGFnZV9kb21haW5zCisKKyAgc2V0IGlzX3VuaXF1ZV9wb3dlciAxCisgIGZvcmVhY2ggdmRfa2V5IFtkaWN0IGtleXMgJHZvbHRhZ2VfZG9tYWluc10geworICAgIGlmIHtbZGljdCBnZXQgJHZvbHRhZ2VfZG9tYWlucyAkdmRfa2V5IHByaW1hcnlfcG93ZXJdICE9IFskbmV0IGdldE5hbWVdfSB7CisgICAgICBzZXQgaXNfdW5pcXVlX3Bvd2VyIDAKKyAgICAgIGJyZWFrCisgICAgfQorICB9CisKKyAgc2V0IGlzX3VuaXF1ZV9ncm91bmQgMQorICBmb3JlYWNoIHZkX2tleSBbZGljdCBrZXlzICR2b2x0YWdlX2RvbWFpbnNdIHsKKyAgICBpZiB7W2RpY3QgZ2V0ICR2b2x0YWdlX2RvbWFpbnMgJHZkX2tleSBwcmltYXJ5X2dyb3VuZF0gIT0gWyRuZXQgZ2V0TmFtZV19IHsKKyAgICAgIHNldCBpc191bmlxdWVfZ3JvdW5kIDAKKyAgICAgIGJyZWFrCisgICAgfQorICB9CisKKyAgcmV0dXJuIFtleHByICRpc191bmlxdWVfcG93ZXIgfHwgJGlzX3VuaXF1ZV9ncm91bmRdCisKK30KKworIyBUaGlzIHByb2MgZ2VuZXJhdGVzIHBvd2VyIHJpbmdzIGZvciB2b2x0YWdlIGRvbWFpbnMsIHRhZ3MgZm9yIHRoZSBjb3JlIGRvbWFpbiBhcmUgUE9XRVIvR1JPVU5ELCB0YWdzIGZvciB0aGUgb3RoZXIKKyMgdm9sdGFnZSBkb21haW5zIGFyZSBkZWZpbmVkIGFzIFBPV0VSXzxwd3ItbmV0PiBhbmQgR1JPVU5EXzxnbmQtbmV0PgorcHJvYyBnZW5lcmF0ZV92b2x0YWdlX2RvbWFpbl9yaW5ncyB7Y29yZV9yaW5nX2RhdGF9IHsKKyAgdmFyaWFibGUgYmxvY2sKKyAgdmFyaWFibGUgdm9sdGFnZV9kb21haW5zCisgIHZhcmlhYmxlIGdyaWRfZGF0YQorICB2YXJpYWJsZSBkZXNpZ25fZGF0YQorCisgIGZvcmVhY2ggZG9tYWluX25hbWUgW2RpY3Qga2V5cyAkdm9sdGFnZV9kb21haW5zXSB7CisgICAgaWYgeyRkb21haW5fbmFtZSA9PSBbZGljdCBnZXQgJGRlc2lnbl9kYXRhIGNvcmVfZG9tYWluXX0ge2NvbnRpbnVlfQorICAgIHNldCBkb21haW4gWyRibG9jayBmaW5kUmVnaW9uICRkb21haW5fbmFtZV0KKyAgICBzZXQgcmVjdCBbbGluZGV4IFskZG9tYWluIGdldEJvdW5kYXJpZXNdIDBdCisgICAgc2V0IHBvd2VyX25ldCBbZ2V0X3ZvbHRhZ2VfZG9tYWluX3Bvd2VyICRkb21haW5fbmFtZV0KKyAgICBzZXQgc2Vjb25kYXJ5X3Bvd2VyX25ldCBbZ2V0X3ZvbHRhZ2VfZG9tYWluX3NlY29uZGFyeV9wb3dlciAkZG9tYWluX25hbWVdCisgICAgc2V0IGdyb3VuZF9uZXQgW2dldF92b2x0YWdlX2RvbWFpbl9ncm91bmQgJGRvbWFpbl9uYW1lXQorICAgIAorICAgIHNldCBkb21haW5feE1pbiBbJHJlY3QgeE1pbl0KKyAgICBzZXQgZG9tYWluX3lNaW4gWyRyZWN0IHlNaW5dCisgICAgc2V0IGRvbWFpbl94TWF4IFskcmVjdCB4TWF4XQorICAgIHNldCBkb21haW5feU1heCBbJHJlY3QgeU1heF0KKyAgICBkaWN0IGZvciB7bGF5ZXIgbGF5ZXJfaW5mb30gJGNvcmVfcmluZ19kYXRhIHsKKyAgICAgIGlmIHtbZGljdCBleGlzdHMgJGxheWVyX2luZm8gY29yZV9vZmZzZXRdfSB7CisgICAgICAgIHNldCBvZmZzZXQgW2RpY3QgZ2V0ICRsYXllcl9pbmZvIGNvcmVfb2Zmc2V0XQorCisgICAgICAgIHNldCBzcGFjaW5nIFtkaWN0IGdldCAkbGF5ZXJfaW5mbyBzcGFjaW5nXQorICAgICAgICBzZXQgd2lkdGggW2RpY3QgZ2V0ICRsYXllcl9pbmZvIHdpZHRoXQorCisgICAgICAgIHNldCBpbm5lcl9seCBbZXhwciAkZG9tYWluX3hNaW4gLSAkb2Zmc2V0XQorICAgICAgICBzZXQgaW5uZXJfbHkgW2V4cHIgJGRvbWFpbl95TWluIC0gJG9mZnNldF0KKyAgICAgICAgc2V0IGlubmVyX3V4IFtleHByICRkb21haW5feE1heCArICRvZmZzZXRdCisgICAgICAgIHNldCBpbm5lcl91eSBbZXhwciAkZG9tYWluX3lNYXggKyAkb2Zmc2V0XQorCisgICAgICAgIHNldCBvdXRlcl9seCBbZXhwciAkZG9tYWluX3hNaW4gLSAkb2Zmc2V0IC0gJHNwYWNpbmcgLSAkd2lkdGhdCisgICAgICAgIHNldCBvdXRlcl9seSBbZXhwciAkZG9tYWluX3lNaW4gLSAkb2Zmc2V0IC0gJHNwYWNpbmcgLSAkd2lkdGhdCisgICAgICAgIHNldCBvdXRlcl91eCBbZXhwciAkZG9tYWluX3hNYXggKyAkb2Zmc2V0ICsgJHNwYWNpbmcgKyAkd2lkdGhdCisgICAgICAgIHNldCBvdXRlcl91eSBbZXhwciAkZG9tYWluX3lNYXggKyAkb2Zmc2V0ICsgJHNwYWNpbmcgKyAkd2lkdGhdCisgICAgICB9CisgICAgICBzZXQgbnVtYmVyX29mX3JpbmdzIDAKKyAgICAgIGlmIHtbZ2V0X2RpciAkbGF5ZXJdID09ICJob3IifSB7CisgICAgICAgIHNldCBsb3dlcl9pbm5lcl9yaW5nIFwKKyAgICAgICAgICBbb2RiOjpuZXdTZXRGcm9tUmVjdCBcCisgICAgICAgICAgICBbZXhwciAkaW5uZXJfbHggLSAkd2lkdGggLyAyXSBcCisgICAgICAgICAgICBbZXhwciAkaW5uZXJfbHkgLSAkd2lkdGggLyAyXSBcCisgICAgICAgICAgICBbZXhwciAkaW5uZXJfdXggKyAkd2lkdGggLyAyXSBcCisgICAgICAgICAgICBbZXhwciAkaW5uZXJfbHkgKyAkd2lkdGggLyAyXSBcCisgICAgICAgICAgXQorICAgICAgICBzZXQgdXBwZXJfaW5uZXJfcmluZyBcCisgICAgICAgICAgW29kYjo6bmV3U2V0RnJvbVJlY3QgXAorICAgICAgICAgICAgW2V4cHIgJGlubmVyX2x4IC0gJHdpZHRoIC8gMl0gXAorICAgICAgICAgICAgW2V4cHIgJGlubmVyX3V5IC0gJHdpZHRoIC8gMl0gXAorICAgICAgICAgICAgW2V4cHIgJGlubmVyX3V4ICsgJHdpZHRoIC8gMl0gXAorICAgICAgICAgICAgW2V4cHIgJGlubmVyX3V5ICsgJHdpZHRoIC8gMl0gXAorICAgICAgICAgIF0KKyAgICAgICAgc2V0IGxvd2VyX291dGVyX3JpbmcgXAorICAgICAgICAgIFtvZGI6Om5ld1NldEZyb21SZWN0IFwKKyAgICAgICAgICAgIFtleHByICRvdXRlcl9seCAtICR3aWR0aCAvIDJdIFwKKyAgICAgICAgICAgIFtleHByICRvdXRlcl9seSAtICR3aWR0aCAvIDJdIFwKKyAgICAgICAgICAgIFtleHByICRvdXRlcl91eCArICR3aWR0aCAvIDJdIFwKKyAgICAgICAgICAgIFtleHByICRvdXRlcl9seSArICR3aWR0aCAvIDJdIFwKKyAgICAgICAgICBdCisgICAgICAgIHNldCB1cHBlcl9vdXRlcl9yaW5nIFwKKyAgICAgICAgICBbb2RiOjpuZXdTZXRGcm9tUmVjdCBcCisgICAgICAgICAgICBbZXhwciAkb3V0ZXJfbHggLSAkd2lkdGggLyAyXSBcCisgICAgICAgICAgICBbZXhwciAkb3V0ZXJfdXkgLSAkd2lkdGggLyAyXSBcCisgICAgICAgICAgICBbZXhwciAkb3V0ZXJfdXggKyAkd2lkdGggLyAyXSBcCisgICAgICAgICAgICBbZXhwciAkb3V0ZXJfdXkgKyAkd2lkdGggLyAyXSBcCisgICAgICAgICAgXQorICAgICAgICAKKyAgICAgICAgaWYgeyRwb3dlcl9uZXQgPT0gW2dldF92b2x0YWdlX2RvbWFpbl9wb3dlciBbZGljdCBnZXQgJGRlc2lnbl9kYXRhIGNvcmVfZG9tYWluXV19IHsKKyAgICAgICAgICBhZGRfc3RyaXBlICRsYXllciAiUE9XRVIiICRsb3dlcl9pbm5lcl9yaW5nCisgICAgICAgICAgYWRkX3N0cmlwZSAkbGF5ZXIgIlBPV0VSIiAkdXBwZXJfaW5uZXJfcmluZworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGFkZF9zdHJpcGUgJGxheWVyICJQT1dFUl8kcG93ZXJfbmV0IiAkbG93ZXJfaW5uZXJfcmluZworICAgICAgICAgIGFkZF9zdHJpcGUgJGxheWVyICJQT1dFUl8kcG93ZXJfbmV0IiAkdXBwZXJfaW5uZXJfcmluZworICAgICAgICB9CisgICAgICAgIGlmIHskZ3JvdW5kX25ldCA9PSBbZ2V0X3ZvbHRhZ2VfZG9tYWluX2dyb3VuZCBbZGljdCBnZXQgJGRlc2lnbl9kYXRhIGNvcmVfZG9tYWluXV19IHsKKyAgICAgICAgICBhZGRfc3RyaXBlICRsYXllciAiR1JPVU5EIiAkbG93ZXJfb3V0ZXJfcmluZworICAgICAgICAgIGFkZF9zdHJpcGUgJGxheWVyICJHUk9VTkQiICR1cHBlcl9vdXRlcl9yaW5nCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgYWRkX3N0cmlwZSAkbGF5ZXIgIkdST1VORF8kZ3JvdW5kX25ldCIgJGxvd2VyX291dGVyX3JpbmcKKyAgICAgICAgICBhZGRfc3RyaXBlICRsYXllciAiR1JPVU5EXyRncm91bmRfbmV0IiAkdXBwZXJfb3V0ZXJfcmluZworICAgICAgICB9CisgICAgICAgIAorICAgICAgCXNldCBudW1iZXJfb2ZfcmluZ3MgW2xsZW5ndGggJHNlY29uZGFyeV9wb3dlcl9uZXRdCisgICAgICAgIGZvcmVhY2ggc2Vjb25kYXJ5X3Bvd2VyICRzZWNvbmRhcnlfcG93ZXJfbmV0IHsKKyAgICAgICAgICBzZXQgb3V0ZXJfbHggW2V4cHIgJG91dGVyX2x4IC0gJHNwYWNpbmcgLSAkd2lkdGhdCisgICAgICAgICAgc2V0IG91dGVyX2x5IFtleHByICRvdXRlcl9seSAtICRzcGFjaW5nIC0gJHdpZHRoXQorICAgICAgICAgIHNldCBvdXRlcl91eCBbZXhwciAkb3V0ZXJfdXggKyAkc3BhY2luZyArICR3aWR0aF0gCisgICAgCSAgICBzZXQgb3V0ZXJfdXkgW2V4cHIgJG91dGVyX3V5ICsgJHNwYWNpbmcgKyAkd2lkdGhdCisKKyAgICAgICAgICBzZXQgdXBwZXJfZG9tYWluX3Bvd2VyIFwKKyAgICAgICAgICAgIFtvZGI6Om5ld1NldEZyb21SZWN0IFwKKyAgICAgICAgICAgICAgW2V4cHIgJG91dGVyX2x4IC0gJHdpZHRoIC8gMl0gXAorICAgICAgICAgICAgICBbZXhwciAkb3V0ZXJfdXkgLSAkd2lkdGggLyAyXSBcCisgICAgICAgICAgICAgIFtleHByICRvdXRlcl91eCArICR3aWR0aCAvIDJdIFwKKyAgICAgICAgICAgICAgW2V4cHIgJG91dGVyX3V5ICsgJHdpZHRoIC8gMl0gXAorICAgICAgICAgICAgXQorCisgICAgICAgICAgc2V0IGxvd2VyX2RvbWFpbl9wb3dlciBcCisgICAgICAgICAgICBbb2RiOjpuZXdTZXRGcm9tUmVjdCBcCisgICAgICAgICAgICAgIFtleHByICRvdXRlcl9seCAtICR3aWR0aCAvIDJdIFwKKyAgICAgICAgICAgICAgW2V4cHIgJG91dGVyX2x5IC0gJHdpZHRoIC8gMl0gXAorICAgICAgICAgICAgICBbZXhwciAkb3V0ZXJfdXggKyAkd2lkdGggLyAyXSBcCisgICAgICAgICAgICAgIFtleHByICRvdXRlcl9seSArICR3aWR0aCAvIDJdIFwKKyAgICAgICAgICAgIF0KKworICAgICAgICAgIGFkZF9zdHJpcGUgJGxheWVyICJQT1dFUl8kc2Vjb25kYXJ5X3Bvd2VyIiAkdXBwZXJfZG9tYWluX3Bvd2VyCisgICAgICAgICAgYWRkX3N0cmlwZSAkbGF5ZXIgIlBPV0VSXyRzZWNvbmRhcnlfcG93ZXIiICRsb3dlcl9kb21haW5fcG93ZXIKKyAgICAgICAgfQorICAgICAgfSBlbHNlIHsKKyAgICAgICAgc2V0IGxoc19pbm5lcl9yaW5nIFwKKyAgICAgICAgICBbb2RiOjpuZXdTZXRGcm9tUmVjdCBcCisgICAgICAgICAgICBbZXhwciAkaW5uZXJfbHggLSAkd2lkdGggLyAyXSBcCisgICAgICAgICAgICBbZXhwciAkaW5uZXJfbHkgLSAkd2lkdGggLyAyXSBcCisgICAgICAgICAgICBbZXhwciAkaW5uZXJfbHggKyAkd2lkdGggLyAyXSBcCisgICAgICAgICAgICBbZXhwciAkaW5uZXJfdXkgKyAkd2lkdGggLyAyXSBcCisgICAgICAgICAgXQorICAgICAgICBzZXQgcmhzX2lubmVyX3JpbmcgXAorICAgICAgICAgIFtvZGI6Om5ld1NldEZyb21SZWN0IFwKKyAgICAgICAgICAgIFtleHByICRpbm5lcl91eCAtICR3aWR0aCAvIDJdIFwKKyAgICAgICAgICAgIFtleHByICRpbm5lcl9seSAtICR3aWR0aCAvIDJdIFwKKyAgICAgICAgICAgIFtleHByICRpbm5lcl91eCArICR3aWR0aCAvIDJdIFwKKyAgICAgICAgICAgIFtleHByICRpbm5lcl91eSArICR3aWR0aCAvIDJdIFwKKyAgICAgICAgICBdCisgICAgICAgIHNldCBsaHNfb3V0ZXJfcmluZyBcCisgICAgICAgICAgW29kYjo6bmV3U2V0RnJvbVJlY3QgXAorICAgICAgICAgICAgW2V4cHIgJG91dGVyX2x4IC0gJHdpZHRoIC8gMl0gXAorICAgICAgICAgICAgW2V4cHIgJG91dGVyX2x5IC0gJHdpZHRoIC8gMl0gXAorICAgICAgICAgICAgW2V4cHIgJG91dGVyX2x4ICsgJHdpZHRoIC8gMl0gXAorICAgICAgICAgICAgW2V4cHIgJG91dGVyX3V5ICsgJHdpZHRoIC8gMl0gXAorICAgICAgICAgIF0KKyAgICAgICAgc2V0IHJoc19vdXRlcl9yaW5nIFwKKyAgICAgICAgICBbb2RiOjpuZXdTZXRGcm9tUmVjdCBcCisgICAgICAgICAgICBbZXhwciAkb3V0ZXJfdXggLSAkd2lkdGggLyAyXSBcCisgICAgICAgICAgICBbZXhwciAkb3V0ZXJfbHkgLSAkd2lkdGggLyAyXSBcCisgICAgICAgICAgICBbZXhwciAkb3V0ZXJfdXggKyAkd2lkdGggLyAyXSBcCisgICAgICAgICAgICBbZXhwciAkb3V0ZXJfdXkgKyAkd2lkdGggLyAyXSBcCisgICAgICAgICAgXQorCisgICAgICAgIGlmIHskcG93ZXJfbmV0ID09IFtnZXRfdm9sdGFnZV9kb21haW5fcG93ZXIgW2RpY3QgZ2V0ICRkZXNpZ25fZGF0YSBjb3JlX2RvbWFpbl1dfSB7CisgICAgICAgICAgYWRkX3N0cmlwZSAkbGF5ZXIgIlBPV0VSIiAkbGhzX2lubmVyX3JpbmcKKyAgICAgICAgICBhZGRfc3RyaXBlICRsYXllciAiUE9XRVIiICRyaHNfaW5uZXJfcmluZworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGFkZF9zdHJpcGUgJGxheWVyICJQT1dFUl8kcG93ZXJfbmV0IiAkbGhzX2lubmVyX3JpbmcKKyAgICAgICAgICBhZGRfc3RyaXBlICRsYXllciAiUE9XRVJfJHBvd2VyX25ldCIgJHJoc19pbm5lcl9yaW5nCisgICAgICAgIH0KKyAgICAgICAgaWYgeyRncm91bmRfbmV0ID09IFtnZXRfdm9sdGFnZV9kb21haW5fZ3JvdW5kIFtkaWN0IGdldCAkZGVzaWduX2RhdGEgY29yZV9kb21haW5dXX0geworICAgICAgICAgIGFkZF9zdHJpcGUgJGxheWVyICJHUk9VTkQiICRsaHNfb3V0ZXJfcmluZworICAgICAgICAgIGFkZF9zdHJpcGUgJGxheWVyICJHUk9VTkQiICRyaHNfb3V0ZXJfcmluZworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGFkZF9zdHJpcGUgJGxheWVyICJHUk9VTkRfJGdyb3VuZF9uZXQiICRsaHNfb3V0ZXJfcmluZworICAgICAgICAgIGFkZF9zdHJpcGUgJGxheWVyICJHUk9VTkRfJGdyb3VuZF9uZXQiICRyaHNfb3V0ZXJfcmluZworICAgICAgICB9CisKKyAgICAgICAgZm9yZWFjaCBzZWNvbmRhcnlfcG93ZXIgJHNlY29uZGFyeV9wb3dlcl9uZXQgeworICAgICAgICAgIHNldCBvdXRlcl9seCBbZXhwciAkb3V0ZXJfbHggLSAkc3BhY2luZyAtICR3aWR0aF0KKyAgICAgICAgICBzZXQgb3V0ZXJfbHkgW2V4cHIgJG91dGVyX2x5IC0gJHNwYWNpbmcgLSAkd2lkdGhdCisgICAgICAgICAgc2V0IG91dGVyX3V4IFtleHByICRvdXRlcl91eCArICRzcGFjaW5nICsgJHdpZHRoXQorICAgICAgICAgIHNldCBvdXRlcl91eSBbZXhwciAkb3V0ZXJfdXkgKyAkc3BhY2luZyArICR3aWR0aF0KKyAgCisgICAgICAgICAgc2V0IGxoc19kb21haW5fcG93ZXIgXAorICAgICAgICAgICAgW29kYjo6bmV3U2V0RnJvbVJlY3QgXAorICAgICAgICAgICAgICBbZXhwciAkb3V0ZXJfbHggLSAkd2lkdGggLyAyXSBcCisgICAgICAgICAgICAgIFtleHByICRvdXRlcl9seSAtICR3aWR0aCAvIDJdIFwKKyAgICAgICAgICAgICAgW2V4cHIgJG91dGVyX2x4ICsgJHdpZHRoIC8gMl0gXAorICAgICAgICAgICAgICBbZXhwciAkb3V0ZXJfdXkgKyAkd2lkdGggLyAyXSBcCisgICAgICAgICAgICBdCisKKyAgICAgICAgICBzZXQgcmhzX2RvbWFpbl9wb3dlciBcCisgICAgICAgICAgICBbb2RiOjpuZXdTZXRGcm9tUmVjdCBcCisgICAgICAgICAgICAgIFtleHByICRvdXRlcl91eCAtICR3aWR0aCAvIDJdIFwKKyAgICAgICAgICAgICAgW2V4cHIgJG91dGVyX2x5IC0gJHdpZHRoIC8gMl0gXAorICAgICAgICAgICAgICBbZXhwciAkb3V0ZXJfdXggKyAkd2lkdGggLyAyXSBcCisgICAgICAgICAgICAgIFtleHByICRvdXRlcl91eSArICR3aWR0aCAvIDJdIFwKKyAgICAgICAgICAgIF0KKworICAgICAgICAgIGFkZF9zdHJpcGUgJGxheWVyICJQT1dFUl8kc2Vjb25kYXJ5X3Bvd2VyIiAkbGhzX2RvbWFpbl9wb3dlcgorICAgICAgICAgIGFkZF9zdHJpcGUgJGxheWVyICJQT1dFUl8kc2Vjb25kYXJ5X3Bvd2VyIiAkcmhzX2RvbWFpbl9wb3dlcgorICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9Cit9CisKKworIyBUaGlzIHByb2MgZGV0ZWN0cyBwaW5zIHVzZWQgaW4gcGRuLmNmZyBmb3IgZ2xvYmFsIGNvbm5lY3Rpb25zCitwcm9jIGdldF92YWxpZF9tdGVybXMge25ldF9uYW1lfSB7CisgIHZhcmlhYmxlIGdsb2JhbF9jb25uZWN0aW9ucworICB2YXJpYWJsZSBkZWZhdWx0X2dsb2JhbF9jb25uZWN0aW9ucworIAorICBpZiB7JGdsb2JhbF9jb25uZWN0aW9ucyA9PSB7fX0geworICAgIHNldCBnbG9iYWxfY29ubmVjdGlvbnMgJGRlZmF1bHRfZ2xvYmFsX2Nvbm5lY3Rpb25zCisgIH0KKworICBzZXQgbXRlcm1zX2xpc3Qge30KKyAgaWYgeyFbZGljdCBleGlzdHMgJGdsb2JhbF9jb25uZWN0aW9ucyAkbmV0X25hbWVdfSB7CisgICAgdXRsOjplcnJvciBQRE4gIDE3NCAiTmV0ICRuZXRfbmFtZSBoYXMgbm8gZ2xvYmFsIGNvbm5lY3Rpb25zIGRlZmluZWQuIgorICB9CisKKyAgZm9yZWFjaCBwYXR0ZXJuIFtkaWN0IGdldCAkZ2xvYmFsX2Nvbm5lY3Rpb25zICRuZXRfbmFtZV0geworICAgIGxhcHBlbmQgbXRlcm1zX2xpc3QgW2RpY3QgZ2V0ICRwYXR0ZXJuIHBpbl9uYW1lXQorICB9CisgIHJldHVybiAkbXRlcm1zX2xpc3QKK30KKworcHJvYyBjb3JlX2FyZWFfYm91bmRhcnkge30geworICB2YXJpYWJsZSBkZXNpZ25fZGF0YQorICB2YXJpYWJsZSB0ZW1wbGF0ZQorICB2YXJpYWJsZSBtZXRhbF9sYXllcnMKKyAgdmFyaWFibGUgZ3JpZF9kYXRhCisKKyAgc2V0IGNvcmVfYXJlYSBbZmluZF9jb3JlX2FyZWFdCisgICMgV2UgbmVlZCB0byBhbGxvdyB0aGUgcmFpbHMgdG8gZXh0ZW5kIGJ5IGhhbGYgYSByYWlscyB3aWR0aCBpbiB0aGUgeSBkaXJlY3Rpb24sIHNpbmNlIHRoZSByYWlscyBvdmVybGFwIHRoZSBjb3JlX2FyZWEKKworICBzZXQgbGx4IFtsaW5kZXggJGNvcmVfYXJlYSAwXQorICBzZXQgbGx5IFtsaW5kZXggJGNvcmVfYXJlYSAxXQorICBzZXQgdXJ4IFtsaW5kZXggJGNvcmVfYXJlYSAyXQorICBzZXQgdXJ5IFtsaW5kZXggJGNvcmVfYXJlYSAzXQorCisgIGlmIHtbZGljdCBleGlzdHMgJHRlbXBsYXRlIHdpZHRoXX0geworICAgIHNldCB3aWR0aCBbZGljdCBnZXQgJHRlbXBsYXRlIHdpZHRoXQorICB9IGVsc2UgeworICAgIHNldCB3aWR0aCAyMDAwCisgIH0KKyAgaWYge1tkaWN0IGV4aXN0cyAkdGVtcGxhdGUgaGVpZ2h0XX0geworICAgIHNldCBoZWlnaHQgW2RpY3QgZ2V0ICR0ZW1wbGF0ZSBoZWlnaHRdCisgIH0gZWxzZSB7CisgICAgc2V0IGhlaWdodCAyMDAwCisgIH0KKworICAjIEFkZCBibG9ja2FnZXMgYXJvdW5kIHRoZSBvdXRzaWRlIG9mIHRoZSBjb3JlIGFyZWEgaW4gb3JkZXIgdG8gdHJpbSBiYWNrIHRoZSB0ZW1wbGF0ZXMuCisgICMKKyAgc2V0IGJvdW5kYXJ5IFtvZGI6Om5ld1NldEZyb21SZWN0IFtleHByICRsbHggLSAkd2lkdGhdIFtleHByICRsbHkgLSAkaGVpZ2h0XSAkbGx4IFtleHByICR1cnkgKyAkaGVpZ2h0XV0KKyAgc2V0IGJvdW5kYXJ5IFtvZGI6Om9yU2V0ICRib3VuZGFyeSBbb2RiOjpuZXdTZXRGcm9tUmVjdCBbZXhwciAkbGx4IC0gJHdpZHRoXSBbZXhwciAkbGx5IC0gJGhlaWdodF0gW2V4cHIgJHVyeCArICR3aWR0aF0gJGxseV1dCisgIHNldCBib3VuZGFyeSBbb2RiOjpvclNldCAkYm91bmRhcnkgW29kYjo6bmV3U2V0RnJvbVJlY3QgW2V4cHIgJGxseCAtICR3aWR0aF0gJHVyeSBbZXhwciAkdXJ4ICsgJHdpZHRoXSBbZXhwciAkdXJ5ICsgJGhlaWdodF1dXQorICBzZXQgYm91bmRhcnkgW29kYjo6b3JTZXQgJGJvdW5kYXJ5IFtvZGI6Om5ld1NldEZyb21SZWN0ICR1cnggW2V4cHIgJGxseSAtICRoZWlnaHRdIFtleHByICR1cnggKyAkd2lkdGhdIFtleHByICR1cnkgKyAkaGVpZ2h0XV1dCisgIHNldCBib3VuZGFyeSBbb2RiOjpzdWJ0cmFjdFNldCAkYm91bmRhcnkgW2dldF9zdGRjZWxsX3BsdXNfYXJlYV1dCisKKyAgZm9yZWFjaCBsYXllciAkbWV0YWxfbGF5ZXJzIHsKKyAgICBpZiB7W2RpY3QgZXhpc3RzICRncmlkX2RhdGEgY29yZV9yaW5nXSAmJiBbZGljdCBleGlzdHMgJGdyaWRfZGF0YSBjb3JlX3JpbmcgJGxheWVyXX0ge2NvbnRpbnVlfQorICAgIGRpY3Qgc2V0IGJsb2NrYWdlcyAkbGF5ZXIgJGJvdW5kYXJ5CisgIH0KKworICByZXR1cm4gJGJsb2NrYWdlcworfQorCitwcm9jIGdldF9pbnN0YW5jZV9ibG9ja2FnZXMge2luc3RzfSB7CisgIHZhcmlhYmxlIGluc3RhbmNlcworICBzZXQgYmxvY2thZ2VzIHt9CisKKyAgZm9yZWFjaCBpbnN0ICRpbnN0cyB7CisgICAgZm9yZWFjaCBsYXllciBbZ2V0X21hY3JvX2Jsb2NrYWdlX2xheWVycyAkaW5zdF0geworICAgICAgIyBkZWJ1ZyAiSW5zdCAkaW5zdCIKKyAgICAgICMgZGVidWcgIk1hY3JvIGJvdW5kYXJ5OiBbZGljdCBnZXQgJGluc3RhbmNlcyAkaW5zdCBtYWNyb19ib3VuZGFyeV0iCisgICAgICAjIGRlYnVnICJIYWxvIGJvdW5kYXJ5OiAgW2RpY3QgZ2V0ICRpbnN0YW5jZXMgJGluc3QgaGFsb19ib3VuZGFyeV0iCisgICAgICBzZXQgYm94IFtvZGI6Om5ld1NldEZyb21SZWN0IFtnZXRfaW5zdGFuY2VfbGx4ICRpbnN0XSBbZ2V0X2luc3RhbmNlX2xseSAkaW5zdF0gW2dldF9pbnN0YW5jZV91cnggJGluc3RdIFtnZXRfaW5zdGFuY2VfdXJ5ICRpbnN0XV0KKyAgICAgIGlmIHtbZGljdCBleGlzdHMgJGJsb2NrYWdlcyAkbGF5ZXJdfSB7CisgICAgICAgIGRpY3Qgc2V0IGJsb2NrYWdlcyAkbGF5ZXIgW29kYjo6b3JTZXQgW2RpY3QgZ2V0ICRibG9ja2FnZXMgJGxheWVyXSAkYm94XQorICAgICAgfSBlbHNlIHsKKyAgICAgICAgZGljdCBzZXQgYmxvY2thZ2VzICRsYXllciAkYm94CisgICAgICB9CisgICAgfQorICB9CisKKyAgcmV0dXJuICRibG9ja2FnZXMKK30KKworcHJvYyBkZWZpbmVfdGVtcGxhdGVfZ3JpZCB7fSB7CisgIHZhcmlhYmxlIGRlc2lnbl9kYXRhCisgIHZhcmlhYmxlIHRlbXBsYXRlCisgIHZhcmlhYmxlIHBsYW5fdGVtcGxhdGUKKyAgdmFyaWFibGUgYmxvY2sKKyAgdmFyaWFibGUgZGVmYXVsdF9ncmlkX2RhdGEKKyAgdmFyaWFibGUgZGVmYXVsdF90ZW1wbGF0ZV9uYW1lCisKKyAgc2V0IGNvcmVfYXJlYSBbZGljdCBnZXQgJGRlc2lnbl9kYXRhIGNvbmZpZyBjb3JlX2FyZWFdCisgIHNldCBsbHggW2xpbmRleCAkY29yZV9hcmVhIDBdCisgIHNldCBsbHkgW2xpbmRleCAkY29yZV9hcmVhIDFdCisgIHNldCB1cnggW2xpbmRleCAkY29yZV9hcmVhIDJdCisgIHNldCB1cnkgW2xpbmRleCAkY29yZV9hcmVhIDNdCisKKyAgc2V0IGNvcmVfd2lkdGggIFtleHByICR1cnggLSAkbGx4XQorICBzZXQgY29yZV9oZWlnaHQgW2V4cHIgJHVyeSAtICRsbHldCisKKyAgc2V0IHRlbXBsYXRlX3dpZHRoICBbZGljdCBnZXQgJHRlbXBsYXRlIHdpZHRoXQorICBzZXQgdGVtcGxhdGVfaGVpZ2h0IFtkaWN0IGdldCAkdGVtcGxhdGUgaGVpZ2h0XQorICBzZXQgeF9zZWN0aW9ucyBbZXhwciByb3VuZCgkY29yZV93aWR0aCAgLyAkdGVtcGxhdGVfd2lkdGgpXQorICBzZXQgeV9zZWN0aW9ucyBbZXhwciByb3VuZCgkY29yZV9oZWlnaHQgLyAkdGVtcGxhdGVfaGVpZ2h0KV0KKworICBkaWN0IHNldCB0ZW1wbGF0ZSBvZmZzZXQgeCBbZXhwciBbbGluZGV4ICRjb3JlX2FyZWEgMF0gKyAoJGNvcmVfd2lkdGggLSAkeF9zZWN0aW9ucyAqICR0ZW1wbGF0ZV93aWR0aCkgLyAyXQorICBkaWN0IHNldCB0ZW1wbGF0ZSBvZmZzZXQgeSBbZXhwciBbbGluZGV4ICRjb3JlX2FyZWEgMV0gKyAoJGNvcmVfaGVpZ2h0IC0gJHlfc2VjdGlvbnMgKiAkdGVtcGxhdGVfaGVpZ2h0KSAvIDJdCisKKyAgaWYgeyRkZWZhdWx0X3RlbXBsYXRlX25hbWUgPT0ge319IHsKKyAgICBzZXQgdGVtcGxhdGVfbmFtZSBbbGluZGV4IFtkaWN0IGdldCAkZGVmYXVsdF9ncmlkX2RhdGEgdGVtcGxhdGUgbmFtZXNdIDBdCisgIH0gZWxzZSB7CisgICAgc2V0IHRlbXBsYXRlX25hbWUgJGRlZmF1bHRfdGVtcGxhdGVfbmFtZQorICB9CisKKyAgZm9yIHtzZXQgaSAtMX0geyRpIDw9ICR4X3NlY3Rpb25zfSB7aW5jciBpfSB7CisgICAgZm9yIHtzZXQgaiAtMX0geyRqIDw9ICR5X3NlY3Rpb25zfSB7aW5jciBqfSB7CisgICAgICBzZXQgbGx4IFtleHByICRpICogJHRlbXBsYXRlX3dpZHRoICsgW2RpY3QgZ2V0ICR0ZW1wbGF0ZSBvZmZzZXQgeF1dCisgICAgICBzZXQgbGx5IFtleHByICRqICogJHRlbXBsYXRlX2hlaWdodCArIFtkaWN0IGdldCAkdGVtcGxhdGUgb2Zmc2V0IHldXQorCisgICAgICBkaWN0IHNldCBwbGFuX3RlbXBsYXRlICRsbHggJGxseSAkdGVtcGxhdGVfbmFtZQorICAgIH0KKyAgfQorICB3cml0ZV90ZW1wbGF0ZV9wbGFjZW1lbnQKK30KKworcHJvYyBzZXRfYmxvY2thZ2VzIHt0aGVzZV9ibG9ja2FnZXN9IHsKKyAgdmFyaWFibGUgYmxvY2thZ2VzCisKKyAgc2V0IGJsb2NrYWdlcyAkdGhlc2VfYmxvY2thZ2VzCit9CisKK3Byb2MgZ2V0X2Jsb2NrYWdlcyB7fSB7CisgIHZhcmlhYmxlIGJsb2NrYWdlcworCisgIHJldHVybiAkYmxvY2thZ2VzCit9CisKK3Byb2MgYWRkX2Jsb2NrYWdlIHtsYXllciBibG9ja2FnZX0geworICB2YXJpYWJsZSBibG9ja2FnZXMKKworICBpZiB7W2RpY3QgZXhpc3RzICRibG9ja2FnZXMgJGxheWVyXX0geworICAgIGRpY3Qgc2V0IGJsb2NrYWdlcyAkbGF5ZXIgW29kYjo6b3JTZXQgW2RpY3QgZ2V0ICRibG9ja2FnZXMgJGxheWVyXSAkYmxvY2thZ2VdCisgIH0gZWxzZSB7CisgICAgZGljdCBzZXQgYmxvY2thZ2VzICRsYXllciAkYmxvY2thZ2UKKyAgfQorfQorCitwcm9jIGFkZF9wYWRjZWxsX2Jsb2NrYWdlIHtsYXllciBibG9ja2FnZX0geworICB2YXJpYWJsZSBwYWRjZWxsX2Jsb2NrYWdlcworCisgIGlmIHtbZGljdCBleGlzdHMgJHBhZGNlbGxfYmxvY2thZ2VzICRsYXllcl19IHsKKyAgICBkaWN0IHNldCBwYWRjZWxsX2Jsb2NrYWdlcyAkbGF5ZXIgW29kYjo6b3JTZXQgW2RpY3QgZ2V0ICRwYWRjZWxsX2Jsb2NrYWdlcyAkbGF5ZXJdICRibG9ja2FnZV0KKyAgfSBlbHNlIHsKKyAgICBkaWN0IHNldCBwYWRjZWxsX2Jsb2NrYWdlcyAkbGF5ZXIgJGJsb2NrYWdlCisgIH0KK30KKworcHJvYyBhcHBseV9wYWRjZWxsX2Jsb2NrYWdlcyB7fSB7CisgIHZhcmlhYmxlIHBhZGNlbGxfYmxvY2thZ2VzCisgIHZhcmlhYmxlIGdsb2JhbF9jb25uZWN0aW9ucworCisgIGRpY3QgZm9yIHtsYXllcl9uYW1lIGJsb2NrYWdlc30gJHBhZGNlbGxfYmxvY2thZ2VzIHsKKyAgICBhZGRfYmxvY2thZ2UgJGxheWVyX25hbWUgJGJsb2NrYWdlcworICB9Cit9CisKK3Byb2MgYWRkX2Jsb2NrYWdlcyB7bW9yZV9ibG9ja2FnZXN9IHsKKyAgdmFyaWFibGUgYmxvY2thZ2VzCisKKyAgZGljdCBmb3Ige2xheWVyIGJsb2NrYWdlfSAkbW9yZV9ibG9ja2FnZXMgeworICAgIGFkZF9ibG9ja2FnZSAkbGF5ZXIgJGJsb2NrYWdlCisgIH0KK30KKworcHJvYyBhZGRfbWFjcm9fYmFzZWRfZ3JpZHMge30geworICB2YXJpYWJsZSBncmlkX2RhdGEKKyAgdmFyaWFibGUgZGVzaWduX2RhdGEKKyAgdmFyaWFibGUgdmVyYm9zZQorCisgIGlmIHshW2RpY3QgZXhpc3RzICRkZXNpZ25fZGF0YSBncmlkIG1hY3JvXX0ge3JldHVybn0KKworICBmb3JlYWNoIHtrZXkgZ3JpZF9kYXRhfSBbZGljdCBnZXQgJGRlc2lnbl9kYXRhIGdyaWQgbWFjcm9dIHsKKyAgICBpZiB7IVtkaWN0IGV4aXN0cyAkZ3JpZF9kYXRhIF9yZWxhdGVkX2luc3RhbmNlc119IHtjb250aW51ZX0KKyAgICBzZXQgaW5zdGFuY2VzIFtkaWN0IGdldCAkZ3JpZF9kYXRhIF9yZWxhdGVkX2luc3RhbmNlc10KKworICAgIHNldF9ibG9ja2FnZXMge30KKyAgICBpZiB7W2xsZW5ndGggW2RpY3Qga2V5cyAkaW5zdGFuY2VzXV0gPiAwfSB7CisgICAgICB1dGw6OmluZm8gIlBETiIgMTAgIkluc2VydGluZyBtYWNybyBncmlkIGZvciBbbGxlbmd0aCBbZGljdCBrZXlzICRpbnN0YW5jZXNdXSBtYWNyb3MuIgorICAgICAgZm9yZWFjaCBpbnN0YW5jZSBbZGljdCBrZXlzICRpbnN0YW5jZXNdIHsKKyAgICAgICAgaWYgeyR2ZXJib3NlID09IDF9IHsKKyAgICAgICAgICB1dGw6OmluZm8gIlBETiIgMzQgIiAgLSBncmlkIFtkaWN0IGdldCAkZ3JpZF9kYXRhIG5hbWVdIGZvciBpbnN0YW5jZSAkaW5zdGFuY2UiCisgICAgICAgIH0KKworICAgICAgICBpZiB7W2RpY3QgZXhpc3RzICRncmlkX2RhdGEgZ3JpZF9vdmVyX3BnX3BpbnNdfSB7CisgICAgICAgICAgIyBkZWJ1ZyAiR3JpZCBvdmVyIHBpbnM6IFtnZXRfaW5zdGFuY2VfcGdfcGluc19hcmVhICRpbnN0YW5jZV0iCisgICAgICAgICAgZGljdCBzZXQgZ3JpZF9kYXRhIGFyZWEgW2dldF9pbnN0YW5jZV9wZ19waW5zX2FyZWEgJGluc3RhbmNlXQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICMgZGVidWcgIkdyaWQgYm91bmRhcnk6IFtnZXRfaW5zdGFuY2VfcGdfcGluc19hcmVhICRpbnN0YW5jZV0iCisgICAgICAgICAgZGljdCBzZXQgZ3JpZF9kYXRhIGFyZWEgW2RpY3QgZ2V0ICRpbnN0YW5jZXMgJGluc3RhbmNlIG1hY3JvX2JvdW5kYXJ5XQorICAgICAgICB9CisgICAgICAgIGFkZF9ncmlkCisKKyAgICAgICAgIyBkZWJ1ZyAiR2VuZXJhdGUgdmlhcyBmb3IgW2RpY3QgZ2V0ICRkZXNpZ25fZGF0YSBwb3dlcl9uZXRzXSBbZGljdCBnZXQgJGRlc2lnbl9kYXRhIGdyb3VuZF9uZXRzXSIKKyAgICAgICAgZm9yZWFjaCBwd3JfbmV0IFtkaWN0IGdldCAkZGVzaWduX2RhdGEgcG93ZXJfbmV0c10geworICAgICAgICAgIGdlbmVyYXRlX2dyaWRfdmlhcyAiUE9XRVIiICRwd3JfbmV0CisgICAgICAgIH0KKyAgICAgICAgZm9yZWFjaCBnbmRfbmV0IFtkaWN0IGdldCAkZGVzaWduX2RhdGEgZ3JvdW5kX25ldHNdIHsKKyAgICAgICAgICBnZW5lcmF0ZV9ncmlkX3ZpYXMgIkdST1VORCIgJGduZF9uZXQKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorfQorCitwcm9jIHBsYW5fZ3JpZCB7fSB7CisgIHZhcmlhYmxlIGRlc2lnbl9kYXRhCisgIHZhcmlhYmxlIGluc3RhbmNlcworICB2YXJpYWJsZSBkZWZhdWx0X2dyaWRfZGF0YQorICB2YXJpYWJsZSBkZWZfdW5pdHMKKyAgdmFyaWFibGUgZ3JpZF9kYXRhCisKKyAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBNYWluIENvZGUgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyAgaWYgeyFbZGljdCBleGlzdHMgJGRlc2lnbl9kYXRhIGdyaWQgbWFjcm9dfSB7CisgICAgdXRsOjp3YXJuICJQRE4iIDE4ICJObyBtYWNybyBncmlkIHNwZWNpZmljYXRpb25zIGZvdW5kIC0gbm8gc3RyYXBzIGFkZGVkLiIKKyAgfQorCisgIHV0bDo6aW5mbyAiUEROIiAxMSAiKioqKioqIElORk8gKioqKioqIgorCisgIHByaW50X3N0cmF0ZWd5IHN0ZGNlbGwgW2dldF9zdGRjZWxsX3NwZWNpZmljYXRpb25dCisKKyAgaWYge1tkaWN0IGV4aXN0cyAkZGVzaWduX2RhdGEgZ3JpZCBtYWNyb119IHsKKyAgICBkaWN0IGZvciB7bmFtZSBzcGVjaWZpY2F0aW9ufSBbZGljdCBnZXQgJGRlc2lnbl9kYXRhIGdyaWQgbWFjcm9dIHsKKyAgICAgIHByaW50X3N0cmF0ZWd5IG1hY3JvICRzcGVjaWZpY2F0aW9uCisgICAgfQorICB9CisKKyAgdXRsOjppbmZvICJQRE4iIDEyICIqKioqIEVORCBJTkZPICoqKioiCisKKyAgc2V0IHNwZWNpZmljYXRpb24gJGRlZmF1bHRfZ3JpZF9kYXRhCisgIGlmIHtbZGljdCBleGlzdHMgJHNwZWNpZmljYXRpb24gbmFtZV19IHsKKyAgICB1dGw6OmluZm8gIlBETiIgMTMgIkluc2VydGluZyBzdGRjZWxsIGdyaWQgLSBbZGljdCBnZXQgJHNwZWNpZmljYXRpb24gbmFtZV0uIgorICB9IGVsc2UgeworICAgIHV0bDo6aW5mbyAiUEROIiAxNCAiSW5zZXJ0aW5nIHN0ZGNlbGwgZ3JpZC4iCisgIH0KKworICBpZiB7IVtkaWN0IGV4aXN0cyAkc3BlY2lmaWNhdGlvbiBhcmVhXX0geworICAgIGRpY3Qgc2V0IHNwZWNpZmljYXRpb24gYXJlYSBbZGljdCBnZXQgJGRlc2lnbl9kYXRhIGNvbmZpZyBjb3JlX2FyZWFdCisgIH0KKworICBzZXQgZ3JpZF9kYXRhICRzcGVjaWZpY2F0aW9uCisKKyAgc2V0IGJvdW5kYXJ5IFtvZGI6Om5ld1NldEZyb21SZWN0IHsqfVtkaWN0IGdldCAkZ3JpZF9kYXRhIGFyZWFdXQorICBzZXQgaW5zdHNfaW5fY29yZV9hcmVhIFtmaWx0ZXJlZF9pbnN0c193aXRoaW4gJGluc3RhbmNlcyAkYm91bmRhcnldCisKKyAgc2V0X2Jsb2NrYWdlcyBbZ2V0X2luc3RhbmNlX2Jsb2NrYWdlcyBbZGljdCBrZXlzICRpbnN0c19pbl9jb3JlX2FyZWFdXQorICBhZGRfYmxvY2thZ2VzIFtjb3JlX2FyZWFfYm91bmRhcnldCisgIGlmIHtbZGljdCBleGlzdHMgJHNwZWNpZmljYXRpb24gdGVtcGxhdGVdfSB7CisgICAgcmVhZF90ZW1wbGF0ZV9wbGFjZW1lbnQKKyAgfQorCisgIGFkZF9ncmlkCisgICNEaW5lc2gtQTogQ29yZSBSaW5nIHdpdGhvdXQgU3RyYXAKKyAgaWYge1tpbmZvIGV4aXN0cyAkZ3JpZF9kYXRhXX0geworICAJcHJvY2Vzc19jaGFubmVscworICB9CisKKyAgZm9yZWFjaCBwd3JfbmV0IFtkaWN0IGdldCAkZGVzaWduX2RhdGEgcG93ZXJfbmV0c10geworICAgIGdlbmVyYXRlX2dyaWRfdmlhcyAiUE9XRVIiICRwd3JfbmV0CisgIH0KKworICBmb3JlYWNoIGduZF9uZXQgW2RpY3QgZ2V0ICRkZXNpZ25fZGF0YSBncm91bmRfbmV0c10geworICAgIGdlbmVyYXRlX2dyaWRfdmlhcyAiR1JPVU5EIiAkZ25kX25ldAorICB9CisKKyAgYWRkX21hY3JvX2Jhc2VkX2dyaWRzCisgCit9CisKK3Byb2Mgb3BlbmRiX3VwZGF0ZV9ncmlkIHt9IHsKKyAgdXRsOjppbmZvICJQRE4iIDE1ICJXcml0aW5nIHRvIGRhdGFiYXNlLiIKKyAgZXhwb3J0X29wZW5kYl92aWFzCisgIGV4cG9ydF9vcGVuZGJfc3BlY2lhbG5ldHMKKyAgZXhwb3J0X29wZW5kYl9wb3dlcl9waW5zCit9CisgIAorcHJvYyBzZXRfdmVyYm9zZSB7fSB7CisgIHZhcmlhYmxlIHZlcmJvc2UKKworICBzZXQgdmVyYm9zZSAxCit9CisKK3Byb2MgYXBwbHkge2FyZ3N9IHsKKyAgdmFyaWFibGUgdmVyYm9zZQorICB2YXJpYWJsZSBkZWZhdWx0X2dyaWRfZGF0YQorCisgIGlmIHtbbGxlbmd0aCAkYXJnc10gPiAwICYmICR2ZXJib3NlfSB7CisgICAgc2V0IGNvbmZpZyBbbGluZGV4ICRhcmdzIDBdCisgICAgdXRsOjppbmZvICJQRE4iIDE2ICJQb3dlciBEZWxpdmVyeSBOZXR3b3JrIEdlbmVyYXRvcjogR2VuZXJhdGluZyBQRE5cbiAgY29uZmlnOiAkY29uZmlnIgorICB9CisKKyAgaWYge1tsbGVuZ3RoICRhcmdzXSA9PSAxfSB7CisgICAgc2V0IFBETl9jZmcgW2xpbmRleCAkYXJncyAwXQorICAgIGlmIHshW2ZpbGUgZXhpc3RzICRQRE5fY2ZnXX0geworICAgICAgdXRsOjplcnJvciAiUEROIiA2MiAiRmlsZSAkUEROX2NmZyBkb2VzIG5vdCBleGlzdC4iCisgICAgfQorIAorICAgIGlmIHshW2ZpbGVfZXhpc3RzX25vbl9lbXB0eSAkUEROX2NmZ119IHsKKyAgICAgIHV0bDo6ZXJyb3IgIlBETiIgMjggIkZpbGUgJFBETl9jZmcgaXMgZW1wdHkuIgorICAgIH0KKyAgICBzb3VyY2UgJFBETl9jZmcKKyAgfQorCisgIGluaXQgeyp9JGFyZ3MKKyAgY29tcGxldGVfbWFjcm9fZ3JpZF9zcGVjaWZpY2F0aW9ucworICBzZXQgZGVmYXVsdF9ncmlkX2RhdGEgW2dldF9zdGRjZWxsX3NwZWNpZmljYXRpb25dCisKKyAgcGxhbl9ncmlkCisKKyAgd3JpdGVfcGRuX3N0cmF0ZWd5CisKKyAgb3BlbmRiX3VwZGF0ZV9ncmlkCit9Cit9CmRpZmYgLS1naXQgYS9oYWNrcy9zcmMvT3BlblJPQUQvUmVzaXplci5jYyBiL2hhY2tzL3NyYy9PcGVuUk9BRC9SZXNpemVyLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwMGM2YzQKLS0tIC9kZXYvbnVsbAorKysgYi9oYWNrcy9zcmMvT3BlblJPQUQvUmVzaXplci5jYwpAQCAtMCwwICsxLDQxMzQgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gQ29weXJpZ2h0IChjKSAyMDE5LCBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisvLyBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8KKy8vIEJTRCAzLUNsYXVzZSBMaWNlbnNlCisvLworLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisvLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKy8vCisvLyAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworLy8gICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKy8vCisvLyAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKy8vICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorLy8gICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKy8vCisvLyAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKy8vICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy8vCisvLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKy8vIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKy8vIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisvLyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisvLyBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisvLyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorLy8gU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisvLyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorLy8gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKy8vIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisvLyBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyNpbmNsdWRlICJyc3ovUmVzaXplci5oaCIKKworI2luY2x1ZGUgInJzei9TdGVpbmVyVHJlZS5oaCIKKworI2luY2x1ZGUgImd1aS9ndWkuaCIKKyNpbmNsdWRlICJ1dGwvTG9nZ2VyLmgiCisKKyNpbmNsdWRlICJzdGEvUmVwb3J0LmhoIgorI2luY2x1ZGUgInN0YS9GdW5jRXhwci5oaCIKKyNpbmNsdWRlICJzdGEvUG9ydERpcmVjdGlvbi5oaCIKKyNpbmNsdWRlICJzdGEvVGltaW5nUm9sZS5oaCIKKyNpbmNsdWRlICJzdGEvVW5pdHMuaGgiCisjaW5jbHVkZSAic3RhL0xpYmVydHkuaGgiCisjaW5jbHVkZSAic3RhL1RpbWluZ0FyYy5oaCIKKyNpbmNsdWRlICJzdGEvVGltaW5nTW9kZWwuaGgiCisjaW5jbHVkZSAic3RhL05ldHdvcmsuaGgiCisjaW5jbHVkZSAic3RhL0dyYXBoLmhoIgorI2luY2x1ZGUgInN0YS9EY2FsY0FuYWx5c2lzUHQuaGgiCisjaW5jbHVkZSAic3RhL0FyY0RlbGF5Q2FsYy5oaCIKKyNpbmNsdWRlICJzdGEvR3JhcGhEZWxheUNhbGMuaGgiCisjaW5jbHVkZSAic3RhL1BhcmFzaXRpY3MuaGgiCisjaW5jbHVkZSAic3RhL1NkYy5oaCIKKyNpbmNsdWRlICJzdGEvSW5wdXREcml2ZS5oaCIKKyNpbmNsdWRlICJzdGEvQ29ybmVyLmhoIgorI2luY2x1ZGUgInN0YS9QYXRoVmVydGV4LmhoIgorI2luY2x1ZGUgInN0YS9TZWFyY2hQcmVkLmhoIgorI2luY2x1ZGUgInN0YS9CZnMuaGgiCisjaW5jbHVkZSAic3RhL1NlYXJjaC5oaCIKKyNpbmNsdWRlICJzdGEvUGF0aFJlZi5oaCIKKyNpbmNsdWRlICJzdGEvUGF0aEV4cGFuZGVkLmhoIgorI2luY2x1ZGUgInN0YS9TdGFNYWluLmhoIgorI2luY2x1ZGUgInN0YS9GdXp6eS5oaCIKKworLy8gaHR0cDovL3Zsc2ljYWQuZWVjcy51bWljaC5lZHUvQksvU2xvdHMvY2FjaGUvZHJvcHpvbmUudGFtdS5lZHUvfnpodW9saS9HU1JDL2Zhc3RfYnVmZmVyX2luc2VydGlvbi5odG1sCisKK25hbWVzcGFjZSBzdGEgeworZXh0ZXJuIGNvbnN0IGNoYXIgKnJzel90Y2xfaW5pdHNbXTsKK30KKworbmFtZXNwYWNlIHJzeiB7CisKK3VzaW5nIHN0ZDo6YWJzOwordXNpbmcgc3RkOjptaW47Cit1c2luZyBzdGQ6Om1heDsKK3VzaW5nIHN0ZDo6c3RyaW5nOwordXNpbmcgc3RkOjp0b19zdHJpbmc7Cit1c2luZyBzdGQ6OnZlY3RvcjsKK3VzaW5nIHN0ZDo6bWFwOwordXNpbmcgc3RkOjpwYWlyOwordXNpbmcgc3RkOjpzcXJ0OworCit1c2luZyB1dGw6OlJTWjsKKwordXNpbmcgb2RiOjpkYkluc3Q7Cit1c2luZyBvZGI6OmRiUGxhY2VtZW50U3RhdHVzOwordXNpbmcgb2RiOjpSZWN0OwordXNpbmcgb2RiOjpkYk9yaWVudFR5cGU7Cit1c2luZyBvZGI6OmRiTVBpbjsKK3VzaW5nIG9kYjo6ZGJCb3g7Cit1c2luZyBvZGI6OmRiTWFzdGVyVHlwZTsKKwordXNpbmcgc3RhOjpldmFsVGNsSW5pdDsKK3VzaW5nIHN0YTo6bWFrZUJsb2NrU3RhOwordXNpbmcgc3RhOjpMZXZlbDsKK3VzaW5nIHN0YTo6c3RyaW5nTGVzczsKK3VzaW5nIHN0YTo6TmV0d29yazsKK3VzaW5nIHN0YTo6TmV0d29ya0VkaXQ7Cit1c2luZyBzdGE6Ok5ldFBpbkl0ZXJhdG9yOwordXNpbmcgc3RhOjpOZXRDb25uZWN0ZWRQaW5JdGVyYXRvcjsKK3VzaW5nIHN0YTo6SW5zdGFuY2VQaW5JdGVyYXRvcjsKK3VzaW5nIHN0YTo6TGVhZkluc3RhbmNlSXRlcmF0b3I7Cit1c2luZyBzdGE6OkxpYmVydHlMaWJyYXJ5SXRlcmF0b3I7Cit1c2luZyBzdGE6OkxpYmVydHlDZWxsSXRlcmF0b3I7Cit1c2luZyBzdGE6OkxpYmVydHlDZWxsVGltaW5nQXJjU2V0SXRlcmF0b3I7Cit1c2luZyBzdGE6OlRpbWluZ0FyY1NldDsKK3VzaW5nIHN0YTo6VGltaW5nQXJjU2V0QXJjSXRlcmF0b3I7Cit1c2luZyBzdGE6OlRpbWluZ0FyY1NldFNlcTsKK3VzaW5nIHN0YTo6R2F0ZVRpbWluZ01vZGVsOwordXNpbmcgc3RhOjpUaW1pbmdSb2xlOwordXNpbmcgc3RhOjpGdW5jRXhwcjsKK3VzaW5nIHN0YTo6VGVybTsKK3VzaW5nIHN0YTo6UG9ydDsKK3VzaW5nIHN0YTo6UGluU2VxOwordXNpbmcgc3RhOjpOZXRJdGVyYXRvcjsKK3VzaW5nIHN0YTo6UGluQ29ubmVjdGVkUGluSXRlcmF0b3I7Cit1c2luZyBzdGE6OkZpbmROZXREcnZyTG9hZHM7OwordXNpbmcgc3RhOjpWZXJ0ZXhJdGVyYXRvcjsKK3VzaW5nIHN0YTo6VmVydGV4T3V0RWRnZUl0ZXJhdG9yOwordXNpbmcgc3RhOjpFZGdlOwordXNpbmcgc3RhOjpTZWFyY2g7Cit1c2luZyBzdGE6OlNlYXJjaFByZWROb25SZWcyOwordXNpbmcgc3RhOjpDbGtBcnJpdmFsU2VhcmNoUHJlZDsKK3VzaW5nIHN0YTo6QmZzQmt3ZEl0ZXJhdG9yOwordXNpbmcgc3RhOjpCZnNGd2RJdGVyYXRvcjsKK3VzaW5nIHN0YTo6QmZzSW5kZXg7Cit1c2luZyBzdGE6OkNsb2NrOwordXNpbmcgc3RhOjpQYXRoRXhwYW5kZWQ7Cit1c2luZyBzdGE6OklORjsKK3VzaW5nIHN0YTo6ZnV6enlFcXVhbDsKK3VzaW5nIHN0YTo6ZnV6enlMZXNzOwordXNpbmcgc3RhOjpmdXp6eUxlc3NFcXVhbDsKK3VzaW5nIHN0YTo6ZnV6enlHcmVhdGVyOwordXNpbmcgc3RhOjpmdXp6eUdyZWF0ZXJFcXVhbDsKK3VzaW5nIHN0YTo6ZGVsYXlJbmY7Cit1c2luZyBzdGE6OnN0cmluZ1ByaW50OwordXNpbmcgc3RhOjpVbml0OwordXNpbmcgc3RhOjpBcmNEZWxheUNhbGM7Cit1c2luZyBzdGE6OkNvcm5lcnM7Cit1c2luZyBzdGE6OklucHV0RHJpdmU7CisKK2V4dGVybiAiQyIgeworZXh0ZXJuIGludCBSc3pfSW5pdChUY2xfSW50ZXJwICppbnRlcnApOworfQorCitSZXNpemVyOjpSZXNpemVyKCkgOgorICBTdGFTdGF0ZSgpLAorICB3aXJlX3NpZ25hbF9yZXNfKDAuMCksCisgIHdpcmVfc2lnbmFsX2NhcF8oMC4wKSwKKyAgd2lyZV9jbGtfcmVzXygwLjApLAorICB3aXJlX2Nsa19jYXBfKDAuMCksCisgIG1heF9hcmVhXygwLjApLAorICBvcGVucm9hZF8obnVsbHB0ciksCisgIGxvZ2dlcl8obnVsbHB0ciksCisgIGd1aV8obnVsbHB0ciksCisgIHN0YV8obnVsbHB0ciksCisgIGRiX25ldHdvcmtfKG51bGxwdHIpLAorICBkYl8obnVsbHB0ciksCisgIGJsb2NrXyhudWxscHRyKSwKKyAgY29yZV9leGlzdHNfKGZhbHNlKSwKKyAgcGFyYXNpdGljc19zcmNfKFBhcmFzaXRpY3NTcmM6Om5vbmUpLAorICBkZXNpZ25fYXJlYV8oMC4wKSwKKyAgbWF4XyhNaW5NYXg6Om1heCgpKSwKKyAgYnVmZmVyX2xvd2VzdF9kcml2ZV8obnVsbHB0ciksCisgIGJ1ZmZlcl9tZWRfZHJpdmVfKG51bGxwdHIpLAorICBidWZmZXJfaGlnaGVzdF9kcml2ZV8obnVsbHB0ciksCisgIHRhcmdldF9sb2FkX21hcF8obnVsbHB0ciksCisgIGxldmVsX2RydnJfdmVydGljZXNfdmFsaWRfKGZhbHNlKSwKKyAgdGd0X3NsZXdzX3swLjAsIDAuMH0sCisgIHRndF9zbGV3X2Nvcm5lcl8obnVsbHB0ciksCisgIHRndF9zbGV3X2RjYWxjX2FwXyhudWxscHRyKSwKKyAgdW5pcXVlX25ldF9pbmRleF8oMSksCisgIHVuaXF1ZV9pbnN0X2luZGV4XygxKSwKKyAgcmVzaXplX2NvdW50XygwKSwKKyAgaW5zZXJ0ZWRfYnVmZmVyX2NvdW50XygwKSwKKyAgbWF4X3dpcmVfbGVuZ3RoXygwKSwKKyAgc3RlaW5lcl9yZW5kZXJlcl8obnVsbHB0ciksCisgIHJlYnVmZmVyX25ldF9jb3VudF8oMCkKK3sKK30KKwordm9pZAorUmVzaXplcjo6aW5pdChPcGVuUm9hZCAqb3BlbnJvYWQsCisgICAgICAgICAgICAgIFRjbF9JbnRlcnAgKmludGVycCwKKyAgICAgICAgICAgICAgTG9nZ2VyICpsb2dnZXIsCisgICAgICAgICAgICAgIEd1aSAqZ3VpLAorICAgICAgICAgICAgICBkYkRhdGFiYXNlICpkYiwKKyAgICAgICAgICAgICAgZGJTdGEgKnN0YSwKKyAgICAgICAgICAgICAgU3RlaW5lclRyZWVCdWlsZGVyICpzdHRfYnVpbGRlciwKKyAgICAgICAgICAgICAgR2xvYmFsUm91dGVyICpnbG9iYWxfcm91dGVyKQoreworICBvcGVucm9hZF8gPSBvcGVucm9hZDsKKyAgbG9nZ2VyXyA9IGxvZ2dlcjsKKyAgZ3VpXyA9IGd1aTsKKyAgZGJfID0gZGI7CisgIGJsb2NrXyA9IG51bGxwdHI7CisgIHN0YV8gPSBzdGE7CisgIHN0dF9idWlsZGVyXyA9IHN0dF9idWlsZGVyOworICBnbG9iYWxfcm91dGVyXyA9IGdsb2JhbF9yb3V0ZXI7CisgIGluY3JfZ3JvdXRlXyA9IG51bGxwdHI7CisgIGRiX25ldHdvcmtfID0gc3RhLT5nZXREYk5ldHdvcmsoKTsKKyAgY29weVN0YXRlKHN0YSk7CisgIC8vIERlZmluZSBzd2lnIFRDTCBjb21tYW5kcy4KKyAgUnN6X0luaXQoaW50ZXJwKTsKKyAgLy8gRXZhbCBlbmNvZGVkIHN0YSBUQ0wgc291cmNlcy4KKyAgZXZhbFRjbEluaXQoaW50ZXJwLCBzdGE6OnJzel90Y2xfaW5pdHMpOworfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2RvdWJsZQorUmVzaXplcjo6Y29yZUFyZWEoKSBjb25zdAoreworICByZXR1cm4gZGJ1VG9NZXRlcnMoY29yZV8uZHgoKSkgKiBkYnVUb01ldGVycyhjb3JlXy5keSgpKTsKK30KKworZG91YmxlCitSZXNpemVyOjp1dGlsaXphdGlvbigpCit7CisgIGVuc3VyZUJsb2NrKCk7CisgIGVuc3VyZURlc2lnbkFyZWEoKTsKKyAgZG91YmxlIGNvcmVfYXJlYSA9IGNvcmVBcmVhKCk7CisgIGlmIChjb3JlX2FyZWEgPiAwLjApCisgICAgcmV0dXJuIGRlc2lnbl9hcmVhXyAvIGNvcmVfYXJlYTsKKyAgZWxzZQorICAgIHJldHVybiAxLjA7Cit9CisKK2RvdWJsZQorUmVzaXplcjo6bWF4QXJlYSgpIGNvbnN0Cit7CisgIHJldHVybiBtYXhfYXJlYV87Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworY2xhc3MgVmVydGV4TGV2ZWxMZXNzCit7CitwdWJsaWM6CisgIFZlcnRleExldmVsTGVzcyhjb25zdCBOZXR3b3JrICpuZXR3b3JrKTsKKyAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IFZlcnRleCAqdmVydGV4MSwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IFZlcnRleCAqdmVydGV4MikgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgY29uc3QgTmV0d29yayAqbmV0d29ya187Cit9OworCitWZXJ0ZXhMZXZlbExlc3M6OlZlcnRleExldmVsTGVzcyhjb25zdCBOZXR3b3JrICpuZXR3b3JrKSA6CisgIG5ldHdvcmtfKG5ldHdvcmspCit7Cit9CisKK2Jvb2wKK1ZlcnRleExldmVsTGVzczo6b3BlcmF0b3IoKShjb25zdCBWZXJ0ZXggKnZlcnRleDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVmVydGV4ICp2ZXJ0ZXgyKSBjb25zdAoreworICBMZXZlbCBsZXZlbDEgPSB2ZXJ0ZXgxLT5sZXZlbCgpOworICBMZXZlbCBsZXZlbDIgPSB2ZXJ0ZXgyLT5sZXZlbCgpOworICByZXR1cm4gKGxldmVsMSA8IGxldmVsMikKKyAgICB8fCAobGV2ZWwxID09IGxldmVsMgorICAgICAgICAvLyBCcmVhayB0aWVzIGZvciBzdGFibGUgcmVzdWx0cy4KKyAgICAgICAgJiYgc3RyaW5nTGVzcyhuZXR3b3JrXy0+cGF0aE5hbWUodmVydGV4MS0+cGluKCkpLAorICAgICAgICAgICAgICAgICAgICAgIG5ldHdvcmtfLT5wYXRoTmFtZSh2ZXJ0ZXgyLT5waW4oKSkpKTsKK30KKworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKy8vIGJsb2NrXyBpbmRpY2F0ZXMgY29yZV8sIGRlc2lnbl9hcmVhXywgZGJfbmV0d29ya18gZXRjIHZhbGlkLgordm9pZAorUmVzaXplcjo6ZW5zdXJlQmxvY2soKQoreworICAvLyBibG9ja18gaW5kaWNhdGVzIGNvcmVfLCBkZXNpZ25fYXJlYV8KKyAgaWYgKGJsb2NrXyA9PSBudWxscHRyKSB7CisgICAgYmxvY2tfID0gZGJfLT5nZXRDaGlwKCktPmdldEJsb2NrKCk7CisgICAgYmxvY2tfLT5nZXRDb3JlQXJlYShjb3JlXyk7CisgICAgY29yZV9leGlzdHNfID0gIShjb3JlXy54TWluKCkgPT0gMAorICAgICAgICAgICAgICAgICAgICAgJiYgY29yZV8ueE1heCgpID09IDAKKyAgICAgICAgICAgICAgICAgICAgICYmIGNvcmVfLnlNaW4oKSA9PSAwCisgICAgICAgICAgICAgICAgICAgICAmJiBjb3JlXy55TWF4KCkgPT0gMCk7CisgIH0KK30KKwordm9pZAorUmVzaXplcjo6aW5pdCgpCit7CisgIC8vIEFiYnJldmlhdGVkIGNvcHlTdGF0ZQorICBkYl9uZXR3b3JrXyA9IHN0YV8tPmdldERiTmV0d29yaygpOworICBzdGFfLT5lbnN1cmVMZXZlbGl6ZWQoKTsKKyAgZ3JhcGhfID0gc3RhXy0+Z3JhcGgoKTsKKyAgZW5zdXJlQmxvY2soKTsKKyAgZW5zdXJlRGVzaWduQXJlYSgpOworICBlbnN1cmVMZXZlbERydnJWZXJ0aWNlcygpOworICBzdGFfLT5lbnN1cmVDbGtOZXR3b3JrKCk7Cit9CisKK3ZvaWQKK1Jlc2l6ZXI6OnJlbW92ZUJ1ZmZlcnMoKQoreworICBlbnN1cmVCbG9jaygpOworICBkYl9uZXR3b3JrXyA9IHN0YV8tPmdldERiTmV0d29yaygpOworICAvLyBEaXNhYmxlIGluY3JlbWVudGFsIHRpbWluZy4KKyAgZ3JhcGhfZGVsYXlfY2FsY18tPmRlbGF5c0ludmFsaWQoKTsKKyAgc2VhcmNoXy0+YXJyaXZhbHNJbnZhbGlkKCk7CisKKyAgaW50IHJlbW92ZV9jb3VudCA9IDA7CisgIGZvciAoZGJJbnN0ICppbnN0IDogYmxvY2tfLT5nZXRJbnN0cygpKSB7CisgICAgTGliZXJ0eUNlbGwgKmxpYl9jZWxsID0gZGJfbmV0d29ya18tPmxpYmVydHlDZWxsKGluc3QpOworICAgIGlmIChsaWJfY2VsbCAmJiBsaWJfY2VsbC0+aXNCdWZmZXIoKSkgeworICAgICAgSW5zdGFuY2UgKmJ1ZmZlciA9IGRiX25ldHdvcmtfLT5kYlRvU3RhKGluc3QpOworICAgICAgLy8gRG8gbm90IHJlbW92ZSBidWZmZXJzIGNvbm5lY3RlZCB0byBpbnB1dC9vdXRwdXQgcG9ydHMKKyAgICAgIC8vIGJlY2F1c2UgdmVyaWxvZyBuZXRsaXN0cyB1c2UgdGhlIG5ldCBuYW1lIGZvciB0aGUgcG9ydC4KKyAgICAgIGlmICghYnVmZmVyQmV0d2VlblBvcnRzKGJ1ZmZlcikpIHsKKyAgICAgICAgcmVtb3ZlQnVmZmVyKGJ1ZmZlcik7CisgICAgICAgIHJlbW92ZV9jb3VudCsrOworICAgICAgfQorICAgIH0KKyAgfQorICBsZXZlbF9kcnZyX3ZlcnRpY2VzX3ZhbGlkXyA9IGZhbHNlOworICBsb2dnZXJfLT5pbmZvKFJTWiwgMjYsICJSZW1vdmVkIHt9IGJ1ZmZlcnMuIiwgcmVtb3ZlX2NvdW50KTsKK30KKworYm9vbAorUmVzaXplcjo6YnVmZmVyQmV0d2VlblBvcnRzKEluc3RhbmNlICpidWZmZXIpCit7CisgIExpYmVydHlDZWxsICpsaWJfY2VsbCA9IG5ldHdvcmtfLT5saWJlcnR5Q2VsbChidWZmZXIpOworICBMaWJlcnR5UG9ydCAqaW5fcG9ydCwgKm91dF9wb3J0OworICBsaWJfY2VsbC0+YnVmZmVyUG9ydHMoaW5fcG9ydCwgb3V0X3BvcnQpOworICBQaW4gKmluX3BpbiA9IGRiX25ldHdvcmtfLT5maW5kUGluKGJ1ZmZlciwgaW5fcG9ydCk7CisgIFBpbiAqb3V0X3BpbiA9IGRiX25ldHdvcmtfLT5maW5kUGluKGJ1ZmZlciwgb3V0X3BvcnQpOworICBOZXQgKmluX25ldCA9IGRiX25ldHdvcmtfLT5uZXQoaW5fcGluKTsKKyAgTmV0ICpvdXRfbmV0ID0gZGJfbmV0d29ya18tPm5ldChvdXRfcGluKTsKKyAgYm9vbCBpbl9uZXRfcG9ydHMgPSBoYXNQb3J0KGluX25ldCk7CisgIGJvb2wgb3V0X25ldF9wb3J0cyA9IGhhc1BvcnQob3V0X25ldCk7CisgIHJldHVybiBpbl9uZXRfcG9ydHMgJiYgb3V0X25ldF9wb3J0czsKK30KKwordm9pZAorUmVzaXplcjo6cmVtb3ZlQnVmZmVyKEluc3RhbmNlICpidWZmZXIpCit7CisgIExpYmVydHlDZWxsICpsaWJfY2VsbCA9IG5ldHdvcmtfLT5saWJlcnR5Q2VsbChidWZmZXIpOworICBMaWJlcnR5UG9ydCAqaW5fcG9ydCwgKm91dF9wb3J0OworICBsaWJfY2VsbC0+YnVmZmVyUG9ydHMoaW5fcG9ydCwgb3V0X3BvcnQpOworICBQaW4gKmluX3BpbiA9IGRiX25ldHdvcmtfLT5maW5kUGluKGJ1ZmZlciwgaW5fcG9ydCk7CisgIFBpbiAqb3V0X3BpbiA9IGRiX25ldHdvcmtfLT5maW5kUGluKGJ1ZmZlciwgb3V0X3BvcnQpOworICBOZXQgKmluX25ldCA9IGRiX25ldHdvcmtfLT5uZXQoaW5fcGluKTsKKyAgTmV0ICpvdXRfbmV0ID0gZGJfbmV0d29ya18tPm5ldChvdXRfcGluKTsKKyAgYm9vbCBvdXRfbmV0X3BvcnRzID0gaGFzUG9ydChvdXRfbmV0KTsKKyAgTmV0ICpzdXJ2aXZvciwgKnJlbW92ZWQ7CisgIGlmIChvdXRfbmV0X3BvcnRzKSB7CisgICAgc3Vydml2b3IgPSBvdXRfbmV0OworICAgIHJlbW92ZWQgPSBpbl9uZXQ7CisgIH0KKyAgZWxzZSB7CisgICAgLy8gZGVmYXVsdCBvciBvdXRfbmV0X3BvcnRzCisgICAgLy8gRGVmYXVsdCB0byBpbl9uZXQgc3Vydml2aW5nIHNvIGRyaXZlcnMgKGNhY2hlZCBpbiBkYk5ldHdvcmspCisgICAgLy8gZG8gbm90IGNoYW5nZS4KKyAgICBzdXJ2aXZvciA9IGluX25ldDsKKyAgICByZW1vdmVkID0gb3V0X25ldDsKKyAgfQorCisgIGlmICghc2RjXy0+aXNDb25zdHJhaW5lZChpbl9waW4pCisgICAgICAmJiAhc2RjXy0+aXNDb25zdHJhaW5lZChvdXRfcGluKQorICAgICAgJiYgIXNkY18tPmlzQ29uc3RyYWluZWQocmVtb3ZlZCkKKyAgICAgICYmICFzZGNfLT5pc0NvbnN0cmFpbmVkKGJ1ZmZlcikpIHsKKyAgICBzdGFfLT5kaXNjb25uZWN0UGluKGluX3Bpbik7CisgICAgc3RhXy0+ZGlzY29ubmVjdFBpbihvdXRfcGluKTsKKyAgICBzdGFfLT5kZWxldGVJbnN0YW5jZShidWZmZXIpOworCisgICAgTmV0UGluSXRlcmF0b3IgKnBpbl9pdGVyID0gZGJfbmV0d29ya18tPnBpbkl0ZXJhdG9yKHJlbW92ZWQpOworICAgIHdoaWxlIChwaW5faXRlci0+aGFzTmV4dCgpKSB7CisgICAgICBQaW4gKnBpbiA9IHBpbl9pdGVyLT5uZXh0KCk7CisgICAgICBJbnN0YW5jZSAqcGluX2luc3QgPSBkYl9uZXR3b3JrXy0+aW5zdGFuY2UocGluKTsKKyAgICAgIGlmIChwaW5faW5zdCAhPSBidWZmZXIpIHsKKyAgICAgICAgUG9ydCAqcGluX3BvcnQgPSBkYl9uZXR3b3JrXy0+cG9ydChwaW4pOworICAgICAgICBzdGFfLT5kaXNjb25uZWN0UGluKHBpbik7CisgICAgICAgIHN0YV8tPmNvbm5lY3RQaW4ocGluX2luc3QsIHBpbl9wb3J0LCBzdXJ2aXZvcik7CisgICAgICB9CisgICAgfQorICAgIGRlbGV0ZSBwaW5faXRlcjsKKyAgICBzdGFfLT5kZWxldGVOZXQocmVtb3ZlZCk7CisgICAgcGFyYXNpdGljc19pbnZhbGlkXy5lcmFzZShyZW1vdmVkKTsKKyAgfQorfQorCit2b2lkCitSZXNpemVyOjplbnN1cmVMZXZlbERydnJWZXJ0aWNlcygpCit7CisgIGlmICghbGV2ZWxfZHJ2cl92ZXJ0aWNlc192YWxpZF8pIHsKKyAgICBsZXZlbF9kcnZyX3ZlcnRpY2VzXy5jbGVhcigpOworICAgIFZlcnRleEl0ZXJhdG9yIHZlcnRleF9pdGVyKGdyYXBoXyk7CisgICAgd2hpbGUgKHZlcnRleF9pdGVyLmhhc05leHQoKSkgeworICAgICAgVmVydGV4ICp2ZXJ0ZXggPSB2ZXJ0ZXhfaXRlci5uZXh0KCk7CisgICAgICBpZiAodmVydGV4LT5pc0RyaXZlcihuZXR3b3JrXykpCisgICAgICAgIGxldmVsX2RydnJfdmVydGljZXNfLnB1c2hfYmFjayh2ZXJ0ZXgpOworICAgIH0KKyAgICBzb3J0KGxldmVsX2RydnJfdmVydGljZXNfLCBWZXJ0ZXhMZXZlbExlc3MobmV0d29ya18pKTsKKyAgICBsZXZlbF9kcnZyX3ZlcnRpY2VzX3ZhbGlkXyA9IHRydWU7CisgIH0KK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCit2b2lkCitSZXNpemVyOjpyZXNpemVQcmVhbWJsZSgpCit7CisgIGluaXQoKTsKKyAgbWFrZUVxdWl2Q2VsbHMoKTsKKyAgZmluZEJ1ZmZlcnMoKTsKKyAgZmluZFRhcmdldExvYWRzKCk7Cit9CisKK3N0YXRpYyBmbG9hdAorYnVmZmVyRHJpdmUoY29uc3QgTGliZXJ0eUNlbGwgKmJ1ZmZlcikKK3sKKyAgTGliZXJ0eVBvcnQgKmlucHV0LCAqb3V0cHV0OworICBidWZmZXItPmJ1ZmZlclBvcnRzKGlucHV0LCBvdXRwdXQpOworICByZXR1cm4gb3V0cHV0LT5kcml2ZVJlc2lzdGFuY2UoKTsKK30KKwordm9pZAorUmVzaXplcjo6ZmluZEJ1ZmZlcnMoKQoreworICBMaWJlcnR5TGlicmFyeUl0ZXJhdG9yICpsaWJfaXRlciA9IG5ldHdvcmtfLT5saWJlcnR5TGlicmFyeUl0ZXJhdG9yKCk7CisgIHdoaWxlIChsaWJfaXRlci0+aGFzTmV4dCgpKSB7CisgICAgTGliZXJ0eUxpYnJhcnkgKmxpYiA9IGxpYl9pdGVyLT5uZXh0KCk7CisgICAgZm9yIChMaWJlcnR5Q2VsbCAqYnVmZmVyIDogKmxpYi0+YnVmZmVycygpKSB7CisgICAgICBpZiAoIWRvbnRVc2UoYnVmZmVyKQorICAgICAgICAgICYmIGlzTGlua0NlbGwoYnVmZmVyKSkgeworICAgICAgICBidWZmZXJfY2VsbHNfLnB1c2hfYmFjayhidWZmZXIpOworICAgICAgfQorICAgIH0KKyAgfQorICBkZWxldGUgbGliX2l0ZXI7CisKKyAgaWYgKGJ1ZmZlcl9jZWxsc18uZW1wdHkoKSkKKyAgICBsb2dnZXJfLT5lcnJvcihSU1osIDIyLCAibm8gYnVmZmVycyBmb3VuZC4iKTsKKworICBzb3J0KGJ1ZmZlcl9jZWxsc18sIFtdIChjb25zdCBMaWJlcnR5Q2VsbCAqYnVmZmVyMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTGliZXJ0eUNlbGwgKmJ1ZmZlcjIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBidWZmZXJEcml2ZShidWZmZXIxKSA+IGJ1ZmZlckRyaXZlKGJ1ZmZlcjIpOworICAgICAgICAgICAgICAgICAgICAgIH0pOworICBidWZmZXJfbG93ZXN0X2RyaXZlXyA9IGJ1ZmZlcl9jZWxsc19bMF07CisgIGJ1ZmZlcl9tZWRfZHJpdmVfID0gYnVmZmVyX2NlbGxzX1tidWZmZXJfY2VsbHNfLnNpemUoKSAvIDJdOworICBidWZmZXJfaGlnaGVzdF9kcml2ZV8gPSBidWZmZXJfY2VsbHNfW2J1ZmZlcl9jZWxsc18uc2l6ZSgpIC0gMV07Cit9CisKK2Jvb2wKK1Jlc2l6ZXI6OmlzTGlua0NlbGwoTGliZXJ0eUNlbGwgKmNlbGwpCit7CisgIHJldHVybiBuZXR3b3JrXy0+ZmluZExpYmVydHlDZWxsKGNlbGwtPm5hbWUoKSkgPT0gY2VsbDsKK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCit2b2lkCitSZXNpemVyOjpidWZmZXJJbnB1dHMoKQoreworICBpbml0KCk7CisgIGluc2VydGVkX2J1ZmZlcl9jb3VudF8gPSAwOworICBpbmNyZW1lbnRhbFBhcmFzaXRpY3NCZWdpbigpOworICBJbnN0YW5jZVBpbkl0ZXJhdG9yICpwb3J0X2l0ZXIgPSBuZXR3b3JrXy0+cGluSXRlcmF0b3IobmV0d29ya18tPnRvcEluc3RhbmNlKCkpOworICB3aGlsZSAocG9ydF9pdGVyLT5oYXNOZXh0KCkpIHsKKyAgICBQaW4gKnBpbiA9IHBvcnRfaXRlci0+bmV4dCgpOworICAgIFZlcnRleCAqdmVydGV4ID0gZ3JhcGhfLT5waW5EcnZyVmVydGV4KHBpbik7CisgICAgTmV0ICpuZXQgPSBuZXR3b3JrXy0+bmV0KG5ldHdvcmtfLT50ZXJtKHBpbikpOworICAgIGlmIChuZXR3b3JrXy0+ZGlyZWN0aW9uKHBpbiktPmlzSW5wdXQoKQorICAgICAgICAmJiAhdmVydGV4LT5pc0NvbnN0YW50KCkKKyAgICAgICAgJiYgIXN0YV8tPmlzQ2xvY2socGluKQorICAgICAgICAvLyBIYW5kcyBvZmYgc3BlY2lhbCBuZXRzLgorICAgICAgICAmJiAhZGJfbmV0d29ya18tPmlzU3BlY2lhbChuZXQpCisgICAgICAgICYmIGhhc1BpbnMobmV0KSkKKyAgICAgIC8vIHJlcGFpcl9kZXNpZ24gd2lsbCByZXNpemUgdG8gdGFyZ2V0IHNsZXcuCisgICAgICBidWZmZXJJbnB1dChwaW4sIGJ1ZmZlcl9sb3dlc3RfZHJpdmVfKTsKKyAgfQorICBkZWxldGUgcG9ydF9pdGVyOworICB1cGRhdGVQYXJhc2l0aWNzKCk7CisgIGluY3JlbWVudGFsUGFyYXNpdGljc0VuZCgpOworCisgIGlmIChpbnNlcnRlZF9idWZmZXJfY291bnRfID4gMCkgeworICAgIGxvZ2dlcl8tPmluZm8oUlNaLCAyNywgIkluc2VydGVkIHt9IGlucHV0IGJ1ZmZlcnMuIiwgaW5zZXJ0ZWRfYnVmZmVyX2NvdW50Xyk7CisgICAgbGV2ZWxfZHJ2cl92ZXJ0aWNlc192YWxpZF8gPSBmYWxzZTsKKyAgfQorfQorICAgCitib29sCitSZXNpemVyOjpoYXNQaW5zKE5ldCAqbmV0KQoreworICBOZXRQaW5JdGVyYXRvciAqcGluX2l0ZXIgPSBkYl9uZXR3b3JrXy0+cGluSXRlcmF0b3IobmV0KTsKKyAgYm9vbCBoYXNfcGlucyA9IHBpbl9pdGVyLT5oYXNOZXh0KCk7CisgIGRlbGV0ZSBwaW5faXRlcjsKKyAgcmV0dXJuIGhhc19waW5zOworfQorCitJbnN0YW5jZSAqCitSZXNpemVyOjpidWZmZXJJbnB1dChjb25zdCBQaW4gKnRvcF9waW4sCisgICAgICAgICAgICAgICAgICAgICBMaWJlcnR5Q2VsbCAqYnVmZmVyX2NlbGwpCit7CisgIFRlcm0gKnRlcm0gPSBkYl9uZXR3b3JrXy0+dGVybSh0b3BfcGluKTsKKyAgTmV0ICppbnB1dF9uZXQgPSBkYl9uZXR3b3JrXy0+bmV0KHRlcm0pOworICBMaWJlcnR5UG9ydCAqaW5wdXQsICpvdXRwdXQ7CisgIGJ1ZmZlcl9jZWxsLT5idWZmZXJQb3J0cyhpbnB1dCwgb3V0cHV0KTsKKyAgc3RyaW5nIGJ1ZmZlcl9uYW1lID0gbWFrZVVuaXF1ZUluc3ROYW1lKCJpbnB1dCIpOworICBJbnN0YW5jZSAqcGFyZW50ID0gZGJfbmV0d29ya18tPnRvcEluc3RhbmNlKCk7CisgIE5ldCAqYnVmZmVyX291dCA9IG1ha2VVbmlxdWVOZXQoKTsKKyAgSW5zdGFuY2UgKmJ1ZmZlciA9IG1ha2VJbnN0YW5jZShidWZmZXJfY2VsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJfbmFtZS5jX3N0cigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudCk7CisgIGlmIChidWZmZXIpIHsKKyAgICBqb3VybmFsTWFrZUJ1ZmZlcihidWZmZXIpOworICAgIFBvaW50IHBpbl9sb2MgPSBkYl9uZXR3b3JrXy0+bG9jYXRpb24odG9wX3Bpbik7CisgICAgUG9pbnQgYnVmX2xvYyA9IGNvcmVfZXhpc3RzXyA/IGNvcmVfLmNsb3Nlc3RQdEluc2lkZShwaW5fbG9jKSA6IHBpbl9sb2M7CisgICAgc2V0TG9jYXRpb24oYnVmZmVyLCBidWZfbG9jKTsKKyAgICBkZXNpZ25BcmVhSW5jcihhcmVhKGRiX25ldHdvcmtfLT5jZWxsKGJ1ZmZlcl9jZWxsKSkpOworICAgIGluc2VydGVkX2J1ZmZlcl9jb3VudF8rKzsKKworICAgIE5ldFBpbkl0ZXJhdG9yICpwaW5faXRlciA9IGRiX25ldHdvcmtfLT5waW5JdGVyYXRvcihpbnB1dF9uZXQpOworICAgIHdoaWxlIChwaW5faXRlci0+aGFzTmV4dCgpKSB7CisgICAgICBQaW4gKnBpbiA9IHBpbl9pdGVyLT5uZXh0KCk7CisgICAgICAvLyBMZWF2ZSBpbnB1dCBwb3J0IHBpbiBjb25uZWN0ZWQgdG8gaW5wdXRfbmV0LgorICAgICAgaWYgKHBpbiAhPSB0b3BfcGluKSB7CisgICAgICAgIHN0YV8tPmRpc2Nvbm5lY3RQaW4ocGluKTsKKyAgICAgICAgUG9ydCAqcGluX3BvcnQgPSBkYl9uZXR3b3JrXy0+cG9ydChwaW4pOworICAgICAgICBzdGFfLT5jb25uZWN0UGluKGRiX25ldHdvcmtfLT5pbnN0YW5jZShwaW4pLCBwaW5fcG9ydCwgYnVmZmVyX291dCk7CisgICAgICB9CisgICAgfQorICAgIGRlbGV0ZSBwaW5faXRlcjsKKyAgICBzdGFfLT5jb25uZWN0UGluKGJ1ZmZlciwgaW5wdXQsIGlucHV0X25ldCk7CisgICAgc3RhXy0+Y29ubmVjdFBpbihidWZmZXIsIG91dHB1dCwgYnVmZmVyX291dCk7CisKKyAgICBwYXJhc2l0aWNzSW52YWxpZChpbnB1dF9uZXQpOworICAgIHBhcmFzaXRpY3NJbnZhbGlkKGJ1ZmZlcl9vdXQpOworICB9CisgIHJldHVybiBidWZmZXI7Cit9CisKK3ZvaWQKK1Jlc2l6ZXI6OnNldExvY2F0aW9uKEluc3RhbmNlICppbnN0LAorICAgICAgICAgICAgICAgICAgICAgUG9pbnQgcHQpCit7CisgIC8vIFN0YXkgaW5zaWRlIHRoZSBsaW5lcy4KKyAgaWYgKGNvcmVfZXhpc3RzXykKKyAgICBwdCA9IGNvcmVfLmNsb3Nlc3RQdEluc2lkZShwdCk7CisKKyAgZGJJbnN0ICpkaW5zdCA9IGRiX25ldHdvcmtfLT5zdGFUb0RiKGluc3QpOworICBkaW5zdC0+c2V0UGxhY2VtZW50U3RhdHVzKGRiUGxhY2VtZW50U3RhdHVzOjpQTEFDRUQpOworICBkaW5zdC0+c2V0TG9jYXRpb24ocHQuZ2V0WCgpLCBwdC5nZXRZKCkpOworfQorCit2b2lkCitSZXNpemVyOjpidWZmZXJPdXRwdXRzKCkKK3sKKyAgaW5pdCgpOworICBpbnNlcnRlZF9idWZmZXJfY291bnRfID0gMDsKKyAgaW5jcmVtZW50YWxQYXJhc2l0aWNzQmVnaW4oKTsKKyAgSW5zdGFuY2VQaW5JdGVyYXRvciAqcG9ydF9pdGVyID0gbmV0d29ya18tPnBpbkl0ZXJhdG9yKG5ldHdvcmtfLT50b3BJbnN0YW5jZSgpKTsKKyAgd2hpbGUgKHBvcnRfaXRlci0+aGFzTmV4dCgpKSB7CisgICAgUGluICpwaW4gPSBwb3J0X2l0ZXItPm5leHQoKTsKKyAgICBWZXJ0ZXggKnZlcnRleCA9IGdyYXBoXy0+cGluTG9hZFZlcnRleChwaW4pOworICAgIE5ldCAqbmV0ID0gbmV0d29ya18tPm5ldChuZXR3b3JrXy0+dGVybShwaW4pKTsKKyAgICBpZiAobmV0d29ya18tPmRpcmVjdGlvbihwaW4pLT5pc091dHB1dCgpCisgICAgICAgICYmIG5ldAorICAgICAgICAvLyBERUYgZG9lcyBub3QgaGF2ZSB0cmlzdGF0ZSBvdXRwdXQgdHlwZXMgc28gd2UgaGF2ZSBsb29rIGF0IHRoZSBkcml2ZXJzLgorICAgICAgICAmJiAhaGFzVHJpc3RhdGVEcml2ZXIobmV0KQorICAgICAgICAmJiAhdmVydGV4LT5pc0NvbnN0YW50KCkKKyAgICAgICAgLy8gSGFuZHMgb2ZmIHNwZWNpYWwgbmV0cy4KKyAgICAgICAgJiYgIWRiX25ldHdvcmtfLT5pc1NwZWNpYWwobmV0KQorICAgICAgICAmJiBoYXNQaW5zKG5ldCkpCisgICAgICBidWZmZXJPdXRwdXQocGluLCBidWZmZXJfbG93ZXN0X2RyaXZlXyk7CisgIH0KKyAgZGVsZXRlIHBvcnRfaXRlcjsKKyAgdXBkYXRlUGFyYXNpdGljcygpOworICBpbmNyZW1lbnRhbFBhcmFzaXRpY3NFbmQoKTsKKworICBpZiAoaW5zZXJ0ZWRfYnVmZmVyX2NvdW50XyA+IDApIHsKKyAgICBsb2dnZXJfLT5pbmZvKFJTWiwgMjgsICJJbnNlcnRlZCB7fSBvdXRwdXQgYnVmZmVycy4iLCBpbnNlcnRlZF9idWZmZXJfY291bnRfKTsKKyAgICBsZXZlbF9kcnZyX3ZlcnRpY2VzX3ZhbGlkXyA9IGZhbHNlOworICB9Cit9CisKK2Jvb2wKK1Jlc2l6ZXI6Omhhc1RyaXN0YXRlRHJpdmVyKGNvbnN0IE5ldCAqbmV0KQoreworICBQaW5TZXQgKmRyaXZlcnMgPSBuZXR3b3JrXy0+ZHJpdmVycyhuZXQpOworICBpZiAoZHJpdmVycykgeworICAgIGZvciAoUGluICpwaW4gOiAqZHJpdmVycykgeworICAgICAgaWYgKGlzVHJpc3RhdGVEcml2ZXIocGluKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICB9CisgIHJldHVybiBmYWxzZTsKK30KKworYm9vbAorUmVzaXplcjo6aXNUcmlzdGF0ZURyaXZlcihjb25zdCBQaW4gKnBpbikKK3sKKyAgLy8gTm90ZSBMRUYgbWFjcm8gUElOcyBkbyBub3QgaGF2ZSBhIGNsdWUgYWJvdXQgdHJpc3RhdGVzLgorICBMaWJlcnR5UG9ydCAqcG9ydCA9IG5ldHdvcmtfLT5saWJlcnR5UG9ydChwaW4pOworICByZXR1cm4gcG9ydCAmJiBwb3J0LT5kaXJlY3Rpb24oKS0+aXNBbnlUcmlzdGF0ZSgpOworfQorCit2b2lkCitSZXNpemVyOjpidWZmZXJPdXRwdXQoUGluICp0b3BfcGluLAorICAgICAgICAgICAgICAgICAgICAgIExpYmVydHlDZWxsICpidWZmZXJfY2VsbCkKK3sKKyAgTmV0d29ya0VkaXQgKm5ldHdvcmsgPSBuZXR3b3JrRWRpdCgpOworICBUZXJtICp0ZXJtID0gbmV0d29ya18tPnRlcm0odG9wX3Bpbik7CisgIE5ldCAqb3V0cHV0X25ldCA9IG5ldHdvcmtfLT5uZXQodGVybSk7CisgIExpYmVydHlQb3J0ICppbnB1dCwgKm91dHB1dDsKKyAgYnVmZmVyX2NlbGwtPmJ1ZmZlclBvcnRzKGlucHV0LCBvdXRwdXQpOworICBzdHJpbmcgYnVmZmVyX25hbWUgPSBtYWtlVW5pcXVlSW5zdE5hbWUoIm91dHB1dCIpOworICBJbnN0YW5jZSAqcGFyZW50ID0gbmV0d29yay0+dG9wSW5zdGFuY2UoKTsKKyAgTmV0ICpidWZmZXJfaW4gPSBtYWtlVW5pcXVlTmV0KCk7CisgIEluc3RhbmNlICpidWZmZXIgPSBtYWtlSW5zdGFuY2UoYnVmZmVyX2NlbGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyX25hbWUuY19zdHIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQpOworICBpZiAoYnVmZmVyKSB7CisgICAgam91cm5hbE1ha2VCdWZmZXIoYnVmZmVyKTsKKyAgICBzZXRMb2NhdGlvbihidWZmZXIsIGRiX25ldHdvcmtfLT5sb2NhdGlvbih0b3BfcGluKSk7CisgICAgZGVzaWduQXJlYUluY3IoYXJlYShkYl9uZXR3b3JrXy0+Y2VsbChidWZmZXJfY2VsbCkpKTsKKyAgICBpbnNlcnRlZF9idWZmZXJfY291bnRfKys7CisKKyAgICBOZXRQaW5JdGVyYXRvciAqcGluX2l0ZXIgPSBuZXR3b3JrLT5waW5JdGVyYXRvcihvdXRwdXRfbmV0KTsKKyAgICB3aGlsZSAocGluX2l0ZXItPmhhc05leHQoKSkgeworICAgICAgUGluICpwaW4gPSBwaW5faXRlci0+bmV4dCgpOworICAgICAgaWYgKHBpbiAhPSB0b3BfcGluKSB7CisgICAgICAgIC8vIExlYXZlIG91dHB1dCBwb3J0IHBpbiBjb25uZWN0ZWQgdG8gb3V0cHV0X25ldC4KKyAgICAgICAgc3RhXy0+ZGlzY29ubmVjdFBpbihwaW4pOworICAgICAgICBQb3J0ICpwaW5fcG9ydCA9IG5ldHdvcmstPnBvcnQocGluKTsKKyAgICAgICAgc3RhXy0+Y29ubmVjdFBpbihuZXR3b3JrLT5pbnN0YW5jZShwaW4pLCBwaW5fcG9ydCwgYnVmZmVyX2luKTsKKyAgICAgIH0KKyAgICB9CisgICAgZGVsZXRlIHBpbl9pdGVyOworICAgIHN0YV8tPmNvbm5lY3RQaW4oYnVmZmVyLCBpbnB1dCwgYnVmZmVyX2luKTsKKyAgICBzdGFfLT5jb25uZWN0UGluKGJ1ZmZlciwgb3V0cHV0LCBvdXRwdXRfbmV0KTsKKworICAgIHBhcmFzaXRpY3NJbnZhbGlkKGJ1ZmZlcl9pbik7CisgICAgcGFyYXNpdGljc0ludmFsaWQob3V0cHV0X25ldCk7CisgIH0KK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisvLyBSZXBhaXIgbG9uZyB3aXJlcywgbWF4IHNsZXcsIG1heCBjYXBhY2l0YW5jZSwgbWF4IGZhbm91dCB2aW9sYXRpb25zCisvLyBUaGUgd2hvbGUgZW5jaGlsYWRhLgorLy8gbWF4X3dpcmVfbGVuZ3RoIHplcm8gZm9yIG5vbmUgKG1ldGVycykKK3ZvaWQKK1Jlc2l6ZXI6OnJlcGFpckRlc2lnbihkb3VibGUgbWF4X3dpcmVfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBzbGV3X21hcmdpbiwKKyAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgbWF4X2NhcF9tYXJnaW4pCit7CisgIGludCByZXBhaXJfY291bnQsIHNsZXdfdmlvbGF0aW9ucywgY2FwX3Zpb2xhdGlvbnM7CisgIGludCBmYW5vdXRfdmlvbGF0aW9ucywgbGVuZ3RoX3Zpb2xhdGlvbnM7CisgIHJlcGFpckRlc2lnbihtYXhfd2lyZV9sZW5ndGgsIHNsZXdfbWFyZ2luLCBtYXhfY2FwX21hcmdpbiwKKyAgICAgICAgICAgICAgIHJlcGFpcl9jb3VudCwgc2xld192aW9sYXRpb25zLCBjYXBfdmlvbGF0aW9ucywKKyAgICAgICAgICAgICAgIGZhbm91dF92aW9sYXRpb25zLCBsZW5ndGhfdmlvbGF0aW9ucyk7CisKKyAgaWYgKHNsZXdfdmlvbGF0aW9ucyA+IDApCisgICAgbG9nZ2VyXy0+aW5mbyhSU1osIDM0LCAiRm91bmQge30gc2xldyB2aW9sYXRpb25zLiIsIHNsZXdfdmlvbGF0aW9ucyk7CisgIGlmIChmYW5vdXRfdmlvbGF0aW9ucyA+IDApCisgICAgbG9nZ2VyXy0+aW5mbyhSU1osIDM1LCAiRm91bmQge30gZmFub3V0IHZpb2xhdGlvbnMuIiwgZmFub3V0X3Zpb2xhdGlvbnMpOworICBpZiAoY2FwX3Zpb2xhdGlvbnMgPiAwKQorICAgIGxvZ2dlcl8tPmluZm8oUlNaLCAzNiwgIkZvdW5kIHt9IGNhcGFjaXRhbmNlIHZpb2xhdGlvbnMuIiwgY2FwX3Zpb2xhdGlvbnMpOworICBpZiAobGVuZ3RoX3Zpb2xhdGlvbnMgPiAwKQorICAgIGxvZ2dlcl8tPmluZm8oUlNaLCAzNywgIkZvdW5kIHt9IGxvbmcgd2lyZXMuIiwgbGVuZ3RoX3Zpb2xhdGlvbnMpOworICBpZiAoaW5zZXJ0ZWRfYnVmZmVyX2NvdW50XyA+IDApCisgICAgbG9nZ2VyXy0+aW5mbyhSU1osIDM4LCAiSW5zZXJ0ZWQge30gYnVmZmVycyBpbiB7fSBuZXRzLiIsCisgICAgICAgICAgICAgICAgICBpbnNlcnRlZF9idWZmZXJfY291bnRfLAorICAgICAgICAgICAgICAgICAgcmVwYWlyX2NvdW50KTsKKyAgaWYgKHJlc2l6ZV9jb3VudF8gPiAwKQorICAgIGxvZ2dlcl8tPmluZm8oUlNaLCAzOSwgIlJlc2l6ZWQge30gaW5zdGFuY2VzLiIsIHJlc2l6ZV9jb3VudF8pOworfQorCit2b2lkCitSZXNpemVyOjpyZXBhaXJEZXNpZ24oZG91YmxlIG1heF93aXJlX2xlbmd0aCwgLy8gemVybyBmb3Igbm9uZSAobWV0ZXJzKQorICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBzbGV3X21hcmdpbiwKKyAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgbWF4X2NhcF9tYXJnaW4sCisgICAgICAgICAgICAgICAgICAgICAgaW50ICZyZXBhaXJfY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgaW50ICZzbGV3X3Zpb2xhdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgaW50ICZjYXBfdmlvbGF0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgJmZhbm91dF92aW9sYXRpb25zLAorICAgICAgICAgICAgICAgICAgICAgIGludCAmbGVuZ3RoX3Zpb2xhdGlvbnMpCit7CisgIHJlcGFpcl9jb3VudCA9IDA7CisgIHNsZXdfdmlvbGF0aW9ucyA9IDA7CisgIGNhcF92aW9sYXRpb25zID0gMDsKKyAgZmFub3V0X3Zpb2xhdGlvbnMgPSAwOworICBsZW5ndGhfdmlvbGF0aW9ucyA9IDA7CisgIGluc2VydGVkX2J1ZmZlcl9jb3VudF8gPSAwOworICByZXNpemVfY291bnRfID0gMDsKKworICBzdGFfLT5jaGVja1NsZXdMaW1pdFByZWFtYmxlKCk7CisgIHN0YV8tPmNoZWNrQ2FwYWNpdGFuY2VMaW1pdFByZWFtYmxlKCk7CisgIHN0YV8tPmNoZWNrRmFub3V0TGltaXRQcmVhbWJsZSgpOworCisgIGluY3JlbWVudGFsUGFyYXNpdGljc0JlZ2luKCk7CisgIGludCBtYXhfbGVuZ3RoID0gbWV0ZXJzVG9EYnUobWF4X3dpcmVfbGVuZ3RoKTsKKyAgZm9yIChpbnQgaSA9IGxldmVsX2RydnJfdmVydGljZXNfLnNpemUoKSAtIDE7IGkgPj0gMDsgaS0tKSB7CisgICAgVmVydGV4ICpkcnZyID0gbGV2ZWxfZHJ2cl92ZXJ0aWNlc19baV07CisgICAgUGluICpkcnZyX3BpbiA9IGRydnItPnBpbigpOworICAgIE5ldCAqbmV0ID0gbmV0d29ya18tPmlzVG9wTGV2ZWxQb3J0KGRydnJfcGluKQorICAgICAgPyBuZXR3b3JrXy0+bmV0KG5ldHdvcmtfLT50ZXJtKGRydnJfcGluKSkKKyAgICAgIDogbmV0d29ya18tPm5ldChkcnZyX3Bpbik7CisgICAgaWYgKG5ldAorICAgICAgICAmJiAhc3RhXy0+aXNDbG9jayhkcnZyX3BpbikKKyAgICAgICAgLy8gRXhjbHVkZSB0aWUgaGkvbG93IGNlbGxzIGFuZCBzdXBwbHkgbmV0cy4KKyAgICAgICAgJiYgIWRydnItPmlzQ29uc3RhbnQoKSkKKyAgICAgIHJlcGFpck5ldChuZXQsIGRydnJfcGluLCBkcnZyLCBzbGV3X21hcmdpbiwgbWF4X2NhcF9tYXJnaW4sCisgICAgICAgICAgICAgICAgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgbWF4X2xlbmd0aCwgdHJ1ZSwKKyAgICAgICAgICAgICAgICByZXBhaXJfY291bnQsIHNsZXdfdmlvbGF0aW9ucywgY2FwX3Zpb2xhdGlvbnMsCisgICAgICAgICAgICAgICAgZmFub3V0X3Zpb2xhdGlvbnMsIGxlbmd0aF92aW9sYXRpb25zKTsKKyAgfQorICB1cGRhdGVQYXJhc2l0aWNzKCk7CisgIGluY3JlbWVudGFsUGFyYXNpdGljc0VuZCgpOworCisgIGlmIChpbnNlcnRlZF9idWZmZXJfY291bnRfID4gMCkKKyAgICBsZXZlbF9kcnZyX3ZlcnRpY2VzX3ZhbGlkXyA9IGZhbHNlOworfQorCisvLyByZXBhaXJEZXNpZ24gYnV0IHJlc3RyaWN0ZWQgdG8gY2xvY2sgbmV0d29yayBhbmQKKy8vIG5vIG1heF9mYW5vdXQvbWF4X2NhcCBjaGVja3MuCit2b2lkCitSZXNpemVyOjpyZXBhaXJDbGtOZXRzKGRvdWJsZSBtYXhfd2lyZV9sZW5ndGgpIC8vIG1heF93aXJlX2xlbmd0aCB6ZXJvIGZvciBub25lIChtZXRlcnMpCit7CisgIGluaXQoKTsKKyAgLy8gTmVlZCBzbGV3cyB0byByZXNpemUgaW5zZXJ0ZWQgYnVmZmVycy4KKyAgc3RhXy0+ZmluZERlbGF5cygpOworCisgIGluc2VydGVkX2J1ZmZlcl9jb3VudF8gPSAwOworICByZXNpemVfY291bnRfID0gMDsKKworICBpbnQgcmVwYWlyX2NvdW50ID0gMDsKKyAgaW50IHNsZXdfdmlvbGF0aW9ucyA9IDA7CisgIGludCBjYXBfdmlvbGF0aW9ucyA9IDA7CisgIGludCBmYW5vdXRfdmlvbGF0aW9ucyA9IDA7CisgIGludCBsZW5ndGhfdmlvbGF0aW9ucyA9IDA7CisgIGludCBtYXhfbGVuZ3RoID0gbWV0ZXJzVG9EYnUobWF4X3dpcmVfbGVuZ3RoKTsKKyAgaW5jcmVtZW50YWxQYXJhc2l0aWNzQmVnaW4oKTsKKyAgZm9yIChDbG9jayAqY2xrIDogc2RjXy0+Y2xrcygpKSB7CisgICAgZm9yIChjb25zdCBQaW4gKmNsa19waW4gOiAqc3RhXy0+cGlucyhjbGspKSB7CisgICAgICBOZXQgKm5ldCA9IG5ldHdvcmtfLT5pc1RvcExldmVsUG9ydChjbGtfcGluKQorICAgICAgICA/IG5ldHdvcmtfLT5uZXQobmV0d29ya18tPnRlcm0oY2xrX3BpbikpCisgICAgICAgIDogbmV0d29ya18tPm5ldChjbGtfcGluKTsKKyAgICAgIGlmIChuZXR3b3JrXy0+aXNEcml2ZXIoY2xrX3BpbikpIHsKKyAgICAgICAgVmVydGV4ICpkcnZyID0gZ3JhcGhfLT5waW5EcnZyVmVydGV4KGNsa19waW4pOworICAgICAgICAvLyBEbyBub3QgcmVzaXplIGNsb2NrIHRyZWUgZ2F0ZXMuCisgICAgICAgIHJlcGFpck5ldChuZXQsIGNsa19waW4sIGRydnIsIDAuMCwgMC4wLAorICAgICAgICAgICAgICAgICAgZmFsc2UsIGZhbHNlLCBmYWxzZSwgbWF4X2xlbmd0aCwgZmFsc2UsCisgICAgICAgICAgICAgICAgICByZXBhaXJfY291bnQsIHNsZXdfdmlvbGF0aW9ucywgY2FwX3Zpb2xhdGlvbnMsCisgICAgICAgICAgICAgICAgICBmYW5vdXRfdmlvbGF0aW9ucywgbGVuZ3RoX3Zpb2xhdGlvbnMpOworICAgICAgfQorICAgIH0KKyAgfQorICB1cGRhdGVQYXJhc2l0aWNzKCk7CisgIGluY3JlbWVudGFsUGFyYXNpdGljc0VuZCgpOworCisgIGlmIChsZW5ndGhfdmlvbGF0aW9ucyA+IDApCisgICAgbG9nZ2VyXy0+aW5mbyhSU1osIDQ3LCAiRm91bmQge30gbG9uZyB3aXJlcy4iLCBsZW5ndGhfdmlvbGF0aW9ucyk7CisgIGlmIChpbnNlcnRlZF9idWZmZXJfY291bnRfID4gMCkgeworICAgIGxvZ2dlcl8tPmluZm8oUlNaLCA0OCwgIkluc2VydGVkIHt9IGJ1ZmZlcnMgaW4ge30gbmV0cy4iLAorICAgICAgICAgICAgICAgICAgaW5zZXJ0ZWRfYnVmZmVyX2NvdW50XywKKyAgICAgICAgICAgICAgICAgIHJlcGFpcl9jb3VudCk7CisgICAgbGV2ZWxfZHJ2cl92ZXJ0aWNlc192YWxpZF8gPSBmYWxzZTsKKyAgfQorfQorCisvLyBSZXBhaXIgb25lIG5ldCAoZm9yIGRlYnVnZ2luZykKK3ZvaWQKK1Jlc2l6ZXI6OnJlcGFpck5ldChOZXQgKm5ldCwKKyAgICAgICAgICAgICAgICAgICBkb3VibGUgbWF4X3dpcmVfbGVuZ3RoLCAvLyBtZXRlcnMKKyAgICAgICAgICAgICAgICAgICBkb3VibGUgc2xld19tYXJnaW4sCisgICAgICAgICAgICAgICAgICAgZG91YmxlIG1heF9jYXBfbWFyZ2luKQoreworICBpbml0KCk7CisKKyAgc3RhXy0+Y2hlY2tTbGV3TGltaXRQcmVhbWJsZSgpOworICBzdGFfLT5jaGVja0NhcGFjaXRhbmNlTGltaXRQcmVhbWJsZSgpOworICBzdGFfLT5jaGVja0Zhbm91dExpbWl0UHJlYW1ibGUoKTsKKworICBpbnNlcnRlZF9idWZmZXJfY291bnRfID0gMDsKKyAgcmVzaXplX2NvdW50XyA9IDA7CisgIHJlc2l6ZWRfbXVsdGlfb3V0cHV0X2luc3RzXy5jbGVhcigpOworICBpbnQgcmVwYWlyX2NvdW50ID0gMDsKKyAgaW50IHNsZXdfdmlvbGF0aW9ucyA9IDA7CisgIGludCBjYXBfdmlvbGF0aW9ucyA9IDA7CisgIGludCBmYW5vdXRfdmlvbGF0aW9ucyA9IDA7CisgIGludCBsZW5ndGhfdmlvbGF0aW9ucyA9IDA7CisgIGludCBtYXhfbGVuZ3RoID0gbWV0ZXJzVG9EYnUobWF4X3dpcmVfbGVuZ3RoKTsKKyAgUGluU2V0ICpkcml2ZXJzID0gbmV0d29ya18tPmRyaXZlcnMobmV0KTsKKyAgaWYgKGRyaXZlcnMgJiYgIWRyaXZlcnMtPmVtcHR5KCkpIHsKKyAgICBQaW5TZXQ6Okl0ZXJhdG9yIGRydnJfaXRlcihkcml2ZXJzKTsKKyAgICBQaW4gKmRydnJfcGluID0gZHJ2cl9pdGVyLm5leHQoKTsKKyAgICBWZXJ0ZXggKmRydnIgPSBncmFwaF8tPnBpbkRydnJWZXJ0ZXgoZHJ2cl9waW4pOworICAgIHJlcGFpck5ldChuZXQsIGRydnJfcGluLCBkcnZyLCBzbGV3X21hcmdpbiwgbWF4X2NhcF9tYXJnaW4sCisgICAgICAgICAgICAgIHRydWUsIHRydWUsIHRydWUsIG1heF9sZW5ndGgsIHRydWUsCisgICAgICAgICAgICAgIHJlcGFpcl9jb3VudCwgc2xld192aW9sYXRpb25zLCBjYXBfdmlvbGF0aW9ucywKKyAgICAgICAgICAgICAgZmFub3V0X3Zpb2xhdGlvbnMsIGxlbmd0aF92aW9sYXRpb25zKTsKKyAgfQorCisgIGlmIChzbGV3X3Zpb2xhdGlvbnMgPiAwKQorICAgIGxvZ2dlcl8tPmluZm8oUlNaLCA1MSwgIkZvdW5kIHt9IHNsZXcgdmlvbGF0aW9ucy4iLCBzbGV3X3Zpb2xhdGlvbnMpOworICBpZiAoZmFub3V0X3Zpb2xhdGlvbnMgPiAwKQorICAgIGxvZ2dlcl8tPmluZm8oUlNaLCA1MiwgIkZvdW5kIHt9IGZhbm91dCB2aW9sYXRpb25zLiIsIGZhbm91dF92aW9sYXRpb25zKTsKKyAgaWYgKGNhcF92aW9sYXRpb25zID4gMCkKKyAgICBsb2dnZXJfLT5pbmZvKFJTWiwgNTMsICJGb3VuZCB7fSBjYXBhY2l0YW5jZSB2aW9sYXRpb25zLiIsIGNhcF92aW9sYXRpb25zKTsKKyAgaWYgKGxlbmd0aF92aW9sYXRpb25zID4gMCkKKyAgICBsb2dnZXJfLT5pbmZvKFJTWiwgNTQsICJGb3VuZCB7fSBsb25nIHdpcmVzLiIsIGxlbmd0aF92aW9sYXRpb25zKTsKKyAgaWYgKGluc2VydGVkX2J1ZmZlcl9jb3VudF8gPiAwKSB7CisgICAgbG9nZ2VyXy0+aW5mbyhSU1osIDU1LCAiSW5zZXJ0ZWQge30gYnVmZmVycyBpbiB7fSBuZXRzLiIsCisgICAgICAgICAgICAgICAgICBpbnNlcnRlZF9idWZmZXJfY291bnRfLAorICAgICAgICAgICAgICAgICAgcmVwYWlyX2NvdW50KTsKKyAgICBsZXZlbF9kcnZyX3ZlcnRpY2VzX3ZhbGlkXyA9IGZhbHNlOworICB9CisgIGlmIChyZXNpemVfY291bnRfID4gMCkKKyAgICBsb2dnZXJfLT5pbmZvKFJTWiwgNTYsICJSZXNpemVkIHt9IGluc3RhbmNlcy4iLCByZXNpemVfY291bnRfKTsKKyAgaWYgKHJlc2l6ZV9jb3VudF8gPiAwKQorICAgIGxvZ2dlcl8tPmluZm8oUlNaLCA1NywgIlJlc2l6ZWQge30gaW5zdGFuY2VzLiIsIHJlc2l6ZV9jb3VudF8pOworfQorCit2b2lkCitSZXNpemVyOjpyZXBhaXJOZXQoTmV0ICpuZXQsCisgICAgICAgICAgICAgICAgICAgY29uc3QgUGluICpkcnZyX3BpbiwKKyAgICAgICAgICAgICAgICAgICBWZXJ0ZXggKmRydnIsCisgICAgICAgICAgICAgICAgICAgZG91YmxlIHNsZXdfbWFyZ2luLAorICAgICAgICAgICAgICAgICAgIGRvdWJsZSBtYXhfY2FwX21hcmdpbiwKKyAgICAgICAgICAgICAgICAgICBib29sIGNoZWNrX3NsZXcsCisgICAgICAgICAgICAgICAgICAgYm9vbCBjaGVja19jYXAsCisgICAgICAgICAgICAgICAgICAgYm9vbCBjaGVja19mYW5vdXQsCisgICAgICAgICAgICAgICAgICAgaW50IG1heF9sZW5ndGgsIC8vIGRidQorICAgICAgICAgICAgICAgICAgIGJvb2wgcmVzaXplX2RydnIsCisgICAgICAgICAgICAgICAgICAgaW50ICZyZXBhaXJfY291bnQsCisgICAgICAgICAgICAgICAgICAgaW50ICZzbGV3X3Zpb2xhdGlvbnMsCisgICAgICAgICAgICAgICAgICAgaW50ICZjYXBfdmlvbGF0aW9ucywKKyAgICAgICAgICAgICAgICAgICBpbnQgJmZhbm91dF92aW9sYXRpb25zLAorICAgICAgICAgICAgICAgICAgIGludCAmbGVuZ3RoX3Zpb2xhdGlvbnMpCit7CisgIC8vIEhhbmRzIG9mZiBzcGVjaWFsIG5ldHMuCisgIGlmICghZGJfbmV0d29ya18tPmlzU3BlY2lhbChuZXQpKSB7CisgICAgU3RlaW5lclRyZWUgKnRyZWUgPSBtYWtlU3RlaW5lclRyZWUoZHJ2cl9waW4sIHRydWUsIG1heF9zdGVpbmVyX3Bpbl9jb3VudF8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R0X2J1aWxkZXJfLCBkYl9uZXR3b3JrXywgbG9nZ2VyXyk7CisgICAgaWYgKHRyZWUpIHsKKyAgICAgIGRlYnVnUHJpbnQobG9nZ2VyXywgUlNaLCAicmVwYWlyX25ldCIsIDEsICJyZXBhaXIgbmV0IHt9IiwKKyAgICAgICAgICAgICAgICAgc2RjX25ldHdvcmtfLT5wYXRoTmFtZShkcnZyX3BpbikpOworICAgICAgLy8gUmVzaXplIHRoZSBkcml2ZXIgdG8gbm9ybWFsaXplIHNsZXdzIGJlZm9yZSByZXBhaXJpbmcgbGltaXQgdmlvbGF0aW9ucy4KKyAgICAgIGlmIChyZXNpemVfZHJ2cikKKyAgICAgICAgcmVzaXplVG9UYXJnZXRTbGV3KGRydnJfcGluLCB0cnVlKTsKKyAgICAgIC8vIEZvciB0cmlzdGF0ZSBuZXRzIGFsbCB3ZSBjYW4gZG8gaXMgcmVzaXplIHRoZSBkcml2ZXIuCisgICAgICBpZiAoIWlzVHJpc3RhdGVEcml2ZXIoZHJ2cl9waW4pKSB7CisgICAgICAgIGVuc3VyZVdpcmVQYXJhc2l0aWMoZHJ2cl9waW4sIG5ldCk7CisgICAgICAgIGdyYXBoX2RlbGF5X2NhbGNfLT5maW5kRGVsYXlzKGRydnIpOworCisgICAgICAgIGZsb2F0IG1heF9sb2FkX3NsZXcgPSBJTkY7CisgICAgICAgIGZsb2F0IG1heF9jYXAgPSBJTkY7CisgICAgICAgIGZsb2F0IG1heF9mYW5vdXQgPSBJTkY7CisgICAgICAgIGJvb2wgcmVwYWlyX3NsZXcgPSBmYWxzZTsKKyAgICAgICAgYm9vbCByZXBhaXJfY2FwID0gZmFsc2U7CisgICAgICAgIGJvb2wgcmVwYWlyX2Zhbm91dCA9IGZhbHNlOworICAgICAgICBib29sIHJlcGFpcl93aXJlID0gZmFsc2U7CisgICAgICAgIGNvbnN0IENvcm5lciAqY29ybmVyID0gc3RhXy0+Y21kQ29ybmVyKCk7CisgICAgICAgIGlmIChjaGVja19jYXApIHsKKyAgICAgICAgICBmbG9hdCBjYXAxLCBtYXhfY2FwMSwgY2FwX3NsYWNrMTsKKyAgICAgICAgICBjb25zdCBDb3JuZXIgKmNvcm5lcjE7CisgICAgICAgICAgY29uc3QgUmlzZUZhbGwgKnRyMTsKKyAgICAgICAgICBzdGFfLT5jaGVja0NhcGFjaXRhbmNlKGRydnJfcGluLCBudWxscHRyLCBtYXhfLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ybmVyMSwgdHIxLCBjYXAxLCBtYXhfY2FwMSwgY2FwX3NsYWNrMSk7CisgICAgICAgICAgaWYgKG1heF9jYXAxID4gMC4wICYmIGNvcm5lcjEpIHsKKyAgICAgICAgICAgIG1heF9jYXAxICo9ICgxLjAgLSBtYXhfY2FwX21hcmdpbiAvIDEwMC4wKTsKKyAgICAgICAgICAgIG1heF9jYXAgPSBtYXhfY2FwMTsKKyAgICAgICAgICAgIGlmIChjYXAxID4gbWF4X2NhcDEpIHsKKyAgICAgICAgICAgICAgY29ybmVyID0gY29ybmVyMTsKKyAgICAgICAgICAgICAgY2FwX3Zpb2xhdGlvbnMrKzsKKyAgICAgICAgICAgICAgcmVwYWlyX2NhcCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChjaGVja19mYW5vdXQpIHsKKyAgICAgICAgICBmbG9hdCBmYW5vdXQsIGZhbm91dF9zbGFjazsKKyAgICAgICAgICBzdGFfLT5jaGVja0Zhbm91dChkcnZyX3BpbiwgbWF4XywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYW5vdXQsIG1heF9mYW5vdXQsIGZhbm91dF9zbGFjayk7CisgICAgICAgICAgaWYgKG1heF9mYW5vdXQgPiAwLjAgJiYgZmFub3V0X3NsYWNrIDwgMC4wKSB7CisgICAgICAgICAgICBmYW5vdXRfdmlvbGF0aW9ucysrOworICAgICAgICAgICAgcmVwYWlyX2Zhbm91dCA9IHRydWU7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGludCB3aXJlX2xlbmd0aCA9IGZpbmRNYXhTdGVpbmVyRGlzdCh0cmVlKTsKKyAgICAgICAgaWYgKG1heF9sZW5ndGgKKyAgICAgICAgICAgICYmIHdpcmVfbGVuZ3RoID4gbWF4X2xlbmd0aCkgeworICAgICAgICAgIGxlbmd0aF92aW9sYXRpb25zKys7CisgICAgICAgICAgcmVwYWlyX3dpcmUgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChjaGVja19zbGV3KSB7CisgICAgICAgICAgZmxvYXQgc2xldzEsIHNsZXdfc2xhY2sxLCBtYXhfc2xldzE7CisgICAgICAgICAgY29uc3QgQ29ybmVyICpjb3JuZXIxOworICAgICAgICAgIC8vIENoZWNrIHNsZXcgYXQgdGhlIGRyaXZlci4KKyAgICAgICAgICBjaGVja1NsZXcoZHJ2cl9waW4sIHNsZXdfbWFyZ2luLCBzbGV3MSwgbWF4X3NsZXcxLCBzbGV3X3NsYWNrMSwgY29ybmVyMSk7CisgICAgICAgICAgLy8gTWF4IHNsZXcgdmlvbGF0aW9ucyBhdCB0aGUgZHJpdmVyIHBpbiBhcmUgcmVwYWlyZWQgYnkgcmVkdWNpbmcgdGhlCisgICAgICAgICAgLy8gbG9hZCBjYXBhY2l0YW5jZS4gV2lyZSByZXNpc3RhbmNlIG1heSBzaGllbGQgY2FwYWNpdGFuY2UgZnJvbSB0aGUKKyAgICAgICAgICAvLyBkcml2ZXIgYnV0IHNvIHRoaXMgaXMgY29uc2VydmF0aXZlLgorICAgICAgICAgIC8vIEZpbmQgbWF4IGxvYWQgY2FwIHRoYXQgY29ycmVzcG9uZHMgdG8gbWF4X3NsZXcuCisgICAgICAgICAgTGliZXJ0eVBvcnQgKmRydnJfcG9ydCA9IG5ldHdvcmtfLT5saWJlcnR5UG9ydChkcnZyX3Bpbik7CisgICAgICAgICAgaWYgKGNvcm5lcjEKKyAgICAgICAgICAgICAgJiYgbWF4X3NsZXcxID4gMC4wICYmIGRydnJfcG9ydCkgeworICAgICAgICAgICAgZmxvYXQgbWF4X2NhcDEgPSBmaW5kU2xld0xvYWRDYXAoZHJ2cl9wb3J0LCBtYXhfc2xldzEsIGNvcm5lcjEpOworICAgICAgICAgICAgbWF4X2NhcCA9IG1pbihtYXhfY2FwLCBtYXhfY2FwMSk7CisgICAgICAgICAgICBjb3JuZXIgPSBjb3JuZXIxOworICAgICAgICAgICAgZGVidWdQcmludChsb2dnZXJfLCBSU1osICJyZXBhaXJfbmV0IiwgMiwgImRydnJfc2xldz17fSBtYXhfc2xldz17fSBtYXhfY2FwPXt9IGNvcm5lcj17fSIsCisgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5QXNTdHJpbmcoc2xldzEsIHRoaXMsIDMpLAorICAgICAgICAgICAgICAgICAgICAgICBkZWxheUFzU3RyaW5nKG1heF9zbGV3MSwgdGhpcywgMyksCisgICAgICAgICAgICAgICAgICAgICAgIHVuaXRzXy0+Y2FwYWNpdGFuY2VVbml0KCktPmFzU3RyaW5nKG1heF9jYXAxLCAzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgY29ybmVyMS0+bmFtZSgpKTsKKyAgICAgICAgICAgIGlmIChzbGV3X3NsYWNrMSA8IDAuMCkKKyAgICAgICAgICAgICAgcmVwYWlyX3NsZXcgPSB0cnVlOworICAgICAgICAgIH0KKyAgICAgICAgICBpZiAoc2xld19zbGFjazEgPCAwLjApCisgICAgICAgICAgICBzbGV3X3Zpb2xhdGlvbnMrKzsKKworICAgICAgICAgIC8vIENoZWNrIHNsZXcgYXQgdGhlIGxvYWRzLgorICAgICAgICAgIC8vIE5vdGUgdGhhdCBtYW55IGxpYmVydHkgbGlicmFyaWVzIGRvIG5vdCBoYXZlIG1heF90cmFuc2l0aW9uIGF0dHJpYnV0ZXMgb24KKyAgICAgICAgICAvLyBpbnB1dCBwaW5zLgorICAgICAgICAgIC8vIE1heCBzbGV3IHZpb2xhdGlvbnMgYXQgdGhlIGxvYWQgcGlucyBhcmUgcmVwYWlyZWQgYnkgcmVkdWNpbmcgdGhlCisgICAgICAgICAgLy8gd2lyZSBsZW5ndGguCisgICAgICAgICAgY2hlY2tMb2FkU2xld3MoZHJ2cl9waW4sIHNsZXdfbWFyZ2luLCBzbGV3MSwgbWF4X3NsZXcxLCBzbGV3X3NsYWNrMSwgY29ybmVyMSk7CisgICAgICAgICAgLy8gRXZlbiB3aGVuIHRoZXJlIGFyZSBubyBsb2FkIHZpb2xhdGlvbnMgd2UgbmVlZCBtYXhfbG9hZF9zbGV3IGZvcgorICAgICAgICAgIC8vIHNpemluZyBpbnNlcnRlZCBidWZmZXJzLgorICAgICAgICAgIGlmIChtYXhfc2xldzEgPiAwLjApIHsKKyAgICAgICAgICAgIG1heF9sb2FkX3NsZXcgPSBtYXhfc2xldzE7CisgICAgICAgICAgICBkZWJ1Z1ByaW50KGxvZ2dlcl8sIFJTWiwgInJlcGFpcl9uZXQiLCAyLCAibG9hZF9zbGV3PXt9IG1heF9sb2FkX3NsZXc9e30iLAorICAgICAgICAgICAgICAgICAgICAgICBkZWxheUFzU3RyaW5nKHNsZXcxLCB0aGlzLCAzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgZGVsYXlBc1N0cmluZyhtYXhfbG9hZF9zbGV3LCB0aGlzLCAzKSk7CisgICAgICAgICAgICBpZiAoc2xld19zbGFjazEgPCAwLjApIHsKKyAgICAgICAgICAgICAgLy8gRG9uJ3QgZG91YmxlIGNvdW50IHZpb2xhdGlvbnMgb24gdGhlIHNhbWUgbmV0LgorICAgICAgICAgICAgICBpZiAoIXJlcGFpcl9zbGV3KQorICAgICAgICAgICAgICAgIHNsZXdfdmlvbGF0aW9ucysrOworICAgICAgICAgICAgICBjb3JuZXIgPSBjb3JuZXIxOworICAgICAgICAgICAgICByZXBhaXJfc2xldyA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHJlcGFpcl9zbGV3CisgICAgICAgICAgICB8fCByZXBhaXJfY2FwCisgICAgICAgICAgICB8fCByZXBhaXJfZmFub3V0CisgICAgICAgICAgICB8fCByZXBhaXJfd2lyZSkgeworICAgICAgICAgIFBvaW50IGRydnJfbG9jID0gZGJfbmV0d29ya18tPmxvY2F0aW9uKGRydnItPnBpbigpKTsKKyAgICAgICAgICBkZWJ1Z1ByaW50KGxvZ2dlcl8sIFJTWiwgInJlcGFpcl9uZXQiLCAxLCAiZHJpdmVyIHt9ICh7fSB7fSkgbD17fSIsCisgICAgICAgICAgICAgICAgICAgICBzZGNfbmV0d29ya18tPnBhdGhOYW1lKGRydnJfcGluKSwKKyAgICAgICAgICAgICAgICAgICAgIHVuaXRzXy0+ZGlzdGFuY2VVbml0KCktPmFzU3RyaW5nKGRidVRvTWV0ZXJzKGRydnJfbG9jLmdldFgoKSksIDEpLAorICAgICAgICAgICAgICAgICAgICAgdW5pdHNfLT5kaXN0YW5jZVVuaXQoKS0+YXNTdHJpbmcoZGJ1VG9NZXRlcnMoZHJ2cl9sb2MuZ2V0WSgpKSwgMSksCisgICAgICAgICAgICAgICAgICAgICB1bml0c18tPmRpc3RhbmNlVW5pdCgpLT5hc1N0cmluZyhkYnVUb01ldGVycyh3aXJlX2xlbmd0aCksIDEpKTsKKyAgICAgICAgICBTdGVpbmVyUHQgZHJ2cl9wdCA9IHRyZWUtPmRydnJQdChuZXR3b3JrXyk7CisgICAgICAgICAgaW50IHdpcmVfbGVuZ3RoOworICAgICAgICAgIGZsb2F0IHBpbl9jYXAsIGZhbm91dDsKKyAgICAgICAgICBQaW5TZXEgbG9hZF9waW5zOworICAgICAgICAgIGlmIChkcnZyX3B0ICE9IFN0ZWluZXJUcmVlOjpudWxsX3B0KQorICAgICAgICAgICAgcmVwYWlyTmV0KHRyZWUsIGRydnJfcHQsIFN0ZWluZXJUcmVlOjpudWxsX3B0LCBuZXQsIGRydnJfcGluLAorICAgICAgICAgICAgICAgICAgICAgIG1heF9sb2FkX3NsZXcsIG1heF9jYXAsIG1heF9mYW5vdXQsIG1heF9sZW5ndGgsIGNvcm5lciwgMCwKKyAgICAgICAgICAgICAgICAgICAgICB3aXJlX2xlbmd0aCwgcGluX2NhcCwgZmFub3V0LCBsb2FkX3BpbnMpOworICAgICAgICAgIHJlcGFpcl9jb3VudCsrOworCisgICAgICAgICAgaWYgKHJlc2l6ZV9kcnZyKQorICAgICAgICAgICAgcmVzaXplVG9UYXJnZXRTbGV3KGRydnJfcGluLCB0cnVlKTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgZGVsZXRlIHRyZWU7CisgICAgfQorICB9Cit9CisKK2Jvb2wKK1Jlc2l6ZXI6OmNoZWNrTGltaXRzKGNvbnN0IFBpbiAqZHJ2cl9waW4sCisgICAgICAgICAgICAgICAgICAgICBkb3VibGUgc2xld19tYXJnaW4sCisgICAgICAgICAgICAgICAgICAgICBkb3VibGUgbWF4X2NhcF9tYXJnaW4sCisgICAgICAgICAgICAgICAgICAgICBib29sIGNoZWNrX3NsZXcsCisgICAgICAgICAgICAgICAgICAgICBib29sIGNoZWNrX2NhcCwKKyAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2hlY2tfZmFub3V0KQoreworICBpZiAoY2hlY2tfY2FwKSB7CisgICAgZmxvYXQgY2FwMSwgbWF4X2NhcDEsIGNhcF9zbGFjazE7CisgICAgY29uc3QgQ29ybmVyICpjb3JuZXIxOworICAgIGNvbnN0IFJpc2VGYWxsICp0cjE7CisgICAgc3RhXy0+Y2hlY2tDYXBhY2l0YW5jZShkcnZyX3BpbiwgbnVsbHB0ciwgbWF4XywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcm5lcjEsIHRyMSwgY2FwMSwgbWF4X2NhcDEsIGNhcF9zbGFjazEpOworICAgIG1heF9jYXAxICo9ICgxLjAgLSBtYXhfY2FwX21hcmdpbiAvIDEwMC4wKTsKKyAgICBpZiAoY2FwMSA8IG1heF9jYXAxKQorICAgICAgcmV0dXJuIHRydWU7CisgIH0KKyAgaWYgKGNoZWNrX2Zhbm91dCkgeworICAgIGZsb2F0IGZhbm91dCwgZmFub3V0X3NsYWNrLCBtYXhfZmFub3V0OworICAgIHN0YV8tPmNoZWNrRmFub3V0KGRydnJfcGluLCBtYXhfLAorICAgICAgICAgICAgICAgICAgICAgIGZhbm91dCwgbWF4X2Zhbm91dCwgZmFub3V0X3NsYWNrKTsKKyAgICBpZiAoZmFub3V0X3NsYWNrIDwgMC4wKQorICAgICAgcmV0dXJuIHRydWU7CisKKyAgfQorICBpZiAoY2hlY2tfc2xldykgeworICAgIGZsb2F0IHNsZXcxLCBzbGV3X3NsYWNrMSwgbWF4X3NsZXcxOworICAgIGNvbnN0IENvcm5lciAqY29ybmVyMTsKKyAgICBjaGVja1NsZXcoZHJ2cl9waW4sIHNsZXdfbWFyZ2luLCBzbGV3MSwgbWF4X3NsZXcxLCBzbGV3X3NsYWNrMSwgY29ybmVyMSk7CisgICAgaWYgKHNsZXdfc2xhY2sxIDwgMC4wKQorICAgICAgcmV0dXJuIHRydWU7CisgICAgY2hlY2tMb2FkU2xld3MoZHJ2cl9waW4sIHNsZXdfbWFyZ2luLCBzbGV3MSwgbWF4X3NsZXcxLCBzbGV3X3NsYWNrMSwgY29ybmVyMSk7CisgICAgaWYgKHNsZXdfc2xhY2sxIDwgMC4wKQorICAgICAgcmV0dXJuIHRydWU7CisgIH0KKyAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkCitSZXNpemVyOjpjaGVja1NsZXcoY29uc3QgUGluICpkcnZyX3BpbiwKKyAgICAgICAgICAgICAgICAgICBkb3VibGUgc2xld19tYXJnaW4sCisgICAgICAgICAgICAgICAgICAgLy8gUmV0dXJuIHZhbHVlcy4KKyAgICAgICAgICAgICAgICAgICBTbGV3ICZzbGV3LAorICAgICAgICAgICAgICAgICAgIGZsb2F0ICZsaW1pdCwKKyAgICAgICAgICAgICAgICAgICBmbG9hdCAmc2xhY2ssCisgICAgICAgICAgICAgICAgICAgY29uc3QgQ29ybmVyIComY29ybmVyKQoreworICBzbGFjayA9IElORjsKKyAgbGltaXQgPSBJTkY7CisgIGNvcm5lciA9IG51bGxwdHI7CisKKyAgY29uc3QgQ29ybmVyICpjb3JuZXIxOworICBjb25zdCBSaXNlRmFsbCAqdHIxOworICBTbGV3IHNsZXcxOworICBmbG9hdCBsaW1pdDEsIHNsYWNrMTsKKyAgc3RhXy0+Y2hlY2tTbGV3KGRydnJfcGluLCBudWxscHRyLCBtYXhfLCBmYWxzZSwKKyAgICAgICAgICAgICAgICAgIGNvcm5lcjEsIHRyMSwgc2xldzEsIGxpbWl0MSwgc2xhY2sxKTsKKyAgaWYgKGNvcm5lcjEpIHsKKyAgICBsaW1pdDEgKj0gKDEuMCAtIHNsZXdfbWFyZ2luIC8gMTAwLjApOworICAgIHNsYWNrMSA9IGxpbWl0MSAtIHNsZXcxOworICAgIGlmIChzbGFjazEgPCBzbGFjaykgeworICAgICAgc2xldyA9IHNsZXcxOworICAgICAgbGltaXQgPSBsaW1pdDE7CisgICAgICBzbGFjayA9IHNsYWNrMTsKKyAgICAgIGNvcm5lciA9IGNvcm5lcjE7CisgICAgfQorICB9Cit9CisKK3ZvaWQKK1Jlc2l6ZXI6OmNoZWNrTG9hZFNsZXdzKGNvbnN0IFBpbiAqZHJ2cl9waW4sCisgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgc2xld19tYXJnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXR1cm4gdmFsdWVzLgorICAgICAgICAgICAgICAgICAgICAgICAgU2xldyAmc2xldywKKyAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0ICZsaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0ICZzbGFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENvcm5lciAqJmNvcm5lcikKK3sKKyAgc2xhY2sgPSBJTkY7CisgIGxpbWl0ID0gSU5GOworICBQaW5Db25uZWN0ZWRQaW5JdGVyYXRvciAqcGluX2l0ZXIgPSBuZXR3b3JrXy0+Y29ubmVjdGVkUGluSXRlcmF0b3IoZHJ2cl9waW4pOworICB3aGlsZSAocGluX2l0ZXItPmhhc05leHQoKSkgeworICAgIFBpbiAqcGluID0gcGluX2l0ZXItPm5leHQoKTsKKyAgICBpZiAocGluICE9IGRydnJfcGluKSB7CisgICAgICBjb25zdCBDb3JuZXIgKmNvcm5lcjE7CisgICAgICBjb25zdCBSaXNlRmFsbCAqdHIxOworICAgICAgU2xldyBzbGV3MTsKKyAgICAgIGZsb2F0IGxpbWl0MSwgc2xhY2sxOworICAgICAgc3RhXy0+Y2hlY2tTbGV3KHBpbiwgbnVsbHB0ciwgbWF4XywgZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgY29ybmVyMSwgdHIxLCBzbGV3MSwgbGltaXQxLCBzbGFjazEpOworICAgICAgaWYgKGNvcm5lcjEpIHsKKyAgICAgICAgbGltaXQxICo9ICgxLjAgLSBzbGV3X21hcmdpbiAvIDEwMC4wKTsKKyAgICAgICAgbGltaXQgPSBtaW4obGltaXQsIGxpbWl0MSk7CisgICAgICAgIHNsYWNrMSA9IGxpbWl0MSAtIHNsZXcxOworICAgICAgICBpZiAoc2xhY2sxIDwgc2xhY2spIHsKKyAgICAgICAgICBzbGV3ID0gc2xldzE7CisgICAgICAgICAgc2xhY2sgPSBzbGFjazE7CisgICAgICAgICAgY29ybmVyID0gY29ybmVyMTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorICBkZWxldGUgcGluX2l0ZXI7Cit9CisKKy8vIEZpbmQgdGhlIG91dHB1dCBwb3J0IGxvYWQgY2FwYWNpdGFuY2UgdGhhdCByZXN1bHRzIGluIHNsZXcuCitkb3VibGUKK1Jlc2l6ZXI6OmZpbmRTbGV3TG9hZENhcChMaWJlcnR5UG9ydCAqZHJ2cl9wb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBzbGV3LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENvcm5lciAqY29ybmVyKQoreworICBjb25zdCBEY2FsY0FuYWx5c2lzUHQgKmRjYWxjX2FwID0gY29ybmVyLT5maW5kRGNhbGNBbmFseXNpc1B0KG1heF8pOworICAvLyBjYXAxIGxvd2VyIGJvdW5kCisgIC8vIGNhcDIgdXBwZXIgYm91bmQKKyAgZG91YmxlIGNhcDEgPSAwLjA7CisgIGRvdWJsZSBjYXAyID0gc2xldyAvIGRydnJfcG9ydC0+ZHJpdmVSZXNpc3RhbmNlKCkgKiAyOworICBkb3VibGUgdG9sID0gLjAxOyAvLyAxJQorICBkb3VibGUgZGlmZjEgPSBnYXRlU2xld0RpZmYoZHJ2cl9wb3J0LCBjYXAyLCBzbGV3LCBkY2FsY19hcCk7CisgIC8vIGJpbmFyeSBzZWFyY2ggZm9yIGRpZmYgPSAwLgorICB3aGlsZSAoYWJzKGNhcDEgLSBjYXAyKSA+IG1heChjYXAxLCBjYXAyKSAqIHRvbCkgeworICAgIGlmIChkaWZmMSA8IDAuMCkgeworICAgICAgY2FwMSA9IGNhcDI7CisgICAgICBjYXAyICo9IDI7CisgICAgICBkaWZmMSA9IGdhdGVTbGV3RGlmZihkcnZyX3BvcnQsIGNhcDIsIHNsZXcsIGRjYWxjX2FwKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICBkb3VibGUgY2FwMyA9IChjYXAxICsgY2FwMikgLyAyLjA7CisgICAgICBkb3VibGUgZGlmZjIgPSBnYXRlU2xld0RpZmYoZHJ2cl9wb3J0LCBjYXAzLCBzbGV3LCBkY2FsY19hcCk7CisgICAgICBpZiAoZGlmZjIgPCAwLjApIHsKKyAgICAgICAgY2FwMSA9IGNhcDM7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgY2FwMiA9IGNhcDM7CisgICAgICAgIGRpZmYxID0gZGlmZjI7CisgICAgICB9CisgICAgfQorICB9CisgIHJldHVybiBjYXAxOworfQorCisvLyBvYmplY3RpdmUgZnVuY3Rpb24KK2RvdWJsZQorUmVzaXplcjo6Z2F0ZVNsZXdEaWZmKExpYmVydHlQb3J0ICpkcnZyX3BvcnQsCisgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGxvYWRfY2FwLAorICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBzbGV3LAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IERjYWxjQW5hbHlzaXNQdCAqZGNhbGNfYXApCit7CisgIEFyY0RlbGF5IGRlbGF5c1tSaXNlRmFsbDo6aW5kZXhfY291bnRdOworICBTbGV3IHNsZXdzW1Jpc2VGYWxsOjppbmRleF9jb3VudF07CisgIGdhdGVEZWxheXMoZHJ2cl9wb3J0LCBsb2FkX2NhcCwgZGNhbGNfYXAsIGRlbGF5cywgc2xld3MpOworICBTbGV3IGdhdGVfc2xldyA9IG1heChzbGV3c1tSaXNlRmFsbDo6cmlzZUluZGV4KCldLCBzbGV3c1tSaXNlRmFsbDo6ZmFsbEluZGV4KCldKTsKKyAgcmV0dXJuIGdhdGVfc2xldyAtIHNsZXc7Cit9CisKK3ZvaWQKK1Jlc2l6ZXI6OnJlcGFpck5ldChTdGVpbmVyVHJlZSAqdHJlZSwKKyAgICAgICAgICAgICAgICAgICBTdGVpbmVyUHQgcHQsCisgICAgICAgICAgICAgICAgICAgU3RlaW5lclB0IHByZXZfcHQsCisgICAgICAgICAgICAgICAgICAgTmV0ICpuZXQsCisgICAgICAgICAgICAgICAgICAgY29uc3QgUGluICpkcnZyX3BpbiwKKyAgICAgICAgICAgICAgICAgICBmbG9hdCBtYXhfbG9hZF9zbGV3LAorICAgICAgICAgICAgICAgICAgIGZsb2F0IG1heF9jYXAsCisgICAgICAgICAgICAgICAgICAgZmxvYXQgbWF4X2Zhbm91dCwKKyAgICAgICAgICAgICAgICAgICBpbnQgbWF4X2xlbmd0aCwgLy8gZGJ1CisgICAgICAgICAgICAgICAgICAgY29uc3QgQ29ybmVyICpjb3JuZXIsCisgICAgICAgICAgICAgICAgICAgaW50IGxldmVsLAorICAgICAgICAgICAgICAgICAgIC8vIFJldHVybiB2YWx1ZXMuCisgICAgICAgICAgICAgICAgICAgLy8gUmVtYWluaW5nIHBhcmFzaWljcyBhZnRlciByZXBlYXRlciBpbnNlcnRpb24uCisgICAgICAgICAgICAgICAgICAgaW50ICZ3aXJlX2xlbmd0aCwgLy8gZGJ1CisgICAgICAgICAgICAgICAgICAgZmxvYXQgJnBpbl9jYXAsCisgICAgICAgICAgICAgICAgICAgZmxvYXQgJmZhbm91dCwKKyAgICAgICAgICAgICAgICAgICBQaW5TZXEgJmxvYWRfcGlucykKK3sKKyAgUG9pbnQgcHRfbG9jID0gdHJlZS0+bG9jYXRpb24ocHQpOworICBpbnQgcHRfeCA9IHB0X2xvYy5nZXRYKCk7CisgIGludCBwdF95ID0gcHRfbG9jLmdldFkoKTsKKyAgZGVidWdQcmludChsb2dnZXJfLCBSU1osICJyZXBhaXJfbmV0IiwgMiwgIns6e31zfXB0ICh7fSB7fSkiLAorICAgICAgICAgICAgICIiLCBsZXZlbCwKKyAgICAgICAgICAgICB1bml0c18tPmRpc3RhbmNlVW5pdCgpLT5hc1N0cmluZyhkYnVUb01ldGVycyhwdF94KSwgMSksCisgICAgICAgICAgICAgdW5pdHNfLT5kaXN0YW5jZVVuaXQoKS0+YXNTdHJpbmcoZGJ1VG9NZXRlcnMocHRfeSksIDEpKTsKKyAgZG91YmxlIHdpcmVfY2FwID0gd2lyZVNpZ25hbENhcGFjaXRhbmNlKGNvcm5lcik7CisgIGRvdWJsZSB3aXJlX3JlcyA9IHdpcmVTaWduYWxSZXNpc3RhbmNlKGNvcm5lcik7CisgIFN0ZWluZXJQdCBsZWZ0ID0gdHJlZS0+bGVmdChwdCk7CisgIGludCB3aXJlX2xlbmd0aF9sZWZ0ID0gMDsKKyAgZmxvYXQgcGluX2NhcF9sZWZ0ID0gMC4wOworICBmbG9hdCBmYW5vdXRfbGVmdCA9IDAuMDsKKyAgUGluU2VxIGxvYWRzX2xlZnQ7CisgIGlmIChsZWZ0ICE9IFN0ZWluZXJUcmVlOjpudWxsX3B0KQorICAgIHJlcGFpck5ldCh0cmVlLCBsZWZ0LCBwdCwgbmV0LCBkcnZyX3BpbiwgbWF4X2xvYWRfc2xldywgbWF4X2NhcCwgbWF4X2Zhbm91dCwgbWF4X2xlbmd0aCwKKyAgICAgICAgICAgICAgY29ybmVyLCBsZXZlbCsxLAorICAgICAgICAgICAgICB3aXJlX2xlbmd0aF9sZWZ0LCBwaW5fY2FwX2xlZnQsIGZhbm91dF9sZWZ0LCBsb2Fkc19sZWZ0KTsKKyAgU3RlaW5lclB0IHJpZ2h0ID0gdHJlZS0+cmlnaHQocHQpOworICBpbnQgd2lyZV9sZW5ndGhfcmlnaHQgPSAwOworICBmbG9hdCBwaW5fY2FwX3JpZ2h0ID0gMC4wOworICBmbG9hdCBmYW5vdXRfcmlnaHQgPSAwLjA7CisgIFBpblNlcSBsb2Fkc19yaWdodDsKKyAgaWYgKHJpZ2h0ICE9IFN0ZWluZXJUcmVlOjpudWxsX3B0KQorICAgIHJlcGFpck5ldCh0cmVlLCByaWdodCwgcHQsIG5ldCwgZHJ2cl9waW4sIG1heF9sb2FkX3NsZXcsIG1heF9jYXAsIG1heF9mYW5vdXQsIG1heF9sZW5ndGgsCisgICAgICAgICAgICAgIGNvcm5lciwgbGV2ZWwrMSwKKyAgICAgICAgICAgICAgd2lyZV9sZW5ndGhfcmlnaHQsIHBpbl9jYXBfcmlnaHQsIGZhbm91dF9yaWdodCwgbG9hZHNfcmlnaHQpOworICBkZWJ1Z1ByaW50KGxvZ2dlcl8sIFJTWiwgInJlcGFpcl9uZXQiLCAzLCAiezp7fXN9bGVmdCBsPXt9IHBpbl9jYXA9e30gZmFub3V0PXt9LCByaWdodCBsPXt9IHBpbl9jYXA9e30gZmFub3V0PXt9IiwKKyAgICAgICAgICAgICAiIiwgbGV2ZWwsCisgICAgICAgICAgICAgdW5pdHNfLT5kaXN0YW5jZVVuaXQoKS0+YXNTdHJpbmcoZGJ1VG9NZXRlcnMod2lyZV9sZW5ndGhfbGVmdCksIDEpLAorICAgICAgICAgICAgIHVuaXRzXy0+Y2FwYWNpdGFuY2VVbml0KCktPmFzU3RyaW5nKHBpbl9jYXBfbGVmdCwgMyksCisgICAgICAgICAgICAgZmFub3V0X2xlZnQsCisgICAgICAgICAgICAgdW5pdHNfLT5kaXN0YW5jZVVuaXQoKS0+YXNTdHJpbmcoZGJ1VG9NZXRlcnMod2lyZV9sZW5ndGhfcmlnaHQpLCAxKSwKKyAgICAgICAgICAgICB1bml0c18tPmNhcGFjaXRhbmNlVW5pdCgpLT5hc1N0cmluZyhwaW5fY2FwX3JpZ2h0LCAzKSwKKyAgICAgICAgICAgICBmYW5vdXRfcmlnaHQpOworICAvLyBBZGQgYSBidWZmZXIgdG8gbGVmdCBvciByaWdodCBicmFuY2ggdG8gc3RheSB1bmRlciB0aGUgbWF4IGNhcC9sZW5ndGgvZmFub3V0LgorICBib29sIHJlcGVhdGVyX2xlZnQgPSBmYWxzZTsKKyAgYm9vbCByZXBlYXRlcl9yaWdodCA9IGZhbHNlOworICBkb3VibGUgY2FwX2xlZnQgPSBwaW5fY2FwX2xlZnQgKyBkYnVUb01ldGVycyh3aXJlX2xlbmd0aF9sZWZ0KSAqIHdpcmVfY2FwOworICBkb3VibGUgY2FwX3JpZ2h0ID0gcGluX2NhcF9yaWdodCArIGRidVRvTWV0ZXJzKHdpcmVfbGVuZ3RoX3JpZ2h0KSAqIHdpcmVfY2FwOworICBkZWJ1Z1ByaW50KGxvZ2dlcl8sIFJTWiwgInJlcGFpcl9uZXQiLCAzLCAiezp7fXN9Y2FwX2xlZnQ9e30sIHJpZ2h0X2NhcD17fSIsCisgICAgICAgICAgICAgIiIsIGxldmVsLAorICAgICAgICAgICAgIHVuaXRzXy0+Y2FwYWNpdGFuY2VVbml0KCktPmFzU3RyaW5nKGNhcF9sZWZ0LCAzKSwKKyAgICAgICAgICAgICB1bml0c18tPmNhcGFjaXRhbmNlVW5pdCgpLT5hc1N0cmluZyhjYXBfcmlnaHQsIDMpKTsKKworICBkb3VibGUgd2lyZV9sZW5ndGgxID0gZGJ1VG9NZXRlcnMod2lyZV9sZW5ndGhfbGVmdCArIHdpcmVfbGVuZ3RoX3JpZ2h0KTsKKyAgZmxvYXQgbG9hZF9jYXAgPSBjYXBfbGVmdCArIGNhcF9yaWdodDsKKworICBMaWJlcnR5Q2VsbCAqYnVmZmVyX2NlbGwgPSBmaW5kVGFyZ2V0Q2VsbChidWZmZXJfbG93ZXN0X2RyaXZlXywgbG9hZF9jYXAsIGZhbHNlKTsKKyAgTGliZXJ0eVBvcnQgKmlucHV0LCAqYnVmZmVyX291dHB1dDsKKyAgYnVmZmVyX2NlbGwtPmJ1ZmZlclBvcnRzKGlucHV0LCBidWZmZXJfb3V0cHV0KTsKKyAgZmxvYXQgcl9idWZmZXIgPSBidWZmZXJfb3V0cHV0LT5kcml2ZVJlc2lzdGFuY2UoKTsKKyAgZmxvYXQgcl9kcnYgPSBkcml2ZVJlc2lzdGFuY2UoZHJ2cl9waW4pOworICBmbG9hdCByX2RydnIgPSBtYXgocl9kcnYsIHJfYnVmZmVyKTsKKyAgLy8gRWxtb3JlIGZhY3RvciBmb3IgMjAtODAlIHNsZXcgdGhyZXNob2xkcy4KKyAgZmxvYXQga190aHJlc2hvbGQgPSAxLjM5OworICBTbGV3IGxvYWRfc2xldyA9IChyX2RydnIgKyB3aXJlX2xlbmd0aDEgKiB3aXJlX3JlcykgKiBsb2FkX2NhcCAqIGtfdGhyZXNob2xkOworICBkZWJ1Z1ByaW50KGxvZ2dlcl8sIFJTWiwgInJlcGFpcl9uZXQiLCAzLCAiezp7fXN9bG9hZF9zbGV3PXt9IHJfZHJ2cj17fSByX2J1ZmZlcj17fSIsCisgICAgICAgICAgICAgIiIsIGxldmVsLAorICAgICAgICAgICAgIGRlbGF5QXNTdHJpbmcobG9hZF9zbGV3LCB0aGlzLCAzKSwKKyAgICAgICAgICAgICB1bml0c18tPnJlc2lzdGFuY2VVbml0KCktPmFzU3RyaW5nKHJfZHJ2LCAzKSwKKyAgICAgICAgICAgICB1bml0c18tPnJlc2lzdGFuY2VVbml0KCktPmFzU3RyaW5nKHJfYnVmZmVyLCAzKSk7CisKKyAgYm9vbCBzbGV3X3Zpb2xhdGlvbiA9IGxvYWRfc2xldyA+IG1heF9sb2FkX3NsZXc7CisgIGlmIChzbGV3X3Zpb2xhdGlvbikgeworICAgIGRlYnVnUHJpbnQobG9nZ2VyXywgUlNaLCAicmVwYWlyX25ldCIsIDMsICJ7Ont9c31zbGV3IHZpb2xhdGlvbiIsICIiLCBsZXZlbCk7CisgICAgaWYgKGNhcF9sZWZ0ID4gY2FwX3JpZ2h0KQorICAgICAgcmVwZWF0ZXJfbGVmdCA9IHRydWU7CisgICAgZWxzZQorICAgICAgcmVwZWF0ZXJfcmlnaHQgPSB0cnVlOworICB9CisKKyAgYm9vbCBjYXBfdmlvbGF0aW9uID0gKGNhcF9sZWZ0ICsgY2FwX3JpZ2h0KSA+IG1heF9jYXA7CisgIGlmIChjYXBfdmlvbGF0aW9uKSB7CisgICAgZGVidWdQcmludChsb2dnZXJfLCBSU1osICJyZXBhaXJfbmV0IiwgMywgIns6e31zfWNhcCB2aW9sYXRpb24iLCAiIiwgbGV2ZWwpOworICAgIGlmIChjYXBfbGVmdCA+IGNhcF9yaWdodCkKKyAgICAgIHJlcGVhdGVyX2xlZnQgPSB0cnVlOworICAgIGVsc2UKKyAgICAgIHJlcGVhdGVyX3JpZ2h0ID0gdHJ1ZTsKKyAgfQorICBib29sIGxlbmd0aF92aW9sYXRpb24gPSBtYXhfbGVuZ3RoID4gMAorICAgICYmICh3aXJlX2xlbmd0aF9sZWZ0ICsgd2lyZV9sZW5ndGhfcmlnaHQpID4gbWF4X2xlbmd0aDsKKyAgaWYgKGxlbmd0aF92aW9sYXRpb24pIHsKKyAgICBkZWJ1Z1ByaW50KGxvZ2dlcl8sIFJTWiwgInJlcGFpcl9uZXQiLCAzLCAiezp7fXN9bGVuZ3RoIHZpb2xhdGlvbiIsICIiLCBsZXZlbCk7CisgICAgaWYgKHdpcmVfbGVuZ3RoX2xlZnQgPiB3aXJlX2xlbmd0aF9yaWdodCkKKyAgICAgIHJlcGVhdGVyX2xlZnQgPSB0cnVlOworICAgIGVsc2UKKyAgICAgIHJlcGVhdGVyX3JpZ2h0ID0gdHJ1ZTsKKyAgfQorICBib29sIGZhbm91dF92aW9sYXRpb24gPSBtYXhfZmFub3V0ID4gMAorICAgIC8vIE5vdGUgdGhhdCBpZiBib3RoIGZhbm91dF9sZWZ0PT1tYXhfZmFub3V0IGFuZCBmYW5vdXRfcmlnaHQ9PW1heF9mYW5vdXQKKyAgICAvLyB0aGVyZSBpcyBubyB3YXkgcmVwYWlyIHRoZSB2aW9sYXRpb24gKGFkZGluZyBhIGJ1ZmZlciB0byBlaXRoZXIgYnJhbmNoCisgICAgLy8gcmVzdWx0cyBpbiBtYXhfZmFub3V0KzEsIHdoaWNoIGlzIGEgdmlvbGF0aW9uKS4KKyAgICAvLyBMZWF2ZSByb29tIGZvciBvbmUgYnVmZmVyIG9uIHRoZSBvdGhlciBicmFuY2ggYnkgdXNpbmcgPj0gdG8gYXZvaWQKKyAgICAvLyB0aGlzIHNpdHVhdGlvbi4KKyAgICAmJiAoZmFub3V0X2xlZnQgKyBmYW5vdXRfcmlnaHQpID49IG1heF9mYW5vdXQ7CisgIGlmIChmYW5vdXRfdmlvbGF0aW9uKSB7CisgICAgZGVidWdQcmludChsb2dnZXJfLCBSU1osICJyZXBhaXJfbmV0IiwgMywgIns6e31zfWZhbm91dCB2aW9sYXRpb24iLCAiIiwgbGV2ZWwpOworICAgIGlmIChmYW5vdXRfbGVmdCA+IGZhbm91dF9yaWdodCkKKyAgICAgIHJlcGVhdGVyX2xlZnQgPSB0cnVlOworICAgIGVsc2UKKyAgICAgIHJlcGVhdGVyX3JpZ2h0ID0gdHJ1ZTsKKyAgfQorCisgIGlmIChyZXBlYXRlcl9sZWZ0KQorICAgIG1ha2VSZXBlYXRlcigibGVmdCIsIHRyZWUsIHB0LCBidWZmZXJfY2VsbCwgbGV2ZWwsCisgICAgICAgICAgICAgICAgIHdpcmVfbGVuZ3RoX2xlZnQsIHBpbl9jYXBfbGVmdCwgZmFub3V0X2xlZnQsIGxvYWRzX2xlZnQpOworICBpZiAocmVwZWF0ZXJfcmlnaHQpCisgICAgbWFrZVJlcGVhdGVyKCJyaWdodCIsIHRyZWUsIHB0LCBidWZmZXJfY2VsbCwgbGV2ZWwsCisgICAgICAgICAgICAgICAgIHdpcmVfbGVuZ3RoX3JpZ2h0LCBwaW5fY2FwX3JpZ2h0LCBmYW5vdXRfcmlnaHQsIGxvYWRzX3JpZ2h0KTsKKworICAvLyBVcGRhdGUgYWZ0ZXIgbGVmdC9yaWdodCByZXBlYXRlcnMgYXJlIGluc2VydGVkLgorICB3aXJlX2xlbmd0aCA9IHdpcmVfbGVuZ3RoX2xlZnQgKyB3aXJlX2xlbmd0aF9yaWdodDsKKyAgcGluX2NhcCA9IHBpbl9jYXBfbGVmdCArIHBpbl9jYXBfcmlnaHQ7CisgIGZhbm91dCA9IGZhbm91dF9sZWZ0ICsgZmFub3V0X3JpZ2h0OworCisgIC8vIFVuaW9uIGxlZnQvcmlnaHQgbG9hZCBwaW5zLgorICBmb3IgKFBpbiAqbG9hZF9waW4gOiBsb2Fkc19sZWZ0KQorICAgIGxvYWRfcGlucy5wdXNoX2JhY2sobG9hZF9waW4pOworICBmb3IgKFBpbiAqbG9hZF9waW4gOiBsb2Fkc19yaWdodCkKKyAgICBsb2FkX3BpbnMucHVzaF9iYWNrKGxvYWRfcGluKTsKKworICAvLyBTdGVpbmVyIHB0IHBpbiBpcyB0aGUgbmV0IGRyaXZlciBpZiBwcmV2X3B0IGlzIG51bGwuCisgIGlmIChwcmV2X3B0ICE9IFN0ZWluZXJUcmVlOjpudWxsX3B0KSB7CisgICAgY29uc3QgUGluU2VxICpwdF9waW5zID0gdHJlZS0+cGlucyhwdCk7CisgICAgaWYgKHB0X3BpbnMpIHsKKyAgICAgIGZvciAoUGluICpsb2FkX3BpbiA6ICpwdF9waW5zKSB7CisgICAgICAgIFBvaW50IGxvYWRfbG9jID0gZGJfbmV0d29ya18tPmxvY2F0aW9uKGxvYWRfcGluKTsKKyAgICAgICAgaW50IGxvYWRfZGlzdCA9IFBvaW50OjptYW5oYXR0YW5EaXN0YW5jZShsb2FkX2xvYywgcHRfbG9jKTsKKyAgICAgICAgZGVidWdQcmludChsb2dnZXJfLCBSU1osICJyZXBhaXJfbmV0IiwgMiwgIns6e31zfWxvYWQge30gKHt9IHt9KSBkaXN0PXt9IiwKKyAgICAgICAgICAgICAgICAgICAiIiwgbGV2ZWwsCisgICAgICAgICAgICAgICAgICAgc2RjX25ldHdvcmtfLT5wYXRoTmFtZShsb2FkX3BpbiksCisgICAgICAgICAgICAgICAgICAgdW5pdHNfLT5kaXN0YW5jZVVuaXQoKS0+YXNTdHJpbmcoZGJ1VG9NZXRlcnMobG9hZF9sb2MuZ2V0WCgpKSwgMSksCisgICAgICAgICAgICAgICAgICAgdW5pdHNfLT5kaXN0YW5jZVVuaXQoKS0+YXNTdHJpbmcoZGJ1VG9NZXRlcnMobG9hZF9sb2MuZ2V0WSgpKSwgMSksCisgICAgICAgICAgICAgICAgICAgdW5pdHNfLT5kaXN0YW5jZVVuaXQoKS0+YXNTdHJpbmcoZGJ1VG9NZXRlcnMobG9hZF9kaXN0KSwgMSkpOworICAgICAgICBMaWJlcnR5UG9ydCAqbG9hZF9wb3J0ID0gbmV0d29ya18tPmxpYmVydHlQb3J0KGxvYWRfcGluKTsKKyAgICAgICAgaWYgKGxvYWRfcG9ydCkgeworICAgICAgICAgIHBpbl9jYXAgKz0gbG9hZF9wb3J0LT5jYXBhY2l0YW5jZSgpOworICAgICAgICAgIGZhbm91dCArPSBwb3J0RmFub3V0TG9hZChsb2FkX3BvcnQpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICBmYW5vdXQgKz0gMTsKKyAgICAgICAgbG9hZF9waW5zLnB1c2hfYmFjayhsb2FkX3Bpbik7CisgICAgICB9CisgICAgfQorCisgICAgUG9pbnQgcHJldl9sb2MgPSB0cmVlLT5sb2NhdGlvbihwcmV2X3B0KTsKKyAgICBpbnQgbGVuZ3RoID0gUG9pbnQ6Om1hbmhhdHRhbkRpc3RhbmNlKHByZXZfbG9jLCBwdF9sb2MpOworICAgIHdpcmVfbGVuZ3RoICs9IGxlbmd0aDsKKyAgICAvLyBCYWNrIHVwIGZyb20gcHQgdG8gcHJldl9wdCBhZGRpbmcgcmVwZWF0ZXJzIGV2ZXJ5IG1heF9sZW5ndGguCisgICAgaW50IHByZXZfeCA9IHByZXZfbG9jLmdldFgoKTsKKyAgICBpbnQgcHJldl95ID0gcHJldl9sb2MuZ2V0WSgpOworICAgIGRlYnVnUHJpbnQobG9nZ2VyXywgUlNaLCAicmVwYWlyX25ldCIsIDMsICJ7Ont9c313bD17fSBsPXt9IiwKKyAgICAgICAgICAgICAgICIiLCBsZXZlbCwKKyAgICAgICAgICAgICAgIHVuaXRzXy0+ZGlzdGFuY2VVbml0KCktPmFzU3RyaW5nKGRidVRvTWV0ZXJzKHdpcmVfbGVuZ3RoKSwgMSksCisgICAgICAgICAgICAgICB1bml0c18tPmRpc3RhbmNlVW5pdCgpLT5hc1N0cmluZyhkYnVUb01ldGVycyhsZW5ndGgpLCAxKSk7CisgICAgd2lyZV9sZW5ndGgxID0gZGJ1VG9NZXRlcnMod2lyZV9sZW5ndGgpOworICAgIGxvYWRfY2FwID0gcGluX2NhcCArIHdpcmVfbGVuZ3RoMSAqIHdpcmVfY2FwOworCisgICAgYnVmZmVyX2NlbGwgPSBmaW5kVGFyZ2V0Q2VsbChidWZmZXJfbG93ZXN0X2RyaXZlXywgbG9hZF9jYXAsIGZhbHNlKTsKKyAgICBidWZmZXJfY2VsbC0+YnVmZmVyUG9ydHMoaW5wdXQsIGJ1ZmZlcl9vdXRwdXQpOworICAgIHJfYnVmZmVyID0gYnVmZmVyX291dHB1dC0+ZHJpdmVSZXNpc3RhbmNlKCk7CisgICAgcl9kcnYgPSBkcml2ZVJlc2lzdGFuY2UoZHJ2cl9waW4pOworICAgIHJfZHJ2ciA9IG1heChyX2Rydiwgcl9idWZmZXIpOworICAgIGxvYWRfc2xldyA9IChyX2RydnIgKyB3aXJlX2xlbmd0aDEgKiB3aXJlX3JlcykgKiBsb2FkX2NhcCAqIGtfdGhyZXNob2xkOworICAgIGRlYnVnUHJpbnQobG9nZ2VyXywgUlNaLCAicmVwYWlyX25ldCIsIDMsICJ7Ont9c31sb2FkX3NsZXc9e30gcl9kcnZyPXt9IHJfYnVmZmVyPXt9IiwKKyAgICAgICAgICAgICAgICIiLCBsZXZlbCwKKyAgICAgICAgICAgICAgIGRlbGF5QXNTdHJpbmcobG9hZF9zbGV3LCB0aGlzLCAzKSwKKyAgICAgICAgICAgICAgIHVuaXRzXy0+cmVzaXN0YW5jZVVuaXQoKS0+YXNTdHJpbmcocl9kcnYsIDMpLAorICAgICAgICAgICAgICAgdW5pdHNfLT5yZXNpc3RhbmNlVW5pdCgpLT5hc1N0cmluZyhyX2J1ZmZlciwgMykpOworCisgICAgd2hpbGUgKChtYXhfbGVuZ3RoID4gMCAmJiB3aXJlX2xlbmd0aCA+IG1heF9sZW5ndGgpCisgICAgICAgICAgIHx8ICh3aXJlX2NhcCA+IDAuMAorICAgICAgICAgICAgICAgLy8gQ2Fubm90IGZpeCBtYXggY2FwIHZpb2xhdGlvbnMgZnJvbSBwaW4gY2FwIGJ5IHNob3J0ZW5pbmcgd2lyZS4KKyAgICAgICAgICAgICAgICYmIHBpbl9jYXAgPCBtYXhfY2FwCisgICAgICAgICAgICAgICAmJiBsb2FkX2NhcCA+IG1heF9jYXApCisgICAgICAgICAgIHx8IGxvYWRfc2xldyA+IG1heF9sb2FkX3NsZXcpIHsKKyAgICAgIC8vIE1ha2UgdGhlIHdpcmUgYSBiaXQgc2hvcnRlciB0aGFuIG5lY2Vzc2FyeSB0byBhbGxvdyBmb3IKKyAgICAgIC8vIG9mZnNldCBmcm9tIGluc3RhbmNlIG9yaWdpbiB0byBwaW4gYW5kIGRldGFpbGVkIHBsYWNlbWVudCBtb3ZlbWVudC4KKyAgICAgIHN0YXRpYyBkb3VibGUgbGVuZ3RoX21hcmdpbiA9IC4wNTsKKyAgICAgIGJvb2wgc3BsaXRfd2lyZSA9IGZhbHNlOworICAgICAgaW50IHNwbGl0X2xlbmd0aCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCk7CisgICAgICBpZiAobWF4X2xlbmd0aCA+IDAgJiYgd2lyZV9sZW5ndGggPiBtYXhfbGVuZ3RoKSB7CisgICAgICAgIHNwbGl0X2xlbmd0aCA9IG1pbihzcGxpdF9sZW5ndGgsIG1heF9sZW5ndGgpOworICAgICAgICBzcGxpdF93aXJlID0gdHJ1ZTsKKyAgICAgIH0KKyAgICAgIGlmICh3aXJlX2NhcCA+IDAuMAorICAgICAgICAgICYmIHBpbl9jYXAgPCBtYXhfY2FwCisgICAgICAgICAgJiYgbG9hZF9jYXAgPiBtYXhfY2FwKSB7CisgICAgICAgIHNwbGl0X2xlbmd0aCA9IG1pbihzcGxpdF9sZW5ndGgsIG1ldGVyc1RvRGJ1KChtYXhfY2FwIC0gcGluX2NhcCkgLyB3aXJlX2NhcCkpOworICAgICAgICBzcGxpdF93aXJlID0gdHJ1ZTsKKyAgICAgIH0KKyAgICAgIGlmIChsb2FkX3NsZXcgPiBtYXhfbG9hZF9zbGV3CisgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB6ZXJvIGxlbmd0aCB3aXJlIG1lZXRzIG1heCBzbGV3LgorICAgICAgICAgICYmIHJfZHJ2cipwaW5fY2FwKmtfdGhyZXNob2xkIDwgbWF4X2xvYWRfc2xldykgeworICAgICAgICAvLyBVc2luZyBlbG1vcmUgZGVsYXkgdG8gYXBwcm94aW1hdGUgd2lyZQorICAgICAgICAvLyBsb2FkX3NsZXcgPSAoUmRydnIgKyBMKlJ3aXJlKSAqIChMKkN3aXJlICsgQ3BpbikgKiBrX3RocmVzaG9sZAorICAgICAgICAvLyBTZXR0aW5nIHRoaXMgdG8gbWF4X3NsZXcgaXMgYSBxdWFkcmF0aWMgaW4gTAorICAgICAgICAvLyBMXjIqUndpcmUqQ3dpcmUgKyBMKihSZHJ2cipDd2lyZSArIFJ3aXJlKkNwaW4pICsgUmRydnIqQ3BpbiAtIG1heF9zbGV3L2tfdGhyZXNob2xkCisgICAgICAgIC8vIFNvbHZlIHVzaW5nIHF1YWRyYWRpYyBlcW4gZm9yIEwuCisgICAgICAgIGZsb2F0IGEgPSB3aXJlX3JlcyAqIHdpcmVfY2FwOworICAgICAgICBmbG9hdCBiID0gcl9kcnZyICogd2lyZV9jYXAgKyB3aXJlX3JlcyAqIHBpbl9jYXA7CisgICAgICAgIGZsb2F0IGMgPSByX2RydnIgKiBwaW5fY2FwIC0gbWF4X2xvYWRfc2xldyAvIGtfdGhyZXNob2xkOworICAgICAgICBmbG9hdCBsID0gKC1iICsgc3FydChiKmIgLSA0ICogYSAqIGMpKSAvICgyICogYSk7CisgICAgICAgIGlmIChsID4gMC4wKSB7CisgICAgICAgICAgc3BsaXRfbGVuZ3RoID0gbWluKHNwbGl0X2xlbmd0aCwgbWV0ZXJzVG9EYnUobCkpOworICAgICAgICAgIHNwbGl0X3dpcmUgPSB0cnVlOworICAgICAgICB9CisgICAgICB9CisgICAgICBpZiAoc3BsaXRfd2lyZSkgeworICAgICAgICAvLyBEaXN0YW5jZSBmcm9tIHB0IHRvIHJlcGVhdGVyIGJhY2t3YXJkIHRvd2FyZCBwcmV2X3B0LgorICAgICAgICBkb3VibGUgYnVmX2Rpc3QgPSBsZW5ndGggLSAod2lyZV9sZW5ndGggLSBzcGxpdF9sZW5ndGggKiAoMS4wIC0gbGVuZ3RoX21hcmdpbikpOworICAgICAgICBkb3VibGUgZHggPSBwcmV2X3ggLSBwdF94OworICAgICAgICBkb3VibGUgZHkgPSBwcmV2X3kgLSBwdF95OworICAgICAgICBkb3VibGUgZCA9IChsZW5ndGggPT0gMCkgPyAwLjAgOiBidWZfZGlzdCAvIGxlbmd0aDsKKyAgICAgICAgaW50IGJ1Zl94ID0gcHRfeCArIGQgKiBkeDsKKyAgICAgICAgaW50IGJ1Zl95ID0gcHRfeSArIGQgKiBkeTsKKyAgICAgICAgbWFrZVJlcGVhdGVyKCJ3aXJlIiwgYnVmX3gsIGJ1Zl95LCBidWZmZXJfbG93ZXN0X2RyaXZlXywgbGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICB3aXJlX2xlbmd0aCwgcGluX2NhcCwgZmFub3V0LCBsb2FkX3BpbnMpOworICAgICAgICAvLyBVcGRhdGUgZm9yIHRoZSBuZXh0IHJvdW5kLgorICAgICAgICBsZW5ndGggLT0gYnVmX2Rpc3Q7CisgICAgICAgIHdpcmVfbGVuZ3RoID0gbGVuZ3RoOworICAgICAgICBwdF94ID0gYnVmX3g7CisgICAgICAgIHB0X3kgPSBidWZfeTsKKworICAgICAgICB3aXJlX2xlbmd0aDEgPSBkYnVUb01ldGVycyh3aXJlX2xlbmd0aCk7CisgICAgICAgIGxvYWRfY2FwID0gcGluX2NhcCArIHdpcmVfbGVuZ3RoMSAqIHdpcmVfY2FwOworICAgICAgICBsb2FkX3NsZXcgPSAocl9kcnZyICsgd2lyZV9sZW5ndGgxICogd2lyZV9yZXMpICogbG9hZF9jYXAgKiBrX3RocmVzaG9sZDsKKyAgICAgICAgZGVidWdQcmludChsb2dnZXJfLCBSU1osICJyZXBhaXJfbmV0IiwgMywgIns6e31zfWxvYWRfc2xldz17fSIsCisgICAgICAgICAgICAgICAgICAgIiIsIGxldmVsLAorICAgICAgICAgICAgICAgICAgIGRlbGF5QXNTdHJpbmcobG9hZF9zbGV3LCB0aGlzLCAzKSk7CisgICAgICAgIGRlYnVnUHJpbnQobG9nZ2VyXywgUlNaLCAicmVwYWlyX25ldCIsIDMsICJ7Ont9c313bD17fSBsPXt9IiwKKyAgICAgICAgICAgICAgICAgICAiIiwgbGV2ZWwsCisgICAgICAgICAgICAgICAgICAgdW5pdHNfLT5kaXN0YW5jZVVuaXQoKS0+YXNTdHJpbmcoZGJ1VG9NZXRlcnMod2lyZV9sZW5ndGgpLCAxKSwKKyAgICAgICAgICAgICAgICAgICB1bml0c18tPmRpc3RhbmNlVW5pdCgpLT5hc1N0cmluZyhkYnVUb01ldGVycyhsZW5ndGgpLCAxKSk7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIGJyZWFrOworICAgIH0KKyAgfQorfQorCit2b2lkCitSZXNpemVyOjptYWtlUmVwZWF0ZXIoY29uc3QgY2hhciAqd2hlcmUsCisgICAgICAgICAgICAgICAgICAgICAgU3RlaW5lclRyZWUgKnRyZWUsCisgICAgICAgICAgICAgICAgICAgICAgU3RlaW5lclB0IHB0LAorICAgICAgICAgICAgICAgICAgICAgIExpYmVydHlDZWxsICpidWZmZXJfY2VsbCwKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgbGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgaW50ICZ3aXJlX2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICBmbG9hdCAmcGluX2NhcCwKKyAgICAgICAgICAgICAgICAgICAgICBmbG9hdCAmZmFub3V0LAorICAgICAgICAgICAgICAgICAgICAgIFBpblNlcSAmbG9hZF9waW5zKQoreworICBQb2ludCBwdF9sb2MgPSB0cmVlLT5sb2NhdGlvbihwdCk7CisgIG1ha2VSZXBlYXRlcih3aGVyZSwgcHRfbG9jLmdldFgoKSwgcHRfbG9jLmdldFkoKSwgYnVmZmVyX2NlbGwsIGxldmVsLAorICAgICAgICAgICAgICAgd2lyZV9sZW5ndGgsIHBpbl9jYXAsIGZhbm91dCwgbG9hZF9waW5zKTsKK30KKwordm9pZAorUmVzaXplcjo6bWFrZVJlcGVhdGVyKGNvbnN0IGNoYXIgKndoZXJlLAorICAgICAgICAgICAgICAgICAgICAgIGludCB4LAorICAgICAgICAgICAgICAgICAgICAgIGludCB5LAorICAgICAgICAgICAgICAgICAgICAgIExpYmVydHlDZWxsICpidWZmZXJfY2VsbCwKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgbGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgaW50ICZ3aXJlX2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICBmbG9hdCAmcGluX2NhcCwKKyAgICAgICAgICAgICAgICAgICAgICBmbG9hdCAmZmFub3V0LAorICAgICAgICAgICAgICAgICAgICAgIFBpblNlcSAmbG9hZF9waW5zKQoreworICBMaWJlcnR5UG9ydCAqYnVmZmVyX2lucHV0X3BvcnQsICpidWZmZXJfb3V0cHV0X3BvcnQ7CisgIGJ1ZmZlcl9jZWxsLT5idWZmZXJQb3J0cyhidWZmZXJfaW5wdXRfcG9ydCwgYnVmZmVyX291dHB1dF9wb3J0KTsKKworICBzdHJpbmcgYnVmZmVyX25hbWUgPSBtYWtlVW5pcXVlSW5zdE5hbWUoInJlcGVhdGVyIik7CisgIGRlYnVnUHJpbnQobG9nZ2VyXywgUlNaLCAicmVwYWlyX25ldCIsIDIsICJ7Ont9c317fSB7fSAoe30ge30pIiwKKyAgICAgICAgICAgICAiIiwgbGV2ZWwsCisgICAgICAgICAgICAgd2hlcmUsCisgICAgICAgICAgICAgYnVmZmVyX25hbWUuY19zdHIoKSwKKyAgICAgICAgICAgICB1bml0c18tPmRpc3RhbmNlVW5pdCgpLT5hc1N0cmluZyhkYnVUb01ldGVycyh4KSwgMSksCisgICAgICAgICAgICAgdW5pdHNfLT5kaXN0YW5jZVVuaXQoKS0+YXNTdHJpbmcoZGJ1VG9NZXRlcnMoeSksIDEpKTsKKworICAvLyBJbnNlcnRpbmcgYSBidWZmZXIgaXMgY29tcGxpY2F0ZWQgYnkgdGhlIGZhY3QgdGhhdCB2ZXJpbG9nIG5ldGxpc3RzCisgIC8vIHVzZSB0aGUgbmV0IG5hbWUgZm9yIGlucHV0IGFuZCBvdXRwdXQgcG9ydHMuIFRoaXMgbWVhbnMgdGhlIHBvcnRzCisgIC8vIGNhbm5vdCBiZSBtb3ZlZCB0byBhIGRpZmZlcmVudCBuZXQuCisKKyAgLy8gVGhpcyBjYW5ub3QgZGVwZW5kIG9uIHRoZSBuZXQgaW4gY2FsbGVyIGJlY2F1c2UgdGhlIGJ1ZmZlciBtYXkgYmUgaW5zZXJ0ZWQKKyAgLy8gYmV0d2VlbiB0aGUgZHJpdmVyIGFuZCB0aGUgbG9hZHMgY2hhbmdpbmcgdGhlIG5ldCBhcyB0aGUgcmVwYWlyIHdvcmtzIGl0cworICAvLyB3YXkgZnJvbSB0aGUgbG9hZHMgdG8gdGhlIGRyaXZlci4KKworICBOZXQgKm5ldCA9IG51bGxwdHIsICppbl9uZXQsICpvdXRfbmV0OworICBib29sIGhhdmVfb3V0cHV0X3BvcnRfbG9hZCA9IGZhbHNlOworICBmb3IgKFBpbiAqcGluIDogbG9hZF9waW5zKSB7CisgICAgaWYgKG5ldHdvcmtfLT5pc1RvcExldmVsUG9ydChwaW4pKSB7CisgICAgICBuZXQgPSBuZXR3b3JrXy0+bmV0KG5ldHdvcmtfLT50ZXJtKHBpbikpOworICAgICAgaWYgKG5ldHdvcmtfLT5kaXJlY3Rpb24ocGluKS0+aXNBbnlPdXRwdXQoKSkgeworICAgICAgICBoYXZlX291dHB1dF9wb3J0X2xvYWQgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgICAgbmV0ID0gbmV0d29ya18tPm5ldChwaW4pOworICB9CisgIEluc3RhbmNlICpwYXJlbnQgPSBkYl9uZXR3b3JrXy0+dG9wSW5zdGFuY2UoKTsKKworICAvLyBJZiB0aGUgbmV0IGlzIGRyaXZlbiBieSBhbiBpbnB1dCBwb3J0LAorICAvLyB1c2UgdGhlIG5ldCBhcyB0aGUgcmVwZWF0ZXIgaW5wdXQgbmV0IHNvIHRoZSBwb3J0IHN0YXlzIGNvbm5lY3RlZCB0byBpdC4KKyAgaWYgKGhhc0lucHV0UG9ydChuZXQpCisgICAgICB8fCAhaGF2ZV9vdXRwdXRfcG9ydF9sb2FkKSB7CisgICAgaW5fbmV0ID0gbmV0OworICAgIG91dF9uZXQgPSBtYWtlVW5pcXVlTmV0KCk7CisgICAgLy8gQ29weSBzaWduYWwgdHlwZSB0byBuZXcgbmV0LgorICAgIGRiTmV0ICpvdXRfbmV0X2RiID0gZGJfbmV0d29ya18tPnN0YVRvRGIob3V0X25ldCk7CisgICAgZGJOZXQgKmluX25ldF9kYiA9IGRiX25ldHdvcmtfLT5zdGFUb0RiKGluX25ldCk7CisgICAgb3V0X25ldF9kYi0+c2V0U2lnVHlwZShpbl9uZXRfZGItPmdldFNpZ1R5cGUoKSk7CisKKyAgICAvLyBNb3ZlIGxvYWQgcGlucyB0byBvdXRfbmV0LgorICAgIGZvciAoUGluICpwaW4gOiBsb2FkX3BpbnMpIHsKKyAgICAgIFBvcnQgKnBvcnQgPSBuZXR3b3JrXy0+cG9ydChwaW4pOworICAgICAgSW5zdGFuY2UgKmluc3QgPSBuZXR3b3JrXy0+aW5zdGFuY2UocGluKTsKKyAgICAgIHN0YV8tPmRpc2Nvbm5lY3RQaW4ocGluKTsKKyAgICAgIHN0YV8tPmNvbm5lY3RQaW4oaW5zdCwgcG9ydCwgb3V0X25ldCk7CisgICAgfQorICB9CisgIGVsc2UgeworICAgIC8vIE9uZSBvZiB0aGUgbG9hZHMgaXMgYW4gb3V0cHV0IHBvcnQuCisgICAgLy8gVXNlIHRoZSBuZXQgYXMgdGhlIHJlcGVhdGVyIG91dHB1dCBuZXQgc28gdGhlIHBvcnQgc3RheXMgY29ubmVjdGVkIHRvIGl0LgorICAgIGluX25ldCA9IG1ha2VVbmlxdWVOZXQoKTsKKyAgICBvdXRfbmV0ID0gbmV0OworICAgIC8vIENvcHkgc2lnbmFsIHR5cGUgdG8gbmV3IG5ldC4KKyAgICBkYk5ldCAqb3V0X25ldF9kYiA9IGRiX25ldHdvcmtfLT5zdGFUb0RiKG91dF9uZXQpOworICAgIGRiTmV0ICppbl9uZXRfZGIgPSBkYl9uZXR3b3JrXy0+c3RhVG9EYihpbl9uZXQpOworICAgIGluX25ldF9kYi0+c2V0U2lnVHlwZShvdXRfbmV0X2RiLT5nZXRTaWdUeXBlKCkpOworCisgICAgLy8gTW92ZSBub24tcmVwZWF0ZXIgbG9hZCBwaW5zIHRvIGluX25ldC4KKyAgICBQaW5TZXQgbG9hZF9waW5zMTsKKyAgICBmb3IgKFBpbiAqcGluIDogbG9hZF9waW5zKQorICAgICAgbG9hZF9waW5zMS5pbnNlcnQocGluKTsKKworICAgIE5ldFBpbkl0ZXJhdG9yICpwaW5faXRlciA9IG5ldHdvcmtfLT5waW5JdGVyYXRvcihvdXRfbmV0KTsKKyAgICB3aGlsZSAocGluX2l0ZXItPmhhc05leHQoKSkgeworICAgICAgUGluICpwaW4gPSBwaW5faXRlci0+bmV4dCgpOworICAgICAgaWYgKCFsb2FkX3BpbnMxLmhhc0tleShwaW4pKSB7CisgICAgICAgIFBvcnQgKnBvcnQgPSBuZXR3b3JrXy0+cG9ydChwaW4pOworICAgICAgICBJbnN0YW5jZSAqaW5zdCA9IG5ldHdvcmtfLT5pbnN0YW5jZShwaW4pOworICAgICAgICBzdGFfLT5kaXNjb25uZWN0UGluKHBpbik7CisgICAgICAgIHN0YV8tPmNvbm5lY3RQaW4oaW5zdCwgcG9ydCwgaW5fbmV0KTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBJbnN0YW5jZSAqYnVmZmVyID0gbWFrZUluc3RhbmNlKGJ1ZmZlcl9jZWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcl9uYW1lLmNfc3RyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50KTsKKyAgam91cm5hbE1ha2VCdWZmZXIoYnVmZmVyKTsKKyAgUG9pbnQgYnVmX2xvYyh4LCB5KTsKKyAgc2V0TG9jYXRpb24oYnVmZmVyLCBidWZfbG9jKTsKKyAgZGVzaWduQXJlYUluY3IoYXJlYShkYl9uZXR3b3JrXy0+Y2VsbChidWZmZXJfY2VsbCkpKTsKKyAgaW5zZXJ0ZWRfYnVmZmVyX2NvdW50XysrOworCisgIHN0YV8tPmNvbm5lY3RQaW4oYnVmZmVyLCBidWZmZXJfaW5wdXRfcG9ydCwgaW5fbmV0KTsKKyAgc3RhXy0+Y29ubmVjdFBpbihidWZmZXIsIGJ1ZmZlcl9vdXRwdXRfcG9ydCwgb3V0X25ldCk7CisKKyAgcGFyYXNpdGljc0ludmFsaWQoaW5fbmV0KTsKKyAgcGFyYXNpdGljc0ludmFsaWQob3V0X25ldCk7CisKKyAgLy8gUmVzaXplIHJlcGVhdGVyIGFzIHdlIGJhY2sgdXAgYnkgbGV2ZWxzLgorICBQaW4gKmRydnJfcGluID0gbmV0d29ya18tPmZpbmRQaW4oYnVmZmVyLCBidWZmZXJfb3V0cHV0X3BvcnQpOworICByZXNpemVUb1RhcmdldFNsZXcoZHJ2cl9waW4sIGZhbHNlKTsKKyAgYnVmZmVyX2NlbGwgPSBuZXR3b3JrXy0+bGliZXJ0eUNlbGwoYnVmZmVyKTsKKyAgYnVmZmVyX2NlbGwtPmJ1ZmZlclBvcnRzKGJ1ZmZlcl9pbnB1dF9wb3J0LCBidWZmZXJfb3V0cHV0X3BvcnQpOworCisgIFBpbiAqYnVmX2luX3BpbiA9IG5ldHdvcmtfLT5maW5kUGluKGJ1ZmZlciwgYnVmZmVyX2lucHV0X3BvcnQpOworICBsb2FkX3BpbnMuY2xlYXIoKTsKKyAgbG9hZF9waW5zLnB1c2hfYmFjayhidWZfaW5fcGluKTsKKyAgd2lyZV9sZW5ndGggPSAwOworICBwaW5fY2FwID0gYnVmZmVyX2lucHV0X3BvcnQtPmNhcGFjaXRhbmNlKCk7CisgIGZhbm91dCA9IHBvcnRGYW5vdXRMb2FkKGJ1ZmZlcl9pbnB1dF9wb3J0KTsKK30KKworYm9vbAorUmVzaXplcjo6aGFzSW5wdXRQb3J0KGNvbnN0IE5ldCAqbmV0KQoreworICBib29sIGhhc190b3BfbGV2ZWxfcG9ydCA9IGZhbHNlOworICBOZXRDb25uZWN0ZWRQaW5JdGVyYXRvciAqcGluX2l0ZXIgPSBuZXR3b3JrXy0+Y29ubmVjdGVkUGluSXRlcmF0b3IobmV0KTsKKyAgd2hpbGUgKHBpbl9pdGVyLT5oYXNOZXh0KCkpIHsKKyAgICBQaW4gKnBpbiA9IHBpbl9pdGVyLT5uZXh0KCk7CisgICAgaWYgKG5ldHdvcmtfLT5pc1RvcExldmVsUG9ydChwaW4pCisgICAgICAgICYmIG5ldHdvcmtfLT5kaXJlY3Rpb24ocGluKS0+aXNBbnlJbnB1dCgpKSB7CisgICAgICBoYXNfdG9wX2xldmVsX3BvcnQgPSB0cnVlOworICAgICAgYnJlYWs7CisgICAgfQorICB9CisgIGRlbGV0ZSBwaW5faXRlcjsKKyAgcmV0dXJuIGhhc190b3BfbGV2ZWxfcG9ydDsKK30KKworYm9vbAorUmVzaXplcjo6aGFzT3V0cHV0UG9ydChjb25zdCBOZXQgKm5ldCkKK3sKKyAgYm9vbCBoYXNfdG9wX2xldmVsX3BvcnQgPSBmYWxzZTsKKyAgTmV0Q29ubmVjdGVkUGluSXRlcmF0b3IgKnBpbl9pdGVyID0gbmV0d29ya18tPmNvbm5lY3RlZFBpbkl0ZXJhdG9yKG5ldCk7CisgIHdoaWxlIChwaW5faXRlci0+aGFzTmV4dCgpKSB7CisgICAgUGluICpwaW4gPSBwaW5faXRlci0+bmV4dCgpOworICAgIGlmIChuZXR3b3JrXy0+aXNUb3BMZXZlbFBvcnQocGluKQorICAgICAgICAmJiBuZXR3b3JrXy0+ZGlyZWN0aW9uKHBpbiktPmlzQW55T3V0cHV0KCkpIHsKKyAgICAgIGhhc190b3BfbGV2ZWxfcG9ydCA9IHRydWU7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgZGVsZXRlIHBpbl9pdGVyOworICByZXR1cm4gaGFzX3RvcF9sZXZlbF9wb3J0OworfQorCitib29sCitSZXNpemVyOjpoYXNQb3J0KGNvbnN0IE5ldCAqbmV0KQoreworICBib29sIGhhc190b3BfbGV2ZWxfcG9ydCA9IGZhbHNlOworICBOZXRDb25uZWN0ZWRQaW5JdGVyYXRvciAqcGluX2l0ZXIgPSBuZXR3b3JrXy0+Y29ubmVjdGVkUGluSXRlcmF0b3IobmV0KTsKKyAgd2hpbGUgKHBpbl9pdGVyLT5oYXNOZXh0KCkpIHsKKyAgICBQaW4gKnBpbiA9IHBpbl9pdGVyLT5uZXh0KCk7CisgICAgaWYgKG5ldHdvcmtfLT5pc1RvcExldmVsUG9ydChwaW4pKSB7CisgICAgICBoYXNfdG9wX2xldmVsX3BvcnQgPSB0cnVlOworICAgICAgYnJlYWs7CisgICAgfQorICB9CisgIGRlbGV0ZSBwaW5faXRlcjsKKyAgcmV0dXJuIGhhc190b3BfbGV2ZWxfcG9ydDsKK30KKworZmxvYXQKK1Jlc2l6ZXI6OmRyaXZlUmVzaXN0YW5jZShjb25zdCBQaW4gKmRydnJfcGluKQoreworICBpZiAobmV0d29ya18tPmlzVG9wTGV2ZWxQb3J0KGRydnJfcGluKSkgeworICAgIElucHV0RHJpdmUgKmRyaXZlID0gc2RjXy0+ZmluZElucHV0RHJpdmUobmV0d29ya18tPnBvcnQoZHJ2cl9waW4pKTsKKyAgICBpZiAoZHJpdmUpIHsKKyAgICAgIGZsb2F0IG1heF9yZXMgPSAwOworICAgICAgZm9yIChhdXRvIG1pbl9tYXggOiBNaW5NYXg6OnJhbmdlKCkpIHsKKyAgICAgICAgZm9yIChhdXRvIHJmIDogUmlzZUZhbGw6OnJhbmdlKCkpIHsKKyAgICAgICAgICBMaWJlcnR5Q2VsbCAqY2VsbDsKKyAgICAgICAgICBMaWJlcnR5UG9ydCAqZnJvbV9wb3J0OworICAgICAgICAgIGZsb2F0ICpmcm9tX3NsZXdzOworICAgICAgICAgIExpYmVydHlQb3J0ICp0b19wb3J0OworICAgICAgICAgIGRyaXZlLT5kcml2ZUNlbGwocmYsIG1pbl9tYXgsIGNlbGwsIGZyb21fcG9ydCwgZnJvbV9zbGV3cywgdG9fcG9ydCk7CisgICAgICAgICAgaWYgKHRvX3BvcnQpCisgICAgICAgICAgICBtYXhfcmVzID0gbWF4KG1heF9yZXMsIHRvX3BvcnQtPmRyaXZlUmVzaXN0YW5jZSgpKTsKKyAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGZsb2F0IHJlczsKKyAgICAgICAgICAgIGJvb2wgZXhpc3RzOworICAgICAgICAgICAgZHJpdmUtPmRyaXZlUmVzaXN0YW5jZShyZiwgbWluX21heCwgcmVzLCBleGlzdHMpOworICAgICAgICAgICAgbWF4X3JlcyA9IG1heChtYXhfcmVzLCByZXMpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgICAgcmV0dXJuIG1heF9yZXM7CisgICAgfQorICB9CisgIGVsc2UgeworICAgIExpYmVydHlQb3J0ICpkcnZyX3BvcnQgPSBuZXR3b3JrXy0+bGliZXJ0eVBvcnQoZHJ2cl9waW4pOworICAgIGlmIChkcnZyX3BvcnQpCisgICAgICByZXR1cm4gZHJ2cl9wb3J0LT5kcml2ZVJlc2lzdGFuY2UoKTsKKyAgfQorICByZXR1cm4gMC4wOworfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK3ZvaWQKK1Jlc2l6ZXI6OnJlc2l6ZVRvVGFyZ2V0U2xldygpCit7CisgIHJlc2l6ZV9jb3VudF8gPSAwOworICByZXNpemVkX211bHRpX291dHB1dF9pbnN0c18uY2xlYXIoKTsKKyAgaW5jcmVtZW50YWxQYXJhc2l0aWNzQmVnaW4oKTsKKyAgLy8gUmVzaXplIGluIHJldmVyc2UgbGV2ZWwgb3JkZXIuCisgIGZvciAoaW50IGkgPSBsZXZlbF9kcnZyX3ZlcnRpY2VzXy5zaXplKCkgLSAxOyBpID49IDA7IGktLSkgeworICAgIFZlcnRleCAqZHJ2ciA9IGxldmVsX2RydnJfdmVydGljZXNfW2ldOworICAgIFBpbiAqZHJ2cl9waW4gPSBkcnZyLT5waW4oKTsKKyAgICBOZXQgKm5ldCA9IG5ldHdvcmtfLT5uZXQoZHJ2cl9waW4pOworICAgIGlmIChuZXQKKyAgICAgICAgJiYgIWRydnItPmlzQ29uc3RhbnQoKQorICAgICAgICAmJiBoYXNGYW5vdXQoZHJ2cikKKyAgICAgICAgLy8gSGFuZHMgb2ZmIHRoZSBjbG9jayBuZXRzLgorICAgICAgICAmJiAhc3RhXy0+aXNDbG9jayhkcnZyX3BpbikKKyAgICAgICAgLy8gSGFuZHMgb2ZmIHNwZWNpYWwgbmV0cy4KKyAgICAgICAgJiYgIWRiX25ldHdvcmtfLT5pc1NwZWNpYWwobmV0KSkgeworICAgICAgcmVzaXplVG9UYXJnZXRTbGV3KGRydnJfcGluLCB0cnVlKTsKKyAgICAgIGlmIChvdmVyTWF4QXJlYSgpKSB7CisgICAgICAgIGxvZ2dlcl8tPmVycm9yKFJTWiwgMjQsICJNYXggdXRpbGl6YXRpb24gcmVhY2hlZC4iKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorICB9CisgIHVwZGF0ZVBhcmFzaXRpY3MoKTsKKyAgaW5jcmVtZW50YWxQYXJhc2l0aWNzRW5kKCk7CisKKyAgaWYgKHJlc2l6ZV9jb3VudF8gPiAwKQorICAgIGxvZ2dlcl8tPmluZm8oUlNaLCAyOSwgIlJlc2l6ZWQge30gaW5zdGFuY2VzLiIsIHJlc2l6ZV9jb3VudF8pOworfQorCitib29sCitSZXNpemVyOjpoYXNGYW5vdXQoVmVydGV4ICpkcnZyKQoreworICBWZXJ0ZXhPdXRFZGdlSXRlcmF0b3IgZWRnZV9pdGVyKGRydnIsIGdyYXBoXyk7CisgIHJldHVybiBlZGdlX2l0ZXIuaGFzTmV4dCgpOworfQorCit2b2lkCitSZXNpemVyOjptYWtlRXF1aXZDZWxscygpCit7CisgIExpYmVydHlMaWJyYXJ5U2VxIGxpYnM7CisgIExpYmVydHlMaWJyYXJ5SXRlcmF0b3IgKmxpYl9pdGVyID0gbmV0d29ya18tPmxpYmVydHlMaWJyYXJ5SXRlcmF0b3IoKTsKKyAgd2hpbGUgKGxpYl9pdGVyLT5oYXNOZXh0KCkpIHsKKyAgICBMaWJlcnR5TGlicmFyeSAqbGliID0gbGliX2l0ZXItPm5leHQoKTsKKyAgICAvLyBtYXNzaXZlIGtsdWRnZSB1bnRpbCBtYWtlRXF1aXZDZWxscyBpcyBmaXhlZCB0byBvbmx5IGluY2xkdWUgbGluayBjZWxscworICAgIExpYmVydHlDZWxsSXRlcmF0b3IgY2VsbF9pdGVyKGxpYik7CisgICAgaWYgKGNlbGxfaXRlci5oYXNOZXh0KCkpIHsKKyAgICAgIExpYmVydHlDZWxsICpjZWxsID0gY2VsbF9pdGVyLm5leHQoKTsKKyAgICAgIGlmIChpc0xpbmtDZWxsKGNlbGwpKQorICAgICAgICBsaWJzLnB1c2hfYmFjayhsaWIpOworICAgIH0KKyAgfQorICBkZWxldGUgbGliX2l0ZXI7CisgIHN0YV8tPm1ha2VFcXVpdkNlbGxzKCZsaWJzLCBudWxscHRyKTsKK30KKworc3RhdGljIGZsb2F0Cit0YXJnZXRMb2FkRGlzdChmbG9hdCBsb2FkX2NhcCwKKyAgICAgICAgICAgICAgIGZsb2F0IHRhcmdldF9sb2FkKQoreworICByZXR1cm4gYWJzKGxvYWRfY2FwIC0gdGFyZ2V0X2xvYWQpOworfQorCitib29sCitSZXNpemVyOjpyZXNpemVUb1RhcmdldFNsZXcoY29uc3QgUGluICpkcnZyX3BpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHVwZGF0ZV9jb3VudCkKK3sKKyAgSW5zdGFuY2UgKmluc3QgPSBuZXR3b3JrXy0+aW5zdGFuY2UoZHJ2cl9waW4pOworICBMaWJlcnR5Q2VsbCAqY2VsbCA9IG5ldHdvcmtfLT5saWJlcnR5Q2VsbChpbnN0KTsKKyAgaWYgKGNlbGwpIHsKKyAgICBib29sIHJldmlzaXRpbmdfaW5zdCA9IGZhbHNlOworICAgIGlmIChoYXNNdWx0aXBsZU91dHB1dHMoaW5zdCkpIHsKKyAgICAgIHJldmlzaXRpbmdfaW5zdCA9IHJlc2l6ZWRfbXVsdGlfb3V0cHV0X2luc3RzXy5oYXNLZXkoaW5zdCk7CisgICAgICBkZWJ1Z1ByaW50KGxvZ2dlcl8sIFJTWiwgInJlc2l6ZSIsIDIsICJtdWx0aXBsZSBvdXRwdXRze30iLAorICAgICAgICAgICAgICAgICByZXZpc2l0aW5nX2luc3QgPyAiIC0gcmV2aXNpdCIgOiAiIik7CisgICAgICByZXNpemVkX211bHRpX291dHB1dF9pbnN0c18uaW5zZXJ0KGluc3QpOworICAgIH0KKyAgICBlbnN1cmVXaXJlUGFyYXNpdGljKGRydnJfcGluKTsKKyAgICAvLyBJbmNsdWRlcyBuZXQgcGFyYXNpdGljIGNhcGFjaXRhbmNlLgorICAgIGZsb2F0IGxvYWRfY2FwID0gZ3JhcGhfZGVsYXlfY2FsY18tPmxvYWRDYXAoZHJ2cl9waW4sIHRndF9zbGV3X2RjYWxjX2FwXyk7CisgICAgLy8gRElORVNILUE6IGRlbGF5IGNlbGxzIHJlc2l6ZSBkaXNhYmxlZAorICAgIGlmIChsb2FkX2NhcCA+IDAuMDAgJiYgKHN0cm5jbXAoY2VsbC0+bmFtZSgpLCJza3kxMzBfZmRfc2NfaGRfX2Nsa2RseWJ1ZjRzMTVfMiIsMjYpICE9IDApKSB7CisgICAgICBMaWJlcnR5Q2VsbCAqdGFyZ2V0X2NlbGwgPSBmaW5kVGFyZ2V0Q2VsbChjZWxsLCBsb2FkX2NhcCwgcmV2aXNpdGluZ19pbnN0KTsKKyAgICAgIGlmICh0YXJnZXRfY2VsbCAhPSBjZWxsKSB7CisgICAgICAgIC8vcHJpbnRmKCJEaW5lc2gtQTogUmVzaXppbmcgOiAlcyA9PiAlcyAlcyBMb2FkX2NhcDogJWYgXG4iLHNkY19uZXR3b3JrXy0+cGF0aE5hbWUoZHJ2cl9waW4pLGNlbGwtPm5hbWUoKSx0YXJnZXRfY2VsbC0+bmFtZSgpLGxvYWRfY2FwKTsKKyAgICAgICAgZGVidWdQcmludChsb2dnZXJfLCBSU1osICJyZXNpemUiLCAyLCAie30ge30gLT4ge30iLAorICAgICAgICAgICAgICAgICAgIHNkY19uZXR3b3JrXy0+cGF0aE5hbWUoZHJ2cl9waW4pLAorICAgICAgICAgICAgICAgICAgIGNlbGwtPm5hbWUoKSwKKyAgICAgICAgICAgICAgICAgICB0YXJnZXRfY2VsbC0+bmFtZSgpKTsKKyAgICAgICAgaWYgKHJlcGxhY2VDZWxsKGluc3QsIHRhcmdldF9jZWxsLCB0cnVlKQorICAgICAgICAgICAgJiYgIXJldmlzaXRpbmdfaW5zdAorICAgICAgICAgICAgJiYgdXBkYXRlX2NvdW50KQorICAgICAgICAgIHJlc2l6ZV9jb3VudF8rKzsKKyAgICAgIH0KKyAgICB9CisgIH0KKyAgcmV0dXJuIGZhbHNlOworfQorCitMaWJlcnR5Q2VsbCAqCitSZXNpemVyOjpmaW5kVGFyZ2V0Q2VsbChMaWJlcnR5Q2VsbCAqY2VsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGxvYWRfY2FwLAorICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCByZXZpc2l0aW5nX2luc3QpCit7CisgIExpYmVydHlDZWxsICpiZXN0X2NlbGwgPSBjZWxsOworICBMaWJlcnR5Q2VsbFNlcSAqZXF1aXZfY2VsbHMgPSBzdGFfLT5lcXVpdkNlbGxzKGNlbGwpOworICBpZiAoZXF1aXZfY2VsbHMpIHsKKyAgICBib29sIGlzX2J1Zl9pbnYgPSBjZWxsLT5pc0J1ZmZlcigpIHx8IGNlbGwtPmlzSW52ZXJ0ZXIoKTsKKyAgICBmbG9hdCB0YXJnZXRfbG9hZCA9ICgqdGFyZ2V0X2xvYWRfbWFwXylbY2VsbF07CisgICAgZmxvYXQgYmVzdF9sb2FkID0gdGFyZ2V0X2xvYWQ7CisgICAgZmxvYXQgYmVzdF9kaXN0ID0gdGFyZ2V0TG9hZERpc3QobG9hZF9jYXAsIHRhcmdldF9sb2FkKTsKKyAgICBmbG9hdCBiZXN0X2RlbGF5ID0gaXNfYnVmX2ludgorICAgICAgPyBidWZmZXJEZWxheShjZWxsLCBsb2FkX2NhcCwgdGd0X3NsZXdfZGNhbGNfYXBfKQorICAgICAgOiAwLjA7CisgICAgZGVidWdQcmludChsb2dnZXJfLCBSU1osICJyZXNpemUiLCAzLCAie30gbG9hZCBjYXAge30gZGlzdD17Oi4yZX0gZGVsYXk9e30iLAorICAgICAgICAgICAgICAgY2VsbC0+bmFtZSgpLAorICAgICAgICAgICAgICAgdW5pdHNfLT5jYXBhY2l0YW5jZVVuaXQoKS0+YXNTdHJpbmcobG9hZF9jYXApLAorICAgICAgICAgICAgICAgYmVzdF9kaXN0LAorICAgICAgICAgICAgICAgZGVsYXlBc1N0cmluZyhiZXN0X2RlbGF5LCBzdGFfLCAzKSk7CisgICAgZm9yIChMaWJlcnR5Q2VsbCAqdGFyZ2V0X2NlbGwgOiAqZXF1aXZfY2VsbHMpIHsKKyAgICAgIGlmICghZG9udFVzZSh0YXJnZXRfY2VsbCkKKyAgICAgICAgICAmJiBpc0xpbmtDZWxsKHRhcmdldF9jZWxsKSkgeworICAgICAgICBmbG9hdCB0YXJnZXRfbG9hZCA9ICgqdGFyZ2V0X2xvYWRfbWFwXylbdGFyZ2V0X2NlbGxdOworICAgICAgICBmbG9hdCBkZWxheSA9IGlzX2J1Zl9pbnYKKyAgICAgICAgICA/IGJ1ZmZlckRlbGF5KHRhcmdldF9jZWxsLCBsb2FkX2NhcCwgdGd0X3NsZXdfZGNhbGNfYXBfKQorICAgICAgICAgIDogMC4wOworICAgICAgICBmbG9hdCBkaXN0ID0gdGFyZ2V0TG9hZERpc3QobG9hZF9jYXAsIHRhcmdldF9sb2FkKTsKKyAgICAgICAgZGVidWdQcmludChsb2dnZXJfLCBSU1osICJyZXNpemUiLCAzLCAiIHt9IGRpc3Q9ezouMmV9IGRlbGF5PXt9IiwKKyAgICAgICAgICAgICAgICAgICB0YXJnZXRfY2VsbC0+bmFtZSgpLAorICAgICAgICAgICAgICAgICAgIGRpc3QsCisgICAgICAgICAgICAgICAgICAgZGVsYXlBc1N0cmluZyhkZWxheSwgc3RhXywgMykpOworICAgICAgICBpZiAoaXNfYnVmX2ludgorICAgICAgICAgICAgLy8gTGlicmFyeSBtYXkgaGF2ZSAiZGVsYXkiIGJ1ZmZlcnMvaW52ZXJ0ZXJzIHRoYXQgYXJlCisgICAgICAgICAgICAvLyBmdW5jdGlvbmFsbHkgYnVmZmVycy9pbnZlcnRlcnMgYnV0IGhhdmUgYWRkaXRpb25hbAorICAgICAgICAgICAgLy8gaW50cmluc2ljIGRlbGF5LiBBY2NlcHQgd29yc2UgdGFyZ2V0IGxvYWQgbWF0Y2hpbmcgaWYKKyAgICAgICAgICAgIC8vIGRlbGF5IGlzIHJlZHVjZWQgdG8gYXZvaWQgdXNpbmcgdGhlbS4KKyAgICAgICAgICAgID8gKChkZWxheSA8IGJlc3RfZGVsYXkKKyAgICAgICAgICAgICAgICAmJiBkaXN0IDwgYmVzdF9kaXN0ICogMS4xKQorICAgICAgICAgICAgICAgfHwgKGRpc3QgPCBiZXN0X2Rpc3QKKyAgICAgICAgICAgICAgICAgICAmJiBkZWxheSA8IGJlc3RfZGVsYXkgKiAxLjEpKQorICAgICAgICAgICAgOiBkaXN0IDwgYmVzdF9kaXN0CisgICAgICAgICAgICAvLyBJZiB0aGUgaW5zdGFuY2UgaGFzIG11bHRpcGxlIG91dHB1dHMgKGdlbmVyYWxseSBhIHJlZ2lzdGVyIFEvUU4pCisgICAgICAgICAgICAvLyBvbmx5IGFsbG93IHVwc2l6aW5nIGFmdGVyIHRoZSBmaXJzdCBwaW4gaXMgdmlzaXRlZC4KKyAgICAgICAgICAgICYmICghcmV2aXNpdGluZ19pbnN0CisgICAgICAgICAgICAgICAgfHwgdGFyZ2V0X2xvYWQgPiBiZXN0X2xvYWQpKSB7CisgICAgICAgICAgYmVzdF9jZWxsID0gdGFyZ2V0X2NlbGw7CisgICAgICAgICAgYmVzdF9kaXN0ID0gZGlzdDsKKyAgICAgICAgICBiZXN0X2xvYWQgPSB0YXJnZXRfbG9hZDsKKyAgICAgICAgICBiZXN0X2RlbGF5ID0gZGVsYXk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKyAgcmV0dXJuIGJlc3RfY2VsbDsKK30KKworLy8gUmVwbGFjZSBMRUYgd2l0aCBMRUYgc28gcG9ydHMgc3RheSBhbGlnbmVkIGluIGluc3RhbmNlLgorYm9vbAorUmVzaXplcjo6cmVwbGFjZUNlbGwoSW5zdGFuY2UgKmluc3QsCisgICAgICAgICAgICAgICAgICAgICBMaWJlcnR5Q2VsbCAqcmVwbGFjZW1lbnQsCisgICAgICAgICAgICAgICAgICAgICBib29sIGpvdXJuYWwpCit7CisgIGNvbnN0IGNoYXIgKnJlcGxhY2VtZW50X25hbWUgPSByZXBsYWNlbWVudC0+bmFtZSgpOworICBkYk1hc3RlciAqcmVwbGFjZW1lbnRfbWFzdGVyID0gZGJfLT5maW5kTWFzdGVyKHJlcGxhY2VtZW50X25hbWUpOworICBpZiAocmVwbGFjZW1lbnRfbWFzdGVyKSB7CisgICAgZGJJbnN0ICpkaW5zdCA9IGRiX25ldHdvcmtfLT5zdGFUb0RiKGluc3QpOworICAgIGRiTWFzdGVyICptYXN0ZXIgPSBkaW5zdC0+Z2V0TWFzdGVyKCk7CisgICAgZGVzaWduQXJlYUluY3IoLWFyZWEobWFzdGVyKSk7CisgICAgQ2VsbCAqcmVwbGFjZW1lbnRfY2VsbDEgPSBkYl9uZXR3b3JrXy0+ZGJUb1N0YShyZXBsYWNlbWVudF9tYXN0ZXIpOworICAgIGlmIChqb3VybmFsKQorICAgICAgam91cm5hbEluc3RSZXBsYWNlQ2VsbEJlZm9yZShpbnN0KTsKKyAgICBzdGFfLT5yZXBsYWNlQ2VsbChpbnN0LCByZXBsYWNlbWVudF9jZWxsMSk7CisgICAgZGVzaWduQXJlYUluY3IoYXJlYShyZXBsYWNlbWVudF9tYXN0ZXIpKTsKKworICAgIC8vIEludmFsaWRhdGUgZXN0aW1hdGVkIHBhcmFzaXRpY3Mgb24gYWxsIGluc3RhbmNlIHBpbnMuCisgICAgLy8gSW5wdXQgbmV0cyBjaGFuZ2UgcGluIGNhcCwgb3V0cHV0cyBjaGFuZ2UgbG9jYXRpb24gKHNsaWdodGx5KS4KKyAgICBpZiAoaGF2ZUVzdGltYXRlZFBhcmFzaXRpY3MoKSkgeworICAgICAgSW5zdGFuY2VQaW5JdGVyYXRvciAqcGluX2l0ZXIgPSBuZXR3b3JrXy0+cGluSXRlcmF0b3IoaW5zdCk7CisgICAgICB3aGlsZSAocGluX2l0ZXItPmhhc05leHQoKSkgeworICAgICAgICBjb25zdCBQaW4gKnBpbiA9IHBpbl9pdGVyLT5uZXh0KCk7CisgICAgICAgIGNvbnN0IE5ldCAqbmV0ID0gbmV0d29ya18tPm5ldChwaW4pOworICAgICAgICBpZiAobmV0KQorICAgICAgICAgIHBhcmFzaXRpY3NJbnZhbGlkKG5ldCk7CisgICAgICB9CisgICAgICBkZWxldGUgcGluX2l0ZXI7CisgICAgfQorICAgIHJldHVybiB0cnVlOworICB9CisgIHJldHVybiBmYWxzZTsKK30KKworYm9vbAorUmVzaXplcjo6aGFzTXVsdGlwbGVPdXRwdXRzKGNvbnN0IEluc3RhbmNlICppbnN0KQoreworICBpbnQgb3V0cHV0X2NvdW50ID0gMDsKKyAgSW5zdGFuY2VQaW5JdGVyYXRvciAqcGluX2l0ZXIgPSBuZXR3b3JrXy0+cGluSXRlcmF0b3IoaW5zdCk7CisgIHdoaWxlIChwaW5faXRlci0+aGFzTmV4dCgpKSB7CisgICAgY29uc3QgUGluICpwaW4gPSBwaW5faXRlci0+bmV4dCgpOworICAgIGlmIChuZXR3b3JrXy0+ZGlyZWN0aW9uKHBpbiktPmlzQW55T3V0cHV0KCkKKyAgICAgICAgJiYgbmV0d29ya18tPm5ldChwaW4pKSB7CisgICAgICBvdXRwdXRfY291bnQrKzsKKyAgICAgIGlmIChvdXRwdXRfY291bnQgPiAxKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIGZhbHNlOworfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK3ZvaWQKK1Jlc2l6ZXI6OnJlc2l6ZVNsYWNrUHJlYW1ibGUoKQoreworICByZXNpemVQcmVhbWJsZSgpOworICAvLyBTYXZlIG1heF93aXJlX2xlbmd0aCBmb3IgbXVsdGlwbGUgcmVwYWlyRGVzaWduIGNhbGxzLgorICBtYXhfd2lyZV9sZW5ndGhfID0gZmluZE1heFdpcmVMZW5ndGgoKTsKKyAgbmV0X3NsYWNrX21hcF8uY2xlYXIoKTsKK30KKworLy8gUnVuIHJlcGFpciBkZXNpZ24gdG8gZmluZCB0aGUgc2xhY2tzIGJ1dCBzYXZlL3Jlc3RvcmUgYWxsIGNoYW5nZXMgdG8gdGhlIG5ldGxpc3QuCit2b2lkCitSZXNpemVyOjpmaW5kUmVzaXplU2xhY2tzKCkKK3sKKyAgam91cm5hbEJlZ2luKCk7CisgIGVzdGltYXRlV2lyZVBhcmFzaXRpY3MoKTsKKyAgaW50IHJlcGFpcl9jb3VudCwgc2xld192aW9sYXRpb25zLCBjYXBfdmlvbGF0aW9uczsKKyAgaW50IGZhbm91dF92aW9sYXRpb25zLCBsZW5ndGhfdmlvbGF0aW9uczsKKyAgcmVwYWlyRGVzaWduKG1heF93aXJlX2xlbmd0aF8sIDAuMCwgMC4wLAorICAgICAgICAgICAgICAgcmVwYWlyX2NvdW50LCBzbGV3X3Zpb2xhdGlvbnMsIGNhcF92aW9sYXRpb25zLAorICAgICAgICAgICAgICAgZmFub3V0X3Zpb2xhdGlvbnMsIGxlbmd0aF92aW9sYXRpb25zKTsKKyAgZmluZFJlc2l6ZVNsYWNrczEoKTsKKyAgam91cm5hbFJlc3RvcmUoKTsKK30KKyAgCit2b2lkCitSZXNpemVyOjpmaW5kUmVzaXplU2xhY2tzMSgpCit7CisgIC8vIFVzZSBkcml2ZXIgcGluIHNsYWNrcyByYXRoZXIgdGhhbiBTdGE6Om5ldFNsYWNrIHRvIHNhdmUgdmlzaXRpbmcKKyAgLy8gdGhlIG5ldCBwaW5zIGFuZCBtaW4naW5nIHRoZSBzbGFjay4KKyAgTmV0U2VxIG5ldHM7CisgIGZvciAoaW50IGkgPSBsZXZlbF9kcnZyX3ZlcnRpY2VzXy5zaXplKCkgLSAxOyBpID49IDA7IGktLSkgeworICAgIFZlcnRleCAqZHJ2ciA9IGxldmVsX2RydnJfdmVydGljZXNfW2ldOworICAgIFBpbiAqZHJ2cl9waW4gPSBkcnZyLT5waW4oKTsKKyAgICBOZXQgKm5ldCA9IG5ldHdvcmtfLT5pc1RvcExldmVsUG9ydChkcnZyX3BpbikKKyAgICAgID8gbmV0d29ya18tPm5ldChuZXR3b3JrXy0+dGVybShkcnZyX3BpbikpCisgICAgICA6IG5ldHdvcmtfLT5uZXQoZHJ2cl9waW4pOworICAgIGlmIChuZXQKKyAgICAgICAgJiYgIWRydnItPmlzQ29uc3RhbnQoKQorICAgICAgICAvLyBIYW5kcyBvZmYgc3BlY2lhbCBuZXRzLgorICAgICAgICAmJiAhZGJfbmV0d29ya18tPmlzU3BlY2lhbChuZXQpCisgICAgICAgICYmICFzdGFfLT5pc0Nsb2NrKGRydnJfcGluKSkgeworICAgICAgbmV0X3NsYWNrX21hcF9bbmV0XSA9IHN0YV8tPnZlcnRleFNsYWNrKGRydnIsIG1heF8pOworICAgICAgbmV0cy5wdXNoX2JhY2sobmV0KTsKKyAgICB9CisgIH0KKworICAvLyBGaW5kIHRoZSBuZXRzIHdpdGggdGhlIHdvcnN0IHNsYWNrLgorICBkb3VibGUgd29yc3RfcGVyY2VudCA9IC4xOworICAvLyAgc29ydChuZXRzLmJlZ2luKCksIG5ldHMuZW5kKCkuIFsmXShjb25zdCBOZXQgKm5ldDEsCisgIHNvcnQobmV0cywgW3RoaXNdKGNvbnN0IE5ldCAqbmV0MSwKKyAgICAgICAgICAgICAgICAgY29uc3QgTmV0ICpuZXQyKQorICAgICAgICAgICAgIHsgcmV0dXJuIHJlc2l6ZU5ldFNsYWNrKG5ldDEpIDwgcmVzaXplTmV0U2xhY2sobmV0Mik7IH0pOworICB3b3JzdF9zbGFja19uZXRzXy5jbGVhcigpOworICBmb3IgKGludCBpID0gMDsgaSA8IG5ldHMuc2l6ZSgpICogd29yc3RfcGVyY2VudDsgaSsrKQorICAgIHdvcnN0X3NsYWNrX25ldHNfLnB1c2hfYmFjayhuZXRzW2ldKTsKK30KKworTmV0U2VxICYKK1Jlc2l6ZXI6OnJlc2l6ZVdvcnN0U2xhY2tOZXRzKCkKK3sKKyAgcmV0dXJuIHdvcnN0X3NsYWNrX25ldHNfOworfQorCit2ZWN0b3I8ZGJOZXQqPgorUmVzaXplcjo6cmVzaXplV29yc3RTbGFja0RiTmV0cygpCit7CisgIHZlY3RvcjxkYk5ldCo+IG5ldHM7CisgIGZvciAoTmV0KiBuZXQgOiB3b3JzdF9zbGFja19uZXRzXykKKyAgICBuZXRzLnB1c2hfYmFjayhkYl9uZXR3b3JrXy0+c3RhVG9EYihuZXQpKTsKKyAgcmV0dXJuIG5ldHM7Cit9CisKK1NsYWNrCitSZXNpemVyOjpyZXNpemVOZXRTbGFjayhjb25zdCBOZXQgKm5ldCkKK3sKKyAgcmV0dXJuIG5ldF9zbGFja19tYXBfW25ldF07Cit9CisKK1NsYWNrCitSZXNpemVyOjpyZXNpemVOZXRTbGFjayhjb25zdCBkYk5ldCAqZGJfbmV0KQoreworICBjb25zdCBOZXQgKm5ldCA9IGRiX25ldHdvcmtfLT5kYlRvU3RhKGRiX25ldCk7CisgIHJldHVybiBuZXRfc2xhY2tfbWFwX1tuZXRdOworfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2RvdWJsZQorUmVzaXplcjo6YXJlYShDZWxsICpjZWxsKQoreworICByZXR1cm4gYXJlYShkYl9uZXR3b3JrXy0+c3RhVG9EYihjZWxsKSk7Cit9CisKK2RvdWJsZQorUmVzaXplcjo6YXJlYShkYk1hc3RlciAqbWFzdGVyKQoreworICBpZiAoIW1hc3Rlci0+aXNDb3JlQXV0b1BsYWNlYWJsZSgpKSB7CisgICAgcmV0dXJuIDA7CisgIH0KKyAgcmV0dXJuIGRidVRvTWV0ZXJzKG1hc3Rlci0+Z2V0V2lkdGgoKSkgKiBkYnVUb01ldGVycyhtYXN0ZXItPmdldEhlaWdodCgpKTsKK30KKworZG91YmxlCitSZXNpemVyOjpkYnVUb01ldGVycyhpbnQgZGlzdCkgY29uc3QKK3sKKyAgaW50IGRidSA9IGRiXy0+Z2V0VGVjaCgpLT5nZXREYlVuaXRzUGVyTWljcm9uKCk7CisgIHJldHVybiBkaXN0IC8gKGRidSAqIDFlKzYpOworfQorCitpbnQKK1Jlc2l6ZXI6Om1ldGVyc1RvRGJ1KGRvdWJsZSBkaXN0KSBjb25zdAoreworICBpbnQgZGJ1ID0gZGJfLT5nZXRUZWNoKCktPmdldERiVW5pdHNQZXJNaWNyb24oKTsKKyAgcmV0dXJuIGRpc3QgKiBkYnUgKiAxZSs2OworfQorCit2b2lkCitSZXNpemVyOjpzZXRNYXhVdGlsaXphdGlvbihkb3VibGUgbWF4X3V0aWxpemF0aW9uKQoreworICBtYXhfYXJlYV8gPSBjb3JlQXJlYSgpICogbWF4X3V0aWxpemF0aW9uOworfQorCitib29sCitSZXNpemVyOjpvdmVyTWF4QXJlYSgpCit7CisgIHJldHVybiBtYXhfYXJlYV8KKyAgICAmJiBmdXp6eUdyZWF0ZXJFcXVhbChkZXNpZ25fYXJlYV8sIG1heF9hcmVhXyk7Cit9CisKK3ZvaWQKK1Jlc2l6ZXI6OnNldERvbnRVc2UoTGliZXJ0eUNlbGxTZXEgKmRvbnRfdXNlKQoreworICBpZiAoZG9udF91c2UpIHsKKyAgICBmb3IgKExpYmVydHlDZWxsICpjZWxsIDogKmRvbnRfdXNlKQorICAgICAgZG9udF91c2VfLmluc2VydChjZWxsKTsKKyAgfQorfQorCitib29sCitSZXNpemVyOjpkb250VXNlKExpYmVydHlDZWxsICpjZWxsKQoreworICByZXR1cm4gY2VsbC0+ZG9udFVzZSgpCisgICAgfHwgZG9udF91c2VfLmhhc0tleShjZWxsKTsKK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisvLyBGaW5kIGEgdGFyZ2V0IHNsZXcgZm9yIHRoZSBsaWJyYXJpZXMgYW5kIHRoZW4KKy8vIGEgdGFyZ2V0IGxvYWQgZm9yIGVhY2ggY2VsbCB0aGF0IGdpdmVzIHRoZSB0YXJnZXQgc2xldy4KK3ZvaWQKK1Jlc2l6ZXI6OmZpbmRUYXJnZXRMb2FkcygpCit7CisgIC8vIEZpbmQgdGFyZ2V0IHNsZXcgYWNyb3NzIGFsbCBidWZmZXJzIGluIHRoZSBsaWJyYXJpZXMuCisgIGZpbmRCdWZmZXJUYXJnZXRTbGV3cygpOworICBpZiAodGFyZ2V0X2xvYWRfbWFwXyA9PSBudWxscHRyKQorICAgIHRhcmdldF9sb2FkX21hcF8gPSBuZXcgQ2VsbFRhcmdldExvYWRNYXA7CisgIHRhcmdldF9sb2FkX21hcF8tPmNsZWFyKCk7CisKKyAgLy8gRmluZCB0YXJnZXQgbG9hZHMgYXQgdGhlIHRndF9zbGV3X2Nvcm5lci4KKyAgaW50IGxpYl9hcF9pbmRleCA9IHRndF9zbGV3X2Nvcm5lcl8tPmxpYmVydHlJbmRleChtYXhfKTsKKyAgTGliZXJ0eUxpYnJhcnlJdGVyYXRvciAqbGliX2l0ZXIgPSBuZXR3b3JrXy0+bGliZXJ0eUxpYnJhcnlJdGVyYXRvcigpOworICB3aGlsZSAobGliX2l0ZXItPmhhc05leHQoKSkgeworICAgIExpYmVydHlMaWJyYXJ5ICpsaWIgPSBsaWJfaXRlci0+bmV4dCgpOworICAgIExpYmVydHlDZWxsSXRlcmF0b3IgY2VsbF9pdGVyKGxpYik7CisgICAgd2hpbGUgKGNlbGxfaXRlci5oYXNOZXh0KCkpIHsKKyAgICAgIExpYmVydHlDZWxsICpjZWxsID0gY2VsbF9pdGVyLm5leHQoKTsKKyAgICAgIGlmIChpc0xpbmtDZWxsKGNlbGwpKSB7CisgICAgICAgIExpYmVydHlDZWxsICpjb3JuZXJfY2VsbCA9IGNlbGwtPmNvcm5lckNlbGwobGliX2FwX2luZGV4KTsKKyAgICAgICAgZmxvYXQgdGd0X2xvYWQ7CisgICAgICAgIGJvb2wgZXhpc3RzOworICAgICAgICB0YXJnZXRfbG9hZF9tYXBfLT5maW5kS2V5KGNvcm5lcl9jZWxsLCB0Z3RfbG9hZCwgZXhpc3RzKTsKKyAgICAgICAgaWYgKCFleGlzdHMpIHsKKyAgICAgICAgICB0Z3RfbG9hZCA9IGZpbmRUYXJnZXRMb2FkKGNvcm5lcl9jZWxsKTsKKyAgICAgICAgICAoKnRhcmdldF9sb2FkX21hcF8pW2Nvcm5lcl9jZWxsXSA9IHRndF9sb2FkOworICAgICAgICB9CisgICAgICAgIC8vIE1hcCBsaW5rIGNlbGwgdG8gY29ybmVyIGNlbGwgdGFyZ2V0IGxvYWQuCisgICAgICAgIGlmIChjZWxsICE9IGNvcm5lcl9jZWxsKQorICAgICAgICAgICgqdGFyZ2V0X2xvYWRfbWFwXylbY2VsbF0gPSB0Z3RfbG9hZDsKKyAgICAgIH0KKyAgICB9CisgIH0KKyAgZGVsZXRlIGxpYl9pdGVyOworfQorCitmbG9hdAorUmVzaXplcjo6dGFyZ2V0TG9hZENhcChMaWJlcnR5Q2VsbCAqY2VsbCkKK3sKKyAgZmxvYXQgbG9hZF9jYXAgPSAwLjA7CisgIGJvb2wgZXhpc3RzOworICB0YXJnZXRfbG9hZF9tYXBfLT5maW5kS2V5KGNlbGwsIGxvYWRfY2FwLCBleGlzdHMpOworICBpZiAoIWV4aXN0cykKKyAgICBsb2dnZXJfLT5lcnJvcihSU1osIDY4LCAibWlzc2luZyB0YXJnZXQgbG9hZCBjYXAuIik7CisgIHJldHVybiBsb2FkX2NhcDsKK30KKworZmxvYXQKK1Jlc2l6ZXI6OmZpbmRUYXJnZXRMb2FkKExpYmVydHlDZWxsICpjZWxsKQoreworICBMaWJlcnR5Q2VsbFRpbWluZ0FyY1NldEl0ZXJhdG9yIGFyY19zZXRfaXRlcihjZWxsKTsKKyAgZmxvYXQgdGFyZ2V0X2xvYWRfc3VtID0gMC4wOworICBpbnQgYXJjX2NvdW50ID0gMDsKKyAgd2hpbGUgKGFyY19zZXRfaXRlci5oYXNOZXh0KCkpIHsKKyAgICBUaW1pbmdBcmNTZXQgKmFyY19zZXQgPSBhcmNfc2V0X2l0ZXIubmV4dCgpOworICAgIFRpbWluZ1JvbGUgKnJvbGUgPSBhcmNfc2V0LT5yb2xlKCk7CisgICAgaWYgKCFyb2xlLT5pc1RpbWluZ0NoZWNrKCkKKyAgICAgICAgJiYgcm9sZSAhPSBUaW1pbmdSb2xlOjp0cmlzdGF0ZURpc2FibGUoKQorICAgICAgICAmJiByb2xlICE9IFRpbWluZ1JvbGU6OnRyaXN0YXRlRW5hYmxlKCkpIHsKKyAgICAgIFRpbWluZ0FyY1NldEFyY0l0ZXJhdG9yIGFyY19pdGVyKGFyY19zZXQpOworICAgICAgd2hpbGUgKGFyY19pdGVyLmhhc05leHQoKSkgeworICAgICAgICBUaW1pbmdBcmMgKmFyYyA9IGFyY19pdGVyLm5leHQoKTsKKyAgICAgICAgaW50IGluX3JmX2luZGV4ID0gYXJjLT5mcm9tVHJhbnMoKS0+YXNSaXNlRmFsbCgpLT5pbmRleCgpOworICAgICAgICBpbnQgb3V0X3JmX2luZGV4ID0gYXJjLT50b1RyYW5zKCktPmFzUmlzZUZhbGwoKS0+aW5kZXgoKTsKKyAgICAgICAgZmxvYXQgYXJjX3RhcmdldF9sb2FkID0gZmluZFRhcmdldExvYWQoY2VsbCwgYXJjLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGd0X3NsZXdzX1tpbl9yZl9pbmRleF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRndF9zbGV3c19bb3V0X3JmX2luZGV4XSk7CisgICAgICAgIGRlYnVnUHJpbnQobG9nZ2VyXywgUlNaLCAidGFyZ2V0X2xvYWQiLCAzLCAie30ge30gLT4ge30ge30gdGFyZ2V0X2xvYWQgPSB7Oi4yZX0iLAorICAgICAgICAgICAgICAgICAgIGNlbGwtPm5hbWUoKSwKKyAgICAgICAgICAgICAgICAgICBhcmMtPmZyb20oKS0+bmFtZSgpLAorICAgICAgICAgICAgICAgICAgIGFyYy0+dG8oKS0+bmFtZSgpLAorICAgICAgICAgICAgICAgICAgIGFyYy0+dG9UcmFucygpLT5hc1N0cmluZygpLAorICAgICAgICAgICAgICAgICAgIGFyY190YXJnZXRfbG9hZCk7CisgICAgICAgIHRhcmdldF9sb2FkX3N1bSArPSBhcmNfdGFyZ2V0X2xvYWQ7CisgICAgICAgIGFyY19jb3VudCsrOworICAgICAgfQorICAgIH0KKyAgfQorICBmbG9hdCB0YXJnZXRfbG9hZCA9IGFyY19jb3VudCA/IHRhcmdldF9sb2FkX3N1bSAvIGFyY19jb3VudCA6IDAuMDsKKyAgZGVidWdQcmludChsb2dnZXJfLCBSU1osICJ0YXJnZXRfbG9hZCIsIDIsICJ7fSB0YXJnZXRfbG9hZCA9IHs6LjJlfSIsCisgICAgICAgICAgICAgY2VsbC0+bmFtZSgpLAorICAgICAgICAgICAgIHRhcmdldF9sb2FkKTsKKyAgcmV0dXJuIHRhcmdldF9sb2FkOworfQorCisvLyBGaW5kIHRoZSBsb2FkIGNhcGFjaXRhbmNlIHRoYXQgd2lsbCBjYXVzZSB0aGUgb3V0cHV0IHNsZXcKKy8vIHRvIGJlIGVxdWFsIHRvIG91dF9zbGV3LgorZmxvYXQKK1Jlc2l6ZXI6OmZpbmRUYXJnZXRMb2FkKExpYmVydHlDZWxsICpjZWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgVGltaW5nQXJjICphcmMsCisgICAgICAgICAgICAgICAgICAgICAgICBTbGV3IGluX3NsZXcsCisgICAgICAgICAgICAgICAgICAgICAgICBTbGV3IG91dF9zbGV3KQoreworICBHYXRlVGltaW5nTW9kZWwgKm1vZGVsID0gZHluYW1pY19jYXN0PEdhdGVUaW1pbmdNb2RlbCo+KGFyYy0+bW9kZWwoKSk7CisgIGlmIChtb2RlbCkgeworICAgIC8vIGxvYWRfY2FwMSBsb3dlciBib3VuZAorICAgIC8vIGxvYWRfY2FwMiB1cHBlciBib3VuZAorICAgIGRvdWJsZSBsb2FkX2NhcDEgPSAwLjA7CisgICAgZG91YmxlIGxvYWRfY2FwMiA9IDEuMGUtMTI7ICAvLyAxcEYKKyAgICBkb3VibGUgdG9sID0gLjAxOyAvLyAxJQorICAgIGRvdWJsZSBkaWZmMSA9IGdhdGVTbGV3RGlmZihjZWxsLCBhcmMsIG1vZGVsLCBpbl9zbGV3LCBsb2FkX2NhcDEsIG91dF9zbGV3KTsKKyAgICBpZiAoZGlmZjEgPiAwLjApCisgICAgICAvLyBaZXJvIGxvYWQgY2FwIG91dF9zbGV3IGlzIGhpZ2hlciB0aGFuIHRoZSB0YXJnZXQuCisgICAgICByZXR1cm4gMC4wOworICAgIGRvdWJsZSBkaWZmMiA9IGdhdGVTbGV3RGlmZihjZWxsLCBhcmMsIG1vZGVsLCBpbl9zbGV3LCBsb2FkX2NhcDIsIG91dF9zbGV3KTsKKyAgICAvLyBiaW5hcnkgc2VhcmNoIGZvciBkaWZmID0gMC4KKyAgICB3aGlsZSAoYWJzKGxvYWRfY2FwMSAtIGxvYWRfY2FwMikgPiBtYXgobG9hZF9jYXAxLCBsb2FkX2NhcDIpICogdG9sKSB7CisgICAgICBpZiAoZGlmZjIgPCAwLjApIHsKKyAgICAgICAgbG9hZF9jYXAxID0gbG9hZF9jYXAyOworICAgICAgICBkaWZmMSA9IGRpZmYyOworICAgICAgICBsb2FkX2NhcDIgKj0gMjsKKyAgICAgICAgZGlmZjIgPSBnYXRlU2xld0RpZmYoY2VsbCwgYXJjLCBtb2RlbCwgaW5fc2xldywgbG9hZF9jYXAyLCBvdXRfc2xldyk7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgZG91YmxlIGxvYWRfY2FwMyA9IChsb2FkX2NhcDEgKyBsb2FkX2NhcDIpIC8gMi4wOworICAgICAgICBkb3VibGUgZGlmZjMgPSBnYXRlU2xld0RpZmYoY2VsbCwgYXJjLCBtb2RlbCwgaW5fc2xldywgbG9hZF9jYXAzLCBvdXRfc2xldyk7CisgICAgICAgIGlmIChkaWZmMyA8IDAuMCkgeworICAgICAgICAgIGxvYWRfY2FwMSA9IGxvYWRfY2FwMzsKKyAgICAgICAgICBkaWZmMSA9IGRpZmYzOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgIGxvYWRfY2FwMiA9IGxvYWRfY2FwMzsKKyAgICAgICAgICBkaWZmMiA9IGRpZmYzOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICAgIHJldHVybiBsb2FkX2NhcDE7CisgIH0KKyAgcmV0dXJuIDAuMDsKK30KKworLy8gb2JqZWN0aXZlIGZ1bmN0aW9uCitTbGV3CitSZXNpemVyOjpnYXRlU2xld0RpZmYoTGliZXJ0eUNlbGwgKmNlbGwsCisgICAgICAgICAgICAgICAgICAgICAgVGltaW5nQXJjICphcmMsCisgICAgICAgICAgICAgICAgICAgICAgR2F0ZVRpbWluZ01vZGVsICptb2RlbCwKKyAgICAgICAgICAgICAgICAgICAgICBTbGV3IGluX3NsZXcsCisgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgbG9hZF9jYXAsCisgICAgICAgICAgICAgICAgICAgICAgU2xldyBvdXRfc2xldykKKworeworICBjb25zdCBQdnQgKnB2dCA9IHRndF9zbGV3X2RjYWxjX2FwXy0+b3BlcmF0aW5nQ29uZGl0aW9ucygpOworICBBcmNEZWxheSBhcmNfZGVsYXk7CisgIFNsZXcgYXJjX3NsZXc7CisgIG1vZGVsLT5nYXRlRGVsYXkoY2VsbCwgcHZ0LCBpbl9zbGV3LCBsb2FkX2NhcCwgMC4wLCBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICBhcmNfZGVsYXksIGFyY19zbGV3KTsKKyAgcmV0dXJuIGFyY19zbGV3IC0gb3V0X3NsZXc7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworU2xldworUmVzaXplcjo6dGFyZ2V0U2xldyhjb25zdCBSaXNlRmFsbCAqcmYpCit7CisgIHJldHVybiB0Z3Rfc2xld3NfW3JmLT5pbmRleCgpXTsKK30KKworLy8gRmluZCB0YXJnZXQgc2xldyBhY3Jvc3MgYWxsIGJ1ZmZlcnMgaW4gdGhlIGxpYnJhcmllcy4KK3ZvaWQKK1Jlc2l6ZXI6OmZpbmRCdWZmZXJUYXJnZXRTbGV3cygpCit7CisgIHRndF9zbGV3c18gPSB7MC4wfTsKKyAgdGd0X3NsZXdfY29ybmVyXyA9IG51bGxwdHI7CisgIAorICBmb3IgKENvcm5lciAqY29ybmVyIDogKnN0YV8tPmNvcm5lcnMoKSkgeworICAgIGludCBsaWJfYXBfaW5kZXggPSBjb3JuZXItPmxpYmVydHlJbmRleChtYXhfKTsKKyAgICBjb25zdCBEY2FsY0FuYWx5c2lzUHQgKmRjYWxjX2FwID0gY29ybmVyLT5maW5kRGNhbGNBbmFseXNpc1B0KG1heF8pOworICAgIGNvbnN0IFB2dCAqcHZ0ID0gZGNhbGNfYXAtPm9wZXJhdGluZ0NvbmRpdGlvbnMoKTsKKyAgICAvLyBBdmVyYWdlIHNsZXdzIGFjcm9zcyBidWZmZXJzIGF0IGNvcm5lci4KKyAgICBTbGV3IHNsZXdzW1Jpc2VGYWxsOjppbmRleF9jb3VudF17MC4wfTsKKyAgICBpbnQgY291bnRzW1Jpc2VGYWxsOjppbmRleF9jb3VudF17MH07CisgICAgZm9yIChMaWJlcnR5Q2VsbCAqYnVmZmVyIDogYnVmZmVyX2NlbGxzXykgeworICAgICAgTGliZXJ0eUNlbGwgKmNvcm5lcl9idWZmZXIgPSBidWZmZXItPmNvcm5lckNlbGwobGliX2FwX2luZGV4KTsKKyAgICAgIGZpbmRCdWZmZXJUYXJnZXRTbGV3cyhjb3JuZXJfYnVmZmVyLCBwdnQsIHNsZXdzLCBjb3VudHMpOworICAgIH0KKyAgICBTbGV3IHNsZXdfcmlzZSA9IHNsZXdzW1Jpc2VGYWxsOjpyaXNlSW5kZXgoKV0gLyBjb3VudHNbUmlzZUZhbGw6OnJpc2VJbmRleCgpXTsKKyAgICBTbGV3IHNsZXdfZmFsbCA9IHNsZXdzW1Jpc2VGYWxsOjpmYWxsSW5kZXgoKV0gLyBjb3VudHNbUmlzZUZhbGw6OmZhbGxJbmRleCgpXTsKKyAgICAvLyBVc2UgdGhlIHRhcmdldCBzbGV3cyBmcm9tIHRoZSBzbG93ZXN0IGNvcm5lciwKKyAgICAvLyBhbmQgcmVzaXplIHVzaW5nIHRoYXQgY29ybmVyLgorICAgIGlmIChzbGV3X3Jpc2UgPiB0Z3Rfc2xld3NfW1Jpc2VGYWxsOjpyaXNlSW5kZXgoKV0pIHsKKyAgICAgIHRndF9zbGV3c19bUmlzZUZhbGw6OnJpc2VJbmRleCgpXSA9IHNsZXdfcmlzZTsKKyAgICAgIHRndF9zbGV3c19bUmlzZUZhbGw6OmZhbGxJbmRleCgpXSA9IHNsZXdfZmFsbDsKKyAgICAgIHRndF9zbGV3X2Nvcm5lcl8gPSBjb3JuZXI7CisgICAgICB0Z3Rfc2xld19kY2FsY19hcF8gPSBjb3JuZXItPmZpbmREY2FsY0FuYWx5c2lzUHQobWF4Xyk7CisgICAgfQorICB9CisKKyAgZGVidWdQcmludChsb2dnZXJfLCBSU1osICJ0YXJnZXRfbG9hZCIsIDEsICJ0YXJnZXQgc2xldyBjb3JuZXIge30gPSB7fS97fSIsCisgICAgICAgICAgICAgdGd0X3NsZXdfY29ybmVyXy0+bmFtZSgpLAorICAgICAgICAgICAgIGRlbGF5QXNTdHJpbmcodGd0X3NsZXdzX1tSaXNlRmFsbDo6cmlzZUluZGV4KCldLCBzdGFfLCAzKSwKKyAgICAgICAgICAgICBkZWxheUFzU3RyaW5nKHRndF9zbGV3c19bUmlzZUZhbGw6OmZhbGxJbmRleCgpXSwgc3RhXywgMykpOworfQorCit2b2lkCitSZXNpemVyOjpmaW5kQnVmZmVyVGFyZ2V0U2xld3MoTGliZXJ0eUNlbGwgKmJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQdnQgKnB2dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXR1cm4gdmFsdWVzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNsZXcgc2xld3NbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY291bnRzW10pCit7CisgIExpYmVydHlQb3J0ICppbnB1dCwgKm91dHB1dDsKKyAgYnVmZmVyLT5idWZmZXJQb3J0cyhpbnB1dCwgb3V0cHV0KTsKKyAgVGltaW5nQXJjU2V0U2VxICphcmNfc2V0cyA9IGJ1ZmZlci0+dGltaW5nQXJjU2V0cyhpbnB1dCwgb3V0cHV0KTsKKyAgaWYgKGFyY19zZXRzKSB7CisgICAgZm9yIChUaW1pbmdBcmNTZXQgKmFyY19zZXQgOiAqYXJjX3NldHMpIHsKKyAgICAgIFRpbWluZ0FyY1NldEFyY0l0ZXJhdG9yIGFyY19pdGVyKGFyY19zZXQpOworICAgICAgd2hpbGUgKGFyY19pdGVyLmhhc05leHQoKSkgeworICAgICAgICBUaW1pbmdBcmMgKmFyYyA9IGFyY19pdGVyLm5leHQoKTsKKyAgICAgICAgR2F0ZVRpbWluZ01vZGVsICptb2RlbCA9IGR5bmFtaWNfY2FzdDxHYXRlVGltaW5nTW9kZWwqPihhcmMtPm1vZGVsKCkpOworICAgICAgICBSaXNlRmFsbCAqaW5fcmYgPSBhcmMtPmZyb21UcmFucygpLT5hc1Jpc2VGYWxsKCk7CisgICAgICAgIFJpc2VGYWxsICpvdXRfcmYgPSBhcmMtPnRvVHJhbnMoKS0+YXNSaXNlRmFsbCgpOworICAgICAgICBmbG9hdCBpbl9jYXAgPSBpbnB1dC0+Y2FwYWNpdGFuY2UoaW5fcmYsIG1heF8pOworICAgICAgICBmbG9hdCBsb2FkX2NhcCA9IGluX2NhcCAqIHRndF9zbGV3X2xvYWRfY2FwX2ZhY3RvcjsKKyAgICAgICAgQXJjRGVsYXkgYXJjX2RlbGF5OworICAgICAgICBTbGV3IGFyY19zbGV3OworICAgICAgICBtb2RlbC0+Z2F0ZURlbGF5KGJ1ZmZlciwgcHZ0LCAwLjAsIGxvYWRfY2FwLCAwLjAsIGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGFyY19kZWxheSwgYXJjX3NsZXcpOworICAgICAgICBtb2RlbC0+Z2F0ZURlbGF5KGJ1ZmZlciwgcHZ0LCBhcmNfc2xldywgbG9hZF9jYXAsIDAuMCwgZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgYXJjX2RlbGF5LCBhcmNfc2xldyk7CisgICAgICAgIHNsZXdzW291dF9yZi0+aW5kZXgoKV0gKz0gYXJjX3NsZXc7CisgICAgICAgIGNvdW50c1tvdXRfcmYtPmluZGV4KCldKys7CisgICAgICB9CisgICAgfQorICB9Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLy8gUmVwYWlyIHRpZSBoaS9sb3cgbmV0IGRyaXZlciBmYW5vdXQgYnkgZHVwbGljYXRpbmcgdGhlCisvLyB0aWUgaGkvbG93IGluc3RhbmNlcyBmb3IgZXZlcnkgcGluIGNvbm5lY3RlZCB0byB0aWUgaGkvbG93IGluc3RhbmNlcy4KK3ZvaWQKK1Jlc2l6ZXI6OnJlcGFpclRpZUZhbm91dChMaWJlcnR5UG9ydCAqdGllX3BvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHNlcGFyYXRpb24sIC8vIG1ldGVycworICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdmVyYm9zZSkKK3sKKyAgZW5zdXJlQmxvY2soKTsKKyAgZW5zdXJlRGVzaWduQXJlYSgpOworICBJbnN0YW5jZSAqdG9wX2luc3QgPSBuZXR3b3JrXy0+dG9wSW5zdGFuY2UoKTsKKyAgTGliZXJ0eUNlbGwgKnRpZV9jZWxsID0gdGllX3BvcnQtPmxpYmVydHlDZWxsKCk7CisgIEluc3RhbmNlU2VxIGluc3RzOworICBmaW5kQ2VsbEluc3RhbmNlcyh0aWVfY2VsbCwgaW5zdHMpOworICBpbnQgdGllX2NvdW50ID0gMDsKKyAgaW50IHNlcGFyYXRpb25fZGJ1ID0gbWV0ZXJzVG9EYnUoc2VwYXJhdGlvbik7CisgIGZvciAoSW5zdGFuY2UgKmluc3QgOiBpbnN0cykgeworICAgIFBpbiAqZHJ2cl9waW4gPSBuZXR3b3JrXy0+ZmluZFBpbihpbnN0LCB0aWVfcG9ydCk7CisgICAgaWYgKGRydnJfcGluKSB7CisgICAgICBjb25zdCBjaGFyICppbnN0X25hbWUgPSBuZXR3b3JrXy0+bmFtZShpbnN0KTsKKyAgICAgIE5ldCAqbmV0ID0gbmV0d29ya18tPm5ldChkcnZyX3Bpbik7CisgICAgICBpZiAobmV0KSB7CisgICAgICAgIE5ldENvbm5lY3RlZFBpbkl0ZXJhdG9yICpwaW5faXRlciA9IG5ldHdvcmtfLT5jb25uZWN0ZWRQaW5JdGVyYXRvcihuZXQpOworICAgICAgICB3aGlsZSAocGluX2l0ZXItPmhhc05leHQoKSkgeworICAgICAgICAgIFBpbiAqbG9hZCA9IHBpbl9pdGVyLT5uZXh0KCk7CisgICAgICAgICAgaWYgKGxvYWQgIT0gZHJ2cl9waW4pIHsKKyAgICAgICAgICAgIC8vIE1ha2UgdGllIGluc3QuCisgICAgICAgICAgICBQb2ludCB0aWVfbG9jID0gdGllTG9jYXRpb24obG9hZCwgc2VwYXJhdGlvbl9kYnUpOworICAgICAgICAgICAgSW5zdGFuY2UgKmxvYWRfaW5zdCA9IG5ldHdvcmtfLT5pbnN0YW5jZShsb2FkKTsKKyAgICAgICAgICAgIHN0cmluZyB0aWVfbmFtZSA9IG1ha2VVbmlxdWVJbnN0TmFtZShpbnN0X25hbWUsIHRydWUpOworICAgICAgICAgICAgSW5zdGFuY2UgKnRpZSA9IG1ha2VJbnN0YW5jZSh0aWVfY2VsbCwgdGllX25hbWUuY19zdHIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wX2luc3QpOworICAgICAgICAgICAgc2V0TG9jYXRpb24odGllLCB0aWVfbG9jKTsKKworICAgICAgICAgICAgLy8gTWFrZSB0aWUgb3V0cHV0IG5ldC4KKyAgICAgICAgICAgIE5ldCAqbG9hZF9uZXQgPSBtYWtlVW5pcXVlTmV0KCk7CisKKyAgICAgICAgICAgIC8vIENvbm5lY3QgdGllIGluc3Qgb3V0cHV0LgorICAgICAgICAgICAgc3RhXy0+Y29ubmVjdFBpbih0aWUsIHRpZV9wb3J0LCBsb2FkX25ldCk7CisKKyAgICAgICAgICAgIC8vIENvbm5lY3QgbG9hZCB0byB0aWUgb3V0cHV0IG5ldC4KKyAgICAgICAgICAgIHN0YV8tPmRpc2Nvbm5lY3RQaW4obG9hZCk7CisgICAgICAgICAgICBQb3J0ICpsb2FkX3BvcnQgPSBuZXR3b3JrXy0+cG9ydChsb2FkKTsKKyAgICAgICAgICAgIHN0YV8tPmNvbm5lY3RQaW4obG9hZF9pbnN0LCBsb2FkX3BvcnQsIGxvYWRfbmV0KTsKKworICAgICAgICAgICAgZGVzaWduQXJlYUluY3IoYXJlYShkYl9uZXR3b3JrXy0+Y2VsbCh0aWVfY2VsbCkpKTsKKyAgICAgICAgICAgIHRpZV9jb3VudCsrOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBkZWxldGUgcGluX2l0ZXI7CisKKyAgICAgICAgLy8gRGVsZXRlIGluc3Qgb3V0cHV0IG5ldC4KKyAgICAgICAgUGluICp0aWVfcGluID0gbmV0d29ya18tPmZpbmRQaW4oaW5zdCwgdGllX3BvcnQpOworICAgICAgICBOZXQgKnRpZV9uZXQgPSBuZXR3b3JrXy0+bmV0KHRpZV9waW4pOworICAgICAgICBzdGFfLT5kZWxldGVOZXQodGllX25ldCk7CisgICAgICAgIHBhcmFzaXRpY3NfaW52YWxpZF8uZXJhc2UodGllX25ldCk7CisgICAgICAgIC8vIERlbGV0ZSB0aGUgdGllIGluc3RhbmNlLgorICAgICAgICBzdGFfLT5kZWxldGVJbnN0YW5jZShpbnN0KTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICBpZiAodGllX2NvdW50ID4gMCkgeworICAgIGxvZ2dlcl8tPmluZm8oUlNaLCA0MiwgIkluc2VydGVkIHt9IHRpZSB7fSBpbnN0YW5jZXMuIiwKKyAgICAgICAgICAgICAgICAgIHRpZV9jb3VudCwKKyAgICAgICAgICAgICAgICAgIHRpZV9jZWxsLT5uYW1lKCkpOworICAgIGxldmVsX2RydnJfdmVydGljZXNfdmFsaWRfID0gZmFsc2U7CisgIH0KK30KKwordm9pZAorUmVzaXplcjo6ZmluZENlbGxJbnN0YW5jZXMoTGliZXJ0eUNlbGwgKmNlbGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXR1cm4gdmFsdWUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0YW5jZVNlcSAmaW5zdHMpCit7CisgIExlYWZJbnN0YW5jZUl0ZXJhdG9yICppbnN0X2l0ZXIgPSBuZXR3b3JrXy0+bGVhZkluc3RhbmNlSXRlcmF0b3IoKTsKKyAgd2hpbGUgKGluc3RfaXRlci0+aGFzTmV4dCgpKSB7CisgICAgSW5zdGFuY2UgKmluc3QgPSBpbnN0X2l0ZXItPm5leHQoKTsKKyAgICBpZiAobmV0d29ya18tPmxpYmVydHlDZWxsKGluc3QpID09IGNlbGwpCisgICAgICBpbnN0cy5wdXNoX2JhY2soaW5zdCk7CisgIH0KKyAgZGVsZXRlIGluc3RfaXRlcjsKK30KKworLy8gUGxhY2UgdGhlIHRpZSBpbnN0YW5jZSBvbiB0aGUgc2lkZSBvZiB0aGUgbG9hZCBwaW4uCitQb2ludAorUmVzaXplcjo6dGllTG9jYXRpb24oUGluICpsb2FkLAorICAgICAgICAgICAgICAgICAgICAgaW50IHNlcGFyYXRpb24pCit7CisgIFBvaW50IGxvYWRfbG9jID0gZGJfbmV0d29ya18tPmxvY2F0aW9uKGxvYWQpOworICBpbnQgbG9hZF94ID0gbG9hZF9sb2MuZ2V0WCgpOworICBpbnQgbG9hZF95ID0gbG9hZF9sb2MuZ2V0WSgpOworICBpbnQgdGllX3ggPSBsb2FkX3g7CisgIGludCB0aWVfeSA9IGxvYWRfeTsKKyAgaWYgKCFuZXR3b3JrXy0+aXNUb3BMZXZlbFBvcnQobG9hZCkpIHsKKyAgICBkYkluc3QgKmRiX2luc3QgPSBkYl9uZXR3b3JrXy0+c3RhVG9EYihuZXR3b3JrXy0+aW5zdGFuY2UobG9hZCkpOworICAgIGRiQm94ICpiYm94ID0gZGJfaW5zdC0+Z2V0QkJveCgpOworICAgIGludCBsZWZ0X2Rpc3QgPSBhYnMobG9hZF94IC0gYmJveC0+eE1pbigpKTsKKyAgICBpbnQgcmlnaHRfZGlzdCA9IGFicyhsb2FkX3ggLSBiYm94LT54TWF4KCkpOworICAgIGludCBib3RfZGlzdCA9IGFicyhsb2FkX3kgLSBiYm94LT55TWluKCkpOworICAgIGludCB0b3BfZGlzdCA9IGFicyhsb2FkX3kgLSBiYm94LT55TWF4KCkpOworICAgIGlmIChsZWZ0X2Rpc3QgPCByaWdodF9kaXN0CisgICAgICAgICYmIGxlZnRfZGlzdCA8IGJvdF9kaXN0CisgICAgICAgICYmIGxlZnRfZGlzdCA8IHRvcF9kaXN0KQorICAgICAgLy8gbGVmdAorICAgICAgdGllX3ggLT0gc2VwYXJhdGlvbjsKKyAgICBpZiAocmlnaHRfZGlzdCA8IGxlZnRfZGlzdAorICAgICAgICAmJiByaWdodF9kaXN0IDwgYm90X2Rpc3QKKyAgICAgICAgJiYgcmlnaHRfZGlzdCA8IHRvcF9kaXN0KQorICAgICAgLy8gcmlnaHQKKyAgICAgIHRpZV94ICs9IHNlcGFyYXRpb247CisgICAgaWYgKGJvdF9kaXN0IDwgbGVmdF9kaXN0CisgICAgICAgICYmIGJvdF9kaXN0IDwgcmlnaHRfZGlzdAorICAgICAgICAmJiBib3RfZGlzdCA8IHRvcF9kaXN0KQorICAgICAgLy8gYm90CisgICAgICB0aWVfeSAtPSBzZXBhcmF0aW9uOworICAgIGlmICh0b3BfZGlzdCA8IGxlZnRfZGlzdAorICAgICAgICAmJiB0b3BfZGlzdCA8IHJpZ2h0X2Rpc3QKKyAgICAgICAgJiYgdG9wX2Rpc3QgPCBib3RfZGlzdCkKKyAgICAgIC8vIHRvcAorICAgICAgdGllX3kgKz0gc2VwYXJhdGlvbjsKKyAgfQorICByZXR1cm4gUG9pbnQodGllX3gsIHRpZV95KTsKK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCit2b2lkCitSZXNpemVyOjpyZXBhaXJTZXR1cChmbG9hdCBzbGFja19tYXJnaW4sCisgICAgICAgICAgICAgICAgICAgICBpbnQgbWF4X3Bhc3NlcykKK3sKKyAgaW5zZXJ0ZWRfYnVmZmVyX2NvdW50XyA9IDA7CisgIHJlc2l6ZV9jb3VudF8gPSAwOworICBTbGFjayB3b3JzdF9zbGFjazsKKyAgVmVydGV4ICp3b3JzdF92ZXJ0ZXg7CisgIHN0YV8tPndvcnN0U2xhY2sobWF4Xywgd29yc3Rfc2xhY2ssIHdvcnN0X3ZlcnRleCk7CisgIGRlYnVnUHJpbnQobG9nZ2VyXywgUlNaLCAicmVwYWlyX3NldHVwIiwgMSwgIndvcnN0X3NsYWNrID0ge30iLAorICAgICAgICAgICAgIGRlbGF5QXNTdHJpbmcod29yc3Rfc2xhY2ssIHN0YV8sIDMpKTsKKyAgU2xhY2sgcHJldl93b3JzdF9zbGFjayA9IC1JTkY7CisgIGludCBwYXNzID0gMTsKKyAgaW50IGRlY3JlYXNpbmdfc2xhY2tfcGFzc2VzID0gMDsKKyAgaW5jcmVtZW50YWxQYXJhc2l0aWNzQmVnaW4oKTsKKyAgd2hpbGUgKGZ1enp5TGVzcyh3b3JzdF9zbGFjaywgc2xhY2tfbWFyZ2luKQorICAgICAgICAgJiYgcGFzcyA8PSBtYXhfcGFzc2VzKSB7CisgICAgUGF0aFJlZiB3b3JzdF9wYXRoID0gc3RhXy0+dmVydGV4V29yc3RTbGFja1BhdGgod29yc3RfdmVydGV4LCBtYXhfKTsKKyAgICBib29sIGNoYW5nZWQgPSByZXBhaXJTZXR1cCh3b3JzdF9wYXRoLCB3b3JzdF9zbGFjayk7CisgICAgdXBkYXRlUGFyYXNpdGljcygpOworICAgIHN0YV8tPmZpbmRSZXF1aXJlZHMoKTsKKyAgICBzdGFfLT53b3JzdFNsYWNrKG1heF8sIHdvcnN0X3NsYWNrLCB3b3JzdF92ZXJ0ZXgpOworICAgIGJvb2wgZGVjcmVhc2luZ19zbGFjayA9IGZ1enp5TGVzc0VxdWFsKHdvcnN0X3NsYWNrLCBwcmV2X3dvcnN0X3NsYWNrKTsKKyAgICBkZWJ1Z1ByaW50KGxvZ2dlcl8sIFJTWiwgInJlcGFpcl9zZXR1cCIsIDEsICJwYXNzIHt9IHdvcnN0X3NsYWNrID0ge30ge30iLAorICAgICAgICAgICAgICAgcGFzcywKKyAgICAgICAgICAgICAgIGRlbGF5QXNTdHJpbmcod29yc3Rfc2xhY2ssIHN0YV8sIDMpLAorICAgICAgICAgICAgICAgZGVjcmVhc2luZ19zbGFjayA/ICJ2IiA6ICJeIik7CisgICAgaWYgKGRlY3JlYXNpbmdfc2xhY2spIHsKKyAgICAgIC8vIEFsbG93IHNsYWNrIHRvIGluY3JlYXNlIHRvIGdldCBvdXQgb2YgbG9jYWwgbWluaW1hLgorICAgICAgLy8gRG8gbm90IHVwZGF0ZSBwcmV2X3dvcnN0X3NsYWNrIHNvIGl0IHNhdmVzIHRoZSBoaWdoIHdhdGVyIG1hcmsuCisgICAgICBkZWNyZWFzaW5nX3NsYWNrX3Bhc3NlcysrOworICAgICAgaWYgKCFjaGFuZ2VkCisgICAgICAgICAgfHwgZGVjcmVhc2luZ19zbGFja19wYXNzZXMgPiByZXBhaXJfc2V0dXBfZGVjcmVhc2luZ19zbGFja19wYXNzZXNfYWxsb3dlZF8pIHsKKyAgICAgICAgLy8gVW5kbyBjaGFuZ2VzIHRoYXQgcmVkdWNlZCBzbGFjay4KKyAgICAgICAgam91cm5hbFJlc3RvcmUoKTsKKyAgICAgICAgZGVidWdQcmludChsb2dnZXJfLCBSU1osICJyZXBhaXJfc2V0dXAiLCAxLAorICAgICAgICAgICAgICAgICAgICJkZWNyZWFzaW5nIHNsYWNrIGZvciB7fSBwYXNzZXMuIFJlc3RvcmluZyBiZXN0IHNsYWNrIHt9IiwKKyAgICAgICAgICAgICAgICAgICBkZWNyZWFzaW5nX3NsYWNrX3Bhc3NlcywKKyAgICAgICAgICAgICAgICAgICBkZWxheUFzU3RyaW5nKHByZXZfd29yc3Rfc2xhY2ssIHN0YV8sIDMpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorICAgIGVsc2UgeworICAgICAgcHJldl93b3JzdF9zbGFjayA9IHdvcnN0X3NsYWNrOworICAgICAgZGVjcmVhc2luZ19zbGFja19wYXNzZXMgPSAwOworICAgICAgLy8gUHJvZ3Jlc3MsIHN0YXJ0IGpvdXJuYWwgc28gd2UgY2FuIGJhY2sgdXAgdG8gaGVyZS4KKyAgICAgIGpvdXJuYWxCZWdpbigpOworICAgIH0KKyAgICBpZiAob3Zlck1heEFyZWEoKSkKKyAgICAgIGJyZWFrOworICAgIHBhc3MrKzsKKyAgfQorICAvLyBMZWF2ZSB0aGUgcGFyYXNpdGljcyB1cCB0byBkYXRlLgorICB1cGRhdGVQYXJhc2l0aWNzKCk7CisgIGluY3JlbWVudGFsUGFyYXNpdGljc0VuZCgpOworCisgIGlmIChpbnNlcnRlZF9idWZmZXJfY291bnRfID4gMCkKKyAgICBsb2dnZXJfLT5pbmZvKFJTWiwgNDAsICJJbnNlcnRlZCB7fSBidWZmZXJzLiIsIGluc2VydGVkX2J1ZmZlcl9jb3VudF8pOworICBpZiAocmVzaXplX2NvdW50XyA+IDApCisgICAgbG9nZ2VyXy0+aW5mbyhSU1osIDQxLCAiUmVzaXplZCB7fSBpbnN0YW5jZXMuIiwgcmVzaXplX2NvdW50Xyk7CisgIGlmIChmdXp6eUxlc3Mod29yc3Rfc2xhY2ssIHNsYWNrX21hcmdpbikpCisgICAgbG9nZ2VyXy0+d2FybihSU1osIDYyLCAiVW5hYmxlIHRvIHJlcGFpciBhbGwgc2V0dXAgdmlvbGF0aW9ucy4iKTsKKyAgaWYgKG92ZXJNYXhBcmVhKCkpCisgICAgbG9nZ2VyXy0+ZXJyb3IoUlNaLCAyNSwgIm1heCB1dGlsaXphdGlvbiByZWFjaGVkLiIpOworfQorCisvLyBGb3IgdGVzdGluZy4KK3ZvaWQKK1Jlc2l6ZXI6OnJlcGFpclNldHVwKFBpbiAqZW5kX3BpbikKK3sKKyAgaW5zZXJ0ZWRfYnVmZmVyX2NvdW50XyA9IDA7CisgIHJlc2l6ZV9jb3VudF8gPSAwOworICBWZXJ0ZXggKnZlcnRleCA9IGdyYXBoXy0+cGluTG9hZFZlcnRleChlbmRfcGluKTsKKyAgU2xhY2sgc2xhY2sgPSBzdGFfLT52ZXJ0ZXhTbGFjayh2ZXJ0ZXgsIG1heF8pOworICBQYXRoUmVmIHBhdGggPSBzdGFfLT52ZXJ0ZXhXb3JzdFNsYWNrUGF0aCh2ZXJ0ZXgsIG1heF8pOworICBpbmNyZW1lbnRhbFBhcmFzaXRpY3NCZWdpbigpOworICByZXBhaXJTZXR1cChwYXRoLCBzbGFjayk7CisgIC8vIExlYXZlIHRoZSBwYXJhc2l0aWNlcyB1cCB0byBkYXRlLgorICB1cGRhdGVQYXJhc2l0aWNzKCk7CisgIGluY3JlbWVudGFsUGFyYXNpdGljc0VuZCgpOworCisgIGlmIChpbnNlcnRlZF9idWZmZXJfY291bnRfID4gMCkKKyAgICBsb2dnZXJfLT5pbmZvKFJTWiwgMzAsICJJbnNlcnRlZCB7fSBidWZmZXJzLiIsIGluc2VydGVkX2J1ZmZlcl9jb3VudF8pOworICBpZiAocmVzaXplX2NvdW50XyA+IDApCisgICAgbG9nZ2VyXy0+aW5mbyhSU1osIDMxLCAiUmVzaXplZCB7fSBpbnN0YW5jZXMuIiwgcmVzaXplX2NvdW50Xyk7Cit9CisKK2Jvb2wKK1Jlc2l6ZXI6OnJlcGFpclNldHVwKFBhdGhSZWYgJnBhdGgsCisgICAgICAgICAgICAgICAgICAgICBTbGFjayBwYXRoX3NsYWNrKQoreworICBQYXRoRXhwYW5kZWQgZXhwYW5kZWQoJnBhdGgsIHN0YV8pOworICBib29sIGNoYW5nZWQgPSBmYWxzZTsKKyAgaWYgKGV4cGFuZGVkLnNpemUoKSA+IDEpIHsKKyAgICBpbnQgcGF0aF9sZW5ndGggPSBleHBhbmRlZC5zaXplKCk7CisgICAgdmVjdG9yPHBhaXI8aW50LCBEZWxheT4+IGxvYWRfZGVsYXlzOworICAgIGludCBzdGFydF9pbmRleCA9IGV4cGFuZGVkLnN0YXJ0SW5kZXgoKTsKKyAgICBjb25zdCBEY2FsY0FuYWx5c2lzUHQgKmRjYWxjX2FwID0gcGF0aC5kY2FsY0FuYWx5c2lzUHQoc3RhXyk7CisgICAgaW50IGxpYl9hcCA9IGRjYWxjX2FwLT5saWJlcnR5SW5kZXgoKTsKKyAgICAvLyBGaW5kIGxvYWQgZGVsYXkgZm9yIGVhY2ggZ2F0ZSBpbiB0aGUgcGF0aC4KKyAgICBmb3IgKGludCBpID0gc3RhcnRfaW5kZXg7IGkgPCBwYXRoX2xlbmd0aDsgaSsrKSB7CisgICAgICBQYXRoUmVmICpwYXRoID0gZXhwYW5kZWQucGF0aChpKTsKKyAgICAgIFZlcnRleCAqcGF0aF92ZXJ0ZXggPSBwYXRoLT52ZXJ0ZXgoc3RhXyk7CisgICAgICBjb25zdCBQaW4gKnBhdGhfcGluID0gcGF0aC0+cGluKHN0YV8pOworICAgICAgaWYgKG5ldHdvcmtfLT5pc0RyaXZlcihwYXRoX3BpbikKKyAgICAgICAgICAmJiAhbmV0d29ya18tPmlzVG9wTGV2ZWxQb3J0KHBhdGhfcGluKSkgeworICAgICAgICBUaW1pbmdBcmMgKnByZXZfYXJjID0gZXhwYW5kZWQucHJldkFyYyhpKTsKKyAgICAgICAgVGltaW5nQXJjICpjb3JuZXJfYXJjID0gcHJldl9hcmMtPmNvcm5lckFyYyhsaWJfYXApOworICAgICAgICBFZGdlICpwcmV2X2VkZ2UgPSBwYXRoLT5wcmV2RWRnZShwcmV2X2FyYywgc3RhXyk7CisgICAgICAgIERlbGF5IGxvYWRfZGVsYXkgPSBncmFwaF8tPmFyY0RlbGF5KHByZXZfZWRnZSwgcHJldl9hcmMsIGRjYWxjX2FwLT5pbmRleCgpKQorICAgICAgICAgIC8vIFJlbW92ZSBpbnRyaW5zaWMgZGVsYXkgdG8gZmluZCBsb2FkIGRlcGVuZGVudCBkZWxheS4KKyAgICAgICAgICAtIGNvcm5lcl9hcmMtPmludHJpbnNpY0RlbGF5KCk7CisgICAgICAgIGxvYWRfZGVsYXlzLnB1c2hfYmFjayhwYWlyKGksIGxvYWRfZGVsYXkpKTsKKyAgICAgICAgZGVidWdQcmludChsb2dnZXJfLCBSU1osICJyZXBhaXJfc2V0dXAiLCAzLCAie30gbG9hZF9kZWxheSA9IHt9IiwKKyAgICAgICAgICAgICAgICAgICBwYXRoX3ZlcnRleC0+bmFtZShuZXR3b3JrXyksCisgICAgICAgICAgICAgICAgICAgZGVsYXlBc1N0cmluZyhsb2FkX2RlbGF5LCBzdGFfLCAzKSk7CisgICAgICB9CisgICAgfQorCisgICAgc29ydChsb2FkX2RlbGF5cy5iZWdpbigpLCBsb2FkX2RlbGF5cy5lbmQoKSwKKyAgICAgICAgIFtdKHBhaXI8aW50LCBEZWxheT4gcGFpcjEsCisgICAgICAgICAgICBwYWlyPGludCwgRGVsYXk+IHBhaXIyKSB7CisgICAgICAgICAgIHJldHVybiBwYWlyMS5zZWNvbmQgPiBwYWlyMi5zZWNvbmQ7CisgICAgICAgICB9KTsKKyAgICAvLyBBdHRhY2sgZ2F0ZXMgd2l0aCBsYXJnZXN0IGxvYWQgZGVsYXlzIGZpcnN0LgorICAgIGZvciAoYXV0byBpbmRleF9kZWxheSA6IGxvYWRfZGVsYXlzKSB7CisgICAgICBpbnQgZHJ2cl9pbmRleCA9IGluZGV4X2RlbGF5LmZpcnN0OworICAgICAgUGF0aFJlZiAqZHJ2cl9wYXRoID0gZXhwYW5kZWQucGF0aChkcnZyX2luZGV4KTsKKyAgICAgIFZlcnRleCAqZHJ2cl92ZXJ0ZXggPSBkcnZyX3BhdGgtPnZlcnRleChzdGFfKTsKKyAgICAgIGNvbnN0IFBpbiAqZHJ2cl9waW4gPSBkcnZyX3ZlcnRleC0+cGluKCk7CisgICAgICBMaWJlcnR5UG9ydCAqZHJ2cl9wb3J0ID0gbmV0d29ya18tPmxpYmVydHlQb3J0KGRydnJfcGluKTsKKyAgICAgIExpYmVydHlDZWxsICpkcnZyX2NlbGwgPSBkcnZyX3BvcnQgPyBkcnZyX3BvcnQtPmxpYmVydHlDZWxsKCkgOiBudWxscHRyOworICAgICAgaW50IGZhbm91dCA9IHRoaXMtPmZhbm91dChkcnZyX3ZlcnRleCk7CisgICAgICBkZWJ1Z1ByaW50KGxvZ2dlcl8sIFJTWiwgInJlcGFpcl9zZXR1cCIsIDIsICJ7fSB7fSBmYW5vdXQgPSB7fSIsCisgICAgICAgICAgICAgICAgIG5ldHdvcmtfLT5wYXRoTmFtZShkcnZyX3BpbiksCisgICAgICAgICAgICAgICAgIGRydnJfY2VsbCA/IGRydnJfY2VsbC0+bmFtZSgpIDogIm5vbmUiLAorICAgICAgICAgICAgICAgICBmYW5vdXQpOworCisgICAgICBpZiAodXBzaXplRHJ2cihkcnZyX3BhdGgsIGRydnJfaW5kZXgsICZleHBhbmRlZCkpIHsKKyAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgICAvLyBGb3IgdHJpc3RhdGUgbmV0cyBhbGwgd2UgY2FuIGRvIGlzIHJlc2l6ZSB0aGUgZHJpdmVyLgorICAgICAgYm9vbCB0cmlzdGF0ZV9kcnZyID0gaXNUcmlzdGF0ZURyaXZlcihkcnZyX3Bpbik7CisgICAgICBpZiAoZmFub3V0ID4gMQorICAgICAgICAgIC8vIFJlYnVmZmVyIGJsb3dzIHVwIG9uIGxhcmdlIGZhbm91dCBuZXRzLgorICAgICAgICAgICYmIGZhbm91dCA8IHJlYnVmZmVyX21heF9mYW5vdXRfCisgICAgICAgICAgJiYgIXRyaXN0YXRlX2RydnIpIHsgCisgICAgICAgIGludCByZWJ1ZmZlcl9jb3VudCA9IHJlYnVmZmVyKGRydnJfcGluKTsKKyAgICAgICAgaWYgKHJlYnVmZmVyX2NvdW50ID4gMCkgeworICAgICAgICAgIGRlYnVnUHJpbnQobG9nZ2VyXywgUlNaLCAicmVwYWlyX3NldHVwIiwgMiwgInJlYnVmZmVyIHt9IGluc2VydGVkIHt9IiwKKyAgICAgICAgICAgICAgICAgICAgIG5ldHdvcmtfLT5wYXRoTmFtZShkcnZyX3BpbiksCisgICAgICAgICAgICAgICAgICAgICByZWJ1ZmZlcl9jb3VudCk7CisgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgLy8gRG9uJ3Qgc3BsaXQgbG9hZHMgb24gbG93IGZhbm91dCBuZXRzLgorICAgICAgaWYgKGZhbm91dCA+IHNwbGl0X2xvYWRfbWluX2Zhbm91dF8KKyAgICAgICAgICAmJiAhdHJpc3RhdGVfZHJ2cikgeworICAgICAgICBzcGxpdExvYWRzKGRydnJfcGF0aCwgZHJ2cl9pbmRleCwgcGF0aF9zbGFjaywgJmV4cGFuZGVkKTsKKyAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKyAgfQorICByZXR1cm4gY2hhbmdlZDsKK30KKworYm9vbAorUmVzaXplcjo6dXBzaXplRHJ2cihQYXRoUmVmICpkcnZyX3BhdGgsCisgICAgICAgICAgICAgICAgICAgIGludCBkcnZyX2luZGV4LAorICAgICAgICAgICAgICAgICAgICBQYXRoRXhwYW5kZWQgKmV4cGFuZGVkKQoreworICBQaW4gKmRydnJfcGluID0gZHJ2cl9wYXRoLT5waW4odGhpcyk7CisgIGNvbnN0IERjYWxjQW5hbHlzaXNQdCAqZGNhbGNfYXAgPSBkcnZyX3BhdGgtPmRjYWxjQW5hbHlzaXNQdChzdGFfKTsKKyAgZmxvYXQgbG9hZF9jYXAgPSBncmFwaF9kZWxheV9jYWxjXy0+bG9hZENhcChkcnZyX3BpbiwgZGNhbGNfYXApOworICBpbnQgaW5faW5kZXggPSBkcnZyX2luZGV4IC0gMTsKKyAgUGF0aFJlZiAqaW5fcGF0aCA9IGV4cGFuZGVkLT5wYXRoKGluX2luZGV4KTsKKyAgUGluICppbl9waW4gPSBpbl9wYXRoLT5waW4oc3RhXyk7CisgIExpYmVydHlQb3J0ICppbl9wb3J0ID0gbmV0d29ya18tPmxpYmVydHlQb3J0KGluX3Bpbik7CisKKyAgZmxvYXQgcHJldl9kcml2ZTsKKyAgaWYgKGRydnJfaW5kZXggPj0gMikgeworICAgIGludCBwcmV2X2RydnJfaW5kZXggPSBkcnZyX2luZGV4IC0gMjsKKyAgICBQYXRoUmVmICpwcmV2X2RydnJfcGF0aCA9IGV4cGFuZGVkLT5wYXRoKHByZXZfZHJ2cl9pbmRleCk7CisgICAgUGluICpwcmV2X2RydnJfcGluID0gcHJldl9kcnZyX3BhdGgtPnBpbihzdGFfKTsKKyAgICBwcmV2X2RyaXZlID0gMC4wOworICAgIExpYmVydHlQb3J0ICpwcmV2X2RydnJfcG9ydCA9IG5ldHdvcmtfLT5saWJlcnR5UG9ydChwcmV2X2RydnJfcGluKTsKKyAgICBpZiAocHJldl9kcnZyX3BvcnQpIHsKKyAgICAgIHByZXZfZHJpdmUgPSBwcmV2X2RydnJfcG9ydC0+ZHJpdmVSZXNpc3RhbmNlKCk7CisgICAgfQorICB9CisgIGVsc2UKKyAgICBwcmV2X2RyaXZlID0gMC4wOworICBMaWJlcnR5UG9ydCAqZHJ2cl9wb3J0ID0gbmV0d29ya18tPmxpYmVydHlQb3J0KGRydnJfcGluKTsKKyAgTGliZXJ0eUNlbGwgKnVwc2l6ZSA9IHVwc2l6ZUNlbGwoaW5fcG9ydCwgZHJ2cl9wb3J0LCBsb2FkX2NhcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldl9kcml2ZSwgZGNhbGNfYXApOworICBpZiAodXBzaXplKSB7CisgICAgSW5zdGFuY2UgKmRydnIgPSBuZXR3b3JrXy0+aW5zdGFuY2UoZHJ2cl9waW4pOworICAgIGRlYnVnUHJpbnQobG9nZ2VyXywgUlNaLCAicmVwYWlyX3NldHVwIiwgMiwgInJlc2l6ZSB7fSB7fSAtPiB7fSIsCisgICAgICAgICAgICAgICBuZXR3b3JrXy0+cGF0aE5hbWUoZHJ2cl9waW4pLAorICAgICAgICAgICAgICAgZHJ2cl9wb3J0LT5saWJlcnR5Q2VsbCgpLT5uYW1lKCksCisgICAgICAgICAgICAgICB1cHNpemUtPm5hbWUoKSk7CisgICAgaWYgKHJlcGxhY2VDZWxsKGRydnIsIHVwc2l6ZSwgdHJ1ZSkpIHsKKyAgICAgIHJlc2l6ZV9jb3VudF8rKzsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgfQorICByZXR1cm4gZmFsc2U7Cit9CisKK0xpYmVydHlDZWxsICoKK1Jlc2l6ZXI6OnVwc2l6ZUNlbGwoTGliZXJ0eVBvcnQgKmluX3BvcnQsCisgICAgICAgICAgICAgICAgICAgIExpYmVydHlQb3J0ICpkcnZyX3BvcnQsCisgICAgICAgICAgICAgICAgICAgIGZsb2F0IGxvYWRfY2FwLAorICAgICAgICAgICAgICAgICAgICBmbG9hdCBwcmV2X2RyaXZlLAorICAgICAgICAgICAgICAgICAgICBjb25zdCBEY2FsY0FuYWx5c2lzUHQgKmRjYWxjX2FwKQoreworICBpbnQgbGliX2FwID0gZGNhbGNfYXAtPmxpYmVydHlJbmRleCgpOworICBMaWJlcnR5Q2VsbCAqY2VsbCA9IGRydnJfcG9ydC0+bGliZXJ0eUNlbGwoKTsKKyAgTGliZXJ0eUNlbGxTZXEgKmVxdWl2X2NlbGxzID0gc3RhXy0+ZXF1aXZDZWxscyhjZWxsKTsKKyAgaWYgKGVxdWl2X2NlbGxzKSB7CisgICAgY29uc3QgY2hhciAqaW5fcG9ydF9uYW1lID0gaW5fcG9ydC0+bmFtZSgpOworICAgIGNvbnN0IGNoYXIgKmRydnJfcG9ydF9uYW1lID0gZHJ2cl9wb3J0LT5uYW1lKCk7CisgICAgc29ydChlcXVpdl9jZWxscywKKyAgICAgICAgIFs9XSAoY29uc3QgTGliZXJ0eUNlbGwgKmNlbGwxLAorICAgICAgICAgICAgICBjb25zdCBMaWJlcnR5Q2VsbCAqY2VsbDIpIHsKKyAgICAgICAgICAgTGliZXJ0eVBvcnQgKnBvcnQxPWNlbGwxLT5maW5kTGliZXJ0eVBvcnQoZHJ2cl9wb3J0X25hbWUpLT5jb3JuZXJQb3J0KGxpYl9hcCk7CisgICAgICAgICAgIExpYmVydHlQb3J0ICpwb3J0Mj1jZWxsMi0+ZmluZExpYmVydHlQb3J0KGRydnJfcG9ydF9uYW1lKS0+Y29ybmVyUG9ydChsaWJfYXApOworICAgICAgICAgICByZXR1cm4gcG9ydDEtPmRyaXZlUmVzaXN0YW5jZSgpID4gcG9ydDItPmRyaXZlUmVzaXN0YW5jZSgpOworICAgICAgICAgfSk7CisgICAgZmxvYXQgZHJpdmUgPSBkcnZyX3BvcnQtPmNvcm5lclBvcnQobGliX2FwKS0+ZHJpdmVSZXNpc3RhbmNlKCk7CisgICAgZmxvYXQgZGVsYXkgPSBnYXRlRGVsYXkoZHJ2cl9wb3J0LCBsb2FkX2NhcCwgdGd0X3NsZXdfZGNhbGNfYXBfKQorICAgICAgKyBwcmV2X2RyaXZlICogaW5fcG9ydC0+Y29ybmVyUG9ydChsaWJfYXApLT5jYXBhY2l0YW5jZSgpOworICAgIGZvciAoTGliZXJ0eUNlbGwgKmVxdWl2IDogKmVxdWl2X2NlbGxzKSB7CisgICAgICBMaWJlcnR5Q2VsbCAqZXF1aXZfY29ybmVyID0gZXF1aXYtPmNvcm5lckNlbGwobGliX2FwKTsKKyAgICAgIExpYmVydHlQb3J0ICplcXVpdl9kcnZyID0gZXF1aXZfY29ybmVyLT5maW5kTGliZXJ0eVBvcnQoZHJ2cl9wb3J0X25hbWUpOworICAgICAgTGliZXJ0eVBvcnQgKmVxdWl2X2lucHV0ID0gZXF1aXZfY29ybmVyLT5maW5kTGliZXJ0eVBvcnQoaW5fcG9ydF9uYW1lKTsKKyAgICAgIGZsb2F0IGVxdWl2X2RyaXZlID0gZXF1aXZfZHJ2ci0+ZHJpdmVSZXNpc3RhbmNlKCk7CisgICAgICAvLyBJbmNsdWRlIGRlbGF5IG9mIHByZXZpb3VzIGRyaXZlciBpbnRvIGVxdWl2IGdhdGUuCisgICAgICBmbG9hdCBlcXVpdl9kZWxheSA9IGdhdGVEZWxheShlcXVpdl9kcnZyLCBsb2FkX2NhcCwgZGNhbGNfYXApCisgICAgICAgICsgcHJldl9kcml2ZSAqIGVxdWl2X2lucHV0LT5jYXBhY2l0YW5jZSgpOworICAgICAgaWYgKCFkb250VXNlKGVxdWl2KQorICAgICAgICAgICYmIGVxdWl2X2RyaXZlIDwgZHJpdmUKKyAgICAgICAgICAmJiBlcXVpdl9kZWxheSA8IGRlbGF5KQorICAgICAgICByZXR1cm4gZXF1aXY7CisgICAgfQorICB9CisgIHJldHVybiBudWxscHRyOworfQorCit2b2lkCitSZXNpemVyOjpzcGxpdExvYWRzKFBhdGhSZWYgKmRydnJfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgaW50IGRydnJfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgIFNsYWNrIGRydnJfc2xhY2ssCisgICAgICAgICAgICAgICAgICAgIFBhdGhFeHBhbmRlZCAqZXhwYW5kZWQpCit7CisgIFBpbiAqZHJ2cl9waW4gPSBkcnZyX3BhdGgtPnBpbih0aGlzKTsKKyAgUGF0aFJlZiAqbG9hZF9wYXRoID0gZXhwYW5kZWQtPnBhdGgoZHJ2cl9pbmRleCArIDEpOworICBWZXJ0ZXggKmxvYWRfdmVydGV4ID0gbG9hZF9wYXRoLT52ZXJ0ZXgoc3RhXyk7CisgIFBpbiAqbG9hZF9waW4gPSBsb2FkX3ZlcnRleC0+cGluKCk7CisgIC8vIERpdmlkZSBhbmQgY29ucXVlci4KKyAgZGVidWdQcmludChsb2dnZXJfLCBSU1osICJyZXBhaXJfc2V0dXAiLCAyLCAic3BsaXQgbG9hZHMge30gLT4ge30iLAorICAgICAgICAgICAgIG5ldHdvcmtfLT5wYXRoTmFtZShkcnZyX3BpbiksCisgICAgICAgICAgICAgbmV0d29ya18tPnBhdGhOYW1lKGxvYWRfcGluKSk7CisKKyAgVmVydGV4ICpkcnZyX3ZlcnRleCA9IGRydnJfcGF0aC0+dmVydGV4KHN0YV8pOworICBjb25zdCBSaXNlRmFsbCAqcmYgPSBkcnZyX3BhdGgtPnRyYW5zaXRpb24oc3RhXyk7CisgIC8vIFNvcnQgZmFub3V0cyBvZiB0aGUgZHJ2ciBvbiB0aGUgY3JpdGljYWwgcGF0aCBieSBzbGFjayBtYXJnaW4KKyAgLy8gd3J0IHRoZSBjcml0aWNhbCBwYXRoIHNsYWNrLgorICB2ZWN0b3I8cGFpcjxWZXJ0ZXgqLCBTbGFjaz4+IGZhbm91dF9zbGFja3M7CisgIFZlcnRleE91dEVkZ2VJdGVyYXRvciBlZGdlX2l0ZXIoZHJ2cl92ZXJ0ZXgsIGdyYXBoXyk7CisgIHdoaWxlIChlZGdlX2l0ZXIuaGFzTmV4dCgpKSB7CisgICAgRWRnZSAqZWRnZSA9IGVkZ2VfaXRlci5uZXh0KCk7CisgICAgVmVydGV4ICpmYW5vdXRfdmVydGV4ID0gZWRnZS0+dG8oZ3JhcGhfKTsKKyAgICBTbGFjayBmYW5vdXRfc2xhY2sgPSBzdGFfLT52ZXJ0ZXhTbGFjayhmYW5vdXRfdmVydGV4LCByZiwgbWF4Xyk7CisgICAgU2xhY2sgc2xhY2tfbWFyZ2luID0gZmFub3V0X3NsYWNrIC0gZHJ2cl9zbGFjazsKKyAgICBkZWJ1Z1ByaW50KGxvZ2dlcl8sIFJTWiwgInJlcGFpcl9zZXR1cCIsIDMsICIgZmFuaW4ge30gc2xhY2tfbWFyZ2luID0ge30iLAorICAgICAgICAgICAgICAgbmV0d29ya18tPnBhdGhOYW1lKGZhbm91dF92ZXJ0ZXgtPnBpbigpKSwKKyAgICAgICAgICAgICAgIGRlbGF5QXNTdHJpbmcoc2xhY2tfbWFyZ2luLCBzdGFfLCAzKSk7CisgICAgZmFub3V0X3NsYWNrcy5wdXNoX2JhY2socGFpcjxWZXJ0ZXgqLCBTbGFjaz4oZmFub3V0X3ZlcnRleCwgc2xhY2tfbWFyZ2luKSk7CisgIH0KKworICBzb3J0KGZhbm91dF9zbGFja3MuYmVnaW4oKSwgZmFub3V0X3NsYWNrcy5lbmQoKSwKKyAgICAgICBbXShwYWlyPFZlcnRleCosIFNsYWNrPiBwYWlyMSwKKyAgICAgICAgICBwYWlyPFZlcnRleCosIFNsYWNrPiBwYWlyMikgeworICAgICAgICAgcmV0dXJuIHBhaXIxLnNlY29uZCA+IHBhaXIyLnNlY29uZDsKKyAgICAgICB9KTsKKworICBOZXQgKm5ldCA9IG5ldHdvcmtfLT5uZXQoZHJ2cl9waW4pOworCisgIHN0cmluZyBidWZmZXJfbmFtZSA9IG1ha2VVbmlxdWVJbnN0TmFtZSgic3BsaXQiKTsKKyAgSW5zdGFuY2UgKnBhcmVudCA9IGRiX25ldHdvcmtfLT50b3BJbnN0YW5jZSgpOworICBMaWJlcnR5Q2VsbCAqYnVmZmVyX2NlbGwgPSBidWZmZXJfbG93ZXN0X2RyaXZlXzsKKyAgSW5zdGFuY2UgKmJ1ZmZlciA9IG1ha2VJbnN0YW5jZShidWZmZXJfY2VsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJfbmFtZS5jX3N0cigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudCk7CisgIGpvdXJuYWxNYWtlQnVmZmVyKGJ1ZmZlcik7CisgIGluc2VydGVkX2J1ZmZlcl9jb3VudF8rKzsKKyAgZGVzaWduQXJlYUluY3IoYXJlYShkYl9uZXR3b3JrXy0+Y2VsbChidWZmZXJfY2VsbCkpKTsKKworICBOZXQgKm91dF9uZXQgPSBtYWtlVW5pcXVlTmV0KCk7CisgIExpYmVydHlQb3J0ICppbnB1dCwgKm91dHB1dDsKKyAgYnVmZmVyX2NlbGwtPmJ1ZmZlclBvcnRzKGlucHV0LCBvdXRwdXQpOworICBQb2ludCBkcnZyX2xvYyA9IGRiX25ldHdvcmtfLT5sb2NhdGlvbihkcnZyX3Bpbik7CisgIHNldExvY2F0aW9uKGJ1ZmZlciwgZHJ2cl9sb2MpOworCisgIC8vIFNwbGl0IHRoZSBsb2FkcyB3aXRoIGV4dHJhIHNsYWNrIHRvIGFuIGluc2VydGVkIGJ1ZmZlci4KKyAgLy8gYmVmb3JlCisgIC8vIGRydnJfcGluIC0+IG5ldCAtPiBsb2FkX3BpbnMKKyAgLy8gYWZ0ZXIKKyAgLy8gZHJ2cl9waW4gLT4gbmV0IC0+IGxvYWRfcGlucyB3aXRoIGxvdyBzbGFjaworICAvLyAgICAgICAgICAgICAgICAgLT4gYnVmZmVyX2luIC0+IG5ldCAtPiByZXN0IG9mIGxvYWRzCisgIHN0YV8tPmNvbm5lY3RQaW4oYnVmZmVyLCBpbnB1dCwgbmV0KTsKKyAgcGFyYXNpdGljc0ludmFsaWQobmV0KTsKKyAgc3RhXy0+Y29ubmVjdFBpbihidWZmZXIsIG91dHB1dCwgb3V0X25ldCk7CisgIGludCBzcGxpdF9pbmRleCA9IGZhbm91dF9zbGFja3Muc2l6ZSgpIC8gMjsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBzcGxpdF9pbmRleDsgaSsrKSB7CisgICAgcGFpcjxWZXJ0ZXgqLCBTbGFjaz4gZmFub3V0X3NsYWNrID0gZmFub3V0X3NsYWNrc1tpXTsKKyAgICBWZXJ0ZXggKmxvYWRfdmVydGV4ID0gZmFub3V0X3NsYWNrLmZpcnN0OworICAgIFBpbiAqbG9hZF9waW4gPSBsb2FkX3ZlcnRleC0+cGluKCk7CisgICAgLy8gTGVhdmUgcG9ydHMgY29ubmVjdGVkIHRvIG9yaWdpbmFsIG5ldCBzbyB2ZXJpbG9nIHBvcnQgbmFtZXMgYXJlIHByZXNlcnZlZC4KKyAgICBpZiAoIW5ldHdvcmtfLT5pc1RvcExldmVsUG9ydChsb2FkX3BpbikpIHsKKyAgICAgIExpYmVydHlQb3J0ICpsb2FkX3BvcnQgPSBuZXR3b3JrXy0+bGliZXJ0eVBvcnQobG9hZF9waW4pOworICAgICAgSW5zdGFuY2UgKmxvYWQgPSBuZXR3b3JrXy0+aW5zdGFuY2UobG9hZF9waW4pOworCisgICAgICBzdGFfLT5kaXNjb25uZWN0UGluKGxvYWRfcGluKTsKKyAgICAgIHN0YV8tPmNvbm5lY3RQaW4obG9hZCwgbG9hZF9wb3J0LCBvdXRfbmV0KTsKKyAgICB9CisgIH0KKyAgUGluICpidWZmZXJfb3V0X3BpbiA9IG5ldHdvcmtfLT5maW5kUGluKGJ1ZmZlciwgb3V0cHV0KTsKKyAgcmVzaXplVG9UYXJnZXRTbGV3KGJ1ZmZlcl9vdXRfcGluLCBmYWxzZSk7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwordm9pZAorUmVzaXplcjo6cmVwYWlySG9sZChmbG9hdCBzbGFja19tYXJnaW4sCisgICAgICAgICAgICAgICAgICAgIGJvb2wgYWxsb3dfc2V0dXBfdmlvbGF0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgLy8gTWF4IGJ1ZmZlciBjb3VudCBhcyBwZXJjZW50IG9mIGRlc2lnbiBpbnN0YW5jZSBjb3VudC4KKyAgICAgICAgICAgICAgICAgICAgZmxvYXQgbWF4X2J1ZmZlcl9wZXJjZW50KQoreworICBpbml0KCk7CisgIExpYmVydHlDZWxsICpidWZmZXJfY2VsbCA9IGZpbmRIb2xkQnVmZmVyKCk7CisgIHN0YV8tPmZpbmRSZXF1aXJlZHMoKTsKKyAgVmVydGV4U2V0ICplbmRzID0gc3RhXy0+c2VhcmNoKCktPmVuZHBvaW50cygpOworICBpbnQgbWF4X2J1ZmZlcl9jb3VudCA9IG1heF9idWZmZXJfcGVyY2VudCAqIG5ldHdvcmtfLT5pbnN0YW5jZUNvdW50KCk7CisgIGluY3JlbWVudGFsUGFyYXNpdGljc0JlZ2luKCk7CisgIHJlcGFpckhvbGQoZW5kcywgYnVmZmVyX2NlbGwsIHNsYWNrX21hcmdpbiwKKyAgICAgICAgICAgICBhbGxvd19zZXR1cF92aW9sYXRpb25zLCBtYXhfYnVmZmVyX2NvdW50KTsKKworICAvLyBMZWF2ZSB0aGUgcGFyYXNpdGljZXMgdXAgdG8gZGF0ZS4KKyAgdXBkYXRlUGFyYXNpdGljcygpOworICBpbmNyZW1lbnRhbFBhcmFzaXRpY3NFbmQoKTsKK30KKworLy8gRm9yIHRlc3RpbmcvZGVidWcuCit2b2lkCitSZXNpemVyOjpyZXBhaXJIb2xkKFBpbiAqZW5kX3BpbiwKKyAgICAgICAgICAgICAgICAgICAgTGliZXJ0eUNlbGwgKmJ1ZmZlcl9jZWxsLAorICAgICAgICAgICAgICAgICAgICBmbG9hdCBzbGFja19tYXJnaW4sCisgICAgICAgICAgICAgICAgICAgIGJvb2wgYWxsb3dfc2V0dXBfdmlvbGF0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgZmxvYXQgbWF4X2J1ZmZlcl9wZXJjZW50KQoreworICBWZXJ0ZXggKmVuZCA9IGdyYXBoXy0+cGluTG9hZFZlcnRleChlbmRfcGluKTsKKyAgVmVydGV4U2V0IGVuZHM7CisgIGVuZHMuaW5zZXJ0KGVuZCk7CisKKyAgaW5pdCgpOworICBzdGFfLT5maW5kUmVxdWlyZWRzKCk7CisgIGludCBtYXhfYnVmZmVyX2NvdW50ID0gbWF4X2J1ZmZlcl9wZXJjZW50ICogbmV0d29ya18tPmluc3RhbmNlQ291bnQoKTsKKyAgaW5jcmVtZW50YWxQYXJhc2l0aWNzQmVnaW4oKTsKKyAgcmVwYWlySG9sZCgmZW5kcywgYnVmZmVyX2NlbGwsIHNsYWNrX21hcmdpbiwgYWxsb3dfc2V0dXBfdmlvbGF0aW9ucywKKyAgICAgICAgICAgICBtYXhfYnVmZmVyX2NvdW50KTsKKyAgLy8gTGVhdmUgdGhlIHBhcmFzaXRpY2VzIHVwIHRvIGRhdGUuCisgIHVwZGF0ZVBhcmFzaXRpY3MoKTsKKyAgaW5jcmVtZW50YWxQYXJhc2l0aWNzRW5kKCk7Cit9CisKKy8vIEZpbmQgdGhlIGJ1ZmZlciB3aXRoIHRoZSBtb3N0IGRlbGF5IGluIHRoZSBmYXN0ZXN0IGNvcm5lci4KK0xpYmVydHlDZWxsICoKK1Jlc2l6ZXI6OmZpbmRIb2xkQnVmZmVyKCkKK3sKKyAgTGliZXJ0eUNlbGwgKm1heF9idWZmZXIgPSBudWxscHRyOworICBmbG9hdCBtYXhfZGVsYXkgPSAwLjA7CisgIGZvciAoTGliZXJ0eUNlbGwgKmJ1ZmZlciA6IGJ1ZmZlcl9jZWxsc18pIHsKKyAgICBmbG9hdCBidWZmZXJfbWluX2RlbGF5ID0gYnVmZmVySG9sZERlbGF5KGJ1ZmZlcik7CisgICAgaWYgKG1heF9idWZmZXIgPT0gbnVsbHB0cgorICAgICAgICB8fCBidWZmZXJfbWluX2RlbGF5ID4gbWF4X2RlbGF5KSB7CisgICAgICBtYXhfYnVmZmVyID0gYnVmZmVyOworICAgICAgbWF4X2RlbGF5ID0gYnVmZmVyX21pbl9kZWxheTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIG1heF9idWZmZXI7Cit9CisKK2Zsb2F0CitSZXNpemVyOjpidWZmZXJIb2xkRGVsYXkoTGliZXJ0eUNlbGwgKmJ1ZmZlcikKK3sKKyAgRGVsYXkgZGVsYXlzW1Jpc2VGYWxsOjppbmRleF9jb3VudF07CisgIGJ1ZmZlckhvbGREZWxheXMoYnVmZmVyLCBkZWxheXMpOworICByZXR1cm4gbWluKGRlbGF5c1tSaXNlRmFsbDo6cmlzZUluZGV4KCldLAorICAgICAgICAgICAgIGRlbGF5c1tSaXNlRmFsbDo6ZmFsbEluZGV4KCldKTsKK30KKworLy8gTWluIHNlbGYgZGVsYXkgYWNyb3NzIGNvcm5lcnM7IGJ1ZmZlciAtPiBidWZmZXIKK3ZvaWQKK1Jlc2l6ZXI6OmJ1ZmZlckhvbGREZWxheXMoTGliZXJ0eUNlbGwgKmJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmV0dXJuIHZhbHVlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgRGVsYXkgZGVsYXlzW1Jpc2VGYWxsOjppbmRleF9jb3VudF0pCit7CisgIExpYmVydHlQb3J0ICppbnB1dCwgKm91dHB1dDsKKyAgYnVmZmVyLT5idWZmZXJQb3J0cyhpbnB1dCwgb3V0cHV0KTsKKworICBmb3IgKGludCByZl9pbmRleCA6IFJpc2VGYWxsOjpyYW5nZUluZGV4KCkpCisgICAgZGVsYXlzW3JmX2luZGV4XSA9IE1pbk1heDo6bWluKCktPmluaXRWYWx1ZSgpOworICBmb3IgKENvcm5lciAqY29ybmVyIDogKnN0YV8tPmNvcm5lcnMoKSkgeworICAgIExpYmVydHlQb3J0ICpjb3JuZXJfcG9ydCA9IGlucHV0LT5jb3JuZXJQb3J0KGNvcm5lci0+bGliZXJ0eUluZGV4KG1heF8pKTsKKyAgICBjb25zdCBEY2FsY0FuYWx5c2lzUHQgKmRjYWxjX2FwID0gY29ybmVyLT5maW5kRGNhbGNBbmFseXNpc1B0KG1heF8pOworICAgIGZsb2F0IGxvYWRfY2FwID0gY29ybmVyX3BvcnQtPmNhcGFjaXRhbmNlKCk7CisgICAgQXJjRGVsYXkgZ2F0ZV9kZWxheXNbUmlzZUZhbGw6OmluZGV4X2NvdW50XTsKKyAgICBTbGV3IHNsZXdzW1Jpc2VGYWxsOjppbmRleF9jb3VudF07CisgICAgZ2F0ZURlbGF5cyhvdXRwdXQsIGxvYWRfY2FwLCBkY2FsY19hcCwgZ2F0ZV9kZWxheXMsIHNsZXdzKTsKKyAgICBmb3IgKGludCByZl9pbmRleCA6IFJpc2VGYWxsOjpyYW5nZUluZGV4KCkpCisgICAgICBkZWxheXNbcmZfaW5kZXhdID0gbWluKGRlbGF5c1tyZl9pbmRleF0sIGdhdGVfZGVsYXlzW3JmX2luZGV4XSk7CisgIH0KK30KKwordm9pZAorUmVzaXplcjo6cmVwYWlySG9sZChWZXJ0ZXhTZXQgKmVuZHMsCisgICAgICAgICAgICAgICAgICAgIExpYmVydHlDZWxsICpidWZmZXJfY2VsbCwKKyAgICAgICAgICAgICAgICAgICAgZmxvYXQgc2xhY2tfbWFyZ2luLAorICAgICAgICAgICAgICAgICAgICBib29sIGFsbG93X3NldHVwX3Zpb2xhdGlvbnMsCisgICAgICAgICAgICAgICAgICAgIGludCBtYXhfYnVmZmVyX2NvdW50KQoreworICAvLyBGaW5kIGVuZHBvaW50cyB3aXRoIGhvbGQgdmlvbGF0aW9uLgorICBWZXJ0ZXhTZXQgaG9sZF9mYWlsdXJlczsKKyAgU2xhY2sgd29yc3Rfc2xhY2s7CisgIGZpbmRIb2xkVmlvbGF0aW9ucyhlbmRzLCBzbGFja19tYXJnaW4sIHdvcnN0X3NsYWNrLCBob2xkX2ZhaWx1cmVzKTsKKyAgaWYgKCFob2xkX2ZhaWx1cmVzLmVtcHR5KCkpIHsKKyAgICBsb2dnZXJfLT5pbmZvKFJTWiwgNDYsICJGb3VuZCB7fSBlbmRwb2ludHMgd2l0aCBob2xkIHZpb2xhdGlvbnMuIiwKKyAgICAgICAgICAgICAgICAgIGhvbGRfZmFpbHVyZXMuc2l6ZSgpKTsKKyAgICBpbnNlcnRlZF9idWZmZXJfY291bnRfID0gMDsKKyAgICBpbnQgcmVwYWlyX2NvdW50ID0gMTsKKyAgICBpbnQgcGFzcyA9IDE7CisgICAgd2hpbGUgKCFob2xkX2ZhaWx1cmVzLmVtcHR5KCkKKyAgICAgICAgICAgLy8gTWFrZSBzdXJlIHdlIGFyZSBtYWtpbmcgcHJvZ3Jlc3MuCisgICAgICAgICAgICYmIHJlcGFpcl9jb3VudCA+IDAKKyAgICAgICAgICAgJiYgIW92ZXJNYXhBcmVhKCkKKyAgICAgICAgICAgJiYgaW5zZXJ0ZWRfYnVmZmVyX2NvdW50XyA8PSBtYXhfYnVmZmVyX2NvdW50KSB7CisgICAgICByZXBhaXJfY291bnQgPSByZXBhaXJIb2xkUGFzcyhob2xkX2ZhaWx1cmVzLCBidWZmZXJfY2VsbCwgc2xhY2tfbWFyZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dfc2V0dXBfdmlvbGF0aW9ucywgbWF4X2J1ZmZlcl9jb3VudCk7CisgICAgICBkZWJ1Z1ByaW50KGxvZ2dlcl8sIFJTWiwgInJlcGFpcl9ob2xkIiwgMSwKKyAgICAgICAgICAgICAgICAgInBhc3Mge30gd29yc3Qgc2xhY2sge30gZmFpbHVyZXMge30gaW5zZXJ0ZWQge30iLAorICAgICAgICAgICAgICAgICBwYXNzLAorICAgICAgICAgICAgICAgICBkZWxheUFzU3RyaW5nKHdvcnN0X3NsYWNrLCBzdGFfLCAzKSwKKyAgICAgICAgICAgICAgICAgaG9sZF9mYWlsdXJlcyAuc2l6ZSgpLAorICAgICAgICAgICAgICAgICByZXBhaXJfY291bnQpOworICAgICAgc3RhXy0+ZmluZFJlcXVpcmVkcygpOworICAgICAgZmluZEhvbGRWaW9sYXRpb25zKGVuZHMsIHNsYWNrX21hcmdpbiwgd29yc3Rfc2xhY2ssIGhvbGRfZmFpbHVyZXMpOworICAgICAgcGFzcysrOworICAgIH0KKyAgICBpZiAoc2xhY2tfbWFyZ2luID09IDAuMCAmJiBmdXp6eUxlc3Mod29yc3Rfc2xhY2ssIDAuMCkpCisgICAgICBsb2dnZXJfLT53YXJuKFJTWiwgNjYsICJVbmFibGUgdG8gcmVwYWlyIGFsbCBob2xkIHZpb2xhdGlvbnMuIik7CisgICAgZWxzZSBpZiAoZnV6enlMZXNzKHdvcnN0X3NsYWNrLCBzbGFja19tYXJnaW4pKQorICAgICAgbG9nZ2VyXy0+d2FybihSU1osIDY0LCAiVW5hYmxlIHRvIHJlcGFpciBhbGwgaG9sZCBjaGVja3Mgd2l0aGluIG1hcmdpbi4iKTsKKworICAgIGlmIChpbnNlcnRlZF9idWZmZXJfY291bnRfID4gMCkgeworICAgICAgbG9nZ2VyXy0+aW5mbyhSU1osIDMyLCAiSW5zZXJ0ZWQge30gaG9sZCBidWZmZXJzLiIsIGluc2VydGVkX2J1ZmZlcl9jb3VudF8pOworICAgICAgbGV2ZWxfZHJ2cl92ZXJ0aWNlc192YWxpZF8gPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKGluc2VydGVkX2J1ZmZlcl9jb3VudF8gPiBtYXhfYnVmZmVyX2NvdW50KQorICAgICAgbG9nZ2VyXy0+ZXJyb3IoUlNaLCA2MCwgIk1heCBidWZmZXIgY291bnQgcmVhY2hlZC4iKTsKKyAgICBpZiAob3Zlck1heEFyZWEoKSkKKyAgICAgIGxvZ2dlcl8tPmVycm9yKFJTWiwgNTAsICJNYXggdXRpbGl6YXRpb24gcmVhY2hlZC4iKTsKKyAgfQorICBlbHNlCisgICAgbG9nZ2VyXy0+aW5mbyhSU1osIDMzLCAiTm8gaG9sZCB2aW9sYXRpb25zIGZvdW5kLiIpOworfQorCit2b2lkCitSZXNpemVyOjpmaW5kSG9sZFZpb2xhdGlvbnMoVmVydGV4U2V0ICplbmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHNsYWNrX21hcmdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXR1cm4gdmFsdWVzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNsYWNrICZ3b3JzdF9zbGFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZXJ0ZXhTZXQgJmhvbGRfdmlvbGF0aW9ucykKK3sKKyAgd29yc3Rfc2xhY2sgPSBJTkY7CisgIGhvbGRfdmlvbGF0aW9ucy5jbGVhcigpOworICBkZWJ1Z1ByaW50KGxvZ2dlcl8sIFJTWiwgInJlcGFpcl9ob2xkIiwgMywgIkhvbGQgdmlvbGF0aW9ucyIpOworICBmb3IgKFZlcnRleCAqZW5kIDogKmVuZHMpIHsKKyAgICBTbGFjayBzbGFjayA9IHN0YV8tPnZlcnRleFNsYWNrKGVuZCwgTWluTWF4OjptaW4oKSk7CisgICAgaWYgKCFzdGFfLT5pc0Nsb2NrKGVuZC0+cGluKCkpCisgICAgICAgICYmIGZ1enp5TGVzcyhzbGFjaywgc2xhY2tfbWFyZ2luKSkgeworICAgICAgZGVidWdQcmludChsb2dnZXJfLCBSU1osICJyZXBhaXJfaG9sZCIsIDMsICIge30iLAorICAgICAgICAgICAgICAgICBlbmQtPm5hbWUoc2RjX25ldHdvcmtfKSk7CisgICAgICBpZiAoc2xhY2sgPCB3b3JzdF9zbGFjaykKKyAgICAgICAgd29yc3Rfc2xhY2sgPSBzbGFjazsKKyAgICAgIGhvbGRfdmlvbGF0aW9ucy5pbnNlcnQoZW5kKTsKKyAgICB9CisgIH0KK30KKworaW50CitSZXNpemVyOjpyZXBhaXJIb2xkUGFzcyhWZXJ0ZXhTZXQgJmhvbGRfZmFpbHVyZXMsCisgICAgICAgICAgICAgICAgICAgICAgICBMaWJlcnR5Q2VsbCAqYnVmZmVyX2NlbGwsCisgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBzbGFja19tYXJnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFsbG93X3NldHVwX3Zpb2xhdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWF4X2J1ZmZlcl9jb3VudCkKK3sKKyAgVmVydGV4U2V0IGZhbmlucyA9IGZpbmRIb2xkRmFuaW5zKGhvbGRfZmFpbHVyZXMpOworICBWZXJ0ZXhTZXEgc29ydGVkX2ZhbmlucyA9IHNvcnRIb2xkRmFuaW5zKGZhbmlucyk7CisgIAorICBpbnQgcmVwYWlyX2NvdW50ID0gMDsKKyAgaW50IG1heF9yZXBhaXJfY291bnQgPSBtYXgoc3RhdGljX2Nhc3Q8aW50Pihob2xkX2ZhaWx1cmVzLnNpemUoKSAqIC4yKSwgMTApOworICBmb3IoaW50IGkgPSAwOyBpIDwgc29ydGVkX2Zhbmlucy5zaXplKCkgJiYgcmVwYWlyX2NvdW50IDwgbWF4X3JlcGFpcl9jb3VudCA7IGkrKykgeworICAgIFZlcnRleCAqdmVydGV4ID0gc29ydGVkX2Zhbmluc1tpXTsKKyAgICBQaW4gKmRydnJfcGluID0gdmVydGV4LT5waW4oKTsKKyAgICBOZXQgKm5ldCA9IG5ldHdvcmtfLT5pc1RvcExldmVsUG9ydChkcnZyX3BpbikKKyAgICAgID8gbmV0d29ya18tPm5ldChuZXR3b3JrXy0+dGVybShkcnZyX3BpbikpCisgICAgICA6IG5ldHdvcmtfLT5uZXQoZHJ2cl9waW4pOworICAgIHVwZGF0ZVBhcmFzaXRpY3MoKTsKKyAgICBTbGFjayBkcnZyX3NsYWNrc1tSaXNlRmFsbDo6aW5kZXhfY291bnRdW01pbk1heDo6aW5kZXhfY291bnRdOworICAgIHN0YV8tPnZlcnRleFNsYWNrcyh2ZXJ0ZXgsIGRydnJfc2xhY2tzKTsKKyAgICBpbnQgbWluX2luZGV4ID0gTWluTWF4OjptaW5JbmRleCgpOworICAgIGludCBtYXhfaW5kZXggPSBNaW5NYXg6Om1heEluZGV4KCk7CisgICAgY29uc3QgUmlzZUZhbGwgKmRydnJfcmYgPSAoZHJ2cl9zbGFja3NbUmlzZUZhbGw6OnJpc2VJbmRleCgpXVttaW5faW5kZXhdIDwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcnZyX3NsYWNrc1tSaXNlRmFsbDo6ZmFsbEluZGV4KCldW21pbl9pbmRleF0pCisgICAgICA/IFJpc2VGYWxsOjpyaXNlKCkKKyAgICAgIDogUmlzZUZhbGw6OmZhbGwoKTsKKyAgICBTbGFjayBkcnZyX2hvbGRfc2xhY2sgPSBkcnZyX3NsYWNrc1tkcnZyX3JmLT5pbmRleCgpXVttaW5faW5kZXhdIC0gc2xhY2tfbWFyZ2luOworICAgIFNsYWNrIGRydnJfc2V0dXBfc2xhY2sgPSBkcnZyX3NsYWNrc1tkcnZyX3JmLT5pbmRleCgpXVttYXhfaW5kZXhdOworICAgIGlmICghdmVydGV4LT5pc0NvbnN0YW50KCkKKyAgICAgICAgJiYgZnV6enlMZXNzKGRydnJfaG9sZF9zbGFjaywgMC4wKQorICAgICAgICAvLyBIYW5kcyBvZmYgc3BlY2lhbCBuZXRzLgorICAgICAgICAmJiAhZGJfbmV0d29ya18tPmlzU3BlY2lhbChuZXQpCisgICAgICAgICYmICFpc1RyaXN0YXRlRHJpdmVyKGRydnJfcGluKQorICAgICAgICAvLyBIYXZlIHRvIGhhdmUgZW5vdWdoIHNldHVwIHNsYWNrIHRvIGFkZCBkZWxheSB0byByZXBhaXIgdGhlIGhvbGQgdmlvbGF0aW9uLgorICAgICAgICAmJiAoYWxsb3dfc2V0dXBfdmlvbGF0aW9ucworICAgICAgICAgICAgfHwgZnV6enlMZXNzKGRydnJfaG9sZF9zbGFjaywgZHJ2cl9zZXR1cF9zbGFjaykpKSB7CisgICAgICBkZWJ1Z1ByaW50KGxvZ2dlcl8sIFJTWiwgInJlcGFpcl9ob2xkIiwgMiwgImRyaXZlciB7fSIsCisgICAgICAgICAgICAgICAgIHZlcnRleC0+bmFtZShzZGNfbmV0d29ya18pKTsKKyAgICAgIC8vIE9ubHkgYWRkIGRlbGF5IHRvIGxvYWRzIHdpdGggaG9sZCB2aW9sYXRpb25zLgorICAgICAgUGluU2VxIGxvYWRfcGluczsKKyAgICAgIGZsb2F0IGxvYWRfY2FwID0gMC4wOworICAgICAgYm9vbCBsb2Fkc19oYXZlX291dF9wb3J0ID0gZmFsc2U7CisgICAgICBWZXJ0ZXhPdXRFZGdlSXRlcmF0b3IgZWRnZV9pdGVyKHZlcnRleCwgZ3JhcGhfKTsKKyAgICAgIHdoaWxlIChlZGdlX2l0ZXIuaGFzTmV4dCgpKSB7CisgICAgICAgIEVkZ2UgKmVkZ2UgPSBlZGdlX2l0ZXIubmV4dCgpOworICAgICAgICBWZXJ0ZXggKmZhbm91dCA9IGVkZ2UtPnRvKGdyYXBoXyk7CisgICAgICAgIFNsYWNrIGZhbm91dF9zbGFjayA9IHN0YV8tPnZlcnRleFNsYWNrKGZhbm91dCwgTWluTWF4OjptaW4oKSk7CisgICAgICAgIGlmIChmYW5vdXRfc2xhY2sgPCBzbGFja19tYXJnaW4pIHsKKyAgICAgICAgICBQaW4gKmZhbm91dF9waW4gPSBmYW5vdXQtPnBpbigpOworICAgICAgICAgIGxvYWRfcGlucy5wdXNoX2JhY2soZmFub3V0X3Bpbik7CisgICAgICAgICAgaWYgKG5ldHdvcmtfLT5kaXJlY3Rpb24oZmFub3V0X3BpbiktPmlzQW55T3V0cHV0KCkKKyAgICAgICAgICAgICAgJiYgbmV0d29ya18tPmlzVG9wTGV2ZWxQb3J0KGZhbm91dF9waW4pKQorICAgICAgICAgICAgbG9hZHNfaGF2ZV9vdXRfcG9ydCA9IHRydWU7CisgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBMaWJlcnR5UG9ydCAqZmFub3V0X3BvcnQgPSBuZXR3b3JrXy0+bGliZXJ0eVBvcnQoZmFub3V0X3Bpbik7CisgICAgICAgICAgICBpZiAoZmFub3V0X3BvcnQpCisgICAgICAgICAgICAgIGxvYWRfY2FwICs9IGZhbm91dF9wb3J0LT5jYXBhY2l0YW5jZSgpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgICAgaWYgKCFsb2FkX3BpbnMuZW1wdHkoKSkgeworICAgICAgICAvLyBtdWx0aS1jb3JuZXIgc3VwcG9ydCBNSUEKKyAgICAgICAgY29uc3QgRGNhbGNBbmFseXNpc1B0ICpkY2FsY19hcCA9IHN0YV8tPmNtZENvcm5lcigpLT5maW5kRGNhbGNBbmFseXNpc1B0KG1heF8pOworICAgICAgICBEZWxheSBidWZmZXJfZGVsYXkxID0gYnVmZmVyRGVsYXkoYnVmZmVyX2NlbGwsIGRydnJfcmYsIGxvYWRfY2FwLCBkY2FsY19hcCk7CisgICAgICAgIC8vIE5lZWQgZW5vdWdoIHNsYWNrIHRvIGF0IGxlYXN0IGluc2VydCB0aGUgbGFzdCBidWZmZXIgd2l0aCBsb2Fkcy4KKyAgICAgICAgaWYgKGFsbG93X3NldHVwX3Zpb2xhdGlvbnMKKyAgICAgICAgICAgIHx8IChidWZmZXJfZGVsYXkxIDwgZHJ2cl9zbGFja3NbUmlzZUZhbGw6OnJpc2VJbmRleCgpXVttYXhfaW5kZXhdCisgICAgICAgICAgICAgICAgJiYgYnVmZmVyX2RlbGF5MSA8IGRydnJfc2xhY2tzW1Jpc2VGYWxsOjpmYWxsSW5kZXgoKV1bbWF4X2luZGV4XSkpIHsKKyAgICAgICAgICBEZWxheSBidWZmZXJfZGVsYXkgPSBidWZmZXJIb2xkRGVsYXkoYnVmZmVyX2NlbGwpOworICAgICAgICAgIERlbGF5IG1heF9pbnNlcnQgPSBtaW4oZHJ2cl9zbGFja3NbUmlzZUZhbGw6OnJpc2VJbmRleCgpXVttYXhfaW5kZXhdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJ2cl9zbGFja3NbUmlzZUZhbGw6OmZhbGxJbmRleCgpXVttYXhfaW5kZXhdKTsKKyAgICAgICAgICBpbnQgbWF4X2luc2VydF9jb3VudCA9IGRlbGF5SW5mKG1heF9pbnNlcnQpCisgICAgICAgICAgICA/IDEKKyAgICAgICAgICAgIDogKG1heF9pbnNlcnQgLSBidWZmZXJfZGVsYXkxKSAvIGJ1ZmZlcl9kZWxheSArIDE7CisgICAgICAgICAgaW50IGhvbGRfYnVmZmVyX2NvdW50ID0gKC1kcnZyX2hvbGRfc2xhY2sgPiBidWZmZXJfZGVsYXkxKQorICAgICAgICAgICAgPyBzdGQ6OmNlaWwoKC1kcnZyX2hvbGRfc2xhY2stYnVmZmVyX2RlbGF5MSkvYnVmZmVyX2RlbGF5KSsxCisgICAgICAgICAgICA6IDE7CisgICAgICAgICAgaW50IGJ1ZmZlcl9jb3VudCA9IGFsbG93X3NldHVwX3Zpb2xhdGlvbnMKKyAgICAgICAgICAgID8gaG9sZF9idWZmZXJfY291bnQKKyAgICAgICAgICAgIDogbWluKG1heF9pbnNlcnRfY291bnQsIGhvbGRfYnVmZmVyX2NvdW50KTsKKyAgICAgICAgICBkZWJ1Z1ByaW50KGxvZ2dlcl8sIFJTWiwgInJlcGFpcl9ob2xkIiwgMiwKKyAgICAgICAgICAgICAgICAgICAgICIge30gaG9sZD17fSBpbnNlcnRlZCB7fSBmb3Ige30ve30gbG9hZHMiLAorICAgICAgICAgICAgICAgICAgICAgdmVydGV4LT5uYW1lKHNkY19uZXR3b3JrXyksCisgICAgICAgICAgICAgICAgICAgICBkZWxheUFzU3RyaW5nKGRydnJfaG9sZF9zbGFjaywgdGhpcywgMyksCisgICAgICAgICAgICAgICAgICAgICBidWZmZXJfY291bnQsCisgICAgICAgICAgICAgICAgICAgICBsb2FkX3BpbnMuc2l6ZSgpLAorICAgICAgICAgICAgICAgICAgICAgZmFub3V0KHZlcnRleCkpOworICAgICAgICAgIG1ha2VIb2xkRGVsYXkodmVydGV4LCBidWZmZXJfY291bnQsIGxvYWRfcGlucywKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRzX2hhdmVfb3V0X3BvcnQsIGJ1ZmZlcl9jZWxsKTsKKyAgICAgICAgICByZXBhaXJfY291bnQgKz0gYnVmZmVyX2NvdW50OworICAgICAgICAgIGlmIChsb2dnZXJfLT5kZWJ1Z0NoZWNrKFJTWiwgInJlcGFpcl9ob2xkIiwgNCkpIHsKKyAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgbm8gc2V0dXAgdmlvbGF0aW9ucyBhcmUgaW50cm9kdWNlZC4KKyAgICAgICAgICAgIHVwZGF0ZVBhcmFzaXRpY3MoKTsKKyAgICAgICAgICAgIFNsYWNrIGRydnJfc2V0dXBfc2xhY2sxID0gc3RhXy0+dmVydGV4U2xhY2sodmVydGV4LCBtYXhfKTsKKyAgICAgICAgICAgIGlmIChkcnZyX3NldHVwX3NsYWNrMSA8IDAKKyAgICAgICAgICAgICAgICAmJiBkcnZyX3NldHVwX3NsYWNrMSA8IGRydnJfc2V0dXBfc2xhY2spCisgICAgICAgICAgICAgIHByaW50ZigiJXMgJXMgLT4gJXNcbiIsIHZlcnRleC0+bmFtZShuZXR3b3JrXyksCisgICAgICAgICAgICAgICAgICAgICBkZWxheUFzU3RyaW5nKGRydnJfc2V0dXBfc2xhY2ssIHN0YV8sIDMpLAorICAgICAgICAgICAgICAgICAgICAgZGVsYXlBc1N0cmluZyhkcnZyX3NldHVwX3NsYWNrMSwgc3RhXywgMykpOworICAgICAgICAgIH0KKyAgICAgICAgICBpZiAoaW5zZXJ0ZWRfYnVmZmVyX2NvdW50XyA+IG1heF9idWZmZXJfY291bnQKKyAgICAgICAgICAgICAgfHwgb3Zlck1heEFyZWEoKSkKKyAgICAgICAgICAgIHJldHVybiByZXBhaXJfY291bnQ7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKyAgcmV0dXJuIHJlcGFpcl9jb3VudDsKK30KKworVmVydGV4U2V0CitSZXNpemVyOjpmaW5kSG9sZEZhbmlucyhWZXJ0ZXhTZXQgJmVuZHMpCit7CisgIFNlYXJjaFByZWROb25SZWcyIHByZWQoc3RhXyk7CisgIEJmc0Jrd2RJdGVyYXRvciBpdGVyKEJmc0luZGV4OjpvdGhlciwgJnByZWQsIHRoaXMpOworICBmb3IgKFZlcnRleCAqdmVydGV4IDogZW5kcykKKyAgICBpdGVyLmVucXVldWVBZGphY2VudFZlcnRpY2VzKHZlcnRleCk7CisKKyAgVmVydGV4U2V0IGZhbmluczsKKyAgd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSB7CisgICAgVmVydGV4ICpmYW5pbiA9IGl0ZXIubmV4dCgpOworICAgIGlmICghc3RhXy0+aXNDbG9jayhmYW5pbi0+cGluKCkpKSB7CisgICAgICBpZiAoZmFuaW4tPmlzRHJpdmVyKG5ldHdvcmtfKSkKKyAgICAgICAgZmFuaW5zLmluc2VydChmYW5pbik7CisgICAgICBpdGVyLmVucXVldWVBZGphY2VudFZlcnRpY2VzKGZhbmluKTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIGZhbmluczsKK30KKworVmVydGV4U2VxCitSZXNpemVyOjpzb3J0SG9sZEZhbmlucyhWZXJ0ZXhTZXQgJmZhbmlucykKK3sKKyAgVmVydGV4U2VxIHNvcnRlZF9mYW5pbnM7CisgIGZvcihWZXJ0ZXggKnZlcnRleCA6IGZhbmlucykKKyAgICBzb3J0ZWRfZmFuaW5zLnB1c2hfYmFjayh2ZXJ0ZXgpOworCisgIHNvcnQoc29ydGVkX2ZhbmlucywgWyZdKFZlcnRleCAqdjEsIFZlcnRleCAqdjIpCisgICAgICAgICAgICAgICAgICAgICAgeyBmbG9hdCBzMSA9IHN0YV8tPnZlcnRleFNsYWNrKHYxLCBNaW5NYXg6Om1pbigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHMyID0gc3RhXy0+dmVydGV4U2xhY2sodjIsIE1pbk1heDo6bWluKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZ1enp5RXF1YWwoczEsIHMyKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBnYXAxID0gc2xhY2tHYXAodjEpOworICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBnYXAyID0gc2xhY2tHYXAodjIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBCcmVhayB0aWVzIGJhc2VkIG9uIHRoZSBob2xkL3NldHVwIGdhcC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZ1enp5RXF1YWwoZ2FwMSwgZ2FwMikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHYxLT5sZXZlbCgpID4gdjItPmxldmVsKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2FwMSA+IGdhcDI7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzMSA8IHMyO30pOworICBpZiAobG9nZ2VyXy0+ZGVidWdDaGVjayhSU1osICJyZXBhaXJfaG9sZCIsIDQpKSB7CisgICAgcHJpbnRmKCJTb3J0ZWQgZmFuaW5zIik7CisgICAgcHJpbnRmKCIgICAgIGhvbGRfc2xhY2sgIHNsYWNrX2dhcCAgbGV2ZWwiKTsKKyAgICBmb3IoVmVydGV4ICp2ZXJ0ZXggOiBzb3J0ZWRfZmFuaW5zKQorICAgICAgcHJpbnRmKCIlcyAlcyAlcyAlZCIsCisgICAgICAgICAgICAgdmVydGV4LT5uYW1lKG5ldHdvcmtfKSwKKyAgICAgICAgICAgICBkZWxheUFzU3RyaW5nKHN0YV8tPnZlcnRleFNsYWNrKHZlcnRleCwgTWluTWF4OjptaW4oKSksIHN0YV8sIDMpLAorICAgICAgICAgICAgIGRlbGF5QXNTdHJpbmcoc2xhY2tHYXAodmVydGV4KSwgc3RhXywgMyksCisgICAgICAgICAgICAgdmVydGV4LT5sZXZlbCgpKTsKKyAgfQorICByZXR1cm4gc29ydGVkX2ZhbmluczsKK30KKwordm9pZAorUmVzaXplcjo6bWFrZUhvbGREZWxheShWZXJ0ZXggKmRydnIsCisgICAgICAgICAgICAgICAgICAgICAgIGludCBidWZmZXJfY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgIFBpblNlcSAmbG9hZF9waW5zLAorICAgICAgICAgICAgICAgICAgICAgICBib29sIGxvYWRzX2hhdmVfb3V0X3BvcnQsCisgICAgICAgICAgICAgICAgICAgICAgIExpYmVydHlDZWxsICpidWZmZXJfY2VsbCkKK3sKKyAgUGluICpkcnZyX3BpbiA9IGRydnItPnBpbigpOworICBJbnN0YW5jZSAqcGFyZW50ID0gZGJfbmV0d29ya18tPnRvcEluc3RhbmNlKCk7CisgIE5ldCAqZHJ2cl9uZXQgPSBuZXR3b3JrXy0+aXNUb3BMZXZlbFBvcnQoZHJ2cl9waW4pCisgICAgPyBkYl9uZXR3b3JrXy0+bmV0KGRiX25ldHdvcmtfLT50ZXJtKGRydnJfcGluKSkKKyAgICA6IGRiX25ldHdvcmtfLT5uZXQoZHJ2cl9waW4pOworICBOZXQgKmluX25ldCwgKm91dF9uZXQ7CisgIGlmIChsb2Fkc19oYXZlX291dF9wb3J0KSB7CisgICAgLy8gVmVyaWxvZyB1c2VzIG5ldHMgYXMgcG9ydHMsIHNvIHRoZSBuZXQgY29ubmVjdGVkIHRvIGFuIG91dHB1dCBwb3J0IGhhcworICAgIC8vIHRvIGJlIHByZXNlcnZlZC4KKyAgICAvLyBNb3ZlIHRoZSBkcml2ZXIgcGluIG92ZXIgdG8gZ2Vuc3ltJ2QgbmV0LgorICAgIGluX25ldCA9IG1ha2VVbmlxdWVOZXQoKTsKKyAgICBQb3J0ICpkcnZyX3BvcnQgPSBuZXR3b3JrXy0+cG9ydChkcnZyX3Bpbik7CisgICAgSW5zdGFuY2UgKmRydnJfaW5zdCA9IG5ldHdvcmtfLT5pbnN0YW5jZShkcnZyX3Bpbik7CisgICAgc3RhXy0+ZGlzY29ubmVjdFBpbihkcnZyX3Bpbik7CisgICAgc3RhXy0+Y29ubmVjdFBpbihkcnZyX2luc3QsIGRydnJfcG9ydCwgaW5fbmV0KTsKKyAgICBvdXRfbmV0ID0gZHJ2cl9uZXQ7CisgIH0KKyAgZWxzZSB7CisgICAgaW5fbmV0ID0gZHJ2cl9uZXQ7CisgICAgb3V0X25ldCA9IG1ha2VVbmlxdWVOZXQoKTsKKyAgfQorCisgIHBhcmFzaXRpY3NJbnZhbGlkKGluX25ldCk7CisgIC8vIFNwcmVhZCBidWZmZXJzIGJldHdlZW4gZHJpdmVyIGFuZCBsb2FkIGNlbnRlci4KKyAgUG9pbnQgZHJ2cl9sb2MgPSBkYl9uZXR3b3JrXy0+bG9jYXRpb24oZHJ2cl9waW4pOworICBQb2ludCBsb2FkX2NlbnRlciA9IGZpbmRDZW50ZXIobG9hZF9waW5zKTsKKyAgaW50IGR4ID0gKGxvYWRfY2VudGVyLngoKSAtIGRydnJfbG9jLngoKSkgLyAoYnVmZmVyX2NvdW50ICsgMSk7CisgIGludCBkeSA9IChsb2FkX2NlbnRlci55KCkgLSBkcnZyX2xvYy55KCkpIC8gKGJ1ZmZlcl9jb3VudCArIDEpOworCisgIE5ldCAqYnVmX2luX25ldCA9IGluX25ldDsKKyAgSW5zdGFuY2UgKmJ1ZmZlciA9IG51bGxwdHI7CisgIExpYmVydHlQb3J0ICppbnB1dCwgKm91dHB1dDsKKyAgYnVmZmVyX2NlbGwtPmJ1ZmZlclBvcnRzKGlucHV0LCBvdXRwdXQpOworICAvLyBkcnZyX3Bpbi0+aW5fbmV0LT5ob2xkX2J1ZmZlcjEtPm5ldDItPmhvbGRfYnVmZmVyMi0+b3V0X25ldC4uLi0+bG9hZF9waW5zCisgIGZvciAoaW50IGkgPSAwOyBpIDwgYnVmZmVyX2NvdW50OyBpKyspIHsKKyAgICBOZXQgKmJ1Zl9vdXRfbmV0ID0gKGkgPT0gYnVmZmVyX2NvdW50IC0gMSkgPyBvdXRfbmV0IDogbWFrZVVuaXF1ZU5ldCgpOworICAgIC8vIGRydnJfcGluLT5kcnZyX25ldC0+aG9sZF9idWZmZXItPm5ldDItPmxvYWRfcGlucworICAgIHN0cmluZyBidWZmZXJfbmFtZSA9IG1ha2VVbmlxdWVJbnN0TmFtZSgiaG9sZCIpOworICAgIGJ1ZmZlciA9IG1ha2VJbnN0YW5jZShidWZmZXJfY2VsbCwgYnVmZmVyX25hbWUuY19zdHIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50KTsKKyAgICBqb3VybmFsTWFrZUJ1ZmZlcihidWZmZXIpOworICAgIGluc2VydGVkX2J1ZmZlcl9jb3VudF8rKzsKKyAgICBkZXNpZ25BcmVhSW5jcihhcmVhKGRiX25ldHdvcmtfLT5jZWxsKGJ1ZmZlcl9jZWxsKSkpOworCisgICAgc3RhXy0+Y29ubmVjdFBpbihidWZmZXIsIGlucHV0LCBidWZfaW5fbmV0KTsKKyAgICBzdGFfLT5jb25uZWN0UGluKGJ1ZmZlciwgb3V0cHV0LCBidWZfb3V0X25ldCk7CisgICAgUG9pbnQgYnVmZmVyX2xvYyhkcnZyX2xvYy54KCkgKyBkeCAqIGksCisgICAgICAgICAgICAgICAgICAgICBkcnZyX2xvYy55KCkgKyBkeSAqIGkpOworICAgIHNldExvY2F0aW9uKGJ1ZmZlciwgYnVmZmVyX2xvYyk7CisgICAgYnVmX2luX25ldCA9IGJ1Zl9vdXRfbmV0OworICAgIHBhcmFzaXRpY3NJbnZhbGlkKGJ1Zl9vdXRfbmV0KTsKKyAgfQorCisgIGZvciAoUGluICpsb2FkX3BpbiA6IGxvYWRfcGlucykgeworICAgIE5ldCAqbG9hZF9uZXQgPSBuZXR3b3JrXy0+aXNUb3BMZXZlbFBvcnQobG9hZF9waW4pCisgICAgICA/IG5ldHdvcmtfLT5uZXQobmV0d29ya18tPnRlcm0obG9hZF9waW4pKQorICAgICAgOiBuZXR3b3JrXy0+bmV0KGxvYWRfcGluKTsKKyAgICBpZiAobG9hZF9uZXQgIT0gb3V0X25ldCkgeworICAgICAgSW5zdGFuY2UgKmxvYWQgPSBkYl9uZXR3b3JrXy0+aW5zdGFuY2UobG9hZF9waW4pOworICAgICAgUG9ydCAqbG9hZF9wb3J0ID0gZGJfbmV0d29ya18tPnBvcnQobG9hZF9waW4pOworICAgICAgc3RhXy0+ZGlzY29ubmVjdFBpbihsb2FkX3Bpbik7CisgICAgICBzdGFfLT5jb25uZWN0UGluKGxvYWQsIGxvYWRfcG9ydCwgb3V0X25ldCk7CisgICAgfQorICB9CisgIFBpbiAqYnVmZmVyX291dF9waW4gPSBuZXR3b3JrXy0+ZmluZFBpbihidWZmZXIsIG91dHB1dCk7CisgIHJlc2l6ZVRvVGFyZ2V0U2xldyhidWZmZXJfb3V0X3BpbiwgZmFsc2UpOworfQorCitQb2ludAorUmVzaXplcjo6ZmluZENlbnRlcihQaW5TZXEgJnBpbnMpCit7CisgIGxvbmcgc3VtX3ggPSAwOworICBsb25nIHN1bV95ID0gMDsKKyAgZm9yIChQaW4gKnBpbiA6IHBpbnMpIHsKKyAgICBQb2ludCBsb2MgPSBkYl9uZXR3b3JrXy0+bG9jYXRpb24ocGluKTsKKyAgICBzdW1feCArPSBsb2MueCgpOworICAgIHN1bV95ICs9IGxvYy55KCk7CisgIH0KKyAgcmV0dXJuIFBvaW50KHN1bV94IC8gcGlucy5zaXplKCksIHN1bV95IC8gcGlucy5zaXplKCkpOworfQorCisvLyBHYXAgYmV0d2VlbiBtaW4gc2V0dXAgYW5kIGhvbGQgc2xhY2tzLgorLy8gVGhpcyBzYXlzIGhvdyBtdWNoIGhlYWQgcm9vbSB0aGVyZSBpcyBmb3IgYWRkaW5nIGRlbGF5IHRvIGZpeCBhCisvLyBob2xkIHZpb2xhdGlvbiBiZWZvcmUgdmlvbGF0aW5nIGEgc2V0dXAgY2hlY2suCitTbGFjaworUmVzaXplcjo6c2xhY2tHYXAoU2xhY2tzICZzbGFja3MpCit7CisgIHJldHVybiBtaW4oc2xhY2tzW1Jpc2VGYWxsOjpyaXNlSW5kZXgoKV1bTWluTWF4OjptYXhJbmRleCgpXQorICAgICAgICAgICAgIC0gc2xhY2tzW1Jpc2VGYWxsOjpyaXNlSW5kZXgoKV1bTWluTWF4OjptaW5JbmRleCgpXSwKKyAgICAgICAgICAgICBzbGFja3NbUmlzZUZhbGw6OmZhbGxJbmRleCgpXVtNaW5NYXg6Om1heEluZGV4KCldCisgICAgICAgICAgICAgLSBzbGFja3NbUmlzZUZhbGw6OmZhbGxJbmRleCgpXVtNaW5NYXg6Om1pbkluZGV4KCldKTsKK30KKworU2xhY2sKK1Jlc2l6ZXI6OnNsYWNrR2FwKFZlcnRleCAqdmVydGV4KQoreworICBTbGFja3Mgc2xhY2tzOworICBzdGFfLT52ZXJ0ZXhTbGFja3ModmVydGV4LCBzbGFja3MpOworICByZXR1cm4gc2xhY2tHYXAoc2xhY2tzKTsKK30KKworaW50CitSZXNpemVyOjpmYW5vdXQoVmVydGV4ICp2ZXJ0ZXgpCit7CisgIGludCBmYW5vdXQgPSAwOworICBWZXJ0ZXhPdXRFZGdlSXRlcmF0b3IgZWRnZV9pdGVyKHZlcnRleCwgZ3JhcGhfKTsKKyAgd2hpbGUgKGVkZ2VfaXRlci5oYXNOZXh0KCkpIHsKKyAgICBlZGdlX2l0ZXIubmV4dCgpOworICAgIGZhbm91dCsrOworICB9CisgIHJldHVybiBmYW5vdXQ7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwordm9pZAorUmVzaXplcjo6cmVwb3J0TG9uZ1dpcmVzKGludCBjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGlnaXRzKQoreworICBncmFwaF8gPSBzdGFfLT5lbnN1cmVHcmFwaCgpOworICBzdGFfLT5lbnN1cmVDbGtOZXR3b3JrKCk7CisgIFZlcnRleFNlcSBkcnZyczsKKyAgZmluZExvbmdXaXJlcyhkcnZycyk7CisgIHJlcG9ydF8tPnJlcG9ydExpbmUoIkRyaXZlciAgICBsZW5ndGggZGVsYXkiKTsKKyAgY29uc3QgQ29ybmVyICpjb3JuZXIgPSBzdGFfLT5jbWRDb3JuZXIoKTsKKyAgZG91YmxlIHdpcmVfcmVzID0gd2lyZVNpZ25hbFJlc2lzdGFuY2UoY29ybmVyKTsKKyAgZG91YmxlIHdpcmVfY2FwID0gd2lyZVNpZ25hbENhcGFjaXRhbmNlKGNvcm5lcik7CisgIGludCBpID0gMDsKKyAgZm9yIChWZXJ0ZXggKmRydnIgOiBkcnZycykgeworICAgIFBpbiAqZHJ2cl9waW4gPSBkcnZyLT5waW4oKTsKKyAgICBkb3VibGUgd2lyZV9sZW5ndGggPSBkYnVUb01ldGVycyhtYXhMb2FkTWFuaGF0dGVuRGlzdGFuY2UoZHJ2cikpOworICAgIGRvdWJsZSBzdGVpbmVyX2xlbmd0aCA9IGRidVRvTWV0ZXJzKGZpbmRNYXhTdGVpbmVyRGlzdChkcnZyKSk7CisgICAgZG91YmxlIGRlbGF5ID0gKHdpcmVfbGVuZ3RoICogd2lyZV9yZXMpICogKHdpcmVfbGVuZ3RoICogd2lyZV9jYXApICogMC41OworICAgIHJlcG9ydF8tPnJlcG9ydExpbmUoIiVzIG1hbmh0biAlcyBzdGVpbmVyICVzICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNkY19uZXR3b3JrXy0+cGF0aE5hbWUoZHJ2cl9waW4pLAorICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHNfLT5kaXN0YW5jZVVuaXQoKS0+YXNTdHJpbmcod2lyZV9sZW5ndGgsIDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHNfLT5kaXN0YW5jZVVuaXQoKS0+YXNTdHJpbmcoc3RlaW5lcl9sZW5ndGgsIDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgZGVsYXlBc1N0cmluZyhkZWxheSwgc3RhXywgZGlnaXRzKSk7CisgICAgaWYgKGkgPT0gY291bnQpCisgICAgICBicmVhazsKKyAgICBpKys7CisgIH0KK30KKwordHlwZWRlZiBzdGQ6OnBhaXI8VmVydGV4KiwgaW50PiBEcnZyRGlzdDsKKwordm9pZAorUmVzaXplcjo6ZmluZExvbmdXaXJlcyhWZXJ0ZXhTZXEgJmRydnJzKQoreworICBWZWN0b3I8RHJ2ckRpc3Q+IGRydnJfZGlzdHM7CisgIFZlcnRleEl0ZXJhdG9yIHZlcnRleF9pdGVyKGdyYXBoXyk7CisgIHdoaWxlICh2ZXJ0ZXhfaXRlci5oYXNOZXh0KCkpIHsKKyAgICBWZXJ0ZXggKnZlcnRleCA9IHZlcnRleF9pdGVyLm5leHQoKTsKKyAgICBpZiAodmVydGV4LT5pc0RyaXZlcihuZXR3b3JrXykpIHsKKyAgICAgIFBpbiAqcGluID0gdmVydGV4LT5waW4oKTsKKyAgICAgIC8vIEhhbmRzIG9mZiB0aGUgY2xvY2sgbmV0cy4KKyAgICAgIGlmICghc3RhXy0+aXNDbG9jayhwaW4pCisgICAgICAgICAgJiYgIXZlcnRleC0+aXNDb25zdGFudCgpCisgICAgICAgICAgJiYgIXZlcnRleC0+aXNEaXNhYmxlZENvbnN0cmFpbnQoKSkKKyAgICAgICAgZHJ2cl9kaXN0cy5wdXNoX2JhY2soRHJ2ckRpc3QodmVydGV4LCBtYXhMb2FkTWFuaGF0dGVuRGlzdGFuY2UodmVydGV4KSkpOworICAgIH0KKyAgfQorICBzb3J0KGRydnJfZGlzdHMsIFtdKGNvbnN0IERydnJEaXN0ICZkcnZyX2Rpc3QxLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBEcnZyRGlzdCAmZHJ2cl9kaXN0MikgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZHJ2cl9kaXN0MS5zZWNvbmQgPiBkcnZyX2Rpc3QyLnNlY29uZDsKKyAgICAgICAgICAgICAgICAgIH0pOworICBkcnZycy5yZXNlcnZlKGRydnJfZGlzdHMuc2l6ZSgpKTsKKyAgZm9yIChEcnZyRGlzdCAmZHJ2cl9kaXN0IDogZHJ2cl9kaXN0cykKKyAgICBkcnZycy5wdXNoX2JhY2soZHJ2cl9kaXN0LmZpcnN0KTsKK30KKwordm9pZAorUmVzaXplcjo6ZmluZExvbmdXaXJlc1N0ZWluZXIoVmVydGV4U2VxICZkcnZycykKK3sKKyAgVmVjdG9yPERydnJEaXN0PiBkcnZyX2Rpc3RzOworICBWZXJ0ZXhJdGVyYXRvciB2ZXJ0ZXhfaXRlcihncmFwaF8pOworICB3aGlsZSAodmVydGV4X2l0ZXIuaGFzTmV4dCgpKSB7CisgICAgVmVydGV4ICp2ZXJ0ZXggPSB2ZXJ0ZXhfaXRlci5uZXh0KCk7CisgICAgaWYgKHZlcnRleC0+aXNEcml2ZXIobmV0d29ya18pKSB7CisgICAgICBQaW4gKnBpbiA9IHZlcnRleC0+cGluKCk7CisgICAgICAvLyBIYW5kcyBvZmYgdGhlIGNsb2NrIG5ldHMuCisgICAgICBpZiAoIXN0YV8tPmlzQ2xvY2socGluKQorICAgICAgICAgICYmICF2ZXJ0ZXgtPmlzQ29uc3RhbnQoKSkKKyAgICAgICAgZHJ2cl9kaXN0cy5wdXNoX2JhY2soRHJ2ckRpc3QodmVydGV4LCBmaW5kTWF4U3RlaW5lckRpc3QodmVydGV4KSkpOworICAgIH0KKyAgfQorICBzb3J0KGRydnJfZGlzdHMsIFtdKGNvbnN0IERydnJEaXN0ICZkcnZyX2Rpc3QxLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBEcnZyRGlzdCAmZHJ2cl9kaXN0MikgeworICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRydnJfZGlzdDEuc2Vjb25kID4gZHJ2cl9kaXN0Mi5zZWNvbmQ7CisgICAgICAgICAgICAgICAgICAgfSk7CisgIGRydnJzLnJlc2VydmUoZHJ2cl9kaXN0cy5zaXplKCkpOworICBmb3IgKERydnJEaXN0ICZkcnZyX2Rpc3QgOiBkcnZyX2Rpc3RzKQorICAgIGRydnJzLnB1c2hfYmFjayhkcnZyX2Rpc3QuZmlyc3QpOworfQorCisvLyBGaW5kIHRoZSBtYXhpbXVtIGRpc3RhbmNlIGFsb25nIHN0ZWluZXIgdHJlZSBicmFuY2hlcyBmcm9tCisvLyB0aGUgZHJpdmVyIHRvIGxvYWRzIChpbiBkYnUpLgoraW50CitSZXNpemVyOjpmaW5kTWF4U3RlaW5lckRpc3QoVmVydGV4ICpkcnZyKQoreworICBQaW4gKmRydnJfcGluID0gZHJ2ci0+cGluKCk7CisgIFN0ZWluZXJUcmVlICp0cmVlID0gbWFrZVN0ZWluZXJUcmVlKGRydnJfcGluLCB0cnVlLCBtYXhfc3RlaW5lcl9waW5fY291bnRfLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHRfYnVpbGRlcl8sIGRiX25ldHdvcmtfLCBsb2dnZXJfKTsKKyAgaWYgKHRyZWUpIHsKKyAgICBpbnQgZGlzdCA9IGZpbmRNYXhTdGVpbmVyRGlzdCh0cmVlKTsKKyAgICBkZWxldGUgdHJlZTsKKyAgICByZXR1cm4gZGlzdDsKKyAgfQorICByZXR1cm4gMDsKK30KKworaW50CitSZXNpemVyOjpmaW5kTWF4U3RlaW5lckRpc3QoU3RlaW5lclRyZWUgKnRyZWUpCit7CisgIFN0ZWluZXJQdCBkcnZyX3B0ID0gdHJlZS0+ZHJ2clB0KG5ldHdvcmtfKTsKKyAgaWYgKGRydnJfcHQgPT0gU3RlaW5lclRyZWU6Om51bGxfcHQpCisgICAgcmV0dXJuIDA7CisgIGVsc2UKKyAgICByZXR1cm4gZmluZE1heFN0ZWluZXJEaXN0KHRyZWUsIGRydnJfcHQsIDApOworfQorCisvLyBERlMgb2Ygc3RlaW5lciB0cmVlLgoraW50CitSZXNpemVyOjpmaW5kTWF4U3RlaW5lckRpc3QoU3RlaW5lclRyZWUgKnRyZWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RlaW5lclB0IHB0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkaXN0X2Zyb21fZHJ2cikKK3sKKyAgY29uc3QgUGluU2VxICpwaW5zID0gdHJlZS0+cGlucyhwdCk7CisgIGlmIChwaW5zKSB7CisgICAgZm9yIChjb25zdCBQaW4gKnBpbiA6ICpwaW5zKSB7CisgICAgICBpZiAoZGJfbmV0d29ya18tPmlzTG9hZChwaW4pKQorICAgICAgICByZXR1cm4gZGlzdF9mcm9tX2RydnI7CisgICAgfQorICB9CisgIFBvaW50IGxvYyA9IHRyZWUtPmxvY2F0aW9uKHB0KTsKKyAgU3RlaW5lclB0IGxlZnQgPSB0cmVlLT5sZWZ0KHB0KTsKKyAgaW50IGxlZnRfbWF4ID0gMDsKKyAgaWYgKGxlZnQgIT0gU3RlaW5lclRyZWU6Om51bGxfcHQpIHsKKyAgICBpbnQgbGVmdF9kaXN0ID0gUG9pbnQ6Om1hbmhhdHRhbkRpc3RhbmNlKGxvYywgdHJlZS0+bG9jYXRpb24obGVmdCkpOworICAgIGxlZnRfbWF4ID0gZmluZE1heFN0ZWluZXJEaXN0KHRyZWUsIGxlZnQsIGRpc3RfZnJvbV9kcnZyICsgbGVmdF9kaXN0KTsKKyAgfQorICBTdGVpbmVyUHQgcmlnaHQgPSB0cmVlLT5yaWdodChwdCk7CisgIGludCByaWdodF9tYXggPSAwOworICBpZiAocmlnaHQgIT0gU3RlaW5lclRyZWU6Om51bGxfcHQpIHsKKyAgICBpbnQgcmlnaHRfZGlzdCA9IFBvaW50OjptYW5oYXR0YW5EaXN0YW5jZShsb2MsIHRyZWUtPmxvY2F0aW9uKHJpZ2h0KSk7CisgICAgcmlnaHRfbWF4ID0gZmluZE1heFN0ZWluZXJEaXN0KHRyZWUsIHJpZ2h0LCBkaXN0X2Zyb21fZHJ2ciArIHJpZ2h0X2Rpc3QpOworICB9CisgIHJldHVybiBtYXgobGVmdF9tYXgsIHJpZ2h0X21heCk7Cit9CisKK2RvdWJsZQorUmVzaXplcjo6bWF4TG9hZE1hbmhhdHRlbkRpc3RhbmNlKGNvbnN0IE5ldCAqbmV0KQoreworICBOZXRQaW5JdGVyYXRvciAqcGluX2l0ZXIgPSBuZXR3b3JrXy0+cGluSXRlcmF0b3IobmV0KTsKKyAgaW50IG1heF9kaXN0ID0gMDsKKyAgd2hpbGUgKHBpbl9pdGVyLT5oYXNOZXh0KCkpIHsKKyAgICBQaW4gKnBpbiA9IHBpbl9pdGVyLT5uZXh0KCk7CisgICAgaWYgKG5ldHdvcmtfLT5pc0RyaXZlcihwaW4pKSB7CisgICAgICBWZXJ0ZXggKmRydnIgPSBncmFwaF8tPnBpbkRydnJWZXJ0ZXgocGluKTsKKyAgICAgIGlmIChkcnZyKSB7CisgICAgICAgIGludCBkaXN0ID0gbWF4TG9hZE1hbmhhdHRlbkRpc3RhbmNlKGRydnIpOworICAgICAgICBtYXhfZGlzdCA9IG1heChtYXhfZGlzdCwgZGlzdCk7CisgICAgICB9CisgICAgfQorICB9CisgIGRlbGV0ZSBwaW5faXRlcjsKKyAgcmV0dXJuIGRidVRvTWV0ZXJzKG1heF9kaXN0KTsKK30KKworaW50CitSZXNpemVyOjptYXhMb2FkTWFuaGF0dGVuRGlzdGFuY2UoVmVydGV4ICpkcnZyKQoreworICBpbnQgbWF4X2Rpc3QgPSAwOworICBQb2ludCBkcnZyX2xvYyA9IGRiX25ldHdvcmtfLT5sb2NhdGlvbihkcnZyLT5waW4oKSk7CisgIFZlcnRleE91dEVkZ2VJdGVyYXRvciBlZGdlX2l0ZXIoZHJ2ciwgZ3JhcGhfKTsKKyAgd2hpbGUgKGVkZ2VfaXRlci5oYXNOZXh0KCkpIHsKKyAgICBFZGdlICplZGdlID0gZWRnZV9pdGVyLm5leHQoKTsKKyAgICBWZXJ0ZXggKmxvYWQgPSBlZGdlLT50byhncmFwaF8pOworICAgIFBvaW50IGxvYWRfbG9jID0gZGJfbmV0d29ya18tPmxvY2F0aW9uKGxvYWQtPnBpbigpKTsKKyAgICBpbnQgZGlzdCA9IFBvaW50OjptYW5oYXR0YW5EaXN0YW5jZShkcnZyX2xvYywgbG9hZF9sb2MpOworICAgIG1heF9kaXN0ID0gbWF4KG1heF9kaXN0LCBkaXN0KTsKKyAgfQorICByZXR1cm4gbWF4X2Rpc3Q7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworTmV0U2VxICoKK1Jlc2l6ZXI6OmZpbmRGbG9hdGluZ05ldHMoKQoreworICBOZXRTZXEgKmZsb2F0aW5nX25ldHMgPSBuZXcgTmV0U2VxOworICBOZXRJdGVyYXRvciAqbmV0X2l0ZXIgPSBuZXR3b3JrXy0+bmV0SXRlcmF0b3IobmV0d29ya18tPnRvcEluc3RhbmNlKCkpOworICB3aGlsZSAobmV0X2l0ZXItPmhhc05leHQoKSkgeworICAgIE5ldCAqbmV0ID0gbmV0X2l0ZXItPm5leHQoKTsKKyAgICBQaW5TZXEgbG9hZHM7CisgICAgUGluU2VxIGRydnJzOworICAgIFBpblNldCB2aXNpdGVkX2RydnJzOworICAgIEZpbmROZXREcnZyTG9hZHMgdmlzaXRvcihudWxscHRyLCB2aXNpdGVkX2RydnJzLCBsb2FkcywgZHJ2cnMsIG5ldHdvcmtfKTsKKyAgICBuZXR3b3JrXy0+dmlzaXRDb25uZWN0ZWRQaW5zKG5ldCwgdmlzaXRvcik7CisgICAgaWYgKGRydnJzLnNpemUoKSA9PSAwICYmIGxvYWRzLnNpemUoKSA+IDApCisgICAgICBmbG9hdGluZ19uZXRzLT5wdXNoX2JhY2sobmV0KTsKKyAgfQorICBkZWxldGUgbmV0X2l0ZXI7CisgIHNvcnQoZmxvYXRpbmdfbmV0cywgc3RhOjpOZXRQYXRoTmFtZUxlc3MobmV0d29ya18pKTsKKyAgcmV0dXJuIGZsb2F0aW5nX25ldHM7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworc3RyaW5nCitSZXNpemVyOjptYWtlVW5pcXVlTmV0TmFtZSgpCit7CisgIHN0cmluZyBub2RlX25hbWU7CisgIEluc3RhbmNlICp0b3BfaW5zdCA9IG5ldHdvcmtfLT50b3BJbnN0YW5jZSgpOworICBkbyAKKyAgICBzdHJpbmdQcmludChub2RlX25hbWUsICJuZXQlZCIsIHVuaXF1ZV9uZXRfaW5kZXhfKyspOworICB3aGlsZSAobmV0d29ya18tPmZpbmROZXQodG9wX2luc3QsIG5vZGVfbmFtZS5jX3N0cigpKSk7CisgIHJldHVybiBub2RlX25hbWU7Cit9CisKK05ldCAqCitSZXNpemVyOjptYWtlVW5pcXVlTmV0KCkKK3sKKyAgc3RyaW5nIG5ldF9uYW1lID0gbWFrZVVuaXF1ZU5ldE5hbWUoKTsKKyAgSW5zdGFuY2UgKnBhcmVudCA9IGRiX25ldHdvcmtfLT50b3BJbnN0YW5jZSgpOworICByZXR1cm4gZGJfbmV0d29ya18tPm1ha2VOZXQobmV0X25hbWUuY19zdHIoKSwgcGFyZW50KTsKK30KKworc3RyaW5nCitSZXNpemVyOjptYWtlVW5pcXVlSW5zdE5hbWUoY29uc3QgY2hhciAqYmFzZV9uYW1lKQoreworICByZXR1cm4gbWFrZVVuaXF1ZUluc3ROYW1lKGJhc2VfbmFtZSwgZmFsc2UpOworfQorCitzdHJpbmcKK1Jlc2l6ZXI6Om1ha2VVbmlxdWVJbnN0TmFtZShjb25zdCBjaGFyICpiYXNlX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB1bmRlcnNjb3JlKQoreworICBzdHJpbmcgaW5zdF9uYW1lOworICBkbyAKKyAgICBzdHJpbmdQcmludChpbnN0X25hbWUsIHVuZGVyc2NvcmUgPyAiJXNfJWQiIDogIiVzJWQiLAorICAgICAgICAgICAgICAgIGJhc2VfbmFtZSwgdW5pcXVlX2luc3RfaW5kZXhfKyspOworICB3aGlsZSAobmV0d29ya18tPmZpbmRJbnN0YW5jZShpbnN0X25hbWUuY19zdHIoKSkpOworICByZXR1cm4gaW5zdF9uYW1lOworfQorCitmbG9hdAorUmVzaXplcjo6cG9ydEZhbm91dExvYWQoTGliZXJ0eVBvcnQgKnBvcnQpCit7CisgIGZsb2F0IGZhbm91dF9sb2FkOworICBib29sIGV4aXN0czsKKyAgcG9ydC0+ZmFub3V0TG9hZChmYW5vdXRfbG9hZCwgZXhpc3RzKTsKKyAgaWYgKCFleGlzdHMpIHsKKyAgICBMaWJlcnR5TGlicmFyeSAqbGliID0gcG9ydC0+bGliZXJ0eUxpYnJhcnkoKTsKKyAgICBsaWItPmRlZmF1bHRGYW5vdXRMb2FkKGZhbm91dF9sb2FkLCBleGlzdHMpOworICB9CisgIGlmIChleGlzdHMpCisgICAgcmV0dXJuIGZhbm91dF9sb2FkOworICBlbHNlCisgICAgcmV0dXJuIDAuMDsKK30KKworZmxvYXQKK1Jlc2l6ZXI6OmJ1ZmZlckRlbGF5KExpYmVydHlDZWxsICpidWZmZXJfY2VsbCwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJpc2VGYWxsICpyZiwKKyAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGxvYWRfY2FwLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgRGNhbGNBbmFseXNpc1B0ICpkY2FsY19hcCkKK3sKKyAgTGliZXJ0eVBvcnQgKmlucHV0LCAqb3V0cHV0OworICBidWZmZXJfY2VsbC0+YnVmZmVyUG9ydHMoaW5wdXQsIG91dHB1dCk7CisgIEFyY0RlbGF5IGdhdGVfZGVsYXlzW1Jpc2VGYWxsOjppbmRleF9jb3VudF07CisgIFNsZXcgc2xld3NbUmlzZUZhbGw6OmluZGV4X2NvdW50XTsKKyAgZ2F0ZURlbGF5cyhvdXRwdXQsIGxvYWRfY2FwLCBkY2FsY19hcCwgZ2F0ZV9kZWxheXMsIHNsZXdzKTsKKyAgcmV0dXJuIGdhdGVfZGVsYXlzW3JmLT5pbmRleCgpXTsKK30KKworZmxvYXQKK1Jlc2l6ZXI6OmJ1ZmZlckRlbGF5KExpYmVydHlDZWxsICpidWZmZXJfY2VsbCwKKyAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGxvYWRfY2FwLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgRGNhbGNBbmFseXNpc1B0ICpkY2FsY19hcCkKK3sKKyAgTGliZXJ0eVBvcnQgKmlucHV0LCAqb3V0cHV0OworICBidWZmZXJfY2VsbC0+YnVmZmVyUG9ydHMoaW5wdXQsIG91dHB1dCk7CisgIEFyY0RlbGF5IGdhdGVfZGVsYXlzW1Jpc2VGYWxsOjppbmRleF9jb3VudF07CisgIFNsZXcgc2xld3NbUmlzZUZhbGw6OmluZGV4X2NvdW50XTsKKyAgZ2F0ZURlbGF5cyhvdXRwdXQsIGxvYWRfY2FwLCBkY2FsY19hcCwgZ2F0ZV9kZWxheXMsIHNsZXdzKTsKKyAgcmV0dXJuIG1heChnYXRlX2RlbGF5c1tSaXNlRmFsbDo6cmlzZUluZGV4KCldLAorICAgICAgICAgICAgIGdhdGVfZGVsYXlzW1Jpc2VGYWxsOjpmYWxsSW5kZXgoKV0pOworfQorCisvLyBTZWxmIGRlbGF5OyBidWZmZXIgLT4gYnVmZmVyCitmbG9hdAorUmVzaXplcjo6YnVmZmVyU2VsZkRlbGF5KExpYmVydHlDZWxsICpidWZmZXJfY2VsbCkKK3sKKyAgY29uc3QgRGNhbGNBbmFseXNpc1B0ICpkY2FsY19hcCA9IHN0YV8tPmNtZENvcm5lcigpLT5maW5kRGNhbGNBbmFseXNpc1B0KG1heF8pOworICBMaWJlcnR5UG9ydCAqaW5wdXQsICpvdXRwdXQ7CisgIGJ1ZmZlcl9jZWxsLT5idWZmZXJQb3J0cyhpbnB1dCwgb3V0cHV0KTsKKyAgQXJjRGVsYXkgZ2F0ZV9kZWxheXNbUmlzZUZhbGw6OmluZGV4X2NvdW50XTsKKyAgU2xldyBzbGV3c1tSaXNlRmFsbDo6aW5kZXhfY291bnRdOworICBmbG9hdCBsb2FkX2NhcCA9IGlucHV0LT5jYXBhY2l0YW5jZSgpOworICBnYXRlRGVsYXlzKG91dHB1dCwgbG9hZF9jYXAsIGRjYWxjX2FwLCBnYXRlX2RlbGF5cywgc2xld3MpOworICByZXR1cm4gbWF4KGdhdGVfZGVsYXlzW1Jpc2VGYWxsOjpyaXNlSW5kZXgoKV0sCisgICAgICAgICAgICAgZ2F0ZV9kZWxheXNbUmlzZUZhbGw6OmZhbGxJbmRleCgpXSk7Cit9CisKK2Zsb2F0CitSZXNpemVyOjpidWZmZXJTZWxmRGVsYXkoTGliZXJ0eUNlbGwgKmJ1ZmZlcl9jZWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJpc2VGYWxsICpyZikKK3sKKyAgY29uc3QgRGNhbGNBbmFseXNpc1B0ICpkY2FsY19hcCA9IHN0YV8tPmNtZENvcm5lcigpLT5maW5kRGNhbGNBbmFseXNpc1B0KG1heF8pOworICBMaWJlcnR5UG9ydCAqaW5wdXQsICpvdXRwdXQ7CisgIGJ1ZmZlcl9jZWxsLT5idWZmZXJQb3J0cyhpbnB1dCwgb3V0cHV0KTsKKyAgQXJjRGVsYXkgZ2F0ZV9kZWxheXNbUmlzZUZhbGw6OmluZGV4X2NvdW50XTsKKyAgU2xldyBzbGV3c1tSaXNlRmFsbDo6aW5kZXhfY291bnRdOworICBmbG9hdCBsb2FkX2NhcCA9IGlucHV0LT5jYXBhY2l0YW5jZSgpOworICBnYXRlRGVsYXlzKG91dHB1dCwgbG9hZF9jYXAsIGRjYWxjX2FwLCBnYXRlX2RlbGF5cywgc2xld3MpOworICByZXR1cm4gZ2F0ZV9kZWxheXNbcmYtPmluZGV4KCldOworfQorCisvLyBSaXNlL2ZhbGwgZGVsYXlzIGFjcm9zcyBhbGwgdGltaW5nIGFyY3MgaW50byBkcnZyX3BvcnQuCisvLyBVc2VzIHRhcmdldCBzbGV3IGZvciBpbnB1dCBzbGV3Lgordm9pZAorUmVzaXplcjo6Z2F0ZURlbGF5cyhMaWJlcnR5UG9ydCAqZHJ2cl9wb3J0LAorICAgICAgICAgICAgICAgICAgICBmbG9hdCBsb2FkX2NhcCwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgRGNhbGNBbmFseXNpc1B0ICpkY2FsY19hcCwKKyAgICAgICAgICAgICAgICAgICAgLy8gUmV0dXJuIHZhbHVlcy4KKyAgICAgICAgICAgICAgICAgICAgQXJjRGVsYXkgZGVsYXlzW1Jpc2VGYWxsOjppbmRleF9jb3VudF0sCisgICAgICAgICAgICAgICAgICAgIFNsZXcgc2xld3NbUmlzZUZhbGw6OmluZGV4X2NvdW50XSkKK3sKKyAgZm9yIChpbnQgcmZfaW5kZXggOiBSaXNlRmFsbDo6cmFuZ2VJbmRleCgpKSB7CisgICAgZGVsYXlzW3JmX2luZGV4XSA9IC1JTkY7CisgICAgc2xld3NbcmZfaW5kZXhdID0gLUlORjsKKyAgfQorICBjb25zdCBQdnQgKnB2dCA9IGRjYWxjX2FwLT5vcGVyYXRpbmdDb25kaXRpb25zKCk7CisgIExpYmVydHlDZWxsICpjZWxsID0gZHJ2cl9wb3J0LT5saWJlcnR5Q2VsbCgpOworICBMaWJlcnR5Q2VsbFRpbWluZ0FyY1NldEl0ZXJhdG9yIHNldF9pdGVyKGNlbGwpOworICB3aGlsZSAoc2V0X2l0ZXIuaGFzTmV4dCgpKSB7CisgICAgVGltaW5nQXJjU2V0ICphcmNfc2V0ID0gc2V0X2l0ZXIubmV4dCgpOworICAgIGlmIChhcmNfc2V0LT50bygpID09IGRydnJfcG9ydAorICAgICAgICAmJiAhYXJjX3NldC0+cm9sZSgpLT5pc1RpbWluZ0NoZWNrKCkpIHsKKyAgICAgIFRpbWluZ0FyY1NldEFyY0l0ZXJhdG9yIGFyY19pdGVyKGFyY19zZXQpOworICAgICAgd2hpbGUgKGFyY19pdGVyLmhhc05leHQoKSkgeworICAgICAgICBUaW1pbmdBcmMgKmFyYyA9IGFyY19pdGVyLm5leHQoKTsKKyAgICAgICAgUmlzZUZhbGwgKmluX3JmID0gYXJjLT5mcm9tVHJhbnMoKS0+YXNSaXNlRmFsbCgpOworICAgICAgICBpbnQgb3V0X3JmX2luZGV4ID0gYXJjLT50b1RyYW5zKCktPmFzUmlzZUZhbGwoKS0+aW5kZXgoKTsKKyAgICAgICAgZmxvYXQgaW5fc2xldyA9IHRndF9zbGV3c19baW5fcmYtPmluZGV4KCldOworICAgICAgICBBcmNEZWxheSBnYXRlX2RlbGF5OworICAgICAgICBTbGV3IGRydnJfc2xldzsKKyAgICAgICAgYXJjX2RlbGF5X2NhbGNfLT5nYXRlRGVsYXkoY2VsbCwgYXJjLCBpbl9zbGV3LCBsb2FkX2NhcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbHB0ciwgMC4wLCBwdnQsIGRjYWxjX2FwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYXRlX2RlbGF5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcnZyX3NsZXcpOworICAgICAgICBkZWxheXNbb3V0X3JmX2luZGV4XSA9IG1heChkZWxheXNbb3V0X3JmX2luZGV4XSwgZ2F0ZV9kZWxheSk7CisgICAgICAgIHNsZXdzW291dF9yZl9pbmRleF0gPSBtYXgoc2xld3Nbb3V0X3JmX2luZGV4XSwgZHJ2cl9zbGV3KTsKKyAgICAgIH0KKyAgICB9CisgIH0KK30KKworQXJjRGVsYXkKK1Jlc2l6ZXI6OmdhdGVEZWxheShMaWJlcnR5UG9ydCAqZHJ2cl9wb3J0LAorICAgICAgICAgICAgICAgICAgIGNvbnN0IFJpc2VGYWxsICpyZiwKKyAgICAgICAgICAgICAgICAgICBmbG9hdCBsb2FkX2NhcCwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBEY2FsY0FuYWx5c2lzUHQgKmRjYWxjX2FwKQoreworICBBcmNEZWxheSBkZWxheXNbUmlzZUZhbGw6OmluZGV4X2NvdW50XTsKKyAgU2xldyBzbGV3c1tSaXNlRmFsbDo6aW5kZXhfY291bnRdOworICBnYXRlRGVsYXlzKGRydnJfcG9ydCwgbG9hZF9jYXAsIGRjYWxjX2FwLCBkZWxheXMsIHNsZXdzKTsKKyAgcmV0dXJuIGRlbGF5c1tyZi0+aW5kZXgoKV07Cit9CisKK0FyY0RlbGF5CitSZXNpemVyOjpnYXRlRGVsYXkoTGliZXJ0eVBvcnQgKmRydnJfcG9ydCwKKyAgICAgICAgICAgICAgICAgICBmbG9hdCBsb2FkX2NhcCwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBEY2FsY0FuYWx5c2lzUHQgKmRjYWxjX2FwKQoreworICBBcmNEZWxheSBkZWxheXNbUmlzZUZhbGw6OmluZGV4X2NvdW50XTsKKyAgU2xldyBzbGV3c1tSaXNlRmFsbDo6aW5kZXhfY291bnRdOworICBnYXRlRGVsYXlzKGRydnJfcG9ydCwgbG9hZF9jYXAsIGRjYWxjX2FwLCBkZWxheXMsIHNsZXdzKTsKKyAgcmV0dXJuIG1heChkZWxheXNbUmlzZUZhbGw6OnJpc2VJbmRleCgpXSwgZGVsYXlzW1Jpc2VGYWxsOjpmYWxsSW5kZXgoKV0pOworfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2RvdWJsZQorUmVzaXplcjo6ZmluZE1heFdpcmVMZW5ndGgoKQoreworICBkb3VibGUgbWF4X2xlbmd0aCA9IElORjsKKyAgZm9yIChjb25zdCBDb3JuZXIgKmNvcm5lciA6ICpzdGFfLT5jb3JuZXJzKCkpIHsKKyAgICBpZiAod2lyZVNpZ25hbFJlc2lzdGFuY2UoY29ybmVyKSA+IDAuMCkgeworICAgICAgZm9yIChMaWJlcnR5Q2VsbCAqYnVmZmVyX2NlbGwgOiBidWZmZXJfY2VsbHNfKSB7CisgICAgICAgIGRvdWJsZSBidWZmZXJfbGVuZ3RoID0gZmluZE1heFdpcmVMZW5ndGgoYnVmZmVyX2NlbGwsIGNvcm5lcik7CisgICAgICAgIG1heF9sZW5ndGggPSBtaW4obWF4X2xlbmd0aCwgYnVmZmVyX2xlbmd0aCk7CisgICAgICB9CisgICAgfQorICB9CisgIHJldHVybiBtYXhfbGVuZ3RoOworfQorCisvLyBGaW5kIHRoZSBtYXggd2lyZSBsZW5ndGggYmVmb3JlIGl0IGlzIGZhc3RlciB0byBzcGxpdCB0aGUgd2lyZQorLy8gaW4gaGFsZiB3aXRoIGEgYnVmZmVyIChpbiBtZXRlcnMpLgorZG91YmxlCitSZXNpemVyOjpmaW5kTWF4V2lyZUxlbmd0aChMaWJlcnR5Q2VsbCAqYnVmZmVyX2NlbGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDb3JuZXIgKmNvcm5lcikKK3sKKyAgZW5zdXJlQmxvY2soKTsKKyAgTGliZXJ0eVBvcnQgKmxvYWRfcG9ydCwgKmRydnJfcG9ydDsKKyAgYnVmZmVyX2NlbGwtPmJ1ZmZlclBvcnRzKGxvYWRfcG9ydCwgZHJ2cl9wb3J0KTsKKyAgcmV0dXJuIGZpbmRNYXhXaXJlTGVuZ3RoKGRydnJfcG9ydCwgY29ybmVyKTsKK30KKworZG91YmxlCitSZXNpemVyOjpmaW5kTWF4V2lyZUxlbmd0aChMaWJlcnR5UG9ydCAqZHJ2cl9wb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ29ybmVyICpjb3JuZXIpCit7CisgIExpYmVydHlDZWxsICpjZWxsID0gZHJ2cl9wb3J0LT5saWJlcnR5Q2VsbCgpOworICBpZiAoZGJfbmV0d29ya18tPnN0YVRvRGIoY2VsbCkgPT0gbnVsbHB0cikKKyAgICBsb2dnZXJfLT5lcnJvcihSU1osIDcwLCAibm8gTEVGIGNlbGwgZm9yIHt9LiIsIGNlbGwtPm5hbWUoKSk7CisgIGRvdWJsZSBkcnZyX3IgPSBkcnZyX3BvcnQtPmRyaXZlUmVzaXN0YW5jZSgpOworICAvLyB3aXJlX2xlbmd0aDEgbG93ZXIgYm91bmQKKyAgLy8gd2lyZV9sZW5ndGgyIHVwcGVyIGJvdW5kCisgIGRvdWJsZSB3aXJlX2xlbmd0aDEgPSAwLjA7CisgIC8vIEluaXRpYWwgZ3Vlc3Mgd2l0aCB3aXJlIHJlc2lzdGFuY2Ugc2FtZSBhcyBkcml2ZXIgcmVzaXN0YW5jZS4KKyAgZG91YmxlIHdpcmVfbGVuZ3RoMiA9IGRydnJfciAvIHdpcmVTaWduYWxSZXNpc3RhbmNlKGNvcm5lcik7CisgIGRvdWJsZSB0b2wgPSAuMDE7IC8vIDElCisgIGRvdWJsZSBkaWZmMSA9IHNwbGl0V2lyZURlbGF5RGlmZih3aXJlX2xlbmd0aDIsIGNlbGwpOworICAvLyBiaW5hcnkgc2VhcmNoIGZvciBkaWZmID0gMC4KKyAgd2hpbGUgKGFicyh3aXJlX2xlbmd0aDEgLSB3aXJlX2xlbmd0aDIpID4gbWF4KHdpcmVfbGVuZ3RoMSwgd2lyZV9sZW5ndGgyKSAqIHRvbCkgeworICAgIGlmIChkaWZmMSA8IDAuMCkgeworICAgICAgd2lyZV9sZW5ndGgxID0gd2lyZV9sZW5ndGgyOworICAgICAgd2lyZV9sZW5ndGgyICo9IDI7CisgICAgICBkaWZmMSA9IHNwbGl0V2lyZURlbGF5RGlmZih3aXJlX2xlbmd0aDIsIGNlbGwpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIGRvdWJsZSB3aXJlX2xlbmd0aDMgPSAod2lyZV9sZW5ndGgxICsgd2lyZV9sZW5ndGgyKSAvIDIuMDsKKyAgICAgIGRvdWJsZSBkaWZmMiA9IHNwbGl0V2lyZURlbGF5RGlmZih3aXJlX2xlbmd0aDMsIGNlbGwpOworICAgICAgaWYgKGRpZmYyIDwgMC4wKSB7CisgICAgICAgIHdpcmVfbGVuZ3RoMSA9IHdpcmVfbGVuZ3RoMzsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICB3aXJlX2xlbmd0aDIgPSB3aXJlX2xlbmd0aDM7CisgICAgICAgIGRpZmYxID0gZGlmZjI7CisgICAgICB9CisgICAgfQorICB9CisgIHJldHVybiB3aXJlX2xlbmd0aDE7Cit9CisKKy8vIG9iamVjdGl2ZSBmdW5jdGlvbgorZG91YmxlCitSZXNpemVyOjpzcGxpdFdpcmVEZWxheURpZmYoZG91YmxlIHdpcmVfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpYmVydHlDZWxsICpidWZmZXJfY2VsbCkKK3sKKyAgRGVsYXkgZGVsYXkxLCBkZWxheTI7CisgIFNsZXcgc2xldzEsIHNsZXcyOworICBidWZmZXJXaXJlRGVsYXkoYnVmZmVyX2NlbGwsIHdpcmVfbGVuZ3RoLCBkZWxheTEsIHNsZXcxKTsKKyAgYnVmZmVyV2lyZURlbGF5KGJ1ZmZlcl9jZWxsLCB3aXJlX2xlbmd0aCAvIDIsIGRlbGF5Miwgc2xldzIpOworICByZXR1cm4gZGVsYXkxIC0gZGVsYXkyICogMjsKK30KKwordm9pZAorUmVzaXplcjo6YnVmZmVyV2lyZURlbGF5KExpYmVydHlDZWxsICpidWZmZXJfY2VsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgd2lyZV9sZW5ndGgsIC8vIG1ldGVycworICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJldHVybiB2YWx1ZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgRGVsYXkgJmRlbGF5LAorICAgICAgICAgICAgICAgICAgICAgICAgIFNsZXcgJnNsZXcpCit7CisgIExpYmVydHlQb3J0ICpsb2FkX3BvcnQsICpkcnZyX3BvcnQ7CisgIGJ1ZmZlcl9jZWxsLT5idWZmZXJQb3J0cyhsb2FkX3BvcnQsIGRydnJfcG9ydCk7CisgIHJldHVybiBjZWxsV2lyZURlbGF5KGRydnJfcG9ydCwgbG9hZF9wb3J0LCB3aXJlX2xlbmd0aCwgZGVsYXksIHNsZXcpOworfQorCisvLyBDZWxsIGRlbGF5IHBsdXMgd2lyZSBkZWxheS4KKy8vIFVzZSB0YXJnZXQgc2xldyBmb3IgaW5wdXQgc2xldy4KKy8vIGRydnJfcG9ydCBhbmQgbG9hZF9wb3J0IGRvIG5vdCBoYXZlIHRvIGJlIHRoZSBzYW1lIGxpYmVydHkgY2VsbC4KK3ZvaWQKK1Jlc2l6ZXI6OmNlbGxXaXJlRGVsYXkoTGliZXJ0eVBvcnQgKmRydnJfcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgTGliZXJ0eVBvcnQgKmxvYWRfcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHdpcmVfbGVuZ3RoLCAvLyBtZXRlcnMKKyAgICAgICAgICAgICAgICAgICAgICAgLy8gUmV0dXJuIHZhbHVlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgRGVsYXkgJmRlbGF5LAorICAgICAgICAgICAgICAgICAgICAgICBTbGV3ICZzbGV3KQoreworICAvLyBNYWtlIGEgKGhpZXJhcmNoaWNhbCkgYmxvY2sgdG8gdXNlIGFzIGEgc2NyYXRjaHBhZC4KKyAgZGJCbG9jayAqYmxvY2sgPSBkYkJsb2NrOjpjcmVhdGUoYmxvY2tfLCAid2lyZV9kZWxheSIsICcvJyk7CisgIGRiU3RhICpzdGEgPSBtYWtlQmxvY2tTdGEob3BlbnJvYWRfLCBibG9jayk7CisgIFBhcmFzaXRpY3MgKnBhcmFzaXRpY3MgPSBzdGEtPnBhcmFzaXRpY3MoKTsKKyAgTmV0d29yayAqbmV0d29yayA9IHN0YS0+bmV0d29yaygpOworICBBcmNEZWxheUNhbGMgKmFyY19kZWxheV9jYWxjID0gc3RhLT5hcmNEZWxheUNhbGMoKTsKKyAgQ29ybmVycyAqY29ybmVycyA9IHN0YS0+Y29ybmVycygpOworICBjb3JuZXJzLT5jb3B5KHN0YV8tPmNvcm5lcnMoKSk7CisKKyAgSW5zdGFuY2UgKnRvcF9pbnN0ID0gbmV0d29yay0+dG9wSW5zdGFuY2UoKTsKKyAgLy8gVG1wIG5ldCBmb3IgcGFyYXNpdGljcyB0byBsaXZlIG9uLgorICBOZXQgKm5ldCA9IHN0YS0+bWFrZU5ldCgid2lyZSIsIHRvcF9pbnN0KTsKKyAgTGliZXJ0eUNlbGwgKmRydnJfY2VsbCA9IGRydnJfcG9ydC0+bGliZXJ0eUNlbGwoKTsKKyAgTGliZXJ0eUNlbGwgKmxvYWRfY2VsbCA9IGxvYWRfcG9ydC0+bGliZXJ0eUNlbGwoKTsKKyAgSW5zdGFuY2UgKmRydnIgPSBzdGEtPm1ha2VJbnN0YW5jZSgiZHJ2ciIsIGRydnJfY2VsbCwgdG9wX2luc3QpOworICBJbnN0YW5jZSAqbG9hZCA9IHN0YS0+bWFrZUluc3RhbmNlKCJsb2FkIiwgbG9hZF9jZWxsLCB0b3BfaW5zdCk7CisgIHN0YS0+Y29ubmVjdFBpbihkcnZyLCBkcnZyX3BvcnQsIG5ldCk7CisgIHN0YS0+Y29ubmVjdFBpbihsb2FkLCBsb2FkX3BvcnQsIG5ldCk7CisgIFBpbiAqZHJ2cl9waW4gPSBuZXR3b3JrLT5maW5kUGluKGRydnIsIGRydnJfcG9ydCk7CisgIFBpbiAqbG9hZF9waW4gPSBuZXR3b3JrLT5maW5kUGluKGxvYWQsIGxvYWRfcG9ydCk7CisKKyAgLy8gTWF4IHJpc2UvZmFsbCBkZWxheXMuCisgIGRlbGF5ID0gLUlORjsKKyAgc2xldyA9IC1JTkY7CisKKyAgZm9yIChDb3JuZXIgKmNvcm5lciA6ICpjb3JuZXJzKSB7CisgICAgY29uc3QgRGNhbGNBbmFseXNpc1B0ICpkY2FsY19hcCA9IGNvcm5lci0+ZmluZERjYWxjQW5hbHlzaXNQdChtYXhfKTsKKyAgICBjb25zdCBQdnQgKnB2dCA9IGRjYWxjX2FwLT5vcGVyYXRpbmdDb25kaXRpb25zKCk7CisKKyAgICBtYWtlV2lyZVBhcmFzaXRpYyhuZXQsIGRydnJfcGluLCBsb2FkX3Bpbiwgd2lyZV9sZW5ndGgsIGNvcm5lciwgcGFyYXNpdGljcyk7CisgICAgLy8gTGV0IGRlbGF5IGNhbGMgcmVkdWNlIHBhcmFzaXRpYyBuZXR3b3JrIGFzIGl0IHNlZXMgZml0LgorICAgIFBhcmFzaXRpYyAqZHJ2cl9wYXJhc2l0aWMgPSBhcmNfZGVsYXlfY2FsYy0+ZmluZFBhcmFzaXRpYyhkcnZyX3BpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmlzZUZhbGw6OnJpc2UoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGNhbGNfYXApOworICAgIExpYmVydHlDZWxsVGltaW5nQXJjU2V0SXRlcmF0b3Igc2V0X2l0ZXIoZHJ2cl9jZWxsKTsKKyAgICB3aGlsZSAoc2V0X2l0ZXIuaGFzTmV4dCgpKSB7CisgICAgICBUaW1pbmdBcmNTZXQgKmFyY19zZXQgPSBzZXRfaXRlci5uZXh0KCk7CisgICAgICBpZiAoYXJjX3NldC0+dG8oKSA9PSBkcnZyX3BvcnQpIHsKKyAgICAgICAgVGltaW5nQXJjU2V0QXJjSXRlcmF0b3IgYXJjX2l0ZXIoYXJjX3NldCk7CisgICAgICAgIHdoaWxlIChhcmNfaXRlci5oYXNOZXh0KCkpIHsKKyAgICAgICAgICBUaW1pbmdBcmMgKmFyYyA9IGFyY19pdGVyLm5leHQoKTsKKyAgICAgICAgICBSaXNlRmFsbCAqaW5fcmYgPSBhcmMtPmZyb21UcmFucygpLT5hc1Jpc2VGYWxsKCk7CisgICAgICAgICAgZG91YmxlIGluX3NsZXcgPSB0Z3Rfc2xld3NfW2luX3JmLT5pbmRleCgpXTsKKyAgICAgICAgICBBcmNEZWxheSBnYXRlX2RlbGF5OworICAgICAgICAgIFNsZXcgZHJ2cl9zbGV3OworICAgICAgICAgIGFyY19kZWxheV9jYWxjLT5nYXRlRGVsYXkoZHJ2cl9jZWxsLCBhcmMsIGluX3NsZXcsIDAuMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRydnJfcGFyYXNpdGljLCAwLjAsIHB2dCwgZGNhbGNfYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYXRlX2RlbGF5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJ2cl9zbGV3KTsKKyAgICAgICAgICBBcmNEZWxheSB3aXJlX2RlbGF5OworICAgICAgICAgIFNsZXcgbG9hZF9zbGV3OworICAgICAgICAgIGFyY19kZWxheV9jYWxjLT5sb2FkRGVsYXkobG9hZF9waW4sIHdpcmVfZGVsYXksIGxvYWRfc2xldyk7CisgICAgICAgICAgZGVsYXkgPSBtYXgoZGVsYXksIGdhdGVfZGVsYXkgKyB3aXJlX2RlbGF5KTsKKyAgICAgICAgICBzbGV3ID0gbWF4KHNsZXcsIGxvYWRfc2xldyk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgICAgYXJjX2RlbGF5X2NhbGMtPmZpbmlzaERydnJQaW4oKTsKKyAgICBwYXJhc2l0aWNzLT5kZWxldGVQYXJhc2l0aWNzKG5ldCwgZGNhbGNfYXAtPnBhcmFzaXRpY0FuYWx5c2lzUHQoKSk7CisgIH0KKworICAvLyBDbGVhbnVwIHRoZSB0dXJkcy4KKyAgc3RhLT5kZWxldGVJbnN0YW5jZShkcnZyKTsKKyAgc3RhLT5kZWxldGVJbnN0YW5jZShsb2FkKTsKKyAgc3RhLT5kZWxldGVOZXQobmV0KTsKKyAgZGVsZXRlIHN0YTsKKyAgZGJCbG9jazo6ZGVzdHJveShibG9jayk7Cit9CisKK3ZvaWQKK1Jlc2l6ZXI6Om1ha2VXaXJlUGFyYXNpdGljKE5ldCAqbmV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgUGluICpkcnZyX3BpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFBpbiAqbG9hZF9waW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgd2lyZV9sZW5ndGgsIC8vIG1ldGVycworICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ29ybmVyICpjb3JuZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXJhc2l0aWNzICpwYXJhc2l0aWNzKQoreworICBjb25zdCBQYXJhc2l0aWNBbmFseXNpc1B0ICpwYXJhc2l0aWNzX2FwID0KKyAgICBjb3JuZXItPmZpbmRQYXJhc2l0aWNBbmFseXNpc1B0KG1heF8pOworICBQYXJhc2l0aWMgKnBhcmFzaXRpYyA9IHBhcmFzaXRpY3MtPm1ha2VQYXJhc2l0aWNOZXR3b3JrKG5ldCwgZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYXNpdGljc19hcCk7CisgIFBhcmFzaXRpY05vZGUgKm4xID0gcGFyYXNpdGljcy0+ZW5zdXJlUGFyYXNpdGljTm9kZShwYXJhc2l0aWMsIGRydnJfcGluKTsKKyAgUGFyYXNpdGljTm9kZSAqbjIgPSBwYXJhc2l0aWNzLT5lbnN1cmVQYXJhc2l0aWNOb2RlKHBhcmFzaXRpYywgbG9hZF9waW4pOworICBkb3VibGUgd2lyZV9jYXAgPSB3aXJlX2xlbmd0aCAqIHdpcmVTaWduYWxDYXBhY2l0YW5jZShjb3JuZXIpOworICBkb3VibGUgd2lyZV9yZXMgPSB3aXJlX2xlbmd0aCAqIHdpcmVTaWduYWxSZXNpc3RhbmNlKGNvcm5lcik7CisgIHBhcmFzaXRpY3MtPmluY3JDYXAobjEsIHdpcmVfY2FwIC8gMi4wLCBwYXJhc2l0aWNzX2FwKTsKKyAgcGFyYXNpdGljcy0+bWFrZVJlc2lzdG9yKG51bGxwdHIsIG4xLCBuMiwgd2lyZV9yZXMsIHBhcmFzaXRpY3NfYXApOworICBwYXJhc2l0aWNzLT5pbmNyQ2FwKG4yLCB3aXJlX2NhcCAvIDIuMCwgcGFyYXNpdGljc19hcCk7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworZG91YmxlCitSZXNpemVyOjpmaW5kTWF4U2xld1dpcmVMZW5ndGgoTGliZXJ0eVBvcnQgKmRydnJfcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaWJlcnR5UG9ydCAqbG9hZF9wb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBtYXhfc2xldywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDb3JuZXIgKmNvcm5lcikKK3sKKyAgZW5zdXJlQmxvY2soKTsKKyAgLy8gd2lyZV9sZW5ndGgxIGxvd2VyIGJvdW5kCisgIC8vIHdpcmVfbGVuZ3RoMiB1cHBlciBib3VuZAorICBkb3VibGUgd2lyZV9sZW5ndGgxID0gMC4wOworICBkb3VibGUgd2lyZV9sZW5ndGgyID0gc3RkOjpzcXJ0KG1heF9zbGV3IC8od2lyZVNpZ25hbFJlc2lzdGFuY2UoY29ybmVyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB3aXJlU2lnbmFsQ2FwYWNpdGFuY2UoY29ybmVyKSkpOworICBkb3VibGUgdG9sID0gLjAxOyAvLyAxJQorICBkb3VibGUgZGlmZjEgPSBtYXhTbGV3V2lyZURpZmYoZHJ2cl9wb3J0LCBsb2FkX3BvcnQsIHdpcmVfbGVuZ3RoMiwgbWF4X3NsZXcpOworICAvLyBiaW5hcnkgc2VhcmNoIGZvciBkaWZmID0gMC4KKyAgd2hpbGUgKGFicyh3aXJlX2xlbmd0aDEgLSB3aXJlX2xlbmd0aDIpID4gbWF4KHdpcmVfbGVuZ3RoMSwgd2lyZV9sZW5ndGgyKSAqIHRvbCkgeworICAgIGlmIChkaWZmMSA8IDAuMCkgeworICAgICAgd2lyZV9sZW5ndGgxID0gd2lyZV9sZW5ndGgyOworICAgICAgd2lyZV9sZW5ndGgyICo9IDI7CisgICAgICBkaWZmMSA9IG1heFNsZXdXaXJlRGlmZihkcnZyX3BvcnQsIGxvYWRfcG9ydCwgd2lyZV9sZW5ndGgyLCBtYXhfc2xldyk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgZG91YmxlIHdpcmVfbGVuZ3RoMyA9ICh3aXJlX2xlbmd0aDEgKyB3aXJlX2xlbmd0aDIpIC8gMi4wOworICAgICAgZG91YmxlIGRpZmYyID0gbWF4U2xld1dpcmVEaWZmKGRydnJfcG9ydCwgbG9hZF9wb3J0LCB3aXJlX2xlbmd0aDMsIG1heF9zbGV3KTsKKyAgICAgIGlmIChkaWZmMiA8IDAuMCkgeworICAgICAgICB3aXJlX2xlbmd0aDEgPSB3aXJlX2xlbmd0aDM7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgd2lyZV9sZW5ndGgyID0gd2lyZV9sZW5ndGgzOworICAgICAgICBkaWZmMSA9IGRpZmYyOworICAgICAgfQorICAgIH0KKyAgfQorICByZXR1cm4gd2lyZV9sZW5ndGgxOworfQorCisvLyBvYmplY3RpdmUgZnVuY3Rpb24KK2RvdWJsZQorUmVzaXplcjo6bWF4U2xld1dpcmVEaWZmKExpYmVydHlQb3J0ICpkcnZyX3BvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgTGliZXJ0eVBvcnQgKmxvYWRfcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgd2lyZV9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIG1heF9zbGV3KQoreworICBEZWxheSBkZWxheTsKKyAgU2xldyBzbGV3OworICBjZWxsV2lyZURlbGF5KGRydnJfcG9ydCwgbG9hZF9wb3J0LCB3aXJlX2xlbmd0aCwgZGVsYXksIHNsZXcpOworICByZXR1cm4gc2xldyAtIG1heF9zbGV3OworfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2RvdWJsZQorUmVzaXplcjo6ZGVzaWduQXJlYSgpCit7CisgIGVuc3VyZUJsb2NrKCk7CisgIGVuc3VyZURlc2lnbkFyZWEoKTsKKyAgcmV0dXJuIGRlc2lnbl9hcmVhXzsKK30KKwordm9pZAorUmVzaXplcjo6ZGVzaWduQXJlYUluY3IoZmxvYXQgZGVsdGEpCit7CisgIGRlc2lnbl9hcmVhXyArPSBkZWx0YTsKK30KKwordm9pZAorUmVzaXplcjo6ZW5zdXJlRGVzaWduQXJlYSgpCit7CisgIGlmIChibG9ja18pIHsKKyAgICBkZXNpZ25fYXJlYV8gPSAwLjA7CisgICAgZm9yIChkYkluc3QgKmluc3QgOiBibG9ja18tPmdldEluc3RzKCkpIHsKKyAgICAgIGRiTWFzdGVyICptYXN0ZXIgPSBpbnN0LT5nZXRNYXN0ZXIoKTsKKyAgICAgIC8vIERvbid0IGNvdW50IGZpbGxlcnMgb3RoZXJ3aXNlIHlvdSdsbCBhbHdheXMgZ2V0IDEwMCUgdXRpbGl6YXRpb24KKyAgICAgIGlmICghbWFzdGVyLT5pc0ZpbGxlcigpKSB7CisgICAgICAgIGRlc2lnbl9hcmVhXyArPSBhcmVhKG1hc3Rlcik7CisgICAgICB9CisgICAgfQorICB9Cit9CisKK2ludAorUmVzaXplcjo6ZmFub3V0KFBpbiAqZHJ2cl9waW4pCit7CisgIGludCBmYW5vdXQgPSAwOworICBOZXRDb25uZWN0ZWRQaW5JdGVyYXRvciAqcGluX2l0ZXIgPSBuZXR3b3JrXy0+Y29ubmVjdGVkUGluSXRlcmF0b3IoZHJ2cl9waW4pOworICB3aGlsZSAocGluX2l0ZXItPmhhc05leHQoKSkgeworICAgIFBpbiAqcGluID0gcGluX2l0ZXItPm5leHQoKTsKKyAgICBpZiAocGluICE9IGRydnJfcGluKQorICAgICAgZmFub3V0Kys7CisgIH0KKyAgZGVsZXRlIHBpbl9pdGVyOworICByZXR1cm4gZmFub3V0OworfQorCitib29sCitSZXNpemVyOjppc0Z1bmNPbmVaZXJvKGNvbnN0IFBpbiAqZHJ2cl9waW4pCit7CisgIExpYmVydHlQb3J0ICpwb3J0ID0gbmV0d29ya18tPmxpYmVydHlQb3J0KGRydnJfcGluKTsKKyAgaWYgKHBvcnQpIHsKKyAgICBGdW5jRXhwciAqZnVuYyA9IHBvcnQtPmZ1bmN0aW9uKCk7CisgICAgcmV0dXJuIGZ1bmMgJiYgKGZ1bmMtPm9wKCkgPT0gRnVuY0V4cHI6Om9wX3plcm8KKyAgICAgICAgICAgICAgICAgICAgfHwgZnVuYy0+b3AoKSA9PSBGdW5jRXhwcjo6b3Bfb25lKTsKKyAgfQorICByZXR1cm4gZmFsc2U7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwordm9pZAorUmVzaXplcjo6cmVwYWlyQ2xrSW52ZXJ0ZXJzKCkKK3sKKyAgLy8gQWJicmV2aWF0ZWQgY29weVN0YXRlCisgIGRiX25ldHdvcmtfID0gc3RhXy0+Z2V0RGJOZXR3b3JrKCk7CisgIHN0YV8tPmVuc3VyZUxldmVsaXplZCgpOworICBncmFwaF8gPSBzdGFfLT5ncmFwaCgpOworICBlbnN1cmVCbG9jaygpOworICBlbnN1cmVEZXNpZ25BcmVhKCk7CisgIGZvciAoSW5zdGFuY2UgKmludiA6IGZpbmRDbGtJbnZlcnRlcnMoKSkKKyAgICBjbG9uZUNsa0ludmVydGVyKGludik7Cit9CisKK0luc3RhbmNlU2VxCitSZXNpemVyOjpmaW5kQ2xrSW52ZXJ0ZXJzKCkKK3sKKyAgSW5zdGFuY2VTZXEgY2xrX2ludmVydGVyczsKKyAgQ2xrQXJyaXZhbFNlYXJjaFByZWQgc3JjaF9wcmVkKHRoaXMpOworICBCZnNGd2RJdGVyYXRvciBiZnMoQmZzSW5kZXg6Om90aGVyLCAmc3JjaF9wcmVkLCB0aGlzKTsKKyAgZm9yIChDbG9jayAqY2xrIDogc2RjXy0+Y2xrcygpKSB7CisgICAgZm9yIChQaW4gKnBpbiA6IGNsay0+bGVhZlBpbnMoKSkgeworICAgICAgVmVydGV4ICp2ZXJ0ZXggPSBncmFwaF8tPnBpbkRydnJWZXJ0ZXgocGluKTsKKyAgICAgIGJmcy5lbnF1ZXVlKHZlcnRleCk7CisgICAgfQorICB9CisgIHdoaWxlIChiZnMuaGFzTmV4dCgpKSB7CisgICAgVmVydGV4ICp2ZXJ0ZXggPSBiZnMubmV4dCgpOworICAgIGNvbnN0IFBpbiAqcGluID0gdmVydGV4LT5waW4oKTsKKyAgICBJbnN0YW5jZSAqaW5zdCA9IG5ldHdvcmtfLT5pbnN0YW5jZShwaW4pOworICAgIExpYmVydHlDZWxsICpsaWJfY2VsbCA9IG5ldHdvcmtfLT5saWJlcnR5Q2VsbChpbnN0KTsKKyAgICBpZiAodmVydGV4LT5pc0RyaXZlcihuZXR3b3JrXykKKyAgICAgICAgJiYgbGliX2NlbGwKKyAgICAgICAgJiYgbGliX2NlbGwtPmlzSW52ZXJ0ZXIoKSkgeworICAgICAgY2xrX2ludmVydGVycy5wdXNoX2JhY2soaW5zdCk7CisgICAgICBkZWJ1Z1ByaW50KGxvZ2dlcl8sIFJTWiwgInJlcGFpcl9jbGtfaW52ZXJ0ZXJzIiwgMiwgImludmVydGVyIHt9IiwKKyAgICAgICAgICAgICAgICAgbmV0d29ya18tPnBhdGhOYW1lKGluc3QpKTsKKyAgICB9CisgICAgaWYgKCF2ZXJ0ZXgtPmlzUmVnQ2xrKCkpCisgICAgICBiZnMuZW5xdWV1ZUFkamFjZW50VmVydGljZXModmVydGV4KTsKKyAgfQorICByZXR1cm4gY2xrX2ludmVydGVyczsKK30KKwordm9pZAorUmVzaXplcjo6Y2xvbmVDbGtJbnZlcnRlcihJbnN0YW5jZSAqaW52KQoreworICBMaWJlcnR5Q2VsbCAqaW52X2NlbGwgPSBuZXR3b3JrXy0+bGliZXJ0eUNlbGwoaW52KTsKKyAgTGliZXJ0eVBvcnQgKmluX3BvcnQsICpvdXRfcG9ydDsKKyAgaW52X2NlbGwtPmJ1ZmZlclBvcnRzKGluX3BvcnQsIG91dF9wb3J0KTsKKyAgUGluICppbl9waW4gPSBuZXR3b3JrXy0+ZmluZFBpbihpbnYsIGluX3BvcnQpOworICBQaW4gKm91dF9waW4gPSBuZXR3b3JrXy0+ZmluZFBpbihpbnYsIG91dF9wb3J0KTsKKyAgTmV0ICppbl9uZXQgPSBuZXR3b3JrXy0+bmV0KGluX3Bpbik7CisgIGRiTmV0ICppbl9uZXRfZGIgPSBkYl9uZXR3b3JrXy0+c3RhVG9EYihpbl9uZXQpOworICBOZXQgKm91dF9uZXQgPSBuZXR3b3JrXy0+aXNUb3BMZXZlbFBvcnQob3V0X3BpbikKKyAgICA/IG5ldHdvcmtfLT5uZXQobmV0d29ya18tPnRlcm0ob3V0X3BpbikpCisgICAgOiBuZXR3b3JrXy0+bmV0KG91dF9waW4pOworICBpZiAob3V0X25ldCkgeworICAgIGNvbnN0IGNoYXIgKmludl9uYW1lID0gbmV0d29ya18tPm5hbWUoaW52KTsKKyAgICBJbnN0YW5jZSAqdG9wX2luc3QgPSBuZXR3b3JrXy0+dG9wSW5zdGFuY2UoKTsKKyAgICBOZXRDb25uZWN0ZWRQaW5JdGVyYXRvciAqbG9hZF9pdGVyID0gbmV0d29ya18tPnBpbkl0ZXJhdG9yKG91dF9uZXQpOworICAgIHdoaWxlIChsb2FkX2l0ZXItPmhhc05leHQoKSkgeworICAgICAgUGluICpsb2FkX3BpbiA9IGxvYWRfaXRlci0+bmV4dCgpOworICAgICAgaWYgKGxvYWRfcGluICE9IG91dF9waW4pIHsKKyAgICAgICAgc3RyaW5nIGNsb25lX25hbWUgPSBtYWtlVW5pcXVlSW5zdE5hbWUoaW52X25hbWUsIHRydWUpOworICAgICAgICBJbnN0YW5jZSAqY2xvbmUgPSBtYWtlSW5zdGFuY2UoaW52X2NlbGwsIGNsb25lX25hbWUuY19zdHIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcF9pbnN0KTsKKyAgICAgICAgUG9pbnQgY2xvbmVfbG9jID0gZGJfbmV0d29ya18tPmxvY2F0aW9uKGxvYWRfcGluKTsKKyAgICAgICAgam91cm5hbE1ha2VCdWZmZXIoY2xvbmUpOworICAgICAgICBzZXRMb2NhdGlvbihjbG9uZSwgY2xvbmVfbG9jKTsKKworICAgICAgICBOZXQgKmNsb25lX291dF9uZXQgPSBtYWtlVW5pcXVlTmV0KCk7CisgICAgICAgIGRiTmV0ICpjbG9uZV9vdXRfbmV0X2RiID0gZGJfbmV0d29ya18tPnN0YVRvRGIoY2xvbmVfb3V0X25ldCk7CisgICAgICAgIGNsb25lX291dF9uZXRfZGItPnNldFNpZ1R5cGUoaW5fbmV0X2RiLT5nZXRTaWdUeXBlKCkpOworCisgICAgICAgIEluc3RhbmNlICpsb2FkID0gbmV0d29ya18tPmluc3RhbmNlKGxvYWRfcGluKTsKKyAgICAgICAgc3RhXy0+Y29ubmVjdFBpbihjbG9uZSwgaW5fcG9ydCwgaW5fbmV0KTsKKyAgICAgICAgc3RhXy0+Y29ubmVjdFBpbihjbG9uZSwgb3V0X3BvcnQsIGNsb25lX291dF9uZXQpOworCisgICAgICAgIC8vIENvbm5lY3QgbG9hZCB0byBjbG9uZQorICAgICAgICBzdGFfLT5kaXNjb25uZWN0UGluKGxvYWRfcGluKTsKKyAgICAgICAgUG9ydCAqbG9hZF9wb3J0ID0gbmV0d29ya18tPnBvcnQobG9hZF9waW4pOworICAgICAgICBzdGFfLT5jb25uZWN0UGluKGxvYWQsIGxvYWRfcG9ydCwgY2xvbmVfb3V0X25ldCk7CisgICAgICB9CisgICAgfQorICAgIGRlbGV0ZSBsb2FkX2l0ZXI7CisKKyAgICAvLyBEZWxldGUgaW52CisgICAgc3RhXy0+ZGlzY29ubmVjdFBpbihpbl9waW4pOworICAgIHN0YV8tPmRpc2Nvbm5lY3RQaW4ob3V0X3Bpbik7CisgICAgc3RhXy0+ZGVsZXRlTmV0KG91dF9uZXQpOworICAgIHBhcmFzaXRpY3NfaW52YWxpZF8uZXJhc2Uob3V0X25ldCk7CisgICAgc3RhXy0+ZGVsZXRlSW5zdGFuY2UoaW52KTsKKyAgfQorfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKy8vIEpvdXJuYWwgdG8gcm9sbCBiYWNrIGNoYW5nZXMgKE9wZW5EQiBub3QgdXAgdG8gdGhlIHRhc2spLgordm9pZAorUmVzaXplcjo6am91cm5hbEJlZ2luKCkKK3sKKyAgZGVidWdQcmludChsb2dnZXJfLCBSU1osICJqb3VybmFsIiwgMSwgImpvdXJuYWwgYmVnaW4iKTsKKyAgcmVzaXplZF9pbnN0X21hcF8uY2xlYXIoKTsKKyAgaW5zZXJ0ZWRfYnVmZmVyc18uY2xlYXIoKTsKK30KKwordm9pZAorUmVzaXplcjo6am91cm5hbEluc3RSZXBsYWNlQ2VsbEJlZm9yZShJbnN0YW5jZSAqaW5zdCkKK3sKKyAgTGliZXJ0eUNlbGwgKmxpYl9jZWxsID0gbmV0d29ya18tPmxpYmVydHlDZWxsKGluc3QpOworICBkZWJ1Z1ByaW50KGxvZ2dlcl8sIFJTWiwgImpvdXJuYWwiLCAxLCAiam91cm5hbCByZXBsYWNlIHt9ICh7fSkiLAorICAgICAgICAgICAgIG5ldHdvcmtfLT5wYXRoTmFtZShpbnN0KSwKKyAgICAgICAgICAgICBsaWJfY2VsbC0+bmFtZSgpKTsKKyAgLy8gRG8gbm90IGNsb2JiZXIgYW4gZXhpc3RpbmcgY2hlY2twb2ludCBjZWxsLgorICBpZiAoIXJlc2l6ZWRfaW5zdF9tYXBfLmhhc0tleShpbnN0KSkKKyAgICByZXNpemVkX2luc3RfbWFwX1tpbnN0XSA9IGxpYl9jZWxsOworfQorCit2b2lkCitSZXNpemVyOjpqb3VybmFsTWFrZUJ1ZmZlcihJbnN0YW5jZSAqYnVmZmVyKQoreworICBkZWJ1Z1ByaW50KGxvZ2dlcl8sIFJTWiwgImpvdXJuYWwiLCAxLCAiam91cm5hbCBtYWtlX2J1ZmZlciB7fSIsCisgICAgICAgICAgICAgbmV0d29ya18tPnBhdGhOYW1lKGJ1ZmZlcikpOworICBpbnNlcnRlZF9idWZmZXJzXy5pbnNlcnQoYnVmZmVyKTsKK30KKwordm9pZAorUmVzaXplcjo6am91cm5hbFJlc3RvcmUoKQoreworICBmb3IgKGF1dG8gaW5zdF9jZWxsIDogcmVzaXplZF9pbnN0X21hcF8pIHsKKyAgICBJbnN0YW5jZSAqaW5zdCA9IGluc3RfY2VsbC5maXJzdDsKKyAgICBpZiAoIWluc2VydGVkX2J1ZmZlcnNfLmhhc0tleShpbnN0KSkgeworICAgICAgTGliZXJ0eUNlbGwgKmxpYl9jZWxsID0gaW5zdF9jZWxsLnNlY29uZDsKKyAgICAgIGRlYnVnUHJpbnQobG9nZ2VyXywgUlNaLCAiam91cm5hbCIsIDEsICJqb3VybmFsIHJlc3RvcmUge30gKHt9KSIsCisgICAgICAgICAgICAgICAgIG5ldHdvcmtfLT5wYXRoTmFtZShpbnN0KSwKKyAgICAgICAgICAgICAgICAgbGliX2NlbGwtPm5hbWUoKSk7CisgICAgICByZXBsYWNlQ2VsbChpbnN0LCBsaWJfY2VsbCwgZmFsc2UpOworICAgICAgcmVzaXplX2NvdW50Xy0tOworICAgIH0KKyAgfQorICBmb3IgKEluc3RhbmNlICpidWZmZXIgOiBpbnNlcnRlZF9idWZmZXJzXykgeworICAgIGRlYnVnUHJpbnQobG9nZ2VyXywgUlNaLCAiam91cm5hbCIsIDEsICJqb3VybmFsIHJlbW92ZSB7fSIsCisgICAgICAgICAgICAgICBuZXR3b3JrXy0+cGF0aE5hbWUoYnVmZmVyKSk7CisgICAgcmVtb3ZlQnVmZmVyKGJ1ZmZlcik7CisgICAgaW5zZXJ0ZWRfYnVmZmVyX2NvdW50Xy0tOworICB9Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworY2xhc3MgU3RlaW5lclJlbmRlcmVyIDogcHVibGljIGd1aTo6UmVuZGVyZXIKK3sKK3B1YmxpYzoKKyAgU3RlaW5lclJlbmRlcmVyKCk7CisgIHZvaWQgaGlnaGxpZ2h0KFN0ZWluZXJUcmVlICp0cmVlKTsKKyAgdmlydHVhbCB2b2lkIGRyYXdPYmplY3RzKGd1aTo6UGFpbnRlciYgLyogcGFpbnRlciAqLykgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgIFN0ZWluZXJUcmVlICp0cmVlXzsKK307CisKK3ZvaWQKK1Jlc2l6ZXI6OmhpZ2hsaWdodFN0ZWluZXIoY29uc3QgUGluICpkcnZyKQoreworICBpZiAoZ3VpOjpHdWk6OmVuYWJsZWQoKSkgeworICAgIGlmIChzdGVpbmVyX3JlbmRlcmVyXyA9PSBudWxscHRyKSB7CisgICAgICBzdGVpbmVyX3JlbmRlcmVyXyA9IG5ldyBTdGVpbmVyUmVuZGVyZXIoKTsKKyAgICAgIGd1aV8tPnJlZ2lzdGVyUmVuZGVyZXIoc3RlaW5lcl9yZW5kZXJlcl8pOworICAgIH0KKyAgICBTdGVpbmVyVHJlZSAqdHJlZSA9IG51bGxwdHI7CisgICAgaWYgKGRydnIpCisgICAgICB0cmVlID0gbWFrZVN0ZWluZXJUcmVlKGRydnIsIGZhbHNlLCBtYXhfc3RlaW5lcl9waW5fY291bnRfLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHRfYnVpbGRlcl8sIGRiX25ldHdvcmtfLCBsb2dnZXJfKTsKKyAgICBzdGVpbmVyX3JlbmRlcmVyXy0+aGlnaGxpZ2h0KHRyZWUpOworICB9Cit9CisKK1N0ZWluZXJSZW5kZXJlcjo6U3RlaW5lclJlbmRlcmVyKCkgOgorICB0cmVlXyhudWxscHRyKQoreworfQorCit2b2lkCitTdGVpbmVyUmVuZGVyZXI6OmhpZ2hsaWdodChTdGVpbmVyVHJlZSAqdHJlZSkKK3sKKyAgdHJlZV8gPSB0cmVlOworfQorCit2b2lkCitTdGVpbmVyUmVuZGVyZXI6OmRyYXdPYmplY3RzKGd1aTo6UGFpbnRlciAmcGFpbnRlcikKK3sKKyAgaWYgKHRyZWVfKSB7CisgICAgcGFpbnRlci5zZXRQZW4oZ3VpOjpQYWludGVyOjpyZWQsIHRydWUpOworICAgIGZvciAoaW50IGkgPSAwIDsgaSA8IHRyZWVfLT5icmFuY2hDb3VudCgpOyArK2kpIHsKKyAgICAgIFBvaW50IHB0MSwgcHQyOworICAgICAgaW50IHN0ZWluZXJfcHQxLCBzdGVpbmVyX3B0MjsKKyAgICAgIGludCB3aXJlX2xlbmd0aDsKKyAgICAgIHRyZWVfLT5icmFuY2goaSwgcHQxLCBzdGVpbmVyX3B0MSwgcHQyLCBzdGVpbmVyX3B0Miwgd2lyZV9sZW5ndGgpOworICAgICAgcGFpbnRlci5kcmF3TGluZShwdDEsIHB0Mik7CisgICAgfQorICB9Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworUGluU2V0CitSZXNpemVyOjpmaW5kRmFuaW5GYW5vdXRzKFBpblNldCAqZW5kX3BpbnMpCit7CisgIC8vIEFiYnJldmlhdGVkIGNvcHlTdGF0ZQorICBkYl9uZXR3b3JrXyA9IHN0YV8tPmdldERiTmV0d29yaygpOworICBzdGFfLT5lbnN1cmVMZXZlbGl6ZWQoKTsKKyAgZ3JhcGhfID0gc3RhXy0+Z3JhcGgoKTsKKworICBWZXJ0ZXhTZXQgZW5kczsKKyAgZm9yIChQaW4gKnBpbiA6ICplbmRfcGlucykgeworICAgIFZlcnRleCAqZW5kID0gZ3JhcGhfLT5waW5Mb2FkVmVydGV4KHBpbik7CisgICAgZW5kcy5pbnNlcnQoZW5kKTsKKyAgfQorICBQaW5TZXQgZmFuaW5fZmFub3V0X3BpbnM7CisgIFZlcnRleFNldCBmYW5pbl9mYW5vdXRzID0gZmluZEZhbmluRmFub3V0cyhlbmRzKTsKKyAgZm9yIChWZXJ0ZXggKnZlcnRleCA6IGZhbmluX2Zhbm91dHMpCisgICAgZmFuaW5fZmFub3V0X3BpbnMuaW5zZXJ0KHZlcnRleC0+cGluKCkpOworICByZXR1cm4gZmFuaW5fZmFub3V0X3BpbnM7Cit9CisKK1ZlcnRleFNldAorUmVzaXplcjo6ZmluZEZhbmluRmFub3V0cyhWZXJ0ZXhTZXQgJmVuZHMpCit7CisgIC8vIFNlYXJjaCBiYWNrd2FyZHMgZnJvbSBlbmRzIHRvIGZhbmluIHJlZ2lzdGVyIG91dHB1dHMgYW5kIGlucHV0IHBvcnRzLgorICBWZXJ0ZXhTZXQgZmFuaW5fcm9vdHMgPSBmaW5kRmFuaW5Sb290cyhlbmRzKTsKKyAgLy8gU2VhcmNoIGZvcndhcmQgZnJvbSByZWdpc3RlciBvdXRwdXRzLgorICBWZXJ0ZXhTZXQgZmFub3V0cyA9IGZpbmRGYW5vdXRzKGZhbmluX3Jvb3RzKTsKKyAgcmV0dXJuIGZhbm91dHM7Cit9CisKKy8vIEZpbmQgc291cmNlIHBpbnMgZm9yIGxvZ2ljIGZhbmluIG9mIGVuZHMuCitQaW5TZXQKK1Jlc2l6ZXI6OmZpbmRGYW5pbnMoUGluU2V0ICplbmRfcGlucykKK3sKKyAgLy8gQWJicmV2aWF0ZWQgY29weVN0YXRlCisgIGRiX25ldHdvcmtfID0gc3RhXy0+Z2V0RGJOZXR3b3JrKCk7CisgIHN0YV8tPmVuc3VyZUxldmVsaXplZCgpOworICBncmFwaF8gPSBzdGFfLT5ncmFwaCgpOworCisgIFZlcnRleFNldCBlbmRzOworICBmb3IgKFBpbiAqcGluIDogKmVuZF9waW5zKSB7CisgICAgVmVydGV4ICplbmQgPSBncmFwaF8tPnBpbkxvYWRWZXJ0ZXgocGluKTsKKyAgICBlbmRzLmluc2VydChlbmQpOworICB9CisKKyAgU2VhcmNoUHJlZE5vblJlZzIgcHJlZChzdGFfKTsKKyAgQmZzQmt3ZEl0ZXJhdG9yIGl0ZXIoQmZzSW5kZXg6Om90aGVyLCAmcHJlZCwgdGhpcyk7CisgIGZvciAoVmVydGV4ICp2ZXJ0ZXggOiBlbmRzKQorICAgIGl0ZXIuZW5xdWV1ZUFkamFjZW50VmVydGljZXModmVydGV4KTsKKworICBQaW5TZXQgZmFuaW5zOworICB3aGlsZSAoaXRlci5oYXNOZXh0KCkpIHsKKyAgICBWZXJ0ZXggKnZlcnRleCA9IGl0ZXIubmV4dCgpOworICAgIGlmIChpc1JlZ091dHB1dCh2ZXJ0ZXgpCisgICAgICAgIHx8IG5ldHdvcmtfLT5pc1RvcExldmVsUG9ydCh2ZXJ0ZXgtPnBpbigpKSkKKyAgICAgIGNvbnRpbnVlOworICAgIGVsc2UgeworICAgICAgaXRlci5lbnF1ZXVlQWRqYWNlbnRWZXJ0aWNlcyh2ZXJ0ZXgpOworICAgICAgZmFuaW5zLmluc2VydCh2ZXJ0ZXgtPnBpbigpKTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIGZhbmluczsKK30KKworLy8gRmluZCByb290cyBmb3IgbG9naWMgZmFuaW4gb2YgZW5kcy4KK1ZlcnRleFNldAorUmVzaXplcjo6ZmluZEZhbmluUm9vdHMoVmVydGV4U2V0ICZlbmRzKQoreworICBTZWFyY2hQcmVkTm9uUmVnMiBwcmVkKHN0YV8pOworICBCZnNCa3dkSXRlcmF0b3IgaXRlcihCZnNJbmRleDo6b3RoZXIsICZwcmVkLCB0aGlzKTsKKyAgZm9yIChWZXJ0ZXggKnZlcnRleCA6IGVuZHMpCisgICAgaXRlci5lbnF1ZXVlQWRqYWNlbnRWZXJ0aWNlcyh2ZXJ0ZXgpOworCisgIFZlcnRleFNldCByb290czsKKyAgd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSB7CisgICAgVmVydGV4ICp2ZXJ0ZXggPSBpdGVyLm5leHQoKTsKKyAgICBpZiAoaXNSZWdPdXRwdXQodmVydGV4KQorICAgICAgICB8fCBuZXR3b3JrXy0+aXNUb3BMZXZlbFBvcnQodmVydGV4LT5waW4oKSkpCisgICAgICByb290cy5pbnNlcnQodmVydGV4KTsKKyAgICBlbHNlCisgICAgICBpdGVyLmVucXVldWVBZGphY2VudFZlcnRpY2VzKHZlcnRleCk7CisgIH0KKyAgcmV0dXJuIHJvb3RzOworfQorCitib29sCitSZXNpemVyOjppc1JlZ091dHB1dChWZXJ0ZXggKnZlcnRleCkKK3sKKyAgTGliZXJ0eVBvcnQgKnBvcnQgPSBuZXR3b3JrXy0+bGliZXJ0eVBvcnQodmVydGV4LT5waW4oKSk7CisgIGlmIChwb3J0KSB7CisgICAgTGliZXJ0eUNlbGwgKmNlbGwgPSBwb3J0LT5saWJlcnR5Q2VsbCgpOworICAgIExpYmVydHlDZWxsVGltaW5nQXJjU2V0SXRlcmF0b3IgYXJjX3NldF9pdGVyKGNlbGwsIG51bGxwdHIsIHBvcnQpOworICAgIHdoaWxlIChhcmNfc2V0X2l0ZXIuaGFzTmV4dCgpKSB7CisgICAgICBUaW1pbmdBcmNTZXQgKmFyY19zZXQgPSBhcmNfc2V0X2l0ZXIubmV4dCgpOworICAgICAgaWYgKGFyY19zZXQtPnJvbGUoKS0+Z2VuZXJpY1JvbGUoKSA9PSBUaW1pbmdSb2xlOjpyZWdDbGtUb1EoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICB9CisgIHJldHVybiBmYWxzZTsKK30KKworVmVydGV4U2V0CitSZXNpemVyOjpmaW5kRmFub3V0cyhWZXJ0ZXhTZXQgJnJlZ19vdXRzKQoreworICBWZXJ0ZXhTZXQgZmFub3V0czsKKyAgc3RhOjpTZWFyY2hQcmVkTm9uTGF0Y2gyIHByZWQoc3RhXyk7CisgIEJmc0Z3ZEl0ZXJhdG9yIGl0ZXIoQmZzSW5kZXg6Om90aGVyLCAmcHJlZCwgdGhpcyk7CisgIGZvciAoVmVydGV4ICpyZWdfb3V0IDogcmVnX291dHMpCisgICAgaXRlci5lbnF1ZXVlQWRqYWNlbnRWZXJ0aWNlcyhyZWdfb3V0KTsKKworICB3aGlsZSAoaXRlci5oYXNOZXh0KCkpIHsKKyAgICBWZXJ0ZXggKnZlcnRleCA9IGl0ZXIubmV4dCgpOworICAgIGlmICghaXNSZWdpc3Rlcih2ZXJ0ZXgpKSB7CisgICAgICBmYW5vdXRzLmluc2VydCh2ZXJ0ZXgpOworICAgICAgaXRlci5lbnF1ZXVlQWRqYWNlbnRWZXJ0aWNlcyh2ZXJ0ZXgpOworICAgIH0KKyAgfQorICByZXR1cm4gZmFub3V0czsKK30KKworYm9vbAorUmVzaXplcjo6aXNSZWdpc3RlcihWZXJ0ZXggKnZlcnRleCkKK3sKKyAgTGliZXJ0eVBvcnQgKnBvcnQgPSBuZXR3b3JrXy0+bGliZXJ0eVBvcnQodmVydGV4LT5waW4oKSk7CisgIGlmIChwb3J0KSB7CisgICAgTGliZXJ0eUNlbGwgKmNlbGwgPSBwb3J0LT5saWJlcnR5Q2VsbCgpOworICAgIHJldHVybiBjZWxsICYmIGNlbGwtPmhhc1NlcXVlbnRpYWxzKCk7CisgIH0KKyAgcmV0dXJuIGZhbHNlOworfQorCitJbnN0YW5jZSAqUmVzaXplcjo6bWFrZUluc3RhbmNlKExpYmVydHlDZWxsICpjZWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0YW5jZSAqcGFyZW50KQoreworICBkZWJ1Z1ByaW50KGxvZ2dlcl8sIFJTWiwgIm1ha2VfaW5zdGFuY2UiLCAxLCAibWFrZSBpbnN0YW5jZSB7fSIsIG5hbWUpOworICBJbnN0YW5jZSAqaW5zdCA9IGRiX25ldHdvcmtfLT5tYWtlSW5zdGFuY2UoY2VsbCwgbmFtZSwgcGFyZW50KTsKKyAgZGJJbnN0ICpkYl9pbnN0ID0gZGJfbmV0d29ya18tPnN0YVRvRGIoaW5zdCk7CisgIGRiX2luc3QtPnNldFNvdXJjZVR5cGUob2RiOjpkYlNvdXJjZVR5cGU6OlRJTUlORyk7CisgIHJldHVybiBpbnN0OworfQorCit9IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEvaGFja3Mvc3JjL09wZW5TVEEvbmV0d29yay9Db25jcmV0ZU5ldHdvcmsuY2MgYi9oYWNrcy9zcmMvT3BlblNUQS9uZXR3b3JrL0NvbmNyZXRlTmV0d29yay5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGVlNjliCi0tLSAvZGV2L251bGwKKysrIGIvaGFja3Mvc3JjL09wZW5TVEEvbmV0d29yay9Db25jcmV0ZU5ldHdvcmsuY2MKQEAgLTAsMCArMSwyMDAwIEBACisvLyBPcGVuU1RBLCBTdGF0aWMgVGltaW5nIEFuYWx5emVyCisvLyBDb3B5cmlnaHQgKGMpIDIwMjIsIFBhcmFsbGF4IFNvZnR3YXJlLCBJbmMuCisvLyAKKy8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisvLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKy8vIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisvLyAKKy8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy8vIAorLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKy8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjaW5jbHVkZSAiQ29uY3JldGVOZXR3b3JrLmhoIgorCisjaW5jbHVkZSAiRGlzYWxsb3dDb3B5QXNzaWduLmhoIgorI2luY2x1ZGUgIlBhdHRlcm5NYXRjaC5oaCIKKyNpbmNsdWRlICJSZXBvcnQuaGgiCisjaW5jbHVkZSAiTGliZXJ0eS5oaCIKKyNpbmNsdWRlICJQb3J0RGlyZWN0aW9uLmhoIgorI2luY2x1ZGUgIkNvbmNyZXRlTGlicmFyeS5oaCIKKyNpbmNsdWRlICJOZXR3b3JrLmhoIgorCituYW1lc3BhY2Ugc3RhIHsKKworc3RhdGljIHZvaWQKK21ha2VDaGlsZE5ldHdvcmsoSW5zdGFuY2UgKnByb3RvLAorCQkgSW5zdGFuY2UgKnBhcmVudCwKKwkJIENvbmNyZXRlQmluZGluZ1RibCAqcGFyZW50X2JpbmRpbmdzLAorCQkgTmV0d29ya1JlYWRlciAqbmV0d29yayk7CitzdGF0aWMgdm9pZAorbWFrZUNsb25lUGlucyhJbnN0YW5jZSAqcHJvdG8sCisJICAgICAgSW5zdGFuY2UgKmNsb25lLAorCSAgICAgIEluc3RhbmNlICpjbG9uZV92aWV3LAorCSAgICAgIENvbmNyZXRlQmluZGluZ1RibCAqYmluZGluZ3MsCisJICAgICAgSW5zdGFuY2UgKnBhcmVudCwKKwkgICAgICBDb25jcmV0ZUJpbmRpbmdUYmwgKnBhcmVudF9iaW5kaW5ncywKKwkgICAgICBOZXR3b3JrUmVhZGVyICpuZXR3b3JrKTsKKworTmV0d29ya1JlYWRlciAqCittYWtlQ29uY3JldGVOZXR3b3JrKCkKK3sKKyAgcmV0dXJuIG5ldyBDb25jcmV0ZU5ldHdvcms7Cit9CisKK2NsYXNzIENvbmNyZXRlSW5zdGFuY2VDaGlsZEl0ZXJhdG9yIDogcHVibGljIEluc3RhbmNlQ2hpbGRJdGVyYXRvcgoreworcHVibGljOgorICBleHBsaWNpdCBDb25jcmV0ZUluc3RhbmNlQ2hpbGRJdGVyYXRvcihDb25jcmV0ZUluc3RhbmNlQ2hpbGRNYXAgKm1hcCk7CisgIGJvb2wgaGFzTmV4dCgpOworICBJbnN0YW5jZSAqbmV4dCgpOworCitwcml2YXRlOgorICBDb25jcmV0ZUluc3RhbmNlQ2hpbGRNYXA6OkNvbnN0SXRlcmF0b3IgaXRlcl87Cit9OworCitDb25jcmV0ZUluc3RhbmNlQ2hpbGRJdGVyYXRvcjo6CitDb25jcmV0ZUluc3RhbmNlQ2hpbGRJdGVyYXRvcihDb25jcmV0ZUluc3RhbmNlQ2hpbGRNYXAgKm1hcCkgOgorICBpdGVyXyhtYXApCit7Cit9CisKK2Jvb2wKK0NvbmNyZXRlSW5zdGFuY2VDaGlsZEl0ZXJhdG9yOjpoYXNOZXh0KCkKK3sKKyAgcmV0dXJuIGl0ZXJfLmhhc05leHQoKTsKK30KKworSW5zdGFuY2UgKgorQ29uY3JldGVJbnN0YW5jZUNoaWxkSXRlcmF0b3I6Om5leHQoKQoreworICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxJbnN0YW5jZSo+KGl0ZXJfLm5leHQoKSk7Cit9CisKK2NsYXNzIENvbmNyZXRlSW5zdGFuY2VOZXRJdGVyYXRvciA6IHB1YmxpYyBJbnN0YW5jZU5ldEl0ZXJhdG9yCit7CitwdWJsaWM6CisgIGV4cGxpY2l0IENvbmNyZXRlSW5zdGFuY2VOZXRJdGVyYXRvcihDb25jcmV0ZUluc3RhbmNlTmV0TWFwICpuZXRzKTsKKyAgYm9vbCBoYXNOZXh0KCk7CisgIE5ldCAqbmV4dCgpOworCitwcml2YXRlOgorICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oQ29uY3JldGVJbnN0YW5jZU5ldEl0ZXJhdG9yKTsKKyAgdm9pZCBmaW5kTmV4dCgpOworCisgIENvbmNyZXRlSW5zdGFuY2VOZXRNYXA6Okl0ZXJhdG9yIGl0ZXJfOworICBDb25jcmV0ZU5ldCAqbmV4dF87Cit9OworCitDb25jcmV0ZUluc3RhbmNlTmV0SXRlcmF0b3I6OgorQ29uY3JldGVJbnN0YW5jZU5ldEl0ZXJhdG9yKENvbmNyZXRlSW5zdGFuY2VOZXRNYXAgKm5ldHMpOgorICBpdGVyXyhuZXRzKSwKKyAgbmV4dF8obnVsbHB0cikKK3sKKyAgZmluZE5leHQoKTsKK30KKworYm9vbAorQ29uY3JldGVJbnN0YW5jZU5ldEl0ZXJhdG9yOjpoYXNOZXh0KCkKK3sKKyAgcmV0dXJuIG5leHRfICE9IG51bGxwdHI7Cit9CisKKy8vIFNraXAgbmV0cyB0aGF0IGhhdmUgYmVlbiBtZXJnZWQuCit2b2lkCitDb25jcmV0ZUluc3RhbmNlTmV0SXRlcmF0b3I6OmZpbmROZXh0KCkKK3sKKyAgd2hpbGUgKGl0ZXJfLmhhc05leHQoKSkgeworICAgIG5leHRfID0gaXRlcl8ubmV4dCgpOworICAgIGlmIChuZXh0Xy0+bWVyZ2VkSW50bygpID09IG51bGxwdHIpCisgICAgICByZXR1cm47CisgIH0KKyAgbmV4dF8gPSBudWxscHRyOworfQorCitOZXQgKgorQ29uY3JldGVJbnN0YW5jZU5ldEl0ZXJhdG9yOjpuZXh0KCkKK3sKKyAgQ29uY3JldGVOZXQgKm5leHQgPSBuZXh0XzsKKyAgZmluZE5leHQoKTsKKyAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8TmV0Kj4obmV4dCk7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworY2xhc3MgQ29uY3JldGVJbnN0YW5jZVBpbkl0ZXJhdG9yIDogcHVibGljIEluc3RhbmNlUGluSXRlcmF0b3IKK3sKK3B1YmxpYzoKKyAgQ29uY3JldGVJbnN0YW5jZVBpbkl0ZXJhdG9yKGNvbnN0IENvbmNyZXRlSW5zdGFuY2UgKmluc3QsCisJCQkgICAgICBpbnQgcGluX2NvdW50KTsKKyAgYm9vbCBoYXNOZXh0KCk7CisgIFBpbiAqbmV4dCgpOworCitwcml2YXRlOgorICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oQ29uY3JldGVJbnN0YW5jZVBpbkl0ZXJhdG9yKTsKKyAgdm9pZCBmaW5kTmV4dCgpOworCisgIENvbmNyZXRlUGluICoqcGluc187CisgIGludCBwaW5fY291bnRfOworICBpbnQgcGluX2luZGV4XzsKKyAgQ29uY3JldGVQaW4gKm5leHRfOworfTsKKworQ29uY3JldGVJbnN0YW5jZVBpbkl0ZXJhdG9yOjoKK0NvbmNyZXRlSW5zdGFuY2VQaW5JdGVyYXRvcihjb25zdCBDb25jcmV0ZUluc3RhbmNlICppbnN0LAorCQkJICAgIGludCBwaW5fY291bnQpIDoKKyAgcGluc18oaW5zdC0+cGluc18pLAorICBwaW5fY291bnRfKHBpbl9jb3VudCksCisgIHBpbl9pbmRleF8oMCkKK3sKKyAgZmluZE5leHQoKTsKK30KKworYm9vbAorQ29uY3JldGVJbnN0YW5jZVBpbkl0ZXJhdG9yOjpoYXNOZXh0KCkKK3sKKyAgcmV0dXJuIG5leHRfICE9IG51bGxwdHI7Cit9CisKK1BpbiAqCitDb25jcmV0ZUluc3RhbmNlUGluSXRlcmF0b3I6Om5leHQoKQoreworICBDb25jcmV0ZVBpbiAqbmV4dCA9IG5leHRfOworICBmaW5kTmV4dCgpOworICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxQaW4qPihuZXh0KTsKK30KKworLy8gU2tpcCBvdmVyIG1pc3NpbmcgcGlucy4KK3ZvaWQKK0NvbmNyZXRlSW5zdGFuY2VQaW5JdGVyYXRvcjo6ZmluZE5leHQoKQoreworICB3aGlsZSAocGluX2luZGV4XyA8IHBpbl9jb3VudF8pIHsKKyAgICBuZXh0XyA9IHBpbnNfW3Bpbl9pbmRleF8rK107CisgICAgaWYgKG5leHRfKQorICAgICAgcmV0dXJuOworICB9CisgIG5leHRfID0gbnVsbHB0cjsKK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitjbGFzcyBDb25jcmV0ZU5ldFBpbkl0ZXJhdG9yIDogcHVibGljIE5ldFBpbkl0ZXJhdG9yCit7CitwdWJsaWM6CisgIGV4cGxpY2l0IENvbmNyZXRlTmV0UGluSXRlcmF0b3IoY29uc3QgQ29uY3JldGVOZXQgKm5ldCk7CisgIGJvb2wgaGFzTmV4dCgpOworICBQaW4gKm5leHQoKTsKKworcHJpdmF0ZToKKyAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKENvbmNyZXRlTmV0UGluSXRlcmF0b3IpOworCisgIENvbmNyZXRlUGluICpuZXh0XzsKK307CisKK0NvbmNyZXRlTmV0UGluSXRlcmF0b3I6OkNvbmNyZXRlTmV0UGluSXRlcmF0b3IoY29uc3QgQ29uY3JldGVOZXQgKm5ldCkgOgorICBuZXh0XyhuZXQtPnBpbnNfKQoreworfQorCitib29sCitDb25jcmV0ZU5ldFBpbkl0ZXJhdG9yOjpoYXNOZXh0KCkKK3sKKyAgcmV0dXJuIG5leHRfICE9IG51bGxwdHI7Cit9CisKK1BpbiAqCitDb25jcmV0ZU5ldFBpbkl0ZXJhdG9yOjpuZXh0KCkKK3sKKyAgQ29uY3JldGVQaW4gKm5leHQgPSBuZXh0XzsKKyAgbmV4dF8gPSBuZXh0Xy0+bmV0X25leHRfOworICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxQaW4qPihuZXh0KTsKK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitjbGFzcyBDb25jcmV0ZU5ldFRlcm1JdGVyYXRvciA6IHB1YmxpYyBOZXRUZXJtSXRlcmF0b3IKK3sKK3B1YmxpYzoKKyAgZXhwbGljaXQgQ29uY3JldGVOZXRUZXJtSXRlcmF0b3IoY29uc3QgQ29uY3JldGVOZXQgKm5ldCk7CisgIGJvb2wgaGFzTmV4dCgpOworICBUZXJtICpuZXh0KCk7CisKK3ByaXZhdGU6CisgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihDb25jcmV0ZU5ldFRlcm1JdGVyYXRvcik7CisKKyAgQ29uY3JldGVUZXJtICpuZXh0XzsKK307CisKK0NvbmNyZXRlTmV0VGVybUl0ZXJhdG9yOjpDb25jcmV0ZU5ldFRlcm1JdGVyYXRvcihjb25zdCBDb25jcmV0ZU5ldCAqbmV0KSA6CisgIG5leHRfKG5ldC0+dGVybXNfKQoreworfQorCitib29sCitDb25jcmV0ZU5ldFRlcm1JdGVyYXRvcjo6aGFzTmV4dCgpCit7CisgIHJldHVybiBuZXh0XyAhPSBudWxscHRyOworfQorCitUZXJtICoKK0NvbmNyZXRlTmV0VGVybUl0ZXJhdG9yOjpuZXh0KCkKK3sKKyAgQ29uY3JldGVUZXJtICpuZXh0ID0gbmV4dF87CisgIG5leHRfID0gbmV4dF8tPm5ldF9uZXh0XzsKKyAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VGVybSo+KG5leHQpOworfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK0NvbmNyZXRlTmV0d29yazo6Q29uY3JldGVOZXR3b3JrKCkgOgorICBOZXR3b3JrUmVhZGVyKCksCisgIHRvcF9pbnN0YW5jZV8obnVsbHB0ciksCisgIGxpbmtfZnVuY18obnVsbHB0cikKK3sKK30KKworQ29uY3JldGVOZXR3b3JrOjp+Q29uY3JldGVOZXR3b3JrKCkKK3sKKyAgY2xlYXIoKTsKK30KKwordm9pZAorQ29uY3JldGVOZXR3b3JrOjpjbGVhcigpCit7CisgIGRlbGV0ZVRvcEluc3RhbmNlKCk7CisgIGRlbGV0ZUNlbGxOZXR3b3JrVmlld3MoKTsKKyAgbGlicmFyeV9zZXFfLmRlbGV0ZUNvbnRlbnRzQ2xlYXIoKTsKKyAgbGlicmFyeV9tYXBfLmNsZWFyKCk7CisgIE5ldHdvcms6OmNsZWFyKCk7Cit9CisKK3ZvaWQKK0NvbmNyZXRlTmV0d29yazo6ZGVsZXRlVG9wSW5zdGFuY2UoKQoreworICBpZiAodG9wX2luc3RhbmNlXykgeworICAgIGRlbGV0ZUluc3RhbmNlKHRvcF9pbnN0YW5jZV8pOworICAgIHRvcF9pbnN0YW5jZV8gPSBudWxscHRyOworICB9Cit9CisKK3ZvaWQKK0NvbmNyZXRlTmV0d29yazo6ZGVsZXRlQ2VsbE5ldHdvcmtWaWV3cygpCit7CisgIENlbGxOZXR3b3JrVmlld01hcDo6SXRlcmF0b3Igdmlld19pdGVyKGNlbGxfbmV0d29ya192aWV3X21hcF8pOworICB3aGlsZSAodmlld19pdGVyLmhhc05leHQoKSkgeworICAgIEluc3RhbmNlICp2aWV3ID0gdmlld19pdGVyLm5leHQoKTsKKyAgICBpZiAodmlldykKKyAgICAgIGRlbGV0ZUluc3RhbmNlKHZpZXcpOworICB9CisgIGNlbGxfbmV0d29ya192aWV3X21hcF8uY2xlYXIoKTsKK30KKworSW5zdGFuY2UgKgorQ29uY3JldGVOZXR3b3JrOjp0b3BJbnN0YW5jZSgpIGNvbnN0Cit7CisgIHJldHVybiB0b3BfaW5zdGFuY2VfOworfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2NsYXNzIENvbmNyZXRlTGlicmFyeUl0ZXJhdG9yMSA6IHB1YmxpYyBJdGVyYXRvcjxMaWJyYXJ5Kj4KK3sKK3B1YmxpYzoKKyAgZXhwbGljaXQgQ29uY3JldGVMaWJyYXJ5SXRlcmF0b3IxKGNvbnN0IENvbmNyZXRlTGlicmFyeVNlcSAmbGliX3NlcV8pOworICB2aXJ0dWFsIGJvb2wgaGFzTmV4dCgpOworICB2aXJ0dWFsIExpYnJhcnkgKm5leHQoKTsKKworcHJpdmF0ZToKKyAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKENvbmNyZXRlTGlicmFyeUl0ZXJhdG9yMSk7CisKKyAgQ29uY3JldGVMaWJyYXJ5SXRlcmF0b3IgaXRlcl87Cit9OworCitDb25jcmV0ZUxpYnJhcnlJdGVyYXRvcjE6OkNvbmNyZXRlTGlicmFyeUl0ZXJhdG9yMShjb25zdCBDb25jcmV0ZUxpYnJhcnlTZXEgJmxpYl9zZXFfKToKKyAgaXRlcl8obGliX3NlcV8pCit7Cit9CisKK2Jvb2wKK0NvbmNyZXRlTGlicmFyeUl0ZXJhdG9yMTo6aGFzTmV4dCgpCit7CisgIHJldHVybiBpdGVyXy5oYXNOZXh0KCk7Cit9CisKK0xpYnJhcnkgKgorQ29uY3JldGVMaWJyYXJ5SXRlcmF0b3IxOjpuZXh0KCkKK3sKKyAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8TGlicmFyeSo+KGl0ZXJfLm5leHQoKSk7Cit9CisKK0xpYnJhcnlJdGVyYXRvciAqCitDb25jcmV0ZU5ldHdvcms6OmxpYnJhcnlJdGVyYXRvcigpIGNvbnN0Cit7CisgIHJldHVybiBuZXcgQ29uY3JldGVMaWJyYXJ5SXRlcmF0b3IxKGxpYnJhcnlfc2VxXyk7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworY2xhc3MgQ29uY3JldGVMaWJlcnR5TGlicmFyeUl0ZXJhdG9yIDogcHVibGljIEl0ZXJhdG9yPExpYmVydHlMaWJyYXJ5Kj4KK3sKK3B1YmxpYzoKKyAgZXhwbGljaXQgQ29uY3JldGVMaWJlcnR5TGlicmFyeUl0ZXJhdG9yKGNvbnN0IENvbmNyZXRlTmV0d29yayAqbmV0d29yayk7CisgIHZpcnR1YWwgfkNvbmNyZXRlTGliZXJ0eUxpYnJhcnlJdGVyYXRvcigpOworICB2aXJ0dWFsIGJvb2wgaGFzTmV4dCgpOworICB2aXJ0dWFsIExpYmVydHlMaWJyYXJ5ICpuZXh0KCk7CisKK3ByaXZhdGU6CisgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihDb25jcmV0ZUxpYmVydHlMaWJyYXJ5SXRlcmF0b3IpOworICB2b2lkIGZpbmROZXh0KCk7CisKKyAgQ29uY3JldGVMaWJyYXJ5U2VxOjpDb25zdEl0ZXJhdG9yIGl0ZXJfOworICBMaWJlcnR5TGlicmFyeSAqbmV4dF87Cit9OworCitDb25jcmV0ZUxpYmVydHlMaWJyYXJ5SXRlcmF0b3I6OgorQ29uY3JldGVMaWJlcnR5TGlicmFyeUl0ZXJhdG9yKGNvbnN0IENvbmNyZXRlTmV0d29yayAqbmV0d29yayk6CisgIGl0ZXJfKG5ldHdvcmstPmxpYnJhcnlfc2VxXyksCisgIG5leHRfKG51bGxwdHIpCit7CisgIGZpbmROZXh0KCk7Cit9CisKK0NvbmNyZXRlTGliZXJ0eUxpYnJhcnlJdGVyYXRvcjo6fkNvbmNyZXRlTGliZXJ0eUxpYnJhcnlJdGVyYXRvcigpCit7Cit9CisKK2Jvb2wKK0NvbmNyZXRlTGliZXJ0eUxpYnJhcnlJdGVyYXRvcjo6aGFzTmV4dCgpCit7CisgIHJldHVybiBuZXh0XyAhPSBudWxscHRyOworfQorCitMaWJlcnR5TGlicmFyeSAqCitDb25jcmV0ZUxpYmVydHlMaWJyYXJ5SXRlcmF0b3I6Om5leHQoKQoreworICBMaWJlcnR5TGlicmFyeSAqbmV4dCA9IG5leHRfOworICBmaW5kTmV4dCgpOworICByZXR1cm4gbmV4dDsKK30KKwordm9pZAorQ29uY3JldGVMaWJlcnR5TGlicmFyeUl0ZXJhdG9yOjpmaW5kTmV4dCgpCit7CisgIG5leHRfID0gbnVsbHB0cjsKKyAgd2hpbGUgKGl0ZXJfLmhhc05leHQoKSkgeworICAgIENvbmNyZXRlTGlicmFyeSAqbGliID0gaXRlcl8ubmV4dCgpOworICAgIGlmIChsaWItPmlzTGliZXJ0eSgpKSB7CisgICAgICBMaWJlcnR5TGlicmFyeSAqbGliZXJ0eSA9IHN0YXRpY19jYXN0PExpYmVydHlMaWJyYXJ5Kj4obGliKTsKKyAgICAgIGlmIChsaWJlcnR5KSB7CisJbmV4dF8gPSBsaWJlcnR5OworCWJyZWFrOworICAgICAgfQorICAgIH0KKyAgfQorfQorCitMaWJlcnR5TGlicmFyeUl0ZXJhdG9yICoKK0NvbmNyZXRlTmV0d29yazo6bGliZXJ0eUxpYnJhcnlJdGVyYXRvcigpIGNvbnN0Cit7CisgIHJldHVybiBuZXcgQ29uY3JldGVMaWJlcnR5TGlicmFyeUl0ZXJhdG9yKHRoaXMpOworfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK0xpYnJhcnkgKgorQ29uY3JldGVOZXR3b3JrOjptYWtlTGlicmFyeShjb25zdCBjaGFyICpuYW1lLAorCQkJICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKyAgQ29uY3JldGVMaWJyYXJ5ICpsaWJyYXJ5ID0gbmV3IENvbmNyZXRlTGlicmFyeShuYW1lLCBmaWxlbmFtZSwgZmFsc2UpOworICBhZGRMaWJyYXJ5KGxpYnJhcnkpOworICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxMaWJyYXJ5Kj4obGlicmFyeSk7Cit9CisKK0xpYmVydHlMaWJyYXJ5ICoKK0NvbmNyZXRlTmV0d29yazo6bWFrZUxpYmVydHlMaWJyYXJ5KGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworICBMaWJlcnR5TGlicmFyeSAqbGlicmFyeSA9IG5ldyBMaWJlcnR5TGlicmFyeShuYW1lLCBmaWxlbmFtZSk7CisgIGFkZExpYnJhcnkobGlicmFyeSk7CisgIHJldHVybiBsaWJyYXJ5OworfQorCit2b2lkCitDb25jcmV0ZU5ldHdvcms6OmFkZExpYnJhcnkoQ29uY3JldGVMaWJyYXJ5ICpsaWJyYXJ5KQoreworICBsaWJyYXJ5X3NlcV8ucHVzaF9iYWNrKGxpYnJhcnkpOworICBsaWJyYXJ5X21hcF9bbGlicmFyeS0+bmFtZSgpXSA9IGxpYnJhcnk7Cit9CisKK0xpYnJhcnkgKgorQ29uY3JldGVOZXR3b3JrOjpmaW5kTGlicmFyeShjb25zdCBjaGFyICpuYW1lKQoreworICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxMaWJyYXJ5Kj4obGlicmFyeV9tYXBfLmZpbmRLZXkobmFtZSkpOworfQorCit2b2lkCitDb25jcmV0ZU5ldHdvcms6OmRlbGV0ZUxpYnJhcnkoTGlicmFyeSAqbGlicmFyeSkKK3sKKyAgQ29uY3JldGVMaWJyYXJ5ICpjbGliID0gcmVpbnRlcnByZXRfY2FzdDxDb25jcmV0ZUxpYnJhcnkqPihsaWJyYXJ5KTsKKyAgbGlicmFyeV9tYXBfLmVyYXNlKGNsaWItPm5hbWUoKSk7CisgIGxpYnJhcnlfc2VxXy5lcmFzZU9iamVjdChjbGliKTsKKyAgZGVsZXRlIGNsaWI7Cit9CisKK2NvbnN0IGNoYXIgKgorQ29uY3JldGVOZXR3b3JrOjpuYW1lKGNvbnN0IExpYnJhcnkgKmxpYnJhcnkpIGNvbnN0Cit7CisgIGNvbnN0IENvbmNyZXRlTGlicmFyeSAqY2xpYiA9CisgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBDb25jcmV0ZUxpYnJhcnkqPihsaWJyYXJ5KTsKKyAgcmV0dXJuIGNsaWItPm5hbWUoKTsKK30KKworTGliZXJ0eUxpYnJhcnkgKgorQ29uY3JldGVOZXR3b3JrOjpmaW5kTGliZXJ0eShjb25zdCBjaGFyICpuYW1lKQoreworICBDb25jcmV0ZUxpYnJhcnkgKmxpYiA9ICBsaWJyYXJ5X21hcF8uZmluZEtleShuYW1lKTsKKyAgaWYgKGxpYikgeworICAgIGlmIChsaWItPmlzTGliZXJ0eSgpKQorICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PExpYmVydHlMaWJyYXJ5Kj4obGliKTsKKyAgICAvLyBQb3RlbnRpYWwgbmFtZSBjb25mbGljdAorICAgIGVsc2UgeworICAgICAgZm9yIChDb25jcmV0ZUxpYnJhcnkgKmxpYiA6IGxpYnJhcnlfc2VxXykgeworCWlmIChzdHJpbmdFcShsaWItPm5hbWUoKSwgbmFtZSkKKwkgICAgJiYgbGliLT5pc0xpYmVydHkoKSkKKwkgIHJldHVybiBzdGF0aWNfY2FzdDxMaWJlcnR5TGlicmFyeSo+KGxpYik7CisgICAgICB9CisgICAgfQorICB9CisgIHJldHVybiBudWxscHRyOworfQorCitMaWJlcnR5TGlicmFyeSAqCitDb25jcmV0ZU5ldHdvcms6OmxpYmVydHlMaWJyYXJ5KExpYnJhcnkgKmxpYnJhcnkpIGNvbnN0Cit7CisgIENvbmNyZXRlTGlicmFyeSAqbGliID0gcmVpbnRlcnByZXRfY2FzdDxDb25jcmV0ZUxpYnJhcnkqPihsaWJyYXJ5KTsKKyAgcmV0dXJuIHN0YXRpY19jYXN0PExpYmVydHlMaWJyYXJ5Kj4obGliKTsKK30KKworQ2VsbCAqCitDb25jcmV0ZU5ldHdvcms6Om1ha2VDZWxsKExpYnJhcnkgKmxpYnJhcnksCisJCQkgIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgIGJvb2wgaXNfbGVhZiwKKwkJCSAgY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisgIENvbmNyZXRlTGlicmFyeSAqY2xpYiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q29uY3JldGVMaWJyYXJ5Kj4obGlicmFyeSk7CisgIHJldHVybiByZWludGVycHJldF9jYXN0PENlbGwqPihjbGliLT5tYWtlQ2VsbChuYW1lLCBpc19sZWFmLCBmaWxlbmFtZSkpOworfQorCitDZWxsICoKK0NvbmNyZXRlTmV0d29yazo6ZmluZENlbGwoY29uc3QgTGlicmFyeSAqbGlicmFyeSwKKwkJCSAgY29uc3QgY2hhciAqbmFtZSkgY29uc3QKK3sKKyAgY29uc3QgQ29uY3JldGVMaWJyYXJ5ICpjbGliID0KKyAgICByZWludGVycHJldF9jYXN0PGNvbnN0IENvbmNyZXRlTGlicmFyeSo+KGxpYnJhcnkpOworICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxDZWxsKj4oY2xpYi0+ZmluZENlbGwobmFtZSkpOworfQorCitDZWxsICoKK0NvbmNyZXRlTmV0d29yazo6ZmluZEFueUNlbGwoY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgQ29uY3JldGVMaWJyYXJ5U2VxOjpJdGVyYXRvciBsaWJfaXRlcihsaWJyYXJ5X3NlcV8pOworICB3aGlsZSAobGliX2l0ZXIuaGFzTmV4dCgpKSB7CisgICAgQ29uY3JldGVMaWJyYXJ5ICpsaWIgPSBsaWJfaXRlci5uZXh0KCk7CisgICAgQ29uY3JldGVDZWxsICpjZWxsID0gbGliLT5maW5kQ2VsbChuYW1lKTsKKyAgICBpZiAoY2VsbCkKKyAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PENlbGwqPihjZWxsKTsKKyAgfQorICByZXR1cm4gbnVsbHB0cjsKK30KKwordm9pZAorQ29uY3JldGVOZXR3b3JrOjpmaW5kQ2VsbHNNYXRjaGluZyhjb25zdCBMaWJyYXJ5ICpsaWJyYXJ5LAorCQkJCSAgIGNvbnN0IFBhdHRlcm5NYXRjaCAqcGF0dGVybiwKKwkJCQkgICBDZWxsU2VxICpjZWxscykgY29uc3QKK3sKKyAgY29uc3QgQ29uY3JldGVMaWJyYXJ5ICpjbGliID0KKyAgICByZWludGVycHJldF9jYXN0PGNvbnN0IENvbmNyZXRlTGlicmFyeSo+KGxpYnJhcnkpOworICBjbGliLT5maW5kQ2VsbHNNYXRjaGluZyhwYXR0ZXJuLCBjZWxscyk7Cit9CisKK3ZvaWQKK0NvbmNyZXRlTmV0d29yazo6ZGVsZXRlQ2VsbChDZWxsICpjZWxsKQoreworICBDb25jcmV0ZUNlbGwgKmNjZWxsID0gcmVpbnRlcnByZXRfY2FzdDxDb25jcmV0ZUNlbGwqPihjZWxsKTsKKyAgQ29uY3JldGVMaWJyYXJ5ICpjbGliID0gY2NlbGwtPmxpYnJhcnkoKTsKKyAgY2xpYi0+ZGVsZXRlQ2VsbChjY2VsbCk7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworY29uc3QgY2hhciAqCitDb25jcmV0ZU5ldHdvcms6Om5hbWUoY29uc3QgQ2VsbCAqY2VsbCkgY29uc3QKK3sKKyAgY29uc3QgQ29uY3JldGVDZWxsICpjY2VsbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQ29uY3JldGVDZWxsKj4oY2VsbCk7CisgIHJldHVybiBjY2VsbC0+bmFtZSgpOworfQorCit2b2lkCitDb25jcmV0ZU5ldHdvcms6OnNldE5hbWUoQ2VsbCAqY2VsbCwKKwkJCSBjb25zdCBjaGFyICpuYW1lKQoreworICBDb25jcmV0ZUNlbGwgKmNjZWxsID0gcmVpbnRlcnByZXRfY2FzdDxDb25jcmV0ZUNlbGwqPihjZWxsKTsKKyAgY2NlbGwtPnNldE5hbWUobmFtZSk7Cit9CisKK3ZvaWQKK0NvbmNyZXRlTmV0d29yazo6c2V0SXNMZWFmKENlbGwgKmNlbGwsCisJCQkgICBib29sIGlzX2xlYWYpCit7CisgIENvbmNyZXRlQ2VsbCAqY2NlbGwgPSByZWludGVycHJldF9jYXN0PENvbmNyZXRlQ2VsbCo+KGNlbGwpOworICBjY2VsbC0+c2V0SXNMZWFmKGlzX2xlYWYpOworfQorCitMaWJyYXJ5ICoKK0NvbmNyZXRlTmV0d29yazo6bGlicmFyeShjb25zdCBDZWxsICpjZWxsKSBjb25zdAoreworICBjb25zdCBDb25jcmV0ZUNlbGwgKmNjZWxsID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBDb25jcmV0ZUNlbGwqPihjZWxsKTsKKyAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8TGlicmFyeSo+KGNjZWxsLT5saWJyYXJ5KCkpOworfQorCitMaWJlcnR5Q2VsbCAqCitDb25jcmV0ZU5ldHdvcms6OmxpYmVydHlDZWxsKENlbGwgKmNlbGwpIGNvbnN0Cit7CisgIENvbmNyZXRlQ2VsbCAqY2NlbGwgPSByZWludGVycHJldF9jYXN0PENvbmNyZXRlQ2VsbCo+KGNlbGwpOworICByZXR1cm4gY2NlbGwtPmxpYmVydHlDZWxsKCk7Cit9CisKK2NvbnN0IExpYmVydHlDZWxsICoKK0NvbmNyZXRlTmV0d29yazo6bGliZXJ0eUNlbGwoY29uc3QgQ2VsbCAqY2VsbCkgY29uc3QKK3sKKyAgY29uc3QgQ29uY3JldGVDZWxsICpjY2VsbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQ29uY3JldGVDZWxsKj4oY2VsbCk7CisgIHJldHVybiBjY2VsbC0+bGliZXJ0eUNlbGwoKTsKK30KKworQ2VsbCAqCitDb25jcmV0ZU5ldHdvcms6OmNlbGwoTGliZXJ0eUNlbGwgKmNlbGwpIGNvbnN0Cit7CisgIHJldHVybiByZWludGVycHJldF9jYXN0PENlbGwqPihjZWxsKTsKK30KKworY29uc3QgQ2VsbCAqCitDb25jcmV0ZU5ldHdvcms6OmNlbGwoY29uc3QgTGliZXJ0eUNlbGwgKmNlbGwpIGNvbnN0Cit7CisgIHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IENlbGwqPihjZWxsKTsKK30KKworY29uc3QgY2hhciAqCitDb25jcmV0ZU5ldHdvcms6OmZpbGVuYW1lKGNvbnN0IENlbGwgKmNlbGwpCit7CisgIGNvbnN0IENvbmNyZXRlQ2VsbCAqY2NlbGwgPSByZWludGVycHJldF9jYXN0PGNvbnN0IENvbmNyZXRlQ2VsbCo+KGNlbGwpOworICByZXR1cm4gY2NlbGwtPmZpbGVuYW1lKCk7Cit9CisKK1BvcnQgKgorQ29uY3JldGVOZXR3b3JrOjpmaW5kUG9ydChjb25zdCBDZWxsICpjZWxsLAorCQkJICBjb25zdCBjaGFyICpuYW1lKSBjb25zdAoreworICBjb25zdCBDb25jcmV0ZUNlbGwgKmNjZWxsID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBDb25jcmV0ZUNlbGwqPihjZWxsKTsKKyAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UG9ydCo+KGNjZWxsLT5maW5kUG9ydChuYW1lKSk7Cit9CisKK3ZvaWQKK0NvbmNyZXRlTmV0d29yazo6ZmluZFBvcnRzTWF0Y2hpbmcoY29uc3QgQ2VsbCAqY2VsbCwKKwkJCQkgICBjb25zdCBQYXR0ZXJuTWF0Y2ggKnBhdHRlcm4sCisJCQkJICAgUG9ydFNlcSAqcG9ydHMpIGNvbnN0Cit7CisgIGNvbnN0IENvbmNyZXRlQ2VsbCAqY2NlbGwgPSByZWludGVycHJldF9jYXN0PGNvbnN0IENvbmNyZXRlQ2VsbCo+KGNlbGwpOworICBjY2VsbC0+ZmluZFBvcnRzTWF0Y2hpbmcocGF0dGVybiwgcG9ydHMpOworfQorCitib29sCitDb25jcmV0ZU5ldHdvcms6OmlzTGVhZihjb25zdCBDZWxsICpjZWxsKSBjb25zdAoreworICBjb25zdCBDb25jcmV0ZUNlbGwgKmNjZWxsID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBDb25jcmV0ZUNlbGwqPihjZWxsKTsKKyAgcmV0dXJuIGNjZWxsLT5pc0xlYWYoKTsKK30KKworUG9ydCAqCitDb25jcmV0ZU5ldHdvcms6Om1ha2VQb3J0KENlbGwgKmNlbGwsCisJCQkgIGNvbnN0IGNoYXIgKm5hbWUpCit7CisgIENvbmNyZXRlQ2VsbCAqY2NlbGwgPSByZWludGVycHJldF9jYXN0PENvbmNyZXRlQ2VsbCo+KGNlbGwpOworICBDb25jcmV0ZVBvcnQgKnBvcnQgPSBjY2VsbC0+bWFrZVBvcnQobmFtZSk7CisgIHJldHVybiByZWludGVycHJldF9jYXN0PFBvcnQqPihwb3J0KTsKK30KKworUG9ydCAqCitDb25jcmV0ZU5ldHdvcms6Om1ha2VCdXNQb3J0KENlbGwgKmNlbGwsCisJCQkgICAgIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgICAgIGludCBmcm9tX2luZGV4LAorCQkJICAgICBpbnQgdG9faW5kZXgpCit7CisgIENvbmNyZXRlQ2VsbCAqY2NlbGwgPSByZWludGVycHJldF9jYXN0PENvbmNyZXRlQ2VsbCo+KGNlbGwpOworICBDb25jcmV0ZVBvcnQgKnBvcnQgPSBjY2VsbC0+bWFrZUJ1c1BvcnQobmFtZSwgZnJvbV9pbmRleCwgdG9faW5kZXgpOworICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxQb3J0Kj4ocG9ydCk7Cit9CisKK3ZvaWQKK0NvbmNyZXRlTmV0d29yazo6Z3JvdXBCdXNQb3J0cyhDZWxsICpjZWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6ZnVuY3Rpb248Ym9vbChjb25zdCBjaGFyKik+IHBvcnRfbXNiX2ZpcnN0KQoreworICBMaWJyYXJ5ICpsaWIgPSBsaWJyYXJ5KGNlbGwpOworICBDb25jcmV0ZUxpYnJhcnkgKmNsaWIgPSByZWludGVycHJldF9jYXN0PENvbmNyZXRlTGlicmFyeSo+KGxpYik7CisgIENvbmNyZXRlQ2VsbCAqY2NlbGwgPSByZWludGVycHJldF9jYXN0PENvbmNyZXRlQ2VsbCo+KGNlbGwpOworICBjY2VsbC0+Z3JvdXBCdXNQb3J0cyhjbGliLT5idXNCcmt0TGVmdCgpLCBjbGliLT5idXNCcmt0UmlnaHQoKSwgcG9ydF9tc2JfZmlyc3QpOworfQorCitQb3J0ICoKK0NvbmNyZXRlTmV0d29yazo6bWFrZUJ1bmRsZVBvcnQoQ2VsbCAqY2VsbCwKKwkJCQljb25zdCBjaGFyICpuYW1lLAorCQkJCVBvcnRTZXEgKm1lbWJlcnMpCit7CisgIENvbmNyZXRlQ2VsbCAqY2NlbGwgPSByZWludGVycHJldF9jYXN0PENvbmNyZXRlQ2VsbCo+KGNlbGwpOworICBDb25jcmV0ZVBvcnRTZXEgKmNtZW1iZXJzID0gcmVpbnRlcnByZXRfY2FzdDxDb25jcmV0ZVBvcnRTZXEqPihtZW1iZXJzKTsKKyAgQ29uY3JldGVQb3J0ICpwb3J0ID0gY2NlbGwtPm1ha2VCdW5kbGVQb3J0KG5hbWUsIGNtZW1iZXJzKTsKKyAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UG9ydCo+KHBvcnQpOworfQorCit2b2lkCitDb25jcmV0ZU5ldHdvcms6OnNldERpcmVjdGlvbihQb3J0ICpwb3J0LAorCQkJICAgICAgUG9ydERpcmVjdGlvbiAqZGlyKQoreworICBDb25jcmV0ZVBvcnQgKmNwb3J0ID0gcmVpbnRlcnByZXRfY2FzdDxDb25jcmV0ZVBvcnQqPihwb3J0KTsKKyAgY3BvcnQtPnNldERpcmVjdGlvbihkaXIpOworfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2NsYXNzIENvbmNyZXRlQ2VsbFBvcnRJdGVyYXRvcjEgOiBwdWJsaWMgQ2VsbFBvcnRJdGVyYXRvcgoreworcHVibGljOgorICBleHBsaWNpdCBDb25jcmV0ZUNlbGxQb3J0SXRlcmF0b3IxKGNvbnN0IENvbmNyZXRlQ2VsbCAqY2VsbCk7CisgIH5Db25jcmV0ZUNlbGxQb3J0SXRlcmF0b3IxKCk7CisgIHZpcnR1YWwgYm9vbCBoYXNOZXh0KCkgeyByZXR1cm4gaXRlcl8tPmhhc05leHQoKTsgfQorICB2aXJ0dWFsIFBvcnQgKm5leHQoKTsKKworcHJpdmF0ZToKKyAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKENvbmNyZXRlQ2VsbFBvcnRJdGVyYXRvcjEpOworCisgIENvbmNyZXRlQ2VsbFBvcnRJdGVyYXRvciAqaXRlcl87Cit9OworCitDb25jcmV0ZUNlbGxQb3J0SXRlcmF0b3IxOjpDb25jcmV0ZUNlbGxQb3J0SXRlcmF0b3IxKGNvbnN0IENvbmNyZXRlQ2VsbCAqY2VsbCk6CisgIGl0ZXJfKGNlbGwtPnBvcnRJdGVyYXRvcigpKQoreworfQorCitDb25jcmV0ZUNlbGxQb3J0SXRlcmF0b3IxOjp+Q29uY3JldGVDZWxsUG9ydEl0ZXJhdG9yMSgpCit7CisgIGRlbGV0ZSBpdGVyXzsKK30KKworUG9ydCAqCitDb25jcmV0ZUNlbGxQb3J0SXRlcmF0b3IxOjpuZXh0KCkKK3sKKyAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UG9ydCo+KGl0ZXJfLT5uZXh0KCkpOworfQorCitDZWxsUG9ydEl0ZXJhdG9yICoKK0NvbmNyZXRlTmV0d29yazo6cG9ydEl0ZXJhdG9yKGNvbnN0IENlbGwgKmNlbGwpIGNvbnN0Cit7CisgIGNvbnN0IENvbmNyZXRlQ2VsbCAqY2NlbGwgPSByZWludGVycHJldF9jYXN0PGNvbnN0IENvbmNyZXRlQ2VsbCo+KGNlbGwpOworICByZXR1cm4gbmV3IENvbmNyZXRlQ2VsbFBvcnRJdGVyYXRvcjEoY2NlbGwpOworfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2NsYXNzIENvbmNyZXRlQ2VsbFBvcnRCaXRJdGVyYXRvcjEgOiBwdWJsaWMgQ2VsbFBvcnRJdGVyYXRvcgoreworcHVibGljOgorICBleHBsaWNpdCBDb25jcmV0ZUNlbGxQb3J0Qml0SXRlcmF0b3IxKGNvbnN0IENvbmNyZXRlQ2VsbCAqY2VsbCk7CisgIH5Db25jcmV0ZUNlbGxQb3J0Qml0SXRlcmF0b3IxKCk7CisgIHZpcnR1YWwgYm9vbCBoYXNOZXh0KCkgeyByZXR1cm4gaXRlcl8tPmhhc05leHQoKTsgfQorICB2aXJ0dWFsIFBvcnQgKm5leHQoKTsKKworcHJpdmF0ZToKKyAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKENvbmNyZXRlQ2VsbFBvcnRCaXRJdGVyYXRvcjEpOworCisgIENvbmNyZXRlQ2VsbFBvcnRCaXRJdGVyYXRvciAqaXRlcl87Cit9OworCitDb25jcmV0ZUNlbGxQb3J0Qml0SXRlcmF0b3IxOjpDb25jcmV0ZUNlbGxQb3J0Qml0SXRlcmF0b3IxKGNvbnN0IENvbmNyZXRlQ2VsbCAqY2VsbCk6CisgIGl0ZXJfKGNlbGwtPnBvcnRCaXRJdGVyYXRvcigpKQoreworfQorCitDb25jcmV0ZUNlbGxQb3J0Qml0SXRlcmF0b3IxOjp+Q29uY3JldGVDZWxsUG9ydEJpdEl0ZXJhdG9yMSgpCit7CisgIGRlbGV0ZSBpdGVyXzsKK30KKworUG9ydCAqCitDb25jcmV0ZUNlbGxQb3J0Qml0SXRlcmF0b3IxOjpuZXh0KCkKK3sKKyAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UG9ydCo+KGl0ZXJfLT5uZXh0KCkpOworfQorCitDZWxsUG9ydEJpdEl0ZXJhdG9yICoKK0NvbmNyZXRlTmV0d29yazo6cG9ydEJpdEl0ZXJhdG9yKGNvbnN0IENlbGwgKmNlbGwpIGNvbnN0Cit7CisgIGNvbnN0IENvbmNyZXRlQ2VsbCAqY2NlbGwgPSByZWludGVycHJldF9jYXN0PGNvbnN0IENvbmNyZXRlQ2VsbCo+KGNlbGwpOworICByZXR1cm4gbmV3IENvbmNyZXRlQ2VsbFBvcnRCaXRJdGVyYXRvcjEoY2NlbGwpOworfQorCitpbnQKK0NvbmNyZXRlTmV0d29yazo6cG9ydEJpdENvdW50KGNvbnN0IENlbGwgKmNlbGwpIGNvbnN0Cit7CisgIGNvbnN0IENvbmNyZXRlQ2VsbCAqY2NlbGwgPSByZWludGVycHJldF9jYXN0PGNvbnN0IENvbmNyZXRlQ2VsbCo+KGNlbGwpOworICByZXR1cm4gY2NlbGwtPnBvcnRCaXRDb3VudCgpOworfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2NvbnN0IGNoYXIgKgorQ29uY3JldGVOZXR3b3JrOjpuYW1lKGNvbnN0IFBvcnQgKnBvcnQpIGNvbnN0Cit7CisgIGNvbnN0IENvbmNyZXRlUG9ydCAqY3BvcnQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IENvbmNyZXRlUG9ydCo+KHBvcnQpOworICByZXR1cm4gY3BvcnQtPm5hbWUoKTsKK30KKworQ2VsbCAqCitDb25jcmV0ZU5ldHdvcms6OmNlbGwoY29uc3QgUG9ydCAqcG9ydCkgY29uc3QKK3sKKyAgY29uc3QgQ29uY3JldGVQb3J0ICpjcG9ydCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQ29uY3JldGVQb3J0Kj4ocG9ydCk7CisgIHJldHVybiBjcG9ydC0+Y2VsbCgpOworfQorCitMaWJlcnR5UG9ydCAqCitDb25jcmV0ZU5ldHdvcms6OmxpYmVydHlQb3J0KGNvbnN0IFBvcnQgKnBvcnQpIGNvbnN0Cit7CisgIGNvbnN0IENvbmNyZXRlUG9ydCAqY3BvcnQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IENvbmNyZXRlUG9ydCo+KHBvcnQpOworICByZXR1cm4gY3BvcnQtPmxpYmVydHlQb3J0KCk7Cit9CisKK1BvcnREaXJlY3Rpb24gKgorQ29uY3JldGVOZXR3b3JrOjpkaXJlY3Rpb24oY29uc3QgUG9ydCAqcG9ydCkgY29uc3QKK3sKKyAgY29uc3QgQ29uY3JldGVQb3J0ICpjcG9ydCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQ29uY3JldGVQb3J0Kj4ocG9ydCk7CisgIHJldHVybiBjcG9ydC0+ZGlyZWN0aW9uKCk7Cit9CisKK2Jvb2wKK0NvbmNyZXRlTmV0d29yazo6aXNCdW5kbGUoY29uc3QgUG9ydCAqcG9ydCkgY29uc3QKK3sKKyAgY29uc3QgQ29uY3JldGVQb3J0ICpjcG9ydCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQ29uY3JldGVQb3J0Kj4ocG9ydCk7CisgIHJldHVybiBjcG9ydC0+aXNCdW5kbGUoKTsKK30KKworYm9vbAorQ29uY3JldGVOZXR3b3JrOjppc0J1cyhjb25zdCBQb3J0ICpwb3J0KSBjb25zdAoreworICBjb25zdCBDb25jcmV0ZVBvcnQgKmNwb3J0ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBDb25jcmV0ZVBvcnQqPihwb3J0KTsKKyAgcmV0dXJuIGNwb3J0LT5pc0J1cygpOworfQorCitjb25zdCBjaGFyICoKK0NvbmNyZXRlTmV0d29yazo6YnVzTmFtZShjb25zdCBQb3J0ICpwb3J0KSBjb25zdAoreworICBjb25zdCBDb25jcmV0ZVBvcnQgKmNwb3J0ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBDb25jcmV0ZVBvcnQqPihwb3J0KTsKKyAgcmV0dXJuIGNwb3J0LT5idXNOYW1lKCk7Cit9CisKK2ludAorQ29uY3JldGVOZXR3b3JrOjpzaXplKGNvbnN0IFBvcnQgKnBvcnQpIGNvbnN0Cit7CisgIGNvbnN0IENvbmNyZXRlUG9ydCAqY3BvcnQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IENvbmNyZXRlUG9ydCo+KHBvcnQpOworICByZXR1cm4gY3BvcnQtPnNpemUoKTsKK30KKworaW50CitDb25jcmV0ZU5ldHdvcms6OmZyb21JbmRleChjb25zdCBQb3J0ICpwb3J0KSBjb25zdAoreworICBjb25zdCBDb25jcmV0ZVBvcnQgKmNwb3J0ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBDb25jcmV0ZVBvcnQqPihwb3J0KTsKKyAgcmV0dXJuIGNwb3J0LT5mcm9tSW5kZXgoKTsKK30KKworaW50CitDb25jcmV0ZU5ldHdvcms6OnRvSW5kZXgoY29uc3QgUG9ydCAqcG9ydCkgY29uc3QKK3sKKyAgY29uc3QgQ29uY3JldGVQb3J0ICpjcG9ydCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQ29uY3JldGVQb3J0Kj4ocG9ydCk7CisgIHJldHVybiBjcG9ydC0+dG9JbmRleCgpOworfQorCitQb3J0ICoKK0NvbmNyZXRlTmV0d29yazo6ZmluZEJ1c0JpdChjb25zdCBQb3J0ICpwb3J0LAorCQkJICAgIGludCBpbmRleCkgY29uc3QKK3sKKyAgY29uc3QgQ29uY3JldGVQb3J0ICpjcG9ydCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQ29uY3JldGVQb3J0Kj4ocG9ydCk7CisgIHJldHVybiByZWludGVycHJldF9jYXN0PFBvcnQqPihjcG9ydC0+ZmluZEJ1c0JpdChpbmRleCkpOworfQorCitQb3J0ICoKK0NvbmNyZXRlTmV0d29yazo6ZmluZE1lbWJlcihjb25zdCBQb3J0ICpwb3J0LAorCQkJICAgIGludCBpbmRleCkgY29uc3QKK3sKKyAgY29uc3QgQ29uY3JldGVQb3J0ICpjcG9ydCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQ29uY3JldGVQb3J0Kj4ocG9ydCk7CisgIHJldHVybiByZWludGVycHJldF9jYXN0PFBvcnQqPihjcG9ydC0+ZmluZE1lbWJlcihpbmRleCkpOworfQorCitib29sCitDb25jcmV0ZU5ldHdvcms6Omhhc01lbWJlcnMoY29uc3QgUG9ydCAqcG9ydCkgY29uc3QKK3sKKyAgY29uc3QgQ29uY3JldGVQb3J0ICpjcG9ydCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQ29uY3JldGVQb3J0Kj4ocG9ydCk7CisgIHJldHVybiBjcG9ydC0+aGFzTWVtYmVycygpOworfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2NsYXNzIENvbmNyZXRlUG9ydE1lbWJlckl0ZXJhdG9yMSA6IHB1YmxpYyBQb3J0TWVtYmVySXRlcmF0b3IKK3sKK3B1YmxpYzoKKyAgZXhwbGljaXQgQ29uY3JldGVQb3J0TWVtYmVySXRlcmF0b3IxKGNvbnN0IENvbmNyZXRlUG9ydCAqcG9ydCk7CisgIH5Db25jcmV0ZVBvcnRNZW1iZXJJdGVyYXRvcjEoKTsKKyAgdmlydHVhbCBib29sIGhhc05leHQoKSB7IHJldHVybiBpdGVyXy0+aGFzTmV4dCgpOyB9CisgIHZpcnR1YWwgUG9ydCAqbmV4dCgpOworCitwcml2YXRlOgorICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oQ29uY3JldGVQb3J0TWVtYmVySXRlcmF0b3IxKTsKKworICBDb25jcmV0ZVBvcnRNZW1iZXJJdGVyYXRvciAqaXRlcl87Cit9OworCitDb25jcmV0ZVBvcnRNZW1iZXJJdGVyYXRvcjE6OkNvbmNyZXRlUG9ydE1lbWJlckl0ZXJhdG9yMShjb25zdCBDb25jcmV0ZVBvcnQgKgorCQkJCQkJCSBwb3J0KSA6CisgIGl0ZXJfKHBvcnQtPm1lbWJlckl0ZXJhdG9yKCkpCit7Cit9CisKK0NvbmNyZXRlUG9ydE1lbWJlckl0ZXJhdG9yMTo6fkNvbmNyZXRlUG9ydE1lbWJlckl0ZXJhdG9yMSgpCit7CisgIGRlbGV0ZSBpdGVyXzsKK30KKworUG9ydCAqCitDb25jcmV0ZVBvcnRNZW1iZXJJdGVyYXRvcjE6Om5leHQoKQoreworICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxQb3J0Kj4oaXRlcl8tPm5leHQoKSk7Cit9CisKK1BvcnRNZW1iZXJJdGVyYXRvciAqCitDb25jcmV0ZU5ldHdvcms6Om1lbWJlckl0ZXJhdG9yKGNvbnN0IFBvcnQgKnBvcnQpIGNvbnN0Cit7CisgIGNvbnN0IENvbmNyZXRlUG9ydCAqY3BvcnQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IENvbmNyZXRlUG9ydCo+KHBvcnQpOworICByZXR1cm4gbmV3IENvbmNyZXRlUG9ydE1lbWJlckl0ZXJhdG9yMShjcG9ydCk7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworY29uc3QgY2hhciAqCitDb25jcmV0ZU5ldHdvcms6Om5hbWUoY29uc3QgSW5zdGFuY2UgKmluc3RhbmNlKSBjb25zdAoreworICBjb25zdCBDb25jcmV0ZUluc3RhbmNlICppbnN0ID0KKyAgICByZWludGVycHJldF9jYXN0PGNvbnN0IENvbmNyZXRlSW5zdGFuY2UqPihpbnN0YW5jZSk7CisgIHJldHVybiBpbnN0LT5uYW1lKCk7Cit9CisKK0NlbGwgKgorQ29uY3JldGVOZXR3b3JrOjpjZWxsKGNvbnN0IEluc3RhbmNlICppbnN0YW5jZSkgY29uc3QKK3sKKyAgY29uc3QgQ29uY3JldGVJbnN0YW5jZSAqaW5zdCA9CisgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBDb25jcmV0ZUluc3RhbmNlKj4oaW5zdGFuY2UpOworICByZXR1cm4gaW5zdC0+Y2VsbCgpOworfQorCitJbnN0YW5jZSAqCitDb25jcmV0ZU5ldHdvcms6OnBhcmVudChjb25zdCBJbnN0YW5jZSAqaW5zdGFuY2UpIGNvbnN0Cit7CisgIGNvbnN0IENvbmNyZXRlSW5zdGFuY2UgKmluc3QgPQorICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQ29uY3JldGVJbnN0YW5jZSo+KGluc3RhbmNlKTsKKyAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SW5zdGFuY2UqPihpbnN0LT5wYXJlbnQoKSk7Cit9CisKK2Jvb2wKK0NvbmNyZXRlTmV0d29yazo6aXNMZWFmKGNvbnN0IEluc3RhbmNlICppbnN0YW5jZSkgY29uc3QKK3sKKyAgY29uc3QgQ29uY3JldGVJbnN0YW5jZSAqaW5zdCA9CisgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBDb25jcmV0ZUluc3RhbmNlKj4oaW5zdGFuY2UpOworICBDb25jcmV0ZUNlbGwgKmNjZWxsID0gcmVpbnRlcnByZXRfY2FzdDxDb25jcmV0ZUNlbGwqPihpbnN0LT5jZWxsKCkpOworICByZXR1cm4gY2NlbGwtPmlzTGVhZigpOworfQorCitJbnN0YW5jZSAqCitDb25jcmV0ZU5ldHdvcms6OmZpbmRDaGlsZChjb25zdCBJbnN0YW5jZSAqcGFyZW50LAorCQkJICAgY29uc3QgY2hhciAqbmFtZSkgY29uc3QKK3sKKyAgY29uc3QgQ29uY3JldGVJbnN0YW5jZSAqaW5zdCA9CisgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBDb25jcmV0ZUluc3RhbmNlKj4ocGFyZW50KTsKKyAgcmV0dXJuIGluc3QtPmZpbmRDaGlsZChuYW1lKTsKK30KKworUGluICoKK0NvbmNyZXRlTmV0d29yazo6ZmluZFBpbihjb25zdCBJbnN0YW5jZSAqaW5zdGFuY2UsCisJCQkgY29uc3QgY2hhciAqcG9ydF9uYW1lKSBjb25zdAoreworICBjb25zdCBDb25jcmV0ZUluc3RhbmNlICppbnN0ID0KKyAgICByZWludGVycHJldF9jYXN0PGNvbnN0IENvbmNyZXRlSW5zdGFuY2UqPihpbnN0YW5jZSk7CisgIHJldHVybiByZWludGVycHJldF9jYXN0PFBpbio+KGluc3QtPmZpbmRQaW4ocG9ydF9uYW1lKSk7Cit9CisKK1BpbiAqCitDb25jcmV0ZU5ldHdvcms6OmZpbmRQaW4oY29uc3QgSW5zdGFuY2UgKmluc3RhbmNlLAorCQkJIGNvbnN0IFBvcnQgKnBvcnQpIGNvbnN0Cit7CisgIGNvbnN0IENvbmNyZXRlSW5zdGFuY2UgKmluc3QgPQorICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQ29uY3JldGVJbnN0YW5jZSo+KGluc3RhbmNlKTsKKyAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UGluKj4oaW5zdC0+ZmluZFBpbihwb3J0KSk7Cit9CisKK05ldCAqCitDb25jcmV0ZU5ldHdvcms6OmZpbmROZXQoY29uc3QgSW5zdGFuY2UgKmluc3RhbmNlLAorCQkJIGNvbnN0IGNoYXIgKm5ldF9uYW1lKSBjb25zdAoreworICBjb25zdCBDb25jcmV0ZUluc3RhbmNlICppbnN0ID0KKyAgICByZWludGVycHJldF9jYXN0PGNvbnN0IENvbmNyZXRlSW5zdGFuY2UqPihpbnN0YW5jZSk7CisgIHJldHVybiByZWludGVycHJldF9jYXN0PE5ldCo+KGluc3QtPmZpbmROZXQobmV0X25hbWUpKTsKK30KKwordm9pZAorQ29uY3JldGVOZXR3b3JrOjpmaW5kSW5zdE5ldHNNYXRjaGluZyhjb25zdCBJbnN0YW5jZSAqaW5zdGFuY2UsCisJCQkJICAgICAgY29uc3QgUGF0dGVybk1hdGNoICpwYXR0ZXJuLAorCQkJCSAgICAgIE5ldFNlcSAqbmV0cykgY29uc3QKK3sKKyAgY29uc3QgQ29uY3JldGVJbnN0YW5jZSAqaW5zdCA9CisgICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBDb25jcmV0ZUluc3RhbmNlKj4oaW5zdGFuY2UpOworICBpbnN0LT5maW5kTmV0c01hdGNoaW5nKHBhdHRlcm4sIG5ldHMpOworfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK0luc3RhbmNlQ2hpbGRJdGVyYXRvciAqCitDb25jcmV0ZU5ldHdvcms6OmNoaWxkSXRlcmF0b3IoY29uc3QgSW5zdGFuY2UgKmluc3RhbmNlKSBjb25zdAoreworICBjb25zdCBDb25jcmV0ZUluc3RhbmNlICppbnN0ID0KKyAgICByZWludGVycHJldF9jYXN0PGNvbnN0IENvbmNyZXRlSW5zdGFuY2UqPihpbnN0YW5jZSk7CisgIHJldHVybiBpbnN0LT5jaGlsZEl0ZXJhdG9yKCk7Cit9CisKK0luc3RhbmNlUGluSXRlcmF0b3IgKgorQ29uY3JldGVOZXR3b3JrOjpwaW5JdGVyYXRvcihjb25zdCBJbnN0YW5jZSAqaW5zdGFuY2UpIGNvbnN0Cit7CisgIGNvbnN0IENvbmNyZXRlSW5zdGFuY2UgKmluc3QgPQorICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQ29uY3JldGVJbnN0YW5jZSo+KGluc3RhbmNlKTsKKyAgQ29uY3JldGVDZWxsICpjZWxsID0gcmVpbnRlcnByZXRfY2FzdDxDb25jcmV0ZUNlbGwqPihpbnN0LT5jZWxsKCkpOworICBpbnQgcGluX2NvdW50ID0gY2VsbC0+cG9ydEJpdENvdW50KCk7CisgIHJldHVybiBuZXcgQ29uY3JldGVJbnN0YW5jZVBpbkl0ZXJhdG9yKGluc3QsIHBpbl9jb3VudCk7Cit9CisKK0luc3RhbmNlTmV0SXRlcmF0b3IgKgorQ29uY3JldGVOZXR3b3JrOjpuZXRJdGVyYXRvcihjb25zdCBJbnN0YW5jZSAqaW5zdGFuY2UpIGNvbnN0Cit7CisgIGNvbnN0IENvbmNyZXRlSW5zdGFuY2UgKmluc3QgPQorICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQ29uY3JldGVJbnN0YW5jZSo+KGluc3RhbmNlKTsKKyAgcmV0dXJuIGluc3QtPm5ldEl0ZXJhdG9yKCk7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworSW5zdGFuY2UgKgorQ29uY3JldGVOZXR3b3JrOjppbnN0YW5jZShjb25zdCBQaW4gKnBpbikgY29uc3QKK3sKKyAgY29uc3QgQ29uY3JldGVQaW4gKmNwaW4gPSByZWludGVycHJldF9jYXN0PGNvbnN0IENvbmNyZXRlUGluKj4ocGluKTsKKyAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SW5zdGFuY2UqPihjcGluLT5pbnN0YW5jZSgpKTsKK30KKworTmV0ICoKK0NvbmNyZXRlTmV0d29yazo6bmV0KGNvbnN0IFBpbiAqcGluKSBjb25zdAoreworICBjb25zdCBDb25jcmV0ZVBpbiAqY3BpbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQ29uY3JldGVQaW4qPihwaW4pOworICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxOZXQqPihjcGluLT5uZXQoKSk7Cit9CisKK1Rlcm0gKgorQ29uY3JldGVOZXR3b3JrOjp0ZXJtKGNvbnN0IFBpbiAqcGluKSBjb25zdAoreworICBjb25zdCBDb25jcmV0ZVBpbiAqY3BpbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQ29uY3JldGVQaW4qPihwaW4pOworICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUZXJtKj4oY3Bpbi0+dGVybSgpKTsKK30KKworUG9ydCAqCitDb25jcmV0ZU5ldHdvcms6OnBvcnQoY29uc3QgUGluICpwaW4pIGNvbnN0Cit7CisgIGNvbnN0IENvbmNyZXRlUGluICpjcGluID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBDb25jcmV0ZVBpbio+KHBpbik7CisgIHJldHVybiByZWludGVycHJldF9jYXN0PFBvcnQqPihjcGluLT5wb3J0KCkpOworfQorCitQb3J0RGlyZWN0aW9uICoKK0NvbmNyZXRlTmV0d29yazo6ZGlyZWN0aW9uKGNvbnN0IFBpbiAqcGluKSBjb25zdAoreworICBjb25zdCBDb25jcmV0ZVBpbiAqY3BpbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQ29uY3JldGVQaW4qPihwaW4pOworICBjb25zdCBDb25jcmV0ZVBvcnQgKmNwb3J0ID0gY3Bpbi0+cG9ydCgpOworICByZXR1cm4gY3BvcnQtPmRpcmVjdGlvbigpOworfQorCitWZXJ0ZXhJZAorQ29uY3JldGVOZXR3b3JrOjp2ZXJ0ZXhJZChjb25zdCBQaW4gKnBpbikgY29uc3QKK3sKKyAgY29uc3QgQ29uY3JldGVQaW4gKmNwaW4gPSByZWludGVycHJldF9jYXN0PGNvbnN0IENvbmNyZXRlUGluKj4ocGluKTsKKyAgcmV0dXJuIGNwaW4tPnZlcnRleElkKCk7Cit9CisKK3ZvaWQKK0NvbmNyZXRlTmV0d29yazo6c2V0VmVydGV4SWQoUGluICpwaW4sCisJCQkgICAgIFZlcnRleElkIGlkKQoreworICBDb25jcmV0ZVBpbiAqY3BpbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q29uY3JldGVQaW4qPihwaW4pOworICBjcGluLT5zZXRWZXJ0ZXhJZChpZCk7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworTmV0ICoKK0NvbmNyZXRlTmV0d29yazo6bmV0KGNvbnN0IFRlcm0gKnRlcm0pIGNvbnN0Cit7CisgIGNvbnN0IENvbmNyZXRlVGVybSAqY3Rlcm0gPSByZWludGVycHJldF9jYXN0PGNvbnN0IENvbmNyZXRlVGVybSo+KHRlcm0pOworICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxOZXQqPihjdGVybS0+bmV0KCkpOworfQorCitQaW4gKgorQ29uY3JldGVOZXR3b3JrOjpwaW4oY29uc3QgVGVybSAqdGVybSkgY29uc3QKK3sKKyAgY29uc3QgQ29uY3JldGVUZXJtICpjdGVybSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQ29uY3JldGVUZXJtKj4odGVybSk7CisgIHJldHVybiByZWludGVycHJldF9jYXN0PFBpbio+KGN0ZXJtLT5waW4oKSk7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworY29uc3QgY2hhciAqCitDb25jcmV0ZU5ldHdvcms6Om5hbWUoY29uc3QgTmV0ICpuZXQpIGNvbnN0Cit7CisgIGNvbnN0IENvbmNyZXRlTmV0ICpjbmV0ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBDb25jcmV0ZU5ldCo+KG5ldCk7CisgIHJldHVybiBjbmV0LT5uYW1lKCk7Cit9CisKK0luc3RhbmNlICoKK0NvbmNyZXRlTmV0d29yazo6aW5zdGFuY2UoY29uc3QgTmV0ICpuZXQpIGNvbnN0Cit7CisgIGNvbnN0IENvbmNyZXRlTmV0ICpjbmV0ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBDb25jcmV0ZU5ldCo+KG5ldCk7CisgIHJldHVybiByZWludGVycHJldF9jYXN0PEluc3RhbmNlKj4oY25ldC0+aW5zdGFuY2UoKSk7Cit9CisKK2Jvb2wKK0NvbmNyZXRlTmV0d29yazo6aXNQb3dlcihjb25zdCBOZXQgKm5ldCkgY29uc3QKK3sKKyAgcmV0dXJuIGNvbnN0YW50X25ldHNfW2ludChMb2dpY1ZhbHVlOjpvbmUpXS5oYXNLZXkoY29uc3RfY2FzdDxOZXQqPihuZXQpKTsKK30KKworYm9vbAorQ29uY3JldGVOZXR3b3JrOjppc0dyb3VuZChjb25zdCBOZXQgKm5ldCkgY29uc3QKK3sKKyAgcmV0dXJuIGNvbnN0YW50X25ldHNfW2ludChMb2dpY1ZhbHVlOjp6ZXJvKV0uaGFzS2V5KGNvbnN0X2Nhc3Q8TmV0Kj4obmV0KSk7Cit9CisKK05ldFBpbkl0ZXJhdG9yICoKK0NvbmNyZXRlTmV0d29yazo6cGluSXRlcmF0b3IoY29uc3QgTmV0ICpuZXQpIGNvbnN0Cit7CisgIGNvbnN0IENvbmNyZXRlTmV0ICpjbmV0ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBDb25jcmV0ZU5ldCo+KG5ldCk7CisgIHJldHVybiBuZXcgQ29uY3JldGVOZXRQaW5JdGVyYXRvcihjbmV0KTsKK30KKworTmV0VGVybUl0ZXJhdG9yICoKK0NvbmNyZXRlTmV0d29yazo6dGVybUl0ZXJhdG9yKGNvbnN0IE5ldCAqbmV0KSBjb25zdAoreworICBjb25zdCBDb25jcmV0ZU5ldCAqY25ldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQ29uY3JldGVOZXQqPihuZXQpOworICByZXR1cm4gbmV3IENvbmNyZXRlTmV0VGVybUl0ZXJhdG9yKGNuZXQpOworfQorCit2b2lkCitDb25jcmV0ZU5ldHdvcms6Om1lcmdlSW50byhOZXQgKm5ldCwKKwkJCSAgIE5ldCAqaW50b19uZXQpCit7CisgIENvbmNyZXRlTmV0ICpjbmV0ID0gcmVpbnRlcnByZXRfY2FzdDxDb25jcmV0ZU5ldCo+KG5ldCk7CisgIENvbmNyZXRlTmV0ICpjaW50b19uZXQgPSByZWludGVycHJldF9jYXN0PENvbmNyZXRlTmV0Kj4oaW50b19uZXQpOworICBjbmV0LT5tZXJnZUludG8oY2ludG9fbmV0KTsKKyAgY2xlYXJOZXREcnZyUGluTWFwKCk7Cit9CisKK05ldCAqCitDb25jcmV0ZU5ldHdvcms6Om1lcmdlZEludG8oTmV0ICpuZXQpCit7CisgIENvbmNyZXRlTmV0ICpjbmV0ID0gcmVpbnRlcnByZXRfY2FzdDxDb25jcmV0ZU5ldCo+KG5ldCk7CisgIHJldHVybiByZWludGVycHJldF9jYXN0PE5ldCo+KGNuZXQtPm1lcmdlZEludG8oKSk7Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworQ2VsbCAqCitDb25jcmV0ZUluc3RhbmNlOjpjZWxsKCkgY29uc3QKK3sKKyAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Q2VsbCo+KGNlbGxfKTsKK30KKworSW5zdGFuY2UgKgorQ29uY3JldGVOZXR3b3JrOjptYWtlSW5zdGFuY2UoQ2VsbCAqY2VsbCwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgICAgICBJbnN0YW5jZSAqcGFyZW50KQoreworICBDb25jcmV0ZUNlbGwgKmNjZWxsID0gcmVpbnRlcnByZXRfY2FzdDxDb25jcmV0ZUNlbGwqPihjZWxsKTsKKyAgcmV0dXJuIG1ha2VDb25jcmV0ZUluc3RhbmNlKGNjZWxsLCBuYW1lLCBwYXJlbnQpOworfQorCitJbnN0YW5jZSAqCitDb25jcmV0ZU5ldHdvcms6Om1ha2VJbnN0YW5jZShMaWJlcnR5Q2VsbCAqY2VsbCwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgICAgICBJbnN0YW5jZSAqcGFyZW50KQoreworICByZXR1cm4gbWFrZUNvbmNyZXRlSW5zdGFuY2UoY2VsbCwgbmFtZSwgcGFyZW50KTsKK30KKworSW5zdGFuY2UgKgorQ29uY3JldGVOZXR3b3JrOjptYWtlQ29uY3JldGVJbnN0YW5jZShDb25jcmV0ZUNlbGwgKmNlbGwsCisJCQkJICAgICAgY29uc3QgY2hhciAqbmFtZSwKKwkJCQkgICAgICBJbnN0YW5jZSAqcGFyZW50KQoreworICBDb25jcmV0ZUluc3RhbmNlICpjcGFyZW50ID0KKyAgICByZWludGVycHJldF9jYXN0PENvbmNyZXRlSW5zdGFuY2UqPihwYXJlbnQpOworICBDb25jcmV0ZUluc3RhbmNlICppbnN0ID0gbmV3IENvbmNyZXRlSW5zdGFuY2UoY2VsbCwgbmFtZSwgY3BhcmVudCk7CisgIGlmIChwYXJlbnQpCisgICAgY3BhcmVudC0+YWRkQ2hpbGQoaW5zdCk7CisgIHJldHVybiByZWludGVycHJldF9jYXN0PEluc3RhbmNlKj4oaW5zdCk7Cit9CisKK3ZvaWQKK0NvbmNyZXRlTmV0d29yazo6bWFrZVBpbnMoSW5zdGFuY2UgKmluc3QpCit7CisgIENlbGxQb3J0Qml0SXRlcmF0b3IgKnBvcnRfaXRlcmF0b3IgPSBwb3J0Qml0SXRlcmF0b3IoY2VsbChpbnN0KSk7CisgIHdoaWxlIChwb3J0X2l0ZXJhdG9yLT5oYXNOZXh0KCkpIHsKKyAgICBQb3J0ICpwb3J0ID0gcG9ydF9pdGVyYXRvci0+bmV4dCgpOworICAgIG1ha2VQaW4oaW5zdCwgcG9ydCwgbnVsbHB0cik7CisgIH0KKyAgZGVsZXRlIHBvcnRfaXRlcmF0b3I7Cit9CisKK3ZvaWQKK0NvbmNyZXRlTmV0d29yazo6cmVwbGFjZUNlbGwoSW5zdGFuY2UgKmluc3QsCisJCQkgICAgIENlbGwgKmNlbGwpCit7CisgIENvbmNyZXRlQ2VsbCAqY2NlbGwgPSByZWludGVycHJldF9jYXN0PENvbmNyZXRlQ2VsbCo+KGNlbGwpOworICBpbnQgcG9ydF9jb3VudCA9IGNjZWxsLT5wb3J0Qml0Q291bnQoKTsKKyAgQ29uY3JldGVJbnN0YW5jZSAqY2luc3QgPSByZWludGVycHJldF9jYXN0PENvbmNyZXRlSW5zdGFuY2UqPihpbnN0KTsKKyAgLy8gUG9ydCBjb3VudCBwaWNrZWQgZnJvbSBJbnN0YW5jZSBpbnN0ZWFkIG9mIFRhcmdldCBjZWxscy1EaW5lc2ggQQorICBDb25jcmV0ZUNlbGwgKmluc3RjZWxsID0gcmVpbnRlcnByZXRfY2FzdDxDb25jcmV0ZUNlbGwqPihjaW5zdC0+Y2VsbCgpKTsKKyAgaW50IGluc3RfcG9ydF9jb3VudCA9IGluc3RjZWxsLT5wb3J0Qml0Q291bnQoKTsKKyAgQ29uY3JldGVQaW4gKipwaW5zID0gY2luc3QtPnBpbnNfOworICBDb25jcmV0ZVBpbiAqKnJwaW5zID0gbmV3IENvbmNyZXRlUGluKltwb3J0X2NvdW50XTsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBwb3J0X2NvdW50OyBpKyspIAorICAgIHJwaW5zW2ldID0gcGluc1tpbnN0X3BvcnRfY291bnQtMV07CisgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5zdF9wb3J0X2NvdW50OyBpKyspIHsKKyAgICBDb25jcmV0ZVBpbiAqY3BpbiA9IHBpbnNbaV07CisgICAgaWYgKGNwaW4pIHsKKyAgICAgIENvbmNyZXRlUG9ydCAqcGluX2Nwb3J0ID0gcmVpbnRlcnByZXRfY2FzdDxDb25jcmV0ZVBvcnQqPihjcGluLT5wb3J0KCkpOworICAgICAgQ29uY3JldGVQb3J0ICpjcG9ydCA9IGNjZWxsLT5maW5kUG9ydChwaW5fY3BvcnQtPm5hbWUoKSk7CisgICAgICBpZiAoY3BvcnQpIHsKKyAgICAgICAgcnBpbnNbY3BvcnQtPnBpbkluZGV4KCldID0gY3BpbjsKKyAgICAgICAgY3Bpbi0+cG9ydF8gPSBjcG9ydDsKKyAgICAgIH0KKyAgICB9CisgIH0KKyAgZGVsZXRlIFtdIHBpbnM7CisgIGNpbnN0LT5waW5zXyA9IHJwaW5zOworICBjaW5zdC0+c2V0Q2VsbChjY2VsbCk7Cit9CisKK3ZvaWQKK0NvbmNyZXRlTmV0d29yazo6ZGVsZXRlSW5zdGFuY2UoSW5zdGFuY2UgKmluc3QpCit7CisgIENvbmNyZXRlSW5zdGFuY2UgKmNpbnN0ID0gcmVpbnRlcnByZXRfY2FzdDxDb25jcmV0ZUluc3RhbmNlKj4oaW5zdCk7CisKKyAgLy8gRGVsZXRlIG5ldHMgZmlyc3QgKHNvIGNoaWxkcmVuIHBpbiBkZWxldGVzIGFyZSBub3QgcmVxdWlyZWQpLgorICBDb25jcmV0ZUluc3RhbmNlTmV0TWFwOjpJdGVyYXRvciBuZXRfaXRlcihjaW5zdC0+bmV0c18pOworICB3aGlsZSAobmV0X2l0ZXIuaGFzTmV4dCgpKSB7CisgICAgQ29uY3JldGVOZXQgKmNuZXQgPSBuZXRfaXRlci5uZXh0KCk7CisgICAgTmV0ICpuZXQgPSByZWludGVycHJldF9jYXN0PE5ldCo+KGNuZXQpOworICAgIC8vIERlbGV0ZSB0ZXJtaW5hbHMgY29ubmVjdGVkIHRvIG5ldC4KKyAgICBOZXRUZXJtSXRlcmF0b3IgKnRlcm1faXRlciA9IHRlcm1JdGVyYXRvcihuZXQpOworICAgIHdoaWxlICh0ZXJtX2l0ZXItPmhhc05leHQoKSkgeworICAgICAgQ29uY3JldGVUZXJtICp0ZXJtID0gcmVpbnRlcnByZXRfY2FzdDxDb25jcmV0ZVRlcm0qPih0ZXJtX2l0ZXItPm5leHQoKSk7CisgICAgICBkZWxldGUgdGVybTsKKyAgICB9CisgICAgZGVsZXRlIHRlcm1faXRlcjsKKyAgICBkZWxldGVOZXQobmV0KTsKKyAgfQorCisgIC8vIERlbGV0ZSBjaGlsZHJlbi4KKyAgSW5zdGFuY2VDaGlsZEl0ZXJhdG9yICpjaGlsZF9pdGVyID0gY2hpbGRJdGVyYXRvcihpbnN0KTsKKyAgd2hpbGUgKGNoaWxkX2l0ZXItPmhhc05leHQoKSkgeworICAgIEluc3RhbmNlICpjaGlsZCA9IGNoaWxkX2l0ZXItPm5leHQoKTsKKyAgICBkZWxldGVJbnN0YW5jZShjaGlsZCk7CisgIH0KKyAgZGVsZXRlIGNoaWxkX2l0ZXI7CisKKyAgSW5zdGFuY2VQaW5JdGVyYXRvciAqcGluX2l0ZXIgPSBwaW5JdGVyYXRvcihpbnN0KTsKKyAgd2hpbGUgKHBpbl9pdGVyLT5oYXNOZXh0KCkpIHsKKyAgICBQaW4gKnBpbiA9IHBpbl9pdGVyLT5uZXh0KCk7CisgICAgZGVsZXRlUGluKHBpbik7CisgIH0KKyAgZGVsZXRlIHBpbl9pdGVyOworCisgIEluc3RhbmNlICpwYXJlbnRfaW5zdCA9IHBhcmVudChpbnN0KTsKKyAgaWYgKHBhcmVudF9pbnN0KSB7CisgICAgQ29uY3JldGVJbnN0YW5jZSAqY3BhcmVudCA9CisgICAgICByZWludGVycHJldF9jYXN0PENvbmNyZXRlSW5zdGFuY2UqPihwYXJlbnRfaW5zdCk7CisgICAgY3BhcmVudC0+ZGVsZXRlQ2hpbGQoY2luc3QpOworICB9CisgIGRlbGV0ZSBjaW5zdDsKK30KKworUGluICoKK0NvbmNyZXRlTmV0d29yazo6bWFrZVBpbihJbnN0YW5jZSAqaW5zdCwKKwkJCSBQb3J0ICpwb3J0LAorCQkJIE5ldCAqbmV0KQoreworICBDb25jcmV0ZUluc3RhbmNlICpjaW5zdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q29uY3JldGVJbnN0YW5jZSo+KGluc3QpOworICBDb25jcmV0ZVBvcnQgKmNwb3J0ID0gcmVpbnRlcnByZXRfY2FzdDxDb25jcmV0ZVBvcnQqPihwb3J0KTsKKyAgQ29uY3JldGVOZXQgKmNuZXQgPSByZWludGVycHJldF9jYXN0PENvbmNyZXRlTmV0Kj4obmV0KTsKKyAgQ29uY3JldGVQaW4gKmNwaW4gPSBuZXcgQ29uY3JldGVQaW4oY2luc3QsIGNwb3J0LCBjbmV0KTsKKyAgY2luc3QtPmFkZFBpbihjcGluKTsKKyAgaWYgKGNuZXQpCisgICAgY29ubmVjdE5ldFBpbihjbmV0LCBjcGluKTsKKyAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UGluKj4oY3Bpbik7Cit9CisKK1Rlcm0gKgorQ29uY3JldGVOZXR3b3JrOjptYWtlVGVybShQaW4gKnBpbiwKKwkJCSAgTmV0ICpuZXQpCit7CisgIENvbmNyZXRlUGluICpjcGluID0gcmVpbnRlcnByZXRfY2FzdDxDb25jcmV0ZVBpbio+KHBpbik7CisgIENvbmNyZXRlTmV0ICpjbmV0ID0gcmVpbnRlcnByZXRfY2FzdDxDb25jcmV0ZU5ldCo+KG5ldCk7CisgIENvbmNyZXRlVGVybSAqY3Rlcm0gPSBuZXcgQ29uY3JldGVUZXJtKGNwaW4sIGNuZXQpOworICBpZiAoY25ldCkKKyAgICBjbmV0LT5hZGRUZXJtKGN0ZXJtKTsKKyAgY3Bpbi0+dGVybV8gPSBjdGVybTsKKyAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VGVybSo+KGN0ZXJtKTsKK30KKworUGluICoKK0NvbmNyZXRlTmV0d29yazo6Y29ubmVjdChJbnN0YW5jZSAqaW5zdCwKKwkJCSBMaWJlcnR5UG9ydCAqcG9ydCwKKwkJCSBOZXQgKm5ldCkKK3sKKyAgcmV0dXJuIGNvbm5lY3QoaW5zdCwgcmVpbnRlcnByZXRfY2FzdDxQb3J0Kj4ocG9ydCksIG5ldCk7Cit9CisKK1BpbiAqCitDb25jcmV0ZU5ldHdvcms6OmNvbm5lY3QoSW5zdGFuY2UgKmluc3QsCisJCQkgUG9ydCAqcG9ydCwKKwkJCSBOZXQgKm5ldCkKK3sKKyAgQ29uY3JldGVOZXQgKmNuZXQgPSByZWludGVycHJldF9jYXN0PENvbmNyZXRlTmV0Kj4obmV0KTsKKyAgQ29uY3JldGVJbnN0YW5jZSAqY2luc3QgPSByZWludGVycHJldF9jYXN0PENvbmNyZXRlSW5zdGFuY2UqPihpbnN0KTsKKyAgQ29uY3JldGVQb3J0ICpjcG9ydCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q29uY3JldGVQb3J0Kj4ocG9ydCk7CisgIENvbmNyZXRlUGluICpjcGluID0gY2luc3QtPmZpbmRQaW4ocG9ydCk7CisgIGlmIChjcGluKSB7CisgICAgQ29uY3JldGVOZXQgKnByZXZfbmV0ID0gY3Bpbi0+bmV0XzsKKyAgICBpZiAocHJldl9uZXQpCisgICAgICBkaXNjb25uZWN0TmV0UGluKHByZXZfbmV0LCBjcGluKTsKKyAgfQorICBlbHNlIHsKKyAgICBjcGluID0gbmV3IENvbmNyZXRlUGluKGNpbnN0LCBjcG9ydCwgY25ldCk7CisgICAgY2luc3QtPmFkZFBpbihjcGluKTsKKyAgfQorICBpZiAoaW5zdCA9PSB0b3BfaW5zdGFuY2VfKSB7CisgICAgLy8gbWFrZVRlcm0KKyAgICBDb25jcmV0ZVRlcm0gKmN0ZXJtID0gbmV3IENvbmNyZXRlVGVybShjcGluLCBjbmV0KTsKKyAgICBjbmV0LT5hZGRUZXJtKGN0ZXJtKTsKKyAgICBjcGluLT50ZXJtXyA9IGN0ZXJtOworICAgIGNwaW4tPm5ldF8gPSBudWxscHRyOworICB9CisgIGVsc2UgeworICAgIGNwaW4tPm5ldF8gPSBjbmV0OworICAgIGNvbm5lY3ROZXRQaW4oY25ldCwgY3Bpbik7CisgIH0KKyAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UGluKj4oY3Bpbik7Cit9CisKK3ZvaWQKK0NvbmNyZXRlTmV0d29yazo6Y29ubmVjdE5ldFBpbihDb25jcmV0ZU5ldCAqY25ldCwKKwkJCSAgICAgICBDb25jcmV0ZVBpbiAqY3BpbikKK3sKKyAgY25ldC0+YWRkUGluKGNwaW4pOworCisgIC8vIElmIHRoZXJlIGFyZSBubyB0ZXJtaW5hbHMgdGhlIG5ldCBkb2VzIG5vdCBzcGFuIGhpZXJhcmNoeSBsZXZlbHMKKyAgLy8gYW5kIGl0IGlzIHNhZmUgdG8gaW5jcmVtZW50YWxseSB1cGRhdGUgdGhlIGRyaXZlcnMuCisgIFBpbiAqcGluID0gcmVpbnRlcnByZXRfY2FzdDxQaW4qPihjcGluKTsKKyAgaWYgKGlzRHJpdmVyKHBpbikpIHsKKyAgICBpZiAoY25ldC0+dGVybXNfID09IG51bGxwdHIpIHsKKyAgICAgIE5ldCAqbmV0ID0gcmVpbnRlcnByZXRfY2FzdDxOZXQqPihjbmV0KTsKKyAgICAgIFBpblNldCAqZHJ2cnMgPSBuZXRfZHJ2cl9waW5fbWFwXy5maW5kS2V5KG5ldCk7CisgICAgICBpZiAoZHJ2cnMpCisJZHJ2cnMtPmluc2VydChwaW4pOworICAgIH0KKyAgICBlbHNlCisgICAgICBjbGVhck5ldERydnJQaW5NYXAoKTsKKyAgfQorfQorCit2b2lkCitDb25jcmV0ZU5ldHdvcms6OmRpc2Nvbm5lY3RQaW4oUGluICpwaW4pCit7CisgIENvbmNyZXRlUGluICpjcGluID0gcmVpbnRlcnByZXRfY2FzdDxDb25jcmV0ZVBpbio+KHBpbik7CisgIGlmIChyZWludGVycHJldF9jYXN0PEluc3RhbmNlKj4oY3Bpbi0+aW5zdGFuY2UoKSkgPT0gdG9wX2luc3RhbmNlXykgeworICAgIENvbmNyZXRlVGVybSAqY3Rlcm0gPSBjcGluLT50ZXJtXzsKKyAgICBpZiAoY3Rlcm0pIHsKKyAgICAgIENvbmNyZXRlTmV0ICpjbmV0ID0gY3Rlcm0tPm5ldF87CisgICAgICBpZiAoY25ldCkgeworCWNuZXQtPmRlbGV0ZVRlcm0oY3Rlcm0pOworCWNsZWFyTmV0RHJ2clBpbk1hcCgpOworICAgICAgfQorICAgICAgY3Bpbi0+dGVybV8gPSBudWxscHRyOworICAgICAgZGVsZXRlIGN0ZXJtOworICAgIH0KKyAgfQorICBlbHNlIHsKKyAgICBDb25jcmV0ZU5ldCAqY25ldCA9IGNwaW4tPm5ldCgpOworICAgIGlmIChjbmV0KQorICAgICAgZGlzY29ubmVjdE5ldFBpbihjbmV0LCBjcGluKTsKKyAgICBjcGluLT5uZXRfID0gbnVsbHB0cjsKKyAgfQorfQorCit2b2lkCitDb25jcmV0ZU5ldHdvcms6OmRpc2Nvbm5lY3ROZXRQaW4oQ29uY3JldGVOZXQgKmNuZXQsCisJCQkJICBDb25jcmV0ZVBpbiAqY3BpbikKK3sKKyAgY25ldC0+ZGVsZXRlUGluKGNwaW4pOworCisgIFBpbiAqcGluID0gcmVpbnRlcnByZXRfY2FzdDxQaW4qPihjcGluKTsKKyAgaWYgKGlzRHJpdmVyKHBpbikpIHsKKyAgICBDb25jcmV0ZU5ldCAqY25ldCA9IGNwaW4tPm5ldCgpOworICAgIC8vIElmIHRoZXJlIGFyZSBubyB0ZXJtaW5hbHMgdGhlIG5ldCBkb2VzIG5vdCBzcGFuIGhpZXJhcmNoeSBsZXZlbHMKKyAgICAvLyBhbmQgaXQgaXMgc2FmZSB0byBpbmNyZW1lbnRhbGx5IHVwZGF0ZSB0aGUgZHJpdmVycy4KKyAgICBpZiAoY25ldC0+dGVybXNfID09IG51bGxwdHIpIHsKKyAgICAgIE5ldCAqbmV0ID0gcmVpbnRlcnByZXRfY2FzdDxOZXQqPihjbmV0KTsKKyAgICAgIFBpblNldCAqZHJ2cnMgPSBuZXRfZHJ2cl9waW5fbWFwXy5maW5kS2V5KG5ldCk7CisgICAgICBpZiAoZHJ2cnMpCisJZHJ2cnMtPmVyYXNlKHBpbik7CisgICAgfQorICAgIGVsc2UKKyAgICAgIGNsZWFyTmV0RHJ2clBpbk1hcCgpOworICB9Cit9CisKK3ZvaWQKK0NvbmNyZXRlTmV0d29yazo6ZGVsZXRlUGluKFBpbiAqcGluKQoreworICBDb25jcmV0ZVBpbiAqY3BpbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q29uY3JldGVQaW4qPihwaW4pOworICBDb25jcmV0ZU5ldCAqY25ldCA9IGNwaW4tPm5ldCgpOworICBpZiAoY25ldCkKKyAgICBkaXNjb25uZWN0TmV0UGluKGNuZXQsIGNwaW4pOworICBDb25jcmV0ZUluc3RhbmNlICpjaW5zdCA9CisgICAgcmVpbnRlcnByZXRfY2FzdDxDb25jcmV0ZUluc3RhbmNlKj4oY3Bpbi0+aW5zdGFuY2UoKSk7CisgIGlmIChjaW5zdCkKKyAgICBjaW5zdC0+ZGVsZXRlUGluKGNwaW4pOworICBkZWxldGUgY3BpbjsKK30KKworTmV0ICoKK0NvbmNyZXRlTmV0d29yazo6bWFrZU5ldChjb25zdCBjaGFyICpuYW1lLAorCQkJIEluc3RhbmNlICpwYXJlbnQpCit7CisgIENvbmNyZXRlSW5zdGFuY2UgKmNwYXJlbnQgPSByZWludGVycHJldF9jYXN0PENvbmNyZXRlSW5zdGFuY2UqPihwYXJlbnQpOworICBDb25jcmV0ZU5ldCAqbmV0ID0gbmV3IENvbmNyZXRlTmV0KG5hbWUsIGNwYXJlbnQpOworICBjcGFyZW50LT5hZGROZXQobmV0KTsKKyAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8TmV0Kj4obmV0KTsKK30KKwordm9pZAorQ29uY3JldGVOZXR3b3JrOjpkZWxldGVOZXQoTmV0ICpuZXQpCit7CisgIENvbmNyZXRlTmV0ICpjbmV0ID0gcmVpbnRlcnByZXRfY2FzdDxDb25jcmV0ZU5ldCo+KG5ldCk7CisgIENvbmNyZXRlTmV0UGluSXRlcmF0b3IgcGluX2l0ZXIoY25ldCk7CisgIHdoaWxlIChwaW5faXRlci5oYXNOZXh0KCkpIHsKKyAgICBDb25jcmV0ZVBpbiAqcGluID0gcmVpbnRlcnByZXRfY2FzdDxDb25jcmV0ZVBpbio+KHBpbl9pdGVyLm5leHQoKSk7CisgICAgLy8gRG8gTk9UIHVzZSBuZXQtPmRpc2Nvbm5lY3RQaW4gYmVjYXVzZSBpdCB3b3VsZCBiZSBOXjIKKyAgICAvLyB0byBkZWxldGUgYWxsIG9mIHRoZSBwaW5zIGZyb20gdGhlIG5ldC4KKyAgICBwaW4tPm5ldF8gPSBudWxscHRyOworICB9CisKKyAgY29uc3RhbnRfbmV0c19baW50KExvZ2ljVmFsdWU6Onplcm8pXS5lcmFzZShuZXQpOworICBjb25zdGFudF9uZXRzX1tpbnQoTG9naWNWYWx1ZTo6b25lKV0uZXJhc2UobmV0KTsKKyAgUGluU2V0ICpkcnZycyA9IG5ldF9kcnZyX3Bpbl9tYXBfLmZpbmRLZXkobmV0KTsKKyAgaWYgKGRydnJzKSB7CisgICAgZGVsZXRlIGRydnJzOworICAgIG5ldF9kcnZyX3Bpbl9tYXBfLmVyYXNlKG5ldCk7CisgIH0KKworICBDb25jcmV0ZUluc3RhbmNlICpjaW5zdCA9CisgICAgcmVpbnRlcnByZXRfY2FzdDxDb25jcmV0ZUluc3RhbmNlKj4oY25ldC0+aW5zdGFuY2UoKSk7CisgIGNpbnN0LT5kZWxldGVOZXQoY25ldCk7CisgIGRlbGV0ZSBjbmV0OworfQorCit2b2lkCitDb25jcmV0ZU5ldHdvcms6OmNsZWFyQ29uc3RhbnROZXRzKCkKK3sKKyAgY29uc3RhbnRfbmV0c19baW50KExvZ2ljVmFsdWU6Onplcm8pXS5jbGVhcigpOworICBjb25zdGFudF9uZXRzX1tpbnQoTG9naWNWYWx1ZTo6b25lKV0uY2xlYXIoKTsKK30KKwordm9pZAorQ29uY3JldGVOZXR3b3JrOjphZGRDb25zdGFudE5ldChOZXQgKm5ldCwKKwkJCQlMb2dpY1ZhbHVlIHZhbHVlKQoreworICBpZiAodmFsdWUgPT0gTG9naWNWYWx1ZTo6emVybworICAgICAgfHwgdmFsdWUgPT0gTG9naWNWYWx1ZTo6b25lKQorICAgIGNvbnN0YW50X25ldHNfW2ludCh2YWx1ZSldLmluc2VydChuZXQpOworfQorCitDb25zdGFudFBpbkl0ZXJhdG9yICoKK0NvbmNyZXRlTmV0d29yazo6Y29uc3RhbnRQaW5JdGVyYXRvcigpCit7CisgIHJldHVybiBuZXcgTmV0d29ya0NvbnN0YW50UGluSXRlcmF0b3IodGhpcywKKwkJCQkJY29uc3RhbnRfbmV0c19baW50KExvZ2ljVmFsdWU6Onplcm8pXSwKKwkJCQkJY29uc3RhbnRfbmV0c19baW50KExvZ2ljVmFsdWU6Om9uZSldKTsKK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisvLyBPcHRpbWl6ZWQgdmVyc2lvbiBvZiBOZXR3b3JrOjp2aXNpdENvbm5lY3RlZFBpbnMuCit2b2lkCitDb25jcmV0ZU5ldHdvcms6OnZpc2l0Q29ubmVjdGVkUGlucyhjb25zdCBOZXQgKm5ldCwKKwkJCQkgICAgUGluVmlzaXRvciAmdmlzaXRvciwKKwkJCQkgICAgQ29uc3ROZXRTZXQgJnZpc2l0ZWRfbmV0cykgY29uc3QKK3sKKyAgaWYgKCF2aXNpdGVkX25ldHMuaGFzS2V5KG5ldCkpIHsKKyAgICB2aXNpdGVkX25ldHMuaW5zZXJ0KG5ldCk7CisgICAgLy8gU2VhcmNoIHVwIGZyb20gbmV0IHRlcm1pbmFscy4KKyAgICBjb25zdCBDb25jcmV0ZU5ldCAqY25ldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQ29uY3JldGVOZXQqPihuZXQpOworICAgIGZvciAoQ29uY3JldGVUZXJtICp0ZXJtID0gY25ldC0+dGVybXNfOyB0ZXJtOyB0ZXJtID0gdGVybS0+bmV0X25leHRfKSB7CisgICAgICBDb25jcmV0ZVBpbiAqYWJvdmVfcGluID0gdGVybS0+cGluXzsKKyAgICAgIGlmIChhYm92ZV9waW4pIHsKKwlDb25jcmV0ZU5ldCAqYWJvdmVfbmV0ID0gYWJvdmVfcGluLT5uZXRfOworCWlmIChhYm92ZV9uZXQpCisJICB2aXNpdENvbm5lY3RlZFBpbnMocmVpbnRlcnByZXRfY2FzdDxOZXQqPihhYm92ZV9uZXQpLAorCQkJICAgICB2aXNpdG9yLCB2aXNpdGVkX25ldHMpOworCWVsc2UKKwkgIHZpc2l0b3IocmVpbnRlcnByZXRfY2FzdDxQaW4qPihhYm92ZV9waW4pKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICAvLyBTZWFyY2ggZG93biBmcm9tIG5ldCBwaW5zLgorICAgIGZvciAoQ29uY3JldGVQaW4gKnBpbiA9IGNuZXQtPnBpbnNfOyBwaW47IHBpbiA9IHBpbi0+bmV0X25leHRfKSB7CisgICAgICB2aXNpdG9yKHJlaW50ZXJwcmV0X2Nhc3Q8UGluKj4ocGluKSk7CisgICAgICBDb25jcmV0ZVRlcm0gKmJlbG93X3Rlcm0gPSBwaW4tPnRlcm1fOworICAgICAgaWYgKGJlbG93X3Rlcm0pIHsKKwlDb25jcmV0ZU5ldCAqYmVsb3dfbmV0ID0gYmVsb3dfdGVybS0+bmV0XzsKKwlpZiAoYmVsb3dfbmV0KQorCSAgdmlzaXRDb25uZWN0ZWRQaW5zKHJlaW50ZXJwcmV0X2Nhc3Q8TmV0Kj4oYmVsb3dfbmV0KSwKKwkJCSAgICAgdmlzaXRvciwgdmlzaXRlZF9uZXRzKTsKKyAgICAgIH0KKyAgICB9CisgIH0KK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitDb25jcmV0ZUluc3RhbmNlOjpDb25jcmV0ZUluc3RhbmNlKENvbmNyZXRlQ2VsbCAqY2VsbCwKKwkJCQkgICBjb25zdCBjaGFyICpuYW1lLAorCQkJCSAgIENvbmNyZXRlSW5zdGFuY2UgKnBhcmVudCkgOgorICBjZWxsXyhjZWxsKSwKKyAgbmFtZV8oc3RyaW5nQ29weShuYW1lKSksCisgIHBhcmVudF8ocGFyZW50KSwKKyAgY2hpbGRyZW5fKG51bGxwdHIpLAorICBuZXRzXyhudWxscHRyKQoreworICBpbml0UGlucygpOworfQorCit2b2lkCitDb25jcmV0ZUluc3RhbmNlOjppbml0UGlucygpCit7CisgIGludCBwaW5fY291bnQgPSByZWludGVycHJldF9jYXN0PENvbmNyZXRlQ2VsbCo+KGNlbGxfKS0+cG9ydEJpdENvdW50KCk7CisgIGlmIChwaW5fY291bnQpIHsKKyAgICBwaW5zXyA9IG5ldyBDb25jcmV0ZVBpbipbcGluX2NvdW50XTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHBpbl9jb3VudDsgaSsrKQorICAgICAgcGluc19baV0gPSBudWxscHRyOworICB9CisgIGVsc2UKKyAgICBwaW5zXyA9IG51bGxwdHI7Cit9CisKK0NvbmNyZXRlSW5zdGFuY2U6On5Db25jcmV0ZUluc3RhbmNlKCkKK3sKKyAgc3RyaW5nRGVsZXRlKG5hbWVfKTsKKyAgZGVsZXRlIFtdIHBpbnNfOworICBkZWxldGUgY2hpbGRyZW5fOworICBkZWxldGUgbmV0c187Cit9CisKK0luc3RhbmNlICoKK0NvbmNyZXRlSW5zdGFuY2U6OmZpbmRDaGlsZChjb25zdCBjaGFyICpuYW1lKSBjb25zdAoreworICBpZiAoY2hpbGRyZW5fKQorICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEluc3RhbmNlKj4oY2hpbGRyZW5fLT5maW5kS2V5KG5hbWUpKTsKKyAgZWxzZQorICAgIHJldHVybiBudWxscHRyOworfQorCitDb25jcmV0ZVBpbiAqCitDb25jcmV0ZUluc3RhbmNlOjpmaW5kUGluKGNvbnN0IGNoYXIgKnBvcnRfbmFtZSkgY29uc3QKK3sKKyAgQ29uY3JldGVDZWxsICpjY2VsbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q29uY3JldGVDZWxsKj4oY2VsbF8pOworICBjb25zdCBDb25jcmV0ZVBvcnQgKmNwb3J0ID0KKyAgICByZWludGVycHJldF9jYXN0PGNvbnN0IENvbmNyZXRlUG9ydCo+KGNjZWxsLT5maW5kUG9ydChwb3J0X25hbWUpKTsKKyAgaWYgKGNwb3J0CisgICAgICAmJiAhY3BvcnQtPmlzQnVzKCkpCisgICAgcmV0dXJuIHBpbnNfW2Nwb3J0LT5waW5JbmRleCgpXTsKKyAgZWxzZQorICAgIHJldHVybiBudWxscHRyOworfQorCitDb25jcmV0ZVBpbiAqCitDb25jcmV0ZUluc3RhbmNlOjpmaW5kUGluKGNvbnN0IFBvcnQgKnBvcnQpIGNvbnN0Cit7CisgIGNvbnN0IENvbmNyZXRlUG9ydCAqY3BvcnQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IENvbmNyZXRlUG9ydCo+KHBvcnQpOworICByZXR1cm4gcGluc19bY3BvcnQtPnBpbkluZGV4KCldOworfQorCitDb25jcmV0ZU5ldCAqCitDb25jcmV0ZUluc3RhbmNlOjpmaW5kTmV0KGNvbnN0IGNoYXIgKm5ldF9uYW1lKSBjb25zdAoreworICBDb25jcmV0ZU5ldCAqbmV0ID0gbnVsbHB0cjsKKyAgaWYgKG5ldHNfKSB7CisgICAgbmV0ID0gbmV0c18tPmZpbmRLZXkobmV0X25hbWUpOworICAgIC8vIEZvbGxvdyBtZXJnZSBwb2ludGVyIHRvIHN1cnZpdmluZyBuZXQuCisgICAgaWYgKG5ldCkgeworICAgICAgd2hpbGUgKG5ldC0+bWVyZ2VkSW50bygpKQorCW5ldCA9IG5ldC0+bWVyZ2VkSW50bygpOworICAgIH0KKyAgfQorICByZXR1cm4gbmV0OworfQorCit2b2lkCitDb25jcmV0ZUluc3RhbmNlOjpmaW5kTmV0c01hdGNoaW5nKGNvbnN0IFBhdHRlcm5NYXRjaCAqcGF0dGVybiwKKwkJCQkgICBOZXRTZXEgKm5ldHMpIGNvbnN0Cit7CisgIGlmIChwYXR0ZXJuLT5oYXNXaWxkY2FyZHMoKSkgeworICAgIENvbmNyZXRlSW5zdGFuY2VOZXRNYXA6Okl0ZXJhdG9yIG5ldF9pdGVyKG5ldHNfKTsKKyAgICB3aGlsZSAobmV0X2l0ZXIuaGFzTmV4dCgpKSB7CisgICAgICBjb25zdCBjaGFyICpuZXRfbmFtZTsKKyAgICAgIENvbmNyZXRlTmV0ICpjbmV0OworICAgICAgbmV0X2l0ZXIubmV4dChuZXRfbmFtZSwgY25ldCk7CisgICAgICBpZiAocGF0dGVybi0+bWF0Y2gobmV0X25hbWUpKQorCW5ldHMtPnB1c2hfYmFjayhyZWludGVycHJldF9jYXN0PE5ldCo+KGNuZXQpKTsKKyAgICB9CisgIH0KKyAgZWxzZSB7CisgICAgQ29uY3JldGVOZXQgKmNuZXQgPSBmaW5kTmV0KHBhdHRlcm4tPnBhdHRlcm4oKSk7CisgICAgaWYgKGNuZXQpCisgICAgICBuZXRzLT5wdXNoX2JhY2socmVpbnRlcnByZXRfY2FzdDxOZXQqPihjbmV0KSk7CisgIH0KK30KKworSW5zdGFuY2VOZXRJdGVyYXRvciAqCitDb25jcmV0ZUluc3RhbmNlOjpuZXRJdGVyYXRvcigpIGNvbnN0Cit7CisgIHJldHVybiByZWludGVycHJldF9jYXN0PEluc3RhbmNlTmV0SXRlcmF0b3IqPgorICAgIChuZXcgQ29uY3JldGVJbnN0YW5jZU5ldEl0ZXJhdG9yKG5ldHNfKSk7Cit9CisKK0luc3RhbmNlQ2hpbGRJdGVyYXRvciAqCitDb25jcmV0ZUluc3RhbmNlOjpjaGlsZEl0ZXJhdG9yKCkgY29uc3QKK3sKKyAgcmV0dXJuIG5ldyBDb25jcmV0ZUluc3RhbmNlQ2hpbGRJdGVyYXRvcihjaGlsZHJlbl8pOworfQorCit2b2lkCitDb25jcmV0ZUluc3RhbmNlOjphZGRDaGlsZChDb25jcmV0ZUluc3RhbmNlICpjaGlsZCkKK3sKKyAgaWYgKGNoaWxkcmVuXyA9PSBudWxscHRyKQorICAgIGNoaWxkcmVuXyA9IG5ldyBDb25jcmV0ZUluc3RhbmNlQ2hpbGRNYXA7CisgICgqY2hpbGRyZW5fKVtjaGlsZC0+bmFtZSgpXSA9IGNoaWxkOworfQorCit2b2lkCitDb25jcmV0ZUluc3RhbmNlOjpkZWxldGVDaGlsZChDb25jcmV0ZUluc3RhbmNlICpjaGlsZCkKK3sKKyAgY2hpbGRyZW5fLT5lcmFzZShjaGlsZC0+bmFtZSgpKTsKK30KKwordm9pZAorQ29uY3JldGVJbnN0YW5jZTo6YWRkUGluKENvbmNyZXRlUGluICpwaW4pCit7CisgIENvbmNyZXRlUG9ydCAqY3BvcnQgPSByZWludGVycHJldF9jYXN0PENvbmNyZXRlUG9ydCAqPihwaW4tPnBvcnQoKSk7CisgIHBpbnNfW2Nwb3J0LT5waW5JbmRleCgpXSA9IHBpbjsKK30KKwordm9pZAorQ29uY3JldGVJbnN0YW5jZTo6ZGVsZXRlUGluKENvbmNyZXRlUGluICpwaW4pCit7CisgIENvbmNyZXRlUG9ydCAqY3BvcnQgPSByZWludGVycHJldF9jYXN0PENvbmNyZXRlUG9ydCAqPihwaW4tPnBvcnQoKSk7CisgIHBpbnNfW2Nwb3J0LT5waW5JbmRleCgpXSA9IG51bGxwdHI7Cit9CisKK3ZvaWQKK0NvbmNyZXRlSW5zdGFuY2U6OmFkZE5ldChDb25jcmV0ZU5ldCAqbmV0KQoreworICBpZiAobmV0c18gPT0gbnVsbHB0cikKKyAgICBuZXRzXyA9IG5ldyBDb25jcmV0ZUluc3RhbmNlTmV0TWFwOworICAoKm5ldHNfKVtuZXQtPm5hbWUoKV0gPSBuZXQ7Cit9CisKK3ZvaWQKK0NvbmNyZXRlSW5zdGFuY2U6OmFkZE5ldChjb25zdCBjaGFyICpuYW1lLAorCQkJIENvbmNyZXRlTmV0ICpuZXQpCit7CisgIGlmIChuZXRzXyA9PSBudWxscHRyKQorICAgIG5ldHNfID0gbmV3IENvbmNyZXRlSW5zdGFuY2VOZXRNYXA7CisgICgqbmV0c18pW25hbWVdID0gbmV0OworfQorCit2b2lkCitDb25jcmV0ZUluc3RhbmNlOjpkZWxldGVOZXQoQ29uY3JldGVOZXQgKm5ldCkKK3sKKyAgbmV0c18tPmVyYXNlKG5ldC0+bmFtZSgpKTsKK30KKwordm9pZAorQ29uY3JldGVJbnN0YW5jZTo6c2V0Q2VsbChDb25jcmV0ZUNlbGwgKmNlbGwpCit7CisgIGNlbGxfID0gY2VsbDsKK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitDb25jcmV0ZVBpbjo6Q29uY3JldGVQaW4oQ29uY3JldGVJbnN0YW5jZSAqaW5zdGFuY2UsCisJCQkgQ29uY3JldGVQb3J0ICpwb3J0LAorCQkJIENvbmNyZXRlTmV0ICpuZXQpIDoKKyAgaW5zdGFuY2VfKGluc3RhbmNlKSwKKyAgcG9ydF8ocG9ydCksCisgIG5ldF8obmV0KSwKKyAgdGVybV8obnVsbHB0ciksCisgIG5ldF9uZXh0XyhudWxscHRyKSwKKyAgbmV0X3ByZXZfKG51bGxwdHIpLAorICB2ZXJ0ZXhfaWRfKHZlcnRleF9pZF9udWxsKQoreworfQorCitjb25zdCBjaGFyICoKK0NvbmNyZXRlUGluOjpuYW1lKCkgY29uc3QKK3sKKyAgcmV0dXJuIHBvcnRfLT5uYW1lKCk7Cit9CisKK3ZvaWQKK0NvbmNyZXRlUGluOjpzZXRWZXJ0ZXhJZChWZXJ0ZXhJZCBpZCkKK3sKKyAgdmVydGV4X2lkXyA9IGlkOworfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2NvbnN0IGNoYXIgKgorQ29uY3JldGVUZXJtOjpuYW1lKCkgY29uc3QKK3sKKyAgQ29uY3JldGVQaW4gKmNwaW4gPSByZWludGVycHJldF9jYXN0PENvbmNyZXRlUGluKj4ocGluXyk7CisgIGNvbnN0IENvbmNyZXRlUG9ydCAqY3BvcnQgPQorICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQ29uY3JldGVQb3J0Kj4oY3Bpbi0+cG9ydCgpKTsKKyAgcmV0dXJuIGNwb3J0LT5uYW1lKCk7Cit9CisKK0NvbmNyZXRlVGVybTo6Q29uY3JldGVUZXJtKENvbmNyZXRlUGluICpwaW4sCisJCQkgICBDb25jcmV0ZU5ldCAqbmV0KSA6CisgIHBpbl8ocGluKSwKKyAgbmV0XyhuZXQpLAorICBuZXRfbmV4dF8obnVsbHB0cikKK3sKK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitDb25jcmV0ZU5ldDo6Q29uY3JldGVOZXQoY29uc3QgY2hhciAqbmFtZSwKKwkJCSBDb25jcmV0ZUluc3RhbmNlICppbnN0YW5jZSkgOgorICBuYW1lXyhzdHJpbmdDb3B5KG5hbWUpKSwKKyAgaW5zdGFuY2VfKGluc3RhbmNlKSwKKyAgcGluc18obnVsbHB0ciksCisgIHRlcm1zXyhudWxscHRyKSwKKyAgbWVyZ2VkX2ludG9fKG51bGxwdHIpCit7Cit9CisKK0NvbmNyZXRlTmV0Ojp+Q29uY3JldGVOZXQoKQoreworICBzdHJpbmdEZWxldGUobmFtZV8pOworfQorCisvLyBNZXJnZWQgbmV0cyBhcmUga2VwdCBhcm91bmQgdG8gc2VydmUgYXMgbmFtZSBhbGlhc2VzLgorLy8gT25seSBJbnN0YW5jZTo6ZmluZE5ldCBhbmQgSW5zdGFuY2VOZXRJdGVyYXRvciBuZWVkIHRvIGtub3cKKy8vIHRoZSBuZXQgaGFzIGJlZW4gbWVyZ2VkLgordm9pZAorQ29uY3JldGVOZXQ6Om1lcmdlSW50byhDb25jcmV0ZU5ldCAqbmV0KQoreworICBDb25jcmV0ZU5ldFBpbkl0ZXJhdG9yIHBpbl9pdGVyKHRoaXMpOworICB3aGlsZSAocGluX2l0ZXIuaGFzTmV4dCgpKSB7CisgICAgUGluICpwaW4gPSBwaW5faXRlci5uZXh0KCk7CisgICAgQ29uY3JldGVQaW4gKmNwaW4gPSByZWludGVycHJldF9jYXN0PENvbmNyZXRlUGluKj4ocGluKTsKKyAgICBuZXQtPmFkZFBpbihjcGluKTsKKyAgICBjcGluLT5uZXRfID0gbmV0OworICB9CisgIHBpbnNfID0gbnVsbHB0cjsKKyAgQ29uY3JldGVOZXRUZXJtSXRlcmF0b3IgdGVybV9pdGVyKHRoaXMpOworICB3aGlsZSAodGVybV9pdGVyLmhhc05leHQoKSkgeworICAgIFRlcm0gKnRlcm0gPSB0ZXJtX2l0ZXIubmV4dCgpOworICAgIENvbmNyZXRlVGVybSAqY3Rlcm0gPSByZWludGVycHJldF9jYXN0PENvbmNyZXRlVGVybSo+KHRlcm0pOworICAgIG5ldC0+YWRkVGVybShjdGVybSk7CisgICAgY3Rlcm0tPm5ldF8gPSBuZXQ7CisgIH0KKyAgdGVybXNfID0gbnVsbHB0cjsKKyAgLy8gTGVhdmUgbmFtZSBtYXAgcG9pbnRpbmcgdG8gbWVyZ2VkIG5ldCBiZWNhdXNlIG90aGVyd2lzZSBhIHRvcAorICAvLyBsZXZlbCBtZXJnZWQgbmV0IGhhcyBubyBwb2ludGVyIHRvIGl0IGFuZCBpdCBpcyBsZWFrZWQuCisgIG1lcmdlZF9pbnRvXyA9IG5ldDsKK30KKwordm9pZAorQ29uY3JldGVOZXQ6OmFkZFBpbihDb25jcmV0ZVBpbiAqcGluKQoreworICBpZiAocGluc18pCisgICAgcGluc18tPm5ldF9wcmV2XyA9IHBpbjsKKyAgcGluLT5uZXRfbmV4dF8gPSBwaW5zXzsKKyAgcGluLT5uZXRfcHJldl8gPSBudWxscHRyOworICBwaW5zXyA9IHBpbjsKK30KKwordm9pZAorQ29uY3JldGVOZXQ6OmRlbGV0ZVBpbihDb25jcmV0ZVBpbiAqcGluKQoreworICBDb25jcmV0ZVBpbiAqcHJldiA9IHBpbi0+bmV0X3ByZXZfOworICBDb25jcmV0ZVBpbiAqbmV4dCA9IHBpbi0+bmV0X25leHRfOworICBpZiAocHJldikKKyAgICBwcmV2LT5uZXRfbmV4dF8gPSBuZXh0OworICBpZiAobmV4dCkKKyAgICBuZXh0LT5uZXRfcHJldl8gPSBwcmV2OworICBpZiAocGluc18gPT0gcGluKQorICAgIHBpbnNfID0gbmV4dDsKK30KKwordm9pZAorQ29uY3JldGVOZXQ6OmFkZFRlcm0oQ29uY3JldGVUZXJtICp0ZXJtKQoreworICBDb25jcmV0ZVRlcm0gKm5leHQgPSB0ZXJtc187CisgIHRlcm1zXyA9IHRlcm07CisgIHRlcm0tPm5ldF9uZXh0XyA9IG5leHQ7Cit9CisKK3ZvaWQKK0NvbmNyZXRlTmV0OjpkZWxldGVUZXJtKENvbmNyZXRlVGVybSAqdGVybSkKK3sKKyAgQ29uY3JldGVUZXJtICpuZXRfcHJldl90ZXJtID0gbnVsbHB0cjsKKyAgZm9yIChDb25jcmV0ZVRlcm0gKm5ldF90ZXJtPXRlcm1zXztuZXRfdGVybTtuZXRfdGVybT1uZXRfdGVybS0+bmV0X25leHRfKSB7CisgICAgaWYgKG5ldF90ZXJtID09IHRlcm0pIHsKKyAgICAgIGlmIChuZXRfcHJldl90ZXJtKQorCW5ldF9wcmV2X3Rlcm0tPm5ldF9uZXh0XyA9IHRlcm0tPm5ldF9uZXh0XzsKKyAgICAgIGVsc2UKKwl0ZXJtc18gPSB0ZXJtLT5uZXRfbmV4dF87CisgICAgICBicmVhazsKKyAgICB9CisgICAgbmV0X3ByZXZfdGVybSA9IG5ldF90ZXJtOworICB9Cit9CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwordHlwZWRlZiBNYXA8TmV0KiwgTmV0Kj4gQmluZGluZ01hcDsKKworLy8gQmluZGluZyB0YWJsZSB1c2VkIGZvciBsaW5raW5nL2V4cGFuZGluZyBuZXR3b3JrLgorY2xhc3MgQ29uY3JldGVCaW5kaW5nVGJsCit7CitwdWJsaWM6CisgIGV4cGxpY2l0IENvbmNyZXRlQmluZGluZ1RibChOZXR3b3JrRWRpdCAqbmV0d29yayk7CisgIE5ldCAqZW5zdXJlQmluZGluZyhOZXQgKnByb3RvX25ldCwKKwkJICAgICBJbnN0YW5jZSAqcGFyZW50KTsKKyAgTmV0ICpmaW5kKE5ldCAqbmV0KTsKKyAgdm9pZCBiaW5kKE5ldCAqcHJvdG9fbmV0LAorCSAgICBOZXQgKmNsb25lX25ldCk7CisKK3ByaXZhdGU6CisgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihDb25jcmV0ZUJpbmRpbmdUYmwpOworCisgIEJpbmRpbmdNYXAgbWFwXzsKKyAgTmV0d29ya0VkaXQgKm5ldHdvcmtfOworfTsKKwordm9pZAorQ29uY3JldGVOZXR3b3JrOjpzZXRDZWxsTmV0d29ya1ZpZXcoQ2VsbCAqY2VsbCwKKwkJCQkgICAgSW5zdGFuY2UgKmluc3QpCit7CisgIGNlbGxfbmV0d29ya192aWV3X21hcF9bY2VsbF0gPSBpbnN0OworfQorCitJbnN0YW5jZSAqCitDb25jcmV0ZU5ldHdvcms6OmNlbGxOZXR3b3JrVmlldyhDZWxsICpjZWxsKQoreworICByZXR1cm4gY2VsbF9uZXR3b3JrX3ZpZXdfbWFwXy5maW5kS2V5KGNlbGwpOworfQorCit2b2lkCitDb25jcmV0ZU5ldHdvcms6OnJlYWROZXRsaXN0QmVmb3JlKCkKK3sKKyAgY2xlYXJDb25zdGFudE5ldHMoKTsKKyAgZGVsZXRlVG9wSW5zdGFuY2UoKTsKKyAgY2xlYXJOZXREcnZyUGluTWFwKCk7Cit9CisKK3ZvaWQKK0NvbmNyZXRlTmV0d29yazo6c2V0VG9wSW5zdGFuY2UoSW5zdGFuY2UgKnRvcF9pbnN0KQoreworICBpZiAodG9wX2luc3RhbmNlXykgeworICAgIGRlbGV0ZUluc3RhbmNlKHRvcF9pbnN0YW5jZV8pOworICAgIGNsZWFyQ29uc3RhbnROZXRzKCk7CisgICAgY2xlYXJOZXREcnZyUGluTWFwKCk7CisgIH0KKyAgdG9wX2luc3RhbmNlXyA9IHRvcF9pbnN0OworfQorCit2b2lkCitDb25jcmV0ZU5ldHdvcms6OnNldExpbmtGdW5jKExpbmtOZXR3b3JrRnVuYyAqbGluaykKK3sKKyAgbGlua19mdW5jXyA9IGxpbms7Cit9CisKK2Jvb2wKK0NvbmNyZXRlTmV0d29yazo6bGlua05ldHdvcmsoY29uc3QgY2hhciAqdG9wX2NlbGxfbmFtZSwKKwkJCSAgICAgYm9vbCBtYWtlX2JsYWNrX2JveGVzLAorCQkJICAgICBSZXBvcnQgKnJlcG9ydCkKK3sKKyAgaWYgKGxpbmtfZnVuY18pIHsKKyAgICBjbGVhckNvbnN0YW50TmV0cygpOworICAgIGRlbGV0ZVRvcEluc3RhbmNlKCk7CisgICAgdG9wX2luc3RhbmNlXyA9IGxpbmtfZnVuY18odG9wX2NlbGxfbmFtZSwgbWFrZV9ibGFja19ib3hlcywgcmVwb3J0LCB0aGlzKTsKKyAgICByZXR1cm4gdG9wX2luc3RhbmNlXyAhPSBudWxscHRyOworICB9CisgIGVsc2UgeworICAgIHJlcG9ydC0+ZXJyb3IoOCwgImNlbGwgdHlwZSAlcyBjYW4gbm90IGJlIGxpbmtlZC4iLCB0b3BfY2VsbF9uYW1lKTsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KK30KKworSW5zdGFuY2UgKgorbGlua1JlYWRlck5ldHdvcmsoQ2VsbCAqdG9wX2NlbGwsCisJCSAgYm9vbCwgUmVwb3J0ICosCisJCSAgTmV0d29ya1JlYWRlciAqbmV0d29yaykKK3sKKyAgSW5zdGFuY2UgKnZpZXcgPSBuZXR3b3JrLT5jZWxsTmV0d29ya1ZpZXcodG9wX2NlbGwpOworICBpZiAodmlldykgeworICAgIC8vIFNlZWQgdGhlIHJlY3Vyc2lvbiBmb3IgZXhwYW5zaW9uIHdpdGggdGhlIHRvcCBsZXZlbCBpbnN0YW5jZS4KKyAgICBJbnN0YW5jZSAqdG9wX2luc3RhbmNlID0gbmV0d29yay0+bWFrZUluc3RhbmNlKHRvcF9jZWxsLCAiIiwgbnVsbHB0cik7CisgICAgQ29uY3JldGVCaW5kaW5nVGJsIGJpbmRpbmdzKG5ldHdvcmspOworICAgIG1ha2VDbG9uZVBpbnModmlldywgdG9wX2luc3RhbmNlLCB2aWV3LCAmYmluZGluZ3MsIG51bGxwdHIsIG51bGxwdHIsIG5ldHdvcmspOworICAgIEluc3RhbmNlQ2hpbGRJdGVyYXRvciAqY2hpbGRfaXRlciA9IG5ldHdvcmstPmNoaWxkSXRlcmF0b3Iodmlldyk7CisgICAgd2hpbGUgKGNoaWxkX2l0ZXItPmhhc05leHQoKSkgeworICAgICAgSW5zdGFuY2UgKmNoaWxkID0gY2hpbGRfaXRlci0+bmV4dCgpOworICAgICAgbWFrZUNoaWxkTmV0d29yayhjaGlsZCwgdG9wX2luc3RhbmNlLCAmYmluZGluZ3MsIG5ldHdvcmspOworICAgIH0KKyAgICBkZWxldGUgY2hpbGRfaXRlcjsKKyAgICBuZXR3b3JrLT5kZWxldGVDZWxsTmV0d29ya1ZpZXdzKCk7CisgICAgcmV0dXJuIHRvcF9pbnN0YW5jZTsKKyAgfQorICByZXR1cm4gbnVsbHB0cjsKK30KKworc3RhdGljIHZvaWQKK21ha2VDaGlsZE5ldHdvcmsoSW5zdGFuY2UgKnByb3RvLAorCQkgSW5zdGFuY2UgKnBhcmVudCwKKwkJIENvbmNyZXRlQmluZGluZ1RibCAqcGFyZW50X2JpbmRpbmdzLAorCQkgTmV0d29ya1JlYWRlciAqbmV0d29yaykKK3sKKyAgQ2VsbCAqcHJvdG9fY2VsbCA9IG5ldHdvcmstPmNlbGwocHJvdG8pOworICBJbnN0YW5jZSAqY2xvbmUgPSBuZXR3b3JrLT5tYWtlSW5zdGFuY2UocHJvdG9fY2VsbCwgbmV0d29yay0+bmFtZShwcm90byksCisJCQkJCSAgcGFyZW50KTsKKyAgaWYgKG5ldHdvcmstPmlzTGVhZihwcm90b19jZWxsKSkKKyAgICBtYWtlQ2xvbmVQaW5zKHByb3RvLCBjbG9uZSwgbnVsbHB0ciwgbnVsbHB0ciwgcGFyZW50LCBwYXJlbnRfYmluZGluZ3MsIG5ldHdvcmspOworICBlbHNlIHsKKyAgICAvLyBSZWN1cnNlIGlmIHRoaXMgaXNuJ3QgYSBsZWFmIGNlbGwuCisgICAgQ29uY3JldGVCaW5kaW5nVGJsIGJpbmRpbmdzKG5ldHdvcmspOworICAgIEluc3RhbmNlICpjbG9uZV92aWV3ID0gbmV0d29yay0+Y2VsbE5ldHdvcmtWaWV3KHByb3RvX2NlbGwpOworICAgIG1ha2VDbG9uZVBpbnMocHJvdG8sIGNsb25lLCBjbG9uZV92aWV3LCAmYmluZGluZ3MsIHBhcmVudCwKKwkJICBwYXJlbnRfYmluZGluZ3MsIG5ldHdvcmspOworICAgIGlmIChjbG9uZV92aWV3KSB7CisgICAgICBJbnN0YW5jZUNoaWxkSXRlcmF0b3IgKmNoaWxkX2l0ZXIgPSBuZXR3b3JrLT5jaGlsZEl0ZXJhdG9yKGNsb25lX3ZpZXcpOworICAgICAgd2hpbGUgKGNoaWxkX2l0ZXItPmhhc05leHQoKSkgeworCUluc3RhbmNlICpjaGlsZCA9IGNoaWxkX2l0ZXItPm5leHQoKTsKKwltYWtlQ2hpbGROZXR3b3JrKGNoaWxkLCBjbG9uZSwgJmJpbmRpbmdzLCBuZXR3b3JrKTsKKyAgICAgIH0KKyAgICAgIGRlbGV0ZSBjaGlsZF9pdGVyOworICAgIH0KKyAgfQorfQorCitzdGF0aWMgdm9pZAorbWFrZUNsb25lUGlucyhJbnN0YW5jZSAqcHJvdG8sCisJICAgICAgSW5zdGFuY2UgKmNsb25lLAorCSAgICAgIEluc3RhbmNlICpjbG9uZV92aWV3LAorCSAgICAgIENvbmNyZXRlQmluZGluZ1RibCAqYmluZGluZ3MsCisJICAgICAgSW5zdGFuY2UgKnBhcmVudCwKKwkgICAgICBDb25jcmV0ZUJpbmRpbmdUYmwgKnBhcmVudF9iaW5kaW5ncywKKwkgICAgICBOZXR3b3JrUmVhZGVyICpuZXR3b3JrKQoreworICBJbnN0YW5jZVBpbkl0ZXJhdG9yICpwcm90b19waW5faXRlciA9IG5ldHdvcmstPnBpbkl0ZXJhdG9yKHByb3RvKTsKKyAgd2hpbGUgKHByb3RvX3Bpbl9pdGVyLT5oYXNOZXh0KCkpIHsKKyAgICBQaW4gKnByb3RvX3BpbiA9IHByb3RvX3Bpbl9pdGVyLT5uZXh0KCk7CisgICAgTmV0ICpwcm90b19uZXQgPSBuZXR3b3JrLT5uZXQocHJvdG9fcGluKTsKKyAgICBQb3J0ICpwcm90b19wb3J0ID0gbmV0d29yay0+cG9ydChwcm90b19waW4pOworICAgIE5ldCAqY2xvbmVfbmV0ID0gbnVsbHB0cjsKKyAgICBpZiAocHJvdG9fbmV0ICYmIHBhcmVudF9iaW5kaW5ncykKKyAgICAgIGNsb25lX25ldCA9IHBhcmVudF9iaW5kaW5ncy0+ZW5zdXJlQmluZGluZyhwcm90b19uZXQsIHBhcmVudCk7CisgICAgUGluICpjbG9uZV9waW4gPSBuZXR3b3JrLT5jb25uZWN0KGNsb25lLCBwcm90b19wb3J0LCBjbG9uZV9uZXQpOworICAgIGlmIChjbG9uZV92aWV3KSB7CisgICAgICBQaW4gKmNsb25lX3Byb3RvX3BpbiA9IG5ldHdvcmstPmZpbmRQaW4oY2xvbmVfdmlldywgcHJvdG9fcG9ydCk7CisgICAgICBOZXQgKmNsb25lX3Byb3RvX25ldCA9IG5ldHdvcmstPm5ldChjbG9uZV9wcm90b19waW4pOworICAgICAgTmV0ICpjbG9uZV9jaGlsZF9uZXQgPSBudWxscHRyOworICAgICAgaWYgKGNsb25lX3Byb3RvX25ldCkKKwljbG9uZV9jaGlsZF9uZXQgPSBiaW5kaW5ncy0+ZW5zdXJlQmluZGluZyhjbG9uZV9wcm90b19uZXQsIGNsb25lKTsKKyAgICAgIG5ldHdvcmstPm1ha2VUZXJtKGNsb25lX3BpbiwgY2xvbmVfY2hpbGRfbmV0KTsKKyAgICB9CisgIH0KKyAgZGVsZXRlIHByb3RvX3Bpbl9pdGVyOworfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK0NvbmNyZXRlQmluZGluZ1RibDo6Q29uY3JldGVCaW5kaW5nVGJsKE5ldHdvcmtFZGl0ICpuZXR3b3JrKSA6CisgIG5ldHdvcmtfKG5ldHdvcmspCit7Cit9CisKKy8vIEZvbGxvdyB0aGUgbWVyZ2VkX2ludG8gcG9pbnRlcnMgcmF0aGVyIHRoYW4gdXBkYXRlIHRoZQorLy8gYmluZGluZyB0YWJsZXMgdXAgdGhlIGNhbGwgdHJlZSB3aGVuIG5vZGVzIGFyZSBtZXJnZWQKKy8vIGJlY2F1c2UgdGhlIG5hbWUgY2hhbmdlcyB1cCB0aGUgaGllcmFyY2h5LgorTmV0ICoKK0NvbmNyZXRlQmluZGluZ1RibDo6ZmluZChOZXQgKnByb3RvX25ldCkKK3sKKyAgQ29uY3JldGVOZXQgKm5ldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q29uY3JldGVOZXQqPihtYXBfLmZpbmRLZXkocHJvdG9fbmV0KSk7CisgIHdoaWxlIChuZXQgJiYgbmV0LT5tZXJnZWRJbnRvKCkpCisgICAgbmV0ID0gbmV0LT5tZXJnZWRJbnRvKCk7CisgIHJldHVybiByZWludGVycHJldF9jYXN0PE5ldCo+KG5ldCk7Cit9CisKK3ZvaWQKK0NvbmNyZXRlQmluZGluZ1RibDo6YmluZChOZXQgKnByb3RvX25ldCwKKwkJCSBOZXQgKm5ldCkKK3sKKyAgbWFwX1twcm90b19uZXRdID0gbmV0OworfQorCitOZXQgKgorQ29uY3JldGVCaW5kaW5nVGJsOjplbnN1cmVCaW5kaW5nKE5ldCAqcHJvdG9fbmV0LAorCQkJCSAgSW5zdGFuY2UgKnBhcmVudCkKK3sKKyAgTmV0ICpuZXQgPSBmaW5kKHByb3RvX25ldCk7CisgIGlmIChuZXQgPT0gbnVsbHB0cikgeworICAgIG5ldCA9IG5ldHdvcmtfLT5tYWtlTmV0KG5ldHdvcmtfLT5uYW1lKHByb3RvX25ldCksIHBhcmVudCk7CisgICAgbWFwX1twcm90b19uZXRdID0gbmV0OworICB9CisgIHJldHVybiBuZXQ7Cit9CisKK30gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9oYWNrcy9zcmMvT3BlblNUQS90Y2wvTmV0d29ya0VkaXQudGNsIGIvaGFja3Mvc3JjL09wZW5TVEEvdGNsL05ldHdvcmtFZGl0LnRjbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGY3MjlkCi0tLSAvZGV2L251bGwKKysrIGIvaGFja3Mvc3JjL09wZW5TVEEvdGNsL05ldHdvcmtFZGl0LnRjbApAQCAtMCwwICsxLDI2MiBAQAorIyBPcGVuU1RBLCBTdGF0aWMgVGltaW5nIEFuYWx5emVyCisjIENvcHlyaWdodCAoYykgMjAyMiwgUGFyYWxsYXggU29mdHdhcmUsIEluYy4KKyMgCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjIAorIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjIAorIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyBOZXR3b3JrIGVkaXRpbmcgY29tbWFuZHMuCisKK25hbWVzcGFjZSBldmFsIHN0YSB7CisKK3Byb2MgY29ubmVjdF9waW4geyBuZXQgcGluIH0geworICBzZXQgaW5zdHNfcG9ydCBbcGFyc2VfY29ubmVjdF9waW4gJHBpbl0KKyAgaWYgeyAkaW5zdHNfcG9ydCA9PSAwIH0geworICAgIHJldHVybiAwCisgIH0KKyAgc2V0IG5ldCBbZ2V0X25ldF93YXJuICJuZXQiICRuZXRdCisgIGlmIHsgJG5ldCA9PSAiTlVMTCIgfSB7CisgICAgcmV0dXJuIDAKKyAgfQorICBsYXNzaWduICRpbnN0c19wb3J0IGluc3QgcG9ydAorICBjb25uZWN0X3Bpbl9jbWQgJGluc3QgJHBvcnQgJG5ldAorICByZXR1cm4gMQorfQorCitwcm9jIHBhcnNlX2Nvbm5lY3RfcGluIHsgYXJnIH0geworICBzZXQgcGF0aF9yZWdleHAgW3BhdGhfcmVnZXhwXQorICBzZXQgaW5zdHNfcG9ydCB7fQorICBpZiB7IFtpc19vYmplY3QgJGFyZ10gfSB7CisgICAgc2V0IG9iamVjdF90eXBlIFtvYmplY3RfdHlwZSAkYXJnXQorICAgIGlmIHsgJG9iamVjdF90eXBlID09ICJQaW4iIH0geworICAgICAgc2V0IHBpbiAkYXJnCisgICAgICBzZXQgaW5zdCBbJHBpbiBpbnN0YW5jZV0KKyAgICAgIHNldCBwb3J0IFskcGluIHBvcnRdCisgICAgfSBlbHNlaWYgeyAkb2JqZWN0X3R5cGUgPT0gIlBvcnQiIH0geworICAgICAgIyBFeHBsaWNpdCBwb3J0IGFyZyAtIGNvbnZlcnQgdG8gcGluLgorICAgICAgc2V0IHBpbiBbZmluZF9waW4gW2dldF9uYW1lICRhcmddXQorICAgICAgc2V0IGluc3QgWyRwaW4gaW5zdGFuY2VdCisgICAgICBzZXQgcG9ydCBbJHBpbiBwb3J0XQorICAgIH0gZWxzZSB7CisgICAgICBzdGFfZXJyb3IgNTg2ICJ1bnN1cHBvcnRlZCBvYmplY3QgdHlwZSAkb2JqZWN0X3R5cGUuIgorICAgIH0KKyAgfSBlbHNlIHsKKyAgICBpZiB7W3JlZ2V4cCAkcGF0aF9yZWdleHAgJGFyZyBpZ25vcmUgcGF0aF9uYW1lIHBvcnRfbmFtZV19IHsKKyAgICAgIHNldCBpbnN0IFtmaW5kX2luc3RhbmNlICRwYXRoX25hbWVdCisgICAgICBpZiB7ICRpbnN0ID09ICJOVUxMIiB9IHsKKwlyZXR1cm4gMAorICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICBzZXQgaW5zdCBbdG9wX2luc3RhbmNlXQorICAgICAgc2V0IHBvcnRfbmFtZSAkYXJnCisgICAgfQorICAgIHNldCBjZWxsIFskaW5zdCBjZWxsXQorICAgIHNldCBwb3J0IFskY2VsbCBmaW5kX3BvcnQgJHBvcnRfbmFtZV0KKyAgICBpZiB7ICRwb3J0ID09ICJOVUxMIiB9IHsKKyAgICAgIHJldHVybiAwCisgICAgfQorICAgIHNldCBwaW4gWyRpbnN0IGZpbmRfcGluICRwb3J0X25hbWVdCisgIH0KKyAgCisgICMgTWFrZSBzdXJlIHRoZSBwaW4gaXMgbm90IGN1cnJlbnRseSBjb25uZWN0ZWQgdG8gYSBuZXQuCisgIGlmIHsgJHBpbiAhPSAiTlVMTCIgXAorCSAmJiAhWyRwaW4gaXNfaGllcmFyY2hpY2FsXSBcCisJICYmIFskcGluIG5ldF0gIT0gIk5VTEwiIH0geworICAgIHJldHVybiAwCisgIH0KKyAgcmV0dXJuIFtsaXN0ICRpbnN0ICRwb3J0XQorfQorCitwcm9jIGNvbm5lY3RfcGlucyB7IG5ldCBwaW5zIH0geworICBzdGFfd2FybiAzNzIgImNvbm5lY3RfcGlucyBpcyBkZXByZWNhdGVkLiAgVXNlIGNvbm5lY3RfcGluLiIKKyAgIyBWaXNpdCB0aGUgcGlucyB0byBtYWtlIHN1cmUgY29tbWFuZCB3aWxsIHN1Y2NlZWQuCisgIHNldCBpbnN0c19wb3J0cyBbcGFyc2VfY29ubmVjdF9waW5zICRwaW5zXQorICBpZiB7ICRpbnN0c19wb3J0cyA9PSAwIH0geworICAgIHJldHVybiAwCisgIH0KKyAgc2V0IG5ldCBbZ2V0X25ldF93YXJuICJuZXQiICRuZXRdCisgIGlmIHsgJG5ldCA9PSAiTlVMTCIgfSB7CisgICAgcmV0dXJuIDAKKyAgfQorICBmb3JlYWNoIHtpbnN0IHBvcnR9ICRpbnN0c19wb3J0cyB7CisgICAgY29ubmVjdF9waW5fY21kICRpbnN0ICRwb3J0ICRuZXQKKyAgfQorICByZXR1cm4gMQorfQorCitwcm9jIHBhcnNlX2Nvbm5lY3RfcGlucyB7IGFyZyB9IHsKKyAgc2V0IHBhdGhfcmVnZXhwIFtwYXRoX3JlZ2V4cF0KKyAgc2V0IGluc3RfcG9ydHMge30KKyAgIyBDb3B5IGJhY2tzbGFzaGVzIHRoYXQgd2lsbCBiZSByZW1vdmVkIGJ5IGZvcmVhY2guCisgIHNldCBhcmcgW3N0cmluZyBtYXAge1xcIFxcXFx9ICRhcmddCisgIGZvcmVhY2ggb2JqICRhcmcgeworICAgIHNldCBpbnN0X3BvcnQgW3BhcnNlX2Nvbm5lY3RfcGluICRvYmpdCisgICAgaWYgeyAkaW5zdF9wb3J0ID09IDAgfSB7CisgICAgICByZXR1cm4gMAorICAgIH0KKyAgICBzZXQgaW5zdF9wb3J0cyBbY29uY2F0ICRpbnN0X3BvcnRzICRpbnN0X3BvcnRdCisgIH0KKyAgcmV0dXJuICRpbnN0X3BvcnRzCit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworcHJvYyBkZWxldGVfaW5zdGFuY2UgeyBpbnN0YW5jZSB9IHsKKyAgaWYgeyBbaXNfb2JqZWN0ICRpbnN0YW5jZV0gfSB7CisgICAgc2V0IG9iamVjdF90eXBlIFtvYmplY3RfdHlwZSAkaW5zdGFuY2VdCisgICAgaWYgeyAkb2JqZWN0X3R5cGUgPT0gIkluc3RhbmNlIiB9IHsKKyAgICAgIHNldCBpbnN0ICRvYmoKKyAgICB9IGVsc2UgeworICAgICAgc3RhX2Vycm9yIDU4NyAidW5zdXBwb3J0ZWQgb2JqZWN0IHR5cGUgJG9iamVjdF90eXBlLiIKKyAgICB9CisgIH0gZWxzZSB7CisgICAgc2V0IGluc3QgW2ZpbmRfaW5zdGFuY2UgJGluc3RhbmNlXQorICB9CisgIGlmIHsgJGluc3QgIT0gIk5VTEwiIH0geworICAgIGRlbGV0ZV9pbnN0YW5jZV9jbWQgJGluc3QKKyAgfQorfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3Byb2MgZGVsZXRlX25ldCB7IG5ldCB9IHsKKyAgaWYgeyBbaXNfb2JqZWN0ICRuZXRdIH0geworICAgIHNldCBvYmplY3RfdHlwZSBbb2JqZWN0X3R5cGUgJG5ldF0KKyAgICBpZiB7ICRvYmplY3RfdHlwZSAhPSAiTmV0IiB9IHsKKyAgICAgIHN0YV9lcnJvciA1ODggInVuc3VwcG9ydGVkIG9iamVjdCB0eXBlICRvYmplY3RfdHlwZS4iCisgICAgfQorICB9IGVsc2UgeworICAgIHNldCBuZXQgW2ZpbmRfbmV0ICRuZXRdCisgIH0KKyAgaWYgeyAkbmV0ICE9ICJOVUxMIiB9IHsKKyAgICBkZWxldGVfbmV0X2NtZCAkbmV0CisgIH0KK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitwcm9jIGRpc2Nvbm5lY3RfcGluIHsgbmV0IHBpbiB9IHsKKyAgc2V0IG5ldCBbZ2V0X25ldF93YXJuICJuZXQiICRuZXRdCisgIGlmIHsgJG5ldCA9PSAiTlVMTCIgfSB7CisgICAgcmV0dXJuIDAKKyAgfQorICBpZiB7ICRwaW4gPT0gIi1hbGwiIH0geworICAgIHNldCBpdGVyIFskbmV0IGNvbm5lY3RlZF9waW5faXRlcmF0b3JdCisgICAgd2hpbGUge1skaXRlciBoYXNfbmV4dF19IHsKKyAgICAgIHNldCBwaW4gWyRpdGVyIG5leHRdCisgICAgICBkaXNjb25uZWN0X3Bpbl9jbWQgJHBpbgorICAgIH0KKyAgICAkaXRlciBmaW5pc2gKKyAgICByZXR1cm4gMQorICB9IGVsc2UgeworICAgIHNldCBwaW4xIFtnZXRfcG9ydF9waW5fd2FybiAicGluIiAkcGluXQorICAgIGlmIHsgJHBpbjEgPT0gIk5VTEwiIH0geworICAgICAgcmV0dXJuIDAKKyAgICB9IGVsc2UgeworICAgICAgZGlzY29ubmVjdF9waW5fY21kICRwaW4xCisgICAgICByZXR1cm4gMQorICAgIH0KKyAgfQorfQorCitwcm9jIGRpc2Nvbm5lY3RfcGlucyB7IG5ldCBwaW5zIH0geworICBzdGFfd2FybiA2MDMgImRpc2Nvbm5lY3RfcGlucyBpcyBkZXByZWNhdGVkLiAgVXNlIGRpc2Nvbm5lY3RfcGluLiIKKyAgZm9yZWFjaCBwaW4gJHBpbnMgeworICAgIGRpc2Nvbm5lY3RfcGluICRuZXQgJHBpbnMKKyAgfQorfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3Byb2MgbWFrZV9pbnN0YW5jZSB7IGluc3RfcGF0aCBsaWJfY2VsbCB9IHsKKyAgc2V0IGxpYl9jZWxsIFtnZXRfbGliX2NlbGxfd2FybiAibGliX2NlbGwiICRsaWJfY2VsbF0KKyAgaWYgeyAkbGliX2NlbGwgIT0gIk5VTEwiIH0geworICAgIHNldCBwYXRoX3JlZ2V4cCBbcGF0aF9yZWdleHBdCisgICAgaWYge1tyZWdleHAgJHBhdGhfcmVnZXhwICRpbnN0X3BhdGggaWdub3JlIHBhdGhfbmFtZSBpbnN0X25hbWVdfSB7CisgICAgICBzZXQgcGFyZW50IFtmaW5kX2luc3RhbmNlICRwYXRoX25hbWVdCisgICAgICBpZiB7ICRwYXJlbnQgPT0gIk5VTEwiIH0geworCSMgUGFyZW50IGluc3RhbmNlIG5vdCBmb3VuZC4gIFRoaXMgY291bGQgYmUgYSB0eXBvLCBidXQgc2luY2UKKwkjIFNEQyBkb2VzIG5vdCBlc2NhcGUgaGllcmFyY2h5IGRpdmlkZXJzIGl0IGNhbiBhbHNvIGJlCisJIyBhbiBlc2NhcGVkIG5hbWUuCisJc2V0IGluc3RfbmFtZSAkaW5zdF9wYXRoCisJc2V0IHBhcmVudCBbdG9wX2luc3RhbmNlXQorICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICBzZXQgaW5zdF9uYW1lICRpbnN0X3BhdGgKKyAgICAgIHNldCBwYXJlbnQgW3RvcF9pbnN0YW5jZV0KKyAgICB9CisgICAgcmV0dXJuIFttYWtlX2luc3RhbmNlX2NtZCAkaW5zdF9uYW1lICRsaWJfY2VsbCAkcGFyZW50XQorICB9IGVsc2UgeworICAgIHJldHVybiAwCisgIH0KK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitwcm9jIG1ha2VfbmV0IHsgbmV0X3BhdGggfSB7CisgICMgQ29weSBiYWNrc2xhc2hlcyB0aGF0IHdpbGwgYmUgcmVtb3ZlZCBieSBmb3JlYWNoLgorICBzZXQgbmV0X3BhdGggW3N0cmluZyBtYXAge1xcIFxcXFx9ICRuZXRfcGF0aF0KKyAgc2V0IHBhdGhfcmVnZXhwIFtwYXRoX3JlZ2V4cF0KKyAgaWYge1tyZWdleHAgJHBhdGhfcmVnZXhwICRuZXRfcGF0aCBpZ25vcmUgcGF0aF9uYW1lIG5ldF9uYW1lXX0geworICAgIHNldCBwYXJlbnQgW2ZpbmRfaW5zdGFuY2UgJHBhdGhfbmFtZV0KKyAgICBpZiB7ICRwYXJlbnQgPT0gIk5VTEwiIH0geworICAgICAgcmV0dXJuIDAKKyAgICB9CisgIH0gZWxzZSB7CisgICAgc2V0IHBhcmVudCBbdG9wX2luc3RhbmNlXQorICAgIHNldCBuZXRfbmFtZSAkbmV0X3BhdGgKKyAgfQorICByZXR1cm4gW21ha2VfbmV0X2NtZCAkbmV0X25hbWUgJHBhcmVudF0KK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitwcm9jIHJlcGxhY2VfY2VsbCB7IGluc3RhbmNlIGxpYl9jZWxsIH0geworICBzZXQgY2VsbCBbZ2V0X2xpYl9jZWxsX3dhcm4gImxpYl9jZWxsIiAkbGliX2NlbGxdCisgIGlmIHsgJGNlbGwgIT0gIk5VTEwiIH0geworICAgIHNldCBpbnN0IFtnZXRfaW5zdGFuY2VfZXJyb3IgImluc3RhbmNlIiAkaW5zdGFuY2VdCisgICAgc2V0IGluc3RfY2VsbCBbJGluc3QgbGliZXJ0eV9jZWxsXQorICAgIGlmIHsgJGluc3RfY2VsbCA9PSAiTlVMTCIgXAorCSAgIHx8ICFbZXF1aXZfY2VsbF9wb3J0cyAkaW5zdF9jZWxsICRjZWxsXSB9IHsKKyAgICAgIHJldHVybiAwCisgICAgfQorICAgIHJlcGxhY2VfY2VsbF9jbWQgJGluc3QgJGNlbGwKKyAgICByZXR1cm4gMQorICB9IGVsc2UgeworICAgIHJldHVybiAwCisgIH0KK30KKworcHJvYyByZXBsYWNlX3RvX3NjYW5fY2VsbCB7IGluc3RhbmNlIH0geworICBzZXQgaW5zdCBbZ2V0X2luc3RhbmNlX2Vycm9yICJpbnN0YW5jZSIgJGluc3RhbmNlXQorICBzZXQgaW5zdF9jZWxsIFtnZXRfZnVsbF9uYW1lIFskaW5zdCBsaWJlcnR5X2NlbGxdXQorICAjVGFyZ2V0IHNjYW4gY2VsbCBfX2QgdG8gX19zZAorICAjZXhhbXBsZSBza3kxMzBfZmRfc2NfaGRfX2RmcnRwXzIgdG8gc2t5MTMwX2ZkX3NjX2hkX19zZGZydHBfMgorICBzZXQgaW5zdF9zY2VsbCBbcmVnc3ViIC1hbGwgIl9fZCIgJGluc3RfY2VsbCAiX19zZCJdCisgIHB1dHMgIkluZm86IFNjYW4gU3dhcHBpbmcgPT4gSW5zdGFuY2U6JGluc3RhbmNlIEZyb206JGluc3RfY2VsbCB0bzokaW5zdF9zY2VsbCI7CisgIGlmIHsgJGluc3RfY2VsbCA9PSAiTlVMTCJ9IHsKKyAgICByZXR1cm4gMAorICB9CisgIHNldCBzY2VsbCBbZ2V0X2xpYl9jZWxsX3dhcm4gImxpYl9jZWxsIiAkaW5zdF9zY2VsbF0KKyAgcmVwbGFjZV9jZWxsX2NtZCAkaW5zdCAkc2NlbGwKKyAgcmV0dXJuIDEKK30KKworcHJvYyBwYXRoX3JlZ2V4cCB7fSB7CisgIGdsb2JhbCBoaWVyYXJjaHlfc2VwYXJhdG9yCisgIHNldCBpZF9yZWdleHAgIlxbXiR7aGllcmFyY2h5X3NlcGFyYXRvcn1cXSsiCisgIHNldCBwcmVmaXhfcmVnZXhwICIke2lkX3JlZ2V4cH0oPzoke2hpZXJhcmNoeV9zZXBhcmF0b3J9JHtpZF9yZWdleHB9KSoiCisgIHJldHVybiAiXigke3ByZWZpeF9yZWdleHB9KSR7aGllcmFyY2h5X3NlcGFyYXRvcn0oJHtpZF9yZWdleHB9KSQiCit9CisKKyMgc3RhIG5hbWVzcGFjZSBlbmQuCit9CmRpZmYgLS1naXQgYS9oYWNrcy9zcmMvT3BlblNUQS90Y2wvU3RhLnRjbCBiL2hhY2tzL3NyYy9PcGVuU1RBL3RjbC9TdGEudGNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0ZjVhMDgKLS0tIC9kZXYvbnVsbAorKysgYi9oYWNrcy9zcmMvT3BlblNUQS90Y2wvU3RhLnRjbApAQCAtMCwwICsxLDE1NTcgQEAKKyMgT3BlblNUQSwgU3RhdGljIFRpbWluZyBBbmFseXplcgorIyBDb3B5cmlnaHQgKGMpIDIwMjIsIFBhcmFsbGF4IFNvZnR3YXJlLCBJbmMuCisjIAorIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIyAKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIyAKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKK25hbWVzcGFjZSBldmFsIHN0YSB7CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgTm9uLVNEQyBjb21tYW5kcworIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitkZWZpbmVfY21kX2FyZ3MgImRlbGV0ZV9jbG9jayIge1stYWxsXSBjbG9ja3N9CisKK3Byb2MgZGVsZXRlX2Nsb2NrIHsgYXJncyB9IHsKKyAgcGFyc2Vfa2V5X2FyZ3MgImRlbGV0ZV9jbG9jayIgYXJncyBrZXlzIHt9IGZsYWdzIHstYWxsfQorICBpZiB7IFtpbmZvIGV4aXN0cyBmbGFncygtYWxsKV0gfSB7CisgICAgY2hlY2tfYXJnY19lcTAgImRlbGV0ZV9jbG9jayIgJGFyZ3MKKyAgICBzZXQgY2xrcyBbYWxsX2Nsb2Nrc10KKyAgfSBlbHNlIHsKKyAgICBjaGVja19hcmdjX2VxMSAiZGVsZXRlX2Nsb2NrIiAkYXJncworICAgIHNldCBjbGtzIFtnZXRfY2xvY2tzX3dhcm4gImNsb2NrcyIgW2xpbmRleCAkYXJncyAwXV0KKyAgfQorICBmb3JlYWNoIGNsayAkY2xrcyB7CisgICAgcmVtb3ZlX2Nsb2NrX2NtZCAkY2xrCisgIH0KK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitkZWZpbmVfY21kX2FyZ3MgImRlbGV0ZV9nZW5lcmF0ZWRfY2xvY2siIHtbLWFsbF0gY2xvY2tzfQorCitwcm9jIGRlbGV0ZV9nZW5lcmF0ZWRfY2xvY2sgeyBhcmdzIH0geworICByZW1vdmVfZ2Nsa19jbWQgImRlbGV0ZV9nZW5lcmF0ZWRfY2xvY2siICRhcmdzCit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworZGVmaW5lX2NtZF9hcmdzICJzZXRfZGlzYWJsZV9pbmZlcnJlZF9jbG9ja19nYXRpbmciIHsgb2JqZWN0cyB9CisKK3Byb2Mgc2V0X2Rpc2FibGVfaW5mZXJyZWRfY2xvY2tfZ2F0aW5nIHsgb2JqZWN0cyB9IHsKKyAgc2V0X2Rpc2FibGVfaW5mZXJyZWRfY2xvY2tfZ2F0aW5nX2NtZCAkb2JqZWN0cworfQorCitwcm9jIHNldF9kaXNhYmxlX2luZmVycmVkX2Nsb2NrX2dhdGluZ19jbWQgeyBvYmplY3RzIH0geworICBwYXJzZV9pbnN0X3BvcnRfcGluX2FyZyAkb2JqZWN0cyBpbnN0cyBwaW5zCisgIGZvcmVhY2ggaW5zdCAkaW5zdHMgeworICAgIGRpc2FibGVfY2xvY2tfZ2F0aW5nX2NoZWNrX2luc3QgJGluc3QKKyAgfQorICBmb3JlYWNoIHBpbiAkcGlucyB7CisgICAgZGlzYWJsZV9jbG9ja19nYXRpbmdfY2hlY2tfcGluICRwaW4KKyAgfQorfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2RlZmluZV9jbWRfYXJncyAidW5zZXRfY2FzZV9hbmFseXNpcyIge3BpbnN9CisKK3Byb2MgdW5zZXRfY2FzZV9hbmFseXNpcyB7IHBpbnMgfSB7CisgIHNldCBwaW5zMSBbZ2V0X3BvcnRfcGluc19lcnJvciAicGlucyIgJHBpbnNdCisgIGZvcmVhY2ggcGluICRwaW5zMSB7CisgICAgdW5zZXRfY2FzZV9hbmFseXNpc19jbWQgJHBpbgorICB9Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworZGVmaW5lX2NtZF9hcmdzICJ1bnNldF9jbG9ja19ncm91cHMiIFwKKyAge1stbG9naWNhbGx5X2V4Y2x1c2l2ZV0gWy1waHlzaWNhbGx5X2V4Y2x1c2l2ZV1cCisgICAgIFstYXN5bmNocm9ub3VzXSBbLW5hbWUgbmFtZXNdIFstYWxsXX0KKwkJCQkKK3Byb2MgdW5zZXRfY2xvY2tfZ3JvdXBzIHsgYXJncyB9IHsKKyAgdW5zZXRfY2xrX2dyb3Vwc19jbWQgInVuc2V0X2Nsb2NrX2dyb3VwcyIgJGFyZ3MKK30KKworcHJvYyB1bnNldF9jbGtfZ3JvdXBzX2NtZCB7IGNtZCBjbWRfYXJncyB9IHsKKyAgcGFyc2Vfa2V5X2FyZ3MgJGNtZCBjbWRfYXJncyBcCisgICAga2V5cyB7LW5hbWV9IFwKKyAgICBmbGFncyB7LWxvZ2ljYWxseV9leGNsdXNpdmUgLXBoeXNpY2FsbHlfZXhjbHVzaXZlIC1hc3luY2hyb25vdXMgLWFsbH0KKworICBzZXQgYWxsIFtpbmZvIGV4aXN0cyBmbGFncygtYWxsKV0KKyAgc2V0IG5hbWVzIHt9CisgIGlmIHtbaW5mbyBleGlzdHMga2V5cygtbmFtZSldfSB7CisgICAgc2V0IG5hbWVzICRrZXlzKC1uYW1lKQorICB9CisKKyAgaWYgeyAkYWxsICYmICRuYW1lcyAhPSB7fSB9IHsKKyAgICBzdGFfZXJyb3IgNDU0ICJ0aGUgLWFsbCBhbmQgLW5hbWUgb3B0aW9ucyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiIKKyAgfQorICBpZiB7ICEkYWxsICYmICRuYW1lcyA9PSB7fSB9IHsKKyAgICBzdGFfZXJyb3IgNDU1ICJlaXRoZXIgLWFsbCBvciAtbmFtZSBvcHRpb25zIG11c3QgYmUgc3BlY2lmaWVkLiIKKyAgfQorCisgIHNldCBsb2dpY2FsbHlfZXhjbHVzaXZlIFtpbmZvIGV4aXN0cyBmbGFncygtbG9naWNhbGx5X2V4Y2x1c2l2ZSldCisgIHNldCBwaHlzaWNhbGx5X2V4Y2x1c2l2ZSBbaW5mbyBleGlzdHMgZmxhZ3MoLXBoeXNpY2FsbHlfZXhjbHVzaXZlKV0KKyAgc2V0IGFzeW5jaHJvbm91cyBbaW5mbyBleGlzdHMgZmxhZ3MoLWFzeW5jaHJvbm91cyldCisKKyAgaWYgeyAoJGxvZ2ljYWxseV9leGNsdXNpdmUrJHBoeXNpY2FsbHlfZXhjbHVzaXZlKyRhc3luY2hyb25vdXMpID09IDAgfSB7CisgICAgc3RhX2Vycm9yIDQ1NiAib25lIG9mIC1sb2dpY2FsbHlfZXhjbHVzaXZlLCAtcGh5c2ljYWxseV9leGNsdXNpdmUgb3IgLWFzeW5jaHJvbm91cyBpcyByZXF1aXJlZC4iCisgIH0KKyAgaWYgeyAoJGxvZ2ljYWxseV9leGNsdXNpdmUrJHBoeXNpY2FsbHlfZXhjbHVzaXZlKyRhc3luY2hyb25vdXMpID4gMSB9IHsKKyAgICBzdGFfZXJyb3IgNDU3ICJ0aGUga2V5d29yZHMgLWxvZ2ljYWxseV9leGNsdXNpdmUsIC1waHlzaWNhbGx5X2V4Y2x1c2l2ZSBhbmQgLWFzeW5jaHJvbm91cyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiIKKyAgfQorCisgIGlmIHsgJGFsbCB9IHsKKyAgICBpZiB7ICRsb2dpY2FsbHlfZXhjbHVzaXZlIH0geworICAgICAgdW5zZXRfY2xvY2tfZ3JvdXBzX2xvZ2ljYWxseV9leGNsdXNpdmUgIk5VTEwiCisgICAgfSBlbHNlaWYgeyAkcGh5c2ljYWxseV9leGNsdXNpdmUgfSB7CisgICAgICB1bnNldF9jbG9ja19ncm91cHNfcGh5c2ljYWxseV9leGNsdXNpdmUgIk5VTEwiCisgICAgfSBlbHNlaWYgeyAkYXN5bmNocm9ub3VzIH0geworICAgICAgdW5zZXRfY2xvY2tfZ3JvdXBzX2FzeW5jaHJvbm91cyAiTlVMTCIKKyAgICB9CisgIH0gZWxzZSB7CisgICAgZm9yZWFjaCBuYW1lICRuYW1lcyB7CisgICAgICBpZiB7ICRsb2dpY2FsbHlfZXhjbHVzaXZlIH0geworCXVuc2V0X2Nsb2NrX2dyb3Vwc19sb2dpY2FsbHlfZXhjbHVzaXZlICRuYW1lCisgICAgICB9IGVsc2VpZiB7ICRwaHlzaWNhbGx5X2V4Y2x1c2l2ZSB9IHsKKwl1bnNldF9jbG9ja19ncm91cHNfcGh5c2ljYWxseV9leGNsdXNpdmUgJG5hbWUKKyAgICAgIH0gZWxzZWlmIHsgJGFzeW5jaHJvbm91cyB9IHsKKwl1bnNldF9jbG9ja19ncm91cHNfYXN5bmNocm9ub3VzICRuYW1lCisgICAgICB9CisgICAgfQorICB9Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworZGVmaW5lX2NtZF9hcmdzICJ1bnNldF9jbG9ja19sYXRlbmN5IiB7Wy1zb3VyY2VdIFstY2xvY2sgY2xvY2tdIG9iamVjdHN9CisKK3Byb2MgdW5zZXRfY2xvY2tfbGF0ZW5jeSB7IGFyZ3MgfSB7CisgIHVuc2V0X2Nsa19sYXRlbmN5X2NtZCAidW5zZXRfY2xvY2tfbGF0ZW5jeSIgJGFyZ3MKK30KKworcHJvYyB1bnNldF9jbGtfbGF0ZW5jeV9jbWQgeyBjbWQgY21kX2FyZ3MgfSB7CisgIHBhcnNlX2tleV9hcmdzICRjbWQgY21kX2FyZ3Mga2V5cyB7LWNsb2NrfSBmbGFncyB7LXNvdXJjZX0KKyAgY2hlY2tfYXJnY19lcTEgJGNtZCAkY21kX2FyZ3MKKyAgc2V0IG9iamVjdHMgW2xpbmRleCAkY21kX2FyZ3MgMF0KKyAgcGFyc2VfY2xrX3BvcnRfcGluX2FyZyAkb2JqZWN0cyBjbGtzIHBpbnMKKyAgc2V0IHBpbl9jbGsgIk5VTEwiCisgIGlmIHsgW2luZm8gZXhpc3RzIGtleXMoLWNsb2NrKV0gfSB7CisgICAgc2V0IHBpbl9jbGsgW2dldF9jbG9ja193YXJuICJjbG9jayIgJGtleXMoLWNsb2NrKV0KKyAgICBpZiB7ICRjbGtzICE9IHt9IH0geworICAgICAgc3RhX3dhcm4gMzAzICItY2xvY2sgaWdub3JlZCBmb3IgY2xvY2sgb2JqZWN0cy4iCisgICAgfQorICB9CisKKyAgaWYge1tpbmZvIGV4aXN0cyBmbGFncygtc291cmNlKV19IHsKKyAgICAjIFNvdXJjZSBsYXRlbmN5LgorICAgIGZvcmVhY2ggY2xrICRjbGtzIHsKKyAgICAgIHVuc2V0X2Nsb2NrX2luc2VydGlvbl9jbWQgJGNsayAiTlVMTCIKKyAgICB9CisgICAgZm9yZWFjaCBwaW4gJHBpbnMgeworICAgICAgIyBTb3VyY2Ugb25seSBhbGxvd2VkIG9uIGNsb2NrcyBhbmQgY2xvY2sgcGlucy4KKyAgICAgIGlmIHsgIVtpc19jbG9ja19waW4gJHBpbl0gfSB7CisJc3RhX2Vycm9yIDQ1OCAiLXNvdXJjZSAnWyRwaW4gcGF0aF9uYW1lXScgaXMgbm90IGEgY2xvY2sgcGluLiIKKyAgICAgIH0KKyAgICAgIHVuc2V0X2Nsb2NrX2luc2VydGlvbl9jbWQgJHBpbl9jbGsgJHBpbgorICAgIH0KKyAgfSBlbHNlIHsKKyAgICAjIExhdGVuY3kuCisgICAgZm9yZWFjaCBjbGsgJGNsa3MgeworICAgICAgdW5zZXRfY2xvY2tfbGF0ZW5jeV9jbWQgJGNsayAiTlVMTCIKKyAgICB9CisgICAgZm9yZWFjaCBwaW4gJHBpbnMgeworICAgICAgdW5zZXRfY2xvY2tfbGF0ZW5jeV9jbWQgJHBpbl9jbGsgJHBpbgorICAgIH0KKyAgfQorfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2RlZmluZV9jbWRfYXJncyAidW5zZXRfY2xvY2tfdHJhbnNpdGlvbiIge2Nsb2Nrc30KKworcHJvYyB1bnNldF9jbG9ja190cmFuc2l0aW9uIHsgYXJncyB9IHsKKyAgY2hlY2tfYXJnY19lcTEgInVuc2V0X2Nsb2NrX3RyYW5zaXRpb24iICRhcmdzCisgIHNldCBjbGtzIFtnZXRfY2xvY2tzX3dhcm4gImNsb2NrcyIgW2xpbmRleCAkYXJncyAwXV0KKyAgZm9yZWFjaCBjbGsgJGNsa3MgeworICAgIHVuc2V0X2Nsb2NrX3NsZXdfY21kICRjbGsKKyAgfQorfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2RlZmluZV9jbWRfYXJncyAidW5zZXRfY2xvY2tfdW5jZXJ0YWludHkiIFwKKyAge1stZnJvbXwtcmlzZV9mcm9tfC1mYWxsX2Zyb20gZnJvbV9jbG9ja11cCisgICAgIFstdG98LXJpc2VfdG98LWZhbGxfdG8gdG9fY2xvY2tdIFstcmlzZV0gWy1mYWxsXVwKKyAgICAgWy1zZXR1cF0gWy1ob2xkXSBbb2JqZWN0c119CisKK3Byb2MgdW5zZXRfY2xvY2tfdW5jZXJ0YWludHkgeyBhcmdzIH0geworICB1bnNldF9jbGtfdW5jZXJ0YWludHlfY21kICJ1bnNldF9jbG9ja191bmNlcnRhaW50eSIgJGFyZ3MKK30KKworcHJvYyB1bnNldF9jbGtfdW5jZXJ0YWludHlfY21kIHsgY21kIGNtZF9hcmdzIH0geworICBwYXJzZV9rZXlfYXJncyAkY21kIGNtZF9hcmdzIFwKKyAgICBrZXlzIHstZnJvbSAtcmlzZV9mcm9tIC1mYWxsX2Zyb20gLXRvIC1yaXNlX3RvIC1mYWxsX3RvfSBcCisgICAgZmxhZ3Mgey1yaXNlIC1mYWxsIC1zZXR1cCAtaG9sZH0KKworICBzZXQgbWluX21heCAibWluX21heCIKKyAgaWYgeyBbaW5mbyBleGlzdHMgZmxhZ3MoLXNldHVwKV0gJiYgIVtpbmZvIGV4aXN0cyBmbGFncygtaG9sZCldIH0geworICAgIHNldCBtaW5fbWF4ICJtYXgiCisgIH0KKyAgaWYgeyBbaW5mbyBleGlzdHMgZmxhZ3MoLWhvbGQpXSAmJiAhW2luZm8gZXhpc3RzIGZsYWdzKC1zZXR1cCldIH0geworICAgIHNldCBtaW5fbWF4ICJtaW4iCisgIH0KKworICBpZiB7IFtpbmZvIGV4aXN0cyBrZXlzKC1mcm9tKV0gfSB7CisgICAgc2V0IGZyb21fa2V5ICItZnJvbSIKKyAgICBzZXQgZnJvbV9yZiAicmlzZV9mYWxsIgorICB9IGVsc2VpZiB7IFtpbmZvIGV4aXN0cyBrZXlzKC1yaXNlX2Zyb20pXSB9IHsKKyAgICBzZXQgZnJvbV9rZXkgIi1yaXNlX2Zyb20iCisgICAgc2V0IGZyb21fcmYgInJpc2UiCisgIH0gZWxzZWlmIHsgW2luZm8gZXhpc3RzIGtleXMoLWZhbGxfZnJvbSldIH0geworICAgIHNldCBmcm9tX2tleSAiLWZhbGxfZnJvbSIKKyAgICBzZXQgZnJvbV9yZiAiZmFsbCIKKyAgfSBlbHNlIHsKKyAgICBzZXQgZnJvbV9rZXkgIm5vbmUiCisgIH0KKworICBpZiB7IFtpbmZvIGV4aXN0cyBrZXlzKC10byldIH0geworICAgIHNldCB0b19rZXkgIi10byIKKyAgICBzZXQgdG9fcmYgInJpc2VfZmFsbCIKKyAgfSBlbHNlaWYgeyBbaW5mbyBleGlzdHMga2V5cygtcmlzZV90byldIH0geworICAgIHNldCB0b19rZXkgIi1yaXNlX3RvIgorICAgIHNldCB0b19yZiAicmlzZSIKKyAgfSBlbHNlaWYgeyBbaW5mbyBleGlzdHMga2V5cygtZmFsbF90byldIH0geworICAgIHNldCB0b19rZXkgIi1mYWxsX3RvIgorICAgIHNldCB0b19yZiAiZmFsbCIKKyAgfSBlbHNlIHsKKyAgICBzZXQgdG9fa2V5ICJub25lIgorICB9CisKKyAgaWYgeyAkZnJvbV9rZXkgIT0gIm5vbmUiICYmICR0b19rZXkgPT0gIm5vbmUiIFwKKwkgfHwgJGZyb21fa2V5ID09ICJub25lIiAmJiAkdG9fa2V5ICE9ICJub25lIiB9IHsKKyAgICBzdGFfZXJyb3IgNDU5ICItZnJvbS8tdG8gbXVzdCBiZSB1c2VkIHRvZ2V0aGVyLiIKKyAgfSBlbHNlaWYgeyAkZnJvbV9rZXkgIT0gIm5vbmUiICYmICR0b19rZXkgIT0gIm5vbmUiIH0geworICAgICMgSW50ZXItY2xvY2sgdW5jZXJ0YWludHkuCisgICAgY2hlY2tfYXJnY19lcTAgInVuc2V0X2Nsb2NrX3VuY2VydGFpbnR5IiAkY21kX2FyZ3MKKworICAgICMgLWZyb20vLXRvIGNhbiBiZSBsaXN0cy4KKyAgICBzZXQgZnJvbV9jbGtzIFtnZXRfY2xvY2tzX3dhcm4gImZyb21fY2xvY2tzIiAka2V5cygkZnJvbV9rZXkpXQorICAgIHNldCB0b19jbGtzIFtnZXRfY2xvY2tzX3dhcm4gInRvX2Nsb2NrcyIgJGtleXMoJHRvX2tleSldCisKKyAgICBmb3JlYWNoIGZyb21fY2xrICRmcm9tX2Nsa3MgeworICAgICAgZm9yZWFjaCB0b19jbGsgJHRvX2Nsa3MgeworCXVuc2V0X2ludGVyX2Nsb2NrX3VuY2VydGFpbnR5ICRmcm9tX2NsayAkZnJvbV9yZiBcCisJICAkdG9fY2xrICR0b19yZiAkbWluX21heAorICAgICAgfQorICAgIH0KKyAgfSBlbHNlIHsKKyAgICAjIFNpbmdsZSBjbG9jayB1bmNlcnRhaW50eS4KKyAgICBjaGVja19hcmdjX2VxMSAkY21kICRjbWRfYXJncworICAgIGlmIHsgW2luZm8gZXhpc3RzIGtleXMoLXJpc2UpXSBcCisJICAgfHwgW2luZm8gZXhpc3RzIGtleXMoLWZhbGwpXSB9IHsKKyAgICAgIHN0YV9lcnJvciA0NjAgIi1yaXNlLCAtZmFsbCBvcHRpb25zIG5vdCBhbGxvd2VkIGZvciBzaW5nbGUgY2xvY2sgdW5jZXJ0YWludHkuIgorICAgIH0KKyAgICBzZXQgb2JqZWN0cyBbbGluZGV4ICRjbWRfYXJncyAwXQorICAgIHBhcnNlX2Nsa19wb3J0X3Bpbl9hcmcgJG9iamVjdHMgY2xrcyBwaW5zCisKKyAgICBmb3JlYWNoIGNsayAkY2xrcyB7CisgICAgICB1bnNldF9jbG9ja191bmNlcnRhaW50eV9jbGsgJGNsayAkbWluX21heAorICAgIH0KKyAgICBmb3JlYWNoIHBpbiAkcGlucyB7CisgICAgICB1bnNldF9jbG9ja191bmNlcnRhaW50eV9waW4gJHBpbiAkbWluX21heAorICAgIH0KKyAgfQorfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2RlZmluZV9jbWRfYXJncyAidW5zZXRfZGF0YV9jaGVjayIgXAorICB7Wy1mcm9tIGZyb21fcGluXSBbLXJpc2VfZnJvbSBmcm9tX3Bpbl0gWy1mYWxsX2Zyb20gZnJvbV9waW5dXAorICAgICBbLXRvIHRvX3Bpbl0gWy1yaXNlX3RvIHRvX3Bpbl0gWy1mYWxsX3RvIHRvX3Bpbl1cCisgICAgIFstc2V0dXAgfCAtaG9sZF0gWy1jbG9jayBjbG9ja119CisKK3Byb2MgdW5zZXRfZGF0YV9jaGVjayB7IGFyZ3MgfSB7CisgIHVuc2V0X2RhdGFfY2hlY2tzX2NtZCAidW5zZXRfZGF0YV9jaGVjayIgJGFyZ3MKK30KKworcHJvYyB1bnNldF9kYXRhX2NoZWNrc19jbWQgeyBjbWQgY21kX2FyZ3MgfSB7CisgIHBhcnNlX2tleV9hcmdzIGNtZCBjbWRfYXJncyBcCisgICAga2V5cyB7LWZyb20gLXJpc2VfZnJvbSAtZmFsbF9mcm9tIC10byAtcmlzZV90byAtZmFsbF90byAtY2xvY2t9IFwKKyAgICBmbGFncyB7LXNldHVwIC1ob2xkfQorICBjaGVja19hcmdjX2VxMCAkY21kICRjbWRfYXJncworCisgIHNldCBmcm9tX3JmICJyaXNlX2ZhbGwiCisgIHNldCB0b19yZiAicmlzZV9mYWxsIgorICBzZXQgY2xrICJOVUxMIgorICBzZXQgc2V0dXBfaG9sZCAibWF4IgorICBpZiBbaW5mbyBleGlzdHMga2V5cygtZnJvbSldIHsKKyAgICBzZXQgZnJvbSBbZ2V0X3BvcnRfcGluX2Vycm9yICJmcm9tX3BpbiIgJGtleXMoLWZyb20pXQorICB9IGVsc2VpZiBbaW5mbyBleGlzdHMga2V5cygtcmlzZV9mcm9tKV0geworICAgIHNldCBmcm9tIFtnZXRfcG9ydF9waW5fZXJyb3IgImZyb21fcGluIiAka2V5cygtcmlzZV9mcm9tKV0KKyAgICBzZXQgZnJvbV9yZiAicmlzZSIKKyAgfSBlbHNlaWYgW2luZm8gZXhpc3RzIGtleXMoLWZhbGxfZnJvbSldIHsKKyAgICBzZXQgZnJvbSBbZ2V0X3BvcnRfcGluX2Vycm9yICJmcm9tX3BpbiIgJGtleXMoLWZhbGxfZnJvbSldCisgICAgc2V0IGZyb21fcmYgImZhbGwiCisgIH0gZWxzZSB7CisgICAgc3RhX2Vycm9yIDQ2MSAibWlzc2luZyAtZnJvbSwgLXJpc2VfZnJvbSBvciAtZmFsbF9mcm9tIGFyZ3VtZW50LiIKKyAgfQorCisgIGlmIFtpbmZvIGV4aXN0cyBrZXlzKC10byldIHsKKyAgICBzZXQgdG8gW2dldF9wb3J0X3Bpbl9lcnJvciAidG9fcGluIiAka2V5cygtdG8pXQorICB9IGVsc2VpZiBbaW5mbyBleGlzdHMga2V5cygtcmlzZV90byldIHsKKyAgICBzZXQgdG8gW2dldF9wb3J0X3Bpbl9lcnJvciAidG9fcGluIiAka2V5cygtcmlzZV90byldCisgICAgc2V0IHRvX3JmICJyaXNlIgorICB9IGVsc2VpZiBbaW5mbyBleGlzdHMga2V5cygtZmFsbF90byldIHsKKyAgICBzZXQgdG8gW2dldF9wb3J0X3Bpbl9lcnJvciAidG9fcGluIiAka2V5cygtZmFsbF90byldCisgICAgc2V0IHRvX3JmICJmYWxsIgorICB9IGVsc2UgeworICAgIHN0YV9lcnJvciA0NjIgIm1pc3NpbmcgLXRvLCAtcmlzZV90byBvciAtZmFsbF90byBhcmd1bWVudC4iCisgIH0KKworICBpZiBbaW5mbyBleGlzdHMga2V5cygtY2xvY2spXSB7CisgICAgc2V0IGNsayBbZ2V0X2Nsb2NrX3dhcm4gImNsb2NrIiAka2V5cygtY2xvY2spXQorICB9CisKKyAgaWYgeyBbaW5mbyBleGlzdHMgZmxhZ3MoLXNldHVwKV0gJiYgIVtpbmZvIGV4aXN0cyBmbGFncygtaG9sZCldIH0geworICAgIHNldCBzZXR1cF9ob2xkICJzZXR1cCIKKyAgfSBlbHNlaWYgeyBbaW5mbyBleGlzdHMgZmxhZ3MoLWhvbGQpXSAmJiAhW2luZm8gZXhpc3RzIGZsYWdzKC1zZXR1cCldIH0geworICAgIHNldCBzZXR1cF9ob2xkICJob2xkIgorICB9IGVsc2UgeworICAgIHNldCBzZXR1cF9ob2xkICJzZXR1cF9ob2xkIgorICB9CisKKyAgdW5zZXRfZGF0YV9jaGVja19jbWQgJGZyb20gJGZyb21fcmYgJHRvICR0b19yZiAkY2xrICRzZXR1cF9ob2xkCit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworZGVmaW5lX2NtZF9hcmdzICJ1bnNldF9kaXNhYmxlX2luZmVycmVkX2Nsb2NrX2dhdGluZyIgeyBvYmplY3RzIH0KKworcHJvYyB1bnNldF9kaXNhYmxlX2luZmVycmVkX2Nsb2NrX2dhdGluZyB7IG9iamVjdHMgfSB7CisgIHVuc2V0X2Rpc2FibGVfaW5mZXJyZWRfY2xvY2tfZ2F0aW5nX2NtZCAkb2JqZWN0cworfQorCitwcm9jIHVuc2V0X2Rpc2FibGVfaW5mZXJyZWRfY2xvY2tfZ2F0aW5nX2NtZCB7IG9iamVjdHMgfSB7CisgIHBhcnNlX2luc3RfcG9ydF9waW5fYXJnICRvYmplY3RzIGluc3RzIHBpbnMKKyAgZm9yZWFjaCBpbnN0ICRpbnN0cyB7CisgICAgdW5zZXRfZGlzYWJsZV9jbG9ja19nYXRpbmdfY2hlY2tfaW5zdCAkaW5zdAorICB9CisgIGZvcmVhY2ggcGluICRwaW5zIHsKKyAgICB1bnNldF9kaXNhYmxlX2Nsb2NrX2dhdGluZ19jaGVja19waW4gJHBpbgorICB9Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworZGVmaW5lX2NtZF9hcmdzICJ1bnNldF9kaXNhYmxlX3RpbWluZyIgXAorICB7Wy1mcm9tIGZyb21fcG9ydF0gWy10byB0b19wb3J0XSBvYmplY3RzfQorCitwcm9jIHVuc2V0X2Rpc2FibGVfdGltaW5nIHsgYXJncyB9IHsKKyAgdW5zZXRfZGlzYWJsZV9jbWQgInVuc2V0X2Rpc2FibGVfdGltaW5nIiAkYXJncworfQorCitwcm9jIHVuc2V0X2Rpc2FibGVfY21kIHsgY21kIGNtZF9hcmdzIH0geworICBwYXJzZV9rZXlfYXJncyAkY21kIGNtZF9hcmdzIGtleXMgey1mcm9tIC10b30gZmxhZ3Mge30KKyAgY2hlY2tfYXJnY19lcTEgJGNtZCAkY21kX2FyZ3MKKworICBzZXQgZnJvbSAiIgorICBpZiB7IFtpbmZvIGV4aXN0cyBrZXlzKC1mcm9tKV0gfSB7CisgICAgc2V0IGZyb20gJGtleXMoLWZyb20pCisgIH0KKyAgc2V0IHRvICIiCisgIGlmIHsgW2luZm8gZXhpc3RzIGtleXMoLXRvKV0gfSB7CisgICAgc2V0IHRvICRrZXlzKC10bykKKyAgfQorICBwYXJzZV9saWJjZWxsX2xpYnBvcnRfaW5zdF9wb3J0X3Bpbl9lZGdlX3RpbWluZ19hcmNfc2V0X2FyZyAkY21kX2FyZ3MgXAorICAgIGxpYmNlbGxzIGxpYnBvcnRzIGluc3RzIHBvcnRzIHBpbnMgZWRnZXMgdGltaW5nX2FyY19zZXRzCisKKyAgaWYgeyAoW2luZm8gZXhpc3RzIGtleXMoLWZyb20pXSB8fCBbaW5mbyBleGlzdHMga2V5cygtdG8pXSkgXAorCSAmJiAoJGxpYnBvcnRzICE9IHt9IHx8ICRwaW5zICE9IHt9IHx8ICRwb3J0cyAhPSB7fSkgfSB7CisgICAgc3RhX3dhcm4gMzA0ICItZnJvbS8tdG8ga2V5d29yZHMgaWdub3JlZCBmb3IgbGliX3BpbiwgcG9ydCBhbmQgcGluIGFyZ3VtZW50cy4iCisgIH0KKworICBmb3JlYWNoIGxpYmNlbGwgJGxpYmNlbGxzIHsKKyAgICB1bnNldF9kaXNhYmxlX3RpbWluZ19jZWxsICRsaWJjZWxsICRmcm9tICR0bworICB9CisgIGZvcmVhY2ggbGlicG9ydCAkbGlicG9ydHMgeworICAgIHVuc2V0X2Rpc2FibGVfbGliX3BvcnQgJGxpYnBvcnQKKyAgfQorICBmb3JlYWNoIGluc3QgJGluc3RzIHsKKyAgICB1bnNldF9kaXNhYmxlX3RpbWluZ19pbnN0YW5jZSAkaW5zdCAkZnJvbSAkdG8KKyAgfQorICBmb3JlYWNoIHBpbiAkcGlucyB7CisgICAgdW5zZXRfZGlzYWJsZV9waW4gJHBpbgorICB9CisgIGZvcmVhY2ggcG9ydCAkcG9ydHMgeworICAgIHVuc2V0X2Rpc2FibGVfcG9ydCAkcG9ydAorICB9CisgIGZvcmVhY2ggZWRnZSAkZWRnZXMgeworICAgIHVuc2V0X2Rpc2FibGVfZWRnZSAkZWRnZQorICB9CisgIGZvcmVhY2ggdGltaW5nX2FyY19zZXQgJHRpbWluZ19hcmNfc2V0cyB7CisgICAgdW5zZXRfZGlzYWJsZV90aW1pbmdfYXJjX3NldCAkdGltaW5nX2FyY19zZXQKKyAgfQorfQorCitwcm9jIHVuc2V0X2Rpc2FibGVfdGltaW5nX2NlbGwgeyBjZWxsIGZyb20gdG8gfSB7CisgIHNldCBmcm9tX3BvcnRzIFtwYXJzZV9kaXNhYmxlX2NlbGxfcG9ydHMgJGNlbGwgJGZyb21dCisgIHNldCB0b19wb3J0cyBbcGFyc2VfZGlzYWJsZV9jZWxsX3BvcnRzICRjZWxsICR0b10KKyAgaWYgeyAkZnJvbV9wb3J0cyA9PSAiTlVMTCIgJiYgJHRvX3BvcnRzID09ICJOVUxMIiB9IHsKKyAgICB1bnNldF9kaXNhYmxlX2NlbGwgJGNlbGwgIk5VTEwiICJOVUxMIgorICB9IGVsc2VpZiB7ICRmcm9tX3BvcnRzID09ICJOVUxMIiB9IHsKKyAgICBmb3JlYWNoIHRvX3BvcnQgJHRvX3BvcnRzIHsKKyAgICAgIHVuc2V0X2Rpc2FibGVfY2VsbCAkY2VsbCAiTlVMTCIgJHRvX3BvcnQKKyAgICB9CisgIH0gZWxzZWlmIHsgJHRvX3BvcnRzID09ICJOVUxMIiB9IHsKKyAgICBmb3JlYWNoIGZyb21fcG9ydCAkZnJvbV9wb3J0cyB7CisgICAgICB1bnNldF9kaXNhYmxlX2NlbGwgJGNlbGwgJGZyb21fcG9ydCAiTlVMTCIKKyAgICB9CisgIH0gZWxzZSB7CisgICAgZm9yZWFjaCBmcm9tX3BvcnQgJGZyb21fcG9ydHMgeworICAgICAgZm9yZWFjaCB0b19wb3J0ICR0b19wb3J0cyB7CisJdW5zZXRfZGlzYWJsZV9jZWxsICRjZWxsICRmcm9tX3BvcnQgJHRvX3BvcnQKKyAgICAgIH0KKyAgICB9CisgIH0KK30KKworcHJvYyB1bnNldF9kaXNhYmxlX3RpbWluZ19pbnN0YW5jZSB7IGluc3QgZnJvbSB0byB9IHsKKyAgc2V0IGZyb21fcG9ydHMgW3BhcnNlX2Rpc2FibGVfaW5zdF9wb3J0cyAkaW5zdCAkZnJvbV0KKyAgc2V0IHRvX3BvcnRzIFtwYXJzZV9kaXNhYmxlX2luc3RfcG9ydHMgJGluc3QgJHRvXQorICBpZiB7ICFbJGluc3QgaXNfbGVhZl0gfSB7CisgICAgc3RhX2Vycm9yIDQ2MyAiLWZyb20vLXRvIGhpZXJhcmNoaWNhbCBpbnN0YW5jZSBub3Qgc3VwcG9ydGVkLiIKKyAgfQorICBpZiB7ICRmcm9tX3BvcnRzID09ICJOVUxMIiAmJiAkdG9fcG9ydHMgPT0gIk5VTEwiIH0geworICAgIHVuc2V0X2Rpc2FibGVfaW5zdGFuY2UgJGluc3QgIk5VTEwiICJOVUxMIgorICB9IGVsc2VpZiB7ICRmcm9tX3BvcnRzID09ICJOVUxMIiB9IHsKKyAgICBmb3JlYWNoIHRvX3BvcnQgJHRvX3BvcnRzIHsKKyAgICAgIHVuc2V0X2Rpc2FibGVfaW5zdGFuY2UgJGluc3QgIk5VTEwiICR0b19wb3J0CisgICAgfQorICB9IGVsc2VpZiB7ICR0b19wb3J0cyA9PSAiTlVMTCIgfSB7CisgICAgZm9yZWFjaCBmcm9tX3BvcnQgJGZyb21fcG9ydHMgeworICAgICAgdW5zZXRfZGlzYWJsZV9pbnN0YW5jZSAkaW5zdCAkZnJvbV9wb3J0ICJOVUxMIgorICAgIH0KKyAgfSBlbHNlIHsKKyAgICBmb3JlYWNoIGZyb21fcG9ydCAkZnJvbV9wb3J0cyB7CisgICAgICBmb3JlYWNoIHRvX3BvcnQgJHRvX3BvcnRzIHsKKwl1bnNldF9kaXNhYmxlX2luc3RhbmNlICRpbnN0ICRmcm9tX3BvcnQgJHRvX3BvcnQKKyAgICAgIH0KKyAgICB9CisgIH0KK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitkZWZpbmVfY21kX2FyZ3MgInVuc2V0X2dlbmVyYXRlZF9jbG9jayIge1stYWxsXSBjbG9ja3N9CisKK3Byb2MgdW5zZXRfZ2VuZXJhdGVkX2Nsb2NrIHsgYXJncyB9IHsKKyAgdW5zZXRfZ2Nsa19jbWQgInVuc2V0X2dlbmVyYXRlZF9jbG9jayIgJGFyZ3MKK30KKworcHJvYyByZW1vdmVfZ2Nsa19jbWQgeyBjbWQgY21kX2FyZ3MgfSB7CisgIHBhcnNlX2tleV9hcmdzICRjbWQgY21kX2FyZ3Mga2V5cyB7fSBmbGFncyB7LWFsbH0KKyAgaWYgeyBbaW5mbyBleGlzdHMgZmxhZ3MoLWFsbCldIH0geworICAgIGNoZWNrX2FyZ2NfZXEwICRjbWQgJGNtZF9hcmdzCisgICAgc2V0IGNsa3MgW2FsbF9jbG9ja3NdCisgIH0gZWxzZSB7CisgICAgY2hlY2tfYXJnY19lcTEgJGNtZCAkY21kX2FyZ3MKKyAgICBzZXQgY2xrcyBbZ2V0X2Nsb2Nrc193YXJuICJjbG9ja3MiIFtsaW5kZXggJGNtZF9hcmdzIDBdXQorICB9CisgIGZvcmVhY2ggY2xrICRjbGtzIHsKKyAgICBpZiB7IFskY2xrIGlzX2dlbmVyYXRlZF0gfSB7CisgICAgICByZW1vdmVfY2xvY2tfY21kICRjbGsKKyAgICB9CisgIH0KK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitkZWZpbmVfY21kX2FyZ3MgInVuc2V0X2lucHV0X2RlbGF5IiBcCisgIHtbLXJpc2VdIFstZmFsbF0gWy1tYXhdIFstbWluXVwKKyAgICAgWy1jbG9jayBjbG9ja10gWy1jbG9ja19mYWxsXVwKKyAgICAgcG9ydF9waW5fbGlzdH0KKworcHJvYyB1bnNldF9pbnB1dF9kZWxheSB7IGFyZ3MgfSB7CisgIHVuc2V0X3BvcnRfZGVsYXkgInVuc2V0X2lucHV0X2RlbGF5IiAidW5zZXRfaW5wdXRfZGVsYXlfY21kIiAkYXJncworfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2RlZmluZV9jbWRfYXJncyAidW5zZXRfb3V0cHV0X2RlbGF5IiBcCisgIHtbLXJpc2VdIFstZmFsbF0gWy1tYXhdIFstbWluXVwKKyAgICAgWy1jbG9jayBjbG9ja10gWy1jbG9ja19mYWxsXVwKKyAgICAgcG9ydF9waW5fbGlzdH0KKworcHJvYyB1bnNldF9vdXRwdXRfZGVsYXkgeyBhcmdzIH0geworICB1bnNldF9wb3J0X2RlbGF5ICJ1bnNldF9vdXRwdXRfZGVsYXkiICJ1bnNldF9vdXRwdXRfZGVsYXlfY21kIiAkYXJncworfQorCitwcm9jIHVuc2V0X3BvcnRfZGVsYXkgeyBjbWQgc3dpZ19jbWQgY21kX2FyZ3MgfSB7CisgIHBhcnNlX2tleV9hcmdzICRjbWQgY21kX2FyZ3MgXAorICAgIGtleXMgey1jbG9jayAtcmVmZXJlbmNlX3Bpbn0gXAorICAgIGZsYWdzIHstcmlzZSAtZmFsbCAtbWF4IC1taW4gLWNsb2NrX2ZhbGwgfQorICBjaGVja19hcmdjX2VxMSAkY21kICRjbWRfYXJncworICAKKyAgc2V0IHBpbnMgW2dldF9wb3J0X3BpbnNfZXJyb3IgInBpbnMiIFtsaW5kZXggJGNtZF9hcmdzIDBdXQorICAKKyAgc2V0IGNsayAiTlVMTCIKKyAgaWYgW2luZm8gZXhpc3RzIGtleXMoLWNsb2NrKV0geworICAgIHNldCBjbGsgW2dldF9jbG9ja193YXJuICJjbG9jayIgJGtleXMoLWNsb2NrKV0KKyAgfQorICAKKyAgaWYgW2luZm8gZXhpc3RzIGZsYWdzKC1jbG9ja19mYWxsKV0geworICAgIHNldCBjbGtfcmYgImZhbGwiCisgIH0gZWxzZSB7CisgICAgc2V0IGNsa19yZiAicmlzZSIKKyAgfQorICAKKyAgc2V0IHRyIFtwYXJzZV9yaXNlX2ZhbGxfZmxhZ3MgZmxhZ3NdCisgIHNldCBtaW5fbWF4IFtwYXJzZV9taW5fbWF4X2FsbF9mbGFncyBmbGFnc10KKworICBmb3JlYWNoIHBpbiAkcGlucyB7CisgICAgJHN3aWdfY21kICRwaW4gJHRyICRjbGsgJGNsa19yZiAkbWluX21heAorICB9Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworZGVmaW5lX2NtZF9hcmdzICJ1bnNldF9wYXRoX2V4Y2VwdGlvbnMiIFwKKyAge1stc2V0dXBdIFstaG9sZF0gWy1yaXNlXSBbLWZhbGxdIFstZnJvbSBmcm9tX2xpc3RdXAorICAgICBbLXJpc2VfZnJvbSBmcm9tX2xpc3RdIFstZmFsbF9mcm9tIGZyb21fbGlzdF1cCisgICAgIFstdGhyb3VnaCB0aHJvdWdoX2xpc3RdIFstcmlzZV90aHJvdWdoIHRocm91Z2hfbGlzdF1cCisgICAgIFstZmFsbF90aHJvdWdoIHRocm91Z2hfbGlzdF0gWy10byB0b19saXN0XSBbLXJpc2VfdG8gdG9fbGlzdF1cCisgICAgIFstZmFsbF90byB0b19saXN0XX0KKworcHJvYyB1bnNldF9wYXRoX2V4Y2VwdGlvbnMgeyBhcmdzIH0geworICB1bnNldF9wYXRoX2V4Y2VwdGlvbnNfY21kICJ1bnNldF9wYXRoX2V4Y2VwdGlvbnMiICRhcmdzCit9CisKK3Byb2MgdW5zZXRfcGF0aF9leGNlcHRpb25zX2NtZCB7IGNtZCBjbWRfYXJncyB9IHsKKyAgcGFyc2Vfa2V5X2FyZ3MgJGNtZCBjbWRfYXJncyBcCisgICAga2V5cyB7LWZyb20gLXJpc2VfZnJvbSAtZmFsbF9mcm9tIC10byAtcmlzZV90byAtZmFsbF90b30gXAorICAgIGZsYWdzIHstc2V0dXAgLWhvbGQgLXJpc2UgLWZhbGx9IDAKKworICBzZXQgbWluX21heCAibWluX21heCIKKyAgaWYgeyBbaW5mbyBleGlzdHMgZmxhZ3MoLXNldHVwKV0gJiYgIVtpbmZvIGV4aXN0cyBmbGFncygtaG9sZCldIH0geworICAgIHNldCBtaW5fbWF4ICJtYXgiCisgIH0KKyAgaWYgeyBbaW5mbyBleGlzdHMgZmxhZ3MoLWhvbGQpXSAmJiAhW2luZm8gZXhpc3RzIGZsYWdzKC1zZXR1cCldIH0geworICAgIHNldCBtaW5fbWF4ICJtaW4iCisgIH0KKworICBzZXQgYXJnX2Vycm9yIDAKKyAgc2V0IGZyb20gW3BhcnNlX2Zyb21fYXJnIGtleXMgYXJnX2Vycm9yXQorICBzZXQgdGhydXMgW3BhcnNlX3RocnVzX2FyZyBjbWRfYXJncyBhcmdfZXJyb3JdCisgIHNldCB0byBbcGFyc2VfdG9fYXJnIGtleXMgZmxhZ3MgYXJnX2Vycm9yXQorICBpZiB7ICRhcmdfZXJyb3IgfSB7CisgICAgZGVsZXRlX2Zyb21fdGhydXNfdG8gJGZyb20gJHRocnVzICR0bworICAgIHN0YV9lcnJvciA0NjQgIiRjbWQgY29tbWFuZCBmYWlsZWQuIgorICAgIHJldHVybiAwCisgIH0KKworICBjaGVja19mb3Jfa2V5X2FyZ3MgJGNtZCBjbWRfYXJncworICBpZiB7ICRjbWRfYXJncyAhPSB7fSB9IHsKKyAgICBkZWxldGVfZnJvbV90aHJ1c190byAkZnJvbSAkdGhydXMgJHRvCisgICAgc3RhX2Vycm9yIDQ2NSAicG9zaXRpb25hbCBhcmd1bWVudHMgbm90IHN1cHBvcnRlZC4iCisgIH0KKyAgaWYgeyAoJGZyb20gPT0gIk5VTEwiICYmICR0aHJ1cyA9PSAiIiAmJiAkdG8gPT0gIk5VTEwiKSB9IHsKKyAgICBkZWxldGVfZnJvbV90aHJ1c190byAkZnJvbSAkdGhydXMgJHRvCisgICAgc3RhX2Vycm9yIDQ2NiAiLWZyb20sIC10aHJvdWdoIG9yIC10byByZXF1aXJlZC4iCisgIH0KKworICByZXNldF9wYXRoX2NtZCAkZnJvbSAkdGhydXMgJHRvICRtaW5fbWF4CisgIGRlbGV0ZV9mcm9tX3RocnVzX3RvICRmcm9tICR0aHJ1cyAkdG8KK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitkZWZpbmVfY21kX2FyZ3MgInVuc2V0X3Byb3BhZ2F0ZWRfY2xvY2siIHtvYmplY3RzfQorCitwcm9jIHVuc2V0X3Byb3BhZ2F0ZWRfY2xvY2sgeyBvYmplY3RzIH0geworICBwYXJzZV9jbGtfcG9ydF9waW5fYXJnICRvYmplY3RzIGNsa3MgcGlucworICBmb3JlYWNoIGNsayAkY2xrcyB7CisgICAgdW5zZXRfcHJvcGFnYXRlZF9jbG9ja19jbWQgJGNsaworICB9CisgIGZvcmVhY2ggcGluICRwaW5zIHsKKyAgICB1bnNldF9wcm9wYWdhdGVkX2Nsb2NrX3Bpbl9jbWQgJHBpbgorICB9Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworZGVmaW5lX2NtZF9hcmdzICJ1bnNldF90aW1pbmdfZGVyYXRlIiB7fQorCitwcm9jIHVuc2V0X3RpbWluZ19kZXJhdGUgeyBhcmdzIH0geworICBjaGVja19hcmdjX2VxMCAidW5zZXRfdGltaW5nX2RlcmF0ZSIgJGFyZ3MKKyAgcmVzZXRfdGltaW5nX2RlcmF0ZV9jbWQKK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBOZXR3b3JrIGVkaXRpbmcgY29tbWFuZHMKKyMgIAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitkZWZpbmVfY21kX2FyZ3MgImNvbm5lY3RfcGluIiB7bmV0IHBpbn0KKyMgZGVwcmVjYXRlZCAyLjAuMTYgMDUvMDIvMjAxOQorZGVmaW5lX2NtZF9hcmdzICJjb25uZWN0X3BpbnMiIHtuZXQgcGluc30KKworZGVmaW5lX2NtZF9hcmdzICJkZWxldGVfaW5zdGFuY2UiIHtpbnN0fQorCitkZWZpbmVfY21kX2FyZ3MgImRlbGV0ZV9uZXQiIHtuZXR9CisKK2RlZmluZV9jbWRfYXJncyAiZGlzY29ubmVjdF9waW4iIHtuZXQgLWFsbHxwaW59CisjIGRlcHJlY2F0ZWQgMi4wLjE2IDA1LzAyLzIwMTkKK2RlZmluZV9jbWRfYXJncyAiZGlzY29ubmVjdF9waW5zIiB7bmV0IC1hbGx8cGluc30KKworZGVmaW5lX2NtZF9hcmdzICJtYWtlX2luc3RhbmNlIiB7aW5zdF9wYXRoIGxpYl9jZWxsfQorCitkZWZpbmVfY21kX2FyZ3MgIm1ha2VfbmV0IiB7fQorCitkZWZpbmVfY21kX2FyZ3MgInJlcGxhY2VfY2VsbCIge2luc3RhbmNlIGxpYl9jZWxsfQorZGVmaW5lX2NtZF9hcmdzICJyZXBsYWNlX3RvX3NjYW5fY2VsbCIge2luc3RhbmNlfQorCitkZWZpbmVfY21kX2FyZ3MgImluc2VydF9idWZmZXIiIHtidWZmZXJfbmFtZSBidWZmZXJfY2VsbCBuZXQgbG9hZF9waW5zXAorCQkJCSAgICAgICBidWZmZXJfb3V0X25ldF9uYW1lfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIERlbGF5IGNhbGN1bGF0aW9uIGNvbW1hbmRzCisjICAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworZGVmaW5lX2NtZF9hcmdzICJzZXRfYXNzaWduZWRfZGVsYXkiIFwKKyAgey1jZWxsfC1uZXQgWy1yaXNlXSBbLWZhbGxdIFstY29ybmVyIGNvcm5lcl9uYW1lXSBbLW1pbl0gWy1tYXhdXAorICAgICBbLWZyb20gZnJvbV9waW5zXSBbLXRvIHRvX3BpbnNdIGRlbGF5fQorCisjIENoYW5nZSB0aGUgZGVsYXkgZm9yIHRpbWluZyBhcmNzIGJldHdlZW4gZnJvbV9waW5zIGFuZCB0b19waW5zIG1hdGNoaW5nCisjIG9uIGNlbGwgKGluc3RhbmNlKSBvciBuZXQuCitwcm9jIHNldF9hc3NpZ25lZF9kZWxheSB7IGFyZ3MgfSB7CisgIHNldF9hc3NpZ25lZF9kZWxheV9jbWQgInNldF9hc3NpZ25lZF9kZWxheSIgJGFyZ3MKK30KKworcHJvYyBzZXRfYXNzaWduZWRfZGVsYXlfY21kIHsgY21kIGNtZF9hcmdzIH0geworICBwYXJzZV9rZXlfYXJncyAkY21kIGNtZF9hcmdzIGtleXMgey1jb3JuZXIgLWZyb20gLXRvfSBcCisgICAgZmxhZ3Mgey1jZWxsIC1uZXQgLXJpc2UgLWZhbGwgLW1heCAtbWlufQorICBjaGVja19hcmdjX2VxMSAkY21kICRjbWRfYXJncworICBzZXQgY29ybmVyIFtwYXJzZV9jb3JuZXIga2V5c10KKyAgc2V0IG1pbl9tYXggW3BhcnNlX21pbl9tYXhfYWxsX2NoZWNrX2ZsYWdzIGZsYWdzXQorICBzZXQgdG9fcmYgW3BhcnNlX3Jpc2VfZmFsbF9mbGFncyBmbGFnc10KKworICBpZiBbaW5mbyBleGlzdHMga2V5cygtZnJvbSldIHsKKyAgICBzZXQgZnJvbV9waW5zIFtnZXRfcG9ydF9waW5zX2Vycm9yICJmcm9tX3BpbnMiICRrZXlzKC1mcm9tKV0KKyAgfSBlbHNlIHsKKyAgICBzdGFfZXJyb3IgNDQyICIkY21kIG1pc3NpbmcgLWZyb20gYXJndW1lbnQuIgorICB9CisgIGlmIFtpbmZvIGV4aXN0cyBrZXlzKC10byldIHsKKyAgICBzZXQgdG9fcGlucyBbZ2V0X3BvcnRfcGluc19lcnJvciAidG9fcGlucyIgJGtleXMoLXRvKV0KKyAgfSBlbHNlIHsKKyAgICBzdGFfZXJyb3IgNDQzICIkY21kIG1pc3NpbmcgLXRvIGFyZ3VtZW50LiIKKyAgfQorCisgIHNldCBkZWxheSBbbGluZGV4ICRjbWRfYXJncyAwXQorICBpZiB7IVtzdHJpbmcgaXMgZG91YmxlICRkZWxheV19IHsKKyAgICBzdGFfZXJyb3IgNDQ0ICIkY21kIGRlbGF5IGlzIG5vdCBhIGZsb2F0LiIKKyAgfQorICBzZXQgZGVsYXkgW3RpbWVfdWlfc3RhICRkZWxheV0KKworICBpZiB7W2luZm8gZXhpc3RzIGZsYWdzKC1jZWxsKV0gJiYgW2luZm8gZXhpc3RzIGZsYWdzKC1uZXQpXX0geworICAgIHN0YV9lcnJvciA0NDUgInNldF9hbm5vdGF0ZWRfZGVsYXkgLWNlbGwgYW5kIC1uZXQgb3B0aW9ucyBhcmUgbXV0dWFsbHkgZXhjbHVpdmUuIgorICB9IGVsc2VpZiB7W2luZm8gZXhpc3RzIGZsYWdzKC1jZWxsKV19IHsKKyAgICBpZiB7ICRmcm9tX3BpbnMgIT0ge30gfSB7CisgICAgICBzZXQgaW5zdCBbW2xpbmRleCAkZnJvbV9waW5zIDBdIGluc3RhbmNlXQorICAgICAgZm9yZWFjaCBwaW4gJGZyb21fcGlucyB7CisJaWYge1skcGluIGluc3RhbmNlXSAhPSAkaW5zdH0geworCSAgc3RhX2Vycm9yIDQ0NiAiJGNtZCBwaW4gW2dldF9mdWxsX25hbWUgJHBpbl0gaXMgbm90IGF0dGFjaGVkIHRvIGluc3RhbmNlIFtnZXRfZnVsbF9uYW1lICRpbnN0XS4iCisJfQorICAgICAgfQorICAgICAgZm9yZWFjaCBwaW4gJHRvX3BpbnMgeworCWlmIHtbJHBpbiBpbnN0YW5jZV0gIT0gJGluc3R9IHsKKwkgIHN0YV9lcnJvciA0NDcgIiRjbWQgcGluIFtnZXRfZnVsbF9uYW1lICRwaW5dIGlzIG5vdCBhdHRhY2hlZCB0byBpbnN0YW5jZSBbZ2V0X2Z1bGxfbmFtZSAkaW5zdF0iCisJfQorICAgICAgfQorICAgIH0KKyAgfSBlbHNlaWYgeyFbaW5mbyBleGlzdHMgZmxhZ3MoLW5ldCldfSB7CisgICAgc3RhX2Vycm9yIDQ0OCAiJGNtZCAtY2VsbCBvciAtbmV0IHJlcXVpcmVkLiIKKyAgfQorICBmb3JlYWNoIGZyb21fcGluICRmcm9tX3BpbnMgeworICAgIHNldCBmcm9tX3ZlcnRpY2VzIFskZnJvbV9waW4gdmVydGljZXNdCisgICAgc2V0X2Fzc2lnbmVkX2RlbGF5MSBbbGluZGV4ICRmcm9tX3ZlcnRpY2VzIDBdIFwKKyAgICAgICR0b19waW5zICR0b19yZiAkY29ybmVyICRtaW5fbWF4ICRkZWxheQorICAgIGlmIHsgW2xsZW5ndGggJGZyb21fdmVydGljZXNdID09IDIgfSB7CisgICAgICBzZXRfYXNzaWduZWRfZGVsYXkxIFtsaW5kZXggJGZyb21fdmVydGljZXMgMV0gXAorCSR0b19waW5zICR0b19yZiAkY29ybmVyICRtaW5fbWF4ICRkZWxheQorICAgIH0KKyAgfQorfQorCitwcm9jIHNldF9hc3NpZ25lZF9kZWxheTEgeyBmcm9tX3ZlcnRleCB0b19waW5zIHRvX3JmIGNvcm5lciBtaW5fbWF4IGRlbGF5IH0geworICBmb3JlYWNoIHRvX3BpbiAkdG9fcGlucyB7CisgICAgc2V0IHRvX3ZlcnRpY2VzIFskdG9fcGluIHZlcnRpY2VzXQorICAgIHNldF9hc3NpZ25lZF9kZWxheTIgJGZyb21fdmVydGV4IFtsaW5kZXggJHRvX3ZlcnRpY2VzIDBdIFwKKyAgICAgICR0b19yZiAkY29ybmVyICRtaW5fbWF4ICRkZWxheQorICAgIGlmIHsgW2xsZW5ndGggJHRvX3ZlcnRpY2VzXSA9PSAyIH0geworICAgICAgIyBCaWRpcmVjdCBkcml2ZXIuCisgICAgICBzZXRfYXNzaWduZWRfZGVsYXkyICRmcm9tX3ZlcnRleCBbbGluZGV4ICR0b192ZXJ0aWNlcyAxXSBcCisJJHRvX3JmICRjb3JuZXIgJG1pbl9tYXggJGRlbGF5CisgICAgfQorICB9Cit9CisKK3Byb2Mgc2V0X2Fzc2lnbmVkX2RlbGF5MiB7ZnJvbV92ZXJ0ZXggdG9fdmVydGV4IHRvX3JmIGNvcm5lciBtaW5fbWF4IGRlbGF5fSB7CisgIHNldCBlZGdlX2l0ZXIgWyRmcm9tX3ZlcnRleCBvdXRfZWRnZV9pdGVyYXRvcl0KKyAgd2hpbGUge1skZWRnZV9pdGVyIGhhc19uZXh0XX0geworICAgIHNldCBlZGdlIFskZWRnZV9pdGVyIG5leHRdCisgICAgaWYgeyBbJGVkZ2UgdG9dID09ICR0b192ZXJ0ZXggXAorCSAgICYmICFbdGltaW5nX3JvbGVfaXNfY2hlY2sgWyRlZGdlIHJvbGVdXSB9IHsKKyAgICAgIHNldCBhcmNfaXRlciBbJGVkZ2UgdGltaW5nX2FyY19pdGVyYXRvcl0KKyAgICAgIHdoaWxlIHtbJGFyY19pdGVyIGhhc19uZXh0XX0geworCXNldCBhcmMgWyRhcmNfaXRlciBuZXh0XQorCWlmIHsgJHRvX3JmID09ICJyaXNlX2ZhbGwiIFwKKwkgICAgICAgfHwgJHRvX3JmIGVxIFskYXJjIHRvX3RyYW5zX25hbWVdIH0geworCSAgc2V0X2FyY19kZWxheSAkZWRnZSAkYXJjICRjb3JuZXIgJG1pbl9tYXggJGRlbGF5CisJfQorICAgICAgfQorICAgICAgJGFyY19pdGVyIGZpbmlzaAorICAgIH0KKyAgfQorICAkZWRnZV9pdGVyIGZpbmlzaAorfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2RlZmluZV9jbWRfYXJncyAic2V0X2Fzc2lnbmVkX2NoZWNrIiBcCisgIHstc2V0dXB8LWhvbGR8LXJlY292ZXJ5fC1yZW1vdmFsIFstcmlzZV0gWy1mYWxsXVwKKyAgICAgWy1jb3JuZXIgY29ybmVyX25hbWVdIFstbWluXSBbLW1heF1cCisgICAgIFstZnJvbSBmcm9tX3BpbnNdIFstdG8gdG9fcGluc10gWy1jbG9jayByaXNlfGZhbGxdXAorICAgICBbLWNvbmQgc2RmX2NvbmRdIFstd29yc3RdIGNoZWNrX3ZhbHVlfQorCisjIC13b3JzdCBpcyBpZ25vcmVkLgorcHJvYyBzZXRfYXNzaWduZWRfY2hlY2sgeyBhcmdzIH0geworICBzZXRfYXNzaWduZWRfY2hlY2tfY21kICJzZXRfYXNzaWduZWRfY2hlY2siICRhcmdzCit9CisKKyMgLXdvcnN0IGlzIGlnbm9yZWQuCitwcm9jIHNldF9hc3NpZ25lZF9jaGVja19jbWQgeyBjbWQgY21kX2FyZ3MgfSB7CisgIHBhcnNlX2tleV9hcmdzICRjbWQgY21kX2FyZ3MgXAorICAgIGtleXMgey1mcm9tIC10byAtY29ybmVyIC1jbG9jayAtY29uZH0gXAorICAgIGZsYWdzIHstc2V0dXAgLWhvbGQgLXJlY292ZXJ5IC1yZW1vdmFsIC1yaXNlIC1mYWxsIC1tYXggLW1pbiAtd29yc3R9CisgIGNoZWNrX2FyZ2NfZXExICRjbWQgJGNtZF9hcmdzCisKKyAgaWYgeyBbaW5mbyBleGlzdHMga2V5cygtZnJvbSldIH0geworICAgIHNldCBmcm9tX3BpbnMgW2dldF9wb3J0X3BpbnNfZXJyb3IgImZyb21fcGlucyIgJGtleXMoLWZyb20pXQorICB9IGVsc2UgeworICAgIHN0YV9lcnJvciA0NDkgIiRjbWQgbWlzc2luZyAtZnJvbSBhcmd1bWVudC4iCisgIH0KKyAgc2V0IGZyb21fcmYgInJpc2VfZmFsbCIKKyAgaWYgeyBbaW5mbyBleGlzdHMga2V5cygtY2xvY2spXSB9IHsKKyAgICBzZXQgY2xrX2FyZyAka2V5cygtY2xvY2spCisgICAgaWYgeyAkY2xrX2FyZyBlcSAicmlzZSIgXAorCSAgIHx8ICRjbGtfYXJnIGVxICJmYWxsIiB9IHsKKyAgICAgIHNldCBmcm9tX3JmICRjbGtfYXJnCisgICAgfSBlbHNlIHsKKyAgICAgIHN0YV9lcnJvciA0NTAgIiRjbWQgLWNsb2NrIG11c3QgYmUgcmlzZSBvciBmYWxsLiIKKyAgICB9CisgIH0KKworICBpZiB7IFtpbmZvIGV4aXN0cyBrZXlzKC10byldIH0geworICAgIHNldCB0b19waW5zIFtnZXRfcG9ydF9waW5zX2Vycm9yICJ0b19waW5zIiAka2V5cygtdG8pXQorICB9IGVsc2UgeworICAgIHN0YV9lcnJvciA0NTEgIiRjbWQgbWlzc2luZyAtdG8gYXJndW1lbnQuIgorICB9CisgIHNldCB0b19yZiBbcGFyc2VfcmlzZV9mYWxsX2ZsYWdzIGZsYWdzXQorICBzZXQgY29ybmVyIFtwYXJzZV9jb3JuZXIga2V5c10KKyAgc2V0IG1pbl9tYXggW3BhcnNlX21pbl9tYXhfYWxsX2NoZWNrX2ZsYWdzIGZsYWdzXQorCisgIGlmIHsgW2luZm8gZXhpc3RzIGZsYWdzKC1zZXR1cCldIH0geworICAgIHNldCByb2xlICJzZXR1cCIKKyAgfSBlbHNlaWYgeyBbaW5mbyBleGlzdHMgZmxhZ3MoLWhvbGQpXSB9IHsKKyAgICBzZXQgcm9sZSAiaG9sZCIKKyAgfSBlbHNlaWYgeyBbaW5mbyBleGlzdHMgZmxhZ3MoLXJlY292ZXJ5KV0gfSB7CisgICAgc2V0IHJvbGUgInJlY292ZXJ5IgorICB9IGVsc2VpZiB7IFtpbmZvIGV4aXN0cyBmbGFncygtcmVtb3ZhbCldIH0geworICAgIHNldCByb2xlICJyZW1vdmFsIgorICB9IGVsc2UgeworICAgIHN0YV9lcnJvciA0NTIgIiRjbWQgbWlzc2luZyAtc2V0dXB8LWhvbGR8LXJlY292ZXJ5fC1yZW1vdmFsIGNoZWNrIHR5cGUuLiIKKyAgfQorICBzZXQgY29uZCAiIgorICBpZiB7IFtpbmZvIGV4aXN0cyBrZXkoLWNvbmQpXSB9IHsKKyAgICBzZXQgY29uZCAka2V5KC1jb25kKQorICB9CisgIHNldCBjaGVja192YWx1ZSBbbGluZGV4ICRjbWRfYXJncyAwXQorICBpZiB7ICFbc3RyaW5nIGlzIGRvdWJsZSAkY2hlY2tfdmFsdWVdIH0geworICAgIHN0YV9lcnJvciA0NTMgIiRjbWQgY2hlY2tfdmFsdWUgaXMgbm90IGEgZmxvYXQuIgorICB9CisgIHNldCBjaGVja192YWx1ZSBbdGltZV91aV9zdGEgJGNoZWNrX3ZhbHVlXQorCisgIGZvcmVhY2ggZnJvbV9waW4gJGZyb21fcGlucyB7CisgICAgc2V0IGZyb21fdmVydGljZXMgWyRmcm9tX3BpbiB2ZXJ0aWNlc10KKyAgICBzZXRfYXNzaWduZWRfY2hlY2sxIFtsaW5kZXggJGZyb21fdmVydGljZXMgMF0gJGZyb21fcmYgXAorICAgICAgJHRvX3BpbnMgJHRvX3JmICRyb2xlICRjb3JuZXIgJG1pbl9tYXggJGNvbmQgJGNoZWNrX3ZhbHVlCisgICAgaWYgeyBbbGxlbmd0aCAkZnJvbV92ZXJ0aWNlc10gPT0gMiB9IHsKKyAgICAgIHNldF9hc3NpZ25lZF9jaGVjazEgW2xpbmRleCAkZnJvbV92ZXJ0aWNlcyAxXSAkZnJvbV9yZiBcCisJJHRvX3BpbnMgJHRvX3JmICRyb2xlICRjb3JuZXIgJG1pbl9tYXggJGNvbmQgJGNoZWNrX3ZhbHVlCisgICAgfQorICB9Cit9CisKK3Byb2Mgc2V0X2Fzc2lnbmVkX2NoZWNrMSB7IGZyb21fdmVydGV4IGZyb21fcmYgdG9fcGlucyB0b19yZiBcCisJCQkgICAgIHJvbGUgY29ybmVyIG1pbl9tYXggY29uZCBjaGVja192YWx1ZSB9IHsKKyAgZm9yZWFjaCB0b19waW4gJHRvX3BpbnMgeworICAgIHNldCB0b192ZXJ0aWNlcyBbJHRvX3BpbiB2ZXJ0aWNlc10KKyAgICBzZXRfYXNzaWduZWRfY2hlY2syICRmcm9tX3ZlcnRleCAkZnJvbV9yZiBbbGluZGV4ICR0b192ZXJ0aWNlcyAwXSBcCisgICAgICAkdG9fcmYgJHJvbGUgJGNvcm5lciAkbWluX21heCAkY29uZCAkY2hlY2tfdmFsdWUKKyAgICBpZiB7IFtsbGVuZ3RoICR0b192ZXJ0aWNlc10gPT0gMiB9IHsKKyAgICAgICMgQmlkaXJlY3QgZHJpdmVyLgorICAgICAgc2V0X2Fzc2lnbmVkX2NoZWNrMiAkZnJvbV92ZXJ0ZXggJGZyb21fcmYgXAorCVtsaW5kZXggJHRvX3ZlcnRpY2VzIDFdICR0b19yZiAkcm9sZSAkY29ybmVyICRtaW5fbWF4IFwKKwkkY29uZCAkY2hlY2tfdmFsdWUKKyAgICB9CisgIH0KK30KKworcHJvYyBzZXRfYXNzaWduZWRfY2hlY2syIHsgZnJvbV92ZXJ0ZXggZnJvbV9yZiB0b192ZXJ0ZXggdG9fcmYgXAorCQkJICAgICByb2xlIGNvcm5lciBtaW5fbWF4IGNvbmQgY2hlY2tfdmFsdWUgfSB7CisgIHNldCBlZGdlX2l0ZXIgWyRmcm9tX3ZlcnRleCBvdXRfZWRnZV9pdGVyYXRvcl0KKyAgd2hpbGUge1skZWRnZV9pdGVyIGhhc19uZXh0XX0geworICAgIHNldCBlZGdlIFskZWRnZV9pdGVyIG5leHRdCisgICAgaWYgeyBbJGVkZ2UgdG9dID09ICR0b192ZXJ0ZXggfSB7CisgICAgICBzZXQgYXJjX2l0ZXIgWyRlZGdlIHRpbWluZ19hcmNfaXRlcmF0b3JdCisgICAgICB3aGlsZSB7WyRhcmNfaXRlciBoYXNfbmV4dF19IHsKKwlzZXQgYXJjIFskYXJjX2l0ZXIgbmV4dF0KKwlpZiB7ICgkZnJvbV9yZiBlcSAicmlzZV9mYWxsIiBcCisJCXx8ICRmcm9tX3JmIGVxIFskYXJjIGZyb21fdHJhbnNfbmFtZV0pIFwKKwkgICAgICAgJiYgKCR0b19yZiBlcSAicmlzZV9mYWxsIiBcCisJCSAgICAgfHwgJHRvX3JmIGVxIFskYXJjIHRvX3RyYW5zX25hbWVdKSBcCisJICAgICAgICYmIFskYXJjIHJvbGVdIGVxICRyb2xlIFwKKwkgICAgICAgJiYgKCRjb25kIGVxICIiIHx8IFskYXJjIHNkZl9jb25kXSBlcSAkY29uZCkgfSB7CisJICBzZXRfYXJjX2RlbGF5ICRlZGdlICRhcmMgJGNvcm5lciAkbWluX21heCAkY2hlY2tfdmFsdWUKKwl9CisgICAgICB9CisgICAgICAkYXJjX2l0ZXIgZmluaXNoCisgICAgfQorICB9CisgICRlZGdlX2l0ZXIgZmluaXNoCit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNhCisKK2RlZmluZV9jbWRfYXJncyAic2V0X2Fzc2lnbmVkX3RyYW5zaXRpb24iIFwKKyAge1stcmlzZV0gWy1mYWxsXSBbLWNvcm5lciBjb3JuZXJfbmFtZV0gWy1taW5dIFstbWF4XSBzbGV3IHBpbnN9CisKKyMgQ2hhbmdlIHRoZSBzbGV3IG9uIGEgbGlzdCBvZiBwb3J0cy4KK3Byb2Mgc2V0X2Fzc2lnbmVkX3RyYW5zaXRpb24geyBhcmdzIH0geworICBwYXJzZV9rZXlfYXJncyAic2V0X2Fzc2lnbmVkX3RyYW5zaXRpb24iIGFyZ3Mga2V5cyB7LWNvcm5lcn0gXAorICAgIGZsYWdzIHstcmlzZSAtZmFsbCAtbWF4IC1taW59CisKKyAgc2V0IGNvcm5lciBbcGFyc2VfY29ybmVyIGtleXNdCisgIHNldCBtaW5fbWF4IFtwYXJzZV9taW5fbWF4X2FsbF9jaGVja19mbGFncyBmbGFnc10KKyAgc2V0IHRyIFtwYXJzZV9yaXNlX2ZhbGxfZmxhZ3MgZmxhZ3NdCisgIGNoZWNrX2FyZ2NfZXEyICJzZXRfYXNzaWduZWRfdHJhbnNpdGlvbiIgJGFyZ3MKKworICBzZXQgc2xldyBbbGluZGV4ICRhcmdzIDBdCisgIGlmIHshW3N0cmluZyBpcyBkb3VibGUgJHNsZXddfSB7CisgICAgc3RhX2Vycm9yIDQyOCAic2V0X2Fzc2lnbmVkX3RyYW5zaXRpb24gdHJhbnNpdGlvbiBpcyBub3QgYSBmbG9hdC4iCisgIH0KKyAgc2V0IHNsZXcgW3RpbWVfdWlfc3RhICRzbGV3XQorICBzZXQgcGlucyBbZ2V0X3BvcnRfcGluc19lcnJvciAicGlucyIgW2xpbmRleCAkYXJncyAxXV0KKyAgZm9yZWFjaCBwaW4gJHBpbnMgeworICAgIHNldCB2ZXJ0aWNlcyBbJHBpbiB2ZXJ0aWNlc10KKyAgICBzZXQgdmVydGV4IFtsaW5kZXggJHZlcnRpY2VzIDBdCisgICAgc2V0X2Fubm90YXRlZF9zbGV3ICR2ZXJ0ZXggJGNvcm5lciAkbWluX21heCAkdHIgJHNsZXcKKyAgICBpZiB7IFtsbGVuZ3RoICR2ZXJ0aWNlc10gPT0gMiB9IHsKKyAgICAgICMgQmlkaXJlY3QgZHJpdmVyLgorICAgICAgc2V0IHZlcnRleCBbbGluZGV4ICR2ZXJ0aWNlcyAxXQorICAgICAgc2V0X2Fubm90YXRlZF9zbGV3ICR2ZXJ0ZXggJG1pbl9tYXggJHRyICRzbGV3CisgICAgfQorICB9Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNhCisKKyMgY29tcGF0aWJpbGl0eQorZGVmaW5lX2NtZF9hcmdzICJyZWFkX3BhcmFzaXRpY3MiIFwKKyAge1stbWluXVwKKyAgICAgWy1tYXhdXAorICAgICBbLWVsbW9yZV1cCisgICAgIFstcGF0aCBwYXRoXVwKKyAgICAgWy1pbmNyZW1lbnRdXAorICAgICBbLXBpbl9jYXBfaW5jbHVkZWRdXAorICAgICBbLWtlZXBfY2FwYWNpdGl2ZV9jb3VwbGluZ11cCisgICAgIFstY291cGxpbmdfcmVkdWN0aW9uX2ZhY3RvciBmYWN0b3JdXAorICAgICBbLXJlZHVjZV90byBwaV9lbG1vcmV8cGlfcG9sZV9yZXNpZHVlMl1cCisgICAgIFstZGVsZXRlX2FmdGVyX3JlZHVjZV1cCisgICAgIFstcXVpZXRdXAorICAgICBbLXNhdmVdXAorICAgICBmaWxlbmFtZX0KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyAgCisjIFV0aWxpdHkgY29tbWFuZHMKKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworZGVmaW5lX2NtZF9hcmdzICJkZWxldGVfZnJvbV9saXN0IiB7bGlzdCBvYmpzfQorCitwcm9jIGRlbGV0ZV9mcm9tX2xpc3QgeyBsaXN0IG9iamVjdHMgfSB7CisgIGRlbGV0ZV9vYmplY3RzX2Zyb21fbGlzdF9jbWQgJGxpc3QgJG9iamVjdHMKK30KKworcHJvYyBkZWxldGVfb2JqZWN0c19mcm9tX2xpc3RfY21kIHsgbGlzdCBvYmplY3RzIH0geworICBzZXQgbGlzdDAgW2xpbmRleCAkbGlzdCAwXQorICBzZXQgbGlzdF9pc19vYmplY3QgW2lzX29iamVjdCAkbGlzdDBdCisgIHNldCBsaXN0X3R5cGUgW29iamVjdF90eXBlICRsaXN0MF0KKyAgZm9yZWFjaCBvYmogJG9iamVjdHMgeworICAgICMgSWYgdGhlIGxpc3QgaXMgYSBjb2xsZWN0aW9uIG9mIHRjbCBvYmplY3RzIChyZXR1cm5lZCBieSBnZXRfKiksCisgICAgIyBjb252ZXJ0IHRoZSBvYmogdG8gYmUgcmVtb3ZlZCBmcm9tIGEgbmFtZSB0byBhbiBvYmplY3Qgb2YgdGhlIHNhbWUKKyAgICAjIHR5cGUuCisgICAgaWYgeyRsaXN0X2lzX29iamVjdCAmJiAhW2lzX29iamVjdCAkb2JqXX0geworICAgICAgaWYgeyRsaXN0X3R5cGUgPT0gIkNsb2NrIn0geworCXNldCBvYmogW2ZpbmRfY2xvY2sgJG9ial0KKyAgICAgIH0gZWxzZWlmIHskbGlzdF90eXBlID09ICJQb3J0In0geworCXNldCB0b3BfaW5zdGFuY2UgW3RvcF9pbnN0YW5jZV0KKwlzZXQgdG9wX2NlbGwgWyR0b3BfaW5zdGFuY2UgY2VsbF0KKwlzZXQgb2JqIFskdG9wX2NlbGwgZmluZF9wb3J0ICRvYmpdCisgICAgICB9IGVsc2VpZiB7JGxpc3RfdHlwZSA9PSAiUGluIn0geworCXNldCBvYmogW2ZpbmRfcGluICRvYmpdCisgICAgICB9IGVsc2VpZiB7JGxpc3RfdHlwZSA9PSAiSW5zdGFuY2UifSB7CisJc2V0IG9iaiBbZmluZF9pbnN0YW5jZSAkb2JqXQorICAgICAgfSBlbHNlaWYgeyRsaXN0X3R5cGUgPT0gIk5ldCJ9IHsKKwlzZXQgb2JqIFtmaW5kX25ldCAkb2JqXQorICAgICAgfSBlbHNlaWYgeyRsaXN0X3R5cGUgPT0gIkxpYmVydHlMaWJyYXJ5In0geworCXNldCBvYmogW2ZpbmRfbGliZXJ0eSAkb2JqXQorICAgICAgfSBlbHNlaWYgeyRsaXN0X3R5cGUgPT0gIkxpYmVydHlDZWxsIn0geworCXNldCBvYmogW2ZpbmRfbGliZXJ0eV9jZWxsICRvYmpdCisgICAgICB9IGVsc2VpZiB7JGxpc3RfdHlwZSA9PSAiTGliZXJ0eVBvcnQifSB7CisJc2V0IG9iaiBbZ2V0X2xpYl9waW5zICRvYmpdCisgICAgICB9IGVsc2UgeworCXN0YV9lcnJvciA0MzkgInVuc3VwcG9ydGVkIG9iamVjdCB0eXBlICRsaXN0X3R5cGUuIgorICAgICAgfQorICAgIH0KKyAgICBzZXQgaW5kZXggW2xzZWFyY2ggJGxpc3QgJG9ial0KKyAgICBpZiB7ICRpbmRleCAhPSAtMSB9IHsKKyAgICAgIHNldCBsaXN0IFtscmVwbGFjZSAkbGlzdCAkaW5kZXggJGluZGV4XQorICAgIH0KKyAgfQorICByZXR1cm4gJGxpc3QKK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitkZWZpbmVfY21kX2FyZ3MgImdldF9mYW5pbiIgXAorICB7LXRvIHNpbmtfbGlzdCBbLWZsYXRdIFstb25seV9jZWxsc10gWy1zdGFydHBvaW50c19vbmx5XVwKKyAgICAgWy1sZXZlbHMgbGV2ZWxfY291bnRdIFstcGluX2xldmVscyBwaW5fY291bnRdXAorICAgICBbLXRyYWNlX2FyY3MgdGltaW5nfGVuYWJsZWR8YWxsXX0KKworcHJvYyBnZXRfZmFuaW4geyBhcmdzIH0geworICBwYXJzZV9rZXlfYXJncyAiZ2V0X2ZhbmluIiBhcmdzIFwKKyAgICBrZXlzIHstdG8gLWxldmVscyAtcGluX2xldmVscyAtdHJhY2VfYXJjc30gXAorICAgIGZsYWdzIHstZmxhdCAtb25seV9jZWxscyAtc3RhcnRwb2ludHNfb25seX0KKyAgaWYgeyBbbGxlbmd0aCAkYXJnc10gIT0gMCB9IHsKKyAgICBjbWRfdXNhZ2VfZXJyb3IgImdldF9mYW5pbiIKKyAgfQorICBpZiB7ICFbaW5mbyBleGlzdHMga2V5cygtdG8pXSB9IHsKKyAgICBjbWRfdXNhZ2VfZXJyb3IgImdldF9mYW5pbiIKKyAgfQorICBwYXJzZV9wb3J0X3Bpbl9uZXRfYXJnICRrZXlzKC10bykgcGlucyBuZXRzCisgIGZvcmVhY2ggbmV0ICRuZXRzIHsKKyAgICBsYXBwZW5kIHBpbnMgW25ldF9kcml2ZXJfcGlucyAkbmV0XQorICB9CisgIHNldCBmbGF0IFtpbmZvIGV4aXN0cyBmbGFncygtZmxhdCldCisgIHNldCBvbmx5X2luc3RzIFtpbmZvIGV4aXN0cyBmbGFncygtb25seV9jZWxscyldCisgIHNldCBzdGFydHBvaW50c19vbmx5IFtpbmZvIGV4aXN0cyBmbGFncygtc3RhcnRwb2ludHNfb25seSldCisgIHNldCBpbnN0X2xldmVscyAwCisgIGlmIHsgW2luZm8gZXhpc3RzIGtleXMoLWxldmVscyldIH0geworICAgIHNldCBpbnN0X2xldmVscyAka2V5cygtbGV2ZWxzKQorICB9CisgIHNldCBwaW5fbGV2ZWxzIDAKKyAgaWYgeyBbaW5mbyBleGlzdHMga2V5cygtcGluX2xldmVscyldIH0geworICAgIHNldCBwaW5fbGV2ZWxzICRrZXlzKC1waW5fbGV2ZWxzKQorICB9CisKKyAgc2V0IHRocnVfZGlzYWJsZWQgMAorICBzZXQgdGhydV9jb25zdGFudHMgMAorICBpZiB7IFtpbmZvIGV4aXN0cyBrZXlzKC10cmFjZV9hcmNzKV0gfSB7CisgICAgc2V0IHRyYWNlX2FyY3MgJGtleXMoLXRyYWNlX2FyY3MpCisgICAgaWYgeyAkdHJhY2VfYXJjcyA9PSAidGltaW5nIiB9IHsKKyAgICAgIHNldCB0aHJ1X2Rpc2FibGVkIDAKKyAgICAgIHNldCB0aHJ1X2NvbnN0YW50cyAwCisgICAgfSBlbHNlaWYgeyAkdHJhY2VfYXJjcyA9PSAiZW5hYmxlZCIgfSB7CisgICAgICBzZXQgdGhydV9kaXNhYmxlZCAwCisgICAgICBzZXQgdGhydV9jb25zdGFudHMgMAorICAgIH0gZWxzZWlmIHsgJHRyYWNlX2FyY3MgPT0gImFsbCIgfSB7CisgICAgICBzZXQgdGhydV9kaXNhYmxlZCAxCisgICAgICBzZXQgdGhydV9jb25zdGFudHMgMQorICAgIH0gZWxzZSB7CisgICAgICBjbWRfdXNhZ2VfZXJyb3IgImdldF9mYW5pbiIKKyAgICB9CisgIH0KKyAgaWYgeyAkb25seV9pbnN0cyB9IHsKKyAgICByZXR1cm4gW2ZpbmRfZmFuaW5faW5zdHMgJHBpbnMgJGZsYXQgJHN0YXJ0cG9pbnRzX29ubHkgXAorCSAgICAgICRpbnN0X2xldmVscyAkcGluX2xldmVscyAkdGhydV9kaXNhYmxlZCAkdGhydV9jb25zdGFudHNdCisgfSBlbHNlIHsKKyAgICByZXR1cm4gW2ZpbmRfZmFuaW5fcGlucyAkcGlucyAkZmxhdCAkc3RhcnRwb2ludHNfb25seSBcCisJICAgICAgJGluc3RfbGV2ZWxzICRwaW5fbGV2ZWxzICR0aHJ1X2Rpc2FibGVkICR0aHJ1X2NvbnN0YW50c10KKyAgfQorfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2RlZmluZV9jbWRfYXJncyAiZ2V0X2Zhbm91dCIgXAorICB7LWZyb20gc291cmNlX2xpc3QgWy1mbGF0XSBbLW9ubHlfY2VsbHNdIFstZW5kcG9pbnRzX29ubHldXAorICAgICBbLWxldmVscyBsZXZlbF9jb3VudF0gWy1waW5fbGV2ZWxzIHBpbl9jb3VudF1cCisgICAgIFstdHJhY2VfYXJjcyB0aW1pbmd8ZW5hYmxlZHxhbGxdfQorCitwcm9jIGdldF9mYW5vdXQgeyBhcmdzIH0geworICBwYXJzZV9rZXlfYXJncyAiZ2V0X2Zhbm91dCIgYXJncyBcCisgICAga2V5cyB7LWZyb20gLWxldmVscyAtcGluX2xldmVscyAtdHJhY2VfYXJjc30gXAorICAgIGZsYWdzIHstZmxhdCAtb25seV9jZWxscyAtZW5kcG9pbnRzX29ubHl9CisgIGlmIHsgW2xsZW5ndGggJGFyZ3NdICE9IDAgfSB7CisgICAgY21kX3VzYWdlX2Vycm9yICJnZXRfZmFub3V0IgorICB9CisgIHBhcnNlX3BvcnRfcGluX25ldF9hcmcgJGtleXMoLWZyb20pIHBpbnMgbmV0cworICBmb3JlYWNoIG5ldCAkbmV0cyB7CisgICAgbGFwcGVuZCBwaW5zIFtuZXRfbG9hZF9waW5zICRuZXRdCisgIH0KKyAgc2V0IGZsYXQgW2luZm8gZXhpc3RzIGZsYWdzKC1mbGF0KV0KKyAgc2V0IG9ubHlfaW5zdHMgW2luZm8gZXhpc3RzIGZsYWdzKC1vbmx5X2NlbGxzKV0KKyAgc2V0IGVuZHBvaW50c19vbmx5IFtpbmZvIGV4aXN0cyBmbGFncygtZW5kcG9pbnRzX29ubHkpXQorCisgIHNldCBpbnN0X2xldmVscyAwCisgIGlmIHsgW2luZm8gZXhpc3RzIGtleXMoLWxldmVscyldIH0geworICAgIHNldCBpbnN0X2xldmVscyAka2V5cygtbGV2ZWxzKQorICB9CisKKyAgc2V0IHBpbl9sZXZlbHMgMAorICBpZiB7IFtpbmZvIGV4aXN0cyBrZXlzKC1waW5fbGV2ZWxzKV0gfSB7CisgICAgc2V0IHBpbl9sZXZlbHMgJGtleXMoLXBpbl9sZXZlbHMpCisgIH0KKworICBzZXQgdGhydV9kaXNhYmxlZCAwCisgIHNldCB0aHJ1X2NvbnN0YW50cyAwCisgIGlmIHsgW2luZm8gZXhpc3RzIGtleXMoLXRyYWNlX2FyY3MpXSB9IHsKKyAgICBzZXQgdHJhY2VfYXJjcyAka2V5cygtdHJhY2VfYXJjcykKKyAgICBpZiB7ICR0cmFjZV9hcmNzID09ICJ0aW1pbmciIH0geworICAgICAgc2V0IHRocnVfZGlzYWJsZWQgMAorICAgICAgc2V0IHRocnVfY29uc3RhbnRzIDAKKyAgICB9IGVsc2VpZiB7ICR0cmFjZV9hcmNzID09ICJlbmFibGVkIiB9IHsKKyAgICAgIHNldCB0aHJ1X2Rpc2FibGVkIDAKKyAgICAgIHNldCB0aHJ1X2NvbnN0YW50cyAwCisgICAgfSBlbHNlaWYgeyAkdHJhY2VfYXJjcyA9PSAiYWxsIiB9IHsKKyAgICAgIHNldCB0aHJ1X2Rpc2FibGVkIDEKKyAgICAgIHNldCB0aHJ1X2NvbnN0YW50cyAxCisgICAgfSBlbHNlIHsKKyAgICAgIGNtZF91c2FnZV9lcnJvciAiZ2V0X2Zhbm91dCIKKyAgICB9CisgIH0KKyAgaWYgeyAkb25seV9pbnN0cyB9IHsKKyAgICByZXR1cm4gW2ZpbmRfZmFub3V0X2luc3RzICRwaW5zICRmbGF0ICRlbmRwb2ludHNfb25seSBcCisJICAgICAgJGluc3RfbGV2ZWxzICRwaW5fbGV2ZWxzICR0aHJ1X2Rpc2FibGVkICR0aHJ1X2NvbnN0YW50c10KKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gW2ZpbmRfZmFub3V0X3BpbnMgJHBpbnMgJGZsYXQgJGVuZHBvaW50c19vbmx5IFwKKwkgICAgICAkaW5zdF9sZXZlbHMgJHBpbl9sZXZlbHMgJHRocnVfZGlzYWJsZWQgJHRocnVfY29uc3RhbnRzXQorICB9Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworZGVmaW5lX2NtZF9hcmdzICJnZXRfbmFtZSIge29iamVjdHN9CitkZWZpbmVfY21kX2FyZ3MgImdldF9mdWxsX25hbWUiIHtvYmplY3RzfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2RlZmluZV9jbWRfYXJncyAiZ2V0X3Byb3BlcnR5IiBcCisgIHtbLW9iamVjdF90eXBlIGNlbGx8cGlufG5ldHxwb3J0fGNsb2NrfHRpbWluZ19hcmNdIG9iamVjdCBwcm9wZXJ0eX0KKworcHJvYyBnZXRfcHJvcGVydHkgeyBhcmdzIH0geworICByZXR1cm4gW2dldF9wcm9wZXJ0eV9jbWQgImdldF9wcm9wZXJ0eSIgIi1vYmplY3RfdHlwZSIgJGFyZ3NdCit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworcHJvYyBnZXRfcHJvcGVydHlfY21kIHsgY21kIHR5cGVfa2V5IGNtZF9hcmdzIH0geworICBwYXJzZV9rZXlfYXJncyAkY21kIGNtZF9hcmdzIGtleXMgJHR5cGVfa2V5IGZsYWdzIHstcXVpZXR9CisgIHNldCBxdWlldCBbaW5mbyBleGlzdHMgZmxhZ3MoLXF1aWV0KV0KKyAgY2hlY2tfYXJnY19lcTIgJGNtZCAkY21kX2FyZ3MKKyAgc2V0IG9iamVjdCBbbGluZGV4ICRjbWRfYXJncyAwXQorICBpZiB7ICRvYmplY3QgPT0gIiIgfSB7CisgICAgc3RhX2Vycm9yIDQ5MSAiJGNtZCBvYmplY3QgaXMgbnVsbC4iCisgIH0gZWxzZWlmIHsgIVtpc19vYmplY3QgJG9iamVjdF0gfSB7CisgICAgaWYgW2luZm8gZXhpc3RzIGtleXMoJHR5cGVfa2V5KV0geworICAgICAgc2V0IG9iamVjdF90eXBlICRrZXlzKCR0eXBlX2tleSkKKyAgICB9IGVsc2UgeworICAgICAgc3RhX2Vycm9yIDQ5MiAiJGNtZCAkdHlwZV9rZXkgbXVzdCBiZSBzcGVjaWZpZWQgd2l0aCBvYmplY3QgbmFtZSBhcmd1bWVudC4iCisgICAgfQorICAgIHNldCBvYmplY3QgW2dldF9wcm9wZXJ0eV9vYmplY3RfdHlwZSAkb2JqZWN0X3R5cGUgJG9iamVjdCAkcXVpZXRdCisgIH0KKyAgc2V0IHByb3AgW2xpbmRleCAkY21kX2FyZ3MgMV0KKyAgcmV0dXJuIFtnZXRfb2JqZWN0X3Byb3BlcnR5ICRvYmplY3QgJHByb3BdCit9CisKK3Byb2MgZ2V0X29iamVjdF9wcm9wZXJ0eSB7IG9iamVjdCBwcm9wIH0geworICBpZiB7IFtpc19vYmplY3QgJG9iamVjdF0gfSB7CisgICAgc2V0IG9iamVjdF90eXBlIFtvYmplY3RfdHlwZSAkb2JqZWN0XQorICAgIGlmIHsgJG9iamVjdF90eXBlID09ICJJbnN0YW5jZSIgfSB7CisgICAgICByZXR1cm4gW2luc3RhbmNlX3Byb3BlcnR5ICRvYmplY3QgJHByb3BdCisgICAgfSBlbHNlaWYgeyAkb2JqZWN0X3R5cGUgPT0gIlBpbiIgfSB7CisgICAgICByZXR1cm4gW3Bpbl9wcm9wZXJ0eSAkb2JqZWN0ICRwcm9wXQorICAgIH0gZWxzZWlmIHsgJG9iamVjdF90eXBlID09ICJOZXQiIH0geworICAgICAgcmV0dXJuIFtuZXRfcHJvcGVydHkgJG9iamVjdCAkcHJvcF0KKyAgICB9IGVsc2VpZiB7ICRvYmplY3RfdHlwZSA9PSAiQ2xvY2siIH0geworICAgICAgcmV0dXJuIFtjbG9ja19wcm9wZXJ0eSAkb2JqZWN0ICRwcm9wXQorICAgIH0gZWxzZWlmIHsgJG9iamVjdF90eXBlID09ICJQb3J0IiB9IHsKKyAgICAgIHJldHVybiBbcG9ydF9wcm9wZXJ0eSAkb2JqZWN0ICRwcm9wXQorICAgIH0gZWxzZWlmIHsgJG9iamVjdF90eXBlID09ICJMaWJlcnR5UG9ydCIgfSB7CisgICAgICByZXR1cm4gW2xpYmVydHlfcG9ydF9wcm9wZXJ0eSAkb2JqZWN0ICRwcm9wXQorICAgIH0gZWxzZWlmIHsgJG9iamVjdF90eXBlID09ICJMaWJlcnR5Q2VsbCIgfSB7CisgICAgICByZXR1cm4gW2xpYmVydHlfY2VsbF9wcm9wZXJ0eSAkb2JqZWN0ICRwcm9wXQorICAgIH0gZWxzZWlmIHsgJG9iamVjdF90eXBlID09ICJDZWxsIiB9IHsKKyAgICAgIHJldHVybiBbY2VsbF9wcm9wZXJ0eSAkb2JqZWN0ICRwcm9wXQorICAgIH0gZWxzZWlmIHsgJG9iamVjdF90eXBlID09ICJMaWJyYXJ5IiB9IHsKKyAgICAgIHJldHVybiBbbGlicmFyeV9wcm9wZXJ0eSAkb2JqZWN0ICRwcm9wXQorICAgIH0gZWxzZWlmIHsgJG9iamVjdF90eXBlID09ICJMaWJlcnR5TGlicmFyeSIgfSB7CisgICAgICByZXR1cm4gW2xpYmVydHlfbGlicmFyeV9wcm9wZXJ0eSAkb2JqZWN0ICRwcm9wXQorICAgIH0gZWxzZWlmIHsgJG9iamVjdF90eXBlID09ICJFZGdlIiB9IHsKKyAgICAgIHJldHVybiBbZWRnZV9wcm9wZXJ0eSAkb2JqZWN0ICRwcm9wXQorICAgIH0gZWxzZWlmIHsgJG9iamVjdF90eXBlID09ICJQYXRoRW5kIiB9IHsKKyAgICAgIHJldHVybiBbcGF0aF9lbmRfcHJvcGVydHkgJG9iamVjdCAkcHJvcF0KKyAgICB9IGVsc2VpZiB7ICRvYmplY3RfdHlwZSA9PSAiUGF0aFJlZiIgfSB7CisgICAgICByZXR1cm4gW3BhdGhfcmVmX3Byb3BlcnR5ICRvYmplY3QgJHByb3BdCisgICAgfSBlbHNlaWYgeyAkb2JqZWN0X3R5cGUgPT0gIlRpbWluZ0FyY1NldCIgfSB7CisgICAgICByZXR1cm4gW3RpbWluZ19hcmNfc2V0X3Byb3BlcnR5ICRvYmplY3QgJHByb3BdCisgICAgfSBlbHNlIHsKKyAgICAgIHN0YV9lcnJvciA2MDYgImdldF9wcm9wZXJ0eSB1bnN1cHBvcnRlZCBvYmplY3QgdHlwZSAkb2JqZWN0X3R5cGUuIgorICAgIH0KKyAgfSBlbHNlIHsKKyAgICBzdGFfZXJyb3IgNDkzICJnZXRfcHJvcGVydHkgJG9iamVjdCBpcyBub3QgYW4gb2JqZWN0LiIKKyAgfQorfQorCitwcm9jIGdldF9wcm9wZXJ0eV9vYmplY3RfdHlwZSB7IG9iamVjdF90eXBlIG9iamVjdF9uYW1lIHF1aWV0IH0geworICBzZXQgb2JqZWN0ICJOVUxMIgorICBpZiB7ICRvYmplY3RfdHlwZSA9PSAiY2VsbCIgfSB7CisgICAgc2V0IG9iamVjdCBbZ2V0X2NlbGxzIC1xdWlldCAkb2JqZWN0X25hbWVdCisgIH0gZWxzZWlmIHsgJG9iamVjdF90eXBlID09ICJwaW4iIH0geworICAgIHNldCBvYmplY3QgW2dldF9waW5zIC1xdWlldCAkb2JqZWN0X25hbWVdCisgIH0gZWxzZWlmIHsgJG9iamVjdF90eXBlID09ICJuZXQiIH0geworICAgIHNldCBvYmplY3QgW2dldF9uZXRzIC1xdWlldCAkb2JqZWN0X25hbWVdCisgIH0gZWxzZWlmIHsgJG9iamVjdF90eXBlID09ICJwb3J0IiB9IHsKKyAgICBzZXQgb2JqZWN0IFtnZXRfcG9ydHMgLXF1aWV0ICRvYmplY3RfbmFtZV0KKyAgfSBlbHNlaWYgeyAkb2JqZWN0X3R5cGUgPT0gImNsb2NrIiB9IHsKKyAgICBzZXQgb2JqZWN0IFtnZXRfY2xvY2tzIC1xdWlldCAkb2JqZWN0X25hbWVdCisgIH0gZWxzZWlmIHsgJG9iamVjdF90eXBlID09ICJsaWJfY2VsbCIgfSB7CisgICAgc2V0IG9iamVjdCBbZ2V0X2xpYl9jZWxscyAtcXVpZXQgJG9iamVjdF9uYW1lXQorICB9IGVsc2VpZiB7ICRvYmplY3RfdHlwZSA9PSAibGliX3BpbiIgfSB7CisgICAgc2V0IG9iamVjdCBbZ2V0X2xpYl9waW5zIC1xdWlldCAkb2JqZWN0X25hbWVdCisgIH0gZWxzZWlmIHsgJG9iamVjdF90eXBlID09ICJsaWIiIH0geworICAgIHNldCBvYmplY3QgW2dldF9saWJzIC1xdWlldCAkb2JqZWN0X25hbWVdCisgIH0gZWxzZSB7CisgICAgc3RhX2Vycm9yIDQ5NCAiJG9iamVjdF90eXBlIG5vdCBzdXBwb3J0ZWQuIgorICB9CisgIGlmIHsgJG9iamVjdCA9PSAiTlVMTCIgJiYgISRxdWlldCB9IHsKKyAgICBzdGFfZXJyb3IgNDk1ICIkb2JqZWN0X3R5cGUgJyRvYmplY3RfbmFtZScgbm90IGZvdW5kLiIKKyAgfQorICByZXR1cm4gW2xpbmRleCAkb2JqZWN0IDBdCit9CisKK3Byb2MgZ2V0X29iamVjdF90eXBlIHsgb2JqIH0geworICBzZXQgb2JqZWN0X3R5cGUgW29iamVjdF90eXBlICRvYmpdCisgIGlmIHsgJG9iamVjdF90eXBlID09ICJDbG9jayIgfSB7CisgICAgcmV0dXJuICJjbG9jayIKKyAgfSBlbHNlaWYgeyAkb2JqZWN0X3R5cGUgPT0gIkxpYmVydHlDZWxsIiB9IHsKKyAgICByZXR1cm4gImxpYmNlbGwiCisgIH0gZWxzZWlmIHsgJG9iamVjdF90eXBlID09ICJMaWJlcnR5UG9ydCIgfSB7CisgICAgcmV0dXJuICJsaWJwaW4iCisgIH0gZWxzZWlmIHsgJG9iamVjdF90eXBlID09ICJDZWxsIiB9IHsKKyAgICByZXR1cm4gImRlc2lnbiIKKyAgfSBlbHNlaWYgeyAkb2JqZWN0X3R5cGUgPT0gIkluc3RhbmNlIiB9IHsKKyAgICByZXR1cm4gImNlbGwiCisgIH0gZWxzZWlmIHsgJG9iamVjdF90eXBlID09ICJQb3J0IiB9IHsKKyAgICByZXR1cm4gInBvcnQiCisgIH0gZWxzZWlmIHsgJG9iamVjdF90eXBlID09ICJQaW4iIH0geworICAgIHJldHVybiAicGluIgorICB9IGVsc2VpZiB7ICRvYmplY3RfdHlwZSA9PSAiTmV0IiB9IHsKKyAgICByZXR1cm4gIm5ldCIKKyAgfSBlbHNlaWYgeyAkb2JqZWN0X3R5cGUgPT0gIkVkZ2UiIH0geworICAgIHJldHVybiAidGltaW5nX2FyYyIKKyAgfSBlbHNlaWYgeyAkb2JqZWN0X3R5cGUgPT0gIlRpbWluZ0FyY1NldCIgfSB7CisgICAgcmV0dXJuICJ0aW1pbmdfYXJjIgorICB9IGVsc2UgeworICAgIHJldHVybiAiPyIKKyAgfQorfQorCitwcm9jIGdldF9uYW1lIHsgb2JqZWN0IH0geworICByZXR1cm4gW2dldF9vYmplY3RfcHJvcGVydHkgJG9iamVjdCAibmFtZSJdCit9CisKK3Byb2MgZ2V0X2Z1bGxfbmFtZSB7IG9iamVjdCB9IHsKKyAgcmV0dXJuIFtnZXRfb2JqZWN0X3Byb3BlcnR5ICRvYmplY3QgImZ1bGxfbmFtZSJdCit9CisKK3Byb2Mgc29ydF9ieV9uYW1lIHsgb2JqZWN0cyB9IHsKKyAgcmV0dXJuIFtsc29ydCAtY29tbWFuZCBuYW1lX2NtcCAkb2JqZWN0c10KK30KKworcHJvYyBuYW1lX2NtcCB7IG9iajEgb2JqMiB9IHsKKyAgcmV0dXJuIFtzdHJpbmcgY29tcGFyZSBbZ2V0X25hbWUgJG9iajFdIFtnZXRfbmFtZSAkb2JqMl1dCit9CisKK3Byb2Mgc29ydF9ieV9mdWxsX25hbWUgeyBvYmplY3RzIH0geworICByZXR1cm4gW2xzb3J0IC1jb21tYW5kIGZ1bGxfbmFtZV9jbXAgJG9iamVjdHNdCit9CisKK3Byb2MgZnVsbF9uYW1lX2NtcCB7IG9iajEgb2JqMiB9IHsKKyAgcmV0dXJuIFtzdHJpbmcgY29tcGFyZSBbZ2V0X2Z1bGxfbmFtZSAkb2JqMV0gW2dldF9mdWxsX25hbWUgJG9iajJdXQorfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2RlZmluZV9jbWRfYXJncyAiZ2V0X3RpbWluZ19lZGdlcyIgXAorICB7Wy1mcm9tIGZyb21fcGluXSBbLXRvIHRvX3Bpbl0gWy1vZl9vYmplY3RzIG9iamVjdHNdIFstZmlsdGVyIGV4cHJdfQorCitwcm9jIGdldF90aW1pbmdfZWRnZXMgeyBhcmdzIH0geworICByZXR1cm4gW2dldF90aW1pbmdfZWRnZXNfY21kICJnZXRfdGltaW5nX2VkZ2VzIiAkYXJnc10KK30KKworcHJvYyBnZXRfdGltaW5nX2VkZ2VzX2NtZCB7IGNtZCBjbWRfYXJncyB9IHsKKyAgcGFyc2Vfa2V5X2FyZ3MgJGNtZCBjbWRfYXJncyBcCisgICAga2V5cyB7LWZyb20gLXRvIC1vZl9vYmplY3RzIC1maWx0ZXJ9IGZsYWdzIHt9CisgIGNoZWNrX2FyZ2NfZXEwICRjbWQgJGNtZF9hcmdzCisKKyAgc2V0IGFyY3Mge30KKyAgaWYgeyBbaW5mbyBleGlzdHMga2V5cygtb2Zfb2JqZWN0cyldIH0geworICAgIGlmIHsgW2luZm8gZXhpc3RzIGtleXMoLWZyb20pXSBcCisJICAgfHwgW2luZm8gZXhpc3RzIGtleXMoLWZyb20pXSB9IHsKKyAgICAgIHN0YV9lcnJvciA0NDAgIi1mcm9tLy10byBhcmd1bWVudHMgbm90IHN1cHBvcnRlZCB3aXRoIC1vZl9vYmplY3RzLiIKKyAgICB9CisgICAgc2V0IGFyY3MgW2dldF90aW1pbmdfYXJjc19vYmplY3RzICRrZXlzKC1vZl9vYmplY3RzKV0KKyAgfSBlbHNlaWYgeyBbaW5mbyBleGlzdHMga2V5cygtZnJvbSldIFwKKwkgICAmJiBbaW5mbyBleGlzdHMga2V5cygtdG8pXSB9IHsKKyAgICBzZXQgYXJjcyBbZ2V0X3RpbWluZ19hcmNzX2Zyb21fdG8gXAorCSAgICAgIFtnZXRfcG9ydF9waW5fZXJyb3IgImZyb20iICRrZXlzKC1mcm9tKV0gXAorCSAgICAgIFtnZXRfcG9ydF9waW5fZXJyb3IgInRvIiAka2V5cygtdG8pXV0KKyAgfSBlbHNlaWYgeyBbaW5mbyBleGlzdHMga2V5cygtZnJvbSldIH0geworICAgIHNldCBhcmNzIFtnZXRfdGltaW5nX2FyY3NfZnJvbSAka2V5cygtZnJvbSldCisgIH0gZWxzZWlmIHsgW2luZm8gZXhpc3RzIGtleXMoLXRvKV0gfSB7CisgICAgc2V0IGFyY3MgW2dldF90aW1pbmdfYXJjc190byAka2V5cygtdG8pXQorICB9IGVsc2UgeworICAgIGNtZF91c2FnZV9lcnJvciAkY21kCisgIH0KKyAgaWYgW2luZm8gZXhpc3RzIGtleXMoLWZpbHRlcildIHsKKyAgICBzZXQgYXJjcyBbZmlsdGVyX3RpbWluZ19hcmNzMSAka2V5cygtZmlsdGVyKSAkYXJjc10KKyAgfQorICByZXR1cm4gJGFyY3MKK30KKworcHJvYyBnZXRfdGltaW5nX2FyY3Nfb2JqZWN0cyB7IG9iamVjdF9hcmcgfSB7CisgIHBhcnNlX2xpYmNlbGxfaW5zdF9hcmcgJG9iamVjdF9hcmcgbGliY2VsbHMgaW5zdHMKKyAgaWYgeyAkaW5zdHMgIT0ge30gfSB7CisgICAgc2V0IGVkZ2VzIHt9CisgICAgZm9yZWFjaCBpbnN0ICRpbnN0cyB7CisgICAgICBsYXBwZW5kIGVkZ2VzIFtpbnN0YW5jZV9lZGdlcyAkaW5zdF0KKyAgICB9CisgICAgcmV0dXJuICRlZGdlcworICB9IGVsc2VpZiB7ICRsaWJjZWxscyAhPSB7fSB9IHsKKyAgICBzZXQgYXJjX3NldHMge30KKyAgICBmb3JlYWNoIGxpYmNlbGwgJGxpYmNlbGxzIHsKKyAgICAgIGxhcHBlbmQgYXJjX3NldHMgW2xpYmNlbGxfdGltaW5nX2FyY19zZXRzICRsaWJjZWxsXQorICAgIH0KKyAgICByZXR1cm4gJGFyY19zZXRzCisgIH0KK30KKworcHJvYyBpbnN0YW5jZV9lZGdlcyB7IGluc3QgfSB7CisgIHNldCBlZGdlcyB7fQorICBzZXQgcGluX2l0ZXIgWyRpbnN0IHBpbl9pdGVyYXRvcl0KKyAgd2hpbGUge1skcGluX2l0ZXIgaGFzX25leHRdfSB7CisgICAgc2V0IHBpbiBbJHBpbl9pdGVyIG5leHRdCisgICAgZm9yZWFjaCB2ZXJ0ZXggWyRwaW4gdmVydGljZXNdIHsKKyAgICAgIHNldCBlZGdlX2l0ZXIgWyR2ZXJ0ZXggb3V0X2VkZ2VfaXRlcmF0b3JdCisgICAgICB3aGlsZSB7WyRlZGdlX2l0ZXIgaGFzX25leHRdfSB7CisJc2V0IGVkZ2UgWyRlZGdlX2l0ZXIgbmV4dF0KKwlpZiB7IFskZWRnZSByb2xlXSAhPSAid2lyZSIgfSB7CisJICBsYXBwZW5kIGVkZ2VzICRlZGdlCisJfQorICAgICAgfQorICAgICAgJGVkZ2VfaXRlciBmaW5pc2gKKyAgICB9CisgIH0KKyAgJHBpbl9pdGVyIGZpbmlzaAorICByZXR1cm4gJGVkZ2VzCit9CisKK3Byb2MgbGliY2VsbF90aW1pbmdfYXJjX3NldHMgeyBsaWJjZWxsIH0geworICBzZXQgYXJjX3NldHMge30KKyAgc2V0IGFyY19pdGVyIFskbGliY2VsbCB0aW1pbmdfYXJjX3NldF9pdGVyYXRvcl0KKyAgd2hpbGUgeyBbJGFyY19pdGVyIGhhc19uZXh0XSB9IHsKKyAgICBsYXBwZW5kIGFyY19zZXRzIFskYXJjX2l0ZXIgbmV4dF0KKyAgfQorICAkYXJjX2l0ZXIgZmluaXNoCisgIHJldHVybiAkYXJjX3NldHMKK30KKworcHJvYyBnZXRfdGltaW5nX2FyY3NfZnJvbV90byB7IGZyb21fcGluX2FyZyB0b19waW5fYXJnIH0geworICBzZXQgZWRnZXMge30KKyAgc2V0IGZyb21fcGluIFtnZXRfcG9ydF9waW5fZXJyb3IgImZyb20iICRmcm9tX3Bpbl9hcmddCisgIHNldCB0b19waW4gW2dldF9wb3J0X3Bpbl9lcnJvciAidG8iICR0b19waW5fYXJnXQorICBmb3JlYWNoIGZyb21fdmVydGV4IFskZnJvbV9waW4gdmVydGljZXNdIHsKKyAgICBmb3JlYWNoIHRvX3ZlcnRleCBbJHRvX3BpbiB2ZXJ0aWNlc10geworICAgICAgc2V0IGVkZ2VfaXRlciBbJGZyb21fdmVydGV4IG91dF9lZGdlX2l0ZXJhdG9yXQorICAgICAgd2hpbGUge1skZWRnZV9pdGVyIGhhc19uZXh0XX0geworCXNldCBlZGdlIFskZWRnZV9pdGVyIG5leHRdCisJaWYgeyBbJGVkZ2UgdG9dID09ICR0b192ZXJ0ZXggfSB7CisJICBsYXBwZW5kIGVkZ2VzICRlZGdlCisJfQorICAgICAgfQorICAgICAgJGVkZ2VfaXRlciBmaW5pc2gKKyAgICB9CisgIH0KKyAgcmV0dXJuICRlZGdlcworfQorCitwcm9jIGdldF90aW1pbmdfYXJjc19mcm9tIHsgZnJvbV9waW5fYXJnIH0geworICBzZXQgZnJvbV9waW4gW2dldF9wb3J0X3Bpbl9lcnJvciAiZnJvbSIgJGZyb21fcGluX2FyZ10KKyAgc2V0IGVkZ2VzIHt9CisgIGZvcmVhY2ggZnJvbV92ZXJ0ZXggWyRmcm9tX3BpbiB2ZXJ0aWNlc10geworICAgIHNldCBlZGdlX2l0ZXIgWyRmcm9tX3ZlcnRleCBvdXRfZWRnZV9pdGVyYXRvcl0KKyAgICB3aGlsZSB7WyRlZGdlX2l0ZXIgaGFzX25leHRdfSB7CisgICAgICBzZXQgZWRnZSBbJGVkZ2VfaXRlciBuZXh0XQorICAgICAgbGFwcGVuZCBlZGdlcyAkZWRnZQorICAgIH0KKyAgICAkZWRnZV9pdGVyIGZpbmlzaAorICB9CisgIHJldHVybiAkZWRnZXMKK30KKworcHJvYyBnZXRfdGltaW5nX2FyY3NfdG8geyB0b19waW5fYXJnIH0geworICBzZXQgdG9fcGluIFtnZXRfcG9ydF9waW5fZXJyb3IgInRvIiAkdG9fcGluX2FyZ10KKyAgc2V0IGVkZ2VzIHt9CisgIGZvcmVhY2ggdG9fdmVydGV4IFskdG9fcGluIHZlcnRpY2VzXSB7CisgICAgc2V0IGVkZ2VfaXRlciBbJHRvX3ZlcnRleCBpbl9lZGdlX2l0ZXJhdG9yXQorICAgIHdoaWxlIHtbJGVkZ2VfaXRlciBoYXNfbmV4dF19IHsKKyAgICAgIHNldCBlZGdlIFskZWRnZV9pdGVyIG5leHRdCisgICAgICBsYXBwZW5kIGVkZ2VzICRlZGdlCisgICAgfQorICAgICRlZGdlX2l0ZXIgZmluaXNoCisgIH0KKyAgcmV0dXJuICRlZGdlcworfQorCitwcm9jIGZpbHRlcl90aW1pbmdfYXJjczEgeyBmaWx0ZXIgb2JqZWN0cyB9IHsKKyAgdmFyaWFibGUgZmlsdGVyX3JlZ2V4cDEKKyAgdmFyaWFibGUgZmlsdGVyX29yX3JlZ2V4cAorICB2YXJpYWJsZSBmaWx0ZXJfYW5kX3JlZ2V4cAorICBzZXQgZmlsdGVyZWRfb2JqZWN0cyB7fQorICAjIElnbm9yZSBzdWItZXhwcnMgaW4gZmlsdGVyX3JlZ2V4cDEgZm9yIGV4cHIyIG1hdGNoIHZhci4KKyAgaWYgeyBbcmVnZXhwICRmaWx0ZXJfb3JfcmVnZXhwICRmaWx0ZXIgaWdub3JlIGV4cHIxIFwKKwkgIGlnbm9yZSBpZ25vcmUgaWdub3JlIGV4cHIyXSB9IHsKKyAgICByZWdleHAgJGZpbHRlcl9yZWdleHAxICRleHByMSBpZ25vcmUgYXR0cl9uYW1lIG9wIGFyZworICAgIHNldCBmaWx0ZXJlZF9vYmplY3RzMSBbZmlsdGVyX3RpbWluZ19hcmNzICRhdHRyX25hbWUgJG9wICRhcmcgJG9iamVjdHNdCisgICAgcmVnZXhwICRmaWx0ZXJfcmVnZXhwMSAkZXhwcjIgaWdub3JlIGF0dHJfbmFtZSBvcCBhcmcKKyAgICBzZXQgZmlsdGVyZWRfb2JqZWN0czIgW2ZpbHRlcl90aW1pbmdfYXJjcyAkYXR0cl9uYW1lICRvcCAkYXJnICRvYmplY3RzXQorICAgIHNldCBmaWx0ZXJlZF9vYmplY3RzIFtjb25jYXQgJGZpbHRlcmVkX29iamVjdHMxICRmaWx0ZXJlZF9vYmplY3RzMl0KKyAgfSBlbHNlaWYgeyBbcmVnZXhwICRmaWx0ZXJfYW5kX3JlZ2V4cCAkZmlsdGVyIGlnbm9yZSBleHByMSBcCisJCWlnbm9yZSBpZ25vcmUgaWdub3JlIGV4cHIyXSB9IHsKKyAgICByZWdleHAgJGZpbHRlcl9yZWdleHAxICRleHByMSBpZ25vcmUgYXR0cl9uYW1lIG9wIGFyZworICAgIHNldCBmaWx0ZXJlZF9vYmplY3RzIFtmaWx0ZXJfdGltaW5nX2FyY3MgJGF0dHJfbmFtZSAkb3AgJGFyZyAkb2JqZWN0c10KKyAgICByZWdleHAgJGZpbHRlcl9yZWdleHAxICRleHByMiBpZ25vcmUgYXR0cl9uYW1lIG9wIGFyZworICAgIHNldCBmaWx0ZXJlZF9vYmplY3RzIFtmaWx0ZXJfdGltaW5nX2FyY3MgJGF0dHJfbmFtZSAkb3AgXAorCQkJICAgICRhcmcgJGZpbHRlcmVkX29iamVjdHNdCisgIH0gZWxzZWlmIHsgW3JlZ2V4cCAkZmlsdGVyX3JlZ2V4cDEgJGZpbHRlciBpZ25vcmUgYXR0cl9uYW1lIG9wIGFyZ10gfSB7CisgICAgc2V0IGZpbHRlcmVkX29iamVjdHMgW2ZpbHRlcl90aW1pbmdfYXJjcyAkYXR0cl9uYW1lICRvcCAkYXJnICRvYmplY3RzXQorICB9IGVsc2UgeworICAgIHN0YV9lcnJvciA0NDEgInVuc3VwcG9ydGVkIC1maWx0ZXIgZXhwcmVzc2lvbi4iCisgIH0KKyAgcmV0dXJuICRmaWx0ZXJlZF9vYmplY3RzCit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworZGVmaW5lX2NtZF9hcmdzICJyZXBvcnRfY2xvY2tfcHJvcGVydGllcyIge1tjbG9ja3NdfQorCitwcm9jX3JlZGlyZWN0IHJlcG9ydF9jbG9ja19wcm9wZXJ0aWVzIHsKKyAgY2hlY2tfYXJnY19lcTBvcjEgInJlcG9ydF9jbG9ja19wcm9wZXJ0aWVzIiAkYXJncworICB1cGRhdGVfZ2VuZXJhdGVkX2Nsa3MKKyAgcmVwb3J0X2xpbmUgIkNsb2NrICAgICAgICAgICAgICAgICAgIFBlcmlvZCAgICAgICAgICBXYXZlZm9ybSIKKyAgcmVwb3J0X2xpbmUgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCisgIGlmIHsgW2xsZW5ndGggJGFyZ3NdID09IDAgfSB7CisgICAgc2V0IGNsa19pdGVyIFtjbG9ja19pdGVyYXRvcl0KKyAgICB3aGlsZSB7WyRjbGtfaXRlciBoYXNfbmV4dF19IHsKKyAgICAgIHNldCBjbGsgWyRjbGtfaXRlciBuZXh0XQorICAgICAgcmVwb3J0X2Nsb2NrMSAkY2xrCisgICAgfQorICAgICRjbGtfaXRlciBmaW5pc2gKKyAgfSBlbHNlIHsKKyAgICBmb3JlYWNoIGNsayBbZ2V0X2Nsb2Nrc193YXJuICJjbG9ja19uYW1lIiBbbGluZGV4ICRhcmdzIDBdXSB7CisgICAgICByZXBvcnRfY2xvY2sxICRjbGsKKyAgICB9CisgIH0KK30KKworcHJvYyByZXBvcnRfY2xvY2sxIHsgY2xrIH0geworICBnbG9iYWwgc3RhX3JlcG9ydF9kZWZhdWx0X2RpZ2l0cworCisgIGlmIHsgWyRjbGsgd2F2ZWZvcm1fdmFsaWRdIH0geworICAgIHNldCBkaWdpdHMgJHN0YV9yZXBvcnRfZGVmYXVsdF9kaWdpdHMKKyAgICBzZXQgd2F2ZWZvcm0gWyRjbGsgd2F2ZWZvcm1dCisgICAgaWYgeyAkd2F2ZWZvcm0gPT0ge30gfSB7CisgICAgICBzZXQgd2F2ZSAiICAgICAgICAgICAgICAgICAgICAiCisgICAgfSBlbHNlIHsKKyAgICAgIHNldCB3YXZlICIiCisgICAgICBmb3JlYWNoIGVkZ2UgJHdhdmVmb3JtIHsKKwlzZXQgd2F2ZSAiJHdhdmVbZm9ybWF0ICIlMTBzIiBbZm9ybWF0X3RpbWUgJGVkZ2UgJGRpZ2l0c11dIgorICAgICAgfQorICAgIH0KKyAgICBpZiB7WyRjbGsgaXNfZ2VuZXJhdGVkXX0geworICAgICAgc2V0IGdlbmVyYXRlZCAiIChnZW5lcmF0ZWQpIgorICAgIH0gZWxzZSB7CisgICAgICBzZXQgZ2VuZXJhdGVkICIiCisgICAgfQorICAgIHJlcG9ydF9saW5lICJbZm9ybWF0ICUtMjBzIFtnZXRfbmFtZSAkY2xrXV1bZm9ybWF0ICUxMHMgW2Zvcm1hdF90aW1lIFskY2xrIHBlcmlvZF0gJGRpZ2l0c11dICAkd2F2ZSRnZW5lcmF0ZWQiCisgIH0KK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitkZWZpbmVfY21kX2FyZ3MgInJlcG9ydF9vYmplY3RfZnVsbF9uYW1lcyIge29iamVjdHN9CisKK3Byb2MgcmVwb3J0X29iamVjdF9mdWxsX25hbWVzIHsgb2JqZWN0cyB9IHsKKyAgZm9yZWFjaCBvYmogW3NvcnRfYnlfZnVsbF9uYW1lICRvYmplY3RzXSB7CisgICAgcmVwb3J0X2xpbmUgW2dldF9mdWxsX25hbWUgJG9ial0KKyAgfQorfQorCitkZWZpbmVfY21kX2FyZ3MgInJlcG9ydF9vYmplY3RfbmFtZXMiIHtvYmplY3RzfQorCitwcm9jIHJlcG9ydF9vYmplY3RfbmFtZXMgeyBvYmplY3RzIH0geworICBmb3JlYWNoIG9iaiBbc29ydF9ieV9uYW1lICRvYmplY3RzXSB7CisgICAgcmVwb3J0X2xpbmUgW2dldF9uYW1lICRvYmpdCisgIH0KK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitkZWZpbmVfY21kX2FyZ3MgInJlcG9ydF91bml0cyIge30KKworcHJvYyByZXBvcnRfdW5pdHMgeyBhcmdzIH0geworICBjaGVja19hcmdjX2VxMCAicmVwb3J0X3VuaXRzIiAkYXJncworICBmb3JlYWNoIHVuaXQgeyJ0aW1lIiAiY2FwYWNpdGFuY2UiICJyZXNpc3RhbmNlIiAidm9sdGFnZSIgImN1cnJlbnQiICJwb3dlciIgImRpc3RhbmNlIn0geworICAgIHJlcG9ydF9saW5lICIgJHVuaXQgMVt1bml0X3NjYWxlX2FicmV2aWF0aW9uICR1bml0XVt1bml0X3N1ZmZpeCAkdW5pdF0iCisgIH0KK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitkZWZpbmVfY21kX2FyZ3MgIndpdGhfb3V0cHV0X3RvX3ZhcmlhYmxlIiB7IHZhciB7IGNtZHMgfX0KKworIyB3aXRoX291dHB1dF90b192YXJpYWJsZSB2YXJpYWJsZSB7IGNvbW1hbmQgYXJncy4uLiB9Citwcm9jIHdpdGhfb3V0cHV0X3RvX3ZhcmlhYmxlIHsgdmFyX25hbWUgYXJncyB9IHsKKyAgdXB2YXIgMSAkdmFyX25hbWUgdmFyCisKKyAgc2V0IGJvZHkgW2xpbmRleCAkYXJncyAwXQorICBzdGE6OnJlZGlyZWN0X3N0cmluZ19iZWdpbjsKKyAgY2F0Y2ggJGJvZHkgcmV0CisgIHNldCB2YXIgW3N0YTo6cmVkaXJlY3Rfc3RyaW5nX2VuZF0KKyAgcmV0dXJuICRyZXQKK30KKworZGVmaW5lX2NtZF9hcmdzICJzZXRfcG9jdl9zaWdtYV9mYWN0b3IiIHsgZmFjdG9yIH0KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitkZWZpbmVfY21kX2FyZ3MgIndyaXRlX3BhdGhfc3BpY2UiIHsgLXBhdGhfYXJncyBwYXRoX2FyZ3NcCisJCQkJICAgICAgIC1zcGljZV9kaXJlY3Rvcnkgc3BpY2VfZGlyZWN0b3J5XAorCQkJCSAgICAgICAtbGliX3N1YmNrdF9maWxlIGxpYl9zdWJja3RzX2ZpbGVcCisJCQkJICAgICAgIC1tb2RlbF9maWxlIG1vZGVsX2ZpbGVcCisJCQkJICAgICAgIC1wb3dlciBwb3dlclwKKwkJCQkgICAgICAgLWdyb3VuZCBncm91bmR9CisKK3Byb2Mgd3JpdGVfcGF0aF9zcGljZSB7IGFyZ3MgfSB7CisgIHBhcnNlX2tleV9hcmdzICJ3cml0ZV9wYXRoX3NwaWNlIiBhcmdzIFwKKyAgICBrZXlzIHstc3BpY2VfZGlyZWN0b3J5IC1saWJfc3ViY2t0X2ZpbGUgLW1vZGVsX2ZpbGUgXAorCSAgICAtcG93ZXIgLWdyb3VuZCAtcGF0aF9hcmdzfSBcCisgICAgZmxhZ3Mge30KKworICBpZiB7IFtpbmZvIGV4aXN0cyBrZXlzKC1zcGljZV9kaXJlY3RvcnkpXSB9IHsKKyAgICBzZXQgc3BpY2VfZGlyIFtmaWxlIG5hdGl2ZW5hbWUgJGtleXMoLXNwaWNlX2RpcmVjdG9yeSldCisgICAgaWYgeyAhW2ZpbGUgZXhpc3RzICRzcGljZV9kaXJdIH0geworICAgICAgc3RhX2Vycm9yIDQ5NiAiRGlyZWN0b3J5ICRzcGljZV9kaXIgbm90IGZvdW5kLiIKKyAgICB9CisgICAgaWYgeyAhW2ZpbGUgaXNkaXJlY3RvcnkgJHNwaWNlX2Rpcl0gfSB7CisgICAgICBzdGFfZXJyb3IgNDk3ICIkc3BpY2VfZGlyIGlzIG5vdCBhIGRpcmVjdG9yeS4iCisgICAgfQorICAgIGlmIHsgIVtmaWxlIHdyaXRhYmxlICRzcGljZV9kaXJdIH0geworICAgICAgc3RhX2Vycm9yIDQ5OCAiQ2Fubm90IHdyaXRlIGluICRzcGljZV9kaXIuIgorICAgIH0KKyAgfSBlbHNlIHsKKyAgICBzdGFfZXJyb3IgNDk5ICJObyAtc3BpY2VfZGlyZWN0b3J5IHNwZWNpZmllZC4iCisgIH0KKworICBpZiB7IFtpbmZvIGV4aXN0cyBrZXlzKC1saWJfc3ViY2t0X2ZpbGUpXSB9IHsKKyAgICBzZXQgbGliX3N1YmNrdF9maWxlIFtmaWxlIG5hdGl2ZW5hbWUgJGtleXMoLWxpYl9zdWJja3RfZmlsZSldCisgICAgaWYgeyAhW2ZpbGUgcmVhZGFibGUgJGxpYl9zdWJja3RfZmlsZV0gfSB7CisgICAgICBzdGFfZXJyb3IgNTAwICItbGliX3N1YmNrdF9maWxlICRsaWJfc3ViY2t0X2ZpbGUgaXMgbm90IHJlYWRhYmxlLiIKKyAgICB9CisgIH0gZWxzZSB7CisgICAgc3RhX2Vycm9yIDUwMSAiTm8gLWxpYl9zdWJja3RfZmlsZSBzcGVjaWZpZWQuIgorICB9CisKKyAgaWYgeyBbaW5mbyBleGlzdHMga2V5cygtbW9kZWxfZmlsZSldIH0geworICAgIHNldCBtb2RlbF9maWxlIFtmaWxlIG5hdGl2ZW5hbWUgJGtleXMoLW1vZGVsX2ZpbGUpXQorICAgIGlmIHsgIVtmaWxlIHJlYWRhYmxlICRtb2RlbF9maWxlXSB9IHsKKyAgICAgIHN0YV9lcnJvciA1MDIgIi1tb2RlbF9maWxlICRtb2RlbF9maWxlIGlzIG5vdCByZWFkYWJsZS4iCisgICAgfQorICB9IGVsc2UgeworICAgIHN0YV9lcnJvciA1MDMgIk5vIC1tb2RlbF9maWxlIHNwZWNpZmllZC4iCisgIH0KKworICBpZiB7IFtpbmZvIGV4aXN0cyBrZXlzKC1wb3dlcildIH0geworICAgIHNldCBwb3dlciAka2V5cygtcG93ZXIpCisgIH0gZWxzZSB7CisgICAgc3RhX2Vycm9yIDUwNCAiTm8gLXBvd2VyIHNwZWNpZmllZC4iCisgIH0KKworICBpZiB7IFtpbmZvIGV4aXN0cyBrZXlzKC1ncm91bmQpXSB9IHsKKyAgICBzZXQgZ3JvdW5kICRrZXlzKC1ncm91bmQpCisgIH0gZWxzZSB7CisgICAgc3RhX2Vycm9yIDUwNSAiTm8gLWdyb3VuZCBzcGVjaWZpZWQuIgorICB9CisKKyAgaWYgeyAhW2luZm8gZXhpc3RzIGtleXMoLXBhdGhfYXJncyldIH0geworICAgIHN0YV9lcnJvciA1MDYgIk5vIC1wYXRoX2FyZ3Mgc3BlY2lmaWVkLiIKKyAgfQorICBzZXQgcGF0aF9hcmdzICRrZXlzKC1wYXRoX2FyZ3MpCisgIHNldCBwYXRoX2VuZHMgW2V2YWwgW2NvbmNhdCBmaW5kX3RpbWluZ19wYXRocyAkcGF0aF9hcmdzXV0KKyAgaWYgeyAkcGF0aF9lbmRzID09IHt9IH0geworICAgIHN0YV9lcnJvciA1MDcgIk5vIHBhdGhzIGZvdW5kIGZvciAtcGF0aF9hcmdzICRwYXRoX2FyZ3MuIgorICB9IGVsc2UgeworICAgIHNldCBwYXRoX2luZGV4IDEKKyAgICBmb3JlYWNoIHBhdGhfZW5kICRwYXRoX2VuZHMgeworICAgICAgc2V0IHBhdGggWyRwYXRoX2VuZCBwYXRoXQorICAgICAgc2V0IHBhdGhfbmFtZSAicGF0aF8kcGF0aF9pbmRleCIKKyAgICAgIHNldCBzcGljZV9maWxlIFtmaWxlIGpvaW4gJHNwaWNlX2RpciAiJHBhdGhfbmFtZS5zcCJdCisgICAgICBzZXQgc3ViY2t0X2ZpbGUgW2ZpbGUgam9pbiAkc3BpY2VfZGlyICIkcGF0aF9uYW1lLnN1YmNrdCJdCisgICAgICB3cml0ZV9wYXRoX3NwaWNlX2NtZCAkcGF0aCAkc3BpY2VfZmlsZSAkc3ViY2t0X2ZpbGUgXAorCSRsaWJfc3ViY2t0X2ZpbGUgJG1vZGVsX2ZpbGUgJHBvd2VyICRncm91bmQKKyAgICAgIGluY3IgcGF0aF9pbmRleAorICAgIH0KKyAgfQorfQorCisjIHN0YSBuYW1lc3BhY2UgZW5kLgorfQpkaWZmIC0tZ2l0IGEvaGFja3Mvc3JjL29wZW5sYW5lL2lvX3BsYWNlLnB5IGIvaGFja3Mvc3JjL29wZW5sYW5lL2lvX3BsYWNlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlOGIyYjEKLS0tIC9kZXYvbnVsbAorKysgYi9oYWNrcy9zcmMvb3BlbmxhbmUvaW9fcGxhY2UucHkKQEAgLTAsMCArMSw0ODIgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKKyMgQ29weXJpZ2h0IDIwMjAgRWZhYmxlc3MgQ29ycG9yYXRpb24KKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyIiIgorUGxhY2VzIHRoZSBJT3MgYWNjb3JkaW5nIHRvIGFuIGlucHV0IGZpbGUuIFN1cHBvcnRzIHJlZ2V4ZXMuCitGaWxlIGZvcm1hdDoKKyNOfCNTfCNFfCNXCitwaW4xX3JlZ2V4CitwaW4yX3JlZ2V4CisuLi4KKworI1N8I058I0V8I1cKKy4uLgorLi4uCisiIiIKKworaW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCBzeXMKK2ltcG9ydCBhcmdwYXJzZQoraW1wb3J0IHJhbmRvbQoraW1wb3J0IG9kYgorCitwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihkZXNjcmlwdGlvbj0nJycKK1BsYWNlcyB0aGUgSU9zIGFjY29yZGluZyB0byBhbiBpbnB1dCBmaWxlLiBTdXBwb3J0cyByZWdleGVzLgorRmlsZSBmb3JtYXQ6CisjTnwjU3wjRXwjVworcGluMV9yZWdleCAobG93IGNvLW9yZGluYXRlcyB0byBoaWdoIGNvLW9yZGluYXRlczsgZS5nLiwgYm90IHRvIHRvcCBhbmQgbGVmdCB0byByaWdodCkKK3BpbjJfcmVnZXgKKy4uLgorCisjU3wjTnwjRXwjVworLi4uCisuLi4KKycnJykKKworcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1pbnB1dC1kZWYnLCAnLWQnLCByZXF1aXJlZD1UcnVlLAorICAgICAgICAgICAgICAgICAgICBoZWxwPSdJbnB1dCBERUYnKQorCitwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWlucHV0LWxlZicsICctbCcsIHJlcXVpcmVkPVRydWUsCisgICAgICAgICAgICAgICAgICAgIGhlbHA9J0lucHV0IExFRicpCisKK3BhcnNlci5hZGRfYXJndW1lbnQoJy0tb3V0cHV0LWRlZicsICctbycsCisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9J291dHB1dC5kZWYnLCBoZWxwPSdPdXRwdXQgREVGIHdpdGggbmV3IHBpbiBwbGFjZW1lbnRzJykKKworcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1jb25maWcnLCAnLWNmZycsCisgICAgICAgICAgICAgICAgICAgIGhlbHA9J0NvbmZpZ3VyYXRpb24gZmlsZS4gU2VlIC1oIGZvciBmb3JtYXQnKQorCitwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXZlci1sYXllcicsICctdmwnLAorICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PTMsCisgICAgICAgICAgICAgICAgICAgIGhlbHA9J051bWJlciBvZiBtZXRhbCBsYXllciB0byBwbGFjZSB0aGUgdmVydGljYWwgcGlucyBvbi4gRGVmYXVsdHMgdG8gU0tZMTMwIG1ldGFsIGxheWVyIG5hbWVzLiAxLWJhc2VkLicpCisKK3BhcnNlci5hZGRfYXJndW1lbnQoJy0taG9yLWxheWVyJywgJy1obCcsCisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9NCwKKyAgICAgICAgICAgICAgICAgICAgaGVscD0nTnVtYmVyIG9mIG1ldGFsIGxheWVyIHRvIHBsYWNlIHRoZSBob3Jpem9udGFsIHBpbnMgb24uIERlZmF1bHRzIHRvIFNLWTEzMCBtZXRhbCBsYXllciBuYW1lcy4gMS1iYXNlZC4nKQorCitwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWhvci13aWR0aC1tdWx0JywgJy1od20nLAorICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PTIsCisgICAgICAgICAgICAgICAgICAgIGhlbHA9JycpCisKK3BhcnNlci5hZGRfYXJndW1lbnQoJy0tdmVyLXdpZHRoLW11bHQnLCAnLXZ3bScsCisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9MiwKKyAgICAgICAgICAgICAgICAgICAgaGVscD0nJykKKworcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1sZW5ndGgnLCAnLWxlbicsIHR5cGU9ZmxvYXQsCisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9MiwKKyAgICAgICAgICAgICAgICAgICAgaGVscD0nJykKKworcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1ob3ItZXh0ZW5zaW9uJywgJy1oZXh0JywgdHlwZT1mbG9hdCwKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0wLjAsCisgICAgICAgICAgICAgICAgICAgIGhlbHA9JycpCisKK3BhcnNlci5hZGRfYXJndW1lbnQoJy0tdmVyLWV4dGVuc2lvbicsICctdmV4dCcsIHR5cGU9ZmxvYXQsCisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9MC4wLAorICAgICAgICAgICAgICAgICAgICBoZWxwPScnKQorCitwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXJldmVyc2UnLCAnLXJldicsCisgICAgICAgICAgICAgICAgICAgIGNob2ljZXM9WydOJywgJ0UnLCAnUycsICdXJ10sCisgICAgICAgICAgICAgICAgICAgIG5hcmdzPScrJywKKyAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9W10sCisgICAgICAgICAgICAgICAgICAgIGhlbHA9JycpCisKK3BhcnNlci5hZGRfYXJndW1lbnQoJy0tYnVzLXNvcnQnLCAnLWJzb3J0JywgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgaGVscD0nU29ydCBwaW5zIHNvIHRoYXQgYnVzIGJpdHMgd2l0aCB0aGUgc2FtZSBpbmRleCBhcmUgZ3JvdXBlZCcKKyAgICAgICAgICAgICAgICAgICAgJ3RvZ2V0aGVyLiBlLmcuLCBhWzBdIGJbMF0gY1swXSBhWzFdIGJbMV0gY1sxXScpCisjIFRPRE8KKyMgd2lkdGgsIGxlbmd0aCwgYW5kIGV4dGVuc2lvbiBtdWx0aXBsaWVycworCithcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQorCitkZWZfZmlsZV9uYW1lID0gYXJncy5pbnB1dF9kZWYKK2xlZl9maWxlX25hbWUgPSBhcmdzLmlucHV0X2xlZgorb3V0cHV0X2RlZl9maWxlX25hbWUgPSBhcmdzLm91dHB1dF9kZWYKK2NvbmZpZ19maWxlX25hbWUgPSBhcmdzLmNvbmZpZworYnVzX3NvcnRfZmxhZyA9IGFyZ3MuYnVzX3NvcnQKKworI01hbnVhbCBQYWQgUGxhY2VtZW50IC0gRGluZXNoIEEKK21hbnVhbF9wbGFjZV9mbGFnID0gRmFsc2UgCisKK2hfbGF5ZXJfaW5kZXggPSBpbnQoYXJncy5ob3JfbGF5ZXIpCit2X2xheWVyX2luZGV4ID0gaW50KGFyZ3MudmVyX2xheWVyKQorCitoX3dpZHRoX211bHQgPSBpbnQoYXJncy5ob3Jfd2lkdGhfbXVsdCkKK3Zfd2lkdGhfbXVsdCA9IGludChhcmdzLnZlcl93aWR0aF9tdWx0KQorCitMRU5HVEggPSBpbnQoMTAwMCphcmdzLmxlbmd0aCkKKworSF9FWFRFTlNJT04gPSBpbnQoMTAwMCphcmdzLmhvcl9leHRlbnNpb24pCitWX0VYVEVOU0lPTiA9IGludCgxMDAwKmFyZ3MudmVyX2V4dGVuc2lvbikKKworaWYgSF9FWFRFTlNJT04gPCAwOgorICAgIEhfRVhURU5TSU9OID0gMAorCitpZiBWX0VYVEVOU0lPTiA8IDA6CisgICAgVl9FWFRFTlNJT04gPSAwCisKK3JldmVyc2VfYXJyID0gYXJncy5yZXZlcnNlCityZXZlcnNlX2FyciA9IFsiIyIrcmV2IGZvciByZXYgaW4gcmV2ZXJzZV9hcnJdCisKK2RlZiBnZXRHcmlkKG9yaWdpbiwgY291bnQsIHN0ZXApOgorICAgIHRyYWNrcyA9IFtdCisgICAgcG9zID0gb3JpZ2luCisgICAgZm9yIGkgaW4gcmFuZ2UoY291bnQpOgorICAgICAgICB0cmFja3MuYXBwZW5kKHBvcykKKyAgICAgICAgcG9zICs9IHN0ZXAKKyAgICBhc3NlcnQgbGVuKHRyYWNrcykgPiAwCisgICAgdHJhY2tzLnNvcnQoKQorCisgICAgcmV0dXJuIHRyYWNrcworCitkZWYgZXF1YWxseVNwYWNlZFNlcShtLCBhcnIpOgorICAgIHNlcSA9IFtdCisgICAgbiA9IGxlbihhcnIpCisgICAgIyBCcmVzZW5oYW0KKyAgICBpbmRpY2VzID0gW2kqbi8vbSArIG4vLygyKm0pIGZvciBpIGluIHJhbmdlKG0pXQorICAgIGZvciBpIGluIGluZGljZXM6CisgICAgICAgIHNlcS5hcHBlbmQoYXJyW2ldKQorICAgIHJldHVybiBzZXEKKworIyBIVU1BTiBTT1JUSU5HOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy81OTY3NTAwL2hvdy10by1jb3JyZWN0bHktc29ydC1hLXN0cmluZy13aXRoLWEtbnVtYmVyLWluc2lkZQorZGVmIGF0b2YodGV4dCk6CisgICAgdHJ5OgorICAgICAgICByZXR2YWwgPSBmbG9hdCh0ZXh0KQorICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICByZXR2YWwgPSB0ZXh0CisgICAgcmV0dXJuIHJldHZhbAorCitkZWYgbmF0dXJhbF9rZXlzKGVudW0pOgorICAgIHRleHQgPSBlbnVtWzBdCisgICAgdGV4dCA9IHJlLnN1YigiKFxbfFxdfFwufFwkKSIsICIiLCB0ZXh0KQorICAgICcnJworICAgIGFsaXN0LnNvcnQoa2V5PW5hdHVyYWxfa2V5cykgc29ydHMgaW4gaHVtYW4gb3JkZXIKKyAgICBodHRwOi8vbmVkYmF0Y2hlbGRlci5jb20vYmxvZy8yMDA3MTIvaHVtYW5fc29ydGluZy5odG1sCisgICAgKHNlZSB0b290aHkncyBpbXBsZW1lbnRhdGlvbiBpbiB0aGUgY29tbWVudHMpCisgICAgZmxvYXQgcmVnZXggY29tZXMgZnJvbSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMTI2NDMwNzMvMTkwNTk3CisgICAgJycnCisgICAgcmV0dXJuIFthdG9mKGMpIGZvciBjIGluIHJlLnNwbGl0KHInWystXT8oWzAtOV0rKD86Wy5dWzAtOV0qKT98Wy5dWzAtOV0rKScsIHRleHQpXQorCitkZWYgYnVzX2tleXMoZW51bSk6CisgICAgdGV4dCA9IGVudW1bMF0KKyAgICBtID0gcmUubWF0Y2goIl4uKlxbKFxkKylcXSQiLCB0ZXh0KQorICAgIGlmIG5vdCBtOgorICAgICAgICByZXR1cm4gLTEKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gaW50KG0uZ3JvdXAoMSkpCisKKyMgRmluZCB0aGUgU2xvdCBtYXRjaGluZyBuZXh0IG5lYXJlc3Qgc2xvdC1EaW5lc2hBCitkZWYgZmluZFNsb3QodmFsLCBhcnIpOgorICAgIGZvciBpIGluIGFycjoKKyAgICAgICAgaWYoaSA+IHZhbCk6CisgICAgICAgICAgICByZXR1cm4gaQorICAgIHByaW50KCJFUlJPUjogTmV4dCBWYWxpZCBQb3NpdGlvbiBub3QgZm91bmQgOiIsdmFsKQorICAgIHJldHVybiAtMQorCisKKyMgcmVhZCBjb25maWcKKworcGluX3BsYWNlbWVudF9jZmcgPSB7IiNOIjogW10sICIjRSI6IFtdLCAiI1MiOiBbXSwgIiNXIjogW119CitjdXJfc2lkZSA9IE5vbmUKK2lmIGNvbmZpZ19maWxlX25hbWUgaXMgbm90IE5vbmUgYW5kIGNvbmZpZ19maWxlX25hbWUgIT0gIiI6CisgICAgd2l0aCBvcGVuKGNvbmZpZ19maWxlX25hbWUsICdyJykgYXMgY29uZmlnX2ZpbGU6CisgICAgICAgIGZvciBsaW5lIGluIGNvbmZpZ19maWxlOgorICAgICAgICAgICAgbGluZSA9IGxpbmUuc3BsaXQoKQorICAgICAgICAgICAgaWYgbGVuKGxpbmUpID09IDA6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYobWFudWFsX3BsYWNlX2ZsYWcgPT0gRmFsc2UpOgorICAgICAgICAgICAgICAgIGlmIGxlbihsaW5lKSA+IDE6CisgICAgICAgICAgICAgICAgICAgIHByaW50KCJPbmx5IG9uZSBlbnRyeSBhbGxvd2VkIHBlciBsaW5lLiIpCisgICAgICAgICAgICAgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICAgICAgICAgICAgICB0b2tlbiA9IGxpbmVbMF0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgI0R1cmluZyBNYW51YWwgUGxhY2Ugd2UgYXJlIGFsbG93aW5nIEZvdXIgZmllbGQKKyAgICAgICAgICAgICAgICAjIDxQYWQgTmFtZT4gPE9mZnNldD4gPFBvc2l0aW9uPiA8TXVsdGlwbGllcj4KKyAgICAgICAgICAgICAgICAjIENhdXNpb246IE1ha2Ugc3VyZSB0aGF0IHlvdSBoYXZlIGdpdmVuIGFic29sdXRlIG5hbWUsIGVsc2UgaXQgd2lsbCBnaXZlIGlzc3VlCisgICAgICAgICAgICAgICAgaWYgbGVuKGxpbmUpID4gNDoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoIk9ubHkgRm91ciBlbnRyeSBhbGxvd2VkIHBlciBsaW5lLiIpCisgICAgICAgICAgICAgICAgICAgIHN5cy5leGl0KDEpCisgICAgICAgICAgICAgICAgaWYgbGluZVswXSBub3QgaW4gWyIjTiIsICIjRSIsICIjUyIsICIjVyIsICIjTlIiLCAiI0VSIiwgIiNTUiIsICIjV1IiXToKKyAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBsaW5lCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBsaW5lWzBdCisKKyAgICAgICAgICAgIGlmIGN1cl9zaWRlIGlzIG5vdCBOb25lIGFuZCB0b2tlblswXSAhPSAiIyI6CisgICAgICAgICAgICAgICAgcGluX3BsYWNlbWVudF9jZmdbY3VyX3NpZGVdLmFwcGVuZCh0b2tlbikKKyAgICAgICAgICAgIGVsaWYgdG9rZW4gbm90IGluIFsiI04iLCAiI0UiLCAiI1MiLCAiI1ciLCAiI05SIiwgIiNFUiIsICIjU1IiLCAiI1dSIiwgIiNCVVNfU09SVCIsIiNNQU5VQUxfUExBQ0UiXToKKyAgICAgICAgICAgICAgICBwcmludCgiSW52YWxpZCB0b2tlbjogIix0b2tlbikKKyAgICAgICAgICAgICAgICBwcmludCgiVmFsaWQgZGlyZWN0aXZlcyBhcmUgI04sICNFLCAjUywgb3IgI1cuIEFwcGVuZCBSIGZvciByZXZlcnNpbmcgdGhlIGRlZmF1bHQgb3JkZXIuIiwKKyAgICAgICAgICAgICAgICAgICAgICAiVXNlICNCVVNfU09SVCB0byBncm91cCAnYnVzIGJpdHMnIGJ5IGluZGV4LiIsCisgICAgICAgICAgICAgICAgICAgICAgIlVzZSAjTUFOVUFMX1BMQUNFIE1hbnVhbCBQbGFjZW1lbnQgPHBhZG5hbWU+IDxvZmZzZXQ+IDxwaW4gbnVtYmVyPi4iLAorICAgICAgICAgICAgICAgICAgICAgICJQbGVhc2UgbWFrZSBzdXJlIHlvdSBoYXZlIHNldCBhIHZhbGlkIHNpZGUgZmlyc3QgYmVmb3JlIGxpc3RpbmcgcGlucyIpCisgICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAgICAgICAgIGVsaWYgdG9rZW4gPT0gIiNCVVNfU09SVCI6CisgICAgICAgICAgICAgICAgYnVzX3NvcnRfZmxhZyA9IFRydWUKKyAgICAgICAgICAgIGVsaWYgdG9rZW4gPT0gIiNNQU5VQUxfUExBQ0UiOgorICAgICAgICAgICAgICAgIHByaW50KCJJbnB1dCB0b2tlbiAiLHRva2VuKQorICAgICAgICAgICAgICAgIG1hbnVhbF9wbGFjZV9mbGFnID0gVHJ1ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBsZW4odG9rZW4pID09IDM6CisgICAgICAgICAgICAgICAgICAgIHRva2VuID0gdG9rZW5bMDoyXQorICAgICAgICAgICAgICAgICAgICByZXZlcnNlX2Fyci5hcHBlbmQodG9rZW4pCisgICAgICAgICAgICAgICAgY3VyX3NpZGUgPSB0b2tlbgorCisjIGJ1aWxkIGEgbGlzdCBvZiBwaW5zCisKK2RiX3RvcCA9IG9kYi5kYkRhdGFiYXNlLmNyZWF0ZSgpCitvZGIucmVhZF9sZWYoZGJfdG9wLCBsZWZfZmlsZV9uYW1lKQorb2RiLnJlYWRfZGVmKGRiX3RvcCwgZGVmX2ZpbGVfbmFtZSkKKworY2hpcF90b3AgPSBkYl90b3AuZ2V0Q2hpcCgpCitibG9ja190b3AgPSBjaGlwX3RvcC5nZXRCbG9jaygpCit0b3BfZGVzaWduX25hbWUgPSBibG9ja190b3AuZ2V0TmFtZSgpCit0ZWNoID0gZGJfdG9wLmdldFRlY2goKQorCitIX0xBWUVSID0gdGVjaC5maW5kUm91dGluZ0xheWVyKGhfbGF5ZXJfaW5kZXgpCitWX0xBWUVSID0gdGVjaC5maW5kUm91dGluZ0xheWVyKHZfbGF5ZXJfaW5kZXgpCisKK0hfV0lEVEggPSBoX3dpZHRoX211bHQgKiBIX0xBWUVSLmdldFdpZHRoKCkKK1ZfV0lEVEggPSB2X3dpZHRoX211bHQgKiBWX0xBWUVSLmdldFdpZHRoKCkKKworcHJpbnQoIlRvcC1sZXZlbCBkZXNpZ24gbmFtZToiLCB0b3BfZGVzaWduX25hbWUpCisKK2J0ZXJtcyA9IGJsb2NrX3RvcC5nZXRCVGVybXMoKQorYnRlcm1zX2VudW0gPSBbXQorZm9yIGJ0ZXJtIGluIGJ0ZXJtczoKKyAgICBwaW5fbmFtZSA9IGJ0ZXJtLmdldE5hbWUoKQorICAgIGJ0ZXJtc19lbnVtLmFwcGVuZCgocGluX25hbWUsIGJ0ZXJtKSkKKworIyBzb3J0IHRoZW0gImh1bWFubHkiCitidGVybXNfZW51bS5zb3J0KGtleT1uYXR1cmFsX2tleXMpCitpZiBidXNfc29ydF9mbGFnOgorICAgIGJ0ZXJtc19lbnVtLnNvcnQoa2V5PWJ1c19rZXlzKQorYnRlcm1zID0gW2J0ZXJtWzFdIGZvciBidGVybSBpbiBidGVybXNfZW51bV0KKworcGluX3BsYWNlbWVudCA9IHsiI04iOiBbXSwgIiNFIjogW10sICIjUyI6IFtdLCAiI1ciOiBbXX0KK2J0ZXJtX3JlZ2V4X21hcCA9IHt9CitpZihtYW51YWxfcGxhY2VfZmxhZyA9PSBGYWxzZSk6CisgICAgZm9yIHNpZGUgaW4gcGluX3BsYWNlbWVudF9jZmc6CisgICAgICAgIGZvciByZWdleCBpbiBwaW5fcGxhY2VtZW50X2NmZ1tzaWRlXTogICMgZ29pbmcgdGhyb3VnaCB0aGVtIGluIG9yZGVyCisgICAgICAgICAgICByZWdleCArPSAiJCIgICMgYW5jaG9yCisgICAgICAgICAgICBmb3IgYnRlcm0gaW4gYnRlcm1zOgorICAgICAgICAgICAgICAgICMgaWYgYSBwaW4gbmFtZSBtYXRjaGVzIG11bHRpcGxlIHJlZ2V4ZXMsIHRoZWlyIG9yZGVyIHdpbGwgYmUKKyAgICAgICAgICAgICAgICAjIGFyYml0cmFyeS4gTW9yZSByZWZpbmVtZW50IHJlcXVpcmVzIG1vcmUgc3RyaWN0IHJlZ2V4ZXMgKG9yIGp1c3QKKyAgICAgICAgICAgICAgICAjIHRoZSBleGFjdCBwaW4gbmFtZSkuCisgICAgICAgICAgICAgICAgcGluX25hbWUgPSBidGVybS5nZXROYW1lKCkKKyAgICAgICAgICAgICAgICBpZiByZS5tYXRjaChyZWdleCwgcGluX25hbWUpIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBpZiBidGVybSBpbiBidGVybV9yZWdleF9tYXA6CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgiV2FybmluZzogTXVsdGlwbGUgcmVnZXhlcyBtYXRjaGVkIiwgcGluX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLiBUaG9zZSBhcmUiLCBidGVybV9yZWdleF9tYXBbYnRlcm1dLCAiYW5kIiwgcmVnZXgpCisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgiT25seSB0aGUgZmlyc3Qgb25lIGlzIHRha2VuIGludG8gY29uc2lkZXJhdGlvbi4iKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgICAgICMgc3lzLmV4aXQoMSkKKyAgICAgICAgICAgICAgICAgICAgYnRlcm1fcmVnZXhfbWFwW2J0ZXJtXSA9IHJlZ2V4CisgICAgICAgICAgICAgICAgICAgIHBpbl9wbGFjZW1lbnRbc2lkZV0uYXBwZW5kKGJ0ZXJtKSAgIyB0byBtYWludGFpbiB0aGUgb3JkZXIKKyAgICAKKyAgICB1bm1hdGNoZWRfYnRlcm1zID0gW2J0ZXJtIGZvciBidGVybSBpbiBidGVybXMgaWYgYnRlcm0gbm90IGluIGJ0ZXJtX3JlZ2V4X21hcF0KKyAgICAKKyAgICBpZiBsZW4odW5tYXRjaGVkX2J0ZXJtcykgPiAwOgorICAgICAgICBwcmludCgiV2FybmluZzogU29tZSBwaW5zIHdlcmVuJ3QgbWF0Y2hlZCBieSB0aGUgY29uZmlnIGZpbGUiKQorICAgICAgICBwcmludCgiVGhvc2UgYXJlOiIsIFtidGVybS5nZXROYW1lKCkgZm9yIGJ0ZXJtIGluIHVubWF0Y2hlZF9idGVybXNdKQorICAgICAgICBpZiBUcnVlOgorICAgICAgICAgICAgcHJpbnQoIkFzc2lnbmluZyByYW5kb20gc2lkZXMgdG8gdGhlIGFib3ZlIHBpbnMiKQorICAgICAgICAgICAgZm9yIGJ0ZXJtIGluIHVubWF0Y2hlZF9idGVybXM6CisgICAgICAgICAgICAgICAgcmFuZG9tX3NpZGUgPSByYW5kb20uY2hvaWNlKGxpc3QocGluX3BsYWNlbWVudC5rZXlzKCkpKQorICAgICAgICAgICAgICAgIHBpbl9wbGFjZW1lbnRbcmFuZG9tX3NpZGVdLmFwcGVuZChidGVybSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHN5cy5leGl0KDEpCitlbHNlOgorICAgIGZvciBzaWRlIGluIHBpbl9wbGFjZW1lbnRfY2ZnOgorICAgICAgICBmb3IgcmVnZXggaW4gcGluX3BsYWNlbWVudF9jZmdbc2lkZV06ICAjIGdvaW5nIHRocm91Z2ggdGhlbSBpbiBvcmRlcgorICAgICAgICAgICAgcmVnZXggPSByZWdleFswXSAgIyB0YWtlIGZpcnN0IHZhbHVlCisgICAgICAgICAgICByZWdleCArPSAiJCIgICMgYW5jaG9yCisgICAgICAgICAgICBmb3IgYnRlcm0gaW4gYnRlcm1zOgorICAgICAgICAgICAgICAgICMgaWYgYSBwaW4gbmFtZSBtYXRjaGVzIG11bHRpcGxlIHJlZ2V4ZXMsIHRoZWlyIG9yZGVyIHdpbGwgYmUKKyAgICAgICAgICAgICAgICAjIGFyYml0cmFyeS4gTW9yZSByZWZpbmVtZW50IHJlcXVpcmVzIG1vcmUgc3RyaWN0IHJlZ2V4ZXMgKG9yIGp1c3QKKyAgICAgICAgICAgICAgICAjIHRoZSBleGFjdCBwaW4gbmFtZSkuCisgICAgICAgICAgICAgICAgcGluX25hbWUgPSBidGVybS5nZXROYW1lKCkKKyAgICAgICAgICAgICAgICBpZiByZS5tYXRjaChyZWdleCwgcGluX25hbWUpIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBwcmludCgiRGVidWc6IFNlcmNoaW5nIFBpbiBtYXRjaCIscmVnZXgpCisgICAgICAgICAgICAgICAgICAgIGlmIGJ0ZXJtIGluIGJ0ZXJtX3JlZ2V4X21hcDoKKyAgICAgICAgICAgICAgICAgICAgICAgICNwcmludCgiV2FybmluZzogTXVsdGlwbGUgcmVnZXhlcyBtYXRjaGVkIiwgcGluX25hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgIi4gVGhvc2UgYXJlIiwgYnRlcm1fcmVnZXhfbWFwW2J0ZXJtXSwgImFuZCIsIHJlZ2V4KQorICAgICAgICAgICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAgICAgICAgICAgICAgICAgYnRlcm1fcmVnZXhfbWFwW2J0ZXJtXSA9IHJlZ2V4CisgICAgICAgICAgICAgICAgICAgIHBpbl9wbGFjZW1lbnRbc2lkZV0uYXBwZW5kKGJ0ZXJtKSAgIyB0byBtYWludGFpbiB0aGUgb3JkZXIKKyAgICAKKyAgICB1bm1hdGNoZWRfYnRlcm1zID0gW2J0ZXJtIGZvciBidGVybSBpbiBidGVybXMgaWYgYnRlcm0gbm90IGluIGJ0ZXJtX3JlZ2V4X21hcF0KKyAgICAKKyAgICBpZiBsZW4odW5tYXRjaGVkX2J0ZXJtcykgPiAwOgorICAgICAgICBwcmludCgiV2FybmluZzogU29tZSBwaW5zIHdlcmVuJ3QgbWF0Y2hlZCBieSB0aGUgY29uZmlnIGZpbGUiKQorICAgICAgICBwcmludCgiVGhvc2UgYXJlOiIsIFtidGVybS5nZXROYW1lKCkgZm9yIGJ0ZXJtIGluIHVubWF0Y2hlZF9idGVybXNdKQorICAgICAgICBzeXMuZXhpdCgxKQorCisKK2Fzc2VydCBsZW4oYmxvY2tfdG9wLmdldEJUZXJtcygpKSA9PSBsZW4ocGluX3BsYWNlbWVudFsiI04iXSArIHBpbl9wbGFjZW1lbnRbIiNFIl0gKyBwaW5fcGxhY2VtZW50WyIjUyJdICsgcGluX3BsYWNlbWVudFsiI1ciXSkKKworIyBnZW5lcmF0ZSBzbG90cworCisKK0RJRV9BUkVBID0gYmxvY2tfdG9wLmdldERpZUFyZWEoKQorQkxPQ0tfTExfWCA9IERJRV9BUkVBLnhNaW4oKQorQkxPQ0tfTExfWSA9IERJRV9BUkVBLnlNaW4oKQorQkxPQ0tfVVJfWCA9IERJRV9BUkVBLnhNYXgoKQorQkxPQ0tfVVJfWSA9IERJRV9BUkVBLnlNYXgoKQorCitwcmludCgiQmxvY2sgYm91bmRhcmllczoiLCBCTE9DS19MTF9YLCBCTE9DS19MTF9ZLCBCTE9DS19VUl9YLCBCTE9DS19VUl9ZKQorCisKK29yaWdpbiwgY291bnQsIHN0ZXAgPSBibG9ja190b3AuZmluZFRyYWNrR3JpZChIX0xBWUVSKS5nZXRHcmlkUGF0dGVyblkoMCkKKworIyBTYXZlIHRoZSBob3Jpem9udGFsIG9yaWdpbiBhbmQgc3RlcCAtIERpbmVzaEEKK2hfb3JpZ2luID0gb3JpZ2luCitoX3N0ZXAgICA9IHN0ZXAKKworaF90cmFja3MgPSBnZXRHcmlkKG9yaWdpbiwgY291bnQsIHN0ZXApCisKK29yaWdpbiwgY291bnQsIHN0ZXAgPSBibG9ja190b3AuZmluZFRyYWNrR3JpZChWX0xBWUVSKS5nZXRHcmlkUGF0dGVyblgoMCkKKworIyBTYXZlIHRoZSBob3Jpem9udGFsIG9yaWdpbiBhbmQgc3RlcCAtIERpbmVzaEEKK3Zfb3JpZ2luID0gb3JpZ2luCit2X3N0ZXAgICA9IHN0ZXAKKwordl90cmFja3MgPSBnZXRHcmlkKG9yaWdpbiwgY291bnQsIHN0ZXApCisKK2ZvciByZXYgaW4gcmV2ZXJzZV9hcnI6CisgICAgcGluX3BsYWNlbWVudFtyZXZdLnJldmVyc2UoKQorCitpZihtYW51YWxfcGxhY2VfZmxhZyA9PSBGYWxzZSk6CisgICAgIyBjcmVhdGUgdGhlIHBpbnMKKyAgICAjIG9sZCBsb2dpYworICAgIGZvciBzaWRlIGluIHBpbl9wbGFjZW1lbnQ6CisgICAgICAgIHN0YXJ0ID0gMAorICAgICAgICBpZiBzaWRlIGluIFsiI04iLCAiI1MiXToKKyAgICAgICAgICAgIHNsb3RzID0gZXF1YWxseVNwYWNlZFNlcShsZW4ocGluX3BsYWNlbWVudFtzaWRlXSksIHZfdHJhY2tzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2xvdHMgPSBlcXVhbGx5U3BhY2VkU2VxKGxlbihwaW5fcGxhY2VtZW50W3NpZGVdKSwgaF90cmFja3MpCisgICAgCisgICAgICAgIGFzc2VydCBsZW4oc2xvdHMpID09IGxlbihwaW5fcGxhY2VtZW50W3NpZGVdKQorICAgIAorICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4ocGluX3BsYWNlbWVudFtzaWRlXSkpOgorICAgICAgICAgICAgYnRlcm0gPSBwaW5fcGxhY2VtZW50W3NpZGVdW2ldCisgICAgICAgICAgICBzbG90ID0gc2xvdHNbaV0KKyAgICAKKyAgICAgICAgICAgIHBpbl9uYW1lID0gYnRlcm0uZ2V0TmFtZSgpCisgICAgICAgICAgICBwaW5zID0gYnRlcm0uZ2V0QlBpbnMoKQorICAgICAgICAgICAgaWYgbGVuKHBpbnMpID4gMDoKKyAgICAgICAgICAgICAgICBwcmludCgiV2FybmluZzoiLCBwaW5fbmFtZSwgImFscmVhZHkgaGFzIHNoYXBlcy4gTW9kaWZ5aW5nIHRoZW0iKQorICAgICAgICAgICAgICAgIGFzc2VydCBsZW4ocGlucykgPT0gMQorICAgICAgICAgICAgICAgIHBpbl9icGluID0gcGluc1swXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwaW5fYnBpbiA9IG9kYi5kYkJQaW5fY3JlYXRlKGJ0ZXJtKQorICAgIAorICAgICAgICAgICAgcHJpbnQoIkRpbmVzaDogUGxhY2luZyBQYWQ6IiAscGluX25hbWUsICIgQXQgU2lkZTogIiwgc2lkZSwgIiBTbG90OiAiLCBzbG90KQorICAgICAgICAgICAgcGluX2JwaW4uc2V0UGxhY2VtZW50U3RhdHVzKCJQTEFDRUQiKQorICAgIAorICAgICAgICAgICAgaWYgc2lkZSBpbiBbIiNOIiwgIiNTIl06CisgICAgICAgICAgICAgICAgcmVjdCA9IG9kYi5SZWN0KDAsIDAsIFZfV0lEVEgsIExFTkdUSCtWX0VYVEVOU0lPTikKKyAgICAgICAgICAgICAgICBpZiBzaWRlID09ICIjTiI6CisgICAgICAgICAgICAgICAgICAgIHkgPSBCTE9DS19VUl9ZLUxFTkdUSAorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHkgPSBCTE9DS19MTF9ZLVZfRVhURU5TSU9OCisgICAgICAgICAgICAgICAgcmVjdC5tb3ZlVG8oc2xvdC1WX1dJRFRILy8yLCB5KQorICAgICAgICAgICAgICAgIG9kYi5kYkJveF9jcmVhdGUocGluX2JwaW4sIFZfTEFZRVIsICpyZWN0LmxsKCksICpyZWN0LnVyKCkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJlY3QgPSBvZGIuUmVjdCgwLCAwLCBMRU5HVEgrSF9FWFRFTlNJT04sIEhfV0lEVEgpCisgICAgICAgICAgICAgICAgaWYgc2lkZSA9PSAiI0UiOgorICAgICAgICAgICAgICAgICAgICB4ID0gQkxPQ0tfVVJfWC1MRU5HVEgKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICB4ID0gQkxPQ0tfTExfWC1IX0VYVEVOU0lPTgorICAgICAgICAgICAgICAgIHJlY3QubW92ZVRvKHgsIHNsb3QtSF9XSURUSC8vMikKKyAgICAgICAgICAgICAgICBvZGIuZGJCb3hfY3JlYXRlKHBpbl9icGluLCBIX0xBWUVSLCAqcmVjdC5sbCgpLCAqcmVjdC51cigpKQorZWxzZToKKyAgICAjTmV3IExvZ2ljLCBNYW51YWwgUGluIFBsYWNlbWVudCAtIERpbmVzaCBBCisgICAgI3ByaW50KCJBbGxvd2VkIFZUcmFja3MiLHZfdHJhY2tzKQorICAgICNwcmludCgiQWxsb3dlZCBoVHJhY2tzIixoX3RyYWNrcykKKworICAgIGZvciBzaWRlIGluIHBpbl9wbGFjZW1lbnQ6CisKKyAgICAgICAgaWYobGVuKHBpbl9wbGFjZW1lbnRbc2lkZV0pICE9IGxlbihwaW5fcGxhY2VtZW50X2NmZ1tzaWRlXSkpOgorICAgICAgICAgICAgcHJpbnQoIkVSUk9SIDogQXQgU2lkZToiLCBzaWRlLCAiIFRvdGFsIFBpbiBEZWZpbmVkICIsbGVuKHBpbl9wbGFjZW1lbnRfY2ZnW3NpZGVdKSwgIk1vcmUgdGhhbiBhdmFpbGFibGU6IixsZW4ocGluX3BsYWNlbWVudFtzaWRlXSkpCisgICAgICAgICAgICAKKyAgICAgICAgI2NoZWNrIGRlZmluZWQgcGFkIGFyZSBtb3JlIHRoYW4gYXZhaWJhbGUgb25lCisgICAgICAgIGFzc2VydCBsZW4ocGluX3BsYWNlbWVudFtzaWRlXSkgPT0gbGVuKHBpbl9wbGFjZW1lbnRfY2ZnW3NpZGVdKQorICAgICAgICBzdGFydCA9IDAKKyAgICAKKyAgICAgICAgc3RhcnRfbG9jID0gMAorICAgICAgICBwYWRfcG9zICAgPSAwCisgICAgICAgIHNsb3RfcHJlID0gMAorICAgICAgICAjRGluZXNoOiBHaXZlIFN0ZXAgTXVsdGlwbGVyIHNpemUgKjIgIGZvciBiZXR0ZXIgcGFkIHBsYWNlbWVudAorICAgICAgICBtdWx0aXBsaWVyPSAyCisgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihwaW5fcGxhY2VtZW50X2NmZ1tzaWRlXSkpOgorICAgICAgICAgICAgI0RpbmVzaDogTXVsdGlwbHkgdGhlIG9mZnNldCBieSAxMDAwIGZvciBtaWNybyBjb252ZXJzaW9uCisgICAgICAgICAgICBpZihsZW4ocGluX3BsYWNlbWVudF9jZmdbc2lkZV1baV0pID4gMSk6CisgICAgICAgICAgICAgICAgc3RhcnRfbG9jID0gaW50KHBpbl9wbGFjZW1lbnRfY2ZnW3NpZGVdW2ldWzFdKQorICAgICAgICAgICAgaWYobGVuKHBpbl9wbGFjZW1lbnRfY2ZnW3NpZGVdW2ldKSA+IDIpOgorICAgICAgICAgICAgICAgIHBhZF9wb3MgICA9IGludChwaW5fcGxhY2VtZW50X2NmZ1tzaWRlXVtpXVsyXSkKKyAgICAgICAgICAgIGlmKGxlbihwaW5fcGxhY2VtZW50X2NmZ1tzaWRlXVtpXSkgPiAzKToKKyAgICAgICAgICAgICAgICBtdWx0aXBsaWVyID0gaW50KHBpbl9wbGFjZW1lbnRfY2ZnW3NpZGVdW2ldWzNdKQorCisgICAgICAgICAgICBpZiBzaWRlIGluIFsiI04iLCAiI1MiXToKKyAgICAgICAgICAgICAgICBzbG90dCA9IHN0YXJ0X2xvYyoxMDAwK2ludCh2X29yaWdpbikrKGludCh2X3N0ZXApICogcGFkX3BvcyAqIG11bHRpcGxpZXIpCisgICAgICAgICAgICAgICAgc2xvdCA9ZmluZFNsb3Qoc2xvdHQsdl90cmFja3MpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNsb3R0ID0gc3RhcnRfbG9jKjEwMDAraW50KGhfb3JpZ2luKSsoaW50KGhfc3RlcCkgKiBwYWRfcG9zICogbXVsdGlwbGllcikKKyAgICAgICAgICAgICAgICBzbG90ID1maW5kU2xvdChzbG90dCxoX3RyYWNrcykKKyAgICAgICAgICAKKyAgICAgICAgICAgIHBhZF9wb3MgKz0xCisgICAgICAgICAgICBidGVybSA9IHBpbl9wbGFjZW1lbnRbc2lkZV1baV0KKyAgICAKKyAgICAgICAgICAgIHBpbl9uYW1lID0gYnRlcm0uZ2V0TmFtZSgpCisgICAgICAgICAgICBwaW5zID0gYnRlcm0uZ2V0QlBpbnMoKQorICAgICAgICAgICAgaWYgbGVuKHBpbnMpID4gMDoKKyAgICAgICAgICAgICAgICBwcmludCgiV2FybmluZzoiLCBwaW5fbmFtZSwgImFscmVhZHkgaGFzIHNoYXBlcy4gTW9kaWZ5aW5nIHRoZW0iKQorICAgICAgICAgICAgICAgIGFzc2VydCBsZW4ocGlucykgPT0gMQorICAgICAgICAgICAgICAgIHBpbl9icGluID0gcGluc1swXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwaW5fYnBpbiA9IG9kYi5kYkJQaW5fY3JlYXRlKGJ0ZXJtKQorCisgICAgICAgICAgICBpZihzbG90IDwgc2xvdF9wcmUpOgorICAgICAgICAgICAgICAgIHByaW50KCJFUlJPUjoiLCAiQ3VycmVudCBQYWQ6IiwgcGluX25hbWUsICIgU2xvdDoiICwgc2xvdCwgIiBpcyBsZXNzIHRoYW4gUHJldmlvdXMgU2xvdDoiLHNsb3RfcHJlKQorICAgICAgICAgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICAgICAgICAgIHNsb3RfcHJlID0gc2xvdAorCisgICAgICAgICAgICBwcmludCgiRGluZXNoOiBQbGFjaW5nIFBhZDoiICxwaW5fbmFtZSwgIiBBdCBTaWRlOiAiLCBzaWRlLCAiIFNsb3Q6ICIsIHNsb3QpCisgICAgICAgICAgICBwaW5fYnBpbi5zZXRQbGFjZW1lbnRTdGF0dXMoIlBMQUNFRCIpCisgICAgCisgICAgICAgICAgICBpZiBzaWRlIGluIFsiI04iLCAiI1MiXToKKyAgICAgICAgICAgICAgICByZWN0ID0gb2RiLlJlY3QoMCwgMCwgVl9XSURUSCwgTEVOR1RIK1ZfRVhURU5TSU9OKQorICAgICAgICAgICAgICAgIGlmIHNpZGUgPT0gIiNOIjoKKyAgICAgICAgICAgICAgICAgICAgeSA9IEJMT0NLX1VSX1ktTEVOR1RICisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgeSA9IEJMT0NLX0xMX1ktVl9FWFRFTlNJT04KKyAgICAgICAgICAgICAgICByZWN0Lm1vdmVUbyhzbG90LVZfV0lEVEgvLzIsIHkpCisgICAgICAgICAgICAgICAgb2RiLmRiQm94X2NyZWF0ZShwaW5fYnBpbiwgVl9MQVlFUiwgKnJlY3QubGwoKSwgKnJlY3QudXIoKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmVjdCA9IG9kYi5SZWN0KDAsIDAsIExFTkdUSCtIX0VYVEVOU0lPTiwgSF9XSURUSCkKKyAgICAgICAgICAgICAgICBpZiBzaWRlID09ICIjRSI6CisgICAgICAgICAgICAgICAgICAgIHggPSBCTE9DS19VUl9YLUxFTkdUSAorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHggPSBCTE9DS19MTF9YLUhfRVhURU5TSU9OCisgICAgICAgICAgICAgICAgcmVjdC5tb3ZlVG8oeCwgc2xvdC1IX1dJRFRILy8yKQorICAgICAgICAgICAgICAgIG9kYi5kYkJveF9jcmVhdGUocGluX2JwaW4sIEhfTEFZRVIsICpyZWN0LmxsKCksICpyZWN0LnVyKCkpCisgICAgCisKK3ByaW50KCJXcml0aW5nIiwgb3V0cHV0X2RlZl9maWxlX25hbWUpCitvZGIud3JpdGVfZGVmKGJsb2NrX3RvcCwgb3V0cHV0X2RlZl9maWxlX25hbWUpCmRpZmYgLS1naXQgYS9oYWNrcy9zcmMvb3BlbmxhbmUvc3ludGgudGNsIGIvaGFja3Mvc3JjL29wZW5sYW5lL3N5bnRoLnRjbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yY2YxMDAzCi0tLSAvZGV2L251bGwKKysrIGIvaGFja3Mvc3JjL29wZW5sYW5lL3N5bnRoLnRjbApAQCAtMCwwICsxLDM3MyBAQAorIyBDb3B5cmlnaHQgMjAyMCBFZmFibGVzcyBDb3Jwb3JhdGlvbgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworIyBpbnB1dHMgZXhwZWN0ZWQgYXMgZW52IHZhcnMKKyNzZXQgb3B0ICQ6OmVudihTWU5USF9PUFQpCitzZXQgYnVmZmVyaW5nICQ6OmVudihTWU5USF9CVUZGRVJJTkcpCitzZXQgc2l6aW5nICQ6OmVudihTWU5USF9TSVpJTkcpCisKK3lvc3lzIC1pbXBvcnQKKworc2V0IHZ0b3AgJDo6ZW52KERFU0lHTl9OQU1FKQorI3NldCBzZGNfZmlsZSAkOjplbnYoU0RDX0ZJTEUpCitzZXQgc2NsaWIgJDo6ZW52KExJQl9TWU5USCkKKworaWYgeyBbaW5mbyBleGlzdHMgOjplbnYoU1lOVEhfREVGSU5FUykgXSB9IHsKKwlmb3JlYWNoIGRlZmluZSAkOjplbnYoU1lOVEhfREVGSU5FUykgeworCQlsb2cgIkRlZmluaW5nICRkZWZpbmUiCisJCXZlcmlsb2dfZGVmaW5lcyAtRCRkZWZpbmUKKwl9Cit9CisKK3NldCB2SWRpcnNBcmdzICIiCitpZiB7W2luZm8gZXhpc3QgOjplbnYoVkVSSUxPR19JTkNMVURFX0RJUlMpXX0geworCWZvcmVhY2ggZGlyICQ6OmVudihWRVJJTE9HX0lOQ0xVREVfRElSUykgeworCQlsYXBwZW5kIHZJZGlyc0FyZ3MgIi1JJGRpciIKKwl9CisJc2V0IHZJZGlyc0FyZ3MgW2pvaW4gJHZJZGlyc0FyZ3NdCit9CisKK2lmIHsgJDo6ZW52KFNZTlRIX1JFQURfQkxBQ0tCT1hfTElCKSB9IHsKKwlsb2cgIlJlYWRpbmcgJDo6ZW52KExJQl9TWU5USF9DT01QTEVURV9OT19QRykgYXMgYSBibGFja2JveCIKKwlmb3JlYWNoIGxpYiAkOjplbnYoTElCX1NZTlRIX0NPTVBMRVRFX05PX1BHKSB7CisJCXJlYWRfbGliZXJ0eSAtbGliIC1pZ25vcmVfbWlzc19kaXIgLXNldGF0dHIgYmxhY2tib3ggJGxpYgorCX0KK30KKworaWYgeyBbaW5mbyBleGlzdHMgOjplbnYoRVhUUkFfTElCUykgXSB9IHsKKwlmb3JlYWNoIGxpYiAkOjplbnYoRVhUUkFfTElCUykgeworCQlyZWFkX2xpYmVydHkgLWxpYiAtaWdub3JlX21pc3NfZGlyIC1zZXRhdHRyIGJsYWNrYm94ICRsaWIKKwl9Cit9CisKK2lmIHsgW2luZm8gZXhpc3RzIDo6ZW52KFZFUklMT0dfRklMRVNfQkxBQ0tCT1gpXSB9IHsKKwlmb3JlYWNoIHZlcmlsb2dfZmlsZSAkOjplbnYoVkVSSUxPR19GSUxFU19CTEFDS0JPWCkgeworCQlyZWFkX3Zlcmlsb2cgLXN2IC1saWIgeyp9JHZJZGlyc0FyZ3MgJHZlcmlsb2dfZmlsZQorCX0KK30KKworCisjIG5zIGV4cGVjdGVkIChpbiBzZGMgYXMgd2VsbCkKK3NldCBjbG9ja19wZXJpb2QgW2V4cHIgeyQ6OmVudihDTE9DS19QRVJJT0QpKjEwMDB9XQorCitzZXQgZHJpdmVyICAkOjplbnYoU1lOVEhfRFJJVklOR19DRUxMKQorc2V0IGNsb2FkICAgJDo6ZW52KFNZTlRIX0NBUF9MT0FEKQorIyBpbnB1dCBwaW4gY2FwIG9mIElOXzNWWDgKK3NldCBtYXhfRk8gJDo6ZW52KFNZTlRIX01BWF9GQU5PVVQpCitpZiB7IVtpbmZvIGV4aXN0IDo6ZW52KFNZTlRIX01BWF9UUkFOKV19IHsKKwlzZXQgOjplbnYoU1lOVEhfTUFYX1RSQU4pIFtleHByIHswLjEqJGNsb2NrX3BlcmlvZH1dCit9IGVsc2UgeworCXNldCA6OmVudihTWU5USF9NQVhfVFJBTikgW2V4cHIgeyQ6OmVudihTWU5USF9NQVhfVFJBTikgKiAxMDAwfV0KK30KK3NldCBtYXhfVHJhbiAkOjplbnYoU1lOVEhfTUFYX1RSQU4pCisKKworIyBNYXBwaW5nIHBhcmFtZXRlcnMKK3NldCBBX2ZhY3RvciAgMC4wMAorc2V0IEJfZmFjdG9yICAwLjg4CitzZXQgRl9mYWN0b3IgIDAuMDAKKworIyBEb24ndCBjaGFuZ2UgdGhlc2UgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZworc2V0IHN0YXRfZXh0ICAgICIuc3RhdC5ycHQiCitzZXQgY2hrX2V4dCAgICAiLmNoay5ycHQiCitzZXQgZ2xfZXh0ICAgICAgIi5nbC52Igorc2V0IGNvbnN0cl9leHQgICIuJGNsb2NrX3BlcmlvZC5jb25zdHIiCitzZXQgdGltaW5nX2V4dCAgIi50aW1pbmcudHh0Igorc2V0IGFiY19leHQgICAgICIuYWJjIgorCisKKyMgZ2V0IG9sZCBzZGMsIGFkZCBsaWJyYXJ5IHNwZWNpZmljIHN0dWZmIGZvciBhYmMgc2NyaXB0cworc2V0IHNkY19maWxlICQ6OmVudih5b3N5c190bXBfZmlsZV90YWcpLnNkYworc2V0IG91dGZpbGUgW29wZW4gJHtzZGNfZmlsZX0gd10KKyNwdXRzICRvdXRmaWxlICRzZGNfZGF0YQorcHV0cyAkb3V0ZmlsZSAic2V0X2RyaXZpbmdfY2VsbCAke2RyaXZlcn0iCitwdXRzICRvdXRmaWxlICJzZXRfbG9hZCAke2Nsb2FkfSIKK2Nsb3NlICRvdXRmaWxlCisKKworIyBBQkMgU2NyaXBzCitzZXQgYWJjX3JzX0sgICAgInJlc3ViLC1LLCIKK3NldCBhYmNfcnMgICAgICAicmVzdWIiCitzZXQgYWJjX3JzeiAgICAgInJlc3ViLC16Igorc2V0IGFiY19yd19LICAgICJyZXdyaXRlLC1LLCIKK3NldCBhYmNfcncgICAgICAicmV3cml0ZSIKK3NldCBhYmNfcnd6ICAgICAicmV3cml0ZSwteiIKK3NldCBhYmNfcmYgICAgICAicmVmYWN0b3IiCitzZXQgYWJjX3JmeiAgICAgInJlZmFjdG9yLC16Igorc2V0IGFiY19iICAgICAgICJiYWxhbmNlIgorCitzZXQgYWJjX3Jlc3luMiAgICAgICAgIiR7YWJjX2J9OyAke2FiY19yd307ICR7YWJjX3JmfTsgJHthYmNfYn07ICR7YWJjX3J3fTsgJHthYmNfcnd6fTsgJHthYmNfYn07ICR7YWJjX3Jmen07ICR7YWJjX3J3en07ICR7YWJjX2J9Igorc2V0IGFiY19zaGFyZSAgICAgICAgICJzdHJhc2g7IG11bHRpLC1tOyAke2FiY19yZXN5bjJ9Igorc2V0IGFiY19yZXN5bjJhICAgICAgICIke2FiY19ifTske2FiY19yd307JHthYmNfYn07JHthYmNfcnd9OyR7YWJjX3J3en07JHthYmNfYn07JHthYmNfcnd6fTske2FiY19ifSIKK3NldCBhYmNfcmVzeW4zICAgICAgICAiYmFsYW5jZTtyZXN1YjtyZXN1YiwtSyw2O2JhbGFuY2U7cmVzdWIsLXo7cmVzdWIsLXosLUssNjtiYWxhbmNlO3Jlc3ViLC16LC1LLDU7YmFsYW5jZSIKK3NldCBhYmNfcmVzeW4ycnMgICAgICAiJHthYmNfYn07JHthYmNfcnNfS30sNjske2FiY19yd307JHthYmNfcnNfS30sNiwtTiwyOyR7YWJjX3JmfTske2FiY19yc19LfSw4OyR7YWJjX3J3fTske2FiY19yc19LfSwxMDske2FiY19yd3p9OyR7YWJjX3JzX0t9LDEwLC1OLDI7JHthYmNfYn0sJHthYmNfcnNfS30sMTI7JHthYmNfcmZ6fTske2FiY19yc19LfSwxMiwtTiwyOyR7YWJjX3J3en07JHthYmNfYn0iCisKK3NldCBhYmNfY2hvaWNlICAgICAgICAiZnJhaWdfc3RvcmU7ICR7YWJjX3Jlc3luMn07IGZyYWlnX3N0b3JlOyAke2FiY19yZXN5bjJ9OyBmcmFpZ19zdG9yZTsgZnJhaWdfcmVzdG9yZSIKK3NldCBhYmNfY2hvaWNlMiAgICAgICJmcmFpZ19zdG9yZTsgYmFsYW5jZTsgZnJhaWdfc3RvcmU7ICR7YWJjX3Jlc3luMn07IGZyYWlnX3N0b3JlOyAke2FiY19yZXN5bjJ9OyBmcmFpZ19zdG9yZTsgJHthYmNfcmVzeW4yfTsgZnJhaWdfc3RvcmU7IGZyYWlnX3Jlc3RvcmUiCisKK3NldCBhYmNfbWFwX29sZF9jbnQJCQkibWFwLC1wLC1hLC1CLDAuMiwtQSwwLjksLU0sMCIKK3NldCBhYmNfbWFwX29sZF9kbHkgICAgICAgICAibWFwLC1wLC1CLDAuMiwtQSwwLjksLU0sMCIKK3NldCBhYmNfcmV0aW1lX2FyZWEgICAgICAgICAicmV0aW1lLC1ELHtEfSwtTSw1Igorc2V0IGFiY19yZXRpbWVfZGx5ICAgICAgICAgICJyZXRpbWUsLUQse0R9LC1NLDYiCitzZXQgYWJjX21hcF9uZXdfYXJlYSAgICAgICAgImFtYXAsLW0sLVEsMC4xLC1GLDIwLC1BLDIwLC1DLDUwMDAiCisKK3NldCBhYmNfYXJlYV9yZWNvdmVyeV8xICAgICAgICIke2FiY19jaG9pY2V9OyBtYXA7Igorc2V0IGFiY19hcmVhX3JlY292ZXJ5XzIgICAgICAgIiR7YWJjX2Nob2ljZTJ9OyBtYXA7IgorCitzZXQgbWFwX29sZF9jbnQJCQkgICAgIm1hcCwtcCwtYSwtQiwwLjIsLUEsMC45LC1NLDAiCitzZXQgbWFwX29sZF9kbHkJCQkgICAgIm1hcCwtcCwtQiwwLjIsLUEsMC45LC1NLDAiCitzZXQgYWJjX3JldGltZV9hcmVhICAgCSJyZXRpbWUsLUQse0R9LC1NLDUiCitzZXQgYWJjX3JldGltZV9kbHkgICAgCSJyZXRpbWUsLUQse0R9LC1NLDYiCitzZXQgYWJjX21hcF9uZXdfYXJlYSAgCSJhbWFwLC1tLC1RLDAuMSwtRiwyMCwtQSwyMCwtQyw1MDAwIgorCitpZiB7JGJ1ZmZlcmluZz09MX0geworCXNldCBhYmNfZmluZV90dW5lCQkiYnVmZmVyLC1OLCR7bWF4X0ZPfSwtUywke21heF9UcmFufTt1cHNpemUse0R9O2Ruc2l6ZSx7RH0iCit9IGVsc2VpZiB7JHNpemluZ30geworCXNldCBhYmNfZmluZV90dW5lICAgICAgICJ1cHNpemUse0R9O2Ruc2l6ZSx7RH0iCit9IGVsc2UgeworCXNldCBhYmNfZmluZV90dW5lICAgICAgICIiCit9CisKKworc2V0IGRlbGF5X3NjcmlwdHMgW2xpc3QgXAorCSIrcmVhZF9jb25zdHIsJHtzZGNfZmlsZX07Zng7bWZzO3N0cmFzaDtyZWZhY3Rvcjske2FiY19yZXN5bjJ9OyR7YWJjX3JldGltZV9kbHl9OyBzY2xlYW51cDske2FiY19tYXBfb2xkX2RseX07cmV0aW1lLC1ELHtEfTske2FiY19maW5lX3R1bmV9O3N0aW1lLC1wO3ByaW50X3N0YXRzIC1tIiBcCisJXAorCSIrcmVhZF9jb25zdHIsJHtzZGNfZmlsZX07Zng7bWZzO3N0cmFzaDtyZWZhY3Rvcjske2FiY19yZXN5bjJ9OyR7YWJjX3JldGltZV9kbHl9OyBzY2xlYW51cDske2FiY19jaG9pY2UyfTske2FiY19tYXBfb2xkX2RseX07JHthYmNfYXJlYV9yZWNvdmVyeV8yfTsgcmV0aW1lLC1ELHtEfTske2FiY19maW5lX3R1bmV9O3N0aW1lLC1wO3ByaW50X3N0YXRzIC1tIiBcCisJXAorCSIrcmVhZF9jb25zdHIsJHtzZGNfZmlsZX07Zng7bWZzO3N0cmFzaDtyZWZhY3Rvcjske2FiY19yZXN5bjJ9OyR7YWJjX3JldGltZV9kbHl9OyBzY2xlYW51cDske2FiY19jaG9pY2V9OyR7YWJjX21hcF9vbGRfZGx5fTske2FiY19hcmVhX3JlY292ZXJ5XzF9OyByZXRpbWUsLUQse0R9OyR7YWJjX2ZpbmVfdHVuZX07c3RpbWUsLXA7cHJpbnRfc3RhdHMgLW0iIFwKKwlcCisJIityZWFkX2NvbnN0ciwke3NkY19maWxlfTtmeDttZnM7c3RyYXNoO3JlZmFjdG9yOyR7YWJjX3Jlc3luMn07JHthYmNfcmV0aW1lX2FyZWF9O3NjbGVhbnVwOyR7YWJjX2Nob2ljZTJ9OyR7YWJjX21hcF9uZXdfYXJlYX07JHthYmNfY2hvaWNlMn07JHthYmNfbWFwX29sZF9kbHl9O3JldGltZSwtRCx7RH07JHthYmNfZmluZV90dW5lfTtzdGltZSwtcDtwcmludF9zdGF0cyAtbSIgXAorCV0KKworc2V0IGFyZWFfc2NyaXB0cyBbbGlzdCBcCisJIityZWFkX2NvbnN0ciwke3NkY19maWxlfTtmeDttZnM7c3RyYXNoO3JlZmFjdG9yOyR7YWJjX3Jlc3luMn07JHthYmNfcmV0aW1lX2FyZWF9O3NjbGVhbnVwOyR7YWJjX2Nob2ljZTJ9OyR7YWJjX21hcF9uZXdfYXJlYX07cmV0aW1lLC1ELHtEfTske2FiY19maW5lX3R1bmV9O3N0aW1lLC1wO3ByaW50X3N0YXRzIC1tIiBcCisJXAorCSIrcmVhZF9jb25zdHIsJHtzZGNfZmlsZX07Zng7bWZzO3N0cmFzaDtyZWZhY3Rvcjske2FiY19yZXN5bjJ9OyR7YWJjX3JldGltZV9hcmVhfTtzY2xlYW51cDske2FiY19jaG9pY2UyfTske2FiY19tYXBfbmV3X2FyZWF9OyR7YWJjX2Nob2ljZTJ9OyR7YWJjX21hcF9uZXdfYXJlYX07cmV0aW1lLC1ELHtEfTske2FiY19maW5lX3R1bmV9O3N0aW1lLC1wO3ByaW50X3N0YXRzIC1tIiBcCisJXAorCSIrcmVhZF9jb25zdHIsJHtzZGNfZmlsZX07Zng7bWZzO3N0cmFzaDtyZWZhY3Rvcjske2FiY19jaG9pY2UyfTske2FiY19yZXRpbWVfYXJlYX07c2NsZWFudXA7JHthYmNfY2hvaWNlMn07JHthYmNfbWFwX25ld19hcmVhfTske2FiY19jaG9pY2UyfTske2FiY19tYXBfbmV3X2FyZWF9O3JldGltZSwtRCx7RH07JHthYmNfZmluZV90dW5lfTtzdGltZSwtcDtwcmludF9zdGF0cyAtbSIgXAorCV0KKworc2V0IGFsbF9zY3JpcHRzIFtsaXN0IHsqfSRkZWxheV9zY3JpcHRzIHsqfSRhcmVhX3NjcmlwdHNdCisKK3NldCBzdHJhdGVneV9wYXJ0cyBbc3BsaXQgJDo6ZW52KFNZTlRIX1NUUkFURUdZKV0KKworcHJvYyBzeW50aF9zdHJhdGVneV9mb3JtYXRfZXJyIHsgfSB7CisJdXB2YXIgYXJlYV9zY3JpcHRzIGFyZWFfc2NyaXB0cworCXVwdmFyIGRlbGF5X3NjcmlwdHMgZGVsYXlfc2NyaXB0cworCWxvZyAtc3RkZXJyICJcW0VSUk9SXSBNaXNmb3JtYXR0ZWQgU1lOVEhfU1RSQVRFR1kgKFwiJDo6ZW52KFNZTlRIX1NUUkFURUdZKVwiKS4iCisJbG9nIC1zdGRlcnIgIlxbRVJST1JdIENvcnJlY3QgZm9ybWF0IGlzIFwiREVMQVl8QVJFQSAwLVtleHByIFtsbGVuZ3RoICRkZWxheV9zY3JpcHRzXS0xXXwwLVtleHByIFtsbGVuZ3RoICRhcmVhX3NjcmlwdHNdLTFdXCIuIgorCWV4aXQgMQorfQorCitpZiB7IFtsbGVuZ3RoICRzdHJhdGVneV9wYXJ0c10gIT0gMiB9IHsKKwlzeW50aF9zdHJhdGVneV9mb3JtYXRfZXJyCit9CisKK3NldCBzdHJhdGVneV90eXBlIFtsaW5kZXggJHN0cmF0ZWd5X3BhcnRzIDBdCitzZXQgc3RyYXRlZ3lfdHlwZV9pZHggW2xpbmRleCAkc3RyYXRlZ3lfcGFydHMgMV0KKworaWYgeyAkc3RyYXRlZ3lfdHlwZSAhPSAiQVJFQSIgJiYgJHN0cmF0ZWd5X3R5cGUgIT0gIkRFTEFZIiB9IHsKKwlsb2cgLXN0ZGVyciAiXFtFUlJPUl0gQVJFQXxERUxBWSB0b2tlbnMgbm90IGZvdW5kLiAoJHN0cmF0ZWd5X3R5cGUpIgorCXN5bnRoX3N0cmF0ZWd5X2Zvcm1hdF9lcnIKK30KKworaWYgeyAkc3RyYXRlZ3lfdHlwZSA9PSAiREVMQVkiICYmICRzdHJhdGVneV90eXBlX2lkeCA+PSBbbGxlbmd0aCAkZGVsYXlfc2NyaXB0c10gfSB7CisJbG9nIC1zdGRlcnIgIlxbRVJST1JdIHN0cmF0ZWd5IGluZGV4ICgkc3RyYXRlZ3lfdHlwZV9pZHgpIGlzIHRvbyBoaWdoLiIKKwlzeW50aF9zdHJhdGVneV9mb3JtYXRfZXJyCit9CisKK2lmIHsgJHN0cmF0ZWd5X3R5cGUgPT0gIkFSRUEiICYmICRzdHJhdGVneV90eXBlX2lkeCA+PSBbbGxlbmd0aCAkYXJlYV9zY3JpcHRzXSB9IHsKKwlsb2cgLXN0ZGVyciAiXFtFUlJPUl0gc3RyYXRlZ3kgaW5kZXggKCRzdHJhdGVneV90eXBlX2lkeCkgaXMgdG9vIGhpZ2guIgorCXN5bnRoX3N0cmF0ZWd5X2Zvcm1hdF9lcnIKK30KKworaWYgeyAkc3RyYXRlZ3lfdHlwZSA9PSAiREVMQVkiIH0geworCXNldCBzdHJhdGVneSAkc3RyYXRlZ3lfdHlwZV9pZHgKK30gZWxzZSB7CisJc2V0IHN0cmF0ZWd5IFtleHByIHtbbGxlbmd0aCAkZGVsYXlfc2NyaXB0c10rJHN0cmF0ZWd5X3R5cGVfaWR4fV0KK30KKworc2V0IGFkZGVyX3R5cGUgJDo6ZW52KFNZTlRIX0FEREVSX1RZUEUpCitpZiB7ICEoJGFkZGVyX3R5cGUgaW4gW2xpc3QgIllPU1lTIiAiRkEiICJSQ0EiICJDU0EiXSkgfSB7CisJbG9nIC1zdGRlcnIgIlxbRVJST1JdIE1pc2Zvcm1hdHRlZCBTWU5USF9BRERFUl9UWVBFIChcIiQ6OmVudihTWU5USF9BRERFUl9UWVBFKVwiKS4iCisJbG9nIC1zdGRlcnIgIlxbRVJST1JdIENvcnJlY3QgZm9ybWF0IGlzIFwiWU9TWVN8RkF8UkNBfENTQVwiLiIKKwlleGl0IDEKK30KKworZm9yIHsgc2V0IGkgMCB9IHsgJGkgPCBbbGxlbmd0aCAkOjplbnYoVkVSSUxPR19GSUxFUyldIH0geyBpbmNyIGkgfSB7CisJcmVhZF92ZXJpbG9nIC1zdiB7Kn0kdklkaXJzQXJncyBbbGluZGV4ICQ6OmVudihWRVJJTE9HX0ZJTEVTKSAkaV0KK30KKyMjIE1vZHVsZSBsZXZlbCBwYXJhbWV0ZXIgb3ZlcmlkZSAtIERpbmVzaAoraWYgeyBbaW5mbyBleGlzdHMgOjplbnYoU1lOVEhfUEFSQU1TKSBdIH0geworICAgIGxvZyAiUmVhZGluZyAkOjplbnYoU1lOVEhfUEFSQU1TKSBhcyBhIHBhcmFtZXRlciIKKyAgICBzZXQgcmVjb3JkcyBbc3BsaXQgJDo6ZW52KFNZTlRIX1BBUkFNUykgIiwiXQorICAgIGZvcmVhY2ggcmVjICRyZWNvcmRzIHsKKyAgICAgICBjaHBhcmFtIC1zZXQgW2xpbmRleCAkcmVjIDBdIFtsaW5kZXggJHJlYyAxXSAkdnRvcAorICAgIH0KK30gZWxzZSB7CisJbG9nICJObyBwYXJhbWV0ZXIgZGVmaW5lIGZvdW5kIgorfQorCitzZWxlY3QgLW1vZHVsZSAkdnRvcAorCitzaG93IC1mb3JtYXQgZG90IC1wcmVmaXggJDo6ZW52KFRNUF9ESVIpL3N5bnRoZXNpcy9oaWVyYXJjaHkKK3NlbGVjdCAtY2xlYXIKKworaGllcmFyY2h5IC1jaGVjayAtdG9wICR2dG9wCisKKyMgSW5mZXIgdHJpLXN0YXRlIGJ1ZmZlcnMuCitzZXQgdGJ1Zl9tYXAgZmFsc2UKK2lmIHsgW2luZm8gZXhpc3RzIDo6ZW52KFRSSVNUQVRFX0JVRkZFUl9NQVApXSB9IHsKKyAgICAgICAgaWYgeyBbZmlsZSBleGlzdHMgJDo6ZW52KFRSSVNUQVRFX0JVRkZFUl9NQVApXSB9IHsKKyAgICAgICAgICAgICAgICBzZXQgdGJ1Zl9tYXAgdHJ1ZQorICAgICAgICAgICAgICAgIHRyaWJ1ZgorICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGxvZyAiV0FSTklORzogVFJJU1RBVEVfQlVGRkVSX01BUCBpcyBkZWZpbmVkIGJ1dCBjb3VsZCBub3QgYmUgZm91bmQ6ICQ6OmVudihUUklTVEFURV9CVUZGRVJfTUFQKSIKKyAgICAgICAgfQorfQorCisjIGhhbmRsZSB0ZWNobm9sb2d5IG1hcHBpbmcgb2YgcmNhIGFuZCBjc2EgYWRkZXJzCitpZiB7ICRhZGRlcl90eXBlID09ICJSQ0EifSB7CisJaWYgeyBbaW5mbyBleGlzdHMgOjplbnYoUklQUExFX0NBUlJZX0FEREVSX01BUCldICYmIFtmaWxlIGV4aXN0cyAkOjplbnYoUklQUExFX0NBUlJZX0FEREVSX01BUCldIH0geworCQl0ZWNobWFwIC1tYXAgJDo6ZW52KFJJUFBMRV9DQVJSWV9BRERFUl9NQVApCisJfQorfSBlbHNlaWYgeyAkYWRkZXJfdHlwZSA9PSAiQ1NBIn0geworCWlmIHsgW2luZm8gZXhpc3RzIDo6ZW52KENBUlJZX1NFTEVDVF9BRERFUl9NQVApXSAmJiBbZmlsZSBleGlzdHMgJDo6ZW52KENBUlJZX1NFTEVDVF9BRERFUl9NQVApXSB9IHsKKwkJdGVjaG1hcCAtbWFwICQ6OmVudihDQVJSWV9TRUxFQ1RfQURERVJfTUFQKQorCX0KK30KKworaWYgeyAkOjplbnYoU1lOVEhfTk9fRkxBVCkgfSB7CisJc3ludGggLXRvcCAkdnRvcAorfSBlbHNlIHsKKwlzeW50aCAtdG9wICR2dG9wIC1mbGF0dGVuCit9CisKKyMgd3JpdGUgYSBwb3N0IHRlY2htYXAgZG90IGZpbGUKK3Nob3cgLWZvcm1hdCBkb3QgLXByZWZpeCAkOjplbnYoVE1QX0RJUikvc3ludGhlc2lzL3Bvc3RfdGVjaG1hcAorCitpZiB7ICQ6OmVudihTWU5USF9TSEFSRV9SRVNPVVJDRVMpIH0geworCXNoYXJlIC1hZ2dyZXNzaXZlCit9CisKK3NldCBmYV9tYXAgZmFsc2UKK2lmIHsgJGFkZGVyX3R5cGUgPT0gIkZBIiB9IHsKKwlpZiB7IFtpbmZvIGV4aXN0cyA6OmVudihGVUxMX0FEREVSX01BUCldICYmIFtmaWxlIGV4aXN0cyAkOjplbnYoRlVMTF9BRERFUl9NQVApXSB9IHsKKwkJZXh0cmFjdF9mYSAtZmEgLXYKKwkJZXh0cmFjdF9mYSAtaGEgLXYKKwkJc2V0IGZhX21hcCB0cnVlCisJfQorfQorCitvcHQKK29wdF9jbGVhbiAtcHVyZ2UKKwordGVlIC1vICIkOjplbnYoeW9zeXNfcmVwb3J0X2ZpbGVfdGFnKV9wcmUuc3RhdCIgc3RhdAorCisjIE1hcCB0cmktc3RhdGUgYnVmZmVycy4KK2lmIHsgJHRidWZfbWFwIH0geworICAgICAgICBsb2cge21hcHBpbmcgdGJ1Zn0KKyAgICAgICAgdGVjaG1hcCAtbWFwICQ6OmVudihUUklTVEFURV9CVUZGRVJfTUFQKQorICAgICAgICBzaW1wbGVtYXAKK30KKworIyBNYXAgRnVsbCBBZGRlcnMuCitpZiB7ICRmYV9tYXAgfSB7CisJdGVjaG1hcCAtbWFwICQ6OmVudihGVUxMX0FEREVSX01BUCkKK30KKworIyBoYW5kbGUgdGVjaG5vbG9neSBtYXBwaW5nIG9mIDQtTVVYLCBhbmQgdGVsbCBZb3N5cyB0byBpbmZlciA0LW11eGVzCitpZiB7IFtpbmZvIGV4aXN0cyA6OmVudihTWU5USF9NVVg0X01BUCldICYmIFtmaWxlIGV4aXN0cyAkOjplbnYoU1lOVEhfTVVYNF9NQVApXSB9IHsKKyAgbXV4Y292ZXIgLW11eDQgCisgIHRlY2htYXAgLW1hcCAkOjplbnYoU1lOVEhfTVVYNF9NQVApCisgIHNpbXBsZW1hcAorfQorCisjIGhhbmRsZSB0ZWNobm9sb2d5IG1hcHBpbmcgb2YgMi1NVVgKK2lmIHsgW2luZm8gZXhpc3RzIDo6ZW52KFNZTlRIX01VWF9NQVApXSAmJiBbZmlsZSBleGlzdHMgJDo6ZW52KFNZTlRIX01VWF9NQVApXSB9IHsKKyAgdGVjaG1hcCAtbWFwICQ6OmVudihTWU5USF9NVVhfTUFQKQorICBzaW1wbGVtYXAKK30KKworIyBoYW5kbGUgdGVjaG5vbG9neSBtYXBwaW5nIG9mIGxhdGNoZXMKK2lmIHsgW2luZm8gZXhpc3RzIDo6ZW52KFNZTlRIX0xBVENIX01BUCldICYmIFtmaWxlIGV4aXN0cyAkOjplbnYoU1lOVEhfTEFUQ0hfTUFQKV0gfSB7CisJdGVjaG1hcCAtbWFwICQ6OmVudihTWU5USF9MQVRDSF9NQVApCisJc2ltcGxlbWFwCit9CisKK2RmZmxpYm1hcCAtbGliZXJ0eSAkc2NsaWIKK3RlZSAtbyAiJDo6ZW52KHlvc3lzX3JlcG9ydF9maWxlX3RhZylfZGZmLnN0YXQiIHN0YXQKKworaWYgeyBbaW5mbyBleGlzdHMgOjplbnYoU1lOVEhfRVhQTE9SRSldICYmICQ6OmVudihTWU5USF9FWFBMT1JFKSB9IHsKKwlkZXNpZ24gLXNhdmUgbXlEZXNpZ24KKworCWZvciB7IHNldCBpbmRleCAwIH0gIHsgJGluZGV4IDwgW2xsZW5ndGggJGFsbF9zY3JpcHRzXSB9ICB7IGluY3IgaW5kZXggfSB7CisJCWxvZyAiXFtJTkZPXF06IEFCQzogV2lyZUxvYWQgOiBTXyRpbmRleCIKKwkJZGVzaWduIC1sb2FkIG15RGVzaWduCisKKwkJYWJjIC1EICRjbG9ja19wZXJpb2QgXAorCQkJLWNvbnN0ciAiJHNkY19maWxlIiBcCisJCQktbGliZXJ0eSAkc2NsaWIgIFwKKwkJCS1zY3JpcHQgW2xpbmRleCAkYWxsX3NjcmlwdHMgJGluZGV4XQorCisJCXNldHVuZGVmIC16ZXJvCisKKwkJaGlsb21hcCAtaGljZWxsIHsqfSQ6OmVudihTWU5USF9USUVISV9QT1JUKSAtbG9jZWxsIHsqfSQ6OmVudihTWU5USF9USUVMT19QT1JUKQorCisJCXNwbGl0bmV0cworCQlvcHRfY2xlYW4gLXB1cmdlCisJCWluc2J1ZiAtYnVmIHsqfSQ6OmVudihTWU5USF9NSU5fQlVGX1BPUlQpCisKKwkJdGVlIC1vICIkOjplbnYoeW9zeXNfcmVwb3J0X2ZpbGVfdGFnKV8kaW5kZXgkY2hrX2V4dCIgY2hlY2sKKwkJdGVlIC1vICIkOjplbnYoeW9zeXNfcmVwb3J0X2ZpbGVfdGFnKSRpbmRleCRzdGF0X2V4dCIgc3RhdCAtdG9wICR2dG9wIC1saWJlcnR5IFtsaW5kZXggJDo6ZW52KExJQl9TWU5USF9DT01QTEVURV9OT19QRykgMF0KKwkJd3JpdGVfdmVyaWxvZyAtbm9hdHRyIC1ub2V4cHIgLW5vaGV4IC1ub2RlYyAtZGVmcGFyYW0gIiQ6OmVudih5b3N5c19yZXN1bHRfZmlsZV90YWcpXyRpbmRleC52IgorCQlkZXNpZ24gLXJlc2V0CisJfQorfSBlbHNlIHsKKworCWxvZyAiXFtJTkZPXF06IEFCQzogV2lyZUxvYWQgOiBTXyRzdHJhdGVneSIKKworCWFiYyAtRCAkY2xvY2tfcGVyaW9kIFwKKwkJLWNvbnN0ciAiJHNkY19maWxlIiBcCisJCS1saWJlcnR5ICRzY2xpYiAgXAorCQktc2NyaXB0IFtsaW5kZXggJGFsbF9zY3JpcHRzICRzdHJhdGVneV0gXAorCQktc2hvd3RtcDsKKworCXNldHVuZGVmIC16ZXJvCisKKwloaWxvbWFwIC1oaWNlbGwgeyp9JDo6ZW52KFNZTlRIX1RJRUhJX1BPUlQpIC1sb2NlbGwgeyp9JDo6ZW52KFNZTlRIX1RJRUxPX1BPUlQpCisKKwkjIGdldCByaWQgb2YgdGhlIGFzc2lnbm1lbnRzIHRoYXQgbWFrZSBpbml0X2Zsb29ycGxhbiBmYWlsCisJc3BsaXRuZXRzCisJb3B0X2NsZWFuIC1wdXJnZQorCWluc2J1ZiAtYnVmIHsqfSQ6OmVudihTWU5USF9NSU5fQlVGX1BPUlQpCisKKwl0ZWUgLW8gIiQ6OmVudih5b3N5c19yZXBvcnRfZmlsZV90YWcpXyRzdHJhdGVneSRjaGtfZXh0IiBjaGVjaworCXRlZSAtbyAiJDo6ZW52KHlvc3lzX3JlcG9ydF9maWxlX3RhZylfJHN0cmF0ZWd5JHN0YXRfZXh0IiBzdGF0IC10b3AgJHZ0b3AgLWxpYmVydHkgW2xpbmRleCAkOjplbnYoTElCX1NZTlRIX0NPTVBMRVRFX05PX1BHKSAwXQorCXdyaXRlX3Zlcmlsb2cgLW5vYXR0ciAtbm9leHByIC1ub2hleCAtbm9kZWMgLWRlZnBhcmFtICIkOjplbnYoU0FWRV9ORVRMSVNUKSIKK30KKworaWYgeyAkOjplbnYoU1lOVEhfTk9fRkxBVCkgfSB7CisJZGVzaWduIC1yZXNldAorCXJlYWRfbGliZXJ0eSAtbGliIC1pZ25vcmVfbWlzc19kaXIgLXNldGF0dHIgYmxhY2tib3ggJDo6ZW52KExJQl9TWU5USF9DT01QTEVURV9OT19QRykKKwlmaWxlIGNvcHkgLWZvcmNlICQ6OmVudihTQVZFX05FVExJU1QpICQ6OmVudih5b3N5c190bXBfZmlsZV90YWcpX3VuZmxhdC52CisJcmVhZF92ZXJpbG9nIC1zdiAkOjplbnYoU0FWRV9ORVRMSVNUKQorCXN5bnRoIC10b3AgJHZ0b3AgLWZsYXR0ZW4KKwlzcGxpdG5ldHMKKwlvcHRfY2xlYW4gLXB1cmdlCisJaW5zYnVmIC1idWYgeyp9JDo6ZW52KFNZTlRIX01JTl9CVUZfUE9SVCkKKwl3cml0ZV92ZXJpbG9nIC1ub2F0dHIgLW5vZXhwciAtbm9oZXggLW5vZGVjIC1kZWZwYXJhbSAiJDo6ZW52KFNBVkVfTkVUTElTVCkiCisJdGVlIC1vICIkOjplbnYoeW9zeXNfcmVwb3J0X2ZpbGVfdGFnKV8kc3RyYXRlZ3kkY2hrX2V4dCIgY2hlY2sKKwl0ZWUgLW8gIiQ6OmVudih5b3N5c19yZXBvcnRfZmlsZV90YWcpXyRzdHJhdGVneSRzdGF0X2V4dCIgc3RhdCAtdG9wICR2dG9wIC1saWJlcnR5IFtsaW5kZXggJDo6ZW52KExJQl9TWU5USF9DT01QTEVURV9OT19QRykgMF0KK30KZGlmZiAtLWdpdCBhL2hhY2tzL3NyYy9vcGVubGFuZS9zeW50aF90b3AudGNsIGIvaGFja3Mvc3JjL29wZW5sYW5lL3N5bnRoX3RvcC50Y2wKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjViYjhmYQotLS0gL2Rldi9udWxsCisrKyBiL2hhY2tzL3NyYy9vcGVubGFuZS9zeW50aF90b3AudGNsCkBAIC0wLDAgKzEsOTcgQEAKKyMgQ29weXJpZ2h0IDIwMjAgRWZhYmxlc3MgQ29ycG9yYXRpb24KKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKK3NldCB2dG9wICQ6OmVudihERVNJR05fTkFNRSkKKyNzZXQgc2RjX2ZpbGUgJDo6ZW52KFNEQ19GSUxFKQorc2V0IHNjbGliICQ6OmVudihMSUJfU1lOVEgpCit5b3N5cyAtaW1wb3J0CisKK3NldCBzdGF0X2V4dCAgICAiLnN0YXQucnB0Igorc2V0IGNoa19leHQgICAgIi5jaGsucnB0Igorc2V0IGdsX2V4dCAgICAgICIuZ2wudiIKK3NldCB0aW1pbmdfZXh0ICAiLnRpbWluZy50eHQiCitzZXQgYWJjX2V4dCAgICAgIi5hYmMiCisKK2lmIHsgJDo6ZW52KFNZTlRIX1JFQURfQkxBQ0tCT1hfTElCKSB9IHsKKwlmb3JlYWNoIGxpYiAkOjplbnYoTElCX1NZTlRIX0NPTVBMRVRFX05PX1BHKSB7CisJCXJlYWRfbGliZXJ0eSAtbGliIC1pZ25vcmVfbWlzc19kaXIgLXNldGF0dHIgYmxhY2tib3ggJGxpYgorCX0KK30KKworaWYgeyBbaW5mbyBleGlzdHMgOjplbnYoRVhUUkFfTElCUykgXSB9IHsKKwlmb3JlYWNoIGxpYiAkOjplbnYoRVhUUkFfTElCUykgeworCQlyZWFkX2xpYmVydHkgLWxpYiAtaWdub3JlX21pc3NfZGlyIC1zZXRhdHRyIGJsYWNrYm94ICRsaWIKKwl9Cit9CisKKworaWYgeyBbaW5mbyBleGlzdHMgOjplbnYoU1lOVEhfREVGSU5FUykgXSB9IHsKKwlmb3JlYWNoIGRlZmluZSAkOjplbnYoU1lOVEhfREVGSU5FUykgeworCQl2ZXJpbG9nX2RlZmluZXMgLUQkZGVmaW5lCisJfQorfQorCitzZXQgdklkaXJzQXJncyAiIgoraWYge1tpbmZvIGV4aXN0IDo6ZW52KFZFUklMT0dfSU5DTFVERV9ESVJTKV19IHsKKwlmb3JlYWNoIGRpciAkOjplbnYoVkVSSUxPR19JTkNMVURFX0RJUlMpIHsKKwkJbGFwcGVuZCB2SWRpcnNBcmdzICItSSRkaXIiCisJfQorCXNldCB2SWRpcnNBcmdzIFtqb2luICR2SWRpcnNBcmdzXQorfQorCitpZiB7IFtpbmZvIGV4aXN0cyA6OmVudihWRVJJTE9HX0ZJTEVTX0JMQUNLQk9YKV0gfSB7CisJZm9yZWFjaCB2ZXJpbG9nX2ZpbGUgJDo6ZW52KFZFUklMT0dfRklMRVNfQkxBQ0tCT1gpIHsKKwkJcmVhZF92ZXJpbG9nIC1saWIgeyp9JHZJZGlyc0FyZ3MgJHZlcmlsb2dfZmlsZQorCX0KK30KKworCitmb3IgeyBzZXQgaSAwIH0geyAkaSA8IFtsbGVuZ3RoICQ6OmVudihWRVJJTE9HX0ZJTEVTKV0gfSB7IGluY3IgaSB9IHsKKyAgcmVhZF92ZXJpbG9nIHsqfSR2SWRpcnNBcmdzIFtsaW5kZXggJDo6ZW52KFZFUklMT0dfRklMRVMpICRpXQorfQorCitzZWxlY3QgLW1vZHVsZSAkdnRvcAorCisjIyBNb2R1bGUgbGV2ZWwgcGFyYW1ldGVyIG92ZXJpZGUgLSBEaW5lc2gKK2lmIHsgW2luZm8gZXhpc3RzIDo6ZW52KFNZTlRIX1BBUkFNUykgXSB9IHsKKyAgICBsb2cgIlJlYWRpbmcgJDo6ZW52KFNZTlRIX1BBUkFNUykgYXMgYSBwYXJhbWV0ZXIiCisgICAgc2V0IHJlY29yZHMgW3NwbGl0ICQ6OmVudihTWU5USF9QQVJBTVMpICIsIl0KKyAgICBmb3JlYWNoIHJlYyAkcmVjb3JkcyB7CisgICAgICAgY2hwYXJhbSAtc2V0IFtsaW5kZXggJHJlYyAwXSBbbGluZGV4ICRyZWMgMV0gJHZ0b3AKKyAgICB9Cit9IGVsc2UgeworCWxvZyAiTm8gcGFyYW1ldGVyIGRlZmluZSBmb3VuZCIKK30KKworCitzaG93IC1mb3JtYXQgZG90IC1wcmVmaXggJDo6ZW52KFRNUF9ESVIpL3N5bnRoZXNpcy9oaWVyYXJjaHkKK3NlbGVjdCAtY2xlYXIKKworaGllcmFyY2h5IC1jaGVjayAtdG9wICR2dG9wCitpZiB7ICQ6OmVudihTWU5USF9GTEFUX1RPUCkgfSB7CisJZmxhdHRlbgorfQorCitzZXRhdHRyIC1zZXQga2VlcCAxCisjc3ludGggLXRvcCAkdnRvcAordGVlIC1vICIkOjplbnYoeW9zeXNfcmVwb3J0X2ZpbGVfdGFnKV9zeW50aC5zdGF0IiBzdGF0CisKKworI2RlYnVnIG9wdF9jbGVhbiAtcHVyZ2UKKyNzZXR1bmRlZiAtemVybworc3BsaXRuZXRzCitvcHRfY2xlYW4gLXB1cmdlCit0ZWUgLW8gIiQ6OmVudih5b3N5c19yZXBvcnRfZmlsZV90YWcpXyRjaGtfZXh0IiBjaGVjawordGVlIC1vICIkOjplbnYoeW9zeXNfcmVwb3J0X2ZpbGVfdGFnKSRzdGF0X2V4dCIgc3RhdCAtdG9wICR2dG9wIC1saWJlcnR5ICRzY2xpYgord3JpdGVfdmVyaWxvZyAtbm9hdHRyIC1ub2V4cHIgLW5vaGV4IC1ub2RlYyAtZGVmcGFyYW0gIiQ6OmVudihTQVZFX05FVExJU1QpIgpkaWZmIC0tZ2l0IGEvaW5mby55YW1sIGIvaW5mby55YW1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkNDAyNTEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmZvLnlhbWwKQEAgLTAsMCArMSwxOSBAQAorLS0tCitwcm9qZWN0OgorICBkZXNjcmlwdGlvbjogIkEgQ3VzdG9tIFNvQyBmb3IgR29vZ2xlIHNwb25zb3JlZCBPcGVuIE1QVyBzaHV0dGxlcyBmb3IgU0tZMTMwLiIKKyAgZm91bmRyeTogIlNreVdhdGVyIgorICBnaXRfdXJsOiAiaHR0cHM6Ly9naXRodWIuY29tL2RpbmVzaGFubmF5eWEveWlmaXZlX3IwLmdpdCIKKyAgb3JnYW5pemF0aW9uOiAiTm9uZSIKKyAgb3JnYW5pemF0aW9uX3VybDogIk5vbmUiCisgIG93bmVyOiAiRGluZXNoIEFubmF5eWEiCisgIHByb2Nlc3M6ICJTS1kxMzAiCisgIHByb2plY3RfbmFtZTogIllpRml2ZSIKKyAgcHJvamVjdF9pZDogIjAwMDAwMDAwIgorICB0YWdzOgorICAgIC0gIk9wZW4gTVBXIgorICAgIC0gIk1QVy1UV08iCisgIGNhdGVnb3J5OiAiUHJvY2Vzc29yIgorICB0b3BfbGV2ZWxfbmV0bGlzdDogImNhcmF2ZWwvdmVyaWxvZy9nbC9jYXJhdmVsLnYiCisgIHVzZXJfbGV2ZWxfbmV0bGlzdDogInZlcmlsb2cvZ2wvdXNlcl9wcm9qZWN0X3dyYXBwZXIudiIKKyAgdmVyc2lvbjogIjEuMDAiCisgIGNvdmVyX2ltYWdlOiAiZG9jcy9zb3VyY2UvX3N0YXRpYy9ZaUZpdmVfU29jLnBuZyIKZGlmZiAtLWdpdCBhL2xpYi9za3kxMzBfc3JhbV8ya2J5dGVfMXJ3MXJfMzJ4NTEyXzhfVFRfMXA4Vl8yNUMubGliIGIvbGliL3NreTEzMF9zcmFtXzJrYnl0ZV8xcncxcl8zMng1MTJfOF9UVF8xcDhWXzI1Qy5saWIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjFlMjI2YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9za3kxMzBfc3JhbV8ya2J5dGVfMXJ3MXJfMzJ4NTEyXzhfVFRfMXA4Vl8yNUMubGliCkBAIC0wLDAgKzEsNTM4IEBACitsaWJyYXJ5IChza3kxMzBfc3JhbV8ya2J5dGVfMXJ3MXJfMzJ4NTEyXzhfVFRfMXA4Vl8yNUNfbGliKXsKKyAgICBkZWxheV9tb2RlbCA6ICJ0YWJsZV9sb29rdXAiOworICAgIHRpbWVfdW5pdCA6ICIxbnMiIDsKKyAgICB2b2x0YWdlX3VuaXQgOiAiMVYiIDsKKyAgICBjdXJyZW50X3VuaXQgOiAiMW1BIiA7CisgICAgcmVzaXN0YW5jZV91bml0IDogIjFrb2htIiA7CisgICAgY2FwYWNpdGl2ZV9sb2FkX3VuaXQoMSwgcEYpIDsKKyAgICBsZWFrYWdlX3Bvd2VyX3VuaXQgOiAiMW1XIiA7CisgICAgcHVsbGluZ19yZXNpc3RhbmNlX3VuaXQgOiIxa29obSIgOworICAgIG9wZXJhdGluZ19jb25kaXRpb25zKE9DKXsKKyAgICBwcm9jZXNzIDogMS4wIDsKKyAgICB2b2x0YWdlIDogMS44IDsKKyAgICB0ZW1wZXJhdHVyZSA6IDI1OworICAgIH0KKworICAgIGlucHV0X3RocmVzaG9sZF9wY3RfZmFsbCAgICAgICA6ICA1MC4wIDsKKyAgICBvdXRwdXRfdGhyZXNob2xkX3BjdF9mYWxsICAgICAgOiAgNTAuMCA7CisgICAgaW5wdXRfdGhyZXNob2xkX3BjdF9yaXNlICAgICAgIDogIDUwLjAgOworICAgIG91dHB1dF90aHJlc2hvbGRfcGN0X3Jpc2UgICAgICA6ICA1MC4wIDsKKyAgICBzbGV3X2xvd2VyX3RocmVzaG9sZF9wY3RfZmFsbCAgOiAgMTAuMCA7CisgICAgc2xld191cHBlcl90aHJlc2hvbGRfcGN0X2ZhbGwgIDogIDkwLjAgOworICAgIHNsZXdfbG93ZXJfdGhyZXNob2xkX3BjdF9yaXNlICA6ICAxMC4wIDsKKyAgICBzbGV3X3VwcGVyX3RocmVzaG9sZF9wY3RfcmlzZSAgOiAgOTAuMCA7CisKKyAgICBub21fdm9sdGFnZSA6IDEuODsKKyAgICBub21fdGVtcGVyYXR1cmUgOiAyNTsKKyAgICBub21fcHJvY2VzcyA6IDEuMDsKKyAgICBkZWZhdWx0X2NlbGxfbGVha2FnZV9wb3dlciAgICA6IDAuMCA7CisgICAgZGVmYXVsdF9sZWFrYWdlX3Bvd2VyX2RlbnNpdHkgOiAwLjAgOworICAgIGRlZmF1bHRfaW5wdXRfcGluX2NhcCAgICA6IDEuMCA7CisgICAgZGVmYXVsdF9pbm91dF9waW5fY2FwICAgIDogMS4wIDsKKyAgICBkZWZhdWx0X291dHB1dF9waW5fY2FwICAgOiAwLjAgOworICAgIGRlZmF1bHRfbWF4X3RyYW5zaXRpb24gICA6IDAuNSA7CisgICAgZGVmYXVsdF9mYW5vdXRfbG9hZCAgICAgIDogMS4wIDsKKyAgICBkZWZhdWx0X21heF9mYW5vdXQgICA6IDQuMCA7CisgICAgZGVmYXVsdF9jb25uZWN0aW9uX2NsYXNzIDogdW5pdmVyc2FsIDsKKworICAgIHZvbHRhZ2VfbWFwICggVkNDRDEsIDEuOCApOworICAgIHZvbHRhZ2VfbWFwICggVlNTRDEsIDAgKTsKKworICAgIGx1X3RhYmxlX3RlbXBsYXRlKENFTExfVEFCTEUpeworICAgICAgICB2YXJpYWJsZV8xIDogaW5wdXRfbmV0X3RyYW5zaXRpb247CisgICAgICAgIHZhcmlhYmxlXzIgOiB0b3RhbF9vdXRwdXRfbmV0X2NhcGFjaXRhbmNlOworICAgICAgICBpbmRleF8xKCIwLjAwMTI1LCAwLjAwNSwgMC4wNCIpOworICAgICAgICBpbmRleF8yKCIwLjAwMTcyMjQ5OTk5OTk5OTk5OTksIDAuMDA2ODg5OTk5OTk5OTk5OTk5LCAwLjAyNzU1OTk5OTk5OTk5OTk5OCIpOworICAgIH0KKworICAgIGx1X3RhYmxlX3RlbXBsYXRlKENPTlNUUkFJTlRfVEFCTEUpeworICAgICAgICB2YXJpYWJsZV8xIDogcmVsYXRlZF9waW5fdHJhbnNpdGlvbjsKKyAgICAgICAgdmFyaWFibGVfMiA6IGNvbnN0cmFpbmVkX3Bpbl90cmFuc2l0aW9uOworICAgICAgICBpbmRleF8xKCIwLjAwMTI1LCAwLjAwNSwgMC4wNCIpOworICAgICAgICBpbmRleF8yKCIwLjAwMTI1LCAwLjAwNSwgMC4wNCIpOworICAgIH0KKworICAgIGRlZmF1bHRfb3BlcmF0aW5nX2NvbmRpdGlvbnMgOiBPQzsgCisKKworICAgIHR5cGUgKGRhdGEpeworICAgIGJhc2VfdHlwZSA6IGFycmF5OworICAgIGRhdGFfdHlwZSA6IGJpdDsKKyAgICBiaXRfd2lkdGggOiAzMjsKKyAgICBiaXRfZnJvbSA6IDMxOworICAgIGJpdF90byA6IDA7CisgICAgfQorCisgICAgdHlwZSAoYWRkcil7CisgICAgYmFzZV90eXBlIDogYXJyYXk7CisgICAgZGF0YV90eXBlIDogYml0OworICAgIGJpdF93aWR0aCA6IDk7CisgICAgYml0X2Zyb20gOiA4OworICAgIGJpdF90byA6IDA7CisgICAgfQorCisgICAgdHlwZSAod21hc2speworICAgIGJhc2VfdHlwZSA6IGFycmF5OworICAgIGRhdGFfdHlwZSA6IGJpdDsKKyAgICBiaXRfd2lkdGggOiA0OworICAgIGJpdF9mcm9tIDogMzsKKyAgICBiaXRfdG8gOiAwOworICAgIH0KKworY2VsbCAoc2t5MTMwX3NyYW1fMmtieXRlXzFydzFyXzMyeDUxMl84KXsKKyAgICBtZW1vcnkoKXsgCisgICAgdHlwZSA6IHJhbTsKKyAgICBhZGRyZXNzX3dpZHRoIDogOTsKKyAgICB3b3JkX3dpZHRoIDogMzI7CisgICAgfQorICAgIGludGVyZmFjZV90aW1pbmcgOiB0cnVlOworICAgIGRvbnRfdXNlICA6IHRydWU7CisgICAgbWFwX29ubHkgICA6IHRydWU7CisgICAgZG9udF90b3VjaCA6IHRydWU7CisgICAgYXJlYSA6IDI4NDUzOC40NzQ7CisKKyAgICBwZ19waW4odmNjZDEpIHsKKyAgICAgICAgIHZvbHRhZ2VfbmFtZSA6IFZDQ0QxOworICAgICAgICAgcGdfdHlwZSA6IHByaW1hcnlfcG93ZXI7CisgICAgfQorCisgICAgcGdfcGluKHZzc2QxKSB7CisgICAgICAgICB2b2x0YWdlX25hbWUgOiBWU1NEMTsKKyAgICAgICAgIHBnX3R5cGUgOiBwcmltYXJ5X2dyb3VuZDsKKyAgICB9CisKKyAgICBsZWFrYWdlX3Bvd2VyICgpIHsKKyAgICAgIHZhbHVlIDogMC4wMTc3MjY7CisgICAgfQorICAgIGNlbGxfbGVha2FnZV9wb3dlciA6IDAuMDE3NzI2OworICAgIGJ1cyhkaW4wKXsKKyAgICAgICAgYnVzX3R5cGUgIDogZGF0YTsgCisgICAgICAgIGRpcmVjdGlvbiAgOiBpbnB1dDsgCisgICAgICAgIGNhcGFjaXRhbmNlIDogMC4wMDY4ODk5OTk5OTk5OTk5OTk7ICAKKyAgICAgICAgbWVtb3J5X3dyaXRlKCl7IAorICAgICAgICAgICAgYWRkcmVzcyA6IGFkZHIwOyAKKyAgICAgICAgICAgIGNsb2NrZWRfb24gIDogY2xrMDsgCisgICAgICAgIH0KKyAgICAgICAgcGluKGRpbjBbMzE6MF0peworICAgICAgICB0aW1pbmcoKXsgCisgICAgICAgICAgICB0aW1pbmdfdHlwZSA6IHNldHVwX3Jpc2luZzsgCisgICAgICAgICAgICByZWxhdGVkX3BpbiAgOiAiY2xrMCI7IAorICAgICAgICAgICAgcmlzZV9jb25zdHJhaW50KENPTlNUUkFJTlRfVEFCTEUpIHsKKyAgICAgICAgICAgIHZhbHVlcygiMC4xMDMsIDAuMTAzLCAwLjEwMyIsXAorICAgICAgICAgICAgICAgICAgICIwLjEwMywgMC4xMDMsIDAuMTAzIixcCisgICAgICAgICAgICAgICAgICAgIjAuMTAzLCAwLjEwMywgMC4xMDMiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZhbGxfY29uc3RyYWludChDT05TVFJBSU5UX1RBQkxFKSB7CisgICAgICAgICAgICB2YWx1ZXMoIjAuMTAzLCAwLjEwMywgMC4xMDMiLFwKKyAgICAgICAgICAgICAgICAgICAiMC4xMDMsIDAuMTAzLCAwLjEwMyIsXAorICAgICAgICAgICAgICAgICAgICIwLjEwMywgMC4xMDMsIDAuMTAzIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdGltaW5nKCl7IAorICAgICAgICAgICAgdGltaW5nX3R5cGUgOiBob2xkX3Jpc2luZzsgCisgICAgICAgICAgICByZWxhdGVkX3BpbiAgOiAiY2xrMCI7IAorICAgICAgICAgICAgcmlzZV9jb25zdHJhaW50KENPTlNUUkFJTlRfVEFCTEUpIHsKKyAgICAgICAgICAgIHZhbHVlcygiLTAuMDU2LCAtMC4wNTYsIC0wLjA1NiIsXAorICAgICAgICAgICAgICAgICAgICItMC4wNTYsIC0wLjA1NiwgLTAuMDU2IixcCisgICAgICAgICAgICAgICAgICAgIi0wLjA1NiwgLTAuMDU2LCAtMC4wNTYiKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgZmFsbF9jb25zdHJhaW50KENPTlNUUkFJTlRfVEFCTEUpIHsKKyAgICAgICAgICAgIHZhbHVlcygiLTAuMDU2LCAtMC4wNTYsIC0wLjA1NiIsXAorICAgICAgICAgICAgICAgICAgICItMC4wNTYsIC0wLjA1NiwgLTAuMDU2IixcCisgICAgICAgICAgICAgICAgICAgIi0wLjA1NiwgLTAuMDU2LCAtMC4wNTYiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGJ1cyhkb3V0MCl7CisgICAgICAgIGJ1c190eXBlICA6IGRhdGE7IAorICAgICAgICBkaXJlY3Rpb24gIDogb3V0cHV0OyAKKyAgICAgICAgbWF4X2NhcGFjaXRhbmNlIDogMC4wMjc1NTk5OTk5OTk5OTk5OTg7ICAKKyAgICAgICAgbWluX2NhcGFjaXRhbmNlIDogMC4wMDE3MjI0OTk5OTk5OTk5OTk5OyAgCisgICAgICAgIG1lbW9yeV9yZWFkKCl7IAorICAgICAgICAgICAgYWRkcmVzcyA6IGFkZHIwOyAKKyAgICAgICAgfQorICAgICAgICBwaW4oZG91dDBbMzE6MF0peworICAgICAgICB0aW1pbmcoKXsgCisgICAgICAgICAgICB0aW1pbmdfc2Vuc2UgOiBub25fdW5hdGU7IAorICAgICAgICAgICAgcmVsYXRlZF9waW4gOiAiY2xrMCI7IAorICAgICAgICAgICAgdGltaW5nX3R5cGUgOiBmYWxsaW5nX2VkZ2U7IAorICAgICAgICAgICAgY2VsbF9yaXNlKENFTExfVEFCTEUpIHsKKyAgICAgICAgICAgIHZhbHVlcygiMC4zODMsIDAuNDEyLCAwLjUyOSIsXAorICAgICAgICAgICAgICAgICAgICIwLjM4MywgMC40MTIsIDAuNTI5IixcCisgICAgICAgICAgICAgICAgICAgIjAuMzgzLCAwLjQxMiwgMC41MjkiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNlbGxfZmFsbChDRUxMX1RBQkxFKSB7CisgICAgICAgICAgICB2YWx1ZXMoIjAuMzgzLCAwLjQxMiwgMC41MjkiLFwKKyAgICAgICAgICAgICAgICAgICAiMC4zODMsIDAuNDEyLCAwLjUyOSIsXAorICAgICAgICAgICAgICAgICAgICIwLjM4MywgMC40MTIsIDAuNTI5Iik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByaXNlX3RyYW5zaXRpb24oQ0VMTF9UQUJMRSkgeworICAgICAgICAgICAgdmFsdWVzKCIwLjAwMiwgMC4wMDUsIDAuMDE2IixcCisgICAgICAgICAgICAgICAgICAgIjAuMDAyLCAwLjAwNSwgMC4wMTYiLFwKKyAgICAgICAgICAgICAgICAgICAiMC4wMDIsIDAuMDA1LCAwLjAxNiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZmFsbF90cmFuc2l0aW9uKENFTExfVEFCTEUpIHsKKyAgICAgICAgICAgIHZhbHVlcygiMC4wMDIsIDAuMDA1LCAwLjAxNiIsXAorICAgICAgICAgICAgICAgICAgICIwLjAwMiwgMC4wMDUsIDAuMDE2IixcCisgICAgICAgICAgICAgICAgICAgIjAuMDAyLCAwLjAwNSwgMC4wMTYiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgYnVzKGFkZHIwKXsKKyAgICAgICAgYnVzX3R5cGUgIDogYWRkcjsgCisgICAgICAgIGRpcmVjdGlvbiAgOiBpbnB1dDsgCisgICAgICAgIGNhcGFjaXRhbmNlIDogMC4wMDY4ODk5OTk5OTk5OTk5OTk7ICAKKyAgICAgICAgbWF4X3RyYW5zaXRpb24gICAgICAgOiAwLjA0OworICAgICAgICBwaW4oYWRkcjBbODowXSl7CisgICAgICAgIHRpbWluZygpeyAKKyAgICAgICAgICAgIHRpbWluZ190eXBlIDogc2V0dXBfcmlzaW5nOyAKKyAgICAgICAgICAgIHJlbGF0ZWRfcGluICA6ICJjbGswIjsgCisgICAgICAgICAgICByaXNlX2NvbnN0cmFpbnQoQ09OU1RSQUlOVF9UQUJMRSkgeworICAgICAgICAgICAgdmFsdWVzKCIwLjEwMywgMC4xMDMsIDAuMTAzIixcCisgICAgICAgICAgICAgICAgICAgIjAuMTAzLCAwLjEwMywgMC4xMDMiLFwKKyAgICAgICAgICAgICAgICAgICAiMC4xMDMsIDAuMTAzLCAwLjEwMyIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZmFsbF9jb25zdHJhaW50KENPTlNUUkFJTlRfVEFCTEUpIHsKKyAgICAgICAgICAgIHZhbHVlcygiMC4xMDMsIDAuMTAzLCAwLjEwMyIsXAorICAgICAgICAgICAgICAgICAgICIwLjEwMywgMC4xMDMsIDAuMTAzIixcCisgICAgICAgICAgICAgICAgICAgIjAuMTAzLCAwLjEwMywgMC4xMDMiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0aW1pbmcoKXsgCisgICAgICAgICAgICB0aW1pbmdfdHlwZSA6IGhvbGRfcmlzaW5nOyAKKyAgICAgICAgICAgIHJlbGF0ZWRfcGluICA6ICJjbGswIjsgCisgICAgICAgICAgICByaXNlX2NvbnN0cmFpbnQoQ09OU1RSQUlOVF9UQUJMRSkgeworICAgICAgICAgICAgdmFsdWVzKCItMC4wNTYsIC0wLjA1NiwgLTAuMDU2IixcCisgICAgICAgICAgICAgICAgICAgIi0wLjA1NiwgLTAuMDU2LCAtMC4wNTYiLFwKKyAgICAgICAgICAgICAgICAgICAiLTAuMDU2LCAtMC4wNTYsIC0wLjA1NiIpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBmYWxsX2NvbnN0cmFpbnQoQ09OU1RSQUlOVF9UQUJMRSkgeworICAgICAgICAgICAgdmFsdWVzKCItMC4wNTYsIC0wLjA1NiwgLTAuMDU2IixcCisgICAgICAgICAgICAgICAgICAgIi0wLjA1NiwgLTAuMDU2LCAtMC4wNTYiLFwKKyAgICAgICAgICAgICAgICAgICAiLTAuMDU2LCAtMC4wNTYsIC0wLjA1NiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBidXMod21hc2swKXsKKyAgICAgICAgYnVzX3R5cGUgIDogd21hc2s7IAorICAgICAgICBkaXJlY3Rpb24gIDogaW5wdXQ7IAorICAgICAgICBjYXBhY2l0YW5jZSA6IDAuMDA2ODg5OTk5OTk5OTk5OTk5OyAgCisgICAgICAgIG1heF90cmFuc2l0aW9uICAgICAgIDogMC4wNDsKKyAgICAgICAgcGluKHdtYXNrMFszOjBdKXsKKyAgICAgICAgdGltaW5nKCl7IAorICAgICAgICAgICAgdGltaW5nX3R5cGUgOiBzZXR1cF9yaXNpbmc7IAorICAgICAgICAgICAgcmVsYXRlZF9waW4gIDogImNsazAiOyAKKyAgICAgICAgICAgIHJpc2VfY29uc3RyYWludChDT05TVFJBSU5UX1RBQkxFKSB7CisgICAgICAgICAgICB2YWx1ZXMoIjAuMTAzLCAwLjEwMywgMC4xMDMiLFwKKyAgICAgICAgICAgICAgICAgICAiMC4xMDMsIDAuMTAzLCAwLjEwMyIsXAorICAgICAgICAgICAgICAgICAgICIwLjEwMywgMC4xMDMsIDAuMTAzIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmYWxsX2NvbnN0cmFpbnQoQ09OU1RSQUlOVF9UQUJMRSkgeworICAgICAgICAgICAgdmFsdWVzKCIwLjEwMywgMC4xMDMsIDAuMTAzIixcCisgICAgICAgICAgICAgICAgICAgIjAuMTAzLCAwLjEwMywgMC4xMDMiLFwKKyAgICAgICAgICAgICAgICAgICAiMC4xMDMsIDAuMTAzLCAwLjEwMyIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRpbWluZygpeyAKKyAgICAgICAgICAgIHRpbWluZ190eXBlIDogaG9sZF9yaXNpbmc7IAorICAgICAgICAgICAgcmVsYXRlZF9waW4gIDogImNsazAiOyAKKyAgICAgICAgICAgIHJpc2VfY29uc3RyYWludChDT05TVFJBSU5UX1RBQkxFKSB7CisgICAgICAgICAgICB2YWx1ZXMoIi0wLjA1NiwgLTAuMDU2LCAtMC4wNTYiLFwKKyAgICAgICAgICAgICAgICAgICAiLTAuMDU2LCAtMC4wNTYsIC0wLjA1NiIsXAorICAgICAgICAgICAgICAgICAgICItMC4wNTYsIC0wLjA1NiwgLTAuMDU2Iik7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZhbGxfY29uc3RyYWludChDT05TVFJBSU5UX1RBQkxFKSB7CisgICAgICAgICAgICB2YWx1ZXMoIi0wLjA1NiwgLTAuMDU2LCAtMC4wNTYiLFwKKyAgICAgICAgICAgICAgICAgICAiLTAuMDU2LCAtMC4wNTYsIC0wLjA1NiIsXAorICAgICAgICAgICAgICAgICAgICItMC4wNTYsIC0wLjA1NiwgLTAuMDU2Iik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHBpbihjc2IwKXsKKyAgICAgICAgZGlyZWN0aW9uICA6IGlucHV0OyAKKyAgICAgICAgY2FwYWNpdGFuY2UgOiAwLjAwNjg4OTk5OTk5OTk5OTk5OTsgIAorICAgICAgICB0aW1pbmcoKXsgCisgICAgICAgICAgICB0aW1pbmdfdHlwZSA6IHNldHVwX3Jpc2luZzsgCisgICAgICAgICAgICByZWxhdGVkX3BpbiAgOiAiY2xrMCI7IAorICAgICAgICAgICAgcmlzZV9jb25zdHJhaW50KENPTlNUUkFJTlRfVEFCTEUpIHsKKyAgICAgICAgICAgIHZhbHVlcygiMC4xMDMsIDAuMTAzLCAwLjEwMyIsXAorICAgICAgICAgICAgICAgICAgICIwLjEwMywgMC4xMDMsIDAuMTAzIixcCisgICAgICAgICAgICAgICAgICAgIjAuMTAzLCAwLjEwMywgMC4xMDMiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZhbGxfY29uc3RyYWludChDT05TVFJBSU5UX1RBQkxFKSB7CisgICAgICAgICAgICB2YWx1ZXMoIjAuMTAzLCAwLjEwMywgMC4xMDMiLFwKKyAgICAgICAgICAgICAgICAgICAiMC4xMDMsIDAuMTAzLCAwLjEwMyIsXAorICAgICAgICAgICAgICAgICAgICIwLjEwMywgMC4xMDMsIDAuMTAzIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdGltaW5nKCl7IAorICAgICAgICAgICAgdGltaW5nX3R5cGUgOiBob2xkX3Jpc2luZzsgCisgICAgICAgICAgICByZWxhdGVkX3BpbiAgOiAiY2xrMCI7IAorICAgICAgICAgICAgcmlzZV9jb25zdHJhaW50KENPTlNUUkFJTlRfVEFCTEUpIHsKKyAgICAgICAgICAgIHZhbHVlcygiLTAuMDU2LCAtMC4wNTYsIC0wLjA1NiIsXAorICAgICAgICAgICAgICAgICAgICItMC4wNTYsIC0wLjA1NiwgLTAuMDU2IixcCisgICAgICAgICAgICAgICAgICAgIi0wLjA1NiwgLTAuMDU2LCAtMC4wNTYiKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgZmFsbF9jb25zdHJhaW50KENPTlNUUkFJTlRfVEFCTEUpIHsKKyAgICAgICAgICAgIHZhbHVlcygiLTAuMDU2LCAtMC4wNTYsIC0wLjA1NiIsXAorICAgICAgICAgICAgICAgICAgICItMC4wNTYsIC0wLjA1NiwgLTAuMDU2IixcCisgICAgICAgICAgICAgICAgICAgIi0wLjA1NiwgLTAuMDU2LCAtMC4wNTYiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHBpbih3ZWIwKXsKKyAgICAgICAgZGlyZWN0aW9uICA6IGlucHV0OyAKKyAgICAgICAgY2FwYWNpdGFuY2UgOiAwLjAwNjg4OTk5OTk5OTk5OTk5OTsgIAorICAgICAgICB0aW1pbmcoKXsgCisgICAgICAgICAgICB0aW1pbmdfdHlwZSA6IHNldHVwX3Jpc2luZzsgCisgICAgICAgICAgICByZWxhdGVkX3BpbiAgOiAiY2xrMCI7IAorICAgICAgICAgICAgcmlzZV9jb25zdHJhaW50KENPTlNUUkFJTlRfVEFCTEUpIHsKKyAgICAgICAgICAgIHZhbHVlcygiMC4xMDMsIDAuMTAzLCAwLjEwMyIsXAorICAgICAgICAgICAgICAgICAgICIwLjEwMywgMC4xMDMsIDAuMTAzIixcCisgICAgICAgICAgICAgICAgICAgIjAuMTAzLCAwLjEwMywgMC4xMDMiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZhbGxfY29uc3RyYWludChDT05TVFJBSU5UX1RBQkxFKSB7CisgICAgICAgICAgICB2YWx1ZXMoIjAuMTAzLCAwLjEwMywgMC4xMDMiLFwKKyAgICAgICAgICAgICAgICAgICAiMC4xMDMsIDAuMTAzLCAwLjEwMyIsXAorICAgICAgICAgICAgICAgICAgICIwLjEwMywgMC4xMDMsIDAuMTAzIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdGltaW5nKCl7IAorICAgICAgICAgICAgdGltaW5nX3R5cGUgOiBob2xkX3Jpc2luZzsgCisgICAgICAgICAgICByZWxhdGVkX3BpbiAgOiAiY2xrMCI7IAorICAgICAgICAgICAgcmlzZV9jb25zdHJhaW50KENPTlNUUkFJTlRfVEFCTEUpIHsKKyAgICAgICAgICAgIHZhbHVlcygiLTAuMDU2LCAtMC4wNTYsIC0wLjA1NiIsXAorICAgICAgICAgICAgICAgICAgICItMC4wNTYsIC0wLjA1NiwgLTAuMDU2IixcCisgICAgICAgICAgICAgICAgICAgIi0wLjA1NiwgLTAuMDU2LCAtMC4wNTYiKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgZmFsbF9jb25zdHJhaW50KENPTlNUUkFJTlRfVEFCTEUpIHsKKyAgICAgICAgICAgIHZhbHVlcygiLTAuMDU2LCAtMC4wNTYsIC0wLjA1NiIsXAorICAgICAgICAgICAgICAgICAgICItMC4wNTYsIC0wLjA1NiwgLTAuMDU2IixcCisgICAgICAgICAgICAgICAgICAgIi0wLjA1NiwgLTAuMDU2LCAtMC4wNTYiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHBpbihjbGswKXsKKyAgICAgICAgY2xvY2sgICAgICAgICAgICAgOiB0cnVlOworICAgICAgICBkaXJlY3Rpb24gIDogaW5wdXQ7IAorICAgICAgICBjYXBhY2l0YW5jZSA6IDAuMDA2ODg5OTk5OTk5OTk5OTk5OyAgCisgICAgICAgIGludGVybmFsX3Bvd2VyKCl7CisgICAgICAgICAgICB3aGVuIDogIiFjc2IwICYgIXdlYjAiOyAKKyAgICAgICAgICAgIHJpc2VfcG93ZXIoc2NhbGFyKXsKKyAgICAgICAgICAgICAgICB2YWx1ZXMoIjEuMzgwODQwZSswMSIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZmFsbF9wb3dlcihzY2FsYXIpeworICAgICAgICAgICAgICAgIHZhbHVlcygiMS4zODA4NDBlKzAxIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaW50ZXJuYWxfcG93ZXIoKXsKKyAgICAgICAgICAgIHdoZW4gOiAiY3NiMCAmICF3ZWIwIjsgCisgICAgICAgICAgICByaXNlX3Bvd2VyKHNjYWxhcil7CisgICAgICAgICAgICAgICAgdmFsdWVzKCIxLjM4MDg0MGUrMDEiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZhbGxfcG93ZXIoc2NhbGFyKXsKKyAgICAgICAgICAgICAgICB2YWx1ZXMoIjEuMzgwODQwZSswMSIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGludGVybmFsX3Bvd2VyKCl7CisgICAgICAgICAgICB3aGVuIDogIiFjc2IwICYgd2ViMCI7IAorICAgICAgICAgICAgcmlzZV9wb3dlcihzY2FsYXIpeworICAgICAgICAgICAgICAgIHZhbHVlcygiMS4zODA4NDBlKzAxIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmYWxsX3Bvd2VyKHNjYWxhcil7CisgICAgICAgICAgICAgICAgdmFsdWVzKCIxLjM4MDg0MGUrMDEiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpbnRlcm5hbF9wb3dlcigpeworICAgICAgICAgICAgd2hlbiA6ICJjc2IwICYgd2ViMCI7IAorICAgICAgICAgICAgcmlzZV9wb3dlcihzY2FsYXIpeworICAgICAgICAgICAgICAgIHZhbHVlcygiMS4zODA4NDBlKzAxIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmYWxsX3Bvd2VyKHNjYWxhcil7CisgICAgICAgICAgICAgICAgdmFsdWVzKCIxLjM4MDg0MGUrMDEiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0aW1pbmcoKXsgCisgICAgICAgICAgICB0aW1pbmdfdHlwZSA6Im1pbl9wdWxzZV93aWR0aCI7IAorICAgICAgICAgICAgcmVsYXRlZF9waW4gIDogY2xrMDsgCisgICAgICAgICAgICByaXNlX2NvbnN0cmFpbnQoc2NhbGFyKSB7CisgICAgICAgICAgICAgICAgdmFsdWVzKCIwLjk3OCIpOyAKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZhbGxfY29uc3RyYWludChzY2FsYXIpIHsKKyAgICAgICAgICAgICAgICB2YWx1ZXMoIjAuOTc4Iik7IAorICAgICAgICAgICAgfQorICAgICAgICAgfQorICAgICAgICB0aW1pbmcoKXsgCisgICAgICAgICAgICB0aW1pbmdfdHlwZSA6Im1pbmltdW1fcGVyaW9kIjsgCisgICAgICAgICAgICByZWxhdGVkX3BpbiAgOiBjbGswOyAKKyAgICAgICAgICAgIHJpc2VfY29uc3RyYWludChzY2FsYXIpIHsKKyAgICAgICAgICAgICAgICB2YWx1ZXMoIjEuOTU2Iik7IAorICAgICAgICAgICAgfQorICAgICAgICAgICAgZmFsbF9jb25zdHJhaW50KHNjYWxhcikgeworICAgICAgICAgICAgICAgIHZhbHVlcygiMS45NTYiKTsgCisgICAgICAgICAgICB9CisgICAgICAgICB9CisgICAgfQorCisgICAgYnVzKGRvdXQxKXsKKyAgICAgICAgYnVzX3R5cGUgIDogZGF0YTsgCisgICAgICAgIGRpcmVjdGlvbiAgOiBvdXRwdXQ7IAorICAgICAgICBtYXhfY2FwYWNpdGFuY2UgOiAwLjAyNzU1OTk5OTk5OTk5OTk5ODsgIAorICAgICAgICBtaW5fY2FwYWNpdGFuY2UgOiAwLjAwMTcyMjQ5OTk5OTk5OTk5OTk7ICAKKyAgICAgICAgbWVtb3J5X3JlYWQoKXsgCisgICAgICAgICAgICBhZGRyZXNzIDogYWRkcjE7IAorICAgICAgICB9CisgICAgICAgIHBpbihkb3V0MVszMTowXSl7CisgICAgICAgIHRpbWluZygpeyAKKyAgICAgICAgICAgIHRpbWluZ19zZW5zZSA6IG5vbl91bmF0ZTsgCisgICAgICAgICAgICByZWxhdGVkX3BpbiA6ICJjbGsxIjsgCisgICAgICAgICAgICB0aW1pbmdfdHlwZSA6IGZhbGxpbmdfZWRnZTsgCisgICAgICAgICAgICBjZWxsX3Jpc2UoQ0VMTF9UQUJMRSkgeworICAgICAgICAgICAgdmFsdWVzKCIwLjM4MywgMC40MTIsIDAuNTI5IixcCisgICAgICAgICAgICAgICAgICAgIjAuMzgzLCAwLjQxMiwgMC41MjkiLFwKKyAgICAgICAgICAgICAgICAgICAiMC4zODMsIDAuNDEyLCAwLjUyOSIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2VsbF9mYWxsKENFTExfVEFCTEUpIHsKKyAgICAgICAgICAgIHZhbHVlcygiMC4zODMsIDAuNDEyLCAwLjUyOSIsXAorICAgICAgICAgICAgICAgICAgICIwLjM4MywgMC40MTIsIDAuNTI5IixcCisgICAgICAgICAgICAgICAgICAgIjAuMzgzLCAwLjQxMiwgMC41MjkiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJpc2VfdHJhbnNpdGlvbihDRUxMX1RBQkxFKSB7CisgICAgICAgICAgICB2YWx1ZXMoIjAuMDAyLCAwLjAwNSwgMC4wMTYiLFwKKyAgICAgICAgICAgICAgICAgICAiMC4wMDIsIDAuMDA1LCAwLjAxNiIsXAorICAgICAgICAgICAgICAgICAgICIwLjAwMiwgMC4wMDUsIDAuMDE2Iik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmYWxsX3RyYW5zaXRpb24oQ0VMTF9UQUJMRSkgeworICAgICAgICAgICAgdmFsdWVzKCIwLjAwMiwgMC4wMDUsIDAuMDE2IixcCisgICAgICAgICAgICAgICAgICAgIjAuMDAyLCAwLjAwNSwgMC4wMTYiLFwKKyAgICAgICAgICAgICAgICAgICAiMC4wMDIsIDAuMDA1LCAwLjAxNiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBidXMoYWRkcjEpeworICAgICAgICBidXNfdHlwZSAgOiBhZGRyOyAKKyAgICAgICAgZGlyZWN0aW9uICA6IGlucHV0OyAKKyAgICAgICAgY2FwYWNpdGFuY2UgOiAwLjAwNjg4OTk5OTk5OTk5OTk5OTsgIAorICAgICAgICBtYXhfdHJhbnNpdGlvbiAgICAgICA6IDAuMDQ7CisgICAgICAgIHBpbihhZGRyMVs4OjBdKXsKKyAgICAgICAgdGltaW5nKCl7IAorICAgICAgICAgICAgdGltaW5nX3R5cGUgOiBzZXR1cF9yaXNpbmc7IAorICAgICAgICAgICAgcmVsYXRlZF9waW4gIDogImNsazEiOyAKKyAgICAgICAgICAgIHJpc2VfY29uc3RyYWludChDT05TVFJBSU5UX1RBQkxFKSB7CisgICAgICAgICAgICB2YWx1ZXMoIjAuMTAzLCAwLjEwMywgMC4xMDMiLFwKKyAgICAgICAgICAgICAgICAgICAiMC4xMDMsIDAuMTAzLCAwLjEwMyIsXAorICAgICAgICAgICAgICAgICAgICIwLjEwMywgMC4xMDMsIDAuMTAzIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmYWxsX2NvbnN0cmFpbnQoQ09OU1RSQUlOVF9UQUJMRSkgeworICAgICAgICAgICAgdmFsdWVzKCIwLjEwMywgMC4xMDMsIDAuMTAzIixcCisgICAgICAgICAgICAgICAgICAgIjAuMTAzLCAwLjEwMywgMC4xMDMiLFwKKyAgICAgICAgICAgICAgICAgICAiMC4xMDMsIDAuMTAzLCAwLjEwMyIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRpbWluZygpeyAKKyAgICAgICAgICAgIHRpbWluZ190eXBlIDogaG9sZF9yaXNpbmc7IAorICAgICAgICAgICAgcmVsYXRlZF9waW4gIDogImNsazEiOyAKKyAgICAgICAgICAgIHJpc2VfY29uc3RyYWludChDT05TVFJBSU5UX1RBQkxFKSB7CisgICAgICAgICAgICB2YWx1ZXMoIi0wLjA1NiwgLTAuMDU2LCAtMC4wNTYiLFwKKyAgICAgICAgICAgICAgICAgICAiLTAuMDU2LCAtMC4wNTYsIC0wLjA1NiIsXAorICAgICAgICAgICAgICAgICAgICItMC4wNTYsIC0wLjA1NiwgLTAuMDU2Iik7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZhbGxfY29uc3RyYWludChDT05TVFJBSU5UX1RBQkxFKSB7CisgICAgICAgICAgICB2YWx1ZXMoIi0wLjA1NiwgLTAuMDU2LCAtMC4wNTYiLFwKKyAgICAgICAgICAgICAgICAgICAiLTAuMDU2LCAtMC4wNTYsIC0wLjA1NiIsXAorICAgICAgICAgICAgICAgICAgICItMC4wNTYsIC0wLjA1NiwgLTAuMDU2Iik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHBpbihjc2IxKXsKKyAgICAgICAgZGlyZWN0aW9uICA6IGlucHV0OyAKKyAgICAgICAgY2FwYWNpdGFuY2UgOiAwLjAwNjg4OTk5OTk5OTk5OTk5OTsgIAorICAgICAgICB0aW1pbmcoKXsgCisgICAgICAgICAgICB0aW1pbmdfdHlwZSA6IHNldHVwX3Jpc2luZzsgCisgICAgICAgICAgICByZWxhdGVkX3BpbiAgOiAiY2xrMSI7IAorICAgICAgICAgICAgcmlzZV9jb25zdHJhaW50KENPTlNUUkFJTlRfVEFCTEUpIHsKKyAgICAgICAgICAgIHZhbHVlcygiMC4xMDMsIDAuMTAzLCAwLjEwMyIsXAorICAgICAgICAgICAgICAgICAgICIwLjEwMywgMC4xMDMsIDAuMTAzIixcCisgICAgICAgICAgICAgICAgICAgIjAuMTAzLCAwLjEwMywgMC4xMDMiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZhbGxfY29uc3RyYWludChDT05TVFJBSU5UX1RBQkxFKSB7CisgICAgICAgICAgICB2YWx1ZXMoIjAuMTAzLCAwLjEwMywgMC4xMDMiLFwKKyAgICAgICAgICAgICAgICAgICAiMC4xMDMsIDAuMTAzLCAwLjEwMyIsXAorICAgICAgICAgICAgICAgICAgICIwLjEwMywgMC4xMDMsIDAuMTAzIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdGltaW5nKCl7IAorICAgICAgICAgICAgdGltaW5nX3R5cGUgOiBob2xkX3Jpc2luZzsgCisgICAgICAgICAgICByZWxhdGVkX3BpbiAgOiAiY2xrMSI7IAorICAgICAgICAgICAgcmlzZV9jb25zdHJhaW50KENPTlNUUkFJTlRfVEFCTEUpIHsKKyAgICAgICAgICAgIHZhbHVlcygiLTAuMDU2LCAtMC4wNTYsIC0wLjA1NiIsXAorICAgICAgICAgICAgICAgICAgICItMC4wNTYsIC0wLjA1NiwgLTAuMDU2IixcCisgICAgICAgICAgICAgICAgICAgIi0wLjA1NiwgLTAuMDU2LCAtMC4wNTYiKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgZmFsbF9jb25zdHJhaW50KENPTlNUUkFJTlRfVEFCTEUpIHsKKyAgICAgICAgICAgIHZhbHVlcygiLTAuMDU2LCAtMC4wNTYsIC0wLjA1NiIsXAorICAgICAgICAgICAgICAgICAgICItMC4wNTYsIC0wLjA1NiwgLTAuMDU2IixcCisgICAgICAgICAgICAgICAgICAgIi0wLjA1NiwgLTAuMDU2LCAtMC4wNTYiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHBpbihjbGsxKXsKKyAgICAgICAgY2xvY2sgICAgICAgICAgICAgOiB0cnVlOworICAgICAgICBkaXJlY3Rpb24gIDogaW5wdXQ7IAorICAgICAgICBjYXBhY2l0YW5jZSA6IDAuMDA2ODg5OTk5OTk5OTk5OTk5OyAgCisgICAgICAgIGludGVybmFsX3Bvd2VyKCl7CisgICAgICAgICAgICB3aGVuIDogIiFjc2IxIjsgCisgICAgICAgICAgICByaXNlX3Bvd2VyKHNjYWxhcil7CisgICAgICAgICAgICAgICAgdmFsdWVzKCIxLjM4MDg0MGUrMDEiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZhbGxfcG93ZXIoc2NhbGFyKXsKKyAgICAgICAgICAgICAgICB2YWx1ZXMoIjEuMzgwODQwZSswMSIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGludGVybmFsX3Bvd2VyKCl7CisgICAgICAgICAgICB3aGVuIDogImNzYjEiOyAKKyAgICAgICAgICAgIHJpc2VfcG93ZXIoc2NhbGFyKXsKKyAgICAgICAgICAgICAgICB2YWx1ZXMoIjEuMzgwODQwZSswMSIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZmFsbF9wb3dlcihzY2FsYXIpeworICAgICAgICAgICAgICAgIHZhbHVlcygiMS4zODA4NDBlKzAxIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdGltaW5nKCl7IAorICAgICAgICAgICAgdGltaW5nX3R5cGUgOiJtaW5fcHVsc2Vfd2lkdGgiOyAKKyAgICAgICAgICAgIHJlbGF0ZWRfcGluICA6IGNsazE7IAorICAgICAgICAgICAgcmlzZV9jb25zdHJhaW50KHNjYWxhcikgeworICAgICAgICAgICAgICAgIHZhbHVlcygiMC45NzgiKTsgCisgICAgICAgICAgICB9CisgICAgICAgICAgICBmYWxsX2NvbnN0cmFpbnQoc2NhbGFyKSB7CisgICAgICAgICAgICAgICAgdmFsdWVzKCIwLjk3OCIpOyAKKyAgICAgICAgICAgIH0KKyAgICAgICAgIH0KKyAgICAgICAgdGltaW5nKCl7IAorICAgICAgICAgICAgdGltaW5nX3R5cGUgOiJtaW5pbXVtX3BlcmlvZCI7IAorICAgICAgICAgICAgcmVsYXRlZF9waW4gIDogY2xrMTsgCisgICAgICAgICAgICByaXNlX2NvbnN0cmFpbnQoc2NhbGFyKSB7CisgICAgICAgICAgICAgICAgdmFsdWVzKCIxLjk1NiIpOyAKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZhbGxfY29uc3RyYWludChzY2FsYXIpIHsKKyAgICAgICAgICAgICAgICB2YWx1ZXMoIjEuOTU2Iik7IAorICAgICAgICAgICAgfQorICAgICAgICAgfQorICAgIH0KKworICAgIH0KK30KZGlmZiAtLWdpdCBhL29wZW5sYW5lL01ha2VmaWxlIGIvb3BlbmxhbmUvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk2MDQxNgotLS0gL2Rldi9udWxsCisrKyBiL29wZW5sYW5lL01ha2VmaWxlCkBAIC0wLDAgKzEsOTEgQEAKKyMgU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMCBFZmFibGVzcyBDb3Jwb3JhdGlvbgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKworI1NIRUxMID0gc2ggLXh2CitCTE9DS1MgPSAkKHNoZWxsIGZpbmQgKiAtbWF4ZGVwdGggMCAtdHlwZSBkKQorQ09ORklHID0gJChmb3JlYWNoIGJsb2NrLCQoQkxPQ0tTKSwgLi8kKGJsb2NrKS9jb25maWcudGNsKQorQ0xFQU4gPSAkKGZvcmVhY2ggYmxvY2ssJChCTE9DS1MpLCBjbGVhbi0kKGJsb2NrKSkKKworT1BFTkxBTkVfVEFHID89IG1wdzQKK09QRU5MQU5FX0lNQUdFX05BTUUgPz0gZGluZXNoYW5uYXl5YS9vcGVubGFuZTokKE9QRU5MQU5FX1RBRykKK09QRU5MQU5FX0JBU0lDX0NPTU1BTkQgPSAiY2QgL3Byb2plY3Qvb3BlbmxhbmUgJiYgZmxvdy50Y2wgLWRlc2lnbiAuLyQqIC1zYXZlX3BhdGggLi4gLXNhdmUgLXRhZyAkKiAtb3ZlcndyaXRlIgorT1BFTkxBTkVfSU5URVJBQ1RJVkVfQ09NTUFORCA9ICJjZCAvcHJvamVjdC9vcGVubGFuZSAmJiBmbG93LnRjbCAtaXQgLWZpbGUgLi8kKi9pbnRlcmFjdGl2ZS50Y2wgLWRlc2lnbiAuLyQqIC1zYXZlX3BhdGggLi4gLXNhdmUgLXRhZyAkKiAtb3ZlcndyaXRlIgorCithbGw6ICQoQkxPQ0tTKQorCiskKENPTkZJRykgOgorCUBlY2hvICJNaXNzaW5nICRALiBQbGVhc2UgY3JlYXRlIGEgY29uZmlndXJhdGlvbiBmb3IgdGhhdCBkZXNpZ24iCisJQGV4aXQgMQorCiskKEJMT0NLUykgOiAlIDogLi8lL2NvbmZpZy50Y2wgRk9SQ0UKK2lmZXEgKCQoT1BFTkxBTkVfUk9PVCksKQorCUBlY2hvICJQbGVhc2UgZXhwb3J0IE9QRU5MQU5FX1JPT1QiCisJQGV4aXQgMQorZW5kaWYKK2lmZXEgKCQoUERLX1JPT1QpLCkKKwlAZWNobyAiUGxlYXNlIGV4cG9ydCBQREtfUk9PVCIKKwlAZXhpdCAxCitlbmRpZgorCUBlY2hvICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIKKwlAc2xlZXAgMQorCisJQGlmIFsgLWYgLi8kKi9pbnRlcmFjdGl2ZS50Y2wgXTsgdGhlblwKKwkJZG9ja2VyIHJ1biAtaXQgLXYgJChPUEVOTEFORV9ST09UKTovb3BlbkxBTkVfZmxvdyBcCisJCS12ICQoUERLX1JPT1QpOiQoUERLX1JPT1QpIFwKKwkJLXYgJChQV0QpLy4uOi9wcm9qZWN0IFwKKwkJLXYgJChDQVJBVkVMX1JPT1QpOiQoQ0FSQVZFTF9ST09UKSBcCisJCS1lIFBES19ST09UPSQoUERLX1JPT1QpIFwKKwkJLWUgQ0FSQVZFTF9ST09UPSQoQ0FSQVZFTF9ST09UKSBcCisJCS11ICQoc2hlbGwgaWQgLXUgJChVU0VSKSk6JChzaGVsbCBpZCAtZyAkKFVTRVIpKSBcCisJCSQoT1BFTkxBTkVfSU1BR0VfTkFNRSkgc2ggLWMgJChPUEVOTEFORV9JTlRFUkFDVElWRV9DT01NQU5EKTtcCisJZWxzZVwKKwkJZG9ja2VyIHJ1biAtaXQgLXYgJChPUEVOTEFORV9ST09UKTovb3BlbkxBTkVfZmxvdyBcCisJCS12ICQoUERLX1JPT1QpOiQoUERLX1JPT1QpIFwKKwkJLXYgJChQV0QpLy4uOi9wcm9qZWN0IFwKKwkJLXYgJChDQVJBVkVMX1JPT1QpOiQoQ0FSQVZFTF9ST09UKSBcCisJCS1lIFBES19ST09UPSQoUERLX1JPT1QpIFwKKwkJLWUgQ0FSQVZFTF9ST09UPSQoQ0FSQVZFTF9ST09UKSBcCisJCS11ICQoc2hlbGwgaWQgLXUgJChVU0VSKSk6JChzaGVsbCBpZCAtZyAkKFVTRVIpKSBcCisJCSQoT1BFTkxBTkVfSU1BR0VfTkFNRSkgc2ggLWMgJChPUEVOTEFORV9CQVNJQ19DT01NQU5EKTtcCisJZmkKKwlta2RpciAtcCAuLi9zaWdub2ZmLyQqLworCWNwICQqL3J1bnMvJCovT1BFTkxBTkVfVkVSU0lPTiAuLi9zaWdub2ZmLyQqLworCWNwICQqL3J1bnMvJCovUERLX1NPVVJDRVMgLi4vc2lnbm9mZi8kKi8KKwljcCAkKi9ydW5zLyQqL3JlcG9ydHMvZmluYWxfc3VtbWFyeV9yZXBvcnQuY3N2IC4uL3NpZ25vZmYvJCovCisKKy5QSE9OWTogb3BlbmxhbmUKK29wZW5sYW5lOgoraWZlcSAoJChPUEVOTEFORV9ST09UKSwpCisJQGVjaG8gIlBsZWFzZSBleHBvcnQgT1BFTkxBTkVfUk9PVCIKKwlAZXhpdCAxCitlbmRpZgorCWdpdCBjbG9uZSBodHRwczovL2dpdGh1Yi5jb20vZWZhYmxlc3MvT3BlbkxhbmUgLS1icmFuY2g9JChPUEVOTEFORV9UQUcpIC0tZGVwdGg9MSAkKE9QRU5MQU5FX1JPT1QpICYmIFwKKwkJY2QgJChPUEVOTEFORV9ST09UKSAmJiBcCisJCWV4cG9ydCBJTUFHRV9OQU1FPWVmYWJsZXNzL29wZW5sYW5lOiQoT1BFTkxBTkVfVEFHKSAmJiBcCisJCW1ha2Ugb3BlbmxhbmUKKworRk9SQ0U6CisKK2NsZWFuOgorCUBlY2hvICJVc2UgY2xlYW5fYWxsIHRvIGNsZWFuIGV2ZXJ5dGhpbmcgOikiCisKK2NsZWFuX2FsbDogJChDTEVBTikKKworJChDTEVBTik6IGNsZWFuLSUgOgorCXJtIC1yZiBydW5zLyQqCisJcm0gLXJmIC4uL2dkcy8kKioKKwlybSAtcmYgLi4vbWFnLyQqKgorCXJtIC1yZiAuLi9sZWYvJCoqCmRpZmYgLS1naXQgYS9vcGVubGFuZS9jbGtfc2tld19hZGp1c3QvY29uZmlnLnRjbCBiL29wZW5sYW5lL2Nsa19za2V3X2FkanVzdC9jb25maWcudGNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhYmQxZjQKLS0tIC9kZXYvbnVsbAorKysgYi9vcGVubGFuZS9jbGtfc2tld19hZGp1c3QvY29uZmlnLnRjbApAQCAtMCwwICsxLDc2IEBACisjIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjAgRWZhYmxlc3MgQ29ycG9yYXRpb24KKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisjIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBNb2RpZmllZCBieSBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorCisjIEdsb2JhbAorIyAtLS0tLS0KKworc2V0IHNjcmlwdF9kaXIgW2ZpbGUgZGlybmFtZSBbZmlsZSBub3JtYWxpemUgW2luZm8gc2NyaXB0XV1dCisKK3NldCA6OmVudihERVNJR05fTkFNRSkgY2xrX3NrZXdfYWRqdXN0CitzZXQgdmVyaWxvZ19yb290ICRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvCitzZXQgbGVmX3Jvb3QgJHNjcmlwdF9kaXIvLi4vLi4vbGVmLworc2V0IGdkc19yb290ICRzY3JpcHRfZGlyLy4uLy4uL2dkcy8KKyNzZWN0aW9uIGVuZAorCisjIFVzZXIgQ29uZmlndXJhdGlvbnMKKyMKK3NldCA6OmVudihERVNJR05fSVNfQ09SRSkgMAorc2V0IDo6ZW52KEZQX1BETl9DT1JFX1JJTkcpICIwIgorCisKKyMjIFNvdXJjZSBWZXJpbG9nIEZpbGVzCitzZXQgOjplbnYoVkVSSUxPR19GSUxFUykgIlwKKwkkc2NyaXB0X2Rpci8uLi8uLi92ZXJpbG9nL3J0bC9jbGtfc2tld19hZGp1c3Qvc3JjL2Nsa19za2V3X2FkanVzdC5ndiIKKworIyMgQ2xvY2sgY29uZmlndXJhdGlvbnMKKyNzZXQgOjplbnYoQ0xPQ0tfUE9SVCkgImNsa19pbiIKKworI3NldCA6OmVudihDTE9DS19QRVJJT0QpICIxMCIKKworIyMgSW50ZXJuYWwgTWFjcm9zCisjIyMgTWFjcm8gUGxhY2VtZW50CitzZXQgOjplbnYoRlBfUElOX09SREVSX0NGRykgJDo6ZW52KERFU0lHTl9ESVIpL3Bpbl9vcmRlci5jZmcKKworc2V0IDo6ZW52KEZQX1NJWklORykgYWJzb2x1dGUKK3NldCA6OmVudihESUVfQVJFQSkgIjAgMCAxMDAgMTAwIgorCisKKworCitzZXQgOjplbnYoVkREX1BJTikgW2xpc3Qge3ZjY2QxfV0KK3NldCA6OmVudihHTkRfUElOKSBbbGlzdCB7dnNzZDF9XQorCitzZXQgOjplbnYoU1lOVEhfUkVBRF9CTEFDS0JPWF9MSUIpIDEKKworIyBGaWxsIHRoaXMKK3NldCA6OmVudihDTE9DS19UUkVFX1NZTlRIKSAwCisKK3NldCA6OmVudihDRUxMX1BBRCkgNAorCitzZXQgOjplbnYoRlBfQ09SRV9VVElMKSA0MAorc2V0IDo6ZW52KFBMX1JBTkRPTV9HTEJfUExBQ0VNRU5UKSAxCisKK3NldCA6OmVudihCT1RUT01fTUFSR0lOX01VTFQpIDIKK3NldCA6OmVudihUT1BfTUFSR0lOX01VTFQpIDIKK3NldCA6OmVudihHTEJfUlRfTUFYTEFZRVIpIDQKKworIyBoZWxwcyBpbiBhbnRlZW5hIGZpeAorc2V0IDo6ZW52KFVTRV9BUkNfQU5URU5OQV9DSEVDSykgIjAiCisKK3NldCA6OmVudihGUF9QRE5fVlBJVENIKSAyMAorc2V0IDo6ZW52KEZQX1BETl9IUElUQ0gpIDIwCitzZXQgOjplbnYoRlBfUEROX1ZXSURUSCkgMworc2V0IDo6ZW52KEZQX1BETl9IV0lEVEgpIDMKZGlmZiAtLWdpdCBhL29wZW5sYW5lL2Nsa19za2V3X2FkanVzdC9waW5fb3JkZXIuY2ZnIGIvb3BlbmxhbmUvY2xrX3NrZXdfYWRqdXN0L3Bpbl9vcmRlci5jZmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNmYTBhMAotLS0gL2Rldi9udWxsCisrKyBiL29wZW5sYW5lL2Nsa19za2V3X2FkanVzdC9waW5fb3JkZXIuY2ZnCkBAIC0wLDAgKzEsMTMgQEAKKyNCVVNfU09SVAorCisjTUFOVUFMX1BMQUNFCisKKyNXCitjbGtfb3V0ICAgICAgICAgICAgICAwMDAwIDAKKworI0UKK2Nsa19pbiAgICAgICAgICAgICAgMDAwMCAwCitzZWxcWzNcXSAgICAgICAgICAgIDAwMDAgMTAKK3NlbFxbMlxdICAgICAgICAgICAgMDAwMCAxMQorc2VsXFsxXF0gICAgICAgICAgICAwMDAwIDEyCitzZWxcWzBcXSAgICAgICAgICAgIDAwMDAgMTMKZGlmZiAtLWdpdCBhL29wZW5sYW5lL2lvX3BsYWNlLnB5IGIvb3BlbmxhbmUvaW9fcGxhY2UucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODZhYzFmMgotLS0gL2Rldi9udWxsCisrKyBiL29wZW5sYW5lL2lvX3BsYWNlLnB5CkBAIC0wLDAgKzEsNTI4IEBACisjIENvcHlyaWdodCAyMDIwIEVmYWJsZXNzIENvcnBvcmF0aW9uCisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisiIiIKK1BsYWNlcyB0aGUgSU9zIGFjY29yZGluZyB0byBhbiBpbnB1dCBmaWxlLiBTdXBwb3J0cyByZWdleGVzLgorRmlsZSBmb3JtYXQ6CisjTnwjU3wjRXwjVworcGluMV9yZWdleAorcGluMl9yZWdleAorLi4uCisKKyNTfCNOfCNFfCNXCisuLi4KKy4uLgorIiIiCitpbXBvcnQgb2RiCisKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgc3lzCitpbXBvcnQgY2xpY2sKK2ltcG9ydCByYW5kb20KKworCitAY2xpY2suY29tbWFuZCgpCitAY2xpY2sub3B0aW9uKCItbCIsICItLWlucHV0LWxlZiIsIHJlcXVpcmVkPVRydWUsIGhlbHA9IklucHV0IG1lcmdlZCB0bGVmL2xlZiBmaWxlLiIpCitAY2xpY2sub3B0aW9uKAorICAgICItbyIsCisgICAgIi0tb3V0cHV0LWRlZiIsCisgICAgZGVmYXVsdD0iLi9vdXRwdXQuZGVmIiwKKyAgICBoZWxwPSJPdXRwdXQgREVGIGZpbGUgd2l0aCBuZXdseSBwbGFjZWQgcGlucyIsCispCitAY2xpY2sub3B0aW9uKCItYyIsICItLWNvbmZpZyIsIHJlcXVpcmVkPUZhbHNlLCBoZWxwPSJPcHRpb25hbCBjb25maWd1cmF0aW9uIGZpbGUuIikKK0BjbGljay5vcHRpb24oCisgICAgIi1yIiwKKyAgICAiLS1yZXZlcnNlIiwKKyAgICBkZWZhdWx0PSIiLAorICAgIHR5cGU9c3RyLAorICAgIGhlbHA9IlJldmVyc2UgYWxvbmcgY29tbWEsZGVsaW1pdGVkLGNhcmRpbmFsczogZS5nLiBOLEUiLAorKQorQGNsaWNrLm9wdGlvbigiLUwiLCAiLS1sZW5ndGgiLCBkZWZhdWx0PTIsIHR5cGU9ZmxvYXQsIGhlbHA9IlBpbiBsZW5ndGggaW4gbWljcm9ucy4iKQorQGNsaWNrLm9wdGlvbigKKyAgICAiLVYiLAorICAgICItLXZlci1sYXllciIsCisgICAgcmVxdWlyZWQ9VHJ1ZSwKKyAgICBoZWxwPSJOYW1lIG9mIG1ldGFsIGxheWVyIHRvIHBsYWNlIHZlcnRpY2FsIHBpbnMgb24uIiwKKykKK0BjbGljay5vcHRpb24oCisgICAgIi1IIiwKKyAgICAiLS1ob3ItbGF5ZXIiLAorICAgIHJlcXVpcmVkPVRydWUsCisgICAgaGVscD0iTmFtZSBvZiBtZXRhbCBsYXllciB0byBwbGFjZSBob3Jpem9udGFsIHBpbnMgb24uIiwKKykKK0BjbGljay5vcHRpb24oCisgICAgIi0taG9yLWV4dGVuc2lvbiIsCisgICAgZGVmYXVsdD0wLAorICAgIHR5cGU9ZmxvYXQsCisgICAgaGVscD0iRXh0ZW5zaW9uIGZvciB2ZXJ0aWNhbCBwaW5zIGluIG1pY3JvbnMuIiwKKykKK0BjbGljay5vcHRpb24oCisgICAgIi0tdmVyLWV4dGVuc2lvbiIsCisgICAgZGVmYXVsdD0wLAorICAgIHR5cGU9ZmxvYXQsCisgICAgaGVscD0iRXh0ZW5zaW9uIGZvciBob3Jpem9udGFsIHBpbnMgaW4gbWljcm9ucy4iLAorKQorQGNsaWNrLm9wdGlvbigKKyAgICAiLS12ZXItd2lkdGgtbXVsdCIsIGRlZmF1bHQ9MiwgdHlwZT1mbG9hdCwgaGVscD0iTXVsdGlwbGllciBmb3IgdmVydGljYWwgcGlucy4iCispCitAY2xpY2sub3B0aW9uKAorICAgICItLWhvci13aWR0aC1tdWx0IiwgZGVmYXVsdD0yLCB0eXBlPWZsb2F0LCBoZWxwPSJNdWx0aXBsaWVyIGZvciBob3Jpem9udGFsIHBpbnMuIgorKQorQGNsaWNrLm9wdGlvbigKKyAgICAiLS1idXMtc29ydC8tLW5vLWJ1cy1zb3J0IiwKKyAgICBkZWZhdWx0PUZhbHNlLAorICAgIGhlbHA9Ik1pc25vbWVyOiBwaW5zIGFyZSBncm91cGVkIGJ5IGluZGV4IGluc3RlYWQgb2YgYnVzLCBpLmUuIGFbMF0gZ29lcyB3aXRoIGJbMF0gaW5zdGVhZCBvZiBhWzFdLiIsCispCitAY2xpY2suYXJndW1lbnQoImlucHV0X2RlZiIpCitkZWYgY2xpKAorICAgIGlucHV0X2xlZiwKKyAgICBvdXRwdXRfZGVmLAorICAgIGNvbmZpZywKKyAgICB2ZXJfbGF5ZXIsCisgICAgaG9yX2xheWVyLAorICAgIHZlcl93aWR0aF9tdWx0LAorICAgIGhvcl93aWR0aF9tdWx0LAorICAgIGxlbmd0aCwKKyAgICBob3JfZXh0ZW5zaW9uLAorICAgIHZlcl9leHRlbnNpb24sCisgICAgcmV2ZXJzZSwKKyAgICBidXNfc29ydCwKKyAgICBpbnB1dF9kZWYsCispOgorICAgICIiIgorICAgIFBsYWNlcyB0aGUgSU9zIGluIGFuIGlucHV0IGRlZiB3aXRoIGFuIG9wdGlvbmFsIGNvbmZpZyBmaWxlIHRoYXQgc3VwcG9ydHMgcmVnZXhlcy4KKworICAgIENvbmZpZyBmb3JtYXQ6CisgICAgI058I1N8I0V8I1cKKyAgICBwaW4xX3JlZ2V4IChsb3cgY28tb3JkaW5hdGVzIHRvIGhpZ2ggY28tb3JkaW5hdGVzOyBlLmcuLCBib3R0b20gdG8gdG9wIGFuZCBsZWZ0IHRvIHJpZ2h0KQorICAgIHBpbjJfcmVnZXgKKyAgICAuLi4KKworICAgICNTfCNOfCNFfCNXCisgICAgIiIiCisKKyAgICBkZWZfZmlsZV9uYW1lID0gaW5wdXRfZGVmCisgICAgbGVmX2ZpbGVfbmFtZSA9IGlucHV0X2xlZgorICAgIG91dHB1dF9kZWZfZmlsZV9uYW1lID0gb3V0cHV0X2RlZgorICAgIGNvbmZpZ19maWxlX25hbWUgPSBjb25maWcKKyAgICBidXNfc29ydF9mbGFnID0gYnVzX3NvcnQKKworICAgICMxLiBNYW51YWwgUGFkIFBsYWNlbWVudCAtIERpbmVzaCBBCisgICAgbWFudWFsX3BsYWNlX2ZsYWcgPSBGYWxzZSAKKworICAgIGhfbGF5ZXJfbmFtZSA9IGhvcl9sYXllcgorICAgIHZfbGF5ZXJfbmFtZSA9IHZlcl9sYXllcgorCisgICAgaF93aWR0aF9tdWx0ID0gZmxvYXQoaG9yX3dpZHRoX211bHQpCisgICAgdl93aWR0aF9tdWx0ID0gZmxvYXQodmVyX3dpZHRoX211bHQpCisKKyAgICAjIEluaXRpYWxpemUgT3BlbkRCCisgICAgZGJfdG9wID0gb2RiLmRiRGF0YWJhc2UuY3JlYXRlKCkKKyAgICBvZGIucmVhZF9sZWYoZGJfdG9wLCBsZWZfZmlsZV9uYW1lKQorICAgIG9kYi5yZWFkX2RlZihkYl90b3AsIGRlZl9maWxlX25hbWUpCisgICAgYmxvY2sgPSBkYl90b3AuZ2V0Q2hpcCgpLmdldEJsb2NrKCkKKworICAgIG1pY3Jvbl9pbl91bml0cyA9IGJsb2NrLmdldERlZlVuaXRzKCkKKworICAgIExFTkdUSCA9IGludChtaWNyb25faW5fdW5pdHMgKiBsZW5ndGgpCisKKyAgICBIX0VYVEVOU0lPTiA9IGludChtaWNyb25faW5fdW5pdHMgKiBob3JfZXh0ZW5zaW9uKQorICAgIFZfRVhURU5TSU9OID0gaW50KG1pY3Jvbl9pbl91bml0cyAqIHZlcl9leHRlbnNpb24pCisKKyAgICBpZiBIX0VYVEVOU0lPTiA8IDA6CisgICAgICAgIEhfRVhURU5TSU9OID0gMAorCisgICAgaWYgVl9FWFRFTlNJT04gPCAwOgorICAgICAgICBWX0VYVEVOU0lPTiA9IDAKKworICAgIHJldmVyc2VfYXJyX3JhdyA9IHJldmVyc2Uuc3BsaXQoIiwiKQorICAgIHJldmVyc2VfYXJyID0gW10KKyAgICBmb3IgZWxlbWVudCBpbiByZXZlcnNlX2Fycl9yYXc6CisgICAgICAgIGlmIGVsZW1lbnQuc3RyaXAoKSAhPSAiIjoKKyAgICAgICAgICAgIHJldmVyc2VfYXJyLmFwcGVuZChmIiN7ZWxlbWVudH0iKQorCisgICAgZGVmIGdldEdyaWQob3JpZ2luLCBjb3VudCwgc3RlcCk6CisgICAgICAgIHRyYWNrcyA9IFtdCisgICAgICAgIHBvcyA9IG9yaWdpbgorICAgICAgICBmb3IgaSBpbiByYW5nZShjb3VudCk6CisgICAgICAgICAgICB0cmFja3MuYXBwZW5kKHBvcykKKyAgICAgICAgICAgIHBvcyArPSBzdGVwCisgICAgICAgIGFzc2VydCBsZW4odHJhY2tzKSA+IDAKKyAgICAgICAgdHJhY2tzLnNvcnQoKQorCisgICAgICAgIHJldHVybiB0cmFja3MKKworICAgIGRlZiBlcXVhbGx5U3BhY2VkU2VxKG0sIGFycik6CisgICAgICAgIHNlcSA9IFtdCisgICAgICAgIG4gPSBsZW4oYXJyKQorICAgICAgICAjIEJyZXNlbmhhbQorICAgICAgICBpbmRpY2VzID0gW2kgKiBuIC8vIG0gKyBuIC8vICgyICogbSkgZm9yIGkgaW4gcmFuZ2UobSldCisgICAgICAgIGZvciBpIGluIGluZGljZXM6CisgICAgICAgICAgICBzZXEuYXBwZW5kKGFycltpXSkKKyAgICAgICAgcmV0dXJuIHNlcQorCisgICAgIyBIVU1BTiBTT1JUSU5HOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy81OTY3NTAwL2hvdy10by1jb3JyZWN0bHktc29ydC1hLXN0cmluZy13aXRoLWEtbnVtYmVyLWluc2lkZQorICAgIGRlZiBuYXR1cmFsX2tleXMoZW51bSk6CisgICAgICAgIGRlZiBhdG9mKHRleHQpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJldHZhbCA9IGZsb2F0KHRleHQpCisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICByZXR2YWwgPSB0ZXh0CisgICAgICAgICAgICByZXR1cm4gcmV0dmFsCisKKyAgICAgICAgdGV4dCA9IGVudW1bMF0KKyAgICAgICAgdGV4dCA9IHJlLnN1YihyIihcW3xcXXxcLnxcJCkiLCAiIiwgdGV4dCkKKyAgICAgICAgIiIiCisgICAgICAgIGFsaXN0LnNvcnQoa2V5PW5hdHVyYWxfa2V5cykgc29ydHMgaW4gaHVtYW4gb3JkZXIKKyAgICAgICAgaHR0cDovL25lZGJhdGNoZWxkZXIuY29tL2Jsb2cvMjAwNzEyL2h1bWFuX3NvcnRpbmcuaHRtbAorICAgICAgICAoc2VlIHRvb3RoeSdzIGltcGxlbWVudGF0aW9uIGluIHRoZSBjb21tZW50cykKKyAgICAgICAgZmxvYXQgcmVnZXggY29tZXMgZnJvbSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMTI2NDMwNzMvMTkwNTk3CisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gWworICAgICAgICAgICAgYXRvZihjKSBmb3IgYyBpbiByZS5zcGxpdChyIlsrLV0/KFswLTldKyg/OlsuXVswLTldKik/fFsuXVswLTldKykiLCB0ZXh0KQorICAgICAgICBdCisKKyAgICBkZWYgYnVzX2tleXMoZW51bSk6CisgICAgICAgIHRleHQgPSBlbnVtWzBdCisgICAgICAgIG0gPSByZS5tYXRjaChyIl4uKlxbKFxkKylcXSQiLCB0ZXh0KQorICAgICAgICBpZiBub3QgbToKKyAgICAgICAgICAgIHJldHVybiAtMQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIGludChtLmdyb3VwKDEpKQorCisgICAgIzIuIEZpbmQgdGhlIFNsb3QgbWF0Y2hpbmcgbmV4dCBuZWFyZXN0IHNsb3QtRGluZXNoQQorICAgIGRlZiBmaW5kU2xvdCh2YWwsIGFycik6CisgICAgICAgIGZvciBpIGluIGFycjoKKyAgICAgICAgICAgIGlmKGkgPiB2YWwpOgorICAgICAgICAgICAgICAgIHJldHVybiBpCisgICAgICAgIHByaW50KCJFUlJPUjogTmV4dCBWYWxpZCBQb3NpdGlvbiBub3QgZm91bmQgOiIsdmFsKQorICAgICAgICByZXR1cm4gLTEKKworICAgICMgcmVhZCBjb25maWcKKworICAgIHBpbl9wbGFjZW1lbnRfY2ZnID0geyIjTiI6IFtdLCAiI0UiOiBbXSwgIiNTIjogW10sICIjVyI6IFtdfQorICAgIGN1cl9zaWRlID0gTm9uZQorICAgIGlmIGNvbmZpZ19maWxlX25hbWUgaXMgbm90IE5vbmUgYW5kIGNvbmZpZ19maWxlX25hbWUgIT0gIiI6CisgICAgICAgIHdpdGggb3Blbihjb25maWdfZmlsZV9uYW1lLCAiciIpIGFzIGNvbmZpZ19maWxlOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gY29uZmlnX2ZpbGU6CisgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUuc3BsaXQoKQorICAgICAgICAgICAgICAgIGlmIGxlbihsaW5lKSA9PSAwOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgIzMuIERpbmVzaCBBIC0gU3RhcnQKKyAgICAgICAgICAgICAgICBpZihtYW51YWxfcGxhY2VfZmxhZyA9PSBGYWxzZSk6CisgICAgICAgICAgICAgICAgICAgIGlmIGxlbihsaW5lKSA+IDE6CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgiT25seSBvbmUgZW50cnkgYWxsb3dlZCBwZXIgbGluZS4iKQorICAgICAgICAgICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBsaW5lWzBdCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgI0R1cmluZyBNYW51YWwgUGxhY2Ugd2UgYXJlIGFsbG93aW5nIEZvdXIgZmllbGQKKyAgICAgICAgICAgICAgICAgICAgIyA8UGFkIE5hbWU+IDxPZmZzZXQ+IDxQb3NpdGlvbj4gPE11bHRpcGxpZXI+CisgICAgICAgICAgICAgICAgICAgICMgQ2F1c2lvbjogTWFrZSBzdXJlIHRoYXQgeW91IGhhdmUgZ2l2ZW4gYWJzb2x1dGUgbmFtZSwgZWxzZSBpdCB3aWxsIGdpdmUgaXNzdWUKKyAgICAgICAgICAgICAgICAgICAgaWYgbGVuKGxpbmUpID4gNDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCJPbmx5IEZvdXIgZW50cnkgYWxsb3dlZCBwZXIgbGluZS4iKQorICAgICAgICAgICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAgICAgICAgICAgICAgICAgaWYgbGluZVswXSBub3QgaW4gWyIjTiIsICIjRSIsICIjUyIsICIjVyIsICIjTlIiLCAiI0VSIiwgIiNTUiIsICIjV1IiXToKKyAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuID0gbGluZQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBsaW5lWzBdCisKKyAgICAgICAgICAgICAgICBpZiBjdXJfc2lkZSBpcyBub3QgTm9uZSBhbmQgdG9rZW5bMF0gIT0gIiMiOgorICAgICAgICAgICAgICAgICAgICBwaW5fcGxhY2VtZW50X2NmZ1tjdXJfc2lkZV0uYXBwZW5kKHRva2VuKQorICAgICAgICAgICAgICAgIGVsaWYgdG9rZW4gbm90IGluIFsKKyAgICAgICAgICAgICAgICAgICAgIiNOIiwKKyAgICAgICAgICAgICAgICAgICAgIiNFIiwKKyAgICAgICAgICAgICAgICAgICAgIiNTIiwKKyAgICAgICAgICAgICAgICAgICAgIiNXIiwKKyAgICAgICAgICAgICAgICAgICAgIiNOUiIsCisgICAgICAgICAgICAgICAgICAgICIjRVIiLAorICAgICAgICAgICAgICAgICAgICAiI1NSIiwKKyAgICAgICAgICAgICAgICAgICAgIiNXUiIsCisgICAgICAgICAgICAgICAgICAgICIjQlVTX1NPUlQiLAorICAgICAgICAgICAgICAgICAgICAiI01BTlVBTF9QTEFDRSIKKyAgICAgICAgICAgICAgICBdOgorICAgICAgICAgICAgICAgICAgICBwcmludCgKKyAgICAgICAgICAgICAgICAgICAgICAgICJWYWxpZCBkaXJlY3RpdmVzIGFyZSAjTiwgI0UsICNTLCBvciAjVy4gQXBwZW5kIFIgZm9yIHJldmVyc2luZyB0aGUgZGVmYXVsdCBvcmRlci4iLAorICAgICAgICAgICAgICAgICAgICAgICAgIlVzZSAjQlVTX1NPUlQgdG8gZ3JvdXAgJ2J1cyBiaXRzJyBieSBpbmRleC4iLAorICAgICAgICAgICAgICAgICAgICAgICAgIlBsZWFzZSBtYWtlIHN1cmUgeW91IGhhdmUgc2V0IGEgdmFsaWQgc2lkZSBmaXJzdCBiZWZvcmUgbGlzdGluZyBwaW5zIiwKKyAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICAgICAgICAgIGVsaWYgdG9rZW4gPT0gIiNCVVNfU09SVCI6CisgICAgICAgICAgICAgICAgICAgIGJ1c19zb3J0X2ZsYWcgPSBUcnVlCisgICAgICAgICAgICAgICAgIzQgLSBEaW5lc2ggQQorICAgICAgICAgICAgICAgIGVsaWYgdG9rZW4gPT0gIiNNQU5VQUxfUExBQ0UiOgorICAgICAgICAgICAgICAgICAgICBwcmludCgiSW5wdXQgdG9rZW4gIix0b2tlbikKKyAgICAgICAgICAgICAgICAgICAgbWFudWFsX3BsYWNlX2ZsYWcgPSBUcnVlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgaWYgbGVuKHRva2VuKSA9PSAzOgorICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSB0b2tlblswOjJdCisgICAgICAgICAgICAgICAgICAgICAgICByZXZlcnNlX2Fyci5hcHBlbmQodG9rZW4pCisgICAgICAgICAgICAgICAgICAgIGN1cl9zaWRlID0gdG9rZW4KKworICAgICMgYnVpbGQgYSBsaXN0IG9mIHBpbnMKKworICAgIGNoaXBfdG9wID0gZGJfdG9wLmdldENoaXAoKQorICAgIGJsb2NrX3RvcCA9IGNoaXBfdG9wLmdldEJsb2NrKCkKKyAgICB0b3BfZGVzaWduX25hbWUgPSBibG9ja190b3AuZ2V0TmFtZSgpCisgICAgdGVjaCA9IGRiX3RvcC5nZXRUZWNoKCkKKworICAgIEhfTEFZRVIgPSB0ZWNoLmZpbmRMYXllcihoX2xheWVyX25hbWUpCisgICAgVl9MQVlFUiA9IHRlY2guZmluZExheWVyKHZfbGF5ZXJfbmFtZSkKKworICAgIEhfV0lEVEggPSBpbnQoaF93aWR0aF9tdWx0ICogSF9MQVlFUi5nZXRXaWR0aCgpKQorICAgIFZfV0lEVEggPSBpbnQodl93aWR0aF9tdWx0ICogVl9MQVlFUi5nZXRXaWR0aCgpKQorCisgICAgcHJpbnQoIlRvcC1sZXZlbCBkZXNpZ24gbmFtZToiLCB0b3BfZGVzaWduX25hbWUpCisKKyAgICBidGVybXMgPSBibG9ja190b3AuZ2V0QlRlcm1zKCkKKyAgICBidGVybXNfZW51bSA9IFtdCisgICAgZm9yIGJ0ZXJtIGluIGJ0ZXJtczoKKyAgICAgICAgcGluX25hbWUgPSBidGVybS5nZXROYW1lKCkKKyAgICAgICAgYnRlcm1zX2VudW0uYXBwZW5kKChwaW5fbmFtZSwgYnRlcm0pKQorCisgICAgIyBzb3J0IHRoZW0gImh1bWFubHkiCisgICAgYnRlcm1zX2VudW0uc29ydChrZXk9bmF0dXJhbF9rZXlzKQorICAgIGlmIGJ1c19zb3J0X2ZsYWc6CisgICAgICAgIGJ0ZXJtc19lbnVtLnNvcnQoa2V5PWJ1c19rZXlzKQorICAgIGJ0ZXJtcyA9IFtidGVybVsxXSBmb3IgYnRlcm0gaW4gYnRlcm1zX2VudW1dCisKKyAgICBwaW5fcGxhY2VtZW50ID0geyIjTiI6IFtdLCAiI0UiOiBbXSwgIiNTIjogW10sICIjVyI6IFtdfQorICAgIGJ0ZXJtX3JlZ2V4X21hcCA9IHt9CisgICAgIzUuIERpbmVzaCBBCisgICAgaWYobWFudWFsX3BsYWNlX2ZsYWcgPT0gRmFsc2UpOgorCSAgICBmb3Igc2lkZSBpbiBwaW5fcGxhY2VtZW50X2NmZzoKKyAgICAgICAgICAgICAgICBmb3IgcmVnZXggaW4gcGluX3BsYWNlbWVudF9jZmdbc2lkZV06ICAjIGdvaW5nIHRocm91Z2ggdGhlbSBpbiBvcmRlcgorICAgICAgICAgICAgICAgICAgICByZWdleCArPSAiJCIgICMgYW5jaG9yCisgICAgICAgICAgICAgICAgICAgIGZvciBidGVybSBpbiBidGVybXM6CisgICAgICAgICAgICAgICAgICAgICAgICAjIGlmIGEgcGluIG5hbWUgbWF0Y2hlcyBtdWx0aXBsZSByZWdleGVzLCB0aGVpciBvcmRlciB3aWxsIGJlCisgICAgICAgICAgICAgICAgICAgICAgICAjIGFyYml0cmFyeS4gTW9yZSByZWZpbmVtZW50IHJlcXVpcmVzIG1vcmUgc3RyaWN0IHJlZ2V4ZXMgKG9yIGp1c3QKKyAgICAgICAgICAgICAgICAgICAgICAgICMgdGhlIGV4YWN0IHBpbiBuYW1lKS4KKyAgICAgICAgICAgICAgICAgICAgICAgIHBpbl9uYW1lID0gYnRlcm0uZ2V0TmFtZSgpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiByZS5tYXRjaChyZWdleCwgcGluX25hbWUpIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGJ0ZXJtIGluIGJ0ZXJtX3JlZ2V4X21hcDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoCisJCSAgICAgICAgICAgICAgICAgICAgIkVycm9yOiBNdWx0aXBsZSByZWdleGVzIG1hdGNoZWQiLAorCQkgICAgICAgICAgICAgICAgICAgIHBpbl9uYW1lLAorCQkgICAgICAgICAgICAgICAgICAgICIuIFRob3NlIGFyZSIsCisJCSAgICAgICAgICAgICAgICAgICAgYnRlcm1fcmVnZXhfbWFwW2J0ZXJtXSwKKwkJICAgICAgICAgICAgICAgICAgICAiYW5kIiwKKwkJICAgICAgICAgICAgICAgICAgICByZWdleCwKKwkJICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLmV4aXQob3MuRVhfREFUQUVSUikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBidGVybV9yZWdleF9tYXBbYnRlcm1dID0gcmVnZXgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaW5fcGxhY2VtZW50W3NpZGVdLmFwcGVuZChidGVybSkgICMgdG8gbWFpbnRhaW4gdGhlIG9yZGVyCisKKwkgICAgdW5tYXRjaGVkX2J0ZXJtcyA9IFtidGVybSBmb3IgYnRlcm0gaW4gYnRlcm1zIGlmIGJ0ZXJtIG5vdCBpbiBidGVybV9yZWdleF9tYXBdCisKKwkgICAgaWYgbGVuKHVubWF0Y2hlZF9idGVybXMpID4gMDoKKyAgICAgICAgICAgICAgICBwcmludCgiV2FybmluZzogU29tZSBwaW5zIHdlcmVuJ3QgbWF0Y2hlZCBieSB0aGUgY29uZmlnIGZpbGUiKQorICAgICAgICAgICAgICAgIHByaW50KCJUaG9zZSBhcmU6IiwgW2J0ZXJtLmdldE5hbWUoKSBmb3IgYnRlcm0gaW4gdW5tYXRjaGVkX2J0ZXJtc10pCisgICAgICAgICAgICAgICAgaWYgVHJ1ZToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoIkFzc2lnbmluZyByYW5kb20gc2lkZXMgdG8gdGhlIGFib3ZlIHBpbnMiKQorICAgICAgICAgICAgICAgICAgICBmb3IgYnRlcm0gaW4gdW5tYXRjaGVkX2J0ZXJtczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbV9zaWRlID0gcmFuZG9tLmNob2ljZShsaXN0KHBpbl9wbGFjZW1lbnQua2V5cygpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpbl9wbGFjZW1lbnRbcmFuZG9tX3NpZGVdLmFwcGVuZChidGVybSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgIzYgRGluZXNoIEEKKyAgICBlbHNlOgorCSAgICBmb3Igc2lkZSBpbiBwaW5fcGxhY2VtZW50X2NmZzoKKyAgICAgICAgICAgICAgICBmb3IgcmVnZXggaW4gcGluX3BsYWNlbWVudF9jZmdbc2lkZV06ICAjIGdvaW5nIHRocm91Z2ggdGhlbSBpbiBvcmRlcgorICAgICAgICAgICAgICAgICAgICByZWdleCA9IHJlZ2V4WzBdICAjIHRha2UgZmlyc3QgdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgcmVnZXggKz0gIiQiICAjIGFuY2hvcgorICAgICAgICAgICAgICAgICAgICBmb3IgYnRlcm0gaW4gYnRlcm1zOgorCQkgICAgICAgICMgaWYgYSBwaW4gbmFtZSBtYXRjaGVzIG11bHRpcGxlIHJlZ2V4ZXMsIHRoZWlyIG9yZGVyIHdpbGwgYmUKKwkJICAgICAgICAjIGFyYml0cmFyeS4gTW9yZSByZWZpbmVtZW50IHJlcXVpcmVzIG1vcmUgc3RyaWN0IHJlZ2V4ZXMgKG9yIGp1c3QKKwkJICAgICAgICAjIHRoZSBleGFjdCBwaW4gbmFtZSkuCisgICAgICAgICAgICAgICAgICAgICAgICBwaW5fbmFtZSA9IGJ0ZXJtLmdldE5hbWUoKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgcmUubWF0Y2gocmVnZXgsIHBpbl9uYW1lKSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgiRGVidWc6IFNlcmNoaW5nIFBpbiBtYXRjaCIscmVnZXgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgYnRlcm0gaW4gYnRlcm1fcmVnZXhfbWFwOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjcHJpbnQoIldhcm5pbmc6IE11bHRpcGxlIHJlZ2V4ZXMgbWF0Y2hlZCIsIHBpbl9uYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgIi4gVGhvc2UgYXJlIiwgYnRlcm1fcmVnZXhfbWFwW2J0ZXJtXSwgImFuZCIsIHJlZ2V4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ0ZXJtX3JlZ2V4X21hcFtidGVybV0gPSByZWdleAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpbl9wbGFjZW1lbnRbc2lkZV0uYXBwZW5kKGJ0ZXJtKSAgIyB0byBtYWludGFpbiB0aGUgb3JkZXIKKwkgICAgCisJICAgIHVubWF0Y2hlZF9idGVybXMgPSBbYnRlcm0gZm9yIGJ0ZXJtIGluIGJ0ZXJtcyBpZiBidGVybSBub3QgaW4gYnRlcm1fcmVnZXhfbWFwXQorCSAgICAKKwkgICAgaWYgbGVuKHVubWF0Y2hlZF9idGVybXMpID4gMDoKKyAgICAgICAgICAgICAgICBwcmludCgiV2FybmluZzogU29tZSBwaW5zIHdlcmVuJ3QgbWF0Y2hlZCBieSB0aGUgY29uZmlnIGZpbGUiKQorICAgICAgICAgICAgICAgIHByaW50KCJUaG9zZSBhcmU6IiwgW2J0ZXJtLmdldE5hbWUoKSBmb3IgYnRlcm0gaW4gdW5tYXRjaGVkX2J0ZXJtc10pCisgICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworCisgICAgYXNzZXJ0IGxlbihibG9ja190b3AuZ2V0QlRlcm1zKCkpID09IGxlbigKKyAgICAgICAgcGluX3BsYWNlbWVudFsiI04iXQorICAgICAgICArIHBpbl9wbGFjZW1lbnRbIiNFIl0KKyAgICAgICAgKyBwaW5fcGxhY2VtZW50WyIjUyJdCisgICAgICAgICsgcGluX3BsYWNlbWVudFsiI1ciXQorICAgICkKKworICAgICMgZ2VuZXJhdGUgc2xvdHMKKworICAgIERJRV9BUkVBID0gYmxvY2tfdG9wLmdldERpZUFyZWEoKQorICAgIEJMT0NLX0xMX1ggPSBESUVfQVJFQS54TWluKCkKKyAgICBCTE9DS19MTF9ZID0gRElFX0FSRUEueU1pbigpCisgICAgQkxPQ0tfVVJfWCA9IERJRV9BUkVBLnhNYXgoKQorICAgIEJMT0NLX1VSX1kgPSBESUVfQVJFQS55TWF4KCkKKworICAgIHByaW50KCJCbG9jayBib3VuZGFyaWVzOiIsIEJMT0NLX0xMX1gsIEJMT0NLX0xMX1ksIEJMT0NLX1VSX1gsIEJMT0NLX1VSX1kpCisKKyAgICBvcmlnaW4sIGNvdW50LCBzdGVwID0gYmxvY2tfdG9wLmZpbmRUcmFja0dyaWQoSF9MQVlFUikuZ2V0R3JpZFBhdHRlcm5ZKDApCisKKyAgICAjNy4gU2F2ZSB0aGUgaG9yaXpvbnRhbCBvcmlnaW4gYW5kIHN0ZXAgLSBEaW5lc2hBCisgICAgaF9vcmlnaW4gPSBvcmlnaW4KKyAgICBoX3N0ZXAgICA9IHN0ZXAKKworICAgIGhfdHJhY2tzID0gZ2V0R3JpZChvcmlnaW4sIGNvdW50LCBzdGVwKQorCisgICAgb3JpZ2luLCBjb3VudCwgc3RlcCA9IGJsb2NrX3RvcC5maW5kVHJhY2tHcmlkKFZfTEFZRVIpLmdldEdyaWRQYXR0ZXJuWCgwKQorCisgICAgIzguIFNhdmUgdGhlIGhvcml6b250YWwgb3JpZ2luIGFuZCBzdGVwIC0gRGluZXNoQQorICAgIHZfb3JpZ2luID0gb3JpZ2luCisgICAgdl9zdGVwICAgPSBzdGVwCisKKyAgICB2X3RyYWNrcyA9IGdldEdyaWQob3JpZ2luLCBjb3VudCwgc3RlcCkKKworICAgIGZvciByZXYgaW4gcmV2ZXJzZV9hcnI6CisgICAgICAgIHBpbl9wbGFjZW1lbnRbcmV2XS5yZXZlcnNlKCkKKworICAgICMgY3JlYXRlIHRoZSBwaW5zCisgICAgIzkuICBEaW5lc2hBCisgICAgaWYobWFudWFsX3BsYWNlX2ZsYWcgPT0gRmFsc2UpOgorCSAgICBmb3Igc2lkZSBpbiBwaW5fcGxhY2VtZW50OgorICAgICAgICAgICAgICAgIGlmIHNpZGUgaW4gWyIjTiIsICIjUyJdOgorICAgICAgICAgICAgICAgICAgICBzbG90cyA9IGVxdWFsbHlTcGFjZWRTZXEobGVuKHBpbl9wbGFjZW1lbnRbc2lkZV0pLCB2X3RyYWNrcykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzbG90cyA9IGVxdWFsbHlTcGFjZWRTZXEobGVuKHBpbl9wbGFjZW1lbnRbc2lkZV0pLCBoX3RyYWNrcykKKworICAgICAgICAgICAgICAgIGFzc2VydCBsZW4oc2xvdHMpID09IGxlbihwaW5fcGxhY2VtZW50W3NpZGVdKQorCisgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKHBpbl9wbGFjZW1lbnRbc2lkZV0pKToKKyAgICAgICAgICAgICAgICAgICAgYnRlcm0gPSBwaW5fcGxhY2VtZW50W3NpZGVdW2ldCisgICAgICAgICAgICAgICAgICAgIHNsb3QgPSBzbG90c1tpXQorCisgICAgICAgICAgICAgICAgICAgIHBpbl9uYW1lID0gYnRlcm0uZ2V0TmFtZSgpCisgICAgICAgICAgICAgICAgICAgIHBpbnMgPSBidGVybS5nZXRCUGlucygpCisgICAgICAgICAgICAgICAgICAgIGlmIGxlbihwaW5zKSA+IDA6CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgiV2FybmluZzoiLCBwaW5fbmFtZSwgImFscmVhZHkgaGFzIHNoYXBlcy4gTW9kaWZ5aW5nIHRoZW0iKQorICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IGxlbihwaW5zKSA9PSAxCisgICAgICAgICAgICAgICAgICAgICAgICBwaW5fYnBpbiA9IHBpbnNbMF0KKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpbl9icGluID0gb2RiLmRiQlBpbl9jcmVhdGUoYnRlcm0pCisKKyAgICAgICAgICAgICAgICAgICAgcGluX2JwaW4uc2V0UGxhY2VtZW50U3RhdHVzKCJQTEFDRUQiKQorCisgICAgICAgICAgICAgICAgICAgIGlmIHNpZGUgaW4gWyIjTiIsICIjUyJdOgorICAgICAgICAgICAgICAgICAgICAgICAgcmVjdCA9IG9kYi5SZWN0KDAsIDAsIFZfV0lEVEgsIExFTkdUSCArIFZfRVhURU5TSU9OKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2lkZSA9PSAiI04iOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBCTE9DS19VUl9ZIC0gTEVOR1RICisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBCTE9DS19MTF9ZIC0gVl9FWFRFTlNJT04KKyAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QubW92ZVRvKHNsb3QgLSBWX1dJRFRIIC8vIDIsIHkpCisgICAgICAgICAgICAgICAgICAgICAgICBvZGIuZGJCb3hfY3JlYXRlKHBpbl9icGluLCBWX0xBWUVSLCAqcmVjdC5sbCgpLCAqcmVjdC51cigpKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgcmVjdCA9IG9kYi5SZWN0KDAsIDAsIExFTkdUSCArIEhfRVhURU5TSU9OLCBIX1dJRFRIKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2lkZSA9PSAiI0UiOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggPSBCTE9DS19VUl9YIC0gTEVOR1RICisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggPSBCTE9DS19MTF9YIC0gSF9FWFRFTlNJT04KKyAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QubW92ZVRvKHgsIHNsb3QgLSBIX1dJRFRIIC8vIDIpCisgICAgICAgICAgICAgICAgICAgICAgICBvZGIuZGJCb3hfY3JlYXRlKHBpbl9icGluLCBIX0xBWUVSLCAqcmVjdC5sbCgpLCAqcmVjdC51cigpKQorCisgICAgZWxzZToKKwkgICAgIzEwLk5ldyBMb2dpYywgTWFudWFsIFBpbiBQbGFjZW1lbnQgLSBEaW5lc2ggQQorCSAgICAjcHJpbnQoIkFsbG93ZWQgVlRyYWNrcyIsdl90cmFja3MpCisJICAgICNwcmludCgiQWxsb3dlZCBoVHJhY2tzIixoX3RyYWNrcykKKworCSAgICBmb3Igc2lkZSBpbiBwaW5fcGxhY2VtZW50OgorCisgICAgICAgICAgICAgICAgaWYobGVuKHBpbl9wbGFjZW1lbnRbc2lkZV0pICE9IGxlbihwaW5fcGxhY2VtZW50X2NmZ1tzaWRlXSkpOgorICAgICAgICAgICAgICAgICAgICBwcmludCgiRVJST1IgOiBBdCBTaWRlOiIsIHNpZGUsICIgVG90YWwgUGluIERlZmluZWQgIixsZW4ocGluX3BsYWNlbWVudF9jZmdbc2lkZV0pLCAiTW9yZSB0aGFuIGF2YWlsYWJsZToiLGxlbihwaW5fcGxhY2VtZW50W3NpZGVdKSkKKwkJICAgIAorCQkjY2hlY2sgZGVmaW5lZCBwYWQgYXJlIG1vcmUgdGhhbiBhdmFpYmFsZSBvbmUKKyAgICAgICAgICAgICAgICBhc3NlcnQgbGVuKHBpbl9wbGFjZW1lbnRbc2lkZV0pID09IGxlbihwaW5fcGxhY2VtZW50X2NmZ1tzaWRlXSkKKyAgICAgICAgICAgICAgICBzdGFydCA9IDAKKwkgICAgCisgICAgICAgICAgICAgICAgc3RhcnRfbG9jID0gMAorICAgICAgICAgICAgICAgIHBhZF9wb3MgICA9IDAKKyAgICAgICAgICAgICAgICBzbG90X3ByZSA9IDAKKyAgICAgICAgICAgICAgICAjRGluZXNoOiBHaXZlIFN0ZXAgTXVsdGlwbGVyIHNpemUgKjIgIGZvciBiZXR0ZXIgcGFkIHBsYWNlbWVudAorICAgICAgICAgICAgICAgIG11bHRpcGxpZXI9IDIKKyAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4ocGluX3BsYWNlbWVudF9jZmdbc2lkZV0pKToKKyAgICAgICAgICAgICAgICAgICAgI0RpbmVzaDogTXVsdGlwbHkgdGhlIG9mZnNldCBieSAxMDAwIGZvciBtaWNybyBjb252ZXJzaW9uCisgICAgICAgICAgICAgICAgICAgIGlmKGxlbihwaW5fcGxhY2VtZW50X2NmZ1tzaWRlXVtpXSkgPiAxKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2xvYyA9IGludChwaW5fcGxhY2VtZW50X2NmZ1tzaWRlXVtpXVsxXSkKKyAgICAgICAgICAgICAgICAgICAgaWYobGVuKHBpbl9wbGFjZW1lbnRfY2ZnW3NpZGVdW2ldKSA+IDIpOgorICAgICAgICAgICAgICAgICAgICAgICAgcGFkX3BvcyAgID0gaW50KHBpbl9wbGFjZW1lbnRfY2ZnW3NpZGVdW2ldWzJdKQorICAgICAgICAgICAgICAgICAgICBpZihsZW4ocGluX3BsYWNlbWVudF9jZmdbc2lkZV1baV0pID4gMyk6CisgICAgICAgICAgICAgICAgICAgICAgICBtdWx0aXBsaWVyID0gaW50KHBpbl9wbGFjZW1lbnRfY2ZnW3NpZGVdW2ldWzNdKQorCisgICAgICAgICAgICAgICAgICAgIGlmIHNpZGUgaW4gWyIjTiIsICIjUyJdOgorICAgICAgICAgICAgICAgICAgICAgICAgc2xvdHQgPSBzdGFydF9sb2MqMTAwMCtpbnQodl9vcmlnaW4pKyhpbnQodl9zdGVwKSAqIHBhZF9wb3MgKiBtdWx0aXBsaWVyKQorICAgICAgICAgICAgICAgICAgICAgICAgc2xvdCA9ZmluZFNsb3Qoc2xvdHQsdl90cmFja3MpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBzbG90dCA9IHN0YXJ0X2xvYyoxMDAwK2ludChoX29yaWdpbikrKGludChoX3N0ZXApICogcGFkX3BvcyAqIG11bHRpcGxpZXIpCisgICAgICAgICAgICAgICAgICAgICAgICBzbG90ID1maW5kU2xvdChzbG90dCxoX3RyYWNrcykKKwkJICAKKyAgICAgICAgICAgICAgICAgICAgcGFkX3BvcyArPTEKKyAgICAgICAgICAgICAgICAgICAgYnRlcm0gPSBwaW5fcGxhY2VtZW50W3NpZGVdW2ldCisJICAgIAorICAgICAgICAgICAgICAgICAgICBwaW5fbmFtZSA9IGJ0ZXJtLmdldE5hbWUoKQorICAgICAgICAgICAgICAgICAgICBwaW5zID0gYnRlcm0uZ2V0QlBpbnMoKQorICAgICAgICAgICAgICAgICAgICBpZiBsZW4ocGlucykgPiAwOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoIldhcm5pbmc6IiwgcGluX25hbWUsICJhbHJlYWR5IGhhcyBzaGFwZXMuIE1vZGlmeWluZyB0aGVtIikKKyAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCBsZW4ocGlucykgPT0gMQorICAgICAgICAgICAgICAgICAgICAgICAgcGluX2JwaW4gPSBwaW5zWzBdCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBwaW5fYnBpbiA9IG9kYi5kYkJQaW5fY3JlYXRlKGJ0ZXJtKQorCisgICAgICAgICAgICAgICAgICAgIGlmKHNsb3QgPCBzbG90X3ByZSk6CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgiRVJST1I6IiwgIkN1cnJlbnQgUGFkOiIsIHBpbl9uYW1lLCAiIFNsb3Q6IiAsIHNsb3QsICIgaXMgbGVzcyB0aGFuIFByZXZpb3VzIE9uZToiLHNsb3RfcHJlKQorICAgICAgICAgICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworICAgICAgICAgICAgICAgICAgICBzbG90X3ByZSA9IHNsb3QKKworICAgICAgICAgICAgICAgICAgICBwcmludCgiRGluZXNoOiBQbGFjaW5nIFBhZDoiICxwaW5fbmFtZSwgIiBBdCBTaWRlOiAiLCBzaWRlLCAiIFNsb3Q6ICIsIHNsb3QpCisgICAgICAgICAgICAgICAgICAgIHBpbl9icGluLnNldFBsYWNlbWVudFN0YXR1cygiUExBQ0VEIikKKwkgICAgCisgICAgICAgICAgICAgICAgICAgIGlmIHNpZGUgaW4gWyIjTiIsICIjUyJdOgorICAgICAgICAgICAgICAgICAgICAgICAgcmVjdCA9IG9kYi5SZWN0KDAsIDAsIFZfV0lEVEgsIExFTkdUSCtWX0VYVEVOU0lPTikKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNpZGUgPT0gIiNOIjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gQkxPQ0tfVVJfWS1MRU5HVEgKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IEJMT0NLX0xMX1ktVl9FWFRFTlNJT04KKyAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QubW92ZVRvKHNsb3QtVl9XSURUSC8vMiwgeSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG9kYi5kYkJveF9jcmVhdGUocGluX2JwaW4sIFZfTEFZRVIsICpyZWN0LmxsKCksICpyZWN0LnVyKCkpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICByZWN0ID0gb2RiLlJlY3QoMCwgMCwgTEVOR1RIK0hfRVhURU5TSU9OLCBIX1dJRFRIKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2lkZSA9PSAiI0UiOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggPSBCTE9DS19VUl9YLUxFTkdUSAorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID0gQkxPQ0tfTExfWC1IX0VYVEVOU0lPTgorICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC5tb3ZlVG8oeCwgc2xvdC1IX1dJRFRILy8yKQorICAgICAgICAgICAgICAgICAgICAgICAgb2RiLmRiQm94X2NyZWF0ZShwaW5fYnBpbiwgSF9MQVlFUiwgKnJlY3QubGwoKSwgKnJlY3QudXIoKSkKKworCisgICAgcHJpbnQoCisgICAgICAgIGYiV3JpdGluZyB7b3V0cHV0X2RlZl9maWxlX25hbWV9Li4uIiwKKyAgICApCisgICAgb2RiLndyaXRlX2RlZihibG9ja190b3AsIG91dHB1dF9kZWZfZmlsZV9uYW1lKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgY2xpKCkKZGlmZiAtLWdpdCBhL29wZW5sYW5lL21iaXN0L2Jhc2Uuc2RjIGIvb3BlbmxhbmUvbWJpc3QvYmFzZS5zZGMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZhMWZlNgotLS0gL2Rldi9udWxsCisrKyBiL29wZW5sYW5lL21iaXN0L2Jhc2Uuc2RjCkBAIC0wLDAgKzEsMTI4IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENyZWF0ZWQgYnkgd3JpdGVfc2RjCisjIFN1biBOb3YgMTQgMDk6MzM6MjMgMjAyMQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworY3VycmVudF9kZXNpZ24gbWJpc3RfdG9wCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFRpbWluZyBDb25zdHJhaW50cworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworY3JlYXRlX2Nsb2NrIC1uYW1lIHdiX2Nsa19pIC1wZXJpb2QgMTAuMDAwMCBbZ2V0X3BvcnRzIHt3Yl9jbGtfaX1dCitjcmVhdGVfY2xvY2sgLW5hbWUgd2JfY2xrMl9pIC1wZXJpb2QgMTAuMDAwMCBbZ2V0X3BvcnRzIHt3Yl9jbGsyX2l9XQorY3JlYXRlX2dlbmVyYXRlZF9jbG9jayAtbmFtZSBiaXN0X21lbV9jbGtfYSAtYWRkIC1zb3VyY2UgW2dldF9wb3J0cyB7d2JfY2xrMl9pfV0gLW1hc3Rlcl9jbG9jayBbZ2V0X2Nsb2NrcyB3Yl9jbGsyX2ldIC1kaXZpZGVfYnkgMSAtY29tbWVudCB7TWVtIENsb2NrIEF9IFtnZXRfcG9ydHMgbWVtX2Nsa19hXQorY3JlYXRlX2dlbmVyYXRlZF9jbG9jayAtbmFtZSBiaXN0X21lbV9jbGtfYiAtYWRkIC1zb3VyY2UgW2dldF9wb3J0cyB7d2JfY2xrMl9pfV0gLW1hc3Rlcl9jbG9jayBbZ2V0X2Nsb2NrcyB3Yl9jbGsyX2ldIC1kaXZpZGVfYnkgMSAtY29tbWVudCB7TWVtIENsb2NrIEJ9IFtnZXRfcG9ydHMgbWVtX2Nsa19iXQorCitzZXRfY2xvY2tfZ3JvdXBzIC1uYW1lIGFzeW5jX2Nsb2NrIC1hc3luY2hyb25vdXMgLWNvbW1lbnQgIkFzeW5jIENsb2NrIGdyb3VwIiAtZ3JvdXAgW2dldF9jbG9ja3Mge2Jpc3RfbWVtX2Nsa19hIGJpc3RfbWVtX2Nsa19ifV0gIC1ncm91cCBbZ2V0X2Nsb2NrcyB7d2JfY2xrX2kgfV0gLWdyb3VwIFtnZXRfY2xvY2tzIHt3Yl9jbGsyX2l9XQorCitzZXRfY2xvY2tfdHJhbnNpdGlvbiAwLjE1MDAgW2FsbF9jbG9ja3NdCitzZXRfY2xvY2tfdW5jZXJ0YWludHkgLXNldHVwIDAuMjUwMCBbYWxsX2Nsb2Nrc10KK3NldF9jbG9ja191bmNlcnRhaW50eSAtaG9sZCAwLjI1MDAgW2FsbF9jbG9ja3NdCisKK3NldCA6OmVudihTWU5USF9USU1JTkdfREVSQVRFKSAwLjA1CitwdXRzICJcW0lORk9cXTogU2V0dGluZyB0aW1pbmcgZGVyYXRlIHRvOiBbZXhwciB7JDo6ZW52KFNZTlRIX1RJTUlOR19ERVJBVEUpICogMTB9XSAlIgorc2V0X3RpbWluZ19kZXJhdGUgLWVhcmx5IFtleHByIHsxLSQ6OmVudihTWU5USF9USU1JTkdfREVSQVRFKX1dCitzZXRfdGltaW5nX2RlcmF0ZSAtbGF0ZSBbZXhwciB7MSskOjplbnYoU1lOVEhfVElNSU5HX0RFUkFURSl9XQorCitzZXRfaW5wdXRfZGVsYXkgIC1tYXggNS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JfY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3JzdF9ufV0KK3NldF9pbnB1dF9kZWxheSAgLW1pbiAyLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7cnN0X259XQorCitzZXRfb3V0cHV0X2RlbGF5IC1tYXggNC41MDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JfY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge2Jpc3RfY29ycmVjdH1dCitzZXRfb3V0cHV0X2RlbGF5IC1tYXggNC41MDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JfY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge2Jpc3RfZG9uZX1dCitzZXRfb3V0cHV0X2RlbGF5IC1tYXggNC41MDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JfY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge2Jpc3RfZXJyb3J9XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDQuNTAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtiaXN0X2Vycm9yX2NudFswXX1dCitzZXRfb3V0cHV0X2RlbGF5IC1tYXggNC41MDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JfY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge2Jpc3RfZXJyb3JfY250WzFdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1heCA0LjUwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7YmlzdF9lcnJvcl9jbnRbMl19XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDQuNTAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtiaXN0X2Vycm9yX2NudFszXX1dCitzZXRfb3V0cHV0X2RlbGF5IC1tYXggNC41MDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JfY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge2Jpc3Rfc2RvfV0KKworc2V0X291dHB1dF9kZWxheSAtbWluIDIuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtiaXN0X2NvcnJlY3R9XQorc2V0X291dHB1dF9kZWxheSAtbWluIDIuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtiaXN0X2RvbmV9XQorc2V0X291dHB1dF9kZWxheSAtbWluIDIuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtiaXN0X2Vycm9yfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAyLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7YmlzdF9lcnJvcl9jbnRbMF19XQorc2V0X291dHB1dF9kZWxheSAtbWluIDIuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtiaXN0X2Vycm9yX2NudFsxXX1dCitzZXRfb3V0cHV0X2RlbGF5IC1taW4gMi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JfY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge2Jpc3RfZXJyb3JfY250WzJdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAyLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7YmlzdF9lcnJvcl9jbnRbM119XQorc2V0X291dHB1dF9kZWxheSAtbWluIDIuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtiaXN0X3Nkb31dCisKK3NldF9mYWxzZV9wYXRoIC1mcm9tIFtnZXRfcG9ydHMge2Jpc3RfZW59XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNCAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtiaXN0X2xvYWR9XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNCAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtiaXN0X3J1bn1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA0IC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JfY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge2Jpc3Rfc2RpfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDQgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7YmlzdF9zaGlmdH1dCisKK3NldF9pbnB1dF9kZWxheSAtbWluIDIgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7YmlzdF9lbn1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAyIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JfY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge2Jpc3RfbG9hZH1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAyIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JfY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge2Jpc3RfcnVufV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDIgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7YmlzdF9zZGl9XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMiAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtiaXN0X3NoaWZ0fV0KKworIyMgRnVuY3Rpb25hbCBJbnB1dHMKK3NldF9pbnB1dF9kZWxheSAtbWF4IDQgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGtfaX1dIC1hZGRfZGVsYXkgICBbZ2V0X3BvcnRzIHt3Yl9hZHJfaVsqXX1dICAKK3NldF9pbnB1dF9kZWxheSAtbWF4IDQgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGtfaX1dIC1hZGRfZGVsYXkgICBbZ2V0X3BvcnRzIHt3Yl9zdGJfaX1dICAgICAgCitzZXRfaW5wdXRfZGVsYXkgLW1heCA0IC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JfY2xrX2l9XSAtYWRkX2RlbGF5ICAgW2dldF9wb3J0cyB7d2JfY3ljX2l9XSAgICAgIAorc2V0X2lucHV0X2RlbGF5IC1tYXggNCAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa19pfV0gLWFkZF9kZWxheSAgIFtnZXRfcG9ydHMge3diX3dlX2l9XSAgICAgIAorc2V0X2lucHV0X2RlbGF5IC1tYXggNCAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa19pfV0gLWFkZF9kZWxheSAgIFtnZXRfcG9ydHMge3diZF9tYmlzdDFfZGF0X29bKl19XSAKK3NldF9pbnB1dF9kZWxheSAtbWF4IDQgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGtfaX1dIC1hZGRfZGVsYXkgICBbZ2V0X3BvcnRzIHt3Yl9zZWxfaVsqXX1dCisKK3NldF9pbnB1dF9kZWxheSAtbWluIDIgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGtfaX1dIC1hZGRfZGVsYXkgICBbZ2V0X3BvcnRzIHt3Yl9hZHJfaVsqXX1dICAKK3NldF9pbnB1dF9kZWxheSAtbWluIDIgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGtfaX1dIC1hZGRfZGVsYXkgICBbZ2V0X3BvcnRzIHt3Yl9zdGJfaX1dICAgICAgCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAyIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JfY2xrX2l9XSAtYWRkX2RlbGF5ICAgW2dldF9wb3J0cyB7d2JfY3ljX2l9XSAgICAgIAorc2V0X2lucHV0X2RlbGF5IC1taW4gMiAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa19pfV0gLWFkZF9kZWxheSAgIFtnZXRfcG9ydHMge3diX3dlX2l9XSAgICAgIAorc2V0X2lucHV0X2RlbGF5IC1taW4gMiAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa19pfV0gLWFkZF9kZWxheSAgIFtnZXRfcG9ydHMge3diZF9tYmlzdDFfZGF0X29bKl19XSAKK3NldF9pbnB1dF9kZWxheSAtbWluIDIgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGtfaX1dIC1hZGRfZGVsYXkgICBbZ2V0X3BvcnRzIHt3Yl9zZWxfaVsqXX1dCisKK3NldF9vdXRwdXRfZGVsYXkgLW1heCA1IC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JfY2xrX2l9XSAtYWRkX2RlbGF5ICAgICBbZ2V0X3BvcnRzIHt3Yl9kYXRfb1sqXX1dICAKK3NldF9vdXRwdXRfZGVsYXkgLW1heCA1IC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JfY2xrX2l9XSAtYWRkX2RlbGF5ICAgICBbZ2V0X3BvcnRzIHt3Yl9hY2tfb31dICAKK3NldF9vdXRwdXRfZGVsYXkgLW1heCA1IC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JfY2xrX2l9XSAtYWRkX2RlbGF5ICAgICBbZ2V0X3BvcnRzIHt3Yl9lcnJfb31dICAKKworc2V0X291dHB1dF9kZWxheSAtbWluIDIgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGtfaX1dIC1hZGRfZGVsYXkgICAgIFtnZXRfcG9ydHMge3diX2RhdF9vWypdfV0gIAorc2V0X291dHB1dF9kZWxheSAtbWluIDIgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGtfaX1dIC1hZGRfZGVsYXkgICAgIFtnZXRfcG9ydHMge3diX2Fja19vfV0gIAorc2V0X291dHB1dF9kZWxheSAtbWluIDIgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGtfaX1dIC1hZGRfZGVsYXkgICAgIFtnZXRfcG9ydHMge3diX2Vycl9vfV0gIAorCisjIyBUb3dhcmRzIE1FTU9SWSBmcm9tIE1CSVNUIENMT0NLCisjIyBQT1JULUEKK3NldF9pbnB1dF9kZWxheSAtbWF4IDQuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge2Jpc3RfbWVtX2Nsa19hfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHttZW1fZG91dF9hWypdfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDIuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge2Jpc3RfbWVtX2Nsa19hfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHttZW1fZG91dF9hWypdfV0KKworCitzZXRfb3V0cHV0X2RlbGF5IC1tYXggNCAtY2xvY2sgW2dldF9jbG9ja3Mge2Jpc3RfbWVtX2Nsa19hfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHttZW1fYWRkcl9hWypdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1heCA0IC1jbG9jayBbZ2V0X2Nsb2NrcyB7YmlzdF9tZW1fY2xrX2F9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge21lbV9jZW5fYX1dCisKK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAtMC41IC1jbG9jayBbZ2V0X2Nsb2NrcyB7YmlzdF9tZW1fY2xrX2F9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge21lbV9hZGRyX2FbKl19XQorc2V0X291dHB1dF9kZWxheSAtbWluIC0wLjUgLWNsb2NrIFtnZXRfY2xvY2tzIHtiaXN0X21lbV9jbGtfYX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7bWVtX2Nlbl9hfV0KKworCisKKyMjIFBPUlQtQgorc2V0X291dHB1dF9kZWxheSAtbWF4IDQgLWNsb2NrIFtnZXRfY2xvY2tzIHtiaXN0X21lbV9jbGtfYn1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7bWVtX2Nlbl9ifV0KK3NldF9vdXRwdXRfZGVsYXkgLW1heCA0IC1jbG9jayBbZ2V0X2Nsb2NrcyB7YmlzdF9tZW1fY2xrX2J9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge21lbV9kaW5fYlsqXX1dCitzZXRfb3V0cHV0X2RlbGF5IC1tYXggNCAtY2xvY2sgW2dldF9jbG9ja3Mge2Jpc3RfbWVtX2Nsa19ifV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHttZW1fbWFza19iWypdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1heCA0IC1jbG9jayBbZ2V0X2Nsb2NrcyB7YmlzdF9tZW1fY2xrX2J9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge21lbV93ZWJfYn1dCitzZXRfb3V0cHV0X2RlbGF5IC1tYXggNCAtY2xvY2sgW2dldF9jbG9ja3Mge2Jpc3RfbWVtX2Nsa19ifV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHttZW1fYWRkcl9iWypdfV0KKworc2V0X291dHB1dF9kZWxheSAtbWluIC0wLjUgLWNsb2NrIFtnZXRfY2xvY2tzIHtiaXN0X21lbV9jbGtfYn1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7bWVtX2Nlbl9ifV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAtMC41IC1jbG9jayBbZ2V0X2Nsb2NrcyB7YmlzdF9tZW1fY2xrX2J9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge21lbV9kaW5fYlsqXX1dCitzZXRfb3V0cHV0X2RlbGF5IC1taW4gLTAuNSAtY2xvY2sgW2dldF9jbG9ja3Mge2Jpc3RfbWVtX2Nsa19ifV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHttZW1fbWFza19iWypdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAtMC41IC1jbG9jayBbZ2V0X2Nsb2NrcyB7YmlzdF9tZW1fY2xrX2J9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge21lbV93ZWJfYn1dCitzZXRfb3V0cHV0X2RlbGF5IC1taW4gLTAuNSAtY2xvY2sgW2dldF9jbG9ja3Mge2Jpc3RfbWVtX2Nsa19ifV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHttZW1fYWRkcl9iWypdfV0KKworCisjIFNldCBtYXggZGVsYXkgZm9yIGNsb2NrIHNrZXcKKworc2V0X21heF9kZWxheSAgIDMuNSAtZnJvbSBbZ2V0X3BvcnRzIHt3YmRfY2xrX2ludH1dCitzZXRfbWF4X2RlbGF5ICAgMiAtdG8gICBbZ2V0X3BvcnRzIHt3YmRfY2xrX21iaXN0fV0KK3NldF9tYXhfZGVsYXkgMy41IC1mcm9tIHdiZF9jbGtfaW50IC10byB3YmRfY2xrX21iaXN0CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgRW52aXJvbm1lbnQKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiAkOjplbnYoU1lOVEhfRFJJVklOR19DRUxMX1BJTikgW2FsbF9pbnB1dHNdCitzZXQgY2FwX2xvYWQgW2V4cHIgJDo6ZW52KFNZTlRIX0NBUF9MT0FEKSAvIDEwMDAuMF0KK3B1dHMgIlxbSU5GT1xdOiBTZXR0aW5nIGxvYWQgdG86ICRjYXBfbG9hZCIKK3NldF9sb2FkICAkY2FwX2xvYWQgW2FsbF9vdXRwdXRzXQorCitzZXRfdGltaW5nX2RlcmF0ZSAtZWFybHkgMC45NTAwCitzZXRfdGltaW5nX2RlcmF0ZSAtbGF0ZSAxLjA1MDAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgRGVzaWduIFJ1bGVzCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitzZXRfbWF4X2Zhbm91dCA0LjAwMDAgW2N1cnJlbnRfZGVzaWduXQpkaWZmIC0tZ2l0IGEvb3BlbmxhbmUvbWJpc3QvY29uZmlnLnRjbCBiL29wZW5sYW5lL21iaXN0L2NvbmZpZy50Y2wKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzhjZDk1NQotLS0gL2Rldi9udWxsCisrKyBiL29wZW5sYW5lL21iaXN0L2NvbmZpZy50Y2wKQEAgLTAsMCArMSwxMjMgQEAKKyMgU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogIDIwMjEgLCBEaW5lc2ggQW5uYXl5YQorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyMgU1BEWC1GaWxlQ29udHJpYnV0b3I6IE1vZGlmaWVkIGJ5IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisKKyMgR2xvYmFsCisjIC0tLS0tLQorCitzZXQgc2NyaXB0X2RpciBbZmlsZSBkaXJuYW1lIFtmaWxlIG5vcm1hbGl6ZSBbaW5mbyBzY3JpcHRdXV0KKyMgTmFtZQorCitzZXQgOjplbnYoREVTSUdOX05BTUUpIG1iaXN0X3RvcAorCitzZXQgOjplbnYoREVTSUdOX0lTX0NPUkUpICIwIgorCisjIFRpbWluZyBjb25maWd1cmF0aW9uCitzZXQgOjplbnYoQ0xPQ0tfUEVSSU9EKSAiMTAiCisjc2V0IDo6ZW52KENMT0NLX1BPUlQpICJ1X2N0c193Yl9jbGtfYjEudV9idWYvWCAgXAorIwkgICAgICAgICAgICAgICB1X2N0c193Yl9jbGtfYjIudV9idWYvWCAgXAorIwkJICAgICAgICIKK3NldCA6OmVudihDTE9DS19QT1JUKSB7IHdiX2Nsa19pIG1lbV9ub1xbM1xdLnVfbWVtX3NlbC51X21lbV9jbGtfc2VsLnVfbXV4L1ggbWVtX25vXFsyXF0udV9tZW1fc2VsLnVfbWVtX2Nsa19zZWwudV9tdXgvWCBtZW1fbm9cWzFcXS51X21lbV9zZWwudV9tZW1fY2xrX3NlbC51X211eC9YIG1lbV9ub1xbMFxdLnVfbWVtX3NlbC51X21lbV9jbGtfc2VsLnVfbXV4L1ggIH0KKworc2V0IDo6ZW52KFNZTlRIX01BWF9GQU5PVVQpIDQKKworIyMgQ1RTIEJVRkZFUgorc2V0IDo6ZW52KENUU19DTEtfQlVGRkVSX0xJU1QpICJza3kxMzBfZmRfc2NfaGRfX2Nsa2J1Zl80IHNreTEzMF9mZF9zY19oZF9fY2xrYnVmXzgiCitzZXQgOjplbnYoQ1RTX1NJTktfQ0xVU1RFUklOR19TSVpFKSAiMTYiCitzZXQgOjplbnYoQ0xPQ0tfQlVGRkVSX0ZBTk9VVCkgIjgiCisKKworIyBTb3VyY2VzCisjIC0tLS0tLS0KKworIyBMb2NhbCBzb3VyY2VzICsgbm8ydXNiIHNvdXJjZXMKK3NldCA6OmVudihWRVJJTE9HX0ZJTEVTKSAiXAorICAgICAkc2NyaXB0X2Rpci8uLi8uLi92ZXJpbG9nL3J0bC9jbGtfc2tld19hZGp1c3Qvc3JjL2Nsa19za2V3X2FkanVzdC5ndiBcCisgICAgICRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL21iaXN0L3NyYy9jb3JlL21iaXN0X2FkZHJfZ2VuLnN2IFwKKyAgICAgJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwvbWJpc3Qvc3JjL2NvcmUvbWJpc3RfZnNtLnN2ICAgICBcCisgICAgICRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL21iaXN0L3NyYy9jb3JlL21iaXN0X29wX3NlbC5zdiAgXAorICAgICAkc2NyaXB0X2Rpci8uLi8uLi92ZXJpbG9nL3J0bC9tYmlzdC9zcmMvY29yZS9tYmlzdF9yZXBhaXJfYWRkci5zdiBcCisgICAgICRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL21iaXN0L3NyYy9jb3JlL21iaXN0X3N0aV9zZWwuc3YgXAorICAgICAkc2NyaXB0X2Rpci8uLi8uLi92ZXJpbG9nL3J0bC9tYmlzdC9zcmMvY29yZS9tYmlzdF9wYXRfc2VsLnN2IFwKKyAgICAgJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwvbWJpc3Qvc3JjL2NvcmUvbWJpc3RfbXV4LnN2IFwKKyAgICAgJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwvbWJpc3Qvc3JjL2NvcmUvbWJpc3RfZGF0YV9jbXAuc3YgXAorICAgICAkc2NyaXB0X2Rpci8uLi8uLi92ZXJpbG9nL3J0bC9tYmlzdC9zcmMvY29yZS9tYmlzdF9tZW1fd3JhcHBlci5zdiBcCisgICAgICRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL21iaXN0L3NyYy90b3AvbWJpc3RfdG9wLnN2ICBcCisgICAgICRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL2xpYi9jdGVjaF9jZWxscy5zdiAgICAgXAorICAgICAkc2NyaXB0X2Rpci8uLi8uLi92ZXJpbG9nL3J0bC9saWIvcmVzZXRfc3luYy5zdiBcCisgICAgICRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL2xpYi9zZXJfc2hpZnQuc3YgXAorCSAgICAgIgorCitzZXQgOjplbnYoVkVSSUxPR19JTkNMVURFX0RJUlMpIFtnbG9iICRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL21iaXN0L2luY2x1ZGUgXQorc2V0IDo6ZW52KFNZTlRIX0RFRklORVMpIFtsaXN0IFNZTlRIRVNJUyBdCisKKworc2V0IDo6ZW52KFNZTlRIX1BBUkFNUykgIkJJU1RfQUREUl9XRCA5LFwKKwkgICAgICAgICAgICAgICAgIEJJU1RfREFUQV9XRCAzMixcCisJCSAgICAgICAgIEJJU1RfQUREUl9TVEFSVCA5J2gwMDAsXAorCQkJIEJJU1RfQUREUl9FTkQgOSdoMUZCLFwKKwkJCSBCSVNUX1JFUEFJUl9BRERSX1NUQVJUIDknaDFGQyxcCisJCQkgQklTVF9SQURfV0RfSSA5LFwKKwkJCSBCSVNUX1JBRF9XRF9PIDlcCisJCQkgIgorCitzZXQgOjplbnYoU1lOVEhfUkVBRF9CTEFDS0JPWF9MSUIpIDEKK3NldCA6OmVudihTRENfRklMRSkgIiRzY3JpcHRfZGlyL2Jhc2Uuc2RjIgorc2V0IDo6ZW52KEJBU0VfU0RDX0ZJTEUpICIkc2NyaXB0X2Rpci9iYXNlLnNkYyIKKworc2V0IDo6ZW52KExFQ19FTkFCTEUpIDAKKworc2V0IDo6ZW52KFZERF9QSU4pIFtsaXN0IHt2Y2NkMX1dCitzZXQgOjplbnYoR05EX1BJTikgW2xpc3Qge3Zzc2QxfV0KKworCisjIEZsb29ycGxhbm5pbmcKKyMgLS0tLS0tLS0tLS0tLQorCitzZXQgOjplbnYoRlBfUElOX09SREVSX0NGRykgJDo6ZW52KERFU0lHTl9ESVIpL3Bpbl9vcmRlci5jZmcKKworc2V0IDo6ZW52KEZQX1NJWklORykgYWJzb2x1dGUKK3NldCA6OmVudihESUVfQVJFQSkgIjAgMCAxNTAwIDIwMCIKKworCisjIElmIHlvdSdyZSBnb2luZyB0byB1c2UgbXVsdGlwbGUgcG93ZXIgZG9tYWlucywgdGhlbiBrZWVwIHRoaXMgZGlzYWJsZWQuCitzZXQgOjplbnYoUlVOX0NWQykgMQorCisjc2V0IDo6ZW52KFBETl9DRkcpICRzY3JpcHRfZGlyL3Bkbi50Y2wKKworCitzZXQgOjplbnYoUExfVElNRV9EUklWRU4pIDEKK3NldCA6OmVudihQTF9UQVJHRVRfREVOU0lUWSkgIjAuMzAiCisKKworCitzZXQgOjplbnYoRlBfSU9fVkVYVEVORCkgNAorc2V0IDo6ZW52KEZQX0lPX0hFWFRFTkQpIDQKKworc2V0IDo6ZW52KEZQX1BETl9WUElUQ0gpIDE0MAorc2V0IDo6ZW52KEZQX1BETl9IUElUQ0gpIDE0MAorc2V0IDo6ZW52KEZQX1BETl9WV0lEVEgpIDUKK3NldCA6OmVudihGUF9QRE5fSFdJRFRIKSA1CisKK3NldCA6OmVudihHTEJfUlRfTUFYTEFZRVIpIDUKK3NldCA6OmVudihHTEJfUlRfTUFYX0RJT0RFX0lOU19JVEVSUykgMTAKKworc2V0IDo6ZW52KERJT0RFX0lOU0VSVElPTl9TVFJBVEVHWSkgNAorCisKK3NldCA6OmVudihRVUlUX09OX1RJTUlOR19WSU9MQVRJT05TKSAiMCIKK3NldCA6OmVudihRVUlUX09OX01BR0lDX0RSQykgIjEiCitzZXQgOjplbnYoUVVJVF9PTl9MVlNfRVJST1IpICIwIgorc2V0IDo6ZW52KFFVSVRfT05fU0xFV19WSU9MQVRJT05TKSAiMCIKZGlmZiAtLWdpdCBhL29wZW5sYW5lL21iaXN0L2ludGVyYWN0aXZlLnRjbCBiL29wZW5sYW5lL21iaXN0L2ludGVyYWN0aXZlLnRjbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTk1ODZmCi0tLSAvZGV2L251bGwKKysrIGIvb3BlbmxhbmUvbWJpc3QvaW50ZXJhY3RpdmUudGNsCkBAIC0wLDAgKzEsMjE5IEBACisjIS91c3IvYmluL3RjbHNoCisjIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjAgRWZhYmxlc3MgQ29ycG9yYXRpb24KKyMgQ29weXJpZ2h0IDIwMjAgRWZhYmxlc3MgQ29ycG9yYXRpb24KKyMgQ29weXJpZ2h0IDIwMjAgU3lsdmFpbiBNdW5hdXQKKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisKK3BhY2thZ2UgcmVxdWlyZSBvcGVubGFuZTsKKworCitwcm9jIHJ1bl9wbGFjZW1lbnRfc3RlcCB7YXJnc30geworICAgICMgc2V0IHBkbmRlZl9kaXJuYW1lIFtmaWxlIGRpcm5hbWUgJDo6ZW52KHBkbl90bXBfZmlsZV90YWcpLmRlZl0KKyAgICAjIHNldCBwZG5kZWYgW2xpbmRleCBbZ2xvYiAkcGRuZGVmX2Rpcm5hbWUvKnBkbipdIDBdCisgICAgIyBzZXRfZGVmICRwZG5kZWYKKyAgICBpZiB7ICEgWyBpbmZvIGV4aXN0cyA6OmVudihQTEFDRU1FTlRfQ1VSUkVOVF9ERUYpIF0gfSB7CisgICAgICAgIHNldCA6OmVudihQTEFDRU1FTlRfQ1VSUkVOVF9ERUYpICQ6OmVudihDVVJSRU5UX0RFRikKKyAgICB9IGVsc2UgeworICAgICAgICBzZXQgOjplbnYoQ1VSUkVOVF9ERUYpICQ6OmVudihQTEFDRU1FTlRfQ1VSUkVOVF9ERUYpCisgICAgfQorCisgICAgcnVuX3BsYWNlbWVudAorfQorCitwcm9jIHJ1bl9jdHNfc3RlcCB7YXJnc30geworICAgICMgc2V0X2RlZiAkOjplbnYob3BlbmRwX3Jlc3VsdF9maWxlX3RhZykuZGVmCisgICAgaWYgeyAhIFsgaW5mbyBleGlzdHMgOjplbnYoQ1RTX0NVUlJFTlRfREVGKSBdIH0geworICAgICAgICBzZXQgOjplbnYoQ1RTX0NVUlJFTlRfREVGKSAkOjplbnYoQ1VSUkVOVF9ERUYpCisgICAgfSBlbHNlIHsKKyAgICAgICAgc2V0IDo6ZW52KENVUlJFTlRfREVGKSAkOjplbnYoQ1RTX0NVUlJFTlRfREVGKQorICAgIH0KKworICAgIHJ1bl9jdHMKKyAgICBydW5fcmVzaXplcl90aW1pbmcKK30KKworcHJvYyBydW5fcm91dGluZ19zdGVwIHthcmdzfSB7CisgICAgIyBzZXQgcmVzaXplcmRlZl9kaXJuYW1lIFtmaWxlIGRpcm5hbWUgJDo6ZW52KHJlc2l6ZXJfdG1wX2ZpbGVfdGFnKV90aW1pbmcuZGVmXQorICAgICMgc2V0IHJlc2l6ZXJkZWYgW2xpbmRleCBbZ2xvYiAkcmVzaXplcmRlZl9kaXJuYW1lLypyZXNpemVyKl0gMF0KKyAgICAjIHNldF9kZWYgJHJlc2l6ZXJkZWYKKyAgICBpZiB7ICEgWyBpbmZvIGV4aXN0cyA6OmVudihST1VUSU5HX0NVUlJFTlRfREVGKSBdIH0geworICAgICAgICBzZXQgOjplbnYoUk9VVElOR19DVVJSRU5UX0RFRikgJDo6ZW52KENVUlJFTlRfREVGKQorICAgIH0gZWxzZSB7CisgICAgICAgIHNldCA6OmVudihDVVJSRU5UX0RFRikgJDo6ZW52KFJPVVRJTkdfQ1VSUkVOVF9ERUYpCisgICAgfQorICAgIHJ1bl9yb3V0aW5nCit9CisKK3Byb2MgcnVuX2Rpb2RlX2luc2VydGlvbl8yXzVfc3RlcCB7YXJnc30geworICAgICMgc2V0X2RlZiAkOjplbnYodHJpdG9uUm91dGVfcmVzdWx0X2ZpbGVfdGFnKS5kZWYKKyAgICBpZiB7ICEgWyBpbmZvIGV4aXN0cyA6OmVudihESU9ERV9JTlNFUlRJT05fQ1VSUkVOVF9ERUYpIF0gfSB7CisgICAgICAgIHNldCA6OmVudihESU9ERV9JTlNFUlRJT05fQ1VSUkVOVF9ERUYpICQ6OmVudihDVVJSRU5UX0RFRikKKyAgICB9IGVsc2UgeworICAgICAgICBzZXQgOjplbnYoQ1VSUkVOVF9ERUYpICQ6OmVudihESU9ERV9JTlNFUlRJT05fQ1VSUkVOVF9ERUYpCisgICAgfQorCWlmIHsgKCQ6OmVudihESU9ERV9JTlNFUlRJT05fU1RSQVRFR1kpID09IDIpIHx8ICgkOjplbnYoRElPREVfSU5TRVJUSU9OX1NUUkFURUdZKSA9PSA1KSB9IHsKKwkJcnVuX2FudGVubmFfY2hlY2sKKwkJaGVhbF9hbnRlbm5hX3Zpb2xhdG9yczsgIyBtb2RpZmllcyB0aGUgcm91dGVkIERFRgorCX0KKworfQorCitwcm9jIHJ1bl9wb3dlcl9waW5zX2luc2VydGlvbl9zdGVwIHthcmdzfSB7CisgICAgIyBzZXRfZGVmICQ6OmVudih0cml0b25Sb3V0ZV9yZXN1bHRfZmlsZV90YWcpLmRlZgorICAgIGlmIHsgISBbIGluZm8gZXhpc3RzIDo6ZW52KFBPV0VSX1BJTlNfSU5TRVJUSU9OX0NVUlJFTlRfREVGKSBdIH0geworICAgICAgICBzZXQgOjplbnYoUE9XRVJfUElOU19JTlNFUlRJT05fQ1VSUkVOVF9ERUYpICQ6OmVudihDVVJSRU5UX0RFRikKKyAgICB9IGVsc2UgeworICAgICAgICBzZXQgOjplbnYoQ1VSUkVOVF9ERUYpICQ6OmVudihQT1dFUl9QSU5TX0lOU0VSVElPTl9DVVJSRU5UX0RFRikKKyAgICB9CisgICAgaWYgeyAkOjplbnYoTFZTX0lOU0VSVF9QT1dFUl9QSU5TKSB9IHsKKwkJd3JpdGVfcG93ZXJlZF92ZXJpbG9nCisJCXNldF9uZXRsaXN0ICQ6OmVudihsdnNfcmVzdWx0X2ZpbGVfdGFnKS5wb3dlcmVkLnYKKyAgICB9CisKK30KKworcHJvYyBydW5fbHZzX3N0ZXAge3sgbHZzX2VuYWJsZWQgMSB9fSB7CisgICAgIyBzZXRfZGVmICQ6OmVudih0cml0b25Sb3V0ZV9yZXN1bHRfZmlsZV90YWcpLmRlZgorICAgIGlmIHsgISBbIGluZm8gZXhpc3RzIDo6ZW52KExWU19DVVJSRU5UX0RFRikgXSB9IHsKKyAgICAgICAgc2V0IDo6ZW52KExWU19DVVJSRU5UX0RFRikgJDo6ZW52KENVUlJFTlRfREVGKQorICAgIH0gZWxzZSB7CisgICAgICAgIHNldCA6OmVudihDVVJSRU5UX0RFRikgJDo6ZW52KExWU19DVVJSRU5UX0RFRikKKyAgICB9CisJaWYgeyAkbHZzX2VuYWJsZWQgfSB7CisJCXJ1bl9tYWdpY19zcGljZV9leHBvcnQKKwkJcnVuX2x2czsgIyByZXF1aXJlcyBydW5fbWFnaWNfc3BpY2VfZXhwb3J0CisJfQorCit9CisKK3Byb2MgcnVuX2RyY19zdGVwIHt7IGRyY19lbmFibGVkIDEgfX0geworICAgIGlmIHsgISBbIGluZm8gZXhpc3RzIDo6ZW52KERSQ19DVVJSRU5UX0RFRikgXSB9IHsKKyAgICAgICAgc2V0IDo6ZW52KERSQ19DVVJSRU5UX0RFRikgJDo6ZW52KENVUlJFTlRfREVGKQorICAgIH0gZWxzZSB7CisgICAgICAgIHNldCA6OmVudihDVVJSRU5UX0RFRikgJDo6ZW52KERSQ19DVVJSRU5UX0RFRikKKyAgICB9CisJaWYgeyAkZHJjX2VuYWJsZWQgfSB7CisJCXJ1bl9tYWdpY19kcmMKKwkJcnVuX2tsYXlvdXRfZHJjCisJfQorfQorCitwcm9jIHJ1bl9hbnRlbm5hX2NoZWNrX3N0ZXAge3sgYW50ZW5uYV9jaGVja19lbmFibGVkIDEgfX0geworICAgIGlmIHsgISBbIGluZm8gZXhpc3RzIDo6ZW52KEFOVEVOTkFfQ0hFQ0tfQ1VSUkVOVF9ERUYpIF0gfSB7CisgICAgICAgIHNldCA6OmVudihBTlRFTk5BX0NIRUNLX0NVUlJFTlRfREVGKSAkOjplbnYoQ1VSUkVOVF9ERUYpCisgICAgfSBlbHNlIHsKKyAgICAgICAgc2V0IDo6ZW52KENVUlJFTlRfREVGKSAkOjplbnYoQU5URU5OQV9DSEVDS19DVVJSRU5UX0RFRikKKyAgICB9CisJaWYgeyAkYW50ZW5uYV9jaGVja19lbmFibGVkIH0geworCQlydW5fYW50ZW5uYV9jaGVjaworCX0KK30KKworcHJvYyBydW5fZmxvdyB7YXJnc30geworICAgICAgIHNldCBzY3JpcHRfZGlyIFtmaWxlIGRpcm5hbWUgW2ZpbGUgbm9ybWFsaXplIFtpbmZvIHNjcmlwdF1dXQorCisJCXNldCBvcHRpb25zIHsKKwkJey1kZXNpZ24gcmVxdWlyZWR9CisJCXstc2F2ZV9wYXRoIG9wdGlvbmFsfQorCQl7LW5vX2x2cyBvcHRpb25hbH0KKwkgICAgey1ub19kcmMgb3B0aW9uYWx9CisJICAgIHstbm9fYW50ZW5uYWNoZWNrIG9wdGlvbmFsfQorCX0KKwlzZXQgZmxhZ3Mgey1zYXZlfQorCXBhcnNlX2tleV9hcmdzICJydW5fZmxvdyIgYXJncyBhcmdfdmFsdWVzICRvcHRpb25zIGZsYWdzX21hcCAkZmxhZ3MgLW5vX2NvbnN1bWUKKworCXByZXAgeyp9JGFyZ3MKKworICAgICAgICBzZXQgTFZTX0VOQUJMRUQgMQorICAgICAgICBzZXQgRFJDX0VOQUJMRUQgMQorICAgICAgICBzZXQgQU5URU5OQUNIRUNLX0VOQUJMRUQgMQorCisgICAgICAgIHNldCBzdGVwcyBbZGljdCBjcmVhdGUgInN5bnRoZXNpcyIge3J1bl9zeW50aGVzaXMgIiIgfSBcCisgICAgICAgICAgICAgICAgImZsb29ycGxhbiIge3J1bl9mbG9vcnBsYW4gIiJ9IFwKKyAgICAgICAgICAgICAgICAicGxhY2VtZW50IiB7cnVuX3BsYWNlbWVudF9zdGVwICIifSBcCisgICAgICAgICAgICAgICAgImN0cyIge3J1bl9jdHNfc3RlcCAiIn0gXAorICAgICAgICAgICAgICAgICJyb3V0aW5nIiB7cnVuX3JvdXRpbmdfc3RlcCAiIn1cCisgICAgICAgICAgICAgICAgImRpb2RlX2luc2VydGlvbiIge3J1bl9kaW9kZV9pbnNlcnRpb25fMl81X3N0ZXAgIiJ9IFwKKyAgICAgICAgICAgICAgICAicG93ZXJfcGluc19pbnNlcnRpb24iIHtydW5fcG93ZXJfcGluc19pbnNlcnRpb25fc3RlcCAiIn0gXAorICAgICAgICAgICAgICAgICJnZHNfbWFnaWMiIHtydW5fbWFnaWMgIiJ9IFwKKyAgICAgICAgICAgICAgICAiZ2RzX2RyY19rbGF5b3V0IiB7cnVuX2tsYXlvdXQgIiJ9IFwKKyAgICAgICAgICAgICAgICAiZ2RzX3hvcl9rbGF5b3V0IiB7cnVuX2tsYXlvdXRfZ2RzX3hvciAiIn0gXAorICAgICAgICAgICAgICAgICJsdnMiICJydW5fbHZzX3N0ZXAgJExWU19FTkFCTEVEIiBcCisgICAgICAgICAgICAgICAgImRyYyIgInJ1bl9kcmNfc3RlcCAkRFJDX0VOQUJMRUQiIFwKKyAgICAgICAgICAgICAgICAiYW50ZW5uYV9jaGVjayIgInJ1bl9hbnRlbm5hX2NoZWNrX3N0ZXAgJEFOVEVOTkFDSEVDS19FTkFCTEVEIiBcCisgICAgICAgICAgICAgICAgImN2YyIge3J1bl9sZWZfY3ZjfQorICAgICAgICBdCisKKyAgICAgICBzZXRfaWZfdW5zZXQgYXJnX3ZhbHVlcygtdG8pICJjdmMiOworCisgICAgICAgaWYgeyAgW2luZm8gZXhpc3RzIDo6ZW52KENVUlJFTlRfU1RFUCkgXSB9IHsKKyAgICAgICAgICAgcHV0cyAiXFtJTkZPXF06UGlja2luZyB1cCB3aGVyZSBsYXN0IGV4ZWN1dGlvbiBsZWZ0IG9mZiIKKyAgICAgICAgICAgcHV0cyBbZm9ybWF0ICJcW0lORk9cXTpDdXJyZW50IHN0YWdlIGlzICVzICIgJDo6ZW52KENVUlJFTlRfU1RFUCldCisgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgc2V0IDo6ZW52KENVUlJFTlRfU1RFUCkgInN5bnRoZXNpcyI7CisgICAgICAgfQorICAgICAgIHNldF9pZl91bnNldCBhcmdfdmFsdWVzKC1mcm9tKSAkOjplbnYoQ1VSUkVOVF9TVEVQKTsKKyAgICAgICBzZXQgZXhlIDA7CisgICAgICAgZGljdCBmb3Ige3N0ZXBfbmFtZSBzdGVwX2V4ZX0gJHN0ZXBzIHsKKyAgICAgICAgICAgaWYgeyBbIHN0cmluZyBlcXVhbCAkYXJnX3ZhbHVlcygtZnJvbSkgJHN0ZXBfbmFtZSBdIH0geworICAgICAgICAgICAgICAgc2V0IGV4ZSAxOworICAgICAgICAgICB9CisKKyAgICAgICAgICAgaWYgeyAkZXhlIH0geworICAgICAgICAgICAgICAgIyBGb3Igd2hlbiBpdCBmYWlscworICAgICAgICAgICAgICAgc2V0IDo6ZW52KENVUlJFTlRfU1RFUCkgJHN0ZXBfbmFtZQorICAgICAgICAgICAgICAgW2xpbmRleCAkc3RlcF9leGUgMF0gW2xpbmRleCAkc3RlcF9leGUgMV0gOworICAgICAgICAgICB9CisKKyAgICAgICAgICAgaWYgeyBbIHN0cmluZyBlcXVhbCAkYXJnX3ZhbHVlcygtdG8pICRzdGVwX25hbWUgXSB9IHsKKyAgICAgICAgICAgICAgIHNldCBleGUgMDoKKyAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICB9CisKKyAgICAgICB9CisKKyAgICAgICAjIGZvciB3aGVuIGl0IHJlc3VtZXMKKyAgICAgICBzZXQgc3RlcHNfYXNfbGlzdCBbZGljdCBrZXlzICRzdGVwc10KKyAgICAgICBzZXQgbmV4dF9pZHggW2V4cHIgW2xzZWFyY2ggJHN0ZXBzX2FzX2xpc3QgJDo6ZW52KENVUlJFTlRfU1RFUCldICsgMV0KKyAgICAgICBzZXQgOjplbnYoQ1VSUkVOVF9TVEVQKSBbbGluZGV4ICRzdGVwc19hc19saXN0ICRuZXh0X2lkeF0KKworCWlmIHsgIFtpbmZvIGV4aXN0cyBmbGFnc19tYXAoLXNhdmUpIF0gfSB7CisJCWlmIHsgISBbaW5mbyBleGlzdHMgYXJnX3ZhbHVlcygtc2F2ZV9wYXRoKV0gfSB7CisJCQlzZXQgYXJnX3ZhbHVlcygtc2F2ZV9wYXRoKSAiIgorCQl9CisJCXNhdmVfdmlld3MgCS1sZWZfcGF0aCAkOjplbnYobWFnaWNfcmVzdWx0X2ZpbGVfdGFnKS5sZWYgXAorCQkJLWRlZl9wYXRoICQ6OmVudihDVVJSRU5UX0RFRikgXAorCQkJLWdkc19wYXRoICQ6OmVudihtYWdpY19yZXN1bHRfZmlsZV90YWcpLmdkcyBcCisJCQktbWFnX3BhdGggJDo6ZW52KG1hZ2ljX3Jlc3VsdF9maWxlX3RhZykubWFnIFwKKwkJCS1tYWdsZWZfcGF0aCAkOjplbnYobWFnaWNfcmVzdWx0X2ZpbGVfdGFnKS5sZWYubWFnIFwKKwkJCS1zcGljZV9wYXRoICQ6OmVudihtYWdpY19yZXN1bHRfZmlsZV90YWcpLnNwaWNlIFwKKwkJCS1zcGVmX3BhdGggJDo6ZW52KENVUlJFTlRfU1BFRikgXAorCQkJLXZlcmlsb2dfcGF0aCAkOjplbnYoQ1VSUkVOVF9ORVRMSVNUKSBcCisJCQktc2F2ZV9wYXRoICRhcmdfdmFsdWVzKC1zYXZlX3BhdGgpIFwKKwkJCS10YWcgJDo6ZW52KFJVTl9UQUcpCisJfQorCisKKwljYWxjX3RvdGFsX3J1bnRpbWUKKwlzYXZlX3N0YXRlCisJZ2VuZXJhdGVfZmluYWxfc3VtbWFyeV9yZXBvcnQKKwkKKwljaGVja190aW1pbmdfdmlvbGF0aW9ucworCisJcHV0c19zdWNjZXNzICJGbG93IENvbXBsZXRlZCBXaXRob3V0IEZhdGFsIEVycm9ycy4iCisKK30KKworcnVuX2Zsb3cgeyp9JGFyZ3YKZGlmZiAtLWdpdCBhL29wZW5sYW5lL21iaXN0L3Bpbl9vcmRlci5jZmcgYi9vcGVubGFuZS9tYmlzdC9waW5fb3JkZXIuY2ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0MTYxOTIKLS0tIC9kZXYvbnVsbAorKysgYi9vcGVubGFuZS9tYmlzdC9waW5fb3JkZXIuY2ZnCkBAIC0wLDAgKzEsNTI3IEBACisjQlVTX1NPUlQKKworI01BTlVBTF9QTEFDRQorCisKKyNTCityc3RfbiAgICAgICAgICAgIDAwMDAgMCAgICAgICAgCisKKworCisjRQorY2ZnX2Nza2FfbWJpc3RcWzNcXSAgMDAwMCAwIDQKK2NmZ19jc2thX21iaXN0XFsyXF0KK2NmZ19jc2thX21iaXN0XFsxXF0KK2NmZ19jc2thX21iaXN0XFswXF0KK3diX2NsazJfaSAgICAgICAgIAord2JfY2xrX2kgICAgICAgICAKK3diZF9jbGtfbWJpc3QKK3diZF9jbGtfaW50ICAgICAgICAgCisKK3diX2N5Y19pICAgICAgICAgICAgMDAyNSAwIDIKK3diX3N0Yl9pCit3Yl93ZV9pCit3Yl9jc19pXFsxXF0KK3diX2NzX2lcWzBcXQord2JfYWRyX2lcWzhcXQord2JfYWRyX2lcWzdcXQord2JfYWRyX2lcWzZcXQord2JfYWRyX2lcWzVcXQord2JfYWRyX2lcWzRcXQord2JfYWRyX2lcWzNcXQord2JfYWRyX2lcWzJcXQord2JfYWRyX2lcWzFcXQord2JfYWRyX2lcWzBcXQord2JfZGF0X2lcWzMxXF0KK3diX2RhdF9pXFszMFxdCit3Yl9kYXRfaVxbMjlcXQord2JfZGF0X2lcWzI4XF0KK3diX2RhdF9pXFsyN1xdCit3Yl9kYXRfaVxbMjZcXQord2JfZGF0X2lcWzI1XF0KK3diX2RhdF9pXFsyNFxdCit3Yl9kYXRfaVxbMjNcXQord2JfZGF0X2lcWzIyXF0KK3diX2RhdF9pXFsyMVxdCit3Yl9kYXRfaVxbMjBcXQord2JfZGF0X2lcWzE5XF0KK3diX2RhdF9pXFsxOFxdCit3Yl9kYXRfaVxbMTdcXQord2JfZGF0X2lcWzE2XF0KK3diX2RhdF9pXFsxNVxdCit3Yl9kYXRfaVxbMTRcXQord2JfZGF0X2lcWzEzXF0KK3diX2RhdF9pXFsxMlxdCit3Yl9kYXRfaVxbMTFcXQord2JfZGF0X2lcWzEwXF0KK3diX2RhdF9pXFs5XF0KK3diX2RhdF9pXFs4XF0KK3diX2RhdF9pXFs3XF0KK3diX2RhdF9pXFs2XF0KK3diX2RhdF9pXFs1XF0KK3diX2RhdF9pXFs0XF0KK3diX2RhdF9pXFszXF0KK3diX2RhdF9pXFsyXF0KK3diX2RhdF9pXFsxXF0KK3diX2RhdF9pXFswXF0KK3diX3NlbF9pXFszXF0KK3diX3NlbF9pXFsyXF0KK3diX3NlbF9pXFsxXF0KK3diX3NlbF9pXFswXF0KK3diX2RhdF9vXFszMVxdCit3Yl9kYXRfb1xbMzBcXQord2JfZGF0X29cWzI5XF0KK3diX2RhdF9vXFsyOFxdCit3Yl9kYXRfb1xbMjdcXQord2JfZGF0X29cWzI2XF0KK3diX2RhdF9vXFsyNVxdCit3Yl9kYXRfb1xbMjRcXQord2JfZGF0X29cWzIzXF0KK3diX2RhdF9vXFsyMlxdCit3Yl9kYXRfb1xbMjFcXQord2JfZGF0X29cWzIwXF0KK3diX2RhdF9vXFsxOVxdCit3Yl9kYXRfb1xbMThcXQord2JfZGF0X29cWzE3XF0KK3diX2RhdF9vXFsxNlxdCit3Yl9kYXRfb1xbMTVcXQord2JfZGF0X29cWzE0XF0KK3diX2RhdF9vXFsxM1xdCit3Yl9kYXRfb1xbMTJcXQord2JfZGF0X29cWzExXF0KK3diX2RhdF9vXFsxMFxdCit3Yl9kYXRfb1xbOVxdCit3Yl9kYXRfb1xbOFxdCit3Yl9kYXRfb1xbN1xdCit3Yl9kYXRfb1xbNlxdCit3Yl9kYXRfb1xbNVxdCit3Yl9kYXRfb1xbNFxdCit3Yl9kYXRfb1xbM1xdCit3Yl9kYXRfb1xbMlxdCit3Yl9kYXRfb1xbMVxdCit3Yl9kYXRfb1xbMFxdCit3Yl9hY2tfbword2JfZXJyX28KKworCitiaXN0X2Vycm9yX2NudDNcWzNcXSAwMTUwIDAgMgorYmlzdF9lcnJvcl9jbnQzXFsyXF0KK2Jpc3RfZXJyb3JfY250M1xbMVxdCitiaXN0X2Vycm9yX2NudDNcWzBcXQorYmlzdF9jb3JyZWN0XFszXF0KK2Jpc3RfZXJyb3JcWzNcXQorYmlzdF9lcnJvcl9jbnQyXFszXF0KK2Jpc3RfZXJyb3JfY250MlxbMlxdCitiaXN0X2Vycm9yX2NudDJcWzFcXQorYmlzdF9lcnJvcl9jbnQyXFswXF0KK2Jpc3RfY29ycmVjdFxbMlxdCitiaXN0X2Vycm9yXFsyXF0KK2Jpc3RfZXJyb3JfY250MVxbM1xdCitiaXN0X2Vycm9yX2NudDFcWzJcXQorYmlzdF9lcnJvcl9jbnQxXFsxXF0KK2Jpc3RfZXJyb3JfY250MVxbMFxdCitiaXN0X2NvcnJlY3RcWzFcXQorYmlzdF9lcnJvclxbMVxdCitiaXN0X2Vycm9yX2NudDBcWzNcXQorYmlzdF9lcnJvcl9jbnQwXFsyXF0KK2Jpc3RfZXJyb3JfY250MFxbMVxdCitiaXN0X2Vycm9yX2NudDBcWzBcXQorYmlzdF9jb3JyZWN0XFswXF0KK2Jpc3RfZXJyb3JcWzBcXQorYmlzdF9kb25lCitiaXN0X3NkbworYmlzdF9zaGlmdAorYmlzdF9zZGkKK2Jpc3RfbG9hZAorYmlzdF9ydW4KK2Jpc3RfZW4gICAgICAgICAgIAorCisjUworbWVtX2Nsa19hXFswXF0gICAgICAgMjUwIDAgMgorbWVtX2Nlbl9hXFswXF0KK21lbV93ZWJfYVxbMFxdCittZW1fYWRkcl9hMFxbMFxdCittZW1fYWRkcl9hMFxbMVxdCittZW1fYWRkcl9hMFxbMlxdCittZW1fYWRkcl9hMFxbM1xdCittZW1fYWRkcl9hMFxbNFxdCittZW1fYWRkcl9hMFxbNVxdCittZW1fYWRkcl9hMFxbNlxdCittZW1fYWRkcl9hMFxbN1xdCittZW1fYWRkcl9hMFxbOFxdCittZW1fbWFza19hMFxbMFxdCittZW1fbWFza19hMFxbMVxdCittZW1fbWFza19hMFxbMlxdCittZW1fbWFza19hMFxbM1xdCittZW1fZGluX2EwXFswXF0KK21lbV9kaW5fYTBcWzFcXQorbWVtX2Rpbl9hMFxbMlxdCittZW1fZGluX2EwXFszXF0KK21lbV9kaW5fYTBcWzRcXQorbWVtX2Rpbl9hMFxbNVxdCittZW1fZGluX2EwXFs2XF0KK21lbV9kaW5fYTBcWzdcXQorbWVtX2Rpbl9hMFxbOFxdCittZW1fZGluX2EwXFs5XF0KK21lbV9kaW5fYTBcWzEwXF0KK21lbV9kaW5fYTBcWzExXF0KK21lbV9kaW5fYTBcWzEyXF0KK21lbV9kaW5fYTBcWzEzXF0KK21lbV9kaW5fYTBcWzE0XF0KK21lbV9kaW5fYTBcWzE1XF0KK21lbV9kaW5fYTBcWzE2XF0KK21lbV9kaW5fYTBcWzE3XF0KK21lbV9kaW5fYTBcWzE4XF0KK21lbV9kaW5fYTBcWzE5XF0KK21lbV9kaW5fYTBcWzIwXF0KK21lbV9kaW5fYTBcWzIxXF0KK21lbV9kaW5fYTBcWzIyXF0KK21lbV9kaW5fYTBcWzIzXF0KK21lbV9kaW5fYTBcWzI0XF0KK21lbV9kaW5fYTBcWzI1XF0KK21lbV9kaW5fYTBcWzI2XF0KK21lbV9kaW5fYTBcWzI3XF0KK21lbV9kaW5fYTBcWzI4XF0KK21lbV9kaW5fYTBcWzI5XF0KK21lbV9kaW5fYTBcWzMwXF0KK21lbV9kaW5fYTBcWzMxXF0KKworCittZW1fZG91dF9hMFxbMFxdICAzNTAgMCAyCittZW1fZG91dF9hMFxbMVxdCittZW1fZG91dF9hMFxbMlxdCittZW1fZG91dF9hMFxbM1xdCittZW1fZG91dF9hMFxbNFxdCittZW1fZG91dF9hMFxbNVxdCittZW1fZG91dF9hMFxbNlxdCittZW1fZG91dF9hMFxbN1xdCittZW1fZG91dF9hMFxbOFxdCittZW1fZG91dF9hMFxbOVxdCittZW1fZG91dF9hMFxbMTBcXQorbWVtX2RvdXRfYTBcWzExXF0KK21lbV9kb3V0X2EwXFsxMlxdCittZW1fZG91dF9hMFxbMTNcXQorbWVtX2RvdXRfYTBcWzE0XF0KK21lbV9kb3V0X2EwXFsxNVxdCittZW1fZG91dF9hMFxbMTZcXQorbWVtX2RvdXRfYTBcWzE3XF0KK21lbV9kb3V0X2EwXFsxOFxdCittZW1fZG91dF9hMFxbMTlcXQorbWVtX2RvdXRfYTBcWzIwXF0KK21lbV9kb3V0X2EwXFsyMVxdCittZW1fZG91dF9hMFxbMjJcXQorbWVtX2RvdXRfYTBcWzIzXF0KK21lbV9kb3V0X2EwXFsyNFxdCittZW1fZG91dF9hMFxbMjVcXQorbWVtX2RvdXRfYTBcWzI2XF0KK21lbV9kb3V0X2EwXFsyN1xdCittZW1fZG91dF9hMFxbMjhcXQorbWVtX2RvdXRfYTBcWzI5XF0KK21lbV9kb3V0X2EwXFszMFxdCittZW1fZG91dF9hMFxbMzFcXQorCisKK21lbV9jbGtfYlxbMFxdICAgIDA0NTAgMCAyCittZW1fY2VuX2JcWzBcXQorbWVtX2FkZHJfYjBcWzhcXQorbWVtX2FkZHJfYjBcWzdcXQorbWVtX2FkZHJfYjBcWzZcXQorbWVtX2FkZHJfYjBcWzVcXQorbWVtX2FkZHJfYjBcWzRcXQorbWVtX2FkZHJfYjBcWzNcXQorbWVtX2FkZHJfYjBcWzJcXQorbWVtX2FkZHJfYjBcWzFcXQorbWVtX2FkZHJfYjBcWzBcXQorCisKK21lbV9jbGtfYVxbMVxdICAgICAgIDEwMDAgMCAyCittZW1fY2VuX2FcWzFcXQorbWVtX3dlYl9hXFsxXF0KK21lbV9hZGRyX2ExXFswXF0KK21lbV9hZGRyX2ExXFsxXF0KK21lbV9hZGRyX2ExXFsyXF0KK21lbV9hZGRyX2ExXFszXF0KK21lbV9hZGRyX2ExXFs0XF0KK21lbV9hZGRyX2ExXFs1XF0KK21lbV9hZGRyX2ExXFs2XF0KK21lbV9hZGRyX2ExXFs3XF0KK21lbV9hZGRyX2ExXFs4XF0KK21lbV9tYXNrX2ExXFswXF0KK21lbV9tYXNrX2ExXFsxXF0KK21lbV9tYXNrX2ExXFsyXF0KK21lbV9tYXNrX2ExXFszXF0KK21lbV9kaW5fYTFcWzBcXQorbWVtX2Rpbl9hMVxbMVxdCittZW1fZGluX2ExXFsyXF0KK21lbV9kaW5fYTFcWzNcXQorbWVtX2Rpbl9hMVxbNFxdCittZW1fZGluX2ExXFs1XF0KK21lbV9kaW5fYTFcWzZcXQorbWVtX2Rpbl9hMVxbN1xdCittZW1fZGluX2ExXFs4XF0KK21lbV9kaW5fYTFcWzlcXQorbWVtX2Rpbl9hMVxbMTBcXQorbWVtX2Rpbl9hMVxbMTFcXQorbWVtX2Rpbl9hMVxbMTJcXQorbWVtX2Rpbl9hMVxbMTNcXQorbWVtX2Rpbl9hMVxbMTRcXQorbWVtX2Rpbl9hMVxbMTVcXQorbWVtX2Rpbl9hMVxbMTZcXQorbWVtX2Rpbl9hMVxbMTdcXQorbWVtX2Rpbl9hMVxbMThcXQorbWVtX2Rpbl9hMVxbMTlcXQorbWVtX2Rpbl9hMVxbMjBcXQorbWVtX2Rpbl9hMVxbMjFcXQorbWVtX2Rpbl9hMVxbMjJcXQorbWVtX2Rpbl9hMVxbMjNcXQorbWVtX2Rpbl9hMVxbMjRcXQorbWVtX2Rpbl9hMVxbMjVcXQorbWVtX2Rpbl9hMVxbMjZcXQorbWVtX2Rpbl9hMVxbMjdcXQorbWVtX2Rpbl9hMVxbMjhcXQorbWVtX2Rpbl9hMVxbMjlcXQorbWVtX2Rpbl9hMVxbMzBcXQorbWVtX2Rpbl9hMVxbMzFcXQorCisKK21lbV9kb3V0X2ExXFswXF0gIDExMDAgMCAyCittZW1fZG91dF9hMVxbMVxdCittZW1fZG91dF9hMVxbMlxdCittZW1fZG91dF9hMVxbM1xdCittZW1fZG91dF9hMVxbNFxdCittZW1fZG91dF9hMVxbNVxdCittZW1fZG91dF9hMVxbNlxdCittZW1fZG91dF9hMVxbN1xdCittZW1fZG91dF9hMVxbOFxdCittZW1fZG91dF9hMVxbOVxdCittZW1fZG91dF9hMVxbMTBcXQorbWVtX2RvdXRfYTFcWzExXF0KK21lbV9kb3V0X2ExXFsxMlxdCittZW1fZG91dF9hMVxbMTNcXQorbWVtX2RvdXRfYTFcWzE0XF0KK21lbV9kb3V0X2ExXFsxNVxdCittZW1fZG91dF9hMVxbMTZcXQorbWVtX2RvdXRfYTFcWzE3XF0KK21lbV9kb3V0X2ExXFsxOFxdCittZW1fZG91dF9hMVxbMTlcXQorbWVtX2RvdXRfYTFcWzIwXF0KK21lbV9kb3V0X2ExXFsyMVxdCittZW1fZG91dF9hMVxbMjJcXQorbWVtX2RvdXRfYTFcWzIzXF0KK21lbV9kb3V0X2ExXFsyNFxdCittZW1fZG91dF9hMVxbMjVcXQorbWVtX2RvdXRfYTFcWzI2XF0KK21lbV9kb3V0X2ExXFsyN1xdCittZW1fZG91dF9hMVxbMjhcXQorbWVtX2RvdXRfYTFcWzI5XF0KK21lbV9kb3V0X2ExXFszMFxdCittZW1fZG91dF9hMVxbMzFcXQorCisKK21lbV9jbGtfYlxbMVxdICAgIDEyMDAgMCAyCittZW1fY2VuX2JcWzFcXQorbWVtX2FkZHJfYjFcWzhcXQorbWVtX2FkZHJfYjFcWzdcXQorbWVtX2FkZHJfYjFcWzZcXQorbWVtX2FkZHJfYjFcWzVcXQorbWVtX2FkZHJfYjFcWzRcXQorbWVtX2FkZHJfYjFcWzNcXQorbWVtX2FkZHJfYjFcWzJcXQorbWVtX2FkZHJfYjFcWzFcXQorbWVtX2FkZHJfYjFcWzBcXQorCisKKyNOCittZW1fY2xrX2FcWzJcXSAgICAgICAyNTAgMCAyCittZW1fY2VuX2FcWzJcXQorbWVtX3dlYl9hXFsyXF0KK21lbV9hZGRyX2EyXFswXF0KK21lbV9hZGRyX2EyXFsxXF0KK21lbV9hZGRyX2EyXFsyXF0KK21lbV9hZGRyX2EyXFszXF0KK21lbV9hZGRyX2EyXFs0XF0KK21lbV9hZGRyX2EyXFs1XF0KK21lbV9hZGRyX2EyXFs2XF0KK21lbV9hZGRyX2EyXFs3XF0KK21lbV9hZGRyX2EyXFs4XF0KK21lbV9tYXNrX2EyXFswXF0KK21lbV9tYXNrX2EyXFsxXF0KK21lbV9tYXNrX2EyXFsyXF0KK21lbV9tYXNrX2EyXFszXF0KK21lbV9kaW5fYTJcWzBcXQorbWVtX2Rpbl9hMlxbMVxdCittZW1fZGluX2EyXFsyXF0KK21lbV9kaW5fYTJcWzNcXQorbWVtX2Rpbl9hMlxbNFxdCittZW1fZGluX2EyXFs1XF0KK21lbV9kaW5fYTJcWzZcXQorbWVtX2Rpbl9hMlxbN1xdCittZW1fZGluX2EyXFs4XF0KK21lbV9kaW5fYTJcWzlcXQorbWVtX2Rpbl9hMlxbMTBcXQorbWVtX2Rpbl9hMlxbMTFcXQorbWVtX2Rpbl9hMlxbMTJcXQorbWVtX2Rpbl9hMlxbMTNcXQorbWVtX2Rpbl9hMlxbMTRcXQorbWVtX2Rpbl9hMlxbMTVcXQorbWVtX2Rpbl9hMlxbMTZcXQorbWVtX2Rpbl9hMlxbMTdcXQorbWVtX2Rpbl9hMlxbMThcXQorbWVtX2Rpbl9hMlxbMTlcXQorbWVtX2Rpbl9hMlxbMjBcXQorbWVtX2Rpbl9hMlxbMjFcXQorbWVtX2Rpbl9hMlxbMjJcXQorbWVtX2Rpbl9hMlxbMjNcXQorbWVtX2Rpbl9hMlxbMjRcXQorbWVtX2Rpbl9hMlxbMjVcXQorbWVtX2Rpbl9hMlxbMjZcXQorbWVtX2Rpbl9hMlxbMjdcXQorbWVtX2Rpbl9hMlxbMjhcXQorbWVtX2Rpbl9hMlxbMjlcXQorbWVtX2Rpbl9hMlxbMzBcXQorbWVtX2Rpbl9hMlxbMzFcXQorCisKK21lbV9kb3V0X2EyXFswXF0gIDAzNTAgMCAyCittZW1fZG91dF9hMlxbMVxdCittZW1fZG91dF9hMlxbMlxdCittZW1fZG91dF9hMlxbM1xdCittZW1fZG91dF9hMlxbNFxdCittZW1fZG91dF9hMlxbNVxdCittZW1fZG91dF9hMlxbNlxdCittZW1fZG91dF9hMlxbN1xdCittZW1fZG91dF9hMlxbOFxdCittZW1fZG91dF9hMlxbOVxdCittZW1fZG91dF9hMlxbMTBcXQorbWVtX2RvdXRfYTJcWzExXF0KK21lbV9kb3V0X2EyXFsxMlxdCittZW1fZG91dF9hMlxbMTNcXQorbWVtX2RvdXRfYTJcWzE0XF0KK21lbV9kb3V0X2EyXFsxNVxdCittZW1fZG91dF9hMlxbMTZcXQorbWVtX2RvdXRfYTJcWzE3XF0KK21lbV9kb3V0X2EyXFsxOFxdCittZW1fZG91dF9hMlxbMTlcXQorbWVtX2RvdXRfYTJcWzIwXF0KK21lbV9kb3V0X2EyXFsyMVxdCittZW1fZG91dF9hMlxbMjJcXQorbWVtX2RvdXRfYTJcWzIzXF0KK21lbV9kb3V0X2EyXFsyNFxdCittZW1fZG91dF9hMlxbMjVcXQorbWVtX2RvdXRfYTJcWzI2XF0KK21lbV9kb3V0X2EyXFsyN1xdCittZW1fZG91dF9hMlxbMjhcXQorbWVtX2RvdXRfYTJcWzI5XF0KK21lbV9kb3V0X2EyXFszMFxdCittZW1fZG91dF9hMlxbMzFcXQorCisKK21lbV9jbGtfYlxbMlxdICAgIDA0NTAgMCAyCittZW1fY2VuX2JcWzJcXQorbWVtX2FkZHJfYjJcWzhcXQorbWVtX2FkZHJfYjJcWzdcXQorbWVtX2FkZHJfYjJcWzZcXQorbWVtX2FkZHJfYjJcWzVcXQorbWVtX2FkZHJfYjJcWzRcXQorbWVtX2FkZHJfYjJcWzNcXQorbWVtX2FkZHJfYjJcWzJcXQorbWVtX2FkZHJfYjJcWzFcXQorbWVtX2FkZHJfYjJcWzBcXQorCisKK21lbV9jbGtfYVxbM1xdICAgICAgIDEwMDAgMCAyCittZW1fY2VuX2FcWzNcXQorbWVtX3dlYl9hXFszXF0KK21lbV9hZGRyX2EzXFswXF0KK21lbV9hZGRyX2EzXFsxXF0KK21lbV9hZGRyX2EzXFsyXF0KK21lbV9hZGRyX2EzXFszXF0KK21lbV9hZGRyX2EzXFs0XF0KK21lbV9hZGRyX2EzXFs1XF0KK21lbV9hZGRyX2EzXFs2XF0KK21lbV9hZGRyX2EzXFs3XF0KK21lbV9hZGRyX2EzXFs4XF0KK21lbV9tYXNrX2EzXFswXF0KK21lbV9tYXNrX2EzXFsxXF0KK21lbV9tYXNrX2EzXFsyXF0KK21lbV9tYXNrX2EzXFszXF0KK21lbV9kaW5fYTNcWzBcXQorbWVtX2Rpbl9hM1xbMVxdCittZW1fZGluX2EzXFsyXF0KK21lbV9kaW5fYTNcWzNcXQorbWVtX2Rpbl9hM1xbNFxdCittZW1fZGluX2EzXFs1XF0KK21lbV9kaW5fYTNcWzZcXQorbWVtX2Rpbl9hM1xbN1xdCittZW1fZGluX2EzXFs4XF0KK21lbV9kaW5fYTNcWzlcXQorbWVtX2Rpbl9hM1xbMTBcXQorbWVtX2Rpbl9hM1xbMTFcXQorbWVtX2Rpbl9hM1xbMTJcXQorbWVtX2Rpbl9hM1xbMTNcXQorbWVtX2Rpbl9hM1xbMTRcXQorbWVtX2Rpbl9hM1xbMTVcXQorbWVtX2Rpbl9hM1xbMTZcXQorbWVtX2Rpbl9hM1xbMTdcXQorbWVtX2Rpbl9hM1xbMThcXQorbWVtX2Rpbl9hM1xbMTlcXQorbWVtX2Rpbl9hM1xbMjBcXQorbWVtX2Rpbl9hM1xbMjFcXQorbWVtX2Rpbl9hM1xbMjJcXQorbWVtX2Rpbl9hM1xbMjNcXQorbWVtX2Rpbl9hM1xbMjRcXQorbWVtX2Rpbl9hM1xbMjVcXQorbWVtX2Rpbl9hM1xbMjZcXQorbWVtX2Rpbl9hM1xbMjdcXQorbWVtX2Rpbl9hM1xbMjhcXQorbWVtX2Rpbl9hM1xbMjlcXQorbWVtX2Rpbl9hM1xbMzBcXQorbWVtX2Rpbl9hM1xbMzFcXQorCisKK21lbV9kb3V0X2EzXFswXF0gIDExMDAgMCAyCittZW1fZG91dF9hM1xbMVxdCittZW1fZG91dF9hM1xbMlxdCittZW1fZG91dF9hM1xbM1xdCittZW1fZG91dF9hM1xbNFxdCittZW1fZG91dF9hM1xbNVxdCittZW1fZG91dF9hM1xbNlxdCittZW1fZG91dF9hM1xbN1xdCittZW1fZG91dF9hM1xbOFxdCittZW1fZG91dF9hM1xbOVxdCittZW1fZG91dF9hM1xbMTBcXQorbWVtX2RvdXRfYTNcWzExXF0KK21lbV9kb3V0X2EzXFsxMlxdCittZW1fZG91dF9hM1xbMTNcXQorbWVtX2RvdXRfYTNcWzE0XF0KK21lbV9kb3V0X2EzXFsxNVxdCittZW1fZG91dF9hM1xbMTZcXQorbWVtX2RvdXRfYTNcWzE3XF0KK21lbV9kb3V0X2EzXFsxOFxdCittZW1fZG91dF9hM1xbMTlcXQorbWVtX2RvdXRfYTNcWzIwXF0KK21lbV9kb3V0X2EzXFsyMVxdCittZW1fZG91dF9hM1xbMjJcXQorbWVtX2RvdXRfYTNcWzIzXF0KK21lbV9kb3V0X2EzXFsyNFxdCittZW1fZG91dF9hM1xbMjVcXQorbWVtX2RvdXRfYTNcWzI2XF0KK21lbV9kb3V0X2EzXFsyN1xdCittZW1fZG91dF9hM1xbMjhcXQorbWVtX2RvdXRfYTNcWzI5XF0KK21lbV9kb3V0X2EzXFszMFxdCittZW1fZG91dF9hM1xbMzFcXQorCisKK21lbV9jbGtfYlxbM1xdICAgIDEyMDAgMCAyCittZW1fY2VuX2JcWzNcXQorbWVtX2FkZHJfYjNcWzhcXQorbWVtX2FkZHJfYjNcWzdcXQorbWVtX2FkZHJfYjNcWzZcXQorbWVtX2FkZHJfYjNcWzVcXQorbWVtX2FkZHJfYjNcWzRcXQorbWVtX2FkZHJfYjNcWzNcXQorbWVtX2FkZHJfYjNcWzJcXQorbWVtX2FkZHJfYjNcWzFcXQorbWVtX2FkZHJfYjNcWzBcXQorCmRpZmYgLS1naXQgYS9vcGVubGFuZS9tYmlzdC9zdGEudGNsIGIvb3BlbmxhbmUvbWJpc3Qvc3RhLnRjbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2E2YzM1Ci0tLSAvZGV2L251bGwKKysrIGIvb3BlbmxhbmUvbWJpc3Qvc3RhLnRjbApAQCAtMCwwICsxLDg4IEBACisjIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6ICAyMDIxICwgRGluZXNoIEFubmF5eWEKKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisjIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBNb2RpZmllZCBieSBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorCisKK3NldCA6OmVudihMSUJfRkFTVEVTVCkgIiQ6OmVudihQREtfUk9PVCkvc2t5MTMwQS9saWJzLnJlZi9za3kxMzBfZmRfc2NfaGQvbGliL3NreTEzMF9mZF9zY19oZF9fZmZfbjQwQ18xdjk1LmxpYiIKK3NldCA6OmVudihMSUJfVFlQSUNBTCkgIiQ6OmVudihQREtfUk9PVCkvc2t5MTMwQS9saWJzLnJlZi9za3kxMzBfZmRfc2NfaGQvbGliL3NreTEzMF9mZF9zY19oZF9fdHRfMDI1Q18xdjgwLmxpYiIKK3NldCA6OmVudihMSUJfU0xPV0VTVCkgIiQ6OmVudihQREtfUk9PVCkvc2t5MTMwQS9saWJzLnJlZi9za3kxMzBfZmRfc2NfaGQvbGliL3NreTEzMF9mZF9zY19oZF9fc3NfMTAwQ18xdjYwLmxpYiIKK3NldCA6OmVudihERVNJR05fTkFNRSkgIm1iaXN0X3RvcCIKK3NldCA6OmVudihCQVNFX1NEQ19GSUxFKSAiYmFzZS5zZGMiCitzZXQgOjplbnYoU1lOVEhfRFJJVklOR19DRUxMKSAic2t5MTMwX2ZkX3NjX2hkX19pbnZfOCIKK3NldCA6OmVudihTWU5USF9EUklWSU5HX0NFTExfUElOKSAiWSIKK3NldCA6OmVudihTWU5USF9DQVBfTE9BRCkgIjE3LjY1Igorc2V0IDo6ZW52KFdJUkVfUkNfTEFZRVIpICJtZXQxIgorCisjVG8gZGlzYWJsZSBlbXB0eSBmaWxsZXIgY2VsbCBibGFjayBib3ggZ2V0IGNyZWF0ZWQKKyNzZXQgbGlua19tYWtlX2JsYWNrX2JveGVzIDAKKworCitzZXRfY21kX3VuaXRzIC10aW1lIG5zIC1jYXBhY2l0YW5jZSBwRiAtY3VycmVudCBtQSAtdm9sdGFnZSBWIC1yZXNpc3RhbmNlIGtPaG0gLWRpc3RhbmNlIHVtCitkZWZpbmVfY29ybmVycyB3YyBiYyB0dAorcmVhZF9saWJlcnR5IC1jb3JuZXIgYmMgJDo6ZW52KExJQl9GQVNURVNUKQorcmVhZF9saWJlcnR5IC1jb3JuZXIgd2MgJDo6ZW52KExJQl9TTE9XRVNUKQorcmVhZF9saWJlcnR5IC1jb3JuZXIgdHQgJDo6ZW52KExJQl9UWVBJQ0FMKQorCisKK3JlYWRfdmVyaWxvZyAuLi91c2VyX3Byb2plY3Rfd3JhcHBlci9uZXRsaXN0L21iaXN0LnYKK2xpbmtfZGVzaWduICAkOjplbnYoREVTSUdOX05BTUUpCisKKworcmVhZF9zcGVmIC4uLy4uL3NwZWYvbWJpc3RfdG9wLnNwZWYgIAorCisKK3JlYWRfc2RjIC1lY2hvICQ6OmVudihCQVNFX1NEQ19GSUxFKQorCisjIGNoZWNrIGZvciBtaXNzaW5nIGNvbnN0cmFpbnRzCitjaGVja19zZXR1cCAgLXZlcmJvc2UgPiB1bmNvbnN0cmFpbnRzLnJwdAorCitzZXRfb3BlcmF0aW5nX2NvbmRpdGlvbnMgLWFuYWx5c2lzX3R5cGUgc2luZ2xlCisjIFByb3BnYXRlIHRoZSBjbG9jaworc2V0X3Byb3BhZ2F0ZWRfY2xvY2sgW2FsbF9jbG9ja3NdCisKK3JlcG9ydF90bnMKK3JlcG9ydF93bnMKKyNyZXBvcnRfcG93ZXIgCitlY2hvICIjIyMjIyMjIyMjIyMjIyMjIENPUk5FUiA6IFdDIChTTE9XKSBUSU1JTkcgUmVwb3J0ICMjIyMjIyMjIyMjIyMjIyMjIyMiID4gdGltaW5nX3NzX21heC5ycHQKK3JlcG9ydF9jaGVja3MgLXVuaXF1ZSAtcGF0aF9kZWxheSBtYXggLXNsYWNrX21heCAtMC4wIC1ncm91cF9jb3VudCAxMDAgLWNvcm5lciB3YyA+PiB0aW1pbmdfc3NfbWF4LnJwdAorcmVwb3J0X2NoZWNrcyAtZ3JvdXBfY291bnQgMTAwIC1wYXRoX2RlbGF5IG1heCAgLXBhdGhfZ3JvdXAgYmlzdF9jbGsgIC1jb3JuZXIgd2MgID4+IHRpbWluZ19zc19tYXgucnB0CityZXBvcnRfY2hlY2tzIC1ncm91cF9jb3VudCAxMDAgLXBhdGhfZGVsYXkgbWF4ICAtcGF0aF9ncm91cCBtZW1fY2xrX2EgIC1jb3JuZXIgd2MgID4+IHRpbWluZ19zc19tYXgucnB0CityZXBvcnRfY2hlY2tzIC1ncm91cF9jb3VudCAxMDAgLXBhdGhfZGVsYXkgbWF4ICAtcGF0aF9ncm91cCBtZW1fY2xrX2IgLWNvcm5lciB3YyAgPj4gdGltaW5nX3NzX21heC5ycHQKK3JlcG9ydF9jaGVja3MgLXBhdGhfZGVsYXkgbWF4ICAgLWNvcm5lciB3YyA+PiB0aW1pbmdfc3NfbWF4LnJwdAorCitlY2hvICIjIyMjIyMjIyMjIyMjIyMjIENPUk5FUiA6IEJDIChTTE9XKSBUSU1JTkcgUmVwb3J0ICMjIyMjIyMjIyMjIyMjIyMjIyMiID4gdGltaW5nX2ZmX21pbi5ycHQKK3JlcG9ydF9jaGVja3MgLXVuaXF1ZSAtcGF0aF9kZWxheSBtaW4gLXNsYWNrX21pbiAtMC4wIC1ncm91cF9jb3VudCAxMDAgLWNvcm5lciBiYyA+PiB0aW1pbmdfZmZfbWluLnJwdAorcmVwb3J0X2NoZWNrcyAtZ3JvdXBfY291bnQgMTAwICAtcGF0aF9kZWxheSBtaW4gLXBhdGhfZ3JvdXAgYmlzdF9jbGsgIC1jb3JuZXIgYmMgID4+IHRpbWluZ19mZl9taW4ucnB0CityZXBvcnRfY2hlY2tzIC1ncm91cF9jb3VudCAxMDAgIC1wYXRoX2RlbGF5IG1pbiAtcGF0aF9ncm91cCBtZW1fY2xrX2EgIC1jb3JuZXIgYmMgID4+IHRpbWluZ19mZl9taW4ucnB0CityZXBvcnRfY2hlY2tzIC1ncm91cF9jb3VudCAxMDAgIC1wYXRoX2RlbGF5IG1pbiAtcGF0aF9ncm91cCBtZW1fY2xrX2IgLWNvcm5lciBiYyAgPj4gdGltaW5nX2ZmX21pbi5ycHQKK3JlcG9ydF9jaGVja3MgLXBhdGhfZGVsYXkgbWluICAtY29ybmVyIGJjID4+IHRpbWluZ19mZl9taW4ucnB0CisKK2VjaG8gIiMjIyMjIyMjIyMjIyMjIyMgQ09STkVSIDogVFQgKE1BWCkgVElNSU5HIFJlcG9ydCAjIyMjIyMjIyMjIyMjIyMjIyMjIiA+IHRpbWluZ190dF9tYXgucnB0CityZXBvcnRfY2hlY2tzIC11bmlxdWUgLXBhdGhfZGVsYXkgbWluIC1zbGFja19taW4gLTAuMCAtZ3JvdXBfY291bnQgMTAwIC1jb3JuZXIgdHQgPj4gdGltaW5nX3R0X21heC5ycHQKK3JlcG9ydF9jaGVja3MgLWdyb3VwX2NvdW50IDEwMCAgLXBhdGhfZGVsYXkgbWF4IC1wYXRoX2dyb3VwIGJpc3RfY2xrICAtY29ybmVyIHR0ICA+PiB0aW1pbmdfdHRfbWF4LnJwdAorcmVwb3J0X2NoZWNrcyAtZ3JvdXBfY291bnQgMTAwICAtcGF0aF9kZWxheSBtYXggLXBhdGhfZ3JvdXAgbWVtX2Nsa19hICAtY29ybmVyIHR0ICA+PiB0aW1pbmdfdHRfbWF4LnJwdAorcmVwb3J0X2NoZWNrcyAtZ3JvdXBfY291bnQgMTAwICAtcGF0aF9kZWxheSBtYXggLXBhdGhfZ3JvdXAgbWVtX2Nsa19iIC1jb3JuZXIgdHQgID4+IHRpbWluZ190dF9tYXgucnB0CityZXBvcnRfY2hlY2tzIC1wYXRoX2RlbGF5IG1pbiAgLWNvcm5lciB0dCA+PiB0aW1pbmdfdHRfbWluLnJwdAorCitlY2hvICIjIyMjIyMjIyMjIyMjIyMjIENPUk5FUiA6IFRUIChNSU4pIFRJTUlORyBSZXBvcnQgIyMjIyMjIyMjIyMjIyMjIyMjIyIgPiB0aW1pbmdfdHRfbWluLnJwdAorcmVwb3J0X2NoZWNrcyAtdW5pcXVlIC1wYXRoX2RlbGF5IG1pbiAtc2xhY2tfbWluIC0wLjAgLWdyb3VwX2NvdW50IDEwMCAtY29ybmVyIHR0ID4+IHRpbWluZ190dF9taW4ucnB0CityZXBvcnRfY2hlY2tzIC1ncm91cF9jb3VudCAxMDAgIC1wYXRoX2RlbGF5IG1pbiAtcGF0aF9ncm91cCBiaXN0X2NsayAgLWNvcm5lciB0dCAgPj4gdGltaW5nX3R0X21pbi5ycHQKK3JlcG9ydF9jaGVja3MgLWdyb3VwX2NvdW50IDEwMCAgLXBhdGhfZGVsYXkgbWluIC1wYXRoX2dyb3VwIG1lbV9jbGtfYSAtY29ybmVyIHR0ICA+PiB0aW1pbmdfdHRfbWluLnJwdAorcmVwb3J0X2NoZWNrcyAtZ3JvdXBfY291bnQgMTAwICAtcGF0aF9kZWxheSBtaW4gLXBhdGhfZ3JvdXAgbWVtX2Nsa19iIC1jb3JuZXIgdHQgID4+IHRpbWluZ190dF9taW4ucnB0CityZXBvcnRfY2hlY2tzIC1wYXRoX2RlbGF5IG1pbiAgLWNvcm5lciB0dCA+PiB0aW1pbmdfdHRfbWluLnJwdAorCityZXBvcnRfY2hlY2tzIC1wYXRoX2RlbGF5IG1pbgorCisjZXhpdApkaWZmIC0tZ2l0IGEvb3BlbmxhbmUvbWJpc3QxL2Jhc2Uuc2RjIGIvb3BlbmxhbmUvbWJpc3QxL2Jhc2Uuc2RjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhZTI1YjEKLS0tIC9kZXYvbnVsbAorKysgYi9vcGVubGFuZS9tYmlzdDEvYmFzZS5zZGMKQEAgLTAsMCArMSwxNjMgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ3JlYXRlZCBieSB3cml0ZV9zZGMKKyMgU3VuIE5vdiAxNCAwOTozMzoyMyAyMDIxCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitjdXJyZW50X2Rlc2lnbiBtYmlzdF90b3AKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVGltaW5nIENvbnN0cmFpbnRzCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitjcmVhdGVfY2xvY2sgLW5hbWUgd2JfY2xrX2kgLXBlcmlvZCAxMC4wMDAwIFtnZXRfcG9ydHMge3diX2Nsa19pfV0KK2NyZWF0ZV9nZW5lcmF0ZWRfY2xvY2sgLW5hbWUgYmlzdF9tZW1fY2xrX2EgLWFkZCAtc291cmNlIFtnZXRfcG9ydHMge3diX2Nsa19pfV0gLW1hc3Rlcl9jbG9jayBbZ2V0X2Nsb2NrcyB3Yl9jbGtfaV0gLWRpdmlkZV9ieSAxIC1jb21tZW50IHtNZW0gQ2xvY2sgQX0gW2dldF9wb3J0cyBtZW1fY2xrX2FdCitjcmVhdGVfZ2VuZXJhdGVkX2Nsb2NrIC1uYW1lIGJpc3RfbWVtX2Nsa19iIC1hZGQgLXNvdXJjZSBbZ2V0X3BvcnRzIHt3Yl9jbGtfaX1dIC1tYXN0ZXJfY2xvY2sgW2dldF9jbG9ja3Mgd2JfY2xrX2ldIC1kaXZpZGVfYnkgMSAtY29tbWVudCB7TWVtIENsb2NrIEJ9IFtnZXRfcG9ydHMgbWVtX2Nsa19iXQorCitzZXRfY2xvY2tfZ3JvdXBzIC1uYW1lIGFzeW5jX2Nsb2NrIC1hc3luY2hyb25vdXMgLWNvbW1lbnQgIkFzeW5jIENsb2NrIGdyb3VwIiAtZ3JvdXAgW2dldF9jbG9ja3Mge3diX2Nsa19pIGJpc3RfbWVtX2Nsa19hIGJpc3RfbWVtX2Nsa19ifV0gIAorCitzZXRfY2xvY2tfdHJhbnNpdGlvbiAwLjE1MDAgW2dldF9jbG9ja3Mge3diX2Nsa19pfV0KK3NldF9jbG9ja191bmNlcnRhaW50eSAtc2V0dXAgMC4yNTAwIHdiX2Nsa19pCitzZXRfY2xvY2tfdW5jZXJ0YWludHkgLXNldHVwIDAuMjUwMCBtZW1fY2xrX2EKK3NldF9jbG9ja191bmNlcnRhaW50eSAtc2V0dXAgMC4yNTAwIG1lbV9jbGtfYgorCitzZXRfY2xvY2tfdW5jZXJ0YWludHkgLWhvbGQgMC4yNTAwIHdiX2Nsa19pCitzZXRfY2xvY2tfdW5jZXJ0YWludHkgLWhvbGQgMC4yNTAwIG1lbV9jbGtfYQorc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1ob2xkIDAuMjUwMCBtZW1fY2xrX2IKKworc2V0IDo6ZW52KFNZTlRIX1RJTUlOR19ERVJBVEUpIDAuMDUKK3B1dHMgIlxbSU5GT1xdOiBTZXR0aW5nIHRpbWluZyBkZXJhdGUgdG86IFtleHByIHskOjplbnYoU1lOVEhfVElNSU5HX0RFUkFURSkgKiAxMH1dICUiCitzZXRfdGltaW5nX2RlcmF0ZSAtZWFybHkgW2V4cHIgezEtJDo6ZW52KFNZTlRIX1RJTUlOR19ERVJBVEUpfV0KK3NldF90aW1pbmdfZGVyYXRlIC1sYXRlIFtleHByIHsxKyQ6OmVudihTWU5USF9USU1JTkdfREVSQVRFKX1dCisKK3NldF9pbnB1dF9kZWxheSAgLW1heCA1LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7cnN0X259XQorc2V0X2lucHV0X2RlbGF5ICAtbWluIDIuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtyc3Rfbn1dCisKK3NldF9vdXRwdXRfZGVsYXkgLW1heCA0LjUwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7YmlzdF9jb3JyZWN0fV0KK3NldF9vdXRwdXRfZGVsYXkgLW1heCA0LjUwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7YmlzdF9kb25lfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1heCA0LjUwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7YmlzdF9lcnJvcn1dCitzZXRfb3V0cHV0X2RlbGF5IC1tYXggNC41MDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JfY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge2Jpc3RfZXJyb3JfY250WzBdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1heCA0LjUwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7YmlzdF9lcnJvcl9jbnRbMV19XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDQuNTAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtiaXN0X2Vycm9yX2NudFsyXX1dCitzZXRfb3V0cHV0X2RlbGF5IC1tYXggNC41MDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JfY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge2Jpc3RfZXJyb3JfY250WzNdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1heCA0LjUwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7YmlzdF9zZG99XQorCitzZXRfb3V0cHV0X2RlbGF5IC1taW4gMi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JfY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge2Jpc3RfY29ycmVjdH1dCitzZXRfb3V0cHV0X2RlbGF5IC1taW4gMi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JfY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge2Jpc3RfZG9uZX1dCitzZXRfb3V0cHV0X2RlbGF5IC1taW4gMi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JfY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge2Jpc3RfZXJyb3J9XQorc2V0X291dHB1dF9kZWxheSAtbWluIDIuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtiaXN0X2Vycm9yX2NudFswXX1dCitzZXRfb3V0cHV0X2RlbGF5IC1taW4gMi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JfY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge2Jpc3RfZXJyb3JfY250WzFdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAyLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7YmlzdF9lcnJvcl9jbnRbMl19XQorc2V0X291dHB1dF9kZWxheSAtbWluIDIuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtiaXN0X2Vycm9yX2NudFszXX1dCitzZXRfb3V0cHV0X2RlbGF5IC1taW4gMi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JfY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge2Jpc3Rfc2RvfV0KKworc2V0X2ZhbHNlX3BhdGggLWZyb20gW2dldF9wb3J0cyB7YmlzdF9lbn1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA0IC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JfY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge2Jpc3RfbG9hZH1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA0IC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JfY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge2Jpc3RfcnVufV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDQgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7YmlzdF9zZGl9XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNCAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtiaXN0X3NoaWZ0fV0KKworc2V0X2lucHV0X2RlbGF5IC1taW4gMiAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtiaXN0X2VufV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDIgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7YmlzdF9sb2FkfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDIgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7YmlzdF9ydW59XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMiAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtiaXN0X3NkaX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAyIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JfY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge2Jpc3Rfc2hpZnR9XQorCisjIyBGdW5jdGlvbmFsIElucHV0cworc2V0X2lucHV0X2RlbGF5IC1tYXggNCAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa19pfV0gLWFkZF9kZWxheSAgIFtnZXRfcG9ydHMge3diX2Fkcl9pWypdfV0gIAorc2V0X2lucHV0X2RlbGF5IC1tYXggNCAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa19pfV0gLWFkZF9kZWxheSAgIFtnZXRfcG9ydHMge3diX3N0Yl9pfV0gICAgICAKK3NldF9pbnB1dF9kZWxheSAtbWF4IDQgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGtfaX1dIC1hZGRfZGVsYXkgICBbZ2V0X3BvcnRzIHt3Yl9jeWNfaX1dICAgICAgCitzZXRfaW5wdXRfZGVsYXkgLW1heCA0IC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JfY2xrX2l9XSAtYWRkX2RlbGF5ICAgW2dldF9wb3J0cyB7d2Jfd2VfaX1dICAgICAgCitzZXRfaW5wdXRfZGVsYXkgLW1heCA0IC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JfY2xrX2l9XSAtYWRkX2RlbGF5ICAgW2dldF9wb3J0cyB7d2JkX21iaXN0MV9kYXRfb1sqXX1dIAorc2V0X2lucHV0X2RlbGF5IC1tYXggNCAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa19pfV0gLWFkZF9kZWxheSAgIFtnZXRfcG9ydHMge3diX3NlbF9pWypdfV0KKworc2V0X2lucHV0X2RlbGF5IC1taW4gMiAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa19pfV0gLWFkZF9kZWxheSAgIFtnZXRfcG9ydHMge3diX2Fkcl9pWypdfV0gIAorc2V0X2lucHV0X2RlbGF5IC1taW4gMiAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa19pfV0gLWFkZF9kZWxheSAgIFtnZXRfcG9ydHMge3diX3N0Yl9pfV0gICAgICAKK3NldF9pbnB1dF9kZWxheSAtbWluIDIgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGtfaX1dIC1hZGRfZGVsYXkgICBbZ2V0X3BvcnRzIHt3Yl9jeWNfaX1dICAgICAgCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAyIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JfY2xrX2l9XSAtYWRkX2RlbGF5ICAgW2dldF9wb3J0cyB7d2Jfd2VfaX1dICAgICAgCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAyIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JfY2xrX2l9XSAtYWRkX2RlbGF5ICAgW2dldF9wb3J0cyB7d2JkX21iaXN0MV9kYXRfb1sqXX1dIAorc2V0X2lucHV0X2RlbGF5IC1taW4gMiAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa19pfV0gLWFkZF9kZWxheSAgIFtnZXRfcG9ydHMge3diX3NlbF9pWypdfV0KKworc2V0X291dHB1dF9kZWxheSAtbWF4IDUgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGtfaX1dIC1hZGRfZGVsYXkgICAgIFtnZXRfcG9ydHMge3diX2RhdF9vWypdfV0gIAorc2V0X291dHB1dF9kZWxheSAtbWF4IDUgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGtfaX1dIC1hZGRfZGVsYXkgICAgIFtnZXRfcG9ydHMge3diX2Fja19vfV0gIAorc2V0X291dHB1dF9kZWxheSAtbWF4IDUgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGtfaX1dIC1hZGRfZGVsYXkgICAgIFtnZXRfcG9ydHMge3diX2Vycl9vfV0gIAorCitzZXRfb3V0cHV0X2RlbGF5IC1taW4gMSAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa19pfV0gLWFkZF9kZWxheSAgICAgW2dldF9wb3J0cyB7d2JfZGF0X29bKl19XSAgCitzZXRfb3V0cHV0X2RlbGF5IC1taW4gMSAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa19pfV0gLWFkZF9kZWxheSAgICAgW2dldF9wb3J0cyB7d2JfYWNrX299XSAgCitzZXRfb3V0cHV0X2RlbGF5IC1taW4gMSAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa19pfV0gLWFkZF9kZWxheSAgICAgW2dldF9wb3J0cyB7d2JfZXJyX299XSAgCisKKyMjIFRvd2FyZHMgTUVNT1JZIGZyb20gTUJJU1QgQ0xPQ0sKKyMjIFBPUlQtQQorc2V0X2lucHV0X2RlbGF5IC1tYXggNC4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7YmlzdF9tZW1fY2xrX2F9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge21lbV9kb3V0X2FbKl19XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7YmlzdF9tZW1fY2xrX2F9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge21lbV9kb3V0X2FbKl19XQorCisKK3NldF9vdXRwdXRfZGVsYXkgLW1heCA0IC1jbG9jayBbZ2V0X2Nsb2NrcyB7YmlzdF9tZW1fY2xrX2F9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge21lbV9hZGRyX2FbKl19XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDQgLWNsb2NrIFtnZXRfY2xvY2tzIHtiaXN0X21lbV9jbGtfYX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7bWVtX2Nlbl9hfV0KKworc2V0X291dHB1dF9kZWxheSAtbWluIC0wLjUgLWNsb2NrIFtnZXRfY2xvY2tzIHtiaXN0X21lbV9jbGtfYX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7bWVtX2FkZHJfYVsqXX1dCitzZXRfb3V0cHV0X2RlbGF5IC1taW4gLTAuNSAtY2xvY2sgW2dldF9jbG9ja3Mge2Jpc3RfbWVtX2Nsa19hfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHttZW1fY2VuX2F9XQorCisKKworIyMgUE9SVC1CCitzZXRfb3V0cHV0X2RlbGF5IC1tYXggNCAtY2xvY2sgW2dldF9jbG9ja3Mge2Jpc3RfbWVtX2Nsa19ifV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHttZW1fY2VuX2J9XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDQgLWNsb2NrIFtnZXRfY2xvY2tzIHtiaXN0X21lbV9jbGtfYn1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7bWVtX2Rpbl9iWypdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1heCA0IC1jbG9jayBbZ2V0X2Nsb2NrcyB7YmlzdF9tZW1fY2xrX2J9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge21lbV9tYXNrX2JbKl19XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDQgLWNsb2NrIFtnZXRfY2xvY2tzIHtiaXN0X21lbV9jbGtfYn1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7bWVtX3dlYl9ifV0KK3NldF9vdXRwdXRfZGVsYXkgLW1heCA0IC1jbG9jayBbZ2V0X2Nsb2NrcyB7YmlzdF9tZW1fY2xrX2J9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge21lbV9hZGRyX2JbKl19XQorCitzZXRfb3V0cHV0X2RlbGF5IC1taW4gLTAuNSAtY2xvY2sgW2dldF9jbG9ja3Mge2Jpc3RfbWVtX2Nsa19ifV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHttZW1fY2VuX2J9XQorc2V0X291dHB1dF9kZWxheSAtbWluIC0wLjUgLWNsb2NrIFtnZXRfY2xvY2tzIHtiaXN0X21lbV9jbGtfYn1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7bWVtX2Rpbl9iWypdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAtMC41IC1jbG9jayBbZ2V0X2Nsb2NrcyB7YmlzdF9tZW1fY2xrX2J9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge21lbV9tYXNrX2JbKl19XQorc2V0X291dHB1dF9kZWxheSAtbWluIC0wLjUgLWNsb2NrIFtnZXRfY2xvY2tzIHtiaXN0X21lbV9jbGtfYn1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7bWVtX3dlYl9ifV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAtMC41IC1jbG9jayBbZ2V0X2Nsb2NrcyB7YmlzdF9tZW1fY2xrX2J9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge21lbV9hZGRyX2JbKl19XQorCisKKyMgU2V0IG1heCBkZWxheSBmb3IgY2xvY2sgc2tldworCitzZXRfbWF4X2RlbGF5ICAgMy41IC1mcm9tIFtnZXRfcG9ydHMge3diZF9jbGtfaW50fV0KK3NldF9tYXhfZGVsYXkgICAyIC10byAgIFtnZXRfcG9ydHMge3diZF9jbGtfbWJpc3R9XQorc2V0X21heF9kZWxheSAzLjUgLWZyb20gd2JkX2Nsa19pbnQgLXRvIHdiZF9jbGtfbWJpc3QKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBFbnZpcm9ubWVudAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtiaXN0X2NvcnJlY3R9XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtiaXN0X2RvbmV9XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtiaXN0X2Vycm9yfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7YmlzdF9zZG99XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHttZW1fY2VuX2F9XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHttZW1fY2VuX2J9XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHttZW1fY2xrX2F9XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHttZW1fY2xrX2J9XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHttZW1fd2ViX2J9XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtiaXN0X2Vycm9yX2NudFszXX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2Jpc3RfZXJyb3JfY250WzJdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7YmlzdF9lcnJvcl9jbnRbMV19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtiaXN0X2Vycm9yX2NudFswXX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge3diX2N5Y19pfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7d2Jfc3RiX2l9XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHt3Yl9hZHJfaVsqXX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge3diX3dlX2l9XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHt3Yl9kYXRfaVsqXX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge3diX3NlbF9pWypdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bWVtX2FkZHJfYVsqXX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge21lbV9hZGRyX2JbKl19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHttZW1fZGluX2JbKl19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHttZW1fbWFza19iWypdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7d2JfY3ljX2l9XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtiaXN0X2VufV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7YmlzdF9sb2FkfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7YmlzdF9ydW59XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtiaXN0X3NkaX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2Jpc3Rfc2hpZnR9XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHt3Yl9jeWNfaX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge3diX2Fkcl9pWypdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7d2Jfd2VfaX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge3diX2RhdF9pWypdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7d2Jfc2VsX2lbKl19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtyc3Rfbn1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge21lbV9kb3V0X2FbKl19XQorc2V0X3RpbWluZ19kZXJhdGUgLWVhcmx5IDAuOTUwMAorc2V0X3RpbWluZ19kZXJhdGUgLWxhdGUgMS4wNTAwCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIERlc2lnbiBSdWxlcworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworc2V0X21heF9mYW5vdXQgNC4wMDAwIFtjdXJyZW50X2Rlc2lnbl0KZGlmZiAtLWdpdCBhL29wZW5sYW5lL21iaXN0MS9jb25maWcudGNsIGIvb3BlbmxhbmUvbWJpc3QxL2NvbmZpZy50Y2wKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTg3NjQ4NwotLS0gL2Rldi9udWxsCisrKyBiL29wZW5sYW5lL21iaXN0MS9jb25maWcudGNsCkBAIC0wLDAgKzEsMTEzIEBACisjIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6ICAyMDIxICwgRGluZXNoIEFubmF5eWEKKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisjIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBNb2RpZmllZCBieSBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorCisjIEdsb2JhbAorIyAtLS0tLS0KKworc2V0IHNjcmlwdF9kaXIgW2ZpbGUgZGlybmFtZSBbZmlsZSBub3JtYWxpemUgW2luZm8gc2NyaXB0XV1dCisjIE5hbWUKKworc2V0IDo6ZW52KERFU0lHTl9OQU1FKSBtYmlzdF90b3AxCisKK3NldCA6OmVudihERVNJR05fSVNfQ09SRSkgIjAiCisKKyMgVGltaW5nIGNvbmZpZ3VyYXRpb24KK3NldCA6OmVudihDTE9DS19QRVJJT0QpICIxMCIKK3NldCA6OmVudihDTE9DS19QT1JUKSAidV9jdHNfd2JfY2xrX2IxLnVfYnVmL1ggIHVfY3RzX3diX2Nsa19iMi51X2J1Zi9YIHVfbWVtX3NlbC51X2N0c19tZW1fY2xrX2EudV9idWYvWCB1X21lbV9zZWwudV9jdHNfbWVtX2Nsa19iLnVfYnVmL1giCisKK3NldCA6OmVudihTWU5USF9NQVhfRkFOT1VUKSA0CisKKyMgU291cmNlcworIyAtLS0tLS0tCisKKyMgTG9jYWwgc291cmNlcyArIG5vMnVzYiBzb3VyY2VzCitzZXQgOjplbnYoVkVSSUxPR19GSUxFUykgIlwKKyAgICAgJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwvY2xrX3NrZXdfYWRqdXN0L3NyYy9jbGtfc2tld19hZGp1c3QuZ3YgXAorICAgICAkc2NyaXB0X2Rpci8uLi8uLi92ZXJpbG9nL3J0bC9tYmlzdC9zcmMvY29yZS9tYmlzdF9hZGRyX2dlbi5zdiBcCisgICAgICRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL21iaXN0L3NyYy9jb3JlL21iaXN0X2ZzbS5zdiAgICAgXAorICAgICAkc2NyaXB0X2Rpci8uLi8uLi92ZXJpbG9nL3J0bC9tYmlzdC9zcmMvY29yZS9tYmlzdF9vcF9zZWwuc3YgIFwKKyAgICAgJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwvbWJpc3Qvc3JjL2NvcmUvbWJpc3RfcmVwYWlyX2FkZHIuc3YgXAorICAgICAkc2NyaXB0X2Rpci8uLi8uLi92ZXJpbG9nL3J0bC9tYmlzdC9zcmMvY29yZS9tYmlzdF9zdGlfc2VsLnN2IFwKKyAgICAgJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwvbWJpc3Qvc3JjL2NvcmUvbWJpc3RfcGF0X3NlbC5zdiBcCisgICAgICRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL21iaXN0L3NyYy9jb3JlL21iaXN0X211eC5zdiBcCisgICAgICRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL21iaXN0L3NyYy9jb3JlL21iaXN0X2RhdGFfY21wLnN2IFwKKyAgICAgJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwvbWJpc3Qvc3JjL2NvcmUvbWJpc3RfbWVtX3dyYXBwZXIuc3YgXAorICAgICAkc2NyaXB0X2Rpci8uLi8uLi92ZXJpbG9nL3J0bC9tYmlzdC9zcmMvdG9wL21iaXN0X3RvcDEuc3YgIFwKKyAgICAgJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwvbGliL2N0ZWNoX2NlbGxzLnN2ICAgICBcCisgICAgICRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL2xpYi9yZXNldF9zeW5jLnN2IFwKKwkgICAgICIKKworc2V0IDo6ZW52KFZFUklMT0dfSU5DTFVERV9ESVJTKSBbZ2xvYiAkc2NyaXB0X2Rpci8uLi8uLi92ZXJpbG9nL3J0bC9tYmlzdC9pbmNsdWRlIF0KK3NldCA6OmVudihTWU5USF9ERUZJTkVTKSBbbGlzdCBTWU5USEVTSVMgXQorCisKK3NldCA6OmVudihTWU5USF9QQVJBTVMpICJCSVNUX0FERFJfV0QgOSxcCisJICAgICAgICAgICAgICAgICBCSVNUX0RBVEFfV0QgMzIsXAorCQkgICAgICAgICBCSVNUX0FERFJfU1RBUlQgOSdoMDAwLFwKKwkJCSBCSVNUX0FERFJfRU5EIDknaDFGQixcCisJCQkgQklTVF9SRVBBSVJfQUREUl9TVEFSVCA5J2gxRkMsXAorCQkJIEJJU1RfUkFEX1dEX0kgOSxcCisJCQkgQklTVF9SQURfV0RfTyA5XAorCQkJICIKKworc2V0IDo6ZW52KFNZTlRIX1JFQURfQkxBQ0tCT1hfTElCKSAxCitzZXQgOjplbnYoU0RDX0ZJTEUpICIkc2NyaXB0X2Rpci9iYXNlLnNkYyIKK3NldCA6OmVudihCQVNFX1NEQ19GSUxFKSAiJHNjcmlwdF9kaXIvYmFzZS5zZGMiCisKK3NldCA6OmVudihMRUNfRU5BQkxFKSAwCisKK3NldCA6OmVudihWRERfUElOKSBbbGlzdCB7dmNjZDF9XQorc2V0IDo6ZW52KEdORF9QSU4pIFtsaXN0IHt2c3NkMX1dCisKKworIyBGbG9vcnBsYW5uaW5nCisjIC0tLS0tLS0tLS0tLS0KKworc2V0IDo6ZW52KEZQX1BJTl9PUkRFUl9DRkcpICQ6OmVudihERVNJR05fRElSKS9waW5fb3JkZXIuY2ZnCisKK3NldCA6OmVudihGUF9TSVpJTkcpIGFic29sdXRlCitzZXQgOjplbnYoRElFX0FSRUEpICIwIDAgMjAwIDI3NSIKKworCisjIElmIHlvdSdyZSBnb2luZyB0byB1c2UgbXVsdGlwbGUgcG93ZXIgZG9tYWlucywgdGhlbiBrZWVwIHRoaXMgZGlzYWJsZWQuCitzZXQgOjplbnYoUlVOX0NWQykgMQorCisjc2V0IDo6ZW52KFBETl9DRkcpICRzY3JpcHRfZGlyL3Bkbi50Y2wKKworCitzZXQgOjplbnYoUExfVElNRV9EUklWRU4pIDEKK3NldCA6OmVudihQTF9UQVJHRVRfREVOU0lUWSkgIjAuMzUiCisKKworCitzZXQgOjplbnYoRlBfSU9fVkVYVEVORCkgNAorc2V0IDo6ZW52KEZQX0lPX0hFWFRFTkQpIDQKKworc2V0IDo6ZW52KEZQX1BETl9WUElUQ0gpIDEwMAorc2V0IDo6ZW52KEZQX1BETl9IUElUQ0gpIDEwMAorc2V0IDo6ZW52KEZQX1BETl9WV0lEVEgpIDUKK3NldCA6OmVudihGUF9QRE5fSFdJRFRIKSA1CisKK3NldCA6OmVudihHTEJfUlRfTUFYTEFZRVIpIDUKK3NldCA6OmVudihHTEJfUlRfTUFYX0RJT0RFX0lOU19JVEVSUykgMTAKKworc2V0IDo6ZW52KERJT0RFX0lOU0VSVElPTl9TVFJBVEVHWSkgNAorCisKK3NldCA6OmVudihRVUlUX09OX1RJTUlOR19WSU9MQVRJT05TKSAiMCIKK3NldCA6OmVudihRVUlUX09OX01BR0lDX0RSQykgIjEiCitzZXQgOjplbnYoUVVJVF9PTl9MVlNfRVJST1IpICIwIgorc2V0IDo6ZW52KFFVSVRfT05fU0xFV19WSU9MQVRJT05TKSAiMCIKZGlmZiAtLWdpdCBhL29wZW5sYW5lL21iaXN0MS9pbnRlcmFjdGl2ZS50Y2wgYi9vcGVubGFuZS9tYmlzdDEvaW50ZXJhY3RpdmUudGNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1OTU4NmYKLS0tIC9kZXYvbnVsbAorKysgYi9vcGVubGFuZS9tYmlzdDEvaW50ZXJhY3RpdmUudGNsCkBAIC0wLDAgKzEsMjE5IEBACisjIS91c3IvYmluL3RjbHNoCisjIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjAgRWZhYmxlc3MgQ29ycG9yYXRpb24KKyMgQ29weXJpZ2h0IDIwMjAgRWZhYmxlc3MgQ29ycG9yYXRpb24KKyMgQ29weXJpZ2h0IDIwMjAgU3lsdmFpbiBNdW5hdXQKKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisKK3BhY2thZ2UgcmVxdWlyZSBvcGVubGFuZTsKKworCitwcm9jIHJ1bl9wbGFjZW1lbnRfc3RlcCB7YXJnc30geworICAgICMgc2V0IHBkbmRlZl9kaXJuYW1lIFtmaWxlIGRpcm5hbWUgJDo6ZW52KHBkbl90bXBfZmlsZV90YWcpLmRlZl0KKyAgICAjIHNldCBwZG5kZWYgW2xpbmRleCBbZ2xvYiAkcGRuZGVmX2Rpcm5hbWUvKnBkbipdIDBdCisgICAgIyBzZXRfZGVmICRwZG5kZWYKKyAgICBpZiB7ICEgWyBpbmZvIGV4aXN0cyA6OmVudihQTEFDRU1FTlRfQ1VSUkVOVF9ERUYpIF0gfSB7CisgICAgICAgIHNldCA6OmVudihQTEFDRU1FTlRfQ1VSUkVOVF9ERUYpICQ6OmVudihDVVJSRU5UX0RFRikKKyAgICB9IGVsc2UgeworICAgICAgICBzZXQgOjplbnYoQ1VSUkVOVF9ERUYpICQ6OmVudihQTEFDRU1FTlRfQ1VSUkVOVF9ERUYpCisgICAgfQorCisgICAgcnVuX3BsYWNlbWVudAorfQorCitwcm9jIHJ1bl9jdHNfc3RlcCB7YXJnc30geworICAgICMgc2V0X2RlZiAkOjplbnYob3BlbmRwX3Jlc3VsdF9maWxlX3RhZykuZGVmCisgICAgaWYgeyAhIFsgaW5mbyBleGlzdHMgOjplbnYoQ1RTX0NVUlJFTlRfREVGKSBdIH0geworICAgICAgICBzZXQgOjplbnYoQ1RTX0NVUlJFTlRfREVGKSAkOjplbnYoQ1VSUkVOVF9ERUYpCisgICAgfSBlbHNlIHsKKyAgICAgICAgc2V0IDo6ZW52KENVUlJFTlRfREVGKSAkOjplbnYoQ1RTX0NVUlJFTlRfREVGKQorICAgIH0KKworICAgIHJ1bl9jdHMKKyAgICBydW5fcmVzaXplcl90aW1pbmcKK30KKworcHJvYyBydW5fcm91dGluZ19zdGVwIHthcmdzfSB7CisgICAgIyBzZXQgcmVzaXplcmRlZl9kaXJuYW1lIFtmaWxlIGRpcm5hbWUgJDo6ZW52KHJlc2l6ZXJfdG1wX2ZpbGVfdGFnKV90aW1pbmcuZGVmXQorICAgICMgc2V0IHJlc2l6ZXJkZWYgW2xpbmRleCBbZ2xvYiAkcmVzaXplcmRlZl9kaXJuYW1lLypyZXNpemVyKl0gMF0KKyAgICAjIHNldF9kZWYgJHJlc2l6ZXJkZWYKKyAgICBpZiB7ICEgWyBpbmZvIGV4aXN0cyA6OmVudihST1VUSU5HX0NVUlJFTlRfREVGKSBdIH0geworICAgICAgICBzZXQgOjplbnYoUk9VVElOR19DVVJSRU5UX0RFRikgJDo6ZW52KENVUlJFTlRfREVGKQorICAgIH0gZWxzZSB7CisgICAgICAgIHNldCA6OmVudihDVVJSRU5UX0RFRikgJDo6ZW52KFJPVVRJTkdfQ1VSUkVOVF9ERUYpCisgICAgfQorICAgIHJ1bl9yb3V0aW5nCit9CisKK3Byb2MgcnVuX2Rpb2RlX2luc2VydGlvbl8yXzVfc3RlcCB7YXJnc30geworICAgICMgc2V0X2RlZiAkOjplbnYodHJpdG9uUm91dGVfcmVzdWx0X2ZpbGVfdGFnKS5kZWYKKyAgICBpZiB7ICEgWyBpbmZvIGV4aXN0cyA6OmVudihESU9ERV9JTlNFUlRJT05fQ1VSUkVOVF9ERUYpIF0gfSB7CisgICAgICAgIHNldCA6OmVudihESU9ERV9JTlNFUlRJT05fQ1VSUkVOVF9ERUYpICQ6OmVudihDVVJSRU5UX0RFRikKKyAgICB9IGVsc2UgeworICAgICAgICBzZXQgOjplbnYoQ1VSUkVOVF9ERUYpICQ6OmVudihESU9ERV9JTlNFUlRJT05fQ1VSUkVOVF9ERUYpCisgICAgfQorCWlmIHsgKCQ6OmVudihESU9ERV9JTlNFUlRJT05fU1RSQVRFR1kpID09IDIpIHx8ICgkOjplbnYoRElPREVfSU5TRVJUSU9OX1NUUkFURUdZKSA9PSA1KSB9IHsKKwkJcnVuX2FudGVubmFfY2hlY2sKKwkJaGVhbF9hbnRlbm5hX3Zpb2xhdG9yczsgIyBtb2RpZmllcyB0aGUgcm91dGVkIERFRgorCX0KKworfQorCitwcm9jIHJ1bl9wb3dlcl9waW5zX2luc2VydGlvbl9zdGVwIHthcmdzfSB7CisgICAgIyBzZXRfZGVmICQ6OmVudih0cml0b25Sb3V0ZV9yZXN1bHRfZmlsZV90YWcpLmRlZgorICAgIGlmIHsgISBbIGluZm8gZXhpc3RzIDo6ZW52KFBPV0VSX1BJTlNfSU5TRVJUSU9OX0NVUlJFTlRfREVGKSBdIH0geworICAgICAgICBzZXQgOjplbnYoUE9XRVJfUElOU19JTlNFUlRJT05fQ1VSUkVOVF9ERUYpICQ6OmVudihDVVJSRU5UX0RFRikKKyAgICB9IGVsc2UgeworICAgICAgICBzZXQgOjplbnYoQ1VSUkVOVF9ERUYpICQ6OmVudihQT1dFUl9QSU5TX0lOU0VSVElPTl9DVVJSRU5UX0RFRikKKyAgICB9CisgICAgaWYgeyAkOjplbnYoTFZTX0lOU0VSVF9QT1dFUl9QSU5TKSB9IHsKKwkJd3JpdGVfcG93ZXJlZF92ZXJpbG9nCisJCXNldF9uZXRsaXN0ICQ6OmVudihsdnNfcmVzdWx0X2ZpbGVfdGFnKS5wb3dlcmVkLnYKKyAgICB9CisKK30KKworcHJvYyBydW5fbHZzX3N0ZXAge3sgbHZzX2VuYWJsZWQgMSB9fSB7CisgICAgIyBzZXRfZGVmICQ6OmVudih0cml0b25Sb3V0ZV9yZXN1bHRfZmlsZV90YWcpLmRlZgorICAgIGlmIHsgISBbIGluZm8gZXhpc3RzIDo6ZW52KExWU19DVVJSRU5UX0RFRikgXSB9IHsKKyAgICAgICAgc2V0IDo6ZW52KExWU19DVVJSRU5UX0RFRikgJDo6ZW52KENVUlJFTlRfREVGKQorICAgIH0gZWxzZSB7CisgICAgICAgIHNldCA6OmVudihDVVJSRU5UX0RFRikgJDo6ZW52KExWU19DVVJSRU5UX0RFRikKKyAgICB9CisJaWYgeyAkbHZzX2VuYWJsZWQgfSB7CisJCXJ1bl9tYWdpY19zcGljZV9leHBvcnQKKwkJcnVuX2x2czsgIyByZXF1aXJlcyBydW5fbWFnaWNfc3BpY2VfZXhwb3J0CisJfQorCit9CisKK3Byb2MgcnVuX2RyY19zdGVwIHt7IGRyY19lbmFibGVkIDEgfX0geworICAgIGlmIHsgISBbIGluZm8gZXhpc3RzIDo6ZW52KERSQ19DVVJSRU5UX0RFRikgXSB9IHsKKyAgICAgICAgc2V0IDo6ZW52KERSQ19DVVJSRU5UX0RFRikgJDo6ZW52KENVUlJFTlRfREVGKQorICAgIH0gZWxzZSB7CisgICAgICAgIHNldCA6OmVudihDVVJSRU5UX0RFRikgJDo6ZW52KERSQ19DVVJSRU5UX0RFRikKKyAgICB9CisJaWYgeyAkZHJjX2VuYWJsZWQgfSB7CisJCXJ1bl9tYWdpY19kcmMKKwkJcnVuX2tsYXlvdXRfZHJjCisJfQorfQorCitwcm9jIHJ1bl9hbnRlbm5hX2NoZWNrX3N0ZXAge3sgYW50ZW5uYV9jaGVja19lbmFibGVkIDEgfX0geworICAgIGlmIHsgISBbIGluZm8gZXhpc3RzIDo6ZW52KEFOVEVOTkFfQ0hFQ0tfQ1VSUkVOVF9ERUYpIF0gfSB7CisgICAgICAgIHNldCA6OmVudihBTlRFTk5BX0NIRUNLX0NVUlJFTlRfREVGKSAkOjplbnYoQ1VSUkVOVF9ERUYpCisgICAgfSBlbHNlIHsKKyAgICAgICAgc2V0IDo6ZW52KENVUlJFTlRfREVGKSAkOjplbnYoQU5URU5OQV9DSEVDS19DVVJSRU5UX0RFRikKKyAgICB9CisJaWYgeyAkYW50ZW5uYV9jaGVja19lbmFibGVkIH0geworCQlydW5fYW50ZW5uYV9jaGVjaworCX0KK30KKworcHJvYyBydW5fZmxvdyB7YXJnc30geworICAgICAgIHNldCBzY3JpcHRfZGlyIFtmaWxlIGRpcm5hbWUgW2ZpbGUgbm9ybWFsaXplIFtpbmZvIHNjcmlwdF1dXQorCisJCXNldCBvcHRpb25zIHsKKwkJey1kZXNpZ24gcmVxdWlyZWR9CisJCXstc2F2ZV9wYXRoIG9wdGlvbmFsfQorCQl7LW5vX2x2cyBvcHRpb25hbH0KKwkgICAgey1ub19kcmMgb3B0aW9uYWx9CisJICAgIHstbm9fYW50ZW5uYWNoZWNrIG9wdGlvbmFsfQorCX0KKwlzZXQgZmxhZ3Mgey1zYXZlfQorCXBhcnNlX2tleV9hcmdzICJydW5fZmxvdyIgYXJncyBhcmdfdmFsdWVzICRvcHRpb25zIGZsYWdzX21hcCAkZmxhZ3MgLW5vX2NvbnN1bWUKKworCXByZXAgeyp9JGFyZ3MKKworICAgICAgICBzZXQgTFZTX0VOQUJMRUQgMQorICAgICAgICBzZXQgRFJDX0VOQUJMRUQgMQorICAgICAgICBzZXQgQU5URU5OQUNIRUNLX0VOQUJMRUQgMQorCisgICAgICAgIHNldCBzdGVwcyBbZGljdCBjcmVhdGUgInN5bnRoZXNpcyIge3J1bl9zeW50aGVzaXMgIiIgfSBcCisgICAgICAgICAgICAgICAgImZsb29ycGxhbiIge3J1bl9mbG9vcnBsYW4gIiJ9IFwKKyAgICAgICAgICAgICAgICAicGxhY2VtZW50IiB7cnVuX3BsYWNlbWVudF9zdGVwICIifSBcCisgICAgICAgICAgICAgICAgImN0cyIge3J1bl9jdHNfc3RlcCAiIn0gXAorICAgICAgICAgICAgICAgICJyb3V0aW5nIiB7cnVuX3JvdXRpbmdfc3RlcCAiIn1cCisgICAgICAgICAgICAgICAgImRpb2RlX2luc2VydGlvbiIge3J1bl9kaW9kZV9pbnNlcnRpb25fMl81X3N0ZXAgIiJ9IFwKKyAgICAgICAgICAgICAgICAicG93ZXJfcGluc19pbnNlcnRpb24iIHtydW5fcG93ZXJfcGluc19pbnNlcnRpb25fc3RlcCAiIn0gXAorICAgICAgICAgICAgICAgICJnZHNfbWFnaWMiIHtydW5fbWFnaWMgIiJ9IFwKKyAgICAgICAgICAgICAgICAiZ2RzX2RyY19rbGF5b3V0IiB7cnVuX2tsYXlvdXQgIiJ9IFwKKyAgICAgICAgICAgICAgICAiZ2RzX3hvcl9rbGF5b3V0IiB7cnVuX2tsYXlvdXRfZ2RzX3hvciAiIn0gXAorICAgICAgICAgICAgICAgICJsdnMiICJydW5fbHZzX3N0ZXAgJExWU19FTkFCTEVEIiBcCisgICAgICAgICAgICAgICAgImRyYyIgInJ1bl9kcmNfc3RlcCAkRFJDX0VOQUJMRUQiIFwKKyAgICAgICAgICAgICAgICAiYW50ZW5uYV9jaGVjayIgInJ1bl9hbnRlbm5hX2NoZWNrX3N0ZXAgJEFOVEVOTkFDSEVDS19FTkFCTEVEIiBcCisgICAgICAgICAgICAgICAgImN2YyIge3J1bl9sZWZfY3ZjfQorICAgICAgICBdCisKKyAgICAgICBzZXRfaWZfdW5zZXQgYXJnX3ZhbHVlcygtdG8pICJjdmMiOworCisgICAgICAgaWYgeyAgW2luZm8gZXhpc3RzIDo6ZW52KENVUlJFTlRfU1RFUCkgXSB9IHsKKyAgICAgICAgICAgcHV0cyAiXFtJTkZPXF06UGlja2luZyB1cCB3aGVyZSBsYXN0IGV4ZWN1dGlvbiBsZWZ0IG9mZiIKKyAgICAgICAgICAgcHV0cyBbZm9ybWF0ICJcW0lORk9cXTpDdXJyZW50IHN0YWdlIGlzICVzICIgJDo6ZW52KENVUlJFTlRfU1RFUCldCisgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgc2V0IDo6ZW52KENVUlJFTlRfU1RFUCkgInN5bnRoZXNpcyI7CisgICAgICAgfQorICAgICAgIHNldF9pZl91bnNldCBhcmdfdmFsdWVzKC1mcm9tKSAkOjplbnYoQ1VSUkVOVF9TVEVQKTsKKyAgICAgICBzZXQgZXhlIDA7CisgICAgICAgZGljdCBmb3Ige3N0ZXBfbmFtZSBzdGVwX2V4ZX0gJHN0ZXBzIHsKKyAgICAgICAgICAgaWYgeyBbIHN0cmluZyBlcXVhbCAkYXJnX3ZhbHVlcygtZnJvbSkgJHN0ZXBfbmFtZSBdIH0geworICAgICAgICAgICAgICAgc2V0IGV4ZSAxOworICAgICAgICAgICB9CisKKyAgICAgICAgICAgaWYgeyAkZXhlIH0geworICAgICAgICAgICAgICAgIyBGb3Igd2hlbiBpdCBmYWlscworICAgICAgICAgICAgICAgc2V0IDo6ZW52KENVUlJFTlRfU1RFUCkgJHN0ZXBfbmFtZQorICAgICAgICAgICAgICAgW2xpbmRleCAkc3RlcF9leGUgMF0gW2xpbmRleCAkc3RlcF9leGUgMV0gOworICAgICAgICAgICB9CisKKyAgICAgICAgICAgaWYgeyBbIHN0cmluZyBlcXVhbCAkYXJnX3ZhbHVlcygtdG8pICRzdGVwX25hbWUgXSB9IHsKKyAgICAgICAgICAgICAgIHNldCBleGUgMDoKKyAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICB9CisKKyAgICAgICB9CisKKyAgICAgICAjIGZvciB3aGVuIGl0IHJlc3VtZXMKKyAgICAgICBzZXQgc3RlcHNfYXNfbGlzdCBbZGljdCBrZXlzICRzdGVwc10KKyAgICAgICBzZXQgbmV4dF9pZHggW2V4cHIgW2xzZWFyY2ggJHN0ZXBzX2FzX2xpc3QgJDo6ZW52KENVUlJFTlRfU1RFUCldICsgMV0KKyAgICAgICBzZXQgOjplbnYoQ1VSUkVOVF9TVEVQKSBbbGluZGV4ICRzdGVwc19hc19saXN0ICRuZXh0X2lkeF0KKworCWlmIHsgIFtpbmZvIGV4aXN0cyBmbGFnc19tYXAoLXNhdmUpIF0gfSB7CisJCWlmIHsgISBbaW5mbyBleGlzdHMgYXJnX3ZhbHVlcygtc2F2ZV9wYXRoKV0gfSB7CisJCQlzZXQgYXJnX3ZhbHVlcygtc2F2ZV9wYXRoKSAiIgorCQl9CisJCXNhdmVfdmlld3MgCS1sZWZfcGF0aCAkOjplbnYobWFnaWNfcmVzdWx0X2ZpbGVfdGFnKS5sZWYgXAorCQkJLWRlZl9wYXRoICQ6OmVudihDVVJSRU5UX0RFRikgXAorCQkJLWdkc19wYXRoICQ6OmVudihtYWdpY19yZXN1bHRfZmlsZV90YWcpLmdkcyBcCisJCQktbWFnX3BhdGggJDo6ZW52KG1hZ2ljX3Jlc3VsdF9maWxlX3RhZykubWFnIFwKKwkJCS1tYWdsZWZfcGF0aCAkOjplbnYobWFnaWNfcmVzdWx0X2ZpbGVfdGFnKS5sZWYubWFnIFwKKwkJCS1zcGljZV9wYXRoICQ6OmVudihtYWdpY19yZXN1bHRfZmlsZV90YWcpLnNwaWNlIFwKKwkJCS1zcGVmX3BhdGggJDo6ZW52KENVUlJFTlRfU1BFRikgXAorCQkJLXZlcmlsb2dfcGF0aCAkOjplbnYoQ1VSUkVOVF9ORVRMSVNUKSBcCisJCQktc2F2ZV9wYXRoICRhcmdfdmFsdWVzKC1zYXZlX3BhdGgpIFwKKwkJCS10YWcgJDo6ZW52KFJVTl9UQUcpCisJfQorCisKKwljYWxjX3RvdGFsX3J1bnRpbWUKKwlzYXZlX3N0YXRlCisJZ2VuZXJhdGVfZmluYWxfc3VtbWFyeV9yZXBvcnQKKwkKKwljaGVja190aW1pbmdfdmlvbGF0aW9ucworCisJcHV0c19zdWNjZXNzICJGbG93IENvbXBsZXRlZCBXaXRob3V0IEZhdGFsIEVycm9ycy4iCisKK30KKworcnVuX2Zsb3cgeyp9JGFyZ3YKZGlmZiAtLWdpdCBhL29wZW5sYW5lL21iaXN0MS9waW5fb3JkZXIuY2ZnIGIvb3BlbmxhbmUvbWJpc3QxL3Bpbl9vcmRlci5jZmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODJkZDYzNgotLS0gL2Rldi9udWxsCisrKyBiL29wZW5sYW5lL21iaXN0MS9waW5fb3JkZXIuY2ZnCkBAIC0wLDAgKzEsMjEzIEBACisjQlVTX1NPUlQKKworI01BTlVBTF9QTEFDRQorCisKKyNTCityc3RfbiAgICAgICAgICAgIDAwMDAgMCAgICAgICAgCisKKworCisjRQorY2ZnX2Nza2FfbWJpc3RcWzNcXSAgMDAwMCAwIDQKK2NmZ19jc2thX21iaXN0XFsyXF0KK2NmZ19jc2thX21iaXN0XFsxXF0KK2NmZ19jc2thX21iaXN0XFswXF0KK3diX2Nsa19pICAgICAgICAgCit3YmRfY2xrX21iaXN0Cit3YmRfY2xrX2ludCAgICAgICAgIAorCit3Yl9jeWNfaSAgICAgICAgICAgIDAwMjUgMCAyCit3Yl9zdGJfaQord2Jfd2VfaQord2JfYWRyX2lcWzhcXQord2JfYWRyX2lcWzdcXQord2JfYWRyX2lcWzZcXQord2JfYWRyX2lcWzVcXQord2JfYWRyX2lcWzRcXQord2JfYWRyX2lcWzNcXQord2JfYWRyX2lcWzJcXQord2JfYWRyX2lcWzFcXQord2JfYWRyX2lcWzBcXQord2JfZGF0X2lcWzMxXF0KK3diX2RhdF9pXFszMFxdCit3Yl9kYXRfaVxbMjlcXQord2JfZGF0X2lcWzI4XF0KK3diX2RhdF9pXFsyN1xdCit3Yl9kYXRfaVxbMjZcXQord2JfZGF0X2lcWzI1XF0KK3diX2RhdF9pXFsyNFxdCit3Yl9kYXRfaVxbMjNcXQord2JfZGF0X2lcWzIyXF0KK3diX2RhdF9pXFsyMVxdCit3Yl9kYXRfaVxbMjBcXQord2JfZGF0X2lcWzE5XF0KK3diX2RhdF9pXFsxOFxdCit3Yl9kYXRfaVxbMTdcXQord2JfZGF0X2lcWzE2XF0KK3diX2RhdF9pXFsxNVxdCit3Yl9kYXRfaVxbMTRcXQord2JfZGF0X2lcWzEzXF0KK3diX2RhdF9pXFsxMlxdCit3Yl9kYXRfaVxbMTFcXQord2JfZGF0X2lcWzEwXF0KK3diX2RhdF9pXFs5XF0KK3diX2RhdF9pXFs4XF0KK3diX2RhdF9pXFs3XF0KK3diX2RhdF9pXFs2XF0KK3diX2RhdF9pXFs1XF0KK3diX2RhdF9pXFs0XF0KK3diX2RhdF9pXFszXF0KK3diX2RhdF9pXFsyXF0KK3diX2RhdF9pXFsxXF0KK3diX2RhdF9pXFswXF0KK3diX3NlbF9pXFszXF0KK3diX3NlbF9pXFsyXF0KK3diX3NlbF9pXFsxXF0KK3diX3NlbF9pXFswXF0KK3diX2RhdF9vXFszMVxdCit3Yl9kYXRfb1xbMzBcXQord2JfZGF0X29cWzI5XF0KK3diX2RhdF9vXFsyOFxdCit3Yl9kYXRfb1xbMjdcXQord2JfZGF0X29cWzI2XF0KK3diX2RhdF9vXFsyNVxdCit3Yl9kYXRfb1xbMjRcXQord2JfZGF0X29cWzIzXF0KK3diX2RhdF9vXFsyMlxdCit3Yl9kYXRfb1xbMjFcXQord2JfZGF0X29cWzIwXF0KK3diX2RhdF9vXFsxOVxdCit3Yl9kYXRfb1xbMThcXQord2JfZGF0X29cWzE3XF0KK3diX2RhdF9vXFsxNlxdCit3Yl9kYXRfb1xbMTVcXQord2JfZGF0X29cWzE0XF0KK3diX2RhdF9vXFsxM1xdCit3Yl9kYXRfb1xbMTJcXQord2JfZGF0X29cWzExXF0KK3diX2RhdF9vXFsxMFxdCit3Yl9kYXRfb1xbOVxdCit3Yl9kYXRfb1xbOFxdCit3Yl9kYXRfb1xbN1xdCit3Yl9kYXRfb1xbNlxdCit3Yl9kYXRfb1xbNVxdCit3Yl9kYXRfb1xbNFxdCit3Yl9kYXRfb1xbM1xdCit3Yl9kYXRfb1xbMlxdCit3Yl9kYXRfb1xbMVxdCit3Yl9kYXRfb1xbMFxdCit3Yl9hY2tfbword2JfZXJyX28KKworCitiaXN0X2Vycm9yX2NudFxbM1xdIDAxNTAgMCAyCitiaXN0X2Vycm9yX2NudFxbMlxdCitiaXN0X2Vycm9yX2NudFxbMVxdCitiaXN0X2Vycm9yX2NudFxbMFxdCitiaXN0X2NvcnJlY3QKK2Jpc3RfZXJyb3IKK2Jpc3RfZG9uZQorYmlzdF9zZG8KK2Jpc3Rfc2hpZnQKK2Jpc3Rfc2RpCitiaXN0X2xvYWQKK2Jpc3RfcnVuCitiaXN0X2VuICAgICAgICAgICAKKworI1cKK21lbV9jbGtfYiAgICAgICAwMDAwIDAgMgorbWVtX2Nlbl9iCittZW1fd2ViX2IKK21lbV9tYXNrX2JcWzBcXQorbWVtX21hc2tfYlxbMVxdCittZW1fbWFza19iXFsyXF0KK21lbV9tYXNrX2JcWzNcXQorbWVtX2FkZHJfYlxbMFxdCittZW1fYWRkcl9iXFsxXF0KK21lbV9hZGRyX2JcWzJcXQorbWVtX2FkZHJfYlxbM1xdCittZW1fYWRkcl9iXFs0XF0KK21lbV9hZGRyX2JcWzVcXQorbWVtX2FkZHJfYlxbNlxdCittZW1fYWRkcl9iXFs3XF0KK21lbV9hZGRyX2JcWzhcXQorbWVtX2Rpbl9iXFswXF0KK21lbV9kaW5fYlxbMVxdCittZW1fZGluX2JcWzJcXQorbWVtX2Rpbl9iXFszXF0KK21lbV9kaW5fYlxbNFxdCittZW1fZGluX2JcWzVcXQorbWVtX2Rpbl9iXFs2XF0KK21lbV9kaW5fYlxbN1xdCittZW1fZGluX2JcWzhcXQorbWVtX2Rpbl9iXFs5XF0KK21lbV9kaW5fYlxbMTBcXQorbWVtX2Rpbl9iXFsxMVxdCittZW1fZGluX2JcWzEyXF0KK21lbV9kaW5fYlxbMTNcXQorbWVtX2Rpbl9iXFsxNFxdCittZW1fZGluX2JcWzE1XF0KK21lbV9kaW5fYlxbMTZcXQorbWVtX2Rpbl9iXFsxN1xdCittZW1fZGluX2JcWzE4XF0KK21lbV9kaW5fYlxbMTlcXQorbWVtX2Rpbl9iXFsyMFxdCittZW1fZGluX2JcWzIxXF0KK21lbV9kaW5fYlxbMjJcXQorbWVtX2Rpbl9iXFsyM1xdCittZW1fZGluX2JcWzI0XF0KK21lbV9kaW5fYlxbMjVcXQorbWVtX2Rpbl9iXFsyNlxdCittZW1fZGluX2JcWzI3XF0KK21lbV9kaW5fYlxbMjhcXQorbWVtX2Rpbl9iXFsyOVxdCittZW1fZGluX2JcWzMwXF0KK21lbV9kaW5fYlxbMzFcXQorCisKK21lbV9kb3V0X2FcWzBcXSAgMDEwMCAwIDIKK21lbV9kb3V0X2FcWzFcXQorbWVtX2RvdXRfYVxbMlxdCittZW1fZG91dF9hXFszXF0KK21lbV9kb3V0X2FcWzRcXQorbWVtX2RvdXRfYVxbNVxdCittZW1fZG91dF9hXFs2XF0KK21lbV9kb3V0X2FcWzdcXQorbWVtX2RvdXRfYVxbOFxdCittZW1fZG91dF9hXFs5XF0KK21lbV9kb3V0X2FcWzEwXF0KK21lbV9kb3V0X2FcWzExXF0KK21lbV9kb3V0X2FcWzEyXF0KK21lbV9kb3V0X2FcWzEzXF0KK21lbV9kb3V0X2FcWzE0XF0KK21lbV9kb3V0X2FcWzE1XF0KK21lbV9kb3V0X2FcWzE2XF0KK21lbV9kb3V0X2FcWzE3XF0KK21lbV9kb3V0X2FcWzE4XF0KK21lbV9kb3V0X2FcWzE5XF0KK21lbV9kb3V0X2FcWzIwXF0KK21lbV9kb3V0X2FcWzIxXF0KK21lbV9kb3V0X2FcWzIyXF0KK21lbV9kb3V0X2FcWzIzXF0KK21lbV9kb3V0X2FcWzI0XF0KK21lbV9kb3V0X2FcWzI1XF0KK21lbV9kb3V0X2FcWzI2XF0KK21lbV9kb3V0X2FcWzI3XF0KK21lbV9kb3V0X2FcWzI4XF0KK21lbV9kb3V0X2FcWzI5XF0KK21lbV9kb3V0X2FcWzMwXF0KK21lbV9kb3V0X2FcWzMxXF0KKworCittZW1fY2xrX2EgICAgICAgICAgMDIwMCAwIDIKK21lbV9jZW5fYQorbWVtX2FkZHJfYVxbOFxdCittZW1fYWRkcl9hXFs3XF0KK21lbV9hZGRyX2FcWzZcXQorbWVtX2FkZHJfYVxbNVxdCittZW1fYWRkcl9hXFs0XF0KK21lbV9hZGRyX2FcWzNcXQorbWVtX2FkZHJfYVxbMlxdCittZW1fYWRkcl9hXFsxXF0KK21lbV9hZGRyX2FcWzBcXQpkaWZmIC0tZ2l0IGEvb3BlbmxhbmUvbWJpc3QxL3N0YS50Y2wgYi9vcGVubGFuZS9tYmlzdDEvc3RhLnRjbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2E2YzM1Ci0tLSAvZGV2L251bGwKKysrIGIvb3BlbmxhbmUvbWJpc3QxL3N0YS50Y2wKQEAgLTAsMCArMSw4OCBAQAorIyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAgMjAyMSAsIERpbmVzaCBBbm5heXlhCisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorIyBTUERYLUZpbGVDb250cmlidXRvcjogTW9kaWZpZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKworCitzZXQgOjplbnYoTElCX0ZBU1RFU1QpICIkOjplbnYoUERLX1JPT1QpL3NreTEzMEEvbGlicy5yZWYvc2t5MTMwX2ZkX3NjX2hkL2xpYi9za3kxMzBfZmRfc2NfaGRfX2ZmX240MENfMXY5NS5saWIiCitzZXQgOjplbnYoTElCX1RZUElDQUwpICIkOjplbnYoUERLX1JPT1QpL3NreTEzMEEvbGlicy5yZWYvc2t5MTMwX2ZkX3NjX2hkL2xpYi9za3kxMzBfZmRfc2NfaGRfX3R0XzAyNUNfMXY4MC5saWIiCitzZXQgOjplbnYoTElCX1NMT1dFU1QpICIkOjplbnYoUERLX1JPT1QpL3NreTEzMEEvbGlicy5yZWYvc2t5MTMwX2ZkX3NjX2hkL2xpYi9za3kxMzBfZmRfc2NfaGRfX3NzXzEwMENfMXY2MC5saWIiCitzZXQgOjplbnYoREVTSUdOX05BTUUpICJtYmlzdF90b3AiCitzZXQgOjplbnYoQkFTRV9TRENfRklMRSkgImJhc2Uuc2RjIgorc2V0IDo6ZW52KFNZTlRIX0RSSVZJTkdfQ0VMTCkgInNreTEzMF9mZF9zY19oZF9faW52XzgiCitzZXQgOjplbnYoU1lOVEhfRFJJVklOR19DRUxMX1BJTikgIlkiCitzZXQgOjplbnYoU1lOVEhfQ0FQX0xPQUQpICIxNy42NSIKK3NldCA6OmVudihXSVJFX1JDX0xBWUVSKSAibWV0MSIKKworI1RvIGRpc2FibGUgZW1wdHkgZmlsbGVyIGNlbGwgYmxhY2sgYm94IGdldCBjcmVhdGVkCisjc2V0IGxpbmtfbWFrZV9ibGFja19ib3hlcyAwCisKKworc2V0X2NtZF91bml0cyAtdGltZSBucyAtY2FwYWNpdGFuY2UgcEYgLWN1cnJlbnQgbUEgLXZvbHRhZ2UgViAtcmVzaXN0YW5jZSBrT2htIC1kaXN0YW5jZSB1bQorZGVmaW5lX2Nvcm5lcnMgd2MgYmMgdHQKK3JlYWRfbGliZXJ0eSAtY29ybmVyIGJjICQ6OmVudihMSUJfRkFTVEVTVCkKK3JlYWRfbGliZXJ0eSAtY29ybmVyIHdjICQ6OmVudihMSUJfU0xPV0VTVCkKK3JlYWRfbGliZXJ0eSAtY29ybmVyIHR0ICQ6OmVudihMSUJfVFlQSUNBTCkKKworCityZWFkX3Zlcmlsb2cgLi4vdXNlcl9wcm9qZWN0X3dyYXBwZXIvbmV0bGlzdC9tYmlzdC52CitsaW5rX2Rlc2lnbiAgJDo6ZW52KERFU0lHTl9OQU1FKQorCisKK3JlYWRfc3BlZiAuLi8uLi9zcGVmL21iaXN0X3RvcC5zcGVmICAKKworCityZWFkX3NkYyAtZWNobyAkOjplbnYoQkFTRV9TRENfRklMRSkKKworIyBjaGVjayBmb3IgbWlzc2luZyBjb25zdHJhaW50cworY2hlY2tfc2V0dXAgIC12ZXJib3NlID4gdW5jb25zdHJhaW50cy5ycHQKKworc2V0X29wZXJhdGluZ19jb25kaXRpb25zIC1hbmFseXNpc190eXBlIHNpbmdsZQorIyBQcm9wZ2F0ZSB0aGUgY2xvY2sKK3NldF9wcm9wYWdhdGVkX2Nsb2NrIFthbGxfY2xvY2tzXQorCityZXBvcnRfdG5zCityZXBvcnRfd25zCisjcmVwb3J0X3Bvd2VyIAorZWNobyAiIyMjIyMjIyMjIyMjIyMjIyBDT1JORVIgOiBXQyAoU0xPVykgVElNSU5HIFJlcG9ydCAjIyMjIyMjIyMjIyMjIyMjIyMjIiA+IHRpbWluZ19zc19tYXgucnB0CityZXBvcnRfY2hlY2tzIC11bmlxdWUgLXBhdGhfZGVsYXkgbWF4IC1zbGFja19tYXggLTAuMCAtZ3JvdXBfY291bnQgMTAwIC1jb3JuZXIgd2MgPj4gdGltaW5nX3NzX21heC5ycHQKK3JlcG9ydF9jaGVja3MgLWdyb3VwX2NvdW50IDEwMCAtcGF0aF9kZWxheSBtYXggIC1wYXRoX2dyb3VwIGJpc3RfY2xrICAtY29ybmVyIHdjICA+PiB0aW1pbmdfc3NfbWF4LnJwdAorcmVwb3J0X2NoZWNrcyAtZ3JvdXBfY291bnQgMTAwIC1wYXRoX2RlbGF5IG1heCAgLXBhdGhfZ3JvdXAgbWVtX2Nsa19hICAtY29ybmVyIHdjICA+PiB0aW1pbmdfc3NfbWF4LnJwdAorcmVwb3J0X2NoZWNrcyAtZ3JvdXBfY291bnQgMTAwIC1wYXRoX2RlbGF5IG1heCAgLXBhdGhfZ3JvdXAgbWVtX2Nsa19iIC1jb3JuZXIgd2MgID4+IHRpbWluZ19zc19tYXgucnB0CityZXBvcnRfY2hlY2tzIC1wYXRoX2RlbGF5IG1heCAgIC1jb3JuZXIgd2MgPj4gdGltaW5nX3NzX21heC5ycHQKKworZWNobyAiIyMjIyMjIyMjIyMjIyMjIyBDT1JORVIgOiBCQyAoU0xPVykgVElNSU5HIFJlcG9ydCAjIyMjIyMjIyMjIyMjIyMjIyMjIiA+IHRpbWluZ19mZl9taW4ucnB0CityZXBvcnRfY2hlY2tzIC11bmlxdWUgLXBhdGhfZGVsYXkgbWluIC1zbGFja19taW4gLTAuMCAtZ3JvdXBfY291bnQgMTAwIC1jb3JuZXIgYmMgPj4gdGltaW5nX2ZmX21pbi5ycHQKK3JlcG9ydF9jaGVja3MgLWdyb3VwX2NvdW50IDEwMCAgLXBhdGhfZGVsYXkgbWluIC1wYXRoX2dyb3VwIGJpc3RfY2xrICAtY29ybmVyIGJjICA+PiB0aW1pbmdfZmZfbWluLnJwdAorcmVwb3J0X2NoZWNrcyAtZ3JvdXBfY291bnQgMTAwICAtcGF0aF9kZWxheSBtaW4gLXBhdGhfZ3JvdXAgbWVtX2Nsa19hICAtY29ybmVyIGJjICA+PiB0aW1pbmdfZmZfbWluLnJwdAorcmVwb3J0X2NoZWNrcyAtZ3JvdXBfY291bnQgMTAwICAtcGF0aF9kZWxheSBtaW4gLXBhdGhfZ3JvdXAgbWVtX2Nsa19iIC1jb3JuZXIgYmMgID4+IHRpbWluZ19mZl9taW4ucnB0CityZXBvcnRfY2hlY2tzIC1wYXRoX2RlbGF5IG1pbiAgLWNvcm5lciBiYyA+PiB0aW1pbmdfZmZfbWluLnJwdAorCitlY2hvICIjIyMjIyMjIyMjIyMjIyMjIENPUk5FUiA6IFRUIChNQVgpIFRJTUlORyBSZXBvcnQgIyMjIyMjIyMjIyMjIyMjIyMjIyIgPiB0aW1pbmdfdHRfbWF4LnJwdAorcmVwb3J0X2NoZWNrcyAtdW5pcXVlIC1wYXRoX2RlbGF5IG1pbiAtc2xhY2tfbWluIC0wLjAgLWdyb3VwX2NvdW50IDEwMCAtY29ybmVyIHR0ID4+IHRpbWluZ190dF9tYXgucnB0CityZXBvcnRfY2hlY2tzIC1ncm91cF9jb3VudCAxMDAgIC1wYXRoX2RlbGF5IG1heCAtcGF0aF9ncm91cCBiaXN0X2NsayAgLWNvcm5lciB0dCAgPj4gdGltaW5nX3R0X21heC5ycHQKK3JlcG9ydF9jaGVja3MgLWdyb3VwX2NvdW50IDEwMCAgLXBhdGhfZGVsYXkgbWF4IC1wYXRoX2dyb3VwIG1lbV9jbGtfYSAgLWNvcm5lciB0dCAgPj4gdGltaW5nX3R0X21heC5ycHQKK3JlcG9ydF9jaGVja3MgLWdyb3VwX2NvdW50IDEwMCAgLXBhdGhfZGVsYXkgbWF4IC1wYXRoX2dyb3VwIG1lbV9jbGtfYiAtY29ybmVyIHR0ICA+PiB0aW1pbmdfdHRfbWF4LnJwdAorcmVwb3J0X2NoZWNrcyAtcGF0aF9kZWxheSBtaW4gIC1jb3JuZXIgdHQgPj4gdGltaW5nX3R0X21pbi5ycHQKKworZWNobyAiIyMjIyMjIyMjIyMjIyMjIyBDT1JORVIgOiBUVCAoTUlOKSBUSU1JTkcgUmVwb3J0ICMjIyMjIyMjIyMjIyMjIyMjIyMiID4gdGltaW5nX3R0X21pbi5ycHQKK3JlcG9ydF9jaGVja3MgLXVuaXF1ZSAtcGF0aF9kZWxheSBtaW4gLXNsYWNrX21pbiAtMC4wIC1ncm91cF9jb3VudCAxMDAgLWNvcm5lciB0dCA+PiB0aW1pbmdfdHRfbWluLnJwdAorcmVwb3J0X2NoZWNrcyAtZ3JvdXBfY291bnQgMTAwICAtcGF0aF9kZWxheSBtaW4gLXBhdGhfZ3JvdXAgYmlzdF9jbGsgIC1jb3JuZXIgdHQgID4+IHRpbWluZ190dF9taW4ucnB0CityZXBvcnRfY2hlY2tzIC1ncm91cF9jb3VudCAxMDAgIC1wYXRoX2RlbGF5IG1pbiAtcGF0aF9ncm91cCBtZW1fY2xrX2EgLWNvcm5lciB0dCAgPj4gdGltaW5nX3R0X21pbi5ycHQKK3JlcG9ydF9jaGVja3MgLWdyb3VwX2NvdW50IDEwMCAgLXBhdGhfZGVsYXkgbWluIC1wYXRoX2dyb3VwIG1lbV9jbGtfYiAtY29ybmVyIHR0ICA+PiB0aW1pbmdfdHRfbWluLnJwdAorcmVwb3J0X2NoZWNrcyAtcGF0aF9kZWxheSBtaW4gIC1jb3JuZXIgdHQgPj4gdGltaW5nX3R0X21pbi5ycHQKKworcmVwb3J0X2NoZWNrcyAtcGF0aF9kZWxheSBtaW4KKworI2V4aXQKZGlmZiAtLWdpdCBhL29wZW5sYW5lL3Bpbm11eC9iYXNlLnNkYyBiL29wZW5sYW5lL3Bpbm11eC9iYXNlLnNkYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWEzMWI2Ci0tLSAvZGV2L251bGwKKysrIGIvb3BlbmxhbmUvcGlubXV4L2Jhc2Uuc2RjCkBAIC0wLDAgKzEsNjEgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ3JlYXRlZCBieSB3cml0ZV9zZGMKKyMgVGh1IE5vdiAxMSAwNTozMzo0MiAyMDIxCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitjdXJyZW50X2Rlc2lnbiBwaW5tdXgKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVGltaW5nIENvbnN0cmFpbnRzCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitjcmVhdGVfY2xvY2sgLW5hbWUgbWNsayAtcGVyaW9kIDEwLjAwMDAgW2dldF9wb3J0cyB7bWNsa31dCitzZXRfcHJvcGFnYXRlZF9jbG9jayBbZ2V0X2Nsb2NrcyB7bWNsa31dCisKK3NldF9jbG9ja190cmFuc2l0aW9uIDAuMTUwMCBbYWxsX2Nsb2Nrc10KK3NldF9jbG9ja191bmNlcnRhaW50eSAtc2V0dXAgMC4yNTAwIFthbGxfY2xvY2tzXQorc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1ob2xkIDAuMjUwMCBbYWxsX2Nsb2Nrc10KKworc2V0IDo6ZW52KFNZTlRIX1RJTUlOR19ERVJBVEUpIDAuMDUKK3B1dHMgIlxbSU5GT1xdOiBTZXR0aW5nIHRpbWluZyBkZXJhdGUgdG86IFtleHByIHskOjplbnYoU1lOVEhfVElNSU5HX0RFUkFURSkgKiAxMH1dICUiCitzZXRfdGltaW5nX2RlcmF0ZSAtZWFybHkgW2V4cHIgezEtJDo6ZW52KFNZTlRIX1RJTUlOR19ERVJBVEUpfV0KK3NldF90aW1pbmdfZGVyYXRlIC1sYXRlIFtleHByIHsxKyQ6OmVudihTWU5USF9USU1JTkdfREVSQVRFKX1dCisKKyMjIyBDbGtTa2V3IEFkanVzdAorc2V0X2Nhc2VfYW5hbHlzaXMgMCBbZ2V0X3BvcnRzIHtjZmdfY3NrYV9waW5tdXhbMF19XQorc2V0X2Nhc2VfYW5hbHlzaXMgMCBbZ2V0X3BvcnRzIHtjZmdfY3NrYV9waW5tdXhbMV19XQorc2V0X2Nhc2VfYW5hbHlzaXMgMCBbZ2V0X3BvcnRzIHtjZmdfY3NrYV9waW5tdXhbMl19XQorc2V0X2Nhc2VfYW5hbHlzaXMgMCBbZ2V0X3BvcnRzIHtjZmdfY3NrYV9waW5tdXhbM119XQorCisKK3NldF9tYXhfZGVsYXkgICAzLjUgLWZyb20gW2dldF9wb3J0cyB7d2JkX2Nsa19pbnR9XQorc2V0X21heF9kZWxheSAgIDIgLXRvICAgW2dldF9wb3J0cyB7d2JkX2Nsa19waW5tdXh9XQorc2V0X21heF9kZWxheSAzLjUgLWZyb20gd2JkX2Nsa19pbnQgLXRvIHdiZF9jbGtfcGlubXV4CisKK3NldF9pbnB1dF9kZWxheSAyLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtoX3Jlc2V0X259XQorCitzZXRfaW5wdXRfZGVsYXkgLW1heCA0LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtyZWdfYWRkclsqXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA0LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtyZWdfYmVbKl19XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNC4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7bWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7cmVnX2NzfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDQuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge21jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3JlZ193ZGF0YVsqXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA0LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtyZWdfd3J9XQorCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAyLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtyZWdfYWRkclsqXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAyLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtyZWdfYmVbKl19XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7bWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7cmVnX2NzfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDIuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge21jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3JlZ193ZGF0YVsqXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAyLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtyZWdfd3J9XQorCisKK3NldF9vdXRwdXRfZGVsYXkgLW1heCA0LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtyZWdfYWNrfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1heCA0LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtyZWdfcmRhdGFbKl19XQorCitzZXRfb3V0cHV0X2RlbGF5IC1taW4gMi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7bWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7cmVnX2Fja31dCitzZXRfb3V0cHV0X2RlbGF5IC1taW4gMi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7bWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7cmVnX3JkYXRhWypdfV0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgRW52aXJvbm1lbnQKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiAkOjplbnYoU1lOVEhfRFJJVklOR19DRUxMX1BJTikgW2FsbF9pbnB1dHNdCitzZXQgY2FwX2xvYWQgW2V4cHIgJDo6ZW52KFNZTlRIX0NBUF9MT0FEKSAvIDEwMDAuMF0KK3B1dHMgIlxbSU5GT1xdOiBTZXR0aW5nIGxvYWQgdG86ICRjYXBfbG9hZCIKK3NldF9sb2FkICAkY2FwX2xvYWQgW2FsbF9vdXRwdXRzXQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBEZXNpZ24gUnVsZXMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL29wZW5sYW5lL3Bpbm11eC9jb25maWcudGNsIGIvb3BlbmxhbmUvcGlubXV4L2NvbmZpZy50Y2wKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uY2U2YzAwMAotLS0gL2Rldi9udWxsCisrKyBiL29wZW5sYW5lL3Bpbm11eC9jb25maWcudGNsCkBAIC0wLDAgKzEsMTA2IEBACisjIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6ICAyMDIxICwgRGluZXNoIEFubmF5eWEKKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisjIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBNb2RpZmllZCBieSBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorCisjIEdsb2JhbAorIyAtLS0tLS0KKworc2V0IHNjcmlwdF9kaXIgW2ZpbGUgZGlybmFtZSBbZmlsZSBub3JtYWxpemUgW2luZm8gc2NyaXB0XV1dCisjIE5hbWUKKworc2V0IDo6ZW52KERFU0lHTl9OQU1FKSBwaW5tdXgKKworc2V0IDo6ZW52KERFU0lHTl9JU19DT1JFKSAiMCIKK3NldCA6OmVudihGUF9QRE5fQ09SRV9SSU5HKSAiMCIKKworIyBUaW1pbmcgY29uZmlndXJhdGlvbgorc2V0IDo6ZW52KENMT0NLX1BFUklPRCkgIjEwIgorc2V0IDo6ZW52KENMT0NLX1BPUlQpICJtY2xrIgorCitzZXQgOjplbnYoU1lOVEhfTUFYX0ZBTk9VVCkgNAorCisjIyBDVFMgQlVGRkVSCitzZXQgOjplbnYoQ1RTX0NMS19CVUZGRVJfTElTVCkgInNreTEzMF9mZF9zY19oZF9fY2xrYnVmXzQgc2t5MTMwX2ZkX3NjX2hkX19jbGtidWZfOCIKK3NldCA6OmVudihDVFNfU0lOS19DTFVTVEVSSU5HX1NJWkUpICIxNiIKK3NldCA6OmVudihDTE9DS19CVUZGRVJfRkFOT1VUKSAiOCIKKworIyBTb3VyY2VzCisjIC0tLS0tLS0KKworIyBMb2NhbCBzb3VyY2VzICsgbm8ydXNiIHNvdXJjZXMKK3NldCA6OmVudihWRVJJTE9HX0ZJTEVTKSAiXAorICAgICAkc2NyaXB0X2Rpci8uLi8uLi92ZXJpbG9nL3J0bC9jbGtfc2tld19hZGp1c3Qvc3JjL2Nsa19za2V3X2FkanVzdC5ndiBcCisgICAgICRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL3Bpbm11eC9zcmMvcGlubXV4LnN2ICAgICBcCisgICAgICRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL3Bpbm11eC9zcmMvcGlubXV4X3JlZy5zdiBcCisgICAgICRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL3Bpbm11eC9zcmMvZ3Bpb19pbnRyLnN2ICBcCisgICAgICRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL3Bpbm11eC9zcmMvcHdtLnN2ICAgICAgICBcCisgICAgICRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL2xpYi9wdWxzZV9nZW5fdHlwZTEuc3YgICBcCisgICAgICRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL2xpYi9wdWxzZV9nZW5fdHlwZTIuc3YgICBcCisgICAgICRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL2xpYi9zZXJfaW5mXzMyYi5zdiAgICAgICBcCisgICAgICRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL2xpYi9yZWdpc3RlcnMudiIKKworCitzZXQgOjplbnYoU1lOVEhfREVGSU5FUykgW2xpc3QgU1lOVEhFU0lTIF0KK3NldCA6OmVudihTWU5USF9SRUFEX0JMQUNLQk9YX0xJQikgMQorc2V0IDo6ZW52KFNEQ19GSUxFKSAiJHNjcmlwdF9kaXIvYmFzZS5zZGMiCitzZXQgOjplbnYoQkFTRV9TRENfRklMRSkgIiRzY3JpcHRfZGlyL2Jhc2Uuc2RjIgorCitzZXQgOjplbnYoTEVDX0VOQUJMRSkgMAorCitzZXQgOjplbnYoVkREX1BJTikgW2xpc3Qge3ZjY2QxfV0KK3NldCA6OmVudihHTkRfUElOKSBbbGlzdCB7dnNzZDF9XQorCisKKyMgRmxvb3JwbGFubmluZworIyAtLS0tLS0tLS0tLS0tCisKK3NldCA6OmVudihGUF9QSU5fT1JERVJfQ0ZHKSAkOjplbnYoREVTSUdOX0RJUikvcGluX29yZGVyLmNmZworCitzZXQgOjplbnYoRlBfU0laSU5HKSBhYnNvbHV0ZQorc2V0IDo6ZW52KERJRV9BUkVBKSAiMCAwIDU1MCA0NTAiCisKKworIyBJZiB5b3UncmUgZ29pbmcgdG8gdXNlIG11bHRpcGxlIHBvd2VyIGRvbWFpbnMsIHRoZW4ga2VlcCB0aGlzIGRpc2FibGVkLgorc2V0IDo6ZW52KFJVTl9DVkMpIDAKKworI3NldCA6OmVudihQRE5fQ0ZHKSAkc2NyaXB0X2Rpci9wZG4udGNsCisKKworc2V0IDo6ZW52KFBMX1RJTUVfRFJJVkVOKSAxCitzZXQgOjplbnYoUExfVEFSR0VUX0RFTlNJVFkpICIwLjMwIgorc2V0IDo6ZW52KENFTExfUEFEKSAiNCIKKworCisjIGhlbHBzIGluIGFudGVlbmEgZml4CitzZXQgOjplbnYoVVNFX0FSQ19BTlRFTk5BX0NIRUNLKSAiMCIKKworc2V0IDo6ZW52KEZQX0lPX1ZFWFRFTkQpIDQKK3NldCA6OmVudihGUF9JT19IRVhURU5EKSA0CisKK3NldCA6OmVudihGUF9QRE5fVlBJVENIKSAxMDAKK3NldCA6OmVudihGUF9QRE5fSFBJVENIKSAxMDAKK3NldCA6OmVudihGUF9QRE5fVldJRFRIKSA1CitzZXQgOjplbnYoRlBfUEROX0hXSURUSCkgNQorCitzZXQgOjplbnYoR0xCX1JUX01BWExBWUVSKSA1CitzZXQgOjplbnYoR0xCX1JUX01BWF9ESU9ERV9JTlNfSVRFUlMpIDEwCisKK3NldCA6OmVudihESU9ERV9JTlNFUlRJT05fU1RSQVRFR1kpIDQKKworCitzZXQgOjplbnYoUVVJVF9PTl9USU1JTkdfVklPTEFUSU9OUykgIjAiCitzZXQgOjplbnYoUVVJVF9PTl9NQUdJQ19EUkMpICIwIgorc2V0IDo6ZW52KFFVSVRfT05fTFZTX0VSUk9SKSAiMCIKK3NldCA6OmVudihRVUlUX09OX1NMRVdfVklPTEFUSU9OUykgIjAiCmRpZmYgLS1naXQgYS9vcGVubGFuZS9waW5tdXgvaW50ZXJhY3RpdmUudGNsIGIvb3BlbmxhbmUvcGlubXV4L2ludGVyYWN0aXZlLnRjbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDRiNTE3Ci0tLSAvZGV2L251bGwKKysrIGIvb3BlbmxhbmUvcGlubXV4L2ludGVyYWN0aXZlLnRjbApAQCAtMCwwICsxLDIxOSBAQAorIyEvdXNyL2Jpbi90Y2xzaAorIyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIwIEVmYWJsZXNzIENvcnBvcmF0aW9uCisjIENvcHlyaWdodCAyMDIwIEVmYWJsZXNzIENvcnBvcmF0aW9uCisjIENvcHlyaWdodCAyMDIwIFN5bHZhaW4gTXVuYXV0CisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorCitwYWNrYWdlIHJlcXVpcmUgb3BlbmxhbmU7CisKKworcHJvYyBydW5fcGxhY2VtZW50X3N0ZXAge2FyZ3N9IHsKKyAgICAjIHNldCBwZG5kZWZfZGlybmFtZSBbZmlsZSBkaXJuYW1lICQ6OmVudihwZG5fdG1wX2ZpbGVfdGFnKS5kZWZdCisgICAgIyBzZXQgcGRuZGVmIFtsaW5kZXggW2dsb2IgJHBkbmRlZl9kaXJuYW1lLypwZG4qXSAwXQorICAgICMgc2V0X2RlZiAkcGRuZGVmCisgICAgaWYgeyAhIFsgaW5mbyBleGlzdHMgOjplbnYoUExBQ0VNRU5UX0NVUlJFTlRfREVGKSBdIH0geworICAgICAgICBzZXQgOjplbnYoUExBQ0VNRU5UX0NVUlJFTlRfREVGKSAkOjplbnYoQ1VSUkVOVF9ERUYpCisgICAgfSBlbHNlIHsKKyAgICAgICAgc2V0IDo6ZW52KENVUlJFTlRfREVGKSAkOjplbnYoUExBQ0VNRU5UX0NVUlJFTlRfREVGKQorICAgIH0KKworICAgIHJ1bl9wbGFjZW1lbnQKK30KKworcHJvYyBydW5fY3RzX3N0ZXAge2FyZ3N9IHsKKyAgICAjIHNldF9kZWYgJDo6ZW52KG9wZW5kcF9yZXN1bHRfZmlsZV90YWcpLmRlZgorICAgIGlmIHsgISBbIGluZm8gZXhpc3RzIDo6ZW52KENUU19DVVJSRU5UX0RFRikgXSB9IHsKKyAgICAgICAgc2V0IDo6ZW52KENUU19DVVJSRU5UX0RFRikgJDo6ZW52KENVUlJFTlRfREVGKQorICAgIH0gZWxzZSB7CisgICAgICAgIHNldCA6OmVudihDVVJSRU5UX0RFRikgJDo6ZW52KENUU19DVVJSRU5UX0RFRikKKyAgICB9CisKKyAgICBydW5fY3RzCisgICAgcnVuX3Jlc2l6ZXJfdGltaW5nCit9CisKK3Byb2MgcnVuX3JvdXRpbmdfc3RlcCB7YXJnc30geworICAgICMgc2V0IHJlc2l6ZXJkZWZfZGlybmFtZSBbZmlsZSBkaXJuYW1lICQ6OmVudihyZXNpemVyX3RtcF9maWxlX3RhZylfdGltaW5nLmRlZl0KKyAgICAjIHNldCByZXNpemVyZGVmIFtsaW5kZXggW2dsb2IgJHJlc2l6ZXJkZWZfZGlybmFtZS8qcmVzaXplcipdIDBdCisgICAgIyBzZXRfZGVmICRyZXNpemVyZGVmCisgICAgaWYgeyAhIFsgaW5mbyBleGlzdHMgOjplbnYoUk9VVElOR19DVVJSRU5UX0RFRikgXSB9IHsKKyAgICAgICAgc2V0IDo6ZW52KFJPVVRJTkdfQ1VSUkVOVF9ERUYpICQ6OmVudihDVVJSRU5UX0RFRikKKyAgICB9IGVsc2UgeworICAgICAgICBzZXQgOjplbnYoQ1VSUkVOVF9ERUYpICQ6OmVudihST1VUSU5HX0NVUlJFTlRfREVGKQorICAgIH0KKyAgICBydW5fcm91dGluZworfQorCitwcm9jIHJ1bl9kaW9kZV9pbnNlcnRpb25fMl81X3N0ZXAge2FyZ3N9IHsKKyAgICAjIHNldF9kZWYgJDo6ZW52KHRyaXRvblJvdXRlX3Jlc3VsdF9maWxlX3RhZykuZGVmCisgICAgaWYgeyAhIFsgaW5mbyBleGlzdHMgOjplbnYoRElPREVfSU5TRVJUSU9OX0NVUlJFTlRfREVGKSBdIH0geworICAgICAgICBzZXQgOjplbnYoRElPREVfSU5TRVJUSU9OX0NVUlJFTlRfREVGKSAkOjplbnYoQ1VSUkVOVF9ERUYpCisgICAgfSBlbHNlIHsKKyAgICAgICAgc2V0IDo6ZW52KENVUlJFTlRfREVGKSAkOjplbnYoRElPREVfSU5TRVJUSU9OX0NVUlJFTlRfREVGKQorICAgIH0KKwlpZiB7ICgkOjplbnYoRElPREVfSU5TRVJUSU9OX1NUUkFURUdZKSA9PSAyKSB8fCAoJDo6ZW52KERJT0RFX0lOU0VSVElPTl9TVFJBVEVHWSkgPT0gNSkgfSB7CisJCXJ1bl9hbnRlbm5hX2NoZWNrCisJCWhlYWxfYW50ZW5uYV92aW9sYXRvcnM7ICMgbW9kaWZpZXMgdGhlIHJvdXRlZCBERUYKKwl9CisKK30KKworcHJvYyBydW5fcG93ZXJfcGluc19pbnNlcnRpb25fc3RlcCB7YXJnc30geworICAgICMgc2V0X2RlZiAkOjplbnYodHJpdG9uUm91dGVfcmVzdWx0X2ZpbGVfdGFnKS5kZWYKKyAgICBpZiB7ICEgWyBpbmZvIGV4aXN0cyA6OmVudihQT1dFUl9QSU5TX0lOU0VSVElPTl9DVVJSRU5UX0RFRikgXSB9IHsKKyAgICAgICAgc2V0IDo6ZW52KFBPV0VSX1BJTlNfSU5TRVJUSU9OX0NVUlJFTlRfREVGKSAkOjplbnYoQ1VSUkVOVF9ERUYpCisgICAgfSBlbHNlIHsKKyAgICAgICAgc2V0IDo6ZW52KENVUlJFTlRfREVGKSAkOjplbnYoUE9XRVJfUElOU19JTlNFUlRJT05fQ1VSUkVOVF9ERUYpCisgICAgfQorICAgIGlmIHsgJDo6ZW52KExWU19JTlNFUlRfUE9XRVJfUElOUykgfSB7CisJCXdyaXRlX3Bvd2VyZWRfdmVyaWxvZworCQlzZXRfbmV0bGlzdCAkOjplbnYobHZzX3Jlc3VsdF9maWxlX3RhZykucG93ZXJlZC52CisgICAgfQorCit9CisKK3Byb2MgcnVuX2x2c19zdGVwIHt7IGx2c19lbmFibGVkIDEgfX0geworICAgICMgc2V0X2RlZiAkOjplbnYodHJpdG9uUm91dGVfcmVzdWx0X2ZpbGVfdGFnKS5kZWYKKyAgICBpZiB7ICEgWyBpbmZvIGV4aXN0cyA6OmVudihMVlNfQ1VSUkVOVF9ERUYpIF0gfSB7CisgICAgICAgIHNldCA6OmVudihMVlNfQ1VSUkVOVF9ERUYpICQ6OmVudihDVVJSRU5UX0RFRikKKyAgICB9IGVsc2UgeworICAgICAgICBzZXQgOjplbnYoQ1VSUkVOVF9ERUYpICQ6OmVudihMVlNfQ1VSUkVOVF9ERUYpCisgICAgfQorCWlmIHsgJGx2c19lbmFibGVkIH0geworCQlydW5fbWFnaWNfc3BpY2VfZXhwb3J0CisJCXJ1bl9sdnM7ICMgcmVxdWlyZXMgcnVuX21hZ2ljX3NwaWNlX2V4cG9ydAorCX0KKworfQorCitwcm9jIHJ1bl9kcmNfc3RlcCB7eyBkcmNfZW5hYmxlZCAxIH19IHsKKyAgICBpZiB7ICEgWyBpbmZvIGV4aXN0cyA6OmVudihEUkNfQ1VSUkVOVF9ERUYpIF0gfSB7CisgICAgICAgIHNldCA6OmVudihEUkNfQ1VSUkVOVF9ERUYpICQ6OmVudihDVVJSRU5UX0RFRikKKyAgICB9IGVsc2UgeworICAgICAgICBzZXQgOjplbnYoQ1VSUkVOVF9ERUYpICQ6OmVudihEUkNfQ1VSUkVOVF9ERUYpCisgICAgfQorCWlmIHsgJGRyY19lbmFibGVkIH0geworCQlydW5fbWFnaWNfZHJjCisJCXJ1bl9rbGF5b3V0X2RyYworCX0KK30KKworcHJvYyBydW5fYW50ZW5uYV9jaGVja19zdGVwIHt7IGFudGVubmFfY2hlY2tfZW5hYmxlZCAxIH19IHsKKyAgICBpZiB7ICEgWyBpbmZvIGV4aXN0cyA6OmVudihBTlRFTk5BX0NIRUNLX0NVUlJFTlRfREVGKSBdIH0geworICAgICAgICBzZXQgOjplbnYoQU5URU5OQV9DSEVDS19DVVJSRU5UX0RFRikgJDo6ZW52KENVUlJFTlRfREVGKQorICAgIH0gZWxzZSB7CisgICAgICAgIHNldCA6OmVudihDVVJSRU5UX0RFRikgJDo6ZW52KEFOVEVOTkFfQ0hFQ0tfQ1VSUkVOVF9ERUYpCisgICAgfQorCWlmIHsgJGFudGVubmFfY2hlY2tfZW5hYmxlZCB9IHsKKwkJcnVuX2FudGVubmFfY2hlY2sKKwl9Cit9CisKK3Byb2MgcnVuX2Zsb3cge2FyZ3N9IHsKKyAgICAgICBzZXQgc2NyaXB0X2RpciBbZmlsZSBkaXJuYW1lIFtmaWxlIG5vcm1hbGl6ZSBbaW5mbyBzY3JpcHRdXV0KKworCQlzZXQgb3B0aW9ucyB7CisJCXstZGVzaWduIHJlcXVpcmVkfQorCQl7LXNhdmVfcGF0aCBvcHRpb25hbH0KKwkJey1ub19sdnMgb3B0aW9uYWx9CisJICAgIHstbm9fZHJjIG9wdGlvbmFsfQorCSAgICB7LW5vX2FudGVubmFjaGVjayBvcHRpb25hbH0KKwl9CisJc2V0IGZsYWdzIHstc2F2ZX0KKwlwYXJzZV9rZXlfYXJncyAicnVuX2Zsb3ciIGFyZ3MgYXJnX3ZhbHVlcyAkb3B0aW9ucyBmbGFnc19tYXAgJGZsYWdzIC1ub19jb25zdW1lCisKKwlwcmVwIHsqfSRhcmdzCisKKyAgICAgICAgc2V0IExWU19FTkFCTEVEIDEKKyAgICAgICAgc2V0IERSQ19FTkFCTEVEIDAKKyAgICAgICAgc2V0IEFOVEVOTkFDSEVDS19FTkFCTEVEIDEKKworICAgICAgICBzZXQgc3RlcHMgW2RpY3QgY3JlYXRlICJzeW50aGVzaXMiIHtydW5fc3ludGhlc2lzICIiIH0gXAorICAgICAgICAgICAgICAgICJmbG9vcnBsYW4iIHtydW5fZmxvb3JwbGFuICIifSBcCisgICAgICAgICAgICAgICAgInBsYWNlbWVudCIge3J1bl9wbGFjZW1lbnRfc3RlcCAiIn0gXAorICAgICAgICAgICAgICAgICJjdHMiIHtydW5fY3RzX3N0ZXAgIiJ9IFwKKyAgICAgICAgICAgICAgICAicm91dGluZyIge3J1bl9yb3V0aW5nX3N0ZXAgIiJ9XAorICAgICAgICAgICAgICAgICJkaW9kZV9pbnNlcnRpb24iIHtydW5fZGlvZGVfaW5zZXJ0aW9uXzJfNV9zdGVwICIifSBcCisgICAgICAgICAgICAgICAgInBvd2VyX3BpbnNfaW5zZXJ0aW9uIiB7cnVuX3Bvd2VyX3BpbnNfaW5zZXJ0aW9uX3N0ZXAgIiJ9IFwKKyAgICAgICAgICAgICAgICAiZ2RzX21hZ2ljIiB7cnVuX21hZ2ljICIifSBcCisgICAgICAgICAgICAgICAgImdkc19kcmNfa2xheW91dCIge3J1bl9rbGF5b3V0ICIifSBcCisgICAgICAgICAgICAgICAgImdkc194b3Jfa2xheW91dCIge3J1bl9rbGF5b3V0X2dkc194b3IgIiJ9IFwKKyAgICAgICAgICAgICAgICAibHZzIiAicnVuX2x2c19zdGVwICRMVlNfRU5BQkxFRCIgXAorICAgICAgICAgICAgICAgICJkcmMiICJydW5fZHJjX3N0ZXAgJERSQ19FTkFCTEVEIiBcCisgICAgICAgICAgICAgICAgImFudGVubmFfY2hlY2siICJydW5fYW50ZW5uYV9jaGVja19zdGVwICRBTlRFTk5BQ0hFQ0tfRU5BQkxFRCIgXAorICAgICAgICAgICAgICAgICJjdmMiIHtydW5fbGVmX2N2Y30KKyAgICAgICAgXQorCisgICAgICAgc2V0X2lmX3Vuc2V0IGFyZ192YWx1ZXMoLXRvKSAiY3ZjIjsKKworICAgICAgIGlmIHsgIFtpbmZvIGV4aXN0cyA6OmVudihDVVJSRU5UX1NURVApIF0gfSB7CisgICAgICAgICAgIHB1dHMgIlxbSU5GT1xdOlBpY2tpbmcgdXAgd2hlcmUgbGFzdCBleGVjdXRpb24gbGVmdCBvZmYiCisgICAgICAgICAgIHB1dHMgW2Zvcm1hdCAiXFtJTkZPXF06Q3VycmVudCBzdGFnZSBpcyAlcyAiICQ6OmVudihDVVJSRU5UX1NURVApXQorICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgIHNldCA6OmVudihDVVJSRU5UX1NURVApICJzeW50aGVzaXMiOworICAgICAgIH0KKyAgICAgICBzZXRfaWZfdW5zZXQgYXJnX3ZhbHVlcygtZnJvbSkgJDo6ZW52KENVUlJFTlRfU1RFUCk7CisgICAgICAgc2V0IGV4ZSAwOworICAgICAgIGRpY3QgZm9yIHtzdGVwX25hbWUgc3RlcF9leGV9ICRzdGVwcyB7CisgICAgICAgICAgIGlmIHsgWyBzdHJpbmcgZXF1YWwgJGFyZ192YWx1ZXMoLWZyb20pICRzdGVwX25hbWUgXSB9IHsKKyAgICAgICAgICAgICAgIHNldCBleGUgMTsKKyAgICAgICAgICAgfQorCisgICAgICAgICAgIGlmIHsgJGV4ZSB9IHsKKyAgICAgICAgICAgICAgICMgRm9yIHdoZW4gaXQgZmFpbHMKKyAgICAgICAgICAgICAgIHNldCA6OmVudihDVVJSRU5UX1NURVApICRzdGVwX25hbWUKKyAgICAgICAgICAgICAgIFtsaW5kZXggJHN0ZXBfZXhlIDBdIFtsaW5kZXggJHN0ZXBfZXhlIDFdIDsKKyAgICAgICAgICAgfQorCisgICAgICAgICAgIGlmIHsgWyBzdHJpbmcgZXF1YWwgJGFyZ192YWx1ZXMoLXRvKSAkc3RlcF9uYW1lIF0gfSB7CisgICAgICAgICAgICAgICBzZXQgZXhlIDA6CisgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgfQorCisgICAgICAgfQorCisgICAgICAgIyBmb3Igd2hlbiBpdCByZXN1bWVzCisgICAgICAgc2V0IHN0ZXBzX2FzX2xpc3QgW2RpY3Qga2V5cyAkc3RlcHNdCisgICAgICAgc2V0IG5leHRfaWR4IFtleHByIFtsc2VhcmNoICRzdGVwc19hc19saXN0ICQ6OmVudihDVVJSRU5UX1NURVApXSArIDFdCisgICAgICAgc2V0IDo6ZW52KENVUlJFTlRfU1RFUCkgW2xpbmRleCAkc3RlcHNfYXNfbGlzdCAkbmV4dF9pZHhdCisKKwlpZiB7ICBbaW5mbyBleGlzdHMgZmxhZ3NfbWFwKC1zYXZlKSBdIH0geworCQlpZiB7ICEgW2luZm8gZXhpc3RzIGFyZ192YWx1ZXMoLXNhdmVfcGF0aCldIH0geworCQkJc2V0IGFyZ192YWx1ZXMoLXNhdmVfcGF0aCkgIiIKKwkJfQorCQlzYXZlX3ZpZXdzIAktbGVmX3BhdGggJDo6ZW52KG1hZ2ljX3Jlc3VsdF9maWxlX3RhZykubGVmIFwKKwkJCS1kZWZfcGF0aCAkOjplbnYoQ1VSUkVOVF9ERUYpIFwKKwkJCS1nZHNfcGF0aCAkOjplbnYobWFnaWNfcmVzdWx0X2ZpbGVfdGFnKS5nZHMgXAorCQkJLW1hZ19wYXRoICQ6OmVudihtYWdpY19yZXN1bHRfZmlsZV90YWcpLm1hZyBcCisJCQktbWFnbGVmX3BhdGggJDo6ZW52KG1hZ2ljX3Jlc3VsdF9maWxlX3RhZykubGVmLm1hZyBcCisJCQktc3BpY2VfcGF0aCAkOjplbnYobWFnaWNfcmVzdWx0X2ZpbGVfdGFnKS5zcGljZSBcCisJCQktc3BlZl9wYXRoICQ6OmVudihDVVJSRU5UX1NQRUYpIFwKKwkJCS12ZXJpbG9nX3BhdGggJDo6ZW52KENVUlJFTlRfTkVUTElTVCkgXAorCQkJLXNhdmVfcGF0aCAkYXJnX3ZhbHVlcygtc2F2ZV9wYXRoKSBcCisJCQktdGFnICQ6OmVudihSVU5fVEFHKQorCX0KKworCisJY2FsY190b3RhbF9ydW50aW1lCisJc2F2ZV9zdGF0ZQorCWdlbmVyYXRlX2ZpbmFsX3N1bW1hcnlfcmVwb3J0CisJCisJY2hlY2tfdGltaW5nX3Zpb2xhdGlvbnMKKworCXB1dHNfc3VjY2VzcyAiRmxvdyBDb21wbGV0ZWQgV2l0aG91dCBGYXRhbCBFcnJvcnMuIgorCit9CisKK3J1bl9mbG93IHsqfSRhcmd2CmRpZmYgLS1naXQgYS9vcGVubGFuZS9waW5tdXgvcGluX29yZGVyLmNmZyBiL29wZW5sYW5lL3Bpbm11eC9waW5fb3JkZXIuY2ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmZGY1MGYKLS0tIC9kZXYvbnVsbAorKysgYi9vcGVubGFuZS9waW5tdXgvcGluX29yZGVyLmNmZwpAQCAtMCwwICsxLDM4MyBAQAorI0JVU19TT1JUCisjTUFOVUFMX1BMQUNFCisKKyNTCitoX3Jlc2V0X24gICAgICAgICAgICAgMDAwIDAgMgordXNlcl9pcnFcWzBcXQordXNlcl9pcnFcWzFcXQordXNlcl9pcnFcWzJcXQordXNiX2RwX28gCit1c2JfZG5fbyAKK3VzYl9vZW4gCit1c2JfZHBfaSAKK3VzYl9kbl9pIAordWFydF90eGQgCit1YXJ0X3J4ZAoraTJjbV9jbGtfbyAKK2kyY21fY2xrX2kgCitpMmNtX2Nsa19vZW4gCitpMmNtX2RhdGFfb2VuIAoraTJjbV9kYXRhX28gCitpMmNtX2RhdGFfaSAKK3NwaW1fc2NrIAorc3BpbV9zcyAKK3NwaW1fbWlzbworc3BpbV9tb3NpCitwdWxzZTFtX21jbGsKK2kyY21faW50cgordXNiX2ludHIKK3VhcnRtX3J4ZAordWFydG1fdHhkCisKK3Bpbm11eF9kZWJ1Z1xbMFxdIDAxMDAgMCAgMgorcGlubXV4X2RlYnVnXFsxXF0KK3Bpbm11eF9kZWJ1Z1xbMlxdCitwaW5tdXhfZGVidWdcWzNcXQorcGlubXV4X2RlYnVnXFs0XF0KK3Bpbm11eF9kZWJ1Z1xbNVxdCitwaW5tdXhfZGVidWdcWzZcXQorcGlubXV4X2RlYnVnXFs3XF0KK3Bpbm11eF9kZWJ1Z1xbOFxdCitwaW5tdXhfZGVidWdcWzlcXQorcGlubXV4X2RlYnVnXFsxMFxdCitwaW5tdXhfZGVidWdcWzExXF0KK3Bpbm11eF9kZWJ1Z1xbMTJcXQorcGlubXV4X2RlYnVnXFsxM1xdCitwaW5tdXhfZGVidWdcWzE0XF0KK3Bpbm11eF9kZWJ1Z1xbMTVcXQorcGlubXV4X2RlYnVnXFsxNlxdCitwaW5tdXhfZGVidWdcWzE3XF0KK3Bpbm11eF9kZWJ1Z1xbMThcXQorcGlubXV4X2RlYnVnXFsxOVxdCitwaW5tdXhfZGVidWdcWzIwXF0KK3Bpbm11eF9kZWJ1Z1xbMjFcXQorcGlubXV4X2RlYnVnXFsyMlxdCitwaW5tdXhfZGVidWdcWzIzXF0KK3Bpbm11eF9kZWJ1Z1xbMjRcXQorcGlubXV4X2RlYnVnXFsyNVxdCitwaW5tdXhfZGVidWdcWzI2XF0KK3Bpbm11eF9kZWJ1Z1xbMjdcXQorcGlubXV4X2RlYnVnXFsyOFxdCitwaW5tdXhfZGVidWdcWzI5XF0KK3Bpbm11eF9kZWJ1Z1xbMzBcXQorcGlubXV4X2RlYnVnXFszMVxdCisKKyNXCitiaXN0X2Vycm9yX2NudDNcWzNcXSAgICAwMDAgMCAyCitiaXN0X2Vycm9yX2NudDNcWzJcXQorYmlzdF9lcnJvcl9jbnQzXFsxXF0KK2Jpc3RfZXJyb3JfY250M1xbMFxdCitiaXN0X2NvcnJlY3RcWzNcXQorYmlzdF9lcnJvclxbM1xdCisKK2Jpc3RfZXJyb3JfY250MlxbM1xdICAgCitiaXN0X2Vycm9yX2NudDJcWzJcXQorYmlzdF9lcnJvcl9jbnQyXFsxXF0KK2Jpc3RfZXJyb3JfY250MlxbMFxdCitiaXN0X2NvcnJlY3RcWzJcXQorYmlzdF9lcnJvclxbMlxdCisKK2Jpc3RfZXJyb3JfY250MVxbM1xdICAgCitiaXN0X2Vycm9yX2NudDFcWzJcXQorYmlzdF9lcnJvcl9jbnQxXFsxXF0KK2Jpc3RfZXJyb3JfY250MVxbMFxdCitiaXN0X2NvcnJlY3RcWzFcXQorYmlzdF9lcnJvclxbMVxdCisKK2Jpc3RfZXJyb3JfY250MFxbM1xdCitiaXN0X2Vycm9yX2NudDBcWzJcXQorYmlzdF9lcnJvcl9jbnQwXFsxXF0KK2Jpc3RfZXJyb3JfY250MFxbMFxdCitiaXN0X2NvcnJlY3RcWzBcXQorYmlzdF9lcnJvclxbMFxdCitiaXN0X2RvbmUKK2Jpc3Rfc2RvCitiaXN0X3NoaWZ0CitiaXN0X3NkaQorYmlzdF9sb2FkCitiaXN0X3J1bgorYmlzdF9lbgorCitzb2Z0X2lycSAgICAgICAgICAgIAoraXJxX2xpbmVzXFsxNVxdICAgICAKK2lycV9saW5lc1xbMTRcXSAgICAgCitpcnFfbGluZXNcWzEzXF0gICAgIAoraXJxX2xpbmVzXFsxMlxdICAgICAKK2lycV9saW5lc1xbMTFcXSAgICAgCitpcnFfbGluZXNcWzEwXF0gICAgIAoraXJxX2xpbmVzXFs5XF0gICAgIAoraXJxX2xpbmVzXFs4XF0gICAgIAoraXJxX2xpbmVzXFs3XF0gICAgIAoraXJxX2xpbmVzXFs2XF0gICAgIAoraXJxX2xpbmVzXFs1XF0gICAgIAoraXJxX2xpbmVzXFs0XF0gICAgIAoraXJxX2xpbmVzXFszXF0gICAgIAoraXJxX2xpbmVzXFsyXF0gICAgIAoraXJxX2xpbmVzXFsxXF0gICAgIAoraXJxX2xpbmVzXFswXF0gICAgIAorZnVzZV9taGFydGlkXFszMVxdIAorZnVzZV9taGFydGlkXFszMFxdIAorZnVzZV9taGFydGlkXFsyOVxdIAorZnVzZV9taGFydGlkXFsyOFxdIAorZnVzZV9taGFydGlkXFsyN1xdIAorZnVzZV9taGFydGlkXFsyNlxdIAorZnVzZV9taGFydGlkXFsyNVxdIAorZnVzZV9taGFydGlkXFsyNFxdIAorZnVzZV9taGFydGlkXFsyM1xdIAorZnVzZV9taGFydGlkXFsyMlxdIAorZnVzZV9taGFydGlkXFsyMVxdIAorZnVzZV9taGFydGlkXFsyMFxdIAorZnVzZV9taGFydGlkXFsxOVxdIAorZnVzZV9taGFydGlkXFsxOFxdIAorZnVzZV9taGFydGlkXFsxN1xdIAorZnVzZV9taGFydGlkXFsxNlxdIAorZnVzZV9taGFydGlkXFsxNVxdIAorZnVzZV9taGFydGlkXFsxNFxdIAorZnVzZV9taGFydGlkXFsxM1xdIAorZnVzZV9taGFydGlkXFsxMlxdIAorZnVzZV9taGFydGlkXFsxMVxdIAorZnVzZV9taGFydGlkXFsxMFxdIAorZnVzZV9taGFydGlkXFs5XF0gCitmdXNlX21oYXJ0aWRcWzhcXSAKK2Z1c2VfbWhhcnRpZFxbN1xdIAorZnVzZV9taGFydGlkXFs2XF0gCitmdXNlX21oYXJ0aWRcWzVcXSAKK2Z1c2VfbWhhcnRpZFxbNFxdIAorZnVzZV9taGFydGlkXFszXF0gCitmdXNlX21oYXJ0aWRcWzJcXSAKK2Z1c2VfbWhhcnRpZFxbMVxdIAorZnVzZV9taGFydGlkXFswXF0gCisKK2NmZ19jc2thX3Bpbm11eFxbM1xdICAKK2NmZ19jc2thX3Bpbm11eFxbMlxdCitjZmdfY3NrYV9waW5tdXhcWzFcXQorY2ZnX2Nza2FfcGlubXV4XFswXF0KK3diZF9jbGtfaW50ICAgICAgICAgICAgIAord2JkX2Nsa19waW5tdXgKK21jbGsgICAgICAgICAgICAKKworCisKK3JlZ19jcyAgICAgICAgICAgIDIwMCAwCityZWdfd3IgICAgICAgICAgIAorcmVnX2FkZHJcWzdcXSAgICAKK3JlZ19hZGRyXFs2XF0gICAgCityZWdfYWRkclxbNVxdICAgIAorcmVnX2FkZHJcWzRcXSAgICAKK3JlZ19hZGRyXFszXF0gICAgCityZWdfYWRkclxbMlxdICAgIAorcmVnX2FkZHJcWzFcXSAgICAKK3JlZ19hZGRyXFswXF0gICAgCityZWdfYmVcWzNcXSAgICAKK3JlZ19iZVxbMlxdICAgIAorcmVnX2JlXFsxXF0gICAgCityZWdfYmVcWzBcXSAgICAKK3JlZ193ZGF0YVxbMzFcXSAgIAorcmVnX3dkYXRhXFszMFxdICAgCityZWdfd2RhdGFcWzI5XF0gICAKK3JlZ193ZGF0YVxbMjhcXSAgIAorcmVnX3dkYXRhXFsyN1xdICAgCityZWdfd2RhdGFcWzI2XF0gICAKK3JlZ193ZGF0YVxbMjVcXSAgIAorcmVnX3dkYXRhXFsyNFxdICAgCityZWdfd2RhdGFcWzIzXF0gICAKK3JlZ193ZGF0YVxbMjJcXSAgIAorcmVnX3dkYXRhXFsyMVxdICAgCityZWdfd2RhdGFcWzIwXF0gICAKK3JlZ193ZGF0YVxbMTlcXSAgIAorcmVnX3dkYXRhXFsxOFxdICAgCityZWdfd2RhdGFcWzE3XF0gICAKK3JlZ193ZGF0YVxbMTZcXSAgIAorcmVnX3dkYXRhXFsxNVxdICAgCityZWdfd2RhdGFcWzE0XF0gICAKK3JlZ193ZGF0YVxbMTNcXSAgIAorcmVnX3dkYXRhXFsxMlxdICAKK3JlZ193ZGF0YVxbMTFcXSAgCityZWdfd2RhdGFcWzEwXF0gIAorcmVnX3dkYXRhXFs5XF0gICAKK3JlZ193ZGF0YVxbOFxdICAgCityZWdfd2RhdGFcWzdcXSAgIAorcmVnX3dkYXRhXFs2XF0gICAKK3JlZ193ZGF0YVxbNVxdICAgCityZWdfd2RhdGFcWzRcXSAgIAorcmVnX3dkYXRhXFszXF0gICAKK3JlZ193ZGF0YVxbMlxdICAgCityZWdfd2RhdGFcWzFcXSAgIAorcmVnX3dkYXRhXFswXF0gICAKK3JlZ19yZGF0YVxbMzFcXSAgCityZWdfcmRhdGFcWzMwXF0gIAorcmVnX3JkYXRhXFsyOVxdICAKK3JlZ19yZGF0YVxbMjhcXSAgCityZWdfcmRhdGFcWzI3XF0gIAorcmVnX3JkYXRhXFsyNlxdICAKK3JlZ19yZGF0YVxbMjVcXSAgCityZWdfcmRhdGFcWzI0XF0gIAorcmVnX3JkYXRhXFsyM1xdICAKK3JlZ19yZGF0YVxbMjJcXSAgCityZWdfcmRhdGFcWzIxXF0gIAorcmVnX3JkYXRhXFsyMFxdICAKK3JlZ19yZGF0YVxbMTlcXSAgCityZWdfcmRhdGFcWzE4XF0gIAorcmVnX3JkYXRhXFsxN1xdICAKK3JlZ19yZGF0YVxbMTZcXSAgCityZWdfcmRhdGFcWzE1XF0gIAorcmVnX3JkYXRhXFsxNFxdICAKK3JlZ19yZGF0YVxbMTNcXSAgCityZWdfcmRhdGFcWzEyXF0gIAorcmVnX3JkYXRhXFsxMVxdICAKK3JlZ19yZGF0YVxbMTBcXSAgCityZWdfcmRhdGFcWzlcXSAgCityZWdfcmRhdGFcWzhcXSAgCityZWdfcmRhdGFcWzdcXSAgCityZWdfcmRhdGFcWzZcXSAgCityZWdfcmRhdGFcWzVcXSAgCityZWdfcmRhdGFcWzRcXSAgCityZWdfcmRhdGFcWzNcXSAgCityZWdfcmRhdGFcWzJcXSAgCityZWdfcmRhdGFcWzFcXSAgCityZWdfcmRhdGFcWzBcXSAgCityZWdfYWNrICAgICAgIAorCisKKyNOCitkaWdpdGFsX2lvX29lblxbMzdcXSAgMDAwIDAgMgorZGlnaXRhbF9pb19vdXRcWzM3XF0KK2RpZ2l0YWxfaW9faW5cWzM3XF0KK2RpZ2l0YWxfaW9fb2VuXFszNlxdCitkaWdpdGFsX2lvX291dFxbMzZcXQorZGlnaXRhbF9pb19pblxbMzZcXQorZGlnaXRhbF9pb19vZW5cWzM1XF0KK2RpZ2l0YWxfaW9fb3V0XFszNVxdCitkaWdpdGFsX2lvX2luXFszNVxdCitkaWdpdGFsX2lvX29lblxbMzRcXQorZGlnaXRhbF9pb19vdXRcWzM0XF0KK2RpZ2l0YWxfaW9faW5cWzM0XF0KK2RpZ2l0YWxfaW9fb2VuXFszM1xdCitkaWdpdGFsX2lvX291dFxbMzNcXQorZGlnaXRhbF9pb19pblxbMzNcXQorZGlnaXRhbF9pb19vZW5cWzMyXF0KK2RpZ2l0YWxfaW9fb3V0XFszMlxdCitkaWdpdGFsX2lvX2luXFszMlxdCitkaWdpdGFsX2lvX29lblxbMzFcXQorZGlnaXRhbF9pb19vdXRcWzMxXF0KK2RpZ2l0YWxfaW9faW5cWzMxXF0KK2RpZ2l0YWxfaW9fb2VuXFszMFxdCitkaWdpdGFsX2lvX291dFxbMzBcXQorZGlnaXRhbF9pb19pblxbMzBcXQorZGlnaXRhbF9pb19vZW5cWzI5XF0KK2RpZ2l0YWxfaW9fb3V0XFsyOVxdCitkaWdpdGFsX2lvX2luXFsyOVxdCitkaWdpdGFsX2lvX29lblxbMjhcXQorZGlnaXRhbF9pb19vdXRcWzI4XF0KKworCisKK2RpZ2l0YWxfaW9faW5cWzI4XF0gIDAzMDAgMCAyCitkaWdpdGFsX2lvX29lblxbMjdcXQorZGlnaXRhbF9pb19vdXRcWzI3XF0KK2RpZ2l0YWxfaW9faW5cWzI3XF0KK2RpZ2l0YWxfaW9fb2VuXFsyNlxdCitkaWdpdGFsX2lvX291dFxbMjZcXQorZGlnaXRhbF9pb19pblxbMjZcXQorZGlnaXRhbF9pb19vZW5cWzI1XF0KK2RpZ2l0YWxfaW9fb3V0XFsyNVxdCitkaWdpdGFsX2lvX2luXFsyNVxdCitkaWdpdGFsX2lvX29lblxbMjRcXQorZGlnaXRhbF9pb19vdXRcWzI0XF0KK2RpZ2l0YWxfaW9faW5cWzI0XF0KKworc2ZsYXNoX29lblxbMFxdICAgIDM1MCAwIDIKK3NmbGFzaF9vZW5cWzFcXQorc2ZsYXNoX29lblxbMlxdCitzZmxhc2hfb2VuXFszXF0KK3NmbGFzaF9zc1xbMFxdCitzZmxhc2hfc3NcWzFcXQorc2ZsYXNoX3NzXFsyXF0KK3NmbGFzaF9zc1xbM1xdCitzZmxhc2hfc2NrICAgCitzZmxhc2hfZG9cWzBcXQorc2ZsYXNoX2RvXFsxXF0KK3NmbGFzaF9kb1xbMlxdCitzZmxhc2hfZG9cWzNcXQorc2ZsYXNoX2RpXFswXF0gICAgICAKK3NmbGFzaF9kaVxbMVxdICAgICAgCitzZmxhc2hfZGlcWzJcXSAgICAgIAorc2ZsYXNoX2RpXFszXF0gICAgICAKKworZGlnaXRhbF9pb19pblxbMjNcXSAgICAgNDAwICAwCitkaWdpdGFsX2lvX291dFxbMjNcXQorZGlnaXRhbF9pb19vZW5cWzIzXF0KK2RpZ2l0YWxfaW9faW5cWzIyXF0gICAgIAorZGlnaXRhbF9pb19vdXRcWzIyXF0KK2RpZ2l0YWxfaW9fb2VuXFsyMlxdCitkaWdpdGFsX2lvX2luXFsyMVxdICAgICAKK2RpZ2l0YWxfaW9fb3V0XFsyMVxdCitkaWdpdGFsX2lvX29lblxbMjFcXQorZGlnaXRhbF9pb19pblxbMjBcXSAgICAgCitkaWdpdGFsX2lvX291dFxbMjBcXQorZGlnaXRhbF9pb19vZW5cWzIwXF0KK2RpZ2l0YWxfaW9faW5cWzE5XF0gICAgIAorZGlnaXRhbF9pb19vdXRcWzE5XF0KK2RpZ2l0YWxfaW9fb2VuXFsxOVxdCitkaWdpdGFsX2lvX2luXFsxOFxdICAgICAKK2RpZ2l0YWxfaW9fb3V0XFsxOFxdCitkaWdpdGFsX2lvX29lblxbMThcXQorZGlnaXRhbF9pb19pblxbMTdcXSAgICAgCitkaWdpdGFsX2lvX291dFxbMTdcXQorZGlnaXRhbF9pb19vZW5cWzE3XF0KK2RpZ2l0YWxfaW9faW5cWzE2XF0gICAgIAorZGlnaXRhbF9pb19vdXRcWzE2XF0KK2RpZ2l0YWxfaW9fb2VuXFsxNlxdCitkaWdpdGFsX2lvX2luXFsxNVxdICAgICAKK2RpZ2l0YWxfaW9fb3V0XFsxNVxdCitkaWdpdGFsX2lvX29lblxbMTVcXQorCisKKyNFCitkaWdpdGFsX2lvX2luXFswXF0gICAwMDAwIDAgNAorZGlnaXRhbF9pb19vdXRcWzBcXQorZGlnaXRhbF9pb19vZW5cWzBcXQorZGlnaXRhbF9pb19pblxbMVxdCitkaWdpdGFsX2lvX291dFxbMVxdCitkaWdpdGFsX2lvX29lblxbMVxdCitkaWdpdGFsX2lvX2luXFsyXF0KK2RpZ2l0YWxfaW9fb3V0XFsyXF0KK2RpZ2l0YWxfaW9fb2VuXFsyXF0KK2RpZ2l0YWxfaW9faW5cWzNcXQorZGlnaXRhbF9pb19vdXRcWzNcXQorZGlnaXRhbF9pb19vZW5cWzNcXQorZGlnaXRhbF9pb19pblxbNFxdCitkaWdpdGFsX2lvX291dFxbNFxdCitkaWdpdGFsX2lvX29lblxbNFxdCitkaWdpdGFsX2lvX2luXFs1XF0KK2RpZ2l0YWxfaW9fb3V0XFs1XF0KK2RpZ2l0YWxfaW9fb2VuXFs1XF0KK2RpZ2l0YWxfaW9faW5cWzZcXQorZGlnaXRhbF9pb19vdXRcWzZcXQorZGlnaXRhbF9pb19vZW5cWzZcXQorZGlnaXRhbF9pb19pblxbN1xdCitkaWdpdGFsX2lvX291dFxbN1xdCitkaWdpdGFsX2lvX29lblxbN1xdCitkaWdpdGFsX2lvX2luXFs4XF0KK2RpZ2l0YWxfaW9fb3V0XFs4XF0KK2RpZ2l0YWxfaW9fb2VuXFs4XF0KK2RpZ2l0YWxfaW9faW5cWzlcXQorZGlnaXRhbF9pb19vdXRcWzlcXQorZGlnaXRhbF9pb19vZW5cWzlcXQorZGlnaXRhbF9pb19pblxbMTBcXQorZGlnaXRhbF9pb19vdXRcWzEwXF0KK2RpZ2l0YWxfaW9fb2VuXFsxMFxdCitkaWdpdGFsX2lvX2luXFsxMVxdCitkaWdpdGFsX2lvX291dFxbMTFcXQorZGlnaXRhbF9pb19vZW5cWzExXF0KK2RpZ2l0YWxfaW9faW5cWzEyXF0KK2RpZ2l0YWxfaW9fb3V0XFsxMlxdCitkaWdpdGFsX2lvX29lblxbMTJcXQorZGlnaXRhbF9pb19pblxbMTNcXQorZGlnaXRhbF9pb19vdXRcWzEzXF0KK2RpZ2l0YWxfaW9fb2VuXFsxM1xdCitkaWdpdGFsX2lvX2luXFsxNFxdCitkaWdpdGFsX2lvX291dFxbMTRcXQorZGlnaXRhbF9pb19vZW5cWzE0XF0KKworCmRpZmYgLS1naXQgYS9vcGVubGFuZS9xc3BpbS9iYXNlLnNkYyBiL29wZW5sYW5lL3FzcGltL2Jhc2Uuc2RjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxNjZkMzYKLS0tIC9kZXYvbnVsbAorKysgYi9vcGVubGFuZS9xc3BpbS9iYXNlLnNkYwpAQCAtMCwwICsxLDMzMiBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDcmVhdGVkIGJ5IHdyaXRlX3NkYworIyBXZWQgTm92IDEwIDE3OjAxOjQ2IDIwMjEKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2N1cnJlbnRfZGVzaWduIHFzcGltX3RvcAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUaW1pbmcgQ29uc3RyYWludHMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2NyZWF0ZV9jbG9jayAtbmFtZSBtY2xrIC1wZXJpb2QgMTAuMDAwMCBbZ2V0X3BvcnRzIHttY2xrfV0KK3NldF9wcm9wYWdhdGVkX2Nsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0KK2NyZWF0ZV9nZW5lcmF0ZWRfY2xvY2sgLW5hbWUgc3BpY2xrIC1hZGQgLXNvdXJjZSBbZ2V0X3BvcnRzIHttY2xrfV0gLW1hc3Rlcl9jbG9jayBbZ2V0X2Nsb2NrcyB7bWNsa31dIC1kaXZpZGVfYnkgMiAtY29tbWVudCB7U1BJIENsb2NrIE91dH0gW2dldF9wb3J0cyB7c3BpX2Nsa31dCisjS2VlcCBpbiB0cmFuc3BhcmVudCB6ZXJvIGRlbGF5IHBhdGgKK3NldF9jYXNlX2FuYWx5c2lzIDAgW2dldF9wb3J0cyB7Y2ZnX2Nza2Ffc3BpWzNdfV0KK3NldF9jYXNlX2FuYWx5c2lzIDAgW2dldF9wb3J0cyB7Y2ZnX2Nza2Ffc3BpWzJdfV0KK3NldF9jYXNlX2FuYWx5c2lzIDAgW2dldF9wb3J0cyB7Y2ZnX2Nza2Ffc3BpWzFdfV0KK3NldF9jYXNlX2FuYWx5c2lzIDAgW2dldF9wb3J0cyB7Y2ZnX2Nza2Ffc3BpWzBdfV0KKworI0tlZXAgdGhlIENsb2NrIFNrZXcgaW4gY2VudGVyIG9mIHRoZSBNdXgKK3NldF9jYXNlX2FuYWx5c2lzIDAgW2dldF9wb3J0cyB7Y2ZnX2Nza2Ffc3BfY29bM119XQorc2V0X2Nhc2VfYW5hbHlzaXMgMSBbZ2V0X3BvcnRzIHtjZmdfY3NrYV9zcF9jb1syXX1dCitzZXRfY2FzZV9hbmFseXNpcyAwIFtnZXRfcG9ydHMge2NmZ19jc2thX3NwX2NvWzFdfV0KK3NldF9jYXNlX2FuYWx5c2lzIDAgW2dldF9wb3J0cyB7Y2ZnX2Nza2Ffc3BfY29bMF19XQorCitzZXRfcHJvcGFnYXRlZF9jbG9jayBbZ2V0X2Nsb2NrcyB7c3BpY2xrfV0KKworc2V0X2Nsb2NrX3RyYW5zaXRpb24gMC4xNTAwIFthbGxfY2xvY2tzXQorc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1zZXR1cCAwLjI1MDAgW2FsbF9jbG9ja3NdCitzZXRfY2xvY2tfdW5jZXJ0YWludHkgLWhvbGQgMC4yNTAwIFthbGxfY2xvY2tzXQorCitzZXQgOjplbnYoU1lOVEhfVElNSU5HX0RFUkFURSkgMC4wNQorcHV0cyAiXFtJTkZPXF06IFNldHRpbmcgdGltaW5nIGRlcmF0ZSB0bzogW2V4cHIgeyQ6OmVudihTWU5USF9USU1JTkdfREVSQVRFKSAqIDEwfV0gJSIKK3NldF90aW1pbmdfZGVyYXRlIC1lYXJseSBbZXhwciB7MS0kOjplbnYoU1lOVEhfVElNSU5HX0RFUkFURSl9XQorc2V0X3RpbWluZ19kZXJhdGUgLWxhdGUgW2V4cHIgezErJDo6ZW52KFNZTlRIX1RJTUlOR19ERVJBVEUpfV0KKworIyMjIENsa1NrZXcgQWRqdXN0CitzZXRfY2FzZV9hbmFseXNpcyAwIFtnZXRfcG9ydHMge2NmZ19jc2thX3NwaVswXX1dCitzZXRfY2FzZV9hbmFseXNpcyAwIFtnZXRfcG9ydHMge2NmZ19jc2thX3NwaVsxXX1dCitzZXRfY2FzZV9hbmFseXNpcyAwIFtnZXRfcG9ydHMge2NmZ19jc2thX3NwaVsyXX1dCitzZXRfY2FzZV9hbmFseXNpcyAwIFtnZXRfcG9ydHMge2NmZ19jc2thX3NwaVszXX1dCisKKworc2V0X21heF9kZWxheSAgIDMuNSAtZnJvbSBbZ2V0X3BvcnRzIHt3YmRfY2xrX2ludH1dCitzZXRfbWF4X2RlbGF5ICAgMiAtdG8gICBbZ2V0X3BvcnRzIHt3YmRfY2xrX3NwaX1dCitzZXRfbWF4X2RlbGF5IDMuNSAtZnJvbSB3YmRfY2xrX2ludCAtdG8gd2JkX2Nsa19zcGkKKworI1N0YXRpYyBDbG9jayBTa2V3IGNvbnRyb2wKK3NldF9jYXNlX2FuYWx5c2lzIDAgW2dldF9wb3J0cyB7Y2ZnX2Nza2Ffc3BfY29bMF19XQorc2V0X2Nhc2VfYW5hbHlzaXMgMCBbZ2V0X3BvcnRzIHtjZmdfY3NrYV9zcF9jb1sxXX1dCitzZXRfY2FzZV9hbmFseXNpcyAwIFtnZXRfcG9ydHMge2NmZ19jc2thX3NwX2NvWzJdfV0KK3NldF9jYXNlX2FuYWx5c2lzIDAgW2dldF9wb3J0cyB7Y2ZnX2Nza2Ffc3BfY29bM119XQorCitzZXRfaW5wdXRfZGVsYXkgLW1heCA2LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtyc3Rfbn1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAzLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtyc3Rfbn1dCisKK3NldF9pbnB1dF9kZWxheSAtbWF4IDUuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3NwaWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7c3BpX3NkaVswXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA1LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHtzcGljbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3NwaV9zZGlbMV19XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7c3BpY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtzcGlfc2RpWzJdfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDUuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3NwaWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7c3BpX3NkaVszXX1dCisKKworc2V0X2lucHV0X2RlbGF5IC1taW4gMC4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7c3BpY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtzcGlfc2RpWzBdfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDAuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3NwaWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7c3BpX3NkaVsxXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAwLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHtzcGljbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3NwaV9zZGlbMl19XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMC4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7c3BpY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtzcGlfc2RpWzNdfV0KKworCitzZXRfb3V0cHV0X2RlbGF5IC1tYXggNC4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7c3BpY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtzcGlfY3NuMH1dCitzZXRfb3V0cHV0X2RlbGF5IC1tYXggNC4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7c3BpY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtzcGlfc2RvWzBdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1heCA0LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHtzcGljbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3NwaV9zZG9bMV19XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDQuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3NwaWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7c3BpX3Nkb1syXX1dCitzZXRfb3V0cHV0X2RlbGF5IC1tYXggNC4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7c3BpY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtzcGlfc2RvWzNdfV0KKworc2V0X291dHB1dF9kZWxheSAtbWluIC0wLjUwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHtzcGljbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3NwaV9jc24wfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAtMC41MDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7c3BpY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtzcGlfc2RvWzBdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAtMC41MDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7c3BpY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtzcGlfc2RvWzFdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAtMC41MDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7c3BpY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtzcGlfc2RvWzJdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAtMC41MDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7c3BpY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtzcGlfc2RvWzNdfV0KKworc2V0X2lucHV0X2RlbGF5IC1tYXggNi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7bWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2Fkcl9pWzBdfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDYuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge21jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9hZHJfaVsxMF19XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7bWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2Fkcl9pWzExXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA2LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfYWRyX2lbMTJdfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDYuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge21jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9hZHJfaVsxM119XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7bWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2Fkcl9pWzE0XX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA2LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfYWRyX2lbMTVdfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDYuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge21jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9hZHJfaVsxNl19XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7bWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2Fkcl9pWzE3XX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA2LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfYWRyX2lbMThdfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDYuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge21jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9hZHJfaVsxOV19XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7bWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2Fkcl9pWzFdfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDYuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge21jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9hZHJfaVsyMF19XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7bWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2Fkcl9pWzIxXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA2LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfYWRyX2lbMjJdfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDYuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge21jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9hZHJfaVsyM119XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7bWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2Fkcl9pWzI0XX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA2LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfYWRyX2lbMjVdfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDYuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge21jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9hZHJfaVsyNl19XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7bWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2Fkcl9pWzI3XX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA2LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfYWRyX2lbMjhdfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDYuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge21jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9hZHJfaVsyOV19XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7bWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2Fkcl9pWzJdfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDYuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge21jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9hZHJfaVszMF19XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7bWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2Fkcl9pWzMxXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA2LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfYWRyX2lbM119XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7bWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2Fkcl9pWzRdfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDYuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge21jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9hZHJfaVs1XX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA2LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfYWRyX2lbNl19XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7bWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2Fkcl9pWzddfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDYuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge21jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9hZHJfaVs4XX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA2LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfYWRyX2lbOV19XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7bWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2RhdF9pWzBdfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDYuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge21jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9kYXRfaVsxMF19XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7bWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2RhdF9pWzExXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA2LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfZGF0X2lbMTJdfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDYuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge21jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9kYXRfaVsxM119XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7bWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2RhdF9pWzE0XX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA2LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfZGF0X2lbMTVdfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDYuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge21jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9kYXRfaVsxNl19XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7bWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2RhdF9pWzE3XX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA2LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfZGF0X2lbMThdfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDYuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge21jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9kYXRfaVsxOV19XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7bWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2RhdF9pWzFdfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDYuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge21jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9kYXRfaVsyMF19XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7bWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2RhdF9pWzIxXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA2LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfZGF0X2lbMjJdfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDYuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge21jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9kYXRfaVsyM119XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7bWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2RhdF9pWzI0XX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA2LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfZGF0X2lbMjVdfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDYuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge21jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9kYXRfaVsyNl19XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7bWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2RhdF9pWzI3XX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA2LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfZGF0X2lbMjhdfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDYuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge21jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9kYXRfaVsyOV19XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7bWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2RhdF9pWzJdfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDYuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge21jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9kYXRfaVszMF19XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7bWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2RhdF9pWzMxXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA2LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfZGF0X2lbM119XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7bWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2RhdF9pWzRdfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDYuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge21jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9kYXRfaVs1XX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA2LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfZGF0X2lbNl19XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7bWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2RhdF9pWzddfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDYuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge21jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9kYXRfaVs4XX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA2LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfZGF0X2lbOV19XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7bWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX3NlbF9pWzBdfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDYuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge21jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9zZWxfaVsxXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA2LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfc2VsX2lbMl19XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7bWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX3NlbF9pWzNdfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDYuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge21jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9zdGJfaX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA2LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfd2VfaX1dCisKK3NldF9pbnB1dF9kZWxheSAtbWluIDMuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge21jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9hZHJfaVswXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAzLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfYWRyX2lbMTBdfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDMuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge21jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9hZHJfaVsxMV19XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMy4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7bWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2Fkcl9pWzEyXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAzLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfYWRyX2lbMTNdfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDMuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge21jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9hZHJfaVsxNF19XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMy4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7bWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2Fkcl9pWzE1XX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAzLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfYWRyX2lbMTZdfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDMuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge21jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9hZHJfaVsxN119XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMy4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7bWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2Fkcl9pWzE4XX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAzLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfYWRyX2lbMTldfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDMuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge21jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9hZHJfaVsxXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAzLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfYWRyX2lbMjBdfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDMuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge21jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9hZHJfaVsyMV19XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMy4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7bWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2Fkcl9pWzIyXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAzLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfYWRyX2lbMjNdfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDMuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge21jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9hZHJfaVsyNF19XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMy4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7bWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2Fkcl9pWzI1XX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAzLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfYWRyX2lbMjZdfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDMuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge21jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9hZHJfaVsyN119XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMy4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7bWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2Fkcl9pWzI4XX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAzLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfYWRyX2lbMjldfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDMuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge21jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9hZHJfaVsyXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAzLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfYWRyX2lbMzBdfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDMuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge21jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9hZHJfaVszMV19XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMy4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7bWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2Fkcl9pWzNdfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDMuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge21jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9hZHJfaVs0XX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAzLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfYWRyX2lbNV19XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMy4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7bWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2Fkcl9pWzZdfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDMuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge21jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9hZHJfaVs3XX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAzLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfYWRyX2lbOF19XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMy4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7bWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2Fkcl9pWzldfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDMuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge21jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9kYXRfaVswXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAzLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfZGF0X2lbMTBdfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDMuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge21jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9kYXRfaVsxMV19XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMy4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7bWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2RhdF9pWzEyXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAzLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfZGF0X2lbMTNdfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDMuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge21jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9kYXRfaVsxNF19XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMy4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7bWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2RhdF9pWzE1XX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAzLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfZGF0X2lbMTZdfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDMuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge21jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9kYXRfaVsxN119XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMy4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7bWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2RhdF9pWzE4XX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAzLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfZGF0X2lbMTldfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDMuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge21jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9kYXRfaVsxXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAzLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfZGF0X2lbMjBdfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDMuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge21jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9kYXRfaVsyMV19XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMy4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7bWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2RhdF9pWzIyXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAzLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfZGF0X2lbMjNdfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDMuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge21jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9kYXRfaVsyNF19XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMy4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7bWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2RhdF9pWzI1XX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAzLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfZGF0X2lbMjZdfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDMuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge21jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9kYXRfaVsyN119XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMy4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7bWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2RhdF9pWzI4XX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAzLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfZGF0X2lbMjldfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDMuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge21jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9kYXRfaVsyXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAzLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfZGF0X2lbMzBdfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDMuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge21jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9kYXRfaVszMV19XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMy4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7bWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2RhdF9pWzNdfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDMuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge21jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9kYXRfaVs0XX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAzLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfZGF0X2lbNV19XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMy4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7bWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2RhdF9pWzZdfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDMuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge21jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9kYXRfaVs3XX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAzLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfZGF0X2lbOF19XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMy4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7bWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2RhdF9pWzldfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDMuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge21jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9zZWxfaVswXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAzLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfc2VsX2lbMV19XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMy4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7bWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX3NlbF9pWzJdfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDMuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge21jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9zZWxfaVszXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAzLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfc3RiX2l9XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMy4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7bWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX3dlX2l9XQorCitzZXRfbWF4X2RlbGF5ICAxMC4wMDAwIC10byBbZ2V0X3BvcnRzIHtzcGlfZGVidWdbMF19XQorc2V0X21heF9kZWxheSAgMTAuMDAwMCAtdG8gW2dldF9wb3J0cyB7c3BpX2RlYnVnWzEwXX1dCitzZXRfbWF4X2RlbGF5ICAxMC4wMDAwIC10byBbZ2V0X3BvcnRzIHtzcGlfZGVidWdbMTFdfV0KK3NldF9tYXhfZGVsYXkgIDEwLjAwMDAgLXRvIFtnZXRfcG9ydHMge3NwaV9kZWJ1Z1sxMl19XQorc2V0X21heF9kZWxheSAgMTAuMDAwMCAtdG8gW2dldF9wb3J0cyB7c3BpX2RlYnVnWzEzXX1dCitzZXRfbWF4X2RlbGF5ICAxMC4wMDAwIC10byBbZ2V0X3BvcnRzIHtzcGlfZGVidWdbMTRdfV0KK3NldF9tYXhfZGVsYXkgIDEwLjAwMDAgLXRvIFtnZXRfcG9ydHMge3NwaV9kZWJ1Z1sxNV19XQorc2V0X21heF9kZWxheSAgMTAuMDAwMCAtdG8gW2dldF9wb3J0cyB7c3BpX2RlYnVnWzE2XX1dCitzZXRfbWF4X2RlbGF5ICAxMC4wMDAwIC10byBbZ2V0X3BvcnRzIHtzcGlfZGVidWdbMTddfV0KK3NldF9tYXhfZGVsYXkgIDEwLjAwMDAgLXRvIFtnZXRfcG9ydHMge3NwaV9kZWJ1Z1sxOF19XQorc2V0X21heF9kZWxheSAgMTAuMDAwMCAtdG8gW2dldF9wb3J0cyB7c3BpX2RlYnVnWzE5XX1dCitzZXRfbWF4X2RlbGF5ICAxMC4wMDAwIC10byBbZ2V0X3BvcnRzIHtzcGlfZGVidWdbMV19XQorc2V0X21heF9kZWxheSAgMTAuMDAwMCAtdG8gW2dldF9wb3J0cyB7c3BpX2RlYnVnWzIwXX1dCitzZXRfbWF4X2RlbGF5ICAxMC4wMDAwIC10byBbZ2V0X3BvcnRzIHtzcGlfZGVidWdbMjFdfV0KK3NldF9tYXhfZGVsYXkgIDEwLjAwMDAgLXRvIFtnZXRfcG9ydHMge3NwaV9kZWJ1Z1syMl19XQorc2V0X21heF9kZWxheSAgMTAuMDAwMCAtdG8gW2dldF9wb3J0cyB7c3BpX2RlYnVnWzIzXX1dCitzZXRfbWF4X2RlbGF5ICAxMC4wMDAwIC10byBbZ2V0X3BvcnRzIHtzcGlfZGVidWdbMjRdfV0KK3NldF9tYXhfZGVsYXkgIDEwLjAwMDAgLXRvIFtnZXRfcG9ydHMge3NwaV9kZWJ1Z1syNV19XQorc2V0X21heF9kZWxheSAgMTAuMDAwMCAtdG8gW2dldF9wb3J0cyB7c3BpX2RlYnVnWzI2XX1dCitzZXRfbWF4X2RlbGF5ICAxMC4wMDAwIC10byBbZ2V0X3BvcnRzIHtzcGlfZGVidWdbMjddfV0KK3NldF9tYXhfZGVsYXkgIDEwLjAwMDAgLXRvIFtnZXRfcG9ydHMge3NwaV9kZWJ1Z1syOF19XQorc2V0X21heF9kZWxheSAgMTAuMDAwMCAtdG8gW2dldF9wb3J0cyB7c3BpX2RlYnVnWzI5XX1dCitzZXRfbWF4X2RlbGF5ICAxMC4wMDAwIC10byBbZ2V0X3BvcnRzIHtzcGlfZGVidWdbMl19XQorc2V0X21heF9kZWxheSAgMTAuMDAwMCAtdG8gW2dldF9wb3J0cyB7c3BpX2RlYnVnWzMwXX1dCitzZXRfbWF4X2RlbGF5ICAxMC4wMDAwIC10byBbZ2V0X3BvcnRzIHtzcGlfZGVidWdbMzFdfV0KK3NldF9tYXhfZGVsYXkgIDEwLjAwMDAgLXRvIFtnZXRfcG9ydHMge3NwaV9kZWJ1Z1szXX1dCitzZXRfbWF4X2RlbGF5ICAxMC4wMDAwIC10byBbZ2V0X3BvcnRzIHtzcGlfZGVidWdbNF19XQorc2V0X21heF9kZWxheSAgMTAuMDAwMCAtdG8gW2dldF9wb3J0cyB7c3BpX2RlYnVnWzVdfV0KK3NldF9tYXhfZGVsYXkgIDEwLjAwMDAgLXRvIFtnZXRfcG9ydHMge3NwaV9kZWJ1Z1s2XX1dCitzZXRfbWF4X2RlbGF5ICAxMC4wMDAwIC10byBbZ2V0X3BvcnRzIHtzcGlfZGVidWdbN119XQorc2V0X21heF9kZWxheSAgMTAuMDAwMCAtdG8gW2dldF9wb3J0cyB7c3BpX2RlYnVnWzhdfV0KK3NldF9tYXhfZGVsYXkgIDEwLjAwMDAgLXRvIFtnZXRfcG9ydHMge3NwaV9kZWJ1Z1s5XX1dCisKK3NldF9vdXRwdXRfZGVsYXkgLW1heCA2LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfYWNrX299XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDYuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge21jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9kYXRfb1swXX1dCitzZXRfb3V0cHV0X2RlbGF5IC1tYXggNi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7bWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2RhdF9vWzEwXX1dCitzZXRfb3V0cHV0X2RlbGF5IC1tYXggNi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7bWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2RhdF9vWzExXX1dCitzZXRfb3V0cHV0X2RlbGF5IC1tYXggNi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7bWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2RhdF9vWzEyXX1dCitzZXRfb3V0cHV0X2RlbGF5IC1tYXggNi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7bWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2RhdF9vWzEzXX1dCitzZXRfb3V0cHV0X2RlbGF5IC1tYXggNi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7bWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2RhdF9vWzE0XX1dCitzZXRfb3V0cHV0X2RlbGF5IC1tYXggNi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7bWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2RhdF9vWzE1XX1dCitzZXRfb3V0cHV0X2RlbGF5IC1tYXggNi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7bWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2RhdF9vWzE2XX1dCitzZXRfb3V0cHV0X2RlbGF5IC1tYXggNi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7bWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2RhdF9vWzE3XX1dCitzZXRfb3V0cHV0X2RlbGF5IC1tYXggNi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7bWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2RhdF9vWzE4XX1dCitzZXRfb3V0cHV0X2RlbGF5IC1tYXggNi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7bWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2RhdF9vWzE5XX1dCitzZXRfb3V0cHV0X2RlbGF5IC1tYXggNi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7bWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2RhdF9vWzFdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1heCA2LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfZGF0X29bMjBdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1heCA2LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfZGF0X29bMjFdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1heCA2LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfZGF0X29bMjJdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1heCA2LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfZGF0X29bMjNdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1heCA2LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfZGF0X29bMjRdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1heCA2LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfZGF0X29bMjVdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1heCA2LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfZGF0X29bMjZdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1heCA2LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfZGF0X29bMjddfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1heCA2LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfZGF0X29bMjhdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1heCA2LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfZGF0X29bMjldfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1heCA2LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfZGF0X29bMl19XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDYuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge21jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9kYXRfb1szMF19XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDYuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge21jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9kYXRfb1szMV19XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDYuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge21jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9kYXRfb1szXX1dCitzZXRfb3V0cHV0X2RlbGF5IC1tYXggNi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7bWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2RhdF9vWzRdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1heCA2LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfZGF0X29bNV19XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDYuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge21jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9kYXRfb1s2XX1dCitzZXRfb3V0cHV0X2RlbGF5IC1tYXggNi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7bWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2RhdF9vWzddfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1heCA2LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfZGF0X29bOF19XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDYuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge21jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9kYXRfb1s5XX1dCitzZXRfb3V0cHV0X2RlbGF5IC1tYXggNi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7bWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2Vycl9vfV0KKworc2V0X291dHB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge21jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9hY2tfb31dCitzZXRfb3V0cHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7bWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2RhdF9vWzBdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfZGF0X29bMTBdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfZGF0X29bMTFdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfZGF0X29bMTJdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfZGF0X29bMTNdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfZGF0X29bMTRdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfZGF0X29bMTVdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfZGF0X29bMTZdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfZGF0X29bMTddfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfZGF0X29bMThdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfZGF0X29bMTldfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfZGF0X29bMV19XQorc2V0X291dHB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge21jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9kYXRfb1syMF19XQorc2V0X291dHB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge21jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9kYXRfb1syMV19XQorc2V0X291dHB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge21jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9kYXRfb1syMl19XQorc2V0X291dHB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge21jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9kYXRfb1syM119XQorc2V0X291dHB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge21jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9kYXRfb1syNF19XQorc2V0X291dHB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge21jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9kYXRfb1syNV19XQorc2V0X291dHB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge21jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9kYXRfb1syNl19XQorc2V0X291dHB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge21jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9kYXRfb1syN119XQorc2V0X291dHB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge21jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9kYXRfb1syOF19XQorc2V0X291dHB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge21jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9kYXRfb1syOV19XQorc2V0X291dHB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge21jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9kYXRfb1syXX1dCitzZXRfb3V0cHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7bWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2RhdF9vWzMwXX1dCitzZXRfb3V0cHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7bWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2RhdF9vWzMxXX1dCitzZXRfb3V0cHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7bWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2RhdF9vWzNdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfZGF0X29bNF19XQorc2V0X291dHB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge21jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9kYXRfb1s1XX1dCitzZXRfb3V0cHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7bWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2RhdF9vWzZdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfZGF0X29bN119XQorc2V0X291dHB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge21jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9kYXRfb1s4XX1dCitzZXRfb3V0cHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7bWNsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2RhdF9vWzldfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHttY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfZXJyX299XQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBFbnZpcm9ubWVudAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluICQ6OmVudihTWU5USF9EUklWSU5HX0NFTExfUElOKSBbYWxsX2lucHV0c10KK3NldCBjYXBfbG9hZCBbZXhwciAkOjplbnYoU1lOVEhfQ0FQX0xPQUQpIC8gMTAwMC4wXQorcHV0cyAiXFtJTkZPXF06IFNldHRpbmcgbG9hZCB0bzogJGNhcF9sb2FkIgorc2V0X2xvYWQgICRjYXBfbG9hZCBbYWxsX291dHB1dHNdCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIERlc2lnbiBSdWxlcworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvb3BlbmxhbmUvcXNwaW0vY29uZmlnLnRjbCBiL29wZW5sYW5lL3FzcGltL2NvbmZpZy50Y2wKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGQ5NTk2YQotLS0gL2Rldi9udWxsCisrKyBiL29wZW5sYW5lL3FzcGltL2NvbmZpZy50Y2wKQEAgLTAsMCArMSwxMDQgQEAKKyMgU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogIDIwMjEgLCBEaW5lc2ggQW5uYXl5YQorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyMgU1BEWC1GaWxlQ29udHJpYnV0b3I6IE1vZGlmaWVkIGJ5IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisKKyMgR2xvYmFsCisjIC0tLS0tLQorCitzZXQgc2NyaXB0X2RpciBbZmlsZSBkaXJuYW1lIFtmaWxlIG5vcm1hbGl6ZSBbaW5mbyBzY3JpcHRdXV0KKyMgTmFtZQorCitzZXQgOjplbnYoREVTSUdOX05BTUUpIHFzcGltX3RvcAorCitzZXQgOjplbnYoREVTSUdOX0lTX0NPUkUpICIwIgorc2V0IDo6ZW52KEZQX1BETl9DT1JFX1JJTkcpICIwIgorCisjIFRpbWluZyBjb25maWd1cmF0aW9uCitzZXQgOjplbnYoQ0xPQ0tfUEVSSU9EKSAiMTAiCitzZXQgOjplbnYoQ0xPQ0tfUE9SVCkgIm1jbGsiCisKK3NldCA6OmVudihTWU5USF9NQVhfRkFOT1VUKSA0CisKKyMjIENUUyBCVUZGRVIKK3NldCA6OmVudihDVFNfQ0xLX0JVRkZFUl9MSVNUKSAic2t5MTMwX2ZkX3NjX2hkX19jbGtidWZfNCBza3kxMzBfZmRfc2NfaGRfX2Nsa2J1Zl84Igorc2V0IDo6ZW52KENUU19TSU5LX0NMVVNURVJJTkdfU0laRSkgIjE2Igorc2V0IDo6ZW52KENMT0NLX0JVRkZFUl9GQU5PVVQpICI4IgorCisjIFNvdXJjZXMKKyMgLS0tLS0tLQorCisjIExvY2FsIHNvdXJjZXMgKyBubzJ1c2Igc291cmNlcworc2V0IDo6ZW52KFZFUklMT0dfRklMRVMpICJcCisgICAgICAgICRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL2xpYi9jbGtfc2tld19hZGp1c3QuZ3YgXAorICAgICAgICAkc2NyaXB0X2Rpci8uLi8uLi92ZXJpbG9nL3J0bC9saWIvcmVzZXRfc3luYy5zdiAgICAgIFwKKyAgICAgICAgJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwvcXNwaW0vc3JjL3FzcGltX3RvcC5zdiBcCisgICAgICAgICRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL3FzcGltL3NyYy9xc3BpbV9pZi5zdiBcCisgICAgICAgICRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL3FzcGltL3NyYy9xc3BpbV9yZWdzLnN2IFwKKyAgICAgICAgJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwvcXNwaW0vc3JjL3FzcGltX2ZpZm8uc3YgXAorICAgICAgICAkc2NyaXB0X2Rpci8uLi8uLi92ZXJpbG9nL3J0bC9xc3BpbS9zcmMvcXNwaW1fY2xrZ2VuLnN2IFwKKyAgICAgICAgJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwvcXNwaW0vc3JjL3FzcGltX2N0cmwuc3YgXAorICAgICAgICAkc2NyaXB0X2Rpci8uLi8uLi92ZXJpbG9nL3J0bC9xc3BpbS9zcmMvcXNwaW1fcnguc3YgXAorICAgICAgICAkc2NyaXB0X2Rpci8uLi8uLi92ZXJpbG9nL3J0bC9xc3BpbS9zcmMvcXNwaW1fdHguc3YgXAorCSRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL2xpYi9jdGVjaF9jZWxscy5zdiAgICAgXAorCSIKKworc2V0IDo6ZW52KFNZTlRIX0RFRklORVMpIFtsaXN0IFNZTlRIRVNJUyBdCitzZXQgOjplbnYoU1lOVEhfUkVBRF9CTEFDS0JPWF9MSUIpIDEKK3NldCA6OmVudihTRENfRklMRSkgIiRzY3JpcHRfZGlyL2Jhc2Uuc2RjIgorc2V0IDo6ZW52KEJBU0VfU0RDX0ZJTEUpICIkc2NyaXB0X2Rpci9iYXNlLnNkYyIKKworc2V0IDo6ZW52KExFQ19FTkFCTEUpIDAKKworc2V0IDo6ZW52KFZERF9QSU4pIFtsaXN0IHt2Y2NkMX1dCitzZXQgOjplbnYoR05EX1BJTikgW2xpc3Qge3Zzc2QxfV0KKworCisjIEZsb29ycGxhbm5pbmcKKyMgLS0tLS0tLS0tLS0tLQorCitzZXQgOjplbnYoRlBfUElOX09SREVSX0NGRykgJDo6ZW52KERFU0lHTl9ESVIpL3Bpbl9vcmRlci5jZmcKKworc2V0IDo6ZW52KEZQX1NJWklORykgYWJzb2x1dGUKK3NldCA6OmVudihESUVfQVJFQSkgIjAgMCA0NTAgNTUwIgorCitzZXQgOjplbnYoUExfVElNRV9EUklWRU4pIDEKK3NldCA6OmVudihQTF9UQVJHRVRfREVOU0lUWSkgIjAuNDIiCisKKyMgSWYgeW91J3JlIGdvaW5nIHRvIHVzZSBtdWx0aXBsZSBwb3dlciBkb21haW5zLCB0aGVuIGtlZXAgdGhpcyBkaXNhYmxlZC4KK3NldCA6OmVudihSVU5fQ1ZDKSAwCisKKyNzZXQgOjplbnYoUEROX0NGRykgJHNjcmlwdF9kaXIvcGRuLnRjbAorCisKKyMgaGVscHMgaW4gYW50ZWVuYSBmaXgKK3NldCA6OmVudihVU0VfQVJDX0FOVEVOTkFfQ0hFQ0spICIwIgorCitzZXQgOjplbnYoRlBfSU9fVkVYVEVORCkgNAorc2V0IDo6ZW52KEZQX0lPX0hFWFRFTkQpIDQKKworc2V0IDo6ZW52KEZQX1BETl9WUElUQ0gpIDEwMAorc2V0IDo6ZW52KEZQX1BETl9IUElUQ0gpIDEwMAorc2V0IDo6ZW52KEZQX1BETl9WV0lEVEgpIDUKK3NldCA6OmVudihGUF9QRE5fSFdJRFRIKSA1CisKK3NldCA6OmVudihHTEJfUlRfTUFYTEFZRVIpIDUKK3NldCA6OmVudihHTEJfUlRfTUFYX0RJT0RFX0lOU19JVEVSUykgMTAKK3NldCA6OmVudihESU9ERV9JTlNFUlRJT05fU1RSQVRFR1kpIDQKKworCitzZXQgOjplbnYoUVVJVF9PTl9USU1JTkdfVklPTEFUSU9OUykgIjAiCitzZXQgOjplbnYoUVVJVF9PTl9NQUdJQ19EUkMpICIxIgorc2V0IDo6ZW52KFFVSVRfT05fTFZTX0VSUk9SKSAiMCIKK3NldCA6OmVudihRVUlUX09OX1NMRVdfVklPTEFUSU9OUykgIjAiCmRpZmYgLS1naXQgYS9vcGVubGFuZS9xc3BpbS9pbnRlcmFjdGl2ZS50Y2wgYi9vcGVubGFuZS9xc3BpbS9pbnRlcmFjdGl2ZS50Y2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ0YjUxNwotLS0gL2Rldi9udWxsCisrKyBiL29wZW5sYW5lL3FzcGltL2ludGVyYWN0aXZlLnRjbApAQCAtMCwwICsxLDIxOSBAQAorIyEvdXNyL2Jpbi90Y2xzaAorIyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIwIEVmYWJsZXNzIENvcnBvcmF0aW9uCisjIENvcHlyaWdodCAyMDIwIEVmYWJsZXNzIENvcnBvcmF0aW9uCisjIENvcHlyaWdodCAyMDIwIFN5bHZhaW4gTXVuYXV0CisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorCitwYWNrYWdlIHJlcXVpcmUgb3BlbmxhbmU7CisKKworcHJvYyBydW5fcGxhY2VtZW50X3N0ZXAge2FyZ3N9IHsKKyAgICAjIHNldCBwZG5kZWZfZGlybmFtZSBbZmlsZSBkaXJuYW1lICQ6OmVudihwZG5fdG1wX2ZpbGVfdGFnKS5kZWZdCisgICAgIyBzZXQgcGRuZGVmIFtsaW5kZXggW2dsb2IgJHBkbmRlZl9kaXJuYW1lLypwZG4qXSAwXQorICAgICMgc2V0X2RlZiAkcGRuZGVmCisgICAgaWYgeyAhIFsgaW5mbyBleGlzdHMgOjplbnYoUExBQ0VNRU5UX0NVUlJFTlRfREVGKSBdIH0geworICAgICAgICBzZXQgOjplbnYoUExBQ0VNRU5UX0NVUlJFTlRfREVGKSAkOjplbnYoQ1VSUkVOVF9ERUYpCisgICAgfSBlbHNlIHsKKyAgICAgICAgc2V0IDo6ZW52KENVUlJFTlRfREVGKSAkOjplbnYoUExBQ0VNRU5UX0NVUlJFTlRfREVGKQorICAgIH0KKworICAgIHJ1bl9wbGFjZW1lbnQKK30KKworcHJvYyBydW5fY3RzX3N0ZXAge2FyZ3N9IHsKKyAgICAjIHNldF9kZWYgJDo6ZW52KG9wZW5kcF9yZXN1bHRfZmlsZV90YWcpLmRlZgorICAgIGlmIHsgISBbIGluZm8gZXhpc3RzIDo6ZW52KENUU19DVVJSRU5UX0RFRikgXSB9IHsKKyAgICAgICAgc2V0IDo6ZW52KENUU19DVVJSRU5UX0RFRikgJDo6ZW52KENVUlJFTlRfREVGKQorICAgIH0gZWxzZSB7CisgICAgICAgIHNldCA6OmVudihDVVJSRU5UX0RFRikgJDo6ZW52KENUU19DVVJSRU5UX0RFRikKKyAgICB9CisKKyAgICBydW5fY3RzCisgICAgcnVuX3Jlc2l6ZXJfdGltaW5nCit9CisKK3Byb2MgcnVuX3JvdXRpbmdfc3RlcCB7YXJnc30geworICAgICMgc2V0IHJlc2l6ZXJkZWZfZGlybmFtZSBbZmlsZSBkaXJuYW1lICQ6OmVudihyZXNpemVyX3RtcF9maWxlX3RhZylfdGltaW5nLmRlZl0KKyAgICAjIHNldCByZXNpemVyZGVmIFtsaW5kZXggW2dsb2IgJHJlc2l6ZXJkZWZfZGlybmFtZS8qcmVzaXplcipdIDBdCisgICAgIyBzZXRfZGVmICRyZXNpemVyZGVmCisgICAgaWYgeyAhIFsgaW5mbyBleGlzdHMgOjplbnYoUk9VVElOR19DVVJSRU5UX0RFRikgXSB9IHsKKyAgICAgICAgc2V0IDo6ZW52KFJPVVRJTkdfQ1VSUkVOVF9ERUYpICQ6OmVudihDVVJSRU5UX0RFRikKKyAgICB9IGVsc2UgeworICAgICAgICBzZXQgOjplbnYoQ1VSUkVOVF9ERUYpICQ6OmVudihST1VUSU5HX0NVUlJFTlRfREVGKQorICAgIH0KKyAgICBydW5fcm91dGluZworfQorCitwcm9jIHJ1bl9kaW9kZV9pbnNlcnRpb25fMl81X3N0ZXAge2FyZ3N9IHsKKyAgICAjIHNldF9kZWYgJDo6ZW52KHRyaXRvblJvdXRlX3Jlc3VsdF9maWxlX3RhZykuZGVmCisgICAgaWYgeyAhIFsgaW5mbyBleGlzdHMgOjplbnYoRElPREVfSU5TRVJUSU9OX0NVUlJFTlRfREVGKSBdIH0geworICAgICAgICBzZXQgOjplbnYoRElPREVfSU5TRVJUSU9OX0NVUlJFTlRfREVGKSAkOjplbnYoQ1VSUkVOVF9ERUYpCisgICAgfSBlbHNlIHsKKyAgICAgICAgc2V0IDo6ZW52KENVUlJFTlRfREVGKSAkOjplbnYoRElPREVfSU5TRVJUSU9OX0NVUlJFTlRfREVGKQorICAgIH0KKwlpZiB7ICgkOjplbnYoRElPREVfSU5TRVJUSU9OX1NUUkFURUdZKSA9PSAyKSB8fCAoJDo6ZW52KERJT0RFX0lOU0VSVElPTl9TVFJBVEVHWSkgPT0gNSkgfSB7CisJCXJ1bl9hbnRlbm5hX2NoZWNrCisJCWhlYWxfYW50ZW5uYV92aW9sYXRvcnM7ICMgbW9kaWZpZXMgdGhlIHJvdXRlZCBERUYKKwl9CisKK30KKworcHJvYyBydW5fcG93ZXJfcGluc19pbnNlcnRpb25fc3RlcCB7YXJnc30geworICAgICMgc2V0X2RlZiAkOjplbnYodHJpdG9uUm91dGVfcmVzdWx0X2ZpbGVfdGFnKS5kZWYKKyAgICBpZiB7ICEgWyBpbmZvIGV4aXN0cyA6OmVudihQT1dFUl9QSU5TX0lOU0VSVElPTl9DVVJSRU5UX0RFRikgXSB9IHsKKyAgICAgICAgc2V0IDo6ZW52KFBPV0VSX1BJTlNfSU5TRVJUSU9OX0NVUlJFTlRfREVGKSAkOjplbnYoQ1VSUkVOVF9ERUYpCisgICAgfSBlbHNlIHsKKyAgICAgICAgc2V0IDo6ZW52KENVUlJFTlRfREVGKSAkOjplbnYoUE9XRVJfUElOU19JTlNFUlRJT05fQ1VSUkVOVF9ERUYpCisgICAgfQorICAgIGlmIHsgJDo6ZW52KExWU19JTlNFUlRfUE9XRVJfUElOUykgfSB7CisJCXdyaXRlX3Bvd2VyZWRfdmVyaWxvZworCQlzZXRfbmV0bGlzdCAkOjplbnYobHZzX3Jlc3VsdF9maWxlX3RhZykucG93ZXJlZC52CisgICAgfQorCit9CisKK3Byb2MgcnVuX2x2c19zdGVwIHt7IGx2c19lbmFibGVkIDEgfX0geworICAgICMgc2V0X2RlZiAkOjplbnYodHJpdG9uUm91dGVfcmVzdWx0X2ZpbGVfdGFnKS5kZWYKKyAgICBpZiB7ICEgWyBpbmZvIGV4aXN0cyA6OmVudihMVlNfQ1VSUkVOVF9ERUYpIF0gfSB7CisgICAgICAgIHNldCA6OmVudihMVlNfQ1VSUkVOVF9ERUYpICQ6OmVudihDVVJSRU5UX0RFRikKKyAgICB9IGVsc2UgeworICAgICAgICBzZXQgOjplbnYoQ1VSUkVOVF9ERUYpICQ6OmVudihMVlNfQ1VSUkVOVF9ERUYpCisgICAgfQorCWlmIHsgJGx2c19lbmFibGVkIH0geworCQlydW5fbWFnaWNfc3BpY2VfZXhwb3J0CisJCXJ1bl9sdnM7ICMgcmVxdWlyZXMgcnVuX21hZ2ljX3NwaWNlX2V4cG9ydAorCX0KKworfQorCitwcm9jIHJ1bl9kcmNfc3RlcCB7eyBkcmNfZW5hYmxlZCAxIH19IHsKKyAgICBpZiB7ICEgWyBpbmZvIGV4aXN0cyA6OmVudihEUkNfQ1VSUkVOVF9ERUYpIF0gfSB7CisgICAgICAgIHNldCA6OmVudihEUkNfQ1VSUkVOVF9ERUYpICQ6OmVudihDVVJSRU5UX0RFRikKKyAgICB9IGVsc2UgeworICAgICAgICBzZXQgOjplbnYoQ1VSUkVOVF9ERUYpICQ6OmVudihEUkNfQ1VSUkVOVF9ERUYpCisgICAgfQorCWlmIHsgJGRyY19lbmFibGVkIH0geworCQlydW5fbWFnaWNfZHJjCisJCXJ1bl9rbGF5b3V0X2RyYworCX0KK30KKworcHJvYyBydW5fYW50ZW5uYV9jaGVja19zdGVwIHt7IGFudGVubmFfY2hlY2tfZW5hYmxlZCAxIH19IHsKKyAgICBpZiB7ICEgWyBpbmZvIGV4aXN0cyA6OmVudihBTlRFTk5BX0NIRUNLX0NVUlJFTlRfREVGKSBdIH0geworICAgICAgICBzZXQgOjplbnYoQU5URU5OQV9DSEVDS19DVVJSRU5UX0RFRikgJDo6ZW52KENVUlJFTlRfREVGKQorICAgIH0gZWxzZSB7CisgICAgICAgIHNldCA6OmVudihDVVJSRU5UX0RFRikgJDo6ZW52KEFOVEVOTkFfQ0hFQ0tfQ1VSUkVOVF9ERUYpCisgICAgfQorCWlmIHsgJGFudGVubmFfY2hlY2tfZW5hYmxlZCB9IHsKKwkJcnVuX2FudGVubmFfY2hlY2sKKwl9Cit9CisKK3Byb2MgcnVuX2Zsb3cge2FyZ3N9IHsKKyAgICAgICBzZXQgc2NyaXB0X2RpciBbZmlsZSBkaXJuYW1lIFtmaWxlIG5vcm1hbGl6ZSBbaW5mbyBzY3JpcHRdXV0KKworCQlzZXQgb3B0aW9ucyB7CisJCXstZGVzaWduIHJlcXVpcmVkfQorCQl7LXNhdmVfcGF0aCBvcHRpb25hbH0KKwkJey1ub19sdnMgb3B0aW9uYWx9CisJICAgIHstbm9fZHJjIG9wdGlvbmFsfQorCSAgICB7LW5vX2FudGVubmFjaGVjayBvcHRpb25hbH0KKwl9CisJc2V0IGZsYWdzIHstc2F2ZX0KKwlwYXJzZV9rZXlfYXJncyAicnVuX2Zsb3ciIGFyZ3MgYXJnX3ZhbHVlcyAkb3B0aW9ucyBmbGFnc19tYXAgJGZsYWdzIC1ub19jb25zdW1lCisKKwlwcmVwIHsqfSRhcmdzCisKKyAgICAgICAgc2V0IExWU19FTkFCTEVEIDEKKyAgICAgICAgc2V0IERSQ19FTkFCTEVEIDAKKyAgICAgICAgc2V0IEFOVEVOTkFDSEVDS19FTkFCTEVEIDEKKworICAgICAgICBzZXQgc3RlcHMgW2RpY3QgY3JlYXRlICJzeW50aGVzaXMiIHtydW5fc3ludGhlc2lzICIiIH0gXAorICAgICAgICAgICAgICAgICJmbG9vcnBsYW4iIHtydW5fZmxvb3JwbGFuICIifSBcCisgICAgICAgICAgICAgICAgInBsYWNlbWVudCIge3J1bl9wbGFjZW1lbnRfc3RlcCAiIn0gXAorICAgICAgICAgICAgICAgICJjdHMiIHtydW5fY3RzX3N0ZXAgIiJ9IFwKKyAgICAgICAgICAgICAgICAicm91dGluZyIge3J1bl9yb3V0aW5nX3N0ZXAgIiJ9XAorICAgICAgICAgICAgICAgICJkaW9kZV9pbnNlcnRpb24iIHtydW5fZGlvZGVfaW5zZXJ0aW9uXzJfNV9zdGVwICIifSBcCisgICAgICAgICAgICAgICAgInBvd2VyX3BpbnNfaW5zZXJ0aW9uIiB7cnVuX3Bvd2VyX3BpbnNfaW5zZXJ0aW9uX3N0ZXAgIiJ9IFwKKyAgICAgICAgICAgICAgICAiZ2RzX21hZ2ljIiB7cnVuX21hZ2ljICIifSBcCisgICAgICAgICAgICAgICAgImdkc19kcmNfa2xheW91dCIge3J1bl9rbGF5b3V0ICIifSBcCisgICAgICAgICAgICAgICAgImdkc194b3Jfa2xheW91dCIge3J1bl9rbGF5b3V0X2dkc194b3IgIiJ9IFwKKyAgICAgICAgICAgICAgICAibHZzIiAicnVuX2x2c19zdGVwICRMVlNfRU5BQkxFRCIgXAorICAgICAgICAgICAgICAgICJkcmMiICJydW5fZHJjX3N0ZXAgJERSQ19FTkFCTEVEIiBcCisgICAgICAgICAgICAgICAgImFudGVubmFfY2hlY2siICJydW5fYW50ZW5uYV9jaGVja19zdGVwICRBTlRFTk5BQ0hFQ0tfRU5BQkxFRCIgXAorICAgICAgICAgICAgICAgICJjdmMiIHtydW5fbGVmX2N2Y30KKyAgICAgICAgXQorCisgICAgICAgc2V0X2lmX3Vuc2V0IGFyZ192YWx1ZXMoLXRvKSAiY3ZjIjsKKworICAgICAgIGlmIHsgIFtpbmZvIGV4aXN0cyA6OmVudihDVVJSRU5UX1NURVApIF0gfSB7CisgICAgICAgICAgIHB1dHMgIlxbSU5GT1xdOlBpY2tpbmcgdXAgd2hlcmUgbGFzdCBleGVjdXRpb24gbGVmdCBvZmYiCisgICAgICAgICAgIHB1dHMgW2Zvcm1hdCAiXFtJTkZPXF06Q3VycmVudCBzdGFnZSBpcyAlcyAiICQ6OmVudihDVVJSRU5UX1NURVApXQorICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgIHNldCA6OmVudihDVVJSRU5UX1NURVApICJzeW50aGVzaXMiOworICAgICAgIH0KKyAgICAgICBzZXRfaWZfdW5zZXQgYXJnX3ZhbHVlcygtZnJvbSkgJDo6ZW52KENVUlJFTlRfU1RFUCk7CisgICAgICAgc2V0IGV4ZSAwOworICAgICAgIGRpY3QgZm9yIHtzdGVwX25hbWUgc3RlcF9leGV9ICRzdGVwcyB7CisgICAgICAgICAgIGlmIHsgWyBzdHJpbmcgZXF1YWwgJGFyZ192YWx1ZXMoLWZyb20pICRzdGVwX25hbWUgXSB9IHsKKyAgICAgICAgICAgICAgIHNldCBleGUgMTsKKyAgICAgICAgICAgfQorCisgICAgICAgICAgIGlmIHsgJGV4ZSB9IHsKKyAgICAgICAgICAgICAgICMgRm9yIHdoZW4gaXQgZmFpbHMKKyAgICAgICAgICAgICAgIHNldCA6OmVudihDVVJSRU5UX1NURVApICRzdGVwX25hbWUKKyAgICAgICAgICAgICAgIFtsaW5kZXggJHN0ZXBfZXhlIDBdIFtsaW5kZXggJHN0ZXBfZXhlIDFdIDsKKyAgICAgICAgICAgfQorCisgICAgICAgICAgIGlmIHsgWyBzdHJpbmcgZXF1YWwgJGFyZ192YWx1ZXMoLXRvKSAkc3RlcF9uYW1lIF0gfSB7CisgICAgICAgICAgICAgICBzZXQgZXhlIDA6CisgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgfQorCisgICAgICAgfQorCisgICAgICAgIyBmb3Igd2hlbiBpdCByZXN1bWVzCisgICAgICAgc2V0IHN0ZXBzX2FzX2xpc3QgW2RpY3Qga2V5cyAkc3RlcHNdCisgICAgICAgc2V0IG5leHRfaWR4IFtleHByIFtsc2VhcmNoICRzdGVwc19hc19saXN0ICQ6OmVudihDVVJSRU5UX1NURVApXSArIDFdCisgICAgICAgc2V0IDo6ZW52KENVUlJFTlRfU1RFUCkgW2xpbmRleCAkc3RlcHNfYXNfbGlzdCAkbmV4dF9pZHhdCisKKwlpZiB7ICBbaW5mbyBleGlzdHMgZmxhZ3NfbWFwKC1zYXZlKSBdIH0geworCQlpZiB7ICEgW2luZm8gZXhpc3RzIGFyZ192YWx1ZXMoLXNhdmVfcGF0aCldIH0geworCQkJc2V0IGFyZ192YWx1ZXMoLXNhdmVfcGF0aCkgIiIKKwkJfQorCQlzYXZlX3ZpZXdzIAktbGVmX3BhdGggJDo6ZW52KG1hZ2ljX3Jlc3VsdF9maWxlX3RhZykubGVmIFwKKwkJCS1kZWZfcGF0aCAkOjplbnYoQ1VSUkVOVF9ERUYpIFwKKwkJCS1nZHNfcGF0aCAkOjplbnYobWFnaWNfcmVzdWx0X2ZpbGVfdGFnKS5nZHMgXAorCQkJLW1hZ19wYXRoICQ6OmVudihtYWdpY19yZXN1bHRfZmlsZV90YWcpLm1hZyBcCisJCQktbWFnbGVmX3BhdGggJDo6ZW52KG1hZ2ljX3Jlc3VsdF9maWxlX3RhZykubGVmLm1hZyBcCisJCQktc3BpY2VfcGF0aCAkOjplbnYobWFnaWNfcmVzdWx0X2ZpbGVfdGFnKS5zcGljZSBcCisJCQktc3BlZl9wYXRoICQ6OmVudihDVVJSRU5UX1NQRUYpIFwKKwkJCS12ZXJpbG9nX3BhdGggJDo6ZW52KENVUlJFTlRfTkVUTElTVCkgXAorCQkJLXNhdmVfcGF0aCAkYXJnX3ZhbHVlcygtc2F2ZV9wYXRoKSBcCisJCQktdGFnICQ6OmVudihSVU5fVEFHKQorCX0KKworCisJY2FsY190b3RhbF9ydW50aW1lCisJc2F2ZV9zdGF0ZQorCWdlbmVyYXRlX2ZpbmFsX3N1bW1hcnlfcmVwb3J0CisJCisJY2hlY2tfdGltaW5nX3Zpb2xhdGlvbnMKKworCXB1dHNfc3VjY2VzcyAiRmxvdyBDb21wbGV0ZWQgV2l0aG91dCBGYXRhbCBFcnJvcnMuIgorCit9CisKK3J1bl9mbG93IHsqfSRhcmd2CmRpZmYgLS1naXQgYS9vcGVubGFuZS9xc3BpbS9wZG4udGNsIGIvb3BlbmxhbmUvcXNwaW0vcGRuLnRjbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmU2ODliCi0tLSAvZGV2L251bGwKKysrIGIvb3BlbmxhbmUvcXNwaW0vcGRuLnRjbApAQCAtMCwwICsxLDQ5IEBACisjIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjAgRWZhYmxlc3MgQ29ycG9yYXRpb24KKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisKKyMgUG93ZXIgbmV0cworc2V0IDo6cG93ZXJfbmV0cyAkOjplbnYoVkREX1BJTikKK3NldCA6Omdyb3VuZF9uZXRzICQ6OmVudihHTkRfUElOKQorCitzZXQgOjptYWNyb19ibG9ja2FnZV9sYXllcl9saXN0ICJsaTEgbWV0MSBtZXQyIG1ldDMgbWV0NCBtZXQ1IgorCitwZG5nZW46OnNwZWNpZnlfZ3JpZCBzdGRjZWxsIHsKKyAgICBuYW1lIGdyaWQKKyAgICByYWlscyB7CisJICAgIG1ldDEge3dpZHRoIDAuNDggcGl0Y2ggJDo6ZW52KFBMQUNFX1NJVEVfSEVJR0hUKSBvZmZzZXQgMH0KKyAgICB9CisgICAgc3RyYXBzIHsKKwkgICAgbWV0NCB7d2lkdGggMS42IHBpdGNoICQ6OmVudihGUF9QRE5fVlBJVENIKSBvZmZzZXQgJDo6ZW52KEZQX1BETl9WT0ZGU0VUKX0KKwkgICAgbWV0NSB7d2lkdGggMS42IHBpdGNoICQ6OmVudihGUF9QRE5fSFBJVENIKSBvZmZzZXQgJDo6ZW52KEZQX1BETl9IT0ZGU0VUKX0KKyAgICB9CisgICAgY29ubmVjdCB7e21ldDEgbWV0NH0ge21ldDQgbWV0NX19Cit9CisKK3Bkbmdlbjo6c3BlY2lmeV9ncmlkIG1hY3JvIHsKKyAgICBwb3dlcl9waW5zICJWUFdSIgorICAgIGdyb3VuZF9waW5zICJWR05EIgorICAgIGJsb2NrYWdlcyAibGkxIG1ldDEgbWV0MiBtZXQzIG1ldDQiCisgICAgc3RyYXBzIHsgCisgICAgfSAKKyAgICBjb25uZWN0IHt7bWV0NF9QSU5fdmVyIG1ldDV9fQorfQorCitzZXQgOjpoYWxvIDUKKworIyBQT1dFUiBvciBHUk9VTkQgI1N0ZC4gY2VsbCByYWlscyBzdGFydGluZyB3aXRoIHBvd2VyIG9yIGdyb3VuZCByYWlscyBhdCB0aGUgYm90dG9tIG9mIHRoZSBjb3JlIGFyZWEKK3NldCA6OnJhaWxzX3N0YXJ0X3dpdGggIlBPV0VSIiA7CisKKyMgUE9XRVIgb3IgR1JPVU5EICNVcHBlciBtZXRhbCBzdHJpcGVzIHN0YXJ0aW5nIHdpdGggcG93ZXIgb3IgZ3JvdW5kIHJhaWxzIGF0IHRoZSBsZWZ0L2JvdHRvbSBvZiB0aGUgY29yZSBhcmVhCitzZXQgOjpzdHJpcGVzX3N0YXJ0X3dpdGggIlBPV0VSIiA7CmRpZmYgLS1naXQgYS9vcGVubGFuZS9xc3BpbS9waW5fb3JkZXIuY2ZnIGIvb3BlbmxhbmUvcXNwaW0vcGluX29yZGVyLmNmZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGMzYzM3Ci0tLSAvZGV2L251bGwKKysrIGIvb3BlbmxhbmUvcXNwaW0vcGluX29yZGVyLmNmZwpAQCAtMCwwICsxLDE4NyBAQAorI0JVU19TT1JUCisjTUFOVUFMX1BMQUNFCisKKyNFCitzcGlfZGVidWdcWzBcXSAgICAgICAgMDAwMCAwICAyCitzcGlfZGVidWdcWzFcXSAgICAgICAgCitzcGlfZGVidWdcWzJcXSAgICAgICAgCitzcGlfZGVidWdcWzNcXSAgICAgICAgCitzcGlfZGVidWdcWzRcXSAgICAgICAgCitzcGlfZGVidWdcWzVcXSAgICAgICAgCitzcGlfZGVidWdcWzZcXSAgICAgICAgCitzcGlfZGVidWdcWzdcXSAgICAgICAgCitzcGlfZGVidWdcWzhcXSAgICAgICAgCitzcGlfZGVidWdcWzlcXSAgICAgICAgCitzcGlfZGVidWdcWzEwXF0gICAgICAgIAorc3BpX2RlYnVnXFsxMVxdICAgICAgICAKK3NwaV9kZWJ1Z1xbMTJcXSAgICAgICAgCitzcGlfZGVidWdcWzEzXF0gICAgICAgIAorc3BpX2RlYnVnXFsxNFxdICAgICAgICAKK3NwaV9kZWJ1Z1xbMTVcXSAgICAgICAgCitzcGlfZGVidWdcWzE2XF0gICAgICAgIAorc3BpX2RlYnVnXFsxN1xdICAgICAgICAKK3NwaV9kZWJ1Z1xbMThcXSAgICAgICAgCitzcGlfZGVidWdcWzE5XF0gICAgICAgIAorc3BpX2RlYnVnXFsyMFxdICAgICAgICAKK3NwaV9kZWJ1Z1xbMjFcXSAgICAgICAgCitzcGlfZGVidWdcWzIyXF0gICAgICAgIAorc3BpX2RlYnVnXFsyM1xdICAgICAgICAKK3NwaV9kZWJ1Z1xbMjRcXSAgICAgICAgCitzcGlfZGVidWdcWzI1XF0gICAgICAgIAorc3BpX2RlYnVnXFsyNlxdICAgICAgICAKK3NwaV9kZWJ1Z1xbMjdcXSAgICAgICAgCitzcGlfZGVidWdcWzI4XF0gICAgICAgIAorc3BpX2RlYnVnXFsyOVxdICAgICAgICAKK3NwaV9kZWJ1Z1xbMzBcXSAgICAgICAgCitzcGlfZGVidWdcWzMxXF0gICAgICAgIAorCitzcGlfc2RpXFszXF0gICAgICAgICAgICAgMDIwMCAwIDIKK3NwaV9zZGlcWzJcXSAgICAgICAgCitzcGlfc2RpXFsxXF0gICAgICAgIAorc3BpX3NkaVxbMFxdICAgICAgICAKK3NwaV9zZG9cWzNcXSAgICAgICAgCitzcGlfc2RvXFsyXF0gICAgICAgIAorc3BpX3Nkb1xbMVxdICAgICAgICAKK3NwaV9zZG9cWzBcXSAgCitzcGlfY2xrIAorc3BpX2NzblxbM1xdCitzcGlfY3NuXFsyXF0KK3NwaV9jc25cWzFcXQorc3BpX2NzblxbMFxdCitzcGlfb2VuXFszXF0gICAgIAorc3BpX29lblxbMlxdICAgICAKK3NwaV9vZW5cWzFcXSAgICAgCitzcGlfb2VuXFswXF0gICAgIAorCisjTgorcnN0X24gICAgICAgICAgICAgICAgICAKKworI1cKK2NmZ19jc2thX3NwX2NvXFszXF0gICAwMDAwIDAgMgorY2ZnX2Nza2Ffc3BfY29cWzJcXQorY2ZnX2Nza2Ffc3BfY29cWzFcXQorY2ZnX2Nza2Ffc3BfY29cWzBcXQorY2ZnX2Nza2Ffc3BpXFszXF0KK2NmZ19jc2thX3NwaVxbMlxdCitjZmdfY3NrYV9zcGlcWzFcXQorY2ZnX2Nza2Ffc3BpXFswXF0KK3diZF9jbGtfaW50Cit3YmRfY2xrX3NwaQorbWNsayAgICAgICAgICAgICAgICAgICAKKword2JkX3N0Yl9pICAgICAgICAgICAgICAwMTAwIDAgMgord2JkX3dlX2kgICAgICAgICAgICAgICAKK3diZF9hZHJfaVxbMzFcXSAgICAgICAgCit3YmRfYWRyX2lcWzMwXF0gICAgICAgIAord2JkX2Fkcl9pXFsyOVxdICAgICAgICAKK3diZF9hZHJfaVxbMjhcXSAgICAgICAgCit3YmRfYWRyX2lcWzI3XF0gICAgICAgIAord2JkX2Fkcl9pXFsyNlxdICAgICAgICAKK3diZF9hZHJfaVxbMjVcXSAgICAgICAgCit3YmRfYWRyX2lcWzI0XF0gICAgICAgIAord2JkX2Fkcl9pXFsyM1xdICAgICAgCit3YmRfYWRyX2lcWzIyXF0gICAgICAKK3diZF9hZHJfaVxbMjFcXSAgICAgIAord2JkX2Fkcl9pXFsyMFxdICAgICAgCit3YmRfYWRyX2lcWzE5XF0gICAgICAKK3diZF9hZHJfaVxbMThcXSAgICAgIAord2JkX2Fkcl9pXFsxN1xdICAgICAgCit3YmRfYWRyX2lcWzE2XF0gICAgICAKK3diZF9hZHJfaVxbMTVcXSAgICAgIAord2JkX2Fkcl9pXFsxNFxdICAgICAgCit3YmRfYWRyX2lcWzEzXF0gICAgICAKK3diZF9hZHJfaVxbMTJcXSAgICAgIAord2JkX2Fkcl9pXFsxMVxdICAgICAgCit3YmRfYWRyX2lcWzEwXF0gICAgICAKK3diZF9hZHJfaVxbOVxdICAgICAgIAord2JkX2Fkcl9pXFs4XF0gICAgICAgCit3YmRfYWRyX2lcWzdcXSAgICAgICAKK3diZF9hZHJfaVxbNlxdICAgICAgIAord2JkX2Fkcl9pXFs1XF0gICAgICAgCit3YmRfYWRyX2lcWzRcXSAgICAgICAKK3diZF9hZHJfaVxbM1xdICAgICAgIAord2JkX2Fkcl9pXFsyXF0gICAgICAgCit3YmRfYWRyX2lcWzFcXSAgICAgICAKK3diZF9hZHJfaVxbMFxdICAgICAgIAord2JkX3NlbF9pXFszXF0gICAgICAgCit3YmRfc2VsX2lcWzJcXSAgICAgICAKK3diZF9zZWxfaVxbMVxdICAgICAgIAord2JkX3NlbF9pXFswXF0gICAgICAgCit3YmRfYmxfaVxbOVxdICAgICAgIAord2JkX2JsX2lcWzhcXSAgICAgICAKK3diZF9ibF9pXFs3XF0gICAgICAgCit3YmRfYmxfaVxbNlxdICAgICAgIAord2JkX2JsX2lcWzVcXSAgICAgICAKK3diZF9ibF9pXFs0XF0gICAgICAgCit3YmRfYmxfaVxbM1xdICAgICAgIAord2JkX2JsX2lcWzJcXSAgICAgICAKK3diZF9ibF9pXFsxXF0gICAgICAgCit3YmRfYmxfaVxbMFxdICAgICAgIAord2JkX2JyeV9pCit3YmRfZGF0X2lcWzMxXF0gICAgICAKK3diZF9kYXRfaVxbMzBcXSAgICAgIAord2JkX2RhdF9pXFsyOVxdICAgICAgCit3YmRfZGF0X2lcWzI4XF0gICAgICAKK3diZF9kYXRfaVxbMjdcXSAgICAgIAord2JkX2RhdF9pXFsyNlxdICAgICAgCit3YmRfZGF0X2lcWzI1XF0gICAgICAKK3diZF9kYXRfaVxbMjRcXSAgICAgIAord2JkX2RhdF9pXFsyM1xdICAgICAgCit3YmRfZGF0X2lcWzIyXF0gICAgICAKK3diZF9kYXRfaVxbMjFcXSAgICAgIAord2JkX2RhdF9pXFsyMFxdICAgICAgCit3YmRfZGF0X2lcWzE5XF0gICAgICAKK3diZF9kYXRfaVxbMThcXSAgICAgIAord2JkX2RhdF9pXFsxN1xdICAgICAgCit3YmRfZGF0X2lcWzE2XF0gICAgICAKK3diZF9kYXRfaVxbMTVcXSAgICAgIAord2JkX2RhdF9pXFsxNFxdICAgICAgCit3YmRfZGF0X2lcWzEzXF0gICAgICAKK3diZF9kYXRfaVxbMTJcXSAgICAgIAord2JkX2RhdF9pXFsxMVxdICAgICAgCit3YmRfZGF0X2lcWzEwXF0gICAgICAKK3diZF9kYXRfaVxbOVxdICAgICAgIAord2JkX2RhdF9pXFs4XF0gICAgICAgCit3YmRfZGF0X2lcWzdcXSAgICAgICAKK3diZF9kYXRfaVxbNlxdICAgICAgIAord2JkX2RhdF9pXFs1XF0gICAgICAgCit3YmRfZGF0X2lcWzRcXSAgICAgICAKK3diZF9kYXRfaVxbM1xdICAgICAgIAord2JkX2RhdF9pXFsyXF0gICAgICAgCit3YmRfZGF0X2lcWzFcXSAgICAgICAKK3diZF9kYXRfaVxbMFxdICAgICAgIAord2JkX2RhdF9vXFszMVxdICAgICAgCit3YmRfZGF0X29cWzMwXF0gICAgICAKK3diZF9kYXRfb1xbMjlcXSAgICAgIAord2JkX2RhdF9vXFsyOFxdICAgICAgCit3YmRfZGF0X29cWzI3XF0gICAgICAKK3diZF9kYXRfb1xbMjZcXSAgICAgIAord2JkX2RhdF9vXFsyNVxdICAgICAgCit3YmRfZGF0X29cWzI0XF0gICAgICAKK3diZF9kYXRfb1xbMjNcXSAgICAgIAord2JkX2RhdF9vXFsyMlxdICAgICAgCit3YmRfZGF0X29cWzIxXF0gICAgICAKK3diZF9kYXRfb1xbMjBcXSAgICAgIAord2JkX2RhdF9vXFsxOVxdICAgICAgCit3YmRfZGF0X29cWzE4XF0gICAgICAKK3diZF9kYXRfb1xbMTdcXSAgICAgIAord2JkX2RhdF9vXFsxNlxdICAgICAgCit3YmRfZGF0X29cWzE1XF0gICAgICAKK3diZF9kYXRfb1xbMTRcXSAgICAgIAord2JkX2RhdF9vXFsxM1xdICAgICAgCit3YmRfZGF0X29cWzEyXF0gICAgICAKK3diZF9kYXRfb1xbMTFcXSAgICAgIAord2JkX2RhdF9vXFsxMFxdICAgICAgCit3YmRfZGF0X29cWzlcXSAgICAgIAord2JkX2RhdF9vXFs4XF0gICAgICAKK3diZF9kYXRfb1xbN1xdICAgICAgCit3YmRfZGF0X29cWzZcXSAgICAgIAord2JkX2RhdF9vXFs1XF0gICAgICAKK3diZF9kYXRfb1xbNFxdICAgICAgCit3YmRfZGF0X29cWzNcXSAgICAgIAord2JkX2RhdF9vXFsyXF0gICAgICAKK3diZF9kYXRfb1xbMVxdICAgICAgCit3YmRfZGF0X29cWzBcXSAgICAgIAord2JkX2Fja19vICAgICAgICAgICAKK3diZF9sYWNrX28gICAgICAgICAgIAord2JkX2Vycl9vICAgICAgICAgICAKZGlmZiAtLWdpdCBhL29wZW5sYW5lL3FzcGltL3N0YS50Y2wgYi9vcGVubGFuZS9xc3BpbS9zdGEudGNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmOTE3MjYKLS0tIC9kZXYvbnVsbAorKysgYi9vcGVubGFuZS9xc3BpbS9zdGEudGNsCkBAIC0wLDAgKzEsODggQEAKKyMgU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogIDIwMjEgLCBEaW5lc2ggQW5uYXl5YQorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyMgU1BEWC1GaWxlQ29udHJpYnV0b3I6IE1vZGlmaWVkIGJ5IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisKKworc2V0IDo6ZW52KExJQl9GQVNURVNUKSAiL2hvbWUvZGluZXNoYS93b3JrYXJlYS9wZGsvc2t5MTMwQS9saWJzLnJlZi9za3kxMzBfZmRfc2NfaGQvbGliL3NreTEzMF9mZF9zY19oZF9fZmZfbjQwQ18xdjk1LmxpYiIKK3NldCA6OmVudihMSUJfU0xPV0VTVCkgIi9ob21lL2RpbmVzaGEvd29ya2FyZWEvcGRrL3NreTEzMEEvbGlicy5yZWYvc2t5MTMwX2ZkX3NjX2hkL2xpYi9za3kxMzBfZmRfc2NfaGRfX3NzXzEwMENfMXY2MC5saWIiCitzZXQgOjplbnYoQ1VSUkVOVF9ORVRMSVNUKSAvcHJvamVjdC9vcGVubGFuZS9zcGlfbWFzdGVyL3J1bnMvc3BpX21hc3Rlci9yZXN1bHRzL2x2cy9zcGltX3RvcC5sdnMucG93ZXJlZC52CitzZXQgOjplbnYoREVTSUdOX05BTUUpICJzcGltX3RvcCIKK3NldCA6OmVudihDVVJSRU5UX1NQRUYpIC9wcm9qZWN0L29wZW5sYW5lL3NwaV9tYXN0ZXIvcnVucy9zcGlfbWFzdGVyL3Jlc3VsdHMvcm91dGluZy9zcGltX3RvcC5zcGVmCitzZXQgOjplbnYoQkFTRV9TRENfRklMRSkgIi9wcm9qZWN0L29wZW5sYW5lL3NwaV9tYXN0ZXIvYmFzZS5zZGMiCitzZXQgOjplbnYoU1lOVEhfRFJJVklOR19DRUxMKSAic2t5MTMwX2ZkX3NjX2hkX19pbnZfOCIKK3NldCA6OmVudihTWU5USF9EUklWSU5HX0NFTExfUElOKSAiWSIKK3NldCA6OmVudihTWU5USF9DQVBfTE9BRCkgIjE3LjY1Igorc2V0IDo6ZW52KFdJUkVfUkNfTEFZRVIpICJtZXQxIgorCisKK3NldF9jbWRfdW5pdHMgLXRpbWUgbnMgLWNhcGFjaXRhbmNlIHBGIC1jdXJyZW50IG1BIC12b2x0YWdlIFYgLXJlc2lzdGFuY2Uga09obSAtZGlzdGFuY2UgdW0KK3JlYWRfbGliZXJ0eSAtbWluICQ6OmVudihMSUJfRkFTVEVTVCkKK3JlYWRfbGliZXJ0eSAtbWF4ICQ6OmVudihMSUJfU0xPV0VTVCkKK3JlYWRfdmVyaWxvZyAkOjplbnYoQ1VSUkVOVF9ORVRMSVNUKQorbGlua19kZXNpZ24gICQ6OmVudihERVNJR05fTkFNRSkKKworcmVhZF9zcGVmICAkOjplbnYoQ1VSUkVOVF9TUEVGKQorCityZWFkX3NkYyAtZWNobyAkOjplbnYoQkFTRV9TRENfRklMRSkKKworIyBjaGVjayBmb3IgbWlzc2luZyBjb25zdHJhaW50cworY2hlY2tfc2V0dXAgIC12ZXJib3NlID4gdW5jb25zdHJhaW50cy5ycHQKKworc2V0X29wZXJhdGluZ19jb25kaXRpb25zIC1hbmFseXNpc190eXBlIHNpbmdsZQorIyBQcm9wZ2F0ZSB0aGUgY2xvY2sKK3NldF9wcm9wYWdhdGVkX2Nsb2NrIFthbGxfY2xvY2tzXQorCityZXBvcnRfdG5zCityZXBvcnRfd25zCityZXBvcnRfcG93ZXIgCityZXBvcnRfY2hlY2tzIC11bmlxdWUgLXNsYWNrX21heCAtMC4wIC1ncm91cF9jb3VudCAxMDAgCityZXBvcnRfY2hlY2tzIC11bmlxdWUgLXNsYWNrX21pbiAtMC4wIC1ncm91cF9jb3VudCAxMDAgCityZXBvcnRfY2hlY2tzIC1wYXRoX2RlbGF5IG1pbl9tYXggCityZXBvcnRfY2hlY2tzIC1ncm91cF9jb3VudCAxMDAgIC1zbGFja19tYXggLTAuMDEgID4gdGltaW5nLnJwdAorCityZXBvcnRfY2hlY2tzIC1ncm91cF9jb3VudCAxMDAgIC1zbGFja19taW4gLTAuMDEgPj4gdGltaW5nLnJwdAorCisKK3JlcG9ydF9jaGVja3MgLXRvIFtnZXRfcG9ydCBpb19vdXRbNV1dIC1wYXRoX2RlbGF5IG1pbiA+PiB0aW1pbmcucnB0CityZXBvcnRfY2hlY2tzIC10byBbZ2V0X3BvcnQgaW9fb3V0WzRdXSAtcGF0aF9kZWxheSBtaW4gPj4gdGltaW5nLnJwdAorcmVwb3J0X2NoZWNrcyAtdG8gW2dldF9wb3J0IGlvX291dFszXV0gLXBhdGhfZGVsYXkgbWluID4+IHRpbWluZy5ycHQKK3JlcG9ydF9jaGVja3MgLXRvIFtnZXRfcG9ydCBpb19vdXRbMl1dIC1wYXRoX2RlbGF5IG1pbiA+PiB0aW1pbmcucnB0CityZXBvcnRfY2hlY2tzIC10byBbZ2V0X3BvcnQgaW9fb3V0WzFdXSAtcGF0aF9kZWxheSBtaW4gPj4gdGltaW5nLnJwdAorCityZXBvcnRfY2hlY2tzIC10byBbZ2V0X3BvcnQgaW9fb3V0WzVdXSAtcGF0aF9kZWxheSBtYXggPj4gdGltaW5nLnJwdAorcmVwb3J0X2NoZWNrcyAtdG8gW2dldF9wb3J0IGlvX291dFs0XV0gLXBhdGhfZGVsYXkgbWF4ID4+IHRpbWluZy5ycHQKK3JlcG9ydF9jaGVja3MgLXRvIFtnZXRfcG9ydCBpb19vdXRbM11dIC1wYXRoX2RlbGF5IG1heCA+PiB0aW1pbmcucnB0CityZXBvcnRfY2hlY2tzIC10byBbZ2V0X3BvcnQgaW9fb3V0WzJdXSAtcGF0aF9kZWxheSBtYXggPj4gdGltaW5nLnJwdAorcmVwb3J0X2NoZWNrcyAtdG8gW2dldF9wb3J0IGlvX291dFsxXV0gLXBhdGhfZGVsYXkgbWF4ID4+IHRpbWluZy5ycHQKKworcmVwb3J0X2NoZWNrcyAtdG8gW2dldF9wb3J0IGlvX29lYls1XV0gLXBhdGhfZGVsYXkgbWluID4+IHRpbWluZy5ycHQKK3JlcG9ydF9jaGVja3MgLXRvIFtnZXRfcG9ydCBpb19vZWJbNF1dIC1wYXRoX2RlbGF5IG1pbiA+PiB0aW1pbmcucnB0CityZXBvcnRfY2hlY2tzIC10byBbZ2V0X3BvcnQgaW9fb2ViWzNdXSAtcGF0aF9kZWxheSBtaW4gPj4gdGltaW5nLnJwdAorcmVwb3J0X2NoZWNrcyAtdG8gW2dldF9wb3J0IGlvX29lYlsyXV0gLXBhdGhfZGVsYXkgbWluID4+IHRpbWluZy5ycHQKKworcmVwb3J0X2NoZWNrcyAtdG8gW2dldF9wb3J0IGlvX29lYls1XV0gLXBhdGhfZGVsYXkgbWF4ID4+IHRpbWluZy5ycHQKK3JlcG9ydF9jaGVja3MgLXRvIFtnZXRfcG9ydCBpb19vZWJbNF1dIC1wYXRoX2RlbGF5IG1heCA+PiB0aW1pbmcucnB0CityZXBvcnRfY2hlY2tzIC10byBbZ2V0X3BvcnQgaW9fb2ViWzNdXSAtcGF0aF9kZWxheSBtYXggPj4gdGltaW5nLnJwdAorcmVwb3J0X2NoZWNrcyAtdG8gW2dldF9wb3J0IGlvX29lYlsyXV0gLXBhdGhfZGVsYXkgbWF4ID4+IHRpbWluZy5ycHQKKworcmVwb3J0X2NoZWNrcyAtZnJvbSBbZ2V0X3BvcnQgaW9faW5bNV1dIC1wYXRoX2RlbGF5IG1pbiA+PiB0aW1pbmcucnB0CityZXBvcnRfY2hlY2tzIC1mcm9tIFtnZXRfcG9ydCBpb19pbls0XV0gLXBhdGhfZGVsYXkgbWluID4+IHRpbWluZy5ycHQKK3JlcG9ydF9jaGVja3MgLWZyb20gW2dldF9wb3J0IGlvX2luWzNdXSAtcGF0aF9kZWxheSBtaW4gPj4gdGltaW5nLnJwdAorcmVwb3J0X2NoZWNrcyAtZnJvbSBbZ2V0X3BvcnQgaW9faW5bMl1dIC1wYXRoX2RlbGF5IG1pbiA+PiB0aW1pbmcucnB0CisKK3JlcG9ydF9jaGVja3MgLWZyb20gW2dldF9wb3J0IGlvX2luWzVdXSAtcGF0aF9kZWxheSBtYXggPj4gdGltaW5nLnJwdAorcmVwb3J0X2NoZWNrcyAtZnJvbSBbZ2V0X3BvcnQgaW9faW5bNF1dIC1wYXRoX2RlbGF5IG1heCA+PiB0aW1pbmcucnB0CityZXBvcnRfY2hlY2tzIC1mcm9tIFtnZXRfcG9ydCBpb19pblszXV0gLXBhdGhfZGVsYXkgbWF4ID4+IHRpbWluZy5ycHQKK3JlcG9ydF9jaGVja3MgLWZyb20gW2dldF9wb3J0IGlvX2luWzJdXSAtcGF0aF9kZWxheSBtYXggPj4gdGltaW5nLnJwdApkaWZmIC0tZ2l0IGEvb3BlbmxhbmUvc2FyX2FkYy9jb25maWcudGNsIGIvb3BlbmxhbmUvc2FyX2FkYy9jb25maWcudGNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiNmM4NDUKLS0tIC9kZXYvbnVsbAorKysgYi9vcGVubGFuZS9zYXJfYWRjL2NvbmZpZy50Y2wKQEAgLTAsMCArMSw4NiBAQAorIyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIwIEVmYWJsZXNzIENvcnBvcmF0aW9uCisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorCisjIHNlY3Rpb24gYmVnaW4KK3NldCBzY3JpcHRfZGlyIFtmaWxlIGRpcm5hbWUgW2ZpbGUgbm9ybWFsaXplIFtpbmZvIHNjcmlwdF1dXQorCitzZXQgOjplbnYoREVTSUdOX05BTUUpIHNhcl9hZGMKKyNzZWN0aW9uIGVuZAorc2V0IDo6ZW52KFJVTl9LTEFZT1VUKSAwCitzZXQgOjplbnYoREVTSUdOX0lTX0NPUkUpIDAKK3NldCA6OmVudihGUF9QRE5fQ09SRV9SSU5HKSAwIAorCisjIFVzZXIgQ29uZmlndXJhdGlvbnMKK3NldCA6OmVudihTWU5USF9SRUFEX0JMQUNLQk9YX0xJQikgMQorCisjIyBTb3VyY2UgVmVyaWxvZyBGaWxlcworc2V0IDo6ZW52KFZFUklMT0dfRklMRVMpICJcCisJJHNjcmlwdF9kaXIvLi4vLi4vY2FyYXZlbC92ZXJpbG9nL3J0bC9kZWZpbmVzLnYgXAorCSRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL3Nhcl9hZGMvU0FSLnN2IFwKKwkkc2NyaXB0X2Rpci8uLi8uLi92ZXJpbG9nL3J0bC9zYXJfYWRjL0FDTVAuc3YgXAorCSRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL3Nhcl9hZGMvc2FyX2FkYy5zdiBcCisJJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwvc2FyX2FkYy9hZGNfcmVnLnN2IFwKKyAgICAgICAgJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwvbGliL3JlZ2lzdGVycy52IgorCisjIyBDbG9jayBjb25maWd1cmF0aW9ucworc2V0IDo6ZW52KENMT0NLX1BPUlQpICJjbGsiCitzZXQgOjplbnYoQ0xPQ0tfTkVUKSAgImNsayIKKworc2V0IDo6ZW52KENMT0NLX1BFUklPRCkgIjEwMCIKKworc2V0IDo6ZW52KEZQX1BJTl9PUkRFUl9DRkcpICRzY3JpcHRfZGlyL3Bpbl9vcmRlci5jZmcKK3NldCA6OmVudihQRE5fQ0ZHKSAkc2NyaXB0X2Rpci9wZG4udGNsCisKK3NldCA6OmVudihGUF9TSVpJTkcpICJhYnNvbHV0ZSIKK3NldCA6OmVudihESUVfQVJFQSkgIjAgMCA1MDAgMzAwIgorCisjc2V0IDo6ZW52KEZQX0hPUklaT05UQUxfSEFMTykgMTUKKyNzZXQgOjplbnYoRlBfVkVSVElDQUxfSEFMTykgICAxNQorCisjc2V0IDo6ZW52KEdMQl9SVF9PQlMpICJtZXQyIDEwOS44NTAwMCAxOS44OTUwMCAxNzEuNTQ1MDAgNjkuMjIwMDAiCitzZXQgOjplbnYoQ0xPQ0tfVFJFRV9TWU5USCkgMAorCitzZXQgOjplbnYoUExfVEFSR0VUX0RFTlNJVFkpICIwLjAxIgorc2V0IDo6ZW52KEdMQl9SVF9NQVhMQVlFUikgNQorc2V0IDo6ZW52KEdMQl9SVF9BREpVU1RNRU5UKSAwLjE1CisKK3NldCA6OmVudihGUF9QRE5fQ0hFQ0tfTk9ERVMpIDAKK3NldCA6OmVudihGUF9QRE5fVlBJVENIKSAiNDUiCitzZXQgOjplbnYoRlBfUEROX1ZXSURUSCkgIjMuNSIKKyMKK3NldCA6OmVudihGUF9QRE5fSFBJVENIKSAiNDAiCitzZXQgOjplbnYoRlBfUEROX0hXSURUSCkgIjYuNSIKKworc2V0IDo6ZW52KFBMX1JFU0laRVJfREVTSUdOX09QVElNSVpBVElPTlMpIDEKK3NldCA6OmVudihQTF9SRVNJWkVSX1RJTUlOR19PUFRJTUlaQVRJT05TKSAxCisKK3NldCA6OmVudihESU9ERV9JTlNFUlRJT05fU1RSQVRFR1kpIDQKKworI3NldCA6OmVudihGUF9WRVJUSUNBTF9IQUxPKSAiMzUiCisjc2V0IDo6ZW52KEZQX0hFUlRJQ0FMX0hBTE8pICIzNSIKKworCisjIyBJbnRlcm5hbCBNYWNyb3MKKyMjIyBNYWNybyBQbGFjZW1lbnQKKyNzZXQgOjplbnYoTUFDUk9fUExBQ0VNRU5UX0NGRykgJHNjcmlwdF9kaXIvbWFjcm8uY2ZnCisKKyMjIyBCbGFjay1ib3ggdmVyaWxvZyBhbmQgdmlld3MKKworc2V0IDo6ZW52KFZERF9ORVRTKSBbbGlzdCB7dmNjZDF9IHt2Y2NkMn1dCitzZXQgOjplbnYoR05EX05FVFMpIFtsaXN0IHt2c3NkMX0ge3Zzc2QyfV0KK3NldCA6OmVudihTWU5USF9VU0VfUEdfUElOU19ERUZJTkVTKSAiVVNFX1BPV0VSX1BJTlMiCisKKyMjIExWUyBtaXNtYXRjaCBpcyB0byBiZSBzb2x2ZWQgbWFudWFsbHkgYnkgc2hvcnRpbmcgVkREIGFuZCBWU1MgcGlucyB0byB0aGUgY29yZSByaW5nIAorc2V0IDo6ZW52KFFVSVRfT05fTFZTX0VSUk9SKSAiMCIKZGlmZiAtLWdpdCBhL29wZW5sYW5lL3Nhcl9hZGMvaW50ZXJhY3RpdmUudGNsIGIvb3BlbmxhbmUvc2FyX2FkYy9pbnRlcmFjdGl2ZS50Y2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ0YjUxNwotLS0gL2Rldi9udWxsCisrKyBiL29wZW5sYW5lL3Nhcl9hZGMvaW50ZXJhY3RpdmUudGNsCkBAIC0wLDAgKzEsMjE5IEBACisjIS91c3IvYmluL3RjbHNoCisjIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjAgRWZhYmxlc3MgQ29ycG9yYXRpb24KKyMgQ29weXJpZ2h0IDIwMjAgRWZhYmxlc3MgQ29ycG9yYXRpb24KKyMgQ29weXJpZ2h0IDIwMjAgU3lsdmFpbiBNdW5hdXQKKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisKK3BhY2thZ2UgcmVxdWlyZSBvcGVubGFuZTsKKworCitwcm9jIHJ1bl9wbGFjZW1lbnRfc3RlcCB7YXJnc30geworICAgICMgc2V0IHBkbmRlZl9kaXJuYW1lIFtmaWxlIGRpcm5hbWUgJDo6ZW52KHBkbl90bXBfZmlsZV90YWcpLmRlZl0KKyAgICAjIHNldCBwZG5kZWYgW2xpbmRleCBbZ2xvYiAkcGRuZGVmX2Rpcm5hbWUvKnBkbipdIDBdCisgICAgIyBzZXRfZGVmICRwZG5kZWYKKyAgICBpZiB7ICEgWyBpbmZvIGV4aXN0cyA6OmVudihQTEFDRU1FTlRfQ1VSUkVOVF9ERUYpIF0gfSB7CisgICAgICAgIHNldCA6OmVudihQTEFDRU1FTlRfQ1VSUkVOVF9ERUYpICQ6OmVudihDVVJSRU5UX0RFRikKKyAgICB9IGVsc2UgeworICAgICAgICBzZXQgOjplbnYoQ1VSUkVOVF9ERUYpICQ6OmVudihQTEFDRU1FTlRfQ1VSUkVOVF9ERUYpCisgICAgfQorCisgICAgcnVuX3BsYWNlbWVudAorfQorCitwcm9jIHJ1bl9jdHNfc3RlcCB7YXJnc30geworICAgICMgc2V0X2RlZiAkOjplbnYob3BlbmRwX3Jlc3VsdF9maWxlX3RhZykuZGVmCisgICAgaWYgeyAhIFsgaW5mbyBleGlzdHMgOjplbnYoQ1RTX0NVUlJFTlRfREVGKSBdIH0geworICAgICAgICBzZXQgOjplbnYoQ1RTX0NVUlJFTlRfREVGKSAkOjplbnYoQ1VSUkVOVF9ERUYpCisgICAgfSBlbHNlIHsKKyAgICAgICAgc2V0IDo6ZW52KENVUlJFTlRfREVGKSAkOjplbnYoQ1RTX0NVUlJFTlRfREVGKQorICAgIH0KKworICAgIHJ1bl9jdHMKKyAgICBydW5fcmVzaXplcl90aW1pbmcKK30KKworcHJvYyBydW5fcm91dGluZ19zdGVwIHthcmdzfSB7CisgICAgIyBzZXQgcmVzaXplcmRlZl9kaXJuYW1lIFtmaWxlIGRpcm5hbWUgJDo6ZW52KHJlc2l6ZXJfdG1wX2ZpbGVfdGFnKV90aW1pbmcuZGVmXQorICAgICMgc2V0IHJlc2l6ZXJkZWYgW2xpbmRleCBbZ2xvYiAkcmVzaXplcmRlZl9kaXJuYW1lLypyZXNpemVyKl0gMF0KKyAgICAjIHNldF9kZWYgJHJlc2l6ZXJkZWYKKyAgICBpZiB7ICEgWyBpbmZvIGV4aXN0cyA6OmVudihST1VUSU5HX0NVUlJFTlRfREVGKSBdIH0geworICAgICAgICBzZXQgOjplbnYoUk9VVElOR19DVVJSRU5UX0RFRikgJDo6ZW52KENVUlJFTlRfREVGKQorICAgIH0gZWxzZSB7CisgICAgICAgIHNldCA6OmVudihDVVJSRU5UX0RFRikgJDo6ZW52KFJPVVRJTkdfQ1VSUkVOVF9ERUYpCisgICAgfQorICAgIHJ1bl9yb3V0aW5nCit9CisKK3Byb2MgcnVuX2Rpb2RlX2luc2VydGlvbl8yXzVfc3RlcCB7YXJnc30geworICAgICMgc2V0X2RlZiAkOjplbnYodHJpdG9uUm91dGVfcmVzdWx0X2ZpbGVfdGFnKS5kZWYKKyAgICBpZiB7ICEgWyBpbmZvIGV4aXN0cyA6OmVudihESU9ERV9JTlNFUlRJT05fQ1VSUkVOVF9ERUYpIF0gfSB7CisgICAgICAgIHNldCA6OmVudihESU9ERV9JTlNFUlRJT05fQ1VSUkVOVF9ERUYpICQ6OmVudihDVVJSRU5UX0RFRikKKyAgICB9IGVsc2UgeworICAgICAgICBzZXQgOjplbnYoQ1VSUkVOVF9ERUYpICQ6OmVudihESU9ERV9JTlNFUlRJT05fQ1VSUkVOVF9ERUYpCisgICAgfQorCWlmIHsgKCQ6OmVudihESU9ERV9JTlNFUlRJT05fU1RSQVRFR1kpID09IDIpIHx8ICgkOjplbnYoRElPREVfSU5TRVJUSU9OX1NUUkFURUdZKSA9PSA1KSB9IHsKKwkJcnVuX2FudGVubmFfY2hlY2sKKwkJaGVhbF9hbnRlbm5hX3Zpb2xhdG9yczsgIyBtb2RpZmllcyB0aGUgcm91dGVkIERFRgorCX0KKworfQorCitwcm9jIHJ1bl9wb3dlcl9waW5zX2luc2VydGlvbl9zdGVwIHthcmdzfSB7CisgICAgIyBzZXRfZGVmICQ6OmVudih0cml0b25Sb3V0ZV9yZXN1bHRfZmlsZV90YWcpLmRlZgorICAgIGlmIHsgISBbIGluZm8gZXhpc3RzIDo6ZW52KFBPV0VSX1BJTlNfSU5TRVJUSU9OX0NVUlJFTlRfREVGKSBdIH0geworICAgICAgICBzZXQgOjplbnYoUE9XRVJfUElOU19JTlNFUlRJT05fQ1VSUkVOVF9ERUYpICQ6OmVudihDVVJSRU5UX0RFRikKKyAgICB9IGVsc2UgeworICAgICAgICBzZXQgOjplbnYoQ1VSUkVOVF9ERUYpICQ6OmVudihQT1dFUl9QSU5TX0lOU0VSVElPTl9DVVJSRU5UX0RFRikKKyAgICB9CisgICAgaWYgeyAkOjplbnYoTFZTX0lOU0VSVF9QT1dFUl9QSU5TKSB9IHsKKwkJd3JpdGVfcG93ZXJlZF92ZXJpbG9nCisJCXNldF9uZXRsaXN0ICQ6OmVudihsdnNfcmVzdWx0X2ZpbGVfdGFnKS5wb3dlcmVkLnYKKyAgICB9CisKK30KKworcHJvYyBydW5fbHZzX3N0ZXAge3sgbHZzX2VuYWJsZWQgMSB9fSB7CisgICAgIyBzZXRfZGVmICQ6OmVudih0cml0b25Sb3V0ZV9yZXN1bHRfZmlsZV90YWcpLmRlZgorICAgIGlmIHsgISBbIGluZm8gZXhpc3RzIDo6ZW52KExWU19DVVJSRU5UX0RFRikgXSB9IHsKKyAgICAgICAgc2V0IDo6ZW52KExWU19DVVJSRU5UX0RFRikgJDo6ZW52KENVUlJFTlRfREVGKQorICAgIH0gZWxzZSB7CisgICAgICAgIHNldCA6OmVudihDVVJSRU5UX0RFRikgJDo6ZW52KExWU19DVVJSRU5UX0RFRikKKyAgICB9CisJaWYgeyAkbHZzX2VuYWJsZWQgfSB7CisJCXJ1bl9tYWdpY19zcGljZV9leHBvcnQKKwkJcnVuX2x2czsgIyByZXF1aXJlcyBydW5fbWFnaWNfc3BpY2VfZXhwb3J0CisJfQorCit9CisKK3Byb2MgcnVuX2RyY19zdGVwIHt7IGRyY19lbmFibGVkIDEgfX0geworICAgIGlmIHsgISBbIGluZm8gZXhpc3RzIDo6ZW52KERSQ19DVVJSRU5UX0RFRikgXSB9IHsKKyAgICAgICAgc2V0IDo6ZW52KERSQ19DVVJSRU5UX0RFRikgJDo6ZW52KENVUlJFTlRfREVGKQorICAgIH0gZWxzZSB7CisgICAgICAgIHNldCA6OmVudihDVVJSRU5UX0RFRikgJDo6ZW52KERSQ19DVVJSRU5UX0RFRikKKyAgICB9CisJaWYgeyAkZHJjX2VuYWJsZWQgfSB7CisJCXJ1bl9tYWdpY19kcmMKKwkJcnVuX2tsYXlvdXRfZHJjCisJfQorfQorCitwcm9jIHJ1bl9hbnRlbm5hX2NoZWNrX3N0ZXAge3sgYW50ZW5uYV9jaGVja19lbmFibGVkIDEgfX0geworICAgIGlmIHsgISBbIGluZm8gZXhpc3RzIDo6ZW52KEFOVEVOTkFfQ0hFQ0tfQ1VSUkVOVF9ERUYpIF0gfSB7CisgICAgICAgIHNldCA6OmVudihBTlRFTk5BX0NIRUNLX0NVUlJFTlRfREVGKSAkOjplbnYoQ1VSUkVOVF9ERUYpCisgICAgfSBlbHNlIHsKKyAgICAgICAgc2V0IDo6ZW52KENVUlJFTlRfREVGKSAkOjplbnYoQU5URU5OQV9DSEVDS19DVVJSRU5UX0RFRikKKyAgICB9CisJaWYgeyAkYW50ZW5uYV9jaGVja19lbmFibGVkIH0geworCQlydW5fYW50ZW5uYV9jaGVjaworCX0KK30KKworcHJvYyBydW5fZmxvdyB7YXJnc30geworICAgICAgIHNldCBzY3JpcHRfZGlyIFtmaWxlIGRpcm5hbWUgW2ZpbGUgbm9ybWFsaXplIFtpbmZvIHNjcmlwdF1dXQorCisJCXNldCBvcHRpb25zIHsKKwkJey1kZXNpZ24gcmVxdWlyZWR9CisJCXstc2F2ZV9wYXRoIG9wdGlvbmFsfQorCQl7LW5vX2x2cyBvcHRpb25hbH0KKwkgICAgey1ub19kcmMgb3B0aW9uYWx9CisJICAgIHstbm9fYW50ZW5uYWNoZWNrIG9wdGlvbmFsfQorCX0KKwlzZXQgZmxhZ3Mgey1zYXZlfQorCXBhcnNlX2tleV9hcmdzICJydW5fZmxvdyIgYXJncyBhcmdfdmFsdWVzICRvcHRpb25zIGZsYWdzX21hcCAkZmxhZ3MgLW5vX2NvbnN1bWUKKworCXByZXAgeyp9JGFyZ3MKKworICAgICAgICBzZXQgTFZTX0VOQUJMRUQgMQorICAgICAgICBzZXQgRFJDX0VOQUJMRUQgMAorICAgICAgICBzZXQgQU5URU5OQUNIRUNLX0VOQUJMRUQgMQorCisgICAgICAgIHNldCBzdGVwcyBbZGljdCBjcmVhdGUgInN5bnRoZXNpcyIge3J1bl9zeW50aGVzaXMgIiIgfSBcCisgICAgICAgICAgICAgICAgImZsb29ycGxhbiIge3J1bl9mbG9vcnBsYW4gIiJ9IFwKKyAgICAgICAgICAgICAgICAicGxhY2VtZW50IiB7cnVuX3BsYWNlbWVudF9zdGVwICIifSBcCisgICAgICAgICAgICAgICAgImN0cyIge3J1bl9jdHNfc3RlcCAiIn0gXAorICAgICAgICAgICAgICAgICJyb3V0aW5nIiB7cnVuX3JvdXRpbmdfc3RlcCAiIn1cCisgICAgICAgICAgICAgICAgImRpb2RlX2luc2VydGlvbiIge3J1bl9kaW9kZV9pbnNlcnRpb25fMl81X3N0ZXAgIiJ9IFwKKyAgICAgICAgICAgICAgICAicG93ZXJfcGluc19pbnNlcnRpb24iIHtydW5fcG93ZXJfcGluc19pbnNlcnRpb25fc3RlcCAiIn0gXAorICAgICAgICAgICAgICAgICJnZHNfbWFnaWMiIHtydW5fbWFnaWMgIiJ9IFwKKyAgICAgICAgICAgICAgICAiZ2RzX2RyY19rbGF5b3V0IiB7cnVuX2tsYXlvdXQgIiJ9IFwKKyAgICAgICAgICAgICAgICAiZ2RzX3hvcl9rbGF5b3V0IiB7cnVuX2tsYXlvdXRfZ2RzX3hvciAiIn0gXAorICAgICAgICAgICAgICAgICJsdnMiICJydW5fbHZzX3N0ZXAgJExWU19FTkFCTEVEIiBcCisgICAgICAgICAgICAgICAgImRyYyIgInJ1bl9kcmNfc3RlcCAkRFJDX0VOQUJMRUQiIFwKKyAgICAgICAgICAgICAgICAiYW50ZW5uYV9jaGVjayIgInJ1bl9hbnRlbm5hX2NoZWNrX3N0ZXAgJEFOVEVOTkFDSEVDS19FTkFCTEVEIiBcCisgICAgICAgICAgICAgICAgImN2YyIge3J1bl9sZWZfY3ZjfQorICAgICAgICBdCisKKyAgICAgICBzZXRfaWZfdW5zZXQgYXJnX3ZhbHVlcygtdG8pICJjdmMiOworCisgICAgICAgaWYgeyAgW2luZm8gZXhpc3RzIDo6ZW52KENVUlJFTlRfU1RFUCkgXSB9IHsKKyAgICAgICAgICAgcHV0cyAiXFtJTkZPXF06UGlja2luZyB1cCB3aGVyZSBsYXN0IGV4ZWN1dGlvbiBsZWZ0IG9mZiIKKyAgICAgICAgICAgcHV0cyBbZm9ybWF0ICJcW0lORk9cXTpDdXJyZW50IHN0YWdlIGlzICVzICIgJDo6ZW52KENVUlJFTlRfU1RFUCldCisgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgc2V0IDo6ZW52KENVUlJFTlRfU1RFUCkgInN5bnRoZXNpcyI7CisgICAgICAgfQorICAgICAgIHNldF9pZl91bnNldCBhcmdfdmFsdWVzKC1mcm9tKSAkOjplbnYoQ1VSUkVOVF9TVEVQKTsKKyAgICAgICBzZXQgZXhlIDA7CisgICAgICAgZGljdCBmb3Ige3N0ZXBfbmFtZSBzdGVwX2V4ZX0gJHN0ZXBzIHsKKyAgICAgICAgICAgaWYgeyBbIHN0cmluZyBlcXVhbCAkYXJnX3ZhbHVlcygtZnJvbSkgJHN0ZXBfbmFtZSBdIH0geworICAgICAgICAgICAgICAgc2V0IGV4ZSAxOworICAgICAgICAgICB9CisKKyAgICAgICAgICAgaWYgeyAkZXhlIH0geworICAgICAgICAgICAgICAgIyBGb3Igd2hlbiBpdCBmYWlscworICAgICAgICAgICAgICAgc2V0IDo6ZW52KENVUlJFTlRfU1RFUCkgJHN0ZXBfbmFtZQorICAgICAgICAgICAgICAgW2xpbmRleCAkc3RlcF9leGUgMF0gW2xpbmRleCAkc3RlcF9leGUgMV0gOworICAgICAgICAgICB9CisKKyAgICAgICAgICAgaWYgeyBbIHN0cmluZyBlcXVhbCAkYXJnX3ZhbHVlcygtdG8pICRzdGVwX25hbWUgXSB9IHsKKyAgICAgICAgICAgICAgIHNldCBleGUgMDoKKyAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICB9CisKKyAgICAgICB9CisKKyAgICAgICAjIGZvciB3aGVuIGl0IHJlc3VtZXMKKyAgICAgICBzZXQgc3RlcHNfYXNfbGlzdCBbZGljdCBrZXlzICRzdGVwc10KKyAgICAgICBzZXQgbmV4dF9pZHggW2V4cHIgW2xzZWFyY2ggJHN0ZXBzX2FzX2xpc3QgJDo6ZW52KENVUlJFTlRfU1RFUCldICsgMV0KKyAgICAgICBzZXQgOjplbnYoQ1VSUkVOVF9TVEVQKSBbbGluZGV4ICRzdGVwc19hc19saXN0ICRuZXh0X2lkeF0KKworCWlmIHsgIFtpbmZvIGV4aXN0cyBmbGFnc19tYXAoLXNhdmUpIF0gfSB7CisJCWlmIHsgISBbaW5mbyBleGlzdHMgYXJnX3ZhbHVlcygtc2F2ZV9wYXRoKV0gfSB7CisJCQlzZXQgYXJnX3ZhbHVlcygtc2F2ZV9wYXRoKSAiIgorCQl9CisJCXNhdmVfdmlld3MgCS1sZWZfcGF0aCAkOjplbnYobWFnaWNfcmVzdWx0X2ZpbGVfdGFnKS5sZWYgXAorCQkJLWRlZl9wYXRoICQ6OmVudihDVVJSRU5UX0RFRikgXAorCQkJLWdkc19wYXRoICQ6OmVudihtYWdpY19yZXN1bHRfZmlsZV90YWcpLmdkcyBcCisJCQktbWFnX3BhdGggJDo6ZW52KG1hZ2ljX3Jlc3VsdF9maWxlX3RhZykubWFnIFwKKwkJCS1tYWdsZWZfcGF0aCAkOjplbnYobWFnaWNfcmVzdWx0X2ZpbGVfdGFnKS5sZWYubWFnIFwKKwkJCS1zcGljZV9wYXRoICQ6OmVudihtYWdpY19yZXN1bHRfZmlsZV90YWcpLnNwaWNlIFwKKwkJCS1zcGVmX3BhdGggJDo6ZW52KENVUlJFTlRfU1BFRikgXAorCQkJLXZlcmlsb2dfcGF0aCAkOjplbnYoQ1VSUkVOVF9ORVRMSVNUKSBcCisJCQktc2F2ZV9wYXRoICRhcmdfdmFsdWVzKC1zYXZlX3BhdGgpIFwKKwkJCS10YWcgJDo6ZW52KFJVTl9UQUcpCisJfQorCisKKwljYWxjX3RvdGFsX3J1bnRpbWUKKwlzYXZlX3N0YXRlCisJZ2VuZXJhdGVfZmluYWxfc3VtbWFyeV9yZXBvcnQKKwkKKwljaGVja190aW1pbmdfdmlvbGF0aW9ucworCisJcHV0c19zdWNjZXNzICJGbG93IENvbXBsZXRlZCBXaXRob3V0IEZhdGFsIEVycm9ycy4iCisKK30KKworcnVuX2Zsb3cgeyp9JGFyZ3YKZGlmZiAtLWdpdCBhL29wZW5sYW5lL3Nhcl9hZGMvcGRuLnRjbCBiL29wZW5sYW5lL3Nhcl9hZGMvcGRuLnRjbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjNmNjhmCi0tLSAvZGV2L251bGwKKysrIGIvb3BlbmxhbmUvc2FyX2FkYy9wZG4udGNsCkBAIC0wLDAgKzEsOTIgQEAKKyMgUG93ZXIgbmV0cworCitpZiB7ICEgW2luZm8gZXhpc3RzIDo6ZW52KFZERF9ORVQpXSB9IHsKKwlzZXQgOjplbnYoVkREX05FVCkgJDo6ZW52KFZERF9QSU4pCit9CisKK2lmIHsgISBbaW5mbyBleGlzdHMgOjplbnYoR05EX05FVCldIH0geworCXNldCA6OmVudihHTkRfTkVUKSAkOjplbnYoR05EX1BJTikKK30KKworc2V0IDo6cG93ZXJfbmV0cyAkOjplbnYoVkREX05FVCkKK3NldCA6Omdyb3VuZF9uZXRzICQ6OmVudihHTkRfTkVUKQorCitpZiB7IFtpbmZvIGV4aXN0cyA6OmVudihGUF9QRE5fRU5BQkxFX0dMT0JBTF9DT05ORUNUSU9OUyldIH0geworICAgIGlmIHsgJDo6ZW52KEZQX1BETl9FTkFCTEVfR0xPQkFMX0NPTk5FQ1RJT05TKSA9PSAxIH0geworICAgICAgICBhZGRfZ2xvYmFsX2Nvbm5lY3Rpb24gLW5ldCAkOjplbnYoVkREX05FVCkgLWluc3RfcGF0dGVybiAuKiAtcGluX3BhdHRlcm4ge1ZQV1J9IC1wb3dlcgorICAgICAgICBhZGRfZ2xvYmFsX2Nvbm5lY3Rpb24gLW5ldCAkOjplbnYoVkREX05FVCkgLWluc3RfcGF0dGVybiAuKiAtcGluX3BhdHRlcm4ge1ZQQn0gLXBvd2VyCisgICAgICAgIGFkZF9nbG9iYWxfY29ubmVjdGlvbiAtbmV0ICQ6OmVudihHTkRfTkVUKSAtaW5zdF9wYXR0ZXJuIC4qIC1waW5fcGF0dGVybiB7VkdORH0gLWdyb3VuZAorICAgICAgICBhZGRfZ2xvYmFsX2Nvbm5lY3Rpb24gLW5ldCAkOjplbnYoR05EX05FVCkgLWluc3RfcGF0dGVybiAuKiAtcGluX3BhdHRlcm4ge1ZOQn0gLWdyb3VuZAorICAgIH0KK30KKworc2V0X3ZvbHRhZ2VfZG9tYWluIC1uYW1lIENPUkUgLXBvd2VyICQ6OmVudihWRERfTkVUKSAtZ3JvdW5kICQ6OmVudihHTkRfTkVUKQorCisjIEFzc2Vzc2VzIHdoZXRoZXIgdGhlIGRlaXNnbiBpcyB0aGUgY29yZSBvZiB0aGUgY2hpcCBvciBub3QgYmFzZWQgb24gdGhlIAorIyB2YWx1ZSBvZiAkOjplbnYoREVTSUdOX0lTX0NPUkUpIGFuZCB1c2VzIHRoZSBhcHByb3ByaWF0ZSBzdGRjZWxsIHNlY3Rpb24KK2lmIHsgJDo6ZW52KERFU0lHTl9JU19DT1JFKSA9PSAxIH0geworICAgICMgVXNlZCBpZiB0aGUgZGVzaWduIGlzIHRoZSBjb3JlIG9mIHRoZSBjaGlwCisgICAgZGVmaW5lX3Bkbl9ncmlkIC1uYW1lIHN0ZGNlbGxfZ3JpZCAtc3RhcnRzX3dpdGggUE9XRVIgLXZvbHRhZ2VfZG9tYWluIENPUkUgLXBpbnMgW3N1YnN0IHskOjplbnYoRlBfUEROX0xPV0VSX0xBWUVSKSAkOjplbnYoRlBfUEROX1VQUEVSX0xBWUVSKX1dCisgICAgYWRkX3Bkbl9zdHJpcGUgLWdyaWQgc3RkY2VsbF9ncmlkIC1sYXllciAkOjplbnYoRlBfUEROX0xPV0VSX0xBWUVSKSAtd2lkdGggJDo6ZW52KEZQX1BETl9WV0lEVEgpIC1waXRjaCAkOjplbnYoRlBfUEROX1ZQSVRDSCkgLW9mZnNldCAkOjplbnYoRlBfUEROX1ZPRkZTRVQpIC1zdGFydHNfd2l0aCBQT1dFUgorICAgIGFkZF9wZG5fc3RyaXBlIC1ncmlkIHN0ZGNlbGxfZ3JpZCAtbGF5ZXIgJDo6ZW52KEZQX1BETl9VUFBFUl9MQVlFUikgLXdpZHRoICQ6OmVudihGUF9QRE5fSFdJRFRIKSAtcGl0Y2ggJDo6ZW52KEZQX1BETl9IUElUQ0gpIC1vZmZzZXQgJDo6ZW52KEZQX1BETl9IT0ZGU0VUKSAtc3RhcnRzX3dpdGggUE9XRVIKKyAgICBhZGRfcGRuX2Nvbm5lY3QgLWdyaWQgc3RkY2VsbF9ncmlkIC1sYXllcnMgW3N1YnN0IHskOjplbnYoRlBfUEROX0xPV0VSX0xBWUVSKSAkOjplbnYoRlBfUEROX1VQUEVSX0xBWUVSKX1dCit9IGVsc2UgeworICAgICMgVXNlZCBpZiB0aGUgZGVzaWduIGlzIGEgbWFjcm8gaW4gdGhlIGNvcmUKKyAgICBkZWZpbmVfcGRuX2dyaWQgLW5hbWUgc3RkY2VsbF9ncmlkIC1zdGFydHNfd2l0aCBQT1dFUiAtdm9sdGFnZV9kb21haW4gQ09SRSAtcGlucyAkOjplbnYoRlBfUEROX0xPV0VSX0xBWUVSKQorICAgIGFkZF9wZG5fc3RyaXBlIC1ncmlkIHN0ZGNlbGxfZ3JpZCAtbGF5ZXIgJDo6ZW52KEZQX1BETl9MT1dFUl9MQVlFUikgLXdpZHRoICQ6OmVudihGUF9QRE5fVldJRFRIKSAtcGl0Y2ggJDo6ZW52KEZQX1BETl9WUElUQ0gpIC1vZmZzZXQgJDo6ZW52KEZQX1BETl9WT0ZGU0VUKSAtc3RhcnRzX3dpdGggUE9XRVIKK30KKworIyBBZGRzIHRoZSBzdGFuZGFyZCBjZWxsIHJhaWxzIGlmIGVuYWJsZWQuCitpZiB7ICQ6OmVudihGUF9QRE5fRU5BQkxFX1JBSUxTKSA9PSAxIH0geworICAgIGFkZF9wZG5fc3RyaXBlIC1ncmlkIHN0ZGNlbGxfZ3JpZCAtbGF5ZXIgJDo6ZW52KEZQX1BETl9SQUlMU19MQVlFUikgLXdpZHRoICQ6OmVudihGUF9QRE5fUkFJTF9XSURUSCkgLWZvbGxvd3BpbnMgLXN0YXJ0c193aXRoIFBPV0VSCisgICAgYWRkX3Bkbl9jb25uZWN0IC1ncmlkIHN0ZGNlbGxfZ3JpZCAtbGF5ZXJzIFtzdWJzdCB7JDo6ZW52KEZQX1BETl9SQUlMU19MQVlFUikgJDo6ZW52KEZQX1BETl9MT1dFUl9MQVlFUil9XQorfSAKKworCisjIEFkZHMgdGhlIGNvcmUgcmluZyBpZiBlbmFibGVkLgoraWYgeyAkOjplbnYoRlBfUEROX0NPUkVfUklORykgPT0gMSB9IHsKKyAgICBhZGRfcGRuX3JpbmcgLWdyaWQgc3RkY2VsbF9ncmlkIC1sYXllciBbc3Vic3QgeyQ6OmVudihGUF9QRE5fTE9XRVJfTEFZRVIpICQ6OmVudihGUF9QRE5fVVBQRVJfTEFZRVIpfV0gXAorICAgICAgICAgICAgICAgICAtd2lkdGhzIFtzdWJzdCB7JDo6ZW52KEZQX1BETl9DT1JFX1JJTkdfVldJRFRIKSAkOjplbnYoRlBfUEROX0NPUkVfUklOR19IV0lEVEgpfV0gXAorICAgICAgICAgICAgICAgICAtc3BhY2luZ3MgW3N1YnN0IHskOjplbnYoRlBfUEROX0NPUkVfUklOR19WU1BBQ0lORykgJDo6ZW52KEZQX1BETl9DT1JFX1JJTkdfSFNQQUNJTkcpfV0gXAorICAgICAgICAgICAgICAgICAtY29yZV9vZmZzZXQgW3N1YnN0IHskOjplbnYoRlBfUEROX0NPUkVfUklOR19WT0ZGU0VUKSAkOjplbnYoRlBfUEROX0NPUkVfUklOR19IT0ZGU0VUKX1dCit9CisKKyMgQSBnZW5lcmFsIG1hY3JvIHRoYXQgZm9sbG93cyB0aGUgcHJlbWlzZSBvZiB0aGUgc2V0IGhlaXJhcmNoeS4gWW91IG1heSB3YW50IHRvIG1vZGlmeSB0aGlzIG9yIGFkZCBvdGhlciBtYWNybyBjb25maWdzCisjIFRoZSBtYWNybyBwb3dlciBwaW4gbmFtZXMgYXJlIGFzc3VtZWQgdG8gbWF0Y2ggdGhlIFZERCBhbmQgR05EIG5ldCBuYW1lcyAKKyMgVE9ETzogcGFyYW1ldGVyaXplIHRoZSBwb3dlciBwaW4gbmFtZXMgCitzZXQgbWFjcm8geworICAgIG9yaWVudCB7UjAgUjE4MCBNWCBNWSBSOTAgUjI3MCBNWFI5MCBNWVI5MH0KKyAgICBwb3dlcl9waW5zICQ6OmVudihWRERfTkVUKQorICAgIGdyb3VuZF9waW5zICQ6OmVudihHTkRfTkVUKQorICAgIGJsb2NrYWdlcyAibGkxIG1ldDEgbWV0MiBtZXQzIG1ldDQiCisgICAgc3RyYXBzIHsKKyAgICB9CisgICAgY29ubmVjdCB7eyQ6OmVudihGUF9QRE5fTE9XRVJfTEFZRVIpX1BJTl92ZXIgJDo6ZW52KEZQX1BETl9VUFBFUl9MQVlFUil9fQorfQorCitpZiB7ICQ6OmVudihGUF9QRE5fRU5BQkxFX01BQ1JPU19HUklEKSA9PSAxfSB7CisgICAgaWYgeyBbbGxlbmd0aCAkOjplbnYoRlBfUEROX01BQ1JPUyldID4gMCB9IHsKKyAgICAgICAgIyBnZW5lcmF0ZSBhdXRvbWF0aWNhbGx5IHBlciBpbnN0YW5jZToKKyAgICAgICAgZm9yZWFjaCBtYWNyb19pbnN0YW5jZSAkOjplbnYoRlBfUEROX01BQ1JPUykgeworICAgICAgICAgICAgc2V0IG1hY3JvX2luc3RhbmNlX2dyaWQgW3N1YnN0ICRtYWNyb10gCisgICAgICAgICAgICBkaWN0IGFwcGVuZCAkbWFjcm9faW5zdGFuY2VfZ3JpZCBpbnN0YW5jZSAkbWFjcm9faW5zdGFuY2UKKyAgICAgICAgICAgIHNldCA6OmhhbG8gW2xpc3QgJDo6ZW52KEZQX0hPUklaT05UQUxfSEFMTykgJDo6ZW52KEZQX1ZFUlRJQ0FMX0hBTE8pXQorICAgICAgICAgICAgcGRuZ2VuOjpzcGVjaWZ5X2dyaWQgbWFjcm8gW3N1YnN0ICRtYWNyb19pbnN0YW5jZV9ncmlkXQorICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgc2V0IDo6aGFsbyBbbGlzdCAkOjplbnYoRlBfSE9SSVpPTlRBTF9IQUxPKSAkOjplbnYoRlBfVkVSVElDQUxfSEFMTyldCisgICAgICAgIHBkbmdlbjo6c3BlY2lmeV9ncmlkIG1hY3JvIFtzdWJzdCAkbWFjcm9dCisgICAgfQorICAgICMgQ0FOIE5PVCBFTkFCTEUgVEhFIFRDTCBDT01NQU5EIEJFQ0FVU0UgVEhFUkUgSVMgTk8gQVJHVU1FTlQgRk9SIFNQRUNJRllJTkcgVEhFIFBPV0VSIEFORCBHUk9VTkQgUElOIE5BTUVTIE9OIFRIRSBNQUNSTworICAgICMgZGVmaW5lX3Bkbl9ncmlkIC1tYWNybyAtb3JpZW50IHtSMCBSMTgwIE1YIE1ZIFI5MCBSMjcwIE1YUjkwIE1ZUjkwfSAtZ3JpZF9vdmVyX3BnX3BpbnMgLXN0YXJ0c193aXRoIFBPV0VSIC1waW5fZGlyZWN0aW9uIHZlcnRpY2FsIC1oYWxvIFtzdWJzdCB7JDo6ZW52KEZQX0hPUklaT05UQUxfSEFMTykgJDo6ZW52KEZQX1ZFUlRJQ0FMX0hBTE8pfV0KKyAgICAjIGFkZF9wZG5fY29ubmVjdCAtbGF5ZXJzIFtzdWJzdCB7JDo6ZW52KEZQX1BETl9MT1dFUl9MQVlFUikgJDo6ZW52KEZQX1BETl9VUFBFUl9MQVlFUil9XQorfSBlbHNlIHsKKyAgICBkZWZpbmVfcGRuX2dyaWQgLW1hY3JvIC1vcmllbnQge1IwIFIxODAgTVggTVkgUjkwIFIyNzAgTVhSOTAgTVlSOTB9IC1ncmlkX292ZXJfcGdfcGlucyAtc3RhcnRzX3dpdGggUE9XRVIgLWhhbG8gW3N1YnN0IHskOjplbnYoRlBfSE9SSVpPTlRBTF9IQUxPKSAkOjplbnYoRlBfVkVSVElDQUxfSEFMTyl9XQorfQorCisjIFBPV0VSIG9yIEdST1VORCAjU3RkLiBjZWxsIHJhaWxzIHN0YXJ0aW5nIHdpdGggcG93ZXIgb3IgZ3JvdW5kIHJhaWxzIGF0IHRoZSBib3R0b20gb2YgdGhlIGNvcmUgYXJlYQorc2V0IDo6cmFpbHNfc3RhcnRfd2l0aCAiUE9XRVIiIDsKKworIyBQT1dFUiBvciBHUk9VTkQgI1VwcGVyIG1ldGFsIHN0cmlwZXMgc3RhcnRpbmcgd2l0aCBwb3dlciBvciBncm91bmQgcmFpbHMgYXQgdGhlIGxlZnQvYm90dG9tIG9mIHRoZSBjb3JlIGFyZWEKK3NldCA6OnN0cmlwZXNfc3RhcnRfd2l0aCAiUE9XRVIiIDsKKwpkaWZmIC0tZ2l0IGEvb3BlbmxhbmUvc2FyX2FkYy9waW5fb3JkZXIuY2ZnIGIvb3BlbmxhbmUvc2FyX2FkYy9waW5fb3JkZXIuY2ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2OGUxMDUKLS0tIC9kZXYvbnVsbAorKysgYi9vcGVubGFuZS9zYXJfYWRjL3Bpbl9vcmRlci5jZmcKQEAgLTAsMCArMSwxMDYgQEAKKyNCVVNfU09SVAorI01BTlVBTF9QTEFDRQorCisjUworcmVzZXRfbiAgICAgICAgICAKK3B1bHNlMW1fbWNsayAgICAgICAgICAgICAKKworI1cKK2NsayAgICAgICAgICAgICAgICAgICAgICAwMDAgMCAyCityZWdfY3MgICAgICAgICAgICAKK3JlZ193ciAgICAgICAgICAgCityZWdfYWRkclxbN1xdICAgIAorcmVnX2FkZHJcWzZcXSAgICAKK3JlZ19hZGRyXFs1XF0gICAgCityZWdfYWRkclxbNFxdICAgIAorcmVnX2FkZHJcWzNcXSAgICAKK3JlZ19hZGRyXFsyXF0gICAgCityZWdfYWRkclxbMVxdICAgIAorcmVnX2FkZHJcWzBcXSAgICAKK3JlZ19iZVxbM1xdICAgIAorcmVnX2JlXFsyXF0gICAgCityZWdfYmVcWzFcXSAgICAKK3JlZ19iZVxbMFxdICAgIAorcmVnX3dkYXRhXFszMVxdICAgCityZWdfd2RhdGFcWzMwXF0gICAKK3JlZ193ZGF0YVxbMjlcXSAgIAorcmVnX3dkYXRhXFsyOFxdICAgCityZWdfd2RhdGFcWzI3XF0gICAKK3JlZ193ZGF0YVxbMjZcXSAgIAorcmVnX3dkYXRhXFsyNVxdICAgCityZWdfd2RhdGFcWzI0XF0gICAKK3JlZ193ZGF0YVxbMjNcXSAgIAorcmVnX3dkYXRhXFsyMlxdICAgCityZWdfd2RhdGFcWzIxXF0gICAKK3JlZ193ZGF0YVxbMjBcXSAgIAorcmVnX3dkYXRhXFsxOVxdICAgCityZWdfd2RhdGFcWzE4XF0gICAKK3JlZ193ZGF0YVxbMTdcXSAgIAorcmVnX3dkYXRhXFsxNlxdICAgCityZWdfd2RhdGFcWzE1XF0gICAKK3JlZ193ZGF0YVxbMTRcXSAgIAorcmVnX3dkYXRhXFsxM1xdICAgCityZWdfd2RhdGFcWzEyXF0gIAorcmVnX3dkYXRhXFsxMVxdICAKK3JlZ193ZGF0YVxbMTBcXSAgCityZWdfd2RhdGFcWzlcXSAgIAorcmVnX3dkYXRhXFs4XF0gICAKK3JlZ193ZGF0YVxbN1xdICAgCityZWdfd2RhdGFcWzZcXSAgIAorcmVnX3dkYXRhXFs1XF0gICAKK3JlZ193ZGF0YVxbNFxdICAgCityZWdfd2RhdGFcWzNcXSAgIAorcmVnX3dkYXRhXFsyXF0gICAKK3JlZ193ZGF0YVxbMVxdICAgCityZWdfd2RhdGFcWzBcXSAgIAorcmVnX3JkYXRhXFszMVxdICAKK3JlZ19yZGF0YVxbMzBcXSAgCityZWdfcmRhdGFcWzI5XF0gIAorcmVnX3JkYXRhXFsyOFxdICAKK3JlZ19yZGF0YVxbMjdcXSAgCityZWdfcmRhdGFcWzI2XF0gIAorcmVnX3JkYXRhXFsyNVxdICAKK3JlZ19yZGF0YVxbMjRcXSAgCityZWdfcmRhdGFcWzIzXF0gIAorcmVnX3JkYXRhXFsyMlxdICAKK3JlZ19yZGF0YVxbMjFcXSAgCityZWdfcmRhdGFcWzIwXF0gIAorcmVnX3JkYXRhXFsxOVxdICAKK3JlZ19yZGF0YVxbMThcXSAgCityZWdfcmRhdGFcWzE3XF0gIAorcmVnX3JkYXRhXFsxNlxdICAKK3JlZ19yZGF0YVxbMTVcXSAgCityZWdfcmRhdGFcWzE0XF0gIAorcmVnX3JkYXRhXFsxM1xdICAKK3JlZ19yZGF0YVxbMTJcXSAgCityZWdfcmRhdGFcWzExXF0gIAorcmVnX3JkYXRhXFsxMFxdICAKK3JlZ19yZGF0YVxbOVxdICAKK3JlZ19yZGF0YVxbOFxdICAKK3JlZ19yZGF0YVxbN1xdICAKK3JlZ19yZGF0YVxbNlxdICAKK3JlZ19yZGF0YVxbNVxdICAKK3JlZ19yZGF0YVxbNFxdICAKK3JlZ19yZGF0YVxbM1xdICAKK3JlZ19yZGF0YVxbMlxdICAKK3JlZ19yZGF0YVxbMVxdICAKK3JlZ19yZGF0YVxbMFxdICAKK3JlZ19hY2sgICAgICAgCisKKworI04KK3NhcjJkYWNcWzdcXQorc2FyMmRhY1xbNlxdCitzYXIyZGFjXFs1XF0KK3NhcjJkYWNcWzRcXQorc2FyMmRhY1xbM1xdCitzYXIyZGFjXFsyXF0KK3NhcjJkYWNcWzFcXQorc2FyMmRhY1xbMFxdCithbmFsb2dfZGluXFs1XF0KK2FuYWxvZ19kaW5cWzRcXQorYW5hbG9nX2RpblxbM1xdCithbmFsb2dfZGluXFsyXF0KK2FuYWxvZ19kaW5cWzFcXQorYW5hbG9nX2RpblxbMFxdCithbmFsb2dfZGFjX291dApkaWZmIC0tZ2l0IGEvb3BlbmxhbmUvdWFydF9pMmNtX3VzYl9zcGkvYmFzZS5zZGMgYi9vcGVubGFuZS91YXJ0X2kyY21fdXNiX3NwaS9iYXNlLnNkYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWUwNmQ4Ci0tLSAvZGV2L251bGwKKysrIGIvb3BlbmxhbmUvdWFydF9pMmNtX3VzYl9zcGkvYmFzZS5zZGMKQEAgLTAsMCArMSw3NiBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDcmVhdGVkIGJ5IHdyaXRlX3NkYworIyBXZWQgTm92IDEwIDE3OjA4OjU3IDIwMjEKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2N1cnJlbnRfZGVzaWduIHVhcnRfaTJjX3VzYl9zcGlfdG9wCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFRpbWluZyBDb25zdHJhaW50cworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworY3JlYXRlX2Nsb2NrIC1uYW1lIGFwcF9jbGsgLXBlcmlvZCAxMC4wMDAwIFtnZXRfcG9ydHMge2FwcF9jbGt9XQorY3JlYXRlX2Nsb2NrIC1uYW1lIGxpbmVfY2xrIC1wZXJpb2QgMTAwLjAwMDAgW2dldF9waW5zIHt1X3VhcnRfY29yZS51X2xpbmVjbGtfYnVmLnVfbXV4L1h9XQorY3JlYXRlX2Nsb2NrIC1uYW1lIHVzYl9jbGsgLXBlcmlvZCAxMDAuMDAwMCBbZ2V0X3BvcnRzIHt1c2JfY2xrfV0KKworc2V0X2Nsb2NrX3RyYW5zaXRpb24gMC4xNTAwIFthbGxfY2xvY2tzXQorc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1zZXR1cCAwLjI1MDAgW2FsbF9jbG9ja3NdCitzZXRfY2xvY2tfdW5jZXJ0YWludHkgLWhvbGQgMC4yNTAwIFthbGxfY2xvY2tzXQorCisKKworc2V0X2Nsb2NrX2dyb3VwcyAtbmFtZSBhc3luY19jbG9jayAtYXN5bmNocm9ub3VzIFwKKyAtZ3JvdXAgW2dldF9jbG9ja3Mge2FwcF9jbGt9XVwKKyAtZ3JvdXAgW2dldF9jbG9ja3Mge3VzYl9jbGt9XVwKKyAtZ3JvdXAgW2dldF9jbG9ja3Mge2xpbmVfY2xrfV0gLWNvbW1lbnQge0FzeW5jIENsb2NrIGdyb3VwfQorCisjIyMgQ2xrU2tldyBBZGp1c3QKK3NldF9jYXNlX2FuYWx5c2lzIDAgW2dldF9wb3J0cyB7Y2ZnX2Nza2FfdWFydFswXX1dCitzZXRfY2FzZV9hbmFseXNpcyAwIFtnZXRfcG9ydHMge2NmZ19jc2thX3VhcnRbMV19XQorc2V0X2Nhc2VfYW5hbHlzaXMgMCBbZ2V0X3BvcnRzIHtjZmdfY3NrYV91YXJ0WzJdfV0KK3NldF9jYXNlX2FuYWx5c2lzIDAgW2dldF9wb3J0cyB7Y2ZnX2Nza2FfdWFydFszXX1dCisKKworc2V0X21heF9kZWxheSA1IC1mcm9tIFtnZXRfcG9ydHMge3diZF9jbGtfaW50fV0KK3NldF9tYXhfZGVsYXkgNSAtdG8gICBbZ2V0X3BvcnRzIHt3YmRfY2xrX3VhcnR9XQorc2V0X21heF9kZWxheSA1IC1mcm9tIHdiZF9jbGtfaW50IC10byB3YmRfY2xrX3VhcnQKKworCisKK3NldF9pbnB1dF9kZWxheSAzLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHthcHBfY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtpMmNfcnN0bn1dCitzZXRfaW5wdXRfZGVsYXkgMy4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7YXBwX2Nsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7dWFydF9yc3RufV0KK3NldF9pbnB1dF9kZWxheSAzLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHthcHBfY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt1c2JfcnN0bn1dCisKKworc2V0X2lucHV0X2RlbGF5ICAtbWF4IDYuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge2FwcF9jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3JlZ19hZGRyWypdfV0KK3NldF9pbnB1dF9kZWxheSAgLW1heCA2LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHthcHBfY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtyZWdfYmVbKl19XQorc2V0X2lucHV0X2RlbGF5ICAtbWF4IDYuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge2FwcF9jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3JlZ19jc31dCitzZXRfaW5wdXRfZGVsYXkgIC1tYXggNi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7YXBwX2Nsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7cmVnX3dkYXRhWypdfV0KK3NldF9pbnB1dF9kZWxheSAgLW1heCA2LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHthcHBfY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtyZWdfd3J9XQorCitzZXRfaW5wdXRfZGVsYXkgIC1taW4gMi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7YXBwX2Nsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7cmVnX2FkZHJbKl19XQorc2V0X2lucHV0X2RlbGF5ICAtbWluIDIuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge2FwcF9jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3JlZ19iZVsqXX1dCitzZXRfaW5wdXRfZGVsYXkgIC1taW4gMi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7YXBwX2Nsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7cmVnX2NzfV0KK3NldF9pbnB1dF9kZWxheSAgLW1pbiAyLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHthcHBfY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtyZWdfd2RhdGFbKl19XQorc2V0X2lucHV0X2RlbGF5ICAtbWluIDIuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge2FwcF9jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3JlZ193cn1dCisKKworc2V0X291dHB1dF9kZWxheSAtbWF4IDYuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge2FwcF9jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3JlZ19hY2t9XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDYuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge2FwcF9jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3JlZ19yZGF0YVsqXX1dCisKK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHthcHBfY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtyZWdfYWNrfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHthcHBfY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtyZWdfcmRhdGFbKl19XQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEVudmlyb25tZW50CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4gJDo6ZW52KFNZTlRIX0RSSVZJTkdfQ0VMTF9QSU4pIFthbGxfaW5wdXRzXQorc2V0IGNhcF9sb2FkIFtleHByICQ6OmVudihTWU5USF9DQVBfTE9BRCkgLyAxMDAwLjBdCitwdXRzICJcW0lORk9cXTogU2V0dGluZyBsb2FkIHRvOiAkY2FwX2xvYWQiCitzZXRfbG9hZCAgJGNhcF9sb2FkIFthbGxfb3V0cHV0c10KKworc2V0IDo6ZW52KFNZTlRIX1RJTUlOR19ERVJBVEUpIDAuMDUKK3B1dHMgIlxbSU5GT1xdOiBTZXR0aW5nIHRpbWluZyBkZXJhdGUgdG86IFtleHByIHskOjplbnYoU1lOVEhfVElNSU5HX0RFUkFURSkgKiAxMH1dICUiCitzZXRfdGltaW5nX2RlcmF0ZSAtZWFybHkgW2V4cHIgezEtJDo6ZW52KFNZTlRIX1RJTUlOR19ERVJBVEUpfV0KK3NldF90aW1pbmdfZGVyYXRlIC1sYXRlIFtleHByIHsxKyQ6OmVudihTWU5USF9USU1JTkdfREVSQVRFKX1dCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgRGVzaWduIFJ1bGVzCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9vcGVubGFuZS91YXJ0X2kyY21fdXNiX3NwaS9jb25maWcudGNsIGIvb3BlbmxhbmUvdWFydF9pMmNtX3VzYl9zcGkvY29uZmlnLnRjbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTE5ZWZmCi0tLSAvZGV2L251bGwKKysrIGIvb3BlbmxhbmUvdWFydF9pMmNtX3VzYl9zcGkvY29uZmlnLnRjbApAQCAtMCwwICsxLDEyNCBAQAorIyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAgMjAyMSAsIERpbmVzaCBBbm5heXlhCisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorIyBTUERYLUZpbGVDb250cmlidXRvcjogTW9kaWZpZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKworIyBHbG9iYWwKKyMgLS0tLS0tCisKK3NldCBzY3JpcHRfZGlyIFtmaWxlIGRpcm5hbWUgW2ZpbGUgbm9ybWFsaXplIFtpbmZvIHNjcmlwdF1dXQorIyBOYW1lCitzZXQgOjplbnYoREVTSUdOX05BTUUpIHVhcnRfaTJjX3VzYl9zcGlfdG9wCisKKworc2V0IDo6ZW52KERFU0lHTl9JU19DT1JFKSAiMCIKK3NldCA6OmVudihGUF9QRE5fQ09SRV9SSU5HKSAiMCIKKworIyBUaW1pbmcgY29uZmlndXJhdGlvbgorc2V0IDo6ZW52KENMT0NLX1BFUklPRCkgIjEwIgorc2V0IDo6ZW52KENMT0NLX1BPUlQpICJhcHBfY2xrIHVzYl9jbGsgdV91YXJ0X2NvcmUudV9saW5lY2xrX2J1Zi51X211eC9YIgorCitzZXQgOjplbnYoU1lOVEhfTUFYX0ZBTk9VVCkgNAorCisjIyBDVFMgQlVGRkVSCitzZXQgOjplbnYoQ1RTX0NMS19CVUZGRVJfTElTVCkgInNreTEzMF9mZF9zY19oZF9fY2xrYnVmXzQgc2t5MTMwX2ZkX3NjX2hkX19jbGtidWZfOCIKK3NldCA6OmVudihDVFNfU0lOS19DTFVTVEVSSU5HX1NJWkUpICIxNiIKK3NldCA6OmVudihDTE9DS19CVUZGRVJfRkFOT1VUKSAiOCIKKworIyBTb3VyY2VzCisjIC0tLS0tLS0KKworIyBMb2NhbCBzb3VyY2VzICsgbm8ydXNiIHNvdXJjZXMKK3NldCA6OmVudihWRVJJTE9HX0ZJTEVTKSAiXAorICAgICRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL2Nsa19za2V3X2FkanVzdC9zcmMvY2xrX3NrZXdfYWRqdXN0Lmd2IFwKKyAgICAkc2NyaXB0X2Rpci8uLi8uLi92ZXJpbG9nL3J0bC91YXJ0L3NyYy91YXJ0X2NvcmUuc3YgIFwKKyAgICAkc2NyaXB0X2Rpci8uLi8uLi92ZXJpbG9nL3J0bC91YXJ0L3NyYy91YXJ0X2NmZy5zdiAgIFwKKyAgICAkc2NyaXB0X2Rpci8uLi8uLi92ZXJpbG9nL3J0bC91YXJ0L3NyYy91YXJ0X3J4ZnNtLnN2IFwKKyAgICAkc2NyaXB0X2Rpci8uLi8uLi92ZXJpbG9nL3J0bC91YXJ0L3NyYy91YXJ0X3R4ZnNtLnN2IFwKKyAgICAkc2NyaXB0X2Rpci8uLi8uLi92ZXJpbG9nL3J0bC9saWIvYXN5bmNfd2Iuc3YgICBcCisgICAgJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwvbGliL2FzeW5jX2ZpZm8uc3YgICAgICBcCisgICAgJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwvbGliL2FzeW5jX2ZpZm9fdGguc3YgICBcCisgICAgJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwvbGliL3Jlc2V0X3N5bmMuc3YgICAgICBcCisgICAgJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwvbGliL2RvdWJsZV9zeW5jX2xvdy52ICBcCisgICAgJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwvbGliL2Nsa19jdGwudiAgICAgICAgICBcCisgICAgJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwvbGliL3JlZ2lzdGVycy52ICAgICAgICBcCisgICAgJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwvaTJjbS9zcmMvY29yZS9pMmNtX2JpdF9jdHJsLnYgICAgICBcCisgICAgJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwvaTJjbS9zcmMvY29yZS9pMmNtX2J5dGVfY3RybC52ICAgICBcCisgICAgJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwvaTJjbS9zcmMvY29yZS9pMmNtX3RvcC52ICAgICAgICAgICBcCisgICAgJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwvdXNiMV9ob3N0L3NyYy9jb3JlL3VzYmhfY29yZS5zdiAgICBcCisgICAgJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwvdXNiMV9ob3N0L3NyYy9jb3JlL3VzYmhfY3JjMTYuc3YgICBcCisgICAgJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwvdXNiMV9ob3N0L3NyYy9jb3JlL3VzYmhfY3JjNS5zdiAgICBcCisgICAgJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwvdXNiMV9ob3N0L3NyYy9jb3JlL3VzYmhfZmlmby5zdiAgICBcICAKKyAgICAkc2NyaXB0X2Rpci8uLi8uLi92ZXJpbG9nL3J0bC91c2IxX2hvc3Qvc3JjL2NvcmUvdXNiaF9zaWUuc3YgICAgIFwKKyAgICAkc2NyaXB0X2Rpci8uLi8uLi92ZXJpbG9nL3J0bC91c2IxX2hvc3Qvc3JjL3BoeS91c2JfZnNfcGh5LnYgICAgIFwKKyAgICAkc2NyaXB0X2Rpci8uLi8uLi92ZXJpbG9nL3J0bC91c2IxX2hvc3Qvc3JjL3BoeS91c2JfdHJhbnNjZWl2ZXIudlwKKyAgICAkc2NyaXB0X2Rpci8uLi8uLi92ZXJpbG9nL3J0bC91c2IxX2hvc3Qvc3JjL3RvcC91c2IxX2hvc3Quc3YgICAgIFwKKyAgICAkc2NyaXB0X2Rpci8uLi8uLi92ZXJpbG9nL3J0bC9zc3BpbS9zcmMvc3NwaW1fdG9wLnN2ICAgICAgICAgICAgIFwKKyAgICAkc2NyaXB0X2Rpci8uLi8uLi92ZXJpbG9nL3J0bC9zc3BpbS9zcmMvc3NwaW1fY3RsLnN2ICAgICAgICAgICAgIFwKKyAgICAkc2NyaXB0X2Rpci8uLi8uLi92ZXJpbG9nL3J0bC9zc3BpbS9zcmMvc3NwaW1faWYuc3YgICAgICAgICAgICAgIFwKKyAgICAkc2NyaXB0X2Rpci8uLi8uLi92ZXJpbG9nL3J0bC9zc3BpbS9zcmMvc3NwaW1fY2ZnLnN2ICAgICAgICAgICAgIFwKKyAgICAkc2NyaXB0X2Rpci8uLi8uLi92ZXJpbG9nL3J0bC91YXJ0X2kyY191c2Jfc3BpL3NyYy91YXJ0X2kyY191c2Jfc3BpLnN2XAorICAgICRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL2xpYi9jdGVjaF9jZWxscy5zdiAgICAgXAorICAgICIKKworc2V0IDo6ZW52KFNZTlRIX1JFQURfQkxBQ0tCT1hfTElCKSAxCitzZXQgOjplbnYoVkVSSUxPR19JTkNMVURFX0RJUlMpIFtnbG9iICRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL2kyY20vc3JjL2luY2x1ZGVzICRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL3VzYjFfaG9zdC9zcmMvaW5jbHVkZXMgXQorc2V0IDo6ZW52KFNZTlRIX0RFRklORVMpIFtsaXN0IFNZTlRIRVNJUyBdCisKK3NldCA6OmVudihTRENfRklMRSkgIiRzY3JpcHRfZGlyL2Jhc2Uuc2RjIgorc2V0IDo6ZW52KEJBU0VfU0RDX0ZJTEUpICIkc2NyaXB0X2Rpci9iYXNlLnNkYyIKKworc2V0IDo6ZW52KExFQ19FTkFCTEUpIDAKKworc2V0IDo6ZW52KFZERF9QSU4pIFtsaXN0IHt2Y2NkMX1dCitzZXQgOjplbnYoR05EX1BJTikgW2xpc3Qge3Zzc2QxfV0KKworCisjIEZsb29ycGxhbm5pbmcKKyMgLS0tLS0tLS0tLS0tLQorCitzZXQgOjplbnYoRlBfUElOX09SREVSX0NGRykgJDo6ZW52KERFU0lHTl9ESVIpL3Bpbl9vcmRlci5jZmcKK3NldCA6OmVudihGUF9TSVpJTkcpICJhYnNvbHV0ZSIKK3NldCA6OmVudihESUVfQVJFQSkgW2xpc3QgMC4wIDAuMCA1MDAuMCA3MDAuMF0KKworCisKKyMgSWYgeW91J3JlIGdvaW5nIHRvIHVzZSBtdWx0aXBsZSBwb3dlciBkb21haW5zLCB0aGVuIGtlZXAgdGhpcyBkaXNhYmxlZC4KK3NldCA6OmVudihSVU5fQ1ZDKSAwCisKKyNzZXQgOjplbnYoUEROX0NGRykgJHNjcmlwdF9kaXIvcGRuLnRjbAorCisKK3NldCA6OmVudihQTF9USU1FX0RSSVZFTikgMQorc2V0IDo6ZW52KFBMX1RBUkdFVF9ERU5TSVRZKSAiMC40NSIKKworIyBoZWxwcyBpbiBhbnRlZW5hIGZpeAorc2V0IDo6ZW52KFVTRV9BUkNfQU5URU5OQV9DSEVDSykgIjAiCisKK3NldCA6OmVudihGUF9JT19WRVhURU5EKSA0CitzZXQgOjplbnYoRlBfSU9fSEVYVEVORCkgNAorCitzZXQgOjplbnYoRlBfUEROX1ZQSVRDSCkgMTAwCitzZXQgOjplbnYoRlBfUEROX0hQSVRDSCkgMTAwCitzZXQgOjplbnYoRlBfUEROX1ZXSURUSCkgNQorc2V0IDo6ZW52KEZQX1BETl9IV0lEVEgpIDUKKworc2V0IDo6ZW52KEdMQl9SVF9NQVhMQVlFUikgNQorc2V0IDo6ZW52KEdMQl9SVF9NQVhfRElPREVfSU5TX0lURVJTKSAxMAorc2V0IDo6ZW52KERJT0RFX0lOU0VSVElPTl9TVFJBVEVHWSkgNAorCitzZXQgOjplbnYoUVVJVF9PTl9USU1JTkdfVklPTEFUSU9OUykgIjAiCitzZXQgOjplbnYoUVVJVF9PTl9NQUdJQ19EUkMpICIxIgorc2V0IDo6ZW52KFFVSVRfT05fTFZTX0VSUk9SKSAiMCIKK3NldCA6OmVudihRVUlUX09OX1NMRVdfVklPTEFUSU9OUykgIjAiCmRpZmYgLS1naXQgYS9vcGVubGFuZS91YXJ0X2kyY21fdXNiX3NwaS9pbnRlcmFjdGl2ZS50Y2wgYi9vcGVubGFuZS91YXJ0X2kyY21fdXNiX3NwaS9pbnRlcmFjdGl2ZS50Y2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ0YjUxNwotLS0gL2Rldi9udWxsCisrKyBiL29wZW5sYW5lL3VhcnRfaTJjbV91c2Jfc3BpL2ludGVyYWN0aXZlLnRjbApAQCAtMCwwICsxLDIxOSBAQAorIyEvdXNyL2Jpbi90Y2xzaAorIyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIwIEVmYWJsZXNzIENvcnBvcmF0aW9uCisjIENvcHlyaWdodCAyMDIwIEVmYWJsZXNzIENvcnBvcmF0aW9uCisjIENvcHlyaWdodCAyMDIwIFN5bHZhaW4gTXVuYXV0CisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorCitwYWNrYWdlIHJlcXVpcmUgb3BlbmxhbmU7CisKKworcHJvYyBydW5fcGxhY2VtZW50X3N0ZXAge2FyZ3N9IHsKKyAgICAjIHNldCBwZG5kZWZfZGlybmFtZSBbZmlsZSBkaXJuYW1lICQ6OmVudihwZG5fdG1wX2ZpbGVfdGFnKS5kZWZdCisgICAgIyBzZXQgcGRuZGVmIFtsaW5kZXggW2dsb2IgJHBkbmRlZl9kaXJuYW1lLypwZG4qXSAwXQorICAgICMgc2V0X2RlZiAkcGRuZGVmCisgICAgaWYgeyAhIFsgaW5mbyBleGlzdHMgOjplbnYoUExBQ0VNRU5UX0NVUlJFTlRfREVGKSBdIH0geworICAgICAgICBzZXQgOjplbnYoUExBQ0VNRU5UX0NVUlJFTlRfREVGKSAkOjplbnYoQ1VSUkVOVF9ERUYpCisgICAgfSBlbHNlIHsKKyAgICAgICAgc2V0IDo6ZW52KENVUlJFTlRfREVGKSAkOjplbnYoUExBQ0VNRU5UX0NVUlJFTlRfREVGKQorICAgIH0KKworICAgIHJ1bl9wbGFjZW1lbnQKK30KKworcHJvYyBydW5fY3RzX3N0ZXAge2FyZ3N9IHsKKyAgICAjIHNldF9kZWYgJDo6ZW52KG9wZW5kcF9yZXN1bHRfZmlsZV90YWcpLmRlZgorICAgIGlmIHsgISBbIGluZm8gZXhpc3RzIDo6ZW52KENUU19DVVJSRU5UX0RFRikgXSB9IHsKKyAgICAgICAgc2V0IDo6ZW52KENUU19DVVJSRU5UX0RFRikgJDo6ZW52KENVUlJFTlRfREVGKQorICAgIH0gZWxzZSB7CisgICAgICAgIHNldCA6OmVudihDVVJSRU5UX0RFRikgJDo6ZW52KENUU19DVVJSRU5UX0RFRikKKyAgICB9CisKKyAgICBydW5fY3RzCisgICAgcnVuX3Jlc2l6ZXJfdGltaW5nCit9CisKK3Byb2MgcnVuX3JvdXRpbmdfc3RlcCB7YXJnc30geworICAgICMgc2V0IHJlc2l6ZXJkZWZfZGlybmFtZSBbZmlsZSBkaXJuYW1lICQ6OmVudihyZXNpemVyX3RtcF9maWxlX3RhZylfdGltaW5nLmRlZl0KKyAgICAjIHNldCByZXNpemVyZGVmIFtsaW5kZXggW2dsb2IgJHJlc2l6ZXJkZWZfZGlybmFtZS8qcmVzaXplcipdIDBdCisgICAgIyBzZXRfZGVmICRyZXNpemVyZGVmCisgICAgaWYgeyAhIFsgaW5mbyBleGlzdHMgOjplbnYoUk9VVElOR19DVVJSRU5UX0RFRikgXSB9IHsKKyAgICAgICAgc2V0IDo6ZW52KFJPVVRJTkdfQ1VSUkVOVF9ERUYpICQ6OmVudihDVVJSRU5UX0RFRikKKyAgICB9IGVsc2UgeworICAgICAgICBzZXQgOjplbnYoQ1VSUkVOVF9ERUYpICQ6OmVudihST1VUSU5HX0NVUlJFTlRfREVGKQorICAgIH0KKyAgICBydW5fcm91dGluZworfQorCitwcm9jIHJ1bl9kaW9kZV9pbnNlcnRpb25fMl81X3N0ZXAge2FyZ3N9IHsKKyAgICAjIHNldF9kZWYgJDo6ZW52KHRyaXRvblJvdXRlX3Jlc3VsdF9maWxlX3RhZykuZGVmCisgICAgaWYgeyAhIFsgaW5mbyBleGlzdHMgOjplbnYoRElPREVfSU5TRVJUSU9OX0NVUlJFTlRfREVGKSBdIH0geworICAgICAgICBzZXQgOjplbnYoRElPREVfSU5TRVJUSU9OX0NVUlJFTlRfREVGKSAkOjplbnYoQ1VSUkVOVF9ERUYpCisgICAgfSBlbHNlIHsKKyAgICAgICAgc2V0IDo6ZW52KENVUlJFTlRfREVGKSAkOjplbnYoRElPREVfSU5TRVJUSU9OX0NVUlJFTlRfREVGKQorICAgIH0KKwlpZiB7ICgkOjplbnYoRElPREVfSU5TRVJUSU9OX1NUUkFURUdZKSA9PSAyKSB8fCAoJDo6ZW52KERJT0RFX0lOU0VSVElPTl9TVFJBVEVHWSkgPT0gNSkgfSB7CisJCXJ1bl9hbnRlbm5hX2NoZWNrCisJCWhlYWxfYW50ZW5uYV92aW9sYXRvcnM7ICMgbW9kaWZpZXMgdGhlIHJvdXRlZCBERUYKKwl9CisKK30KKworcHJvYyBydW5fcG93ZXJfcGluc19pbnNlcnRpb25fc3RlcCB7YXJnc30geworICAgICMgc2V0X2RlZiAkOjplbnYodHJpdG9uUm91dGVfcmVzdWx0X2ZpbGVfdGFnKS5kZWYKKyAgICBpZiB7ICEgWyBpbmZvIGV4aXN0cyA6OmVudihQT1dFUl9QSU5TX0lOU0VSVElPTl9DVVJSRU5UX0RFRikgXSB9IHsKKyAgICAgICAgc2V0IDo6ZW52KFBPV0VSX1BJTlNfSU5TRVJUSU9OX0NVUlJFTlRfREVGKSAkOjplbnYoQ1VSUkVOVF9ERUYpCisgICAgfSBlbHNlIHsKKyAgICAgICAgc2V0IDo6ZW52KENVUlJFTlRfREVGKSAkOjplbnYoUE9XRVJfUElOU19JTlNFUlRJT05fQ1VSUkVOVF9ERUYpCisgICAgfQorICAgIGlmIHsgJDo6ZW52KExWU19JTlNFUlRfUE9XRVJfUElOUykgfSB7CisJCXdyaXRlX3Bvd2VyZWRfdmVyaWxvZworCQlzZXRfbmV0bGlzdCAkOjplbnYobHZzX3Jlc3VsdF9maWxlX3RhZykucG93ZXJlZC52CisgICAgfQorCit9CisKK3Byb2MgcnVuX2x2c19zdGVwIHt7IGx2c19lbmFibGVkIDEgfX0geworICAgICMgc2V0X2RlZiAkOjplbnYodHJpdG9uUm91dGVfcmVzdWx0X2ZpbGVfdGFnKS5kZWYKKyAgICBpZiB7ICEgWyBpbmZvIGV4aXN0cyA6OmVudihMVlNfQ1VSUkVOVF9ERUYpIF0gfSB7CisgICAgICAgIHNldCA6OmVudihMVlNfQ1VSUkVOVF9ERUYpICQ6OmVudihDVVJSRU5UX0RFRikKKyAgICB9IGVsc2UgeworICAgICAgICBzZXQgOjplbnYoQ1VSUkVOVF9ERUYpICQ6OmVudihMVlNfQ1VSUkVOVF9ERUYpCisgICAgfQorCWlmIHsgJGx2c19lbmFibGVkIH0geworCQlydW5fbWFnaWNfc3BpY2VfZXhwb3J0CisJCXJ1bl9sdnM7ICMgcmVxdWlyZXMgcnVuX21hZ2ljX3NwaWNlX2V4cG9ydAorCX0KKworfQorCitwcm9jIHJ1bl9kcmNfc3RlcCB7eyBkcmNfZW5hYmxlZCAxIH19IHsKKyAgICBpZiB7ICEgWyBpbmZvIGV4aXN0cyA6OmVudihEUkNfQ1VSUkVOVF9ERUYpIF0gfSB7CisgICAgICAgIHNldCA6OmVudihEUkNfQ1VSUkVOVF9ERUYpICQ6OmVudihDVVJSRU5UX0RFRikKKyAgICB9IGVsc2UgeworICAgICAgICBzZXQgOjplbnYoQ1VSUkVOVF9ERUYpICQ6OmVudihEUkNfQ1VSUkVOVF9ERUYpCisgICAgfQorCWlmIHsgJGRyY19lbmFibGVkIH0geworCQlydW5fbWFnaWNfZHJjCisJCXJ1bl9rbGF5b3V0X2RyYworCX0KK30KKworcHJvYyBydW5fYW50ZW5uYV9jaGVja19zdGVwIHt7IGFudGVubmFfY2hlY2tfZW5hYmxlZCAxIH19IHsKKyAgICBpZiB7ICEgWyBpbmZvIGV4aXN0cyA6OmVudihBTlRFTk5BX0NIRUNLX0NVUlJFTlRfREVGKSBdIH0geworICAgICAgICBzZXQgOjplbnYoQU5URU5OQV9DSEVDS19DVVJSRU5UX0RFRikgJDo6ZW52KENVUlJFTlRfREVGKQorICAgIH0gZWxzZSB7CisgICAgICAgIHNldCA6OmVudihDVVJSRU5UX0RFRikgJDo6ZW52KEFOVEVOTkFfQ0hFQ0tfQ1VSUkVOVF9ERUYpCisgICAgfQorCWlmIHsgJGFudGVubmFfY2hlY2tfZW5hYmxlZCB9IHsKKwkJcnVuX2FudGVubmFfY2hlY2sKKwl9Cit9CisKK3Byb2MgcnVuX2Zsb3cge2FyZ3N9IHsKKyAgICAgICBzZXQgc2NyaXB0X2RpciBbZmlsZSBkaXJuYW1lIFtmaWxlIG5vcm1hbGl6ZSBbaW5mbyBzY3JpcHRdXV0KKworCQlzZXQgb3B0aW9ucyB7CisJCXstZGVzaWduIHJlcXVpcmVkfQorCQl7LXNhdmVfcGF0aCBvcHRpb25hbH0KKwkJey1ub19sdnMgb3B0aW9uYWx9CisJICAgIHstbm9fZHJjIG9wdGlvbmFsfQorCSAgICB7LW5vX2FudGVubmFjaGVjayBvcHRpb25hbH0KKwl9CisJc2V0IGZsYWdzIHstc2F2ZX0KKwlwYXJzZV9rZXlfYXJncyAicnVuX2Zsb3ciIGFyZ3MgYXJnX3ZhbHVlcyAkb3B0aW9ucyBmbGFnc19tYXAgJGZsYWdzIC1ub19jb25zdW1lCisKKwlwcmVwIHsqfSRhcmdzCisKKyAgICAgICAgc2V0IExWU19FTkFCTEVEIDEKKyAgICAgICAgc2V0IERSQ19FTkFCTEVEIDAKKyAgICAgICAgc2V0IEFOVEVOTkFDSEVDS19FTkFCTEVEIDEKKworICAgICAgICBzZXQgc3RlcHMgW2RpY3QgY3JlYXRlICJzeW50aGVzaXMiIHtydW5fc3ludGhlc2lzICIiIH0gXAorICAgICAgICAgICAgICAgICJmbG9vcnBsYW4iIHtydW5fZmxvb3JwbGFuICIifSBcCisgICAgICAgICAgICAgICAgInBsYWNlbWVudCIge3J1bl9wbGFjZW1lbnRfc3RlcCAiIn0gXAorICAgICAgICAgICAgICAgICJjdHMiIHtydW5fY3RzX3N0ZXAgIiJ9IFwKKyAgICAgICAgICAgICAgICAicm91dGluZyIge3J1bl9yb3V0aW5nX3N0ZXAgIiJ9XAorICAgICAgICAgICAgICAgICJkaW9kZV9pbnNlcnRpb24iIHtydW5fZGlvZGVfaW5zZXJ0aW9uXzJfNV9zdGVwICIifSBcCisgICAgICAgICAgICAgICAgInBvd2VyX3BpbnNfaW5zZXJ0aW9uIiB7cnVuX3Bvd2VyX3BpbnNfaW5zZXJ0aW9uX3N0ZXAgIiJ9IFwKKyAgICAgICAgICAgICAgICAiZ2RzX21hZ2ljIiB7cnVuX21hZ2ljICIifSBcCisgICAgICAgICAgICAgICAgImdkc19kcmNfa2xheW91dCIge3J1bl9rbGF5b3V0ICIifSBcCisgICAgICAgICAgICAgICAgImdkc194b3Jfa2xheW91dCIge3J1bl9rbGF5b3V0X2dkc194b3IgIiJ9IFwKKyAgICAgICAgICAgICAgICAibHZzIiAicnVuX2x2c19zdGVwICRMVlNfRU5BQkxFRCIgXAorICAgICAgICAgICAgICAgICJkcmMiICJydW5fZHJjX3N0ZXAgJERSQ19FTkFCTEVEIiBcCisgICAgICAgICAgICAgICAgImFudGVubmFfY2hlY2siICJydW5fYW50ZW5uYV9jaGVja19zdGVwICRBTlRFTk5BQ0hFQ0tfRU5BQkxFRCIgXAorICAgICAgICAgICAgICAgICJjdmMiIHtydW5fbGVmX2N2Y30KKyAgICAgICAgXQorCisgICAgICAgc2V0X2lmX3Vuc2V0IGFyZ192YWx1ZXMoLXRvKSAiY3ZjIjsKKworICAgICAgIGlmIHsgIFtpbmZvIGV4aXN0cyA6OmVudihDVVJSRU5UX1NURVApIF0gfSB7CisgICAgICAgICAgIHB1dHMgIlxbSU5GT1xdOlBpY2tpbmcgdXAgd2hlcmUgbGFzdCBleGVjdXRpb24gbGVmdCBvZmYiCisgICAgICAgICAgIHB1dHMgW2Zvcm1hdCAiXFtJTkZPXF06Q3VycmVudCBzdGFnZSBpcyAlcyAiICQ6OmVudihDVVJSRU5UX1NURVApXQorICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgIHNldCA6OmVudihDVVJSRU5UX1NURVApICJzeW50aGVzaXMiOworICAgICAgIH0KKyAgICAgICBzZXRfaWZfdW5zZXQgYXJnX3ZhbHVlcygtZnJvbSkgJDo6ZW52KENVUlJFTlRfU1RFUCk7CisgICAgICAgc2V0IGV4ZSAwOworICAgICAgIGRpY3QgZm9yIHtzdGVwX25hbWUgc3RlcF9leGV9ICRzdGVwcyB7CisgICAgICAgICAgIGlmIHsgWyBzdHJpbmcgZXF1YWwgJGFyZ192YWx1ZXMoLWZyb20pICRzdGVwX25hbWUgXSB9IHsKKyAgICAgICAgICAgICAgIHNldCBleGUgMTsKKyAgICAgICAgICAgfQorCisgICAgICAgICAgIGlmIHsgJGV4ZSB9IHsKKyAgICAgICAgICAgICAgICMgRm9yIHdoZW4gaXQgZmFpbHMKKyAgICAgICAgICAgICAgIHNldCA6OmVudihDVVJSRU5UX1NURVApICRzdGVwX25hbWUKKyAgICAgICAgICAgICAgIFtsaW5kZXggJHN0ZXBfZXhlIDBdIFtsaW5kZXggJHN0ZXBfZXhlIDFdIDsKKyAgICAgICAgICAgfQorCisgICAgICAgICAgIGlmIHsgWyBzdHJpbmcgZXF1YWwgJGFyZ192YWx1ZXMoLXRvKSAkc3RlcF9uYW1lIF0gfSB7CisgICAgICAgICAgICAgICBzZXQgZXhlIDA6CisgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgfQorCisgICAgICAgfQorCisgICAgICAgIyBmb3Igd2hlbiBpdCByZXN1bWVzCisgICAgICAgc2V0IHN0ZXBzX2FzX2xpc3QgW2RpY3Qga2V5cyAkc3RlcHNdCisgICAgICAgc2V0IG5leHRfaWR4IFtleHByIFtsc2VhcmNoICRzdGVwc19hc19saXN0ICQ6OmVudihDVVJSRU5UX1NURVApXSArIDFdCisgICAgICAgc2V0IDo6ZW52KENVUlJFTlRfU1RFUCkgW2xpbmRleCAkc3RlcHNfYXNfbGlzdCAkbmV4dF9pZHhdCisKKwlpZiB7ICBbaW5mbyBleGlzdHMgZmxhZ3NfbWFwKC1zYXZlKSBdIH0geworCQlpZiB7ICEgW2luZm8gZXhpc3RzIGFyZ192YWx1ZXMoLXNhdmVfcGF0aCldIH0geworCQkJc2V0IGFyZ192YWx1ZXMoLXNhdmVfcGF0aCkgIiIKKwkJfQorCQlzYXZlX3ZpZXdzIAktbGVmX3BhdGggJDo6ZW52KG1hZ2ljX3Jlc3VsdF9maWxlX3RhZykubGVmIFwKKwkJCS1kZWZfcGF0aCAkOjplbnYoQ1VSUkVOVF9ERUYpIFwKKwkJCS1nZHNfcGF0aCAkOjplbnYobWFnaWNfcmVzdWx0X2ZpbGVfdGFnKS5nZHMgXAorCQkJLW1hZ19wYXRoICQ6OmVudihtYWdpY19yZXN1bHRfZmlsZV90YWcpLm1hZyBcCisJCQktbWFnbGVmX3BhdGggJDo6ZW52KG1hZ2ljX3Jlc3VsdF9maWxlX3RhZykubGVmLm1hZyBcCisJCQktc3BpY2VfcGF0aCAkOjplbnYobWFnaWNfcmVzdWx0X2ZpbGVfdGFnKS5zcGljZSBcCisJCQktc3BlZl9wYXRoICQ6OmVudihDVVJSRU5UX1NQRUYpIFwKKwkJCS12ZXJpbG9nX3BhdGggJDo6ZW52KENVUlJFTlRfTkVUTElTVCkgXAorCQkJLXNhdmVfcGF0aCAkYXJnX3ZhbHVlcygtc2F2ZV9wYXRoKSBcCisJCQktdGFnICQ6OmVudihSVU5fVEFHKQorCX0KKworCisJY2FsY190b3RhbF9ydW50aW1lCisJc2F2ZV9zdGF0ZQorCWdlbmVyYXRlX2ZpbmFsX3N1bW1hcnlfcmVwb3J0CisJCisJY2hlY2tfdGltaW5nX3Zpb2xhdGlvbnMKKworCXB1dHNfc3VjY2VzcyAiRmxvdyBDb21wbGV0ZWQgV2l0aG91dCBGYXRhbCBFcnJvcnMuIgorCit9CisKK3J1bl9mbG93IHsqfSRhcmd2CmRpZmYgLS1naXQgYS9vcGVubGFuZS91YXJ0X2kyY21fdXNiX3NwaS9wZG4udGNsIGIvb3BlbmxhbmUvdWFydF9pMmNtX3VzYl9zcGkvcGRuLnRjbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmU2ODliCi0tLSAvZGV2L251bGwKKysrIGIvb3BlbmxhbmUvdWFydF9pMmNtX3VzYl9zcGkvcGRuLnRjbApAQCAtMCwwICsxLDQ5IEBACisjIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjAgRWZhYmxlc3MgQ29ycG9yYXRpb24KKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisKKyMgUG93ZXIgbmV0cworc2V0IDo6cG93ZXJfbmV0cyAkOjplbnYoVkREX1BJTikKK3NldCA6Omdyb3VuZF9uZXRzICQ6OmVudihHTkRfUElOKQorCitzZXQgOjptYWNyb19ibG9ja2FnZV9sYXllcl9saXN0ICJsaTEgbWV0MSBtZXQyIG1ldDMgbWV0NCBtZXQ1IgorCitwZG5nZW46OnNwZWNpZnlfZ3JpZCBzdGRjZWxsIHsKKyAgICBuYW1lIGdyaWQKKyAgICByYWlscyB7CisJICAgIG1ldDEge3dpZHRoIDAuNDggcGl0Y2ggJDo6ZW52KFBMQUNFX1NJVEVfSEVJR0hUKSBvZmZzZXQgMH0KKyAgICB9CisgICAgc3RyYXBzIHsKKwkgICAgbWV0NCB7d2lkdGggMS42IHBpdGNoICQ6OmVudihGUF9QRE5fVlBJVENIKSBvZmZzZXQgJDo6ZW52KEZQX1BETl9WT0ZGU0VUKX0KKwkgICAgbWV0NSB7d2lkdGggMS42IHBpdGNoICQ6OmVudihGUF9QRE5fSFBJVENIKSBvZmZzZXQgJDo6ZW52KEZQX1BETl9IT0ZGU0VUKX0KKyAgICB9CisgICAgY29ubmVjdCB7e21ldDEgbWV0NH0ge21ldDQgbWV0NX19Cit9CisKK3Bkbmdlbjo6c3BlY2lmeV9ncmlkIG1hY3JvIHsKKyAgICBwb3dlcl9waW5zICJWUFdSIgorICAgIGdyb3VuZF9waW5zICJWR05EIgorICAgIGJsb2NrYWdlcyAibGkxIG1ldDEgbWV0MiBtZXQzIG1ldDQiCisgICAgc3RyYXBzIHsgCisgICAgfSAKKyAgICBjb25uZWN0IHt7bWV0NF9QSU5fdmVyIG1ldDV9fQorfQorCitzZXQgOjpoYWxvIDUKKworIyBQT1dFUiBvciBHUk9VTkQgI1N0ZC4gY2VsbCByYWlscyBzdGFydGluZyB3aXRoIHBvd2VyIG9yIGdyb3VuZCByYWlscyBhdCB0aGUgYm90dG9tIG9mIHRoZSBjb3JlIGFyZWEKK3NldCA6OnJhaWxzX3N0YXJ0X3dpdGggIlBPV0VSIiA7CisKKyMgUE9XRVIgb3IgR1JPVU5EICNVcHBlciBtZXRhbCBzdHJpcGVzIHN0YXJ0aW5nIHdpdGggcG93ZXIgb3IgZ3JvdW5kIHJhaWxzIGF0IHRoZSBsZWZ0L2JvdHRvbSBvZiB0aGUgY29yZSBhcmVhCitzZXQgOjpzdHJpcGVzX3N0YXJ0X3dpdGggIlBPV0VSIiA7CmRpZmYgLS1naXQgYS9vcGVubGFuZS91YXJ0X2kyY21fdXNiX3NwaS9waW5fb3JkZXIuY2ZnIGIvb3BlbmxhbmUvdWFydF9pMmNtX3VzYl9zcGkvcGluX29yZGVyLmNmZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZmM1NjI1Ci0tLSAvZGV2L251bGwKKysrIGIvb3BlbmxhbmUvdWFydF9pMmNtX3VzYl9zcGkvcGluX29yZGVyLmNmZwpAQCAtMCwwICsxLDEyOCBAQAorI0JVU19TT1JUCisjTUFOVUFMX1BMQUNFCisKKyNXCitjZmdfY3NrYV91YXJ0XFszXF0gICAgIDAwMDAgMCAgMgorY2ZnX2Nza2FfdWFydFxbMlxdCitjZmdfY3NrYV91YXJ0XFsxXF0KK2NmZ19jc2thX3VhcnRcWzBcXQord2JkX2Nsa19pbnQKK3diZF9jbGtfdWFydAorYXBwX2NsayAgICAgICAgICAgICAgICAKKworcmVnX2NzICAgICAgICAgICAgICAgICAwMTAwIDAgIDIKK3JlZ193ciAgICAgICAgICAgICAgICAgCityZWdfYWRkclxbN1xdICAgICAgICAgIAorcmVnX2FkZHJcWzZcXSAgICAgICAgICAKK3JlZ19hZGRyXFs1XF0gICAgICAgICAgCityZWdfYWRkclxbNFxdICAgICAgICAgIAorcmVnX2FkZHJcWzNcXSAgICAgICAgICAKK3JlZ19hZGRyXFsyXF0gICAgICAgICAgCityZWdfYWRkclxbMVxdICAgICAgICAgIAorcmVnX2FkZHJcWzBcXSAgICAgICAgICAKK3JlZ19iZVxbM1xdICAgICAgICAgICAgICAgICAKK3JlZ19iZVxbMlxdICAgICAgICAgICAgICAgICAKK3JlZ19iZVxbMVxdICAgICAgICAgICAgICAgICAKK3JlZ19iZVxbMFxdICAgICAgICAgICAgICAgICAKK3JlZ193ZGF0YVxbMzFcXSAgICAgICAgIAorcmVnX3dkYXRhXFszMFxdICAgICAgICAgCityZWdfd2RhdGFcWzI5XF0gICAgICAgICAKK3JlZ193ZGF0YVxbMjhcXSAgICAgICAgIAorcmVnX3dkYXRhXFsyN1xdICAgICAgICAgCityZWdfd2RhdGFcWzI2XF0gICAgICAgICAKK3JlZ193ZGF0YVxbMjVcXSAgICAgICAgIAorcmVnX3dkYXRhXFsyNFxdICAgICAgICAgCityZWdfd2RhdGFcWzIzXF0gICAgICAgICAKK3JlZ193ZGF0YVxbMjJcXSAgICAgICAgIAorcmVnX3dkYXRhXFsyMVxdICAgICAgICAgCityZWdfd2RhdGFcWzIwXF0gICAgICAgICAKK3JlZ193ZGF0YVxbMTlcXSAgICAgICAgIAorcmVnX3dkYXRhXFsxOFxdICAgICAgICAgCityZWdfd2RhdGFcWzE3XF0gICAgICAgICAKK3JlZ193ZGF0YVxbMTZcXSAgICAgICAgIAorcmVnX3dkYXRhXFsxNVxdICAgICAgICAgCityZWdfd2RhdGFcWzE0XF0gICAgICAgICAKK3JlZ193ZGF0YVxbMTNcXSAgICAgICAgIAorcmVnX3dkYXRhXFsxMlxdICAgICAgICAgCityZWdfd2RhdGFcWzExXF0gICAgICAgICAKK3JlZ193ZGF0YVxbMTBcXSAgICAgICAgIAorcmVnX3dkYXRhXFs5XF0gICAgICAgICAKK3JlZ193ZGF0YVxbOFxdICAgICAgICAgCityZWdfd2RhdGFcWzdcXSAgICAgICAgIAorcmVnX3dkYXRhXFs2XF0gICAgICAgICAKK3JlZ193ZGF0YVxbNVxdICAgICAgICAgCityZWdfd2RhdGFcWzRcXSAgICAgICAgIAorcmVnX3dkYXRhXFszXF0gICAgICAgICAKK3JlZ193ZGF0YVxbMlxdICAgICAgICAgCityZWdfd2RhdGFcWzFcXSAgICAgICAgIAorcmVnX3dkYXRhXFswXF0gIAorICAgICAgIAorcmVnX3JkYXRhXFszMVxdICAgICAgICAgCityZWdfcmRhdGFcWzMwXF0gICAgICAgICAKK3JlZ19yZGF0YVxbMjlcXSAgICAgICAgIAorcmVnX3JkYXRhXFsyOFxdICAgICAgICAgCityZWdfcmRhdGFcWzI3XF0gICAgICAgICAKK3JlZ19yZGF0YVxbMjZcXSAgICAgICAgIAorcmVnX3JkYXRhXFsyNVxdICAgICAgICAgCityZWdfcmRhdGFcWzI0XF0gICAgICAgICAKK3JlZ19yZGF0YVxbMjNcXSAgICAgICAgIAorcmVnX3JkYXRhXFsyMlxdICAgICAgICAgCityZWdfcmRhdGFcWzIxXF0gICAgICAgICAKK3JlZ19yZGF0YVxbMjBcXSAgICAgICAgIAorcmVnX3JkYXRhXFsxOVxdICAgICAgICAgCityZWdfcmRhdGFcWzE4XF0gICAgICAgICAKK3JlZ19yZGF0YVxbMTdcXSAgICAgICAgIAorcmVnX3JkYXRhXFsxNlxdICAgICAgICAgCityZWdfcmRhdGFcWzE1XF0gICAgICAgICAKK3JlZ19yZGF0YVxbMTRcXSAgICAgICAgIAorcmVnX3JkYXRhXFsxM1xdICAgICAgICAgCityZWdfcmRhdGFcWzEyXF0gICAgICAgICAKK3JlZ19yZGF0YVxbMTFcXSAgICAgICAgIAorcmVnX3JkYXRhXFsxMFxdICAgICAgICAgCityZWdfcmRhdGFcWzlcXSAgICAgICAgIAorcmVnX3JkYXRhXFs4XF0gICAgICAgICAKK3JlZ19yZGF0YVxbN1xdICAgICAgICAgCityZWdfcmRhdGFcWzZcXSAgICAgICAgIAorcmVnX3JkYXRhXFs1XF0gICAgICAgICAKK3JlZ19yZGF0YVxbNFxdICAgICAgICAgCityZWdfcmRhdGFcWzNcXSAgICAgICAgIAorcmVnX3JkYXRhXFsyXF0gICAgICAgICAKK3JlZ19yZGF0YVxbMVxdICAgICAgICAgCityZWdfcmRhdGFcWzBcXSAgICAgICAgIAorcmVnX2FjayAgICAgICAgICAgICAgICAKKworCisjUwordXNiX2NsawordWFydF9yc3RuICAgIAoraTJjX3JzdG4gCit1c2JfcnN0biAKKworCisjRQorc2NsX3BhZF9pIAorc2NsX3BhZF9vCitzY2xfcGFkX29lbl9vCitzZGFfcGFkX2kKK3NkYV9wYWRfbworc2RhX3BhZG9lbl9vCit1YXJ0X3J4ZAordWFydF90eGQKK3VzYl9pbl9kcAordXNiX2luX2RuCit1c2Jfb3V0X2RwCit1c2Jfb3V0X2RuCit1c2Jfb3V0X3R4X29lbgorCitpMmNtX2ludHJfbwordXNiX2ludHJfbworCitzcGlfcnN0biAKK3NzcGltX3Njaworc3NwaW1fc2kKK3NzcGltX3NvCitzc3BpbV9zc24KKworCisgICAgICAgICAKKwpkaWZmIC0tZ2l0IGEvb3BlbmxhbmUvdWFydF9pMmNtX3VzYl9zcGkvc3RhLnRjbCBiL29wZW5sYW5lL3VhcnRfaTJjbV91c2Jfc3BpL3N0YS50Y2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWYxYWI1MgotLS0gL2Rldi9udWxsCisrKyBiL29wZW5sYW5lL3VhcnRfaTJjbV91c2Jfc3BpL3N0YS50Y2wKQEAgLTAsMCArMSw1NiBAQAorIyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAgMjAyMSAsIERpbmVzaCBBbm5heXlhCisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorIyBTUERYLUZpbGVDb250cmlidXRvcjogTW9kaWZpZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKworc2V0IDo6ZW52KExJQl9GQVNURVNUKSAiL2hvbWUvZGluZXNoYS93b3JrYXJlYS9wZGsvc2t5MTMwQS9saWJzLnJlZi9za3kxMzBfZmRfc2NfaGQvbGliL3NreTEzMF9mZF9zY19oZF9fZmZfbjQwQ18xdjk1LmxpYiIKK3NldCA6OmVudihMSUJfU0xPV0VTVCkgIi9ob21lL2RpbmVzaGEvd29ya2FyZWEvcGRrL3NreTEzMEEvbGlicy5yZWYvc2t5MTMwX2ZkX3NjX2hkL2xpYi9za3kxMzBfZmRfc2NfaGRfX3NzXzEwMENfMXY2MC5saWIiCitzZXQgOjplbnYoQ1VSUkVOVF9ORVRMSVNUKSAvcHJvamVjdC9vcGVubGFuZS91YXJ0X2kyY20vcnVucy91YXJ0X2kyY20vcmVzdWx0cy9sdnMvdWFydF9pMmNfdG9wLmx2cy5wb3dlcmVkLnYKK3NldCA6OmVudihERVNJR05fTkFNRSkgInVhcnRfaTJjX3RvcCIKK3NldCA6OmVudihDVVJSRU5UX1NQRUYpIC9wcm9qZWN0L29wZW5sYW5lL3VhcnRfaTJjbS9ydW5zL3VhcnRfaTJjbS9yZXN1bHRzL3JvdXRpbmcvdWFydF9pMmNfdG9wLnNwZWYKK3NldCA6OmVudihCQVNFX1NEQ19GSUxFKSAiL3Byb2plY3Qvb3BlbmxhbmUvdWFydF9pMmNtL2Jhc2Uuc2RjIgorc2V0IDo6ZW52KFNZTlRIX0RSSVZJTkdfQ0VMTCkgInNreTEzMF9mZF9zY19oZF9faW52XzgiCitzZXQgOjplbnYoU1lOVEhfRFJJVklOR19DRUxMX1BJTikgIlkiCitzZXQgOjplbnYoU1lOVEhfQ0FQX0xPQUQpICIxNy42NSIKK3NldCA6OmVudihXSVJFX1JDX0xBWUVSKSAibWV0MSIKKworCitzZXRfY21kX3VuaXRzIC10aW1lIG5zIC1jYXBhY2l0YW5jZSBwRiAtY3VycmVudCBtQSAtdm9sdGFnZSBWIC1yZXNpc3RhbmNlIGtPaG0gLWRpc3RhbmNlIHVtCityZWFkX2xpYmVydHkgLW1pbiAkOjplbnYoTElCX0ZBU1RFU1QpCityZWFkX2xpYmVydHkgLW1heCAkOjplbnYoTElCX1NMT1dFU1QpCityZWFkX3Zlcmlsb2cgJDo6ZW52KENVUlJFTlRfTkVUTElTVCkKK2xpbmtfZGVzaWduICAkOjplbnYoREVTSUdOX05BTUUpCisKK3JlYWRfc3BlZiAgJDo6ZW52KENVUlJFTlRfU1BFRikKKworcmVhZF9zZGMgLWVjaG8gJDo6ZW52KEJBU0VfU0RDX0ZJTEUpCisKKyMgY2hlY2sgZm9yIG1pc3NpbmcgY29uc3RyYWludHMKKyNjaGVja19zZXR1cCAgLXZlcmJvc2UgPiB1bmNvbnN0cmFpbnRzLnJwdAorCitzZXRfb3BlcmF0aW5nX2NvbmRpdGlvbnMgLWFuYWx5c2lzX3R5cGUgYmNfd2MKKyMgUHJvcGdhdGUgdGhlIGNsb2NrCitzZXRfcHJvcGFnYXRlZF9jbG9jayBbYWxsX2Nsb2Nrc10KKworcmVwb3J0X3RucworcmVwb3J0X3ducworcmVwb3J0X3Bvd2VyIAorcmVwb3J0X2NoZWNrcyAtdW5pcXVlIC1zbGFja19tYXggLTAuMCAtZ3JvdXBfY291bnQgMTAwIAorcmVwb3J0X2NoZWNrcyAtdW5pcXVlIC1zbGFja19taW4gLTAuMCAtZ3JvdXBfY291bnQgMTAwIAorcmVwb3J0X2NoZWNrcyAtcGF0aF9kZWxheSBtaW5fbWF4IAorcmVwb3J0X2NoZWNrcyAtZ3JvdXBfY291bnQgMTAwICAtc2xhY2tfbWF4IC0wLjAxIAorCisKKworCmRpZmYgLS1naXQgYS9vcGVubGFuZS91c2VyX3Byb2plY3Rfd3JhcHBlci9iYXNlLnNkYyBiL29wZW5sYW5lL3VzZXJfcHJvamVjdF93cmFwcGVyL2Jhc2Uuc2RjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyNTBkNWUKLS0tIC9kZXYvbnVsbAorKysgYi9vcGVubGFuZS91c2VyX3Byb2plY3Rfd3JhcHBlci9iYXNlLnNkYwpAQCAtMCwwICsxLDEwMDggQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ3JlYXRlZCBieSB3cml0ZV9zZGMKKyMgVGh1IE5vdiAxMSAwNzo1MDo1MSAyMDIxCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitjdXJyZW50X2Rlc2lnbiB1c2VyX3Byb2plY3Rfd3JhcHBlcgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUaW1pbmcgQ29uc3RyYWludHMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2NyZWF0ZV9jbG9jayAtbmFtZSB1c2VyX2Nsb2NrMiAtcGVyaW9kIDEwMC4wMDAwIFtnZXRfcG9ydHMge3VzZXJfY2xvY2syfV0KK2NyZWF0ZV9jbG9jayAtbmFtZSB3Ym1fY2xrX2kgLXBlcmlvZCAxMC4wMDAwIFtnZXRfcG9ydHMge3diX2Nsa19pfV0KK3NldF9wcm9wYWdhdGVkX2Nsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XQorY3JlYXRlX2Nsb2NrIC1uYW1lIHdic19jbGtfaSAtcGVyaW9kIDEwLjAwMDAgIFtnZXRfcGlucyB7dV93Yl9ob3N0L3dic19jbGtfb3V0fV0KK2NyZWF0ZV9jbG9jayAtbmFtZSBjcHVfY2xrIC1wZXJpb2QgMjAuMDAwMCAgICBbZ2V0X3BpbnMge3Vfd2JfaG9zdC9jcHVfY2xrfV0KK2NyZWF0ZV9jbG9jayAtbmFtZSBydGNfY2xrIC1wZXJpb2QgNTAuMDAwMCAgICBbZ2V0X3BpbnMge3Vfd2JfaG9zdC9ydGNfY2xrfV0KK2NyZWF0ZV9jbG9jayAtbmFtZSB1c2JfY2xrIC1wZXJpb2QgMjAuMDAwMCAgICBbZ2V0X3BpbnMge3Vfd2JfaG9zdC91c2JfY2xrfV0KK2NyZWF0ZV9jbG9jayAtbmFtZSBsaW5lX2NsayAtcGVyaW9kIDEwMC4wMDAwICBbZ2V0X3BpbnMge3VfdWFydF9pMmNfdXNiX3NwaS91X3VhcnRfY29yZS51X2xpbmVjbGtfYnVmL1h9XQorCitzZXRfY2xvY2tfdW5jZXJ0YWludHkgLXJpc2VfZnJvbSBbZ2V0X2Nsb2NrcyB7dXNlcl9jbG9jazJ9XSAtcmlzZV90byBbZ2V0X2Nsb2NrcyB7dXNlcl9jbG9jazJ9XSAgLWhvbGQgMC4xMDAwCitzZXRfY2xvY2tfdW5jZXJ0YWludHkgLXJpc2VfZnJvbSBbZ2V0X2Nsb2NrcyB7dXNlcl9jbG9jazJ9XSAtcmlzZV90byBbZ2V0X2Nsb2NrcyB7dXNlcl9jbG9jazJ9XSAgLXNldHVwIDAuMjAwMAorc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1yaXNlX2Zyb20gW2dldF9jbG9ja3Mge3VzZXJfY2xvY2syfV0gLWZhbGxfdG8gW2dldF9jbG9ja3Mge3VzZXJfY2xvY2syfV0gIC1ob2xkIDAuMTAwMAorc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1yaXNlX2Zyb20gW2dldF9jbG9ja3Mge3VzZXJfY2xvY2syfV0gLWZhbGxfdG8gW2dldF9jbG9ja3Mge3VzZXJfY2xvY2syfV0gIC1zZXR1cCAwLjIwMDAKK3NldF9jbG9ja191bmNlcnRhaW50eSAtZmFsbF9mcm9tIFtnZXRfY2xvY2tzIHt1c2VyX2Nsb2NrMn1dIC1yaXNlX3RvIFtnZXRfY2xvY2tzIHt1c2VyX2Nsb2NrMn1dICAtaG9sZCAwLjEwMDAKK3NldF9jbG9ja191bmNlcnRhaW50eSAtZmFsbF9mcm9tIFtnZXRfY2xvY2tzIHt1c2VyX2Nsb2NrMn1dIC1yaXNlX3RvIFtnZXRfY2xvY2tzIHt1c2VyX2Nsb2NrMn1dICAtc2V0dXAgMC4yMDAwCitzZXRfY2xvY2tfdW5jZXJ0YWludHkgLWZhbGxfZnJvbSBbZ2V0X2Nsb2NrcyB7dXNlcl9jbG9jazJ9XSAtZmFsbF90byBbZ2V0X2Nsb2NrcyB7dXNlcl9jbG9jazJ9XSAgLWhvbGQgMC4xMDAwCitzZXRfY2xvY2tfdW5jZXJ0YWludHkgLWZhbGxfZnJvbSBbZ2V0X2Nsb2NrcyB7dXNlcl9jbG9jazJ9XSAtZmFsbF90byBbZ2V0X2Nsb2NrcyB7dXNlcl9jbG9jazJ9XSAgLXNldHVwIDAuMjAwMAorCitzZXRfY2xvY2tfdW5jZXJ0YWludHkgLXJpc2VfZnJvbSBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLXJpc2VfdG8gW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dICAtaG9sZCAwLjEwMDAKK3NldF9jbG9ja191bmNlcnRhaW50eSAtcmlzZV9mcm9tIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtcmlzZV90byBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gIC1zZXR1cCAwLjIwMDAKK3NldF9jbG9ja191bmNlcnRhaW50eSAtcmlzZV9mcm9tIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtZmFsbF90byBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gIC1ob2xkIDAuMTAwMAorc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1yaXNlX2Zyb20gW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1mYWxsX3RvIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAgLXNldHVwIDAuMjAwMAorc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1mYWxsX2Zyb20gW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1yaXNlX3RvIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAgLWhvbGQgMC4xMDAwCitzZXRfY2xvY2tfdW5jZXJ0YWludHkgLWZhbGxfZnJvbSBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLXJpc2VfdG8gW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dICAtc2V0dXAgMC4yMDAwCitzZXRfY2xvY2tfdW5jZXJ0YWludHkgLWZhbGxfZnJvbSBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWZhbGxfdG8gW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dICAtaG9sZCAwLjEwMDAKK3NldF9jbG9ja191bmNlcnRhaW50eSAtZmFsbF9mcm9tIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtZmFsbF90byBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gIC1zZXR1cCAwLjIwMDAKKworc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1yaXNlX2Zyb20gW2dldF9jbG9ja3Mge3dic19jbGtfaX1dIC1yaXNlX3RvIFtnZXRfY2xvY2tzIHt3YnNfY2xrX2l9XSAgLWhvbGQgMC4xMDAwCitzZXRfY2xvY2tfdW5jZXJ0YWludHkgLXJpc2VfZnJvbSBbZ2V0X2Nsb2NrcyB7d2JzX2Nsa19pfV0gLXJpc2VfdG8gW2dldF9jbG9ja3Mge3dic19jbGtfaX1dICAtc2V0dXAgMC4yMDAwCitzZXRfY2xvY2tfdW5jZXJ0YWludHkgLXJpc2VfZnJvbSBbZ2V0X2Nsb2NrcyB7d2JzX2Nsa19pfV0gLWZhbGxfdG8gW2dldF9jbG9ja3Mge3dic19jbGtfaX1dICAtaG9sZCAwLjEwMDAKK3NldF9jbG9ja191bmNlcnRhaW50eSAtcmlzZV9mcm9tIFtnZXRfY2xvY2tzIHt3YnNfY2xrX2l9XSAtZmFsbF90byBbZ2V0X2Nsb2NrcyB7d2JzX2Nsa19pfV0gIC1zZXR1cCAwLjIwMDAKK3NldF9jbG9ja191bmNlcnRhaW50eSAtZmFsbF9mcm9tIFtnZXRfY2xvY2tzIHt3YnNfY2xrX2l9XSAtcmlzZV90byBbZ2V0X2Nsb2NrcyB7d2JzX2Nsa19pfV0gIC1ob2xkIDAuMTAwMAorc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1mYWxsX2Zyb20gW2dldF9jbG9ja3Mge3dic19jbGtfaX1dIC1yaXNlX3RvIFtnZXRfY2xvY2tzIHt3YnNfY2xrX2l9XSAgLXNldHVwIDAuMjAwMAorc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1mYWxsX2Zyb20gW2dldF9jbG9ja3Mge3dic19jbGtfaX1dIC1mYWxsX3RvIFtnZXRfY2xvY2tzIHt3YnNfY2xrX2l9XSAgLWhvbGQgMC4xMDAwCitzZXRfY2xvY2tfdW5jZXJ0YWludHkgLWZhbGxfZnJvbSBbZ2V0X2Nsb2NrcyB7d2JzX2Nsa19pfV0gLWZhbGxfdG8gW2dldF9jbG9ja3Mge3dic19jbGtfaX1dICAtc2V0dXAgMC4yMDAwCisKK3NldF9jbG9ja191bmNlcnRhaW50eSAtcmlzZV9mcm9tIFtnZXRfY2xvY2tzIHtjcHVfY2xrfV0gLXJpc2VfdG8gW2dldF9jbG9ja3Mge2NwdV9jbGt9XSAgLWhvbGQgMC4xMDAwCitzZXRfY2xvY2tfdW5jZXJ0YWludHkgLXJpc2VfZnJvbSBbZ2V0X2Nsb2NrcyB7Y3B1X2Nsa31dIC1yaXNlX3RvIFtnZXRfY2xvY2tzIHtjcHVfY2xrfV0gIC1zZXR1cCAwLjIwMDAKK3NldF9jbG9ja191bmNlcnRhaW50eSAtcmlzZV9mcm9tIFtnZXRfY2xvY2tzIHtjcHVfY2xrfV0gLWZhbGxfdG8gW2dldF9jbG9ja3Mge2NwdV9jbGt9XSAgLWhvbGQgMC4xMDAwCitzZXRfY2xvY2tfdW5jZXJ0YWludHkgLXJpc2VfZnJvbSBbZ2V0X2Nsb2NrcyB7Y3B1X2Nsa31dIC1mYWxsX3RvIFtnZXRfY2xvY2tzIHtjcHVfY2xrfV0gIC1zZXR1cCAwLjIwMDAKK3NldF9jbG9ja191bmNlcnRhaW50eSAtZmFsbF9mcm9tIFtnZXRfY2xvY2tzIHtjcHVfY2xrfV0gLXJpc2VfdG8gW2dldF9jbG9ja3Mge2NwdV9jbGt9XSAgLWhvbGQgMC4xMDAwCitzZXRfY2xvY2tfdW5jZXJ0YWludHkgLWZhbGxfZnJvbSBbZ2V0X2Nsb2NrcyB7Y3B1X2Nsa31dIC1yaXNlX3RvIFtnZXRfY2xvY2tzIHtjcHVfY2xrfV0gIC1zZXR1cCAwLjIwMDAKK3NldF9jbG9ja191bmNlcnRhaW50eSAtZmFsbF9mcm9tIFtnZXRfY2xvY2tzIHtjcHVfY2xrfV0gLWZhbGxfdG8gW2dldF9jbG9ja3Mge2NwdV9jbGt9XSAgLWhvbGQgMC4xMDAwCitzZXRfY2xvY2tfdW5jZXJ0YWludHkgLWZhbGxfZnJvbSBbZ2V0X2Nsb2NrcyB7Y3B1X2Nsa31dIC1mYWxsX3RvIFtnZXRfY2xvY2tzIHtjcHVfY2xrfV0gIC1zZXR1cCAwLjIwMDAKKworc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1yaXNlX2Zyb20gW2dldF9jbG9ja3Mge3VzYl9jbGt9XSAtcmlzZV90byBbZ2V0X2Nsb2NrcyB7dXNiX2Nsa31dICAtaG9sZCAwLjEwMDAKK3NldF9jbG9ja191bmNlcnRhaW50eSAtcmlzZV9mcm9tIFtnZXRfY2xvY2tzIHt1c2JfY2xrfV0gLXJpc2VfdG8gW2dldF9jbG9ja3Mge3VzYl9jbGt9XSAgLXNldHVwIDAuMjAwMAorc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1yaXNlX2Zyb20gW2dldF9jbG9ja3Mge3VzYl9jbGt9XSAtZmFsbF90byBbZ2V0X2Nsb2NrcyB7dXNiX2Nsa31dICAtaG9sZCAwLjEwMDAKK3NldF9jbG9ja191bmNlcnRhaW50eSAtcmlzZV9mcm9tIFtnZXRfY2xvY2tzIHt1c2JfY2xrfV0gLWZhbGxfdG8gW2dldF9jbG9ja3Mge3VzYl9jbGt9XSAgLXNldHVwIDAuMjAwMAorc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1mYWxsX2Zyb20gW2dldF9jbG9ja3Mge3VzYl9jbGt9XSAtcmlzZV90byBbZ2V0X2Nsb2NrcyB7dXNiX2Nsa31dICAtaG9sZCAwLjEwMDAKK3NldF9jbG9ja191bmNlcnRhaW50eSAtZmFsbF9mcm9tIFtnZXRfY2xvY2tzIHt1c2JfY2xrfV0gLXJpc2VfdG8gW2dldF9jbG9ja3Mge3VzYl9jbGt9XSAgLXNldHVwIDAuMjAwMAorc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1mYWxsX2Zyb20gW2dldF9jbG9ja3Mge3VzYl9jbGt9XSAtZmFsbF90byBbZ2V0X2Nsb2NrcyB7dXNiX2Nsa31dICAtaG9sZCAwLjEwMDAKK3NldF9jbG9ja191bmNlcnRhaW50eSAtZmFsbF9mcm9tIFtnZXRfY2xvY2tzIHt1c2JfY2xrfV0gLWZhbGxfdG8gW2dldF9jbG9ja3Mge3VzYl9jbGt9XSAgLXNldHVwIDAuMjAwMAorCitzZXRfY2xvY2tfdW5jZXJ0YWludHkgLXJpc2VfZnJvbSBbZ2V0X2Nsb2NrcyB7cnRjX2Nsa31dIC1yaXNlX3RvIFtnZXRfY2xvY2tzIHtydGNfY2xrfV0gIC1ob2xkIDAuMTAwMAorc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1yaXNlX2Zyb20gW2dldF9jbG9ja3Mge3J0Y19jbGt9XSAtcmlzZV90byBbZ2V0X2Nsb2NrcyB7cnRjX2Nsa31dICAtc2V0dXAgMC4yMDAwCitzZXRfY2xvY2tfdW5jZXJ0YWludHkgLXJpc2VfZnJvbSBbZ2V0X2Nsb2NrcyB7cnRjX2Nsa31dIC1mYWxsX3RvIFtnZXRfY2xvY2tzIHtydGNfY2xrfV0gIC1ob2xkIDAuMTAwMAorc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1yaXNlX2Zyb20gW2dldF9jbG9ja3Mge3J0Y19jbGt9XSAtZmFsbF90byBbZ2V0X2Nsb2NrcyB7cnRjX2Nsa31dICAtc2V0dXAgMC4yMDAwCitzZXRfY2xvY2tfdW5jZXJ0YWludHkgLWZhbGxfZnJvbSBbZ2V0X2Nsb2NrcyB7cnRjX2Nsa31dIC1yaXNlX3RvIFtnZXRfY2xvY2tzIHtydGNfY2xrfV0gIC1ob2xkIDAuMTAwMAorc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1mYWxsX2Zyb20gW2dldF9jbG9ja3Mge3J0Y19jbGt9XSAtcmlzZV90byBbZ2V0X2Nsb2NrcyB7cnRjX2Nsa31dICAtc2V0dXAgMC4yMDAwCitzZXRfY2xvY2tfdW5jZXJ0YWludHkgLWZhbGxfZnJvbSBbZ2V0X2Nsb2NrcyB7cnRjX2Nsa31dIC1mYWxsX3RvIFtnZXRfY2xvY2tzIHtydGNfY2xrfV0gIC1ob2xkIDAuMTAwMAorc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1mYWxsX2Zyb20gW2dldF9jbG9ja3Mge3J0Y19jbGt9XSAtZmFsbF90byBbZ2V0X2Nsb2NrcyB7cnRjX2Nsa31dICAtc2V0dXAgMC4yMDAwCitzZXRfY2xvY2tfdW5jZXJ0YWludHkgLXJpc2VfZnJvbSBbZ2V0X2Nsb2NrcyB7bGluZV9jbGt9XSAtcmlzZV90byBbZ2V0X2Nsb2NrcyB7bGluZV9jbGt9XSAgLWhvbGQgMC4xMDAwCitzZXRfY2xvY2tfdW5jZXJ0YWludHkgLXJpc2VfZnJvbSBbZ2V0X2Nsb2NrcyB7bGluZV9jbGt9XSAtcmlzZV90byBbZ2V0X2Nsb2NrcyB7bGluZV9jbGt9XSAgLXNldHVwIDAuMjAwMAorc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1yaXNlX2Zyb20gW2dldF9jbG9ja3Mge2xpbmVfY2xrfV0gLWZhbGxfdG8gW2dldF9jbG9ja3Mge2xpbmVfY2xrfV0gIC1ob2xkIDAuMTAwMAorc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1yaXNlX2Zyb20gW2dldF9jbG9ja3Mge2xpbmVfY2xrfV0gLWZhbGxfdG8gW2dldF9jbG9ja3Mge2xpbmVfY2xrfV0gIC1zZXR1cCAwLjIwMDAKK3NldF9jbG9ja191bmNlcnRhaW50eSAtZmFsbF9mcm9tIFtnZXRfY2xvY2tzIHtsaW5lX2Nsa31dIC1yaXNlX3RvIFtnZXRfY2xvY2tzIHtsaW5lX2Nsa31dICAtaG9sZCAwLjEwMDAKK3NldF9jbG9ja191bmNlcnRhaW50eSAtZmFsbF9mcm9tIFtnZXRfY2xvY2tzIHtsaW5lX2Nsa31dIC1yaXNlX3RvIFtnZXRfY2xvY2tzIHtsaW5lX2Nsa31dICAtc2V0dXAgMC4yMDAwCitzZXRfY2xvY2tfdW5jZXJ0YWludHkgLWZhbGxfZnJvbSBbZ2V0X2Nsb2NrcyB7bGluZV9jbGt9XSAtZmFsbF90byBbZ2V0X2Nsb2NrcyB7bGluZV9jbGt9XSAgLWhvbGQgMC4xMDAwCitzZXRfY2xvY2tfdW5jZXJ0YWludHkgLWZhbGxfZnJvbSBbZ2V0X2Nsb2NrcyB7bGluZV9jbGt9XSAtZmFsbF90byBbZ2V0X2Nsb2NrcyB7bGluZV9jbGt9XSAgLXNldHVwIDAuMjAwMAorc2V0X2Nsb2NrX2dyb3VwcyAtbmFtZSBhc3luY19jbG9jayAtYXN5bmNocm9ub3VzIFwKKyAtZ3JvdXAgW2dldF9jbG9ja3Mge2NwdV9jbGt9XVwKKyAtZ3JvdXAgW2dldF9jbG9ja3Mge2xpbmVfY2xrfV1cCisgLWdyb3VwIFtnZXRfY2xvY2tzIHt1c2JfY2xrfV1cCisgLWdyb3VwIFtnZXRfY2xvY2tzIHtydGNfY2xrfV1cCisgLWdyb3VwIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XVwKKyAtZ3JvdXAgW2dldF9jbG9ja3Mge3dic19jbGtfaX1dIC1jb21tZW50IHtBc3luYyBDbG9jayBncm91cH0KKworc2V0X2lucHV0X2RlbGF5IDIuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JfcnN0X2l9XQorCitzZXRfaW5wdXRfZGVsYXkgLW1heCA1LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19hZHJfaVswXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA1LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19hZHJfaVsxMF19XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfYWRyX2lbMTFdfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDUuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2Fkcl9pWzEyXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA1LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19hZHJfaVsxM119XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfYWRyX2lbMTRdfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDUuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2Fkcl9pWzE1XX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA1LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19hZHJfaVsxNl19XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfYWRyX2lbMTddfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDUuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2Fkcl9pWzE4XX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA1LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19hZHJfaVsxOV19XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfYWRyX2lbMV19XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfYWRyX2lbMjBdfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDUuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2Fkcl9pWzIxXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA1LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19hZHJfaVsyMl19XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfYWRyX2lbMjNdfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDUuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2Fkcl9pWzI0XX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA1LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19hZHJfaVsyNV19XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfYWRyX2lbMjZdfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDUuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2Fkcl9pWzI3XX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA1LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19hZHJfaVsyOF19XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfYWRyX2lbMjldfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDUuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2Fkcl9pWzJdfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDUuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2Fkcl9pWzMwXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA1LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19hZHJfaVszMV19XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfYWRyX2lbM119XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfYWRyX2lbNF19XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfYWRyX2lbNV19XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfYWRyX2lbNl19XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfYWRyX2lbN119XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfYWRyX2lbOF19XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfYWRyX2lbOV19XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfY3ljX2l9XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X2lbMF19XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X2lbMTBdfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDUuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9pWzExXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA1LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfaVsxMl19XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X2lbMTNdfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDUuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9pWzE0XX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA1LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfaVsxNV19XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X2lbMTZdfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDUuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9pWzE3XX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA1LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfaVsxOF19XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X2lbMTldfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDUuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9pWzFdfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDUuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9pWzIwXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA1LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfaVsyMV19XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X2lbMjJdfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDUuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9pWzIzXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA1LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfaVsyNF19XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X2lbMjVdfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDUuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9pWzI2XX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA1LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfaVsyN119XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X2lbMjhdfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDUuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9pWzI5XX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA1LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfaVsyXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA1LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfaVszMF19XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X2lbMzFdfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDUuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9pWzNdfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDUuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9pWzRdfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDUuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9pWzVdfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDUuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9pWzZdfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDUuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9pWzddfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDUuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9pWzhdfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDUuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9pWzldfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDUuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX3NlbF9pWzBdfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDUuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX3NlbF9pWzFdfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDUuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX3NlbF9pWzJdfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDUuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX3NlbF9pWzNdfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDUuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX3N0Yl9pfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDUuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX3dlX2l9XQorCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19hZHJfaVswXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19hZHJfaVsxMF19XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfYWRyX2lbMTFdfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2Fkcl9pWzEyXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19hZHJfaVsxM119XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfYWRyX2lbMTRdfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2Fkcl9pWzE1XX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19hZHJfaVsxNl19XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfYWRyX2lbMTddfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2Fkcl9pWzE4XX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19hZHJfaVsxOV19XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfYWRyX2lbMV19XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfYWRyX2lbMjBdfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2Fkcl9pWzIxXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19hZHJfaVsyMl19XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfYWRyX2lbMjNdfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2Fkcl9pWzI0XX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19hZHJfaVsyNV19XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfYWRyX2lbMjZdfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2Fkcl9pWzI3XX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19hZHJfaVsyOF19XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfYWRyX2lbMjldfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2Fkcl9pWzJdfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2Fkcl9pWzMwXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19hZHJfaVszMV19XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfYWRyX2lbM119XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfYWRyX2lbNF19XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfYWRyX2lbNV19XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfYWRyX2lbNl19XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfYWRyX2lbN119XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfYWRyX2lbOF19XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfYWRyX2lbOV19XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfY3ljX2l9XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X2lbMF19XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X2lbMTBdfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9pWzExXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfaVsxMl19XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X2lbMTNdfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9pWzE0XX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfaVsxNV19XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X2lbMTZdfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9pWzE3XX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfaVsxOF19XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X2lbMTldfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9pWzFdfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9pWzIwXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfaVsyMV19XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X2lbMjJdfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9pWzIzXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfaVsyNF19XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X2lbMjVdfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9pWzI2XX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfaVsyN119XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X2lbMjhdfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9pWzI5XX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfaVsyXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfaVszMF19XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X2lbMzFdfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9pWzNdfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9pWzRdfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9pWzVdfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9pWzZdfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9pWzddfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9pWzhdfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9pWzldfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX3NlbF9pWzBdfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX3NlbF9pWzFdfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX3NlbF9pWzJdfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX3NlbF9pWzNdfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX3N0Yl9pfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX3dlX2l9XQorCisKK3NldF9vdXRwdXRfZGVsYXkgLW1heCA0LjUwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19hY2tfb31dCitzZXRfb3V0cHV0X2RlbGF5IC1tYXggNC41MDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X29bMF19XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDQuNTAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9vWzEwXX1dCitzZXRfb3V0cHV0X2RlbGF5IC1tYXggNC41MDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X29bMTFdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1heCA0LjUwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfb1sxMl19XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDQuNTAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9vWzEzXX1dCitzZXRfb3V0cHV0X2RlbGF5IC1tYXggNC41MDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X29bMTRdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1heCA0LjUwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfb1sxNV19XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDQuNTAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9vWzE2XX1dCitzZXRfb3V0cHV0X2RlbGF5IC1tYXggNC41MDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X29bMTddfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1heCA0LjUwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfb1sxOF19XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDQuNTAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9vWzE5XX1dCitzZXRfb3V0cHV0X2RlbGF5IC1tYXggNC41MDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X29bMV19XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDQuNTAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9vWzIwXX1dCitzZXRfb3V0cHV0X2RlbGF5IC1tYXggNC41MDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X29bMjFdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1heCA0LjUwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfb1syMl19XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDQuNTAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9vWzIzXX1dCitzZXRfb3V0cHV0X2RlbGF5IC1tYXggNC41MDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X29bMjRdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1heCA0LjUwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfb1syNV19XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDQuNTAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9vWzI2XX1dCitzZXRfb3V0cHV0X2RlbGF5IC1tYXggNC41MDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X29bMjddfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1heCA0LjUwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfb1syOF19XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDQuNTAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9vWzI5XX1dCitzZXRfb3V0cHV0X2RlbGF5IC1tYXggNC41MDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X29bMl19XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDQuNTAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9vWzMwXX1dCitzZXRfb3V0cHV0X2RlbGF5IC1tYXggNC41MDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X29bMzFdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1heCA0LjUwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfb1szXX1dCitzZXRfb3V0cHV0X2RlbGF5IC1tYXggNC41MDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X29bNF19XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDQuNTAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9vWzVdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1heCA0LjUwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfb1s2XX1dCitzZXRfb3V0cHV0X2RlbGF5IC1tYXggNC41MDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X29bN119XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDQuNTAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9vWzhdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1heCA0LjUwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfb1s5XX1dCisKK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19hY2tfb31dCitzZXRfb3V0cHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X29bMF19XQorc2V0X291dHB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9vWzEwXX1dCitzZXRfb3V0cHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X29bMTFdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfb1sxMl19XQorc2V0X291dHB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9vWzEzXX1dCitzZXRfb3V0cHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X29bMTRdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfb1sxNV19XQorc2V0X291dHB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9vWzE2XX1dCitzZXRfb3V0cHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X29bMTddfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfb1sxOF19XQorc2V0X291dHB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9vWzE5XX1dCitzZXRfb3V0cHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X29bMV19XQorc2V0X291dHB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9vWzIwXX1dCitzZXRfb3V0cHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X29bMjFdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfb1syMl19XQorc2V0X291dHB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9vWzIzXX1dCitzZXRfb3V0cHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X29bMjRdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfb1syNV19XQorc2V0X291dHB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9vWzI2XX1dCitzZXRfb3V0cHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X29bMjddfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfb1syOF19XQorc2V0X291dHB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9vWzI5XX1dCitzZXRfb3V0cHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X29bMl19XQorc2V0X291dHB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9vWzMwXX1dCitzZXRfb3V0cHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X29bMzFdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfb1szXX1dCitzZXRfb3V0cHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X29bNF19XQorc2V0X291dHB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9vWzVdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfb1s2XX1dCitzZXRfb3V0cHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X29bN119XQorc2V0X291dHB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9vWzhdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfb1s5XX1dCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEVudmlyb25tZW50CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge3dic19hY2tfb31dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2FuYWxvZ19pb1syOF19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHthbmFsb2dfaW9bMjddfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7YW5hbG9nX2lvWzI2XX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2FuYWxvZ19pb1syNV19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHthbmFsb2dfaW9bMjRdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7YW5hbG9nX2lvWzIzXX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2FuYWxvZ19pb1syMl19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHthbmFsb2dfaW9bMjFdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7YW5hbG9nX2lvWzIwXX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2FuYWxvZ19pb1sxOV19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHthbmFsb2dfaW9bMThdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7YW5hbG9nX2lvWzE3XX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2FuYWxvZ19pb1sxNl19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHthbmFsb2dfaW9bMTVdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7YW5hbG9nX2lvWzE0XX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2FuYWxvZ19pb1sxM119XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHthbmFsb2dfaW9bMTJdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7YW5hbG9nX2lvWzExXX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2FuYWxvZ19pb1sxMF19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHthbmFsb2dfaW9bOV19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHthbmFsb2dfaW9bOF19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHthbmFsb2dfaW9bN119XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHthbmFsb2dfaW9bNl19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHthbmFsb2dfaW9bNV19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHthbmFsb2dfaW9bNF19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHthbmFsb2dfaW9bM119XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHthbmFsb2dfaW9bMl19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHthbmFsb2dfaW9bMV19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHthbmFsb2dfaW9bMF19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtpb19vZWJbMzddfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7aW9fb2ViWzM2XX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2lvX29lYlszNV19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtpb19vZWJbMzRdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7aW9fb2ViWzMzXX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2lvX29lYlszMl19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtpb19vZWJbMzFdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7aW9fb2ViWzMwXX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2lvX29lYlsyOV19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtpb19vZWJbMjhdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7aW9fb2ViWzI3XX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2lvX29lYlsyNl19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtpb19vZWJbMjVdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7aW9fb2ViWzI0XX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2lvX29lYlsyM119XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtpb19vZWJbMjJdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7aW9fb2ViWzIxXX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2lvX29lYlsyMF19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtpb19vZWJbMTldfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7aW9fb2ViWzE4XX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2lvX29lYlsxN119XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtpb19vZWJbMTZdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7aW9fb2ViWzE1XX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2lvX29lYlsxNF19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtpb19vZWJbMTNdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7aW9fb2ViWzEyXX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2lvX29lYlsxMV19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtpb19vZWJbMTBdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7aW9fb2ViWzldfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7aW9fb2ViWzhdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7aW9fb2ViWzddfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7aW9fb2ViWzZdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7aW9fb2ViWzVdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7aW9fb2ViWzRdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7aW9fb2ViWzNdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7aW9fb2ViWzJdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7aW9fb2ViWzFdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7aW9fb2ViWzBdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7aW9fb3V0WzM3XX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2lvX291dFszNl19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtpb19vdXRbMzVdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7aW9fb3V0WzM0XX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2lvX291dFszM119XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtpb19vdXRbMzJdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7aW9fb3V0WzMxXX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2lvX291dFszMF19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtpb19vdXRbMjldfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7aW9fb3V0WzI4XX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2lvX291dFsyN119XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtpb19vdXRbMjZdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7aW9fb3V0WzI1XX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2lvX291dFsyNF19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtpb19vdXRbMjNdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7aW9fb3V0WzIyXX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2lvX291dFsyMV19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtpb19vdXRbMjBdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7aW9fb3V0WzE5XX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2lvX291dFsxOF19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtpb19vdXRbMTddfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7aW9fb3V0WzE2XX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2lvX291dFsxNV19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtpb19vdXRbMTRdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7aW9fb3V0WzEzXX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2lvX291dFsxMl19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtpb19vdXRbMTFdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7aW9fb3V0WzEwXX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2lvX291dFs5XX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2lvX291dFs4XX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2lvX291dFs3XX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2lvX291dFs2XX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2lvX291dFs1XX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2lvX291dFs0XX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2lvX291dFszXX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2lvX291dFsyXX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2lvX291dFsxXX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2lvX291dFswXX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2xhX2RhdGFfb3V0WzEyN119XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFsxMjZdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbMTI1XX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2xhX2RhdGFfb3V0WzEyNF19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFsxMjNdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbMTIyXX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2xhX2RhdGFfb3V0WzEyMV19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFsxMjBdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbMTE5XX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2xhX2RhdGFfb3V0WzExOF19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFsxMTddfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbMTE2XX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2xhX2RhdGFfb3V0WzExNV19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFsxMTRdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbMTEzXX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2xhX2RhdGFfb3V0WzExMl19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFsxMTFdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbMTEwXX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2xhX2RhdGFfb3V0WzEwOV19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFsxMDhdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbMTA3XX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2xhX2RhdGFfb3V0WzEwNl19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFsxMDVdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbMTA0XX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2xhX2RhdGFfb3V0WzEwM119XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFsxMDJdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbMTAxXX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2xhX2RhdGFfb3V0WzEwMF19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFs5OV19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFs5OF19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFs5N119XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFs5Nl19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFs5NV19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFs5NF19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFs5M119XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFs5Ml19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFs5MV19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFs5MF19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFs4OV19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFs4OF19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFs4N119XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFs4Nl19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFs4NV19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFs4NF19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFs4M119XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFs4Ml19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFs4MV19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFs4MF19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFs3OV19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFs3OF19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFs3N119XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFs3Nl19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFs3NV19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFs3NF19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFs3M119XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFs3Ml19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFs3MV19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFs3MF19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFs2OV19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFs2OF19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFs2N119XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFs2Nl19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFs2NV19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFs2NF19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFs2M119XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFs2Ml19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFs2MV19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFs2MF19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFs1OV19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFs1OF19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFs1N119XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFs1Nl19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFs1NV19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFs1NF19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFs1M119XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFs1Ml19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFs1MV19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFs1MF19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFs0OV19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFs0OF19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFs0N119XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFs0Nl19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFs0NV19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFs0NF19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFs0M119XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFs0Ml19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFs0MV19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFs0MF19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFszOV19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFszOF19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFszN119XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFszNl19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFszNV19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFszNF19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFszM119XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFszMl19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFszMV19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFszMF19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFsyOV19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFsyOF19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFsyN119XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFsyNl19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFsyNV19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFsyNF19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFsyM119XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFsyMl19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFsyMV19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFsyMF19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFsxOV19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFsxOF19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFsxN119XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFsxNl19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFsxNV19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFsxNF19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFsxM119XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFsxMl19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFsxMV19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFsxMF19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFs5XX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2xhX2RhdGFfb3V0WzhdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbN119XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFs2XX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2xhX2RhdGFfb3V0WzVdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbNF19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFszXX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2xhX2RhdGFfb3V0WzJdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbMV19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFswXX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge3VzZXJfaXJxWzJdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7dXNlcl9pcnFbMV19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHt1c2VyX2lycVswXX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge3dic19kYXRfb1szMV19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHt3YnNfZGF0X29bMzBdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7d2JzX2RhdF9vWzI5XX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge3dic19kYXRfb1syOF19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHt3YnNfZGF0X29bMjddfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7d2JzX2RhdF9vWzI2XX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge3dic19kYXRfb1syNV19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHt3YnNfZGF0X29bMjRdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7d2JzX2RhdF9vWzIzXX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge3dic19kYXRfb1syMl19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHt3YnNfZGF0X29bMjFdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7d2JzX2RhdF9vWzIwXX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge3dic19kYXRfb1sxOV19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHt3YnNfZGF0X29bMThdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7d2JzX2RhdF9vWzE3XX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge3dic19kYXRfb1sxNl19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHt3YnNfZGF0X29bMTVdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7d2JzX2RhdF9vWzE0XX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge3dic19kYXRfb1sxM119XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHt3YnNfZGF0X29bMTJdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7d2JzX2RhdF9vWzExXX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge3dic19kYXRfb1sxMF19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHt3YnNfZGF0X29bOV19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHt3YnNfZGF0X29bOF19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHt3YnNfZGF0X29bN119XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHt3YnNfZGF0X29bNl19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHt3YnNfZGF0X29bNV19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHt3YnNfZGF0X29bNF19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHt3YnNfZGF0X29bM119XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHt3YnNfZGF0X29bMl19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHt3YnNfZGF0X29bMV19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHt3YnNfZGF0X29bMF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHt1c2VyX2Nsb2NrMn1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge3diX2Nsa19pfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7d2JfcnN0X2l9XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHt3YnNfY3ljX2l9XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHt3YnNfc3RiX2l9XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHt3YnNfd2VfaX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2FuYWxvZ19pb1syOF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHthbmFsb2dfaW9bMjddfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7YW5hbG9nX2lvWzI2XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2FuYWxvZ19pb1syNV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHthbmFsb2dfaW9bMjRdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7YW5hbG9nX2lvWzIzXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2FuYWxvZ19pb1syMl19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHthbmFsb2dfaW9bMjFdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7YW5hbG9nX2lvWzIwXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2FuYWxvZ19pb1sxOV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHthbmFsb2dfaW9bMThdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7YW5hbG9nX2lvWzE3XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2FuYWxvZ19pb1sxNl19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHthbmFsb2dfaW9bMTVdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7YW5hbG9nX2lvWzE0XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2FuYWxvZ19pb1sxM119XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHthbmFsb2dfaW9bMTJdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7YW5hbG9nX2lvWzExXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2FuYWxvZ19pb1sxMF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHthbmFsb2dfaW9bOV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHthbmFsb2dfaW9bOF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHthbmFsb2dfaW9bN119XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHthbmFsb2dfaW9bNl19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHthbmFsb2dfaW9bNV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHthbmFsb2dfaW9bNF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHthbmFsb2dfaW9bM119XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHthbmFsb2dfaW9bMl19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHthbmFsb2dfaW9bMV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHthbmFsb2dfaW9bMF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtpb19pblszN119XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtpb19pblszNl19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtpb19pblszNV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtpb19pblszNF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtpb19pblszM119XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtpb19pblszMl19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtpb19pblszMV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtpb19pblszMF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtpb19pblsyOV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtpb19pblsyOF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtpb19pblsyN119XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtpb19pblsyNl19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtpb19pblsyNV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtpb19pblsyNF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtpb19pblsyM119XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtpb19pblsyMl19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtpb19pblsyMV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtpb19pblsyMF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtpb19pblsxOV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtpb19pblsxOF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtpb19pblsxN119XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtpb19pblsxNl19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtpb19pblsxNV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtpb19pblsxNF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtpb19pblsxM119XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtpb19pblsxMl19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtpb19pblsxMV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtpb19pblsxMF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtpb19pbls5XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2lvX2luWzhdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7aW9faW5bN119XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtpb19pbls2XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2lvX2luWzVdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7aW9faW5bNF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtpb19pblszXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2lvX2luWzJdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7aW9faW5bMV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtpb19pblswXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bMTI3XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bMTI2XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bMTI1XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bMTI0XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bMTIzXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bMTIyXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bMTIxXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bMTIwXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bMTE5XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bMTE4XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bMTE3XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bMTE2XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bMTE1XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bMTE0XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bMTEzXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bMTEyXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bMTExXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bMTEwXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bMTA5XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bMTA4XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bMTA3XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bMTA2XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bMTA1XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bMTA0XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bMTAzXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bMTAyXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bMTAxXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bMTAwXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bOTldfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfZGF0YV9pbls5OF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzk3XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bOTZdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfZGF0YV9pbls5NV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzk0XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bOTNdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfZGF0YV9pbls5Ml19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzkxXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bOTBdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfZGF0YV9pbls4OV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzg4XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bODddfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfZGF0YV9pbls4Nl19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzg1XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bODRdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfZGF0YV9pbls4M119XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzgyXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bODFdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfZGF0YV9pbls4MF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzc5XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bNzhdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfZGF0YV9pbls3N119XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzc2XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bNzVdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfZGF0YV9pbls3NF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzczXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bNzJdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfZGF0YV9pbls3MV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzcwXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bNjldfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfZGF0YV9pbls2OF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzY3XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bNjZdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfZGF0YV9pbls2NV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzY0XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bNjNdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfZGF0YV9pbls2Ml19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzYxXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bNjBdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfZGF0YV9pbls1OV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzU4XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bNTddfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfZGF0YV9pbls1Nl19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzU1XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bNTRdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfZGF0YV9pbls1M119XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzUyXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bNTFdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfZGF0YV9pbls1MF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzQ5XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bNDhdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfZGF0YV9pbls0N119XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzQ2XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bNDVdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfZGF0YV9pbls0NF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzQzXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bNDJdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfZGF0YV9pbls0MV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzQwXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bMzldfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfZGF0YV9pblszOF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzM3XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bMzZdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfZGF0YV9pblszNV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzM0XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bMzNdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfZGF0YV9pblszMl19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzMxXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bMzBdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfZGF0YV9pblsyOV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzI4XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bMjddfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfZGF0YV9pblsyNl19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzI1XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bMjRdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfZGF0YV9pblsyM119XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzIyXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bMjFdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfZGF0YV9pblsyMF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzE5XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bMThdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfZGF0YV9pblsxN119XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzE2XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bMTVdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfZGF0YV9pblsxNF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzEzXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bMTJdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfZGF0YV9pblsxMV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzEwXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bOV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzhdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfZGF0YV9pbls3XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bNl19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzVdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfZGF0YV9pbls0XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bM119XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzJdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfZGF0YV9pblsxXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bMF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzEyN119XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzEyNl19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzEyNV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzEyNF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzEyM119XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzEyMl19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzEyMV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzEyMF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzExOV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzExOF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzExN119XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzExNl19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzExNV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzExNF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzExM119XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzExMl19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzExMV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzExMF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzEwOV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzEwOF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzEwN119XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzEwNl19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzEwNV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzEwNF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzEwM119XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzEwMl19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzEwMV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzEwMF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzk5XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX29lbmJbOThdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYls5N119XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzk2XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX29lbmJbOTVdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYls5NF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzkzXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX29lbmJbOTJdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYls5MV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzkwXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX29lbmJbODldfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYls4OF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzg3XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX29lbmJbODZdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYls4NV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzg0XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX29lbmJbODNdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYls4Ml19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzgxXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX29lbmJbODBdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYls3OV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzc4XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX29lbmJbNzddfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYls3Nl19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzc1XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX29lbmJbNzRdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYls3M119XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzcyXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX29lbmJbNzFdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYls3MF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzY5XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX29lbmJbNjhdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYls2N119XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzY2XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX29lbmJbNjVdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYls2NF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzYzXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX29lbmJbNjJdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYls2MV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzYwXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX29lbmJbNTldfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYls1OF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzU3XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX29lbmJbNTZdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYls1NV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzU0XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX29lbmJbNTNdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYls1Ml19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzUxXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX29lbmJbNTBdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYls0OV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzQ4XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX29lbmJbNDddfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYls0Nl19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzQ1XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX29lbmJbNDRdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYls0M119XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzQyXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX29lbmJbNDFdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYls0MF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzM5XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX29lbmJbMzhdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYlszN119XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzM2XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX29lbmJbMzVdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYlszNF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzMzXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX29lbmJbMzJdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYlszMV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzMwXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX29lbmJbMjldfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYlsyOF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzI3XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX29lbmJbMjZdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYlsyNV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzI0XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX29lbmJbMjNdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYlsyMl19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzIxXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX29lbmJbMjBdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYlsxOV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzE4XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX29lbmJbMTddfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYlsxNl19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzE1XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX29lbmJbMTRdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYlsxM119XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzEyXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX29lbmJbMTFdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYlsxMF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzldfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYls4XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX29lbmJbN119XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzZdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYls1XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX29lbmJbNF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzNdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYlsyXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX29lbmJbMV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzBdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7d2JzX2Fkcl9pWzMxXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge3dic19hZHJfaVszMF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHt3YnNfYWRyX2lbMjldfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7d2JzX2Fkcl9pWzI4XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge3dic19hZHJfaVsyN119XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHt3YnNfYWRyX2lbMjZdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7d2JzX2Fkcl9pWzI1XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge3dic19hZHJfaVsyNF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHt3YnNfYWRyX2lbMjNdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7d2JzX2Fkcl9pWzIyXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge3dic19hZHJfaVsyMV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHt3YnNfYWRyX2lbMjBdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7d2JzX2Fkcl9pWzE5XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge3dic19hZHJfaVsxOF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHt3YnNfYWRyX2lbMTddfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7d2JzX2Fkcl9pWzE2XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge3dic19hZHJfaVsxNV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHt3YnNfYWRyX2lbMTRdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7d2JzX2Fkcl9pWzEzXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge3dic19hZHJfaVsxMl19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHt3YnNfYWRyX2lbMTFdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7d2JzX2Fkcl9pWzEwXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge3dic19hZHJfaVs5XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge3dic19hZHJfaVs4XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge3dic19hZHJfaVs3XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge3dic19hZHJfaVs2XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge3dic19hZHJfaVs1XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge3dic19hZHJfaVs0XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge3dic19hZHJfaVszXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge3dic19hZHJfaVsyXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge3dic19hZHJfaVsxXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge3dic19hZHJfaVswXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge3dic19kYXRfaVszMV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHt3YnNfZGF0X2lbMzBdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7d2JzX2RhdF9pWzI5XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge3dic19kYXRfaVsyOF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHt3YnNfZGF0X2lbMjddfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7d2JzX2RhdF9pWzI2XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge3dic19kYXRfaVsyNV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHt3YnNfZGF0X2lbMjRdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7d2JzX2RhdF9pWzIzXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge3dic19kYXRfaVsyMl19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHt3YnNfZGF0X2lbMjFdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7d2JzX2RhdF9pWzIwXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge3dic19kYXRfaVsxOV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHt3YnNfZGF0X2lbMThdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7d2JzX2RhdF9pWzE3XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge3dic19kYXRfaVsxNl19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHt3YnNfZGF0X2lbMTVdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7d2JzX2RhdF9pWzE0XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge3dic19kYXRfaVsxM119XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHt3YnNfZGF0X2lbMTJdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7d2JzX2RhdF9pWzExXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge3dic19kYXRfaVsxMF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHt3YnNfZGF0X2lbOV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHt3YnNfZGF0X2lbOF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHt3YnNfZGF0X2lbN119XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHt3YnNfZGF0X2lbNl19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHt3YnNfZGF0X2lbNV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHt3YnNfZGF0X2lbNF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHt3YnNfZGF0X2lbM119XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHt3YnNfZGF0X2lbMl19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHt3YnNfZGF0X2lbMV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHt3YnNfZGF0X2lbMF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHt3YnNfc2VsX2lbM119XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHt3YnNfc2VsX2lbMl19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHt3YnNfc2VsX2lbMV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHt3YnNfc2VsX2lbMF19XQorc2V0X2Nhc2VfYW5hbHlzaXMgMCBbZ2V0X3BpbnMge3VfaW50ZXJjb24vY2ZnX2Nza2Ffd2lbMF19XQorc2V0X2Nhc2VfYW5hbHlzaXMgMCBbZ2V0X3BpbnMge3VfaW50ZXJjb24vY2ZnX2Nza2Ffd2lbMV19XQorc2V0X2Nhc2VfYW5hbHlzaXMgMCBbZ2V0X3BpbnMge3VfaW50ZXJjb24vY2ZnX2Nza2Ffd2lbMl19XQorc2V0X2Nhc2VfYW5hbHlzaXMgMSBbZ2V0X3BpbnMge3VfaW50ZXJjb24vY2ZnX2Nza2Ffd2lbM119XQorc2V0X2Nhc2VfYW5hbHlzaXMgMCBbZ2V0X3BpbnMge3VfcGlubXV4L2NmZ19jc2thX3Bpbm11eFswXX1dCitzZXRfY2FzZV9hbmFseXNpcyAxIFtnZXRfcGlucyB7dV9waW5tdXgvY2ZnX2Nza2FfcGlubXV4WzFdfV0KK3NldF9jYXNlX2FuYWx5c2lzIDEgW2dldF9waW5zIHt1X3Bpbm11eC9jZmdfY3NrYV9waW5tdXhbMl19XQorc2V0X2Nhc2VfYW5hbHlzaXMgMCBbZ2V0X3BpbnMge3VfcGlubXV4L2NmZ19jc2thX3Bpbm11eFszXX1dCitzZXRfY2FzZV9hbmFseXNpcyAwIFtnZXRfcGlucyB7dV9xc3BpX21hc3Rlci9jZmdfY3NrYV9zcF9jb1swXX1dCitzZXRfY2FzZV9hbmFseXNpcyAwIFtnZXRfcGlucyB7dV9xc3BpX21hc3Rlci9jZmdfY3NrYV9zcF9jb1sxXX1dCitzZXRfY2FzZV9hbmFseXNpcyAwIFtnZXRfcGlucyB7dV9xc3BpX21hc3Rlci9jZmdfY3NrYV9zcF9jb1syXX1dCitzZXRfY2FzZV9hbmFseXNpcyAwIFtnZXRfcGlucyB7dV9xc3BpX21hc3Rlci9jZmdfY3NrYV9zcF9jb1szXX1dCitzZXRfY2FzZV9hbmFseXNpcyAwIFtnZXRfcGlucyB7dV9xc3BpX21hc3Rlci9jZmdfY3NrYV9zcGlbMF19XQorc2V0X2Nhc2VfYW5hbHlzaXMgMCBbZ2V0X3BpbnMge3VfcXNwaV9tYXN0ZXIvY2ZnX2Nza2Ffc3BpWzFdfV0KK3NldF9jYXNlX2FuYWx5c2lzIDAgW2dldF9waW5zIHt1X3FzcGlfbWFzdGVyL2NmZ19jc2thX3NwaVsyXX1dCitzZXRfY2FzZV9hbmFseXNpcyAxIFtnZXRfcGlucyB7dV9xc3BpX21hc3Rlci9jZmdfY3NrYV9zcGlbM119XQorc2V0X2Nhc2VfYW5hbHlzaXMgMSBbZ2V0X3BpbnMge3VfcmlzY3ZfdG9wL2NmZ19jc2thX3Jpc2N2WzBdfV0KK3NldF9jYXNlX2FuYWx5c2lzIDEgW2dldF9waW5zIHt1X3Jpc2N2X3RvcC9jZmdfY3NrYV9yaXNjdlsxXX1dCitzZXRfY2FzZV9hbmFseXNpcyAxIFtnZXRfcGlucyB7dV9yaXNjdl90b3AvY2ZnX2Nza2FfcmlzY3ZbMl19XQorc2V0X2Nhc2VfYW5hbHlzaXMgMCBbZ2V0X3BpbnMge3VfcmlzY3ZfdG9wL2NmZ19jc2thX3Jpc2N2WzNdfV0KK3NldF9jYXNlX2FuYWx5c2lzIDAgW2dldF9waW5zIHt1X3diX2hvc3QvY2ZnX2Nza2Ffd2hbMF19XQorc2V0X2Nhc2VfYW5hbHlzaXMgMCBbZ2V0X3BpbnMge3Vfd2JfaG9zdC9jZmdfY3NrYV93aFsxXX1dCitzZXRfY2FzZV9hbmFseXNpcyAwIFtnZXRfcGlucyB7dV93Yl9ob3N0L2NmZ19jc2thX3doWzJdfV0KK3NldF9jYXNlX2FuYWx5c2lzIDEgW2dldF9waW5zIHt1X3diX2hvc3QvY2ZnX2Nza2Ffd2hbM119XQorCitzZXRfY2FzZV9hbmFseXNpcyAxIFtnZXRfcGlucyB7dV91YXJ0X2kyY191c2Jfc3BpL2NmZ19jc2thX3VhcnRbM119XQorc2V0X2Nhc2VfYW5hbHlzaXMgMCBbZ2V0X3BpbnMge3VfdWFydF9pMmNfdXNiX3NwaS9jZmdfY3NrYV91YXJ0WzJdfV0KK3NldF9jYXNlX2FuYWx5c2lzIDAgW2dldF9waW5zIHt1X3VhcnRfaTJjX3VzYl9zcGkvY2ZnX2Nza2FfdWFydFsxXX1dCitzZXRfY2FzZV9hbmFseXNpcyAwIFtnZXRfcGlucyB7dV91YXJ0X2kyY191c2Jfc3BpL2NmZ19jc2thX3VhcnRbMF19XQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBEZXNpZ24gUnVsZXMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworI2Rpc2FibGUgY2xvY2sgZ2F0aW5nIGNoZWNrIGF0IHN0YXRpYyBjbG9jayBzZWxlY3QgcGlucworc2V0X2ZhbHNlX3BhdGggLXRocm91Z2ggW2dldF9waW5zIHVfd2JfaG9zdC91X2NwdV9yZWZfc2VsLnVfbXV4L1NdCitzZXRfZmFsc2VfcGF0aCAtdGhyb3VnaCBbZ2V0X3BpbnMgdV93Yl9ob3N0L3VfY3B1X2Nsa19zZWwudV9tdXgvU10KK3NldF9mYWxzZV9wYXRoIC10aHJvdWdoIFtnZXRfcGlucyB1X3diX2hvc3QvdV93YnNfY2xrX3NlbC51X211eC9TXQorc2V0X2ZhbHNlX3BhdGggLXRocm91Z2ggW2dldF9waW5zIHVfd2JfaG9zdC91X3VzYl9jbGtfc2VsLnVfbXV4L1NdCisKZGlmZiAtLWdpdCBhL29wZW5sYW5lL3VzZXJfcHJvamVjdF93cmFwcGVyL2NvbmZpZy50Y2wgYi9vcGVubGFuZS91c2VyX3Byb2plY3Rfd3JhcHBlci9jb25maWcudGNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4OTVlYzQKLS0tIC9kZXYvbnVsbAorKysgYi9vcGVubGFuZS91c2VyX3Byb2plY3Rfd3JhcHBlci9jb25maWcudGNsCkBAIC0wLDAgKzEsMjA4IEBACisjIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjAgRWZhYmxlc3MgQ29ycG9yYXRpb24KKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisKKyMgQmFzZSBDb25maWd1cmF0aW9ucy4gRG9uJ3QgVG91Y2gKKyMgc2VjdGlvbiBiZWdpbgorCitzZXQgOjplbnYoUERLKSAic2t5MTMwQSIKK3NldCA6OmVudihTVERfQ0VMTF9MSUJSQVJZKSAic2t5MTMwX2ZkX3NjX2hkIgorCisjIFlPVSBBUkUgTk9UIEFMTE9XRUQgVE8gQ0hBTkdFIEFOWSBWQVJJQUJMRVMgREVGSU5FRCBJTiBUSEUgRklYRUQgV1JBUFBFUiBDRkdTIAorc291cmNlICQ6OmVudihDQVJBVkVMX1JPT1QpL29wZW5sYW5lL3VzZXJfcHJvamVjdF93cmFwcGVyX2VtcHR5L2ZpeGVkX3dyYXBwZXJfY2Zncy50Y2wKKworCisjIFlPVSBDQU4gQ0hBTkdFIEFOWSBWQVJJQUJMRVMgREVGSU5FRCBJTiBUSEUgREVGQVVMVCBXUkFQUEVSIENGR1MgQlkgT1ZFUlJJRElORyBUSEVNIElOIFRISVMgQ09ORklHLlRDTAorc291cmNlICQ6OmVudihDQVJBVkVMX1JPT1QpL29wZW5sYW5lL3VzZXJfcHJvamVjdF93cmFwcGVyX2VtcHR5L2RlZmF1bHRfd3JhcHBlcl9jZmdzLnRjbAorCisKK3NldCBzY3JpcHRfZGlyIFtmaWxlIGRpcm5hbWUgW2ZpbGUgbm9ybWFsaXplIFtpbmZvIHNjcmlwdF1dXQorc2V0IHByb2pfZGlyIFtmaWxlIGRpcm5hbWUgW2ZpbGUgbm9ybWFsaXplIFtpbmZvIHNjcmlwdF1dXQorCitzZXQgOjplbnYoREVTSUdOX05BTUUpIHVzZXJfcHJvamVjdF93cmFwcGVyCitzZXQgdmVyaWxvZ19yb290ICRwcm9qX2Rpci8uLi8uLi92ZXJpbG9nLworc2V0IGxlZl9yb290ICRwcm9qX2Rpci8uLi8uLi9sZWYvCitzZXQgZ2RzX3Jvb3QgJHByb2pfZGlyLy4uLy4uL2dkcy8KKyNzZWN0aW9uIGVuZAorCisjIFVzZXIgQ29uZmlndXJhdGlvbnMKKyMKK3NldCA6OmVudihERVNJR05fSVNfQ09SRSkgMQorc2V0IDo6ZW52KEZQX1BETl9DT1JFX1JJTkcpIDEKKworCisjIyBTb3VyY2UgVmVyaWxvZyBGaWxlcworc2V0IDo6ZW52KFZFUklMT0dfRklMRVMpICJcCisJJHByb2pfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL3VzZXJfcHJvamVjdF93cmFwcGVyLnYiCisKKyMjIENsb2NrIGNvbmZpZ3VyYXRpb25zCitzZXQgOjplbnYoQ0xPQ0tfUE9SVCkgInVzZXJfY2xvY2syIHdiX2Nsa19pIgorI3NldCA6OmVudihDTE9DS19ORVQpICJtcHJqLmNsayIKKworc2V0IDo6ZW52KENMT0NLX1BFUklPRCkgIjEwIgorCisjIyBJbnRlcm5hbCBNYWNyb3MKKyMjIyBNYWNybyBQbGFjZW1lbnQKK3NldCA6OmVudihGUF9TSVpJTkcpICJhYnNvbHV0ZSIKK3NldCA6OmVudihNQUNST19QTEFDRU1FTlRfQ0ZHKSAkcHJval9kaXIvbWFjcm8uY2ZnCisKK3NldCA6OmVudihQRE5fQ0ZHKSAkcHJval9kaXIvcGRuX2NmZy50Y2wKKworc2V0IDo6ZW52KFNEQ19GSUxFKSAiJHByb2pfZGlyL2Jhc2Uuc2RjIgorc2V0IDo6ZW52KEJBU0VfU0RDX0ZJTEUpICIkcHJval9kaXIvYmFzZS5zZGMiCisKK3NldCA6OmVudihTWU5USF9SRUFEX0JMQUNLQk9YX0xJQikgMQorCisjIyMgQmxhY2stYm94IHZlcmlsb2cgYW5kIHZpZXdzCitzZXQgOjplbnYoVkVSSUxPR19GSUxFU19CTEFDS0JPWCkgIlwKKyAgICAgICAgJHByb2pfZGlyLy4uLy4uL3Zlcmlsb2cvZ2wvcXNwaW0udiBcCisgICAgICAgICRwcm9qX2Rpci8uLi8uLi92ZXJpbG9nL2dsL3diX2ludGVyY29ubmVjdC52IFwKKyAgICAgICAgJHByb2pfZGlyLy4uLy4uL3Zlcmlsb2cvZ2wvcGlubXV4LnYgICAgIFwKKyAgICAgICAgJHByb2pfZGlyLy4uLy4uL3Zlcmlsb2cvZ2wvbWJpc3Rfd3JhcHBlci52ICAgICBcCisgICAgICAgICRwcm9qX2Rpci8uLi8uLi92ZXJpbG9nL2dsL3VhcnRfaTJjbV91c2Jfc3BpLnYgICAgIFwKKwkkcHJval9kaXIvLi4vLi4vdmVyaWxvZy9nbC93Yl9ob3N0LnYgXAorCSRwcm9qX2Rpci8uLi8uLi92ZXJpbG9nL2dsL3lpZml2ZS52IFwKKwkkcHJval9kaXIvLi4vLi4vdmVyaWxvZy9ydGwvc3JhbV9tYWNyb3Mvc2t5MTMwX3NyYW1fMmtieXRlXzFydzFyXzMyeDUxMl84LnYgXAorCSIKKworc2V0IDo6ZW52KEVYVFJBX0xFRlMpICJcCisJJGxlZl9yb290L3FzcGltLmxlZiBcCisJJGxlZl9yb290L3Bpbm11eC5sZWYgXAorCSRsZWZfcm9vdC93Yl9pbnRlcmNvbm5lY3QubGVmIFwKKwkkbGVmX3Jvb3QvdWFydF9pMmNtX3VzYl9zcGkubGVmIFwKKwkkbGVmX3Jvb3Qvd2JfaG9zdC5sZWYgXAorCSRsZWZfcm9vdC9tYmlzdF93cmFwcGVyLmxlZiBcCisJJGxlZl9yb290L3lpZml2ZS5sZWYgXAorCSRsZWZfcm9vdC9za3kxMzBfc3JhbV8ya2J5dGVfMXJ3MXJfMzJ4NTEyXzgubGVmIFwKKwkiCisKK3NldCA6OmVudihFWFRSQV9HRFNfRklMRVMpICJcCisJJGdkc19yb290L3FzcGltLmdkcyBcCisJJGdkc19yb290L3Bpbm11eC5nZHMgXAorCSRnZHNfcm9vdC93Yl9pbnRlcmNvbm5lY3QuZ2RzIFwKKwkkZ2RzX3Jvb3QvdWFydF9pMmNtX3VzYl9zcGkuZ2RzIFwKKwkkZ2RzX3Jvb3Qvd2JfaG9zdC5nZHMgXAorCSRnZHNfcm9vdC9tYmlzdF93cmFwcGVyLmdkcyBcCisJJGdkc19yb290L3lpZml2ZS5nZHMgXAorCSRnZHNfcm9vdC9za3kxMzBfc3JhbV8ya2J5dGVfMXJ3MXJfMzJ4NTEyXzguZ2RzIFwKKwkiCisKK3NldCA6OmVudihTWU5USF9ERUZJTkVTKSBbbGlzdCBTWU5USEVTSVMgXQorCisjc2V0IDo6ZW52KFZFUklMT0dfSU5DTFVERV9ESVJTKSBbZ2xvYiAkcHJval9kaXIvLi4vLi4vdmVyaWxvZy9ydGwveWlmaXZlL3ljcjFjL3NyYy9pbmNsdWRlcyBdCisKK3NldCA6OmVudihHTEJfUlRfTUFYTEFZRVIpIDUKKworc2V0IDo6ZW52KEZQX1BETl9DSEVDS19OT0RFUykgMAorCisKKyMjIEludGVybmFsIE1hY3JvcworIyMjIE1hY3JvIFBETiBDb25uZWN0aW9ucworc2V0IDo6ZW52KEZQX1BETl9FTkFCTEVfTUFDUk9TX0dSSUQpICIxIgorc2V0IDo6ZW52KEZQX1BETl9FTkFCTEVfR0xPQkFMX0NPTk5FQ1RJT05TKSAiMSIKKworc2V0IDo6ZW52KFZERF9ORVRTKSAidmNjZDEgdmNjZDIgdmRkYTEgdmRkYTIiCitzZXQgOjplbnYoR05EX05FVFMpICJ2c3NkMSB2c3NkMiB2c3NhMSB2c3NhMiIKKyMKK3NldCA6OmVudihWRERfUElOKSAidmNjZDEiCitzZXQgOjplbnYoR05EX1BJTikgInZzc2QxIgorCitzZXQgOjplbnYoR0xCX1JUX09CUykgIiBsaTEgICAxNTAgMjEwMCAgODMzLjEgIDI1MTYuNTQsXAorCSAgICAgICAgICAgICAgICBtZXQxICAxNTAgMjEwMCAgODMzLjEgIDI1MTYuNTQsXAorCSAgICAgICAgICAgICAgICBtZXQyICAxNTAgMjEwMCAgODMzLjEgIDI1MTYuNTQsXAorICAgICAgICAgICAgICAgICAgICAgICAgbWV0MyAgMTUwIDIxMDAgIDgzMy4xICAyNTE2LjU0LFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpMSAgIDk1MCAyMTAwIDE2MzMuMSAgMjUxNi41NCxcCisgICAgICAgICAgICAgICAgICAgICAgICBtZXQxICA5NTAgMjEwMCAxNjMzLjEgIDI1MTYuNTQsXAorICAgICAgICAgICAgICAgICAgICAgICAgbWV0MiAgOTUwIDIxMDAgMTYzMy4xICAyNTE2LjU0LFwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1ldDMgIDk1MCAyMTAwIDE2MzMuMSAgMjUxNi41NCxcCisgICAgICAgICAgICAgICAgICAgICAgICBsaTEgICAxNTAgMzAwMCAgODMzLjEgMzQxNi41NCxcCisgICAgICAgICAgICAgICAgICAgICAgICBtZXQxICAxNTAgMzAwMCAgODMzLjEgMzQxNi41NCxcCisgICAgICAgICAgICAgICAgICAgICAgICBtZXQyICAxNTAgMzAwMCAgODMzLjEgMzQxNi41NCxcCisgICAgICAgICAgICAgICAgICAgICAgICBtZXQzICAxNTAgMzAwMCAgODMzLjEgMzQxNi41NCxcCisgICAgICAgICAgICAgICAgICAgICAgICBsaTEgICA5NTAgMzAwMCAxNjMzLjEgMzQxNi41NCxcCisgICAgICAgICAgICAgICAgICAgICAgICBtZXQxICA5NTAgMzAwMCAxNjMzLjEgMzQxNi41NCxcCisgICAgICAgICAgICAgICAgICAgICAgICBtZXQyICA5NTAgMzAwMCAxNjMzLjEgMzQxNi41NCxcCisgICAgICAgICAgICAgICAgICAgICAgICBtZXQzICA5NTAgMzAwMCAxNjMzLjEgMzQxNi41NCxcCisgICAgICAgICAgICAgICAgICAgICAgICBsaTEgIDE1MCAgMTQwMCAgODMzLjEgIDE4MTYuNTQsXAorICAgICAgICAgICAgICAgICAgICAgICAgbWV0MSAxNTAgIDE0MDAgIDgzMy4xICAxODE2LjU0LFwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1ldDIgMTUwICAxNDAwICA4MzMuMSAgMTgxNi41NCxcCisgICAgICAgICAgICAgICAgICAgICAgICBtZXQzIDE1MCAgMTQwMCAgODMzLjEgIDE4MTYuNTQsXAorICAgICAgICAgICAgICAgICAgICAgICAgbGkxICAxNTAgIDgwMCAgODMzLjEgICAxMjE2LjU0LFwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1ldDEgMTUwICA4MDAgIDgzMy4xICAgMTIxNi41NCxcCisgICAgICAgICAgICAgICAgICAgICAgICBtZXQyIDE1MCAgODAwICA4MzMuMSAgIDEyMTYuNTQsXAorICAgICAgICAgICAgICAgICAgICAgICAgbWV0MyAxNTAgIDgwMCAgODMzLjEgICAxMjE2LjU0LFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpMSAgMTUwICAyMDAgIDgzMy4xICAgNjE2LjU0LFwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1ldDEgMTUwICAyMDAgIDgzMy4xICAgNjE2LjU0LFwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1ldDIgMTUwICAyMDAgIDgzMy4xICAgNjE2LjU0LFwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1ldDMgMTUwICAyMDAgIDgzMy4xICAgNjE2LjU0LFwKKwkgICAgICAgICAgICAgICAgbWV0NSAgMCAwIDI5MjAgMzUyMCIKKworc2V0IDo6ZW52KEZQX1BETl9QT1dFUl9TVFJBUFMpICJ2Y2NkMSB2c3NkMSAxLCB2Y2NkMiB2c3NkMiAwLCB2ZGRhMSB2c3NhMSAwLCB2ZGRhMiB2c3NhMiAwIgorCitzZXQgOjplbnYoRlBfUEROX01BQ1JPX0hPT0tTKSAiIFwKKwl1X2ludGVyY29uIHZjY2QxIHZzc2QxIFwKKwl1X3Bpbm11eCB2Y2NkMSB2c3NkMSBcCisJdV9xc3BpX21hc3RlciB2Y2NkMSB2c3NkMSBcCisJdV9yaXNjdl90b3AgdmNjZDEgdnNzZDEgXAorCXVfdHNyYW0wXzJrYiB2Y2NkMSB2c3NkMSBcCisJdV9pY2FjaGVfMmtiIHZjY2QxIHZzc2QxIFwKKwl1X2RjYWNoZV8ya2IgdmNjZDEgdnNzZDEgXAorCXVfbWJpc3QgdmNjZDEgdnNzZDEgXAorCXVfc3JhbTBfMmtiIHZjY2QxIHZzc2QxIFwKKwl1X3NyYW0xXzJrYiB2Y2NkMSB2c3NkMSBcCisJdV9zcmFtMl8ya2IgdmNjZDEgdnNzZDEgXAorCXVfc3JhbTNfMmtiIHZjY2QxIHZzc2QxIFwKKwl1X3VhcnRfaTJjX3VzYl9zcGkgdmNjZDEgdnNzZDEgXAorCXVfd2JfaG9zdCB2Y2NkMSB2c3NkMSAiCisKKworIyBUaGUgZm9sbG93aW5nIGlzIGJlY2F1c2UgdGhlcmUgYXJlIG5vIHN0ZCBjZWxscyBpbiB0aGUgZXhhbXBsZSB3cmFwcGVyIHByb2plY3QuCitzZXQgOjplbnYoU1lOVEhfVE9QX0xFVkVMKSAxCitzZXQgOjplbnYoUExfUkFORE9NX0dMQl9QTEFDRU1FTlQpIDEKKworc2V0IDo6ZW52KFBMX1JFU0laRVJfREVTSUdOX09QVElNSVpBVElPTlMpIDAKK3NldCA6OmVudihQTF9SRVNJWkVSX1RJTUlOR19PUFRJTUlaQVRJT05TKSAwCitzZXQgOjplbnYoUExfUkVTSVpFUl9CVUZGRVJfSU5QVVRfUE9SVFMpIDAKK3NldCA6OmVudihQTF9SRVNJWkVSX0JVRkZFUl9PVVRQVVRfUE9SVFMpIDAKKworc2V0IDo6ZW52KEZQX1BETl9FTkFCTEVfUkFJTFMpIDAKKworc2V0IDo6ZW52KERJT0RFX0lOU0VSVElPTl9TVFJBVEVHWSkgMAorc2V0IDo6ZW52KEZJTExfSU5TRVJUSU9OKSAwCitzZXQgOjplbnYoVEFQX0RFQ0FQX0lOU0VSVElPTikgMAorc2V0IDo6ZW52KENMT0NLX1RSRUVfU1lOVEgpIDAKKworc2V0IDo6ZW52KFFVSVRfT05fTFZTX0VSUk9SKSAiMCIKK3NldCA6OmVudihRVUlUX09OX01BR0lDX0RSQykgIjAiCitzZXQgOjplbnYoUVVJVF9PTl9ORUdBVElWRV9XTlMpICIwIgorc2V0IDo6ZW52KFFVSVRfT05fU0xFV19WSU9MQVRJT05TKSAiMCIKK3NldCA6OmVudihRVUlUX09OX1RJTUlOR19WSU9MQVRJT05TKSAiMCIKK3NldCA6OmVudihRVUlUX09OX1RSX0RSQykgIjAiCisKK3NldCA6OmVudihGUF9QRE5fSVJEUk9QKSAiMSIKK3NldCA6OmVudihGUF9QRE5fSE9SSVpPTlRBTF9IQUxPKSAiMTAiCitzZXQgOjplbnYoRlBfUEROX1ZFUlRJQ0FMX0hBTE8pICIxMCIKKworc2V0IDo6ZW52KEZQX1BETl9WT0ZGU0VUKSAiNSIKK3NldCA6OmVudihGUF9QRE5fVlBJVENIKSAiODAiCitzZXQgOjplbnYoRlBfUEROX1ZTUEFDSU5HKSAiMTUuNSIKK3NldCA6OmVudihGUF9QRE5fVldJRFRIKSAiMy4xIgorCitzZXQgOjplbnYoRlBfUEROX0hPRkZTRVQpICIxMCIKK3NldCA6OmVudihGUF9QRE5fSFBJVENIKSAiMTIwIgorc2V0IDo6ZW52KEZQX1BETl9IU1BBQ0lORykgIjEwIgorc2V0IDo6ZW52KEZQX1BETl9IV0lEVEgpICIzLjEiCisKKworCmRpZmYgLS1naXQgYS9vcGVubGFuZS91c2VyX3Byb2plY3Rfd3JhcHBlci9nZW5fcGRuLnRjbCBiL29wZW5sYW5lL3VzZXJfcHJvamVjdF93cmFwcGVyL2dlbl9wZG4udGNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0YmQwMDgKLS0tIC9kZXYvbnVsbAorKysgYi9vcGVubGFuZS91c2VyX3Byb2plY3Rfd3JhcHBlci9nZW5fcGRuLnRjbApAQCAtMCwwICsxLDUwIEBACisjIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjAgRWZhYmxlc3MgQ29ycG9yYXRpb24KKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisKKworcmVhZF9sZWYgJDo6ZW52KE1FUkdFRF9MRUZfVU5QQURERUQpCityZWFkX2RlZiAkOjplbnYoQ1VSUkVOVF9ERUYpCisKK3NldCA6OmVudihfU1BBQ0lORykgMS43CitzZXQgOjplbnYoX1dJRFRIKSAzCisKK3NldCBwb3dlcl9kb21haW5zIFtsaXN0IHt2Y2NkMSB2c3NkMSAxfSB7dmNjZDIgdnNzZDIgMH0ge3ZkZGExIHZzc2ExIDB9IHt2ZGRhMiB2c3NhMiAwfV0KKworc2V0IDo6ZW52KF9WRERfTkVUX05BTUUpIHZjY2QxCitzZXQgOjplbnYoX0dORF9ORVRfTkFNRSkgdnNzZDEKK3NldCA6OmVudihfV0lUSF9TVFJBUFMpIDEKK3NldCA6OmVudihfVl9PRkZTRVQpIDE0CitzZXQgOjplbnYoX0hfT0ZGU0VUKSAkOjplbnYoX1ZfT0ZGU0VUKQorc2V0IDo6ZW52KF9WX1BJVENIKSA4MAorc2V0IDo6ZW52KF9IX1BJVENIKSA4MAorc2V0IDo6ZW52KF9WX1BETl9PRkZTRVQpIDAKK3NldCA6OmVudihfSF9QRE5fT0ZGU0VUKSAwCisKK2ZvcmVhY2ggZG9tYWluICRwb3dlcl9kb21haW5zIHsKKwlzZXQgOjplbnYoX1ZERF9ORVRfTkFNRSkgW2xpbmRleCAkZG9tYWluIDBdCisJc2V0IDo6ZW52KF9HTkRfTkVUX05BTUUpIFtsaW5kZXggJGRvbWFpbiAxXQorCXNldCA6OmVudihfV0lUSF9TVFJBUFMpICBbbGluZGV4ICRkb21haW4gMl0KKworCXBkbmdlbiAkOjplbnYoUEROX0NGRykgLXZlcmJvc2UKKworCXNldCA6OmVudihfVl9PRkZTRVQpIFwKKwkJW2V4cHIgJDo6ZW52KF9WX09GRlNFVCkgKyAyKigkOjplbnYoX1dJRFRIKSskOjplbnYoX1NQQUNJTkcpKV0KKwlzZXQgOjplbnYoX0hfT0ZGU0VUKSBcCisJCVtleHByICQ6OmVudihfSF9PRkZTRVQpICsgMiooJDo6ZW52KF9XSURUSCkrJDo6ZW52KF9TUEFDSU5HKSldCisJc2V0IDo6ZW52KF9WX1BETl9PRkZTRVQpIFtleHByICQ6OmVudihfVl9QRE5fT0ZGU0VUKSs2KiQ6OmVudihfV0lEVEgpXQorCXNldCA6OmVudihfSF9QRE5fT0ZGU0VUKSBbZXhwciAkOjplbnYoX0hfUEROX09GRlNFVCkrNiokOjplbnYoX1dJRFRIKV0KK30KKword3JpdGVfZGVmICQ6OmVudihTQVZFX0RFRikKZGlmZiAtLWdpdCBhL29wZW5sYW5lL3VzZXJfcHJvamVjdF93cmFwcGVyL2ludGVyYWN0aXZlLm1wdzQudGNsIGIvb3BlbmxhbmUvdXNlcl9wcm9qZWN0X3dyYXBwZXIvaW50ZXJhY3RpdmUubXB3NC50Y2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWMyNDMwNQotLS0gL2Rldi9udWxsCisrKyBiL29wZW5sYW5lL3VzZXJfcHJvamVjdF93cmFwcGVyL2ludGVyYWN0aXZlLm1wdzQudGNsCkBAIC0wLDAgKzEsMzk0IEBACisjIS91c3IvYmluL3RjbHNoCisjIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjAgRWZhYmxlc3MgQ29ycG9yYXRpb24KKyMgQ29weXJpZ2h0IDIwMjAgRWZhYmxlc3MgQ29ycG9yYXRpb24KKyMgQ29weXJpZ2h0IDIwMjAgU3lsdmFpbiBNdW5hdXQKKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisKK3BhY2thZ2UgcmVxdWlyZSBvcGVubGFuZTsKKworCitwcm9jIHJ1bl9wbGFjZW1lbnRfc3RlcCB7YXJnc30geworICAgIGlmIHsgISBbIGluZm8gZXhpc3RzIDo6ZW52KFBMQUNFTUVOVF9DVVJSRU5UX0RFRikgXSB9IHsKKyAgICAgICAgc2V0IDo6ZW52KFBMQUNFTUVOVF9DVVJSRU5UX0RFRikgJDo6ZW52KENVUlJFTlRfREVGKQorICAgIH0gZWxzZSB7CisgICAgICAgIHNldCA6OmVudihDVVJSRU5UX0RFRikgJDo6ZW52KFBMQUNFTUVOVF9DVVJSRU5UX0RFRikKKyAgICB9CisKKyAgICBydW5fcGxhY2VtZW50Cit9CisKK3Byb2MgcnVuX3BsYWNlbWVudCB7YXJnc30geworCXB1dHNfaW5mbyAiUnVubmluZyBQbGFjZW1lbnQuLi4iCisjIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAorIyB8LS0tLS0tLS0tLS0tLS0tLSAgIDMuIFBMQUNFTUVOVCAgIC0tLS0tLS0tLS0tLS0tLS0tLXwKKyMgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CisJc2V0IDo6ZW52KENVUlJFTlRfU1RBR0UpIHBsYWNlbWVudAorCisgICAgaWYgeyBbaW5mbyBleGlzdHMgOjplbnYoUExfVEFSR0VUX0RFTlNJVFlfQ0VMTFMpXSB9IHsKKyAgICAgICAgc2V0IG9sZF9wbF90YXJnZXRfZGVuc2l0eSAkOjplbnYoUExfVEFSR0VUX0RFTlNJVFkpCisgICAgICAgIHNldCA6OmVudihQTF9UQVJHRVRfREVOU0lUWSkgJDo6ZW52KFBMX1RBUkdFVF9ERU5TSVRZX0NFTExTKQorICAgIH0KKworICAgIGlmIHsgJDo6ZW52KFBMX1JBTkRPTV9HTEJfUExBQ0VNRU5UKSB9IHsKKyAgICAgICAgIyB1c2VmdWwgZm9yIHZlcnkgdGlueSBkZXNpZ25zCisgICAgICAgIHJhbmRvbV9nbG9iYWxfcGxhY2VtZW50CisgICAgfSBlbHNlIHsKKyAgICAgICAgZ2xvYmFsX3BsYWNlbWVudF9vcgorICAgIH0KKworICAgIGlmIHsgW2luZm8gZXhpc3RzIDo6ZW52KFBMX1RBUkdFVF9ERU5TSVRZX0NFTExTKV0gfSB7CisgICAgICAgIHNldCA6OmVudihQTF9UQVJHRVRfREVOU0lUWSkgJG9sZF9wbF90YXJnZXRfZGVuc2l0eQorICAgIH0KKworICAgIHJ1bl9yZXNpemVyX2Rlc2lnbgorCisgICAgaWYgeyBbaW5mbyBleGlzdHMgOjplbnYoRE9OVF9CVUZGRVJfUE9SVFMpIF19IHsKKyAgICAgICAgcmVtb3ZlX2J1ZmZlcnMKKyAgICB9CisgICAgZGV0YWlsZWRfcGxhY2VtZW50X29yCisgICAgc2Nyb3Rfa2xheW91dCAtbGF5b3V0ICQ6OmVudihDVVJSRU5UX0RFRikKK30KKworCitwcm9jIHJ1bl9jdHNfc3RlcCB7YXJnc30geworICAgIGlmIHsgISBbIGluZm8gZXhpc3RzIDo6ZW52KENUU19DVVJSRU5UX0RFRikgXSB9IHsKKyAgICAgICAgc2V0IDo6ZW52KENUU19DVVJSRU5UX0RFRikgJDo6ZW52KENVUlJFTlRfREVGKQorICAgIH0gZWxzZSB7CisgICAgICAgIHNldCA6OmVudihDVVJSRU5UX0RFRikgJDo6ZW52KENUU19DVVJSRU5UX0RFRikKKyAgICB9CisKKyAgICBydW5fY3RzCisgICAgcnVuX3Jlc2l6ZXJfdGltaW5nCit9CisKK3Byb2MgcnVuX3JvdXRpbmdfc3RlcCB7YXJnc30geworICAgIGlmIHsgISBbIGluZm8gZXhpc3RzIDo6ZW52KFJPVVRJTkdfQ1VSUkVOVF9ERUYpIF0gfSB7CisgICAgICAgIHNldCA6OmVudihST1VUSU5HX0NVUlJFTlRfREVGKSAkOjplbnYoQ1VSUkVOVF9ERUYpCisgICAgfSBlbHNlIHsKKyAgICAgICAgc2V0IDo6ZW52KENVUlJFTlRfREVGKSAkOjplbnYoUk9VVElOR19DVVJSRU5UX0RFRikKKyAgICB9CisgICAgcnVuX3JvdXRpbmcKK30KKworcHJvYyBydW5fZGlvZGVfaW5zZXJ0aW9uXzJfNV9zdGVwIHthcmdzfSB7CisgICAgaWYgeyAhIFsgaW5mbyBleGlzdHMgOjplbnYoRElPREVfSU5TRVJUSU9OX0NVUlJFTlRfREVGKSBdIH0geworICAgICAgICBzZXQgOjplbnYoRElPREVfSU5TRVJUSU9OX0NVUlJFTlRfREVGKSAkOjplbnYoQ1VSUkVOVF9ERUYpCisgICAgfSBlbHNlIHsKKyAgICAgICAgc2V0IDo6ZW52KENVUlJFTlRfREVGKSAkOjplbnYoRElPREVfSU5TRVJUSU9OX0NVUlJFTlRfREVGKQorICAgIH0KKwlpZiB7ICgkOjplbnYoRElPREVfSU5TRVJUSU9OX1NUUkFURUdZKSA9PSAyKSB8fCAoJDo6ZW52KERJT0RFX0lOU0VSVElPTl9TVFJBVEVHWSkgPT0gNSkgfSB7CisJCXJ1bl9hbnRlbm5hX2NoZWNrCisJCWhlYWxfYW50ZW5uYV92aW9sYXRvcnM7ICMgbW9kaWZpZXMgdGhlIHJvdXRlZCBERUYKKwl9CisKK30KKworcHJvYyBydW5fcG93ZXJfcGluc19pbnNlcnRpb25fc3RlcCB7YXJnc30geworICAgICMgc2V0X2RlZiAkOjplbnYodHJpdG9uUm91dGVfcmVzdWx0X2ZpbGVfdGFnKS5kZWYKKyAgICBpZiB7ICEgWyBpbmZvIGV4aXN0cyA6OmVudihQT1dFUl9QSU5TX0lOU0VSVElPTl9DVVJSRU5UX0RFRikgXSB9IHsKKyAgICAgICAgc2V0IDo6ZW52KFBPV0VSX1BJTlNfSU5TRVJUSU9OX0NVUlJFTlRfREVGKSAkOjplbnYoQ1VSUkVOVF9ERUYpCisgICAgfSBlbHNlIHsKKyAgICAgICAgc2V0IDo6ZW52KENVUlJFTlRfREVGKSAkOjplbnYoUE9XRVJfUElOU19JTlNFUlRJT05fQ1VSUkVOVF9ERUYpCisgICAgfQorICAgIGlmIHsgJDo6ZW52KExWU19JTlNFUlRfUE9XRVJfUElOUykgfSB7CisJCXdyaXRlX3Bvd2VyZWRfdmVyaWxvZworCQlzZXRfbmV0bGlzdCAkOjplbnYobHZzX3Jlc3VsdF9maWxlX3RhZykucG93ZXJlZC52CisgICAgfQorCit9CisKKworcHJvYyBydW5fbHZzX3N0ZXAge3sgbHZzX2VuYWJsZWQgMSB9fSB7CisgICAgaWYgeyAhIFsgaW5mbyBleGlzdHMgOjplbnYoTFZTX0NVUlJFTlRfREVGKSBdIH0geworICAgICAgICBzZXQgOjplbnYoTFZTX0NVUlJFTlRfREVGKSAkOjplbnYoQ1VSUkVOVF9ERUYpCisgICAgfSBlbHNlIHsKKyAgICAgICAgc2V0IDo6ZW52KENVUlJFTlRfREVGKSAkOjplbnYoTFZTX0NVUlJFTlRfREVGKQorICAgIH0KKwlpZiB7ICRsdnNfZW5hYmxlZCB9IHsKKwkJcnVuX21hZ2ljX3NwaWNlX2V4cG9ydAorCQlydW5fbHZzOyAjIHJlcXVpcmVzIHJ1bl9tYWdpY19zcGljZV9leHBvcnQKKwl9CisKK30KKworcHJvYyBydW5fZHJjX3N0ZXAge3sgZHJjX2VuYWJsZWQgMSB9fSB7CisgICAgaWYgeyAhIFsgaW5mbyBleGlzdHMgOjplbnYoRFJDX0NVUlJFTlRfREVGKSBdIH0geworICAgICAgICBzZXQgOjplbnYoRFJDX0NVUlJFTlRfREVGKSAkOjplbnYoQ1VSUkVOVF9ERUYpCisgICAgfSBlbHNlIHsKKyAgICAgICAgc2V0IDo6ZW52KENVUlJFTlRfREVGKSAkOjplbnYoRFJDX0NVUlJFTlRfREVGKQorICAgIH0KKwlpZiB7ICRkcmNfZW5hYmxlZCB9IHsKKwkJcnVuX21hZ2ljX2RyYworCQlydW5fa2xheW91dF9kcmMKKwl9Cit9CisKK3Byb2MgcnVuX2FudGVubmFfY2hlY2tfc3RlcCB7eyBhbnRlbm5hX2NoZWNrX2VuYWJsZWQgMSB9fSB7CisgICAgaWYgeyAhIFsgaW5mbyBleGlzdHMgOjplbnYoQU5URU5OQV9DSEVDS19DVVJSRU5UX0RFRikgXSB9IHsKKyAgICAgICAgc2V0IDo6ZW52KEFOVEVOTkFfQ0hFQ0tfQ1VSUkVOVF9ERUYpICQ6OmVudihDVVJSRU5UX0RFRikKKyAgICB9IGVsc2UgeworICAgICAgICBzZXQgOjplbnYoQ1VSUkVOVF9ERUYpICQ6OmVudihBTlRFTk5BX0NIRUNLX0NVUlJFTlRfREVGKQorICAgIH0KKwlpZiB7ICRhbnRlbm5hX2NoZWNrX2VuYWJsZWQgfSB7CisJCXJ1bl9hbnRlbm5hX2NoZWNrCisJfQorfQorCisKK3Byb2MgZ2VuX3BkbiB7YXJnc30geworICAgIHB1dHNfaW5mbyAiR2VuZXJhdGluZyBQRE4uLi4iCisgICAgVElNRVI6OnRpbWVyX3N0YXJ0CisJCisgICAgc2V0IDo6ZW52KFNBVkVfREVGKSBbaW5kZXhfZmlsZSAkOjplbnYocGRuX3RtcF9maWxlX3RhZykuZGVmXQorICAgIHNldCA6OmVudihQR0FfUlBUX0ZJTEUpIFtpbmRleF9maWxlICQ6OmVudihwZG5fcmVwb3J0X2ZpbGVfdGFnKS5wZ2EucnB0XQorCisgICAgdHJ5X2NhdGNoICQ6OmVudihPUEVOUk9BRF9CSU4pIC1leGl0ICQ6OmVudihTQ1JJUFRTX0RJUikvb3BlbnJvYWQvcGRuLnRjbCBcCisJfCYgdGVlICQ6OmVudihURVJNSU5BTF9PVVRQVVQpIFtpbmRleF9maWxlICQ6OmVudihwZG5fbG9nX2ZpbGVfdGFnKS5sb2cgMF0KKworCisgICAgVElNRVI6OnRpbWVyX3N0b3AKKyAgICBleGVjIGVjaG8gIltUSU1FUjo6Z2V0X3J1bnRpbWVdIiA+PiBbaW5kZXhfZmlsZSAkOjplbnYocGRuX2xvZ19maWxlX3RhZylfcnVudGltZS50eHQgMF0KKworICAgIHF1aXRfb25fdW5jb25uZWN0ZWRfcGRuX25vZGVzCisKKyAgICBzZXRfZGVmICQ6OmVudihTQVZFX0RFRikKK30KKworcHJvYyBydW5fcG93ZXJfZ3JpZF9nZW5lcmF0aW9uIHthcmdzfSB7CisKKwlpZiB7W2luZm8gZXhpc3RzIDo6ZW52KEZQX1BETl9QT1dFUl9TVFJBUFMpXX0geworCSAgICAgc2V0IHBvd2VyX2RvbWFpbnMgW3NwbGl0ICQ6OmVudihGUF9QRE5fUE9XRVJfU1RSQVBTKSAiLCJdCisJfQorCisJIyBpbnRlcm5hbCBtYWNyb3MgcG93ZXIgY29ubmVjdGlvbnMgCisJaWYge1tpbmZvIGV4aXN0cyA6OmVudihGUF9QRE5fTUFDUk9fSE9PS1MpXX0geworCQlzZXQgbWFjcm9faG9va3MgW2RpY3QgY3JlYXRlXQorCQlzZXQgcGRuX2hvb2tzIFtzcGxpdCAkOjplbnYoRlBfUEROX01BQ1JPX0hPT0tTKSAiLCJdCisJCWZvcmVhY2ggcGRuX2hvb2sgJHBkbl9ob29rcyB7CisJCQlzZXQgaW5zdGFuY2VfbmFtZSBbbGluZGV4ICRwZG5faG9vayAwXQorCQkJc2V0IHBvd2VyX25ldCBbbGluZGV4ICRwZG5faG9vayAxXQorCQkJc2V0IGdyb3VuZF9uZXQgW2xpbmRleCAkcGRuX2hvb2sgMl0KKwkJCWRpY3QgYXBwZW5kIG1hY3JvX2hvb2tzICRpbnN0YW5jZV9uYW1lIFtzdWJzdCB7JHBvd2VyX25ldCAkZ3JvdW5kX25ldH1dCisJCX0KKwkJCisJCXNldCBwb3dlcl9uZXRfaW5keCBbbHNlYXJjaCAkOjplbnYoVkREX05FVFMpICRwb3dlcl9uZXRdCisJCXNldCBncm91bmRfbmV0X2luZHggW2xzZWFyY2ggJDo6ZW52KEdORF9ORVRTKSAkZ3JvdW5kX25ldF0KKworCQkjIG1ha2Ugc3VyZSB0aGF0IHRoZSBzcGVjaWZpZWQgcG93ZXIgZG9tYWlucyBleGlzdC4KKwkJaWYgeyAkcG93ZXJfbmV0X2luZHggPT0gLTEgIHx8ICRncm91bmRfbmV0X2luZHggPT0gLTEgfHwgJHBvd2VyX25ldF9pbmR4ICE9ICRncm91bmRfbmV0X2luZHggfSB7CisJCQlwdXRzX2VyciAiQ2FuJ3QgZmluZCAkcG93ZXJfbmV0IGFuZCAkZ3JvdW5kX25ldCBkb21haW4uIFwKKwkJCU1ha2Ugc3VyZSB0aGF0IGJvdGggZXhpc3QgaW4gJDo6ZW52KFZERF9ORVRTKSBhbmQgJDo6ZW52KEdORF9ORVRTKS4iIAorCQl9IAorCX0KKwkKKwkjIGdlbmVyYXRlIG11bHRpcGxlIHBvd2VyIGdyaWRzIHBlciBwYWlyIG9mIChWREQsR05EKQorCSMgb2Zmc2V0ZWQgYnkgV0lEVEggKyBTUEFDSU5HCisJZm9yZWFjaCBkb21haW4gJHBvd2VyX2RvbWFpbnMgeworCQlzZXQgOjplbnYoVkREX05FVCkgICAgICAgW2xpbmRleCAkZG9tYWluIDBdCisJICAgICAgICBzZXQgOjplbnYoR05EX05FVCkgICAgICAgW2xpbmRleCAkZG9tYWluIDFdCisJICAgICAgICBzZXQgOjplbnYoX1dJVEhfU1RSQVBTKSAgW2xpbmRleCAkZG9tYWluIDJdCisKKwkgICAgICAgIHB1dHNfaW5mbyAiQ29ubmVjdGluZyBQb3dlcjogJDo6ZW52KFZERF9ORVQpICYgJDo6ZW52KEdORF9ORVQpIHRvIEFsbCBpbnRlcm5hbCBtYWNyb3MuIgorCQkjIGludGVybmFsIG1hY3JvcyBwb3dlciBjb25uZWN0aW9ucworCQlzZXQgOjplbnYoRlBfUEROX01BQ1JPUykgIiIKKwkJaWYgeyAkOjplbnYoRlBfUEROX0VOQUJMRV9NQUNST1NfR1JJRCkgPT0gMSB9IHsKKwkJCSMgaWYgbWFjcm9zIGNvbm5lY3Rpb25zIHRvIHBvd2VyIGFyZSBleHBsaWNpdGx5IHNldAorCQkJIyBkZWZhdWx0IGJlaGF2b2lyIG1hY3JvIHBpbnMgd2lsbCBiZSBjb25uZWN0ZWQgdG8gdGhlIGZpcnN0IHBvd2VyIGRvbWFpbgorCQkJaWYgeyBbaW5mbyBleGlzdHMgOjplbnYoRlBfUEROX01BQ1JPX0hPT0tTKV0gfSB7CisJCQkJc2V0IDo6ZW52KEZQX1BETl9FTkFCTEVfTUFDUk9TX0dSSUQpIDAKKwkJCQlmb3JlYWNoIHtpbnN0YW5jZV9uYW1lIGhvb2tzfSAkbWFjcm9faG9va3MgeworCQkJCQlzZXQgcG93ZXIgW2xpbmRleCAkaG9va3MgMF0KKwkJCQkJc2V0IGdyb3VuZCBbbGluZGV4ICRob29rcyAxXQkJCSAKKwkJCQkJaWYgeyAkcG93ZXIgPT0gJDo6ZW52KFZERF9ORVQpICYmICRncm91bmQgPT0gJDo6ZW52KEdORF9ORVQpIH0geworCQkJCQkJc2V0IDo6ZW52KEZQX1BETl9FTkFCTEVfTUFDUk9TX0dSSUQpIDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldCA6OmVudihGUF9QRE5fSVJEUk9QKSAiMSIKKwkJCQkJCXB1dHNfaW5mbyAiQ29ubmVjdGluZyAkaW5zdGFuY2VfbmFtZSB0byAkcG93ZXIgYW5kICRncm91bmQgbmV0cy4iCisJCQkJCQlsYXBwZW5kIDo6ZW52KEZQX1BETl9NQUNST1MpICRpbnN0YW5jZV9uYW1lCisJCQkJCX0KKwkJCQl9CisJCQl9IAorCQl9IGVsc2UgeworCQkJcHV0c193YXJuICJBbGwgaW50ZXJuYWwgbWFjcm9zIHdpbGwgbm90IGJlIGNvbm5lY3RlZCB0byBwb3dlciAkOjplbnYoVkREX05FVCkgJiAkOjplbnYoR05EX05FVCkuIgorCQl9CisJCQorCQlnZW5fcGRuCisKKwkJc2V0IDo6ZW52KEZQX1BETl9FTkFCTEVfUkFJTFMpIDAKKwkJc2V0IDo6ZW52KEZQX1BETl9FTkFCTEVfTUFDUk9TX0dSSUQpIDAKKyAgICAgICAgICAgICAgICBzZXQgOjplbnYoRlBfUEROX0lSRFJPUCkgIjAiCisKKwkJIyBhbGxvdyBmYWlsdXJlIHVudGlsIG9wZW5fcGRrcyBpcyB1cCB0byBkYXRlLi4uCisJCWNhdGNoIHtzZXQgOjplbnYoRlBfUEROX1ZPRkZTRVQpIFtleHByICQ6OmVudihGUF9QRE5fVk9GRlNFVCkrJDo6ZW52KEZQX1BETl9WV0lEVEgpKyQ6OmVudihGUF9QRE5fVlNQQUNJTkcpXX0KKwkJY2F0Y2gge3NldCA6OmVudihGUF9QRE5fSE9GRlNFVCkgW2V4cHIgJDo6ZW52KEZQX1BETl9IT0ZGU0VUKSskOjplbnYoRlBfUEROX0hXSURUSCkrJDo6ZW52KEZQX1BETl9IU1BBQ0lORyldfQorCisJCWNhdGNoIHtzZXQgOjplbnYoRlBfUEROX0NPUkVfUklOR19WT0ZGU0VUKSBcCisJCQlbZXhwciAkOjplbnYoRlBfUEROX0NPUkVfUklOR19WT0ZGU0VUKVwKKwkJCSsyKigkOjplbnYoRlBfUEROX0NPUkVfUklOR19WV0lEVEgpXAorCQkJK21heCgkOjplbnYoRlBfUEROX0NPUkVfUklOR19WU1BBQ0lORyksICQ6OmVudihGUF9QRE5fQ09SRV9SSU5HX0hTUEFDSU5HKSkpXX0KKwkJY2F0Y2gge3NldCA6OmVudihGUF9QRE5fQ09SRV9SSU5HX0hPRkZTRVQpIFtleHByICQ6OmVudihGUF9QRE5fQ09SRV9SSU5HX0hPRkZTRVQpXAorCQkJKzIqKCQ6OmVudihGUF9QRE5fQ09SRV9SSU5HX0hXSURUSCkrXAorCQkJbWF4KCQ6OmVudihGUF9QRE5fQ09SRV9SSU5HX1ZTUEFDSU5HKSwgJDo6ZW52KEZQX1BETl9DT1JFX1JJTkdfSFNQQUNJTkcpKSldfQorCQlwdXRzICJGUF9QRE5fVk9GRlNFVDogJDo6ZW52KEZQX1BETl9WT0ZGU0VUKSIKKwkJcHV0cyAiRlBfUEROX0hPRkZTRVQ6ICQ6OmVudihGUF9QRE5fSE9GRlNFVCkiCisJCXB1dHMgIkZQX1BETl9DT1JFX1JJTkdfVk9GRlNFVDogJDo6ZW52KEZQX1BETl9DT1JFX1JJTkdfVk9GRlNFVCkiCisJCXB1dHMgIkZQX1BETl9DT1JFX1JJTkdfSE9GRlNFVDogJDo6ZW52KEZQX1BETl9DT1JFX1JJTkdfSE9GRlNFVCkiCisKKwl9CisJc2V0IDo6ZW52KEZQX1BETl9FTkFCTEVfUkFJTFMpIDEKK30KKworCitwcm9jIHJ1bl9mbG9vcnBsYW4ge2FyZ3N9IHsKKwkJcHV0c19pbmZvICJSdW5uaW5nIEZsb29ycGxhbm5pbmcuLi4iCisJCSMgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CisJCSMgfC0tLS0tLS0tLS0tLS0tLS0gICAyLiBGTE9PUlBMQU4gICAtLS0tLS0tLS0tLS0tLS0tLS18CisJCSMgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CisJCSMKKwkJIyBpbnRpYWwgZnAKKwkJaW5pdF9mbG9vcnBsYW4KKworCisJCSMgcGxhY2UgaW8KKwkJaWYgeyBbaW5mbyBleGlzdHMgOjplbnYoRlBfUElOX09SREVSX0NGRyldIH0geworCQkJCXBsYWNlX2lvX29sCisJCX0gZWxzZSB7CisJCQlpZiB7IFtpbmZvIGV4aXN0cyA6OmVudihGUF9DT05URVhUX0RFRildICYmIFtpbmZvIGV4aXN0cyA6OmVudihGUF9DT05URVhUX0xFRildIH0geworCQkJCXBsYWNlX2lvCisJCQkJZ2xvYmFsX3BsYWNlbWVudF9vcgorCQkJCXBsYWNlX2NvbnRleHR1YWxpemVkX2lvIFwKKwkJCQkJLWxlZiAkOjplbnYoRlBfQ09OVEVYVF9MRUYpIFwKKwkJCQkJLWRlZiAkOjplbnYoRlBfQ09OVEVYVF9ERUYpCisJCQl9IGVsc2UgeworCQkJCXBsYWNlX2lvCisJCQl9CisJCX0KKworCQlhcHBseV9kZWZfdGVtcGxhdGUKKworCQlpZiB7IFtpbmZvIGV4aXN0IDo6ZW52KEVYVFJBX0xFRlMpXSB9IHsKKwkJCWlmIHsgW2luZm8gZXhpc3QgOjplbnYoTUFDUk9fUExBQ0VNRU5UX0NGRyldIH0geworCQkJCWZpbGUgY29weSAtZm9yY2UgJDo6ZW52KE1BQ1JPX1BMQUNFTUVOVF9DRkcpICQ6OmVudihUTVBfRElSKS9tYWNyb19wbGFjZW1lbnQuY2ZnCisJCQkJbWFudWFsX21hY3JvX3BsYWNlbWVudCBmCisJCQl9IGVsc2UgeworCQkJCWdsb2JhbF9wbGFjZW1lbnRfb3IKKwkJCQliYXNpY19tYWNyb19wbGFjZW1lbnQKKwkJCX0KKwkJfQorCisJCSMgdGFwY2VsbAorCQl0YXBfZGVjYXBfb3IKKwkJc2Nyb3Rfa2xheW91dCAtbGF5b3V0ICQ6OmVudihDVVJSRU5UX0RFRikKKwkJIyBwb3dlciBncmlkIGdlbmVyYXRpb24KKwkJcnVuX3Bvd2VyX2dyaWRfZ2VuZXJhdGlvbgorfQorCisKK3Byb2MgcnVuX2Zsb3cge2FyZ3N9IHsKKyAgICAgICBzZXQgc2NyaXB0X2RpciBbZmlsZSBkaXJuYW1lIFtmaWxlIG5vcm1hbGl6ZSBbaW5mbyBzY3JpcHRdXV0KKworCQlzZXQgb3B0aW9ucyB7CisJCXstZGVzaWduIHJlcXVpcmVkfQorCQl7LXNhdmVfcGF0aCBvcHRpb25hbH0KKwkJey1ub19sdnMgb3B0aW9uYWx9CisJICAgIHstbm9fZHJjIG9wdGlvbmFsfQorCSAgICB7LW5vX2FudGVubmFjaGVjayBvcHRpb25hbH0KKwl9CisJc2V0IGZsYWdzIHstc2F2ZX0KKwlwYXJzZV9rZXlfYXJncyAicnVuX2Zsb3ciIGFyZ3MgYXJnX3ZhbHVlcyAkb3B0aW9ucyBmbGFnc19tYXAgJGZsYWdzIC1ub19jb25zdW1lCisKKwlwcmVwIHsqfSRhcmdzCisKKyAgICAgICAgc2V0IExWU19FTkFCTEVEIDEKKyAgICAgICAgc2V0IERSQ19FTkFCTEVEIDAKKyAgICAgICAgc2V0IEFOVEVOTkFDSEVDS19FTkFCTEVEIDEKKworICAgICAgICBzZXQgc3RlcHMgW2RpY3QgY3JlYXRlIFwKKwkJInN5bnRoZXNpcyIge3J1bl9zeW50aGVzaXMgIiIgfSBcCisgICAgICAgICAgICAgICAgImZsb29ycGxhbiIge3J1bl9mbG9vcnBsYW4gIiJ9IFwKKyAgICAgICAgICAgICAgICAicGxhY2VtZW50IiB7cnVuX3BsYWNlbWVudF9zdGVwICIifSBcCisgICAgICAgICAgICAgICAgImN0cyIge3J1bl9jdHNfc3RlcCAiIn0gXAorICAgICAgICAgICAgICAgICJyb3V0aW5nIiB7cnVuX3JvdXRpbmdfc3RlcCAiIn0gXAorICAgICAgICAgICAgICAgICJkaW9kZV9pbnNlcnRpb24iIHtydW5fZGlvZGVfaW5zZXJ0aW9uXzJfNV9zdGVwICIifSBcCisgICAgICAgICAgICAgICAgInBvd2VyX3BpbnNfaW5zZXJ0aW9uIiB7cnVuX3Bvd2VyX3BpbnNfaW5zZXJ0aW9uX3N0ZXAgIiJ9IFwKKyAgICAgICAgICAgICAgICAiZ2RzX21hZ2ljIiB7cnVuX21hZ2ljICIifSBcCisgICAgICAgICAgICAgICAgImdkc19kcmNfa2xheW91dCIge3J1bl9rbGF5b3V0ICIifSBcCisgICAgICAgICAgICAgICAgImdkc194b3Jfa2xheW91dCIge3J1bl9rbGF5b3V0X2dkc194b3IgIiJ9IFwKKyAgICAgICAgICAgICAgICAibHZzIiAicnVuX2x2c19zdGVwICRMVlNfRU5BQkxFRCIgXAorICAgICAgICAgICAgICAgICJkcmMiICJydW5fZHJjX3N0ZXAgJERSQ19FTkFCTEVEIiBcCisgICAgICAgICAgICAgICAgImFudGVubmFfY2hlY2siICJydW5fYW50ZW5uYV9jaGVja19zdGVwICRBTlRFTk5BQ0hFQ0tfRU5BQkxFRCIgXAorICAgICAgICAgICAgICAgICJjdmMiIHtydW5fbGVmX2N2Y30KKyAgICAgICAgXQorCisgICAgICAgc2V0X2lmX3Vuc2V0IGFyZ192YWx1ZXMoLXRvKSAiY3ZjIjsKKworICAgICAgIGlmIHsgIFtpbmZvIGV4aXN0cyA6OmVudihDVVJSRU5UX1NURVApIF0gfSB7CisgICAgICAgICAgIHB1dHMgIlxbSU5GT1xdOlBpY2tpbmcgdXAgd2hlcmUgbGFzdCBleGVjdXRpb24gbGVmdCBvZmYiCisgICAgICAgICAgIHB1dHMgW2Zvcm1hdCAiXFtJTkZPXF06Q3VycmVudCBzdGFnZSBpcyAlcyAiICQ6OmVudihDVVJSRU5UX1NURVApXQorICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgIHNldCA6OmVudihDVVJSRU5UX1NURVApICJzeW50aGVzaXMiOworICAgICAgIH0KKyAgICAgICBzZXRfaWZfdW5zZXQgYXJnX3ZhbHVlcygtZnJvbSkgJDo6ZW52KENVUlJFTlRfU1RFUCk7CisgICAgICAgc2V0IGV4ZSAwOworICAgICAgIGRpY3QgZm9yIHtzdGVwX25hbWUgc3RlcF9leGV9ICRzdGVwcyB7CisgICAgICAgICAgIGlmIHsgWyBzdHJpbmcgZXF1YWwgJGFyZ192YWx1ZXMoLWZyb20pICRzdGVwX25hbWUgXSB9IHsKKyAgICAgICAgICAgICAgIHNldCBleGUgMTsKKyAgICAgICAgICAgfQorCisgICAgICAgICAgIGlmIHsgJGV4ZSB9IHsKKyAgICAgICAgICAgICAgICMgRm9yIHdoZW4gaXQgZmFpbHMKKyAgICAgICAgICAgICAgIHNldCA6OmVudihDVVJSRU5UX1NURVApICRzdGVwX25hbWUKKyAgICAgICAgICAgICAgIFtsaW5kZXggJHN0ZXBfZXhlIDBdIFtsaW5kZXggJHN0ZXBfZXhlIDFdIDsKKyAgICAgICAgICAgfQorCisgICAgICAgICAgIGlmIHsgWyBzdHJpbmcgZXF1YWwgJGFyZ192YWx1ZXMoLXRvKSAkc3RlcF9uYW1lIF0gfSB7CisgICAgICAgICAgICAgICBzZXQgZXhlIDA6CisgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgfQorCisgICAgICAgfQorCisgICAgICAgIyBmb3Igd2hlbiBpdCByZXN1bWVzCisgICAgICAgc2V0IHN0ZXBzX2FzX2xpc3QgW2RpY3Qga2V5cyAkc3RlcHNdCisgICAgICAgc2V0IG5leHRfaWR4IFtleHByIFtsc2VhcmNoICRzdGVwc19hc19saXN0ICQ6OmVudihDVVJSRU5UX1NURVApXSArIDFdCisgICAgICAgc2V0IDo6ZW52KENVUlJFTlRfU1RFUCkgW2xpbmRleCAkc3RlcHNfYXNfbGlzdCAkbmV4dF9pZHhdCisKKwlpZiB7ICBbaW5mbyBleGlzdHMgZmxhZ3NfbWFwKC1zYXZlKSBdIH0geworCQlpZiB7ICEgW2luZm8gZXhpc3RzIGFyZ192YWx1ZXMoLXNhdmVfcGF0aCldIH0geworCQkJc2V0IGFyZ192YWx1ZXMoLXNhdmVfcGF0aCkgIiIKKwkJfQorCQlzYXZlX3ZpZXdzIAktbGVmX3BhdGggJDo6ZW52KG1hZ2ljX3Jlc3VsdF9maWxlX3RhZykubGVmIFwKKwkJCS1kZWZfcGF0aCAkOjplbnYoQ1VSUkVOVF9ERUYpIFwKKwkJCS1nZHNfcGF0aCAkOjplbnYobWFnaWNfcmVzdWx0X2ZpbGVfdGFnKS5nZHMgXAorCQkJLW1hZ19wYXRoICQ6OmVudihtYWdpY19yZXN1bHRfZmlsZV90YWcpLm1hZyBcCisJCQktbWFnbGVmX3BhdGggJDo6ZW52KG1hZ2ljX3Jlc3VsdF9maWxlX3RhZykubGVmLm1hZyBcCisJCQktc3BpY2VfcGF0aCAkOjplbnYobWFnaWNfcmVzdWx0X2ZpbGVfdGFnKS5zcGljZSBcCisJCQktc3BlZl9wYXRoICQ6OmVudihDVVJSRU5UX1NQRUYpIFwKKwkJCS12ZXJpbG9nX3BhdGggJDo6ZW52KENVUlJFTlRfTkVUTElTVCkgXAorCQkJLXNhdmVfcGF0aCAkYXJnX3ZhbHVlcygtc2F2ZV9wYXRoKSBcCisJCQktdGFnICQ6OmVudihSVU5fVEFHKQorCX0KKworCisJY2FsY190b3RhbF9ydW50aW1lCisJc2F2ZV9zdGF0ZQorCWdlbmVyYXRlX2ZpbmFsX3N1bW1hcnlfcmVwb3J0CisJCisJY2hlY2tfdGltaW5nX3Zpb2xhdGlvbnMKKworCXB1dHNfc3VjY2VzcyAiRmxvdyBDb21wbGV0ZWQgV2l0aG91dCBGYXRhbCBFcnJvcnMuIgorCit9CisKK3J1bl9mbG93IHsqfSRhcmd2CmRpZmYgLS1naXQgYS9vcGVubGFuZS91c2VyX3Byb2plY3Rfd3JhcHBlci9pbnRlcmFjdGl2ZS50Y2wgYi9vcGVubGFuZS91c2VyX3Byb2plY3Rfd3JhcHBlci9pbnRlcmFjdGl2ZS50Y2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU2NjhjZAotLS0gL2Rldi9udWxsCisrKyBiL29wZW5sYW5lL3VzZXJfcHJvamVjdF93cmFwcGVyL2ludGVyYWN0aXZlLnRjbApAQCAtMCwwICsxLDQzOCBAQAorIyEvdXNyL2Jpbi90Y2xzaAorIyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIwIEVmYWJsZXNzIENvcnBvcmF0aW9uCisjIENvcHlyaWdodCAyMDIwIEVmYWJsZXNzIENvcnBvcmF0aW9uCisjIENvcHlyaWdodCAyMDIwIFN5bHZhaW4gTXVuYXV0CisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorCitwYWNrYWdlIHJlcXVpcmUgb3BlbmxhbmU7CisKK3Byb2MgcnVuX3BsYWNlbWVudF9zdGVwIHthcmdzfSB7CisgICAgaWYgeyAhIFsgaW5mbyBleGlzdHMgOjplbnYoUExBQ0VNRU5UX0NVUlJFTlRfREVGKSBdIH0geworICAgICAgICBzZXQgOjplbnYoUExBQ0VNRU5UX0NVUlJFTlRfREVGKSAkOjplbnYoQ1VSUkVOVF9ERUYpCisgICAgfSBlbHNlIHsKKyAgICAgICAgc2V0IDo6ZW52KENVUlJFTlRfREVGKSAkOjplbnYoUExBQ0VNRU5UX0NVUlJFTlRfREVGKQorICAgIH0KKworICAgIHJ1bl9wbGFjZW1lbnQKK30KKworcHJvYyBydW5fY3RzX3N0ZXAge2FyZ3N9IHsKKyAgICBpZiB7ICEgWyBpbmZvIGV4aXN0cyA6OmVudihDVFNfQ1VSUkVOVF9ERUYpIF0gfSB7CisgICAgICAgIHNldCA6OmVudihDVFNfQ1VSUkVOVF9ERUYpICQ6OmVudihDVVJSRU5UX0RFRikKKyAgICB9IGVsc2UgeworICAgICAgICBzZXQgOjplbnYoQ1VSUkVOVF9ERUYpICQ6OmVudihDVFNfQ1VSUkVOVF9ERUYpCisgICAgfQorCisgICAgcnVuX2N0cworICAgIHJ1bl9yZXNpemVyX3RpbWluZworfQorCitwcm9jIHJ1bl9yb3V0aW5nX3N0ZXAge2FyZ3N9IHsKKyAgICBpZiB7ICEgWyBpbmZvIGV4aXN0cyA6OmVudihST1VUSU5HX0NVUlJFTlRfREVGKSBdIH0geworICAgICAgICBzZXQgOjplbnYoUk9VVElOR19DVVJSRU5UX0RFRikgJDo6ZW52KENVUlJFTlRfREVGKQorICAgIH0gZWxzZSB7CisgICAgICAgIHNldCA6OmVudihDVVJSRU5UX0RFRikgJDo6ZW52KFJPVVRJTkdfQ1VSUkVOVF9ERUYpCisgICAgfQorICAgIHJ1bl9yb3V0aW5nCit9CisKK3Byb2MgcnVuX2Rpb2RlX2luc2VydGlvbl8yXzVfc3RlcCB7YXJnc30geworICAgIGlmIHsgISBbIGluZm8gZXhpc3RzIDo6ZW52KERJT0RFX0lOU0VSVElPTl9DVVJSRU5UX0RFRikgXSB9IHsKKyAgICAgICAgc2V0IDo6ZW52KERJT0RFX0lOU0VSVElPTl9DVVJSRU5UX0RFRikgJDo6ZW52KENVUlJFTlRfREVGKQorICAgIH0gZWxzZSB7CisgICAgICAgIHNldCA6OmVudihDVVJSRU5UX0RFRikgJDo6ZW52KERJT0RFX0lOU0VSVElPTl9DVVJSRU5UX0RFRikKKyAgICB9CisJaWYgeyAoJDo6ZW52KERJT0RFX0lOU0VSVElPTl9TVFJBVEVHWSkgPT0gMikgfHwgKCQ6OmVudihESU9ERV9JTlNFUlRJT05fU1RSQVRFR1kpID09IDUpIH0geworCQlydW5fYW50ZW5uYV9jaGVjaworCQloZWFsX2FudGVubmFfdmlvbGF0b3JzOyAjIG1vZGlmaWVzIHRoZSByb3V0ZWQgREVGCisJfQorCit9CisKK3Byb2MgcnVuX2x2c19zdGVwIHt7IGx2c19lbmFibGVkIDEgfX0geworICAgIGlmIHsgISBbIGluZm8gZXhpc3RzIDo6ZW52KExWU19DVVJSRU5UX0RFRikgXSB9IHsKKyAgICAgICAgc2V0IDo6ZW52KExWU19DVVJSRU5UX0RFRikgJDo6ZW52KENVUlJFTlRfREVGKQorICAgIH0gZWxzZSB7CisgICAgICAgIHNldCA6OmVudihDVVJSRU5UX0RFRikgJDo6ZW52KExWU19DVVJSRU5UX0RFRikKKyAgICB9CisJaWYgeyAkbHZzX2VuYWJsZWQgfSB7CisJCXJ1bl9tYWdpY19zcGljZV9leHBvcnQKKwkJcnVuX2x2czsgIyByZXF1aXJlcyBydW5fbWFnaWNfc3BpY2VfZXhwb3J0CisJfQorCit9CisKK3Byb2MgcnVuX2RyY19zdGVwIHt7IGRyY19lbmFibGVkIDEgfX0geworICAgIGlmIHsgISBbIGluZm8gZXhpc3RzIDo6ZW52KERSQ19DVVJSRU5UX0RFRikgXSB9IHsKKyAgICAgICAgc2V0IDo6ZW52KERSQ19DVVJSRU5UX0RFRikgJDo6ZW52KENVUlJFTlRfREVGKQorICAgIH0gZWxzZSB7CisgICAgICAgIHNldCA6OmVudihDVVJSRU5UX0RFRikgJDo6ZW52KERSQ19DVVJSRU5UX0RFRikKKyAgICB9CisJaWYgeyAkZHJjX2VuYWJsZWQgfSB7CisJCXJ1bl9tYWdpY19kcmMKKwkJcnVuX2tsYXlvdXRfZHJjCisJfQorfQorCitwcm9jIHJ1bl9hbnRlbm5hX2NoZWNrX3N0ZXAge3sgYW50ZW5uYV9jaGVja19lbmFibGVkIDEgfX0geworICAgIGlmIHsgISBbIGluZm8gZXhpc3RzIDo6ZW52KEFOVEVOTkFfQ0hFQ0tfQ1VSUkVOVF9ERUYpIF0gfSB7CisgICAgICAgIHNldCA6OmVudihBTlRFTk5BX0NIRUNLX0NVUlJFTlRfREVGKSAkOjplbnYoQ1VSUkVOVF9ERUYpCisgICAgfSBlbHNlIHsKKyAgICAgICAgc2V0IDo6ZW52KENVUlJFTlRfREVGKSAkOjplbnYoQU5URU5OQV9DSEVDS19DVVJSRU5UX0RFRikKKyAgICB9CisJaWYgeyAkYW50ZW5uYV9jaGVja19lbmFibGVkIH0geworCQlydW5fYW50ZW5uYV9jaGVjaworCX0KK30KKworcHJvYyBydW5fZWNvX3N0ZXAge2FyZ3N9IHsKKwlpZiB7ICAkOjplbnYoRUNPX0VOQUJMRSkgPT0gMSB9IHsKKyAgICAgICAgcnVuX2VjbworICAgIH0KK30KKworcHJvYyBzYXZlX2ZpbmFsX3ZpZXdzIHthcmdzfSB7CisJc2V0IG9wdGlvbnMgeworCQl7LXNhdmVfcGF0aCBvcHRpb25hbH0KKwl9CisJc2V0IGZsYWdzIHt9CisJcGFyc2Vfa2V5X2FyZ3MgInNhdmVfZmluYWxfdmlld3MiIGFyZ3MgYXJnX3ZhbHVlcyAkb3B0aW9ucyBmbGFnc19tYXAgJGZsYWdzCisKKwlzZXQgYXJnX2xpc3QgW2xpc3RdCisKKwkjIElmIHRoZXkgZG9uJ3QgZXhpc3QsIHNhdmVfdmlld3Mgd2lsbCBzaW1wbHkgbm90IGNvcHkgdGhlbQorCWxhcHBlbmQgYXJnX2xpc3QgLWxlZl9wYXRoICQ6OmVudihmaW5pc2hpbmdfcmVzdWx0cykvJDo6ZW52KERFU0lHTl9OQU1FKS5sZWYKKwlsYXBwZW5kIGFyZ19saXN0IC1nZHNfcGF0aCAkOjplbnYoZmluaXNoaW5nX3Jlc3VsdHMpLyQ6OmVudihERVNJR05fTkFNRSkuZ2RzCisJbGFwcGVuZCBhcmdfbGlzdCAtbWFnX3BhdGggJDo6ZW52KGZpbmlzaGluZ19yZXN1bHRzKS8kOjplbnYoREVTSUdOX05BTUUpLm1hZworCWxhcHBlbmQgYXJnX2xpc3QgLW1hZ2xlZl9wYXRoICQ6OmVudihmaW5pc2hpbmdfcmVzdWx0cykvJDo6ZW52KERFU0lHTl9OQU1FKS5sZWYubWFnCisJbGFwcGVuZCBhcmdfbGlzdCAtc3BpY2VfcGF0aCAkOjplbnYoZmluaXNoaW5nX3Jlc3VsdHMpLyQ6OmVudihERVNJR05fTkFNRSkuc3BpY2UKKwkKKwkjIEd1YXJhbnRlZWQgdG8gaGF2ZSBkZWZhdWx0IHZhbHVlcworCWxhcHBlbmQgYXJnX2xpc3QgLWRlZl9wYXRoICQ6OmVudihDVVJSRU5UX0RFRikKKwlsYXBwZW5kIGFyZ19saXN0IC12ZXJpbG9nX3BhdGggJDo6ZW52KENVUlJFTlRfTkVUTElTVCkKKworCSMgTm90IGd1YXJhbnRlZWQgdG8gaGF2ZSBkZWZhdWx0IHZhbHVlcworCWlmIHsgW2luZm8gZXhpc3RzIDo6ZW52KFNQRUZfVFlQSUNBTCldIH0geworCQlsYXBwZW5kIGFyZ19saXN0IC1zcGVmX3BhdGggJDo6ZW52KFNQRUZfVFlQSUNBTCkKKwl9CisJaWYgeyBbaW5mbyBleGlzdHMgOjplbnYoQ1VSUkVOVF9TREYpXSB9IHsKKwkJbGFwcGVuZCBhcmdfbGlzdCAtc2RmX3BhdGggJDo6ZW52KENVUlJFTlRfU0RGKQorCX0KKwlpZiB7IFtpbmZvIGV4aXN0cyA6OmVudihDVVJSRU5UX1NEQyldIH0geworCQlsYXBwZW5kIGFyZ19saXN0IC1zZGNfcGF0aCAkOjplbnYoQ1VSUkVOVF9TREMpCisJfQorCisJIyBBZGQgdGhlIHBhdGggaWYgaXQgZXhpc3RzLi4uCisJaWYgeyBbaW5mbyBleGlzdHMgYXJnX3ZhbHVlcygtc2F2ZV9wYXRoKSBdIH0geworCQlsYXBwZW5kIGFyZ19saXN0IC1zYXZlX3BhdGggJGFyZ192YWx1ZXMoLXNhdmVfcGF0aCkKKwl9CisKKwkjIEFhYW5kIGZpcmUhCisJc2F2ZV92aWV3cyB7Kn0kYXJnX2xpc3QKKworfQorCitwcm9jIHJ1bl9wb3N0X3J1bl9ob29rcyB7fSB7CisJaWYgeyBbZmlsZSBleGlzdHMgJDo6ZW52KERFU0lHTl9ESVIpL2hvb2tzL3Bvc3RfcnVuLnB5XX0geworCQlwdXRzX2luZm8gIlJ1bm5pbmcgcG9zdCBydW4gaG9vayIKKwkJc2V0IHJlc3VsdCBbZXhlYyAkOjplbnYoT1BFTlJPQURfQklOKSAtcHl0aG9uICQ6OmVudihERVNJR05fRElSKS9ob29rcy9wb3N0X3J1bi5weV0KKwkJcHV0c19pbmZvICIkcmVzdWx0IgorCX0gZWxzZSB7CisJCXB1dHNfaW5mbyAiaG9va3MvcG9zdF9ydW4ucHkgbm90IGZvdW5kLCBza2lwcGluZyIKKwl9Cit9CisKKworCisKK3Byb2MgZ2VuX3BkbiB7YXJnc30geworICAgIHB1dHNfaW5mbyAiR2VuZXJhdGluZyBQRE4uLi4iCisgICAgVElNRVI6OnRpbWVyX3N0YXJ0CisJCisgICAgc2V0IDo6ZW52KFNBVkVfREVGKSBbaW5kZXhfZmlsZSAkOjplbnYoZmxvb3JwbGFuX3RtcGZpbGVzKS5kZWZdCisgICAgc2V0IDo6ZW52KFBHQV9SUFRfRklMRSkgW2luZGV4X2ZpbGUgJDo6ZW52KGZsb29ycGxhbl90bXBmaWxlcykucGdhLnJwdF0KKworICAgIHJ1bl9vcGVucm9hZF9zY3JpcHQgJDo6ZW52KFNDUklQVFNfRElSKS9vcGVucm9hZC9wZG4udGNsIFwKKyAgICAgICAgfCYgLWluZGV4ZWRfbG9nIFtpbmRleF9maWxlICQ6OmVudihmbG9vcnBsYW5fbG9ncykvcGRuLmxvZ10KKworCisgICAgVElNRVI6OnRpbWVyX3N0b3AKKyAgICBleGVjIGVjaG8gIltUSU1FUjo6Z2V0X3J1bnRpbWVdIiB8IHB5dGhvbjMgJDo6ZW52KFNDUklQVFNfRElSKS93cml0ZV9ydW50aW1lLnB5ICJwZG4gZ2VuZXJhdGlvbiAtIG9wZW5yb2FkIgorCisgICAgcXVpdF9vbl91bmNvbm5lY3RlZF9wZG5fbm9kZXMKKworICAgIHNldF9kZWYgJDo6ZW52KFNBVkVfREVGKQorfQorCitwcm9jIHJ1bl9wb3dlcl9ncmlkX2dlbmVyYXRpb24ge2FyZ3N9IHsKKworCWlmIHtbaW5mbyBleGlzdHMgOjplbnYoRlBfUEROX1BPV0VSX1NUUkFQUyldfSB7CisJICAgICBzZXQgcG93ZXJfZG9tYWlucyBbc3BsaXQgJDo6ZW52KEZQX1BETl9QT1dFUl9TVFJBUFMpICIsIl0KKwl9CisKKwkjIGludGVybmFsIG1hY3JvcyBwb3dlciBjb25uZWN0aW9ucyAKKwlpZiB7W2luZm8gZXhpc3RzIDo6ZW52KEZQX1BETl9NQUNST19IT09LUyldfSB7CisJCXNldCBtYWNyb19ob29rcyBbZGljdCBjcmVhdGVdCisJCXNldCBwZG5faG9va3MgW3NwbGl0ICQ6OmVudihGUF9QRE5fTUFDUk9fSE9PS1MpICIsIl0KKwkJZm9yZWFjaCBwZG5faG9vayAkcGRuX2hvb2tzIHsKKwkJCXNldCBpbnN0YW5jZV9uYW1lIFtsaW5kZXggJHBkbl9ob29rIDBdCisJCQlzZXQgcG93ZXJfbmV0IFtsaW5kZXggJHBkbl9ob29rIDFdCisJCQlzZXQgZ3JvdW5kX25ldCBbbGluZGV4ICRwZG5faG9vayAyXQorCQkJZGljdCBhcHBlbmQgbWFjcm9faG9va3MgJGluc3RhbmNlX25hbWUgW3N1YnN0IHskcG93ZXJfbmV0ICRncm91bmRfbmV0fV0KKwkJfQorCQkKKwkJc2V0IHBvd2VyX25ldF9pbmR4IFtsc2VhcmNoICQ6OmVudihWRERfTkVUUykgJHBvd2VyX25ldF0KKwkJc2V0IGdyb3VuZF9uZXRfaW5keCBbbHNlYXJjaCAkOjplbnYoR05EX05FVFMpICRncm91bmRfbmV0XQorCisJCSMgbWFrZSBzdXJlIHRoYXQgdGhlIHNwZWNpZmllZCBwb3dlciBkb21haW5zIGV4aXN0LgorCQlpZiB7ICRwb3dlcl9uZXRfaW5keCA9PSAtMSAgfHwgJGdyb3VuZF9uZXRfaW5keCA9PSAtMSB8fCAkcG93ZXJfbmV0X2luZHggIT0gJGdyb3VuZF9uZXRfaW5keCB9IHsKKwkJCXB1dHNfZXJyICJDYW4ndCBmaW5kICRwb3dlcl9uZXQgYW5kICRncm91bmRfbmV0IGRvbWFpbi4gXAorCQkJTWFrZSBzdXJlIHRoYXQgYm90aCBleGlzdCBpbiAkOjplbnYoVkREX05FVFMpIGFuZCAkOjplbnYoR05EX05FVFMpLiIgCisJCX0gCisJfQorCQorCSMgZ2VuZXJhdGUgbXVsdGlwbGUgcG93ZXIgZ3JpZHMgcGVyIHBhaXIgb2YgKFZERCxHTkQpCisJIyBvZmZzZXRlZCBieSBXSURUSCArIFNQQUNJTkcKKwlmb3JlYWNoIGRvbWFpbiAkcG93ZXJfZG9tYWlucyB7CisJCXNldCA6OmVudihWRERfTkVUKSAgICAgICBbbGluZGV4ICRkb21haW4gMF0KKwkgICAgICAgIHNldCA6OmVudihHTkRfTkVUKSAgICAgICBbbGluZGV4ICRkb21haW4gMV0KKwkgICAgICAgIHNldCA6OmVudihfV0lUSF9TVFJBUFMpICBbbGluZGV4ICRkb21haW4gMl0KKworCSAgICAgICAgcHV0c19pbmZvICJDb25uZWN0aW5nIFBvd2VyOiAkOjplbnYoVkREX05FVCkgJiAkOjplbnYoR05EX05FVCkgdG8gQWxsIGludGVybmFsIG1hY3Jvcy4iCisJCSMgaW50ZXJuYWwgbWFjcm9zIHBvd2VyIGNvbm5lY3Rpb25zCisJCXNldCA6OmVudihGUF9QRE5fTUFDUk9TKSAiIgorCQlpZiB7ICQ6OmVudihGUF9QRE5fRU5BQkxFX01BQ1JPU19HUklEKSA9PSAxIH0geworCQkJIyBpZiBtYWNyb3MgY29ubmVjdGlvbnMgdG8gcG93ZXIgYXJlIGV4cGxpY2l0bHkgc2V0CisJCQkjIGRlZmF1bHQgYmVoYXZvaXIgbWFjcm8gcGlucyB3aWxsIGJlIGNvbm5lY3RlZCB0byB0aGUgZmlyc3QgcG93ZXIgZG9tYWluCisJCQlpZiB7IFtpbmZvIGV4aXN0cyA6OmVudihGUF9QRE5fTUFDUk9fSE9PS1MpXSB9IHsKKwkJCQlzZXQgOjplbnYoRlBfUEROX0VOQUJMRV9NQUNST1NfR1JJRCkgMAorCQkJCWZvcmVhY2gge2luc3RhbmNlX25hbWUgaG9va3N9ICRtYWNyb19ob29rcyB7CisJCQkJCXNldCBwb3dlciBbbGluZGV4ICRob29rcyAwXQorCQkJCQlzZXQgZ3JvdW5kIFtsaW5kZXggJGhvb2tzIDFdCQkJIAorCQkJCQlpZiB7ICRwb3dlciA9PSAkOjplbnYoVkREX05FVCkgJiYgJGdyb3VuZCA9PSAkOjplbnYoR05EX05FVCkgfSB7CisJCQkJCQlzZXQgOjplbnYoRlBfUEROX0VOQUJMRV9NQUNST1NfR1JJRCkgMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0IDo6ZW52KEZQX1BETl9JUkRST1ApICIxIgorCQkJCQkJcHV0c19pbmZvICJDb25uZWN0aW5nICRpbnN0YW5jZV9uYW1lIHRvICRwb3dlciBhbmQgJGdyb3VuZCBuZXRzLiIKKwkJCQkJCWxhcHBlbmQgOjplbnYoRlBfUEROX01BQ1JPUykgJGluc3RhbmNlX25hbWUKKwkJCQkJfQorCQkJCX0KKwkJCX0gCisJCX0gZWxzZSB7CisJCQlwdXRzX3dhcm4gIkFsbCBpbnRlcm5hbCBtYWNyb3Mgd2lsbCBub3QgYmUgY29ubmVjdGVkIHRvIHBvd2VyICQ6OmVudihWRERfTkVUKSAmICQ6OmVudihHTkRfTkVUKS4iCisJCX0KKwkJCisJCWdlbl9wZG4KKworCQlzZXQgOjplbnYoRlBfUEROX0VOQUJMRV9SQUlMUykgMAorCQlzZXQgOjplbnYoRlBfUEROX0VOQUJMRV9NQUNST1NfR1JJRCkgMAorICAgICAgICAgICAgICAgIHNldCA6OmVudihGUF9QRE5fSVJEUk9QKSAiMCIKKworCQkjIGFsbG93IGZhaWx1cmUgdW50aWwgb3Blbl9wZGtzIGlzIHVwIHRvIGRhdGUuLi4KKwkJY2F0Y2gge3NldCA6OmVudihGUF9QRE5fVk9GRlNFVCkgW2V4cHIgJDo6ZW52KEZQX1BETl9WT0ZGU0VUKSskOjplbnYoRlBfUEROX1ZXSURUSCkrJDo6ZW52KEZQX1BETl9WU1BBQ0lORyldfQorCQljYXRjaCB7c2V0IDo6ZW52KEZQX1BETl9IT0ZGU0VUKSBbZXhwciAkOjplbnYoRlBfUEROX0hPRkZTRVQpKyQ6OmVudihGUF9QRE5fSFdJRFRIKSskOjplbnYoRlBfUEROX0hTUEFDSU5HKV19CisKKwkJY2F0Y2gge3NldCA6OmVudihGUF9QRE5fQ09SRV9SSU5HX1ZPRkZTRVQpIFwKKwkJCVtleHByICQ6OmVudihGUF9QRE5fQ09SRV9SSU5HX1ZPRkZTRVQpXAorCQkJKzIqKCQ6OmVudihGUF9QRE5fQ09SRV9SSU5HX1ZXSURUSClcCisJCQkrbWF4KCQ6OmVudihGUF9QRE5fQ09SRV9SSU5HX1ZTUEFDSU5HKSwgJDo6ZW52KEZQX1BETl9DT1JFX1JJTkdfSFNQQUNJTkcpKSldfQorCQljYXRjaCB7c2V0IDo6ZW52KEZQX1BETl9DT1JFX1JJTkdfSE9GRlNFVCkgW2V4cHIgJDo6ZW52KEZQX1BETl9DT1JFX1JJTkdfSE9GRlNFVClcCisJCQkrMiooJDo6ZW52KEZQX1BETl9DT1JFX1JJTkdfSFdJRFRIKStcCisJCQltYXgoJDo6ZW52KEZQX1BETl9DT1JFX1JJTkdfVlNQQUNJTkcpLCAkOjplbnYoRlBfUEROX0NPUkVfUklOR19IU1BBQ0lORykpKV19CisJCXB1dHMgIkZQX1BETl9WT0ZGU0VUOiAkOjplbnYoRlBfUEROX1ZPRkZTRVQpIgorCQlwdXRzICJGUF9QRE5fSE9GRlNFVDogJDo6ZW52KEZQX1BETl9IT0ZGU0VUKSIKKwkJcHV0cyAiRlBfUEROX0NPUkVfUklOR19WT0ZGU0VUOiAkOjplbnYoRlBfUEROX0NPUkVfUklOR19WT0ZGU0VUKSIKKwkJcHV0cyAiRlBfUEROX0NPUkVfUklOR19IT0ZGU0VUOiAkOjplbnYoRlBfUEROX0NPUkVfUklOR19IT0ZGU0VUKSIKKworCX0KKwlzZXQgOjplbnYoRlBfUEROX0VOQUJMRV9SQUlMUykgMQorfQorCisKK3Byb2MgcnVuX2Zsb29ycGxhbiB7YXJnc30geworCXB1dHNfaW5mbyAiUnVubmluZyBGbG9vcnBsYW5uaW5nLi4uIgorCSMgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CisJIyB8LS0tLS0tLS0tLS0tLS0tLSAgIDIuIEZMT09SUExBTiAgIC0tLS0tLS0tLS0tLS0tLS0tLXwKKwkjIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAorCSMKKwkjIGludGlhbCBmcAorCWluaXRfZmxvb3JwbGFuCisKKwkjIGNoZWNrIGZvciBkZXByZWNhdGVkIGlvIHZhcmlhYmxlcworCWlmIHsgW2luZm8gZXhpc3RzIDo6ZW52KEZQX0lPX0hNRVRBTCldfSB7CisJCXNldCA6OmVudihGUF9JT19ITEFZRVIpIFtsaW5kZXggJDo6ZW52KFRFQ0hfTUVUQUxfTEFZRVJTKSBbZXhwciB7JDo6ZW52KEZQX0lPX0hNRVRBTCkgLSAxfV1dCisJCXB1dHNfd2FybiAiWW91J3JlIHVzaW5nIEZQX0lPX0hNRVRBTCBpbiB5b3VyIGNvbmZpZ3VyYXRpb24sIHdoaWNoIGlzIGEgZGVwcmVjYXRlZCB2YXJpYWJsZSB0aGF0IHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiIKKwkJcHV0c193YXJuICJXZSByZWNvbW1lbmQgeW91IHVwZGF0ZSB5b3VyIGNvbmZpZ3VyYXRpb24gYXMgZm9sbG93czoiCisJCXB1dHNfd2FybiAiXHRzZXQgOjplbnYoRlBfSU9fSExBWUVSKSB7JDo6ZW52KEZQX0lPX0hMQVlFUil9IgorCX0KKworCWlmIHsgW2luZm8gZXhpc3RzIDo6ZW52KEZQX0lPX1ZNRVRBTCldfSB7CisJCXNldCA6OmVudihGUF9JT19WTEFZRVIpIFtsaW5kZXggJDo6ZW52KFRFQ0hfTUVUQUxfTEFZRVJTKSBbZXhwciB7JDo6ZW52KEZQX0lPX1ZNRVRBTCkgLSAxfV1dCisJCXB1dHNfd2FybiAiWW91J3JlIHVzaW5nIEZQX0lPX1ZNRVRBTCBpbiB5b3VyIGNvbmZpZ3VyYXRpb24sIHdoaWNoIGlzIGEgZGVwcmVjYXRlZCB2YXJpYWJsZSB0aGF0IHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiIKKwkJcHV0c193YXJuICJXZSByZWNvbW1lbmQgeW91IHVwZGF0ZSB5b3VyIGNvbmZpZ3VyYXRpb24gYXMgZm9sbG93czoiCisJCXB1dHNfd2FybiAiXHRzZXQgOjplbnYoRlBfSU9fVkxBWUVSKSB7JDo6ZW52KEZQX0lPX1ZMQVlFUil9IgorCX0KKworCisJIyBwbGFjZSBpbworCWlmIHsgW2luZm8gZXhpc3RzIDo6ZW52KEZQX1BJTl9PUkRFUl9DRkcpXSB9IHsKKwkJcGxhY2VfaW9fb2wKKwl9IGVsc2UgeworCQlpZiB7IFtpbmZvIGV4aXN0cyA6OmVudihGUF9DT05URVhUX0RFRildICYmIFtpbmZvIGV4aXN0cyA6OmVudihGUF9DT05URVhUX0xFRildIH0geworCQkJcGxhY2VfaW8KKwkJCWdsb2JhbF9wbGFjZW1lbnRfb3IKKwkJCXBsYWNlX2NvbnRleHR1YWxpemVkX2lvIFwKKwkJCQktbGVmICQ6OmVudihGUF9DT05URVhUX0xFRikgXAorCQkJCS1kZWYgJDo6ZW52KEZQX0NPTlRFWFRfREVGKQorCQl9IGVsc2UgeworCQkJcGxhY2VfaW8KKwkJfQorCX0KKworCWFwcGx5X2RlZl90ZW1wbGF0ZQorCisJaWYgeyBbaW5mbyBleGlzdCA6OmVudihFWFRSQV9MRUZTKV0gfSB7CisJCWlmIHsgW2luZm8gZXhpc3QgOjplbnYoTUFDUk9fUExBQ0VNRU5UX0NGRyldIH0geworCQkJZmlsZSBjb3B5IC1mb3JjZSAkOjplbnYoTUFDUk9fUExBQ0VNRU5UX0NGRykgJDo6ZW52KHBsYWNlbWVudF90bXBmaWxlcykvbWFjcm9fcGxhY2VtZW50LmNmZworCQkJbWFudWFsX21hY3JvX3BsYWNlbWVudCBmCisJCX0gZWxzZSB7CisJCQlnbG9iYWxfcGxhY2VtZW50X29yCisJCQliYXNpY19tYWNyb19wbGFjZW1lbnQKKwkJfQorCX0KKworCXRhcF9kZWNhcF9vcgorCisJc2Nyb3Rfa2xheW91dCAtbGF5b3V0ICQ6OmVudihDVVJSRU5UX0RFRikgJDo6ZW52KGZsb29ycGxhbl9sb2dzKS9zY3JlZW5zaG90LmxvZworCisJcnVuX3Bvd2VyX2dyaWRfZ2VuZXJhdGlvbgorfQorCisKK3Byb2MgcnVuX2Zsb3cge2FyZ3N9IHsKKwlzZXQgb3B0aW9ucyB7CisJCXstZGVzaWduIHJlcXVpcmVkfQorCQl7LWZyb20gb3B0aW9uYWx9CisJCXstdG8gb3B0aW9uYWx9CisJCXstc2F2ZV9wYXRoIG9wdGlvbmFsfQorCQl7LW92ZXJyaWRlX2VudiBvcHRpb25hbH0KKwl9CisJc2V0IGZsYWdzIHstc2F2ZSAtcnVuX2hvb2tzIC1ub19sdnMgLW5vX2RyYyAtbm9fYW50ZW5uYWNoZWNrIH0KKwlwYXJzZV9rZXlfYXJncyAicnVuX25vbl9pbnRlcmFjdGl2ZV9tb2RlIiBhcmdzIGFyZ192YWx1ZXMgJG9wdGlvbnMgZmxhZ3NfbWFwICRmbGFncyAtbm9fY29uc3VtZQorCXByZXAgeyp9JGFyZ3MKKyAgICAjIHNpZ25hbCB0cmFwIFNJR0lOVCBzYXZlX3N0YXRlOworCisJaWYgeyBbaW5mbyBleGlzdHMgYXJnX3ZhbHVlcygtb3ZlcnJpZGVfZW52KV0gfSB7CisJCXNldCBlbnZfb3ZlcnJpZGVzIFtzcGxpdCAkYXJnX3ZhbHVlcygtb3ZlcnJpZGVfZW52KSAnLCddIAorCQlmb3JlYWNoIG92ZXJyaWRlICRlbnZfb3ZlcnJpZGVzIHsKKwkJCXNldCBrdmEgW3NwbGl0ICRvdmVycmlkZSAnPSddCisJCQlzZXQga2V5IFtsaW5kZXggJGt2YSAwXQorCQkJc2V0IHZhbHVlIFtsaW5kZXggJGt2YSAxXQorCQkJc2V0IDo6ZW52KCR7a2V5fSkgJHZhbHVlCisJCX0KKwl9CisKKyAgICBzZXQgTFZTX0VOQUJMRUQgMQorICAgIHNldCBEUkNfRU5BQkxFRCAwCisgICAgc2V0IEFOVEVOTkFDSEVDS19FTkFCTEVEIDEKKworICAgIHNldCBzdGVwcyBbZGljdCBjcmVhdGUgXAorCQkic3ludGhlc2lzIiB7cnVuX3N5bnRoZXNpcyAiIiB9IFwKKwkJImZsb29ycGxhbiIge3J1bl9mbG9vcnBsYW4gIiJ9IFwKKwkJInBsYWNlbWVudCIge3J1bl9wbGFjZW1lbnRfc3RlcCAiIn0gXAorCQkiY3RzIiB7cnVuX2N0c19zdGVwICIifSBcCisJCSJyb3V0aW5nIiB7cnVuX3JvdXRpbmdfc3RlcCAiIn1cCisgICAgICAgICAgICAgICAgImVjbyIge3J1bl9lY29fc3RlcCAiIn0gXAorCQkiZGlvZGVfaW5zZXJ0aW9uIiB7cnVuX2Rpb2RlX2luc2VydGlvbl8yXzVfc3RlcCAiIn0gXAorCQkiZ2RzX21hZ2ljIiB7cnVuX21hZ2ljICIifSBcCisJCSJnZHNfZHJjX2tsYXlvdXQiIHtydW5fa2xheW91dCAiIn0gXAorCQkiZ2RzX3hvcl9rbGF5b3V0IiB7cnVuX2tsYXlvdXRfZ2RzX3hvciAiIn0gXAorCQkibHZzIiAicnVuX2x2c19zdGVwICRMVlNfRU5BQkxFRCIgXAorCQkiZHJjIiAicnVuX2RyY19zdGVwICREUkNfRU5BQkxFRCIgXAorCQkiYW50ZW5uYV9jaGVjayIgInJ1bl9hbnRlbm5hX2NoZWNrX3N0ZXAgJEFOVEVOTkFDSEVDS19FTkFCTEVEIiBcCisJCSJjdmMiIHtydW5fbGVmX2N2Y30KKyAgICBdCisKKyAgICBzZXRfaWZfdW5zZXQgYXJnX3ZhbHVlcygtdG8pICJjdmMiOworCisJaWYgeyAgW2luZm8gZXhpc3RzIDo6ZW52KENVUlJFTlRfU1RFUCkgXSB9IHsKKyAgICAgICAgcHV0cyAiXFtJTkZPXF06UGlja2luZyB1cCB3aGVyZSBsYXN0IGV4ZWN1dGlvbiBsZWZ0IG9mZiIKKyAgICAgICAgcHV0cyBbZm9ybWF0ICJcW0lORk9cXTpDdXJyZW50IHN0YWdlIGlzICVzICIgJDo6ZW52KENVUlJFTlRfU1RFUCldCisgICAgfSBlbHNlIHsKKyAgICAgICAgc2V0IDo6ZW52KENVUlJFTlRfU1RFUCkgInN5bnRoZXNpcyI7CisgICAgfQorCisgICAgc2V0X2lmX3Vuc2V0IGFyZ192YWx1ZXMoLWZyb20pICQ6OmVudihDVVJSRU5UX1NURVApOworICAgIHNldCBleGUgMDsKKyAgICBkaWN0IGZvciB7c3RlcF9uYW1lIHN0ZXBfZXhlfSAkc3RlcHMgeworICAgICAgICBpZiB7IFsgc3RyaW5nIGVxdWFsICRhcmdfdmFsdWVzKC1mcm9tKSAkc3RlcF9uYW1lIF0gfSB7CisgICAgICAgICAgICBzZXQgZXhlIDE7CisgICAgICAgIH0KKworICAgICAgICBpZiB7ICRleGUgfSB7CisgICAgICAgICAgICAjIEZvciB3aGVuIGl0IGZhaWxzCisgICAgICAgICAgICBzZXQgOjplbnYoQ1VSUkVOVF9TVEVQKSAkc3RlcF9uYW1lCisgICAgICAgICAgICBbbGluZGV4ICRzdGVwX2V4ZSAwXSBbbGluZGV4ICRzdGVwX2V4ZSAxXSA7CisgICAgICAgIH0KKworICAgICAgICBpZiB7IFsgc3RyaW5nIGVxdWFsICRhcmdfdmFsdWVzKC10bykgJHN0ZXBfbmFtZSBdIH0geworICAgICAgICAgICAgc2V0IGV4ZSAwOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgIH0KKworICAgICMgZm9yIHdoZW4gaXQgcmVzdW1lcworICAgIHNldCBzdGVwc19hc19saXN0IFtkaWN0IGtleXMgJHN0ZXBzXQorICAgIHNldCBuZXh0X2lkeCBbZXhwciBbbHNlYXJjaCAkc3RlcHNfYXNfbGlzdCAkOjplbnYoQ1VSUkVOVF9TVEVQKV0gKyAxXQorICAgIHNldCA6OmVudihDVVJSRU5UX1NURVApIFtsaW5kZXggJHN0ZXBzX2FzX2xpc3QgJG5leHRfaWR4XQorCisJIyBTYXZlcyB0byA8UlVOX0RJUj4vcmVzdWx0cy9maW5hbAorCWlmIHsgJDo6ZW52KFNBVkVfRklOQUxfVklFV1MpID09ICIxIiB9IHsKKwkJc2F2ZV9maW5hbF92aWV3cworCX0KKworCSMgU2F2ZXMgdG8gZGVzaWduIGRpcmVjdG9yeSBvciBjdXN0b20KKwlpZiB7ICBbaW5mbyBleGlzdHMgZmxhZ3NfbWFwKC1zYXZlKSBdIH0geworCQlpZiB7ICEgW2luZm8gZXhpc3RzIGFyZ192YWx1ZXMoLXNhdmVfcGF0aCldIH0geworCQkJc2V0IGFyZ192YWx1ZXMoLXNhdmVfcGF0aCkgJDo6ZW52KERFU0lHTl9ESVIpCisJCX0KKwkJc2F2ZV9maW5hbF92aWV3c1wKKwkJCS1zYXZlX3BhdGggJGFyZ192YWx1ZXMoLXNhdmVfcGF0aClcCisJCQktdGFnICQ6OmVudihSVU5fVEFHKQorCX0KKwljYWxjX3RvdGFsX3J1bnRpbWUKKwlzYXZlX3N0YXRlCisJZ2VuZXJhdGVfZmluYWxfc3VtbWFyeV9yZXBvcnQKKwkKKwljaGVja190aW1pbmdfdmlvbGF0aW9ucworCQorCWlmIHsgW2luZm8gZXhpc3RzIGFyZ192YWx1ZXMoLXNhdmVfcGF0aCldXAorCSAgICAmJiAkYXJnX3ZhbHVlcygtc2F2ZV9wYXRoKSAhPSAiIiB9IHsKKwkgICAgc2V0IDo6ZW52KEhPT0tfT1VUUFVUX1BBVEgpICJbZmlsZSBub3JtYWxpemUgJGFyZ192YWx1ZXMoLXNhdmVfcGF0aCldIgorCX0gZWxzZSB7CisJICAgIHNldCA6OmVudihIT09LX09VVFBVVF9QQVRIKSAkOjplbnYoUkVTVUxUU19ESVIpL2ZpbmFsCisJfQorCQorCWlmIHtbaW5mbyBleGlzdHMgZmxhZ3NfbWFwKC1ydW5faG9va3MpXX0geworCQlydW5fcG9zdF9ydW5faG9va3MKKwl9CisJCisJcHV0c19zdWNjZXNzICJGbG93IGNvbXBsZXRlLiIKKworCXNob3dfd2FybmluZ3MgIk5vdGUgdGhhdCB0aGUgZm9sbG93aW5nIHdhcm5pbmdzIGhhdmUgYmVlbiBnZW5lcmF0ZWQ6IgorCit9CisKK3J1bl9mbG93IHsqfSRhcmd2CmRpZmYgLS1naXQgYS9vcGVubGFuZS91c2VyX3Byb2plY3Rfd3JhcHBlci9tYWNyby5jZmcgYi9vcGVubGFuZS91c2VyX3Byb2plY3Rfd3JhcHBlci9tYWNyby5jZmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI5NzgxZgotLS0gL2Rldi9udWxsCisrKyBiL29wZW5sYW5lL3VzZXJfcHJvamVjdF93cmFwcGVyL21hY3JvLmNmZwpAQCAtMCwwICsxLDE4IEBACit1X3FzcGlfbWFzdGVyICAgICAgICAgICAyMjI1ICAgICAgICAgICAgIDcwMCAgICAgICAgICAgTgordV91YXJ0X2kyY191c2Jfc3BpICAgICAgMjIyNSAgICAgICAgICAgIDE0MDAgICAgICAgICAgIE4KK3VfcGlubXV4ICAgICAgICAgICAgICAgIDIyMjUgICAgICAgICAgICAyMzAwICAgICAgICAgICBOCit1X3NyYW0yXzJrYiAgICAgICAgICAgICAxNTAgICAgICAgICAgICAgMzAwMCAgICAgICAgICAgTgordV9zcmFtM18ya2IgICAgICAgICAgICAgOTUwICAgICAgICAgICAgIDMwMDAgICAgICAgICAgIE4KKwordV9tYmlzdCAgICAgICAgICAgICAgICAgMTUwICAgICAgICAgICAgIDI2NTAgICAgICAgICAgIE4KK3Vfc3JhbTBfMmtiICAgICAgICAgICAgIDE1MCAgICAgICAgICAgICAyMTAwICAgICAgICAgICBOCit1X3NyYW0xXzJrYiAgICAgICAgICAgICA5NTAgICAgICAgICAgICAgMjEwMCAgICAgICAgICAgTgorCit1X3Jpc2N2X3RvcAkgICAgICAgIDk1MAkgICAgICAgIDQ1MAkgICAgICAgTgordV9kY2FjaGVfMmtiICAgICAgICAgICAgMTUwICAgICAgICAgICAgIDE0MDAgICAgICAgICAgIE4KK3VfaWNhY2hlXzJrYiAgICAgICAgICAgIDE1MCAgICAgICAgICAgICA4MDAgICAgICAgICAgICBOCit1X3RzcmFtMF8ya2IgICAgICAgICAgICAxNTAgICAgICAgICAgICAgMjAwICAgICAgICAgICAgTgorCisKK3VfaW50ZXJjb24gICAgICAgICAgICAgIDE4NTAgICAgICAgICAgICA3MDAgICAgICAgICAgICBOCit1X3diX2hvc3QgICAgICAgICAgICAgICAxNDUwICAgICAgICAgICAgMTAwICAgICAgICAgICAgTgpkaWZmIC0tZ2l0IGEvb3BlbmxhbmUvdXNlcl9wcm9qZWN0X3dyYXBwZXIvbW9kLnRjbCBiL29wZW5sYW5lL3VzZXJfcHJvamVjdF93cmFwcGVyL21vZC50Y2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVlZWJiZQotLS0gL2Rldi9udWxsCisrKyBiL29wZW5sYW5lL3VzZXJfcHJvamVjdF93cmFwcGVyL21vZC50Y2wKQEAgLTAsMCArMSw3MyBAQAorIyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAgMjAyMSAsIERpbmVzaCBBbm5heXlhCisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorIyBTUERYLUZpbGVDb250cmlidXRvcjogTW9kaWZpZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKworCitzZXQgOjplbnYoTElCX0ZBU1RFU1QpICIkOjplbnYoUERLX1JPT1QpL3NreTEzMEEvbGlicy5yZWYvc2t5MTMwX2ZkX3NjX2hkL2xpYi9za3kxMzBfZmRfc2NfaGRfX2ZmX240MENfMXY5NS5saWIiCitzZXQgOjplbnYoTElCX1NMT1dFU1QpICIkOjplbnYoUERLX1JPT1QpL3NreTEzMEEvbGlicy5yZWYvc2t5MTMwX2ZkX3NjX2hkL2xpYi9za3kxMzBfZmRfc2NfaGRfX3NzXzEwMENfMXY2MC5saWIiCitzZXQgOjplbnYoU1lOVEhfRFJJVklOR19DRUxMKSAic2t5MTMwX2ZkX3NjX2hkX19pbnZfOCIKK3NldCA6OmVudihTWU5USF9EUklWSU5HX0NFTExfUElOKSAiWSIKK3NldCA6OmVudihTWU5USF9DQVBfTE9BRCkgIjE3LjY1Igorc2V0IDo6ZW52KFdJUkVfUkNfTEFZRVIpICJtZXQxIgorCisjVG8gZGlzYWJsZSBlbXB0eSBmaWxsZXIgY2VsbCBibGFjayBib3ggZ2V0IGNyZWF0ZWQKKyNzZXQgbGlua19tYWtlX2JsYWNrX2JveGVzIDAKKworCitzZXRfY21kX3VuaXRzIC10aW1lIG5zIC1jYXBhY2l0YW5jZSBwRiAtY3VycmVudCBtQSAtdm9sdGFnZSBWIC1yZXNpc3RhbmNlIGtPaG0gLWRpc3RhbmNlIHVtCitkZWZpbmVfY29ybmVycyB3YyBiYworcmVhZF9saWJlcnR5IC1jb3JuZXIgYmMgJDo6ZW52KExJQl9GQVNURVNUKQorcmVhZF9saWJlcnR5IC1jb3JuZXIgd2MgJDo6ZW52KExJQl9TTE9XRVNUKQorCisjIFJlbW92aW5nIHRoZSBkZWNhcCBhbmQgZGlvZGUKK3JlYWRfdmVyaWxvZyAuLi8uLi92ZXJpbG9nL2dsL2Nsa19idWYudiAgCitsaW5rX2Rlc2lnbiAgY2xrX2J1Zgord3JpdGVfdmVyaWxvZyAtcmVtb3ZlX2NlbGxzIFtnZXRfbGliX2NlbGxzIHtza3kxMzBfZmRfc2NfaGRfX2RlY2FwKiBza3kxMzBfZmRfc2NfaGRfX2ZpbGwqIHNreTEzMF9mZF9zY19oZF9fZGlvZGVfKiBza3kxMzBfZWZfc2NfaGRfX2Zha2VkaW9kZSogc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZCp9XSBuZXRsaXN0L2Nsa19idWYudgorIyBSZW1vdmluZyB0aGUgZGVjYXAgYW5kIGRpb2RlCityZWFkX3Zlcmlsb2cgIC4uLy4uL3Zlcmlsb2cvZ2wvY2xrX3NrZXdfYWRqdXN0LnYgIAorbGlua19kZXNpZ24gIGNsa19za2V3X2FkanVzdAord3JpdGVfdmVyaWxvZyAtcmVtb3ZlX2NlbGxzIFtnZXRfbGliX2NlbGxzIHtza3kxMzBfZmRfc2NfaGRfX2RlY2FwKiBza3kxMzBfZmRfc2NfaGRfX2ZpbGwqIHNreTEzMF9mZF9zY19oZF9fZGlvZGVfKiBza3kxMzBfZWZfc2NfaGRfX2Zha2VkaW9kZSogc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZCp9XSBuZXRsaXN0L2Nsa19za2V3X2FkanVzdC52CisKKyMgUmVtb3ZpbmcgdGhlIGRlY2FwIGFuZCBkaW9kZQorcmVhZF92ZXJpbG9nICAuLi8uLi92ZXJpbG9nL2dsL2dsYmxfY2ZnLnYgIAorbGlua19kZXNpZ24gIGdsYmxfY2ZnCit3cml0ZV92ZXJpbG9nIC1yZW1vdmVfY2VsbHMgW2dldF9saWJfY2VsbHMge3NreTEzMF9mZF9zY19oZF9fZGVjYXAqIHNreTEzMF9mZF9zY19oZF9fZmlsbCogc2t5MTMwX2ZkX3NjX2hkX19kaW9kZV8qIHNreTEzMF9lZl9zY19oZF9fZmFrZWRpb2RlKiBza3kxMzBfZmRfc2NfaGRfX3RhcHZwd3J2Z25kKn1dIG5ldGxpc3QvZ2xibF9jZmcudgorCityZWFkX3Zlcmlsb2cgIC4uLy4uL3Zlcmlsb2cvZ2wvc2RyYW0udiAgCitsaW5rX2Rlc2lnbiAgc2RyY190b3AKK3dyaXRlX3Zlcmlsb2cgLXJlbW92ZV9jZWxscyBbZ2V0X2xpYl9jZWxscyB7c2t5MTMwX2ZkX3NjX2hkX19kZWNhcCogc2t5MTMwX2ZkX3NjX2hkX19maWxsKiBza3kxMzBfZmRfc2NfaGRfX2Rpb2RlXyogc2t5MTMwX2VmX3NjX2hkX19mYWtlZGlvZGUqIHNreTEzMF9mZF9zY19oZF9fdGFwdnB3cnZnbmQqfV0gbmV0bGlzdC9zZHJhbS52CisKK3JlYWRfdmVyaWxvZyAgLi4vLi4vdmVyaWxvZy9nbC9zcGlfbWFzdGVyLnYgCitsaW5rX2Rlc2lnbiAgc3BpbV90b3AgCit3cml0ZV92ZXJpbG9nIC1yZW1vdmVfY2VsbHMgW2dldF9saWJfY2VsbHMge3NreTEzMF9mZF9zY19oZF9fZGVjYXAqIHNreTEzMF9mZF9zY19oZF9fZmlsbCogc2t5MTMwX2ZkX3NjX2hkX19kaW9kZV8qIHNreTEzMF9lZl9zY19oZF9fZmFrZWRpb2RlKiBza3kxMzBfZmRfc2NfaGRfX3RhcHZwd3J2Z25kKn1dIG5ldGxpc3Qvc3BpX21hc3Rlci52CisKK3JlYWRfdmVyaWxvZyAgLi4vLi4vdmVyaWxvZy9nbC9zeW50YWNvcmUudiAgCitsaW5rX2Rlc2lnbiAgc2NyMV90b3Bfd2IKK3dyaXRlX3Zlcmlsb2cgLXJlbW92ZV9jZWxscyBbZ2V0X2xpYl9jZWxscyB7c2t5MTMwX2ZkX3NjX2hkX19kZWNhcCogc2t5MTMwX2ZkX3NjX2hkX19maWxsKiBza3kxMzBfZmRfc2NfaGRfX2Rpb2RlXyogc2t5MTMwX2VmX3NjX2hkX19mYWtlZGlvZGUqIHNreTEzMF9mZF9zY19oZF9fdGFwdnB3cnZnbmQqfV0gbmV0bGlzdC9zeW50YWNvcmUudgorCityZWFkX3Zlcmlsb2cgIC4uLy4uL3Zlcmlsb2cvZ2wvdWFydF9pMmNtX3VzYi52ICAKK2xpbmtfZGVzaWduICB1YXJ0X2kyY191c2JfdG9wCit3cml0ZV92ZXJpbG9nIC1yZW1vdmVfY2VsbHMgW2dldF9saWJfY2VsbHMge3NreTEzMF9mZF9zY19oZF9fZGVjYXAqIHNreTEzMF9mZF9zY19oZF9fZmlsbCogc2t5MTMwX2ZkX3NjX2hkX19kaW9kZV8qIHNreTEzMF9lZl9zY19oZF9fZmFrZWRpb2RlKiBza3kxMzBfZmRfc2NfaGRfX3RhcHZwd3J2Z25kKn1dIG5ldGxpc3QvdWFydF9pMmNtX3VzYi52CisKK3JlYWRfdmVyaWxvZyAgLi4vLi4vdmVyaWxvZy9nbC93Yl9ob3N0LnYgIAorbGlua19kZXNpZ24gIHdiX2hvc3QKK3dyaXRlX3Zlcmlsb2cgLXJlbW92ZV9jZWxscyBbZ2V0X2xpYl9jZWxscyB7c2t5MTMwX2ZkX3NjX2hkX19kZWNhcCogc2t5MTMwX2ZkX3NjX2hkX19maWxsKiBza3kxMzBfZmRfc2NfaGRfX2Rpb2RlXyogc2t5MTMwX2VmX3NjX2hkX19mYWtlZGlvZGUqIHNreTEzMF9mZF9zY19oZF9fdGFwdnB3cnZnbmQqfV0gbmV0bGlzdC93Yl9ob3N0LnYKKworcmVhZF92ZXJpbG9nICAuLi8uLi92ZXJpbG9nL2dsL3diX2ludGVyY29ubmVjdC52CitsaW5rX2Rlc2lnbiAgd2JfaW50ZXJjb25uZWN0Cit3cml0ZV92ZXJpbG9nIC1yZW1vdmVfY2VsbHMgW2dldF9saWJfY2VsbHMge3NreTEzMF9mZF9zY19oZF9fZGVjYXAqIHNreTEzMF9mZF9zY19oZF9fZmlsbCogc2t5MTMwX2ZkX3NjX2hkX19kaW9kZV8qIHNreTEzMF9lZl9zY19oZF9fZmFrZWRpb2RlKiBza3kxMzBfZmRfc2NfaGRfX3RhcHZwd3J2Z25kKn1dIG5ldGxpc3Qvd2JfaW50ZXJjb25uZWN0LnYKKworCitleGl0CmRpZmYgLS1naXQgYS9vcGVubGFuZS91c2VyX3Byb2plY3Rfd3JhcHBlci9wZG5fY2ZnLnRjbCBiL29wZW5sYW5lL3VzZXJfcHJvamVjdF93cmFwcGVyL3Bkbl9jZmcudGNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4MTNmOTUKLS0tIC9kZXYvbnVsbAorKysgYi9vcGVubGFuZS91c2VyX3Byb2plY3Rfd3JhcHBlci9wZG5fY2ZnLnRjbApAQCAtMCwwICsxLDk2IEBACisjIFBvd2VyIG5ldHMKKworaWYgeyAhIFtpbmZvIGV4aXN0cyA6OmVudihWRERfTkVUKV0gfSB7CisJc2V0IDo6ZW52KFZERF9ORVQpICQ6OmVudihWRERfUElOKQorfQorCitpZiB7ICEgW2luZm8gZXhpc3RzIDo6ZW52KEdORF9ORVQpXSB9IHsKKwlzZXQgOjplbnYoR05EX05FVCkgJDo6ZW52KEdORF9QSU4pCit9CisKK3NldCA6OnBvd2VyX25ldHMgJDo6ZW52KFZERF9ORVQpCitzZXQgOjpncm91bmRfbmV0cyAkOjplbnYoR05EX05FVCkKKworaWYgeyBbaW5mbyBleGlzdHMgOjplbnYoRlBfUEROX0VOQUJMRV9HTE9CQUxfQ09OTkVDVElPTlMpXSB9IHsKKyAgICBpZiB7ICQ6OmVudihGUF9QRE5fRU5BQkxFX0dMT0JBTF9DT05ORUNUSU9OUykgPT0gMSB9IHsKKyAgICAgICAgZm9yZWFjaCBwb3dlcl9waW4gJDo6ZW52KFNURF9DRUxMX1BPV0VSX1BJTlMpIHsKKyAgICAgICAgICAgIGFkZF9nbG9iYWxfY29ubmVjdGlvbiAtbmV0ICQ6OmVudihWRERfTkVUKSAtaW5zdF9wYXR0ZXJuIC4qIC1waW5fcGF0dGVybiAkcG93ZXJfcGluIC1wb3dlcgorICAgICAgICB9CisgICAgICAgIGZvcmVhY2ggZ3JvdW5kX3BpbiAkOjplbnYoU1REX0NFTExfR1JPVU5EX1BJTlMpIHsKKyAgICAgICAgICAgIGFkZF9nbG9iYWxfY29ubmVjdGlvbiAtbmV0ICQ6OmVudihHTkRfTkVUKSAtaW5zdF9wYXR0ZXJuIC4qIC1waW5fcGF0dGVybiAkZ3JvdW5kX3BpbiAtZ3JvdW5kCisgICAgICAgIH0KKyAgICB9Cit9CisKK3NldF92b2x0YWdlX2RvbWFpbiAtbmFtZSBDT1JFIC1wb3dlciAkOjplbnYoVkREX05FVCkgLWdyb3VuZCAkOjplbnYoR05EX05FVCkKKworIyBBc3Nlc3NlcyB3aGV0aGVyIHRoZSBkZWlzZ24gaXMgdGhlIGNvcmUgb2YgdGhlIGNoaXAgb3Igbm90IGJhc2VkIG9uIHRoZSAKKyMgdmFsdWUgb2YgJDo6ZW52KERFU0lHTl9JU19DT1JFKSBhbmQgdXNlcyB0aGUgYXBwcm9wcmlhdGUgc3RkY2VsbCBzZWN0aW9uCitpZiB7ICQ6OmVudihERVNJR05fSVNfQ09SRSkgPT0gMSB9IHsKKyAgICAjIFVzZWQgaWYgdGhlIGRlc2lnbiBpcyB0aGUgY29yZSBvZiB0aGUgY2hpcAorICAgIGRlZmluZV9wZG5fZ3JpZCAtbmFtZSBzdGRjZWxsX2dyaWQgLXN0YXJ0c193aXRoIFBPV0VSIC12b2x0YWdlX2RvbWFpbiBDT1JFIC1waW5zIFtzdWJzdCB7JDo6ZW52KEZQX1BETl9MT1dFUl9MQVlFUikgJDo6ZW52KEZQX1BETl9VUFBFUl9MQVlFUil9XQorICAgIGlmIHsgJDo6ZW52KF9XSVRIX1NUUkFQUykgfSB7CisgICAgICAgIGFkZF9wZG5fc3RyaXBlIC1ncmlkIHN0ZGNlbGxfZ3JpZCAtbGF5ZXIgJDo6ZW52KEZQX1BETl9MT1dFUl9MQVlFUikgLXdpZHRoICQ6OmVudihGUF9QRE5fVldJRFRIKSAtcGl0Y2ggJDo6ZW52KEZQX1BETl9WUElUQ0gpIC1vZmZzZXQgJDo6ZW52KEZQX1BETl9WT0ZGU0VUKSAtc3RhcnRzX3dpdGggUE9XRVIKKyAgICAgICAgYWRkX3Bkbl9zdHJpcGUgLWdyaWQgc3RkY2VsbF9ncmlkIC1sYXllciAkOjplbnYoRlBfUEROX1VQUEVSX0xBWUVSKSAtd2lkdGggJDo6ZW52KEZQX1BETl9IV0lEVEgpIC1waXRjaCAkOjplbnYoRlBfUEROX0hQSVRDSCkgLW9mZnNldCAkOjplbnYoRlBfUEROX0hPRkZTRVQpIC1zdGFydHNfd2l0aCBQT1dFUgorICAgIH0gCisgICAgYWRkX3Bkbl9jb25uZWN0IC1ncmlkIHN0ZGNlbGxfZ3JpZCAtbGF5ZXJzIFtzdWJzdCB7JDo6ZW52KEZQX1BETl9MT1dFUl9MQVlFUikgJDo6ZW52KEZQX1BETl9VUFBFUl9MQVlFUil9XQorfSBlbHNlIHsKKyAgICAjIFVzZWQgaWYgdGhlIGRlc2lnbiBpcyBhIG1hY3JvIGluIHRoZSBjb3JlCisgICAgZGVmaW5lX3Bkbl9ncmlkIC1uYW1lIHN0ZGNlbGxfZ3JpZCAtc3RhcnRzX3dpdGggUE9XRVIgLXZvbHRhZ2VfZG9tYWluIENPUkUgLXBpbnMgJDo6ZW52KEZQX1BETl9MT1dFUl9MQVlFUikKKyAgICBhZGRfcGRuX3N0cmlwZSAtZ3JpZCBzdGRjZWxsX2dyaWQgLWxheWVyICQ6OmVudihGUF9QRE5fTE9XRVJfTEFZRVIpIC13aWR0aCAkOjplbnYoRlBfUEROX1ZXSURUSCkgLXBpdGNoICQ6OmVudihGUF9QRE5fVlBJVENIKSAtb2Zmc2V0ICQ6OmVudihGUF9QRE5fVk9GRlNFVCkgLXN0YXJ0c193aXRoIFBPV0VSCit9CisKKyMgQWRkcyB0aGUgc3RhbmRhcmQgY2VsbCByYWlscyBpZiBlbmFibGVkLgoraWYgeyAkOjplbnYoRlBfUEROX0VOQUJMRV9SQUlMUykgPT0gMSB9IHsKKyAgICBhZGRfcGRuX3N0cmlwZSAtZ3JpZCBzdGRjZWxsX2dyaWQgLWxheWVyICQ6OmVudihGUF9QRE5fUkFJTFNfTEFZRVIpIC13aWR0aCAkOjplbnYoRlBfUEROX1JBSUxfV0lEVEgpIC1mb2xsb3dwaW5zIC1zdGFydHNfd2l0aCBQT1dFUgorICAgIGFkZF9wZG5fY29ubmVjdCAtZ3JpZCBzdGRjZWxsX2dyaWQgLWxheWVycyBbc3Vic3QgeyQ6OmVudihGUF9QRE5fUkFJTFNfTEFZRVIpICQ6OmVudihGUF9QRE5fTE9XRVJfTEFZRVIpfV0KK30gCisKKworIyBBZGRzIHRoZSBjb3JlIHJpbmcgaWYgZW5hYmxlZC4KK2lmIHsgJDo6ZW52KEZQX1BETl9DT1JFX1JJTkcpID09IDEgfSB7CisgICAgYWRkX3Bkbl9yaW5nIC1ncmlkIHN0ZGNlbGxfZ3JpZCAtbGF5ZXIgW3N1YnN0IHskOjplbnYoRlBfUEROX0xPV0VSX0xBWUVSKSAkOjplbnYoRlBfUEROX1VQUEVSX0xBWUVSKX1dICBcCisgICAgICAgICAgICAgICAgICAgICAtd2lkdGhzIFtzdWJzdCB7JDo6ZW52KEZQX1BETl9DT1JFX1JJTkdfVldJRFRIKSAkOjplbnYoRlBfUEROX0NPUkVfUklOR19IV0lEVEgpfV0gXAorICAgICAgICAgICAgICAgICAgICAgLXNwYWNpbmdzIFtzdWJzdCB7JDo6ZW52KEZQX1BETl9DT1JFX1JJTkdfVlNQQUNJTkcpICQ6OmVudihGUF9QRE5fQ09SRV9SSU5HX0hTUEFDSU5HKX1dIFwKKyAgICAgICAgICAgICAgICAgICAgIC1jb3JlX29mZnNldCBbc3Vic3QgeyQ6OmVudihGUF9QRE5fQ09SRV9SSU5HX1ZPRkZTRVQpICQ6OmVudihGUF9QRE5fQ09SRV9SSU5HX0hPRkZTRVQpfV0KK30KKworIyBBIGdlbmVyYWwgbWFjcm8gdGhhdCBmb2xsb3dzIHRoZSBwcmVtaXNlIG9mIHRoZSBzZXQgaGVpcmFyY2h5LiBZb3UgbWF5IHdhbnQgdG8gbW9kaWZ5IHRoaXMgb3IgYWRkIG90aGVyIG1hY3JvIGNvbmZpZ3MKKyMgVGhlIG1hY3JvIHBvd2VyIHBpbiBuYW1lcyBhcmUgYXNzdW1lZCB0byBtYXRjaCB0aGUgVkREIGFuZCBHTkQgbmV0IG5hbWVzIAorIyBUT0RPOiBwYXJhbWV0ZXJpemUgdGhlIHBvd2VyIHBpbiBuYW1lcyAKK3NldCBtYWNybyB7CisgICAgb3JpZW50IHtSMCBSMTgwIE1YIE1ZIFI5MCBSMjcwIE1YUjkwIE1ZUjkwfQorICAgIHBvd2VyX3BpbnMgJDo6ZW52KFZERF9ORVQpCisgICAgZ3JvdW5kX3BpbnMgJDo6ZW52KEdORF9ORVQpCisgICAgYmxvY2thZ2VzICQ6OmVudihNQUNST19CTE9DS0FHRVNfTEFZRVIpCisgICAgc3RyYXBzIHsKKyAgICB9CisgICAgY29ubmVjdCB7eyQ6OmVudihGUF9QRE5fTE9XRVJfTEFZRVIpX1BJTl92ZXIgJDo6ZW52KEZQX1BETl9VUFBFUl9MQVlFUil9fQorfQorCitpZiB7ICQ6OmVudihGUF9QRE5fRU5BQkxFX01BQ1JPU19HUklEKSA9PSAxfSB7CisgICAgaWYgeyBbbGxlbmd0aCAkOjplbnYoRlBfUEROX01BQ1JPUyldID4gMCB9IHsKKyAgICAgICAgIyBnZW5lcmF0ZSBhdXRvbWF0aWNhbGx5IHBlciBpbnN0YW5jZToKKyAgICAgICAgZm9yZWFjaCBtYWNyb19pbnN0YW5jZSAkOjplbnYoRlBfUEROX01BQ1JPUykgeworICAgICAgICAgICAgc2V0IG1hY3JvX2luc3RhbmNlX2dyaWQgW3N1YnN0ICRtYWNyb10gCisgICAgICAgICAgICBkaWN0IGFwcGVuZCAkbWFjcm9faW5zdGFuY2VfZ3JpZCBpbnN0YW5jZSAkbWFjcm9faW5zdGFuY2UKKyAgICAgICAgICAgIHNldCA6OmhhbG8gW2xpc3QgJDo6ZW52KEZQX1BETl9IT1JJWk9OVEFMX0hBTE8pICQ6OmVudihGUF9QRE5fVkVSVElDQUxfSEFMTyldCisgICAgICAgICAgICBwZG5nZW46OnNwZWNpZnlfZ3JpZCBtYWNybyBbc3Vic3QgJG1hY3JvX2luc3RhbmNlX2dyaWRdCisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBzZXQgOjpoYWxvIFtsaXN0ICQ6OmVudihGUF9QRE5fSE9SSVpPTlRBTF9IQUxPKSAkOjplbnYoRlBfUEROX1ZFUlRJQ0FMX0hBTE8pXQorICAgICAgICBwZG5nZW46OnNwZWNpZnlfZ3JpZCBtYWNybyBbc3Vic3QgJG1hY3JvXQorICAgIH0KKyAgICAjIENBTiBOT1QgRU5BQkxFIFRIRSBUQ0wgQ09NTUFORCBCRUNBVVNFIFRIRVJFIElTIE5PIEFSR1VNRU5UIEZPUiBTUEVDSUZZSU5HIFRIRSBQT1dFUiBBTkQgR1JPVU5EIFBJTiBOQU1FUyBPTiBUSEUgTUFDUk8KKyAgICAjIGRlZmluZV9wZG5fZ3JpZCAtbWFjcm8gLW9yaWVudCB7UjAgUjE4MCBNWCBNWSBSOTAgUjI3MCBNWFI5MCBNWVI5MH0gLWdyaWRfb3Zlcl9wZ19waW5zIC1zdGFydHNfd2l0aCBQT1dFUiAtcGluX2RpcmVjdGlvbiB2ZXJ0aWNhbCAtaGFsbyBbc3Vic3QgeyQ6OmVudihGUF9QRE5fSE9SSVpPTlRBTF9IQUxPKSAkOjplbnYoRlBfUEROX1ZFUlRJQ0FMX0hBTE8pfV0KKyAgICAjIGFkZF9wZG5fY29ubmVjdCAtbGF5ZXJzIFtzdWJzdCB7JDo6ZW52KEZQX1BETl9MT1dFUl9MQVlFUikgJDo6ZW52KEZQX1BETl9VUFBFUl9MQVlFUil9XQorfSBlbHNlIHsKKyAgICBkZWZpbmVfcGRuX2dyaWQgLW1hY3JvIC1vcmllbnQge1IwIFIxODAgTVggTVkgUjkwIFIyNzAgTVhSOTAgTVlSOTB9IC1ncmlkX292ZXJfcGdfcGlucyAtc3RhcnRzX3dpdGggUE9XRVIgLWhhbG8gW3N1YnN0IHskOjplbnYoRlBfUEROX0hPUklaT05UQUxfSEFMTykgJDo6ZW52KEZQX1BETl9WRVJUSUNBTF9IQUxPKX1dCit9CisKKyMgUE9XRVIgb3IgR1JPVU5EICNTdGQuIGNlbGwgcmFpbHMgc3RhcnRpbmcgd2l0aCBwb3dlciBvciBncm91bmQgcmFpbHMgYXQgdGhlIGJvdHRvbSBvZiB0aGUgY29yZSBhcmVhCitzZXQgOjpyYWlsc19zdGFydF93aXRoICJQT1dFUiIgOworCisjIFBPV0VSIG9yIEdST1VORCAjVXBwZXIgbWV0YWwgc3RyaXBlcyBzdGFydGluZyB3aXRoIHBvd2VyIG9yIGdyb3VuZCByYWlscyBhdCB0aGUgbGVmdC9ib3R0b20gb2YgdGhlIGNvcmUgYXJlYQorc2V0IDo6c3RyaXBlc19zdGFydF93aXRoICJQT1dFUiIgOworCmRpZmYgLS1naXQgYS9vcGVubGFuZS91c2VyX3Byb2plY3Rfd3JhcHBlci9waW5fb3JkZXIuY2ZnIGIvb3BlbmxhbmUvdXNlcl9wcm9qZWN0X3dyYXBwZXIvcGluX29yZGVyLmNmZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGNkZTY5Ci0tLSAvZGV2L251bGwKKysrIGIvb3BlbmxhbmUvdXNlcl9wcm9qZWN0X3dyYXBwZXIvcGluX29yZGVyLmNmZwpAQCAtMCwwICsxLDE1NiBAQAorI0JVU19TT1JUCisjTlIKK2FuYWxvZ19pb1xbOFxdCitpb19pblxbMTVcXQoraW9fb3V0XFsxNVxdCitpb19vZWJcWzE1XF0KK2FuYWxvZ19pb1xbOVxdCitpb19pblxbMTZcXQoraW9fb3V0XFsxNlxdCitpb19vZWJcWzE2XF0KK2FuYWxvZ19pb1xbMTBcXQoraW9faW5cWzE3XF0KK2lvX291dFxbMTdcXQoraW9fb2ViXFsxN1xdCithbmFsb2dfaW9cWzExXF0KK2lvX2luXFsxOFxdCitpb19vdXRcWzE4XF0KK2lvX29lYlxbMThcXQorYW5hbG9nX2lvXFsxMlxdCitpb19pblxbMTlcXQoraW9fb3V0XFsxOVxdCitpb19vZWJcWzE5XF0KK2FuYWxvZ19pb1xbMTNcXQoraW9faW5cWzIwXF0KK2lvX291dFxbMjBcXQoraW9fb2ViXFsyMFxdCithbmFsb2dfaW9cWzE0XF0KK2lvX2luXFsyMVxdCitpb19vdXRcWzIxXF0KK2lvX29lYlxbMjFcXQorYW5hbG9nX2lvXFsxNVxdCitpb19pblxbMjJcXQoraW9fb3V0XFsyMlxdCitpb19vZWJcWzIyXF0KK2FuYWxvZ19pb1xbMTZcXQoraW9faW5cWzIzXF0KK2lvX291dFxbMjNcXQoraW9fb2ViXFsyM1xdCisKKyNTCit3Yl8uKgord2JzXy4qCitsYV8uKgordXNlcl9jbG9jazIKK3VzZXJfaXJxLioKKworI0UKK2lvX2luXFswXF0KK2lvX291dFxbMFxdCitpb19vZWJcWzBcXQoraW9faW5cWzFcXQoraW9fb3V0XFsxXF0KK2lvX29lYlxbMVxdCitpb19pblxbMlxdCitpb19vdXRcWzJcXQoraW9fb2ViXFsyXF0KK2lvX2luXFszXF0KK2lvX291dFxbM1xdCitpb19vZWJcWzNcXQoraW9faW5cWzRcXQoraW9fb3V0XFs0XF0KK2lvX29lYlxbNFxdCitpb19pblxbNVxdCitpb19vdXRcWzVcXQoraW9fb2ViXFs1XF0KK2lvX2luXFs2XF0KK2lvX291dFxbNlxdCitpb19vZWJcWzZcXQorYW5hbG9nX2lvXFswXF0KK2lvX2luXFs3XF0KK2lvX291dFxbN1xdCitpb19vZWJcWzdcXQorYW5hbG9nX2lvXFsxXF0KK2lvX2luXFs4XF0KK2lvX291dFxbOFxdCitpb19vZWJcWzhcXQorYW5hbG9nX2lvXFsyXF0KK2lvX2luXFs5XF0KK2lvX291dFxbOVxdCitpb19vZWJcWzlcXQorYW5hbG9nX2lvXFszXF0KK2lvX2luXFsxMFxdCitpb19vdXRcWzEwXF0KK2lvX29lYlxbMTBcXQorYW5hbG9nX2lvXFs0XF0KK2lvX2luXFsxMVxdCitpb19vdXRcWzExXF0KK2lvX29lYlxbMTFcXQorYW5hbG9nX2lvXFs1XF0KK2lvX2luXFsxMlxdCitpb19vdXRcWzEyXF0KK2lvX29lYlxbMTJcXQorYW5hbG9nX2lvXFs2XF0KK2lvX2luXFsxM1xdCitpb19vdXRcWzEzXF0KK2lvX29lYlxbMTNcXQorYW5hbG9nX2lvXFs3XF0KK2lvX2luXFsxNFxdCitpb19vdXRcWzE0XF0KK2lvX29lYlxbMTRcXQorCisjV1IKK2FuYWxvZ19pb1xbMTdcXQoraW9faW5cWzI0XF0KK2lvX291dFxbMjRcXQoraW9fb2ViXFsyNFxdCithbmFsb2dfaW9cWzE4XF0KK2lvX2luXFsyNVxdCitpb19vdXRcWzI1XF0KK2lvX29lYlxbMjVcXQorYW5hbG9nX2lvXFsxOVxdCitpb19pblxbMjZcXQoraW9fb3V0XFsyNlxdCitpb19vZWJcWzI2XF0KK2FuYWxvZ19pb1xbMjBcXQoraW9faW5cWzI3XF0KK2lvX291dFxbMjdcXQoraW9fb2ViXFsyN1xdCithbmFsb2dfaW9cWzIxXF0KK2lvX2luXFsyOFxdCitpb19vdXRcWzI4XF0KK2lvX29lYlxbMjhcXQorYW5hbG9nX2lvXFsyMlxdCitpb19pblxbMjlcXQoraW9fb3V0XFsyOVxdCitpb19vZWJcWzI5XF0KK2FuYWxvZ19pb1xbMjNcXQoraW9faW5cWzMwXF0KK2lvX291dFxbMzBcXQoraW9fb2ViXFszMFxdCithbmFsb2dfaW9cWzI0XF0KK2lvX2luXFszMVxdCitpb19vdXRcWzMxXF0KK2lvX29lYlxbMzFcXQorYW5hbG9nX2lvXFsyNVxdCitpb19pblxbMzJcXQoraW9fb3V0XFszMlxdCitpb19vZWJcWzMyXF0KK2FuYWxvZ19pb1xbMjZcXQoraW9faW5cWzMzXF0KK2lvX291dFxbMzNcXQoraW9fb2ViXFszM1xdCithbmFsb2dfaW9cWzI3XF0KK2lvX2luXFszNFxdCitpb19vdXRcWzM0XF0KK2lvX29lYlxbMzRcXQorYW5hbG9nX2lvXFsyOFxdCitpb19pblxbMzVcXQoraW9fb3V0XFszNVxdCitpb19vZWJcWzM1XF0KK2lvX2luXFszNlxdCitpb19vdXRcWzM2XF0KK2lvX29lYlxbMzZcXQoraW9faW5cWzM3XF0KK2lvX291dFxbMzdcXQoraW9fb2ViXFszN1xdCmRpZmYgLS1naXQgYS9vcGVubGFuZS91c2VyX3Byb2plY3Rfd3JhcHBlci9zdGEudGNsIGIvb3BlbmxhbmUvdXNlcl9wcm9qZWN0X3dyYXBwZXIvc3RhLnRjbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDEwODZhCi0tLSAvZGV2L251bGwKKysrIGIvb3BlbmxhbmUvdXNlcl9wcm9qZWN0X3dyYXBwZXIvc3RhLnRjbApAQCAtMCwwICsxLDEzMSBAQAorIyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAgMjAyMSAsIERpbmVzaCBBbm5heXlhCisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorIyBTUERYLUZpbGVDb250cmlidXRvcjogTW9kaWZpZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKworc2V0IDo6ZW52KExJQl9GQVNURVNUKSAiJDo6ZW52KFBES19ST09UKS9za3kxMzBBL2xpYnMucmVmL3NreTEzMF9mZF9zY19oZC9saWIvc2t5MTMwX2ZkX3NjX2hkX19mZl9uNDBDXzF2OTUubGliIgorc2V0IDo6ZW52KExJQl9UWVBJQ0FMKSAiJDo6ZW52KFBES19ST09UKS9za3kxMzBBL2xpYnMucmVmL3NreTEzMF9mZF9zY19oZC9saWIvc2t5MTMwX2ZkX3NjX2hkX190dF8wMjVDXzF2ODAubGliIgorc2V0IDo6ZW52KExJQl9TTE9XRVNUKSAiJDo6ZW52KFBES19ST09UKS9za3kxMzBBL2xpYnMucmVmL3NreTEzMF9mZF9zY19oZC9saWIvc2t5MTMwX2ZkX3NjX2hkX19zc18xMDBDXzF2NjAubGliIgorc2V0IDo6ZW52KERFU0lHTl9OQU1FKSAidXNlcl9wcm9qZWN0X3dyYXBwZXIiCitzZXQgOjplbnYoQkFTRV9TRENfRklMRSkgImJhc2Uuc2RjIgorc2V0IDo6ZW52KFNZTlRIX0RSSVZJTkdfQ0VMTCkgInNreTEzMF9mZF9zY19oZF9faW52XzgiCitzZXQgOjplbnYoU1lOVEhfRFJJVklOR19DRUxMX1BJTikgIlkiCitzZXQgOjplbnYoU1lOVEhfQ0FQX0xPQUQpICIxNy42NSIKK3NldCA6OmVudihXSVJFX1JDX0xBWUVSKSAibWV0MSIKKworI1RvIGRpc2FibGUgZW1wdHkgZmlsbGVyIGNlbGwgYmxhY2sgYm94IGdldCBjcmVhdGVkCisjc2V0IGxpbmtfbWFrZV9ibGFja19ib3hlcyAwCisKKworc2V0X2NtZF91bml0cyAtdGltZSBucyAtY2FwYWNpdGFuY2UgcEYgLWN1cnJlbnQgbUEgLXZvbHRhZ2UgViAtcmVzaXN0YW5jZSBrT2htIC1kaXN0YW5jZSB1bQorZGVmaW5lX2Nvcm5lcnMgd2MgYmMgdHQKK3JlYWRfbGliZXJ0eSAtY29ybmVyIGJjICQ6OmVudihMSUJfRkFTVEVTVCkKK3JlYWRfbGliZXJ0eSAtY29ybmVyIHdjICQ6OmVudihMSUJfU0xPV0VTVCkKK3JlYWRfbGliZXJ0eSAtY29ybmVyIHR0ICQ6OmVudihMSUJfVFlQSUNBTCkKKworcmVhZF9saWIgIC1jb3JuZXIgdHQgICAuLi8uLi9saWIvc2t5MTMwX3NyYW1fMmtieXRlXzFydzFyXzMyeDUxMl84X1RUXzFwOFZfMjVDLmxpYgorCityZWFkX3Zlcmlsb2cgbmV0bGlzdC9xc3BpbS52CityZWFkX3Zlcmlsb2cgbmV0bGlzdC9zeW50YWNvcmUudiAgCityZWFkX3Zlcmlsb2cgbmV0bGlzdC91YXJ0X2kyY21fdXNiX3NwaS52CityZWFkX3Zlcmlsb2cgbmV0bGlzdC93Yl9ob3N0LnYgIAorcmVhZF92ZXJpbG9nIG5ldGxpc3Qvd2JfaW50ZXJjb25uZWN0LnYKK3JlYWRfdmVyaWxvZyBuZXRsaXN0L3Bpbm11eC52CityZWFkX3Zlcmlsb2cgbmV0bGlzdC9zYXJfYWRjLnYKK3JlYWRfdmVyaWxvZyBuZXRsaXN0L3VzZXJfcHJvamVjdF93cmFwcGVyLnYgIAorCitsaW5rX2Rlc2lnbiAgJDo6ZW52KERFU0lHTl9OQU1FKQorCisKK3JlYWRfc3BlZiAtcGF0aCB1X3Jpc2N2X3RvcCAgLi4vLi4vc3BlZi9zY3IxX3RvcF93Yi5zcGVmCityZWFkX3NwZWYgLXBhdGggdV9waW5tdXggLi4vLi4vc3BlZi9waW5tdXguc3BlZgorcmVhZF9zcGVmIC1wYXRoIHVfcXNwaV9tYXN0ZXIgLi4vLi4vc3BlZi9xc3BpbV90b3Auc3BlZgorcmVhZF9zcGVmIC1wYXRoIHVfdWFydF9pMmNfdXNiX3NwaSAgLi4vLi4vc3BlZi91YXJ0X2kyY191c2Jfc3BpX3RvcC5zcGVmCityZWFkX3NwZWYgLXBhdGggdV93Yl9ob3N0ICAgIC4uLy4uL3NwZWYvd2JfaG9zdC5zcGVmCityZWFkX3NwZWYgLXBhdGggdV9pbnRlcmNvbiAgIC4uLy4uL3NwZWYvd2JfaW50ZXJjb25uZWN0LnNwZWYKK3JlYWRfc3BlZiAuLi8uLi9zcGVmL3VzZXJfcHJvamVjdF93cmFwcGVyLnNwZWYgIAorCisKK3JlYWRfc2RjIC1lY2hvICQ6OmVudihCQVNFX1NEQ19GSUxFKQorCisjIGNoZWNrIGZvciBtaXNzaW5nIGNvbnN0cmFpbnRzCitjaGVja19zZXR1cCAgLXZlcmJvc2UgPiB1bmNvbnN0cmFpbnRzLnJwdAorCitzZXRfb3BlcmF0aW5nX2NvbmRpdGlvbnMgLWFuYWx5c2lzX3R5cGUgc2luZ2xlCisjIFByb3BnYXRlIHRoZSBjbG9jaworc2V0X3Byb3BhZ2F0ZWRfY2xvY2sgW2FsbF9jbG9ja3NdCisKK3JlcG9ydF90bnMKK3JlcG9ydF93bnMKKyNyZXBvcnRfcG93ZXIgCisjCitlY2hvICIjIyMjIyMjIyMjIyMjIyMjIENPUk5FUiA6IFdDIChNQVgpIFRJTUlORyBSZXBvcnQgIyMjIyMjIyMjIyMjIyMjIyMjIyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPiB0aW1pbmdfc3NfbWF4LnJwdAorcmVwb3J0X2NoZWNrcyAtdW5pcXVlIC1zbGFja19tYXggLTAuMCAtcGF0aF9kZWxheSBtYXggLWdyb3VwX2NvdW50IDEwMCAgICAgICAgICAtY29ybmVyIHdjICAtZm9ybWF0IGZ1bGxfY2xvY2tfZXhwYW5kZWQgPj4gdGltaW5nX3NzX21heC5ycHQKK3JlcG9ydF9jaGVja3MgLWdyb3VwX2NvdW50IDEwMCAgICAgICAgLXBhdGhfZGVsYXkgbWF4ICAtcGF0aF9ncm91cCAgd2JtX2Nsa19pICAgLWNvcm5lciB3YyAgLWZvcm1hdCBmdWxsX2Nsb2NrX2V4cGFuZGVkID4+IHRpbWluZ19zc19tYXgucnB0CityZXBvcnRfY2hlY2tzIC1ncm91cF9jb3VudCAxMDAgICAgICAgIC1wYXRoX2RlbGF5IG1heCAgLXBhdGhfZ3JvdXAgIHdic19jbGtfaSAgIC1jb3JuZXIgd2MgIC1mb3JtYXQgZnVsbF9jbG9ja19leHBhbmRlZCA+PiB0aW1pbmdfc3NfbWF4LnJwdAorcmVwb3J0X2NoZWNrcyAtZ3JvdXBfY291bnQgMTAwICAgICAgICAtcGF0aF9kZWxheSBtYXggIC1wYXRoX2dyb3VwICBjcHVfY2xrICAgICAtY29ybmVyIHdjICAtZm9ybWF0IGZ1bGxfY2xvY2tfZXhwYW5kZWQgPj4gdGltaW5nX3NzX21heC5ycHQKK3JlcG9ydF9jaGVja3MgLWdyb3VwX2NvdW50IDEwMCAgICAgICAgLXBhdGhfZGVsYXkgbWF4ICAtcGF0aF9ncm91cCAgcnRjX2NsayAgICAgLWNvcm5lciB3YyAgLWZvcm1hdCBmdWxsX2Nsb2NrX2V4cGFuZGVkID4+IHRpbWluZ19zc19tYXgucnB0CityZXBvcnRfY2hlY2tzIC1ncm91cF9jb3VudCAxMDAgICAgICAgIC1wYXRoX2RlbGF5IG1heCAgLXBhdGhfZ3JvdXAgIGxpbmVfY2xrICAgIC1jb3JuZXIgd2MgIC1mb3JtYXQgZnVsbF9jbG9ja19leHBhbmRlZCA+PiB0aW1pbmdfc3NfbWF4LnJwdAorcmVwb3J0X2NoZWNrcyAgICAgICAgICAgICAgICAgICAgICAgICAtcGF0aF9kZWxheSBtYXggICAgICAgICAgICAgICAgICAgICAgICAgICAtY29ybmVyIHdjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gdGltaW5nX3NzX21heC5ycHQKKworZWNobyAiIyMjIyMjIyMjIyMjIyMjIyBDT1JORVIgOiBXQyAoTUlOKSBUSU1JTkcgUmVwb3J0ICMjIyMjIyMjIyMjIyMjIyMjIyMiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4gdGltaW5nX3NzX21pbi5ycHQKK3JlcG9ydF9jaGVja3MgLXVuaXF1ZSAtc2xhY2tfbWF4IC0wLjAgLXBhdGhfZGVsYXkgbWluIC1ncm91cF9jb3VudCAxMDAgICAgICAgICAgLWNvcm5lciB3YyAgLWZvcm1hdCBmdWxsX2Nsb2NrX2V4cGFuZGVkID4+IHRpbWluZ19zc19taW4ucnB0CityZXBvcnRfY2hlY2tzIC1ncm91cF9jb3VudCAxMDAgICAgICAgIC1wYXRoX2RlbGF5IG1pbiAgLXBhdGhfZ3JvdXAgIHdibV9jbGtfaSAgIC1jb3JuZXIgd2MgIC1mb3JtYXQgZnVsbF9jbG9ja19leHBhbmRlZCA+PiB0aW1pbmdfc3NfbWluLnJwdAorcmVwb3J0X2NoZWNrcyAtZ3JvdXBfY291bnQgMTAwICAgICAgICAtcGF0aF9kZWxheSBtaW4gIC1wYXRoX2dyb3VwICB3YnNfY2xrX2kgICAtY29ybmVyIHdjICAtZm9ybWF0IGZ1bGxfY2xvY2tfZXhwYW5kZWQgPj4gdGltaW5nX3NzX21pbi5ycHQKK3JlcG9ydF9jaGVja3MgLWdyb3VwX2NvdW50IDEwMCAgICAgICAgLXBhdGhfZGVsYXkgbWluICAtcGF0aF9ncm91cCAgY3B1X2NsayAgICAgLWNvcm5lciB3YyAgLWZvcm1hdCBmdWxsX2Nsb2NrX2V4cGFuZGVkID4+IHRpbWluZ19zc19taW4ucnB0CityZXBvcnRfY2hlY2tzIC1ncm91cF9jb3VudCAxMDAgICAgICAgIC1wYXRoX2RlbGF5IG1pbiAgLXBhdGhfZ3JvdXAgIHJ0Y19jbGsgICAgIC1jb3JuZXIgd2MgIC1mb3JtYXQgZnVsbF9jbG9ja19leHBhbmRlZCA+PiB0aW1pbmdfc3NfbWluLnJwdAorcmVwb3J0X2NoZWNrcyAtZ3JvdXBfY291bnQgMTAwICAgICAgICAtcGF0aF9kZWxheSBtaW4gIC1wYXRoX2dyb3VwICBsaW5lX2NsayAgICAtY29ybmVyIHdjICAtZm9ybWF0IGZ1bGxfY2xvY2tfZXhwYW5kZWQgPj4gdGltaW5nX3NzX21pbi5ycHQKK3JlcG9ydF9jaGVja3MgICAgICAgICAgICAgICAgICAgICAgICAgLXBhdGhfZGVsYXkgbWluICAgICAgICAgICAgICAgICAgICAgICAgICAgLWNvcm5lciB3YyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4+IHRpbWluZ19zc19taW4ucnB0CisKK2VjaG8gIiMjIyMjIyMjIyMjIyMjIyMgQ09STkVSIDogQkMgKE1BWCkgVElNSU5HIFJlcG9ydCAjIyMjIyMjIyMjIyMjIyMjIyMjIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+IHRpbWluZ19mZl9tYXgucnB0CityZXBvcnRfY2hlY2tzIC11bmlxdWUgLXNsYWNrX21heCAtMC4wIC1wYXRoX2RlbGF5IG1heCAtZ3JvdXBfY291bnQgMTAwICAgICAgICAgIC1jb3JuZXIgYmMgIC1mb3JtYXQgZnVsbF9jbG9ja19leHBhbmRlZCA+PiB0aW1pbmdfZmZfbWF4LnJwdAorcmVwb3J0X2NoZWNrcyAtZ3JvdXBfY291bnQgMTAwICAgICAgICAtcGF0aF9kZWxheSBtYXggIC1wYXRoX2dyb3VwICB3Ym1fY2xrX2kgICAtY29ybmVyIGJjICAtZm9ybWF0IGZ1bGxfY2xvY2tfZXhwYW5kZWQgPj4gdGltaW5nX2ZmX21heC5ycHQKK3JlcG9ydF9jaGVja3MgLWdyb3VwX2NvdW50IDEwMCAgICAgICAgLXBhdGhfZGVsYXkgbWF4ICAtcGF0aF9ncm91cCAgd2JzX2Nsa19pICAgLWNvcm5lciBiYyAgLWZvcm1hdCBmdWxsX2Nsb2NrX2V4cGFuZGVkID4+IHRpbWluZ19mZl9tYXgucnB0CityZXBvcnRfY2hlY2tzIC1ncm91cF9jb3VudCAxMDAgICAgICAgIC1wYXRoX2RlbGF5IG1heCAgLXBhdGhfZ3JvdXAgIGNwdV9jbGsgICAgIC1jb3JuZXIgYmMgIC1mb3JtYXQgZnVsbF9jbG9ja19leHBhbmRlZCA+PiB0aW1pbmdfZmZfbWF4LnJwdAorcmVwb3J0X2NoZWNrcyAtZ3JvdXBfY291bnQgMTAwICAgICAgICAtcGF0aF9kZWxheSBtYXggIC1wYXRoX2dyb3VwICBydGNfY2xrICAgICAtY29ybmVyIGJjICAtZm9ybWF0IGZ1bGxfY2xvY2tfZXhwYW5kZWQgPj4gdGltaW5nX2ZmX21heC5ycHQKK3JlcG9ydF9jaGVja3MgLWdyb3VwX2NvdW50IDEwMCAgICAgICAgLXBhdGhfZGVsYXkgbWF4ICAtcGF0aF9ncm91cCAgbGluZV9jbGsgICAgLWNvcm5lciBiYyAgLWZvcm1hdCBmdWxsX2Nsb2NrX2V4cGFuZGVkID4+IHRpbWluZ19mZl9tYXgucnB0CityZXBvcnRfY2hlY2tzICAgICAgICAgICAgICAgICAgICAgICAgIC1wYXRoX2RlbGF5IG1heCAgICAgICAgICAgICAgICAgICAgICAgICAgIC1jb3JuZXIgYmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PiB0aW1pbmdfZmZfbWF4LnJwdAorCitlY2hvICIjIyMjIyMjIyMjIyMjIyMjIENPUk5FUiA6IEJDIChNSU4pIFRJTUlORyBSZXBvcnQgIyMjIyMjIyMjIyMjIyMjIyMjIyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPiB0aW1pbmdfZmZfbWluLnJwdAorcmVwb3J0X2NoZWNrcyAtdW5pcXVlIC1zbGFja19tYXggLTAuMCAtcGF0aF9kZWxheSBtaW4gLWdyb3VwX2NvdW50IDEwMCAgICAgICAgICAtY29ybmVyIGJjICAtZm9ybWF0IGZ1bGxfY2xvY2tfZXhwYW5kZWQgPj4gdGltaW5nX2ZmX21pbi5ycHQKK3JlcG9ydF9jaGVja3MgLWdyb3VwX2NvdW50IDEwMCAgICAgICAgLXBhdGhfZGVsYXkgbWluICAtcGF0aF9ncm91cCAgd2JtX2Nsa19pICAgLWNvcm5lciBiYyAgLWZvcm1hdCBmdWxsX2Nsb2NrX2V4cGFuZGVkID4+IHRpbWluZ19mZl9taW4ucnB0CityZXBvcnRfY2hlY2tzIC1ncm91cF9jb3VudCAxMDAgICAgICAgIC1wYXRoX2RlbGF5IG1pbiAgLXBhdGhfZ3JvdXAgIHdic19jbGtfaSAgIC1jb3JuZXIgYmMgIC1mb3JtYXQgZnVsbF9jbG9ja19leHBhbmRlZCA+PiB0aW1pbmdfZmZfbWluLnJwdAorcmVwb3J0X2NoZWNrcyAtZ3JvdXBfY291bnQgMTAwICAgICAgICAtcGF0aF9kZWxheSBtaW4gIC1wYXRoX2dyb3VwICBjcHVfY2xrICAgICAtY29ybmVyIGJjICAtZm9ybWF0IGZ1bGxfY2xvY2tfZXhwYW5kZWQgPj4gdGltaW5nX2ZmX21pbi5ycHQKK3JlcG9ydF9jaGVja3MgLWdyb3VwX2NvdW50IDEwMCAgICAgICAgLXBhdGhfZGVsYXkgbWluICAtcGF0aF9ncm91cCAgcnRjX2NsayAgICAgLWNvcm5lciBiYyAgLWZvcm1hdCBmdWxsX2Nsb2NrX2V4cGFuZGVkID4+IHRpbWluZ19mZl9taW4ucnB0CityZXBvcnRfY2hlY2tzIC1ncm91cF9jb3VudCAxMDAgICAgICAgIC1wYXRoX2RlbGF5IG1pbiAgLXBhdGhfZ3JvdXAgIGxpbmVfY2xrICAgIC1jb3JuZXIgYmMgIC1mb3JtYXQgZnVsbF9jbG9ja19leHBhbmRlZCA+PiB0aW1pbmdfZmZfbWluLnJwdAorcmVwb3J0X2NoZWNrcyAgICAgICAgICAgICAgICAgICAgICAgICAtcGF0aF9kZWxheSBtaW4gICAgICAgICAgICAgICAgICAgICAgICAgICAtY29ybmVyIGJjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gdGltaW5nX2ZmX21pbi5ycHQKKworCitlY2hvICIjIyMjIyMjIyMjIyMjIyMjIENPUk5FUiA6IFRUIChNQVgpIFRJTUlORyBSZXBvcnQgIyMjIyMjIyMjIyMjIyMjIyMjIyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPiB0aW1pbmdfdHRfbWF4LnJwdAorcmVwb3J0X2NoZWNrcyAtdW5pcXVlIC1zbGFja19tYXggLTAuMCAtcGF0aF9kZWxheSBtYXggLWdyb3VwX2NvdW50IDEwMCAgICAgICAgICAtY29ybmVyIHR0ICAtZm9ybWF0IGZ1bGxfY2xvY2tfZXhwYW5kZWQgPj4gdGltaW5nX3R0X21heC5ycHQKK3JlcG9ydF9jaGVja3MgLWdyb3VwX2NvdW50IDEwMCAgICAgICAgLXBhdGhfZGVsYXkgbWF4ICAtcGF0aF9ncm91cCAgd2JtX2Nsa19pICAgLWNvcm5lciB0dCAgLWZvcm1hdCBmdWxsX2Nsb2NrX2V4cGFuZGVkID4+IHRpbWluZ190dF9tYXgucnB0CityZXBvcnRfY2hlY2tzIC1ncm91cF9jb3VudCAxMDAgICAgICAgIC1wYXRoX2RlbGF5IG1heCAgLXBhdGhfZ3JvdXAgIHdic19jbGtfaSAgIC1jb3JuZXIgdHQgIC1mb3JtYXQgZnVsbF9jbG9ja19leHBhbmRlZCA+PiB0aW1pbmdfdHRfbWF4LnJwdAorcmVwb3J0X2NoZWNrcyAtZ3JvdXBfY291bnQgMTAwICAgICAgICAtcGF0aF9kZWxheSBtYXggIC1wYXRoX2dyb3VwICBjcHVfY2xrICAgICAtY29ybmVyIHR0ICAtZm9ybWF0IGZ1bGxfY2xvY2tfZXhwYW5kZWQgPj4gdGltaW5nX3R0X21heC5ycHQKK3JlcG9ydF9jaGVja3MgLWdyb3VwX2NvdW50IDEwMCAgICAgICAgLXBhdGhfZGVsYXkgbWF4ICAtcGF0aF9ncm91cCAgcnRjX2NsayAgICAgLWNvcm5lciB0dCAgLWZvcm1hdCBmdWxsX2Nsb2NrX2V4cGFuZGVkID4+IHRpbWluZ190dF9tYXgucnB0CityZXBvcnRfY2hlY2tzIC1ncm91cF9jb3VudCAxMDAgICAgICAgIC1wYXRoX2RlbGF5IG1heCAgLXBhdGhfZ3JvdXAgIGxpbmVfY2xrICAgIC1jb3JuZXIgdHQgIC1mb3JtYXQgZnVsbF9jbG9ja19leHBhbmRlZCA+PiB0aW1pbmdfdHRfbWF4LnJwdAorcmVwb3J0X2NoZWNrcyAgICAgICAgICAgICAgICAgICAgICAgICAtcGF0aF9kZWxheSBtYXggICAgICAgICAgICAgICAgICAgICAgICAgICAtY29ybmVyIHR0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gdGltaW5nX3R0X21heC5ycHQKKworZWNobyAiIyMjIyMjIyMjIyMjIyMjIyBDT1JORVIgOiBUVCAoTUlOKSBUSU1JTkcgUmVwb3J0ICMjIyMjIyMjIyMjIyMjIyMjIyMiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4gdGltaW5nX3R0X21pbi5ycHQKK3JlcG9ydF9jaGVja3MgLXVuaXF1ZSAtc2xhY2tfbWF4IC0wLjAgLXBhdGhfZGVsYXkgbWluIC1ncm91cF9jb3VudCAxMDAgICAgICAgICAgLWNvcm5lciB0dCAgLWZvcm1hdCBmdWxsX2Nsb2NrX2V4cGFuZGVkID4+IHRpbWluZ190dF9taW4ucnB0CityZXBvcnRfY2hlY2tzIC1ncm91cF9jb3VudCAxMDAgICAgICAgIC1wYXRoX2RlbGF5IG1pbiAgLXBhdGhfZ3JvdXAgIHdibV9jbGtfaSAgIC1jb3JuZXIgdHQgIC1mb3JtYXQgZnVsbF9jbG9ja19leHBhbmRlZCA+PiB0aW1pbmdfdHRfbWluLnJwdAorcmVwb3J0X2NoZWNrcyAtZ3JvdXBfY291bnQgMTAwICAgICAgICAtcGF0aF9kZWxheSBtaW4gIC1wYXRoX2dyb3VwICB3YnNfY2xrX2kgICAtY29ybmVyIHR0ICAtZm9ybWF0IGZ1bGxfY2xvY2tfZXhwYW5kZWQgPj4gdGltaW5nX3R0X21pbi5ycHQKK3JlcG9ydF9jaGVja3MgLWdyb3VwX2NvdW50IDEwMCAgICAgICAgLXBhdGhfZGVsYXkgbWluICAtcGF0aF9ncm91cCAgY3B1X2NsayAgICAgLWNvcm5lciB0dCAgLWZvcm1hdCBmdWxsX2Nsb2NrX2V4cGFuZGVkID4+IHRpbWluZ190dF9taW4ucnB0CityZXBvcnRfY2hlY2tzIC1ncm91cF9jb3VudCAxMDAgICAgICAgIC1wYXRoX2RlbGF5IG1pbiAgLXBhdGhfZ3JvdXAgIHJ0Y19jbGsgICAgIC1jb3JuZXIgdHQgIC1mb3JtYXQgZnVsbF9jbG9ja19leHBhbmRlZCA+PiB0aW1pbmdfdHRfbWluLnJwdAorcmVwb3J0X2NoZWNrcyAtZ3JvdXBfY291bnQgMTAwICAgICAgICAtcGF0aF9kZWxheSBtaW4gIC1wYXRoX2dyb3VwICBsaW5lX2NsayAgICAtY29ybmVyIHR0ICAtZm9ybWF0IGZ1bGxfY2xvY2tfZXhwYW5kZWQgPj4gdGltaW5nX3R0X21pbi5ycHQKK3JlcG9ydF9jaGVja3MgICAgICAgICAgICAgICAgICAgICAgICAgLXBhdGhfZGVsYXkgbWluICAgICAgICAgICAgICAgICAgICAgICAgICAgLWNvcm5lciB0dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4+IHRpbWluZ190dF9taW4ucnB0CisKKworcmVwb3J0X2NoZWNrcyAtcGF0aF9kZWxheSBtaW5fbWF4IAorCisjZXhpdApkaWZmIC0tZ2l0IGEvb3BlbmxhbmUvd2JfaG9zdC9iYXNlLnNkYyBiL29wZW5sYW5lL3diX2hvc3QvYmFzZS5zZGMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU4NDEwYwotLS0gL2Rldi9udWxsCisrKyBiL29wZW5sYW5lL3diX2hvc3QvYmFzZS5zZGMKQEAgLTAsMCArMSwxMDMgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ3JlYXRlZCBieSB3cml0ZV9zZGMKKyMgV2VkIE5vdiAxMCAxNjo1Mjo1MiAyMDIxCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitjdXJyZW50X2Rlc2lnbiB3Yl9ob3N0CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFRpbWluZyBDb25zdHJhaW50cworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworY3JlYXRlX2Nsb2NrIC1uYW1lIHdibV9jbGtfaSAtcGVyaW9kIDEwLjAwMDAgW2dldF9wb3J0cyB7d2JtX2Nsa19pfV0KK2NyZWF0ZV9jbG9jayAtbmFtZSB3YnNfY2xrX2kgLXBlcmlvZCAxMC4wMDAwIFtnZXRfcG9ydHMge3dic19jbGtfaX1dCitjcmVhdGVfY2xvY2sgLW5hbWUgdWFydF9jbGsgLXBlcmlvZCAxMDAuMDAwMCBbZ2V0X3BpbnMge3VfdWFydDJ3Yi51X2NvcmUudV91YXJ0X2Nsay51X211eC9YfV0KKworc2V0X2Nsb2NrX3RyYW5zaXRpb24gMC4xNTAwIFthbGxfY2xvY2tzXQorc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1zZXR1cCAwLjI1MDAgW2FsbF9jbG9ja3NdCitzZXRfY2xvY2tfdW5jZXJ0YWludHkgLWhvbGQgMC4yNTAwIFthbGxfY2xvY2tzXQorCitzZXQgOjplbnYoU1lOVEhfVElNSU5HX0RFUkFURSkgMC4wNQorcHV0cyAiXFtJTkZPXF06IFNldHRpbmcgdGltaW5nIGRlcmF0ZSB0bzogW2V4cHIgeyQ6OmVudihTWU5USF9USU1JTkdfREVSQVRFKSAqIDEwfV0gJSIKK3NldF90aW1pbmdfZGVyYXRlIC1lYXJseSBbZXhwciB7MS0kOjplbnYoU1lOVEhfVElNSU5HX0RFUkFURSl9XQorc2V0X3RpbWluZ19kZXJhdGUgLWxhdGUgW2V4cHIgezErJDo6ZW52KFNZTlRIX1RJTUlOR19ERVJBVEUpfV0KKworc2V0X2Nsb2NrX2dyb3VwcyAtbmFtZSBhc3luY19jbG9jayAtYXN5bmNocm9ub3VzIFwKKyAtZ3JvdXAgW2dldF9jbG9ja3Mge3VhcnRfY2xrfV0gIFwKKyAtZ3JvdXAgW2dldF9jbG9ja3Mge3dic19jbGtfaX1dIFwKKyAtZ3JvdXAgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1jb21tZW50IHtBc3luYyBDbG9jayBncm91cH0KKworIyMjIENsa1NrZXcgQWRqdXN0CitzZXRfY2FzZV9hbmFseXNpcyAwIFtnZXRfcG9ydHMge2NmZ19jc2thX3doWzBdfV0KK3NldF9jYXNlX2FuYWx5c2lzIDAgW2dldF9wb3J0cyB7Y2ZnX2Nza2Ffd2hbMV19XQorc2V0X2Nhc2VfYW5hbHlzaXMgMCBbZ2V0X3BvcnRzIHtjZmdfY3NrYV93aFsyXX1dCitzZXRfY2FzZV9hbmFseXNpcyAwIFtnZXRfcG9ydHMge2NmZ19jc2thX3doWzNdfV0KKworCitzZXRfbWF4X2RlbGF5ICAgMy41IC1mcm9tIFtnZXRfcG9ydHMge3diZF9jbGtfaW50fV0KK3NldF9tYXhfZGVsYXkgICAyIC10byAgIFtnZXRfcG9ydHMge3diZF9jbGtfd2h9XQorc2V0X21heF9kZWxheSAzLjUgLWZyb20gd2JkX2Nsa19pbnQgLXRvIHdiZF9jbGtfd2gKKworIyMjIFdCTSBJL0YKKyNTdHJvYmUgaXMgcmVnaXN0ZXJlZCBpbnNpZGUgdGhlIHdiX2hvc3QgYmVmb3JlIGdlbmVyYXRpbmcgY2hpcCBzZWxlY3QKKyMgU28gd2JtX2Fkcl9pICB3Ym1fd2VfaSB3Ym1fc2VsX2kgd2JtX2RhdF9pIGFyZSBoYXZpbmcgMiBjeWNsZSBzZXR1cAorc2V0X211bHRpY3ljbGVfcGF0aCAtc2V0dXAgIC1mcm9tIFtnZXRfcG9ydHMge3dibV9hZHJfaVsqXX1dIDIKK3NldF9tdWx0aWN5Y2xlX3BhdGggLXNldHVwICAtZnJvbSBbZ2V0X3BvcnRzIHt3Ym1fY3ljX2l9XSAgMgorc2V0X211bHRpY3ljbGVfcGF0aCAtc2V0dXAgIC1mcm9tIFtnZXRfcG9ydHMge3dibV9kYXRfaVsqXX1dIDIKK3NldF9tdWx0aWN5Y2xlX3BhdGggLXNldHVwICAtZnJvbSBbZ2V0X3BvcnRzIHt3Ym1fc2VsX2lbKl19XSAyCitzZXRfbXVsdGljeWNsZV9wYXRoIC1zZXR1cCAgLWZyb20gW2dldF9wb3J0cyB7d2JtX3dlX2l9XSAyCisKK3NldF9tdWx0aWN5Y2xlX3BhdGggLWhvbGQgIC1mcm9tIFtnZXRfcG9ydHMge3dibV9hZHJfaVsqXX1dIDIKK3NldF9tdWx0aWN5Y2xlX3BhdGggLWhvbGQgIC1mcm9tIFtnZXRfcG9ydHMge3dibV9jeWNfaX1dICAyCitzZXRfbXVsdGljeWNsZV9wYXRoIC1ob2xkICAtZnJvbSBbZ2V0X3BvcnRzIHt3Ym1fZGF0X2lbKl19XSAyCitzZXRfbXVsdGljeWNsZV9wYXRoIC1ob2xkICAtZnJvbSBbZ2V0X3BvcnRzIHt3Ym1fc2VsX2lbKl19XSAyCitzZXRfbXVsdGljeWNsZV9wYXRoIC1ob2xkICAtZnJvbSBbZ2V0X3BvcnRzIHt3Ym1fd2VfaX1dIDIKKworIworc2V0X2lucHV0X2RlbGF5IDUuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1tYXggLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3Ym1fcnN0X2l9XQorc2V0X2lucHV0X2RlbGF5IDUuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1tYXggLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3Ym1fc3RiX2l9XQorCitzZXRfaW5wdXRfZGVsYXkgMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLW1pbiAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dibV9yc3RfaX1dCitzZXRfaW5wdXRfZGVsYXkgMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLW1pbiAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dibV9zdGJfaX1dCisKK3NldF9vdXRwdXRfZGVsYXkgLW1heCA1LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dibV9hY2tfb31dCitzZXRfb3V0cHV0X2RlbGF5IC1tYXggNS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3Ym1fZGF0X29bKl19XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDUuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JtX2Vycl9vfV0KKworc2V0X291dHB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JtX2Fja19vfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dibV9kYXRfb1sqXX1dCitzZXRfb3V0cHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3Ym1fZXJyX299XQorIyBXQlMgSS9GCitzZXRfaW5wdXRfZGVsYXkgLW1heCA2LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3YnNfY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19hY2tfaX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA2LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3YnNfY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfaVsqXX1dCisKK3NldF9pbnB1dF9kZWxheSAtbWluIDIuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dic19jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2Fja19pfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDIuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dic19jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9pWypdfV0KKworc2V0X291dHB1dF9kZWxheSAtbWF4IDQuNTAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dic19jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2Fkcl9vWypdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1heCA0LjUwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3YnNfY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19jeWNfb31dCitzZXRfb3V0cHV0X2RlbGF5IC1tYXggNC41MDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JzX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X29bKl19XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDQuNTAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dic19jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX3NlbF9vWypdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1heCA0LjUwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3YnNfY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19zdGJfb31dCitzZXRfb3V0cHV0X2RlbGF5IC1tYXggNC41MDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JzX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfd2Vfb31dCisKK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAtMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JzX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfYWRyX29bKl19XQorc2V0X291dHB1dF9kZWxheSAtbWluIC0xLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3YnNfY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19jeWNfb31dCitzZXRfb3V0cHV0X2RlbGF5IC1taW4gLTEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dic19jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9vWypdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAtMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JzX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfc2VsX29bKl19XQorc2V0X291dHB1dF9kZWxheSAtbWluIC0xLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3YnNfY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19zdGJfb31dCitzZXRfb3V0cHV0X2RlbGF5IC1taW4gLTEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dic19jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX3dlX299XQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEVudmlyb25tZW50CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4gJDo6ZW52KFNZTlRIX0RSSVZJTkdfQ0VMTF9QSU4pIFthbGxfaW5wdXRzXQorc2V0IGNhcF9sb2FkIFtleHByICQ6OmVudihTWU5USF9DQVBfTE9BRCkgLyAxMDAwLjBdCitwdXRzICJcW0lORk9cXTogU2V0dGluZyBsb2FkIHRvOiAkY2FwX2xvYWQiCitzZXRfbG9hZCAgJGNhcF9sb2FkIFthbGxfb3V0cHV0c10KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgRGVzaWduIFJ1bGVzCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyNkaXNhYmxlIGNsb2NrIGdhdGluZyBjaGVjayBhdCBzdGF0aWMgY2xvY2sgc2VsZWN0IHBpbnMKK3NldF9mYWxzZV9wYXRoIC10aHJvdWdoIFtnZXRfcGlucyB1X2NwdV9yZWZfc2VsLnVfbXV4L1NdCitzZXRfZmFsc2VfcGF0aCAtdGhyb3VnaCBbZ2V0X3BpbnMgdV9jcHVfY2xrX3NlbC51X211eC9TXQorc2V0X2ZhbHNlX3BhdGggLXRocm91Z2ggW2dldF9waW5zIHVfd2JzX2Nsa19zZWwudV9tdXgvU10KK3NldF9mYWxzZV9wYXRoIC10aHJvdWdoIFtnZXRfcGlucyB1X3VzYl9jbGtfc2VsLnVfbXV4L1NdCmRpZmYgLS1naXQgYS9vcGVubGFuZS93Yl9ob3N0L2NvbmZpZy50Y2wgYi9vcGVubGFuZS93Yl9ob3N0L2NvbmZpZy50Y2wKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmNkMWRhNAotLS0gL2Rldi9udWxsCisrKyBiL29wZW5sYW5lL3diX2hvc3QvY29uZmlnLnRjbApAQCAtMCwwICsxLDExMiBAQAorIyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAgMjAyMSAsIERpbmVzaCBBbm5heXlhCisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorIyBTUERYLUZpbGVDb250cmlidXRvcjogTW9kaWZpZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKworIyBHbG9iYWwKKyMgLS0tLS0tCisKK3NldCBzY3JpcHRfZGlyIFtmaWxlIGRpcm5hbWUgW2ZpbGUgbm9ybWFsaXplIFtpbmZvIHNjcmlwdF1dXQorIyBOYW1lCisKK3NldCA6OmVudihERVNJR05fTkFNRSkgd2JfaG9zdAorCitzZXQgOjplbnYoREVTSUdOX0lTX0NPUkUpICIwIgorCisjIFRpbWluZyBjb25maWd1cmF0aW9uCitzZXQgOjplbnYoQ0xPQ0tfUEVSSU9EKSAiMTAiCitzZXQgOjplbnYoQ0xPQ0tfUE9SVCkgIndibV9jbGtfaSB3YnNfY2xrX2kgdV91YXJ0MndiLnVfY29yZS51X3VhcnRfY2xrLnVfbXV4L1giCisKK3NldCA6OmVudihTWU5USF9NQVhfRkFOT1VUKSA0CisKKyMjIENUUyBCVUZGRVIKK3NldCA6OmVudihDVFNfQ0xLX0JVRkZFUl9MSVNUKSAic2t5MTMwX2ZkX3NjX2hkX19jbGtidWZfNCBza3kxMzBfZmRfc2NfaGRfX2Nsa2J1Zl84Igorc2V0IDo6ZW52KENUU19TSU5LX0NMVVNURVJJTkdfU0laRSkgIjE2Igorc2V0IDo6ZW52KENMT0NLX0JVRkZFUl9GQU5PVVQpICI4IgorCisjIFNvdXJjZXMKKyMgLS0tLS0tLQorCisjIExvY2FsIHNvdXJjZXMgKyBubzJ1c2Igc291cmNlcworc2V0IDo6ZW52KFZFUklMT0dfRklMRVMpICJcCisgICAgICRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL2Nsa19za2V3X2FkanVzdC9zcmMvY2xrX3NrZXdfYWRqdXN0Lmd2IFwKKyAgICAgJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwvd2JfaG9zdC9zcmMvd2JfaG9zdC5zdiBcCisgICAgICRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL2xpYi9hc3luY19maWZvLnN2ICAgICAgXAorICAgICAkc2NyaXB0X2Rpci8uLi8uLi92ZXJpbG9nL3J0bC9saWIvYXN5bmNfd2Iuc3YgICAgICAgIFwKKyAgICAgJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwvbGliL2Nsa19jdGwudiAgICAgICAgICBcCisgICAgICRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL2xpYi9jdGVjaF9jZWxscy5zdiAgICAgXAorICAgICAkc2NyaXB0X2Rpci8uLi8uLi92ZXJpbG9nL3J0bC9saWIvcmVnaXN0ZXJzLnYgICAgICAgIFwKKyAgICAgJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwvbGliL3Jlc2V0X3N5bmMuc3YgICAgICBcCisgICAgICRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL2xpYi9hc3luY19yZWdfYnVzLnN2ICAgXAorICAgICAkc2NyaXB0X2Rpci8uLi8uLi92ZXJpbG9nL3J0bC91YXJ0L3NyYy91YXJ0X3R4ZnNtLnN2IFwKKyAgICAgJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwvdWFydC9zcmMvdWFydF9yeGZzbS5zdiBcCisgICAgICRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL2xpYi9kb3VibGVfc3luY19sb3cudiAgXAorICAgICAkc2NyaXB0X2Rpci8uLi8uLi92ZXJpbG9nL3J0bC93Yl9pbnRlcmNvbm5lY3Qvc3JjL3diX2FyYi5zdiAgICAgXAorICAgICAkc2NyaXB0X2Rpci8uLi8uLi92ZXJpbG9nL3J0bC91YXJ0MndiL3NyYy91YXJ0MndiLnN2IFwKKyAgICAgJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwvdWFydDJ3Yi9zcmMvdWFydDJfY29yZS5zdiBcCisgICAgICRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL3VhcnQyd2Ivc3JjL3VhcnRfbXNnX2hhbmRsZXIudiBcCisgICAgICIKKworc2V0IDo6ZW52KFNZTlRIX1JFQURfQkxBQ0tCT1hfTElCKSAxCitzZXQgOjplbnYoU1lOVEhfREVGSU5FUykgW2xpc3QgU1lOVEhFU0lTIF0KK3NldCA6OmVudihTRENfRklMRSkgIiRzY3JpcHRfZGlyL2Jhc2Uuc2RjIgorc2V0IDo6ZW52KEJBU0VfU0RDX0ZJTEUpICIkc2NyaXB0X2Rpci9iYXNlLnNkYyIKKworc2V0IDo6ZW52KExFQ19FTkFCTEUpIDAKKworc2V0IDo6ZW52KFZERF9QSU4pIFtsaXN0IHt2Y2NkMX1dCitzZXQgOjplbnYoR05EX1BJTikgW2xpc3Qge3Zzc2QxfV0KKworCisjIEZsb29ycGxhbm5pbmcKKyMgLS0tLS0tLS0tLS0tLQorCitzZXQgOjplbnYoRlBfUElOX09SREVSX0NGRykgJDo6ZW52KERFU0lHTl9ESVIpL3Bpbl9vcmRlci5jZmcKKworc2V0IDo6ZW52KEZQX1NJWklORykgYWJzb2x1dGUKK3NldCA6OmVudihESUVfQVJFQSkgIjAgMCA4MDAgMjAwIgorCisKKyMgSWYgeW91J3JlIGdvaW5nIHRvIHVzZSBtdWx0aXBsZSBwb3dlciBkb21haW5zLCB0aGVuIGtlZXAgdGhpcyBkaXNhYmxlZC4KK3NldCA6OmVudihSVU5fQ1ZDKSAxCisKKyNzZXQgOjplbnYoUEROX0NGRykgJHNjcmlwdF9kaXIvcGRuLnRjbAorCisKK3NldCA6OmVudihQTF9USU1FX0RSSVZFTikgMQorc2V0IDo6ZW52KFBMX1RBUkdFVF9ERU5TSVRZKSAiMC4zNSIKKworCisKK3NldCA6OmVudihGUF9JT19WRVhURU5EKSA0CitzZXQgOjplbnYoRlBfSU9fSEVYVEVORCkgNAorCitzZXQgOjplbnYoRlBfUEROX1ZQSVRDSCkgMTAwCitzZXQgOjplbnYoRlBfUEROX0hQSVRDSCkgMTAwCitzZXQgOjplbnYoRlBfUEROX1ZXSURUSCkgNQorc2V0IDo6ZW52KEZQX1BETl9IV0lEVEgpIDUKKworc2V0IDo6ZW52KEdMQl9SVF9NQVhMQVlFUikgNQorc2V0IDo6ZW52KEdMQl9SVF9NQVhfRElPREVfSU5TX0lURVJTKSAxMAorCitzZXQgOjplbnYoRElPREVfSU5TRVJUSU9OX1NUUkFURUdZKSA0CisKK3NldCA6OmVudihQTF9SRVNJWkVSX0JVRkZFUl9JTlBVVF9QT1JUUykgIjAiCitzZXQgOjplbnYoUExfUkVTSVpFUl9CVUZGRVJfT1VUUFVUX1BPUlRTKSAiMSIKK3NldCA6OmVudihHTEJfUkVTSVpFUl9USU1JTkdfT1BUSU1JWkFUSU9OUykgIjEiCitzZXQgOjplbnYoUExfUkVTSVpFUl9ERVNJR05fT1BUSU1JWkFUSU9OUykgIjEiCitzZXQgOjplbnYoUVVJVF9PTl9USU1JTkdfVklPTEFUSU9OUykgIjAiCitzZXQgOjplbnYoUVVJVF9PTl9NQUdJQ19EUkMpICIxIgorc2V0IDo6ZW52KFFVSVRfT05fTFZTX0VSUk9SKSAiMCIKK3NldCA6OmVudihRVUlUX09OX1NMRVdfVklPTEFUSU9OUykgIjAiCmRpZmYgLS1naXQgYS9vcGVubGFuZS93Yl9ob3N0L2ludGVyYWN0aXZlLnRjbCBiL29wZW5sYW5lL3diX2hvc3QvaW50ZXJhY3RpdmUudGNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1OTU4NmYKLS0tIC9kZXYvbnVsbAorKysgYi9vcGVubGFuZS93Yl9ob3N0L2ludGVyYWN0aXZlLnRjbApAQCAtMCwwICsxLDIxOSBAQAorIyEvdXNyL2Jpbi90Y2xzaAorIyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIwIEVmYWJsZXNzIENvcnBvcmF0aW9uCisjIENvcHlyaWdodCAyMDIwIEVmYWJsZXNzIENvcnBvcmF0aW9uCisjIENvcHlyaWdodCAyMDIwIFN5bHZhaW4gTXVuYXV0CisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorCitwYWNrYWdlIHJlcXVpcmUgb3BlbmxhbmU7CisKKworcHJvYyBydW5fcGxhY2VtZW50X3N0ZXAge2FyZ3N9IHsKKyAgICAjIHNldCBwZG5kZWZfZGlybmFtZSBbZmlsZSBkaXJuYW1lICQ6OmVudihwZG5fdG1wX2ZpbGVfdGFnKS5kZWZdCisgICAgIyBzZXQgcGRuZGVmIFtsaW5kZXggW2dsb2IgJHBkbmRlZl9kaXJuYW1lLypwZG4qXSAwXQorICAgICMgc2V0X2RlZiAkcGRuZGVmCisgICAgaWYgeyAhIFsgaW5mbyBleGlzdHMgOjplbnYoUExBQ0VNRU5UX0NVUlJFTlRfREVGKSBdIH0geworICAgICAgICBzZXQgOjplbnYoUExBQ0VNRU5UX0NVUlJFTlRfREVGKSAkOjplbnYoQ1VSUkVOVF9ERUYpCisgICAgfSBlbHNlIHsKKyAgICAgICAgc2V0IDo6ZW52KENVUlJFTlRfREVGKSAkOjplbnYoUExBQ0VNRU5UX0NVUlJFTlRfREVGKQorICAgIH0KKworICAgIHJ1bl9wbGFjZW1lbnQKK30KKworcHJvYyBydW5fY3RzX3N0ZXAge2FyZ3N9IHsKKyAgICAjIHNldF9kZWYgJDo6ZW52KG9wZW5kcF9yZXN1bHRfZmlsZV90YWcpLmRlZgorICAgIGlmIHsgISBbIGluZm8gZXhpc3RzIDo6ZW52KENUU19DVVJSRU5UX0RFRikgXSB9IHsKKyAgICAgICAgc2V0IDo6ZW52KENUU19DVVJSRU5UX0RFRikgJDo6ZW52KENVUlJFTlRfREVGKQorICAgIH0gZWxzZSB7CisgICAgICAgIHNldCA6OmVudihDVVJSRU5UX0RFRikgJDo6ZW52KENUU19DVVJSRU5UX0RFRikKKyAgICB9CisKKyAgICBydW5fY3RzCisgICAgcnVuX3Jlc2l6ZXJfdGltaW5nCit9CisKK3Byb2MgcnVuX3JvdXRpbmdfc3RlcCB7YXJnc30geworICAgICMgc2V0IHJlc2l6ZXJkZWZfZGlybmFtZSBbZmlsZSBkaXJuYW1lICQ6OmVudihyZXNpemVyX3RtcF9maWxlX3RhZylfdGltaW5nLmRlZl0KKyAgICAjIHNldCByZXNpemVyZGVmIFtsaW5kZXggW2dsb2IgJHJlc2l6ZXJkZWZfZGlybmFtZS8qcmVzaXplcipdIDBdCisgICAgIyBzZXRfZGVmICRyZXNpemVyZGVmCisgICAgaWYgeyAhIFsgaW5mbyBleGlzdHMgOjplbnYoUk9VVElOR19DVVJSRU5UX0RFRikgXSB9IHsKKyAgICAgICAgc2V0IDo6ZW52KFJPVVRJTkdfQ1VSUkVOVF9ERUYpICQ6OmVudihDVVJSRU5UX0RFRikKKyAgICB9IGVsc2UgeworICAgICAgICBzZXQgOjplbnYoQ1VSUkVOVF9ERUYpICQ6OmVudihST1VUSU5HX0NVUlJFTlRfREVGKQorICAgIH0KKyAgICBydW5fcm91dGluZworfQorCitwcm9jIHJ1bl9kaW9kZV9pbnNlcnRpb25fMl81X3N0ZXAge2FyZ3N9IHsKKyAgICAjIHNldF9kZWYgJDo6ZW52KHRyaXRvblJvdXRlX3Jlc3VsdF9maWxlX3RhZykuZGVmCisgICAgaWYgeyAhIFsgaW5mbyBleGlzdHMgOjplbnYoRElPREVfSU5TRVJUSU9OX0NVUlJFTlRfREVGKSBdIH0geworICAgICAgICBzZXQgOjplbnYoRElPREVfSU5TRVJUSU9OX0NVUlJFTlRfREVGKSAkOjplbnYoQ1VSUkVOVF9ERUYpCisgICAgfSBlbHNlIHsKKyAgICAgICAgc2V0IDo6ZW52KENVUlJFTlRfREVGKSAkOjplbnYoRElPREVfSU5TRVJUSU9OX0NVUlJFTlRfREVGKQorICAgIH0KKwlpZiB7ICgkOjplbnYoRElPREVfSU5TRVJUSU9OX1NUUkFURUdZKSA9PSAyKSB8fCAoJDo6ZW52KERJT0RFX0lOU0VSVElPTl9TVFJBVEVHWSkgPT0gNSkgfSB7CisJCXJ1bl9hbnRlbm5hX2NoZWNrCisJCWhlYWxfYW50ZW5uYV92aW9sYXRvcnM7ICMgbW9kaWZpZXMgdGhlIHJvdXRlZCBERUYKKwl9CisKK30KKworcHJvYyBydW5fcG93ZXJfcGluc19pbnNlcnRpb25fc3RlcCB7YXJnc30geworICAgICMgc2V0X2RlZiAkOjplbnYodHJpdG9uUm91dGVfcmVzdWx0X2ZpbGVfdGFnKS5kZWYKKyAgICBpZiB7ICEgWyBpbmZvIGV4aXN0cyA6OmVudihQT1dFUl9QSU5TX0lOU0VSVElPTl9DVVJSRU5UX0RFRikgXSB9IHsKKyAgICAgICAgc2V0IDo6ZW52KFBPV0VSX1BJTlNfSU5TRVJUSU9OX0NVUlJFTlRfREVGKSAkOjplbnYoQ1VSUkVOVF9ERUYpCisgICAgfSBlbHNlIHsKKyAgICAgICAgc2V0IDo6ZW52KENVUlJFTlRfREVGKSAkOjplbnYoUE9XRVJfUElOU19JTlNFUlRJT05fQ1VSUkVOVF9ERUYpCisgICAgfQorICAgIGlmIHsgJDo6ZW52KExWU19JTlNFUlRfUE9XRVJfUElOUykgfSB7CisJCXdyaXRlX3Bvd2VyZWRfdmVyaWxvZworCQlzZXRfbmV0bGlzdCAkOjplbnYobHZzX3Jlc3VsdF9maWxlX3RhZykucG93ZXJlZC52CisgICAgfQorCit9CisKK3Byb2MgcnVuX2x2c19zdGVwIHt7IGx2c19lbmFibGVkIDEgfX0geworICAgICMgc2V0X2RlZiAkOjplbnYodHJpdG9uUm91dGVfcmVzdWx0X2ZpbGVfdGFnKS5kZWYKKyAgICBpZiB7ICEgWyBpbmZvIGV4aXN0cyA6OmVudihMVlNfQ1VSUkVOVF9ERUYpIF0gfSB7CisgICAgICAgIHNldCA6OmVudihMVlNfQ1VSUkVOVF9ERUYpICQ6OmVudihDVVJSRU5UX0RFRikKKyAgICB9IGVsc2UgeworICAgICAgICBzZXQgOjplbnYoQ1VSUkVOVF9ERUYpICQ6OmVudihMVlNfQ1VSUkVOVF9ERUYpCisgICAgfQorCWlmIHsgJGx2c19lbmFibGVkIH0geworCQlydW5fbWFnaWNfc3BpY2VfZXhwb3J0CisJCXJ1bl9sdnM7ICMgcmVxdWlyZXMgcnVuX21hZ2ljX3NwaWNlX2V4cG9ydAorCX0KKworfQorCitwcm9jIHJ1bl9kcmNfc3RlcCB7eyBkcmNfZW5hYmxlZCAxIH19IHsKKyAgICBpZiB7ICEgWyBpbmZvIGV4aXN0cyA6OmVudihEUkNfQ1VSUkVOVF9ERUYpIF0gfSB7CisgICAgICAgIHNldCA6OmVudihEUkNfQ1VSUkVOVF9ERUYpICQ6OmVudihDVVJSRU5UX0RFRikKKyAgICB9IGVsc2UgeworICAgICAgICBzZXQgOjplbnYoQ1VSUkVOVF9ERUYpICQ6OmVudihEUkNfQ1VSUkVOVF9ERUYpCisgICAgfQorCWlmIHsgJGRyY19lbmFibGVkIH0geworCQlydW5fbWFnaWNfZHJjCisJCXJ1bl9rbGF5b3V0X2RyYworCX0KK30KKworcHJvYyBydW5fYW50ZW5uYV9jaGVja19zdGVwIHt7IGFudGVubmFfY2hlY2tfZW5hYmxlZCAxIH19IHsKKyAgICBpZiB7ICEgWyBpbmZvIGV4aXN0cyA6OmVudihBTlRFTk5BX0NIRUNLX0NVUlJFTlRfREVGKSBdIH0geworICAgICAgICBzZXQgOjplbnYoQU5URU5OQV9DSEVDS19DVVJSRU5UX0RFRikgJDo6ZW52KENVUlJFTlRfREVGKQorICAgIH0gZWxzZSB7CisgICAgICAgIHNldCA6OmVudihDVVJSRU5UX0RFRikgJDo6ZW52KEFOVEVOTkFfQ0hFQ0tfQ1VSUkVOVF9ERUYpCisgICAgfQorCWlmIHsgJGFudGVubmFfY2hlY2tfZW5hYmxlZCB9IHsKKwkJcnVuX2FudGVubmFfY2hlY2sKKwl9Cit9CisKK3Byb2MgcnVuX2Zsb3cge2FyZ3N9IHsKKyAgICAgICBzZXQgc2NyaXB0X2RpciBbZmlsZSBkaXJuYW1lIFtmaWxlIG5vcm1hbGl6ZSBbaW5mbyBzY3JpcHRdXV0KKworCQlzZXQgb3B0aW9ucyB7CisJCXstZGVzaWduIHJlcXVpcmVkfQorCQl7LXNhdmVfcGF0aCBvcHRpb25hbH0KKwkJey1ub19sdnMgb3B0aW9uYWx9CisJICAgIHstbm9fZHJjIG9wdGlvbmFsfQorCSAgICB7LW5vX2FudGVubmFjaGVjayBvcHRpb25hbH0KKwl9CisJc2V0IGZsYWdzIHstc2F2ZX0KKwlwYXJzZV9rZXlfYXJncyAicnVuX2Zsb3ciIGFyZ3MgYXJnX3ZhbHVlcyAkb3B0aW9ucyBmbGFnc19tYXAgJGZsYWdzIC1ub19jb25zdW1lCisKKwlwcmVwIHsqfSRhcmdzCisKKyAgICAgICAgc2V0IExWU19FTkFCTEVEIDEKKyAgICAgICAgc2V0IERSQ19FTkFCTEVEIDEKKyAgICAgICAgc2V0IEFOVEVOTkFDSEVDS19FTkFCTEVEIDEKKworICAgICAgICBzZXQgc3RlcHMgW2RpY3QgY3JlYXRlICJzeW50aGVzaXMiIHtydW5fc3ludGhlc2lzICIiIH0gXAorICAgICAgICAgICAgICAgICJmbG9vcnBsYW4iIHtydW5fZmxvb3JwbGFuICIifSBcCisgICAgICAgICAgICAgICAgInBsYWNlbWVudCIge3J1bl9wbGFjZW1lbnRfc3RlcCAiIn0gXAorICAgICAgICAgICAgICAgICJjdHMiIHtydW5fY3RzX3N0ZXAgIiJ9IFwKKyAgICAgICAgICAgICAgICAicm91dGluZyIge3J1bl9yb3V0aW5nX3N0ZXAgIiJ9XAorICAgICAgICAgICAgICAgICJkaW9kZV9pbnNlcnRpb24iIHtydW5fZGlvZGVfaW5zZXJ0aW9uXzJfNV9zdGVwICIifSBcCisgICAgICAgICAgICAgICAgInBvd2VyX3BpbnNfaW5zZXJ0aW9uIiB7cnVuX3Bvd2VyX3BpbnNfaW5zZXJ0aW9uX3N0ZXAgIiJ9IFwKKyAgICAgICAgICAgICAgICAiZ2RzX21hZ2ljIiB7cnVuX21hZ2ljICIifSBcCisgICAgICAgICAgICAgICAgImdkc19kcmNfa2xheW91dCIge3J1bl9rbGF5b3V0ICIifSBcCisgICAgICAgICAgICAgICAgImdkc194b3Jfa2xheW91dCIge3J1bl9rbGF5b3V0X2dkc194b3IgIiJ9IFwKKyAgICAgICAgICAgICAgICAibHZzIiAicnVuX2x2c19zdGVwICRMVlNfRU5BQkxFRCIgXAorICAgICAgICAgICAgICAgICJkcmMiICJydW5fZHJjX3N0ZXAgJERSQ19FTkFCTEVEIiBcCisgICAgICAgICAgICAgICAgImFudGVubmFfY2hlY2siICJydW5fYW50ZW5uYV9jaGVja19zdGVwICRBTlRFTk5BQ0hFQ0tfRU5BQkxFRCIgXAorICAgICAgICAgICAgICAgICJjdmMiIHtydW5fbGVmX2N2Y30KKyAgICAgICAgXQorCisgICAgICAgc2V0X2lmX3Vuc2V0IGFyZ192YWx1ZXMoLXRvKSAiY3ZjIjsKKworICAgICAgIGlmIHsgIFtpbmZvIGV4aXN0cyA6OmVudihDVVJSRU5UX1NURVApIF0gfSB7CisgICAgICAgICAgIHB1dHMgIlxbSU5GT1xdOlBpY2tpbmcgdXAgd2hlcmUgbGFzdCBleGVjdXRpb24gbGVmdCBvZmYiCisgICAgICAgICAgIHB1dHMgW2Zvcm1hdCAiXFtJTkZPXF06Q3VycmVudCBzdGFnZSBpcyAlcyAiICQ6OmVudihDVVJSRU5UX1NURVApXQorICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgIHNldCA6OmVudihDVVJSRU5UX1NURVApICJzeW50aGVzaXMiOworICAgICAgIH0KKyAgICAgICBzZXRfaWZfdW5zZXQgYXJnX3ZhbHVlcygtZnJvbSkgJDo6ZW52KENVUlJFTlRfU1RFUCk7CisgICAgICAgc2V0IGV4ZSAwOworICAgICAgIGRpY3QgZm9yIHtzdGVwX25hbWUgc3RlcF9leGV9ICRzdGVwcyB7CisgICAgICAgICAgIGlmIHsgWyBzdHJpbmcgZXF1YWwgJGFyZ192YWx1ZXMoLWZyb20pICRzdGVwX25hbWUgXSB9IHsKKyAgICAgICAgICAgICAgIHNldCBleGUgMTsKKyAgICAgICAgICAgfQorCisgICAgICAgICAgIGlmIHsgJGV4ZSB9IHsKKyAgICAgICAgICAgICAgICMgRm9yIHdoZW4gaXQgZmFpbHMKKyAgICAgICAgICAgICAgIHNldCA6OmVudihDVVJSRU5UX1NURVApICRzdGVwX25hbWUKKyAgICAgICAgICAgICAgIFtsaW5kZXggJHN0ZXBfZXhlIDBdIFtsaW5kZXggJHN0ZXBfZXhlIDFdIDsKKyAgICAgICAgICAgfQorCisgICAgICAgICAgIGlmIHsgWyBzdHJpbmcgZXF1YWwgJGFyZ192YWx1ZXMoLXRvKSAkc3RlcF9uYW1lIF0gfSB7CisgICAgICAgICAgICAgICBzZXQgZXhlIDA6CisgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgfQorCisgICAgICAgfQorCisgICAgICAgIyBmb3Igd2hlbiBpdCByZXN1bWVzCisgICAgICAgc2V0IHN0ZXBzX2FzX2xpc3QgW2RpY3Qga2V5cyAkc3RlcHNdCisgICAgICAgc2V0IG5leHRfaWR4IFtleHByIFtsc2VhcmNoICRzdGVwc19hc19saXN0ICQ6OmVudihDVVJSRU5UX1NURVApXSArIDFdCisgICAgICAgc2V0IDo6ZW52KENVUlJFTlRfU1RFUCkgW2xpbmRleCAkc3RlcHNfYXNfbGlzdCAkbmV4dF9pZHhdCisKKwlpZiB7ICBbaW5mbyBleGlzdHMgZmxhZ3NfbWFwKC1zYXZlKSBdIH0geworCQlpZiB7ICEgW2luZm8gZXhpc3RzIGFyZ192YWx1ZXMoLXNhdmVfcGF0aCldIH0geworCQkJc2V0IGFyZ192YWx1ZXMoLXNhdmVfcGF0aCkgIiIKKwkJfQorCQlzYXZlX3ZpZXdzIAktbGVmX3BhdGggJDo6ZW52KG1hZ2ljX3Jlc3VsdF9maWxlX3RhZykubGVmIFwKKwkJCS1kZWZfcGF0aCAkOjplbnYoQ1VSUkVOVF9ERUYpIFwKKwkJCS1nZHNfcGF0aCAkOjplbnYobWFnaWNfcmVzdWx0X2ZpbGVfdGFnKS5nZHMgXAorCQkJLW1hZ19wYXRoICQ6OmVudihtYWdpY19yZXN1bHRfZmlsZV90YWcpLm1hZyBcCisJCQktbWFnbGVmX3BhdGggJDo6ZW52KG1hZ2ljX3Jlc3VsdF9maWxlX3RhZykubGVmLm1hZyBcCisJCQktc3BpY2VfcGF0aCAkOjplbnYobWFnaWNfcmVzdWx0X2ZpbGVfdGFnKS5zcGljZSBcCisJCQktc3BlZl9wYXRoICQ6OmVudihDVVJSRU5UX1NQRUYpIFwKKwkJCS12ZXJpbG9nX3BhdGggJDo6ZW52KENVUlJFTlRfTkVUTElTVCkgXAorCQkJLXNhdmVfcGF0aCAkYXJnX3ZhbHVlcygtc2F2ZV9wYXRoKSBcCisJCQktdGFnICQ6OmVudihSVU5fVEFHKQorCX0KKworCisJY2FsY190b3RhbF9ydW50aW1lCisJc2F2ZV9zdGF0ZQorCWdlbmVyYXRlX2ZpbmFsX3N1bW1hcnlfcmVwb3J0CisJCisJY2hlY2tfdGltaW5nX3Zpb2xhdGlvbnMKKworCXB1dHNfc3VjY2VzcyAiRmxvdyBDb21wbGV0ZWQgV2l0aG91dCBGYXRhbCBFcnJvcnMuIgorCit9CisKK3J1bl9mbG93IHsqfSRhcmd2CmRpZmYgLS1naXQgYS9vcGVubGFuZS93Yl9ob3N0L3Bpbl9vcmRlci5jZmcgYi9vcGVubGFuZS93Yl9ob3N0L3Bpbl9vcmRlci5jZmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI5ZjI0YgotLS0gL2Rldi9udWxsCisrKyBiL29wZW5sYW5lL3diX2hvc3QvcGluX29yZGVyLmNmZwpAQCAtMCwwICsxLDM0MSBAQAorI0JVU19TT1JUCisKKyNNQU5VQUxfUExBQ0UKKworCisjVworc3NwaW1fcnN0X24gICAgICAwMDAwIDAgNAorcXNwaW1fcnN0X24KK3VhcnRfcnN0X24KK2kyY21fcnN0X24KK3VzYl9yc3RfbgorYmlzdF9yc3RfbgordXNiX2NsaworY2ZnX2Nsa19jdHJsMVxbMzFcXQorY2ZnX2Nsa19jdHJsMVxbMzBcXQorY2ZnX2Nsa19jdHJsMVxbMjlcXQorY2ZnX2Nsa19jdHJsMVxbMjhcXQorY2ZnX2Nsa19jdHJsMlxbMjdcXQorY2ZnX2Nsa19jdHJsMlxbMjZcXQorY2ZnX2Nsa19jdHJsMlxbMjVcXQorY2ZnX2Nsa19jdHJsMlxbMjRcXQorY2ZnX2Nsa19jdHJsMlxbMjNcXQorY2ZnX2Nsa19jdHJsMlxbMjJcXQorY2ZnX2Nsa19jdHJsMlxbMjFcXQorY2ZnX2Nsa19jdHJsMlxbMjBcXQorY2ZnX2Nsa19jdHJsMlxbMTlcXQorY2ZnX2Nsa19jdHJsMlxbMThcXQorY2ZnX2Nsa19jdHJsMlxbMTdcXQorY2ZnX2Nsa19jdHJsMlxbMTZcXQorCitjcHVfY2xrICAgICAgICAgICAgICAgMDEwMCAwIDIKK3J0Y19jbGsKK2NwdV9yc3RfbgorCisKKworI1MKK3VzZXJfY2xvY2syICAgICAgICAgMDAwMCAwICAyCit1c2VyX2Nsb2NrMSAgICAgCit3Ym1fY2xrX2kgICAgICAgCit3Ym1fcnN0X2kgICAgICAgCit3Ym1fYWNrX28gICAgICAgCit3Ym1fY3ljX2kgICAgICAgCit3Ym1fc3RiX2kgICAgICAgCit3Ym1fd2VfaSAgICAgICAgCit3Ym1fYWRyX2lcWzBcXSAgCit3Ym1fZGF0X2lcWzBcXSAgCit3Ym1fZGF0X29cWzBcXSAgCit3Ym1fc2VsX2lcWzBcXSAgCit3Ym1fYWRyX2lcWzFcXSAgCit3Ym1fZGF0X2lcWzFcXSAgCit3Ym1fZGF0X29cWzFcXSAgCit3Ym1fc2VsX2lcWzFcXSAgCit3Ym1fYWRyX2lcWzJcXSAgCit3Ym1fZGF0X2lcWzJcXSAgCit3Ym1fZGF0X29cWzJcXSAgCit3Ym1fc2VsX2lcWzJcXSAgCit3Ym1fYWRyX2lcWzNcXSAgCit3Ym1fZGF0X2lcWzNcXSAgCit3Ym1fZGF0X29cWzNcXSAgCit3Ym1fc2VsX2lcWzNcXSAgCit3Ym1fYWRyX2lcWzRcXSAgCit3Ym1fZGF0X2lcWzRcXSAgCit3Ym1fZGF0X29cWzRcXSAgCit3Ym1fYWRyX2lcWzVcXSAgCit3Ym1fZGF0X2lcWzVcXSAgCit3Ym1fZGF0X29cWzVcXSAgCit3Ym1fYWRyX2lcWzZcXSAgCit3Ym1fZGF0X2lcWzZcXSAgCit3Ym1fZGF0X29cWzZcXSAgCit3Ym1fYWRyX2lcWzdcXSAgCit3Ym1fZGF0X2lcWzdcXSAgCit3Ym1fZGF0X29cWzdcXSAgCit3Ym1fYWRyX2lcWzhcXSAgCit3Ym1fZGF0X2lcWzhcXSAgCit3Ym1fZGF0X29cWzhcXSAgCit3Ym1fYWRyX2lcWzlcXSAgCit3Ym1fZGF0X2lcWzlcXSAgCit3Ym1fZGF0X29cWzlcXSAgCit3Ym1fYWRyX2lcWzEwXF0gCit3Ym1fZGF0X2lcWzEwXF0gCit3Ym1fZGF0X29cWzEwXF0gCit3Ym1fYWRyX2lcWzExXF0gCit3Ym1fZGF0X2lcWzExXF0gCit3Ym1fZGF0X29cWzExXF0gCit3Ym1fYWRyX2lcWzEyXF0gCit3Ym1fZGF0X2lcWzEyXF0gCit3Ym1fZGF0X29cWzEyXF0gCit3Ym1fYWRyX2lcWzEzXF0gCit3Ym1fZGF0X2lcWzEzXF0gCit3Ym1fZGF0X29cWzEzXF0gCit3Ym1fYWRyX2lcWzE0XF0gCit3Ym1fZGF0X2lcWzE0XF0gCit3Ym1fZGF0X29cWzE0XF0gCit3Ym1fYWRyX2lcWzE1XF0gCit3Ym1fZGF0X2lcWzE1XF0gCit3Ym1fZGF0X29cWzE1XF0gCit3Ym1fYWRyX2lcWzE2XF0gCit3Ym1fZGF0X2lcWzE2XF0gCit3Ym1fZGF0X29cWzE2XF0gCit3Ym1fYWRyX2lcWzE3XF0gCisKK3dibV9kYXRfaVxbMTdcXSAKK3dibV9kYXRfb1xbMTdcXSAKK3dibV9hZHJfaVxbMThcXSAKK3dibV9kYXRfaVxbMThcXSAKK3dibV9kYXRfb1xbMThcXSAKK3dibV9hZHJfaVxbMTlcXSAKK3dibV9kYXRfaVxbMTlcXSAKK3dibV9kYXRfb1xbMTlcXSAKK3dibV9hZHJfaVxbMjBcXSAKK3dibV9kYXRfaVxbMjBcXSAKK3dibV9kYXRfb1xbMjBcXSAKK3dibV9hZHJfaVxbMjFcXSAKK3dibV9kYXRfaVxbMjFcXSAKK3dibV9kYXRfb1xbMjFcXSAgCit3Ym1fYWRyX2lcWzIyXF0gIAord2JtX2RhdF9pXFsyMlxdICAKK3dibV9kYXRfb1xbMjJcXSAgCit3Ym1fYWRyX2lcWzIzXF0gIAord2JtX2RhdF9pXFsyM1xdICAKK3dibV9kYXRfb1xbMjNcXSAgCit3Ym1fYWRyX2lcWzI0XF0gIAord2JtX2RhdF9pXFsyNFxdICAKK3dibV9kYXRfb1xbMjRcXSAgCit3Ym1fYWRyX2lcWzI1XF0gIAord2JtX2RhdF9pXFsyNVxdICAKK3dibV9kYXRfb1xbMjVcXSAgCit3Ym1fYWRyX2lcWzI2XF0gIAord2JtX2RhdF9pXFsyNlxdICAKK3dibV9kYXRfb1xbMjZcXSAgCit3Ym1fYWRyX2lcWzI3XF0gIAord2JtX2RhdF9pXFsyN1xdICAKK3dibV9kYXRfb1xbMjdcXSAgCit3Ym1fYWRyX2lcWzI4XF0gIAord2JtX2RhdF9pXFsyOFxdICAKK3dibV9kYXRfb1xbMjhcXSAgCit3Ym1fYWRyX2lcWzI5XF0gIAord2JtX2RhdF9pXFsyOVxdICAKK3dibV9kYXRfb1xbMjlcXSAgCit3Ym1fYWRyX2lcWzMwXF0gIAord2JtX2RhdF9pXFszMFxdICAKK3dibV9kYXRfb1xbMzBcXSAgCit3Ym1fYWRyX2lcWzMxXF0gIAord2JtX2RhdF9pXFszMVxdICAKK3dibV9kYXRfb1xbMzFcXSAgCit3Ym1fZXJyX28gICAgICAgIAorCitsYV9kYXRhX2luXFswXF0gICAgMzAwIDAgMgorbGFfZGF0YV9pblxbMVxdICAgIAorbGFfZGF0YV9pblxbMlxdICAgIAorbGFfZGF0YV9pblxbM1xdICAgIAorbGFfZGF0YV9pblxbNFxdICAgIAorbGFfZGF0YV9pblxbNVxdICAgIAorbGFfZGF0YV9pblxbNlxdICAgIAorbGFfZGF0YV9pblxbN1xdICAgIAorbGFfZGF0YV9pblxbOFxdICAgIAorbGFfZGF0YV9pblxbOVxdICAgIAorbGFfZGF0YV9pblxbMTBcXSAgICAKK2xhX2RhdGFfaW5cWzExXF0gICAgCitsYV9kYXRhX2luXFsxMlxdICAgIAorbGFfZGF0YV9pblxbMTNcXSAgICAKK2xhX2RhdGFfaW5cWzE0XF0gICAgCitsYV9kYXRhX2luXFsxNVxdICAgIAorbGFfZGF0YV9pblxbMTZcXSAgICAKK2xhX2RhdGFfaW5cWzE3XF0gICAgCisKKyNFCisKK3VhcnRtX3J4ZCAgICAgICAgICAgMTAwIDAgMgordWFydG1fdHhkCisKKworI04KK3diZF9pbnRfcnN0X24gICAgICAgICAwNDAwIDAgMgorY2ZnX2Nsa19jdHJsMlxbMzFcXQorY2ZnX2Nsa19jdHJsMlxbMzBcXQorY2ZnX2Nsa19jdHJsMlxbMjlcXQorY2ZnX2Nsa19jdHJsMlxbMjhcXQorY2ZnX2Nsa19jdHJsMlxbMTVcXQorY2ZnX2Nsa19jdHJsMlxbMTRcXQorY2ZnX2Nsa19jdHJsMlxbMTNcXQorY2ZnX2Nsa19jdHJsMlxbMTJcXQorY2ZnX2Nsa19jdHJsMlxbMTFcXQorY2ZnX2Nsa19jdHJsMlxbMTBcXQorY2ZnX2Nsa19jdHJsMlxbOVxdCitjZmdfY2xrX2N0cmwyXFs4XF0KK2NmZ19jbGtfY3RybDJcWzdcXQorY2ZnX2Nsa19jdHJsMlxbNlxdCitjZmdfY2xrX2N0cmwyXFs1XF0KK2NmZ19jbGtfY3RybDJcWzRcXQorY2ZnX2Nsa19jdHJsMlxbM1xdCitjZmdfY2xrX2N0cmwyXFsyXF0KK2NmZ19jbGtfY3RybDJcWzFcXQorY2ZnX2Nsa19jdHJsMlxbMFxdCitjZmdfY2xrX2N0cmwxXFsyN1xdCitjZmdfY2xrX2N0cmwxXFsyNlxdCitjZmdfY2xrX2N0cmwxXFsyNVxdCitjZmdfY2xrX2N0cmwxXFsyNFxdCitjZmdfY2xrX2N0cmwxXFsyM1xdCitjZmdfY2xrX2N0cmwxXFsyMlxdCitjZmdfY2xrX2N0cmwxXFsyMVxdCitjZmdfY2xrX2N0cmwxXFsyMFxdCitjZmdfY2xrX2N0cmwxXFsxOVxdCitjZmdfY2xrX2N0cmwxXFsxOFxdCitjZmdfY2xrX2N0cmwxXFsxN1xdCitjZmdfY2xrX2N0cmwxXFsxNlxdCitjZmdfY2xrX2N0cmwxXFsxNVxdCitjZmdfY2xrX2N0cmwxXFsxNFxdCitjZmdfY2xrX2N0cmwxXFsxM1xdCitjZmdfY2xrX2N0cmwxXFsxMlxdCitjZmdfY2xrX2N0cmwxXFsxMVxdCitjZmdfY2xrX2N0cmwxXFsxMFxdCitjZmdfY2xrX2N0cmwxXFs5XF0KK2NmZ19jbGtfY3RybDFcWzhcXQorY2ZnX2Nsa19jdHJsMVxbM1xdCitjZmdfY2xrX2N0cmwxXFsyXF0KK2NmZ19jbGtfY3RybDFcWzFcXQorY2ZnX2Nsa19jdHJsMVxbMFxdCit3YmRfY2xrX2ludAord2JzX2Nsa19vdXQgICAKK3dic19jbGtfaSAgICAgICAgICAgIAord2JkX2Nsa193aAorY2ZnX2Nsa19jdHJsMVxbN1xdCitjZmdfY3NrYV93aFxbM1xdCitjZmdfY2xrX2N0cmwxXFs2XF0KK2NmZ19jc2thX3doXFsyXF0KK2NmZ19jbGtfY3RybDFcWzVcXQorY2ZnX2Nza2Ffd2hcWzFcXQorY2ZnX2Nsa19jdHJsMVxbNFxdCitjZmdfY3NrYV93aFxbMFxdCisKKworCit3YnNfc3RiX28gICAgICAgNDYwIDAgMiAKK3dic193ZV9vICAgICAgICAgCit3YnNfYWRyX29cWzMxXF0gIAord2JzX2Fkcl9vXFszMFxdICAKK3dic19hZHJfb1xbMjlcXSAgCit3YnNfYWRyX29cWzI4XF0gIAord2JzX2Fkcl9vXFsyN1xdICAKK3dic19hZHJfb1xbMjZcXSAgCit3YnNfYWRyX29cWzI1XF0gIAord2JzX2Fkcl9vXFsyNFxdICAKK3dic19hZHJfb1xbMjNcXSAgCit3YnNfYWRyX29cWzIyXF0gIAord2JzX2Fkcl9vXFsyMVxdICAKK3dic19hZHJfb1xbMjBcXSAgCit3YnNfYWRyX29cWzE5XF0gIAord2JzX2Fkcl9vXFsxOFxdICAKK3dic19hZHJfb1xbMTdcXSAgCit3YnNfYWRyX29cWzE2XF0gIAord2JzX2Fkcl9vXFsxNVxdICAKK3dic19hZHJfb1xbMTRcXSAgCit3YnNfYWRyX29cWzEzXF0gIAord2JzX2Fkcl9vXFsxMlxdICAKK3dic19hZHJfb1xbMTFcXSAgCit3YnNfYWRyX29cWzEwXF0gIAord2JzX2Fkcl9vXFs5XF0gICAKK3dic19hZHJfb1xbOFxdICAgCit3YnNfYWRyX29cWzdcXSAgIAord2JzX2Fkcl9vXFs2XF0gICAKK3dic19hZHJfb1xbNVxdICAgCit3YnNfYWRyX29cWzRcXSAgIAord2JzX2Fkcl9vXFszXF0gICAKK3dic19hZHJfb1xbMlxdICAgCit3YnNfYWRyX29cWzFcXSAgIAord2JzX2Fkcl9vXFswXF0gICAKK3dic19zZWxfb1xbM1xdICAgCit3YnNfc2VsX29cWzJcXSAgIAord2JzX3NlbF9vXFsxXF0gICAKK3dic19zZWxfb1xbMFxdICAgCit3YnNfZGF0X29cWzMxXF0gIAord2JzX2RhdF9vXFszMFxdICAKK3dic19kYXRfb1xbMjlcXSAgCit3YnNfZGF0X29cWzI4XF0gIAord2JzX2RhdF9vXFsyN1xdICAKK3dic19kYXRfb1xbMjZcXSAgCit3YnNfZGF0X29cWzI1XF0gIAord2JzX2RhdF9vXFsyNFxdICAKK3dic19kYXRfb1xbMjNcXSAgCit3YnNfZGF0X29cWzIyXF0gIAord2JzX2RhdF9vXFsyMVxdICAKK3dic19kYXRfb1xbMjBcXSAgCit3YnNfZGF0X29cWzE5XF0gIAord2JzX2RhdF9vXFsxOFxdICAKK3dic19kYXRfb1xbMTdcXSAgCit3YnNfZGF0X29cWzE2XF0gIAord2JzX2RhdF9vXFsxNVxdICAKK3dic19kYXRfb1xbMTRcXSAgCit3YnNfZGF0X29cWzEzXF0gIAord2JzX2RhdF9vXFsxMlxdICAKK3dic19kYXRfb1xbMTFcXSAgCit3YnNfZGF0X29cWzEwXF0gIAord2JzX2RhdF9vXFs5XF0gICAKK3dic19kYXRfb1xbOFxdICAgCit3YnNfZGF0X29cWzdcXSAgIAord2JzX2RhdF9vXFs2XF0gICAKK3dic19kYXRfb1xbNVxdICAgCit3YnNfZGF0X29cWzRcXSAgIAord2JzX2RhdF9vXFszXF0gICAKK3dic19kYXRfb1xbMlxdICAgCit3YnNfZGF0X29cWzFcXSAgIAord2JzX2RhdF9vXFswXF0gICAKK3dic19kYXRfaVxbMzFcXSAgCit3YnNfZGF0X2lcWzMwXF0gIAord2JzX2RhdF9pXFsyOVxdICAKK3dic19kYXRfaVxbMjhcXSAgCit3YnNfZGF0X2lcWzI3XF0gIAord2JzX2RhdF9pXFsyNlxdICAKK3dic19kYXRfaVxbMjVcXSAgCit3YnNfZGF0X2lcWzI0XF0gIAord2JzX2RhdF9pXFsyM1xdICAKK3dic19kYXRfaVxbMjJcXSAgCit3YnNfZGF0X2lcWzIxXF0gIAord2JzX2RhdF9pXFsyMFxdICAKK3dic19kYXRfaVxbMTlcXSAgCit3YnNfZGF0X2lcWzE4XF0gIAord2JzX2RhdF9pXFsxN1xdICAKK3dic19kYXRfaVxbMTZcXSAgCit3YnNfZGF0X2lcWzE1XF0gIAord2JzX2RhdF9pXFsxNFxdICAKK3dic19kYXRfaVxbMTNcXSAgCit3YnNfZGF0X2lcWzEyXF0gIAord2JzX2RhdF9pXFsxMVxdICAKK3dic19kYXRfaVxbMTBcXSAgCit3YnNfZGF0X2lcWzlcXSAgIAord2JzX2RhdF9pXFs4XF0gICAKK3dic19kYXRfaVxbN1xdICAgCit3YnNfZGF0X2lcWzZcXSAgIAord2JzX2RhdF9pXFs1XF0gICAKK3dic19kYXRfaVxbNFxdICAgCit3YnNfZGF0X2lcWzNcXSAgIAord2JzX2RhdF9pXFsyXF0gICAKK3dic19kYXRfaVxbMVxdICAgCit3YnNfZGF0X2lcWzBcXSAgIAord2JzX2Fja19pICAgICAgICAKK3dic19lcnJfaSAgICAgICAgCit3YnNfY3ljX28gICAgICAKKworCmRpZmYgLS1naXQgYS9vcGVubGFuZS93Yl9pbnRlcmNvbm5lY3QvYmFzZS5zZGMgYi9vcGVubGFuZS93Yl9pbnRlcmNvbm5lY3QvYmFzZS5zZGMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDgxNWMwNAotLS0gL2Rldi9udWxsCisrKyBiL29wZW5sYW5lL3diX2ludGVyY29ubmVjdC9iYXNlLnNkYwpAQCAtMCwwICsxLDE0MiBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDcmVhdGVkIGJ5IHdyaXRlX3NkYworIyBGcmkgTm92IDEyIDA1OjAwOjA1IDIwMjEKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2N1cnJlbnRfZGVzaWduIHdiX2ludGVyY29ubmVjdAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUaW1pbmcgQ29uc3RyYWludHMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2NyZWF0ZV9jbG9jayAtbmFtZSBjbGtfaSAtcGVyaW9kIDEwLjAwMDAgW2dldF9wb3J0cyB7Y2xrX2l9XQorCitzZXRfY2xvY2tfdHJhbnNpdGlvbiAwLjE1MDAgW2FsbF9jbG9ja3NdCitzZXRfY2xvY2tfdW5jZXJ0YWludHkgLXNldHVwIDAuMjUwMCBbYWxsX2Nsb2Nrc10KK3NldF9jbG9ja191bmNlcnRhaW50eSAtaG9sZCAwLjI1MDAgW2FsbF9jbG9ja3NdCisKKyNDbG9jayBTa2V3IGFkanVzdG1lbnQKK3NldF9jYXNlX2FuYWx5c2lzIDAgW2dldF9wb3J0cyB7Y2ZnX2Nza2Ffd2lbMF19XQorc2V0X2Nhc2VfYW5hbHlzaXMgMCBbZ2V0X3BvcnRzIHtjZmdfY3NrYV93aVsxXX1dCitzZXRfY2FzZV9hbmFseXNpcyAwIFtnZXRfcG9ydHMge2NmZ19jc2thX3dpWzJdfV0KK3NldF9jYXNlX2FuYWx5c2lzIDAgW2dldF9wb3J0cyB7Y2ZnX2Nza2Ffd2lbM119XQorCisKKyMgU2V0IG1heCBkZWxheSBmb3IgY2xvY2sgc2tldworc2V0X21heF9kZWxheSA0LjAgLWZyb20gW2dldF9wb3J0cyB7d2JkX2Nsa19pbnR9XQorc2V0X21heF9kZWxheSAgIDIgLXRvICAgW2dldF9wb3J0cyB7d2JkX2Nsa193aX1dCitzZXRfbWF4X2RlbGF5IDQuMCAtZnJvbSB3YmRfY2xrX2ludCAtdG8gd2JkX2Nsa193aQorIyMKK3NldF9pbnB1dF9kZWxheSAtbWF4IDIuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtyc3Rfbn1dCisKK3NldF9pbnB1dF9kZWxheSAtbWF4IDQuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHttMF93YmRfYWRyX2lbKl19XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNC4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7Y2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge20wX3diZF9kYXRfaVsqXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA0LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHtjbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7bTFfd2JkX2Fkcl9pWypdfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDQuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHttMl93YmRfYWRyX2lbKl19XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNC4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7Y2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3MwX3diZF9hY2tfaX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA0LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHtjbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7czBfd2JkX2RhdF9pWypdfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDQuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtzMV93YmRfYWNrX2l9XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNC4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7Y2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3MxX3diZF9kYXRfaVsqXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA0LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHtjbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7czJfd2JkX2Fja19pfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDQuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtzMl93YmRfZGF0X2lbKl19XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNC4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7Y2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3MzX3diZF9hY2tfaX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA0LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHtjbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7czNfd2JkX2RhdF9pWypdfV0KKworc2V0X2lucHV0X2RlbGF5IC1taW4gMi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7Y2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge20wX3diZF9hZHJfaVsqXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAyLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHtjbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7bTBfd2JkX2RhdF9pWypdfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDIuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHttMF93YmRfc2VsX2lbKl19XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7Y2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge20xX3diZF9hZHJfaVsqXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAyLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHtjbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7bTFfd2JkX2RhdF9pWypdfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDIuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHttMV93YmRfc2VsX2lbKl19XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7Y2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge20yX3diZF9hZHJfaVsqXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAyLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHtjbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7bTJfd2JkX2RhdF9pWypdfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDIuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHttMl93YmRfc2VsX2lbKl19XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7Y2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3MwX3diZF9hY2tfaX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAyLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHtjbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7czBfd2JkX2RhdF9pWypdfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDIuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtzMV93YmRfYWNrX2l9XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7Y2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3MxX3diZF9kYXRfaVsqXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAyLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHtjbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7czJfd2JkX2Fja19pfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDIuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtzMl93YmRfZGF0X2lbKl19XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7Y2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3MzX3diZF9hY2tfaX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAyLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHtjbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7czNfd2JkX2RhdF9pWypdfV0KKworc2V0X291dHB1dF9kZWxheSAtbWF4IDQuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHttMF93YmRfYWNrX299XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDQuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHttMF93YmRfZGF0X29bKl19XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDQuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHttMF93YmRfZXJyX299XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDQuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHttMV93YmRfYWNrX299XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDQuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHttMV93YmRfZGF0X29bKl19XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDQuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHttMV93YmRfZXJyX299XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDQuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHttMl93YmRfYWNrX299XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDQuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHttMl93YmRfZGF0X29bKl19XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDQuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHttMl93YmRfZXJyX299XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDQuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtzMF93YmRfYWRyX29bKl19XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDQuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtzMF93YmRfY3ljX299XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDQuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtzMF93YmRfZGF0X29bKl19XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDQuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtzMF93YmRfc2VsX29bKl19XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDQuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtzMF93YmRfc3RiX299XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDQuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtzMF93YmRfd2Vfb31dCitzZXRfb3V0cHV0X2RlbGF5IC1tYXggNC4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7Y2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3MxX3diZF9hZHJfb1sqXX1dCitzZXRfb3V0cHV0X2RlbGF5IC1tYXggNC4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7Y2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3MxX3diZF9jeWNfb31dCitzZXRfb3V0cHV0X2RlbGF5IC1tYXggNC4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7Y2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3MxX3diZF9kYXRfb1sqXX1dCitzZXRfb3V0cHV0X2RlbGF5IC1tYXggNC4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7Y2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3MxX3diZF9zZWxfb1sqXX1dCitzZXRfb3V0cHV0X2RlbGF5IC1tYXggNC4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7Y2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3MxX3diZF9zdGJfb31dCitzZXRfb3V0cHV0X2RlbGF5IC1tYXggNC4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7Y2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3MxX3diZF93ZV9vfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1heCA0LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHtjbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7czJfd2JkX2Fkcl9vWypdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1heCA0LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHtjbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7czJfd2JkX2N5Y19vfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1heCA0LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHtjbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7czJfd2JkX2RhdF9vWypdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1heCA0LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHtjbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7czJfd2JkX3NlbF9vWypdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1heCA0LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHtjbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7czJfd2JkX3N0Yl9vfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1heCA0LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHtjbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7czJfd2JkX3dlX299XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDQuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtzM193YmRfYWRyX29bKl19XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDQuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtzM193YmRfY3ljX299XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDQuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtzM193YmRfZGF0X29bKl19XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDQuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtzM193YmRfc2VsX29bKl19XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDQuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtzM193YmRfc3RiX299XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDQuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtzM193YmRfd2Vfb31dCisKK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAyLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHtjbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7bTBfd2JkX2Fja19vfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAyLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHtjbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7bTBfd2JkX2RhdF9vWypdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAyLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHtjbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7bTBfd2JkX2Vycl9vfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAyLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHtjbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7bTFfd2JkX2Fja19vfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAyLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHtjbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7bTFfd2JkX2RhdF9vWypdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAyLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHtjbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7bTFfd2JkX2Vycl9vfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAyLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHtjbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7bTJfd2JkX2Fja19vfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAyLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHtjbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7bTJfd2JkX2RhdF9vWypdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAyLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHtjbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7bTJfd2JkX2Vycl9vfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAyLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHtjbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7czBfd2JkX2Fkcl9vWypdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAyLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHtjbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7czBfd2JkX2N5Y19vfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAyLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHtjbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7czBfd2JkX2RhdF9vWypdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAyLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHtjbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7czBfd2JkX3NlbF9vWypdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAyLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHtjbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7czBfd2JkX3N0Yl9vfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAyLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHtjbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7czBfd2JkX3dlX299XQorc2V0X291dHB1dF9kZWxheSAtbWluIDIuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtzMV93YmRfYWRyX29bKl19XQorc2V0X291dHB1dF9kZWxheSAtbWluIDIuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtzMV93YmRfY3ljX299XQorc2V0X291dHB1dF9kZWxheSAtbWluIDIuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtzMV93YmRfZGF0X29bKl19XQorc2V0X291dHB1dF9kZWxheSAtbWluIDIuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtzMV93YmRfc2VsX29bKl19XQorc2V0X291dHB1dF9kZWxheSAtbWluIDIuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtzMV93YmRfc3RiX299XQorc2V0X291dHB1dF9kZWxheSAtbWluIDIuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtzMV93YmRfd2Vfb31dCitzZXRfb3V0cHV0X2RlbGF5IC1taW4gMi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7Y2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3MyX3diZF9hZHJfb1sqXX1dCitzZXRfb3V0cHV0X2RlbGF5IC1taW4gMi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7Y2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3MyX3diZF9jeWNfb31dCitzZXRfb3V0cHV0X2RlbGF5IC1taW4gMi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7Y2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3MyX3diZF9kYXRfb1sqXX1dCitzZXRfb3V0cHV0X2RlbGF5IC1taW4gMi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7Y2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3MyX3diZF9zZWxfb1sqXX1dCitzZXRfb3V0cHV0X2RlbGF5IC1taW4gMi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7Y2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3MyX3diZF9zdGJfb31dCitzZXRfb3V0cHV0X2RlbGF5IC1taW4gMi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7Y2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3MyX3diZF93ZV9vfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAyLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHtjbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7czNfd2JkX2Fkcl9vWypdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAyLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHtjbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7czNfd2JkX2N5Y19vfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAyLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHtjbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7czNfd2JkX2RhdF9vWypdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAyLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHtjbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7czNfd2JkX3NlbF9vWypdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAyLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHtjbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7czNfd2JkX3N0Yl9vfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAyLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHtjbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7czNfd2JkX3dlX299XQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEVudmlyb25tZW50CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4gJDo6ZW52KFNZTlRIX0RSSVZJTkdfQ0VMTF9QSU4pIFthbGxfaW5wdXRzXQorc2V0IGNhcF9sb2FkIFtleHByICQ6OmVudihTWU5USF9DQVBfTE9BRCkgLyAxMDAwLjBdCitwdXRzICJcW0lORk9cXTogU2V0dGluZyBsb2FkIHRvOiAkY2FwX2xvYWQiCitzZXRfbG9hZCAgJGNhcF9sb2FkIFthbGxfb3V0cHV0c10KKworc2V0IDo6ZW52KFNZTlRIX1RJTUlOR19ERVJBVEUpIDAuMDUKK3B1dHMgIlxbSU5GT1xdOiBTZXR0aW5nIHRpbWluZyBkZXJhdGUgdG86IFtleHByIHskOjplbnYoU1lOVEhfVElNSU5HX0RFUkFURSkgKiAxMH1dICUiCitzZXRfdGltaW5nX2RlcmF0ZSAtZWFybHkgW2V4cHIgezEtJDo6ZW52KFNZTlRIX1RJTUlOR19ERVJBVEUpfV0KK3NldF90aW1pbmdfZGVyYXRlIC1sYXRlIFtleHByIHsxKyQ6OmVudihTWU5USF9USU1JTkdfREVSQVRFKX1dCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIERlc2lnbiBSdWxlcworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvb3BlbmxhbmUvd2JfaW50ZXJjb25uZWN0L2NvbmZpZy50Y2wgYi9vcGVubGFuZS93Yl9pbnRlcmNvbm5lY3QvY29uZmlnLnRjbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44NWZlMGU1Ci0tLSAvZGV2L251bGwKKysrIGIvb3BlbmxhbmUvd2JfaW50ZXJjb25uZWN0L2NvbmZpZy50Y2wKQEAgLTAsMCArMSwxMzIgQEAKKyMgU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogIDIwMjEgLCBEaW5lc2ggQW5uYXl5YQorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyMgU1BEWC1GaWxlQ29udHJpYnV0b3I6IE1vZGlmaWVkIGJ5IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisKKyMgR2xvYmFsCisjIC0tLS0tLQorCitzZXQgc2NyaXB0X2RpciBbZmlsZSBkaXJuYW1lIFtmaWxlIG5vcm1hbGl6ZSBbaW5mbyBzY3JpcHRdXV0KKyMgTmFtZQorc2V0IDo6ZW52KERFU0lHTl9OQU1FKSB3Yl9pbnRlcmNvbm5lY3QKKworCitzZXQgOjplbnYoREVTSUdOX0lTX0NPUkUpICIwIgorc2V0IDo6ZW52KEZQX1BETl9DT1JFX1JJTkcpICIwIgorCisjIFRpbWluZyBjb25maWd1cmF0aW9uCitzZXQgOjplbnYoQ0xPQ0tfUEVSSU9EKSAiMTAiCitzZXQgOjplbnYoQ0xPQ0tfUE9SVCkgImNsa19pIgorCitzZXQgOjplbnYoU1lOVEhfTUFYX0ZBTk9VVCkgNAorCisjIyBDVFMgQlVGRkVSCitzZXQgOjplbnYoQ1RTX0NMS19CVUZGRVJfTElTVCkgInNreTEzMF9mZF9zY19oZF9fY2xrYnVmXzQgc2t5MTMwX2ZkX3NjX2hkX19jbGtidWZfOCIKK3NldCA6OmVudihDVFNfU0lOS19DTFVTVEVSSU5HX1NJWkUpICIxNiIKK3NldCA6OmVudihDTE9DS19CVUZGRVJfRkFOT1VUKSAiOCIKKworIyBTb3VyY2VzCisjIC0tLS0tLS0KKworIyBMb2NhbCBzb3VyY2VzICsgbm8ydXNiIHNvdXJjZXMKK3NldCA6OmVudihWRVJJTE9HX0ZJTEVTKSAiXAorICAgICAgICAkc2NyaXB0X2Rpci8uLi8uLi92ZXJpbG9nL3J0bC9jbGtfc2tld19hZGp1c3Qvc3JjL2Nsa19za2V3X2FkanVzdC5ndiBcCisgICAgICAgICRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL2xpYi9zeW5jX3diYi5zdiAgICAgICAgICAgICAgICBcCisgICAgICAgICRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL2xpYi9zeW5jX2ZpZm8yLnN2ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwvd2JfaW50ZXJjb25uZWN0L3NyYy93Yl9hcmIuc3YgICAgIFwKKyAgICAgICAgJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwvd2JfaW50ZXJjb25uZWN0L3NyYy93Yl9pbnRlcmNvbm5lY3Quc3YgIFwKKwkiCisKK3NldCA6OmVudihTWU5USF9ERUZJTkVTKSBbbGlzdCBTWU5USEVTSVMgXQorCitzZXQgOjplbnYoU1lOVEhfUEFSQU1TKSAiQ0hfQ0xLX1dEIDgsXAorCSAgICAgICAgICAgICAgICAgQ0hfREFUQV9XRCAxMTYgXAorCQkJICIKKworc2V0IDo6ZW52KFNZTlRIX1JFQURfQkxBQ0tCT1hfTElCKSAxCitzZXQgOjplbnYoU0RDX0ZJTEUpICIkc2NyaXB0X2Rpci9iYXNlLnNkYyIKK3NldCA6OmVudihCQVNFX1NEQ19GSUxFKSAiJHNjcmlwdF9kaXIvYmFzZS5zZGMiCisKK3NldCA6OmVudihMRUNfRU5BQkxFKSAwCisKK3NldCA6OmVudihWRERfUElOKSBbbGlzdCB7dmNjZDF9XQorc2V0IDo6ZW52KEdORF9QSU4pIFtsaXN0IHt2c3NkMX1dCisKKworIyBGbG9vcnBsYW5uaW5nCisjIC0tLS0tLS0tLS0tLS0KKworc2V0IDo6ZW52KEZQX1BJTl9PUkRFUl9DRkcpICQ6OmVudihERVNJR05fRElSKS9waW5fb3JkZXIuY2ZnCisKK3NldCA6OmVudihGUF9TSVpJTkcpIGFic29sdXRlCitzZXQgOjplbnYoRElFX0FSRUEpICIwIDAgMjAwIDIzMDAiCisKKworIyBJZiB5b3UncmUgZ29pbmcgdG8gdXNlIG11bHRpcGxlIHBvd2VyIGRvbWFpbnMsIHRoZW4ga2VlcCB0aGlzIGRpc2FibGVkLgorc2V0IDo6ZW52KFJVTl9DVkMpIDAKKworI3NldCA6OmVudihQRE5fQ0ZHKSAkc2NyaXB0X2Rpci9wZG4udGNsCisKKworc2V0IDo6ZW52KFBMX1RJTUVfRFJJVkVOKSAxCitzZXQgOjplbnYoUExfVEFSR0VUX0RFTlNJVFkpICIwLjMwIgorCisjIGhlbHBzIGluIGFudGVlbmEgZml4CitzZXQgOjplbnYoVVNFX0FSQ19BTlRFTk5BX0NIRUNLKSAiMCIKKworCitzZXQgOjplbnYoR0xCX1JUX01BWF9ESU9ERV9JTlNfSVRFUlMpIDEwCitzZXQgOjplbnYoRElPREVfSU5TRVJUSU9OX1NUUkFURUdZKSA0CisKKyMjIENUUworc2V0IDo6ZW52KENUU19DTEtfQlVGRkVSX0xJU1QpICJza3kxMzBfZmRfc2NfaGRfX2Nsa2J1Zl80IHNreTEzMF9mZF9zY19oZF9fY2xrYnVmXzggc2t5MTMwX2ZkX3NjX2hkX19jbGtidWZfMTYiCitzZXQgOjplbnYoQ1RTX1NJTktfQ0xVU1RFUklOR19NQVhfRElBTUVURVIpIDUwCitzZXQgOjplbnYoQ1RTX1NJTktfQ0xVU1RFUklOR19TSVpFKSAyMAorCisjIyBQbGFjZW1lbnQKK3NldCA6OmVudihQTF9SRVNJWkVSX0RFU0lHTl9PUFRJTUlaQVRJT05TKSAxCitzZXQgOjplbnYoUExfUkVTSVpFUl9USU1JTkdfT1BUSU1JWkFUSU9OUykgMAorCitzZXQgOjplbnYoUExfUkVTSVpFUl9NQVhfU0xFV19NQVJHSU4pIDIKK3NldCA6OmVudihQTF9SRVNJWkVSX01BWF9DQVBfTUFSR0lOKSAyCisKKyMjIFJvdXRpbmcKK3NldCA6OmVudihHTEJfUlRfQURKVVNUTUVOVCkgMAorc2V0IDo6ZW52KEdMQl9SVF9MMl9BREpVU1RNRU5UKSAwLjIxCitzZXQgOjplbnYoR0xCX1JUX0wzX0FESlVTVE1FTlQpIDAuMjEKK3NldCA6OmVudihHTEJfUlRfTDRfQURKVVNUTUVOVCkgMC4xCitzZXQgOjplbnYoR0xCX1JUX0w1X0FESlVTVE1FTlQpIDAuMQorc2V0IDo6ZW52KEdMQl9SVF9MNl9BREpVU1RNRU5UKSAwLjEKK3NldCA6OmVudihHTEJfUlRfQUxMT1dfQ09OR0VTVElPTikgMAorc2V0IDo6ZW52KEdMQl9SVF9PVkVSRkxPV19JVEVSUykgMjAwCisKK3NldCA6OmVudihHTEJfUlRfTUlOTEFZRVIpIDIKK3NldCA6OmVudihHTEJfUlRfTUFYTEFZRVIpIDYKKworCitzZXQgOjplbnYoUVVJVF9PTl9USU1JTkdfVklPTEFUSU9OUykgIjAiCitzZXQgOjplbnYoUVVJVF9PTl9NQUdJQ19EUkMpICIxIgorc2V0IDo6ZW52KFFVSVRfT05fTFZTX0VSUk9SKSAiMCIKK3NldCA6OmVudihRVUlUX09OX1NMRVdfVklPTEFUSU9OUykgIjAiCisKK3NldCA6OmVudihHTEJfUkVTSVpFUl9USU1JTkdfT1BUSU1JWkFUSU9OUykgIjAiCitzZXQgOjplbnYoUExfUkVTSVpFUl9CVUZGRVJfSU5QVVRfUE9SVFMpICIwIgorc2V0IDo6ZW52KFBMX1JFU0laRVJfQlVGRkVSX09VVFBVVF9QT1JUUykgIjEiCitzZXQgOjplbnYoUExfUkVTSVpFUl9NQVhfV0lSRV9MRU5HVEgpICIyMDAwIgorc2V0IDo6ZW52KFBMX1JFU0laRVJfTUFYX1NMRVdfTUFSR0lOKSAiMi4wIgorc2V0IDo6ZW52KFBMX1JFU0laRVJfTUFYX0NBUF9NQVJHSU4pICI1IgorCisjIyBGQU5PVVQgUmVkdWNlZCB0byB0YWtlIGNhcmUgb2YgbG9uZyByb3V0ZXMKK3NldCA6OmVudihTWU5USF9NQVhfRkFOT1VUKSAiMiIKKwpkaWZmIC0tZ2l0IGEvb3BlbmxhbmUvd2JfaW50ZXJjb25uZWN0L2ludGVyYWN0aXZlLnRjbCBiL29wZW5sYW5lL3diX2ludGVyY29ubmVjdC9pbnRlcmFjdGl2ZS50Y2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE4MGE1YwotLS0gL2Rldi9udWxsCisrKyBiL29wZW5sYW5lL3diX2ludGVyY29ubmVjdC9pbnRlcmFjdGl2ZS50Y2wKQEAgLTAsMCArMSw0MDMgQEAKKyMhL3Vzci9iaW4vdGNsc2gKKyMgU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMCBFZmFibGVzcyBDb3Jwb3JhdGlvbgorIyBDb3B5cmlnaHQgMjAyMCBFZmFibGVzcyBDb3Jwb3JhdGlvbgorIyBDb3B5cmlnaHQgMjAyMCBTeWx2YWluIE11bmF1dAorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKworcGFja2FnZSByZXF1aXJlIG9wZW5sYW5lOworCisKK3Byb2MgcnVuX3BsYWNlbWVudF9zdGVwIHthcmdzfSB7CisgICAgIyBzZXQgcGRuZGVmX2Rpcm5hbWUgW2ZpbGUgZGlybmFtZSAkOjplbnYocGRuX3RtcF9maWxlX3RhZykuZGVmXQorICAgICMgc2V0IHBkbmRlZiBbbGluZGV4IFtnbG9iICRwZG5kZWZfZGlybmFtZS8qcGRuKl0gMF0KKyAgICAjIHNldF9kZWYgJHBkbmRlZgorICAgIGlmIHsgISBbIGluZm8gZXhpc3RzIDo6ZW52KFBMQUNFTUVOVF9DVVJSRU5UX0RFRikgXSB9IHsKKyAgICAgICAgc2V0IDo6ZW52KFBMQUNFTUVOVF9DVVJSRU5UX0RFRikgJDo6ZW52KENVUlJFTlRfREVGKQorICAgIH0gZWxzZSB7CisgICAgICAgIHNldCA6OmVudihDVVJSRU5UX0RFRikgJDo6ZW52KFBMQUNFTUVOVF9DVVJSRU5UX0RFRikKKyAgICB9CisKKyAgICBydW5fcGxhY2VtZW50Cit9CisKK3Byb2MgcnVuX2N0c19zdGVwIHthcmdzfSB7CisgICAgIyBzZXRfZGVmICQ6OmVudihvcGVuZHBfcmVzdWx0X2ZpbGVfdGFnKS5kZWYKKyAgICBpZiB7ICEgWyBpbmZvIGV4aXN0cyA6OmVudihDVFNfQ1VSUkVOVF9ERUYpIF0gfSB7CisgICAgICAgIHNldCA6OmVudihDVFNfQ1VSUkVOVF9ERUYpICQ6OmVudihDVVJSRU5UX0RFRikKKyAgICB9IGVsc2UgeworICAgICAgICBzZXQgOjplbnYoQ1VSUkVOVF9ERUYpICQ6OmVudihDVFNfQ1VSUkVOVF9ERUYpCisgICAgfQorCisgICAgcnVuX2N0cworICAgIHJ1bl9yZXNpemVyX3RpbWluZworfQorCitwcm9jIHJ1bl9yb3V0aW5nX3N0ZXAge2FyZ3N9IHsKKyAgICAjIHNldCByZXNpemVyZGVmX2Rpcm5hbWUgW2ZpbGUgZGlybmFtZSAkOjplbnYocmVzaXplcl90bXBfZmlsZV90YWcpX3RpbWluZy5kZWZdCisgICAgIyBzZXQgcmVzaXplcmRlZiBbbGluZGV4IFtnbG9iICRyZXNpemVyZGVmX2Rpcm5hbWUvKnJlc2l6ZXIqXSAwXQorICAgICMgc2V0X2RlZiAkcmVzaXplcmRlZgorICAgIGlmIHsgISBbIGluZm8gZXhpc3RzIDo6ZW52KFJPVVRJTkdfQ1VSUkVOVF9ERUYpIF0gfSB7CisgICAgICAgIHNldCA6OmVudihST1VUSU5HX0NVUlJFTlRfREVGKSAkOjplbnYoQ1VSUkVOVF9ERUYpCisgICAgfSBlbHNlIHsKKyAgICAgICAgc2V0IDo6ZW52KENVUlJFTlRfREVGKSAkOjplbnYoUk9VVElOR19DVVJSRU5UX0RFRikKKyAgICB9CisgICAgcnVuX3JvdXRpbmcKK30KKworcHJvYyBydW5fZGlvZGVfaW5zZXJ0aW9uXzJfNV9zdGVwIHthcmdzfSB7CisgICAgIyBzZXRfZGVmICQ6OmVudih0cml0b25Sb3V0ZV9yZXN1bHRfZmlsZV90YWcpLmRlZgorICAgIGlmIHsgISBbIGluZm8gZXhpc3RzIDo6ZW52KERJT0RFX0lOU0VSVElPTl9DVVJSRU5UX0RFRikgXSB9IHsKKyAgICAgICAgc2V0IDo6ZW52KERJT0RFX0lOU0VSVElPTl9DVVJSRU5UX0RFRikgJDo6ZW52KENVUlJFTlRfREVGKQorICAgIH0gZWxzZSB7CisgICAgICAgIHNldCA6OmVudihDVVJSRU5UX0RFRikgJDo6ZW52KERJT0RFX0lOU0VSVElPTl9DVVJSRU5UX0RFRikKKyAgICB9CisJaWYgeyAoJDo6ZW52KERJT0RFX0lOU0VSVElPTl9TVFJBVEVHWSkgPT0gMikgfHwgKCQ6OmVudihESU9ERV9JTlNFUlRJT05fU1RSQVRFR1kpID09IDUpIH0geworCQlydW5fYW50ZW5uYV9jaGVjaworCQloZWFsX2FudGVubmFfdmlvbGF0b3JzOyAjIG1vZGlmaWVzIHRoZSByb3V0ZWQgREVGCisJfQorCit9CisKK3Byb2MgcnVuX3Bvd2VyX3BpbnNfaW5zZXJ0aW9uX3N0ZXAge2FyZ3N9IHsKKyAgICAjIHNldF9kZWYgJDo6ZW52KHRyaXRvblJvdXRlX3Jlc3VsdF9maWxlX3RhZykuZGVmCisgICAgaWYgeyAhIFsgaW5mbyBleGlzdHMgOjplbnYoUE9XRVJfUElOU19JTlNFUlRJT05fQ1VSUkVOVF9ERUYpIF0gfSB7CisgICAgICAgIHNldCA6OmVudihQT1dFUl9QSU5TX0lOU0VSVElPTl9DVVJSRU5UX0RFRikgJDo6ZW52KENVUlJFTlRfREVGKQorICAgIH0gZWxzZSB7CisgICAgICAgIHNldCA6OmVudihDVVJSRU5UX0RFRikgJDo6ZW52KFBPV0VSX1BJTlNfSU5TRVJUSU9OX0NVUlJFTlRfREVGKQorICAgIH0KKyAgICBpZiB7ICQ6OmVudihMVlNfSU5TRVJUX1BPV0VSX1BJTlMpIH0geworCQl3cml0ZV9wb3dlcmVkX3Zlcmlsb2cKKwkJc2V0X25ldGxpc3QgJDo6ZW52KGx2c19yZXN1bHRfZmlsZV90YWcpLnBvd2VyZWQudgorICAgIH0KKworfQorCitwcm9jIHJ1bl9sdnNfc3RlcCB7eyBsdnNfZW5hYmxlZCAxIH19IHsKKyAgICAjIHNldF9kZWYgJDo6ZW52KHRyaXRvblJvdXRlX3Jlc3VsdF9maWxlX3RhZykuZGVmCisgICAgaWYgeyAhIFsgaW5mbyBleGlzdHMgOjplbnYoTFZTX0NVUlJFTlRfREVGKSBdIH0geworICAgICAgICBzZXQgOjplbnYoTFZTX0NVUlJFTlRfREVGKSAkOjplbnYoQ1VSUkVOVF9ERUYpCisgICAgfSBlbHNlIHsKKyAgICAgICAgc2V0IDo6ZW52KENVUlJFTlRfREVGKSAkOjplbnYoTFZTX0NVUlJFTlRfREVGKQorICAgIH0KKwlpZiB7ICRsdnNfZW5hYmxlZCB9IHsKKwkJcnVuX21hZ2ljX3NwaWNlX2V4cG9ydAorCQlydW5fbHZzOyAjIHJlcXVpcmVzIHJ1bl9tYWdpY19zcGljZV9leHBvcnQKKwl9CisKK30KKworcHJvYyBydW5fZHJjX3N0ZXAge3sgZHJjX2VuYWJsZWQgMSB9fSB7CisgICAgaWYgeyAhIFsgaW5mbyBleGlzdHMgOjplbnYoRFJDX0NVUlJFTlRfREVGKSBdIH0geworICAgICAgICBzZXQgOjplbnYoRFJDX0NVUlJFTlRfREVGKSAkOjplbnYoQ1VSUkVOVF9ERUYpCisgICAgfSBlbHNlIHsKKyAgICAgICAgc2V0IDo6ZW52KENVUlJFTlRfREVGKSAkOjplbnYoRFJDX0NVUlJFTlRfREVGKQorICAgIH0KKwlpZiB7ICRkcmNfZW5hYmxlZCB9IHsKKwkJcnVuX21hZ2ljX2RyYworCQlydW5fa2xheW91dF9kcmMKKwl9Cit9CisKK3Byb2MgcnVuX2FudGVubmFfY2hlY2tfc3RlcCB7eyBhbnRlbm5hX2NoZWNrX2VuYWJsZWQgMSB9fSB7CisgICAgaWYgeyAhIFsgaW5mbyBleGlzdHMgOjplbnYoQU5URU5OQV9DSEVDS19DVVJSRU5UX0RFRikgXSB9IHsKKyAgICAgICAgc2V0IDo6ZW52KEFOVEVOTkFfQ0hFQ0tfQ1VSUkVOVF9ERUYpICQ6OmVudihDVVJSRU5UX0RFRikKKyAgICB9IGVsc2UgeworICAgICAgICBzZXQgOjplbnYoQ1VSUkVOVF9ERUYpICQ6OmVudihBTlRFTk5BX0NIRUNLX0NVUlJFTlRfREVGKQorICAgIH0KKwlpZiB7ICRhbnRlbm5hX2NoZWNrX2VuYWJsZWQgfSB7CisJCXJ1bl9hbnRlbm5hX2NoZWNrCisJfQorfQorCitwcm9jIGdlbl9wZG4ge2FyZ3N9IHsKKyAgICBwdXRzX2luZm8gIkdlbmVyYXRpbmcgUEROLi4uIgorICAgIFRJTUVSOjp0aW1lcl9zdGFydAorCQorICAgIHNldCA6OmVudihTQVZFX0RFRikgW2luZGV4X2ZpbGUgJDo6ZW52KHBkbl90bXBfZmlsZV90YWcpLmRlZl0KKyAgICBzZXQgOjplbnYoUEdBX1JQVF9GSUxFKSBbaW5kZXhfZmlsZSAkOjplbnYocGRuX3JlcG9ydF9maWxlX3RhZykucGdhLnJwdF0KKworICAgIHRyeV9jYXRjaCAkOjplbnYoT1BFTlJPQURfQklOKSAtZXhpdCAkOjplbnYoU0NSSVBUU19ESVIpL29wZW5yb2FkL3Bkbi50Y2wgXAorCXwmIHRlZSAkOjplbnYoVEVSTUlOQUxfT1VUUFVUKSBbaW5kZXhfZmlsZSAkOjplbnYocGRuX2xvZ19maWxlX3RhZykubG9nIDBdCisKKworICAgIFRJTUVSOjp0aW1lcl9zdG9wCisgICAgZXhlYyBlY2hvICJbVElNRVI6OmdldF9ydW50aW1lXSIgPj4gW2luZGV4X2ZpbGUgJDo6ZW52KHBkbl9sb2dfZmlsZV90YWcpX3J1bnRpbWUudHh0IDBdCisKKwlxdWl0X29uX3VuY29ubmVjdGVkX3Bkbl9ub2RlcworCisgICAgc2V0X2RlZiAkOjplbnYoU0FWRV9ERUYpCit9CisKK3Byb2MgcnVuX3Bvd2VyX2dyaWRfZ2VuZXJhdGlvbiB7YXJnc30geworCWlmIHsgW2luZm8gZXhpc3RzIDo6ZW52KFZERF9ORVRTKV0gfHwgW2luZm8gZXhpc3RzIDo6ZW52KEdORF9ORVRTKV0gfSB7CisJCSMgdGhleSBib3RoIG11c3QgZXhpc3QgYW5kIGJlIGVxdWFsIGluIGxlbmd0aAorCQkjIGN1cnJlbnQgYXNzdW1wdGlvbjogdGhleSBjYW5ub3QgaGF2ZSBhIGNvbW1vbiBncm91bmQKKwkJaWYgeyAhIFtpbmZvIGV4aXN0cyA6OmVudihWRERfTkVUUyldIHx8ICEgW2luZm8gZXhpc3RzIDo6ZW52KEdORF9ORVRTKV0gfSB7CisJCQlwdXRzX2VyciAiVkREX05FVFMgYW5kIEdORF9ORVRTIG11c3QgKmJvdGgqIGVpdGhlciBiZSBkZWZpbmVkIG9yIHVuZGVmaW5lZCIKKwkJCXJldHVybiAtY29kZSBlcnJvcgorCQl9CisJCSMgc3RhbmRhcmQgY2VsbCBwb3dlciBhbmQgZ3JvdW5kIG5ldHMgYXJlIGFzc3VtZWQgdG8gYmUgdGhlIGZpcnN0IG5ldCAKKwkJc2V0IDo6ZW52KFZERF9QSU4pIFtsaW5kZXggJDo6ZW52KFZERF9ORVRTKSAwXQorCQlzZXQgOjplbnYoR05EX1BJTikgW2xpbmRleCAkOjplbnYoR05EX05FVFMpIDBdCisJfSBlbHNlaWYgeyBbaW5mbyBleGlzdHMgOjplbnYoU1lOVEhfVVNFX1BHX1BJTlNfREVGSU5FUyldIH0geworCQlzZXQgOjplbnYoVkREX05FVFMpIFtsaXN0XQorCQlzZXQgOjplbnYoR05EX05FVFMpIFtsaXN0XQorCQkjIGdldCB0aGUgcGlucyB0aGF0IGFyZSBpbiAkeW9zeXNfdG1wX2ZpbGVfdGFnLnBnX2RlZmluZS52CisJCSMgdGhhdCBhcmUgbm90IGluICR5b3N5c19yZXN1bHRfZmlsZV90YWcudgorCQkjCisJCXNldCBmdWxsX3BpbnMgeyp9W2V4dHJhY3RfcGluc19mcm9tX3lvc3lzX25ldGxpc3QgJDo6ZW52KHlvc3lzX3RtcF9maWxlX3RhZykucGdfZGVmaW5lLnZdCisJCXB1dHNfaW5mbyAkZnVsbF9waW5zCisKKwkJc2V0IG5vbl9wZ19waW5zIHsqfVtleHRyYWN0X3BpbnNfZnJvbV95b3N5c19uZXRsaXN0ICQ6OmVudih5b3N5c19yZXN1bHRfZmlsZV90YWcpLnZdCisJCXB1dHNfaW5mbyAkbm9uX3BnX3BpbnMKKworCQkjIGFzc3VtZXMgdGhlIHBpbnMgYXJlIG9yZGVyZWQgY29ycmVjdGx5IChlLmcuLCB2ZGQxLCB2c3MxLCB2Y2MxLCB2c3MxLCAuLi4pCisJCWZvcmVhY2gge3ZkZCBnbmR9ICRmdWxsX3BpbnMgeworCQkJaWYgeyAkdmRkIG5lICIiICYmICR2ZGQgbmkgJG5vbl9wZ19waW5zIH0geworCQkJCWxhcHBlbmQgOjplbnYoVkREX05FVFMpICR2ZGQKKwkJCX0KKwkJCWlmIHsgJGduZCBuZSAiIiAmJiAkZ25kIG5pICRub25fcGdfcGlucyB9IHsKKwkJCQlsYXBwZW5kIDo6ZW52KEdORF9ORVRTKSAkZ25kCisJCQl9CisJCX0KKwl9IGVsc2UgeworCQlzZXQgOjplbnYoVkREX05FVFMpICQ6OmVudihWRERfUElOKQorCQlzZXQgOjplbnYoR05EX05FVFMpICQ6OmVudihHTkRfUElOKQorCX0KKworCXB1dHNfaW5mbyAiUG93ZXIgcGxhbm5pbmcgdGhlIGZvbGxvd2luZyBuZXRzIgorCXB1dHNfaW5mbyAiUG93ZXI6ICQ6OmVudihWRERfTkVUUykiCisJcHV0c19pbmZvICJHcm91bmQ6ICQ6OmVudihHTkRfTkVUUykiCisKKwlpZiB7IFtsbGVuZ3RoICQ6OmVudihWRERfTkVUUyldICE9IFtsbGVuZ3RoICQ6OmVudihHTkRfTkVUUyldIH0geworCQlwdXRzX2VyciAiVkREX05FVFMgYW5kIEdORF9ORVRTIG11c3QgYmUgb2YgZXF1YWwgbGVuZ3RocyIKKwkJcmV0dXJuIC1jb2RlIGVycm9yCisJfQorCisJIyBpbnRlcm5hbCBtYWNyb3MgcG93ZXIgY29ubmVjdGlvbnMgCisJaWYge1tpbmZvIGV4aXN0cyA6OmVudihGUF9QRE5fTUFDUk9fSE9PS1MpXX0geworCQlzZXQgbWFjcm9faG9va3MgW2RpY3QgY3JlYXRlXQorCQlzZXQgcGRuX2hvb2tzIFtzcGxpdCAkOjplbnYoRlBfUEROX01BQ1JPX0hPT0tTKSAiLCJdCisJCWZvcmVhY2ggcGRuX2hvb2sgJHBkbl9ob29rcyB7CisJCQlzZXQgaW5zdGFuY2VfbmFtZSBbbGluZGV4ICRwZG5faG9vayAwXQorCQkJc2V0IHBvd2VyX25ldCBbbGluZGV4ICRwZG5faG9vayAxXQorCQkJc2V0IGdyb3VuZF9uZXQgW2xpbmRleCAkcGRuX2hvb2sgMl0KKwkJCWRpY3QgYXBwZW5kIG1hY3JvX2hvb2tzICRpbnN0YW5jZV9uYW1lIFtzdWJzdCB7JHBvd2VyX25ldCAkZ3JvdW5kX25ldH1dCisJCSAgICAgICAgc2V0IHBvd2VyX25ldF9pbmR4IFtsc2VhcmNoICQ6OmVudihWRERfTkVUUykgJHBvd2VyX25ldF0KKwkJICAgICAgICBzZXQgZ3JvdW5kX25ldF9pbmR4IFtsc2VhcmNoICQ6OmVudihHTkRfTkVUUykgJGdyb3VuZF9uZXRdCisKKwkJICAgICAgICAjIG1ha2Ugc3VyZSB0aGF0IHRoZSBzcGVjaWZpZWQgcG93ZXIgZG9tYWlucyBleGlzdC4KKwkJICAgICAgICBpZiB7ICRwb3dlcl9uZXRfaW5keCA9PSAtMSAgfHwgJGdyb3VuZF9uZXRfaW5keCA9PSAtMSB8fCAkcG93ZXJfbmV0X2luZHggIT0gJGdyb3VuZF9uZXRfaW5keCB9IHsKKwkJICAgICAgICAJcHV0c19lcnIgIkNhbid0IGZpbmQgJHBvd2VyX25ldCBhbmQgJGdyb3VuZF9uZXQgZG9tYWluLiBcCisJCSAgICAgICAgCU1ha2Ugc3VyZSB0aGF0IGJvdGggZXhpc3QgaW4gJDo6ZW52KFZERF9ORVRTKSBhbmQgJDo6ZW52KEdORF9ORVRTKS4iIAorCQkgICAgICAgIH0gCisJCX0KKwkJCisJfQorCQorCSMgZ2VuZXJhdGUgbXVsdGlwbGUgcG93ZXIgZ3JpZHMgcGVyIHBhaXIgb2YgKFZERCxHTkQpCisJIyBvZmZzZXRlZCBieSBXSURUSCArIFNQQUNJTkcKKwlmb3JlYWNoIHZkZCAkOjplbnYoVkREX05FVFMpIGduZCAkOjplbnYoR05EX05FVFMpIHsKKwkJc2V0IDo6ZW52KFZERF9ORVQpICR2ZGQKKwkJc2V0IDo6ZW52KEdORF9ORVQpICRnbmQKKwkgICAgICAgIHB1dHNfaW5mbyAiQ29ubmVjdGluZyBQb3dlcjogJHZkZCAmIGduZCB0byBBbGwgaW50ZXJuYWwgbWFjcm9zLiIKKworCQkjIGludGVybmFsIG1hY3JvcyBwb3dlciBjb25uZWN0aW9ucworCQlzZXQgOjplbnYoRlBfUEROX01BQ1JPUykgIiIKKwkJaWYgeyAkOjplbnYoRlBfUEROX0VOQUJMRV9NQUNST1NfR1JJRCkgPT0gMSB9IHsKKwkJCSMgaWYgbWFjcm9zIGNvbm5lY3Rpb25zIHRvIHBvd2VyIGFyZSBleHBsaWNpdGx5IHNldAorCQkJIyBkZWZhdWx0IGJlaGF2b2lyIG1hY3JvIHBpbnMgd2lsbCBiZSBjb25uZWN0ZWQgdG8gdGhlIGZpcnN0IHBvd2VyIGRvbWFpbgorCQkJaWYgeyBbaW5mbyBleGlzdHMgOjplbnYoRlBfUEROX01BQ1JPX0hPT0tTKV0gfSB7CisJCQkJc2V0IDo6ZW52KEZQX1BETl9FTkFCTEVfTUFDUk9TX0dSSUQpIDAKKwkJCQlmb3JlYWNoIHtpbnN0YW5jZV9uYW1lIGhvb2tzfSAkbWFjcm9faG9va3MgeworCQkJCQlzZXQgcG93ZXIgW2xpbmRleCAkaG9va3MgMF0KKwkJCQkJc2V0IGdyb3VuZCBbbGluZGV4ICRob29rcyAxXQkJCSAKKwkJCQkJaWYgeyAkcG93ZXIgPT0gJDo6ZW52KFZERF9ORVQpICYmICRncm91bmQgPT0gJDo6ZW52KEdORF9ORVQpIH0geworCQkJCQkJc2V0IDo6ZW52KEZQX1BETl9FTkFCTEVfTUFDUk9TX0dSSUQpIDEKKwkJCQkJCXB1dHNfaW5mbyAiQ29ubmVjdGluZyAkaW5zdGFuY2VfbmFtZSB0byAkcG93ZXIgYW5kICRncm91bmQgbmV0cy4iCisJCQkJCQlsYXBwZW5kIDo6ZW52KEZQX1BETl9NQUNST1MpICRpbnN0YW5jZV9uYW1lCisJCQkJCX0KKwkJCQl9CisJCQl9IAorCQl9IGVsc2UgeworCQkJcHV0c193YXJuICJBbGwgaW50ZXJuYWwgbWFjcm9zIHdpbGwgbm90IGJlIGNvbm5lY3RlZCB0byBwb3dlciAkdmRkICYgJGduZC4iCisJCX0KKwkJCisJCWdlbl9wZG4KKworCQlzZXQgOjplbnYoRlBfUEROX0VOQUJMRV9SQUlMUykgMAorCQlzZXQgOjplbnYoRlBfUEROX0VOQUJMRV9NQUNST1NfR1JJRCkgMAorCisJCSMgYWxsb3cgZmFpbHVyZSB1bnRpbCBvcGVuX3Bka3MgaXMgdXAgdG8gZGF0ZS4uLgorCQljYXRjaCB7c2V0IDo6ZW52KEZQX1BETl9WT0ZGU0VUKSBbZXhwciAkOjplbnYoRlBfUEROX1ZPRkZTRVQpKyQ6OmVudihGUF9QRE5fVldJRFRIKSskOjplbnYoRlBfUEROX1ZTUEFDSU5HKV19CisJCWNhdGNoIHtzZXQgOjplbnYoRlBfUEROX0hPRkZTRVQpIFtleHByICQ6OmVudihGUF9QRE5fSE9GRlNFVCkrJDo6ZW52KEZQX1BETl9IV0lEVEgpKyQ6OmVudihGUF9QRE5fSFNQQUNJTkcpXX0KKworCQljYXRjaCB7c2V0IDo6ZW52KEZQX1BETl9DT1JFX1JJTkdfVk9GRlNFVCkgXAorCQkJW2V4cHIgJDo6ZW52KEZQX1BETl9DT1JFX1JJTkdfVk9GRlNFVClcCisJCQkrMiooJDo6ZW52KEZQX1BETl9DT1JFX1JJTkdfVldJRFRIKVwKKwkJCSttYXgoJDo6ZW52KEZQX1BETl9DT1JFX1JJTkdfVlNQQUNJTkcpLCAkOjplbnYoRlBfUEROX0NPUkVfUklOR19IU1BBQ0lORykpKV19CisJCWNhdGNoIHtzZXQgOjplbnYoRlBfUEROX0NPUkVfUklOR19IT0ZGU0VUKSBbZXhwciAkOjplbnYoRlBfUEROX0NPUkVfUklOR19IT0ZGU0VUKVwKKwkJCSsyKigkOjplbnYoRlBfUEROX0NPUkVfUklOR19IV0lEVEgpK1wKKwkJCW1heCgkOjplbnYoRlBfUEROX0NPUkVfUklOR19WU1BBQ0lORyksICQ6OmVudihGUF9QRE5fQ09SRV9SSU5HX0hTUEFDSU5HKSkpXX0KKworCQlwdXRzICJGUF9QRE5fVk9GRlNFVDogJDo6ZW52KEZQX1BETl9WT0ZGU0VUKSIKKwkJcHV0cyAiRlBfUEROX0hPRkZTRVQ6ICQ6OmVudihGUF9QRE5fVk9GRlNFVCkiCisJCXB1dHMgIkZQX1BETl9DT1JFX1JJTkdfVk9GRlNFVDogJDo6ZW52KEZQX1BETl9DT1JFX1JJTkdfVk9GRlNFVCkiCisJCXB1dHMgIkZQX1BETl9DT1JFX1JJTkdfSE9GRlNFVDogJDo6ZW52KEZQX1BETl9DT1JFX1JJTkdfSE9GRlNFVCkiCisJfQorCXNldCA6OmVudihGUF9QRE5fRU5BQkxFX1JBSUxTKSAxCit9CisKKworcHJvYyBydW5fZmxvb3JwbGFuIHthcmdzfSB7CisJCXB1dHNfaW5mbyAiUnVubmluZyBGbG9vcnBsYW5uaW5nLi4uIgorCQkjIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAorCQkjIHwtLS0tLS0tLS0tLS0tLS0tICAgMi4gRkxPT1JQTEFOICAgLS0tLS0tLS0tLS0tLS0tLS0tfAorCQkjIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAorCQkjCisJCSMgaW50aWFsIGZwCisJCWluaXRfZmxvb3JwbGFuCisKKworCQkjIHBsYWNlIGlvCisJCWlmIHsgW2luZm8gZXhpc3RzIDo6ZW52KEZQX1BJTl9PUkRFUl9DRkcpXSB9IHsKKwkJCQlwbGFjZV9pb19vbAorCQl9IGVsc2UgeworCQkJaWYgeyBbaW5mbyBleGlzdHMgOjplbnYoRlBfQ09OVEVYVF9ERUYpXSAmJiBbaW5mbyBleGlzdHMgOjplbnYoRlBfQ09OVEVYVF9MRUYpXSB9IHsKKwkJCQlwbGFjZV9pbworCQkJCWdsb2JhbF9wbGFjZW1lbnRfb3IKKwkJCQlwbGFjZV9jb250ZXh0dWFsaXplZF9pbyBcCisJCQkJCS1sZWYgJDo6ZW52KEZQX0NPTlRFWFRfTEVGKSBcCisJCQkJCS1kZWYgJDo6ZW52KEZQX0NPTlRFWFRfREVGKQorCQkJfSBlbHNlIHsKKwkJCQlwbGFjZV9pbworCQkJfQorCQl9CisKKwkJYXBwbHlfZGVmX3RlbXBsYXRlCisKKwkJaWYgeyBbaW5mbyBleGlzdCA6OmVudihFWFRSQV9MRUZTKV0gfSB7CisJCQlpZiB7IFtpbmZvIGV4aXN0IDo6ZW52KE1BQ1JPX1BMQUNFTUVOVF9DRkcpXSB9IHsKKwkJCQlmaWxlIGNvcHkgLWZvcmNlICQ6OmVudihNQUNST19QTEFDRU1FTlRfQ0ZHKSAkOjplbnYoVE1QX0RJUikvbWFjcm9fcGxhY2VtZW50LmNmZworCQkJCW1hbnVhbF9tYWNyb19wbGFjZW1lbnQgZgorCQkJfSBlbHNlIHsKKwkJCQlnbG9iYWxfcGxhY2VtZW50X29yCisJCQkJYmFzaWNfbWFjcm9fcGxhY2VtZW50CisJCQl9CisJCX0KKworCQkjIHRhcGNlbGwKKwkJdGFwX2RlY2FwX29yCisJCXNjcm90X2tsYXlvdXQgLWxheW91dCAkOjplbnYoQ1VSUkVOVF9ERUYpCisJCSMgcG93ZXIgZ3JpZCBnZW5lcmF0aW9uCisJCXJ1bl9wb3dlcl9ncmlkX2dlbmVyYXRpb24KK30KKworcHJvYyBydW5fZmxvdyB7YXJnc30geworICAgICAgIHNldCBzY3JpcHRfZGlyIFtmaWxlIGRpcm5hbWUgW2ZpbGUgbm9ybWFsaXplIFtpbmZvIHNjcmlwdF1dXQorCisJCXNldCBvcHRpb25zIHsKKwkJey1kZXNpZ24gcmVxdWlyZWR9CisJCXstc2F2ZV9wYXRoIG9wdGlvbmFsfQorCQl7LW5vX2x2cyBvcHRpb25hbH0KKwkgICAgey1ub19kcmMgb3B0aW9uYWx9CisJICAgIHstbm9fYW50ZW5uYWNoZWNrIG9wdGlvbmFsfQorCX0KKwlzZXQgZmxhZ3Mgey1zYXZlfQorCXBhcnNlX2tleV9hcmdzICJydW5fZmxvdyIgYXJncyBhcmdfdmFsdWVzICRvcHRpb25zIGZsYWdzX21hcCAkZmxhZ3MgLW5vX2NvbnN1bWUKKworCXByZXAgeyp9JGFyZ3MKKworICAgICAgICBzZXQgTFZTX0VOQUJMRUQgMQorICAgICAgICBzZXQgRFJDX0VOQUJMRUQgMAorICAgICAgICBzZXQgQU5URU5OQUNIRUNLX0VOQUJMRUQgMQorCisgICAgICAgIHNldCBzdGVwcyBbZGljdCBjcmVhdGUgInN5bnRoZXNpcyIge3J1bl9zeW50aGVzaXMgIiIgfSBcCisgICAgICAgICAgICAgICAgImZsb29ycGxhbiIge3J1bl9mbG9vcnBsYW4gIiJ9IFwKKyAgICAgICAgICAgICAgICAicGxhY2VtZW50IiB7cnVuX3BsYWNlbWVudF9zdGVwICIifSBcCisgICAgICAgICAgICAgICAgImN0cyIge3J1bl9jdHNfc3RlcCAiIn0gXAorICAgICAgICAgICAgICAgICJyb3V0aW5nIiB7cnVuX3JvdXRpbmdfc3RlcCAiIn1cCisgICAgICAgICAgICAgICAgImRpb2RlX2luc2VydGlvbiIge3J1bl9kaW9kZV9pbnNlcnRpb25fMl81X3N0ZXAgIiJ9IFwKKyAgICAgICAgICAgICAgICAicG93ZXJfcGluc19pbnNlcnRpb24iIHtydW5fcG93ZXJfcGluc19pbnNlcnRpb25fc3RlcCAiIn0gXAorICAgICAgICAgICAgICAgICJnZHNfbWFnaWMiIHtydW5fbWFnaWMgIiJ9IFwKKyAgICAgICAgICAgICAgICAiZ2RzX2RyY19rbGF5b3V0IiB7cnVuX2tsYXlvdXQgIiJ9IFwKKyAgICAgICAgICAgICAgICAiZ2RzX3hvcl9rbGF5b3V0IiB7cnVuX2tsYXlvdXRfZ2RzX3hvciAiIn0gXAorICAgICAgICAgICAgICAgICJsdnMiICJydW5fbHZzX3N0ZXAgJExWU19FTkFCTEVEIiBcCisgICAgICAgICAgICAgICAgImRyYyIgInJ1bl9kcmNfc3RlcCAkRFJDX0VOQUJMRUQiIFwKKyAgICAgICAgICAgICAgICAiYW50ZW5uYV9jaGVjayIgInJ1bl9hbnRlbm5hX2NoZWNrX3N0ZXAgJEFOVEVOTkFDSEVDS19FTkFCTEVEIiBcCisgICAgICAgICAgICAgICAgImN2YyIge3J1bl9sZWZfY3ZjfQorICAgICAgICBdCisKKyAgICAgICBzZXRfaWZfdW5zZXQgYXJnX3ZhbHVlcygtdG8pICJjdmMiOworCisgICAgICAgaWYgeyAgW2luZm8gZXhpc3RzIDo6ZW52KENVUlJFTlRfU1RFUCkgXSB9IHsKKyAgICAgICAgICAgcHV0cyAiXFtJTkZPXF06UGlja2luZyB1cCB3aGVyZSBsYXN0IGV4ZWN1dGlvbiBsZWZ0IG9mZiIKKyAgICAgICAgICAgcHV0cyBbZm9ybWF0ICJcW0lORk9cXTpDdXJyZW50IHN0YWdlIGlzICVzICIgJDo6ZW52KENVUlJFTlRfU1RFUCldCisgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgc2V0IDo6ZW52KENVUlJFTlRfU1RFUCkgInN5bnRoZXNpcyI7CisgICAgICAgfQorICAgICAgIHNldF9pZl91bnNldCBhcmdfdmFsdWVzKC1mcm9tKSAkOjplbnYoQ1VSUkVOVF9TVEVQKTsKKyAgICAgICBzZXQgZXhlIDA7CisgICAgICAgZGljdCBmb3Ige3N0ZXBfbmFtZSBzdGVwX2V4ZX0gJHN0ZXBzIHsKKyAgICAgICAgICAgaWYgeyBbIHN0cmluZyBlcXVhbCAkYXJnX3ZhbHVlcygtZnJvbSkgJHN0ZXBfbmFtZSBdIH0geworICAgICAgICAgICAgICAgc2V0IGV4ZSAxOworICAgICAgICAgICB9CisKKyAgICAgICAgICAgaWYgeyAkZXhlIH0geworICAgICAgICAgICAgICAgIyBGb3Igd2hlbiBpdCBmYWlscworICAgICAgICAgICAgICAgc2V0IDo6ZW52KENVUlJFTlRfU1RFUCkgJHN0ZXBfbmFtZQorICAgICAgICAgICAgICAgW2xpbmRleCAkc3RlcF9leGUgMF0gW2xpbmRleCAkc3RlcF9leGUgMV0gOworICAgICAgICAgICB9CisKKyAgICAgICAgICAgaWYgeyBbIHN0cmluZyBlcXVhbCAkYXJnX3ZhbHVlcygtdG8pICRzdGVwX25hbWUgXSB9IHsKKyAgICAgICAgICAgICAgIHNldCBleGUgMDoKKyAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICB9CisKKyAgICAgICB9CisKKyAgICAgICAjIGZvciB3aGVuIGl0IHJlc3VtZXMKKyAgICAgICBzZXQgc3RlcHNfYXNfbGlzdCBbZGljdCBrZXlzICRzdGVwc10KKyAgICAgICBzZXQgbmV4dF9pZHggW2V4cHIgW2xzZWFyY2ggJHN0ZXBzX2FzX2xpc3QgJDo6ZW52KENVUlJFTlRfU1RFUCldICsgMV0KKyAgICAgICBzZXQgOjplbnYoQ1VSUkVOVF9TVEVQKSBbbGluZGV4ICRzdGVwc19hc19saXN0ICRuZXh0X2lkeF0KKworCWlmIHsgIFtpbmZvIGV4aXN0cyBmbGFnc19tYXAoLXNhdmUpIF0gfSB7CisJCWlmIHsgISBbaW5mbyBleGlzdHMgYXJnX3ZhbHVlcygtc2F2ZV9wYXRoKV0gfSB7CisJCQlzZXQgYXJnX3ZhbHVlcygtc2F2ZV9wYXRoKSAiIgorCQl9CisJCXNhdmVfdmlld3MgCS1sZWZfcGF0aCAkOjplbnYobWFnaWNfcmVzdWx0X2ZpbGVfdGFnKS5sZWYgXAorCQkJLWRlZl9wYXRoICQ6OmVudihDVVJSRU5UX0RFRikgXAorCQkJLWdkc19wYXRoICQ6OmVudihtYWdpY19yZXN1bHRfZmlsZV90YWcpLmdkcyBcCisJCQktbWFnX3BhdGggJDo6ZW52KG1hZ2ljX3Jlc3VsdF9maWxlX3RhZykubWFnIFwKKwkJCS1tYWdsZWZfcGF0aCAkOjplbnYobWFnaWNfcmVzdWx0X2ZpbGVfdGFnKS5sZWYubWFnIFwKKwkJCS1zcGljZV9wYXRoICQ6OmVudihtYWdpY19yZXN1bHRfZmlsZV90YWcpLnNwaWNlIFwKKwkJCS1zcGVmX3BhdGggJDo6ZW52KENVUlJFTlRfU1BFRikgXAorCQkJLXZlcmlsb2dfcGF0aCAkOjplbnYoQ1VSUkVOVF9ORVRMSVNUKSBcCisJCQktc2F2ZV9wYXRoICRhcmdfdmFsdWVzKC1zYXZlX3BhdGgpIFwKKwkJCS10YWcgJDo6ZW52KFJVTl9UQUcpCisJfQorCisKKwljYWxjX3RvdGFsX3J1bnRpbWUKKwlzYXZlX3N0YXRlCisJZ2VuZXJhdGVfZmluYWxfc3VtbWFyeV9yZXBvcnQKKwkKKwljaGVja190aW1pbmdfdmlvbGF0aW9ucworCisJcHV0c19zdWNjZXNzICJGbG93IENvbXBsZXRlZCBXaXRob3V0IEZhdGFsIEVycm9ycy4iCisKK30KKworcnVuX2Zsb3cgeyp9JGFyZ3YKZGlmZiAtLWdpdCBhL29wZW5sYW5lL3diX2ludGVyY29ubmVjdC9wZG4udGNsIGIvb3BlbmxhbmUvd2JfaW50ZXJjb25uZWN0L3Bkbi50Y2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZlNjg5YgotLS0gL2Rldi9udWxsCisrKyBiL29wZW5sYW5lL3diX2ludGVyY29ubmVjdC9wZG4udGNsCkBAIC0wLDAgKzEsNDkgQEAKKyMgU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMCBFZmFibGVzcyBDb3Jwb3JhdGlvbgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKworIyBQb3dlciBuZXRzCitzZXQgOjpwb3dlcl9uZXRzICQ6OmVudihWRERfUElOKQorc2V0IDo6Z3JvdW5kX25ldHMgJDo6ZW52KEdORF9QSU4pCisKK3NldCA6Om1hY3JvX2Jsb2NrYWdlX2xheWVyX2xpc3QgImxpMSBtZXQxIG1ldDIgbWV0MyBtZXQ0IG1ldDUiCisKK3Bkbmdlbjo6c3BlY2lmeV9ncmlkIHN0ZGNlbGwgeworICAgIG5hbWUgZ3JpZAorICAgIHJhaWxzIHsKKwkgICAgbWV0MSB7d2lkdGggMC40OCBwaXRjaCAkOjplbnYoUExBQ0VfU0lURV9IRUlHSFQpIG9mZnNldCAwfQorICAgIH0KKyAgICBzdHJhcHMgeworCSAgICBtZXQ0IHt3aWR0aCAxLjYgcGl0Y2ggJDo6ZW52KEZQX1BETl9WUElUQ0gpIG9mZnNldCAkOjplbnYoRlBfUEROX1ZPRkZTRVQpfQorCSAgICBtZXQ1IHt3aWR0aCAxLjYgcGl0Y2ggJDo6ZW52KEZQX1BETl9IUElUQ0gpIG9mZnNldCAkOjplbnYoRlBfUEROX0hPRkZTRVQpfQorICAgIH0KKyAgICBjb25uZWN0IHt7bWV0MSBtZXQ0fSB7bWV0NCBtZXQ1fX0KK30KKworcGRuZ2VuOjpzcGVjaWZ5X2dyaWQgbWFjcm8geworICAgIHBvd2VyX3BpbnMgIlZQV1IiCisgICAgZ3JvdW5kX3BpbnMgIlZHTkQiCisgICAgYmxvY2thZ2VzICJsaTEgbWV0MSBtZXQyIG1ldDMgbWV0NCIKKyAgICBzdHJhcHMgeyAKKyAgICB9IAorICAgIGNvbm5lY3Qge3ttZXQ0X1BJTl92ZXIgbWV0NX19Cit9CisKK3NldCA6OmhhbG8gNQorCisjIFBPV0VSIG9yIEdST1VORCAjU3RkLiBjZWxsIHJhaWxzIHN0YXJ0aW5nIHdpdGggcG93ZXIgb3IgZ3JvdW5kIHJhaWxzIGF0IHRoZSBib3R0b20gb2YgdGhlIGNvcmUgYXJlYQorc2V0IDo6cmFpbHNfc3RhcnRfd2l0aCAiUE9XRVIiIDsKKworIyBQT1dFUiBvciBHUk9VTkQgI1VwcGVyIG1ldGFsIHN0cmlwZXMgc3RhcnRpbmcgd2l0aCBwb3dlciBvciBncm91bmQgcmFpbHMgYXQgdGhlIGxlZnQvYm90dG9tIG9mIHRoZSBjb3JlIGFyZWEKK3NldCA6OnN0cmlwZXNfc3RhcnRfd2l0aCAiUE9XRVIiIDsKZGlmZiAtLWdpdCBhL29wZW5sYW5lL3diX2ludGVyY29ubmVjdC9waW5fb3JkZXIuY2ZnIGIvb3BlbmxhbmUvd2JfaW50ZXJjb25uZWN0L3Bpbl9vcmRlci5jZmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWYyMDA3ZgotLS0gL2Rldi9udWxsCisrKyBiL29wZW5sYW5lL3diX2ludGVyY29ubmVjdC9waW5fb3JkZXIuY2ZnCkBAIC0wLDAgKzEsMTA4NCBAQAorI0JVU19TT1JUCisKKyNNQU5VQUxfUExBQ0UKKworI1MKK3JzdF9uICAgICAgICAgICAgICAgIDAwMCAgMCAyCitkY2FjaGVfcmVtYXBcWzNcXQorZGNhY2hlX3JlbWFwXFsyXF0KK2RjYWNoZV9yZW1hcFxbMVxdCitkY2FjaGVfcmVtYXBcWzBcXQorYm9vdF9yZW1hcFxbM1xdCitib290X3JlbWFwXFsyXF0KK2Jvb3RfcmVtYXBcWzFcXQorYm9vdF9yZW1hcFxbMFxdCitjaF9kYXRhX2luXFszNVxdCitjaF9kYXRhX2luXFszNFxdCitjaF9kYXRhX2luXFszM1xdCitjaF9kYXRhX2luXFszMlxdCitjaF9kYXRhX2luXFszMVxdCitjaF9kYXRhX2luXFszMFxdCitjaF9kYXRhX2luXFsyOVxdCitjaF9kYXRhX2luXFsyOFxdCitjaF9kYXRhX2luXFsyN1xdCitjaF9kYXRhX2luXFsyNlxdCitjaF9kYXRhX2luXFsyNVxdCitjaF9kYXRhX2luXFsyNFxdCitjaF9kYXRhX2luXFsyM1xdCitjaF9kYXRhX2luXFsyMlxdCitjaF9kYXRhX2luXFsyMVxdCitjaF9kYXRhX2luXFsyMFxdCitjaF9kYXRhX2luXFsxOVxdCitjaF9kYXRhX2luXFsxOFxdCitjaF9kYXRhX2luXFsxN1xdCitjaF9kYXRhX2luXFsxNlxdCitjaF9kYXRhX2luXFsxNVxdCitjaF9kYXRhX2luXFsxNFxdCitjaF9kYXRhX2luXFsxM1xdCitjaF9kYXRhX2luXFsxMlxdCitjaF9kYXRhX2luXFsxMVxdCitjaF9kYXRhX2luXFsxMFxdCitjaF9kYXRhX2luXFs5XF0KK2NoX2RhdGFfaW5cWzhcXQorY2hfZGF0YV9pblxbN1xdCitjaF9kYXRhX2luXFs2XF0KK2NoX2RhdGFfaW5cWzVcXQorY2hfZGF0YV9pblxbNFxdCitjaF9kYXRhX2luXFszXF0KK2NoX2RhdGFfaW5cWzJcXQorY2hfZGF0YV9pblxbMVxdCitjaF9kYXRhX2luXFswXF0KK2NmZ19jc2thX3dpXFszXF0gICAgIAorY2ZnX2Nza2Ffd2lcWzJcXSAgICAgCitjZmdfY3NrYV93aVxbMVxdICAgICAKK2NmZ19jc2thX3dpXFswXF0gCitjaF9jbGtfaW5cWzdcXQorY2hfY2xrX2luXFs2XF0KK2NoX2Nsa19pblxbNVxdCitjaF9jbGtfaW5cWzRcXQorY2hfY2xrX2luXFszXF0KK2NoX2Nsa19pblxbMlxdCitjaF9jbGtfaW5cWzFcXQorY2hfY2xrX2luXFswXF0KK3diZF9jbGtfaW50Cit3YmRfY2xrX3dpICAgIAorY2xrX2kgICAgICAgICAgICAgICAKKworCittMF93YmRfc3RiX2kgICAgICAgICAwNjAgMCAyCittMF93YmRfd2VfaSAgICAgICAgIAorbTBfd2JkX2Fkcl9pXFszMVxdICAKK20wX3diZF9hZHJfaVxbMzBcXSAgCittMF93YmRfYWRyX2lcWzI5XF0gIAorbTBfd2JkX2Fkcl9pXFsyOFxdICAKK20wX3diZF9hZHJfaVxbMjdcXSAgCittMF93YmRfYWRyX2lcWzI2XF0gIAorbTBfd2JkX2Fkcl9pXFsyNVxdICAKK20wX3diZF9hZHJfaVxbMjRcXSAgCittMF93YmRfYWRyX2lcWzIzXF0gIAorbTBfd2JkX2Fkcl9pXFsyMlxdICAKK20wX3diZF9hZHJfaVxbMjFcXSAgCittMF93YmRfYWRyX2lcWzIwXF0gIAorbTBfd2JkX2Fkcl9pXFsxOVxdICAKK20wX3diZF9hZHJfaVxbMThcXSAgCittMF93YmRfYWRyX2lcWzE3XF0gIAorbTBfd2JkX2Fkcl9pXFsxNlxdICAKK20wX3diZF9hZHJfaVxbMTVcXSAgCittMF93YmRfYWRyX2lcWzE0XF0gIAorbTBfd2JkX2Fkcl9pXFsxM1xdICAKK20wX3diZF9hZHJfaVxbMTJcXSAgCittMF93YmRfYWRyX2lcWzExXF0gIAorbTBfd2JkX2Fkcl9pXFsxMFxdICAKK20wX3diZF9hZHJfaVxbOVxdICAgCittMF93YmRfYWRyX2lcWzhcXSAgIAorbTBfd2JkX2Fkcl9pXFs3XF0gICAKK20wX3diZF9hZHJfaVxbNlxdICAgCittMF93YmRfYWRyX2lcWzVcXSAgIAorbTBfd2JkX2Fkcl9pXFs0XF0gICAKK20wX3diZF9hZHJfaVxbM1xdICAgCittMF93YmRfYWRyX2lcWzJcXSAgIAorbTBfd2JkX2Fkcl9pXFsxXF0gICAKK20wX3diZF9hZHJfaVxbMFxdICAgCittMF93YmRfc2VsX2lcWzNcXSAgIAorbTBfd2JkX3NlbF9pXFsyXF0gICAKK20wX3diZF9zZWxfaVxbMVxdICAgCittMF93YmRfc2VsX2lcWzBcXSAgIAorbTBfd2JkX2RhdF9pXFszMVxdICAKK20wX3diZF9kYXRfaVxbMzBcXSAgCittMF93YmRfZGF0X2lcWzI5XF0gIAorbTBfd2JkX2RhdF9pXFsyOFxdICAKK20wX3diZF9kYXRfaVxbMjdcXSAgCittMF93YmRfZGF0X2lcWzI2XF0gIAorbTBfd2JkX2RhdF9pXFsyNVxdICAKK20wX3diZF9kYXRfaVxbMjRcXSAgCittMF93YmRfZGF0X2lcWzIzXF0gIAorbTBfd2JkX2RhdF9pXFsyMlxdICAKK20wX3diZF9kYXRfaVxbMjFcXSAgCittMF93YmRfZGF0X2lcWzIwXF0gIAorbTBfd2JkX2RhdF9pXFsxOVxdICAKK20wX3diZF9kYXRfaVxbMThcXSAgCittMF93YmRfZGF0X2lcWzE3XF0gIAorbTBfd2JkX2RhdF9pXFsxNlxdICAKK20wX3diZF9kYXRfaVxbMTVcXSAgCittMF93YmRfZGF0X2lcWzE0XF0gIAorbTBfd2JkX2RhdF9pXFsxM1xdICAKK20wX3diZF9kYXRfaVxbMTJcXSAgCittMF93YmRfZGF0X2lcWzExXF0gIAorbTBfd2JkX2RhdF9pXFsxMFxdICAKK20wX3diZF9kYXRfaVxbOVxdICAgCittMF93YmRfZGF0X2lcWzhcXSAgIAorbTBfd2JkX2RhdF9pXFs3XF0gICAKK20wX3diZF9kYXRfaVxbNlxdICAgCittMF93YmRfZGF0X2lcWzVcXSAgIAorbTBfd2JkX2RhdF9pXFs0XF0gICAKK20wX3diZF9kYXRfaVxbM1xdICAgCittMF93YmRfZGF0X2lcWzJcXSAgIAorbTBfd2JkX2RhdF9pXFsxXF0gICAKK20wX3diZF9kYXRfaVxbMFxdICAgCittMF93YmRfZGF0X29cWzMxXF0gIAorbTBfd2JkX2RhdF9vXFszMFxdICAKK20wX3diZF9kYXRfb1xbMjlcXSAgCittMF93YmRfZGF0X29cWzI4XF0gIAorbTBfd2JkX2RhdF9vXFsyN1xdICAKK20wX3diZF9kYXRfb1xbMjZcXSAgCittMF93YmRfZGF0X29cWzI1XF0gIAorbTBfd2JkX2RhdF9vXFsyNFxdICAKK20wX3diZF9kYXRfb1xbMjNcXSAgCittMF93YmRfZGF0X29cWzIyXF0gIAorbTBfd2JkX2RhdF9vXFsyMVxdICAKK20wX3diZF9kYXRfb1xbMjBcXSAgCittMF93YmRfZGF0X29cWzE5XF0gIAorbTBfd2JkX2RhdF9vXFsxOFxdICAKK20wX3diZF9kYXRfb1xbMTdcXSAgCittMF93YmRfZGF0X29cWzE2XF0gIAorbTBfd2JkX2RhdF9vXFsxNVxdICAKK20wX3diZF9kYXRfb1xbMTRcXSAgCittMF93YmRfZGF0X29cWzEzXF0gIAorbTBfd2JkX2RhdF9vXFsxMlxdICAKK20wX3diZF9kYXRfb1xbMTFcXSAgCittMF93YmRfZGF0X29cWzEwXF0gIAorbTBfd2JkX2RhdF9vXFs5XF0gICAKK20wX3diZF9kYXRfb1xbOFxdICAgCittMF93YmRfZGF0X29cWzdcXSAgIAorbTBfd2JkX2RhdF9vXFs2XF0gICAKK20wX3diZF9kYXRfb1xbNVxdICAgCittMF93YmRfZGF0X29cWzRcXSAgIAorbTBfd2JkX2RhdF9vXFszXF0gICAKK20wX3diZF9kYXRfb1xbMlxdICAgCittMF93YmRfZGF0X29cWzFcXSAgIAorbTBfd2JkX2RhdF9vXFswXF0gICAKK20wX3diZF9hY2tfbyAgICAgICAgCittMF93YmRfbGFja19vICAgICAgICAKK20wX3diZF9lcnJfbyAgICAgICAgCittMF93YmRfY3ljX2kgICAgICAgIAorCisKKworI1cKK2NoX2RhdGFfb3V0XFs4NFxdICAgMDI1MCAwIDIKK2NoX2RhdGFfb3V0XFs4M1xdICAgCitjaF9kYXRhX291dFxbODJcXSAgIAorY2hfZGF0YV9vdXRcWzgxXF0gICAKK2NoX2RhdGFfb3V0XFs4MFxdICAgCitjaF9kYXRhX291dFxbNzlcXSAgIAorY2hfZGF0YV9vdXRcWzc4XF0gICAKK2NoX2RhdGFfb3V0XFs3N1xdICAgCitjaF9kYXRhX291dFxbNzZcXSAgIAorY2hfZGF0YV9vdXRcWzc1XF0gICAKK2NoX2RhdGFfb3V0XFs3NFxdICAgCitjaF9kYXRhX291dFxbNzNcXSAgIAorY2hfZGF0YV9vdXRcWzcyXF0gICAKK2NoX2RhdGFfb3V0XFs3MVxdICAgCitjaF9kYXRhX291dFxbNzBcXSAgIAorY2hfZGF0YV9vdXRcWzY5XF0gICAKK2NoX2RhdGFfb3V0XFs2OFxdICAgCitjaF9kYXRhX291dFxbNjdcXSAgIAorY2hfZGF0YV9vdXRcWzY2XF0gICAKK2NoX2RhdGFfb3V0XFs2NVxdICAgCitjaF9kYXRhX291dFxbNjRcXSAgIAorY2hfZGF0YV9vdXRcWzYzXF0gICAKK2NoX2RhdGFfb3V0XFs2MlxdICAgCitjaF9kYXRhX291dFxbNjFcXSAgIAorY2hfZGF0YV9vdXRcWzYwXF0gICAKK2NoX2RhdGFfb3V0XFs1OVxdICAgCitjaF9kYXRhX291dFxbNThcXSAgIAorY2hfZGF0YV9vdXRcWzU3XF0gICAKK2NoX2RhdGFfb3V0XFs1NlxdICAgCitjaF9kYXRhX291dFxbNTVcXSAgIAorY2hfZGF0YV9vdXRcWzU0XF0gICAKK2NoX2RhdGFfb3V0XFs1M1xdICAgCitjaF9kYXRhX291dFxbNTJcXSAgIAorY2hfZGF0YV9vdXRcWzUxXF0gICAKK2NoX2RhdGFfb3V0XFs1MFxdICAgCitjaF9kYXRhX291dFxbNDlcXSAgIAorY2hfZGF0YV9vdXRcWzQ4XF0gICAKK2NoX2RhdGFfb3V0XFs0N1xdICAgCitjaF9kYXRhX291dFxbNDZcXSAgIAorY2hfZGF0YV9vdXRcWzQ1XF0gICAKK2NoX2RhdGFfb3V0XFs0NFxdICAgCitjaF9kYXRhX291dFxbNDNcXSAgIAorY2hfZGF0YV9vdXRcWzQyXF0gICAKK2NoX2RhdGFfb3V0XFs0MVxdICAgCitjaF9kYXRhX291dFxbNDBcXSAgIAorY2hfZGF0YV9vdXRcWzM5XF0gICAKK2NoX2RhdGFfb3V0XFszOFxdICAgCitjaF9kYXRhX291dFxbMzdcXSAgIAorY2hfZGF0YV9vdXRcWzM2XF0gICAKKworY2hfZGF0YV9vdXRcWzNcXSAgIAorY2hfZGF0YV9vdXRcWzJcXQorY2hfZGF0YV9vdXRcWzFcXQorY2hfZGF0YV9vdXRcWzBcXQorCitjaF9jbGtfb3V0XFswXF0KKworbTFfd2JkX3N0Yl9pICAgICAgICAgMDQ1MCAwIDIgCittMV93YmRfd2VfaSAgICAgICAgIAorbTFfd2JkX2Fkcl9pXFszMVxdICAKK20xX3diZF9hZHJfaVxbMzBcXSAgCittMV93YmRfYWRyX2lcWzI5XF0gIAorbTFfd2JkX2Fkcl9pXFsyOFxdICAKK20xX3diZF9hZHJfaVxbMjdcXSAgCittMV93YmRfYWRyX2lcWzI2XF0gIAorbTFfd2JkX2Fkcl9pXFsyNVxdICAKK20xX3diZF9hZHJfaVxbMjRcXSAgCittMV93YmRfYWRyX2lcWzIzXF0gIAorbTFfd2JkX2Fkcl9pXFsyMlxdICAKK20xX3diZF9hZHJfaVxbMjFcXSAgCittMV93YmRfYWRyX2lcWzIwXF0gIAorbTFfd2JkX2Fkcl9pXFsxOVxdICAKK20xX3diZF9hZHJfaVxbMThcXSAgCittMV93YmRfYWRyX2lcWzE3XF0gIAorbTFfd2JkX2Fkcl9pXFsxNlxdICAKK20xX3diZF9hZHJfaVxbMTVcXSAgCittMV93YmRfYWRyX2lcWzE0XF0gIAorbTFfd2JkX2Fkcl9pXFsxM1xdICAKK20xX3diZF9hZHJfaVxbMTJcXSAgCittMV93YmRfYWRyX2lcWzExXF0gIAorbTFfd2JkX2Fkcl9pXFsxMFxdICAKK20xX3diZF9hZHJfaVxbOVxdICAgCittMV93YmRfYWRyX2lcWzhcXSAgIAorbTFfd2JkX2Fkcl9pXFs3XF0gICAKK20xX3diZF9hZHJfaVxbNlxdICAgCittMV93YmRfYWRyX2lcWzVcXSAgIAorbTFfd2JkX2Fkcl9pXFs0XF0gICAKK20xX3diZF9hZHJfaVxbM1xdICAgCittMV93YmRfYWRyX2lcWzJcXSAgIAorbTFfd2JkX2Fkcl9pXFsxXF0gICAKK20xX3diZF9hZHJfaVxbMFxdICAgCittMV93YmRfc2VsX2lcWzNcXSAgIAorbTFfd2JkX3NlbF9pXFsyXF0gICAKK20xX3diZF9zZWxfaVxbMVxdICAgCittMV93YmRfc2VsX2lcWzBcXSAgIAorbTFfd2JkX2RhdF9pXFszMVxdICAKK20xX3diZF9kYXRfaVxbMzBcXSAgCittMV93YmRfZGF0X2lcWzI5XF0gIAorbTFfd2JkX2RhdF9pXFsyOFxdICAKK20xX3diZF9kYXRfaVxbMjdcXSAgCittMV93YmRfZGF0X2lcWzI2XF0gIAorbTFfd2JkX2RhdF9pXFsyNVxdICAKK20xX3diZF9kYXRfaVxbMjRcXSAgCittMV93YmRfZGF0X2lcWzIzXF0gIAorbTFfd2JkX2RhdF9pXFsyMlxdICAKK20xX3diZF9kYXRfaVxbMjFcXSAgCittMV93YmRfZGF0X2lcWzIwXF0gIAorbTFfd2JkX2RhdF9pXFsxOVxdICAKK20xX3diZF9kYXRfaVxbMThcXSAgCittMV93YmRfZGF0X2lcWzE3XF0gIAorbTFfd2JkX2RhdF9pXFsxNlxdICAKK20xX3diZF9kYXRfaVxbMTVcXSAgCittMV93YmRfZGF0X2lcWzE0XF0gIAorbTFfd2JkX2RhdF9pXFsxM1xdICAKK20xX3diZF9kYXRfaVxbMTJcXSAgCittMV93YmRfZGF0X2lcWzExXF0gIAorbTFfd2JkX2RhdF9pXFsxMFxdICAKK20xX3diZF9kYXRfaVxbOVxdICAgCittMV93YmRfZGF0X2lcWzhcXSAgIAorbTFfd2JkX2RhdF9pXFs3XF0gICAKK20xX3diZF9kYXRfaVxbNlxdICAgCittMV93YmRfZGF0X2lcWzVcXSAgIAorbTFfd2JkX2RhdF9pXFs0XF0gICAKK20xX3diZF9kYXRfaVxbM1xdICAgCittMV93YmRfZGF0X2lcWzJcXSAgIAorbTFfd2JkX2RhdF9pXFsxXF0gICAKK20xX3diZF9kYXRfaVxbMFxdICAgCittMV93YmRfZGF0X29cWzMxXF0gIAorbTFfd2JkX2RhdF9vXFszMFxdICAKK20xX3diZF9kYXRfb1xbMjlcXSAgCittMV93YmRfZGF0X29cWzI4XF0gIAorbTFfd2JkX2RhdF9vXFsyN1xdICAKK20xX3diZF9kYXRfb1xbMjZcXSAgCittMV93YmRfZGF0X29cWzI1XF0gIAorbTFfd2JkX2RhdF9vXFsyNFxdICAKK20xX3diZF9kYXRfb1xbMjNcXSAgCittMV93YmRfZGF0X29cWzIyXF0gIAorbTFfd2JkX2RhdF9vXFsyMVxdICAKK20xX3diZF9kYXRfb1xbMjBcXSAgCittMV93YmRfZGF0X29cWzE5XF0gIAorbTFfd2JkX2RhdF9vXFsxOFxdICAKK20xX3diZF9kYXRfb1xbMTdcXSAgCittMV93YmRfZGF0X29cWzE2XF0gIAorbTFfd2JkX2RhdF9vXFsxNVxdICAKK20xX3diZF9kYXRfb1xbMTRcXSAgCittMV93YmRfZGF0X29cWzEzXF0gIAorbTFfd2JkX2RhdF9vXFsxMlxdICAKK20xX3diZF9kYXRfb1xbMTFcXSAgCittMV93YmRfZGF0X29cWzEwXF0gIAorbTFfd2JkX2RhdF9vXFs5XF0gICAKK20xX3diZF9kYXRfb1xbOFxdICAgCittMV93YmRfZGF0X29cWzdcXSAgIAorbTFfd2JkX2RhdF9vXFs2XF0gICAKK20xX3diZF9kYXRfb1xbNVxdICAgCittMV93YmRfZGF0X29cWzRcXSAgIAorbTFfd2JkX2RhdF9vXFszXF0gICAKK20xX3diZF9kYXRfb1xbMlxdICAgCittMV93YmRfZGF0X29cWzFcXSAgIAorbTFfd2JkX2RhdF9vXFswXF0gICAKK20xX3diZF9hY2tfbyAgICAgICAgCittMV93YmRfbGFja19vICAgICAgICAKK20xX3diZF9lcnJfbyAgICAgICAgCittMV93YmRfY3ljX2kgICAgICAgIAorCittMl93YmRfc3RiX2kgICAgICAgIDA2NTAgMCAyCittMl93YmRfd2VfaSAgICAgICAgIAorbTJfd2JkX2Fkcl9pXFszMVxdICAKK20yX3diZF9hZHJfaVxbMzBcXSAgCittMl93YmRfYWRyX2lcWzI5XF0gIAorbTJfd2JkX2Fkcl9pXFsyOFxdICAKK20yX3diZF9hZHJfaVxbMjdcXSAgCittMl93YmRfYWRyX2lcWzI2XF0gIAorbTJfd2JkX2Fkcl9pXFsyNVxdICAKK20yX3diZF9hZHJfaVxbMjRcXSAgCittMl93YmRfYWRyX2lcWzIzXF0gIAorbTJfd2JkX2Fkcl9pXFsyMlxdICAKK20yX3diZF9hZHJfaVxbMjFcXSAgCittMl93YmRfYWRyX2lcWzIwXF0gIAorbTJfd2JkX2Fkcl9pXFsxOVxdICAKK20yX3diZF9hZHJfaVxbMThcXSAgCittMl93YmRfYWRyX2lcWzE3XF0gIAorbTJfd2JkX2Fkcl9pXFsxNlxdICAKK20yX3diZF9hZHJfaVxbMTVcXSAgCittMl93YmRfYWRyX2lcWzE0XF0gIAorbTJfd2JkX2Fkcl9pXFsxM1xdICAKK20yX3diZF9hZHJfaVxbMTJcXSAgCittMl93YmRfYWRyX2lcWzExXF0gIAorbTJfd2JkX2Fkcl9pXFsxMFxdICAKK20yX3diZF9hZHJfaVxbOVxdICAgCittMl93YmRfYWRyX2lcWzhcXSAgIAorbTJfd2JkX2Fkcl9pXFs3XF0gICAKK20yX3diZF9hZHJfaVxbNlxdICAgCittMl93YmRfYWRyX2lcWzVcXSAgIAorbTJfd2JkX2Fkcl9pXFs0XF0gICAKK20yX3diZF9hZHJfaVxbM1xdICAgCittMl93YmRfYWRyX2lcWzJcXSAgIAorbTJfd2JkX2Fkcl9pXFsxXF0gICAKK20yX3diZF9hZHJfaVxbMFxdICAgCittMl93YmRfc2VsX2lcWzNcXSAgIAorbTJfd2JkX3NlbF9pXFsyXF0gICAKK20yX3diZF9zZWxfaVxbMVxdICAgCittMl93YmRfc2VsX2lcWzBcXSAgIAorbTJfd2JkX2JsX2lcWzlcXSAgIAorbTJfd2JkX2JsX2lcWzhcXSAgIAorbTJfd2JkX2JsX2lcWzdcXSAgIAorbTJfd2JkX2JsX2lcWzZcXSAgIAorbTJfd2JkX2JsX2lcWzVcXSAgIAorbTJfd2JkX2JsX2lcWzRcXSAgIAorbTJfd2JkX2JsX2lcWzNcXSAgIAorbTJfd2JkX2JsX2lcWzJcXSAgIAorbTJfd2JkX2JsX2lcWzFcXSAgIAorbTJfd2JkX2JsX2lcWzBcXSAgIAorbTJfd2JkX2JyeV9pCittMl93YmRfZGF0X2lcWzMxXF0gIAorbTJfd2JkX2RhdF9pXFszMFxdICAKK20yX3diZF9kYXRfaVxbMjlcXSAgCittMl93YmRfZGF0X2lcWzI4XF0gIAorbTJfd2JkX2RhdF9pXFsyN1xdICAKK20yX3diZF9kYXRfaVxbMjZcXSAgCittMl93YmRfZGF0X2lcWzI1XF0gIAorbTJfd2JkX2RhdF9pXFsyNFxdICAKK20yX3diZF9kYXRfaVxbMjNcXSAgCittMl93YmRfZGF0X2lcWzIyXF0gIAorbTJfd2JkX2RhdF9pXFsyMVxdICAKK20yX3diZF9kYXRfaVxbMjBcXSAgCittMl93YmRfZGF0X2lcWzE5XF0gIAorbTJfd2JkX2RhdF9pXFsxOFxdICAKK20yX3diZF9kYXRfaVxbMTdcXSAgCittMl93YmRfZGF0X2lcWzE2XF0gIAorbTJfd2JkX2RhdF9pXFsxNVxdICAKK20yX3diZF9kYXRfaVxbMTRcXSAgCittMl93YmRfZGF0X2lcWzEzXF0gIAorbTJfd2JkX2RhdF9pXFsxMlxdICAKK20yX3diZF9kYXRfaVxbMTFcXSAgCittMl93YmRfZGF0X2lcWzEwXF0gIAorbTJfd2JkX2RhdF9pXFs5XF0gICAKK20yX3diZF9kYXRfaVxbOFxdICAgCittMl93YmRfZGF0X2lcWzdcXSAgIAorbTJfd2JkX2RhdF9pXFs2XF0gICAKK20yX3diZF9kYXRfaVxbNVxdICAgCittMl93YmRfZGF0X2lcWzRcXSAgIAorbTJfd2JkX2RhdF9pXFszXF0gICAKK20yX3diZF9kYXRfaVxbMlxdICAgCittMl93YmRfZGF0X2lcWzFcXSAgIAorbTJfd2JkX2RhdF9pXFswXF0gICAKK20yX3diZF9kYXRfb1xbMzFcXSAgCittMl93YmRfZGF0X29cWzMwXF0gIAorbTJfd2JkX2RhdF9vXFsyOVxdICAKK20yX3diZF9kYXRfb1xbMjhcXSAgCittMl93YmRfZGF0X29cWzI3XF0gIAorbTJfd2JkX2RhdF9vXFsyNlxdICAKK20yX3diZF9kYXRfb1xbMjVcXSAgCittMl93YmRfZGF0X29cWzI0XF0gIAorbTJfd2JkX2RhdF9vXFsyM1xdICAKK20yX3diZF9kYXRfb1xbMjJcXSAgCittMl93YmRfZGF0X29cWzIxXF0gIAorbTJfd2JkX2RhdF9vXFsyMFxdICAKK20yX3diZF9kYXRfb1xbMTlcXSAgCittMl93YmRfZGF0X29cWzE4XF0gIAorbTJfd2JkX2RhdF9vXFsxN1xdICAKK20yX3diZF9kYXRfb1xbMTZcXSAgCittMl93YmRfZGF0X29cWzE1XF0gIAorbTJfd2JkX2RhdF9vXFsxNFxdICAKK20yX3diZF9kYXRfb1xbMTNcXSAgCittMl93YmRfZGF0X29cWzEyXF0gIAorbTJfd2JkX2RhdF9vXFsxMVxdICAKK20yX3diZF9kYXRfb1xbMTBcXSAgCittMl93YmRfZGF0X29cWzlcXSAgIAorbTJfd2JkX2RhdF9vXFs4XF0gICAKK20yX3diZF9kYXRfb1xbN1xdICAgCittMl93YmRfZGF0X29cWzZcXSAgIAorbTJfd2JkX2RhdF9vXFs1XF0gICAKK20yX3diZF9kYXRfb1xbNFxdICAgCittMl93YmRfZGF0X29cWzNcXSAgIAorbTJfd2JkX2RhdF9vXFsyXF0gICAKK20yX3diZF9kYXRfb1xbMVxdICAgCittMl93YmRfZGF0X29cWzBcXSAgIAorbTJfd2JkX2Fja19vICAgICAgICAKK20yX3diZF9sYWNrX28gICAgICAgIAorbTJfd2JkX2Vycl9vICAgICAgICAKK20yX3diZF9jeWNfaSAgICAgICAKKworbTNfd2JkX3N0Yl9pICAgICAgICAwODUwIDAgMgorbTNfd2JkX3dlX2kgICAgICAgICAKK20zX3diZF9hZHJfaVxbMzFcXSAgCittM193YmRfYWRyX2lcWzMwXF0gIAorbTNfd2JkX2Fkcl9pXFsyOVxdICAKK20zX3diZF9hZHJfaVxbMjhcXSAgCittM193YmRfYWRyX2lcWzI3XF0gIAorbTNfd2JkX2Fkcl9pXFsyNlxdICAKK20zX3diZF9hZHJfaVxbMjVcXSAgCittM193YmRfYWRyX2lcWzI0XF0gIAorbTNfd2JkX2Fkcl9pXFsyM1xdICAKK20zX3diZF9hZHJfaVxbMjJcXSAgCittM193YmRfYWRyX2lcWzIxXF0gIAorbTNfd2JkX2Fkcl9pXFsyMFxdICAKK20zX3diZF9hZHJfaVxbMTlcXSAgCittM193YmRfYWRyX2lcWzE4XF0gIAorbTNfd2JkX2Fkcl9pXFsxN1xdICAKK20zX3diZF9hZHJfaVxbMTZcXSAgCittM193YmRfYWRyX2lcWzE1XF0gIAorbTNfd2JkX2Fkcl9pXFsxNFxdICAKK20zX3diZF9hZHJfaVxbMTNcXSAgCittM193YmRfYWRyX2lcWzEyXF0gIAorbTNfd2JkX2Fkcl9pXFsxMVxdICAKK20zX3diZF9hZHJfaVxbMTBcXSAgCittM193YmRfYWRyX2lcWzlcXSAgIAorbTNfd2JkX2Fkcl9pXFs4XF0gICAKK20zX3diZF9hZHJfaVxbN1xdICAgCittM193YmRfYWRyX2lcWzZcXSAgIAorbTNfd2JkX2Fkcl9pXFs1XF0gICAKK20zX3diZF9hZHJfaVxbNFxdICAgCittM193YmRfYWRyX2lcWzNcXSAgIAorbTNfd2JkX2Fkcl9pXFsyXF0gICAKK20zX3diZF9hZHJfaVxbMVxdICAgCittM193YmRfYWRyX2lcWzBcXSAgIAorbTNfd2JkX3NlbF9pXFszXF0gICAKK20zX3diZF9zZWxfaVxbMlxdICAgCittM193YmRfc2VsX2lcWzFcXSAgIAorbTNfd2JkX3NlbF9pXFswXF0gICAKK20zX3diZF9ibF9pXFs5XF0gICAKK20zX3diZF9ibF9pXFs4XF0gICAKK20zX3diZF9ibF9pXFs3XF0gICAKK20zX3diZF9ibF9pXFs2XF0gICAKK20zX3diZF9ibF9pXFs1XF0gICAKK20zX3diZF9ibF9pXFs0XF0gICAKK20zX3diZF9ibF9pXFszXF0gICAKK20zX3diZF9ibF9pXFsyXF0gICAKK20zX3diZF9ibF9pXFsxXF0gICAKK20zX3diZF9ibF9pXFswXF0gICAKK20zX3diZF9icnlfaQorbTNfd2JkX2RhdF9vXFszMVxdICAKK20zX3diZF9kYXRfb1xbMzBcXSAgCittM193YmRfZGF0X29cWzI5XF0gIAorbTNfd2JkX2RhdF9vXFsyOFxdICAKK20zX3diZF9kYXRfb1xbMjdcXSAgCittM193YmRfZGF0X29cWzI2XF0gIAorbTNfd2JkX2RhdF9vXFsyNVxdICAKK20zX3diZF9kYXRfb1xbMjRcXSAgCittM193YmRfZGF0X29cWzIzXF0gIAorbTNfd2JkX2RhdF9vXFsyMlxdICAKK20zX3diZF9kYXRfb1xbMjFcXSAgCittM193YmRfZGF0X29cWzIwXF0gIAorbTNfd2JkX2RhdF9vXFsxOVxdICAKK20zX3diZF9kYXRfb1xbMThcXSAgCittM193YmRfZGF0X29cWzE3XF0gIAorbTNfd2JkX2RhdF9vXFsxNlxdICAKK20zX3diZF9kYXRfb1xbMTVcXSAgCittM193YmRfZGF0X29cWzE0XF0gIAorbTNfd2JkX2RhdF9vXFsxM1xdICAKK20zX3diZF9kYXRfb1xbMTJcXSAgCittM193YmRfZGF0X29cWzExXF0gIAorbTNfd2JkX2RhdF9vXFsxMFxdICAKK20zX3diZF9kYXRfb1xbOVxdICAgCittM193YmRfZGF0X29cWzhcXSAgIAorbTNfd2JkX2RhdF9vXFs3XF0gICAKK20zX3diZF9kYXRfb1xbNlxdICAgCittM193YmRfZGF0X29cWzVcXSAgIAorbTNfd2JkX2RhdF9vXFs0XF0gICAKK20zX3diZF9kYXRfb1xbM1xdICAgCittM193YmRfZGF0X29cWzJcXSAgIAorbTNfd2JkX2RhdF9vXFsxXF0gICAKK20zX3diZF9kYXRfb1xbMFxdICAgCittM193YmRfYWNrX28gICAgICAgIAorbTNfd2JkX2xhY2tfbyAgICAgICAgCittM193YmRfZXJyX28gICAgICAgIAorbTNfd2JkX2N5Y19pICAgICAgIAorCitjaF9kYXRhX291dFxbMjNcXSAgIDE5NTAgMCAyCitjaF9kYXRhX291dFxbMjJcXQorY2hfZGF0YV9vdXRcWzIxXF0KK2NoX2RhdGFfb3V0XFsyMFxdCitjaF9jbGtfb3V0XFs0XF0gICAgIAorCitzM193YmRfY3ljX28gICAgICAgIDE5NzUgMCAyCitzM193YmRfc3RiX28gICAgICAgIAorczNfd2JkX3dlX28gICAgICAgICAKK3MzX3diZF9hZHJfb1xbMTJcXSAgIAorczNfd2JkX2Fkcl9vXFsxMVxdICAgCitzM193YmRfYWRyX29cWzEwXF0gICAKK3MzX3diZF9hZHJfb1xbOVxdICAgCitzM193YmRfYWRyX29cWzhcXSAgIAorczNfd2JkX2Fkcl9vXFs3XF0gICAKK3MzX3diZF9hZHJfb1xbNlxdICAgCitzM193YmRfYWRyX29cWzVcXSAgIAorczNfd2JkX2Fkcl9vXFs0XF0gICAKK3MzX3diZF9hZHJfb1xbM1xdICAgCitzM193YmRfYWRyX29cWzJcXSAgIAorczNfd2JkX2Fkcl9vXFsxXF0gICAKK3MzX3diZF9hZHJfb1xbMFxdICAgCitzM193YmRfZGF0X29cWzMxXF0gIAorczNfd2JkX2RhdF9vXFszMFxdICAKK3MzX3diZF9kYXRfb1xbMjlcXSAgCitzM193YmRfZGF0X29cWzI4XF0gIAorczNfd2JkX2RhdF9vXFsyN1xdICAKK3MzX3diZF9kYXRfb1xbMjZcXSAgCitzM193YmRfZGF0X29cWzI1XF0gIAorczNfd2JkX2RhdF9vXFsyNFxdICAKK3MzX3diZF9kYXRfb1xbMjNcXSAgCitzM193YmRfZGF0X29cWzIyXF0gIAorczNfd2JkX2RhdF9vXFsyMVxdICAKK3MzX3diZF9kYXRfb1xbMjBcXSAgCitzM193YmRfZGF0X29cWzE5XF0gIAorczNfd2JkX2RhdF9vXFsxOFxdICAKK3MzX3diZF9kYXRfb1xbMTdcXSAgCitzM193YmRfZGF0X29cWzE2XF0gIAorczNfd2JkX2RhdF9vXFsxNVxdICAKK3MzX3diZF9kYXRfb1xbMTRcXSAgCitzM193YmRfZGF0X29cWzEzXF0gIAorczNfd2JkX2RhdF9vXFsxMlxdICAKK3MzX3diZF9kYXRfb1xbMTFcXSAgCitzM193YmRfZGF0X29cWzEwXF0gIAorczNfd2JkX2RhdF9vXFs5XF0gICAKK3MzX3diZF9kYXRfb1xbOFxdICAgCitzM193YmRfZGF0X29cWzdcXSAgIAorczNfd2JkX2RhdF9vXFs2XF0gICAKK3MzX3diZF9kYXRfb1xbNVxdICAgCitzM193YmRfZGF0X29cWzRcXSAgIAorczNfd2JkX2RhdF9vXFszXF0gICAKK3MzX3diZF9kYXRfb1xbMlxdICAgCitzM193YmRfZGF0X29cWzFcXSAgIAorczNfd2JkX2RhdF9vXFswXF0gICAKK3MzX3diZF9zZWxfb1xbM1xdICAgCitzM193YmRfc2VsX29cWzJcXSAgIAorczNfd2JkX3NlbF9vXFsxXF0gICAKK3MzX3diZF9zZWxfb1xbMFxdICAgCitzM193YmRfYmxfb1xbOVxdICAgCitzM193YmRfYmxfb1xbOFxdICAgCitzM193YmRfYmxfb1xbN1xdICAgCitzM193YmRfYmxfb1xbNlxdICAgCitzM193YmRfYmxfb1xbNVxdICAgCitzM193YmRfYmxfb1xbNFxdICAgCitzM193YmRfYmxfb1xbM1xdICAgCitzM193YmRfYmxfb1xbMlxdICAgCitzM193YmRfYmxfb1xbMVxdICAgCitzM193YmRfYmxfb1xbMFxdICAgCitzM193YmRfYnJ5X28KK3MzX3diZF9kYXRfaVxbMzFcXSAgCitzM193YmRfZGF0X2lcWzMwXF0gIAorczNfd2JkX2RhdF9pXFsyOVxdICAKK3MzX3diZF9kYXRfaVxbMjhcXSAgCitzM193YmRfZGF0X2lcWzI3XF0gIAorczNfd2JkX2RhdF9pXFsyNlxdICAKK3MzX3diZF9kYXRfaVxbMjVcXSAgCitzM193YmRfZGF0X2lcWzI0XF0gIAorczNfd2JkX2RhdF9pXFsyM1xdICAKK3MzX3diZF9kYXRfaVxbMjJcXSAKK3MzX3diZF9kYXRfaVxbMjFcXSAgCitzM193YmRfZGF0X2lcWzIwXF0gIAorczNfd2JkX2RhdF9pXFsxOVxdICAKK3MzX3diZF9kYXRfaVxbMThcXSAgCitzM193YmRfZGF0X2lcWzE3XF0gIAorczNfd2JkX2RhdF9pXFsxNlxdICAKK3MzX3diZF9kYXRfaVxbMTVcXSAgCitzM193YmRfZGF0X2lcWzE0XF0gIAorczNfd2JkX2RhdF9pXFsxM1xdICAKK3MzX3diZF9kYXRfaVxbMTJcXSAgCitzM193YmRfZGF0X2lcWzExXF0gIAorczNfd2JkX2RhdF9pXFsxMFxdICAKK3MzX3diZF9kYXRfaVxbOVxdICAgCitzM193YmRfZGF0X2lcWzhcXSAgIAorczNfd2JkX2RhdF9pXFs3XF0gICAKK3MzX3diZF9kYXRfaVxbNlxdICAgCitzM193YmRfZGF0X2lcWzVcXSAgIAorczNfd2JkX2RhdF9pXFs0XF0gICAKK3MzX3diZF9kYXRfaVxbM1xdICAgCitzM193YmRfZGF0X2lcWzJcXSAgIAorczNfd2JkX2RhdF9pXFsxXF0gICAKK3MzX3diZF9kYXRfaVxbMFxdICAgCitzM193YmRfYWNrX2kgICAgICAgIAorczNfd2JkX2xhY2tfaSAgICAgICAgCisKK2NoX2RhdGFfaW5cWzExNVxdICAgMjExMCAwIDIKK2NoX2RhdGFfaW5cWzExNFxdIAorY2hfZGF0YV9pblxbMTEzXF0gCitjaF9kYXRhX2luXFsxMTJcXSAKK2NoX2RhdGFfaW5cWzExMVxdIAorY2hfZGF0YV9pblxbMTEwXF0gCitjaF9kYXRhX2luXFsxMDlcXSAKK2NoX2RhdGFfaW5cWzEwOFxdIAorY2hfZGF0YV9pblxbMTA3XF0gCitjaF9kYXRhX2luXFsxMDZcXSAKK2NoX2RhdGFfaW5cWzEwNVxdIAorY2hfZGF0YV9pblxbMTA0XF0gCitjaF9kYXRhX2luXFsxMDNcXSAKK2NoX2RhdGFfaW5cWzEwMlxdIAorY2hfZGF0YV9pblxbMTAxXF0gCitjaF9kYXRhX2luXFsxMDBcXSAKK2NoX2RhdGFfaW5cWzk5XF0gCitjaF9kYXRhX2luXFs5OFxdIAorY2hfZGF0YV9pblxbOTdcXSAKK2NoX2RhdGFfaW5cWzk2XF0gCitjaF9kYXRhX2luXFs5NVxdIAorY2hfZGF0YV9pblxbOTRcXSAKK2NoX2RhdGFfaW5cWzkzXF0gCitjaF9kYXRhX2luXFs5MlxdIAorY2hfZGF0YV9pblxbOTFcXSAKK2NoX2RhdGFfaW5cWzkwXF0gCitjaF9kYXRhX291dFxbODlcXSAKK2NoX2RhdGFfb3V0XFs4OFxdIAorY2hfZGF0YV9vdXRcWzg3XF0gCitjaF9kYXRhX291dFxbODZcXSAKK2NoX2RhdGFfb3V0XFs4NVxdIAorCisKKworY2hfY2xrX291dFxbNVxdICAgIDIyMDAgMCAyCitjaF9jbGtfb3V0XFs2XF0KK2NoX2Nsa19vdXRcWzdcXQorY2hfZGF0YV9vdXRcWzI0XF0KK2NoX2RhdGFfb3V0XFsyNVxdCitjaF9kYXRhX291dFxbMjZcXQorY2hfZGF0YV9vdXRcWzI3XF0KK2NoX2RhdGFfb3V0XFsyOFxdCitjaF9kYXRhX291dFxbMjlcXQorY2hfZGF0YV9vdXRcWzMwXF0KK2NoX2RhdGFfb3V0XFszMVxdCitjaF9kYXRhX291dFxbMzJcXQorY2hfZGF0YV9vdXRcWzMzXF0KK2NoX2RhdGFfb3V0XFszNFxdCitjaF9kYXRhX291dFxbMzVcXQorCisjRQorY2hfZGF0YV9vdXRcWzE5XF0gICAwMDAwIDAgIDIgIAorY2hfZGF0YV9vdXRcWzE4XF0KK2NoX2RhdGFfb3V0XFsxN1xdCitjaF9kYXRhX291dFxbMTZcXQorY2hfZGF0YV9vdXRcWzdcXSAgICAKK2NoX2RhdGFfb3V0XFs2XF0KK2NoX2RhdGFfb3V0XFs1XF0KK2NoX2RhdGFfb3V0XFs0XF0KK2NoX2Nsa19vdXRcWzFcXQorCitzMF93YmRfc3RiX28gICAgICAgICAwMTAwIDAgMgorczBfd2JkX3dlX28gICAgICAgICAKK3MwX3diZF9hZHJfb1xbMzFcXSAgCitzMF93YmRfYWRyX29cWzMwXF0gIAorczBfd2JkX2Fkcl9vXFsyOVxdICAKK3MwX3diZF9hZHJfb1xbMjhcXSAgCitzMF93YmRfYWRyX29cWzI3XF0gIAorczBfd2JkX2Fkcl9vXFsyNlxdICAKK3MwX3diZF9hZHJfb1xbMjVcXSAgCitzMF93YmRfYWRyX29cWzI0XF0gIAorczBfd2JkX2Fkcl9vXFsyM1xdICAKK3MwX3diZF9hZHJfb1xbMjJcXSAgCitzMF93YmRfYWRyX29cWzIxXF0gIAorczBfd2JkX2Fkcl9vXFsyMFxdICAKK3MwX3diZF9hZHJfb1xbMTlcXSAgCitzMF93YmRfYWRyX29cWzE4XF0gIAorczBfd2JkX2Fkcl9vXFsxN1xdICAKK3MwX3diZF9hZHJfb1xbMTZcXSAgCitzMF93YmRfYWRyX29cWzE1XF0gIAorczBfd2JkX2Fkcl9vXFsxNFxdICAKK3MwX3diZF9hZHJfb1xbMTNcXSAgCitzMF93YmRfYWRyX29cWzEyXF0gIAorczBfd2JkX2Fkcl9vXFsxMVxdICAKK3MwX3diZF9hZHJfb1xbMTBcXSAgCitzMF93YmRfYWRyX29cWzlcXSAgIAorczBfd2JkX2Fkcl9vXFs4XF0gICAKK3MwX3diZF9hZHJfb1xbN1xdICAgCitzMF93YmRfYWRyX29cWzZcXSAgIAorczBfd2JkX2Fkcl9vXFs1XF0gICAKK3MwX3diZF9hZHJfb1xbNFxdICAgCitzMF93YmRfYWRyX29cWzNcXSAgIAorczBfd2JkX2Fkcl9vXFsyXF0gICAKK3MwX3diZF9hZHJfb1xbMVxdICAgCitzMF93YmRfYWRyX29cWzBcXSAgIAorczBfd2JkX3NlbF9vXFszXF0gICAKK3MwX3diZF9zZWxfb1xbMlxdICAgCitzMF93YmRfc2VsX29cWzFcXSAgIAorczBfd2JkX3NlbF9vXFswXF0gICAKK3MwX3diZF9ibF9vXFs5XF0gICAKK3MwX3diZF9ibF9vXFs4XF0gICAKK3MwX3diZF9ibF9vXFs3XF0gICAKK3MwX3diZF9ibF9vXFs2XF0gICAKK3MwX3diZF9ibF9vXFs1XF0gICAKK3MwX3diZF9ibF9vXFs0XF0gICAKK3MwX3diZF9ibF9vXFszXF0gICAKK3MwX3diZF9ibF9vXFsyXF0gICAKK3MwX3diZF9ibF9vXFsxXF0gICAKK3MwX3diZF9ibF9vXFswXF0gICAKK3MwX3diZF9icnlfbworczBfd2JkX2RhdF9vXFszMVxdICAKK3MwX3diZF9kYXRfb1xbMzBcXSAgCitzMF93YmRfZGF0X29cWzI5XF0gIAorczBfd2JkX2RhdF9vXFsyOFxdICAKK3MwX3diZF9kYXRfb1xbMjdcXSAgCitzMF93YmRfZGF0X29cWzI2XF0gIAorczBfd2JkX2RhdF9vXFsyNVxdICAKK3MwX3diZF9kYXRfb1xbMjRcXSAgCitzMF93YmRfZGF0X29cWzIzXF0gIAorczBfd2JkX2RhdF9vXFsyMlxdICAKK3MwX3diZF9kYXRfb1xbMjFcXSAgCitzMF93YmRfZGF0X29cWzIwXF0gIAorczBfd2JkX2RhdF9vXFsxOVxdICAKK3MwX3diZF9kYXRfb1xbMThcXSAgCitzMF93YmRfZGF0X29cWzE3XF0gIAorczBfd2JkX2RhdF9vXFsxNlxdICAKK3MwX3diZF9kYXRfb1xbMTVcXSAgCitzMF93YmRfZGF0X29cWzE0XF0gIAorczBfd2JkX2RhdF9vXFsxM1xdICAKK3MwX3diZF9kYXRfb1xbMTJcXSAgCitzMF93YmRfZGF0X29cWzExXF0gIAorczBfd2JkX2RhdF9vXFsxMFxdICAKK3MwX3diZF9kYXRfb1xbOVxdICAgCitzMF93YmRfZGF0X29cWzhcXSAgIAorczBfd2JkX2RhdF9vXFs3XF0gICAKK3MwX3diZF9kYXRfb1xbNlxdICAgCitzMF93YmRfZGF0X29cWzVcXSAgIAorczBfd2JkX2RhdF9vXFs0XF0gICAKK3MwX3diZF9kYXRfb1xbM1xdICAgCitzMF93YmRfZGF0X29cWzJcXSAgIAorczBfd2JkX2RhdF9vXFsxXF0gICAKK3MwX3diZF9kYXRfb1xbMFxdICAgCitzMF93YmRfZGF0X2lcWzMxXF0gIAorczBfd2JkX2RhdF9pXFszMFxdICAKK3MwX3diZF9kYXRfaVxbMjlcXSAgCitzMF93YmRfZGF0X2lcWzI4XF0gIAorczBfd2JkX2RhdF9pXFsyN1xdICAKK3MwX3diZF9kYXRfaVxbMjZcXSAgCitzMF93YmRfZGF0X2lcWzI1XF0gIAorczBfd2JkX2RhdF9pXFsyNFxdICAKK3MwX3diZF9kYXRfaVxbMjNcXSAgCitzMF93YmRfZGF0X2lcWzIyXF0gIAorczBfd2JkX2RhdF9pXFsyMVxdICAKK3MwX3diZF9kYXRfaVxbMjBcXSAgCitzMF93YmRfZGF0X2lcWzE5XF0gIAorczBfd2JkX2RhdF9pXFsxOFxdICAKK3MwX3diZF9kYXRfaVxbMTdcXSAgCitzMF93YmRfZGF0X2lcWzE2XF0gIAorczBfd2JkX2RhdF9pXFsxNVxdICAKK3MwX3diZF9kYXRfaVxbMTRcXSAgCitzMF93YmRfZGF0X2lcWzEzXF0gIAorczBfd2JkX2RhdF9pXFsxMlxdICAKK3MwX3diZF9kYXRfaVxbMTFcXSAgCitzMF93YmRfZGF0X2lcWzEwXF0gIAorczBfd2JkX2RhdF9pXFs5XF0gICAKK3MwX3diZF9kYXRfaVxbOFxdICAgCitzMF93YmRfZGF0X2lcWzdcXSAgIAorczBfd2JkX2RhdF9pXFs2XF0gICAKK3MwX3diZF9kYXRfaVxbNVxdICAgCitzMF93YmRfZGF0X2lcWzRcXSAgIAorczBfd2JkX2RhdF9pXFszXF0gICAKK3MwX3diZF9kYXRfaVxbMlxdICAgCitzMF93YmRfZGF0X2lcWzFcXSAgIAorczBfd2JkX2RhdF9pXFswXF0gICAKK3MwX3diZF9hY2tfaSAgICAgICAgCitzMF93YmRfbGFja19pICAgICAgICAKK3MwX3diZF9jeWNfbyAgICAgICAgCisKKworY2hfZGF0YV9vdXRcWzExXF0gICAgMDcwMCAwICAyICAKK2NoX2RhdGFfb3V0XFsxMFxdCitjaF9kYXRhX291dFxbOVxdCitjaF9kYXRhX291dFxbOFxdCitjaF9jbGtfb3V0XFsyXF0KKworczFfd2JkX3N0Yl9vICAgICAgICAgIDA4MDAgMCAyCitzMV93YmRfd2VfbyAgICAgICAgIAorczFfd2JkX2Fkcl9vXFs3XF0gICAKK3MxX3diZF9hZHJfb1xbNlxdICAgCitzMV93YmRfYWRyX29cWzVcXSAgIAorczFfd2JkX2Fkcl9vXFs0XF0gICAKK3MxX3diZF9hZHJfb1xbM1xdICAgCitzMV93YmRfYWRyX29cWzJcXSAgIAorczFfd2JkX2Fkcl9vXFsxXF0gICAKK3MxX3diZF9hZHJfb1xbMFxdICAgCitzMV93YmRfc2VsX29cWzNcXSAgIAorczFfd2JkX3NlbF9vXFsyXF0gICAKK3MxX3diZF9zZWxfb1xbMVxdICAgCitzMV93YmRfc2VsX29cWzBcXSAgIAorczFfd2JkX2RhdF9vXFszMVxdICAKK3MxX3diZF9kYXRfb1xbMzBcXSAgCitzMV93YmRfZGF0X29cWzI5XF0gIAorczFfd2JkX2RhdF9vXFsyOFxdICAKK3MxX3diZF9kYXRfb1xbMjdcXSAgCitzMV93YmRfZGF0X29cWzI2XF0gIAorczFfd2JkX2RhdF9vXFsyNVxdICAKK3MxX3diZF9kYXRfb1xbMjRcXSAgCitzMV93YmRfZGF0X29cWzIzXF0gIAorczFfd2JkX2RhdF9vXFsyMlxdICAKK3MxX3diZF9kYXRfb1xbMjFcXSAgCitzMV93YmRfZGF0X29cWzIwXF0gIAorczFfd2JkX2RhdF9vXFsxOVxdICAKK3MxX3diZF9kYXRfb1xbMThcXSAgCitzMV93YmRfZGF0X29cWzE3XF0gIAorczFfd2JkX2RhdF9vXFsxNlxdICAKK3MxX3diZF9kYXRfb1xbMTVcXSAgCitzMV93YmRfZGF0X29cWzE0XF0gIAorczFfd2JkX2RhdF9vXFsxM1xdICAKK3MxX3diZF9kYXRfb1xbMTJcXSAgCitzMV93YmRfZGF0X29cWzExXF0gIAorczFfd2JkX2RhdF9vXFsxMFxdICAKK3MxX3diZF9kYXRfb1xbOVxdICAgCitzMV93YmRfZGF0X29cWzhcXSAgIAorczFfd2JkX2RhdF9vXFs3XF0gICAKK3MxX3diZF9kYXRfb1xbNlxdICAgCitzMV93YmRfZGF0X29cWzVcXSAgIAorczFfd2JkX2RhdF9vXFs0XF0gICAKK3MxX3diZF9kYXRfb1xbM1xdICAgCitzMV93YmRfZGF0X29cWzJcXSAgIAorczFfd2JkX2RhdF9vXFsxXF0gICAKK3MxX3diZF9kYXRfb1xbMFxdICAgCitzMV93YmRfZGF0X2lcWzMxXF0gIAorczFfd2JkX2RhdF9pXFszMFxdICAKK3MxX3diZF9kYXRfaVxbMjlcXSAgCitzMV93YmRfZGF0X2lcWzI4XF0gIAorczFfd2JkX2RhdF9pXFsyN1xdICAKK3MxX3diZF9kYXRfaVxbMjZcXSAgCitzMV93YmRfZGF0X2lcWzI1XF0gIAorczFfd2JkX2RhdF9pXFsyNFxdICAKK3MxX3diZF9kYXRfaVxbMjNcXSAgCitzMV93YmRfZGF0X2lcWzIyXF0gIAorczFfd2JkX2RhdF9pXFsyMVxdICAKK3MxX3diZF9kYXRfaVxbMjBcXSAgCitzMV93YmRfZGF0X2lcWzE5XF0gIAorczFfd2JkX2RhdF9pXFsxOFxdICAKK3MxX3diZF9kYXRfaVxbMTdcXSAgCitzMV93YmRfZGF0X2lcWzE2XF0gIAorczFfd2JkX2RhdF9pXFsxNVxdICAKK3MxX3diZF9kYXRfaVxbMTRcXSAgCitzMV93YmRfZGF0X2lcWzEzXF0gIAorczFfd2JkX2RhdF9pXFsxMlxdICAKK3MxX3diZF9kYXRfaVxbMTFcXSAgCitzMV93YmRfZGF0X2lcWzEwXF0gIAorczFfd2JkX2RhdF9pXFs5XF0gICAKK3MxX3diZF9kYXRfaVxbOFxdICAgCitzMV93YmRfZGF0X2lcWzdcXSAgIAorczFfd2JkX2RhdF9pXFs2XF0gICAKK3MxX3diZF9kYXRfaVxbNVxdICAgCitzMV93YmRfZGF0X2lcWzRcXSAgIAorczFfd2JkX2RhdF9pXFszXF0gICAKK3MxX3diZF9kYXRfaVxbMlxdICAgCitzMV93YmRfZGF0X2lcWzFcXSAgIAorczFfd2JkX2RhdF9pXFswXF0gICAKK3MxX3diZF9hY2tfaSAgICAgICAgCitzMV93YmRfY3ljX28gIAorCitjaF9kYXRhX291dFxbMTE1XF0gIDE2MDAgMCAyICAKK2NoX2RhdGFfb3V0XFsxMTRcXQorY2hfZGF0YV9vdXRcWzExM1xdCitjaF9kYXRhX291dFxbMTEyXF0KK2NoX2RhdGFfb3V0XFsxMTFcXQorY2hfZGF0YV9vdXRcWzExMFxdCitjaF9kYXRhX291dFxbMTA5XF0KK2NoX2RhdGFfb3V0XFsxMDhcXQorY2hfZGF0YV9vdXRcWzEwN1xdCitjaF9kYXRhX291dFxbMTA2XF0KK2NoX2RhdGFfb3V0XFsxMDVcXQorY2hfZGF0YV9vdXRcWzEwNFxdCitjaF9kYXRhX291dFxbMTAzXF0KK2NoX2RhdGFfb3V0XFsxMDJcXQorY2hfZGF0YV9vdXRcWzEwMVxdCitjaF9kYXRhX291dFxbMTAwXF0KK2NoX2RhdGFfb3V0XFs5OVxdCitjaF9kYXRhX291dFxbOThcXQorY2hfZGF0YV9vdXRcWzk3XF0KK2NoX2RhdGFfb3V0XFs5NlxdCitjaF9kYXRhX291dFxbOTVcXQorY2hfZGF0YV9vdXRcWzk0XF0KK2NoX2RhdGFfb3V0XFs5M1xdCitjaF9kYXRhX291dFxbOTJcXQorY2hfZGF0YV9vdXRcWzkxXF0KK2NoX2RhdGFfb3V0XFs5MFxdCitjaF9kYXRhX2luXFs4OVxdCitjaF9kYXRhX2luXFs4OFxdCitjaF9kYXRhX2luXFs4N1xdCitjaF9kYXRhX2luXFs4NlxdCitjaF9kYXRhX2luXFs4NVxdCisKK2NoX2RhdGFfaW5cWzg0XF0KK2NoX2RhdGFfaW5cWzgzXF0KK2NoX2RhdGFfaW5cWzgyXF0KK2NoX2RhdGFfaW5cWzgxXF0KK2NoX2RhdGFfaW5cWzgwXF0KK2NoX2RhdGFfaW5cWzc5XF0KK2NoX2RhdGFfaW5cWzc4XF0KK2NoX2RhdGFfaW5cWzc3XF0KK2NoX2RhdGFfaW5cWzc2XF0gIAorY2hfZGF0YV9pblxbNzVcXQorY2hfZGF0YV9pblxbNzRcXQorY2hfZGF0YV9pblxbNzNcXQorY2hfZGF0YV9pblxbNzJcXQorY2hfZGF0YV9pblxbNzFcXQorY2hfZGF0YV9pblxbNzBcXQorY2hfZGF0YV9pblxbNjlcXQorY2hfZGF0YV9pblxbNjhcXQorY2hfZGF0YV9pblxbNjdcXQorY2hfZGF0YV9pblxbNjZcXQorY2hfZGF0YV9pblxbNjVcXQorY2hfZGF0YV9pblxbNjRcXQorY2hfZGF0YV9pblxbNjNcXQorY2hfZGF0YV9pblxbNjJcXQorY2hfZGF0YV9pblxbNjFcXQorY2hfZGF0YV9pblxbNjBcXQorY2hfZGF0YV9pblxbNTlcXQorY2hfZGF0YV9pblxbNThcXQorY2hfZGF0YV9pblxbNTdcXQorY2hfZGF0YV9pblxbNTZcXQorY2hfZGF0YV9pblxbNTVcXQorY2hfZGF0YV9pblxbNTRcXQorY2hfZGF0YV9pblxbNTNcXQorY2hfZGF0YV9pblxbNTJcXQorY2hfZGF0YV9pblxbNTFcXQorY2hfZGF0YV9pblxbNTBcXQorY2hfZGF0YV9pblxbNDlcXQorY2hfZGF0YV9pblxbNDhcXQorY2hfZGF0YV9pblxbNDdcXQorY2hfZGF0YV9pblxbNDZcXQorY2hfZGF0YV9pblxbNDVcXQorY2hfZGF0YV9pblxbNDRcXQorY2hfZGF0YV9pblxbNDNcXQorY2hfZGF0YV9pblxbNDJcXQorY2hfZGF0YV9pblxbNDFcXQorY2hfZGF0YV9pblxbNDBcXQorY2hfZGF0YV9pblxbMzlcXQorY2hfZGF0YV9pblxbMzhcXQorY2hfZGF0YV9pblxbMzdcXQorY2hfZGF0YV9pblxbMzZcXQorCitjaF9kYXRhX291dFxbMTVcXSAgICAKK2NoX2RhdGFfb3V0XFsxNFxdCitjaF9kYXRhX291dFxbMTNcXQorY2hfZGF0YV9vdXRcWzEyXF0KK2NoX2Nsa19vdXRcWzNcXQorCitzMl93YmRfc3RiX28gICAgICAgICAxODAwIDAgMgorczJfd2JkX3dlX28gICAgICAgICAKK3MyX3diZF9hZHJfb1xbN1xdICAgCitzMl93YmRfYWRyX29cWzZcXSAgIAorczJfd2JkX2Fkcl9vXFs1XF0gICAKK3MyX3diZF9hZHJfb1xbNFxdICAgCitzMl93YmRfYWRyX29cWzNcXSAgIAorczJfd2JkX2Fkcl9vXFsyXF0gICAKK3MyX3diZF9hZHJfb1xbMVxdICAgCitzMl93YmRfYWRyX29cWzBcXSAgIAorczJfd2JkX3NlbF9vXFszXF0gICAgICAgIAorczJfd2JkX3NlbF9vXFsyXF0gICAgICAgIAorczJfd2JkX3NlbF9vXFsxXF0gICAgICAgIAorczJfd2JkX3NlbF9vXFswXF0gICAgICAgIAorczJfd2JkX2RhdF9vXFszMVxdICAgCitzMl93YmRfZGF0X29cWzMwXF0gICAKK3MyX3diZF9kYXRfb1xbMjlcXSAgIAorczJfd2JkX2RhdF9vXFsyOFxdICAgCitzMl93YmRfZGF0X29cWzI3XF0gICAKK3MyX3diZF9kYXRfb1xbMjZcXSAgIAorczJfd2JkX2RhdF9vXFsyNVxdICAgCitzMl93YmRfZGF0X29cWzI0XF0gICAKK3MyX3diZF9kYXRfb1xbMjNcXSAgIAorczJfd2JkX2RhdF9vXFsyMlxdICAgCitzMl93YmRfZGF0X29cWzIxXF0gICAKK3MyX3diZF9kYXRfb1xbMjBcXSAgIAorczJfd2JkX2RhdF9vXFsxOVxdICAgCitzMl93YmRfZGF0X29cWzE4XF0gICAKK3MyX3diZF9kYXRfb1xbMTdcXSAgIAorczJfd2JkX2RhdF9vXFsxNlxdICAgCitzMl93YmRfZGF0X29cWzE1XF0gICAKK3MyX3diZF9kYXRfb1xbMTRcXSAgIAorczJfd2JkX2RhdF9vXFsxM1xdICAgCitzMl93YmRfZGF0X29cWzEyXF0gICAKK3MyX3diZF9kYXRfb1xbMTFcXSAgIAorczJfd2JkX2RhdF9vXFsxMFxdICAgCitzMl93YmRfZGF0X29cWzlcXSAgIAorczJfd2JkX2RhdF9vXFs4XF0gICAKK3MyX3diZF9kYXRfb1xbN1xdICAgCitzMl93YmRfZGF0X29cWzZcXSAgIAorczJfd2JkX2RhdF9vXFs1XF0gICAKK3MyX3diZF9kYXRfb1xbNFxdICAgCitzMl93YmRfZGF0X29cWzNcXSAgIAorczJfd2JkX2RhdF9vXFsyXF0gICAKK3MyX3diZF9kYXRfb1xbMVxdICAgCitzMl93YmRfZGF0X29cWzBcXSAgIAorczJfd2JkX2RhdF9pXFszMVxdICAgCitzMl93YmRfZGF0X2lcWzMwXF0gICAKK3MyX3diZF9kYXRfaVxbMjlcXSAgIAorczJfd2JkX2RhdF9pXFsyOFxdICAgCitzMl93YmRfZGF0X2lcWzI3XF0gICAKK3MyX3diZF9kYXRfaVxbMjZcXSAgIAorczJfd2JkX2RhdF9pXFsyNVxdICAgCitzMl93YmRfZGF0X2lcWzI0XF0gICAKK3MyX3diZF9kYXRfaVxbMjNcXSAgIAorczJfd2JkX2RhdF9pXFsyMlxdICAgCitzMl93YmRfZGF0X2lcWzIxXF0gICAKK3MyX3diZF9kYXRfaVxbMjBcXSAgIAorczJfd2JkX2RhdF9pXFsxOVxdICAgCitzMl93YmRfZGF0X2lcWzE4XF0gICAKK3MyX3diZF9kYXRfaVxbMTdcXSAgIAorczJfd2JkX2RhdF9pXFsxNlxdICAgCitzMl93YmRfZGF0X2lcWzE1XF0gICAKK3MyX3diZF9kYXRfaVxbMTRcXSAgIAorczJfd2JkX2RhdF9pXFsxM1xdICAgCitzMl93YmRfZGF0X2lcWzEyXF0gICAKK3MyX3diZF9kYXRfaVxbMTFcXSAgIAorczJfd2JkX2RhdF9pXFsxMFxdICAgCitzMl93YmRfZGF0X2lcWzlcXSAgIAorczJfd2JkX2RhdF9pXFs4XF0gICAKK3MyX3diZF9kYXRfaVxbN1xdICAgCitzMl93YmRfZGF0X2lcWzZcXSAgIAorczJfd2JkX2RhdF9pXFs1XF0gICAKK3MyX3diZF9kYXRfaVxbNFxdICAgCitzMl93YmRfZGF0X2lcWzNcXSAgIAorczJfd2JkX2RhdF9pXFsyXF0gICAKK3MyX3diZF9kYXRfaVxbMVxdICAgCitzMl93YmRfZGF0X2lcWzBcXSAgIAorczJfd2JkX2Fja19pICAgICAgICAKK3MyX3diZF9jeWNfbyAgICAgICAgCisKZGlmZiAtLWdpdCBhL29wZW5sYW5lL3diX2ludGVyY29ubmVjdC9zdGEudGNsIGIvb3BlbmxhbmUvd2JfaW50ZXJjb25uZWN0L3N0YS50Y2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I4MDlhNQotLS0gL2Rldi9udWxsCisrKyBiL29wZW5sYW5lL3diX2ludGVyY29ubmVjdC9zdGEudGNsCkBAIC0wLDAgKzEsNTcgQEAKKyMgU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogIDIwMjEgLCBEaW5lc2ggQW5uYXl5YQorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyMgU1BEWC1GaWxlQ29udHJpYnV0b3I6IE1vZGlmaWVkIGJ5IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisKKworc2V0IDo6ZW52KExJQl9GQVNURVNUKSAiJDo6ZW52KFBES19ST09UKS9za3kxMzBBL2xpYnMucmVmL3NreTEzMF9mZF9zY19oZC9saWIvc2t5MTMwX2ZkX3NjX2hkX19mZl9uNDBDXzF2OTUubGliIgorc2V0IDo6ZW52KExJQl9TTE9XRVNUKSAiJDo6ZW52KFBES19ST09UKS9za3kxMzBBL2xpYnMucmVmL3NreTEzMF9mZF9zY19oZC9saWIvc2t5MTMwX2ZkX3NjX2hkX19zc18xMDBDXzF2NjAubGliIgorc2V0IDo6ZW52KENVUlJFTlRfTkVUTElTVCkgcnVucy93Yl9pbnRlcmNvbm5lY3QvcmVzdWx0cy9zeW50aGVzaXMvd2JfaW50ZXJjb25uZWN0LnN5bnRoZXNpc19wcmVyb3V0ZS52CitzZXQgOjplbnYoREVTSUdOX05BTUUpICJ3Yl9pbnRlcmNvbm5lY3QiCitzZXQgOjplbnYoQ1VSUkVOVF9TUEVGKSAuLi8uLi9zcGVmL3diX2ludGVyY29ubmVjdC5zcGVmCitzZXQgOjplbnYoQkFTRV9TRENfRklMRSkgImJhc2Uuc2RjIgorc2V0IDo6ZW52KFNZTlRIX0RSSVZJTkdfQ0VMTCkgInNreTEzMF9mZF9zY19oZF9faW52XzgiCitzZXQgOjplbnYoU1lOVEhfRFJJVklOR19DRUxMX1BJTikgIlkiCitzZXQgOjplbnYoU1lOVEhfQ0FQX0xPQUQpICIxNy42NSIKK3NldCA6OmVudihXSVJFX1JDX0xBWUVSKSAibWV0MSIKKworCitzZXRfY21kX3VuaXRzIC10aW1lIG5zIC1jYXBhY2l0YW5jZSBwRiAtY3VycmVudCBtQSAtdm9sdGFnZSBWIC1yZXNpc3RhbmNlIGtPaG0gLWRpc3RhbmNlIHVtCityZWFkX2xpYmVydHkgLW1pbiAkOjplbnYoTElCX0ZBU1RFU1QpCityZWFkX2xpYmVydHkgLW1heCAkOjplbnYoTElCX1NMT1dFU1QpCityZWFkX3Zlcmlsb2cgJDo6ZW52KENVUlJFTlRfTkVUTElTVCkKK2xpbmtfZGVzaWduICAkOjplbnYoREVTSUdOX05BTUUpCisKK3JlYWRfc3BlZiAgJDo6ZW52KENVUlJFTlRfU1BFRikKKworcmVhZF9zZGMgLWVjaG8gJDo6ZW52KEJBU0VfU0RDX0ZJTEUpCisKKyMgY2hlY2sgZm9yIG1pc3NpbmcgY29uc3RyYWludHMKK2NoZWNrX3NldHVwICAtdmVyYm9zZSA+IHVuY29uc3RyYWludHMucnB0CisKK3NldF9vcGVyYXRpbmdfY29uZGl0aW9ucyAtYW5hbHlzaXNfdHlwZSBzaW5nbGUKKyMgUHJvcGdhdGUgdGhlIGNsb2NrCitzZXRfcHJvcGFnYXRlZF9jbG9jayBbYWxsX2Nsb2Nrc10KKworcmVwb3J0X3RucworcmVwb3J0X3ducworcmVwb3J0X3Bvd2VyIAorcmVwb3J0X2NoZWNrcyAtdW5pcXVlIC1zbGFja19tYXggLTAuMCAtZ3JvdXBfY291bnQgMTAwIAorcmVwb3J0X2NoZWNrcyAtdW5pcXVlIC1zbGFja19taW4gLTAuMCAtZ3JvdXBfY291bnQgMTAwIAorcmVwb3J0X2NoZWNrcyAtcGF0aF9kZWxheSBtaW5fbWF4IAorcmVwb3J0X2NoZWNrcyAtZ3JvdXBfY291bnQgMTAwICAtc2xhY2tfbWF4IC0wLjAxICA+IHRpbWluZy5ycHQKKworcmVwb3J0X2NoZWNrcyAtZ3JvdXBfY291bnQgMTAwICAtc2xhY2tfbWluIC0wLjAxID4+IHRpbWluZy5ycHQKKworCmRpZmYgLS1naXQgYS9vcGVubGFuZS95aWZpdmUvYmFzZS5zZGMgYi9vcGVubGFuZS95aWZpdmUvYmFzZS5zZGMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc1NTM4ZAotLS0gL2Rldi9udWxsCisrKyBiL29wZW5sYW5lL3lpZml2ZS9iYXNlLnNkYwpAQCAtMCwwICsxLDMyMSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBUaW1pbmcgQ29uc3RyYWludHMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2NyZWF0ZV9jbG9jayAtbmFtZSBjb3JlX2NsayAtcGVyaW9kIDIwLjAwMDAgW2dldF9wb3J0cyB7Y29yZV9jbGt9XQorY3JlYXRlX2Nsb2NrIC1uYW1lIHJ0Y19jbGsgLXBlcmlvZCA0MC4wMDAwIFtnZXRfcG9ydHMge3J0Y19jbGt9XQorY3JlYXRlX2Nsb2NrIC1uYW1lIHdiX2NsayAtcGVyaW9kIDEwLjAwMDAgW2dldF9wb3J0cyB7d2JfY2xrfV0KKworY3JlYXRlX2dlbmVyYXRlZF9jbG9jayAtbmFtZSBzcmFtMF9jbGswIC1hZGQgLXNvdXJjZSBbZ2V0X3BvcnRzIHtjb3JlX2Nsa31dIC1tYXN0ZXJfY2xvY2sgW2dldF9jbG9ja3MgY29yZV9jbGtdIC1kaXZpZGVfYnkgMSAtY29tbWVudCB7dGNtIHNyYW0gY2xvY2swfSBbZ2V0X3BvcnRzIHNyYW0wX2NsazBdCitjcmVhdGVfZ2VuZXJhdGVkX2Nsb2NrIC1uYW1lIHNyYW0wX2NsazEgLWFkZCAtc291cmNlIFtnZXRfcG9ydHMge2NvcmVfY2xrfV0gLW1hc3Rlcl9jbG9jayBbZ2V0X2Nsb2NrcyBjb3JlX2Nsa10gLWRpdmlkZV9ieSAxIC1jb21tZW50IHt0Y20gc3JhbSBjbG9jazF9IFtnZXRfcG9ydHMgc3JhbTBfY2xrMV0KKworY3JlYXRlX2dlbmVyYXRlZF9jbG9jayAtbmFtZSBpY2FjaGVfbWVtX2NsazAgLWFkZCAtc291cmNlIFtnZXRfcG9ydHMge2NvcmVfY2xrfV0gLW1hc3Rlcl9jbG9jayBbZ2V0X2Nsb2NrcyBjb3JlX2Nsa10gLWRpdmlkZV9ieSAxIC1jb21tZW50IHtpY2FjaGUgY2xvY2swfSBbZ2V0X3BvcnRzIGljYWNoZV9tZW1fY2xrMF0KK2NyZWF0ZV9nZW5lcmF0ZWRfY2xvY2sgLW5hbWUgaWNhY2hlX21lbV9jbGsxIC1hZGQgLXNvdXJjZSBbZ2V0X3BvcnRzIHtjb3JlX2Nsa31dIC1tYXN0ZXJfY2xvY2sgW2dldF9jbG9ja3MgY29yZV9jbGtdIC1kaXZpZGVfYnkgMSAtY29tbWVudCB7aWNhY2hlIGNsb2NrMX0gW2dldF9wb3J0cyBpY2FjaGVfbWVtX2NsazFdCisKK2NyZWF0ZV9nZW5lcmF0ZWRfY2xvY2sgLW5hbWUgZGNhY2hlX21lbV9jbGswIC1hZGQgLXNvdXJjZSBbZ2V0X3BvcnRzIHtjb3JlX2Nsa31dIC1tYXN0ZXJfY2xvY2sgW2dldF9jbG9ja3MgY29yZV9jbGtdIC1kaXZpZGVfYnkgMSAtY29tbWVudCB7ZGNhY2hlIGNsb2NrMH0gW2dldF9wb3J0cyBkY2FjaGVfbWVtX2NsazBdCitjcmVhdGVfZ2VuZXJhdGVkX2Nsb2NrIC1uYW1lIGRjYWNoZV9tZW1fY2xrMSAtYWRkIC1zb3VyY2UgW2dldF9wb3J0cyB7Y29yZV9jbGt9XSAtbWFzdGVyX2Nsb2NrIFtnZXRfY2xvY2tzIGNvcmVfY2xrXSAtZGl2aWRlX2J5IDEgLWNvbW1lbnQge2RjYWNoZSBjbG9jazF9IFtnZXRfcG9ydHMgZGNhY2hlX21lbV9jbGsxXQorCitzZXRfY2xvY2tfdHJhbnNpdGlvbiAwLjE1MDAgW2FsbF9jbG9ja3NdCitzZXRfY2xvY2tfdW5jZXJ0YWludHkgLXNldHVwIDAuMjUwMCBbYWxsX2Nsb2Nrc10KK3NldF9jbG9ja191bmNlcnRhaW50eSAtaG9sZCAwLjI1MDAgW2FsbF9jbG9ja3NdCisKK3NldF9wcm9wYWdhdGVkX2Nsb2NrIFthbGxfY2xvY2tzXQorCisKK3NldCA6OmVudihTWU5USF9USU1JTkdfREVSQVRFKSAwLjA1CitwdXRzICJcW0lORk9cXTogU2V0dGluZyB0aW1pbmcgZGVyYXRlIHRvOiBbZXhwciB7JDo6ZW52KFNZTlRIX1RJTUlOR19ERVJBVEUpICogMTB9XSAlIgorc2V0X3RpbWluZ19kZXJhdGUgLWVhcmx5IFtleHByIHsxLSQ6OmVudihTWU5USF9USU1JTkdfREVSQVRFKX1dCitzZXRfdGltaW5nX2RlcmF0ZSAtbGF0ZSBbZXhwciB7MSskOjplbnYoU1lOVEhfVElNSU5HX0RFUkFURSl9XQorCitzZXRfY2xvY2tfZ3JvdXBzIC1uYW1lIGFzeW5jX2Nsb2NrIC1hc3luY2hyb25vdXMgXAorIC1ncm91cCBbZ2V0X2Nsb2NrcyB7Y29yZV9jbGsgc3JhbTBfY2xrMCBzcmFtMF9jbGsxIGljYWNoZV9tZW1fY2xrMCBpY2FjaGVfbWVtX2NsazEgZGNhY2hlX21lbV9jbGswIGRjYWNoZV9tZW1fY2xrMX0gXVwKKyAtZ3JvdXAgW2dldF9jbG9ja3Mge3J0Y19jbGt9XVwKKyAtZ3JvdXAgW2dldF9jbG9ja3Mge3diX2Nsa31dIC1jb21tZW50IHtBc3luYyBDbG9jayBncm91cH0KKworIyMjIENsa1NrZXcgQWRqdXN0CitzZXRfY2FzZV9hbmFseXNpcyAwIFtnZXRfcG9ydHMge2NmZ19jc2thX3Jpc2N2WzBdfV0KK3NldF9jYXNlX2FuYWx5c2lzIDAgW2dldF9wb3J0cyB7Y2ZnX2Nza2FfcmlzY3ZbMV19XQorc2V0X2Nhc2VfYW5hbHlzaXMgMCBbZ2V0X3BvcnRzIHtjZmdfY3NrYV9yaXNjdlsyXX1dCitzZXRfY2FzZV9hbmFseXNpcyAwIFtnZXRfcG9ydHMge2NmZ19jc2thX3Jpc2N2WzNdfV0KKworCitzZXRfbWF4X2RlbGF5ICAgMy41IC1mcm9tIFtnZXRfcG9ydHMge3diZF9jbGtfaW50fV0KK3NldF9tYXhfZGVsYXkgICAyIC10byAgIFtnZXRfcG9ydHMge3diZF9jbGtfcmlzY3Z9XQorc2V0X21heF9kZWxheSAzLjUgLWZyb20gd2JkX2Nsa19pbnQgLXRvIHdiZF9jbGtfcmlzY3YKKworI1RDTSBNZW1vcnkKK3NldF9pbnB1dF9kZWxheSAtbWF4IDYuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3NyYW0wX2NsazB9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3NyYW0wX2RvdXQwWypdfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDMuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3NyYW0wX2NsazB9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3NyYW0wX2RvdXQwWypdfV0KKworc2V0X2lucHV0X2RlbGF5IC1tYXggNi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7c3JhbTBfY2xrMX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7c3JhbTBfZG91dDFbKl19XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMy4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7c3JhbTBfY2xrMX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7c3JhbTBfZG91dDFbKl19XQorCitzZXRfb3V0cHV0X2RlbGF5IC1tYXggNC41MDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7c3JhbTBfY2xrMX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7c3JhbTBfYWRkcjFbKl19XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDQuNTAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3NyYW0wX2NsazF9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3NyYW0wX2NzYjF9XQorCitzZXRfb3V0cHV0X2RlbGF5IC1taW4gMi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7c3JhbTBfY2xrMX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7c3JhbTBfYWRkcjFbKl19XQorc2V0X291dHB1dF9kZWxheSAtbWluIDIuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3NyYW0wX2NsazF9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3NyYW0wX2NzYjF9XQorCitzZXRfb3V0cHV0X2RlbGF5IC1tYXggNC41MDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7c3JhbTBfY2xrMH1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7c3JhbTBfYWRkcjBbKl19XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDQuNTAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3NyYW0wX2NsazB9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3NyYW0wX2NzYjB9XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDQuNTAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3NyYW0wX2NsazB9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3NyYW0wX2RpbjBbKl19XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDQuNTAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3NyYW0wX2NsazB9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3NyYW0wX3dlYjB9XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDQuNTAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3NyYW0wX2NsazB9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3NyYW0wX3dtYXNrMFsqXX1dCisKK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAyLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHtzcmFtMF9jbGswfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtzcmFtMF9hZGRyMFsqXX1dCitzZXRfb3V0cHV0X2RlbGF5IC1taW4gMi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7c3JhbTBfY2xrMH1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7c3JhbTBfY3NiMH1dCitzZXRfb3V0cHV0X2RlbGF5IC1taW4gMi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7c3JhbTBfY2xrMH1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7c3JhbTBfZGluMFsqXX1dCitzZXRfb3V0cHV0X2RlbGF5IC1taW4gMi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7c3JhbTBfY2xrMH1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7c3JhbTBfd2ViMH1dCitzZXRfb3V0cHV0X2RlbGF5IC1taW4gMi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7c3JhbTBfY2xrMH1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7c3JhbTBfd21hc2swWypdfV0KKworI2ljYWNoZSBtZW1vcnkKK3NldF9pbnB1dF9kZWxheSAtbWF4IDYuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge2ljYWNoZV9tZW1fY2xrMX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7aWNhY2hlX21lbV9kb3V0MVsqXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAzLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHtpY2FjaGVfbWVtX2NsazF9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge2ljYWNoZV9tZW1fZG91dDFbKl19XQorCitzZXRfb3V0cHV0X2RlbGF5IC1tYXggNC41MDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7aWNhY2hlX21lbV9jbGsxfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtpY2FjaGVfbWVtX2FkZHIxWypdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1heCA0LjUwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHtpY2FjaGVfbWVtX2NsazF9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge2ljYWNoZV9tZW1fY3NiMX1dCisKK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAtMC41MDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7aWNhY2hlX21lbV9jbGsxfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtpY2FjaGVfbWVtX2FkZHIxWypdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAtMC41MDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7aWNhY2hlX21lbV9jbGsxfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtpY2FjaGVfbWVtX2NzYjF9XQorCitzZXRfb3V0cHV0X2RlbGF5IC1tYXggNC41MDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7aWNhY2hlX21lbV9jbGswfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtpY2FjaGVfbWVtX2FkZHIwWypdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1heCA0LjUwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHtpY2FjaGVfbWVtX2NsazB9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge2ljYWNoZV9tZW1fY3NiMH1dCitzZXRfb3V0cHV0X2RlbGF5IC1tYXggNC41MDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7aWNhY2hlX21lbV9jbGswfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtpY2FjaGVfbWVtX2RpbjBbKl19XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDQuNTAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge2ljYWNoZV9tZW1fY2xrMH1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7aWNhY2hlX21lbV93ZWIwfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1heCA0LjUwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHtpY2FjaGVfbWVtX2NsazB9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge2ljYWNoZV9tZW1fd21hc2swWypdfV0KKworc2V0X291dHB1dF9kZWxheSAtbWluIC0wLjUwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHtpY2FjaGVfbWVtX2NsazB9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge2ljYWNoZV9tZW1fYWRkcjBbKl19XQorc2V0X291dHB1dF9kZWxheSAtbWluIC0wLjUwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHtpY2FjaGVfbWVtX2NsazB9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge2ljYWNoZV9tZW1fY3NiMH1dCitzZXRfb3V0cHV0X2RlbGF5IC1taW4gLTAuNTAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge2ljYWNoZV9tZW1fY2xrMH1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7aWNhY2hlX21lbV9kaW4wWypdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAtMC41MDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7aWNhY2hlX21lbV9jbGswfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtpY2FjaGVfbWVtX3dlYjB9XQorc2V0X291dHB1dF9kZWxheSAtbWluIC0wLjUwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHtpY2FjaGVfbWVtX2NsazB9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge2ljYWNoZV9tZW1fd21hc2swWypdfV0KKworI2RjYWNoZSBtZW1vcnkKK3NldF9pbnB1dF9kZWxheSAtbWF4IDYuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge2RjYWNoZV9tZW1fY2xrMH1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7ZGNhY2hlX21lbV9kb3V0MFsqXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAzLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHtkY2FjaGVfbWVtX2NsazB9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge2RjYWNoZV9tZW1fZG91dDBbKl19XQorCitzZXRfaW5wdXRfZGVsYXkgLW1heCA2LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHtkY2FjaGVfbWVtX2NsazF9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge2RjYWNoZV9tZW1fZG91dDFbKl19XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMy4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7ZGNhY2hlX21lbV9jbGsxfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtkY2FjaGVfbWVtX2RvdXQxWypdfV0KKworc2V0X291dHB1dF9kZWxheSAtbWF4IDQuNTAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge2RjYWNoZV9tZW1fY2xrMX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7ZGNhY2hlX21lbV9hZGRyMVsqXX1dCitzZXRfb3V0cHV0X2RlbGF5IC1tYXggNC41MDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7ZGNhY2hlX21lbV9jbGsxfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtkY2FjaGVfbWVtX2NzYjF9XQorCitzZXRfb3V0cHV0X2RlbGF5IC1taW4gLTAuNTAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7ZGNhY2hlX21lbV9jbGsxfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtkY2FjaGVfbWVtX2FkZHIxWypdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAtMC41MDAgLWNsb2NrIFtnZXRfY2xvY2tzIHtkY2FjaGVfbWVtX2NsazF9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge2RjYWNoZV9tZW1fY3NiMX1dCisKK3NldF9vdXRwdXRfZGVsYXkgLW1heCA0LjUwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHtkY2FjaGVfbWVtX2NsazB9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge2RjYWNoZV9tZW1fYWRkcjBbKl19XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDQuNTAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge2RjYWNoZV9tZW1fY2xrMH1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7ZGNhY2hlX21lbV9jc2IwfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1heCA0LjUwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHtkY2FjaGVfbWVtX2NsazB9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge2RjYWNoZV9tZW1fZGluMFsqXX1dCitzZXRfb3V0cHV0X2RlbGF5IC1tYXggNC41MDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7ZGNhY2hlX21lbV9jbGswfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtkY2FjaGVfbWVtX3dlYjB9XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDQuNTAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge2RjYWNoZV9tZW1fY2xrMH1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7ZGNhY2hlX21lbV93bWFzazBbKl19XQorCitzZXRfb3V0cHV0X2RlbGF5IC1taW4gLTAuNTAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7ZGNhY2hlX21lbV9jbGswfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtkY2FjaGVfbWVtX2FkZHIwWypdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAtMC41MDAgLWNsb2NrIFtnZXRfY2xvY2tzIHtkY2FjaGVfbWVtX2NsazB9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge2RjYWNoZV9tZW1fY3NiMH1dCitzZXRfb3V0cHV0X2RlbGF5IC1taW4gLTAuNTAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7ZGNhY2hlX21lbV9jbGswfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtkY2FjaGVfbWVtX2RpbjBbKl19XQorc2V0X291dHB1dF9kZWxheSAtbWluIC0wLjUwMCAtY2xvY2sgW2dldF9jbG9ja3Mge2RjYWNoZV9tZW1fY2xrMH1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7ZGNhY2hlX21lbV93ZWIwfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAtMC41MDAgLWNsb2NrIFtnZXRfY2xvY2tzIHtkY2FjaGVfbWVtX2NsazB9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge2RjYWNoZV9tZW1fd21hc2swWypdfV0KKworc2V0X2lucHV0X2RlbGF5IC1tYXggNS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JfY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3Yl9yc3Rfbn1dCisKKyNXaXNoYm9uZSBETUVNCitzZXRfaW5wdXRfZGVsYXkgLW1heCA0LjUwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9kbWVtX2Fja19pfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDQuNTAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2RtZW1fZGF0X2lbKl19XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNC41MDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JfY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfZG1lbV9lcnJfaX1dCisKK3NldF9pbnB1dF9kZWxheSAtbWluIDIuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2RtZW1fYWNrX2l9XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JfY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfZG1lbV9kYXRfaVsqXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAyLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9kbWVtX2RhdF9pWypdfV0KKworc2V0X291dHB1dF9kZWxheSAtbWF4IDQuNTAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2RtZW1fYWRyX29bKl19XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDQuNTAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2RtZW1fZGF0X29bKl19XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDQuNTAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2RtZW1fc2VsX29bKl19XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDQuNTAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2RtZW1fc3RiX299XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDQuNTAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2RtZW1fd2Vfb31dCisKK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAyLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9kbWVtX2Fkcl9vWypdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAyLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9kbWVtX2RhdF9vWypdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAyLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9kbWVtX3NlbF9vWypdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAyLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9kbWVtX3N0Yl9vfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAyLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9kbWVtX3dlX299XQorCisjV2lzaGJvbmUgaWNhY2hlCitzZXRfaW5wdXRfZGVsYXkgLW1heCA0LjUwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9pY2FjaGVfbGFja19pfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDQuNTAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2ljYWNoZV9hY2tfaX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA0LjUwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9pY2FjaGVfZGF0X2lbKl19XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNC41MDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JfY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfaWNhY2hlX2Vycl9pfV0KKworc2V0X2lucHV0X2RlbGF5IC1taW4gMi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JfY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfaWNhY2hlX2xhY2tfaX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAyLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9pY2FjaGVfYWNrX2l9XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JfY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfaWNhY2hlX2RhdF9pWypdfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDIuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2ljYWNoZV9kYXRfaVsqXX1dCisKK3NldF9vdXRwdXRfZGVsYXkgLW1heCA0LjUwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9pY2FjaGVfYWRyX29bKl19XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDQuNTAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2ljYWNoZV9zZWxfb1sqXX1dCitzZXRfb3V0cHV0X2RlbGF5IC1tYXggNC41MDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JfY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfaWNhY2hlX2JsX29bKl19XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDQuNTAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2ljYWNoZV9icnlfb31dCitzZXRfb3V0cHV0X2RlbGF5IC1tYXggNC41MDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JfY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfaWNhY2hlX3N0Yl9vfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1heCA0LjUwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9pY2FjaGVfd2Vfb31dCisKK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAyLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9pY2FjaGVfYWRyX29bKl19XQorc2V0X291dHB1dF9kZWxheSAtbWluIDIuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2ljYWNoZV9zZWxfb1sqXX1dCitzZXRfb3V0cHV0X2RlbGF5IC1taW4gMi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JfY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfaWNhY2hlX2JsX29bKl19XQorc2V0X291dHB1dF9kZWxheSAtbWluIDIuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2ljYWNoZV9icnlfb31dCitzZXRfb3V0cHV0X2RlbGF5IC1taW4gMi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JfY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfaWNhY2hlX3N0Yl9vfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAyLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9pY2FjaGVfd2Vfb31dCisKKyNXaXNoYm9uZSBkY2FjaGUKK3NldF9pbnB1dF9kZWxheSAtbWF4IDQuNTAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2RjYWNoZV9sYWNrX2l9XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNC41MDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JfY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfZGNhY2hlX2Fja19pfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDQuNTAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2RjYWNoZV9kYXRfaVsqXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA0LjUwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9kY2FjaGVfZXJyX2l9XQorCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAyLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9kY2FjaGVfbGFja19pfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDIuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2RjYWNoZV9hY2tfaX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAyLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9kY2FjaGVfZGF0X2lbKl19XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JfY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfZGNhY2hlX2RhdF9pWypdfV0KKworc2V0X291dHB1dF9kZWxheSAtbWF4IDQuNTAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2RjYWNoZV9hZHJfb1sqXX1dCitzZXRfb3V0cHV0X2RlbGF5IC1tYXggNC41MDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JfY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfZGNhY2hlX2RhdF9vWypdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1heCA0LjUwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9kY2FjaGVfc2VsX29bKl19XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDQuNTAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2RjYWNoZV9ibF9vWypdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1heCA0LjUwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9kY2FjaGVfYnJ5X299XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDQuNTAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2RjYWNoZV9zdGJfb31dCitzZXRfb3V0cHV0X2RlbGF5IC1tYXggNC41MDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JfY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfZGNhY2hlX3dlX299XQorCitzZXRfb3V0cHV0X2RlbGF5IC1taW4gMi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JfY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfZGNhY2hlX2Fkcl9vWypdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAyLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9kY2FjaGVfZGF0X29bKl19XQorc2V0X291dHB1dF9kZWxheSAtbWluIDIuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2RjYWNoZV9zZWxfb1sqXX1dCitzZXRfb3V0cHV0X2RlbGF5IC1taW4gMi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JfY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfZGNhY2hlX2JsX29bKl19XQorc2V0X291dHB1dF9kZWxheSAtbWluIDIuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JkX2RjYWNoZV9icnlfb31dCitzZXRfb3V0cHV0X2RlbGF5IC1taW4gMi4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JfY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YmRfZGNhY2hlX3N0Yl9vfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAyLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diZF9kY2FjaGVfd2Vfb31dCisKK3NldF9mYWxzZV9wYXRoXAorICAgIC1mcm9tIFtnZXRfcG9ydHMge3NvZnRfaXJxfV0KK3NldF9mYWxzZV9wYXRoXAorICAgIC10byBbbGlzdCBbZ2V0X3BvcnRzIHtyaXNjdl9kZWJ1Z1swXX1dXAorICAgICAgICAgICBbZ2V0X3BvcnRzIHtyaXNjdl9kZWJ1Z1sxMF19XVwKKyAgICAgICAgICAgW2dldF9wb3J0cyB7cmlzY3ZfZGVidWdbMTFdfV1cCisgICAgICAgICAgIFtnZXRfcG9ydHMge3Jpc2N2X2RlYnVnWzEyXX1dXAorICAgICAgICAgICBbZ2V0X3BvcnRzIHtyaXNjdl9kZWJ1Z1sxM119XVwKKyAgICAgICAgICAgW2dldF9wb3J0cyB7cmlzY3ZfZGVidWdbMTRdfV1cCisgICAgICAgICAgIFtnZXRfcG9ydHMge3Jpc2N2X2RlYnVnWzE1XX1dXAorICAgICAgICAgICBbZ2V0X3BvcnRzIHtyaXNjdl9kZWJ1Z1sxNl19XVwKKyAgICAgICAgICAgW2dldF9wb3J0cyB7cmlzY3ZfZGVidWdbMTddfV1cCisgICAgICAgICAgIFtnZXRfcG9ydHMge3Jpc2N2X2RlYnVnWzE4XX1dXAorICAgICAgICAgICBbZ2V0X3BvcnRzIHtyaXNjdl9kZWJ1Z1sxOV19XVwKKyAgICAgICAgICAgW2dldF9wb3J0cyB7cmlzY3ZfZGVidWdbMV19XVwKKyAgICAgICAgICAgW2dldF9wb3J0cyB7cmlzY3ZfZGVidWdbMjBdfV1cCisgICAgICAgICAgIFtnZXRfcG9ydHMge3Jpc2N2X2RlYnVnWzIxXX1dXAorICAgICAgICAgICBbZ2V0X3BvcnRzIHtyaXNjdl9kZWJ1Z1syMl19XVwKKyAgICAgICAgICAgW2dldF9wb3J0cyB7cmlzY3ZfZGVidWdbMjNdfV1cCisgICAgICAgICAgIFtnZXRfcG9ydHMge3Jpc2N2X2RlYnVnWzI0XX1dXAorICAgICAgICAgICBbZ2V0X3BvcnRzIHtyaXNjdl9kZWJ1Z1syNV19XVwKKyAgICAgICAgICAgW2dldF9wb3J0cyB7cmlzY3ZfZGVidWdbMjZdfV1cCisgICAgICAgICAgIFtnZXRfcG9ydHMge3Jpc2N2X2RlYnVnWzI3XX1dXAorICAgICAgICAgICBbZ2V0X3BvcnRzIHtyaXNjdl9kZWJ1Z1syOF19XVwKKyAgICAgICAgICAgW2dldF9wb3J0cyB7cmlzY3ZfZGVidWdbMjldfV1cCisgICAgICAgICAgIFtnZXRfcG9ydHMge3Jpc2N2X2RlYnVnWzJdfV1cCisgICAgICAgICAgIFtnZXRfcG9ydHMge3Jpc2N2X2RlYnVnWzMwXX1dXAorICAgICAgICAgICBbZ2V0X3BvcnRzIHtyaXNjdl9kZWJ1Z1szMV19XVwKKyAgICAgICAgICAgW2dldF9wb3J0cyB7cmlzY3ZfZGVidWdbMzJdfV1cCisgICAgICAgICAgIFtnZXRfcG9ydHMge3Jpc2N2X2RlYnVnWzMzXX1dXAorICAgICAgICAgICBbZ2V0X3BvcnRzIHtyaXNjdl9kZWJ1Z1szNF19XVwKKyAgICAgICAgICAgW2dldF9wb3J0cyB7cmlzY3ZfZGVidWdbMzVdfV1cCisgICAgICAgICAgIFtnZXRfcG9ydHMge3Jpc2N2X2RlYnVnWzM2XX1dXAorICAgICAgICAgICBbZ2V0X3BvcnRzIHtyaXNjdl9kZWJ1Z1szN119XVwKKyAgICAgICAgICAgW2dldF9wb3J0cyB7cmlzY3ZfZGVidWdbMzhdfV1cCisgICAgICAgICAgIFtnZXRfcG9ydHMge3Jpc2N2X2RlYnVnWzM5XX1dXAorICAgICAgICAgICBbZ2V0X3BvcnRzIHtyaXNjdl9kZWJ1Z1szXX1dXAorICAgICAgICAgICBbZ2V0X3BvcnRzIHtyaXNjdl9kZWJ1Z1s0MF19XVwKKyAgICAgICAgICAgW2dldF9wb3J0cyB7cmlzY3ZfZGVidWdbNDFdfV1cCisgICAgICAgICAgIFtnZXRfcG9ydHMge3Jpc2N2X2RlYnVnWzQyXX1dXAorICAgICAgICAgICBbZ2V0X3BvcnRzIHtyaXNjdl9kZWJ1Z1s0M119XVwKKyAgICAgICAgICAgW2dldF9wb3J0cyB7cmlzY3ZfZGVidWdbNDRdfV1cCisgICAgICAgICAgIFtnZXRfcG9ydHMge3Jpc2N2X2RlYnVnWzQ1XX1dXAorICAgICAgICAgICBbZ2V0X3BvcnRzIHtyaXNjdl9kZWJ1Z1s0Nl19XVwKKyAgICAgICAgICAgW2dldF9wb3J0cyB7cmlzY3ZfZGVidWdbNDddfV1cCisgICAgICAgICAgIFtnZXRfcG9ydHMge3Jpc2N2X2RlYnVnWzQ4XX1dXAorICAgICAgICAgICBbZ2V0X3BvcnRzIHtyaXNjdl9kZWJ1Z1s0OV19XVwKKyAgICAgICAgICAgW2dldF9wb3J0cyB7cmlzY3ZfZGVidWdbNF19XVwKKyAgICAgICAgICAgW2dldF9wb3J0cyB7cmlzY3ZfZGVidWdbNTBdfV1cCisgICAgICAgICAgIFtnZXRfcG9ydHMge3Jpc2N2X2RlYnVnWzUxXX1dXAorICAgICAgICAgICBbZ2V0X3BvcnRzIHtyaXNjdl9kZWJ1Z1s1Ml19XVwKKyAgICAgICAgICAgW2dldF9wb3J0cyB7cmlzY3ZfZGVidWdbNTNdfV1cCisgICAgICAgICAgIFtnZXRfcG9ydHMge3Jpc2N2X2RlYnVnWzU0XX1dXAorICAgICAgICAgICBbZ2V0X3BvcnRzIHtyaXNjdl9kZWJ1Z1s1NV19XVwKKyAgICAgICAgICAgW2dldF9wb3J0cyB7cmlzY3ZfZGVidWdbNTZdfV1cCisgICAgICAgICAgIFtnZXRfcG9ydHMge3Jpc2N2X2RlYnVnWzU3XX1dXAorICAgICAgICAgICBbZ2V0X3BvcnRzIHtyaXNjdl9kZWJ1Z1s1OF19XVwKKyAgICAgICAgICAgW2dldF9wb3J0cyB7cmlzY3ZfZGVidWdbNTldfV1cCisgICAgICAgICAgIFtnZXRfcG9ydHMge3Jpc2N2X2RlYnVnWzVdfV1cCisgICAgICAgICAgIFtnZXRfcG9ydHMge3Jpc2N2X2RlYnVnWzYwXX1dXAorICAgICAgICAgICBbZ2V0X3BvcnRzIHtyaXNjdl9kZWJ1Z1s2MV19XVwKKyAgICAgICAgICAgW2dldF9wb3J0cyB7cmlzY3ZfZGVidWdbNjJdfV1cCisgICAgICAgICAgIFtnZXRfcG9ydHMge3Jpc2N2X2RlYnVnWzYzXX1dXAorICAgICAgICAgICBbZ2V0X3BvcnRzIHtyaXNjdl9kZWJ1Z1s2XX1dXAorICAgICAgICAgICBbZ2V0X3BvcnRzIHtyaXNjdl9kZWJ1Z1s3XX1dXAorICAgICAgICAgICBbZ2V0X3BvcnRzIHtyaXNjdl9kZWJ1Z1s4XX1dXAorICAgICAgICAgICBbZ2V0X3BvcnRzIHtyaXNjdl9kZWJ1Z1s5XX1dXQorCitzZXRfZmFsc2VfcGF0aCAtZnJvbSBbZ2V0X3BvcnRzIHtmdXNlX21oYXJ0aWRbMF19XQorc2V0X2ZhbHNlX3BhdGggLWZyb20gW2dldF9wb3J0cyB7ZnVzZV9taGFydGlkWzEwXX1dCitzZXRfZmFsc2VfcGF0aCAtZnJvbSBbZ2V0X3BvcnRzIHtmdXNlX21oYXJ0aWRbMTFdfV0KK3NldF9mYWxzZV9wYXRoIC1mcm9tIFtnZXRfcG9ydHMge2Z1c2VfbWhhcnRpZFsxMl19XQorc2V0X2ZhbHNlX3BhdGggLWZyb20gW2dldF9wb3J0cyB7ZnVzZV9taGFydGlkWzEzXX1dCitzZXRfZmFsc2VfcGF0aCAtZnJvbSBbZ2V0X3BvcnRzIHtmdXNlX21oYXJ0aWRbMTRdfV0KK3NldF9mYWxzZV9wYXRoIC1mcm9tIFtnZXRfcG9ydHMge2Z1c2VfbWhhcnRpZFsxNV19XQorc2V0X2ZhbHNlX3BhdGggLWZyb20gW2dldF9wb3J0cyB7ZnVzZV9taGFydGlkWzE2XX1dCitzZXRfZmFsc2VfcGF0aCAtZnJvbSBbZ2V0X3BvcnRzIHtmdXNlX21oYXJ0aWRbMTddfV0KK3NldF9mYWxzZV9wYXRoIC1mcm9tIFtnZXRfcG9ydHMge2Z1c2VfbWhhcnRpZFsxOF19XQorc2V0X2ZhbHNlX3BhdGggLWZyb20gW2dldF9wb3J0cyB7ZnVzZV9taGFydGlkWzE5XX1dCitzZXRfZmFsc2VfcGF0aCAtZnJvbSBbZ2V0X3BvcnRzIHtmdXNlX21oYXJ0aWRbMV19XQorc2V0X2ZhbHNlX3BhdGggLWZyb20gW2dldF9wb3J0cyB7ZnVzZV9taGFydGlkWzIwXX1dCitzZXRfZmFsc2VfcGF0aCAtZnJvbSBbZ2V0X3BvcnRzIHtmdXNlX21oYXJ0aWRbMjFdfV0KK3NldF9mYWxzZV9wYXRoIC1mcm9tIFtnZXRfcG9ydHMge2Z1c2VfbWhhcnRpZFsyMl19XQorc2V0X2ZhbHNlX3BhdGggLWZyb20gW2dldF9wb3J0cyB7ZnVzZV9taGFydGlkWzIzXX1dCitzZXRfZmFsc2VfcGF0aCAtZnJvbSBbZ2V0X3BvcnRzIHtmdXNlX21oYXJ0aWRbMjRdfV0KK3NldF9mYWxzZV9wYXRoIC1mcm9tIFtnZXRfcG9ydHMge2Z1c2VfbWhhcnRpZFsyNV19XQorc2V0X2ZhbHNlX3BhdGggLWZyb20gW2dldF9wb3J0cyB7ZnVzZV9taGFydGlkWzI2XX1dCitzZXRfZmFsc2VfcGF0aCAtZnJvbSBbZ2V0X3BvcnRzIHtmdXNlX21oYXJ0aWRbMjddfV0KK3NldF9mYWxzZV9wYXRoIC1mcm9tIFtnZXRfcG9ydHMge2Z1c2VfbWhhcnRpZFsyOF19XQorc2V0X2ZhbHNlX3BhdGggLWZyb20gW2dldF9wb3J0cyB7ZnVzZV9taGFydGlkWzI5XX1dCitzZXRfZmFsc2VfcGF0aCAtZnJvbSBbZ2V0X3BvcnRzIHtmdXNlX21oYXJ0aWRbMl19XQorc2V0X2ZhbHNlX3BhdGggLWZyb20gW2dldF9wb3J0cyB7ZnVzZV9taGFydGlkWzMwXX1dCitzZXRfZmFsc2VfcGF0aCAtZnJvbSBbZ2V0X3BvcnRzIHtmdXNlX21oYXJ0aWRbMzFdfV0KK3NldF9mYWxzZV9wYXRoIC1mcm9tIFtnZXRfcG9ydHMge2Z1c2VfbWhhcnRpZFszXX1dCitzZXRfZmFsc2VfcGF0aCAtZnJvbSBbZ2V0X3BvcnRzIHtmdXNlX21oYXJ0aWRbNF19XQorc2V0X2ZhbHNlX3BhdGggLWZyb20gW2dldF9wb3J0cyB7ZnVzZV9taGFydGlkWzVdfV0KK3NldF9mYWxzZV9wYXRoIC1mcm9tIFtnZXRfcG9ydHMge2Z1c2VfbWhhcnRpZFs2XX1dCitzZXRfZmFsc2VfcGF0aCAtZnJvbSBbZ2V0X3BvcnRzIHtmdXNlX21oYXJ0aWRbN119XQorc2V0X2ZhbHNlX3BhdGggLWZyb20gW2dldF9wb3J0cyB7ZnVzZV9taGFydGlkWzhdfV0KK3NldF9mYWxzZV9wYXRoIC1mcm9tIFtnZXRfcG9ydHMge2Z1c2VfbWhhcnRpZFs5XX1dCitzZXRfZmFsc2VfcGF0aCAtZnJvbSBbZ2V0X3BvcnRzIHtpcnFfbGluZXNbMF19XQorc2V0X2ZhbHNlX3BhdGggLWZyb20gW2dldF9wb3J0cyB7aXJxX2xpbmVzWzEwXX1dCitzZXRfZmFsc2VfcGF0aCAtZnJvbSBbZ2V0X3BvcnRzIHtpcnFfbGluZXNbMTFdfV0KK3NldF9mYWxzZV9wYXRoIC1mcm9tIFtnZXRfcG9ydHMge2lycV9saW5lc1sxMl19XQorc2V0X2ZhbHNlX3BhdGggLWZyb20gW2dldF9wb3J0cyB7aXJxX2xpbmVzWzEzXX1dCitzZXRfZmFsc2VfcGF0aCAtZnJvbSBbZ2V0X3BvcnRzIHtpcnFfbGluZXNbMTRdfV0KK3NldF9mYWxzZV9wYXRoIC1mcm9tIFtnZXRfcG9ydHMge2lycV9saW5lc1sxNV19XQorc2V0X2ZhbHNlX3BhdGggLWZyb20gW2dldF9wb3J0cyB7aXJxX2xpbmVzWzFdfV0KK3NldF9mYWxzZV9wYXRoIC1mcm9tIFtnZXRfcG9ydHMge2lycV9saW5lc1syXX1dCitzZXRfZmFsc2VfcGF0aCAtZnJvbSBbZ2V0X3BvcnRzIHtpcnFfbGluZXNbM119XQorc2V0X2ZhbHNlX3BhdGggLWZyb20gW2dldF9wb3J0cyB7aXJxX2xpbmVzWzRdfV0KK3NldF9mYWxzZV9wYXRoIC1mcm9tIFtnZXRfcG9ydHMge2lycV9saW5lc1s1XX1dCitzZXRfZmFsc2VfcGF0aCAtZnJvbSBbZ2V0X3BvcnRzIHtpcnFfbGluZXNbNl19XQorc2V0X2ZhbHNlX3BhdGggLWZyb20gW2dldF9wb3J0cyB7aXJxX2xpbmVzWzddfV0KK3NldF9mYWxzZV9wYXRoIC1mcm9tIFtnZXRfcG9ydHMge2lycV9saW5lc1s4XX1dCitzZXRfZmFsc2VfcGF0aCAtZnJvbSBbZ2V0X3BvcnRzIHtpcnFfbGluZXNbOV19XQorc2V0X2ZhbHNlX3BhdGggLWZyb20gW2dldF9wb3J0cyB7cHdydXBfcnN0X259XQorc2V0X2ZhbHNlX3BhdGggLWZyb20gW2dldF9wb3J0cyB7cnN0X259XQorc2V0X2ZhbHNlX3BhdGggLWZyb20gW2dldF9wb3J0cyB7c29mdF9pcnF9XQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBFbnZpcm9ubWVudAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluICQ6OmVudihTWU5USF9EUklWSU5HX0NFTExfUElOKSBbYWxsX2lucHV0c10KK3NldCBjYXBfbG9hZCBbZXhwciAkOjplbnYoU1lOVEhfQ0FQX0xPQUQpIC8gMTAwMC4wXQorcHV0cyAiXFtJTkZPXF06IFNldHRpbmcgbG9hZCB0bzogJGNhcF9sb2FkIgorc2V0X2xvYWQgICRjYXBfbG9hZCBbYWxsX291dHB1dHNdCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgRGVzaWduIFJ1bGVzCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9vcGVubGFuZS95aWZpdmUvY29uZmlnLnRjbCBiL29wZW5sYW5lL3lpZml2ZS9jb25maWcudGNsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjFmMTE3YTgKLS0tIC9kZXYvbnVsbAorKysgYi9vcGVubGFuZS95aWZpdmUvY29uZmlnLnRjbApAQCAtMCwwICsxLDE0NSBAQAorIyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAgMjAyMSAsIERpbmVzaCBBbm5heXlhCisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorIyBTUERYLUZpbGVDb250cmlidXRvcjogTW9kaWZpZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKworIyBHbG9iYWwKKyMgLS0tLS0tCisKK3NldCBzY3JpcHRfZGlyIFtmaWxlIGRpcm5hbWUgW2ZpbGUgbm9ybWFsaXplIFtpbmZvIHNjcmlwdF1dXQorIyBOYW1lCitzZXQgOjplbnYoREVTSUdOX05BTUUpIHljcjFfdG9wX3diCisKK3NldCA6OmVudihERVNJR05fSVNfQ09SRSkgIjAiCitzZXQgOjplbnYoRlBfUEROX0NPUkVfUklORykgIjAiCisKKyMgVGltaW5nIGNvbmZpZ3VyYXRpb24KK3NldCA6OmVudihDTE9DS19QRVJJT0QpICIxMCIKK3NldCA6OmVudihDTE9DS19QT1JUKSAid2JfY2xrIGNvcmVfY2xrIgorCitzZXQgOjplbnYoU1lOVEhfTUFYX0ZBTk9VVCkgNAorCisjIyBDVFMgQlVGRkVSCitzZXQgOjplbnYoQ1RTX0NMS19CVUZGRVJfTElTVCkgInNreTEzMF9mZF9zY19oZF9fY2xrYnVmXzQgc2t5MTMwX2ZkX3NjX2hkX19jbGtidWZfOCIKK3NldCA6OmVudihDVFNfU0lOS19DTFVTVEVSSU5HX1NJWkUpICIxNiIKK3NldCA6OmVudihDTE9DS19CVUZGRVJfRkFOT1VUKSAiOCIKKworIyBTb3VyY2VzCisjIC0tLS0tLS0KKworIyBMb2NhbCBzb3VyY2VzICsgbm8ydXNiIHNvdXJjZXMKK3NldCA6OmVudihWRVJJTE9HX0ZJTEVTKSAiXAorICAgICAgICAkc2NyaXB0X2Rpci8uLi8uLi92ZXJpbG9nL3J0bC9jbGtfc2tld19hZGp1c3Qvc3JjL2Nsa19za2V3X2FkanVzdC5ndiBcCisJJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwveWlmaXZlL3ljcjFjL3NyYy9jb3JlL3BpcGVsaW5lL3ljcjFfcGlwZV90b3Auc3YgIFwKKwkkc2NyaXB0X2Rpci8uLi8uLi92ZXJpbG9nL3J0bC95aWZpdmUveWNyMWMvc3JjL2NvcmUveWNyMV9jb3JlX3RvcC5zdiAgXAorCSRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL3lpZml2ZS95Y3IxYy9zcmMvY29yZS95Y3IxX2RtLnN2ICBcCisJJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwveWlmaXZlL3ljcjFjL3NyYy9jb3JlL3ljcjFfdGFwY19zeW5jaHJvbml6ZXIuc3YgIFwKKwkkc2NyaXB0X2Rpci8uLi8uLi92ZXJpbG9nL3J0bC95aWZpdmUveWNyMWMvc3JjL2NvcmUveWNyMV9jbGtfY3RybC5zdiAgXAorCSRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL3lpZml2ZS95Y3IxYy9zcmMvY29yZS95Y3IxX3NjdS5zdiAgXAorCSRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL3lpZml2ZS95Y3IxYy9zcmMvY29yZS95Y3IxX3RhcGMuc3YgIFwKKwkkc2NyaXB0X2Rpci8uLi8uLi92ZXJpbG9nL3J0bC95aWZpdmUveWNyMWMvc3JjL2NvcmUveWNyMV90YXBjX3NoaWZ0X3JlZy5zdiAgXAorCSRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL3lpZml2ZS95Y3IxYy9zcmMvY29yZS95Y3IxX2RtaS5zdiAgXAorCSRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL3lpZml2ZS95Y3IxYy9zcmMvY29yZS9wcmltaXRpdmVzL3ljcjFfcmVzZXRfY2VsbHMuc3YgIFwKKwkkc2NyaXB0X2Rpci8uLi8uLi92ZXJpbG9nL3J0bC95aWZpdmUveWNyMWMvc3JjL2NvcmUvcGlwZWxpbmUveWNyMV9waXBlX2lmdS5zdiAgXAorCSRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL3lpZml2ZS95Y3IxYy9zcmMvY29yZS9waXBlbGluZS95Y3IxX3BpcGVfaWR1LnN2ICBcCisJJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwveWlmaXZlL3ljcjFjL3NyYy9jb3JlL3BpcGVsaW5lL3ljcjFfcGlwZV9leHUuc3YgIFwKKwkkc2NyaXB0X2Rpci8uLi8uLi92ZXJpbG9nL3J0bC95aWZpdmUveWNyMWMvc3JjL2NvcmUvcGlwZWxpbmUveWNyMV9waXBlX21wcmYuc3YgIFwKKwkkc2NyaXB0X2Rpci8uLi8uLi92ZXJpbG9nL3J0bC95aWZpdmUveWNyMWMvc3JjL2NvcmUvcGlwZWxpbmUveWNyMV9waXBlX2Nzci5zdiAgXAorCSRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL3lpZml2ZS95Y3IxYy9zcmMvY29yZS9waXBlbGluZS95Y3IxX3BpcGVfaWFsdS5zdiAgXAorCSRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL3lpZml2ZS95Y3IxYy9zcmMvY29yZS9waXBlbGluZS95Y3IxX3BpcGVfbXVsLnN2ICBcCisJJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwveWlmaXZlL3ljcjFjL3NyYy9jb3JlL3BpcGVsaW5lL3ljcjFfcGlwZV9kaXYuc3YgIFwKKwkkc2NyaXB0X2Rpci8uLi8uLi92ZXJpbG9nL3J0bC95aWZpdmUveWNyMWMvc3JjL2NvcmUvcGlwZWxpbmUveWNyMV9waXBlX2xzdS5zdiAgXAorCSRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL3lpZml2ZS95Y3IxYy9zcmMvY29yZS9waXBlbGluZS95Y3IxX3BpcGVfaGR1LnN2ICBcCisJJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwveWlmaXZlL3ljcjFjL3NyYy9jb3JlL3BpcGVsaW5lL3ljcjFfcGlwZV90ZHUuc3YgIFwKKwkkc2NyaXB0X2Rpci8uLi8uLi92ZXJpbG9nL3J0bC95aWZpdmUveWNyMWMvc3JjL2NvcmUvcGlwZWxpbmUveWNyMV9pcGljLnN2ICAgXAorCSRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL3lpZml2ZS95Y3IxYy9zcmMvdG9wL3ljcjFfZG1lbV9yb3V0ZXIuc3YgICBcCisJJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwveWlmaXZlL3ljcjFjL3NyYy90b3AveWNyMV9pbWVtX3JvdXRlci5zdiAgIFwKKwkkc2NyaXB0X2Rpci8uLi8uLi92ZXJpbG9nL3J0bC95aWZpdmUveWNyMWMvc3JjL3RvcC95Y3IxX2ljYWNoZV9yb3V0ZXIuc3YgXAorCSRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL3lpZml2ZS95Y3IxYy9zcmMvdG9wL3ljcjFfZGNhY2hlX3JvdXRlci5zdiBcCisJJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwveWlmaXZlL3ljcjFjL3NyYy90b3AveWNyMV90Y20uc3YgICBcCisJJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwveWlmaXZlL3ljcjFjL3NyYy90b3AveWNyMV90aW1lci5zdiAgIFwKKwkkc2NyaXB0X2Rpci8uLi8uLi92ZXJpbG9nL3J0bC95aWZpdmUveWNyMWMvc3JjL3RvcC95Y3IxX3RvcF93Yi5zdiAgIFwKKwkkc2NyaXB0X2Rpci8uLi8uLi92ZXJpbG9nL3J0bC95aWZpdmUveWNyMWMvc3JjL3RvcC95Y3IxX2RtZW1fd2Iuc3YgICBcCisJJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwveWlmaXZlL3ljcjFjL3NyYy90b3AveWNyMV9pbWVtX3diLnN2ICAgXAorCSRzY3JpcHRfZGlyLy4uLy4uL3Zlcmlsb2cvcnRsL3lpZml2ZS95Y3IxYy9zcmMvdG9wL3ljcjFfaW50Zi5zdiAgIFwKKyAgICAgICAgJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwveWlmaXZlL3ljcjFjL3NyYy9jYWNoZS9zcmMvY29yZS9pY2FjaGVfdG9wLnN2ICAgICAgICAgICAgIFwKKyAgICAgICAgJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwveWlmaXZlL3ljcjFjL3NyYy9jYWNoZS9zcmMvY29yZS9pY2FjaGVfYXBwX2ZzbS5zdiAgICAgICAgIFwKKyAgICAgICAgJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwveWlmaXZlL3ljcjFjL3NyYy9jYWNoZS9zcmMvY29yZS9pY2FjaGVfdGFnX2ZpZm8uc3YgICAgICAgIFwKKyAgICAgICAgJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwveWlmaXZlL3ljcjFjL3NyYy9jYWNoZS9zcmMvY29yZS9kY2FjaGVfdGFnX2ZpZm8uc3YgICAgICAgIFwKKyAgICAgICAgJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwveWlmaXZlL3ljcjFjL3NyYy9jYWNoZS9zcmMvY29yZS9kY2FjaGVfdG9wLnN2ICAgICAgICAgICAgIFwKKyAgICAgICAgJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwveWlmaXZlL3ljcjFjL3NyYy9saWIveWNyMV9hc3luY193YmIuc3YgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwveWlmaXZlL3ljcjFjL3NyYy9saWIveWNyMV9hcmIuc3YgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwveWlmaXZlL3ljcjFjL3NyYy9saWIvc3luY19maWZvLnN2ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwveWlmaXZlL3ljcjFjL3NyYy9saWIvYXN5bmNfZmlmby5zdiAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwveWlmaXZlL3ljcjFjL3NyYy9saWIvY3RlY2hfY2VsbHMuc3YgICAgICAgICAgICAgICAgICAgICAgIFwKKwkiCisKK3NldCA6OmVudihWRVJJTE9HX0lOQ0xVREVfRElSUykgW2dsb2IgJHNjcmlwdF9kaXIvLi4vLi4vdmVyaWxvZy9ydGwveWlmaXZlL3ljcjFjL3NyYy9pbmNsdWRlcyBdCitzZXQgOjplbnYoU1lOVEhfUkVBRF9CTEFDS0JPWF9MSUIpIDEKK3NldCA6OmVudihTWU5USF9ERUZJTkVTKSBbbGlzdCBTWU5USEVTSVMgXQorCitzZXQgOjplbnYoU0RDX0ZJTEUpICIkc2NyaXB0X2Rpci9iYXNlLnNkYyIKK3NldCA6OmVudihCQVNFX1NEQ19GSUxFKSAiJHNjcmlwdF9kaXIvYmFzZS5zZGMiCisjc2V0IDo6ZW52KFNZTlRIX0RFRklORVMpIFtsaXN0IFNDUjFfREJHX0VOIF0KKworc2V0IDo6ZW52KExFQ19FTkFCTEUpIDAKKworc2V0IDo6ZW52KFZERF9QSU4pIFtsaXN0IHt2Y2NkMX1dCitzZXQgOjplbnYoR05EX1BJTikgW2xpc3Qge3Zzc2QxfV0KKworCisjIC0tLS0tLS0tCisjIEZsb29ycGxhbm5pbmcKKyMgLS0tLS0tLS0tLS0tLQorCitzZXQgOjplbnYoRlBfUElOX09SREVSX0NGRykgJDo6ZW52KERFU0lHTl9ESVIpL3Bpbl9vcmRlci5jZmcKKworc2V0IDo6ZW52KEZQX1NJWklORykgYWJzb2x1dGUKK3NldCA6OmVudihESUVfQVJFQSkgW2xpc3QgMC4wIDAuMCA3MjUuMCAxNTUwLjBdCisKKworIyBJZiB5b3UncmUgZ29pbmcgdG8gdXNlIG11bHRpcGxlIHBvd2VyIGRvbWFpbnMsIHRoZW4ga2VlcCB0aGlzIGRpc2FibGVkLgorc2V0IDo6ZW52KFJVTl9DVkMpIDAKKworI3NldCA6OmVudihQRE5fQ0ZHKSAkc2NyaXB0X2Rpci9wZG4udGNsCisKKworc2V0IDo6ZW52KFBMX1RJTUVfRFJJVkVOKSAxCitzZXQgOjplbnYoUExfVEFSR0VUX0RFTlNJVFkpICIwLjM1Igorc2V0IDo6ZW52KEZQX0NPUkVfVVRJTCkgIjUwIgorCisjIGhlbHBzIGluIGFudGVlbmEgZml4CitzZXQgOjplbnYoVVNFX0FSQ19BTlRFTk5BX0NIRUNLKSAiMCIKKworc2V0IDo6ZW52KEZQX0lPX1ZFWFRFTkQpIDQKK3NldCA6OmVudihGUF9JT19IRVhURU5EKSA0CisKK3NldCA6OmVudihGUF9QRE5fVlBJVENIKSAxMDAKK3NldCA6OmVudihGUF9QRE5fSFBJVENIKSAxMDAKK3NldCA6OmVudihGUF9QRE5fVldJRFRIKSAzCitzZXQgOjplbnYoRlBfUEROX0hXSURUSCkgMworCitzZXQgOjplbnYoR0xCX1JUX01BWExBWUVSKSA2CitzZXQgOjplbnYoR0xCX1JUX01BWF9ESU9ERV9JTlNfSVRFUlMpIDEwCitzZXQgOjplbnYoRElPREVfSU5TRVJUSU9OX1NUUkFURUdZKSA0CisKKworc2V0IDo6ZW52KFFVSVRfT05fVElNSU5HX1ZJT0xBVElPTlMpICIwIgorc2V0IDo6ZW52KFFVSVRfT05fTUFHSUNfRFJDKSAiMSIKK3NldCA6OmVudihRVUlUX09OX0xWU19FUlJPUikgIjAiCitzZXQgOjplbnYoUVVJVF9PTl9TTEVXX1ZJT0xBVElPTlMpICIwIgorCisjTmVlZCB0byBjcm9zcy1jaGVjayB3aHkgZ2xvYmFsIHRpbWluZyBvcGltaXphdGlvbiBjcmVhdGluZyBzZXR1cCB2aW8gd2l0aCBodWdoIGhvbGQgZml4CitzZXQgOjplbnYoR0xCX1JFU0laRVJfVElNSU5HX09QVElNSVpBVElPTlMpICIwIgorCmRpZmYgLS1naXQgYS9vcGVubGFuZS95aWZpdmUvaW50ZXJhY3RpdmUudGNsIGIvb3BlbmxhbmUveWlmaXZlL2ludGVyYWN0aXZlLnRjbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDRiNTE3Ci0tLSAvZGV2L251bGwKKysrIGIvb3BlbmxhbmUveWlmaXZlL2ludGVyYWN0aXZlLnRjbApAQCAtMCwwICsxLDIxOSBAQAorIyEvdXNyL2Jpbi90Y2xzaAorIyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIwIEVmYWJsZXNzIENvcnBvcmF0aW9uCisjIENvcHlyaWdodCAyMDIwIEVmYWJsZXNzIENvcnBvcmF0aW9uCisjIENvcHlyaWdodCAyMDIwIFN5bHZhaW4gTXVuYXV0CisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorCitwYWNrYWdlIHJlcXVpcmUgb3BlbmxhbmU7CisKKworcHJvYyBydW5fcGxhY2VtZW50X3N0ZXAge2FyZ3N9IHsKKyAgICAjIHNldCBwZG5kZWZfZGlybmFtZSBbZmlsZSBkaXJuYW1lICQ6OmVudihwZG5fdG1wX2ZpbGVfdGFnKS5kZWZdCisgICAgIyBzZXQgcGRuZGVmIFtsaW5kZXggW2dsb2IgJHBkbmRlZl9kaXJuYW1lLypwZG4qXSAwXQorICAgICMgc2V0X2RlZiAkcGRuZGVmCisgICAgaWYgeyAhIFsgaW5mbyBleGlzdHMgOjplbnYoUExBQ0VNRU5UX0NVUlJFTlRfREVGKSBdIH0geworICAgICAgICBzZXQgOjplbnYoUExBQ0VNRU5UX0NVUlJFTlRfREVGKSAkOjplbnYoQ1VSUkVOVF9ERUYpCisgICAgfSBlbHNlIHsKKyAgICAgICAgc2V0IDo6ZW52KENVUlJFTlRfREVGKSAkOjplbnYoUExBQ0VNRU5UX0NVUlJFTlRfREVGKQorICAgIH0KKworICAgIHJ1bl9wbGFjZW1lbnQKK30KKworcHJvYyBydW5fY3RzX3N0ZXAge2FyZ3N9IHsKKyAgICAjIHNldF9kZWYgJDo6ZW52KG9wZW5kcF9yZXN1bHRfZmlsZV90YWcpLmRlZgorICAgIGlmIHsgISBbIGluZm8gZXhpc3RzIDo6ZW52KENUU19DVVJSRU5UX0RFRikgXSB9IHsKKyAgICAgICAgc2V0IDo6ZW52KENUU19DVVJSRU5UX0RFRikgJDo6ZW52KENVUlJFTlRfREVGKQorICAgIH0gZWxzZSB7CisgICAgICAgIHNldCA6OmVudihDVVJSRU5UX0RFRikgJDo6ZW52KENUU19DVVJSRU5UX0RFRikKKyAgICB9CisKKyAgICBydW5fY3RzCisgICAgcnVuX3Jlc2l6ZXJfdGltaW5nCit9CisKK3Byb2MgcnVuX3JvdXRpbmdfc3RlcCB7YXJnc30geworICAgICMgc2V0IHJlc2l6ZXJkZWZfZGlybmFtZSBbZmlsZSBkaXJuYW1lICQ6OmVudihyZXNpemVyX3RtcF9maWxlX3RhZylfdGltaW5nLmRlZl0KKyAgICAjIHNldCByZXNpemVyZGVmIFtsaW5kZXggW2dsb2IgJHJlc2l6ZXJkZWZfZGlybmFtZS8qcmVzaXplcipdIDBdCisgICAgIyBzZXRfZGVmICRyZXNpemVyZGVmCisgICAgaWYgeyAhIFsgaW5mbyBleGlzdHMgOjplbnYoUk9VVElOR19DVVJSRU5UX0RFRikgXSB9IHsKKyAgICAgICAgc2V0IDo6ZW52KFJPVVRJTkdfQ1VSUkVOVF9ERUYpICQ6OmVudihDVVJSRU5UX0RFRikKKyAgICB9IGVsc2UgeworICAgICAgICBzZXQgOjplbnYoQ1VSUkVOVF9ERUYpICQ6OmVudihST1VUSU5HX0NVUlJFTlRfREVGKQorICAgIH0KKyAgICBydW5fcm91dGluZworfQorCitwcm9jIHJ1bl9kaW9kZV9pbnNlcnRpb25fMl81X3N0ZXAge2FyZ3N9IHsKKyAgICAjIHNldF9kZWYgJDo6ZW52KHRyaXRvblJvdXRlX3Jlc3VsdF9maWxlX3RhZykuZGVmCisgICAgaWYgeyAhIFsgaW5mbyBleGlzdHMgOjplbnYoRElPREVfSU5TRVJUSU9OX0NVUlJFTlRfREVGKSBdIH0geworICAgICAgICBzZXQgOjplbnYoRElPREVfSU5TRVJUSU9OX0NVUlJFTlRfREVGKSAkOjplbnYoQ1VSUkVOVF9ERUYpCisgICAgfSBlbHNlIHsKKyAgICAgICAgc2V0IDo6ZW52KENVUlJFTlRfREVGKSAkOjplbnYoRElPREVfSU5TRVJUSU9OX0NVUlJFTlRfREVGKQorICAgIH0KKwlpZiB7ICgkOjplbnYoRElPREVfSU5TRVJUSU9OX1NUUkFURUdZKSA9PSAyKSB8fCAoJDo6ZW52KERJT0RFX0lOU0VSVElPTl9TVFJBVEVHWSkgPT0gNSkgfSB7CisJCXJ1bl9hbnRlbm5hX2NoZWNrCisJCWhlYWxfYW50ZW5uYV92aW9sYXRvcnM7ICMgbW9kaWZpZXMgdGhlIHJvdXRlZCBERUYKKwl9CisKK30KKworcHJvYyBydW5fcG93ZXJfcGluc19pbnNlcnRpb25fc3RlcCB7YXJnc30geworICAgICMgc2V0X2RlZiAkOjplbnYodHJpdG9uUm91dGVfcmVzdWx0X2ZpbGVfdGFnKS5kZWYKKyAgICBpZiB7ICEgWyBpbmZvIGV4aXN0cyA6OmVudihQT1dFUl9QSU5TX0lOU0VSVElPTl9DVVJSRU5UX0RFRikgXSB9IHsKKyAgICAgICAgc2V0IDo6ZW52KFBPV0VSX1BJTlNfSU5TRVJUSU9OX0NVUlJFTlRfREVGKSAkOjplbnYoQ1VSUkVOVF9ERUYpCisgICAgfSBlbHNlIHsKKyAgICAgICAgc2V0IDo6ZW52KENVUlJFTlRfREVGKSAkOjplbnYoUE9XRVJfUElOU19JTlNFUlRJT05fQ1VSUkVOVF9ERUYpCisgICAgfQorICAgIGlmIHsgJDo6ZW52KExWU19JTlNFUlRfUE9XRVJfUElOUykgfSB7CisJCXdyaXRlX3Bvd2VyZWRfdmVyaWxvZworCQlzZXRfbmV0bGlzdCAkOjplbnYobHZzX3Jlc3VsdF9maWxlX3RhZykucG93ZXJlZC52CisgICAgfQorCit9CisKK3Byb2MgcnVuX2x2c19zdGVwIHt7IGx2c19lbmFibGVkIDEgfX0geworICAgICMgc2V0X2RlZiAkOjplbnYodHJpdG9uUm91dGVfcmVzdWx0X2ZpbGVfdGFnKS5kZWYKKyAgICBpZiB7ICEgWyBpbmZvIGV4aXN0cyA6OmVudihMVlNfQ1VSUkVOVF9ERUYpIF0gfSB7CisgICAgICAgIHNldCA6OmVudihMVlNfQ1VSUkVOVF9ERUYpICQ6OmVudihDVVJSRU5UX0RFRikKKyAgICB9IGVsc2UgeworICAgICAgICBzZXQgOjplbnYoQ1VSUkVOVF9ERUYpICQ6OmVudihMVlNfQ1VSUkVOVF9ERUYpCisgICAgfQorCWlmIHsgJGx2c19lbmFibGVkIH0geworCQlydW5fbWFnaWNfc3BpY2VfZXhwb3J0CisJCXJ1bl9sdnM7ICMgcmVxdWlyZXMgcnVuX21hZ2ljX3NwaWNlX2V4cG9ydAorCX0KKworfQorCitwcm9jIHJ1bl9kcmNfc3RlcCB7eyBkcmNfZW5hYmxlZCAxIH19IHsKKyAgICBpZiB7ICEgWyBpbmZvIGV4aXN0cyA6OmVudihEUkNfQ1VSUkVOVF9ERUYpIF0gfSB7CisgICAgICAgIHNldCA6OmVudihEUkNfQ1VSUkVOVF9ERUYpICQ6OmVudihDVVJSRU5UX0RFRikKKyAgICB9IGVsc2UgeworICAgICAgICBzZXQgOjplbnYoQ1VSUkVOVF9ERUYpICQ6OmVudihEUkNfQ1VSUkVOVF9ERUYpCisgICAgfQorCWlmIHsgJGRyY19lbmFibGVkIH0geworCQlydW5fbWFnaWNfZHJjCisJCXJ1bl9rbGF5b3V0X2RyYworCX0KK30KKworcHJvYyBydW5fYW50ZW5uYV9jaGVja19zdGVwIHt7IGFudGVubmFfY2hlY2tfZW5hYmxlZCAxIH19IHsKKyAgICBpZiB7ICEgWyBpbmZvIGV4aXN0cyA6OmVudihBTlRFTk5BX0NIRUNLX0NVUlJFTlRfREVGKSBdIH0geworICAgICAgICBzZXQgOjplbnYoQU5URU5OQV9DSEVDS19DVVJSRU5UX0RFRikgJDo6ZW52KENVUlJFTlRfREVGKQorICAgIH0gZWxzZSB7CisgICAgICAgIHNldCA6OmVudihDVVJSRU5UX0RFRikgJDo6ZW52KEFOVEVOTkFfQ0hFQ0tfQ1VSUkVOVF9ERUYpCisgICAgfQorCWlmIHsgJGFudGVubmFfY2hlY2tfZW5hYmxlZCB9IHsKKwkJcnVuX2FudGVubmFfY2hlY2sKKwl9Cit9CisKK3Byb2MgcnVuX2Zsb3cge2FyZ3N9IHsKKyAgICAgICBzZXQgc2NyaXB0X2RpciBbZmlsZSBkaXJuYW1lIFtmaWxlIG5vcm1hbGl6ZSBbaW5mbyBzY3JpcHRdXV0KKworCQlzZXQgb3B0aW9ucyB7CisJCXstZGVzaWduIHJlcXVpcmVkfQorCQl7LXNhdmVfcGF0aCBvcHRpb25hbH0KKwkJey1ub19sdnMgb3B0aW9uYWx9CisJICAgIHstbm9fZHJjIG9wdGlvbmFsfQorCSAgICB7LW5vX2FudGVubmFjaGVjayBvcHRpb25hbH0KKwl9CisJc2V0IGZsYWdzIHstc2F2ZX0KKwlwYXJzZV9rZXlfYXJncyAicnVuX2Zsb3ciIGFyZ3MgYXJnX3ZhbHVlcyAkb3B0aW9ucyBmbGFnc19tYXAgJGZsYWdzIC1ub19jb25zdW1lCisKKwlwcmVwIHsqfSRhcmdzCisKKyAgICAgICAgc2V0IExWU19FTkFCTEVEIDEKKyAgICAgICAgc2V0IERSQ19FTkFCTEVEIDAKKyAgICAgICAgc2V0IEFOVEVOTkFDSEVDS19FTkFCTEVEIDEKKworICAgICAgICBzZXQgc3RlcHMgW2RpY3QgY3JlYXRlICJzeW50aGVzaXMiIHtydW5fc3ludGhlc2lzICIiIH0gXAorICAgICAgICAgICAgICAgICJmbG9vcnBsYW4iIHtydW5fZmxvb3JwbGFuICIifSBcCisgICAgICAgICAgICAgICAgInBsYWNlbWVudCIge3J1bl9wbGFjZW1lbnRfc3RlcCAiIn0gXAorICAgICAgICAgICAgICAgICJjdHMiIHtydW5fY3RzX3N0ZXAgIiJ9IFwKKyAgICAgICAgICAgICAgICAicm91dGluZyIge3J1bl9yb3V0aW5nX3N0ZXAgIiJ9XAorICAgICAgICAgICAgICAgICJkaW9kZV9pbnNlcnRpb24iIHtydW5fZGlvZGVfaW5zZXJ0aW9uXzJfNV9zdGVwICIifSBcCisgICAgICAgICAgICAgICAgInBvd2VyX3BpbnNfaW5zZXJ0aW9uIiB7cnVuX3Bvd2VyX3BpbnNfaW5zZXJ0aW9uX3N0ZXAgIiJ9IFwKKyAgICAgICAgICAgICAgICAiZ2RzX21hZ2ljIiB7cnVuX21hZ2ljICIifSBcCisgICAgICAgICAgICAgICAgImdkc19kcmNfa2xheW91dCIge3J1bl9rbGF5b3V0ICIifSBcCisgICAgICAgICAgICAgICAgImdkc194b3Jfa2xheW91dCIge3J1bl9rbGF5b3V0X2dkc194b3IgIiJ9IFwKKyAgICAgICAgICAgICAgICAibHZzIiAicnVuX2x2c19zdGVwICRMVlNfRU5BQkxFRCIgXAorICAgICAgICAgICAgICAgICJkcmMiICJydW5fZHJjX3N0ZXAgJERSQ19FTkFCTEVEIiBcCisgICAgICAgICAgICAgICAgImFudGVubmFfY2hlY2siICJydW5fYW50ZW5uYV9jaGVja19zdGVwICRBTlRFTk5BQ0hFQ0tfRU5BQkxFRCIgXAorICAgICAgICAgICAgICAgICJjdmMiIHtydW5fbGVmX2N2Y30KKyAgICAgICAgXQorCisgICAgICAgc2V0X2lmX3Vuc2V0IGFyZ192YWx1ZXMoLXRvKSAiY3ZjIjsKKworICAgICAgIGlmIHsgIFtpbmZvIGV4aXN0cyA6OmVudihDVVJSRU5UX1NURVApIF0gfSB7CisgICAgICAgICAgIHB1dHMgIlxbSU5GT1xdOlBpY2tpbmcgdXAgd2hlcmUgbGFzdCBleGVjdXRpb24gbGVmdCBvZmYiCisgICAgICAgICAgIHB1dHMgW2Zvcm1hdCAiXFtJTkZPXF06Q3VycmVudCBzdGFnZSBpcyAlcyAiICQ6OmVudihDVVJSRU5UX1NURVApXQorICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgIHNldCA6OmVudihDVVJSRU5UX1NURVApICJzeW50aGVzaXMiOworICAgICAgIH0KKyAgICAgICBzZXRfaWZfdW5zZXQgYXJnX3ZhbHVlcygtZnJvbSkgJDo6ZW52KENVUlJFTlRfU1RFUCk7CisgICAgICAgc2V0IGV4ZSAwOworICAgICAgIGRpY3QgZm9yIHtzdGVwX25hbWUgc3RlcF9leGV9ICRzdGVwcyB7CisgICAgICAgICAgIGlmIHsgWyBzdHJpbmcgZXF1YWwgJGFyZ192YWx1ZXMoLWZyb20pICRzdGVwX25hbWUgXSB9IHsKKyAgICAgICAgICAgICAgIHNldCBleGUgMTsKKyAgICAgICAgICAgfQorCisgICAgICAgICAgIGlmIHsgJGV4ZSB9IHsKKyAgICAgICAgICAgICAgICMgRm9yIHdoZW4gaXQgZmFpbHMKKyAgICAgICAgICAgICAgIHNldCA6OmVudihDVVJSRU5UX1NURVApICRzdGVwX25hbWUKKyAgICAgICAgICAgICAgIFtsaW5kZXggJHN0ZXBfZXhlIDBdIFtsaW5kZXggJHN0ZXBfZXhlIDFdIDsKKyAgICAgICAgICAgfQorCisgICAgICAgICAgIGlmIHsgWyBzdHJpbmcgZXF1YWwgJGFyZ192YWx1ZXMoLXRvKSAkc3RlcF9uYW1lIF0gfSB7CisgICAgICAgICAgICAgICBzZXQgZXhlIDA6CisgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgfQorCisgICAgICAgfQorCisgICAgICAgIyBmb3Igd2hlbiBpdCByZXN1bWVzCisgICAgICAgc2V0IHN0ZXBzX2FzX2xpc3QgW2RpY3Qga2V5cyAkc3RlcHNdCisgICAgICAgc2V0IG5leHRfaWR4IFtleHByIFtsc2VhcmNoICRzdGVwc19hc19saXN0ICQ6OmVudihDVVJSRU5UX1NURVApXSArIDFdCisgICAgICAgc2V0IDo6ZW52KENVUlJFTlRfU1RFUCkgW2xpbmRleCAkc3RlcHNfYXNfbGlzdCAkbmV4dF9pZHhdCisKKwlpZiB7ICBbaW5mbyBleGlzdHMgZmxhZ3NfbWFwKC1zYXZlKSBdIH0geworCQlpZiB7ICEgW2luZm8gZXhpc3RzIGFyZ192YWx1ZXMoLXNhdmVfcGF0aCldIH0geworCQkJc2V0IGFyZ192YWx1ZXMoLXNhdmVfcGF0aCkgIiIKKwkJfQorCQlzYXZlX3ZpZXdzIAktbGVmX3BhdGggJDo6ZW52KG1hZ2ljX3Jlc3VsdF9maWxlX3RhZykubGVmIFwKKwkJCS1kZWZfcGF0aCAkOjplbnYoQ1VSUkVOVF9ERUYpIFwKKwkJCS1nZHNfcGF0aCAkOjplbnYobWFnaWNfcmVzdWx0X2ZpbGVfdGFnKS5nZHMgXAorCQkJLW1hZ19wYXRoICQ6OmVudihtYWdpY19yZXN1bHRfZmlsZV90YWcpLm1hZyBcCisJCQktbWFnbGVmX3BhdGggJDo6ZW52KG1hZ2ljX3Jlc3VsdF9maWxlX3RhZykubGVmLm1hZyBcCisJCQktc3BpY2VfcGF0aCAkOjplbnYobWFnaWNfcmVzdWx0X2ZpbGVfdGFnKS5zcGljZSBcCisJCQktc3BlZl9wYXRoICQ6OmVudihDVVJSRU5UX1NQRUYpIFwKKwkJCS12ZXJpbG9nX3BhdGggJDo6ZW52KENVUlJFTlRfTkVUTElTVCkgXAorCQkJLXNhdmVfcGF0aCAkYXJnX3ZhbHVlcygtc2F2ZV9wYXRoKSBcCisJCQktdGFnICQ6OmVudihSVU5fVEFHKQorCX0KKworCisJY2FsY190b3RhbF9ydW50aW1lCisJc2F2ZV9zdGF0ZQorCWdlbmVyYXRlX2ZpbmFsX3N1bW1hcnlfcmVwb3J0CisJCisJY2hlY2tfdGltaW5nX3Zpb2xhdGlvbnMKKworCXB1dHNfc3VjY2VzcyAiRmxvdyBDb21wbGV0ZWQgV2l0aG91dCBGYXRhbCBFcnJvcnMuIgorCit9CisKK3J1bl9mbG93IHsqfSRhcmd2CmRpZmYgLS1naXQgYS9vcGVubGFuZS95aWZpdmUvcGRuLnRjbCBiL29wZW5sYW5lL3lpZml2ZS9wZG4udGNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmZTY4OWIKLS0tIC9kZXYvbnVsbAorKysgYi9vcGVubGFuZS95aWZpdmUvcGRuLnRjbApAQCAtMCwwICsxLDQ5IEBACisjIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjAgRWZhYmxlc3MgQ29ycG9yYXRpb24KKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisKKyMgUG93ZXIgbmV0cworc2V0IDo6cG93ZXJfbmV0cyAkOjplbnYoVkREX1BJTikKK3NldCA6Omdyb3VuZF9uZXRzICQ6OmVudihHTkRfUElOKQorCitzZXQgOjptYWNyb19ibG9ja2FnZV9sYXllcl9saXN0ICJsaTEgbWV0MSBtZXQyIG1ldDMgbWV0NCBtZXQ1IgorCitwZG5nZW46OnNwZWNpZnlfZ3JpZCBzdGRjZWxsIHsKKyAgICBuYW1lIGdyaWQKKyAgICByYWlscyB7CisJICAgIG1ldDEge3dpZHRoIDAuNDggcGl0Y2ggJDo6ZW52KFBMQUNFX1NJVEVfSEVJR0hUKSBvZmZzZXQgMH0KKyAgICB9CisgICAgc3RyYXBzIHsKKwkgICAgbWV0NCB7d2lkdGggMS42IHBpdGNoICQ6OmVudihGUF9QRE5fVlBJVENIKSBvZmZzZXQgJDo6ZW52KEZQX1BETl9WT0ZGU0VUKX0KKwkgICAgbWV0NSB7d2lkdGggMS42IHBpdGNoICQ6OmVudihGUF9QRE5fSFBJVENIKSBvZmZzZXQgJDo6ZW52KEZQX1BETl9IT0ZGU0VUKX0KKyAgICB9CisgICAgY29ubmVjdCB7e21ldDEgbWV0NH0ge21ldDQgbWV0NX19Cit9CisKK3Bkbmdlbjo6c3BlY2lmeV9ncmlkIG1hY3JvIHsKKyAgICBwb3dlcl9waW5zICJWUFdSIgorICAgIGdyb3VuZF9waW5zICJWR05EIgorICAgIGJsb2NrYWdlcyAibGkxIG1ldDEgbWV0MiBtZXQzIG1ldDQiCisgICAgc3RyYXBzIHsgCisgICAgfSAKKyAgICBjb25uZWN0IHt7bWV0NF9QSU5fdmVyIG1ldDV9fQorfQorCitzZXQgOjpoYWxvIDUKKworIyBQT1dFUiBvciBHUk9VTkQgI1N0ZC4gY2VsbCByYWlscyBzdGFydGluZyB3aXRoIHBvd2VyIG9yIGdyb3VuZCByYWlscyBhdCB0aGUgYm90dG9tIG9mIHRoZSBjb3JlIGFyZWEKK3NldCA6OnJhaWxzX3N0YXJ0X3dpdGggIlBPV0VSIiA7CisKKyMgUE9XRVIgb3IgR1JPVU5EICNVcHBlciBtZXRhbCBzdHJpcGVzIHN0YXJ0aW5nIHdpdGggcG93ZXIgb3IgZ3JvdW5kIHJhaWxzIGF0IHRoZSBsZWZ0L2JvdHRvbSBvZiB0aGUgY29yZSBhcmVhCitzZXQgOjpzdHJpcGVzX3N0YXJ0X3dpdGggIlBPV0VSIiA7CmRpZmYgLS1naXQgYS9vcGVubGFuZS95aWZpdmUvcGluX29yZGVyLmNmZyBiL29wZW5sYW5lL3lpZml2ZS9waW5fb3JkZXIuY2ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNjhjNWYKLS0tIC9kZXYvbnVsbAorKysgYi9vcGVubGFuZS95aWZpdmUvcGluX29yZGVyLmNmZwpAQCAtMCwwICsxLDc5NiBAQAorI0JVU19TT1JUCisKKyNNQU5VQUxfUExBQ0UKKworCisjRQorc29mdF9pcnEgICAgICAgICAgICAwNTAwIDAgMgoraXJxX2xpbmVzXFsxNVxdICAgICAKK2lycV9saW5lc1xbMTRcXSAgICAgCitpcnFfbGluZXNcWzEzXF0gICAgIAoraXJxX2xpbmVzXFsxMlxdICAgICAKK2lycV9saW5lc1xbMTFcXSAgICAgCitpcnFfbGluZXNcWzEwXF0gICAgIAoraXJxX2xpbmVzXFs5XF0gICAgIAoraXJxX2xpbmVzXFs4XF0gICAgIAoraXJxX2xpbmVzXFs3XF0gICAgIAoraXJxX2xpbmVzXFs2XF0gICAgIAoraXJxX2xpbmVzXFs1XF0gICAgIAoraXJxX2xpbmVzXFs0XF0gICAgIAoraXJxX2xpbmVzXFszXF0gICAgIAoraXJxX2xpbmVzXFsyXF0gICAgIAoraXJxX2xpbmVzXFsxXF0gICAgIAoraXJxX2xpbmVzXFswXF0gICAgIAorZnVzZV9taGFydGlkXFszMVxdIAorZnVzZV9taGFydGlkXFszMFxdIAorZnVzZV9taGFydGlkXFsyOVxdIAorZnVzZV9taGFydGlkXFsyOFxdIAorZnVzZV9taGFydGlkXFsyN1xdIAorZnVzZV9taGFydGlkXFsyNlxdIAorZnVzZV9taGFydGlkXFsyNVxdIAorZnVzZV9taGFydGlkXFsyNFxdIAorZnVzZV9taGFydGlkXFsyM1xdIAorZnVzZV9taGFydGlkXFsyMlxdIAorZnVzZV9taGFydGlkXFsyMVxdIAorZnVzZV9taGFydGlkXFsyMFxdIAorZnVzZV9taGFydGlkXFsxOVxdIAorZnVzZV9taGFydGlkXFsxOFxdIAorZnVzZV9taGFydGlkXFsxN1xdIAorZnVzZV9taGFydGlkXFsxNlxdIAorZnVzZV9taGFydGlkXFsxNVxdIAorZnVzZV9taGFydGlkXFsxNFxdIAorZnVzZV9taGFydGlkXFsxM1xdIAorZnVzZV9taGFydGlkXFsxMlxdIAorZnVzZV9taGFydGlkXFsxMVxdIAorZnVzZV9taGFydGlkXFsxMFxdIAorZnVzZV9taGFydGlkXFs5XF0gCitmdXNlX21oYXJ0aWRcWzhcXSAKK2Z1c2VfbWhhcnRpZFxbN1xdIAorZnVzZV9taGFydGlkXFs2XF0gCitmdXNlX21oYXJ0aWRcWzVcXSAKK2Z1c2VfbWhhcnRpZFxbNFxdIAorZnVzZV9taGFydGlkXFszXF0gCitmdXNlX21oYXJ0aWRcWzJcXSAKK2Z1c2VfbWhhcnRpZFxbMVxdIAorZnVzZV9taGFydGlkXFswXF0gCisKK2NmZ19jc2thX3Jpc2N2XFszXF0gICAgCitjZmdfY3NrYV9yaXNjdlxbMlxdCitjZmdfY3NrYV9yaXNjdlxbMVxdCitjZmdfY3NrYV9yaXNjdlxbMFxdCit3YmRfY2xrX2ludAord2JkX2Nsa19yaXNjdgord2JfY2xrICAgICAgICAgICAgCisKKword2JkX2RtZW1fc3RiX28gICAgICAgICAgMDcwMCAwCit3YmRfZG1lbV93ZV9vICAgICAgICAgICAKK3diZF9kbWVtX2Fkcl9vXFszMVxdICAgIAord2JkX2RtZW1fYWRyX29cWzMwXF0gICAgCit3YmRfZG1lbV9hZHJfb1xbMjlcXSAgICAKK3diZF9kbWVtX2Fkcl9vXFsyOFxdICAgIAord2JkX2RtZW1fYWRyX29cWzI3XF0gICAgCit3YmRfZG1lbV9hZHJfb1xbMjZcXSAgICAKK3diZF9kbWVtX2Fkcl9vXFsyNVxdICAgIAord2JkX2RtZW1fYWRyX29cWzI0XF0gICAgCit3YmRfZG1lbV9hZHJfb1xbMjNcXSAgICAKK3diZF9kbWVtX2Fkcl9vXFsyMlxdICAgIAord2JkX2RtZW1fYWRyX29cWzIxXF0gICAgCit3YmRfZG1lbV9hZHJfb1xbMjBcXSAgICAKK3diZF9kbWVtX2Fkcl9vXFsxOVxdICAgIAord2JkX2RtZW1fYWRyX29cWzE4XF0gICAgCit3YmRfZG1lbV9hZHJfb1xbMTdcXSAgICAKK3diZF9kbWVtX2Fkcl9vXFsxNlxdICAgIAord2JkX2RtZW1fYWRyX29cWzE1XF0gICAgCit3YmRfZG1lbV9hZHJfb1xbMTRcXSAgICAKK3diZF9kbWVtX2Fkcl9vXFsxM1xdICAgIAord2JkX2RtZW1fYWRyX29cWzEyXF0gICAgCit3YmRfZG1lbV9hZHJfb1xbMTFcXSAgICAKK3diZF9kbWVtX2Fkcl9vXFsxMFxdICAgCit3YmRfZG1lbV9hZHJfb1xbOVxdICAgIAord2JkX2RtZW1fYWRyX29cWzhcXSAgICAKK3diZF9kbWVtX2Fkcl9vXFs3XF0gICAgCit3YmRfZG1lbV9hZHJfb1xbNlxdICAgIAord2JkX2RtZW1fYWRyX29cWzVcXSAgICAKK3diZF9kbWVtX2Fkcl9vXFs0XF0gICAgCit3YmRfZG1lbV9hZHJfb1xbM1xdICAgIAord2JkX2RtZW1fYWRyX29cWzJcXSAgICAKK3diZF9kbWVtX2Fkcl9vXFsxXF0gICAgCit3YmRfZG1lbV9hZHJfb1xbMFxdICAgIAord2JkX2RtZW1fc2VsX29cWzNcXSAgICAKK3diZF9kbWVtX3NlbF9vXFsyXF0gICAgCit3YmRfZG1lbV9zZWxfb1xbMVxdICAgIAord2JkX2RtZW1fc2VsX29cWzBcXSAgICAKK3diZF9kbWVtX2RhdF9vXFszMVxdICAgCit3YmRfZG1lbV9kYXRfb1xbMzBcXSAgIAord2JkX2RtZW1fZGF0X29cWzI5XF0gICAKK3diZF9kbWVtX2RhdF9vXFsyOFxdICAgCit3YmRfZG1lbV9kYXRfb1xbMjdcXSAgIAord2JkX2RtZW1fZGF0X29cWzI2XF0gICAKK3diZF9kbWVtX2RhdF9vXFsyNVxdICAgCit3YmRfZG1lbV9kYXRfb1xbMjRcXSAgIAord2JkX2RtZW1fZGF0X29cWzIzXF0gICAKK3diZF9kbWVtX2RhdF9vXFsyMlxdICAgCit3YmRfZG1lbV9kYXRfb1xbMjFcXSAgIAord2JkX2RtZW1fZGF0X29cWzIwXF0gICAKK3diZF9kbWVtX2RhdF9vXFsxOVxdICAgCit3YmRfZG1lbV9kYXRfb1xbMThcXSAgIAord2JkX2RtZW1fZGF0X29cWzE3XF0gICAKK3diZF9kbWVtX2RhdF9vXFsxNlxdICAgCit3YmRfZG1lbV9kYXRfb1xbMTVcXSAgIAord2JkX2RtZW1fZGF0X29cWzE0XF0gICAKK3diZF9kbWVtX2RhdF9vXFsxM1xdICAgCit3YmRfZG1lbV9kYXRfb1xbMTJcXSAgCit3YmRfZG1lbV9kYXRfb1xbMTFcXSAgCit3YmRfZG1lbV9kYXRfb1xbMTBcXSAgCit3YmRfZG1lbV9kYXRfb1xbOVxdICAgCit3YmRfZG1lbV9kYXRfb1xbOFxdICAgCit3YmRfZG1lbV9kYXRfb1xbN1xdICAgCit3YmRfZG1lbV9kYXRfb1xbNlxdICAgCit3YmRfZG1lbV9kYXRfb1xbNVxdICAgCit3YmRfZG1lbV9kYXRfb1xbNFxdICAgCit3YmRfZG1lbV9kYXRfb1xbM1xdICAgCit3YmRfZG1lbV9kYXRfb1xbMlxdICAgCit3YmRfZG1lbV9kYXRfb1xbMVxdICAgCit3YmRfZG1lbV9kYXRfb1xbMFxdICAgCit3YmRfZG1lbV9kYXRfaVxbMzFcXSAgCit3YmRfZG1lbV9kYXRfaVxbMzBcXSAgCit3YmRfZG1lbV9kYXRfaVxbMjlcXSAgCit3YmRfZG1lbV9kYXRfaVxbMjhcXSAgCit3YmRfZG1lbV9kYXRfaVxbMjdcXSAgCit3YmRfZG1lbV9kYXRfaVxbMjZcXSAgCit3YmRfZG1lbV9kYXRfaVxbMjVcXSAgCit3YmRfZG1lbV9kYXRfaVxbMjRcXSAgCit3YmRfZG1lbV9kYXRfaVxbMjNcXSAgCit3YmRfZG1lbV9kYXRfaVxbMjJcXSAgCit3YmRfZG1lbV9kYXRfaVxbMjFcXSAgCit3YmRfZG1lbV9kYXRfaVxbMjBcXSAgCit3YmRfZG1lbV9kYXRfaVxbMTlcXSAgCit3YmRfZG1lbV9kYXRfaVxbMThcXSAgCit3YmRfZG1lbV9kYXRfaVxbMTdcXSAgCit3YmRfZG1lbV9kYXRfaVxbMTZcXSAgCit3YmRfZG1lbV9kYXRfaVxbMTVcXSAgCit3YmRfZG1lbV9kYXRfaVxbMTRcXSAgCit3YmRfZG1lbV9kYXRfaVxbMTNcXSAgCit3YmRfZG1lbV9kYXRfaVxbMTJcXSAgCit3YmRfZG1lbV9kYXRfaVxbMTFcXSAgCit3YmRfZG1lbV9kYXRfaVxbMTBcXSAgCit3YmRfZG1lbV9kYXRfaVxbOVxdICAKK3diZF9kbWVtX2RhdF9pXFs4XF0gIAord2JkX2RtZW1fZGF0X2lcWzdcXSAgCit3YmRfZG1lbV9kYXRfaVxbNlxdICAKK3diZF9kbWVtX2RhdF9pXFs1XF0gIAord2JkX2RtZW1fZGF0X2lcWzRcXSAgCit3YmRfZG1lbV9kYXRfaVxbM1xdICAKK3diZF9kbWVtX2RhdF9pXFsyXF0gIAord2JkX2RtZW1fZGF0X2lcWzFcXSAgCit3YmRfZG1lbV9kYXRfaVxbMFxdICAKK3diZF9kbWVtX2Fja19pICAgICAgIAord2JkX2RtZW1fZXJyX2kgICAgICAgCisKK3diX2RjYWNoZV9zdGJfbyAgICAgICAwOTAwIDAgIDIKK3diX2RjYWNoZV93ZV9vICAgICAgICAKK3diX2RjYWNoZV9hZHJfb1xbMzFcXSAKK3diX2RjYWNoZV9hZHJfb1xbMzBcXSAKK3diX2RjYWNoZV9hZHJfb1xbMjlcXSAKK3diX2RjYWNoZV9hZHJfb1xbMjhcXSAKK3diX2RjYWNoZV9hZHJfb1xbMjdcXSAKK3diX2RjYWNoZV9hZHJfb1xbMjZcXSAKK3diX2RjYWNoZV9hZHJfb1xbMjVcXSAKK3diX2RjYWNoZV9hZHJfb1xbMjRcXSAKK3diX2RjYWNoZV9hZHJfb1xbMjNcXSAKK3diX2RjYWNoZV9hZHJfb1xbMjJcXSAKK3diX2RjYWNoZV9hZHJfb1xbMjFcXSAKK3diX2RjYWNoZV9hZHJfb1xbMjBcXSAKK3diX2RjYWNoZV9hZHJfb1xbMTlcXSAKK3diX2RjYWNoZV9hZHJfb1xbMThcXSAKK3diX2RjYWNoZV9hZHJfb1xbMTdcXSAKK3diX2RjYWNoZV9hZHJfb1xbMTZcXSAKK3diX2RjYWNoZV9hZHJfb1xbMTVcXSAKK3diX2RjYWNoZV9hZHJfb1xbMTRcXSAKK3diX2RjYWNoZV9hZHJfb1xbMTNcXSAKK3diX2RjYWNoZV9hZHJfb1xbMTJcXSAKK3diX2RjYWNoZV9hZHJfb1xbMTFcXSAKK3diX2RjYWNoZV9hZHJfb1xbMTBcXSAKK3diX2RjYWNoZV9hZHJfb1xbOVxdIAord2JfZGNhY2hlX2Fkcl9vXFs4XF0gCit3Yl9kY2FjaGVfYWRyX29cWzdcXSAKK3diX2RjYWNoZV9hZHJfb1xbNlxdIAord2JfZGNhY2hlX2Fkcl9vXFs1XF0gCit3Yl9kY2FjaGVfYWRyX29cWzRcXSAKK3diX2RjYWNoZV9hZHJfb1xbM1xdIAord2JfZGNhY2hlX2Fkcl9vXFsyXF0gCit3Yl9kY2FjaGVfYWRyX29cWzFcXSAKK3diX2RjYWNoZV9hZHJfb1xbMFxdIAord2JfZGNhY2hlX3NlbF9vXFszXF0gIAord2JfZGNhY2hlX3NlbF9vXFsyXF0gIAord2JfZGNhY2hlX3NlbF9vXFsxXF0gIAord2JfZGNhY2hlX3NlbF9vXFswXF0gIAord2JfZGNhY2hlX2JsX29cWzlcXSAgCit3Yl9kY2FjaGVfYmxfb1xbOFxdICAKK3diX2RjYWNoZV9ibF9vXFs3XF0gIAord2JfZGNhY2hlX2JsX29cWzZcXSAgCit3Yl9kY2FjaGVfYmxfb1xbNVxdICAKK3diX2RjYWNoZV9ibF9vXFs0XF0gIAord2JfZGNhY2hlX2JsX29cWzNcXSAgCit3Yl9kY2FjaGVfYmxfb1xbMlxdICAKK3diX2RjYWNoZV9ibF9vXFsxXF0gIAord2JfZGNhY2hlX2JsX29cWzBcXSAgCit3Yl9kY2FjaGVfYnJ5X28KK3diX2RjYWNoZV9kYXRfb1xbMzFcXSAKK3diX2RjYWNoZV9kYXRfb1xbMzBcXSAKK3diX2RjYWNoZV9kYXRfb1xbMjlcXSAKK3diX2RjYWNoZV9kYXRfb1xbMjhcXSAKK3diX2RjYWNoZV9kYXRfb1xbMjdcXSAKK3diX2RjYWNoZV9kYXRfb1xbMjZcXSAKK3diX2RjYWNoZV9kYXRfb1xbMjVcXSAKK3diX2RjYWNoZV9kYXRfb1xbMjRcXSAKK3diX2RjYWNoZV9kYXRfb1xbMjNcXSAKK3diX2RjYWNoZV9kYXRfb1xbMjJcXSAKK3diX2RjYWNoZV9kYXRfb1xbMjFcXSAKK3diX2RjYWNoZV9kYXRfb1xbMjBcXSAKK3diX2RjYWNoZV9kYXRfb1xbMTlcXSAKK3diX2RjYWNoZV9kYXRfb1xbMThcXSAKK3diX2RjYWNoZV9kYXRfb1xbMTdcXSAKK3diX2RjYWNoZV9kYXRfb1xbMTZcXSAKK3diX2RjYWNoZV9kYXRfb1xbMTVcXSAKK3diX2RjYWNoZV9kYXRfb1xbMTRcXSAKK3diX2RjYWNoZV9kYXRfb1xbMTNcXSAKK3diX2RjYWNoZV9kYXRfb1xbMTJcXSAKK3diX2RjYWNoZV9kYXRfb1xbMTFcXSAKK3diX2RjYWNoZV9kYXRfb1xbMTBcXSAKK3diX2RjYWNoZV9kYXRfb1xbOVxdICAKK3diX2RjYWNoZV9kYXRfb1xbOFxdICAKK3diX2RjYWNoZV9kYXRfb1xbN1xdICAKK3diX2RjYWNoZV9kYXRfb1xbNlxdICAKK3diX2RjYWNoZV9kYXRfb1xbNVxdICAKK3diX2RjYWNoZV9kYXRfb1xbNFxdICAKK3diX2RjYWNoZV9kYXRfb1xbM1xdICAKK3diX2RjYWNoZV9kYXRfb1xbMlxdICAKK3diX2RjYWNoZV9kYXRfb1xbMVxdICAKK3diX2RjYWNoZV9kYXRfb1xbMFxdICAKK3diX2RjYWNoZV9kYXRfaVxbMzFcXSAKK3diX2RjYWNoZV9kYXRfaVxbMzBcXSAKK3diX2RjYWNoZV9kYXRfaVxbMjlcXSAKK3diX2RjYWNoZV9kYXRfaVxbMjhcXSAKK3diX2RjYWNoZV9kYXRfaVxbMjdcXSAKK3diX2RjYWNoZV9kYXRfaVxbMjZcXSAKK3diX2RjYWNoZV9kYXRfaVxbMjVcXSAKK3diX2RjYWNoZV9kYXRfaVxbMjRcXSAKK3diX2RjYWNoZV9kYXRfaVxbMjNcXSAKK3diX2RjYWNoZV9kYXRfaVxbMjJcXSAKK3diX2RjYWNoZV9kYXRfaVxbMjFcXSAKK3diX2RjYWNoZV9kYXRfaVxbMjBcXSAKK3diX2RjYWNoZV9kYXRfaVxbMTlcXSAKK3diX2RjYWNoZV9kYXRfaVxbMThcXSAKK3diX2RjYWNoZV9kYXRfaVxbMTdcXSAKK3diX2RjYWNoZV9kYXRfaVxbMTZcXSAKK3diX2RjYWNoZV9kYXRfaVxbMTVcXSAKK3diX2RjYWNoZV9kYXRfaVxbMTRcXSAKK3diX2RjYWNoZV9kYXRfaVxbMTNcXSAKK3diX2RjYWNoZV9kYXRfaVxbMTJcXSAKK3diX2RjYWNoZV9kYXRfaVxbMTFcXSAKK3diX2RjYWNoZV9kYXRfaVxbMTBcXSAKK3diX2RjYWNoZV9kYXRfaVxbOVxdIAord2JfZGNhY2hlX2RhdF9pXFs4XF0gCit3Yl9kY2FjaGVfZGF0X2lcWzdcXSAKK3diX2RjYWNoZV9kYXRfaVxbNlxdIAord2JfZGNhY2hlX2RhdF9pXFs1XF0gCit3Yl9kY2FjaGVfZGF0X2lcWzRcXSAKK3diX2RjYWNoZV9kYXRfaVxbM1xdIAord2JfZGNhY2hlX2RhdF9pXFsyXF0gCit3Yl9kY2FjaGVfZGF0X2lcWzFcXSAKK3diX2RjYWNoZV9kYXRfaVxbMFxdIAord2JfZGNhY2hlX2Fja19pICAgICAgCit3Yl9kY2FjaGVfbGFja19pICAgICAgCit3Yl9kY2FjaGVfZXJyX2kgICAgICAKKword2JfaWNhY2hlX3N0Yl9vICAgICAgIDExMDAgMCAgMgord2JfaWNhY2hlX3dlX28gICAgICAgIAord2JfaWNhY2hlX2Fkcl9vXFszMVxdIAord2JfaWNhY2hlX2Fkcl9vXFszMFxdIAord2JfaWNhY2hlX2Fkcl9vXFsyOVxdIAord2JfaWNhY2hlX2Fkcl9vXFsyOFxdIAord2JfaWNhY2hlX2Fkcl9vXFsyN1xdIAord2JfaWNhY2hlX2Fkcl9vXFsyNlxdIAord2JfaWNhY2hlX2Fkcl9vXFsyNVxdIAord2JfaWNhY2hlX2Fkcl9vXFsyNFxdIAord2JfaWNhY2hlX2Fkcl9vXFsyM1xdIAord2JfaWNhY2hlX2Fkcl9vXFsyMlxdIAord2JfaWNhY2hlX2Fkcl9vXFsyMVxdIAord2JfaWNhY2hlX2Fkcl9vXFsyMFxdIAord2JfaWNhY2hlX2Fkcl9vXFsxOVxdIAord2JfaWNhY2hlX2Fkcl9vXFsxOFxdIAord2JfaWNhY2hlX2Fkcl9vXFsxN1xdIAord2JfaWNhY2hlX2Fkcl9vXFsxNlxdIAord2JfaWNhY2hlX2Fkcl9vXFsxNVxdIAord2JfaWNhY2hlX2Fkcl9vXFsxNFxdIAord2JfaWNhY2hlX2Fkcl9vXFsxM1xdIAord2JfaWNhY2hlX2Fkcl9vXFsxMlxdIAord2JfaWNhY2hlX2Fkcl9vXFsxMVxdIAord2JfaWNhY2hlX2Fkcl9vXFsxMFxdIAord2JfaWNhY2hlX2Fkcl9vXFs5XF0gCit3Yl9pY2FjaGVfYWRyX29cWzhcXSAKK3diX2ljYWNoZV9hZHJfb1xbN1xdIAord2JfaWNhY2hlX2Fkcl9vXFs2XF0gCit3Yl9pY2FjaGVfYWRyX29cWzVcXSAKK3diX2ljYWNoZV9hZHJfb1xbNFxdIAord2JfaWNhY2hlX2Fkcl9vXFszXF0gCit3Yl9pY2FjaGVfYWRyX29cWzJcXSAKK3diX2ljYWNoZV9hZHJfb1xbMVxdIAord2JfaWNhY2hlX2Fkcl9vXFswXF0gCit3Yl9pY2FjaGVfc2VsX29cWzNcXSAgCit3Yl9pY2FjaGVfc2VsX29cWzJcXSAgCit3Yl9pY2FjaGVfc2VsX29cWzFcXSAgCit3Yl9pY2FjaGVfc2VsX29cWzBcXSAgCit3Yl9pY2FjaGVfYmxfb1xbOVxdICAKK3diX2ljYWNoZV9ibF9vXFs4XF0gIAord2JfaWNhY2hlX2JsX29cWzdcXSAgCit3Yl9pY2FjaGVfYmxfb1xbNlxdICAKK3diX2ljYWNoZV9ibF9vXFs1XF0gIAord2JfaWNhY2hlX2JsX29cWzRcXSAgCit3Yl9pY2FjaGVfYmxfb1xbM1xdICAKK3diX2ljYWNoZV9ibF9vXFsyXF0gIAord2JfaWNhY2hlX2JsX29cWzFcXSAgCit3Yl9pY2FjaGVfYmxfb1xbMFxdICAKK3diX2ljYWNoZV9icnlfbword2JfaWNhY2hlX2RhdF9pXFszMVxdIAord2JfaWNhY2hlX2RhdF9pXFszMFxdIAord2JfaWNhY2hlX2RhdF9pXFsyOVxdIAord2JfaWNhY2hlX2RhdF9pXFsyOFxdIAord2JfaWNhY2hlX2RhdF9pXFsyN1xdIAord2JfaWNhY2hlX2RhdF9pXFsyNlxdIAord2JfaWNhY2hlX2RhdF9pXFsyNVxdIAord2JfaWNhY2hlX2RhdF9pXFsyNFxdIAord2JfaWNhY2hlX2RhdF9pXFsyM1xdIAord2JfaWNhY2hlX2RhdF9pXFsyMlxdIAord2JfaWNhY2hlX2RhdF9pXFsyMVxdIAord2JfaWNhY2hlX2RhdF9pXFsyMFxdIAord2JfaWNhY2hlX2RhdF9pXFsxOVxdIAord2JfaWNhY2hlX2RhdF9pXFsxOFxdIAord2JfaWNhY2hlX2RhdF9pXFsxN1xdIAord2JfaWNhY2hlX2RhdF9pXFsxNlxdIAord2JfaWNhY2hlX2RhdF9pXFsxNVxdIAord2JfaWNhY2hlX2RhdF9pXFsxNFxdIAord2JfaWNhY2hlX2RhdF9pXFsxM1xdIAord2JfaWNhY2hlX2RhdF9pXFsxMlxdIAord2JfaWNhY2hlX2RhdF9pXFsxMVxdIAord2JfaWNhY2hlX2RhdF9pXFsxMFxdIAord2JfaWNhY2hlX2RhdF9pXFs5XF0gCit3Yl9pY2FjaGVfZGF0X2lcWzhcXSAKK3diX2ljYWNoZV9kYXRfaVxbN1xdIAord2JfaWNhY2hlX2RhdF9pXFs2XF0gCit3Yl9pY2FjaGVfZGF0X2lcWzVcXSAKK3diX2ljYWNoZV9kYXRfaVxbNFxdIAord2JfaWNhY2hlX2RhdF9pXFszXF0gCit3Yl9pY2FjaGVfZGF0X2lcWzJcXSAKK3diX2ljYWNoZV9kYXRfaVxbMVxdIAord2JfaWNhY2hlX2RhdF9pXFswXF0gCit3Yl9pY2FjaGVfYWNrX2kgICAgICAKK3diX2ljYWNoZV9sYWNrX2kgICAgICAKK3diX2ljYWNoZV9lcnJfaSAgICAgIAorCisjVworc3JhbTBfY2xrMSAgICAgICAgICAwMDAwIDAgMgorc3JhbTBfY3NiMQorc3JhbTBfYWRkcjFcWzhcXQorc3JhbTBfYWRkcjFcWzdcXQorc3JhbTBfYWRkcjFcWzZcXQorc3JhbTBfYWRkcjFcWzVcXQorc3JhbTBfYWRkcjFcWzRcXQorc3JhbTBfYWRkcjFcWzNcXQorc3JhbTBfYWRkcjFcWzJcXQorc3JhbTBfYWRkcjFcWzFcXQorc3JhbTBfYWRkcjFcWzBcXQorCitzcmFtMF9kb3V0MVxbMFxdICAgICAwMjAwIDAgMgorc3JhbTBfZG91dDFcWzFcXQorc3JhbTBfZG91dDFcWzJcXQorc3JhbTBfZG91dDFcWzNcXQorc3JhbTBfZG91dDFcWzRcXQorc3JhbTBfZG91dDFcWzVcXQorc3JhbTBfZG91dDFcWzZcXQorc3JhbTBfZG91dDFcWzdcXQorc3JhbTBfZG91dDFcWzhcXQorc3JhbTBfZG91dDFcWzlcXQorc3JhbTBfZG91dDFcWzEwXF0KK3NyYW0wX2RvdXQxXFsxMVxdCitzcmFtMF9kb3V0MVxbMTJcXQorc3JhbTBfZG91dDFcWzEzXF0KK3NyYW0wX2RvdXQxXFsxNFxdCitzcmFtMF9kb3V0MVxbMTVcXQorc3JhbTBfZG91dDFcWzE2XF0KK3NyYW0wX2RvdXQxXFsxN1xdCitzcmFtMF9kb3V0MVxbMThcXQorc3JhbTBfZG91dDFcWzE5XF0KK3NyYW0wX2RvdXQxXFsyMFxdCitzcmFtMF9kb3V0MVxbMjFcXQorc3JhbTBfZG91dDFcWzIyXF0KK3NyYW0wX2RvdXQxXFsyM1xdCitzcmFtMF9kb3V0MVxbMjRcXQorc3JhbTBfZG91dDFcWzI1XF0KK3NyYW0wX2RvdXQxXFsyNlxdCitzcmFtMF9kb3V0MVxbMjdcXQorc3JhbTBfZG91dDFcWzI4XF0KK3NyYW0wX2RvdXQxXFsyOVxdCitzcmFtMF9kb3V0MVxbMzBcXQorc3JhbTBfZG91dDFcWzMxXF0KKworaWNhY2hlX21lbV9jbGswICAgICAgICAgIDMwMCAwIDIKK2ljYWNoZV9tZW1fY3NiMAoraWNhY2hlX21lbV93ZWIwCitpY2FjaGVfbWVtX2FkZHIwXFswXF0KK2ljYWNoZV9tZW1fYWRkcjBcWzFcXQoraWNhY2hlX21lbV9hZGRyMFxbMlxdCitpY2FjaGVfbWVtX2FkZHIwXFszXF0KK2ljYWNoZV9tZW1fYWRkcjBcWzRcXQoraWNhY2hlX21lbV9hZGRyMFxbNVxdCitpY2FjaGVfbWVtX2FkZHIwXFs2XF0KK2ljYWNoZV9tZW1fYWRkcjBcWzdcXQoraWNhY2hlX21lbV9hZGRyMFxbOFxdCitpY2FjaGVfbWVtX3dtYXNrMFxbMFxdCitpY2FjaGVfbWVtX3dtYXNrMFxbMVxdCitpY2FjaGVfbWVtX3dtYXNrMFxbMlxdCitpY2FjaGVfbWVtX3dtYXNrMFxbM1xdCitpY2FjaGVfbWVtX2RpbjBcWzBcXQoraWNhY2hlX21lbV9kaW4wXFsxXF0KK2ljYWNoZV9tZW1fZGluMFxbMlxdCitpY2FjaGVfbWVtX2RpbjBcWzNcXQoraWNhY2hlX21lbV9kaW4wXFs0XF0KK2ljYWNoZV9tZW1fZGluMFxbNVxdCitpY2FjaGVfbWVtX2RpbjBcWzZcXQoraWNhY2hlX21lbV9kaW4wXFs3XF0KK2ljYWNoZV9tZW1fZGluMFxbOFxdCitpY2FjaGVfbWVtX2RpbjBcWzlcXQoraWNhY2hlX21lbV9kaW4wXFsxMFxdCitpY2FjaGVfbWVtX2RpbjBcWzExXF0KK2ljYWNoZV9tZW1fZGluMFxbMTJcXQoraWNhY2hlX21lbV9kaW4wXFsxM1xdCitpY2FjaGVfbWVtX2RpbjBcWzE0XF0KK2ljYWNoZV9tZW1fZGluMFxbMTVcXQoraWNhY2hlX21lbV9kaW4wXFsxNlxdCitpY2FjaGVfbWVtX2RpbjBcWzE3XF0KK2ljYWNoZV9tZW1fZGluMFxbMThcXQoraWNhY2hlX21lbV9kaW4wXFsxOVxdCitpY2FjaGVfbWVtX2RpbjBcWzIwXF0KK2ljYWNoZV9tZW1fZGluMFxbMjFcXQoraWNhY2hlX21lbV9kaW4wXFsyMlxdCitpY2FjaGVfbWVtX2RpbjBcWzIzXF0KK2ljYWNoZV9tZW1fZGluMFxbMjRcXQoraWNhY2hlX21lbV9kaW4wXFsyNVxdCitpY2FjaGVfbWVtX2RpbjBcWzI2XF0KK2ljYWNoZV9tZW1fZGluMFxbMjdcXQoraWNhY2hlX21lbV9kaW4wXFsyOFxdCitpY2FjaGVfbWVtX2RpbjBcWzI5XF0KK2ljYWNoZV9tZW1fZGluMFxbMzBcXQoraWNhY2hlX21lbV9kaW4wXFszMVxdCisKK2ljYWNoZV9tZW1fY2xrMSAgICAgICAgICAwNDAwIDAgMgoraWNhY2hlX21lbV9jc2IxCitpY2FjaGVfbWVtX2FkZHIxXFs4XF0KK2ljYWNoZV9tZW1fYWRkcjFcWzdcXQoraWNhY2hlX21lbV9hZGRyMVxbNlxdCitpY2FjaGVfbWVtX2FkZHIxXFs1XF0KK2ljYWNoZV9tZW1fYWRkcjFcWzRcXQoraWNhY2hlX21lbV9hZGRyMVxbM1xdCitpY2FjaGVfbWVtX2FkZHIxXFsyXF0KK2ljYWNoZV9tZW1fYWRkcjFcWzFcXQoraWNhY2hlX21lbV9hZGRyMVxbMFxdCisKK2ljYWNoZV9tZW1fZG91dDFcWzBcXSAgICAgMDQ1MCAwIDIKK2ljYWNoZV9tZW1fZG91dDFcWzFcXQoraWNhY2hlX21lbV9kb3V0MVxbMlxdCitpY2FjaGVfbWVtX2RvdXQxXFszXF0KK2ljYWNoZV9tZW1fZG91dDFcWzRcXQoraWNhY2hlX21lbV9kb3V0MVxbNVxdCitpY2FjaGVfbWVtX2RvdXQxXFs2XF0KK2ljYWNoZV9tZW1fZG91dDFcWzdcXQoraWNhY2hlX21lbV9kb3V0MVxbOFxdCitpY2FjaGVfbWVtX2RvdXQxXFs5XF0KK2ljYWNoZV9tZW1fZG91dDFcWzEwXF0KK2ljYWNoZV9tZW1fZG91dDFcWzExXF0KK2ljYWNoZV9tZW1fZG91dDFcWzEyXF0KK2ljYWNoZV9tZW1fZG91dDFcWzEzXF0KK2ljYWNoZV9tZW1fZG91dDFcWzE0XF0KK2ljYWNoZV9tZW1fZG91dDFcWzE1XF0KK2ljYWNoZV9tZW1fZG91dDFcWzE2XF0KK2ljYWNoZV9tZW1fZG91dDFcWzE3XF0KK2ljYWNoZV9tZW1fZG91dDFcWzE4XF0KK2ljYWNoZV9tZW1fZG91dDFcWzE5XF0KK2ljYWNoZV9tZW1fZG91dDFcWzIwXF0KK2ljYWNoZV9tZW1fZG91dDFcWzIxXF0KK2ljYWNoZV9tZW1fZG91dDFcWzIyXF0KK2ljYWNoZV9tZW1fZG91dDFcWzIzXF0KK2ljYWNoZV9tZW1fZG91dDFcWzI0XF0KK2ljYWNoZV9tZW1fZG91dDFcWzI1XF0KK2ljYWNoZV9tZW1fZG91dDFcWzI2XF0KK2ljYWNoZV9tZW1fZG91dDFcWzI3XF0KK2ljYWNoZV9tZW1fZG91dDFcWzI4XF0KK2ljYWNoZV9tZW1fZG91dDFcWzI5XF0KK2ljYWNoZV9tZW1fZG91dDFcWzMwXF0KK2ljYWNoZV9tZW1fZG91dDFcWzMxXF0KKworZGNhY2hlX21lbV9jbGswICAgICAgICAgICAgODUwIDAgMgorZGNhY2hlX21lbV9jc2IwCitkY2FjaGVfbWVtX3dlYjAKK2RjYWNoZV9tZW1fYWRkcjBcWzBcXQorZGNhY2hlX21lbV9hZGRyMFxbMVxdCitkY2FjaGVfbWVtX2FkZHIwXFsyXF0KK2RjYWNoZV9tZW1fYWRkcjBcWzNcXQorZGNhY2hlX21lbV9hZGRyMFxbNFxdCitkY2FjaGVfbWVtX2FkZHIwXFs1XF0KK2RjYWNoZV9tZW1fYWRkcjBcWzZcXQorZGNhY2hlX21lbV9hZGRyMFxbN1xdCitkY2FjaGVfbWVtX2FkZHIwXFs4XF0KK2RjYWNoZV9tZW1fd21hc2swXFswXF0KK2RjYWNoZV9tZW1fd21hc2swXFsxXF0KK2RjYWNoZV9tZW1fd21hc2swXFsyXF0KK2RjYWNoZV9tZW1fd21hc2swXFszXF0KK2RjYWNoZV9tZW1fZGluMFxbMFxdCitkY2FjaGVfbWVtX2RpbjBcWzFcXQorZGNhY2hlX21lbV9kaW4wXFsyXF0KK2RjYWNoZV9tZW1fZGluMFxbM1xdCitkY2FjaGVfbWVtX2RpbjBcWzRcXQorZGNhY2hlX21lbV9kaW4wXFs1XF0KK2RjYWNoZV9tZW1fZGluMFxbNlxdCitkY2FjaGVfbWVtX2RpbjBcWzdcXQorZGNhY2hlX21lbV9kaW4wXFs4XF0KK2RjYWNoZV9tZW1fZGluMFxbOVxdCitkY2FjaGVfbWVtX2RpbjBcWzEwXF0KK2RjYWNoZV9tZW1fZGluMFxbMTFcXQorZGNhY2hlX21lbV9kaW4wXFsxMlxdCitkY2FjaGVfbWVtX2RpbjBcWzEzXF0KK2RjYWNoZV9tZW1fZGluMFxbMTRcXQorZGNhY2hlX21lbV9kaW4wXFsxNVxdCitkY2FjaGVfbWVtX2RpbjBcWzE2XF0KK2RjYWNoZV9tZW1fZGluMFxbMTdcXQorZGNhY2hlX21lbV9kaW4wXFsxOFxdCitkY2FjaGVfbWVtX2RpbjBcWzE5XF0KK2RjYWNoZV9tZW1fZGluMFxbMjBcXQorZGNhY2hlX21lbV9kaW4wXFsyMVxdCitkY2FjaGVfbWVtX2RpbjBcWzIyXF0KK2RjYWNoZV9tZW1fZGluMFxbMjNcXQorZGNhY2hlX21lbV9kaW4wXFsyNFxdCitkY2FjaGVfbWVtX2RpbjBcWzI1XF0KK2RjYWNoZV9tZW1fZGluMFxbMjZcXQorZGNhY2hlX21lbV9kaW4wXFsyN1xdCitkY2FjaGVfbWVtX2RpbjBcWzI4XF0KK2RjYWNoZV9tZW1fZGluMFxbMjlcXQorZGNhY2hlX21lbV9kaW4wXFszMFxdCitkY2FjaGVfbWVtX2RpbjBcWzMxXF0KKworCitkY2FjaGVfbWVtX2RvdXQwXFswXF0gICA5NTAgMCAyCitkY2FjaGVfbWVtX2RvdXQwXFsxXF0KK2RjYWNoZV9tZW1fZG91dDBcWzJcXQorZGNhY2hlX21lbV9kb3V0MFxbM1xdCitkY2FjaGVfbWVtX2RvdXQwXFs0XF0KK2RjYWNoZV9tZW1fZG91dDBcWzVcXQorZGNhY2hlX21lbV9kb3V0MFxbNlxdCitkY2FjaGVfbWVtX2RvdXQwXFs3XF0KK2RjYWNoZV9tZW1fZG91dDBcWzhcXQorZGNhY2hlX21lbV9kb3V0MFxbOVxdCitkY2FjaGVfbWVtX2RvdXQwXFsxMFxdCitkY2FjaGVfbWVtX2RvdXQwXFsxMVxdCitkY2FjaGVfbWVtX2RvdXQwXFsxMlxdCitkY2FjaGVfbWVtX2RvdXQwXFsxM1xdCitkY2FjaGVfbWVtX2RvdXQwXFsxNFxdCitkY2FjaGVfbWVtX2RvdXQwXFsxNVxdCitkY2FjaGVfbWVtX2RvdXQwXFsxNlxdCitkY2FjaGVfbWVtX2RvdXQwXFsxN1xdCitkY2FjaGVfbWVtX2RvdXQwXFsxOFxdCitkY2FjaGVfbWVtX2RvdXQwXFsxOVxdCitkY2FjaGVfbWVtX2RvdXQwXFsyMFxdCitkY2FjaGVfbWVtX2RvdXQwXFsyMVxdCitkY2FjaGVfbWVtX2RvdXQwXFsyMlxdCitkY2FjaGVfbWVtX2RvdXQwXFsyM1xdCitkY2FjaGVfbWVtX2RvdXQwXFsyNFxdCitkY2FjaGVfbWVtX2RvdXQwXFsyNVxdCitkY2FjaGVfbWVtX2RvdXQwXFsyNlxdCitkY2FjaGVfbWVtX2RvdXQwXFsyN1xdCitkY2FjaGVfbWVtX2RvdXQwXFsyOFxdCitkY2FjaGVfbWVtX2RvdXQwXFsyOVxdCitkY2FjaGVfbWVtX2RvdXQwXFszMFxdCitkY2FjaGVfbWVtX2RvdXQwXFszMVxdCisKK2RjYWNoZV9tZW1fY2xrMSAgICAgICAgIDEwMDAgMCAyCitkY2FjaGVfbWVtX2NzYjEKK2RjYWNoZV9tZW1fYWRkcjFcWzhcXQorZGNhY2hlX21lbV9hZGRyMVxbN1xdCitkY2FjaGVfbWVtX2FkZHIxXFs2XF0KK2RjYWNoZV9tZW1fYWRkcjFcWzVcXQorZGNhY2hlX21lbV9hZGRyMVxbNFxdCitkY2FjaGVfbWVtX2FkZHIxXFszXF0KK2RjYWNoZV9tZW1fYWRkcjFcWzJcXQorZGNhY2hlX21lbV9hZGRyMVxbMVxdCitkY2FjaGVfbWVtX2FkZHIxXFswXF0KKworZGNhY2hlX21lbV9kb3V0MVxbMFxdICAgMTA1MCAwIDIKK2RjYWNoZV9tZW1fZG91dDFcWzFcXQorZGNhY2hlX21lbV9kb3V0MVxbMlxdCitkY2FjaGVfbWVtX2RvdXQxXFszXF0KK2RjYWNoZV9tZW1fZG91dDFcWzRcXQorZGNhY2hlX21lbV9kb3V0MVxbNVxdCitkY2FjaGVfbWVtX2RvdXQxXFs2XF0KK2RjYWNoZV9tZW1fZG91dDFcWzdcXQorZGNhY2hlX21lbV9kb3V0MVxbOFxdCitkY2FjaGVfbWVtX2RvdXQxXFs5XF0KK2RjYWNoZV9tZW1fZG91dDFcWzEwXF0KK2RjYWNoZV9tZW1fZG91dDFcWzExXF0KK2RjYWNoZV9tZW1fZG91dDFcWzEyXF0KK2RjYWNoZV9tZW1fZG91dDFcWzEzXF0KK2RjYWNoZV9tZW1fZG91dDFcWzE0XF0KK2RjYWNoZV9tZW1fZG91dDFcWzE1XF0KK2RjYWNoZV9tZW1fZG91dDFcWzE2XF0KK2RjYWNoZV9tZW1fZG91dDFcWzE3XF0KK2RjYWNoZV9tZW1fZG91dDFcWzE4XF0KK2RjYWNoZV9tZW1fZG91dDFcWzE5XF0KK2RjYWNoZV9tZW1fZG91dDFcWzIwXF0KK2RjYWNoZV9tZW1fZG91dDFcWzIxXF0KK2RjYWNoZV9tZW1fZG91dDFcWzIyXF0KK2RjYWNoZV9tZW1fZG91dDFcWzIzXF0KK2RjYWNoZV9tZW1fZG91dDFcWzI0XF0KK2RjYWNoZV9tZW1fZG91dDFcWzI1XF0KK2RjYWNoZV9tZW1fZG91dDFcWzI2XF0KK2RjYWNoZV9tZW1fZG91dDFcWzI3XF0KK2RjYWNoZV9tZW1fZG91dDFcWzI4XF0KK2RjYWNoZV9tZW1fZG91dDFcWzI5XF0KK2RjYWNoZV9tZW1fZG91dDFcWzMwXF0KK2RjYWNoZV9tZW1fZG91dDFcWzMxXF0KKworI1MKK3NyYW0wX2NsazAgICAgICAgICAgICAgIDAgMCAyCitzcmFtMF9jc2IwCitzcmFtMF93ZWIwCitzcmFtMF9hZGRyMFxbMFxdCitzcmFtMF9hZGRyMFxbMVxdCitzcmFtMF9hZGRyMFxbMlxdCitzcmFtMF9hZGRyMFxbM1xdCitzcmFtMF9hZGRyMFxbNFxdCitzcmFtMF9hZGRyMFxbNVxdCitzcmFtMF9hZGRyMFxbNlxdCitzcmFtMF9hZGRyMFxbN1xdCitzcmFtMF9hZGRyMFxbOFxdCitzcmFtMF93bWFzazBcWzBcXQorc3JhbTBfd21hc2swXFsxXF0KK3NyYW0wX3dtYXNrMFxbMlxdCitzcmFtMF93bWFzazBcWzNcXQorc3JhbTBfZGluMFxbMFxdCitzcmFtMF9kaW4wXFsxXF0KK3NyYW0wX2RpbjBcWzJcXQorc3JhbTBfZGluMFxbM1xdCitzcmFtMF9kaW4wXFs0XF0KK3NyYW0wX2RpbjBcWzVcXQorc3JhbTBfZGluMFxbNlxdCitzcmFtMF9kaW4wXFs3XF0KK3NyYW0wX2RpbjBcWzhcXQorc3JhbTBfZGluMFxbOVxdCitzcmFtMF9kaW4wXFsxMFxdCitzcmFtMF9kaW4wXFsxMVxdCitzcmFtMF9kaW4wXFsxMlxdCitzcmFtMF9kaW4wXFsxM1xdCitzcmFtMF9kaW4wXFsxNFxdCitzcmFtMF9kaW4wXFsxNVxdCitzcmFtMF9kaW4wXFsxNlxdCitzcmFtMF9kaW4wXFsxN1xdCitzcmFtMF9kaW4wXFsxOFxdCitzcmFtMF9kaW4wXFsxOVxdCitzcmFtMF9kaW4wXFsyMFxdCitzcmFtMF9kaW4wXFsyMVxdCitzcmFtMF9kaW4wXFsyMlxdCitzcmFtMF9kaW4wXFsyM1xdCitzcmFtMF9kaW4wXFsyNFxdCitzcmFtMF9kaW4wXFsyNVxdCitzcmFtMF9kaW4wXFsyNlxdCitzcmFtMF9kaW4wXFsyN1xdCitzcmFtMF9kaW4wXFsyOFxdCitzcmFtMF9kaW4wXFsyOVxdCitzcmFtMF9kaW4wXFszMFxdCitzcmFtMF9kaW4wXFszMVxdCisKKworc3JhbTBfZG91dDBcWzBcXSAgMDEwMCAwIDIKK3NyYW0wX2RvdXQwXFsxXF0KK3NyYW0wX2RvdXQwXFsyXF0KK3NyYW0wX2RvdXQwXFszXF0KK3NyYW0wX2RvdXQwXFs0XF0KK3NyYW0wX2RvdXQwXFs1XF0KK3NyYW0wX2RvdXQwXFs2XF0KK3NyYW0wX2RvdXQwXFs3XF0KK3NyYW0wX2RvdXQwXFs4XF0KK3NyYW0wX2RvdXQwXFs5XF0KK3NyYW0wX2RvdXQwXFsxMFxdCitzcmFtMF9kb3V0MFxbMTFcXQorc3JhbTBfZG91dDBcWzEyXF0KK3NyYW0wX2RvdXQwXFsxM1xdCitzcmFtMF9kb3V0MFxbMTRcXQorc3JhbTBfZG91dDBcWzE1XF0KK3NyYW0wX2RvdXQwXFsxNlxdCitzcmFtMF9kb3V0MFxbMTdcXQorc3JhbTBfZG91dDBcWzE4XF0KK3NyYW0wX2RvdXQwXFsxOVxdCitzcmFtMF9kb3V0MFxbMjBcXQorc3JhbTBfZG91dDBcWzIxXF0KK3NyYW0wX2RvdXQwXFsyMlxdCitzcmFtMF9kb3V0MFxbMjNcXQorc3JhbTBfZG91dDBcWzI0XF0KK3NyYW0wX2RvdXQwXFsyNVxdCitzcmFtMF9kb3V0MFxbMjZcXQorc3JhbTBfZG91dDBcWzI3XF0KK3NyYW0wX2RvdXQwXFsyOFxdCitzcmFtMF9kb3V0MFxbMjlcXQorc3JhbTBfZG91dDBcWzMwXF0KK3NyYW0wX2RvdXQwXFszMVxdCisKK3Jpc2N2X2RlYnVnXFswXF0gICAgICAzMDAgIDAgMgorcmlzY3ZfZGVidWdcWzFcXQorcmlzY3ZfZGVidWdcWzJcXQorcmlzY3ZfZGVidWdcWzNcXQorcmlzY3ZfZGVidWdcWzRcXQorcmlzY3ZfZGVidWdcWzVcXQorcmlzY3ZfZGVidWdcWzZcXQorcmlzY3ZfZGVidWdcWzdcXQorcmlzY3ZfZGVidWdcWzhcXQorcmlzY3ZfZGVidWdcWzlcXQorcmlzY3ZfZGVidWdcWzEwXF0KK3Jpc2N2X2RlYnVnXFsxMVxdCityaXNjdl9kZWJ1Z1xbMTJcXQorcmlzY3ZfZGVidWdcWzEzXF0KK3Jpc2N2X2RlYnVnXFsxNFxdCityaXNjdl9kZWJ1Z1xbMTVcXQorcmlzY3ZfZGVidWdcWzE2XF0KK3Jpc2N2X2RlYnVnXFsxN1xdCityaXNjdl9kZWJ1Z1xbMThcXQorcmlzY3ZfZGVidWdcWzE5XF0KK3Jpc2N2X2RlYnVnXFsyMFxdCityaXNjdl9kZWJ1Z1xbMjFcXQorcmlzY3ZfZGVidWdcWzIyXF0KK3Jpc2N2X2RlYnVnXFsyM1xdCityaXNjdl9kZWJ1Z1xbMjRcXQorcmlzY3ZfZGVidWdcWzI1XF0KK3Jpc2N2X2RlYnVnXFsyNlxdCityaXNjdl9kZWJ1Z1xbMjdcXQorcmlzY3ZfZGVidWdcWzI4XF0KK3Jpc2N2X2RlYnVnXFsyOVxdCityaXNjdl9kZWJ1Z1xbMzBcXQorcmlzY3ZfZGVidWdcWzMxXF0KK3Jpc2N2X2RlYnVnXFszMlxdCityaXNjdl9kZWJ1Z1xbMzNcXQorcmlzY3ZfZGVidWdcWzM0XF0KK3Jpc2N2X2RlYnVnXFszNVxdCityaXNjdl9kZWJ1Z1xbMzZcXQorcmlzY3ZfZGVidWdcWzM3XF0KK3Jpc2N2X2RlYnVnXFszOFxdCityaXNjdl9kZWJ1Z1xbMzlcXQorcmlzY3ZfZGVidWdcWzQwXF0KK3Jpc2N2X2RlYnVnXFs0MVxdCityaXNjdl9kZWJ1Z1xbNDJcXQorcmlzY3ZfZGVidWdcWzQzXF0KK3Jpc2N2X2RlYnVnXFs0NFxdCityaXNjdl9kZWJ1Z1xbNDVcXQorcmlzY3ZfZGVidWdcWzQ2XF0KK3Jpc2N2X2RlYnVnXFs0N1xdCityaXNjdl9kZWJ1Z1xbNDhcXQorcmlzY3ZfZGVidWdcWzQ5XF0KK3Jpc2N2X2RlYnVnXFs1MFxdCityaXNjdl9kZWJ1Z1xbNTFcXQorcmlzY3ZfZGVidWdcWzUyXF0KK3Jpc2N2X2RlYnVnXFs1M1xdCityaXNjdl9kZWJ1Z1xbNTRcXQorcmlzY3ZfZGVidWdcWzU1XF0KK3Jpc2N2X2RlYnVnXFs1NlxdCityaXNjdl9kZWJ1Z1xbNTdcXQorcmlzY3ZfZGVidWdcWzU4XF0KK3Jpc2N2X2RlYnVnXFs1OVxdCityaXNjdl9kZWJ1Z1xbNjBcXQorcmlzY3ZfZGVidWdcWzYxXF0KK3Jpc2N2X2RlYnVnXFs2MlxdCityaXNjdl9kZWJ1Z1xbNjNcXQorCisKK3diX3JzdF9uICAgICAgICAgIDUwMCAwIDIKK3B3cnVwX3JzdF9uICAgICAgIAorcnN0X24gICAgICAgIAorY29yZV9jbGsgICAgICAgICAgICAgIAorcnRjX2NsayAgICAgICAgICAgICAKK2NwdV9yc3RfbiAgICAgICAgICAgCmRpZmYgLS1naXQgYS9vcGVubGFuZS95aWZpdmUvc3RhLnRjbCBiL29wZW5sYW5lL3lpZml2ZS9zdGEudGNsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxNjhkMTYKLS0tIC9kZXYvbnVsbAorKysgYi9vcGVubGFuZS95aWZpdmUvc3RhLnRjbApAQCAtMCwwICsxLDk1IEBACisjIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6ICAyMDIxICwgRGluZXNoIEFubmF5eWEKKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisjIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBNb2RpZmllZCBieSBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorCitzZXQgOjplbnYoTElCX0ZBU1RFU1QpICIkOjplbnYoUERLX1JPT1QpL3NreTEzMEEvbGlicy5yZWYvc2t5MTMwX2ZkX3NjX2hkL2xpYi9za3kxMzBfZmRfc2NfaGRfX2ZmX240MENfMXY5NS5saWIiCitzZXQgOjplbnYoTElCX1RZUElDQUwpICIkOjplbnYoUERLX1JPT1QpL3NreTEzMEEvbGlicy5yZWYvc2t5MTMwX2ZkX3NjX2hkL2xpYi9za3kxMzBfZmRfc2NfaGRfX3R0XzAyNUNfMXY4MC5saWIiCitzZXQgOjplbnYoTElCX1NMT1dFU1QpICIkOjplbnYoUERLX1JPT1QpL3NreTEzMEEvbGlicy5yZWYvc2t5MTMwX2ZkX3NjX2hkL2xpYi9za3kxMzBfZmRfc2NfaGRfX3NzXzEwMENfMXY2MC5saWIiCitzZXQgOjplbnYoQ1VSUkVOVF9ORVRMSVNUKSAuLi91c2VyX3Byb2plY3Rfd3JhcHBlci9uZXRsaXN0L3N5bnRhY29yZS52CitzZXQgOjplbnYoREVTSUdOX05BTUUpICJzY3IxX3RvcF93YiIKK3NldCA6OmVudihDVVJSRU5UX1NQRUYpIC4uLy4uL3NwZWYvc2NyMV90b3Bfd2Iuc3BlZgorc2V0IDo6ZW52KEJBU0VfU0RDX0ZJTEUpICJiYXNlLnNkYyIKK3NldCA6OmVudihTWU5USF9EUklWSU5HX0NFTEwpICJza3kxMzBfZmRfc2NfaGRfX2ludl84Igorc2V0IDo6ZW52KFNZTlRIX0RSSVZJTkdfQ0VMTF9QSU4pICJZIgorc2V0IDo6ZW52KFNZTlRIX0NBUF9MT0FEKSAiMTcuNjUiCitzZXQgOjplbnYoV0lSRV9SQ19MQVlFUikgIm1ldDEiCisKKworc2V0X2NtZF91bml0cyAtdGltZSBucyAtY2FwYWNpdGFuY2UgcEYgLWN1cnJlbnQgbUEgLXZvbHRhZ2UgViAtcmVzaXN0YW5jZSBrT2htIC1kaXN0YW5jZSB1bQorZGVmaW5lX2Nvcm5lcnMgd2MgYmMgdHQKK3JlYWRfbGliZXJ0eSAtY29ybmVyIGJjICQ6OmVudihMSUJfRkFTVEVTVCkKK3JlYWRfbGliZXJ0eSAtY29ybmVyIHdjICQ6OmVudihMSUJfU0xPV0VTVCkKK3JlYWRfbGliZXJ0eSAtY29ybmVyIHR0ICQ6OmVudihMSUJfVFlQSUNBTCkKKworcmVhZF92ZXJpbG9nICQ6OmVudihDVVJSRU5UX05FVExJU1QpCitsaW5rX2Rlc2lnbiAgJDo6ZW52KERFU0lHTl9OQU1FKQorCityZWFkX3NwZWYgICQ6OmVudihDVVJSRU5UX1NQRUYpCisKK3JlYWRfc2RjIC1lY2hvICQ6OmVudihCQVNFX1NEQ19GSUxFKQorCisjIGNoZWNrIGZvciBtaXNzaW5nIGNvbnN0cmFpbnRzCitjaGVja19zZXR1cCAgLXZlcmJvc2UgPiB1bmNvbnN0cmFpbnRzLnJwdAorCitzZXRfb3BlcmF0aW5nX2NvbmRpdGlvbnMgLWFuYWx5c2lzX3R5cGUgc2luZ2xlCisjIFByb3BnYXRlIHRoZSBjbG9jaworc2V0X3Byb3BhZ2F0ZWRfY2xvY2sgW2FsbF9jbG9ja3NdCisKK3JlcG9ydF90bnMKK3JlcG9ydF93bnMKKyNyZXBvcnRfcG93ZXIgCisKK2VjaG8gIiMjIyMjIyMjIyMjIyMjIyMgQ09STkVSIDogV0MgKFNMT1cpIFRJTUlORyBSZXBvcnQgIyMjIyMjIyMjIyMjIyMjIyMjIyIgPiB0aW1pbmdfc3NfbWF4LnJwdAorcmVwb3J0X2NoZWNrcyAtdW5pcXVlIC1wYXRoX2RlbGF5IG1heCAtc2xhY2tfbWF4IC0wLjAgLWdyb3VwX2NvdW50IDEwMCAgIC1jb3JuZXIgd2MgIC1mb3JtYXQgZnVsbF9jbG9ja19leHBhbmRlZCA+PiB0aW1pbmdfc3NfbWF4LnJwdAorcmVwb3J0X2NoZWNrcyAtZ3JvdXBfY291bnQgMTAwIC1wYXRoX2RlbGF5IG1heCAgLXBhdGhfZ3JvdXAgIHdibV9jbGtfaSAgIC1jb3JuZXIgd2MgIC1mb3JtYXQgZnVsbF9jbG9ja19leHBhbmRlZCA+PiB0aW1pbmdfc3NfbWF4LnJwdAorcmVwb3J0X2NoZWNrcyAtZ3JvdXBfY291bnQgMTAwIC1wYXRoX2RlbGF5IG1heCAgLXBhdGhfZ3JvdXAgIHdic19jbGtfaSAgIC1jb3JuZXIgd2MgIC1mb3JtYXQgZnVsbF9jbG9ja19leHBhbmRlZCA+PiB0aW1pbmdfc3NfbWF4LnJwdAorcmVwb3J0X2NoZWNrcyAtZ3JvdXBfY291bnQgMTAwIC1wYXRoX2RlbGF5IG1heCAgLXBhdGhfZ3JvdXAgIGNwdV9jbGsgICAgIC1jb3JuZXIgd2MgIC1mb3JtYXQgZnVsbF9jbG9ja19leHBhbmRlZCA+PiB0aW1pbmdfc3NfbWF4LnJwdAorcmVwb3J0X2NoZWNrcyAtZ3JvdXBfY291bnQgMTAwIC1wYXRoX2RlbGF5IG1heCAgLXBhdGhfZ3JvdXAgIHJ0Y19jbGsgICAgIC1jb3JuZXIgd2MgIC1mb3JtYXQgZnVsbF9jbG9ja19leHBhbmRlZCA+PiB0aW1pbmdfc3NfbWF4LnJwdAorcmVwb3J0X2NoZWNrcyAtZ3JvdXBfY291bnQgMTAwIC1wYXRoX2RlbGF5IG1heCAgLXBhdGhfZ3JvdXAgIGxpbmVfY2xrICAgIC1jb3JuZXIgd2MgIC1mb3JtYXQgZnVsbF9jbG9ja19leHBhbmRlZCA+PiB0aW1pbmdfc3NfbWF4LnJwdAorcmVwb3J0X2NoZWNrcyAtcGF0aF9kZWxheSBtYXggICAtY29ybmVyIHdjID4+IHRpbWluZ19mZl9tYXgucnB0CisKK2VjaG8gIiMjIyMjIyMjIyMjIyMjIyMgQ09STkVSIDogQkMgKFNMT1cpIFRJTUlORyBSZXBvcnQgIyMjIyMjIyMjIyMjIyMjIyMjIyIgPiB0aW1pbmdfZmZfbWluLnJwdAorcmVwb3J0X2NoZWNrcyAtdW5pcXVlIC1wYXRoX2RlbGF5IG1pbiAtc2xhY2tfbWluIC0wLjAgLWdyb3VwX2NvdW50IDEwMCAgIC1jb3JuZXIgYmMgIC1mb3JtYXQgZnVsbF9jbG9ja19leHBhbmRlZCA+PiB0aW1pbmdfZmZfbWluLnJwdAorcmVwb3J0X2NoZWNrcyAtZ3JvdXBfY291bnQgMTAwICAtcGF0aF9kZWxheSBtaW4gLXBhdGhfZ3JvdXAgIHdibV9jbGtfaSAgIC1jb3JuZXIgYmMgIC1mb3JtYXQgZnVsbF9jbG9ja19leHBhbmRlZCA+PiB0aW1pbmdfZmZfbWluLnJwdAorcmVwb3J0X2NoZWNrcyAtZ3JvdXBfY291bnQgMTAwICAtcGF0aF9kZWxheSBtaW4gLXBhdGhfZ3JvdXAgIHdic19jbGtfaSAgIC1jb3JuZXIgYmMgIC1mb3JtYXQgZnVsbF9jbG9ja19leHBhbmRlZCA+PiB0aW1pbmdfZmZfbWluLnJwdAorcmVwb3J0X2NoZWNrcyAtZ3JvdXBfY291bnQgMTAwICAtcGF0aF9kZWxheSBtaW4gLXBhdGhfZ3JvdXAgIGNwdV9jbGsgICAgIC1jb3JuZXIgYmMgIC1mb3JtYXQgZnVsbF9jbG9ja19leHBhbmRlZCA+PiB0aW1pbmdfZmZfbWluLnJwdAorcmVwb3J0X2NoZWNrcyAtZ3JvdXBfY291bnQgMTAwICAtcGF0aF9kZWxheSBtaW4gLXBhdGhfZ3JvdXAgIHJ0Y19jbGsgICAgIC1jb3JuZXIgYmMgIC1mb3JtYXQgZnVsbF9jbG9ja19leHBhbmRlZCA+PiB0aW1pbmdfZmZfbWluLnJwdAorcmVwb3J0X2NoZWNrcyAtZ3JvdXBfY291bnQgMTAwICAtcGF0aF9kZWxheSBtaW4gLXBhdGhfZ3JvdXAgIGxpbmVfY2xrICAgIC1jb3JuZXIgYmMgIC1mb3JtYXQgZnVsbF9jbG9ja19leHBhbmRlZCA+PiB0aW1pbmdfZmZfbWluLnJwdAorcmVwb3J0X2NoZWNrcyAtcGF0aF9kZWxheSBtaW4gIC1jb3JuZXIgYmMgPj4gdGltaW5nX21pbi5ycHQKKworZWNobyAiIyMjIyMjIyMjIyMjIyMjIyBDT1JORVIgOiBUVCAoTUFYKSBUSU1JTkcgUmVwb3J0ICMjIyMjIyMjIyMjIyMjIyMjIyMiID4gdGltaW5nX3R0X21heC5ycHQgCityZXBvcnRfY2hlY2tzIC11bmlxdWUgLXBhdGhfZGVsYXkgbWF4IC1zbGFja19taW4gLTAuMCAtZ3JvdXBfY291bnQgMTAwIC1jb3JuZXIgdHQgIC1mb3JtYXQgZnVsbF9jbG9ja19leHBhbmRlZCA+PiB0aW1pbmdfdHRfbWF4LnJwdAorcmVwb3J0X2NoZWNrcyAtZ3JvdXBfY291bnQgMTAwICAtcGF0aF9kZWxheSBtYXggLXBhdGhfZ3JvdXAgd2JtX2Nsa19pICAtY29ybmVyIHR0ICAtZm9ybWF0IGZ1bGxfY2xvY2tfZXhwYW5kZWQgPj4gdGltaW5nX3R0X21heC5ycHQKK3JlcG9ydF9jaGVja3MgLWdyb3VwX2NvdW50IDEwMCAgLXBhdGhfZGVsYXkgbWF4IC1wYXRoX2dyb3VwIHdic19jbGtfaSAgLWNvcm5lciB0dCAgLWZvcm1hdCBmdWxsX2Nsb2NrX2V4cGFuZGVkID4+IHRpbWluZ190dF9tYXgucnB0CityZXBvcnRfY2hlY2tzIC1ncm91cF9jb3VudCAxMDAgIC1wYXRoX2RlbGF5IG1heCAtcGF0aF9ncm91cCBjcHVfY2xrICAgIC1jb3JuZXIgdHQgIC1mb3JtYXQgZnVsbF9jbG9ja19leHBhbmRlZCA+PiB0aW1pbmdfdHRfbWF4LnJwdAorcmVwb3J0X2NoZWNrcyAtZ3JvdXBfY291bnQgMTAwICAtcGF0aF9kZWxheSBtYXggLXBhdGhfZ3JvdXAgcnRjX2NsayAgICAtY29ybmVyIHR0ICAtZm9ybWF0IGZ1bGxfY2xvY2tfZXhwYW5kZWQgPj4gdGltaW5nX3R0X21heC5ycHQKK3JlcG9ydF9jaGVja3MgLWdyb3VwX2NvdW50IDEwMCAgLXBhdGhfZGVsYXkgbWF4IC1wYXRoX2dyb3VwIGxpbmVfY2xrICAgLWNvcm5lciB0dCAgLWZvcm1hdCBmdWxsX2Nsb2NrX2V4cGFuZGVkID4+IHRpbWluZ190dF9tYXgucnB0CityZXBvcnRfY2hlY2tzIC1wYXRoX2RlbGF5IG1heCAgLWNvcm5lciB0dCA+PiB0aW1pbmdfdHRfbWF4LnJwdAorCitlY2hvICIjIyMjIyMjIyMjIyMjIyMjIENPUk5FUiA6IFRUIChNSU4pIFRJTUlORyBSZXBvcnQgIyMjIyMjIyMjIyMjIyMjIyMjIyIgPiB0aW1pbmdfdHRfbWluLnJwdAorcmVwb3J0X2NoZWNrcyAtdW5pcXVlIC1wYXRoX2RlbGF5IG1pbiAtc2xhY2tfbWluIC0wLjAgLWdyb3VwX2NvdW50IDEwMCAgIC1jb3JuZXIgdHQgIC1mb3JtYXQgZnVsbF9jbG9ja19leHBhbmRlZCA+PiB0aW1pbmdfdHRfbWluLnJwdAorcmVwb3J0X2NoZWNrcyAtZ3JvdXBfY291bnQgMTAwICAtcGF0aF9kZWxheSBtaW4gLXBhdGhfZ3JvdXAgIHdibV9jbGtfaSAgIC1jb3JuZXIgdHQgIC1mb3JtYXQgZnVsbF9jbG9ja19leHBhbmRlZCA+PiB0aW1pbmdfdHRfbWluLnJwdAorcmVwb3J0X2NoZWNrcyAtZ3JvdXBfY291bnQgMTAwICAtcGF0aF9kZWxheSBtaW4gLXBhdGhfZ3JvdXAgIHdic19jbGtfaSAgIC1jb3JuZXIgdHQgIC1mb3JtYXQgZnVsbF9jbG9ja19leHBhbmRlZCA+PiB0aW1pbmdfdHRfbWluLnJwdAorcmVwb3J0X2NoZWNrcyAtZ3JvdXBfY291bnQgMTAwICAtcGF0aF9kZWxheSBtaW4gLXBhdGhfZ3JvdXAgIGNwdV9jbGsgICAgIC1jb3JuZXIgdHQgIC1mb3JtYXQgZnVsbF9jbG9ja19leHBhbmRlZCA+PiB0aW1pbmdfdHRfbWluLnJwdAorcmVwb3J0X2NoZWNrcyAtZ3JvdXBfY291bnQgMTAwICAtcGF0aF9kZWxheSBtaW4gLXBhdGhfZ3JvdXAgIHJ0Y19jbGsgICAgIC1jb3JuZXIgdHQgIC1mb3JtYXQgZnVsbF9jbG9ja19leHBhbmRlZCA+PiB0aW1pbmdfdHRfbWluLnJwdAorcmVwb3J0X2NoZWNrcyAtZ3JvdXBfY291bnQgMTAwICAtcGF0aF9kZWxheSBtaW4gLXBhdGhfZ3JvdXAgIGxpbmVfY2xrICAgIC1jb3JuZXIgdHQgIC1mb3JtYXQgZnVsbF9jbG9ja19leHBhbmRlZCA+PiB0aW1pbmdfdHRfbWluLnJwdAorcmVwb3J0X2NoZWNrcyAtcGF0aF9kZWxheSBtaW4gIC1jb3JuZXIgdHQgPj4gdGltaW5nX3R0X21pbi5ycHQKKworCisKKworcmVwb3J0X2NoZWNrcyAtcGF0aF9kZWxheSBtaW5fbWF4IAorCisjZXhpdApkaWZmIC0tZ2l0IGEvcnVuX3JlZ3Jlc3MgYi9ydW5fcmVncmVzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTgxOTlhCi0tLSAvZGV2L251bGwKKysrIGIvcnVuX3JlZ3Jlc3MKQEAgLTAsMCArMSw2IEBACittYWtlIHZlcmlmeS13Yl9wb3J0CittYWtlIHZlcmlmeS11c2VyX3NwaQorbWFrZSB2ZXJpZnktdXNlcl9pMmNtIAorbWFrZSB2ZXJpZnktdXNlcl91YXJ0IAorbWFrZSB2ZXJpZnktdXNlcl9yaXNjX2Jvb3QKK21ha2UgdmVyaWZ5LXJpc2NfYm9vdApkaWZmIC0tZ2l0IGEvc2lnbm9mZi9jbGtfYnVmL09QRU5MQU5FX1ZFUlNJT04gYi9zaWdub2ZmL2Nsa19idWYvT1BFTkxBTkVfVkVSU0lPTgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjYzM2IxCi0tLSAvZGV2L251bGwKKysrIGIvc2lnbm9mZi9jbGtfYnVmL09QRU5MQU5FX1ZFUlNJT04KQEAgLTAsMCArMSBAQAorb3BlbmxhbmUgcmM3CmRpZmYgLS1naXQgYS9zaWdub2ZmL2Nsa19idWYvUERLX1NPVVJDRVMgYi9zaWdub2ZmL2Nsa19idWYvUERLX1NPVVJDRVMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI1OGJkNQotLS0gL2Rldi9udWxsCisrKyBiL3NpZ25vZmYvY2xrX2J1Zi9QREtfU09VUkNFUwpAQCAtMCwwICsxLDYgQEAKKy1uZSBvcGVubGFuZSAKK2E2OGM5NTI4OTYxMmEzNjE4NzBhY2VkYjdmNjQ3OGZjZmFlMzJlNDkKKy1uZSBza3l3YXRlci1wZGsgCitmNmY3NmYzZGM5OTUyNmM2ZmMyY2ZlZGUxOWI1YjEyMjdkNGViZGU3CistbmUgb3Blbl9wZGtzIAorNTIyYTM3MzQ0MWE4NjVmZWU5ZDZlMzc4MzAxNWI0NDQ1ZjExYWZlNgpkaWZmIC0tZ2l0IGEvc2lnbm9mZi9jbGtfYnVmL2ZpbmFsX3N1bW1hcnlfcmVwb3J0LmNzdiBiL3NpZ25vZmYvY2xrX2J1Zi9maW5hbF9zdW1tYXJ5X3JlcG9ydC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZlZTcxNgotLS0gL2Rldi9udWxsCisrKyBiL3NpZ25vZmYvY2xrX2J1Zi9maW5hbF9zdW1tYXJ5X3JlcG9ydC5jc3YKQEAgLTAsMCArMSwyIEBACissZGVzaWduLGRlc2lnbl9uYW1lLGNvbmZpZyxmbG93X3N0YXR1cyx0b3RhbF9ydW50aW1lLHJvdXRlZF9ydW50aW1lLChDZWxsL21tXjIpL0NvcmVfVXRpbCxESUVBUkVBX21tXjIsQ2VsbFBlcl9tbV4yLE9wZW5EUF9VdGlsLFBlYWtfTWVtb3J5X1VzYWdlX01CLGNlbGxfY291bnQsdHJpdG9uUm91dGVfdmlvbGF0aW9ucyxTaG9ydF92aW9sYXRpb25zLE1ldFNwY192aW9sYXRpb25zLE9mZkdyaWRfdmlvbGF0aW9ucyxNaW5Ib2xlX3Zpb2xhdGlvbnMsT3RoZXJfdmlvbGF0aW9ucyxNYWdpY192aW9sYXRpb25zLGFudGVubmFfdmlvbGF0aW9ucyxsdnNfdG90YWxfZXJyb3JzLGN2Y190b3RhbF9lcnJvcnMsa2xheW91dF92aW9sYXRpb25zLHdpcmVfbGVuZ3RoLHZpYXMsd25zLHBsX3ducyxvcHRpbWl6ZWRfd25zLGZhc3Ryb3V0ZV93bnMsc3BlZl93bnMsdG5zLHBsX3RucyxvcHRpbWl6ZWRfdG5zLGZhc3Ryb3V0ZV90bnMsc3BlZl90bnMsSFBXTCxyb3V0aW5nX2xheWVyMV9wY3Qscm91dGluZ19sYXllcjJfcGN0LHJvdXRpbmdfbGF5ZXIzX3BjdCxyb3V0aW5nX2xheWVyNF9wY3Qscm91dGluZ19sYXllcjVfcGN0LHJvdXRpbmdfbGF5ZXI2X3BjdCx3aXJlc19jb3VudCx3aXJlX2JpdHMscHVibGljX3dpcmVzX2NvdW50LHB1YmxpY193aXJlX2JpdHMsbWVtb3JpZXNfY291bnQsbWVtb3J5X2JpdHMscHJvY2Vzc2VzX2NvdW50LGNlbGxzX3ByZV9hYmMsQU5ELERGRixOQU5ELE5PUixPUixYT1IsWE5PUixNVVgsaW5wdXRzLG91dHB1dHMsbGV2ZWwsRW5kQ2FwcyxUYXBDZWxscyxEaW9kZXMsVG90YWxfUGh5c2ljYWxfQ2VsbHMsc3VnZ2VzdGVkX2Nsb2NrX2ZyZXF1ZW5jeSxzdWdnZXN0ZWRfY2xvY2tfcGVyaW9kLENMT0NLX1BFUklPRCxTWU5USF9TVFJBVEVHWSxTWU5USF9NQVhfRkFOT1VULEZQX0NPUkVfVVRJTCxGUF9BU1BFQ1RfUkFUSU8sRlBfUEROX1ZQSVRDSCxGUF9QRE5fSFBJVENILFBMX1RBUkdFVF9ERU5TSVRZLEdMQl9SVF9BREpVU1RNRU5ULFNURF9DRUxMX0xJQlJBUlksQ0VMTF9QQUQsRElPREVfSU5TRVJUSU9OX1NUUkFURUdZCiswLC9wcm9qZWN0L29wZW5sYW5lL2Nsa19idWYsY2xrX2J1ZixjbGtfYnVmLEZsb3dfY29tcGxldGVkLDBoMW0ycywwaDBtMjZzLDkyNS45MjU5MjU5MjU5MjYsMC4wMDE4LDU1NS41NTU1NTU1NTU1NTU1LDMsMzgyLjI0LDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDQ1LDQsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsNDkyNjcsMC4wLDAuNTgsMC4yNiwwLjAsLTEsLTEsMiwyLDIsMiwwLDAsMCwxLDAsMCwwLDAsMCwwLDAsMCwtMSwtMSwtMSwxNCwxMywwLDI3LDkwLjkwOTA5MDkwOTA5MDksMTEsMTAsQVJFQSAwLDUsNjAsMSwzMCwzMCwwLjU1LDAsc2t5MTMwX2ZkX3NjX2hkLDQsMwpkaWZmIC0tZ2l0IGEvc2lnbm9mZi9jbGtfc2tld19hZGp1c3QvT1BFTkxBTkVfVkVSU0lPTiBiL3NpZ25vZmYvY2xrX3NrZXdfYWRqdXN0L09QRU5MQU5FX1ZFUlNJT04KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ3OTZhYQotLS0gL2Rldi9udWxsCisrKyBiL3NpZ25vZmYvY2xrX3NrZXdfYWRqdXN0L09QRU5MQU5FX1ZFUlNJT04KQEAgLTAsMCArMSBAQAorb3BlbmxhbmUgdjAuMjEtNi1nYmMzYjAzMgpkaWZmIC0tZ2l0IGEvc2lnbm9mZi9jbGtfc2tld19hZGp1c3QvUERLX1NPVVJDRVMgYi9zaWdub2ZmL2Nsa19za2V3X2FkanVzdC9QREtfU09VUkNFUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjU4YmQ1Ci0tLSAvZGV2L251bGwKKysrIGIvc2lnbm9mZi9jbGtfc2tld19hZGp1c3QvUERLX1NPVVJDRVMKQEAgLTAsMCArMSw2IEBACistbmUgb3BlbmxhbmUgCithNjhjOTUyODk2MTJhMzYxODcwYWNlZGI3ZjY0NzhmY2ZhZTMyZTQ5CistbmUgc2t5d2F0ZXItcGRrIAorZjZmNzZmM2RjOTk1MjZjNmZjMmNmZWRlMTliNWIxMjI3ZDRlYmRlNworLW5lIG9wZW5fcGRrcyAKKzUyMmEzNzM0NDFhODY1ZmVlOWQ2ZTM3ODMwMTViNDQ0NWYxMWFmZTYKZGlmZiAtLWdpdCBhL3NpZ25vZmYvY2xrX3NrZXdfYWRqdXN0L2ZpbmFsX3N1bW1hcnlfcmVwb3J0LmNzdiBiL3NpZ25vZmYvY2xrX3NrZXdfYWRqdXN0L2ZpbmFsX3N1bW1hcnlfcmVwb3J0LmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Yzg0NzQ0Ci0tLSAvZGV2L251bGwKKysrIGIvc2lnbm9mZi9jbGtfc2tld19hZGp1c3QvZmluYWxfc3VtbWFyeV9yZXBvcnQuY3N2CkBAIC0wLDAgKzEsMiBAQAorLGRlc2lnbixkZXNpZ25fbmFtZSxjb25maWcsZmxvd19zdGF0dXMsdG90YWxfcnVudGltZSxyb3V0ZWRfcnVudGltZSwoQ2VsbC9tbV4yKS9Db3JlX1V0aWwsRElFQVJFQV9tbV4yLENlbGxQZXJfbW1eMixPcGVuRFBfVXRpbCxQZWFrX01lbW9yeV9Vc2FnZV9NQixjZWxsX2NvdW50LHRyaXRvblJvdXRlX3Zpb2xhdGlvbnMsU2hvcnRfdmlvbGF0aW9ucyxNZXRTcGNfdmlvbGF0aW9ucyxPZmZHcmlkX3Zpb2xhdGlvbnMsTWluSG9sZV92aW9sYXRpb25zLE90aGVyX3Zpb2xhdGlvbnMsTWFnaWNfdmlvbGF0aW9ucyxhbnRlbm5hX3Zpb2xhdGlvbnMsbHZzX3RvdGFsX2Vycm9ycyxjdmNfdG90YWxfZXJyb3JzLGtsYXlvdXRfdmlvbGF0aW9ucyx3aXJlX2xlbmd0aCx2aWFzLHducyxwbF93bnMsb3B0aW1pemVkX3ducyxmYXN0cm91dGVfd25zLHNwZWZfd25zLHRucyxwbF90bnMsb3B0aW1pemVkX3RucyxmYXN0cm91dGVfdG5zLHNwZWZfdG5zLEhQV0wscm91dGluZ19sYXllcjFfcGN0LHJvdXRpbmdfbGF5ZXIyX3BjdCxyb3V0aW5nX2xheWVyM19wY3Qscm91dGluZ19sYXllcjRfcGN0LHJvdXRpbmdfbGF5ZXI1X3BjdCxyb3V0aW5nX2xheWVyNl9wY3Qsd2lyZXNfY291bnQsd2lyZV9iaXRzLHB1YmxpY193aXJlc19jb3VudCxwdWJsaWNfd2lyZV9iaXRzLG1lbW9yaWVzX2NvdW50LG1lbW9yeV9iaXRzLHByb2Nlc3Nlc19jb3VudCxjZWxsc19wcmVfYWJjLEFORCxERkYsTkFORCxOT1IsT1IsWE9SLFhOT1IsTVVYLGlucHV0cyxvdXRwdXRzLGxldmVsLEVuZENhcHMsVGFwQ2VsbHMsRGlvZGVzLFRvdGFsX1BoeXNpY2FsX0NlbGxzLHN1Z2dlc3RlZF9jbG9ja19mcmVxdWVuY3ksc3VnZ2VzdGVkX2Nsb2NrX3BlcmlvZCxDTE9DS19QRVJJT0QsU1lOVEhfU1RSQVRFR1ksU1lOVEhfTUFYX0ZBTk9VVCxGUF9DT1JFX1VUSUwsRlBfQVNQRUNUX1JBVElPLEZQX1BETl9WUElUQ0gsRlBfUEROX0hQSVRDSCxQTF9UQVJHRVRfREVOU0lUWSxHTEJfUlRfQURKVVNUTUVOVCxTVERfQ0VMTF9MSUJSQVJZLENFTExfUEFELERJT0RFX0lOU0VSVElPTl9TVFJBVEVHWQorMCwvcHJvamVjdC9vcGVubGFuZS9jbGtfc2tld19hZGp1c3QsY2xrX3NrZXdfYWRqdXN0LGNsa19za2V3X2FkanVzdCxGbG93X2NvbXBsZXRlZCwwaDFtMTVzLDBoMG0zNnMsNzUwMC4wLDAuMDEsMzAwMC4wLDUsMzkxLjk1LDMwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyODEyLDE5NywtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwwLjAsNi40Miw2LjYyLDAuMCwtMSwtMSwzMiwzNSwzMiwzNSwwLDAsMCwzMCwwLDAsMCwwLDAsMCwwLDAsLTEsLTEsLTEsNjQsMTAyLDAsMTY2LDkwLjkwOTA5MDkwOTA5MDksMTEsMTAsQVJFQSAwLDUsNDAsMSwyMCwyMCwwLjU1LDAsc2t5MTMwX2ZkX3NjX2hkLDQsMwpkaWZmIC0tZ2l0IGEvc2lnbm9mZi9nbGJsX2NmZy9PUEVOTEFORV9WRVJTSU9OIGIvc2lnbm9mZi9nbGJsX2NmZy9PUEVOTEFORV9WRVJTSU9OCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkNzk2YWEKLS0tIC9kZXYvbnVsbAorKysgYi9zaWdub2ZmL2dsYmxfY2ZnL09QRU5MQU5FX1ZFUlNJT04KQEAgLTAsMCArMSBAQAorb3BlbmxhbmUgdjAuMjEtNi1nYmMzYjAzMgpkaWZmIC0tZ2l0IGEvc2lnbm9mZi9nbGJsX2NmZy9QREtfU09VUkNFUyBiL3NpZ25vZmYvZ2xibF9jZmcvUERLX1NPVVJDRVMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI1OGJkNQotLS0gL2Rldi9udWxsCisrKyBiL3NpZ25vZmYvZ2xibF9jZmcvUERLX1NPVVJDRVMKQEAgLTAsMCArMSw2IEBACistbmUgb3BlbmxhbmUgCithNjhjOTUyODk2MTJhMzYxODcwYWNlZGI3ZjY0NzhmY2ZhZTMyZTQ5CistbmUgc2t5d2F0ZXItcGRrIAorZjZmNzZmM2RjOTk1MjZjNmZjMmNmZWRlMTliNWIxMjI3ZDRlYmRlNworLW5lIG9wZW5fcGRrcyAKKzUyMmEzNzM0NDFhODY1ZmVlOWQ2ZTM3ODMwMTViNDQ0NWYxMWFmZTYKZGlmZiAtLWdpdCBhL3NpZ25vZmYvZ2xibF9jZmcvZmluYWxfc3VtbWFyeV9yZXBvcnQuY3N2IGIvc2lnbm9mZi9nbGJsX2NmZy9maW5hbF9zdW1tYXJ5X3JlcG9ydC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhiY2NiMwotLS0gL2Rldi9udWxsCisrKyBiL3NpZ25vZmYvZ2xibF9jZmcvZmluYWxfc3VtbWFyeV9yZXBvcnQuY3N2CkBAIC0wLDAgKzEsMiBAQAorLGRlc2lnbixkZXNpZ25fbmFtZSxjb25maWcsZmxvd19zdGF0dXMsdG90YWxfcnVudGltZSxyb3V0ZWRfcnVudGltZSwoQ2VsbC9tbV4yKS9Db3JlX1V0aWwsRElFQVJFQV9tbV4yLENlbGxQZXJfbW1eMixPcGVuRFBfVXRpbCxQZWFrX01lbW9yeV9Vc2FnZV9NQixjZWxsX2NvdW50LHRyaXRvblJvdXRlX3Zpb2xhdGlvbnMsU2hvcnRfdmlvbGF0aW9ucyxNZXRTcGNfdmlvbGF0aW9ucyxPZmZHcmlkX3Zpb2xhdGlvbnMsTWluSG9sZV92aW9sYXRpb25zLE90aGVyX3Zpb2xhdGlvbnMsTWFnaWNfdmlvbGF0aW9ucyxhbnRlbm5hX3Zpb2xhdGlvbnMsbHZzX3RvdGFsX2Vycm9ycyxjdmNfdG90YWxfZXJyb3JzLGtsYXlvdXRfdmlvbGF0aW9ucyx3aXJlX2xlbmd0aCx2aWFzLHducyxwbF93bnMsb3B0aW1pemVkX3ducyxmYXN0cm91dGVfd25zLHNwZWZfd25zLHRucyxwbF90bnMsb3B0aW1pemVkX3RucyxmYXN0cm91dGVfdG5zLHNwZWZfdG5zLEhQV0wscm91dGluZ19sYXllcjFfcGN0LHJvdXRpbmdfbGF5ZXIyX3BjdCxyb3V0aW5nX2xheWVyM19wY3Qscm91dGluZ19sYXllcjRfcGN0LHJvdXRpbmdfbGF5ZXI1X3BjdCxyb3V0aW5nX2xheWVyNl9wY3Qsd2lyZXNfY291bnQsd2lyZV9iaXRzLHB1YmxpY193aXJlc19jb3VudCxwdWJsaWNfd2lyZV9iaXRzLG1lbW9yaWVzX2NvdW50LG1lbW9yeV9iaXRzLHByb2Nlc3Nlc19jb3VudCxjZWxsc19wcmVfYWJjLEFORCxERkYsTkFORCxOT1IsT1IsWE9SLFhOT1IsTVVYLGlucHV0cyxvdXRwdXRzLGxldmVsLEVuZENhcHMsVGFwQ2VsbHMsRGlvZGVzLFRvdGFsX1BoeXNpY2FsX0NlbGxzLHN1Z2dlc3RlZF9jbG9ja19mcmVxdWVuY3ksc3VnZ2VzdGVkX2Nsb2NrX3BlcmlvZCxDTE9DS19QRVJJT0QsU1lOVEhfU1RSQVRFR1ksU1lOVEhfTUFYX0ZBTk9VVCxGUF9DT1JFX1VUSUwsRlBfQVNQRUNUX1JBVElPLEZQX1BETl9WUElUQ0gsRlBfUEROX0hQSVRDSCxQTF9UQVJHRVRfREVOU0lUWSxHTEJfUlRfQURKVVNUTUVOVCxTVERfQ0VMTF9MSUJSQVJZLENFTExfUEFELERJT0RFX0lOU0VSVElPTl9TVFJBVEVHWQorMCwvcHJvamVjdC9vcGVubGFuZS9nbGJsX2NmZyxnbGJsX2NmZyxnbGJsX2NmZyxGbG93X2NvbXBsZXRlZCwwaDE1bTM2cywwaDltMjhzLDQ1ODgzLjMzMzMzMzMzMzM0LDAuMTIsMjI5NDEuNjY2NjY2NjY2NjcsNDAsNTY5LjExLDI3NTMsMCwwLDAsMCwwLDAsMCwwLDAsLTEsMCwxMzE5MjMsMjM0MDcsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDk4OTM5MjcyLDAuMCwyNS4zLDI3LjI2LDAuMzEsLTEsLTEsMjYzNywyODAyLDQ1OSw2MjQsMCwwLDAsMjc1MywxLDAsMywwLDQ3MSwwLDAsNTYyLDU3Nyw1MzMsMTAsMjc4LDE0MTAsMCwxNjg4LDEwMC4wLDEwLjAsMTAsQVJFQSAwLDQsNTAsMSwxMDAsMTAwLDAuNTUsMCxza3kxMzBfZmRfc2NfaGQsNCw1CmRpZmYgLS1naXQgYS9zaWdub2ZmL21iaXN0L09QRU5MQU5FX1ZFUlNJT04gYi9zaWdub2ZmL21iaXN0L09QRU5MQU5FX1ZFUlNJT04KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBjNzY2NAotLS0gL2Rldi9udWxsCisrKyBiL3NpZ25vZmYvbWJpc3QvT1BFTkxBTkVfVkVSU0lPTgpAQCAtMCwwICsxIEBACitvcGVubGFuZSBOL0EKZGlmZiAtLWdpdCBhL3NpZ25vZmYvbWJpc3QvUERLX1NPVVJDRVMgYi9zaWdub2ZmL21iaXN0L1BES19TT1VSQ0VTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhMzY4NGEKLS0tIC9kZXYvbnVsbAorKysgYi9zaWdub2ZmL21iaXN0L1BES19TT1VSQ0VTCkBAIC0wLDAgKzEsNiBAQAorLW5lIG9wZW5sYW5lIAorOGQ2ODZjMDgxYzJjOWFlZmExNmRiYmQ4Y2NmNWJjOGY0ZGNhYmM0YgorLW5lIHNreXdhdGVyLXBkayAKK2MwOTRiNmU4M2E0ZjkyOThlNDdmNjk2ZWM1YTdmZDUzNTM1ZWM1ZWIKKy1uZSBvcGVuX3Bka3MgCisxNGRiMzJhYThiYTMzMGU4ODYzMmZmM2FkMmZmNTJmNGY0ZGFlMWFkCmRpZmYgLS1naXQgYS9zaWdub2ZmL21iaXN0L2ZpbmFsX3N1bW1hcnlfcmVwb3J0LmNzdiBiL3NpZ25vZmYvbWJpc3QvZmluYWxfc3VtbWFyeV9yZXBvcnQuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4ODI0Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9zaWdub2ZmL21iaXN0L2ZpbmFsX3N1bW1hcnlfcmVwb3J0LmNzdgpAQCAtMCwwICsxLDIgQEAKKyxkZXNpZ24sZGVzaWduX25hbWUsY29uZmlnLGZsb3dfc3RhdHVzLHRvdGFsX3J1bnRpbWUscm91dGVkX3J1bnRpbWUsKENlbGwvbW1eMikvQ29yZV9VdGlsLERJRUFSRUFfbW1eMixDZWxsUGVyX21tXjIsT3BlbkRQX1V0aWwsUGVha19NZW1vcnlfVXNhZ2VfTUIsY2VsbF9jb3VudCx0cml0b25Sb3V0ZV92aW9sYXRpb25zLFNob3J0X3Zpb2xhdGlvbnMsTWV0U3BjX3Zpb2xhdGlvbnMsT2ZmR3JpZF92aW9sYXRpb25zLE1pbkhvbGVfdmlvbGF0aW9ucyxPdGhlcl92aW9sYXRpb25zLE1hZ2ljX3Zpb2xhdGlvbnMsYW50ZW5uYV92aW9sYXRpb25zLGx2c190b3RhbF9lcnJvcnMsY3ZjX3RvdGFsX2Vycm9ycyxrbGF5b3V0X3Zpb2xhdGlvbnMsd2lyZV9sZW5ndGgsdmlhcyx3bnMscGxfd25zLG9wdGltaXplZF93bnMsZmFzdHJvdXRlX3ducyxzcGVmX3ducyx0bnMscGxfdG5zLG9wdGltaXplZF90bnMsZmFzdHJvdXRlX3RucyxzcGVmX3RucyxIUFdMLHJvdXRpbmdfbGF5ZXIxX3BjdCxyb3V0aW5nX2xheWVyMl9wY3Qscm91dGluZ19sYXllcjNfcGN0LHJvdXRpbmdfbGF5ZXI0X3BjdCxyb3V0aW5nX2xheWVyNV9wY3Qscm91dGluZ19sYXllcjZfcGN0LHdpcmVzX2NvdW50LHdpcmVfYml0cyxwdWJsaWNfd2lyZXNfY291bnQscHVibGljX3dpcmVfYml0cyxtZW1vcmllc19jb3VudCxtZW1vcnlfYml0cyxwcm9jZXNzZXNfY291bnQsY2VsbHNfcHJlX2FiYyxBTkQsREZGLE5BTkQsTk9SLE9SLFhPUixYTk9SLE1VWCxpbnB1dHMsb3V0cHV0cyxsZXZlbCxFbmRDYXBzLFRhcENlbGxzLERpb2RlcyxUb3RhbF9QaHlzaWNhbF9DZWxscyxzdWdnZXN0ZWRfY2xvY2tfZnJlcXVlbmN5LHN1Z2dlc3RlZF9jbG9ja19wZXJpb2QsQ0xPQ0tfUEVSSU9ELFNZTlRIX1NUUkFURUdZLFNZTlRIX01BWF9GQU5PVVQsRlBfQ09SRV9VVElMLEZQX0FTUEVDVF9SQVRJTyxGUF9QRE5fVlBJVENILEZQX1BETl9IUElUQ0gsUExfVEFSR0VUX0RFTlNJVFksR0xCX1JUX0FESlVTVE1FTlQsU1REX0NFTExfTElCUkFSWSxDRUxMX1BBRCxESU9ERV9JTlNFUlRJT05fU1RSQVRFR1kKKzAsL3Byb2plY3Qvb3BlbmxhbmUvbWJpc3QsbWJpc3RfdG9wLG1iaXN0LGZsb3dfY29tcGxldGVkLDBoMTFtMnMsLTEsMjA4MzMuMzMzMzMzMzMzMzM2LDAuMywxMDQxNi42NjY2NjY2NjY2NjgsMTMuMSw2NjMuMTMsMzEyNSwwLDAsMCwwLDAsMCwwLDEwLDAsMCwtMSw0NTg1NjgsNDM0MzcsLTAuNjcsLTYuMjYsLTEsLTEuMzksLTEsLTAuNjcsLTMwMzMuMTQsLTEsLTEuMzksLTEsMzcyNzA0MjUwLjAsMS40Nyw0OC44NSwxMi4yNCwyMC45MiwwLjAsLTEsMjM4Miw2NjEzLDc1Myw0OTM2LDAsMCwwLDIzMzksMCwwLDAsMCwwLDAsMCw0LDg0OSw2NzIsMTcsMTMwLDM4NTIsMCwzOTgyLDkwLjkwOTA5MDkwOTA5MDksMTEsMTAsQVJFQSAwLDQsNTAsMSwxNDAsMTQwLDAuMywwLjAsc2t5MTMwX2ZkX3NjX2hkLDQsNApkaWZmIC0tZ2l0IGEvc2lnbm9mZi9tYmlzdF93cmFwcGVyL09QRU5MQU5FX1ZFUlNJT04gYi9zaWdub2ZmL21iaXN0X3dyYXBwZXIvT1BFTkxBTkVfVkVSU0lPTgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGM3NjY0Ci0tLSAvZGV2L251bGwKKysrIGIvc2lnbm9mZi9tYmlzdF93cmFwcGVyL09QRU5MQU5FX1ZFUlNJT04KQEAgLTAsMCArMSBAQAorb3BlbmxhbmUgTi9BCmRpZmYgLS1naXQgYS9zaWdub2ZmL21iaXN0X3dyYXBwZXIvUERLX1NPVVJDRVMgYi9zaWdub2ZmL21iaXN0X3dyYXBwZXIvUERLX1NPVVJDRVMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2EzNjg0YQotLS0gL2Rldi9udWxsCisrKyBiL3NpZ25vZmYvbWJpc3Rfd3JhcHBlci9QREtfU09VUkNFUwpAQCAtMCwwICsxLDYgQEAKKy1uZSBvcGVubGFuZSAKKzhkNjg2YzA4MWMyYzlhZWZhMTZkYmJkOGNjZjViYzhmNGRjYWJjNGIKKy1uZSBza3l3YXRlci1wZGsgCitjMDk0YjZlODNhNGY5Mjk4ZTQ3ZjY5NmVjNWE3ZmQ1MzUzNWVjNWViCistbmUgb3Blbl9wZGtzIAorMTRkYjMyYWE4YmEzMzBlODg2MzJmZjNhZDJmZjUyZjRmNGRhZTFhZApkaWZmIC0tZ2l0IGEvc2lnbm9mZi9tYmlzdF93cmFwcGVyL2ZpbmFsX3N1bW1hcnlfcmVwb3J0LmNzdiBiL3NpZ25vZmYvbWJpc3Rfd3JhcHBlci9maW5hbF9zdW1tYXJ5X3JlcG9ydC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjZjOTdmOQotLS0gL2Rldi9udWxsCisrKyBiL3NpZ25vZmYvbWJpc3Rfd3JhcHBlci9maW5hbF9zdW1tYXJ5X3JlcG9ydC5jc3YKQEAgLTAsMCArMSwyIEBACissZGVzaWduLGRlc2lnbl9uYW1lLGNvbmZpZyxmbG93X3N0YXR1cyx0b3RhbF9ydW50aW1lLHJvdXRlZF9ydW50aW1lLChDZWxsL21tXjIpL0NvcmVfVXRpbCxESUVBUkVBX21tXjIsQ2VsbFBlcl9tbV4yLE9wZW5EUF9VdGlsLFBlYWtfTWVtb3J5X1VzYWdlX01CLGNlbGxfY291bnQsdHJpdG9uUm91dGVfdmlvbGF0aW9ucyxTaG9ydF92aW9sYXRpb25zLE1ldFNwY192aW9sYXRpb25zLE9mZkdyaWRfdmlvbGF0aW9ucyxNaW5Ib2xlX3Zpb2xhdGlvbnMsT3RoZXJfdmlvbGF0aW9ucyxNYWdpY192aW9sYXRpb25zLGFudGVubmFfdmlvbGF0aW9ucyxsdnNfdG90YWxfZXJyb3JzLGN2Y190b3RhbF9lcnJvcnMsa2xheW91dF92aW9sYXRpb25zLHdpcmVfbGVuZ3RoLHZpYXMsd25zLHBsX3ducyxvcHRpbWl6ZWRfd25zLGZhc3Ryb3V0ZV93bnMsc3BlZl93bnMsdG5zLHBsX3RucyxvcHRpbWl6ZWRfdG5zLGZhc3Ryb3V0ZV90bnMsc3BlZl90bnMsSFBXTCxyb3V0aW5nX2xheWVyMV9wY3Qscm91dGluZ19sYXllcjJfcGN0LHJvdXRpbmdfbGF5ZXIzX3BjdCxyb3V0aW5nX2xheWVyNF9wY3Qscm91dGluZ19sYXllcjVfcGN0LHJvdXRpbmdfbGF5ZXI2X3BjdCx3aXJlc19jb3VudCx3aXJlX2JpdHMscHVibGljX3dpcmVzX2NvdW50LHB1YmxpY193aXJlX2JpdHMsbWVtb3JpZXNfY291bnQsbWVtb3J5X2JpdHMscHJvY2Vzc2VzX2NvdW50LGNlbGxzX3ByZV9hYmMsQU5ELERGRixOQU5ELE5PUixPUixYT1IsWE5PUixNVVgsaW5wdXRzLG91dHB1dHMsbGV2ZWwsRW5kQ2FwcyxUYXBDZWxscyxEaW9kZXMsVG90YWxfUGh5c2ljYWxfQ2VsbHMsc3VnZ2VzdGVkX2Nsb2NrX2ZyZXF1ZW5jeSxzdWdnZXN0ZWRfY2xvY2tfcGVyaW9kLENMT0NLX1BFUklPRCxTWU5USF9TVFJBVEVHWSxTWU5USF9NQVhfRkFOT1VULEZQX0NPUkVfVVRJTCxGUF9BU1BFQ1RfUkFUSU8sRlBfUEROX1ZQSVRDSCxGUF9QRE5fSFBJVENILFBMX1RBUkdFVF9ERU5TSVRZLEdMQl9SVF9BREpVU1RNRU5ULFNURF9DRUxMX0xJQlJBUlksQ0VMTF9QQUQsRElPREVfSU5TRVJUSU9OX1NUUkFURUdZCiswLC9wcm9qZWN0L29wZW5sYW5lL21iaXN0X3dyYXBwZXIsbWJpc3Rfd3JhcHBlcixtYmlzdF93cmFwcGVyLGZsb3dfY29tcGxldGVkLDBoMTRtMTNzLC0xLDI2MDczLjI2MDA3MzI2MDA3MywwLjI3MywxMzAzNi42MzAwMzY2MzAwMzcsMTYuNDgsNjk1LjIxLDM1NTksMCwwLDAsMCwwLDAsLTEsMTYsMCwwLC0xLDQ0NTgwNiw0Nzg2NSwtMC42NywtNS45MSwtMSwtMS43OCwtMSwtMC42NywtMjczNy40NSwtMSwtMS43OCwtMSwzNTczNDIyODguMCw1LjkxLDQ3Ljg1LDE1LjAzLDI0LjAyLDAuMDEsLTEsMjU5Niw3MjgyLDc1Myw1MzgyLDAsMCwwLDI2NjQsMCwwLDAsMCwwLDAsMCw0LDEwNDksNzk4LDE3LDEzOCwzNTE0LDAsMzY1Miw5MC45MDkwOTA5MDkwOTA5LDExLDEwLEFSRUEgMCw0LDUwLDEsMTQwLDE0MCwwLjM1LDAuMCxza3kxMzBfZmRfc2NfaGQsNCw0CmRpZmYgLS1naXQgYS9zaWdub2ZmL3Bpbm11eC9PUEVOTEFORV9WRVJTSU9OIGIvc2lnbm9mZi9waW5tdXgvT1BFTkxBTkVfVkVSU0lPTgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGM3NjY0Ci0tLSAvZGV2L251bGwKKysrIGIvc2lnbm9mZi9waW5tdXgvT1BFTkxBTkVfVkVSU0lPTgpAQCAtMCwwICsxIEBACitvcGVubGFuZSBOL0EKZGlmZiAtLWdpdCBhL3NpZ25vZmYvcGlubXV4L1BES19TT1VSQ0VTIGIvc2lnbm9mZi9waW5tdXgvUERLX1NPVVJDRVMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2EzNjg0YQotLS0gL2Rldi9udWxsCisrKyBiL3NpZ25vZmYvcGlubXV4L1BES19TT1VSQ0VTCkBAIC0wLDAgKzEsNiBAQAorLW5lIG9wZW5sYW5lIAorOGQ2ODZjMDgxYzJjOWFlZmExNmRiYmQ4Y2NmNWJjOGY0ZGNhYmM0YgorLW5lIHNreXdhdGVyLXBkayAKK2MwOTRiNmU4M2E0ZjkyOThlNDdmNjk2ZWM1YTdmZDUzNTM1ZWM1ZWIKKy1uZSBvcGVuX3Bka3MgCisxNGRiMzJhYThiYTMzMGU4ODYzMmZmM2FkMmZmNTJmNGY0ZGFlMWFkCmRpZmYgLS1naXQgYS9zaWdub2ZmL3Bpbm11eC9maW5hbF9zdW1tYXJ5X3JlcG9ydC5jc3YgYi9zaWdub2ZmL3Bpbm11eC9maW5hbF9zdW1tYXJ5X3JlcG9ydC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzMzNzgyMAotLS0gL2Rldi9udWxsCisrKyBiL3NpZ25vZmYvcGlubXV4L2ZpbmFsX3N1bW1hcnlfcmVwb3J0LmNzdgpAQCAtMCwwICsxLDIgQEAKKyxkZXNpZ24sZGVzaWduX25hbWUsY29uZmlnLGZsb3dfc3RhdHVzLHRvdGFsX3J1bnRpbWUscm91dGVkX3J1bnRpbWUsKENlbGwvbW1eMikvQ29yZV9VdGlsLERJRUFSRUFfbW1eMixDZWxsUGVyX21tXjIsT3BlbkRQX1V0aWwsUGVha19NZW1vcnlfVXNhZ2VfTUIsY2VsbF9jb3VudCx0cml0b25Sb3V0ZV92aW9sYXRpb25zLFNob3J0X3Zpb2xhdGlvbnMsTWV0U3BjX3Zpb2xhdGlvbnMsT2ZmR3JpZF92aW9sYXRpb25zLE1pbkhvbGVfdmlvbGF0aW9ucyxPdGhlcl92aW9sYXRpb25zLE1hZ2ljX3Zpb2xhdGlvbnMsYW50ZW5uYV92aW9sYXRpb25zLGx2c190b3RhbF9lcnJvcnMsY3ZjX3RvdGFsX2Vycm9ycyxrbGF5b3V0X3Zpb2xhdGlvbnMsd2lyZV9sZW5ndGgsdmlhcyx3bnMscGxfd25zLG9wdGltaXplZF93bnMsZmFzdHJvdXRlX3ducyxzcGVmX3ducyx0bnMscGxfdG5zLG9wdGltaXplZF90bnMsZmFzdHJvdXRlX3RucyxzcGVmX3RucyxIUFdMLHJvdXRpbmdfbGF5ZXIxX3BjdCxyb3V0aW5nX2xheWVyMl9wY3Qscm91dGluZ19sYXllcjNfcGN0LHJvdXRpbmdfbGF5ZXI0X3BjdCxyb3V0aW5nX2xheWVyNV9wY3Qscm91dGluZ19sYXllcjZfcGN0LHdpcmVzX2NvdW50LHdpcmVfYml0cyxwdWJsaWNfd2lyZXNfY291bnQscHVibGljX3dpcmVfYml0cyxtZW1vcmllc19jb3VudCxtZW1vcnlfYml0cyxwcm9jZXNzZXNfY291bnQsY2VsbHNfcHJlX2FiYyxBTkQsREZGLE5BTkQsTk9SLE9SLFhPUixYTk9SLE1VWCxpbnB1dHMsb3V0cHV0cyxsZXZlbCxFbmRDYXBzLFRhcENlbGxzLERpb2RlcyxUb3RhbF9QaHlzaWNhbF9DZWxscyxzdWdnZXN0ZWRfY2xvY2tfZnJlcXVlbmN5LHN1Z2dlc3RlZF9jbG9ja19wZXJpb2QsQ0xPQ0tfUEVSSU9ELFNZTlRIX1NUUkFURUdZLFNZTlRIX01BWF9GQU5PVVQsRlBfQ09SRV9VVElMLEZQX0FTUEVDVF9SQVRJTyxGUF9QRE5fVlBJVENILEZQX1BETl9IUElUQ0gsUExfVEFSR0VUX0RFTlNJVFksR0xCX1JUX0FESlVTVE1FTlQsU1REX0NFTExfTElCUkFSWSxDRUxMX1BBRCxESU9ERV9JTlNFUlRJT05fU1RSQVRFR1kKKzAsL3Byb2plY3Qvb3BlbmxhbmUvcGlubXV4LHBpbm11eCxwaW5tdXgsZmxvd19jb21wbGV0ZWQsMGgxNm0xMnMsLTEsNDYxMDkuMDkwOTA5MDkwOTEsMC4yNDc1LDIzMDU0LjU0NTQ1NDU0NTQ1NiwyNy4wNyw3MTQuMTMsNTcwNiwwLDAsMCwwLDAsMCwtMSwxLDAsLTEsLTEsNDM0NjY2LDYxODA3LDAuMCwtMC4wMSwtMSwwLjAsLTEsMC4wLC0wLjAzLC0xLDAuMCwtMSwzMjAyMDQwNzkuMCw1Ljk5LDQzLjg4LDMzLjgsMTEuODksMC4zLC0xLDM1NzQsODU2NCw1NDMsNTUzMiwwLDAsMCw0MjAyLDAsMCwwLDAsMCwwLDAsNCwxMzQzLDEzMzksMTYsMzE0LDMyNTksMCwzNTczLDkwLjkwOTA5MDkwOTA5MDksMTEsMTAsQVJFQSAwLDQsNTAsMSwxMDAsMTAwLDAuMywwLjAsc2t5MTMwX2ZkX3NjX2hkLDQsNApkaWZmIC0tZ2l0IGEvc2lnbm9mZi9xc3BpbS9PUEVOTEFORV9WRVJTSU9OIGIvc2lnbm9mZi9xc3BpbS9PUEVOTEFORV9WRVJTSU9OCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwYzc2NjQKLS0tIC9kZXYvbnVsbAorKysgYi9zaWdub2ZmL3FzcGltL09QRU5MQU5FX1ZFUlNJT04KQEAgLTAsMCArMSBAQAorb3BlbmxhbmUgTi9BCmRpZmYgLS1naXQgYS9zaWdub2ZmL3FzcGltL1BES19TT1VSQ0VTIGIvc2lnbm9mZi9xc3BpbS9QREtfU09VUkNFUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTM2ODRhCi0tLSAvZGV2L251bGwKKysrIGIvc2lnbm9mZi9xc3BpbS9QREtfU09VUkNFUwpAQCAtMCwwICsxLDYgQEAKKy1uZSBvcGVubGFuZSAKKzhkNjg2YzA4MWMyYzlhZWZhMTZkYmJkOGNjZjViYzhmNGRjYWJjNGIKKy1uZSBza3l3YXRlci1wZGsgCitjMDk0YjZlODNhNGY5Mjk4ZTQ3ZjY5NmVjNWE3ZmQ1MzUzNWVjNWViCistbmUgb3Blbl9wZGtzIAorMTRkYjMyYWE4YmEzMzBlODg2MzJmZjNhZDJmZjUyZjRmNGRhZTFhZApkaWZmIC0tZ2l0IGEvc2lnbm9mZi9xc3BpbS9maW5hbF9zdW1tYXJ5X3JlcG9ydC5jc3YgYi9zaWdub2ZmL3FzcGltL2ZpbmFsX3N1bW1hcnlfcmVwb3J0LmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYWZlMjk5Ci0tLSAvZGV2L251bGwKKysrIGIvc2lnbm9mZi9xc3BpbS9maW5hbF9zdW1tYXJ5X3JlcG9ydC5jc3YKQEAgLTAsMCArMSwyIEBACissZGVzaWduLGRlc2lnbl9uYW1lLGNvbmZpZyxmbG93X3N0YXR1cyx0b3RhbF9ydW50aW1lLHJvdXRlZF9ydW50aW1lLChDZWxsL21tXjIpL0NvcmVfVXRpbCxESUVBUkVBX21tXjIsQ2VsbFBlcl9tbV4yLE9wZW5EUF9VdGlsLFBlYWtfTWVtb3J5X1VzYWdlX01CLGNlbGxfY291bnQsdHJpdG9uUm91dGVfdmlvbGF0aW9ucyxTaG9ydF92aW9sYXRpb25zLE1ldFNwY192aW9sYXRpb25zLE9mZkdyaWRfdmlvbGF0aW9ucyxNaW5Ib2xlX3Zpb2xhdGlvbnMsT3RoZXJfdmlvbGF0aW9ucyxNYWdpY192aW9sYXRpb25zLGFudGVubmFfdmlvbGF0aW9ucyxsdnNfdG90YWxfZXJyb3JzLGN2Y190b3RhbF9lcnJvcnMsa2xheW91dF92aW9sYXRpb25zLHdpcmVfbGVuZ3RoLHZpYXMsd25zLHBsX3ducyxvcHRpbWl6ZWRfd25zLGZhc3Ryb3V0ZV93bnMsc3BlZl93bnMsdG5zLHBsX3RucyxvcHRpbWl6ZWRfdG5zLGZhc3Ryb3V0ZV90bnMsc3BlZl90bnMsSFBXTCxyb3V0aW5nX2xheWVyMV9wY3Qscm91dGluZ19sYXllcjJfcGN0LHJvdXRpbmdfbGF5ZXIzX3BjdCxyb3V0aW5nX2xheWVyNF9wY3Qscm91dGluZ19sYXllcjVfcGN0LHJvdXRpbmdfbGF5ZXI2X3BjdCx3aXJlc19jb3VudCx3aXJlX2JpdHMscHVibGljX3dpcmVzX2NvdW50LHB1YmxpY193aXJlX2JpdHMsbWVtb3JpZXNfY291bnQsbWVtb3J5X2JpdHMscHJvY2Vzc2VzX2NvdW50LGNlbGxzX3ByZV9hYmMsQU5ELERGRixOQU5ELE5PUixPUixYT1IsWE5PUixNVVgsaW5wdXRzLG91dHB1dHMsbGV2ZWwsRW5kQ2FwcyxUYXBDZWxscyxEaW9kZXMsVG90YWxfUGh5c2ljYWxfQ2VsbHMsc3VnZ2VzdGVkX2Nsb2NrX2ZyZXF1ZW5jeSxzdWdnZXN0ZWRfY2xvY2tfcGVyaW9kLENMT0NLX1BFUklPRCxTWU5USF9TVFJBVEVHWSxTWU5USF9NQVhfRkFOT1VULEZQX0NPUkVfVVRJTCxGUF9BU1BFQ1RfUkFUSU8sRlBfUEROX1ZQSVRDSCxGUF9QRE5fSFBJVENILFBMX1RBUkdFVF9ERU5TSVRZLEdMQl9SVF9BREpVU1RNRU5ULFNURF9DRUxMX0xJQlJBUlksQ0VMTF9QQUQsRElPREVfSU5TRVJUSU9OX1NUUkFURUdZCiswLC9wcm9qZWN0L29wZW5sYW5lL3FzcGltLHFzcGltX3RvcCxxc3BpbSxmbG93X2NvbXBsZXRlZCwwaDE4bTEzcywtMSw2OTEzOS4zOTM5MzkzOTM5NCwwLjI0NzUsMzQ1NjkuNjk2OTY5Njk2OTcsMzkuNTcsNzc4LjYyLDg1NTYsMCwwLDAsMCwwLDAsLTEsMSwwLC0xLC0xLDQyMzA4Myw4MDY3NCwtMC4yLC01LjM3LC0xLDAuMCwtMSwtNi4xLC0yMjY5LjYzLC0xLDAuMCwtMSwyNjYzODQwNDguMCwwLjAsNDAuNzIsMzguMjIsNi4zOCwxLjQxLC0xLDczNzEsMTEwMzUsODAzLDQ0NjYsMCwwLDAsODM0NCwwLDAsMCwwLDAsMCwwLDQsMjAwMywyNTI0LDIyLDM4OCwzMjM0LDAsMzYyMiw5MC45MDkwOTA5MDkwOTA5LDExLDEwLEFSRUEgMCw0LDUwLDEsMTAwLDEwMCwwLjQyLDAuMCxza3kxMzBfZmRfc2NfaGQsNCw0CmRpZmYgLS1naXQgYS9zaWdub2ZmL3Nhcl9hZGMvT1BFTkxBTkVfVkVSU0lPTiBiL3NpZ25vZmYvc2FyX2FkYy9PUEVOTEFORV9WRVJTSU9OCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhYjZlODQKLS0tIC9kZXYvbnVsbAorKysgYi9zaWdub2ZmL3Nhcl9hZGMvT1BFTkxBTkVfVkVSU0lPTgpAQCAtMCwwICsxIEBACitvcGVubGFuZSB2MC4yMS05LWc5NGZlNzQzCmRpZmYgLS1naXQgYS9zaWdub2ZmL3Nhcl9hZGMvUERLX1NPVVJDRVMgYi9zaWdub2ZmL3Nhcl9hZGMvUERLX1NPVVJDRVMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI1OGJkNQotLS0gL2Rldi9udWxsCisrKyBiL3NpZ25vZmYvc2FyX2FkYy9QREtfU09VUkNFUwpAQCAtMCwwICsxLDYgQEAKKy1uZSBvcGVubGFuZSAKK2E2OGM5NTI4OTYxMmEzNjE4NzBhY2VkYjdmNjQ3OGZjZmFlMzJlNDkKKy1uZSBza3l3YXRlci1wZGsgCitmNmY3NmYzZGM5OTUyNmM2ZmMyY2ZlZGUxOWI1YjEyMjdkNGViZGU3CistbmUgb3Blbl9wZGtzIAorNTIyYTM3MzQ0MWE4NjVmZWU5ZDZlMzc4MzAxNWI0NDQ1ZjExYWZlNgpkaWZmIC0tZ2l0IGEvc2lnbm9mZi9zYXJfYWRjL2ZpbmFsX3N1bW1hcnlfcmVwb3J0LmNzdiBiL3NpZ25vZmYvc2FyX2FkYy9maW5hbF9zdW1tYXJ5X3JlcG9ydC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTczODNhOQotLS0gL2Rldi9udWxsCisrKyBiL3NpZ25vZmYvc2FyX2FkYy9maW5hbF9zdW1tYXJ5X3JlcG9ydC5jc3YKQEAgLTAsMCArMSwyIEBACissZGVzaWduLGRlc2lnbl9uYW1lLGNvbmZpZyxmbG93X3N0YXR1cyx0b3RhbF9ydW50aW1lLHJvdXRlZF9ydW50aW1lLChDZWxsL21tXjIpL0NvcmVfVXRpbCxESUVBUkVBX21tXjIsQ2VsbFBlcl9tbV4yLE9wZW5EUF9VdGlsLFBlYWtfTWVtb3J5X1VzYWdlX01CLGNlbGxfY291bnQsdHJpdG9uUm91dGVfdmlvbGF0aW9ucyxTaG9ydF92aW9sYXRpb25zLE1ldFNwY192aW9sYXRpb25zLE9mZkdyaWRfdmlvbGF0aW9ucyxNaW5Ib2xlX3Zpb2xhdGlvbnMsT3RoZXJfdmlvbGF0aW9ucyxNYWdpY192aW9sYXRpb25zLGFudGVubmFfdmlvbGF0aW9ucyxsdnNfdG90YWxfZXJyb3JzLGN2Y190b3RhbF9lcnJvcnMsa2xheW91dF92aW9sYXRpb25zLHdpcmVfbGVuZ3RoLHZpYXMsd25zLHBsX3ducyxvcHRpbWl6ZWRfd25zLGZhc3Ryb3V0ZV93bnMsc3BlZl93bnMsdG5zLHBsX3RucyxvcHRpbWl6ZWRfdG5zLGZhc3Ryb3V0ZV90bnMsc3BlZl90bnMsSFBXTCxyb3V0aW5nX2xheWVyMV9wY3Qscm91dGluZ19sYXllcjJfcGN0LHJvdXRpbmdfbGF5ZXIzX3BjdCxyb3V0aW5nX2xheWVyNF9wY3Qscm91dGluZ19sYXllcjVfcGN0LHJvdXRpbmdfbGF5ZXI2X3BjdCx3aXJlc19jb3VudCx3aXJlX2JpdHMscHVibGljX3dpcmVzX2NvdW50LHB1YmxpY193aXJlX2JpdHMsbWVtb3JpZXNfY291bnQsbWVtb3J5X2JpdHMscHJvY2Vzc2VzX2NvdW50LGNlbGxzX3ByZV9hYmMsQU5ELERGRixOQU5ELE5PUixPUixYT1IsWE5PUixNVVgsaW5wdXRzLG91dHB1dHMsbGV2ZWwsRW5kQ2FwcyxUYXBDZWxscyxEaW9kZXMsVG90YWxfUGh5c2ljYWxfQ2VsbHMsc3VnZ2VzdGVkX2Nsb2NrX2ZyZXF1ZW5jeSxzdWdnZXN0ZWRfY2xvY2tfcGVyaW9kLENMT0NLX1BFUklPRCxTWU5USF9TVFJBVEVHWSxTWU5USF9NQVhfRkFOT1VULEZQX0NPUkVfVVRJTCxGUF9BU1BFQ1RfUkFUSU8sRlBfUEROX1ZQSVRDSCxGUF9QRE5fSFBJVENILFBMX1RBUkdFVF9ERU5TSVRZLEdMQl9SVF9BREpVU1RNRU5ULFNURF9DRUxMX0xJQlJBUlksQ0VMTF9QQUQsRElPREVfSU5TRVJUSU9OX1NUUkFURUdZCiswLC9wcm9qZWN0L29wZW5sYW5lL3Nhcl9hZGMsc2FyX2FkYyxzYXJfYWRjLEZsb3dfY29tcGxldGVkLDBoMW00NXMsMGgwbTU2cywxNjUzLjMzMzMzMzMzMzMzMzUsMC4xNSw4MjYuNjY2NjY2NjY2NjY2NywxLDQ0MC41MiwxMjQsMCwwLDAsMCwwLDAsMCwwLDEzLC0xLDAsMTQ1NDksMTAwMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMTI5NDY5MjksMC4wLDMuNjgsMS45MiwwLjM2LDAuMCwtMSwxMDIsMTg2LDQ4LDEzMiwwLDAsMCwxMjQsMCwwLDAsMSwxMiwwLDAsMzIsMTksMjYsNSwyMDQsMTc2OCwwLDE5NzIsMTAuMCwxMDAuMCwxMDAsQVJFQSAwLDUsNTAsMSw0NSw0MCwwLjAxLDAuMTUsc2t5MTMwX2ZkX3NjX2hkLDQsNApkaWZmIC0tZ2l0IGEvc2lnbm9mZi9zZHJhbS9PUEVOTEFORV9WRVJTSU9OIGIvc2lnbm9mZi9zZHJhbS9PUEVOTEFORV9WRVJTSU9OCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhYjZlODQKLS0tIC9kZXYvbnVsbAorKysgYi9zaWdub2ZmL3NkcmFtL09QRU5MQU5FX1ZFUlNJT04KQEAgLTAsMCArMSBAQAorb3BlbmxhbmUgdjAuMjEtOS1nOTRmZTc0MwpkaWZmIC0tZ2l0IGEvc2lnbm9mZi9zZHJhbS9QREtfU09VUkNFUyBiL3NpZ25vZmYvc2RyYW0vUERLX1NPVVJDRVMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI1OGJkNQotLS0gL2Rldi9udWxsCisrKyBiL3NpZ25vZmYvc2RyYW0vUERLX1NPVVJDRVMKQEAgLTAsMCArMSw2IEBACistbmUgb3BlbmxhbmUgCithNjhjOTUyODk2MTJhMzYxODcwYWNlZGI3ZjY0NzhmY2ZhZTMyZTQ5CistbmUgc2t5d2F0ZXItcGRrIAorZjZmNzZmM2RjOTk1MjZjNmZjMmNmZWRlMTliNWIxMjI3ZDRlYmRlNworLW5lIG9wZW5fcGRrcyAKKzUyMmEzNzM0NDFhODY1ZmVlOWQ2ZTM3ODMwMTViNDQ0NWYxMWFmZTYKZGlmZiAtLWdpdCBhL3NpZ25vZmYvc2RyYW0vZmluYWxfc3VtbWFyeV9yZXBvcnQuY3N2IGIvc2lnbm9mZi9zZHJhbS9maW5hbF9zdW1tYXJ5X3JlcG9ydC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRhY2NlMAotLS0gL2Rldi9udWxsCisrKyBiL3NpZ25vZmYvc2RyYW0vZmluYWxfc3VtbWFyeV9yZXBvcnQuY3N2CkBAIC0wLDAgKzEsMiBAQAorLGRlc2lnbixkZXNpZ25fbmFtZSxjb25maWcsZmxvd19zdGF0dXMsdG90YWxfcnVudGltZSxyb3V0ZWRfcnVudGltZSwoQ2VsbC9tbV4yKS9Db3JlX1V0aWwsRElFQVJFQV9tbV4yLENlbGxQZXJfbW1eMixPcGVuRFBfVXRpbCxQZWFrX01lbW9yeV9Vc2FnZV9NQixjZWxsX2NvdW50LHRyaXRvblJvdXRlX3Zpb2xhdGlvbnMsU2hvcnRfdmlvbGF0aW9ucyxNZXRTcGNfdmlvbGF0aW9ucyxPZmZHcmlkX3Zpb2xhdGlvbnMsTWluSG9sZV92aW9sYXRpb25zLE90aGVyX3Zpb2xhdGlvbnMsTWFnaWNfdmlvbGF0aW9ucyxhbnRlbm5hX3Zpb2xhdGlvbnMsbHZzX3RvdGFsX2Vycm9ycyxjdmNfdG90YWxfZXJyb3JzLGtsYXlvdXRfdmlvbGF0aW9ucyx3aXJlX2xlbmd0aCx2aWFzLHducyxwbF93bnMsb3B0aW1pemVkX3ducyxmYXN0cm91dGVfd25zLHNwZWZfd25zLHRucyxwbF90bnMsb3B0aW1pemVkX3RucyxmYXN0cm91dGVfdG5zLHNwZWZfdG5zLEhQV0wscm91dGluZ19sYXllcjFfcGN0LHJvdXRpbmdfbGF5ZXIyX3BjdCxyb3V0aW5nX2xheWVyM19wY3Qscm91dGluZ19sYXllcjRfcGN0LHJvdXRpbmdfbGF5ZXI1X3BjdCxyb3V0aW5nX2xheWVyNl9wY3Qsd2lyZXNfY291bnQsd2lyZV9iaXRzLHB1YmxpY193aXJlc19jb3VudCxwdWJsaWNfd2lyZV9iaXRzLG1lbW9yaWVzX2NvdW50LG1lbW9yeV9iaXRzLHByb2Nlc3Nlc19jb3VudCxjZWxsc19wcmVfYWJjLEFORCxERkYsTkFORCxOT1IsT1IsWE9SLFhOT1IsTVVYLGlucHV0cyxvdXRwdXRzLGxldmVsLEVuZENhcHMsVGFwQ2VsbHMsRGlvZGVzLFRvdGFsX1BoeXNpY2FsX0NlbGxzLHN1Z2dlc3RlZF9jbG9ja19mcmVxdWVuY3ksc3VnZ2VzdGVkX2Nsb2NrX3BlcmlvZCxDTE9DS19QRVJJT0QsU1lOVEhfU1RSQVRFR1ksU1lOVEhfTUFYX0ZBTk9VVCxGUF9DT1JFX1VUSUwsRlBfQVNQRUNUX1JBVElPLEZQX1BETl9WUElUQ0gsRlBfUEROX0hQSVRDSCxQTF9UQVJHRVRfREVOU0lUWSxHTEJfUlRfQURKVVNUTUVOVCxTVERfQ0VMTF9MSUJSQVJZLENFTExfUEFELERJT0RFX0lOU0VSVElPTl9TVFJBVEVHWQorMCwvcHJvamVjdC9vcGVubGFuZS9zZHJhbSxzZHJjX3RvcCxzZHJhbSxGbG93X2NvbXBsZXRlZCwwaDE3bTE2cywwaDZtMTdzLDQwNzA4LjU3MTQyODU3MTQzLDAuMzUsMjAzNTQuMjg1NzE0Mjg1NzE0LDMwLDY2Mi42Miw3MTI0LDAsMCwwLDAsMCwwLDAsMCwwLC0xLDAsMzE2OTIwLDU2NjcxLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwyNDI4NjY0MjYsMC4wLDI1Ljg2LDE2Ljg2LDIuNTQsLTEsLTEsNzAyOCw3Mjg3LDEyMTksMTQ3OCwwLDAsMCw3MTI0LDE5NiwxMDcsODMsOTgsMzUyLDIxMCwzNCwyMjQwLDEyNjcsMTE4NiwyMywzNTAsNDI0OCwwLDQ1OTgsMTAwLjAsMTAuMCwxMCxBUkVBIDAsNCw1MCwxLDEwMCwxMDAsMC41NSwwLHNreTEzMF9mZF9zY19oZCw0LDUKZGlmZiAtLWdpdCBhL3NpZ25vZmYvc3BpX21hc3Rlci9PUEVOTEFORV9WRVJTSU9OIGIvc2lnbm9mZi9zcGlfbWFzdGVyL09QRU5MQU5FX1ZFUlNJT04KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFiNmU4NAotLS0gL2Rldi9udWxsCisrKyBiL3NpZ25vZmYvc3BpX21hc3Rlci9PUEVOTEFORV9WRVJTSU9OCkBAIC0wLDAgKzEgQEAKK29wZW5sYW5lIHYwLjIxLTktZzk0ZmU3NDMKZGlmZiAtLWdpdCBhL3NpZ25vZmYvc3BpX21hc3Rlci9QREtfU09VUkNFUyBiL3NpZ25vZmYvc3BpX21hc3Rlci9QREtfU09VUkNFUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjU4YmQ1Ci0tLSAvZGV2L251bGwKKysrIGIvc2lnbm9mZi9zcGlfbWFzdGVyL1BES19TT1VSQ0VTCkBAIC0wLDAgKzEsNiBAQAorLW5lIG9wZW5sYW5lIAorYTY4Yzk1Mjg5NjEyYTM2MTg3MGFjZWRiN2Y2NDc4ZmNmYWUzMmU0OQorLW5lIHNreXdhdGVyLXBkayAKK2Y2Zjc2ZjNkYzk5NTI2YzZmYzJjZmVkZTE5YjViMTIyN2Q0ZWJkZTcKKy1uZSBvcGVuX3Bka3MgCis1MjJhMzczNDQxYTg2NWZlZTlkNmUzNzgzMDE1YjQ0NDVmMTFhZmU2CmRpZmYgLS1naXQgYS9zaWdub2ZmL3NwaV9tYXN0ZXIvZmluYWxfc3VtbWFyeV9yZXBvcnQuY3N2IGIvc2lnbm9mZi9zcGlfbWFzdGVyL2ZpbmFsX3N1bW1hcnlfcmVwb3J0LmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTI4NzQ4Ci0tLSAvZGV2L251bGwKKysrIGIvc2lnbm9mZi9zcGlfbWFzdGVyL2ZpbmFsX3N1bW1hcnlfcmVwb3J0LmNzdgpAQCAtMCwwICsxLDIgQEAKKyxkZXNpZ24sZGVzaWduX25hbWUsY29uZmlnLGZsb3dfc3RhdHVzLHRvdGFsX3J1bnRpbWUscm91dGVkX3J1bnRpbWUsKENlbGwvbW1eMikvQ29yZV9VdGlsLERJRUFSRUFfbW1eMixDZWxsUGVyX21tXjIsT3BlbkRQX1V0aWwsUGVha19NZW1vcnlfVXNhZ2VfTUIsY2VsbF9jb3VudCx0cml0b25Sb3V0ZV92aW9sYXRpb25zLFNob3J0X3Zpb2xhdGlvbnMsTWV0U3BjX3Zpb2xhdGlvbnMsT2ZmR3JpZF92aW9sYXRpb25zLE1pbkhvbGVfdmlvbGF0aW9ucyxPdGhlcl92aW9sYXRpb25zLE1hZ2ljX3Zpb2xhdGlvbnMsYW50ZW5uYV92aW9sYXRpb25zLGx2c190b3RhbF9lcnJvcnMsY3ZjX3RvdGFsX2Vycm9ycyxrbGF5b3V0X3Zpb2xhdGlvbnMsd2lyZV9sZW5ndGgsdmlhcyx3bnMscGxfd25zLG9wdGltaXplZF93bnMsZmFzdHJvdXRlX3ducyxzcGVmX3ducyx0bnMscGxfdG5zLG9wdGltaXplZF90bnMsZmFzdHJvdXRlX3RucyxzcGVmX3RucyxIUFdMLHJvdXRpbmdfbGF5ZXIxX3BjdCxyb3V0aW5nX2xheWVyMl9wY3Qscm91dGluZ19sYXllcjNfcGN0LHJvdXRpbmdfbGF5ZXI0X3BjdCxyb3V0aW5nX2xheWVyNV9wY3Qscm91dGluZ19sYXllcjZfcGN0LHdpcmVzX2NvdW50LHdpcmVfYml0cyxwdWJsaWNfd2lyZXNfY291bnQscHVibGljX3dpcmVfYml0cyxtZW1vcmllc19jb3VudCxtZW1vcnlfYml0cyxwcm9jZXNzZXNfY291bnQsY2VsbHNfcHJlX2FiYyxBTkQsREZGLE5BTkQsTk9SLE9SLFhPUixYTk9SLE1VWCxpbnB1dHMsb3V0cHV0cyxsZXZlbCxFbmRDYXBzLFRhcENlbGxzLERpb2RlcyxUb3RhbF9QaHlzaWNhbF9DZWxscyxzdWdnZXN0ZWRfY2xvY2tfZnJlcXVlbmN5LHN1Z2dlc3RlZF9jbG9ja19wZXJpb2QsQ0xPQ0tfUEVSSU9ELFNZTlRIX1NUUkFURUdZLFNZTlRIX01BWF9GQU5PVVQsRlBfQ09SRV9VVElMLEZQX0FTUEVDVF9SQVRJTyxGUF9QRE5fVlBJVENILEZQX1BETl9IUElUQ0gsUExfVEFSR0VUX0RFTlNJVFksR0xCX1JUX0FESlVTVE1FTlQsU1REX0NFTExfTElCUkFSWSxDRUxMX1BBRCxESU9ERV9JTlNFUlRJT05fU1RSQVRFR1kKKzAsL3Byb2plY3Qvb3BlbmxhbmUvc3BpX21hc3RlcixzcGltX3RvcCxzcGlfbWFzdGVyLEZsb3dfY29tcGxldGVkLDBoMjBtMzlzLDBoMTBtMzlzLDU4NDM4LjQ2MTUzODQ2MTUzLDAuMjYsMjkyMTkuMjMwNzY5MjMwNzY2LDQ3LDY2NC43MSw3NTk3LDAsMCwwLDAsMCwwLDAsMCwzLC0xLDAsMzg0MjI4LDY3MTI0LDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwyOTQ3NzY3NzEsMC4wLDMxLjMzLDM5Ljc5LDAuMDQsLTEsLTEsNzUzNyw3NjczLDEyNjgsMTQwNCwwLDAsMCw3NTk3LDI0NSwwLDE2OSwxMDAsMTA1MSwyMTAsMzIsMjQ0MywxMzUzLDEyOTIsMjQsNDYwLDMxMzIsMCwzNTkyLDEwMC4wLDEwLjAsMTAsQVJFQSAwLDQsNTAsMSwxMDAsMTAwLDAuNDUsMCxza3kxMzBfZmRfc2NfaGQsNCw1CmRpZmYgLS1naXQgYS9zaWdub2ZmL3N5bnRhY29yZS9PUEVOTEFORV9WRVJTSU9OIGIvc2lnbm9mZi9zeW50YWNvcmUvT1BFTkxBTkVfVkVSU0lPTgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGM3NjY0Ci0tLSAvZGV2L251bGwKKysrIGIvc2lnbm9mZi9zeW50YWNvcmUvT1BFTkxBTkVfVkVSU0lPTgpAQCAtMCwwICsxIEBACitvcGVubGFuZSBOL0EKZGlmZiAtLWdpdCBhL3NpZ25vZmYvc3ludGFjb3JlL1BES19TT1VSQ0VTIGIvc2lnbm9mZi9zeW50YWNvcmUvUERLX1NPVVJDRVMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2EzNjg0YQotLS0gL2Rldi9udWxsCisrKyBiL3NpZ25vZmYvc3ludGFjb3JlL1BES19TT1VSQ0VTCkBAIC0wLDAgKzEsNiBAQAorLW5lIG9wZW5sYW5lIAorOGQ2ODZjMDgxYzJjOWFlZmExNmRiYmQ4Y2NmNWJjOGY0ZGNhYmM0YgorLW5lIHNreXdhdGVyLXBkayAKK2MwOTRiNmU4M2E0ZjkyOThlNDdmNjk2ZWM1YTdmZDUzNTM1ZWM1ZWIKKy1uZSBvcGVuX3Bka3MgCisxNGRiMzJhYThiYTMzMGU4ODYzMmZmM2FkMmZmNTJmNGY0ZGFlMWFkCmRpZmYgLS1naXQgYS9zaWdub2ZmL3N5bnRhY29yZS9maW5hbF9zdW1tYXJ5X3JlcG9ydC5jc3YgYi9zaWdub2ZmL3N5bnRhY29yZS9maW5hbF9zdW1tYXJ5X3JlcG9ydC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRjOTdiZAotLS0gL2Rldi9udWxsCisrKyBiL3NpZ25vZmYvc3ludGFjb3JlL2ZpbmFsX3N1bW1hcnlfcmVwb3J0LmNzdgpAQCAtMCwwICsxLDIgQEAKKyxkZXNpZ24sZGVzaWduX25hbWUsY29uZmlnLGZsb3dfc3RhdHVzLHRvdGFsX3J1bnRpbWUscm91dGVkX3J1bnRpbWUsKENlbGwvbW1eMikvQ29yZV9VdGlsLERJRUFSRUFfbW1eMixDZWxsUGVyX21tXjIsT3BlbkRQX1V0aWwsUGVha19NZW1vcnlfVXNhZ2VfTUIsY2VsbF9jb3VudCx0cml0b25Sb3V0ZV92aW9sYXRpb25zLFNob3J0X3Zpb2xhdGlvbnMsTWV0U3BjX3Zpb2xhdGlvbnMsT2ZmR3JpZF92aW9sYXRpb25zLE1pbkhvbGVfdmlvbGF0aW9ucyxPdGhlcl92aW9sYXRpb25zLE1hZ2ljX3Zpb2xhdGlvbnMsYW50ZW5uYV92aW9sYXRpb25zLGx2c190b3RhbF9lcnJvcnMsY3ZjX3RvdGFsX2Vycm9ycyxrbGF5b3V0X3Zpb2xhdGlvbnMsd2lyZV9sZW5ndGgsdmlhcyx3bnMscGxfd25zLG9wdGltaXplZF93bnMsZmFzdHJvdXRlX3ducyxzcGVmX3ducyx0bnMscGxfdG5zLG9wdGltaXplZF90bnMsZmFzdHJvdXRlX3RucyxzcGVmX3RucyxIUFdMLHJvdXRpbmdfbGF5ZXIxX3BjdCxyb3V0aW5nX2xheWVyMl9wY3Qscm91dGluZ19sYXllcjNfcGN0LHJvdXRpbmdfbGF5ZXI0X3BjdCxyb3V0aW5nX2xheWVyNV9wY3Qscm91dGluZ19sYXllcjZfcGN0LHdpcmVzX2NvdW50LHdpcmVfYml0cyxwdWJsaWNfd2lyZXNfY291bnQscHVibGljX3dpcmVfYml0cyxtZW1vcmllc19jb3VudCxtZW1vcnlfYml0cyxwcm9jZXNzZXNfY291bnQsY2VsbHNfcHJlX2FiYyxBTkQsREZGLE5BTkQsTk9SLE9SLFhPUixYTk9SLE1VWCxpbnB1dHMsb3V0cHV0cyxsZXZlbCxFbmRDYXBzLFRhcENlbGxzLERpb2RlcyxUb3RhbF9QaHlzaWNhbF9DZWxscyxzdWdnZXN0ZWRfY2xvY2tfZnJlcXVlbmN5LHN1Z2dlc3RlZF9jbG9ja19wZXJpb2QsQ0xPQ0tfUEVSSU9ELFNZTlRIX1NUUkFURUdZLFNZTlRIX01BWF9GQU5PVVQsRlBfQ09SRV9VVElMLEZQX0FTUEVDVF9SQVRJTyxGUF9QRE5fVlBJVENILEZQX1BETl9IUElUQ0gsUExfVEFSR0VUX0RFTlNJVFksR0xCX1JUX0FESlVTVE1FTlQsU1REX0NFTExfTElCUkFSWSxDRUxMX1BBRCxESU9ERV9JTlNFUlRJT05fU1RSQVRFR1kKKzAsL3Byb2plY3Qvb3BlbmxhbmUvc3ludGFjb3JlLHNjcjFfdG9wX3diLHN5bnRhY29yZSxmbG93X2NvbXBsZXRlZCwwaDQxbTQ4cywtMSw1MzgzMC45NzE2NTk5MTkwMzYsMC43OTA0LDI2OTE1LjQ4NTgyOTk1OTUxOCwzMC45MywxMTk1LjUsMjEyNzQsMCwtMSwtMSwtMSwtMSwwLC0xLDEsMCwtMSwtMSwxNjc0NzYwLDI0MDY4MSwtMi4wNCwtMTcuOCwtMSwwLjAsLTEsLTI0NTkuNDksLTIxNjU1LjYzLC0xLDAuMCwtMSwxMzIyMjYzODc1LjAsMC4wLDYyLjAzLDI0LjY5LDI2LjE2LDAuMDEsLTEsMTg1OTcsMzAwNjcsMTA2NywxMjQzMCwwLDAsMCwyMTk4MCwwLDAsMCwwLDAsMCwwLDQsNTI0MCw1OTI0LDQ5LDM2NiwxMDgyMiwwLDExMTg4LDkwLjkwOTA5MDkwOTA5MDksMTEsMTAsQVJFQSAwLDQsNTAsMSwxMDAsMTAwLDAuMzIsMC4wLHNreTEzMF9mZF9zY19oZCw0LDQKZGlmZiAtLWdpdCBhL3NpZ25vZmYvdWFydC9PUEVOTEFORV9WRVJTSU9OIGIvc2lnbm9mZi91YXJ0L09QRU5MQU5FX1ZFUlNJT04KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI2MzNiMQotLS0gL2Rldi9udWxsCisrKyBiL3NpZ25vZmYvdWFydC9PUEVOTEFORV9WRVJTSU9OCkBAIC0wLDAgKzEgQEAKK29wZW5sYW5lIHJjNwpkaWZmIC0tZ2l0IGEvc2lnbm9mZi91YXJ0L1BES19TT1VSQ0VTIGIvc2lnbm9mZi91YXJ0L1BES19TT1VSQ0VTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiNThiZDUKLS0tIC9kZXYvbnVsbAorKysgYi9zaWdub2ZmL3VhcnQvUERLX1NPVVJDRVMKQEAgLTAsMCArMSw2IEBACistbmUgb3BlbmxhbmUgCithNjhjOTUyODk2MTJhMzYxODcwYWNlZGI3ZjY0NzhmY2ZhZTMyZTQ5CistbmUgc2t5d2F0ZXItcGRrIAorZjZmNzZmM2RjOTk1MjZjNmZjMmNmZWRlMTliNWIxMjI3ZDRlYmRlNworLW5lIG9wZW5fcGRrcyAKKzUyMmEzNzM0NDFhODY1ZmVlOWQ2ZTM3ODMwMTViNDQ0NWYxMWFmZTYKZGlmZiAtLWdpdCBhL3NpZ25vZmYvdWFydC9maW5hbF9zdW1tYXJ5X3JlcG9ydC5jc3YgYi9zaWdub2ZmL3VhcnQvZmluYWxfc3VtbWFyeV9yZXBvcnQuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkMDJiN2IKLS0tIC9kZXYvbnVsbAorKysgYi9zaWdub2ZmL3VhcnQvZmluYWxfc3VtbWFyeV9yZXBvcnQuY3N2CkBAIC0wLDAgKzEsMiBAQAorLGRlc2lnbixkZXNpZ25fbmFtZSxjb25maWcsZmxvd19zdGF0dXMsdG90YWxfcnVudGltZSxyb3V0ZWRfcnVudGltZSwoQ2VsbC9tbV4yKS9Db3JlX1V0aWwsRElFQVJFQV9tbV4yLENlbGxQZXJfbW1eMixPcGVuRFBfVXRpbCxQZWFrX01lbW9yeV9Vc2FnZV9NQixjZWxsX2NvdW50LHRyaXRvblJvdXRlX3Zpb2xhdGlvbnMsU2hvcnRfdmlvbGF0aW9ucyxNZXRTcGNfdmlvbGF0aW9ucyxPZmZHcmlkX3Zpb2xhdGlvbnMsTWluSG9sZV92aW9sYXRpb25zLE90aGVyX3Zpb2xhdGlvbnMsTWFnaWNfdmlvbGF0aW9ucyxhbnRlbm5hX3Zpb2xhdGlvbnMsbHZzX3RvdGFsX2Vycm9ycyxjdmNfdG90YWxfZXJyb3JzLGtsYXlvdXRfdmlvbGF0aW9ucyx3aXJlX2xlbmd0aCx2aWFzLHducyxwbF93bnMsb3B0aW1pemVkX3ducyxmYXN0cm91dGVfd25zLHNwZWZfd25zLHRucyxwbF90bnMsb3B0aW1pemVkX3RucyxmYXN0cm91dGVfdG5zLHNwZWZfdG5zLEhQV0wscm91dGluZ19sYXllcjFfcGN0LHJvdXRpbmdfbGF5ZXIyX3BjdCxyb3V0aW5nX2xheWVyM19wY3Qscm91dGluZ19sYXllcjRfcGN0LHJvdXRpbmdfbGF5ZXI1X3BjdCxyb3V0aW5nX2xheWVyNl9wY3Qsd2lyZXNfY291bnQsd2lyZV9iaXRzLHB1YmxpY193aXJlc19jb3VudCxwdWJsaWNfd2lyZV9iaXRzLG1lbW9yaWVzX2NvdW50LG1lbW9yeV9iaXRzLHByb2Nlc3Nlc19jb3VudCxjZWxsc19wcmVfYWJjLEFORCxERkYsTkFORCxOT1IsT1IsWE9SLFhOT1IsTVVYLGlucHV0cyxvdXRwdXRzLGxldmVsLEVuZENhcHMsVGFwQ2VsbHMsRGlvZGVzLFRvdGFsX1BoeXNpY2FsX0NlbGxzLHN1Z2dlc3RlZF9jbG9ja19mcmVxdWVuY3ksc3VnZ2VzdGVkX2Nsb2NrX3BlcmlvZCxDTE9DS19QRVJJT0QsU1lOVEhfU1RSQVRFR1ksU1lOVEhfTUFYX0ZBTk9VVCxGUF9DT1JFX1VUSUwsRlBfQVNQRUNUX1JBVElPLEZQX1BETl9WUElUQ0gsRlBfUEROX0hQSVRDSCxQTF9UQVJHRVRfREVOU0lUWSxHTEJfUlRfQURKVVNUTUVOVCxTVERfQ0VMTF9MSUJSQVJZLENFTExfUEFELERJT0RFX0lOU0VSVElPTl9TVFJBVEVHWQorMCwvcHJvamVjdC9vcGVubGFuZS91YXJ0LHVhcnRfY29yZSx1YXJ0LEZsb3dfY29tcGxldGVkLDBoNm0yNHMsMGg0bTEzcyw0NjE2Ni42NjY2NjY2NjY2NywwLjEyLDIzMDgzLjMzMzMzMzMzMzMzNiwzNSw1NDUuMTQsMjc3MCwwLDAsMCwwLDAsMCwwLDAsMCwtMSwwLDkzNzg0LDIwOTgyLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCw2MjQ2Mjk1NSwwLjAsMTkuNzEsMTkuMTEsMC4wLC0xLC0xLDI3NjksMjc4OSw0NTYsNDc2LDAsMCwwLDI3NzAsNTYsMCwyOSw0MSwxODIsMTI1LDI2LDY4NSw0MzUsMzk2LDE4LDI3OCwxNDEwLDAsMTY4OCwxMDAuMCwxMC4wLDEwLEFSRUEgMCw0LDUwLDEsMTAwLDEwMCwwLjU1LDAsc2t5MTMwX2ZkX3NjX2hkLDQsNApkaWZmIC0tZ2l0IGEvc2lnbm9mZi91YXJ0X2kyY20vT1BFTkxBTkVfVkVSU0lPTiBiL3NpZ25vZmYvdWFydF9pMmNtL09QRU5MQU5FX1ZFUlNJT04KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI2MzNiMQotLS0gL2Rldi9udWxsCisrKyBiL3NpZ25vZmYvdWFydF9pMmNtL09QRU5MQU5FX1ZFUlNJT04KQEAgLTAsMCArMSBAQAorb3BlbmxhbmUgcmM3CmRpZmYgLS1naXQgYS9zaWdub2ZmL3VhcnRfaTJjbS9QREtfU09VUkNFUyBiL3NpZ25vZmYvdWFydF9pMmNtL1BES19TT1VSQ0VTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiNThiZDUKLS0tIC9kZXYvbnVsbAorKysgYi9zaWdub2ZmL3VhcnRfaTJjbS9QREtfU09VUkNFUwpAQCAtMCwwICsxLDYgQEAKKy1uZSBvcGVubGFuZSAKK2E2OGM5NTI4OTYxMmEzNjE4NzBhY2VkYjdmNjQ3OGZjZmFlMzJlNDkKKy1uZSBza3l3YXRlci1wZGsgCitmNmY3NmYzZGM5OTUyNmM2ZmMyY2ZlZGUxOWI1YjEyMjdkNGViZGU3CistbmUgb3Blbl9wZGtzIAorNTIyYTM3MzQ0MWE4NjVmZWU5ZDZlMzc4MzAxNWI0NDQ1ZjExYWZlNgpkaWZmIC0tZ2l0IGEvc2lnbm9mZi91YXJ0X2kyY20vZmluYWxfc3VtbWFyeV9yZXBvcnQuY3N2IGIvc2lnbm9mZi91YXJ0X2kyY20vZmluYWxfc3VtbWFyeV9yZXBvcnQuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhNGM3NGUKLS0tIC9kZXYvbnVsbAorKysgYi9zaWdub2ZmL3VhcnRfaTJjbS9maW5hbF9zdW1tYXJ5X3JlcG9ydC5jc3YKQEAgLTAsMCArMSwyIEBACissZGVzaWduLGRlc2lnbl9uYW1lLGNvbmZpZyxmbG93X3N0YXR1cyx0b3RhbF9ydW50aW1lLHJvdXRlZF9ydW50aW1lLChDZWxsL21tXjIpL0NvcmVfVXRpbCxESUVBUkVBX21tXjIsQ2VsbFBlcl9tbV4yLE9wZW5EUF9VdGlsLFBlYWtfTWVtb3J5X1VzYWdlX01CLGNlbGxfY291bnQsdHJpdG9uUm91dGVfdmlvbGF0aW9ucyxTaG9ydF92aW9sYXRpb25zLE1ldFNwY192aW9sYXRpb25zLE9mZkdyaWRfdmlvbGF0aW9ucyxNaW5Ib2xlX3Zpb2xhdGlvbnMsT3RoZXJfdmlvbGF0aW9ucyxNYWdpY192aW9sYXRpb25zLGFudGVubmFfdmlvbGF0aW9ucyxsdnNfdG90YWxfZXJyb3JzLGN2Y190b3RhbF9lcnJvcnMsa2xheW91dF92aW9sYXRpb25zLHdpcmVfbGVuZ3RoLHZpYXMsd25zLHBsX3ducyxvcHRpbWl6ZWRfd25zLGZhc3Ryb3V0ZV93bnMsc3BlZl93bnMsdG5zLHBsX3RucyxvcHRpbWl6ZWRfdG5zLGZhc3Ryb3V0ZV90bnMsc3BlZl90bnMsSFBXTCxyb3V0aW5nX2xheWVyMV9wY3Qscm91dGluZ19sYXllcjJfcGN0LHJvdXRpbmdfbGF5ZXIzX3BjdCxyb3V0aW5nX2xheWVyNF9wY3Qscm91dGluZ19sYXllcjVfcGN0LHJvdXRpbmdfbGF5ZXI2X3BjdCx3aXJlc19jb3VudCx3aXJlX2JpdHMscHVibGljX3dpcmVzX2NvdW50LHB1YmxpY193aXJlX2JpdHMsbWVtb3JpZXNfY291bnQsbWVtb3J5X2JpdHMscHJvY2Vzc2VzX2NvdW50LGNlbGxzX3ByZV9hYmMsQU5ELERGRixOQU5ELE5PUixPUixYT1IsWE5PUixNVVgsaW5wdXRzLG91dHB1dHMsbGV2ZWwsRW5kQ2FwcyxUYXBDZWxscyxEaW9kZXMsVG90YWxfUGh5c2ljYWxfQ2VsbHMsc3VnZ2VzdGVkX2Nsb2NrX2ZyZXF1ZW5jeSxzdWdnZXN0ZWRfY2xvY2tfcGVyaW9kLENMT0NLX1BFUklPRCxTWU5USF9TVFJBVEVHWSxTWU5USF9NQVhfRkFOT1VULEZQX0NPUkVfVVRJTCxGUF9BU1BFQ1RfUkFUSU8sRlBfUEROX1ZQSVRDSCxGUF9QRE5fSFBJVENILFBMX1RBUkdFVF9ERU5TSVRZLEdMQl9SVF9BREpVU1RNRU5ULFNURF9DRUxMX0xJQlJBUlksQ0VMTF9QQUQsRElPREVfSU5TRVJUSU9OX1NUUkFURUdZCiswLC9wcm9qZWN0L29wZW5sYW5lL3VhcnRfaTJjbSx1YXJ0X2kyY190b3AsdWFydF9pMmNtLEZsb3dfY29tcGxldGVkLDBoNW00MnMsMGgzbTM3cyw1OTM1MC4wLDAuMTIsMjk2NzUuMCw0Nyw1NjEuNTYsMzU2MSwwLDAsMCwwLDAsMCwwLDAsMCwtMSwwLDEyNDExNywyNzUyMywwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsMC4wLDAuMCwwLjAsODE5NzQzNzcsMC4wLDI1LjU3LDI1LjQ2LDAuMzMsLTEsLTEsMzU2MiwzNTgyLDYyMyw2NDMsMCwwLDAsMzU2MSw5OCwxMCw1OCw3MCw0MjMsMTU1LDI3LDgzNiw1ODksNTU2LDE3LDI3OCwxNDEwLDAsMTY4OCwxMDAuMCwxMC4wLDEwLEFSRUEgMCw0LDUwLDEsMTAwLDEwMCwwLjU1LDAsc2t5MTMwX2ZkX3NjX2hkLDQsNApkaWZmIC0tZ2l0IGEvc2lnbm9mZi91YXJ0X2kyY21fdXNiL09QRU5MQU5FX1ZFUlNJT04gYi9zaWdub2ZmL3VhcnRfaTJjbV91c2IvT1BFTkxBTkVfVkVSU0lPTgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWI2ZTg0Ci0tLSAvZGV2L251bGwKKysrIGIvc2lnbm9mZi91YXJ0X2kyY21fdXNiL09QRU5MQU5FX1ZFUlNJT04KQEAgLTAsMCArMSBAQAorb3BlbmxhbmUgdjAuMjEtOS1nOTRmZTc0MwpkaWZmIC0tZ2l0IGEvc2lnbm9mZi91YXJ0X2kyY21fdXNiL1BES19TT1VSQ0VTIGIvc2lnbm9mZi91YXJ0X2kyY21fdXNiL1BES19TT1VSQ0VTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiNThiZDUKLS0tIC9kZXYvbnVsbAorKysgYi9zaWdub2ZmL3VhcnRfaTJjbV91c2IvUERLX1NPVVJDRVMKQEAgLTAsMCArMSw2IEBACistbmUgb3BlbmxhbmUgCithNjhjOTUyODk2MTJhMzYxODcwYWNlZGI3ZjY0NzhmY2ZhZTMyZTQ5CistbmUgc2t5d2F0ZXItcGRrIAorZjZmNzZmM2RjOTk1MjZjNmZjMmNmZWRlMTliNWIxMjI3ZDRlYmRlNworLW5lIG9wZW5fcGRrcyAKKzUyMmEzNzM0NDFhODY1ZmVlOWQ2ZTM3ODMwMTViNDQ0NWYxMWFmZTYKZGlmZiAtLWdpdCBhL3NpZ25vZmYvdWFydF9pMmNtX3VzYi9maW5hbF9zdW1tYXJ5X3JlcG9ydC5jc3YgYi9zaWdub2ZmL3VhcnRfaTJjbV91c2IvZmluYWxfc3VtbWFyeV9yZXBvcnQuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMDY4M2QKLS0tIC9kZXYvbnVsbAorKysgYi9zaWdub2ZmL3VhcnRfaTJjbV91c2IvZmluYWxfc3VtbWFyeV9yZXBvcnQuY3N2CkBAIC0wLDAgKzEsMiBAQAorLGRlc2lnbixkZXNpZ25fbmFtZSxjb25maWcsZmxvd19zdGF0dXMsdG90YWxfcnVudGltZSxyb3V0ZWRfcnVudGltZSwoQ2VsbC9tbV4yKS9Db3JlX1V0aWwsRElFQVJFQV9tbV4yLENlbGxQZXJfbW1eMixPcGVuRFBfVXRpbCxQZWFrX01lbW9yeV9Vc2FnZV9NQixjZWxsX2NvdW50LHRyaXRvblJvdXRlX3Zpb2xhdGlvbnMsU2hvcnRfdmlvbGF0aW9ucyxNZXRTcGNfdmlvbGF0aW9ucyxPZmZHcmlkX3Zpb2xhdGlvbnMsTWluSG9sZV92aW9sYXRpb25zLE90aGVyX3Zpb2xhdGlvbnMsTWFnaWNfdmlvbGF0aW9ucyxhbnRlbm5hX3Zpb2xhdGlvbnMsbHZzX3RvdGFsX2Vycm9ycyxjdmNfdG90YWxfZXJyb3JzLGtsYXlvdXRfdmlvbGF0aW9ucyx3aXJlX2xlbmd0aCx2aWFzLHducyxwbF93bnMsb3B0aW1pemVkX3ducyxmYXN0cm91dGVfd25zLHNwZWZfd25zLHRucyxwbF90bnMsb3B0aW1pemVkX3RucyxmYXN0cm91dGVfdG5zLHNwZWZfdG5zLEhQV0wscm91dGluZ19sYXllcjFfcGN0LHJvdXRpbmdfbGF5ZXIyX3BjdCxyb3V0aW5nX2xheWVyM19wY3Qscm91dGluZ19sYXllcjRfcGN0LHJvdXRpbmdfbGF5ZXI1X3BjdCxyb3V0aW5nX2xheWVyNl9wY3Qsd2lyZXNfY291bnQsd2lyZV9iaXRzLHB1YmxpY193aXJlc19jb3VudCxwdWJsaWNfd2lyZV9iaXRzLG1lbW9yaWVzX2NvdW50LG1lbW9yeV9iaXRzLHByb2Nlc3Nlc19jb3VudCxjZWxsc19wcmVfYWJjLEFORCxERkYsTkFORCxOT1IsT1IsWE9SLFhOT1IsTVVYLGlucHV0cyxvdXRwdXRzLGxldmVsLEVuZENhcHMsVGFwQ2VsbHMsRGlvZGVzLFRvdGFsX1BoeXNpY2FsX0NlbGxzLHN1Z2dlc3RlZF9jbG9ja19mcmVxdWVuY3ksc3VnZ2VzdGVkX2Nsb2NrX3BlcmlvZCxDTE9DS19QRVJJT0QsU1lOVEhfU1RSQVRFR1ksU1lOVEhfTUFYX0ZBTk9VVCxGUF9DT1JFX1VUSUwsRlBfQVNQRUNUX1JBVElPLEZQX1BETl9WUElUQ0gsRlBfUEROX0hQSVRDSCxQTF9UQVJHRVRfREVOU0lUWSxHTEJfUlRfQURKVVNUTUVOVCxTVERfQ0VMTF9MSUJSQVJZLENFTExfUEFELERJT0RFX0lOU0VSVElPTl9TVFJBVEVHWQorMCwvcHJvamVjdC9vcGVubGFuZS91YXJ0X2kyY21fdXNiLHVhcnRfaTJjX3VzYl90b3AsdWFydF9pMmNtX3VzYixGbG93X2NvbXBsZXRlZCwwaDI1bTI0cywwaDltNTlzLDU5MTU3LjE0Mjg1NzE0Mjg2LDAuNDIsMjk1NzguNTcxNDI4NTcxNDMsNDUsNzU4LjY4LDEyNDIzLDAsMCwwLDAsMCwwLDAsMCwwLC0xLDAsNTIyNDQzLDk5ODgxLC0zLjE2LC0zLjE2LC0zLjA3LC0zLjA3LC0zLjExLC05MS4wOCwtOTEuMDgsLTkxLjY3LC05MS42NywtOTEuNTYsMzkwMjgzNjI3LDAuMCwzMS4yNCwyOS40NiwwLjMxLC0xLC0xLDEyNDA3LDEyNDc2LDIyNjIsMjMzMSwwLDAsMCwxMjQyMywzNjQsMTAsMjAyLDI0NCwyMTE4LDMyNSw3OSwyNjkyLDIyMjQsMjE3MCwyNiw0OTgsNTE0NiwwLDU2NDQsNzYuMjc3NjUwNjQ4MzYwMDQsMTMuMTEsMTAsQVJFQSAwLDQsNTAsMSwxMDAsMTAwLDAuNDUsMCxza3kxMzBfZmRfc2NfaGQsNCw1CmRpZmYgLS1naXQgYS9zaWdub2ZmL3VhcnRfaTJjbV91c2Jfc3BpL09QRU5MQU5FX1ZFUlNJT04gYi9zaWdub2ZmL3VhcnRfaTJjbV91c2Jfc3BpL09QRU5MQU5FX1ZFUlNJT04KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBjNzY2NAotLS0gL2Rldi9udWxsCisrKyBiL3NpZ25vZmYvdWFydF9pMmNtX3VzYl9zcGkvT1BFTkxBTkVfVkVSU0lPTgpAQCAtMCwwICsxIEBACitvcGVubGFuZSBOL0EKZGlmZiAtLWdpdCBhL3NpZ25vZmYvdWFydF9pMmNtX3VzYl9zcGkvUERLX1NPVVJDRVMgYi9zaWdub2ZmL3VhcnRfaTJjbV91c2Jfc3BpL1BES19TT1VSQ0VTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhMzY4NGEKLS0tIC9kZXYvbnVsbAorKysgYi9zaWdub2ZmL3VhcnRfaTJjbV91c2Jfc3BpL1BES19TT1VSQ0VTCkBAIC0wLDAgKzEsNiBAQAorLW5lIG9wZW5sYW5lIAorOGQ2ODZjMDgxYzJjOWFlZmExNmRiYmQ4Y2NmNWJjOGY0ZGNhYmM0YgorLW5lIHNreXdhdGVyLXBkayAKK2MwOTRiNmU4M2E0ZjkyOThlNDdmNjk2ZWM1YTdmZDUzNTM1ZWM1ZWIKKy1uZSBvcGVuX3Bka3MgCisxNGRiMzJhYThiYTMzMGU4ODYzMmZmM2FkMmZmNTJmNGY0ZGFlMWFkCmRpZmYgLS1naXQgYS9zaWdub2ZmL3VhcnRfaTJjbV91c2Jfc3BpL2ZpbmFsX3N1bW1hcnlfcmVwb3J0LmNzdiBiL3NpZ25vZmYvdWFydF9pMmNtX3VzYl9zcGkvZmluYWxfc3VtbWFyeV9yZXBvcnQuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyZjJiN2IKLS0tIC9kZXYvbnVsbAorKysgYi9zaWdub2ZmL3VhcnRfaTJjbV91c2Jfc3BpL2ZpbmFsX3N1bW1hcnlfcmVwb3J0LmNzdgpAQCAtMCwwICsxLDIgQEAKKyxkZXNpZ24sZGVzaWduX25hbWUsY29uZmlnLGZsb3dfc3RhdHVzLHRvdGFsX3J1bnRpbWUscm91dGVkX3J1bnRpbWUsKENlbGwvbW1eMikvQ29yZV9VdGlsLERJRUFSRUFfbW1eMixDZWxsUGVyX21tXjIsT3BlbkRQX1V0aWwsUGVha19NZW1vcnlfVXNhZ2VfTUIsY2VsbF9jb3VudCx0cml0b25Sb3V0ZV92aW9sYXRpb25zLFNob3J0X3Zpb2xhdGlvbnMsTWV0U3BjX3Zpb2xhdGlvbnMsT2ZmR3JpZF92aW9sYXRpb25zLE1pbkhvbGVfdmlvbGF0aW9ucyxPdGhlcl92aW9sYXRpb25zLE1hZ2ljX3Zpb2xhdGlvbnMsYW50ZW5uYV92aW9sYXRpb25zLGx2c190b3RhbF9lcnJvcnMsY3ZjX3RvdGFsX2Vycm9ycyxrbGF5b3V0X3Zpb2xhdGlvbnMsd2lyZV9sZW5ndGgsdmlhcyx3bnMscGxfd25zLG9wdGltaXplZF93bnMsZmFzdHJvdXRlX3ducyxzcGVmX3ducyx0bnMscGxfdG5zLG9wdGltaXplZF90bnMsZmFzdHJvdXRlX3RucyxzcGVmX3RucyxIUFdMLHJvdXRpbmdfbGF5ZXIxX3BjdCxyb3V0aW5nX2xheWVyMl9wY3Qscm91dGluZ19sYXllcjNfcGN0LHJvdXRpbmdfbGF5ZXI0X3BjdCxyb3V0aW5nX2xheWVyNV9wY3Qscm91dGluZ19sYXllcjZfcGN0LHdpcmVzX2NvdW50LHdpcmVfYml0cyxwdWJsaWNfd2lyZXNfY291bnQscHVibGljX3dpcmVfYml0cyxtZW1vcmllc19jb3VudCxtZW1vcnlfYml0cyxwcm9jZXNzZXNfY291bnQsY2VsbHNfcHJlX2FiYyxBTkQsREZGLE5BTkQsTk9SLE9SLFhPUixYTk9SLE1VWCxpbnB1dHMsb3V0cHV0cyxsZXZlbCxFbmRDYXBzLFRhcENlbGxzLERpb2RlcyxUb3RhbF9QaHlzaWNhbF9DZWxscyxzdWdnZXN0ZWRfY2xvY2tfZnJlcXVlbmN5LHN1Z2dlc3RlZF9jbG9ja19wZXJpb2QsQ0xPQ0tfUEVSSU9ELFNZTlRIX1NUUkFURUdZLFNZTlRIX01BWF9GQU5PVVQsRlBfQ09SRV9VVElMLEZQX0FTUEVDVF9SQVRJTyxGUF9QRE5fVlBJVENILEZQX1BETl9IUElUQ0gsUExfVEFSR0VUX0RFTlNJVFksR0xCX1JUX0FESlVTVE1FTlQsU1REX0NFTExfTElCUkFSWSxDRUxMX1BBRCxESU9ERV9JTlNFUlRJT05fU1RSQVRFR1kKKzAsL3Byb2plY3Qvb3BlbmxhbmUvdWFydF9pMmNtX3VzYl9zcGksdWFydF9pMmNfdXNiX3NwaV90b3AsdWFydF9pMmNtX3VzYl9zcGksZmxvd19jb21wbGV0ZWQsMGgxM20zNnMsLTEsNjM5NzcuMTQyODU3MTQyODYsMC4zNSwzMTk4OC41NzE0Mjg1NzE0MywzNy41NCw4MzYuMDcsMTExOTYsMCwwLDAsMCwwLDAsLTEsMSwwLC0xLC0xLDQzNDA4Myw5Nzg5MSwtNC41MiwtNC44NiwtMSwtNC42OSwtMSwtMTQxLjM3LC0xNTEuOTEsLTEsLTEzOS4yNiwtMSwyNjQzOTU5MjAuMCwwLjM5LDMwLjYzLDI4Ljk4LDAuOTksMC40LC0xLDg1NjMsMTI5NzAsMTU0MSw1ODkxLDAsMCwwLDk3MzcsMCwwLDAsMCwwLDAsMCw0LDI3MzAsMjY5NCwyNiw0OTgsNDY0MywwLDUxNDEsOTAuOTA5MDkwOTA5MDkwOSwxMSwxMCxBUkVBIDAsNCw1MCwxLDEwMCwxMDAsMC40NSwwLjAsc2t5MTMwX2ZkX3NjX2hkLDQsNApkaWZmIC0tZ2l0IGEvc2lnbm9mZi91c2VyX3Byb2plY3Rfd3JhcHBlci9PUEVOTEFORV9WRVJTSU9OIGIvc2lnbm9mZi91c2VyX3Byb2plY3Rfd3JhcHBlci9PUEVOTEFORV9WRVJTSU9OCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwYzc2NjQKLS0tIC9kZXYvbnVsbAorKysgYi9zaWdub2ZmL3VzZXJfcHJvamVjdF93cmFwcGVyL09QRU5MQU5FX1ZFUlNJT04KQEAgLTAsMCArMSBAQAorb3BlbmxhbmUgTi9BCmRpZmYgLS1naXQgYS9zaWdub2ZmL3VzZXJfcHJvamVjdF93cmFwcGVyL1BES19TT1VSQ0VTIGIvc2lnbm9mZi91c2VyX3Byb2plY3Rfd3JhcHBlci9QREtfU09VUkNFUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmU3ZGMxCi0tLSAvZGV2L251bGwKKysrIGIvc2lnbm9mZi91c2VyX3Byb2plY3Rfd3JhcHBlci9QREtfU09VUkNFUwpAQCAtMCwwICsxLDMgQEAKK29wZW5sYW5lIDcwOTIzZDdmYmQ4OTk4YzhkYTg3ZDkwNWNmOWU2OWJmZmMxMzcwOWYKK3NreXdhdGVyLXBkayBjMDk0YjZlODNhNGY5Mjk4ZTQ3ZjY5NmVjNWE3ZmQ1MzUzNWVjNWViCitvcGVuX3Bka3MgNDc2Zjc0MjhmN2Y2ODZkZTUxYTUxNjRjNzAyNjI5YTliOWYyZGE0NgpkaWZmIC0tZ2l0IGEvc2lnbm9mZi91c2VyX3Byb2plY3Rfd3JhcHBlci9maW5hbF9zdW1tYXJ5X3JlcG9ydC5jc3YgYi9zaWdub2ZmL3VzZXJfcHJvamVjdF93cmFwcGVyL2ZpbmFsX3N1bW1hcnlfcmVwb3J0LmNzdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzMxZTZiCi0tLSAvZGV2L251bGwKKysrIGIvc2lnbm9mZi91c2VyX3Byb2plY3Rfd3JhcHBlci9maW5hbF9zdW1tYXJ5X3JlcG9ydC5jc3YKQEAgLTAsMCArMSwyIEBACissZGVzaWduLGRlc2lnbl9uYW1lLGNvbmZpZyxmbG93X3N0YXR1cyx0b3RhbF9ydW50aW1lLHJvdXRlZF9ydW50aW1lLChDZWxsL21tXjIpL0NvcmVfVXRpbCxESUVBUkVBX21tXjIsQ2VsbFBlcl9tbV4yLE9wZW5EUF9VdGlsLFBlYWtfTWVtb3J5X1VzYWdlX01CLGNlbGxfY291bnQsdHJpdG9uUm91dGVfdmlvbGF0aW9ucyxTaG9ydF92aW9sYXRpb25zLE1ldFNwY192aW9sYXRpb25zLE9mZkdyaWRfdmlvbGF0aW9ucyxNaW5Ib2xlX3Zpb2xhdGlvbnMsT3RoZXJfdmlvbGF0aW9ucyxNYWdpY192aW9sYXRpb25zLGFudGVubmFfdmlvbGF0aW9ucyxsdnNfdG90YWxfZXJyb3JzLGN2Y190b3RhbF9lcnJvcnMsa2xheW91dF92aW9sYXRpb25zLHdpcmVfbGVuZ3RoLHZpYXMsd25zLHBsX3ducyxvcHRpbWl6ZWRfd25zLGZhc3Ryb3V0ZV93bnMsc3BlZl93bnMsdG5zLHBsX3RucyxvcHRpbWl6ZWRfdG5zLGZhc3Ryb3V0ZV90bnMsc3BlZl90bnMsSFBXTCxyb3V0aW5nX2xheWVyMV9wY3Qscm91dGluZ19sYXllcjJfcGN0LHJvdXRpbmdfbGF5ZXIzX3BjdCxyb3V0aW5nX2xheWVyNF9wY3Qscm91dGluZ19sYXllcjVfcGN0LHJvdXRpbmdfbGF5ZXI2X3BjdCx3aXJlc19jb3VudCx3aXJlX2JpdHMscHVibGljX3dpcmVzX2NvdW50LHB1YmxpY193aXJlX2JpdHMsbWVtb3JpZXNfY291bnQsbWVtb3J5X2JpdHMscHJvY2Vzc2VzX2NvdW50LGNlbGxzX3ByZV9hYmMsQU5ELERGRixOQU5ELE5PUixPUixYT1IsWE5PUixNVVgsaW5wdXRzLG91dHB1dHMsbGV2ZWwsRW5kQ2FwcyxUYXBDZWxscyxEaW9kZXMsVG90YWxfUGh5c2ljYWxfQ2VsbHMsc3VnZ2VzdGVkX2Nsb2NrX2ZyZXF1ZW5jeSxzdWdnZXN0ZWRfY2xvY2tfcGVyaW9kLENMT0NLX1BFUklPRCxTWU5USF9TVFJBVEVHWSxTWU5USF9NQVhfRkFOT1VULEZQX0NPUkVfVVRJTCxGUF9BU1BFQ1RfUkFUSU8sRlBfUEROX1ZQSVRDSCxGUF9QRE5fSFBJVENILFBMX1RBUkdFVF9ERU5TSVRZLEdMQl9SVF9BREpVU1RNRU5ULFNURF9DRUxMX0xJQlJBUlksQ0VMTF9QQUQsRElPREVfSU5TRVJUSU9OX1NUUkFURUdZCiswLC9wcm9qZWN0L29wZW5sYW5lL3VzZXJfcHJvamVjdF93cmFwcGVyLHVzZXJfcHJvamVjdF93cmFwcGVyLHVzZXJfcHJvamVjdF93cmFwcGVyLGZsb3cgY29tcGxldGVkLDBoNDltNTZzMG1zLDBoM201NHMwbXMsLTIuMCwtMSwtMSwtMSw1NTYuOTYsMTQsMCwwLDAsMCwwLDAsLTEsMCwxLC0xLC0xLDE0MTc4NzIsOTAxOCwwLjAsLTEsLTEsMC4wLDAuMCwwLjAsLTEsLTEsMC4wLDAuMCwtMSwwLjAsNi42Nyw2LjcxLDEuMDUsMS4zMywtMSwzMTMsMjg3NywzMTMsMjg3NywwLDAsMCwxNCwwLDAsMCwwLDAsMCwwLDAsLTEsLTEsLTEsMCwwLDAsMCwxMDAuMCwxMC4wLDEwLEFSRUEgMCw1LDUwLDEsODAsMTIwLDAuNTUsMC4zLHNreTEzMF9mZF9zY19oZCw0LDAKZGlmZiAtLWdpdCBhL3NpZ25vZmYvd2JfaG9zdC9PUEVOTEFORV9WRVJTSU9OIGIvc2lnbm9mZi93Yl9ob3N0L09QRU5MQU5FX1ZFUlNJT04KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBjNzY2NAotLS0gL2Rldi9udWxsCisrKyBiL3NpZ25vZmYvd2JfaG9zdC9PUEVOTEFORV9WRVJTSU9OCkBAIC0wLDAgKzEgQEAKK29wZW5sYW5lIE4vQQpkaWZmIC0tZ2l0IGEvc2lnbm9mZi93Yl9ob3N0L1BES19TT1VSQ0VTIGIvc2lnbm9mZi93Yl9ob3N0L1BES19TT1VSQ0VTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhMzY4NGEKLS0tIC9kZXYvbnVsbAorKysgYi9zaWdub2ZmL3diX2hvc3QvUERLX1NPVVJDRVMKQEAgLTAsMCArMSw2IEBACistbmUgb3BlbmxhbmUgCis4ZDY4NmMwODFjMmM5YWVmYTE2ZGJiZDhjY2Y1YmM4ZjRkY2FiYzRiCistbmUgc2t5d2F0ZXItcGRrIAorYzA5NGI2ZTgzYTRmOTI5OGU0N2Y2OTZlYzVhN2ZkNTM1MzVlYzVlYgorLW5lIG9wZW5fcGRrcyAKKzE0ZGIzMmFhOGJhMzMwZTg4NjMyZmYzYWQyZmY1MmY0ZjRkYWUxYWQKZGlmZiAtLWdpdCBhL3NpZ25vZmYvd2JfaG9zdC9maW5hbF9zdW1tYXJ5X3JlcG9ydC5jc3YgYi9zaWdub2ZmL3diX2hvc3QvZmluYWxfc3VtbWFyeV9yZXBvcnQuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiZTE3ODcKLS0tIC9kZXYvbnVsbAorKysgYi9zaWdub2ZmL3diX2hvc3QvZmluYWxfc3VtbWFyeV9yZXBvcnQuY3N2CkBAIC0wLDAgKzEsMiBAQAorLGRlc2lnbixkZXNpZ25fbmFtZSxjb25maWcsZmxvd19zdGF0dXMsdG90YWxfcnVudGltZSxyb3V0ZWRfcnVudGltZSwoQ2VsbC9tbV4yKS9Db3JlX1V0aWwsRElFQVJFQV9tbV4yLENlbGxQZXJfbW1eMixPcGVuRFBfVXRpbCxQZWFrX01lbW9yeV9Vc2FnZV9NQixjZWxsX2NvdW50LHRyaXRvblJvdXRlX3Zpb2xhdGlvbnMsU2hvcnRfdmlvbGF0aW9ucyxNZXRTcGNfdmlvbGF0aW9ucyxPZmZHcmlkX3Zpb2xhdGlvbnMsTWluSG9sZV92aW9sYXRpb25zLE90aGVyX3Zpb2xhdGlvbnMsTWFnaWNfdmlvbGF0aW9ucyxhbnRlbm5hX3Zpb2xhdGlvbnMsbHZzX3RvdGFsX2Vycm9ycyxjdmNfdG90YWxfZXJyb3JzLGtsYXlvdXRfdmlvbGF0aW9ucyx3aXJlX2xlbmd0aCx2aWFzLHducyxwbF93bnMsb3B0aW1pemVkX3ducyxmYXN0cm91dGVfd25zLHNwZWZfd25zLHRucyxwbF90bnMsb3B0aW1pemVkX3RucyxmYXN0cm91dGVfdG5zLHNwZWZfdG5zLEhQV0wscm91dGluZ19sYXllcjFfcGN0LHJvdXRpbmdfbGF5ZXIyX3BjdCxyb3V0aW5nX2xheWVyM19wY3Qscm91dGluZ19sYXllcjRfcGN0LHJvdXRpbmdfbGF5ZXI1X3BjdCxyb3V0aW5nX2xheWVyNl9wY3Qsd2lyZXNfY291bnQsd2lyZV9iaXRzLHB1YmxpY193aXJlc19jb3VudCxwdWJsaWNfd2lyZV9iaXRzLG1lbW9yaWVzX2NvdW50LG1lbW9yeV9iaXRzLHByb2Nlc3Nlc19jb3VudCxjZWxsc19wcmVfYWJjLEFORCxERkYsTkFORCxOT1IsT1IsWE9SLFhOT1IsTVVYLGlucHV0cyxvdXRwdXRzLGxldmVsLEVuZENhcHMsVGFwQ2VsbHMsRGlvZGVzLFRvdGFsX1BoeXNpY2FsX0NlbGxzLHN1Z2dlc3RlZF9jbG9ja19mcmVxdWVuY3ksc3VnZ2VzdGVkX2Nsb2NrX3BlcmlvZCxDTE9DS19QRVJJT0QsU1lOVEhfU1RSQVRFR1ksU1lOVEhfTUFYX0ZBTk9VVCxGUF9DT1JFX1VUSUwsRlBfQVNQRUNUX1JBVElPLEZQX1BETl9WUElUQ0gsRlBfUEROX0hQSVRDSCxQTF9UQVJHRVRfREVOU0lUWSxHTEJfUlRfQURKVVNUTUVOVCxTVERfQ0VMTF9MSUJSQVJZLENFTExfUEFELERJT0RFX0lOU0VSVElPTl9TVFJBVEVHWQorMCwvcHJvamVjdC9vcGVubGFuZS93Yl9ob3N0LHdiX2hvc3Qsd2JfaG9zdCxmbG93X2NvbXBsZXRlZCwwaDEwbTIzcywtMSw1MTk2Mi41LDAuMTYsMjU5ODEuMjUsMzQuNjksNjQ1LjMsNDE1NywwLDAsMCwwLDAsMCwwLDUsMCwwLC0xLDMyOTUzMSw0Nzc1MiwwLjAsLTAuMjMsLTEsMC4wLC0xLDAuMCwtMjYuMzYsLTEsMC4wLC0xLDI2NTAxNzYxOS4wLDQuNjMsNjEuNDksMTkuMjYsMjkuMjEsMC4wOSwtMSwzNDkwLDYxNjMsMTAyNCwzNTUzLDAsMCwwLDM3OTMsMCwwLDAsMCwwLDAsMCw0LDEyMzMsMTIwNSwxNywxMzAsMjA0MywwLDIxNzMsOTAuOTA5MDkwOTA5MDkwOSwxMSwxMCxBUkVBIDAsNCw1MCwxLDEwMCwxMDAsMC4zNSwwLjAsc2t5MTMwX2ZkX3NjX2hkLDQsNApkaWZmIC0tZ2l0IGEvc2lnbm9mZi93Yl9pbnRlcmNvbm5lY3QvT1BFTkxBTkVfVkVSU0lPTiBiL3NpZ25vZmYvd2JfaW50ZXJjb25uZWN0L09QRU5MQU5FX1ZFUlNJT04KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBjNzY2NAotLS0gL2Rldi9udWxsCisrKyBiL3NpZ25vZmYvd2JfaW50ZXJjb25uZWN0L09QRU5MQU5FX1ZFUlNJT04KQEAgLTAsMCArMSBAQAorb3BlbmxhbmUgTi9BCmRpZmYgLS1naXQgYS9zaWdub2ZmL3diX2ludGVyY29ubmVjdC9QREtfU09VUkNFUyBiL3NpZ25vZmYvd2JfaW50ZXJjb25uZWN0L1BES19TT1VSQ0VTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhMzY4NGEKLS0tIC9kZXYvbnVsbAorKysgYi9zaWdub2ZmL3diX2ludGVyY29ubmVjdC9QREtfU09VUkNFUwpAQCAtMCwwICsxLDYgQEAKKy1uZSBvcGVubGFuZSAKKzhkNjg2YzA4MWMyYzlhZWZhMTZkYmJkOGNjZjViYzhmNGRjYWJjNGIKKy1uZSBza3l3YXRlci1wZGsgCitjMDk0YjZlODNhNGY5Mjk4ZTQ3ZjY5NmVjNWE3ZmQ1MzUzNWVjNWViCistbmUgb3Blbl9wZGtzIAorMTRkYjMyYWE4YmEzMzBlODg2MzJmZjNhZDJmZjUyZjRmNGRhZTFhZApkaWZmIC0tZ2l0IGEvc2lnbm9mZi93Yl9pbnRlcmNvbm5lY3QvZmluYWxfc3VtbWFyeV9yZXBvcnQuY3N2IGIvc2lnbm9mZi93Yl9pbnRlcmNvbm5lY3QvZmluYWxfc3VtbWFyeV9yZXBvcnQuY3N2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmMmY2ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9zaWdub2ZmL3diX2ludGVyY29ubmVjdC9maW5hbF9zdW1tYXJ5X3JlcG9ydC5jc3YKQEAgLTAsMCArMSwyIEBACissZGVzaWduLGRlc2lnbl9uYW1lLGNvbmZpZyxmbG93X3N0YXR1cyx0b3RhbF9ydW50aW1lLHJvdXRlZF9ydW50aW1lLChDZWxsL21tXjIpL0NvcmVfVXRpbCxESUVBUkVBX21tXjIsQ2VsbFBlcl9tbV4yLE9wZW5EUF9VdGlsLFBlYWtfTWVtb3J5X1VzYWdlX01CLGNlbGxfY291bnQsdHJpdG9uUm91dGVfdmlvbGF0aW9ucyxTaG9ydF92aW9sYXRpb25zLE1ldFNwY192aW9sYXRpb25zLE9mZkdyaWRfdmlvbGF0aW9ucyxNaW5Ib2xlX3Zpb2xhdGlvbnMsT3RoZXJfdmlvbGF0aW9ucyxNYWdpY192aW9sYXRpb25zLGFudGVubmFfdmlvbGF0aW9ucyxsdnNfdG90YWxfZXJyb3JzLGN2Y190b3RhbF9lcnJvcnMsa2xheW91dF92aW9sYXRpb25zLHdpcmVfbGVuZ3RoLHZpYXMsd25zLHBsX3ducyxvcHRpbWl6ZWRfd25zLGZhc3Ryb3V0ZV93bnMsc3BlZl93bnMsdG5zLHBsX3RucyxvcHRpbWl6ZWRfdG5zLGZhc3Ryb3V0ZV90bnMsc3BlZl90bnMsSFBXTCxyb3V0aW5nX2xheWVyMV9wY3Qscm91dGluZ19sYXllcjJfcGN0LHJvdXRpbmdfbGF5ZXIzX3BjdCxyb3V0aW5nX2xheWVyNF9wY3Qscm91dGluZ19sYXllcjVfcGN0LHJvdXRpbmdfbGF5ZXI2X3BjdCx3aXJlc19jb3VudCx3aXJlX2JpdHMscHVibGljX3dpcmVzX2NvdW50LHB1YmxpY193aXJlX2JpdHMsbWVtb3JpZXNfY291bnQsbWVtb3J5X2JpdHMscHJvY2Vzc2VzX2NvdW50LGNlbGxzX3ByZV9hYmMsQU5ELERGRixOQU5ELE5PUixPUixYT1IsWE5PUixNVVgsaW5wdXRzLG91dHB1dHMsbGV2ZWwsRW5kQ2FwcyxUYXBDZWxscyxEaW9kZXMsVG90YWxfUGh5c2ljYWxfQ2VsbHMsc3VnZ2VzdGVkX2Nsb2NrX2ZyZXF1ZW5jeSxzdWdnZXN0ZWRfY2xvY2tfcGVyaW9kLENMT0NLX1BFUklPRCxTWU5USF9TVFJBVEVHWSxTWU5USF9NQVhfRkFOT1VULEZQX0NPUkVfVVRJTCxGUF9BU1BFQ1RfUkFUSU8sRlBfUEROX1ZQSVRDSCxGUF9QRE5fSFBJVENILFBMX1RBUkdFVF9ERU5TSVRZLEdMQl9SVF9BREpVU1RNRU5ULFNURF9DRUxMX0xJQlJBUlksQ0VMTF9QQUQsRElPREVfSU5TRVJUSU9OX1NUUkFURUdZCiswLC9wcm9qZWN0L29wZW5sYW5lL3diX2ludGVyY29ubmVjdCx3Yl9pbnRlcmNvbm5lY3Qsd2JfaW50ZXJjb25uZWN0LGZsb3dfY29tcGxldGVkLDBoMThtMjRzLC0xLDE5ODUyLjE3MzkxMzA0MzQ3NiwwLjQ2LDk5MjYuMDg2OTU2NTIxNzM4LDkuMjcsNzI2Ljg4LDQ1NjYsMCwtMSwtMSwtMSwtMSwwLC0xLDEsMCwtMSwtMSw4NDgxOTYsNTE1NjcsLTAuOSwtOS4zLC0xLC0xLjM0LC0xLC05OS42OSwtMjUwOC40OCwtMSwtMTczLjcyLC0xLDc0NTA2MzYwOC4wLDAuMCwxNS45Nyw1Mi41NCwyLjA3LDQyLjI0LDAuMCwxNzc2LDUyOTIsMjUyLDM3NjcsMCwwLDAsMjY4MiwwLDAsMCwwLDAsMCwwLDQsMTE5MiwxMDc5LDE4LDE2NzQsNTg3MywwLDc1NDcsOTAuOTA5MDkwOTA5MDkwOSwxMSwxMCxBUkVBIDAsMiw1MCwxLDE1My42LDE1My4xOCwwLjMsMCxza3kxMzBfZmRfc2NfaGQsNCw0CmRpZmYgLS1naXQgYS9zaWdub2ZmL3lpZml2ZS9PUEVOTEFORV9WRVJTSU9OIGIvc2lnbm9mZi95aWZpdmUvT1BFTkxBTkVfVkVSU0lPTgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGM3NjY0Ci0tLSAvZGV2L251bGwKKysrIGIvc2lnbm9mZi95aWZpdmUvT1BFTkxBTkVfVkVSU0lPTgpAQCAtMCwwICsxIEBACitvcGVubGFuZSBOL0EKZGlmZiAtLWdpdCBhL3NpZ25vZmYveWlmaXZlL1BES19TT1VSQ0VTIGIvc2lnbm9mZi95aWZpdmUvUERLX1NPVVJDRVMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2EzNjg0YQotLS0gL2Rldi9udWxsCisrKyBiL3NpZ25vZmYveWlmaXZlL1BES19TT1VSQ0VTCkBAIC0wLDAgKzEsNiBAQAorLW5lIG9wZW5sYW5lIAorOGQ2ODZjMDgxYzJjOWFlZmExNmRiYmQ4Y2NmNWJjOGY0ZGNhYmM0YgorLW5lIHNreXdhdGVyLXBkayAKK2MwOTRiNmU4M2E0ZjkyOThlNDdmNjk2ZWM1YTdmZDUzNTM1ZWM1ZWIKKy1uZSBvcGVuX3Bka3MgCisxNGRiMzJhYThiYTMzMGU4ODYzMmZmM2FkMmZmNTJmNGY0ZGFlMWFkCmRpZmYgLS1naXQgYS9zaWdub2ZmL3lpZml2ZS9maW5hbF9zdW1tYXJ5X3JlcG9ydC5jc3YgYi9zaWdub2ZmL3lpZml2ZS9maW5hbF9zdW1tYXJ5X3JlcG9ydC5jc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQ2ODk4NAotLS0gL2Rldi9udWxsCisrKyBiL3NpZ25vZmYveWlmaXZlL2ZpbmFsX3N1bW1hcnlfcmVwb3J0LmNzdgpAQCAtMCwwICsxLDIgQEAKKyxkZXNpZ24sZGVzaWduX25hbWUsY29uZmlnLGZsb3dfc3RhdHVzLHRvdGFsX3J1bnRpbWUscm91dGVkX3J1bnRpbWUsKENlbGwvbW1eMikvQ29yZV9VdGlsLERJRUFSRUFfbW1eMixDZWxsUGVyX21tXjIsT3BlbkRQX1V0aWwsUGVha19NZW1vcnlfVXNhZ2VfTUIsY2VsbF9jb3VudCx0cml0b25Sb3V0ZV92aW9sYXRpb25zLFNob3J0X3Zpb2xhdGlvbnMsTWV0U3BjX3Zpb2xhdGlvbnMsT2ZmR3JpZF92aW9sYXRpb25zLE1pbkhvbGVfdmlvbGF0aW9ucyxPdGhlcl92aW9sYXRpb25zLE1hZ2ljX3Zpb2xhdGlvbnMsYW50ZW5uYV92aW9sYXRpb25zLGx2c190b3RhbF9lcnJvcnMsY3ZjX3RvdGFsX2Vycm9ycyxrbGF5b3V0X3Zpb2xhdGlvbnMsd2lyZV9sZW5ndGgsdmlhcyx3bnMscGxfd25zLG9wdGltaXplZF93bnMsZmFzdHJvdXRlX3ducyxzcGVmX3ducyx0bnMscGxfdG5zLG9wdGltaXplZF90bnMsZmFzdHJvdXRlX3RucyxzcGVmX3RucyxIUFdMLHJvdXRpbmdfbGF5ZXIxX3BjdCxyb3V0aW5nX2xheWVyMl9wY3Qscm91dGluZ19sYXllcjNfcGN0LHJvdXRpbmdfbGF5ZXI0X3BjdCxyb3V0aW5nX2xheWVyNV9wY3Qscm91dGluZ19sYXllcjZfcGN0LHdpcmVzX2NvdW50LHdpcmVfYml0cyxwdWJsaWNfd2lyZXNfY291bnQscHVibGljX3dpcmVfYml0cyxtZW1vcmllc19jb3VudCxtZW1vcnlfYml0cyxwcm9jZXNzZXNfY291bnQsY2VsbHNfcHJlX2FiYyxBTkQsREZGLE5BTkQsTk9SLE9SLFhPUixYTk9SLE1VWCxpbnB1dHMsb3V0cHV0cyxsZXZlbCxFbmRDYXBzLFRhcENlbGxzLERpb2RlcyxUb3RhbF9QaHlzaWNhbF9DZWxscyxzdWdnZXN0ZWRfY2xvY2tfZnJlcXVlbmN5LHN1Z2dlc3RlZF9jbG9ja19wZXJpb2QsQ0xPQ0tfUEVSSU9ELFNZTlRIX1NUUkFURUdZLFNZTlRIX01BWF9GQU5PVVQsRlBfQ09SRV9VVElMLEZQX0FTUEVDVF9SQVRJTyxGUF9QRE5fVlBJVENILEZQX1BETl9IUElUQ0gsUExfVEFSR0VUX0RFTlNJVFksR0xCX1JUX0FESlVTVE1FTlQsU1REX0NFTExfTElCUkFSWSxDRUxMX1BBRCxESU9ERV9JTlNFUlRJT05fU1RSQVRFR1kKKzAsL3Byb2plY3Qvb3BlbmxhbmUveWlmaXZlLHljcjFfdG9wX3diLHlpZml2ZSxmbG93X2NvbXBsZXRlZCwxaDE1bTI5cywtMSw2MDQzMS41OTA2NTYyODQ3NywxLjEyMzc1LDMwMjE1Ljc5NTMyODE0MjM4MywzNC4yMiwxNTc2LjQyLDMzOTU1LDAsLTEsLTEsLTEsLTEsMCwtMSwxLDAsLTEsLTEsMjYyNzgwNiwzOTIyMzgsLTE0Ljg1LC00My4zLC0xLC0xLjQyLC0xLC0zMjUwNy4xNywtMTY4MzYuNjksLTEsLTEwLjM1LC0xLDE5MjQ2MzIzNzIuMCwxMS4yLDQyLjcsNTkuNTQsNi44OCwxMS4zMSwwLjAsMjg2MzEsNDc3NzMsMTc0NCwyMDQ3OSwwLDAsMCwzNDAyOSwwLDAsMCwwLDAsMCwwLDQsODMxNyw4NjkwLDU2LDExMjIsMTU0ODIsMCwxNjYwNCw5MC45MDkwOTA5MDkwOTA5LDExLDEwLEFSRUEgMCw0LDUwLDEsMTAwLDEwMCwwLjM1LDAuMCxza3kxMzBfZmRfc2NfaGQsNCw0CmRpZmYgLS1naXQgYS9zdGEvTWFrZWZpbGUgYi9zdGEvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM1MjI4ZQotLS0gL2Rldi9udWxsCisrKyBiL3N0YS9NYWtlZmlsZQpAQCAtMCwwICsxLDUxIEBACisjIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjAgRWZhYmxlc3MgQ29ycG9yYXRpb24KKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisKK0JMT0NLUyA9IHNhcl9hZGMgd2JfaW50ZXJjb25uZWN0IHN5bnRhY29yZSBxc3BpbSB1YXJ0X2kyY21fdXNiX3NwaSBwaW5tdXggd2JfaG9zdAorREVGID0gJChmb3JlYWNoIGJsb2NrLCQoQkxPQ0tTKSwgLi4vZGVmLyQoYmxvY2spLmRlZikKK0NMRUFOID0gJChmb3JlYWNoIGJsb2NrLCQoQkxPQ0tTKSwgY2xlYW4tJChibG9jaykpCisKK09QRU5MQU5FX1RBRyA9IG1wdzMKK09QRU5MQU5FX0lNQUdFX05BTUUgPSBkaW5lc2hhbm5heXlhL29wZW5sYW5lOiQoT1BFTkxBTkVfVEFHKQorT1BFTkxBTkVfTkVUTElTVF9DT01NQU5EID0gImNkIC9wcm9qZWN0L3N0YSAmJiBvcGVucm9hZCAtZXhpdCBzY3JpcHRzL29yX3dyaXRlX3Zlcmlsb2cudGNsIHwgdGVlIGxvZ3MvJEAubG9nIgorT1BFTkxBTkVfU1RBX0NPTU1BTkQgPSAiY2QgL3Byb2plY3Qvc3RhICYmIHN0YSBzY3JpcHRzL3N0YS50Y2wgfCB0ZWUgbG9ncy9zdGEubG9nIgorCithbGw6ICQoQkxPQ0tTKSBydW5fc3RhCisKKyQoREVGKSA6CisJQGVjaG8gIk1pc3NpbmcgJEAuIFBsZWFzZSBjcmVhdGUgYSBkZWYgZm9yIHRoYXQgZGVzaWduIgorCUBleGl0IDEKKworJChCTE9DS1MpIDogJSA6IC4uL2RlZi8lLmRlZiAgY3JlYXRlIAorCWRvY2tlciBydW4gLWl0ICAtdiAkKFBXRCkvLi46L3Byb2plY3QgLWUgREVTSUdOX05BTUU9JEAgLXUgJChzaGVsbCBpZCAtdSAkKFVTRVIpKTokKHNoZWxsIGlkIC1nICQoVVNFUikpICQoT1BFTkxBTkVfSU1BR0VfTkFNRSkgc2ggLWMgJChPUEVOTEFORV9ORVRMSVNUX0NPTU1BTkQpCisKK3J1bl9zdGE6ICQoQkxPQ0tTKQorCSNzdGEgaW5zaWRlIHRoZSBkb2NrZXIgaXMgY3Jhc2hpbmcgd2l0aCBzZWdtZW50YXRpb24gZmF1bHQsIHNvIGFyZSBydW5uaW5nIHN0YSBvdXRzaWRlIHRoZSBkb2NrZXIKKwkjZG9ja2VyIHJ1biAtaXQgIC12ICQoUFdEKS8uLjovcHJvamVjdCAtZSBERVNJR05fTkFNRT0kQCAtdSAkKHNoZWxsIGlkIC11ICQoVVNFUikpOiQoc2hlbGwgaWQgLWcgJChVU0VSKSkgJChPUEVOTEFORV9JTUFHRV9OQU1FKSBzaCAtYyAkKE9QRU5MQU5FX1NUQV9DT01NQU5EKQorCXN0YSBzY3JpcHRzL3N0YS50Y2wgfCB0ZWUgbG9ncy9zdGEubG9nCisKK2NyZWF0ZTogY2xlYW4KKwlAZWNobyAiY3JlYXRlIHRlbXAgZGlyZWN0b3J5IDopIgorCW1rZGlyIC1wIG5ldGxpc3QKKwlta2RpciAtcCBsb2dzCisJbWtkaXIgLXAgcmVwb3J0cworCitjbGVhbjoKKwlAZWNobyAiY2xlYW4gZXZlcnl0aGluZyA6KSIKKwlybSAtcmYgbmV0bGlzdAorCXJtIC1yZiBsb2dzCisJcm0gLXJmIHJlcG9ydHMKKwpkaWZmIC0tZ2l0IGEvc3RhL2Jhc2Uuc2RjIGIvc3RhL2Jhc2Uuc2RjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyNWRhMWIKLS0tIC9kZXYvbnVsbAorKysgYi9zdGEvYmFzZS5zZGMKQEAgLTAsMCArMSwxMDIyIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENyZWF0ZWQgYnkgd3JpdGVfc2RjCisjIFRodSBOb3YgMTEgMDc6NTA6NTEgMjAyMQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworY3VycmVudF9kZXNpZ24gdXNlcl9wcm9qZWN0X3dyYXBwZXIKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgVGltaW5nIENvbnN0cmFpbnRzCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitjcmVhdGVfY2xvY2sgLW5hbWUgdXNlcl9jbG9jazIgLXBlcmlvZCAxMDAuMDAwMCBbZ2V0X3BvcnRzIHt1c2VyX2Nsb2NrMn1dCitjcmVhdGVfY2xvY2sgLW5hbWUgd2JtX2Nsa19pIC1wZXJpb2QgMTAuMDAwMCBbZ2V0X3BvcnRzIHt3Yl9jbGtfaX1dCitzZXRfcHJvcGFnYXRlZF9jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0KK2NyZWF0ZV9jbG9jayAtbmFtZSB3YnNfY2xrX2kgLXBlcmlvZCAxMC4wMDAwICBbZ2V0X3BpbnMge3Vfd2JfaG9zdC93YnNfY2xrX291dH1dCitjcmVhdGVfY2xvY2sgLW5hbWUgY3B1X2NsayAtcGVyaW9kIDIwLjAwMDAgICAgW2dldF9waW5zIHt1X3diX2hvc3QvY3B1X2Nsa31dCitjcmVhdGVfY2xvY2sgLW5hbWUgcnRjX2NsayAtcGVyaW9kIDUwLjAwMDAgICAgW2dldF9waW5zIHt1X3diX2hvc3QvcnRjX2Nsa31dCitjcmVhdGVfY2xvY2sgLW5hbWUgdXNiX2NsayAtcGVyaW9kIDIwLjAwMDAgICAgW2dldF9waW5zIHt1X3diX2hvc3QvdXNiX2Nsa31dCitjcmVhdGVfY2xvY2sgLW5hbWUgbGluZV9jbGsgLXBlcmlvZCAxMDAuMDAwMCAgW2dldF9waW5zIHt1X3VhcnRfaTJjX3VzYl9zcGkvdV91YXJ0X2NvcmUudV9saW5lY2xrX2J1Zi9YfV0KKworc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1yaXNlX2Zyb20gW2dldF9jbG9ja3Mge3VzZXJfY2xvY2syfV0gLXJpc2VfdG8gW2dldF9jbG9ja3Mge3VzZXJfY2xvY2syfV0gIC1ob2xkIDAuMTAwMAorc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1yaXNlX2Zyb20gW2dldF9jbG9ja3Mge3VzZXJfY2xvY2syfV0gLXJpc2VfdG8gW2dldF9jbG9ja3Mge3VzZXJfY2xvY2syfV0gIC1zZXR1cCAwLjIwMDAKK3NldF9jbG9ja191bmNlcnRhaW50eSAtcmlzZV9mcm9tIFtnZXRfY2xvY2tzIHt1c2VyX2Nsb2NrMn1dIC1mYWxsX3RvIFtnZXRfY2xvY2tzIHt1c2VyX2Nsb2NrMn1dICAtaG9sZCAwLjEwMDAKK3NldF9jbG9ja191bmNlcnRhaW50eSAtcmlzZV9mcm9tIFtnZXRfY2xvY2tzIHt1c2VyX2Nsb2NrMn1dIC1mYWxsX3RvIFtnZXRfY2xvY2tzIHt1c2VyX2Nsb2NrMn1dICAtc2V0dXAgMC4yMDAwCitzZXRfY2xvY2tfdW5jZXJ0YWludHkgLWZhbGxfZnJvbSBbZ2V0X2Nsb2NrcyB7dXNlcl9jbG9jazJ9XSAtcmlzZV90byBbZ2V0X2Nsb2NrcyB7dXNlcl9jbG9jazJ9XSAgLWhvbGQgMC4xMDAwCitzZXRfY2xvY2tfdW5jZXJ0YWludHkgLWZhbGxfZnJvbSBbZ2V0X2Nsb2NrcyB7dXNlcl9jbG9jazJ9XSAtcmlzZV90byBbZ2V0X2Nsb2NrcyB7dXNlcl9jbG9jazJ9XSAgLXNldHVwIDAuMjAwMAorc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1mYWxsX2Zyb20gW2dldF9jbG9ja3Mge3VzZXJfY2xvY2syfV0gLWZhbGxfdG8gW2dldF9jbG9ja3Mge3VzZXJfY2xvY2syfV0gIC1ob2xkIDAuMTAwMAorc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1mYWxsX2Zyb20gW2dldF9jbG9ja3Mge3VzZXJfY2xvY2syfV0gLWZhbGxfdG8gW2dldF9jbG9ja3Mge3VzZXJfY2xvY2syfV0gIC1zZXR1cCAwLjIwMDAKKworc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1yaXNlX2Zyb20gW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1yaXNlX3RvIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAgLWhvbGQgMC4xMDAwCitzZXRfY2xvY2tfdW5jZXJ0YWludHkgLXJpc2VfZnJvbSBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLXJpc2VfdG8gW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dICAtc2V0dXAgMC4yMDAwCitzZXRfY2xvY2tfdW5jZXJ0YWludHkgLXJpc2VfZnJvbSBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWZhbGxfdG8gW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dICAtaG9sZCAwLjEwMDAKK3NldF9jbG9ja191bmNlcnRhaW50eSAtcmlzZV9mcm9tIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtZmFsbF90byBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gIC1zZXR1cCAwLjIwMDAKK3NldF9jbG9ja191bmNlcnRhaW50eSAtZmFsbF9mcm9tIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtcmlzZV90byBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gIC1ob2xkIDAuMTAwMAorc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1mYWxsX2Zyb20gW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1yaXNlX3RvIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAgLXNldHVwIDAuMjAwMAorc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1mYWxsX2Zyb20gW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1mYWxsX3RvIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAgLWhvbGQgMC4xMDAwCitzZXRfY2xvY2tfdW5jZXJ0YWludHkgLWZhbGxfZnJvbSBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWZhbGxfdG8gW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dICAtc2V0dXAgMC4yMDAwCisKK3NldF9jbG9ja191bmNlcnRhaW50eSAtcmlzZV9mcm9tIFtnZXRfY2xvY2tzIHt3YnNfY2xrX2l9XSAtcmlzZV90byBbZ2V0X2Nsb2NrcyB7d2JzX2Nsa19pfV0gIC1ob2xkIDAuMTAwMAorc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1yaXNlX2Zyb20gW2dldF9jbG9ja3Mge3dic19jbGtfaX1dIC1yaXNlX3RvIFtnZXRfY2xvY2tzIHt3YnNfY2xrX2l9XSAgLXNldHVwIDAuMjAwMAorc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1yaXNlX2Zyb20gW2dldF9jbG9ja3Mge3dic19jbGtfaX1dIC1mYWxsX3RvIFtnZXRfY2xvY2tzIHt3YnNfY2xrX2l9XSAgLWhvbGQgMC4xMDAwCitzZXRfY2xvY2tfdW5jZXJ0YWludHkgLXJpc2VfZnJvbSBbZ2V0X2Nsb2NrcyB7d2JzX2Nsa19pfV0gLWZhbGxfdG8gW2dldF9jbG9ja3Mge3dic19jbGtfaX1dICAtc2V0dXAgMC4yMDAwCitzZXRfY2xvY2tfdW5jZXJ0YWludHkgLWZhbGxfZnJvbSBbZ2V0X2Nsb2NrcyB7d2JzX2Nsa19pfV0gLXJpc2VfdG8gW2dldF9jbG9ja3Mge3dic19jbGtfaX1dICAtaG9sZCAwLjEwMDAKK3NldF9jbG9ja191bmNlcnRhaW50eSAtZmFsbF9mcm9tIFtnZXRfY2xvY2tzIHt3YnNfY2xrX2l9XSAtcmlzZV90byBbZ2V0X2Nsb2NrcyB7d2JzX2Nsa19pfV0gIC1zZXR1cCAwLjIwMDAKK3NldF9jbG9ja191bmNlcnRhaW50eSAtZmFsbF9mcm9tIFtnZXRfY2xvY2tzIHt3YnNfY2xrX2l9XSAtZmFsbF90byBbZ2V0X2Nsb2NrcyB7d2JzX2Nsa19pfV0gIC1ob2xkIDAuMTAwMAorc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1mYWxsX2Zyb20gW2dldF9jbG9ja3Mge3dic19jbGtfaX1dIC1mYWxsX3RvIFtnZXRfY2xvY2tzIHt3YnNfY2xrX2l9XSAgLXNldHVwIDAuMjAwMAorCitzZXRfY2xvY2tfdW5jZXJ0YWludHkgLXJpc2VfZnJvbSBbZ2V0X2Nsb2NrcyB7Y3B1X2Nsa31dIC1yaXNlX3RvIFtnZXRfY2xvY2tzIHtjcHVfY2xrfV0gIC1ob2xkIDAuMTAwMAorc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1yaXNlX2Zyb20gW2dldF9jbG9ja3Mge2NwdV9jbGt9XSAtcmlzZV90byBbZ2V0X2Nsb2NrcyB7Y3B1X2Nsa31dICAtc2V0dXAgMC4yMDAwCitzZXRfY2xvY2tfdW5jZXJ0YWludHkgLXJpc2VfZnJvbSBbZ2V0X2Nsb2NrcyB7Y3B1X2Nsa31dIC1mYWxsX3RvIFtnZXRfY2xvY2tzIHtjcHVfY2xrfV0gIC1ob2xkIDAuMTAwMAorc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1yaXNlX2Zyb20gW2dldF9jbG9ja3Mge2NwdV9jbGt9XSAtZmFsbF90byBbZ2V0X2Nsb2NrcyB7Y3B1X2Nsa31dICAtc2V0dXAgMC4yMDAwCitzZXRfY2xvY2tfdW5jZXJ0YWludHkgLWZhbGxfZnJvbSBbZ2V0X2Nsb2NrcyB7Y3B1X2Nsa31dIC1yaXNlX3RvIFtnZXRfY2xvY2tzIHtjcHVfY2xrfV0gIC1ob2xkIDAuMTAwMAorc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1mYWxsX2Zyb20gW2dldF9jbG9ja3Mge2NwdV9jbGt9XSAtcmlzZV90byBbZ2V0X2Nsb2NrcyB7Y3B1X2Nsa31dICAtc2V0dXAgMC4yMDAwCitzZXRfY2xvY2tfdW5jZXJ0YWludHkgLWZhbGxfZnJvbSBbZ2V0X2Nsb2NrcyB7Y3B1X2Nsa31dIC1mYWxsX3RvIFtnZXRfY2xvY2tzIHtjcHVfY2xrfV0gIC1ob2xkIDAuMTAwMAorc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1mYWxsX2Zyb20gW2dldF9jbG9ja3Mge2NwdV9jbGt9XSAtZmFsbF90byBbZ2V0X2Nsb2NrcyB7Y3B1X2Nsa31dICAtc2V0dXAgMC4yMDAwCisKK3NldF9jbG9ja191bmNlcnRhaW50eSAtcmlzZV9mcm9tIFtnZXRfY2xvY2tzIHt1c2JfY2xrfV0gLXJpc2VfdG8gW2dldF9jbG9ja3Mge3VzYl9jbGt9XSAgLWhvbGQgMC4xMDAwCitzZXRfY2xvY2tfdW5jZXJ0YWludHkgLXJpc2VfZnJvbSBbZ2V0X2Nsb2NrcyB7dXNiX2Nsa31dIC1yaXNlX3RvIFtnZXRfY2xvY2tzIHt1c2JfY2xrfV0gIC1zZXR1cCAwLjIwMDAKK3NldF9jbG9ja191bmNlcnRhaW50eSAtcmlzZV9mcm9tIFtnZXRfY2xvY2tzIHt1c2JfY2xrfV0gLWZhbGxfdG8gW2dldF9jbG9ja3Mge3VzYl9jbGt9XSAgLWhvbGQgMC4xMDAwCitzZXRfY2xvY2tfdW5jZXJ0YWludHkgLXJpc2VfZnJvbSBbZ2V0X2Nsb2NrcyB7dXNiX2Nsa31dIC1mYWxsX3RvIFtnZXRfY2xvY2tzIHt1c2JfY2xrfV0gIC1zZXR1cCAwLjIwMDAKK3NldF9jbG9ja191bmNlcnRhaW50eSAtZmFsbF9mcm9tIFtnZXRfY2xvY2tzIHt1c2JfY2xrfV0gLXJpc2VfdG8gW2dldF9jbG9ja3Mge3VzYl9jbGt9XSAgLWhvbGQgMC4xMDAwCitzZXRfY2xvY2tfdW5jZXJ0YWludHkgLWZhbGxfZnJvbSBbZ2V0X2Nsb2NrcyB7dXNiX2Nsa31dIC1yaXNlX3RvIFtnZXRfY2xvY2tzIHt1c2JfY2xrfV0gIC1zZXR1cCAwLjIwMDAKK3NldF9jbG9ja191bmNlcnRhaW50eSAtZmFsbF9mcm9tIFtnZXRfY2xvY2tzIHt1c2JfY2xrfV0gLWZhbGxfdG8gW2dldF9jbG9ja3Mge3VzYl9jbGt9XSAgLWhvbGQgMC4xMDAwCitzZXRfY2xvY2tfdW5jZXJ0YWludHkgLWZhbGxfZnJvbSBbZ2V0X2Nsb2NrcyB7dXNiX2Nsa31dIC1mYWxsX3RvIFtnZXRfY2xvY2tzIHt1c2JfY2xrfV0gIC1zZXR1cCAwLjIwMDAKKworc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1yaXNlX2Zyb20gW2dldF9jbG9ja3Mge3J0Y19jbGt9XSAtcmlzZV90byBbZ2V0X2Nsb2NrcyB7cnRjX2Nsa31dICAtaG9sZCAwLjEwMDAKK3NldF9jbG9ja191bmNlcnRhaW50eSAtcmlzZV9mcm9tIFtnZXRfY2xvY2tzIHtydGNfY2xrfV0gLXJpc2VfdG8gW2dldF9jbG9ja3Mge3J0Y19jbGt9XSAgLXNldHVwIDAuMjAwMAorc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1yaXNlX2Zyb20gW2dldF9jbG9ja3Mge3J0Y19jbGt9XSAtZmFsbF90byBbZ2V0X2Nsb2NrcyB7cnRjX2Nsa31dICAtaG9sZCAwLjEwMDAKK3NldF9jbG9ja191bmNlcnRhaW50eSAtcmlzZV9mcm9tIFtnZXRfY2xvY2tzIHtydGNfY2xrfV0gLWZhbGxfdG8gW2dldF9jbG9ja3Mge3J0Y19jbGt9XSAgLXNldHVwIDAuMjAwMAorc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1mYWxsX2Zyb20gW2dldF9jbG9ja3Mge3J0Y19jbGt9XSAtcmlzZV90byBbZ2V0X2Nsb2NrcyB7cnRjX2Nsa31dICAtaG9sZCAwLjEwMDAKK3NldF9jbG9ja191bmNlcnRhaW50eSAtZmFsbF9mcm9tIFtnZXRfY2xvY2tzIHtydGNfY2xrfV0gLXJpc2VfdG8gW2dldF9jbG9ja3Mge3J0Y19jbGt9XSAgLXNldHVwIDAuMjAwMAorc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1mYWxsX2Zyb20gW2dldF9jbG9ja3Mge3J0Y19jbGt9XSAtZmFsbF90byBbZ2V0X2Nsb2NrcyB7cnRjX2Nsa31dICAtaG9sZCAwLjEwMDAKK3NldF9jbG9ja191bmNlcnRhaW50eSAtZmFsbF9mcm9tIFtnZXRfY2xvY2tzIHtydGNfY2xrfV0gLWZhbGxfdG8gW2dldF9jbG9ja3Mge3J0Y19jbGt9XSAgLXNldHVwIDAuMjAwMAorc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1yaXNlX2Zyb20gW2dldF9jbG9ja3Mge2xpbmVfY2xrfV0gLXJpc2VfdG8gW2dldF9jbG9ja3Mge2xpbmVfY2xrfV0gIC1ob2xkIDAuMTAwMAorc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1yaXNlX2Zyb20gW2dldF9jbG9ja3Mge2xpbmVfY2xrfV0gLXJpc2VfdG8gW2dldF9jbG9ja3Mge2xpbmVfY2xrfV0gIC1zZXR1cCAwLjIwMDAKK3NldF9jbG9ja191bmNlcnRhaW50eSAtcmlzZV9mcm9tIFtnZXRfY2xvY2tzIHtsaW5lX2Nsa31dIC1mYWxsX3RvIFtnZXRfY2xvY2tzIHtsaW5lX2Nsa31dICAtaG9sZCAwLjEwMDAKK3NldF9jbG9ja191bmNlcnRhaW50eSAtcmlzZV9mcm9tIFtnZXRfY2xvY2tzIHtsaW5lX2Nsa31dIC1mYWxsX3RvIFtnZXRfY2xvY2tzIHtsaW5lX2Nsa31dICAtc2V0dXAgMC4yMDAwCitzZXRfY2xvY2tfdW5jZXJ0YWludHkgLWZhbGxfZnJvbSBbZ2V0X2Nsb2NrcyB7bGluZV9jbGt9XSAtcmlzZV90byBbZ2V0X2Nsb2NrcyB7bGluZV9jbGt9XSAgLWhvbGQgMC4xMDAwCitzZXRfY2xvY2tfdW5jZXJ0YWludHkgLWZhbGxfZnJvbSBbZ2V0X2Nsb2NrcyB7bGluZV9jbGt9XSAtcmlzZV90byBbZ2V0X2Nsb2NrcyB7bGluZV9jbGt9XSAgLXNldHVwIDAuMjAwMAorc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1mYWxsX2Zyb20gW2dldF9jbG9ja3Mge2xpbmVfY2xrfV0gLWZhbGxfdG8gW2dldF9jbG9ja3Mge2xpbmVfY2xrfV0gIC1ob2xkIDAuMTAwMAorc2V0X2Nsb2NrX3VuY2VydGFpbnR5IC1mYWxsX2Zyb20gW2dldF9jbG9ja3Mge2xpbmVfY2xrfV0gLWZhbGxfdG8gW2dldF9jbG9ja3Mge2xpbmVfY2xrfV0gIC1zZXR1cCAwLjIwMDAKK3NldF9jbG9ja19ncm91cHMgLW5hbWUgYXN5bmNfY2xvY2sgLWFzeW5jaHJvbm91cyBcCisgLWdyb3VwIFtnZXRfY2xvY2tzIHtjcHVfY2xrfV1cCisgLWdyb3VwIFtnZXRfY2xvY2tzIHtsaW5lX2Nsa31dXAorIC1ncm91cCBbZ2V0X2Nsb2NrcyB7dXNiX2Nsa31dXAorIC1ncm91cCBbZ2V0X2Nsb2NrcyB7cnRjX2Nsa31dXAorIC1ncm91cCBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV1cCisgLWdyb3VwIFtnZXRfY2xvY2tzIHt3YnNfY2xrX2l9XSAtY29tbWVudCB7QXN5bmMgQ2xvY2sgZ3JvdXB9CisKK3NldF9pbnB1dF9kZWxheSAyLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3diX3JzdF9pfV0KKworc2V0X2lucHV0X2RlbGF5IC1tYXggNS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfYWRyX2lbMF19XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfYWRyX2lbMTBdfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDUuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2Fkcl9pWzExXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA1LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19hZHJfaVsxMl19XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfYWRyX2lbMTNdfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDUuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2Fkcl9pWzE0XX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA1LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19hZHJfaVsxNV19XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfYWRyX2lbMTZdfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDUuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2Fkcl9pWzE3XX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA1LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19hZHJfaVsxOF19XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfYWRyX2lbMTldfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDUuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2Fkcl9pWzFdfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDUuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2Fkcl9pWzIwXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA1LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19hZHJfaVsyMV19XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfYWRyX2lbMjJdfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDUuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2Fkcl9pWzIzXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA1LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19hZHJfaVsyNF19XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfYWRyX2lbMjVdfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDUuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2Fkcl9pWzI2XX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA1LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19hZHJfaVsyN119XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfYWRyX2lbMjhdfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDUuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2Fkcl9pWzI5XX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA1LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19hZHJfaVsyXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA1LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19hZHJfaVszMF19XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfYWRyX2lbMzFdfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDUuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2Fkcl9pWzNdfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDUuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2Fkcl9pWzRdfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDUuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2Fkcl9pWzVdfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDUuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2Fkcl9pWzZdfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDUuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2Fkcl9pWzddfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDUuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2Fkcl9pWzhdfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDUuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2Fkcl9pWzldfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDUuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2N5Y19pfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDUuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9pWzBdfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDUuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9pWzEwXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA1LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfaVsxMV19XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X2lbMTJdfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDUuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9pWzEzXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA1LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfaVsxNF19XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X2lbMTVdfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDUuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9pWzE2XX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA1LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfaVsxN119XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X2lbMThdfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDUuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9pWzE5XX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA1LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfaVsxXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA1LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfaVsyMF19XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X2lbMjFdfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDUuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9pWzIyXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA1LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfaVsyM119XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X2lbMjRdfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDUuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9pWzI1XX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA1LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfaVsyNl19XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X2lbMjddfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDUuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9pWzI4XX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA1LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfaVsyOV19XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X2lbMl19XQorc2V0X2lucHV0X2RlbGF5IC1tYXggNS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X2lbMzBdfV0KK3NldF9pbnB1dF9kZWxheSAtbWF4IDUuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9pWzMxXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA1LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfaVszXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA1LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfaVs0XX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA1LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfaVs1XX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA1LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfaVs2XX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA1LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfaVs3XX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA1LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfaVs4XX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA1LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfaVs5XX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA1LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19zZWxfaVswXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA1LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19zZWxfaVsxXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA1LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19zZWxfaVsyXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA1LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19zZWxfaVszXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA1LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19zdGJfaX1dCitzZXRfaW5wdXRfZGVsYXkgLW1heCA1LjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic193ZV9pfV0KKworc2V0X2lucHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfYWRyX2lbMF19XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfYWRyX2lbMTBdfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2Fkcl9pWzExXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19hZHJfaVsxMl19XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfYWRyX2lbMTNdfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2Fkcl9pWzE0XX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19hZHJfaVsxNV19XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfYWRyX2lbMTZdfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2Fkcl9pWzE3XX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19hZHJfaVsxOF19XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfYWRyX2lbMTldfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2Fkcl9pWzFdfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2Fkcl9pWzIwXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19hZHJfaVsyMV19XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfYWRyX2lbMjJdfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2Fkcl9pWzIzXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19hZHJfaVsyNF19XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfYWRyX2lbMjVdfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2Fkcl9pWzI2XX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19hZHJfaVsyN119XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfYWRyX2lbMjhdfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2Fkcl9pWzI5XX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19hZHJfaVsyXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19hZHJfaVszMF19XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfYWRyX2lbMzFdfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2Fkcl9pWzNdfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2Fkcl9pWzRdfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2Fkcl9pWzVdfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2Fkcl9pWzZdfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2Fkcl9pWzddfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2Fkcl9pWzhdfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2Fkcl9pWzldfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2N5Y19pfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9pWzBdfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9pWzEwXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfaVsxMV19XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X2lbMTJdfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9pWzEzXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfaVsxNF19XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X2lbMTVdfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9pWzE2XX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfaVsxN119XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X2lbMThdfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9pWzE5XX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfaVsxXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfaVsyMF19XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X2lbMjFdfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9pWzIyXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfaVsyM119XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X2lbMjRdfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9pWzI1XX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfaVsyNl19XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X2lbMjddfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9pWzI4XX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfaVsyOV19XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X2lbMl19XQorc2V0X2lucHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X2lbMzBdfV0KK3NldF9pbnB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9pWzMxXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfaVszXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfaVs0XX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfaVs1XX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfaVs2XX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfaVs3XX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfaVs4XX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfaVs5XX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19zZWxfaVswXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19zZWxfaVsxXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19zZWxfaVsyXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19zZWxfaVszXX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19zdGJfaX1dCitzZXRfaW5wdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic193ZV9pfV0KKworCitzZXRfb3V0cHV0X2RlbGF5IC1tYXggNC41MDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfYWNrX299XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDQuNTAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9vWzBdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1heCA0LjUwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfb1sxMF19XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDQuNTAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9vWzExXX1dCitzZXRfb3V0cHV0X2RlbGF5IC1tYXggNC41MDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X29bMTJdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1heCA0LjUwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfb1sxM119XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDQuNTAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9vWzE0XX1dCitzZXRfb3V0cHV0X2RlbGF5IC1tYXggNC41MDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X29bMTVdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1heCA0LjUwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfb1sxNl19XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDQuNTAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9vWzE3XX1dCitzZXRfb3V0cHV0X2RlbGF5IC1tYXggNC41MDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X29bMThdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1heCA0LjUwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfb1sxOV19XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDQuNTAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9vWzFdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1heCA0LjUwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfb1syMF19XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDQuNTAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9vWzIxXX1dCitzZXRfb3V0cHV0X2RlbGF5IC1tYXggNC41MDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X29bMjJdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1heCA0LjUwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfb1syM119XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDQuNTAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9vWzI0XX1dCitzZXRfb3V0cHV0X2RlbGF5IC1tYXggNC41MDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X29bMjVdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1heCA0LjUwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfb1syNl19XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDQuNTAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9vWzI3XX1dCitzZXRfb3V0cHV0X2RlbGF5IC1tYXggNC41MDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X29bMjhdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1heCA0LjUwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfb1syOV19XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDQuNTAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9vWzJdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1heCA0LjUwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfb1szMF19XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDQuNTAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9vWzMxXX1dCitzZXRfb3V0cHV0X2RlbGF5IC1tYXggNC41MDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X29bM119XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDQuNTAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9vWzRdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1heCA0LjUwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfb1s1XX1dCitzZXRfb3V0cHV0X2RlbGF5IC1tYXggNC41MDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X29bNl19XQorc2V0X291dHB1dF9kZWxheSAtbWF4IDQuNTAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9vWzddfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1heCA0LjUwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfb1s4XX1dCitzZXRfb3V0cHV0X2RlbGF5IC1tYXggNC41MDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X29bOV19XQorCitzZXRfb3V0cHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfYWNrX299XQorc2V0X291dHB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9vWzBdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfb1sxMF19XQorc2V0X291dHB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9vWzExXX1dCitzZXRfb3V0cHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X29bMTJdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfb1sxM119XQorc2V0X291dHB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9vWzE0XX1dCitzZXRfb3V0cHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X29bMTVdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfb1sxNl19XQorc2V0X291dHB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9vWzE3XX1dCitzZXRfb3V0cHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X29bMThdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfb1sxOV19XQorc2V0X291dHB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9vWzFdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfb1syMF19XQorc2V0X291dHB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9vWzIxXX1dCitzZXRfb3V0cHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X29bMjJdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfb1syM119XQorc2V0X291dHB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9vWzI0XX1dCitzZXRfb3V0cHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X29bMjVdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfb1syNl19XQorc2V0X291dHB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9vWzI3XX1dCitzZXRfb3V0cHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X29bMjhdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfb1syOV19XQorc2V0X291dHB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9vWzJdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfb1szMF19XQorc2V0X291dHB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9vWzMxXX1dCitzZXRfb3V0cHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X29bM119XQorc2V0X291dHB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9vWzRdfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfb1s1XX1dCitzZXRfb3V0cHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X29bNl19XQorc2V0X291dHB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3dibV9jbGtfaX1dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7d2JzX2RhdF9vWzddfV0KK3NldF9vdXRwdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Ym1fY2xrX2l9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge3dic19kYXRfb1s4XX1dCitzZXRfb3V0cHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JtX2Nsa19pfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHt3YnNfZGF0X29bOV19XQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBFbnZpcm9ubWVudAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHt3YnNfYWNrX299XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHthbmFsb2dfaW9bMjhdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7YW5hbG9nX2lvWzI3XX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2FuYWxvZ19pb1syNl19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHthbmFsb2dfaW9bMjVdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7YW5hbG9nX2lvWzI0XX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2FuYWxvZ19pb1syM119XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHthbmFsb2dfaW9bMjJdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7YW5hbG9nX2lvWzIxXX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2FuYWxvZ19pb1syMF19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHthbmFsb2dfaW9bMTldfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7YW5hbG9nX2lvWzE4XX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2FuYWxvZ19pb1sxN119XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHthbmFsb2dfaW9bMTZdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7YW5hbG9nX2lvWzE1XX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2FuYWxvZ19pb1sxNF19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHthbmFsb2dfaW9bMTNdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7YW5hbG9nX2lvWzEyXX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2FuYWxvZ19pb1sxMV19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHthbmFsb2dfaW9bMTBdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7YW5hbG9nX2lvWzldfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7YW5hbG9nX2lvWzhdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7YW5hbG9nX2lvWzddfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7YW5hbG9nX2lvWzZdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7YW5hbG9nX2lvWzVdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7YW5hbG9nX2lvWzRdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7YW5hbG9nX2lvWzNdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7YW5hbG9nX2lvWzJdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7YW5hbG9nX2lvWzFdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7YW5hbG9nX2lvWzBdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7aW9fb2ViWzM3XX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2lvX29lYlszNl19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtpb19vZWJbMzVdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7aW9fb2ViWzM0XX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2lvX29lYlszM119XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtpb19vZWJbMzJdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7aW9fb2ViWzMxXX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2lvX29lYlszMF19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtpb19vZWJbMjldfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7aW9fb2ViWzI4XX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2lvX29lYlsyN119XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtpb19vZWJbMjZdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7aW9fb2ViWzI1XX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2lvX29lYlsyNF19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtpb19vZWJbMjNdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7aW9fb2ViWzIyXX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2lvX29lYlsyMV19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtpb19vZWJbMjBdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7aW9fb2ViWzE5XX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2lvX29lYlsxOF19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtpb19vZWJbMTddfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7aW9fb2ViWzE2XX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2lvX29lYlsxNV19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtpb19vZWJbMTRdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7aW9fb2ViWzEzXX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2lvX29lYlsxMl19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtpb19vZWJbMTFdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7aW9fb2ViWzEwXX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2lvX29lYls5XX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2lvX29lYls4XX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2lvX29lYls3XX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2lvX29lYls2XX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2lvX29lYls1XX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2lvX29lYls0XX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2lvX29lYlszXX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2lvX29lYlsyXX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2lvX29lYlsxXX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2lvX29lYlswXX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2lvX291dFszN119XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtpb19vdXRbMzZdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7aW9fb3V0WzM1XX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2lvX291dFszNF19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtpb19vdXRbMzNdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7aW9fb3V0WzMyXX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2lvX291dFszMV19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtpb19vdXRbMzBdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7aW9fb3V0WzI5XX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2lvX291dFsyOF19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtpb19vdXRbMjddfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7aW9fb3V0WzI2XX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2lvX291dFsyNV19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtpb19vdXRbMjRdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7aW9fb3V0WzIzXX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2lvX291dFsyMl19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtpb19vdXRbMjFdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7aW9fb3V0WzIwXX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2lvX291dFsxOV19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtpb19vdXRbMThdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7aW9fb3V0WzE3XX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2lvX291dFsxNl19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtpb19vdXRbMTVdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7aW9fb3V0WzE0XX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2lvX291dFsxM119XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtpb19vdXRbMTJdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7aW9fb3V0WzExXX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2lvX291dFsxMF19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtpb19vdXRbOV19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtpb19vdXRbOF19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtpb19vdXRbN119XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtpb19vdXRbNl19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtpb19vdXRbNV19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtpb19vdXRbNF19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtpb19vdXRbM119XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtpb19vdXRbMl19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtpb19vdXRbMV19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtpb19vdXRbMF19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFsxMjddfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbMTI2XX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2xhX2RhdGFfb3V0WzEyNV19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFsxMjRdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbMTIzXX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2xhX2RhdGFfb3V0WzEyMl19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFsxMjFdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbMTIwXX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2xhX2RhdGFfb3V0WzExOV19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFsxMThdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbMTE3XX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2xhX2RhdGFfb3V0WzExNl19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFsxMTVdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbMTE0XX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2xhX2RhdGFfb3V0WzExM119XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFsxMTJdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbMTExXX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2xhX2RhdGFfb3V0WzExMF19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFsxMDldfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbMTA4XX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2xhX2RhdGFfb3V0WzEwN119XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFsxMDZdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbMTA1XX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2xhX2RhdGFfb3V0WzEwNF19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFsxMDNdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbMTAyXX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2xhX2RhdGFfb3V0WzEwMV19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFsxMDBdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbOTldfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbOThdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbOTddfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbOTZdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbOTVdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbOTRdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbOTNdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbOTJdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbOTFdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbOTBdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbODldfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbODhdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbODddfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbODZdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbODVdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbODRdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbODNdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbODJdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbODFdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbODBdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbNzldfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbNzhdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbNzddfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbNzZdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbNzVdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbNzRdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbNzNdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbNzJdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbNzFdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbNzBdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbNjldfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbNjhdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbNjddfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbNjZdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbNjVdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbNjRdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbNjNdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbNjJdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbNjFdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbNjBdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbNTldfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbNThdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbNTddfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbNTZdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbNTVdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbNTRdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbNTNdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbNTJdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbNTFdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbNTBdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbNDldfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbNDhdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbNDddfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbNDZdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbNDVdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbNDRdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbNDNdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbNDJdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbNDFdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbNDBdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbMzldfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbMzhdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbMzddfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbMzZdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbMzVdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbMzRdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbMzNdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbMzJdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbMzFdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbMzBdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbMjldfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbMjhdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbMjddfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbMjZdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbMjVdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbMjRdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbMjNdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbMjJdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbMjFdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbMjBdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbMTldfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbMThdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbMTddfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbMTZdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbMTVdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbMTRdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbMTNdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbMTJdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbMTFdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbMTBdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbOV19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFs4XX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2xhX2RhdGFfb3V0WzddfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbNl19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFs1XX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2xhX2RhdGFfb3V0WzRdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbM119XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHtsYV9kYXRhX291dFsyXX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge2xhX2RhdGFfb3V0WzFdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7bGFfZGF0YV9vdXRbMF19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHt1c2VyX2lycVsyXX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge3VzZXJfaXJxWzFdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7dXNlcl9pcnFbMF19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHt3YnNfZGF0X29bMzFdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7d2JzX2RhdF9vWzMwXX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge3dic19kYXRfb1syOV19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHt3YnNfZGF0X29bMjhdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7d2JzX2RhdF9vWzI3XX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge3dic19kYXRfb1syNl19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHt3YnNfZGF0X29bMjVdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7d2JzX2RhdF9vWzI0XX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge3dic19kYXRfb1syM119XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHt3YnNfZGF0X29bMjJdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7d2JzX2RhdF9vWzIxXX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge3dic19kYXRfb1syMF19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHt3YnNfZGF0X29bMTldfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7d2JzX2RhdF9vWzE4XX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge3dic19kYXRfb1sxN119XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHt3YnNfZGF0X29bMTZdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7d2JzX2RhdF9vWzE1XX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge3dic19kYXRfb1sxNF19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHt3YnNfZGF0X29bMTNdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7d2JzX2RhdF9vWzEyXX1dCitzZXRfbG9hZCAtcGluX2xvYWQgMC4wMzM0IFtnZXRfcG9ydHMge3dic19kYXRfb1sxMV19XQorc2V0X2xvYWQgLXBpbl9sb2FkIDAuMDMzNCBbZ2V0X3BvcnRzIHt3YnNfZGF0X29bMTBdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7d2JzX2RhdF9vWzldfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7d2JzX2RhdF9vWzhdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7d2JzX2RhdF9vWzddfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7d2JzX2RhdF9vWzZdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7d2JzX2RhdF9vWzVdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7d2JzX2RhdF9vWzRdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7d2JzX2RhdF9vWzNdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7d2JzX2RhdF9vWzJdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7d2JzX2RhdF9vWzFdfV0KK3NldF9sb2FkIC1waW5fbG9hZCAwLjAzMzQgW2dldF9wb3J0cyB7d2JzX2RhdF9vWzBdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7dXNlcl9jbG9jazJ9XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHt3Yl9jbGtfaX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge3diX3JzdF9pfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7d2JzX2N5Y19pfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7d2JzX3N0Yl9pfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7d2JzX3dlX2l9XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHthbmFsb2dfaW9bMjhdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7YW5hbG9nX2lvWzI3XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2FuYWxvZ19pb1syNl19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHthbmFsb2dfaW9bMjVdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7YW5hbG9nX2lvWzI0XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2FuYWxvZ19pb1syM119XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHthbmFsb2dfaW9bMjJdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7YW5hbG9nX2lvWzIxXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2FuYWxvZ19pb1syMF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHthbmFsb2dfaW9bMTldfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7YW5hbG9nX2lvWzE4XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2FuYWxvZ19pb1sxN119XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHthbmFsb2dfaW9bMTZdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7YW5hbG9nX2lvWzE1XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2FuYWxvZ19pb1sxNF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHthbmFsb2dfaW9bMTNdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7YW5hbG9nX2lvWzEyXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2FuYWxvZ19pb1sxMV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHthbmFsb2dfaW9bMTBdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7YW5hbG9nX2lvWzldfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7YW5hbG9nX2lvWzhdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7YW5hbG9nX2lvWzddfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7YW5hbG9nX2lvWzZdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7YW5hbG9nX2lvWzVdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7YW5hbG9nX2lvWzRdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7YW5hbG9nX2lvWzNdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7YW5hbG9nX2lvWzJdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7YW5hbG9nX2lvWzFdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7YW5hbG9nX2lvWzBdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7aW9faW5bMzddfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7aW9faW5bMzZdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7aW9faW5bMzVdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7aW9faW5bMzRdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7aW9faW5bMzNdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7aW9faW5bMzJdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7aW9faW5bMzFdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7aW9faW5bMzBdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7aW9faW5bMjldfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7aW9faW5bMjhdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7aW9faW5bMjddfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7aW9faW5bMjZdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7aW9faW5bMjVdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7aW9faW5bMjRdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7aW9faW5bMjNdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7aW9faW5bMjJdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7aW9faW5bMjFdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7aW9faW5bMjBdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7aW9faW5bMTldfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7aW9faW5bMThdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7aW9faW5bMTddfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7aW9faW5bMTZdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7aW9faW5bMTVdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7aW9faW5bMTRdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7aW9faW5bMTNdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7aW9faW5bMTJdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7aW9faW5bMTFdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7aW9faW5bMTBdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7aW9faW5bOV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtpb19pbls4XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2lvX2luWzddfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7aW9faW5bNl19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtpb19pbls1XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2lvX2luWzRdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7aW9faW5bM119XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtpb19pblsyXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2lvX2luWzFdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7aW9faW5bMF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzEyN119XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzEyNl19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzEyNV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzEyNF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzEyM119XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzEyMl19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzEyMV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzEyMF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzExOV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzExOF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzExN119XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzExNl19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzExNV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzExNF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzExM119XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzExMl19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzExMV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzExMF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzEwOV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzEwOF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzEwN119XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzEwNl19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzEwNV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzEwNF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzEwM119XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzEwMl19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzEwMV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzEwMF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzk5XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bOThdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfZGF0YV9pbls5N119XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzk2XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bOTVdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfZGF0YV9pbls5NF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzkzXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bOTJdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfZGF0YV9pbls5MV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzkwXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bODldfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfZGF0YV9pbls4OF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzg3XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bODZdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfZGF0YV9pbls4NV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzg0XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bODNdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfZGF0YV9pbls4Ml19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzgxXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bODBdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfZGF0YV9pbls3OV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzc4XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bNzddfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfZGF0YV9pbls3Nl19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzc1XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bNzRdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfZGF0YV9pbls3M119XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzcyXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bNzFdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfZGF0YV9pbls3MF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzY5XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bNjhdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfZGF0YV9pbls2N119XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzY2XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bNjVdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfZGF0YV9pbls2NF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzYzXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bNjJdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfZGF0YV9pbls2MV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzYwXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bNTldfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfZGF0YV9pbls1OF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzU3XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bNTZdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfZGF0YV9pbls1NV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzU0XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bNTNdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfZGF0YV9pbls1Ml19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzUxXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bNTBdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfZGF0YV9pbls0OV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzQ4XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bNDddfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfZGF0YV9pbls0Nl19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzQ1XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bNDRdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfZGF0YV9pbls0M119XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzQyXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bNDFdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfZGF0YV9pbls0MF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzM5XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bMzhdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfZGF0YV9pblszN119XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzM2XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bMzVdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfZGF0YV9pblszNF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzMzXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bMzJdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfZGF0YV9pblszMV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzMwXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bMjldfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfZGF0YV9pblsyOF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzI3XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bMjZdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfZGF0YV9pblsyNV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzI0XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bMjNdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfZGF0YV9pblsyMl19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzIxXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bMjBdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfZGF0YV9pblsxOV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzE4XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bMTddfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfZGF0YV9pblsxNl19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzE1XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bMTRdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfZGF0YV9pblsxM119XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzEyXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bMTFdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfZGF0YV9pblsxMF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzldfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfZGF0YV9pbls4XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bN119XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzZdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfZGF0YV9pbls1XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bNF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzNdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfZGF0YV9pblsyXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX2RhdGFfaW5bMV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9kYXRhX2luWzBdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYlsxMjddfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYlsxMjZdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYlsxMjVdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYlsxMjRdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYlsxMjNdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYlsxMjJdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYlsxMjFdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYlsxMjBdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYlsxMTldfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYlsxMThdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYlsxMTddfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYlsxMTZdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYlsxMTVdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYlsxMTRdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYlsxMTNdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYlsxMTJdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYlsxMTFdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYlsxMTBdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYlsxMDldfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYlsxMDhdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYlsxMDddfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYlsxMDZdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYlsxMDVdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYlsxMDRdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYlsxMDNdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYlsxMDJdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYlsxMDFdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYlsxMDBdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYls5OV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzk4XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX29lbmJbOTddfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYls5Nl19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzk1XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX29lbmJbOTRdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYls5M119XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzkyXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX29lbmJbOTFdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYls5MF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzg5XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX29lbmJbODhdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYls4N119XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzg2XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX29lbmJbODVdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYls4NF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzgzXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX29lbmJbODJdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYls4MV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzgwXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX29lbmJbNzldfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYls3OF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzc3XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX29lbmJbNzZdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYls3NV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzc0XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX29lbmJbNzNdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYls3Ml19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzcxXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX29lbmJbNzBdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYls2OV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzY4XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX29lbmJbNjddfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYls2Nl19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzY1XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX29lbmJbNjRdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYls2M119XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzYyXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX29lbmJbNjFdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYls2MF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzU5XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX29lbmJbNThdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYls1N119XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzU2XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX29lbmJbNTVdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYls1NF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzUzXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX29lbmJbNTJdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYls1MV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzUwXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX29lbmJbNDldfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYls0OF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzQ3XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX29lbmJbNDZdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYls0NV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzQ0XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX29lbmJbNDNdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYls0Ml19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzQxXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX29lbmJbNDBdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYlszOV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzM4XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX29lbmJbMzddfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYlszNl19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzM1XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX29lbmJbMzRdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYlszM119XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzMyXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX29lbmJbMzFdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYlszMF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzI5XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX29lbmJbMjhdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYlsyN119XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzI2XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX29lbmJbMjVdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYlsyNF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzIzXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX29lbmJbMjJdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYlsyMV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzIwXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX29lbmJbMTldfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYlsxOF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzE3XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX29lbmJbMTZdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYlsxNV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzE0XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX29lbmJbMTNdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYlsxMl19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzExXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX29lbmJbMTBdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYls5XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX29lbmJbOF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzddfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYls2XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX29lbmJbNV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzRdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYlszXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge2xhX29lbmJbMl19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHtsYV9vZW5iWzFdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7bGFfb2VuYlswXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge3dic19hZHJfaVszMV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHt3YnNfYWRyX2lbMzBdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7d2JzX2Fkcl9pWzI5XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge3dic19hZHJfaVsyOF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHt3YnNfYWRyX2lbMjddfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7d2JzX2Fkcl9pWzI2XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge3dic19hZHJfaVsyNV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHt3YnNfYWRyX2lbMjRdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7d2JzX2Fkcl9pWzIzXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge3dic19hZHJfaVsyMl19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHt3YnNfYWRyX2lbMjFdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7d2JzX2Fkcl9pWzIwXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge3dic19hZHJfaVsxOV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHt3YnNfYWRyX2lbMThdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7d2JzX2Fkcl9pWzE3XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge3dic19hZHJfaVsxNl19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHt3YnNfYWRyX2lbMTVdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7d2JzX2Fkcl9pWzE0XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge3dic19hZHJfaVsxM119XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHt3YnNfYWRyX2lbMTJdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7d2JzX2Fkcl9pWzExXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge3dic19hZHJfaVsxMF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHt3YnNfYWRyX2lbOV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHt3YnNfYWRyX2lbOF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHt3YnNfYWRyX2lbN119XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHt3YnNfYWRyX2lbNl19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHt3YnNfYWRyX2lbNV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHt3YnNfYWRyX2lbNF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHt3YnNfYWRyX2lbM119XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHt3YnNfYWRyX2lbMl19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHt3YnNfYWRyX2lbMV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHt3YnNfYWRyX2lbMF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHt3YnNfZGF0X2lbMzFdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7d2JzX2RhdF9pWzMwXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge3dic19kYXRfaVsyOV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHt3YnNfZGF0X2lbMjhdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7d2JzX2RhdF9pWzI3XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge3dic19kYXRfaVsyNl19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHt3YnNfZGF0X2lbMjVdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7d2JzX2RhdF9pWzI0XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge3dic19kYXRfaVsyM119XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHt3YnNfZGF0X2lbMjJdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7d2JzX2RhdF9pWzIxXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge3dic19kYXRfaVsyMF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHt3YnNfZGF0X2lbMTldfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7d2JzX2RhdF9pWzE4XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge3dic19kYXRfaVsxN119XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHt3YnNfZGF0X2lbMTZdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7d2JzX2RhdF9pWzE1XX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge3dic19kYXRfaVsxNF19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHt3YnNfZGF0X2lbMTNdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7d2JzX2RhdF9pWzEyXX1dCitzZXRfZHJpdmluZ19jZWxsIC1saWJfY2VsbCBza3kxMzBfZmRfc2NfaGRfX2ludl84IC1waW4ge1l9IC1pbnB1dF90cmFuc2l0aW9uX3Jpc2UgMC4wMDAwIC1pbnB1dF90cmFuc2l0aW9uX2ZhbGwgMC4wMDAwIFtnZXRfcG9ydHMge3dic19kYXRfaVsxMV19XQorc2V0X2RyaXZpbmdfY2VsbCAtbGliX2NlbGwgc2t5MTMwX2ZkX3NjX2hkX19pbnZfOCAtcGluIHtZfSAtaW5wdXRfdHJhbnNpdGlvbl9yaXNlIDAuMDAwMCAtaW5wdXRfdHJhbnNpdGlvbl9mYWxsIDAuMDAwMCBbZ2V0X3BvcnRzIHt3YnNfZGF0X2lbMTBdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7d2JzX2RhdF9pWzldfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7d2JzX2RhdF9pWzhdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7d2JzX2RhdF9pWzddfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7d2JzX2RhdF9pWzZdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7d2JzX2RhdF9pWzVdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7d2JzX2RhdF9pWzRdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7d2JzX2RhdF9pWzNdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7d2JzX2RhdF9pWzJdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7d2JzX2RhdF9pWzFdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7d2JzX2RhdF9pWzBdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7d2JzX3NlbF9pWzNdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7d2JzX3NlbF9pWzJdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7d2JzX3NlbF9pWzFdfV0KK3NldF9kcml2aW5nX2NlbGwgLWxpYl9jZWxsIHNreTEzMF9mZF9zY19oZF9faW52XzggLXBpbiB7WX0gLWlucHV0X3RyYW5zaXRpb25fcmlzZSAwLjAwMDAgLWlucHV0X3RyYW5zaXRpb25fZmFsbCAwLjAwMDAgW2dldF9wb3J0cyB7d2JzX3NlbF9pWzBdfV0KK3NldF9jYXNlX2FuYWx5c2lzIDAgW2dldF9waW5zIHt1X2ludGVyY29uL2NmZ19jc2thX3dpWzBdfV0KK3NldF9jYXNlX2FuYWx5c2lzIDAgW2dldF9waW5zIHt1X2ludGVyY29uL2NmZ19jc2thX3dpWzFdfV0KK3NldF9jYXNlX2FuYWx5c2lzIDAgW2dldF9waW5zIHt1X2ludGVyY29uL2NmZ19jc2thX3dpWzJdfV0KK3NldF9jYXNlX2FuYWx5c2lzIDEgW2dldF9waW5zIHt1X2ludGVyY29uL2NmZ19jc2thX3dpWzNdfV0KK3NldF9jYXNlX2FuYWx5c2lzIDAgW2dldF9waW5zIHt1X3Bpbm11eC9jZmdfY3NrYV9waW5tdXhbMF19XQorc2V0X2Nhc2VfYW5hbHlzaXMgMSBbZ2V0X3BpbnMge3VfcGlubXV4L2NmZ19jc2thX3Bpbm11eFsxXX1dCitzZXRfY2FzZV9hbmFseXNpcyAxIFtnZXRfcGlucyB7dV9waW5tdXgvY2ZnX2Nza2FfcGlubXV4WzJdfV0KK3NldF9jYXNlX2FuYWx5c2lzIDAgW2dldF9waW5zIHt1X3Bpbm11eC9jZmdfY3NrYV9waW5tdXhbM119XQorc2V0X2Nhc2VfYW5hbHlzaXMgMCBbZ2V0X3BpbnMge3VfcXNwaV9tYXN0ZXIvY2ZnX2Nza2Ffc3BfY29bMF19XQorc2V0X2Nhc2VfYW5hbHlzaXMgMCBbZ2V0X3BpbnMge3VfcXNwaV9tYXN0ZXIvY2ZnX2Nza2Ffc3BfY29bMV19XQorc2V0X2Nhc2VfYW5hbHlzaXMgMCBbZ2V0X3BpbnMge3VfcXNwaV9tYXN0ZXIvY2ZnX2Nza2Ffc3BfY29bMl19XQorc2V0X2Nhc2VfYW5hbHlzaXMgMCBbZ2V0X3BpbnMge3VfcXNwaV9tYXN0ZXIvY2ZnX2Nza2Ffc3BfY29bM119XQorc2V0X2Nhc2VfYW5hbHlzaXMgMCBbZ2V0X3BpbnMge3VfcXNwaV9tYXN0ZXIvY2ZnX2Nza2Ffc3BpWzBdfV0KK3NldF9jYXNlX2FuYWx5c2lzIDAgW2dldF9waW5zIHt1X3FzcGlfbWFzdGVyL2NmZ19jc2thX3NwaVsxXX1dCitzZXRfY2FzZV9hbmFseXNpcyAwIFtnZXRfcGlucyB7dV9xc3BpX21hc3Rlci9jZmdfY3NrYV9zcGlbMl19XQorc2V0X2Nhc2VfYW5hbHlzaXMgMSBbZ2V0X3BpbnMge3VfcXNwaV9tYXN0ZXIvY2ZnX2Nza2Ffc3BpWzNdfV0KK3NldF9jYXNlX2FuYWx5c2lzIDEgW2dldF9waW5zIHt1X3Jpc2N2X3RvcC9jZmdfY3NrYV9yaXNjdlswXX1dCitzZXRfY2FzZV9hbmFseXNpcyAxIFtnZXRfcGlucyB7dV9yaXNjdl90b3AvY2ZnX2Nza2FfcmlzY3ZbMV19XQorc2V0X2Nhc2VfYW5hbHlzaXMgMSBbZ2V0X3BpbnMge3VfcmlzY3ZfdG9wL2NmZ19jc2thX3Jpc2N2WzJdfV0KK3NldF9jYXNlX2FuYWx5c2lzIDAgW2dldF9waW5zIHt1X3Jpc2N2X3RvcC9jZmdfY3NrYV9yaXNjdlszXX1dCitzZXRfY2FzZV9hbmFseXNpcyAwIFtnZXRfcGlucyB7dV93Yl9ob3N0L2NmZ19jc2thX3doWzBdfV0KK3NldF9jYXNlX2FuYWx5c2lzIDAgW2dldF9waW5zIHt1X3diX2hvc3QvY2ZnX2Nza2Ffd2hbMV19XQorc2V0X2Nhc2VfYW5hbHlzaXMgMCBbZ2V0X3BpbnMge3Vfd2JfaG9zdC9jZmdfY3NrYV93aFsyXX1dCitzZXRfY2FzZV9hbmFseXNpcyAxIFtnZXRfcGlucyB7dV93Yl9ob3N0L2NmZ19jc2thX3doWzNdfV0KKworc2V0X2Nhc2VfYW5hbHlzaXMgMSBbZ2V0X3BpbnMge3VfdWFydF9pMmNfdXNiX3NwaS9jZmdfY3NrYV91YXJ0WzNdfV0KK3NldF9jYXNlX2FuYWx5c2lzIDAgW2dldF9waW5zIHt1X3VhcnRfaTJjX3VzYl9zcGkvY2ZnX2Nza2FfdWFydFsyXX1dCitzZXRfY2FzZV9hbmFseXNpcyAwIFtnZXRfcGlucyB7dV91YXJ0X2kyY191c2Jfc3BpL2NmZ19jc2thX3VhcnRbMV19XQorc2V0X2Nhc2VfYW5hbHlzaXMgMCBbZ2V0X3BpbnMge3VfdWFydF9pMmNfdXNiX3NwaS9jZmdfY3NrYV91YXJ0WzBdfV0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgRGVzaWduIFJ1bGVzCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyNkaXNhYmxlIGNsb2NrIGdhdGluZyBjaGVjayBhdCBzdGF0aWMgY2xvY2sgc2VsZWN0IHBpbnMKK3NldF9mYWxzZV9wYXRoIC10aHJvdWdoIFtnZXRfcGlucyB1X3diX2hvc3QvdV9jcHVfcmVmX3NlbC51X211eC9TXQorc2V0X2ZhbHNlX3BhdGggLXRocm91Z2ggW2dldF9waW5zIHVfd2JfaG9zdC91X2NwdV9jbGtfc2VsLnVfbXV4L1NdCitzZXRfZmFsc2VfcGF0aCAtdGhyb3VnaCBbZ2V0X3BpbnMgdV93Yl9ob3N0L3Vfd2JzX2Nsa19zZWwudV9tdXgvU10KK3NldF9mYWxzZV9wYXRoIC10aHJvdWdoIFtnZXRfcGlucyB1X3diX2hvc3QvdV91c2JfY2xrX3NlbC51X211eC9TXQorCisjU3Ryb2JlIGlzIHJlZ2lzdGVyZWQgaW5zaWRlIHRoZSB3Yl9ob3N0IGJlZm9yZSBnZW5lcmF0aW5nIGNoaXAgc2VsZWN0CisjIFNvIHdibV9hZHJfaSAgd2JtX3dlX2kgd2JtX3NlbF9pIHdibV9kYXRfaSBhcmUgaGF2aW5nIDIgY3ljbGUgc2V0dXAKKworc2V0X211bHRpY3ljbGVfcGF0aCAtc2V0dXAgLWZyb20gW2dldF9wb3J0cyB7d2JzX2Fkcl9pWypdfV0gMgorc2V0X211bHRpY3ljbGVfcGF0aCAtc2V0dXAgLWZyb20gW2dldF9wb3J0cyB7d2JzX2N5Y19pfV0gIDIKK3NldF9tdWx0aWN5Y2xlX3BhdGggLXNldHVwIC1mcm9tIFtnZXRfcG9ydHMge3dic19kYXRfaVsqXX1dIDIKK3NldF9tdWx0aWN5Y2xlX3BhdGggLXNldHVwIC1mcm9tIFtnZXRfcG9ydHMge3dic19zZWxfaVsqXX1dIDIKK3NldF9tdWx0aWN5Y2xlX3BhdGggLXNldHVwIC1mcm9tIFtnZXRfcG9ydHMge3dic193ZV9pfV0gMgorCitzZXRfbXVsdGljeWNsZV9wYXRoIC1ob2xkIC1mcm9tIFtnZXRfcG9ydHMge3dic19hZHJfaVsqXX1dIDIKK3NldF9tdWx0aWN5Y2xlX3BhdGggLWhvbGQgLWZyb20gW2dldF9wb3J0cyB7d2JzX2N5Y19pfV0gIDIKK3NldF9tdWx0aWN5Y2xlX3BhdGggLWhvbGQgLWZyb20gW2dldF9wb3J0cyB7d2JzX2RhdF9pWypdfV0gMgorc2V0X211bHRpY3ljbGVfcGF0aCAtaG9sZCAtZnJvbSBbZ2V0X3BvcnRzIHt3YnNfc2VsX2lbKl19XSAyCitzZXRfbXVsdGljeWNsZV9wYXRoIC1ob2xkIC1mcm9tIFtnZXRfcG9ydHMge3dic193ZV9pfV0gMgpkaWZmIC0tZ2l0IGEvc3RhL3J1bl9zdGEgYi9zdGEvcnVuX3N0YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43NDRkODY0Ci0tLSAvZGV2L251bGwKKysrIGIvc3RhL3J1bl9zdGEKQEAgLTAsMCArMSwzNSBAQAorCitccm0gLXJmIG5ldGxpc3QKK1xybSAtcmYgbG9ncworXHJtIC1yZiByZXBvcnRzCitta2RpciAgbmV0bGlzdAorbWtkaXIgIGxvZ3MKK21rZGlyICByZXBvcnRzCisKK2VjaG8gIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiCitlY2hvICJHZW5lbmVyYXRpbmcgTmV0bGlzdCB3aW5vdXQgcG93ZXIgcG9ydHMiCitlY2hvICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIgorZXhwb3J0IE1FUkdFRF9MRUZfVU5QQURERUQ9Li4vbGVmL21lcmdlZF91bnBhZGRlZC5sZWYKKworZXhwb3J0IERFU0lHTl9OQU1FPXNhcl9hZGMKK29wZW5yb2FkIC1leGl0IHNjcmlwdHMvb3Jfd3JpdGVfdmVyaWxvZy50Y2wgCisKK2V4cG9ydCBERVNJR05fTkFNRT13Yl9pbnRlcmNvbm5lY3QKK29wZW5yb2FkIC1leGl0IHNjcmlwdHMvb3Jfd3JpdGVfdmVyaWxvZy50Y2wgCisKK2V4cG9ydCBERVNJR05fTkFNRT1zeW50YWNvcmUKK29wZW5yb2FkIC1leGl0IHNjcmlwdHMvb3Jfd3JpdGVfdmVyaWxvZy50Y2wgCisKK2V4cG9ydCBERVNJR05fTkFNRT1xc3BpbQorb3BlbnJvYWQgLWV4aXQgc2NyaXB0cy9vcl93cml0ZV92ZXJpbG9nLnRjbCAKKworZXhwb3J0IERFU0lHTl9OQU1FPXVhcnRfaTJjbV91c2Jfc3BpCitvcGVucm9hZCAtZXhpdCBzY3JpcHRzL29yX3dyaXRlX3Zlcmlsb2cudGNsIAorCitleHBvcnQgREVTSUdOX05BTUU9cGlubXV4CitvcGVucm9hZCAtZXhpdCBzY3JpcHRzL29yX3dyaXRlX3Zlcmlsb2cudGNsIAorCitleHBvcnQgREVTSUdOX05BTUU9d2JfaG9zdAorb3BlbnJvYWQgLWV4aXQgc2NyaXB0cy9vcl93cml0ZV92ZXJpbG9nLnRjbCAKKworc3RhIHNjcmlwdHMvc3RhLnRjbCB8IHRlZSBsb2dzL3N0YS5sb2cKZGlmZiAtLWdpdCBhL3N0YS9zY3JpcHRzL2NhcmF2ZWxfdGltaW5nLnRjbCBiL3N0YS9zY3JpcHRzL2NhcmF2ZWxfdGltaW5nLnRjbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzhkMjFlCi0tLSAvZGV2L251bGwKKysrIGIvc3RhL3NjcmlwdHMvY2FyYXZlbF90aW1pbmcudGNsCkBAIC0wLDAgKzEsMTg1IEBACisKKyAgICAgICAgc2V0IDo6ZW52KFVTRVJfUk9PVCkgICAgIi9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3Jpc2NkdWlubyIKKyAgICAgICAgc2V0IDo6ZW52KENBUkFWRUxfUk9PVCkgIi9ob21lL2RpbmVzaGEvd29ya2FyZWEvZWZhYmxlc3MvTVBXLTQvY2FyYXZlbF9vcGVuZnJhbWUiCisgICAgICAgIHNldCA6OmVudihDQVJBVkVMX1BES19ST09UKSAgICAgIi9vcHQvcGRrX21wdzQiCisKKyAgICAgICAgcmVhZF9saWJlcnR5ICQ6OmVudihDQVJBVkVMX1BES19ST09UKS9za3kxMzBBL2xpYnMucmVmL3NreTEzMF9mZF9zY19oZC9saWIvc2t5MTMwX2ZkX3NjX2hkX190dF8wMjVDXzF2ODAubGliCQorCXJlYWRfbGliZXJ0eSAkOjplbnYoQ0FSQVZFTF9QREtfUk9PVCkvc2t5MTMwQS9saWJzLnJlZi9za3kxMzBfc3JhbV9tYWNyb3MvbGliL3NreTEzMF9zcmFtXzJrYnl0ZV8xcncxcl8zMng1MTJfOF9UVF8xcDhWXzI1Qy5saWIJCisJcmVhZF9saWJlcnR5ICQ6OmVudihDQVJBVkVMX1BES19ST09UKS9za3kxMzBBL2xpYnMucmVmL3NreTEzMF9zcmFtX21hY3Jvcy9saWIvc2t5MTMwX3NyYW1fMWtieXRlXzFydzFyXzMyeDI1Nl84X1RUXzFwOFZfMjVDLmxpYgorCXJlYWRfbGliZXJ0eSAkOjplbnYoQ0FSQVZFTF9QREtfUk9PVCkvc2t5MTMwQS9saWJzLnJlZi9za3kxMzBfZmRfc2NfaHZsL2xpYi9za3kxMzBfZmRfc2NfaHZsX190dF8wMjVDXzN2MzAubGliCQorCXJlYWRfbGliZXJ0eSAkOjplbnYoQ0FSQVZFTF9QREtfUk9PVCkvc2t5MTMwQS9saWJzLnJlZi9za3kxMzBfZmRfc2NfaHZsL2xpYi9za3kxMzBfZmRfc2NfaHZsX190dF8wMjVDXzN2MzBfbHYxdjgwLmxpYgkKKwlyZWFkX2xpYmVydHkgJDo6ZW52KENBUkFWRUxfUERLX1JPT1QpL3NreTEzMEEvbGlicy5yZWYvc2t5MTMwX2ZkX2lvL2xpYi9za3kxMzBfZmRfaW9fX3RvcF9ncGlvdjJfdHRfdHRfMDI1Q18xdjgwXzN2MzAubGliCQorCXJlYWRfbGliZXJ0eSAkOjplbnYoQ0FSQVZFTF9QREtfUk9PVCkvc2t5MTMwQS9saWJzLnJlZi9za3kxMzBfZmRfaW8vbGliL3NreTEzMF9mZF9pb19fdG9wX2dyb3VuZF9odmNfd3BhZF90dF8wMjVDXzF2ODBfM3YzMF8zdjMwLmxpYgkKKwlyZWFkX2xpYmVydHkgJDo6ZW52KENBUkFWRUxfUERLX1JPT1QpL3NreTEzMEEvbGlicy5yZWYvc2t5MTMwX2ZkX2lvL2xpYi9za3kxMzBfZmRfaW9fX3RvcF9ncm91bmRfbHZjX3dwYWRfdHRfMDI1Q18xdjgwXzN2MzAubGliCQorCXJlYWRfbGliZXJ0eSAkOjplbnYoQ0FSQVZFTF9QREtfUk9PVCkvc2t5MTMwQS9saWJzLnJlZi9za3kxMzBfZmRfaW8vbGliL3NreTEzMF9mZF9pb19fdG9wX2dyb3VuZF9sdmNfd3BhZF90dF8xMDBDXzF2ODBfM3YzMC5saWIJCisJcmVhZF9saWJlcnR5ICQ6OmVudihDQVJBVkVMX1BES19ST09UKS9za3kxMzBBL2xpYnMucmVmL3NreTEzMF9mZF9pby9saWIvc2t5MTMwX2ZkX2lvX190b3BfcG93ZXJfbHZjX3dwYWRfdHRfMDI1Q18xdjgwXzN2MzBfM3YzMC5saWIJCisJcmVhZF9saWJlcnR5ICQ6OmVudihDQVJBVkVMX1BES19ST09UKS9za3kxMzBBL2xpYnMucmVmL3NreTEzMF9mZF9pby9saWIvc2t5MTMwX2ZkX2lvX190b3BfeHJlczR2Ml90dF90dF8wMjVDXzF2ODBfM3YzMC5saWIJCisJcmVhZF9saWJlcnR5ICQ6OmVudihDQVJBVkVMX1BES19ST09UKS9za3kxMzBBL2xpYnMucmVmL3NreTEzMF9mZF9pby9saWIvc2t5MTMwX2VmX2lvX19ncGlvdjJfcGFkX3R0X3R0XzAyNUNfMXY4MF8zdjMwLmxpYgkKKwlyZWFkX2xpYmVydHkgJDo6ZW52KENBUkFWRUxfUERLX1JPT1QpL3NreTEzMEEvbGlicy5yZWYvc2t5MTMwX2ZkX2lvL2xpYi9za3kxMzBfZWZfaW9fX3ZjY2RfbHZjX2NsYW1wZWRfcGFkX3R0XzAyNUNfMXY4MF8zdjMwXzN2MzAubGliCQorCXJlYWRfbGliZXJ0eSAkOjplbnYoQ0FSQVZFTF9QREtfUk9PVCkvc2t5MTMwQS9saWJzLnJlZi9za3kxMzBfZmRfaW8vbGliL3NreTEzMF9lZl9pb19fdmRkYV9odmNfY2xhbXBlZF9wYWRfdHRfMDI1Q18xdjgwXzN2MzBfM3YzMC5saWIJCisJcmVhZF9saWJlcnR5ICQ6OmVudihDQVJBVkVMX1BES19ST09UKS9za3kxMzBBL2xpYnMucmVmL3NreTEzMF9mZF9pby9saWIvc2t5MTMwX2VmX2lvX192c3NhX2h2Y19jbGFtcGVkX3BhZF90dF8wMjVDXzF2ODBfM3YzMF8zdjMwLmxpYgkKKwlyZWFkX2xpYmVydHkgJDo6ZW52KENBUkFWRUxfUERLX1JPT1QpL3NreTEzMEEvbGlicy5yZWYvc2t5MTMwX2ZkX2lvL2xpYi9za3kxMzBfZWZfaW9fX3Zzc2RfbHZjX2NsYW1wZWQzX3BhZF90dF8wMjVDXzF2ODBfM3YzMC5saWIJCisJcmVhZF9saWJlcnR5ICQ6OmVudihDQVJBVkVMX1BES19ST09UKS9za3kxMzBBL2xpYnMucmVmL3NreTEzMF9mZF9pby9saWIvc2t5MTMwX2VmX2lvX192Y2NkX2x2Y19jbGFtcGVkM19wYWRfdHRfMDI1Q18xdjgwXzN2MzBfM3YzMC5saWIJCisJcmVhZF9saWJlcnR5ICQ6OmVudihDQVJBVkVMX1BES19ST09UKS9za3kxMzBBL2xpYnMucmVmL3NreTEzMF9mZF9pby9saWIvc2t5MTMwX2VmX2lvX192c3NkX2x2Y19jbGFtcGVkX3BhZF90dF8wMjVDXzF2ODBfM3YzMC5saWIJCisJcmVhZF92ZXJpbG9nICQ6OmVudihDQVJBVkVMX1JPT1QpL21nbXRfY29yZV93cmFwcGVyL3Zlcmlsb2cvZ2wvbWdtdF9jb3JlLnYJCisJcmVhZF92ZXJpbG9nICQ6OmVudihDQVJBVkVMX1JPT1QpL21nbXRfY29yZV93cmFwcGVyL3Zlcmlsb2cvZ2wvREZGUkFNLnYJCisJcmVhZF92ZXJpbG9nICQ6OmVudihDQVJBVkVMX1JPT1QpL21nbXRfY29yZV93cmFwcGVyL3Zlcmlsb2cvZ2wvbWdtdF9jb3JlX3dyYXBwZXIudgkKKwlyZWFkX3Zlcmlsb2cgJDo6ZW52KENBUkFWRUxfUk9PVCkvdmVyaWxvZy9nbC9jYXJhdmVsX2Nsb2NraW5nLnYJCisJcmVhZF92ZXJpbG9nICQ6OmVudihDQVJBVkVMX1JPT1QpL3Zlcmlsb2cvZ2wvZGlnaXRhbF9wbGwudgkKKwlyZWFkX3Zlcmlsb2cgJDo6ZW52KENBUkFWRUxfUk9PVCkvdmVyaWxvZy9nbC9ob3VzZWtlZXBpbmcudgkKKwlyZWFkX3Zlcmlsb2cgJDo6ZW52KENBUkFWRUxfUk9PVCkvdmVyaWxvZy9nbC9ncGlvX2xvZ2ljX2hpZ2gudgkKKwlyZWFkX3Zlcmlsb2cgJDo6ZW52KENBUkFWRUxfUk9PVCkvdmVyaWxvZy9nbC9ncGlvX2NvbnRyb2xfYmxvY2sudgkKKwlyZWFkX3Zlcmlsb2cgJDo6ZW52KENBUkFWRUxfUk9PVCkvdmVyaWxvZy9nbC9ncGlvX2RlZmF1bHRzX2Jsb2NrLnYJCisJcmVhZF92ZXJpbG9nICQ6OmVudihDQVJBVkVMX1JPT1QpL3Zlcmlsb2cvZ2wvZ3Bpb19kZWZhdWx0c19ibG9ja18wNDAzLnYJCisJcmVhZF92ZXJpbG9nICQ6OmVudihDQVJBVkVMX1JPT1QpL3Zlcmlsb2cvZ2wvZ3Bpb19kZWZhdWx0c19ibG9ja18xODAzLnYJCisJcmVhZF92ZXJpbG9nICQ6OmVudihDQVJBVkVMX1JPT1QpL3Zlcmlsb2cvZ2wvbWdtdF9wcm90ZWN0X2h2LnYJCisJcmVhZF92ZXJpbG9nICQ6OmVudihDQVJBVkVMX1JPT1QpL3Zlcmlsb2cvZ2wvbXByal9sb2dpY19oaWdoLnYJCisJcmVhZF92ZXJpbG9nICQ6OmVudihDQVJBVkVMX1JPT1QpL3Zlcmlsb2cvZ2wvbXByajJfbG9naWNfaGlnaC52CQorCXJlYWRfdmVyaWxvZyAkOjplbnYoQ0FSQVZFTF9ST09UKS92ZXJpbG9nL2dsL21nbXRfcHJvdGVjdC52CQorCXJlYWRfdmVyaWxvZyAkOjplbnYoQ0FSQVZFTF9ST09UKS92ZXJpbG9nL2dsL3VzZXJfaWRfcHJvZ3JhbW1pbmcudgkKKwlyZWFkX3Zlcmlsb2cgJDo6ZW52KENBUkFWRUxfUk9PVCkvdmVyaWxvZy9nbC94cmVzX2J1Zi52CQorCXJlYWRfdmVyaWxvZyAkOjplbnYoQ0FSQVZFTF9ST09UKS92ZXJpbG9nL2dsL3NwYXJlX2xvZ2ljX2Jsb2NrLnYJCisJcmVhZF92ZXJpbG9nICQ6OmVudihDQVJBVkVMX1JPT1QpL3Zlcmlsb2cvZ2wvY2hpcF9pby52CQorCXJlYWRfdmVyaWxvZyAkOjplbnYoQ0FSQVZFTF9ST09UKS92ZXJpbG9nL2dsL2NhcmF2ZWwudgkKKworCSMgVXNlciBwcm9qZWN0IG5ldGxpc3QKKyAgICAgICAgcmVhZF92ZXJpbG9nICQ6OmVudihVU0VSX1JPT1QpL3Zlcmlsb2cvZ2wvcXNwaW0udgorICAgICAgICByZWFkX3Zlcmlsb2cgJDo6ZW52KFVTRVJfUk9PVCkvdmVyaWxvZy9nbC95aWZpdmUudiAgCisgICAgICAgIHJlYWRfdmVyaWxvZyAkOjplbnYoVVNFUl9ST09UKS92ZXJpbG9nL2dsL3VhcnRfaTJjbV91c2Jfc3BpLnYKKyAgICAgICAgcmVhZF92ZXJpbG9nICQ6OmVudihVU0VSX1JPT1QpL3Zlcmlsb2cvZ2wvd2JfaG9zdC52ICAKKyAgICAgICAgcmVhZF92ZXJpbG9nICQ6OmVudihVU0VSX1JPT1QpL3Zlcmlsb2cvZ2wvd2JfaW50ZXJjb25uZWN0LnYKKyAgICAgICAgcmVhZF92ZXJpbG9nICQ6OmVudihVU0VSX1JPT1QpL3Zlcmlsb2cvZ2wvcGlubXV4LnYKKyAgICAgICAgcmVhZF92ZXJpbG9nICQ6OmVudihVU0VSX1JPT1QpL3Zlcmlsb2cvZ2wvbWJpc3Rfd3JhcHBlci52CisgICAgICAgIHJlYWRfdmVyaWxvZyAkOjplbnYoVVNFUl9ST09UKS92ZXJpbG9nL2dsL3VzZXJfcHJvamVjdF93cmFwcGVyLnYgIAorCisKKwlsaW5rX2Rlc2lnbiBjYXJhdmVsCQorCisJcmVhZF9zcGVmIC1wYXRoIHNvYy9ERkZSQU1fMCAgICAgICAgICAgICAgICAgICAgICAgICQ6OmVudihDQVJBVkVMX1JPT1QpL21nbXRfY29yZV93cmFwcGVyL3NwZWYvREZGUkFNLnNwZWYJCisJcmVhZF9zcGVmIC1wYXRoIHNvYy9jb3JlICAgICAgICAgICAgICAgICAgICAgICAgICAgICQ6OmVudihDQVJBVkVMX1JPT1QpL21nbXRfY29yZV93cmFwcGVyL3NwZWYvbWdtdF9jb3JlLnNwZWYJCisJcmVhZF9zcGVmIC1wYXRoIHNvYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQ6OmVudihDQVJBVkVMX1JPT1QpL21nbXRfY29yZV93cmFwcGVyL3NwZWYvbWdtdF9jb3JlX3dyYXBwZXIuc3BlZgkKKwlyZWFkX3NwZWYgLXBhdGggcGFkZnJhbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDo6ZW52KENBUkFWRUxfUk9PVCkvc3BlZi9jaGlwX2lvLnNwZWYJCisJcmVhZF9zcGVmIC1wYXRoIHJzdGJfbGV2ZWwgICAgICAgICAgICAgICAgICAgICAgICAgICQ6OmVudihDQVJBVkVMX1JPT1QpL3NwZWYveHJlc19idWYuc3BlZgkKKwlyZWFkX3NwZWYgLXBhdGggcGxsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDo6ZW52KENBUkFWRUxfUk9PVCkvc3BlZi9kaWdpdGFsX3BsbC5zcGVmCQorCXJlYWRfc3BlZiAtcGF0aCBob3VzZWtlZXBpbmcgICAgICAgICAgICAgICAgICAgICAgICAkOjplbnYoQ0FSQVZFTF9ST09UKS9zcGVmL2hvdXNla2VlcGluZy5zcGVmCQorCXJlYWRfc3BlZiAtcGF0aCBtZ210X2J1ZmZlcnMvcG93ZXJnb29kX2NoZWNrICAgICAgICAkOjplbnYoQ0FSQVZFTF9ST09UKS9zcGVmL21nbXRfcHJvdGVjdF9odi5zcGVmCQorCXJlYWRfc3BlZiAtcGF0aCBtZ210X2J1ZmZlcnMvbXByal9sb2dpY19oaWdoX2luc3QgICAkOjplbnYoQ0FSQVZFTF9ST09UKS9zcGVmL21wcmpfbG9naWNfaGlnaC5zcGVmCQorCXJlYWRfc3BlZiAtcGF0aCBtZ210X2J1ZmZlcnMvbXByajJfbG9naWNfaGlnaF9pbnN0ICAkOjplbnYoQ0FSQVZFTF9ST09UKS9zcGVmL21wcmoyX2xvZ2ljX2hpZ2guc3BlZgkKKwlyZWFkX3NwZWYgLXBhdGggY2xvY2tpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDo6ZW52KENBUkFWRUxfUk9PVCkvc3BlZi9jYXJhdmVsX2Nsb2NraW5nLnNwZWYKKwlyZWFkX3NwZWYgLXBhdGggbWdtdF9idWZmZXJzICAgICAgICAgICAgICAgICAgICAgICAgJDo6ZW52KENBUkFWRUxfUk9PVCkvc3BlZi9tZ210X3Byb3RlY3Quc3BlZgkKKwlyZWFkX3NwZWYgLXBhdGggXGdwaW9fY29udHJvbF9iaWRpcl8xWzBdICAgICAgICAgICAgJDo6ZW52KENBUkFWRUxfUk9PVCkvc3BlZi9ncGlvX2NvbnRyb2xfYmxvY2suc3BlZgkKKwlyZWFkX3NwZWYgLXBhdGggXGdwaW9fY29udHJvbF9iaWRpcl8xWzFdICAgICAgICAgICAgJDo6ZW52KENBUkFWRUxfUk9PVCkvc3BlZi9ncGlvX2NvbnRyb2xfYmxvY2suc3BlZgkKKwlyZWFkX3NwZWYgLXBhdGggXGdwaW9fY29udHJvbF9iaWRpcl8yWzFdICAgICAgICAgICAgJDo6ZW52KENBUkFWRUxfUk9PVCkvc3BlZi9ncGlvX2NvbnRyb2xfYmxvY2suc3BlZgkKKwlyZWFkX3NwZWYgLXBhdGggXGdwaW9fY29udHJvbF9iaWRpcl8yWzJdICAgICAgICAgICAgJDo6ZW52KENBUkFWRUxfUk9PVCkvc3BlZi9ncGlvX2NvbnRyb2xfYmxvY2suc3BlZgkKKwlyZWFkX3NwZWYgLXBhdGggXGdwaW9fY29udHJvbF9pbl8xWzBdICAgICAgICAgICAgICAgJDo6ZW52KENBUkFWRUxfUk9PVCkvc3BlZi9ncGlvX2NvbnRyb2xfYmxvY2suc3BlZgkKKwlyZWFkX3NwZWYgLXBhdGggXGdwaW9fY29udHJvbF9pbl8xWzEwXSAgICAgICAgICAgICAgJDo6ZW52KENBUkFWRUxfUk9PVCkvc3BlZi9ncGlvX2NvbnRyb2xfYmxvY2suc3BlZgkKKwlyZWFkX3NwZWYgLXBhdGggXGdwaW9fY29udHJvbF9pbl8xWzFdICAgICAgICAgICAgICAgJDo6ZW52KENBUkFWRUxfUk9PVCkvc3BlZi9ncGlvX2NvbnRyb2xfYmxvY2suc3BlZgkKKwlyZWFkX3NwZWYgLXBhdGggXGdwaW9fY29udHJvbF9pbl8xWzJdICAgICAgICAgICAgICAgJDo6ZW52KENBUkFWRUxfUk9PVCkvc3BlZi9ncGlvX2NvbnRyb2xfYmxvY2suc3BlZgkKKwlyZWFkX3NwZWYgLXBhdGggXGdwaW9fY29udHJvbF9pbl8xWzNdICAgICAgICAgICAgICAgJDo6ZW52KENBUkFWRUxfUk9PVCkvc3BlZi9ncGlvX2NvbnRyb2xfYmxvY2suc3BlZgkKKwlyZWFkX3NwZWYgLXBhdGggXGdwaW9fY29udHJvbF9pbl8xWzRdICAgICAgICAgICAgICAgJDo6ZW52KENBUkFWRUxfUk9PVCkvc3BlZi9ncGlvX2NvbnRyb2xfYmxvY2suc3BlZgkKKwlyZWFkX3NwZWYgLXBhdGggXGdwaW9fY29udHJvbF9pbl8xWzVdICAgICAgICAgICAgICAgJDo6ZW52KENBUkFWRUxfUk9PVCkvc3BlZi9ncGlvX2NvbnRyb2xfYmxvY2suc3BlZgkKKwlyZWFkX3NwZWYgLXBhdGggXGdwaW9fY29udHJvbF9pbl8xWzZdICAgICAgICAgICAgICAgJDo6ZW52KENBUkFWRUxfUk9PVCkvc3BlZi9ncGlvX2NvbnRyb2xfYmxvY2suc3BlZgkKKwlyZWFkX3NwZWYgLXBhdGggXGdwaW9fY29udHJvbF9pbl8xWzddICAgICAgICAgICAgICAgJDo6ZW52KENBUkFWRUxfUk9PVCkvc3BlZi9ncGlvX2NvbnRyb2xfYmxvY2suc3BlZgkKKwlyZWFkX3NwZWYgLXBhdGggXGdwaW9fY29udHJvbF9pbl8xWzhdICAgICAgICAgICAgICAgJDo6ZW52KENBUkFWRUxfUk9PVCkvc3BlZi9ncGlvX2NvbnRyb2xfYmxvY2suc3BlZgkKKwlyZWFkX3NwZWYgLXBhdGggXGdwaW9fY29udHJvbF9pbl8xWzldICAgICAgICAgICAgICAgJDo6ZW52KENBUkFWRUxfUk9PVCkvc3BlZi9ncGlvX2NvbnRyb2xfYmxvY2suc3BlZgkKKwlyZWFkX3NwZWYgLXBhdGggXGdwaW9fY29udHJvbF9pbl8xYVswXSAgICAgICAgICAgICAgJDo6ZW52KENBUkFWRUxfUk9PVCkvc3BlZi9ncGlvX2NvbnRyb2xfYmxvY2suc3BlZgkKKwlyZWFkX3NwZWYgLXBhdGggXGdwaW9fY29udHJvbF9pbl8xYVsxXSAgICAgICAgICAgICAgJDo6ZW52KENBUkFWRUxfUk9PVCkvc3BlZi9ncGlvX2NvbnRyb2xfYmxvY2suc3BlZgkKKwlyZWFkX3NwZWYgLXBhdGggXGdwaW9fY29udHJvbF9pbl8xYVsyXSAgICAgICAgICAgICAgJDo6ZW52KENBUkFWRUxfUk9PVCkvc3BlZi9ncGlvX2NvbnRyb2xfYmxvY2suc3BlZgkKKwlyZWFkX3NwZWYgLXBhdGggXGdwaW9fY29udHJvbF9pbl8xYVszXSAgICAgICAgICAgICAgJDo6ZW52KENBUkFWRUxfUk9PVCkvc3BlZi9ncGlvX2NvbnRyb2xfYmxvY2suc3BlZgkKKwlyZWFkX3NwZWYgLXBhdGggXGdwaW9fY29udHJvbF9pbl8xYVs0XSAgICAgICAgICAgICAgJDo6ZW52KENBUkFWRUxfUk9PVCkvc3BlZi9ncGlvX2NvbnRyb2xfYmxvY2suc3BlZgkKKwlyZWFkX3NwZWYgLXBhdGggXGdwaW9fY29udHJvbF9pbl8xYVs1XSAgICAgICAgICAgICAgJDo6ZW52KENBUkFWRUxfUk9PVCkvc3BlZi9ncGlvX2NvbnRyb2xfYmxvY2suc3BlZgkKKwlyZWFkX3NwZWYgLXBhdGggXGdwaW9fY29udHJvbF9pbl8yWzBdICAgICAgICAgICAgICAgJDo6ZW52KENBUkFWRUxfUk9PVCkvc3BlZi9ncGlvX2NvbnRyb2xfYmxvY2suc3BlZgkKKwlyZWFkX3NwZWYgLXBhdGggXGdwaW9fY29udHJvbF9pbl8yWzEwXSAgICAgICAgICAgICAgJDo6ZW52KENBUkFWRUxfUk9PVCkvc3BlZi9ncGlvX2NvbnRyb2xfYmxvY2suc3BlZgkKKwlyZWFkX3NwZWYgLXBhdGggXGdwaW9fY29udHJvbF9pbl8yWzExXSAgICAgICAgICAgICAgJDo6ZW52KENBUkFWRUxfUk9PVCkvc3BlZi9ncGlvX2NvbnRyb2xfYmxvY2suc3BlZgkKKwlyZWFkX3NwZWYgLXBhdGggXGdwaW9fY29udHJvbF9pbl8yWzEyXSAgICAgICAgICAgICAgJDo6ZW52KENBUkFWRUxfUk9PVCkvc3BlZi9ncGlvX2NvbnRyb2xfYmxvY2suc3BlZgkKKwlyZWFkX3NwZWYgLXBhdGggXGdwaW9fY29udHJvbF9pbl8yWzEzXSAgICAgICAgICAgICAgJDo6ZW52KENBUkFWRUxfUk9PVCkvc3BlZi9ncGlvX2NvbnRyb2xfYmxvY2suc3BlZgkKKwlyZWFkX3NwZWYgLXBhdGggXGdwaW9fY29udHJvbF9pbl8yWzE0XSAgICAgICAgICAgICAgJDo6ZW52KENBUkFWRUxfUk9PVCkvc3BlZi9ncGlvX2NvbnRyb2xfYmxvY2suc3BlZgkKKwlyZWFkX3NwZWYgLXBhdGggXGdwaW9fY29udHJvbF9pbl8yWzE1XSAgICAgICAgICAgICAgJDo6ZW52KENBUkFWRUxfUk9PVCkvc3BlZi9ncGlvX2NvbnRyb2xfYmxvY2suc3BlZgkKKwlyZWFkX3NwZWYgLXBhdGggXGdwaW9fY29udHJvbF9pbl8yWzFdICAgICAgICAgICAgICAgJDo6ZW52KENBUkFWRUxfUk9PVCkvc3BlZi9ncGlvX2NvbnRyb2xfYmxvY2suc3BlZgkKKwlyZWFkX3NwZWYgLXBhdGggXGdwaW9fY29udHJvbF9pbl8yWzJdICAgICAgICAgICAgICAgJDo6ZW52KENBUkFWRUxfUk9PVCkvc3BlZi9ncGlvX2NvbnRyb2xfYmxvY2suc3BlZgkKKwlyZWFkX3NwZWYgLXBhdGggXGdwaW9fY29udHJvbF9pbl8yWzNdICAgICAgICAgICAgICAgJDo6ZW52KENBUkFWRUxfUk9PVCkvc3BlZi9ncGlvX2NvbnRyb2xfYmxvY2suc3BlZgkKKwlyZWFkX3NwZWYgLXBhdGggXGdwaW9fY29udHJvbF9pbl8yWzRdICAgICAgICAgICAgICAgJDo6ZW52KENBUkFWRUxfUk9PVCkvc3BlZi9ncGlvX2NvbnRyb2xfYmxvY2suc3BlZgkKKwlyZWFkX3NwZWYgLXBhdGggXGdwaW9fY29udHJvbF9pbl8yWzVdICAgICAgICAgICAgICAgJDo6ZW52KENBUkFWRUxfUk9PVCkvc3BlZi9ncGlvX2NvbnRyb2xfYmxvY2suc3BlZgkKKwlyZWFkX3NwZWYgLXBhdGggXGdwaW9fY29udHJvbF9pbl8yWzZdICAgICAgICAgICAgICAgJDo6ZW52KENBUkFWRUxfUk9PVCkvc3BlZi9ncGlvX2NvbnRyb2xfYmxvY2suc3BlZgkKKwlyZWFkX3NwZWYgLXBhdGggXGdwaW9fY29udHJvbF9pbl8yWzddICAgICAgICAgICAgICAgJDo6ZW52KENBUkFWRUxfUk9PVCkvc3BlZi9ncGlvX2NvbnRyb2xfYmxvY2suc3BlZgkKKwlyZWFkX3NwZWYgLXBhdGggXGdwaW9fY29udHJvbF9pbl8yWzhdICAgICAgICAgICAgICAgJDo6ZW52KENBUkFWRUxfUk9PVCkvc3BlZi9ncGlvX2NvbnRyb2xfYmxvY2suc3BlZgkKKwlyZWFkX3NwZWYgLXBhdGggXGdwaW9fY29udHJvbF9pbl8yWzldICAgICAgICAgICAgICAgJDo6ZW52KENBUkFWRUxfUk9PVCkvc3BlZi9ncGlvX2NvbnRyb2xfYmxvY2suc3BlZgkKKwlyZWFkX3NwZWYgLXBhdGggZ3Bpb19kZWZhdWx0c19ibG9ja18wICAgICAgICAgICAgICAgJDo6ZW52KENBUkFWRUxfUk9PVCkvc3BlZi9ncGlvX2RlZmF1bHRzX2Jsb2NrXzE4MDMuc3BlZgkKKwlyZWFkX3NwZWYgLXBhdGggZ3Bpb19kZWZhdWx0c19ibG9ja18xICAgICAgICAgICAgICAgJDo6ZW52KENBUkFWRUxfUk9PVCkvc3BlZi9ncGlvX2RlZmF1bHRzX2Jsb2NrXzE4MDMuc3BlZgkKKwlyZWFkX3NwZWYgLXBhdGggZ3Bpb19kZWZhdWx0c19ibG9ja18yICAgICAgICAgICAgICAgJDo6ZW52KENBUkFWRUxfUk9PVCkvc3BlZi9ncGlvX2RlZmF1bHRzX2Jsb2NrXzA0MDMuc3BlZgkKKwlyZWFkX3NwZWYgLXBhdGggZ3Bpb19kZWZhdWx0c19ibG9ja18zICAgICAgICAgICAgICAgJDo6ZW52KENBUkFWRUxfUk9PVCkvc3BlZi9ncGlvX2RlZmF1bHRzX2Jsb2NrXzA0MDMuc3BlZgkKKwlyZWFkX3NwZWYgLXBhdGggZ3Bpb19kZWZhdWx0c19ibG9ja180ICAgICAgICAgICAgICAgJDo6ZW52KENBUkFWRUxfUk9PVCkvc3BlZi9ncGlvX2RlZmF1bHRzX2Jsb2NrXzA0MDMuc3BlZgkKKwlyZWFkX3NwZWYgLXBhdGggZ3Bpb19kZWZhdWx0c19ibG9ja181ICAgICAgICAgICAgICAgJDo6ZW52KENBUkFWRUxfUk9PVCkvc3BlZi9ncGlvX2RlZmF1bHRzX2Jsb2NrLnNwZWYJCisJcmVhZF9zcGVmIC1wYXRoIGdwaW9fZGVmYXVsdHNfYmxvY2tfNiAgICAgICAgICAgICAgICQ6OmVudihDQVJBVkVMX1JPT1QpL3NwZWYvZ3Bpb19kZWZhdWx0c19ibG9jay5zcGVmCQorCXJlYWRfc3BlZiAtcGF0aCBncGlvX2RlZmF1bHRzX2Jsb2NrXzcgICAgICAgICAgICAgICAkOjplbnYoQ0FSQVZFTF9ST09UKS9zcGVmL2dwaW9fZGVmYXVsdHNfYmxvY2suc3BlZgkKKwlyZWFkX3NwZWYgLXBhdGggZ3Bpb19kZWZhdWx0c19ibG9ja184ICAgICAgICAgICAgICAgJDo6ZW52KENBUkFWRUxfUk9PVCkvc3BlZi9ncGlvX2RlZmF1bHRzX2Jsb2NrLnNwZWYJCisJcmVhZF9zcGVmIC1wYXRoIGdwaW9fZGVmYXVsdHNfYmxvY2tfOSAgICAgICAgICAgICAgICQ6OmVudihDQVJBVkVMX1JPT1QpL3NwZWYvZ3Bpb19kZWZhdWx0c19ibG9jay5zcGVmCQorCXJlYWRfc3BlZiAtcGF0aCBncGlvX2RlZmF1bHRzX2Jsb2NrXzEwICAgICAgICAgICAgICAkOjplbnYoQ0FSQVZFTF9ST09UKS9zcGVmL2dwaW9fZGVmYXVsdHNfYmxvY2suc3BlZgkKKwlyZWFkX3NwZWYgLXBhdGggZ3Bpb19kZWZhdWx0c19ibG9ja18xMSAgICAgICAgICAgICAgJDo6ZW52KENBUkFWRUxfUk9PVCkvc3BlZi9ncGlvX2RlZmF1bHRzX2Jsb2NrLnNwZWYJCisJcmVhZF9zcGVmIC1wYXRoIGdwaW9fZGVmYXVsdHNfYmxvY2tfMTIgICAgICAgICAgICAgICQ6OmVudihDQVJBVkVMX1JPT1QpL3NwZWYvZ3Bpb19kZWZhdWx0c19ibG9jay5zcGVmCQorCXJlYWRfc3BlZiAtcGF0aCBncGlvX2RlZmF1bHRzX2Jsb2NrXzEzICAgICAgICAgICAgICAkOjplbnYoQ0FSQVZFTF9ST09UKS9zcGVmL2dwaW9fZGVmYXVsdHNfYmxvY2suc3BlZgkKKwlyZWFkX3NwZWYgLXBhdGggZ3Bpb19kZWZhdWx0c19ibG9ja18xNCAgICAgICAgICAgICAgJDo6ZW52KENBUkFWRUxfUk9PVCkvc3BlZi9ncGlvX2RlZmF1bHRzX2Jsb2NrLnNwZWYJCisJcmVhZF9zcGVmIC1wYXRoIGdwaW9fZGVmYXVsdHNfYmxvY2tfMTUgICAgICAgICAgICAgICQ6OmVudihDQVJBVkVMX1JPT1QpL3NwZWYvZ3Bpb19kZWZhdWx0c19ibG9jay5zcGVmCQorCXJlYWRfc3BlZiAtcGF0aCBncGlvX2RlZmF1bHRzX2Jsb2NrXzE2ICAgICAgICAgICAgICAkOjplbnYoQ0FSQVZFTF9ST09UKS9zcGVmL2dwaW9fZGVmYXVsdHNfYmxvY2suc3BlZgkKKwlyZWFkX3NwZWYgLXBhdGggZ3Bpb19kZWZhdWx0c19ibG9ja18xNyAgICAgICAgICAgICAgJDo6ZW52KENBUkFWRUxfUk9PVCkvc3BlZi9ncGlvX2RlZmF1bHRzX2Jsb2NrLnNwZWYJCisJcmVhZF9zcGVmIC1wYXRoIGdwaW9fZGVmYXVsdHNfYmxvY2tfMTggICAgICAgICAgICAgICQ6OmVudihDQVJBVkVMX1JPT1QpL3NwZWYvZ3Bpb19kZWZhdWx0c19ibG9jay5zcGVmCQorCXJlYWRfc3BlZiAtcGF0aCBncGlvX2RlZmF1bHRzX2Jsb2NrXzE5ICAgICAgICAgICAgICAkOjplbnYoQ0FSQVZFTF9ST09UKS9zcGVmL2dwaW9fZGVmYXVsdHNfYmxvY2suc3BlZgkKKwlyZWFkX3NwZWYgLXBhdGggZ3Bpb19kZWZhdWx0c19ibG9ja18yMCAgICAgICAgICAgICAgJDo6ZW52KENBUkFWRUxfUk9PVCkvc3BlZi9ncGlvX2RlZmF1bHRzX2Jsb2NrLnNwZWYJCisJcmVhZF9zcGVmIC1wYXRoIGdwaW9fZGVmYXVsdHNfYmxvY2tfMjEgICAgICAgICAgICAgICQ6OmVudihDQVJBVkVMX1JPT1QpL3NwZWYvZ3Bpb19kZWZhdWx0c19ibG9jay5zcGVmCQorCXJlYWRfc3BlZiAtcGF0aCBncGlvX2RlZmF1bHRzX2Jsb2NrXzIyICAgICAgICAgICAgICAkOjplbnYoQ0FSQVZFTF9ST09UKS9zcGVmL2dwaW9fZGVmYXVsdHNfYmxvY2suc3BlZgkKKwlyZWFkX3NwZWYgLXBhdGggZ3Bpb19kZWZhdWx0c19ibG9ja18yMyAgICAgICAgICAgICAgJDo6ZW52KENBUkFWRUxfUk9PVCkvc3BlZi9ncGlvX2RlZmF1bHRzX2Jsb2NrLnNwZWYJCisJcmVhZF9zcGVmIC1wYXRoIGdwaW9fZGVmYXVsdHNfYmxvY2tfMjQgICAgICAgICAgICAgICQ6OmVudihDQVJBVkVMX1JPT1QpL3NwZWYvZ3Bpb19kZWZhdWx0c19ibG9jay5zcGVmCQorCXJlYWRfc3BlZiAtcGF0aCBncGlvX2RlZmF1bHRzX2Jsb2NrXzI1ICAgICAgICAgICAgICAkOjplbnYoQ0FSQVZFTF9ST09UKS9zcGVmL2dwaW9fZGVmYXVsdHNfYmxvY2suc3BlZgkKKwlyZWFkX3NwZWYgLXBhdGggZ3Bpb19kZWZhdWx0c19ibG9ja18yNiAgICAgICAgICAgICAgJDo6ZW52KENBUkFWRUxfUk9PVCkvc3BlZi9ncGlvX2RlZmF1bHRzX2Jsb2NrLnNwZWYJCisJcmVhZF9zcGVmIC1wYXRoIGdwaW9fZGVmYXVsdHNfYmxvY2tfMjcgICAgICAgICAgICAgICQ6OmVudihDQVJBVkVMX1JPT1QpL3NwZWYvZ3Bpb19kZWZhdWx0c19ibG9jay5zcGVmCQorCXJlYWRfc3BlZiAtcGF0aCBncGlvX2RlZmF1bHRzX2Jsb2NrXzI4ICAgICAgICAgICAgICAkOjplbnYoQ0FSQVZFTF9ST09UKS9zcGVmL2dwaW9fZGVmYXVsdHNfYmxvY2suc3BlZgkKKwlyZWFkX3NwZWYgLXBhdGggZ3Bpb19kZWZhdWx0c19ibG9ja18yOSAgICAgICAgICAgICAgJDo6ZW52KENBUkFWRUxfUk9PVCkvc3BlZi9ncGlvX2RlZmF1bHRzX2Jsb2NrLnNwZWYJCisJcmVhZF9zcGVmIC1wYXRoIGdwaW9fZGVmYXVsdHNfYmxvY2tfMzAgICAgICAgICAgICAgICQ6OmVudihDQVJBVkVMX1JPT1QpL3NwZWYvZ3Bpb19kZWZhdWx0c19ibG9jay5zcGVmCQorCXJlYWRfc3BlZiAtcGF0aCBncGlvX2RlZmF1bHRzX2Jsb2NrXzMxICAgICAgICAgICAgICAkOjplbnYoQ0FSQVZFTF9ST09UKS9zcGVmL2dwaW9fZGVmYXVsdHNfYmxvY2suc3BlZgkKKwlyZWFkX3NwZWYgLXBhdGggZ3Bpb19kZWZhdWx0c19ibG9ja18zMiAgICAgICAgICAgICAgJDo6ZW52KENBUkFWRUxfUk9PVCkvc3BlZi9ncGlvX2RlZmF1bHRzX2Jsb2NrLnNwZWYJCisJcmVhZF9zcGVmIC1wYXRoIGdwaW9fZGVmYXVsdHNfYmxvY2tfMzMgICAgICAgICAgICAgICQ6OmVudihDQVJBVkVMX1JPT1QpL3NwZWYvZ3Bpb19kZWZhdWx0c19ibG9jay5zcGVmCQorCXJlYWRfc3BlZiAtcGF0aCBncGlvX2RlZmF1bHRzX2Jsb2NrXzM0ICAgICAgICAgICAgICAkOjplbnYoQ0FSQVZFTF9ST09UKS9zcGVmL2dwaW9fZGVmYXVsdHNfYmxvY2suc3BlZgkKKwlyZWFkX3NwZWYgLXBhdGggZ3Bpb19kZWZhdWx0c19ibG9ja18zNSAgICAgICAgICAgICAgJDo6ZW52KENBUkFWRUxfUk9PVCkvc3BlZi9ncGlvX2RlZmF1bHRzX2Jsb2NrLnNwZWYJCisJcmVhZF9zcGVmIC1wYXRoIGdwaW9fZGVmYXVsdHNfYmxvY2tfMzYgICAgICAgICAgICAgICQ6OmVudihDQVJBVkVMX1JPT1QpL3NwZWYvZ3Bpb19kZWZhdWx0c19ibG9jay5zcGVmCQorCXJlYWRfc3BlZiAtcGF0aCBncGlvX2RlZmF1bHRzX2Jsb2NrXzM3ICAgICAgICAgICAgICAkOjplbnYoQ0FSQVZFTF9ST09UKS9zcGVmL2dwaW9fZGVmYXVsdHNfYmxvY2suc3BlZgkKKworCSMjIFVzZXIgUHJvamVjdCBTcGVmCisgICAgICAgIHJlYWRfc3BlZiAtcGF0aCBtcHJqL3VfbWJpc3QgICAgICAgICAgICAgICAgICAgICAgICQ6OmVudihVU0VSX1JPT1QpL3NwZWYvbWJpc3Rfd3JhcHBlci5zcGVmCisKKyAgICAgICAgcmVhZF9zcGVmIC1wYXRoIG1wcmovdV9yaXNjdl90b3AgICAgICAgICAkOjplbnYoVVNFUl9ST09UKS9zcGVmL3ljcjFfdG9wX3diLnNwZWYKKyAgICAgICAgcmVhZF9zcGVmIC1wYXRoIG1wcmovdV9waW5tdXggICAgICAgICAgICAkOjplbnYoVVNFUl9ST09UKS9zcGVmL3Bpbm11eC5zcGVmCisgICAgICAgIHJlYWRfc3BlZiAtcGF0aCBtcHJqL3VfcXNwaV9tYXN0ZXIgICAgICAgJDo6ZW52KFVTRVJfUk9PVCkvc3BlZi9xc3BpbV90b3Auc3BlZgorICAgICAgICByZWFkX3NwZWYgLXBhdGggbXByai91X3VhcnRfaTJjX3VzYl9zcGkgICQ6OmVudihVU0VSX1JPT1QpL3NwZWYvdWFydF9pMmNfdXNiX3NwaV90b3Auc3BlZgorICAgICAgICByZWFkX3NwZWYgLXBhdGggbXByai91X3diX2hvc3QgICAgICAgICAgICQ6OmVudihVU0VSX1JPT1QpL3NwZWYvd2JfaG9zdC5zcGVmCisgICAgICAgIHJlYWRfc3BlZiAtcGF0aCBtcHJqL3VfaW50ZXJjb24gICAgICAgICAgJDo6ZW52KFVTRVJfUk9PVCkvc3BlZi93Yl9pbnRlcmNvbm5lY3Quc3BlZgorICAgICAgICByZWFkX3NwZWYgLXBhdGggbXByaiAgICAgICAgICAgICAgICAgICAgICQ6OmVudihVU0VSX1JPT1QpL3NwZWYvdXNlcl9wcm9qZWN0X3dyYXBwZXIuc3BlZiAgCisKKworCXJlYWRfc2RjIC1lY2hvIC4vc2RjL2NhcmF2ZWwuc2RjCQorCWNoZWNrX3NldHVwICAtdmVyYm9zZSA+ICB1bmNvbnN0cmFpbnRzLnJwdAorCXJlcG9ydF9jaGVja3MgLXBhdGhfZGVsYXkgbWluIC1maWVsZHMge3NsZXcgY2FwIGlucHV0IG5ldHMgZmFub3V0fSAtZm9ybWF0IGZ1bGxfY2xvY2tfZXhwYW5kZWQgLWdyb3VwX2NvdW50IDUwCQorCXJlcG9ydF9jaGVja3MgLXBhdGhfZGVsYXkgbWF4IC1maWVsZHMge3NsZXcgY2FwIGlucHV0IG5ldHMgZmFub3V0fSAtZm9ybWF0IGZ1bGxfY2xvY2tfZXhwYW5kZWQgLWdyb3VwX2NvdW50IDUwCQorCXJlcG9ydF93b3JzdF9zbGFjayAtbWF4IAkKKwlyZXBvcnRfd29yc3Rfc2xhY2sgLW1pbiAJCisJcmVwb3J0X2NoZWNrcyAtcGF0aF9kZWxheSBtaW4gLWZpZWxkcyB7c2xldyBjYXAgaW5wdXQgbmV0cyBmYW5vdXR9IC1mb3JtYXQgZnVsbF9jbG9ja19leHBhbmRlZCAtc2xhY2tfbWF4IDAuMTggLWdyb3VwX2NvdW50IDEwCQorCXJlcG9ydF9jaGVja190eXBlcyAtbWF4X3NsZXcgLW1heF9jYXBhY2l0YW5jZSAtbWF4X2Zhbm91dCAtdmlvbGF0b3JzICA+IHNsZXcuY2FwLmZhbm91dC52aW8ucnB0CisKKwllY2hvICJXaXNoYm9uZSBJbnRlcmZhY2UgVGltaW5nLi4uLi4uLi4uLi4uLi4uLi4uIiA+IHdiLm1heC5ycHQKKwllY2hvICJXaXNoYm9uZSBJbnRlcmZhY2UgVGltaW5nLi4uLi4uLi4uLi4uLi4uLi4uIiA+IHdiLm1pbi5ycHQKKwlzZXQgd2JfcG9ydCBbZ2V0X3BpbnMge21wcmovd2JzX2Fkcl9pWypdfV0KKwlzZXQgd2JfcG9ydCBbY29uY2F0ICR3Yl9wb3J0IFtnZXRfcGlucyB7bXByai93YnNfY3ljX2l9XV0KKwlzZXQgd2JfcG9ydCBbY29uY2F0ICR3Yl9wb3J0IFtnZXRfcGlucyB7bXByai93YnNfZGF0X2lbKl19XV0KKwlzZXQgd2JfcG9ydCBbY29uY2F0ICR3Yl9wb3J0IFtnZXRfcGlucyB7bXByai93YnNfc2VsX2lbKl19XV0KKwlzZXQgd2JfcG9ydCBbY29uY2F0ICR3Yl9wb3J0IFtnZXRfcGlucyB7bXByai93YnNfc3RiX2l9XV0KKwlzZXQgd2JfcG9ydCBbY29uY2F0ICR3Yl9wb3J0IFtnZXRfcGlucyB7bXByai93YnNfd2VfaX1dXQorCXNldCB3Yl9wb3J0IFtjb25jYXQgJHdiX3BvcnQgW2dldF9waW5zIHttcHJqL3dic19hY2tfb31dXQorCXNldCB3Yl9wb3J0IFtjb25jYXQgJHdiX3BvcnQgW2dldF9waW5zIHttcHJqL3dic19kYXRfb1sqXX1dXQorCWZvcmVhY2ggcGluICR3Yl9wb3J0IHsKKwkgICBlY2hvICJXaXNoYm9uZSBJbnRlcmZhY2UgVGltaW5nIGZvciA6IFtnZXRfZnVsbF9uYW1lICRwaW5dIiAgPj4gd2IubWF4LnJwdAorICAgICAgICAgICByZXBvcnRfY2hlY2tzIC1wYXRoX2RlbGF5IG1heCAtZmllbGRzIHtzbGV3IGNhcCBpbnB1dCBuZXRzIGZhbm91dH0gLXRocm91Z2ggJHBpbiAgPj4gd2IubWF4LnJwdCAKKyAgICAgICAgfQorCWZvcmVhY2ggcGluICR3Yl9wb3J0IHsKKwkgICBlY2hvICJXaXNoYm9uZSBJbnRlcmZhY2UgVGltaW5nIGZvciBbZ2V0X2Z1bGxfbmFtZSAkcGluXSIgPj4gd2IubWluLnJwdAorICAgICAgICAgICByZXBvcnRfY2hlY2tzIC1wYXRoX2RlbGF5IG1pbiAtZmllbGRzIHtzbGV3IGNhcCBpbnB1dCBuZXRzIGZhbm91dH0gLXRocm91Z2ggJHBpbiAgPj4gd2IubWluLnJwdAorICAgICAgICB9CisgICAgICAgIApkaWZmIC0tZ2l0IGEvc3RhL3NjcmlwdHMvb3Jfd3JpdGVfdmVyaWxvZy50Y2wgYi9zdGEvc2NyaXB0cy9vcl93cml0ZV92ZXJpbG9nLnRjbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjRjOTdlCi0tLSAvZGV2L251bGwKKysrIGIvc3RhL3NjcmlwdHMvb3Jfd3JpdGVfdmVyaWxvZy50Y2wKQEAgLTAsMCArMSwzMCBAQAorIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworc2V0IDo6ZW52KE1FUkdFRF9MRUZfVU5QQURERUQpICIuLi9sZWYvbWVyZ2VkX3VucGFkZGVkLmxlZiIKK3NldCA6OmVudihJTlBVVF9ERUYpICIuLi9kZWYvJDo6ZW52KERFU0lHTl9OQU1FKS5kZWYiCitzZXQgOjplbnYoU0FWRV9ORVRMSVNUKSAibmV0bGlzdC8kOjplbnYoREVTSUdOX05BTUUpLnYiCisKKworaWYge1tjYXRjaCB7cmVhZF9sZWYgJDo6ZW52KE1FUkdFRF9MRUZfVU5QQURERUQpfSBlcnJtc2ddfSB7CisgICAgcHV0cyBzdGRlcnIgJGVycm1zZworICAgIGV4aXQgMQorfQorCitpZiB7W2NhdGNoIHtyZWFkX2RlZiAkOjplbnYoSU5QVVRfREVGKX0gZXJybXNnXX0geworICAgIHB1dHMgc3RkZXJyICRlcnJtc2cKKyAgICBleGl0IDEKK30KKworI3dyaXRlX3Zlcmlsb2cgLWluY2x1ZGVfcHdyX2duZCAkOjplbnYoU0FWRV9QT1dFUl9ORVRMSVNUKQord3JpdGVfdmVyaWxvZyAkOjplbnYoU0FWRV9ORVRMSVNUKQorCmRpZmYgLS1naXQgYS9zdGEvc2NyaXB0cy9zdGEudGNsIGIvc3RhL3NjcmlwdHMvc3RhLnRjbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2ZhYjg4Ci0tLSAvZGV2L251bGwKKysrIGIvc3RhL3NjcmlwdHMvc3RhLnRjbApAQCAtMCwwICsxLDEzMSBAQAorIyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAgMjAyMSAsIERpbmVzaCBBbm5heXlhCisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorIyBTUERYLUZpbGVDb250cmlidXRvcjogTW9kaWZpZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKworc2V0IDo6ZW52KExJQl9GQVNURVNUKSAiJDo6ZW52KFBES19ST09UKS9za3kxMzBBL2xpYnMucmVmL3NreTEzMF9mZF9zY19oZC9saWIvc2t5MTMwX2ZkX3NjX2hkX19mZl9uNDBDXzF2OTUubGliIgorc2V0IDo6ZW52KExJQl9UWVBJQ0FMKSAiJDo6ZW52KFBES19ST09UKS9za3kxMzBBL2xpYnMucmVmL3NreTEzMF9mZF9zY19oZC9saWIvc2t5MTMwX2ZkX3NjX2hkX190dF8wMjVDXzF2ODAubGliIgorc2V0IDo6ZW52KExJQl9TTE9XRVNUKSAiJDo6ZW52KFBES19ST09UKS9za3kxMzBBL2xpYnMucmVmL3NreTEzMF9mZF9zY19oZC9saWIvc2t5MTMwX2ZkX3NjX2hkX19zc18xMDBDXzF2NjAubGliIgorc2V0IDo6ZW52KERFU0lHTl9OQU1FKSAidXNlcl9wcm9qZWN0X3dyYXBwZXIiCitzZXQgOjplbnYoQkFTRV9TRENfRklMRSkgImJhc2Uuc2RjIgorc2V0IDo6ZW52KFNZTlRIX0RSSVZJTkdfQ0VMTCkgInNreTEzMF9mZF9zY19oZF9faW52XzgiCitzZXQgOjplbnYoU1lOVEhfRFJJVklOR19DRUxMX1BJTikgIlkiCitzZXQgOjplbnYoU1lOVEhfQ0FQX0xPQUQpICIxNy42NSIKK3NldCA6OmVudihXSVJFX1JDX0xBWUVSKSAibWV0MSIKKworI1RvIGRpc2FibGUgZW1wdHkgZmlsbGVyIGNlbGwgYmxhY2sgYm94IGdldCBjcmVhdGVkCisjc2V0IGxpbmtfbWFrZV9ibGFja19ib3hlcyAwCisKKworc2V0X2NtZF91bml0cyAtdGltZSBucyAtY2FwYWNpdGFuY2UgcEYgLWN1cnJlbnQgbUEgLXZvbHRhZ2UgViAtcmVzaXN0YW5jZSBrT2htIC1kaXN0YW5jZSB1bQorZGVmaW5lX2Nvcm5lcnMgd2MgYmMgdHQKK3JlYWRfbGliZXJ0eSAtY29ybmVyIGJjICQ6OmVudihMSUJfRkFTVEVTVCkKK3JlYWRfbGliZXJ0eSAtY29ybmVyIHdjICQ6OmVudihMSUJfU0xPV0VTVCkKK3JlYWRfbGliZXJ0eSAtY29ybmVyIHR0ICQ6OmVudihMSUJfVFlQSUNBTCkKKworcmVhZF9saWIgIC1jb3JuZXIgdHQgICAuLi9saWIvc2t5MTMwX3NyYW1fMmtieXRlXzFydzFyXzMyeDUxMl84X1RUXzFwOFZfMjVDLmxpYgorCityZWFkX3Zlcmlsb2cgbmV0bGlzdC9xc3BpbS52CityZWFkX3Zlcmlsb2cgbmV0bGlzdC9zeW50YWNvcmUudiAgCityZWFkX3Zlcmlsb2cgbmV0bGlzdC91YXJ0X2kyY21fdXNiX3NwaS52CityZWFkX3Zlcmlsb2cgbmV0bGlzdC93Yl9ob3N0LnYgIAorcmVhZF92ZXJpbG9nIG5ldGxpc3Qvd2JfaW50ZXJjb25uZWN0LnYKK3JlYWRfdmVyaWxvZyBuZXRsaXN0L3Bpbm11eC52CityZWFkX3Zlcmlsb2cgbmV0bGlzdC9zYXJfYWRjLnYKK3JlYWRfdmVyaWxvZyAuLi92ZXJpbG9nL2dsL3VzZXJfcHJvamVjdF93cmFwcGVyLnYgIAorCitsaW5rX2Rlc2lnbiAgJDo6ZW52KERFU0lHTl9OQU1FKQorCisKK3JlYWRfc3BlZiAtcGF0aCB1X3Jpc2N2X3RvcCAgICAgICAgIC4uL3NwZWYvc2NyMV90b3Bfd2Iuc3BlZgorcmVhZF9zcGVmIC1wYXRoIHVfcGlubXV4ICAgICAgICAgICAgLi4vc3BlZi9waW5tdXguc3BlZgorcmVhZF9zcGVmIC1wYXRoIHVfcXNwaV9tYXN0ZXIgICAgICAgLi4vc3BlZi9xc3BpbV90b3Auc3BlZgorcmVhZF9zcGVmIC1wYXRoIHVfdWFydF9pMmNfdXNiX3NwaSAgLi4vc3BlZi91YXJ0X2kyY191c2Jfc3BpX3RvcC5zcGVmCityZWFkX3NwZWYgLXBhdGggdV93Yl9ob3N0ICAgICAgICAgICAuLi9zcGVmL3diX2hvc3Quc3BlZgorcmVhZF9zcGVmIC1wYXRoIHVfaW50ZXJjb24gICAgICAgICAgLi4vc3BlZi93Yl9pbnRlcmNvbm5lY3Quc3BlZgorcmVhZF9zcGVmICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4vc3BlZi91c2VyX3Byb2plY3Rfd3JhcHBlci5zcGVmICAKKworCityZWFkX3NkYyAtZWNobyAkOjplbnYoQkFTRV9TRENfRklMRSkKKworIyBjaGVjayBmb3IgbWlzc2luZyBjb25zdHJhaW50cworY2hlY2tfc2V0dXAgIC12ZXJib3NlID4gcmVwb3J0cy91bmNvbnN0cmFpbnRzLnJwdAorCitzZXRfb3BlcmF0aW5nX2NvbmRpdGlvbnMgLWFuYWx5c2lzX3R5cGUgc2luZ2xlCisjIFByb3BnYXRlIHRoZSBjbG9jaworc2V0X3Byb3BhZ2F0ZWRfY2xvY2sgW2FsbF9jbG9ja3NdCisKK3JlcG9ydF90bnMKK3JlcG9ydF93bnMKKyNyZXBvcnRfcG93ZXIgCisjCitlY2hvICIjIyMjIyMjIyMjIyMjIyMjIENPUk5FUiA6IFdDIChNQVgpIFRJTUlORyBSZXBvcnQgIyMjIyMjIyMjIyMjIyMjIyMjIyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPiByZXBvcnRzL3RpbWluZ19zc19tYXgucnB0CityZXBvcnRfY2hlY2tzIC11bmlxdWUgLXNsYWNrX21heCAtMC4wIC1wYXRoX2RlbGF5IG1heCAtZ3JvdXBfY291bnQgMTAwICAgICAgICAgIC1jb3JuZXIgd2MgIC1mb3JtYXQgZnVsbF9jbG9ja19leHBhbmRlZCA+PiByZXBvcnRzL3RpbWluZ19zc19tYXgucnB0CityZXBvcnRfY2hlY2tzIC1ncm91cF9jb3VudCAxMDAgICAgICAgIC1wYXRoX2RlbGF5IG1heCAgLXBhdGhfZ3JvdXAgIHdibV9jbGtfaSAgIC1jb3JuZXIgd2MgIC1mb3JtYXQgZnVsbF9jbG9ja19leHBhbmRlZCA+PiByZXBvcnRzL3RpbWluZ19zc19tYXgucnB0CityZXBvcnRfY2hlY2tzIC1ncm91cF9jb3VudCAxMDAgICAgICAgIC1wYXRoX2RlbGF5IG1heCAgLXBhdGhfZ3JvdXAgIHdic19jbGtfaSAgIC1jb3JuZXIgd2MgIC1mb3JtYXQgZnVsbF9jbG9ja19leHBhbmRlZCA+PiByZXBvcnRzL3RpbWluZ19zc19tYXgucnB0CityZXBvcnRfY2hlY2tzIC1ncm91cF9jb3VudCAxMDAgICAgICAgIC1wYXRoX2RlbGF5IG1heCAgLXBhdGhfZ3JvdXAgIGNwdV9jbGsgICAgIC1jb3JuZXIgd2MgIC1mb3JtYXQgZnVsbF9jbG9ja19leHBhbmRlZCA+PiByZXBvcnRzL3RpbWluZ19zc19tYXgucnB0CityZXBvcnRfY2hlY2tzIC1ncm91cF9jb3VudCAxMDAgICAgICAgIC1wYXRoX2RlbGF5IG1heCAgLXBhdGhfZ3JvdXAgIHJ0Y19jbGsgICAgIC1jb3JuZXIgd2MgIC1mb3JtYXQgZnVsbF9jbG9ja19leHBhbmRlZCA+PiByZXBvcnRzL3RpbWluZ19zc19tYXgucnB0CityZXBvcnRfY2hlY2tzIC1ncm91cF9jb3VudCAxMDAgICAgICAgIC1wYXRoX2RlbGF5IG1heCAgLXBhdGhfZ3JvdXAgIGxpbmVfY2xrICAgIC1jb3JuZXIgd2MgIC1mb3JtYXQgZnVsbF9jbG9ja19leHBhbmRlZCA+PiByZXBvcnRzL3RpbWluZ19zc19tYXgucnB0CityZXBvcnRfY2hlY2tzICAgICAgICAgICAgICAgICAgICAgICAgIC1wYXRoX2RlbGF5IG1heCAgICAgICAgICAgICAgICAgICAgICAgICAgIC1jb3JuZXIgd2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PiByZXBvcnRzL3RpbWluZ19zc19tYXgucnB0CisKK2VjaG8gIiMjIyMjIyMjIyMjIyMjIyMgQ09STkVSIDogV0MgKE1JTikgVElNSU5HIFJlcG9ydCAjIyMjIyMjIyMjIyMjIyMjIyMjIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+IHJlcG9ydHMvdGltaW5nX3NzX21pbi5ycHQKK3JlcG9ydF9jaGVja3MgLXVuaXF1ZSAtc2xhY2tfbWF4IC0wLjAgLXBhdGhfZGVsYXkgbWluIC1ncm91cF9jb3VudCAxMDAgICAgICAgICAgLWNvcm5lciB3YyAgLWZvcm1hdCBmdWxsX2Nsb2NrX2V4cGFuZGVkID4+IHJlcG9ydHMvdGltaW5nX3NzX21pbi5ycHQKK3JlcG9ydF9jaGVja3MgLWdyb3VwX2NvdW50IDEwMCAgICAgICAgLXBhdGhfZGVsYXkgbWluICAtcGF0aF9ncm91cCAgd2JtX2Nsa19pICAgLWNvcm5lciB3YyAgLWZvcm1hdCBmdWxsX2Nsb2NrX2V4cGFuZGVkID4+IHJlcG9ydHMvdGltaW5nX3NzX21pbi5ycHQKK3JlcG9ydF9jaGVja3MgLWdyb3VwX2NvdW50IDEwMCAgICAgICAgLXBhdGhfZGVsYXkgbWluICAtcGF0aF9ncm91cCAgd2JzX2Nsa19pICAgLWNvcm5lciB3YyAgLWZvcm1hdCBmdWxsX2Nsb2NrX2V4cGFuZGVkID4+IHJlcG9ydHMvdGltaW5nX3NzX21pbi5ycHQKK3JlcG9ydF9jaGVja3MgLWdyb3VwX2NvdW50IDEwMCAgICAgICAgLXBhdGhfZGVsYXkgbWluICAtcGF0aF9ncm91cCAgY3B1X2NsayAgICAgLWNvcm5lciB3YyAgLWZvcm1hdCBmdWxsX2Nsb2NrX2V4cGFuZGVkID4+IHJlcG9ydHMvdGltaW5nX3NzX21pbi5ycHQKK3JlcG9ydF9jaGVja3MgLWdyb3VwX2NvdW50IDEwMCAgICAgICAgLXBhdGhfZGVsYXkgbWluICAtcGF0aF9ncm91cCAgcnRjX2NsayAgICAgLWNvcm5lciB3YyAgLWZvcm1hdCBmdWxsX2Nsb2NrX2V4cGFuZGVkID4+IHJlcG9ydHMvdGltaW5nX3NzX21pbi5ycHQKK3JlcG9ydF9jaGVja3MgLWdyb3VwX2NvdW50IDEwMCAgICAgICAgLXBhdGhfZGVsYXkgbWluICAtcGF0aF9ncm91cCAgbGluZV9jbGsgICAgLWNvcm5lciB3YyAgLWZvcm1hdCBmdWxsX2Nsb2NrX2V4cGFuZGVkID4+IHJlcG9ydHMvdGltaW5nX3NzX21pbi5ycHQKK3JlcG9ydF9jaGVja3MgICAgICAgICAgICAgICAgICAgICAgICAgLXBhdGhfZGVsYXkgbWluICAgICAgICAgICAgICAgICAgICAgICAgICAgLWNvcm5lciB3YyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4+IHJlcG9ydHMvdGltaW5nX3NzX21pbi5ycHQKKworZWNobyAiIyMjIyMjIyMjIyMjIyMjIyBDT1JORVIgOiBCQyAoTUFYKSBUSU1JTkcgUmVwb3J0ICMjIyMjIyMjIyMjIyMjIyMjIyMiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4gcmVwb3J0cy90aW1pbmdfZmZfbWF4LnJwdAorcmVwb3J0X2NoZWNrcyAtdW5pcXVlIC1zbGFja19tYXggLTAuMCAtcGF0aF9kZWxheSBtYXggLWdyb3VwX2NvdW50IDEwMCAgICAgICAgICAtY29ybmVyIGJjICAtZm9ybWF0IGZ1bGxfY2xvY2tfZXhwYW5kZWQgPj4gcmVwb3J0cy90aW1pbmdfZmZfbWF4LnJwdAorcmVwb3J0X2NoZWNrcyAtZ3JvdXBfY291bnQgMTAwICAgICAgICAtcGF0aF9kZWxheSBtYXggIC1wYXRoX2dyb3VwICB3Ym1fY2xrX2kgICAtY29ybmVyIGJjICAtZm9ybWF0IGZ1bGxfY2xvY2tfZXhwYW5kZWQgPj4gcmVwb3J0cy90aW1pbmdfZmZfbWF4LnJwdAorcmVwb3J0X2NoZWNrcyAtZ3JvdXBfY291bnQgMTAwICAgICAgICAtcGF0aF9kZWxheSBtYXggIC1wYXRoX2dyb3VwICB3YnNfY2xrX2kgICAtY29ybmVyIGJjICAtZm9ybWF0IGZ1bGxfY2xvY2tfZXhwYW5kZWQgPj4gcmVwb3J0cy90aW1pbmdfZmZfbWF4LnJwdAorcmVwb3J0X2NoZWNrcyAtZ3JvdXBfY291bnQgMTAwICAgICAgICAtcGF0aF9kZWxheSBtYXggIC1wYXRoX2dyb3VwICBjcHVfY2xrICAgICAtY29ybmVyIGJjICAtZm9ybWF0IGZ1bGxfY2xvY2tfZXhwYW5kZWQgPj4gcmVwb3J0cy90aW1pbmdfZmZfbWF4LnJwdAorcmVwb3J0X2NoZWNrcyAtZ3JvdXBfY291bnQgMTAwICAgICAgICAtcGF0aF9kZWxheSBtYXggIC1wYXRoX2dyb3VwICBydGNfY2xrICAgICAtY29ybmVyIGJjICAtZm9ybWF0IGZ1bGxfY2xvY2tfZXhwYW5kZWQgPj4gcmVwb3J0cy90aW1pbmdfZmZfbWF4LnJwdAorcmVwb3J0X2NoZWNrcyAtZ3JvdXBfY291bnQgMTAwICAgICAgICAtcGF0aF9kZWxheSBtYXggIC1wYXRoX2dyb3VwICBsaW5lX2NsayAgICAtY29ybmVyIGJjICAtZm9ybWF0IGZ1bGxfY2xvY2tfZXhwYW5kZWQgPj4gcmVwb3J0cy90aW1pbmdfZmZfbWF4LnJwdAorcmVwb3J0X2NoZWNrcyAgICAgICAgICAgICAgICAgICAgICAgICAtcGF0aF9kZWxheSBtYXggICAgICAgICAgICAgICAgICAgICAgICAgICAtY29ybmVyIGJjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gcmVwb3J0cy90aW1pbmdfZmZfbWF4LnJwdAorCitlY2hvICIjIyMjIyMjIyMjIyMjIyMjIENPUk5FUiA6IEJDIChNSU4pIFRJTUlORyBSZXBvcnQgIyMjIyMjIyMjIyMjIyMjIyMjIyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPiByZXBvcnRzL3RpbWluZ19mZl9taW4ucnB0CityZXBvcnRfY2hlY2tzIC11bmlxdWUgLXNsYWNrX21heCAtMC4wIC1wYXRoX2RlbGF5IG1pbiAtZ3JvdXBfY291bnQgMTAwICAgICAgICAgIC1jb3JuZXIgYmMgIC1mb3JtYXQgZnVsbF9jbG9ja19leHBhbmRlZCA+PiByZXBvcnRzL3RpbWluZ19mZl9taW4ucnB0CityZXBvcnRfY2hlY2tzIC1ncm91cF9jb3VudCAxMDAgICAgICAgIC1wYXRoX2RlbGF5IG1pbiAgLXBhdGhfZ3JvdXAgIHdibV9jbGtfaSAgIC1jb3JuZXIgYmMgIC1mb3JtYXQgZnVsbF9jbG9ja19leHBhbmRlZCA+PiByZXBvcnRzL3RpbWluZ19mZl9taW4ucnB0CityZXBvcnRfY2hlY2tzIC1ncm91cF9jb3VudCAxMDAgICAgICAgIC1wYXRoX2RlbGF5IG1pbiAgLXBhdGhfZ3JvdXAgIHdic19jbGtfaSAgIC1jb3JuZXIgYmMgIC1mb3JtYXQgZnVsbF9jbG9ja19leHBhbmRlZCA+PiByZXBvcnRzL3RpbWluZ19mZl9taW4ucnB0CityZXBvcnRfY2hlY2tzIC1ncm91cF9jb3VudCAxMDAgICAgICAgIC1wYXRoX2RlbGF5IG1pbiAgLXBhdGhfZ3JvdXAgIGNwdV9jbGsgICAgIC1jb3JuZXIgYmMgIC1mb3JtYXQgZnVsbF9jbG9ja19leHBhbmRlZCA+PiByZXBvcnRzL3RpbWluZ19mZl9taW4ucnB0CityZXBvcnRfY2hlY2tzIC1ncm91cF9jb3VudCAxMDAgICAgICAgIC1wYXRoX2RlbGF5IG1pbiAgLXBhdGhfZ3JvdXAgIHJ0Y19jbGsgICAgIC1jb3JuZXIgYmMgIC1mb3JtYXQgZnVsbF9jbG9ja19leHBhbmRlZCA+PiByZXBvcnRzL3RpbWluZ19mZl9taW4ucnB0CityZXBvcnRfY2hlY2tzIC1ncm91cF9jb3VudCAxMDAgICAgICAgIC1wYXRoX2RlbGF5IG1pbiAgLXBhdGhfZ3JvdXAgIGxpbmVfY2xrICAgIC1jb3JuZXIgYmMgIC1mb3JtYXQgZnVsbF9jbG9ja19leHBhbmRlZCA+PiByZXBvcnRzL3RpbWluZ19mZl9taW4ucnB0CityZXBvcnRfY2hlY2tzICAgICAgICAgICAgICAgICAgICAgICAgIC1wYXRoX2RlbGF5IG1pbiAgICAgICAgICAgICAgICAgICAgICAgICAgIC1jb3JuZXIgYmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PiByZXBvcnRzL3RpbWluZ19mZl9taW4ucnB0CisKKworZWNobyAiIyMjIyMjIyMjIyMjIyMjIyBDT1JORVIgOiBUVCAoTUFYKSBUSU1JTkcgUmVwb3J0ICMjIyMjIyMjIyMjIyMjIyMjIyMiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4gcmVwb3J0cy90aW1pbmdfdHRfbWF4LnJwdAorcmVwb3J0X2NoZWNrcyAtdW5pcXVlIC1zbGFja19tYXggLTAuMCAtcGF0aF9kZWxheSBtYXggLWdyb3VwX2NvdW50IDEwMCAgICAgICAgICAtY29ybmVyIHR0ICAtZm9ybWF0IGZ1bGxfY2xvY2tfZXhwYW5kZWQgPj4gcmVwb3J0cy90aW1pbmdfdHRfbWF4LnJwdAorcmVwb3J0X2NoZWNrcyAtZ3JvdXBfY291bnQgMTAwICAgICAgICAtcGF0aF9kZWxheSBtYXggIC1wYXRoX2dyb3VwICB3Ym1fY2xrX2kgICAtY29ybmVyIHR0ICAtZm9ybWF0IGZ1bGxfY2xvY2tfZXhwYW5kZWQgPj4gcmVwb3J0cy90aW1pbmdfdHRfbWF4LnJwdAorcmVwb3J0X2NoZWNrcyAtZ3JvdXBfY291bnQgMTAwICAgICAgICAtcGF0aF9kZWxheSBtYXggIC1wYXRoX2dyb3VwICB3YnNfY2xrX2kgICAtY29ybmVyIHR0ICAtZm9ybWF0IGZ1bGxfY2xvY2tfZXhwYW5kZWQgPj4gcmVwb3J0cy90aW1pbmdfdHRfbWF4LnJwdAorcmVwb3J0X2NoZWNrcyAtZ3JvdXBfY291bnQgMTAwICAgICAgICAtcGF0aF9kZWxheSBtYXggIC1wYXRoX2dyb3VwICBjcHVfY2xrICAgICAtY29ybmVyIHR0ICAtZm9ybWF0IGZ1bGxfY2xvY2tfZXhwYW5kZWQgPj4gcmVwb3J0cy90aW1pbmdfdHRfbWF4LnJwdAorcmVwb3J0X2NoZWNrcyAtZ3JvdXBfY291bnQgMTAwICAgICAgICAtcGF0aF9kZWxheSBtYXggIC1wYXRoX2dyb3VwICBydGNfY2xrICAgICAtY29ybmVyIHR0ICAtZm9ybWF0IGZ1bGxfY2xvY2tfZXhwYW5kZWQgPj4gcmVwb3J0cy90aW1pbmdfdHRfbWF4LnJwdAorcmVwb3J0X2NoZWNrcyAtZ3JvdXBfY291bnQgMTAwICAgICAgICAtcGF0aF9kZWxheSBtYXggIC1wYXRoX2dyb3VwICBsaW5lX2NsayAgICAtY29ybmVyIHR0ICAtZm9ybWF0IGZ1bGxfY2xvY2tfZXhwYW5kZWQgPj4gcmVwb3J0cy90aW1pbmdfdHRfbWF4LnJwdAorcmVwb3J0X2NoZWNrcyAgICAgICAgICAgICAgICAgICAgICAgICAtcGF0aF9kZWxheSBtYXggICAgICAgICAgICAgICAgICAgICAgICAgICAtY29ybmVyIHR0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPj4gcmVwb3J0cy90aW1pbmdfdHRfbWF4LnJwdAorCitlY2hvICIjIyMjIyMjIyMjIyMjIyMjIENPUk5FUiA6IFRUIChNSU4pIFRJTUlORyBSZXBvcnQgIyMjIyMjIyMjIyMjIyMjIyMjIyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPiByZXBvcnRzL3RpbWluZ190dF9taW4ucnB0CityZXBvcnRfY2hlY2tzIC11bmlxdWUgLXNsYWNrX21heCAtMC4wIC1wYXRoX2RlbGF5IG1pbiAtZ3JvdXBfY291bnQgMTAwICAgICAgICAgIC1jb3JuZXIgdHQgIC1mb3JtYXQgZnVsbF9jbG9ja19leHBhbmRlZCA+PiByZXBvcnRzL3RpbWluZ190dF9taW4ucnB0CityZXBvcnRfY2hlY2tzIC1ncm91cF9jb3VudCAxMDAgICAgICAgIC1wYXRoX2RlbGF5IG1pbiAgLXBhdGhfZ3JvdXAgIHdibV9jbGtfaSAgIC1jb3JuZXIgdHQgIC1mb3JtYXQgZnVsbF9jbG9ja19leHBhbmRlZCA+PiByZXBvcnRzL3RpbWluZ190dF9taW4ucnB0CityZXBvcnRfY2hlY2tzIC1ncm91cF9jb3VudCAxMDAgICAgICAgIC1wYXRoX2RlbGF5IG1pbiAgLXBhdGhfZ3JvdXAgIHdic19jbGtfaSAgIC1jb3JuZXIgdHQgIC1mb3JtYXQgZnVsbF9jbG9ja19leHBhbmRlZCA+PiByZXBvcnRzL3RpbWluZ190dF9taW4ucnB0CityZXBvcnRfY2hlY2tzIC1ncm91cF9jb3VudCAxMDAgICAgICAgIC1wYXRoX2RlbGF5IG1pbiAgLXBhdGhfZ3JvdXAgIGNwdV9jbGsgICAgIC1jb3JuZXIgdHQgIC1mb3JtYXQgZnVsbF9jbG9ja19leHBhbmRlZCA+PiByZXBvcnRzL3RpbWluZ190dF9taW4ucnB0CityZXBvcnRfY2hlY2tzIC1ncm91cF9jb3VudCAxMDAgICAgICAgIC1wYXRoX2RlbGF5IG1pbiAgLXBhdGhfZ3JvdXAgIHJ0Y19jbGsgICAgIC1jb3JuZXIgdHQgIC1mb3JtYXQgZnVsbF9jbG9ja19leHBhbmRlZCA+PiByZXBvcnRzL3RpbWluZ190dF9taW4ucnB0CityZXBvcnRfY2hlY2tzIC1ncm91cF9jb3VudCAxMDAgICAgICAgIC1wYXRoX2RlbGF5IG1pbiAgLXBhdGhfZ3JvdXAgIGxpbmVfY2xrICAgIC1jb3JuZXIgdHQgIC1mb3JtYXQgZnVsbF9jbG9ja19leHBhbmRlZCA+PiByZXBvcnRzL3RpbWluZ190dF9taW4ucnB0CityZXBvcnRfY2hlY2tzICAgICAgICAgICAgICAgICAgICAgICAgIC1wYXRoX2RlbGF5IG1pbiAgICAgICAgICAgICAgICAgICAgICAgICAgIC1jb3JuZXIgdHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PiByZXBvcnRzL3RpbWluZ190dF9taW4ucnB0CisKKworcmVwb3J0X2NoZWNrcyAtcGF0aF9kZWxheSBtaW5fbWF4IAorCisjZXhpdApkaWZmIC0tZ2l0IGEvc3RhL3NkYy9jYXJhdmVsLnNkYyBiL3N0YS9zZGMvY2FyYXZlbC5zZGMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzExMDE0YQotLS0gL2Rldi9udWxsCisrKyBiL3N0YS9zZGMvY2FyYXZlbC5zZGMKQEAgLTAsMCArMSwyNTUgQEAKK3NldCA6OmVudihJT19QQ1QpICIwLjIiCitzZXQgOjplbnYoU1lOVEhfTUFYX0ZBTk9VVCkgIjUiCitzZXQgOjplbnYoU1lOVEhfQ0FQX0xPQUQpICIxIgorc2V0IDo6ZW52KFNZTlRIX1RJTUlOR19ERVJBVEUpIDAuMDUKK3NldCA6OmVudihTWU5USF9DTE9DS19TRVRVUF9VTkNFUlRBSU5JVFkpIDAuMjUKK3NldCA6OmVudihTWU5USF9DTE9DS19IT0xEX1VOQ0VSVEFJTklUWSkgMC4yNQorc2V0IDo6ZW52KFNZTlRIX0NMT0NLX1RSQU5TSVRJT04pIDAuMTUKKworIyMgTUFTVEVSIENMT0NLUworY3JlYXRlX2Nsb2NrIFtnZXRfcG9ydHMgeyJjbG9jayJ9IF0gLW5hbWUgImNsb2NrIiAgLXBlcmlvZCAyNQorY3JlYXRlX2Nsb2NrIFtnZXRfcGlucyBjbG9ja2luZy91c2VyX2NsayBdIC1uYW1lICJ1c2VyX2NsazIiICAtcGVyaW9kIDI1CisjY3JlYXRlX2Nsb2NrIFtnZXRfcGlucyAgaG91c2VrZWVwaW5nL184ODQ3Xy9YIF0gLW5hbWUgImNzY2xrIiAgLXBlcmlvZCAyNQorI2NyZWF0ZV9jbG9jayBbZ2V0X3BpbnMgIGNsb2NraW5nL3BsbF9jbGsgXSAtbmFtZSAicGxsX2NsayIgIC1wZXJpb2QgMjUKKyNjcmVhdGVfY2xvY2sgW2dldF9waW5zICBjbG9ja2luZy9wbGxfY2xrOTAgXSAtbmFtZSAicGxsX2NsazkwIiAgLXBlcmlvZCAyNQorCitjcmVhdGVfZ2VuZXJhdGVkX2Nsb2NrIC1uYW1lIHdiX2NsayAtYWRkIC1zb3VyY2UgW2dldF9wb3J0cyB7Y2xvY2t9XSAtbWFzdGVyX2Nsb2NrIFtnZXRfY2xvY2tzIGNsb2NrXSAtZGl2aWRlX2J5IDEgLWNvbW1lbnQge1dpc2hib25lIFVzZXIgQ2xvY2t9IFtnZXRfcGlucyBtcHJqL3diX2Nsa19pXQorY3JlYXRlX2Nsb2NrIC1uYW1lIHdic19jbGtfaSAgIC1wZXJpb2QgMTUuMDAwMCAgW2dldF9waW5zIHttcHJqL3Vfd2JfaG9zdC93YnNfY2xrX291dH1dCitjcmVhdGVfY2xvY2sgLW5hbWUgY3B1X3JlZl9jbGsgLXBlcmlvZCAxMC4wMDAwICBbZ2V0X3BpbnMge21wcmovdV93Yl9ob3N0L3VfY3B1X3JlZl9zZWwudV9tdXgvWH1dCitjcmVhdGVfY2xvY2sgLW5hbWUgY3B1X2NsayAgICAgLXBlcmlvZCAyMC4wMDAwICBbZ2V0X3BpbnMge21wcmovdV93Yl9ob3N0L2NwdV9jbGt9XQorY3JlYXRlX2Nsb2NrIC1uYW1lIHJ0Y19jbGsgICAgIC1wZXJpb2QgNTAuMDAwMCAgW2dldF9waW5zIHttcHJqL3Vfd2JfaG9zdC9ydGNfY2xrfV0KK2NyZWF0ZV9jbG9jayAtbmFtZSB1c2JfY2xrICAgICAtcGVyaW9kIDIwLjAwMDAgIFtnZXRfcGlucyB7bXByai91X3diX2hvc3QvdXNiX2Nsa31dCitjcmVhdGVfY2xvY2sgLW5hbWUgdWFydHNfY2xrICAgLXBlcmlvZCAxMDAuMDAwMCBbZ2V0X3BpbnMge21wcmovdV91YXJ0X2kyY191c2Jfc3BpL3VfdWFydF9jb3JlLnVfbGluZWNsa19idWYudV9tdXgvWH1dCitjcmVhdGVfY2xvY2sgLW5hbWUgdWFydG1fY2xrICAgLXBlcmlvZCAxMDAuMDAwMCBbZ2V0X3BpbnMge21wcmovdV93Yl9ob3N0L3VfdWFydDJ3Yi51X2NvcmUudV91YXJ0X2Nsay51X211eC9YfV0KKworY3JlYXRlX2dlbmVyYXRlZF9jbG9jayAtbmFtZSBtZW1fY2xrMCAtYWRkIC1zb3VyY2UgW2dldF9waW5zIHttcHJqL3Vfd2JfaG9zdC93YnNfY2xrX291dH1dIC1tYXN0ZXJfY2xvY2sgW2dldF9jbG9ja3Mgd2JzX2Nsa19pXSAtZGl2aWRlX2J5IDEgLWNvbW1lbnQge21lbW9yeSBDbG9ja30gW2dldF9waW5zIG1wcmovdV9tYmlzdC91X21iaXN0Lm1lbV9ub1swXS51X21lbV9zZWwudV9tZW1fY2xrX3NlbC51X211eC9YXQorY3JlYXRlX2dlbmVyYXRlZF9jbG9jayAtbmFtZSBtZW1fY2xrMSAtYWRkIC1zb3VyY2UgW2dldF9waW5zIHttcHJqL3Vfd2JfaG9zdC93YnNfY2xrX291dH1dIC1tYXN0ZXJfY2xvY2sgW2dldF9jbG9ja3Mgd2JzX2Nsa19pXSAtZGl2aWRlX2J5IDEgLWNvbW1lbnQge21lbW9yeSBDbG9ja30gW2dldF9waW5zIG1wcmovdV9tYmlzdC91X21iaXN0Lm1lbV9ub1sxXS51X21lbV9zZWwudV9tZW1fY2xrX3NlbC51X211eC9YXQorY3JlYXRlX2dlbmVyYXRlZF9jbG9jayAtbmFtZSBtZW1fY2xrMiAtYWRkIC1zb3VyY2UgW2dldF9waW5zIHttcHJqL3Vfd2JfaG9zdC93YnNfY2xrX291dH1dIC1tYXN0ZXJfY2xvY2sgW2dldF9jbG9ja3Mgd2JzX2Nsa19pXSAtZGl2aWRlX2J5IDEgLWNvbW1lbnQge21lbW9yeSBDbG9ja30gW2dldF9waW5zIG1wcmovdV9tYmlzdC91X21iaXN0Lm1lbV9ub1syXS51X21lbV9zZWwudV9tZW1fY2xrX3NlbC51X211eC9YXQorY3JlYXRlX2dlbmVyYXRlZF9jbG9jayAtbmFtZSBtZW1fY2xrMyAtYWRkIC1zb3VyY2UgW2dldF9waW5zIHttcHJqL3Vfd2JfaG9zdC93YnNfY2xrX291dH1dIC1tYXN0ZXJfY2xvY2sgW2dldF9jbG9ja3Mgd2JzX2Nsa19pXSAtZGl2aWRlX2J5IDEgLWNvbW1lbnQge21lbW9yeSBDbG9ja30gW2dldF9waW5zIG1wcmovdV9tYmlzdC91X21iaXN0Lm1lbV9ub1szXS51X21lbV9zZWwudV9tZW1fY2xrX3NlbC51X211eC9YXQorCisjIyBDYXNlIGFuYWx5c2lzCisKK3NldF9jYXNlX2FuYWx5c2lzIDAgW2dldF9waW5zIHttcHJqL3VfaW50ZXJjb24vY2ZnX2Nza2Ffd2lbMF19XQorc2V0X2Nhc2VfYW5hbHlzaXMgMCBbZ2V0X3BpbnMge21wcmovdV9pbnRlcmNvbi9jZmdfY3NrYV93aVsxXX1dCitzZXRfY2FzZV9hbmFseXNpcyAwIFtnZXRfcGlucyB7bXByai91X2ludGVyY29uL2NmZ19jc2thX3dpWzJdfV0KK3NldF9jYXNlX2FuYWx5c2lzIDEgW2dldF9waW5zIHttcHJqL3VfaW50ZXJjb24vY2ZnX2Nza2Ffd2lbM119XQorCitzZXRfY2FzZV9hbmFseXNpcyAwIFtnZXRfcGlucyB7bXByai91X3Bpbm11eC9jZmdfY3NrYV9waW5tdXhbMF19XQorc2V0X2Nhc2VfYW5hbHlzaXMgMCBbZ2V0X3BpbnMge21wcmovdV9waW5tdXgvY2ZnX2Nza2FfcGlubXV4WzFdfV0KK3NldF9jYXNlX2FuYWx5c2lzIDAgW2dldF9waW5zIHttcHJqL3VfcGlubXV4L2NmZ19jc2thX3Bpbm11eFsyXX1dCitzZXRfY2FzZV9hbmFseXNpcyAxIFtnZXRfcGlucyB7bXByai91X3Bpbm11eC9jZmdfY3NrYV9waW5tdXhbM119XQorCitzZXRfY2FzZV9hbmFseXNpcyAwIFtnZXRfcGlucyB7bXByai91X3FzcGlfbWFzdGVyL2NmZ19jc2thX3NwX2NvWzBdfV0KK3NldF9jYXNlX2FuYWx5c2lzIDAgW2dldF9waW5zIHttcHJqL3VfcXNwaV9tYXN0ZXIvY2ZnX2Nza2Ffc3BfY29bMV19XQorc2V0X2Nhc2VfYW5hbHlzaXMgMCBbZ2V0X3BpbnMge21wcmovdV9xc3BpX21hc3Rlci9jZmdfY3NrYV9zcF9jb1syXX1dCitzZXRfY2FzZV9hbmFseXNpcyAwIFtnZXRfcGlucyB7bXByai91X3FzcGlfbWFzdGVyL2NmZ19jc2thX3NwX2NvWzNdfV0KKworc2V0X2Nhc2VfYW5hbHlzaXMgMCBbZ2V0X3BpbnMge21wcmovdV9xc3BpX21hc3Rlci9jZmdfY3NrYV9zcGlbMF19XQorc2V0X2Nhc2VfYW5hbHlzaXMgMCBbZ2V0X3BpbnMge21wcmovdV9xc3BpX21hc3Rlci9jZmdfY3NrYV9zcGlbMV19XQorc2V0X2Nhc2VfYW5hbHlzaXMgMCBbZ2V0X3BpbnMge21wcmovdV9xc3BpX21hc3Rlci9jZmdfY3NrYV9zcGlbMl19XQorc2V0X2Nhc2VfYW5hbHlzaXMgMSBbZ2V0X3BpbnMge21wcmovdV9xc3BpX21hc3Rlci9jZmdfY3NrYV9zcGlbM119XQorCitzZXRfY2FzZV9hbmFseXNpcyAwIFtnZXRfcGlucyB7bXByai91X3Jpc2N2X3RvcC9jZmdfY3NrYV9yaXNjdlswXX1dCitzZXRfY2FzZV9hbmFseXNpcyAwIFtnZXRfcGlucyB7bXByai91X3Jpc2N2X3RvcC9jZmdfY3NrYV9yaXNjdlsxXX1dCitzZXRfY2FzZV9hbmFseXNpcyAwIFtnZXRfcGlucyB7bXByai91X3Jpc2N2X3RvcC9jZmdfY3NrYV9yaXNjdlsyXX1dCitzZXRfY2FzZV9hbmFseXNpcyAxIFtnZXRfcGlucyB7bXByai91X3Jpc2N2X3RvcC9jZmdfY3NrYV9yaXNjdlszXX1dCisKK3NldF9jYXNlX2FuYWx5c2lzIDEgW2dldF9waW5zIHttcHJqL3Vfd2JfaG9zdC9jZmdfY3NrYV93aFswXX1dCitzZXRfY2FzZV9hbmFseXNpcyAwIFtnZXRfcGlucyB7bXByai91X3diX2hvc3QvY2ZnX2Nza2Ffd2hbMV19XQorc2V0X2Nhc2VfYW5hbHlzaXMgMCBbZ2V0X3BpbnMge21wcmovdV93Yl9ob3N0L2NmZ19jc2thX3doWzJdfV0KK3NldF9jYXNlX2FuYWx5c2lzIDEgW2dldF9waW5zIHttcHJqL3Vfd2JfaG9zdC9jZmdfY3NrYV93aFszXX1dCisKK3NldF9jYXNlX2FuYWx5c2lzIDEgW2dldF9waW5zIHttcHJqL3VfdWFydF9pMmNfdXNiX3NwaS9jZmdfY3NrYV91YXJ0WzBdfV0KK3NldF9jYXNlX2FuYWx5c2lzIDEgW2dldF9waW5zIHttcHJqL3VfdWFydF9pMmNfdXNiX3NwaS9jZmdfY3NrYV91YXJ0WzFdfV0KK3NldF9jYXNlX2FuYWx5c2lzIDEgW2dldF9waW5zIHttcHJqL3VfdWFydF9pMmNfdXNiX3NwaS9jZmdfY3NrYV91YXJ0WzJdfV0KK3NldF9jYXNlX2FuYWx5c2lzIDAgW2dldF9waW5zIHttcHJqL3VfdWFydF9pMmNfdXNiX3NwaS9jZmdfY3NrYV91YXJ0WzNdfV0KKworc2V0X2Nhc2VfYW5hbHlzaXMgMCBbZ2V0X3BpbnMge21wcmovdV9tYmlzdC9jZmdfY3NrYV9tYmlzdFswXX1dCitzZXRfY2FzZV9hbmFseXNpcyAwIFtnZXRfcGlucyB7bXByai91X21iaXN0L2NmZ19jc2thX21iaXN0WzFdfV0KK3NldF9jYXNlX2FuYWx5c2lzIDAgW2dldF9waW5zIHttcHJqL3VfbWJpc3QvY2ZnX2Nza2FfbWJpc3RbMl19XQorc2V0X2Nhc2VfYW5hbHlzaXMgMSBbZ2V0X3BpbnMge21wcmovdV9tYmlzdC9jZmdfY3NrYV9tYmlzdFszXX1dCisKKworI2Rpc2FibGUgY2xvY2sgZ2F0aW5nIGNoZWNrIGF0IHN0YXRpYyBjbG9jayBzZWxlY3QgcGlucworc2V0X2ZhbHNlX3BhdGggLXRocm91Z2ggW2dldF9waW5zIG1wcmovdV93Yl9ob3N0L3Vfd2JzX2Nsa19zZWwudV9tdXgvU10KKworc2V0X3Byb3BhZ2F0ZWRfY2xvY2sgW2FsbF9jbG9ja3NdCisKK3NldF9jbG9ja19ncm91cHMgLW5hbWUgYXN5bmNfY2xvY2sgLWFzeW5jaHJvbm91cyBcCisgLWdyb3VwIFtnZXRfY2xvY2tzIHtjbG9jayB3Yl9jbGsgbWVtX2NsazAgbWVtX2NsazEgbWVtX2NsazIgbWVtX2NsazN9XVwKKyAtZ3JvdXAgW2dldF9jbG9ja3Mge3VzZXJfY2xrMn1dXAorIC1ncm91cCBbZ2V0X2Nsb2NrcyB7d2JzX2Nsa19pfV1cCisgLWdyb3VwIFtnZXRfY2xvY2tzIHtjcHVfY2xrfV1cCisgLWdyb3VwIFtnZXRfY2xvY2tzIHtjcHVfcmVmX2Nsa31dXAorIC1ncm91cCBbZ2V0X2Nsb2NrcyB7cnRjX2Nsa31dXAorIC1ncm91cCBbZ2V0X2Nsb2NrcyB7dXNiX2Nsa31dXAorIC1ncm91cCBbZ2V0X2Nsb2NrcyB7dWFydHNfY2xrfV1cCisgLWdyb3VwIFtnZXRfY2xvY2tzIHt1YXJ0bV9jbGt9XVwKKyAtY29tbWVudCB7QXN5bmMgQ2xvY2sgZ3JvdXB9CisKKyMjIElOUFVUL09VVFBVVCBERUxBWVMKK3NldCBpbnB1dF9kZWxheV92YWx1ZSAxCitzZXQgb3V0cHV0X2RlbGF5X3ZhbHVlIFtleHByIDI1ICogJDo6ZW52KElPX1BDVCldCitwdXRzICJcW0lORk9cXTogU2V0dGluZyBvdXRwdXQgZGVsYXkgdG86ICRvdXRwdXRfZGVsYXlfdmFsdWUiCitwdXRzICJcW0lORk9cXTogU2V0dGluZyBpbnB1dCBkZWxheSB0bzogJGlucHV0X2RlbGF5X3ZhbHVlIgorCitzZXRfaW5wdXRfZGVsYXkgJGlucHV0X2RlbGF5X3ZhbHVlICAtY2xvY2sgW2dldF9jbG9ja3Mge2Nsb2NrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHtncGlvfV0KK3NldF9pbnB1dF9kZWxheSAkaW5wdXRfZGVsYXlfdmFsdWUgIC1jbG9jayBbZ2V0X2Nsb2NrcyB7Y2xvY2t9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge21wcmpfaW9bMF19XQorc2V0X2lucHV0X2RlbGF5ICRpbnB1dF9kZWxheV92YWx1ZSAgLWNsb2NrIFtnZXRfY2xvY2tzIHtjbG9ja31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7bXByal9pb1sxXX1dCitzZXRfaW5wdXRfZGVsYXkgJGlucHV0X2RlbGF5X3ZhbHVlICAtY2xvY2sgW2dldF9jbG9ja3Mge2Nsb2NrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHttcHJqX2lvWzJdfV0KK3NldF9pbnB1dF9kZWxheSAkaW5wdXRfZGVsYXlfdmFsdWUgIC1jbG9jayBbZ2V0X2Nsb2NrcyB7Y2xvY2t9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge21wcmpfaW9bM119XQorc2V0X2lucHV0X2RlbGF5ICRpbnB1dF9kZWxheV92YWx1ZSAgLWNsb2NrIFtnZXRfY2xvY2tzIHtjbG9ja31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7bXByal9pb1s0XX1dCitzZXRfaW5wdXRfZGVsYXkgJGlucHV0X2RlbGF5X3ZhbHVlICAtY2xvY2sgW2dldF9jbG9ja3Mge2Nsb2NrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHttcHJqX2lvWzVdfV0KK3NldF9pbnB1dF9kZWxheSAkaW5wdXRfZGVsYXlfdmFsdWUgIC1jbG9jayBbZ2V0X2Nsb2NrcyB7Y2xvY2t9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge21wcmpfaW9bNl19XQorc2V0X2lucHV0X2RlbGF5ICRpbnB1dF9kZWxheV92YWx1ZSAgLWNsb2NrIFtnZXRfY2xvY2tzIHtjbG9ja31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7bXByal9pb1s3XX1dCitzZXRfaW5wdXRfZGVsYXkgJGlucHV0X2RlbGF5X3ZhbHVlICAtY2xvY2sgW2dldF9jbG9ja3Mge2Nsb2NrfV0gLWFkZF9kZWxheSBbZ2V0X3BvcnRzIHttcHJqX2lvWzhdfV0KK3NldF9pbnB1dF9kZWxheSAkaW5wdXRfZGVsYXlfdmFsdWUgIC1jbG9jayBbZ2V0X2Nsb2NrcyB7Y2xvY2t9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge21wcmpfaW9bOV19XQorc2V0X2lucHV0X2RlbGF5ICRpbnB1dF9kZWxheV92YWx1ZSAgLWNsb2NrIFtnZXRfY2xvY2tzIHtjbG9ja31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7bXByal9pb1sxMF19XQorc2V0X2lucHV0X2RlbGF5ICRpbnB1dF9kZWxheV92YWx1ZSAgLWNsb2NrIFtnZXRfY2xvY2tzIHtjbG9ja31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7bXByal9pb1sxMV19XQorc2V0X2lucHV0X2RlbGF5ICRpbnB1dF9kZWxheV92YWx1ZSAgLWNsb2NrIFtnZXRfY2xvY2tzIHtjbG9ja31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7bXByal9pb1sxMl19XQorc2V0X2lucHV0X2RlbGF5ICRpbnB1dF9kZWxheV92YWx1ZSAgLWNsb2NrIFtnZXRfY2xvY2tzIHtjbG9ja31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7bXByal9pb1sxM119XQorc2V0X2lucHV0X2RlbGF5ICRpbnB1dF9kZWxheV92YWx1ZSAgLWNsb2NrIFtnZXRfY2xvY2tzIHtjbG9ja31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7bXByal9pb1sxNF19XQorc2V0X2lucHV0X2RlbGF5ICRpbnB1dF9kZWxheV92YWx1ZSAgLWNsb2NrIFtnZXRfY2xvY2tzIHtjbG9ja31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7bXByal9pb1sxNV19XQorc2V0X2lucHV0X2RlbGF5ICRpbnB1dF9kZWxheV92YWx1ZSAgLWNsb2NrIFtnZXRfY2xvY2tzIHtjbG9ja31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7bXByal9pb1sxNl19XQorc2V0X2lucHV0X2RlbGF5ICRpbnB1dF9kZWxheV92YWx1ZSAgLWNsb2NrIFtnZXRfY2xvY2tzIHtjbG9ja31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7bXByal9pb1sxN119XQorc2V0X2lucHV0X2RlbGF5ICRpbnB1dF9kZWxheV92YWx1ZSAgLWNsb2NrIFtnZXRfY2xvY2tzIHtjbG9ja31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7bXByal9pb1sxOF19XQorc2V0X2lucHV0X2RlbGF5ICRpbnB1dF9kZWxheV92YWx1ZSAgLWNsb2NrIFtnZXRfY2xvY2tzIHtjbG9ja31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7bXByal9pb1sxOV19XQorc2V0X2lucHV0X2RlbGF5ICRpbnB1dF9kZWxheV92YWx1ZSAgLWNsb2NrIFtnZXRfY2xvY2tzIHtjbG9ja31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7bXByal9pb1syMF19XQorc2V0X2lucHV0X2RlbGF5ICRpbnB1dF9kZWxheV92YWx1ZSAgLWNsb2NrIFtnZXRfY2xvY2tzIHtjbG9ja31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7bXByal9pb1syMV19XQorc2V0X2lucHV0X2RlbGF5ICRpbnB1dF9kZWxheV92YWx1ZSAgLWNsb2NrIFtnZXRfY2xvY2tzIHtjbG9ja31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7bXByal9pb1syMl19XQorc2V0X2lucHV0X2RlbGF5ICRpbnB1dF9kZWxheV92YWx1ZSAgLWNsb2NrIFtnZXRfY2xvY2tzIHtjbG9ja31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7bXByal9pb1syM119XQorc2V0X2lucHV0X2RlbGF5ICRpbnB1dF9kZWxheV92YWx1ZSAgLWNsb2NrIFtnZXRfY2xvY2tzIHtjbG9ja31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7bXByal9pb1syNF19XQorc2V0X2lucHV0X2RlbGF5ICRpbnB1dF9kZWxheV92YWx1ZSAgLWNsb2NrIFtnZXRfY2xvY2tzIHtjbG9ja31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7bXByal9pb1syNV19XQorc2V0X2lucHV0X2RlbGF5ICRpbnB1dF9kZWxheV92YWx1ZSAgLWNsb2NrIFtnZXRfY2xvY2tzIHtjbG9ja31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7bXByal9pb1syNl19XQorc2V0X2lucHV0X2RlbGF5ICRpbnB1dF9kZWxheV92YWx1ZSAgLWNsb2NrIFtnZXRfY2xvY2tzIHtjbG9ja31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7bXByal9pb1syN119XQorc2V0X2lucHV0X2RlbGF5ICRpbnB1dF9kZWxheV92YWx1ZSAgLWNsb2NrIFtnZXRfY2xvY2tzIHtjbG9ja31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7bXByal9pb1syOF19XQorc2V0X2lucHV0X2RlbGF5ICRpbnB1dF9kZWxheV92YWx1ZSAgLWNsb2NrIFtnZXRfY2xvY2tzIHtjbG9ja31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7bXByal9pb1syOV19XQorc2V0X2lucHV0X2RlbGF5ICRpbnB1dF9kZWxheV92YWx1ZSAgLWNsb2NrIFtnZXRfY2xvY2tzIHtjbG9ja31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7bXByal9pb1szMF19XQorc2V0X2lucHV0X2RlbGF5ICRpbnB1dF9kZWxheV92YWx1ZSAgLWNsb2NrIFtnZXRfY2xvY2tzIHtjbG9ja31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7bXByal9pb1szMV19XQorc2V0X2lucHV0X2RlbGF5ICRpbnB1dF9kZWxheV92YWx1ZSAgLWNsb2NrIFtnZXRfY2xvY2tzIHtjbG9ja31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7bXByal9pb1szMl19XQorc2V0X2lucHV0X2RlbGF5ICRpbnB1dF9kZWxheV92YWx1ZSAgLWNsb2NrIFtnZXRfY2xvY2tzIHtjbG9ja31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7bXByal9pb1szM119XQorc2V0X2lucHV0X2RlbGF5ICRpbnB1dF9kZWxheV92YWx1ZSAgLWNsb2NrIFtnZXRfY2xvY2tzIHtjbG9ja31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7bXByal9pb1szNF19XQorc2V0X2lucHV0X2RlbGF5ICRpbnB1dF9kZWxheV92YWx1ZSAgLWNsb2NrIFtnZXRfY2xvY2tzIHtjbG9ja31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7bXByal9pb1szNV19XQorc2V0X2lucHV0X2RlbGF5ICRpbnB1dF9kZWxheV92YWx1ZSAgLWNsb2NrIFtnZXRfY2xvY2tzIHtjbG9ja31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7bXByal9pb1szNl19XQorc2V0X2lucHV0X2RlbGF5ICRpbnB1dF9kZWxheV92YWx1ZSAgLWNsb2NrIFtnZXRfY2xvY2tzIHtjbG9ja31dIC1hZGRfZGVsYXkgW2dldF9wb3J0cyB7bXByal9pb1szN119XQorCitzZXRfb3V0cHV0X2RlbGF5ICRvdXRwdXRfZGVsYXlfdmFsdWUgIC1jbG9jayBbZ2V0X2Nsb2NrcyB7Y2xvY2t9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge2ZsYXNoX2NzYn1dCitzZXRfb3V0cHV0X2RlbGF5ICRvdXRwdXRfZGVsYXlfdmFsdWUgIC1jbG9jayBbZ2V0X2Nsb2NrcyB7Y2xvY2t9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge2ZsYXNoX2Nsa31dCitzZXRfb3V0cHV0X2RlbGF5ICRvdXRwdXRfZGVsYXlfdmFsdWUgIC1jbG9jayBbZ2V0X2Nsb2NrcyB7Y2xvY2t9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge2ZsYXNoX2lvMH1dCitzZXRfb3V0cHV0X2RlbGF5ICRvdXRwdXRfZGVsYXlfdmFsdWUgIC1jbG9jayBbZ2V0X2Nsb2NrcyB7Y2xvY2t9XSAtYWRkX2RlbGF5IFtnZXRfcG9ydHMge2ZsYXNoX2lvMX1dCisKK3NldF9tYXhfZmFub3V0ICQ6OmVudihTWU5USF9NQVhfRkFOT1VUKSBbY3VycmVudF9kZXNpZ25dCisKKyMjIFNldCBzeXN0ZW0gbW9uaXRvcmluZyBtdXggc2VsZWN0IHRvIHplcm8gc28gdGhhdCB0aGUgY2xvY2svdXNlcl9jbGsgbW9uaXRvcmluZyBpcyBkaXNhYmxlZCAKK3NldF9jYXNlX2FuYWx5c2lzIDAgW2dldF9waW5zIGhvdXNla2VlcGluZy9fNDQ0OV8vU10KK3NldF9jYXNlX2FuYWx5c2lzIDAgW2dldF9waW5zIGhvdXNla2VlcGluZy9fNDQ1MF8vU10KKworIyMgRkFMU0UgUEFUSFMgKEFTWU5DSFJPTk9VUyBJTlBVVFMpCitzZXRfZmFsc2VfcGF0aCAtZnJvbSBbZ2V0X3BvcnRzIHtyZXNldGJ9XQorc2V0X2ZhbHNlX3BhdGggLWZyb20gW2dldF9wb3J0cyBtcHJqX2lvWypdXQorc2V0X2ZhbHNlX3BhdGggLWZyb20gW2dldF9wb3J0cyBncGlvXQorCisjIyBVc2VyIFByb2plY3Qgc3RhdGljIHNpZ25hbHMKK3NldF9mYWxzZV9wYXRoIC10aHJvdWdoIFtnZXRfcGlucyBtcHJqL3VfcGlubXV4L2Jpc3RfZW5dCisKKyMgVE9ETyBzZXQgdGhpcyBhcyBwYXJhbWV0ZXIKK3NldCBjYXBfbG9hZCBbZXhwciAkOjplbnYoU1lOVEhfQ0FQX0xPQUQpIC8gMTAwMC4wXQorcHV0cyAiXFtJTkZPXF06IFNldHRpbmcgbG9hZCB0bzogJGNhcF9sb2FkIgorc2V0X2xvYWQgICRjYXBfbG9hZCBbYWxsX291dHB1dHNdCisKK3B1dHMgIlxbSU5GT1xdOiBTZXR0aW5nIHRpbWluZyBkZXJhdGUgdG86IFtleHByIHskOjplbnYoU1lOVEhfVElNSU5HX0RFUkFURSkgKiAxMH1dICUiCitzZXRfdGltaW5nX2RlcmF0ZSAtZWFybHkgW2V4cHIgezEtJDo6ZW52KFNZTlRIX1RJTUlOR19ERVJBVEUpfV0KK3NldF90aW1pbmdfZGVyYXRlIC1sYXRlIFtleHByIHsxKyQ6OmVudihTWU5USF9USU1JTkdfREVSQVRFKX1dCisKK3B1dHMgIlxbSU5GT1xdOiBTZXR0aW5nIGNsb2NrIHNldHVwIHVuY2VydGFpbml0eSB0bzogJDo6ZW52KFNZTlRIX0NMT0NLX1NFVFVQX1VOQ0VSVEFJTklUWSkiCitwdXRzICJcW0lORk9cXTogU2V0dGluZyBjbG9jayBob2xkIHVuY2VydGFpbml0eSB0bzogJDo6ZW52KFNZTlRIX0NMT0NLX0hPTERfVU5DRVJUQUlOSVRZKSIKK3NldF9jbG9ja191bmNlcnRhaW50eSAtc2V0dXAgJDo6ZW52KFNZTlRIX0NMT0NLX1NFVFVQX1VOQ0VSVEFJTklUWSkgW2FsbF9jbG9ja3NdCitzZXRfY2xvY2tfdW5jZXJ0YWludHkgLWhvbGQgJDo6ZW52KFNZTlRIX0NMT0NLX0hPTERfVU5DRVJUQUlOSVRZKSBbYWxsX2Nsb2Nrc10KKworCisjc2V0X291dHB1dF9kZWxheSAtbWF4IDUuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa31dIC1hZGRfZGVsYXkgW2dldF9waW5zIHttcHJqL3dic19hZHJfaVsqXX1dCisjc2V0X291dHB1dF9kZWxheSAtbWF4IDUuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa31dIC1hZGRfZGVsYXkgW2dldF9waW5zIHttcHJqL3dic19jeWNfaX1dCisjc2V0X291dHB1dF9kZWxheSAtbWF4IDUuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa31dIC1hZGRfZGVsYXkgW2dldF9waW5zIHttcHJqL3dic19kYXRfaVsqXX1dCisjc2V0X291dHB1dF9kZWxheSAtbWF4IDUuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa31dIC1hZGRfZGVsYXkgW2dldF9waW5zIHttcHJqL3dic19zZWxfaVsqXX1dCisjc2V0X291dHB1dF9kZWxheSAtbWF4IDUuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa31dIC1hZGRfZGVsYXkgW2dldF9waW5zIHttcHJqL3dic19zdGJfaX1dCisjc2V0X291dHB1dF9kZWxheSAtbWF4IDUuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa31dIC1hZGRfZGVsYXkgW2dldF9waW5zIHttcHJqL3dic193ZV9pfV0KKyMKKyNzZXRfb3V0cHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JfY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BpbnMge21wcmovd2JzX2Fkcl9pWypdfV0KKyNzZXRfb3V0cHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JfY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BpbnMge21wcmovd2JzX2N5Y19pfV0KKyNzZXRfb3V0cHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JfY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BpbnMge21wcmovd2JzX2RhdF9pWypdfV0KKyNzZXRfb3V0cHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JfY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BpbnMge21wcmovd2JzX3NlbF9pWypdfV0KKyNzZXRfb3V0cHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JfY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BpbnMge21wcmovd2JzX3N0Yl9pfV0KKyNzZXRfb3V0cHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JfY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BpbnMge21wcmovd2JzX3dlX2l9XQorIworI3NldF9pbnB1dF9kZWxheSAtbWF4IDQuNTAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa31dIC1hZGRfZGVsYXkgW2dldF9waW5zIHttcHJqL3dic19hY2tfb31dCisjc2V0X2lucHV0X2RlbGF5IC1tYXggNC41MDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JfY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BpbnMge21wcmovd2JzX2RhdF9vWzBdfV0KKyNzZXRfaW5wdXRfZGVsYXkgLW1heCA0LjUwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcGlucyB7bXByai93YnNfZGF0X29bMTBdfV0KKyNzZXRfaW5wdXRfZGVsYXkgLW1heCA0LjUwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcGlucyB7bXByai93YnNfZGF0X29bMTFdfV0KKyNzZXRfaW5wdXRfZGVsYXkgLW1heCA0LjUwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcGlucyB7bXByai93YnNfZGF0X29bMTJdfV0KKyNzZXRfaW5wdXRfZGVsYXkgLW1heCA0LjUwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcGlucyB7bXByai93YnNfZGF0X29bMTNdfV0KKyNzZXRfaW5wdXRfZGVsYXkgLW1heCA0LjUwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcGlucyB7bXByai93YnNfZGF0X29bMTRdfV0KKyNzZXRfaW5wdXRfZGVsYXkgLW1heCA0LjUwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcGlucyB7bXByai93YnNfZGF0X29bMTVdfV0KKyNzZXRfaW5wdXRfZGVsYXkgLW1heCA0LjUwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcGlucyB7bXByai93YnNfZGF0X29bMTZdfV0KKyNzZXRfaW5wdXRfZGVsYXkgLW1heCA0LjUwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcGlucyB7bXByai93YnNfZGF0X29bMTddfV0KKyNzZXRfaW5wdXRfZGVsYXkgLW1heCA0LjUwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcGlucyB7bXByai93YnNfZGF0X29bMThdfV0KKyNzZXRfaW5wdXRfZGVsYXkgLW1heCA0LjUwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcGlucyB7bXByai93YnNfZGF0X29bMTldfV0KKyNzZXRfaW5wdXRfZGVsYXkgLW1heCA0LjUwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcGlucyB7bXByai93YnNfZGF0X29bMV19XQorI3NldF9pbnB1dF9kZWxheSAtbWF4IDQuNTAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa31dIC1hZGRfZGVsYXkgW2dldF9waW5zIHttcHJqL3dic19kYXRfb1syMF19XQorI3NldF9pbnB1dF9kZWxheSAtbWF4IDQuNTAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa31dIC1hZGRfZGVsYXkgW2dldF9waW5zIHttcHJqL3dic19kYXRfb1syMV19XQorI3NldF9pbnB1dF9kZWxheSAtbWF4IDQuNTAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa31dIC1hZGRfZGVsYXkgW2dldF9waW5zIHttcHJqL3dic19kYXRfb1syMl19XQorI3NldF9pbnB1dF9kZWxheSAtbWF4IDQuNTAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa31dIC1hZGRfZGVsYXkgW2dldF9waW5zIHttcHJqL3dic19kYXRfb1syM119XQorI3NldF9pbnB1dF9kZWxheSAtbWF4IDQuNTAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa31dIC1hZGRfZGVsYXkgW2dldF9waW5zIHttcHJqL3dic19kYXRfb1syNF19XQorI3NldF9pbnB1dF9kZWxheSAtbWF4IDQuNTAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa31dIC1hZGRfZGVsYXkgW2dldF9waW5zIHttcHJqL3dic19kYXRfb1syNV19XQorI3NldF9pbnB1dF9kZWxheSAtbWF4IDQuNTAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa31dIC1hZGRfZGVsYXkgW2dldF9waW5zIHttcHJqL3dic19kYXRfb1syNl19XQorI3NldF9pbnB1dF9kZWxheSAtbWF4IDQuNTAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa31dIC1hZGRfZGVsYXkgW2dldF9waW5zIHttcHJqL3dic19kYXRfb1syN119XQorI3NldF9pbnB1dF9kZWxheSAtbWF4IDQuNTAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa31dIC1hZGRfZGVsYXkgW2dldF9waW5zIHttcHJqL3dic19kYXRfb1syOF19XQorI3NldF9pbnB1dF9kZWxheSAtbWF4IDQuNTAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa31dIC1hZGRfZGVsYXkgW2dldF9waW5zIHttcHJqL3dic19kYXRfb1syOV19XQorI3NldF9pbnB1dF9kZWxheSAtbWF4IDQuNTAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa31dIC1hZGRfZGVsYXkgW2dldF9waW5zIHttcHJqL3dic19kYXRfb1syXX1dCisjc2V0X2lucHV0X2RlbGF5IC1tYXggNC41MDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JfY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BpbnMge21wcmovd2JzX2RhdF9vWzMwXX1dCisjc2V0X2lucHV0X2RlbGF5IC1tYXggNC41MDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JfY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BpbnMge21wcmovd2JzX2RhdF9vWzMxXX1dCisjc2V0X2lucHV0X2RlbGF5IC1tYXggNC41MDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JfY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BpbnMge21wcmovd2JzX2RhdF9vWzNdfV0KKyNzZXRfaW5wdXRfZGVsYXkgLW1heCA0LjUwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcGlucyB7bXByai93YnNfZGF0X29bNF19XQorI3NldF9pbnB1dF9kZWxheSAtbWF4IDQuNTAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa31dIC1hZGRfZGVsYXkgW2dldF9waW5zIHttcHJqL3dic19kYXRfb1s1XX1dCisjc2V0X2lucHV0X2RlbGF5IC1tYXggNC41MDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JfY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BpbnMge21wcmovd2JzX2RhdF9vWzZdfV0KKyNzZXRfaW5wdXRfZGVsYXkgLW1heCA0LjUwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcGlucyB7bXByai93YnNfZGF0X29bN119XQorI3NldF9pbnB1dF9kZWxheSAtbWF4IDQuNTAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa31dIC1hZGRfZGVsYXkgW2dldF9waW5zIHttcHJqL3dic19kYXRfb1s4XX1dCisjc2V0X2lucHV0X2RlbGF5IC1tYXggNC41MDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JfY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BpbnMge21wcmovd2JzX2RhdF9vWzldfV0KKyMKKyNzZXRfaW5wdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcGlucyB7bXByai93YnNfYWNrX299XQorI3NldF9pbnB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa31dIC1hZGRfZGVsYXkgW2dldF9waW5zIHttcHJqL3dic19kYXRfb1swXX1dCisjc2V0X2lucHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JfY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BpbnMge21wcmovd2JzX2RhdF9vWzEwXX1dCisjc2V0X2lucHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JfY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BpbnMge21wcmovd2JzX2RhdF9vWzExXX1dCisjc2V0X2lucHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JfY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BpbnMge21wcmovd2JzX2RhdF9vWzEyXX1dCisjc2V0X2lucHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JfY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BpbnMge21wcmovd2JzX2RhdF9vWzEzXX1dCisjc2V0X2lucHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JfY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BpbnMge21wcmovd2JzX2RhdF9vWzE0XX1dCisjc2V0X2lucHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JfY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BpbnMge21wcmovd2JzX2RhdF9vWzE1XX1dCisjc2V0X2lucHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JfY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BpbnMge21wcmovd2JzX2RhdF9vWzE2XX1dCisjc2V0X2lucHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JfY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BpbnMge21wcmovd2JzX2RhdF9vWzE3XX1dCisjc2V0X2lucHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JfY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BpbnMge21wcmovd2JzX2RhdF9vWzE4XX1dCisjc2V0X2lucHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JfY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BpbnMge21wcmovd2JzX2RhdF9vWzE5XX1dCisjc2V0X2lucHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JfY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BpbnMge21wcmovd2JzX2RhdF9vWzFdfV0KKyNzZXRfaW5wdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcGlucyB7bXByai93YnNfZGF0X29bMjBdfV0KKyNzZXRfaW5wdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcGlucyB7bXByai93YnNfZGF0X29bMjFdfV0KKyNzZXRfaW5wdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcGlucyB7bXByai93YnNfZGF0X29bMjJdfV0KKyNzZXRfaW5wdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcGlucyB7bXByai93YnNfZGF0X29bMjNdfV0KKyNzZXRfaW5wdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcGlucyB7bXByai93YnNfZGF0X29bMjRdfV0KKyNzZXRfaW5wdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcGlucyB7bXByai93YnNfZGF0X29bMjVdfV0KKyNzZXRfaW5wdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcGlucyB7bXByai93YnNfZGF0X29bMjZdfV0KKyNzZXRfaW5wdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcGlucyB7bXByai93YnNfZGF0X29bMjddfV0KKyNzZXRfaW5wdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcGlucyB7bXByai93YnNfZGF0X29bMjhdfV0KKyNzZXRfaW5wdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcGlucyB7bXByai93YnNfZGF0X29bMjldfV0KKyNzZXRfaW5wdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcGlucyB7bXByai93YnNfZGF0X29bMl19XQorI3NldF9pbnB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa31dIC1hZGRfZGVsYXkgW2dldF9waW5zIHttcHJqL3dic19kYXRfb1szMF19XQorI3NldF9pbnB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa31dIC1hZGRfZGVsYXkgW2dldF9waW5zIHttcHJqL3dic19kYXRfb1szMV19XQorI3NldF9pbnB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa31dIC1hZGRfZGVsYXkgW2dldF9waW5zIHttcHJqL3dic19kYXRfb1szXX1dCisjc2V0X2lucHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JfY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BpbnMge21wcmovd2JzX2RhdF9vWzRdfV0KKyNzZXRfaW5wdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcGlucyB7bXByai93YnNfZGF0X29bNV19XQorI3NldF9pbnB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa31dIC1hZGRfZGVsYXkgW2dldF9waW5zIHttcHJqL3dic19kYXRfb1s2XX1dCisjc2V0X2lucHV0X2RlbGF5IC1taW4gMS4wMDAwIC1jbG9jayBbZ2V0X2Nsb2NrcyB7d2JfY2xrfV0gLWFkZF9kZWxheSBbZ2V0X3BpbnMge21wcmovd2JzX2RhdF9vWzddfV0KKyNzZXRfaW5wdXRfZGVsYXkgLW1pbiAxLjAwMDAgLWNsb2NrIFtnZXRfY2xvY2tzIHt3Yl9jbGt9XSAtYWRkX2RlbGF5IFtnZXRfcGlucyB7bXByai93YnNfZGF0X29bOF19XQorI3NldF9pbnB1dF9kZWxheSAtbWluIDEuMDAwMCAtY2xvY2sgW2dldF9jbG9ja3Mge3diX2Nsa31dIC1hZGRfZGVsYXkgW2dldF9waW5zIHttcHJqL3dic19kYXRfb1s5XX1dCisKKworCitwdXRzICJcW0lORk9cXTogU2V0dGluZyBjbG9jayB0cmFuc2l0aW9uIHRvOiAkOjplbnYoU1lOVEhfQ0xPQ0tfVFJBTlNJVElPTikiCitzZXRfY2xvY2tfdHJhbnNpdGlvbiAkOjplbnYoU1lOVEhfQ0xPQ0tfVFJBTlNJVElPTikgW2dldF9jbG9ja3Mge2Nsb2NrfV0KZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvTWFrZWZpbGUgYi92ZXJpbG9nL2R2L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlZTM4ZjgKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L01ha2VmaWxlCkBAIC0wLDAgKzEsMzkgQEAKKyMgU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMCBFZmFibGVzcyBDb3Jwb3JhdGlvbgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKworIyAtLS0tIFRlc3QgcGF0dGVybnMgZm9yIHByb2plY3Qgc3RyaVZlIC0tLS0KKworLlNVRkZJWEVTOgorLlNJTEVOVDogY2xlYW4gYWxsCisKK1BBVFRFUk5TID0gd2JfcG9ydCByaXNjX2Jvb3QgdXNlcl9yaXNjX2Jvb3QgdXNlcl91YXJ0IHVzZXJfc3BpIHVzZXJfaTJjbSByaXNjdl9yZWdyZXNzIHVzZXJfYmFzaWMgdXNlcl9tYmlzdF90ZXN0MSB1c2VyX3Jpc2Nfc29mdF9ib290IHVzZXJfdWFydF9tYXN0ZXIgdWFydF9tYXN0ZXIKKworYWxsOiAgJHtQQVRURVJOU30KKwlmb3IgaSBpbiAke1BBVFRFUk5TfTsgZG8gXAorCQkoIGNkICQkaSAmJiBtYWtlIC1mIE1ha2VmaWxlICQke2l9LnZjZCAmPiB2ZXJpZnkubG9nICYmIGdyZXAgTW9uaXRvciB2ZXJpZnkubG9nKSA7IFwKKwlkb25lCisKK0RWX1BBVFRFUk5TID0gJChmb3JlYWNoIGR2LCAkKFBBVFRFUk5TKSwgdmVyaWZ5LSQoZHYpKQorJChEVl9QQVRURVJOUyk6IHZlcmlmeS0lIDogCisJY2QgJCogJiYgbWFrZQorCitjbGVhbjogICR7UEFUVEVSTlN9CisJZm9yIGkgaW4gJHtQQVRURVJOU307IGRvIFwKKwkJKCBjZCAkJGkgJiYgbWFrZSBjbGVhbiApIDsgXAorCWRvbmUKKwlybSAtcmYgKi5sb2cKKwkKKy5QSE9OWTogY2xlYW4gYWxsCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L1JFQURNRS5tZCBiL3Zlcmlsb2cvZHYvUkVBRE1FLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhODM0ZjcKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L1JFQURNRS5tZApAQCAtMCwwICsxLDIzNiBAQAorPCEtLS0KKyMgU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMCBFZmFibGVzcyBDb3Jwb3JhdGlvbgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKy0tPgorCisjIFNpbXVsYXRpb24gRW52aXJvbm1lbnQgU2V0dXAKKworVGhlcmUgYXJlIHR3byBvcHRpb25zIGZvciBzZXR0aW5nIHVwIHRoZSBzaW11bGF0aW9uIGVudmlyb25tZW50OiAKKworKiBQdWxsaW5nIGEgcHJlLWJ1aWx0IGRvY2tlciBpbWFnZSAKKyogSW5zdGFsbGluZyB0aGUgZGVwZW5kZWNpZXMgbG9jYWxseQorCisjIyAxLiBEb2NrZXIKKworVGhlcmUgaXMgYW4gYXZhaWxhYmxlIGRvY2tlciBzZXR1cCB3aXRoIHRoZSBuZWVkZWQgdG9vbHMgYXQgW2VmYWJsZXNzL2RvY2tlcml6ZWQtdmVyaWZpY2F0aW9uLXNldHVwXShodHRwczovL2dpdGh1Yi5jb20vZWZhYmxlc3MvZG9ja2VyaXplZC12ZXJpZmljYXRpb24tc2V0dXApIAorCitSdW4gdGhlIGZvbGxvd2luZyB0byBwdWxsIHRoZSBpbWFnZTogCisKK2BgYAorZG9ja2VyIHB1bGwgZWZhYmxlc3MvZHZfc2V0dXA6bGF0ZXN0CitgYGAKKworIyMgMi4gTG9jYWwgSW5zdGFsbGlvbiAoTGludXgpCisKK1lvdSB3aWxsIG5lZWQgdG8gZnVsbGZpbCB0aGVzZSBkZXBlbmRlY2llczogCisKKyogSWNhcnVzIFZlcmlsb2cgKDEwLjIrKQorKiBSVjMySSBUb29sY2hhaW4KKworVXNpbmcgYXB0LCB5b3UgY2FuIGluc3RhbGwgSWNhcnVzIFZlcmlsb2c6CisKK2BgYGJhc2gKK3N1ZG8gYXB0LWdldCBpbnN0YWxsIGl2ZXJpbG9nCitgYGAKKworTmV4dCwgeW91IHdpbGwgbmVlZCB0byBidWlsZCB0aGUgUlYzMkkgdG9vbGNoYWluLiBGaXJzdGx5LCBleHBvcnQgdGhlIGluc3RhbGxhdGlvbiBwYXRoIGZvciB0aGUgUlYzMkkgdG9vbGNoYWluLCAKKworYGBgYmFzaAorZXhwb3J0IEdDQ19QQVRIPTxnY2MtaW5zdGFsbGF0aW9uLXBhdGg+CitgYGAKKworVGhlbiwgcnVuIHRoZSBmb2xsb3dpbmc6IAorCitgYGBiYXNoCisjIHBhY2thZ2VzIG5lZWRlZDoKK3N1ZG8gYXB0LWdldCBpbnN0YWxsIGF1dG9jb25mIGF1dG9tYWtlIGF1dG90b29scy1kZXYgY3VybCBsaWJtcGMtZGV2IFwKKyAgICBsaWJtcGZyLWRldiBsaWJnbXAtZGV2IGdhd2sgYnVpbGQtZXNzZW50aWFsIGJpc29uIGZsZXggdGV4aW5mbyBcCisgICAgZ3BlcmYgbGlidG9vbCBwYXRjaHV0aWxzIGJjIHpsaWIxZy1kZXYgZ2l0IGxpYmV4cGF0MS1kZXYKKworc3VkbyBta2RpciAkR0NDX1BBVEgKK3N1ZG8gY2hvd24gJFVTRVIgJEdDQ19QQVRICisKK2dpdCBjbG9uZSBodHRwczovL2dpdGh1Yi5jb20vcmlzY3YvcmlzY3YtZ251LXRvb2xjaGFpbiByaXNjdi1nbnUtdG9vbGNoYWluLXJ2MzJpCitjZCByaXNjdi1nbnUtdG9vbGNoYWluLXJ2MzJpCitnaXQgY2hlY2tvdXQgNDExZDEzNAorZ2l0IHN1Ym1vZHVsZSB1cGRhdGUgLS1pbml0IC0tcmVjdXJzaXZlCisKK21rZGlyIGJ1aWxkOyBjZCBidWlsZAorLi4vY29uZmlndXJlIC0td2l0aC1hcmNoPXJ2MzJpIC0tcHJlZml4PSRHQ0NfUEFUSAorbWFrZSAtaiQobnByb2MpCitgYGAKKworIyBSdW5uaW5nIFNpbXVsYXRpb24KKworIyMgRG9ja2VyCisKK0ZpcnN0LCB5b3Ugd2lsbCBuZWVkIHRvIGV4cG9ydCBhIG51bWJlciBvZiBlbnZpcm9ubWVudCB2YXJpYWJsZXM6IAorCitgYGBiYXNoCitleHBvcnQgUERLX1BBVEg9PHBkay1sb2NhdGlvbi9za3kxMzBBPgorZXhwb3J0IENBUkFWRUxfUk9PVD08Y2FyYXZlbF9yb290PgorZXhwb3J0IFVQUkpfUk9PVD08dXNlcl9wcm9qZWN0X3Jvb3Q+CitgYGAKKworVGhlbiwgcnVuIHRoZSBmb2xsb3dpbmcgY29tbWFuZCB0byBzdGFydCB0aGUgZG9ja2VyIGNvbnRhaW5lciA6CisKK2BgYAorZG9ja2VyIHJ1biAtaXQgLXYgJENBUkFWRUxfUk9PVDokQ0FSQVZFTF9ST09UIC12ICRQREtfUEFUSDokUERLX1BBVEggLXYgJFVQUkpfUk9PVDokVVBSSl9ST09UIC1lIENBUkFWRUxfUk9PVD0kQ0FSQVZFTF9ST09UIC1lIFBES19QQVRIPSRQREtfUEFUSCAtZSBVUFJKX1JPT1Q9JFVQUkpfUk9PVCAtdSAkKGlkIC11ICRVU0VSKTokKGlkIC1nICRVU0VSKSBlZmFibGVzcy9kdl9zZXR1cDpsYXRlc3QKK2BgYAorCitUaGVuLCBuYXZpZ2F0ZSB0byB0aGUgZGlyZWN0b3J5IHdoZXJlIHRoZSBEViB0ZXN0cyByZXNpZGUgOiAKKworYGBgYmFzaAorY2QgJFVQUkpfUk9PVC92ZXJpbG9nL2R2LworYGBgCisKK1RoZW4sIGZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zIGF0IFtCb3RoXSgjYm90aCkgdG8gcnVuIFJUTC9HTCBzaW11bGF0aW9uLgorCisjIyBMb2NhbAorCitZb3Ugd2lsbCBuZWVkIHRvIGV4cG9ydCB0aGVzZSBlbnZpcm9ubWVudCB2YXJpYWJsZXM6IAorCitgYGBiYXNoCitleHBvcnQgR0NDX1BBVEg9PGdjYy1pbnN0YWxsYXRpb24tcGF0aD4KK2V4cG9ydCBQREtfUEFUSD08cGRrLWxvY2F0aW9uL3NreTEzMEE+CitgYGAKKworVGhlbiwgZm9sbG93IHRoZSBpbnN0cnVjdGlvbiBhdCBbQm90aF0oI2JvdGgpIHRvIHJ1biBSVEwvR0wgc2ltdWxhdGlvbi4KKworIyMgQm90aAorCitUbyBydW4gUlRMIHNpbXVsYXRpb24gZm9yIG9uZSBvZiB0aGUgRFYgdGVzdHMsIAorCitgYGBiYXNoCitjZCA8ZHYtdGVzdD4KK21ha2UKK2BgYAorCitUbyBydW4gZ2F0ZSBsZXZlbCBzaW11bGF0aW9uIGZvciBvbmUgb2YgdGhlIERWIHRlc3RzLCAKKworYGBgYmFzaAorY2QgPGR2LXRlc3Q+CitTSU09R0wgbWFrZQorYGBgCisKKyMgVXNlciBQcm9qZWN0IEV4YW1wbGUgRFYKKworVGhlIGRpcmVjdG9yeSBpbmNsdWRlcyBmb3VyIHRlc3RzIGZvciB0aGUgY291bnRlciB1c2VyLXByb2plY3QgZXhhbXBsZTogCisKKyMjIyBJTyBQb3J0cyBUZXN0IAorCisqIFRoaXMgdGVzdCBpcyBtZWFudCB0byB2ZXJpZnkgdGhhdCB3ZSBjYW4gY29uZmlndXJlIHRoZSBwYWRzIGZvciB0aGUgdXNlciBwcm9qZWN0IGFyZWEuIFRoZSBmaXJtd2FyZSBjb25maWd1cmVzIHRoZSBsb3dlciA4IElPIHBhZHMgaW4gdGhlIHVzZXIgc3BhY2UgYXMgb3V0cHV0czoKKworCWBgYGMKKwlyZWdfbXByal9pb18wID0gIEdQSU9fTU9ERV9VU0VSX1NURF9PVVRQVVQ7CisJcmVnX21wcmpfaW9fMSA9ICBHUElPX01PREVfVVNFUl9TVERfT1VUUFVUOworCS4uLi4uCisJcmVnX21wcmpfaW9fNyA9ICBHUElPX01PREVfVVNFUl9TVERfT1VUUFVUOworCWBgYAorCisqIFRoZW4sIHRoZSBmaXJtd2FyZSBhcHBsaWVzIHRoZSBwYWQgY29uZmlndXJhdGlvbiBieSBlbmFibGluZyB0aGUgc2VyaWFsIHRyYW5zZmVyIG9uIHRoZSBzaGlmdCByZWdpc3RlciByZXNwb25zaWJsZSBmb3IgY29uZmlndXJpbmcgdGhlIHBhZHMgYW5kIHdhaXRzIHVudGlsIHRoZSB0cmFuc2ZlciBpcyBkb25lLiAKKwlgYGBjCisJcmVnX21wcmpfeGZlciA9IDE7CisJd2hpbGUgKHJlZ19tcHJqX3hmZXIgPT0gMSk7CisJYGBgCisKKyogVGhlIHRlc3RiZW5jaCBzdWNjZXNzIGNyaXRlcmlhIGlzIHRoYXQgd2UgY2FuIG9ic2VydmUgdGhlIGNvdW50ZXIgdmFsdWUgb24gdGhlIGxvd2VyIDggSS9PIHBhZHMuIFRoaXMgY3JpdGVyaWEgaXMgY2hlY2tlZCBieSB0aGUgdGVzdGJlbmNoIHRocm91Z2ggb2JzZXJ2aW5nIHRoZSB2YWx1ZXMgb24gdGhlIEkvTyBwYWRzIGFzIGZvbGxvd3M6IAorCisJYGBgdmVyaWxvZworCXdhaXQobXByal9pb18wID09IDgnaDAxKTsKKwl3YWl0KG1wcmpfaW9fMCA9PSA4J2gwMik7CisJd2FpdChtcHJqX2lvXzAgPT0gOCdoMDMpOworCS4uLi4KKwl3YWl0KG1wcmpfaW9fMCA9PSA4J2hGRik7CisJYGBgCisKKyogSWYgdGhlIHRlc3RiZW5jaCBmYWlscywgaXQgd2lsbCBwcmludCBhIHRpbWVvdXQgbWVzc2FnZSB0byB0aGUgdGVybWluYWwuIAorCisjIyMgTG9naWMgQW5hbHl6ZXIgVGVzdCAxCisgCisqIFRoaXMgdGVzdCBpcyBtZWFudCB0byB2ZXJpZnkgdGhhdCB3ZSBjYW4gdXNlIHRoZSBsb2dpYyBhbmFseXplciB0byBtb25pdG9yIGFuZCB3cml0ZSBzaWduYWxzIGluIHRoZSB1c2VyIHByb2plY3QgZnJvbSB0aGUgbWFuYWdlbWVudCBTb0MuIEZpcnN0bHksIHRoZSBmaXJtd2FyZSBjb25maWd1cmVzIHRoZSB1cHBlciAxNiBvZiB0aGUgZmlyc3QgMzIgR1BJTyBwYWRzIGFzIG91dHB1dHMgZnJvbSB0aGUgbWFuYWdlbnQgU29DLCBhcHBsaWVzIHRoZSBjb25maWd1cmF0aW9uIGJ5IGluaXRpYXRpbmcgdGhlIHNlcmlhbCB0cmFuc2ZlciBvbiB0aGUgc2hpZnQgcmVnaXN0ZXIsIGFuZCB3cml0ZXMgYSB2YWx1ZSBvbiB0aGUgcGFkcyB0byBpbmRpY2F0ZSB0aGUgZW5kIG9mIHBhZCBjb25maWd1cmF0aW9uIGFuZCB0aGUgc3RhcnQgb2YgdGhlIHRlc3QuIAorCisJYGBgYworCXJlZ19tcHJqX2lvXzMxID0gR1BJT19NT0RFX01HTVRfU1REX09VVFBVVDsKKwlyZWdfbXByal9pb18zMCA9IEdQSU9fTU9ERV9NR01UX1NURF9PVVRQVVQ7CisJLi4uLi4KKwlyZWdfbXByal9pb18xNiA9IEdQSU9fTU9ERV9NR01UX1NURF9PVVRQVVQ7CisKKwlyZWdfbXByal94ZmVyID0gMTsKKwl3aGlsZSAocmVnX21wcmpfeGZlciA9PSAxKTsKKworCS8vIEZsYWcgc3RhcnQgb2YgdGhlIHRlc3QgCisJcmVnX21wcmpfZGF0YWwgPSAweEFCNDAwMDAwOworCWBgYAorCQorCVRoaXMgaXMgZG9uZSB0byBmbGFnIHRoZSBzdGFydC9zdWNjZXNzL2VuZCBvZiB0aGUgc2ltdWxhdGlvbiBieSB3cml0aW5nIGEgY2VydGFpbiB2YWx1ZSB0byB0aGUgSS9PcyB3aGljaCBpcyB0aGVuIGNoZWNrZWQgYnkgdGhlIHRlc3RiZW5jaCB0byBrbm93IHdoZXRoZXIgdGhlIHRlc3Qgc3RhcnRlZC9lbmRlZC9zdWNjZWVkZWQuIEZvciBleGFtcGxlLCB0aGUgdGVzdGJlbmNoIGNoZWNrcyBvbiB0aGUgdmFsdWUgb2YgdGhlIHVwcGVyIDE2IG9mIDMyIEkvT3MsIGlmIGl0IGlzIGVxdWFsIHRvIGAxNidoQUI0MGAsIHRoZW4gd2Uga25vdyB0aGF0IHRoZSB0ZXN0IHN0YXJ0ZWQuICAKKworCWBgYHZlcmlsb2cKKwl3YWl0KGNoZWNrYml0cyA9PSAxNidoQUI0MCk7CisJJGRpc3BsYXkoIkxBIFRlc3QgMSBzdGFydGVkIik7CisJYGBgCisJCisqIFRoZW4sIHRoZSBmaXJtd2FyZSBjb25maWd1cmVzIHRoZSBsb2dpYyBhbmFseXplciAoTEEpIHByb2JlcyBgWzMxOjBdYCBhcyBpbnB1dHMgdG8gdGhlIG1hbmFnZW1lbnQgU29DIHRvIG1vbml0b3IgdGhlIGNvdW50ZXIgdmFsdWUsIGFuZCBjb25maWd1cmUgdGhlIGxvZ2ljIGFuYWx5emVyIHByb2JlcyBgWzYzOjMyXWAgYXMgb3V0cHV0cyBmcm9tIHRoZSBtYW5hZ2VtZW50IFNvQyAoaW5wdXRzIHRvIHRoZSB1c2VyX3Byb2pfZXhhbXBsZSkgdG8gc2V0IHRoZSBjb3VudGVyIGluaXRpYWwgdmFsdWUuIFRoaXMgaXMgZG9uZSBieSB3cml0aW5nIHRvIHRoZSBMQSBwcm9iZXMgZW5hYmxlIHJlZ2lzdGVycy4gICBOb3RlIHRoYXQgdGhlIG91dHB1dCBlbmFibGUgaXMgYWN0aXZlIGxvdywgd2hpbGUgdGhlIGlucHV0IGVuYWJsZSBpcyBhY3RpdmUgaGlnaC4gIEV2ZXJ5IGNoYW5uZWwgY2FuIGJlIGNvbmZpZ3VyZWQgZm9yIGlucHV0LCBvdXRwdXQsIG9yIGJvdGggaW5kZXBlbmRlbnRseS4KKworIAorCWBgYGMKKwlyZWdfbGEwX29lbmIgPSByZWdfbGEwX2llbmEgPSAweEZGRkZGRkZGOyAgICAvLyBbMzE6MF0gaW5wdXRzIHRvIG1nbXRfc29jCisJcmVnX2xhMV9vZW5iID0gcmVnX2xhMV9pZW5hID0gMHgwMDAwMDAwMDsgICAgLy8gWzYzOjMyXSBvdXRwdXRzIGZyb20gbWdtdF9zb2MKKwlgYGAKKworKiBUaGVuLCB0aGUgZmlybXdhcmUgd3JpdGVzIGFuIGluaXRpYWwgdmFsdWUgdG8gdGhlIGNvdW50ZXIgdGhyb3VnaCB0aGUgTEExIGRhdGEgcmVnaXN0ZXIuIEFmdGUgd3JpdGluZyB0aGUgY291bnRlciB2YWx1ZSwgdGhlIExBIHByb2JlcyBhcmUgZGlzYWJsZWQgdG8gcHJldmVudCB0aGUgY291bnRlciB3cml0ZSBzaWduYWwgZnJvbSBiZWluZyBhbHdheXMgc2V0IHRvIG9uZS4gCisKKwlgYGBjCisJcmVnX2xhMV9kYXRhID0gMHgwMDAwMDAwMDsgICAgIC8vIFdyaXRlIHplcm8gdG8gY291bnQgcmVnaXN0ZXIKKwlyZWdfbGExX29lbmIgID0gcmVnX2xhMV9pZW5hID0gMHhGRkZGRkZGRjsgICAgIC8vIERpc2FibGUgcHJvYmVzCisJYGBgCisKKyogVGhlIGZpcm13YXJlIHRoZW4gd2FpdHMgdW50aWwgdGhlIGNvdW50IHZhbHVlIGV4Y2VlZHMgNTAwIGFuZCBmbGFncyB0aGUgc3VjY2VzcyBvZiB0aGUgdGVzdCBieSB3cml0aW5nIGAweEFCNDFgIHRvIHBhZHMgMTYgdG8gMzEuICBUaGUgZmlybXdhcmUgcmVhZHMgdGhlIGNvdW50IHZhbHVlIHRocm91Z2ggdGhlIGxvZ2ljIGFuYWx5emVyIHByb2JlcyBgWzMxOjBdYCAKKworCWBgYGMKKwlpZiAocmVnX2xhMF9kYXRhID4gMHgxRjQpIHsJICAgICAvLyBSZWFkIGN1cnJlbnQgY291bnQgdmFsdWUgdGhyb3VnaCBMQQorCQlyZWdfbXByal9kYXRhbCA9IDB4QUI0MTAwMDA7IC8vIEZsYWcgc3VjY2VzcyBvZiB0aGUgdGVzdAorCQlicmVhazsKKwl9CisJYGBgCisgIAorIyMjIExvZ2ljIEFuYWx5emVyIFRlc3QgMgorIAorKiBUaGlzIHRlc3QgaXMgbWVhbnQgdG8gdmVyaWZ5IHRoYXQgd2UgY2FuIGRyaXZlIHRoZSBjbG9jayBhbmQgcmVzZXQgc2lnbmFscyBmb3IgdGhlIHVzZXIgcHJvamVjdCBleGFtcGxlIHRocm91Z2ggdGhlIGxvZ2ljIGFuYWx5emVyLiBJbiB0aGUgW3VzZXJfcHJval9leGFtcGxlXSh2ZXJpbG9nL3J0bC91c2VyX3Byb2pfZXhhbXBsZS52KSBSVEwsIHRoZSBjbG9jayBjYW4gZWl0aGVyIGJlIHN1cHBsaWVkIGZyb20gdGhlIGB3Yl9jbGtfaWAgb3IgZnJvbSB0aGUgbG9naWMgYW5hbHl6ZXIgdGhyb3VnaCBiaXQgYFs2NF1gLiBTaW1pbGFybHksIHRoZSByZXNldCBzaWduYWwgY2FuIGJlIHN1cHBsaWVkIGZyb20gdGhlIGB3Yl9yc3RfaWAgb3IgdGhyb3VnaCBgTEFbNjVdYC4gIFRoZSBmaXJtd2FyZSBjb25maWd1cmVzIHRoZSBjbGsgYW5kIHJlc2V0IExBIHByb2JlcyBhcyBvdXRwdXRzIGZyb20gdGhlIG1hbmFnZW1lbnQgU29DIGJ5IHdyaXRpbmcgdG8gdGhlIExBMiBlbmFibGUgcmVnaXN0ZXIuIAorCisJYGBgYworCXJlZ19sYTJfb2VuYiAgPSByZWdfbGEyX2llbmEgPSAweEZGRkZGRkZDOyAJLy8gQ29uZmlndXJlIExBWzY0XSBMQVs2NV0gYXMgb3V0cHV0cyBmcm9tIHRoZSBjcHUKKwlgYGAKKworKiBUaGVuLCB0aGUgZmlybXdhcmUgc3VwcGxpZXMgYm90aCBjbG9jayByZXNldCBzaWduYWxzIHRocm91Z2ggTEEyIGRhdGEgcmVnaXN0ZXIuIEZpcnN0LCBib3RoIGFyZSBzZXQgdG8gb25lLiBUaGVuLCByZXNldCBpcyBkcml2ZW4gdG8gemVybyBhbmQgdGhlIGNsb2NrIGlzIHRvZ2dsZWQgZm9yIDYgY2xvY2sgY3ljbGVzLiAKKworCWBgYGMKKwlyZWdfbGEyX2RhdGEgPSAweDAwMDAwMDAzOwkvLyBXcml0ZSBvbmUgdG8gTEFbNjRdIGFuZCBMQVs2NV0KKwlmb3IgKGk9MDsgaTwxMTsgaT1pKzEpIHsgICAJLy8gVG9nZ2xlIGNsayAmIGRlLWFzc2VydCByZXNldAorCQljbGsgPSAhY2xrOyAgICAgICAgICAgICAgIAkKKwkJcmVnX2xhMl9kYXRhID0gMHgwMDAwMDAwMCB8IGNsazsKKwl9CisJYGBgCisqIFRoZSB0ZXN0YmVuY2ggc3VjY2VzcyBjcml0ZXJpYSBpcyB0aGF0IHRoZSBmaXJtd2FyZSByZWFkcyBhIGNvdW50IHZhbHVlIG9mIGZpdmUgdGhyb3VnaCB0aGUgTEEgcHJvYmVzLiAKKwlgYGBjCisJaWYgKHJlZ19sYTBfZGF0YSA9PSAweDA1KSB7CisJCXJlZ19tcHJqX2RhdGFsID0gMHhBQjYxMDAwMDsgICAvLyBGTGFnIHN1Y2Nlc3Mgb2YgdGhlIHRlc3QKKwl9CisJYGBgCisJCisjIyMgV2lzaGJvbmUgVGVzdAorCisqIFRoaXMgdGVzdCBpcyBtZWFudCB0byB2ZXJpZnkgdGhhdCB3ZSBjYW4gcmVhZCBhbmQgd3JpdGUgdG8gdGhlIGNvdW50IHJlZ2lzdGVyIHRocm91Z2ggdGhlIHdpc2hib25lIHBvcnQuIFRoZSBmaXJtd2FyZSB3cml0ZXMgYSB2YWx1ZSBvZiBgMHgyNzEwYCB0byB0aGUgY291bnQgcmVnaXN0ZXIsIHRoZW4gcmVhZHMgYmFjayB0aGUgY291bnQgdmFsdWUgYWZ0ZXIgc29tZSB0aW1lLiBUaGUgcmVhZCBhbmQgd3JpdGUgdHJhbnNhY3Rpb25zIGhhcHBlbiB0aHJvdWdoIHRoZSBtYW5hZ2VtZW50IFNvQyB3aXNoYm9uZSBidXMgYW5kIGFyZSBpbml0aWF0ZWQgYnkgZWl0aGVyIHdyaXRpbmcgb3IgcmVhZGluZyBmcm9tIHRoZSB1c2VyIHByb2plY3QgYWRkcmVzcyBvbiB0aGUgd2lzaGJvbmUgYnVzLiAKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvYWdlbnRzL3VhcnRfYWdlbnQudiBiL3Zlcmlsb2cvZHYvYWdlbnRzL3VhcnRfYWdlbnQudgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjEyMWU5Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9hZ2VudHMvdWFydF9hZ2VudC52CkBAIC0wLDAgKzEsNTI3IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAgMjAyMSAsIERpbmVzaCBBbm5heXlhCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBNb2RpZmllZCBieSBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorbW9kdWxlIHVhcnRfYWdlbnQgKAorCW1jbGssCisJdHhkLAorCXJ4ZAorCSk7CisKK2lucHV0CW1jbGs7CitvdXRwdXQJdHhkOworCitpbnB1dAlyeGQ7CisKK2V2ZW50CXVhcnRfcmVhZF9kb25lLCB1YXJ0X3dyaXRlX2RvbmU7CitldmVudAllcnJvcl9kZXRlY3RlZCx1YXJ0X3Bhcml0eV9lcnJvciwgdWFydF9zdG9wX2Vycm9yMSwgdWFydF9zdG9wX2Vycm9yMjsKK2V2ZW50IAl1YXJ0X3RpbWVvdXRfZXJyb3I7CitldmVudAlhYm9ydDsKKworcmVnIFsxNTowXSByeF9jb3VudDsKK3JlZyBbMTU6MF0gdHhfY291bnQ7CityZWcgWzE1OjBdIHBhcl9lcnJfY291bnQ7CityZWcgWzE1OjBdIHN0b3BfZXJyMV9jbnQ7CityZWcgWzE1OjBdIHN0b3BfZXJyMl9jbnQ7CityZWcgWzE1OjBdIHRpbWVvdXRfZXJyX2NudDsKK3JlZyBbMTU6MF0gZXJyX2NudDsKKworcmVnIAkgICB0eGQsIHJlYWQsIHdyaXRlOword2lyZQkgICB1YXJ0X3J4X2NsazsKK3JlZwkgICB1YXJ0X2NsazsKK3JlZwkgICBzdG9wX2Vycl9jaGVjazsKKworaW50ZWdlciB0aW1lb3V0X2NvdW50OworaW50ZWdlciBkYXRhX2JpdF9udW1iZXI7CityZWcgWzE1OjBdIGNsa19jb3VudDsKK3JlZyAgICAgICAgZGVidWdfbW9kZTsKKworcmVnICAgICAgZXJyb3JfaW5kOyAvLyAxIGluZGljYXRlIGVycm9yCisKK2luaXRpYWwgCitiZWdpbgorCWRlYnVnX21vZGUgPSAxOyAvLyBLZWVwIGluIGRlYnVnIG1vZGUgYW5kIGVuYWJsZSBkaXNwbGF5CisJdHhkID0gMSdiMTsKKyAJdWFydF9jbGsgPSAwOworCWNsa19jb3VudCA9IDA7CisJc3RvcF9lcnJfY2hlY2sgPSAwOworICBlcnJvcl9pbmQgPSAwOworZW5kCisKK2Fsd2F5cyBAKHBvc2VkZ2UgbWNsaykKK2JlZ2luCisgICBpZiAoY2xrX2NvdW50ID09ICdoMCkgYmVnaW4KKyAgICAgIHVhcnRfY2xrICA9IH51YXJ0X2NsazsKKyAgICAgIGNsa19jb3VudCA9IGNvbnRyb2xfc2V0dXAuZGl2aXNvcjsJCisgICBlbmQgZWxzZSBiZWdpbgorICAgICAgY2xrX2NvdW50ID0gY2xrX2NvdW50IC0gMTsJCisgICBlbmQKK2VuZAorYXNzaWduIHVhcnRfcnhfY2xrID0gdWFydF9jbGs7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgbWNsaykKK2JlZ2luCisJdGltZW91dF9jb3VudCA9IHRpbWVvdXRfY291bnQgKyAxOworCWlmICh0aW1lb3V0X2NvdW50ID09IChjb250cm9sX3NldHVwLm1heHRpbWUgKiAxNikpCisJCS0+IGFib3J0OworZW5kCisKK2Fsd2F5cyBAdWFydF9yZWFkX2RvbmUKKyAgICByeF9jb3VudCA9IHJ4X2NvdW50ICsgMTsKKworYWx3YXlzIEB1YXJ0X3dyaXRlX2RvbmUKKyAgICB0eF9jb3VudCA9IHR4X2NvdW50ICsgMTsKKworYWx3YXlzIEB1YXJ0X3Bhcml0eV9lcnJvciBiZWdpbgorICAgIGVycm9yX2luZCA9IDE7CisgICAgcGFyX2Vycl9jb3VudCA9IHBhcl9lcnJfY291bnQgKyAxOworZW5kCisKK2Fsd2F5cyBAdWFydF9zdG9wX2Vycm9yMSBiZWdpbgorICAgIGVycm9yX2luZCA9IDE7CisgICAgc3RvcF9lcnIxX2NudCA9IHN0b3BfZXJyMV9jbnQgKyAxOworZW5kCisKK2Fsd2F5cyBAdWFydF9zdG9wX2Vycm9yMiBiZWdpbgorICAgIGVycm9yX2luZCA9IDE7CisgICAgc3RvcF9lcnIyX2NudCA9IHN0b3BfZXJyMl9jbnQgKyAxOworZW5kCisKK2Fsd2F5cyBAdWFydF90aW1lb3V0X2Vycm9yIGJlZ2luCisgICAgZXJyb3JfaW5kID0gMTsKKyAgICB0aW1lb3V0X2Vycl9jbnQgPSB0aW1lb3V0X2Vycl9jbnQgKyAxOworZW5kCisKKworYWx3YXlzIEBlcnJvcl9kZXRlY3RlZCBiZWdpbgorICAgIGVycm9yX2luZCA9IDE7CisgICAgZXJyX2NudCA9IGVycl9jbnQgKyAxOworZW5kCisKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KK3Rhc2sgdWFydF9pbml0OworYmVnaW4KKyAgcmVhZCA9IDA7CisgIHdyaXRlID0gMDsKKyAgdHhfY291bnQgPSAwOworICByeF9jb3VudCA9IDA7CisgIHN0b3BfZXJyX2NoZWNrID0gMDsKKyAgcGFyX2Vycl9jb3VudCA9IDA7CisgIHN0b3BfZXJyMV9jbnQgPSAwOworICBzdG9wX2VycjJfY250ID0gMDsKKyAgdGltZW91dF9lcnJfY250ID0gMDsKKyAgZXJyX2NudCA9IDA7CisgIGNsa19jb3VudCA9IDA7CisKK2VuZCAKK2VuZHRhc2sgCisKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KK3Rhc2sgcmVhZF9jaGFyX2NoazsKK2lucHV0IAlleHBlY3RlZF9kYXRhOworCitpbnRlZ2VyIGk7CityZWcJWzc6MF0gZXhwZWN0ZWRfZGF0YTsKK3JlZyAJWzc6MF0gZGF0YTsKK3JlZwlwYXJpdHk7CisKK2JlZ2luCisJZGF0YSA8PSA4J2gwOworCXBhcml0eSA8PSAxOworCXRpbWVvdXRfY291bnQgPSAwOworCitmb3JrCQorICAgYmVnaW4gOiBsb29wXzEKKyAgICAgICAgQChhYm9ydCkKKwlpZihkZWJ1Z19tb2RlKQorICAgICAgICAgJGRpc3BsYXkgKCIlbTogPj4+Pj4gRXhjZWVkIHRpbWUgbGltaXQsIHVhcnQgbm8gcmVzcG9uY2UuXG4iKTsKKyAgICAgICAgIC0+dWFydF90aW1lb3V0X2Vycm9yOworICAgICAgICAgZGlzYWJsZSBsb29wXzI7CisgICBlbmQKKworICAgYmVnaW4gOiBsb29wXzIKKworLy8gc3RhcnQgY3ljbGUKKwlAKG5lZ2VkZ2UgcnhkKSAKKwkgZGlzYWJsZSBsb29wXzE7CisJIHJlYWQgPD0gMTsKKworLy8gZGF0YSBjeWNsZQorCUAocG9zZWRnZSB1YXJ0X3J4X2Nsayk7CisJIGZvciAoaSA9IDA7IGkgPCBkYXRhX2JpdF9udW1iZXI7IGkgPSBpICsgMSkKKwkgIGJlZ2luCisJICAgIEAocG9zZWRnZSB1YXJ0X3J4X2NsaykKKwkgICAgZGF0YVtpXSA8PSAgcnhkOworCSAgICBwYXJpdHkgPD0gcGFyaXR5IF4gcnhkOworCSAgZW5kCQkKKworLy8gcGFyaXR5IGN5Y2xlCisJaWYoY29udHJvbF9zZXR1cC5wYXJpdHlfZW4pCisJYmVnaW4KKyAgICAgICAgICBAKHBvc2VkZ2UgdWFydF9yeF9jbGspOworCSAgaWYgKChjb250cm9sX3NldHVwLmV2ZW5fb2RkX3Bhcml0eSAmJiAocnhkID09IHBhcml0eSkpIHx8CisJICAgICAoIWNvbnRyb2xfc2V0dXAuZXZlbl9vZGRfcGFyaXR5ICYmIChyeGQgIT0gcGFyaXR5KSkpCisJICAgICBiZWdpbgorCQkgICAkZGlzcGxheSAoIiVtOiA+Pj4+PiAgUGFyaXR5IEVycm9yIik7CQorIAkJLT4gZXJyb3JfZGV0ZWN0ZWQ7CisJCS0+IHVhcnRfcGFyaXR5X2Vycm9yOworCSAgICAgZW5kCisJZW5kCisKKy8vIHN0b3AgY3ljbGUgMQorICAgICAgICBAKHBvc2VkZ2UgdWFydF9yeF9jbGspOwkKKwkgIGlmICghcnhkKQorCSAgICAgYmVnaW4KKwkJJGRpc3BsYXkgKCIlbTogPj4+Pj4gIFN0b3Agc2lnbmFsIDEgRXJyb3IiKTsJCisgCQktPiBlcnJvcl9kZXRlY3RlZDsKKwkJLT4gdWFydF9zdG9wX2Vycm9yMTsKKwkgICAgIGVuZAorCisvLyBzdG9wIGN5Y2xlIDIKKwlpZiAoY29udHJvbF9zZXR1cC5zdG9wX2JpdF9udW1iZXIpCisJYmVnaW4KKwkgICAgICBAKHBvc2VkZ2UgdWFydF9yeF9jbGspOwkvLyBzdG9wIGN5Y2xlIDIKKwkJaWYgKCFyeGQpCisJCSAgYmVnaW4KKwkJICAgICRkaXNwbGF5ICgiJW06ID4+Pj4+ICBTdG9wIHNpZ25hbCAyIEVycm9yIik7CQorIAkJICAgIC0+IGVycm9yX2RldGVjdGVkOworCQkgICAgLT4gdWFydF9zdG9wX2Vycm9yMjsKKwkJICBlbmQKKwllbmQKKworCXJlYWQgPD0gMDsKKwktPiB1YXJ0X3JlYWRfZG9uZTsKKworCWlmIChleHBlY3RlZF9kYXRhICE9IGRhdGEpCisJYmVnaW4KKwkJJGRpc3BsYXkgKCIlbTogRXJyb3IhIERhdGEgcmV0dXJuIGlzICVoLCBleHBlY3RpbmcgJWgiLCBkYXRhLCBleHBlY3RlZF9kYXRhKTsKKwkJLT4gZXJyb3JfZGV0ZWN0ZWQ7CisJZW5kCisJZWxzZSBiZWdpbgorCSAgICAgICAgaWYoZGVidWdfbW9kZSkKKwkJICAkZGlzcGxheSAoIiVtOiBEYXRhIG1hdGNoICAlaCIsIGV4cGVjdGVkX2RhdGEpOworCWVuZAorCisJaWYoZGVidWdfbW9kZSkKKwkgICAkZGlzcGxheSAoIiVtOi4uLiBSZWFkIERhdGEgZnJvbSBVQVJUIGRvbmUgY250IDolZC4uLiIscnhfY291bnQgKzEpOworICAgZW5kCitqb2luCisKK2VuZAorCitlbmR0YXNrCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCit0YXNrIHJlYWRfY2hhcjI7CitvdXRwdXQgWzc6MF0JcnhkX2RhdGE7CitvdXRwdXQgICAgICAgICAgdGltZW91dDsgLy8gMS0+IHRpbWVvdXQKK2ludGVnZXIgaTsKK3JlZwlbNzowXSByeGRfZGF0YTsKK3JlZyAJWzc6MF0gZGF0YTsKK3JlZwlwYXJpdHk7CisKK2JlZ2luCisJZGF0YSA8PSA4J2gwOworCXBhcml0eSA8PSAxOworCXRpbWVvdXRfY291bnQgPSAwOworCXRpbWVvdXQgPSAwOworCisgICBmb3JrCQorICAgYmVnaW4gCisgICAgICAgIEAoYWJvcnQpCisgICAgICAgICAvLyRkaXNwbGF5ICgiPj4+Pj4gIEV4Y2VlZCB0aW1lIGxpbWl0LCB1YXJ0IG5vIHJlc3BvbmNlLlxuIik7CisgICAgICAgICAvLy0+dWFydF90aW1lb3V0X2Vycm9yOworCSAgdGltZW91dCA9IDE7CisgICBlbmQKKworICAgYmVnaW4KKworLy8gc3RhcnQgY3ljbGUKKwlAKG5lZ2VkZ2UgcnhkKSAKKwkgcmVhZCA8PSAxOworCisvLyBkYXRhIGN5Y2xlCisJQChwb3NlZGdlIHVhcnRfcnhfY2xrICk7CisJIGZvciAoaSA9IDA7IGkgPCBkYXRhX2JpdF9udW1iZXI7IGkgPSBpICsgMSkKKwkgIGJlZ2luCisJICAgIEAocG9zZWRnZSB1YXJ0X3J4X2NsaykKKwkgICAgZGF0YVtpXSA8PSAgcnhkOworCSAgICBwYXJpdHkgPD0gcGFyaXR5IF4gcnhkOworCSAgZW5kCQkKKworLy8gcGFyaXR5IGN5Y2xlCisJaWYoY29udHJvbF9zZXR1cC5wYXJpdHlfZW4pCisJYmVnaW4KKyAgICAgICAgICBAKHBvc2VkZ2UgdWFydF9yeF9jbGspOworCSAgaWYgKChjb250cm9sX3NldHVwLmV2ZW5fb2RkX3Bhcml0eSAmJiAocnhkID09IHBhcml0eSkpIHx8CisJICAgICAoIWNvbnRyb2xfc2V0dXAuZXZlbl9vZGRfcGFyaXR5ICYmIChyeGQgIT0gcGFyaXR5KSkpCisJICAgICBiZWdpbgorCQkkZGlzcGxheSAoIj4+Pj4+ICBQYXJpdHkgRXJyb3IiKTsJCisgCQktPiBlcnJvcl9kZXRlY3RlZDsKKwkJLT4gdWFydF9wYXJpdHlfZXJyb3I7CisJICAgICBlbmQKKwllbmQKKworLy8gc3RvcCBjeWNsZSAxCisgICAgICAgIEAocG9zZWRnZSB1YXJ0X3J4X2Nsayk7CQorCSAgaWYgKCFyeGQpCisJICAgICBiZWdpbgorCQkkZGlzcGxheSAoIj4+Pj4+ICBTdG9wIHNpZ25hbCAxIEVycm9yIik7CQorIAkJLT4gZXJyb3JfZGV0ZWN0ZWQ7CisJCS0+IHVhcnRfc3RvcF9lcnJvcjE7CisJICAgICBlbmQKKworLy8gc3RvcCBjeWNsZSAyCisJaWYgKGNvbnRyb2xfc2V0dXAuc3RvcF9iaXRfbnVtYmVyKQorCWJlZ2luCisJICAgICAgQChwb3NlZGdlIHVhcnRfcnhfY2xrKTsJLy8gc3RvcCBjeWNsZSAyCisJCWlmICghcnhkKQorCQkgIGJlZ2luCisJCSAgICAkZGlzcGxheSAoIj4+Pj4+ICBTdG9wIHNpZ25hbCAyIEVycm9yIik7CQorIAkJICAgIC0+IGVycm9yX2RldGVjdGVkOworCQkgICAgLT4gdWFydF9zdG9wX2Vycm9yMjsKKwkJICBlbmQKKwllbmQKKworCXJlYWQgPD0gMDsKKwktPiB1YXJ0X3JlYWRfZG9uZTsKKworLy8gICAgICAkZGlzcGxheSAoIiglbSkgUmVjZWl2ZWQgRGF0YSAgJWMiLCBkYXRhKTsKKy8vCSRkaXNwbGF5ICgiLi4uIFJlYWQgRGF0YSBmcm9tIFVBUlQgZG9uZSBjbnQgOiVkLi4uIixyeF9jb3VudCArMSk7CisgICAgICAgICR3cml0ZSAoIiVjIixkYXRhKTsKKwlyeGRfZGF0YSA9IGRhdGE7CisgICBlbmQKKyAgIGpvaW5fYW55CisgICBkaXNhYmxlIGZvcms7IC8vZGlzYWJsZSBwZW5kaW5nIGZvcmsgYWN0aXZpdHkKKworZW5kCisKK2VuZHRhc2sKKworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwordGFzayByZWFkX2NoYXI7CitvdXRwdXQgWzc6MF0JcnhkX2RhdGE7CitvdXRwdXQgICAgICAgICAgdGltZW91dDsgLy8gMS0+IHRpbWVvdXQKKworcmVnCVs3OjBdIHJ4ZF9kYXRhOworCisKK2ludGVnZXIgaTsKK3JlZwlbNzowXSBleHBlY3RlZF9kYXRhOworcmVnIAlbNzowXSBkYXRhOworcmVnCXBhcml0eTsKKworYmVnaW4KKwlkYXRhIDw9IDgnaDA7CisJcGFyaXR5IDw9IDE7CisJdGltZW91dF9jb3VudCA9IDA7CisJdGltZW91dCA9IDA7CisKKworZm9yawkKKyAgIGJlZ2luIDogbG9vcF8xCisgICAgICAgIEAoYWJvcnQpCisJIGlmKGRlYnVnX21vZGUpCisgICAgICAgICAgICAgJGRpc3BsYXkgKCIlbTogPj4+Pj4gRXhjZWVkIHRpbWUgbGltaXQsIHVhcnQgbm8gcmVzcG9uY2UuXG4iKTsKKwkgdGltZW91dCA9IDE7CisgICAgICAgICAtPnVhcnRfdGltZW91dF9lcnJvcjsKKyAgICAgICAgIGRpc2FibGUgbG9vcF8yOworICAgZW5kCisKKyAgIGJlZ2luIDogbG9vcF8yCisKKy8vIHN0YXJ0IGN5Y2xlCisJQChuZWdlZGdlIHJ4ZCkgCisJIGRpc2FibGUgbG9vcF8xOworCSByZWFkIDw9IDE7CisKKy8vIGRhdGEgY3ljbGUKKwlAKHBvc2VkZ2UgdWFydF9yeF9jbGspOworCSBmb3IgKGkgPSAwOyBpIDwgZGF0YV9iaXRfbnVtYmVyOyBpID0gaSArIDEpCisJICBiZWdpbgorCSAgICBAKHBvc2VkZ2UgdWFydF9yeF9jbGspCisJICAgIGRhdGFbaV0gPD0gIHJ4ZDsKKwkgICAgcGFyaXR5IDw9IHBhcml0eSBeIHJ4ZDsKKwkgIGVuZAkJCisKKy8vIHBhcml0eSBjeWNsZQorCWlmKGNvbnRyb2xfc2V0dXAucGFyaXR5X2VuKQorCWJlZ2luCisgICAgICAgICAgQChwb3NlZGdlIHVhcnRfcnhfY2xrKTsKKwkgIGlmICgoY29udHJvbF9zZXR1cC5ldmVuX29kZF9wYXJpdHkgJiYgKHJ4ZCA9PSBwYXJpdHkpKSB8fAorCSAgICAgKCFjb250cm9sX3NldHVwLmV2ZW5fb2RkX3Bhcml0eSAmJiAocnhkICE9IHBhcml0eSkpKQorCSAgICAgYmVnaW4KKwkJJGRpc3BsYXkgKCIlbTogPj4+Pj4gIFBhcml0eSBFcnJvciIpOwkKKyAJCS0+IGVycm9yX2RldGVjdGVkOworCQktPiB1YXJ0X3Bhcml0eV9lcnJvcjsKKwkgICAgIGVuZAorCWVuZAorCisvLyBzdG9wIGN5Y2xlIDEKKyAgICAgICAgQChwb3NlZGdlIHVhcnRfcnhfY2xrKTsJCisJICBpZiAoIXJ4ZCkKKwkgICAgIGJlZ2luCisJCSRkaXNwbGF5ICgiJW06ID4+Pj4+ICBTdG9wIHNpZ25hbCAxIEVycm9yIik7CQorIAkJLT4gZXJyb3JfZGV0ZWN0ZWQ7CisJCS0+IHVhcnRfc3RvcF9lcnJvcjE7CisJICAgICBlbmQKKworLy8gc3RvcCBjeWNsZSAyCisJaWYgKGNvbnRyb2xfc2V0dXAuc3RvcF9iaXRfbnVtYmVyKQorCWJlZ2luCisJICAgICAgQChwb3NlZGdlIHVhcnRfcnhfY2xrKTsJLy8gc3RvcCBjeWNsZSAyCisJCWlmICghcnhkKQorCQkgIGJlZ2luCisJCSAgICAkZGlzcGxheSAoIiVtOiA+Pj4+PiAgU3RvcCBzaWduYWwgMiBFcnJvciIpOwkKKyAJCSAgICAtPiBlcnJvcl9kZXRlY3RlZDsKKwkJICAgIC0+IHVhcnRfc3RvcF9lcnJvcjI7CisJCSAgZW5kCisJZW5kCisKKwlyZWFkIDw9IDA7CisJLT4gdWFydF9yZWFkX2RvbmU7CisKKwlyeGRfZGF0YSA9IGRhdGE7CisKKworCWlmKGRlYnVnX21vZGUpIGJlZ2luCisJICAgJGRpc3BsYXkgKCIlbTogUmVjZWl2ZWQgRGF0YSAlaCIsIHJ4ZF9kYXRhKTsKKwkgICAkZGlzcGxheSAoIiVtOi4uLiBSZWFkIERhdGEgZnJvbSBVQVJUIGRvbmUgY250IDolZC4uLiIscnhfY291bnQgKzEpOworICAgICAgICBlbmQKKyAgIGVuZAoram9pbgorCitlbmQKKworZW5kdGFzaworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwordGFzayB3cml0ZV9jaGFyOworaW5wdXQgWzc6MF0gZGF0YTsKKworaW50ZWdlciBpOworcmVnIHBhcml0eTsJLy8gMDogb2RkIHBhcml0eSwgMTogZXZlbiBwYXJpdHkKKworYmVnaW4KKwlwYXJpdHkgPD0gICMxIDE7CisKKy8vIHN0YXJ0IGN5Y2xlCisJQChwb3NlZGdlIHVhcnRfY2xrKQorCSBiZWdpbgorCQl0eGQgPD0gIzEgMDsKKwkJd3JpdGUgPD0gIzEgMTsKKwkgZW5kCisKKy8vIGRhdGEgY3ljbGUKKwliZWdpbgorCSAgIGZvciAoaSA9IDA7IGkgPCBkYXRhX2JpdF9udW1iZXI7IGkgPSBpICsgMSkKKwkgICBiZWdpbgorCQlAKHBvc2VkZ2UgdWFydF9jbGspCisJCSAgICB0eGQgPD0gIzEgZGF0YVtpXTsKKwkJcGFyaXR5IDw9IHBhcml0eSBeIGRhdGFbaV07CisJICAgZW5kCisJZW5kCisKKy8vIHBhcml0eSBjeWNsZQorCWlmIChjb250cm9sX3NldHVwLnBhcml0eV9lbikKKwliZWdpbgorCQlAKHBvc2VkZ2UgdWFydF9jbGspCisJCQl0eGQgPD0gIzEgCisvLwkJCQljb250cm9sX3NldHVwLnN0aWNrX3Bhcml0eSA/IH5jb250cm9sX3NldHVwLmV2ZW5fb2RkX3Bhcml0eSA6IAorCQkJCWNvbnRyb2xfc2V0dXAuZXZlbl9vZGRfcGFyaXR5ID8gIXBhcml0eSA6IHBhcml0eTsKKwllbmQKKworLy8gc3RvcCBjeWNsZSAxCisJQChwb3NlZGdlIHVhcnRfY2xrKQorCQl0eGQgPD0gIzEgc3RvcF9lcnJfY2hlY2sgPyAwIDogMTsKKworLy8gc3RvcCBjeWNsZSAyCisJQChwb3NlZGdlIHVhcnRfY2xrKTsKKwkJdHhkIDw9ICMxIDE7CisJaWYgKGRhdGFfYml0X251bWJlciA9PSA1KQorCQlAKG5lZ2VkZ2UgdWFydF9jbGspOworCWVsc2UgaWYgKGNvbnRyb2xfc2V0dXAuc3RvcF9iaXRfbnVtYmVyKQorCQlAKHBvc2VkZ2UgdWFydF9jbGspOworCisJd3JpdGUgPD0gIzEgMDsKKwlpZihkZWJ1Z19tb2RlKQorCSAgICRkaXNwbGF5ICgiJW06Li4uIFdyaXRlIGRhdGEgJWggdG8gVUFSVCBkb25lIGNudCA6ICVkIC4uLlxuIiwgZGF0YSx0eF9jb3VudCsxKTsKKyAgICAgICAgZWxzZQorCSAgICR3cml0ZSAoIiVjIixkYXRhKTsKKwktPiB1YXJ0X3dyaXRlX2RvbmU7CitlbmQKK2VuZHRhc2sKKworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwordGFzayBjb250cm9sX3NldHVwOworaW5wdXQJICBbMTowXSBkYXRhX2JpdF9zZXQ7CQoraW5wdXQJCXN0b3BfYml0X251bWJlcjsKK2lucHV0CQlwYXJpdHlfZW47CitpbnB1dAkJZXZlbl9vZGRfcGFyaXR5OworaW5wdXQJCXN0aWNrX3Bhcml0eTsKK2lucHV0CSBbMTU6MF0gbWF4dGltZTsKK2lucHV0CSBbMTU6MF0gZGl2aXNvcjsKKworYmVnaW4KKyAgICAgICAgY2xrX2NvdW50ID0gZGl2aXNvcjsJCisJZGF0YV9iaXRfbnVtYmVyID0gZGF0YV9iaXRfc2V0ICsgNTsKK2VuZAorZW5kdGFzaworCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCit0YXNrIHJlcG9ydF9zdGF0dXM7CitvdXRwdXQgCVsxNTowXSByeF9udTsKK291dHB1dCAJWzE1OjBdIHR4X251OworYmVnaW4KKwkkZGlzcGxheSAoIi0tLS0tLS0tLS0tLS0tLS0tLS0tIFVBUlQgUmVwb3J0aW5nIENvbmZpZ3VyYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKKwkkZGlzcGxheSAoIglEYXRhIGJpdCBudW1iZXIgc2V0dGluZyBpcyA6ICUwZCIsIGRhdGFfYml0X251bWJlcik7CisJJGRpc3BsYXkgKCIJU3RvcCBiaXQgbnVtYmVyIHNldHRpbmcgaXMgOiAlMGQiLCBjb250cm9sX3NldHVwLnN0b3BfYml0X251bWJlciArIDEpOworCSRkaXNwbGF5ICgiCURpdmlzb3Igb2YgVWFydCBjbG9jayAgIGlzIDogJTBkIiwgY29udHJvbF9zZXR1cC5kaXZpc29yKTsKKwlpZiAoY29udHJvbF9zZXR1cC5wYXJpdHlfZW4pIAorCSRkaXNwbGF5ICgiCVBhcml0eSBpcyBlbmFibGUiKTsKKwllbHNlCisJJGRpc3BsYXkgKCIJUGFyaXR5IGlzIGRpc2FibGUiKTsKKwkKKwlpZiAoY29udHJvbF9zZXR1cC5ldmVuX29kZF9wYXJpdHkpCisJJGRpc3BsYXkgKCIJRXZlbiBwYXJpdHkgc2V0dGluZyIpOworCWVsc2UJCisJJGRpc3BsYXkgKCIJT2RkIHBhcml0eSBzZXR0aW5nIik7CisKKworCSRkaXNwbGF5ICgiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKKworCSRkaXNwbGF5ICgiLS0tLS0tLS0tLS0tLS0tLS0tLS0gUmVwb3J0aW5nIFN0YXR1cyAtLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CisJJGRpc3BsYXkgKCIJTnVtYmVyIG9mIGNoYXJhY3RlciByZWNlaXZlZCBpcyA6ICVkIiwgcnhfY291bnQpOworCSRkaXNwbGF5ICgiCU51bWJlciBvZiBjaGFyYWN0ZXIgc2VudCAgICAgaXMgOiAlZCIsIHR4X2NvdW50KTsKKwkkZGlzcGxheSAoIglOdW1iZXIgb2YgcGFyaXR5IGVycm9yIHJ4ZCAgIGlzIDogJWQiLCBwYXJfZXJyX2NvdW50KTsKKwkkZGlzcGxheSAoIglOdW1iZXIgb2Ygc3RvcDEgIGVycm9yIHJ4ZCAgIGlzIDogJWQiLCBzdG9wX2VycjFfY250KTsKKwkkZGlzcGxheSAoIglOdW1iZXIgb2Ygc3RvcDIgIGVycm9yIHJ4ZCAgIGlzIDogJWQiLCBzdG9wX2VycjJfY250KTsKKwkkZGlzcGxheSAoIglOdW1iZXIgb2YgdGltZW91dCBlcnJvciAgICAgIGlzIDogJWQiLCB0aW1lb3V0X2Vycl9jbnQpOworCSRkaXNwbGF5ICgiCU51bWJlciBvZiBlcnJvciAgICAgICAgICAgICAgaXMgOiAlZCIsIGVycl9jbnQpOworCSRkaXNwbGF5ICgiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKKworCXJ4X251ID0gcnhfY291bnQ7CisJdHhfbnUgPSB0eF9jb3VudDsKK2VuZAorZW5kdGFzaworCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCitlbmRtb2R1bGUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvYWdlbnRzL3VhcnRfbWFzdGVyX3Rhc2tzLnN2IGIvdmVyaWxvZy9kdi9hZ2VudHMvdWFydF9tYXN0ZXJfdGFza3Muc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBhMWE3ZAotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvYWdlbnRzL3VhcnRfbWFzdGVyX3Rhc2tzLnN2CkBAIC0wLDAgKzEsMjAxIEBACisKK3Rhc2sgdWFydG1fcmVnX3dyaXRlOworaW5wdXQgWzMxOjBdIGFkZHI7CitpbnB1dCBbMzE6MF0gZGF0YTsKK3JlZyBbNzowXSByZWFkX2RhdGE7CityZWcgZmxhZzsKK2JlZ2luCisgICBmb3JrCisgICBiZWdpbiA6IGxvb3BfMQorICAgICAgIHRiX21hc3Rlcl91YXJ0LndyaXRlX2NoYXIoInciKTsKKyAgICAgICB0Yl9tYXN0ZXJfdWFydC53cml0ZV9jaGFyKCJtIik7CisgICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcigiICIpOworICAgICAgIHRiX21hc3Rlcl91YXJ0LndyaXRlX2NoYXIoaGV4MmNoYXIoYWRkclszMToyOF0pKTsKKyAgICAgICB0Yl9tYXN0ZXJfdWFydC53cml0ZV9jaGFyKGhleDJjaGFyKGFkZHJbMjc6MjRdKSk7CisgICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcihoZXgyY2hhcihhZGRyWzIzOjIwXSkpOworICAgICAgIHRiX21hc3Rlcl91YXJ0LndyaXRlX2NoYXIoaGV4MmNoYXIoYWRkclsxOToxNl0pKTsKKyAgICAgICB0Yl9tYXN0ZXJfdWFydC53cml0ZV9jaGFyKGhleDJjaGFyKGFkZHJbMTU6MTJdKSk7CisgICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcihoZXgyY2hhcihhZGRyWzExOjhdKSk7CisgICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcihoZXgyY2hhcihhZGRyWzc6NF0pKTsKKyAgICAgICB0Yl9tYXN0ZXJfdWFydC53cml0ZV9jaGFyKGhleDJjaGFyKGFkZHJbMzowXSkpOworICAgICAgIHRiX21hc3Rlcl91YXJ0LndyaXRlX2NoYXIoIiAiKTsKKyAgICAgICB0Yl9tYXN0ZXJfdWFydC53cml0ZV9jaGFyKGhleDJjaGFyKGRhdGFbMzE6MjhdKSk7CisgICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcihoZXgyY2hhcihkYXRhWzI3OjI0XSkpOworICAgICAgIHRiX21hc3Rlcl91YXJ0LndyaXRlX2NoYXIoaGV4MmNoYXIoZGF0YVsyMzoyMF0pKTsKKyAgICAgICB0Yl9tYXN0ZXJfdWFydC53cml0ZV9jaGFyKGhleDJjaGFyKGRhdGFbMTk6MTZdKSk7CisgICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcihoZXgyY2hhcihkYXRhWzE1OjEyXSkpOworICAgICAgIHRiX21hc3Rlcl91YXJ0LndyaXRlX2NoYXIoaGV4MmNoYXIoZGF0YVsxMTo4XSkpOworICAgICAgIHRiX21hc3Rlcl91YXJ0LndyaXRlX2NoYXIoaGV4MmNoYXIoZGF0YVs3OjRdKSk7CisgICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcihoZXgyY2hhcihkYXRhWzM6MF0pKTsKKyAgICAgICB0Yl9tYXN0ZXJfdWFydC53cml0ZV9jaGFyKCJcbiIpOworICAgZW5kCisgICBiZWdpbiA6IGxvb3BfMgorICAgICAgIC8vIFdhaXQgZm9yIHN1Y2VzcyBjb21tYW5kCisgICAgICAgZmxhZyA9IDA7CisgICAgICAgd2hpbGUoZmxhZyA9PSAwKQorICAgICAgIGJlZ2luCisgICAgICAgICAgdGJfbWFzdGVyX3VhcnQucmVhZF9jaGFyMihyZWFkX2RhdGEsZmxhZyk7CisgICAgICAgICAgLy8kd3JpdGUgKCIlYyIscmVhZF9kYXRhKTsKKyAgICAgICBlbmQKKyAgIGVuZAorICAgam9pbgorZW5kCitlbmR0YXNrCisKK3Rhc2sgdWFydG1fcmVnX3JlYWQ7CitpbnB1dCBbMzE6MF0gYWRkcjsKK291dHB1dCBbMzE6MF0gZGF0YTsKK3JlZyBbNzowXSByZWFkX2RhdGE7CityZWcgZmxhZzsKK2ludGVnZXIgaTsKK2JlZ2luCisgICBmb3JrCisgICBiZWdpbiA6IGxvb3BfMQorICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcigiciIpOworICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcigibSIpOworICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcigiICIpOworICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcihoZXgyY2hhcihhZGRyWzMxOjI4XSkpOworICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcihoZXgyY2hhcihhZGRyWzI3OjI0XSkpOworICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcihoZXgyY2hhcihhZGRyWzIzOjIwXSkpOworICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcihoZXgyY2hhcihhZGRyWzE5OjE2XSkpOworICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcihoZXgyY2hhcihhZGRyWzE1OjEyXSkpOworICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcihoZXgyY2hhcihhZGRyWzExOjhdKSk7CisgICAgICB0Yl9tYXN0ZXJfdWFydC53cml0ZV9jaGFyKGhleDJjaGFyKGFkZHJbNzo0XSkpOworICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcihoZXgyY2hhcihhZGRyWzM6MF0pKTsKKyAgICAgIHRiX21hc3Rlcl91YXJ0LndyaXRlX2NoYXIoIlxuIik7CisgICBlbmQKKyAgIGJlZ2luIDogbG9vcF8yCisgICAgICAvLyBXYWl0IGZvciBzdWNlc3MgY29tbWFuZAorICAgICAgZmxhZyA9IDA7CisgICAgICBpID0gMDsKKyAgICAgIHdoaWxlKGZsYWcgPT0gMCkKKyAgICAgIGJlZ2luCisgICAgICAgICB0Yl9tYXN0ZXJfdWFydC5yZWFkX2NoYXIyKHJlYWRfZGF0YSxmbGFnKTsKKyAgICAgICAgIC8vJHdyaXRlICgiJWQ6JWMiLGkscmVhZF9kYXRhKTsKKyAgICAgICAgICAgY2FzZSAoaSkKKyAgICAgICAgICAgOCdkMTAgOiBkYXRhWzMxOjI4XSA9IGNoYXIyaGV4KHJlYWRfZGF0YSk7CisgICAgICAgICAgIDgnZDExIDogZGF0YVsyNzoyNF0gPSBjaGFyMmhleChyZWFkX2RhdGEpOworICAgICAgICAgICA4J2QxMiA6IGRhdGFbMjM6MjBdID0gY2hhcjJoZXgocmVhZF9kYXRhKTsKKyAgICAgICAgICAgOCdkMTMgOiBkYXRhWzE5OjE2XSA9IGNoYXIyaGV4KHJlYWRfZGF0YSk7CisgICAgICAgICAgIDgnZDE0IDogZGF0YVsxNToxMl0gPSBjaGFyMmhleChyZWFkX2RhdGEpOworICAgICAgICAgICA4J2QxNSA6IGRhdGFbMTE6OF0gID0gY2hhcjJoZXgocmVhZF9kYXRhKTsKKyAgICAgICAgICAgOCdkMTYgOiBkYXRhWzc6NF0gICA9IGNoYXIyaGV4KHJlYWRfZGF0YSk7CisgICAgICAgICAgIDgnZDE3IDogZGF0YVszOjBdICAgPSBjaGFyMmhleChyZWFkX2RhdGEpOworICAgICAgICAgICBlbmRjYXNlCisJICAgaSA9IGkrMTsKKyAgICAgIGVuZAorICAgZW5kCisgICBqb2luCisgICAkZGlzcGxheSgicmVjZWl2ZWQgRGF0YTogJXgiLGRhdGEpOworCitlbmQKK2VuZHRhc2sKKwordGFzayB1YXJ0bV9yZWdfcmVhZF9jaGVjazsKK2lucHV0IFszMTowXSBhZGRyOworaW5wdXQgWzMxOjBdIGV4cF9kYXRhOworcmVnIFszMTowXSByeGRfZGF0YTsKK3JlZyBbNzowXSByZWFkX2RhdGE7CityZWcgZmxhZzsKK2ludGVnZXIgaTsKK2JlZ2luCisgICBmb3JrCisgICBiZWdpbiA6IGxvb3BfMQorICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcigiciIpOworICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcigibSIpOworICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcigiICIpOworICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcihoZXgyY2hhcihhZGRyWzMxOjI4XSkpOworICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcihoZXgyY2hhcihhZGRyWzI3OjI0XSkpOworICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcihoZXgyY2hhcihhZGRyWzIzOjIwXSkpOworICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcihoZXgyY2hhcihhZGRyWzE5OjE2XSkpOworICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcihoZXgyY2hhcihhZGRyWzE1OjEyXSkpOworICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcihoZXgyY2hhcihhZGRyWzExOjhdKSk7CisgICAgICB0Yl9tYXN0ZXJfdWFydC53cml0ZV9jaGFyKGhleDJjaGFyKGFkZHJbNzo0XSkpOworICAgICAgdGJfbWFzdGVyX3VhcnQud3JpdGVfY2hhcihoZXgyY2hhcihhZGRyWzM6MF0pKTsKKyAgICAgIHRiX21hc3Rlcl91YXJ0LndyaXRlX2NoYXIoIlxuIik7CisgICBlbmQKKyAgIGJlZ2luIDogbG9vcF8yCisgICAgICAvLyBXYWl0IGZvciBzdWNlc3MgY29tbWFuZAorICAgICAgZmxhZyA9IDA7CisgICAgICBpID0gMDsKKyAgICAgIHdoaWxlKGZsYWcgPT0gMCkKKyAgICAgIGJlZ2luCisgICAgICAgICB0Yl9tYXN0ZXJfdWFydC5yZWFkX2NoYXIyKHJlYWRfZGF0YSxmbGFnKTsKKyAgICAgICAgIC8vJHdyaXRlICgiJWQ6JWMiLGkscmVhZF9kYXRhKTsKKyAgICAgICAgICAgY2FzZSAoaSkKKyAgICAgICAgICAgOCdkMTAgOiByeGRfZGF0YVszMToyOF0gPSBjaGFyMmhleChyZWFkX2RhdGEpOworICAgICAgICAgICA4J2QxMSA6IHJ4ZF9kYXRhWzI3OjI0XSA9IGNoYXIyaGV4KHJlYWRfZGF0YSk7CisgICAgICAgICAgIDgnZDEyIDogcnhkX2RhdGFbMjM6MjBdID0gY2hhcjJoZXgocmVhZF9kYXRhKTsKKyAgICAgICAgICAgOCdkMTMgOiByeGRfZGF0YVsxOToxNl0gPSBjaGFyMmhleChyZWFkX2RhdGEpOworICAgICAgICAgICA4J2QxNCA6IHJ4ZF9kYXRhWzE1OjEyXSA9IGNoYXIyaGV4KHJlYWRfZGF0YSk7CisgICAgICAgICAgIDgnZDE1IDogcnhkX2RhdGFbMTE6OF0gID0gY2hhcjJoZXgocmVhZF9kYXRhKTsKKyAgICAgICAgICAgOCdkMTYgOiByeGRfZGF0YVs3OjRdICAgPSBjaGFyMmhleChyZWFkX2RhdGEpOworICAgICAgICAgICA4J2QxNyA6IHJ4ZF9kYXRhWzM6MF0gICA9IGNoYXIyaGV4KHJlYWRfZGF0YSk7CisgICAgICAgICAgIGVuZGNhc2UKKwkgICBpID0gaSsxOworICAgICAgZW5kCisgICBlbmQKKyAgIGpvaW4KKyAgIGlmKHJ4ZF9kYXRhID09IGV4cF9kYXRhKSBiZWdpbgorICAgICAgLy8gJGRpc3BsYXkoIlNUQVRVUzogQUREUkVTUzogJXggUlhEOiAleCIsIGFkZHIscnhkX2RhdGEpOworICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgICRkaXNwbGF5KCJFUlJPUjogIEFERFJFU1M6ICV4IEVYUDogJXggUlhEOiAleCIsIGFkZHIsZXhwX2RhdGEscnhkX2RhdGEpOworICAgICAgdGVzdF9mYWlsID0gMTsKKyAgIGVuZAorCisKK2VuZAorZW5kdGFzaworCisvLyBDaGFyYWN0ZXIgdG8gaGV4IG51bWJlcgorZnVuY3Rpb24gWzM6MF0gY2hhcjJoZXg7CitpbnB1dCBbNzowXSBkYXRhX2luOworY2FzZSAoZGF0YV9pbikKKyAgICAgOCdoMzA6CWNoYXIyaGV4ID0gNCdoMDsgLy8gY2hhcmFjdGVyICcwJyAKKyAgICAgOCdoMzE6CWNoYXIyaGV4ID0gNCdoMTsgLy8gY2hhcmFjdGVyICcxJworICAgICA4J2gzMjoJY2hhcjJoZXggPSA0J2gyOyAvLyBjaGFyYWN0ZXIgJzInCisgICAgIDgnaDMzOgljaGFyMmhleCA9IDQnaDM7IC8vIGNoYXJhY3RlciAnMycKKyAgICAgOCdoMzQ6CWNoYXIyaGV4ID0gNCdoNDsgLy8gY2hhcmFjdGVyICc0JyAKKyAgICAgOCdoMzU6CWNoYXIyaGV4ID0gNCdoNTsgLy8gY2hhcmFjdGVyICc1JworICAgICA4J2gzNjoJY2hhcjJoZXggPSA0J2g2OyAvLyBjaGFyYWN0ZXIgJzYnCisgICAgIDgnaDM3OgljaGFyMmhleCA9IDQnaDc7IC8vIGNoYXJhY3RlciAnNycKKyAgICAgOCdoMzg6CWNoYXIyaGV4ID0gNCdoODsgLy8gY2hhcmFjdGVyICc4JworICAgICA4J2gzOToJY2hhcjJoZXggPSA0J2g5OyAvLyBjaGFyYWN0ZXIgJzknCisgICAgIDgnaDQxOgljaGFyMmhleCA9IDQnaEE7IC8vIGNoYXJhY3RlciAnQScKKyAgICAgOCdoNDI6CWNoYXIyaGV4ID0gNCdoQjsgLy8gY2hhcmFjdGVyICdCJworICAgICA4J2g0MzoJY2hhcjJoZXggPSA0J2hDOyAvLyBjaGFyYWN0ZXIgJ0MnCisgICAgIDgnaDQ0OgljaGFyMmhleCA9IDQnaEQ7IC8vIGNoYXJhY3RlciAnRCcKKyAgICAgOCdoNDU6CWNoYXIyaGV4ID0gNCdoRTsgLy8gY2hhcmFjdGVyICdFJworICAgICA4J2g0NjoJY2hhcjJoZXggPSA0J2hGOyAvLyBjaGFyYWN0ZXIgJ0YnCisgICAgIDgnaDYxOgljaGFyMmhleCA9IDQnaEE7IC8vIGNoYXJhY3RlciAnYScKKyAgICAgOCdoNjI6CWNoYXIyaGV4ID0gNCdoQjsgLy8gY2hhcmFjdGVyICdiJworICAgICA4J2g2MzoJY2hhcjJoZXggPSA0J2hDOyAvLyBjaGFyYWN0ZXIgJ2MnCisgICAgIDgnaDY0OgljaGFyMmhleCA9IDQnaEQ7IC8vIGNoYXJhY3RlciAnZCcKKyAgICAgOCdoNjU6CWNoYXIyaGV4ID0gNCdoRTsgLy8gY2hhcmFjdGVyICdlJworICAgICA4J2g2NjoJY2hhcjJoZXggPSA0J2hGOyAvLyBjaGFyYWN0ZXIgJ2YnCisgICAgICBkZWZhdWx0IDogIGNoYXIyaGV4ID0gNCdoRjsKKyAgIGVuZGNhc2UgCitlbmRmdW5jdGlvbgorCisvLyBIZXggdG8gQXNjaSBDaGFyYWN0ZXIgCitmdW5jdGlvbiBbNzowXSBoZXgyY2hhcjsKK2lucHV0IFszOjBdIGRhdGFfaW47CitjYXNlIChkYXRhX2luKQorICAgICA0J2gwOgloZXgyY2hhciA9IDgnaDMwOyAvLyBjaGFyYWN0ZXIgJzAnIAorICAgICA0J2gxOgloZXgyY2hhciA9IDgnaDMxOyAvLyBjaGFyYWN0ZXIgJzEnCisgICAgIDQnaDI6CWhleDJjaGFyID0gOCdoMzI7IC8vIGNoYXJhY3RlciAnMicKKyAgICAgNCdoMzoJaGV4MmNoYXIgPSA4J2gzMzsgLy8gY2hhcmFjdGVyICczJworICAgICA0J2g0OgloZXgyY2hhciA9IDgnaDM0OyAvLyBjaGFyYWN0ZXIgJzQnIAorICAgICA0J2g1OgloZXgyY2hhciA9IDgnaDM1OyAvLyBjaGFyYWN0ZXIgJzUnCisgICAgIDQnaDY6CWhleDJjaGFyID0gOCdoMzY7IC8vIGNoYXJhY3RlciAnNicKKyAgICAgNCdoNzoJaGV4MmNoYXIgPSA4J2gzNzsgLy8gY2hhcmFjdGVyICc3JworICAgICA0J2g4OgloZXgyY2hhciA9IDgnaDM4OyAvLyBjaGFyYWN0ZXIgJzgnCisgICAgIDQnaDk6CWhleDJjaGFyID0gOCdoMzk7IC8vIGNoYXJhY3RlciAnOScKKyAgICAgNCdoQToJaGV4MmNoYXIgPSA4J2g0MTsgLy8gY2hhcmFjdGVyICdBJworICAgICA0J2hCOgloZXgyY2hhciA9IDgnaDQyOyAvLyBjaGFyYWN0ZXIgJ0InCisgICAgIDQnaEM6CWhleDJjaGFyID0gOCdoNDM7IC8vIGNoYXJhY3RlciAnQycKKyAgICAgNCdoRDoJaGV4MmNoYXIgPSA4J2g0NDsgLy8gY2hhcmFjdGVyICdEJworICAgICA0J2hFOgloZXgyY2hhciA9IDgnaDQ1OyAvLyBjaGFyYWN0ZXIgJ0UnCisgICAgIDQnaEY6CWhleDJjaGFyID0gOCdoNDY7IC8vIGNoYXJhY3RlciAnRicKKyAgIGVuZGNhc2UgCitlbmRmdW5jdGlvbgpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9maXJtd2FyZS9MSUNFTlNFIGIvdmVyaWxvZy9kdi9maXJtd2FyZS9MSUNFTlNFCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4ZmU1MjIKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L2Zpcm13YXJlL0xJQ0VOU0UKQEAgLTAsMCArMSwyNCBAQAorQ29weXJpZ2h0IChjKSAyMDEyLTIwMTUsIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEgKFJlZ2VudHMpLgorQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKzMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFJlZ2VudHMgbm9yIHRoZQorICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitJTiBOTyBFVkVOVCBTSEFMTCBSRUdFTlRTIEJFIExJQUJMRSBUTyBBTlkgUEFSVFkgRk9SIERJUkVDVCwgSU5ESVJFQ1QsCitTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIElOQ0xVRElORyBMT1NUIFBST0ZJVFMsIEFSSVNJTkcKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OLCBFVkVOIElGIFJFR0VOVFMgSEFTCitCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitSRUdFTlRTIFNQRUNJRklDQUxMWSBESVNDTEFJTVMgQU5ZIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorUFVSUE9TRS4gVEhFIFNPRlRXQVJFIEFORCBBQ0NPTVBBTllJTkcgRE9DVU1FTlRBVElPTiwgSUYgQU5ZLCBQUk9WSURFRAorSEVSRVVOREVSIElTIFBST1ZJREVEICJBUyBJUyIuIFJFR0VOVFMgSEFTIE5PIE9CTElHQVRJT04gVE8gUFJPVklERQorTUFJTlRFTkFOQ0UsIFNVUFBPUlQsIFVQREFURVMsIEVOSEFOQ0VNRU5UUywgT1IgTU9ESUZJQ0FUSU9OUy4KZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvZmlybXdhcmUvY29tbW9uLm1rIGIvdmVyaWxvZy9kdi9maXJtd2FyZS9jb21tb24ubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDAyZDM0NgotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvZmlybXdhcmUvY29tbW9uLm1rCkBAIC0wLDAgKzEsNjYgQEAKKyMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisjIC8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEsIERpbmVzaCBBbm5heXlhCisjIC8vIAorIyAvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgLy8KKyMgLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgLy8KKyMgLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMgLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyMgLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisjIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK0FERF9BU01fTUFDUk8gPz0gLURfX0FTU0VNQkxZX189MQorCitGTEFHUyA9IC1PMiAtZnVucm9sbC1sb29wcyAtZnBlZWwtbG9vcHMgLWZnY3NlLXNtIC1mZ2NzZS1sYXMgJChBRERfRkxBR1MpCitGTEFHU19TVFIgPSAiJChGTEFHUykiCisKK0NGTEFHU19DT01NT04gPSAtc3RhdGljIC1zdGQ9Z251OTkgLWZuby1jb21tb24gLWZuby1idWlsdGluLXByaW50ZiAtRFRDTT0kKFRDTSkKK0NGTEFHU19BUkNIID0gLVdhLC1tYXJjaD1ydjMyJChBUkNIKSAtbWFyY2g9cnYzMiQoQVJDSCkgLW1hYmk9JChBQkkpCisKK0NGTEFHUyA6PSAkKEZMQUdTKSAkKEVYVF9DRkxBR1MpIFwKKyQoQ0ZMQUdTX0NPTU1PTikgXAorJChDRkxBR1NfQVJDSCkgXAorLURGTEFHU19TVFI9XCIkKEZMQUdTX1NUUilcIiBcCiskKEFERF9DRkxBR1MpCisKK0xERkxBR1MgICA/PSAtbm9zdGFydGZpbGVzIC1ub3N0ZGxpYiAtbGMgLWxnY2MgLW1hcmNoPXJ2MzIkKEFSQ0gpIC1tYWJpPSQoQUJJKQorCitpZmVxICgsJChmaW5kc3RyaW5nIDAsJChUQ00pKSkKK2xkX3NjcmlwdCA/PSAkKGluY19kaXIpL2xpbmtfdGNtLmxkCithc21fc3JjICAgPz0gY3J0X3RjbS5TCitlbHNlCitsZF9zY3JpcHQgPz0gJChpbmNfZGlyKS9saW5rLmxkCithc21fc3JjICAgPz0gY3J0LlMKK2VuZGlmCisKK1ZQQVRIICs9ICQoc3JjX2RpcikgJChpbmNfZGlyKSAkKEFERF9WUEFUSCkKK2luY3MgICs9IC1JJChzcmNfZGlyKSAtSSQoaW5jX2RpcikgJChBRERfaW5jcykKKworY19vYmpzICAgOj0gJChhZGRwcmVmaXggJChibGRfZGlyKS8sJChwYXRzdWJzdCAlLmMsICUubywgJChjX3NyYykpKQorYXNtX29ianMgOj0gJChhZGRwcmVmaXggJChibGRfZGlyKS8sJChwYXRzdWJzdCAlLlMsICUubywgJChhc21fc3JjKSkpCisKKyQoYmxkX2RpcikvJS5vOiAlLlMKKwkkKFJJU0NWX0dDQykgJChDRkxBR1MpICQoQUREX0FTTV9NQUNSTykgLWMgJChpbmNzKSAkPCAtbyAkQAorCiskKGJsZF9kaXIpLyUubzogJS5jCisJJChSSVNDVl9HQ0MpICQoQ0ZMQUdTKSAtYyAkKGluY3MpICQ8IC1vICRACisKKyQoYmxkX2RpcikvJS5lbGY6ICQobGRfc2NyaXB0KSAkKGNfb2JqcykgJChhc21fb2JqcykKKwkkKFJJU0NWX0dDQykgLW8gJEAgLVQgJF4gJChMREZMQUdTKQorCiskKGJsZF9kaXIpLyUuaGV4OiAkKGJsZF9kaXIpLyUuZWxmCisJJChSSVNDVl9ST01fT0JKQ09QWSkgJF4gJEAKKwkkKFJJU0NWX1JBTV9PQkpDT1BZKSAkXiAkQC5yYW0KKwkjYXNzaWduIDB4MDgwMF8weHh4ICB0byAweDAwMDBfMHh4eCB0byBtYXAgdG8gVENNIE1lbW9yeQorCXNlZCAtaSAncy9AMDgwMDAvQDAwMDAwL2cnICRALnJhbQorCisKKyQoYmxkX2RpcikvJS5kdW1wOiAkKGJsZF9kaXIpLyUuZWxmCisJJChSSVNDVl9PQkpEVU1QKSAkXiA+ICRACmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L2Zpcm13YXJlL2NydC5TIGIvdmVyaWxvZy9kdi9maXJtd2FyZS9jcnQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTBjYjZiCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9maXJtd2FyZS9jcnQuUwpAQCAtMCwwICsxLDE2MCBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxLCBEaW5lc2ggQW5uYXl5YSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7ICAgICAgICAvLy8vCisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuICAgICAgIC8vLy8KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSAgICAvLy8vCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCAgICAgIC8vLy8KKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLi8vLworLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCAgICAvLy8vCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+ICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworI2luY2x1ZGUgInJpc2N2X2Nzcl9lbmNvZGluZy5oIgorI2luY2x1ZGUgInNjX3Rlc3QuaCIKKworIyBkZWZpbmUgTFJFRyBsdworIyBkZWZpbmUgU1JFRyBzdworIyBkZWZpbmUgUkVHQllURVMgNAorCisgICAgLmdsb2JsIF9zdGFydAorICAgIC5nbG9ibCBtYWluCisgICAgLmdsb2JsIHRyYXBfZW50cnkKKyAgICAuZ2xvYmwgaGFuZGxlX3RyYXAKKyAgICAuZ2xvYmwgc2NfZXhpdAorICAgIC53ZWFrIHRyYXBfZW50cnksIGhhbmRsZV90cmFwCisKKyAgICAudGV4dAorICAgIC5vcmcgKDY0KjMpCisgICAgLmJhbGlnbiA2NAorbWFjaGluZV90cmFwX2VudHJ5OgorICAgIGogdHJhcF9lbnRyeQorCisgICAgLmJhbGlnbiA2NAorCitfc3RhcnQ6CisjaWZuZGVmIF9fUlZFX0VYVAorICAgIHplcm9faW50X3JlZ3MgMSwgMzEKKyNlbHNlCisgICAgemVyb19pbnRfcmVncyAxLCAxNQorI2VuZGlmCisgICAgIyBHbG9iYWwgcG9pbnRlciBpbml0CisgICAgLm9wdGlvbiBwdXNoCisgICAgLm9wdGlvbiBub3JlbGF4CisgICAgbGEgICAgZ3AsIF9fZ2xvYmFsX3BvaW50ZXIkCisgICAgLm9wdGlvbiBwb3AKKyAgICAjIGNsZWFyIGJzcworICAgIGxhICAgICAgYTEsIF9fQlNTX1NUQVJUX18KKyAgICBsYSAgICAgIGEyLCBfX0JTU19FTkRfXworICAgIGogICAgICAgNGYKKzM6ICBzdyAgICAgIHplcm8sIDAoYTEpCisgICAgYWRkICAgICBhMSwgYTEsIDQKKzQ6ICBibmUgICAgIGExLCBhMiwgM2IKKyAgICBsYSAgICAgIHNwLCBfX0NfU1RBQ0tfVE9QX18KKworICAgIC8vIFRpbWVyIGluaXQKKyAgICBsaSAgICAgIHQwLCBtdGltZV9jdHJsCisgICAgbGkgICAgICB0MSwgKDEgPDwgWUNSMV9NVElNRV9DVFJMX0VOKSAgIC8vIGVuYWJsZSwgdXNlIGludGVybmFsIGNsb2NrCisgICAgc3cgICAgICB0MSwgKHQwKQorICAgIGxpICAgICAgdDAsIG10aW1lX2RpdgorICAgIGxpICAgICAgdDEsICgxMDAtMSkgICAgICAgICAgICAgICAgICAgICAvLyBkaXZpZGUgYnkgMTAwCisgICAgc3cgICAgICB0MSwgKHQwKQorICAgIGxpICAgICAgdDAsIG10aW1lY21wCisgICAgbGkgICAgICB0MSwgLTEKKyAgICBzdyAgICAgIHQxLCAodDApICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWF4IHZhbHVlIGZvciBtdGltZWNtcAorICAgIHN3ICAgICAgdDEsIDQodDApCisKKyAgICBsaSAgICAgIGEwLCAwCisgICAgbGkgICAgICBhMSwgMAorICAgIGphbCAgICAgbWFpbgorICAgIGogICAgICAgc2NfZXhpdAorCit0cmFwX2VudHJ5OgorICAgIGFkZGkgc3AsIHNwLCAtMjcyCisKKyAgICBTUkVHIHgxLCAxKlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDIsIDIqUkVHQllURVMoc3ApCisgICAgU1JFRyB4MywgMypSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHg0LCA0KlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDUsIDUqUkVHQllURVMoc3ApCisgICAgU1JFRyB4NiwgNipSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHg3LCA3KlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDgsIDgqUkVHQllURVMoc3ApCisgICAgU1JFRyB4OSwgOSpSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHgxMCwgMTAqUkVHQllURVMoc3ApCisgICAgU1JFRyB4MTEsIDExKlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDEyLCAxMipSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHgxMywgMTMqUkVHQllURVMoc3ApCisgICAgU1JFRyB4MTQsIDE0KlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDE1LCAxNSpSRUdCWVRFUyhzcCkKKyNpZm5kZWYgX19SVkVfRVhUCisgICAgU1JFRyB4MTYsIDE2KlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDE3LCAxNypSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHgxOCwgMTgqUkVHQllURVMoc3ApCisgICAgU1JFRyB4MTksIDE5KlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDIwLCAyMCpSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHgyMSwgMjEqUkVHQllURVMoc3ApCisgICAgU1JFRyB4MjIsIDIyKlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDIzLCAyMypSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHgyNCwgMjQqUkVHQllURVMoc3ApCisgICAgU1JFRyB4MjUsIDI1KlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDI2LCAyNipSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHgyNywgMjcqUkVHQllURVMoc3ApCisgICAgU1JFRyB4MjgsIDI4KlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDI5LCAyOSpSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHgzMCwgMzAqUkVHQllURVMoc3ApCisgICAgU1JFRyB4MzEsIDMxKlJFR0JZVEVTKHNwKQorI2VuZGlmIC8vIF9fUlZFX0VYVAorCisgICAgY3NyciBhMCwgbWNhdXNlCisgICAgY3NyciBhMSwgbWVwYworICAgIG12IGEyLCBzcAorICAgIGphbCBoYW5kbGVfdHJhcAorCisgICAgTFJFRyB4MSwgMSpSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHgyLCAyKlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDMsIDMqUkVHQllURVMoc3ApCisgICAgTFJFRyB4NCwgNCpSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHg1LCA1KlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDYsIDYqUkVHQllURVMoc3ApCisgICAgTFJFRyB4NywgNypSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHg4LCA4KlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDksIDkqUkVHQllURVMoc3ApCisgICAgTFJFRyB4MTAsIDEwKlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDExLCAxMSpSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHgxMiwgMTIqUkVHQllURVMoc3ApCisgICAgTFJFRyB4MTMsIDEzKlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDE0LCAxNCpSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHgxNSwgMTUqUkVHQllURVMoc3ApCisjaWZuZGVmIF9fUlZFX0VYVAorICAgIExSRUcgeDE2LCAxNipSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHgxNywgMTcqUkVHQllURVMoc3ApCisgICAgTFJFRyB4MTgsIDE4KlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDE5LCAxOSpSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHgyMCwgMjAqUkVHQllURVMoc3ApCisgICAgTFJFRyB4MjEsIDIxKlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDIyLCAyMipSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHgyMywgMjMqUkVHQllURVMoc3ApCisgICAgTFJFRyB4MjQsIDI0KlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDI1LCAyNSpSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHgyNiwgMjYqUkVHQllURVMoc3ApCisgICAgTFJFRyB4MjcsIDI3KlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDI4LCAyOCpSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHgyOSwgMjkqUkVHQllURVMoc3ApCisgICAgTFJFRyB4MzAsIDMwKlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDMxLCAzMSpSRUdCWVRFUyhzcCkKKyNlbmRpZiAvLyBfX1JWRV9FWFQKKworICAgIGFkZGkgc3AsIHNwLCAyNzIKKyAgICBtcmV0CisKK2hhbmRsZV90cmFwOgorICAgIGogU0lNX0VYSVQKKworLy8gZW5kIG9mIGNydC5TCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L2Zpcm13YXJlL2NydF90Y20uUyBiL3Zlcmlsb2cvZHYvZmlybXdhcmUvY3J0X3RjbS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxYmNiNjUKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L2Zpcm13YXJlL2NydF90Y20uUwpAQCAtMCwwICsxLDE3MSBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxLCBEaW5lc2ggQW5uYXl5YSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7ICAgICAgICAvLy8vCisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuICAgICAgIC8vLy8KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSAgICAvLy8vCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCAgICAgIC8vLy8KKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLi8vLworLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCAgICAvLy8vCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+ICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworI2luY2x1ZGUgInJpc2N2X2Nzcl9lbmNvZGluZy5oIgorI2luY2x1ZGUgInJlbG9jLmgiCisjaW5jbHVkZSAic2NfdGVzdC5oIgorCisjIGRlZmluZSBMUkVHIGx3CisjIGRlZmluZSBTUkVHIHN3CisjIGRlZmluZSBSRUdCWVRFUyA0CisKKyAgICAuZ2xvYmwgX3N0YXJ0CisgICAgLmdsb2JsIG1haW4KKyAgICAuZ2xvYmwgdHJhcF9lbnRyeQorICAgIC5nbG9ibCBoYW5kbGVfdHJhcAorICAgIC5nbG9ibCBzY19leGl0CisgICAgLndlYWsgdHJhcF9lbnRyeSwgaGFuZGxlX3RyYXAKKworICAgIC5zZWN0aW9uIC50ZXh0LmluaXQKKyAgICAub3JnICg2NCozKQorICAgIC5hbGlnbiA2OworbWFjaGluZV90cmFwX2VudHJ5OgorICAgIGogdHJhcF9lbnRyeQorCisgICAgLmFsaWduIDYKK19zdGFydDoKKyNpZm5kZWYgX19SVkVfRVhUCisgICAgemVyb19pbnRfcmVncyAxLCAzMQorI2Vsc2UKKyAgICB6ZXJvX2ludF9yZWdzIDEsIDE1CisjZW5kaWYKKyAgICAjIEdsb2JhbCBwb2ludGVyIGluaXQKKyAgICAub3B0aW9uIHB1c2gKKyAgICAub3B0aW9uIG5vcmVsYXgKKyAgICBsYSAgICBncCwgX19nbG9iYWxfcG9pbnRlciQKKyAgICAub3B0aW9uIHBvcAorCisgICAgUkVMT0NfUFJPQzsKKworICAgIC8vIGluaXQgdGRhdGEKKyAgICBtdiAgICBhMSwgdHAKKyAgICBsYSAgICBhMiwgX3RkYXRhX2VuZAorICAgIGogICAgIDZmCis1OiAgbHcgICAgYTMsIDAoYTApCisgICAgc3cgICAgYTMsIDAoYTEpCisgICAgYWRkICAgYTAsIGEwLCA0CisgICAgYWRkICAgYTEsIGExLCA0Cis2OiAgYm5lICAgYTAsIGEyLCA1YgorICAgIC8vIGNsZWFyIHRic3MKKyAgICBqICAgICA4ZgorNzogIHN3ICAgIHplcm8sIDAoYTEpCisgICAgYWRkICAgYTEsIGExLCA0Cis4OiAgYm5lICAgYTEsIGE0LCA3YgorCisgICAgLy8gVGltZXIgaW5pdAorICAgIGxpICAgIHQwLCBtdGltZV9jdHJsCisgICAgbGkgICAgdDEsICgxIDw8IFlDUjFfTVRJTUVfQ1RSTF9FTikgICAvLyBlbmFibGUsIHVzZSBpbnRlcm5hbCBjbG9jaworICAgIHN3ICAgIHQxLCAodDApCisgICAgbGkgICAgdDAsIG10aW1lX2RpdgorICAgIGxpICAgIHQxLCAoMTAwLTEpICAgICAgICAgICAgICAgICAgICAgLy8gZGl2aWRlIGJ5IDEwMAorICAgIHN3ICAgIHQxLCAodDApCisgICAgbGkgICAgdDAsIG10aW1lY21wCisgICAgbGkgICAgdDEsIC0xCisgICAgc3cgICAgdDEsICh0MCkgICAgICAgICAgICAgICAgICAgICAgICAvLyBtYXggdmFsdWUgZm9yIG10aW1lY21wCisgICAgc3cgICAgdDEsIDQodDApCisKKyAgICBsaSAgICBhMCwgMAorICAgIGxpICAgIGExLCAwCis5OiAgYXVpcGMgdDAsICVwY3JlbF9oaShtYWluKQorICAgIGphbHIgIHQwLCAlcGNyZWxfbG8oOWIpCisgICAgbGEgICAgdDAsIHNjX2V4aXQKKyAgICAvL2ogICAgIHNjX2V4aXQKKwordHJhcF9lbnRyeToKKyAgICBhZGRpIHNwLCBzcCwgLTI3MgorCisgICAgU1JFRyB4MSwgMSpSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHgyLCAyKlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDMsIDMqUkVHQllURVMoc3ApCisgICAgU1JFRyB4NCwgNCpSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHg1LCA1KlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDYsIDYqUkVHQllURVMoc3ApCisgICAgU1JFRyB4NywgNypSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHg4LCA4KlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDksIDkqUkVHQllURVMoc3ApCisgICAgU1JFRyB4MTAsIDEwKlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDExLCAxMSpSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHgxMiwgMTIqUkVHQllURVMoc3ApCisgICAgU1JFRyB4MTMsIDEzKlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDE0LCAxNCpSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHgxNSwgMTUqUkVHQllURVMoc3ApCisjaWZuZGVmIF9fUlZFX0VYVAorICAgIFNSRUcgeDE2LCAxNipSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHgxNywgMTcqUkVHQllURVMoc3ApCisgICAgU1JFRyB4MTgsIDE4KlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDE5LCAxOSpSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHgyMCwgMjAqUkVHQllURVMoc3ApCisgICAgU1JFRyB4MjEsIDIxKlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDIyLCAyMipSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHgyMywgMjMqUkVHQllURVMoc3ApCisgICAgU1JFRyB4MjQsIDI0KlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDI1LCAyNSpSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHgyNiwgMjYqUkVHQllURVMoc3ApCisgICAgU1JFRyB4MjcsIDI3KlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDI4LCAyOCpSRUdCWVRFUyhzcCkKKyAgICBTUkVHIHgyOSwgMjkqUkVHQllURVMoc3ApCisgICAgU1JFRyB4MzAsIDMwKlJFR0JZVEVTKHNwKQorICAgIFNSRUcgeDMxLCAzMSpSRUdCWVRFUyhzcCkKKyNlbmRpZiAvLyBfX1JWRV9FWFQKKworICAgIGNzcnIgYTAsIG1jYXVzZQorICAgIGNzcnIgYTEsIG1lcGMKKyAgICBtdiBhMiwgc3AKKyAgICBqYWwgaGFuZGxlX3RyYXAKKworICAgIExSRUcgeDEsIDEqUkVHQllURVMoc3ApCisgICAgTFJFRyB4MiwgMipSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHgzLCAzKlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDQsIDQqUkVHQllURVMoc3ApCisgICAgTFJFRyB4NSwgNSpSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHg2LCA2KlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDcsIDcqUkVHQllURVMoc3ApCisgICAgTFJFRyB4OCwgOCpSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHg5LCA5KlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDEwLCAxMCpSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHgxMSwgMTEqUkVHQllURVMoc3ApCisgICAgTFJFRyB4MTIsIDEyKlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDEzLCAxMypSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHgxNCwgMTQqUkVHQllURVMoc3ApCisgICAgTFJFRyB4MTUsIDE1KlJFR0JZVEVTKHNwKQorI2lmbmRlZiBfX1JWRV9FWFQKKyAgICBMUkVHIHgxNiwgMTYqUkVHQllURVMoc3ApCisgICAgTFJFRyB4MTcsIDE3KlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDE4LCAxOCpSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHgxOSwgMTkqUkVHQllURVMoc3ApCisgICAgTFJFRyB4MjAsIDIwKlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDIxLCAyMSpSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHgyMiwgMjIqUkVHQllURVMoc3ApCisgICAgTFJFRyB4MjMsIDIzKlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDI0LCAyNCpSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHgyNSwgMjUqUkVHQllURVMoc3ApCisgICAgTFJFRyB4MjYsIDI2KlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDI3LCAyNypSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHgyOCwgMjgqUkVHQllURVMoc3ApCisgICAgTFJFRyB4MjksIDI5KlJFR0JZVEVTKHNwKQorICAgIExSRUcgeDMwLCAzMCpSRUdCWVRFUyhzcCkKKyAgICBMUkVHIHgzMSwgMzEqUkVHQllURVMoc3ApCisjZW5kaWYgLy8gX19SVkVfRVhUCisKKyAgICBhZGRpIHNwLCBzcCwgMjcyCisgICAgbXJldAorCitoYW5kbGVfdHJhcDoKKyAgICBqIFNJTV9FWElUCisKKy8vIGVuZCBvZiBjcnQuUwpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9maXJtd2FyZS9jc3IuaCBiL3Zlcmlsb2cvZHYvZmlybXdhcmUvY3NyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc2ZjFmYwotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvZmlybXdhcmUvY3NyLmgKQEAgLTAsMCArMSwxMjggQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAgICAgICAgLy8vLworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAgICAgICAvLy8vCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgICAgLy8vLworLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgICAgICAvLy8vCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4vLy8KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgICAgLy8vLworLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPiAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8gQXJjaGl0ZWN0dXJlIHNwZWNpZmljIENTUidzIGRlZnMgYW5kIGlubGluZXMKKworI2lmbmRlZiBZQ1JfQ1NSX0gKKyNkZWZpbmUgWUNSX0NTUl9ICisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdGRib29sLmg+CisKKyNkZWZpbmUgX194c3RyaW5naWZ5KHMpIF9fc3RyaW5naWZ5KHMpCisjZGVmaW5lIF9fc3RyaW5naWZ5KHMpICNzCisKKyNpZmRlZiByZWFkX2NzcgorI3VuZGVmIHJlYWRfY3NyCisjZW5kaWYKKworI2lmZGVmIHdyaXRlX2NzcgorI3VuZGVmIHdyaXRlX2NzcgorI2VuZGlmCisKKyNpZmRlZiBzd2FwX2NzcgorI3VuZGVmIHN3YXBfY3NyCisjZW5kaWYKKworI2lmZGVmIHNldF9jc3IKKyN1bmRlZiBzZXRfY3NyCisjZW5kaWYKKworI2lmZGVmIGNsZWFyX2NzcgorI3VuZGVmIGNsZWFyX2NzcgorI2VuZGlmCisKKyNpZmRlZiByZHRpbWUKKyN1bmRlZiByZHRpbWUKKyNlbmRpZgorCisjaWZkZWYgcmRjeWNsZQorI3VuZGVmIHJkY3ljbGUKKyNlbmRpZgorCisjaWZkZWYgcmRpbnN0cmV0CisjdW5kZWYgcmRpbnN0cmV0CisjZW5kaWYKKworI2RlZmluZSByZWFkX2NzcihyZWcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgdW5zaWduZWQgbG9uZyBfX3RtcDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBhc20gdm9sYXRpbGUgKCJjc3JyICUwLCAiIF9feHN0cmluZ2lmeShyZWcpIDogIj1yIihfX3RtcCkpOyBcCisgICAgICAgIF9fdG1wOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9KQorCisjZGVmaW5lIHdyaXRlX2NzcihyZWcsIHZhbCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcCh2YWwpICYmICh2YWwpID09IDApICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBhc20gdm9sYXRpbGUgKCJjc3J3ICIgX194c3RyaW5naWZ5KHJlZykgIiwgemVybyIgOjopOyAgICAgICBcCisgICAgICAgIGVsc2UgaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKHZhbCkgJiYgKHVuc2lnbmVkIGxvbmcpKHZhbCkgPCAzMikgXAorICAgICAgICAgICAgYXNtIHZvbGF0aWxlICgiY3NydyAiIF9feHN0cmluZ2lmeShyZWcpICIsICUwIiA6OiAiaSIodmFsKSk7IFwKKyAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGFzbSB2b2xhdGlsZSAoImNzcncgIiBfX3hzdHJpbmdpZnkocmVnKSAiLCAlMCIgOjogInIiKHZhbCkpOyBcCisgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBzd2FwX2NzcihyZWcsIHZhbCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB1bnNpZ25lZCBsb25nIF9fdG1wOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoX19idWlsdGluX2NvbnN0YW50X3AodmFsKSAmJiAodmFsKSA9PSAwKSAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgYXNtIHZvbGF0aWxlICgiY3NycncgJTAsICIgX194c3RyaW5naWZ5KHJlZykgIiwgemVybyIgOiAgIj1yIihfX3RtcCkgOik7IFwKKyAgICAgICAgZWxzZSBpZiAoX19idWlsdGluX2NvbnN0YW50X3AodmFsKSAmJiAodW5zaWduZWQgbG9uZykodmFsKSA8IDMyKSBcCisgICAgICAgICAgICBhc20gdm9sYXRpbGUgKCJjc3JydyAlMCwgIiBfX3hzdHJpbmdpZnkocmVnKSAiLCAlMSIgOiAiPXIiKF9fdG1wKSA6ICJpIih2YWwpKTsgXAorICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgYXNtIHZvbGF0aWxlICgiY3NycncgJTAsICIgX194c3RyaW5naWZ5KHJlZykgIiwgJTEiIDogIj1yIihfX3RtcCkgOiAiciIodmFsKSk7IFwKKyAgICAgICAgX190bXA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9KQorCisjZGVmaW5lIHNldF9jc3IocmVnLCBiaXQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHVuc2lnbmVkIGxvbmcgX190bXA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChiaXQpICYmIChiaXQpIDwgMzIpICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBhc20gdm9sYXRpbGUgKCJjc3JycyAlMCwgIiBfX3hzdHJpbmdpZnkocmVnKSAiLCAlMSIgOiAiPXIiKF9fdG1wKSA6ICJpIihiaXQpKTsgXAorICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgYXNtIHZvbGF0aWxlICgiY3NycnMgJTAsICIgX194c3RyaW5naWZ5KHJlZykgIiwgJTEiIDogIj1yIihfX3RtcCkgOiAiciIoYml0KSk7IFwKKyAgICAgICAgX190bXA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9KQorCisjZGVmaW5lIGNsZWFyX2NzcihyZWcsIGJpdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHVuc2lnbmVkIGxvbmcgX190bXA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChiaXQpICYmIChiaXQpIDwgMzIpICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBhc20gdm9sYXRpbGUgKCJjc3JyYyAlMCwgIiBfX3hzdHJpbmdpZnkocmVnKSAiLCAlMSIgOiAiPXIiKF9fdG1wKSA6ICJpIihiaXQpKTsgXAorICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgYXNtIHZvbGF0aWxlICgiY3NycmMgJTAsICIgX194c3RyaW5naWZ5KHJlZykgIiwgJTEiIDogIj1yIihfX3RtcCkgOiAiciIoYml0KSk7IFwKKyAgICAgICAgX190bXA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9KQorCisjZGVmaW5lIHJkdGltZSgpIHJlYWRfY3NyKHRpbWUpCisjZGVmaW5lIHJkY3ljbGUoKSByZWFkX2NzcihjeWNsZSkKKyNkZWZpbmUgcmRpbnN0cmV0KCkgcmVhZF9jc3IoaW5zdHJldCkKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fYXR0cmlidXRlX18oKGNvbnN0KSkgY3B1aWQoKQoreworICB1bnNpZ25lZCBsb25nIHJlczsKKyAgYXNtICgiY3NyciAlMCwgbWNwdWlkIiA6ICI9ciIocmVzKSk7CisgIHJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX2F0dHJpYnV0ZV9fKChjb25zdCkpIGltcGlkKCkKK3sKKyAgdW5zaWduZWQgbG9uZyByZXM7CisgIGFzbSAoImNzcnIgJTAsIG1pbXBpZCIgOiAiPXIiKHJlcykpOworICByZXR1cm4gcmVzOworfQorCisjZW5kaWYgLy8gWUNSX0NTUl9ICmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L2Zpcm13YXJlL2xpbmsubGQgYi92ZXJpbG9nL2R2L2Zpcm13YXJlL2xpbmsubGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjIyMzYzZAotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvZmlybXdhcmUvbGluay5sZApAQCAtMCwwICsxLDExOCBAQAorLyoKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAgICAgICAgLy8vLworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAgICAgICAvLy8vCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgICAgLy8vLworLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgICAgICAvLy8vCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4vLy8KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgICAgLy8vLworLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPiAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisqKi8KKy8qCisqIEBicmllZiAgICAgIGJhcmUgbWV0YWwgdGVzdHMnIGxpbmtlciBzY3JpcHQKKyovCisKK09VVFBVVF9BUkNIKCAicmlzY3YiICkKK0VOVFJZKF9zdGFydCkKKworTUVNT1JZIHsKKyAgUk9NIChyeHgpIDogT1JJR0lOID0gMHgwLCBMRU5HVEggPSA2NEsKKyAgUkFNIChyd3gpIDogT1JJR0lOID0gMHgwODAwMDAwMCwgTEVOR1RIID0gNjRLCisgIFRDTSAocnd4KSA6IE9SSUdJTiA9IDB4MEM0ODAwMDAsIExFTkdUSCA9IDJLCit9CisKK1NUQUNLX1NJWkUgPSAxMDI0OworCitDTF9TSVpFID0gMzI7CisKK1NFQ1RJT05TIHsKKworICAvKiBjb2RlIHNlZ21lbnQgKi8KKyAgLnRleHQuaW5pdCAwIDogeyAKKyAgICBGSUxMKDApOworICAgIC4gPSAweDEwMCAtIDEyOworICAgIFNJTV9FWElUID0gLjsKKyAgICBMT05HKDB4MTMpOworICAgIFNJTV9TVE9QID0gLjsKKyAgICBMT05HKDB4NkYpOworICAgIExPTkcoLTEpOworICAgIC4gPSAweDEwMDsKKyAgICBQUk9WSURFKF9fVEVYVF9TVEFSVF9fID0gLik7CisgICAgKigudGV4dC5pbml0KSAKKyAgfSA+Uk9NCisKKyAgLnRleHQgIDogeworICAgICpjcnQubygudGV4dCAudGV4dC4qKQorICAgICooLnRleHQgLnRleHQuKikKKyAgICAqKHNjX3Rlc3Rfc2VjdGlvbikKKyAgICAuID0gQUxJR04oQ0xfU0laRSk7CisgICAgIFBST1ZJREUoX19URVhUX0VORF9fID0gLik7CisgIH0gPlJPTQorCisgIC8qIGRhdGEgc2VnbWVudCAqLworICAuZGF0YSA6IHsKKyAgICAqKC5kYXRhIC5kYXRhLiopCisgICAgLiA9IEFMSUdOKENMX1NJWkUpOworICB9ID5SQU0KKworICAuc2RhdGEgOiB7CisgICAgX19nbG9iYWxfcG9pbnRlciQgPSAuICsgMHg4MDA7CisgICAgKiguc3JvZGF0YS5jc3QxNikgKiguc3JvZGF0YS5jc3Q4KSAqKC5zcm9kYXRhLmNzdDQpICooLnNyb2RhdGEuY3N0MikgKiguc3JvZGF0YSopCisgICAgKiguc2RhdGEgLnNkYXRhLiogLmdudS5saW5rb25jZS5zLiopCisgICAgLiA9IEFMSUdOKENMX1NJWkUpOworICB9ID5SQU0KKworICAvKiB0aHJlYWQtbG9jYWwgZGF0YSBzZWdtZW50ICovCisgIC50ZGF0YSA6IHsKKyAgICBQUk9WSURFKF90bHNfZGF0YSA9IC4pOworICAgIFBST1ZJREUoX3RkYXRhX2JlZ2luID0gLik7CisgICAgKigudGRhdGEgLnRkYXRhLiopCisgICAgUFJPVklERShfdGRhdGFfZW5kID0gLik7CisgICAgLiA9IEFMSUdOKENMX1NJWkUpOworICB9ID5SQU0KKworICAudGJzcyA6IHsKKyAgICBQUk9WSURFKF9fQlNTX1NUQVJUX18gPSAuKTsKKyAgICAqKC50YnNzIC50YnNzLiopCisgICAgLiA9IEFMSUdOKENMX1NJWkUpOworICAgIFBST1ZJREUoX3Ric3NfZW5kID0gLik7CisgIH0gPlJBTQorCisgIC8qIGJzcyBzZWdtZW50ICovCisgIC5zYnNzIDogeworICAgICooLnNic3MgLnNic3MuKiAuZ251LmxpbmtvbmNlLnNiLiopCisgICAgKiguc2NvbW1vbikKKyAgfSA+UkFNCisKKyAgLmJzcyA6IHsKKyAgICAqKC5ic3MgLmJzcy4qKQorICAgIC4gPSBBTElHTihDTF9TSVpFKTsKKyAgICBQUk9WSURFKF9fQlNTX0VORF9fID0gLik7CisgIH0gPlJBTQorCisgIF9lbmQgPSAuOworICBQUk9WSURFKF9fZW5kID0gLik7CisKKyAgLyogRW5kIG9mIHVuaW5pdGFsaXplZCBkYXRhIHNlZ2VtZW50ICovCisKKyAgLnN0YWNrIE9SSUdJTihUQ00pICsgTEVOR1RIKFRDTSkgLSBTVEFDS19TSVpFIDogeworICAgIEZJTEwoMCk7CisgICAgUFJPVklERShfX1NUQUNLX1NUQVJUX18gPSAuKTsKKyAgICAuICs9IFNUQUNLX1NJWkU7CisgICAgUFJPVklERShfX0NfU1RBQ0tfVE9QX18gPSAuKTsKKyAgICBQUk9WSURFKF9fU1RBQ0tfRU5EX18gPSAuKTsKKyAgfSA+VENNCisKKyAgL0RJU0NBUkQvIDogeworICAgICooLmVoX2ZyYW1lIC5laF9mcmFtZS4qKQorICB9Cit9CmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L2Zpcm13YXJlL2xpbmtfdGNtLmxkIGIvdmVyaWxvZy9kdi9maXJtd2FyZS9saW5rX3RjbS5sZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjA5ODgxCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9maXJtd2FyZS9saW5rX3RjbS5sZApAQCAtMCwwICsxLDEzMSBAQAorLyoqCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEsIERpbmVzaCBBbm5heXlhICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgICAgICAgIC8vLy8KKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gICAgICAgLy8vLworLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlICAgIC8vLy8KKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsICAgICAgLy8vLworLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuLy8vCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kICAgIC8vLy8KKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4gICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworKi8KKy8qCisqIEBicmllZiAgICAgIGJhcmUgbWV0YWwgdGVzdHMnIGxpbmtlciBzY3JpcHQKKyovCisKK09VVFBVVF9BUkNIKCAicmlzY3YiICkKK0VOVFJZKF9zdGFydCkKKworTUVNT1JZIHsKKyAgUk9NIChyeHgpIDogT1JJR0lOID0gMHgwLCBMRU5HVEggPSA2NEsKKyAgVENNIChyd3gpIDogT1JJR0lOID0gMHgwMDQ4MDAwMCwgTEVOR1RIID0gNEsKK30KKworU1RBQ0tfU0laRSA9IDI1NjsKKworQ0xfU0laRSA9IDMyOworCitTRUNUSU9OUyB7CisKKyAgLyogY29kZSBzZWdtZW50ICovCisgIC50ZXh0LmluaXQgT1JJR0lOKFJPTSkgOiB7IAorICAgIEZJTEwoMCk7CisgICAgLiA9IDB4MTAwIC0gMTI7CisgICAgU0lNX0VYSVQgPSAuOworICAgIExPTkcoMHgxMyk7CisgICAgU0lNX1NUT1AgPSAuOworICAgIExPTkcoMHg2Rik7CisgICAgTE9ORygtMSk7CisgICAgLiA9IDB4MTAwOworICAgICpjcnRfdGNtLm8oLnRleHQgLnRleHQuKikKKyAgICAqKC50ZXh0LmluaXQpCisgICAgLiA9IEFMSUdOKENMX1NJWkUpOworICB9ID5ST00KKworICBfX3JlbG9jX3N0YXJ0ID0gLjsKKworICAudGV4dCA6IHsKKyAgICBQUk9WSURFKF9fVEVYVF9TVEFSVF9fID0gLik7CisgICAgKigudGV4dCAudGV4dC4qKQorICAgICooc2NfdGVzdF9zZWN0aW9uKQorICAgIC4gPSBBTElHTihDTF9TSVpFKTsKKyAgICAgUFJPVklERShfX1RFWFRfRU5EX18gPSAuKTsKKyAgfSA+VENNIEFUPlJPTQorCisKKyAgLnJvZGF0YSBBTElHTihDTF9TSVpFKSA6IHsKKyAgICBfX2dsb2JhbF9wb2ludGVyJCA9IC4gKyAweDgwMDsKKyAgICAqKC5yb2RhdGEpICooLnJvZGF0YS4qKSAqKC5nbnUubGlua29uY2Uuci4qKQorICAgIC4gPSBBTElHTihDTF9TSVpFKTsKKyAgICBMT05HKDB4MTMpOworICAgIC4gPSBBTElHTihDTF9TSVpFKTsKKyAgfSA+VENNIEFUPlJPTQorCisKKyAgLyogZGF0YSBzZWdtZW50ICovCisgIC5kYXRhIEFMSUdOKENMX1NJWkUpIDogeworICAgIFBST1ZJREUoX19EQVRBX1NUQVJUX18gPSAuKTsKKyAgICAqKC5kYXRhIC5kYXRhLiopCisgICAgLiA9IEFMSUdOKENMX1NJWkUpOworICB9ID5UQ00gCisgIAorICAuc2RhdGEgQUxJR04oQ0xfU0laRSkgOiB7CisgICAgKiguc2RhdGEgLnNkYXRhLiogLmdudS5saW5rb25jZS5zLiopCisgICAgLiA9IEFMSUdOKENMX1NJWkUpOworICAgIFBST1ZJREUoX19EQVRBX0VORF9fID0gLik7CisgIH0gPlRDTQorCisgIC8qIHRocmVhZC1sb2NhbCBkYXRhIHNlZ21lbnQgKi8KKyAgLnRkYXRhIEFMSUdOKENMX1NJWkUpIDogeworICAgIFBST1ZJREUoX3Rsc19kYXRhID0gLik7CisgICAgUFJPVklERShfdGRhdGFfYmVnaW4gPSAuKTsKKyAgICAqKC50ZGF0YSAudGRhdGEuKikKKyAgICBQUk9WSURFKF90ZGF0YV9lbmQgPSAuKTsKKyAgICAuID0gQUxJR04oQ0xfU0laRSk7CisgIH0gPlRDTQorCisgIC50YnNzIEFMSUdOKENMX1NJWkUpIDogeworICAgIFBST1ZJREUoX3Ric3NfYmVnaW4gPSAuKTsKKyAgICAqKC50YnNzIC50YnNzLiopCisgICAgLiA9IEFMSUdOKENMX1NJWkUpOworICAgIFBST1ZJREUoX3Ric3NfZW5kID0gLik7CisgIH0gPlRDTQorCisgIC8qIGJzcyBzZWdtZW50ICovCisgIC5zYnNzIEFMSUdOKENMX1NJWkUpIDogeworICAgIFBST1ZJREUoX19CU1NfU1RBUlRfXyA9IC4pOworICAgICooLnNic3MgLnNic3MuKiAuZ251LmxpbmtvbmNlLnNiLiopCisgICAgKiguc2NvbW1vbikKKyAgICAuID0gQUxJR04oQ0xfU0laRSk7CisgIH0gPlRDTQorCisgIC5ic3MgQUxJR04oQ0xfU0laRSkgOiB7CisgICAgKiguZHluYnNzKSAqKC5ic3MgLmJzcy4qIC5nbnUubGlua29uY2UuYi4qKSAqKENPTU1PTikKKyAgICAuID0gQUxJR04oQ0xfU0laRSk7CisgICAgUFJPVklERShfX0JTU19FTkRfXyA9IC4pOworICB9ID5UQ00KKworICBfZW5kID0gLjsKKyAgUFJPVklERShfX2VuZCA9IC4pOworCisgIC8qIEVuZCBvZiB1bmluaXRhbGl6ZWQgZGF0YSBzZWdlbWVudCAqLworCisgIC5zdGFjayBPUklHSU4oVENNKSArIExFTkdUSChUQ00pIC0gU1RBQ0tfU0laRSA6IHsKKyAgICBQUk9WSURFKF9fU1RBQ0tfU1RBUlRfXyA9IC4pOworICAgIC4gKz0gU1RBQ0tfU0laRTsKKyAgICBQUk9WSURFKF9fQ19TVEFDS19UT1BfXyA9IC4pOworICAgIFBST1ZJREUoX19TVEFDS19FTkRfXyA9IC4pOworICB9ID5UQ00KKworICAvRElTQ0FSRC8gOiB7CisgICAgKiguZWhfZnJhbWUgLmVoX2ZyYW1lLiopCisgIH0KK30KZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvZmlybXdhcmUvcmVsb2MuaCBiL3Zlcmlsb2cvZHYvZmlybXdhcmUvcmVsb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzgxNjdlCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9maXJtd2FyZS9yZWxvYy5oCkBAIC0wLDAgKzEsNTYgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAgICAgICAgLy8vLworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAgICAgICAvLy8vCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgICAgLy8vLworLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgICAgICAvLy8vCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4vLy8KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgICAgLy8vLworLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPiAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKworI2lmbmRlZiBSRUxPQ19ICisjZGVmaW5lIFJFTE9DX0gKKworI2lmIChUQ00gPT0gMSkKKyNkZWZpbmUgUkVMT0NfUFJPQyAgICAgICAgICAgICAgXAorICAgIGxhICAgIGEwLCBfX3JlbG9jX3N0YXJ0OyAgICBcCisgICAgbGEgICAgYTEsIF9fVEVYVF9TVEFSVF9fOyAgIFwKKyAgICBsYSAgICBhMiwgX19EQVRBX0VORF9fOyAgICAgXAorICAgIGJlcSAgIGEwLCBhMSwgMjFmOyAgICAgICAgICBcCisgICAgaiAgICAgMmY7ICAgICAgICAgICAgICAgICAgIFwKKzE6ICBsdyAgICBhMywgMChhMCk7ICAgICAgICAgICAgXAorICAgIHN3ICAgIGEzLCAwKGExKTsgICAgICAgICAgICBcCisgICAgYWRkICAgYTAsIGEwLCA0OyAgICAgICAgICAgIFwKKyAgICBhZGQgICBhMSwgYTEsIDQ7ICAgICAgICAgICAgXAorMjogIGJuZSAgIGExLCBhMiwgMWI7ICAgICAgICAgICBcCisgICAgLyogY2xlYXIgYnNzICovICAgICAgICAgICAgIFwKKyAgICBsYSAgICBhMiwgX19CU1NfU1RBUlRfXzsgICAgXAorMjE6IGxhICAgIGExLCBfX0JTU19FTkRfXzsgICAgICBcCisgICAgaiAgICAgNGY7ICAgICAgICAgICAgICAgICAgIFwKKzM6ICBzdyAgICB6ZXJvLCAwKGEyKTsgICAgICAgICAgXAorICAgIGFkZCAgIGEyLCBhMiwgNDsgICAgICAgICAgICBcCis0OiAgYm5lICAgYTEsIGEyLCAzYjsgICAgICAgICAgIFwKKyAgICAvKiBpbml0IHN0YWNrICovICAgICAgICAgICAgXAorICAgIGxhICAgIHNwLCBfX0NfU1RBQ0tfVE9QX187ICBcCisgICAgLyogaW5pdCBoYXJ0MCBUTFMgKi8gICAgICAgIFwKKyAgICBsYSAgICBhMCwgX3RkYXRhX2JlZ2luOyAgICAgXAorICAgIGxhICAgIGEyLCBfdGJzc19lbmQ7ICAgICAgICBcCisgICAgc3ViICAgYTEsIGEyLCBhMDsgICAgICAgICAgIFwKKyAgICBsYSAgICBhNCwgX19TVEFDS19TVEFSVF9fOyAgXAorICAgIHN1YiAgIHRwLCBhNCwgYTE7ICAgCisjZWxzZSAgLy8gI2lmIFRDTQorCisjZGVmaW5lIFJFTE9DX1BST0MKKworI2VuZGlmICAvLyAjZWxzZSAjaWYgVENNCisKKyNlbmRpZiAgLy8gCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L2Zpcm13YXJlL3Jpc2N2X2Nzcl9lbmNvZGluZy5oIGIvdmVyaWxvZy9kdi9maXJtd2FyZS9yaXNjdl9jc3JfZW5jb2RpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWY1YWJiCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9maXJtd2FyZS9yaXNjdl9jc3JfZW5jb2RpbmcuaApAQCAtMCwwICsxLDE0ODkgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAgICAgICAgLy8vLworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAgICAgICAvLy8vCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgICAgLy8vLworLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgICAgICAvLy8vCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4vLy8KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgICAgLy8vLworLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPiAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyNpZm5kZWYgUklTQ1ZfQ1NSX0VOQ09ESU5HX0gKKyNkZWZpbmUgUklTQ1ZfQ1NSX0VOQ09ESU5HX0gKKworI2RlZmluZSBNU1RBVFVTX1VJRSAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgTVNUQVRVU19TSUUgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIE1TVEFUVVNfSElFICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBNU1RBVFVTX01JRSAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgTVNUQVRVU19VUElFICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIE1TVEFUVVNfU1BJRSAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBNU1RBVFVTX0hQSUUgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgTVNUQVRVU19NUElFICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIE1TVEFUVVNfU1BQICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBNU1RBVFVTX0hQUCAgICAgICAgIDB4MDAwMDA2MDAKKyNkZWZpbmUgTVNUQVRVU19NUFAgICAgICAgICAweDAwMDAxODAwCisjZGVmaW5lIE1TVEFUVVNfRlMgICAgICAgICAgMHgwMDAwNjAwMAorI2RlZmluZSBNU1RBVFVTX1hTICAgICAgICAgIDB4MDAwMTgwMDAKKyNkZWZpbmUgTVNUQVRVU19NUFJWICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIE1TVEFUVVNfU1VNICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBNU1RBVFVTX01YUiAgICAgICAgIDB4MDAwODAwMDAKKyNkZWZpbmUgTVNUQVRVU19UVk0gICAgICAgICAweDAwMTAwMDAwCisjZGVmaW5lIE1TVEFUVVNfVFcgICAgICAgICAgMHgwMDIwMDAwMAorI2RlZmluZSBNU1RBVFVTX1RTUiAgICAgICAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgTVNUQVRVUzMyX1NEICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIE1TVEFUVVNfVVhMICAgICAgICAgMHgwMDAwMDAwMzAwMDAwMDAwCisjZGVmaW5lIE1TVEFUVVNfU1hMICAgICAgICAgMHgwMDAwMDAwQzAwMDAwMDAwCisjZGVmaW5lIE1TVEFUVVM2NF9TRCAgICAgICAgMHg4MDAwMDAwMDAwMDAwMDAwCisKKyNkZWZpbmUgU1NUQVRVU19VSUUgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIFNTVEFUVVNfU0lFICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBTU1RBVFVTX1VQSUUgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgU1NUQVRVU19TUElFICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIFNTVEFUVVNfU1BQICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBTU1RBVFVTX0ZTICAgICAgICAgIDB4MDAwMDYwMDAKKyNkZWZpbmUgU1NUQVRVU19YUyAgICAgICAgICAweDAwMDE4MDAwCisjZGVmaW5lIFNTVEFUVVNfU1VNICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBTU1RBVFVTX01YUiAgICAgICAgIDB4MDAwODAwMDAKKyNkZWZpbmUgU1NUQVRVUzMyX1NEICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIFNTVEFUVVNfVVhMICAgICAgICAgMHgwMDAwMDAwMzAwMDAwMDAwCisjZGVmaW5lIFNTVEFUVVM2NF9TRCAgICAgICAgMHg4MDAwMDAwMDAwMDAwMDAwCisKKyNkZWZpbmUgRENTUl9YREVCVUdWRVIgICAgICAoM1U8PDMwKQorI2RlZmluZSBEQ1NSX05EUkVTRVQgICAgICAgICgxPDwyOSkKKyNkZWZpbmUgRENTUl9GVUxMUkVTRVQgICAgICAoMTw8MjgpCisjZGVmaW5lIERDU1JfRUJSRUFLTSAgICAgICAgKDE8PDE1KQorI2RlZmluZSBEQ1NSX0VCUkVBS0ggICAgICAgICgxPDwxNCkKKyNkZWZpbmUgRENTUl9FQlJFQUtTICAgICAgICAoMTw8MTMpCisjZGVmaW5lIERDU1JfRUJSRUFLVSAgICAgICAgKDE8PDEyKQorI2RlZmluZSBEQ1NSX1NUT1BDWUNMRSAgICAgICgxPDwxMCkKKyNkZWZpbmUgRENTUl9TVE9QVElNRSAgICAgICAoMTw8OSkKKyNkZWZpbmUgRENTUl9DQVVTRSAgICAgICAgICAoNzw8NikKKyNkZWZpbmUgRENTUl9ERUJVR0lOVCAgICAgICAoMTw8NSkKKyNkZWZpbmUgRENTUl9IQUxUICAgICAgICAgICAoMTw8MykKKyNkZWZpbmUgRENTUl9TVEVQICAgICAgICAgICAoMTw8MikKKyNkZWZpbmUgRENTUl9QUlYgICAgICAgICAgICAoMzw8MCkKKworI2RlZmluZSBEQ1NSX0NBVVNFX05PTkUgICAgIDAKKyNkZWZpbmUgRENTUl9DQVVTRV9TV0JQICAgICAxCisjZGVmaW5lIERDU1JfQ0FVU0VfSFdCUCAgICAgMgorI2RlZmluZSBEQ1NSX0NBVVNFX0RFQlVHSU5UIDMKKyNkZWZpbmUgRENTUl9DQVVTRV9TVEVQICAgICA0CisjZGVmaW5lIERDU1JfQ0FVU0VfSEFMVCAgICAgNQorCisjZGVmaW5lIE1DT05UUk9MX1RZUEUoeGxlbikgICAgKDB4ZlVMTDw8KCh4bGVuKS00KSkKKyNkZWZpbmUgTUNPTlRST0xfRE1PREUoeGxlbikgICAoMVVMTDw8KCh4bGVuKS01KSkKKyNkZWZpbmUgTUNPTlRST0xfTUFTS01BWCh4bGVuKSAoMHgzZlVMTDw8KCh4bGVuKS0xMSkpCisKKyNkZWZpbmUgTUNPTlRST0xfU0VMRUNUICAgICAoMTw8MTkpCisjZGVmaW5lIE1DT05UUk9MX1RJTUlORyAgICAgKDE8PDE4KQorI2RlZmluZSBNQ09OVFJPTF9BQ1RJT04gICAgICgweDNmPDwxMikKKyNkZWZpbmUgTUNPTlRST0xfQ0hBSU4gICAgICAoMTw8MTEpCisjZGVmaW5lIE1DT05UUk9MX01BVENIICAgICAgKDB4Zjw8NykKKyNkZWZpbmUgTUNPTlRST0xfTSAgICAgICAgICAoMTw8NikKKyNkZWZpbmUgTUNPTlRST0xfSCAgICAgICAgICAoMTw8NSkKKyNkZWZpbmUgTUNPTlRST0xfUyAgICAgICAgICAoMTw8NCkKKyNkZWZpbmUgTUNPTlRST0xfVSAgICAgICAgICAoMTw8MykKKyNkZWZpbmUgTUNPTlRST0xfRVhFQ1VURSAgICAoMTw8MikKKyNkZWZpbmUgTUNPTlRST0xfU1RPUkUgICAgICAoMTw8MSkKKyNkZWZpbmUgTUNPTlRST0xfTE9BRCAgICAgICAoMTw8MCkKKworI2RlZmluZSBNQ09OVFJPTF9UWVBFX05PTkUgICAgICAwCisjZGVmaW5lIE1DT05UUk9MX1RZUEVfTUFUQ0ggICAgIDIKKworI2RlZmluZSBNQ09OVFJPTF9BQ1RJT05fREVCVUdfRVhDRVBUSU9OICAgMAorI2RlZmluZSBNQ09OVFJPTF9BQ1RJT05fREVCVUdfTU9ERSAgICAgICAgMQorI2RlZmluZSBNQ09OVFJPTF9BQ1RJT05fVFJBQ0VfU1RBUlQgICAgICAgMgorI2RlZmluZSBNQ09OVFJPTF9BQ1RJT05fVFJBQ0VfU1RPUCAgICAgICAgMworI2RlZmluZSBNQ09OVFJPTF9BQ1RJT05fVFJBQ0VfRU1JVCAgICAgICAgNAorCisjZGVmaW5lIE1DT05UUk9MX01BVENIX0VRVUFMICAgICAwCisjZGVmaW5lIE1DT05UUk9MX01BVENIX05BUE9UICAgICAxCisjZGVmaW5lIE1DT05UUk9MX01BVENIX0dFICAgICAgICAyCisjZGVmaW5lIE1DT05UUk9MX01BVENIX0xUICAgICAgICAzCisjZGVmaW5lIE1DT05UUk9MX01BVENIX01BU0tfTE9XICA0CisjZGVmaW5lIE1DT05UUk9MX01BVENIX01BU0tfSElHSCA1CisKKyNkZWZpbmUgTUlQX1NTSVAgICAgICAgICAgICAoMSA8PCBJUlFfU19TT0ZUKQorI2RlZmluZSBNSVBfSFNJUCAgICAgICAgICAgICgxIDw8IElSUV9IX1NPRlQpCisjZGVmaW5lIE1JUF9NU0lQICAgICAgICAgICAgKDEgPDwgSVJRX01fU09GVCkKKyNkZWZpbmUgTUlQX1NUSVAgICAgICAgICAgICAoMSA8PCBJUlFfU19USU1FUikKKyNkZWZpbmUgTUlQX0hUSVAgICAgICAgICAgICAoMSA8PCBJUlFfSF9USU1FUikKKyNkZWZpbmUgTUlQX01USVAgICAgICAgICAgICAoMSA8PCBJUlFfTV9USU1FUikKKyNkZWZpbmUgTUlQX1NFSVAgICAgICAgICAgICAoMSA8PCBJUlFfU19FWFQpCisjZGVmaW5lIE1JUF9IRUlQICAgICAgICAgICAgKDEgPDwgSVJRX0hfRVhUKQorI2RlZmluZSBNSVBfTUVJUCAgICAgICAgICAgICgxIDw8IElSUV9NX0VYVCkKKworI2RlZmluZSBTSVBfU1NJUCBNSVBfU1NJUAorI2RlZmluZSBTSVBfU1RJUCBNSVBfU1RJUAorCisjZGVmaW5lIFBSVl9VIDAKKyNkZWZpbmUgUFJWX1MgMQorI2RlZmluZSBQUlZfSCAyCisjZGVmaW5lIFBSVl9NIDMKKworI2RlZmluZSBTUFRCUjMyX01PREUgMHg4MDAwMDAwMAorI2RlZmluZSBTUFRCUjMyX0FTSUQgMHg3RkMwMDAwMAorI2RlZmluZSBTUFRCUjMyX1BQTiAgMHgwMDNGRkZGRgorI2RlZmluZSBTUFRCUjY0X01PREUgMHhGMDAwMDAwMDAwMDAwMDAwCisjZGVmaW5lIFNQVEJSNjRfQVNJRCAweDBGRkZGMDAwMDAwMDAwMDAKKyNkZWZpbmUgU1BUQlI2NF9QUE4gIDB4MDAwMDBGRkZGRkZGRkZGRgorCisjZGVmaW5lIFNQVEJSX01PREVfT0ZGICAwCisjZGVmaW5lIFNQVEJSX01PREVfU1YzMiAxCisjZGVmaW5lIFNQVEJSX01PREVfU1YzOSA4CisjZGVmaW5lIFNQVEJSX01PREVfU1Y0OCA5CisjZGVmaW5lIFNQVEJSX01PREVfU1Y1NyAxMAorI2RlZmluZSBTUFRCUl9NT0RFX1NWNjQgMTEKKworI2RlZmluZSBQTVBfUiAgICAgMHgwMQorI2RlZmluZSBQTVBfVyAgICAgMHgwMgorI2RlZmluZSBQTVBfWCAgICAgMHgwNAorI2RlZmluZSBQTVBfQSAgICAgMHgxOAorI2RlZmluZSBQTVBfTCAgICAgMHg4MAorI2RlZmluZSBQTVBfU0hJRlQgMgorCisjZGVmaW5lIFBNUF9UT1IgICAweDA4CisjZGVmaW5lIFBNUF9OQTQgICAweDEwCisjZGVmaW5lIFBNUF9OQVBPVCAweDE4CisKKyNkZWZpbmUgSVJRX1NfU09GVCAgIDEKKyNkZWZpbmUgSVJRX0hfU09GVCAgIDIKKyNkZWZpbmUgSVJRX01fU09GVCAgIDMKKyNkZWZpbmUgSVJRX1NfVElNRVIgIDUKKyNkZWZpbmUgSVJRX0hfVElNRVIgIDYKKyNkZWZpbmUgSVJRX01fVElNRVIgIDcKKyNkZWZpbmUgSVJRX1NfRVhUICAgIDkKKyNkZWZpbmUgSVJRX0hfRVhUICAgIDEwCisjZGVmaW5lIElSUV9NX0VYVCAgICAxMQorI2RlZmluZSBJUlFfQ09QICAgICAgMTIKKyNkZWZpbmUgSVJRX0hPU1QgICAgIDEzCisKKyNkZWZpbmUgREVGQVVMVF9SU1RWRUMgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgQ0xJTlRfQkFTRSAgICAgICAgIDB4MDIwMDAwMDAKKyNkZWZpbmUgQ0xJTlRfU0laRSAgICAgICAgIDB4MDAwYzAwMDAKKyNkZWZpbmUgRVhUX0lPX0JBU0UgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgRFJBTV9CQVNFICAgICAgICAgIDB4ODAwMDAwMDAKKworLy8gcGFnZSB0YWJsZSBlbnRyeSAoUFRFKSBmaWVsZHMKKyNkZWZpbmUgUFRFX1YgICAgIDB4MDAxIC8vIFZhbGlkCisjZGVmaW5lIFBURV9SICAgICAweDAwMiAvLyBSZWFkCisjZGVmaW5lIFBURV9XICAgICAweDAwNCAvLyBXcml0ZQorI2RlZmluZSBQVEVfWCAgICAgMHgwMDggLy8gRXhlY3V0ZQorI2RlZmluZSBQVEVfVSAgICAgMHgwMTAgLy8gVXNlcgorI2RlZmluZSBQVEVfRyAgICAgMHgwMjAgLy8gR2xvYmFsCisjZGVmaW5lIFBURV9BICAgICAweDA0MCAvLyBBY2Nlc3NlZAorI2RlZmluZSBQVEVfRCAgICAgMHgwODAgLy8gRGlydHkKKyNkZWZpbmUgUFRFX1NPRlQgIDB4MzAwIC8vIFJlc2VydmVkIGZvciBTb2Z0d2FyZQorCisjZGVmaW5lIFBURV9QUE5fU0hJRlQgMTAKKworI2RlZmluZSBQVEVfVEFCTEUoUFRFKSAoKChQVEUpICYgKFBURV9WIHwgUFRFX1IgfCBQVEVfVyB8IFBURV9YKSkgPT0gUFRFX1YpCisKKyNpZmRlZiBfX3Jpc2N2CisKKyNpZiBfX3Jpc2N2X3hsZW4gPT0gNjQKKyMgZGVmaW5lIE1TVEFUVVNfU0QgTVNUQVRVUzY0X1NECisjIGRlZmluZSBTU1RBVFVTX1NEIFNTVEFUVVM2NF9TRAorIyBkZWZpbmUgUklTQ1ZfUEdMRVZFTF9CSVRTIDkKKyMgZGVmaW5lIFNQVEJSX01PREUgU1BUQlI2NF9NT0RFCisjZWxzZQorIyBkZWZpbmUgTVNUQVRVU19TRCBNU1RBVFVTMzJfU0QKKyMgZGVmaW5lIFNTVEFUVVNfU0QgU1NUQVRVUzMyX1NECisjIGRlZmluZSBSSVNDVl9QR0xFVkVMX0JJVFMgMTAKKyMgZGVmaW5lIFNQVEJSX01PREUgU1BUQlIzMl9NT0RFCisjZW5kaWYKKyNkZWZpbmUgUklTQ1ZfUEdTSElGVCAxMgorI2RlZmluZSBSSVNDVl9QR1NJWkUgKDEgPDwgUklTQ1ZfUEdTSElGVCkKKworI2lmbmRlZiBfX0FTU0VNQkxFUl9fCisKKyNpZmRlZiBfX0dOVUNfXworCisjZGVmaW5lIHJlYWRfY3NyKHJlZykgKHsgdW5zaWduZWQgbG9uZyBfX3RtcDsgXAorICBhc20gdm9sYXRpbGUgKCJjc3JyICUwLCAiICNyZWcgOiAiPXIiKF9fdG1wKSk7IFwKKyAgX190bXA7IH0pCisKKyNkZWZpbmUgd3JpdGVfY3NyKHJlZywgdmFsKSAoeyBcCisgIGFzbSB2b2xhdGlsZSAoImNzcncgIiAjcmVnICIsICUwIiA6OiAicksiKHZhbCkpOyB9KQorCisjZGVmaW5lIHN3YXBfY3NyKHJlZywgdmFsKSAoeyB1bnNpZ25lZCBsb25nIF9fdG1wOyBcCisgIGFzbSB2b2xhdGlsZSAoImNzcnJ3ICUwLCAiICNyZWcgIiwgJTEiIDogIj1yIihfX3RtcCkgOiAicksiKHZhbCkpOyBcCisgIF9fdG1wOyB9KQorCisjZGVmaW5lIHNldF9jc3IocmVnLCBiaXQpICh7IHVuc2lnbmVkIGxvbmcgX190bXA7IFwKKyAgYXNtIHZvbGF0aWxlICgiY3NycnMgJTAsICIgI3JlZyAiLCAlMSIgOiAiPXIiKF9fdG1wKSA6ICJySyIoYml0KSk7IFwKKyAgX190bXA7IH0pCisKKyNkZWZpbmUgY2xlYXJfY3NyKHJlZywgYml0KSAoeyB1bnNpZ25lZCBsb25nIF9fdG1wOyBcCisgIGFzbSB2b2xhdGlsZSAoImNzcnJjICUwLCAiICNyZWcgIiwgJTEiIDogIj1yIihfX3RtcCkgOiAicksiKGJpdCkpOyBcCisgIF9fdG1wOyB9KQorCisjZGVmaW5lIHJkdGltZSgpIHJlYWRfY3NyKHRpbWUpCisjZGVmaW5lIHJkY3ljbGUoKSByZWFkX2NzcihjeWNsZSkKKyNkZWZpbmUgcmRpbnN0cmV0KCkgcmVhZF9jc3IoaW5zdHJldCkKKworI2VuZGlmCisKKyNlbmRpZgorCisjZW5kaWYKKworI2VuZGlmCisvKiBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBwYXJzZS1vcGNvZGVzLiAgKi8KKyNpZm5kZWYgUklTQ1ZfRU5DT0RJTkdfSAorI2RlZmluZSBSSVNDVl9FTkNPRElOR19ICisjZGVmaW5lIE1BVENIX0JFUSAweDYzCisjZGVmaW5lIE1BU0tfQkVRICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfQk5FIDB4MTA2MworI2RlZmluZSBNQVNLX0JORSAgMHg3MDdmCisjZGVmaW5lIE1BVENIX0JMVCAweDQwNjMKKyNkZWZpbmUgTUFTS19CTFQgIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9CR0UgMHg1MDYzCisjZGVmaW5lIE1BU0tfQkdFICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfQkxUVSAweDYwNjMKKyNkZWZpbmUgTUFTS19CTFRVICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfQkdFVSAweDcwNjMKKyNkZWZpbmUgTUFTS19CR0VVICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfSkFMUiAweDY3CisjZGVmaW5lIE1BU0tfSkFMUiAgMHg3MDdmCisjZGVmaW5lIE1BVENIX0pBTCAweDZmCisjZGVmaW5lIE1BU0tfSkFMICAweDdmCisjZGVmaW5lIE1BVENIX0xVSSAweDM3CisjZGVmaW5lIE1BU0tfTFVJICAweDdmCisjZGVmaW5lIE1BVENIX0FVSVBDIDB4MTcKKyNkZWZpbmUgTUFTS19BVUlQQyAgMHg3ZgorI2RlZmluZSBNQVRDSF9BRERJIDB4MTMKKyNkZWZpbmUgTUFTS19BRERJICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfU0xMSSAweDEwMTMKKyNkZWZpbmUgTUFTS19TTExJICAweGZjMDA3MDdmCisjZGVmaW5lIE1BVENIX1NMVEkgMHgyMDEzCisjZGVmaW5lIE1BU0tfU0xUSSAgMHg3MDdmCisjZGVmaW5lIE1BVENIX1NMVElVIDB4MzAxMworI2RlZmluZSBNQVNLX1NMVElVICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfWE9SSSAweDQwMTMKKyNkZWZpbmUgTUFTS19YT1JJICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfU1JMSSAweDUwMTMKKyNkZWZpbmUgTUFTS19TUkxJICAweGZjMDA3MDdmCisjZGVmaW5lIE1BVENIX1NSQUkgMHg0MDAwNTAxMworI2RlZmluZSBNQVNLX1NSQUkgIDB4ZmMwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfT1JJIDB4NjAxMworI2RlZmluZSBNQVNLX09SSSAgMHg3MDdmCisjZGVmaW5lIE1BVENIX0FOREkgMHg3MDEzCisjZGVmaW5lIE1BU0tfQU5ESSAgMHg3MDdmCisjZGVmaW5lIE1BVENIX0FERCAweDMzCisjZGVmaW5lIE1BU0tfQUREICAweGZlMDA3MDdmCisjZGVmaW5lIE1BVENIX1NVQiAweDQwMDAwMDMzCisjZGVmaW5lIE1BU0tfU1VCICAweGZlMDA3MDdmCisjZGVmaW5lIE1BVENIX1NMTCAweDEwMzMKKyNkZWZpbmUgTUFTS19TTEwgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfU0xUIDB4MjAzMworI2RlZmluZSBNQVNLX1NMVCAgMHhmZTAwNzA3ZgorI2RlZmluZSBNQVRDSF9TTFRVIDB4MzAzMworI2RlZmluZSBNQVNLX1NMVFUgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfWE9SIDB4NDAzMworI2RlZmluZSBNQVNLX1hPUiAgMHhmZTAwNzA3ZgorI2RlZmluZSBNQVRDSF9TUkwgMHg1MDMzCisjZGVmaW5lIE1BU0tfU1JMICAweGZlMDA3MDdmCisjZGVmaW5lIE1BVENIX1NSQSAweDQwMDA1MDMzCisjZGVmaW5lIE1BU0tfU1JBICAweGZlMDA3MDdmCisjZGVmaW5lIE1BVENIX09SIDB4NjAzMworI2RlZmluZSBNQVNLX09SICAweGZlMDA3MDdmCisjZGVmaW5lIE1BVENIX0FORCAweDcwMzMKKyNkZWZpbmUgTUFTS19BTkQgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfQURESVcgMHgxYgorI2RlZmluZSBNQVNLX0FERElXICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfU0xMSVcgMHgxMDFiCisjZGVmaW5lIE1BU0tfU0xMSVcgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfU1JMSVcgMHg1MDFiCisjZGVmaW5lIE1BU0tfU1JMSVcgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfU1JBSVcgMHg0MDAwNTAxYgorI2RlZmluZSBNQVNLX1NSQUlXICAweGZlMDA3MDdmCisjZGVmaW5lIE1BVENIX0FERFcgMHgzYgorI2RlZmluZSBNQVNLX0FERFcgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfU1VCVyAweDQwMDAwMDNiCisjZGVmaW5lIE1BU0tfU1VCVyAgMHhmZTAwNzA3ZgorI2RlZmluZSBNQVRDSF9TTExXIDB4MTAzYgorI2RlZmluZSBNQVNLX1NMTFcgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfU1JMVyAweDUwM2IKKyNkZWZpbmUgTUFTS19TUkxXICAweGZlMDA3MDdmCisjZGVmaW5lIE1BVENIX1NSQVcgMHg0MDAwNTAzYgorI2RlZmluZSBNQVNLX1NSQVcgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfTEIgMHgzCisjZGVmaW5lIE1BU0tfTEIgIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9MSCAweDEwMDMKKyNkZWZpbmUgTUFTS19MSCAgMHg3MDdmCisjZGVmaW5lIE1BVENIX0xXIDB4MjAwMworI2RlZmluZSBNQVNLX0xXICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfTEQgMHgzMDAzCisjZGVmaW5lIE1BU0tfTEQgIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9MQlUgMHg0MDAzCisjZGVmaW5lIE1BU0tfTEJVICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfTEhVIDB4NTAwMworI2RlZmluZSBNQVNLX0xIVSAgMHg3MDdmCisjZGVmaW5lIE1BVENIX0xXVSAweDYwMDMKKyNkZWZpbmUgTUFTS19MV1UgIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9TQiAweDIzCisjZGVmaW5lIE1BU0tfU0IgIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9TSCAweDEwMjMKKyNkZWZpbmUgTUFTS19TSCAgMHg3MDdmCisjZGVmaW5lIE1BVENIX1NXIDB4MjAyMworI2RlZmluZSBNQVNLX1NXICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfU0QgMHgzMDIzCisjZGVmaW5lIE1BU0tfU0QgIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9GRU5DRSAweGYKKyNkZWZpbmUgTUFTS19GRU5DRSAgMHg3MDdmCisjZGVmaW5lIE1BVENIX0ZFTkNFX0kgMHgxMDBmCisjZGVmaW5lIE1BU0tfRkVOQ0VfSSAgMHg3MDdmCisjZGVmaW5lIE1BVENIX01VTCAweDIwMDAwMzMKKyNkZWZpbmUgTUFTS19NVUwgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfTVVMSCAweDIwMDEwMzMKKyNkZWZpbmUgTUFTS19NVUxIICAweGZlMDA3MDdmCisjZGVmaW5lIE1BVENIX01VTEhTVSAweDIwMDIwMzMKKyNkZWZpbmUgTUFTS19NVUxIU1UgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfTVVMSFUgMHgyMDAzMDMzCisjZGVmaW5lIE1BU0tfTVVMSFUgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfRElWIDB4MjAwNDAzMworI2RlZmluZSBNQVNLX0RJViAgMHhmZTAwNzA3ZgorI2RlZmluZSBNQVRDSF9ESVZVIDB4MjAwNTAzMworI2RlZmluZSBNQVNLX0RJVlUgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfUkVNIDB4MjAwNjAzMworI2RlZmluZSBNQVNLX1JFTSAgMHhmZTAwNzA3ZgorI2RlZmluZSBNQVRDSF9SRU1VIDB4MjAwNzAzMworI2RlZmluZSBNQVNLX1JFTVUgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfTVVMVyAweDIwMDAwM2IKKyNkZWZpbmUgTUFTS19NVUxXICAweGZlMDA3MDdmCisjZGVmaW5lIE1BVENIX0RJVlcgMHgyMDA0MDNiCisjZGVmaW5lIE1BU0tfRElWVyAgMHhmZTAwNzA3ZgorI2RlZmluZSBNQVRDSF9ESVZVVyAweDIwMDUwM2IKKyNkZWZpbmUgTUFTS19ESVZVVyAgMHhmZTAwNzA3ZgorI2RlZmluZSBNQVRDSF9SRU1XIDB4MjAwNjAzYgorI2RlZmluZSBNQVNLX1JFTVcgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfUkVNVVcgMHgyMDA3MDNiCisjZGVmaW5lIE1BU0tfUkVNVVcgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfQU1PQUREX1cgMHgyMDJmCisjZGVmaW5lIE1BU0tfQU1PQUREX1cgIDB4ZjgwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfQU1PWE9SX1cgMHgyMDAwMjAyZgorI2RlZmluZSBNQVNLX0FNT1hPUl9XICAweGY4MDA3MDdmCisjZGVmaW5lIE1BVENIX0FNT09SX1cgMHg0MDAwMjAyZgorI2RlZmluZSBNQVNLX0FNT09SX1cgIDB4ZjgwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfQU1PQU5EX1cgMHg2MDAwMjAyZgorI2RlZmluZSBNQVNLX0FNT0FORF9XICAweGY4MDA3MDdmCisjZGVmaW5lIE1BVENIX0FNT01JTl9XIDB4ODAwMDIwMmYKKyNkZWZpbmUgTUFTS19BTU9NSU5fVyAgMHhmODAwNzA3ZgorI2RlZmluZSBNQVRDSF9BTU9NQVhfVyAweGEwMDAyMDJmCisjZGVmaW5lIE1BU0tfQU1PTUFYX1cgIDB4ZjgwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfQU1PTUlOVV9XIDB4YzAwMDIwMmYKKyNkZWZpbmUgTUFTS19BTU9NSU5VX1cgIDB4ZjgwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfQU1PTUFYVV9XIDB4ZTAwMDIwMmYKKyNkZWZpbmUgTUFTS19BTU9NQVhVX1cgIDB4ZjgwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfQU1PU1dBUF9XIDB4ODAwMjAyZgorI2RlZmluZSBNQVNLX0FNT1NXQVBfVyAgMHhmODAwNzA3ZgorI2RlZmluZSBNQVRDSF9MUl9XIDB4MTAwMDIwMmYKKyNkZWZpbmUgTUFTS19MUl9XICAweGY5ZjA3MDdmCisjZGVmaW5lIE1BVENIX1NDX1cgMHgxODAwMjAyZgorI2RlZmluZSBNQVNLX1NDX1cgIDB4ZjgwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfQU1PQUREX0QgMHgzMDJmCisjZGVmaW5lIE1BU0tfQU1PQUREX0QgIDB4ZjgwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfQU1PWE9SX0QgMHgyMDAwMzAyZgorI2RlZmluZSBNQVNLX0FNT1hPUl9EICAweGY4MDA3MDdmCisjZGVmaW5lIE1BVENIX0FNT09SX0QgMHg0MDAwMzAyZgorI2RlZmluZSBNQVNLX0FNT09SX0QgIDB4ZjgwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfQU1PQU5EX0QgMHg2MDAwMzAyZgorI2RlZmluZSBNQVNLX0FNT0FORF9EICAweGY4MDA3MDdmCisjZGVmaW5lIE1BVENIX0FNT01JTl9EIDB4ODAwMDMwMmYKKyNkZWZpbmUgTUFTS19BTU9NSU5fRCAgMHhmODAwNzA3ZgorI2RlZmluZSBNQVRDSF9BTU9NQVhfRCAweGEwMDAzMDJmCisjZGVmaW5lIE1BU0tfQU1PTUFYX0QgIDB4ZjgwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfQU1PTUlOVV9EIDB4YzAwMDMwMmYKKyNkZWZpbmUgTUFTS19BTU9NSU5VX0QgIDB4ZjgwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfQU1PTUFYVV9EIDB4ZTAwMDMwMmYKKyNkZWZpbmUgTUFTS19BTU9NQVhVX0QgIDB4ZjgwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfQU1PU1dBUF9EIDB4ODAwMzAyZgorI2RlZmluZSBNQVNLX0FNT1NXQVBfRCAgMHhmODAwNzA3ZgorI2RlZmluZSBNQVRDSF9MUl9EIDB4MTAwMDMwMmYKKyNkZWZpbmUgTUFTS19MUl9EICAweGY5ZjA3MDdmCisjZGVmaW5lIE1BVENIX1NDX0QgMHgxODAwMzAyZgorI2RlZmluZSBNQVNLX1NDX0QgIDB4ZjgwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfRUNBTEwgMHg3MworI2RlZmluZSBNQVNLX0VDQUxMICAweGZmZmZmZmZmCisjZGVmaW5lIE1BVENIX0VCUkVBSyAweDEwMDA3MworI2RlZmluZSBNQVNLX0VCUkVBSyAgMHhmZmZmZmZmZgorI2RlZmluZSBNQVRDSF9VUkVUIDB4MjAwMDczCisjZGVmaW5lIE1BU0tfVVJFVCAgMHhmZmZmZmZmZgorI2RlZmluZSBNQVRDSF9TUkVUIDB4MTAyMDAwNzMKKyNkZWZpbmUgTUFTS19TUkVUICAweGZmZmZmZmZmCisjZGVmaW5lIE1BVENIX01SRVQgMHgzMDIwMDA3MworI2RlZmluZSBNQVNLX01SRVQgIDB4ZmZmZmZmZmYKKyNkZWZpbmUgTUFUQ0hfRFJFVCAweDdiMjAwMDczCisjZGVmaW5lIE1BU0tfRFJFVCAgMHhmZmZmZmZmZgorI2RlZmluZSBNQVRDSF9TRkVOQ0VfVk1BIDB4MTIwMDAwNzMKKyNkZWZpbmUgTUFTS19TRkVOQ0VfVk1BICAweGZlMDA3ZmZmCisjZGVmaW5lIE1BVENIX1dGSSAweDEwNTAwMDczCisjZGVmaW5lIE1BU0tfV0ZJICAweGZmZmZmZmZmCisjZGVmaW5lIE1BVENIX0NTUlJXIDB4MTA3MworI2RlZmluZSBNQVNLX0NTUlJXICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfQ1NSUlMgMHgyMDczCisjZGVmaW5lIE1BU0tfQ1NSUlMgIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9DU1JSQyAweDMwNzMKKyNkZWZpbmUgTUFTS19DU1JSQyAgMHg3MDdmCisjZGVmaW5lIE1BVENIX0NTUlJXSSAweDUwNzMKKyNkZWZpbmUgTUFTS19DU1JSV0kgIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9DU1JSU0kgMHg2MDczCisjZGVmaW5lIE1BU0tfQ1NSUlNJICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfQ1NSUkNJIDB4NzA3MworI2RlZmluZSBNQVNLX0NTUlJDSSAgMHg3MDdmCisjZGVmaW5lIE1BVENIX0ZBRERfUyAweDUzCisjZGVmaW5lIE1BU0tfRkFERF9TICAweGZlMDAwMDdmCisjZGVmaW5lIE1BVENIX0ZTVUJfUyAweDgwMDAwNTMKKyNkZWZpbmUgTUFTS19GU1VCX1MgIDB4ZmUwMDAwN2YKKyNkZWZpbmUgTUFUQ0hfRk1VTF9TIDB4MTAwMDAwNTMKKyNkZWZpbmUgTUFTS19GTVVMX1MgIDB4ZmUwMDAwN2YKKyNkZWZpbmUgTUFUQ0hfRkRJVl9TIDB4MTgwMDAwNTMKKyNkZWZpbmUgTUFTS19GRElWX1MgIDB4ZmUwMDAwN2YKKyNkZWZpbmUgTUFUQ0hfRlNHTkpfUyAweDIwMDAwMDUzCisjZGVmaW5lIE1BU0tfRlNHTkpfUyAgMHhmZTAwNzA3ZgorI2RlZmluZSBNQVRDSF9GU0dOSk5fUyAweDIwMDAxMDUzCisjZGVmaW5lIE1BU0tfRlNHTkpOX1MgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfRlNHTkpYX1MgMHgyMDAwMjA1MworI2RlZmluZSBNQVNLX0ZTR05KWF9TICAweGZlMDA3MDdmCisjZGVmaW5lIE1BVENIX0ZNSU5fUyAweDI4MDAwMDUzCisjZGVmaW5lIE1BU0tfRk1JTl9TICAweGZlMDA3MDdmCisjZGVmaW5lIE1BVENIX0ZNQVhfUyAweDI4MDAxMDUzCisjZGVmaW5lIE1BU0tfRk1BWF9TICAweGZlMDA3MDdmCisjZGVmaW5lIE1BVENIX0ZTUVJUX1MgMHg1ODAwMDA1MworI2RlZmluZSBNQVNLX0ZTUVJUX1MgIDB4ZmZmMDAwN2YKKyNkZWZpbmUgTUFUQ0hfRkFERF9EIDB4MjAwMDA1MworI2RlZmluZSBNQVNLX0ZBRERfRCAgMHhmZTAwMDA3ZgorI2RlZmluZSBNQVRDSF9GU1VCX0QgMHhhMDAwMDUzCisjZGVmaW5lIE1BU0tfRlNVQl9EICAweGZlMDAwMDdmCisjZGVmaW5lIE1BVENIX0ZNVUxfRCAweDEyMDAwMDUzCisjZGVmaW5lIE1BU0tfRk1VTF9EICAweGZlMDAwMDdmCisjZGVmaW5lIE1BVENIX0ZESVZfRCAweDFhMDAwMDUzCisjZGVmaW5lIE1BU0tfRkRJVl9EICAweGZlMDAwMDdmCisjZGVmaW5lIE1BVENIX0ZTR05KX0QgMHgyMjAwMDA1MworI2RlZmluZSBNQVNLX0ZTR05KX0QgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfRlNHTkpOX0QgMHgyMjAwMTA1MworI2RlZmluZSBNQVNLX0ZTR05KTl9EICAweGZlMDA3MDdmCisjZGVmaW5lIE1BVENIX0ZTR05KWF9EIDB4MjIwMDIwNTMKKyNkZWZpbmUgTUFTS19GU0dOSlhfRCAgMHhmZTAwNzA3ZgorI2RlZmluZSBNQVRDSF9GTUlOX0QgMHgyYTAwMDA1MworI2RlZmluZSBNQVNLX0ZNSU5fRCAgMHhmZTAwNzA3ZgorI2RlZmluZSBNQVRDSF9GTUFYX0QgMHgyYTAwMTA1MworI2RlZmluZSBNQVNLX0ZNQVhfRCAgMHhmZTAwNzA3ZgorI2RlZmluZSBNQVRDSF9GQ1ZUX1NfRCAweDQwMTAwMDUzCisjZGVmaW5lIE1BU0tfRkNWVF9TX0QgIDB4ZmZmMDAwN2YKKyNkZWZpbmUgTUFUQ0hfRkNWVF9EX1MgMHg0MjAwMDA1MworI2RlZmluZSBNQVNLX0ZDVlRfRF9TICAweGZmZjAwMDdmCisjZGVmaW5lIE1BVENIX0ZTUVJUX0QgMHg1YTAwMDA1MworI2RlZmluZSBNQVNLX0ZTUVJUX0QgIDB4ZmZmMDAwN2YKKyNkZWZpbmUgTUFUQ0hfRkFERF9RIDB4NjAwMDA1MworI2RlZmluZSBNQVNLX0ZBRERfUSAgMHhmZTAwMDA3ZgorI2RlZmluZSBNQVRDSF9GU1VCX1EgMHhlMDAwMDUzCisjZGVmaW5lIE1BU0tfRlNVQl9RICAweGZlMDAwMDdmCisjZGVmaW5lIE1BVENIX0ZNVUxfUSAweDE2MDAwMDUzCisjZGVmaW5lIE1BU0tfRk1VTF9RICAweGZlMDAwMDdmCisjZGVmaW5lIE1BVENIX0ZESVZfUSAweDFlMDAwMDUzCisjZGVmaW5lIE1BU0tfRkRJVl9RICAweGZlMDAwMDdmCisjZGVmaW5lIE1BVENIX0ZTR05KX1EgMHgyNjAwMDA1MworI2RlZmluZSBNQVNLX0ZTR05KX1EgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfRlNHTkpOX1EgMHgyNjAwMTA1MworI2RlZmluZSBNQVNLX0ZTR05KTl9RICAweGZlMDA3MDdmCisjZGVmaW5lIE1BVENIX0ZTR05KWF9RIDB4MjYwMDIwNTMKKyNkZWZpbmUgTUFTS19GU0dOSlhfUSAgMHhmZTAwNzA3ZgorI2RlZmluZSBNQVRDSF9GTUlOX1EgMHgyZTAwMDA1MworI2RlZmluZSBNQVNLX0ZNSU5fUSAgMHhmZTAwNzA3ZgorI2RlZmluZSBNQVRDSF9GTUFYX1EgMHgyZTAwMTA1MworI2RlZmluZSBNQVNLX0ZNQVhfUSAgMHhmZTAwNzA3ZgorI2RlZmluZSBNQVRDSF9GQ1ZUX1NfUSAweDQwMzAwMDUzCisjZGVmaW5lIE1BU0tfRkNWVF9TX1EgIDB4ZmZmMDAwN2YKKyNkZWZpbmUgTUFUQ0hfRkNWVF9RX1MgMHg0NjAwMDA1MworI2RlZmluZSBNQVNLX0ZDVlRfUV9TICAweGZmZjAwMDdmCisjZGVmaW5lIE1BVENIX0ZDVlRfRF9RIDB4NDIzMDAwNTMKKyNkZWZpbmUgTUFTS19GQ1ZUX0RfUSAgMHhmZmYwMDA3ZgorI2RlZmluZSBNQVRDSF9GQ1ZUX1FfRCAweDQ2MTAwMDUzCisjZGVmaW5lIE1BU0tfRkNWVF9RX0QgIDB4ZmZmMDAwN2YKKyNkZWZpbmUgTUFUQ0hfRlNRUlRfUSAweDVlMDAwMDUzCisjZGVmaW5lIE1BU0tfRlNRUlRfUSAgMHhmZmYwMDA3ZgorI2RlZmluZSBNQVRDSF9GTEVfUyAweGEwMDAwMDUzCisjZGVmaW5lIE1BU0tfRkxFX1MgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfRkxUX1MgMHhhMDAwMTA1MworI2RlZmluZSBNQVNLX0ZMVF9TICAweGZlMDA3MDdmCisjZGVmaW5lIE1BVENIX0ZFUV9TIDB4YTAwMDIwNTMKKyNkZWZpbmUgTUFTS19GRVFfUyAgMHhmZTAwNzA3ZgorI2RlZmluZSBNQVRDSF9GTEVfRCAweGEyMDAwMDUzCisjZGVmaW5lIE1BU0tfRkxFX0QgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfRkxUX0QgMHhhMjAwMTA1MworI2RlZmluZSBNQVNLX0ZMVF9EICAweGZlMDA3MDdmCisjZGVmaW5lIE1BVENIX0ZFUV9EIDB4YTIwMDIwNTMKKyNkZWZpbmUgTUFTS19GRVFfRCAgMHhmZTAwNzA3ZgorI2RlZmluZSBNQVRDSF9GTEVfUSAweGE2MDAwMDUzCisjZGVmaW5lIE1BU0tfRkxFX1EgIDB4ZmUwMDcwN2YKKyNkZWZpbmUgTUFUQ0hfRkxUX1EgMHhhNjAwMTA1MworI2RlZmluZSBNQVNLX0ZMVF9RICAweGZlMDA3MDdmCisjZGVmaW5lIE1BVENIX0ZFUV9RIDB4YTYwMDIwNTMKKyNkZWZpbmUgTUFTS19GRVFfUSAgMHhmZTAwNzA3ZgorI2RlZmluZSBNQVRDSF9GQ1ZUX1dfUyAweGMwMDAwMDUzCisjZGVmaW5lIE1BU0tfRkNWVF9XX1MgIDB4ZmZmMDAwN2YKKyNkZWZpbmUgTUFUQ0hfRkNWVF9XVV9TIDB4YzAxMDAwNTMKKyNkZWZpbmUgTUFTS19GQ1ZUX1dVX1MgIDB4ZmZmMDAwN2YKKyNkZWZpbmUgTUFUQ0hfRkNWVF9MX1MgMHhjMDIwMDA1MworI2RlZmluZSBNQVNLX0ZDVlRfTF9TICAweGZmZjAwMDdmCisjZGVmaW5lIE1BVENIX0ZDVlRfTFVfUyAweGMwMzAwMDUzCisjZGVmaW5lIE1BU0tfRkNWVF9MVV9TICAweGZmZjAwMDdmCisjZGVmaW5lIE1BVENIX0ZNVl9YX1cgMHhlMDAwMDA1MworI2RlZmluZSBNQVNLX0ZNVl9YX1cgIDB4ZmZmMDcwN2YKKyNkZWZpbmUgTUFUQ0hfRkNMQVNTX1MgMHhlMDAwMTA1MworI2RlZmluZSBNQVNLX0ZDTEFTU19TICAweGZmZjA3MDdmCisjZGVmaW5lIE1BVENIX0ZDVlRfV19EIDB4YzIwMDAwNTMKKyNkZWZpbmUgTUFTS19GQ1ZUX1dfRCAgMHhmZmYwMDA3ZgorI2RlZmluZSBNQVRDSF9GQ1ZUX1dVX0QgMHhjMjEwMDA1MworI2RlZmluZSBNQVNLX0ZDVlRfV1VfRCAgMHhmZmYwMDA3ZgorI2RlZmluZSBNQVRDSF9GQ1ZUX0xfRCAweGMyMjAwMDUzCisjZGVmaW5lIE1BU0tfRkNWVF9MX0QgIDB4ZmZmMDAwN2YKKyNkZWZpbmUgTUFUQ0hfRkNWVF9MVV9EIDB4YzIzMDAwNTMKKyNkZWZpbmUgTUFTS19GQ1ZUX0xVX0QgIDB4ZmZmMDAwN2YKKyNkZWZpbmUgTUFUQ0hfRk1WX1hfRCAweGUyMDAwMDUzCisjZGVmaW5lIE1BU0tfRk1WX1hfRCAgMHhmZmYwNzA3ZgorI2RlZmluZSBNQVRDSF9GQ0xBU1NfRCAweGUyMDAxMDUzCisjZGVmaW5lIE1BU0tfRkNMQVNTX0QgIDB4ZmZmMDcwN2YKKyNkZWZpbmUgTUFUQ0hfRkNWVF9XX1EgMHhjNjAwMDA1MworI2RlZmluZSBNQVNLX0ZDVlRfV19RICAweGZmZjAwMDdmCisjZGVmaW5lIE1BVENIX0ZDVlRfV1VfUSAweGM2MTAwMDUzCisjZGVmaW5lIE1BU0tfRkNWVF9XVV9RICAweGZmZjAwMDdmCisjZGVmaW5lIE1BVENIX0ZDVlRfTF9RIDB4YzYyMDAwNTMKKyNkZWZpbmUgTUFTS19GQ1ZUX0xfUSAgMHhmZmYwMDA3ZgorI2RlZmluZSBNQVRDSF9GQ1ZUX0xVX1EgMHhjNjMwMDA1MworI2RlZmluZSBNQVNLX0ZDVlRfTFVfUSAgMHhmZmYwMDA3ZgorI2RlZmluZSBNQVRDSF9GTVZfWF9RIDB4ZTYwMDAwNTMKKyNkZWZpbmUgTUFTS19GTVZfWF9RICAweGZmZjA3MDdmCisjZGVmaW5lIE1BVENIX0ZDTEFTU19RIDB4ZTYwMDEwNTMKKyNkZWZpbmUgTUFTS19GQ0xBU1NfUSAgMHhmZmYwNzA3ZgorI2RlZmluZSBNQVRDSF9GQ1ZUX1NfVyAweGQwMDAwMDUzCisjZGVmaW5lIE1BU0tfRkNWVF9TX1cgIDB4ZmZmMDAwN2YKKyNkZWZpbmUgTUFUQ0hfRkNWVF9TX1dVIDB4ZDAxMDAwNTMKKyNkZWZpbmUgTUFTS19GQ1ZUX1NfV1UgIDB4ZmZmMDAwN2YKKyNkZWZpbmUgTUFUQ0hfRkNWVF9TX0wgMHhkMDIwMDA1MworI2RlZmluZSBNQVNLX0ZDVlRfU19MICAweGZmZjAwMDdmCisjZGVmaW5lIE1BVENIX0ZDVlRfU19MVSAweGQwMzAwMDUzCisjZGVmaW5lIE1BU0tfRkNWVF9TX0xVICAweGZmZjAwMDdmCisjZGVmaW5lIE1BVENIX0ZNVl9XX1ggMHhmMDAwMDA1MworI2RlZmluZSBNQVNLX0ZNVl9XX1ggIDB4ZmZmMDcwN2YKKyNkZWZpbmUgTUFUQ0hfRkNWVF9EX1cgMHhkMjAwMDA1MworI2RlZmluZSBNQVNLX0ZDVlRfRF9XICAweGZmZjAwMDdmCisjZGVmaW5lIE1BVENIX0ZDVlRfRF9XVSAweGQyMTAwMDUzCisjZGVmaW5lIE1BU0tfRkNWVF9EX1dVICAweGZmZjAwMDdmCisjZGVmaW5lIE1BVENIX0ZDVlRfRF9MIDB4ZDIyMDAwNTMKKyNkZWZpbmUgTUFTS19GQ1ZUX0RfTCAgMHhmZmYwMDA3ZgorI2RlZmluZSBNQVRDSF9GQ1ZUX0RfTFUgMHhkMjMwMDA1MworI2RlZmluZSBNQVNLX0ZDVlRfRF9MVSAgMHhmZmYwMDA3ZgorI2RlZmluZSBNQVRDSF9GTVZfRF9YIDB4ZjIwMDAwNTMKKyNkZWZpbmUgTUFTS19GTVZfRF9YICAweGZmZjA3MDdmCisjZGVmaW5lIE1BVENIX0ZDVlRfUV9XIDB4ZDYwMDAwNTMKKyNkZWZpbmUgTUFTS19GQ1ZUX1FfVyAgMHhmZmYwMDA3ZgorI2RlZmluZSBNQVRDSF9GQ1ZUX1FfV1UgMHhkNjEwMDA1MworI2RlZmluZSBNQVNLX0ZDVlRfUV9XVSAgMHhmZmYwMDA3ZgorI2RlZmluZSBNQVRDSF9GQ1ZUX1FfTCAweGQ2MjAwMDUzCisjZGVmaW5lIE1BU0tfRkNWVF9RX0wgIDB4ZmZmMDAwN2YKKyNkZWZpbmUgTUFUQ0hfRkNWVF9RX0xVIDB4ZDYzMDAwNTMKKyNkZWZpbmUgTUFTS19GQ1ZUX1FfTFUgIDB4ZmZmMDAwN2YKKyNkZWZpbmUgTUFUQ0hfRk1WX1FfWCAweGY2MDAwMDUzCisjZGVmaW5lIE1BU0tfRk1WX1FfWCAgMHhmZmYwNzA3ZgorI2RlZmluZSBNQVRDSF9GTFcgMHgyMDA3CisjZGVmaW5lIE1BU0tfRkxXICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfRkxEIDB4MzAwNworI2RlZmluZSBNQVNLX0ZMRCAgMHg3MDdmCisjZGVmaW5lIE1BVENIX0ZMUSAweDQwMDcKKyNkZWZpbmUgTUFTS19GTFEgIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9GU1cgMHgyMDI3CisjZGVmaW5lIE1BU0tfRlNXICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfRlNEIDB4MzAyNworI2RlZmluZSBNQVNLX0ZTRCAgMHg3MDdmCisjZGVmaW5lIE1BVENIX0ZTUSAweDQwMjcKKyNkZWZpbmUgTUFTS19GU1EgIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9GTUFERF9TIDB4NDMKKyNkZWZpbmUgTUFTS19GTUFERF9TICAweDYwMDAwN2YKKyNkZWZpbmUgTUFUQ0hfRk1TVUJfUyAweDQ3CisjZGVmaW5lIE1BU0tfRk1TVUJfUyAgMHg2MDAwMDdmCisjZGVmaW5lIE1BVENIX0ZOTVNVQl9TIDB4NGIKKyNkZWZpbmUgTUFTS19GTk1TVUJfUyAgMHg2MDAwMDdmCisjZGVmaW5lIE1BVENIX0ZOTUFERF9TIDB4NGYKKyNkZWZpbmUgTUFTS19GTk1BRERfUyAgMHg2MDAwMDdmCisjZGVmaW5lIE1BVENIX0ZNQUREX0QgMHgyMDAwMDQzCisjZGVmaW5lIE1BU0tfRk1BRERfRCAgMHg2MDAwMDdmCisjZGVmaW5lIE1BVENIX0ZNU1VCX0QgMHgyMDAwMDQ3CisjZGVmaW5lIE1BU0tfRk1TVUJfRCAgMHg2MDAwMDdmCisjZGVmaW5lIE1BVENIX0ZOTVNVQl9EIDB4MjAwMDA0YgorI2RlZmluZSBNQVNLX0ZOTVNVQl9EICAweDYwMDAwN2YKKyNkZWZpbmUgTUFUQ0hfRk5NQUREX0QgMHgyMDAwMDRmCisjZGVmaW5lIE1BU0tfRk5NQUREX0QgIDB4NjAwMDA3ZgorI2RlZmluZSBNQVRDSF9GTUFERF9RIDB4NjAwMDA0MworI2RlZmluZSBNQVNLX0ZNQUREX1EgIDB4NjAwMDA3ZgorI2RlZmluZSBNQVRDSF9GTVNVQl9RIDB4NjAwMDA0NworI2RlZmluZSBNQVNLX0ZNU1VCX1EgIDB4NjAwMDA3ZgorI2RlZmluZSBNQVRDSF9GTk1TVUJfUSAweDYwMDAwNGIKKyNkZWZpbmUgTUFTS19GTk1TVUJfUSAgMHg2MDAwMDdmCisjZGVmaW5lIE1BVENIX0ZOTUFERF9RIDB4NjAwMDA0ZgorI2RlZmluZSBNQVNLX0ZOTUFERF9RICAweDYwMDAwN2YKKyNkZWZpbmUgTUFUQ0hfQ19OT1AgMHgxCisjZGVmaW5lIE1BU0tfQ19OT1AgIDB4ZmZmZgorI2RlZmluZSBNQVRDSF9DX0FEREkxNlNQIDB4NjEwMQorI2RlZmluZSBNQVNLX0NfQURESTE2U1AgIDB4ZWY4MworI2RlZmluZSBNQVRDSF9DX0pSIDB4ODAwMgorI2RlZmluZSBNQVNLX0NfSlIgIDB4ZjA3ZgorI2RlZmluZSBNQVRDSF9DX0pBTFIgMHg5MDAyCisjZGVmaW5lIE1BU0tfQ19KQUxSICAweGYwN2YKKyNkZWZpbmUgTUFUQ0hfQ19FQlJFQUsgMHg5MDAyCisjZGVmaW5lIE1BU0tfQ19FQlJFQUsgIDB4ZmZmZgorI2RlZmluZSBNQVRDSF9DX0xEIDB4NjAwMAorI2RlZmluZSBNQVNLX0NfTEQgIDB4ZTAwMworI2RlZmluZSBNQVRDSF9DX1NEIDB4ZTAwMAorI2RlZmluZSBNQVNLX0NfU0QgIDB4ZTAwMworI2RlZmluZSBNQVRDSF9DX0FERElXIDB4MjAwMQorI2RlZmluZSBNQVNLX0NfQURESVcgIDB4ZTAwMworI2RlZmluZSBNQVRDSF9DX0xEU1AgMHg2MDAyCisjZGVmaW5lIE1BU0tfQ19MRFNQICAweGUwMDMKKyNkZWZpbmUgTUFUQ0hfQ19TRFNQIDB4ZTAwMgorI2RlZmluZSBNQVNLX0NfU0RTUCAgMHhlMDAzCisjZGVmaW5lIE1BVENIX0NfQURESTRTUE4gMHgwCisjZGVmaW5lIE1BU0tfQ19BRERJNFNQTiAgMHhlMDAzCisjZGVmaW5lIE1BVENIX0NfRkxEIDB4MjAwMAorI2RlZmluZSBNQVNLX0NfRkxEICAweGUwMDMKKyNkZWZpbmUgTUFUQ0hfQ19MVyAweDQwMDAKKyNkZWZpbmUgTUFTS19DX0xXICAweGUwMDMKKyNkZWZpbmUgTUFUQ0hfQ19GTFcgMHg2MDAwCisjZGVmaW5lIE1BU0tfQ19GTFcgIDB4ZTAwMworI2RlZmluZSBNQVRDSF9DX0ZTRCAweGEwMDAKKyNkZWZpbmUgTUFTS19DX0ZTRCAgMHhlMDAzCisjZGVmaW5lIE1BVENIX0NfU1cgMHhjMDAwCisjZGVmaW5lIE1BU0tfQ19TVyAgMHhlMDAzCisjZGVmaW5lIE1BVENIX0NfRlNXIDB4ZTAwMAorI2RlZmluZSBNQVNLX0NfRlNXICAweGUwMDMKKyNkZWZpbmUgTUFUQ0hfQ19BRERJIDB4MQorI2RlZmluZSBNQVNLX0NfQURESSAgMHhlMDAzCisjZGVmaW5lIE1BVENIX0NfSkFMIDB4MjAwMQorI2RlZmluZSBNQVNLX0NfSkFMICAweGUwMDMKKyNkZWZpbmUgTUFUQ0hfQ19MSSAweDQwMDEKKyNkZWZpbmUgTUFTS19DX0xJICAweGUwMDMKKyNkZWZpbmUgTUFUQ0hfQ19MVUkgMHg2MDAxCisjZGVmaW5lIE1BU0tfQ19MVUkgIDB4ZTAwMworI2RlZmluZSBNQVRDSF9DX1NSTEkgMHg4MDAxCisjZGVmaW5lIE1BU0tfQ19TUkxJICAweGVjMDMKKyNkZWZpbmUgTUFUQ0hfQ19TUkFJIDB4ODQwMQorI2RlZmluZSBNQVNLX0NfU1JBSSAgMHhlYzAzCisjZGVmaW5lIE1BVENIX0NfQU5ESSAweDg4MDEKKyNkZWZpbmUgTUFTS19DX0FOREkgIDB4ZWMwMworI2RlZmluZSBNQVRDSF9DX1NVQiAweDhjMDEKKyNkZWZpbmUgTUFTS19DX1NVQiAgMHhmYzYzCisjZGVmaW5lIE1BVENIX0NfWE9SIDB4OGMyMQorI2RlZmluZSBNQVNLX0NfWE9SICAweGZjNjMKKyNkZWZpbmUgTUFUQ0hfQ19PUiAweDhjNDEKKyNkZWZpbmUgTUFTS19DX09SICAweGZjNjMKKyNkZWZpbmUgTUFUQ0hfQ19BTkQgMHg4YzYxCisjZGVmaW5lIE1BU0tfQ19BTkQgIDB4ZmM2MworI2RlZmluZSBNQVRDSF9DX1NVQlcgMHg5YzAxCisjZGVmaW5lIE1BU0tfQ19TVUJXICAweGZjNjMKKyNkZWZpbmUgTUFUQ0hfQ19BRERXIDB4OWMyMQorI2RlZmluZSBNQVNLX0NfQUREVyAgMHhmYzYzCisjZGVmaW5lIE1BVENIX0NfSiAweGEwMDEKKyNkZWZpbmUgTUFTS19DX0ogIDB4ZTAwMworI2RlZmluZSBNQVRDSF9DX0JFUVogMHhjMDAxCisjZGVmaW5lIE1BU0tfQ19CRVFaICAweGUwMDMKKyNkZWZpbmUgTUFUQ0hfQ19CTkVaIDB4ZTAwMQorI2RlZmluZSBNQVNLX0NfQk5FWiAgMHhlMDAzCisjZGVmaW5lIE1BVENIX0NfU0xMSSAweDIKKyNkZWZpbmUgTUFTS19DX1NMTEkgIDB4ZTAwMworI2RlZmluZSBNQVRDSF9DX0ZMRFNQIDB4MjAwMgorI2RlZmluZSBNQVNLX0NfRkxEU1AgIDB4ZTAwMworI2RlZmluZSBNQVRDSF9DX0xXU1AgMHg0MDAyCisjZGVmaW5lIE1BU0tfQ19MV1NQICAweGUwMDMKKyNkZWZpbmUgTUFUQ0hfQ19GTFdTUCAweDYwMDIKKyNkZWZpbmUgTUFTS19DX0ZMV1NQICAweGUwMDMKKyNkZWZpbmUgTUFUQ0hfQ19NViAweDgwMDIKKyNkZWZpbmUgTUFTS19DX01WICAweGYwMDMKKyNkZWZpbmUgTUFUQ0hfQ19BREQgMHg5MDAyCisjZGVmaW5lIE1BU0tfQ19BREQgIDB4ZjAwMworI2RlZmluZSBNQVRDSF9DX0ZTRFNQIDB4YTAwMgorI2RlZmluZSBNQVNLX0NfRlNEU1AgIDB4ZTAwMworI2RlZmluZSBNQVRDSF9DX1NXU1AgMHhjMDAyCisjZGVmaW5lIE1BU0tfQ19TV1NQICAweGUwMDMKKyNkZWZpbmUgTUFUQ0hfQ19GU1dTUCAweGUwMDIKKyNkZWZpbmUgTUFTS19DX0ZTV1NQICAweGUwMDMKKyNkZWZpbmUgTUFUQ0hfQ1VTVE9NMCAweGIKKyNkZWZpbmUgTUFTS19DVVNUT00wICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfQ1VTVE9NMF9SUzEgMHgyMDBiCisjZGVmaW5lIE1BU0tfQ1VTVE9NMF9SUzEgIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9DVVNUT00wX1JTMV9SUzIgMHgzMDBiCisjZGVmaW5lIE1BU0tfQ1VTVE9NMF9SUzFfUlMyICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfQ1VTVE9NMF9SRCAweDQwMGIKKyNkZWZpbmUgTUFTS19DVVNUT00wX1JEICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfQ1VTVE9NMF9SRF9SUzEgMHg2MDBiCisjZGVmaW5lIE1BU0tfQ1VTVE9NMF9SRF9SUzEgIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9DVVNUT00wX1JEX1JTMV9SUzIgMHg3MDBiCisjZGVmaW5lIE1BU0tfQ1VTVE9NMF9SRF9SUzFfUlMyICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfQ1VTVE9NMSAweDJiCisjZGVmaW5lIE1BU0tfQ1VTVE9NMSAgMHg3MDdmCisjZGVmaW5lIE1BVENIX0NVU1RPTTFfUlMxIDB4MjAyYgorI2RlZmluZSBNQVNLX0NVU1RPTTFfUlMxICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfQ1VTVE9NMV9SUzFfUlMyIDB4MzAyYgorI2RlZmluZSBNQVNLX0NVU1RPTTFfUlMxX1JTMiAgMHg3MDdmCisjZGVmaW5lIE1BVENIX0NVU1RPTTFfUkQgMHg0MDJiCisjZGVmaW5lIE1BU0tfQ1VTVE9NMV9SRCAgMHg3MDdmCisjZGVmaW5lIE1BVENIX0NVU1RPTTFfUkRfUlMxIDB4NjAyYgorI2RlZmluZSBNQVNLX0NVU1RPTTFfUkRfUlMxICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfQ1VTVE9NMV9SRF9SUzFfUlMyIDB4NzAyYgorI2RlZmluZSBNQVNLX0NVU1RPTTFfUkRfUlMxX1JTMiAgMHg3MDdmCisjZGVmaW5lIE1BVENIX0NVU1RPTTIgMHg1YgorI2RlZmluZSBNQVNLX0NVU1RPTTIgIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9DVVNUT00yX1JTMSAweDIwNWIKKyNkZWZpbmUgTUFTS19DVVNUT00yX1JTMSAgMHg3MDdmCisjZGVmaW5lIE1BVENIX0NVU1RPTTJfUlMxX1JTMiAweDMwNWIKKyNkZWZpbmUgTUFTS19DVVNUT00yX1JTMV9SUzIgIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9DVVNUT00yX1JEIDB4NDA1YgorI2RlZmluZSBNQVNLX0NVU1RPTTJfUkQgIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9DVVNUT00yX1JEX1JTMSAweDYwNWIKKyNkZWZpbmUgTUFTS19DVVNUT00yX1JEX1JTMSAgMHg3MDdmCisjZGVmaW5lIE1BVENIX0NVU1RPTTJfUkRfUlMxX1JTMiAweDcwNWIKKyNkZWZpbmUgTUFTS19DVVNUT00yX1JEX1JTMV9SUzIgIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9DVVNUT00zIDB4N2IKKyNkZWZpbmUgTUFTS19DVVNUT00zICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfQ1VTVE9NM19SUzEgMHgyMDdiCisjZGVmaW5lIE1BU0tfQ1VTVE9NM19SUzEgIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9DVVNUT00zX1JTMV9SUzIgMHgzMDdiCisjZGVmaW5lIE1BU0tfQ1VTVE9NM19SUzFfUlMyICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfQ1VTVE9NM19SRCAweDQwN2IKKyNkZWZpbmUgTUFTS19DVVNUT00zX1JEICAweDcwN2YKKyNkZWZpbmUgTUFUQ0hfQ1VTVE9NM19SRF9SUzEgMHg2MDdiCisjZGVmaW5lIE1BU0tfQ1VTVE9NM19SRF9SUzEgIDB4NzA3ZgorI2RlZmluZSBNQVRDSF9DVVNUT00zX1JEX1JTMV9SUzIgMHg3MDdiCisjZGVmaW5lIE1BU0tfQ1VTVE9NM19SRF9SUzFfUlMyICAweDcwN2YKKyNkZWZpbmUgQ1NSX0ZGTEFHUyAweDEKKyNkZWZpbmUgQ1NSX0ZSTSAweDIKKyNkZWZpbmUgQ1NSX0ZDU1IgMHgzCisjZGVmaW5lIENTUl9DWUNMRSAweGMwMAorI2RlZmluZSBDU1JfVElNRSAweGMwMQorI2RlZmluZSBDU1JfSU5TVFJFVCAweGMwMgorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjMgMHhjMDMKKyNkZWZpbmUgQ1NSX0hQTUNPVU5URVI0IDB4YzA0CisjZGVmaW5lIENTUl9IUE1DT1VOVEVSNSAweGMwNQorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjYgMHhjMDYKKyNkZWZpbmUgQ1NSX0hQTUNPVU5URVI3IDB4YzA3CisjZGVmaW5lIENTUl9IUE1DT1VOVEVSOCAweGMwOAorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjkgMHhjMDkKKyNkZWZpbmUgQ1NSX0hQTUNPVU5URVIxMCAweGMwYQorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjExIDB4YzBiCisjZGVmaW5lIENTUl9IUE1DT1VOVEVSMTIgMHhjMGMKKyNkZWZpbmUgQ1NSX0hQTUNPVU5URVIxMyAweGMwZAorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjE0IDB4YzBlCisjZGVmaW5lIENTUl9IUE1DT1VOVEVSMTUgMHhjMGYKKyNkZWZpbmUgQ1NSX0hQTUNPVU5URVIxNiAweGMxMAorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjE3IDB4YzExCisjZGVmaW5lIENTUl9IUE1DT1VOVEVSMTggMHhjMTIKKyNkZWZpbmUgQ1NSX0hQTUNPVU5URVIxOSAweGMxMworI2RlZmluZSBDU1JfSFBNQ09VTlRFUjIwIDB4YzE0CisjZGVmaW5lIENTUl9IUE1DT1VOVEVSMjEgMHhjMTUKKyNkZWZpbmUgQ1NSX0hQTUNPVU5URVIyMiAweGMxNgorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjIzIDB4YzE3CisjZGVmaW5lIENTUl9IUE1DT1VOVEVSMjQgMHhjMTgKKyNkZWZpbmUgQ1NSX0hQTUNPVU5URVIyNSAweGMxOQorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjI2IDB4YzFhCisjZGVmaW5lIENTUl9IUE1DT1VOVEVSMjcgMHhjMWIKKyNkZWZpbmUgQ1NSX0hQTUNPVU5URVIyOCAweGMxYworI2RlZmluZSBDU1JfSFBNQ09VTlRFUjI5IDB4YzFkCisjZGVmaW5lIENTUl9IUE1DT1VOVEVSMzAgMHhjMWUKKyNkZWZpbmUgQ1NSX0hQTUNPVU5URVIzMSAweGMxZgorI2RlZmluZSBDU1JfU1NUQVRVUyAweDEwMAorI2RlZmluZSBDU1JfU0lFIDB4MTA0CisjZGVmaW5lIENTUl9TVFZFQyAweDEwNQorI2RlZmluZSBDU1JfU0NPVU5URVJFTiAweDEwNgorI2RlZmluZSBDU1JfU1NDUkFUQ0ggMHgxNDAKKyNkZWZpbmUgQ1NSX1NFUEMgMHgxNDEKKyNkZWZpbmUgQ1NSX1NDQVVTRSAweDE0MgorI2RlZmluZSBDU1JfU0JBREFERFIgMHgxNDMKKyNkZWZpbmUgQ1NSX1NJUCAweDE0NAorI2RlZmluZSBDU1JfU1BUQlIgMHgxODAKKyNkZWZpbmUgQ1NSX01TVEFUVVMgMHgzMDAKKyNkZWZpbmUgQ1NSX01JU0EgMHgzMDEKKyNkZWZpbmUgQ1NSX01FREVMRUcgMHgzMDIKKyNkZWZpbmUgQ1NSX01JREVMRUcgMHgzMDMKKyNkZWZpbmUgQ1NSX01JRSAweDMwNAorI2RlZmluZSBDU1JfTVRWRUMgMHgzMDUKKyNkZWZpbmUgQ1NSX01DT1VOVEVSRU4gMHgzMDYKKyNkZWZpbmUgQ1NSX01TQ1JBVENIIDB4MzQwCisjZGVmaW5lIENTUl9NRVBDIDB4MzQxCisjZGVmaW5lIENTUl9NQ0FVU0UgMHgzNDIKKyNkZWZpbmUgQ1NSX01CQURBRERSIDB4MzQzCisjZGVmaW5lIENTUl9NSVAgMHgzNDQKKyNkZWZpbmUgQ1NSX1BNUENGRzAgMHgzYTAKKyNkZWZpbmUgQ1NSX1BNUENGRzEgMHgzYTEKKyNkZWZpbmUgQ1NSX1BNUENGRzIgMHgzYTIKKyNkZWZpbmUgQ1NSX1BNUENGRzMgMHgzYTMKKyNkZWZpbmUgQ1NSX1BNUEFERFIwIDB4M2IwCisjZGVmaW5lIENTUl9QTVBBRERSMSAweDNiMQorI2RlZmluZSBDU1JfUE1QQUREUjIgMHgzYjIKKyNkZWZpbmUgQ1NSX1BNUEFERFIzIDB4M2IzCisjZGVmaW5lIENTUl9QTVBBRERSNCAweDNiNAorI2RlZmluZSBDU1JfUE1QQUREUjUgMHgzYjUKKyNkZWZpbmUgQ1NSX1BNUEFERFI2IDB4M2I2CisjZGVmaW5lIENTUl9QTVBBRERSNyAweDNiNworI2RlZmluZSBDU1JfUE1QQUREUjggMHgzYjgKKyNkZWZpbmUgQ1NSX1BNUEFERFI5IDB4M2I5CisjZGVmaW5lIENTUl9QTVBBRERSMTAgMHgzYmEKKyNkZWZpbmUgQ1NSX1BNUEFERFIxMSAweDNiYgorI2RlZmluZSBDU1JfUE1QQUREUjEyIDB4M2JjCisjZGVmaW5lIENTUl9QTVBBRERSMTMgMHgzYmQKKyNkZWZpbmUgQ1NSX1BNUEFERFIxNCAweDNiZQorI2RlZmluZSBDU1JfUE1QQUREUjE1IDB4M2JmCisjZGVmaW5lIENTUl9UU0VMRUNUIDB4N2EwCisjZGVmaW5lIENTUl9UREFUQTEgMHg3YTEKKyNkZWZpbmUgQ1NSX1REQVRBMiAweDdhMgorI2RlZmluZSBDU1JfVERBVEEzIDB4N2EzCisjZGVmaW5lIENTUl9EQ1NSIDB4N2IwCisjZGVmaW5lIENTUl9EUEMgMHg3YjEKKyNkZWZpbmUgQ1NSX0RTQ1JBVENIIDB4N2IyCisjZGVmaW5lIENTUl9NQ1lDTEUgMHhiMDAKKyNkZWZpbmUgQ1NSX01JTlNUUkVUIDB4YjAyCisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjMgMHhiMDMKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSNCAweGIwNAorI2RlZmluZSBDU1JfTUhQTUNPVU5URVI1IDB4YjA1CisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjYgMHhiMDYKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSNyAweGIwNworI2RlZmluZSBDU1JfTUhQTUNPVU5URVI4IDB4YjA4CisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjkgMHhiMDkKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMTAgMHhiMGEKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMTEgMHhiMGIKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMTIgMHhiMGMKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMTMgMHhiMGQKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMTQgMHhiMGUKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMTUgMHhiMGYKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMTYgMHhiMTAKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMTcgMHhiMTEKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMTggMHhiMTIKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMTkgMHhiMTMKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMjAgMHhiMTQKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMjEgMHhiMTUKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMjIgMHhiMTYKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMjMgMHhiMTcKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMjQgMHhiMTgKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMjUgMHhiMTkKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMjYgMHhiMWEKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMjcgMHhiMWIKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMjggMHhiMWMKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMjkgMHhiMWQKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMzAgMHhiMWUKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMzEgMHhiMWYKKyNkZWZpbmUgQ1NSX01IUE1FVkVOVDMgMHgzMjMKKyNkZWZpbmUgQ1NSX01IUE1FVkVOVDQgMHgzMjQKKyNkZWZpbmUgQ1NSX01IUE1FVkVOVDUgMHgzMjUKKyNkZWZpbmUgQ1NSX01IUE1FVkVOVDYgMHgzMjYKKyNkZWZpbmUgQ1NSX01IUE1FVkVOVDcgMHgzMjcKKyNkZWZpbmUgQ1NSX01IUE1FVkVOVDggMHgzMjgKKyNkZWZpbmUgQ1NSX01IUE1FVkVOVDkgMHgzMjkKKyNkZWZpbmUgQ1NSX01IUE1FVkVOVDEwIDB4MzJhCisjZGVmaW5lIENTUl9NSFBNRVZFTlQxMSAweDMyYgorI2RlZmluZSBDU1JfTUhQTUVWRU5UMTIgMHgzMmMKKyNkZWZpbmUgQ1NSX01IUE1FVkVOVDEzIDB4MzJkCisjZGVmaW5lIENTUl9NSFBNRVZFTlQxNCAweDMyZQorI2RlZmluZSBDU1JfTUhQTUVWRU5UMTUgMHgzMmYKKyNkZWZpbmUgQ1NSX01IUE1FVkVOVDE2IDB4MzMwCisjZGVmaW5lIENTUl9NSFBNRVZFTlQxNyAweDMzMQorI2RlZmluZSBDU1JfTUhQTUVWRU5UMTggMHgzMzIKKyNkZWZpbmUgQ1NSX01IUE1FVkVOVDE5IDB4MzMzCisjZGVmaW5lIENTUl9NSFBNRVZFTlQyMCAweDMzNAorI2RlZmluZSBDU1JfTUhQTUVWRU5UMjEgMHgzMzUKKyNkZWZpbmUgQ1NSX01IUE1FVkVOVDIyIDB4MzM2CisjZGVmaW5lIENTUl9NSFBNRVZFTlQyMyAweDMzNworI2RlZmluZSBDU1JfTUhQTUVWRU5UMjQgMHgzMzgKKyNkZWZpbmUgQ1NSX01IUE1FVkVOVDI1IDB4MzM5CisjZGVmaW5lIENTUl9NSFBNRVZFTlQyNiAweDMzYQorI2RlZmluZSBDU1JfTUhQTUVWRU5UMjcgMHgzM2IKKyNkZWZpbmUgQ1NSX01IUE1FVkVOVDI4IDB4MzNjCisjZGVmaW5lIENTUl9NSFBNRVZFTlQyOSAweDMzZAorI2RlZmluZSBDU1JfTUhQTUVWRU5UMzAgMHgzM2UKKyNkZWZpbmUgQ1NSX01IUE1FVkVOVDMxIDB4MzNmCisjZGVmaW5lIENTUl9NVkVORE9SSUQgMHhmMTEKKyNkZWZpbmUgQ1NSX01BUkNISUQgMHhmMTIKKyNkZWZpbmUgQ1NSX01JTVBJRCAweGYxMworI2RlZmluZSBDU1JfTUhBUlRJRCAweGYxNAorI2RlZmluZSBDU1JfQ1lDTEVIIDB4YzgwCisjZGVmaW5lIENTUl9USU1FSCAweGM4MQorI2RlZmluZSBDU1JfSU5TVFJFVEggMHhjODIKKyNkZWZpbmUgQ1NSX0hQTUNPVU5URVIzSCAweGM4MworI2RlZmluZSBDU1JfSFBNQ09VTlRFUjRIIDB4Yzg0CisjZGVmaW5lIENTUl9IUE1DT1VOVEVSNUggMHhjODUKKyNkZWZpbmUgQ1NSX0hQTUNPVU5URVI2SCAweGM4NgorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjdIIDB4Yzg3CisjZGVmaW5lIENTUl9IUE1DT1VOVEVSOEggMHhjODgKKyNkZWZpbmUgQ1NSX0hQTUNPVU5URVI5SCAweGM4OQorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjEwSCAweGM4YQorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjExSCAweGM4YgorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjEySCAweGM4YworI2RlZmluZSBDU1JfSFBNQ09VTlRFUjEzSCAweGM4ZAorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjE0SCAweGM4ZQorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjE1SCAweGM4ZgorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjE2SCAweGM5MAorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjE3SCAweGM5MQorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjE4SCAweGM5MgorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjE5SCAweGM5MworI2RlZmluZSBDU1JfSFBNQ09VTlRFUjIwSCAweGM5NAorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjIxSCAweGM5NQorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjIySCAweGM5NgorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjIzSCAweGM5NworI2RlZmluZSBDU1JfSFBNQ09VTlRFUjI0SCAweGM5OAorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjI1SCAweGM5OQorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjI2SCAweGM5YQorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjI3SCAweGM5YgorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjI4SCAweGM5YworI2RlZmluZSBDU1JfSFBNQ09VTlRFUjI5SCAweGM5ZAorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjMwSCAweGM5ZQorI2RlZmluZSBDU1JfSFBNQ09VTlRFUjMxSCAweGM5ZgorI2RlZmluZSBDU1JfTUNZQ0xFSCAweGI4MAorI2RlZmluZSBDU1JfTUlOU1RSRVRIIDB4YjgyCisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjNIIDB4YjgzCisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjRIIDB4Yjg0CisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjVIIDB4Yjg1CisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjZIIDB4Yjg2CisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjdIIDB4Yjg3CisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjhIIDB4Yjg4CisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjlIIDB4Yjg5CisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjEwSCAweGI4YQorI2RlZmluZSBDU1JfTUhQTUNPVU5URVIxMUggMHhiOGIKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMTJIIDB4YjhjCisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjEzSCAweGI4ZAorI2RlZmluZSBDU1JfTUhQTUNPVU5URVIxNEggMHhiOGUKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMTVIIDB4YjhmCisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjE2SCAweGI5MAorI2RlZmluZSBDU1JfTUhQTUNPVU5URVIxN0ggMHhiOTEKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMThIIDB4YjkyCisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjE5SCAweGI5MworI2RlZmluZSBDU1JfTUhQTUNPVU5URVIyMEggMHhiOTQKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMjFIIDB4Yjk1CisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjIySCAweGI5NgorI2RlZmluZSBDU1JfTUhQTUNPVU5URVIyM0ggMHhiOTcKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMjRIIDB4Yjk4CisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjI1SCAweGI5OQorI2RlZmluZSBDU1JfTUhQTUNPVU5URVIyNkggMHhiOWEKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMjdIIDB4YjliCisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjI4SCAweGI5YworI2RlZmluZSBDU1JfTUhQTUNPVU5URVIyOUggMHhiOWQKKyNkZWZpbmUgQ1NSX01IUE1DT1VOVEVSMzBIIDB4YjllCisjZGVmaW5lIENTUl9NSFBNQ09VTlRFUjMxSCAweGI5ZgorI2RlZmluZSBDQVVTRV9NSVNBTElHTkVEX0ZFVENIIDB4MAorI2RlZmluZSBDQVVTRV9GRVRDSF9BQ0NFU1MgMHgxCisjZGVmaW5lIENBVVNFX0lMTEVHQUxfSU5TVFJVQ1RJT04gMHgyCisjZGVmaW5lIENBVVNFX0JSRUFLUE9JTlQgMHgzCisjZGVmaW5lIENBVVNFX01JU0FMSUdORURfTE9BRCAweDQKKyNkZWZpbmUgQ0FVU0VfTE9BRF9BQ0NFU1MgMHg1CisjZGVmaW5lIENBVVNFX01JU0FMSUdORURfU1RPUkUgMHg2CisjZGVmaW5lIENBVVNFX1NUT1JFX0FDQ0VTUyAweDcKKyNkZWZpbmUgQ0FVU0VfVVNFUl9FQ0FMTCAweDgKKyNkZWZpbmUgQ0FVU0VfU1VQRVJWSVNPUl9FQ0FMTCAweDkKKyNkZWZpbmUgQ0FVU0VfSFlQRVJWSVNPUl9FQ0FMTCAweGEKKyNkZWZpbmUgQ0FVU0VfTUFDSElORV9FQ0FMTCAweGIKKyNkZWZpbmUgQ0FVU0VfRkVUQ0hfUEFHRV9GQVVMVCAweGMKKyNkZWZpbmUgQ0FVU0VfTE9BRF9QQUdFX0ZBVUxUIDB4ZAorI2RlZmluZSBDQVVTRV9TVE9SRV9QQUdFX0ZBVUxUIDB4ZgorI2VuZGlmCisjaWZkZWYgREVDTEFSRV9JTlNOCitERUNMQVJFX0lOU04oYmVxLCBNQVRDSF9CRVEsIE1BU0tfQkVRKQorREVDTEFSRV9JTlNOKGJuZSwgTUFUQ0hfQk5FLCBNQVNLX0JORSkKK0RFQ0xBUkVfSU5TTihibHQsIE1BVENIX0JMVCwgTUFTS19CTFQpCitERUNMQVJFX0lOU04oYmdlLCBNQVRDSF9CR0UsIE1BU0tfQkdFKQorREVDTEFSRV9JTlNOKGJsdHUsIE1BVENIX0JMVFUsIE1BU0tfQkxUVSkKK0RFQ0xBUkVfSU5TTihiZ2V1LCBNQVRDSF9CR0VVLCBNQVNLX0JHRVUpCitERUNMQVJFX0lOU04oamFsciwgTUFUQ0hfSkFMUiwgTUFTS19KQUxSKQorREVDTEFSRV9JTlNOKGphbCwgTUFUQ0hfSkFMLCBNQVNLX0pBTCkKK0RFQ0xBUkVfSU5TTihsdWksIE1BVENIX0xVSSwgTUFTS19MVUkpCitERUNMQVJFX0lOU04oYXVpcGMsIE1BVENIX0FVSVBDLCBNQVNLX0FVSVBDKQorREVDTEFSRV9JTlNOKGFkZGksIE1BVENIX0FEREksIE1BU0tfQURESSkKK0RFQ0xBUkVfSU5TTihzbGxpLCBNQVRDSF9TTExJLCBNQVNLX1NMTEkpCitERUNMQVJFX0lOU04oc2x0aSwgTUFUQ0hfU0xUSSwgTUFTS19TTFRJKQorREVDTEFSRV9JTlNOKHNsdGl1LCBNQVRDSF9TTFRJVSwgTUFTS19TTFRJVSkKK0RFQ0xBUkVfSU5TTih4b3JpLCBNQVRDSF9YT1JJLCBNQVNLX1hPUkkpCitERUNMQVJFX0lOU04oc3JsaSwgTUFUQ0hfU1JMSSwgTUFTS19TUkxJKQorREVDTEFSRV9JTlNOKHNyYWksIE1BVENIX1NSQUksIE1BU0tfU1JBSSkKK0RFQ0xBUkVfSU5TTihvcmksIE1BVENIX09SSSwgTUFTS19PUkkpCitERUNMQVJFX0lOU04oYW5kaSwgTUFUQ0hfQU5ESSwgTUFTS19BTkRJKQorREVDTEFSRV9JTlNOKGFkZCwgTUFUQ0hfQURELCBNQVNLX0FERCkKK0RFQ0xBUkVfSU5TTihzdWIsIE1BVENIX1NVQiwgTUFTS19TVUIpCitERUNMQVJFX0lOU04oc2xsLCBNQVRDSF9TTEwsIE1BU0tfU0xMKQorREVDTEFSRV9JTlNOKHNsdCwgTUFUQ0hfU0xULCBNQVNLX1NMVCkKK0RFQ0xBUkVfSU5TTihzbHR1LCBNQVRDSF9TTFRVLCBNQVNLX1NMVFUpCitERUNMQVJFX0lOU04oeG9yLCBNQVRDSF9YT1IsIE1BU0tfWE9SKQorREVDTEFSRV9JTlNOKHNybCwgTUFUQ0hfU1JMLCBNQVNLX1NSTCkKK0RFQ0xBUkVfSU5TTihzcmEsIE1BVENIX1NSQSwgTUFTS19TUkEpCitERUNMQVJFX0lOU04ob3IsIE1BVENIX09SLCBNQVNLX09SKQorREVDTEFSRV9JTlNOKGFuZCwgTUFUQ0hfQU5ELCBNQVNLX0FORCkKK0RFQ0xBUkVfSU5TTihhZGRpdywgTUFUQ0hfQURESVcsIE1BU0tfQURESVcpCitERUNMQVJFX0lOU04oc2xsaXcsIE1BVENIX1NMTElXLCBNQVNLX1NMTElXKQorREVDTEFSRV9JTlNOKHNybGl3LCBNQVRDSF9TUkxJVywgTUFTS19TUkxJVykKK0RFQ0xBUkVfSU5TTihzcmFpdywgTUFUQ0hfU1JBSVcsIE1BU0tfU1JBSVcpCitERUNMQVJFX0lOU04oYWRkdywgTUFUQ0hfQUREVywgTUFTS19BRERXKQorREVDTEFSRV9JTlNOKHN1YncsIE1BVENIX1NVQlcsIE1BU0tfU1VCVykKK0RFQ0xBUkVfSU5TTihzbGx3LCBNQVRDSF9TTExXLCBNQVNLX1NMTFcpCitERUNMQVJFX0lOU04oc3JsdywgTUFUQ0hfU1JMVywgTUFTS19TUkxXKQorREVDTEFSRV9JTlNOKHNyYXcsIE1BVENIX1NSQVcsIE1BU0tfU1JBVykKK0RFQ0xBUkVfSU5TTihsYiwgTUFUQ0hfTEIsIE1BU0tfTEIpCitERUNMQVJFX0lOU04obGgsIE1BVENIX0xILCBNQVNLX0xIKQorREVDTEFSRV9JTlNOKGx3LCBNQVRDSF9MVywgTUFTS19MVykKK0RFQ0xBUkVfSU5TTihsZCwgTUFUQ0hfTEQsIE1BU0tfTEQpCitERUNMQVJFX0lOU04obGJ1LCBNQVRDSF9MQlUsIE1BU0tfTEJVKQorREVDTEFSRV9JTlNOKGxodSwgTUFUQ0hfTEhVLCBNQVNLX0xIVSkKK0RFQ0xBUkVfSU5TTihsd3UsIE1BVENIX0xXVSwgTUFTS19MV1UpCitERUNMQVJFX0lOU04oc2IsIE1BVENIX1NCLCBNQVNLX1NCKQorREVDTEFSRV9JTlNOKHNoLCBNQVRDSF9TSCwgTUFTS19TSCkKK0RFQ0xBUkVfSU5TTihzdywgTUFUQ0hfU1csIE1BU0tfU1cpCitERUNMQVJFX0lOU04oc2QsIE1BVENIX1NELCBNQVNLX1NEKQorREVDTEFSRV9JTlNOKGZlbmNlLCBNQVRDSF9GRU5DRSwgTUFTS19GRU5DRSkKK0RFQ0xBUkVfSU5TTihmZW5jZV9pLCBNQVRDSF9GRU5DRV9JLCBNQVNLX0ZFTkNFX0kpCitERUNMQVJFX0lOU04obXVsLCBNQVRDSF9NVUwsIE1BU0tfTVVMKQorREVDTEFSRV9JTlNOKG11bGgsIE1BVENIX01VTEgsIE1BU0tfTVVMSCkKK0RFQ0xBUkVfSU5TTihtdWxoc3UsIE1BVENIX01VTEhTVSwgTUFTS19NVUxIU1UpCitERUNMQVJFX0lOU04obXVsaHUsIE1BVENIX01VTEhVLCBNQVNLX01VTEhVKQorREVDTEFSRV9JTlNOKGRpdiwgTUFUQ0hfRElWLCBNQVNLX0RJVikKK0RFQ0xBUkVfSU5TTihkaXZ1LCBNQVRDSF9ESVZVLCBNQVNLX0RJVlUpCitERUNMQVJFX0lOU04ocmVtLCBNQVRDSF9SRU0sIE1BU0tfUkVNKQorREVDTEFSRV9JTlNOKHJlbXUsIE1BVENIX1JFTVUsIE1BU0tfUkVNVSkKK0RFQ0xBUkVfSU5TTihtdWx3LCBNQVRDSF9NVUxXLCBNQVNLX01VTFcpCitERUNMQVJFX0lOU04oZGl2dywgTUFUQ0hfRElWVywgTUFTS19ESVZXKQorREVDTEFSRV9JTlNOKGRpdnV3LCBNQVRDSF9ESVZVVywgTUFTS19ESVZVVykKK0RFQ0xBUkVfSU5TTihyZW13LCBNQVRDSF9SRU1XLCBNQVNLX1JFTVcpCitERUNMQVJFX0lOU04ocmVtdXcsIE1BVENIX1JFTVVXLCBNQVNLX1JFTVVXKQorREVDTEFSRV9JTlNOKGFtb2FkZF93LCBNQVRDSF9BTU9BRERfVywgTUFTS19BTU9BRERfVykKK0RFQ0xBUkVfSU5TTihhbW94b3JfdywgTUFUQ0hfQU1PWE9SX1csIE1BU0tfQU1PWE9SX1cpCitERUNMQVJFX0lOU04oYW1vb3JfdywgTUFUQ0hfQU1PT1JfVywgTUFTS19BTU9PUl9XKQorREVDTEFSRV9JTlNOKGFtb2FuZF93LCBNQVRDSF9BTU9BTkRfVywgTUFTS19BTU9BTkRfVykKK0RFQ0xBUkVfSU5TTihhbW9taW5fdywgTUFUQ0hfQU1PTUlOX1csIE1BU0tfQU1PTUlOX1cpCitERUNMQVJFX0lOU04oYW1vbWF4X3csIE1BVENIX0FNT01BWF9XLCBNQVNLX0FNT01BWF9XKQorREVDTEFSRV9JTlNOKGFtb21pbnVfdywgTUFUQ0hfQU1PTUlOVV9XLCBNQVNLX0FNT01JTlVfVykKK0RFQ0xBUkVfSU5TTihhbW9tYXh1X3csIE1BVENIX0FNT01BWFVfVywgTUFTS19BTU9NQVhVX1cpCitERUNMQVJFX0lOU04oYW1vc3dhcF93LCBNQVRDSF9BTU9TV0FQX1csIE1BU0tfQU1PU1dBUF9XKQorREVDTEFSRV9JTlNOKGxyX3csIE1BVENIX0xSX1csIE1BU0tfTFJfVykKK0RFQ0xBUkVfSU5TTihzY193LCBNQVRDSF9TQ19XLCBNQVNLX1NDX1cpCitERUNMQVJFX0lOU04oYW1vYWRkX2QsIE1BVENIX0FNT0FERF9ELCBNQVNLX0FNT0FERF9EKQorREVDTEFSRV9JTlNOKGFtb3hvcl9kLCBNQVRDSF9BTU9YT1JfRCwgTUFTS19BTU9YT1JfRCkKK0RFQ0xBUkVfSU5TTihhbW9vcl9kLCBNQVRDSF9BTU9PUl9ELCBNQVNLX0FNT09SX0QpCitERUNMQVJFX0lOU04oYW1vYW5kX2QsIE1BVENIX0FNT0FORF9ELCBNQVNLX0FNT0FORF9EKQorREVDTEFSRV9JTlNOKGFtb21pbl9kLCBNQVRDSF9BTU9NSU5fRCwgTUFTS19BTU9NSU5fRCkKK0RFQ0xBUkVfSU5TTihhbW9tYXhfZCwgTUFUQ0hfQU1PTUFYX0QsIE1BU0tfQU1PTUFYX0QpCitERUNMQVJFX0lOU04oYW1vbWludV9kLCBNQVRDSF9BTU9NSU5VX0QsIE1BU0tfQU1PTUlOVV9EKQorREVDTEFSRV9JTlNOKGFtb21heHVfZCwgTUFUQ0hfQU1PTUFYVV9ELCBNQVNLX0FNT01BWFVfRCkKK0RFQ0xBUkVfSU5TTihhbW9zd2FwX2QsIE1BVENIX0FNT1NXQVBfRCwgTUFTS19BTU9TV0FQX0QpCitERUNMQVJFX0lOU04obHJfZCwgTUFUQ0hfTFJfRCwgTUFTS19MUl9EKQorREVDTEFSRV9JTlNOKHNjX2QsIE1BVENIX1NDX0QsIE1BU0tfU0NfRCkKK0RFQ0xBUkVfSU5TTihlY2FsbCwgTUFUQ0hfRUNBTEwsIE1BU0tfRUNBTEwpCitERUNMQVJFX0lOU04oZWJyZWFrLCBNQVRDSF9FQlJFQUssIE1BU0tfRUJSRUFLKQorREVDTEFSRV9JTlNOKHVyZXQsIE1BVENIX1VSRVQsIE1BU0tfVVJFVCkKK0RFQ0xBUkVfSU5TTihzcmV0LCBNQVRDSF9TUkVULCBNQVNLX1NSRVQpCitERUNMQVJFX0lOU04obXJldCwgTUFUQ0hfTVJFVCwgTUFTS19NUkVUKQorREVDTEFSRV9JTlNOKGRyZXQsIE1BVENIX0RSRVQsIE1BU0tfRFJFVCkKK0RFQ0xBUkVfSU5TTihzZmVuY2Vfdm1hLCBNQVRDSF9TRkVOQ0VfVk1BLCBNQVNLX1NGRU5DRV9WTUEpCitERUNMQVJFX0lOU04od2ZpLCBNQVRDSF9XRkksIE1BU0tfV0ZJKQorREVDTEFSRV9JTlNOKGNzcnJ3LCBNQVRDSF9DU1JSVywgTUFTS19DU1JSVykKK0RFQ0xBUkVfSU5TTihjc3JycywgTUFUQ0hfQ1NSUlMsIE1BU0tfQ1NSUlMpCitERUNMQVJFX0lOU04oY3NycmMsIE1BVENIX0NTUlJDLCBNQVNLX0NTUlJDKQorREVDTEFSRV9JTlNOKGNzcnJ3aSwgTUFUQ0hfQ1NSUldJLCBNQVNLX0NTUlJXSSkKK0RFQ0xBUkVfSU5TTihjc3Jyc2ksIE1BVENIX0NTUlJTSSwgTUFTS19DU1JSU0kpCitERUNMQVJFX0lOU04oY3NycmNpLCBNQVRDSF9DU1JSQ0ksIE1BU0tfQ1NSUkNJKQorREVDTEFSRV9JTlNOKGZhZGRfcywgTUFUQ0hfRkFERF9TLCBNQVNLX0ZBRERfUykKK0RFQ0xBUkVfSU5TTihmc3ViX3MsIE1BVENIX0ZTVUJfUywgTUFTS19GU1VCX1MpCitERUNMQVJFX0lOU04oZm11bF9zLCBNQVRDSF9GTVVMX1MsIE1BU0tfRk1VTF9TKQorREVDTEFSRV9JTlNOKGZkaXZfcywgTUFUQ0hfRkRJVl9TLCBNQVNLX0ZESVZfUykKK0RFQ0xBUkVfSU5TTihmc2dual9zLCBNQVRDSF9GU0dOSl9TLCBNQVNLX0ZTR05KX1MpCitERUNMQVJFX0lOU04oZnNnbmpuX3MsIE1BVENIX0ZTR05KTl9TLCBNQVNLX0ZTR05KTl9TKQorREVDTEFSRV9JTlNOKGZzZ25qeF9zLCBNQVRDSF9GU0dOSlhfUywgTUFTS19GU0dOSlhfUykKK0RFQ0xBUkVfSU5TTihmbWluX3MsIE1BVENIX0ZNSU5fUywgTUFTS19GTUlOX1MpCitERUNMQVJFX0lOU04oZm1heF9zLCBNQVRDSF9GTUFYX1MsIE1BU0tfRk1BWF9TKQorREVDTEFSRV9JTlNOKGZzcXJ0X3MsIE1BVENIX0ZTUVJUX1MsIE1BU0tfRlNRUlRfUykKK0RFQ0xBUkVfSU5TTihmYWRkX2QsIE1BVENIX0ZBRERfRCwgTUFTS19GQUREX0QpCitERUNMQVJFX0lOU04oZnN1Yl9kLCBNQVRDSF9GU1VCX0QsIE1BU0tfRlNVQl9EKQorREVDTEFSRV9JTlNOKGZtdWxfZCwgTUFUQ0hfRk1VTF9ELCBNQVNLX0ZNVUxfRCkKK0RFQ0xBUkVfSU5TTihmZGl2X2QsIE1BVENIX0ZESVZfRCwgTUFTS19GRElWX0QpCitERUNMQVJFX0lOU04oZnNnbmpfZCwgTUFUQ0hfRlNHTkpfRCwgTUFTS19GU0dOSl9EKQorREVDTEFSRV9JTlNOKGZzZ25qbl9kLCBNQVRDSF9GU0dOSk5fRCwgTUFTS19GU0dOSk5fRCkKK0RFQ0xBUkVfSU5TTihmc2duanhfZCwgTUFUQ0hfRlNHTkpYX0QsIE1BU0tfRlNHTkpYX0QpCitERUNMQVJFX0lOU04oZm1pbl9kLCBNQVRDSF9GTUlOX0QsIE1BU0tfRk1JTl9EKQorREVDTEFSRV9JTlNOKGZtYXhfZCwgTUFUQ0hfRk1BWF9ELCBNQVNLX0ZNQVhfRCkKK0RFQ0xBUkVfSU5TTihmY3Z0X3NfZCwgTUFUQ0hfRkNWVF9TX0QsIE1BU0tfRkNWVF9TX0QpCitERUNMQVJFX0lOU04oZmN2dF9kX3MsIE1BVENIX0ZDVlRfRF9TLCBNQVNLX0ZDVlRfRF9TKQorREVDTEFSRV9JTlNOKGZzcXJ0X2QsIE1BVENIX0ZTUVJUX0QsIE1BU0tfRlNRUlRfRCkKK0RFQ0xBUkVfSU5TTihmYWRkX3EsIE1BVENIX0ZBRERfUSwgTUFTS19GQUREX1EpCitERUNMQVJFX0lOU04oZnN1Yl9xLCBNQVRDSF9GU1VCX1EsIE1BU0tfRlNVQl9RKQorREVDTEFSRV9JTlNOKGZtdWxfcSwgTUFUQ0hfRk1VTF9RLCBNQVNLX0ZNVUxfUSkKK0RFQ0xBUkVfSU5TTihmZGl2X3EsIE1BVENIX0ZESVZfUSwgTUFTS19GRElWX1EpCitERUNMQVJFX0lOU04oZnNnbmpfcSwgTUFUQ0hfRlNHTkpfUSwgTUFTS19GU0dOSl9RKQorREVDTEFSRV9JTlNOKGZzZ25qbl9xLCBNQVRDSF9GU0dOSk5fUSwgTUFTS19GU0dOSk5fUSkKK0RFQ0xBUkVfSU5TTihmc2duanhfcSwgTUFUQ0hfRlNHTkpYX1EsIE1BU0tfRlNHTkpYX1EpCitERUNMQVJFX0lOU04oZm1pbl9xLCBNQVRDSF9GTUlOX1EsIE1BU0tfRk1JTl9RKQorREVDTEFSRV9JTlNOKGZtYXhfcSwgTUFUQ0hfRk1BWF9RLCBNQVNLX0ZNQVhfUSkKK0RFQ0xBUkVfSU5TTihmY3Z0X3NfcSwgTUFUQ0hfRkNWVF9TX1EsIE1BU0tfRkNWVF9TX1EpCitERUNMQVJFX0lOU04oZmN2dF9xX3MsIE1BVENIX0ZDVlRfUV9TLCBNQVNLX0ZDVlRfUV9TKQorREVDTEFSRV9JTlNOKGZjdnRfZF9xLCBNQVRDSF9GQ1ZUX0RfUSwgTUFTS19GQ1ZUX0RfUSkKK0RFQ0xBUkVfSU5TTihmY3Z0X3FfZCwgTUFUQ0hfRkNWVF9RX0QsIE1BU0tfRkNWVF9RX0QpCitERUNMQVJFX0lOU04oZnNxcnRfcSwgTUFUQ0hfRlNRUlRfUSwgTUFTS19GU1FSVF9RKQorREVDTEFSRV9JTlNOKGZsZV9zLCBNQVRDSF9GTEVfUywgTUFTS19GTEVfUykKK0RFQ0xBUkVfSU5TTihmbHRfcywgTUFUQ0hfRkxUX1MsIE1BU0tfRkxUX1MpCitERUNMQVJFX0lOU04oZmVxX3MsIE1BVENIX0ZFUV9TLCBNQVNLX0ZFUV9TKQorREVDTEFSRV9JTlNOKGZsZV9kLCBNQVRDSF9GTEVfRCwgTUFTS19GTEVfRCkKK0RFQ0xBUkVfSU5TTihmbHRfZCwgTUFUQ0hfRkxUX0QsIE1BU0tfRkxUX0QpCitERUNMQVJFX0lOU04oZmVxX2QsIE1BVENIX0ZFUV9ELCBNQVNLX0ZFUV9EKQorREVDTEFSRV9JTlNOKGZsZV9xLCBNQVRDSF9GTEVfUSwgTUFTS19GTEVfUSkKK0RFQ0xBUkVfSU5TTihmbHRfcSwgTUFUQ0hfRkxUX1EsIE1BU0tfRkxUX1EpCitERUNMQVJFX0lOU04oZmVxX3EsIE1BVENIX0ZFUV9RLCBNQVNLX0ZFUV9RKQorREVDTEFSRV9JTlNOKGZjdnRfd19zLCBNQVRDSF9GQ1ZUX1dfUywgTUFTS19GQ1ZUX1dfUykKK0RFQ0xBUkVfSU5TTihmY3Z0X3d1X3MsIE1BVENIX0ZDVlRfV1VfUywgTUFTS19GQ1ZUX1dVX1MpCitERUNMQVJFX0lOU04oZmN2dF9sX3MsIE1BVENIX0ZDVlRfTF9TLCBNQVNLX0ZDVlRfTF9TKQorREVDTEFSRV9JTlNOKGZjdnRfbHVfcywgTUFUQ0hfRkNWVF9MVV9TLCBNQVNLX0ZDVlRfTFVfUykKK0RFQ0xBUkVfSU5TTihmbXZfeF93LCBNQVRDSF9GTVZfWF9XLCBNQVNLX0ZNVl9YX1cpCitERUNMQVJFX0lOU04oZmNsYXNzX3MsIE1BVENIX0ZDTEFTU19TLCBNQVNLX0ZDTEFTU19TKQorREVDTEFSRV9JTlNOKGZjdnRfd19kLCBNQVRDSF9GQ1ZUX1dfRCwgTUFTS19GQ1ZUX1dfRCkKK0RFQ0xBUkVfSU5TTihmY3Z0X3d1X2QsIE1BVENIX0ZDVlRfV1VfRCwgTUFTS19GQ1ZUX1dVX0QpCitERUNMQVJFX0lOU04oZmN2dF9sX2QsIE1BVENIX0ZDVlRfTF9ELCBNQVNLX0ZDVlRfTF9EKQorREVDTEFSRV9JTlNOKGZjdnRfbHVfZCwgTUFUQ0hfRkNWVF9MVV9ELCBNQVNLX0ZDVlRfTFVfRCkKK0RFQ0xBUkVfSU5TTihmbXZfeF9kLCBNQVRDSF9GTVZfWF9ELCBNQVNLX0ZNVl9YX0QpCitERUNMQVJFX0lOU04oZmNsYXNzX2QsIE1BVENIX0ZDTEFTU19ELCBNQVNLX0ZDTEFTU19EKQorREVDTEFSRV9JTlNOKGZjdnRfd19xLCBNQVRDSF9GQ1ZUX1dfUSwgTUFTS19GQ1ZUX1dfUSkKK0RFQ0xBUkVfSU5TTihmY3Z0X3d1X3EsIE1BVENIX0ZDVlRfV1VfUSwgTUFTS19GQ1ZUX1dVX1EpCitERUNMQVJFX0lOU04oZmN2dF9sX3EsIE1BVENIX0ZDVlRfTF9RLCBNQVNLX0ZDVlRfTF9RKQorREVDTEFSRV9JTlNOKGZjdnRfbHVfcSwgTUFUQ0hfRkNWVF9MVV9RLCBNQVNLX0ZDVlRfTFVfUSkKK0RFQ0xBUkVfSU5TTihmbXZfeF9xLCBNQVRDSF9GTVZfWF9RLCBNQVNLX0ZNVl9YX1EpCitERUNMQVJFX0lOU04oZmNsYXNzX3EsIE1BVENIX0ZDTEFTU19RLCBNQVNLX0ZDTEFTU19RKQorREVDTEFSRV9JTlNOKGZjdnRfc193LCBNQVRDSF9GQ1ZUX1NfVywgTUFTS19GQ1ZUX1NfVykKK0RFQ0xBUkVfSU5TTihmY3Z0X3Nfd3UsIE1BVENIX0ZDVlRfU19XVSwgTUFTS19GQ1ZUX1NfV1UpCitERUNMQVJFX0lOU04oZmN2dF9zX2wsIE1BVENIX0ZDVlRfU19MLCBNQVNLX0ZDVlRfU19MKQorREVDTEFSRV9JTlNOKGZjdnRfc19sdSwgTUFUQ0hfRkNWVF9TX0xVLCBNQVNLX0ZDVlRfU19MVSkKK0RFQ0xBUkVfSU5TTihmbXZfd194LCBNQVRDSF9GTVZfV19YLCBNQVNLX0ZNVl9XX1gpCitERUNMQVJFX0lOU04oZmN2dF9kX3csIE1BVENIX0ZDVlRfRF9XLCBNQVNLX0ZDVlRfRF9XKQorREVDTEFSRV9JTlNOKGZjdnRfZF93dSwgTUFUQ0hfRkNWVF9EX1dVLCBNQVNLX0ZDVlRfRF9XVSkKK0RFQ0xBUkVfSU5TTihmY3Z0X2RfbCwgTUFUQ0hfRkNWVF9EX0wsIE1BU0tfRkNWVF9EX0wpCitERUNMQVJFX0lOU04oZmN2dF9kX2x1LCBNQVRDSF9GQ1ZUX0RfTFUsIE1BU0tfRkNWVF9EX0xVKQorREVDTEFSRV9JTlNOKGZtdl9kX3gsIE1BVENIX0ZNVl9EX1gsIE1BU0tfRk1WX0RfWCkKK0RFQ0xBUkVfSU5TTihmY3Z0X3FfdywgTUFUQ0hfRkNWVF9RX1csIE1BU0tfRkNWVF9RX1cpCitERUNMQVJFX0lOU04oZmN2dF9xX3d1LCBNQVRDSF9GQ1ZUX1FfV1UsIE1BU0tfRkNWVF9RX1dVKQorREVDTEFSRV9JTlNOKGZjdnRfcV9sLCBNQVRDSF9GQ1ZUX1FfTCwgTUFTS19GQ1ZUX1FfTCkKK0RFQ0xBUkVfSU5TTihmY3Z0X3FfbHUsIE1BVENIX0ZDVlRfUV9MVSwgTUFTS19GQ1ZUX1FfTFUpCitERUNMQVJFX0lOU04oZm12X3FfeCwgTUFUQ0hfRk1WX1FfWCwgTUFTS19GTVZfUV9YKQorREVDTEFSRV9JTlNOKGZsdywgTUFUQ0hfRkxXLCBNQVNLX0ZMVykKK0RFQ0xBUkVfSU5TTihmbGQsIE1BVENIX0ZMRCwgTUFTS19GTEQpCitERUNMQVJFX0lOU04oZmxxLCBNQVRDSF9GTFEsIE1BU0tfRkxRKQorREVDTEFSRV9JTlNOKGZzdywgTUFUQ0hfRlNXLCBNQVNLX0ZTVykKK0RFQ0xBUkVfSU5TTihmc2QsIE1BVENIX0ZTRCwgTUFTS19GU0QpCitERUNMQVJFX0lOU04oZnNxLCBNQVRDSF9GU1EsIE1BU0tfRlNRKQorREVDTEFSRV9JTlNOKGZtYWRkX3MsIE1BVENIX0ZNQUREX1MsIE1BU0tfRk1BRERfUykKK0RFQ0xBUkVfSU5TTihmbXN1Yl9zLCBNQVRDSF9GTVNVQl9TLCBNQVNLX0ZNU1VCX1MpCitERUNMQVJFX0lOU04oZm5tc3ViX3MsIE1BVENIX0ZOTVNVQl9TLCBNQVNLX0ZOTVNVQl9TKQorREVDTEFSRV9JTlNOKGZubWFkZF9zLCBNQVRDSF9GTk1BRERfUywgTUFTS19GTk1BRERfUykKK0RFQ0xBUkVfSU5TTihmbWFkZF9kLCBNQVRDSF9GTUFERF9ELCBNQVNLX0ZNQUREX0QpCitERUNMQVJFX0lOU04oZm1zdWJfZCwgTUFUQ0hfRk1TVUJfRCwgTUFTS19GTVNVQl9EKQorREVDTEFSRV9JTlNOKGZubXN1Yl9kLCBNQVRDSF9GTk1TVUJfRCwgTUFTS19GTk1TVUJfRCkKK0RFQ0xBUkVfSU5TTihmbm1hZGRfZCwgTUFUQ0hfRk5NQUREX0QsIE1BU0tfRk5NQUREX0QpCitERUNMQVJFX0lOU04oZm1hZGRfcSwgTUFUQ0hfRk1BRERfUSwgTUFTS19GTUFERF9RKQorREVDTEFSRV9JTlNOKGZtc3ViX3EsIE1BVENIX0ZNU1VCX1EsIE1BU0tfRk1TVUJfUSkKK0RFQ0xBUkVfSU5TTihmbm1zdWJfcSwgTUFUQ0hfRk5NU1VCX1EsIE1BU0tfRk5NU1VCX1EpCitERUNMQVJFX0lOU04oZm5tYWRkX3EsIE1BVENIX0ZOTUFERF9RLCBNQVNLX0ZOTUFERF9RKQorREVDTEFSRV9JTlNOKGNfbm9wLCBNQVRDSF9DX05PUCwgTUFTS19DX05PUCkKK0RFQ0xBUkVfSU5TTihjX2FkZGkxNnNwLCBNQVRDSF9DX0FEREkxNlNQLCBNQVNLX0NfQURESTE2U1ApCitERUNMQVJFX0lOU04oY19qciwgTUFUQ0hfQ19KUiwgTUFTS19DX0pSKQorREVDTEFSRV9JTlNOKGNfamFsciwgTUFUQ0hfQ19KQUxSLCBNQVNLX0NfSkFMUikKK0RFQ0xBUkVfSU5TTihjX2VicmVhaywgTUFUQ0hfQ19FQlJFQUssIE1BU0tfQ19FQlJFQUspCitERUNMQVJFX0lOU04oY19sZCwgTUFUQ0hfQ19MRCwgTUFTS19DX0xEKQorREVDTEFSRV9JTlNOKGNfc2QsIE1BVENIX0NfU0QsIE1BU0tfQ19TRCkKK0RFQ0xBUkVfSU5TTihjX2FkZGl3LCBNQVRDSF9DX0FERElXLCBNQVNLX0NfQURESVcpCitERUNMQVJFX0lOU04oY19sZHNwLCBNQVRDSF9DX0xEU1AsIE1BU0tfQ19MRFNQKQorREVDTEFSRV9JTlNOKGNfc2RzcCwgTUFUQ0hfQ19TRFNQLCBNQVNLX0NfU0RTUCkKK0RFQ0xBUkVfSU5TTihjX2FkZGk0c3BuLCBNQVRDSF9DX0FEREk0U1BOLCBNQVNLX0NfQURESTRTUE4pCitERUNMQVJFX0lOU04oY19mbGQsIE1BVENIX0NfRkxELCBNQVNLX0NfRkxEKQorREVDTEFSRV9JTlNOKGNfbHcsIE1BVENIX0NfTFcsIE1BU0tfQ19MVykKK0RFQ0xBUkVfSU5TTihjX2ZsdywgTUFUQ0hfQ19GTFcsIE1BU0tfQ19GTFcpCitERUNMQVJFX0lOU04oY19mc2QsIE1BVENIX0NfRlNELCBNQVNLX0NfRlNEKQorREVDTEFSRV9JTlNOKGNfc3csIE1BVENIX0NfU1csIE1BU0tfQ19TVykKK0RFQ0xBUkVfSU5TTihjX2ZzdywgTUFUQ0hfQ19GU1csIE1BU0tfQ19GU1cpCitERUNMQVJFX0lOU04oY19hZGRpLCBNQVRDSF9DX0FEREksIE1BU0tfQ19BRERJKQorREVDTEFSRV9JTlNOKGNfamFsLCBNQVRDSF9DX0pBTCwgTUFTS19DX0pBTCkKK0RFQ0xBUkVfSU5TTihjX2xpLCBNQVRDSF9DX0xJLCBNQVNLX0NfTEkpCitERUNMQVJFX0lOU04oY19sdWksIE1BVENIX0NfTFVJLCBNQVNLX0NfTFVJKQorREVDTEFSRV9JTlNOKGNfc3JsaSwgTUFUQ0hfQ19TUkxJLCBNQVNLX0NfU1JMSSkKK0RFQ0xBUkVfSU5TTihjX3NyYWksIE1BVENIX0NfU1JBSSwgTUFTS19DX1NSQUkpCitERUNMQVJFX0lOU04oY19hbmRpLCBNQVRDSF9DX0FOREksIE1BU0tfQ19BTkRJKQorREVDTEFSRV9JTlNOKGNfc3ViLCBNQVRDSF9DX1NVQiwgTUFTS19DX1NVQikKK0RFQ0xBUkVfSU5TTihjX3hvciwgTUFUQ0hfQ19YT1IsIE1BU0tfQ19YT1IpCitERUNMQVJFX0lOU04oY19vciwgTUFUQ0hfQ19PUiwgTUFTS19DX09SKQorREVDTEFSRV9JTlNOKGNfYW5kLCBNQVRDSF9DX0FORCwgTUFTS19DX0FORCkKK0RFQ0xBUkVfSU5TTihjX3N1YncsIE1BVENIX0NfU1VCVywgTUFTS19DX1NVQlcpCitERUNMQVJFX0lOU04oY19hZGR3LCBNQVRDSF9DX0FERFcsIE1BU0tfQ19BRERXKQorREVDTEFSRV9JTlNOKGNfaiwgTUFUQ0hfQ19KLCBNQVNLX0NfSikKK0RFQ0xBUkVfSU5TTihjX2JlcXosIE1BVENIX0NfQkVRWiwgTUFTS19DX0JFUVopCitERUNMQVJFX0lOU04oY19ibmV6LCBNQVRDSF9DX0JORVosIE1BU0tfQ19CTkVaKQorREVDTEFSRV9JTlNOKGNfc2xsaSwgTUFUQ0hfQ19TTExJLCBNQVNLX0NfU0xMSSkKK0RFQ0xBUkVfSU5TTihjX2ZsZHNwLCBNQVRDSF9DX0ZMRFNQLCBNQVNLX0NfRkxEU1ApCitERUNMQVJFX0lOU04oY19sd3NwLCBNQVRDSF9DX0xXU1AsIE1BU0tfQ19MV1NQKQorREVDTEFSRV9JTlNOKGNfZmx3c3AsIE1BVENIX0NfRkxXU1AsIE1BU0tfQ19GTFdTUCkKK0RFQ0xBUkVfSU5TTihjX212LCBNQVRDSF9DX01WLCBNQVNLX0NfTVYpCitERUNMQVJFX0lOU04oY19hZGQsIE1BVENIX0NfQURELCBNQVNLX0NfQUREKQorREVDTEFSRV9JTlNOKGNfZnNkc3AsIE1BVENIX0NfRlNEU1AsIE1BU0tfQ19GU0RTUCkKK0RFQ0xBUkVfSU5TTihjX3N3c3AsIE1BVENIX0NfU1dTUCwgTUFTS19DX1NXU1ApCitERUNMQVJFX0lOU04oY19mc3dzcCwgTUFUQ0hfQ19GU1dTUCwgTUFTS19DX0ZTV1NQKQorREVDTEFSRV9JTlNOKGN1c3RvbTAsIE1BVENIX0NVU1RPTTAsIE1BU0tfQ1VTVE9NMCkKK0RFQ0xBUkVfSU5TTihjdXN0b20wX3JzMSwgTUFUQ0hfQ1VTVE9NMF9SUzEsIE1BU0tfQ1VTVE9NMF9SUzEpCitERUNMQVJFX0lOU04oY3VzdG9tMF9yczFfcnMyLCBNQVRDSF9DVVNUT00wX1JTMV9SUzIsIE1BU0tfQ1VTVE9NMF9SUzFfUlMyKQorREVDTEFSRV9JTlNOKGN1c3RvbTBfcmQsIE1BVENIX0NVU1RPTTBfUkQsIE1BU0tfQ1VTVE9NMF9SRCkKK0RFQ0xBUkVfSU5TTihjdXN0b20wX3JkX3JzMSwgTUFUQ0hfQ1VTVE9NMF9SRF9SUzEsIE1BU0tfQ1VTVE9NMF9SRF9SUzEpCitERUNMQVJFX0lOU04oY3VzdG9tMF9yZF9yczFfcnMyLCBNQVRDSF9DVVNUT00wX1JEX1JTMV9SUzIsIE1BU0tfQ1VTVE9NMF9SRF9SUzFfUlMyKQorREVDTEFSRV9JTlNOKGN1c3RvbTEsIE1BVENIX0NVU1RPTTEsIE1BU0tfQ1VTVE9NMSkKK0RFQ0xBUkVfSU5TTihjdXN0b20xX3JzMSwgTUFUQ0hfQ1VTVE9NMV9SUzEsIE1BU0tfQ1VTVE9NMV9SUzEpCitERUNMQVJFX0lOU04oY3VzdG9tMV9yczFfcnMyLCBNQVRDSF9DVVNUT00xX1JTMV9SUzIsIE1BU0tfQ1VTVE9NMV9SUzFfUlMyKQorREVDTEFSRV9JTlNOKGN1c3RvbTFfcmQsIE1BVENIX0NVU1RPTTFfUkQsIE1BU0tfQ1VTVE9NMV9SRCkKK0RFQ0xBUkVfSU5TTihjdXN0b20xX3JkX3JzMSwgTUFUQ0hfQ1VTVE9NMV9SRF9SUzEsIE1BU0tfQ1VTVE9NMV9SRF9SUzEpCitERUNMQVJFX0lOU04oY3VzdG9tMV9yZF9yczFfcnMyLCBNQVRDSF9DVVNUT00xX1JEX1JTMV9SUzIsIE1BU0tfQ1VTVE9NMV9SRF9SUzFfUlMyKQorREVDTEFSRV9JTlNOKGN1c3RvbTIsIE1BVENIX0NVU1RPTTIsIE1BU0tfQ1VTVE9NMikKK0RFQ0xBUkVfSU5TTihjdXN0b20yX3JzMSwgTUFUQ0hfQ1VTVE9NMl9SUzEsIE1BU0tfQ1VTVE9NMl9SUzEpCitERUNMQVJFX0lOU04oY3VzdG9tMl9yczFfcnMyLCBNQVRDSF9DVVNUT00yX1JTMV9SUzIsIE1BU0tfQ1VTVE9NMl9SUzFfUlMyKQorREVDTEFSRV9JTlNOKGN1c3RvbTJfcmQsIE1BVENIX0NVU1RPTTJfUkQsIE1BU0tfQ1VTVE9NMl9SRCkKK0RFQ0xBUkVfSU5TTihjdXN0b20yX3JkX3JzMSwgTUFUQ0hfQ1VTVE9NMl9SRF9SUzEsIE1BU0tfQ1VTVE9NMl9SRF9SUzEpCitERUNMQVJFX0lOU04oY3VzdG9tMl9yZF9yczFfcnMyLCBNQVRDSF9DVVNUT00yX1JEX1JTMV9SUzIsIE1BU0tfQ1VTVE9NMl9SRF9SUzFfUlMyKQorREVDTEFSRV9JTlNOKGN1c3RvbTMsIE1BVENIX0NVU1RPTTMsIE1BU0tfQ1VTVE9NMykKK0RFQ0xBUkVfSU5TTihjdXN0b20zX3JzMSwgTUFUQ0hfQ1VTVE9NM19SUzEsIE1BU0tfQ1VTVE9NM19SUzEpCitERUNMQVJFX0lOU04oY3VzdG9tM19yczFfcnMyLCBNQVRDSF9DVVNUT00zX1JTMV9SUzIsIE1BU0tfQ1VTVE9NM19SUzFfUlMyKQorREVDTEFSRV9JTlNOKGN1c3RvbTNfcmQsIE1BVENIX0NVU1RPTTNfUkQsIE1BU0tfQ1VTVE9NM19SRCkKK0RFQ0xBUkVfSU5TTihjdXN0b20zX3JkX3JzMSwgTUFUQ0hfQ1VTVE9NM19SRF9SUzEsIE1BU0tfQ1VTVE9NM19SRF9SUzEpCitERUNMQVJFX0lOU04oY3VzdG9tM19yZF9yczFfcnMyLCBNQVRDSF9DVVNUT00zX1JEX1JTMV9SUzIsIE1BU0tfQ1VTVE9NM19SRF9SUzFfUlMyKQorI2VuZGlmCisjaWZkZWYgREVDTEFSRV9DU1IKK0RFQ0xBUkVfQ1NSKGZmbGFncywgQ1NSX0ZGTEFHUykKK0RFQ0xBUkVfQ1NSKGZybSwgQ1NSX0ZSTSkKK0RFQ0xBUkVfQ1NSKGZjc3IsIENTUl9GQ1NSKQorREVDTEFSRV9DU1IoY3ljbGUsIENTUl9DWUNMRSkKK0RFQ0xBUkVfQ1NSKHRpbWUsIENTUl9USU1FKQorREVDTEFSRV9DU1IoaW5zdHJldCwgQ1NSX0lOU1RSRVQpCitERUNMQVJFX0NTUihocG1jb3VudGVyMywgQ1NSX0hQTUNPVU5URVIzKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjQsIENTUl9IUE1DT1VOVEVSNCkKK0RFQ0xBUkVfQ1NSKGhwbWNvdW50ZXI1LCBDU1JfSFBNQ09VTlRFUjUpCitERUNMQVJFX0NTUihocG1jb3VudGVyNiwgQ1NSX0hQTUNPVU5URVI2KQorREVDTEFSRV9DU1IoaHBtY291bnRlcjcsIENTUl9IUE1DT1VOVEVSNykKK0RFQ0xBUkVfQ1NSKGhwbWNvdW50ZXI4LCBDU1JfSFBNQ09VTlRFUjgpCitERUNMQVJFX0NTUihocG1jb3VudGVyOSwgQ1NSX0hQTUNPVU5URVI5KQorREVDTEFSRV9DU1IoaHBtY291bnRlcjEwLCBDU1JfSFBNQ09VTlRFUjEwKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjExLCBDU1JfSFBNQ09VTlRFUjExKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjEyLCBDU1JfSFBNQ09VTlRFUjEyKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjEzLCBDU1JfSFBNQ09VTlRFUjEzKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjE0LCBDU1JfSFBNQ09VTlRFUjE0KQorREVDTEFSRV9DU1IoaHBtY291bnRlcjE1LCBDU1JfSFBNQ09VTlRFUjE1KQorREVDTEFSRV9DU1IoaHBtY291bnRlcjE2LCBDU1JfSFBNQ09VTlRFUjE2KQorREVDTEFSRV9DU1IoaHBtY291bnRlcjE3LCBDU1JfSFBNQ09VTlRFUjE3KQorREVDTEFSRV9DU1IoaHBtY291bnRlcjE4LCBDU1JfSFBNQ09VTlRFUjE4KQorREVDTEFSRV9DU1IoaHBtY291bnRlcjE5LCBDU1JfSFBNQ09VTlRFUjE5KQorREVDTEFSRV9DU1IoaHBtY291bnRlcjIwLCBDU1JfSFBNQ09VTlRFUjIwKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjIxLCBDU1JfSFBNQ09VTlRFUjIxKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjIyLCBDU1JfSFBNQ09VTlRFUjIyKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjIzLCBDU1JfSFBNQ09VTlRFUjIzKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjI0LCBDU1JfSFBNQ09VTlRFUjI0KQorREVDTEFSRV9DU1IoaHBtY291bnRlcjI1LCBDU1JfSFBNQ09VTlRFUjI1KQorREVDTEFSRV9DU1IoaHBtY291bnRlcjI2LCBDU1JfSFBNQ09VTlRFUjI2KQorREVDTEFSRV9DU1IoaHBtY291bnRlcjI3LCBDU1JfSFBNQ09VTlRFUjI3KQorREVDTEFSRV9DU1IoaHBtY291bnRlcjI4LCBDU1JfSFBNQ09VTlRFUjI4KQorREVDTEFSRV9DU1IoaHBtY291bnRlcjI5LCBDU1JfSFBNQ09VTlRFUjI5KQorREVDTEFSRV9DU1IoaHBtY291bnRlcjMwLCBDU1JfSFBNQ09VTlRFUjMwKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjMxLCBDU1JfSFBNQ09VTlRFUjMxKQorREVDTEFSRV9DU1Ioc3N0YXR1cywgQ1NSX1NTVEFUVVMpCitERUNMQVJFX0NTUihzaWUsIENTUl9TSUUpCitERUNMQVJFX0NTUihzdHZlYywgQ1NSX1NUVkVDKQorREVDTEFSRV9DU1Ioc2NvdW50ZXJlbiwgQ1NSX1NDT1VOVEVSRU4pCitERUNMQVJFX0NTUihzc2NyYXRjaCwgQ1NSX1NTQ1JBVENIKQorREVDTEFSRV9DU1Ioc2VwYywgQ1NSX1NFUEMpCitERUNMQVJFX0NTUihzY2F1c2UsIENTUl9TQ0FVU0UpCitERUNMQVJFX0NTUihzYmFkYWRkciwgQ1NSX1NCQURBRERSKQorREVDTEFSRV9DU1Ioc2lwLCBDU1JfU0lQKQorREVDTEFSRV9DU1Ioc3B0YnIsIENTUl9TUFRCUikKK0RFQ0xBUkVfQ1NSKG1zdGF0dXMsIENTUl9NU1RBVFVTKQorREVDTEFSRV9DU1IobWlzYSwgQ1NSX01JU0EpCitERUNMQVJFX0NTUihtZWRlbGVnLCBDU1JfTUVERUxFRykKK0RFQ0xBUkVfQ1NSKG1pZGVsZWcsIENTUl9NSURFTEVHKQorREVDTEFSRV9DU1IobWllLCBDU1JfTUlFKQorREVDTEFSRV9DU1IobXR2ZWMsIENTUl9NVFZFQykKK0RFQ0xBUkVfQ1NSKG1jb3VudGVyZW4sIENTUl9NQ09VTlRFUkVOKQorREVDTEFSRV9DU1IobXNjcmF0Y2gsIENTUl9NU0NSQVRDSCkKK0RFQ0xBUkVfQ1NSKG1lcGMsIENTUl9NRVBDKQorREVDTEFSRV9DU1IobWNhdXNlLCBDU1JfTUNBVVNFKQorREVDTEFSRV9DU1IobWJhZGFkZHIsIENTUl9NQkFEQUREUikKK0RFQ0xBUkVfQ1NSKG1pcCwgQ1NSX01JUCkKK0RFQ0xBUkVfQ1NSKHBtcGNmZzAsIENTUl9QTVBDRkcwKQorREVDTEFSRV9DU1IocG1wY2ZnMSwgQ1NSX1BNUENGRzEpCitERUNMQVJFX0NTUihwbXBjZmcyLCBDU1JfUE1QQ0ZHMikKK0RFQ0xBUkVfQ1NSKHBtcGNmZzMsIENTUl9QTVBDRkczKQorREVDTEFSRV9DU1IocG1wYWRkcjAsIENTUl9QTVBBRERSMCkKK0RFQ0xBUkVfQ1NSKHBtcGFkZHIxLCBDU1JfUE1QQUREUjEpCitERUNMQVJFX0NTUihwbXBhZGRyMiwgQ1NSX1BNUEFERFIyKQorREVDTEFSRV9DU1IocG1wYWRkcjMsIENTUl9QTVBBRERSMykKK0RFQ0xBUkVfQ1NSKHBtcGFkZHI0LCBDU1JfUE1QQUREUjQpCitERUNMQVJFX0NTUihwbXBhZGRyNSwgQ1NSX1BNUEFERFI1KQorREVDTEFSRV9DU1IocG1wYWRkcjYsIENTUl9QTVBBRERSNikKK0RFQ0xBUkVfQ1NSKHBtcGFkZHI3LCBDU1JfUE1QQUREUjcpCitERUNMQVJFX0NTUihwbXBhZGRyOCwgQ1NSX1BNUEFERFI4KQorREVDTEFSRV9DU1IocG1wYWRkcjksIENTUl9QTVBBRERSOSkKK0RFQ0xBUkVfQ1NSKHBtcGFkZHIxMCwgQ1NSX1BNUEFERFIxMCkKK0RFQ0xBUkVfQ1NSKHBtcGFkZHIxMSwgQ1NSX1BNUEFERFIxMSkKK0RFQ0xBUkVfQ1NSKHBtcGFkZHIxMiwgQ1NSX1BNUEFERFIxMikKK0RFQ0xBUkVfQ1NSKHBtcGFkZHIxMywgQ1NSX1BNUEFERFIxMykKK0RFQ0xBUkVfQ1NSKHBtcGFkZHIxNCwgQ1NSX1BNUEFERFIxNCkKK0RFQ0xBUkVfQ1NSKHBtcGFkZHIxNSwgQ1NSX1BNUEFERFIxNSkKK0RFQ0xBUkVfQ1NSKHRzZWxlY3QsIENTUl9UU0VMRUNUKQorREVDTEFSRV9DU1IodGRhdGExLCBDU1JfVERBVEExKQorREVDTEFSRV9DU1IodGRhdGEyLCBDU1JfVERBVEEyKQorREVDTEFSRV9DU1IodGRhdGEzLCBDU1JfVERBVEEzKQorREVDTEFSRV9DU1IoZGNzciwgQ1NSX0RDU1IpCitERUNMQVJFX0NTUihkcGMsIENTUl9EUEMpCitERUNMQVJFX0NTUihkc2NyYXRjaCwgQ1NSX0RTQ1JBVENIKQorREVDTEFSRV9DU1IobWN5Y2xlLCBDU1JfTUNZQ0xFKQorREVDTEFSRV9DU1IobWluc3RyZXQsIENTUl9NSU5TVFJFVCkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMywgQ1NSX01IUE1DT1VOVEVSMykKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyNCwgQ1NSX01IUE1DT1VOVEVSNCkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyNSwgQ1NSX01IUE1DT1VOVEVSNSkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyNiwgQ1NSX01IUE1DT1VOVEVSNikKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyNywgQ1NSX01IUE1DT1VOVEVSNykKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyOCwgQ1NSX01IUE1DT1VOVEVSOCkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyOSwgQ1NSX01IUE1DT1VOVEVSOSkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMTAsIENTUl9NSFBNQ09VTlRFUjEwKQorREVDTEFSRV9DU1IobWhwbWNvdW50ZXIxMSwgQ1NSX01IUE1DT1VOVEVSMTEpCitERUNMQVJFX0NTUihtaHBtY291bnRlcjEyLCBDU1JfTUhQTUNPVU5URVIxMikKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMTMsIENTUl9NSFBNQ09VTlRFUjEzKQorREVDTEFSRV9DU1IobWhwbWNvdW50ZXIxNCwgQ1NSX01IUE1DT1VOVEVSMTQpCitERUNMQVJFX0NTUihtaHBtY291bnRlcjE1LCBDU1JfTUhQTUNPVU5URVIxNSkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMTYsIENTUl9NSFBNQ09VTlRFUjE2KQorREVDTEFSRV9DU1IobWhwbWNvdW50ZXIxNywgQ1NSX01IUE1DT1VOVEVSMTcpCitERUNMQVJFX0NTUihtaHBtY291bnRlcjE4LCBDU1JfTUhQTUNPVU5URVIxOCkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMTksIENTUl9NSFBNQ09VTlRFUjE5KQorREVDTEFSRV9DU1IobWhwbWNvdW50ZXIyMCwgQ1NSX01IUE1DT1VOVEVSMjApCitERUNMQVJFX0NTUihtaHBtY291bnRlcjIxLCBDU1JfTUhQTUNPVU5URVIyMSkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMjIsIENTUl9NSFBNQ09VTlRFUjIyKQorREVDTEFSRV9DU1IobWhwbWNvdW50ZXIyMywgQ1NSX01IUE1DT1VOVEVSMjMpCitERUNMQVJFX0NTUihtaHBtY291bnRlcjI0LCBDU1JfTUhQTUNPVU5URVIyNCkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMjUsIENTUl9NSFBNQ09VTlRFUjI1KQorREVDTEFSRV9DU1IobWhwbWNvdW50ZXIyNiwgQ1NSX01IUE1DT1VOVEVSMjYpCitERUNMQVJFX0NTUihtaHBtY291bnRlcjI3LCBDU1JfTUhQTUNPVU5URVIyNykKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMjgsIENTUl9NSFBNQ09VTlRFUjI4KQorREVDTEFSRV9DU1IobWhwbWNvdW50ZXIyOSwgQ1NSX01IUE1DT1VOVEVSMjkpCitERUNMQVJFX0NTUihtaHBtY291bnRlcjMwLCBDU1JfTUhQTUNPVU5URVIzMCkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMzEsIENTUl9NSFBNQ09VTlRFUjMxKQorREVDTEFSRV9DU1IobWhwbWV2ZW50MywgQ1NSX01IUE1FVkVOVDMpCitERUNMQVJFX0NTUihtaHBtZXZlbnQ0LCBDU1JfTUhQTUVWRU5UNCkKK0RFQ0xBUkVfQ1NSKG1ocG1ldmVudDUsIENTUl9NSFBNRVZFTlQ1KQorREVDTEFSRV9DU1IobWhwbWV2ZW50NiwgQ1NSX01IUE1FVkVOVDYpCitERUNMQVJFX0NTUihtaHBtZXZlbnQ3LCBDU1JfTUhQTUVWRU5UNykKK0RFQ0xBUkVfQ1NSKG1ocG1ldmVudDgsIENTUl9NSFBNRVZFTlQ4KQorREVDTEFSRV9DU1IobWhwbWV2ZW50OSwgQ1NSX01IUE1FVkVOVDkpCitERUNMQVJFX0NTUihtaHBtZXZlbnQxMCwgQ1NSX01IUE1FVkVOVDEwKQorREVDTEFSRV9DU1IobWhwbWV2ZW50MTEsIENTUl9NSFBNRVZFTlQxMSkKK0RFQ0xBUkVfQ1NSKG1ocG1ldmVudDEyLCBDU1JfTUhQTUVWRU5UMTIpCitERUNMQVJFX0NTUihtaHBtZXZlbnQxMywgQ1NSX01IUE1FVkVOVDEzKQorREVDTEFSRV9DU1IobWhwbWV2ZW50MTQsIENTUl9NSFBNRVZFTlQxNCkKK0RFQ0xBUkVfQ1NSKG1ocG1ldmVudDE1LCBDU1JfTUhQTUVWRU5UMTUpCitERUNMQVJFX0NTUihtaHBtZXZlbnQxNiwgQ1NSX01IUE1FVkVOVDE2KQorREVDTEFSRV9DU1IobWhwbWV2ZW50MTcsIENTUl9NSFBNRVZFTlQxNykKK0RFQ0xBUkVfQ1NSKG1ocG1ldmVudDE4LCBDU1JfTUhQTUVWRU5UMTgpCitERUNMQVJFX0NTUihtaHBtZXZlbnQxOSwgQ1NSX01IUE1FVkVOVDE5KQorREVDTEFSRV9DU1IobWhwbWV2ZW50MjAsIENTUl9NSFBNRVZFTlQyMCkKK0RFQ0xBUkVfQ1NSKG1ocG1ldmVudDIxLCBDU1JfTUhQTUVWRU5UMjEpCitERUNMQVJFX0NTUihtaHBtZXZlbnQyMiwgQ1NSX01IUE1FVkVOVDIyKQorREVDTEFSRV9DU1IobWhwbWV2ZW50MjMsIENTUl9NSFBNRVZFTlQyMykKK0RFQ0xBUkVfQ1NSKG1ocG1ldmVudDI0LCBDU1JfTUhQTUVWRU5UMjQpCitERUNMQVJFX0NTUihtaHBtZXZlbnQyNSwgQ1NSX01IUE1FVkVOVDI1KQorREVDTEFSRV9DU1IobWhwbWV2ZW50MjYsIENTUl9NSFBNRVZFTlQyNikKK0RFQ0xBUkVfQ1NSKG1ocG1ldmVudDI3LCBDU1JfTUhQTUVWRU5UMjcpCitERUNMQVJFX0NTUihtaHBtZXZlbnQyOCwgQ1NSX01IUE1FVkVOVDI4KQorREVDTEFSRV9DU1IobWhwbWV2ZW50MjksIENTUl9NSFBNRVZFTlQyOSkKK0RFQ0xBUkVfQ1NSKG1ocG1ldmVudDMwLCBDU1JfTUhQTUVWRU5UMzApCitERUNMQVJFX0NTUihtaHBtZXZlbnQzMSwgQ1NSX01IUE1FVkVOVDMxKQorREVDTEFSRV9DU1IobXZlbmRvcmlkLCBDU1JfTVZFTkRPUklEKQorREVDTEFSRV9DU1IobWFyY2hpZCwgQ1NSX01BUkNISUQpCitERUNMQVJFX0NTUihtaW1waWQsIENTUl9NSU1QSUQpCitERUNMQVJFX0NTUihtaGFydGlkLCBDU1JfTUhBUlRJRCkKK0RFQ0xBUkVfQ1NSKGN5Y2xlaCwgQ1NSX0NZQ0xFSCkKK0RFQ0xBUkVfQ1NSKHRpbWVoLCBDU1JfVElNRUgpCitERUNMQVJFX0NTUihpbnN0cmV0aCwgQ1NSX0lOU1RSRVRIKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjNoLCBDU1JfSFBNQ09VTlRFUjNIKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjRoLCBDU1JfSFBNQ09VTlRFUjRIKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjVoLCBDU1JfSFBNQ09VTlRFUjVIKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjZoLCBDU1JfSFBNQ09VTlRFUjZIKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjdoLCBDU1JfSFBNQ09VTlRFUjdIKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjhoLCBDU1JfSFBNQ09VTlRFUjhIKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjloLCBDU1JfSFBNQ09VTlRFUjlIKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjEwaCwgQ1NSX0hQTUNPVU5URVIxMEgpCitERUNMQVJFX0NTUihocG1jb3VudGVyMTFoLCBDU1JfSFBNQ09VTlRFUjExSCkKK0RFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIxMmgsIENTUl9IUE1DT1VOVEVSMTJIKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjEzaCwgQ1NSX0hQTUNPVU5URVIxM0gpCitERUNMQVJFX0NTUihocG1jb3VudGVyMTRoLCBDU1JfSFBNQ09VTlRFUjE0SCkKK0RFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIxNWgsIENTUl9IUE1DT1VOVEVSMTVIKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjE2aCwgQ1NSX0hQTUNPVU5URVIxNkgpCitERUNMQVJFX0NTUihocG1jb3VudGVyMTdoLCBDU1JfSFBNQ09VTlRFUjE3SCkKK0RFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIxOGgsIENTUl9IUE1DT1VOVEVSMThIKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjE5aCwgQ1NSX0hQTUNPVU5URVIxOUgpCitERUNMQVJFX0NTUihocG1jb3VudGVyMjBoLCBDU1JfSFBNQ09VTlRFUjIwSCkKK0RFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIyMWgsIENTUl9IUE1DT1VOVEVSMjFIKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjIyaCwgQ1NSX0hQTUNPVU5URVIyMkgpCitERUNMQVJFX0NTUihocG1jb3VudGVyMjNoLCBDU1JfSFBNQ09VTlRFUjIzSCkKK0RFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIyNGgsIENTUl9IUE1DT1VOVEVSMjRIKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjI1aCwgQ1NSX0hQTUNPVU5URVIyNUgpCitERUNMQVJFX0NTUihocG1jb3VudGVyMjZoLCBDU1JfSFBNQ09VTlRFUjI2SCkKK0RFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIyN2gsIENTUl9IUE1DT1VOVEVSMjdIKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjI4aCwgQ1NSX0hQTUNPVU5URVIyOEgpCitERUNMQVJFX0NTUihocG1jb3VudGVyMjloLCBDU1JfSFBNQ09VTlRFUjI5SCkKK0RFQ0xBUkVfQ1NSKGhwbWNvdW50ZXIzMGgsIENTUl9IUE1DT1VOVEVSMzBIKQorREVDTEFSRV9DU1IoaHBtY291bnRlcjMxaCwgQ1NSX0hQTUNPVU5URVIzMUgpCitERUNMQVJFX0NTUihtY3ljbGVoLCBDU1JfTUNZQ0xFSCkKK0RFQ0xBUkVfQ1NSKG1pbnN0cmV0aCwgQ1NSX01JTlNUUkVUSCkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyM2gsIENTUl9NSFBNQ09VTlRFUjNIKQorREVDTEFSRV9DU1IobWhwbWNvdW50ZXI0aCwgQ1NSX01IUE1DT1VOVEVSNEgpCitERUNMQVJFX0NTUihtaHBtY291bnRlcjVoLCBDU1JfTUhQTUNPVU5URVI1SCkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyNmgsIENTUl9NSFBNQ09VTlRFUjZIKQorREVDTEFSRV9DU1IobWhwbWNvdW50ZXI3aCwgQ1NSX01IUE1DT1VOVEVSN0gpCitERUNMQVJFX0NTUihtaHBtY291bnRlcjhoLCBDU1JfTUhQTUNPVU5URVI4SCkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyOWgsIENTUl9NSFBNQ09VTlRFUjlIKQorREVDTEFSRV9DU1IobWhwbWNvdW50ZXIxMGgsIENTUl9NSFBNQ09VTlRFUjEwSCkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMTFoLCBDU1JfTUhQTUNPVU5URVIxMUgpCitERUNMQVJFX0NTUihtaHBtY291bnRlcjEyaCwgQ1NSX01IUE1DT1VOVEVSMTJIKQorREVDTEFSRV9DU1IobWhwbWNvdW50ZXIxM2gsIENTUl9NSFBNQ09VTlRFUjEzSCkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMTRoLCBDU1JfTUhQTUNPVU5URVIxNEgpCitERUNMQVJFX0NTUihtaHBtY291bnRlcjE1aCwgQ1NSX01IUE1DT1VOVEVSMTVIKQorREVDTEFSRV9DU1IobWhwbWNvdW50ZXIxNmgsIENTUl9NSFBNQ09VTlRFUjE2SCkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMTdoLCBDU1JfTUhQTUNPVU5URVIxN0gpCitERUNMQVJFX0NTUihtaHBtY291bnRlcjE4aCwgQ1NSX01IUE1DT1VOVEVSMThIKQorREVDTEFSRV9DU1IobWhwbWNvdW50ZXIxOWgsIENTUl9NSFBNQ09VTlRFUjE5SCkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMjBoLCBDU1JfTUhQTUNPVU5URVIyMEgpCitERUNMQVJFX0NTUihtaHBtY291bnRlcjIxaCwgQ1NSX01IUE1DT1VOVEVSMjFIKQorREVDTEFSRV9DU1IobWhwbWNvdW50ZXIyMmgsIENTUl9NSFBNQ09VTlRFUjIySCkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMjNoLCBDU1JfTUhQTUNPVU5URVIyM0gpCitERUNMQVJFX0NTUihtaHBtY291bnRlcjI0aCwgQ1NSX01IUE1DT1VOVEVSMjRIKQorREVDTEFSRV9DU1IobWhwbWNvdW50ZXIyNWgsIENTUl9NSFBNQ09VTlRFUjI1SCkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMjZoLCBDU1JfTUhQTUNPVU5URVIyNkgpCitERUNMQVJFX0NTUihtaHBtY291bnRlcjI3aCwgQ1NSX01IUE1DT1VOVEVSMjdIKQorREVDTEFSRV9DU1IobWhwbWNvdW50ZXIyOGgsIENTUl9NSFBNQ09VTlRFUjI4SCkKK0RFQ0xBUkVfQ1NSKG1ocG1jb3VudGVyMjloLCBDU1JfTUhQTUNPVU5URVIyOUgpCitERUNMQVJFX0NTUihtaHBtY291bnRlcjMwaCwgQ1NSX01IUE1DT1VOVEVSMzBIKQorREVDTEFSRV9DU1IobWhwbWNvdW50ZXIzMWgsIENTUl9NSFBNQ09VTlRFUjMxSCkKKyNlbmRpZgorI2lmZGVmIERFQ0xBUkVfQ0FVU0UKK0RFQ0xBUkVfQ0FVU0UoIm1pc2FsaWduZWQgZmV0Y2giLCBDQVVTRV9NSVNBTElHTkVEX0ZFVENIKQorREVDTEFSRV9DQVVTRSgiZmV0Y2ggYWNjZXNzIiwgQ0FVU0VfRkVUQ0hfQUNDRVNTKQorREVDTEFSRV9DQVVTRSgiaWxsZWdhbCBpbnN0cnVjdGlvbiIsIENBVVNFX0lMTEVHQUxfSU5TVFJVQ1RJT04pCitERUNMQVJFX0NBVVNFKCJicmVha3BvaW50IiwgQ0FVU0VfQlJFQUtQT0lOVCkKK0RFQ0xBUkVfQ0FVU0UoIm1pc2FsaWduZWQgbG9hZCIsIENBVVNFX01JU0FMSUdORURfTE9BRCkKK0RFQ0xBUkVfQ0FVU0UoImxvYWQgYWNjZXNzIiwgQ0FVU0VfTE9BRF9BQ0NFU1MpCitERUNMQVJFX0NBVVNFKCJtaXNhbGlnbmVkIHN0b3JlIiwgQ0FVU0VfTUlTQUxJR05FRF9TVE9SRSkKK0RFQ0xBUkVfQ0FVU0UoInN0b3JlIGFjY2VzcyIsIENBVVNFX1NUT1JFX0FDQ0VTUykKK0RFQ0xBUkVfQ0FVU0UoInVzZXJfZWNhbGwiLCBDQVVTRV9VU0VSX0VDQUxMKQorREVDTEFSRV9DQVVTRSgic3VwZXJ2aXNvcl9lY2FsbCIsIENBVVNFX1NVUEVSVklTT1JfRUNBTEwpCitERUNMQVJFX0NBVVNFKCJoeXBlcnZpc29yX2VjYWxsIiwgQ0FVU0VfSFlQRVJWSVNPUl9FQ0FMTCkKK0RFQ0xBUkVfQ0FVU0UoIm1hY2hpbmVfZWNhbGwiLCBDQVVTRV9NQUNISU5FX0VDQUxMKQorREVDTEFSRV9DQVVTRSgiZmV0Y2ggcGFnZSBmYXVsdCIsIENBVVNFX0ZFVENIX1BBR0VfRkFVTFQpCitERUNMQVJFX0NBVVNFKCJsb2FkIHBhZ2UgZmF1bHQiLCBDQVVTRV9MT0FEX1BBR0VfRkFVTFQpCitERUNMQVJFX0NBVVNFKCJzdG9yZSBwYWdlIGZhdWx0IiwgQ0FVU0VfU1RPUkVfUEFHRV9GQVVMVCkKKyNlbmRpZgorCisjaW5jbHVkZSAieWNyMV9zcGVjaWZpYy5oIgpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9maXJtd2FyZS9yaXNjdl9tYWNyb3MuaCBiL3Zlcmlsb2cvZHYvZmlybXdhcmUvcmlzY3ZfbWFjcm9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRmYzhjYgotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvZmlybXdhcmUvcmlzY3ZfbWFjcm9zLmgKQEAgLTAsMCArMSw4MzUgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAgICAgICAgLy8vLworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAgICAgICAvLy8vCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgICAgLy8vLworLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgICAgICAvLy8vCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4vLy8KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgICAgLy8vLworLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPiAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyNpZm5kZWYgX19SSVNDVl9NQUNST1NfSAorI2RlZmluZSBfX1JJU0NWX01BQ1JPU19ICisKKyNpbmNsdWRlICJyaXNjdl9jc3JfZW5jb2RpbmcuaCIKKyNpbmNsdWRlICJzY190ZXN0LmgiCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEJlZ2luIE1hY3JvCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyNkZWZpbmUgUlZURVNUX1JWNjRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgLm1hY3JvIGluaXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgLmVuZG0KKworI2RlZmluZSBSVlRFU1RfUlY2NFVGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAubWFjcm8gaW5pdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBSVlRFU1RfRlBfRU5BQkxFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAuZW5kbQorCisjZGVmaW5lIFJWVEVTVF9SVjMyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIC5tYWNybyBpbml0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIC5lbmRtCisKKyNkZWZpbmUgUlZURVNUX1JWMzJVRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgLm1hY3JvIGluaXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgUlZURVNUX0ZQX0VOQUJMRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgLmVuZG0KKworI2RlZmluZSBSVlRFU1RfUlY2NE0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAubWFjcm8gaW5pdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBSVlRFU1RfRU5BQkxFX01BQ0hJTkU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAuZW5kbQorCisjZGVmaW5lIFJWVEVTVF9SVjY0UyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIC5tYWNybyBpbml0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIFJWVEVTVF9FTkFCTEVfU1VQRVJWSVNPUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIC5lbmRtCisKKyNkZWZpbmUgUlZURVNUX1JWMzJNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgLm1hY3JvIGluaXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgUlZURVNUX0VOQUJMRV9NQUNISU5FOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgLmVuZG0KKworI2RlZmluZSBSVlRFU1RfUlYzMlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAubWFjcm8gaW5pdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBSVlRFU1RfRU5BQkxFX1NVUEVSVklTT1I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAuZW5kbQorCisjaWYgX19yaXNjdl94bGVuID09IDY0CisjIGRlZmluZSBDSEVDS19YTEVOIGxpIGEwLCAxOyBzbGxpIGEwLCBhMCwgMzE7IGJnZXogYTAsIDFmOyBSVlRFU1RfUEFTUzsgMToKKyNlbHNlCisjIGRlZmluZSBDSEVDS19YTEVOIGxpIGEwLCAxOyBzbGxpIGEwLCBhMCwgMzE7IGJsdHogYTAsIDFmOyBSVlRFU1RfUEFTUzsgMToKKyNlbmRpZgorCisjZGVmaW5lIElOSVRfUE1QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGxhIHQwLCAxZjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGNzcncgbXR2ZWMsIHQwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGxpIHQwLCAtMTsgICAgICAgIC8qIFNldCB1cCBhIFBNUCB0byBwZXJtaXQgYWxsIGFjY2Vzc2VzICovICAgICAgICAgICBcCisgIGNzcncgcG1wYWRkcjAsIHQwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGxpIHQwLCBQTVBfTkFQT1QgfCBQTVBfUiB8IFBNUF9XIHwgUE1QX1g7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGNzcncgcG1wY2ZnMCwgdDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIC5iYWxpZ24gNDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorMToKKworI2RlZmluZSBJTklUX1NQVEJSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBsYSB0MCwgMWY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBjc3J3IG10dmVjLCB0MDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBjc3J3aSBzcHRiciwgMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAuYmFsaWduIDQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKzE6CisKKyNkZWZpbmUgREVMRUdBVEVfTk9fVFJBUFMKKworI2RlZmluZSBSVlRFU1RfRU5BQkxFX1NVUEVSVklTT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBsaSBhMCwgTVNUQVRVU19NUFAgJiAoTVNUQVRVU19NUFAgPj4gMSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBjc3JzIG1zdGF0dXMsIGEwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBsaSBhMCwgU0lQX1NTSVAgfCBTSVBfU1RJUDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBjc3JzIG1pZGVsZWcsIGEwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCisjZGVmaW5lIFJWVEVTVF9FTkFCTEVfTUFDSElORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGxpIGEwLCBNU1RBVFVTX01QUDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGNzcnMgbXN0YXR1cywgYTA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisKKyNkZWZpbmUgUlZURVNUX0ZQX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgbGkgYTAsIE1TVEFUVVNfRlMgJiAoTVNUQVRVU19GUyA+PiAxKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgY3NycyBtc3RhdHVzLCBhMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgY3Nyd2kgZmNzciwgMAorCisjZGVmaW5lIFJJU0NWX01VTFRJQ09SRV9ESVNBQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGNzcnIgYTAsIG1oYXJ0aWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIDE6IGJuZXogYTAsIDFiCisKKyNkZWZpbmUgRVhUUkFfVFZFQ19VU0VSCisjZGVmaW5lIEVYVFJBX1RWRUNfU1VQRVJWSVNPUgorI2RlZmluZSBFWFRSQV9UVkVDX0hZUEVSVklTT1IKKyNkZWZpbmUgRVhUUkFfVFZFQ19NQUNISU5FCisjZGVmaW5lIEVYVFJBX0lOSVQKKyNkZWZpbmUgRVhUUkFfSU5JVF9USU1FUgorCisjZGVmaW5lIElOVEVSUlVQVF9IQU5ETEVSIGogb3RoZXJfZXhjZXB0aW9uIC8qIE5vIGludGVycnVwdHMgc2hvdWxkIG9jY3VyICovCisKKyNkZWZpbmUgUlZURVNUX0NPREVfQkVHSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLnNlY3Rpb24gLnRleHQuaW5pdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLm9yZyAweEMwLCAweDAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLmJhbGlnbiAgNjQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLndlYWsgc3R2ZWNfaGFuZGxlcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLndlYWsgbXR2ZWNfaGFuZGxlcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3RyYXBfdmVjdG9yOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLyogdGVzdCB3aGV0aGVyIHRoZSB0ZXN0IGNhbWUgZnJvbSBwYXNzL2ZhaWwgKi8gICAgICAgICAgICAgICAgIFwKKyAgICAgICAgY3NyciBhNCwgbWNhdXNlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgbGkgYTUsIENBVVNFX1VTRVJfRUNBTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgYmVxIGE0LCBhNSwgX3JlcG9ydDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgbGkgYTUsIENBVVNFX1NVUEVSVklTT1JfRUNBTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgYmVxIGE0LCBhNSwgX3JlcG9ydDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgbGkgYTUsIENBVVNFX01BQ0hJTkVfRUNBTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgYmVxIGE0LCBhNSwgX3JlcG9ydDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLyogaWYgYW4gbXR2ZWNfaGFuZGxlciBpcyBkZWZpbmVkLCBqdW1wIHRvIGl0ICovICAgICAgICAgICAgICAgIFwKKyAgICAgICAgbGEgYTQsIG10dmVjX2hhbmRsZXI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgYmVxeiBhNCwgMWY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAganIgYTQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLyogd2FzIGl0IGFuIGludGVycnVwdCBvciBhbiBleGNlcHRpb24/ICovICAgICAgICAgICAgICAgICAgICAgIFwKKzE6ICAgICAgY3NyciBhNCwgbWNhdXNlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgYmdleiBhNCwgaGFuZGxlX2V4Y2VwdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgSU5URVJSVVBUX0hBTkRMRVI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK2hhbmRsZV9leGNlcHRpb246ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLyogd2UgZG9uJ3Qga25vdyBob3cgdG8gaGFuZGxlIHdoYXRldmVyIHRoZSBleGNlcHRpb24gd2FzICovICAgIFwKK290aGVyX2V4Y2VwdGlvbjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLyogc29tZSB1bmhhbmRsYWJsZSBleGNlcHRpb24gb2NjdXJyZWQgKi8gICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgbGkgICBhMCwgMHgxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK19yZXBvcnQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaiBzY19leGl0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLmJhbGlnbiAgNjQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLmdsb2JsIF9zdGFydDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK19zdGFydDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgUklTQ1ZfTVVMVElDT1JFX0RJU0FCTEU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLypJTklUX1NQVEJSOyovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLypJTklUX1BNUDsqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgREVMRUdBVEVfTk9fVFJBUFM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgbGkgVEVTVE5VTSwgMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgbGEgdDAsIHRyYXBfdmVjdG9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgY3NydyBtdHZlYywgdDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgQ0hFQ0tfWExFTjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLyogaWYgYW4gc3R2ZWNfaGFuZGxlciBpcyBkZWZpbmVkLCBkZWxlZ2F0ZSBleGNlcHRpb25zIHRvIGl0ICovIFwKKyAgICAgICAgbGEgdDAsIHN0dmVjX2hhbmRsZXI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgYmVxeiB0MCwgMWY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgY3NydyBzdHZlYywgdDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgbGkgdDAsICgxIDw8IENBVVNFX0xPQURfUEFHRV9GQVVMVCkgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICgxIDw8IENBVVNFX1NUT1JFX1BBR0VfRkFVTFQpIHwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICgxIDw8IENBVVNFX0ZFVENIX1BBR0VfRkFVTFQpIHwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICgxIDw8IENBVVNFX01JU0FMSUdORURfRkVUQ0gpIHwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICgxIDw8IENBVVNFX1VTRVJfRUNBTEwpIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICgxIDw8IENBVVNFX0JSRUFLUE9JTlQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgY3NydyBtZWRlbGVnLCB0MDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgY3NyciB0MSwgbWVkZWxlZzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgYm5lIHQwLCB0MSwgb3RoZXJfZXhjZXB0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKzE6ICAgICAgY3Nyd2kgbXN0YXR1cywgMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaW5pdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgRVhUUkFfSU5JVDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgRVhUUkFfSU5JVF9USU1FUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgbGEgdDAsIF9ydW5fdGVzdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgY3NydyBtZXBjLCB0MDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgY3NyciBhMCwgbWhhcnRpZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgbXJldDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLnNlY3Rpb24gLnRleHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK19ydW5fdGVzdDoKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gRW5kIE1hY3JvCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyNkZWZpbmUgUlZURVNUX0NPREVfRU5EIGVjYWxsOiBlY2FsbAorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBQYXNzL0ZhaWwgTWFjcm8KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworI2RlZmluZSBSVlRFU1RfUEFTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBmZW5jZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBtdiBhMSwgVEVTVE5VTTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBsaSAgYTAsIDB4MDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBlY2FsbAorCisjZGVmaW5lIFRFU1ROVU0geDI4CisjZGVmaW5lIFJWVEVTVF9GQUlMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGZlbmNlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIG12IGExLCBURVNUTlVNOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGxpICBhMCwgMHgxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGVjYWxsCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIERhdGEgU2VjdGlvbiBNYWNybworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjZGVmaW5lIEVYVFJBX0RBVEEKKworI2RlZmluZSBSVlRFU1RfREFUQV9CRUdJTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIEVYVFJBX0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLnB1c2hzZWN0aW9uIC50b2hvc3QsImF3IixAcHJvZ2JpdHM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAuYmFsaWduIDY0OyAuZ2xvYmFsIHRvaG9zdDsgdG9ob3N0OiAuZHdvcmQgMDsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIC5iYWxpZ24gNjQ7IC5nbG9iYWwgZnJvbWhvc3Q7IGZyb21ob3N0OiAuZHdvcmQgMDsgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLnBvcHNlY3Rpb247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAuYmFsaWduIDE2OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIC5nbG9iYWwgYmVnaW5fcmVnc3RhdGU7ICBiZWdpbl9yZWdzdGF0ZTogLmR3b3JkIDA7IC5kd29yZCAwOyAuZHdvcmQgMDsgIFwKKyAgICAgICAgLmJhbGlnbiAxNjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAuZ2xvYmFsIGJlZ2luX3NpZ25hdHVyZTsgYmVnaW5fc2lnbmF0dXJlOgorCisjZGVmaW5lIFJWVEVTVF9EQVRBX0VORCAuYmFsaWduIDE2OyAuZ2xvYmFsIGVuZF9zaWduYXR1cmU7IGVuZF9zaWduYXR1cmU6CisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBIZWxwZXIgbWFjcm9zCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworI2RlZmluZSBNQVNLX1hMRU4oeCkgKCh4KSAmICgoMSA8PCAoX19yaXNjdl94bGVuIC0gMSkgPDwgMSkgLSAxKSkKKworI2RlZmluZSBURVNUX0NBU0UoIHRlc3RudW0sIHRlc3RyZWcsIGNvcnJlY3R2YWwsIGNvZGUuLi4gKSBcCit0ZXN0XyAjIyB0ZXN0bnVtOiBcCisgICAgY29kZTsgXAorICAgIGxpICB4MjksIE1BU0tfWExFTihjb3JyZWN0dmFsKTsgXAorICAgIGxpICBURVNUTlVNLCB0ZXN0bnVtOyBcCisgICAgYm5lIHRlc3RyZWcsIHgyOSwgZmFpbDsKKworIyBXZSB1c2UgYSBtYWNybyBoYWNrIHRvIHNpbXBpZnkgY29kZSBnZW5lcmF0aW9uIGZvciB2YXJpb3VzIG51bWJlcnMKKyMgb2YgYnViYmxlIGN5Y2xlcy4KKworI2RlZmluZSBURVNUX0lOU0VSVF9OT1BTXzAKKyNkZWZpbmUgVEVTVF9JTlNFUlRfTk9QU18xICBub3A7IFRFU1RfSU5TRVJUX05PUFNfMAorI2RlZmluZSBURVNUX0lOU0VSVF9OT1BTXzIgIG5vcDsgVEVTVF9JTlNFUlRfTk9QU18xCisjZGVmaW5lIFRFU1RfSU5TRVJUX05PUFNfMyAgbm9wOyBURVNUX0lOU0VSVF9OT1BTXzIKKyNkZWZpbmUgVEVTVF9JTlNFUlRfTk9QU180ICBub3A7IFRFU1RfSU5TRVJUX05PUFNfMworI2RlZmluZSBURVNUX0lOU0VSVF9OT1BTXzUgIG5vcDsgVEVTVF9JTlNFUlRfTk9QU180CisjZGVmaW5lIFRFU1RfSU5TRVJUX05PUFNfNiAgbm9wOyBURVNUX0lOU0VSVF9OT1BTXzUKKyNkZWZpbmUgVEVTVF9JTlNFUlRfTk9QU183ICBub3A7IFRFU1RfSU5TRVJUX05PUFNfNgorI2RlZmluZSBURVNUX0lOU0VSVF9OT1BTXzggIG5vcDsgVEVTVF9JTlNFUlRfTk9QU183CisjZGVmaW5lIFRFU1RfSU5TRVJUX05PUFNfOSAgbm9wOyBURVNUX0lOU0VSVF9OT1BTXzgKKyNkZWZpbmUgVEVTVF9JTlNFUlRfTk9QU18xMCBub3A7IFRFU1RfSU5TRVJUX05PUFNfOQorCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSVjY0VUkgTUFDUk9TCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3RzIGZvciBpbnN0cnVjdGlvbnMgd2l0aCBpbW1lZGlhdGUgb3BlcmFuZAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyNkZWZpbmUgU0VYVF9JTU0oeCkgKCh4KSB8ICgtKCgoeCkgPj4gMTEpICYgMSkgPDwgMTEpKQorCisjZGVmaW5lIFRFU1RfSU1NX09QKCB0ZXN0bnVtLCBpbnN0LCByZXN1bHQsIHZhbDEsIGltbSApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgzLCByZXN1bHQsIFwKKyAgICAgIGxpICB4MSwgTUFTS19YTEVOKHZhbDEpOyBcCisgICAgICBpbnN0IHgzLCB4MSwgU0VYVF9JTU0oaW1tKTsgXAorICAgICkKKworI2RlZmluZSBURVNUX0lNTV9PUF9SVkMoIHRlc3RudW0sIGluc3QsIHJlc3VsdCwgdmFsMSwgaW1tICkgXAorICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDEsIHJlc3VsdCwgXAorICAgICAgbGkgIHgxLCB2YWwxOyBcCisgICAgICBpbnN0IHgxLCBpbW07IFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9JTU1fU1JDMV9FUV9ERVNUKCB0ZXN0bnVtLCBpbnN0LCByZXN1bHQsIHZhbDEsIGltbSApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgxLCByZXN1bHQsIFwKKyAgICAgIGxpICB4MSwgTUFTS19YTEVOKHZhbDEpOyBcCisgICAgICBpbnN0IHgxLCB4MSwgU0VYVF9JTU0oaW1tKTsgXAorICAgICkKKworI2RlZmluZSBURVNUX0lNTV9ERVNUX0JZUEFTUyggdGVzdG51bSwgbm9wX2N5Y2xlcywgaW5zdCwgcmVzdWx0LCB2YWwxLCBpbW0gKSBcCisgICAgVEVTVF9DQVNFKCB0ZXN0bnVtLCB4NiwgcmVzdWx0LCBcCisgICAgICBsaSAgeDQsIDA7IFwKKzE6ICAgIGxpICB4MSwgTUFTS19YTEVOKHZhbDEpOyBcCisgICAgICBpbnN0IHgzLCB4MSwgU0VYVF9JTU0oaW1tKTsgXAorICAgICAgVEVTVF9JTlNFUlRfTk9QU18gIyMgbm9wX2N5Y2xlcyBcCisgICAgICBhZGRpICB4NiwgeDMsIDA7IFwKKyAgICAgIGFkZGkgIHg0LCB4NCwgMTsgXAorICAgICAgbGkgIHg1LCAyOyBcCisgICAgICBibmUgeDQsIHg1LCAxYiBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfSU1NX1NSQzFfQllQQVNTKCB0ZXN0bnVtLCBub3BfY3ljbGVzLCBpbnN0LCByZXN1bHQsIHZhbDEsIGltbSApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgzLCByZXN1bHQsIFwKKyAgICAgIGxpICB4NCwgMDsgXAorMTogICAgbGkgIHgxLCBNQVNLX1hMRU4odmFsMSk7IFwKKyAgICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIG5vcF9jeWNsZXMgXAorICAgICAgaW5zdCB4MywgeDEsIFNFWFRfSU1NKGltbSk7IFwKKyAgICAgIGFkZGkgIHg0LCB4NCwgMTsgXAorICAgICAgbGkgIHg1LCAyOyBcCisgICAgICBibmUgeDQsIHg1LCAxYiBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfSU1NX1pFUk9TUkMxKCB0ZXN0bnVtLCBpbnN0LCByZXN1bHQsIGltbSApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgxLCByZXN1bHQsIFwKKyAgICAgIGluc3QgeDEsIHgwLCBTRVhUX0lNTShpbW0pOyBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfSU1NX1pFUk9ERVNUKCB0ZXN0bnVtLCBpbnN0LCB2YWwxLCBpbW0gKSBcCisgICAgVEVTVF9DQVNFKCB0ZXN0bnVtLCB4MCwgMCwgXAorICAgICAgbGkgIHgxLCBNQVNLX1hMRU4odmFsMSk7IFwKKyAgICAgIGluc3QgeDAsIHgxLCBTRVhUX0lNTShpbW0pOyBcCisgICAgKQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGVzdHMgZm9yIHZlY3RvciBjb25maWcgaW5zdHJ1Y3Rpb25zCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworI2RlZmluZSBURVNUX1ZTRVRDRkdJVkwoIHRlc3RudW0sIG54cHIsIG5mcHIsIGJhbmssIHZsLCByZXN1bHQgKSBcCisgICAgVEVTVF9DQVNFKCB0ZXN0bnVtLCB4MSwgcmVzdWx0LCBcCisgICAgICBsaSB4MSwgKGJhbmsgPDwgMTIpOyBcCisgICAgICB2c2V0Y2ZnIHgxLG54cHIsbmZwcjsgXAorICAgICAgbGkgeDEsIHZsOyBcCisgICAgICB2c2V0dmwgeDEseDE7IFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9WVkNGRyggdGVzdG51bSwgbnhwciwgbmZwciwgYmFuaywgdmwsIHJlc3VsdCApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgxLCByZXN1bHQsIFwKKyAgICAgIGxpIHgxLCAoYmFuayA8PCAxMikgfCAobmZwciA8PCA2KSB8IG54cHI7IFwKKyAgICAgIHZzZXRjZmcgeDE7IFwKKyAgICAgIGxpIHgxLCB2bDsgXAorICAgICAgdnNldHZsIHgxLHgxOyBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfVlNFVFZMKCB0ZXN0bnVtLCBueHByLCBuZnByLCBiYW5rLCB2bCwgcmVzdWx0ICkgXAorICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDEsIHJlc3VsdCwgXAorICAgICAgbGkgeDEsIChiYW5rIDw8IDEyKTsgXAorICAgICAgdnNldGNmZyB4MSxueHByLG5mcHI7IFwKKyAgICAgIGxpIHgxLCB2bDsgXAorICAgICAgdnNldHZsIHgxLCB4MTsgXAorICAgICkKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3RzIGZvciBhbiBpbnN0cnVjdGlvbiB3aXRoIHJlZ2lzdGVyIG9wZXJhbmRzCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworI2RlZmluZSBURVNUX1JfT1AoIHRlc3RudW0sIGluc3QsIHJlc3VsdCwgdmFsMSApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgzLCByZXN1bHQsIFwKKyAgICAgIGxpICB4MSwgdmFsMTsgXAorICAgICAgaW5zdCB4MywgeDE7IFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9SX1NSQzFfRVFfREVTVCggdGVzdG51bSwgaW5zdCwgcmVzdWx0LCB2YWwxICkgXAorICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDEsIHJlc3VsdCwgXAorICAgICAgbGkgIHgxLCB2YWwxOyBcCisgICAgICBpbnN0IHgxLCB4MTsgXAorICAgICkKKworI2RlZmluZSBURVNUX1JfREVTVF9CWVBBU1MoIHRlc3RudW0sIG5vcF9jeWNsZXMsIGluc3QsIHJlc3VsdCwgdmFsMSApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHg2LCByZXN1bHQsIFwKKyAgICAgIGxpICB4NCwgMDsgXAorMTogICAgbGkgIHgxLCB2YWwxOyBcCisgICAgICBpbnN0IHgzLCB4MTsgXAorICAgICAgVEVTVF9JTlNFUlRfTk9QU18gIyMgbm9wX2N5Y2xlcyBcCisgICAgICBhZGRpICB4NiwgeDMsIDA7IFwKKyAgICAgIGFkZGkgIHg0LCB4NCwgMTsgXAorICAgICAgbGkgIHg1LCAyOyBcCisgICAgICBibmUgeDQsIHg1LCAxYiBcCisgICAgKQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGVzdHMgZm9yIGFuIGluc3RydWN0aW9uIHdpdGggcmVnaXN0ZXItcmVnaXN0ZXIgb3BlcmFuZHMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjZGVmaW5lIFRFU1RfUlJfT1AoIHRlc3RudW0sIGluc3QsIHJlc3VsdCwgdmFsMSwgdmFsMiApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgzLCByZXN1bHQsIFwKKyAgICAgIGxpICB4MSwgTUFTS19YTEVOKHZhbDEpOyBcCisgICAgICBsaSAgeDIsIE1BU0tfWExFTih2YWwyKTsgXAorICAgICAgaW5zdCB4MywgeDEsIHgyOyBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfUlJfU1JDMV9FUV9ERVNUKCB0ZXN0bnVtLCBpbnN0LCByZXN1bHQsIHZhbDEsIHZhbDIgKSBcCisgICAgVEVTVF9DQVNFKCB0ZXN0bnVtLCB4MSwgcmVzdWx0LCBcCisgICAgICBsaSAgeDEsIE1BU0tfWExFTih2YWwxKTsgXAorICAgICAgbGkgIHgyLCBNQVNLX1hMRU4odmFsMik7IFwKKyAgICAgIGluc3QgeDEsIHgxLCB4MjsgXAorICAgICkKKworI2RlZmluZSBURVNUX1JSX1NSQzJfRVFfREVTVCggdGVzdG51bSwgaW5zdCwgcmVzdWx0LCB2YWwxLCB2YWwyICkgXAorICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDIsIHJlc3VsdCwgXAorICAgICAgbGkgIHgxLCBNQVNLX1hMRU4odmFsMSk7IFwKKyAgICAgIGxpICB4MiwgTUFTS19YTEVOKHZhbDIpOyBcCisgICAgICBpbnN0IHgyLCB4MSwgeDI7IFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9SUl9TUkMxMl9FUV9ERVNUKCB0ZXN0bnVtLCBpbnN0LCByZXN1bHQsIHZhbDEgKSBcCisgICAgVEVTVF9DQVNFKCB0ZXN0bnVtLCB4MSwgcmVzdWx0LCBcCisgICAgICBsaSAgeDEsIE1BU0tfWExFTih2YWwxKTsgXAorICAgICAgaW5zdCB4MSwgeDEsIHgxOyBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfUlJfREVTVF9CWVBBU1MoIHRlc3RudW0sIG5vcF9jeWNsZXMsIGluc3QsIHJlc3VsdCwgdmFsMSwgdmFsMiApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHg2LCByZXN1bHQsIFwKKyAgICAgIGxpICB4NCwgMDsgXAorMTogICAgbGkgIHgxLCBNQVNLX1hMRU4odmFsMSk7IFwKKyAgICAgIGxpICB4MiwgTUFTS19YTEVOKHZhbDIpOyBcCisgICAgICBpbnN0IHgzLCB4MSwgeDI7IFwKKyAgICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIG5vcF9jeWNsZXMgXAorICAgICAgYWRkaSAgeDYsIHgzLCAwOyBcCisgICAgICBhZGRpICB4NCwgeDQsIDE7IFwKKyAgICAgIGxpICB4NSwgMjsgXAorICAgICAgYm5lIHg0LCB4NSwgMWIgXAorICAgICkKKworI2RlZmluZSBURVNUX1JSX1NSQzEyX0JZUEFTUyggdGVzdG51bSwgc3JjMV9ub3BzLCBzcmMyX25vcHMsIGluc3QsIHJlc3VsdCwgdmFsMSwgdmFsMiApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgzLCByZXN1bHQsIFwKKyAgICAgIGxpICB4NCwgMDsgXAorMTogICAgbGkgIHgxLCBNQVNLX1hMRU4odmFsMSk7IFwKKyAgICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIHNyYzFfbm9wcyBcCisgICAgICBsaSAgeDIsIE1BU0tfWExFTih2YWwyKTsgXAorICAgICAgVEVTVF9JTlNFUlRfTk9QU18gIyMgc3JjMl9ub3BzIFwKKyAgICAgIGluc3QgeDMsIHgxLCB4MjsgXAorICAgICAgYWRkaSAgeDQsIHg0LCAxOyBcCisgICAgICBsaSAgeDUsIDI7IFwKKyAgICAgIGJuZSB4NCwgeDUsIDFiIFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9SUl9TUkMyMV9CWVBBU1MoIHRlc3RudW0sIHNyYzFfbm9wcywgc3JjMl9ub3BzLCBpbnN0LCByZXN1bHQsIHZhbDEsIHZhbDIgKSBcCisgICAgVEVTVF9DQVNFKCB0ZXN0bnVtLCB4MywgcmVzdWx0LCBcCisgICAgICBsaSAgeDQsIDA7IFwKKzE6ICAgIGxpICB4MiwgTUFTS19YTEVOKHZhbDIpOyBcCisgICAgICBURVNUX0lOU0VSVF9OT1BTXyAjIyBzcmMxX25vcHMgXAorICAgICAgbGkgIHgxLCBNQVNLX1hMRU4odmFsMSk7IFwKKyAgICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIHNyYzJfbm9wcyBcCisgICAgICBpbnN0IHgzLCB4MSwgeDI7IFwKKyAgICAgIGFkZGkgIHg0LCB4NCwgMTsgXAorICAgICAgbGkgIHg1LCAyOyBcCisgICAgICBibmUgeDQsIHg1LCAxYiBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfUlJfWkVST1NSQzEoIHRlc3RudW0sIGluc3QsIHJlc3VsdCwgdmFsICkgXAorICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDIsIHJlc3VsdCwgXAorICAgICAgbGkgeDEsIE1BU0tfWExFTih2YWwpOyBcCisgICAgICBpbnN0IHgyLCB4MCwgeDE7IFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9SUl9aRVJPU1JDMiggdGVzdG51bSwgaW5zdCwgcmVzdWx0LCB2YWwgKSBcCisgICAgVEVTVF9DQVNFKCB0ZXN0bnVtLCB4MiwgcmVzdWx0LCBcCisgICAgICBsaSB4MSwgTUFTS19YTEVOKHZhbCk7IFwKKyAgICAgIGluc3QgeDIsIHgxLCB4MDsgXAorICAgICkKKworI2RlZmluZSBURVNUX1JSX1pFUk9TUkMxMiggdGVzdG51bSwgaW5zdCwgcmVzdWx0ICkgXAorICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDEsIHJlc3VsdCwgXAorICAgICAgaW5zdCB4MSwgeDAsIHgwOyBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfUlJfWkVST0RFU1QoIHRlc3RudW0sIGluc3QsIHZhbDEsIHZhbDIgKSBcCisgICAgVEVTVF9DQVNFKCB0ZXN0bnVtLCB4MCwgMCwgXAorICAgICAgbGkgeDEsIE1BU0tfWExFTih2YWwxKTsgXAorICAgICAgbGkgeDIsIE1BU0tfWExFTih2YWwyKTsgXAorICAgICAgaW5zdCB4MCwgeDEsIHgyOyBcCisgICAgKQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGVzdCBtZW1vcnkgaW5zdHJ1Y3Rpb25zCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworI2RlZmluZSBURVNUX0xEX09QKCB0ZXN0bnVtLCBpbnN0LCByZXN1bHQsIG9mZnNldCwgYmFzZSApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgzLCByZXN1bHQsIFwKKyAgICAgIGxhICB4MSwgYmFzZTsgXAorICAgICAgaW5zdCB4Mywgb2Zmc2V0KHgxKTsgXAorICAgICkKKworI2RlZmluZSBURVNUX1NUX09QKCB0ZXN0bnVtLCBsb2FkX2luc3QsIHN0b3JlX2luc3QsIHJlc3VsdCwgb2Zmc2V0LCBiYXNlICkgXAorICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDMsIHJlc3VsdCwgXAorICAgICAgbGEgIHgxLCBiYXNlOyBcCisgICAgICBsaSAgeDIsIHJlc3VsdDsgXAorICAgICAgc3RvcmVfaW5zdCB4Miwgb2Zmc2V0KHgxKTsgXAorICAgICAgbG9hZF9pbnN0IHgzLCBvZmZzZXQoeDEpOyBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfTERfREVTVF9CWVBBU1MoIHRlc3RudW0sIG5vcF9jeWNsZXMsIGluc3QsIHJlc3VsdCwgb2Zmc2V0LCBiYXNlICkgXAordGVzdF8gIyMgdGVzdG51bTogXAorICAgIGxpICBURVNUTlVNLCB0ZXN0bnVtOyBcCisgICAgbGkgIHg0LCAwOyBcCisxOiAgbGEgIHgxLCBiYXNlOyBcCisgICAgaW5zdCB4Mywgb2Zmc2V0KHgxKTsgXAorICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIG5vcF9jeWNsZXMgXAorICAgIGFkZGkgIHg2LCB4MywgMDsgXAorICAgIGxpICB4MjksIHJlc3VsdDsgXAorICAgIGJuZSB4NiwgeDI5LCBmYWlsOyBcCisgICAgYWRkaSAgeDQsIHg0LCAxOyBcCisgICAgbGkgIHg1LCAyOyBcCisgICAgYm5lIHg0LCB4NSwgMWI7IFwKKworI2RlZmluZSBURVNUX0xEX1NSQzFfQllQQVNTKCB0ZXN0bnVtLCBub3BfY3ljbGVzLCBpbnN0LCByZXN1bHQsIG9mZnNldCwgYmFzZSApIFwKK3Rlc3RfICMjIHRlc3RudW06IFwKKyAgICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAorICAgIGxpICB4NCwgMDsgXAorMTogIGxhICB4MSwgYmFzZTsgXAorICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIG5vcF9jeWNsZXMgXAorICAgIGluc3QgeDMsIG9mZnNldCh4MSk7IFwKKyAgICBsaSAgeDI5LCByZXN1bHQ7IFwKKyAgICBibmUgeDMsIHgyOSwgZmFpbDsgXAorICAgIGFkZGkgIHg0LCB4NCwgMTsgXAorICAgIGxpICB4NSwgMjsgXAorICAgIGJuZSB4NCwgeDUsIDFiIFwKKworI2RlZmluZSBURVNUX1NUX1NSQzEyX0JZUEFTUyggdGVzdG51bSwgc3JjMV9ub3BzLCBzcmMyX25vcHMsIGxvYWRfaW5zdCwgc3RvcmVfaW5zdCwgcmVzdWx0LCBvZmZzZXQsIGJhc2UgKSBcCit0ZXN0XyAjIyB0ZXN0bnVtOiBcCisgICAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKKyAgICBsaSAgeDQsIDA7IFwKKzE6ICBsaSAgeDEsIHJlc3VsdDsgXAorICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIHNyYzFfbm9wcyBcCisgICAgbGEgIHgyLCBiYXNlOyBcCisgICAgVEVTVF9JTlNFUlRfTk9QU18gIyMgc3JjMl9ub3BzIFwKKyAgICBzdG9yZV9pbnN0IHgxLCBvZmZzZXQoeDIpOyBcCisgICAgbG9hZF9pbnN0IHgzLCBvZmZzZXQoeDIpOyBcCisgICAgbGkgIHgyOSwgcmVzdWx0OyBcCisgICAgYm5lIHgzLCB4MjksIGZhaWw7IFwKKyAgICBhZGRpICB4NCwgeDQsIDE7IFwKKyAgICBsaSAgeDUsIDI7IFwKKyAgICBibmUgeDQsIHg1LCAxYiBcCisKKyNkZWZpbmUgVEVTVF9TVF9TUkMyMV9CWVBBU1MoIHRlc3RudW0sIHNyYzFfbm9wcywgc3JjMl9ub3BzLCBsb2FkX2luc3QsIHN0b3JlX2luc3QsIHJlc3VsdCwgb2Zmc2V0LCBiYXNlICkgXAordGVzdF8gIyMgdGVzdG51bTogXAorICAgIGxpICBURVNUTlVNLCB0ZXN0bnVtOyBcCisgICAgbGkgIHg0LCAwOyBcCisxOiAgbGEgIHgyLCBiYXNlOyBcCisgICAgVEVTVF9JTlNFUlRfTk9QU18gIyMgc3JjMV9ub3BzIFwKKyAgICBsaSAgeDEsIHJlc3VsdDsgXAorICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIHNyYzJfbm9wcyBcCisgICAgc3RvcmVfaW5zdCB4MSwgb2Zmc2V0KHgyKTsgXAorICAgIGxvYWRfaW5zdCB4Mywgb2Zmc2V0KHgyKTsgXAorICAgIGxpICB4MjksIHJlc3VsdDsgXAorICAgIGJuZSB4MywgeDI5LCBmYWlsOyBcCisgICAgYWRkaSAgeDQsIHg0LCAxOyBcCisgICAgbGkgIHg1LCAyOyBcCisgICAgYm5lIHg0LCB4NSwgMWIgXAorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGVzdCBicmFuY2ggaW5zdHJ1Y3Rpb25zCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworI2RlZmluZSBURVNUX0JSMV9PUF9UQUtFTiggdGVzdG51bSwgaW5zdCwgdmFsMSApIFwKK3Rlc3RfICMjIHRlc3RudW06IFwKKyAgICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAorICAgIGxpICB4MSwgdmFsMTsgXAorICAgIGluc3QgeDEsIDJmOyBcCisgICAgYm5lIHgwLCBURVNUTlVNLCBmYWlsOyBcCisxOiAgYm5lIHgwLCBURVNUTlVNLCAzZjsgXAorMjogIGluc3QgeDEsIDFiOyBcCisgICAgYm5lIHgwLCBURVNUTlVNLCBmYWlsOyBcCiszOgorCisjZGVmaW5lIFRFU1RfQlIxX09QX05PVFRBS0VOKCB0ZXN0bnVtLCBpbnN0LCB2YWwxICkgXAordGVzdF8gIyMgdGVzdG51bTogXAorICAgIGxpICBURVNUTlVNLCB0ZXN0bnVtOyBcCisgICAgbGkgIHgxLCB2YWwxOyBcCisgICAgaW5zdCB4MSwgMWY7IFwKKyAgICBibmUgeDAsIFRFU1ROVU0sIDJmOyBcCisxOiAgYm5lIHgwLCBURVNUTlVNLCBmYWlsOyBcCisyOiAgaW5zdCB4MSwgMWI7IFwKKzM6CisKKyNkZWZpbmUgVEVTVF9CUjFfU1JDMV9CWVBBU1MoIHRlc3RudW0sIG5vcF9jeWNsZXMsIGluc3QsIHZhbDEgKSBcCit0ZXN0XyAjIyB0ZXN0bnVtOiBcCisgICAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKKyAgICBsaSAgeDQsIDA7IFwKKzE6ICBsaSAgeDEsIHZhbDE7IFwKKyAgICBURVNUX0lOU0VSVF9OT1BTXyAjIyBub3BfY3ljbGVzIFwKKyAgICBpbnN0IHgxLCBmYWlsOyBcCisgICAgYWRkaSAgeDQsIHg0LCAxOyBcCisgICAgbGkgIHg1LCAyOyBcCisgICAgYm5lIHg0LCB4NSwgMWIgXAorCisjZGVmaW5lIFRFU1RfQlIyX09QX1RBS0VOKCB0ZXN0bnVtLCBpbnN0LCB2YWwxLCB2YWwyICkgXAordGVzdF8gIyMgdGVzdG51bTogXAorICAgIGxpICBURVNUTlVNLCB0ZXN0bnVtOyBcCisgICAgbGkgIHgxLCB2YWwxOyBcCisgICAgbGkgIHgyLCB2YWwyOyBcCisgICAgaW5zdCB4MSwgeDIsIDJmOyBcCisgICAgYm5lIHgwLCBURVNUTlVNLCBmYWlsOyBcCisxOiAgYm5lIHgwLCBURVNUTlVNLCAzZjsgXAorMjogIGluc3QgeDEsIHgyLCAxYjsgXAorICAgIGJuZSB4MCwgVEVTVE5VTSwgZmFpbDsgXAorMzoKKworI2RlZmluZSBURVNUX0JSMl9PUF9OT1RUQUtFTiggdGVzdG51bSwgaW5zdCwgdmFsMSwgdmFsMiApIFwKK3Rlc3RfICMjIHRlc3RudW06IFwKKyAgICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAorICAgIGxpICB4MSwgdmFsMTsgXAorICAgIGxpICB4MiwgdmFsMjsgXAorICAgIGluc3QgeDEsIHgyLCAxZjsgXAorICAgIGJuZSB4MCwgVEVTVE5VTSwgMmY7IFwKKzE6ICBibmUgeDAsIFRFU1ROVU0sIGZhaWw7IFwKKzI6ICBpbnN0IHgxLCB4MiwgMWI7IFwKKzM6CisKKyNkZWZpbmUgVEVTVF9CUjJfU1JDMTJfQllQQVNTKCB0ZXN0bnVtLCBzcmMxX25vcHMsIHNyYzJfbm9wcywgaW5zdCwgdmFsMSwgdmFsMiApIFwKK3Rlc3RfICMjIHRlc3RudW06IFwKKyAgICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAorICAgIGxpICB4NCwgMDsgXAorMTogIGxpICB4MSwgdmFsMTsgXAorICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIHNyYzFfbm9wcyBcCisgICAgbGkgIHgyLCB2YWwyOyBcCisgICAgVEVTVF9JTlNFUlRfTk9QU18gIyMgc3JjMl9ub3BzIFwKKyAgICBpbnN0IHgxLCB4MiwgZmFpbDsgXAorICAgIGFkZGkgIHg0LCB4NCwgMTsgXAorICAgIGxpICB4NSwgMjsgXAorICAgIGJuZSB4NCwgeDUsIDFiIFwKKworI2RlZmluZSBURVNUX0JSMl9TUkMyMV9CWVBBU1MoIHRlc3RudW0sIHNyYzFfbm9wcywgc3JjMl9ub3BzLCBpbnN0LCB2YWwxLCB2YWwyICkgXAordGVzdF8gIyMgdGVzdG51bTogXAorICAgIGxpICBURVNUTlVNLCB0ZXN0bnVtOyBcCisgICAgbGkgIHg0LCAwOyBcCisxOiAgbGkgIHgyLCB2YWwyOyBcCisgICAgVEVTVF9JTlNFUlRfTk9QU18gIyMgc3JjMV9ub3BzIFwKKyAgICBsaSAgeDEsIHZhbDE7IFwKKyAgICBURVNUX0lOU0VSVF9OT1BTXyAjIyBzcmMyX25vcHMgXAorICAgIGluc3QgeDEsIHgyLCBmYWlsOyBcCisgICAgYWRkaSAgeDQsIHg0LCAxOyBcCisgICAgbGkgIHg1LCAyOyBcCisgICAgYm5lIHg0LCB4NSwgMWIgXAorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGVzdCBqdW1wIGluc3RydWN0aW9ucworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyNkZWZpbmUgVEVTVF9KUl9TUkMxX0JZUEFTUyggdGVzdG51bSwgbm9wX2N5Y2xlcywgaW5zdCApIFwKK3Rlc3RfICMjIHRlc3RudW06IFwKKyAgICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAorICAgIGxpICB4NCwgMDsgXAorMTogIGxhICB4NiwgMmY7IFwKKyAgICBURVNUX0lOU0VSVF9OT1BTXyAjIyBub3BfY3ljbGVzIFwKKyAgICBpbnN0IHg2OyBcCisgICAgYm5lIHgwLCBURVNUTlVNLCBmYWlsOyBcCisyOiAgYWRkaSAgeDQsIHg0LCAxOyBcCisgICAgbGkgIHg1LCAyOyBcCisgICAgYm5lIHg0LCB4NSwgMWIgXAorCisjZGVmaW5lIFRFU1RfSkFMUl9TUkMxX0JZUEFTUyggdGVzdG51bSwgbm9wX2N5Y2xlcywgaW5zdCApIFwKK3Rlc3RfICMjIHRlc3RudW06IFwKKyAgICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAorICAgIGxpICB4NCwgMDsgXAorMTogIGxhICB4NiwgMmY7IFwKKyAgICBURVNUX0lOU0VSVF9OT1BTXyAjIyBub3BfY3ljbGVzIFwKKyAgICBpbnN0IHgxOSwgeDYsIDA7IFwKKyAgICBibmUgeDAsIFRFU1ROVU0sIGZhaWw7IFwKKzI6ICBhZGRpICB4NCwgeDQsIDE7IFwKKyAgICBsaSAgeDUsIDI7IFwKKyAgICBibmUgeDQsIHg1LCAxYiBcCisKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFJWNjRVRiBNQUNST1MKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGVzdHMgZmxvYXRpbmctcG9pbnQgaW5zdHJ1Y3Rpb25zCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworI2RlZmluZSBxTmFOZiAwZjo3ZmMwMDAwMAorI2RlZmluZSBzTmFOZiAwZjo3ZjgwMDAwMQorI2RlZmluZSBxTmFOIDBkOjdmZjgwMDAwMDAwMDAwMDAKKyNkZWZpbmUgc05hTiAwZDo3ZmYwMDAwMDAwMDAwMDAxCisKKyNkZWZpbmUgVEVTVF9GUF9PUF9TX0lOVEVSTkFMKCB0ZXN0bnVtLCBmbGFncywgcmVzdWx0LCB2YWwxLCB2YWwyLCB2YWwzLCBjb2RlLi4uICkgXAordGVzdF8gIyMgdGVzdG51bTogXAorICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAorICBsYSAgYTAsIHRlc3RfICMjIHRlc3RudW0gIyMgX2RhdGEgO1wKKyAgZmx3IGYwLCAwKGEwKTsgXAorICBmbHcgZjEsIDQoYTApOyBcCisgIGZsdyBmMiwgOChhMCk7IFwKKyAgbHcgIGEzLCAxMihhMCk7IFwKKyAgY29kZTsgXAorICBmc2ZsYWdzIGExLCB4MDsgXAorICBsaSBhMiwgZmxhZ3M7IFwKKyAgYm5lIGEwLCBhMywgZmFpbDsgXAorICBibmUgYTEsIGEyLCBmYWlsOyBcCisgIGogMmY7IFwKKyAgLmJhbGlnbiA0OyBcCisgIC5kYXRhOyBcCisgIHRlc3RfICMjIHRlc3RudW0gIyMgX2RhdGE6IFwKKyAgLmZsb2F0IHZhbDE7IFwKKyAgLmZsb2F0IHZhbDI7IFwKKyAgLmZsb2F0IHZhbDM7IFwKKyAgLnJlc3VsdDsgXAorICAudGV4dDsgXAorMjoKKworI2RlZmluZSBURVNUX0ZQX09QX0RfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCByZXN1bHQsIHZhbDEsIHZhbDIsIHZhbDMsIGNvZGUuLi4gKSBcCit0ZXN0XyAjIyB0ZXN0bnVtOiBcCisgIGxpICBURVNUTlVNLCB0ZXN0bnVtOyBcCisgIGxhICBhMCwgdGVzdF8gIyMgdGVzdG51bSAjIyBfZGF0YSA7XAorICBmbGQgZjAsIDAoYTApOyBcCisgIGZsZCBmMSwgOChhMCk7IFwKKyAgZmxkIGYyLCAxNihhMCk7IFwKKyAgbGQgIGEzLCAyNChhMCk7IFwKKyAgY29kZTsgXAorICBmc2ZsYWdzIGExLCB4MDsgXAorICBsaSBhMiwgZmxhZ3M7IFwKKyAgYm5lIGEwLCBhMywgZmFpbDsgXAorICBibmUgYTEsIGEyLCBmYWlsOyBcCisgIGogMmY7IFwKKyAgLmRhdGE7IFwKKyAgLmJhbGlnbiA4OyBcCisgIHRlc3RfICMjIHRlc3RudW0gIyMgX2RhdGE6IFwKKyAgLmRvdWJsZSB2YWwxOyBcCisgIC5kb3VibGUgdmFsMjsgXAorICAuZG91YmxlIHZhbDM7IFwKKyAgLnJlc3VsdDsgXAorICAudGV4dDsgXAorMjoKKworI2RlZmluZSBURVNUX0ZDVlRfU19EKCB0ZXN0bnVtLCByZXN1bHQsIHZhbDEgKSBcCisgIFRFU1RfRlBfT1BfRF9JTlRFUk5BTCggdGVzdG51bSwgMCwgZG91YmxlIHJlc3VsdCwgdmFsMSwgMC4wLCAwLjAsIFwKKyAgICAgICAgICAgICAgICAgICAgZmN2dC5zLmQgZjMsIGYwOyBmY3Z0LmQucyBmMywgZjM7IGZtdi54LmQgYTAsIGYzKQorCisjZGVmaW5lIFRFU1RfRkNWVF9EX1MoIHRlc3RudW0sIHJlc3VsdCwgdmFsMSApIFwKKyAgVEVTVF9GUF9PUF9TX0lOVEVSTkFMKCB0ZXN0bnVtLCAwLCBmbG9hdCByZXN1bHQsIHZhbDEsIDAuMCwgMC4wLCBcCisgICAgICAgICAgICAgICAgICAgIGZjdnQuZC5zIGYzLCBmMDsgZmN2dC5zLmQgZjMsIGYzOyBmbXYueC5zIGEwLCBmMykKKworI2RlZmluZSBURVNUX0ZQX09QMV9TKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxICkgXAorICBURVNUX0ZQX09QX1NfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBmbG9hdCByZXN1bHQsIHZhbDEsIDAuMCwgMC4wLCBcCisgICAgICAgICAgICAgICAgICAgIGluc3QgZjMsIGYwOyBmbXYueC5zIGEwLCBmMykKKworI2RlZmluZSBURVNUX0ZQX09QMV9EKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxICkgXAorICBURVNUX0ZQX09QX0RfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBkb3VibGUgcmVzdWx0LCB2YWwxLCAwLjAsIDAuMCwgXAorICAgICAgICAgICAgICAgICAgICBpbnN0IGYzLCBmMDsgZm12LnguZCBhMCwgZjMpCisKKyNkZWZpbmUgVEVTVF9GUF9PUDFfU19EV09SRF9SRVNVTFQoIHRlc3RudW0sIGluc3QsIGZsYWdzLCByZXN1bHQsIHZhbDEgKSBcCisgIFRFU1RfRlBfT1BfU19JTlRFUk5BTCggdGVzdG51bSwgZmxhZ3MsIGR3b3JkIHJlc3VsdCwgdmFsMSwgMC4wLCAwLjAsIFwKKyAgICAgICAgICAgICAgICAgICAgaW5zdCBmMywgZjA7IGZtdi54LnMgYTAsIGYzKQorCisjZGVmaW5lIFRFU1RfRlBfT1AxX0RfRFdPUkRfUkVTVUxUKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxICkgXAorICBURVNUX0ZQX09QX0RfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBkd29yZCByZXN1bHQsIHZhbDEsIDAuMCwgMC4wLCBcCisgICAgICAgICAgICAgICAgICAgIGluc3QgZjMsIGYwOyBmbXYueC5kIGEwLCBmMykKKworI2RlZmluZSBURVNUX0ZQX09QMl9TKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxLCB2YWwyICkgXAorICBURVNUX0ZQX09QX1NfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBmbG9hdCByZXN1bHQsIHZhbDEsIHZhbDIsIDAuMCwgXAorICAgICAgICAgICAgICAgICAgICBpbnN0IGYzLCBmMCwgZjE7IGZtdi54LnMgYTAsIGYzKQorCisjZGVmaW5lIFRFU1RfRlBfT1AyX0QoIHRlc3RudW0sIGluc3QsIGZsYWdzLCByZXN1bHQsIHZhbDEsIHZhbDIgKSBcCisgIFRFU1RfRlBfT1BfRF9JTlRFUk5BTCggdGVzdG51bSwgZmxhZ3MsIGRvdWJsZSByZXN1bHQsIHZhbDEsIHZhbDIsIDAuMCwgXAorICAgICAgICAgICAgICAgICAgICBpbnN0IGYzLCBmMCwgZjE7IGZtdi54LmQgYTAsIGYzKQorCisjZGVmaW5lIFRFU1RfRlBfT1AzX1MoIHRlc3RudW0sIGluc3QsIGZsYWdzLCByZXN1bHQsIHZhbDEsIHZhbDIsIHZhbDMgKSBcCisgIFRFU1RfRlBfT1BfU19JTlRFUk5BTCggdGVzdG51bSwgZmxhZ3MsIGZsb2F0IHJlc3VsdCwgdmFsMSwgdmFsMiwgdmFsMywgXAorICAgICAgICAgICAgICAgICAgICBpbnN0IGYzLCBmMCwgZjEsIGYyOyBmbXYueC5zIGEwLCBmMykKKworI2RlZmluZSBURVNUX0ZQX09QM19EKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxLCB2YWwyLCB2YWwzICkgXAorICBURVNUX0ZQX09QX0RfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBkb3VibGUgcmVzdWx0LCB2YWwxLCB2YWwyLCB2YWwzLCBcCisgICAgICAgICAgICAgICAgICAgIGluc3QgZjMsIGYwLCBmMSwgZjI7IGZtdi54LmQgYTAsIGYzKQorCisjZGVmaW5lIFRFU1RfRlBfSU5UX09QX1MoIHRlc3RudW0sIGluc3QsIGZsYWdzLCByZXN1bHQsIHZhbDEsIHJtICkgXAorICBURVNUX0ZQX09QX1NfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCB3b3JkIHJlc3VsdCwgdmFsMSwgMC4wLCAwLjAsIFwKKyAgICAgICAgICAgICAgICAgICAgaW5zdCBhMCwgZjAsIHJtKQorCisjZGVmaW5lIFRFU1RfRlBfSU5UX09QX0QoIHRlc3RudW0sIGluc3QsIGZsYWdzLCByZXN1bHQsIHZhbDEsIHJtICkgXAorICBURVNUX0ZQX09QX0RfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBkd29yZCByZXN1bHQsIHZhbDEsIDAuMCwgMC4wLCBcCisgICAgICAgICAgICAgICAgICAgIGluc3QgYTAsIGYwLCBybSkKKworI2RlZmluZSBURVNUX0ZQX0NNUF9PUF9TKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxLCB2YWwyICkgXAorICBURVNUX0ZQX09QX1NfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCB3b3JkIHJlc3VsdCwgdmFsMSwgdmFsMiwgMC4wLCBcCisgICAgICAgICAgICAgICAgICAgIGluc3QgYTAsIGYwLCBmMSkKKworI2RlZmluZSBURVNUX0ZQX0NNUF9PUF9EKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxLCB2YWwyICkgXAorICBURVNUX0ZQX09QX0RfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBkd29yZCByZXN1bHQsIHZhbDEsIHZhbDIsIDAuMCwgXAorICAgICAgICAgICAgICAgICAgICBpbnN0IGEwLCBmMCwgZjEpCisKKyNkZWZpbmUgVEVTVF9GQ0xBU1NfUyh0ZXN0bnVtLCBjb3JyZWN0LCBpbnB1dCkgXAorICBURVNUX0NBU0UodGVzdG51bSwgYTAsIGNvcnJlY3QsIGxpIGEwLCBpbnB1dDsgZm12LnMueCBmYTAsIGEwOyBcCisgICAgICAgICAgICAgICAgICAgIGZjbGFzcy5zIGEwLCBmYTApCisKKyNkZWZpbmUgVEVTVF9GQ0xBU1NfRCh0ZXN0bnVtLCBjb3JyZWN0LCBpbnB1dCkgXAorICBURVNUX0NBU0UodGVzdG51bSwgYTAsIGNvcnJlY3QsIGxpIGEwLCBpbnB1dDsgZm12LmQueCBmYTAsIGEwOyBcCisgICAgICAgICAgICAgICAgICAgIGZjbGFzcy5kIGEwLCBmYTApCisKKyNkZWZpbmUgVEVTVF9JTlRfRlBfT1BfUyggdGVzdG51bSwgaW5zdCwgcmVzdWx0LCB2YWwxICkgXAordGVzdF8gIyMgdGVzdG51bTogXAorICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAorICBsYSAgYTAsIHRlc3RfICMjIHRlc3RudW0gIyMgX2RhdGEgO1wKKyAgbHcgIGEzLCAwKGEwKTsgXAorICBsaSAgYTAsIHZhbDE7IFwKKyAgaW5zdCBmMCwgYTA7IFwKKyAgZnNmbGFncyB4MDsgXAorICBmbXYueC5zIGEwLCBmMDsgXAorICBibmUgYTAsIGEzLCBmYWlsOyBcCisgIGogMWY7IFwKKyAgLmJhbGlnbiA0OyBcCisgIHRlc3RfICMjIHRlc3RudW0gIyMgX2RhdGE6IFwKKyAgLmZsb2F0IHJlc3VsdDsgXAorMToKKworI2RlZmluZSBURVNUX0lOVF9GUF9PUF9EKCB0ZXN0bnVtLCBpbnN0LCByZXN1bHQsIHZhbDEgKSBcCit0ZXN0XyAjIyB0ZXN0bnVtOiBcCisgIGxpICBURVNUTlVNLCB0ZXN0bnVtOyBcCisgIGxhICBhMCwgdGVzdF8gIyMgdGVzdG51bSAjIyBfZGF0YSA7XAorICBsZCAgYTMsIDAoYTApOyBcCisgIGxpICBhMCwgdmFsMTsgXAorICBpbnN0IGYwLCBhMDsgXAorICBmc2ZsYWdzIHgwOyBcCisgIGZtdi54LmQgYTAsIGYwOyBcCisgIGJuZSBhMCwgYTMsIGZhaWw7IFwKKyAgaiAxZjsgXAorICAuYmFsaWduIDg7IFwKKyAgdGVzdF8gIyMgdGVzdG51bSAjIyBfZGF0YTogXAorICAuZG91YmxlIHJlc3VsdDsgXAorMToKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFBhc3MgYW5kIGZhaWwgY29kZSAoYXNzdW1lcyB0ZXN0IG51bSBpcyBpbiBURVNUTlVNKQorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyNkZWZpbmUgVEVTVF9QQVNTRkFJTCBcCisgICAgICAgIGJuZSB4MCwgVEVTVE5VTSwgcGFzczsgXAorZmFpbDogXAorICAgICAgICBSVlRFU1RfRkFJTDsgXAorcGFzczogXAorICAgICAgICBSVlRFU1RfUEFTUyBcCisKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3QgZGF0YSBzZWN0aW9uCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworI2RlZmluZSBURVNUX0RBVEEKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvZmlybXdhcmUvc2NfcHJpbnQuYyBiL3Zlcmlsb2cvZHYvZmlybXdhcmUvc2NfcHJpbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzM2ZDQyCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9maXJtd2FyZS9zY19wcmludC5jCkBAIC0wLDAgKzEsMjk2IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEsIERpbmVzaCBBbm5heXlhICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgICAgICAgIC8vLy8KKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gICAgICAgLy8vLworLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlICAgIC8vLy8KKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsICAgICAgLy8vLworLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuLy8vCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kICAgIC8vLy8KKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4gICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSAic2NfcHJpbnQuaCIKKworI2RlZmluZSBTQ19TSU1fT1VUUE9SVCAoMHhmMDAwMDAwMCkKKyNkZWZpbmUgQ0hBUl9CSVQgKDgpCisKK3N0YXRpYyB2b2lkCitzY19wdXRzKGxvbmcgc3RyLCBsb25nIHN0cmxlbikgeworCXZvbGF0aWxlIGNoYXIgKm91dF9wdHIgPSAodm9sYXRpbGUgY2hhciopU0NfU0lNX09VVFBPUlQ7CisJY29uc3QgY2hhciAqaW5fcHRyID0gKGNvbnN0IGNoYXIqKXN0cjsKKwlmb3IgKGxvbmcgbGVuID0gc3RybGVuOyBsZW4gPiAwOyAtLWxlbikKKwkgICpvdXRfcHRyID0gKmluX3B0cisrOworfQorCisjdW5kZWYgcHV0Y2hhcgoraW50CitwdXRjaGFyKGludCBjaCkgeworCXN0YXRpYyBfX3RocmVhZCBjaGFyIGJ1Zls2NF0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg2NCkpKTsKKyAgICBzdGF0aWMgX190aHJlYWQgaW50IGJ1ZmxlbiA9IDA7CisKKyAgICBidWZbYnVmbGVuKytdID0gY2g7CisKKwlpZiAoIGNoID09ICdcbicgfHwgYnVmbGVuID09IHNpemVvZihidWYpICkgeworICAgICAgICBzY19wdXRzKChsb25nKWJ1ZiwgYnVmbGVuKTsKKyAgICAgICAgYnVmbGVuID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3ByaW50Zl9wdXRjaChpbnQgY2gsIHZvaWQqKiBkYXRhKQoreworICAgIHB1dGNoYXIoY2gpOworfQorCitzdGF0aWMgdm9pZAorcHJpbnQoY29uc3QgY2hhciAqc3RyKQoreworICBzY19wdXRzKChsb25nKXN0ciwgc3RybGVuKHN0cikpOworfQorCisKK3N0YXRpYyBsb25nIGxvbmcKK2dldGludCh2YV9saXN0ICphcCwgaW50IGxmbGFnKQoreworICAgIGlmICggbGZsYWcgPj0gMiApCisgICAgICAgIHJldHVybiB2YV9hcmcoKmFwLCBsb25nIGxvbmcpOworICAgIGVsc2UgaWYgKCBsZmxhZyApCisgICAgICAgIHJldHVybiB2YV9hcmcoKmFwLCBsb25nKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiB2YV9hcmcoKmFwLCBpbnQpOworfQorCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcKK2dldHVpbnQodmFfbGlzdCAqYXAsIGludCBsZmxhZykKK3sKKyAgICBpZiAoIGxmbGFnID49IDIgKQorICAgICAgICByZXR1cm4gdmFfYXJnKCphcCwgdW5zaWduZWQgbG9uZyBsb25nKTsKKyAgICBlbHNlIGlmICggbGZsYWcgKQorICAgICAgICByZXR1cm4gdmFfYXJnKCphcCwgdW5zaWduZWQgbG9uZyk7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gdmFfYXJnKCphcCwgdW5zaWduZWQgaW50KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitwcmludG51bSh2b2lkKCpwdXRjaCkoaW50LCB2b2lkKiopLAordm9pZCAqKnB1dGRhdCwKK3Vuc2lnbmVkIGxvbmcgbG9uZyBudW0sCit1bnNpZ25lZCBiYXNlLAoraW50IHdpZHRoLAoraW50IHBhZGMsCitpbnQgaGV4X0EpCit7CisgICAgdW5zaWduZWQgZGlnc1tzaXplb2YobnVtKSAqIENIQVJfQklUXTsKKyAgICBpbnQgcG9zID0gMDsKKworICAgIGZvciAoIDs7ICkgeworICAgICAgICBkaWdzW3BvcysrXSA9IG51bSAlIGJhc2U7CisgICAgICAgIGlmICggbnVtIDwgYmFzZSApCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgbnVtIC89IGJhc2U7CisgICAgfQorCisgICAgd2hpbGUgKCB3aWR0aC0tID4gcG9zICkKKyAgICAgICAgcHV0Y2gocGFkYywgcHV0ZGF0KTsKKworICAgIHdoaWxlICggcG9zLS0gPiAwICkKKyAgICAgICAgcHV0Y2goZGlnc1twb3NdICsgKGRpZ3NbcG9zXSA+PSAxMCA/IGhleF9BIC0gMTAgOiAnMCcpLCBwdXRkYXQpOworfQorCitzdGF0aWMgdm9pZAordnByaW50Zm10KHZvaWQoKnB1dGNoKShpbnQsIHZvaWQqKiksIHZvaWQgKipwdXRkYXQsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcCkKK3sKKyAgICByZWdpc3RlciBjb25zdCBjaGFyKiBwOworICAgIGNvbnN0IGNoYXIqIGxhc3RfZm10OworICAgIHJlZ2lzdGVyIGludCBjaDsKKyAgICBpbnQgZXJyOworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBudW07CisgICAgaW50IGJhc2U7CisgICAgaW50IGxmbGFnOworICAgIGludCB3aWR0aDsKKyAgICBpbnQgcHJlY2lzaW9uOworICAgIGludCBhbHRmbGFnOworICAgIGNoYXIgcGFkYzsKKyAgICBpbnQgaGV4X0EgPSAnYSc7CisgICAgZm9yICggOzsgKSB7CisgICAgICAgIHdoaWxlICggKGNoID0gKih1bnNpZ25lZCBjaGFyICopZm10KSAhPSAnJScgKSB7CisgICAgICAgICAgICBpZiAoIGNoID09ICdcMCcgKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICsrZm10OworICAgICAgICAgICAgcHV0Y2goY2gsIHB1dGRhdCk7CisgICAgICAgIH0KKyAgICAgICAgKytmbXQ7CisKKyAgICAgICAgLy8gUHJvY2VzcyBhICUtZXNjYXBlIHNlcXVlbmNlCisgICAgICAgIGxhc3RfZm10ID0gZm10OworICAgICAgICBwYWRjID0gJyAnOworICAgICAgICB3aWR0aCA9IC0xOworICAgICAgICBwcmVjaXNpb24gPSAtMTsKKyAgICAgICAgbGZsYWcgPSAwOworICAgICAgICBhbHRmbGFnID0gMDsKKworcmVzd2l0Y2g6CisgICAgICAgIHN3aXRjaCAoIGNoID0gKih1bnNpZ25lZCBjaGFyICopZm10KysgKSB7CisgICAgICAgICAgICAvLyBmbGFnIHRvIHBhZCBvbiB0aGUgcmlnaHQKKyAgICAgICAgICAgIGNhc2UgJy0nOgorICAgICAgICAgICAgICAgIHBhZGMgPSAnLSc7CisgICAgICAgICAgICAgICAgZ290byByZXN3aXRjaDsKKworICAgICAgICAgICAgICAgIC8vIGZsYWcgdG8gcGFkIHdpdGggMCdzIGluc3RlYWQgb2Ygc3BhY2VzCisgICAgICAgICAgICBjYXNlICcwJzoKKyAgICAgICAgICAgICAgICBwYWRjID0gJzAnOworICAgICAgICAgICAgICAgIGdvdG8gcmVzd2l0Y2g7CisKKyAgICAgICAgICAgICAgICAvLyB3aWR0aCBmaWVsZAorICAgICAgICAgICAgY2FzZSAnMSc6CisgICAgICAgICAgICBjYXNlICcyJzoKKyAgICAgICAgICAgIGNhc2UgJzMnOgorICAgICAgICAgICAgY2FzZSAnNCc6CisgICAgICAgICAgICBjYXNlICc1JzoKKyAgICAgICAgICAgIGNhc2UgJzYnOgorICAgICAgICAgICAgY2FzZSAnNyc6CisgICAgICAgICAgICBjYXNlICc4JzoKKyAgICAgICAgICAgIGNhc2UgJzknOgorICAgICAgICAgICAgICAgIGZvciAoIHByZWNpc2lvbiA9IDA7OyArK2ZtdCApIHsKKyAgICAgICAgICAgICAgICAgICAgcHJlY2lzaW9uID0gcHJlY2lzaW9uICogMTAgKyBjaCAtICcwJzsKKyAgICAgICAgICAgICAgICAgICAgY2ggPSAqZm10OworICAgICAgICAgICAgICAgICAgICBpZiAoIGNoIDwgJzAnIHx8IGNoID4gJzknICkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBnb3RvIHByb2Nlc3NfcHJlY2lzaW9uOworCisgICAgICAgICAgICBjYXNlICcqJzoKKyAgICAgICAgICAgICAgICBwcmVjaXNpb24gPSB2YV9hcmcoYXAsIGludCk7CisgICAgICAgICAgICAgICAgZ290byBwcm9jZXNzX3ByZWNpc2lvbjsKKworICAgICAgICAgICAgY2FzZSAnLic6CisgICAgICAgICAgICAgICAgaWYgKCB3aWR0aCA8IDAgKQorICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IDA7CisgICAgICAgICAgICAgICAgZ290byByZXN3aXRjaDsKKworICAgICAgICAgICAgY2FzZSAnIyc6CisgICAgICAgICAgICAgICAgYWx0ZmxhZyA9IDE7CisgICAgICAgICAgICAgICAgZ290byByZXN3aXRjaDsKKworcHJvY2Vzc19wcmVjaXNpb246CisgICAgICAgICAgICAgICAgaWYgKCB3aWR0aCA8IDAgKSB7CisgICAgICAgICAgICAgICAgICAgIHdpZHRoID0gcHJlY2lzaW9uOworICAgICAgICAgICAgICAgICAgICBwcmVjaXNpb24gPSAtMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZ290byByZXN3aXRjaDsKKworICAgICAgICAgICAgICAgIC8vIGxvbmcgZmxhZyAoZG91YmxlZCBmb3IgbG9uZyBsb25nKQorICAgICAgICAgICAgY2FzZSAnbCc6CisgICAgICAgICAgICAgICAgbGZsYWcrKzsKKyAgICAgICAgICAgICAgICBnb3RvIHJlc3dpdGNoOworCisgICAgICAgICAgICAgICAgLy8gY2hhcmFjdGVyCisgICAgICAgICAgICBjYXNlICdjJzoKKyAgICAgICAgICAgICAgICBwdXRjaCh2YV9hcmcoYXAsIGludCksIHB1dGRhdCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAvLyBzdHJpbmcKKyAgICAgICAgICAgIGNhc2UgJ3MnOgorICAgICAgICAgICAgICAgIGlmICggKHAgPSB2YV9hcmcoYXAsIGNoYXIgKikpID09IE5VTEwgKQorICAgICAgICAgICAgICAgICAgICBwID0gIihudWxsKSI7CisgICAgICAgICAgICAgICAgaWYgKCB3aWR0aCA+IDAgJiYgcGFkYyAhPSAnLScgKQorICAgICAgICAgICAgICAgICAgICBmb3IgKCB3aWR0aCAtPSBzdHJubGVuKHAsIHByZWNpc2lvbik7IHdpZHRoID4gMDsgd2lkdGgtLSApCisgICAgICAgICAgICAgICAgICAgICAgICBwdXRjaChwYWRjLCBwdXRkYXQpOworICAgICAgICAgICAgICAgIGZvciAoIDsgKGNoID0gKnApICE9ICdcMCcgJiYgKHByZWNpc2lvbiA8IDAgfHwgLS1wcmVjaXNpb24gPj0gMCk7IHdpZHRoLS0gKSB7CisgICAgICAgICAgICAgICAgICAgIHB1dGNoKGNoLCBwdXRkYXQpOworICAgICAgICAgICAgICAgICAgICBwKys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZvciAoIDsgd2lkdGggPiAwOyB3aWR0aC0tICkKKyAgICAgICAgICAgICAgICAgICAgcHV0Y2goJyAnLCBwdXRkYXQpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgLy8gKHNpZ25lZCkgZGVjaW1hbAorICAgICAgICAgICAgY2FzZSAnZCc6CisgICAgICAgICAgICAgICAgbnVtID0gZ2V0aW50KCZhcCwgbGZsYWcpOworICAgICAgICAgICAgICAgIGlmICggKGxvbmcgbG9uZyludW0gPCAwICkgeworICAgICAgICAgICAgICAgICAgICBwdXRjaCgnLScsIHB1dGRhdCk7CisgICAgICAgICAgICAgICAgICAgIG51bSA9IC0obG9uZyBsb25nKW51bTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYmFzZSA9IDEwOworICAgICAgICAgICAgICAgIGdvdG8gc2lnbmVkX251bWJlcjsKKworICAgICAgICAgICAgY2FzZSAnZic6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvLyAjaWZuZGVmIG5vcGZsb2F0CisgICAgICAgICAgICAgICAgICAgIC8vIGRvdWJsZSBudW0gPSBnZXRkb3VibGUoJmFwLCBsZmxhZyk7CisgICAgICAgICAgICAgICAgICAgIC8vIHByaW50ZG91YmxlRihwdXRjaCwgcHV0ZGF0LCBudW0sIHdpZHRoLCBwcmVjaXNpb24sIHBhZGMpOworICAgICAgICAgICAgICAgICAgICAvLyAjZW5kaWYKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAvLyB1bnNpZ25lZCBkZWNpbWFsCisgICAgICAgICAgICBjYXNlICd1JzoKKyAgICAgICAgICAgICAgICBiYXNlID0gMTA7CisgICAgICAgICAgICAgICAgZ290byB1bnNpZ25lZF9udW1iZXI7CisKKyAgICAgICAgICAgICAgICAvLyAodW5zaWduZWQpIG9jdGFsCisgICAgICAgICAgICBjYXNlICdvJzoKKyAgICAgICAgICAgICAgICAvLyBzaG91bGQgZG8gc29tZXRoaW5nIHdpdGggcGFkZGluZyBzbyBpdCdzIGFsd2F5cyAzIG9jdGl0cworICAgICAgICAgICAgICAgIGJhc2UgPSA4OworICAgICAgICAgICAgICAgIGdvdG8gdW5zaWduZWRfbnVtYmVyOworCisgICAgICAgICAgICAgICAgLy8gcG9pbnRlcgorICAgICAgICAgICAgY2FzZSAncCc6CisgICAgICAgICAgICAgICAgLy8gc3RhdGljX2Fzc2VydChzaXplb2YobG9uZykgPT0gc2l6ZW9mKHZvaWQqKSk7CisgICAgICAgICAgICAgICAgbGZsYWcgPSAxOworICAgICAgICAgICAgICAgIHB1dGNoKCcwJywgcHV0ZGF0KTsKKyAgICAgICAgICAgICAgICBwdXRjaCgneCcsIHB1dGRhdCk7CisgICAgICAgICAgICAgICAgLyogZmFsbCB0aHJvdWdoIHRvICd4JyAqLworCisgICAgICAgICAgICAgICAgLy8gKHVuc2lnbmVkKSBoZXhhZGVjaW1hbAorICAgICAgICAgICAgY2FzZSAneCc6CisgICAgICAgICAgICAgICAgaGV4X0EgPSAnYSc7CisgICAgICAgICAgICAgICAgYmFzZSA9IDE2OworICAgICAgICAgICAgICAgIGdvdG8gdW5zaWduZWRfbnVtYmVyOworCisgICAgICAgICAgICBjYXNlICdYJzoKKyAgICAgICAgICAgICAgICBoZXhfQSA9ICdBJzsKKyAgICAgICAgICAgICAgICBiYXNlID0gMTY7Cit1bnNpZ25lZF9udW1iZXI6CisgICAgICAgICAgICAgICAgbnVtID0gZ2V0dWludCgmYXAsIGxmbGFnKTsKK3NpZ25lZF9udW1iZXI6CisgICAgICAgICAgICAgICAgcHJpbnRudW0ocHV0Y2gsIHB1dGRhdCwgbnVtLCBiYXNlLCB3aWR0aCwgcGFkYywgaGV4X0EpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgLy8gZXNjYXBlZCAnJScgY2hhcmFjdGVyCisgICAgICAgICAgICBjYXNlICclJzoKKyAgICAgICAgICAgICAgICBwdXRjaChjaCwgcHV0ZGF0KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIC8vIHVucmVjb2duaXplZCBlc2NhcGUgc2VxdWVuY2UgLSBqdXN0IHByaW50IGl0IGxpdGVyYWxseQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBwdXRjaCgnJScsIHB1dGRhdCk7CisgICAgICAgICAgICAgICAgZm10ID0gbGFzdF9mbXQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2ludAorc2NfcHJpbnRmKGNvbnN0IGNoYXIqIGZtdCwgLi4uKQoreworICAgIHZhX2xpc3QgYXA7CisgICAgdmFfc3RhcnQoYXAsIGZtdCk7CisKKyAgICB2cHJpbnRmbXQocHJpbnRmX3B1dGNoLCBOVUxMLCBmbXQsIGFwKTsKKworICAgIHZhX2VuZChhcCk7CisgICAgcmV0dXJuIDA7IC8vIGluY29ycmVjdCByZXR1cm4gdmFsdWUsIGJ1dCB3aG8gY2FyZXMsIGFueXdheT8KK30KZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvZmlybXdhcmUvc2NfcHJpbnQuaCBiL3Zlcmlsb2cvZHYvZmlybXdhcmUvc2NfcHJpbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWQ2YjYxCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9maXJtd2FyZS9zY19wcmludC5oCkBAIC0wLDAgKzEsMjQgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAgICAgICAgLy8vLworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAgICAgICAvLy8vCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgICAgLy8vLworLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgICAgICAvLy8vCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4vLy8KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgICAgLy8vLworLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPiAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyNpZm5kZWYgU0NfUFJJTlRfSAorI2RlZmluZSBTQ19QUklOVF9ICisKK2V4dGVybiBpbnQgc2NfcHJpbnRmKGNvbnN0IGNoYXIqIGZtdCwgLi4uKTsKKworI2VuZGlmIC8vIFNDX1BSSU5UX0gKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvZmlybXdhcmUvc2NfdGVzdC5oIGIvdmVyaWxvZy9kdi9maXJtd2FyZS9zY190ZXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI2NDQ4YQotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvZmlybXdhcmUvc2NfdGVzdC5oCkBAIC0wLDAgKzEsNjIgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyAgICAgICAgLy8vLworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiAgICAgICAvLy8vCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgICAgLy8vLworLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywgICAgICAvLy8vCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4vLy8KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgICAgLy8vLworLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPiAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyNpZm5kZWYgU0NfVEVTVF9ICisjZGVmaW5lIFNDX1RFU1RfSAorCisjaWYgZGVmaW5lZChfX0FTU0VNQkxFUl9fKQorLmFsdG1hY3JvCisKKy5tYWNybyB6ZXJvX2ludF9yZWcgcmVnbgorbXYgICB4XHJlZ24sIHplcm8KKy5lbmRtCisKKy5tYWNybyB6ZXJvX2ludF9yZWdzIHJlZ19maXJzdCwgcmVnX2xhc3QKKy5zZXQgcmVnbiwgXHJlZ19maXJzdAorLnJlcHQgXHJlZ19sYXN0IC0gXHJlZ19maXJzdCArIDEKK3plcm9faW50X3JlZyAlKHJlZ24pCisuc2V0IHJlZ24sIHJlZ24rMQorLmVuZHIKKy5lbmRtCisKKyNkZWZpbmUgcmVwb3J0X3Jlc3VsdHMocmVzdWx0KSBcCitsaSAgYTAsIHJlc3VsdDsgIFwKK2xhIHQwLCBzY19leGl0OyAgXAoranIJIHQwOworCisucHVzaHNlY3Rpb24gc2NfdGVzdF9zZWN0aW9uLCAiYXgiCitzY19leGl0OiBsYSB0MCwgU0lNX0VYSVQ7IGpyIHQwOworLmJhbGlnbiAzMgorLnBvcHNlY3Rpb24KKyNkZWZpbmUgc2NfcGFzcyByZXBvcnRfcmVzdWx0cygweDApCisjZGVmaW5lIHNjX2ZhaWwgcmVwb3J0X3Jlc3VsdHMoMHgxKQorCisjZWxzZQorCitleHRlcm4gdm9pZCBzY19leGl0KHVuc2lnbmVkIHJlc3VsdCwgdW5zaWduZWQgcmVzMCwgdW5zaWduZWQgcmVzMSwgdW5zaWduZWQgcmVzMiwgdW5zaWduZWQgcmVzMykKKyAgICBfX2F0dHJpYnV0ZV9fICgobm9pbmxpbmUsIG5vcmV0dXJuKSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAgX19hdHRyaWJ1dGVfXyAoKG5vcmV0dXJuKSkKK3JlcG9ydF9yZXN1bHRzKHVuc2lnbmVkIHJlc3VsdCwgdW5zaWduZWQgcmVzMCwgdW5zaWduZWQgcmVzMSwgdW5zaWduZWQgcmVzMiwgdW5zaWduZWQgcmVzMykKK3sKKyAgICBzY19leGl0KHJlc3VsdCwgcmVzMCwgcmVzMSwgcmVzMiwgcmVzMyk7Cit9CisKKyNlbmRpZgorCisjZW5kaWYgLy8gU0NfVEVTVF9ICmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L2Zpcm13YXJlL3ljcjFfc3BlY2lmaWMuaCBiL3Zlcmlsb2cvZHYvZmlybXdhcmUveWNyMV9zcGVjaWZpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjOGM1ODMKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L2Zpcm13YXJlL3ljcjFfc3BlY2lmaWMuaApAQCAtMCwwICsxLDM4IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEsIERpbmVzaCBBbm5heXlhICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgICAgICAgIC8vLy8KKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gICAgICAgLy8vLworLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlICAgIC8vLy8KKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsICAgICAgLy8vLworLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuLy8vCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kICAgIC8vLy8KKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4gICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisjaWZuZGVmIF9fWUNSMV9fU1BFQ0lGSUMKKyNkZWZpbmUgX19ZQ1IxX19TUEVDSUZJQworCisjZGVmaW5lIG1jb3VudGVuICAgICAgICAweDdFMAorCisvLyBNZW1vcnktbWFwcGVkIHJlZ2lzdGVycworI2RlZmluZSBtdGltZV9jdHJsICAgICAgMHgwQzQ5MDAwMAorI2RlZmluZSBtdGltZV9kaXYgICAgICAgMHgwQzQ5MDAwNAorI2RlZmluZSBtdGltZSAgICAgICAgICAgMHgwQzQ5MDAwOAorI2RlZmluZSBtdGltZWggICAgICAgICAgMHgwQzQ5MDAwQworI2RlZmluZSBtdGltZWNtcCAgICAgICAgMHgwQzQ5MDAxMAorI2RlZmluZSBtdGltZWNtcGggICAgICAgMHgwQzQ5MDAxNAorCisjZGVmaW5lIFlDUjFfTVRJTUVfQ1RSTF9FTiAgICAgICAgICAwCisjZGVmaW5lIFlDUjFfTVRJTUVfQ1RSTF9DTEtTUkMgICAgICAxCisKKyNkZWZpbmUgWUNSMV9NVElNRV9DVFJMX1dSX01BU0sgICAgIDB4MworI2RlZmluZSBZQ1IxX01USU1FX0RJVl9XUl9NQVNLICAgICAgMHgzRkYKKworI2VuZGlmIC8vIF9ZQ1IxX19TUEVDSUZJQwpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9tb2RlbC9pMmNfc2xhdmVfbW9kZWwudiBiL3Zlcmlsb2cvZHYvbW9kZWwvaTJjX3NsYXZlX21vZGVsLnYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODNiOGY4YgotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvbW9kZWwvaTJjX3NsYXZlX21vZGVsLnYKQEAgLTAsMCArMSwzNzMgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSAsIFJpY2hhcmQgSGVydmVpbGxlCisvLyAKKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogQ3JlYXRlZCBieSBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBXSVNIQk9ORSByZXYuQjIgY29tcGxpYW50IHN5bnRoZXNpemFibGUgSTJDIFNsYXZlIG1vZGVsICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBBdXRob3JzOiBSaWNoYXJkIEhlcnZlaWxsZSAocmljaGFyZEBhc2ljcy53cykgd3d3LmFzaWNzLndzIC8vLy8KKy8vLy8gICAgICAgICAgIEpvaG4gU2hlYWhhbiAoanJzaGVhaGFuQG9wdHVzaG9tZS5jb20uYXUpICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBEb3dubG9hZGVkIGZyb206IGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9wcm9qZWN0cy9pMmMvICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gQ29weXJpZ2h0IChDKSAyMDAxLDIwMDIgUmljaGFyZCBIZXJ2ZWlsbGUgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICByaWNoYXJkQGFzaWNzLndzICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgLy8vLworLy8vLyByZXN0cmljdGlvbiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgICAvLy8vCisvLy8vIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSBhbmQgdGhhdCBhbnkgZGVyaXZhdGl2ZSB3b3JrIGNvbnRhaW5zIC8vLy8KKy8vLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgICAgIC8vLy8KKy8vLy8gRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEICAgLy8vLworLy8vLyBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgICAvLy8vCisvLy8vIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiAgICAgIC8vLy8KKy8vLy8gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsICAgICAgICAgLy8vLworLy8vLyBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAgICAvLy8vCisvLy8vIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSAgIC8vLy8KKy8vLy8gR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiAgICAgICAgLy8vLworLy8vLyBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GICAvLy8vCisvLy8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgIC8vLy8KKy8vLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCAgLy8vLworLy8vLyBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgICAgICAgICAvLy8vCisvLy8vIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKy8vICBDVlMgTG9nCisvLworLy8gICRJZDogaTJjX3NsYXZlX21vZGVsLnYsdiAxLjcgMjAwNi0wOS0wNCAwOTowODo1MSByaGVydmVpbGxlIEV4cCAkCisvLworLy8gICREYXRlOiAyMDA2LTA5LTA0IDA5OjA4OjUxICQKKy8vICAkUmV2aXNpb246IDEuNyAkCisvLyAgJEF1dGhvcjogcmhlcnZlaWxsZSAkCisvLyAgJExvY2tlcjogICQKKy8vICAkU3RhdGU6IEV4cCAkCisvLworLy8gQ2hhbmdlIEhpc3Rvcnk6CisvLyAgICAgICAgICAgICAgICRMb2c6IG5vdCBzdXBwb3J0ZWQgYnkgY3ZzMnN2biAkCisvLyAgICAgICAgICAgICAgIFJldmlzaW9uIDEuNiAgMjAwNS8wMi8yOCAxMTozMzo0OCAgcmhlcnZlaWxsZQorLy8gICAgICAgICAgICAgICBGaXhlZCBUc3U6c3RhIHRpbWluZyBjaGVjay4KKy8vICAgICAgICAgICAgICAgQWRkZWQgVGhkOnN0YSB0aW1pbmcgY2hlY2suCisvLworLy8gICAgICAgICAgICAgICBSZXZpc2lvbiAxLjUgIDIwMDMvMTIvMDUgMTE6MDU6MTkgIHJoZXJ2ZWlsbGUKKy8vICAgICAgICAgICAgICAgRml4ZWQgc2xhdmUgYWRkcmVzcyBNU0I9JzEnIGJ1ZworLy8KKy8vICAgICAgICAgICAgICAgUmV2aXNpb24gMS40ICAyMDAzLzA5LzExIDA4OjI1OjM3ICByaGVydmVpbGxlCisvLyAgICAgICAgICAgICAgIEZpeGVkIGEgYnVnIGluIHRoZSB0aW1pbmcgc2VjdGlvbi4gQ2hhbmdlZCAndHN0X3NjbCcgaW50byAndHN0X3N0bycuCisvLworLy8gICAgICAgICAgICAgICBSZXZpc2lvbiAxLjMgIDIwMDIvMTAvMzAgMTg6MTE6MDYgIHJoZXJ2ZWlsbGUKKy8vICAgICAgICAgICAgICAgQWRkZWQgdGltaW5nIHRlc3RzIHRvIGkyY19tb2RlbC4KKy8vICAgICAgICAgICAgICAgVXBkYXRlZCB0ZXN0YmVuY2guCisvLworLy8gICAgICAgICAgICAgICBSZXZpc2lvbiAxLjIgIDIwMDIvMDMvMTcgMTA6MjY6MzggIHJoZXJ2ZWlsbGUKKy8vICAgICAgICAgICAgICAgRml4ZWQgc29tZSByYWNlIGNvbmRpdGlvbnMgaW4gdGhlIGkyYy1zbGF2ZSBtb2RlbC4KKy8vICAgICAgICAgICAgICAgQWRkZWQgZGVidWcgaW5mb3JtYXRpb24uCisvLyAgICAgICAgICAgICAgIEFkZGVkIGhlYWRlcnMuCisvLworCisKK21vZHVsZSBpMmNfc2xhdmVfbW9kZWwgKHNjbCwgc2RhKTsKKworCS8vCisJLy8gcGFyYW1ldGVycworCS8vCisJcGFyYW1ldGVyIEkyQ19BRFIgPSA3J2IwMDFfMDAwMDsKKworCS8vCisJLy8gaW5wdXQgJiYgb3V0cHVzCisJLy8KKwlpbnB1dCBzY2w7CisJaW5vdXQgc2RhOworCisJLy8KKwkvLyBWYXJpYWJsZSBkZWNsYXJhdGlvbgorCS8vCisJd2lyZSBkZWJ1ZyA9IDEnYjE7CisKKwlyZWcgWzc6MF0gbWVtIFsyNTU6MF07IC8vIGluaXRpYXRlIG1lbW9yeQorCXJlZyBbNzowXSBtZW1fYWRyOyAgIC8vIG1lbW9yeSBhZGRyZXNzCisJcmVnIFs3OjBdIG1lbV9kbzsgICAgLy8gbWVtb3J5IGRhdGEgb3V0cHV0CisKKwlyZWcgc3RhLCBkX3N0YTsKKwlyZWcgc3RvLCBkX3N0bzsKKworCXJlZyBbNzowXSBzcjsgICAgICAgIC8vIDhiaXQgc2hpZnQgcmVnaXN0ZXIKKwlyZWcgICAgICAgcnc7ICAgICAgICAvLyByZWFkL3dyaXRlIGRpcmVjdGlvbgorCisJd2lyZSAgICAgIG15X2FkcjsgICAgLy8gbXkgYWRkcmVzcyBjYWxsZWQgPz8KKwl3aXJlICAgICAgaTJjX3Jlc2V0OyAvLyBpMmMtc3RhdGVtYWNoaW5lIHJlc2V0CisJcmVnIFsyOjBdIGJpdF9jbnQ7ICAgLy8gM2JpdCBkb3duY291bnRlcgorCXdpcmUgICAgICBhY2NfZG9uZTsgIC8vIDhiaXRzIHRyYW5zZmVyZWQKKwlyZWcgICAgICAgbGQ7ICAgICAgICAvLyBsb2FkIGRvd25jb3VudGVyCisKKwlyZWcgICAgICAgc2RhX287ICAgICAvLyBzZGEtZHJpdmUgbGV2ZWwKKwl3aXJlICAgICAgc2RhX2RseTsgICAvLyBkZWxheWVkIHZlcnNpb24gb2Ygc2RhCisKKwkvLyBzdGF0ZW1hY2hpbmUgZGVjbGFyYXRpb24KKwlwYXJhbWV0ZXIgaWRsZSAgICAgICAgPSAzJ2IwMDA7CisJcGFyYW1ldGVyIHNsYXZlX2FjayAgID0gMydiMDAxOworCXBhcmFtZXRlciBnZXRfbWVtX2FkciA9IDMnYjAxMDsKKwlwYXJhbWV0ZXIgZ21hX2FjayAgICAgPSAzJ2IwMTE7CisJcGFyYW1ldGVyIGRhdGEgICAgICAgID0gMydiMTAwOworCXBhcmFtZXRlciBkYXRhX2FjayAgICA9IDMnYjEwMTsKKworCXJlZyBbMjowXSBzdGF0ZTsgLy8gc3lub3BzeXMgZW51bV9zdGF0ZQorCisJLy8KKwkvLyBtb2R1bGUgYm9keQorCS8vCisKKwlpbml0aWFsCisJYmVnaW4KKwkgICBzZGFfbyA9IDEnYjE7CisJICAgc3RhdGUgPSBpZGxlOworCWVuZAorCisJLy8gZ2VuZXJhdGUgc2hpZnQgcmVnaXN0ZXIKKwlhbHdheXMgQChwb3NlZGdlIHNjbCkKKwkgIHNyIDw9ICMxIHtzcls2OjBdLHNkYX07CisKKwkvL2RldGVjdCBteV9hZGRyZXNzCisJYXNzaWduIG15X2FkciA9IChzcls3OjFdID09IEkyQ19BRFIpOworCS8vIEZJWE1FOiBUaGlzIHNob3VsZCBub3QgYmUgYSBnZW5lcmljIGFzc2lnbiwgYnV0IHJhdGhlcgorCS8vIHF1YWxpZmllZCBvbiBhZGRyZXNzIHRyYW5zZmVyIHBoYXNlIGFuZCBwcm9iYWJseSByZXNldCBieSBzdG9wCisKKwkvL2dlbmVyYXRlIGJpdC1jb3VudGVyCisJYWx3YXlzIEAocG9zZWRnZSBzY2wpCisJICBpZihsZCkKKwkgICAgYml0X2NudCA8PSAjMSAzJ2IxMTE7CisJICBlbHNlCisJICAgIGJpdF9jbnQgPD0gIzEgYml0X2NudCAtIDMnaDE7CisKKwkvL2dlbmVyYXRlIGFjY2VzcyBkb25lIHNpZ25hbAorCWFzc2lnbiBhY2NfZG9uZSA9ICEofGJpdF9jbnQpOworCisJLy8gZ2VuZXJhdGUgZGVsYXllZCB2ZXJzaW9uIG9mIHNkYQorCS8vIHRoaXMgbW9kZWwgYXNzdW1lcyBhIGhvbGQgdGltZSBmb3Igc2RhIGFmdGVyIHRoZSBmYWxsaW5nIGVkZ2Ugb2Ygc2NsLgorCS8vIEFjY29yZGluZyB0byB0aGUgUGhpbGxpcHMgaTJjIHNwZWMsIHRoZXJlIHMvYiBhIDAgbnMgaG9sZCB0aW1lIGZvciBzZGEKKwkvLyB3aXRoIHJlZ2FyZHMgdG8gc2NsLiBJZiB0aGUgZGF0YSBjaGFuZ2VzIGNvaW5jaWRlbnQgd2l0aCB0aGUgY2xvY2ssIHRoZQorCS8vIGFja25vd2xlZGdlIGlzIG1pc3NlZAorCS8vIEZpeCBieSBNaWNoYWVsIFNvc25vc2tpCisJYXNzaWduICMxIHNkYV9kbHkgPSBzZGE7CisKKworCS8vZGV0ZWN0IHN0YXJ0IGNvbmRpdGlvbgorCWFsd2F5cyBAKG5lZ2VkZ2Ugc2RhKQorCSAgaWYoc2NsKQorCSAgICBiZWdpbgorCSAgICAgICAgc3RhICAgPD0gIzEgMSdiMTsKKwkJZF9zdGEgPD0gIzEgMSdiMDsKKwkJc3RvICAgPD0gIzEgMSdiMDsKKworCSAgICAgICAgaWYoZGVidWcpCisJICAgICAgICAgICRkaXNwbGF5KCJERUJVRyBpMmNfc2xhdmU7IHN0YXJ0IGNvbmRpdGlvbiBkZXRlY3RlZCBhdCAldCIsICR0aW1lKTsKKwkgICAgZW5kCisJICBlbHNlCisJICAgIHN0YSA8PSAjMSAxJ2IwOworCisJYWx3YXlzIEAocG9zZWRnZSBzY2wpCisJICBkX3N0YSA8PSAjMSBzdGE7CisKKwkvLyBkZXRlY3Qgc3RvcCBjb25kaXRpb24KKwlhbHdheXMgQChwb3NlZGdlIHNkYSkKKwkgIGlmKHNjbCkKKwkgICAgYmVnaW4KKwkgICAgICAgc3RhIDw9ICMxIDEnYjA7CisJICAgICAgIHN0byA8PSAjMSAxJ2IxOworCisJICAgICAgIGlmKGRlYnVnKQorCSAgICAgICAgICRkaXNwbGF5KCJERUJVRyBpMmNfc2xhdmU7IHN0b3AgY29uZGl0aW9uIGRldGVjdGVkIGF0ICV0IiwgJHRpbWUpOworCSAgICBlbmQKKwkgIGVsc2UKKwkgICAgc3RvIDw9ICMxIDEnYjA7CisKKwkvL2dlbmVyYXRlIGkyY19yZXNldCBzaWduYWwKKwlhc3NpZ24gaTJjX3Jlc2V0ID0gc3RhIHx8IHN0bzsKKworCS8vIGdlbmVyYXRlIHN0YXRlbWFjaGluZQorCWFsd2F5cyBAKG5lZ2VkZ2Ugc2NsIG9yIHBvc2VkZ2Ugc3RvKQorCSAgaWYgKHN0byB8fCAoc3RhICYmICFkX3N0YSkgKQorCSAgICBiZWdpbgorCSAgICAgICAgc3RhdGUgPD0gIzEgaWRsZTsgLy8gcmVzZXQgc3RhdGVtYWNoaW5lCisKKwkgICAgICAgIHNkYV9vIDw9ICMxIDEnYjE7CisJICAgICAgICBsZCAgICA8PSAjMSAxJ2IxOworCSAgICBlbmQKKwkgIGVsc2UKKwkgICAgYmVnaW4KKwkgICAgICAgIC8vIGluaXRpYWwgc2V0dGluZ3MKKwkgICAgICAgIHNkYV9vIDw9ICMxIDEnYjE7CisJICAgICAgICBsZCAgICA8PSAjMSAxJ2IwOworCisJICAgICAgICBjYXNlKHN0YXRlKSAvLyBzeW5vcHN5cyBmdWxsX2Nhc2UgcGFyYWxsZWxfY2FzZQorCSAgICAgICAgICAgIGlkbGU6IC8vIGlkbGUgc3RhdGUKKwkgICAgICAgICAgICAgIGlmIChhY2NfZG9uZSAmJiBteV9hZHIpCisJICAgICAgICAgICAgICAgIGJlZ2luCisJICAgICAgICAgICAgICAgICAgICBzdGF0ZSA8PSAjMSBzbGF2ZV9hY2s7CisJICAgICAgICAgICAgICAgICAgICBydyA8PSAjMSBzclswXTsKKwkgICAgICAgICAgICAgICAgICAgIHNkYV9vIDw9ICMxIDEnYjA7IC8vIGdlbmVyYXRlIGkyY19hY2sKKworCSAgICAgICAgICAgICAgICAgICAgIzI7CisJICAgICAgICAgICAgICAgICAgICBpZihkZWJ1ZyAmJiBydykKKwkgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkoIkRFQlVHIGkyY19zbGF2ZTsgY29tbWFuZCBieXRlIHJlY2VpdmVkIChyZWFkKSBhdCAldCIsICR0aW1lKTsKKwkgICAgICAgICAgICAgICAgICAgIGlmKGRlYnVnICYmICFydykKKwkgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkoIkRFQlVHIGkyY19zbGF2ZTsgY29tbWFuZCBieXRlIHJlY2VpdmVkICh3cml0ZSkgYXQgJXQiLCAkdGltZSk7CisKKwkgICAgICAgICAgICAgICAgICAgIGlmKHJ3KQorCSAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorCSAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtX2RvIDw9ICMxIG1lbVttZW1fYWRyXTsKKworCSAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoZGVidWcpCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjMiAkZGlzcGxheSgiREVCVUcgaTJjX3NsYXZlOyBkYXRhIGJsb2NrIHJlYWQgJXggZnJvbSBhZGRyZXNzICV4ICgxKSIsIG1lbV9kbywgbWVtX2Fkcik7CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjMiAkZGlzcGxheSgiREVCVUcgaTJjX3NsYXZlOyBtZW1jaGVjayBbJXhdPSV4IiwgbWVtX2FkciwgbWVtW21lbV9hZHJdKTsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisJICAgICAgICAgICAgICAgICAgICAgIGVuZAorCSAgICAgICAgICAgICAgICBlbmQKKworCSAgICAgICAgICAgIHNsYXZlX2FjazoKKwkgICAgICAgICAgICAgIGJlZ2luCisJICAgICAgICAgICAgICAgICAgaWYocncpCisJICAgICAgICAgICAgICAgICAgICBiZWdpbgorCSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlIDw9ICMxIGRhdGE7CisJICAgICAgICAgICAgICAgICAgICAgICAgc2RhX28gPD0gIzEgbWVtX2RvWzddOworCSAgICAgICAgICAgICAgICAgICAgZW5kCisJICAgICAgICAgICAgICAgICAgZWxzZQorCSAgICAgICAgICAgICAgICAgICAgc3RhdGUgPD0gIzEgZ2V0X21lbV9hZHI7CisKKwkgICAgICAgICAgICAgICAgICBsZCAgICA8PSAjMSAxJ2IxOworCSAgICAgICAgICAgICAgZW5kCisKKwkgICAgICAgICAgICBnZXRfbWVtX2FkcjogLy8gd2FpdCBmb3IgbWVtb3J5IGFkZHJlc3MKKwkgICAgICAgICAgICAgIGlmKGFjY19kb25lKQorCSAgICAgICAgICAgICAgICBiZWdpbgorCSAgICAgICAgICAgICAgICAgICAgc3RhdGUgPD0gIzEgZ21hX2FjazsKKwkgICAgICAgICAgICAgICAgICAgIG1lbV9hZHIgPD0gIzEgc3I7IC8vIHN0b3JlIG1lbW9yeSBhZGRyZXNzCisJICAgICAgICAgICAgICAgICAgICBzZGFfbyA8PSAjMSAhKHNyIDw9IDI1NSk7IC8vIGdlbmVyYXRlIGkyY19hY2ssIGZvciB2YWxpZCBhZGRyZXNzCisKKwkgICAgICAgICAgICAgICAgICAgIGlmKGRlYnVnKQorCSAgICAgICAgICAgICAgICAgICAgICAjMSAkZGlzcGxheSgiREVCVUcgaTJjX3NsYXZlOyBhZGRyZXNzIHJlY2VpdmVkLiBhZHI9JXgsIGFjaz0lYiIsIHNyLCBzZGFfbyk7CisJICAgICAgICAgICAgICAgIGVuZAorCisJICAgICAgICAgICAgZ21hX2FjazoKKwkgICAgICAgICAgICAgIGJlZ2luCisJICAgICAgICAgICAgICAgICAgc3RhdGUgPD0gIzEgZGF0YTsKKwkgICAgICAgICAgICAgICAgICBsZCAgICA8PSAjMSAxJ2IxOworCSAgICAgICAgICAgICAgZW5kCisKKwkgICAgICAgICAgICBkYXRhOiAvLyByZWNlaXZlIG9yIGRyaXZlIGRhdGEKKwkgICAgICAgICAgICAgIGJlZ2luCisJICAgICAgICAgICAgICAgICAgaWYocncpCisJICAgICAgICAgICAgICAgICAgICBzZGFfbyA8PSAjMSBtZW1fZG9bN107CisKKwkgICAgICAgICAgICAgICAgICBpZihhY2NfZG9uZSkKKwkgICAgICAgICAgICAgICAgICAgIGJlZ2luCisJICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPD0gIzEgZGF0YV9hY2s7CisJICAgICAgICAgICAgICAgICAgICAgICAgbWVtX2FkciA8PSAjMiBtZW1fYWRyICsgOCdoMTsKKwkgICAgICAgICAgICAgICAgICAgICAgICBzZGFfbyA8PSAjMSAocncgJiYgKG1lbV9hZHIgPD0gMjU1KSApOyAvLyBzZW5kIGFjayBvbiB3cml0ZSwgcmVjZWl2ZSBhY2sgb24gcmVhZAorCisJICAgICAgICAgICAgICAgICAgICAgICAgaWYocncpCisJICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMzIG1lbV9kbyA8PSBtZW1bbWVtX2Fkcl07CisKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihkZWJ1ZykKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICM1ICRkaXNwbGF5KCJERUJVRyBpMmNfc2xhdmU7IGRhdGEgYmxvY2sgcmVhZCAleCBmcm9tIGFkZHJlc3MgJXggKDIpIiwgbWVtX2RvLCBtZW1fYWRyKTsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorCisJICAgICAgICAgICAgICAgICAgICAgICAgaWYoIXJ3KQorCSAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1bIG1lbV9hZHIgXSA8PSAjMSBzcjsgLy8gc3RvcmUgZGF0YSBpbiBtZW1vcnkKKworCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGRlYnVnKQorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIzIgJGRpc3BsYXkoIkRFQlVHIGkyY19zbGF2ZTsgZGF0YSBibG9jayB3cml0ZSAleCB0byBhZGRyZXNzICV4Iiwgc3IsIG1lbV9hZHIpOworCSAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisJICAgICAgICAgICAgICAgICAgICBlbmQKKwkgICAgICAgICAgICAgIGVuZAorCisJICAgICAgICAgICAgZGF0YV9hY2s6CisJICAgICAgICAgICAgICBiZWdpbgorCSAgICAgICAgICAgICAgICAgIGxkIDw9ICMxIDEnYjE7CisKKwkgICAgICAgICAgICAgICAgICBpZihydykKKwkgICAgICAgICAgICAgICAgICAgIGlmKHNyWzBdKSAvLyByZWFkIG9wZXJhdGlvbiAmJiBtYXN0ZXIgc2VuZCBOQUNLCisJICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisJICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA8PSAjMSBpZGxlOworCSAgICAgICAgICAgICAgICAgICAgICAgICAgc2RhX28gPD0gIzEgMSdiMTsKKwkgICAgICAgICAgICAgICAgICAgICAgZW5kCisJICAgICAgICAgICAgICAgICAgICBlbHNlCisJICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisJICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA8PSAjMSBkYXRhOworCSAgICAgICAgICAgICAgICAgICAgICAgICAgc2RhX28gPD0gIzEgbWVtX2RvWzddOworCSAgICAgICAgICAgICAgICAgICAgICBlbmQKKwkgICAgICAgICAgICAgICAgICBlbHNlCisJICAgICAgICAgICAgICAgICAgICBiZWdpbgorCSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlIDw9ICMxIGRhdGE7CisJICAgICAgICAgICAgICAgICAgICAgICAgc2RhX28gPD0gIzEgMSdiMTsKKwkgICAgICAgICAgICAgICAgICAgIGVuZAorCSAgICAgICAgICAgICAgZW5kCisKKwkgICAgICAgIGVuZGNhc2UKKwkgICAgZW5kCisKKwkvLyByZWFkIGRhdGEgZnJvbSBtZW1vcnkKKwlhbHdheXMgQChwb3NlZGdlIHNjbCkKKwkgIGlmKCFhY2NfZG9uZSAmJiBydykKKwkgICAgbWVtX2RvIDw9ICMxIHttZW1fZG9bNjowXSwgMSdiMX07IC8vIGluc2VydCAxJ2IxIGZvciBob3N0IGFjayBnZW5lcmF0aW9uCisKKwkvLyBnZW5lcmF0ZSB0cmktc3RhdGVzCisJYXNzaWduIHNkYSA9IHNkYV9vID8gMSdieiA6IDEnYjA7CisKKworCS8vCisJLy8gVGltaW5nIGNoZWNrcworCS8vCisKKwl3aXJlIHRzdF9zdG8gPSBzdG87CisJd2lyZSB0c3Rfc3RhID0gc3RhOworCisJc3BlY2lmeQorCSAgc3BlY3BhcmFtIG5vcm1hbF9zY2xfbG93ICA9IDQ3MDAsCisJICAgICAgICAgICAgbm9ybWFsX3NjbF9oaWdoID0gNDAwMCwKKwkgICAgICAgICAgICBub3JtYWxfdHN1X3N0YSAgPSA0NzAwLAorCSAgICAgICAgICAgIG5vcm1hbF90aGRfc3RhICA9IDQwMDAsCisJICAgICAgICAgICAgbm9ybWFsX3RzdV9zdG8gID0gNDAwMCwKKwkgICAgICAgICAgICBub3JtYWxfdGJ1ZiAgICAgPSA0NzAwLAorCisJICAgICAgICAgICAgZmFzdF9zY2xfbG93ICA9IDEzMDAsCisJICAgICAgICAgICAgZmFzdF9zY2xfaGlnaCA9ICA2MDAsCisJICAgICAgICAgICAgZmFzdF90c3Vfc3RhICA9IDEzMDAsCisJICAgICAgICAgICAgZmFzdF90aGRfc3RhICA9ICA2MDAsCisJICAgICAgICAgICAgZmFzdF90c3Vfc3RvICA9ICA2MDAsCisJICAgICAgICAgICAgZmFzdF90YnVmICAgICA9IDEzMDA7CisKKwkgICR3aWR0aChuZWdlZGdlIHNjbCwgbm9ybWFsX3NjbF9sb3cpOyAgLy8gc2NsIGxvdyB0aW1lCisJICAkd2lkdGgocG9zZWRnZSBzY2wsIG5vcm1hbF9zY2xfaGlnaCk7IC8vIHNjbCBoaWdoIHRpbWUKKworCSAgJHNldHVwKHBvc2VkZ2Ugc2NsLCBuZWdlZGdlIHNkYSAmJiYgc2NsLCBub3JtYWxfdHN1X3N0YSk7IC8vIHNldHVwIHN0YXJ0CisJICAkc2V0dXAobmVnZWRnZSBzZGEgJiYmIHNjbCwgbmVnZWRnZSBzY2wsIG5vcm1hbF90aGRfc3RhKTsgLy8gaG9sZCBzdGFydAorCSAgJHNldHVwKHBvc2VkZ2Ugc2NsLCBwb3NlZGdlIHNkYSAmJiYgc2NsLCBub3JtYWxfdHN1X3N0byk7IC8vIHNldHVwIHN0b3AKKworCSAgJHNldHVwKHBvc2VkZ2UgdHN0X3N0YSwgcG9zZWRnZSB0c3Rfc3RvLCBub3JtYWxfdGJ1Zik7IC8vIHN0b3AgdG8gc3RhcnQgdGltZQorCWVuZHNwZWNpZnkKKworZW5kbW9kdWxlCisKKwpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9tb2RlbC9tdDQ4bGM4bThhMi52IGIvdmVyaWxvZy9kdi9tb2RlbC9tdDQ4bGM4bThhMi52Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNmMzA5ZjEKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L21vZGVsL210NDhsYzhtOGEyLnYKQEAgLTAsMCArMSw5OTIgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAxMiBNaWNyb24gVGVjaG5vbG9neSwgSW5jLgorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IENyZWF0ZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKy8vCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqICAgIEZpbGUgTmFtZTogIE1UNDhMQzhNOEEyLlYgIAorKiAgICAgIFZlcnNpb246ICAwLjBmCisqICAgICAgICAgRGF0ZTogIEp1bHkgOHRoLCAxOTk5CisqICAgICAgICBNb2RlbDogIEJVUyBGdW5jdGlvbmFsCisqICAgIFNpbXVsYXRvcjogIE1vZGVsIFRlY2hub2xvZ3kgKFBDIHZlcnNpb24gNS4yZSBQRSkKKyoKKyogRGVwZW5kZW5jaWVzOiAgTm9uZQorKgorKiAgICAgICBBdXRob3I6ICBTb24gUC4gSHV5bmgKKyogICAgICAgIEVtYWlsOiAgc3BodXluaEBtaWNyb24uY29tCisqICAgICAgICBQaG9uZTogICgyMDgpIDM2OC0zODI1CisqICAgICAgQ29tcGFueTogIE1pY3JvbiBUZWNobm9sb2d5LCBJbmMuCisqICAgICAgICBNb2RlbDogIE1UNDhMQzhNMTZBMiAoMk1lZyB4IDggeCA0IEJhbmtzKQorKgorKiAgRGVzY3JpcHRpb246ICBNaWNyb24gMTI4TWIgU0RSQU0gVmVyaWxvZyBtb2RlbAorKgorKiAgIExpbWl0YXRpb246ICAtIERvZXNuJ3QgY2hlY2sgZm9yIDQwOTYgY3ljbGUgcmVmcmVzaAorKgorKiAgICAgICAgIE5vdGU6ICAtIFNldCBzaW11bGF0b3IgcmVzb2x1dGlvbiB0byAicHMiIGFjY3VyYWN5CisqICAgICAgICAgICAgICAgIC0gU2V0IERlYnVnID0gMCB0byBkaXNhYmxlICRkaXNwbGF5IG1lc3NhZ2VzCisqCisqICAgRGlzY2xhaW1lcjogIFRIRVNFIERFU0lHTlMgQVJFIFBST1ZJREVEICJBUyBJUyIgV0lUSCBOTyBXQVJSQU5UWSAKKyogICAgICAgICAgICAgICAgV0hBVFNPRVZFUiBBTkQgTUlDUk9OIFNQRUNJRklDQUxMWSBESVNDTEFJTVMgQU5ZIAorKiAgICAgICAgICAgICAgICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUgorKiAgICAgICAgICAgICAgICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IgQUdBSU5TVCBJTkZSSU5HRU1FTlQuCisqCisqICAgICAgICAgICAgICAgIENvcHlyaWdodCCpIDE5OTggTWljcm9uIFNlbWljb25kdWN0b3IgUHJvZHVjdHMsIEluYy4KKyogICAgICAgICAgICAgICAgQWxsIHJpZ2h0cyByZXNlYXJ2ZWQKKyoKKyogUmV2ICAgQXV0aG9yICAgICAgICAgIFBob25lICAgICAgICAgRGF0ZSAgICAgICAgQ2hhbmdlcworKiAtLS0tICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAtLS0tLS0tLS0tICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyogMC4wZiAgU29uIEh1eW5oICAgICAgIDIwOC0zNjgtMzgyNSAgMDcvMDgvMTk5OSAgLSBGaXggdFdSID0gMSBDbGsgKyA3LjUgbnMgKEF1dG8pCisqICAgICAgIE1pY3JvbiBUZWNobm9sb2d5IEluYy4gICAgICAgICAgICAgICAgICAgIC0gRml4IHRXUiA9IDE1IG5zIChNYW51YWwpCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gRml4IHRSUCAoQXV0b3ByZWNoYXJnZSB0byBBdXRvUmVmcmVzaCkKKyoKKyogMC4wYSAgU29uIEh1eW5oICAgICAgIDIwOC0zNjgtMzgyNSAgMDUvMTMvMTk5OCAgLSBGaXJzdCBSZWxlYXNlIChmcm9tIDY0TWIgcmV2IDAuMGUpCisqICAgICAgIE1pY3JvbiBUZWNobm9sb2d5IEluYy4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2B0aW1lc2NhbGUgMW5zIC8gMTAwcHMKKworbW9kdWxlIG10NDhsYzhtOGEyIChEcSwgQWRkciwgQmEsIENsaywgQ2tlLCBDc19uLCBSYXNfbiwgQ2FzX24sIFdlX24sIERxbSk7CisKKyAgICBwYXJhbWV0ZXIgYWRkcl9iaXRzID0gICAgICAxMjsKKyAgICBwYXJhbWV0ZXIgZGF0YV9iaXRzID0gICAgICA4OworICAgIHBhcmFtZXRlciBjb2xfYml0cyAgPSAgICAgICA5OworICAgIHBhcmFtZXRlciBtZW1fc2l6ZXMgPSAyMDk3MTUxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAyIE1lZworCisgICAgaW5vdXQgICAgIFtkYXRhX2JpdHMgLSAxIDogMF0gRHE7CisgICAgaW5wdXQgICAgIFthZGRyX2JpdHMgLSAxIDogMF0gQWRkcjsKKyAgICBpbnB1dCAgICAgICAgICAgICAgICAgWzEgOiAwXSBCYTsKKyAgICBpbnB1dCAgICAgICAgICAgICAgICAgICAgICAgICBDbGs7CisgICAgaW5wdXQgICAgICAgICAgICAgICAgICAgICAgICAgQ2tlOworICAgIGlucHV0ICAgICAgICAgICAgICAgICAgICAgICAgIENzX247CisgICAgaW5wdXQgICAgICAgICAgICAgICAgICAgICAgICAgUmFzX247CisgICAgaW5wdXQgICAgICAgICAgICAgICAgICAgICAgICAgQ2FzX247CisgICAgaW5wdXQgICAgICAgICAgICAgICAgICAgICAgICAgV2VfbjsKKyAgICBpbnB1dCAgICAgICAgICAgICAgICAgWzAgOiAwXSBEcW07CisKKyAgICByZWcgICAgICAgW2RhdGFfYml0cyAtIDEgOiAwXSBCYW5rMCBbMCA6IG1lbV9zaXplc107CisgICAgcmVnICAgICAgIFtkYXRhX2JpdHMgLSAxIDogMF0gQmFuazEgWzAgOiBtZW1fc2l6ZXNdOworICAgIHJlZyAgICAgICBbZGF0YV9iaXRzIC0gMSA6IDBdIEJhbmsyIFswIDogbWVtX3NpemVzXTsKKyAgICByZWcgICAgICAgW2RhdGFfYml0cyAtIDEgOiAwXSBCYW5rMyBbMCA6IG1lbV9zaXplc107CisKKyAgICByZWcgICAgICAgICAgICAgICAgICAgWzEgOiAwXSBCYW5rX2FkZHIgWzAgOiAzXTsgICAgICAgICAgICAgICAgLy8gQmFuayBBZGRyZXNzIFBpcGVsaW5lCisgICAgcmVnICAgICAgICBbY29sX2JpdHMgLSAxIDogMF0gQ29sX2FkZHIgWzAgOiAzXTsgICAgICAgICAgICAgICAgIC8vIENvbHVtbiBBZGRyZXNzIFBpcGVsaW5lCisgICAgcmVnICAgICAgICAgICAgICAgICAgIFszIDogMF0gQ29tbWFuZCBbMCA6IDNdOyAgICAgICAgICAgICAgICAgIC8vIENvbW1hbmQgT3BlcmF0aW9uIFBpcGVsaW5lCisgICAgcmVnICAgICAgICAgICAgICAgICAgIFswIDogMF0gRHFtX3JlZzAsIERxbV9yZWcxOyAgICAgICAgICAgICAgIC8vIERRTSBPcGVyYXRpb24gUGlwZWxpbmUKKyAgICByZWcgICAgICAgW2FkZHJfYml0cyAtIDEgOiAwXSBCMF9yb3dfYWRkciwgQjFfcm93X2FkZHIsIEIyX3Jvd19hZGRyLCBCM19yb3dfYWRkcjsKKworICAgIHJlZyAgICAgICBbYWRkcl9iaXRzIC0gMSA6IDBdIE1vZGVfcmVnOworICAgIHJlZyAgICAgICBbZGF0YV9iaXRzIC0gMSA6IDBdIERxX3JlZywgRHFfZHFtOworICAgIHJlZyAgICAgICAgW2NvbF9iaXRzIC0gMSA6IDBdIENvbF90ZW1wLCBCdXJzdF9jb3VudGVyOworCisgICAgcmVnICAgICAgICAgICAgICAgICAgICAgICAgICAgQWN0X2IwLCBBY3RfYjEsIEFjdF9iMiwgQWN0X2IzOyAgIC8vIEJhbmsgQWN0aXZhdGUKKyAgICByZWcgICAgICAgICAgICAgICAgICAgICAgICAgICBQY19iMCwgUGNfYjEsIFBjX2IyLCBQY19iMzsgICAgICAgLy8gQmFuayBQcmVjaGFyZ2UKKworICAgIHJlZyAgICAgICAgICAgICAgICAgICBbMSA6IDBdIEJhbmtfcHJlY2hhcmdlICAgICBbMCA6IDNdOyAgICAgICAvLyBQcmVjaGFyZ2UgQ29tbWFuZAorICAgIHJlZyAgICAgICAgICAgICAgICAgICAgICAgICAgIEExMF9wcmVjaGFyZ2UgICAgICBbMCA6IDNdOyAgICAgICAvLyBBZGRyWzEwXSA9IDEgKEFsbCBiYW5rcykKKyAgICByZWcgICAgICAgICAgICAgICAgICAgICAgICAgICBBdXRvX3ByZWNoYXJnZSAgICAgWzAgOiAzXTsgICAgICAgLy8gUlcgQXV0b1ByZWNoYXJnZSAoQmFuaykKKyAgICByZWcgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkX3ByZWNoYXJnZSAgICAgWzAgOiAzXTsgICAgICAgLy8gUiAgQXV0b1ByZWNoYXJnZQorICAgIHJlZyAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlX3ByZWNoYXJnZSAgICBbMCA6IDNdOyAgICAgICAvLyAgVyBBdXRvUHJlY2hhcmdlCisgICAgaW50ZWdlciAgICAgICAgICAgICAgICAgICAgICAgQ291bnRfcHJlY2hhcmdlICAgIFswIDogM107ICAgICAgIC8vIFJXIEF1dG9QcmVjaGFyZ2UgKENvdW50ZXIpCisgICAgcmVnICAgICAgICAgICAgICAgICAgICAgICAgICAgUldfaW50ZXJydXB0X3JlYWQgIFswIDogM107ICAgICAgIC8vIFJXIEludGVycnVwdCBSZWFkIHdpdGggQXV0byBQcmVjaGFyZ2UKKyAgICByZWcgICAgICAgICAgICAgICAgICAgICAgICAgICBSV19pbnRlcnJ1cHRfd3JpdGUgWzAgOiAzXTsgICAgICAgLy8gUlcgSW50ZXJydXB0IFdyaXRlIHdpdGggQXV0byBQcmVjaGFyZ2UKKworICAgIHJlZyAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGFfaW5fZW5hYmxlOworICAgIHJlZyAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGFfb3V0X2VuYWJsZTsKKworICAgIHJlZyAgICAgICAgICAgICAgICAgICBbMSA6IDBdIEJhbmssIFByZXZpb3VzX2Jhbms7CisgICAgcmVnICAgICAgIFthZGRyX2JpdHMgLSAxIDogMF0gUm93OworICAgIHJlZyAgICAgICAgW2NvbF9iaXRzIC0gMSA6IDBdIENvbCwgQ29sX2Jyc3Q7CisKKyAgICAvLyBJbnRlcm5hbCBzeXN0ZW0gY2xvY2sKKyAgICByZWcgICAgICAgICAgICAgICAgICAgICAgICAgICBDa2VaLCBTeXNfY2xrOworCisgICAgZXZlbnQgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfZGV0ZWN0ZWQ7CisKKyAgICAvLyBDb21tYW5kcyBEZWNvZGUKKyAgICB3aXJlICAgICAgQWN0aXZlX2VuYWJsZSAgICA9IH5Dc19uICYgflJhc19uICYgIENhc19uICYgIFdlX247CisgICAgd2lyZSAgICAgIEFyZWZfZW5hYmxlICAgICAgPSB+Q3NfbiAmIH5SYXNfbiAmIH5DYXNfbiAmICBXZV9uOworICAgIHdpcmUgICAgICBCdXJzdF90ZXJtICAgICAgID0gfkNzX24gJiAgUmFzX24gJiAgQ2FzX24gJiB+V2VfbjsKKyAgICB3aXJlICAgICAgTW9kZV9yZWdfZW5hYmxlICA9IH5Dc19uICYgflJhc19uICYgfkNhc19uICYgfldlX247CisgICAgd2lyZSAgICAgIFByZWNoX2VuYWJsZSAgICAgPSB+Q3NfbiAmIH5SYXNfbiAmICBDYXNfbiAmIH5XZV9uOworICAgIHdpcmUgICAgICBSZWFkX2VuYWJsZSAgICAgID0gfkNzX24gJiAgUmFzX24gJiB+Q2FzX24gJiAgV2VfbjsKKyAgICB3aXJlICAgICAgV3JpdGVfZW5hYmxlICAgICA9IH5Dc19uICYgIFJhc19uICYgfkNhc19uICYgfldlX247CisKKyAgICAvLyBCdXJzdCBMZW5ndGggRGVjb2RlCisgICAgd2lyZSAgICAgIEJ1cnN0X2xlbmd0aF8xICAgPSB+TW9kZV9yZWdbMl0gJiB+TW9kZV9yZWdbMV0gJiB+TW9kZV9yZWdbMF07CisgICAgd2lyZSAgICAgIEJ1cnN0X2xlbmd0aF8yICAgPSB+TW9kZV9yZWdbMl0gJiB+TW9kZV9yZWdbMV0gJiAgTW9kZV9yZWdbMF07CisgICAgd2lyZSAgICAgIEJ1cnN0X2xlbmd0aF80ICAgPSB+TW9kZV9yZWdbMl0gJiAgTW9kZV9yZWdbMV0gJiB+TW9kZV9yZWdbMF07CisgICAgd2lyZSAgICAgIEJ1cnN0X2xlbmd0aF84ICAgPSB+TW9kZV9yZWdbMl0gJiAgTW9kZV9yZWdbMV0gJiAgTW9kZV9yZWdbMF07CisKKyAgICAvLyBDQVMgTGF0ZW5jeSBEZWNvZGUKKyAgICB3aXJlICAgICAgQ2FzX2xhdGVuY3lfMiAgICA9IH5Nb2RlX3JlZ1s2XSAmICBNb2RlX3JlZ1s1XSAmIH5Nb2RlX3JlZ1s0XTsKKyAgICB3aXJlICAgICAgQ2FzX2xhdGVuY3lfMyAgICA9IH5Nb2RlX3JlZ1s2XSAmICBNb2RlX3JlZ1s1XSAmICBNb2RlX3JlZ1s0XTsKKworYGlmZGVmIFZFUkJPU0UKKyAgICB3aXJlICAgICAgRGVidWcgICAgICAgICAgICA9IDEnYjE7ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWJ1ZyBtZXNzYWdlcyA6IDEgPSBPbgorYGVsc2UKKyAgICB3aXJlICAgICAgRGVidWcgICAgICAgICAgICA9IDEnYjA7ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWJ1ZyBtZXNzYWdlcyA6IDEgPSBPbgorYGVuZGlmCisgICAgLy8gV3JpdGUgQnVyc3QgTW9kZQorICAgIHdpcmUgICAgICBXcml0ZV9idXJzdF9tb2RlID0gTW9kZV9yZWdbOV07CisKKyAgICB3aXJlICAgICAgRHFfY2hrICAgICAgICAgICA9IFN5c19jbGsgJiBEYXRhX2luX2VuYWJsZTsgICAgICAvLyBDaGVjayBzZXR1cC9ob2xkIHRpbWUgZm9yIERRCisKKyAgICBhc3NpZ24gICAgRHEgICAgICAgICAgICAgICA9IERxX3JlZzsgICAgICAgICAgICAgICAgICAgICAgICAvLyBEUSBidWZmZXIKKworICAgIC8vIENvbW1hbmRzIE9wZXJhdGlvbgorICAgIGBkZWZpbmUgICBBQ1QgICAgICAgMAorICAgIGBkZWZpbmUgICBOT1AgICAgICAgMQorICAgIGBkZWZpbmUgICBSRUFEICAgICAgMgorICAgIGBkZWZpbmUgICBSRUFEX0EgICAgMworICAgIGBkZWZpbmUgICBTRFJBTV9XUklURSAgICAgNAorICAgIGBkZWZpbmUgICBXUklURV9BICAgNQorICAgIGBkZWZpbmUgICBTRFJBTV9QUkVDSCAgICAgNgorICAgIGBkZWZpbmUgICBTRFJBTV9BX1JFRiAgICAgNworICAgIGBkZWZpbmUgICBTRFJBTV9CU1QgICAgICAgOAorICAgIGBkZWZpbmUgICBTRFJBTV9MTVIgICAgICAgOQorCisgICAgLy8gVGltaW5nIFBhcmFtZXRlcnMgZm9yIC03NSAoUEMxMzMpIGFuZCBDQVMgTGF0ZW5jeSA9IDIKKyAgICBwYXJhbWV0ZXIgdEFDICA9ICAgNi4wOworICAgIHBhcmFtZXRlciB0SFogID0gICA3LjA7CisgICAgcGFyYW1ldGVyIHRPSCAgPSAgIDIuNzsKKyAgICBwYXJhbWV0ZXIgdE1SRCA9ICAgMi4wOyAgICAgLy8gMiBDbGsgQ3ljbGVzCisgICAgcGFyYW1ldGVyIHRSQVMgPSAgNDQuMDsKKyAgICBwYXJhbWV0ZXIgdFJDICA9ICA2Ni4wOworICAgIHBhcmFtZXRlciB0UkNEID0gIDIwLjA7CisgICAgcGFyYW1ldGVyIHRSUCAgPSAgMjAuMDsKKyAgICBwYXJhbWV0ZXIgdFJSRCA9ICAxNS4wOworICAgIHBhcmFtZXRlciB0V1JhID0gICA3LjU7ICAgICAvLyBBMiBWZXJzaW9uIC0gQXV0byBwcmVjaGFyZ2UgbW9kZSBvbmx5ICgxIENsayArIDcuNSBucykKKyAgICBwYXJhbWV0ZXIgdFdScCA9ICAxNS4wOyAgICAgLy8gQTIgVmVyc2lvbiAtIFByZWNoYXJnZSBtb2RlIG9ubHkgKDE1IG5zKQorCisgICAgLy8gVGltaW5nIENoZWNrIHZhcmlhYmxlCisgICAgaW50ZWdlciAgIE1SRF9jaGs7CisgICAgaW50ZWdlciAgIFdSX2NvdW50ZXIgWzAgOiAzXTsKKyAgICB0aW1lICAgICAgV1JfY2hrIFswIDogM107CisgICAgdGltZSAgICAgIFJDX2NoaywgUlJEX2NoazsKKyAgICB0aW1lICAgICAgUkFTX2NoazAsIFJBU19jaGsxLCBSQVNfY2hrMiwgUkFTX2NoazM7CisgICAgdGltZSAgICAgIFJDRF9jaGswLCBSQ0RfY2hrMSwgUkNEX2NoazIsIFJDRF9jaGszOworICAgIHRpbWUgICAgICBSUF9jaGswLCBSUF9jaGsxLCBSUF9jaGsyLCBSUF9jaGszOworCisgICAgaW5pdGlhbCBiZWdpbgorICAgICAgCisgICAgICAgIERxX3JlZyA9IHtkYXRhX2JpdHN7MSdien19OworICAgICAgICB7RGF0YV9pbl9lbmFibGUsIERhdGFfb3V0X2VuYWJsZX0gPSAwOworICAgICAgICB7QWN0X2IwLCBBY3RfYjEsIEFjdF9iMiwgQWN0X2IzfSA9IDQnYjAwMDA7CisgICAgICAgIHtQY19iMCwgUGNfYjEsIFBjX2IyLCBQY19iM30gPSA0J2IwMDAwOworICAgICAgICB7V1JfY2hrWzBdLCBXUl9jaGtbMV0sIFdSX2Noa1syXSwgV1JfY2hrWzNdfSA9IDA7CisgICAgICAgIHtXUl9jb3VudGVyWzBdLCBXUl9jb3VudGVyWzFdLCBXUl9jb3VudGVyWzJdLCBXUl9jb3VudGVyWzNdfSA9IDA7CisgICAgICAgIHtSV19pbnRlcnJ1cHRfcmVhZFswXSwgUldfaW50ZXJydXB0X3JlYWRbMV0sIFJXX2ludGVycnVwdF9yZWFkWzJdLCBSV19pbnRlcnJ1cHRfcmVhZFszXX0gPSAwOworICAgICAgICB7UldfaW50ZXJydXB0X3dyaXRlWzBdLCBSV19pbnRlcnJ1cHRfd3JpdGVbMV0sIFJXX2ludGVycnVwdF93cml0ZVsyXSwgUldfaW50ZXJydXB0X3dyaXRlWzNdfSA9IDA7CisgICAgICAgIHtNUkRfY2hrLCBSQ19jaGssIFJSRF9jaGt9ID0gMDsKKyAgICAgICAge1JBU19jaGswLCBSQVNfY2hrMSwgUkFTX2NoazIsIFJBU19jaGszfSA9IDA7CisgICAgICAgIHtSQ0RfY2hrMCwgUkNEX2NoazEsIFJDRF9jaGsyLCBSQ0RfY2hrM30gPSAwOworICAgICAgICB7UlBfY2hrMCwgUlBfY2hrMSwgUlBfY2hrMiwgUlBfY2hrM30gPSAwOworICAgICAgICAkdGltZWZvcm1hdCAoLTksIDAsICIgbnMiLCAxMik7CisgICAgICAgIC8vJHJlYWRtZW1oKCJiYW5rMC50eHQiLCBCYW5rMCk7CisgICAgICAgIC8vJHJlYWRtZW1oKCJiYW5rMS50eHQiLCBCYW5rMSk7CisgICAgICAgIC8vJHJlYWRtZW1oKCJiYW5rMi50eHQiLCBCYW5rMik7CisgICAgICAgIC8vJHJlYWRtZW1oKCJiYW5rMy50eHQiLCBCYW5rMyk7CisgICAgZW5kCisKKyAgICAvLyBTeXN0ZW0gY2xvY2sgZ2VuZXJhdG9yCisgICAgYWx3YXlzIGJlZ2luCisgICAgICAgIEAgKHBvc2VkZ2UgQ2xrKSBiZWdpbgorICAgICAgICAgICAgU3lzX2NsayA9IENrZVo7CisgICAgICAgICAgICBDa2VaID0gQ2tlOworICAgICAgICBlbmQKKyAgICAgICAgQCAobmVnZWRnZSBDbGspIGJlZ2luCisgICAgICAgICAgICBTeXNfY2xrID0gMSdiMDsKKyAgICAgICAgZW5kCisgICAgZW5kCisKKyAgICBhbHdheXMgQCAocG9zZWRnZSBTeXNfY2xrKSBiZWdpbgorICAgICAgICAvLyBJbnRlcm5hbCBDb21tYW1kIFBpcGVsaW5lZAorICAgICAgICBDb21tYW5kWzBdID0gQ29tbWFuZFsxXTsKKyAgICAgICAgQ29tbWFuZFsxXSA9IENvbW1hbmRbMl07CisgICAgICAgIENvbW1hbmRbMl0gPSBDb21tYW5kWzNdOworICAgICAgICBDb21tYW5kWzNdID0gYE5PUDsKKworICAgICAgICBDb2xfYWRkclswXSA9IENvbF9hZGRyWzFdOworICAgICAgICBDb2xfYWRkclsxXSA9IENvbF9hZGRyWzJdOworICAgICAgICBDb2xfYWRkclsyXSA9IENvbF9hZGRyWzNdOworICAgICAgICBDb2xfYWRkclszXSA9IHtjb2xfYml0c3sxJ2IwfX07CisKKyAgICAgICAgQmFua19hZGRyWzBdID0gQmFua19hZGRyWzFdOworICAgICAgICBCYW5rX2FkZHJbMV0gPSBCYW5rX2FkZHJbMl07CisgICAgICAgIEJhbmtfYWRkclsyXSA9IEJhbmtfYWRkclszXTsKKyAgICAgICAgQmFua19hZGRyWzNdID0gMidiMDsKKworICAgICAgICBCYW5rX3ByZWNoYXJnZVswXSA9IEJhbmtfcHJlY2hhcmdlWzFdOworICAgICAgICBCYW5rX3ByZWNoYXJnZVsxXSA9IEJhbmtfcHJlY2hhcmdlWzJdOworICAgICAgICBCYW5rX3ByZWNoYXJnZVsyXSA9IEJhbmtfcHJlY2hhcmdlWzNdOworICAgICAgICBCYW5rX3ByZWNoYXJnZVszXSA9IDInYjA7CisKKyAgICAgICAgQTEwX3ByZWNoYXJnZVswXSA9IEExMF9wcmVjaGFyZ2VbMV07CisgICAgICAgIEExMF9wcmVjaGFyZ2VbMV0gPSBBMTBfcHJlY2hhcmdlWzJdOworICAgICAgICBBMTBfcHJlY2hhcmdlWzJdID0gQTEwX3ByZWNoYXJnZVszXTsKKyAgICAgICAgQTEwX3ByZWNoYXJnZVszXSA9IDEnYjA7CisKKyAgICAgICAgLy8gRHFtIHBpcGVsaW5lIGZvciBSZWFkCisgICAgICAgIERxbV9yZWcwID0gRHFtX3JlZzE7CisgICAgICAgIERxbV9yZWcxID0gRHFtOworCisgICAgICAgIC8vIFJlYWQgb3IgV3JpdGUgd2l0aCBBdXRvIFByZWNoYXJnZSBDb3VudGVyCisgICAgICAgIGlmIChBdXRvX3ByZWNoYXJnZVswXSA9PSAxJ2IxKSBiZWdpbgorICAgICAgICAgICAgQ291bnRfcHJlY2hhcmdlWzBdID0gQ291bnRfcHJlY2hhcmdlWzBdICsgMTsKKyAgICAgICAgZW5kCisgICAgICAgIGlmIChBdXRvX3ByZWNoYXJnZVsxXSA9PSAxJ2IxKSBiZWdpbgorICAgICAgICAgICAgQ291bnRfcHJlY2hhcmdlWzFdID0gQ291bnRfcHJlY2hhcmdlWzFdICsgMTsKKyAgICAgICAgZW5kCisgICAgICAgIGlmIChBdXRvX3ByZWNoYXJnZVsyXSA9PSAxJ2IxKSBiZWdpbgorICAgICAgICAgICAgQ291bnRfcHJlY2hhcmdlWzJdID0gQ291bnRfcHJlY2hhcmdlWzJdICsgMTsKKyAgICAgICAgZW5kCisgICAgICAgIGlmIChBdXRvX3ByZWNoYXJnZVszXSA9PSAxJ2IxKSBiZWdpbgorICAgICAgICAgICAgQ291bnRfcHJlY2hhcmdlWzNdID0gQ291bnRfcHJlY2hhcmdlWzNdICsgMTsKKyAgICAgICAgZW5kCisKKyAgICAgICAgLy8gdE1SRCBDb3VudGVyCisgICAgICAgIE1SRF9jaGsgPSBNUkRfY2hrICsgMTsKKworICAgICAgICAvLyB0V1IgQ291bnRlciBmb3IgV3JpdGUKKyAgICAgICAgV1JfY291bnRlclswXSA9IFdSX2NvdW50ZXJbMF0gKyAxOworICAgICAgICBXUl9jb3VudGVyWzFdID0gV1JfY291bnRlclsxXSArIDE7CisgICAgICAgIFdSX2NvdW50ZXJbMl0gPSBXUl9jb3VudGVyWzJdICsgMTsKKyAgICAgICAgV1JfY291bnRlclszXSA9IFdSX2NvdW50ZXJbM10gKyAxOworCisgICAgICAgIC8vIEF1dG8gUmVmcmVzaAorICAgICAgICBpZiAoQXJlZl9lbmFibGUgPT0gMSdiMSkgYmVnaW4KKyAgICAgICAgICAgIGlmIChEZWJ1ZykgJGRpc3BsYXkgKCJhdCB0aW1lICV0IEFSRUYgOiBBdXRvIFJlZnJlc2giLCAkdGltZSk7CisgICAgICAgICAgICAvLyBBdXRvIFJlZnJlc2ggdG8gQXV0byBSZWZyZXNoCisgICAgICAgICAgICBpZiAoJHRpbWUgLSBSQ19jaGsgPCB0UkMpIGJlZ2luCisJICAgICAgIC0+ZXJyb3JfZGV0ZWN0ZWQ7CisgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJhdCB0aW1lICV0IEVSUk9SOiB0UkMgdmlvbGF0aW9uIGR1cmluZyBBdXRvIFJlZnJlc2giLCAkdGltZSk7CisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIC8vIFByZWNoYXJnZSB0byBBdXRvIFJlZnJlc2gKKyAgICAgICAgICAgIGlmICgkdGltZSAtIFJQX2NoazAgPCB0UlAgfHwgJHRpbWUgLSBSUF9jaGsxIDwgdFJQIHx8ICR0aW1lIC0gUlBfY2hrMiA8IHRSUCB8fCAkdGltZSAtIFJQX2NoazMgPCB0UlApIGJlZ2luCisJICAgICAgIC0+ZXJyb3JfZGV0ZWN0ZWQ7CisgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJhdCB0aW1lICV0IEVSUk9SOiB0UlAgdmlvbGF0aW9uIGR1cmluZyBBdXRvIFJlZnJlc2giLCAkdGltZSk7CisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIC8vIFByZWNoYXJnZSB0byBSZWZyZXNoCisgICAgICAgICAgICBpZiAoUGNfYjAgPT0gMSdiMCB8fCBQY19iMSA9PSAxJ2IwIHx8IFBjX2IyID09IDEnYjAgfHwgUGNfYjMgPT0gMSdiMCkgYmVnaW4KKwkgICAgICAgLT5lcnJvcl9kZXRlY3RlZDsKKyAgICAgICAgICAgICAgICAkZGlzcGxheSAoImF0IHRpbWUgJXQgRVJST1I6IEFsbCBiYW5rcyBtdXN0IGJlIFByZWNoYXJnZSBiZWZvcmUgQXV0byBSZWZyZXNoIiwgJHRpbWUpOworICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAvLyBSZWNvcmQgQ3VycmVudCB0UkMgdGltZQorICAgICAgICAgICAgUkNfY2hrID0gJHRpbWU7CisgICAgICAgIGVuZAorICAgICAgICAKKyAgICAgICAgLy8gTG9hZCBNb2RlIFJlZ2lzdGVyCisgICAgICAgIGlmIChNb2RlX3JlZ19lbmFibGUgPT0gMSdiMSkgYmVnaW4KKyAgICAgICAgICAgIC8vIERlY29kZSBDQVMgTGF0ZW5jeSwgQnVyc3QgTGVuZ3RoLCBCdXJzdCBUeXBlLCBhbmQgV3JpdGUgQnVyc3QgTW9kZQorICAgICAgICAgICAgaWYgKFBjX2IwID09IDEnYjEgJiYgUGNfYjEgPT0gMSdiMSAmJiBQY19iMiA9PSAxJ2IxICYmIFBjX2IzID09IDEnYjEpIGJlZ2luCisgICAgICAgICAgICAgICAgTW9kZV9yZWcgPSBBZGRyOworICAgICAgICAgICAgICAgIGlmIChEZWJ1ZykgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJhdCB0aW1lICV0IExNUiAgOiBMb2FkIE1vZGUgUmVnaXN0ZXIiLCAkdGltZSk7CisgICAgICAgICAgICAgICAgICAgIC8vIENBUyBMYXRlbmN5CisgICAgICAgICAgICAgICAgICAgIGlmIChBZGRyWzYgOiA0XSA9PSAzJ2IwMTApCisgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQVMgTGF0ZW5jeSAgICAgID0gMiIpOworICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChBZGRyWzYgOiA0XSA9PSAzJ2IwMTEpCisgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQVMgTGF0ZW5jeSAgICAgID0gMyIpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQVMgTGF0ZW5jeSAgICAgID0gUmVzZXJ2ZWQiKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gQnVyc3QgTGVuZ3RoCisgICAgICAgICAgICAgICAgICAgIGlmIChBZGRyWzIgOiAwXSA9PSAzJ2IwMDApCisgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdXJzdCBMZW5ndGggICAgID0gMSIpOworICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChBZGRyWzIgOiAwXSA9PSAzJ2IwMDEpCisgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdXJzdCBMZW5ndGggICAgID0gMiIpOworICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChBZGRyWzIgOiAwXSA9PSAzJ2IwMTApCisgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdXJzdCBMZW5ndGggICAgID0gNCIpOworICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChBZGRyWzIgOiAwXSA9PSAzJ2IwMTEpCisgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdXJzdCBMZW5ndGggICAgID0gOCIpOworICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChBZGRyWzMgOiAwXSA9PSA0J2IwMTExKQorICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVyc3QgTGVuZ3RoICAgICA9IEZ1bGwiKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVyc3QgTGVuZ3RoICAgICA9IFJlc2VydmVkIik7CisgICAgICAgICAgICAgICAgICAgIC8vIEJ1cnN0IFR5cGUKKyAgICAgICAgICAgICAgICAgICAgaWYgKEFkZHJbM10gPT0gMSdiMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1cnN0IFR5cGUgICAgICAgPSBTZXF1ZW50aWFsIik7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEFkZHJbM10gPT0gMSdiMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1cnN0IFR5cGUgICAgICAgPSBJbnRlcmxlYXZlZCIpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdXJzdCBUeXBlICAgICAgID0gUmVzZXJ2ZWQiKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gV3JpdGUgQnVyc3QgTW9kZQorICAgICAgICAgICAgICAgICAgICBpZiAoQWRkcls5XSA9PSAxJ2IwKQorICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUgQnVyc3QgTW9kZSA9IFByb2dyYW1tZWQgQnVyc3QgTGVuZ3RoIik7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEFkZHJbOV0gPT0gMSdiMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlIEJ1cnN0IE1vZGUgPSBTaW5nbGUgTG9jYXRpb24gQWNjZXNzIik7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlIEJ1cnN0IE1vZGUgPSBSZXNlcnZlZCIpOworICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZW5kIGVsc2UgYmVnaW4KKworCSAgICAgICAtPmVycm9yX2RldGVjdGVkOworICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiYXQgdGltZSAldCBFUlJPUjogYWxsIGJhbmtzIG11c3QgYmUgUHJlY2hhcmdlIGJlZm9yZSBMb2FkIE1vZGUgUmVnaXN0ZXIiLCAkdGltZSk7CisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIC8vIFJFRiB0byBMTVIKKyAgICAgICAgICAgIGlmICgkdGltZSAtIFJDX2NoayA8IHRSQykgYmVnaW4KKworCSAgICAgICAtPmVycm9yX2RldGVjdGVkOworICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiYXQgdGltZSAldCBFUlJPUjogdFJDIHZpb2xhdGlvbiBkdXJpbmcgTG9hZCBNb2RlIFJlZ2lzdGVyIiwgJHRpbWUpOworICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAvLyBMTVIgdG8gTE1SCisgICAgICAgICAgICBpZiAoTVJEX2NoayA8IHRNUkQpIGJlZ2luCisKKwkgICAgICAgLT5lcnJvcl9kZXRlY3RlZDsKKyAgICAgICAgICAgICAgICAkZGlzcGxheSAoImF0IHRpbWUgJXQgRVJST1I6IHRNUkQgdmlvbGF0aW9uIGR1cmluZyBMb2FkIE1vZGUgUmVnaXN0ZXIiLCAkdGltZSk7CisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIE1SRF9jaGsgPSAwOworICAgICAgICBlbmQKKyAgICAgICAgCisgICAgICAgIC8vIEFjdGl2ZSBCbG9jayAoTGF0Y2ggQmFuayBBZGRyZXNzIGFuZCBSb3cgQWRkcmVzcykKKyAgICAgICAgaWYgKEFjdGl2ZV9lbmFibGUgPT0gMSdiMSkgYmVnaW4KKyAgICAgICAgICAgIGlmIChCYSA9PSAyJ2IwMCAmJiBQY19iMCA9PSAxJ2IxKSBiZWdpbgorICAgICAgICAgICAgICAgIHtBY3RfYjAsIFBjX2IwfSA9IDInYjEwOworICAgICAgICAgICAgICAgIEIwX3Jvd19hZGRyID0gQWRkciBbYWRkcl9iaXRzIC0gMSA6IDBdOworICAgICAgICAgICAgICAgIFJDRF9jaGswID0gJHRpbWU7CisgICAgICAgICAgICAgICAgUkFTX2NoazAgPSAkdGltZTsKKyAgICAgICAgICAgICAgICBpZiAoRGVidWcpICRkaXNwbGF5ICgiYXQgdGltZSAldCBBQ1QgIDogQmFuayA9IDAgUm93ID0gJWQiLCAkdGltZSwgQWRkcik7CisgICAgICAgICAgICAgICAgLy8gUHJlY2hhcmdlIHRvIEFjdGl2YXRlIEJhbmsgMAorICAgICAgICAgICAgICAgIGlmICgkdGltZSAtIFJQX2NoazAgPCB0UlApIGJlZ2luCisKKwkJICAgLT5lcnJvcl9kZXRlY3RlZDsKKyAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoImF0IHRpbWUgJXQgRVJST1I6IHRSUCB2aW9sYXRpb24gZHVyaW5nIEFjdGl2YXRlIGJhbmsgMCIsICR0aW1lKTsKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZCBlbHNlIGlmIChCYSA9PSAyJ2IwMSAmJiBQY19iMSA9PSAxJ2IxKSBiZWdpbgorICAgICAgICAgICAgICAgIHtBY3RfYjEsIFBjX2IxfSA9IDInYjEwOworICAgICAgICAgICAgICAgIEIxX3Jvd19hZGRyID0gQWRkciBbYWRkcl9iaXRzIC0gMSA6IDBdOworICAgICAgICAgICAgICAgIFJDRF9jaGsxID0gJHRpbWU7CisgICAgICAgICAgICAgICAgUkFTX2NoazEgPSAkdGltZTsKKyAgICAgICAgICAgICAgICBpZiAoRGVidWcpICRkaXNwbGF5ICgiYXQgdGltZSAldCBBQ1QgIDogQmFuayA9IDEgUm93ID0gJWQiLCAkdGltZSwgQWRkcik7CisgICAgICAgICAgICAgICAgLy8gUHJlY2hhcmdlIHRvIEFjdGl2YXRlIEJhbmsgMQorICAgICAgICAgICAgICAgIGlmICgkdGltZSAtIFJQX2NoazEgPCB0UlApIGJlZ2luCisKKwkJICAgLT5lcnJvcl9kZXRlY3RlZDsKKyAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJhdCB0aW1lICV0IEVSUk9SOiB0UlAgdmlvbGF0aW9uIGR1cmluZyBBY3RpdmF0ZSBiYW5rIDEiLCAkdGltZSk7CisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbmQgZWxzZSBpZiAoQmEgPT0gMidiMTAgJiYgUGNfYjIgPT0gMSdiMSkgYmVnaW4KKyAgICAgICAgICAgICAgICB7QWN0X2IyLCBQY19iMn0gPSAyJ2IxMDsKKyAgICAgICAgICAgICAgICBCMl9yb3dfYWRkciA9IEFkZHIgW2FkZHJfYml0cyAtIDEgOiAwXTsKKyAgICAgICAgICAgICAgICBSQ0RfY2hrMiA9ICR0aW1lOworICAgICAgICAgICAgICAgIFJBU19jaGsyID0gJHRpbWU7CisgICAgICAgICAgICAgICAgaWYgKERlYnVnKSAkZGlzcGxheSAoImF0IHRpbWUgJXQgQUNUICA6IEJhbmsgPSAyIFJvdyA9ICVkIiwgJHRpbWUsIEFkZHIpOworICAgICAgICAgICAgICAgIC8vIFByZWNoYXJnZSB0byBBY3RpdmF0ZSBCYW5rIDIKKyAgICAgICAgICAgICAgICBpZiAoJHRpbWUgLSBSUF9jaGsyIDwgdFJQKSBiZWdpbgorCisJCSAgIC0+ZXJyb3JfZGV0ZWN0ZWQ7CisgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiYXQgdGltZSAldCBFUlJPUjogdFJQIHZpb2xhdGlvbiBkdXJpbmcgQWN0aXZhdGUgYmFuayAyIiwgJHRpbWUpOworICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZW5kIGVsc2UgaWYgKEJhID09IDInYjExICYmIFBjX2IzID09IDEnYjEpIGJlZ2luCisgICAgICAgICAgICAgICAge0FjdF9iMywgUGNfYjN9ID0gMidiMTA7CisgICAgICAgICAgICAgICAgQjNfcm93X2FkZHIgPSBBZGRyIFthZGRyX2JpdHMgLSAxIDogMF07CisgICAgICAgICAgICAgICAgUkNEX2NoazMgPSAkdGltZTsKKyAgICAgICAgICAgICAgICBSQVNfY2hrMyA9ICR0aW1lOworICAgICAgICAgICAgICAgIGlmIChEZWJ1ZykgJGRpc3BsYXkgKCJhdCB0aW1lICV0IEFDVCAgOiBCYW5rID0gMyBSb3cgPSAlZCIsICR0aW1lLCBBZGRyKTsKKyAgICAgICAgICAgICAgICAvLyBQcmVjaGFyZ2UgdG8gQWN0aXZhdGUgQmFuayAzCisgICAgICAgICAgICAgICAgaWYgKCR0aW1lIC0gUlBfY2hrMyA8IHRSUCkgYmVnaW4KKworCQkgICAtPmVycm9yX2RldGVjdGVkOworICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoImF0IHRpbWUgJXQgRVJST1I6IHRSUCB2aW9sYXRpb24gZHVyaW5nIEFjdGl2YXRlIGJhbmsgMyIsICR0aW1lKTsKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZCBlbHNlIGlmIChCYSA9PSAyJ2IwMCAmJiBQY19iMCA9PSAxJ2IwKSBiZWdpbgorCisJICAgICAgIC0+ZXJyb3JfZGV0ZWN0ZWQ7CisgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJhdCB0aW1lICV0IEVSUk9SOiBCYW5rIDAgaXMgbm90IFByZWNoYXJnZWQuIiwgJHRpbWUpOworICAgICAgICAgICAgZW5kIGVsc2UgaWYgKEJhID09IDInYjAxICYmIFBjX2IxID09IDEnYjApIGJlZ2luCisKKwkgICAgICAgLT5lcnJvcl9kZXRlY3RlZDsKKyAgICAgICAgICAgICAgICAkZGlzcGxheSAoImF0IHRpbWUgJXQgRVJST1I6IEJhbmsgMSBpcyBub3QgUHJlY2hhcmdlZC4iLCAkdGltZSk7CisgICAgICAgICAgICBlbmQgZWxzZSBpZiAoQmEgPT0gMidiMTAgJiYgUGNfYjIgPT0gMSdiMCkgYmVnaW4KKworCSAgICAgICAtPmVycm9yX2RldGVjdGVkOworICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiYXQgdGltZSAldCBFUlJPUjogQmFuayAyIGlzIG5vdCBQcmVjaGFyZ2VkLiIsICR0aW1lKTsKKyAgICAgICAgICAgIGVuZCBlbHNlIGlmIChCYSA9PSAyJ2IxMSAmJiBQY19iMyA9PSAxJ2IwKSBiZWdpbgorCisJICAgICAgIC0+ZXJyb3JfZGV0ZWN0ZWQ7CisgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJhdCB0aW1lICV0IEVSUk9SOiBCYW5rIDMgaXMgbm90IFByZWNoYXJnZWQuIiwgJHRpbWUpOworICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAvLyBBY3RpdmUgQmFuayBBIHRvIEFjdGl2ZSBCYW5rIEIKKyAgICAgICAgICAgIGlmICgoUHJldmlvdXNfYmFuayAhPSBCYSkgJiYgKCR0aW1lIC0gUlJEX2NoayA8IHRSUkQpKSBiZWdpbgorCisJICAgICAgIC0+ZXJyb3JfZGV0ZWN0ZWQ7CisgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJhdCB0aW1lICV0IEVSUk9SOiB0UlJEIHZpb2xhdGlvbiBkdXJpbmcgQWN0aXZhdGUgYmFuayA9ICVkIiwgJHRpbWUsIEJhKTsKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgLy8gTG9hZCBNb2RlIFJlZ2lzdGVyIHRvIEFjdGl2ZQorICAgICAgICAgICAgaWYgKE1SRF9jaGsgPCB0TVJEICkgYmVnaW4KKworCSAgICAgICAtPmVycm9yX2RldGVjdGVkOworICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiYXQgdGltZSAldCBFUlJPUjogdE1SRCB2aW9sYXRpb24gZHVyaW5nIEFjdGl2YXRlIGJhbmsgPSAlZCIsICR0aW1lLCBCYSk7CisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIC8vIEF1dG8gUmVmcmVzaCB0byBBY3RpdmF0ZQorICAgICAgICAgICAgaWYgKCR0aW1lIC0gUkNfY2hrIDwgdFJDKSBiZWdpbgorCisJICAgICAgIC0+ZXJyb3JfZGV0ZWN0ZWQ7CisgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJhdCB0aW1lICV0IEVSUk9SOiB0UkMgdmlvbGF0aW9uIGR1cmluZyBBY3RpdmF0ZSBiYW5rID0gJWQiLCAkdGltZSwgQmEpOworICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAvLyBSZWNvcmQgdmFyaWFibGVzIGZvciBjaGVja2luZyB2aW9sYXRpb24KKyAgICAgICAgICAgIFJSRF9jaGsgPSAkdGltZTsKKyAgICAgICAgICAgIFByZXZpb3VzX2JhbmsgPSBCYTsKKyAgICAgICAgZW5kCisgICAgICAgIAorICAgICAgICAvLyBQcmVjaGFyZ2UgQmxvY2sKKyAgICAgICAgaWYgKFByZWNoX2VuYWJsZSA9PSAxJ2IxKSBiZWdpbgorICAgICAgICAgICAgaWYgKEFkZHJbMTBdID09IDEnYjEpIGJlZ2luCisgICAgICAgICAgICAgICAge1BjX2IwLCBQY19iMSwgUGNfYjIsIFBjX2IzfSA9IDQnYjExMTE7CisgICAgICAgICAgICAgICAge0FjdF9iMCwgQWN0X2IxLCBBY3RfYjIsIEFjdF9iM30gPSA0J2IwMDAwOworICAgICAgICAgICAgICAgIFJQX2NoazAgPSAkdGltZTsKKyAgICAgICAgICAgICAgICBSUF9jaGsxID0gJHRpbWU7CisgICAgICAgICAgICAgICAgUlBfY2hrMiA9ICR0aW1lOworICAgICAgICAgICAgICAgIFJQX2NoazMgPSAkdGltZTsKKyAgICAgICAgICAgICAgICBpZiAoRGVidWcpICRkaXNwbGF5ICgiYXQgdGltZSAldCBQUkUgIDogQmFuayA9IEFMTCIsJHRpbWUpOworICAgICAgICAgICAgICAgIC8vIEFjdGl2YXRlIHRvIFByZWNoYXJnZSBhbGwgYmFua3MKKyAgICAgICAgICAgICAgICBpZiAoKCR0aW1lIC0gUkFTX2NoazAgPCB0UkFTKSB8fCAoJHRpbWUgLSBSQVNfY2hrMSA8IHRSQVMpIHx8CisgICAgICAgICAgICAgICAgICAgICgkdGltZSAtIFJBU19jaGsyIDwgdFJBUykgfHwgKCR0aW1lIC0gUkFTX2NoazMgPCB0UkFTKSkgYmVnaW4KKworCQkgICAtPmVycm9yX2RldGVjdGVkOworICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoImF0IHRpbWUgJXQgRVJST1I6IHRSQVMgdmlvbGF0aW9uIGR1cmluZyBQcmVjaGFyZ2UgYWxsIGJhbmsiLCAkdGltZSk7CisJCSAgICBpZigkdGltZSAtIFJBU19jaGswIDwgdFJBUykKKwkJCSAgICAkZGlzcGxheSgiRVJST1I6IFJBU19DSEswIFJ4cDogJXQgIEV4ZDogJXQiLCR0aW1lIC0gUkFTX2NoazAsdFJBUyk7CisJCSAgICBpZigkdGltZSAtIFJBU19jaGsxIDwgdFJBUykKKwkJCSAgICAkZGlzcGxheSgiRVJST1I6IFJBU19DSEsxIFJ4cDogJXQgIEV4ZDogJXQiLCR0aW1lIC0gUkFTX2NoazEsdFJBUyk7CisJCSAgICBpZigkdGltZSAtIFJBU19jaGsyIDwgdFJBUykKKwkJCSAgICAkZGlzcGxheSgiRVJST1I6IFJBU19DSEsyIFJ4cDogJXQgIEV4ZDogJXQiLCR0aW1lIC0gUkFTX2NoazIsdFJBUyk7CisJCSAgICBpZigkdGltZSAtIFJBU19jaGszIDwgdFJBUykKKwkJCSAgICAkZGlzcGxheSgiRVJST1I6IFJBU19DSEszIFJ4cDogJXQgIEV4ZDogJXQiLCR0aW1lIC0gUkFTX2NoazMsdFJBUyk7CisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgLy8gdFdSIHZpb2xhdGlvbiBjaGVjayBmb3Igd3JpdGUKKyAgICAgICAgICAgICAgICBpZiAoKCR0aW1lIC0gV1JfY2hrWzBdIDwgdFdScCkgfHwgKCR0aW1lIC0gV1JfY2hrWzFdIDwgdFdScCkgfHwKKyAgICAgICAgICAgICAgICAgICAgKCR0aW1lIC0gV1JfY2hrWzJdIDwgdFdScCkgfHwgKCR0aW1lIC0gV1JfY2hrWzNdIDwgdFdScCkpIGJlZ2luCisKKwkJICAgLT5lcnJvcl9kZXRlY3RlZDsKKyAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJhdCB0aW1lICV0IEVSUk9SOiB0V1IgdmlvbGF0aW9uIGR1cmluZyBQcmVjaGFyZ2UgYWxsIGJhbmsiLCAkdGltZSk7CisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbmQgZWxzZSBpZiAoQWRkclsxMF0gPT0gMSdiMCkgYmVnaW4KKyAgICAgICAgICAgICAgICBpZiAoQmEgPT0gMidiMDApIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIHtQY19iMCwgQWN0X2IwfSA9IDInYjEwOworICAgICAgICAgICAgICAgICAgICBSUF9jaGswID0gJHRpbWU7CisgICAgICAgICAgICAgICAgICAgIGlmIChEZWJ1ZykgJGRpc3BsYXkgKCJhdCB0aW1lICV0IFBSRSAgOiBCYW5rID0gMCIsJHRpbWUpOworICAgICAgICAgICAgICAgICAgICAvLyBBY3RpdmF0ZSB0byBQcmVjaGFyZ2UgQmFuayAwCisgICAgICAgICAgICAgICAgICAgIGlmICgkdGltZSAtIFJBU19jaGswIDwgdFJBUykgYmVnaW4KKworCQkgICAgICAgLT5lcnJvcl9kZXRlY3RlZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiYXQgdGltZSAldCBFUlJPUjogdFJBUyB2aW9sYXRpb24gZHVyaW5nIFByZWNoYXJnZSBiYW5rIDAiLCAkdGltZSk7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZCBlbHNlIGlmIChCYSA9PSAyJ2IwMSkgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAge1BjX2IxLCBBY3RfYjF9ID0gMidiMTA7CisgICAgICAgICAgICAgICAgICAgIFJQX2NoazEgPSAkdGltZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKERlYnVnKSAkZGlzcGxheSAoImF0IHRpbWUgJXQgUFJFICA6IEJhbmsgPSAxIiwkdGltZSk7CisgICAgICAgICAgICAgICAgICAgIC8vIEFjdGl2YXRlIHRvIFByZWNoYXJnZSBCYW5rIDEKKyAgICAgICAgICAgICAgICAgICAgaWYgKCR0aW1lIC0gUkFTX2NoazEgPCB0UkFTKSBiZWdpbgorCisJCSAgICAgICAtPmVycm9yX2RldGVjdGVkOworICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJhdCB0aW1lICV0IEVSUk9SOiB0UkFTIHZpb2xhdGlvbiBkdXJpbmcgUHJlY2hhcmdlIGJhbmsgMSIsICR0aW1lKTsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kIGVsc2UgaWYgKEJhID09IDInYjEwKSBiZWdpbgorICAgICAgICAgICAgICAgICAgICB7UGNfYjIsIEFjdF9iMn0gPSAyJ2IxMDsKKyAgICAgICAgICAgICAgICAgICAgUlBfY2hrMiA9ICR0aW1lOworICAgICAgICAgICAgICAgICAgICBpZiAoRGVidWcpICRkaXNwbGF5ICgiYXQgdGltZSAldCBQUkUgIDogQmFuayA9IDIiLCR0aW1lKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gQWN0aXZhdGUgdG8gUHJlY2hhcmdlIEJhbmsgMgorICAgICAgICAgICAgICAgICAgICBpZiAoJHRpbWUgLSBSQVNfY2hrMiA8IHRSQVMpIGJlZ2luCisKKwkJICAgICAgIC0+ZXJyb3JfZGV0ZWN0ZWQ7CisgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoImF0IHRpbWUgJXQgRVJST1I6IHRSQVMgdmlvbGF0aW9uIGR1cmluZyBQcmVjaGFyZ2UgYmFuayAyIiwgJHRpbWUpOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbmQgZWxzZSBpZiAoQmEgPT0gMidiMTEpIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIHtQY19iMywgQWN0X2IzfSA9IDInYjEwOworICAgICAgICAgICAgICAgICAgICBSUF9jaGszID0gJHRpbWU7CisgICAgICAgICAgICAgICAgICAgIGlmIChEZWJ1ZykgJGRpc3BsYXkgKCJhdCB0aW1lICV0IFBSRSAgOiBCYW5rID0gMyIsJHRpbWUpOworICAgICAgICAgICAgICAgICAgICAvLyBBY3RpdmF0ZSB0byBQcmVjaGFyZ2UgQmFuayAzCisgICAgICAgICAgICAgICAgICAgIGlmICgkdGltZSAtIFJBU19jaGszIDwgdFJBUykgYmVnaW4KKworCQkgICAgICAgLT5lcnJvcl9kZXRlY3RlZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiYXQgdGltZSAldCBFUlJPUjogdFJBUyB2aW9sYXRpb24gZHVyaW5nIFByZWNoYXJnZSBiYW5rIDMiLCAkdGltZSk7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIC8vIHRXUiB2aW9sYXRpb24gY2hlY2sgZm9yIHdyaXRlCisgICAgICAgICAgICAgICAgaWYgKCR0aW1lIC0gV1JfY2hrW0JhXSA8IHRXUnApIGJlZ2luCisKKwkJICAgLT5lcnJvcl9kZXRlY3RlZDsKKyAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJhdCB0aW1lICV0IEVSUk9SOiB0V1IgdmlvbGF0aW9uIGR1cmluZyBQcmVjaGFyZ2UgYmFuayAlZCIsICR0aW1lLCBCYSk7CisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIC8vIFRlcm1pbmF0ZSBhIFdyaXRlIEltbWVkaWF0ZWx5IChpZiBzYW1lIGJhbmsgb3IgYWxsIGJhbmtzKQorICAgICAgICAgICAgaWYgKERhdGFfaW5fZW5hYmxlID09IDEnYjEgJiYgKEJhbmsgPT0gQmEgfHwgQWRkclsxMF0gPT0gMSdiMSkpIGJlZ2luCisgICAgICAgICAgICAgICAgRGF0YV9pbl9lbmFibGUgPSAxJ2IwOworICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAvLyBQcmVjaGFyZ2UgQ29tbWFuZCBQaXBlbGluZSBmb3IgUmVhZAorICAgICAgICAgICAgaWYgKENhc19sYXRlbmN5XzMgPT0gMSdiMSkgYmVnaW4KKyAgICAgICAgICAgICAgICBDb21tYW5kWzJdID0gYFNEUkFNX1BSRUNIOworICAgICAgICAgICAgICAgIEJhbmtfcHJlY2hhcmdlWzJdID0gQmE7CisgICAgICAgICAgICAgICAgQTEwX3ByZWNoYXJnZVsyXSA9IEFkZHJbMTBdOworICAgICAgICAgICAgZW5kIGVsc2UgaWYgKENhc19sYXRlbmN5XzIgPT0gMSdiMSkgYmVnaW4KKyAgICAgICAgICAgICAgICBDb21tYW5kWzFdID0gYFNEUkFNX1BSRUNIOworICAgICAgICAgICAgICAgIEJhbmtfcHJlY2hhcmdlWzFdID0gQmE7CisgICAgICAgICAgICAgICAgQTEwX3ByZWNoYXJnZVsxXSA9IEFkZHJbMTBdOworICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorICAgICAgICAKKyAgICAgICAgLy8gQnVyc3QgdGVybWluYXRlCisgICAgICAgIGlmIChCdXJzdF90ZXJtID09IDEnYjEpIGJlZ2luCisgICAgICAgICAgICAvLyBUZXJtaW5hdGUgYSBXcml0ZSBJbW1lZGlhdGVseQorICAgICAgICAgICAgaWYgKERhdGFfaW5fZW5hYmxlID09IDEnYjEpIGJlZ2luCisgICAgICAgICAgICAgICAgRGF0YV9pbl9lbmFibGUgPSAxJ2IwOworICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAvLyBUZXJtaW5hdGUgYSBSZWFkIERlcGVuZCBvbiBDQVMgTGF0ZW5jeQorICAgICAgICAgICAgaWYgKENhc19sYXRlbmN5XzMgPT0gMSdiMSkgYmVnaW4KKyAgICAgICAgICAgICAgICBDb21tYW5kWzJdID0gYFNEUkFNX0JTVDsKKyAgICAgICAgICAgIGVuZCBlbHNlIGlmIChDYXNfbGF0ZW5jeV8yID09IDEnYjEpIGJlZ2luCisgICAgICAgICAgICAgICAgQ29tbWFuZFsxXSA9IGBTRFJBTV9CU1Q7CisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGlmIChEZWJ1ZykgJGRpc3BsYXkgKCJhdCB0aW1lICV0IEJTVCAgOiBCdXJzdCBUZXJtaW5hdGUiLCR0aW1lKTsKKyAgICAgICAgZW5kCisgICAgICAgIAorICAgICAgICAvLyBSZWFkLCBXcml0ZSwgQ29sdW1uIExhdGNoCisgICAgICAgIGlmIChSZWFkX2VuYWJsZSA9PSAxJ2IxIHx8IFdyaXRlX2VuYWJsZSA9PSAxJ2IxKSBiZWdpbgorICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIGJhbmsgaXMgb3BlbiAoQUNUKQorICAgICAgICAgICAgaWYgKChCYSA9PSAyJ2IwMCAmJiBQY19iMCA9PSAxJ2IxKSB8fCAoQmEgPT0gMidiMDEgJiYgUGNfYjEgPT0gMSdiMSkgfHwKKyAgICAgICAgICAgICAgICAoQmEgPT0gMidiMTAgJiYgUGNfYjIgPT0gMSdiMSkgfHwgKEJhID09IDInYjExICYmIFBjX2IzID09IDEnYjEpKSBiZWdpbgorCisJICAgICAgIC0+ZXJyb3JfZGV0ZWN0ZWQ7CisgICAgICAgICAgICAgICAgJGRpc3BsYXkoImF0IHRpbWUgJXQgRVJST1I6IENhbm5vdCBSZWFkIG9yIFdyaXRlIC0gQmFuayAlZCBpcyBub3QgQWN0aXZhdGVkIiwgJHRpbWUsIEJhKTsKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgLy8gQWN0aXZhdGUgdG8gUmVhZCBvciBXcml0ZQorICAgICAgICAgICAgaWYgKChCYSA9PSAyJ2IwMCkgJiYgKCR0aW1lIC0gUkNEX2NoazAgPCB0UkNEKSkKKwkgICAgICBiZWdpbgorCQkgLT5lcnJvcl9kZXRlY3RlZDsKKyAgICAgICAgICAgICAgICAgJGRpc3BsYXkoImF0IHRpbWUgJXQgRVJST1I6IHRSQ0QgdmlvbGF0aW9uIGR1cmluZyBSZWFkIG9yIFdyaXRlIHRvIEJhbmsgMCIsICR0aW1lKTsKKwkgICAgICBlbmQKKwkgICAKKyAgICAgICAgICAgIGlmICgoQmEgPT0gMidiMDEpICYmICgkdGltZSAtIFJDRF9jaGsxIDwgdFJDRCkpCisJICAgICAgYmVnaW4KKwkJIC8vLT50Yi50ZXN0X2NvbnRyb2wuZXJyb3JfZGV0ZWN0ZWQ7CisgICAgICAgICAgICAgICAgICRkaXNwbGF5KCJhdCB0aW1lICV0IEVSUk9SOiB0UkNEIHZpb2xhdGlvbiBkdXJpbmcgUmVhZCBvciBXcml0ZSB0byBCYW5rIDEiLCAkdGltZSk7CisJICAgICAgZW5kCisgICAgICAgICAgICBpZiAoKEJhID09IDInYjEwKSAmJiAoJHRpbWUgLSBSQ0RfY2hrMiA8IHRSQ0QpKQorCSAgICAgIGJlZ2luCisJCSAvLy0+dGIudGVzdF9jb250cm9sLmVycm9yX2RldGVjdGVkOworICAgICAgICAgICAgICAgICAkZGlzcGxheSgiYXQgdGltZSAldCBFUlJPUjogdFJDRCB2aW9sYXRpb24gZHVyaW5nIFJlYWQgb3IgV3JpdGUgdG8gQmFuayAyIiwgJHRpbWUpOworCSAgICAgIGVuZAorICAgICAgICAgICAgaWYgKChCYSA9PSAyJ2IxMSkgJiYgKCR0aW1lIC0gUkNEX2NoazMgPCB0UkNEKSkKKwkgICAgICBiZWdpbgorCQkgLy8tPnRiLnRlc3RfY29udHJvbC5lcnJvcl9kZXRlY3RlZDsKKyAgICAgICAgICAgICAgICAgJGRpc3BsYXkoImF0IHRpbWUgJXQgRVJST1I6IHRSQ0QgdmlvbGF0aW9uIGR1cmluZyBSZWFkIG9yIFdyaXRlIHRvIEJhbmsgMyIsICR0aW1lKTsKKwkgICAgICBlbmQKKyAgICAgICAgICAgIC8vIFJlYWQgQ29tbWFuZAorICAgICAgICAgICAgaWYgKFJlYWRfZW5hYmxlID09IDEnYjEpIGJlZ2luCisgICAgICAgICAgICAgICAgLy8gQ0FTIExhdGVuY3kgcGlwZWxpbmUKKyAgICAgICAgICAgICAgICBpZiAoQ2FzX2xhdGVuY3lfMyA9PSAxJ2IxKSBiZWdpbgorICAgICAgICAgICAgICAgICAgICBpZiAoQWRkclsxMF0gPT0gMSdiMSkgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIENvbW1hbmRbMl0gPSBgUkVBRF9BOworICAgICAgICAgICAgICAgICAgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWFuZFsyXSA9IGBSRUFEOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgQ29sX2FkZHJbMl0gPSBBZGRyOworICAgICAgICAgICAgICAgICAgICBCYW5rX2FkZHJbMl0gPSBCYTsKKyAgICAgICAgICAgICAgICBlbmQgZWxzZSBpZiAoQ2FzX2xhdGVuY3lfMiA9PSAxJ2IxKSBiZWdpbgorICAgICAgICAgICAgICAgICAgICBpZiAoQWRkclsxMF0gPT0gMSdiMSkgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIENvbW1hbmRbMV0gPSBgUkVBRF9BOworICAgICAgICAgICAgICAgICAgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWFuZFsxXSA9IGBSRUFEOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgQ29sX2FkZHJbMV0gPSBBZGRyOworICAgICAgICAgICAgICAgICAgICBCYW5rX2FkZHJbMV0gPSBCYTsKKyAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgIC8vIFJlYWQgaW50ZXJydXB0IFdyaXRlICh0ZXJtaW5hdGUgV3JpdGUgaW1tZWRpYXRlbHkpCisgICAgICAgICAgICAgICAgaWYgKERhdGFfaW5fZW5hYmxlID09IDEnYjEpIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIERhdGFfaW5fZW5hYmxlID0gMSdiMDsKKyAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgLy8gV3JpdGUgQ29tbWFuZAorICAgICAgICAgICAgZW5kIGVsc2UgaWYgKFdyaXRlX2VuYWJsZSA9PSAxJ2IxKSBiZWdpbgorICAgICAgICAgICAgICAgIGlmIChBZGRyWzEwXSA9PSAxJ2IxKSBiZWdpbgorICAgICAgICAgICAgICAgICAgICBDb21tYW5kWzBdID0gYFdSSVRFX0E7CisgICAgICAgICAgICAgICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgQ29tbWFuZFswXSA9IGBTRFJBTV9XUklURTsKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBDb2xfYWRkclswXSA9IEFkZHI7CisgICAgICAgICAgICAgICAgQmFua19hZGRyWzBdID0gQmE7CisKKyAgICAgICAgICAgICAgICAvLyBXcml0ZSBpbnRlcnJ1cHQgV3JpdGUgKHRlcm1pbmF0ZSBXcml0ZSBpbW1lZGlhdGVseSkKKyAgICAgICAgICAgICAgICBpZiAoRGF0YV9pbl9lbmFibGUgPT0gMSdiMSkgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgRGF0YV9pbl9lbmFibGUgPSAxJ2IwOworICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgLy8gV3JpdGUgaW50ZXJydXB0IFJlYWQgKHRlcm1pbmF0ZSBSZWFkIGltbWVkaWF0ZWx5KQorICAgICAgICAgICAgICAgIGlmIChEYXRhX291dF9lbmFibGUgPT0gMSdiMSkgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgRGF0YV9vdXRfZW5hYmxlID0gMSdiMDsKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAvLyBJbnRlcnJ1cHRpbmcgYSBXcml0ZSB3aXRoIEF1dG9wcmVjaGFyZ2UKKyAgICAgICAgICAgIGlmIChBdXRvX3ByZWNoYXJnZVtCYW5rXSA9PSAxJ2IxICYmIFdyaXRlX3ByZWNoYXJnZVtCYW5rXSA9PSAxJ2IxKSBiZWdpbgorICAgICAgICAgICAgICAgIFJXX2ludGVycnVwdF93cml0ZVtCYW5rXSA9IDEnYjE7CisgICAgICAgICAgICAgICAgaWYgKERlYnVnKSAkZGlzcGxheSAoImF0IHRpbWUgJXQgTk9URSA6IFJlYWQvV3JpdGUgQmFuayAlZCBpbnRlcnJ1cHQgV3JpdGUgQmFuayAlZCB3aXRoIEF1dG9wcmVjaGFyZ2UiLCAkdGltZSwgQmEsIEJhbmspOworICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgIC8vIEludGVycnVwdGluZyBhIFJlYWQgd2l0aCBBdXRvcHJlY2hhcmdlCisgICAgICAgICAgICBpZiAoQXV0b19wcmVjaGFyZ2VbQmFua10gPT0gMSdiMSAmJiBSZWFkX3ByZWNoYXJnZVtCYW5rXSA9PSAxJ2IxKSBiZWdpbgorICAgICAgICAgICAgICAgIFJXX2ludGVycnVwdF9yZWFkW0JhbmtdID0gMSdiMTsKKyAgICAgICAgICAgICAgICBpZiAoRGVidWcpICRkaXNwbGF5ICgiYXQgdGltZSAldCBOT1RFIDogUmVhZC9Xcml0ZSBCYW5rICVkIGludGVycnVwdCBSZWFkIEJhbmsgJWQgd2l0aCBBdXRvcHJlY2hhcmdlIiwgJHRpbWUsIEJhLCBCYW5rKTsKKyAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAvLyBSZWFkIG9yIFdyaXRlIHdpdGggQXV0byBQcmVjaGFyZ2UKKyAgICAgICAgICAgIGlmIChBZGRyWzEwXSA9PSAxJ2IxKSBiZWdpbgorICAgICAgICAgICAgICAgIEF1dG9fcHJlY2hhcmdlW0JhXSA9IDEnYjE7CisgICAgICAgICAgICAgICAgQ291bnRfcHJlY2hhcmdlW0JhXSA9IDA7CisgICAgICAgICAgICAgICAgaWYgKFJlYWRfZW5hYmxlID09IDEnYjEpIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIFJlYWRfcHJlY2hhcmdlW0JhXSA9IDEnYjE7CisgICAgICAgICAgICAgICAgZW5kIGVsc2UgaWYgKFdyaXRlX2VuYWJsZSA9PSAxJ2IxKSBiZWdpbgorICAgICAgICAgICAgICAgICAgICBXcml0ZV9wcmVjaGFyZ2VbQmFdID0gMSdiMTsKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKworICAgICAgICAvLyAgUmVhZCB3aXRoIEF1dG8gUHJlY2hhcmdlIENhbGN1bGF0aW9uCisgICAgICAgIC8vICAgICAgVGhlIGRldmljZSBzdGFydCBpbnRlcm5hbCBwcmVjaGFyZ2U6CisgICAgICAgIC8vICAgICAgICAgIDEuICBDQVMgTGF0ZW5jeSAtIDEgY3ljbGVzIGJlZm9yZSBsYXN0IGJ1cnN0CisgICAgICAgIC8vICAgICAgYW5kIDIuICBNZWV0IG1pbmltdW0gdFJBUyByZXF1aXJlbWVudAorICAgICAgICAvLyAgICAgICBvciAzLiAgSW50ZXJydXB0IGJ5IGEgUmVhZCBvciBXcml0ZSAod2l0aCBvciB3aXRob3V0IEF1dG9QcmVjaGFyZ2UpCisgICAgICAgIGlmICgoQXV0b19wcmVjaGFyZ2VbMF0gPT0gMSdiMSkgJiYgKFJlYWRfcHJlY2hhcmdlWzBdID09IDEnYjEpKSBiZWdpbgorICAgICAgICAgICAgaWYgKCgoJHRpbWUgLSBSQVNfY2hrMCA+PSB0UkFTKSAmJiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhc2UgMgorICAgICAgICAgICAgICAgICgoQnVyc3RfbGVuZ3RoXzEgPT0gMSdiMSAmJiBDb3VudF9wcmVjaGFyZ2VbMF0gPj0gMSkgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhc2UgMQorICAgICAgICAgICAgICAgICAoQnVyc3RfbGVuZ3RoXzIgPT0gMSdiMSAmJiBDb3VudF9wcmVjaGFyZ2VbMF0gPj0gMikgfHwKKyAgICAgICAgICAgICAgICAgKEJ1cnN0X2xlbmd0aF80ID09IDEnYjEgJiYgQ291bnRfcHJlY2hhcmdlWzBdID49IDQpIHx8CisgICAgICAgICAgICAgICAgIChCdXJzdF9sZW5ndGhfOCA9PSAxJ2IxICYmIENvdW50X3ByZWNoYXJnZVswXSA+PSA4KSkpIHx8CisgICAgICAgICAgICAgICAgIChSV19pbnRlcnJ1cHRfcmVhZFswXSA9PSAxJ2IxKSkgYmVnaW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FzZSAzCisgICAgICAgICAgICAgICAgICAgIFBjX2IwID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgQWN0X2IwID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgUlBfY2hrMCA9ICR0aW1lOworICAgICAgICAgICAgICAgICAgICBBdXRvX3ByZWNoYXJnZVswXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgIFJlYWRfcHJlY2hhcmdlWzBdID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgUldfaW50ZXJydXB0X3JlYWRbMF0gPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICBpZiAoRGVidWcpICRkaXNwbGF5ICgiYXQgdGltZSAldCBOT1RFIDogU3RhcnQgSW50ZXJuYWwgQXV0byBQcmVjaGFyZ2UgZm9yIEJhbmsgMCIsICR0aW1lKTsKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKyAgICAgICAgaWYgKChBdXRvX3ByZWNoYXJnZVsxXSA9PSAxJ2IxKSAmJiAoUmVhZF9wcmVjaGFyZ2VbMV0gPT0gMSdiMSkpIGJlZ2luCisgICAgICAgICAgICBpZiAoKCgkdGltZSAtIFJBU19jaGsxID49IHRSQVMpICYmCisgICAgICAgICAgICAgICAgKChCdXJzdF9sZW5ndGhfMSA9PSAxJ2IxICYmIENvdW50X3ByZWNoYXJnZVsxXSA+PSAxKSB8fCAKKyAgICAgICAgICAgICAgICAgKEJ1cnN0X2xlbmd0aF8yID09IDEnYjEgJiYgQ291bnRfcHJlY2hhcmdlWzFdID49IDIpIHx8CisgICAgICAgICAgICAgICAgIChCdXJzdF9sZW5ndGhfNCA9PSAxJ2IxICYmIENvdW50X3ByZWNoYXJnZVsxXSA+PSA0KSB8fAorICAgICAgICAgICAgICAgICAoQnVyc3RfbGVuZ3RoXzggPT0gMSdiMSAmJiBDb3VudF9wcmVjaGFyZ2VbMV0gPj0gOCkpKSB8fAorICAgICAgICAgICAgICAgICAoUldfaW50ZXJydXB0X3JlYWRbMV0gPT0gMSdiMSkpIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIFBjX2IxID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgQWN0X2IxID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgUlBfY2hrMSA9ICR0aW1lOworICAgICAgICAgICAgICAgICAgICBBdXRvX3ByZWNoYXJnZVsxXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgIFJlYWRfcHJlY2hhcmdlWzFdID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgUldfaW50ZXJydXB0X3JlYWRbMV0gPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICBpZiAoRGVidWcpICRkaXNwbGF5ICgiYXQgdGltZSAldCBOT1RFIDogU3RhcnQgSW50ZXJuYWwgQXV0byBQcmVjaGFyZ2UgZm9yIEJhbmsgMSIsICR0aW1lKTsKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKyAgICAgICAgaWYgKChBdXRvX3ByZWNoYXJnZVsyXSA9PSAxJ2IxKSAmJiAoUmVhZF9wcmVjaGFyZ2VbMl0gPT0gMSdiMSkpIGJlZ2luCisgICAgICAgICAgICBpZiAoKCgkdGltZSAtIFJBU19jaGsyID49IHRSQVMpICYmCisgICAgICAgICAgICAgICAgKChCdXJzdF9sZW5ndGhfMSA9PSAxJ2IxICYmIENvdW50X3ByZWNoYXJnZVsyXSA+PSAxKSB8fCAKKyAgICAgICAgICAgICAgICAgKEJ1cnN0X2xlbmd0aF8yID09IDEnYjEgJiYgQ291bnRfcHJlY2hhcmdlWzJdID49IDIpIHx8CisgICAgICAgICAgICAgICAgIChCdXJzdF9sZW5ndGhfNCA9PSAxJ2IxICYmIENvdW50X3ByZWNoYXJnZVsyXSA+PSA0KSB8fAorICAgICAgICAgICAgICAgICAoQnVyc3RfbGVuZ3RoXzggPT0gMSdiMSAmJiBDb3VudF9wcmVjaGFyZ2VbMl0gPj0gOCkpKSB8fAorICAgICAgICAgICAgICAgICAoUldfaW50ZXJydXB0X3JlYWRbMl0gPT0gMSdiMSkpIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIFBjX2IyID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgQWN0X2IyID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgUlBfY2hrMiA9ICR0aW1lOworICAgICAgICAgICAgICAgICAgICBBdXRvX3ByZWNoYXJnZVsyXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgIFJlYWRfcHJlY2hhcmdlWzJdID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgUldfaW50ZXJydXB0X3JlYWRbMl0gPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICBpZiAoRGVidWcpICRkaXNwbGF5ICgiYXQgdGltZSAldCBOT1RFIDogU3RhcnQgSW50ZXJuYWwgQXV0byBQcmVjaGFyZ2UgZm9yIEJhbmsgMiIsICR0aW1lKTsKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKyAgICAgICAgaWYgKChBdXRvX3ByZWNoYXJnZVszXSA9PSAxJ2IxKSAmJiAoUmVhZF9wcmVjaGFyZ2VbM10gPT0gMSdiMSkpIGJlZ2luCisgICAgICAgICAgICBpZiAoKCgkdGltZSAtIFJBU19jaGszID49IHRSQVMpICYmCisgICAgICAgICAgICAgICAgKChCdXJzdF9sZW5ndGhfMSA9PSAxJ2IxICYmIENvdW50X3ByZWNoYXJnZVszXSA+PSAxKSB8fCAKKyAgICAgICAgICAgICAgICAgKEJ1cnN0X2xlbmd0aF8yID09IDEnYjEgJiYgQ291bnRfcHJlY2hhcmdlWzNdID49IDIpIHx8CisgICAgICAgICAgICAgICAgIChCdXJzdF9sZW5ndGhfNCA9PSAxJ2IxICYmIENvdW50X3ByZWNoYXJnZVszXSA+PSA0KSB8fAorICAgICAgICAgICAgICAgICAoQnVyc3RfbGVuZ3RoXzggPT0gMSdiMSAmJiBDb3VudF9wcmVjaGFyZ2VbM10gPj0gOCkpKSB8fAorICAgICAgICAgICAgICAgICAoUldfaW50ZXJydXB0X3JlYWRbM10gPT0gMSdiMSkpIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIFBjX2IzID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgQWN0X2IzID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgUlBfY2hrMyA9ICR0aW1lOworICAgICAgICAgICAgICAgICAgICBBdXRvX3ByZWNoYXJnZVszXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgIFJlYWRfcHJlY2hhcmdlWzNdID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgUldfaW50ZXJydXB0X3JlYWRbM10gPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICBpZiAoRGVidWcpICRkaXNwbGF5ICgiYXQgdGltZSAldCBOT1RFIDogU3RhcnQgSW50ZXJuYWwgQXV0byBQcmVjaGFyZ2UgZm9yIEJhbmsgMyIsICR0aW1lKTsKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKworICAgICAgICAvLyBJbnRlcm5hbCBQcmVjaGFyZ2Ugb3IgQnN0CisgICAgICAgIGlmIChDb21tYW5kWzBdID09IGBTRFJBTV9QUkVDSCkgYmVnaW4gICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHJlY2hhcmdlIHRlcm1pbmF0ZSBhIHJlYWQgd2l0aCBzYW1lIGJhbmsgb3IgYWxsIGJhbmtzCisgICAgICAgICAgICBpZiAoQmFua19wcmVjaGFyZ2VbMF0gPT0gQmFuayB8fCBBMTBfcHJlY2hhcmdlWzBdID09IDEnYjEpIGJlZ2luCisgICAgICAgICAgICAgICAgaWYgKERhdGFfb3V0X2VuYWJsZSA9PSAxJ2IxKSBiZWdpbgorICAgICAgICAgICAgICAgICAgICBEYXRhX291dF9lbmFibGUgPSAxJ2IwOworICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZCBlbHNlIGlmIChDb21tYW5kWzBdID09IGBTRFJBTV9CU1QpIGJlZ2luICAgICAgICAgICAgICAgICAgLy8gQlNUIHRlcm1pbmF0ZSBhIHJlYWQgdG8gY3VycmVudCBiYW5rCisgICAgICAgICAgICBpZiAoRGF0YV9vdXRfZW5hYmxlID09IDEnYjEpIGJlZ2luCisgICAgICAgICAgICAgICAgRGF0YV9vdXRfZW5hYmxlID0gMSdiMDsKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKworICAgICAgICBpZiAoRGF0YV9vdXRfZW5hYmxlID09IDEnYjApIGJlZ2luCisgICAgICAgICAgICBEcV9yZWcgPD0gI3RPSCB7ZGF0YV9iaXRzezEnYnp9fTsKKyAgICAgICAgZW5kCisKKyAgICAgICAgLy8gRGV0ZWN0IFJlYWQgb3IgV3JpdGUgY29tbWFuZAorICAgICAgICBpZiAoQ29tbWFuZFswXSA9PSBgUkVBRCB8fCBDb21tYW5kWzBdID09IGBSRUFEX0EpIGJlZ2luCisgICAgICAgICAgICBCYW5rID0gQmFua19hZGRyWzBdOworICAgICAgICAgICAgQ29sID0gQ29sX2FkZHJbMF07CisgICAgICAgICAgICBDb2xfYnJzdCA9IENvbF9hZGRyWzBdOworICAgICAgICAgICAgaWYgKEJhbmtfYWRkclswXSA9PSAyJ2IwMCkgYmVnaW4KKyAgICAgICAgICAgICAgICBSb3cgPSBCMF9yb3dfYWRkcjsKKyAgICAgICAgICAgIGVuZCBlbHNlIGlmIChCYW5rX2FkZHJbMF0gPT0gMidiMDEpIGJlZ2luCisgICAgICAgICAgICAgICAgUm93ID0gQjFfcm93X2FkZHI7CisgICAgICAgICAgICBlbmQgZWxzZSBpZiAoQmFua19hZGRyWzBdID09IDInYjEwKSBiZWdpbgorICAgICAgICAgICAgICAgIFJvdyA9IEIyX3Jvd19hZGRyOworICAgICAgICAgICAgZW5kIGVsc2UgaWYgKEJhbmtfYWRkclswXSA9PSAyJ2IxMSkgYmVnaW4KKyAgICAgICAgICAgICAgICBSb3cgPSBCM19yb3dfYWRkcjsKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgQnVyc3RfY291bnRlciA9IDA7CisgICAgICAgICAgICBEYXRhX2luX2VuYWJsZSA9IDEnYjA7CisgICAgICAgICAgICBEYXRhX291dF9lbmFibGUgPSAxJ2IxOworICAgICAgICBlbmQgZWxzZSBpZiAoQ29tbWFuZFswXSA9PSBgU0RSQU1fV1JJVEUgfHwgQ29tbWFuZFswXSA9PSBgV1JJVEVfQSkgYmVnaW4KKyAgICAgICAgICAgIEJhbmsgPSBCYW5rX2FkZHJbMF07CisgICAgICAgICAgICBDb2wgPSBDb2xfYWRkclswXTsKKyAgICAgICAgICAgIENvbF9icnN0ID0gQ29sX2FkZHJbMF07CisgICAgICAgICAgICBpZiAoQmFua19hZGRyWzBdID09IDInYjAwKSBiZWdpbgorICAgICAgICAgICAgICAgIFJvdyA9IEIwX3Jvd19hZGRyOworICAgICAgICAgICAgZW5kIGVsc2UgaWYgKEJhbmtfYWRkclswXSA9PSAyJ2IwMSkgYmVnaW4KKyAgICAgICAgICAgICAgICBSb3cgPSBCMV9yb3dfYWRkcjsKKyAgICAgICAgICAgIGVuZCBlbHNlIGlmIChCYW5rX2FkZHJbMF0gPT0gMidiMTApIGJlZ2luCisgICAgICAgICAgICAgICAgUm93ID0gQjJfcm93X2FkZHI7CisgICAgICAgICAgICBlbmQgZWxzZSBpZiAoQmFua19hZGRyWzBdID09IDInYjExKSBiZWdpbgorICAgICAgICAgICAgICAgIFJvdyA9IEIzX3Jvd19hZGRyOworICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBCdXJzdF9jb3VudGVyID0gMDsKKyAgICAgICAgICAgIERhdGFfaW5fZW5hYmxlID0gMSdiMTsKKyAgICAgICAgICAgIERhdGFfb3V0X2VuYWJsZSA9IDEnYjA7CisgICAgICAgIGVuZAorCisgICAgICAgIC8vIERRIGJ1ZmZlciAoRHJpdmVyL1JlY2VpdmVyKQorICAgICAgICBpZiAoRGF0YV9pbl9lbmFibGUgPT0gMSdiMSkgYmVnaW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdyaXRpbmcgRGF0YSB0byBNZW1vcnkKKyAgICAgICAgICAgIC8vIEFycmF5IGJ1ZmZlcgorICAgICAgICAgICAgaWYgKEJhbmsgPT0gMidiMDApIERxX2RxbSBbMTUgOiAwXSA9IEJhbmswIFt7Um93LCBDb2x9XTsKKyAgICAgICAgICAgIGlmIChCYW5rID09IDInYjAxKSBEcV9kcW0gWzE1IDogMF0gPSBCYW5rMSBbe1JvdywgQ29sfV07CisgICAgICAgICAgICBpZiAoQmFuayA9PSAyJ2IxMCkgRHFfZHFtIFsxNSA6IDBdID0gQmFuazIgW3tSb3csIENvbH1dOworICAgICAgICAgICAgaWYgKEJhbmsgPT0gMidiMTEpIERxX2RxbSBbMTUgOiAwXSA9IEJhbmszIFt7Um93LCBDb2x9XTsKKyAgICAgICAgICAgIC8vIERxbSBvcGVyYXRpb24KKyAgICAgICAgICAgIGlmIChEcW1bMF0gPT0gMSdiMCkgRHFfZHFtIFsgNyA6IDBdID0gRHEgWyA3IDogMF07CisgICAgICAgICAgICAvLyBXcml0ZSB0byBtZW1vcnkKKyAgICAgICAgICAgIGlmIChCYW5rID09IDInYjAwKSBCYW5rMCBbe1JvdywgQ29sfV0gPSBEcV9kcW0gWzE1IDogMF07CisgICAgICAgICAgICBpZiAoQmFuayA9PSAyJ2IwMSkgQmFuazEgW3tSb3csIENvbH1dID0gRHFfZHFtIFsxNSA6IDBdOworICAgICAgICAgICAgaWYgKEJhbmsgPT0gMidiMTApIEJhbmsyIFt7Um93LCBDb2x9XSA9IERxX2RxbSBbMTUgOiAwXTsKKyAgICAgICAgICAgIGlmIChCYW5rID09IDInYjExKSBCYW5rMyBbe1JvdywgQ29sfV0gPSBEcV9kcW0gWzE1IDogMF07CisgICAgICAgICAgICAvLyBPdXRwdXQgcmVzdWx0CisgICAgICAgICAgICBpZiAoRHFtID09IDEnYjEpIGJlZ2luCisgICAgICAgICAgICAgICAgaWYgKERlYnVnKSAkZGlzcGxheSgiYXQgdGltZSAldCBXUklURTogQmFuayA9ICVkIFJvdyA9ICVkLCBDb2wgPSAlZCwgRGF0YSA9IEhpLVogZHVlIHRvIERRTSIsICR0aW1lLCBCYW5rLCBSb3csIENvbCk7CisgICAgICAgICAgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICAgICAgICAgIGlmIChEZWJ1ZykgJGRpc3BsYXkoImF0IHRpbWUgJXQgV1JJVEU6IEJhbmsgPSAlZCBSb3cgPSAlZCwgQ29sID0gJWQsIERhdGEgPSAlaCwgRHFtID0gJWIiLCAkdGltZSwgQmFuaywgUm93LCBDb2wsIERxX2RxbSwgRHFtKTsKKyAgICAgICAgICAgICAgICAvLyBSZWNvcmQgdFdSIHRpbWUgYW5kIHJlc2V0IGNvdW50ZXIKKyAgICAgICAgICAgICAgICBXUl9jaGsgW0JhbmtdID0gJHRpbWU7CisgICAgICAgICAgICAgICAgV1JfY291bnRlciBbQmFua10gPSAwOworICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAvLyBBZHZhbmNlIGJ1cnN0IGNvdW50ZXIgc3Vicm91dGluZQorICAgICAgICAgICAgI3RIWiBCdXJzdDsKKyAgICAgICAgZW5kIGVsc2UgaWYgKERhdGFfb3V0X2VuYWJsZSA9PSAxJ2IxKSBiZWdpbiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZWFkaW5nIERhdGEgZnJvbSBNZW1vcnkKKyAgICAgICAgICAgIC8vIEFycmF5IGJ1ZmZlcgorICAgICAgICAgICAgaWYgKEJhbmsgPT0gMidiMDApIERxX2RxbSBbMTUgOiAwXSA9IEJhbmswIFt7Um93LCBDb2x9XTsKKyAgICAgICAgICAgIGlmIChCYW5rID09IDInYjAxKSBEcV9kcW0gWzE1IDogMF0gPSBCYW5rMSBbe1JvdywgQ29sfV07CisgICAgICAgICAgICBpZiAoQmFuayA9PSAyJ2IxMCkgRHFfZHFtIFsxNSA6IDBdID0gQmFuazIgW3tSb3csIENvbH1dOworICAgICAgICAgICAgaWYgKEJhbmsgPT0gMidiMTEpIERxX2RxbSBbMTUgOiAwXSA9IEJhbmszIFt7Um93LCBDb2x9XTsKKyAgICAgICAgICAgIC8vIERxbSBvcGVyYXRpb24KKyAgICAgICAgICAgIGlmIChEcW1fcmVnMFswXSA9PSAxJ2IxKSBEcV9kcW0gWyA3IDogMF0gPSA4J2J6OworICAgICAgICAgICAgLy8gRGlzcGxheSByZXN1bHQKKyAgICAgICAgICAgIERxX3JlZyBbMTUgOiAwXSA9ICN0QUMgRHFfZHFtIFsxNSA6IDBdOworICAgICAgICAgICAgaWYgKERxbV9yZWcwID09IDEnYjEpIGJlZ2luCisgICAgICAgICAgICAgICAgaWYgKERlYnVnKSAkZGlzcGxheSgiYXQgdGltZSAldCBSRUFEIDogQmFuayA9ICVkIFJvdyA9ICVkLCBDb2wgPSAlZCwgRGF0YSA9IEhpLVogZHVlIHRvIERRTSIsICR0aW1lLCBCYW5rLCBSb3csIENvbCk7CisgICAgICAgICAgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICAgICAgICAgIGlmIChEZWJ1ZykgJGRpc3BsYXkoImF0IHRpbWUgJXQgUkVBRCA6IEJhbmsgPSAlZCBSb3cgPSAlZCwgQ29sID0gJWQsIERhdGEgPSAlaCwgRHFtID0gJWIiLCAkdGltZSwgQmFuaywgUm93LCBDb2wsIERxX3JlZywgRHFtX3JlZzApOworICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAvLyBBZHZhbmNlIGJ1cnN0IGNvdW50ZXIgc3Vicm91dGluZQorICAgICAgICAgICAgQnVyc3Q7CisgICAgICAgIGVuZAorICAgIGVuZAorCisgICAgLy8gIFdyaXRlIHdpdGggQXV0byBQcmVjaGFyZ2UgQ2FsY3VsYXRpb24KKyAgICAvLyAgICAgIFRoZSBkZXZpY2Ugc3RhcnQgaW50ZXJuYWwgcHJlY2hhcmdlOgorICAgIC8vICAgICAgICAgIDEuICB0V1IgQ2xvY2sgYWZ0ZXIgbGFzdCBidXJzdAorICAgIC8vICAgICAgYW5kIDIuICBNZWV0IG1pbmltdW0gdFJBUyByZXF1aXJlbWVudAorICAgIC8vICAgICAgIG9yIDMuICBJbnRlcnJ1cHQgYnkgYSBSZWFkIG9yIFdyaXRlICh3aXRoIG9yIHdpdGhvdXQgQXV0b1ByZWNoYXJnZSkKKyAgICBhbHdheXMgQCAoV1JfY291bnRlclswXSkgYmVnaW4KKyAgICAgICAgaWYgKChBdXRvX3ByZWNoYXJnZVswXSA9PSAxJ2IxKSAmJiAoV3JpdGVfcHJlY2hhcmdlWzBdID09IDEnYjEpKSBiZWdpbgorICAgICAgICAgICAgaWYgKCgoJHRpbWUgLSBSQVNfY2hrMCA+PSB0UkFTKSAmJiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDYXNlIDIKKyAgICAgICAgICAgICAgICgoKEJ1cnN0X2xlbmd0aF8xID09IDEnYjEgfHwgV3JpdGVfYnVyc3RfbW9kZSA9PSAxJ2IxKSAmJiBDb3VudF9wcmVjaGFyZ2UgWzBdID49IDEpIHx8ICAgLy8gQ2FzZSAxCisgICAgICAgICAgICAgICAgIChCdXJzdF9sZW5ndGhfMiA9PSAxJ2IxICYmIENvdW50X3ByZWNoYXJnZSBbMF0gPj0gMikgfHwKKyAgICAgICAgICAgICAgICAgKEJ1cnN0X2xlbmd0aF80ID09IDEnYjEgJiYgQ291bnRfcHJlY2hhcmdlIFswXSA+PSA0KSB8fAorICAgICAgICAgICAgICAgICAoQnVyc3RfbGVuZ3RoXzggPT0gMSdiMSAmJiBDb3VudF9wcmVjaGFyZ2UgWzBdID49IDgpKSkgfHwKKyAgICAgICAgICAgICAgICAgKFJXX2ludGVycnVwdF93cml0ZVswXSA9PSAxJ2IxICYmIFdSX2NvdW50ZXJbMF0gPj0gMikpIGJlZ2luICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FzZSAzIChzdG9wIGNvdW50IHdoZW4gaW50ZXJydXB0KQorICAgICAgICAgICAgICAgICAgICBBdXRvX3ByZWNoYXJnZVswXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgIFdyaXRlX3ByZWNoYXJnZVswXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgIFJXX2ludGVycnVwdF93cml0ZVswXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICN0V1JhOyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2FpdCBmb3IgdFdSCisgICAgICAgICAgICAgICAgICAgIFBjX2IwID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgQWN0X2IwID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgUlBfY2hrMCA9ICR0aW1lOworICAgICAgICAgICAgICAgICAgICBpZiAoRGVidWcpICRkaXNwbGF5ICgiYXQgdGltZSAldCBOT1RFIDogU3RhcnQgSW50ZXJuYWwgQXV0byBQcmVjaGFyZ2UgZm9yIEJhbmsgMCIsICR0aW1lKTsKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKyAgICBlbmQKKyAgICBhbHdheXMgQCAoV1JfY291bnRlclsxXSkgYmVnaW4KKyAgICAgICAgaWYgKChBdXRvX3ByZWNoYXJnZVsxXSA9PSAxJ2IxKSAmJiAoV3JpdGVfcHJlY2hhcmdlWzFdID09IDEnYjEpKSBiZWdpbgorICAgICAgICAgICAgaWYgKCgoJHRpbWUgLSBSQVNfY2hrMSA+PSB0UkFTKSAmJgorICAgICAgICAgICAgICAgKCgoQnVyc3RfbGVuZ3RoXzEgPT0gMSdiMSB8fCBXcml0ZV9idXJzdF9tb2RlID09IDEnYjEpICYmIENvdW50X3ByZWNoYXJnZSBbMV0gPj0gMSkgfHwgCisgICAgICAgICAgICAgICAgIChCdXJzdF9sZW5ndGhfMiA9PSAxJ2IxICYmIENvdW50X3ByZWNoYXJnZSBbMV0gPj0gMikgfHwKKyAgICAgICAgICAgICAgICAgKEJ1cnN0X2xlbmd0aF80ID09IDEnYjEgJiYgQ291bnRfcHJlY2hhcmdlIFsxXSA+PSA0KSB8fAorICAgICAgICAgICAgICAgICAoQnVyc3RfbGVuZ3RoXzggPT0gMSdiMSAmJiBDb3VudF9wcmVjaGFyZ2UgWzFdID49IDgpKSkgfHwKKyAgICAgICAgICAgICAgICAgKFJXX2ludGVycnVwdF93cml0ZVsxXSA9PSAxJ2IxICYmIFdSX2NvdW50ZXJbMV0gPj0gMikpIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIEF1dG9fcHJlY2hhcmdlWzFdID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgV3JpdGVfcHJlY2hhcmdlWzFdID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgUldfaW50ZXJydXB0X3dyaXRlWzFdID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgI3RXUmE7ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXYWl0IGZvciB0V1IKKyAgICAgICAgICAgICAgICAgICAgUGNfYjEgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICBBY3RfYjEgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICBSUF9jaGsxID0gJHRpbWU7CisgICAgICAgICAgICAgICAgICAgIGlmIChEZWJ1ZykgJGRpc3BsYXkgKCJhdCB0aW1lICV0IE5PVEUgOiBTdGFydCBJbnRlcm5hbCBBdXRvIFByZWNoYXJnZSBmb3IgQmFuayAxIiwgJHRpbWUpOworICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorICAgIGVuZAorICAgIGFsd2F5cyBAIChXUl9jb3VudGVyWzJdKSBiZWdpbgorICAgICAgICBpZiAoKEF1dG9fcHJlY2hhcmdlWzJdID09IDEnYjEpICYmIChXcml0ZV9wcmVjaGFyZ2VbMl0gPT0gMSdiMSkpIGJlZ2luCisgICAgICAgICAgICBpZiAoKCgkdGltZSAtIFJBU19jaGsyID49IHRSQVMpICYmCisgICAgICAgICAgICAgICAoKChCdXJzdF9sZW5ndGhfMSA9PSAxJ2IxIHx8IFdyaXRlX2J1cnN0X21vZGUgPT0gMSdiMSkgJiYgQ291bnRfcHJlY2hhcmdlIFsyXSA+PSAxKSB8fCAKKyAgICAgICAgICAgICAgICAgKEJ1cnN0X2xlbmd0aF8yID09IDEnYjEgJiYgQ291bnRfcHJlY2hhcmdlIFsyXSA+PSAyKSB8fAorICAgICAgICAgICAgICAgICAoQnVyc3RfbGVuZ3RoXzQgPT0gMSdiMSAmJiBDb3VudF9wcmVjaGFyZ2UgWzJdID49IDQpIHx8CisgICAgICAgICAgICAgICAgIChCdXJzdF9sZW5ndGhfOCA9PSAxJ2IxICYmIENvdW50X3ByZWNoYXJnZSBbMl0gPj0gOCkpKSB8fAorICAgICAgICAgICAgICAgICAoUldfaW50ZXJydXB0X3dyaXRlWzJdID09IDEnYjEgJiYgV1JfY291bnRlclsyXSA+PSAyKSkgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgQXV0b19wcmVjaGFyZ2VbMl0gPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICBXcml0ZV9wcmVjaGFyZ2VbMl0gPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICBSV19pbnRlcnJ1cHRfd3JpdGVbMl0gPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAjdFdSYTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdhaXQgZm9yIHRXUgorICAgICAgICAgICAgICAgICAgICBQY19iMiA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgIEFjdF9iMiA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgIFJQX2NoazIgPSAkdGltZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKERlYnVnKSAkZGlzcGxheSAoImF0IHRpbWUgJXQgTk9URSA6IFN0YXJ0IEludGVybmFsIEF1dG8gUHJlY2hhcmdlIGZvciBCYW5rIDIiLCAkdGltZSk7CisgICAgICAgICAgICBlbmQKKyAgICAgICAgZW5kCisgICAgZW5kCisgICAgYWx3YXlzIEAgKFdSX2NvdW50ZXJbM10pIGJlZ2luCisgICAgICAgIGlmICgoQXV0b19wcmVjaGFyZ2VbM10gPT0gMSdiMSkgJiYgKFdyaXRlX3ByZWNoYXJnZVszXSA9PSAxJ2IxKSkgYmVnaW4KKyAgICAgICAgICAgIGlmICgoKCR0aW1lIC0gUkFTX2NoazMgPj0gdFJBUykgJiYKKyAgICAgICAgICAgICAgICgoKEJ1cnN0X2xlbmd0aF8xID09IDEnYjEgfHwgV3JpdGVfYnVyc3RfbW9kZSA9PSAxJ2IxKSAmJiBDb3VudF9wcmVjaGFyZ2UgWzNdID49IDEpIHx8IAorICAgICAgICAgICAgICAgICAoQnVyc3RfbGVuZ3RoXzIgPT0gMSdiMSAmJiBDb3VudF9wcmVjaGFyZ2UgWzNdID49IDIpIHx8CisgICAgICAgICAgICAgICAgIChCdXJzdF9sZW5ndGhfNCA9PSAxJ2IxICYmIENvdW50X3ByZWNoYXJnZSBbM10gPj0gNCkgfHwKKyAgICAgICAgICAgICAgICAgKEJ1cnN0X2xlbmd0aF84ID09IDEnYjEgJiYgQ291bnRfcHJlY2hhcmdlIFszXSA+PSA4KSkpIHx8CisgICAgICAgICAgICAgICAgIChSV19pbnRlcnJ1cHRfd3JpdGVbM10gPT0gMSdiMSAmJiBXUl9jb3VudGVyWzNdID49IDIpKSBiZWdpbgorICAgICAgICAgICAgICAgICAgICBBdXRvX3ByZWNoYXJnZVszXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgIFdyaXRlX3ByZWNoYXJnZVszXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgIFJXX2ludGVycnVwdF93cml0ZVszXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICN0V1JhOyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2FpdCBmb3IgdFdSCisgICAgICAgICAgICAgICAgICAgIFBjX2IzID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgQWN0X2IzID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgUlBfY2hrMyA9ICR0aW1lOworICAgICAgICAgICAgICAgICAgICBpZiAoRGVidWcpICRkaXNwbGF5ICgiYXQgdGltZSAldCBOT1RFIDogU3RhcnQgSW50ZXJuYWwgQXV0byBQcmVjaGFyZ2UgZm9yIEJhbmsgMyIsICR0aW1lKTsKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKyAgICBlbmQKKworICAgIHRhc2sgQnVyc3Q7CisgICAgICAgIGJlZ2luCisgICAgICAgICAgICAvLyBBZHZhbmNlIEJ1cnN0IENvdW50ZXIKKyAgICAgICAgICAgIEJ1cnN0X2NvdW50ZXIgPSBCdXJzdF9jb3VudGVyICsgMTsKKworICAgICAgICAgICAgLy8gQnVyc3QgVHlwZQorICAgICAgICAgICAgaWYgKE1vZGVfcmVnWzNdID09IDEnYjApIGJlZ2luICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNlcXVlbnRpYWwgQnVyc3QKKyAgICAgICAgICAgICAgICBDb2xfdGVtcCA9IENvbCArIDE7CisgICAgICAgICAgICBlbmQgZWxzZSBpZiAoTW9kZV9yZWdbM10gPT0gMSdiMSkgYmVnaW4gICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW50ZXJsZWF2ZWQgQnVyc3QKKyAgICAgICAgICAgICAgICBDb2xfdGVtcFsyXSA9ICBCdXJzdF9jb3VudGVyWzJdIF4gIENvbF9icnN0WzJdOworICAgICAgICAgICAgICAgIENvbF90ZW1wWzFdID0gIEJ1cnN0X2NvdW50ZXJbMV0gXiAgQ29sX2Jyc3RbMV07CisgICAgICAgICAgICAgICAgQ29sX3RlbXBbMF0gPSAgQnVyc3RfY291bnRlclswXSBeICBDb2xfYnJzdFswXTsKKyAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAvLyBCdXJzdCBMZW5ndGgKKyAgICAgICAgICAgIGlmIChCdXJzdF9sZW5ndGhfMikgYmVnaW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBCdXJzdCBMZW5ndGggPSAyCisgICAgICAgICAgICAgICAgQ29sIFswXSA9IENvbF90ZW1wIFswXTsKKyAgICAgICAgICAgIGVuZCBlbHNlIGlmIChCdXJzdF9sZW5ndGhfNCkgYmVnaW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBCdXJzdCBMZW5ndGggPSA0CisgICAgICAgICAgICAgICAgQ29sIFsxIDogMF0gPSBDb2xfdGVtcCBbMSA6IDBdOworICAgICAgICAgICAgZW5kIGVsc2UgaWYgKEJ1cnN0X2xlbmd0aF84KSBiZWdpbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJ1cnN0IExlbmd0aCA9IDgKKyAgICAgICAgICAgICAgICBDb2wgWzIgOiAwXSA9IENvbF90ZW1wIFsyIDogMF07CisgICAgICAgICAgICBlbmQgZWxzZSBiZWdpbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQnVyc3QgTGVuZ3RoID0gRlVMTAorICAgICAgICAgICAgICAgIENvbCA9IENvbF90ZW1wOworICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgIC8vIEJ1cnN0IFJlYWQgU2luZ2xlIFdyaXRlICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoV3JpdGVfYnVyc3RfbW9kZSA9PSAxJ2IxKSBiZWdpbgorICAgICAgICAgICAgICAgIERhdGFfaW5fZW5hYmxlID0gMSdiMDsKKyAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAvLyBEYXRhIENvdW50ZXIKKyAgICAgICAgICAgIGlmIChCdXJzdF9sZW5ndGhfMSA9PSAxJ2IxKSBiZWdpbgorICAgICAgICAgICAgICAgIGlmIChCdXJzdF9jb3VudGVyID49IDEpIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIERhdGFfaW5fZW5hYmxlID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgRGF0YV9vdXRfZW5hYmxlID0gMSdiMDsKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZCBlbHNlIGlmIChCdXJzdF9sZW5ndGhfMiA9PSAxJ2IxKSBiZWdpbgorICAgICAgICAgICAgICAgIGlmIChCdXJzdF9jb3VudGVyID49IDIpIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIERhdGFfaW5fZW5hYmxlID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgRGF0YV9vdXRfZW5hYmxlID0gMSdiMDsKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZCBlbHNlIGlmIChCdXJzdF9sZW5ndGhfNCA9PSAxJ2IxKSBiZWdpbgorICAgICAgICAgICAgICAgIGlmIChCdXJzdF9jb3VudGVyID49IDQpIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIERhdGFfaW5fZW5hYmxlID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgRGF0YV9vdXRfZW5hYmxlID0gMSdiMDsKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZCBlbHNlIGlmIChCdXJzdF9sZW5ndGhfOCA9PSAxJ2IxKSBiZWdpbgorICAgICAgICAgICAgICAgIGlmIChCdXJzdF9jb3VudGVyID49IDgpIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIERhdGFfaW5fZW5hYmxlID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgRGF0YV9vdXRfZW5hYmxlID0gMSdiMDsKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKyAgICBlbmR0YXNrCisKKyAgICAvLyBUaW1pbmcgUGFyYW1ldGVycyBmb3IgLTc1IChQQzEzMykgYW5kIENBUyBMYXRlbmN5ID0gMgorICAgIHNwZWNpZnkKKyAgICAgICAgc3BlY3BhcmFtCisgICAgICAgICAgICAgICAgICAgIHRBSCAgPSAgMC44LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGRyLCBCYSBIb2xkIFRpbWUKKyAgICAgICAgICAgICAgICAgICAgdEFTICA9ICAxLjUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkZHIsIEJhIFNldHVwIFRpbWUKKyAgICAgICAgICAgICAgICAgICAgdENIICA9ICAyLjUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENsb2NrIEhpZ2gtTGV2ZWwgV2lkdGgKKyAgICAgICAgICAgICAgICAgICAgdENMICA9ICAyLjUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENsb2NrIExvdy1MZXZlbCBXaWR0aAorICAgICAgICAgICAgICAgICAgICB0Q0sgID0gMTAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2xvY2sgQ3ljbGUgVGltZQorICAgICAgICAgICAgICAgICAgICB0REggID0gIDAuOCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGF0YS1pbiBIb2xkIFRpbWUKKyAgICAgICAgICAgICAgICAgICAgdERTICA9ICAxLjUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERhdGEtaW4gU2V0dXAgVGltZQorICAgICAgICAgICAgICAgICAgICB0Q0tIID0gIDAuOCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ0tFIEhvbGQgIFRpbWUKKyAgICAgICAgICAgICAgICAgICAgdENLUyA9ICAxLjUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENLRSBTZXR1cCBUaW1lCisgICAgICAgICAgICAgICAgICAgIHRDTUggPSAgMC44LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDUyMsIFJBUyMsIENBUyMsIFdFIywgRFFNIyBIb2xkICBUaW1lCisgICAgICAgICAgICAgICAgICAgIHRDTVMgPSAgMS41OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDUyMsIFJBUyMsIENBUyMsIFdFIywgRFFNIyBTZXR1cCBUaW1lCisgICAgICAgICR3aWR0aCAgICAocG9zZWRnZSBDbGssICAgICAgICAgICB0Q0gpOworICAgICAgICAkd2lkdGggICAgKG5lZ2VkZ2UgQ2xrLCAgICAgICAgICAgdENMKTsKKyAgICAgICAgJHBlcmlvZCAgIChuZWdlZGdlIENsaywgICAgICAgICAgIHRDSyk7CisgICAgICAgICRwZXJpb2QgICAocG9zZWRnZSBDbGssICAgICAgICAgICB0Q0spOworICAgICAgICAkc2V0dXBob2xkKHBvc2VkZ2UgQ2xrLCAgICBDa2UsICAgdENLUywgdENLSCk7CisgICAgICAgICRzZXR1cGhvbGQocG9zZWRnZSBDbGssICAgIENzX24sICB0Q01TLCB0Q01IKTsKKyAgICAgICAgJHNldHVwaG9sZChwb3NlZGdlIENsaywgICAgQ2FzX24sIHRDTVMsIHRDTUgpOworICAgICAgICAkc2V0dXBob2xkKHBvc2VkZ2UgQ2xrLCAgICBSYXNfbiwgdENNUywgdENNSCk7CisgICAgICAgICRzZXR1cGhvbGQocG9zZWRnZSBDbGssICAgIFdlX24sICB0Q01TLCB0Q01IKTsKKyAgICAgICAgJHNldHVwaG9sZChwb3NlZGdlIENsaywgICAgQWRkciwgIHRBUywgIHRBSCk7CisgICAgICAgICRzZXR1cGhvbGQocG9zZWRnZSBDbGssICAgIEJhLCAgICB0QVMsICB0QUgpOworICAgICAgICAkc2V0dXBob2xkKHBvc2VkZ2UgQ2xrLCAgICBEcW0sICAgdENNUywgdENNSCk7CisgICAgICAgICRzZXR1cGhvbGQocG9zZWRnZSBEcV9jaGssIERxLCAgICB0RFMsICB0REgpOworICAgIGVuZHNwZWNpZnkKKworZW5kbW9kdWxlCisKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvbW9kZWwvczI1ZmwyNTZzLnN2IGIvdmVyaWxvZy9kdi9tb2RlbC9zMjVmbDI1NnMuc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWUyMzBjZgotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvbW9kZWwvczI1ZmwyNTZzLnN2CkBAIC0wLDAgKzEsODIwNiBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDEyIFNwYW5zaW9uLCBMTEMuCisvLyAKKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogQ3JlYXRlZCBieSBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vICBGaWxlIG5hbWUgOiBzMjVmbDI1NnMudgorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gIENvcHlyaWdodCAoQykgMjAxMiBTcGFuc2lvbiwgTExDLgorLy8KKy8vICBNT0RJRklDQVRJT04gSElTVE9SWSA6CisvLworLy8gIHZlcnNpb246IHwgYXV0aG9yOiAgICAgfCAgbW9kIGRhdGU6ICB8IGNoYW5nZXMgbWFkZToKKy8vICAgIFYxLjAgICAgICBWLk1hbmNldiAgICAgMTkgTm92IDA5ICAgICAgSW5pdGlhbAorLy8gICAgICAgICAgICBSLlByb2tvcG92aWMKKy8vICAgIFYxLjEgICAgICBWLk1hbmNldiAgICAgMDQgTWFyIDEwICAgIGFkZHJfY250IGZvciBzZWNvbmQgcmVhZCBpbgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlnaCBwZXJmb3JtYW5jZSByZWFkIGNvbnRpbnVvdXMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUgY2FuIGNoYW5nZSBpdHMgdmFsdWUgb25seQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBDU05lZyA9ICcwJworLy8gICAgVjEuMiAgICAgIFYuTWFuY2V2ICAgICAyMyBNYXIgMTAgICAgRHVyaW5nIHJlYWQgb3BlcmF0aW9ucyByZWFkX291dAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmFsIGNoYW5nZXMgaXRzIHZhbHVlIGluCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydGVyIGludGVydmFsCisvLyAgICBWMS4zICAgICAgVi5NYW5jZXYgICAgIDEyIEFwciAxMCAgICBIT0xEIG1vZGUgY29ycmVjdGVkCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25kaXRpb24gZm9yIFBQIG9wZXJhdGlvbgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ycmVjdGVkCisvLyAgICBWMS40ICAgICAgVi5NYW5jZXYgICAgIDIwIE1heSAxMCAgICBTUldEIGJpdCBhc3NpZ25tZW50IGlzIGNvcnJlY3RlZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uZGl0aW9uIGZvciBXUlIgY29tbWFuZCBpbgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVfY3ljbGUgX2RlY29kZSBzZWN0aW9uIGlzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JyZWN0ZWQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJsb2NraW5nIGFzc2lnbm1lbnRzIGZvciBzaWduYWxzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXU1RBUlQgYW5kIFBTVEFSVCBhcmUgcmVwbGFjZWQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggbm9uYmxvY2tpbmcgYXNzaWdubWVudHMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbmRpdGlvbnMgaW4gUGFnZSBQcm9ncmFtCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uIGFyZSBmaXhlZAorLy8gICAgVjEuNSAgICAgIFYuTWFuY2V2ICAgICAyNSBNYXkgMTAgICAgQ29uZGl0aW9ucyBpbiBwcm9ncmFtbWluZworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbnMgYXJlIGZpeGVkCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaW1pbmcgY29udHJvbCBzZWN0aW9ucyBmb3IKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2dyYW0gYW5kIEVyYXNlIG9wZXJhdGlvbiBhcmUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQKKy8vICAgIFYxLjYgICAgICBWLk1hbmNldiAgICAgMDMgSnVuZSAxMCAgIGJ1c19jeWNsZV9zdGF0ZSBzZWN0aW9uIGZvcgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEdTUCBjb21tYW5kIGlzIGZpeGVkCisvLyAgICBWMS43ICAgICAgVi5NYW5jZXYgICAgIDI4IEp1bHkgMTAgICBEdXJpbmcgdGhlIFFVQUQgbW9kZSBIT0xEIyBpbnB1dAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgbm90IG1vbml0b3JlZCBmb3IgaXRzIG5vcm1hbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlIGN5Y2xlIGRlY29kZSBzZWN0aW9uIGlzCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkCisvLyAgICBWMS44ICAgICBCLkNvbGFrb3ZpYyAgIDI0IEF1ZyAxMCAgICBBbGwgcmVkdW5kYW50IHNpZ25hbHMgYXJlIHJlbW92ZWQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gQnVzQ3ljbGUgcHJvY2VzcworLy8gICAgVjEuOSAgICAgIFYuTWFuY2V2ICAgICAzMCBTZXAgMTAgICAgTGF0ZXN0IGRhdGFzaGVldCBhbGlnbmVkCisvLyAgICAgICAgICAgICBCLkNvbGFrb3ZpYworLy8KKy8vICAgIFYyLjAgICAgICBWLk1hbmNldiAgICAgMDUgTm92IDEwICAgIEh5YnJpZCBjb25maWd1cmF0aW9uIGFkZGVkCisvLworLy8gICAgVjIuMSAgICAgIFYuTWFuY2V2ICAgICAxMiBOb3YgMTAgICAgUVVBRCBQcm9ncmFtIG9wZXJhdGlvbiBkdXJpbmcgRXJhc2UKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1c3BlbmQgaXMgYWRkZWQKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdhcm5pbmcgZm9yIFJlc3VtZSB0byBTdXNwZW5kIHRpbWUKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGFkZGVkCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEdXJpbmcgRXJhc2UgU3VzcGVuZCwgYWZ0ZXIgUHJvZ3JhbQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uIGlzIGNvbXBsZXRlZCwgV0VMIGJpdCBpcworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJlZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1wbGVtZXRhdGlvbiBvZiBTb2Z0d2FyZSBSZXNldCBpcworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbmdlZAorLy8gICAgVjIuMiAgICAgIFMuUGV0cm92aWMgICAxOCBBcHIgMTEgICAgQ29ycmVjdGVkIHRpbWluZyBpbiBhbHdheXMgYmxvY2sKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgZ2VuZXJhdGVzIHJpc2luZ19lZGdlX0NTTmVnX2lwZAorLy8gICAgVjIuMyAgICAgIEIuQ29sYWtvdmljICAwNSBKdWx5IDExICAgTGF0ZXN0IGRhdGFzaGVldCBhbGlnbmVkCisvLyAgICBWMi40ICAgICAgQi5Db2xha292aWMgIDE0IEp1bHkgMTEgICBPcHRpbWl6YXRpb24gaXNzdWUgaXMgZml4ZWQKKy8vICAgIFYyLjUgICAgICBWLk1hbmNldiAgICAgMTkgSnVseSAxMSAgIFRpbWluZyBjaGVjayBpc3N1ZSBpcyBmaXhlZAorLy8gICAgVjIuNiAgICAgIFYuIE1hbmNldiAgICAxOCBOb3YgMTEgICAgVGltZSB0SE8gaXMgY2hhbmdlZCB0byAxIG5zCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY3VzdG9tZXIncyByZXF1ZXN0KQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlJXUiBpbnN0cnVjdGlvbiBpcyBjb3JyZWN0ZWQKKy8vICAgIFYyLjcgICAgICBTLlBldHJvdmljICAgMjggQXVnIDEyICAgIFFQUCBJbnN0cnVjdGlvbiBpcyBhbGxvd2VkIG9uCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c2x5IHByb2dyYW1tZWQgcGFnZQorLy8gICAgVjIuOCAgICAgIFYuIE1hbmNldiAgICAxMyBGZWIgMTMgICAgUmV2ZXJ0ZWQgcmVzdHJpY3Rpb24gZm9yIFFQUAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb24gcHJvZ3JhbW1lZCBwYWdlIGFuZAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkZWQgY2xlYXJpbmcgd2l0aCBzZWN0b3IgZXJhc2UKKy8vICAgIFYyLjkgICAgICBTLlBldHJvdmljICAgMTMgTm92IDI4ICAgIENvcnJlY3RlZCBGU00gc3RhdGUgdHJhbnNpdGlvbgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRlZCBvbiBQb3dlci1VcCBhbmQgSFcKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2V0IGluIFN0YXRlR2VuIHByb2Nlc3MKKy8vICAgIFYyLjEwICAgICBWLiBNYW5jZXYgICAgMTMgRGVjIDIwICAgICBDb3JyZWN0ZWQgRExQIHJlYWQKKy8vICAgIFYyLjExICAgICBNLlN0b2phbm92aWMgMTUgTWF5IDE1ICAgIElnbm9yZWQgdXBwZXIgYWRkcmVzcyBiaXRzIGZvciBSRDQKKy8vICAgIFYyLjEyICAgICBNLlN0b2phbm92aWMgMTUgTWF5IDI5ICAgIElnbm9yZWQgdXBwZXIgYWRkcmVzcyBiaXRzIGZvciBhbGwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmRzIGluIFFVQUQgbW9kZQorLy8gICAgVjIuMTMgICAgIE0uU3RvamFub3ZpYyAxNiBNYXkgMTEgICAgRHVyaW5nIFFQUCBhbmQgUVBQNCBjb21tYW5kcworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHNhbWUgcGFnZSBtdXN0IG5vdCBiZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbW1lZCBtb3JlIHRoYW4gb25jZS4gSG93ZXZlcgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8gbm90IGdlbmVyYXRlIFBfRVJSIGlmIHRoaXMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9jY3Vycy4KKy8vICAgIFYyLjE0ICAgICBNLktybmV0YSAgICAgMTkgTWF5IDA3ICAgIFVwZGF0ZWQgYWNjb3JkaW5nIHRvIHRoZSByZXYgKlAKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChRUFAgYW5kIFFQUDQgY29tbWFuZHMgY2hhbmdlZCwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVDQ1JEIGNvbW1hbmQgYWRkZWQsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMT0NLIGJpdCByZW1vdmVkKQorLy8gICAgVjIuMTUgICAgIEIuQmFyYWMgICAgICAyMCBKYW4gMjQgICAgQnVnIDQ5IGZpeGVkLCBpc3N1ZSB3aXRoIG5vdCBhc3NpZ25pbmcgCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0b3IgaW4gY29tbWFuZHMgUDRFNCBhbmQgUDRFCisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gIFBBUlQgREVTQ1JJUFRJT046CisvLworLy8gIExpYnJhcnk6ICAgIEZMQVNICisvLyAgVGVjaG5vbG9neTogRkxBU0ggTUVNT1JZCisvLyAgUGFydDogICAgICAgUzI1RkwyNTZTCisvLworLy8gIERlc2NyaXB0aW9uOiAyNTYgTWVnYWJpdCBTZXJpYWwgRmxhc2ggTWVtb3J5CisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyAgQ29tbWVudHMgOgorLy8gICAgICBGb3IgY29ycmVjdCBzaW11bGF0aW9uLCBzaW11bGF0b3IgcmVzb2x1dGlvbiBzaG91bGQgYmUgc2V0IHRvIDEgcHMKKy8vICAgICAgQSBkZXZpY2Ugb3JkZXJpbmcgKHRyaW0pIG9wdGlvbiBkZXRlcm1pbmVzIHdoZXRoZXIgYSBmZWF0dXJlIGlzIGVuYWJsZWQKKy8vICAgICAgb3Igbm90LCBvciBwcm92aWRlIHJlbGV2YW50IHBhcmFtZXRlcnM6CisvLyAgICAgICAgLTE1dGggY2hhcmFjdGVyIGluIFRpbWluZ01vZGVsIGRldGVybWluZXMgaWYgZW5oYW5jZWQgaGlnaAorLy8gICAgICAgICBwZXJmb3JtYW5jZSBvcHRpb24gaXMgYXZhaWxhYmxlCisvLyAgICAgICAgICAgICgwLDIsMyxSLEEsQixDLEQpIEVIUExDCisvLyAgICAgICAgICAgIChZLFosUyxULEssTCkgICAgIFNlY3VyaXR5IEVIUExDCisvLyAgICAgICAgICAgICg0LDYsNyw4LDksUSkgICAgIEhQTEMKKy8vICAgICAgICAtMTV0aCBjaGFyYWN0ZXIgaW4gVGltaW5nTW9kZWwgZGV0ZXJtaW5lcyBpZiBSRVNFVCMgaW5wdXQKKy8vICAgICAgICAgaXMgYXZhaWxhYmxlCisvLyAgICAgICAgICAgIChSLEEsQixDLEQsUS42LDcsSyxMLFMsVCxNLE4sVSxWKSAgUkVTRVQjIGlzIGF2YWlsYWJsZQorLy8gICAgICAgICAgICAoMCwyLDMsNCw4LDksWS5aLlcsWCkgICAgICAgICAgICAgIFJFU0VUIyBpcyB0aWVkIHRvIHRoZSBpbmFjdGl2ZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLGluc2lkZSB0aGUgcGFja2FnZS4KKy8vICAgICAgICAtMTZ0aCBjaGFyYWN0ZXIgaW4gVGltaW5nTW9kZWwgZGV0ZXJtaW5lcyBTZWN0b3IgYW5kIFBhZ2UgU2l6ZToKKy8vICAgICAgICAgICAgKDApIFNlY3RvciBTaXplID0gNjQga0I7ICBQYWdlIFNpemUgPSAyNTYgYnl0ZXMKKy8vICAgICAgICAgICAgICAgIEh5YnJpZCBUb3AvQm90dG9tIHNlY3RvciBzaXplIGFyY2hpdGVjdHVyZQorLy8gICAgICAgICAgICAoMSkgU2VjdG9yIFNpemUgPSAyNTYga0I7IFBhZ2UgU2l6ZSA9IDUxMiBieXRlcworLy8gICAgICAgICAgICAgICAgVW5pZm9ybSBzZWN0b3Igc2l6ZSBhcmNoaXRlY3R1cmUKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gIEtub3duIEJ1Z3M6CisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gTU9EVUxFIERFQ0xBUkFUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KK2B0aW1lc2NhbGUgMSBwcy8xIHBzCisKK21vZHVsZSBzMjVmbDI1NnMKKyAgICAoCisgICAgICAgIC8vIERhdGEgSW5wdXRzL091dHB1dHMKKyAgICAgICAgU0kgICAgICwKKyAgICAgICAgU08gICAgICwKKyAgICAgICAgLy8gQ29udHJvbHMKKyAgICAgICAgU0NLICAgICwKKyAgICAgICAgQ1NOZWcgICwKKyAgICAgICAgUlNUTmVnICwKKyAgICAgICAgV1BOZWcgICwKKyAgICAgICAgSE9MRE5lZworCispOworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBQb3J0IC8gUGFydCBQaW4gRGVjbGFyYXRpb25zCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgICBpbm91dCAgIFNJICAgICAgICAgICAgOworICAgIGlub3V0ICAgU08gICAgICAgICAgICA7CisKKyAgICBpbnB1dCAgIFNDSyAgICAgICAgICAgOworICAgIGlucHV0ICAgQ1NOZWcgICAgICAgICA7CisgICAgaW5wdXQgICBSU1ROZWcgICAgICAgIDsKKyAgICBpbm91dCAgIEhPTEROZWcgICAgICAgOworICAgIGlub3V0ICAgV1BOZWcgICAgICAgICA7CisKKyAgICAvLyBpbnRlcmNvbm5lY3QgcGF0aCBkZWxheSBzaWduYWxzCisgICAgd2lyZSAgIFNDS19pcGQgICAgICAgIDsKKyAgICB3aXJlICAgU0lfaXBkICAgICAgICAgOworICAgIHdpcmUgICBTT19pcGQgICAgICAgICA7CisKKyAgICB3aXJlIFNJX2luICAgICAgICAgICAgOworICAgIGFzc2lnbiBTSV9pbiA9IFNJX2lwZCA7CisKKyAgICB3aXJlIFNJX291dCAgICAgICAgICAgOworICAgIGFzc2lnbiBTSV9vdXQgPSBTSSAgICA7CisKKyAgICB3aXJlIFNPX2luICAgICAgICAgICAgOworICAgIGFzc2lnbiBTT19pbiA9IFNPX2lwZCA7CisKKyAgICB3aXJlIFNPX291dCAgICAgICAgICAgOworICAgIGFzc2lnbiBTT19vdXQgPSBTTyAgICA7CisKKyAgICB3aXJlICAgQ1NOZWdfaXBkICAgICAgOworICAgIHdpcmUgICBIT0xETmVnX2lwZCAgICA7CisgICAgd2lyZSAgIFdQTmVnX2lwZCAgICAgIDsKKyAgICB3aXJlICAgUlNUTmVnX2lwZCAgICAgOworCisgICAgd2lyZSBIT0xETmVnX2luICAgICAgICAgICAgICAgICA7CisgICAgLy9JbnRlcm5hbCBwdWxsLXVwCisgICAgYXNzaWduIEhPTEROZWdfaW4gPSAoSE9MRE5lZ19pcGQgPT09IDEnYngpID8gMSdiMSA6IEhPTEROZWdfaXBkOworCisgICAgd2lyZSBIT0xETmVnX291dCAgICAgICAgICAgICAgICA7CisgICAgYXNzaWduIEhPTEROZWdfb3V0ID0gSE9MRE5lZyAgICA7CisKKyAgICB3aXJlICAgV1BOZWdfaW4gICAgICAgICAgICAgICAgIDsKKyAgICAvL0ludGVybmFsIHB1bGwtdXAKKyAgICBhc3NpZ24gV1BOZWdfaW4gPSAoV1BOZWdfaXBkID09PSAxJ2J4KSA/IDEnYjEgOiBXUE5lZ19pcGQ7CisKKyAgICB3aXJlICAgV1BOZWdfb3V0ICAgICAgICAgICAgICAgIDsKKyAgICBhc3NpZ24gV1BOZWdfb3V0ID0gV1BOZWcgICAgICAgIDsKKworICAgIHdpcmUgICBSU1ROZWdfaW4gICAgICAgICAgICAgICAgIDsKKyAgICAvL0ludGVybmFsIHB1bGwtdXAKKyAgICBhc3NpZ24gUlNUTmVnX2luID0gKFJTVE5lZ19pcGQgPT09IDEnYngpID8gMSdiMSA6IFJTVE5lZ19pcGQ7CisKKyAgICAvLyBpbnRlcm5hbCBkZWxheXMKKyAgICByZWcgUFBfaW4gICAgICAgOworICAgIHJlZyBQUF9vdXQgICAgICA7CisgICAgcmVnIEJQX2luICAgICAgIDsKKyAgICByZWcgQlBfb3V0ICAgICAgOworICAgIHJlZyBTRV9pbiAgICAgICA7CisgICAgcmVnIFNFX291dCAgICAgIDsKKyAgICByZWcgQkVfaW4gICAgICAgOworICAgIHJlZyBCRV9vdXQgICAgICA7CisgICAgcmVnIFdSUl9pbiAgICAgIDsKKyAgICByZWcgV1JSX291dCAgICAgOworICAgIHJlZyBFUlNTVVNQX2luICA7CisgICAgcmVnIEVSU1NVU1Bfb3V0IDsKKyAgICByZWcgUFJHU1VTUF9pbiAgOworICAgIHJlZyBQUkdTVVNQX291dCA7CisgICAgcmVnIFBVX2luICAgICAgIDsKKyAgICByZWcgUFVfb3V0ICAgICAgOworICAgIHJlZyBSU1RfaW4gICAgICA7CisgICAgcmVnIFJTVF9vdXQgICAgIDsKKyAgICByZWcgUFBCRVJBU0VfaW4gOworICAgIHJlZyBQUEJFUkFTRV9vdXQ7CisgICAgcmVnIFBBU1NVTENLX2luIDsKKyAgICByZWcgUEFTU1VMQ0tfb3V0OworICAgIHJlZyBQQVNTQUNDX2luIDsKKyAgICByZWcgUEFTU0FDQ19vdXQ7CisKKyAgICAvLyBldmVudCBjb250cm9sIHJlZ2lzdGVycworICAgIHJlZyBQUkdTVVNQX291dF9ldmVudDsKKyAgICByZWcgRVJTU1VTUF9vdXRfZXZlbnQ7CisgICAgcmVnIFJlc2V0ZWRfZXZlbnQ7CisgICAgcmVnIFNDS19pcGRfZXZlbnQ7CisgICAgcmVnIG5leHRfc3RhdGVfZXZlbnQ7CisKKyAgICByZWcgcmlzaW5nX2VkZ2VfUG93ZXJlZFVwOworICAgIHJlZyByaXNpbmdfZWRnZV9SZXNldGVkOworICAgIHJlZyByaXNpbmdfZWRnZV9QQVNTVUxDS19pbjsKKyAgICByZWcgcmlzaW5nX2VkZ2VfUkVTX291dDsKKyAgICByZWcgcmlzaW5nX2VkZ2VfUFNUQVJUOworICAgIHJlZyByaXNpbmdfZWRnZV9XU1RBUlQ7CisgICAgcmVnIHJpc2luZ19lZGdlX0VTVEFSVDsKKyAgICByZWcgcmlzaW5nX2VkZ2VfUlNUTmVnOworICAgIHJlZyByaXNpbmdfZWRnZV9SU1Q7CisgICAgcmVnIGZhbGxpbmdfZWRnZV9SU1ROZWc7CisgICAgcmVnIGZhbGxpbmdfZWRnZV9SU1Q7CisgICAgcmVnIHJpc2luZ19lZGdlX1JTVF9vdXQ7CisgICAgcmVnIHJpc2luZ19lZGdlX0NTTmVnX2lwZCAgPSAxJ2IwOworICAgIHJlZyBmYWxsaW5nX2VkZ2VfQ1NOZWdfaXBkID0gMSdiMDsKKyAgICByZWcgcmlzaW5nX2VkZ2VfU0NLX2lwZCAgICA9IDEnYjA7CisgICAgcmVnIGZhbGxpbmdfZWRnZV9TQ0tfaXBkICAgPSAxJ2IwOworCisgICAgcmVnIFJTVCAgICAgICAgICAgICAgICA7CisKKyAgICByZWcgIFNPdXRfemQgPSAxJ2JaICAgICA7CisgICAgcmVnICBTT3V0X3ogID0gMSdiWiAgICAgOworCisgICAgd2lyZSBTSV96ICAgICAgICAgICAgICAgIDsKKyAgICB3aXJlIFNPX3ogICAgICAgICAgICAgICAgOworCisgICAgcmVnICBTSU91dF96ZCA9IDEnYlogICAgIDsKKyAgICByZWcgIFNJT3V0X3ogID0gMSdiWiAgICAgOworCisgICAgcmVnICBXUE5lZ091dF96ZCAgID0gMSdiWiAgOworICAgIHJlZyAgSE9MRE5lZ091dF96ZCA9IDEnYlogIDsKKworICAgIGFzc2lnbiBTSV96ID0gU0lPdXRfejsKKyAgICBhc3NpZ24gU09feiA9IFNPdXRfejsKKworICAgIHBhcmFtZXRlciBVc2VyUHJlbG9hZCAgICAgICA9IDE7CisgICAgcGFyYW1ldGVyIG1lbV9maWxlX25hbWUgICAgID0gIm5vbmUiOy8vInMyNWZsMjU2cy5tZW0iOworICAgIHBhcmFtZXRlciBvdHBfZmlsZV9uYW1lICAgICA9ICJzMjVmbDI1NnNPVFAubWVtIjsvLyJub25lIjsKKworICAgIHBhcmFtZXRlciBUaW1pbmdNb2RlbCAgICAgICA9ICJEZWZhdWx0VGltaW5nTW9kZWwiOworCisgICAgcGFyYW1ldGVyICBQYXJ0SUQgICAgICAgICAgID0gInMyNWZsMjU2cyI7CisgICAgcGFyYW1ldGVyICBNYXhEYXRhICAgICAgICAgID0gMjU1OworICAgIHBhcmFtZXRlciAgTWVtU2l6ZSAgICAgICAgICA9IDI4J2gxRkZGRkZGOworICAgIHBhcmFtZXRlciAgU2VjU2l6ZTI1NiAgICAgICA9IDIwJ2gzRkZGRjsKKyAgICBwYXJhbWV0ZXIgIFNlY1NpemU2NCAgICAgICAgPSAxNidoRkZGRjsKKyAgICBwYXJhbWV0ZXIgIFNlY1NpemU0ICAgICAgICAgPSAxMidoRkZGOworICAgIHBhcmFtZXRlciAgU2VjTnVtNjQgICAgICAgICA9IDU0MTsKKyAgICBwYXJhbWV0ZXIgIFNlY051bTI1NiAgICAgICAgPSAxMjc7CisgICAgcGFyYW1ldGVyICBQYWdlTnVtNjQgICAgICAgID0gMjAnaDNGRkZGOworICAgIHBhcmFtZXRlciAgUGFnZU51bTI1NiAgICAgICA9IDE2J2hGRkZGOworICAgIHBhcmFtZXRlciAgQWRkclJBTkdFICAgICAgICA9IDI4J2gxRkZGRkZGOworICAgIHBhcmFtZXRlciAgSGlBZGRyQml0ICAgICAgICA9IDMxOworICAgIHBhcmFtZXRlciAgT1RQU2l6ZSAgICAgICAgICA9IDEwMjM7CisgICAgcGFyYW1ldGVyICBPVFBMb0FkZHIgICAgICAgID0gMTInaDAwMDsKKyAgICBwYXJhbWV0ZXIgIE9UUEhpQWRkciAgICAgICAgPSAxMidoM0ZGOworICAgIHBhcmFtZXRlciAgQllURSAgICAgICAgICAgICA9IDg7CisKKyAgICAvLyBNYW51ZmFjdHVyZXIgSWRlbnRpZmljYXRpb24KKyAgICBwYXJhbWV0ZXIgIE1hbnVmX0lEICAgICAgID0gOCdoMDE7CisgICAgcGFyYW1ldGVyICBEZXZpY2VJRCAgICAgICA9IDgnaDE4OworICAgIC8vIEVsZWN0cm9uaWMgU2lnbmF0dXJlCisgICAgcGFyYW1ldGVyICBFU2lnbmF0dXJlICAgICA9IDgnaDE4OworICAgIC8vICBEZXZpY2UgSUQKKyAgICAvL01hbnVmYWN0dXJlciBJZGVudGlmaWNhdGlvbiAmJiBNZW1vcnkgVHlwZSAmJiBNZW1vcnkgQ2FwYWNpdHkKKyAgICBwYXJhbWV0ZXIgIEplZGVjX0lEICAgICAgID0gOCdoMDE7CisgICAgcGFyYW1ldGVyICBEZXZpY2VJRDEgICAgICA9IDgnaDAyOworICAgIHBhcmFtZXRlciAgRGV2aWNlSUQyICAgICAgPSA4J2gxOTsKKyAgICBwYXJhbWV0ZXIgIEV4dGVuZGVkQnl0ZXMgID0gOCdoNEQ7CisgICAgcGFyYW1ldGVyICBFeHRlbmRlZElENjQgICA9IDgnaDAxOworICAgIHBhcmFtZXRlciAgRXh0ZW5kZWRJRDI1NiAgPSA4J2gwMDsKKyAgICBwYXJhbWV0ZXIgIERpZVJldiAgICAgICAgID0gOCdoMDA7CisgICAgcGFyYW1ldGVyICBNYXNrUmV2ICAgICAgICA9IDgnaDAwOworCisgICAgaW50ZWdlciAgICBQYWdlU2l6ZTsKKyAgICBpbnRlZ2VyICAgIFBhZ2VOdW07CisgICAgaW50ZWdlciAgICBTZWNTaXplOworICAgIGludGVnZXIgICAgYl9hY3QgPSAwOworCisgICAgaW50ZWdlciAgICBBU1BfUHJvdFNFID0gMDsKKyAgICBpbnRlZ2VyICAgIFNlY19Qcm90U0UgPSAwOworCisgICAgaW50ZWdlciAgICBFSFA7IC8vRW5oYW5jZWQgSGlnaCBQZXJmb3JtYW5jZSBNb2RlIGFjdGl2ZQorCisgICAgaW50ZWdlciAgICBCQVJfQUNDID0gMDsgLy9CYW5rIFJlZ2lzdGVyIEFjY2VzcyBhY3RpdmUKKworICAgIC8vdmFyYWlibGVzIHRvIHJlc29sdmUgYXJjaGl0ZWN0dXJlIHVzZWQKKyAgICByZWcgWzI0KjgtMTowXSB0bXBfdGltaW5nOy8vc3RvcmVzIGNvcHkgb2YgVGltaW5nTW9kZWwKKyAgICByZWcgWzc6MF0gdG1wX2NoYXIxOy8vRGVmaW5lIEVIUExDIG9yIEhQTEMgTW9kZQorICAgIHJlZyBbNzowXSB0bXBfY2hhcjI7Ly9zdG9yZXMgIjAiIG9yICIxIiBjaGFyYWN0ZXIgZGVmaW5pbmcgc2VjdG9yL3BhZ2Ugc2l6ZQorICAgIGludGVnZXIgZm91bmQgPSAxJ2IwOworCisgICAgLy8gSWYgc3BlZWRzaW11bGF0aW9uIGlzIG5lZWRlZCB1bmNvbW1lbnQgZm9sbG93aW5nIGxpbmUKKworICAgICAgIGBkZWZpbmUgU1BFRURTSU07CisKKyAgICAvLyBwb3dlcnVwCisgICAgcmVnIFBvd2VyZWRVcDsKKworICAgIC8vIE1lbW9yeSBBcnJheSBDb25maWd1cmF0aW9uCisgICAgcmVnIEJvdHRvbUJvb3QgICAgICAgICAgPSAxJ2IwOworICAgIHJlZyBUb3BCb290ICAgICAgICAgICAgID0gMSdiMDsKKyAgICByZWcgVW5pZm9ybVNlYyAgICAgICAgICA9IDEnYjA7CisKKyAgICAvLyBGU00gY29udHJvbCBzaWduYWxzCisgICAgcmVnIFBET05FICAgICA7CisgICAgcmVnIFBTVEFSVCAgICA7CisgICAgcmVnIFBHU1VTUCAgICA7CisgICAgcmVnIFBHUkVTICAgICA7CisKKyAgICByZWcgVFNVICAgICAgIDsKKworICAgIHJlZyBSRVNfVE9fU1VTUF9NSU5fVElNRTsKKyAgICByZWcgUkVTX1RPX1NVU1BfVFlQX1RJTUU7CisKKyAgICByZWcgV0RPTkUgICAgIDsKKyAgICByZWcgV1NUQVJUICAgIDsKKworICAgIHJlZyBFRE9ORSAgICAgOworICAgIHJlZyBFU1RBUlQgICAgOworICAgIHJlZyBFU1VTUCAgICAgOworICAgIHJlZyBFUkVTICAgICAgOworCisgICAgcmVnIFJlc2V0ZWQgICA7CisKKyAgICByZWcgUEFSQU1fUkVHSU9OICAgICAgPSAxJ2IwOworCisgICAgLy8gTG9jayBCaXQgaXMgZW5hYmxlZCBmb3IgY3VzdG9tZXIgcHJvZ3JhbW1pbmcKKyAgICByZWcgV1JMT0NLRU5BQkxFICAgICAgPSAxJ2IxOworICAgIC8vIEZsYWcgdGhhdCBtYXJrIGlmIEFTUCBSZWdpc3RlciBpcyBhbGxyZWFkeSBwcm9ncmFtbWVkCisgICAgcmVnIEFTUE9UUEZMQUcgICAgICAgID0gMSdiMDsKKworICAgIC8vRmxhZyBmb3IgUGFzc3dvcmQgdW5sb2NrIGNvbW1hbmQKKyAgICByZWcgUEFTU19VTkxPQ0tFRCAgICAgPSAxJ2IwOworICAgIHJlZyBbNjM6MF0gUEFTU19URU1QICA9IDY0J2hGRkZGRkZGRkZGRkZGRkZGOworCisgICAgcmVnIFFVQURSRCAgICAgICAgICAgID0gMSdiMDsKKyAgICByZWcgSU5JVElBTF9DT05GSUcgICAgPSAxJ2IwOworICAgIHJlZyBDSEVDS19GUkVRICAgICAgICA9IDEnYjA7CisKKyAgICAvLyBQcm9ncmFtbWluZyBidWZmZXIKKyAgICBpbnRlZ2VyIFdCeXRlWzA6NTExXTsKKyAgICAvLyBDRkkgYXJyYXkKKyAgICBpbnRlZ2VyIENGSV9hcnJheVs4J2gwMDo4J2g1MF07CisgICAgLy8gT1RQIE1lbW9yeSBBcnJheQorICAgIGludGVnZXIgT1RQTWVtW09UUExvQWRkcjpPVFBIaUFkZHJdOworICAgIC8vIEZsYXNoIE1lbW9yeSBBcnJheQorICAgIGludGVnZXIgTWVtWzA6QWRkclJBTkdFXTsKKworICAgIC8vIFJlZ2lzdGVycworICAgIC8vIFZETFIgUmVnaXN0ZXIKKyAgICByZWdbNzowXSBWRExSX3JlZyAgICAgICAgICA9IDgnaDAwOworICAgIHJlZ1s3OjBdIFZETFJfcmVnX2luICAgICAgID0gOCdoMDA7CisgICAgLy8gTlZETFIgUmVnaXN0ZXIKKyAgICByZWdbNzowXSBOVkRMUl9yZWcgICAgICAgICA9IDgnaDAwOworICAgIHJlZ1s3OjBdIE5WRExSX3JlZ19pbiAgICAgID0gOCdoMDA7CisgICAgcmVnIHN0YXJ0X2RscCAgICAgICAgICAgICAgPSAxJ2IwOworCisgICAgLy8gU3RhdHVzIFJlZ2lzdGVyIDEKKyAgICByZWdbNzowXSBTdGF0dXNfcmVnMSAgICAgICA9IDgnaDAwOworICAgIHJlZ1s3OjBdIFN0YXR1c19yZWcxX2luICAgID0gOCdoMDA7CisKKyAgICB3aXJlIFNSV0QgOworICAgIHdpcmUgUF9FUlI7CisgICAgd2lyZSBFX0VSUjsKKyAgICB3aXJlIFsyOjBdQlA7CisgICAgd2lyZSBXRUw7CisgICAgd2lyZSBXSVA7CisgICAgYXNzaWduIFNSV0QgICA9IFN0YXR1c19yZWcxWzddOworICAgIGFzc2lnbiBQX0VSUiAgPSBTdGF0dXNfcmVnMVs2XTsKKyAgICBhc3NpZ24gRV9FUlIgID0gU3RhdHVzX3JlZzFbNV07CisgICAgYXNzaWduIEJQICAgICA9IFN0YXR1c19yZWcxWzQ6Ml07CisgICAgYXNzaWduIFdFTCAgICA9IFN0YXR1c19yZWcxWzFdOworICAgIGFzc2lnbiBXSVAgICAgPSBTdGF0dXNfcmVnMVswXTsKKworICAgIC8vIFN0YXR1cyBSZWdpc3RlciAyCisgICAgcmVnWzc6MF0gU3RhdHVzX3JlZzIgICAgICAgPSA4J2gwMDsKKyAgICByZWdbNzowXSBTdGF0dXNfcmVnMl9pbiAgICA9IDgnaDAwOworCisgICAgd2lyZSBFUyA7CisgICAgd2lyZSBQUyA7CisgICAgYXNzaWduIEVTICAgPSBTdGF0dXNfcmVnMlsxXTsKKyAgICBhc3NpZ24gUFMgICA9IFN0YXR1c19yZWcyWzBdOworCisgICAgLy8gQ29uZmlndXJhdGlvbiBSZWdpc3RlciAxCisgICAgcmVnWzc6MF0gQ29uZmlnX3JlZzEgICAgICAgPSA4J2gwMDsKKyAgICByZWdbNzowXSBDb25maWdfcmVnMV9pbiAgICA9IDgnaDAwOworCisgICAgd2lyZSAgIExDMSAgICAgICAgICAgICAgICAgICAgIDsKKyAgICB3aXJlICAgTEMwICAgICAgICAgICAgICAgICAgICAgOworICAgIHdpcmUgICBUQlBST1QgICAgICAgICAgICAgICAgICA7CisvLyAgICAgd2lyZSAgIExPQ0sgICAgICAgICAgICAgICAgICAgIDsKKyAgICB3aXJlICAgQlBOViAgICAgICAgICAgICAgICAgICAgOworICAgIHdpcmUgICBUQlBBUk0gICAgICAgICAgICAgICAgICA7CisgICAgd2lyZSAgIFFVQUQgICAgICAgICAgICAgICAgICAgIDsKKyAgICB3aXJlICAgRlJFRVpFICAgICAgICAgICAgICAgICAgOworICAgIGFzc2lnbiBMQzEgICAgID0gQ29uZmlnX3JlZzFbN107CisgICAgYXNzaWduIExDMCAgICAgPSBDb25maWdfcmVnMVs2XTsKKyAgICBhc3NpZ24gVEJQUk9UICA9IENvbmZpZ19yZWcxWzVdOworLy8gICAgIGFzc2lnbiBMT0NLICAgID0gQ29uZmlnX3JlZzFbNF07CisgICAgYXNzaWduIEJQTlYgICAgPSBDb25maWdfcmVnMVszXTsKKyAgICBhc3NpZ24gVEJQQVJNICA9IENvbmZpZ19yZWcxWzJdOworICAgIGFzc2lnbiBRVUFEICAgID0gQ29uZmlnX3JlZzFbMV07CisgICAgYXNzaWduIEZSRUVaRSAgPSBDb25maWdfcmVnMVswXTsKKworICAgIC8vIEF1dG9ib290IFJlZ2lzdGVyCisgICAgcmVnWzMxOjBdIEF1dG9Cb290X3JlZyAgICAgPSAzMidoMDAwMDAwMDA7CisgICAgcmVnWzMxOjBdIEF1dG9Cb290X3JlZ19pbiAgPSAzMidoMDAwMDAwMDA7CisKKyAgICB3aXJlIEFCRTsKKyAgICBhc3NpZ24gQUJFICAgICA9IEF1dG9Cb290X3JlZ1swXTsKKworICAgIC8vIEJhbmsgQWRkcmVzcyBSZWdpc3RlcgorICAgIHJlZyBbNzowXSBCYW5rX0FkZHJfcmVnICAgID0gOCdoMDA7CisgICAgcmVnIFs3OjBdIEJhbmtfQWRkcl9yZWdfaW4gPSA4J2gwMDsKKworICAgIHdpcmUgICBFWFRBREQ7CisgICAgd2lyZSAgIEJBMjQ7CisKKyAgICBhc3NpZ24gRVhUQUREICA9IEJhbmtfQWRkcl9yZWdbN107CisgICAgYXNzaWduIEJBMjQgICAgPSBCYW5rX0FkZHJfcmVnWzBdOworICAgIAorICAgIC8vIEVDQyBTdGF0dXMgUmVnaXN0ZXIKKyAgICByZWdbNzowXSBFQ0NTUiAgICAgID0gOCdoMDA7CisgICAgCisgICAgd2lyZSAgIEVFQ0M7CisgICAgd2lyZSAgIEVFQ0NEOworICAgIHdpcmUgICBFQ0NESTsKKyAgICAKKyAgICBhc3NpZ24gRUVDQyAgID0gRUNDU1JbMl07CisgICAgYXNzaWduIEVFQ0NEICA9IEVDQ1NSWzFdOworICAgIGFzc2lnbiBFQ0NESSAgPSBFQ0NTUlswXTsKKworICAgIC8vIEFTUCBSZWdpc3RlcgorICAgIHJlZ1sxNTowXSBBU1BfcmVnICAgOworICAgIHJlZ1sxNTowXSBBU1BfcmVnX2luOworCisgICAgd2lyZSAgICBSUE1FICAgICAgICAgOworICAgIHdpcmUgICAgUFBCT1RQICAgICAgIDsKKyAgICB3aXJlICAgIFBXRE1MQiAgICAgICA7CisgICAgd2lyZSAgICBQU1RNTEIgICAgICAgOworICAgIGFzc2lnbiAgUlBNRSAgICAgPSBBU1BfcmVnWzVdOworICAgIGFzc2lnbiAgUFBCT1RQICAgPSBBU1BfcmVnWzNdOworICAgIGFzc2lnbiAgUFdETUxCICAgPSBBU1BfcmVnWzJdOworICAgIGFzc2lnbiAgUFNUTUxCICAgPSBBU1BfcmVnWzFdOworCisgICAgLy8gUGFzc3dvcmQgcmVnaXN0ZXIKKyAgICByZWdbNjM6MF0gUGFzc3dvcmRfcmVnICAgICA9IDY0J2hGRkZGRkZGRkZGRkZGRkZGOworICAgIHJlZ1s2MzowXSBQYXNzd29yZF9yZWdfaW4gID0gNjQnaEZGRkZGRkZGRkZGRkZGRkY7CisKKyAgICAvLyBQUEIgTG9jayBSZWdpc3RlcgorICAgIHJlZ1s3OjBdIFBQQkwgICAgICAgICAgICAgID0gOCdoMDA7CisgICAgcmVnWzc6MF0gUFBCTF9pbiAgICAgICAgICAgPSA4J2gwMDsKKworICAgIHdpcmUgICBQUEJfTE9DSyAgICAgICAgICAgICAgOworICAgIGFzc2lnbiBQUEJfTE9DSyAgICAgPSBQUEJMWzBdOworCisgICAgLy8gUFBCIEFjY2VzcyBSZWdpc3RlcgorICAgIHJlZ1s3OjBdIFBQQkFSICAgICAgICAgICAgID0gOCdoRkY7CisgICAgcmVnWzc6MF0gUFBCQVJfaW4gICAgICAgICAgPSA4J2hGRjsKKworICAgIHJlZ1tTZWNOdW02NDowXSBQUEJfYml0cyAgID0gezU0MnsxJ2IxfX07CisKKyAgICAvLyBEWUIgQWNjZXNzIFJlZ2lzdGVyCisgICAgcmVnWzc6MF0gRFlCQVIgICAgICAgICAgICAgPSA4J2hGRjsKKyAgICByZWdbNzowXSBEWUJBUl9pbiAgICAgICAgICA9IDgnaEZGOworCisgICAgcmVnW1NlY051bTY0OjBdIERZQl9iaXRzICAgPSB7NTQyezEnYjF9fTsKKworICAgIC8vVGhlIExvY2sgUHJvdGVjdGlvbiBSZWdpc3RlcnMgZm9yIE9UUCBNZW1vcnkgc3BhY2UKKyAgICByZWdbNzowXSBMT0NLX0JZVEUxOworICAgIHJlZ1s3OjBdIExPQ0tfQllURTI7CisgICAgcmVnWzc6MF0gTE9DS19CWVRFMzsKKyAgICByZWdbNzowXSBMT0NLX0JZVEU0OworCisgICAgLy8gQ29tbWFuZCBSZWdpc3RlcgorICAgIHJlZyB3cml0ZTsKKyAgICByZWcgY2ZnX3dyaXRlOworICAgIHJlZyByZWFkX291dDsKKyAgICByZWcgZHVhbCAgICAgICAgICA9IDEnYjA7CisgICAgcmVnIHJkX2Zhc3QgICAgICAgPSAxJ2IxOworICAgIHJlZyByZF9zbG93ICAgICAgID0gMSdiMDsKKyAgICByZWcgZGRyICAgICAgICAgICA9IDEnYjA7CisgICAgcmVnIGRkcjgwICAgICAgICAgPSAxJ2IwOworICAgIHJlZyBkZHJfZmFzdCAgICAgID0gMSdiMDsKKyAgICByZWcgaG9sZF9tb2RlICAgICA9IDEnYjA7CisgICAgcmVnIGFueV9yZWFkICAgICAgPSAxJ2IwOworICAgIHJlZyBxdWFkX3BnICAgICAgID0gMSdiMDsKKworICAgIHdpcmUgcmQgOworICAgIHdpcmUgZmFzdF9yZCA7CisgICAgd2lyZSBkZHJkIDsKKyAgICB3aXJlIGZhc3RfZGRyIDsKKyAgICB3aXJlIGRkcmQ4MCA7CisKKyAgICB3aXJlIHF1YWRwZyA7CisgICAgYXNzaWduIHF1YWRwZyA9IHF1YWRfcGc7CisKKyAgICB3aXJlIFJEX0VRVV8xOworICAgIGFzc2lnbiBSRF9FUVVfMSA9IGFueV9yZWFkOworCisgICAgd2lyZSBSRF9FUVVfMDsKKyAgICBhc3NpZ24gUkRfRVFVXzAgPSB+YW55X3JlYWQ7CisKKyAgICByZWcgIGNoYW5nZV9UQlBBUk0gPSAwOworCisgICAgcmVnICBjaGFuZ2VfQlAgPSAwOworICAgIHJlZyBbMjowXSBCUF9iaXRzICAgPSAzJ2IwOworCisgICAgcmVnIERPVUJMRSAgICAgICAgICA9IDEnYjA7IC8vRG91YmxlIERhdGEgUmF0ZSAoRERSKSBmbGFnCisKKyAgICByZWcgUmRQc3dkUHJvdE1vZGUgICAgPSAxJ2IwOy8vUmVhZCBQYXNzd29yZCBQcm90ZWN0aW9uIE1vZGUgQWN0aXZlIGZsYWcKKyAgICByZWcgUmRQc3dkUHJvdEVuYWJsZSAgPSAxJ2IwOy8vUmVhZCBQYXNzd29yZCBQcm90ZWN0aW9uIE1vZGUgU3VwcG9ydCBmbGFnCisKKyAgICBpbnRlZ2VyIEJ5dGVfbnVtYmVyID0gMDsKKworICAgIHJlZyBvZSAgID0gMSdiMDsKKyAgICByZWcgb2VfeiA9IDEnYjA7CisKKyAgICByZWcgWzY0NzowXSBDRklfYXJyYXlfdG1wIDsKKyAgICByZWcgWzc6MF0gQ0ZJX3RtcDsKKworICAgIGludGVnZXIgc3RhcnRfZGVsYXk7CisgICAgcmVnIHN0YXJ0X2F1dG9ib290OworICAgIGludGVnZXIgQUJTRDsKKworICAgIHJlZyAgY2hhbmdlX2FkZHIgOworICAgIGludGVnZXIgQWRkcmVzcyA9IDA7CisgICAgaW50ZWdlciBTZWN0b3JTdXNwZW5kID0gMDsKKworICAgIC8vU2VjdG9yIGFuZCBzdWJzZWN0b3IgYWRkcmVzc2VzCisgICAgaW50ZWdlciBTQSAgICAgICAgPSAwOworCisgICAgLy8gU2VjdG9yIGlzIHByb3RlY3QgaWYgU2VjX1Byb3QoU2VjTnVtKSA9ICcxJworICAgIHJlZyBbU2VjTnVtNjQ6MF0gU2VjX1Byb3QgID0gezU0MnsxJ2IwfX07CisKKyAgICAvLyB0aW1pbmcgY2hlY2sgdmlvbGF0aW9uCisgICAgcmVnIFZpb2wgPSAxJ2IwOworCisgICAgaW50ZWdlciBXT1RQQnl0ZTsKKyAgICBpbnRlZ2VyIEFkZHJMbzsKKyAgICBpbnRlZ2VyIEFkZHJIaTsKKworICAgIHJlZ1s3OjBdICBvbGRfYml0LCBuZXdfYml0OworICAgIGludGVnZXIgb2xkX2ludCwgbmV3X2ludDsKKyAgICByZWdbNjM6MF0gb2xkX3Bhc3M7CisgICAgcmVnWzYzOjBdIG5ld19wYXNzOworICAgIGludGVnZXIgd3JfY250OworICAgIGludGVnZXIgY250OworCisgICAgaW50ZWdlciByZWFkX2NudCA9IDA7CisgICAgaW50ZWdlciBieXRlX2NudCA9IDE7CisgICAgaW50ZWdlciByZWFkX2FkZHIgPSAwOworICAgIGludGVnZXIgcmVhZF9hZGRyX3RtcCA9IDA7CisgICAgaW50ZWdlciBTZWNfYWRkciA9IDA7CisgICAgaW50ZWdlciBTZWNBZGRyID0gMDsKKyAgICBpbnRlZ2VyIFBhZ2VfYWRkciA9IDA7CisgICAgaW50ZWdlciBwZ21fcGFnZSA9IDA7CisKKyAgICByZWdbNzowXSBkYXRhX291dDsKKyAgICByZWdbNjQ3OjBdIGlkZW50X291dDsKKworICAgIHRpbWUgU0NLX2N5Y2xlID0gMDsKKyAgICB0aW1lIHByZXZfU0NLOworICAgIHRpbWUgc3RhcnRfZGRyOworICAgIHRpbWUgb3V0X3RpbWU7CisgICAgdGltZSBTQ0tfU09fRERSOworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy9JbnRlcmNvbm5lY3QgUGF0aCBEZWxheSBTZWN0aW9uCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgYnVmICAgKFNDS19pcGQsIFNDSyk7CisgYnVmICAgKFNJX2lwZCwgU0kpOworCisgYnVmICAgKFNPX2lwZCwgU08pOworIGJ1ZiAgIChDU05lZ19pcGQsIENTTmVnKTsKKyBidWYgICAoSE9MRE5lZ19pcGQsIEhPTEROZWcpOworIGJ1ZiAgIChXUE5lZ19pcGQsIFdQTmVnKTsKKyBidWYgICAoUlNUTmVnX2lwZCwgUlNUTmVnKTsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gUHJvcGFnYXRpb24gIGRlbGF5IFNlY3Rpb24KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICBubW9zICAgKFNJLCAgIFNJX3ogLCAxKTsKKworICAgIG5tb3MgICAoU08sICAgU09feiAsIDEpOworICAgIG5tb3MgICAoSE9MRE5lZywgICBIT0xETmVnT3V0X3pkICwgMSk7CisgICAgbm1vcyAgIChXUE5lZywgICBXUE5lZ091dF96ZCAsIDEpOworCisgICAgd2lyZSBkZWdfcGluOworICAgIHdpcmUgZGVnX3NpbjsKKyAgICB3aXJlIGRlZ19ob2xkaW47CisgICAgd2lyZSBkZWhfcGluOworICAgIHdpcmUgZGVoX3NvdXQ7CisgICAgd2lyZSBkZWhfZGRyX3NvdXQ7CisgICAgd2lyZSBkZWhfaG9sZGluOworICAgIC8vVkhETCBWSVRBTCBDaGVja0VuYWJsZSBlcXVpdmFsZW50cworICAgIHdpcmUgcXVhZF9yZDsKKyAgICBhc3NpZ24gcXVhZF9yZCA9IGRlZ19ob2xkaW4gJiYgflFVQUQgJiYgKFNJT3V0X3ogIT0gMSdieik7CisgICAgd2lyZSB3cl9wcm90OworICAgIGFzc2lnbiB3cl9wcm90ID0gU1JXRCAmJiBXRUwgJiYgflFVQUQ7CisgICAgd2lyZSBkdWFsX3JkOworICAgIGFzc2lnbiBkdWFsX3JkID0gZHVhbCA7CisgICAgd2lyZSBkZHJvOworICAgIGFzc2lnbiBkZHJvID0gZGRyICYmIH5kZHI4MCAmJiB+ZHVhbCA7CisgICAgd2lyZSBkZHJvODA7CisgICAgYXNzaWduIGRkcm84MCA9IGRkciAmJiBkZHI4MCAmJiB+ZHVhbCA7CisgICAgd2lyZSBkZHJfcmQ7CisgICAgYXNzaWduIGRkcl9yZCA9IFBvd2VyZWRVcCAmJiBkZHI7CisgICAgd2lyZSBzZHJfcmQ7CisgICAgYXNzaWduIHNkcl9yZCA9IFBvd2VyZWRVcCAmJiB+ZGRyOworCitzcGVjaWZ5CisgICAgICAgIC8vIHRpcGQgZGVsYXlzOiBpbnRlcmNvbm5lY3QgcGF0aCBkZWxheXMgLCBtYXBwZWQgdG8gaW5wdXQgcG9ydCBkZWxheXMuCisgICAgICAgIC8vIEluIFZlcmlsb2cgaXMgbm90IG5lY2Vzc2FyeSB0byBkZWNsYXJlIGFueSB0aXBkXyBkZWxheSB2YXJpYWJsZXMsCisgICAgICAgIC8vIHRoZXkgY2FuIGJlIHRha2VuIGZyb20gU0RGIGZpbGUKKyAgICAgICAgLy8gV2l0aCBhbGwgdGhlIG90aGVyIGRlbGF5cyByZWFsIGRlbGF5cyB3b3VsZCBiZSB0YWtlbiBmcm9tIFNERiBmaWxlCisKKyAgICAvLyB0cGQgZGVsYXlzCisgICAgc3BlY3BhcmFtICAgICAgICB0cGRfU0NLX1NPX25vcm1hbCAgICAgICAgICAgICA9MTsKKyAgICBzcGVjcGFyYW0gICAgICAgIHRwZF9DU05lZ19TTyAgICAgICAgICAgICAgICAgID0xOworICAgIHNwZWNwYXJhbSAgICAgICAgdHBkX0hPTEROZWdfU08gICAgICAgICAgICAgICAgPTE7CisgICAgc3BlY3BhcmFtICAgICAgICB0cGRfUlNUTmVnX1NPICAgICAgICAgICAgICAgICA9MTsKKyAgICAvL0REUiBvcGVyYXRpb24gdmFsdWVzCisgICAgc3BlY3BhcmFtICAgICAgICB0cGRfU0NLX1NPX0REUiAgICAgICAgICAgICAgICA9MTsKKworICAgIC8vdHNldHVwIHZhbHVlczogc2V0dXAgdGltZXMKKyAgICBzcGVjcGFyYW0gICAgICAgIHRzZXR1cF9DU05lZ19TQ0sgICAgICAgICAgICAgID0xOworICAgIHNwZWNwYXJhbSAgICAgICAgdHNldHVwX1NJX1NDS19ub3JtYWwgICAgICAgICAgPTE7CisgICAgc3BlY3BhcmFtICAgICAgICB0c2V0dXBfV1BOZWdfQ1NOZWcgICAgICAgICAgICA9MTsKKyAgICBzcGVjcGFyYW0gICAgICAgIHRzZXR1cF9IT0xETmVnX1NDSyAgICAgICAgICAgID0xOworICAgIHNwZWNwYXJhbSAgICAgICAgdHNldHVwX1JTVE5lZ19DU05lZyAgICAgICAgICAgPTE7CisgICAgLy8gRERSIG9wZXJhdGlvbiB2YWx1ZXMKKyAgICBzcGVjcGFyYW0gICAgICAgIHRzZXR1cF9TSV9TQ0tfRERSICAgICAgICAgICAgID0xOworICAgIHNwZWNwYXJhbSAgICAgICAgdHNldHVwX1NJX1NDS19ERFJfZmFzdCAgICAgICAgPTE7CisgICAgc3BlY3BhcmFtICAgICAgICB0c2V0dXBfQ1NOZWdfU0NLX0REUiAgICAgICAgICA9MTsKKworICAgIC8vdGhvbGQgdmFsdWVzOiBob2xkIHRpbWVzCisgICAgc3BlY3BhcmFtICAgICAgICB0aG9sZF9DU05lZ19TQ0sgICAgICAgICAgICAgICA9MTsKKyAgICBzcGVjcGFyYW0gICAgICAgIHRob2xkX1NJX1NDS19ub3JtYWwgICAgICAgICAgID0xOworICAgIHNwZWNwYXJhbSAgICAgICAgdGhvbGRfU09fU0NLX25vcm1hbCAgICAgICAgICAgPTE7CisgICAgc3BlY3BhcmFtICAgICAgICB0aG9sZF9XUE5lZ19DU05lZyAgICAgICAgICAgICA9MTsKKyAgICBzcGVjcGFyYW0gICAgICAgIHRob2xkX0hPTEROZWdfU0NLICAgICAgICAgICAgID0xOworICAgIHNwZWNwYXJhbSAgICAgICAgdGhvbGRfQ1NOZWdfUlNUTmVnICAgICAgICAgICAgPTE7CisgICAgLy8gRERSIG9wZXJhdGlvbiB2YWx1ZXMKKyAgICBzcGVjcGFyYW0gICAgICAgIHRob2xkX1NJX1NDS19ERFIgICAgICAgICAgICAgID0xOworICAgIHNwZWNwYXJhbSAgICAgICAgdGhvbGRfU0lfU0NLX0REUl9mYXN0ICAgICAgICAgPTE7CisgICAgc3BlY3BhcmFtICAgICAgICB0aG9sZF9DU05lZ19TQ0tfRERSICAgICAgICAgICA9MTsKKworICAgIC8vIHRwdyB2YWx1ZXM6IHB1bHNlIHdpZHRoCisgICAgc3BlY3BhcmFtICAgICAgICB0cHdfU0NLX3NlcmlhbF9wb3NlZGdlICAgICAgICA9MTsKKyAgICBzcGVjcGFyYW0gICAgICAgIHRwd19TQ0tfZHVhbF9wb3NlZGdlICAgICAgICAgID0xOworICAgIHNwZWNwYXJhbSAgICAgICAgdHB3X1NDS19mYXN0X3Bvc2VkZ2UgICAgICAgICAgPTE7CisgICAgc3BlY3BhcmFtICAgICAgICB0cHdfU0NLX3F1YWRwZ19wb3NlZGdlICAgICAgICA9MTsKKyAgICBzcGVjcGFyYW0gICAgICAgIHRwd19TQ0tfc2VyaWFsX25lZ2VkZ2UgICAgICAgID0xOworICAgIHNwZWNwYXJhbSAgICAgICAgdHB3X1NDS19kdWFsX25lZ2VkZ2UgICAgICAgICAgPTE7CisgICAgc3BlY3BhcmFtICAgICAgICB0cHdfU0NLX2Zhc3RfbmVnZWRnZSAgICAgICAgICA9MTsKKyAgICBzcGVjcGFyYW0gICAgICAgIHRwd19TQ0tfcXVhZHBnX25lZ2VkZ2UgICAgICAgID0xOworICAgIHNwZWNwYXJhbSAgICAgICAgdHB3X0NTTmVnX3JlYWRfcG9zZWRnZSAgICAgICAgPTE7CisgICAgc3BlY3BhcmFtICAgICAgICB0cHdfQ1NOZWdfcGdlcnNfcG9zZWRnZSAgICAgICA9MTsKKyAgICBzcGVjcGFyYW0gICAgICAgIHRwd19SU1ROZWdfbmVnZWRnZSAgICAgICAgICAgID0xOworICAgIHNwZWNwYXJhbSAgICAgICAgdHB3X1JTVE5lZ19wb3NlZGdlICAgICAgICAgICAgPTE7CisgICAgLy8gRERSIG9wZXJhdGlvbiB2YWx1ZXMKKyAgICBzcGVjcGFyYW0gICAgICAgIHRwd19TQ0tfRERSX3Bvc2VkZ2UgICAgICAgICAgID0xOworICAgIHNwZWNwYXJhbSAgICAgICAgdHB3X1NDS19ERFJfbmVnZWRnZSAgICAgICAgICAgPTE7CisgICAgc3BlY3BhcmFtICAgICAgICB0cHdfU0NLX0REUjgwX3Bvc2VkZ2UgICAgICAgICA9MTsKKyAgICBzcGVjcGFyYW0gICAgICAgIHRwd19TQ0tfRERSODBfbmVnZWRnZSAgICAgICAgID0xOworCisgICAgLy8gdHBlcmlvZCBtaW4gKGNhbGN1bGF0ZWQgYXMgMS9tYXggZnJlcSkKKyAgICBzcGVjcGFyYW0gICAgICAgIHRwZXJpb2RfU0NLX3NlcmlhbF9yZCAgICAgICAgID0xOy8vIDUwIE1IegorICAgIHNwZWNwYXJhbSAgICAgICAgdHBlcmlvZF9TQ0tfZmFzdF9yZCAgICAgICAgICAgPTE7Ly8xMzMgTUh6CisgICAgc3BlY3BhcmFtICAgICAgICB0cGVyaW9kX1NDS19kdWFsX3JkICAgICAgICAgICA9MTsvLzEwNCBNSHoKKyAgICBzcGVjcGFyYW0gICAgICAgIHRwZXJpb2RfU0NLX3F1YWRwZyAgICAgICAgICAgID0xOy8vIDgwIE1IegorICAgIC8vIEREUiBvcGVyYXRpb24gdmFsdWVzCisgICAgc3BlY3BhcmFtICAgICAgICB0cGVyaW9kX1NDS19ERFJfcmQgICAgICAgICAgICA9MTsvLyA2NiBNSHoKKyAgICBzcGVjcGFyYW0gICAgICAgIHRwZXJpb2RfU0NLX0REUjgwX3JkICAgICAgICAgID0xOy8vIDgwIE1IegorCisgICAgYGlmZGVmIFNQRUVEU0lNCisgICAgICAgIC8vIFBhZ2UgUHJvZ3JhbSBPcGVyYXRpb24KKyAgICAgICAgc3BlY3BhcmFtICAgICAgICB0ZGV2aWNlX1BQXzI1NiAgICAgICAgICAgID0gNzVlNzsvL3RQUAorICAgICAgICAvLyBQYWdlIFByb2dyYW0gT3BlcmF0aW9uCisgICAgICAgIHNwZWNwYXJhbSAgICAgICAgdGRldmljZV9QUF81MTIgICAgICAgICAgICA9IDc1ZTc7Ly90UFAKKyAgICAgICAgLy8gVHlwaWNhbCBCeXRlIFByb2dyYW1taW5nIFRpbWUKKyAgICAgICAgc3BlY3BhcmFtICAgICAgICB0ZGV2aWNlX0JQICAgICAgICAgICAgICAgID0gNGU4Oy8vdEJQCisgICAgICAgIC8vIFNlY3RvciBFcmFzZSBPcGVyYXRpb24KKyAgICAgICAgc3BlY3BhcmFtICAgICAgICB0ZGV2aWNlX1NFNjQgICAgICAgICAgICAgID0gMTBlNzsgLy8gNjUwZTc7Ly90U0UgRGluZXNoIEEKKyAgICAgICAgLy8gU2VjdG9yIEVyYXNlIE9wZXJhdGlvbgorICAgICAgICBzcGVjcGFyYW0gICAgICAgIHRkZXZpY2VfU0UyNTYgICAgICAgICAgICAgPSAxMGU3OyAvLyAxODc1ZTc7Ly90U0UgRGluZXNoIEEKKyAgICAgICAgLy8gQnVsayBFcmFzZSBPcGVyYXRpb24KKyAgICAgICAgc3BlY3BhcmFtICAgICAgICB0ZGV2aWNlX0JFICAgICAgICAgICAgICAgID0gMzMwZTk7Ly90QkUKKyAgICAgICAgLy8gV1JSIEN5Y2xlIFRpbWUKKyAgICAgICAgc3BlY3BhcmFtICAgICAgICB0ZGV2aWNlX1dSUiAgICAgICAgICAgICAgID0gMTsgLy8gMmU5Oy8vdFcgRGluZXNoIEEKKyAgICAgICAgLy8gRXJhc2UgU3VzcGVuZC9FcmFzZSBSZXN1bWUgVGltZQorICAgICAgICBzcGVjcGFyYW0gICAgICAgIHRkZXZpY2VfRVJTU1VTUCAgICAgICAgICAgPSA0NWU2Oy8vdEVTTAorICAgICAgICAvLyBQcm9ncmFtIFN1c3BlbmQvUHJvZ3JhbSBSZXN1bWUgVGltZQorICAgICAgICBzcGVjcGFyYW0gICAgICAgIHRkZXZpY2VfUFJHU1VTUCAgICAgICAgICAgPSAxOyAvLyA0MGU2Oy8vIERpbmVzaCBBCisgICAgICAgIC8vIFZDQyAobWluKSB0byBDUyMgTG93CisgICAgICAgIHNwZWNwYXJhbSAgICAgICAgdGRldmljZV9QVSAgICAgICAgICAgICAgICA9IDE7IC8vIDNlODsvL3RQVSBEaW5lc2ggQQorICAgICAgICAvLyBQUEIgRXJhc2UgVGltZQorICAgICAgICBzcGVjcGFyYW0gICAgICAgIHRkZXZpY2VfUFBCRVJBU0UgICAgICAgICAgPSAxOyAvLyAxNWU5Oy8vIERpbmVzaCBBCisgICAgICAgIC8vIFBhc3N3b3JkIFVubG9jayBUaW1lCisgICAgICAgIHNwZWNwYXJhbSAgICAgICAgdGRldmljZV9QQVNTVUxDSyAgICAgICAgICA9IDFlNjsvLworICAgICAgICAvLyBQYXNzd29yZCBVbmxvY2sgdG8gUGFzc3dvcmQgVW5sb2NrIFRpbWUKKyAgICAgICAgc3BlY3BhcmFtICAgICAgICB0ZGV2aWNlX1BBU1NBQ0MgICAgICAgICAgID0gMTAwZTY7CisgICAgICAgIC8vIERhdGEgSW4gU2V0dXAgTWF4IHRpbWUKKyAgICAgICAgc3BlY3BhcmFtICAgICAgICB0ZGV2aWNlX1RTVSAgICAgICAgICAgICAgID0gMzAwZTM7CisgICAgYGVsc2UKKyAgICAgICAgLy8gUGFnZSBQcm9ncmFtIE9wZXJhdGlvbgorICAgICAgICBzcGVjcGFyYW0gICAgICAgIHRkZXZpY2VfUFBfMjU2ICAgICAgICAgICAgPSA3NWU3Oy8vdFBQCisgICAgICAgIC8vIFBhZ2UgUHJvZ3JhbSBPcGVyYXRpb24KKyAgICAgICAgc3BlY3BhcmFtICAgICAgICB0ZGV2aWNlX1BQXzUxMiAgICAgICAgICAgID0gNzVlNzsvL3RQUAorICAgICAgICAvLyBUeXBpY2FsIEJ5dGUgUHJvZ3JhbW1pbmcgVGltZQorICAgICAgICBzcGVjcGFyYW0gICAgICAgIHRkZXZpY2VfQlAgICAgICAgICAgICAgICAgPSA0ZTg7Ly90QlAKKyAgICAgICAgLy8gU2VjdG9yIEVyYXNlIE9wZXJhdGlvbgorICAgICAgICBzcGVjcGFyYW0gICAgICAgIHRkZXZpY2VfU0U2NCAgICAgICAgICAgICAgPSA2NTBlOTsvL3RTRQorICAgICAgICAvLyBTZWN0b3IgRXJhc2UgT3BlcmF0aW9uCisgICAgICAgIHNwZWNwYXJhbSAgICAgICAgdGRldmljZV9TRTI1NiAgICAgICAgICAgICA9IDE4NzVlOTsvL3RTRQorICAgICAgICAvLyBCdWxrIEVyYXNlIE9wZXJhdGlvbgorICAgICAgICBzcGVjcGFyYW0gICAgICAgIHRkZXZpY2VfQkUgICAgICAgICAgICAgICAgPSAzMzBlMTI7Ly90QkUKKyAgICAgICAgLy8gV1JSIEN5Y2xlIFRpbWUKKyAgICAgICAgc3BlY3BhcmFtICAgICAgICB0ZGV2aWNlX1dSUiAgICAgICAgICAgICAgID0gMmUxMTsvL3RXCisgICAgICAgIC8vIEVyYXNlIFN1c3BlbmQvRXJhc2UgUmVzdW1lIFRpbWUKKyAgICAgICAgc3BlY3BhcmFtICAgICAgICB0ZGV2aWNlX0VSU1NVU1AgICAgICAgICAgID0gNDVlNjsvL3RFU0wKKyAgICAgICAgLy8gUHJvZ3JhbSBTdXNwZW5kL1Byb2dyYW0gUmVzdW1lIFRpbWUKKyAgICAgICAgc3BlY3BhcmFtICAgICAgICB0ZGV2aWNlX1BSR1NVU1AgICAgICAgICAgID0gNDBlNjsvLworICAgICAgICAvLyBWQ0MgKG1pbikgdG8gQ1MjIExvdworICAgICAgICBzcGVjcGFyYW0gICAgICAgIHRkZXZpY2VfUFUgICAgICAgICAgICAgICAgPSAzZTg7Ly90UFUKKyAgICAgICAgLy8gUFBCIEVyYXNlIFRpbWUKKyAgICAgICAgc3BlY3BhcmFtICAgICAgICB0ZGV2aWNlX1BQQkVSQVNFICAgICAgICAgID0gMTVlOTsvLworICAgICAgICAvLyBQYXNzd29yZCBVbmxvY2sgVGltZQorICAgICAgICBzcGVjcGFyYW0gICAgICAgIHRkZXZpY2VfUEFTU1VMQ0sgICAgICAgICAgPSAxZTY7Ly8KKyAgICAgICAgLy8gUGFzc3dvcmQgVW5sb2NrIHRvIFBhc3N3b3JkIFVubG9jayBUaW1lCisgICAgICAgIHNwZWNwYXJhbSAgICAgICAgdGRldmljZV9QQVNTQUNDICAgICAgICAgICA9IDEwMGU2OworICAgICAgICAvLyBEYXRhIEluIFNldHVwIE1heCB0aW1lCisgICAgICAgIHNwZWNwYXJhbSAgICAgICAgdGRldmljZV9UU1UgICAgICAgICAgICAgICA9IDMwMGUzOworICAgIGBlbmRpZiAvLyBTUEVFRFNJTQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBJbnB1dCBQb3J0ICBEZWxheXMgIGRvbid0IHJlcXVpcmUgVmVyaWxvZyBkZXNjcmlwdGlvbgorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gUGF0aCBkZWxheXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICBpZiAofmRkcikgICAgICAgICAgIChTQ0sgPT4gU08pID0gdHBkX1NDS19TT19ub3JtYWw7CisgIGlmIChkZHIgfHwgcmRfZmFzdCkgKFNDSyA9PiBTTykgPSB0cGRfU0NLX1NPX0REUjsKKworICBpZiAofmRkciAmJiBkdWFsKSAoU0NLID0+IFNJKSA9IHRwZF9TQ0tfU09fbm9ybWFsOworICBpZiAoIGRkciAmJiBkdWFsKSAoU0NLID0+IFNJKSA9IHRwZF9TQ0tfU09fRERSOworCisgIGlmICh+ZGRyICYmIFFVQUQpKFNDSyA9PiBIT0xETmVnKSA9IHRwZF9TQ0tfU09fbm9ybWFsOworICBpZiAoIGRkciAmJiBRVUFEKShTQ0sgPT4gSE9MRE5lZykgPSB0cGRfU0NLX1NPX0REUjsKKyAgaWYgKH5kZHIgJiYgUVVBRCkoU0NLID0+IFdQTmVnKSAgID0gdHBkX1NDS19TT19ub3JtYWw7CisgIGlmICggZGRyICYmIFFVQUQpKFNDSyA9PiBXUE5lZykgICA9IHRwZF9TQ0tfU09fRERSOworCisgIGlmIChDU05lZykgICAgICAgICAoQ1NOZWcgPT4gU08pID0gdHBkX0NTTmVnX1NPOworICBpZiAoQ1NOZWcgJiYgZHVhbCkgKENTTmVnID0+IFNJKSA9IHRwZF9DU05lZ19TTzsKKworICBpZiAoQ1NOZWcgJiYgUVVBRCkgKENTTmVnID0+IEhPTEROZWcpID0gdHBkX0NTTmVnX1NPOworICBpZiAoQ1NOZWcgJiYgUVVBRCkgKENTTmVnID0+IFdQTmVnKSAgID0gdHBkX0NTTmVnX1NPOworCisgIGlmICh+UVVBRCkgICAgICAgICAgKEhPTEROZWcgPT4gU08pID0gdHBkX0hPTEROZWdfU087CisgIGlmICh+UVVBRCAmJiBkdWFsKSAgKEhPTEROZWcgPT4gU0kpID0gdHBkX0hPTEROZWdfU087CisKKyAgIChSU1ROZWcgPT4gU08pID0gdHBkX1JTVE5lZ19TTzsKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFRpbWluZyBWaW9sYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICAgICAgJHNldHVwICggQ1NOZWcgICAgICAgICAgLCBwb3NlZGdlIFNDSyAmJiYgc2RyX3JkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHNldHVwX0NTTmVnX1NDSywgICAgICAgVmlvbCk7CisgICAgICAgICRzZXR1cCAoIENTTmVnICAgICAgICAgICwgcG9zZWRnZSBTQ0sgJiYmIGRkcl9yZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzZXR1cF9DU05lZ19TQ0tfRERSLCAgIFZpb2wpOworICAgICAgICAkc2V0dXAgKCBTSSAgICAgICAgICAgICAsIHBvc2VkZ2UgU0NLICYmJiBkZWdfc2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHNldHVwX1NJX1NDS19ub3JtYWwsICAgVmlvbCk7CisgICAgICAgICRzZXR1cCAoIFdQTmVnICAgICAgICAgICwgbmVnZWRnZSBDU05lZyAmJiYgd3JfcHJvdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzZXR1cF9XUE5lZ19DU05lZywgICAgIFZpb2wpOworICAgICAgICAkc2V0dXAgKCBIT0xETmVnICAgICAgICAsIHBvc2VkZ2UgU0NLICYmJiBxdWFkX3JkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHNldHVwX0hPTEROZWdfU0NLLCAgICAgVmlvbCk7CisgICAgICAgICRzZXR1cCAoIFNJICAgICAgICAgICAgICwgcG9zZWRnZSBTQ0sgJiYmIGRkcm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0c2V0dXBfU0lfU0NLX0REUiwgICAgICBWaW9sKTsKKyAgICAgICAgJHNldHVwICggU0kgICAgICAgICAgICAgLCBuZWdlZGdlIFNDSyAmJiYgZGRybywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzZXR1cF9TSV9TQ0tfRERSLCAgICAgIFZpb2wpOworICAgICAgICAkc2V0dXAgKCBTSSAgICAgICAgICAgICAsIHBvc2VkZ2UgU0NLICYmJiBkZHJvODAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0c2V0dXBfU0lfU0NLX0REUiwgICAgICBWaW9sKTsKKyAgICAgICAgJHNldHVwICggU0kgICAgICAgICAgICAgLCBuZWdlZGdlIFNDSyAmJiYgZGRybzgwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHNldHVwX1NJX1NDS19ERFIsICAgICAgVmlvbCk7CisKKyAgICAgICAgJHNldHVwICggUlNUTmVnICAgICAgICAgLCBuZWdlZGdlIENTTmVnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHNldHVwX1JTVE5lZ19DU05lZywgICAgVmlvbCk7CisKKyAgICAgICAgJGhvbGQgICggcG9zZWRnZSBTQ0sgJiYmIHNkcl9yZCAgICwgQ1NOZWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aG9sZF9DU05lZ19TQ0ssICAgICAgICBWaW9sKTsKKyAgICAgICAgJGhvbGQgICggcG9zZWRnZSBTQ0sgJiYmIGRkcl9yZCAgICwgQ1NOZWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aG9sZF9DU05lZ19TQ0tfRERSLCAgICBWaW9sKTsKKyAgICAgICAgJGhvbGQgICggcG9zZWRnZSBTQ0sgJiYmIGRlZ19zaW4gICAgICwgU0kgLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhvbGRfU0lfU0NLX25vcm1hbCwgICAgVmlvbCk7CisgICAgICAgICRob2xkICAoIG5lZ2VkZ2UgU0NLICYmJiBkZWhfc291dCAgICAsIFNPICwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRob2xkX1NPX1NDS19ub3JtYWwsICAgIFZpb2wpOworICAgICAgICAkaG9sZCAgKCBuZWdlZGdlIFNDSyAmJiYgZGVoX2Rkcl9zb3V0ICAgICAgICAsIFNPICwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRob2xkX1NPX1NDS19ub3JtYWwsICAgIFZpb2wpOworICAgICAgICAkaG9sZCAgKCBwb3NlZGdlIFNDSyAmJiYgZGVoX2Rkcl9zb3V0ICAgICAgICAsIFNPICwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRob2xkX1NPX1NDS19ub3JtYWwsICAgIFZpb2wpOworICAgICAgICAkaG9sZCAgKCBwb3NlZGdlIENTTmVnICYmJiB3cl9wcm90ICwgV1BOZWcgLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhvbGRfV1BOZWdfQ1NOZWcsICAgICAgVmlvbCk7CisgICAgICAgICRob2xkICAoIHBvc2VkZ2UgU0NLICAmJiYgcXVhZF9yZCAgLCBIT0xETmVnICwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRob2xkX0hPTEROZWdfU0NLLCAgICAgIFZpb2wpOworICAgICAgICAkaG9sZCAgKCBwb3NlZGdlIFNDSyAmJiYgZGRybyAgICAgLCBTSSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRob2xkX1NJX1NDS19ERFIsICAgICAgIFZpb2wpOworICAgICAgICAkaG9sZCAgKCBuZWdlZGdlIFNDSyAmJiYgZGRybyAgICAgLCBTSSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRob2xkX1NJX1NDS19ERFIsICAgICAgIFZpb2wpOworICAgICAgICAkaG9sZCAgKCBwb3NlZGdlIFNDSyAmJiYgZGRybzgwICAgICAsIFNJLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhvbGRfU0lfU0NLX0REUiwgICAgICAgVmlvbCk7CisgICAgICAgICRob2xkICAoIG5lZ2VkZ2UgU0NLICYmJiBkZHJvODAgICAgICwgU0ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aG9sZF9TSV9TQ0tfRERSLCAgICAgICBWaW9sKTsKKworICAgICAgICAkaG9sZCAgKCBuZWdlZGdlIFJTVE5lZyAgLCBDU05lZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRob2xkX0NTTmVnX1JTVE5lZywgICAgIFZpb2wpOworCisgICAgICAgICR3aWR0aCAoIHBvc2VkZ2UgU0NLICYmJiByZCAgICAgICAgLCB0cHdfU0NLX3NlcmlhbF9wb3NlZGdlKTsKKyAgICAgICAgJHdpZHRoICggbmVnZWRnZSBTQ0sgJiYmIHJkICAgICAgICAsIHRwd19TQ0tfc2VyaWFsX25lZ2VkZ2UpOworICAgICAgICAkd2lkdGggKCBwb3NlZGdlIFNDSyAmJiYgZHVhbF9yZCAgICwgdHB3X1NDS19kdWFsX3Bvc2VkZ2UpOworICAgICAgICAkd2lkdGggKCBuZWdlZGdlIFNDSyAmJiYgZHVhbF9yZCAgICwgdHB3X1NDS19kdWFsX25lZ2VkZ2UpOworICAgICAgICAkd2lkdGggKCBwb3NlZGdlIFNDSyAmJiYgZmFzdF9yZCAgICwgdHB3X1NDS19mYXN0X3Bvc2VkZ2UpOworICAgICAgICAkd2lkdGggKCBuZWdlZGdlIFNDSyAmJiYgZmFzdF9yZCAgICwgdHB3X1NDS19mYXN0X25lZ2VkZ2UpOworICAgICAgICAkd2lkdGggKCBwb3NlZGdlIFNDSyAmJiYgZGRyZCAgICAgICwgdHB3X1NDS19ERFJfcG9zZWRnZSk7CisgICAgICAgICR3aWR0aCAoIG5lZ2VkZ2UgU0NLICYmJiBkZHJkICAgICAgLCB0cHdfU0NLX0REUl9uZWdlZGdlKTsKKyAgICAgICAgJHdpZHRoICggcG9zZWRnZSBTQ0sgJiYmIGRkcmQ4MCAgICAsIHRwd19TQ0tfRERSODBfcG9zZWRnZSk7CisgICAgICAgICR3aWR0aCAoIG5lZ2VkZ2UgU0NLICYmJiBkZHJkODAgICAgLCB0cHdfU0NLX0REUjgwX25lZ2VkZ2UpOworICAgICAgICAkd2lkdGggKCBwb3NlZGdlIFNDSyAmJiYgcXVhZHBnICAgICwgdHB3X1NDS19xdWFkcGdfcG9zZWRnZSk7CisgICAgICAgICR3aWR0aCAoIG5lZ2VkZ2UgU0NLICYmJiBxdWFkcGcgICAgLCB0cHdfU0NLX3F1YWRwZ19uZWdlZGdlKTsKKworICAgICAgICAkd2lkdGggKCBwb3NlZGdlIENTTmVnICYmJiBSRF9FUVVfMSwgdHB3X0NTTmVnX3JlYWRfcG9zZWRnZSk7CisgICAgICAgICR3aWR0aCAoIHBvc2VkZ2UgQ1NOZWcgJiYmIFJEX0VRVV8wLCB0cHdfQ1NOZWdfcGdlcnNfcG9zZWRnZSk7CisgICAgICAgICR3aWR0aCAoIG5lZ2VkZ2UgUlNUTmVnICAgICAgICAgICAgLCB0cHdfUlNUTmVnX25lZ2VkZ2UpOworICAgICAgICAkd2lkdGggKCBwb3NlZGdlIFJTVE5lZyAgICAgICAgICAgICwgdHB3X1JTVE5lZ19wb3NlZGdlKTsKKworICAgICAgICAkcGVyaW9kICggcG9zZWRnZSBTQ0sgJiYmIHJkICAgICAgICwgdHBlcmlvZF9TQ0tfc2VyaWFsX3JkKTsKKyAgICAgICAgJHBlcmlvZCAoIHBvc2VkZ2UgU0NLICYmJiBmYXN0X3JkICAsIHRwZXJpb2RfU0NLX2Zhc3RfcmQpOworICAgICAgICAkcGVyaW9kICggcG9zZWRnZSBTQ0sgJiYmIGR1YWxfcmQgICwgdHBlcmlvZF9TQ0tfZHVhbF9yZCk7CisgICAgICAgICRwZXJpb2QgKCBwb3NlZGdlIFNDSyAmJiYgcXVhZHBnICAgLCB0cGVyaW9kX1NDS19xdWFkcGcpOworICAgICAgICAkcGVyaW9kICggcG9zZWRnZSBTQ0sgJiYmIGRkcmQgICAgICwgdHBlcmlvZF9TQ0tfRERSX3JkKTsKKyAgICAgICAgJHBlcmlvZCAoIHBvc2VkZ2UgU0NLICYmJiBkZHJkODAgICAsIHRwZXJpb2RfU0NLX0REUjgwX3JkKTsKKworZW5kc3BlY2lmeQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBNYWluIEJlaGF2aW9yIEJsb2NrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBGU00gc3RhdGVzCisgcGFyYW1ldGVyIElETEUgICAgICAgICAgICA9IDUnZDA7CisgcGFyYW1ldGVyIFJFU0VUX1NUQVRFICAgICA9IDUnZDE7CisgcGFyYW1ldGVyIEFVVE9CT09UICAgICAgICA9IDUnZDI7CisgcGFyYW1ldGVyIFdSSVRFX1NSICAgICAgICA9IDUnZDM7CisgcGFyYW1ldGVyIFBBR0VfUEcgICAgICAgICA9IDUnZDQ7CisgcGFyYW1ldGVyIE9UUF9QRyAgICAgICAgICA9IDUnZDU7CisgcGFyYW1ldGVyIFBHX1NVU1AgICAgICAgICA9IDUnZDY7CisgcGFyYW1ldGVyIFNFQ1RPUl9FUlMgICAgICA9IDUnZDc7CisgcGFyYW1ldGVyIEJVTEtfRVJTICAgICAgICA9IDUnZDg7CisgcGFyYW1ldGVyIEVSU19TVVNQICAgICAgICA9IDUnZDk7CisgcGFyYW1ldGVyIEVSU19TVVNQX1BHICAgICA9IDUnZDEwOworIHBhcmFtZXRlciBFUlNfU1VTUF9QR19TVVNQPSA1J2QxMTsKKyBwYXJhbWV0ZXIgUEFTU19QRyAgICAgICAgID0gNSdkMTI7CisgcGFyYW1ldGVyIFBBU1NfVU5MT0NLICAgICA9IDUnZDEzOworIHBhcmFtZXRlciBQUEJfUEcgICAgICAgICAgPSA1J2QxNDsKKyBwYXJhbWV0ZXIgUFBCX0VSUyAgICAgICAgID0gNSdkMTU7CisgcGFyYW1ldGVyIEFVVE9CT09UX1BHICAgICA9IDUnZDE2OworIHBhcmFtZXRlciBBU1BfUEcgICAgICAgICAgPSA1J2QxNzsKKyBwYXJhbWV0ZXIgUExCX1BHICAgICAgICAgID0gNSdkMTg7CisgcGFyYW1ldGVyIERZQl9QRyAgICAgICAgICA9IDUnZDE5OworIHBhcmFtZXRlciBOVkRMUl9QRyAgICAgICAgPSA1J2QyMDsKKworIHJlZyBbNDowXSBjdXJyZW50X3N0YXRlOworIHJlZyBbNDowXSBuZXh0X3N0YXRlOworCisvLyBJbnN0cnVjdGlvbiB0eXBlCisgcGFyYW1ldGVyIE5PTkUgICAgICAgICAgICA9IDcnZDA7CisgcGFyYW1ldGVyIFdSUiAgICAgICAgICAgICA9IDcnZDE7CisgcGFyYW1ldGVyIFBQICAgICAgICAgICAgICA9IDcnZDI7CisgcGFyYW1ldGVyIFJFQUQgICAgICAgICAgICA9IDcnZDM7CisgcGFyYW1ldGVyIFdSREkgICAgICAgICAgICA9IDcnZDQ7CisgcGFyYW1ldGVyIFJEU1IgICAgICAgICAgICA9IDcnZDU7CisgcGFyYW1ldGVyIFdSRU4gICAgICAgICAgICA9IDcnZDY7CisgcGFyYW1ldGVyIFJEU1IyICAgICAgICAgICA9IDcnZDc7CisgcGFyYW1ldGVyIEZTVFJEICAgICAgICAgICA9IDcnZDg7CisgcGFyYW1ldGVyIEZTVFJENCAgICAgICAgICA9IDcnZDk7CisgcGFyYW1ldGVyIEREUkZSICAgICAgICAgICA9IDcnZDEwOworIHBhcmFtZXRlciBERFJGUjQgICAgICAgICAgPSA3J2QxMTsKKyBwYXJhbWV0ZXIgUFA0ICAgICAgICAgICAgID0gNydkMTI7CisgcGFyYW1ldGVyIFJENCAgICAgICAgICAgICA9IDcnZDEzOworIHBhcmFtZXRlciBBQlJEICAgICAgICAgICAgPSA3J2QxNDsKKyBwYXJhbWV0ZXIgQUJXUiAgICAgICAgICAgID0gNydkMTU7CisgcGFyYW1ldGVyIEJSUkQgICAgICAgICAgICA9IDcnZDE2OworIHBhcmFtZXRlciBCUldSICAgICAgICAgICAgPSA3J2QxNzsKKyBwYXJhbWV0ZXIgUDRFICAgICAgICAgICAgID0gNydkMTk7CisgcGFyYW1ldGVyIFA0RTQgICAgICAgICAgICA9IDcnZDIwOworIHBhcmFtZXRlciBBU1BSRCAgICAgICAgICAgPSA3J2QyMTsKKyBwYXJhbWV0ZXIgQVNQUCAgICAgICAgICAgID0gNydkMjI7CisgcGFyYW1ldGVyIENMU1IgICAgICAgICAgICA9IDcnZDIzOworIHBhcmFtZXRlciBRUFAgICAgICAgICAgICAgPSA3J2QyNDsKKyBwYXJhbWV0ZXIgUVBQNCAgICAgICAgICAgID0gNydkMjU7CisgcGFyYW1ldGVyIFJEQ1IgICAgICAgICAgICA9IDcnZDI2OworIHBhcmFtZXRlciBET1IgICAgICAgICAgICAgPSA3J2QyNzsKKyBwYXJhbWV0ZXIgRE9SNCAgICAgICAgICAgID0gNydkMjg7CisgcGFyYW1ldGVyIERMUFJEICAgICAgICAgICA9IDcnZDI5OworIHBhcmFtZXRlciBPVFBQICAgICAgICAgICAgPSA3J2QzMDsKKyBwYXJhbWV0ZXIgUE5WRExSICAgICAgICAgID0gNydkMzE7CisgcGFyYW1ldGVyIE9UUFIgICAgICAgICAgICA9IDcnZDMyOworIHBhcmFtZXRlciBXVkRMUiAgICAgICAgICAgPSA3J2QzMzsKKyBwYXJhbWV0ZXIgQkUgICAgICAgICAgICAgID0gNydkMzQ7CisgcGFyYW1ldGVyIFFPUiAgICAgICAgICAgICA9IDcnZDM1OworIHBhcmFtZXRlciBRT1I0ICAgICAgICAgICAgPSA3J2QzNjsKKyBwYXJhbWV0ZXIgRVJTUCAgICAgICAgICAgID0gNydkMzc7CisgcGFyYW1ldGVyIEVSUlMgICAgICAgICAgICA9IDcnZDM4OworIHBhcmFtZXRlciBQR1NQICAgICAgICAgICAgPSA3J2QzOTsKKyBwYXJhbWV0ZXIgUEdSUyAgICAgICAgICAgID0gNydkNDA7CisgcGFyYW1ldGVyIFJFTVMgICAgICAgICAgICA9IDcnZDQxOworIHBhcmFtZXRlciBSRElEICAgICAgICAgICAgPSA3J2Q0MjsKKyBwYXJhbWV0ZXIgTVBNICAgICAgICAgICAgID0gNydkNDM7CisgcGFyYW1ldGVyIFBMQldSICAgICAgICAgICA9IDcnZDQ0OworIHBhcmFtZXRlciBQTEJSRCAgICAgICAgICAgPSA3J2Q0NTsKKyBwYXJhbWV0ZXIgUkVTICAgICAgICAgICAgID0gNydkNDY7CisgcGFyYW1ldGVyIERJT1IgICAgICAgICAgICA9IDcnZDQ3OworIHBhcmFtZXRlciBESU9SNCAgICAgICAgICAgPSA3J2Q0ODsKKyBwYXJhbWV0ZXIgRERSRElPUiAgICAgICAgID0gNydkNDk7CisgcGFyYW1ldGVyIEREUkRJT1I0ICAgICAgICA9IDcnZDUwOworIHBhcmFtZXRlciBTRSAgICAgICAgICAgICAgPSA3J2Q1MTsKKyBwYXJhbWV0ZXIgU0U0ICAgICAgICAgICAgID0gNydkNTI7CisgcGFyYW1ldGVyIERZQlJEICAgICAgICAgICA9IDcnZDUzOworIHBhcmFtZXRlciBEWUJXUiAgICAgICAgICAgPSA3J2Q1NDsKKyBwYXJhbWV0ZXIgUFBCUkQgICAgICAgICAgID0gNydkNTU7CisgcGFyYW1ldGVyIFBQQlAgICAgICAgICAgICA9IDcnZDU2OworIHBhcmFtZXRlciBQUEJFUlMgICAgICAgICAgPSA3J2Q1NzsKKyBwYXJhbWV0ZXIgUEFTU1JEICAgICAgICAgID0gNydkNTg7CisgcGFyYW1ldGVyIFBBU1NQICAgICAgICAgICA9IDcnZDU5OworIHBhcmFtZXRlciBQQVNTVSAgICAgICAgICAgPSA3J2Q2MDsKKyBwYXJhbWV0ZXIgUUlPUiAgICAgICAgICAgID0gNydkNjE7CisgcGFyYW1ldGVyIFFJT1I0ICAgICAgICAgICA9IDcnZDYyOworIHBhcmFtZXRlciBERFJRSU9SICAgICAgICAgPSA3J2Q2MzsKKyBwYXJhbWV0ZXIgRERSUUlPUjQgICAgICAgID0gNydkNjQ7CisgcGFyYW1ldGVyIFJFU0VUICAgICAgICAgICA9IDcnZDY1OworIHBhcmFtZXRlciBNQlIgICAgICAgICAgICAgPSA3J2Q2NjsKKyBwYXJhbWV0ZXIgQlJBQyAgICAgICAgICAgID0gNydkNjc7CisgcGFyYW1ldGVyIEVDQ1JEICAgICAgICAgICA9IDcnZDY4OworCisgcmVnIFs2OjBdIEluc3RydWN0OworCisvL0J1cyBjeWNsZSBzdGF0ZQorIHBhcmFtZXRlciBTVEFORF9CWSAgICAgICAgPSAzJ2QwOworIHBhcmFtZXRlciBPUENPREVfQllURSAgICAgPSAzJ2QxOworIHBhcmFtZXRlciBBRERSRVNTX0JZVEVTICAgPSAzJ2QyOworIHBhcmFtZXRlciBEVU1NWV9CWVRFUyAgICAgPSAzJ2QzOworIHBhcmFtZXRlciBNT0RFX0JZVEUgICAgICAgPSAzJ2Q0OworIHBhcmFtZXRlciBEQVRBX0JZVEVTICAgICAgPSAzJ2Q1OworCisgcmVnIFsyOjBdIGJ1c19jeWNsZV9zdGF0ZTsKKworIHJlZyBkZXFfcGluOworICAgIGFsd2F5cyBAKFNPX2luLCBTT196KQorICAgIGJlZ2luCisgICAgICBpZiAoU09faW49PVNPX3opCisgICAgICAgIGRlcV9waW49MSdiMDsKKyAgICAgIGVsc2UKKyAgICAgICAgZGVxX3Bpbj0xJ2IxOworICAgIGVuZAorICAgIC8vIGNoZWNrIHdoZW4gZGF0YSBpcyBnZW5lcmF0ZWQgZnJvbSBtb2RlbCB0byBhdm9pZCBzZXR1cGhvbGQgY2hlY2sgaW4KKyAgICAvLyB0aGlzIG9jY2FzaW9uCisgICAgYXNzaWduIGRlZ19waW4gPSBkZXFfcGluOworICAgIGFzc2lnbiBkZWhfcGluID0gKGRlcV9waW4gPT0gMSdiMCkgJiYgKFNPX3ogIT0gMSdieik7CisgcmVnIGRlcV9zaW47CisgICAgYWx3YXlzIEAoU0lfaW4sIFNJT3V0X3opCisgICAgYmVnaW4KKyAgICAgIGlmIChTSV9pbj09U0lPdXRfeikKKyAgICAgICAgZGVxX3Npbj0xJ2IwOworICAgICAgZWxzZQorICAgICAgICBkZXFfc2luPTEnYjE7CisgICAgZW5kCisgICAgLy8gY2hlY2sgd2hlbiBkYXRhIGlzIGdlbmVyYXRlZCBmcm9tIG1vZGVsIHRvIGF2b2lkIHNldHVwaG9sZCBjaGVjayBpbgorICAgIC8vIHRoaXMgb2NjYXNpb24KKyAgICBhc3NpZ24gZGVnX3Npbj1kZXFfc2luCisgICAgICAgICAgICYmIChkZHIgPT0gMSdiMCkgJiYgKEluc3RydWN0ICE9PSBERFJGUikKKyAgICAgICAgICAgJiYgKEluc3RydWN0ICE9PSBERFJGUjQpICYmIChJbnN0cnVjdCAhPT0gRERSRElPUikKKyAgICAgICAgICAgJiYgKEluc3RydWN0ICE9PSBERFJESU9SNCkgJiYgKEluc3RydWN0ICE9PSBERFJRSU9SKQorICAgICAgICAgICAmJiAoSW5zdHJ1Y3QgIT09IEREUlFJT1I0KSAmJiAoU0lPdXRfeiAhPSAxJ2J6KTsKKyByZWcgZGVxX3NvdXQ7CisgICAgYWx3YXlzIEAoU09fb3V0LCBTSU91dF96KQorICAgIGJlZ2luCisgICAgICBpZiAoU09fb3V0PT1TSU91dF96KQorICAgICAgICBkZXFfc291dD0xJ2IwOworICAgICAgZWxzZQorICAgICAgICBkZXFfc291dD0xJ2IxOworICAgIGVuZAorICAgIC8vIGNoZWNrIHdoZW4gZGF0YSBpcyBnZW5lcmF0ZWQgZnJvbSBtb2RlbAorICAgIGFzc2lnbiBkZWhfc291dD0gKGRlcV9zb3V0ID09IDEnYjApCisgICAgICAgICAgICYmIChkZHIgPT0gMSdiMCkgJiYgKFNPdXRfeiAhPSAxJ2J6KTsKKyAgICBhc3NpZ24gZGVoX2Rkcl9zb3V0PSAoZGVxX3NvdXQgPT0gMSdiMCkKKyAgICAgICAgICAgJiYgKGRkciA9PSAxJ2IxKSAmJiAoU091dF96ICE9IDEnYnopOworCisgcmVnIGRlcV9ob2xkaW47CisgICAgYWx3YXlzIEAoSE9MRE5lZ19pcGQsIEhPTEROZWdPdXRfemQpCisgICAgYmVnaW4KKyAgICAgIGlmIChIT0xETmVnX2lwZD09SE9MRE5lZ091dF96ZCkKKyAgICAgICAgZGVxX2hvbGRpbj0xJ2IwOworICAgICAgZWxzZQorICAgICAgICBkZXFfaG9sZGluPTEnYjE7CisgICAgZW5kCisgICAgLy8gY2hlY2sgd2hlbiBkYXRhIGlzIGdlbmVyYXRlZCBmcm9tIG1vZGVsIHRvIGF2b2lkIHNldHVwaG9sZCBjaGVjayBpbgorICAgIC8vIHRoaXMgb2NjYXNpb24KKyAgICBhc3NpZ24gZGVnX2hvbGRpbj1kZXFfaG9sZGluOworICAgIGFzc2lnbiBkZWhfaG9sZGluPShkZXFfaG9sZGluID09IDEnYjApICYmIChIT0xETmVnT3V0X3pkICE9IDEnYnopOworCisgICAgLy9Qb3dlciBVcCB0aW1lOworICAgIGluaXRpYWwKKyAgICBiZWdpbgorICAgICAgICBQb3dlcmVkVXAgPSAxJ2IwOworCSRkaXNwbGF5KCIlMHQ9PlNUQVRVUzogU1BJIEZMQVNIIFBPV0VSIFVQIFdhaXQgVGltZTogJTBkOiUwZCIsJHRpbWUsdGRldmljZV9QVSx0ZGV2aWNlX1BSR1NVU1ApOworICAgICAgICAjdGRldmljZV9QVSBQb3dlcmVkVXAgPSAxJ2IxOworCSRkaXNwbGF5KCIlMHQ9PlNUQVRVUzogU1BJIEZMQVNIIFBPV0VSIFVQIiwkdGltZSwpOworICAgIGVuZAorCisgICAgaW5pdGlhbAorICAgIGJlZ2luIDogSW5pdAorICAgICAgICB3cml0ZSAgICAgICA9IDEnYjA7CisgICAgICAgIGNmZ193cml0ZSAgID0gMSdiMDsKKyAgICAgICAgcmVhZF9vdXQgICAgPSAxJ2IwOworICAgICAgICBBZGRyZXNzICAgICA9IDA7CisgICAgICAgIGNoYW5nZV9hZGRyID0gMSdiMDsKKyAgICAgICAgY250ICAgICAgICAgPSAwOworICAgICAgICBSU1QgICAgICAgICA9IDEnYjA7CisgICAgICAgIFJTVF9pbiAgICAgID0gMSdiMDsKKyAgICAgICAgUlNUX291dCAgICAgPSAxJ2IxOworICAgICAgICBQRE9ORSAgICAgICA9IDEnYjE7CisgICAgICAgIFBTVEFSVCAgICAgID0gMSdiMDsKKyAgICAgICAgUEdTVVNQICAgICAgPSAxJ2IwOworICAgICAgICBQR1JFUyAgICAgICA9IDEnYjA7CisgICAgICAgIFBSR1NVU1BfaW4gID0gMSdiMDsKKyAgICAgICAgRVJTU1VTUF9pbiAgPSAxJ2IwOworICAgICAgICBSRVNfVE9fU1VTUF9NSU5fVElNRSAgPSAxJ2IwOworICAgICAgICBSRVNfVE9fU1VTUF9UWVBfVElNRSAgPSAxJ2IwOworCisgICAgICAgIEVET05FICAgICAgID0gMSdiMTsKKyAgICAgICAgRVNUQVJUICAgICAgPSAxJ2IwOworICAgICAgICBFU1VTUCAgICAgICA9IDEnYjA7CisgICAgICAgIEVSRVMgICAgICAgID0gMSdiMDsKKworICAgICAgICBXRE9ORSAgICAgICA9IDEnYjE7CisgICAgICAgIFdTVEFSVCAgICAgID0gMSdiMDsKKworICAgICAgICBSZXNldGVkICAgICA9IDEnYjA7CisKKyAgICAgICAgSW5zdHJ1Y3QgICAgICAgID0gTk9ORTsKKyAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gU1RBTkRfQlk7CisgICAgICAgIGN1cnJlbnRfc3RhdGUgICA9IFJFU0VUX1NUQVRFOworICAgICAgICBuZXh0X3N0YXRlICAgICAgPSBSRVNFVF9TVEFURTsKKyAgICBlbmQKKworICAgIC8vIGluaXRpYWxpemUgbWVtb3J5IGFuZCBsb2FkIHByZWxvYWQgZmlsZXMgaWYgYW55CisgICAgaW5pdGlhbAorICAgIGJlZ2luOiBJbml0TWVtb3J5CisgICAgICAgIGludGVnZXIgaTsKKworICAgICAgICBmb3IgKGk9MDtpPD1BZGRyUkFOR0U7aT1pKzEpCisgICAgICAgIGJlZ2luCisgICAgICAgICAgICBNZW1baV0gPSBNYXhEYXRhOworICAgICAgICBlbmQKKworICAgICAgICBpZiAoKFVzZXJQcmVsb2FkKSAmJiAhKG1lbV9maWxlX25hbWUgPT0gIm5vbmUiKSkKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgLy8gTWVtb3J5IFByZWxvYWQKKyAgICAgICAgICAgLy9zMjVmbDI1NnMubWVtLCBtZW1vcnkgcHJlbG9hZCBmaWxlCisgICAgICAgICAgIC8vICBAYWFhYWFhIC0gPGFhYWFhYT4gc3RhbmRzIGZvciBhZGRyZXNzCisgICAgICAgICAgIC8vICBkZCAgICAgIC0gPGRkPiBpcyBieXRlIHRvIGJlIHdyaXR0ZW4gYXQgTWVtKGFhYWFhYSsrKQorICAgICAgICAgICAvLyAoYWFhYWFhIGlzIGluY3JlbWVudGVkIGF0IGV2ZXJ5IGxvYWQpCisJICAgJGRpc3BsYXkoIiVtOiBMb2FkaW5nIE1lbWZpbGUgOiAlcyIsbWVtX2ZpbGVfbmFtZSk7CisgICAgICAgICAgICRyZWFkbWVtaChtZW1fZmlsZV9uYW1lLE1lbSk7CisgICAgICAgIGVuZAorCisgICAgICAgIGZvciAoaT1PVFBMb0FkZHI7aTw9T1RQSGlBZGRyO2k9aSsxKQorICAgICAgICBiZWdpbgorICAgICAgICAgICAgT1RQTWVtW2ldID0gTWF4RGF0YTsKKyAgICAgICAgZW5kCisKKyAgICAgICAgaWYgKFVzZXJQcmVsb2FkICYmICEob3RwX2ZpbGVfbmFtZSA9PSAibm9uZSIpKQorICAgICAgICBiZWdpbgorICAgICAgICAvL3MyNWZsMjU2c19vdHAgbWVtb3J5IGZpbGUKKyAgICAgICAgLy8gICAvICAgICAgIC0gY29tbWVudAorICAgICAgICAvLyAgIEBhYWFhYWEgICAgIC0gPGFhYWFhYT4gc3RhbmRzIGZvciBhZGRyZXNzIHdpdGhpbiBsYXN0IGRlZmluZWQKKyAgICAgICAgLy8gICBzZWN0b3IKKyAgICAgICAgLy8gICBkZCAgICAgIC0gPGRkPiBpcyBieXRlIHRvIGJlIHdyaXR0ZW4gYXQgT1RQTWVtKGFhYSsrKQorICAgICAgICAvLyAgIChhYSBpcyBpbmNyZW1lbnRlZCBhdCBldmVyeSBsb2FkKQorICAgICAgICAvLyAgIG9ubHkgZmlyc3QgMS00IGNvbHVtbnMgYXJlIGxvYWRlZC4gTk8gZW1wdHkgbGluZXMgISEhISEhISEhISEhISEhIQorICAgICAgICAgICAkcmVhZG1lbWgob3RwX2ZpbGVfbmFtZSxPVFBNZW0pOworICAgICAgICBlbmQKKworICAgICAgICBMT0NLX0JZVEUxWzc6MF0gPSBPVFBNZW1bMTZdOworICAgICAgICBMT0NLX0JZVEUyWzc6MF0gPSBPVFBNZW1bMTddOworICAgICAgICBMT0NLX0JZVEUzWzc6MF0gPSBPVFBNZW1bMThdOworICAgICAgICBMT0NLX0JZVEU0Wzc6MF0gPSBPVFBNZW1bMTldOworICAgIGVuZAorCisgICAgLy8gaW5pdGlhbGl6ZSBtZW1vcnkgYW5kIGxvYWQgcHJlbG9hZCBmaWxlcyBpZiBhbnkKKyAgICBpbml0aWFsCisgICAgYmVnaW46IEluaXRUaW1pbmdNb2RlbAorICAgIGludGVnZXIgaTsKKyAgICBpbnRlZ2VyIGo7CisgICAgICAgIC8vVU5JRk9STSBPUiBIWUJSSUQgYXJjaCBtb2RlbCBpcyB1c2VkCisgICAgICAgIC8vYXNzdW1wdGlvbnM6CisgICAgICAgIC8vMS4gVGltaW5nTW9kZWwgaGFzIGZvcm1hdCBhcyBTMjVGTDEyOFNYWFhYWFhYWF9YX1hYcEYKKyAgICAgICAgLy9pdCBpcyBpbXBvcnRhbnQgdGhhdCAxNi10aCBjaGFyYWN0ZXIgZnJvbSBmaXJzdCBvbmUgaXMgIjAiIG9yICIxIgorICAgICAgICAvLzIuIFRpbWluZ01vZGVsIGRvZXMgbm90IGhhdmUgbW9yZSB0aGVuIDI0IGNoYXJhY3RlcnMKKyAgICAgICAgdG1wX3RpbWluZyA9IFRpbWluZ01vZGVsOy8vY29weSBvZiBUaW1pbmdNb2RlbAorCisgICAgICAgIGkgPSAyMzsKKyAgICAgICAgd2hpbGUgKChpID49IDApICYmIChmb3VuZCAhPSAxJ2IxKSkvL3NlYXJjaCBmb3IgZmlyc3Qgbm9uIG51bGwgY2hhcmFjdGVyCisgICAgICAgIGJlZ2luICAgICAgICAvL2kga2VlcHMgcG9zaXRpb24gb2YgZmlyc3Qgbm9uIG51bGwgY2hhcmFjdGVyCisgICAgICAgICAgICBqID0gNzsKKyAgICAgICAgICAgIHdoaWxlICgoaiA+PSAwKSAmJiAoZm91bmQgIT0gMSdiMSkpCisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgIGlmICh0bXBfdGltaW5nW2kqOCtqXSAhPSAxJ2QwKQorICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IDEnYjE7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBqID0gai0xOworICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBpID0gaSAtIDE7CisgICAgICAgIGVuZAorICAgICAgICBpID0gaSArMTsKKyAgICAgICAgaWYgKGZvdW5kKS8vaWYgbm9uIG51bGwgY2hhcmFjdGVyIGlzIGZvdW5kCisgICAgICAgIGJlZ2luCisgICAgICAgICAgICBmb3IgKGo9MDtqPD03O2o9aisxKQorICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIC8vRUhQTEMvSFBMQyBjaGFyYWN0ZXIgaXMgMTUKKyAgICAgICAgICAgIHRtcF9jaGFyMVtqXSA9IFRpbWluZ01vZGVsWyhpLTE0KSo4K2pdOworICAgICAgICAgICAgLy8yNTZCLzUxMkIgUGFnZSBjaGFyYWN0ZXIgaXMgMTYKKyAgICAgICAgICAgIHRtcF9jaGFyMltqXSA9IFRpbWluZ01vZGVsWyhpLTE1KSo4K2pdOworICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorICAgICAgICBpZiAodG1wX2NoYXIxID09ICIwIiB8fCB0bXBfY2hhcjEgPT0gIjIiIHx8IHRtcF9jaGFyMSA9PSAiMyIgfHwKKyAgICAgICAgICAgIHRtcF9jaGFyMSA9PSAiUiIgfHwgdG1wX2NoYXIxID09ICJBIiB8fCB0bXBfY2hhcjEgPT0gIkIiIHx8CisgICAgICAgICAgICB0bXBfY2hhcjEgPT0gIkMiIHx8IHRtcF9jaGFyMSA9PSAiRCIgfHwgdG1wX2NoYXIxID09ICJZIiB8fAorICAgICAgICAgICAgdG1wX2NoYXIxID09ICJaIiB8fCB0bXBfY2hhcjEgPT0gIlMiIHx8IHRtcF9jaGFyMSA9PSAiVCIgfHwKKyAgICAgICAgICAgIHRtcF9jaGFyMSA9PSAiSyIgfHwgdG1wX2NoYXIxID09ICJMIikKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIEVIUCA9IDE7CisgICAgICAgICAgICBpZih0bXBfY2hhcjEgPT0gIloiIHx8IHRtcF9jaGFyMSA9PSAiUyIgfHwgdG1wX2NoYXIxID09ICJUIiB8fAorICAgICAgICAgICAgICAgdG1wX2NoYXIxID09ICJLIiB8fCB0bXBfY2hhcjEgPT0gIkwiIHx8IHRtcF9jaGFyMSA9PSAiWSIpCisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgIFJkUHN3ZFByb3RFbmFibGUgPSAxOworICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorICAgICAgICBlbHNlIGlmICh0bXBfY2hhcjEgPT0gIjQiIHx8IHRtcF9jaGFyMSA9PSAiNiIgfHwgdG1wX2NoYXIxID09ICI3IiB8fAorICAgICAgICAgICAgICAgICB0bXBfY2hhcjEgPT0gIjgiIHx8IHRtcF9jaGFyMSA9PSAiOSIgfHwgdG1wX2NoYXIxID09ICJRIikKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIEVIUCA9IDA7CisgICAgICAgIGVuZAorCisgICAgICAgIGlmICh0bXBfY2hhcjEgPT0gIjAiIHx8IHRtcF9jaGFyMSA9PSAiMiIgfHwgdG1wX2NoYXIxID09ICIzIiB8fAorICAgICAgICAgICAgdG1wX2NoYXIxID09ICJSIiB8fCB0bXBfY2hhcjEgPT0gIkEiIHx8IHRtcF9jaGFyMSA9PSAiQiIgfHwKKyAgICAgICAgICAgIHRtcF9jaGFyMSA9PSAiQyIgfHwgdG1wX2NoYXIxID09ICJEIiB8fCB0bXBfY2hhcjEgPT0gIjQiIHx8CisgICAgICAgICAgICB0bXBfY2hhcjEgPT0gIjYiIHx8IHRtcF9jaGFyMSA9PSAiNyIgfHwgdG1wX2NoYXIxID09ICI4IiB8fAorICAgICAgICAgICAgdG1wX2NoYXIxID09ICI5IiB8fCB0bXBfY2hhcjEgPT0gIlEiKQorICAgICAgICBiZWdpbgorICAgICAgICAgICAgQVNQX3JlZyAgICA9IDE2J2hGRTdGOworICAgICAgICAgICAgQVNQX3JlZ19pbiA9IDE2J2hGRTdGOworICAgICAgICBlbmQKKyAgICAgICAgZWxzZSBpZiAodG1wX2NoYXIxID09ICJZIiB8fCB0bXBfY2hhcjEgPT0gIloiIHx8IHRtcF9jaGFyMSA9PSAiUyIgfHwKKyAgICAgICAgICAgICAgICAgdG1wX2NoYXIxID09ICJUIiB8fCB0bXBfY2hhcjEgPT0gIksiIHx8IHRtcF9jaGFyMSA9PSAiTCIpCisgICAgICAgIGJlZ2luCisgICAgICAgICAgICBBU1BfcmVnICAgID0gMTYnaEZFNEY7CisgICAgICAgICAgICBBU1BfcmVnX2luID0gMTYnaEZFNEY7CisgICAgICAgIGVuZAorCisgICAgICAgIGlmICh0bXBfY2hhcjIgPT0gIjAiKQorICAgICAgICBiZWdpbgorICAgICAgICAgICAgUGFnZVNpemUgPSAyNTU7CisgICAgICAgICAgICBQYWdlTnVtICA9IFBhZ2VOdW02NDsKKyAgICAgICAgICAgIFNlY1NpemUgID0gU2VjU2l6ZTY0OworICAgICAgICBlbmQKKyAgICAgICAgZWxzZSBpZiAodG1wX2NoYXIyID09ICIxIikKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIFBhZ2VTaXplID0gNTExOworICAgICAgICAgICAgUGFnZU51bSAgPSBQYWdlTnVtMjU2OworICAgICAgICAgICAgU2VjU2l6ZSAgPSBTZWNTaXplMjU2OworICAgICAgICBlbmQKKyAgICBlbmQKKworICAgIC8vQ0ZJCisgICAgaW5pdGlhbAorICAgIGJlZ2luOiBJbml0Q0ZJCisgICAgaW50ZWdlciBpOworICAgIGludGVnZXIgajsKKyAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICAgICAgLy8gSUQtQ0ZJIGFycmF5IGRhdGEKKyAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICAgICAgLy8gTWFudWZhY3R1cmVyIGFuZCBEZXZpY2UgSUQKKyAgICAgICAgQ0ZJX2FycmF5WzgnaDAwXSA9IEplZGVjX0lEOworICAgICAgICBDRklfYXJyYXlbOCdoMDFdID0gRGV2aWNlSUQxOworICAgICAgICBDRklfYXJyYXlbOCdoMDJdID0gRGV2aWNlSUQyOworICAgICAgICBDRklfYXJyYXlbOCdoMDNdID0gOCdoMDA7CisgICAgICAgIGlmICh0bXBfY2hhcjIgPT0gIjAiKQorICAgICAgICAvLyBVbmlmb3JtIDY0a0Igc2VjdG9ycworICAgICAgICAgICAgQ0ZJX2FycmF5WzgnaDA0XSA9IEV4dGVuZGVkSUQ2NDsKKyAgICAgICAgZWxzZSBpZiAodG1wX2NoYXIyID09ICIxIikKKyAgICAgICAgLy8gVW5pZm9ybSAyNTZrQiBzZWN0b3JzCisgICAgICAgICAgICBDRklfYXJyYXlbOCdoMDRdID0gRXh0ZW5kZWRJRDI1NjsKKyAgICAgICAgQ0ZJX2FycmF5WzgnaDA1XSA9IDgnaDgwOworICAgICAgICBDRklfYXJyYXlbOCdoMDZdID0gOCdoMDA7CisgICAgICAgIENGSV9hcnJheVs4J2gwN10gPSA4J2gwMDsKKyAgICAgICAgQ0ZJX2FycmF5WzgnaDA4XSA9IDgnaDAwOworICAgICAgICBDRklfYXJyYXlbOCdoMDldID0gOCdoMDA7CisgICAgICAgIENGSV9hcnJheVs4J2gwQV0gPSA4J2gwMDsKKyAgICAgICAgQ0ZJX2FycmF5WzgnaDBCXSA9IDgnaDAwOworICAgICAgICBDRklfYXJyYXlbOCdoMENdID0gOCdoMDA7CisgICAgICAgIENGSV9hcnJheVs4J2gwRF0gPSA4J2gwMDsKKyAgICAgICAgQ0ZJX2FycmF5WzgnaDBFXSA9IDgnaDAwOworICAgICAgICBDRklfYXJyYXlbOCdoMEZdID0gOCdoMDA7CisgICAgICAgIC8vIENGSSBRdWVyeSBJZGVudGlmaWNhdGlvbiBTdHJpbmcKKyAgICAgICAgQ0ZJX2FycmF5WzgnaDEwXSA9IDgnaDUxOworICAgICAgICBDRklfYXJyYXlbOCdoMTFdID0gOCdoNTI7CisgICAgICAgIENGSV9hcnJheVs4J2gxMl0gPSA4J2g1OTsKKyAgICAgICAgQ0ZJX2FycmF5WzgnaDEzXSA9IDgnaDAyOworICAgICAgICBDRklfYXJyYXlbOCdoMTRdID0gOCdoMDA7CisgICAgICAgIENGSV9hcnJheVs4J2gxNV0gPSA4J2g0MDsKKyAgICAgICAgQ0ZJX2FycmF5WzgnaDE2XSA9IDgnaDAwOworICAgICAgICBDRklfYXJyYXlbOCdoMTddID0gOCdoNTM7CisgICAgICAgIENGSV9hcnJheVs4J2gxOF0gPSA4J2g0NjsKKyAgICAgICAgQ0ZJX2FycmF5WzgnaDE5XSA9IDgnaDUxOworICAgICAgICBDRklfYXJyYXlbOCdoMUFdID0gOCdoMDA7CisgICAgICAgIC8vQ0ZJIHN5c3RlbSBpbnRlcmZhY2Ugc3RyaW5nCisgICAgICAgIENGSV9hcnJheVs4J2gxQl0gPSA4J2gyNzsKKyAgICAgICAgQ0ZJX2FycmF5WzgnaDFDXSA9IDgnaDM2OworICAgICAgICBDRklfYXJyYXlbOCdoMURdID0gOCdoMDA7CisgICAgICAgIENGSV9hcnJheVs4J2gxRV0gPSA4J2gwMDsKKyAgICAgICAgQ0ZJX2FycmF5WzgnaDFGXSA9IDgnaDA2OworICAgICAgICBpZiAodG1wX2NoYXIyID09ICIwIikKKyAgICAgICAgYmVnaW4KKyAgICAgICAgLy8gNjRrQiBzZWN0b3IgYW5kIDI1NkIgcGFnZQorICAgICAgICAgICAgQ0ZJX2FycmF5WzgnaDIwXSA9IDgnaDA4OworICAgICAgICAgICAgQ0ZJX2FycmF5WzgnaDIxXSA9IDgnaDA4OworICAgICAgICBlbmQKKyAgICAgICAgZWxzZSBpZiAodG1wX2NoYXIyID09ICIxIikKKyAgICAgICAgYmVnaW4KKyAgICAgICAgLy8gMjU2a0Igc2VjdG9yIGFuZCA1MTJCIHBhZ2UKKyAgICAgICAgICAgIENGSV9hcnJheVs4J2gyMF0gPSA4J2gwOTsKKyAgICAgICAgICAgIENGSV9hcnJheVs4J2gyMV0gPSA4J2gwOTsKKyAgICAgICAgZW5kCisgICAgICAgIENGSV9hcnJheVs4J2gyMl0gPSA4J2gxMDsKKyAgICAgICAgQ0ZJX2FycmF5WzgnaDIzXSA9IDgnaDAyOworICAgICAgICBDRklfYXJyYXlbOCdoMjRdID0gOCdoMDI7CisgICAgICAgIENGSV9hcnJheVs4J2gyNV0gPSA4J2gwMzsKKyAgICAgICAgQ0ZJX2FycmF5WzgnaDI2XSA9IDgnaDAzOworICAgICAgICAvLyBEZXZpY2UgR2VvbWV0cnkgRGVmaW5pdGlvbihVbmlmb3JtIFNlY3RvciBEZXZpY2VzKQorICAgICAgICBDRklfYXJyYXlbOCdoMjddID0gOCdoMTk7CisgICAgICAgIENGSV9hcnJheVs4J2gyOF0gPSA4J2gwMjsKKyAgICAgICAgQ0ZJX2FycmF5WzgnaDI5XSA9IDgnaDAxOworCisgICAgICAgIGlmICh0bXBfY2hhcjIgPT0gIjAiKQorICAgICAgICAvLyA2NGtCIHNlY3RvcnMKKyAgICAgICAgICAgIENGSV9hcnJheVs4J2gyQV0gPSA4J2gwODsKKyAgICAgICAgZWxzZSBpZiAodG1wX2NoYXIyID09ICIxIikKKyAgICAgICAgICAgIENGSV9hcnJheVs4J2gyQV0gPSA4J2gwOTsKKworICAgICAgICBDRklfYXJyYXlbOCdoMkJdID0gOCdoMDA7CisgICAgICAgIGlmICh0bXBfY2hhcjIgPT0gIjEiKQorICAgICAgICBiZWdpbgorICAgICAgICAgICAgQ0ZJX2FycmF5WzgnaDJDXSA9IDgnaDAxOworICAgICAgICAgICAgQ0ZJX2FycmF5WzgnaDJEXSA9IDgnaDdGOworICAgICAgICAgICAgQ0ZJX2FycmF5WzgnaDJFXSA9IDgnaDAwOworICAgICAgICAgICAgQ0ZJX2FycmF5WzgnaDJGXSA9IDgnaDAwOworICAgICAgICAgICAgQ0ZJX2FycmF5WzgnaDMwXSA9IDgnaDA0OworICAgICAgICAgICAgQ0ZJX2FycmF5WzgnaDMxXSA9IDgnaEZGOworICAgICAgICAgICAgQ0ZJX2FycmF5WzgnaDMyXSA9IDgnaEZGOworICAgICAgICAgICAgQ0ZJX2FycmF5WzgnaDMzXSA9IDgnaEZGOworICAgICAgICAgICAgQ0ZJX2FycmF5WzgnaDM0XSA9IDgnaEZGOworICAgICAgICBlbmQKKyAgICAgICAgZWxzZQorICAgICAgICBiZWdpbgorICAgICAgICAgICAgQ0ZJX2FycmF5WzgnaDJDXSA9IDgnaDAyOworICAgICAgICAgICAgaWYgKFRCUEFSTSkKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAvLyA0S0IgcGh5c2ljYWwgc2VjdG9ycyBhdCB0b3AKKyAgICAgICAgICAgICAgICBDRklfYXJyYXlbOCdoMkRdID0gOCdoRkQ7CisgICAgICAgICAgICAgICAgQ0ZJX2FycmF5WzgnaDJFXSA9IDgnaDAwOworICAgICAgICAgICAgICAgIENGSV9hcnJheVs4J2gyRl0gPSA4J2gwMDsKKyAgICAgICAgICAgICAgICBDRklfYXJyYXlbOCdoMzBdID0gOCdoMDE7CisgICAgICAgICAgICAgICAgQ0ZJX2FycmF5WzgnaDMxXSA9IDgnaDFGOworICAgICAgICAgICAgICAgIENGSV9hcnJheVs4J2gzMl0gPSA4J2gwMTsKKyAgICAgICAgICAgICAgICBDRklfYXJyYXlbOCdoMzNdID0gOCdoMTA7CisgICAgICAgICAgICAgICAgQ0ZJX2FycmF5WzgnaDM0XSA9IDgnaDAwOworICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgLy8gNEtCIHBoeXNpY2FsIHNlY3RvcnMgYXQgYm90dG9tCisgICAgICAgICAgICAgICAgQ0ZJX2FycmF5WzgnaDJEXSA9IDgnaDFGOworICAgICAgICAgICAgICAgIENGSV9hcnJheVs4J2gyRV0gPSA4J2gwMDsKKyAgICAgICAgICAgICAgICBDRklfYXJyYXlbOCdoMkZdID0gOCdoMTA7CisgICAgICAgICAgICAgICAgQ0ZJX2FycmF5WzgnaDMwXSA9IDgnaDAwOworICAgICAgICAgICAgICAgIENGSV9hcnJheVs4J2gzMV0gPSA4J2hGRDsKKyAgICAgICAgICAgICAgICBDRklfYXJyYXlbOCdoMzJdID0gOCdoMDE7CisgICAgICAgICAgICAgICAgQ0ZJX2FycmF5WzgnaDMzXSA9IDgnaDAwOworICAgICAgICAgICAgICAgIENGSV9hcnJheVs4J2gzNF0gPSA4J2gwMTsKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKyAgICAgICAgQ0ZJX2FycmF5WzgnaDM1XSA9IDgnaEZGOworICAgICAgICBDRklfYXJyYXlbOCdoMzZdID0gOCdoRkY7CisgICAgICAgIENGSV9hcnJheVs4J2gzN10gPSA4J2hGRjsKKyAgICAgICAgQ0ZJX2FycmF5WzgnaDM4XSA9IDgnaEZGOworICAgICAgICBDRklfYXJyYXlbOCdoMzldID0gOCdoRkY7CisgICAgICAgIENGSV9hcnJheVs4J2gzQV0gPSA4J2hGRjsKKyAgICAgICAgQ0ZJX2FycmF5WzgnaDNCXSA9IDgnaEZGOworICAgICAgICBDRklfYXJyYXlbOCdoM0NdID0gOCdoRkY7CisgICAgICAgIENGSV9hcnJheVs4J2gzRF0gPSA4J2hGRjsKKyAgICAgICAgQ0ZJX2FycmF5WzgnaDNFXSA9IDgnaEZGOworICAgICAgICBDRklfYXJyYXlbOCdoM0ZdID0gOCdoRkY7CisgICAgICAgIC8vIENGSSBQcmltYXJ5IFZlbmRvci1TcGVjaWZpYyBFeHRlbmRlZCBRdWVyeQorICAgICAgICBDRklfYXJyYXlbOCdoNDBdID0gOCdoNTA7CisgICAgICAgIENGSV9hcnJheVs4J2g0MV0gPSA4J2g1MjsKKyAgICAgICAgQ0ZJX2FycmF5WzgnaDQyXSA9IDgnaDQ5OworICAgICAgICBDRklfYXJyYXlbOCdoNDNdID0gOCdoMzE7CisgICAgICAgIENGSV9hcnJheVs4J2g0NF0gPSA4J2gzMzsKKyAgICAgICAgQ0ZJX2FycmF5WzgnaDQ1XSA9IDgnaDIxOworICAgICAgICBDRklfYXJyYXlbOCdoNDZdID0gOCdoMDI7CisgICAgICAgIENGSV9hcnJheVs4J2g0N10gPSA4J2gwMTsKKyAgICAgICAgQ0ZJX2FycmF5WzgnaDQ4XSA9IDgnaDAwOworICAgICAgICBDRklfYXJyYXlbOCdoNDldID0gOCdoMDg7CisgICAgICAgIENGSV9hcnJheVs4J2g0QV0gPSA4J2gwMDsKKyAgICAgICAgQ0ZJX2FycmF5WzgnaDRCXSA9IDgnaDAxOworICAgICAgICBDRklfYXJyYXlbOCdoNENdID0gOCdoMDA7CisgICAgICAgIENGSV9hcnJheVs4J2g0RF0gPSA4J2gwMDsKKyAgICAgICAgQ0ZJX2FycmF5WzgnaDRFXSA9IDgnaDAwOworICAgICAgICBDRklfYXJyYXlbOCdoNEZdID0gOCdoMDc7CisgICAgICAgIENGSV9hcnJheVs4J2g1MF0gPSA4J2gwMTsKKworICAgICAgICBiZWdpbgorICAgICAgICAgICAgZm9yKGk9ODA7aT49MDtpPWktMSkKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgQ0ZJX3RtcCA9IENGSV9hcnJheVs4J2gwMC1pKzgwXTsKKyAgICAgICAgICAgICAgICBmb3Ioaj03O2o+PTA7aj1qLTEpCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgQ0ZJX2FycmF5X3RtcFs4Kmkral0gPSBDRklfdG1wW2pdOworICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorCisgICAgZW5kCisKKyAgICBhbHdheXMgQChuZXh0X3N0YXRlX2V2ZW50IG9yIFBvd2VyZWRVcCBvciBSU1Qgb3IgUlNUX291dCBvcgorICAgICAgICAgICAgUlNUTmVnX2luIG9yIHJpc2luZ19lZGdlX1JTVE5lZyBvciBmYWxsaW5nX2VkZ2VfUlNUKQorICAgIGJlZ2luOiBTdGF0ZVRyYW5zaXRpb24KKyAgICAgICAgaWYgKFBvd2VyZWRVcCkKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIGlmICgoUlNUTmVnX2luID09IDEnYjEpICYmIChSU1Rfb3V0ID09IDEnYjEpKQorICAgICAgICAgICAgICAgIGN1cnJlbnRfc3RhdGUgPSAjKDEwMDApIG5leHRfc3RhdGU7CisgICAgICAgICAgICBlbHNlIGlmICgoflJTVE5lZ19pbiB8fCByaXNpbmdfZWRnZV9SU1ROZWcpICYmIGZhbGxpbmdfZWRnZV9SU1QpCisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgLy8gbm8gc3RhdGUgdHJhbnNpdGlvbiB3aGlsZSBSRVNFVCMgbG93CisgICAgICAgICAgICAgICAgY3VycmVudF9zdGF0ZSA9IFJFU0VUX1NUQVRFOworICAgICAgICAgICAgICAgIFJTVF9pbiA9IDEnYjE7CisgICAgICAgICAgICAgICAgIzEwMDAgUlNUX2luID0gMSdiMDsKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKyAgICBlbmQKKworICAgIGFsd2F5cyBAKHBvc2VkZ2UgUlNUX2luKQorICAgIGJlZ2luOlRocmVzZXQKKyAgICAgICAgUlNUX291dCA9IDEnYjA7CisgICAgICAgICMoMzUwMDAwMDAtMjAwMDAwKSBSU1Rfb3V0ID0gMSdiMTsKKyAgICBlbmQKKworICAgIGFsd2F5cyBAKG5lZ2VkZ2UgQ1NOZWdfaXBkKQorICAgIGJlZ2luOkNoZWNrQ0VPblBvd2VyVVAKKyAgICAgICAgaWYgKH5Qb3dlcmVkVXApCisgICAgICAgICAgICAkZGlzcGxheSAoIiUwdD0+IERldmljZSBpcyBzZWxlY3RlZCBkdXJpbmcgUG93ZXIgVXAiLCR0aW1lKTsKKyAgICBlbmQKKworICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgIC8vLy8gSW50ZXJuYWwgRGVsYXlzCisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgICBhbHdheXMgQChwb3NlZGdlIFBSR1NVU1BfaW4pCisgICAgYmVnaW46UFJHU3VzcGVuZAorICAgICAgICBQUkdTVVNQX291dCA9IDEnYjA7CisgICAgICAgICN0ZGV2aWNlX1BSR1NVU1AgUFJHU1VTUF9vdXQgPSAxJ2IxOworICAgIGVuZAorCisgICAgYWx3YXlzIEAocG9zZWRnZSBQUEJFUkFTRV9pbikKKyAgICBiZWdpbjpQUEJFcnMKKyAgICAgICAgUFBCRVJBU0Vfb3V0ID0gMSdiMDsKKyAgICAgICAgI3RkZXZpY2VfUFBCRVJBU0UgUFBCRVJBU0Vfb3V0ID0gMSdiMTsKKyAgICBlbmQKKworICAgIGFsd2F5cyBAKHBvc2VkZ2UgRVJTU1VTUF9pbikKKyAgICBiZWdpbjpFUlNTdXNwZW5kCisgICAgICAgIEVSU1NVU1Bfb3V0ID0gMSdiMDsKKyAgICAgICAgI3RkZXZpY2VfRVJTU1VTUCBFUlNTVVNQX291dCA9IDEnYjE7CisgICAgZW5kCisKKyAgICBhbHdheXMgQChwb3NlZGdlIFBBU1NVTENLX2luKQorICAgIGJlZ2luOlBBU1NVTG9jaworICAgICAgICBQQVNTVUxDS19vdXQgPSAxJ2IwOworICAgICAgICAjdGRldmljZV9QQVNTVUxDSyBQQVNTVUxDS19vdXQgPSAxJ2IxOworICAgIGVuZAorCisgICAgYWx3YXlzIEAocG9zZWRnZSBQQVNTQUNDX2luKQorICAgIGJlZ2luOlBBU1NBY2MKKyAgICAgICAgUEFTU0FDQ19vdXQgPSAxJ2IwOworICAgICAgICAjdGRldmljZV9QQVNTQUNDIFBBU1NBQ0Nfb3V0ID0gMSdiMTsKKyAgICBlbmQKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gd3JpdGUgY3ljbGUgZGVjb2RlCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgaW50ZWdlciBvcGNvZGVfY250ID0gMDsKKyAgICBpbnRlZ2VyIGFkZHJfY250ICAgPSAwOworICAgIGludGVnZXIgbW9kZV9jbnQgICA9IDA7CisgICAgaW50ZWdlciBkdW1teV9jbnQgID0gMDsKKyAgICBpbnRlZ2VyIGRhdGFfY250ICAgPSAwOworICAgIGludGVnZXIgYml0X2NudCAgICA9IDA7CisKKyAgICByZWcgWzQwOTU6MF0gRGF0YV9pbiA9IDQwOTYnYjA7CisgICAgcmVnIFs3OjBdIG9wY29kZTsKKyAgICByZWcgWzc6MF0gb3Bjb2RlX2luOworICAgIHJlZyBbNzowXSBvcGNvZGVfdG1wOworICAgIHJlZyBbMzE6MF0gYWRkcl9ieXRlczsKKyAgICByZWcgWzMxOjBdIGhpYWRkcl9ieXRlczsKKyAgICByZWcgWzMxOjBdIEFkZHJlc3NfaW47CisgICAgcmVnIFs3OjBdIG1vZGVfYnl0ZXM7CisgICAgcmVnIFs3OjBdIG1vZGVfaW47CisgICAgaW50ZWdlciBMYXRlbmN5X2NvZGU7CisgICAgaW50ZWdlciBxdWFkX2RhdGFfaW4gWzA6MTAyM107CisgICAgcmVnIFszOjBdIHF1YWRfbnliYmxlID0gNCdiMDsKKyAgICByZWcgWzM6MF0gUXVhZF9zbHY7CisgICAgcmVnIFs3OjBdIEJ5dGVfc2x2OworCisgICBhbHdheXMgQChyaXNpbmdfZWRnZV9DU05lZ19pcGQgb3IgZmFsbGluZ19lZGdlX0NTTmVnX2lwZCBvcgorICAgICAgICAgICAgcmlzaW5nX2VkZ2VfU0NLX2lwZCBvciBmYWxsaW5nX2VkZ2VfU0NLX2lwZCBvcgorICAgICAgICAgICAgY3VycmVudF9zdGF0ZSkKKyAgIGJlZ2luOiBCdXNjeWNsZQorICAgICAgICBpbnRlZ2VyIGk7CisgICAgICAgIGludGVnZXIgajsKKyAgICAgICAgaW50ZWdlciBrOworICAgICAgICB0aW1lIENMS19QRVI7CisgICAgICAgIHRpbWUgTEFTVF9DTEs7CisKKyAgICAgICAgaWYgKGN1cnJlbnRfc3RhdGUgPT0gUkVTRVRfU1RBVEUpCisgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBTVEFORF9CWTsKKyAgICAgICAgZWxzZQorICAgICAgICBiZWdpbgorICAgICAgICAgICAgaWYgKGZhbGxpbmdfZWRnZV9DU05lZ19pcGQpCisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgIGlmIChidXNfY3ljbGVfc3RhdGU9PVNUQU5EX0JZKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID0gTk9ORTsKKyAgICAgICAgICAgICAgICAgICAgd3JpdGUgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICBjZmdfd3JpdGUgID0gMDsKKyAgICAgICAgICAgICAgICAgICAgb3Bjb2RlX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGFkZHJfY250ICAgPSAwOworICAgICAgICAgICAgICAgICAgICBtb2RlX2NudCAgID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZHVtbXlfY250ICA9IDA7CisgICAgICAgICAgICAgICAgICAgIGRhdGFfY250ICAgPSAwOworICAgICAgICAgICAgICAgICAgICBvcGNvZGVfdG1wID0gMDsKKyAgICAgICAgICAgICAgICAgICAgc3RhcnRfZGxwICA9IDA7CisgICAgICAgICAgICAgICAgICAgIERPVUJMRSAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICBRVUFEUkQgICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgQ0xLX1BFUiAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgIExBU1RfQ0xLICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudF9zdGF0ZSA9PSBBVVRPQk9PVCkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERBVEFfQllURVM7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBPUENPREVfQllURTsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgaWYgKHJpc2luZ19lZGdlX1NDS19pcGQpIC8vIEluc3RydWN0aW9ucywgYWRkcmVzc2VzIG9yIGRhdGEgcHJlc2VudAorICAgICAgICAgICAgYmVnaW4gICAgICAgICAgICAgICAgICAgIC8vIGF0IFNJIGFyZSBsYXRjaGVkIG9uIHRoZSByaXNpbmcgZWRnZSBvZiBTQ0sKKworICAgICAgICAgICAgICAgIENMS19QRVIgPSAkdGltZSAtIExBU1RfQ0xLOworICAgICAgICAgICAgICAgIExBU1RfQ0xLID0gJHRpbWU7CisgICAgICAgICAgICAgICAgaWYgKENIRUNLX0ZSRVEpCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgaWYgKChDTEtfUEVSIDwgMjAwMDAgJiYgTGF0ZW5jeV9jb2RlID09IDMpIHx8CisgICAgICAgICAgICAgICAgICAgIChDTEtfUEVSIDwgMTI1MDAgJiYgTGF0ZW5jeV9jb2RlID09IDApIHx8CisgICAgICAgICAgICAgICAgICAgIChDTEtfUEVSIDwgMTExMDAgJiYgTGF0ZW5jeV9jb2RlID09IDEpIHx8CisgICAgICAgICAgICAgICAgICAgIChDTEtfUEVSIDwgOTYwMCAmJiBMYXRlbmN5X2NvZGUgPT0gMikpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIk1vcmUgd2FpdCBzdGF0ZXMgYXJlIHJlcXVpcmVkIGZvciIpOworICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJ0aGlzIGNsb2NrIGZyZXF1ZW5jeSB2YWx1ZSIpOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgaWYgKEluc3RydWN0ID09IEREUkZSIHx8IEluc3RydWN0ID09IEREUkZSNCB8fCBJbnN0cnVjdCA9PSBERFJESU9SIHx8CisgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9PSBERFJESU9SNCB8fCBJbnN0cnVjdCA9PSBERFJRSU9SIHx8IEluc3RydWN0ID09IEREUlFJT1I0KQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICBpZiAgIChDTEtfUEVSIDwgMTI1MDApCisgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICBkZHI4MCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICBkZHI4MCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgQ0hFQ0tfRlJFUSA9IDA7CisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBpZiAofkNTTmVnX2lwZCkKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBjYXNlIChidXNfY3ljbGVfc3RhdGUpCisgICAgICAgICAgICAgICAgICAgICAgICBPUENPREVfQllURToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChIT0xETmVnX2luICYmIH5RVUFEKSB8fCBRVUFEKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wY29kZV9pbltvcGNvZGVfY250XSA9IFNJX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGNvZGVfY250ID0gb3Bjb2RlX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhdGVuY3lfY29kZSA9IENvbmZpZ19yZWcxWzc6Nl07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcGNvZGVfY250ID09IEJZVEUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IoaT03O2k+PTA7aT1pLTEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wY29kZVtpXSA9IG9wY29kZV9pbls3LWldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIChvcGNvZGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCdiMDAwMDAxMTAgOiAvLyAwNmgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IFdSRU47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERBVEFfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCdiMDAwMDAxMDAgOiAvLyAwNGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IFdSREk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERBVEFfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCdiMDAwMDAwMDEgOiAvLyAwMWgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IFdSUjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gREFUQV9CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4J2IwMDAwMDAxMSA6IC8vIDAzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID0gUkVBRDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gQUREUkVTU19CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4J2IwMDAxMDAxMSA6IC8vIDEzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID0gUkQ0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBBRERSRVNTX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjAxMDAxMDExIDogLy8gNEJoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBPVFBSOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBBRERSRVNTX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjAwMDAwMTAxIDogLy8gMDVoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBSRFNSOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBEQVRBX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjAwMDAwMTExIDogLy8gMDdoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBSRFNSMjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gREFUQV9CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4J2IwMDExMDEwMSA6IC8vIDM1aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID0gUkRDUjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gREFUQV9CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4J2IxMDAxMDAwMCA6IC8vIDkwaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID0gUkVNUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gQUREUkVTU19CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4J2IxMDAxMTExMSA6IC8vIDlGaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID0gUkRJRDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gREFUQV9CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4J2IxMDEwMTAxMSA6IC8vIEFCaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID0gUkVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBEVU1NWV9CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4J2IwMDAwMTAxMSA6IC8vIDBCaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID0gRlNUUkQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IEFERFJFU1NfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIRUNLX0ZSRVEgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjAwMDAxMTAwIDogLy8gMENoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBGU1RSRDQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IEFERFJFU1NfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIRUNLX0ZSRVEgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjAwMDAxMTAxIDogLy8gMERoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBERFJGUjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gQUREUkVTU19CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hFQ0tfRlJFUSA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCdiMDAwMDExMTAgOiAvLyAwRWgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IEREUkZSNDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gQUREUkVTU19CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hFQ0tfRlJFUSA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCdiMDAxMTEwMTEgOiAvLyAzQmgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IERPUjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gQUREUkVTU19CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hFQ0tfRlJFUSA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCdiMDAxMTExMDAgOiAvLyAzQ2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IERPUjQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IEFERFJFU1NfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIRUNLX0ZSRVEgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjEwMTExMDExIDogLy8gQkJoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBESU9SOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBBRERSRVNTX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSEVDS19GUkVRID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4J2IxMDExMTEwMCA6IC8vIEJDaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID0gRElPUjQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IEFERFJFU1NfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIRUNLX0ZSRVEgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjEwMTExMTAxIDogLy8gQkRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBERFJESU9SOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBBRERSRVNTX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSEVDS19GUkVRID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4J2IxMDExMTExMCA6IC8vIEJFaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID0gRERSRElPUjQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IEFERFJFU1NfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIRUNLX0ZSRVEgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjAxMTAxMDExIDogLy8gNkJoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBRT1I7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IEFERFJFU1NfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIRUNLX0ZSRVEgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjAxMTAxMTAwIDogLy8gNkNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBRT1I0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBBRERSRVNTX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSEVDS19GUkVRID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4J2IxMTEwMTAxMSA6IC8vIEVCaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID0gUUlPUjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gQUREUkVTU19CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hFQ0tfRlJFUSA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCdiMTExMDExMDAgOiAvLyBFQ2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IFFJT1I0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBBRERSRVNTX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSEVDS19GUkVRID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4J2IxMTEwMTEwMSA6IC8vIEVEaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID0gRERSUUlPUjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gQUREUkVTU19CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hFQ0tfRlJFUSA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCdiMTExMDExMTAgOiAvLyBFRWgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IEREUlFJT1I0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBBRERSRVNTX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSEVDS19GUkVRID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4J2IwMDAwMDAxMCA6IC8vIDAyaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID0gUFA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IEFERFJFU1NfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCdiMDAwMTAwMTAgOiAvLyAxMmgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IFBQNDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gQUREUkVTU19CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4J2IwMDExMDAxMDogLy8gMzJoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBRUFA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IEFERFJFU1NfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1YWRfcGcgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjAwMTExMDAwOiAvLyAzOGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IFFQUDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gQUREUkVTU19CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhZF9wZyA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCdiMDAxMTAxMDAgOiAvLyAzNGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IFFQUDQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IEFERFJFU1NfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1YWRfcGcgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjAxMDAwMDEwIDogLy8gNDJoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBPVFBQOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBBRERSRVNTX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjEwMDAwMTAxIDogLy8gODVoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBQR1NQOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBEQVRBX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjEwMDAxMDEwIDogLy8gOEFoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBQR1JTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBEQVRBX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjExMDAwMTExIDogLy8gQzdoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBCRTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gREFUQV9CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4J2IwMTEwMDAwMCA6IC8vIDYwaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID0gQkU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERBVEFfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCdiMTEwMTEwMDAgOiAvLyBEOGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IFNFOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBBRERSRVNTX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjExMDExMTAwIDogLy8gRENoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBTRTQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IEFERFJFU1NfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCdiMDExMTAxMDEgOiAvLyA3NWgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IEVSU1A7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERBVEFfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCdiMDExMTEwMTAgOiAvLyA3QWgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IEVSUlM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERBVEFfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCdiMDAwMTAxMDAgOiAvLyAxNGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IEFCUkQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERBVEFfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCdiMDAwMTAxMDEgOiAvLyAxNWgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IEFCV1I7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERBVEFfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCdiMDAwMTAxMTAgOiAvLyAxNmgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IEJSUkQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERBVEFfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCdiMDAwMTAxMTEgOiAvLyAxN2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IEJSV1I7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERBVEFfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCdiMDAxMDEwMTEgOiAvLyAyQmgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IEFTUFJEOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBEQVRBX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjAwMTAxMTExIDogLy8gMkZoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBBU1BQOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBEQVRBX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjExMTAwMDAwIDogLy8gRTBoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBEWUJSRDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gQUREUkVTU19CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4J2IxMTEwMDAwMSA6IC8vIEUxaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID0gRFlCV1I7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IEFERFJFU1NfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCdiMTExMDAwMTAgOiAvLyBFMmgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IFBQQlJEOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBBRERSRVNTX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjExMTAwMDExIDogLy8gRTNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBQUEJQOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBBRERSRVNTX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjExMTAwMTAwIDogLy8gRTRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBQUEJFUlM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERBVEFfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCdiMTAxMDAxMTAgOiAvLyBBNmgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IFBMQldSOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBEQVRBX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjEwMTAwMTExIDogLy8gQTdoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBQTEJSRDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gREFUQV9CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4J2IxMTEwMDExMSA6IC8vIEU3aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID0gUEFTU1JEOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBEQVRBX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjExMTAxMDAwIDogLy8gRThoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBQQVNTUDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gREFUQV9CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4J2IxMTEwMTAwMSA6IC8vIEU5aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID0gUEFTU1U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERBVEFfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCdiMTExMTAwMDAgOiAvLyBGMGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IFJFU0VUOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBEQVRBX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjAwMTEwMDAwIDogLy8gMzBoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBDTFNSOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBEQVRBX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjAwMTAwMDAwIDogLy8gMjBoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBQNEU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IEFERFJFU1NfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCdiMDAxMDAwMDEgOiAvLyAyMWgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IFA0RTQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IEFERFJFU1NfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCdiMDEwMDAwMDEgOiAvLyA0MWgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IERMUFJEOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBEQVRBX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjAxMDAwMDExIDogLy8gNDNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBQTlZETFI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERBVEFfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCdiMDEwMDEwMTAgOiAvLyA0QWgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9IFdWRExSOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBEQVRBX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjEwMTExMDAxIDogLy8gQjloCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBCUkFDOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBEQVRBX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgnYjExMTExMTExIDogLy8gRkZoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPSBNQlI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IE1PREVfQllURTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4J2IwMDAxMTAwMCA6IC8vIDE4aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID0gRUNDUkQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IEFERFJFU1NfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRjYXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kIC8vZW5kIG9mIE9QQ09ERSBCWVRFCisKKyAgICAgICAgICAgICAgICAgICAgICAgIEFERFJFU1NfQllURVMgOgorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEluc3RydWN0ID09IEREUkZSKSAgfHwgKEluc3RydWN0ID09IEREUkZSNCkgIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChJbnN0cnVjdCA9PSBERFJESU9SKSB8fCAoSW5zdHJ1Y3QgPT0gRERSRElPUjQpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChJbnN0cnVjdCA9PSBERFJRSU9SKSB8fCAoSW5zdHJ1Y3QgPT0gRERSUUlPUjQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBET1VCTEUgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRE9VQkxFID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEluc3RydWN0ID09IFFPUikgIHx8IChJbnN0cnVjdCA9PSBRT1I0KSAgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEluc3RydWN0ID09IFFJT1IpIHx8IChJbnN0cnVjdCA9PSBRSU9SNCkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEluc3RydWN0ID09IEREUlFJT1IpIHx8IChJbnN0cnVjdCA9PSBERFJRSU9SNCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVQURSRCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUFEUkQgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChET1VCTEUgPT0gMSdiMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKCgoKEluc3RydWN0ID09IEZTVFJEKSAmJiAofkVYVEFERCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSW5zdHJ1Y3QgPT0gRE9SKSAgJiYgKH5FWFRBREQpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSW5zdHJ1Y3QgPT0gT1RQUikpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSE9MRE5lZ19pbiAmJiB+UVVBRCkgfHwgUVVBRCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSW5zdHJ1Y3QgPT0gUU9SKSAmJiBRVUFEICYmICh+RVhUQUREKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vSW5zdHJ1Y3Rpb24gKyAzIEJ5dGVzIEFkZHJlc3MgKyBEdW1teSBCeXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzX2luW2FkZHJfY250XSA9IFNJX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcl9jbnQgPSBhZGRyX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWRkcl9jbnQgPT0gMypCWVRFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IoaT0yMztpPj0wO2k9aS0xKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfYnl0ZXNbMjMtaV0gPSBBZGRyZXNzX2luW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfYnl0ZXNbMzE6MjVdID0gNydiMDAwMDAwMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX2J5dGVzWzI0XSA9IEJhbmtfQWRkcl9yZWdbMF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzcyA9IGFkZHJfYnl0ZXMgOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZV9hZGRyID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjMSBjaGFuZ2VfYWRkciA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEluc3RydWN0PT1GU1RSRCB8fCBJbnN0cnVjdD09RE9SIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID09IFFPUikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTGF0ZW5jeV9jb2RlID09IDMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBEQVRBX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBEVU1NWV9CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERVTU1ZX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdD09RUNDUkQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vSW5zdHJ1Y3Rpb24gKyA0IEJ5dGVzIEFkZHJlc3MgKyBEdW1teSBCeXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzX2luW2FkZHJfY250XSA9IFNJX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcl9jbnQgPSBhZGRyX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWRkcl9jbnQgPT0gNCpCWVRFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IoaT0zMTtpPj0wO2k9aS0xKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpYWRkcl9ieXRlc1szMS1pXSA9IEFkZHJlc3NfaW5baV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9IaWdoIG9yZGVyIGFkZHJlc3MgYml0cyBhcmUgaWdub3JlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3MgPSB7aGlhZGRyX2J5dGVzWzMxOjRdLDQnYjAwMDB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZV9hZGRyID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjMSBjaGFuZ2VfYWRkciA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gRFVNTVlfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCgoKEluc3RydWN0PT1GU1RSRDQpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEluc3RydWN0PT1ET1I0KSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSW5zdHJ1Y3Q9PUZTVFJEKSAmJiBFWFRBREQpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJbnN0cnVjdD09RE9SKSAmJiBFWFRBREQpKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSE9MRE5lZ19pbiAmJiB+UVVBRCkgfHwgUVVBRCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJbnN0cnVjdD09UU9SNCkgJiYgUVVBRCkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEluc3RydWN0PT1RT1IpICYmIFFVQUQgJiYgRVhUQUREKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9JbnN0cnVjdGlvbiArIDQgQnl0ZXMgQWRkcmVzcyArIER1bW15IEJ5dGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3NfaW5bYWRkcl9jbnRdID0gU0lfaW47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX2NudCA9IGFkZHJfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhZGRyX2NudCA9PSA0KkJZVEUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihpPTMxO2k+PTA7aT1pLTEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlhZGRyX2J5dGVzWzMxLWldID0gQWRkcmVzc19pbltpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0hpZ2ggb3JkZXIgYWRkcmVzcyBiaXRzIGFyZSBpZ25vcmVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzcyA9IHs3J2IwMDAwMDAwLGhpYWRkcl9ieXRlc1syNDowXX07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlX2FkZHIgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMxIGNoYW5nZV9hZGRyID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTGF0ZW5jeV9jb2RlID09IDMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERBVEFfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERVTU1ZX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgoSW5zdHJ1Y3Q9PURJT1IpICYmICh+RVhUQUREKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEhPTEROZWdfaW4gJiYgflFVQUQpIHx8IFFVQUQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0RVQUwgSS9PIEhpZ2ggUGVyZm9ybWFuY2UgUmVhZCgzIEJ5dGVzIEFkZHIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzX2luWzIqYWRkcl9jbnRdICAgICA9IFNPX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzc19pblsyKmFkZHJfY250ICsgMV0gPSBTSV9pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfY250ID0gYWRkcl9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFkZHJfY250ID09IDMqQllURS8yKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGk9MjM7aT49MDtpPWktMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX2J5dGVzWzIzLWldPUFkZHJlc3NfaW5baV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcl9ieXRlc1szMToyNV0gPSA3J2IwMDAwMDAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfYnl0ZXNbMjRdID0gQmFua19BZGRyX3JlZ1swXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzID0gYWRkcl9ieXRlczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VfYWRkciA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIzEgY2hhbmdlX2FkZHIgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChFSFApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IE1PREVfQllURTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERVTU1ZX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgoKEluc3RydWN0PT1ESU9SNCkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEluc3RydWN0PT1ESU9SKSAmJiBFWFRBREQpKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSE9MRE5lZ19pbiAmJiB+UVVBRCkgfHwgUVVBRCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luIC8vRFVBTCBJL08gSGlnaCBQZXJmb3JtYW5jZSBSZWFkKDRCeXRlcyBBZGRyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzc19pblsyKmFkZHJfY250XSAgICAgPSBTT19pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3NfaW5bMiphZGRyX2NudCArIDFdID0gU0lfaW47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX2NudCA9IGFkZHJfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhZGRyX2NudCA9PSA0KkJZVEUvMikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcl9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihpPTMxO2k+PTA7aT1pLTEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcl9ieXRlc1szMS1pXSA9IEFkZHJlc3NfaW5baV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzcyA9IHs3J2IwMDAwMDAwLGFkZHJfYnl0ZXNbMjQ6MF19OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZV9hZGRyID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjMSBjaGFuZ2VfYWRkciA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEVIUCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gTU9ERV9CWVRFOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gRFVNTVlfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKChJbnN0cnVjdCA9PSBRSU9SKSAmJiAofkVYVEFERCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vUVVBRCBJL08gSGlnaCBQZXJmb3JtYW5jZSBSZWFkICgzQnl0ZXMgQWRkcmVzcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChRVUFEKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzX2luWzQqYWRkcl9jbnRdID0gSE9MRE5lZ19pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzX2luWzQqYWRkcl9jbnQrMV0gPSBXUE5lZ19pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzX2luWzQqYWRkcl9jbnQrMl0gPSBTT19pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzX2luWzQqYWRkcl9jbnQrM10gPSBTSV9pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcl9jbnQgPSBhZGRyX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFkZHJfY250ID09IDMqQllURS80KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGk9MjM7aT49MDtpPWktMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfYnl0ZXNbMjMtaV0gPSBBZGRyZXNzX2luW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcl9ieXRlc1szMToyNV0gPSA3J2IwMDAwMDAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX2J5dGVzWzI0XSA9IEJhbmtfQWRkcl9yZWdbMF07CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzcyA9IGFkZHJfYnl0ZXM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZV9hZGRyID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIzEgY2hhbmdlX2FkZHIgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBNT0RFX0JZVEU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBTVEFORF9CWTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKChJbnN0cnVjdD09UUlPUjQpIHx8ICgoSW5zdHJ1Y3Q9PVFJT1IpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgRVhUQUREKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vUVVBRCBJL08gSGlnaCBQZXJmb3JtYW5jZSBSZWFkICg0Qnl0ZXMgQWRkcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChRVUFEKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzX2luWzQqYWRkcl9jbnRdID0gSE9MRE5lZ19pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzX2luWzQqYWRkcl9jbnQrMV0gPSBXUE5lZ19pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzX2luWzQqYWRkcl9jbnQrMl0gPSBTT19pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzX2luWzQqYWRkcl9jbnQrM10gPSBTSV9pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcl9jbnQgPSBhZGRyX2NudCArMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWRkcl9jbnQgPT0gNCpCWVRFLzQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcl9jbnQgPTA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihpPTMxO2k+PTA7aT1pLTEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWFkZHJfYnl0ZXNbMzEtaV0gPSBBZGRyZXNzX2luW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9IaWdoIG9yZGVyIGFkZHJlc3MgYml0cyBhcmUgaWdub3JlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzID0gezcnYjAwMDAwMDAsaGlhZGRyX2J5dGVzWzI0OjBdfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlX2FkZHIgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjMSBjaGFuZ2VfYWRkciA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IE1PREVfQllURTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IFNUQU5EX0JZOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKCgoSW5zdHJ1Y3Q9PVJENCkgfHwgKEluc3RydWN0PT1QUDQpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEluc3RydWN0PT1TRTQpIHx8KEluc3RydWN0PT1QUEJSRCkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSW5zdHJ1Y3Q9PURZQlJEKSB8fChJbnN0cnVjdD09RFlCV1IpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEluc3RydWN0PT1QUEJQKSB8fCAoSW5zdHJ1Y3Q9PVA0RTQpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJbnN0cnVjdD09UkVBRCkgJiYgRVhUQUREKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSW5zdHJ1Y3Q9PVBQKSAmJiBFWFRBREQpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJbnN0cnVjdD09UDRFKSAmJiBFWFRBREQpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJbnN0cnVjdD09U0UpICYmIEVYVEFERCkpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChIT0xETmVnX2luICYmIH5RVUFEKSB8fCBRVUFEKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUVVBRCAmJiAoSW5zdHJ1Y3Q9PVFQUDQgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEluc3RydWN0PT1RUFApICYmIEVYVEFERCkpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3NfaW5bYWRkcl9jbnRdID0gU0lfaW47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX2NudCA9IGFkZHJfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhZGRyX2NudCA9PSA0KkJZVEUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihpPTMxO2k+PTA7aT1pLTEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlhZGRyX2J5dGVzWzMxLWldID0gQWRkcmVzc19pbltpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0hpZ2ggb3JkZXIgYWRkcmVzcyBiaXRzIGFyZSBpZ25vcmVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzcyA9IHs3J2IwMDAwMDAwLGhpYWRkcl9ieXRlc1syNDowXX07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlX2FkZHIgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMxIGNoYW5nZV9hZGRyID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBEQVRBX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgoKEhPTEROZWdfaW4gJiYgflFVQUQpIHx8IFFVQUQpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKH5FWFRBREQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzc19pblthZGRyX2NudF0gPSBTSV9pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfY250ID0gYWRkcl9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFkZHJfY250ID09IDMqQllURSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGk9MjM7aT49MDtpPWktMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX2J5dGVzWzIzLWldID0gQWRkcmVzc19pbltpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX2J5dGVzWzMxOjI1XSA9IDcnYjAwMDAwMDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcl9ieXRlc1syNF0gPSBCYW5rX0FkZHJfcmVnWzBdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3MgPSBhZGRyX2J5dGVzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZV9hZGRyID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjMSBjaGFuZ2VfYWRkciA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gREFUQV9CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChJbnN0cnVjdD09RERSRlIpICYmICh+RVhUQUREKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9GYXN0IEREUiBSZWFkIE1vZGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3NfaW5bYWRkcl9jbnRdID0gU0lfaW47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGFkZHJfY250LzIpIDw9IDE2KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGNvZGVfdG1wW2FkZHJfY250LzJdID0gU0lfaW47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfY250ID0gYWRkcl9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKEluc3RydWN0PT1ERFJGUjQpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJbnN0cnVjdD09RERSRlIpICYmIEVYVEFERCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzX2luW2FkZHJfY250XSA9IFNJX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChhZGRyX2NudC8yKSA8PSAxNikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3Bjb2RlX3RtcFthZGRyX2NudC8yXSA9IFNJX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX2NudCA9IGFkZHJfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKChJbnN0cnVjdCA9PSBERFJESU9SKSAmJiAofkVYVEFERCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luICAgIC8vRHVhbCBJL08gRERSIFJlYWQgTW9kZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzc19pblsyKmFkZHJfY250XSA9IFNPX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzc19pblsyKmFkZHJfY250KzFdPSBTSV9pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoYWRkcl9jbnQvMikgPD0gMTYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wY29kZV90bXBbYWRkcl9jbnQvMl0gPSBTSV9pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcl9jbnQgPSBhZGRyX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgoSW5zdHJ1Y3Q9PUREUkRJT1I0KSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSW5zdHJ1Y3Q9PUREUkRJT1IpICYmIEVYVEFERCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luICAgIC8vRHVhbCBJL08gRERSIFJlYWQgTW9kZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzc19pblsyKmFkZHJfY250XSAgID0gU09faW47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzX2luWzIqYWRkcl9jbnQrMV0gPSBTSV9pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoYWRkcl9jbnQvMikgPD0gMTYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wY29kZV90bXBbYWRkcl9jbnQvMl0gPSBTSV9pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcl9jbnQgPSBhZGRyX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgoSW5zdHJ1Y3Q9PUREUlFJT1IpICYmICh+RVhUQUREKSAmJiBRVUFEKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbiAgICAvL1F1YWQgSS9PIEREUiBSZWFkIE1vZGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3NfaW5bNCphZGRyX2NudF0gPSBIT0xETmVnX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzc19pbls0KmFkZHJfY250KzFdID0gV1BOZWdfaW47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzX2luWzQqYWRkcl9jbnQrMl0gPSBTT19pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3NfaW5bNCphZGRyX2NudCszXSA9IFNJX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3Bjb2RlX3RtcFthZGRyX2NudC8yXSA9IFNJX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcl9jbnQgPSBhZGRyX2NudCArMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKFFVQUQgJiYgKChJbnN0cnVjdD09RERSUUlPUjQpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJbnN0cnVjdD09RERSUUlPUikgJiYgRVhUQUREKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzX2luWzQqYWRkcl9jbnRdID0gSE9MRE5lZ19pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3NfaW5bNCphZGRyX2NudCsxXSA9IFdQTmVnX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzc19pbls0KmFkZHJfY250KzJdID0gU09faW47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzX2luWzQqYWRkcl9jbnQrM10gPSBTSV9pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wY29kZV90bXBbYWRkcl9jbnQvMl0gPSBTSV9pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfY250ID0gYWRkcl9jbnQgKzE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgICAgIE1PREVfQllURSA6CisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoKEluc3RydWN0PT1ESU9SKSB8fCAoSW5zdHJ1Y3QgPT0gRElPUjQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoKEhPTEROZWdfaW4gJiYgflFVQUQpIHx8IFFVQUQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVfaW5bMiptb2RlX2NudF0gPSBTT19pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZV9pblsyKm1vZGVfY250KzFdID0gU0lfaW47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVfY250ID0gbW9kZV9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobW9kZV9jbnQgPT0gQllURS8yKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZV9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGk9NztpPj0wO2k9aS0xKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlX2J5dGVzW2ldID0gbW9kZV9pbls3LWldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTGF0ZW5jeV9jb2RlID09IDAgfHwgTGF0ZW5jeV9jb2RlID09IDMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gREFUQV9CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBEVU1NWV9CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKChJbnN0cnVjdD09UUlPUikgfHwgKEluc3RydWN0ID09IFFJT1I0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIFFVQUQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZV9pbls0Km1vZGVfY250XSA9IEhPTEROZWdfaW47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVfaW5bNCptb2RlX2NudCsxXSA9IFdQTmVnX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlX2luWzQqbW9kZV9jbnQrMl0gPSBTT19pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZV9pbls0Km1vZGVfY250KzNdID0gU0lfaW47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVfY250ID0gbW9kZV9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobW9kZV9jbnQgPT0gQllURS80KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZV9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGk9NztpPj0wO2k9aS0xKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlX2J5dGVzW2ldID0gbW9kZV9pbls3LWldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBEVU1NWV9CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKEluc3RydWN0ID09IEREUkZSKSB8fCAoSW5zdHJ1Y3QgPT0gRERSRlI0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZV9pblsyKm1vZGVfY250XSA9IFNJX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKChJbnN0cnVjdD09RERSRElPUikgfHwgKEluc3RydWN0PT1ERFJESU9SNCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZV9pbls0Km1vZGVfY250XSAgID0gU09faW47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVfaW5bNCptb2RlX2NudCsxXSA9IFNJX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCgoSW5zdHJ1Y3Q9PUREUlFJT1IpIHx8IChJbnN0cnVjdCA9PSBERFJRSU9SNCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBRVUFEKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVfaW5bMF0gPSBIT0xETmVnX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlX2luWzFdID0gV1BOZWdfaW47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVfaW5bMl0gPSBTT19pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZV9pblszXSA9IFNJX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1bW15X2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgICAgICAgICAgRFVNTVlfQllURVMgOgorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXR1cm5fRExQKEluc3RydWN0LCBFSFAsIExhdGVuY3lfY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1bW15X2NudCwgc3RhcnRfZGxwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoRE9VQkxFID09IDEnYjEgJiYgKGhvbGRfbW9kZT09MCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVkRMUl9yZWcgIT0gOCdiMDAwMDAwMDApICYmIHN0YXJ0X2RscCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX291dCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMxMCByZWFkX291dCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgoKEluc3RydWN0PT1GU1RSRCkgfHwgKEluc3RydWN0PT1GU1RSRDQpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEluc3RydWN0PT1ET1IpICB8fCAoSW5zdHJ1Y3Q9PURPUjQpICB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChJbnN0cnVjdD09T1RQUikpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChIT0xETmVnX2luICYmIH5RVUFEKSB8fCBRVUFEKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChJbnN0cnVjdD09UU9SKXx8KEluc3RydWN0PT1RT1I0KSkgJiYgUVVBRCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVtbXlfY250ID0gZHVtbXlfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGR1bW15X2NudCA9PSBCWVRFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gREFUQV9CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgoSW5zdHJ1Y3Q9PUREUkZSKSB8fCAoSW5zdHJ1Y3Q9PUREUkZSNCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVtbXlfY250ID0gZHVtbXlfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEVIUCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoKExhdGVuY3lfY29kZSA9PSAzKSAmJiAoZHVtbXlfY250PT0xKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKExhdGVuY3lfY29kZSA9PSAwKSAmJiAoZHVtbXlfY250PT0yKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKExhdGVuY3lfY29kZSA9PSAxKSAmJiAoZHVtbXlfY250PT00KSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKExhdGVuY3lfY29kZSA9PSAyKSAmJiAoZHVtbXlfY250PT01KSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERBVEFfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoKExhdGVuY3lfY29kZSA9PSAzKSAmJiAoZHVtbXlfY250PT00KSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKExhdGVuY3lfY29kZSA9PSAwKSAmJiAoZHVtbXlfY250PT01KSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKExhdGVuY3lfY29kZSA9PSAxKSAmJiAoZHVtbXlfY250PT02KSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKExhdGVuY3lfY29kZSA9PSAyKSAmJiAoZHVtbXlfY250PT03KSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERBVEFfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3Q9PVJFUykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdW1teV9jbnQgPSBkdW1teV9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZHVtbXlfY250ID09IDMqQllURSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gREFUQV9CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdD09RUNDUkQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVtbXlfY250ID0gZHVtbXlfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGR1bW15X2NudCA9PSBCWVRFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBEQVRBX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKChJbnN0cnVjdCA9PSBESU9SKSB8fCAoSW5zdHJ1Y3QgPT0gRElPUjQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoKEhPTEROZWdfaW4gJiYgflFVQUQpIHx8IFFVQUQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1bW15X2NudCA9IGR1bW15X2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChFSFApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKChMYXRlbmN5X2NvZGUgPT0gMSkgJiYgKGR1bW15X2NudD09MSkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChMYXRlbmN5X2NvZGUgPT0gMikgJiYgKGR1bW15X2NudD09MikpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERBVEFfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKChMYXRlbmN5X2NvZGUgPT0gMykgJiYgKGR1bW15X2NudD09NCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChMYXRlbmN5X2NvZGUgPT0gMCkgJiYgKGR1bW15X2NudD09NCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChMYXRlbmN5X2NvZGUgPT0gMSkgJiYgKGR1bW15X2NudD09NSkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChMYXRlbmN5X2NvZGUgPT0gMikgJiYgKGR1bW15X2NudD09NikpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERBVEFfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKChJbnN0cnVjdD09RERSRElPUikgfHwgKEluc3RydWN0PT1ERFJESU9SNCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVtbXlfY250ID0gZHVtbXlfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEVIUCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoKExhdGVuY3lfY29kZSA9PSAzKSAmJiAoZHVtbXlfY250PT0yKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKExhdGVuY3lfY29kZSA9PSAwKSAmJiAoZHVtbXlfY250PT00KSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKExhdGVuY3lfY29kZSA9PSAxKSAmJiAoZHVtbXlfY250PT01KSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKExhdGVuY3lfY29kZSA9PSAyKSAmJiAoZHVtbXlfY250PT02KSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERBVEFfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoKExhdGVuY3lfY29kZSA9PSAzKSAmJiAoZHVtbXlfY250PT00KSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKExhdGVuY3lfY29kZSA9PSAwKSAmJiAoZHVtbXlfY250PT02KSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKExhdGVuY3lfY29kZSA9PSAxKSAmJiAoZHVtbXlfY250PT03KSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKExhdGVuY3lfY29kZSA9PSAyKSAmJiAoZHVtbXlfY250PT04KSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERBVEFfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKChJbnN0cnVjdCA9PSBRSU9SKSB8fCAoSW5zdHJ1Y3QgPT0gUUlPUjQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgUVVBRCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdW1teV9jbnQgPSBkdW1teV9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKChMYXRlbmN5X2NvZGUgPT0gMykgJiYgKGR1bW15X2NudD09MSkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKExhdGVuY3lfY29kZSA9PSAwKSAmJiAoZHVtbXlfY250PT00KSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTGF0ZW5jeV9jb2RlID09IDEpICYmIChkdW1teV9jbnQ9PTQpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChMYXRlbmN5X2NvZGUgPT0gMikgJiYgKGR1bW15X2NudD09NSkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gREFUQV9CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKChJbnN0cnVjdD09RERSUUlPUikgfHwgKEluc3RydWN0PT1ERFJRSU9SNCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBRVUFEKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1bW15X2NudCA9IGR1bW15X2NudCArIDE7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgoTGF0ZW5jeV9jb2RlID09IDMpICYmIChkdW1teV9jbnQ9PTMpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChMYXRlbmN5X2NvZGUgPT0gMCkgJiYgKGR1bW15X2NudD09NikpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKExhdGVuY3lfY29kZSA9PSAxKSAmJiAoZHVtbXlfY250PT03KSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTGF0ZW5jeV9jb2RlID09IDIpICYmIChkdW1teV9jbnQ9PTgpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERBVEFfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgICAgIERBVEFfQllURVMgOgorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChET1VCTEUgPT0gMSdiMSAmJiAoaG9sZF9tb2RlPT0wKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX291dCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMxMCByZWFkX291dCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKFFVQUQpICYmICgoSW5zdHJ1Y3Q9PVFQUCkgfHwgKEluc3RydWN0ID09IFFQUDQpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWFkX255YmJsZSA9IHtIT0xETmVnX2luLCBXUE5lZ19pbiwgU09faW4sIFNJX2lufTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFfY250ID4gKChQYWdlU2l6ZSsxKSoyLTEpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0luIGNhc2Ugb2YgcXVhZCBtb2RlIGFuZCBRUFAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vaWYgbW9yZSB0aGFuIDUxMiBieXRlcyBhcmUgc2VudCB0byB0aGUgZGV2aWNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IoaT0wO2k8PShQYWdlU2l6ZSoyLTEpO2k9aSsxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWFkX2RhdGFfaW5baV0gPSBxdWFkX2RhdGFfaW5baSsxXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhZF9kYXRhX2luWyhQYWdlU2l6ZSsxKSoyLTFdID0gcXVhZF9ueWJibGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX2NudCA9IGRhdGFfY250ICsxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHF1YWRfbnliYmxlICE9PSA0J2JaWlpaKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWFkX2RhdGFfaW5bZGF0YV9jbnRdID0gcXVhZF9ueWJibGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfY250ID0gZGF0YV9jbnQgKzE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCh+UVVBRFJEKSAmJiAoKEhPTEROZWdfaW4gJiYgflFVQUQpIHx8IFFVQUQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhX2NudCA+ICgoUGFnZVNpemUrMSkqOC0xKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9JbiBjYXNlIG9mIHNlcmlhbCBtb2RlIGFuZCBQUCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9pZiBtb3JlIHRoYW4gUGFnZVNpemUgYXJlIHNlbnQgdG8gdGhlIGRldmljZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3ByZXZpb3VzbHkgbGF0Y2hlZCBkYXRhIGFyZSBkaXNjYXJkZWQgYW5kIGxhc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8yNTYvNTEyIGRhdGEgYnl0ZXMgYXJlIGd1YXJhbnRlZWQgdG8gYmUgcHJvZ3JhbW1lZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2NvcnJlY3RseSB3aXRoaW4gdGhlIHNhbWUgcGFnZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiaXRfY250ID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihpPTA7aTw9KFBhZ2VTaXplKkJZVEUtMSk7aT1pKzEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YV9pbltpXSA9IERhdGFfaW5baSs4XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YV9pbltQYWdlU2l6ZSpCWVRFICsgYml0X2NudF0gPSBTSV9pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdF9jbnQgPSBiaXRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiaXRfY250ID09IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX2NudCA9IGRhdGFfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGFfaW5bZGF0YV9jbnRdID0gU0lfaW47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX2NudCA9IGRhdGFfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbmRjYXNlCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgaWYgKGZhbGxpbmdfZWRnZV9TQ0tfaXBkKQorICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICBpZiAofkNTTmVnX2lwZCkKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBjYXNlIChidXNfY3ljbGVfc3RhdGUpCisgICAgICAgICAgICAgICAgICAgICAgICBBRERSRVNTX0JZVEVTIDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERPVUJMRSA9PSAxJ2IxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoSW5zdHJ1Y3Q9PUREUkZSKSAmJiAofkVYVEFERCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vRmFzdCBERFIgUmVhZCBNb2RlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzX2luW2FkZHJfY250XSA9IFNJX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFkZHJfY250ICE9IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfY250ID0gYWRkcl9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWRkcl9jbnQgPT0gMypCWVRFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGk9MjM7aT49MDtpPWktMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX2J5dGVzWzIzLWldID0gQWRkcmVzc19pbltpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX2J5dGVzWzMxOjI1XSA9IDcnYjAwMDAwMDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcl9ieXRlc1syNF0gPSBCYW5rX0FkZHJfcmVnWzBdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3MgPSBhZGRyX2J5dGVzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZV9hZGRyID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjMSBjaGFuZ2VfYWRkciA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEVIUCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gTU9ERV9CWVRFOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gRFVNTVlfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKChJbnN0cnVjdD09RERSRlI0KSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSW5zdHJ1Y3Q9PUREUkZSKSAmJiBFWFRBREQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzc19pblthZGRyX2NudF0gPSBTSV9pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhZGRyX2NudCAhPSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX2NudCA9IGFkZHJfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFkZHJfY250ID09IDQqQllURSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcl9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihpPTMxO2k+PTA7aT1pLTEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcl9ieXRlc1szMS1pXSA9IEFkZHJlc3NfaW5baV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzcyA9IHs3J2IwMDAwMDAwLGFkZHJfYnl0ZXNbMjQ6MF19OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZV9hZGRyID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjMSBjaGFuZ2VfYWRkciA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEVIUCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gTU9ERV9CWVRFOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBEVU1NWV9CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERPVUJMRSA9PSAxJ2IxICYmIChob2xkX21vZGU9PTApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIFZETFJfcmVnICE9IDgnYjAwMDAwMDAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9vdXQgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIzEwIHJlYWRfb3V0ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKChJbnN0cnVjdCA9PSBERFJESU9SKSAmJiAofkVYVEFERCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luICAgIC8vRHVhbCBJL08gRERSIFJlYWQgTW9kZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzc19pblsyKmFkZHJfY250XSA9IFNPX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzc19pblsyKmFkZHJfY250KzFdPSBTSV9pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhZGRyX2NudCAhPSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX2NudCA9IGFkZHJfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFkZHJfY250ID09IDMqQllURS8yKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGk9MjM7aT49MDtpPWktMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX2J5dGVzWzIzLWldID0gQWRkcmVzc19pbltpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX2J5dGVzWzMxOjI1XSA9IDcnYjAwMDAwMDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcl9ieXRlc1syNF0gPSBCYW5rX0FkZHJfcmVnWzBdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3MgPSBhZGRyX2J5dGVzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZV9hZGRyID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjMSBjaGFuZ2VfYWRkciA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEVIUCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gTU9ERV9CWVRFOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gRFVNTVlfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKChJbnN0cnVjdD09RERSRElPUjQpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChJbnN0cnVjdD09RERSRElPUikgJiYgRVhUQUREKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4gICAgLy9EdWFsIEkvTyBERFIgUmVhZCBNb2RlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzX2luWzIqYWRkcl9jbnRdICAgPSBTT19pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3NfaW5bMiphZGRyX2NudCsxXSA9IFNJX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFkZHJfY250ICE9IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfY250ID0gYWRkcl9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWRkcl9jbnQgPT0gNCpCWVRFLzIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IoaT0zMTtpPj0wO2k9aS0xKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfYnl0ZXNbMzEtaV0gPSBBZGRyZXNzX2luW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3MgPSB7NydiMDAwMDAwMCxhZGRyX2J5dGVzWzI0OjBdfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VfYWRkciA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIzEgY2hhbmdlX2FkZHIgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChFSFApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IE1PREVfQllURTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gRFVNTVlfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChET1VCTEUgPT0gMSdiMSAmJiAoaG9sZF9tb2RlPT0wKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBWRExSX3JlZyAhPSA4J2IwMDAwMDAwMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfb3V0ID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMxMCByZWFkX291dCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgoSW5zdHJ1Y3Q9PUREUlFJT1IpICYmICh+RVhUQUREKSAmJiBRVUFEKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbiAgICAvL1F1YWQgSS9PIEREUiBSZWFkIE1vZGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3NfaW5bNCphZGRyX2NudF0gPSBIT0xETmVnX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzc19pbls0KmFkZHJfY250KzFdID0gV1BOZWdfaW47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzX2luWzQqYWRkcl9jbnQrMl0gPSBTT19pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3NfaW5bNCphZGRyX2NudCszXSA9IFNJX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFkZHJfY250ICE9IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfY250ID0gYWRkcl9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWRkcl9jbnQgPT0gMypCWVRFLzQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IoaT0yMztpPj0wO2k9aS0xKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfYnl0ZXNbMjMtaV0gPSBBZGRyZXNzX2luW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfYnl0ZXNbMzE6MjVdID0gNydiMDAwMDAwMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX2J5dGVzWzI0XSA9IEJhbmtfQWRkcl9yZWdbMF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzcyA9IGFkZHJfYnl0ZXM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlX2FkZHIgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIzEgY2hhbmdlX2FkZHIgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IE1PREVfQllURTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoUVVBRCAmJiAoKEluc3RydWN0PT1ERFJRSU9SNCkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEluc3RydWN0PT1ERFJRSU9SKSAmJiBFWFRBREQpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3NfaW5bNCphZGRyX2NudF0gPSBIT0xETmVnX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzc19pbls0KmFkZHJfY250KzFdID0gV1BOZWdfaW47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzX2luWzQqYWRkcl9jbnQrMl0gPSBTT19pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3NfaW5bNCphZGRyX2NudCszXSA9IFNJX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFkZHJfY250ICE9IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfY250ID0gYWRkcl9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWRkcl9jbnQgPT0gNCpCWVRFLzQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IoaT0zMTtpPj0wO2k9aS0xKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfYnl0ZXNbMzEtaV0gPSBBZGRyZXNzX2luW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3MgPSB7NydiMDAwMDAwMCxhZGRyX2J5dGVzWzI0OjBdfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VfYWRkciA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIzEgY2hhbmdlX2FkZHIgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IE1PREVfQllURTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgICAgICBNT0RFX0JZVEUgOgorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEluc3RydWN0ID09IEREUkZSKSB8fCAoSW5zdHJ1Y3QgPT0gRERSRlI0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlX2luWzIqbW9kZV9jbnQrMV0gPSBTSV9pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZV9jbnQgPSBtb2RlX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtb2RlX2NudCA9PSBCWVRFLzIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IoaT03O2k+PTA7aT1pLTEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVfYnl0ZXNbaV0gPSBtb2RlX2luWzctaV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERVTU1ZX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmV0dXJuX0RMUChJbnN0cnVjdCwgRUhQLCBMYXRlbmN5X2NvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1bW15X2NudCwgc3RhcnRfZGxwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChET1VCTEUgPT0gMSdiMSAmJiAoaG9sZF9tb2RlPT0wKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFZETFJfcmVnICE9IDgnYjAwMDAwMDAwKSAmJiBzdGFydF9kbHApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfb3V0ID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjMTAgcmVhZF9vdXQgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKChJbnN0cnVjdD09RERSRElPUikgfHwgKEluc3RydWN0PT1ERFJESU9SNCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZV9pbls0Km1vZGVfY250KzJdID0gU09faW47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVfaW5bNCptb2RlX2NudCszXSA9IFNJX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlX2NudCA9IG1vZGVfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1vZGVfY250ID09IEJZVEUvNCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihpPTc7aT49MDtpPWktMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZV9ieXRlc1tpXSA9IG1vZGVfaW5bNy1pXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gRFVNTVlfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXR1cm5fRExQKEluc3RydWN0LCBFSFAsIExhdGVuY3lfY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVtbXlfY250LCBzdGFydF9kbHApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERPVUJMRSA9PSAxJ2IxICYmIChob2xkX21vZGU9PTApICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVkRMUl9yZWcgIT0gOCdiMDAwMDAwMDApICYmIHN0YXJ0X2RscCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9vdXQgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMxMCByZWFkX291dCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKEluc3RydWN0PT1ERFJRSU9SKSB8fCAoSW5zdHJ1Y3Q9PUREUlFJT1I0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlX2luWzRdID0gSE9MRE5lZ19pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZV9pbls1XSA9IFdQTmVnX2luOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlX2luWzZdID0gU09faW47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVfaW5bN10gPSBTSV9pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGk9NztpPj0wO2k9aS0xKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZV9ieXRlc1tpXSA9IG1vZGVfaW5bNy1pXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IERVTU1ZX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXR1cm5fRExQKEluc3RydWN0LCBFSFAsIExhdGVuY3lfY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVtbXlfY250LCBzdGFydF9kbHApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoRE9VQkxFID09IDEnYjEgJiYgKGhvbGRfbW9kZT09MCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChWRExSX3JlZyAhPSA4J2IwMDAwMDAwMCkgJiYgc3RhcnRfZGxwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX291dCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjMTAgcmVhZF9vdXQgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgICAgICBEQVRBX0JZVEVTOgorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaG9sZF9tb2RlPT0wKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChET1VCTEUgPT0gMSdiMSApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX291dCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjMTAgcmVhZF9vdXQgPSAxJ2IwOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEluc3RydWN0PT1SRUFEKSB8fCAoSW5zdHJ1Y3Q9PVJENCkgICB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChJbnN0cnVjdD09RlNUUkQpfHwgKEluc3RydWN0PT1GU1RSRDQpfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSW5zdHJ1Y3Q9PVJEU1IpIHx8IChJbnN0cnVjdD09UkRTUjIpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEluc3RydWN0PT1SRENSKSB8fCAoSW5zdHJ1Y3Q9PU9UUFIpICB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChJbnN0cnVjdD09RE9SKSB8fCAoSW5zdHJ1Y3Q9PURPUjQpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEluc3RydWN0PT1ESU9SKXx8IChJbnN0cnVjdD09RElPUjQpfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSW5zdHJ1Y3Q9PUFCUkQpIHx8IChJbnN0cnVjdD09QlJSRCkgIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEluc3RydWN0PT1BU1BSRCl8fCAoSW5zdHJ1Y3Q9PURZQlJEKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChJbnN0cnVjdD09UFBCUkQpfHwgKEluc3RydWN0ID09IEVDQ1JEKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChJbnN0cnVjdD09UEFTU1JEKXx8IChJbnN0cnVjdD09UkRJRCl8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChJbnN0cnVjdD09UkVTKSB8fCAoSW5zdHJ1Y3Q9PVJFTVMpICB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChJbnN0cnVjdD09UExCUkQpfHwgKEluc3RydWN0PT1ETFBSRCkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY3VycmVudF9zdGF0ZSA9PSBBVVRPQk9PVCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2RlbGF5ID09IDApIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoSW5zdHJ1Y3Q9PVFPUikgfHwgKEluc3RydWN0PT1RSU9SKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChJbnN0cnVjdD09UU9SNCkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSW5zdHJ1Y3Q9PVFJT1I0KSkgJiYgUVVBRCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfb3V0ID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjMTAgcmVhZF9vdXQgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgICAgIERVTU1ZX0JZVEVTOgorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaG9sZF9tb2RlPT0wKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJldHVybl9ETFAoSW5zdHJ1Y3QsIEVIUCwgTGF0ZW5jeV9jb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1bW15X2NudCwgc3RhcnRfZGxwKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoRE9VQkxFID09IDEnYjEgJiYgVkRMUl9yZWcgIT0gOCdiMDAwMDAwMDAgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2RscCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfb3V0ID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMxMCByZWFkX291dCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgZW5kY2FzZQorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgIGlmIChyaXNpbmdfZWRnZV9DU05lZ19pcGQpCisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgIGlmIChidXNfY3ljbGVfc3RhdGUgIT0gREFUQV9CWVRFUykKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBpZiAoYnVzX2N5Y2xlX3N0YXRlID09IEFERFJFU1NfQllURVMgJiYgb3Bjb2RlX3RtcCA9PSA4J2hGRikKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID0gTUJSOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgYnVzX2N5Y2xlX3N0YXRlID0gU1RBTkRfQlk7CisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGlmIChidXNfY3ljbGVfc3RhdGUgPT0gREFUQV9CWVRFUykKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoKG1vZGVfYnl0ZXNbNzo0XSA9PSA0J2IxMDEwKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChJbnN0cnVjdD09RElPUiB8fCBJbnN0cnVjdD09RElPUjQgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdD09UUlPUiB8fCBJbnN0cnVjdD09UUlPUjQpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgobW9kZV9ieXRlc1s3OjRdID09IH5tb2RlX2J5dGVzWzM6MF0pICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEluc3RydWN0ID09IEREUkZSICB8fCBJbnN0cnVjdCA9PSBERFJGUjQgIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPT0gRERSRElPUiB8fCBJbnN0cnVjdCA9PSBERFJESU9SNCB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID09IEREUlFJT1IgfHwgSW5zdHJ1Y3QgPT0gRERSUUlPUjQpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfY3ljbGVfc3RhdGUgPSBBRERSRVNTX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1c19jeWNsZV9zdGF0ZSA9IFNUQU5EX0JZOworCisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIChJbnN0cnVjdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBXUkVOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdSREksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0U0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFA0RSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQNEU0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENMU1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlJBQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRVNFVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUEJFUlMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFBCUCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQTEJXUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQR1NQLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBHUlMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVJTUCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBFUlJTOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoSE9MRE5lZ19pbiAmJiB+UVVBRCkgfHwgUVVBRCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhX2NudCA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBXUlI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChIT0xETmVnX2luICYmIH5RVUFEKSB8fCBRVUFEKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFfY250ID09IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0lmIENTIyBpcyBkcml2ZW4gaGlnaCBhZnRlciBlaWdodAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9jeWNsZSxvbmx5IHRoZSBTdGF0dXMgUmVnaXN0ZXIgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vd3JpdHRlbiB0by4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGUgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChCQVJfQUNDID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGk9MDtpPD03O2k9aSsxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFfaW5baV09CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhX2luWzctaV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUF9FUlIgPT0gMCAmJiBFX0VSUiA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGk9MDtpPD03O2k9aSsxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYW5rX0FkZHJfcmVnX2luW2ldPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGFfaW5bNy1pXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZGF0YV9jbnQgPT0gMTYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0FmdGVyIHRoZSAxNnRoIGN5Y2xlIGJvdGggdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1N0YXR1cyBhbmQgQ29uZmlndXJhdGlvbiBSZWdpc3RlcnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vYXJlIHdyaXR0ZW4gdG8uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQkFSX0FDQyA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNmZ193cml0ZSA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihpPTA7aTw9NztpPWkrMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxX2luW2ldPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YV9pbls3LWldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uZmlnX3JlZzFfaW5baV09CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhX2luWzE1LWldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFBfRVJSID09IDAgJiYgRV9FUlIgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihpPTA7aTw9NztpPWkrMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFua19BZGRyX3JlZ19pbltpXT0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhX2luWzctaV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1RQUDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEhPTEROZWdfaW4gJiYgflFVQUQpIHx8IFFVQUQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YV9jbnQgPiAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGRhdGFfY250ICUgOCkgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihpPTA7aTw9UGFnZVNpemU7aT1pKzEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Ioaj03O2o+PTA7aj1qLTEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoRGF0YV9pblsoaSo4KSsoNy1qKV0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICE9PSAxJ2JYKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ5dGVfc2x2W2pdID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YV9pblsoaSo4KSsoNy1qKV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdCeXRlW2ldID0gQnl0ZV9zbHY7CisJCQkJCQkvLyRkaXNwbGF5KCIlbTogTG9jOiAleCBCeXRlOiAleCIsaSxCeXRlX3Nsdik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhX2NudCA+IChQYWdlU2l6ZSsxKSpCWVRFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnl0ZV9udW1iZXIgPSBQYWdlU2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnl0ZV9udW1iZXIgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoZGF0YV9jbnQvOCkgLSAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFQUCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBRUFA0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhX2NudCA+MCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoZGF0YV9jbnQgJSAyKSA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhZF9wZyA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGk9MDtpPD1QYWdlU2l6ZTtpPWkrMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Ioaj0xO2o+PTA7aj1qLTEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRdWFkX3NsdiA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWFkX2RhdGFfaW5bKGkqMikrKDEtaildOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGo9PTEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnl0ZV9zbHZbNzo0XSA9IFF1YWRfc2x2OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaj09MCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCeXRlX3NsdlszOjBdID0gUXVhZF9zbHY7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXQnl0ZVtpXSA9IEJ5dGVfc2x2OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhX2NudCA+IChQYWdlU2l6ZSsxKSoyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCeXRlX251bWJlciA9IFBhZ2VTaXplOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnl0ZV9udW1iZXIgPSAoKGRhdGFfY250LzIpLTEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUJXUjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEhPTEROZWdfaW4gJiYgflFVQUQpIHx8IFFVQUQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YV9jbnQgPT0gMzIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Ioaj0wO2o8PTMxO2o9aisxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF1dG9Cb290X3JlZ19pbltqXSA9IERhdGFfaW5bMzEtal07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCUldSOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoSE9MRE5lZ19pbiAmJiB+UVVBRCkgfHwgUVVBRCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGo9MDtqPD03O2o9aisxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJhbmtfQWRkcl9yZWdfaW5bal0gPSBEYXRhX2luWzctal07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU1BQOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoSE9MRE5lZ19pbiAmJiB+UVVBRCkgfHwgUVVBRCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhX2NudCA9PSAxNikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGUgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihqPTA7ajw9MTU7aj1qKzEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNQX3JlZ19pbltqXSA9IERhdGFfaW5bMTUtal07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBEWUJXUjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEhPTEROZWdfaW4gJiYgflFVQUQpIHx8IFFVQUQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YV9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGUgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihqPTA7ajw9NztqPWorMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEWUJBUl9pbltqXSA9IERhdGFfaW5bNy1qXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBOVkRMUjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEhPTEROZWdfaW4gJiYgflFVQUQpIHx8IFFVQUQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YV9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGUgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihqPTA7ajw9NztqPWorMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVkRMUl9yZWdfaW5bal0gPSBEYXRhX2luWzctal07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBXVkRMUjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEhPTEROZWdfaW4gJiYgflFVQUQpIHx8IFFVQUQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YV9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGUgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihqPTA7ajw9NztqPWorMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWRExSX3JlZ19pbltqXSA9IERhdGFfaW5bNy1qXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBBU1NQOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoSE9MRE5lZ19pbiAmJiB+UVVBRCkgfHwgUVVBRCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhX2NudCA9PSA2NCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGUgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihqPTE7ajw9ODtqPWorMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Ioaz0xO2s8PTg7az1rKzEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNzd29yZF9yZWdfaW5baio4LWtdID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGFfaW5bOCooai0xKStrLTFdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBBU1NVOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoSE9MRE5lZ19pbiAmJiB+UVVBRCkgfHwgUVVBRCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhX2NudCA9PSA2NCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGUgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihqPTE7ajw9ODtqPWorMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Ioaz0xO2s8PTg7az1rKzEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQVNTX1RFTVBbaio4LWtdID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGFfaW5bOCooai0xKStrLTFdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZGNhc2UKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbmQKKyAgICAgICAgZW5kCisgICAgZW5kCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFRpbWluZyBjb250cm9sIGZvciB0aGUgUGFnZSBQcm9ncmFtCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgdGltZSBwb2I7CisgICAgdGltZSBlbGFwc2VkX3BnbTsKKyAgICB0aW1lIGVsYXBzZWRfdHN1OworICAgIHRpbWUgc3RhcnRfcGdtOworICAgIHRpbWUgc3RhcnRfdHN1OworICAgIHRpbWUgZHVyYXRpb25fcGdtOworICAgIHRpbWUgZHVyYXRpb25fdHN1OworICAgIGV2ZW50IHBkb25lX2V2ZW50OworCisgICAgYWx3YXlzIEAocmlzaW5nX2VkZ2VfUFNUQVJUKQorICAgIGJlZ2luCisgICAgICAgIGlmICgoSW5zdHJ1Y3QgPT0gUFApIHx8IChJbnN0cnVjdCA9PSBQUDQpIHx8IChJbnN0cnVjdCA9PSBPVFBQKSB8fAorICAgICAgICAgICAoSW5zdHJ1Y3QgPT0gUVBQKSB8fCAoSW5zdHJ1Y3QgPT0gUVBQNCkpCisgICAgICAgICAgICBpZiAoUGFnZVNpemUgPT0gMjU1KQorICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICBwb2IgPSB0ZGV2aWNlX1BQXzI1NjsKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICBwb2IgPSB0ZGV2aWNlX1BQXzUxMjsKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbHNlCisgICAgICAgICAgICBwb2IgPSB0ZGV2aWNlX0JQOworICAgICAgICBpZiAoKHJpc2luZ19lZGdlX1BTVEFSVCkgJiYgUERPTkUpCisgICAgICAgIGJlZ2luCisgICAgICAgICAgICBlbGFwc2VkX3BnbSA9IDA7CisgICAgICAgICAgICBkdXJhdGlvbl9wZ20gPSBwb2I7CisgICAgICAgICAgICBQRE9ORSA9IDEnYjA7CisgICAgICAgICAgICAtPnBkb25lX2V2ZW50OworICAgICAgICAgICAgc3RhcnRfcGdtID0gJHRpbWU7CisgICAgICAgIGVuZAorICAgIGVuZAorCisgICAgYWx3YXlzIEAocG9zZWRnZSBQR1NVU1ApCisgICAgYmVnaW4KKyAgICAgICAgaWYgKFBHU1VTUCAmJiAoflBET05FKSkKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIGRpc2FibGUgcGRvbmVfcHJvY2VzczsKKyAgICAgICAgICAgIGVsYXBzZWRfcGdtID0gJHRpbWUgLSBzdGFydF9wZ207CisgICAgICAgICAgICBkdXJhdGlvbl9wZ20gPSBwb2IgLSBlbGFwc2VkX3BnbTsKKyAgICAgICAgICAgIFBET05FID0gMSdiMDsKKyAgICAgICAgZW5kCisgICAgZW5kCisKKyAgICBhbHdheXMgQChwb3NlZGdlIFBHUkVTKQorICAgIGJlZ2luCisgICAgICAgIHN0YXJ0X3BnbSA9ICR0aW1lOworICAgICAgICAtPnBkb25lX2V2ZW50OworICAgIGVuZAorCisgICAgYWx3YXlzIEAocGRvbmVfZXZlbnQpCisgICAgYmVnaW46cGRvbmVfcHJvY2VzcworICAgICAgICBQRE9ORSA9IDEnYjA7CisgICAgICAgICNkdXJhdGlvbl9wZ20gUERPTkUgPSAxJ2IxOworICAgIGVuZAorCisgICAgYWx3YXlzIEAoU0kpCisgICAgYmVnaW4KKyAgICAgICAgaWYgKChJbnN0cnVjdCA9PSBQR1NQKSB8fCAoSW5zdHJ1Y3QgPT0gUEdSUykgfHwKKyAgICAgICAgICAgKEluc3RydWN0ID09IEVSU1ApIHx8IChJbnN0cnVjdCA9PSBFUlJTKSkKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIHN0YXJ0X3RzdSA9ICR0aW1lOworICAgICAgICBlbmQKKyAgICBlbmQKKworICAgIGFsd2F5cyBAKHBvc2VkZ2UgU0NLKQorICAgIGJlZ2luCisgICAgICAgIGlmICgoSW5zdHJ1Y3QgPT0gUEdTUCkgfHwgKEluc3RydWN0ID09IFBHUlMpIHx8CisgICAgICAgICAgIChJbnN0cnVjdCA9PSBFUlNQKSB8fCAoSW5zdHJ1Y3QgPT0gRVJSUykpCisgICAgICAgIGJlZ2luCisgICAgICAgICAgICBlbGFwc2VkX3RzdSA9ICR0aW1lIC0gc3RhcnRfdHN1OworICAgICAgICAgICAgZHVyYXRpb25fdHN1ID0gdGRldmljZV9UU1UgLSBlbGFwc2VkX3RzdTsKKyAgICAgICAgICAgIGlmIChkdXJhdGlvbl90c3UgPiAwKQorICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICBUU1UgPSAxJ2IwOworICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgIFRTVSA9IDEnYjE7CisgICAgICAgICAgICAgICAgJGRpc3BsYXkoIldhcm5pbmcgYXQiLCAkdGltZSk7CisgICAgICAgICAgICAgICAgJGRpc3BsYXkoInRTVSBtYXggdGltZSB2aW9sYXRpb24iKTsKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKyAgICBlbmQKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFRpbWluZyBjb250cm9sIGZvciB0aGUgV3JpdGUgU3RhdHVzIFJlZ2lzdGVyCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgdGltZSB3b2I7CisgICAgYWx3YXlzIEAocG9zZWRnZSBXU1RBUlQpCisgICAgYmVnaW46d2RvbmVfcHJvY2VzcworICAgICAgICB3b2IgPSB0ZGV2aWNlX1dSUjsKKyAgICAgICAgaWYgKFdTVEFSVCAmJiBXRE9ORSkKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIFdET05FID0gMSdiMDsKKyAgICAgICAgICAgICN3b2IgV0RPTkUgPSAxJ2IxOworICAgICAgICBlbmQKKyAgICBlbmQKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gUmVzZXQgVGltaW5nCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgICB0aW1lIHN0YXJ0bG87CisgICAgdGltZSBzdGFydGhpOworICAgIHRpbWUgZHVyYXRpb25sbzsKKyAgICB0aW1lIGR1cmF0aW9uaGk7CisKKyAgICBhbHdheXMgQChuZWdlZGdlIFJTVE5lZ19pbiBvciBJbnN0cnVjdCkKKyAgICBiZWdpbgorICAgICAgICBpZiAoflJTVE5lZ19pbikKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIFJTVCA9IDEnYjE7CisgICAgICAgICAgICAjMjAwMDAwIFJTVCA9IDEnYjA7ICAvLyAyMDAgbnMKKyAgICAgICAgZW5kCisgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFJFU0VUKQorICAgICAgICBiZWdpbgorICAgICAgICAgICAgUmVzZXRlZCA9IDEnYjA7CisgICAgICAgICAgICAjMTAwMDAgUmVzZXRlZCA9IDEnYjE7ICAgLy8gIDEwIG5zCisgICAgICAgIGVuZAorICAgIGVuZAorCisgICAgYWx3YXlzIEAoUlNUX2luIG9yIHJpc2luZ19lZGdlX1Jlc2V0ZWQpIC8vIFJlc2V0IGRvbmUscHJvZ3JhbSB0ZXJtaW5hdGVkCisgICAgYmVnaW4KKyAgICAgICAgaWYgKChSU1RfaW4gJiYgflJTVCkgfHwgKHJpc2luZ19lZGdlX1Jlc2V0ZWQpKQorICAgICAgICAgICAgZGlzYWJsZSBwZG9uZV9wcm9jZXNzOworICAgICAgICAgICAgZGlzYWJsZSBlZG9uZV9wcm9jZXNzOworICAgICAgICAgICAgZGlzYWJsZSB3ZG9uZV9wcm9jZXNzOworICAgICAgICAgICAgUERPTkUgPSAxJ2IxOworICAgICAgICAgICAgRURPTkUgPSAxJ2IxOworICAgICAgICAgICAgV0RPTkUgPSAxJ2IxOworICAgIGVuZAorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBUaW1pbmcgY29udHJvbCBmb3IgdGhlIEJ1bGsgRXJhc2UKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICB0aW1lIHNlbzsKKyAgICB0aW1lIGJlbzsKKyAgICBldmVudCBlZG9uZV9ldmVudDsKKyAgICB0aW1lIGVsYXBzZWRfZXJzOworICAgIHRpbWUgc3RhcnRfZXJzOworICAgIHRpbWUgZHVyYXRpb25fZXJzOworCisgICAgYWx3YXlzIEAocmlzaW5nX2VkZ2VfRVNUQVJUKQorICAgIGJlZ2luCisgICAgICAgIGlmIChVbmlmb3JtU2VjKQorICAgICAgICBiZWdpbgorICAgICAgICAgICAgc2VvID0gdGRldmljZV9TRTI1NjsKKyAgICAgICAgZW5kCisgICAgICAgIGVsc2UKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIHNlbyA9IHRkZXZpY2VfU0U2NDsKKyAgICAgICAgZW5kCisgICAgICAgIGJlbyA9IHRkZXZpY2VfQkU7CisgICAgICAgIGlmICgocmlzaW5nX2VkZ2VfRVNUQVJUKSAmJiBFRE9ORSkKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIGlmIChJbnN0cnVjdCA9PSBCRSkKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgZHVyYXRpb25fZXJzID0gYmVvOworICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgIGR1cmF0aW9uX2VycyA9IHNlbzsKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZWxhcHNlZF9lcnMgPSAwOworICAgICAgICAgICAgRURPTkUgPSAxJ2IwOworICAgICAgICAgICAgLT5lZG9uZV9ldmVudDsKKyAgICAgICAgICAgIHN0YXJ0X2VycyA9ICR0aW1lOworICAgICAgICBlbmQKKyAgICBlbmQKKworICAgIGFsd2F5cyBAKHBvc2VkZ2UgRVNVU1ApCisgICAgYmVnaW4KKyAgICAgICAgaWYgKEVTVVNQICYmICh+RURPTkUpKQorICAgICAgICBiZWdpbgorICAgICAgICAgICAgZGlzYWJsZSBlZG9uZV9wcm9jZXNzOworICAgICAgICAgICAgZWxhcHNlZF9lcnMgPSAkdGltZSAtIHN0YXJ0X2VyczsKKyAgICAgICAgICAgIGR1cmF0aW9uX2VycyA9IHNlbyAtIGVsYXBzZWRfZXJzOworICAgICAgICAgICAgRURPTkUgPSAxJ2IwOworICAgICAgICBlbmQKKyAgICBlbmQKKworICAgIGFsd2F5cyBAKHBvc2VkZ2UgRVJFUykKKyAgICBiZWdpbgorICAgICAgICBpZiAgKEVSRVMgJiYgKH5FRE9ORSkpCisgICAgICAgIGJlZ2luCisgICAgICAgICAgICBzdGFydF9lcnMgPSAkdGltZTsKKyAgICAgICAgICAgIC0+ZWRvbmVfZXZlbnQ7CisgICAgICAgIGVuZAorICAgIGVuZAorCisgICAgYWx3YXlzIEAoZWRvbmVfZXZlbnQpCisgICAgYmVnaW4gOiBlZG9uZV9wcm9jZXNzCisgICAgICAgIEVET05FID0gMSdiMDsKKyAgICAgICAgI2R1cmF0aW9uX2VycyBFRE9ORSA9IDEnYjE7CisgICAgZW5kCisKKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgLy8gUHJvY2VzcyBmb3IgY2xvY2sgZnJlcXVlbmN5IGRldGVybWluYXRpb24KKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgYWx3YXlzIEAocG9zZWRnZSBTQ0tfaXBkKQorICAgIGJlZ2luIDogY2xvY2tfcGVyaW9kCisgICAgICAgIGlmIChTQ0tfaXBkKQorICAgICAgICBiZWdpbgorICAgICAgICAgICAgU0NLX2N5Y2xlID0gJHRpbWUgLSBwcmV2X1NDSzsKKyAgICAgICAgICAgIHByZXZfU0NLID0gJHRpbWU7CisgICAgICAgIGVuZAorICAgIGVuZAorCisvLyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyAgICAvLyBNYWluIEJlaGF2aW9yIFByb2Nlc3MKKy8vICAgIC8vIGNvbWJpbmF0aW9uYWwgcHJvY2VzcyBmb3IgbmV4dCBzdGF0ZSBnZW5lcmF0aW9uCisvLyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgICByZWcgcmlzaW5nX2VkZ2VfUERPTkUgPSAxJ2IwOworICAgIHJlZyByaXNpbmdfZWRnZV9FRE9ORSA9IDEnYjA7CisgICAgcmVnIHJpc2luZ19lZGdlX1dET05FID0gMSdiMDsKKyAgICByZWcgZmFsbGluZ19lZGdlX3dyaXRlID0gMSdiMDsKKyAgICByZWcgZmFsbGluZ19lZGdlX1BQQkVSQVNFX2luID0gMSdiMDsKKyAgICByZWcgZmFsbGluZ19lZGdlX1BBU1NVTENLX2luID0gMSdiMDsKKworICAgIGludGVnZXIgaTsKKyAgICBpbnRlZ2VyIGo7CisKKyAgICBhbHdheXMgQChyaXNpbmdfZWRnZV9Qb3dlcmVkVXAgb3IgZmFsbGluZ19lZGdlX3dyaXRlIG9yCisgICAgICAgICAgICAgZmFsbGluZ19lZGdlX1JTVE5lZyBvciByaXNpbmdfZWRnZV9QRE9ORSBvciByaXNpbmdfZWRnZV9XRE9ORSBvcgorICAgICAgICAgICAgIHJpc2luZ19lZGdlX0VET05FIG9yIEVSU1NVU1Bfb3V0X2V2ZW50IG9yIHJpc2luZ19lZGdlX1JTVE5lZyBvcgorICAgICAgICAgICAgIFBSR1NVU1Bfb3V0X2V2ZW50IG9yIHJpc2luZ19lZGdlX0NTTmVnX2lwZCBvciByaXNpbmdfZWRnZV9SU1Rfb3V0CisgICAgICAgICAgICAgb3IgZmFsbGluZ19lZGdlX1BQQkVSQVNFX2luIG9yIGZhbGxpbmdfZWRnZV9QQVNTVUxDS19pbiBvciBSU1Rfb3V0KQorICAgIGJlZ2luOiBTdGF0ZUdlbjEKKworICAgICAgICBpbnRlZ2VyIHNlY3Q7CisKKyAgICAgICAgaWYgKHJpc2luZ19lZGdlX1Bvd2VyZWRVcCAmJiBSU1ROZWdfaW4gJiYgUlNUX291dCkKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIGlmIChBQkUgPT0gMSAmJiBSUE1FICE9PSAwICkKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZSAgICAgPSBBVVRPQk9PVDsKKyAgICAgICAgICAgICAgICByZWFkX2NudCAgICAgICA9IDA7CisgICAgICAgICAgICAgICAgYnl0ZV9jbnQgICAgICAgPSAxOworICAgICAgICAgICAgICAgIHJlYWRfYWRkciAgICAgID0ge0F1dG9Cb290X3JlZ1szMTo5XSwgOSdiMH07CisgICAgICAgICAgICAgICAgc3RhcnRfZGVsYXkgICAgPSBBdXRvQm9vdF9yZWdbODoxXTsKKyAgICAgICAgICAgICAgICBzdGFydF9hdXRvYm9vdCA9IDA7CisgICAgICAgICAgICAgICAgQUJTRCAgICAgICAgICAgPSBBdXRvQm9vdF9yZWdbODoxXTsKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG5leHRfc3RhdGUgPSBJRExFOworICAgICAgICBlbmQKKyAgICAgICAgZWxzZSBpZiAoUG93ZXJlZFVwKQorICAgICAgICBiZWdpbgorICAgICAgICAgICAgaWYgKFJTVF9vdXQgPT0gMSdiMCkKKyAgICAgICAgICAgICAgICBuZXh0X3N0YXRlID0gY3VycmVudF9zdGF0ZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGZhbGxpbmdfZWRnZV93cml0ZSAmJiBJbnN0cnVjdCA9PSBSRVNFVCkKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgaWYgKEFCRSA9PSAxICYmIFJQTUUgIT09IDApCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgICAgICAgPSAwOworICAgICAgICAgICAgICAgICAgICBieXRlX2NudCAgICAgICA9IDE7CisgICAgICAgICAgICAgICAgICAgIHJlYWRfYWRkciAgICAgID0ge0F1dG9Cb290X3JlZ1szMTo5XSwgOSdiMH07CisgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2RlbGF5ICAgID0gQXV0b0Jvb3RfcmVnWzg6MV07CisgICAgICAgICAgICAgICAgICAgIEFCU0QgICAgICAgICAgID0gQXV0b0Jvb3RfcmVnWzg6MV07CisgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2F1dG9ib290ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZSAgICAgPSBBVVRPQk9PVDsKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG5leHRfc3RhdGUgPSBJRExFOworICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbHNlIAorICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICBjYXNlIChjdXJyZW50X3N0YXRlKQorICAgICAgICAgICAgICAgICAgICBSRVNFVF9TVEFURSA6CisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHJpc2luZ19lZGdlX1JTVF9vdXQgJiYgUlNUTmVnX2luKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgKHJpc2luZ19lZGdlX1JTVE5lZyAmJiBSU1Rfb3V0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFCRSA9PSAxICYmIFJQTUUhPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0X3N0YXRlID0gQVVUT0JPT1Q7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ICAgICAgID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZV9jbnQgICAgICAgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2FkZHIgICAgICA9IHtBdXRvQm9vdF9yZWdbMzE6OV0sOSdiMH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2RlbGF5ICAgID0gQXV0b0Jvb3RfcmVnWzg6MV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2F1dG9ib290ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUJTRCAgICAgICAgICAgPSBBdXRvQm9vdF9yZWdbODoxXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfc3RhdGUgPSBJRExFOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgIElETEUgOgorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZhbGxpbmdfZWRnZV93cml0ZSAmJiBSZFBzd2RQcm90TW9kZSA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdHJ1Y3QgPT0gV1JSICYmIFdFTCA9PSAxICYmIEJBUl9BQ0MgPT0gMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICgoKH4oU1JXRCA9PSAxICYmIH5XUE5lZ19pbikpJiYgflFVQUQpIHx8IFFVQUQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhbiBub3QgZXhlY3V0ZSBpZiBIUE0gaXMgZW50ZXJlZCBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIFdFTCBiaXQgaXMgemVybworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKChUQlBST1Q9PTEgJiYgQ29uZmlnX3JlZzFfaW5bNV09PTEnYjApIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFRCUEFSTT09MSAmJiBDb25maWdfcmVnMV9pblsyXT09MSdiMCkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQlBOViAgPT0xICYmIENvbmZpZ19yZWcxX2luWzNdPT0xJ2IwKSkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZmdfd3JpdGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIldBUk5JTkc6IENoYW5naW5nIHZhbHVlIG9mICIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJDb25maWd1cmF0aW9uIFJlZ2lzdGVyIE9UUCAiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiYml0IGZyb20gMSB0byAwIGlzIG5vdCIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJhbGxvd2VkISEhIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0X3N0YXRlID0gV1JJVEVfU1I7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFdSUiAmJiBCQVJfQUNDID09IDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXcml0ZSB0byB0aGUgbG93ZXIgYWRkcmVzcyBiaXRzIG9mIHRoZSBCQVIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFBfRVJSID09IDAgJiYgRV9FUlIgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfc3RhdGUgPSBJRExFOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgoSW5zdHJ1Y3QgPT0gUFAgfHwgSW5zdHJ1Y3QgPT0gUVBQIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID09IFBQNCB8fCBJbnN0cnVjdCA9PSBRUFA0KSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUwgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXR1cm5TZWN0b3JJRChzZWN0LEFkZHJlc3MpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ21fcGFnZSA9IEFkZHJlc3MgLyAoUGFnZVNpemUrMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTZWNfUHJvdFtzZWN0XT09IDAgJiYgUFBCX2JpdHNbc2VjdF09PSAxICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEWUJfYml0c1tzZWN0XT09IDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0X3N0YXRlID0gUEFHRV9QRzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3Q9PU9UUFAgJiYgV0VMPT0xICYmIEZSRUVaRT09MCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKCgoKEFkZHJlc3M+PTE2J2gwMDEwICYmIEFkZHJlc3M8PTE2J2gwMDEzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwoQWRkcmVzcz49MTYnaDAwMjAgJiYgQWRkcmVzczw9MTYnaDAwRkYpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgTE9DS19CWVRFMVtBZGRyZXNzLzMyXSA9PSAxKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChBZGRyZXNzPj0xNidoMDEwMCAmJiBBZGRyZXNzPD0xNidoMDFGRikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIExPQ0tfQllURTJbKEFkZHJlc3MtMTYnaDAxMDApLzMyXT09MSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQWRkcmVzcz49MTYnaDAyMDAgJiYgQWRkcmVzczw9MTYnaDAyRkYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBMT0NLX0JZVEUzWyhBZGRyZXNzLTE2J2gwMjAwKS8zMl09PTEpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEFkZHJlc3M+PTE2J2gwMzAwICYmIEFkZHJlc3M8PTE2J2gwM0ZGKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgTE9DS19CWVRFNFsoQWRkcmVzcy0xNidoMDMwMCkvMzJdID09IDEpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKEFkZHJlc3MgKyBCeXRlX251bWJlciA8PSBPVFBIaUFkZHIpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0X3N0YXRlID0gIE9UUF9QRzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgoSW5zdHJ1Y3QgPT0gU0UgfHwgSW5zdHJ1Y3QgPT0gU0U0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgV0VMID09IDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmV0dXJuU2VjdG9ySUQoc2VjdCxBZGRyZXNzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFVuaWZvcm1TZWMgfHwgKFRvcEJvb3QgJiYgc2VjdCA8IDUxMCkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJvdHRvbUJvb3QgJiYgc2VjdCA+IDMxKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTZWNfUHJvdFtzZWN0XT09IDAgJiYgUFBCX2JpdHNbc2VjdF09PSAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIERZQl9iaXRzW3NlY3RdPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0X3N0YXRlID0gIFNFQ1RPUl9FUlM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgoVG9wQm9vdCAmJiBzZWN0ID49IDUxMCkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQm90dG9tQm9vdCAmJiBzZWN0IDw9IDMxKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTZWNfUHJvdFNFID09IDMyICYmIEFTUF9Qcm90U0UgPT0gMzIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1NlY3RvciBlcmFzZSBjb21tYW5kIGlzIGFwcGxpZWQgdG8gYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy82NCBLQiByYW5nZSB0aGF0IGluY2x1ZGVzIDQgS0Igc2VjdG9ycy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0X3N0YXRlID0gIFNFQ1RPUl9FUlM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKChJbnN0cnVjdCA9PSBQNEUgfHwgSW5zdHJ1Y3QgPT0gUDRFNCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIFdFTCA9PSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJldHVyblNlY3RvcklEKHNlY3QsQWRkcmVzcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChVbmlmb3JtU2VjIHx8IChUb3BCb290ICYmIHNlY3QgPCA1MTApIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCb3R0b21Cb290ICYmIHNlY3QgPiAzMSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSgiVGhlIGluc3RydWN0aW9uIGlzIGFwcGxpZWQgdG8iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5KCJhIHNlY3RvciB0aGF0IGlzIGxhcmdlciB0aGFuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSgiNCBLQi4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5KCJJbnN0cnVjdGlvbiBpcyBpZ25vcmVkISEhIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFNlY19Qcm90W3NlY3RdPT0gMCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUEJfYml0c1tzZWN0XT09IDEgJiYgRFlCX2JpdHNbc2VjdF09PSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfc3RhdGUgPSAgU0VDVE9SX0VSUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gQkUgJiYgV0VMID09IDEgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFN0YXR1c19yZWcxWzRdPT0gMCAmJiBTdGF0dXNfcmVnMVszXT09IDAgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzJdPT0gMCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfc3RhdGUgPSBCVUxLX0VSUzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBBQldSICYmIFdFTCA9PSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0F1dG9ib290IFJlZ2lzdGVyIFdyaXRlIENvbW1hbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZSA9IEFVVE9CT09UX1BHOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IEJSV1IpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vQmFuayBSZWdpc3RlciBXcml0ZSBDb21tYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfc3RhdGUgPSBJRExFOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IEFTUFAgJiYgV0VMID09IDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9BU1AgUmVnaXN0ZXIgUHJvZ3JhbSBDb21tYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh+KEFTUE9UUEZMQUcpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZSA9IEFTUF9QRzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBQTEJXUiAmJiBXRUwgPT0gMSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJkUHN3ZFByb3RFbmFibGUgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZSA9IFBMQl9QRzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBQQVNTUCAmJiBXRUwgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAofihQV0RNTEI9PSAwICYmIFBTVE1MQj09IDEpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZSA9IFBBU1NfUEc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gUEFTU1UgJiYgV0VMICYmIH5XSVApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfc3RhdGUgPSBQQVNTX1VOTE9DSzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBQUEJQICYmIFdFTCA9PSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0X3N0YXRlIDw9IFBQQl9QRzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBQUEJFUlMgJiYgV0VMICYmIFBQQk9UUCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZSA8PSBQUEJfRVJTOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IERZQldSICYmIFdFTCA9PSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0X3N0YXRlID0gRFlCX1BHOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFBOVkRMUiAmJiBXRUwgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZSA9IE5WRExSX1BHOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZSA9IElETEU7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmYWxsaW5nX2VkZ2Vfd3JpdGUgJiYgUmRQc3dkUHJvdE1vZGUgPT0gMSAmJiB+V0lQKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdHJ1Y3QgPT0gUEFTU1UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfc3RhdGUgPSBQQVNTX1VOTE9DSzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgICAgICBBVVRPQk9PVCA6CisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmlzaW5nX2VkZ2VfQ1NOZWdfaXBkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfc3RhdGUgPSBJRExFOworICAgICAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgICAgICBXUklURV9TUiA6CisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmlzaW5nX2VkZ2VfV0RPTkUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZSA9IElETEU7CisgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgIFBBR0VfUEcgOgorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFBSR1NVU1Bfb3V0X2V2ZW50ICYmIFBSR1NVU1Bfb3V0ID09IDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZSA9IFBHX1NVU1A7CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChyaXNpbmdfZWRnZV9QRE9ORSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0X3N0YXRlID0gSURMRTsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgUEdfU1VTUCA6CisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmFsbGluZ19lZGdlX3dyaXRlKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdHJ1Y3QgPT0gQlJXUikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9CYW5rIFJlZ2lzdGVyIFdyaXRlIENvbW1hbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZSA9IFBHX1NVU1A7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gUEdSUykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZSA9IFBBR0VfUEc7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgT1RQX1BHIDoKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyaXNpbmdfZWRnZV9QRE9ORSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0X3N0YXRlID0gSURMRTsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgQlVMS19FUlMgOgorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJpc2luZ19lZGdlX0VET05FKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfc3RhdGUgPSBJRExFOworICAgICAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgICAgICBTRUNUT1JfRVJTIDoKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChFUlNTVVNQX291dF9ldmVudCAmJiBFUlNTVVNQX291dCA9PSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfc3RhdGUgPSBFUlNfU1VTUDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJpc2luZ19lZGdlX0VET05FKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfc3RhdGUgPSBJRExFOworICAgICAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgICAgICBFUlNfU1VTUCA6CisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmFsbGluZ19lZGdlX3dyaXRlKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEluc3RydWN0ID09IFBQIHx8IEluc3RydWN0ID09IFFQUCB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPT0gUFA0IHx8IEluc3RydWN0ID09IFFQUDQpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUwgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKFBBUkFNX1JFR0lPTiAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlY3RvclN1c3BlbmQgIT0gQWRkcmVzcy8oU2VjU2l6ZSsxKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKH5QQVJBTV9SRUdJT04gJiYgU2VjdG9yU3VzcGVuZCAhPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3MvKFNlY1NpemUrMSkrMzAqYl9hY3QpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmV0dXJuU2VjdG9ySUQoc2VjdCxBZGRyZXNzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnbV9wYWdlID0gQWRkcmVzcyAvIChQYWdlU2l6ZSsxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChQUEJfYml0c1tzZWN0XT09IDEgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEWUJfYml0c1tzZWN0XT09IDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfc3RhdGUgPSBFUlNfU1VTUF9QRzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBCUldSKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vQmFuayBSZWdpc3RlciBXcml0ZSBDb21tYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfc3RhdGUgPSBFUlNfU1VTUDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBEWUJXUiAmJiBXRUwgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZSA9IERZQl9QRzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICAoSW5zdHJ1Y3QgPT0gRVJSUykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZSA9IFNFQ1RPUl9FUlM7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgRVJTX1NVU1BfUEcgOgorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJpc2luZ19lZGdlX1BET05FKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfc3RhdGUgPSBFUlNfU1VTUDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKFBSR1NVU1Bfb3V0X2V2ZW50ICYmIFBSR1NVU1Bfb3V0ID09IDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZSA9IEVSU19TVVNQX1BHX1NVU1A7CisgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgIEVSU19TVVNQX1BHX1NVU1AgOgorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJpc2luZ19lZGdlX1BET05FKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfc3RhdGUgPSBFUlNfU1VTUDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmYWxsaW5nX2VkZ2Vfd3JpdGUpCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0cnVjdCA9PSBCUldSKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfc3RhdGUgPSAgRVJTX1NVU1BfUEdfU1VTUDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBQR1JTKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfc3RhdGUgPSAgRVJTX1NVU1BfUEc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgUEFTU19QRyA6CisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGlmIChyaXNpbmdfZWRnZV9QRE9ORSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfc3RhdGUgPSBJRExFOworICAgICAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgICAgICBQQVNTX1VOTE9DSyA6CisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGlmIChmYWxsaW5nX2VkZ2VfUEFTU1VMQ0tfaW4pCisgICAgICAgICAgICAgICAgICAgICAgICBuZXh0X3N0YXRlID0gSURMRTsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgUFBCX1BHIDoKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgaWYgKHJpc2luZ19lZGdlX1BET05FKQorICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZSA9IElETEU7CisgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgIFBQQl9FUlMgOgorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBpZiAoZmFsbGluZ19lZGdlX1BQQkVSQVNFX2luKQorICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZSA9IElETEU7CisgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgIEFVVE9CT09UX1BHIDoKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgaWYgKHJpc2luZ19lZGdlX1BET05FKQorICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZSA9IElETEU7CisgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgIFBMQl9QRyA6CisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGlmIChyaXNpbmdfZWRnZV9QRE9ORSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfc3RhdGUgPSBJRExFOworICAgICAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgICAgICBEWUJfUEcgOgorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBpZiAocmlzaW5nX2VkZ2VfUERPTkUpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoRVMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZSA9IEVSU19TVVNQOworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfc3RhdGUgPSBJRExFOworICAgICAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgICAgICBBU1BfUEcgOgorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBpZiAocmlzaW5nX2VkZ2VfUERPTkUpCisgICAgICAgICAgICAgICAgICAgICAgICBuZXh0X3N0YXRlID0gSURMRTsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIE5WRExSX1BHIDoKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgaWYgKHJpc2luZ19lZGdlX1BET05FKQorICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZSA9IElETEU7CisgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgZW5kY2FzZQorICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorICAgIGVuZAorCisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgLy9GU00gT3V0cHV0IGdlbmVyYXRpb24gYW5kIGdlbmVyYWwgZnVuY3Rpb25hbGl0eQorICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgIHJlZyByaXNpbmdfZWRnZV9yZWFkX291dCA9IDEnYjA7CisgICAgcmVnIEluc3RydWN0X2V2ZW50ICAgICAgID0gMSdiMDsKKyAgICByZWcgY2hhbmdlX2FkZHJfZXZlbnQgICAgPSAxJ2IwOworICAgIHJlZyBjdXJyZW50X3N0YXRlX2V2ZW50ICA9IDEnYjA7CisgICAgcmVnIHJpc2luZ19lZGdlX0RQX291dCAgID0gMSdiMDsKKworICAgIGludGVnZXIgV0RhdGEgWzA6NTExXTsKKyAgICBpbnRlZ2VyIFdPVFBEYXRhOworICAgIGludGVnZXIgQWRkcjsKKyAgICBpbnRlZ2VyIEFkZHJfdG1wOworCisgICAgYWx3YXlzIEAoSW5zdHJ1Y3RfZXZlbnQpCisgICAgYmVnaW4KKyAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICBieXRlX2NudCA9IDE7CisgICAgICAgIHJkX2Zhc3QgID0gMSdiMTsKKyAgICAgICAgZHVhbCAgICAgPSAxJ2IwOworICAgICAgICByZF9zbG93ICA9IDEnYjA7CisgICAgICAgIGFueV9yZWFkID0gMSdiMDsKKyAgICBlbmQKKworICAgIGFsd2F5cyBAKHJpc2luZ19lZGdlX3JlYWRfb3V0KQorICAgIGJlZ2luCisgICAgICAgIGlmIChyaXNpbmdfZWRnZV9yZWFkX291dCA9PSAxJ2IxKQorICAgICAgICBiZWdpbgorICAgICAgICAgICAgaWYgKFBvd2VyZWRVcCA9PSAxJ2IxKQorICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICBvZV96ID0gMSdiMTsKKyAgICAgICAgICAgICAgICAjMTAwMCBvZV96ID0gMSdiMDsKKyAgICAgICAgICAgICAgICBvZSA9IDEnYjE7CisgICAgICAgICAgICAgICAgIzEwMDAgb2UgPSAxJ2IwOworICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorICAgIGVuZAorCisgICAgYWx3YXlzIEAoY2hhbmdlX2FkZHJfZXZlbnQpCisgICAgYmVnaW4KKyAgICAgICAgaWYgKGNoYW5nZV9hZGRyX2V2ZW50KQorICAgICAgICBiZWdpbgorICAgICAgICAgICAgcmVhZF9hZGRyID0gQWRkcmVzczsKKyAgICAgICAgZW5kCisgICAgZW5kCisKKyAgICBhbHdheXMgQChwb3NlZGdlIFBBU1NBQ0Nfb3V0KQorICAgIGJlZ2luCisgICAgICAgIFN0YXR1c19yZWcxWzBdID0gMSdiMDsgLy9XSVAKKyAgICAgICAgUEFTU0FDQ19pbiA9IDEnYjA7CisgICAgZW5kCisKKyAgICBhbHdheXMgQChJbnN0cnVjdCBvciBwb3NlZGdlIHN0YXJ0X2F1dG9ib290IG9yIG9lIG9yIGN1cnJlbnRfc3RhdGVfZXZlbnQgb3IKKyAgICAgICAgICAgICBmYWxsaW5nX2VkZ2Vfd3JpdGUgb3IgcG9zZWRnZSBQRE9ORSBvciBwb3NlZGdlIFdET05FIG9yIG9lX3ogb3IKKyAgICAgICAgICAgICBwb3NlZGdlIEVET05FIG9yIEVSU1NVU1Bfb3V0IG9yIHJpc2luZ19lZGdlX1Jlc2V0ZWQgb3IKKyAgICAgICAgICAgICByaXNpbmdfZWRnZV9Qb3dlcmVkVXAgb3IgcmlzaW5nX2VkZ2VfQ1NOZWdfaXBkIG9yIFBSR1NVU1Bfb3V0IG9yCisgICAgICAgICAgICAgQWRkcmVzcykKKyAgICBiZWdpbjogRnVuY3Rpb25hbGl0eQorICAgIGludGVnZXIgaSxqOworICAgIGludGVnZXIgc2VjdDsKKworICAgICAgICBpZiAocmlzaW5nX2VkZ2VfUG93ZXJlZFVwKQorICAgICAgICBiZWdpbgorICAgICAgICAgICAgLy90aGUgZGVmYXVsdCBjb25kaXRpb24gYWZ0ZXIgcG93ZXItdXAKKyAgICAgICAgICAgIC8vVGhlIEJhbmsgQWRkcmVzcyBSZWdpc3RlciBpcyBsb2FkZWQgdG8gYWxsIHplcm9lcworICAgICAgICAgICAgQmFua19BZGRyX3JlZyA9IDgnaDA7CisgICAgICAgICAgICAvL1RoZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIEZSRUVaRSBiaXQgaXMgY2xlYXJlZC4KKyAgICAgICAgICAgIENvbmZpZ19yZWcxWzBdID0gMDsKKyAgICAgICAgICAgIC8vVGhlIFdFTCBiaXQgaXMgY2xlYXJlZC4KKyAgICAgICAgICAgIFN0YXR1c19yZWcxWzFdID0gMDsKKyAgICAgICAgICAgIC8vV2hlbiBCUE5WIGlzIHNldCB0byAnMScuIHRoZSBCUDItMCBiaXRzIGluIFN0YXR1cyBSZWdpc3RlciBhcmUKKyAgICAgICAgICAgIC8vdm9sYXRpbGUgYW5kIHdpbGwgYmUgcmVzZXQgYmluYXJ5IDExMSBhZnRlciBwb3dlci1vbiByZXNldAorICAgICAgICAgICAgaWYgKEJQTlYgPT0gMSAgJiYgRlJFRVpFID09IDAgKSAvLyYmIExPQ0sgPT0gMAorICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVs0XSA9IDEnYjA7Ly8gQlAyCisgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbM10gPSAxJ2IwOy8vIEJQMQorICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzJdID0gMSdiMDsvLyBCUDAKKyAgICAgICAgICAgICAgICBCUF9iaXRzID0ge1N0YXR1c19yZWcxWzRdLFN0YXR1c19yZWcxWzNdLFN0YXR1c19yZWcxWzJdfTsKKyAgICAgICAgICAgICAgICBjaGFuZ2VfQlAgPSAxJ2IxOworICAgICAgICAgICAgICAgICMxMDAwIGNoYW5nZV9CUCA9IDEnYjA7CisgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgLy9BcyBzaGlwcGVkIGZyb20gdGhlIGZhY3RvcnksIGFsbCBkZXZpY2VzIGRlZmF1bHQgQVNQIHRvIHRoZQorICAgICAgICAgICAgLy9QZXJzaXN0ZW50IFByb3RlY3Rpb24gbW9kZSwgd2l0aCBhbGwgc2VjdG9ycyB1bnByb3RlY3RlZCwKKyAgICAgICAgICAgIC8vd2hlbiBwb3dlciBpcyBhcHBsaWVkLiBUaGUgZGV2aWNlIHByb2dyYW1tZXIgb3IgaG9zdCBzeXN0ZW0gbXVzdAorICAgICAgICAgICAgLy90aGVuIGNob29zZSB3aGljaCBzZWN0b3IgcHJvdGVjdGlvbiBtZXRob2QgdG8gdXNlLgorICAgICAgICAgICAgLy9Gb3IgUGVyc2lzdGVudCBQcm90ZWN0aW9uIG1vZGUsIFBQQkxPQ0sgZGVmYXVsdHMgdG8gIjEiCisgICAgICAgICAgICBQUEJMWzBdID0gMSdiMTsKKworICAgICAgICAgICAgLy9BbGwgdGhlIERZQiBwb3dlci11cCBpbiB0aGUgdW5wcm90ZWN0ZWQgc3RhdGUKKyAgICAgICAgICAgIERZQl9iaXRzID0gezU0MnsxJ2IxfX07CisKKyAgICAgICAgZW5kCisKKyAgICAgICAgaWYgKEluc3RydWN0ID09IFJFU0VUKQorICAgICAgICBiZWdpbgorICAgICAgICAgICAgLy9FWFRBREQgaXMgY2xlYXJlZCB0byDigJww4oCdCisgICAgICAgICAgICBCYW5rX0FkZHJfcmVnWzddID0gMSdiMDsKKyAgICAgICAgICAgIC8vUF9FUlIgYml0IGlzIGNsZWFyZWQKKyAgICAgICAgICAgIFN0YXR1c19yZWcxWzZdID0gMSdiMDsKKyAgICAgICAgICAgIC8vRV9FUlIgYml0IGlzIGNsZWFyZWQKKyAgICAgICAgICAgIFN0YXR1c19yZWcxWzVdID0gMSdiMDsKKyAgICAgICAgICAgIC8vVGhlIFdFTCBiaXQgaXMgY2xlYXJlZC4KKyAgICAgICAgICAgIFN0YXR1c19yZWcxWzFdID0gMSdiMDsKKyAgICAgICAgICAgIC8vVGhlIFdJUCBiaXQgaXMgY2xlYXJlZC4KKyAgICAgICAgICAgIFN0YXR1c19yZWcxWzBdID0gMSdiMDsKKyAgICAgICAgICAgIC8vVGhlIEVTIGJpdCBpcyBjbGVhcmVkLgorICAgICAgICAgICAgU3RhdHVzX3JlZzJbMV0gPSAxJ2IwOworICAgICAgICAgICAgLy9UaGUgUFMgYml0IGlzIGNsZWFyZWQuCisgICAgICAgICAgICBTdGF0dXNfcmVnMlswXSA9IDEnYjA7CisgICAgICAgICAgICAvL1doZW4gQlBOViBpcyBzZXQgdG8gJzEnLiB0aGUgQlAyLTAgYml0cyBpbiBTdGF0dXMKKyAgICAgICAgICAgIC8vUmVnaXN0ZXIgYXJlIHZvbGF0aWxlIGFuZCB3aWxsIGJlIHJlc2V0ZWQgYWZ0ZXIKKyAgICAgICAgICAgIC8vcmVzZXQgY29tbWFuZAorICAgICAgICAgICAgaWYgKEJQTlYgPT0gMSAgJiYgRlJFRVpFID09IDApIC8vJiYgTE9DSz09IDAKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbNF0gPSAxJ2IxOworICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzNdID0gMSdiMTsKKyAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVsyXSA9IDEnYjE7CisKKyAgICAgICAgICAgICAgICBCUF9iaXRzID0ge1N0YXR1c19yZWcxWzRdLFN0YXR1c19yZWcxWzNdLAorICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMl19OworICAgICAgICAgICAgICAgIGNoYW5nZV9CUCA9IDEnYjE7CisgICAgICAgICAgICAgICAgIzEwMDAgY2hhbmdlX0JQID0gMSdiMDsKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKworICAgICAgICBjYXNlIChjdXJyZW50X3N0YXRlKQorICAgICAgICAgICAgSURMRSA6CisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IxOworICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgIEFTUF9Qcm90U0UgPSAwOworICAgICAgICAgICAgICAgIFNlY19Qcm90U0UgPSAwOworCisgICAgICAgICAgICAgICAgaWYgKEJvdHRvbUJvb3QpCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgZm9yIChqPTMxO2o+PTA7aj1qLTEpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUFBCX2JpdHNbal0gPT0gMSAmJiBEWUJfYml0c1tqXSA9PSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU1BfUHJvdFNFID0gQVNQX1Byb3RTRSArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTZWNfUHJvdFtqXSA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWNfUHJvdFNFID0gU2VjX1Byb3RTRSArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZWxzZSBpZiAoVG9wQm9vdCkKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBmb3IgKGo9NTQxO2o+PTUxMDtqPWotMSkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChQUEJfYml0c1tqXSA9PSAxICYmIERZQl9iaXRzW2pdID09IDEpCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTUF9Qcm90U0UgPSBBU1BfUHJvdFNFICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFNlY19Qcm90W2pdID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlY19Qcm90U0UgPSBTZWNfUHJvdFNFICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgIGlmIChmYWxsaW5nX2VkZ2Vfd3JpdGUgJiYgUmRQc3dkUHJvdE1vZGUgPT0gMSkKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBpZihJbnN0cnVjdCA9PSBQQVNTVSkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh+V0lQKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQVNTVUxDS19pbiA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMF0gPSAxJ2IxOyAvL1dJUAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiVGhlIFBBU1NVIGNvbW1hbmQgY2Fubm90IGJlIGFjY2VwdGVkIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCIgYW55IGZhc3RlciB0aGFuIG9uY2UgZXZlcnkgMTAwdXMiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gQ0xTUikKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy9UaGUgQ2xlYXIgU3RhdHVzIFJlZ2lzdGVyIENvbW1hbmQgcmVzZXRzIGJpdCBTUjFbNV0KKyAgICAgICAgICAgICAgICAgICAgLy8oRXJhc2UgRmFpbCBGbGFnKSBhbmQgYml0IFNSMVs2XSAoUHJvZ3JhbSBGYWlsIEZsYWcpCisgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVs1XSA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVs2XSA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgaWYgKGZhbGxpbmdfZWRnZV93cml0ZSAmJiBSZFBzd2RQcm90TW9kZSA9PSAwKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgYnl0ZV9jbnQgPSAxOworICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdHJ1Y3QgPT0gV1JFTikKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzFdID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gV1JESSkKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzFdID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKEluc3RydWN0ID09IFdSUikgJiYgV0VMID09IDEgJiYgV0RPTkUgPT0gMSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQkFSX0FDQyA9PSAwKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgofihTUldEID09IDEgJiYgfldQTmVnX2luKSkmJiB+UVVBRCkgfHwgUVVBRCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgoVEJQUk9UPT0xICYmIENvbmZpZ19yZWcxX2luWzVdPT0xJ2IwKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFRCUEFSTT09MSAmJiBDb25maWdfcmVnMV9pblsyXT09MSdiMCkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCUE5WICA9PTEgJiYgQ29uZmlnX3JlZzFfaW5bM109PTEnYjApKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ZnX3dyaXRlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFBfRVJSIGJpdCBpcyBzZXQgdG8gMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVs2XSA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FuIG5vdCBleGVjdXRlIGlmIEhhcmR3YXJlIFByb3RlY3Rpb24gTW9kZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlzIGVudGVyZWQgb3IgaWYgV0VMIGJpdCBpcyB6ZXJvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdTVEFSVCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdTVEFSVCA8PSAjNSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVswXSA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVsxXSA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgoSW5zdHJ1Y3QgPT0gUFAgfHwgSW5zdHJ1Y3QgPT0gUFA0KSAmJiBXRUwgPT0xICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQRE9ORSA9PSAxICkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIFJldHVyblNlY3RvcklEKHNlY3QsQWRkcmVzcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoU2VjX1Byb3Rbc2VjdF0gPT0gMCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBQQl9iaXRzW3NlY3RdPT0gMSAmJiBEWUJfYml0c1tzZWN0XT09IDEpCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBTVEFSVCAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBTVEFSVCA8PSAjNSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBHU1VTUCAgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBHUkVTICAgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOSVRJQUxfQ09ORklHID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVswXSA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0EgICAgICA9IHNlY3Q7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkciAgICA9IEFkZHJlc3M7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcl90bXA9IEFkZHJlc3M7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JfY250ICA9IEJ5dGVfbnVtYmVyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaT13cl9jbnQ7aT49MDtpPWktMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoVmlvbCAhPSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0RhdGFbaV0gPSAtMTsKKwkJCSAgICAgICAgZWxzZSBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdEYXRhW2ldID0gV0J5dGVbaV07CisJCQkJCS8vJGRpc3BsYXkoIiVtOiBMb2M6ICV4IFdEYXRhOiAleCIsaSxXRGF0YVtpXSk7CisJCQkgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgLy9QX0VSUiBiaXQgd2lsbCBiZSBzZXQgd2hlbiB0aGUgdXNlciBhdHRlbXB0cyB0bworICAgICAgICAgICAgICAgICAgICAgICAgLy90byBwcm9ncmFtIHdpdGhpbiBhIHByb3RlY3RlZCBtYWluIG1lbW9yeSBzZWN0b3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVs2XSA9IDEnYjE7IC8vUF9FUlIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVsxXSA9IDEnYjA7IC8vV0VMCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKChJbnN0cnVjdCA9PSBRUFAgfHwgSW5zdHJ1Y3QgPT0gUVBQNCkgJiYgV0VMID09MSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUERPTkUgPT0gMSApCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBSZXR1cm5TZWN0b3JJRChzZWN0LEFkZHJlc3MpOworICAgICAgICAgICAgICAgICAgICAgICAgcGdtX3BhZ2UgPSBBZGRyZXNzIC8gKFBhZ2VTaXplKzEpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFNlY19Qcm90W3NlY3RdID09IDAgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUEJfYml0c1tzZWN0XT09IDEgJiYgRFlCX2JpdHNbc2VjdF09PSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQU1RBUlQgID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQU1RBUlQgPD0gIzUgMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQR1NVU1AgID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQR1JFUyAgID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTklUSUFMX0NPTkZJRyA9IDE7CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICBRUFBfcGFnZVtwZ21fcGFnZV0gPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzBdID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQSAgICAgID0gc2VjdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyICAgID0gQWRkcmVzczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyX3RtcD0gQWRkcmVzczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cl9jbnQgID0gQnl0ZV9udW1iZXI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpPXdyX2NudDtpPj0wO2k9aS0xKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChWaW9sICE9IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRGF0YVtpXSA9IC0xOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRGF0YVtpXSA9IFdCeXRlW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgLy9QX0VSUiBiaXQgd2lsbCBiZSBzZXQgd2hlbiB0aGUgdXNlciBhdHRlbXB0cyB0bworICAgICAgICAgICAgICAgICAgICAgICAgLy90byBwcm9ncmFtIHdpdGhpbiBhIHByb3RlY3RlZCBtYWluIG1lbW9yeSBzZWN0b3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVs2XSA9IDEnYjE7IC8vUF9FUlIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVsxXSA9IDEnYjA7IC8vV0VMCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IE9UUFAgJiYgV0VMID09IDEpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBBcyBsb25nIGFzIHRoZSBGUkVFWkUgYml0IHJlbWFpbnMgY2xlYXJlZCB0byBhIGxvZ2ljCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAnMCcgdGhlIE9UUCBhZGRyZXNzIHNwYWNlIGlzIHByb2dyYW1tYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChGUkVFWkUgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgoKChBZGRyZXNzPj0gMTYnaDAwMTAgJiYgQWRkcmVzczw9IDE2J2gwMDEzKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQWRkcmVzcyA+PSAxNidoMDAyMCAmJiBBZGRyZXNzIDw9IDE2J2gwMEZGKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgTE9DS19CWVRFMVtBZGRyZXNzLzMyXSA9PSAxKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEFkZHJlc3MgPj0gMTYnaDAxMDAgJiYgQWRkcmVzcyA8PSAxNidoMDFGRikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgTE9DS19CWVRFMlsoQWRkcmVzcy0xNidoMDEwMCkvMzJdID09IDEpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQWRkcmVzcyA+PSAxNidoMDIwMCAmJiBBZGRyZXNzIDw9IDE2J2gwMkZGKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBMT0NLX0JZVEUzWyhBZGRyZXNzLTE2J2gwMjAwKS8zMl0gPT0gMSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChBZGRyZXNzID49IDE2J2gwMzAwICYmIEFkZHJlc3MgPD0gMTYnaDAzRkYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIExPQ0tfQllURTRbKEFkZHJlc3MtMTYnaDAzMDApLzMyXSA9PSAxKSkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEFkZHJlc3MgKyBCeXRlX251bWJlciA8PSBPVFBIaUFkZHIpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBTVEFSVCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBTVEFSVCA8PSAjNSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVswXSA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHIgICAgPSBBZGRyZXNzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyX3RtcD0gQWRkcmVzczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JfY250ICA9IEJ5dGVfbnVtYmVyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGk9d3JfY250O2k+PTA7aT1pLTEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoVmlvbCAhPSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdEYXRhW2ldID0gLTE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0RhdGFbaV0gPSBXQnl0ZVtpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKEFkZHJlc3MgPCA4J2gxMCB8fCAoQWRkcmVzcyA+IDgnaDEzICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzIDwgOCdoMjApIHx8IEFkZHJlc3MgPiAxMidoM0ZGICkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbNl0gPSAxJ2IxOy8vUF9FUlIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMV0gPSAxJ2IwOy8vV0VMCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBZGRyZXNzIDwgOCdoMjApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIkdpdmVuICBhZGRyZXNzIGlzICIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJpbiByZXNlcnZlZCBhZGRyZXNzIHJhbmdlIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChBZGRyZXNzID4gMTInaDNGRikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiR2l2ZW4gIGFkZHJlc3MgaXMgIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIm91dCBvZiBPVFAgYWRkcmVzcyByYW5nZSIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1BfRVJSIGJpdCB3aWxsIGJlIHNldCB3aGVuIHRoZSB1c2VyIGF0dGVtcHRzIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8gcHJvZ3JhbSB3aXRoaW4gbG9ja2VkIE9UUCByZWdpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbNl0gPSAxJ2IxOy8vUF9FUlIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMV0gPSAxJ2IwOy8vV0VMCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAvL1BfRVJSIGJpdCB3aWxsIGJlIHNldCB3aGVuIHRoZSB1c2VyIGF0dGVtcHRzIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAvL3RvIHByb2dyYW0gd2l0aGluIGxvY2tlZCBPVFAgcmVnaW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbNl0gPSAxJ2IxOy8vUF9FUlIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVsxXSA9IDEnYjA7Ly9XRUwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKEluc3RydWN0ID09IFNFIHx8IEluc3RydWN0ID09IFNFNCkgJiYgV0VMID09IDEpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBSZXR1cm5TZWN0b3JJRChzZWN0LEFkZHJlc3MpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFVuaWZvcm1TZWMgfHwgKFRvcEJvb3QgJiYgc2VjdCA8IDUxMCkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChCb3R0b21Cb290ICYmIHNlY3QgPiAzMSkpCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlY3RvclN1c3BlbmQgPSBzZWN0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBBUkFNX1JFR0lPTiAgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTZWNfUHJvdFtzZWN0XSA9PSAwICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFBCX2JpdHNbc2VjdF09PSAxICYmIERZQl9iaXRzW3NlY3RdPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFU1RBUlQgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFU1RBUlQgPD0gIzUgMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVNVU1AgICAgID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVJFUyAgICAgID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5JVElBTF9DT05GSUcgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVswXSA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHIgPSBBZGRyZXNzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vRV9FUlIgYml0IHdpbGwgYmUgc2V0IHdoZW4gdGhlIHVzZXIgYXR0ZW1wdHMgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2VyYXNlIGFuIGluZGl2aWR1YWwgcHJvdGVjdGVkIG1haW4gbWVtb3J5IHNlY3RvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVs1XSA9IDEnYjE7Ly9FX0VSUgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVsxXSA9IDEnYjA7Ly9XRUwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKFRvcEJvb3QgJiYgc2VjdCA+PSA1MTApIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCb3R0b21Cb290ICYmIHNlY3QgPD0gMzEpKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoU2VjX1Byb3RTRSA9PSAzMiAmJiBBU1BfUHJvdFNFID09IDMyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vU2VjdG9yIGVyYXNlIGNvbW1hbmQgaXMgYXBwbGllZCB0byBhIDY0IEtCIHJhbmdlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy90aGF0IGluY2x1ZGVzIDQgS0Igc2VjdG9ycworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChUb3BCb290KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VjdG9yU3VzcGVuZCA9IDUxMCArICg1NDEgLSBzZWN0KS8xNjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlY3RvclN1c3BlbmQgPSBzZWN0LzE2OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEFSQU1fUkVHSU9OICA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVTVEFSVCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVTVEFSVCA8PSAjNSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFU1VTUCAgICAgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFUkVTICAgICAgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTklUSUFMX0NPTkZJRyA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzBdID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkciA9IEFkZHJlc3M7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9FX0VSUiBiaXQgd2lsbCBiZSBzZXQgd2hlbiB0aGUgdXNlciBhdHRlbXB0cyB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vZXJhc2UgYW4gaW5kaXZpZHVhbCBwcm90ZWN0ZWQgbWFpbiBtZW1vcnkgc2VjdG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzVdID0gMSdiMTsvL0VfRVJSCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzFdID0gMSdiMDsvL1dFTAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgoSW5zdHJ1Y3QgPT0gUDRFIHx8IEluc3RydWN0ID09IFA0RTQpICYmIFdFTCA9PSAxKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgUmV0dXJuU2VjdG9ySUQoc2VjdCxBZGRyZXNzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChVbmlmb3JtU2VjIHx8IChUb3BCb290ICYmIHNlY3QgPCA1MTApIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAoQm90dG9tQm9vdCAmJiBzZWN0ID4gMzEpKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVsxXSA9IDEnYjA7Ly9XRUwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoU2VjX1Byb3Rbc2VjdF0gPT0gMCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUEJfYml0c1tzZWN0XT09IDEgJiYgRFlCX2JpdHNbc2VjdF09PSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vQSBQNEUgaW5zdHJ1Y3Rpb24gYXBwbGllZCB0byBhIHNlY3RvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdGhhdCBoYXMgYmVlbiBXcml0ZSBQcm90ZWN0ZWQgdGhyb3VnaCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0Jsb2NrIFByb3RlY3QgQml0cyBvciBBU1Agd2lsbCBub3QgYmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2V4ZWN1dGVkIGFuZCB3aWxsIHNldCB0aGUgRV9FUlIgc3RhdHVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVNUQVJUID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVNUQVJUIDw9ICM1IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVTVVNQICAgICA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVSRVMgICAgICA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOSVRJQUxfQ09ORklHID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMF0gPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyID0gQWRkcmVzczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0VfRVJSIGJpdCB3aWxsIGJlIHNldCB3aGVuIHRoZSB1c2VyIGF0dGVtcHRzIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9lcmFzZSBhbiBpbmRpdmlkdWFsIHByb3RlY3RlZCBtYWluIG1lbW9yeSBzZWN0b3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbNV0gPSAxJ2IxOy8vRV9FUlIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMV0gPSAxJ2IwOy8vV0VMCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IEJFICYmIFdFTCA9PSAxKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFN0YXR1c19yZWcxWzRdPT0gMCAmJiBTdGF0dXNfcmVnMVszXT09IDAgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVsyXT09IDApCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVTVEFSVCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVNUQVJUIDw9ICM1IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVNVU1AgID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBFUkVTICAgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOSVRJQUxfQ09ORklHID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVswXSA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAvL1RoZSBCdWxrIEVyYXNlIGNvbW1hbmQgd2lsbCBub3Qgc2V0IEVfRVJSIGlmIGEKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vcHJvdGVjdGVkIHNlY3RvciBpcyBmb3VuZCBkdXJpbmcgdGhlIGNvbW1hbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vZXhlY3V0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzFdID0gMSdiMDsvL1dFTAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBQQVNTUCAmJiBXRUwgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh+KFBXRE1MQj09IDAgJiYgUFNUTUxCPT0gMSkpCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBTVEFSVCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFNUQVJUIDw9ICM1IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMF0gPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiUGFzc3dvcmQgcHJvZ3JhbW1pbmcgaXMgbm90IGFsbG93ZWQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIiBpbiBQYXNzd29yZCBQcm90ZWN0aW9uIE1vZGUuIik7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFBBU1NVICAmJiBXRUwpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAofldJUCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEFTU1VMQ0tfaW4gPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzBdID0gMSdiMTsgLy9XSVAKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIlRoZSBQQVNTVSBjb21tYW5kIGNhbm5vdCBiZSBhY2NlcHRlZCIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiIGFueSBmYXN0ZXIgdGhhbiBvbmNlIGV2ZXJ5IDEwMHVzIik7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IEJSV1IpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBCYW5rX0FkZHJfcmVnWzddID0gQmFua19BZGRyX3JlZ19pbls3XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEJhbmtfQWRkcl9yZWdbMF0gPSBCYW5rX0FkZHJfcmVnX2luWzBdOworICAgICAgICAgICAgICAgICAgICAgICAgaWYoQmFua19BZGRyX3JlZ19pblsxXSA9PSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIldBUk5JTkc6IENoYW5naW5nIHZhbHVlcyBvZiAiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIkJhbmsgQWRkcmVzcyBSZWdpc3RlciIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiQkEyNSBpcyBub3QgYWxsb3dlZCEhISIpOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBXUlIgJiYgQkFSX0FDQyA9PSAxKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAvLyBXcml0ZSB0byB0aGUgbG93ZXIgYWRkcmVzcyBiaXRzIG9mIHRoZSBCQVIKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChQX0VSUiA9PSAwICYmIEVfRVJSID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJhbmtfQWRkcl9yZWdbMF0gPSBCYW5rX0FkZHJfcmVnX2luWzBdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKEJhbmtfQWRkcl9yZWdfaW5bMV0gPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIldBUk5JTkc6IENoYW5naW5nIHZhbHVlcyBvZiAiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJCYW5rIEFkZHJlc3MgUmVnaXN0ZXIiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJCQTI1IGlzIG5vdCBhbGxvd2VkISEhIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IEFTUFAgICYmIFdFTCA9PSAxKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKH4oQVNQT1RQRkxBRykpCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBTVEFSVCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFNUQVJUIDw9ICM1IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMF0gICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzFdICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzZdID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIk9uY2UgdGhlIFByb3RlY3Rpb24gTW9kZSBpcyBzZWxlY3RlZCwiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIm5vIGZ1cnRoZXIgY2hhbmdlcyB0byB0aGUgQVNQICIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgicmVnaXN0ZXIgaXMgYWxsb3dlZC4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gQUJXUiAgJiYgV0VMID09IDEpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBQU1RBUlQgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgUFNUQVJUIDw9ICM1IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVswXSA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBQUEJQICAmJiBXRUwgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIFJldHVyblNlY3RvcklEKHNlY3QsQWRkcmVzcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBQU1RBUlQgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgUFNUQVJUIDw9ICM1IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVswXSA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBQUEJFUlMgICYmIFdFTCA9PSAxKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFBQQk9UUCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFBCRVJBU0VfaW4gPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzBdID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbNV0gPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBQTEJXUiAgJiYgV0VMID09IDEgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmRQc3dkUHJvdEVuYWJsZSA9PSAwKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgUFNUQVJUID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFBTVEFSVCA8PSAjNSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMF0gPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gRFlCV1IgICYmIFdFTCA9PSAxKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgUmV0dXJuU2VjdG9ySUQoc2VjdCxBZGRyZXNzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBnbV9wYWdlID0gQWRkcmVzcyAvIChQYWdlU2l6ZSsxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFBTVEFSVCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICBQU1RBUlQgPD0gIzUgMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzBdICAgID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFBOVkRMUiAgJiYgV0VMID09IDEpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBQU1RBUlQgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgUFNUQVJUIDw9ICM1IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVswXSAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBXVkRMUiAgJiYgV0VMID09IDEpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBWRExSX3JlZyA9IFZETFJfcmVnX2luOworICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMV0gPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gQ0xTUikKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy9UaGUgQ2xlYXIgU3RhdHVzIFJlZ2lzdGVyIENvbW1hbmQgcmVzZXRzIGJpdCBTUjFbNV0KKyAgICAgICAgICAgICAgICAgICAgLy8oRXJhc2UgRmFpbCBGbGFnKSBhbmQgYml0IFNSMVs2XSAoUHJvZ3JhbSBGYWlsIEZsYWcpCisgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVs1XSA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVs2XSA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0cnVjdCA9PSBCUkFDICYmIFBfRVJSID09IDAgJiYgRV9FUlIgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJBUl9BQ0MgPSAxOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgQkFSX0FDQyA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG9lX3opCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgaWYgKEluc3RydWN0ID09IFJFQUQgfHwgSW5zdHJ1Y3QgPT0gUkQ0IHx8CisgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9PSBSRVMgIHx8CisgICAgICAgICAgICAgICAgICAgICAgIChJbnN0cnVjdCA9PSBETFBSRCAmJiBSZFBzd2RQcm90TW9kZSA9PSAwKSkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICBkdWFsICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gRERSRlIgfHwgSW5zdHJ1Y3QgPT0gRERSRlI0KQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICByZF9zbG93ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBERFJESU9SIHx8IEluc3RydWN0ID09IEREUkRJT1I0IHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEluc3RydWN0ID09IEREUlFJT1IgfHwgSW5zdHJ1Y3QgPT0gRERSUUlPUjQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIFFVQUQpKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICByZF9zbG93ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBET1IgIHx8IEluc3RydWN0ID09IERPUjQgIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID09IERJT1IgfHwgSW5zdHJ1Y3QgPT0gRElPUjQgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSW5zdHJ1Y3QgPT0gUU9SICB8fCBJbnN0cnVjdCA9PSBRT1I0ICB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9PSBRSU9SIHx8IEluc3RydWN0ID09IFFJT1I0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBRVUFEKSkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBkdWFsICAgID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICByZF9zbG93ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBIT0xETmVnT3V0X3pkID0gMSdiWjsKKyAgICAgICAgICAgICAgICAgICAgV1BOZWdPdXRfemQgICA9IDEnYlo7CisgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgICAgICAgPSAxJ2JaOworICAgICAgICAgICAgICAgICAgICBTSU91dF96ZCAgICAgID0gMSdiWjsKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChvZSkKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBhbnlfcmVhZCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0cnVjdCA9PSBSRFNSKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAvL1JlYWQgU3RhdHVzIFJlZ2lzdGVyCisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gU3RhdHVzX3JlZzFbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFJEU1IyKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAvL1JlYWQgU3RhdHVzIFJlZ2lzdGVyCisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gU3RhdHVzX3JlZzJbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFJEQ1IpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAvL1JlYWQgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAxCisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gQ29uZmlnX3JlZzFbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IEVDQ1JEKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgLy9SZWFkIEVDQyBSZWdpc3RlcgorICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IEVDQ1NSWzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBSRUFEIHx8IEluc3RydWN0ID09IFJENCB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID09IEZTVFJEIHx8IEluc3RydWN0ID09IEZTVFJENCB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID09IEREUkZSIHx8IEluc3RydWN0ID09IEREUkZSNCApCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAvL1JlYWQgTWVtb3J5IGFycmF5CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdHJ1Y3QgPT0gUkVBRCB8fCBJbnN0cnVjdCA9PSBSRDQpCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBERFJGUiB8fCBJbnN0cnVjdCA9PSBERFJGUjQpCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEluc3RydWN0ID09IEREUkZSIHx8IEluc3RydWN0ID09IEREUkZSNCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVkRMUl9yZWcgIT0gOCdiMDAwMDAwMDApICYmIHN0YXJ0X2RscCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGF0YSBMZWFybmluZyBQYXR0ZXJuIChETFApIGlzIGVuYWJsZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPcHRpb25hbCBETFAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX291dFs3OjBdID0gVkRMUl9yZWc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCAgPSBkYXRhX291dFs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCAgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydF9kbHAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9hZGRyX3RtcCA9IHJlYWRfYWRkcjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWNBZGRyID0gcmVhZF9hZGRyLyhTZWNTaXplKzEpIDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWNfYWRkciA9IHJlYWRfYWRkciAtIFNlY0FkZHIqKFNlY1NpemUrMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VjQWRkciA9IFJldHVyblNlY3RvcklEUmRQc3dkTWQoVEJQUk9UKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2FkZHIgPSBTZWNfYWRkciArIFNlY0FkZHIqKFNlY1NpemUrMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFJkUHN3ZFByb3RNb2RlID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9hZGRyID0gcmVhZF9hZGRyX3RtcDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTWVtW3JlYWRfYWRkcl0gIT09IC0xKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfb3V0Wzc6MF0gPSBNZW1bcmVhZF9hZGRyXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCAgPSBkYXRhX291dFs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCAgPSA4J2J4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfYWRkciA9PSBBZGRyUkFOR0UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2FkZHIgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2FkZHIgPSByZWFkX2FkZHIgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBET1IgIHx8IEluc3RydWN0ID09IERPUjQgIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPT0gRElPUiB8fCBJbnN0cnVjdCA9PSBESU9SNCB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID09IEREUkRJT1IgfHwgSW5zdHJ1Y3QgPT0gRERSRElPUjQgKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgLy9SZWFkIE1lbW9yeSBhcnJheQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEluc3RydWN0ID09IEREUkRJT1IgfHwgSW5zdHJ1Y3QgPT0gRERSRElPUjQpCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEluc3RydWN0ID09IEREUkRJT1IgfHwgSW5zdHJ1Y3QgPT0gRERSRElPUjQpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFZETFJfcmVnICE9IDgnYjAwMDAwMDAwKSAmJiBzdGFydF9kbHApCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9vdXRbNzowXSA9IFZETFJfcmVnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgID0gZGF0YV9vdXRbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0lPdXRfemQgPSBkYXRhX291dFs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCAgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydF9kbHAgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfYWRkcl90bXAgPSByZWFkX2FkZHI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VjQWRkciA9IHJlYWRfYWRkci8oU2VjU2l6ZSsxKSA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VjX2FkZHIgPSByZWFkX2FkZHIgLSBTZWNBZGRyKihTZWNTaXplKzEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlY0FkZHIgPSBSZXR1cm5TZWN0b3JJRFJkUHN3ZE1kKFRCUFJPVCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9hZGRyID0gU2VjX2FkZHIgKyBTZWNBZGRyKihTZWNTaXplKzEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChSZFBzd2RQcm90TW9kZSA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2FkZHIgPSByZWFkX2FkZHJfdG1wOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9vdXRbNzowXSA9IE1lbVtyZWFkX2FkZHJdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSBkYXRhX291dFs3LTIqcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJT3V0X3pkID0gZGF0YV9vdXRbNi0yKnJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gNCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2FkZHIgPT0gQWRkclJBTkdFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9hZGRyID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9hZGRyID0gcmVhZF9hZGRyICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKEluc3RydWN0ID09IFFPUiAgfHwgSW5zdHJ1Y3QgPT0gUU9SNCB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID09IFFJT1IgfHwgSW5zdHJ1Y3QgPT0gUUlPUjQgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9PSBERFJRSU9SIHx8IEluc3RydWN0ID09IEREUlFJT1I0ICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBRVUFEKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgLy9SZWFkIE1lbW9yeSBhcnJheQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEluc3RydWN0ID09IEREUlFJT1IgfHwgSW5zdHJ1Y3QgPT0gRERSUUlPUjQpCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEluc3RydWN0ID09IEREUlFJT1IgfHwgSW5zdHJ1Y3QgPT0gRERSUUlPUjQpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFZETFJfcmVnICE9IDgnYjAwMDAwMDAwKSAmJiBzdGFydF9kbHApCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERhdGEgTGVhcm5pbmcgUGF0dGVybiAoRExQKSBpcyBlbmFibGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3B0aW9uYWwgRExQCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9vdXRbNzowXSA9IFZETFJfcmVnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhPTEROZWdPdXRfemQgPSBkYXRhX291dFs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBXUE5lZ091dF96ZCAgID0gZGF0YV9vdXRbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCAgID0gZGF0YV9vdXRbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0lPdXRfemQgICA9IGRhdGFfb3V0WzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ICA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2RscCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9hZGRyX3RtcCA9IHJlYWRfYWRkcjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWNBZGRyID0gcmVhZF9hZGRyLyhTZWNTaXplKzEpIDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWNfYWRkciA9IHJlYWRfYWRkciAtIFNlY0FkZHIqKFNlY1NpemUrMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VjQWRkciA9IFJldHVyblNlY3RvcklEUmRQc3dkTWQoVEJQUk9UKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2FkZHIgPSBTZWNfYWRkciArIFNlY0FkZHIqKFNlY1NpemUrMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFJkUHN3ZFByb3RNb2RlID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfYWRkciA9IHJlYWRfYWRkcl90bXA7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX291dFs3OjBdID0gTWVtW3JlYWRfYWRkcl07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSE9MRE5lZ091dF96ZCA9IGRhdGFfb3V0WzctNCpyZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgV1BOZWdPdXRfemQgICA9IGRhdGFfb3V0WzYtNCpyZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCAgID0gZGF0YV9vdXRbNS00KnJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTSU91dF96ZCAgID0gZGF0YV9vdXRbNC00KnJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gMikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2FkZHIgPT0gQWRkclJBTkdFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9hZGRyID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9hZGRyID0gcmVhZF9hZGRyICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gT1RQUikKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlYWRfYWRkcj49T1RQTG9BZGRyICYmIHJlYWRfYWRkcjw9T1RQSGlBZGRyCisgICAgICAgICAgICAgICAgICAgICAgICAmJiBSZFBzd2RQcm90TW9kZSA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBPVFAgTWVtb3J5IGFycmF5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9vdXRbNzowXSA9IE9UUE1lbVtyZWFkX2FkZHJdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgID0gZGF0YV9vdXRbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2FkZHIgPSByZWFkX2FkZHIgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgocmVhZF9hZGRyID4gT1RQSGlBZGRyKXx8KFJkUHN3ZFByb3RNb2RlPT0xKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAvL09UUCBSZWFkIG9wZXJhdGlvbiB3aWxsIG5vdCB3cmFwIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgLy9zdGFydGluZyBhZGRyZXNzIGFmdGVyIHRoZSBPVFAgYWRkcmVzcyBpcyBhdAorICAgICAgICAgICAgICAgICAgICAgICAgLy9pdHMgbWF4aW11bSBvciBSZWFkIFBhc3N3b3JkIFByb3RlY3Rpb24gTW9kZQorICAgICAgICAgICAgICAgICAgICAgICAgLy9pcyBzZWxlY3RlZCBpbnN0ZWFkLCB0aGUgZGF0YSBiZXlvbmQgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAvL21heGltdW0gT1RQIGFkZHJlc3Mgd2lsbCBiZSB1bmRlZmluZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IDEnYlg7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gUkVNUykKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBNYW51ZmFjdHVyZXIgYW5kIERldmljZSBJRAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfYWRkciAlIDIgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9vdXRbNzowXSA9IE1hbnVmX0lEOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSBkYXRhX291dFs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfYWRkciA9IHJlYWRfYWRkciArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9vdXRbNzowXSA9IERldmljZUlEOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSBkYXRhX291dFs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfYWRkciA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFJESUQpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBpZGVudF9vdXQgPSBDRklfYXJyYXlfdG1wOworICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVhZF9jbnQgPCA2NDgpCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSBpZGVudF9vdXRbNjQ3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCAgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAvL0NvbnRpbnVlZCBzaGlmdGluZyBvZiBvdXRwdXQgYmV5b25kIHRoZSBlbmQgb2YKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vdGhlIGRlZmluZWQgSUQtQ0ZJIGFkZHJlc3Mgc3BhY2Ugd2lsbAorICAgICAgICAgICAgICAgICAgICAgICAgLy9wcm92aWRlIHVuZGVmaW5lZCBkYXRhLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSAxJ2JYOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBSRVMpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICByZF9mYXN0ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBkZHIgICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfb3V0ID0gRVNpZ25hdHVyZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSBkYXRhX291dFs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gRExQUkQgJiYgUmRQc3dkUHJvdE1vZGUgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy9SZWFkIERMUAorICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICByZF9zbG93ID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gVkRMUl9yZWdbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IEFCUkQgJiYgUmRQc3dkUHJvdE1vZGUgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy9SZWFkIEF1dG9Cb290IHJlZ2lzdGVyCisgICAgICAgICAgICAgICAgICAgICAgICByZF9mYXN0ID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBkZHIgICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSBBdXRvQm9vdF9yZWdfaW5bMzEtcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDMyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IEJSUkQgJiYgUmRQc3dkUHJvdE1vZGUgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy9SZWFkIEJhbmsgQWRkcmVzcyBSZWdpc3RlcgorICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICByZF9zbG93ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gQmFua19BZGRyX3JlZ1s3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ICA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IEFTUFJEICYmIFJkUHN3ZFByb3RNb2RlID09IDApCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBBU1AgUmVnaXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBkdWFsICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IEFTUF9yZWdbMTUtcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDE2KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFBBU1NSRCAmJiBSZFBzd2RQcm90TW9kZSA9PSAwKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAvL1JlYWQgUGFzc3dvcmQgUmVnaXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh+KFBXRE1MQiA9PSAwICYmIFBTVE1MQiA9PSAxKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc3dvcmRfcmVnWyg4KmJ5dGVfY250LTEpLXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCAgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlX2NudCA9IGJ5dGVfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJ5dGVfY250ID09IDkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlX2NudCA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFBMQlJEKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAvL1JlYWQgUFBCIExvY2sgUmVnaXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBkdWFsICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IFBQQkxbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCAgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBEWUJSRCkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy9SZWFkIERZQiBBY2Nlc3MgUmVnaXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIFJldHVyblNlY3RvcklEKHNlY3QsQWRkcmVzcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBwZ21fcGFnZSA9IEFkZHJlc3MgLyAoUGFnZVNpemUrMSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZF9mYXN0ID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBkZHIgICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIERZQkFSWzc6MF0gPSA4J2JYWFhYWFhYWDsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFJkUHN3ZFByb3RNb2RlID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChEWUJfYml0c1tzZWN0XSA9PSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEWUJBUls3OjBdID0gOCdoRkY7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERZQkFSWzc6MF0gPSA4J2gwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gRFlCQVJbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCAgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBQUEJSRCkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy9SZWFkIFBQQiBBY2Nlc3MgUmVnaXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIFJldHVyblNlY3RvcklEKHNlY3QsQWRkcmVzcyk7CisgICAgICAgICAgICAgICAgICAgICAgICByZF9mYXN0ID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBkZHIgICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIFBQQkFSWzc6MF0gPSA4J2JYWFhYWFhYWDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChSZFBzd2RQcm90TW9kZSA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUFBCX2JpdHNbc2VjdF0gPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFBCQVJbNzowXSA9IDgnaEZGOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUEJBUls3OjBdID0gOCdoMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IFBQQkFSWzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICBBVVRPQk9PVDoKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgaWYgKHN0YXJ0X2F1dG9ib290ID09IDEpCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgaWYgKG9lKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgYW55X3JlYWQgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFFVQUQgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFCU0QgPiAwKSAgICAgIC8vSWYgQUJTRCA+IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4gICAgICAgICAgICAgIC8vbWF4IFNDSyBmcmVxdWVuY3kgaXMgMTA0TUh6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZF9zbG93ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgLy8gSWYgQUJTRCA9IDAsIG1heCBTQ0sgZnJlcXVlbmN5IGlzIDUwIE1IegorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZF9zbG93ID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfb3V0Wzc6MF0gPSBNZW1bcmVhZF9hZGRyXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBIT0xETmVnT3V0X3pkID0gZGF0YV9vdXRbNy00KnJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBXUE5lZ091dF96ZCAgID0gZGF0YV9vdXRbNi00KnJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkICAgPSBkYXRhX291dFs1LTQqcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJT3V0X3pkICAgPSBkYXRhX291dFs0LTQqcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9hZGRyID0gcmVhZF9hZGRyICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQUJTRCA+IDApICAgICAgLy9JZiBBQlNEID4gMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbiAgICAgICAgICAgICAgLy9tYXggU0NLIGZyZXF1ZW5jeSBpcyAxMzNNSHoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWFsICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSAvLyBJZiBBQlNEID0gMCwgbWF4IFNDSyBmcmVxdWVuY3kgaXMgNTAgTUh6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWFsICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9vdXRbNzowXSA9IE1lbVtyZWFkX2FkZHJdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSBkYXRhX291dFs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfYWRkciA9IHJlYWRfYWRkciArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG9lX3opCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUVVBRCA9PSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQUJTRCA+IDApICAgICAgLy9JZiBBQlNEID4gMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbiAgICAgICAgICAgICAgLy9tYXggU0NLIGZyZXF1ZW5jeSBpcyAxMDRNSHoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWFsICAgID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSAvLyBJZiBBQlNEID0gMCwgbWF4IFNDSyBmcmVxdWVuY3kgaXMgNTAgTUh6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWFsICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFCU0QgPiAwKSAgICAgIC8vSWYgQUJTRCA+IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4gICAgICAgICAgICAgIC8vbWF4IFNDSyBmcmVxdWVuY3kgaXMgMTMzTUh6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZF9zbG93ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgLy8gSWYgQUJTRCA9IDAsIG1heCBTQ0sgZnJlcXVlbmN5IGlzIDUwIE1IegorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZF9zbG93ID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBIT0xETmVnT3V0X3pkID0gMSdiWjsKKyAgICAgICAgICAgICAgICAgICAgICAgIFdQTmVnT3V0X3pkICAgPSAxJ2JaOworICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCAgICAgICA9IDEnYlo7CisgICAgICAgICAgICAgICAgICAgICAgICBTSU91dF96ZCAgICAgID0gMSdiWjsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgV1JJVEVfU1I6CisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IxOworICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgIGlmIChvZSkKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBhbnlfcmVhZCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0cnVjdCA9PSBSRFNSKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAvL1JlYWQgU3RhdHVzIFJlZ2lzdGVyIDEKKyAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSBTdGF0dXNfcmVnMVs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gUkRTUjIpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBTdGF0dXMgUmVnaXN0ZXIgMgorICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IFN0YXR1c19yZWcyWzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBSRENSKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgLy9SZWFkIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMQorICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IENvbmZpZ19yZWcxWzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG9lX3opCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgSE9MRE5lZ091dF96ZCA9IDEnYlo7CisgICAgICAgICAgICAgICAgICAgIFdQTmVnT3V0X3pkICAgPSAxJ2JaOworICAgICAgICAgICAgICAgICAgICBTT3V0X3pkICAgICAgID0gMSdiWjsKKyAgICAgICAgICAgICAgICAgICAgU0lPdXRfemQgICAgICA9IDEnYlo7CisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBpZiAoV0RPTkUgPT0gMSkKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVswXSA9IDEnYjA7IC8vV0lQCisgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzFdID0gMSdiMDsgLy9XRUwKKyAgICAgICAgICAgICAgICAgICAgLy9TUldEIGJpdAorICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVs3XSA9IFN0YXR1c19yZWcxX2luWzddOyAvL01TQiBmaXJzdAorCisvLyAgICAgICAgICAgICAgICAgICAgIGlmIChMT0NLID09IDApCisvLyAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoRlJFRVpFID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICAvL1RoZSBGcmVlemUgQml0LCB3aGVuIHNldCB0byAxLCBsb2NrcyB0aGUgY3VycmVudAorICAgICAgICAgICAgICAgICAgICAgICAgLy9zdGF0ZSBvZiB0aGUgQlAyLTAgYml0cyBpbiBTdGF0dXMgUmVnaXN0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAvL3RoZSBUQlBST1QgYW5kIFRCUEFSTSBiaXRzIGluIHRoZSBDb25maWcgUmVnaXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vQXMgbG9uZyBhcyB0aGUgRlJFRVpFIGJpdCByZW1haW5zIGNsZWFyZWQgdG8gbG9naWMKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vJzAnLCB0aGUgb3RoZXIgYml0cyBvZiB0aGUgQ29uZmlndXJhdGlvbiByZWdpc3RlcgorICAgICAgICAgICAgICAgICAgICAgICAgLy9pbmNsdWRpbmcgRlJFRVpFIGFyZSB3cml0ZWFibGUuCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzRdID0gU3RhdHVzX3JlZzFfaW5bNF07Ly9CUDIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVszXSA9IFN0YXR1c19yZWcxX2luWzNdOy8vQlAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMl0gPSBTdGF0dXNfcmVnMV9pblsyXTsvL0JQMAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlBfYml0cyA9IHtTdGF0dXNfcmVnMVs0XSxTdGF0dXNfcmVnMVszXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzJdfTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoVEJQUk9UID09IDEnYjAgJiYgSU5JVElBTF9DT05GSUcgPT0gMSdiMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25maWdfcmVnMVs1XSA9IENvbmZpZ19yZWcxX2luWzVdOy8vVEJQUk9UCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFRCUEFSTSA9PSAxJ2IwICYmIElOSVRJQUxfQ09ORklHID09IDEnYjAgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wX2NoYXIyID09ICIwIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25maWdfcmVnMVsyXSA9IENvbmZpZ19yZWcxX2luWzJdOy8vVEJQQVJNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZV9UQlBBUk0gPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjMTAwMCBjaGFuZ2VfVEJQQVJNID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VfQlAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICMxMDAwIGNoYW5nZV9CUCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKy8vICAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgQ29uZmlnX3JlZzFbN10gPSBDb25maWdfcmVnMV9pbls3XTsvL0xDMQorICAgICAgICAgICAgICAgICAgICBDb25maWdfcmVnMVs2XSA9IENvbmZpZ19yZWcxX2luWzZdOy8vTEMwCisgICAgICAgICAgICAgICAgICAgIENvbmZpZ19yZWcxWzFdID0gQ29uZmlnX3JlZzFfaW5bMV07Ly9RVUFECisKKyAgICAgICAgICAgICAgICAgICAgaWYgKEZSRUVaRSA9PSAxJ2IwKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgQ29uZmlnX3JlZzFbMF0gPSBDb25maWdfcmVnMV9pblswXTsvL0ZSRUVaRQorICAgICAgICAgICAgICAgICAgICBlbmQKKworLy8gICAgICAgICAgICAgICAgICAgICBpZiAoV1JMT0NLRU5BQkxFPT0gMSdiMSAmJiBMT0NLID09IDEnYjApCisvLyAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisvLyAgICAgICAgICAgICAgICAgICAgICAgICBDb25maWdfcmVnMVs0XSA9IENvbmZpZ19yZWcxX2luWzRdOy8vTE9DSworLy8gICAgICAgICAgICAgICAgICAgICAgICAgV1JMT0NLRU5BQkxFID0gMSdiMDsKKy8vICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGlmIChCUE5WID09IDEnYjApCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBDb25maWdfcmVnMVszXSA9IENvbmZpZ19yZWcxX2luWzNdOy8vQlBOVgorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICBQQUdFX1BHIDoKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjE7CisgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgaWYgKG9lKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGFueV9yZWFkID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEluc3RydWN0ID09IFJEU1IpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBTdGF0dXMgUmVnaXN0ZXIgMQorICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IFN0YXR1c19yZWcxWzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBSRFNSMikKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy9SZWFkIFN0YXR1cyBSZWdpc3RlciAyCisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gU3RhdHVzX3JlZzJbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFJEQ1IpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAvL1JlYWQgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAxCisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gQ29uZmlnX3JlZzFbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZWxzZSBpZiAob2VfeikKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBIT0xETmVnT3V0X3pkID0gMSdiWjsKKyAgICAgICAgICAgICAgICAgICAgV1BOZWdPdXRfemQgICA9IDEnYlo7CisgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgICAgICAgPSAxJ2JaOworICAgICAgICAgICAgICAgICAgICBTSU91dF96ZCAgICAgID0gMSdiWjsKKyAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgIGlmKGN1cnJlbnRfc3RhdGVfZXZlbnQgJiYgY3VycmVudF9zdGF0ZSA9PSBQQUdFX1BHKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGlmICh+UERPTkUpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBBRERSSElMT19QRyhBZGRyTG8sIEFkZHJIaSwgQWRkcik7CisgICAgICAgICAgICAgICAgICAgICAgICBjbnQgPSAwOworCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGk9MDtpPD13cl9jbnQ7aT1pKzEpCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19pbnQgPSBXRGF0YVtpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRfaW50ID0gTWVtW0FkZHIgKyBpIC0gY250XTsKKwkJCSAgICAvLyRkaXNwbGF5KCIlbTogTmV3IExvYzogJXggTmV3IERhdGE6ICV4IE9sZCBEYXRhOiAleCIsaSxuZXdfaW50LG9sZF9pbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdfaW50ID4gLTEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X2JpdCA9IG5ld19pbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvbGRfaW50ID4gLTEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRfYml0ID0gb2xkX2ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihqPTA7ajw9NztqPWorMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKH5vbGRfYml0W2pdKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfYml0W2pdPTEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19pbnQ9bmV3X2JpdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdEYXRhW2ldPSBuZXdfaW50OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRGF0YVtpXSA9IC0xOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVtW0FkZHIgKyBpIC0gY250XSA9IC0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEFkZHIgKyBpKSA9PSBBZGRySGkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyID0gQWRkckxvOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbnQgPSBpICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgY250ID0gMDsKKyAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgIGlmIChQRE9ORSkKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVswXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzFdID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgcXVhZF9wZyAgICAgICAgPSAwOworICAgICAgICAgICAgICAgICAgICBmb3IgKGk9MDtpPD13cl9jbnQ7aT1pKzEpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBNZW1bQWRkcl90bXAgKyBpIC0gY250XSA9IFdEYXRhW2ldOworCQkJLy8kZGlzcGxheSgiJW0gPT4gU0ZMQVNIIFdSIEFkZHJlc3M6ICV4IERhdGE6ICV4IixBZGRyX3RtcCArIGkgLSBjbnQsIFdEYXRhW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoQWRkcl90bXAgKyBpKSA9PSBBZGRySGkpCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJfdG1wID0gQWRkckxvOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNudCA9IGkgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgaWYgKEluc3RydWN0KQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0cnVjdCA9PSBQR1NQICYmIH5QUkdTVVNQX2luKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKH5SRVNfVE9fU1VTUF9NSU5fVElNRSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEdTVVNQID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQR1NVU1AgPD0gIzUgMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkdTVVNQX2luID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUkVTX1RPX1NVU1BfVFlQX1RJTUUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkoIlR5cGljYWwgcGVyaW9kcyBhcmUgbmVlZGVkIGZvciAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJvZ3JhbSB0byBwcm9ncmVzcyB0byBjb21wbGV0aW9uIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkoIk1pbmltdW0gZm9yIHRQUlMgaXMgbm90IHNhdGlzZmllZCEgIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUEdTUCBjb21tYW5kIGlzIGlnbm9yZWQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICBQR19TVVNQOgorICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICByZF9mYXN0ID0gMSdiMTsKKyAgICAgICAgICAgICAgICByZF9zbG93ID0gMSdiMDsKKyAgICAgICAgICAgICAgICBkdWFsICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICBkZHIgICAgID0gMSdiMDsKKworICAgICAgICAgICAgICAgIGlmIChQUkdTVVNQX291dCAmJiBQUkdTVVNQX2luKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIFBSR1NVU1BfaW4gPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAvL1RoZSBSRFkvQlNZIGJpdCBpbiB0aGUgU3RhdHVzIFJlZ2lzdGVyIHdpbGwgaW5kaWNhdGUgdGhhdAorICAgICAgICAgICAgICAgICAgICAvL3RoZSBkZXZpY2UgaXMgcmVhZHkgZm9yIGFub3RoZXIgb3BlcmF0aW9uLgorICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVswXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgIC8vVGhlIFByb2dyYW0gU3VzcGVuZCAoUFMpIGJpdCBpbiB0aGUgU3RhdHVzIFJlZ2lzdGVyIHdpbGwKKyAgICAgICAgICAgICAgICAgICAgLy9iZSBzZXQgdG8gdGhlIGxvZ2ljYWwg4oCcMeKAnSBzdGF0ZSB0byBpbmRpY2F0ZSB0aGF0IHRoZQorICAgICAgICAgICAgICAgICAgICAvL3Byb2dyYW0gb3BlcmF0aW9uIGhhcyBiZWVuIHN1c3BlbmRlZC4KKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzJbMF0gPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICBQRE9ORSA9IDEnYjE7CisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBpZiAob2UpCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgYW55X3JlYWQgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdHJ1Y3QgPT0gUkRTUikKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy9SZWFkIFN0YXR1cyBSZWdpc3RlciAxCisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gU3RhdHVzX3JlZzFbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFJEU1IyKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAvL1JlYWQgU3RhdHVzIFJlZ2lzdGVyIDIKKyAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSBTdGF0dXNfcmVnMls3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gUkRDUikKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDEKKyAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSBDb25maWdfcmVnMVs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gQlJSRCkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy9SZWFkIEJhbmsgQWRkcmVzcyBSZWdpc3RlcgorICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICByZF9zbG93ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gQmFua19BZGRyX3JlZ1s3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ICA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBBcnJheSBPcGVyYXRpb25zCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFJFQUQgfHwgSW5zdHJ1Y3QgPT0gUkQ0IHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPT0gRlNUUkQgfHwgSW5zdHJ1Y3QgPT0gRlNUUkQ0IHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPT0gRERSRlIgfHwgSW5zdHJ1Y3QgPT0gRERSRlI0ICkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBNZW1vcnkgYXJyYXkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0cnVjdCA9PSBSRUFEIHx8IEluc3RydWN0ID09IFJENCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IEREUkZSIHx8IEluc3RydWN0ID09IEREUkZSNCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZ21fcGFnZSAhPSByZWFkX2FkZHIgLyAoUGFnZVNpemUrMSkpCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoSW5zdHJ1Y3QgPT0gRERSRlIgfHwgSW5zdHJ1Y3QgPT0gRERSRlI0KSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVkRMUl9yZWcgIT0gOCdiMDAwMDAwMDApICYmIHN0YXJ0X2RscCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX291dFs3OjBdID0gVkRMUl9yZWc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgID0gZGF0YV9vdXRbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ICA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydF9kbHAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9vdXRbNzowXSA9IE1lbVtyZWFkX2FkZHJdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkICA9IGRhdGFfb3V0WzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9hZGRyID09IEFkZHJSQU5HRSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2FkZHIgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfYWRkciA9IHJlYWRfYWRkciArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCAgPSA4J2J4eHh4eHh4eDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2FkZHIgPT0gQWRkclJBTkdFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9hZGRyID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9hZGRyID0gcmVhZF9hZGRyICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gRE9SIHx8IEluc3RydWN0ID09IERPUjQgIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPT0gRElPUiB8fCBJbnN0cnVjdCA9PSBESU9SNCB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID09IEREUkRJT1IgfHwgSW5zdHJ1Y3QgPT0gRERSRElPUjQgKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgLy9SZWFkIE1lbW9yeSBhcnJheQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEluc3RydWN0ID09IEREUkRJT1IgfHwgSW5zdHJ1Y3QgPT0gRERSRElPUjQpCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGdtX3BhZ2UgIT0gcmVhZF9hZGRyIC8gKFBhZ2VTaXplKzEpKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEluc3RydWN0ID09IEREUkRJT1IgfHwgSW5zdHJ1Y3QgPT0gRERSRElPUjQpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFZETFJfcmVnICE9IDgnYjAwMDAwMDAwKSAmJiBzdGFydF9kbHApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9vdXRbNzowXSA9IFZETFJfcmVnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gZGF0YV9vdXRbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJT3V0X3pkID0gZGF0YV9vdXRbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ICA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydF9kbHAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9vdXRbNzowXSA9IE1lbVtyZWFkX2FkZHJdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gZGF0YV9vdXRbNy0yKnJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0lPdXRfemQgPSBkYXRhX291dFs2LTIqcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9hZGRyID09IEFkZHJSQU5HRSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2FkZHIgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfYWRkciA9IHJlYWRfYWRkciArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSAxJ2J4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJT3V0X3pkID0gMSdieDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gNCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2FkZHIgPT0gQWRkclJBTkdFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9hZGRyID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9hZGRyID0gcmVhZF9hZGRyICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gUU9SIHx8IEluc3RydWN0ID09IFFPUjQgIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPT0gUUlPUiB8fCBJbnN0cnVjdCA9PSBRSU9SNCB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID09IEREUlFJT1IgfHwgSW5zdHJ1Y3QgPT0gRERSUUlPUjQgKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgLy9SZWFkIE1lbW9yeSBhcnJheQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEluc3RydWN0ID09IEREUlFJT1IgfHwgSW5zdHJ1Y3QgPT0gRERSUUlPUjQpCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGdtX3BhZ2UgIT0gcmVhZF9hZGRyIC8gKFBhZ2VTaXplKzEpKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEluc3RydWN0ID09IEREUlFJT1IgfHwgSW5zdHJ1Y3QgPT0gRERSUUlPUjQpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChWRExSX3JlZyAhPSA4J2IwMDAwMDAwMCkgJiYgc3RhcnRfZGxwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERhdGEgTGVhcm5pbmcgUGF0dGVybiAoRExQKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpcyBlbmFibGVkIE9wdGlvbmFsIERMUAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX291dFs3OjBdID0gVkRMUl9yZWc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhPTEROZWdPdXRfemQ9IGRhdGFfb3V0WzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXUE5lZ091dF96ZCAgPSBkYXRhX291dFs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCAgPSBkYXRhX291dFs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0lPdXRfemQgID0gZGF0YV9vdXRbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ICA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydF9kbHAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9vdXRbNzowXSA9IE1lbVtyZWFkX2FkZHJdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIT0xETmVnT3V0X3pkID0gZGF0YV9vdXRbNy00KnJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV1BOZWdPdXRfemQgICA9IGRhdGFfb3V0WzYtNCpyZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgICA9IGRhdGFfb3V0WzUtNCpyZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJT3V0X3pkICAgPSBkYXRhX291dFs0LTQqcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9hZGRyID09IEFkZHJSQU5HRSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2FkZHIgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfYWRkciA9IHJlYWRfYWRkciArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhPTEROZWdPdXRfemQgPSAxJ2J4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdQTmVnT3V0X3pkICAgPSAxJ2J4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgICA9IDEnYng7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0lPdXRfemQgICA9IDEnYng7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9hZGRyID09IEFkZHJSQU5HRSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfYWRkciA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfYWRkciA9IHJlYWRfYWRkciArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZWxzZSBpZiAob2VfeikKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdHJ1Y3QgPT0gUkVBRCB8fCBJbnN0cnVjdCA9PSBSRDQpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICByZF9mYXN0ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBkZHIgICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IEREUkZSIHx8IEluc3RydWN0ID09IEREUkZSNCkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBkdWFsICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gRERSRElPUiB8fCBJbnN0cnVjdCA9PSBERFJESU9SNCkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBkdWFsICAgID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gRE9SIHx8IEluc3RydWN0ID09IERPUjQgIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID09IERJT1IgfHwgSW5zdHJ1Y3QgPT0gRElPUjQgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPT0gUU9SIHx8IEluc3RydWN0ID09IFFPUjQgIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID09IFFJT1IgfHwgSW5zdHJ1Y3QgPT0gUUlPUjQpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICByZF9mYXN0ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICBkZHIgICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IEREUlFJT1IgfHwgSW5zdHJ1Y3QgPT0gRERSUUlPUjQpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICByZF9mYXN0ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICBkZHIgICAgID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBkdWFsICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgSE9MRE5lZ091dF96ZCA9IDEnYlo7CisgICAgICAgICAgICAgICAgICAgIFdQTmVnT3V0X3pkICAgPSAxJ2JaOworICAgICAgICAgICAgICAgICAgICBTT3V0X3pkICAgICAgID0gMSdiWjsKKyAgICAgICAgICAgICAgICAgICAgU0lPdXRfemQgICAgICA9IDEnYlo7CisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBpZiAoZmFsbGluZ19lZGdlX3dyaXRlKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0cnVjdCA9PSBCUldSKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgQmFua19BZGRyX3JlZ1s3XSA9IEJhbmtfQWRkcl9yZWdfaW5bN107CisgICAgICAgICAgICAgICAgICAgICAgICBCYW5rX0FkZHJfcmVnWzBdID0gQmFua19BZGRyX3JlZ19pblswXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmKEJhbmtfQWRkcl9yZWdfaW5bMV0gPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJXQVJOSU5HOiBDaGFuZ2luZyB2YWx1ZXMgb2YgIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJCYW5rIEFkZHJlc3MgUmVnaXN0ZXIiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIkJBMjUgaXMgbm90IGFsbG93ZWQhISEiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gV1JSICYmIEJBUl9BQ0MgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy8gV3JpdGUgdG8gdGhlIGxvd2VyIGFkZHJlc3MgYml0cyBvZiB0aGUgQkFSCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUF9FUlIgPT0gMCAmJiBFX0VSUiA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYW5rX0FkZHJfcmVnWzBdID0gQmFua19BZGRyX3JlZ19pblswXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihCYW5rX0FkZHJfcmVnX2luWzFdID09IDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJXQVJOSU5HOiBDaGFuZ2luZyB2YWx1ZXMgb2YgIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiQmFuayBBZGRyZXNzIFJlZ2lzdGVyIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiQkEyNSBpcyBub3QgYWxsb3dlZCEhISIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBQR1JTKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzJbMF0gPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMF0gPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgUEdSRVMgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgUEdSRVMgPD0gIzUgMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFU19UT19TVVNQX01JTl9USU1FID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFU19UT19TVVNQX01JTl9USU1FIDw9ICM2MDAwMCAxJ2IwOy8vNjAgbnMKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFU19UT19TVVNQX1RZUF9USU1FID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFU19UT19TVVNQX1RZUF9USU1FIDw9ICMxMDAwMDAwMDAgMSdiMDsvLzEwMHVzCisgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0cnVjdCA9PSBCUkFDICYmIFBfRVJSID09IDAgJiYgRV9FUlIgPT0gMCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgUmRQc3dkUHJvdE1vZGUgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJBUl9BQ0MgPSAxOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgQkFSX0FDQyA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgIEVSU19TVVNQX1BHX1NVU1A6CisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IxOworICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworCisgICAgICAgICAgICAgICAgaWYgKFBSR1NVU1Bfb3V0ICYmIFBSR1NVU1BfaW4pCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgUFJHU1VTUF9pbiA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgIC8vVGhlIFJEWS9CU1kgYml0IGluIHRoZSBTdGF0dXMgUmVnaXN0ZXIgd2lsbCBpbmRpY2F0ZSB0aGF0CisgICAgICAgICAgICAgICAgICAgIC8vdGhlIGRldmljZSBpcyByZWFkeSBmb3IgYW5vdGhlciBvcGVyYXRpb24uCisgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzBdID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgLy9UaGUgUHJvZ3JhbSBTdXNwZW5kIChQUykgYml0IGluIHRoZSBTdGF0dXMgUmVnaXN0ZXIgd2lsbAorICAgICAgICAgICAgICAgICAgICAvL2JlIHNldCB0byB0aGUgbG9naWNhbCDigJwx4oCdIHN0YXRlIHRvIGluZGljYXRlIHRoYXQgdGhlCisgICAgICAgICAgICAgICAgICAgIC8vcHJvZ3JhbSBvcGVyYXRpb24gaGFzIGJlZW4gc3VzcGVuZGVkLgorICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMlswXSA9IDEnYjE7CisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBpZiAob2UpCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgYW55X3JlYWQgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdHJ1Y3QgPT0gUkRTUikKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy9SZWFkIFN0YXR1cyBSZWdpc3RlciAxCisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gU3RhdHVzX3JlZzFbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFJEU1IyKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAvL1JlYWQgU3RhdHVzIFJlZ2lzdGVyIDIKKyAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSBTdGF0dXNfcmVnMls3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gUkRDUikKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDEKKyAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSBDb25maWdfcmVnMVs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gQlJSRCkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy9SZWFkIEJhbmsgQWRkcmVzcyBSZWdpc3RlcgorICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICByZF9zbG93ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gQmFua19BZGRyX3JlZ1s3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ICA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBBcnJheSBPcGVyYXRpb25zCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFJFQUQgfHwgSW5zdHJ1Y3QgPT0gUkQ0IHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPT0gRlNUUkQgfHwgSW5zdHJ1Y3QgPT0gRlNUUkQ0IHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPT0gRERSRlIgfHwgSW5zdHJ1Y3QgPT0gRERSRlI0ICkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBNZW1vcnkgYXJyYXkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0cnVjdCA9PSBSRUFEIHx8IEluc3RydWN0ID09IFJENCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IEREUkZSIHx8IEluc3RydWN0ID09IEREUkZSNCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoU2VjdG9yU3VzcGVuZCAhPSByZWFkX2FkZHIvKFNlY1NpemUrMSkpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAocGdtX3BhZ2UgIT0gcmVhZF9hZGRyIC8gKFBhZ2VTaXplKzEpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChJbnN0cnVjdCA9PSBERFJGUiB8fCBJbnN0cnVjdCA9PSBERFJGUjQpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChWRExSX3JlZyAhPSA4J2IwMDAwMDAwMCkgJiYgc3RhcnRfZGxwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfb3V0Wzc6MF0gPSBWRExSX3JlZzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCAgPSBkYXRhX291dFs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2RscCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX291dFs3OjBdID0gTWVtW3JlYWRfYWRkcl07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgID0gZGF0YV9vdXRbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2FkZHIgPT0gQWRkclJBTkdFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfYWRkciA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9hZGRyID0gcmVhZF9hZGRyICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkICA9IDgnYnh4eHh4eHh4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfYWRkciA9PSBBZGRyUkFOR0UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2FkZHIgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2FkZHIgPSByZWFkX2FkZHIgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBET1IgfHwgSW5zdHJ1Y3QgPT0gRE9SNCAgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9PSBESU9SIHx8IEluc3RydWN0ID09IERJT1I0IHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPT0gRERSRElPUiB8fCBJbnN0cnVjdCA9PSBERFJESU9SNCApCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAvL1JlYWQgTWVtb3J5IGFycmF5CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdHJ1Y3QgPT0gRERSRElPUiB8fCBJbnN0cnVjdCA9PSBERFJESU9SNCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoU2VjdG9yU3VzcGVuZCAhPSByZWFkX2FkZHIvKFNlY1NpemUrMSkpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAocGdtX3BhZ2UgIT0gcmVhZF9hZGRyIC8gKFBhZ2VTaXplKzEpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChJbnN0cnVjdCA9PSBERFJESU9SIHx8IEluc3RydWN0ID09IEREUkRJT1I0KSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVkRMUl9yZWcgIT0gOCdiMDAwMDAwMDApICYmIHN0YXJ0X2RscCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEYXRhIExlYXJuaW5nIFBhdHRlcm4gKERMUCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXMgZW5hYmxlZCBPcHRpb25hbCBETFAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9vdXRbNzowXSA9IFZETFJfcmVnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gZGF0YV9vdXRbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJT3V0X3pkID0gZGF0YV9vdXRbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ICA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydF9kbHAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9vdXRbNzowXSA9IE1lbVtyZWFkX2FkZHJdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gZGF0YV9vdXRbNy0yKnJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0lPdXRfemQgPSBkYXRhX291dFs2LTIqcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9hZGRyID09IEFkZHJSQU5HRSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2FkZHIgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfYWRkciA9IHJlYWRfYWRkciArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSAxJ2J4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJT3V0X3pkID0gMSdieDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gNCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2FkZHIgPT0gQWRkclJBTkdFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9hZGRyID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9hZGRyID0gcmVhZF9hZGRyICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gUU9SIHx8IEluc3RydWN0ID09IFFPUjQgIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPT0gUUlPUiB8fCBJbnN0cnVjdCA9PSBRSU9SNCB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID09IEREUlFJT1IgfHwgSW5zdHJ1Y3QgPT0gRERSUUlPUjQgKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgLy9SZWFkIE1lbW9yeSBhcnJheQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEluc3RydWN0ID09IEREUlFJT1IgfHwgSW5zdHJ1Y3QgPT0gRERSUUlPUjQpCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKFNlY3RvclN1c3BlbmQgIT0gcmVhZF9hZGRyLyhTZWNTaXplKzEpKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgKHBnbV9wYWdlICE9IHJlYWRfYWRkciAvIChQYWdlU2l6ZSsxKSkpCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoSW5zdHJ1Y3QgPT0gRERSUUlPUiB8fCBJbnN0cnVjdCA9PSBERFJRSU9SNCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFZETFJfcmVnICE9IDgnYjAwMDAwMDAwKSAmJiBzdGFydF9kbHApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGF0YSBMZWFybmluZyBQYXR0ZXJuIChETFApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlzIGVuYWJsZWQgT3B0aW9uYWwgRExQCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfb3V0Wzc6MF0gPSBWRExSX3JlZzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSE9MRE5lZ091dF96ZCA9ZGF0YV9vdXRbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdQTmVnT3V0X3pkID0gZGF0YV9vdXRbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSBkYXRhX291dFs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0lPdXRfemQgPSBkYXRhX291dFs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRfZGxwID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfb3V0Wzc6MF0gPSBNZW1bcmVhZF9hZGRyXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSE9MRE5lZ091dF96ZCA9IGRhdGFfb3V0WzctNCpyZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdQTmVnT3V0X3pkICAgPSBkYXRhX291dFs2LTQqcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkICAgPSBkYXRhX291dFs1LTQqcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTSU91dF96ZCAgID0gZGF0YV9vdXRbNC00KnJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfYWRkciA9PSBBZGRyUkFOR0UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9hZGRyID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2FkZHIgPSByZWFkX2FkZHIgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBIT0xETmVnT3V0X3pkID0gMSdieDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBXUE5lZ091dF96ZCAgID0gMSdieDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkICAgPSAxJ2J4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJT3V0X3pkICAgPSAxJ2J4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSAyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfYWRkciA9PSBBZGRyUkFOR0UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2FkZHIgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2FkZHIgPSByZWFkX2FkZHIgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG9lX3opCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgaWYgKEluc3RydWN0ID09IFJFQUQgfHwgSW5zdHJ1Y3QgPT0gUkQ0KQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICByZF9zbG93ID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBERFJGUiB8fCBJbnN0cnVjdCA9PSBERFJGUjQpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICByZF9mYXN0ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBkZHIgICAgID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IEREUkRJT1IgfHwgSW5zdHJ1Y3QgPT0gRERSRElPUjQpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICByZF9mYXN0ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICBkZHIgICAgID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IERPUiB8fCBJbnN0cnVjdCA9PSBET1I0ICB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9PSBESU9SIHx8IEluc3RydWN0ID09IERJT1I0IHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID09IFFPUiB8fCBJbnN0cnVjdCA9PSBRT1I0ICB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9PSBRSU9SIHx8IEluc3RydWN0ID09IFFJT1I0KQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICByZF9zbG93ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBERFJRSU9SIHx8IEluc3RydWN0ID09IEREUlFJT1I0KQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICByZF9zbG93ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICByZF9mYXN0ID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBkZHIgICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIEhPTEROZWdPdXRfemQgPSAxJ2JaOworICAgICAgICAgICAgICAgICAgICBXUE5lZ091dF96ZCAgID0gMSdiWjsKKyAgICAgICAgICAgICAgICAgICAgU091dF96ZCAgICAgICA9IDEnYlo7CisgICAgICAgICAgICAgICAgICAgIFNJT3V0X3pkICAgICAgPSAxJ2JaOworICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgaWYgKGZhbGxpbmdfZWRnZV93cml0ZSkKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdHJ1Y3QgPT0gQlJXUikKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJhbmtfQWRkcl9yZWdbN10gPSBCYW5rX0FkZHJfcmVnX2luWzddOworICAgICAgICAgICAgICAgICAgICAgICAgQmFua19BZGRyX3JlZ1swXSA9IEJhbmtfQWRkcl9yZWdfaW5bMF07CisgICAgICAgICAgICAgICAgICAgICAgICBpZihCYW5rX0FkZHJfcmVnX2luWzFdID09IDEpCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiV0FSTklORzogQ2hhbmdpbmcgdmFsdWVzIG9mICIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiQmFuayBBZGRyZXNzIFJlZ2lzdGVyIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJCQTI1IGlzIG5vdCBhbGxvd2VkISEhIik7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFdSUiAmJiBCQVJfQUNDID09IDEpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIC8vIFdyaXRlIHRvIHRoZSBsb3dlciBhZGRyZXNzIGJpdHMgb2YgdGhlIEJBUgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFBfRVJSID09IDAgJiYgRV9FUlIgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFua19BZGRyX3JlZ1swXSA9IEJhbmtfQWRkcl9yZWdfaW5bMF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoQmFua19BZGRyX3JlZ19pblsxXSA9PSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiV0FSTklORzogQ2hhbmdpbmcgdmFsdWVzIG9mICIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIkJhbmsgQWRkcmVzcyBSZWdpc3RlciIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIkJBMjUgaXMgbm90IGFsbG93ZWQhISEiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gUEdSUykKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcyWzBdID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzBdID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFBHUkVTID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFBHUkVTIDw9ICM1IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBSRVNfVE9fU1VTUF9NSU5fVElNRSA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICBSRVNfVE9fU1VTUF9NSU5fVElNRSA8PSAjNjAwMDAgMSdiMDsvLzYwIG5zCisgICAgICAgICAgICAgICAgICAgICAgICBSRVNfVE9fU1VTUF9UWVBfVElNRSA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICBSRVNfVE9fU1VTUF9UWVBfVElNRSA8PSAjMTAwMDAwMDAwIDEnYjA7Ly8xMDB1cworICAgICAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdHJ1Y3QgPT0gQlJBQyAmJiBQX0VSUiA9PSAwICYmIEVfRVJSID09IDAgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIFJkUHN3ZFByb3RNb2RlID09IDApCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBCQVJfQUNDID0gMTsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJBUl9BQ0MgPSAwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICBPVFBfUEc6CisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IxOworICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgIGlmIChvZSkKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBhbnlfcmVhZCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0cnVjdCA9PSBSRFNSKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAvL1JlYWQgU3RhdHVzIFJlZ2lzdGVyIDEKKyAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSBTdGF0dXNfcmVnMVs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gUkRTUjIpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBTdGF0dXMgUmVnaXN0ZXIgMgorICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IFN0YXR1c19yZWcyWzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBSRENSKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgLy9SZWFkIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMQorICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IENvbmZpZ19yZWcxWzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG9lX3opCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgSE9MRE5lZ091dF96ZCA9IDEnYlo7CisgICAgICAgICAgICAgICAgICAgIFdQTmVnT3V0X3pkICAgPSAxJ2JaOworICAgICAgICAgICAgICAgICAgICBTT3V0X3pkICAgICAgID0gMSdiWjsKKyAgICAgICAgICAgICAgICAgICAgU0lPdXRfemQgICAgICA9IDEnYlo7CisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBpZihjdXJyZW50X3N0YXRlX2V2ZW50ICYmIGN1cnJlbnRfc3RhdGUgPT0gT1RQX1BHKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGlmICh+UERPTkUpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQWRkcmVzcyArIHdyX2NudCA8PSBPVFBIaUFkZHIpCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaT0wO2k8PXdyX2NudDtpPWkrMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfaW50ID0gV0RhdGFbaV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZF9pbnQgPSBPVFBNZW1bQWRkciArIGldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV3X2ludCA+IC0xKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X2JpdCA9IG5ld19pbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2xkX2ludCA+IC0xKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRfYml0ID0gb2xkX2ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Ioaj0wO2o8PTc7aj1qKzEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKH5vbGRfYml0W2pdKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X2JpdFtqXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X2ludCA9IG5ld19iaXQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdEYXRhW2ldID0gbmV3X2ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdEYXRhW2ldID0gLTE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPVFBNZW1bQWRkciArIGldID0gIC0xOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiUHJvZ3JhbW1pbmcgd2lsbCByZWFjaCBvdmVyICIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiYWRkcmVzcyBsaW1pdCBvZiBPVFAgYXJyYXkiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgIGlmIChQRE9ORSkKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVswXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzFdID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpPTA7aTw9d3JfY250O2k9aSsxKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgT1RQTWVtW0FkZHIgKyBpXSA9IFdEYXRhW2ldOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgTE9DS19CWVRFMSA9IE9UUE1lbVsxNl07CisgICAgICAgICAgICAgICAgICAgIExPQ0tfQllURTIgPSBPVFBNZW1bMTddOworICAgICAgICAgICAgICAgICAgICBMT0NLX0JZVEUzID0gT1RQTWVtWzE4XTsKKyAgICAgICAgICAgICAgICAgICAgTE9DS19CWVRFNCA9IE9UUE1lbVsxOV07CisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgU0VDVE9SX0VSUzoKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjE7CisgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgaWYgKG9lKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGFueV9yZWFkID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEluc3RydWN0ID09IFJEU1IpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBTdGF0dXMgUmVnaXN0ZXIgMQorICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IFN0YXR1c19yZWcxWzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBSRFNSMikKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy9SZWFkIFN0YXR1cyBSZWdpc3RlciAyCisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gU3RhdHVzX3JlZzJbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFJEQ1IpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAvL1JlYWQgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAxCisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gQ29uZmlnX3JlZzFbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZWxzZSBpZiAob2VfeikKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBIT0xETmVnT3V0X3pkID0gMSdiWjsKKyAgICAgICAgICAgICAgICAgICAgV1BOZWdPdXRfemQgICA9IDEnYlo7CisgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgICAgICAgPSAxJ2JaOworICAgICAgICAgICAgICAgICAgICBTSU91dF96ZCAgICAgID0gMSdiWjsKKyAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgIGlmKGN1cnJlbnRfc3RhdGVfZXZlbnQgJiYgY3VycmVudF9zdGF0ZSA9PSBTRUNUT1JfRVJTKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGlmICh+RURPTkUpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBBRERSSElMT19TRUMoQWRkckxvLCBBZGRySGksIEFkZHIpOworCQkJJGRpc3BsYXkoIiVtOiBTZWN0b3IgRXJhc2UgQWRkcmVzczogJXggU3RhcnQ6ICV4IEVuZDogJXgiLEFkZHIsQWRkckxvLEFkZHJIaSk7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGk9QWRkckxvO2k8PUFkZHJIaTtpPWkrMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVtW2ldID0gLTE7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBpZiAoRURPTkUgPT0gMSkKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVswXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzFdID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpPUFkZHJMbztpPD1BZGRySGk7aT1pKzEpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBNZW1baV0gPSBNYXhEYXRhOworCisgICAgICAgICAgICAgICAgICAgICAgICBwZ21fcGFnZSA9IGkgLyAoUGFnZVNpemUrMSk7CisvLyAgICAgICAgICAgICAgICAgICAgICAgIFFQUF9wYWdlW3BnbV9wYWdlXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IEVSU1AgJiYgfkVSU1NVU1BfaW4pCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgRVNVU1AgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICBFU1VTUCA8PSAjNSAxJ2IwOworICAgICAgICAgICAgICAgICAgICBFUlNTVVNQX2luID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKFJFU19UT19TVVNQX1RZUF9USU1FKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkoIlR5cGljYWwgcGVyaW9kcyBhcmUgbmVlZGVkIGZvciAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByb2dyYW0gdG8gcHJvZ3Jlc3MgdG8gY29tcGxldGlvbiIpOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICBCVUxLX0VSUzoKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjE7CisgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgaWYgKG9lKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGFueV9yZWFkID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEluc3RydWN0ID09IFJEU1IpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBTdGF0dXMgUmVnaXN0ZXIgMQorICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IFN0YXR1c19yZWcxWzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBSRFNSMikKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy9SZWFkIFN0YXR1cyBSZWdpc3RlciAyCisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gU3RhdHVzX3JlZzJbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFJEQ1IpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAvL1JlYWQgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAxCisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gQ29uZmlnX3JlZzFbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZWxzZSBpZiAob2VfeikKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBIT0xETmVnT3V0X3pkID0gMSdiWjsKKyAgICAgICAgICAgICAgICAgICAgV1BOZWdPdXRfemQgICA9IDEnYlo7CisgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgICAgICAgPSAxJ2JaOworICAgICAgICAgICAgICAgICAgICBTSU91dF96ZCAgICAgID0gMSdiWjsKKyAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgIGlmKGN1cnJlbnRfc3RhdGVfZXZlbnQgJiYgY3VycmVudF9zdGF0ZSA9PSBCVUxLX0VSUykKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBpZiAofkVET05FKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpPTA7aTw9QWRkclJBTkdFO2k9aSsxKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXR1cm5TZWN0b3JJRChzZWN0LGkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChQUEJfYml0c1tzZWN0XSA9PSAxICYmIERZQl9iaXRzW3NlY3RdID09IDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVtW2ldID0gLTE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgIGlmIChFRE9ORSA9PSAxKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzBdID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMV0gPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICBmb3IgKGk9MDtpPD1BZGRyUkFOR0U7aT1pKzEpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBSZXR1cm5TZWN0b3JJRChzZWN0LGkpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFBQQl9iaXRzW3NlY3RdID09IDEgJiYgRFlCX2JpdHNbc2VjdF0gPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVtW2ldID0gTWF4RGF0YTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnbV9wYWdlID0gaSAvIChQYWdlU2l6ZSsxKTsKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFQUF9wYWdlW3BnbV9wYWdlXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgRVJTX1NVU1A6CisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IxOworICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgIGlmIChFUlNTVVNQX291dCA9PSAxKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIEVSU1NVU1BfaW4gPSAwOworICAgICAgICAgICAgICAgICAgICAvL1RoZSBFcmFzZSBTdXNwZW5kIChFUykgYml0IGluIHRoZSBTdGF0dXMgUmVnaXN0ZXIgd2lsbAorICAgICAgICAgICAgICAgICAgICAvL2JlIHNldCB0byB0aGUgbG9naWNhbCDigJwx4oCdIHN0YXRlIHRvIGluZGljYXRlIHRoYXQgdGhlCisgICAgICAgICAgICAgICAgICAgIC8vZXJhc2Ugb3BlcmF0aW9uIGhhcyBiZWVuIHN1c3BlbmRlZC4KKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzJbMV0gPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAvL1RoZSBXSVAgYml0IGluIHRoZSBTdGF0dXMgUmVnaXN0ZXIgd2lsbCBpbmRpY2F0ZSB0aGF0CisgICAgICAgICAgICAgICAgICAgIC8vdGhlIGRldmljZSBpcyByZWFkeSBmb3IgYW5vdGhlciBvcGVyYXRpb24uCisgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzBdID0gMSdiMDsKKyAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgIGlmIChvZSkKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBhbnlfcmVhZCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0cnVjdCA9PSBSRFNSKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAvL1JlYWQgU3RhdHVzIFJlZ2lzdGVyIDEKKyAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSBTdGF0dXNfcmVnMVs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gUkRTUjIpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBTdGF0dXMgUmVnaXN0ZXIgMgorICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IFN0YXR1c19yZWcyWzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBSRENSKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgLy9SZWFkIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMQorICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IENvbmZpZ19yZWcxWzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBEWUJSRCkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy9SZWFkIERZQiBBY2Nlc3MgUmVnaXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIFJldHVyblNlY3RvcklEKHNlY3QsQWRkcmVzcyk7CisgICAgICAgICAgICAgICAgICAgICAgICByZF9mYXN0ID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBkZHIgICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChEWUJfYml0c1tzZWN0XSA9PSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIERZQkFSWzc6MF0gPSA4J2hGRjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFlCQVJbNzowXSA9IDgnaDA7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSBEWUJBUls3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ICA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IEJSUkQpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBCYW5rIEFkZHJlc3MgUmVnaXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBkdWFsICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IEJhbmtfQWRkcl9yZWdbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCAgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBQUEJSRCkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy9SZWFkIFBQQiBBY2Nlc3MgUmVnaXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIFJldHVyblNlY3RvcklEKHNlY3QsQWRkcmVzcyk7CisgICAgICAgICAgICAgICAgICAgICAgICByZF9mYXN0ID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBkZHIgICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIFBQQkFSWzc6MF0gPSA4J2JYWFhYWFhYWDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChSZFBzd2RQcm90TW9kZSA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUFBCX2JpdHNbc2VjdF0gPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFBCQVJbNzowXSA9IDgnaEZGOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUEJBUls3OjBdID0gOCdoMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IFBQQkFSWzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gUkVBRCB8fCBJbnN0cnVjdCA9PSBSRDQgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9PSBGU1RSRCB8fCBJbnN0cnVjdCA9PSBGU1RSRDQgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9PSBERFJGUiB8fCBJbnN0cnVjdCA9PSBERFJGUjQgKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgLy9SZWFkIE1lbW9yeSBhcnJheQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEluc3RydWN0ID09IFJFQUQgfHwgSW5zdHJ1Y3QgPT0gUkQ0KQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZF9mYXN0ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZF9zbG93ID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWFsICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZHIgICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gRERSRlIgfHwgSW5zdHJ1Y3QgPT0gRERSRlI0KQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZF9mYXN0ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZF9zbG93ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWFsICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZHIgICAgID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZF9mYXN0ID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZF9zbG93ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWFsICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZHIgICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChQQVJBTV9SRUdJT04gJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VjdG9yU3VzcGVuZCAhPSByZWFkX2FkZHIvKFNlY1NpemUrMSkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKH5QQVJBTV9SRUdJT04gJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VjdG9yU3VzcGVuZCAhPSByZWFkX2FkZHIvKFNlY1NpemUrMSkrMzAqYl9hY3QpKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEluc3RydWN0ID09IEREUkZSIHx8IEluc3RydWN0ID09IEREUkZSNCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFZETFJfcmVnICE9IDgnYjAwMDAwMDAwKSAmJiBzdGFydF9kbHApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGF0YSBMZWFybmluZyBQYXR0ZXJuIChETFApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlzIGVuYWJsZWQgT3B0aW9uYWwgRExQCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfb3V0Wzc6MF0gPSBWRExSX3JlZzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCAgPSBkYXRhX291dFs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2RscCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX291dFs3OjBdID0gTWVtW3JlYWRfYWRkcl07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgID0gZGF0YV9vdXRbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2FkZHIgPT0gQWRkclJBTkdFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfYWRkciA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9hZGRyID0gcmVhZF9hZGRyICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCAgPSAxJ2J4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfYWRkciA9PSBBZGRyUkFOR0UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2FkZHIgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2FkZHIgPSByZWFkX2FkZHIgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBET1IgfHwgSW5zdHJ1Y3QgPT0gRE9SNCAgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9PSBESU9SIHx8IEluc3RydWN0ID09IERJT1I0IHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPT0gRERSRElPUiB8fCBJbnN0cnVjdCA9PSBERFJESU9SNCApCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAvL1JlYWQgTWVtb3J5IGFycmF5CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdHJ1Y3QgPT0gRERSRElPUiB8fCBJbnN0cnVjdCA9PSBERFJESU9SNCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoUEFSQU1fUkVHSU9OICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlY3RvclN1c3BlbmQgIT0gcmVhZF9hZGRyLyhTZWNTaXplKzEpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICh+UEFSQU1fUkVHSU9OICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlY3RvclN1c3BlbmQgIT0gcmVhZF9hZGRyLyhTZWNTaXplKzEpKzMwKmJfYWN0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChJbnN0cnVjdCA9PSBERFJESU9SIHx8IEluc3RydWN0ID09IEREUkRJT1I0KSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVkRMUl9yZWcgIT0gOCdiMDAwMDAwMDApICYmIHN0YXJ0X2RscCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEYXRhIExlYXJuaW5nIFBhdHRlcm4gKERMUCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXMgZW5hYmxlZCBPcHRpb25hbCBETFAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9vdXRbNzowXSA9IFZETFJfcmVnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gZGF0YV9vdXRbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJT3V0X3pkID0gZGF0YV9vdXRbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ICA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydF9kbHAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9vdXRbNzowXSA9IE1lbVtyZWFkX2FkZHJdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gZGF0YV9vdXRbNy0yKnJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0lPdXRfemQgPSBkYXRhX291dFs2LTIqcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9hZGRyID09IEFkZHJSQU5HRSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2FkZHIgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfYWRkciA9IHJlYWRfYWRkciArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSAxJ2J4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJT3V0X3pkID0gMSdieDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gNCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2FkZHIgPT0gQWRkclJBTkdFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9hZGRyID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9hZGRyID0gcmVhZF9hZGRyICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gUU9SICB8fCBJbnN0cnVjdCA9PSBRT1I0ICB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID09IFFJT1IgfHwgSW5zdHJ1Y3QgPT0gUUlPUjQgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdCA9PSBERFJRSU9SIHx8IEluc3RydWN0ID09IEREUlFJT1I0ICkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBNZW1vcnkgYXJyYXkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0cnVjdCA9PSBERFJRSU9SIHx8IEluc3RydWN0ID09IEREUlFJT1I0KQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZF9mYXN0ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZF9zbG93ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWFsICAgID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZHIgICAgID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZF9mYXN0ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZF9zbG93ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdWFsICAgID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZHIgICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChQQVJBTV9SRUdJT04gJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VjdG9yU3VzcGVuZCAhPSByZWFkX2FkZHIvKFNlY1NpemUrMSkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKH5QQVJBTV9SRUdJT04gJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VjdG9yU3VzcGVuZCAhPSByZWFkX2FkZHIvKFNlY1NpemUrMSkrMzAqYl9hY3QpKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEluc3RydWN0ID09IEREUlFJT1IgfHwgSW5zdHJ1Y3QgPT0gRERSUUlPUjQpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChWRExSX3JlZyAhPSA4J2IwMDAwMDAwMCkgJiYgc3RhcnRfZGxwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERhdGEgTGVhcm5pbmcgUGF0dGVybiAoRExQKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpcyBlbmFibGVkIE9wdGlvbmFsIERMUAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX291dFs3OjBdID0gVkRMUl9yZWc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhPTEROZWdPdXRfemQ9IGRhdGFfb3V0WzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXUE5lZ091dF96ZCAgPSBkYXRhX291dFs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCAgPSBkYXRhX291dFs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0lPdXRfemQgID0gZGF0YV9vdXRbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ICA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydF9kbHAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9vdXRbNzowXSA9IE1lbVtyZWFkX2FkZHJdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIT0xETmVnT3V0X3pkID0gZGF0YV9vdXRbNy00KnJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV1BOZWdPdXRfemQgICA9IGRhdGFfb3V0WzYtNCpyZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgICA9IGRhdGFfb3V0WzUtNCpyZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJT3V0X3pkICAgPSBkYXRhX291dFs0LTQqcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9hZGRyID09IEFkZHJSQU5HRSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2FkZHIgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfYWRkciA9IHJlYWRfYWRkciArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhPTEROZWdPdXRfemQgPSAxJ2J4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdQTmVnT3V0X3pkICAgPSAxJ2J4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgICA9IDEnYng7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0lPdXRfemQgICA9IDEnYng7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9hZGRyID09IEFkZHJSQU5HRSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfYWRkciA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfYWRkciA9IHJlYWRfYWRkciArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZWxzZSBpZiAob2VfeikKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdHJ1Y3QgPT0gUkVBRCB8fCBJbnN0cnVjdCA9PSBSRDQpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICByZF9mYXN0ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBkZHIgICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IEREUkZSIHx8IEluc3RydWN0ID09IEREUkZSNCkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBkdWFsICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gRERSRElPUiB8fCBJbnN0cnVjdCA9PSBERFJESU9SNCkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBkdWFsICAgID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gRE9SIHx8IEluc3RydWN0ID09IERPUjQgIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID09IERJT1IgfHwgSW5zdHJ1Y3QgPT0gRElPUjQgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3QgPT0gUU9SIHx8IEluc3RydWN0ID09IFFPUjQgIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RydWN0ID09IFFJT1IgfHwgSW5zdHJ1Y3QgPT0gUUlPUjQpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICByZF9mYXN0ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICBkZHIgICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IEREUlFJT1IgfHwgSW5zdHJ1Y3QgPT0gRERSUUlPUjQpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICByZF9mYXN0ID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICBkZHIgICAgID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBkdWFsICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgSE9MRE5lZ091dF96ZCA9IDEnYlo7CisgICAgICAgICAgICAgICAgICAgIFdQTmVnT3V0X3pkICAgPSAxJ2JaOworICAgICAgICAgICAgICAgICAgICBTT3V0X3pkICAgICAgID0gMSdiWjsKKyAgICAgICAgICAgICAgICAgICAgU0lPdXRfemQgICAgICA9IDEnYlo7CisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBpZiAoZmFsbGluZ19lZGdlX3dyaXRlKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGlmICgoSW5zdHJ1Y3QgPT0gUFAgfHwgSW5zdHJ1Y3QgPT0gUFA0KSAmJiBXRUwgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoUEFSQU1fUkVHSU9OICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlY3RvclN1c3BlbmQgIT0gQWRkcmVzcy8oU2VjU2l6ZSsxKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoflBBUkFNX1JFR0lPTiAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWN0b3JTdXNwZW5kICE9IEFkZHJlc3MvKFNlY1NpemUrMSkrMzAqYl9hY3QpKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXR1cm5TZWN0b3JJRChzZWN0LEFkZHJlc3MpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTZWNfUHJvdFtzZWN0XSA9PSAwICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBQQl9iaXRzW3NlY3RdPT0gMSAmJiBEWUJfYml0c1tzZWN0XT09IDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFNUQVJUID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFNUQVJUIDw9ICM1IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBHU1VTUCAgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQR1JFUyAgID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMF0gPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQSAgICAgID0gc2VjdDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkciAgICA9IEFkZHJlc3M7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJfdG1wPSBBZGRyZXNzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cl9jbnQgID0gQnl0ZV9udW1iZXI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaT13cl9jbnQ7aT49MDtpPWktMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChWaW9sICE9IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0RhdGFbaV0gPSAtMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRGF0YVtpXSA9IFdCeXRlW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMV0gPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVs2XSA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMV0gPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzZdID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKEluc3RydWN0ID09IFFQUCB8fCBJbnN0cnVjdCA9PSBRUFA0KSAmJiBXRUwgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoUEFSQU1fUkVHSU9OICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlY3RvclN1c3BlbmQgIT0gQWRkcmVzcy8oU2VjU2l6ZSsxKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoflBBUkFNX1JFR0lPTiAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZWN0b3JTdXNwZW5kICE9IEFkZHJlc3MvKFNlY1NpemUrMSkrMzAqYl9hY3QpKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXR1cm5TZWN0b3JJRChzZWN0LEFkZHJlc3MpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnbV9wYWdlID0gQWRkcmVzcyAvIChQYWdlU2l6ZSsxKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTZWNfUHJvdFtzZWN0XSA9PSAwICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBQQl9iaXRzW3NlY3RdPT0gMSAmJiBEWUJfYml0c1tzZWN0XT09IDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFNUQVJUID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFNUQVJUIDw9ICM1IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBHU1VTUCAgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQR1JFUyAgID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMF0gPSAxJ2IxOworLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFQUF9wYWdlW3BnbV9wYWdlXSA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNBICAgICAgPSBzZWN0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyICAgID0gQWRkcmVzczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcl90bXA9IEFkZHJlc3M7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyX2NudCAgPSBCeXRlX251bWJlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpPXdyX2NudDtpPj0wO2k9aS0xKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFZpb2wgIT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRGF0YVtpXSA9IC0xOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdEYXRhW2ldID0gV0J5dGVbaV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVsxXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzZdID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVsxXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbNl0gPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBXUkVOKQorICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMV0gPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBDTFNSKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAvL1RoZSBDbGVhciBTdGF0dXMgUmVnaXN0ZXIgQ29tbWFuZCByZXNldHMgYml0IFNSMVs1XQorICAgICAgICAgICAgICAgICAgICAvLyhFcmFzZSBGYWlsIEZsYWcpIGFuZCBiaXQgU1IxWzZdIChQcm9ncmFtIEZhaWwgRmxhZykKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzVdID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzZdID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IEJSV1IpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBCYW5rX0FkZHJfcmVnWzddID0gQmFua19BZGRyX3JlZ19pbls3XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEJhbmtfQWRkcl9yZWdbMF0gPSBCYW5rX0FkZHJfcmVnX2luWzBdOworICAgICAgICAgICAgICAgICAgICAgICAgaWYoQmFua19BZGRyX3JlZ19pblsxXSA9PSAxKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIldBUk5JTkc6IENoYW5naW5nIHZhbHVlcyBvZiAiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIkJhbmsgQWRkcmVzcyBSZWdpc3RlciIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiQkEyNSBpcyBub3QgYWxsb3dlZCEhISIpOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBXUlIgJiYgQkFSX0FDQyA9PSAxKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAvLyBXcml0ZSB0byB0aGUgbG93ZXIgYWRkcmVzcyBiaXRzIG9mIHRoZSBCQVIKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChQX0VSUiA9PSAwICYmIEVfRVJSID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJhbmtfQWRkcl9yZWdbMF0gPSBCYW5rX0FkZHJfcmVnX2luWzBdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKEJhbmtfQWRkcl9yZWdfaW5bMV0gPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIldBUk5JTkc6IENoYW5naW5nIHZhbHVlcyBvZiAiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJCYW5rIEFkZHJlc3MgUmVnaXN0ZXIiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJCQTI1IGlzIG5vdCBhbGxvd2VkISEhIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IERZQldSICAmJiBXRUwgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIFJldHVyblNlY3RvcklEKHNlY3QsQWRkcmVzcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBwZ21fcGFnZSA9IEFkZHJlc3MgLyAoUGFnZVNpemUrMSk7CisgICAgICAgICAgICAgICAgICAgICAgICBQU1RBUlQgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgUFNUQVJUIDw9ICM1IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVswXSAgICA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBFUlJTKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzJbMV0gID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzBdID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChCb3R0b21Cb290KQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUEFSQU1fUkVHSU9OKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHIgPSBTZWN0b3JTdXNwZW5kKihTZWNTaXplKzEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyID0gKFNlY3RvclN1c3BlbmQtMzApKihTZWNTaXplKzEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHIgPSBTZWN0b3JTdXNwZW5kKihTZWNTaXplKzEpOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBBRERSSElMT19TRUMoQWRkckxvLCBBZGRySGksIEFkZHIpOworICAgICAgICAgICAgICAgICAgICAgICAgRVJFUyA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICBFUkVTIDw9ICM1IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBSRVNfVE9fU1VTUF9UWVBfVElNRSA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICBSRVNfVE9fU1VTUF9UWVBfVElNRSA8PSAjMTAwMDAwMDAwIDEnYjA7Ly8xMDB1cworICAgICAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdHJ1Y3QgPT0gQlJBQyAmJiBQX0VSUiA9PSAwICYmIEVfRVJSID09IDAgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIFJkUHN3ZFByb3RNb2RlID09IDApCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBCQVJfQUNDID0gMTsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIEJBUl9BQ0MgPSAwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICBFUlNfU1VTUF9QRzoKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjE7CisgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgaWYgKG9lKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGFueV9yZWFkID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEluc3RydWN0ID09IFJEU1IpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBTdGF0dXMgUmVnaXN0ZXIgMQorICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IFN0YXR1c19yZWcxWzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBSRFNSMikKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy9SZWFkIFN0YXR1cyBSZWdpc3RlciAyCisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gU3RhdHVzX3JlZzJbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFJEQ1IpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAvL1JlYWQgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAxCisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gQ29uZmlnX3JlZzFbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZWxzZSBpZiAob2VfeikKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBIT0xETmVnT3V0X3pkID0gMSdiWjsKKyAgICAgICAgICAgICAgICAgICAgV1BOZWdPdXRfemQgICA9IDEnYlo7CisgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgICAgICAgPSAxJ2JaOworICAgICAgICAgICAgICAgICAgICBTSU91dF96ZCAgICAgID0gMSdiWjsKKyAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgIGlmKGN1cnJlbnRfc3RhdGVfZXZlbnQgJiYgY3VycmVudF9zdGF0ZSA9PSBFUlNfU1VTUF9QRykKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBpZiAoflBET05FKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgQUREUkhJTE9fUEcoQWRkckxvLCBBZGRySGksIEFkZHIpOworICAgICAgICAgICAgICAgICAgICAgICAgY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaT0wO2k8PXdyX2NudDtpPWkrMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X2ludCA9IFdEYXRhW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZF9pbnQgPSBNZW1bQWRkciArIGkgLSBjbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdfaW50ID4gLTEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X2JpdCA9IG5ld19pbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvbGRfaW50ID4gLTEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRfYml0ID0gb2xkX2ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihqPTA7ajw9NztqPWorMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKH5vbGRfYml0W2pdKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfYml0W2pdID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X2ludCA9IG5ld19iaXQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRGF0YVtpXSA9IG5ld19pbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdEYXRhW2ldID0gLTE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKEFkZHIgKyBpKSA9PSBBZGRySGkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkciA9IEFkZHJMbzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY250ID0gaSArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGNudCA9MDsKKyAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgIGlmKFBET05FID09IDEpCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMF0gPSAxJ2IwOy8vV0lQCisgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzFdID0gMSdiMDsvL1dFTAorICAgICAgICAgICAgICAgICAgICBmb3IgKGk9MDtpPD13cl9jbnQ7aT1pKzEpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBNZW1bQWRkcl90bXAgKyBpIC0gY250XSA9IFdEYXRhW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChBZGRyX3RtcCArIGkpID09IEFkZHJIaSApCisgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHJfdG1wID0gQWRkckxvOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNudCA9IGkgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgaWYgKEluc3RydWN0KQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0cnVjdCA9PSBQR1NQICYmIH5QUkdTVVNQX2luKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKH5SRVNfVE9fU1VTUF9NSU5fVElNRSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEdTVVNQID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQR1NVU1AgPD0gIzUgMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkdTVVNQX2luID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUkVTX1RPX1NVU1BfVFlQX1RJTUUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkoIlR5cGljYWwgcGVyaW9kcyBhcmUgbmVlZGVkIGZvciAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJvZ3JhbSB0byBwcm9ncmVzcyB0byBjb21wbGV0aW9uIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkoIk1pbmltdW0gZm9yIHRQUlMgaXMgbm90IHNhdGlzZmllZCEgIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUEdTUCBjb21tYW5kIGlzIGlnbm9yZWQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICBQQVNTX1BHOgorICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICByZF9mYXN0ID0gMSdiMTsKKyAgICAgICAgICAgICAgICByZF9zbG93ID0gMSdiMDsKKyAgICAgICAgICAgICAgICBkdWFsICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICBkZHIgICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICBpZiAob2UpCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgYW55X3JlYWQgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdHJ1Y3QgPT0gUkRTUikKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy9SZWFkIFN0YXR1cyBSZWdpc3RlciAxCisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gU3RhdHVzX3JlZzFbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFJEU1IyKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAvL1JlYWQgU3RhdHVzIFJlZ2lzdGVyCisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gU3RhdHVzX3JlZzJbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFJEQ1IpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAvL1JlYWQgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAxCisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gQ29uZmlnX3JlZzFbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZWxzZSBpZiAob2VfeikKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBIT0xETmVnT3V0X3pkID0gMSdiWjsKKyAgICAgICAgICAgICAgICAgICAgV1BOZWdPdXRfemQgICA9IDEnYlo7CisgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgICAgICAgPSAxJ2JaOworICAgICAgICAgICAgICAgICAgICBTSU91dF96ZCAgICAgID0gMSdiWjsKKyAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgIG5ld19wYXNzID0gUGFzc3dvcmRfcmVnX2luOworICAgICAgICAgICAgICAgIG9sZF9wYXNzID0gUGFzc3dvcmRfcmVnOworICAgICAgICAgICAgICAgIGZvciAoaT0wO2k8PTYzO2k9aSsxKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGlmIChvbGRfcGFzc1tqXSA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgbmV3X3Bhc3Nbal0gPSAwOworICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgaWYgKFBET05FID09IDEpCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgUGFzc3dvcmRfcmVnID0gbmV3X3Bhc3M7CisgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzBdID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMV0gPSAxJ2IwOworICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgIFBBU1NfVU5MT0NLOgorICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICByZF9mYXN0ID0gMSdiMTsKKyAgICAgICAgICAgICAgICByZF9zbG93ID0gMSdiMDsKKyAgICAgICAgICAgICAgICBkdWFsICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICBkZHIgICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICBpZiAob2UpCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgYW55X3JlYWQgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdHJ1Y3QgPT0gUkRTUikKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy9SZWFkIFN0YXR1cyBSZWdpc3RlciAxCisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gU3RhdHVzX3JlZzFbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFJEU1IyKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAvL1JlYWQgU3RhdHVzIFJlZ2lzdGVyCisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gU3RhdHVzX3JlZzJbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFJEQ1IpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAvL1JlYWQgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAxCisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gQ29uZmlnX3JlZzFbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZWxzZSBpZiAob2VfeikKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBIT0xETmVnT3V0X3pkID0gMSdiWjsKKyAgICAgICAgICAgICAgICAgICAgV1BOZWdPdXRfemQgICA9IDEnYlo7CisgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgICAgICAgPSAxJ2JaOworICAgICAgICAgICAgICAgICAgICBTSU91dF96ZCAgICAgID0gMSdiWjsKKyAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgIGlmIChQQVNTX1RFTVAgPT0gUGFzc3dvcmRfcmVnKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIFBBU1NfVU5MT0NLRUQgPSAxJ2IxOworICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBQQVNTX1VOTE9DS0VEID0gMSdiMDsKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBpZiAoUEFTU1VMQ0tfb3V0ID09IDEnYjEpCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgaWYgKChQQVNTX1VOTE9DS0VEID09IDEnYjEpICYmICh+UFdETUxCKSkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIFBQQkxbMF0gPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMF0gPSAxJ2IwOyAvL1dJUAorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbNl0gPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJJbmNvcnJlY3QgUGFzc3dvcmQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFBBU1NBQ0NfaW4gPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMV0gPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICBQQVNTVUxDS19pbiA9IDEnYjA7CisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgUFBCX1BHOgorICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICByZF9mYXN0ID0gMSdiMTsKKyAgICAgICAgICAgICAgICByZF9zbG93ID0gMSdiMDsKKyAgICAgICAgICAgICAgICBkdWFsICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICBkZHIgICAgID0gMSdiMDsKKyAgICAgICAgICAgICAgICBpZiAob2UpCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgYW55X3JlYWQgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdHJ1Y3QgPT0gUkRTUikKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy9SZWFkIFN0YXR1cyBSZWdpc3RlciAxCisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gU3RhdHVzX3JlZzFbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFJEU1IyKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAvL1JlYWQgU3RhdHVzIFJlZ2lzdGVyCisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gU3RhdHVzX3JlZzJbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEluc3RydWN0ID09IFJEQ1IpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAvL1JlYWQgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAxCisgICAgICAgICAgICAgICAgICAgICAgICBTT3V0X3pkID0gQ29uZmlnX3JlZzFbNy1yZWFkX2NudF07CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IHJlYWRfY250ICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NudCA9PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZWxzZSBpZiAob2VfeikKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBIT0xETmVnT3V0X3pkID0gMSdiWjsKKyAgICAgICAgICAgICAgICAgICAgV1BOZWdPdXRfemQgICA9IDEnYlo7CisgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgICAgICAgPSAxJ2JaOworICAgICAgICAgICAgICAgICAgICBTSU91dF96ZCAgICAgID0gMSdiWjsKKyAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgIGlmIChQRE9ORSkKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBpZiAoUFBCX0xPQ0sgIT09IDApCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBQUEJfYml0c1tzZWN0XT0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzBdID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzFdID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzVdID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzBdID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzFdID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgUFBCX0VSUzoKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjE7CisgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgaWYgKG9lKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGFueV9yZWFkID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEluc3RydWN0ID09IFJEU1IpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBTdGF0dXMgUmVnaXN0ZXIgMQorICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IFN0YXR1c19yZWcxWzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBSRFNSMikKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy9SZWFkIFN0YXR1cyBSZWdpc3RlcgorICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IFN0YXR1c19yZWcyWzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBSRENSKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgLy9SZWFkIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMQorICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IENvbmZpZ19yZWcxWzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG9lX3opCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgSE9MRE5lZ091dF96ZCA9IDEnYlo7CisgICAgICAgICAgICAgICAgICAgIFdQTmVnT3V0X3pkICAgPSAxJ2JaOworICAgICAgICAgICAgICAgICAgICBTT3V0X3pkICAgICAgID0gMSdiWjsKKyAgICAgICAgICAgICAgICAgICAgU0lPdXRfemQgICAgICA9IDEnYlo7CisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBpZiAoUFBCRVJBU0Vfb3V0ID09IDEnYjEpCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgaWYgKChQUEJfTE9DSyAhPT0gMCkgJiYgUFBCT1RQKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgUFBCX2JpdHMgPSB7NTQyezEnYjF9fTsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzVdID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzBdID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMV0gPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICBQUEJFUkFTRV9pbiA9IDEnYjA7CisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgQVVUT0JPT1RfUEc6CisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IxOworICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgIGlmIChvZSkKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBhbnlfcmVhZCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0cnVjdCA9PSBSRFNSKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAvL1JlYWQgU3RhdHVzIFJlZ2lzdGVyIDEKKyAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSBTdGF0dXNfcmVnMVs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gUkRTUjIpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBTdGF0dXMgUmVnaXN0ZXIgMgorICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IFN0YXR1c19yZWcyWzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBSRENSKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgLy9SZWFkIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMQorICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IENvbmZpZ19yZWcxWzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG9lX3opCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgSE9MRE5lZ091dF96ZCA9IDEnYlo7CisgICAgICAgICAgICAgICAgICAgIFdQTmVnT3V0X3pkICAgPSAxJ2JaOworICAgICAgICAgICAgICAgICAgICBTT3V0X3pkICAgICAgID0gMSdiWjsKKyAgICAgICAgICAgICAgICAgICAgU0lPdXRfemQgICAgICA9IDEnYlo7CisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBpZiAoUERPTkUpCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgZm9yKGk9MDtpPD0zO2k9aSsxKQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGo9MDtqPD03O2o9aisxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF1dG9Cb290X3JlZ1tpKjgral0gPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF1dG9Cb290X3JlZ19pblsoMy1pKSo4K2pdOworICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVswXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzFdID0gMSdiMDsKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICBQTEJfUEc6CisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IxOworICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgIGlmIChvZSkKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBhbnlfcmVhZCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0cnVjdCA9PSBSRFNSKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAvL1JlYWQgU3RhdHVzIFJlZ2lzdGVyIDEKKyAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSBTdGF0dXNfcmVnMVs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gUkRTUjIpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBTdGF0dXMgUmVnaXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSBTdGF0dXNfcmVnMls3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gUkRDUikKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDEKKyAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSBDb25maWdfcmVnMVs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChvZV96KQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIEhPTEROZWdPdXRfemQgPSAxJ2JaOworICAgICAgICAgICAgICAgICAgICBXUE5lZ091dF96ZCAgID0gMSdiWjsKKyAgICAgICAgICAgICAgICAgICAgU091dF96ZCAgICAgICA9IDEnYlo7CisgICAgICAgICAgICAgICAgICAgIFNJT3V0X3pkICAgICAgPSAxJ2JaOworICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgaWYgKFBET05FKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIFBQQkxbMF0gPSAxJ2IwOworICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVswXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzFdID0gMSdiMDsKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICBEWUJfUEc6CisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgIHJkX2Zhc3QgPSAxJ2IxOworICAgICAgICAgICAgICAgIHJkX3Nsb3cgPSAxJ2IwOworICAgICAgICAgICAgICAgIGR1YWwgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgIGRkciAgICAgPSAxJ2IwOworICAgICAgICAgICAgICAgIGlmIChvZSkKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBhbnlfcmVhZCA9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgIGlmIChJbnN0cnVjdCA9PSBSRFNSKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAvL1JlYWQgU3RhdHVzIFJlZ2lzdGVyIDEKKyAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSBTdGF0dXNfcmVnMVs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gUkRTUjIpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBTdGF0dXMgUmVnaXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSBTdGF0dXNfcmVnMls3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoSW5zdHJ1Y3QgPT0gUkRDUikKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDEKKyAgICAgICAgICAgICAgICAgICAgICAgIFNPdXRfemQgPSBDb25maWdfcmVnMVs3LXJlYWRfY250XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfY250ID0gcmVhZF9jbnQgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY250ID09IDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSAwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChvZV96KQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIEhPTEROZWdPdXRfemQgPSAxJ2JaOworICAgICAgICAgICAgICAgICAgICBXUE5lZ091dF96ZCAgID0gMSdiWjsKKyAgICAgICAgICAgICAgICAgICAgU091dF96ZCAgICAgICA9IDEnYlo7CisgICAgICAgICAgICAgICAgICAgIFNJT3V0X3pkICAgICAgPSAxJ2JaOworICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgaWYgKFBET05FKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIERZQkFSID0gRFlCQVJfaW47CisgICAgICAgICAgICAgICAgICAgIGlmIChEWUJBUiA9PSA4J2hGRikKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIERZQl9iaXRzW3NlY3RdPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoRFlCQVIgPT0gOCdoMDApCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBEWUJfYml0c1tzZWN0XT0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzZdID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzBdID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMV0gPSAxJ2IwOworICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgIEFTUF9QRzoKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjE7CisgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgaWYgKG9lKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGFueV9yZWFkID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEluc3RydWN0ID09IFJEU1IpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBTdGF0dXMgUmVnaXN0ZXIgMQorICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IFN0YXR1c19yZWcxWzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBSRFNSMikKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy9SZWFkIFN0YXR1cyBSZWdpc3RlcgorICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IFN0YXR1c19yZWcyWzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBSRENSKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgLy9SZWFkIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMQorICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IENvbmZpZ19yZWcxWzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG9lX3opCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgSE9MRE5lZ091dF96ZCA9IDEnYlo7CisgICAgICAgICAgICAgICAgICAgIFdQTmVnT3V0X3pkICAgPSAxJ2JaOworICAgICAgICAgICAgICAgICAgICBTT3V0X3pkICAgICAgID0gMSdiWjsKKyAgICAgICAgICAgICAgICAgICAgU0lPdXRfemQgICAgICA9IDEnYlo7CisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBpZiAoUERPTkUpCisgICAgICAgICAgICAgICAgYmVnaW4KKworICAgICAgICAgICAgICAgICAgICBpZiAoUlBNRSA9PSAxJ2IwICYmIEFTUF9yZWdfaW5bNV0gPT0gMSdiMSkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbNl0gPSAxJ2IxOyAvL1BfRVJSCisgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5KCJSUE1FIGJpdCBpcyBhbGxyZWFkeSBwcm9ncmFtbWVkIik7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBBU1BfcmVnWzVdID0gQVNQX3JlZ19pbls1XTsvL1JQTUUKKyAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgaWYgKFBQQk9UUCA9PSAxJ2IwICYmIEFTUF9yZWdfaW5bM10gPT0gMSdiMSkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbNl0gPSAxJ2IxOyAvL1BfRVJSCisgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5KCJQUEJPVFAgYml0IGlzIGFsbHJlYWR5IHByb2dyYW1tZWQiKTsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFTUF9yZWdbM10gPSBBU1BfcmVnX2luWzNdOy8vUFBCT1RQCisgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgIGlmIChQV0RNTEIgPT0gMSdiMSAmJiBQU1RNTEIgPT0gMSdiMSkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBU1BfcmVnX2luWzJdID09IDEnYjAgJiYgQVNQX3JlZ19pblsxXSA9PSAxJ2IwKQorICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSgiQVNQUlsyOjFdID0gMDAgIElsbGVnYWwgY29uZGl0aW9uIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbNl0gPSAxJ2IxOyAvL1BfRVJSCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFTUF9yZWdfaW5bMl0hPT0xJ2IxIHx8IEFTUF9yZWdfaW5bMV0hPT0xJ2IxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTUE9UUEZMQUcgPSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTUF9yZWdbMl0gPSBBU1BfcmVnX2luWzJdOy8vUFdETUxCCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNQX3JlZ1sxXSA9IEFTUF9yZWdfaW5bMV07Ly9QU1RNTEIKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVswXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzFdID0gMSdiMDsKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICBOVkRMUl9QRzoKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgcmRfZmFzdCA9IDEnYjE7CisgICAgICAgICAgICAgICAgcmRfc2xvdyA9IDEnYjA7CisgICAgICAgICAgICAgICAgZHVhbCAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgZGRyICAgICA9IDEnYjA7CisgICAgICAgICAgICAgICAgaWYgKG9lKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGFueV9yZWFkID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEluc3RydWN0ID09IFJEU1IpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIC8vUmVhZCBTdGF0dXMgUmVnaXN0ZXIgMQorICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IFN0YXR1c19yZWcxWzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBSRFNSMikKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgLy9SZWFkIFN0YXR1cyBSZWdpc3RlcgorICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IFN0YXR1c19yZWcyWzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChJbnN0cnVjdCA9PSBSRENSKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgLy9SZWFkIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMQorICAgICAgICAgICAgICAgICAgICAgICAgU091dF96ZCA9IENvbmZpZ19yZWcxWzctcmVhZF9jbnRdOworICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9jbnQgPSByZWFkX2NudCArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZF9jbnQgPT0gOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2NudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG9lX3opCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgSE9MRE5lZ091dF96ZCA9IDEnYlo7CisgICAgICAgICAgICAgICAgICAgIFdQTmVnT3V0X3pkICAgPSAxJ2JaOworICAgICAgICAgICAgICAgICAgICBTT3V0X3pkICAgICAgID0gMSdiWjsKKyAgICAgICAgICAgICAgICAgICAgU0lPdXRfemQgICAgICA9IDEnYlo7CisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBpZiAoUERPTkUpCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgaWYgKE5WRExSX3JlZyA9PSAwKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgTlZETFJfcmVnID0gTlZETFJfcmVnX2luOworICAgICAgICAgICAgICAgICAgICAgICAgVkRMUl9yZWcgPSBOVkRMUl9yZWdfaW47CisgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVswXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVsxXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVswXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVsxXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVs2XSA9IDEnYjE7IC8vUF9FUlIKKyAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5KCJOVkRMUiBiaXRzIGFsbHJlYWR5IHByb2dyYW1tZWQiKTsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgUkVTRVRfU1RBVEU6CisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgLy90aGUgZGVmYXVsdCBjb25kaXRpb24gaGFyZHdhcmUgcmVzZXQKKyAgICAgICAgICAgIC8vVGhlIEJhbmsgQWRkcmVzcyBSZWdpc3RlciBpcyBsb2FkZWQgdG8gYWxsIHplcm9lcworICAgICAgICAgICAgICAgIEJhbmtfQWRkcl9yZWcgPSA4J2gwOworICAgICAgICAgICAgICAgIGlmIChCUE5WICYmIH5GUkVFWkUpIC8vJiYgfkxPQ0sgCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbMl0gPSAxJ2IxOy8vIEJQMAorICAgICAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVszXSA9IDEnYjE7Ly8gQlAxCisgICAgICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzRdID0gMSdiMTsvLyBCUDIKKyAgICAgICAgICAgICAgICAgICAgQlBfYml0cyA9IDMnYjExMTsKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlX0JQID0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgIzEwMDAgY2hhbmdlX0JQID0gMSdiMDsKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAvL1Jlc2V0cyB0aGUgdm9sYXRpbGUgYml0cyBpbiB0aGUgU3RhdHVzIHJlZ2lzdGVyIDEKKyAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVs2XSA9IDEnYjA7CisgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzFbNV0gPSAxJ2IwOworICAgICAgICAgICAgICAgIFN0YXR1c19yZWcxWzFdID0gMSdiMDsKKyAgICAgICAgICAgICAgICBTdGF0dXNfcmVnMVswXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgLy9SZXNldHMgdGhlIHZvbGF0aWxlIGJpdHMgaW4gdGhlIFN0YXR1cyByZWdpc3RlciAyCisgICAgICAgICAgICAgICAgU3RhdHVzX3JlZzJbMV0gPSAxJ2IwOworICAgICAgICAgICAgICAgIFN0YXR1c19yZWcyWzBdID0gMSdiMDsKKyAgICAgICAgICAgICAgICAvL1Jlc2V0cyB0aGUgdm9sYXRpbGUgYml0cyBpbiB0aGUgQ29uZmlndXJhdGlvbiByZWdpc3RlciAxCisgICAgICAgICAgICAgICAgQ29uZmlnX3JlZzFbMF0gPSAxJ2IwOworICAgICAgICAgICAgICAgIC8vT24gcmVzZXQgY3ljbGVzIHRoZSBkYXRhIHBhdHRlcm4gcmV2ZXJ0cyBiYWNrCisgICAgICAgICAgICAgICAgLy90byB3aGF0IGlzIGluIHRoZSBOVkRMUgorICAgICAgICAgICAgICAgIFZETFJfcmVnID0gTlZETFJfcmVnOworICAgICAgICAgICAgICAgIHN0YXJ0X2RscCA9IDEnYjA7CisgICAgICAgICAgICAgICAgLy9Mb2FkcyB0aGUgUHJvZ3JhbSBCdWZmZXIgd2l0aCBhbGwgb25lcworICAgICAgICAgICAgICAgIGZvcihpPTA7aTw9NTExO2k9aSsxKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIFdEYXRhW2ldID0gTWF4RGF0YTsKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBpZiAoflBXRE1MQikKKyAgICAgICAgICAgICAgICAgICAgUFBCTFswXSA9IDEnYjA7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBQUEJMWzBdID0gMSdiMTsKKyAgICAgICAgICAgIGVuZAorCisgICAgICAgIGVuZGNhc2UKKworICAgICAgICAvL091dHB1dCBEaXNhYmxlIENvbnRyb2wKKyAgICAgICAgaWYgKENTTmVnX2lwZCApCisgICAgICAgIGJlZ2luCisgICAgICAgICAgICBTT3V0X3pkID0gMSdiWjsKKyAgICAgICAgICAgIFNJT3V0X3pkID0gMSdiWjsKKyAgICAgICAgICAgIEhPTEROZWdPdXRfemQgPSAxJ2JaOworICAgICAgICAgICAgV1BOZWdPdXRfemQgPSAxJ2JaOworICAgICAgICBlbmQKKyAgICBlbmQKKworICAgIGFzc2lnbiBmYXN0X3JkID0gcmRfZmFzdDsKKyAgICBhc3NpZ24gcmQgPSByZF9zbG93OworICAgIGFzc2lnbiBkZHJkID0gZGRyICYmIH5kZHI4MDsKKyAgICBhc3NpZ24gZGRyZDgwID0gZGRyICYmIGRkcjgwOworICAgIGFzc2lnbiBmYXN0X2RkciA9IGRkcl9mYXN0OworCisgICAgYWx3YXlzIEAoY2hhbmdlX1RCUEFSTSwgcG9zZWRnZSBQb3dlcmVkVXApCisgICAgYmVnaW4KKyAgICAgICAgaWYgKHRtcF9jaGFyMiA9PSAiMCIpCisgICAgICAgIGJlZ2luCisgICAgICAgICAgICBpZiAoVEJQQVJNID09IDApCisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgIEJvdHRvbUJvb3QgPSAxOworICAgICAgICAgICAgICAgIGJfYWN0ID0gMTsKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICBUb3BCb290ICAgICA9IDE7CisgICAgICAgICAgICAgICAgQm90dG9tQm9vdCAgPSAwOworICAgICAgICAgICAgICAgIGJfYWN0ID0gMDsKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKyAgICAgICAgZWxzZSBpZiAodG1wX2NoYXIyID09ICIxIikKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIFVuaWZvcm1TZWMgPSAxOworICAgICAgICBlbmQKKyAgICBlbmQKKworICAgIGFsd2F5cyBAKHBvc2VkZ2UgY2hhbmdlX0JQKQorICAgIGJlZ2luCisgICAgICAgIGNhc2UgKFN0YXR1c19yZWcxWzQ6Ml0pCisKKyAgICAgICAgICAgIDMnYjAwMDoKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgU2VjX1Byb3RbNTQxOjBdID0gezU0MnsxJ2IwfX07CisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIDMnYjAwMToKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgaWYgKHRtcF9jaGFyMiA9PSAiMSIpCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgaWYgKH5UQlBST1QpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBTZWNfUHJvdFtTZWNOdW0yNTY6KFNlY051bTI1NisxKSo2My82NF0gPSAyJ2IxMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNlY19Qcm90WyhTZWNOdW0yNTYrMSkqNjMvNjQtMSA6IDBdID0gMTI2J2gwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbKFNlY051bTI1NisxKS82NC0xIDogMF0gPSAyJ2IxMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNlY19Qcm90W1NlY051bTI1NiA6IChTZWNOdW0yNTYrMSkvNjRdID0gMTI2J2gwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbHNlIGlmICh0bXBfY2hhcjIgPT0gIjAiICYmIFRCUEFSTSA9PSAxKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGlmICh+VEJQUk9UKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbU2VjTnVtNjQ6KFNlY051bTY0LTI5KSo2My82NF0gPSB7Mzh7MSdiMX19OworICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbKFNlY051bTY0LTI5KSo2My82NC0xIDogMF0gICAgPSA1MDQnaDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBTZWNfUHJvdFsoU2VjTnVtNjQtMjkpLzY0LTEgOiAwXSA9IHs4ezEnYjF9fTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNlY19Qcm90W1NlY051bTY0IDogKFNlY051bTY0LTI5KS82NF0gPSA1MzQnaDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBpZiAoflRCUFJPVCkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNlY19Qcm90W1NlY051bTY0OihTZWNOdW02NC0yOSkqNjMvNjQrMzBdID0gezh7MSdiMX19OworICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbKFNlY051bTY0LTI5KSo2My82NCsyOSA6IDBdID0gNTM0J2gwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbKFNlY051bTY0LTI5KS82NCsyOSA6IDBdICAgICAgICA9IHszOHsxJ2IxfX07CisgICAgICAgICAgICAgICAgICAgICAgICBTZWNfUHJvdFtTZWNOdW02NCA6IChTZWNOdW02NC0yOSkvNjQrMzBdID0gNTA0J2gwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAzJ2IwMTA6CisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgIGlmICh0bXBfY2hhcjIgPT0gIjEiKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGlmICh+VEJQUk9UKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbU2VjTnVtMjU2IDogKFNlY051bTI1NisxKSozMS8zMl0gPSB7NHsxJ2IxfX07CisgICAgICAgICAgICAgICAgICAgICAgICBTZWNfUHJvdFsoU2VjTnVtMjU2KzEpKjMxLzMyLTEgOiAwXSA9IDEyNCdoMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNlY19Qcm90WyhTZWNOdW0yNTYrMSkvMzItMSA6IDBdID0gezR7MSdiMX19OworICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbU2VjTnVtMjU2IDogKFNlY051bTI1NisxKS8zMl0gPSAxMjQnaDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRtcF9jaGFyMiA9PSAiMCIgJiYgVEJQQVJNID09IDEpCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgaWYgKH5UQlBST1QpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBTZWNfUHJvdFtTZWNOdW02NCA6IChTZWNOdW02NC0yOSkqMzEvMzJdID0gezQ2ezEnYjF9fTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNlY19Qcm90WyhTZWNOdW02NC0yOSkqMzEvMzItMSA6IDBdID0gNDk2J2gwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbKFNlY051bTY0LTI5KS8zMi0xIDogMF0gPSB7MTZ7MSdiMX19OworICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbU2VjTnVtNjQgOiAoU2VjTnVtNjQtMjkpLzMyXSA9IDUyNidoMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGlmICh+VEJQUk9UKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbU2VjTnVtNjQ6KFNlY051bTY0LTI5KSozMS8zMiszMF0gPSB7MTZ7MSdiMX19OworICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbKFNlY051bTY0LTI5KSozMS8zMisyOSA6IDBdID0gNTI2J2gwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbKFNlY051bTY0LTI5KS8zMisyOSA6IDBdID0gezQ2ezEnYjF9fTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNlY19Qcm90W1NlY051bTY0IDogKFNlY051bTY0LTI5KS8zMiszMF0gPSA0OTYnaDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgIDMnYjAxMToKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgaWYgKHRtcF9jaGFyMiA9PSAiMSIpCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgaWYgKH5UQlBST1QpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBTZWNfUHJvdFtTZWNOdW0yNTYgOiAoU2VjTnVtMjU2KzEpKjE1LzE2XSA9IDgnaEZGOworICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbKFNlY051bTI1NisxKSoxNS8xNi0xIDogMF0gPSAxMjAnaDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBTZWNfUHJvdFsoU2VjTnVtMjU2KzEpLzE2LTEgOiAwXSA9IDgnaEZGOworICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbU2VjTnVtMjU2IDogKFNlY051bTI1NisxKS8xNl0gPSAxMjAnaDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRtcF9jaGFyMiA9PSAiMCIgJiYgVEJQQVJNID09IDEpCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgaWYgKH5UQlBST1QpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBTZWNfUHJvdFtTZWNOdW02NCA6IChTZWNOdW02NC0yOSkqMTUvMTZdID0gezYyezEnYjF9fTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNlY19Qcm90WyhTZWNOdW02NC0yOSkqMTUvMTYtMSA6IDBdID0gNDgwJ2gwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbKFNlY051bTY0LTI5KS8xNi0xIDogMF0gPSB7MzJ7MSdiMX19OworICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbU2VjTnVtNjQgOiAoU2VjTnVtNjQtMjkpLzE2XSA9IDUxMCdoMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGlmICh+VEJQUk9UKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbU2VjTnVtNjQgOiAoU2VjTnVtNjQtMjkpKjE1LzE2KzMwXT17MzJ7MSdiMX19OworICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbKFNlY051bTY0LTI5KSoxNS8xNisyOSA6IDBdID0gNTEwJ2gwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbKFNlY051bTY0LTI5KS8xNisyOSA6IDBdID17NjJ7MSdiMX19OworICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbU2VjTnVtNjQgOiAoU2VjTnVtNjQtMjkpLzE2KzMwXSA9IDQ4MCdoMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgMydiMTAwOgorICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICBpZiAodG1wX2NoYXIyID09ICIxIikKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBpZiAoflRCUFJPVCkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNlY19Qcm90W1NlY051bTI1NiA6IChTZWNOdW0yNTYrMSkqNy84XSA9IHsxNnsxJ2IxfX07CisgICAgICAgICAgICAgICAgICAgICAgICBTZWNfUHJvdFsoU2VjTnVtMjU2KzEpKjcvOC0xIDogMF0gPSAxMTInaDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBTZWNfUHJvdFsoU2VjTnVtMjU2KzEpLzgtMSA6IDBdID0gezE2ezEnYjF9fTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNlY19Qcm90W1NlY051bTI1NiA6IChTZWNOdW0yNTYrMSkvOF0gPSAxMTInaDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRtcF9jaGFyMiA9PSAiMCIgJiYgVEJQQVJNID09IDEpCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgaWYgKH5UQlBST1QpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBTZWNfUHJvdFtTZWNOdW02NCA6IChTZWNOdW02NC0yOSkqNy84XSA9IHs5NHsxJ2IxfX07CisgICAgICAgICAgICAgICAgICAgICAgICBTZWNfUHJvdFsoU2VjTnVtNjQtMjkpKjcvOC0xIDogMF0gPSA0NDgnaDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBTZWNfUHJvdFsoU2VjTnVtNjQtMjkpLzgtMSA6IDBdID0gezY0ezEnYjF9fTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNlY19Qcm90W1NlY051bTY0IDogKFNlY051bTY0LTI5KS84XSA9IDQ3OCdoMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGlmICh+VEJQUk9UKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbU2VjTnVtNjQgOiAoU2VjTnVtNjQtMjkpKjcvOCszMF0gPXs2NHsxJ2IxfX07CisgICAgICAgICAgICAgICAgICAgICAgICBTZWNfUHJvdFsoU2VjTnVtNjQtMjkpKjcvOCsyOSA6IDBdID0gNDc4J2gwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbKFNlY051bTY0LTI5KS84KzI5IDogMF0gPSB7OTR7MSdiMX19OworICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbU2VjTnVtNjQgOiAoU2VjTnVtNjQtMjkpLzgrMzBdID0gNDQ4J2gwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAzJ2IxMDE6CisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgIGlmICh0bXBfY2hhcjIgPT0gIjEiKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGlmICh+VEJQUk9UKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbU2VjTnVtMjU2IDogKFNlY051bTI1NisxKSozLzRdID0gezMyezEnYjF9fTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNlY19Qcm90WyhTZWNOdW0yNTYrMSkqMy80LTEgOiAwXSA9IDk2J2gwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbKFNlY051bTI1NisxKS80LTEgOiAwXSA9IHszMnsxJ2IxfX07CisgICAgICAgICAgICAgICAgICAgICAgICBTZWNfUHJvdFtTZWNOdW0yNTYgOiAoU2VjTnVtMjU2KzEpLzRdID0gOTYnaDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRtcF9jaGFyMiA9PSAiMCIgJiYgVEJQQVJNID09IDEpCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgaWYgKH5UQlBST1QpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBTZWNfUHJvdFtTZWNOdW02NCA6IChTZWNOdW02NC0yOSkqMy80XSA9IHsxNTh7MSdiMX19OworICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbKFNlY051bTY0LTI5KSozLzQtMSA6IDBdID0gMzg0J2gwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbKFNlY051bTY0LTI5KS80LTEgOiAwXSA9IHsxMjh7MSdiMX19OworICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbU2VjTnVtNjQgOiAoU2VjTnVtNjQtMjkpLzRdID0gNDE0J2gwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgaWYgKH5UQlBST1QpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBTZWNfUHJvdFtTZWNOdW02NCA6IChTZWNOdW02NC0yOSkqMy80KzMwXSA9IHsxMjh7MSdiMX19OworICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbKFNlY051bTY0LTI5KSozLzQrMjkgOiAwXSA9IDQxNCdoMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNlY19Qcm90WyhTZWNOdW02NC0yOSkvNCsyOSA6IDBdID0gezE1OHsxJ2IxfX07CisgICAgICAgICAgICAgICAgICAgICAgICBTZWNfUHJvdFtTZWNOdW02NCA6IChTZWNOdW02NC0yOSkvNCszMF0gPSAzODQnaDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgIDMnYjExMDoKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgaWYgKHRtcF9jaGFyMiA9PSAiMSIpCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgaWYgKH5UQlBST1QpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBTZWNfUHJvdFtTZWNOdW0yNTYgOiAoU2VjTnVtMjU2KzEpLzJdID0gezY0ezEnYjF9fTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNlY19Qcm90WyhTZWNOdW0yNTYrMSkvMi0xIDogMF0gPSA2NCdoMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIFNlY19Qcm90WyhTZWNOdW0yNTYrMSkvMi0xIDogMF0gPSB7NjR7MSdiMX19OworICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbU2VjTnVtMjU2IDogKFNlY051bTI1NisxKS8yXSA9IDY0J2gwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbHNlIGlmICh0bXBfY2hhcjIgPT0gIjAiICYmIFRCUEFSTSA9PSAxKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGlmICh+VEJQUk9UKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbU2VjTnVtNjQgOiAoU2VjTnVtNjQtMjkpLzJdID0gezI4NnsxJ2IxfX07CisgICAgICAgICAgICAgICAgICAgICAgICBTZWNfUHJvdFsoU2VjTnVtNjQtMjkpLzItMSA6IDBdID0gMjU2J2gwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbKFNlY051bTY0LTI5KS8yLTEgOiAwXSA9IHsyNTZ7MSdiMX19OworICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbU2VjTnVtNjQgOiAoU2VjTnVtNjQtMjkpLzJdID0gMjg2J2gwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgaWYgKH5UQlBST1QpCisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBTZWNfUHJvdFtTZWNOdW02NCA6IChTZWNOdW02NC0yOSkvMiszMF0gPSB7MjU2ezEnYjF9fTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNlY19Qcm90WyhTZWNOdW02NC0yOSkvMisyOSA6IDBdID0gMjg2J2gwOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgU2VjX1Byb3RbKFNlY051bTY0LTI5KS8yKzI5IDogMF0gPSB7Mjg2ezEnYjF9fTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNlY19Qcm90W1NlY051bTY0IDogKFNlY051bTY0LTI5KS8yKzMwXSA9IDI1NidoMDsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgMydiMTExOgorICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICBTZWNfUHJvdFtTZWNOdW02NDowXSA9ICB7NTQyezEnYjF9fTsKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmRjYXNlCisgICAgZW5kCisKKyAgICBhbHdheXMgQChTT3V0X3pkIG9yIEhPTEROZWdfaW4gb3IgU0lPdXRfemQpCisgICAgYmVnaW4KKyAgICAgICAgaWYgKEhPTEROZWdfaW4gPT0gMCAmJiB+UVVBRCkKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIGhvbGRfbW9kZSA9IDEnYjE7CisgICAgICAgICAgICBTSU91dF96ICAgPSAxJ2JaOworICAgICAgICAgICAgU091dF96ICAgID0gMSdiWjsKKyAgICAgICAgZW5kCisgICAgICAgIGVsc2UKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIGlmIChob2xkX21vZGUgPT0gMSkKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgU0lPdXRfeiA8PSAjKHRwZF9IT0xETmVnX1NPKSBTSU91dF96ZDsKKyAgICAgICAgICAgICAgICBTT3V0X3ogIDw9ICModHBkX0hPTEROZWdfU08pIFNPdXRfemQ7CisgICAgICAgICAgICAgICAgaG9sZF9tb2RlID0gIyh0cGRfSE9MRE5lZ19TTykgMSdiMDsKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICBTSU91dF96ID0gU0lPdXRfemQ7CisgICAgICAgICAgICAgICAgU091dF96ICA9IFNPdXRfemQ7CisgICAgICAgICAgICAgICAgaG9sZF9tb2RlID0gMSdiMDsKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKyAgICBlbmQKKworICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgIC8vIGF1dG9ib290IGNvbnRyb2wgbG9naWMKKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICBhbHdheXMgQChyaXNpbmdfZWRnZV9TQ0tfaXBkIG9yIGN1cnJlbnRfc3RhdGVfZXZlbnQpCisgICAgYmVnaW4KKyAgICAgICAgaWYoY3VycmVudF9zdGF0ZSA9PSBBVVRPQk9PVCkKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIGlmIChyaXNpbmdfZWRnZV9TQ0tfaXBkKQorICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICBpZiAoc3RhcnRfZGVsYXkgPiAwKQorICAgICAgICAgICAgICAgICAgICBzdGFydF9kZWxheSA9IHN0YXJ0X2RlbGF5IC0gMTsKKyAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICBpZiAoc3RhcnRfZGVsYXkgPT0gMCkKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgc3RhcnRfYXV0b2Jvb3QgPSAxOworICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorICAgIGVuZAorCisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgLy8gZnVuY3Rpb25zICYgdGFza3MKKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICAvLyBQcm9jZWR1cmUgRkREUl9EUEwKK3Rhc2sgUmV0dXJuX0RMUDsKKyAgICBpbnB1dCBpbnRlZ2VyIEluc3RydWN0OworICAgIGlucHV0IGludGVnZXIgRUhQOworICAgIGlucHV0IGludGVnZXIgTGF0ZW5jeV9jb2RlOworICAgIGlucHV0IGludGVnZXIgZHVtbXlfY250OworICAgIGlub3V0IHN0YXJ0X2RscDsKKyAgICBiZWdpbgorICAgICAgICBpZiAoSW5zdHJ1Y3QgPT0gRERSRlIgfHwgSW5zdHJ1Y3QgPT0gRERSRlI0KQorICAgICAgICBiZWdpbgorICAgICAgICAgICAgaWYgKEVIUCkKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgaWYgKExhdGVuY3lfY29kZSA9PSAxKQorICAgICAgICAgICAgICAgICAgICBzdGFydF9kbHAgPSAxJ2IxOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKExhdGVuY3lfY29kZSA9PSAyICYmIGR1bW15X2NudCA+PSAxKQorICAgICAgICAgICAgICAgICAgICBzdGFydF9kbHAgPSAxJ2IxOworICAgICAgICAgICAgICAgIGVsc2UgaWYoTGF0ZW5jeV9jb2RlID09IDMgfHwgTGF0ZW5jeV9jb2RlID09IDApCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgc3RhcnRfZGxwID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkoIldhcm5pbmcgYXQiLCAkdGltZSk7CisgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5KCJJbmFwcHJvcHJpYXRlIGxhdGVuY3kgaXMgc2V0IGR1cmluZyBEUEwgbW9kZSIpOworICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICBiZWdpbgorCisgICAgICAgICAgICAgICAgaWYgKExhdGVuY3lfY29kZSA9PSAzKQorICAgICAgICAgICAgICAgICAgICBzdGFydF9kbHAgPSAxJ2IxOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKExhdGVuY3lfY29kZSA9PSAwICYmIGR1bW15X2NudCA+PSAxKQorICAgICAgICAgICAgICAgICAgICBzdGFydF9kbHAgPSAxJ2IxOworICAgICAgICAgICAgICAgIGVsc2UgaWYoTGF0ZW5jeV9jb2RlID09IDEgJiYgZHVtbXlfY250ID49IDIpCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2RscCA9IDEnYjE7CisgICAgICAgICAgICAgICAgZWxzZSBpZihMYXRlbmN5X2NvZGUgPT0gMiAmJiBkdW1teV9jbnQgPj0gMykKKyAgICAgICAgICAgICAgICAgICAgc3RhcnRfZGxwID0gMSdiMTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2RscCA9IDEnYjA7CisgICAgICAgICAgICBlbmQKKyAgICAgICAgZW5kCisgICAgICAgIGlmIChJbnN0cnVjdCA9PSBERFJESU9SIHx8IEluc3RydWN0ID09IEREUkRJT1I0KQorICAgICAgICBiZWdpbgorICAgICAgICAgICAgaWYgKEVIUCkKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgaWYgKExhdGVuY3lfY29kZSA9PSAxICYmIGR1bW15X2NudCA+PSAxKQorICAgICAgICAgICAgICAgICAgICBzdGFydF9kbHAgPSAxJ2IxOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKExhdGVuY3lfY29kZSA9PSAyICYmIGR1bW15X2NudCA+PSAyKQorICAgICAgICAgICAgICAgICAgICBzdGFydF9kbHAgPSAxJ2IxOworICAgICAgICAgICAgICAgIGVsc2UgaWYoIExhdGVuY3lfY29kZSA9PSAzIHx8IExhdGVuY3lfY29kZSA9PSAwKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2RscCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5KCJXYXJuaW5nIGF0IiwgJHRpbWUpOworICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSgiSW5hcHByb3ByaWF0ZSBsYXRlbmN5IGlzIHNldCBkdXJpbmcgRFBMIG1vZGUiKTsKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2RscCA9IDEnYjA7CisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgaWYgKExhdGVuY3lfY29kZSA9PSAwICYmIGR1bW15X2NudCA+PSAyKQorICAgICAgICAgICAgICAgICAgICBzdGFydF9kbHAgPSAxJ2IxOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKExhdGVuY3lfY29kZSA9PSAxICYmIGR1bW15X2NudCA+PSAzKQorICAgICAgICAgICAgICAgICAgICBzdGFydF9kbHAgPSAxJ2IxOworICAgICAgICAgICAgICAgIGVsc2UgaWYoTGF0ZW5jeV9jb2RlID09IDIgJiYgZHVtbXlfY250ID49IDQpCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2RscCA9IDEnYjE7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzdGFydF9kbHAgPSAxJ2IwOworICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorICAgICAgICBpZiAoKEluc3RydWN0ID09IEREUlFJT1IgfHwgSW5zdHJ1Y3QgPT0gRERSUUlPUjQpICYmIFFVQUQpCisgICAgICAgIGJlZ2luCisgICAgICAgICAgICBpZiAoRUhQKQorICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICBpZiAoTGF0ZW5jeV9jb2RlID09IDAgJiYgZHVtbXlfY250ID49IDIpCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2RscCA9IDEnYjE7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoTGF0ZW5jeV9jb2RlID09IDEgJiYgZHVtbXlfY250ID49IDMpCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2RscCA9IDEnYjE7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoTGF0ZW5jeV9jb2RlID09IDIgJiYgZHVtbXlfY250ID49IDQpCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2RscCA9IDEnYjE7CisgICAgICAgICAgICAgICAgZWxzZSBpZiggTGF0ZW5jeV9jb2RlID09IDMpCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgc3RhcnRfZGxwID0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkoIldhcm5pbmcgYXQiLCAkdGltZSk7CisgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5KCJJbmFwcHJvcHJpYXRlIGxhdGVuY3kgaXMiKTsKKyAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkoInNldCBkdXJpbmcgRFBMIG1vZGUiKTsKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2RscCAgPSAxJ2IwOworCisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgaWYgKExhdGVuY3lfY29kZSA9PSAwICYmIGR1bW15X2NudCA+PSAyKQorICAgICAgICAgICAgICAgICAgICBzdGFydF9kbHAgPSAxJ2IxOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKExhdGVuY3lfY29kZSA9PSAxICYmIGR1bW15X2NudCA+PSAzKQorICAgICAgICAgICAgICAgICAgICBzdGFydF9kbHAgPSAxJ2IxOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKExhdGVuY3lfY29kZSA9PSAyICYmIGR1bW15X2NudCA+PSA0KQorICAgICAgICAgICAgICAgICAgICBzdGFydF9kbHAgPSAxJ2IxOworICAgICAgICAgICAgICAgIGVsc2UgaWYoIExhdGVuY3lfY29kZSA9PSAzKQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2RscCA9IDEnYjA7CisgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5KCJXYXJuaW5nIGF0IiwgJHRpbWUpOworICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSgiSW5hcHByb3ByaWF0ZSBsYXRlbmN5IGlzIik7CisgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5KCJzZXQgZHVyaW5nIERQTCBtb2RlIik7CisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzdGFydF9kbHAgPSAxJ2IwOworICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorICAgIGVuZAorICAgIGVuZHRhc2sKKworICAgIGZ1bmN0aW9uIGludGVnZXIgUmV0dXJuU2VjdG9ySURSZFBzd2RNZDsKKyAgICAgICAgaW5wdXQgcmVnIFRCUFJPVDsKKyAgICBiZWdpbgorICAgICAgICBpZihUQlBST1QgPT0gMCkKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIFJldHVyblNlY3RvcklEUmRQc3dkTWQgPSAwOworICAgICAgICBlbmQKKyAgICAgICAgZWxzZQorICAgICAgICBiZWdpbgorICAgICAgICAgICAgaWYgKFVuaWZvcm1TZWMpCisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgIFJldHVyblNlY3RvcklEUmRQc3dkTWQgPSBTZWNOdW0yNTY7CisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgUmV0dXJuU2VjdG9ySURSZFBzd2RNZCA9IDUxMTsKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKyAgICBlbmQKKyAgICBlbmRmdW5jdGlvbgorCisgICAgLy8gUHJvY2VkdXJlIEFERFJISUxPX1NFQworICAgIHRhc2sgQUREUkhJTE9fU0VDOworICAgIGlub3V0ICBBZGRyTE9XOworICAgIGlub3V0ICBBZGRySElHSDsKKyAgICBpbnB1dCAgIEFkZHI7CisgICAgaW50ZWdlciBBZGRyTE9XOworICAgIGludGVnZXIgQWRkckhJR0g7CisgICAgaW50ZWdlciBBZGRyOworICAgIGludGVnZXIgc2VjdG9yOworICAgIGJlZ2luCisgICAgICAgIGlmICh0bXBfY2hhcjIgPT0gIjAiKQorICAgICAgICBiZWdpbgorICAgICAgICAgICAgaWYgKFRCUEFSTSA9PSAwKQorICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICBpZiAoQWRkci8oU2VjU2l6ZTY0KzEpIDw9IDEgJiYKKyAgICAgICAgICAgICAgICAgICAoSW5zdHJ1Y3QgPT0gUDRFIHx8IEluc3RydWN0ID09IFA0RTQpKSAgLy80S0IgU2VjdG9ycworICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIHNlY3RvciAgID0gQWRkci8oU2VjU2l6ZTQrMSk7CisgICAgICAgICAgICAgICAgICAgIEFkZHJMT1cgID0gc2VjdG9yKihTZWNTaXplNCsxKTsKKyAgICAgICAgICAgICAgICAgICAgQWRkckhJR0ggPSBzZWN0b3IqKFNlY1NpemU0KzEpICsgU2VjU2l6ZTQ7CisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIHNlY3RvciAgID0gQWRkci8oU2VjU2l6ZTY0KzEpOworICAgICAgICAgICAgICAgICAgICBBZGRyTE9XICA9IHNlY3RvciooU2VjU2l6ZTY0KzEpOworICAgICAgICAgICAgICAgICAgICBBZGRySElHSCA9IHNlY3RvciooU2VjU2l6ZTY0KzEpICsgU2VjU2l6ZTY0OworICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgIGlmIChBZGRyLyhTZWNTaXplNjQrMSkgPj0gNTEwICYmCisgICAgICAgICAgICAgICAgICAgKEluc3RydWN0ID09IFA0RSB8fCBJbnN0cnVjdCA9PSBQNEU0KSkgLy80S0IgU2VjdG9ycworICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIHNlY3RvciAgID0gNTEwICsgKEFkZHItKFNlY1NpemU2NCsxKSo1MTApLyhTZWNTaXplNCsxKTsKKyAgICAgICAgICAgICAgICAgICAgQWRkckxPVyAgPSA1MTAqKFNlY1NpemU2NCsxKSsoc2VjdG9yLTUxMCkqKFNlY1NpemU0KzEpOworICAgICAgICAgICAgICAgICAgICBBZGRySElHSCA9IDUxMCooU2VjU2l6ZTY0KzEpKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VjdG9yLTUxMCkqKFNlY1NpemU0KzEpICsgU2VjU2l6ZTQ7CisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIHNlY3RvciAgID0gQWRkci8oU2VjU2l6ZTY0KzEpOworICAgICAgICAgICAgICAgICAgICBBZGRyTE9XICA9IHNlY3RvciooU2VjU2l6ZTY0KzEpOworICAgICAgICAgICAgICAgICAgICBBZGRySElHSCA9IHNlY3RvciooU2VjU2l6ZTY0KzEpICsgU2VjU2l6ZTY0OworICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorICAgICAgICBlbHNlIGlmICh0bXBfY2hhcjIgPT0gIjEiKQorICAgICAgICBiZWdpbgorICAgICAgICAgICAgc2VjdG9yICAgPSBBZGRyLyhTZWNTaXplMjU2KzEpOworICAgICAgICAgICAgQWRkckxPVyAgPSBzZWN0b3IqKFNlY1NpemUyNTYrMSk7CisgICAgICAgICAgICBBZGRySElHSCA9IHNlY3RvciooU2VjU2l6ZTI1NisxKSArIFNlY1NpemUyNTY7CisgICAgICAgIGVuZAorICAgIGVuZAorICAgIGVuZHRhc2sKKworICAgIC8vIFByb2NlZHVyZSBBRERSSElMT19QRworICAgIHRhc2sgQUREUkhJTE9fUEc7CisgICAgaW5vdXQgIEFkZHJMT1c7CisgICAgaW5vdXQgIEFkZHJISUdIOworICAgIGlucHV0ICAgQWRkcjsKKyAgICBpbnRlZ2VyIEFkZHJMT1c7CisgICAgaW50ZWdlciBBZGRySElHSDsKKyAgICBpbnRlZ2VyIEFkZHI7CisgICAgaW50ZWdlciBwYWdlOworICAgIGJlZ2luCisgICAgICAgIHBhZ2UgPSBBZGRyIC8gKFBhZ2VTaXplICsgMSk7CisgICAgICAgIEFkZHJMT1cgPSBwYWdlICogKFBhZ2VTaXplICsgMSk7CisgICAgICAgIEFkZHJISUdIID0gcGFnZSAqIChQYWdlU2l6ZSArIDEpICsgUGFnZVNpemUgOworICAgIGVuZAorICAgIGVuZHRhc2sKKworICAgIC8vIFByb2NlZHVyZSBSZXR1cm5TZWN0b3JJRAorICAgIHRhc2sgUmV0dXJuU2VjdG9ySUQ7CisgICAgaW5vdXQgICBzZWN0OworICAgIGlucHV0ICAgQWRkcmVzczsKKyAgICBpbnRlZ2VyIHNlY3Q7CisgICAgaW50ZWdlciBBZGRyZXNzOworICAgIGludGVnZXIgY29udjsKKyAgICBiZWdpbgorICAgICAgICBpZiAodG1wX2NoYXIyID09ICIwIikKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIGNvbnYgPSBBZGRyZXNzIC8gKFNlY1NpemU2NCsxKTsKKyAgICAgICAgICAgIGlmIChCb3R0b21Cb290KQorICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICBpZiAoY29udiA8PSAxKSAgICAgIC8vNEtCIFNlY3RvcnMKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBzZWN0ID0gQWRkcmVzcy8oU2VjU2l6ZTQrMSk7CisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIHNlY3QgPSBjb252ICsgMzA7CisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVsc2UgaWYgKFRvcEJvb3QpCisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgIGlmIChjb252ID49IDUxMCkgICAgICAgLy80S0IgU2VjdG9ycworICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIHNlY3QgPSA1MTAgKyAoQWRkcmVzcy0oU2VjU2l6ZTY0KzEpKjUxMCkvKFNlY1NpemU0KzEpOworICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICBzZWN0ID0gY29udjsKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKyAgICAgICAgZWxzZQorICAgICAgICBiZWdpbgorICAgICAgICAgICAgc2VjdCA9IEFkZHJlc3MvKFNlY1NpemUyNTYrMSk7CisgICAgICAgIGVuZAorICAgIGVuZAorICAgIGVuZHRhc2sKKworICAgIGFsd2F5cyBAKFBQQkxbMF0sIEFTUF9yZWcpCisgICAgYmVnaW4KKyAgICAgICAgaWYgKFBQQkxbMF0gPT0gMCAmJiBQV0RNTEIgPT0gMCAmJiBSUE1FID09IDAgJiYgUmRQc3dkUHJvdEVuYWJsZSkKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIFJkUHN3ZFByb3RNb2RlID0gMTsKKyAgICAgICAgICAgIEF1dG9Cb290X3JlZ1swXSA9IDA7Ly9BVVRPQk9PVCBpcyBkaXNhYmxlZCB3aGVuIFJlYWQgUGFzc3dvcmQKKyAgICAgICAgZW5kICAgICAgICAgICAgICAgICAgICAgLy9Qcm90ZWN0aW9uIGlzIGVuYWJsZWQKKyAgICAgICAgZWxzZQorICAgICAgICBiZWdpbgorICAgICAgICAgICAgUmRQc3dkUHJvdE1vZGUgPSAwOworICAgICAgICBlbmQKKyAgICBlbmQKKworICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgIC8vIGVkZ2UgY29udHJvbGwgcHJvY2Vzc2VzCisgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgICBhbHdheXMgQChwb3NlZGdlIFBvd2VyZWRVcCkKKyAgICBiZWdpbgorICAgICAgICByaXNpbmdfZWRnZV9Qb3dlcmVkVXAgPSAxOworICAgICAgICAjMTAwMCByaXNpbmdfZWRnZV9Qb3dlcmVkVXAgPSAwOworICAgIGVuZAorCisgICAgYWx3YXlzIEAocG9zZWRnZSBTQ0tfaXBkKQorICAgIGJlZ2luCisgICAgICAgcmlzaW5nX2VkZ2VfU0NLX2lwZCA9IDEnYjE7CisgICAgICAgIzEwMDAgcmlzaW5nX2VkZ2VfU0NLX2lwZCA9IDEnYjA7CisgICAgZW5kCisKKyAgICBhbHdheXMgQChuZWdlZGdlIFNDS19pcGQpCisgICAgYmVnaW4KKyAgICAgICBmYWxsaW5nX2VkZ2VfU0NLX2lwZCA9IDEnYjE7CisgICAgICAgIzEwMDAgZmFsbGluZ19lZGdlX1NDS19pcGQgPSAxJ2IwOworICAgIGVuZAorCisgICAgYWx3YXlzIEAocG9zZWRnZSByZWFkX291dCkKKyAgICBiZWdpbgorICAgICAgICByaXNpbmdfZWRnZV9yZWFkX291dCA9IDEnYjE7CisgICAgICAgICMxMDAwIHJpc2luZ19lZGdlX3JlYWRfb3V0ID0gMSdiMDsKKyAgICBlbmQKKworICAgIGFsd2F5cyBAKG5lZ2VkZ2Ugd3JpdGUpCisgICAgYmVnaW4KKyAgICAgICAgZmFsbGluZ19lZGdlX3dyaXRlID0gMTsKKyAgICAgICAgIzEwMDAgZmFsbGluZ19lZGdlX3dyaXRlID0gMDsKKyAgICBlbmQKKworICAgIGFsd2F5cyBAKHBvc2VkZ2UgUFJHU1VTUF9vdXQpCisgICAgYmVnaW4KKyAgICAgICAgUFJHU1VTUF9vdXRfZXZlbnQgPSAxOworICAgICAgICAjMTAwMCBQUkdTVVNQX291dF9ldmVudCA9IDA7CisgICAgZW5kCisKKyAgICBhbHdheXMgQChwb3NlZGdlIEVSU1NVU1Bfb3V0KQorICAgIGJlZ2luCisgICAgICAgIEVSU1NVU1Bfb3V0X2V2ZW50ID0gMTsKKyAgICAgICAgIzEwMDAgRVJTU1VTUF9vdXRfZXZlbnQgPSAwOworICAgIGVuZAorCisgICAgYWx3YXlzIEAocG9zZWRnZSBDU05lZ19pcGQpCisgICAgYmVnaW4KKyAgICAgICAgcmlzaW5nX2VkZ2VfQ1NOZWdfaXBkID0gMSdiMTsKKyAgICAgICAgIzEwMDAgcmlzaW5nX2VkZ2VfQ1NOZWdfaXBkID0gMSdiMDsKKyAgICBlbmQKKworICAgIGFsd2F5cyBAKG5lZ2VkZ2UgQ1NOZWdfaXBkKQorICAgIGJlZ2luCisgICAgICAgIGZhbGxpbmdfZWRnZV9DU05lZ19pcGQgPSAxJ2IxOworICAgICAgICAjMTAwMCBmYWxsaW5nX2VkZ2VfQ1NOZWdfaXBkID0gMSdiMDsKKyAgICBlbmQKKworICAgIGFsd2F5cyBAKG5lZ2VkZ2UgUlNUTmVnX2luKQorICAgIGJlZ2luCisgICAgICAgIGZhbGxpbmdfZWRnZV9SU1ROZWcgPSAxJ2IxOworICAgICAgICAjNTAwMDAgZmFsbGluZ19lZGdlX1JTVE5lZyA9IDEnYjA7CisgICAgZW5kCisKKyAgICBhbHdheXMgQChwb3NlZGdlIFJTVE5lZ19pbikKKyAgICBiZWdpbgorICAgICAgICByaXNpbmdfZWRnZV9SU1ROZWcgPSAxJ2IxOworICAgICAgICAjMTAwMDAgcmlzaW5nX2VkZ2VfUlNUTmVnID0gMSdiMDsKKyAgICBlbmQKKworICAgIGFsd2F5cyBAKG5lZ2VkZ2UgUlNUKQorICAgIGJlZ2luCisgICAgICAgIGZhbGxpbmdfZWRnZV9SU1QgPSAxJ2IxOworICAgICAgICAjMTAwMDAgZmFsbGluZ19lZGdlX1JTVCA9IDEnYjA7CisgICAgZW5kCisKKyAgICBhbHdheXMgQChwb3NlZGdlIFJTVCkKKyAgICBiZWdpbgorICAgICAgICByaXNpbmdfZWRnZV9SU1QgPSAxJ2IxOworICAgICAgICAjMTAwMCByaXNpbmdfZWRnZV9SU1QgPSAxJ2IwOworICAgIGVuZAorCisgICAgYWx3YXlzIEAocG9zZWRnZSBQRE9ORSkKKyAgICBiZWdpbgorICAgICAgICByaXNpbmdfZWRnZV9QRE9ORSA9IDEnYjE7CisgICAgICAgICMxMDAwIHJpc2luZ19lZGdlX1BET05FID0gMSdiMDsKKyAgICBlbmQKKworICAgIGFsd2F5cyBAKHBvc2VkZ2UgV0RPTkUpCisgICAgYmVnaW4KKyAgICAgICAgcmlzaW5nX2VkZ2VfV0RPTkUgPSAxJ2IxOworICAgICAgICAjMTAwMCByaXNpbmdfZWRnZV9XRE9ORSA9IDEnYjA7CisgICAgZW5kCisKKyAgICBhbHdheXMgQChwb3NlZGdlIFdTVEFSVCkKKyAgICBiZWdpbgorICAgICAgICByaXNpbmdfZWRnZV9XU1RBUlQgPSAxJ2IxOworICAgICAgICAjMTAwMCByaXNpbmdfZWRnZV9XU1RBUlQgPSAxJ2IwOworICAgIGVuZAorCisgICAgYWx3YXlzIEAocG9zZWRnZSBFRE9ORSkKKyAgICBiZWdpbgorICAgICAgICByaXNpbmdfZWRnZV9FRE9ORSA9IDEnYjE7CisgICAgICAgICMxMDAwIHJpc2luZ19lZGdlX0VET05FID0gMSdiMDsKKyAgICBlbmQKKworICAgIGFsd2F5cyBAKHBvc2VkZ2UgRVNUQVJUKQorICAgIGJlZ2luCisgICAgICAgIHJpc2luZ19lZGdlX0VTVEFSVCA9IDEnYjE7CisgICAgICAgICMxMDAwIHJpc2luZ19lZGdlX0VTVEFSVCA9IDEnYjA7CisgICAgZW5kCisKKyAgICBhbHdheXMgQChwb3NlZGdlIFBTVEFSVCkKKyAgICBiZWdpbgorICAgICAgICByaXNpbmdfZWRnZV9QU1RBUlQgPSAxJ2IxOworICAgICAgICAjMTAwMCByaXNpbmdfZWRnZV9QU1RBUlQgPSAxJ2IwOworICAgIGVuZAorCisgICAgYWx3YXlzIEAocG9zZWRnZSBSZXNldGVkKQorICAgIGJlZ2luCisgICAgICAgIHJpc2luZ19lZGdlX1Jlc2V0ZWQgPSAxJ2IxOworICAgICAgICAjMTAwMCByaXNpbmdfZWRnZV9SZXNldGVkID0gMSdiMDsKKyAgICBlbmQKKworICAgIGFsd2F5cyBAKG5lZ2VkZ2UgUEFTU1VMQ0tfaW4pCisgICAgYmVnaW4KKyAgICAgICAgZmFsbGluZ19lZGdlX1BBU1NVTENLX2luID0gMSdiMTsKKyAgICAgICAgIzEwMDAgZmFsbGluZ19lZGdlX1BBU1NVTENLX2luID0gMSdiMDsKKyAgICBlbmQKKworICAgIGFsd2F5cyBAKG5lZ2VkZ2UgUFBCRVJBU0VfaW4pCisgICAgYmVnaW4KKyAgICAgICAgZmFsbGluZ19lZGdlX1BQQkVSQVNFX2luID0gMSdiMTsKKyAgICAgICAgIzEwMDAgZmFsbGluZ19lZGdlX1BQQkVSQVNFX2luID0gMSdiMDsKKyAgICBlbmQKKworICAgIGFsd2F5cyBAKEluc3RydWN0KQorICAgIGJlZ2luCisgICAgICAgIEluc3RydWN0X2V2ZW50ID0gMSdiMTsKKyAgICAgICAgIzEwMDAgSW5zdHJ1Y3RfZXZlbnQgPSAxJ2IwOworICAgIGVuZAorCisgICAgYWx3YXlzIEAoY2hhbmdlX2FkZHIpCisgICAgYmVnaW4KKyAgICAgICAgY2hhbmdlX2FkZHJfZXZlbnQgPSAxJ2IxOworICAgICAgICAjMTAwMCBjaGFuZ2VfYWRkcl9ldmVudCA9IDEnYjA7CisgICAgZW5kCisKKyAgICBhbHdheXMgQChuZXh0X3N0YXRlKQorICAgIGJlZ2luCisgICAgICAgIG5leHRfc3RhdGVfZXZlbnQgPSAxJ2IxOworICAgICAgICAjMTAwMCBuZXh0X3N0YXRlX2V2ZW50ID0gMSdiMDsKKyAgICBlbmQKKworICAgIGFsd2F5cyBAKGN1cnJlbnRfc3RhdGUpCisgICAgYmVnaW4KKyAgICAgICAgY3VycmVudF9zdGF0ZV9ldmVudCA9IDEnYjE7CisgICAgICAgICMxMDAwIGN1cnJlbnRfc3RhdGVfZXZlbnQgPSAxJ2IwOworICAgIGVuZAorCisgICAgYWx3YXlzIEAocG9zZWRnZSBSU1Rfb3V0KQorICAgIGJlZ2luCisgICAgICAgIHJpc2luZ19lZGdlX1JTVF9vdXQgPSAxJ2IxOworICAgICAgICAjMTAwMCByaXNpbmdfZWRnZV9SU1Rfb3V0ID0gMSdiMDsKKyAgICBlbmQKKworZW5kbW9kdWxlCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L21vZGVsL3NwaXJhbS52IGIvdmVyaWxvZy9kdi9tb2RlbC9zcGlyYW0udgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDMzYzExCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9tb2RlbC9zcGlyYW0udgpAQCAtMCwwICsxLDMyOSBAQAorYGRlZmF1bHRfbmV0dHlwZSBub25lCisvKgorICogIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjIgPERpbmVzaCBBbm5heXlhPgorICoKKyAqICBSaXNjZHVuaW8gCisgKgorICogIENvcHlyaWdodCAoQykgMjAyMiAgRGluZXNoIEFubmF5eWEgPGRpbmVzaGEub3BlbmNvcmUub3JnPgorICoKKyAqICBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqICBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiAgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiAgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiAgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiAgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqCisgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IElTQworICovCisKK2B0aW1lc2NhbGUgMSBucyAvIDEgcHMKKworLy8KKy8vIFNpbXBsZSBTUEkgUmFtIHNpbXVsYXRpb24gbW9kZWwgZm9yIDEyOEt4OCBMT1cgVk9MVEFHRSwgRkFTVCBTRVJJQUwgU1JBTQorLy8gKElTNjIvNjVXVlMxMjg4R0FMTCkKKy8vCisvLyBUaGlzIG1vZGVsIHNhbXBsZXMgaW8gaW5wdXQgc2lnbmFscyAxbnMgYmVmb3JlIHRoZSBTUEkgY2xvY2sgZWRnZSBhbmQKKy8vIHVwZGF0ZXMgb3V0cHV0IHNpZ25hbHMgMW5zIGFmdGVyIHRoZSBTUEkgY2xvY2sgZWRnZS4KKy8vCisvLyBTdXBwb3J0ZWQgY29tbWFuZHM6CisvLyAgICAweDAzLCAweDAyLCAweDNCICwgMHgzOCwgMHhGRiwgMHgwNSAsIDB4MDEKKy8vICAgIEluc3RydWN0aW9uICAgSGV4ICAgICBEZXNjcmlwdGlvbgorLy8gICAgUkVBRCAgICAgICAgICAweDAzICAgIFJlYWQgZGF0YSBmcm9tIG1lbW9yeSBhcnJheSBiZWdpbm5pbmcgYXQgc2VsZWN0ZWQgYWRkcmVzcworLy8gICAgV1JJVEUgICAgICAgICAweDAyICAgIFdyaXRlIGRhdGEgdG8gbWVtb3J5IGFycmF5IGJlZ2lubmluZyBhdCBzZWxlY3RlZCBhZGRyZXNzCisvLyAgICBFU0RJICAgICAgICAgIDB4M0IgICAgRW50ZXIgU0RJIG1vZGUKKy8vICAgIEVTUUkgICAgICAgICAgMHgzOCAgICBFbnRlciBTUUkgbW9kZQorLy8gICAgUlNURFFJICAgICAgICAweEZGICAgIFJlc2V0IFNESS9TUUkgbW9kZQorLy8gICAgUkRNUiAgICAgICAgICAweDA1ICAgIFJlYWQgTW9kZSBSZWdpc3RlcgorLy8gICAgV1JNUiAgICAgICAgICAweDAxICAgIFdyaXRlIE1vZGUgUmVnaXN0ZXIKKy8vCisKK21vZHVsZSBzcGlyYW0gIygKKwlwYXJhbWV0ZXIgbWVtX2ZpbGVfbmFtZSA9ICJmaXJtd2FyZS5oZXgiCispKAorCWlucHV0IGNzYiwKKwlpbnB1dCBjbGssCisJaW5vdXQgaW8wLCAvLyBNT1NJCisJaW5vdXQgaW8xLCAvLyBNSVNPCisJaW5vdXQgaW8yLAorCWlub3V0IGlvMworKTsKKwlsb2NhbHBhcmFtIHZlcmJvc2UgPSAwOworCWxvY2FscGFyYW0gaW50ZWdlciBsYXRlbmN5ID0gODsKKwkKKwlyZWcgWzc6MF0gYnVmZmVyOworCXJlZyBbMzowXSByZXNldF9jb3VudCA9IDA7CisJcmVnIFszOjBdIHJlc2V0X21vbml0b3IgPSAwOworCWludGVnZXIgYml0Y291bnQgPSAwOworCWludGVnZXIgYnl0ZWNvdW50ID0gMDsKKwlpbnRlZ2VyIGR1bW15Y291bnQgPSAwOworCisJcmVnIFs3OjBdIHNwaV9jbWQ7CisJcmVnIFsyMzowXSBzcGlfYWRkcjsKKworCXJlZyBbNzowXSBzcGlfaW47CisJcmVnIFs3OjBdIHNwaV9vdXQ7CisJcmVnIHNwaV9pb192bGQ7CisKKworCWxvY2FscGFyYW0gWzE6MF0gc3NwaSAgICAgPSAxOworCWxvY2FscGFyYW0gWzE6MF0gZHNwaSAgICAgPSAyOworCWxvY2FscGFyYW0gWzE6MF0gcXNwaSAgICAgPSAzOworCisJbG9jYWxwYXJhbSBbMzowXSBtb2RlX3NzcGlfcmQgICAgID0gMTsKKwlsb2NhbHBhcmFtIFszOjBdIG1vZGVfc3NwaV93ciAgICAgPSAyOworCWxvY2FscGFyYW0gWzM6MF0gbW9kZV9kc3BpX3JkICAgICA9IDM7CisJbG9jYWxwYXJhbSBbMzowXSBtb2RlX2RzcGlfd3IgICAgID0gNDsKKwlsb2NhbHBhcmFtIFszOjBdIG1vZGVfcXNwaV9yZCAgICAgPSA1OworCWxvY2FscGFyYW0gWzM6MF0gbW9kZV9xc3BpX3dyICAgICA9IDY7CisKKwlyZWcgWzM6MF0gc3BpX3BoYXNlID0gbW9kZV9zc3BpX3JkOworCXJlZyBbMzowXSBzcGlfZGF0YV9waGFzZSA9IDA7CisJcmVnIFszOjBdIHNwaV9tb2RlID0gc3NwaTsKKworCXJlZyBpbzBfb2UgPSAwOworCXJlZyBpbzFfb2UgPSAwOworCXJlZyBpbzJfb2UgPSAwOworCXJlZyBpbzNfb2UgPSAwOworCisJcmVnIGlvMF9kb3V0ID0gMDsKKwlyZWcgaW8xX2RvdXQgPSAwOworCXJlZyBpbzJfZG91dCA9IDA7CisJcmVnIGlvM19kb3V0ID0gMDsKKworCWFzc2lnbiAjMSBpbzAgPSBpbzBfb2UgPyBpbzBfZG91dCA6IDEnYno7CisJYXNzaWduICMxIGlvMSA9IGlvMV9vZSA/IGlvMV9kb3V0IDogMSdiejsKKwlhc3NpZ24gIzEgaW8yID0gaW8yX29lID8gaW8yX2RvdXQgOiAxJ2J6OworCWFzc2lnbiAjMSBpbzMgPSBpbzNfb2UgPyBpbzNfZG91dCA6IDEnYno7CisKKwl3aXJlIGlvMF9kZWxheWVkOworCXdpcmUgaW8xX2RlbGF5ZWQ7CisJd2lyZSBpbzJfZGVsYXllZDsKKwl3aXJlIGlvM19kZWxheWVkOworCisJYXNzaWduICMxIGlvMF9kZWxheWVkID0gaW8wOworCWFzc2lnbiAjMSBpbzFfZGVsYXllZCA9IGlvMTsKKwlhc3NpZ24gIzEgaW8yX2RlbGF5ZWQgPSBpbzI7CisJYXNzaWduICMxIGlvM19kZWxheWVkID0gaW8zOworCisJLy8gMTI4S0IgUkFNCisJcmVnIFs3OjBdIG1lbW9yeSBbMDoxMjgqMTAyNC0xXTsKKworCWluaXRpYWwgYmVnaW4KKyAgICAgICAgICAgaWYgKCEobWVtX2ZpbGVfbmFtZSA9PSAibm9uZSIpKQorICAgICAgICAgICAgICAkcmVhZG1lbWgobWVtX2ZpbGVfbmFtZSxtZW1vcnkpOworCWVuZAorCisJdGFzayBzcGlfYWN0aW9uOworCQliZWdpbgorCQkgICBzcGlfaW4gPSBidWZmZXI7CisKKwkJICAgaWYgKGJ5dGVjb3VudCA9PSAxKSBiZWdpbgorCQkgICAJc3BpX2NtZCA9IGJ1ZmZlcjsKKworCQkJaWYgKHNwaV9jbWQgPT0gOCdoIDNiKSBiZWdpbgorCQkgICAJCXNwaV9tb2RlID0gZHNwaTsKKwkJCWVuZAorCisJCQlpZiAoc3BpX2NtZCA9PSA4J2ggMzgpIGJlZ2luCisJCSAgIAkJc3BpX21vZGUgPSBxc3BpOworCQkJZW5kCisKKwkJCWlmIChzcGlfY21kID09IDgnaCBmZikgYmVnaW4KKwkJICAgCQlzcGlfbW9kZSA9IHNzcGk7CisJCQllbmQKKworCQkJLy8gc3BpIHJlYWQKKwkJICAgCWlmIChzcGlfY21kID09IDgnaCAwMyAmJiBzcGlfbW9kZSA9PSBzc3BpKQorCQkJICAgc3BpX3BoYXNlID0gbW9kZV9zc3BpX3JkOworCisJCSAgICAgICAgLy8gc3BpIHdyaXRlCisJCSAgIAlpZiAoc3BpX2NtZCA9PSA4J2ggMDIgJiYgc3BpX21vZGUgPT0gc3NwaSkKKwkJCSAgIHNwaV9waGFzZSA9IG1vZGVfc3NwaV93cjsKKworCQkgICAgICAgIC8vIGR1YWwgc3BpIHJlYWQKKwkJICAgCWlmIChzcGlfY21kID09IDgnaCAwMyAmJiBzcGlfbW9kZSA9PSBkc3BpKQorCQkJICAgc3BpX3BoYXNlID0gbW9kZV9kc3BpX3JkOworCisJCSAgICAgICAgLy8gZHVhbCBzcGkgd3JpdGUKKwkJICAgCWlmIChzcGlfY21kID09IDgnaCAwMiAmJiBzcGlfbW9kZSA9PSBkc3BpKQorCQkJICAgc3BpX3BoYXNlID0gbW9kZV9kc3BpX3dyOworCisJCSAgICAgICAgLy8gcXVhZCBzcGkgcmVhZAorCQkgICAJaWYgKHNwaV9jbWQgPT0gOCdoIDAzICYmIHNwaV9tb2RlID09IHFzcGkpCisJCQkgICBzcGlfcGhhc2UgPSBtb2RlX3FzcGlfcmQ7CisKKwkJICAgICAgICAvLyBxdWFkIHNwaSB3cml0ZQorCQkgICAJaWYgKHNwaV9jbWQgPT0gOCdoIDAyICYmIHNwaV9tb2RlID09IHFzcGkpCisJCQkgICBzcGlfcGhhc2UgPSBtb2RlX3FzcGlfd3I7CisJCSAgIGVuZAorCisJCSAgIGlmIChzcGlfY21kID09ICdoIDAzIHx8IChzcGlfY21kID09ICdoIDAyKSkgYmVnaW4KKwkJICAgCWlmIChieXRlY291bnQgPT0gMikKKwkJICAgCQlzcGlfYWRkclsyMzoxNl0gPSBidWZmZXI7CisKKwkJICAgCWlmIChieXRlY291bnQgPT0gMykKKwkJICAgCQlzcGlfYWRkclsxNTo4XSA9IGJ1ZmZlcjsKKworCQkJaWYgKGJ5dGVjb3VudCA9PSA0KSBiZWdpbgorCQkgICAJICAgc3BpX2FkZHJbNzowXSA9IGJ1ZmZlcjsKKwkJCSAgIHNwaV9kYXRhX3BoYXNlID0gc3BpX3BoYXNlOworCQkJZW5kCisKKwkJCS8vIER1bW15IGJ5IHNlbGVjdGlvbiBhdCBlbmQgb2YgYWRkcmVzcyBwaGFzZSBmb3IgcmVhZAorCQkJLy8gbW9kZSBvbmx5CisJCSAgIAlpZiAoYnl0ZWNvdW50ID09IDQgJiYgc3BpX21vZGUgPT0gc3NwaSAmJiBzcGlfY21kID09OCdoMDMgKQorCQkJCWR1bW15Y291bnQgPSA4OworCQkgICAJaWYgKGJ5dGVjb3VudCA9PSA0ICYmIHNwaV9tb2RlID09IGRzcGkgJiYgc3BpX2NtZCA9PTgnaDAzKQorCQkJCWR1bW15Y291bnQgPSA0OworCQkgICAJaWYgKGJ5dGVjb3VudCA9PSA0ICYmIHNwaV9tb2RlID09IHFzcGkgJiYgc3BpX2NtZCA9PTgnaDAzKQorCQkJCWR1bW15Y291bnQgPSAyOworCisJCSAgIAlpZiAoYnl0ZWNvdW50ID49IDQgJiYgc3BpX2NtZCA9PTgnaDAzKSBiZWdpbiAvLyBEYXRhIFJlYWQgUGhhc2UKKwkJICAgCQlidWZmZXIgPSBtZW1vcnlbc3BpX2FkZHJdOworCQkJCS8vJGRpc3BsYXkoIiVtOiBSZWFkIE1lbW9yeSBBZGRyZXNzOiAleCBEYXRhOiAleCIsc3BpX2FkZHIsYnVmZmVyKTsKKwkJICAgCQlzcGlfYWRkciA9IHNwaV9hZGRyICsgMTsKKwkJICAgCWVuZAorCQkgICAJaWYgKGJ5dGVjb3VudCA+IDQgJiYgc3BpX2NtZCA9PTgnaDAyKSBiZWdpbiAvLyBEYXRhIFdyaXRlIFBoYXNlCisJCSAgIAkJbWVtb3J5W3NwaV9hZGRyXSA9IGJ1ZmZlcjsKKwkJCQkvLyRkaXNwbGF5KCIlbTogV3JpdGUgTWVtb3J5IEFkZHJlc3M6ICV4IERhdGE6ICV4IixzcGlfYWRkcixidWZmZXIpOworCQkgICAJCXNwaV9hZGRyID0gc3BpX2FkZHIgKyAxOworCQkgICAJZW5kCisJCSAgIGVuZAorCisJCQlzcGlfb3V0ID0gYnVmZmVyOworCQkJc3BpX2lvX3ZsZCA9IDE7CisKKwkJCWlmICh2ZXJib3NlKSBiZWdpbgorCQkJCWlmIChieXRlY291bnQgPT0gMSkKKwkJCQkJJHdyaXRlKCI8U1BJLVNUQVJUPiIpOworCQkJCSR3cml0ZSgiPFNQSTolMDJ4OiUwMng+Iiwgc3BpX2luLCBzcGlfb3V0KTsKKwkJCWVuZAorCisJCWVuZAorCWVuZHRhc2sKKworCisJYWx3YXlzIEAoY3NiKSBiZWdpbgorCQlpZiAoY3NiKSBiZWdpbgorCQkJaWYgKHZlcmJvc2UpIGJlZ2luCisJCQkJJGRpc3BsYXkoIiIpOworCQkJCSRmZmx1c2g7CisJCQllbmQKKwkJCWJ1ZmZlciA9IDA7CisJCQliaXRjb3VudCA9IDA7CisJCQlieXRlY291bnQgPSAwOworCQkJaW8wX29lID0gMDsKKwkJCWlvMV9vZSA9IDA7CisJCQlpbzJfb2UgPSAwOworCQkJaW8zX29lID0gMDsgCisJCQlzcGlfZGF0YV9waGFzZSA9IDA7CisKKwkJZW5kCisJZW5kCisKKworCWFsd2F5cyBAKGNzYiwgY2xrKSBiZWdpbgorCQlzcGlfaW9fdmxkID0gMDsKKwkJaWYgKCFjc2IgJiYgIWNsaykgYmVnaW4KKwkJCWlmIChkdW1teWNvdW50ID4gMCkgYmVnaW4KKwkJCQlpbzBfb2UgPSAwOworCQkJCWlvMV9vZSA9IDA7CisJCQkJaW8yX29lID0gMDsKKwkJCQlpbzNfb2UgPSAwOworCQkJZW5kIGVsc2UKKwkJCWNhc2UgKHNwaV9kYXRhX3BoYXNlKQorCQkJCW1vZGVfc3NwaV9yZDogYmVnaW4KKwkJCQkJaW8wX29lID0gMDsKKwkJCQkJaW8xX29lID0gMTsKKwkJCQkJaW8yX29lID0gMDsKKwkJCQkJaW8zX29lID0gMDsKKwkJCQkJaW8xX2RvdXQgPSBidWZmZXJbN107CisJCQkJZW5kCisJCQkJbW9kZV9zc3BpX3dyOiBiZWdpbgorCQkJCQlpbzBfb2UgPSAwOworCQkJCQlpbzFfb2UgPSAwOworCQkJCQlpbzJfb2UgPSAwOworCQkJCQlpbzNfb2UgPSAwOworCQkJCWVuZAorCQkJCW1vZGVfZHNwaV93cjogYmVnaW4KKwkJCQkJaW8wX29lID0gMDsKKwkJCQkJaW8xX29lID0gMDsKKwkJCQkJaW8yX29lID0gMDsKKwkJCQkJaW8zX29lID0gMDsKKwkJCQllbmQKKwkJCQltb2RlX2RzcGlfcmQ6IGJlZ2luCisJCQkJCWlvMF9vZSA9IDE7CisJCQkJCWlvMV9vZSA9IDE7CisJCQkJCWlvMl9vZSA9IDA7CisJCQkJCWlvM19vZSA9IDA7CisJCQkJCWlvMF9kb3V0ID0gYnVmZmVyWzZdOworCQkJCQlpbzFfZG91dCA9IGJ1ZmZlcls3XTsKKwkJCQllbmQKKwkJCQltb2RlX3FzcGlfd3I6IGJlZ2luCisJCQkJCWlvMF9vZSA9IDA7CisJCQkJCWlvMV9vZSA9IDA7CisJCQkJCWlvMl9vZSA9IDA7CisJCQkJCWlvM19vZSA9IDA7CisJCQkJZW5kCisJCQkJbW9kZV9xc3BpX3JkOiBiZWdpbgorCQkJCQlpbzBfb2UgPSAxOworCQkJCQlpbzFfb2UgPSAxOworCQkJCQlpbzJfb2UgPSAxOworCQkJCQlpbzNfb2UgPSAxOworCQkJCQlpbzBfZG91dCA9IGJ1ZmZlcls0XTsKKwkJCQkJaW8xX2RvdXQgPSBidWZmZXJbNV07CisJCQkJCWlvMl9kb3V0ID0gYnVmZmVyWzZdOworCQkJCQlpbzNfZG91dCA9IGJ1ZmZlcls3XTsKKwkJCQllbmQKKwkJCQlkZWZhdWx0OiBiZWdpbgorCQkJCQlpbzBfb2UgPSAwOworCQkJCQlpbzFfb2UgPSAwOworCQkJCQlpbzJfb2UgPSAwOworCQkJCQlpbzNfb2UgPSAwOworCQkJCWVuZAorCQkJZW5kY2FzZQorCQllbmQKKwllbmQKKworCWFsd2F5cyBAKHBvc2VkZ2UgY2xrKSBiZWdpbgorCQlpZiAoIWNzYikgYmVnaW4KKwkJCWlmIChkdW1teWNvdW50ID4gMCkgYmVnaW4KKwkJCQlkdW1teWNvdW50ID0gZHVtbXljb3VudCAtIDE7CisJCQllbmQgZWxzZQorCQkJY2FzZSAoc3BpX21vZGUpCisJCQkJc3NwaTogYmVnaW4KKwkJCQkJYnVmZmVyID0ge2J1ZmZlciwgaW8wfTsKKwkJCQkJYml0Y291bnQgPSBiaXRjb3VudCArIDE7CisJCQkJCWlmIChiaXRjb3VudCA9PSA4KSBiZWdpbgorCQkJCQkJYml0Y291bnQgPSAwOworCQkJCQkJYnl0ZWNvdW50ID0gYnl0ZWNvdW50ICsgMTsKKwkJCQkJCXNwaV9hY3Rpb247CisJCQkJCWVuZAorCQkJCWVuZAorCQkJCWRzcGk6IGJlZ2luCisJCQkJCWJ1ZmZlciA9IHtidWZmZXIsIGlvMSwgaW8wfTsKKwkJCQkJYml0Y291bnQgPSBiaXRjb3VudCArIDI7CisJCQkJCWlmIChiaXRjb3VudCA9PSA4KSBiZWdpbgorCQkJCQkJYml0Y291bnQgPSAwOworCQkJCQkJYnl0ZWNvdW50ID0gYnl0ZWNvdW50ICsgMTsKKwkJCQkJCXNwaV9hY3Rpb247CisJCQkJCWVuZAorCQkJCWVuZAorCQkJCXFzcGk6IGJlZ2luCisJCQkJCWJ1ZmZlciA9IHtidWZmZXIsIGlvMywgaW8yLCBpbzEsIGlvMH07CisJCQkJCWJpdGNvdW50ID0gYml0Y291bnQgKyA0OworCQkJCQlpZiAoYml0Y291bnQgPT0gOCkgYmVnaW4KKwkJCQkJCWJpdGNvdW50ID0gMDsKKwkJCQkJCWJ5dGVjb3VudCA9IGJ5dGVjb3VudCArIDE7CisJCQkJCQlzcGlfYWN0aW9uOworCQkJCQllbmQKKwkJCQllbmQKKwkJCWVuZGNhc2UKKwkJZW5kCisJZW5kCitlbmRtb2R1bGUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvcmlzY19ib290L01ha2VmaWxlIGIvdmVyaWxvZy9kdi9yaXNjX2Jvb3QvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhjODM4YwotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvcmlzY19ib290L01ha2VmaWxlCkBAIC0wLDAgKzEsMTEzIEBACisjIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjAgRWZhYmxlc3MgQ29ycG9yYXRpb24KKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisKKyMjIFBESyAKK1BES19QQVRIID0gJChQREtfUk9PVCkvc2t5MTMwQQorCisjIyBDYXJhdmVsIFBvaW50ZXJzCitDQVJBVkVMX1JPT1QgPz0gLi4vLi4vLi4vY2FyYXZlbAorQ0FSQVZFTF9QQVRIID89ICQoQ0FSQVZFTF9ST09UKQorQ0FSQVZFTF9GSVJNV0FSRV9QQVRIID0gJChDQVJBVkVMX1BBVEgpL3Zlcmlsb2cvZHYvY2FyYXZlbAorQ0FSQVZFTF9WRVJJTE9HX1BBVEggID0gJChDQVJBVkVMX1BBVEgpL3Zlcmlsb2cKK0NBUkFWRUxfUlRMX1BBVEggPSAkKENBUkFWRUxfVkVSSUxPR19QQVRIKS9ydGwKK0NBUkFWRUxfQkVIQVZJT1VSQUxfTU9ERUxTID0gJChDQVJBVkVMX1ZFUklMT0dfUEFUSCkvZHYvY2FyYXZlbAorCisjIyBVc2VyIFByb2plY3QgUG9pbnRlcnMKK1VQUkpfVkVSSUxPR19QQVRIID89IC4uLy4uLy4uL3Zlcmlsb2cKK1VQUkpfUlRMX1BBVEggPSAkKFVQUkpfVkVSSUxPR19QQVRIKS9ydGwKK1VQUkpfQkVIQVZJT1VSQUxfTU9ERUxTID0gLi4vbW9kZWwKK1VQUkpfQkVIQVZJT1VSQUxfQUdFTlRTID0gLi4vYWdlbnRzCitVUFJKX0lOQ0xVREVfUEFUSDEgPSAkKFVQUkpfUlRMX1BBVEgpL3lpZml2ZS95Y3IxYy9zcmMvaW5jbHVkZXMKK1VQUkpfSU5DTFVERV9QQVRIMiA9ICQoVVBSSl9SVExfUEFUSCkvc2RyYW1fY3RybC9zcmMvZGVmcworVVBSSl9JTkNMVURFX1BBVEgzID0gJChVUFJKX1JUTF9QQVRIKS9pMmNtL3NyYy9pbmNsdWRlcworVVBSSl9JTkNMVURFX1BBVEg0ID0gJChVUFJKX1JUTF9QQVRIKS91c2IxX2hvc3Qvc3JjL2luY2x1ZGVzCitVUFJKX0lOQ0xVREVfUEFUSDUgPSAkKFVQUkpfUlRMX1BBVEgpL21iaXN0L2luY2x1ZGUKKworIyMgWUlGSVZFIEZJUk1XQVJFCitZSUZJVkVfRklSTVdBUkVfUEFUSCA9ICQoVVBSSl9WRVJJTE9HX1BBVEgpL2R2L2Zpcm13YXJlCisjIyBSSVNDViBHQ0MgCitHQ0NfUEFUSD89L2VmL2FwcHMvYmluCitHQ0NfUFJFRklYPz1yaXNjdjMyLXVua25vd24tZWxmCitHQ0M2NF9QUkVGSVg/PXJpc2N2NjQtdW5rbm93bi1lbGYKKworIyMgU2ltdWxhdGlvbiBtb2RlOiBSVEwvR0wKK1NJTV9ERUZJTkVTID0gLURGVU5DVElPTkFMIC1EU0lNCitTSU0/PVJUTAorRFVNUD89T0ZGCisKKy5TVUZGSVhFUzoKKworUEFUVEVSTiA9IHJpc2NfYm9vdAorCithbGw6ICAke1BBVFRFUk46PS52Y2R9CisKK2hleDogICR7UEFUVEVSTjo9LmhleH0KKwordnZwOiAgJHtQQVRURVJOOj0udnZwfQorCislLnZ2cDogJV90Yi52ICUuaGV4CisJJHtHQ0M2NF9QUkVGSVh9LWdjYyAtTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICAtRF9fUlZDX0VYVCAtc3RhdGljIC1zdGQ9Z251OTkgLWZuby1jb21tb24gLWZuby1idWlsdGluLXByaW50ZiAtRFRDTT0wIC1XYSwtbWFyY2g9cnYzMmltYyAtbWFyY2g9cnYzMmltYyAtbWFiaT1pbHAzMiAtREZMQUdTX1NUUj1cIiItTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICJcIiAgLWMgLUkuLyAtSSQoWUlGSVZFX0ZJUk1XQVJFX1BBVEgpICB1c2VyX3VhcnQuYyAtbyB1c2VyX3VhcnQubworCSR7R0NDNjRfUFJFRklYfS1nY2MgLU8yIC1mdW5yb2xsLWxvb3BzIC1mcGVlbC1sb29wcyAtZmdjc2Utc20gLWZnY3NlLWxhcyAgLURfX1JWQ19FWFQgLXN0YXRpYyAtc3RkPWdudTk5IC1mbm8tY29tbW9uIC1mbm8tYnVpbHRpbi1wcmludGYgLURUQ009MCAtV2EsLW1hcmNoPXJ2MzJpbWMgLW1hcmNoPXJ2MzJpbWMgLW1hYmk9aWxwMzIgLURGTEFHU19TVFI9XCIiLU8yIC1mdW5yb2xsLWxvb3BzIC1mcGVlbC1sb29wcyAtZmdjc2Utc20gLWZnY3NlLWxhcyAiXCIgIC1EX19BU1NFTUJMWV9fPTEgLWMgLUkuLyAtSSQoWUlGSVZFX0ZJUk1XQVJFX1BBVEgpICAkKFlJRklWRV9GSVJNV0FSRV9QQVRIKS9jcnQuUyAtbyBjcnQubworCSR7R0NDNjRfUFJFRklYfS1nY2MgLW1hcmNoPXJ2MzJpbWMgLW1hYmk9aWxwMzIgLVQgJChZSUZJVkVfRklSTVdBUkVfUEFUSCkvbGluay5sZCB1c2VyX3VhcnQubyBjcnQubyAtbm9zdGFydGZpbGVzIC1ub3N0ZGxpYiAtbGMgLWxnY2MgLW8gdXNlcl91YXJ0LmVsZiAtTgorCSR7R0NDNjRfUFJFRklYfS1vYmpjb3B5IC1PIHZlcmlsb2cgdXNlcl91YXJ0LmVsZiB1c2VyX3VhcnQuaGV4CisJJHtHQ0M2NF9QUkVGSVh9LW9iamR1bXAgLUQgdXNlcl91YXJ0LmVsZiA+IHVzZXJfdWFydC5kdW1wCisJcm0gY3J0Lm8gdXNlcl91YXJ0Lm8KK2lmZXEgKCQoU0lNKSxSVEwpCisgICBpZmVxICgkKERVTVApLE9GRikKKwlpdmVyaWxvZyAtZzIwMTIgLURGVU5DVElPTkFMIC1EU0lNIC1JICQoUERLX1BBVEgpIFwKKwktSSAkKENBUkFWRUxfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSAkKENBUkFWRUxfUlRMX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfTU9ERUxTKSAgICAtSSAkKFVQUkpfUlRMX1BBVEgpIC1JICQoVVBSSl9WRVJJTE9HX1BBVEgpICBcCisJLUkgJChVUFJKX0JFSEFWSU9VUkFMX0FHRU5UUykgICAgXAorCS1JICQoVVBSSl9JTkNMVURFX1BBVEgxKSAgICAtSSAkKFVQUkpfSU5DTFVERV9QQVRIMikgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDMpIFwKKwktSSAkKFVQUkpfSU5DTFVERV9QQVRINCkgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDUpIFwKKwkkPCAtbyAkQCAKKyAgIGVsc2UKKwlpdmVyaWxvZyAtZzIwMTIgLURXRkRVTVAgLURGVU5DVElPTkFMIC1EU0lNIC1JICQoUERLX1BBVEgpIFwKKwktSSAkKENBUkFWRUxfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSAkKENBUkFWRUxfUlRMX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfTU9ERUxTKSAgICAtSSAkKFVQUkpfUlRMX1BBVEgpIC1JICQoVVBSSl9WRVJJTE9HX1BBVEgpICBcCisJLUkgJChVUFJKX0JFSEFWSU9VUkFMX0FHRU5UUykgICAgXAorCS1JICQoVVBSSl9JTkNMVURFX1BBVEgxKSAgICAtSSAkKFVQUkpfSU5DTFVERV9QQVRIMikgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDMpIFwKKwktSSAkKFVQUkpfSU5DTFVERV9QQVRINCkgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDUpIFwKKwkkPCAtbyAkQCAKKyAgIGVuZGlmCitlbHNlICAKKwlpdmVyaWxvZyAkKFNJTV9ERUZJTkVTKSAtREdMIC1JICQoUERLX1BBVEgpIFwKKwktSSAkKENBUkFWRUxfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSAkKENBUkFWRUxfUlRMX1BBVEgpIC1JICQoQ0FSQVZFTF9WRVJJTE9HX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSQoVVBSSl9SVExfUEFUSCkgICAtSSAkKFVQUkpfVkVSSUxPR19QQVRIKSBcCisJLUkgJChVUFJKX0JFSEFWSU9VUkFMX0FHRU5UUykgICAgXAorCSQ8IC1vICRAIAorZW5kaWYKKworJS52Y2Q6ICUudnZwCisJdnZwICQ8CisKKyUuZWxmOiAlLmMgJChDQVJBVkVMX0ZJUk1XQVJFX1BBVEgpL3NlY3Rpb25zLmxkcyAkKENBUkFWRUxfRklSTVdBUkVfUEFUSCkvc3RhcnQucworCSR7R0NDNjRfUFJFRklYfS1nY2MgLUkgJChDQVJBVkVMX1BBVEgpIC1tYXJjaD1ydjMyaW1jIC1tYWJpPWlscDMyIC1XbCwtQnN0YXRpYywtVCwkKENBUkFWRUxfRklSTVdBUkVfUEFUSCkvc2VjdGlvbnMubGRzLC0tc3RyaXAtZGVidWcgLWZmcmVlc3RhbmRpbmcgLW5vc3RkbGliIC1vICRAICQoQ0FSQVZFTF9GSVJNV0FSRV9QQVRIKS9zdGFydC5zICQ8CisKKyUuaGV4OiAlLmVsZgorCSR7R0NDNjRfUFJFRklYfS1vYmpjb3B5IC1PIHZlcmlsb2cgJDwgJEAgCisJIyB0byBmaXggZmxhc2ggYmFzZSBhZGRyZXNzCisJc2VkIC1pICdzL0AxMDAwMDAwMC9AMDAwMDAwMDAvZycgJEAKKworJS5iaW46ICUuZWxmCisJJHtHQ0NfUEFUSH0vJHtHQ0NfUFJFRklYfS1vYmpjb3B5IC1PIGJpbmFyeSAkPCAvZGV2L3N0ZG91dCB8IHRhaWwgLWMgKzEwNDg1NzcgPiAkQAorCisjIC0tLS0gQ2xlYW4gLS0tLQorCitjbGVhbjoKKwlybSAtZiAqLmVsZiAqLmhleCAqLmJpbiAqLnZ2cCAqLnZjZCAqLmxvZyAqLmR1bXAKKworLlBIT05ZOiBjbGVhbiBoZXggYWxsCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3Jpc2NfYm9vdC9yaXNjX2Jvb3QuYyBiL3Zlcmlsb2cvZHYvcmlzY19ib290L3Jpc2NfYm9vdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4ZTU0ZjAKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3Jpc2NfYm9vdC9yaXNjX2Jvb3QuYwpAQCAtMCwwICsxLDE5MCBAQAorLyoKKyAqIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjAgRWZhYmxlc3MgQ29ycG9yYXRpb24KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICovCisKKy8vIFRoaXMgaW5jbHVkZSBpcyByZWxhdGl2ZSB0byAkQ0FSQVZFTF9QQVRIIChzZWUgTWFrZWZpbGUpCisjaW5jbHVkZSAidmVyaWxvZy9kdi9jYXJhdmVsL2RlZnMuaCIKKyNpbmNsdWRlICJ2ZXJpbG9nL2R2L2NhcmF2ZWwvc3R1Yi5jIgorCisvLyBVc2VyIFByb2plY3QgU2xhdmVzICgweDMwMDBfMDAwMCkKKworI2RlZmluZSByZWdfbXByal93Ymhvc3RfcmVnMCAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDgwMDAwMCkKKworI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcwICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAyMDAwMCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMSAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMjAwMDQpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzIgICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDIwMDA4KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWczICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAyMDAwQykKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnNCAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMjAwMTApCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzUgICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDIwMDE0KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWc2ICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAyMDAxOCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnNyAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMjAwMUMpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzggICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDIwMDIwKQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWc5ICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAyMDAyNCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMTAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMjAwMjgpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzExICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDIwMDJDKQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcxMiAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAyMDAzMCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMTMgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMjAwMzQpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzE0ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDIwMDM4KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcxNSAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAyMDAzQykKKworI2RlZmluZSByZWdfbXByal91YXJ0X3JlZzAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMTAwMDApCisjZGVmaW5lIHJlZ19tcHJqX3VhcnRfcmVnMSAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAxMDAwNCkKKyNkZWZpbmUgcmVnX21wcmpfdWFydF9yZWcyICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDEwMDA4KQorI2RlZmluZSByZWdfbXByal91YXJ0X3JlZzMgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMTAwMEMpCisjZGVmaW5lIHJlZ19tcHJqX3VhcnRfcmVnNCAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAxMDAxMCkKKyNkZWZpbmUgcmVnX21wcmpfdWFydF9yZWc1ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDEwMDE0KQorI2RlZmluZSByZWdfbXByal91YXJ0X3JlZzYgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMTAwMTgpCisjZGVmaW5lIHJlZ19tcHJqX3VhcnRfcmVnNyAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAxMDAxQykKKyNkZWZpbmUgcmVnX21wcmpfdWFydF9yZWc4ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDEwMDIwKQorCisjZGVmaW5lIEdQSU9fTU9ERV9VU0VSX1NURF9CSURJUkVDVElPTkFMX1BVTExVUCAgIDB4MUMwMAorCisjZGVmaW5lIFNDX1NJTV9PVVRQT1JUICgweGYwMDAwMDAwKQorCisvKgorICAgICAgICAgUmlzY1YgSGVsbG8gV29ybGQgdGVzdC4KKwkgICAgICAgIC0gV2FrZSB1cCB0aGUgUmlzYyBWCisJCS0gQm9vdCBmcm9tIFNQSSBGbGFzaAorCQktIFJpc2N2IFdyaXRlIEhlbGxvIFdvcmxkIHRvIFNEUkFNLAorCQktIEV4dGVybmFsIFdpc2hib25lIHJlYWQgYmFjayB2YWxpZGF0aW9uIHRoZSBkYXRhCisqLworaW50IGkgPSAwOyAKK2ludCBjbGsgPSAwOworCit2b2lkIG1haW4oKQoreworCisJaW50IGJGYWlsID0gMDsKKwkvKiAKKwlJTyBDb250cm9sIFJlZ2lzdGVycworCXwgRE0gICAgIHwgVlRSSVAgfCBTTE9XICB8IEFOX1BPTCB8IEFOX1NFTCB8IEFOX0VOIHwgTU9EX1NFTCB8IElOUF9ESVMgfCBIT0xESCB8IE9FQl9OIHwgTUdNVF9FTiB8CisJfCAzLWJpdHMgfCAxLWJpdCB8IDEtYml0IHwgMS1iaXQgIHwgMS1iaXQgIHwgMS1iaXQgfCAxLWJpdCAgIHwgMS1iaXQgICB8IDEtYml0IHwgMS1iaXQgfCAxLWJpdCAgIHwKKwlPdXRwdXQ6IDAwMDBfMDExMF8wMDAwXzExMTAgICgweDE4MDgpID0gR1BJT19NT0RFX1VTRVJfU1REX09VVFBVVAorCXwgRE0gICAgIHwgVlRSSVAgfCBTTE9XICB8IEFOX1BPTCB8IEFOX1NFTCB8IEFOX0VOIHwgTU9EX1NFTCB8IElOUF9ESVMgfCBIT0xESCB8IE9FQl9OIHwgTUdNVF9FTiB8CisJfCAxMTAgICAgfCAwICAgICB8IDAgICAgIHwgMCAgICAgIHwgMCAgICAgIHwgMCAgICAgfCAwICAgICAgIHwgMSAgICAgICB8IDAgICAgIHwgMCAgICAgfCAwICAgICAgIHwKKwkKKwkgCisJSW5wdXQ6IDAwMDBfMDAwMV8wMDAwXzExMTEgKDB4MDQwMikgPSBHUElPX01PREVfVVNFUl9TVERfSU5QVVRfTk9QVUxMCisJfCBETSAgICAgfCBWVFJJUCB8IFNMT1cgIHwgQU5fUE9MIHwgQU5fU0VMIHwgQU5fRU4gfCBNT0RfU0VMIHwgSU5QX0RJUyB8IEhPTERIIHwgT0VCX04gfCBNR01UX0VOIHwKKwl8IDAwMSAgICB8IDAgICAgIHwgMCAgICAgfCAwICAgICAgfCAwICAgICAgfCAwICAgICB8IDAgICAgICAgfCAwICAgICAgIHwgMCAgICAgfCAxICAgICB8IDAgICAgICAgfAorCisJSW5wdXQ6IDAwMDBfMDAwMV8wMDAwXzExMTEgKDB4MTgwMCkgPSBHUElPX01PREVfVVNFUl9TVERfQklESVJFQ1RJT05BTAorCXwgRE0gICAgIHwgVlRSSVAgfCBTTE9XICB8IEFOX1BPTCB8IEFOX1NFTCB8IEFOX0VOIHwgTU9EX1NFTCB8IElOUF9ESVMgfCBIT0xESCB8IE9FQl9OIHwgTUdNVF9FTiB8CisJfCAxMTAgICAgfCAwICAgICB8IDAgICAgIHwgMCAgICAgIHwgMCAgICAgIHwgMCAgICAgfCAwICAgICAgIHwgMCAgICAgICB8IDAgICAgIHwgMCAgICAgfCAwICAgICAgIHwKKwkqLworCisJLyogU2V0IHVwIHRoZSBob3VzZWtlZXBpbmcgU1BJIHRvIGJlIGNvbm5lY3RlZCBpbnRlcm5hbGx5IHNvCSovCisJLyogdGhhdCBleHRlcm5hbCBwaW4gY2hhbmdlcyBkb24ndCBhZmZlY3QgaXQuCQkJKi8KKworCXJlZ19zcGltYXN0ZXJfY29uZmlnID0gMHhhMDAyOwkvLyBFbmFibGUsIHByZXNjYWxlciA9IDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29ubmVjdCB0byBob3VzZWtlZXBpbmcgU1BJCisKKwkvLyBDb25uZWN0IHRoZSBob3VzZWtlZXBpbmcgU1BJIHRvIHRoZSBTUEkgbWFzdGVyCisJLy8gc28gdGhhdCB0aGUgQ1NCIGxpbmUgaXMgbm90IGxlZnQgZmxvYXRpbmcuICBUaGlzIGFsbG93cworCS8vIGFsbCBvZiB0aGUgR1BJTyBwaW5zIHRvIGJlIHVzZWQgZm9yIHVzZXIgZnVuY3Rpb25zLgorICAgICAgICByZWdfbXByal9pb18zMSA9IEdQSU9fTU9ERV9NR01UX1NURF9PVVRQVVQ7CisgICAgICAgIHJlZ19tcHJqX2lvXzMwID0gR1BJT19NT0RFX01HTVRfU1REX09VVFBVVDsKKyAgICAgICAgcmVnX21wcmpfaW9fMjkgPSBHUElPX01PREVfTUdNVF9TVERfT1VUUFVUOworICAgICAgICByZWdfbXByal9pb18yOCA9IEdQSU9fTU9ERV9NR01UX1NURF9PVVRQVVQ7CisgICAgICAgIHJlZ19tcHJqX2lvXzI3ID0gR1BJT19NT0RFX01HTVRfU1REX09VVFBVVDsKKyAgICAgICAgcmVnX21wcmpfaW9fMjYgPSBHUElPX01PREVfTUdNVF9TVERfT1VUUFVUOworICAgICAgICByZWdfbXByal9pb18yNSA9IEdQSU9fTU9ERV9NR01UX1NURF9PVVRQVVQ7CisgICAgICAgIHJlZ19tcHJqX2lvXzI0ID0gR1BJT19NT0RFX01HTVRfU1REX09VVFBVVDsKKyAgICAgICAgcmVnX21wcmpfaW9fMjMgPSBHUElPX01PREVfTUdNVF9TVERfT1VUUFVUOworICAgICAgICByZWdfbXByal9pb18yMiA9IEdQSU9fTU9ERV9NR01UX1NURF9PVVRQVVQ7CisgICAgICAgIHJlZ19tcHJqX2lvXzIxID0gR1BJT19NT0RFX01HTVRfU1REX09VVFBVVDsKKyAgICAgICAgcmVnX21wcmpfaW9fMjAgPSBHUElPX01PREVfTUdNVF9TVERfT1VUUFVUOworICAgICAgICByZWdfbXByal9pb18xOSA9IEdQSU9fTU9ERV9NR01UX1NURF9PVVRQVVQ7CisgICAgICAgIHJlZ19tcHJqX2lvXzE4ID0gR1BJT19NT0RFX01HTVRfU1REX09VVFBVVDsKKyAgICAgICAgcmVnX21wcmpfaW9fMTcgPSBHUElPX01PREVfTUdNVF9TVERfT1VUUFVUOworICAgICAgICByZWdfbXByal9pb18xNiA9IEdQSU9fTU9ERV9NR01UX1NURF9PVVRQVVQ7CisKKworICAgICAvKiBBcHBseSBjb25maWd1cmF0aW9uICovCisgICAgcmVnX21wcmpfeGZlciA9IDE7CisgICAgd2hpbGUgKHJlZ19tcHJqX3hmZXIgPT0gMSk7CisKKyAgICByZWdfbGEyX29lbmIgPSByZWdfbGEyX2llbmEgPSAweEZGRkZGRkZGOyAgICAvLyBbOTU6NjRdCisKKyAgICAvLyBGbGFnIHN0YXJ0IG9mIHRoZSB0ZXN0CisJcmVnX21wcmpfZGF0YWwgPSAweEFCNjAwMDAwOworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFN0YXJ0IG9mIFVzZXIgRnVuY3Rpb25hbGl0eSBhbmQgdGFrZSBvdmVyIHRoZSBHUElPIFBpbnMKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBVc2VyIGJsb2NrIGRlY2lkZSBvbiB0aGUgR1BJTyBmdW5jdGlvbgorICAgIHJlZ19tcHJqX2lvXzM3ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzM2ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzM1ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzM0ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzMzID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzMyID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzMxID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzMwID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzI5ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzI4ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzI3ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzI2ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzI1ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzI0ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzIzID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzIyID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzIxID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzIwID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzE5ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzE4ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzE3ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzE2ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzE1ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzE0ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzEzID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzEyID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzExID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzEwID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzkgID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzggID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzcgID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzYgPSAgR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzUgPSAgR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzQgPSAgR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzMgPSAgR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzIgPSAgR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzEgPSAgR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzAgPSAgR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworCisgICAgIC8qIEFwcGx5IGNvbmZpZ3VyYXRpb24gKi8KKyAgICByZWdfbXByal94ZmVyID0gMTsKKyAgICB3aGlsZSAocmVnX21wcmpfeGZlciA9PSAxKTsKKworICAgIHJlZ19sYTBfZGF0YSA9IDB4MDAwOworICAgIHJlZ19sYTBfZGF0YSA9IDB4MDAxOyAvLyBSZW1vdmUgU29mdCBSZXNldAorCisKKyAgICAvLyBSZW1vdmUgV2lzaGJvbmUgUmVzZXQKKyAgICByZWdfbXByal93Ymhvc3RfcmVnMCA9IDB4MTsKKworCisgICAgLy8gUmVtb3ZlIEFsbCBSZXNldAorICAgIHJlZ19tcHJqX3diaG9zdF9yZWcwID0gMHgxRjsKKworICAgIC8vIEVuYWJsZSBVQVJUIE11bHRpIEZ1bmN0aW9uYWwgUG9ydHMKKworICAgIHJlZ19tcHJqX2dsb2JsX3JlZzE0ID0gMHgxMDA7CisKKyAgICAvLyBjb25maWd1cmUgdGhlIHVzZXIgdWFydAorICAgIHJlZ19tcHJqX3VhcnRfcmVnMCAgPSAweDc7CisKK30KZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvcmlzY19ib290L3Jpc2NfYm9vdF90Yi52IGIvdmVyaWxvZy9kdi9yaXNjX2Jvb3QvcmlzY19ib290X3RiLnYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM0ZGI2MwotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvcmlzY19ib290L3Jpc2NfYm9vdF90Yi52CkBAIC0wLDAgKzEsMzg5IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAgMjAyMSAsIERpbmVzaCBBbm5heXlhCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBNb2RpZmllZCBieSBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVXNlciBSaXNjIENvcmUgQm9vdCBWYWxpZGF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFlJRml2ZSBjb3JlcyBwcm9qZWN0ICAgICAgICAgICAgICAgLy8vLworLy8vLyAgaHR0cHM6Ly9naXRodWIuY29tL2RpbmVzaGFubmF5eWEveWlmaXZlX3IwLmdpdCAgICAgICAgICAgICAgLy8vLworLy8vLyAgaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2NvcmVzL3lpZml2ZS8gICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgMS4gVXNlciBSaXNjIGNvcmUgaXMgYm9vdGVkIHVzaW5nICBjb21waWxlZCBjb2RlIG9mICAgICAgLy8vLworLy8vLyAgICAgICAgdXNlcl9yaXNjX2Jvb3QuaGV4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgMi4gVXNlciBSaXNjIGNvcmUgdXNlcyBTZXJpYWwgRmxhc2ggYW5kIFNEUkFNIHRvIGJvb3QgICAgLy8vLworLy8vLyAgICAgMy4gQWZ0ZXIgc3VjY2Vzc2Z1bCBib290LCBSaXNjIGNvcmUgd2lsbCAgd3JpdGUgc2lnbmF0dXJlLy8vLworLy8vLyAgICAgICAgaW4gdG8gIHVzZXIgcmVnaXN0ZXIgZnJvbSAweDMwMDBfMDAxOCB0byAweDMwMDBfMDAyQyAgLy8vLworLy8vLyAgICAgNC4gVGhyb3VnaCB0aGUgRXh0ZXJuYWwgV2lzaGJvbmUgSW50ZXJmYWNlIHdlIHJlYWQgYmFjayAgLy8vLworLy8vLyAgICAgICAgIGFuZCB2YWxpZGF0ZSB0aGUgdXNlciByZWdpc3RlciB0byBkZWNsYXJlZCBwYXNzIGZhaWwgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVG8gRG86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICBub3RoaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgQXV0aG9yKHMpOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgIC0gRGluZXNoIEFubmF5eWEsIGRpbmVzaGFAb3BlbmNvcmVzLm9yZyAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgUmV2aXNpb24gOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAwLjEgLSAxMnRoIEp1bmUgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBDb3B5cmlnaHQgKEMpIDIwMDAgQXV0aG9ycyBhbmQgT1BFTkNPUkVTLk9SRyAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBmaWxlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCB3aXRob3V0ICAgICAgICAgLy8vLworLy8vLyByZXN0cmljdGlvbiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgICAgLy8vLworLy8vLyByZW1vdmVkIGZyb20gdGhlIGZpbGUgYW5kIHRoYXQgYW55IGRlcml2YXRpdmUgd29yayBjb250YWlucyAgLy8vLworLy8vLyB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGFzc29jaWF0ZWQgZGlzY2xhaW1lci4gLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0ICAgLy8vLworLy8vLyBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgLy8vLworLy8vLyBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgLy8vLworLy8vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55ICAgLy8vLworLy8vLyBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgICAgICAgLy8vLworLy8vLyB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkICAgLy8vLworLy8vLyB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSICAgICAgLy8vLworLy8vLyBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgLy8vLworLy8vLyBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAgLy8vLworLy8vLyBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgc291cmNlOyBpZiBub3QsIGRvd25sb2FkIGl0ICAgLy8vLworLy8vLyBmcm9tIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9sZ3BsLnNodG1sICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitgZGVmYXVsdF9uZXR0eXBlIG5vbmUKKworYHRpbWVzY2FsZSAxIG5zIC8gMSBwcworCitgaW5jbHVkZSAiczI1ZmwyNTZzLnN2IgorYGluY2x1ZGUgInVwcmpfbmV0bGlzdHMudiIKK2BpbmNsdWRlICJjYXJhdmVsX25ldGxpc3RzLnYiCitgaW5jbHVkZSAic3BpZmxhc2gudiIKK2BpbmNsdWRlICJtdDQ4bGM4bThhMi52IgorYGluY2x1ZGUgInVhcnRfYWdlbnQudiIKKworbW9kdWxlIHJpc2NfYm9vdF90YjsKKwlyZWcgY2xvY2s7CisJcmVnIFJTVEI7CisJcmVnIENTQjsKKwlyZWcgcG93ZXIxLCBwb3dlcjI7CisJcmVnIHBvd2VyMywgcG93ZXI0OworCisJd2lyZSBncGlvOworCXdpcmUgWzM3OjBdIG1wcmpfaW87CisJd2lyZSBbNzowXSBtcHJqX2lvXzA7CisJd2lyZSBbMTU6MF0gY2hlY2tiaXRzOworCisgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAvLyBVYXJ0IENvbmZpZ3VyYXRpb24KKyAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIHJlZyBbMTowXSAgICAgIHVhcnRfZGF0YV9iaXQgICAgICAgIDsKKyAgICAgICAgcmVnCSAgICAgICB1YXJ0X3N0b3BfYml0cyAgICAgICA7IC8vIDA6IDEgc3RvcCBiaXQ7IDE6IDIgc3RvcCBiaXQ7CisgICAgICAgIHJlZwkgICAgICAgdWFydF9zdGlja19wYXJpdHkgICAgOyAvLyAxOiBmb3JjZSBldmVuIHBhcml0eQorICAgICAgICByZWcJICAgICAgIHVhcnRfcGFyaXR5X2VuICAgICAgIDsgLy8gcGFyaXR5IGVuYWJsZQorICAgICAgICByZWcJICAgICAgIHVhcnRfZXZlbl9vZGRfcGFyaXR5IDsgLy8gMDogb2RkIHBhcml0eTsgMTogZXZlbiBwYXJpdHkKKyAgICAgICAgCisgICAgICAgIHJlZyBbNzowXSAgICAgIHVhcnRfZGF0YSAgICAgICAgICAgIDsKKyAgICAgICAgcmVnIFsxNTowXSAgICAgdWFydF9kaXZpc29yICAgICAgICAgOwkvLyBkaXZpZGVkIGJ5IG4gKiAxNgorICAgICAgICByZWcgWzE1OjBdICAgICB1YXJ0X3RpbWVvdXQgICAgICAgICA7Ly8gd2FpdCB0aW1lIGxpbWl0CisgICAgICAgIAorICAgICAgICByZWcgWzE1OjBdICAgICB1YXJ0X3J4X251ICAgICAgICAgICA7CisgICAgICAgIHJlZyBbMTU6MF0gICAgIHVhcnRfdHhfbnUgICAgICAgICAgIDsKKyAgICAgICAgcmVnIFs3OjBdICAgICAgdWFydF93cml0ZV9kYXRhIFswOjM5XTsKKyAgICAgICAgcmVnIAkgICAgICAgdWFydF9maWZvX2VuYWJsZSAgICAgOwkvLyBmaWZvIG1vZGUgZGlzYWJsZQorCXJlZyAgICAgICAgICAgIHRlc3RfZmFpbCAgICAgICAgICAgIDsKKyAgICAgICAgCisgICAgICAgIGludGVnZXIgaSxqOworCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCisJYXNzaWduIGNoZWNrYml0cyA9IG1wcmpfaW9bMzE6MTZdOworCisJYXNzaWduIG1wcmpfaW9bM10gPSAoQ1NCID09IDEnYjEpID8gMSdiMSA6IDEnYno7CisKKwkvLyBFeHRlcm5hbCBjbG9jayBpcyB1c2VkIGJ5IGRlZmF1bHQuICBNYWtlIHRoaXMgYXJ0aWZpY2lhbGx5IGZhc3QgZm9yIHRoZQorCS8vIHNpbXVsYXRpb24uICBOb3JtYWxseSB0aGlzIHdvdWxkIGJlIGEgc2xvdyBjbG9jayBhbmQgdGhlIGRpZ2l0YWwgUExMCisJLy8gd291bGQgYmUgdGhlIGZhc3QgY2xvY2suCisKKwlhbHdheXMgIzEyLjUgY2xvY2sgPD0gKGNsb2NrID09PSAxJ2IwKTsKKworCWluaXRpYWwgYmVnaW4KKwkJY2xvY2sgPSAwOworCWVuZAorCisJYGlmZGVmIFdGRFVNUAorICAgICAgICBpbml0aWFsCisgICAgICAgIGJlZ2luCisgICAgICAgICAgICRkdW1wZmlsZSgic2lteC52Y2QiKTsKKyAgICAgICAgICAgJGR1bXB2YXJzKDEscmlzY19ib290X3RiKTsKKyAgICAgICAgICAgJGR1bXB2YXJzKDEscmlzY19ib290X3RiLnVfc3BpX2ZsYXNoXzI1Nm1iKTsKKyAgICAgICAgICAgLy8kZHVtcHZhcnMoMixyaXNjX2Jvb3RfdGIudXV0KTsKKyAgICAgICAgICAgJGR1bXB2YXJzKDQscmlzY19ib290X3RiLnV1dC5tcHJqKTsKKyAgICAgICAgICAgJGR1bXB2YXJzKDAscmlzY19ib290X3RiLnRiX3VhcnQpOworICAgICAgICAgICAvLyRkdW1wdmFycygwLHJpc2NfYm9vdF90Yi51X3VzZXJfc3BpZmxhc2gpOworCSAgICRkaXNwbGF5KCJXYXZlZm9ybSBEdW1wIHN0YXJ0ZWQiKTsKKyAgICAgICAgZW5kCisgICAgICAgIGBlbmRpZgorCisKKyAgICAgICAgaW5pdGlhbAorICAgICAgICBiZWdpbgorICAgICAgICAgICB1YXJ0X2RhdGFfYml0ICAgICAgICAgICA9IDInYjExOworICAgICAgICAgICB1YXJ0X3N0b3BfYml0cyAgICAgICAgICA9IDA7IC8vIDA6IDEgc3RvcCBiaXQ7IDE6IDIgc3RvcCBiaXQ7CisgICAgICAgICAgIHVhcnRfc3RpY2tfcGFyaXR5ICAgICAgID0gMDsgLy8gMTogZm9yY2UgZXZlbiBwYXJpdHkKKyAgICAgICAgICAgdWFydF9wYXJpdHlfZW4gICAgICAgICAgPSAwOyAvLyBwYXJpdHkgZW5hYmxlCisgICAgICAgICAgIHVhcnRfZXZlbl9vZGRfcGFyaXR5ICAgID0gMTsgLy8gMDogb2RkIHBhcml0eTsgMTogZXZlbiBwYXJpdHkKKyAgICAgICAgICAgdWFydF9kaXZpc29yICAgICAgICAgICAgPSAxNTsvLyBkaXZpZGVkIGJ5IG4gKiAxNgorICAgICAgICAgICB1YXJ0X3RpbWVvdXQgICAgICAgICAgICA9IDUwMDsvLyB3YWl0IHRpbWUgbGltaXQKKyAgICAgICAgICAgdWFydF9maWZvX2VuYWJsZSAgICAgICAgPSAwOwkvLyBmaWZvIG1vZGUgZGlzYWJsZQorICAgICAgICAKKyAgICAgICAgICAgIzIwMDsgLy8gV2FpdCBmb3IgcmVzZXQgcmVtb3ZhbAorCisgICAgICAgICAgIGZvcmsKKwkgICBiZWdpbgorICAgICAgICAgIAorCSAgICAgIC8vIFdhaXQgZm9yIE1hbmFnbWVudCBjb3JlIHRvIGJvb3QgdXAgCisJICAgICAgd2FpdChjaGVja2JpdHMgPT0gMTYnaCBBQjYwKTsKKwkgICAgICAkZGlzcGxheSgiTW9uaXRvcjogVGVzdCBVc2VyIFJpc2MgQm9vdCBTdGFydGVkIik7CisgICAgICAgCisJICAgICAgLy8gV2FpdCBmb3IgdXNlciByaXNjIGNvcmUgdG8gYm9vdCB1cCAKKyAgICAgICAgICAgICAgcmVwZWF0ICgzMDAwMCkgQChwb3NlZGdlIGNsb2NrKTsgIAorICAgICAgICAgICAgICB0Yl91YXJ0LnVhcnRfaW5pdDsKKyAgICAgICAgICAgICAgdGJfdWFydC5jb250cm9sX3NldHVwICh1YXJ0X2RhdGFfYml0LCB1YXJ0X3N0b3BfYml0cywgdWFydF9wYXJpdHlfZW4sIHVhcnRfZXZlbl9vZGRfcGFyaXR5LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVhcnRfc3RpY2tfcGFyaXR5LCB1YXJ0X3RpbWVvdXQsIHVhcnRfZGl2aXNvcik7CisgICAgICAgICAgICAgIAorICAgICAgICAgICAgICBmb3IgKGk9MDsgaTw0MDsgaT1pKzEpCisgICAgICAgICAgICAgIAl1YXJ0X3dyaXRlX2RhdGFbaV0gPSAkcmFuZG9tOworICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgCisgICAgICAgICAgICAgIAorICAgICAgICAgICAgICBmb3JrCisgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGZvciAoaT0wOyBpPDQwOyBpPWkrMSkKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIlxuLi4uIFVBUlQgQWdlbnQgV3JpdGluZyBjaGFyICV4IC4uLiIsIHVhcnRfd3JpdGVfZGF0YVtpXSk7CisgICAgICAgICAgICAgICAgICAgICAgIHRiX3VhcnQud3JpdGVfY2hhciAodWFydF93cml0ZV9kYXRhW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgZm9yIChqPTA7IGo8NDA7IGo9aisxKQorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgIHRiX3VhcnQucmVhZF9jaGFyX2Noayh1YXJ0X3dyaXRlX2RhdGFbal0pOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgIGpvaW4KKyAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICMxMDAKKyAgICAgICAgICAgICAgICAgdGJfdWFydC5yZXBvcnRfc3RhdHVzKHVhcnRfcnhfbnUsIHVhcnRfdHhfbnUpOworICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgdGVzdF9mYWlsID0gMDsKKyAgICAgICAgCisgICAgICAgICAgICAgICAgIC8vIENoZWNrIAorICAgICAgICAgICAgICAgICAvLyBpZiBhbGwgdGhlIDQwIGJ5dGUgdHJhbnNtaXR0ZWQKKyAgICAgICAgICAgICAgICAgLy8gaWYgYWxsIHRoZSA0MCBieXRlIHJlY2VpdmVkCisgICAgICAgICAgICAgICAgIC8vIGlmIG5vIGVycm9yIAorICAgICAgICAgICAgICAgICBpZih1YXJ0X3R4X251ICE9IDQwKSB0ZXN0X2ZhaWwgPSAxOworICAgICAgICAgICAgICAgICBpZih1YXJ0X3J4X251ICE9IDQwKSB0ZXN0X2ZhaWwgPSAxOworICAgICAgICAgICAgICAgICBpZih0Yl91YXJ0LmVycl9jbnQgIT0gMCkgdGVzdF9mYWlsID0gMTsKKyAgICAgICAgCisJICAgICAgZW5kCisJICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAvLyBMb29wIGZvciBUaW1lT3V0CisgICAgICAgICAgICAgICAgICAgcmVwZWF0ICg2MDAwMCkgQChwb3NlZGdlIGNsb2NrKTsKKyAgICAgICAgICAgICAgICAJCS8vICRkaXNwbGF5KCIrMTAwMCBjeWNsZXMiKTsKKyAgICAgICAgICAgICAgICAgICB0ZXN0X2ZhaWwgPSAxOworICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgam9pbl9hbnkKKyAgICAgICAgICAgICAgZGlzYWJsZSBmb3JrOyAvL2Rpc2FibGUgcGVuZGluZyBmb3JrIGFjdGl2aXR5CisKKyAgICAgICAgICAgICAgJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworICAgICAgICAgICAgICBpZih0ZXN0X2ZhaWwgPT0gMCkgYmVnaW4KKyAgICAgICAgICAgICAgICAgYGlmZGVmIEdMCisgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RhbmRhbG9uZSBVc2VyIFVBUlQgVGVzdCAoR0wpIFBhc3NlZCIpOworICAgICAgICAgICAgICAgICBgZWxzZQorICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkoIk1vbml0b3I6IFN0YW5kYWxvbmUgVXNlciBVQVJUIFRlc3QgKFJUTCkgUGFzc2VkIik7CisgICAgICAgICAgICAgICAgIGBlbmRpZgorICAgICAgICAgICAgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICAgICAgICAgICAgYGlmZGVmIEdMCisgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkoIk1vbml0b3I6IFN0YW5kYWxvbmUgVXNlciBVQVJUIFRlc3QgKEdMKSBGYWlsZWQiKTsKKyAgICAgICAgICAgICAgICAgIGBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkoIk1vbml0b3I6IFN0YW5kYWxvbmUgVXNlciBVQVJUIFRlc3QgKFJUTCkgRmFpbGVkIik7CisgICAgICAgICAgICAgICAgICBgZW5kaWYKKyAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisgICAgICAgICAgICAgICMxMDAKKyAgICAgICAgICAgICAgJGZpbmlzaDsKKyAgICAgICAgZW5kCisKKworCWluaXRpYWwgYmVnaW4KKwkJUlNUQiA8PSAxJ2IwOworCQlDU0IgIDw9IDEnYjE7CQkvLyBGb3JjZSBDU0IgaGlnaAorCQkjMjAwMDsKKwkJUlNUQiA8PSAxJ2IxOwkgICAgCS8vIFJlbGVhc2UgcmVzZXQKKwkJIzE3MDAwMDsKKwkJQ1NCID0gMSdiMDsJCS8vIENTQiBjYW4gYmUgcmVsZWFzZWQKKwllbmQKKworCWluaXRpYWwgYmVnaW4JCS8vIFBvd2VyLXVwIHNlcXVlbmNlCisJCXBvd2VyMSA8PSAxJ2IwOworCQlwb3dlcjIgPD0gMSdiMDsKKwkJcG93ZXIzIDw9IDEnYjA7CisJCXBvd2VyNCA8PSAxJ2IwOworCQkjMTAwOworCQlwb3dlcjEgPD0gMSdiMTsKKwkJIzEwMDsKKwkJcG93ZXIyIDw9IDEnYjE7CisJCSMxMDA7CisJCXBvd2VyMyA8PSAxJ2IxOworCQkjMTAwOworCQlwb3dlcjQgPD0gMSdiMTsKKwllbmQKKworCS8vYWx3YXlzIEAobXByal9pbykgYmVnaW4KKwkvLwkjMSAkZGlzcGxheSgiTVBSSi1JTyBzdGF0ZSA9ICViICIsIG1wcmpfaW9bNzowXSk7CisJLy9lbmQKKworCXdpcmUgZmxhc2hfY3NiOworCXdpcmUgZmxhc2hfY2xrOworCXdpcmUgZmxhc2hfaW8wOworCXdpcmUgZmxhc2hfaW8xOworCisJd2lyZSBWREQzVjMgPSBwb3dlcjE7CisJd2lyZSBWREQxVjggPSBwb3dlcjI7CisJd2lyZSBVU0VSX1ZERDNWMyA9IHBvd2VyMzsKKwl3aXJlIFVTRVJfVkREMVY4ID0gcG93ZXI0OworCXdpcmUgVlNTID0gMSdiMDsKKworCWNhcmF2ZWwgdXV0ICgKKwkJLnZkZGlvCSAgKFZERDNWMyksCisJCS52c3NpbwkgIChWU1MpLAorCQkudmRkYQkgIChWREQzVjMpLAorCQkudnNzYQkgIChWU1MpLAorCQkudmNjZAkgIChWREQxVjgpLAorCQkudnNzZAkgIChWU1MpLAorCQkudmRkYTEgICAgKFVTRVJfVkREM1YzKSwKKwkJLnZkZGEyICAgIChVU0VSX1ZERDNWMyksCisJCS52c3NhMQkgIChWU1MpLAorCQkudnNzYTIJICAoVlNTKSwKKwkJLnZjY2QxCSAgKFVTRVJfVkREMVY4KSwKKwkJLnZjY2QyCSAgKFVTRVJfVkREMVY4KSwKKwkJLnZzc2QxCSAgKFZTUyksCisJCS52c3NkMgkgIChWU1MpLAorCQkuY2xvY2sJICAoY2xvY2spLAorCQkuZ3BpbyAgICAgKGdwaW8pLAorICAgICAgICAubXByal9pbyAgKG1wcmpfaW8pLAorCQkuZmxhc2hfY3NiKGZsYXNoX2NzYiksCisJCS5mbGFzaF9jbGsoZmxhc2hfY2xrKSwKKwkJLmZsYXNoX2lvMChmbGFzaF9pbzApLAorCQkuZmxhc2hfaW8xKGZsYXNoX2lvMSksCisJCS5yZXNldGIJICAoUlNUQikKKwkpOworCisJc3BpZmxhc2ggIygKKwkJLkZJTEVOQU1FKCJyaXNjX2Jvb3QuaGV4IikKKwkpIHNwaWZsYXNoICgKKwkJLmNzYihmbGFzaF9jc2IpLAorCQkuY2xrKGZsYXNoX2NsayksCisJCS5pbzAoZmxhc2hfaW8wKSwKKwkJLmlvMShmbGFzaF9pbzEpLAorCQkuaW8yKCksCQkJLy8gbm90IHVzZWQKKwkJLmlvMygpCQkJLy8gbm90IHVzZWQKKwkpOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBDb25uZWN0IFF1YWQgRmxhc2ggdG8gZm9yIHVzciBSaXNjIENvcmUKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgd2lyZSB1c2VyX2ZsYXNoX2NsayA9IG1wcmpfaW9bMjRdOworICAgd2lyZSB1c2VyX2ZsYXNoX2NzYiA9IG1wcmpfaW9bMjhdOworICAgLy90cmkgIHVzZXJfZmxhc2hfaW8wID0gbXByal9pb1syNl07CisgICAvL3RyaSAgdXNlcl9mbGFzaF9pbzEgPSBtcHJqX2lvWzI3XTsKKyAgIC8vdHJpICB1c2VyX2ZsYXNoX2lvMiA9IG1wcmpfaW9bMjhdOworICAgLy90cmkgIHVzZXJfZmxhc2hfaW8zID0gbXByal9pb1syOV07CisKKworICAgLy8gUXVhcmQgZmxhc2gKKyAgICAgczI1ZmwyNTZzICMoLm1lbV9maWxlX25hbWUoInVzZXJfdWFydC5oZXgiKSwKKwkgICAgICAgICAub3RwX2ZpbGVfbmFtZSgibm9uZSIpLCAKKyAgICAgICAgICAgICAgICAgLlRpbWluZ01vZGVsKCJTMjVGTDUxMlNBR01GSTAxMF9GXzMwcEYiKSkgCisJCSB1X3NwaV9mbGFzaF8yNTZtYiAoCisgICAgICAgICAgIC8vIERhdGEgSW5wdXRzL091dHB1dHMKKyAgICAgICAuU0kgICAgICAobXByal9pb1syOV0pLAorICAgICAgIC5TTyAgICAgIChtcHJqX2lvWzMwXSksCisgICAgICAgLy8gQ29udHJvbHMKKyAgICAgICAuU0NLICAgICAodXNlcl9mbGFzaF9jbGspLAorICAgICAgIC5DU05lZyAgICh1c2VyX2ZsYXNoX2NzYiksCisgICAgICAgLldQTmVnICAgKG1wcmpfaW9bMzFdKSwKKyAgICAgICAuSE9MRE5lZyAobXByal9pb1szMl0pLAorICAgICAgIC5SU1ROZWcgIChSU1RCKQorCisgICAgICAgKTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICBVQVJUIEFnZW50IGludGVncmF0aW9uCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2lyZSB1YXJ0X3R4ZCx1YXJ0X3J4ZDsKKworYXNzaWduIHVhcnRfdHhkICAgPSBtcHJqX2lvWzJdOworYXNzaWduIG1wcmpfaW9bMV0gID0gdWFydF9yeGQgOworIAordWFydF9hZ2VudCB0Yl91YXJ0KAorCS5tY2xrICAgICAgICAgICAgICAgIChjbG9jayAgICAgICAgICAgICAgKSwKKwkudHhkICAgICAgICAgICAgICAgICAodWFydF9yeGQgICAgICAgICAgICksCisJLnJ4ZCAgICAgICAgICAgICAgICAgKHVhcnRfdHhkICAgICAgICAgICApCisJKTsKKworCitgaWZuZGVmIEdMIC8vIERyaXZlIFBvd2VyIGZvciBIb2xkIEZpeCBCdWYKKyAgICAvLyBBbGwgc3RhbmRhcmQgY2VsbCBuZWVkIHBvd2VyIGhvb2stdXAgZm9yIGZ1bmN0aW9uYWxpdHkgd29yaworaW5pdGlhbCBiZWdpbgorZW5kCitgZW5kaWYgICAgCisKKworLyoqCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSSVNDIElNRU0gYW1kIERNRU0gTW9uaXRvcmluZyBUQVNLCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitsb2dpYyBbYFNDUjFfRE1FTV9BV0lEVEgtMTowXSAgICAgICAgICAgY29yZTJpbWVtX2FkZHJfb19yOyAgICAgICAgICAgLy8gRE1FTSBhZGRyZXNzCitsb2dpYyBbYFNDUjFfRE1FTV9BV0lEVEgtMTowXSAgICAgICAgICAgY29yZTJkbWVtX2FkZHJfb19yOyAgICAgICAgICAgLy8gRE1FTSBhZGRyZXNzCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZTJkbWVtX2NtZF9vX3I7CisKK2BkZWZpbmUgUklTQ19DT1JFICB0ZXN0X3RiLnV1dC5tcHJqLnVfY29yZS51X3Jpc2N2X3RvcC5pX2NvcmVfdG9wCisKK2Fsd2F5c0AocG9zZWRnZSBgUklTQ19DT1JFLmNsaykgYmVnaW4KKyAgICBpZihgUklTQ19DT1JFLmltZW0yY29yZV9yZXFfYWNrX2kgJiYgYFJJU0NfQ09SRS5jb3JlMmltZW1fcmVxX28pCisgICAgICAgICAgY29yZTJpbWVtX2FkZHJfb19yIDw9IGBSSVNDX0NPUkUuY29yZTJpbWVtX2FkZHJfbzsKKworICAgIGlmKGBSSVNDX0NPUkUuZG1lbTJjb3JlX3JlcV9hY2tfaSAmJiBgUklTQ19DT1JFLmNvcmUyZG1lbV9yZXFfbykgYmVnaW4KKyAgICAgICAgICBjb3JlMmRtZW1fYWRkcl9vX3IgPD0gYFJJU0NfQ09SRS5jb3JlMmRtZW1fYWRkcl9vOworICAgICAgICAgIGNvcmUyZG1lbV9jbWRfb19yICA8PSBgUklTQ19DT1JFLmNvcmUyZG1lbV9jbWRfbzsKKyAgICBlbmQKKworICAgIGlmKGBSSVNDX0NPUkUuaW1lbTJjb3JlX3Jlc3BfaSAhPTApCisgICAgICAgICAgJGRpc3BsYXkoIlJJU0NWLURFQlVHID0+IElNRU0gQUREUkVTUzogJXggUmVhZCBEYXRhIDogJXggUmVzb25zZTogJXgiLCBjb3JlMmltZW1fYWRkcl9vX3IsYFJJU0NfQ09SRS5pbWVtMmNvcmVfcmRhdGFfaSxgUklTQ19DT1JFLmltZW0yY29yZV9yZXNwX2kpOworICAgIGlmKChgUklTQ19DT1JFLmRtZW0yY29yZV9yZXNwX2kgIT0wKSAmJiBjb3JlMmRtZW1fY21kX29fcikKKyAgICAgICAgICAkZGlzcGxheSgiUklTQ1YtREVCVUcgPT4gRE1FTSBBRERSRVNTOiAleCBXcml0ZSBEYXRhOiAleCBSZXNvbnNlOiAleCIsIGNvcmUyZG1lbV9hZGRyX29fcixgUklTQ19DT1JFLmNvcmUyZG1lbV93ZGF0YV9vLGBSSVNDX0NPUkUuZG1lbTJjb3JlX3Jlc3BfaSk7CisgICAgaWYoKGBSSVNDX0NPUkUuZG1lbTJjb3JlX3Jlc3BfaSAhPTApICYmICFjb3JlMmRtZW1fY21kX29fcikKKyAgICAgICAgICAkZGlzcGxheSgiUklTQ1YtREVCVUcgPT4gRE1FTSBBRERSRVNTOiAleCBSRUFEIERhdGEgOiAleCBSZXNvbnNlOiAleCIsIGNvcmUyZG1lbV9hZGRyX29fcixgUklTQ19DT1JFLmRtZW0yY29yZV9yZGF0YV9pLGBSSVNDX0NPUkUuZG1lbTJjb3JlX3Jlc3BfaSk7CitlbmQKKyovCitlbmRtb2R1bGUKK2BkZWZhdWx0X25ldHR5cGUgd2lyZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9yaXNjX2Jvb3QvcnVuX2l2ZXJpbG9nIGIvdmVyaWxvZy9kdi9yaXNjX2Jvb3QvcnVuX2l2ZXJpbG9nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmUyZjJhNGQKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3Jpc2NfYm9vdC9ydW5faXZlcmlsb2cKQEAgLTAsMCArMSwyNiBAQAorIyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyMgLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSwgRGluZXNoIEFubmF5eWEKKyMgLy8gCisjIC8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIC8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAvLworIyAvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAvLworIyAvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIC8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIC8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIC8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIyAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorIyAvLyBTUERYLUZpbGVDb250cmlidXRvcjogRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKyMgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyNhZGQgLURXRkRVTVAgdG8gZW5hYmxlIHdhdmVmb3JtIGR1bXAKK2l2ZXJpbG9nIC1EV0ZEVU1QIC1nMjAwNS1zdiAtREZVTkNUSU9OQUwgLURTSU0gLUkgJFBES19QQVRIIFwKKy1JICRDQVJBVkVMX1JPT1QvdmVyaWxvZy9kdi9jYXJhdmVsIC1JICRDQVJBVkVMX1JPT1QvdmVyaWxvZy9ydGwgXAorLUkgLi4vbW9kZWwgIC1JIC4uL2FnZW50cyAgLUkgLi4vLi4vLi4vdmVyaWxvZy9ydGwgLUkgLi4vLi4vLi4vdmVyaWxvZyBcCistSSAuLi8uLi8uLi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvaW5jbHVkZXMgICAgLUkgLi4vLi4vLi4vdmVyaWxvZy9ydGwvc2RyYW1fY3RybC9zcmMvZGVmcyBcCityaXNjX2Jvb3RfdGIudiAtbyByaXNjX2Jvb3QudnZwIAorCit2dnAgcmlzY19ib290LnZ2cAorcm0gcmlzY19ib290LnZ2cApkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9yaXNjX2Jvb3QvdXNlcl91YXJ0LmMgYi92ZXJpbG9nL2R2L3Jpc2NfYm9vdC91c2VyX3VhcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTgwNWY3Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9yaXNjX2Jvb3QvdXNlcl91YXJ0LmMKQEAgLTAsMCArMSw1OSBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxLCBEaW5lc2ggQW5uYXl5YQorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworI2RlZmluZSBTQ19TSU1fT1VUUE9SVCAoMHhmMDAwMDAwMCkKKyNkZWZpbmUgdWludDMyX3QgIGxvbmcKKworI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcwICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAwMDAwMCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMSAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMDAwMDQpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzIgICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDAwMDA4KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWczICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAwMDAwQykKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnNCAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMDAwMTApCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzUgICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDAwMDE0KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWc2ICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAwMDAxOCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnNyAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMDAwMUMpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzggICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDAwMDIwKQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWc5ICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAwMDAyNCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMTAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMDAwMjgpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzExICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDAwMDJDKQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcxMiAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAwMDAzMCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMTMgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMDAwMzQpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzE0ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDAwMDM4KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcxNSAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAwMDAzQykKKworI2RlZmluZSByZWdfbXByal91YXJ0X3JlZzAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMTAwMDApCisjZGVmaW5lIHJlZ19tcHJqX3VhcnRfcmVnMSAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAxMDAwNCkKKyNkZWZpbmUgcmVnX21wcmpfdWFydF9yZWcyICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDEwMDA4KQorI2RlZmluZSByZWdfbXByal91YXJ0X3JlZzMgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMTAwMEMpCisjZGVmaW5lIHJlZ19tcHJqX3VhcnRfcmVnNCAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAxMDAxMCkKKyNkZWZpbmUgcmVnX21wcmpfdWFydF9yZWc1ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDEwMDE0KQorI2RlZmluZSByZWdfbXByal91YXJ0X3JlZzYgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMTAwMTgpCisjZGVmaW5lIHJlZ19tcHJqX3VhcnRfcmVnNyAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAxMDAxQykKKyNkZWZpbmUgcmVnX21wcmpfdWFydF9yZWc4ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDEwMDIwKQorCitpbnQgbWFpbigpCit7CisKKyAgICB3aGlsZSgxKSB7CisgICAgICAgLy8gQ2hlY2sgVUFSVCBSWCBmaWZvIGhhcyBkYXRhLCBpZiBhdmFpbGFibGUgbG9vcCBiYWNrIHRoZSBkYXRhCisgICAgICAgaWYocmVnX21wcmpfdWFydF9yZWc4ICE9IDApIHsgCisJICAgcmVnX21wcmpfdWFydF9yZWc1ID0gcmVnX21wcmpfdWFydF9yZWc2OworICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy9NYWtlZmlsZSBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDYxYmEzCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL01ha2VmaWxlCkBAIC0wLDAgKzEsMzc3IEBACisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIE1ha2VmaWxlIGZvciBTQ1IxCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NJTSA/PSBSVEwKK0RVTVAgPz0gT0ZGCisKKyMgUEFSQU1FVEVSUworCisjIENGRyA9IDxNQVgsIEJBU0UsIE1JTiwgQ1VTVE9NPgorIyBCVVMgPSA8QUhCLCBBWEksIFdCPgorCitleHBvcnQgQ0ZHICAgICAgPz0gTUFYCitleHBvcnQgQlVTICAgICAgPz0gV0IKKworaWZlcSAoJChDRkcpLCBNQVgpCisjIFByZWRlZmluZWQgY29uZmlndXJhdGlvbiBZQ1IxX0NGR19SVjMySU1DX01BWAorICAgIG92ZXJyaWRlIEFSQ0ggICAgICAgICA6PSBJTUMKKyAgICBvdmVycmlkZSBWRUNUX0lSUSAgICAgOj0gMQorICAgIG92ZXJyaWRlIElQSUMgICAgICAgICA6PSAxCisgICAgb3ZlcnJpZGUgVENNICAgICAgICAgIDo9IDAKKyAgICBvdmVycmlkZSBTSU1fQ0ZHX0RFRiAgOj0gWUNSMV9DRkdfUlYzMklNQ19NQVgKK2Vsc2UKKyAgICBpZmVxICgkKENGRyksIEJBU0UpCisgICAgIyBQcmVkZWZpbmVkIGNvbmZpZ3VyYXRpb24gWUNSMV9DRkdfUlYzMklDX0JBU0UKKyAgICAgICAgb3ZlcnJpZGUgQVJDSCAgICAgICAgIDo9IElDCisgICAgICAgIG92ZXJyaWRlIFZFQ1RfSVJRICAgICA6PSAxCisgICAgICAgIG92ZXJyaWRlIElQSUMgICAgICAgICA6PSAxCisgICAgICAgIG92ZXJyaWRlIFRDTSAgICAgICAgICA6PSAwCisgICAgICAgIG92ZXJyaWRlIFNJTV9DRkdfREVGICA6PSBZQ1IxX0NGR19SVjMySUNfQkFTRQorICAgIGVsc2UKKyAgICAgICAgaWZlcSAoJChDRkcpLCBNSU4pCisgICAgICAgICMgUHJlZGVmaW5lZCBjb25maWd1cmF0aW9uIFNDUjFfQ0ZHX1JWMzJFQ19NSU4KKyAgICAgICAgICAgIG92ZXJyaWRlIEFSQ0ggICAgICAgICA6PSBFQworICAgICAgICAgICAgb3ZlcnJpZGUgVkVDVF9JUlEgICAgIDo9IDAKKyAgICAgICAgICAgIG92ZXJyaWRlIElQSUMgICAgICAgICA6PSAwCisgICAgICAgICAgICBvdmVycmlkZSBUQ00gICAgICAgICAgOj0gMAorICAgICAgICAgICAgb3ZlcnJpZGUgU0lNX0NGR19ERUYgIDo9IFlDUjFfQ0ZHX1JWMzJFQ19NSU4KKyAgICAgICAgZWxzZQorICAgICAgICAjIENVU1RPTSBjb25maWd1cmF0aW9uLiBQYXJhbWV0ZXJzIGNhbiBiZSBvdmVyd3JpdHRlbgorICAgICAgICAgICAgIyBUaGVzZSBvcHRpb25zIGFyZSBmb3IgY29tcGlsaW5nIHRlc3RzIG9ubHkuIFNldCB0aGUgY29ycmVzcG9uZGluZyBSVEwgcGFyYW1ldGVycyBtYW51YWxseSBpbiB0aGUgZmlsZSB5Y3IxX2FyY2hfZGVzY3JpcHRpb24uc3ZoLgorICAgICAgICAgICAgIyBBUkNIID0gPElNQywgSUMsIElNLCBJLCBFTUMsIEVNLCBFQywgRT4KKyAgICAgICAgICAgICMgVkVDVF9JUlEgPSA8MCwgMT4KKyAgICAgICAgICAgICMgSVBJQyA9IDwwLCAxPgorICAgICAgICAgICAgIyBUQ00gPSA8MCwgMT4KKyAgICAgICAgICAgIEFSQ0ggICAgICA/PSBJTUMKKyAgICAgICAgICAgIFZFQ1RfSVJRICA/PSAwCisgICAgICAgICAgICBJUElDICAgICAgPz0gMAorICAgICAgICAgICAgVENNICAgICAgID89IDAKKyAgICAgICAgICAgIFNJTV9DRkdfREVGICA9IFlDUjFfQ0ZHXyQoQ0ZHKQorICAgICAgICBlbmRpZgorICAgIGVuZGlmCitlbmRpZgorCisjIGV4cG9ydCBhbGwgb3ZlcnJpZGVkIHZhcmlhYmxlcworZXhwb3J0IEFSQ0gKK2V4cG9ydCBWRUNUX0lSUQorZXhwb3J0IElQSUMKK2V4cG9ydCBUQ00KK2V4cG9ydCBTSU1fQ0ZHX0RFRgorCitBUkNIX2xvd2VyY2FzZSA9ICQoc2hlbGwgZWNobyAkKEFSQ0gpIHwgdHIgQS1aIGEteikKK0JVU19sb3dlcmNhc2UgID0gJChzaGVsbCBlY2hvICQoQlVTKSAgfCB0ciBBLVogYS16KQorCitpZmVxICgkKEFSQ0hfbG93ZXJjYXNlKSwpCisgICAgQVJDSF90bXAgPSBpbWMKK2Vsc2UKKyAgICBpZm5lcSAoLCQoZmluZHN0cmluZyBlLCQoQVJDSF9sb3dlcmNhc2UpKSkKKyAgICAgICAgQVJDSF90bXAgICArPSBlCisgICAgICAgIEVYVF9DRkxBR1MgKz0gLURfX1JWRV9FWFQKKyAgICBlbHNlCisgICAgICAgIEFSQ0hfdG1wICAgKz0gaQorICAgIGVuZGlmCisgICAgaWZuZXEgKCwkKGZpbmRzdHJpbmcgbSwkKEFSQ0hfbG93ZXJjYXNlKSkpCisgICAgICAgIEFSQ0hfdG1wICAgOj0gJChBUkNIX3RtcCltCisgICAgZW5kaWYKKyAgICBpZm5lcSAoLCQoZmluZHN0cmluZyBjLCQoQVJDSF9sb3dlcmNhc2UpKSkKKyAgICAgICAgQVJDSF90bXAgICA6PSAkKEFSQ0hfdG1wKWMKKyAgICAgICAgRVhUX0NGTEFHUyArPSAtRF9fUlZDX0VYVAorICAgIGVuZGlmCitlbmRpZgorCitvdmVycmlkZSBBUkNIPSQoQVJDSF90bXApCisKKyMgVXNlIHRoaXMgcGFyYW1ldGVyIHRvIGVuYWJsZSB0cmFjZWxvZworVFJBQ0UgPz0gMAorCitpZmVxICgkKFRSQUNFKSwgMSkKKyAgICBleHBvcnQgU0lNX1RSQUNFX0RFRiA9IFlDUjFfVFJBQ0VfTE9HX0VOCitlbHNlCisgICAgZXhwb3J0IFNJTV9UUkFDRV9ERUYgPSBZQ1IxX1RSQUNFX0xPR19ESVMKK2VuZGlmCisKKworIyBVc2UgdGhpcyBwYXJhbWV0ZXIgdG8gcGFzcyBhZGRpdGlvbmFsIG9wdGlvbnMgZm9yIHNpbXVsYXRpb24gYnVpbGQgY29tbWFuZAorU0lNX0JVSUxEX09QVFMgPz0KKworIyBVc2UgdGhpcyBwYXJhbWV0ZXIgdG8gc2V0IHRoZSBsaXN0IG9mIHRlc3RzIHRvIHJ1bgorIyBUQVJHRVRTID0gPHJpc2N2X2lzYSwgcmlzY3ZfY29tcGxpYW5jZSwgY29yZW1hcmssIGRocnlzdG9uZTIxLCBoZWxsbywgaXNyX3NhbXBsZT4KK2V4cG9ydCBUQVJHRVRTIDo9CisKKworZXhwb3J0IEFCSSAgID89IGlscDMyCisjIFRlc3RiZW5jaCBtZW1vcnkgZGVsYXkgcGF0dGVybnNcCisgIChGRkZGRkZGRiAtIG5vIGRlbGF5LCAwMDAwMDAwMCAtIHJhbmRvbSBkZWxheSwgMDAwMDAwMDEgLSBtYXggZGVsYXkpCitpbWVtX3BhdHRlcm4gPz0gRkZGRkZGRkYKK2RtZW1fcGF0dGVybiA/PSBGRkZGRkZGRgorCitWQ1NfT1BUUyAgICAgICA/PQorTU9ERUxTSU1fT1BUUyAgPz0KK05DU0lNX09QVFMgICAgID89CitWRVJJTEFUT1JfT1BUUyA/PQorCitjdXJyZW50X2dvYWwgOj0gJChNQUtFQ01ER09BTFM6cnVuXyU9JSkKK2lmZXEgKCQoY3VycmVudF9nb2FsKSwpCisgICAgY3VycmVudF9nb2FsIDo9IGl2ZXJpbG9nCitlbmRpZgorCisKK2V4cG9ydCByb290X2RpciA6PSAkKHNoZWxsIHB3ZCkKK2V4cG9ydCBibGRfZGlyICA6PSAkKHJvb3RfZGlyKS9idWlsZC8kKGN1cnJlbnRfZ29hbClfJChCVVMpXyQoQ0ZHKV8kKEFSQ0gpX0lQSUNfJChJUElDKV9UQ01fJChUQ00pX1ZJUlFfJChWRUNUX0lSUSlfVFJBQ0VfJChUUkFDRSkKKworIyMgQ2FyYXZlbCBQb2ludGVycyByZWxhdGVkIHRvIGJ1aWxkIGRpcmVjdG9yeQorQ0FSQVZFTF9ST09UID89ICQocm9vdF9kaXIpLy4uLy4uLy4uL2NhcmF2ZWwKK0NBUkFWRUxfUEFUSCA/PSAkKENBUkFWRUxfUk9PVCkKK0NBUkFWRUxfRklSTVdBUkVfUEFUSCA9ICQoQ0FSQVZFTF9QQVRIKS92ZXJpbG9nL2R2L2NhcmF2ZWwKK0NBUkFWRUxfVkVSSUxPR19QQVRIICA9ICQoQ0FSQVZFTF9QQVRIKS92ZXJpbG9nCitDQVJBVkVMX1JUTF9QQVRIID0gJChDQVJBVkVMX1ZFUklMT0dfUEFUSCkvcnRsCitDQVJBVkVMX0JFSEFWSU9VUkFMX01PREVMUyA9ICQoQ0FSQVZFTF9WRVJJTE9HX1BBVEgpL2R2L2NhcmF2ZWwKKworCisjIyBVc2VyIFByb2plY3QgUG9pbnRlcnMKK1VQUkpfVkVSSUxPR19QQVRIID89ICQocm9vdF9kaXIpLy4uLy4uLy4uL3Zlcmlsb2cKK1VQUkpfVEVTVFNfUEFUSCA9ICQocm9vdF9kaXIpCitVUFJKX1JUTF9QQVRIID0gJChVUFJKX1ZFUklMT0dfUEFUSCkvcnRsCitVUFJKX0dMX1BBVEggPSAkKFVQUkpfVkVSSUxPR19QQVRIKS9nbAorVVBSSl9CRUhBVklPVVJBTF9NT0RFTFMgPSAkKHJvb3RfZGlyKS8uLi9tb2RlbAorVVBSSl9CRUhBVklPVVJBTF9BR0VOVFMgPSAkKHJvb3RfZGlyKS8uLi9hZ2VudHMKK1VQUkpfSU5DTFVERV9QQVRIMSA9ICQoVVBSSl9SVExfUEFUSCkveWlmaXZlL3ljcjFjL3NyYy9pbmNsdWRlcworVVBSSl9JTkNMVURFX1BBVEgyID0gJChVUFJKX1JUTF9QQVRIKS9zZHJhbV9jdHJsL3NyYy9kZWZzCitVUFJKX0lOQ0xVREVfUEFUSDMgPSAkKFVQUkpfUlRMX1BBVEgpL2kyY20vc3JjL2luY2x1ZGVzCitVUFJKX0lOQ0xVREVfUEFUSDQgPSAkKFVQUkpfUlRMX1BBVEgpL3VzYjFfaG9zdC9zcmMvaW5jbHVkZXMKK1VQUkpfSU5DTFVERV9QQVRINSA9ICQoVVBSSl9SVExfUEFUSCkvbWJpc3QvaW5jbHVkZQorCitzdl9saXN0ICAgICAgICAgICAgPSAuLi8uLi91c2VyX3Jpc2NfcmVncmVzc190Yi52Cit0b3BfbW9kdWxlICAgICAgICAgPSB1c2VyX3Jpc2NfcmVncmVzc190YgorCisjIFRCIFBhdGhzCitleHBvcnQgc2ltX2RpciAgOj0gJChVUFJKX1RFU1RTX1BBVEgpCitleHBvcnQgdHN0X2RpciAgOj0gJChzaW1fZGlyKS90ZXN0cworZXhwb3J0IGluY19kaXIgIDo9ICQoVVBSSl9WRVJJTE9HX1BBVEgpL2R2L2Zpcm13YXJlCisKK3Rlc3RfcmVzdWx0cyA6PSAkKGJsZF9kaXIpL3Rlc3RfcmVzdWx0cy50eHQKK3Rlc3RfaW5mbyAgICA6PSAkKGJsZF9kaXIpL3Rlc3RfaW5mbworc2ltX3Jlc3VsdHMgIDo9ICQoYmxkX2Rpcikvc2ltX3Jlc3VsdHMudHh0CisKK3RvZG9fbGlzdCAgICA6PSAkKGJsZF9kaXIpL3RvZG8udHh0CisKKyMgRW52aXJvbm1lbnQKK2V4cG9ydCBDUk9TU19QUkVGSVggID89IHJpc2N2NjQtdW5rbm93bi1lbGYtCitleHBvcnQgUklTQ1ZfR0NDICAgICA/PSAkKENST1NTX1BSRUZJWClnY2MKK2V4cG9ydCBSSVNDVl9PQkpEVU1QID89ICQoQ1JPU1NfUFJFRklYKW9iamR1bXAgLUQKK2V4cG9ydCBSSVNDVl9PQkpDT1BZID89ICQoQ1JPU1NfUFJFRklYKW9iamNvcHkgLU8gdmVyaWxvZworZXhwb3J0IFJJU0NWX1JPTV9PQkpDT1BZID89ICQoQ1JPU1NfUFJFRklYKW9iamNvcHkgLWogLnRleHQuaW5pdCAtaiAudGV4dCAtaiAucm9kYXRhIC1qIC5yb2RhdGEuc3RyMS40IC1PIHZlcmlsb2cKKyNTZXBlcmF0ZSB0aGUgUkFNIGNvbnRlbnQgYW5kIHdyaXRlIG91dCBpbiAzMmJpdCBMaXR0bGUgZW5kaWFuIGZvcm1hdCB0byBsb2FkIGl0IHRvIFRDTSBNZW1vcnkKKyNleHBvcnQgUklTQ1ZfUkFNX09CSkNPUFkgPz0gJChDUk9TU19QUkVGSVgpb2JqY29weSAtUiAudGV4dC5pbml0IC1SIC50ZXh0IC1SIC5yb2RhdGEgLVIgLnJvZGF0YS5zdHIxLjQgLVIgLnJpc2N2LmF0dHJpYnV0ZXMgLVIgLmNvbW1lbnQgLVIgLmRlYnVnX2FiYnJldiAtUiAuZGVidWdfbG9jIC1SIC5kZWJ1Z19zdHIgLU8gdmVyaWxvZyAtLXZlcmlsb2ctZGF0YS13aWR0aD00IC0tcmV2ZXJzZS1ieXRlcz00CitleHBvcnQgUklTQ1ZfUkFNX09CSkNPUFkgPz0gJChDUk9TU19QUkVGSVgpb2JqY29weSAtUiAudGV4dC5pbml0IC1SIC50ZXh0IC1SIC5yb2RhdGEgLVIgLnJvZGF0YS5zdHIxLjQgLU8gdmVyaWxvZworZXhwb3J0IFJJU0NWX1JFQURFTEYgPz0gJChDUk9TU19QUkVGSVgpcmVhZGVsZiAtcworCitpZm5lcSAoLCQoZmluZHN0cmluZyBlLCQoQVJDSF9sb3dlcmNhc2UpKSkKKyMgVGVzdHMgY2FuIGJlIGNvbXBpbGVkIGZvciBSVkUgb25seSBpZiBnY2MgdmVyc2lvbiA4LjAuMCBvciBoaWdoZXIKKyAgICBHQ0NWRVJTSU9OR1Q3IDo9ICQoc2hlbGwgZXhwciBgJChSSVNDVl9HQ0MpIC1kdW1wZnVsbHZlcnNpb24gfCBjdXQgLWYxIC1kJy4nYCBcPiA3KQorICAgIGlmZXEgIiQoR0NDVkVSU0lPTkdUNykiICIxIgorICAgICAgICBBQkkgOj0gaWxwMzJlCisgICAgZW5kaWYKK2VuZGlmCisKKyMtLQoraWZlcSAoLCQoZmluZHN0cmluZyBlLCQoQVJDSF9sb3dlcmNhc2UpKSkKKwkjIFRoZXNlIHRlc3RzIGNhbm5vdCBiZSBjb21waWxlZCBmb3IgUlZFCisJIyBDb21tZW50IHRoaXMgdGFyZ2V0IGlmIHlvdSBkb24ndCB3YW50IHRvIHJ1biB0aGUgcmlzY3ZfaXNhCisJVEFSR0VUUyArPSByaXNjdl9pc2EKKworCSMgQ29tbWVudCB0aGlzIHRhcmdldCBpZiB5b3UgZG9uJ3Qgd2FudCB0byBydW4gdGhlIHJpc2N2X2NvbXBsaWFuY2UKKwlUQVJHRVRTICs9IHJpc2N2X2NvbXBsaWFuY2UKK2VuZGlmCisKKyMgQ29tbWVudCB0aGlzIHRhcmdldCBpZiB5b3UgZG9uJ3Qgd2FudCB0byBydW4gdGhlIGlzcl9zYW1wbGUKK1RBUkdFVFMgKz0gaXNyX3NhbXBsZQorCisjIENvbW1lbnQgdGhpcyB0YXJnZXQgaWYgeW91IGRvbid0IHdhbnQgdG8gcnVuIHRoZSBjb3JlbWFyaworVEFSR0VUUyArPSBjb3JlbWFyaworCisjIENvbW1lbnQgdGhpcyB0YXJnZXQgaWYgeW91IGRvbid0IHdhbnQgdG8gcnVuIHRoZSBkaHJ5c3RvbmUKK1RBUkdFVFMgKz0gZGhyeXN0b25lMjEKKworIyBDb21tZW50IHRoaXMgdGFyZ2V0IGlmIHlvdSBkb24ndCB3YW50IHRvIHJ1biB0aGUgaGVsbG8gdGVzdAorVEFSR0VUUyArPSBoZWxsbworCisKKyMgVGFyZ2V0cworLlBIT05ZOiB0ZXN0cyBydW5faXZlcmlsb2cgcnVuX2l2ZXJpbG9nX3dmIHJ1bl9tb2RlbHNpbSBydW5fbW9kZWxzaW1fd2xmIHJ1bl92Y3MgcnVuX25jc2ltIHJ1bl92ZXJpbGF0b3IgcnVuX3ZlcmlsYXRvcl93ZgorCitkZWZhdWx0OiBjbGVhbl90ZXN0X2xpc3QgcnVuX2l2ZXJpbG9nCisKK2NsZWFuX3Rlc3RfbGlzdDoKKwlybSAtZiAkKHRlc3RfaW5mbykKKworZWNob19vdXQ6IHRlc3RzCisJQGVjaG8gIiAgICAgICAgICAgICAgICAgICAgICAgICAgVGVzdCAgICAgICAgICAgICAgIHwgYnVpbGQgfCBzaW11bGF0aW9uICIgOworCUBlY2hvICIkJChjYXQgJCh0ZXN0X3Jlc3VsdHMpKSIKKwordGVzdHM6ICQoVEFSR0VUUykKKworJCh0ZXN0X2luZm8pOiBjbGVhbl9oZXggdGVzdHMKKwljZCAkKGJsZF9kaXIpCisKK2lzcl9zYW1wbGU6IHwgJChibGRfZGlyKQorCSQoTUFLRSkgLUMgJCh0c3RfZGlyKS9pc3Jfc2FtcGxlIEFSQ0g9JChBUkNIKSBJUElDPSQoSVBJQykgVkVDVF9JUlE9JChWRUNUX0lSUSkKKworZGhyeXN0b25lMjE6IHwgJChibGRfZGlyKQorCSQoTUFLRSkgLUMgJCh0c3RfZGlyKS9iZW5jaG1hcmtzL2RocnlzdG9uZTIxIEVYVF9DRkxBR1M9IiQoRVhUX0NGTEFHUykiIEFSQ0g9JChBUkNIKQorCitjb3JlbWFyazogfCAkKGJsZF9kaXIpCisJQGVjaG8gImNvcmUgbWFya3MiCisJJChNQUtFKSAtQyAkKHRzdF9kaXIpL2JlbmNobWFya3MvY29yZW1hcmsgRVhUX0NGTEFHUz0iJChFWFRfQ0ZMQUdTKSIgQVJDSD0kKEFSQ0gpCisKK3Jpc2N2X2lzYTogfCAkKGJsZF9kaXIpCisJJChNQUtFKSAtQyAkKHRzdF9kaXIpL3Jpc2N2X2lzYSBBUkNIPSQoQVJDSCkKKworcmlzY3ZfY29tcGxpYW5jZTogfCAkKGJsZF9kaXIpCisJJChNQUtFKSAtQyAkKHRzdF9kaXIpL3Jpc2N2X2NvbXBsaWFuY2UgQVJDSD0kKEFSQ0gpCisKK2hlbGxvOiB8ICQoYmxkX2RpcikKKwktJChNQUtFKSAtQyAkKHRzdF9kaXIpL2hlbGxvIEVYVF9DRkxBR1M9IiQoRVhUX0NGTEFHUykiIEFSQ0g9JChBUkNIKQorCit0ZXN0OiB8ICQoYmxkX2RpcikKKwktJChNQUtFKSAtQyAkKHRzdF9kaXIpL3Rlc3QgRVhUX0NGTEFHUz0iJChFWFRfQ0ZMQUdTKSIgQVJDSD0kKEFSQ0gpCisKK2NsZWFuX2hleDogfCAkKGJsZF9kaXIpCisJJChSTSkgJChibGRfZGlyKS8qLmhleAorCiskKGJsZF9kaXIpOgorCW1rZGlyIC1wICQoYmxkX2RpcikKKworcnVuX3ZjczogJCh0ZXN0X2luZm8pCisJJChNQUtFKSAtQyAkKHJvb3RfZGlyKS9zaW0gYnVpbGRfdmNzIFNJTV9DRkdfREVGPSQoU0lNX0NGR19ERUYpIFNJTV9UUkFDRV9ERUY9JChTSU1fVFJBQ0VfREVGKSBTSU1fQlVJTERfT1BUUz0kKFNJTV9CVUlMRF9PUFRTKTsKKwlwcmludGYgIiIgPiAkKHRlc3RfcmVzdWx0cyk7CisJY2QgJChibGRfZGlyKTsgXAorCSQoYmxkX2Rpcikvc2ltdiAgLVYgXAorCSt0ZXN0X2luZm89JCh0ZXN0X2luZm8pIFwKKwkrdGVzdF9yZXN1bHRzPSQodGVzdF9yZXN1bHRzKSBcCisJK2ltZW1fcGF0dGVybj0kKGltZW1fcGF0dGVybikgXAorCStkbWVtX3BhdHRlcm49JChkbWVtX3BhdHRlcm4pIFwKKwkkKFZDU19PUFRTKSB8IHRlZSAkKHNpbV9yZXN1bHRzKSAgO1wKKwlwcmludGYgIiAgICAgICAgICAgICAgICAgICAgICAgICAgVGVzdCAgICAgICAgICAgICAgIHwgYnVpbGQgfCBzaW11bGF0aW9uIFxuIiA7IFwKKwlwcmludGYgIiQkKGNhdCAkKHRlc3RfcmVzdWx0cykpIFxuIgorcnVuX21vZGVsc2ltOiAkKHRlc3RfaW5mbykKKwkkKE1BS0UpIC1DICQocm9vdF9kaXIpL3NpbSBidWlsZF9tb2RlbHNpbSBTSU1fQ0ZHX0RFRj0kKFNJTV9DRkdfREVGKSBTSU1fVFJBQ0VfREVGPSQoU0lNX1RSQUNFX0RFRikgU0lNX0JVSUxEX09QVFM9JChTSU1fQlVJTERfT1BUUyk7IFwKKwlwcmludGYgIiIgPiAkKHRlc3RfcmVzdWx0cyk7IFwKKwljZCAkKGJsZF9kaXIpOyBcCisJdnNpbSAtYyAtZG8gInJ1biAtYWxsIiArbm93YXJuMzY5MSBcCisJK3Rlc3RfaW5mbz0kKHRlc3RfaW5mbykgXAorCSt0ZXN0X3Jlc3VsdHM9JCh0ZXN0X3Jlc3VsdHMpIFwKKwkraW1lbV9wYXR0ZXJuPSQoaW1lbV9wYXR0ZXJuKSBcCisJK2RtZW1fcGF0dGVybj0kKGRtZW1fcGF0dGVybikgXAorCXdvcmsuJCh0b3BfbW9kdWxlKSBcCisJJChNT0RFTFNJTV9PUFRTKSB8IHRlZSAkKHNpbV9yZXN1bHRzKSAgO1wKKwlwcmludGYgIlNpbXVsYXRpb24gcGVyZm9ybWVkIG9uICQkKHZzaW0gLXZlcnNpb24pIFxuIiA7XAorCXByaW50ZiAiICAgICAgICAgICAgICAgICAgICAgICAgICBUZXN0ICAgICAgICAgICAgICAgfCBidWlsZCB8IHNpbXVsYXRpb24gXG4iIDsgXAorCXByaW50ZiAiJCQoY2F0ICQodGVzdF9yZXN1bHRzKSkgXG4iCisKK3J1bl9pdmVyaWxvZzogJCh0ZXN0X2luZm8pCisJY2QgJChibGRfZGlyKTsgXAorCWl2ZXJpbG9nIC1nMjAwNS1zdiAtREZVTkNUSU9OQUwgLURTSU0gLUkgJChQREtfUEFUSCkgXAorCS1JICQoQ0FSQVZFTF9CRUhBVklPVVJBTF9NT0RFTFMpIC1JICQoQ0FSQVZFTF9SVExfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9NT0RFTFMpICAgIC1JICQoVVBSSl9SVExfUEFUSCkgLUkgJChVUFJKX1ZFUklMT0dfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9BR0VOVFMpICAgIFwKKwktSSAkKFVQUkpfSU5DTFVERV9QQVRIMSkgICAgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDIpIC1JICQoVVBSSl9JTkNMVURFX1BBVEgzKSBcCisJLUkgJChVUFJKX0lOQ0xVREVfUEFUSDQpIC1JICQoVVBSSl9JTkNMVURFX1BBVEg1KSAtSSAkKFVQUkpfVEVTVFNfUEFUSCkgXAorCSQoc3ZfbGlzdCkgXAorCS1vICQodG9wX21vZHVsZSkudnZwOyBcCisJcHJpbnRmICIiID4gJCh0ZXN0X3Jlc3VsdHMpOyBcCisgICAgICAgIGl2ZXJpbG9nLXZwaSAuLi8uLi8uLi92cGkvc3lzdGVtL3N5c3RlbS5jOyBcCisJdnZwICAtTS4gLW1zeXN0ZW0gICQodG9wX21vZHVsZSkudnZwIFwKKwkrdGVzdF9pbmZvPSQodGVzdF9pbmZvKSBcCisJK3Rlc3RfcmVzdWx0cz0kKHRlc3RfcmVzdWx0cykgXAorCXwgdGVlICQoc2ltX3Jlc3VsdHMpICA7XAorCXByaW50ZiAiU2ltdWxhdGlvbiBwZXJmb3JtZWQgb24gJCQodnZwIC1WKSBcbiIgO1wKKwlwcmludGYgIiAgICAgICAgICAgICAgICAgICAgICAgICAgVGVzdCAgICAgICAgICAgICAgIHwgYnVpbGQgfCBzaW11bGF0aW9uIFxuIiA7IFwKKwlwcmludGYgIiQkKGNhdCAkKHRlc3RfcmVzdWx0cykpIFxuIgorCitydW5faXZlcmlsb2dfd2Y6ICQodGVzdF9pbmZvKQorCWNkICQoYmxkX2Rpcik7IFwKKwlpdmVyaWxvZyAtZzIwMDUtc3YgLURXRkRVTVAgLURGVU5DVElPTkFMIC1EU0lNIC1JICQoUERLX1BBVEgpIFwKKwktSSAkKENBUkFWRUxfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSAkKENBUkFWRUxfUlRMX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfTU9ERUxTKSAgICAtSSAkKFVQUkpfUlRMX1BBVEgpIC1JICQoVVBSSl9WRVJJTE9HX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfQUdFTlRTKSAgICBcCisJLUkgJChVUFJKX0lOQ0xVREVfUEFUSDEpICAgIC1JICQoVVBSSl9JTkNMVURFX1BBVEgyKSAtSSAkKFVQUkpfSU5DTFVERV9QQVRIMykgXAorCS1JICQoVVBSSl9JTkNMVURFX1BBVEg0KSAtSSAkKFVQUkpfSU5DTFVERV9QQVRINSkgLUkgJChVUFJKX1RFU1RTX1BBVEgpIFwKKwkkKHN2X2xpc3QpIFwKKwktbyAkKHRvcF9tb2R1bGUpLnZ2cDsgXAorCXByaW50ZiAiIiA+ICQodGVzdF9yZXN1bHRzKTsgXAorICAgICAgICBpdmVyaWxvZy12cGkgLi4vLi4vLi4vdnBpL3N5c3RlbS9zeXN0ZW0uYzsgXAorCXZ2cCAgLU0uIC1tc3lzdGVtICAkKHRvcF9tb2R1bGUpLnZ2cCBcCisJK3Rlc3RfaW5mbz0kKHRlc3RfaW5mbykgXAorCSt0ZXN0X3Jlc3VsdHM9JCh0ZXN0X3Jlc3VsdHMpIFwKKwl8IHRlZSAkKHNpbV9yZXN1bHRzKSAgO1wKKwlwcmludGYgIlNpbXVsYXRpb24gcGVyZm9ybWVkIG9uICQkKHZ2cCAtVikgXG4iIDtcCisJcHJpbnRmICIgICAgICAgICAgICAgICAgICAgICAgICAgIFRlc3QgICAgICAgICAgICAgICB8IGJ1aWxkIHwgc2ltdWxhdGlvbiBcbiIgOyBcCisJcHJpbnRmICIkJChjYXQgJCh0ZXN0X3Jlc3VsdHMpKSBcbiIKKworcnVuX21vZGVsc2ltX3dsZjogJCh0ZXN0X2luZm8pCisJJChNQUtFKSAtQyAkKHJvb3RfZGlyKS9zaW0gYnVpbGRfbW9kZWxzaW1fd2xmIFNJTV9DRkdfREVGPSQoU0lNX0NGR19ERUYpIFNJTV9UUkFDRV9ERUY9JChTSU1fVFJBQ0VfREVGKSBTSU1fQlVJTERfT1BUUz0kKFNJTV9CVUlMRF9PUFRTKTsgXAorCXByaW50ZiAiIiA+ICQodGVzdF9yZXN1bHRzKTsgXAorCWNkICQoYmxkX2Rpcik7IFwKKwl2c2ltIC1jIC1kbyAicnVuIC1hbGwiICtub3dhcm4zNjkxIFwKKwkrdGVzdF9pbmZvPSQodGVzdF9pbmZvKSBcCisJK3Rlc3RfcmVzdWx0cz0kKHRlc3RfcmVzdWx0cykgXAorCStpbWVtX3BhdHRlcm49JChpbWVtX3BhdHRlcm4pIFwKKwkrZG1lbV9wYXR0ZXJuPSQoZG1lbV9wYXR0ZXJuKSBcCisJd29yay4kKHRvcF9tb2R1bGUpIFwKKwkkKE1PREVMU0lNX09QVFMpIHwgdGVlICQoc2ltX3Jlc3VsdHMpICA7XAorCXByaW50ZiAiU2ltdWxhdGlvbiBwZXJmb3JtZWQgb24gJCQodnNpbSAtdmVyc2lvbikgXG4iIDtcCisJcHJpbnRmICIgICAgICAgICAgICAgICAgICAgICAgICAgIFRlc3QgICAgICAgICAgICAgICB8IGJ1aWxkIHwgc2ltdWxhdGlvbiBcbiIgOyBcCisJcHJpbnRmICIkJChjYXQgJCh0ZXN0X3Jlc3VsdHMpKSBcbiIKK3J1bl9uY3NpbTogJCh0ZXN0X2luZm8pCisJJChNQUtFKSAtQyAkKHJvb3RfZGlyKS9zaW0gYnVpbGRfbmNzaW0gU0lNX0NGR19ERUY9JChTSU1fQ0ZHX0RFRikgU0lNX1RSQUNFX0RFRj0kKFNJTV9UUkFDRV9ERUYpIFNJTV9CVUlMRF9PUFRTPSQoU0lNX0JVSUxEX09QVFMpOworCXByaW50ZiAiIiA+ICQodGVzdF9yZXN1bHRzKTsKKwljZCAkKGJsZF9kaXIpOyBcCisJaXJ1biBcCisJLVIgXAorCS02NGJpdCBcCisJK3Rlc3RfaW5mbz0kKHRlc3RfaW5mbykgXAorCSt0ZXN0X3Jlc3VsdHM9JCh0ZXN0X3Jlc3VsdHMpIFwKKwkraW1lbV9wYXR0ZXJuPSQoaW1lbV9wYXR0ZXJuKSBcCisJK2RtZW1fcGF0dGVybj0kKGRtZW1fcGF0dGVybikgXAorCSQoTkNTSU1fT1BUUykgfCB0ZWUgJChzaW1fcmVzdWx0cykgIDtcCisJcHJpbnRmICJTaW11bGF0aW9uIHBlcmZvcm1lZCBvbiAkJChpcnVuIC12ZXJzaW9uKSBcbiIgO1wKKwlwcmludGYgIiAgICAgICAgICAgICAgICAgICAgICAgICAgVGVzdCAgICAgICAgICAgICAgIHwgYnVpbGQgfCBzaW11bGF0aW9uIFxuIiA7IFwKKwlwcmludGYgIiQkKGNhdCAkKHRlc3RfcmVzdWx0cykpIFxuIgorCitydW5fdmVyaWxhdG9yOiAkKHRlc3RfaW5mbykKKwkkKE1BS0UpIC1DICQocm9vdF9kaXIpL3NpbSBidWlsZF92ZXJpbGF0b3IgU0lNX0NGR19ERUY9JChTSU1fQ0ZHX0RFRikgU0lNX1RSQUNFX0RFRj0kKFNJTV9UUkFDRV9ERUYpIFNJTV9CVUlMRF9PUFRTPSQoU0lNX0JVSUxEX09QVFMpOworCXByaW50ZiAiIiA+ICQodGVzdF9yZXN1bHRzKTsKKwljZCAkKGJsZF9kaXIpOyBcCisJZWNobyAkKHRvcF9tb2R1bGUpIHwgdGVlICQoc2ltX3Jlc3VsdHMpOyBcCisJJChibGRfZGlyKS92ZXJpbGF0b3IvViQodG9wX21vZHVsZSkgXAorCSt0ZXN0X2luZm89JCh0ZXN0X2luZm8pIFwKKwkrdGVzdF9yZXN1bHRzPSQodGVzdF9yZXN1bHRzKSBcCisJK2ltZW1fcGF0dGVybj0kKGltZW1fcGF0dGVybikgXAorCStkbWVtX3BhdHRlcm49JChkbWVtX3BhdHRlcm4pIFwKKwkkKFZFUklMQVRPUl9PUFRTKSB8IHRlZSAtYSAkKHNpbV9yZXN1bHRzKSA7XAorCXByaW50ZiAiU2ltdWxhdGlvbiBwZXJmb3JtZWQgb24gJCQodmVyaWxhdG9yIC12ZXJzaW9uKSBcbiIgO1wKKwlwcmludGYgIiAgICAgICAgICAgICAgICAgICAgICAgICAgVGVzdCAgICAgICAgICAgICAgIHwgYnVpbGQgfCBzaW11bGF0aW9uIFxuIiA7IFwKKwlwcmludGYgIiQkKGNhdCAkKHRlc3RfcmVzdWx0cykpIFxuIgorCitydW5fdmVyaWxhdG9yX3dmOiAkKHRlc3RfaW5mbykKKwkkKE1BS0UpIC1DICQocm9vdF9kaXIpL3NpbSBidWlsZF92ZXJpbGF0b3Jfd2YgU0lNX0NGR19ERUY9JChTSU1fQ0ZHX0RFRikgU0lNX1RSQUNFX0RFRj0kKFNJTV9UUkFDRV9ERUYpIFNJTV9CVUlMRF9PUFRTPSQoU0lNX0JVSUxEX09QVFMpOworCXByaW50ZiAiIiA+ICQodGVzdF9yZXN1bHRzKTsKKwljZCAkKGJsZF9kaXIpOyBcCisJZWNobyAkKHRvcF9tb2R1bGUpIHwgdGVlICQoc2ltX3Jlc3VsdHMpOyBcCisJJChibGRfZGlyKS92ZXJpbGF0b3IvViQodG9wX21vZHVsZSkgXAorCSt0ZXN0X2luZm89JCh0ZXN0X2luZm8pIFwKKwkrdGVzdF9yZXN1bHRzPSQodGVzdF9yZXN1bHRzKSBcCisJK2ltZW1fcGF0dGVybj0kKGltZW1fcGF0dGVybikgXAorCStkbWVtX3BhdHRlcm49JChkbWVtX3BhdHRlcm4pIFwKKwkkKFZFUklMQVRPUl9PUFRTKSB8IHRlZSAtYSAkKHNpbV9yZXN1bHRzKSAgO1wKKwlwcmludGYgIlNpbXVsYXRpb24gcGVyZm9ybWVkIG9uICQkKHZlcmlsYXRvciAtdmVyc2lvbikgXG4iIDtcCisJcHJpbnRmICIgICAgICAgICAgICAgICAgICAgICAgICAgIFRlc3QgICAgICAgICAgICAgICB8IGJ1aWxkIHwgc2ltdWxhdGlvbiBcbiIgOyBcCisJcHJpbnRmICIkJChjYXQgJCh0ZXN0X3Jlc3VsdHMpKSBcbiIKK2NsZWFuOiAKKwkkKE1BS0UpIC1DICQodHN0X2RpcikvYmVuY2htYXJrcy9kaHJ5c3RvbmUyMSBjbGVhbgorCSQoTUFLRSkgLUMgJCh0c3RfZGlyKS9yaXNjdl9pc2EgY2xlYW4KKwkkKE1BS0UpIC1DICQodHN0X2RpcikvcmlzY3ZfY29tcGxpYW5jZSBjbGVhbgorCSQoUk0pIC1SICQocm9vdF9kaXIpL2J1aWxkLyoKKwkkKFJNKSAkKHRlc3RfaW5mbykKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy9yaXNjdl9ydW50ZXN0cy5zdiBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy9yaXNjdl9ydW50ZXN0cy5zdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNWMxNGE1Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Jpc2N2X3J1bnRlc3RzLnN2CkBAIC0wLDAgKzEsMzg0IEBACisvLy8gQ29weXJpZ2h0IGJ5IFN5bnRhY29yZSBMTEMgwqkgMjAxNi0yMDIwLiBTZWUgTElDRU5TRSBmb3IgZGV0YWlscworLy8vIEBmaWxlICAgICAgIDxzY3IxX3RvcF90Yl9ydW50ZXN0cy5zdj4KKy8vLyBAYnJpZWYgICAgICBTQ1IxIHRlc3RiZW5jaCBydW4gdGVzdHMKKy8vLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1biB0ZXN0cworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2luaXRpYWwgYmVnaW4KKyAgICAvLyR2YWx1ZSRwbHVzYXJncygiaW1lbV9wYXR0ZXJuPSVoIiwgaW1lbV9yZXFfYWNrX3N0YWxsKTsKKyAgICAvLyR2YWx1ZSRwbHVzYXJncygiZG1lbV9wYXR0ZXJuPSVoIiwgZG1lbV9yZXFfYWNrX3N0YWxsKTsKKworICAgIC8vJGRpc3BsYXkoImltZW1fcGF0dGVybjoleCIsaW1lbV9yZXFfYWNrX3N0YWxsKTsKKyAgICAvLyRkaXNwbGF5KCJkbWVtX3BhdHRlcm46JXgiLGRtZW1fcmVxX2Fja19zdGFsbCk7CitgaWZkZWYgU0lHTkFUVVJFX09VVAorICAgICR2YWx1ZSRwbHVzYXJncygidGVzdF9uYW1lPSVzIiwgc190ZXN0bmFtZSk7CisgICAgYl9zaW5nbGVfcnVuX2ZsYWcgPSAxOworYGVsc2UgLy8gU0lHTkFUVVJFX09VVAorCisgICAgJHZhbHVlJHBsdXNhcmdzKCJ0ZXN0X2luZm89JXMiLCBzX2luZm8pOworICAgICR2YWx1ZSRwbHVzYXJncygidGVzdF9yZXN1bHRzPSVzIiwgc19yZXN1bHRzKTsKKworICAgIGZfaW5mbyAgICAgID0gJGZvcGVuKHNfaW5mbywgInIiKTsKKyAgICBmX3Jlc3VsdHMgICA9ICRmb3BlbihzX3Jlc3VsdHMsICJhIik7CitgZW5kaWYgLy8gU0lHTkFUVVJFX09VVAorCisKKworZW5kCisvKioqCisvLyBEZWJ1ZyBtZXNzYWdlIC0gZGluZXNoIEEKKyBsb2dpYyBbYFNDUjFfRE1FTV9BV0lEVEgtMTowXSAgICAgICAgICAgY29yZTJpbWVtX2FkZHJfb19yOyAgICAgICAgICAgLy8gRE1FTSBhZGRyZXNzCisgbG9naWMgW2BTQ1IxX0RNRU1fQVdJRFRILTE6MF0gICAgICAgICAgIGNvcmUyZG1lbV9hZGRyX29fcjsgICAgICAgICAgIC8vIERNRU0gYWRkcmVzcworIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlMmRtZW1fY21kX29fcjsKKyAKKyBgZGVmaW5lIFJJU0NfQ09SRSAgaV90b3AuaV9jb3JlX3RvcAorIAorIGFsd2F5c0AocG9zZWRnZSBgUklTQ19DT1JFLmNsaykgYmVnaW4KKyAgICAgaWYoYFJJU0NfQ09SRS5pbWVtMmNvcmVfcmVxX2Fja19pICYmIGBSSVNDX0NPUkUuY29yZTJpbWVtX3JlcV9vKQorICAgICAgICAgICBjb3JlMmltZW1fYWRkcl9vX3IgPD0gYFJJU0NfQ09SRS5jb3JlMmltZW1fYWRkcl9vOworIAorICAgICBpZihgUklTQ19DT1JFLmRtZW0yY29yZV9yZXFfYWNrX2kgJiYgYFJJU0NfQ09SRS5jb3JlMmRtZW1fcmVxX28pIGJlZ2luCisgICAgICAgICAgIGNvcmUyZG1lbV9hZGRyX29fciA8PSBgUklTQ19DT1JFLmNvcmUyZG1lbV9hZGRyX287CisgICAgICAgICAgIGNvcmUyZG1lbV9jbWRfb19yICA8PSBgUklTQ19DT1JFLmNvcmUyZG1lbV9jbWRfbzsKKyAgICAgZW5kCisgCisgICAgIGlmKGBSSVNDX0NPUkUuaW1lbTJjb3JlX3Jlc3BfaSAhPTApCisgICAgICAgICAgICRkaXNwbGF5KCJSSVNDVi1ERUJVRyA9PiBJTUVNIEFERFJFU1M6ICV4IFJlYWQgRGF0YSA6ICV4IFJlc29uc2U6ICV4IiwgY29yZTJpbWVtX2FkZHJfb19yLGBSSVNDX0NPUkUuaW1lbTJjb3JlX3JkYXRhX2ksYFJJU0NfQ09SRS5pbWVtMmNvcmVfcmVzcF9pKTsKKyAgICAgaWYoKGBSSVNDX0NPUkUuZG1lbTJjb3JlX3Jlc3BfaSAhPTApICYmIGNvcmUyZG1lbV9jbWRfb19yKQorICAgICAgICAgICAkZGlzcGxheSgiUklTQ1YtREVCVUcgPT4gRE1FTSBBRERSRVNTOiAleCBXcml0ZSBEYXRhOiAleCBSZXNvbnNlOiAleCIsIGNvcmUyZG1lbV9hZGRyX29fcixgUklTQ19DT1JFLmNvcmUyZG1lbV93ZGF0YV9vLGBSSVNDX0NPUkUuZG1lbTJjb3JlX3Jlc3BfaSk7CisgICAgIGlmKChgUklTQ19DT1JFLmRtZW0yY29yZV9yZXNwX2kgIT0wKSAmJiAhY29yZTJkbWVtX2NtZF9vX3IpCisgICAgICAgICAgICRkaXNwbGF5KCJSSVNDVi1ERUJVRyA9PiBETUVNIEFERFJFU1M6ICV4IFJFQUQgRGF0YSA6ICV4IFJlc29uc2U6ICV4IiwgY29yZTJkbWVtX2FkZHJfb19yLGBSSVNDX0NPUkUuZG1lbTJjb3JlX3JkYXRhX2ksYFJJU0NfQ09SRS5kbWVtMmNvcmVfcmVzcF9pKTsKKyBlbmQKKyoqLworLyoqKgorICBsb2dpYyBbMzE6MF0gdGVzdF9jb3VudDsKKyBgZGVmaW5lIFJJU0NfQ09SRSAgdV90b3AudV9yaXNjdl90b3AuaV9jb3JlX3RvcAorIGBkZWZpbmUgUklTQ19FWFUgIHVfdG9wLnVfcmlzY3ZfdG9wLmlfY29yZV90b3AuaV9waXBlX3RvcC5pX3BpcGVfZXh1CisKKyBpbml0aWFsIGJlZ2luCisJIHRlc3RfY291bnQgPSAwOworIGVuZAorCisgCisgYWx3YXlzQChwb3NlZGdlIGBSSVNDX0NPUkUuY2xrKSBiZWdpbgorCSBpZihgUklTQ19FWFUucGNfY3Vycl91cGQpIGJlZ2luCisgICAgICAgICAgICAkZGlzcGxheSgiUklTQ1YtREVCVUcgPT4gQ250OiAleCBQQzogJXgiLCB0ZXN0X2NvdW50LGBSSVNDX0VYVS5wY19jdXJyX2ZmKTsKKyAgICAgICAgICAgICAgIHRlc3RfY291bnQgPD0gdGVzdF9jb3VudCsxOworCSAgZW5kCisgZW5kCisqKiovCisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKSBiZWdpbgorICAgIGJpdCB0ZXN0X3Bhc3M7CisgICAgaW50IHVuc2lnbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZfdGVzdDsKKyAgICBpbnQgdW5zaWduZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgZl90ZXN0X3JhbTsKKyAgICBpZiAodGVzdF9ydW5uaW5nKSBiZWdpbgorICAgICAgICB0ZXN0X3Bhc3MgPSAxOworICAgICAgICByc3RfaW5pdCA8PSAxJ2IwOworCWlmKHVfdG9wLnVfcmlzY3ZfdG9wLmlfY29yZV90b3AuaV9waXBlX3RvcC5pX3BpcGVfZXh1LnBjX2N1cnJfZmYgPT09IDMyJ2h4eHh4X3h4eHgpIGJlZ2luCisJICAgJGRpc3BsYXkoIkVSUk9SOiBDVVJSRU5UIFBDIENvdW50ZXIgU3RhdGUgaXMgS25vd24iKTsKKwkgICAkZmluaXNoOworCWVuZAorICAgICAgICBpZiAoKHVfdG9wLnVfcmlzY3ZfdG9wLmlfY29yZV90b3AuaV9waXBlX3RvcC5pX3BpcGVfZXh1LmV4dTJwaXBlX3BjX2N1cnJfbyA9PSBZQ1IxX1NJTV9FWElUX0FERFIpICYgfnJzdF9pbml0ICYgJnJzdF9jbnQpIGJlZ2luCisKKyAgICAgICAgICAgIGBpZmRlZiBWRVJJTEFUT1IKKyAgICAgICAgICAgICAgICBsb2dpYyBbMjU1OjBdIGZ1bGxfZmlsZW5hbWU7CisgICAgICAgICAgICAgICAgZnVsbF9maWxlbmFtZSA9IHRlc3RfZmlsZTsKKyAgICAgICAgICAgIGBlbHNlIC8vIFZFUklMQVRPUgorICAgICAgICAgICAgICAgIHN0cmluZyBmdWxsX2ZpbGVuYW1lOworICAgICAgICAgICAgICAgIGZ1bGxfZmlsZW5hbWUgPSB0ZXN0X2ZpbGU7CisgICAgICAgICAgICBgZW5kaWYgLy8gVkVSSUxBVE9SCisKKyAgICAgICAgICAgIGlmIChpc19jb21wbGlhbmNlKHRlc3RfZmlsZSkpIGJlZ2luCisgICAgICAgICAgICAgICAgbG9naWMgWzMxOjBdIHRtcHYsIHN0YXJ0LCBzdG9wLCByZWZfZGF0YSwgdGVzdF9kYXRhOworICAgICAgICAgICAgICAgIGludGVnZXIgZmQ7CisgICAgICAgICAgICAgICAgYGlmZGVmIFZFUklMQVRPUgorICAgICAgICAgICAgICAgIGxvZ2ljIFsyMDQ3OjBdIHRtcHN0cjsKKyAgICAgICAgICAgICAgICBgZWxzZSAvLyBWRVJJTEFUT1IKKyAgICAgICAgICAgICAgICBzdHJpbmcgdG1wc3RyOworICAgICAgICAgICAgICAgIGBlbmRpZiAvLyBWRVJJTEFUT1IKKworCSAgICAgICAgLy8gRmx1c2ggdGhlIGNvbnRlbnQgb2YgZGNhY2hlIGZvciBzaWduYXR1cmUgdmFsaWRhdGlvbiBhdCBhcHAKKwkgICAgICAgIC8vIG1lbW9yeQkKKwkgICAgICAgIGZvcmNlIHVfdG9wLnVfcmlzY3ZfdG9wLnVfaW50Zi51X2RjYWNoZS5jZmdfZm9yY2VfZmx1c2ggPSAxJ2IxOworCSAgICAgICAgd2FpdCh1X3RvcC51X3Jpc2N2X3RvcC51X2ludGYudV9kY2FjaGUuZm9yY2VfZmx1c2hfZG9uZSA9PSAxJ2IxKTsKKwkgICAgICAgIHJlbGVhc2UgdV90b3AudV9yaXNjdl90b3AudV9pbnRmLnVfZGNhY2hlLmNmZ19mb3JjZV9mbHVzaDsKKwkgICAgICAgIHJlcGVhdCAoMjAwMCkgQChwb3NlZGdlIGNsb2NrKTsgLy8gd2FpdCBkYXRhIHRvIGZsdXNoIGluIHBpcGUKKwkJJGRpc3BsYXkoIlNUQVRVUzogQ2hlY2tpbmcgQ29tcGxhaW5jZSBUZXN0IFN0YXR1cyAuLi4uICIpOworICAgICAgICAgICAgICAgIHRlc3RfcnVubmluZyA8PSAxJ2IwOworICAgICAgICAgICAgICAgIHRlc3RfcGFzcyA9IDE7CisKKyAgICAgICAgICAgICAgICAkc2Zvcm1hdCh0bXBzdHIsICJyaXNjdjY0LXVua25vd24tZWxmLXJlYWRlbGYgLXMgJXMgfCBncmVwICdiZWdpbl9zaWduYXR1cmVcXHxlbmRfc2lnbmF0dXJlJyB8IGF3ayAne3ByaW50ICQyfScgPiBlbGZpbmZvIiwgZ2V0X2ZpbGVuYW1lKHRlc3RfZmlsZSkpOworICAgICAgICAgICAgICAgIGZkID0gJGZvcGVuKCJzY3JpcHQuc2giLCAidyIpOworICAgICAgICAgICAgICAgIGlmIChmZCA9PSAwKSBiZWdpbgorICAgICAgICAgICAgICAgICAgICAkd3JpdGUoIkNhbid0IG9wZW4gc2NyaXB0LnNoXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkoIkVSUklSOkNhbid0IG9wZW4gc2NyaXB0LnNoXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgdGVzdF9wYXNzID0gMDsKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAkZndyaXRlKGZkLCAiJXMiLCB0bXBzdHIpOworICAgICAgICAgICAgICAgICRmY2xvc2UoZmQpOworCisgICAgICAgICAgICAgICAgJHN5c3RlbSgic2ggc2NyaXB0LnNoIik7CisKKyAgICAgICAgICAgICAgICBmZCA9ICRmb3BlbigiZWxmaW5mbyIsICJyIik7CisgICAgICAgICAgICAgICAgaWYgKGZkID09IDApIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICR3cml0ZSgiQ2FuJ3Qgb3BlbiBlbGZpbmZvXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkoIkVSUk9SOiBDYW4ndCBvcGVuIGVsZmluZm9cbiIpOworICAgICAgICAgICAgICAgICAgICB0ZXN0X3Bhc3MgPSAwOworICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGlmICgkZnNjYW5mKGZkLCIlaFxuJWgiLCBzdGFydCwgc3RvcCkgIT0gMikgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgJHdyaXRlKCJXcm9uZyBlbGZpbmZvIGRhdGFcbiIpOworICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSgiRVJST1I6V3JvbmcgZWxmaW5mbyBkYXRhOiBzdGFydDogJXggc3RvcDogJXhcbiIsc3RhcnQsc3RvcCk7CisgICAgICAgICAgICAgICAgICAgIHRlc3RfcGFzcyA9IDA7CisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgaWYgKHN0YXJ0ID4gc3RvcCkgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgdG1wdiA9IHN0YXJ0OworICAgICAgICAgICAgICAgICAgICBzdGFydCA9IHN0b3A7CisgICAgICAgICAgICAgICAgICAgIHN0b3AgPSB0bXB2OworICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICRmY2xvc2UoZmQpOworCQlzdGFydCA9IHN0YXJ0ICYgMzInaDA3RkZfRkZGRjsKKwkgICAgICAgIHN0b3AgID0gc3RvcCAmIDMyJ2gwN0ZGX0ZGRkY7CisJCSRkaXNwbGF5KCJDb21wbGFpbmNlIFNpZ25hdHVyZSBTdGFydCBBZGRyZXNzOiAleCBFbmQgQWRkcmVzczoleCIsc3RhcnQsc3RvcCk7CisKKwkJLy9pZigoc3RhcnQgJiAzMidoMUZGRikgPiA1MTIpCisJCS8vCSRkaXNwbGF5KCJFUlJPUjogU3RhcnQgYWRkcmVzcyBpcyBtb3JlIHRoYW4gNTEyLCBTdGFydDogJXgiLHN0YXJ0ICYgMzInaDFGRkYpOworCQkvL2lmKChzdG9wICYgMzInaDFGRkYpID4gNTEyKQorCQkvLwkkZGlzcGxheSgiRVJST1I6IFN0b3AgYWRkcmVzcyBpcyBtb3JlIHRoYW4gNTEyLCBTdGFydDogJXgiLHN0b3AgJiAzMidoMUZGRik7CisKKyAgICAgICAgICAgICAgICBgaWZkZWYgU0lHTkFUVVJFX09VVAorCisgICAgICAgICAgICAgICAgICAgICRzZm9ybWF0KHRtcHN0ciwgIiVzLnNpZ25hdHVyZS5vdXRwdXQiLCBzX3Rlc3RuYW1lKTsKK2BpZmRlZiBWRVJJTEFUT1IKKyAgICAgICAgICAgICAgICAgICAgdG1wc3RyID0gcmVtb3ZlX3RyYWlsaW5nX3doaXRlc3BhY2VzKHRtcHN0cik7CitgZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgZmQgPSAkZm9wZW4odG1wc3RyLCAidyIpOworICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKHN0YXJ0ICE9IHN0b3ApKSBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgLy90ZXN0X2RhdGEgPSB1X3RvcC51X3NyYW0wXzJrYi5tZW1bKHN0YXJ0ICYgMzInaDFGRkYpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfZGF0YSA9IHt1X3NyYW0ubWVtb3J5W3N0YXJ0KzNdLCB1X3NyYW0ubWVtb3J5W3N0YXJ0KzJdLCB1X3NyYW0ubWVtb3J5W3N0YXJ0KzFdLCB1X3NyYW0ubWVtb3J5W3N0YXJ0XX07CisgICAgICAgICAgICAgICAgICAgICAgICAkZndyaXRlKGZkLCAiJXgiLCB0ZXN0X2RhdGEpOworICAgICAgICAgICAgICAgICAgICAgICAgJGZ3cml0ZShmZCwgIiVzIiwgIlxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCArPSA0OworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgJGZjbG9zZShmZCk7CisgICAgICAgICAgICAgICAgYGVsc2UgLy9TSUdOQVRVUkVfT1VUCisgICAgICAgICAgICAgICAgICAgICRzZm9ybWF0KHRtcHN0ciwgInJpc2N2X2NvbXBsaWFuY2UvcmVmX2RhdGEvJXMiLCBnZXRfcmVmX2ZpbGVuYW1lKHRlc3RfZmlsZSkpOworYGlmZGVmIFZFUklMQVRPUgorICAgICAgICAgICAgICAgIHRtcHN0ciA9IHJlbW92ZV90cmFpbGluZ193aGl0ZXNwYWNlcyh0bXBzdHIpOworYGVuZGlmCisgICAgICAgICAgICAgICAgICAgIGZkID0gJGZvcGVuKHRtcHN0ciwiciIpOworICAgICAgICAgICAgICAgICAgICBpZiAoZmQgPT0gMCkgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICR3cml0ZSgiQ2FuJ3Qgb3BlbiByZWZlcmVuY2VfZGF0YSBmaWxlOiAlc1xuIiwgdG1wc3RyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5KCJFUlJPUjogQ2FuJ3Qgb3BlbiByZWZlcmVuY2VfZGF0YSBmaWxlOiAlc1xuIiwgdG1wc3RyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfcGFzcyA9IDA7CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICB3aGlsZSAoISRmZW9mKGZkKSAmJiAoc3RhcnQgIT0gc3RvcCkpIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAkZnNjYW5mKGZkLCAiMHglaCxcbiIsIHJlZl9kYXRhKTsKKwkJCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQkJLy8gQXNzdW1lZCBhbGwgc2lnbmF1cmUgYXJlIHdpdGgtaW4gZmlyc3QgNTEyIGxvY2F0aW9uIG9mIG1lbW9yeSwgCisJCQkvLyBvdGhlci13aXNlIG5lZWQgdG8gc3dpdGNoIGJhbmsKKwkJCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCSAgICAgICAgLy8kd3JpdGVtZW1oKCJzcmFtMF9vdXQuaGV4Iix1X3RvcC51X3RzcmFtMF8ya2IubWVtLDAsNTExKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vdGVzdF9kYXRhID0gdV90b3AudV9zcmFtMF8ya2IubWVtWygoc3RhcnQgPj4gMikgJiAzMidoMUZGRildOworICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9kYXRhID0ge3Vfc3JhbS5tZW1vcnlbc3RhcnQrM10sIHVfc3JhbS5tZW1vcnlbc3RhcnQrMl0sIHVfc3JhbS5tZW1vcnlbc3RhcnQrMV0sIHVfc3JhbS5tZW1vcnlbc3RhcnRdfTsKKwkJCS8vJGRpc3BsYXkoIkNvbXBhcmUgQWRkcjogJXggcmVmX2RhdGEgOiAleCwgdGVzdF9kYXRhOiAleCIsc3RhcnQscmVmX2RhdGEsdGVzdF9kYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfcGFzcyAmPSAocmVmX2RhdGEgPT0gdGVzdF9kYXRhKTsKKwkJCWlmKHJlZl9kYXRhICE9IHRlc3RfZGF0YSkKKwkJCSAgICRkaXNwbGF5KCJFUlJPUjogQ29tcGFyZSBBZGRyOiAleCBNZW0gQWRkcjogJXggcmVmX2RhdGEgOiAleCwgdGVzdF9kYXRhOiAleCIsc3RhcnQsc3RhcnQgJiAzMidoMUZGRixyZWZfZGF0YSx0ZXN0X2RhdGEpOworCQkJZWxzZQorCQkJICAgJGRpc3BsYXkoIlNUQVRVUzogQ29tcGFyZSBBZGRyOiAleCBNZW0gQWRkcjogJXggcmVmX2RhdGEgOiAleCIsc3RhcnQsc3RhcnQgJiAzMidoMUZGRixyZWZfZGF0YSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCArPSA0OworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgJGZjbG9zZShmZCk7CisgICAgICAgICAgICAgICAgICAgIHRlc3RzX3RvdGFsICs9IDE7CisgICAgICAgICAgICAgICAgICAgIHRlc3RzX3Bhc3NlZCArPSB0ZXN0X3Bhc3M7CisgICAgICAgICAgICAgICAgICAgIGlmICh0ZXN0X3Bhc3MpIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAkd3JpdGUoIlwwMzNbMDszMm1UZXN0IHBhc3NlZFwwMzNbMG1cbiIpOworICAgICAgICAgICAgICAgICAgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgJHdyaXRlKCJcMDMzWzA7MzFtVGVzdCBmYWlsZWQtMlwwMzNbMG1cbiIpOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBgZW5kaWYgIC8vIFNJR05BVFVSRV9PVVQKKyAgICAgICAgICAgIGVuZCBlbHNlIGJlZ2luIC8vIE5vbiBjb21wbGlhbmNlIG1vZGUKKyAgICAgICAgICAgICAgICB0ZXN0X3J1bm5pbmcgPD0gMSdiMDsKKwkJaWYodV90b3AudV9yaXNjdl90b3AuaV9jb3JlX3RvcC5pX3BpcGVfdG9wLmlfcGlwZV9tcHJmLm1wcmZfaW50WzEwXSAhPSAwKQorCQkgICAkZGlzcGxheSgiRVJST1I6IG1wcmZfaW50WzEwXTogJXggbm90IHplcm8iLHVfdG9wLnVfcmlzY3ZfdG9wLmlfY29yZV90b3AuaV9waXBlX3RvcC5pX3BpcGVfbXByZi5tcHJmX2ludFsxMF0pOworCisgICAgICAgICAgICAgICAgdGVzdF9wYXNzID0gKHVfdG9wLnVfcmlzY3ZfdG9wLmlfY29yZV90b3AuaV9waXBlX3RvcC5pX3BpcGVfbXByZi5tcHJmX2ludFsxMF0gPT0gMCk7CisgICAgICAgICAgICAgICAgdGVzdHNfdG90YWwgICAgICs9IDE7CisgICAgICAgICAgICAgICAgdGVzdHNfcGFzc2VkICAgICs9IHRlc3RfcGFzczsKKyAgICAgICAgICAgICAgICBgaWZuZGVmIFNJR05BVFVSRV9PVVQKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRlc3RfcGFzcykgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICR3cml0ZSgiXDAzM1swOzMybVRlc3QgcGFzc2VkXDAzM1swbVxuIik7CisgICAgICAgICAgICAgICAgICAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICAkd3JpdGUoIlwwMzNbMDszMW1UZXN0IGZhaWxlZFwwMzNbMG1cbiIpOworICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBgZW5kaWYgLy9TSUdOQVRVUkVfT1VUCisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICRmd3JpdGUoZl9yZXN1bHRzLCAiJXNcdFx0JXNcdCVzXG4iLCB0ZXN0X2ZpbGUsICJPSyIgLCAodGVzdF9wYXNzID8gIlBBU1MiIDogIl9fRkFJTCIpKTsKKyAgICAgICAgZW5kCisgICAgZW5kIGVsc2UgYmVnaW4KK2BpZmRlZiBWRVJJTEFUT1IKKyAgICBgaWZkZWYgU0lHTkFUVVJFX09VVAorICAgICAgICBpZiAoKHNfdGVzdG5hbWUubGVuKCkgIT0gMCkgJiYgKGJfc2luZ2xlX3J1bl9mbGFnKSkgYmVnaW4KKyAgICAgICAgICAgICRzZm9ybWF0KHRlc3RfZmlsZSwgIiVzLmJpbiIsIHNfdGVzdG5hbWUpOworICAgIGBlbHNlIC8vU0lHTkFUVVJFX09VVAorICAgICAgICBpZiAoJGZnZXRzKHRlc3RfZmlsZSxmX2luZm8pKSBiZWdpbgorICAgICAgICAgICAgdGVzdF9maWxlID0gdGVzdF9maWxlID4+IDg7IC8vIDwgUmVtb3ZpbmcgdHJhaWxpbmcgTEYgc3ltYm9sICgnXG4nKQorICAgIGBlbmRpZiAvL1NJR05BVFVSRV9PVVQKK2BlbHNlIC8vIFZFUklMQVRPUgorICAgICAgICBpZiAoISRmZW9mKGZfaW5mbykpIGJlZ2luCisgICAgICAgICAgICAkZnNjYW5mKGZfaW5mbywgIiVzXG4iLCB0ZXN0X2ZpbGUpOworYGVuZGlmIC8vIFZFUklMQVRPUgorICAgICAgICAgICAgZl90ZXN0ID0gJGZvcGVuKHRlc3RfZmlsZSwiciIpOworICAgICAgICAgICAgaWYgKGZfdGVzdCAhPSAwKSBiZWdpbgorICAgICAgICAgICAgLy8gTGF1bmNoIG5ldyB0ZXN0CisgICAgICAgICAgICAgICAgYGlmZGVmIFlDUjFfVFJBQ0VfTE9HX0VOCisgICAgICAgICAgICAgICAgICAgIHVfdG9wLnVfcmlzY3ZfdG9wLmlfY29yZV90b3AuaV9waXBlX3RvcC5pX3RyYWNlbG9nLnRlc3RfbmFtZSA9IHRlc3RfZmlsZTsKKyAgICAgICAgICAgICAgICBgZW5kaWYgLy8gU0NSMV9UUkFDRV9MT0dfRU4KKyAgICAgICAgICAgICAgICAvL2lfbWVtb3J5X3RiLnRlc3RfZmlsZSA9IHRlc3RfZmlsZTsKKyAgICAgICAgICAgICAgICAvL2lfbWVtb3J5X3RiLnRlc3RfZmlsZV9pbml0ID0gMSdiMTsKKyAgICAgICAgICAgICAgICBgaWZuZGVmIFNJR05BVFVSRV9PVVQKKyAgICAgICAgICAgICAgICAgICAgJHdyaXRlKCJcMDMzWzA7MzRtLS0tVGVzdDogJXNcMDMzWzBtXG4iLCB0ZXN0X2ZpbGUpOworICAgICAgICAgICAgICAgIGBlbmRpZiAvL1NJR05BVFVSRV9PVVQKKyAgICAgICAgICAgICAgICB0ZXN0X3J1bm5pbmcgPD0gMSdiMTsKKyAgICAgICAgICAgICAgICByc3RfaW5pdCA8PSAxJ2IxOworICAgICAgICAgICAgICAgIGBpZmRlZiBTSUdOQVRVUkVfT1VUCisgICAgICAgICAgICAgICAgICAgIGJfc2luZ2xlX3J1bl9mbGFnID0gMDsKKyAgICAgICAgICAgICAgICBgZW5kaWYKKyAgICAgICAgICAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgICAgICAgICAgJGZ3cml0ZShmX3Jlc3VsdHMsICIlc1x0XHQlc1x0JXNcbiIsIHRlc3RfZmlsZSwgIl9fRkFJTCIsICItLS0tLS0tLSIpOworICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgICAgICAvLyBFeGl0CisgICAgICAgICAgICBgaWZuZGVmIFNJR05BVFVSRV9PVVQKKyAgICAgICAgICAgICAgICAkZGlzcGxheSgiXG4jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iKTsKKyAgICAgICAgICAgICAgICAkZGlzcGxheSgiIyBTdW1tYXJ5OiAlMGQvJTBkIHRlc3RzIHBhc3NlZCIsIHRlc3RzX3Bhc3NlZCwgdGVzdHNfdG90YWwpOworICAgICAgICAgICAgICAgICRkaXNwbGF5KCIjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworICAgICAgICAgICAgICAgICRmY2xvc2UoZl9pbmZvKTsKKyAgICAgICAgICAgICAgICAkZmNsb3NlKGZfcmVzdWx0cyk7CisgICAgICAgICAgICBgZW5kaWYKKyAgICAgICAgICAgICRmaW5pc2goKTsKKyAgICAgICAgZW5kCisgICAgZW5kCitlbmQKKworCisgICAgICAgIGBpZmRlZiBWRVJJTEFUT1IKKyAgICAgICAgZnVuY3Rpb24gYml0IGlzX2NvbXBsaWFuY2UgKGxvZ2ljIFsyNTU6MF0gdGVzdG5hbWUpOworICAgICAgICAgICAgYml0IHJlczsKKyAgICAgICAgICAgIGxvZ2ljIFs3OTowXSBwYXR0ZXJuOworICAgICAgICBiZWdpbgorICAgICAgICAgICAgcGF0dGVybiA9IDgwJ2g2MzZmNmQ3MDZjNjk2MTZlNjM2NTsgLy8gY29tcGxpYW5jZQorICAgICAgICAgICAgcmVzID0gMDsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpPD0gMTc2OyBpKyspIGJlZ2luCisgICAgICAgICAgICAgICAgaWYodGVzdG5hbWVbaSs6ODBdID09IHBhdHRlcm4pIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB+cmVzOworICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBgaWZkZWYgU0lHTkFUVVJFX09VVAorICAgICAgICAgICAgICAgIHJldHVybiB+cmVzOworICAgICAgICAgICAgYGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzOworICAgICAgICAgICAgYGVuZGlmCisgICAgICAgIGVuZAorICAgICAgICBlbmRmdW5jdGlvbiA6IGlzX2NvbXBsaWFuY2UKKyAgICAgICAgCisgICAgICAgIGZ1bmN0aW9uIGxvZ2ljIFsyNTU6MF0gZ2V0X2ZpbGVuYW1lIChsb2dpYyBbMjU1OjBdIHRlc3RuYW1lKTsKKyAgICAgICAgbG9naWMgWzI1NTowXSByZXM7CisgICAgICAgIGludCBpLCBqOworICAgICAgICBiZWdpbgorICAgICAgICAgICAgdGVzdG5hbWVbNzowXSA9IDgnaDY2OworICAgICAgICAgICAgdGVzdG5hbWVbMTU6OF0gPSA4J2g2QzsKKyAgICAgICAgICAgIHRlc3RuYW1lWzIzOjE2XSA9IDgnaDY1OworICAgICAgICAKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPD0gMjQ4OyBpICs9IDgpIGJlZ2luCisgICAgICAgICAgICAgICAgaWYgKHRlc3RuYW1lW2krOjhdID09IDApIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBpIC09IDg7CisgICAgICAgICAgICBmb3IgKGogPSAyNTU7IGkgPj0gMDtpIC09IDgpIGJlZ2luCisgICAgICAgICAgICAgICAgcmVzW2otOjhdID0gdGVzdG5hbWVbaSs6OF07CisgICAgICAgICAgICAgICAgaiAtPSA4OworICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBmb3IgKDsgaiA+PSAwO2ogLT0gOCkgYmVnaW4KKyAgICAgICAgICAgICAgICByZXNbai06OF0gPSAwOworICAgICAgICAgICAgZW5kCisgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIHJlczsKKyAgICAgICAgZW5kCisgICAgICAgIGVuZGZ1bmN0aW9uIDogZ2V0X2ZpbGVuYW1lCisgICAgICAgIAorICAgICAgICBmdW5jdGlvbiBsb2dpYyBbMjU1OjBdIGdldF9yZWZfZmlsZW5hbWUgKGxvZ2ljIFsyNTU6MF0gdGVzdG5hbWUpOworICAgICAgICBsb2dpYyBbMjU1OjBdIHJlczsKKyAgICAgICAgaW50IGksIGo7CisgICAgICAgIGxvZ2ljIFs3OTowXSBwYXR0ZXJuOworICAgICAgICBiZWdpbgorICAgICAgICAgICAgcGF0dGVybiA9IDgwJ2g2MzZmNmQ3MDZjNjk2MTZlNjM2NTsgLy8gY29tcGxpYW5jZQorICAgICAgICAKKyAgICAgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPD0gMTc2OyBpKyspIGJlZ2luCisgICAgICAgICAgICAgICAgaWYodGVzdG5hbWVbaSs6ODBdID09IHBhdHRlcm4pIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIHRlc3RuYW1lWyhpLTgpKzo4OF0gPSAwOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZAorICAgICAgICAKKyAgICAgICAgICAgIGZvcihpID0gMzI7IGkgPD0gMjQ4OyBpICs9IDgpIGJlZ2luCisgICAgICAgICAgICAgICAgaWYodGVzdG5hbWVbaSs6OF0gPT0gMCkgYnJlYWs7CisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGkgLT0gODsKKyAgICAgICAgICAgIGZvcihqID0gMjU1OyBpID4gMjQ7IGkgLT0gOCkgYmVnaW4KKyAgICAgICAgICAgICAgICByZXNbai06OF0gPSB0ZXN0bmFtZVtpKzo4XTsKKyAgICAgICAgICAgICAgICBqIC09IDg7CisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGZvcig7IGogPj0wO2ogLT0gOCkgYmVnaW4KKyAgICAgICAgICAgICAgICByZXNbai06OF0gPSAwOworICAgICAgICAgICAgZW5kCisgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIHJlczsKKyAgICAgICAgZW5kCisgICAgICAgIGVuZGZ1bmN0aW9uIDogZ2V0X3JlZl9maWxlbmFtZQorICAgICAgICAKKyAgICAgICAgZnVuY3Rpb24gbG9naWMgWzIwNDc6MF0gcmVtb3ZlX3RyYWlsaW5nX3doaXRlc3BhY2VzIChsb2dpYyBbMjA0NzowXSBzdHIpOworICAgICAgICBpbnQgaTsKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPD0gMjA0MDsgaSArPSA4KSBiZWdpbgorICAgICAgICAgICAgICAgIGlmIChzdHJbaSs6OF0gIT0gOCdoMjApIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBzdHIgPSBzdHIgPj4gaTsKKyAgICAgICAgICAgIHJldHVybiBzdHI7CisgICAgICAgIGVuZAorICAgICAgICBlbmRmdW5jdGlvbjogcmVtb3ZlX3RyYWlsaW5nX3doaXRlc3BhY2VzCisgICAgICAgIAorICAgICAgICBgZWxzZSAvLyBWRVJJTEFUT1IKKyAgICAgICAgZnVuY3Rpb24gYml0IGlzX2NvbXBsaWFuY2UgKHN0cmluZyB0ZXN0bmFtZSk7CisgICAgICAgIGJlZ2luCisgICAgICAgICAgICByZXR1cm4gKHRlc3RuYW1lLnN1YnN0cigwLCA5KSA9PSAiY29tcGxpYW5jZSIpOworICAgICAgICBlbmQKKyAgICAgICAgZW5kZnVuY3Rpb24gOiBpc19jb21wbGlhbmNlCisgICAgICAgIAorICAgICAgICBmdW5jdGlvbiBzdHJpbmcgZ2V0X2ZpbGVuYW1lIChzdHJpbmcgdGVzdG5hbWUpOworICAgICAgICBpbnQgbGVuZ3RoOworICAgICAgICBiZWdpbgorICAgICAgICAgICAgbGVuZ3RoID0gdGVzdG5hbWUubGVuKCk7CisgICAgICAgICAgICB0ZXN0bmFtZVtsZW5ndGgtMV0gPSAiZiI7CisgICAgICAgICAgICB0ZXN0bmFtZVtsZW5ndGgtMl0gPSAibCI7CisgICAgICAgICAgICB0ZXN0bmFtZVtsZW5ndGgtM10gPSAiZSI7CisgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIHRlc3RuYW1lOworICAgICAgICBlbmQKKyAgICAgICAgZW5kZnVuY3Rpb24gOiBnZXRfZmlsZW5hbWUKKyAgICAgICAgCisgICAgICAgIGZ1bmN0aW9uIHN0cmluZyBnZXRfcmVmX2ZpbGVuYW1lIChzdHJpbmcgdGVzdG5hbWUpOworICAgICAgICBiZWdpbgorICAgICAgICAgICAgcmV0dXJuIHRlc3RuYW1lLnN1YnN0cigxMSwgdGVzdG5hbWUubGVuKCkgLSA1KTsKKyAgICAgICAgZW5kCisgICAgICAgIGVuZGZ1bmN0aW9uIDogZ2V0X3JlZl9maWxlbmFtZQorICAgICAgICAKKyAgICAgICAgYGVuZGlmIC8vIFZFUklMQVRPUgorCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvcnVuX2l2ZXJpbG9nIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3J1bl9pdmVyaWxvZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mYmQ4ZTA1Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3J1bl9pdmVyaWxvZwpAQCAtMCwwICsxLDMzIEBACitjZCAvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC9yaXNjZHVpbm8vdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc2ltL3Rlc3RzL2hlbGxvCisKK3Jpc2N2NjQtdW5rbm93bi1lbGYtZ2NjIC1PMiAtZnVucm9sbC1sb29wcyAtZnBlZWwtbG9vcHMgLWZnY3NlLXNtIC1mZ2NzZS1sYXMgIC1EX19SVkNfRVhUIC1zdGF0aWMgLXN0ZD1nbnU5OSAtZm5vLWNvbW1vbiAtZm5vLWJ1aWx0aW4tcHJpbnRmIC1EVENNPTEgLVdhLC1tYXJjaD1ydjMyaW1jIC1tYXJjaD1ydjMyaW1jIC1tYWJpPWlscDMyIC1ERkxBR1NfU1RSPVwiIi1PMiAtZnVucm9sbC1sb29wcyAtZnBlZWwtbG9vcHMgLWZnY3NlLXNtIC1mZ2NzZS1sYXMgIlwiICAtYyAtSS4vIC1JL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQvcmlzY2R1aW5vL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy8uLi8uLi8uLi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvY29tbW9uICAvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC9yaXNjZHVpbm8vdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzLy4uLy4uLy4uL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9jb21tb24vc2NfcHJpbnQuYyAtbyAvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC9yaXNjZHVpbm8vdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL2J1aWxkL2l2ZXJpbG9nX1dCX01BWF9pbWNfSVBJQ18xX1RDTV8xX1ZJUlFfMV9UUkFDRV8wL3NjX3ByaW50Lm8KKworcmlzY3Y2NC11bmtub3duLWVsZi1nY2MgLU8yIC1mdW5yb2xsLWxvb3BzIC1mcGVlbC1sb29wcyAtZmdjc2Utc20gLWZnY3NlLWxhcyAgLURfX1JWQ19FWFQgLXN0YXRpYyAtc3RkPWdudTk5IC1mbm8tY29tbW9uIC1mbm8tYnVpbHRpbi1wcmludGYgLURUQ009MSAtV2EsLW1hcmNoPXJ2MzJpbWMgLW1hcmNoPXJ2MzJpbWMgLW1hYmk9aWxwMzIgLURGTEFHU19TVFI9XCIiLU8yIC1mdW5yb2xsLWxvb3BzIC1mcGVlbC1sb29wcyAtZmdjc2Utc20gLWZnY3NlLWxhcyAiXCIgIC1jIC1JLi8gLUkvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC9yaXNjZHVpbm8vdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzLy4uLy4uLy4uL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9jb21tb24gIGhlbGxvLmMgLW8gL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQvcmlzY2R1aW5vL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy9idWlsZC9pdmVyaWxvZ19XQl9NQVhfaW1jX0lQSUNfMV9UQ01fMV9WSVJRXzFfVFJBQ0VfMC9oZWxsby5vCisKK3Jpc2N2NjQtdW5rbm93bi1lbGYtZ2NjIC1PMiAtZnVucm9sbC1sb29wcyAtZnBlZWwtbG9vcHMgLWZnY3NlLXNtIC1mZ2NzZS1sYXMgIC1EX19SVkNfRVhUIC1zdGF0aWMgLXN0ZD1nbnU5OSAtZm5vLWNvbW1vbiAtZm5vLWJ1aWx0aW4tcHJpbnRmIC1EVENNPTEgLVdhLC1tYXJjaD1ydjMyaW1jIC1tYXJjaD1ydjMyaW1jIC1tYWJpPWlscDMyIC1ERkxBR1NfU1RSPVwiIi1PMiAtZnVucm9sbC1sb29wcyAtZnBlZWwtbG9vcHMgLWZnY3NlLXNtIC1mZ2NzZS1sYXMgIlwiICAtRF9fQVNTRU1CTFlfXz0xIC1jIC1JLi8gLUkvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC9yaXNjZHVpbm8vdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzLy4uLy4uLy4uL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9jb21tb24gIC9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3Jpc2NkdWluby92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvLi4vLi4vLi4vdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc2ltL3Rlc3RzL2NvbW1vbi9jcnRfdGNtLlMgLW8gL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQvcmlzY2R1aW5vL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy9idWlsZC9pdmVyaWxvZ19XQl9NQVhfaW1jX0lQSUNfMV9UQ01fMV9WSVJRXzFfVFJBQ0VfMC9jcnRfdGNtLm8KKworcmlzY3Y2NC11bmtub3duLWVsZi1nY2MgLW8gL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQvcmlzY2R1aW5vL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy9idWlsZC9pdmVyaWxvZ19XQl9NQVhfaW1jX0lQSUNfMV9UQ01fMV9WSVJRXzFfVFJBQ0VfMC9oZWxsby5lbGYgLVQgL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQvcmlzY2R1aW5vL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy8uLi8uLi8uLi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvY29tbW9uL2xpbmtfdGNtLmxkIC9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3Jpc2NkdWluby92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvYnVpbGQvaXZlcmlsb2dfV0JfTUFYX2ltY19JUElDXzFfVENNXzFfVklSUV8xX1RSQUNFXzAvc2NfcHJpbnQubyAvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC9yaXNjZHVpbm8vdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL2J1aWxkL2l2ZXJpbG9nX1dCX01BWF9pbWNfSVBJQ18xX1RDTV8xX1ZJUlFfMV9UUkFDRV8wL2hlbGxvLm8gL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQvcmlzY2R1aW5vL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy9idWlsZC9pdmVyaWxvZ19XQl9NQVhfaW1jX0lQSUNfMV9UQ01fMV9WSVJRXzFfVFJBQ0VfMC9jcnRfdGNtLm8gLW5vc3RhcnRmaWxlcyAtbm9zdGRsaWIgLWxjIC1sZ2NjIC1tYXJjaD1ydjMyaW1jIC1tYWJpPWlscDMyCitybSAvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC9yaXNjZHVpbm8vdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL2J1aWxkL2l2ZXJpbG9nX1dCX01BWF9pbWNfSVBJQ18xX1RDTV8xX1ZJUlFfMV9UUkFDRV8wL3NjX3ByaW50Lm8gL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQvcmlzY2R1aW5vL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy9idWlsZC9pdmVyaWxvZ19XQl9NQVhfaW1jX0lQSUNfMV9UQ01fMV9WSVJRXzFfVFJBQ0VfMC9jcnRfdGNtLm8gL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQvcmlzY2R1aW5vL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy9idWlsZC9pdmVyaWxvZ19XQl9NQVhfaW1jX0lQSUNfMV9UQ01fMV9WSVJRXzFfVFJBQ0VfMC9oZWxsby5vCisKK2NkIGJ1aWxkL2l2ZXJpbG9nX1dCX01BWF9pbWNfSVBJQ18xX1RDTV8xX1ZJUlFfMV9UUkFDRV8wCisKK2l2ZXJpbG9nIC1nMjAwNS1zdiAtRFdGRFVNUCAtREZVTkNUSU9OQUwgLURTSU0gLUkgJFBES19ST09UL3NreTEzMEEgXAorLUkgJENBUkFWRUxfUk9PVC92ZXJpbG9nL2R2L2NhcmF2ZWwgXAorLUkgJENBUkFWRUxfUk9PVC92ZXJpbG9nL3J0bCBcCistSSAuLi8uLi8uLi9tb2RlbCAgICBcCistSSAuLi8uLi8uLi8uLi8uLi92ZXJpbG9nL3J0bCBcCistSSAuLi8uLi8uLi8uLi8uLi92ZXJpbG9nIFwKKy1JIC4uLy4uLy4uL2FnZW50cyAgICBcCistSSAuLi8uLi8uLi8uLi8uLi92ZXJpbG9nL3J0bC95aWZpdmUveWNyMWMvc3JjL2luY2x1ZGVzIFwKKy1JIC4uLy4uLy4uLy4uLy4uL3Zlcmlsb2cvcnRsL3NkcmFtX2N0cmwvc3JjL2RlZnMgXAorLUkgLi4vLi4vLi4vLi4vLi4vdmVyaWxvZy9ydGwvaTJjbS9zcmMvaW5jbHVkZXMgXAorLUkgLi4vLi4vLi4vLi4vLi4vdmVyaWxvZy9ydGwvdXNiMV9ob3N0L3NyYy9pbmNsdWRlcyBcCistSSAuLi8uLi8uLi8uLi8uLi92ZXJpbG9nL3J0bC9tYmlzdC9pbmNsdWRlIFwKKy1JIC4uLy4uIFwKKy4uLy4uL3VzZXJfcmlzY19yZWdyZXNzX3RiLnYgXAorLW8gdXNlcl9yaXNjX3JlZ3Jlc3NfdGIudnZwCisKK2l2ZXJpbG9nLXZwaSAuLi8uLi8uLi92cGkvc3lzdGVtL3N5c3RlbS5jCisKK3Z2cCAgLU0uIC1tc3lzdGVtICB1c2VyX3Jpc2NfcmVncmVzc190Yi52dnAgK3Rlc3RfaW5mbz0uL3Rlc3RfaW5mbyArdGVzdF9yZXN1bHRzPS4vdGVzdF9yZXN1bHRzLnR4dCB8IHRlZSBzaW1fcmVzdWx0cy50eHQKKwpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL2JlbmNobWFya3MvY29yZW1hcmsvTWFrZWZpbGUgYi92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvYmVuY2htYXJrcy9jb3JlbWFyay9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjA2MjNiCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL2JlbmNobWFya3MvY29yZW1hcmsvTWFrZWZpbGUKQEAgLTAsMCArMSwyNiBAQAorc3JjX2RpciA6PSAkKGRpciAkKGxhc3R3b3JkICQoTUFLRUZJTEVfTElTVCkpKQorZGVwZW5kX2RpciA6PSAkKHNyY19kaXIpLy4uLy4uLy4uL2RlcGVuZGVuY2llcy9jb3JlbWFyaworCitpZmVxICgiJChJVEVSQVRJT05TKSIsIiIpCitJVEVSQVRJT05TPTEKK2VuZGlmCisKK0FERF9DRkxBR1MgICs9IC1ESVRFUkFUSU9OUz0kKElURVJBVElPTlMpCitBRERfVlBBVEggICA6PSAkKGRlcGVuZF9kaXIpCitBRERfaW5jcyAgICA6PSAtSSQoc3JjX2Rpcikvc3JjIC1JJChkZXBlbmRfZGlyKQorCitjX3NyYyA6PSBjb3JlX3BvcnRtZS5jIHNjX3ByaW50LmMgCitjb3JlbWFya19zcmMgOj0gLi9zcmMvY29yZV9saXN0X2pvaW4uYyAuL3NyYy9jb3JlX21hdHJpeC5jIC4vc3JjL2NvcmVfbWFpbi5jIC4vc3JjL2NvcmVfdXRpbC5jIC4vc3JjL2NvcmVfc3RhdGUuYworY19zcmMgKz0gY29yZV9saXN0X2pvaW4uYyBjb3JlX21hdHJpeC5jIGNvcmVfbWFpbi5jIGNvcmVfdXRpbC5jIGNvcmVfc3RhdGUuYworCitpbmNsdWRlICQoaW5jX2RpcikvY29tbW9uLm1rCisKKworZGVmYXVsdDogbG9nX3JlcXVlc3RlZF90Z3QgICQoYmxkX2RpcikvY29yZW1hcmsuZWxmICQoYmxkX2RpcikvY29yZW1hcmsuaGV4ICQoYmxkX2RpcikvY29yZW1hcmsuZHVtcCAKKworbG9nX3JlcXVlc3RlZF90Z3Q6CisJZWNobyBjb3JlbWFyay5oZXg+PiAkKGJsZF9kaXIpL3Rlc3RfaW5mbworCWVjaG8gJChpbmNfZGlyKS9jb21tb24ubWsKKworY2xlYW46CisJJChSTSkgJChjX29ianMpICQoYXNtX29ianMpICQoYmxkX2RpcikvY29yZW1hcmsuaGV4ICQoYmxkX2RpcikvY29yZW1hcmsuZHVtcCAKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9iZW5jaG1hcmtzL2NvcmVtYXJrL2NvcmVfcG9ydG1lLmMgYi92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvYmVuY2htYXJrcy9jb3JlbWFyay9jb3JlX3BvcnRtZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjODAxZjcKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvYmVuY2htYXJrcy9jb3JlbWFyay9jb3JlX3BvcnRtZS5jCkBAIC0wLDAgKzEsMTQxIEBACisvKgorCUZpbGUgOiBjb3JlX3BvcnRtZS5jCisqLworLyoKKwlBdXRob3IgOiBTaGF5IEdhbC1PbiwgRUVNQkMKKwlMZWdhbCA6IFRPRE8hCisqLworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSAiY29yZW1hcmsuaCIKKyNpbmNsdWRlICJjb3JlX3BvcnRtZS5oIgorI2luY2x1ZGUgInJpc2N2X2Nzcl9lbmNvZGluZy5oIgorI2luY2x1ZGUgInNjX3Rlc3QuaCIKKworI2lmIFZBTElEQVRJT05fUlVOCisJdm9sYXRpbGUgZWVfczMyIHNlZWQxX3ZvbGF0aWxlPTB4MzQxNTsKKwl2b2xhdGlsZSBlZV9zMzIgc2VlZDJfdm9sYXRpbGU9MHgzNDE1OworCXZvbGF0aWxlIGVlX3MzMiBzZWVkM192b2xhdGlsZT0weDY2OworI2VuZGlmCisjaWYgUEVSRk9STUFOQ0VfUlVOCisJdm9sYXRpbGUgZWVfczMyIHNlZWQxX3ZvbGF0aWxlPTB4MDsKKwl2b2xhdGlsZSBlZV9zMzIgc2VlZDJfdm9sYXRpbGU9MHgwOworCXZvbGF0aWxlIGVlX3MzMiBzZWVkM192b2xhdGlsZT0weDY2OworI2VuZGlmCisjaWYgUFJPRklMRV9SVU4KKwl2b2xhdGlsZSBlZV9zMzIgc2VlZDFfdm9sYXRpbGU9MHg4OworCXZvbGF0aWxlIGVlX3MzMiBzZWVkMl92b2xhdGlsZT0weDg7CisJdm9sYXRpbGUgZWVfczMyIHNlZWQzX3ZvbGF0aWxlPTB4ODsKKyNlbmRpZgorCXZvbGF0aWxlIGVlX3MzMiBzZWVkNF92b2xhdGlsZT1JVEVSQVRJT05TOworCXZvbGF0aWxlIGVlX3MzMiBzZWVkNV92b2xhdGlsZT0wOworCisvKiBQb3J0aW5nIDogVGltaW5nIGZ1bmN0aW9ucworCUhvdyB0byBjYXB0dXJlIHRpbWUgYW5kIGNvbnZlcnQgdG8gc2Vjb25kcyBtdXN0IGJlIHBvcnRlZCB0byB3aGF0ZXZlciBpcyBzdXBwb3J0ZWQgYnkgdGhlIHBsYXRmb3JtLgorCWUuZy4gUmVhZCB2YWx1ZSBmcm9tIG9uIGJvYXJkIFJUQywgcmVhZCB2YWx1ZSBmcm9tIGNwdSBjbG9jayBjeWNsZXMgcGVyZm9ybWFuY2UgY291bnRlciBldGMuCisJU2FtcGxlIGltcGxlbWVudGF0aW9uIGZvciBzdGFuZGFyZCB0aW1lLmggYW5kIHdpbmRvd3MuaCBkZWZpbml0aW9ucyBpbmNsdWRlZC4KKyovCisjaWYgMQorQ09SRVRJTUVUWVBFIGJhcmVib25lc19jbG9jaygpIHsKKwl1bnNpZ25lZCBsb25nIG47CisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorCQkicmR0aW1lICUwIgorCQk6ICI9ciIgKG4pKTsKKwlyZXR1cm4gbjsKK30KKyNkZWZpbmUgQ0xPQ0tTX1BFUl9TRUMJMTAwMDAwMDAKKworLyogRGVmaW5lIDogVElNRVJfUkVTX0RJVklERVIKKwlEaXZpZGVyIHRvIHRyYWRlIG9mZiB0aW1lciByZXNvbHV0aW9uIGFuZCB0b3RhbCB0aW1lIHRoYXQgY2FuIGJlIG1lYXN1cmVkLgorCisJVXNlIGxvd2VyIHZhbHVlcyB0byBpbmNyZWFzZSByZXNvbHV0aW9uLCBidXQgbWFrZSBzdXJlIHRoYXQgb3ZlcmZsb3cgZG9lcyBub3Qgb2NjdXIuCisJSWYgdGhlcmUgYXJlIGlzc3VlcyB3aXRoIHRoZSByZXR1cm4gdmFsdWUgb3ZlcmZsb3dpbmcsIGluY3JlYXNlIHRoaXMgdmFsdWUuCisJKi8KKy8qICNkZWZpbmUgTlNFQ1NfUEVSX1NFQyBDTE9DS1NfUEVSX1NFQyAqLworLyogI2RlZmluZSBDT1JFVElNRVRZUEUgY2xvY2tfdCAqLworI2RlZmluZSBHRVRNWVRJTUUoX3QpICgqX3Q9YmFyZWJvbmVzX2Nsb2NrKCkpCisjZGVmaW5lIE1ZVElNRURJRkYoZmluLGluaSkgKChmaW4pLShpbmkpKQorI2RlZmluZSBUSU1FUl9SRVNfRElWSURFUiAxCisjZGVmaW5lIFNBTVBMRV9USU1FX0lNUExFTUVOVEFUSU9OIDEKKyNkZWZpbmUgRUVfVElDS1NfUEVSX1NFQyAoQ0xPQ0tTX1BFUl9TRUMgLyBUSU1FUl9SRVNfRElWSURFUikKKyNlbHNlCisKKyNlbmRpZgorCisvKiogRGVmaW5lIEhvc3Qgc3BlY2lmaWMgKFBPU0lYKSwgb3IgdGFyZ2V0IHNwZWNpZmljIGdsb2JhbCB0aW1lIHZhcmlhYmxlcy4gKi8KK3N0YXRpYyBDT1JFVElNRVRZUEUgc3RhcnRfdGltZV92YWwsIHN0b3BfdGltZV92YWw7CisKKy8qIEZ1bmN0aW9uIDogc3RhcnRfdGltZQorCVRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgcmlnaHQgYmVmb3JlIHN0YXJ0aW5nIHRoZSB0aW1lZCBwb3J0aW9uIG9mIHRoZSBiZW5jaG1hcmsuCisKKwlJbXBsZW1lbnRhdGlvbiBtYXkgYmUgY2FwdHVyaW5nIGEgc3lzdGVtIHRpbWVyIChhcyBpbXBsZW1lbnRlZCBpbiB0aGUgZXhhbXBsZSBjb2RlKQorCW9yIHplcm9pbmcgc29tZSBzeXN0ZW0gcGFyYW1ldGVycyAtIGUuZy4gc2V0dGluZyB0aGUgY3B1IGNsb2NrcyBjeWNsZXMgdG8gMC4KKyovCit2b2lkIHN0YXJ0X3RpbWUodm9pZCkgeworCUdFVE1ZVElNRSgmc3RhcnRfdGltZV92YWwgKTsKK30KKy8qIEZ1bmN0aW9uIDogc3RvcF90aW1lCisJVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCByaWdodCBhZnRlciBlbmRpbmcgdGhlIHRpbWVkIHBvcnRpb24gb2YgdGhlIGJlbmNobWFyay4KKworCUltcGxlbWVudGF0aW9uIG1heSBiZSBjYXB0dXJpbmcgYSBzeXN0ZW0gdGltZXIgKGFzIGltcGxlbWVudGVkIGluIHRoZSBleGFtcGxlIGNvZGUpCisJb3Igb3RoZXIgc3lzdGVtIHBhcmFtZXRlcnMgLSBlLmcuIHJlYWRpbmcgdGhlIGN1cnJlbnQgdmFsdWUgb2YgY3B1IGN5Y2xlcyBjb3VudGVyLgorKi8KK3ZvaWQgc3RvcF90aW1lKHZvaWQpIHsKKwlHRVRNWVRJTUUoJnN0b3BfdGltZV92YWwgKTsKK30KKy8qIEZ1bmN0aW9uIDogZ2V0X3RpbWUKKwlSZXR1cm4gYW4gYWJzdHJhY3QgInRpY2tzIiBudW1iZXIgdGhhdCBzaWduaWZpZXMgdGltZSBvbiB0aGUgc3lzdGVtLgorCisJQWN0dWFsIHZhbHVlIHJldHVybmVkIG1heSBiZSBjcHUgY3ljbGVzLCBtaWxsaXNlY29uZHMgb3IgYW55IG90aGVyIHZhbHVlLAorCWFzIGxvbmcgYXMgaXQgY2FuIGJlIGNvbnZlcnRlZCB0byBzZWNvbmRzIGJ5IDx0aW1lX2luX3NlY3M+LgorCVRoaXMgbWV0aG9kb2xvZ3kgaXMgdGFrZW4gdG8gYWNjb21vZGF0ZSBhbnkgaGFyZHdhcmUgb3Igc2ltdWxhdGVkIHBsYXRmb3JtLgorCVRoZSBzYW1wbGUgaW1wbGVtZW50YXRpb24gcmV0dXJucyBtaWxsaXNlY3MgYnkgZGVmYXVsdCwKKwlhbmQgdGhlIHJlc29sdXRpb24gaXMgY29udHJvbGxlZCBieSA8VElNRVJfUkVTX0RJVklERVI+CisqLworQ09SRV9USUNLUyBnZXRfdGltZSh2b2lkKSB7CisJQ09SRV9USUNLUyBlbGFwc2VkPShDT1JFX1RJQ0tTKShNWVRJTUVESUZGKHN0b3BfdGltZV92YWwsIHN0YXJ0X3RpbWVfdmFsKSk7CisJcmV0dXJuIGVsYXBzZWQ7Cit9CisvKiBGdW5jdGlvbiA6IHRpbWVfaW5fc2VjcworCUNvbnZlcnQgdGhlIHZhbHVlIHJldHVybmVkIGJ5IGdldF90aW1lIHRvIHNlY29uZHMuCisKKwlUaGUgPHNlY3NfcmV0PiB0eXBlIGlzIHVzZWQgdG8gYWNjb21vZGF0ZSBzeXN0ZW1zIHdpdGggbm8gc3VwcG9ydCBmb3IgZmxvYXRpbmcgcG9pbnQuCisJRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBpbXBsZW1lbnRlZCBieSB0aGUgRUVfVElDS1NfUEVSX1NFQyBtYWNybyBhYm92ZS4KKyovCitzZWNzX3JldCB0aW1lX2luX3NlY3MoQ09SRV9USUNLUyB0aWNrcykgeworCXNlY3NfcmV0IHJldHZhbD0oKHNlY3NfcmV0KXRpY2tzKSAvIChzZWNzX3JldClFRV9USUNLU19QRVJfU0VDOworCXJldHVybiByZXR2YWw7Cit9CisKK2VlX3UzMiBkZWZhdWx0X251bV9jb250ZXh0cz0xOworCisvKiBGdW5jdGlvbiA6IHBvcnRhYmxlX2luaXQKKwlUYXJnZXQgc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gY29kZQorCVRlc3QgZm9yIHNvbWUgY29tbW9uIG1pc3Rha2VzLgorKi8KK3ZvaWQgcG9ydGFibGVfaW5pdChjb3JlX3BvcnRhYmxlICpwLCBpbnQgKmFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBlZV9wcmludGYoIkNvcmVNYXJrIDEuMFxuIik7CisJaWYgKHNpemVvZihlZV9wdHJfaW50KSAhPSBzaXplb2YoZWVfdTggKikpIHsKKwkJZWVfcHJpbnRmKCJFUlJPUiEgUGxlYXNlIGRlZmluZSBlZV9wdHJfaW50IHRvIGEgdHlwZSB0aGF0IGhvbGRzIGEgcG9pbnRlciEgKCV1ICE9ICV1KVxuIiwgc2l6ZW9mKGVlX3B0cl9pbnQpLCBzaXplb2YoZWVfdTggKikpOworCX0KKwlpZiAoc2l6ZW9mKGVlX3UzMikgIT0gNCkgeworCQllZV9wcmludGYoIkVSUk9SISBQbGVhc2UgZGVmaW5lIGVlX3UzMiB0byBhIDMyYiB1bnNpZ25lZCB0eXBlISAoJXUpXG4iLCBzaXplb2YoZWVfdTMyKSk7CisJfQorCXAtPnBvcnRhYmxlX2lkPTE7Cit9CisvKiBGdW5jdGlvbiA6IHBvcnRhYmxlX2ZpbmkKKwlUYXJnZXQgc3BlY2lmaWMgZmluYWwgY29kZQorKi8KK3ZvaWQgcG9ydGFibGVfZmluaShjb3JlX3BvcnRhYmxlICpwKQoreworCXAtPnBvcnRhYmxlX2lkPTA7CisKKyAgICByZXBvcnRfcmVzdWx0cygwLCAwLCAwLCAwLCAwKTsKKworICAgIC8qIHJlc3VsdHNbMF0uaXRlcmF0aW9ucyAqIDEwMDAwMDAwLyh0b3RhbF90aW1lKSAqLworCisgICAgLyogZXh0ZXJuIHZvaWQgdG9ob3N0X2V4aXQobG9uZyBjb2RlKTsgKi8KKworICAgIC8qIHRvaG9zdF9leGl0KDApOyAqLworfQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL2JlbmNobWFya3MvY29yZW1hcmsvY29yZV9wb3J0bWUuaCBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9iZW5jaG1hcmtzL2NvcmVtYXJrL2NvcmVfcG9ydG1lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODU3OTMwZgotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9iZW5jaG1hcmtzL2NvcmVtYXJrL2NvcmVfcG9ydG1lLmgKQEAgLTAsMCArMSwyMTAgQEAKKy8qIEZpbGUgOiBjb3JlX3BvcnRtZS5oICovCisKKy8qCisJQXV0aG9yIDogU2hheSBHYWwtT24sIEVFTUJDCisJTGVnYWwgOiBUT0RPIQorKi8KKy8qIFRvcGljIDogRGVzY3JpcHRpb24KKwlUaGlzIGZpbGUgY29udGFpbnMgY29uZmlndXJhdGlvbiBjb25zdGFudHMgcmVxdWlyZWQgdG8gZXhlY3V0ZSBvbiBkaWZmZXJlbnQgcGxhdGZvcm1zCisqLworI2lmbmRlZiBDT1JFX1BPUlRNRV9ICisjZGVmaW5lIENPUkVfUE9SVE1FX0gKKy8qKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBEYXRhIHR5cGVzIGFuZCBzZXR0aW5ncyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIENvbmZpZ3VyYXRpb24gOiBIQVNfRkxPQVQKKwlEZWZpbmUgdG8gMSBpZiB0aGUgcGxhdGZvcm0gc3VwcG9ydHMgZmxvYXRpbmcgcG9pbnQuCisqLworI2lmbmRlZiBIQVNfRkxPQVQKKyNkZWZpbmUgSEFTX0ZMT0FUIDAKKyNlbmRpZgorLyogQ29uZmlndXJhdGlvbiA6IEhBU19USU1FX0gKKwlEZWZpbmUgdG8gMSBpZiBwbGF0Zm9ybSBoYXMgdGhlIHRpbWUuaCBoZWFkZXIgZmlsZSwKKwlhbmQgaW1wbGVtZW50YXRpb24gb2YgZnVuY3Rpb25zIHRoZXJlb2YuCisqLworI2lmbmRlZiBIQVNfVElNRV9ICisjZGVmaW5lIEhBU19USU1FX0ggMAorI2VuZGlmCisvKiBDb25maWd1cmF0aW9uIDogVVNFX0NMT0NLCisJRGVmaW5lIHRvIDEgaWYgcGxhdGZvcm0gaGFzIHRoZSB0aW1lLmggaGVhZGVyIGZpbGUsCisJYW5kIGltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyB0aGVyZW9mLgorKi8KKyNpZm5kZWYgVVNFX0NMT0NLCisjZGVmaW5lIFVTRV9DTE9DSyAwCisjZW5kaWYKKy8qIENvbmZpZ3VyYXRpb24gOiBIQVNfU1RESU8KKwlEZWZpbmUgdG8gMSBpZiB0aGUgcGxhdGZvcm0gaGFzIHN0ZGlvLmguCisqLworI2lmbmRlZiBIQVNfU1RESU8KKyNkZWZpbmUgSEFTX1NURElPIDEKKyNlbmRpZgorLyogQ29uZmlndXJhdGlvbiA6IEhBU19QUklOVEYKKwlEZWZpbmUgdG8gMSBpZiB0aGUgcGxhdGZvcm0gaGFzIHN0ZGlvLmggYW5kIGltcGxlbWVudHMgdGhlIHByaW50ZiBmdW5jdGlvbi4KKyovCisjaWZuZGVmIEhBU19QUklOVEYKKyNkZWZpbmUgSEFTX1BSSU5URiAwCisjZW5kaWYKKworI2luY2x1ZGUgInNjX3ByaW50LmgiCisjZGVmaW5lIGVlX3ByaW50ZiBzY19wcmludGYKKworLyogc3RhdGljIGlubGluZSBpbnQgZWVfcHJpbnRmKGNvbnN0IGNoYXIgKmZtdCwgLi4uKSB7fSAqLworCisvKiBDb25maWd1cmF0aW9uIDogQ09SRV9USUNLUworCURlZmluZSB0eXBlIG9mIHJldHVybiBmcm9tIHRoZSB0aW1pbmcgZnVuY3Rpb25zLgorICovCisvKiAjaW5jbHVkZSA8dGltZS5oPiAqLworLyogdHlwZWRlZiBjbG9ja190IENPUkVfVElDS1M7ICovCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisjZGVmaW5lIENPUkVUSU1FVFlQRSB1aW50MzJfdAordHlwZWRlZiB1aW50MzJfdCBDT1JFX1RJQ0tTOworCisvKiBEZWZpbml0aW9ucyA6IENPTVBJTEVSX1ZFUlNJT04sIENPTVBJTEVSX0ZMQUdTLCBNRU1fTE9DQVRJT04KKwlJbml0aWFsaXplIHRoZXNlIHN0cmluZ3MgcGVyIHBsYXRmb3JtCisqLworI2lmbmRlZiBDT01QSUxFUl9WRVJTSU9OCisgI2lmZGVmIF9fR05VQ19fCisgI2RlZmluZSBDT01QSUxFUl9WRVJTSU9OICJHQ0MiX19WRVJTSU9OX18KKyAjZWxzZQorICNkZWZpbmUgQ09NUElMRVJfVkVSU0lPTiAiUGxlYXNlIHB1dCBjb21waWxlciB2ZXJzaW9uIGhlcmUgKGUuZy4gZ2NjIDQuMSkiCisgI2VuZGlmCisjZW5kaWYKKyNpZm5kZWYgQ09NUElMRVJfRkxBR1MKKyAjZGVmaW5lIENPTVBJTEVSX0ZMQUdTIEZMQUdTX1NUUiAvKiAiUGxlYXNlIHB1dCBjb21waWxlciBmbGFncyBoZXJlIChlLmcuIC1vMykiICovCisjZW5kaWYKKyNpZm5kZWYgTUVNX0xPQ0FUSU9OCisgLyogI2RlZmluZSBNRU1fTE9DQVRJT04gIlNUQUNLIiAqLworICNkZWZpbmUgTUVNX0xPQ0FUSU9OICJTVEFUSUMiCisjZW5kaWYKKworLyogRGF0YSBUeXBlcyA6CisJVG8gYXZvaWQgY29tcGlsZXIgaXNzdWVzLCBkZWZpbmUgdGhlIGRhdGEgdHlwZXMgdGhhdCBuZWVkIG90IGJlIHVzZWQgZm9yIDhiLCAxNmIgYW5kIDMyYiBpbiA8Y29yZV9wb3J0bWUuaD4uCisKKwkqSW1wcnRhbnQqIDoKKwllZV9wdHJfaW50IG5lZWRzIHRvIGJlIHRoZSBkYXRhIHR5cGUgdXNlZCB0byBob2xkIHBvaW50ZXJzLCBvdGhlcndpc2UgY29yZW1hcmsgbWF5IGZhaWwhISEKKyovCit0eXBlZGVmIGludDE2X3QgZWVfczE2OwordHlwZWRlZiB1aW50MTZfdCBlZV91MTY7Cit0eXBlZGVmIGludDMyX3QgZWVfczMyOwordHlwZWRlZiBmbG9hdCBlZV9mMzI7Cit0eXBlZGVmIHVpbnQ4X3QgZWVfdTg7Cit0eXBlZGVmIHVpbnQzMl90IGVlX3UzMjsKK3R5cGVkZWYgdWludHB0cl90IGVlX3B0cl9pbnQ7Cit0eXBlZGVmIHNpemVfdCBlZV9zaXplX3Q7CisvKiBhbGlnbl9tZW0gOgorCVRoaXMgbWFjcm8gaXMgdXNlZCB0byBhbGlnbiBhbiBvZmZzZXQgdG8gcG9pbnQgdG8gYSAzMmIgdmFsdWUuIEl0IGlzIHVzZWQgaW4gdGhlIE1hdHJpeCBhbGdvcml0aG0gdG8gaW5pdGlhbGl6ZSB0aGUgaW5wdXQgbWVtb3J5IGJsb2Nrcy4KKyovCisjZGVmaW5lIGFsaWduX21lbSh4KSAodm9pZCAqKSg0ICsgKCgoZWVfcHRyX2ludCkoeCkgLSAxKSAmIH4zKSkKKworLyogQ29uZmlndXJhdGlvbiA6IFNFRURfTUVUSE9ECisJRGVmaW5lcyBtZXRob2QgdG8gZ2V0IHNlZWQgdmFsdWVzIHRoYXQgY2Fubm90IGJlIGNvbXB1dGVkIGF0IGNvbXBpbGUgdGltZS4KKworCVZhbGlkIHZhbHVlcyA6CisJU0VFRF9BUkcgLSBmcm9tIGNvbW1hbmQgbGluZS4KKwlTRUVEX0ZVTkMgLSBmcm9tIGEgc3lzdGVtIGZ1bmN0aW9uLgorCVNFRURfVk9MQVRJTEUgLSBmcm9tIHZvbGF0aWxlIHZhcmlhYmxlcy4KKyovCisjaWZuZGVmIFNFRURfTUVUSE9ECisjZGVmaW5lIFNFRURfTUVUSE9EIFNFRURfVk9MQVRJTEUKKyNlbmRpZgorCisvKiBDb25maWd1cmF0aW9uIDogTUVNX01FVEhPRAorCURlZmluZXMgbWV0aG9kIHRvIGdldCBhIGJsb2NrIG9mIG1lbXJ5LgorCisJVmFsaWQgdmFsdWVzIDoKKwlNRU1fTUFMTE9DIC0gZm9yIHBsYXRmb3JtcyB0aGF0IGltcGxlbWVudCBtYWxsb2MgYW5kIGhhdmUgbWFsbG9jLmguCisJTUVNX1NUQVRJQyAtIHRvIHVzZSBhIHN0YXRpYyBtZW1vcnkgYXJyYXkuCisJTUVNX1NUQUNLIC0gdG8gYWxsb2NhdGUgdGhlIGRhdGEgYmxvY2sgb24gdGhlIHN0YWNrIChOWUkpLgorKi8KKyNpZm5kZWYgTUVNX01FVEhPRAorLyogI2RlZmluZSBNRU1fTUVUSE9EIE1FTV9TVEFDSyAqLworI2RlZmluZSBNRU1fTUVUSE9EIE1FTV9TVEFUSUMKKyNlbmRpZgorCisvKiBDb25maWd1cmF0aW9uIDogTVVMVElUSFJFQUQKKwlEZWZpbmUgZm9yIHBhcmFsbGVsIGV4ZWN1dGlvbgorCisJVmFsaWQgdmFsdWVzIDoKKwkxIC0gb25seSBvbmUgY29udGV4dCAoZGVmYXVsdCkuCisJTj4xIC0gd2lsbCBleGVjdXRlIE4gY29waWVzIGluIHBhcmFsbGVsLgorCisJTm90ZSA6CisJSWYgdGhpcyBmbGFnIGlzIGRlZmluZWQgdG8gbW9yZSB0aGVuIDEsIGFuIGltcGxlbWVudGF0aW9uIGZvciBsYXVuY2hpbmcgcGFyYWxsZWwgY29udGV4dHMgbXVzdCBiZSBkZWZpbmVkLgorCisJVHdvIHNhbXBsZSBpbXBsZW1lbnRhdGlvbnMgYXJlIHByb3ZpZGVkLiBVc2UgPFVTRV9QVEhSRUFEPiBvciA8VVNFX0ZPUks+IHRvIGVuYWJsZSB0aGVtLgorCisJSXQgaXMgdmFsaWQgdG8gaGF2ZSBhIGRpZmZlcmVudCBpbXBsZW1lbnRhdGlvbiBvZiA8Y29yZV9zdGFydF9wYXJhbGxlbD4gYW5kIDxjb3JlX2VuZF9wYXJhbGxlbD4gaW4gPGNvcmVfcG9ydG1lLmM+LAorCXRvIGZpdCBhIHBhcnRpY3VsYXIgYXJjaGl0ZWN0dXJlLgorKi8KKyNpZm5kZWYgTVVMVElUSFJFQUQKKyNkZWZpbmUgTVVMVElUSFJFQUQgMQorI2RlZmluZSBVU0VfUFRIUkVBRCAwCisjZGVmaW5lIFVTRV9GT1JLIDAKKyNkZWZpbmUgVVNFX1NPQ0tFVCAwCisjZW5kaWYKKworLyogQ29uZmlndXJhdGlvbiA6IE1BSU5fSEFTX05PQVJHQworCU5lZWRlZCBpZiBwbGF0Zm9ybSBkb2VzIG5vdCBzdXBwb3J0IGdldHRpbmcgYXJndW1lbnRzIHRvIG1haW4uCisKKwlWYWxpZCB2YWx1ZXMgOgorCTAgLSBhcmdjL2FyZ3YgdG8gbWFpbiBpcyBzdXBwb3J0ZWQKKwkxIC0gYXJnYy9hcmd2IHRvIG1haW4gaXMgbm90IHN1cHBvcnRlZAorCisJTm90ZSA6CisJVGhpcyBmbGFnIG9ubHkgbWF0dGVycyBpZiBNVUxUSVRIUkVBRCBoYXMgYmVlbiBkZWZpbmVkIHRvIGEgdmFsdWUgZ3JlYXRlciB0aGVuIDEuCisqLworI2lmbmRlZiBNQUlOX0hBU19OT0FSR0MKKyNkZWZpbmUgTUFJTl9IQVNfTk9BUkdDIDEKKyNlbmRpZgorCisvKiBDb25maWd1cmF0aW9uIDogTUFJTl9IQVNfTk9SRVRVUk4KKwlOZWVkZWQgaWYgcGxhdGZvcm0gZG9lcyBub3Qgc3VwcG9ydCByZXR1cm5pbmcgYSB2YWx1ZSBmcm9tIG1haW4uCisKKwlWYWxpZCB2YWx1ZXMgOgorCTAgLSBtYWluIHJldHVybnMgYW4gaW50LCBhbmQgcmV0dXJuIHZhbHVlIHdpbGwgYmUgMC4KKwkxIC0gcGxhdGZvcm0gZG9lcyBub3Qgc3VwcG9ydCByZXR1cm5pbmcgYSB2YWx1ZSBmcm9tIG1haW4KKyovCisjaWZuZGVmIE1BSU5fSEFTX05PUkVUVVJOCisjZGVmaW5lIE1BSU5fSEFTX05PUkVUVVJOIDAKKyNlbmRpZgorCisvKiBWYXJpYWJsZSA6IGRlZmF1bHRfbnVtX2NvbnRleHRzCisJTm90IHVzZWQgZm9yIHRoaXMgc2ltcGxlIHBvcnQsIG11c3QgY2ludGFpbiB0aGUgdmFsdWUgMS4KKyovCitleHRlcm4gZWVfdTMyIGRlZmF1bHRfbnVtX2NvbnRleHRzOworCit0eXBlZGVmIHN0cnVjdCBDT1JFX1BPUlRBQkxFX1MgeworCWVlX3U4CXBvcnRhYmxlX2lkOworfSBjb3JlX3BvcnRhYmxlOworCisvKiB0YXJnZXQgc3BlY2lmaWMgaW5pdC9maW5pICovCit2b2lkIHBvcnRhYmxlX2luaXQoY29yZV9wb3J0YWJsZSAqcCwgaW50ICphcmdjLCBjaGFyICphcmd2W10pOwordm9pZCBwb3J0YWJsZV9maW5pKGNvcmVfcG9ydGFibGUgKnApOworCisjaWYgIWRlZmluZWQoUFJPRklMRV9SVU4pICYmICFkZWZpbmVkKFBFUkZPUk1BTkNFX1JVTikgJiYgIWRlZmluZWQoVkFMSURBVElPTl9SVU4pCisjaWYgKFRPVEFMX0RBVEFfU0laRT09MTIwMCkKKyNkZWZpbmUgUFJPRklMRV9SVU4gMQorI2VsaWYgKFRPVEFMX0RBVEFfU0laRT09MjAwMCkKKyNkZWZpbmUgUEVSRk9STUFOQ0VfUlVOIDEKKyNlbHNlCisjZGVmaW5lIFZBTElEQVRJT05fUlVOIDEKKyNlbmRpZgorI2VuZGlmCisKK3R5cGVkZWYgZWVfczE2IE1BVERBVDsKK3R5cGVkZWYgZWVfczMyIE1BVFJFUzsKKworCitlZV91MTYgY3JjdTgoZWVfdTggZGF0YSwgZWVfdTE2IGNyYyApIF9fYXR0cmlidXRlX18gKChob3QpKTsKK2VlX3UxNiBjcmN1MTYoZWVfdTE2IG5ld3ZhbCwgZWVfdTE2IGNyYykgX19hdHRyaWJ1dGVfXyAoKGhvdCkpOworZWVfdTE2IGNyY3UzMihlZV91MzIgbmV3dmFsLCBlZV91MTYgY3JjKSBfX2F0dHJpYnV0ZV9fICgoaG90KSk7CitlZV91MTYgY3JjMTYoZWVfczE2IG5ld3ZhbCwgZWVfdTE2IGNyYykgX19hdHRyaWJ1dGVfXyAoKGhvdCkpOworZWVfczE2IG1hdHJpeF9zdW0oZWVfdTMyIE4sIE1BVFJFUyAqQywgTUFUREFUIGNsaXB2YWwpIF9fYXR0cmlidXRlX18gKChob3QpKTsKK3ZvaWQgbWF0cml4X211bF9jb25zdChlZV91MzIgTiwgTUFUUkVTICpDLCBNQVREQVQgKkEsIE1BVERBVCB2YWwpIF9fYXR0cmlidXRlX18gKChob3QpKTsKK3ZvaWQgbWF0cml4X211bF92ZWN0KGVlX3UzMiBOLCBNQVRSRVMgKkMsIE1BVERBVCAqQSwgTUFUREFUICpCKSBfX2F0dHJpYnV0ZV9fICgoaG90KSk7Cit2b2lkIG1hdHJpeF9tdWxfbWF0cml4KGVlX3UzMiBOLCBNQVRSRVMgKkMsIE1BVERBVCAqQSwgTUFUREFUICpCKSBfX2F0dHJpYnV0ZV9fICgoaG90KSk7Cit2b2lkIG1hdHJpeF9tdWxfbWF0cml4X2JpdGV4dHJhY3QoZWVfdTMyIE4sIE1BVFJFUyAqQywgTUFUREFUICpBLCBNQVREQVQgKkIpIF9fYXR0cmlidXRlX18gKChob3QpKTsKK3ZvaWQgbWF0cml4X2FkZF9jb25zdChlZV91MzIgTiwgTUFUREFUICpBLCBNQVREQVQgdmFsKSBfX2F0dHJpYnV0ZV9fICgoaG90KSk7CisKKyNlbmRpZiAvKiBDT1JFX1BPUlRNRV9IICovCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvYmVuY2htYXJrcy9kaHJ5c3RvbmUyMS9NYWtlZmlsZSBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9iZW5jaG1hcmtzL2RocnlzdG9uZTIxL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwNTY0ODkKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvYmVuY2htYXJrcy9kaHJ5c3RvbmUyMS9NYWtlZmlsZQpAQCAtMCwwICsxLDE2IEBACitzcmNfZGlyIDo9ICQoZGlyICQobGFzdHdvcmQgJChNQUtFRklMRV9MSVNUKSkpCisKK0FERF9GTEFHUyAgIDo9IC1mbHRvCitBRERfQ0ZMQUdTICA6PSAtRFNFTEZfVElNRUQ9MSAtRFRJTUU9MQorCitjX3NyYyA6PSBzY19wcmludC5jIGRocnlfMS5jIGRocnlfMi5jCisKK2luY2x1ZGUgJChpbmNfZGlyKS9jb21tb24ubWsKKworZGVmYXVsdDogbG9nX3JlcXVlc3RlZF90Z3QgJChibGRfZGlyKS9kaHJ5c3RvbmUyMS5lbGYgJChibGRfZGlyKS9kaHJ5c3RvbmUyMS5oZXggJChibGRfZGlyKS9kaHJ5c3RvbmUyMS5kdW1wCisKK2xvZ19yZXF1ZXN0ZWRfdGd0OgorCUBlY2hvIGRocnlzdG9uZTIxLmhleD4+ICQoYmxkX2RpcikvdGVzdF9pbmZvCisKK2NsZWFuOgorCSQoUk0pICQoY19vYmpzKSAkKGFzbV9vYmpzKSAkKGJsZF9kaXIpL2RocnlzdG9uZTIxLmVsZiAkKGJsZF9kaXIpL2RocnlzdG9uZTIxLmhleCAkKGJsZF9kaXIpL2RocnlzdG9uZTIxLmR1bXAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvYmVuY2htYXJrcy9kaHJ5c3RvbmUyMS9kaHJ5LmggYi92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvYmVuY2htYXJrcy9kaHJ5c3RvbmUyMS9kaHJ5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JhMDA1OQotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9iZW5jaG1hcmtzL2RocnlzdG9uZTIxL2RocnkuaApAQCAtMCwwICsxLDQ0NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgVGhlIEJZVEUgVU5JWCBCZW5jaG1hcmtzIC0gUmVsZWFzZSAzCisgKiAgICAgICAgICBNb2R1bGU6IGRocnkuaCAgIFNJRDogMy40IDUvMTUvOTEgMTk6MzA6MjEKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEJ1ZyByZXBvcnRzLCBwYXRjaGVzLCBjb21tZW50cywgc3VnZ2VzdGlvbnMgc2hvdWxkIGJlIHNlbnQgdG86CisgKgorICoJQmVuIFNtaXRoLCBSaWNrIEdyZWhhbiBvciBUb20gWWFnZXIKKyAqCWJlbkBieXRlcGIuYnl0ZS5jb20gICByaWNrX2dAYnl0ZXBiLmJ5dGUuY29tICAgdHlhZ2VyQGJ5dGVwYi5ieXRlLmNvbQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIE1vZGlmaWNhdGlvbiBMb2c6CisgKiAgYWRkYXB0ZWQgZnJvbToKKyAqCisgKgorICogICAgICAgICAgICAgICAgICAgIkRIUllTVE9ORSIgQmVuY2htYXJrIFByb2dyYW0KKyAqICAgICAgICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogIFZlcnNpb246ICAgIEMsIFZlcnNpb24gMi4xCisgKgorICogIEZpbGU6ICAgICAgIGRocnkuaCAocGFydCAxIG9mIDMpCisgKgorICogIERhdGU6ICAgICAgIE1heSAyNSwgMTk4OAorICoKKyAqICBBdXRob3I6ICAgICBSZWluaG9sZCBQLiBXZWlja2VyCisgKiAgICAgICAgICAgICAgICAgICAgICBTaWVtZW5zIEFHLCBBVVQgRSA1MQorICogICAgICAgICAgICAgICAgICAgICAgUG9zdGZhY2ggMzIyMAorICogICAgICAgICAgICAgICAgICAgICAgODUyMCBFcmxhbmdlbgorICogICAgICAgICAgICAgICAgICAgICAgR2VybWFueSAoV2VzdCkKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGhvbmU6ICBbKzQ5XS05MTMxLTctMjAzMzAKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoOC0xNyBDZW50cmFsIEV1cm9wZWFuIFRpbWUpCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZW5ldDogLi4hbWN2YXghdW5pZG8hZXN0ZXZheCF3ZWlja2VyCisgKgorICogICAgICAgICAgICAgIE9yaWdpbmFsIFZlcnNpb24gKGluIEFkYSkgcHVibGlzaGVkIGluCisgKiAgICAgICAgICAgICAgIkNvbW11bmljYXRpb25zIG9mIHRoZSBBQ00iIHZvbC4gMjcuLCBuby4gMTAgKE9jdC4gMTk4NCksCisgKiAgICAgICAgICAgICAgcHAuIDEwMTMgLSAxMDMwLCB0b2dldGhlciB3aXRoIHRoZSBzdGF0aXN0aWNzCisgKiAgICAgICAgICAgICAgb24gd2hpY2ggdGhlIGRpc3RyaWJ1dGlvbiBvZiBzdGF0ZW1lbnRzIGV0Yy4gaXMgYmFzZWQuCisgKgorICogICAgICAgICAgICAgIEluIHRoaXMgQyB2ZXJzaW9uLCB0aGUgZm9sbG93aW5nIEMgbGlicmFyeSBmdW5jdGlvbnMgYXJlIHVzZWQ6CisgKiAgICAgICAgICAgICAgLSBzdHJjcHksIHN0cmNtcCAoaW5zaWRlIHRoZSBtZWFzdXJlbWVudCBsb29wKQorICogICAgICAgICAgICAgIC0gcHJpbnRmLCBzY2FuZiAob3V0c2lkZSB0aGUgbWVhc3VyZW1lbnQgbG9vcCkKKyAqICAgICAgICAgICAgICBJbiBhZGRpdGlvbiwgQmVya2VsZXkgVU5JWCBzeXN0ZW0gY2FsbHMgInRpbWVzICgpIiBvciAidGltZSAoKSIKKyAqICAgICAgICAgICAgICBhcmUgdXNlZCBmb3IgZXhlY3V0aW9uIHRpbWUgbWVhc3VyZW1lbnQuIEZvciBtZWFzdXJlbWVudHMKKyAqICAgICAgICAgICAgICBvbiBvdGhlciBzeXN0ZW1zLCB0aGVzZSBjYWxscyBoYXZlIHRvIGJlIGNoYW5nZWQuCisgKgorICogIENvbGxlY3Rpb24gb2YgUmVzdWx0czoKKyAqICAgICAgICAgICAgICBSZWluaG9sZCBXZWlja2VyIChhZGRyZXNzIHNlZSBhYm92ZSkgYW5kCisgKgorICogICAgICAgICAgICAgIFJpY2sgUmljaGFyZHNvbgorICogICAgICAgICAgICAgIFBDIFJlc2VhcmNoLiBJbmMuCisgKiAgICAgICAgICAgICAgOTQgQXBwbGUgT3JjaGFyZCBEcml2ZQorICogICAgICAgICAgICAgIFRpbnRvbiBGYWxscywgTkogMDc3MjQKKyAqICAgICAgICAgICAgICAgICAgICAgIFBob25lOiAgKDIwMSkgODM0LTEzNzggKDktMTcgRVNUKQorICogICAgICAgICAgICAgICAgICAgICAgVXNlbmV0OiAuLi4hc2Vpc21vIXV1bmV0IXBjcmF0IXJpY2sKKyAqCisgKiAgICAgIFBsZWFzZSBzZW5kIHJlc3VsdHMgdG8gUmljayBSaWNoYXJkc29uIGFuZC9vciBSZWluaG9sZCBXZWlja2VyLgorICogICAgICBDb21wbGV0ZSBpbmZvcm1hdGlvbiBzaG91bGQgYmUgZ2l2ZW4gb24gaGFyZHdhcmUgYW5kIHNvZnR3YXJlIHVzZWQuCisgKiAgICAgIEhhcmR3YXJlIGluZm9ybWF0aW9uIGluY2x1ZGVzOiBNYWNoaW5lIHR5cGUsIENQVSwgdHlwZSBhbmQgc2l6ZQorICogICAgICBvZiBjYWNoZXM7IGZvciBtaWNyb3Byb2Nlc3NvcnM6IGNsb2NrIGZyZXF1ZW5jeSwgbWVtb3J5IHNwZWVkCisgKiAgICAgIChudW1iZXIgb2Ygd2FpdCBzdGF0ZXMpLgorICogICAgICBTb2Z0d2FyZSBpbmZvcm1hdGlvbiBpbmNsdWRlczogQ29tcGlsZXIgKGFuZCBydW50aW1lIGxpYnJhcnkpCisgKiAgICAgIG1hbnVmYWN0dXJlciBhbmQgdmVyc2lvbiwgY29tcGlsYXRpb24gc3dpdGNoZXMsIE9TIHZlcnNpb24uCisgKiAgICAgIFRoZSBPcGVyYXRpbmcgU3lzdGVtIHZlcnNpb24gbWF5IGdpdmUgYW4gaW5kaWNhdGlvbiBhYm91dCB0aGUKKyAqICAgICAgY29tcGlsZXI7IERocnlzdG9uZSBpdHNlbGYgcGVyZm9ybXMgbm8gT1MgY2FsbHMgaW4gdGhlIG1lYXN1cmVtZW50IGxvb3AuCisgKgorICogICAgICBUaGUgY29tcGxldGUgb3V0cHV0IGdlbmVyYXRlZCBieSB0aGUgcHJvZ3JhbSBzaG91bGQgYmUgbWFpbGVkCisgKiAgICAgIHN1Y2ggdGhhdCBhdCBsZWFzdCBzb21lIGNoZWNrcyBmb3IgY29ycmVjdG5lc3MgY2FuIGJlIG1hZGUuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICBIaXN0b3J5OiAgICBUaGlzIHZlcnNpb24gQy8yLjEgaGFzIGJlZW4gbWFkZSBmb3IgdHdvIHJlYXNvbnM6CisgKgorICogICAgICAgICAgICAgIDEpIFRoZXJlIGlzIGFuIG9idmlvdXMgbmVlZCBmb3IgYSBjb21tb24gQyB2ZXJzaW9uIG9mCisgKiAgICAgICAgICAgICAgRGhyeXN0b25lLCBzaW5jZSBDIGlzIGF0IHByZXNlbnQgdGhlIG1vc3QgcG9wdWxhciBzeXN0ZW0KKyAqICAgICAgICAgICAgICBwcm9ncmFtbWluZyBsYW5ndWFnZSBmb3IgdGhlIGNsYXNzIG9mIHByb2Nlc3NvcnMKKyAqICAgICAgICAgICAgICAobWljcm9jb21wdXRlcnMsIG1pbmljb21wdXRlcnMpIHdoZXJlIERocnlzdG9uZSBpcyB1c2VkIG1vc3QuCisgKiAgICAgICAgICAgICAgVGhlcmUgc2hvdWxkIGJlLCBhcyBmYXIgYXMgcG9zc2libGUsIG9ubHkgb25lIEMgdmVyc2lvbiBvZgorICogICAgICAgICAgICAgIERocnlzdG9uZSBzdWNoIHRoYXQgcmVzdWx0cyBjYW4gYmUgY29tcGFyZWQgd2l0aG91dAorICogICAgICAgICAgICAgIHJlc3RyaWN0aW9ucy4gSW4gdGhlIHBhc3QsIHRoZSBDIHZlcnNpb25zIGRpc3RyaWJ1dGVkCisgKiAgICAgICAgICAgICAgYnkgUmljayBSaWNoYXJkc29uIChWZXJzaW9uIDEuMSkgYW5kIGJ5IFJlaW5ob2xkIFdlaWNrZXIKKyAqICAgICAgICAgICAgICBoYWQgc21hbGwgKHRob3VnaCBub3Qgc2lnbmlmaWNhbnQpIGRpZmZlcmVuY2VzLgorICoKKyAqICAgICAgICAgICAgICAyKSBBcyBmYXIgYXMgaXQgaXMgcG9zc2libGUgd2l0aG91dCBjaGFuZ2VzIHRvIHRoZSBEaHJ5c3RvbmUKKyAqICAgICAgICAgICAgICBzdGF0aXN0aWNzLCBvcHRpbWl6aW5nIGNvbXBpbGVycyBzaG91bGQgYmUgcHJldmVudGVkIGZyb20KKyAqICAgICAgICAgICAgICByZW1vdmluZyBzaWduaWZpY2FudCBzdGF0ZW1lbnRzLgorICoKKyAqICAgICAgICAgICAgICBUaGlzIEMgdmVyc2lvbiBoYXMgYmVlbiBkZXZlbG9wZWQgaW4gY29vcGVyYXRpb24gd2l0aAorICogICAgICAgICAgICAgIFJpY2sgUmljaGFyZHNvbiAoVGludG9uIEZhbGxzLCBOSiksIGl0IGluY29ycG9yYXRlcyBtYW55CisgKiAgICAgICAgICAgICAgaWRlYXMgZnJvbSB0aGUgIlZlcnNpb24gMS4xIiBkaXN0cmlidXRlZCBwcmV2aW91c2x5IGJ5CisgKiAgICAgICAgICAgICAgaGltIG92ZXIgdGhlIFVOSVggbmV0d29yayBVc2VuZXQuCisgKiAgICAgICAgICAgICAgSSBhbHNvIHRoYW5rIENoYWltIEJlbmVkZWxhYyAoTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciksCisgKiAgICAgICAgICAgICAgRGF2aWQgRGl0emVsIChTVU4pLCBFYXJsIEtpbGxpYW4gYW5kIEpvaG4gTWFzaGV5IChNSVBTKSwKKyAqICAgICAgICAgICAgICBBbGFuIFNtaXRoIGFuZCBSYWZhZWwgU2FhdmVkcmEtQmFycmVyYSAoVUMgYXQgQmVya2VsZXkpCisgKiAgICAgICAgICAgICAgZm9yIHRoZWlyIGhlbHAgd2l0aCBjb21tZW50cyBvbiBlYXJsaWVyIHZlcnNpb25zIG9mIHRoZQorICogICAgICAgICAgICAgIGJlbmNobWFyay4KKyAqCisgKiAgQ2hhbmdlczogICAgSW4gdGhlIGluaXRpYWxpemF0aW9uIHBhcnQsIHRoaXMgdmVyc2lvbiBmb2xsb3dzIG1vc3RseQorICogICAgICAgICAgICAgIFJpY2sgUmljaGFyZHNvbidzIHZlcnNpb24gZGlzdHJpYnV0ZWQgdmlhIFVzZW5ldCwgbm90IHRoZQorICogICAgICAgICAgICAgIHZlcnNpb24gZGlzdHJpYnV0ZWQgZWFybGllciB2aWEgZmxvcHB5IGRpc2sgYnkgUmVpbmhvbGQgV2VpY2tlci4KKyAqICAgICAgICAgICAgICBBcyBhIGNvbmNlc3Npb24gdG8gb2xkZXIgY29tcGlsZXJzLCBuYW1lcyBoYXZlIGJlZW4gbWFkZQorICogICAgICAgICAgICAgIHVuaXF1ZSB3aXRoaW4gdGhlIGZpcnN0IDggY2hhcmFjdGVycy4KKyAqICAgICAgICAgICAgICBJbnNpZGUgdGhlIG1lYXN1cmVtZW50IGxvb3AsIHRoaXMgdmVyc2lvbiBmb2xsb3dzIHRoZQorICogICAgICAgICAgICAgIHZlcnNpb24gcHJldmlvdXNseSBkaXN0cmlidXRlZCBieSBSZWluaG9sZCBXZWlja2VyLgorICoKKyAqICAgICAgICAgICAgICBBdCBzZXZlcmFsIHBsYWNlcyBpbiB0aGUgYmVuY2htYXJrLCBjb2RlIGhhcyBiZWVuIGFkZGVkLAorICogICAgICAgICAgICAgIGJ1dCB3aXRoaW4gdGhlIG1lYXN1cmVtZW50IGxvb3Agb25seSBpbiBicmFuY2hlcyB0aGF0CisgKiAgICAgICAgICAgICAgYXJlIG5vdCBleGVjdXRlZC4gVGhlIGludGVudGlvbiBpcyB0aGF0IG9wdGltaXppbmcgY29tcGlsZXJzCisgKiAgICAgICAgICAgICAgc2hvdWxkIGJlIHByZXZlbnRlZCBmcm9tIG1vdmluZyBjb2RlIG91dCBvZiB0aGUgbWVhc3VyZW1lbnQKKyAqICAgICAgICAgICAgICBsb29wLCBvciBmcm9tIHJlbW92aW5nIGNvZGUgYWx0b2dldGhlci4gU2luY2UgdGhlIHN0YXRlbWVudHMKKyAqICAgICAgICAgICAgICB0aGF0IGFyZSBleGVjdXRlZCB3aXRoaW4gdGhlIG1lYXN1cmVtZW50IGxvb3AgaGF2ZSBOT1QgYmVlbgorICogICAgICAgICAgICAgIGNoYW5nZWQsIHRoZSBudW1iZXJzIGRlZmluaW5nIHRoZSAiRGhyeXN0b25lIGRpc3RyaWJ1dGlvbiIKKyAqICAgICAgICAgICAgICAoZGlzdHJpYnV0aW9uIG9mIHN0YXRlbWVudHMsIG9wZXJhbmQgdHlwZXMgYW5kIGxvY2FsaXR5KQorICogICAgICAgICAgICAgIHN0aWxsIGhvbGQuIEV4Y2VwdCBmb3Igc29waGlzdGljYXRlZCBvcHRpbWl6aW5nIGNvbXBpbGVycywKKyAqICAgICAgICAgICAgICBleGVjdXRpb24gdGltZXMgZm9yIHRoaXMgdmVyc2lvbiBzaG91bGQgYmUgdGhlIHNhbWUgYXMKKyAqICAgICAgICAgICAgICBmb3IgcHJldmlvdXMgdmVyc2lvbnMuCisgKgorICogICAgICAgICAgICAgIFNpbmNlIGl0IGhhcyBwcm92ZW4gZGlmZmljdWx0IHRvIHN1YnRyYWN0IHRoZSB0aW1lIGZvciB0aGUKKyAqICAgICAgICAgICAgICBtZWFzdXJlbWVudCBsb29wIG92ZXJoZWFkIGluIGEgY29ycmVjdCB3YXksIHRoZSBsb29wIGNoZWNrCisgKiAgICAgICAgICAgICAgaGFzIGJlZW4gbWFkZSBhIHBhcnQgb2YgdGhlIGJlbmNobWFyay4gVGhpcyBkb2VzIGhhdmUKKyAqICAgICAgICAgICAgICBhbiBpbXBhY3QgLSB0aG91Z2ggYSB2ZXJ5IG1pbm9yIG9uZSAtIG9uIHRoZSBkaXN0cmlidXRpb24KKyAqICAgICAgICAgICAgICBzdGF0aXN0aWNzIHdoaWNoIGhhdmUgYmVlbiB1cGRhdGVkIGZvciB0aGlzIHZlcnNpb24uCisgKgorICogICAgICAgICAgICAgIEFsbCBjaGFuZ2VzIHdpdGhpbiB0aGUgbWVhc3VyZW1lbnQgbG9vcCBhcmUgZGVzY3JpYmVkCisgKiAgICAgICAgICAgICAgYW5kIGRpc2N1c3NlZCBpbiB0aGUgY29tcGFuaW9uIHBhcGVyICJSYXRpb25hbGUgZm9yCisgKiAgICAgICAgICAgICAgRGhyeXN0b25lIHZlcnNpb24gMiIuCisgKgorICogICAgICAgICAgICAgIEJlY2F1c2Ugb2YgdGhlIHNlbGYtaW1wb3NlZCBsaW1pdGF0aW9uIHRoYXQgdGhlIG9yZGVyIGFuZAorICogICAgICAgICAgICAgIGRpc3RyaWJ1dGlvbiBvZiB0aGUgZXhlY3V0ZWQgc3RhdGVtZW50cyBzaG91bGQgbm90IGJlCisgKiAgICAgICAgICAgICAgY2hhbmdlZCwgdGhlcmUgYXJlIHN0aWxsIGNhc2VzIHdoZXJlIG9wdGltaXppbmcgY29tcGlsZXJzCisgKiAgICAgICAgICAgICAgbWF5IG5vdCBnZW5lcmF0ZSBjb2RlIGZvciBzb21lIHN0YXRlbWVudHMuIFRvIGEgY2VydGFpbgorICogICAgICAgICAgICAgIGRlZ3JlZSwgdGhpcyBpcyB1bmF2b2lkYWJsZSBmb3Igc21hbGwgc3ludGhldGljIGJlbmNobWFya3MuCisgKiAgICAgICAgICAgICAgVXNlcnMgb2YgdGhlIGJlbmNobWFyayBhcmUgYWR2aXNlZCB0byBjaGVjayBjb2RlIGxpc3RpbmdzCisgKiAgICAgICAgICAgICAgd2hldGhlciBjb2RlIGlzIGdlbmVyYXRlZCBmb3IgYWxsIHN0YXRlbWVudHMgb2YgRGhyeXN0b25lLgorICoKKyAqICAgICAgICAgICAgICBWZXJzaW9uIDIuMSBpcyBpZGVudGljYWwgdG8gdmVyc2lvbiAyLjAgZGlzdHJpYnV0ZWQgdmlhCisgKiAgICAgICAgICAgICAgdGhlIFVOSVggbmV0d29yayBVc2VuZXQgaW4gTWFyY2ggMTk4OCBleGNlcHQgdGhhdCBpdCBjb3JyZWN0cworICogICAgICAgICAgICAgIHNvbWUgbWlub3IgZGVmaWNpZW5jaWVzIHRoYXQgd2VyZSBmb3VuZCBieSB1c2VycyBvZiB2ZXJzaW9uIDIuMC4KKyAqICAgICAgICAgICAgICBUaGUgb25seSBjaGFuZ2Ugd2l0aGluIHRoZSBtZWFzdXJlbWVudCBsb29wIGlzIHRoYXQgYQorICogICAgICAgICAgICAgIG5vbi1leGVjdXRlZCAiZWxzZSIgcGFydCB3YXMgYWRkZWQgdG8gdGhlICJpZiIgc3RhdGVtZW50IGluCisgKiAgICAgICAgICAgICAgRnVuY18zLCBhbmQgYSBub24tZXhlY3V0ZWQgImVsc2UiIHBhcnQgcmVtb3ZlZCBmcm9tIFByb2NfMy4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogRGVmaW5lczogICAgIFRoZSBmb2xsb3dpbmcgIkRlZmluZXMiIGFyZSBwb3NzaWJsZToKKyAqICAgICAgICAgICAgICAtRFJFRz1yZWdpc3RlciAgICAgICAgICAoZGVmYXVsdDogTm90IGRlZmluZWQpCisgKiAgICAgICAgICAgICAgICAgICAgICBBcyBhbiBhcHByb3hpbWF0aW9uIHRvIHdoYXQgYW4gYXZlcmFnZSBDIHByb2dyYW1tZXIKKyAqICAgICAgICAgICAgICAgICAgICAgIG1pZ2h0IGRvLCB0aGUgInJlZ2lzdGVyIiBzdG9yYWdlIGNsYXNzIGlzIGFwcGxpZWQKKyAqICAgICAgICAgICAgICAgICAgICAgIChpZiBlbmFibGVkIGJ5IC1EUkVHPXJlZ2lzdGVyKQorICogICAgICAgICAgICAgICAgICAgICAgLSBmb3IgbG9jYWwgdmFyaWFibGVzLCBpZiB0aGV5IGFyZSB1c2VkIChkeW5hbWljYWxseSkKKyAqICAgICAgICAgICAgICAgICAgICAgICAgZml2ZSBvciBtb3JlIHRpbWVzCisgKiAgICAgICAgICAgICAgICAgICAgICAtIGZvciBwYXJhbWV0ZXJzIGlmIHRoZXkgYXJlIHVzZWQgKGR5bmFtaWNhbGx5KQorICogICAgICAgICAgICAgICAgICAgICAgICBzaXggb3IgbW9yZSB0aW1lcworICogICAgICAgICAgICAgICAgICAgICAgTm90ZSB0aGF0IGFuIG9wdGltYWwgInJlZ2lzdGVyIiBzdHJhdGVneSBpcworICogICAgICAgICAgICAgICAgICAgICAgY29tcGlsZXItZGVwZW5kZW50LCBhbmQgdGhhdCAicmVnaXN0ZXIiIGRlY2xhcmF0aW9ucworICogICAgICAgICAgICAgICAgICAgICAgZG8gbm90IG5lY2Vzc2FyaWx5IGxlYWQgdG8gZmFzdGVyIGV4ZWN1dGlvbi4KKyAqICAgICAgICAgICAgICAtRE5PU1RSVUNUQVNTSUdOICAgICAgICAoZGVmYXVsdDogTm90IGRlZmluZWQpCisgKiAgICAgICAgICAgICAgICAgICAgICBEZWZpbmUgaWYgdGhlIEMgY29tcGlsZXIgZG9lcyBub3Qgc3VwcG9ydAorICogICAgICAgICAgICAgICAgICAgICAgYXNzaWdubWVudCBvZiBzdHJ1Y3R1cmVzLgorICogICAgICAgICAgICAgIC1ETk9FTlVNUyAgICAgICAgICAgICAgIChkZWZhdWx0OiBOb3QgZGVmaW5lZCkKKyAqICAgICAgICAgICAgICAgICAgICAgIERlZmluZSBpZiB0aGUgQyBjb21waWxlciBkb2VzIG5vdCBzdXBwb3J0CisgKiAgICAgICAgICAgICAgICAgICAgICBlbnVtZXJhdGlvbiB0eXBlcy4KKyAqICAgICAgICAgICAgICAtRFRJTUVTICAgICAgICAgICAgICAgICAoZGVmYXVsdCkKKyAqICAgICAgICAgICAgICAtRFRJTUUKKyAqICAgICAgICAgICAgICAgICAgICAgIFRoZSAidGltZXMiIGZ1bmN0aW9uIG9mIFVOSVggKHJldHVybmluZyBwcm9jZXNzIHRpbWVzKQorICogICAgICAgICAgICAgICAgICAgICAgb3IgdGhlICJ0aW1lIiBmdW5jdGlvbiAocmV0dXJuaW5nIHdhbGxjbG9jayB0aW1lKQorICogICAgICAgICAgICAgICAgICAgICAgaXMgdXNlZCBmb3IgbWVhc3VyZW1lbnQuCisgKiAgICAgICAgICAgICAgICAgICAgICBGb3Igc2luZ2xlIHVzZXIgbWFjaGluZXMsICJ0aW1lICgpIiBpcyBhZGVxdWF0ZS4gRm9yCisgKiAgICAgICAgICAgICAgICAgICAgICBtdWx0aS11c2VyIG1hY2hpbmVzIHdoZXJlIHlvdSBjYW5ub3QgZ2V0IHNpbmdsZS11c2VyCisgKiAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3MsIHVzZSB0aGUgInRpbWVzICgpIiBmdW5jdGlvbi4gSWYgeW91IGhhdmUKKyAqICAgICAgICAgICAgICAgICAgICAgIG5laXRoZXIsIHVzZSBhIHN0b3B3YXRjaCBpbiB0aGUgZGVhZCBvZiBuaWdodC4KKyAqICAgICAgICAgICAgICAgICAgICAgICJwcmludGYicyBhcmUgcHJvdmlkZWQgbWFya2luZyB0aGUgcG9pbnRzICJTdGFydCBUaW1lciIKKyAqICAgICAgICAgICAgICAgICAgICAgIGFuZCAiU3RvcCBUaW1lciIuIERPIE5PVCB1c2UgdGhlIFVOSVggInRpbWUoMSkiCisgKiAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLCBhcyB0aGlzIHdpbGwgbWVhc3VyZSB0aGUgdG90YWwgdGltZSB0bworICogICAgICAgICAgICAgICAgICAgICAgcnVuIHRoaXMgcHJvZ3JhbSwgd2hpY2ggd2lsbCAoZXJyb25lb3VzbHkpIGluY2x1ZGUKKyAqICAgICAgICAgICAgICAgICAgICAgIHRoZSB0aW1lIHRvIGFsbG9jYXRlIHN0b3JhZ2UgKG1hbGxvYykgYW5kIHRvIHBlcmZvcm0KKyAqICAgICAgICAgICAgICAgICAgICAgIHRoZSBpbml0aWFsaXphdGlvbi4KKyAqICAgICAgICAgICAgICAtREhaPW5ubgorICogICAgICAgICAgICAgICAgICAgICAgSW4gQmVya2VsZXkgVU5JWCwgdGhlIGZ1bmN0aW9uICJ0aW1lcyIgcmV0dXJucyBwcm9jZXNzCisgKiAgICAgICAgICAgICAgICAgICAgICB0aW1lIGluIDEvSFogc2Vjb25kcywgd2l0aCBIWiA9IDYwIGZvciBtb3N0IHN5c3RlbXMuCisgKiAgICAgICAgICAgICAgICAgICAgICBDSEVDSyBZT1VSIFNZU1RFTSBERVNDUklQVElPTiBCRUZPUkUgWU9VIEpVU1QgQVBQTFkKKyAqICAgICAgICAgICAgICAgICAgICAgIEEgVkFMVUUuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICBDb21waWxhdGlvbiBtb2RlbCBhbmQgbWVhc3VyZW1lbnQgKElNUE9SVEFOVCk6CisgKgorICogIFRoaXMgQyB2ZXJzaW9uIG9mIERocnlzdG9uZSBjb25zaXN0cyBvZiB0aHJlZSBmaWxlczoKKyAqICAtIGRocnkuaCAodGhpcyBmaWxlLCBjb250YWluaW5nIGdsb2JhbCBkZWZpbml0aW9ucyBhbmQgY29tbWVudHMpCisgKiAgLSBkaHJ5XzEuYyAoY29udGFpbmluZyB0aGUgY29kZSBjb3JyZXNwb25kaW5nIHRvIEFkYSBwYWNrYWdlIFBhY2tfMSkKKyAqICAtIGRocnlfMi5jIChjb250YWluaW5nIHRoZSBjb2RlIGNvcnJlc3BvbmRpbmcgdG8gQWRhIHBhY2thZ2UgUGFja18yKQorICoKKyAqICBUaGUgZm9sbG93aW5nICJncm91bmQgcnVsZXMiIGFwcGx5IGZvciBtZWFzdXJlbWVudHM6CisgKiAgLSBTZXBhcmF0ZSBjb21waWxhdGlvbgorICogIC0gTm8gcHJvY2VkdXJlIG1lcmdpbmcKKyAqICAtIE90aGVyd2lzZSwgY29tcGlsZXIgb3B0aW1pemF0aW9ucyBhcmUgYWxsb3dlZCBidXQgc2hvdWxkIGJlIGluZGljYXRlZAorICogIC0gRGVmYXVsdCByZXN1bHRzIGFyZSB0aG9zZSB3aXRob3V0IHJlZ2lzdGVyIGRlY2xhcmF0aW9ucworICogIFNlZSB0aGUgY29tcGFuaW9uIHBhcGVyICJSYXRpb25hbGUgZm9yIERocnlzdG9uZSBWZXJzaW9uIDIiIGZvciBhIG1vcmUKKyAqICBkZXRhaWxlZCBkaXNjdXNzaW9uIG9mIHRoZXNlIGdyb3VuZCBydWxlcy4KKyAqCisgKiAgRm9yIDE2LUJpdCBwcm9jZXNzb3JzIChlLmcuIDgwMTg2LCA4MDI4NiksIHRpbWVzIGZvciBhbGwgY29tcGlsYXRpb24KKyAqICBtb2RlbHMgKCJzbWFsbCIsICJtZWRpdW0iLCAibGFyZ2UiIGV0Yy4pIHNob3VsZCBiZSBnaXZlbiBpZiBwb3NzaWJsZSwKKyAqICB0b2dldGhlciB3aXRoIGEgZGVmaW5pdGlvbiBvZiB0aGVzZSBtb2RlbHMgZm9yIHRoZSBjb21waWxlciBzeXN0ZW0gdXNlZC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAgRGhyeXN0b25lIChDIHZlcnNpb24pIHN0YXRpc3RpY3M6CisgKgorICogIFtDb21tZW50IGZyb20gdGhlIGZpcnN0IGRpc3RyaWJ1dGlvbiwgdXBkYXRlZCBmb3IgdmVyc2lvbiAyLgorICogICBOb3RlIHRoYXQgYmVjYXVzZSBvZiBsYW5ndWFnZSBkaWZmZXJlbmNlcywgdGhlIG51bWJlcnMgYXJlIHNsaWdodGx5CisgKiAgIGRpZmZlcmVudCBmcm9tIHRoZSBBZGEgdmVyc2lvbi5dCisgKgorICogIFRoZSBmb2xsb3dpbmcgcHJvZ3JhbSBjb250YWlucyBzdGF0ZW1lbnRzIG9mIGEgaGlnaCBsZXZlbCBwcm9ncmFtbWluZworICogIGxhbmd1YWdlIChoZXJlOiBDKSBpbiBhIGRpc3RyaWJ1dGlvbiBjb25zaWRlcmVkIHJlcHJlc2VudGF0aXZlOgorICoKKyAqICAgIGFzc2lnbm1lbnRzICAgICAgICAgICAgICAgICAgNTIgKDUxLjAgJSkKKyAqICAgIGNvbnRyb2wgc3RhdGVtZW50cyAgICAgICAgICAgMzMgKDMyLjQgJSkKKyAqICAgIHByb2NlZHVyZSwgZnVuY3Rpb24gY2FsbHMgICAgMTcgKDE2LjcgJSkKKyAqCisgKiAgMTAzIHN0YXRlbWVudHMgYXJlIGR5bmFtaWNhbGx5IGV4ZWN1dGVkLiBUaGUgcHJvZ3JhbSBpcyBiYWxhbmNlZCB3aXRoCisgKiAgcmVzcGVjdCB0byB0aGUgdGhyZWUgYXNwZWN0czoKKyAqCisgKiAgICAtIHN0YXRlbWVudCB0eXBlCisgKiAgICAtIG9wZXJhbmQgdHlwZQorICogICAgLSBvcGVyYW5kIGxvY2FsaXR5CisgKiAgICAgICAgIG9wZXJhbmQgZ2xvYmFsLCBsb2NhbCwgcGFyYW1ldGVyLCBvciBjb25zdGFudC4KKyAqCisgKiAgVGhlIGNvbWJpbmF0aW9uIG9mIHRoZXNlIHRocmVlIGFzcGVjdHMgaXMgYmFsYW5jZWQgb25seSBhcHByb3hpbWF0ZWx5LgorICoKKyAqICAxLiBTdGF0ZW1lbnQgVHlwZToKKyAqICAtLS0tLS0tLS0tLS0tLS0tLSAgICAgICAgICAgICBudW1iZXIKKyAqCisgKiAgICAgVjEgPSBWMiAgICAgICAgICAgICAgICAgICAgIDkKKyAqICAgICAgIChpbmNsLiBWMSA9IEYoLi4pCisgKiAgICAgViA9IENvbnN0YW50ICAgICAgICAgICAgICAgMTIKKyAqICAgICBBc3NpZ25tZW50LCAgICAgICAgICAgICAgICAgNworICogICAgICAgd2l0aCBhcnJheSBlbGVtZW50CisgKiAgICAgQXNzaWdubWVudCwgICAgICAgICAgICAgICAgIDYKKyAqICAgICAgIHdpdGggcmVjb3JkIGNvbXBvbmVudAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzQgICAgICAgMzQKKyAqCisgKiAgICAgWCA9IFkgK3wtfCImJiJ8InwiIFogICAgICAgIDUKKyAqICAgICBYID0gWSArfC18Ij09IiBDb25zdGFudCAgICAgNgorICogICAgIFggPSBYICt8LSAxICAgICAgICAgICAgICAgICAzCisgKiAgICAgWCA9IFkgKnwvIFogICAgICAgICAgICAgICAgIDIKKyAqICAgICBYID0gRXhwcmVzc2lvbiwgICAgICAgICAgICAgMQorICogICAgICAgICAgIHR3byBvcGVyYXRvcnMKKyAqICAgICBYID0gRXhwcmVzc2lvbiwgICAgICAgICAgICAgMQorICogICAgICAgICAgIHRocmVlIG9wZXJhdG9ycworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTggICAgICAgMTgKKyAqCisgKiAgICAgaWYgLi4uLiAgICAgICAgICAgICAgICAgICAgMTQKKyAqICAgICAgIHdpdGggImVsc2UiICAgICAgNworICogICAgICAgd2l0aG91dCAiZWxzZSIgICA3CisgKiAgICAgICAgICAgZXhlY3V0ZWQgICAgICAgIDMKKyAqICAgICAgICAgICBub3QgZXhlY3V0ZWQgICAgNAorICogICAgIGZvciAuLi4gICAgICAgICAgICAgICAgICAgICA3ICB8ICBjb3VudGVkIGV2ZXJ5IHRpbWUKKyAqICAgICB3aGlsZSAuLi4gICAgICAgICAgICAgICAgICAgNCAgfCAgdGhlIGxvb3AgY29uZGl0aW9uCisgKiAgICAgZG8gLi4uIHdoaWxlICAgICAgICAgICAgICAgIDEgIHwgIGlzIGV2YWx1YXRlZAorICogICAgIHN3aXRjaCAuLi4gICAgICAgICAgICAgICAgICAxCisgKiAgICAgYnJlYWsgICAgICAgICAgICAgICAgICAgICAgIDEKKyAqICAgICBkZWNsYXJhdGlvbiB3aXRoICAgICAgICAgICAgMQorICogICAgICAgaW5pdGlhbGl6YXRpb24KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDM0ICAgICAgIDM0CisgKgorICogICAgIFAgKC4uLikgIHByb2NlZHVyZSBjYWxsICAgIDExCisgKiAgICAgICB1c2VyIHByb2NlZHVyZSAgICAgIDEwCisgKiAgICAgICBsaWJyYXJ5IHByb2NlZHVyZSAgICAxCisgKiAgICAgWCA9IEYgKC4uLikKKyAqICAgICAgICAgICAgIGZ1bmN0aW9uICBjYWxsICAgICAgNgorICogICAgICAgdXNlciBmdW5jdGlvbiAgICAgICAgNQorICogICAgICAgbGlicmFyeSBmdW5jdGlvbiAgICAgMQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTcgICAgICAgMTcKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tLQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAzCisgKgorICogICAgVGhlIGF2ZXJhZ2UgbnVtYmVyIG9mIHBhcmFtZXRlcnMgaW4gcHJvY2VkdXJlIG9yIGZ1bmN0aW9uIGNhbGxzCisgKiAgICBpcyAxLjgyIChub3QgY291bnRpbmcgdGhlIGZ1bmN0aW9uIHZhbHVlcyBhcyBpbXBsaWNpdCBwYXJhbWV0ZXJzKS4KKyAqCisgKgorICogIDIuIE9wZXJhdG9ycworICogIC0tLS0tLS0tLS0tLQorICogICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlciAgICBhcHByb3hpbWF0ZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJjZW50YWdlCisgKgorICogICAgQXJpdGhtZXRpYyAgICAgICAgICAgICAzMiAgICAgICAgICA1MC44CisgKgorICogICAgICAgKyAgICAgICAgICAgICAgICAgICAgIDIxICAgICAgICAgIDMzLjMKKyAqICAgICAgIC0gICAgICAgICAgICAgICAgICAgICAgNyAgICAgICAgICAxMS4xCisgKiAgICAgICAqICAgICAgICAgICAgICAgICAgICAgIDMgICAgICAgICAgIDQuOAorICogICAgICAgLyAoaW50IGRpdikgICAgICAgICAgICAxICAgICAgICAgICAxLjYKKyAqCisgKiAgICBDb21wYXJpc29uICAgICAgICAgICAgIDI3ICAgICAgICAgICA0Mi44CisgKgorICogICAgICAgPT0gICAgICAgICAgICAgICAgICAgICA5ICAgICAgICAgICAxNC4zCisgKiAgICAgICAvPSAgICAgICAgICAgICAgICAgICAgIDQgICAgICAgICAgICA2LjMKKyAqICAgICAgID4gICAgICAgICAgICAgICAgICAgICAgMSAgICAgICAgICAgIDEuNgorICogICAgICAgPCAgICAgICAgICAgICAgICAgICAgICAzICAgICAgICAgICAgNC44CisgKiAgICAgICA+PSAgICAgICAgICAgICAgICAgICAgIDEgICAgICAgICAgICAxLjYKKyAqICAgICAgIDw9ICAgICAgICAgICAgICAgICAgICAgOSAgICAgICAgICAgMTQuMworICoKKyAqICAgIExvZ2ljICAgICAgICAgICAgICAgICAgIDQgICAgICAgICAgICA2LjMKKyAqCisgKiAgICAgICAmJiAoQU5ELVRIRU4pICAgICAgICAgIDEgICAgICAgICAgICAxLjYKKyAqICAgICAgIHwgIChPUikgICAgICAgICAgICAgICAgMSAgICAgICAgICAgIDEuNgorICogICAgICAgISAgKE5PVCkgICAgICAgICAgICAgICAyICAgICAgICAgICAgMy4yCisgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAtLSAgICAgICAgICAtLS0tLQorICogICAgICAgICAgICAgICAgICAgICAgICAgICA2MyAgICAgICAgICAxMDAuMQorICoKKyAqCisgKiAgMy4gT3BlcmFuZCBUeXBlIChjb3VudGVkIG9uY2UgcGVyIG9wZXJhbmQgcmVmZXJlbmNlKToKKyAqICAtLS0tLS0tLS0tLS0tLS0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXIgICAgYXBwcm94aW1hdGUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyY2VudGFnZQorICoKKyAqICAgICBJbnRlZ2VyICAgICAgICAgICAgICAgMTc1ICAgICAgICA3Mi4zICUKKyAqICAgICBDaGFyYWN0ZXIgICAgICAgICAgICAgIDQ1ICAgICAgICAxOC42ICUKKyAqICAgICBQb2ludGVyICAgICAgICAgICAgICAgIDEyICAgICAgICAgNS4wICUKKyAqICAgICBTdHJpbmczMCAgICAgICAgICAgICAgICA2ICAgICAgICAgMi41ICUKKyAqICAgICBBcnJheSAgICAgICAgICAgICAgICAgICAyICAgICAgICAgMC44ICUKKyAqICAgICBSZWNvcmQgICAgICAgICAgICAgICAgICAyICAgICAgICAgMC44ICUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tICAgICAgIC0tLS0tLS0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgMjQyICAgICAgIDEwMC4wICUKKyAqCisgKiAgV2hlbiB0aGVyZSBpcyBhbiBhY2Nlc3MgcGF0aCBsZWFkaW5nIHRvIHRoZSBmaW5hbCBvcGVyYW5kIChlLmcuIGEgcmVjb3JkCisgKiAgY29tcG9uZW50KSwgb25seSB0aGUgZmluYWwgZGF0YSB0eXBlIG9uIHRoZSBhY2Nlc3MgcGF0aCBpcyBjb3VudGVkLgorICoKKyAqCisgKiAgNC4gT3BlcmFuZCBMb2NhbGl0eToKKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyICAgIGFwcHJveGltYXRlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcmNlbnRhZ2UKKyAqCisgKiAgICAgbG9jYWwgdmFyaWFibGUgICAgICAgICAgICAgIDExNCAgICAgICAgNDcuMSAlCisgKiAgICAgZ2xvYmFsIHZhcmlhYmxlICAgICAgICAgICAgICAyMiAgICAgICAgIDkuMSAlCisgKiAgICAgcGFyYW1ldGVyICAgICAgICAgICAgICAgICAgICA0NSAgICAgICAgMTguNiAlCisgKiAgICAgICAgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAyMyAgICAgICAgIDkuNSAlCisgKiAgICAgICAgcmVmZXJlbmNlICAgICAgICAgICAgICAgICAgICAyMiAgICAgICAgIDkuMSAlCisgKiAgICAgZnVuY3Rpb24gcmVzdWx0ICAgICAgICAgICAgICAgNiAgICAgICAgIDIuNSAlCisgKiAgICAgY29uc3RhbnQgICAgICAgICAgICAgICAgICAgICA1NSAgICAgICAgMjIuNyAlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tLSAgICAgICAtLS0tLS0tCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0MiAgICAgICAxMDAuMCAlCisgKgorICoKKyAqICBUaGUgcHJvZ3JhbSBkb2VzIG5vdCBjb21wdXRlIGFueXRoaW5nIG1lYW5pbmdmdWwsIGJ1dCBpdCBpcyBzeW50YWN0aWNhbGx5CisgKiAgYW5kIHNlbWFudGljYWxseSBjb3JyZWN0LiBBbGwgdmFyaWFibGVzIGhhdmUgYSB2YWx1ZSBhc3NpZ25lZCB0byB0aGVtCisgKiAgYmVmb3JlIHRoZXkgYXJlIHVzZWQgYXMgYSBzb3VyY2Ugb3BlcmFuZC4KKyAqCisgKiAgVGhlcmUgaGFzIGJlZW4gbm8gZXhwbGljaXQgZWZmb3J0IHRvIGFjY291bnQgZm9yIHRoZSBlZmZlY3RzIG9mIGEKKyAqICBjYWNoZSwgb3IgdG8gYmFsYW5jZSB0aGUgdXNlIG9mIGxvbmcgb3Igc2hvcnQgZGlzcGxhY2VtZW50cyBmb3IgY29kZSBvcgorICogIGRhdGEuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKworLyogQ29tcGlsZXIgYW5kIHN5c3RlbSBkZXBlbmRlbnQgZGVmaW5pdGlvbnM6ICovCisKKyNpZm5kZWYgVElNRQorI2RlZmluZSBUSU1FUworI2VuZGlmCisgICAgICAgICAgICAgICAgLyogVXNlIHRpbWVzKDIpIHRpbWUgZnVuY3Rpb24gdW5sZXNzICAgICovCisgICAgICAgICAgICAgICAgLyogZXhwbGljaXRseSBkZWZpbmVkIG90aGVyd2lzZSAgICAgICAgICovCisKKyNpZmRlZiBUSU1FUworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy90aW1lcy5oPgorICAgICAgICAgICAgICAgIC8qIGZvciAidGltZXMiICovCisjZW5kaWYKKworI2RlZmluZSBNaWNfc2Vjc19QZXJfU2Vjb25kICAgICAxMDAwMDAwCisgICAgICAgICAgICAgICAgLyogQmVya2VsZXkgVU5JWCBDIHJldHVybnMgcHJvY2VzcyB0aW1lcyBpbiBzZWNvbmRzL0haICovCisKKyNpZmRlZiAgTk9TVFJVQ1RBU1NJR04KKyNkZWZpbmUgc3RydWN0YXNzaWduKGQsIHMpICAgICAgbWVtY3B5KCYoZCksICYocyksIHNpemVvZihkKSkKKyNlbHNlCisjZGVmaW5lIHN0cnVjdGFzc2lnbihkLCBzKSAgICAgIGQgPSBzCisjZW5kaWYKKworI2lmZGVmICBOT0VOVU0KKyNkZWZpbmUgSWRlbnRfMSAwCisjZGVmaW5lIElkZW50XzIgMQorI2RlZmluZSBJZGVudF8zIDIKKyNkZWZpbmUgSWRlbnRfNCAzCisjZGVmaW5lIElkZW50XzUgNAorICB0eXBlZGVmIGludCAgIEVudW1lcmF0aW9uOworI2Vsc2UKKyAgdHlwZWRlZiAgICAgICBlbnVtICAgIHtJZGVudF8xLCBJZGVudF8yLCBJZGVudF8zLCBJZGVudF80LCBJZGVudF81fQorICAgICAgICAgICAgICAgIEVudW1lcmF0aW9uOworI2VuZGlmCisgICAgICAgIC8qIGZvciBib29sZWFuIGFuZCBlbnVtZXJhdGlvbiB0eXBlcyBpbiBBZGEsIFBhc2NhbCAqLworCisvKiBHZW5lcmFsIGRlZmluaXRpb25zOiAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyAgICAgICAgICAgICAgICAvKiBmb3Igc3RyY3B5LCBzdHJjbXAgKi8KKworI2RlZmluZSBOdWxsIDAKKyAgICAgICAgICAgICAgICAvKiBWYWx1ZSBvZiBhIE51bGwgcG9pbnRlciAqLworI2RlZmluZSB0cnVlICAxCisjZGVmaW5lIGZhbHNlIDAKKwordHlwZWRlZiBpbnQgICAgIE9uZV9UaGlydHk7Cit0eXBlZGVmIGludCAgICAgT25lX0ZpZnR5OwordHlwZWRlZiBjaGFyICAgIENhcGl0YWxfTGV0dGVyOwordHlwZWRlZiBpbnQgICAgIEJvb2xlYW47Cit0eXBlZGVmIGNoYXIgICAgU3RyXzMwIFszMV07Cit0eXBlZGVmIGludCAgICAgQXJyXzFfRGltIFs1MF07Cit0eXBlZGVmIGludCAgICAgQXJyXzJfRGltIFs1MF0gWzUwXTsKKwordHlwZWRlZiBzdHJ1Y3QgcmVjb3JkCisgICAgeworICAgIHN0cnVjdCByZWNvcmQgKlB0cl9Db21wOworICAgIEVudW1lcmF0aW9uICAgIERpc2NyOworICAgIHVuaW9uIHsKKyAgICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgICAgICAgRW51bWVyYXRpb24gRW51bV9Db21wOworICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgSW50X0NvbXA7CisgICAgICAgICAgICAgICAgICBjaGFyICAgICAgICBTdHJfQ29tcCBbMzFdOworICAgICAgICAgICAgICAgICAgfSB2YXJfMTsKKyAgICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgICAgICAgRW51bWVyYXRpb24gRV9Db21wXzI7CisgICAgICAgICAgICAgICAgICBjaGFyICAgICAgICBTdHJfMl9Db21wIFszMV07CisgICAgICAgICAgICAgICAgICB9IHZhcl8yOworICAgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICAgICAgICBjaGFyICAgICAgICBDaF8xX0NvbXA7CisgICAgICAgICAgICAgICAgICBjaGFyICAgICAgICBDaF8yX0NvbXA7CisgICAgICAgICAgICAgICAgICB9IHZhcl8zOworICAgICAgICAgIH0gdmFyaWFudDsKKyAgICAgIH0gUmVjX1R5cGUsICpSZWNfUG9pbnRlcjsKKworI2luY2x1ZGUgInNjX3ByaW50LmgiCisjaW5jbHVkZSAiY3NyLmgiCisKKyMgZGVmaW5lIHByaW50ZiBzY19wcmludGYKKworI2RlZmluZSBIWiAxMDAwMDAwCitzdGF0aWMgbG9uZyB0aW1lKGxvbmcgKngpCit7CisgICAgcmV0dXJuIHJkY3ljbGUoKTsKK30KZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9iZW5jaG1hcmtzL2RocnlzdG9uZTIxL2RocnlfMS5jIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL2JlbmNobWFya3MvZGhyeXN0b25lMjEvZGhyeV8xLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUyYWNiYgotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9iZW5jaG1hcmtzL2RocnlzdG9uZTIxL2RocnlfMS5jCkBAIC0wLDAgKzEsNDYxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBUaGUgQllURSBVTklYIEJlbmNobWFya3MgLSBSZWxlYXNlIDMKKyAqICAgICAgICAgIE1vZHVsZTogZGhyeV8xLmMgICBTSUQ6IDMuNCA1LzE1LzkxIDE5OjMwOjIxCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBCdWcgcmVwb3J0cywgcGF0Y2hlcywgY29tbWVudHMsIHN1Z2dlc3Rpb25zIHNob3VsZCBiZSBzZW50IHRvOgorICoKKyAqCUJlbiBTbWl0aCwgUmljayBHcmVoYW4gb3IgVG9tIFlhZ2VyCisgKgliZW5AYnl0ZXBiLmJ5dGUuY29tICAgcmlja19nQGJ5dGVwYi5ieXRlLmNvbSAgIHR5YWdlckBieXRlcGIuYnl0ZS5jb20KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAqKiogV0FSTklORyAqKioqICBXaXRoIEJZVEUncyBtb2RpZmljYXRpb25zIGFwcGxpZWQsIHJlc3VsdHMgb2J0YWluZWQgd2l0aAorICogICAgICoqKioqKiogICAgICAgdGhpcyB2ZXJzaW9uIG9mIHRoZSBEaHJ5c3RvbmUgcHJvZ3JhbSBtYXkgbm90IGJlIGFwcGxpY2FibGUKKyAqICAgICAgICAgICAgICAgICAgIHRvIG90aGVyIHZlcnNpb25zLgorICoKKyAqICBNb2RpZmljYXRpb24gTG9nOgorICogIDEwLzIyLzk3IC0gY29kZSBjbGVhbnVwIHRvIHJlbW92ZSBBTlNJIEMgY29tcGlsZXIgd2FybmluZ3MKKyAqICAgICAgICAgICAgIEFuZHkgS2FobiA8a2FobkB6azMuZGVjLmNvbT4KKyAqCisgKiAgQWRhcHRlZCBmcm9tOgorICoKKyAqICAgICAgICAgICAgICAgICAgICJESFJZU1RPTkUiIEJlbmNobWFyayBQcm9ncmFtCisgKiAgICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqICBWZXJzaW9uOiAgICBDLCBWZXJzaW9uIDIuMQorICoKKyAqICBGaWxlOiAgICAgICBkaHJ5XzEuYyAocGFydCAyIG9mIDMpCisgKgorICogIERhdGU6ICAgICAgIE1heSAyNSwgMTk4OAorICoKKyAqICBBdXRob3I6ICAgICBSZWluaG9sZCBQLiBXZWlja2VyCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2NoYXIgU0NDU2lkW10gPSAiQCgjKSBAKCMpZGhyeV8xLmM6My40IC0tIDUvMTUvOTEgMTk6MzA6MjEiOworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlICJkaHJ5LmgiCisvLyNpbmNsdWRlICJ0aW1laXQuYyIKKwordW5zaWduZWQgbG9uZyBSdW5fSW5kZXg7CisvKgordm9pZCByZXBvcnQoKQoreworCWZwcmludGYoc3RkZXJyLCJDT1VOVHwlbGR8MXxscHNcbiIsIFJ1bl9JbmRleCk7CisJZXhpdCgwKTsKK30KKyovCisvKiBHbG9iYWwgVmFyaWFibGVzOiAqLworCitSZWNfUG9pbnRlciAgICAgUHRyX0dsb2IsCisgICAgICAgICAgICAgICAgTmV4dF9QdHJfR2xvYjsKK2ludCAgICAgICAgICAgICBJbnRfR2xvYjsKK0Jvb2xlYW4gICAgICAgICBCb29sX0dsb2I7CitjaGFyICAgICAgICAgICAgQ2hfMV9HbG9iLAorICAgICAgICAgICAgICAgIENoXzJfR2xvYjsKK2ludCAgICAgICAgICAgICBBcnJfMV9HbG9iIFs1MF07CitpbnQgICAgICAgICAgICAgQXJyXzJfR2xvYiBbNTBdIFs1MF07CisKK0VudW1lcmF0aW9uICAgICBGdW5jXzEgKCk7CisgIC8qIGZvcndhcmQgZGVjbGFyYXRpb24gbmVjZXNzYXJ5IHNpbmNlIEVudW1lcmF0aW9uIG1heSBub3Qgc2ltcGx5IGJlIGludCAqLworCisjaWZuZGVmIFJFRworICAgICAgICBCb29sZWFuIFJlZyA9IGZhbHNlOworI2RlZmluZSBSRUcKKyAgICAgICAgLyogUkVHIGJlY29tZXMgZGVmaW5lZCBhcyBlbXB0eSAqLworICAgICAgICAvKiBpLmUuIG5vIHJlZ2lzdGVyIHZhcmlhYmxlcyAgICovCisjZWxzZQorICAgICAgICBCb29sZWFuIFJlZyA9IHRydWU7CisjZW5kaWYKKworLyogdmFyaWFibGVzIGZvciB0aW1lIG1lYXN1cmVtZW50OiAqLworCisjaWZkZWYgVElNRVMKK3N0cnVjdCB0bXMgICAgICB0aW1lX2luZm87CisvKiBleHRlcm4gIGludCAgICAgdGltZXMgKCk7ICovCisgICAgICAgICAgICAgICAgLyogc2VlIGxpYnJhcnkgZnVuY3Rpb24gInRpbWVzIiAqLworI2RlZmluZSBUb29fU21hbGxfVGltZSAxMjAKKyAgICAgICAgICAgICAgICAvKiBNZWFzdXJlbWVudHMgc2hvdWxkIGxhc3QgYXQgbGVhc3QgYWJvdXQgMiBzZWNvbmRzICovCisjZW5kaWYKKyNpZmRlZiBUSU1FCitleHRlcm4gbG9uZyAgICAgdGltZSgpOworICAgICAgICAgICAgICAgIC8qIHNlZSBsaWJyYXJ5IGZ1bmN0aW9uICJ0aW1lIiAgKi8KKyNkZWZpbmUgVG9vX1NtYWxsX1RpbWUgMgorICAgICAgICAgICAgICAgIC8qIE1lYXN1cmVtZW50cyBzaG91bGQgbGFzdCBhdCBsZWFzdCAyIHNlY29uZHMgKi8KKyNlbmRpZgorCitsb25nICAgICAgICAgICAgQmVnaW5fVGltZSwKKyAgICAgICAgICAgICAgICBFbmRfVGltZSwKKyAgICAgICAgICAgICAgICBVc2VyX1RpbWU7CisjaWYgMAorZmxvYXQgICAgICAgICAgIE1pY3Jvc2Vjb25kcywKKyAgICAgICAgICAgICAgICBEaHJ5c3RvbmVzX1Blcl9TZWNvbmQ7CisjZWxzZQorbG9uZyAgICAgICAgICAgIE1pY3Jvc2Vjb25kcywKKyAgICAgICAgICAgICAgICBEaHJ5c3RvbmVzX1Blcl9TZWNvbmQ7CisjZW5kaWYKKworLyogZW5kIG9mIHZhcmlhYmxlcyBmb3IgdGltZSBtZWFzdXJlbWVudCAqLworCit2b2lkIFByb2NfMSAoUkVHIFJlY19Qb2ludGVyIFB0cl9WYWxfUGFyKTsKK3ZvaWQgUHJvY18yIChPbmVfRmlmdHkgICAqSW50X1Bhcl9SZWYpOwordm9pZCBQcm9jXzMgKFJlY19Qb2ludGVyICpQdHJfUmVmX1Bhcik7Cit2b2lkIFByb2NfNCAodm9pZCk7Cit2b2lkIFByb2NfNSAodm9pZCk7CisKKworZXh0ZXJuIEJvb2xlYW4gRnVuY18yKFN0cl8zMCwgU3RyXzMwKTsKK2V4dGVybiB2b2lkIFByb2NfNihFbnVtZXJhdGlvbiwgRW51bWVyYXRpb24gKik7CitleHRlcm4gdm9pZCBQcm9jXzcoT25lX0ZpZnR5LCBPbmVfRmlmdHksIE9uZV9GaWZ0eSAqKTsKK2V4dGVybiB2b2lkIFByb2NfOChBcnJfMV9EaW0sIEFycl8yX0RpbSwgaW50LCBpbnQpOworCitpbnQgbWFpbiAoYXJnYywgYXJndikKK2ludAlhcmdjOworY2hhcgkqYXJndltdOworICAvKiBtYWluIHByb2dyYW0sIGNvcnJlc3BvbmRzIHRvIHByb2NlZHVyZXMgICAgICAgICovCisgIC8qIE1haW4gYW5kIFByb2NfMCBpbiB0aGUgQWRhIHZlcnNpb24gICAgICAgICAgICAgKi8KK3sKKyNpZmRlZiBTRUxGX1RJTUVECisgICAgICAgIGludCAgICAgICAgICAgICBOdW1iZXJfT2ZfUnVuczsKKyNlbHNlIC8qIFNFTEZfVElNRUQgKi8KKyAgICAgICAgaW50ICAgICAgICAgICAgIGR1cmF0aW9uOworI2VuZGlmIC8qIFNFTEZfVElNRUQgKi8KKyAgICAgICAgT25lX0ZpZnR5ICAgICAgIEludF8xX0xvYzsKKyAgUkVHICAgT25lX0ZpZnR5ICAgICAgIEludF8yX0xvYzsKKyAgICAgICAgT25lX0ZpZnR5ICAgICAgIEludF8zX0xvYzsKKyAgUkVHICAgY2hhciAgICAgICAgICAgIENoX0luZGV4OworICAgICAgICBFbnVtZXJhdGlvbiAgICAgRW51bV9Mb2M7CisgICAgICAgIFN0cl8zMCAgICAgICAgICBTdHJfMV9Mb2M7CisgICAgICAgIFN0cl8zMCAgICAgICAgICBTdHJfMl9Mb2M7CisKKyAgLyogSW5pdGlhbGl6YXRpb25zICovCisjaWYgMAorICBOZXh0X1B0cl9HbG9iID0gKFJlY19Qb2ludGVyKSBtYWxsb2MgKHNpemVvZiAoUmVjX1R5cGUpKTsKKyAgUHRyX0dsb2IgPSAoUmVjX1BvaW50ZXIpIG1hbGxvYyAoc2l6ZW9mIChSZWNfVHlwZSkpOworI2Vsc2UKKyAgc3RhdGljIFJlY19UeXBlIGdsb2IxLCBnbG9iMjsKKyAgTmV4dF9QdHJfR2xvYiA9ICZnbG9iMTsKKyAgUHRyX0dsb2IgPSAmZ2xvYjI7CisjZW5kaWYKKworICBQdHJfR2xvYi0+UHRyX0NvbXAgICAgICAgICAgICAgICAgICAgID0gTmV4dF9QdHJfR2xvYjsKKyAgUHRyX0dsb2ItPkRpc2NyICAgICAgICAgICAgICAgICAgICAgICA9IElkZW50XzE7CisgIFB0cl9HbG9iLT52YXJpYW50LnZhcl8xLkVudW1fQ29tcCAgICAgPSBJZGVudF8zOworICBQdHJfR2xvYi0+dmFyaWFudC52YXJfMS5JbnRfQ29tcCAgICAgID0gNDA7CisgIHN0cmNweSAoUHRyX0dsb2ItPnZhcmlhbnQudmFyXzEuU3RyX0NvbXAsCisgICAgICAgICAgIkRIUllTVE9ORSBQUk9HUkFNLCBTT01FIFNUUklORyIpOworICBzdHJjcHkgKFN0cl8xX0xvYywgIkRIUllTVE9ORSBQUk9HUkFNLCAxJ1NUIFNUUklORyIpOworCisgIEFycl8yX0dsb2IgWzhdWzddID0gMTA7CisgICAgICAgIC8qIFdhcyBtaXNzaW5nIGluIHB1Ymxpc2hlZCBwcm9ncmFtLiBXaXRob3V0IHRoaXMgc3RhdGVtZW50LCAgICAqLworICAgICAgICAvKiBBcnJfMl9HbG9iIFs4XVs3XSB3b3VsZCBoYXZlIGFuIHVuZGVmaW5lZCB2YWx1ZS4gICAgICAgICAgICAgKi8KKyAgICAgICAgLyogV2FybmluZzogV2l0aCAxNi1CaXQgcHJvY2Vzc29ycyBhbmQgTnVtYmVyX09mX1J1bnMgPiAzMjAwMCwgICovCisgICAgICAgIC8qIG92ZXJmbG93IG1heSBvY2N1ciBmb3IgdGhpcyBhcnJheSBlbGVtZW50LiAgICAgICAgICAgICAgICAgICAqLworCisjaWZkZWYgU0VMRl9USU1FRAorICBOdW1iZXJfT2ZfUnVucyA9IDUwMDsvLzUwMDAwMDsKKyAgaWYgKGFyZ2MgPj0gMikgeworICAgIE51bWJlcl9PZl9SdW5zID0gYXRvaShhcmd2WzFdKTsKKyAgICB9CisgIHByaW50ZiAoIlxuIik7CisgIHByaW50ZiAoIkRocnlzdG9uZSBCZW5jaG1hcmssIFZlcnNpb24gMi4xIChMYW5ndWFnZTogQylcbiIpOworICBwcmludGYgKCJcbiIpOworICBpZiAoUmVnKQorICB7CisgICAgcHJpbnRmICgiUHJvZ3JhbSBjb21waWxlZCB3aXRoICdyZWdpc3RlcicgYXR0cmlidXRlXG4iKTsKKyAgICBwcmludGYgKCJcbiIpOworICB9CisgIGVsc2UKKyAgeworICAgIHByaW50ZiAoIlByb2dyYW0gY29tcGlsZWQgd2l0aG91dCAncmVnaXN0ZXInIGF0dHJpYnV0ZVxuIik7CisgICAgcHJpbnRmICgiXG4iKTsKKyAgfQorI2lmZGVmIFBSQVRUTEUKKyAgcHJpbnRmICgiUGxlYXNlIGdpdmUgdGhlIG51bWJlciBvZiBydW5zIHRocm91Z2ggdGhlIGJlbmNobWFyazogIik7CisgIHsKKyAgICBpbnQgbjsKKyAgICBzY2FuZiAoIiVkIiwgJm4pOworICAgIE51bWJlcl9PZl9SdW5zID0gbjsKKyAgfQorICBwcmludGYgKCJcbiIpOworI2VuZGlmIC8qIFBSQVRUTEUgKi8KKworICBwcmludGYgKCJFeGVjdXRpb24gc3RhcnRzLCAlZCBydW5zIHRocm91Z2ggRGhyeXN0b25lXG4iLCBOdW1iZXJfT2ZfUnVucyk7CisKKyAgUnVuX0luZGV4ID0gMDsKKyNlbHNlIC8qIFNFTEZfVElNRUQgKi8KKyAgaWYgKGFyZ2MgIT0gMikgeworICAgIGZwcmludGYoc3RkZXJyLCAiVXNhZ2U6ICVzIGR1cmF0aW9uXG4iLCBhcmd2WzBdKTsKKyAgICBleGl0KDEpOworICAgIH0KKworICBkdXJhdGlvbiA9IGF0b2koYXJndlsxXSk7CisgIFJ1bl9JbmRleCA9IDA7CisgIHdha2VfbWUoZHVyYXRpb24sIHJlcG9ydCk7CisjZW5kaWYgLyogU0VMRl9USU1FRCAqLworCisgIC8qKioqKioqKioqKioqKiovCisgIC8qIFN0YXJ0IHRpbWVyICovCisgIC8qKioqKioqKioqKioqKiovCisKKyNpZmRlZiBTRUxGX1RJTUVECisjaWZkZWYgVElNRVMKKyAgdGltZXMgKCZ0aW1lX2luZm8pOworICBCZWdpbl9UaW1lID0gKGxvbmcpIHRpbWVfaW5mby50bXNfdXRpbWU7CisjZW5kaWYKKyNpZmRlZiBUSU1FCisgIEJlZ2luX1RpbWUgPSB0aW1lICggKGxvbmcgKikgMCk7CisjZW5kaWYKKyNlbmRpZiAvKiBTRUxGX1RJTUVEICovCisKKyNpZmRlZiBTRUxGX1RJTUVECisgIGZvciAoUnVuX0luZGV4ID0gMTsgUnVuX0luZGV4IDw9IE51bWJlcl9PZl9SdW5zIDsgKytSdW5fSW5kZXgpCisjZWxzZSAvKiBTRUxGX1RJTUVEICovCisgIGZvciAoUnVuX0luZGV4ID0gMTsgOyArK1J1bl9JbmRleCkKKyNlbmRpZiAvKiBTRUxGX1RJTUVEICovCisgIHsKKworICAgIFByb2NfNSgpOworICAgIFByb2NfNCgpOworICAgICAgLyogQ2hfMV9HbG9iID09ICdBJywgQ2hfMl9HbG9iID09ICdCJywgQm9vbF9HbG9iID09IHRydWUgKi8KKyAgICBJbnRfMV9Mb2MgPSAyOworICAgIEludF8yX0xvYyA9IDM7CisgICAgc3RyY3B5IChTdHJfMl9Mb2MsICJESFJZU1RPTkUgUFJPR1JBTSwgMidORCBTVFJJTkciKTsKKyAgICBFbnVtX0xvYyA9IElkZW50XzI7CisgICAgQm9vbF9HbG9iID0gISBGdW5jXzIgKFN0cl8xX0xvYywgU3RyXzJfTG9jKTsKKyAgICAgIC8qIEJvb2xfR2xvYiA9PSAxICovCisgICAgd2hpbGUgKEludF8xX0xvYyA8IEludF8yX0xvYykgIC8qIGxvb3AgYm9keSBleGVjdXRlZCBvbmNlICovCisgICAgeworICAgICAgSW50XzNfTG9jID0gNSAqIEludF8xX0xvYyAtIEludF8yX0xvYzsKKyAgICAgICAgLyogSW50XzNfTG9jID09IDcgKi8KKyAgICAgIFByb2NfNyAoSW50XzFfTG9jLCBJbnRfMl9Mb2MsICZJbnRfM19Mb2MpOworICAgICAgICAvKiBJbnRfM19Mb2MgPT0gNyAqLworICAgICAgSW50XzFfTG9jICs9IDE7CisgICAgfSAvKiB3aGlsZSAqLworICAgICAgLyogSW50XzFfTG9jID09IDMsIEludF8yX0xvYyA9PSAzLCBJbnRfM19Mb2MgPT0gNyAqLworICAgIFByb2NfOCAoQXJyXzFfR2xvYiwgQXJyXzJfR2xvYiwgSW50XzFfTG9jLCBJbnRfM19Mb2MpOworICAgICAgLyogSW50X0dsb2IgPT0gNSAqLworICAgIFByb2NfMSAoUHRyX0dsb2IpOworICAgIGZvciAoQ2hfSW5kZXggPSAnQSc7IENoX0luZGV4IDw9IENoXzJfR2xvYjsgKytDaF9JbmRleCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbG9vcCBib2R5IGV4ZWN1dGVkIHR3aWNlICovCisgICAgeworICAgICAgaWYgKEVudW1fTG9jID09IEZ1bmNfMSAoQ2hfSW5kZXgsICdDJykpCisgICAgICAgICAgLyogdGhlbiwgbm90IGV4ZWN1dGVkICovCisgICAgICAgIHsKKyAgICAgICAgUHJvY182IChJZGVudF8xLCAmRW51bV9Mb2MpOworICAgICAgICBzdHJjcHkgKFN0cl8yX0xvYywgIkRIUllTVE9ORSBQUk9HUkFNLCAzJ1JEIFNUUklORyIpOworICAgICAgICBJbnRfMl9Mb2MgPSBSdW5fSW5kZXg7CisgICAgICAgIEludF9HbG9iID0gUnVuX0luZGV4OworICAgICAgICB9CisgICAgfQorICAgICAgLyogSW50XzFfTG9jID09IDMsIEludF8yX0xvYyA9PSAzLCBJbnRfM19Mb2MgPT0gNyAqLworICAgIEludF8yX0xvYyA9IEludF8yX0xvYyAqIEludF8xX0xvYzsKKyAgICBJbnRfMV9Mb2MgPSBJbnRfMl9Mb2MgLyBJbnRfM19Mb2M7CisgICAgSW50XzJfTG9jID0gNyAqIChJbnRfMl9Mb2MgLSBJbnRfM19Mb2MpIC0gSW50XzFfTG9jOworICAgICAgLyogSW50XzFfTG9jID09IDEsIEludF8yX0xvYyA9PSAxMywgSW50XzNfTG9jID09IDcgKi8KKyAgICBQcm9jXzIgKCZJbnRfMV9Mb2MpOworICAgICAgLyogSW50XzFfTG9jID09IDUgKi8KKworICB9IC8qIGxvb3AgImZvciBSdW5fSW5kZXgiICovCisKKyAgLyoqKioqKioqKioqKioqLworICAvKiBTdG9wIHRpbWVyICovCisgIC8qKioqKioqKioqKioqKi8KKyNpZmRlZiBTRUxGX1RJTUVECisjaWZkZWYgVElNRVMKKyAgdGltZXMgKCZ0aW1lX2luZm8pOworICBFbmRfVGltZSA9IChsb25nKSB0aW1lX2luZm8udG1zX3V0aW1lOworI2VuZGlmCisjaWZkZWYgVElNRQorICBFbmRfVGltZSA9IHRpbWUgKCAobG9uZyAqKSAwKTsKKyNlbmRpZgorI2VuZGlmIC8qIFNFTEZfVElNRUQgKi8KKworICAvKiBCWVRFIHZlcnNpb24gbmV2ZXIgZXhlY3V0ZXMgdGhpcyBzdHVmZiAqLworI2lmZGVmIFNFTEZfVElNRUQKKyAgcHJpbnRmICgiRXhlY3V0aW9uIGVuZHNcbiIpOworICBwcmludGYgKCJcbiIpOworICBwcmludGYgKCJGaW5hbCB2YWx1ZXMgb2YgdGhlIHZhcmlhYmxlcyB1c2VkIGluIHRoZSBiZW5jaG1hcms6XG4iKTsKKyAgcHJpbnRmICgiXG4iKTsKKyAgcHJpbnRmICgiSW50X0dsb2I6ICAgICAgICAgICAgJWRcbiIsIEludF9HbG9iKTsKKyAgcHJpbnRmICgiICAgICAgICBzaG91bGQgYmU6ICAgJWRcbiIsIDUpOworICBwcmludGYgKCJCb29sX0dsb2I6ICAgICAgICAgICAlZFxuIiwgQm9vbF9HbG9iKTsKKyAgcHJpbnRmICgiICAgICAgICBzaG91bGQgYmU6ICAgJWRcbiIsIDEpOworICBwcmludGYgKCJDaF8xX0dsb2I6ICAgICAgICAgICAlY1xuIiwgQ2hfMV9HbG9iKTsKKyAgcHJpbnRmICgiICAgICAgICBzaG91bGQgYmU6ICAgJWNcbiIsICdBJyk7CisgIHByaW50ZiAoIkNoXzJfR2xvYjogICAgICAgICAgICVjXG4iLCBDaF8yX0dsb2IpOworICBwcmludGYgKCIgICAgICAgIHNob3VsZCBiZTogICAlY1xuIiwgJ0InKTsKKyAgcHJpbnRmICgiQXJyXzFfR2xvYls4XTogICAgICAgJWRcbiIsIEFycl8xX0dsb2JbOF0pOworICBwcmludGYgKCIgICAgICAgIHNob3VsZCBiZTogICAlZFxuIiwgNyk7CisgIHByaW50ZiAoIkFycl8yX0dsb2JbOF1bN106ICAgICVkXG4iLCBBcnJfMl9HbG9iWzhdWzddKTsKKyAgcHJpbnRmICgiICAgICAgICBzaG91bGQgYmU6ICAgTnVtYmVyX09mX1J1bnMgKyAxMFxuIik7CisgIHByaW50ZiAoIlB0cl9HbG9iLT5cbiIpOworICBwcmludGYgKCIgIFB0cl9Db21wOiAgICAgICAgICAlZFxuIiwgKGludCkgUHRyX0dsb2ItPlB0cl9Db21wKTsKKyAgcHJpbnRmICgiICAgICAgICBzaG91bGQgYmU6ICAgKGltcGxlbWVudGF0aW9uLWRlcGVuZGVudClcbiIpOworICBwcmludGYgKCIgIERpc2NyOiAgICAgICAgICAgICAlZFxuIiwgUHRyX0dsb2ItPkRpc2NyKTsKKyAgcHJpbnRmICgiICAgICAgICBzaG91bGQgYmU6ICAgJWRcbiIsIDApOworICBwcmludGYgKCIgIEVudW1fQ29tcDogICAgICAgICAlZFxuIiwgUHRyX0dsb2ItPnZhcmlhbnQudmFyXzEuRW51bV9Db21wKTsKKyAgcHJpbnRmICgiICAgICAgICBzaG91bGQgYmU6ICAgJWRcbiIsIDIpOworICBwcmludGYgKCIgIEludF9Db21wOiAgICAgICAgICAlZFxuIiwgUHRyX0dsb2ItPnZhcmlhbnQudmFyXzEuSW50X0NvbXApOworICBwcmludGYgKCIgICAgICAgIHNob3VsZCBiZTogICAlZFxuIiwgMTcpOworICBwcmludGYgKCIgIFN0cl9Db21wOiAgICAgICAgICAlc1xuIiwgUHRyX0dsb2ItPnZhcmlhbnQudmFyXzEuU3RyX0NvbXApOworICBwcmludGYgKCIgICAgICAgIHNob3VsZCBiZTogICBESFJZU1RPTkUgUFJPR1JBTSwgU09NRSBTVFJJTkdcbiIpOworICBwcmludGYgKCJOZXh0X1B0cl9HbG9iLT5cbiIpOworICBwcmludGYgKCIgIFB0cl9Db21wOiAgICAgICAgICAlZFxuIiwgKGludCkgTmV4dF9QdHJfR2xvYi0+UHRyX0NvbXApOworICBwcmludGYgKCIgICAgICAgIHNob3VsZCBiZTogICAoaW1wbGVtZW50YXRpb24tZGVwZW5kZW50KSwgc2FtZSBhcyBhYm92ZVxuIik7CisgIHByaW50ZiAoIiAgRGlzY3I6ICAgICAgICAgICAgICVkXG4iLCBOZXh0X1B0cl9HbG9iLT5EaXNjcik7CisgIHByaW50ZiAoIiAgICAgICAgc2hvdWxkIGJlOiAgICVkXG4iLCAwKTsKKyAgcHJpbnRmICgiICBFbnVtX0NvbXA6ICAgICAgICAgJWRcbiIsIE5leHRfUHRyX0dsb2ItPnZhcmlhbnQudmFyXzEuRW51bV9Db21wKTsKKyAgcHJpbnRmICgiICAgICAgICBzaG91bGQgYmU6ICAgJWRcbiIsIDEpOworICBwcmludGYgKCIgIEludF9Db21wOiAgICAgICAgICAlZFxuIiwgTmV4dF9QdHJfR2xvYi0+dmFyaWFudC52YXJfMS5JbnRfQ29tcCk7CisgIHByaW50ZiAoIiAgICAgICAgc2hvdWxkIGJlOiAgICVkXG4iLCAxOCk7CisgIHByaW50ZiAoIiAgU3RyX0NvbXA6ICAgICAgICAgICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXh0X1B0cl9HbG9iLT52YXJpYW50LnZhcl8xLlN0cl9Db21wKTsKKyAgcHJpbnRmICgiICAgICAgICBzaG91bGQgYmU6ICAgREhSWVNUT05FIFBST0dSQU0sIFNPTUUgU1RSSU5HXG4iKTsKKyAgcHJpbnRmICgiSW50XzFfTG9jOiAgICAgICAgICAgJWRcbiIsIEludF8xX0xvYyk7CisgIHByaW50ZiAoIiAgICAgICAgc2hvdWxkIGJlOiAgICVkXG4iLCA1KTsKKyAgcHJpbnRmICgiSW50XzJfTG9jOiAgICAgICAgICAgJWRcbiIsIEludF8yX0xvYyk7CisgIHByaW50ZiAoIiAgICAgICAgc2hvdWxkIGJlOiAgICVkXG4iLCAxMyk7CisgIHByaW50ZiAoIkludF8zX0xvYzogICAgICAgICAgICVkXG4iLCBJbnRfM19Mb2MpOworICBwcmludGYgKCIgICAgICAgIHNob3VsZCBiZTogICAlZFxuIiwgNyk7CisgIHByaW50ZiAoIkVudW1fTG9jOiAgICAgICAgICAgICVkXG4iLCBFbnVtX0xvYyk7CisgIHByaW50ZiAoIiAgICAgICAgc2hvdWxkIGJlOiAgICVkXG4iLCAxKTsKKyAgcHJpbnRmICgiU3RyXzFfTG9jOiAgICAgICAgICAgJXNcbiIsIFN0cl8xX0xvYyk7CisgIHByaW50ZiAoIiAgICAgICAgc2hvdWxkIGJlOiAgIERIUllTVE9ORSBQUk9HUkFNLCAxJ1NUIFNUUklOR1xuIik7CisgIHByaW50ZiAoIlN0cl8yX0xvYzogICAgICAgICAgICVzXG4iLCBTdHJfMl9Mb2MpOworICBwcmludGYgKCIgICAgICAgIHNob3VsZCBiZTogICBESFJZU1RPTkUgUFJPR1JBTSwgMidORCBTVFJJTkdcbiIpOworICBwcmludGYgKCJcbiIpOworCisgIFVzZXJfVGltZSA9IEVuZF9UaW1lIC0gQmVnaW5fVGltZTsKKworICBpZiAoVXNlcl9UaW1lIDwgVG9vX1NtYWxsX1RpbWUpCisgIHsKKyAgICBwcmludGYgKCJNZWFzdXJlZCB0aW1lIHRvbyBzbWFsbCB0byBvYnRhaW4gbWVhbmluZ2Z1bCByZXN1bHRzXG4iKTsKKyAgICBwcmludGYgKCJQbGVhc2UgaW5jcmVhc2UgbnVtYmVyIG9mIHJ1bnNcbiIpOworICAgIHByaW50ZiAoIlxuIik7CisgIH0KKyAgZWxzZQorICB7CisjaWYgMAorI2lmZGVmIFRJTUUKKyAgICBNaWNyb3NlY29uZHMgPSAoZmxvYXQpIFVzZXJfVGltZSAqIE1pY19zZWNzX1Blcl9TZWNvbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIC8gKGZsb2F0KSBOdW1iZXJfT2ZfUnVuczsKKyAgICBEaHJ5c3RvbmVzX1Blcl9TZWNvbmQgPSAoZmxvYXQpIE51bWJlcl9PZl9SdW5zIC8gKGZsb2F0KSBVc2VyX1RpbWU7CisjZWxzZQorICAgIE1pY3Jvc2Vjb25kcyA9IChmbG9hdCkgVXNlcl9UaW1lICogTWljX3NlY3NfUGVyX1NlY29uZAorICAgICAgICAgICAgICAgICAgICAgICAgLyAoKGZsb2F0KSBIWiAqICgoZmxvYXQpIE51bWJlcl9PZl9SdW5zKSk7CisgICAgRGhyeXN0b25lc19QZXJfU2Vjb25kID0gKChmbG9hdCkgSFogKiAoZmxvYXQpIE51bWJlcl9PZl9SdW5zKQorICAgICAgICAgICAgICAgICAgICAgICAgLyAoZmxvYXQpIFVzZXJfVGltZTsKKyNlbmRpZgorI2Vsc2UKKyAgTWljcm9zZWNvbmRzID0gKChVc2VyX1RpbWUgLyBOdW1iZXJfT2ZfUnVucykgKiBNaWNfc2Vjc19QZXJfU2Vjb25kKSAvIEhaOworICBEaHJ5c3RvbmVzX1Blcl9TZWNvbmQgPSAoSFogKiBOdW1iZXJfT2ZfUnVucykgLyBVc2VyX1RpbWU7CisKKyAgc2NfcHJpbnRmKCJOdW1iZXJfT2ZfUnVucz0gJWxkLCBIWj0gJWxkXG4iLCBOdW1iZXJfT2ZfUnVucywgSFopOworICBzY19wcmludGYoIlRpbWU6IGJlZ2luPSAlbGQsIGVuZD0gJWxkLCBkaWZmPSAlbGRcbiIsIEJlZ2luX1RpbWUsIEVuZF9UaW1lLCBVc2VyX1RpbWUpOworICBzY19wcmludGYoIk1pY3Jvc2Vjb25kcyBmb3Igb25lIHJ1biB0aHJvdWdoIERocnlzdG9uZTogJWxkXG4iLCBNaWNyb3NlY29uZHMpOworICBzY19wcmludGYoIkRocnlzdG9uZXMgcGVyIFNlY29uZDogICAgICAgICAgICAgICAgICAgICAgJWxkXG4iLCBEaHJ5c3RvbmVzX1Blcl9TZWNvbmQpOworCisjZW5kaWYKKyAgfQorI2VuZGlmIC8qIFNFTEZfVElNRUQgKi8KK30KKworCit2b2lkIFByb2NfMSAoUkVHIFJlY19Qb2ludGVyIFB0cl9WYWxfUGFyKQorICAgIC8qIGV4ZWN1dGVkIG9uY2UgKi8KK3sKKyAgUkVHIFJlY19Qb2ludGVyIE5leHRfUmVjb3JkID0gUHRyX1ZhbF9QYXItPlB0cl9Db21wOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qID09IFB0cl9HbG9iX05leHQgKi8KKyAgLyogTG9jYWwgdmFyaWFibGUsIGluaXRpYWxpemVkIHdpdGggUHRyX1ZhbF9QYXItPlB0cl9Db21wLCAgICAqLworICAvKiBjb3JyZXNwb25kcyB0byAicmVuYW1lIiBpbiBBZGEsICJ3aXRoIiBpbiBQYXNjYWwgICAgICAgICAgICovCisKKyAgc3RydWN0YXNzaWduICgqUHRyX1ZhbF9QYXItPlB0cl9Db21wLCAqUHRyX0dsb2IpOworICBQdHJfVmFsX1Bhci0+dmFyaWFudC52YXJfMS5JbnRfQ29tcCA9IDU7CisgIE5leHRfUmVjb3JkLT52YXJpYW50LnZhcl8xLkludF9Db21wCisgICAgICAgID0gUHRyX1ZhbF9QYXItPnZhcmlhbnQudmFyXzEuSW50X0NvbXA7CisgIE5leHRfUmVjb3JkLT5QdHJfQ29tcCA9IFB0cl9WYWxfUGFyLT5QdHJfQ29tcDsKKyAgUHJvY18zICgmTmV4dF9SZWNvcmQtPlB0cl9Db21wKTsKKyAgICAvKiBQdHJfVmFsX1Bhci0+UHRyX0NvbXAtPlB0cl9Db21wCisgICAgICAgICAgICAgICAgICAgICAgICA9PSBQdHJfR2xvYi0+UHRyX0NvbXAgKi8KKyAgaWYgKE5leHRfUmVjb3JkLT5EaXNjciA9PSBJZGVudF8xKQorICAgIC8qIHRoZW4sIGV4ZWN1dGVkICovCisgIHsKKyAgICBOZXh0X1JlY29yZC0+dmFyaWFudC52YXJfMS5JbnRfQ29tcCA9IDY7CisgICAgUHJvY182IChQdHJfVmFsX1Bhci0+dmFyaWFudC52YXJfMS5FbnVtX0NvbXAsCisgICAgICAgICAgICZOZXh0X1JlY29yZC0+dmFyaWFudC52YXJfMS5FbnVtX0NvbXApOworICAgIE5leHRfUmVjb3JkLT5QdHJfQ29tcCA9IFB0cl9HbG9iLT5QdHJfQ29tcDsKKyAgICBQcm9jXzcgKE5leHRfUmVjb3JkLT52YXJpYW50LnZhcl8xLkludF9Db21wLCAxMCwKKyAgICAgICAgICAgJk5leHRfUmVjb3JkLT52YXJpYW50LnZhcl8xLkludF9Db21wKTsKKyAgfQorICBlbHNlIC8qIG5vdCBleGVjdXRlZCAqLworICAgIHN0cnVjdGFzc2lnbiAoKlB0cl9WYWxfUGFyLCAqUHRyX1ZhbF9QYXItPlB0cl9Db21wKTsKK30gLyogUHJvY18xICovCisKKwordm9pZCBQcm9jXzIgKE9uZV9GaWZ0eSAgICpJbnRfUGFyX1JlZikKKyAgICAvKiBleGVjdXRlZCBvbmNlICovCisgICAgLyogKkludF9QYXJfUmVmID09IDEsIGJlY29tZXMgNCAqLworeworICBPbmVfRmlmdHkgIEludF9Mb2M7CisgIEVudW1lcmF0aW9uICAgRW51bV9Mb2M7CisKKyAgRW51bV9Mb2MgPSAwOworCisgIEludF9Mb2MgPSAqSW50X1Bhcl9SZWYgKyAxMDsKKyAgZG8gLyogZXhlY3V0ZWQgb25jZSAqLworICAgIGlmIChDaF8xX0dsb2IgPT0gJ0EnKQorICAgICAgLyogdGhlbiwgZXhlY3V0ZWQgKi8KKyAgICB7CisgICAgICBJbnRfTG9jIC09IDE7CisgICAgICAqSW50X1Bhcl9SZWYgPSBJbnRfTG9jIC0gSW50X0dsb2I7CisgICAgICBFbnVtX0xvYyA9IElkZW50XzE7CisgICAgfSAvKiBpZiAqLworICB3aGlsZSAoRW51bV9Mb2MgIT0gSWRlbnRfMSk7IC8qIHRydWUgKi8KK30gLyogUHJvY18yICovCisKKwordm9pZCBQcm9jXzMgKFJlY19Qb2ludGVyICpQdHJfUmVmX1BhcikKKyAgICAvKiBleGVjdXRlZCBvbmNlICovCisgICAgLyogUHRyX1JlZl9QYXIgYmVjb21lcyBQdHJfR2xvYiAqLworeworICBpZiAoUHRyX0dsb2IgIT0gTnVsbCkKKyAgICAvKiB0aGVuLCBleGVjdXRlZCAqLworICAgICpQdHJfUmVmX1BhciA9IFB0cl9HbG9iLT5QdHJfQ29tcDsKKyAgUHJvY183ICgxMCwgSW50X0dsb2IsICZQdHJfR2xvYi0+dmFyaWFudC52YXJfMS5JbnRfQ29tcCk7Cit9IC8qIFByb2NfMyAqLworCisKK3ZvaWQgUHJvY180ICh2b2lkKSAvKiB3aXRob3V0IHBhcmFtZXRlcnMgKi8KKyAgICAvKiBleGVjdXRlZCBvbmNlICovCit7CisgIEJvb2xlYW4gQm9vbF9Mb2M7CisKKyAgQm9vbF9Mb2MgPSBDaF8xX0dsb2IgPT0gJ0EnOworICBCb29sX0dsb2IgPSBCb29sX0xvYyB8IEJvb2xfR2xvYjsKKyAgQ2hfMl9HbG9iID0gJ0InOworfSAvKiBQcm9jXzQgKi8KKwordm9pZCBQcm9jXzUgKHZvaWQpIC8qIHdpdGhvdXQgcGFyYW1ldGVycyAqLworLyoqKioqKiovCisgICAgLyogZXhlY3V0ZWQgb25jZSAqLworeworICBDaF8xX0dsb2IgPSAnQSc7CisgIEJvb2xfR2xvYiA9IGZhbHNlOworfSAvKiBQcm9jXzUgKi8KKworCisgICAgICAgIC8qIFByb2NlZHVyZSBmb3IgdGhlIGFzc2lnbm1lbnQgb2Ygc3RydWN0dXJlcywgICAgICAgICAgKi8KKyAgICAgICAgLyogaWYgdGhlIEMgY29tcGlsZXIgZG9lc24ndCBzdXBwb3J0IHRoaXMgZmVhdHVyZSAgICAgICAqLworI2lmZGVmICBOT1NUUlVDVEFTU0lHTgorbWVtY3B5IChkLCBzLCBsKQorcmVnaXN0ZXIgY2hhciAgICpkOworcmVnaXN0ZXIgY2hhciAgICpzOworcmVnaXN0ZXIgaW50ICAgIGw7Cit7CisgICAgICAgIHdoaWxlIChsLS0pICpkKysgPSAqcysrOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvYmVuY2htYXJrcy9kaHJ5c3RvbmUyMS9kaHJ5XzIuYyBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9iZW5jaG1hcmtzL2RocnlzdG9uZTIxL2RocnlfMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0MDE2MWYKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvYmVuY2htYXJrcy9kaHJ5c3RvbmUyMS9kaHJ5XzIuYwpAQCAtMCwwICsxLDIwOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgVGhlIEJZVEUgVU5JWCBCZW5jaG1hcmtzIC0gUmVsZWFzZSAzCisgKiAgICAgICAgICBNb2R1bGU6IGRocnlfMi5jICAgU0lEOiAzLjQgNS8xNS85MSAxOTozMDoyMgorICogICAgICAgICAgCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEJ1ZyByZXBvcnRzLCBwYXRjaGVzLCBjb21tZW50cywgc3VnZ2VzdGlvbnMgc2hvdWxkIGJlIHNlbnQgdG86CisgKgorICoJQmVuIFNtaXRoLCBSaWNrIEdyZWhhbiBvciBUb20gWWFnZXIKKyAqCWJlbkBieXRlcGIuYnl0ZS5jb20gICByaWNrX2dAYnl0ZXBiLmJ5dGUuY29tICAgdHlhZ2VyQGJ5dGVwYi5ieXRlLmNvbQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogIE1vZGlmaWNhdGlvbiBMb2c6CisgKiAgMTAvMjIvOTcgLSBjb2RlIGNsZWFudXAgdG8gcmVtb3ZlIEFOU0kgQyBjb21waWxlciB3YXJuaW5ncworICogICAgICAgICAgICAgQW5keSBLYWhuIDxrYWhuQHprMy5kZWMuY29tPgorICoKKyAqICBBZGFwdGVkIGZyb206CisgKgorICogICAgICAgICAgICAgICAgICAgIkRIUllTVE9ORSIgQmVuY2htYXJrIFByb2dyYW0KKyAqICAgICAgICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogKioqKiBXQVJOSU5HICoqKiogU2VlIHdhcm5pbmcgaW4gbi5kaHJ5XzEuYworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgKiAgVmVyc2lvbjogICAgQywgVmVyc2lvbiAyLjEKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICogIEZpbGU6ICAgICAgIGRocnlfMi5jIChwYXJ0IDMgb2YgMykKKyAqCisgKiAgRGF0ZTogICAgICAgTWF5IDI1LCAxOTg4CisgKgorICogIEF1dGhvcjogICAgIFJlaW5ob2xkIFAuIFdlaWNrZXIKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFNDQ1NpZCBpcyBkZWZpbmVkIGluIGRocnlfMS5jICovCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlICJkaHJ5LmgiCisKKyNpZm5kZWYgUkVHCisjZGVmaW5lIFJFRworICAgICAgICAvKiBSRUcgYmVjb21lcyBkZWZpbmVkIGFzIGVtcHR5ICovCisgICAgICAgIC8qIGkuZS4gbm8gcmVnaXN0ZXIgdmFyaWFibGVzICAgKi8KKyNlbmRpZgorCitleHRlcm4gIGludCAgICAgSW50X0dsb2I7CitleHRlcm4gIGNoYXIgICAgQ2hfMV9HbG9iOworCit2b2lkIFByb2NfNihFbnVtZXJhdGlvbiwgRW51bWVyYXRpb24gKik7Cit2b2lkIFByb2NfNyhPbmVfRmlmdHksIE9uZV9GaWZ0eSwgT25lX0ZpZnR5ICopOwordm9pZCBQcm9jXzgoQXJyXzFfRGltLCBBcnJfMl9EaW0sIGludCwgaW50KTsKK0VudW1lcmF0aW9uIEZ1bmNfMShDYXBpdGFsX0xldHRlciwgQ2FwaXRhbF9MZXR0ZXIpOworQm9vbGVhbiBGdW5jXzIoU3RyXzMwLCBTdHJfMzApOworQm9vbGVhbiBGdW5jXzMoRW51bWVyYXRpb24pOworCit2b2lkIFByb2NfNiAoRW51bWVyYXRpb24gRW51bV9WYWxfUGFyLCBFbnVtZXJhdGlvbiAqRW51bV9SZWZfUGFyKQorICAgIC8qIGV4ZWN1dGVkIG9uY2UgKi8KKyAgICAvKiBFbnVtX1ZhbF9QYXIgPT0gSWRlbnRfMywgRW51bV9SZWZfUGFyIGJlY29tZXMgSWRlbnRfMiAqLworeworICAqRW51bV9SZWZfUGFyID0gRW51bV9WYWxfUGFyOworICBpZiAoISBGdW5jXzMgKEVudW1fVmFsX1BhcikpCisgICAgLyogdGhlbiwgbm90IGV4ZWN1dGVkICovCisgICAgKkVudW1fUmVmX1BhciA9IElkZW50XzQ7CisgIHN3aXRjaCAoRW51bV9WYWxfUGFyKQorICB7CisgICAgY2FzZSBJZGVudF8xOiAKKyAgICAgICpFbnVtX1JlZl9QYXIgPSBJZGVudF8xOworICAgICAgYnJlYWs7CisgICAgY2FzZSBJZGVudF8yOiAKKyAgICAgIGlmIChJbnRfR2xvYiA+IDEwMCkKKyAgICAgICAgLyogdGhlbiAqLworICAgICAgKkVudW1fUmVmX1BhciA9IElkZW50XzE7CisgICAgICBlbHNlICpFbnVtX1JlZl9QYXIgPSBJZGVudF80OworICAgICAgYnJlYWs7CisgICAgY2FzZSBJZGVudF8zOiAvKiBleGVjdXRlZCAqLworICAgICAgKkVudW1fUmVmX1BhciA9IElkZW50XzI7CisgICAgICBicmVhazsKKyAgICBjYXNlIElkZW50XzQ6IGJyZWFrOworICAgIGNhc2UgSWRlbnRfNTogCisgICAgICAqRW51bV9SZWZfUGFyID0gSWRlbnRfMzsKKyAgICAgIGJyZWFrOworICB9IC8qIHN3aXRjaCAqLworfSAvKiBQcm9jXzYgKi8KKwordm9pZCBQcm9jXzcgKEludF8xX1Bhcl9WYWwsIEludF8yX1Bhcl9WYWwsIEludF9QYXJfUmVmKQorT25lX0ZpZnR5ICAgICAgIEludF8xX1Bhcl9WYWw7CitPbmVfRmlmdHkgICAgICAgSW50XzJfUGFyX1ZhbDsKK09uZV9GaWZ0eSAgICAgICpJbnRfUGFyX1JlZjsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIC8qIGV4ZWN1dGVkIHRocmVlIHRpbWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAKKyAgICAvKiBmaXJzdCBjYWxsOiAgICAgIEludF8xX1Bhcl9WYWwgPT0gMiwgSW50XzJfUGFyX1ZhbCA9PSAzLCAgKi8KKyAgICAvKiAgICAgICAgICAgICAgICAgIEludF9QYXJfUmVmIGJlY29tZXMgNyAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiBzZWNvbmQgY2FsbDogICAgIEludF8xX1Bhcl9WYWwgPT0gMTAsIEludF8yX1Bhcl9WYWwgPT0gNSwgKi8KKyAgICAvKiAgICAgICAgICAgICAgICAgIEludF9QYXJfUmVmIGJlY29tZXMgMTcgICAgICAgICAgICAgICAgICAgKi8KKyAgICAvKiB0aGlyZCBjYWxsOiAgICAgIEludF8xX1Bhcl9WYWwgPT0gNiwgSW50XzJfUGFyX1ZhbCA9PSAxMCwgKi8KKyAgICAvKiAgICAgICAgICAgICAgICAgIEludF9QYXJfUmVmIGJlY29tZXMgMTggICAgICAgICAgICAgICAgICAgKi8KK3sKKyAgT25lX0ZpZnR5IEludF9Mb2M7CisKKyAgSW50X0xvYyA9IEludF8xX1Bhcl9WYWwgKyAyOworICAqSW50X1Bhcl9SZWYgPSBJbnRfMl9QYXJfVmFsICsgSW50X0xvYzsKK30gLyogUHJvY183ICovCisKKwordm9pZCBQcm9jXzggKEFycl8xX1Bhcl9SZWYsIEFycl8yX1Bhcl9SZWYsIEludF8xX1Bhcl9WYWwsIEludF8yX1Bhcl9WYWwpCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIC8qIGV4ZWN1dGVkIG9uY2UgICAgICAqLworICAgIC8qIEludF9QYXJfVmFsXzEgPT0gMyAqLworICAgIC8qIEludF9QYXJfVmFsXzIgPT0gNyAqLworQXJyXzFfRGltICAgICAgIEFycl8xX1Bhcl9SZWY7CitBcnJfMl9EaW0gICAgICAgQXJyXzJfUGFyX1JlZjsKK2ludCAgICAgICAgICAgICBJbnRfMV9QYXJfVmFsOworaW50ICAgICAgICAgICAgIEludF8yX1Bhcl9WYWw7Cit7CisgIFJFRyBPbmVfRmlmdHkgSW50X0luZGV4OworICBSRUcgT25lX0ZpZnR5IEludF9Mb2M7CisKKyAgSW50X0xvYyA9IEludF8xX1Bhcl9WYWwgKyA1OworICBBcnJfMV9QYXJfUmVmIFtJbnRfTG9jXSA9IEludF8yX1Bhcl9WYWw7CisgIEFycl8xX1Bhcl9SZWYgW0ludF9Mb2MrMV0gPSBBcnJfMV9QYXJfUmVmIFtJbnRfTG9jXTsKKyAgQXJyXzFfUGFyX1JlZiBbSW50X0xvYyszMF0gPSBJbnRfTG9jOworICBmb3IgKEludF9JbmRleCA9IEludF9Mb2M7IEludF9JbmRleCA8PSBJbnRfTG9jKzE7ICsrSW50X0luZGV4KQorICAgIEFycl8yX1Bhcl9SZWYgW0ludF9Mb2NdIFtJbnRfSW5kZXhdID0gSW50X0xvYzsKKyAgQXJyXzJfUGFyX1JlZiBbSW50X0xvY10gW0ludF9Mb2MtMV0gKz0gMTsKKyAgQXJyXzJfUGFyX1JlZiBbSW50X0xvYysyMF0gW0ludF9Mb2NdID0gQXJyXzFfUGFyX1JlZiBbSW50X0xvY107CisgIEludF9HbG9iID0gNTsKK30gLyogUHJvY184ICovCisKKworRW51bWVyYXRpb24gRnVuY18xIChDYXBpdGFsX0xldHRlciBDaF8xX1Bhcl9WYWwsIENhcGl0YWxfTGV0dGVyIENoXzJfUGFyX1ZhbCkKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIC8qIGV4ZWN1dGVkIHRocmVlIHRpbWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIC8qIGZpcnN0IGNhbGw6ICAgICAgQ2hfMV9QYXJfVmFsID09ICdIJywgQ2hfMl9QYXJfVmFsID09ICdSJyAgICAqLworICAgIC8qIHNlY29uZCBjYWxsOiAgICAgQ2hfMV9QYXJfVmFsID09ICdBJywgQ2hfMl9QYXJfVmFsID09ICdDJyAgICAqLworICAgIC8qIHRoaXJkIGNhbGw6ICAgICAgQ2hfMV9QYXJfVmFsID09ICdCJywgQ2hfMl9QYXJfVmFsID09ICdDJyAgICAqLworeworICBDYXBpdGFsX0xldHRlciAgICAgICAgQ2hfMV9Mb2M7CisgIENhcGl0YWxfTGV0dGVyICAgICAgICBDaF8yX0xvYzsKKworICBDaF8xX0xvYyA9IENoXzFfUGFyX1ZhbDsKKyAgQ2hfMl9Mb2MgPSBDaF8xX0xvYzsKKyAgaWYgKENoXzJfTG9jICE9IENoXzJfUGFyX1ZhbCkKKyAgICAvKiB0aGVuLCBleGVjdXRlZCAqLworICAgIHJldHVybiAoSWRlbnRfMSk7CisgIGVsc2UgIC8qIG5vdCBleGVjdXRlZCAqLworICB7CisgICAgQ2hfMV9HbG9iID0gQ2hfMV9Mb2M7CisgICAgcmV0dXJuIChJZGVudF8yKTsKKyAgIH0KK30gLyogRnVuY18xICovCisKKworCitCb29sZWFuIEZ1bmNfMiAoU3RyXzFfUGFyX1JlZiwgU3RyXzJfUGFyX1JlZikKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIC8qIGV4ZWN1dGVkIG9uY2UgKi8KKyAgICAvKiBTdHJfMV9QYXJfUmVmID09ICJESFJZU1RPTkUgUFJPR1JBTSwgMSdTVCBTVFJJTkciICovCisgICAgLyogU3RyXzJfUGFyX1JlZiA9PSAiREhSWVNUT05FIFBST0dSQU0sIDInTkQgU1RSSU5HIiAqLworCitTdHJfMzAgIFN0cl8xX1Bhcl9SZWY7CitTdHJfMzAgIFN0cl8yX1Bhcl9SZWY7Cit7CisgIFJFRyBPbmVfVGhpcnR5ICAgICAgICBJbnRfTG9jOworICAgICAgQ2FwaXRhbF9MZXR0ZXIgICAgQ2hfTG9jOworCisgIENoX0xvYyA9ICdBJzsKKyAgSW50X0xvYyA9IDI7CisgIHdoaWxlIChJbnRfTG9jIDw9IDIpIC8qIGxvb3AgYm9keSBleGVjdXRlZCBvbmNlICovCisgICAgaWYgKEZ1bmNfMSAoU3RyXzFfUGFyX1JlZltJbnRfTG9jXSwKKyAgICAgICAgICAgICAgICBTdHJfMl9QYXJfUmVmW0ludF9Mb2MrMV0pID09IElkZW50XzEpCisgICAgICAvKiB0aGVuLCBleGVjdXRlZCAqLworICAgIHsKKyAgICAgIENoX0xvYyA9ICdBJzsKKyAgICAgIEludF9Mb2MgKz0gMTsKKyAgICB9IC8qIGlmLCB3aGlsZSAqLworICBpZiAoQ2hfTG9jID49ICdXJyAmJiBDaF9Mb2MgPCAnWicpCisgICAgLyogdGhlbiwgbm90IGV4ZWN1dGVkICovCisgICAgSW50X0xvYyA9IDc7CisgIGlmIChDaF9Mb2MgPT0gJ1InKQorICAgIC8qIHRoZW4sIG5vdCBleGVjdXRlZCAqLworICAgIHJldHVybiAodHJ1ZSk7CisgIGVsc2UgLyogZXhlY3V0ZWQgKi8KKyAgeworICAgIGlmIChzdHJjbXAgKFN0cl8xX1Bhcl9SZWYsIFN0cl8yX1Bhcl9SZWYpID4gMCkKKyAgICAgIC8qIHRoZW4sIG5vdCBleGVjdXRlZCAqLworICAgIHsKKyAgICAgIEludF9Mb2MgKz0gNzsKKyAgICAgIEludF9HbG9iID0gSW50X0xvYzsKKyAgICAgIHJldHVybiAodHJ1ZSk7CisgICAgfQorICAgIGVsc2UgLyogZXhlY3V0ZWQgKi8KKyAgICAgIHJldHVybiAoZmFsc2UpOworICB9IC8qIGlmIENoX0xvYyAqLworfSAvKiBGdW5jXzIgKi8KKworCitCb29sZWFuIEZ1bmNfMyAoRW51bV9QYXJfVmFsKQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAvKiBleGVjdXRlZCBvbmNlICAgICAgICAqLworICAgIC8qIEVudW1fUGFyX1ZhbCA9PSBJZGVudF8zICovCitFbnVtZXJhdGlvbiBFbnVtX1Bhcl9WYWw7Cit7CisgIEVudW1lcmF0aW9uIEVudW1fTG9jOworCisgIEVudW1fTG9jID0gRW51bV9QYXJfVmFsOworICBpZiAoRW51bV9Mb2MgPT0gSWRlbnRfMykKKyAgICAvKiB0aGVuLCBleGVjdXRlZCAqLworICAgIHJldHVybiAodHJ1ZSk7CisgIGVsc2UgLyogbm90IGV4ZWN1dGVkICovCisgICAgcmV0dXJuIChmYWxzZSk7Cit9IC8qIEZ1bmNfMyAqLworCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvaGVsbG8vTWFrZWZpbGUgYi92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvaGVsbG8vTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY1NWQ2MAotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9oZWxsby9NYWtlZmlsZQpAQCAtMCwwICsxLDEzIEBACitzcmNfZGlyIDo9ICQoZGlyICQobGFzdHdvcmQgJChNQUtFRklMRV9MSVNUKSkpCisKK2Nfc3JjIDo9IHNjX3ByaW50LmMgaGVsbG8uYworCitpbmNsdWRlICQoaW5jX2RpcikvY29tbW9uLm1rCisKK2RlZmF1bHQ6IGxvZ19yZXF1ZXN0ZWRfdGd0ICQoYmxkX2RpcikvaGVsbG8uZWxmICQoYmxkX2RpcikvaGVsbG8uaGV4ICQoYmxkX2RpcikvaGVsbG8uZHVtcAorCitsb2dfcmVxdWVzdGVkX3RndDoKKwllY2hvIGhlbGxvLmhleD4+ICQoYmxkX2RpcikvdGVzdF9pbmZvCisKK2NsZWFuOgorCSQoUk0pICQoY19vYmpzKSAkKGFzbV9vYmpzKSAkKGJsZF9kaXIpL2hlbGxvLmVsZiAkKGJsZF9kaXIpL2hlbGxvLmhleCAkKGJsZF9kaXIpL2hlbGxvLmR1bXAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvaGVsbG8vaGVsbG8uYyBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9oZWxsby9oZWxsby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmNWM2ZTMKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvaGVsbG8vaGVsbG8uYwpAQCAtMCwwICsxLDcgQEAKKyNpbmNsdWRlICJzY19wcmludC5oIgorCitpbnQgbWFpbigpCit7CisgICAgc2NfcHJpbnRmKCJIZWxsbyBmcm9tIFlDUjEhXG4iKTsKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9pc3Jfc2FtcGxlL01ha2VmaWxlIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL2lzcl9zYW1wbGUvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM5NWU3NAotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9pc3Jfc2FtcGxlL01ha2VmaWxlCkBAIC0wLDAgKzEsMjYgQEAKK3NyY19kaXIgOj0gJChkaXIgJChsYXN0d29yZCAkKE1BS0VGSUxFX0xJU1QpKSkKKworTERGTEFHUyA6PSAtbm9zdGFydGZpbGVzIC1ub3N0ZGxpYiAtbWFyY2g9cnYzMiQoQVJDSCkgLW1hYmk9JChBQkkpCitBRERfQVNNX01BQ1JPIDo9IC1EQVNNCisKK2lmZXEgKCQoSVBJQykgLDEpCisgICAgQUREX0FTTV9NQUNSTyArPSAtRElQSUNfRU5BQkxFRAorZW5kaWYKKworaWZlcSAoJChWRUNUX0lSUSkgLDEpCisgICAgQUREX0FTTV9NQUNSTyArPSAtRFZFQ1RfSVJRX0VOQUJMRUQKK2VuZGlmCithc21fc3JjIDo9IGlzcl9zYW1wbGUuUworCisjIG92ZXJyaWRlIGxkIHNjcmlwdAorbGRfc2NyaXB0IDo9ICQoaW5jX2RpcikvbGluay5sZAorCitpbmNsdWRlICQoaW5jX2RpcikvY29tbW9uLm1rCisKK2RlZmF1bHQ6IGxvZ19yZXF1ZXN0ZWRfdGd0ICQoYmxkX2RpcikvaXNyX3NhbXBsZS5lbGYgJChibGRfZGlyKS9pc3Jfc2FtcGxlLmhleCAkKGJsZF9kaXIpL2lzcl9zYW1wbGUuZHVtcAorCitsb2dfcmVxdWVzdGVkX3RndDoKKwllY2hvIGlzcl9zYW1wbGUuaGV4ID4+ICQoYmxkX2RpcikvdGVzdF9pbmZvCisKK2NsZWFuOgorCSQoUk0pJChhc21fb2JqcykgJChibGRfZGlyKS9pc3Jfc2FtcGxlLmVsZiAkKGJsZF9kaXIpL2lzcl9zYW1wbGUuaGV4ICQoYmxkX2RpcikvaXNyX3NhbXBsZS5kdW1wClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL2lzcl9zYW1wbGUvaXNyX3NhbXBsZS5TIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL2lzcl9zYW1wbGUvaXNyX3NhbXBsZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3YjNkNjMKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvaXNyX3NhbXBsZS9pc3Jfc2FtcGxlLlMKQEAgLTAsMCArMSwyOTEgQEAKKyNpbmNsdWRlICJyaXNjdl9tYWNyb3MuaCIKKyNpbmNsdWRlICJzY190ZXN0LmgiCisKKy5hbHRtYWNybworLy8gZ2xvYmFsIGludGVycnVwdCBiaXQKKyNkZWZpbmUgTVNJRSAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IElSUV9NX1NPRlQpICAgICAgIC8vbWFjaGluZSBzb2Z0d2FyZSBpbnRlcnJ1cHQgZW5hYmxlCisjZGVmaW5lIE1USUUgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCBJUlFfTV9USU1FUikgICAgICAvL21hY2hpbmUgdGltZXIgaW50ZXJydXB0IGVuYWJsZQorI2RlZmluZSBNRUlFICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgSVJRX01fRVhUKSAgICAgICAgLy9tYWNoaW5lIGV4dGVybmFsIGludGVycnVwdCBlbmFibGUKKyNkZWZpbmUgTUNBVVNFX0VYVF9JUlEgICAgICAgICAgICAgICgxIDw8IDMxIHwgSVJRX01fRVhUKQorI2RlZmluZSBNQ0FVU0VfU09GVF9JUlEgICAgICAgICAgICAgKDEgPDwgMzEgfCBJUlFfTV9TT0ZUKQorI2RlZmluZSBNQ0FVU0VfVE1SX0lSUSAgICAgICAgICAgICAgKDEgPDwgMzEgfCBJUlFfTV9USU1FUikKKworLy8gSVBJQworI2RlZmluZSBJUlFfTElORVNfQUREUiAgICAgICAgICAgICAgMHgxMDAyMDAxOCAgICAgIC8vIHNpbXVsYXRpb24KKyNkZWZpbmUgVFJJR19FWFRfSVJRX0FERFIgICAgICAgICAgIDB4MTAwMjAwMTggICAgICAvLyBleHRlcm5hbCBpcnEgaXMgdHJpZ2dlcmVkIHdoZW4gdGIgbWVtb3J5IGlzIHNldCB0byBub24temVybyAvLyBCaXQgWzE1OjBdCisjZGVmaW5lIFRSSUdfU1dfSVJRX0FERFIgICAgICAgICAgICAweDEwMDIwMDE4ICAgICAgLy8gc29mdHdhcmUgaXJxIGlzIHRyaWdnZXJlZCB3aGVuIHRiIG1lbW9yeSBpcyBzZXQgdG8gbm9uLXplcm8gLy8gQml0IFsxNl0KKworI2RlZmluZSBJUElDX0VPSSAgICAgICAgICAgICAgICAgICAgMHhCRjQgICAgICAgICAgIC8vIGVuZCBvZiBpbnRlcnJ1cHQKKyNkZWZpbmUgSVBJQ19TT0kgICAgICAgICAgICAgICAgICAgIDB4QkY1ICAgICAgICAgICAvLyBzdGFydCBvZiBpbnRlcnJ1cHQKKyNkZWZpbmUgSVBJQ19JRFggICAgICAgICAgICAgICAgICAgIDB4QkY2ICAgICAgICAgICAvLyBpbmRleCByZWdpc3RlcgorI2RlZmluZSBJUElDX0lDU1IgICAgICAgICAgICAgICAgICAgMHhCRjcgICAgICAgICAgIC8vIGludGVycnVwdCBjb250cm9sIHN0YXR1cyByZWdpc3RlcgorCisvLyBJUElDIEludGVycnVwdCBDb25zdHJvbCBTdGF0dXMgUmVnaXN0ZXIKKyNkZWZpbmUgSVBJQ19JQ1NSX0lQICAgICAgICAgICAgICAgICgxIDw8IDApICAgICAgICAvLyBpbnRlcnJ1cHQgcGVuZGluZworI2RlZmluZSBJUElDX0lDU1JfSUUgICAgICAgICAgICAgICAgKDEgPDwgMSkgICAgICAgIC8vIGludGVycnVwdCBlbmFibGUKKyNkZWZpbmUgSVBJQ19JQ1NSX0lNICAgICAgICAgICAgICAgICgxIDw8IDIpICAgICAgICAvLyBpbnRlcnJ1cHQgbW9kZSAoMC8xOiBsZXZlbC9lZGdlKQorI2RlZmluZSBJUElDX0lDU1JfSU5WICAgICAgICAgICAgICAgKDEgPDwgMykgICAgICAgIC8vIGxpbmUgaW52ZXJzaW9uCisjZGVmaW5lIElQSUNfSUNTUl9JUyAgICAgICAgICAgICAgICAoMSA8PCA0KSAgICAgICAgLy8gaW4gc2VydmljZQorCisvLyAgSW50ZXJydXB0IGxpbmVzIGluIHVzZSAKKyNkZWZpbmUgSVBJQ19JUlFfTElORTkgICAgICAgICAgICAgIDkKKyNkZWZpbmUgRVhUX0lSUV9MSU5FX0NPTU1PTiAgICAgICAgIDAKKworI2luY2x1ZGUgInRpbWVyLmgiCisjaW5jbHVkZSAicmVsb2MuaCIKKworLm1hY3JvIGptcF9zY19leGl0CisgICAgbGEgIHQwLCBzY19leGl0CisgICAganIgIHQwCisuZW5kbQorCisgICAgLnNlY3Rpb24gLnRleHQuaW5pdAorICAgIC5vcHRpb24gbm9ydmMKKyAgICAuZ2xvYmwgX3N0YXJ0CisvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFRyYXAgaGFuZGxlcnMKKy8vIDB4WFhYWFhYMDAKKyAgICAub3B0aW9uIG5vcnZjCisub3JnICg2NCozKQorCisvLzB4WFhYWFhYQzAKKyAgICAuYmFsaWduIDY0CittYWNoaW5lX3RyYXBfZW50cnk6Cit2ZWNfdXNyX3NvZnQ6CisjaWZkZWYgVkVDVF9JUlFfRU5BQkxFRAorICAgIHRyYXBfZW50cnk6CisgICAgICAgIGogICAgX3RyYXBfZmFpbAorICAgIHZlY19zdXBlcnZpc29yX3NvZnQ6CisgICAgICAgIGogICAgX3RyYXBfZmFpbAorICAgIHZlY19yZXNlcnZlZDE6CisgICAgICAgIGogICAgX3RyYXBfZmFpbAorICAgIHZlY19tYWNoaW5lX3NvZnQ6CisgICAgICAgIGogICAgdmVjX21hY2hpbmVfc29mdF9oYW5kbGVyCisgICAgdmVjX3Vzcl90bXI6CisgICAgICAgIGogICAgX3RyYXBfZmFpbAorICAgIHZlY19zdXBlcnZpc29yX3RtcjoKKyAgICAgICAgaiAgICBfdHJhcF9mYWlsCisgICAgdmVjX3Jlc2VydmVkMjoKKyAgICAgICAgaiAgICBfdHJhcF9mYWlsCisgICAgdmVjX21hY2hpbmVfdG1yOgorICAgICAgICBqICAgIHZlY19tYWNoaW5lX3Rtcl9oYW5kbGVyCisgICAgdmVjX3Vzcl9leHQ6CisgICAgICAgIGogICAgX3RyYXBfZmFpbAorICAgIHZlY19zdXBlcnZpc29yX2V4dDoKKyAgICAgICAgaiAgICBfdHJhcF9mYWlsCisgICAgdmVjX3Jlc2VydmVkMzoKKyAgICAgICAgaiAgICBfdHJhcF9mYWlsCisgICAgdmVjX21hY2hpbmVfZXh0OgorICAgICAgICBqICAgIHZlY19tYWNoaW5lX2V4dF9oYW5kbGVyCisgICAgdmVjX3Jlc2VydmVkNDoKKyAgICAgICAgaiAgICBfdHJhcF9mYWlsCisgICAgICAgIGogICAgX3RyYXBfZmFpbAorICAgICAgICBqICAgIF90cmFwX2ZhaWwKKyAgICAgICAgaiAgICBfdHJhcF9mYWlsCisjZWxzZQorICAgIHRyYXBfZW50cnk6CisgICAgICAgIGogICAgZGlyZWN0X2lycV9oYW5kbGVyCisgICAgdmVjX3N1cGVydmlzb3Jfc29mdDoKKyAgICAgICAgaiAgICBfdHJhcF9mYWlsCisgICAgdmVjX3Jlc2VydmVkMToKKyAgICAgICAgaiAgICBfdHJhcF9mYWlsCisgICAgdmVjX21hY2hpbmVfc29mdDoKKyAgICAgICAgaiAgICBfdHJhcF9mYWlsCisgICAgdmVjX3Vzcl90bXI6CisgICAgICAgIGogICAgX3RyYXBfZmFpbAorICAgIHZlY19zdXBlcnZpc29yX3RtcjoKKyAgICAgICAgaiAgICBfdHJhcF9mYWlsCisgICAgdmVjX3Jlc2VydmVkMjoKKyAgICAgICAgaiAgICBfdHJhcF9mYWlsCisgICAgdmVjX21hY2hpbmVfdG1yOgorICAgICAgICBqICAgIF90cmFwX2ZhaWwKKyAgICB2ZWNfdXNyX2V4dDoKKyAgICAgICAgaiAgICBfdHJhcF9mYWlsCisgICAgdmVjX3N1cGVydmlzb3JfZXh0OgorICAgICAgICBqICAgIF90cmFwX2ZhaWwKKyAgICB2ZWNfcmVzZXJ2ZWQzOgorICAgICAgICBqICAgIF90cmFwX2ZhaWwKKyAgICB2ZWNfbWFjaGluZV9leHQ6CisgICAgICAgIGogICAgX3RyYXBfZmFpbAorICAgIHZlY19yZXNlcnZlZDQ6CisgICAgICAgIGogICAgX3RyYXBfZmFpbAorICAgICAgICBqICAgIF90cmFwX2ZhaWwKKyAgICAgICAgaiAgICBfdHJhcF9mYWlsCisgICAgICAgIGogICAgX3RyYXBfZmFpbAorCisjZW5kaWYgLy8gaWZkZWYgVkVDVF9JUlFfRU5BQkxFRAorCisKKyAgICAuYmFsaWduIDY0Citfc3RhcnQ6CisgICAgbGEgICAgICAgICAgICAgICAgICB0MCwgbWFjaGluZV90cmFwX2VudHJ5CisgICAgY3NydyAgICAgICAgICAgICAgICBtdHZlYywgdDAKKworICAgIGxhICAgICAgICAgICAgICAgICAgdDAsICB0ZXN0X3N0YXJ0CisgICAganIgICAgICAgICAgICAgICAgICAodDApCisKKy8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC5vcHRpb24gbm9ydmMKKyAgICAuYmFsaWduIDY0Cit0ZXN0X3N0YXJ0OgorICAgIAorICAgIGxhICAgICAgICAgICAgICAgICAgdDAsIHRyYXBfZW50cnkKKyAgICBjc3J3ICAgICAgICAgICAgICAgIG10dmVjLCB0MCAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2V0IG10dmVjIHRvIHRyYXBfZW50cnkKKyAgICAjaWZkZWYgVkVDVF9JUlFfRU5BQkxFRAorICAgICAgICBjc3JzaSAgICAgICAgICAgICAgIG10dmVjLCAxICAgICAgICAgICAgICAgICAgICAgICAvLyBzZXQgdmVjdG9yZWQgbW9kZQorICAgICNlbHNlCisgICAgICAgIGNzcnNpICAgICAgICAgICAgICAgbXR2ZWMsIDAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNldCBkaXJlY3QgbW9kZQorICAgICNlbmRpZgorCisgICAgLy8vIGNvbmZpZ3VyaW5nIHRpbWVyIGludGVycnVwdCAvLy8gCisgICAgX3Jlc2V0X210aW1lY21wOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVzZXQgdGltZXIKKyAgICBfcnVuX3RpbWVyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBydW4gdGltZXIKKyAgICBjc3JzICAgICAgICAgICAgICAgIG1zdGF0dXMsIE1TVEFUVVNfTUlFICAgICAgICAgICAvLyBlbmFibGUgZ2xvYmFsIGludGVycnVwdAorICAgIGxpICAgICAgICAgICAgICAgICAgYTAsIE1USUUgICAgICAgICAgICAgICAgICAgICAgIAorICAgIGNzcnMgICAgICAgICAgICAgICAgbWllLCBhMCAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVuYWJsZSB0aW1lciBpbnRlcnJ1cHQKKyAgICBsaSAgICAgICAgICAgICAgICAgIHQyLCAwICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXNldCB0aW1lciBjb3VudGVyID0gMCAodXBkYXRlZCBpbiBpc3IpCisgICAgX3JlYWRfbXRpbWUgICAgICAgICBzMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVhZCB0aW1lciB2YWx1ZQorICAgIGFkZGkgICAgICAgICAgICAgICAgczEsIHMxLCAyNTYKKyAgICBfd3JpdGVfbXRpbWVjbXBfMzIgIHMxIAorICAgIHdmaSAgCisKKworICAgLy8vIGNvbmZpZ3VyaW5nIGV4dGVybmFsIGludGVycnVwdCAvLy8gCisgICAgY3NydyAgICAgICAgICAgICAgICBtaWUsIHplcm8gICAgICAgICAgICAgICAgICAgICAgLy8gZGlzYWJsZSBhbGwgaW50ZXJydXB0cworICAgIGxpICAgICAgICAgICAgICAgICAgdDAsIElSUV9MSU5FU19BRERSCisgICAgc2ggICAgICAgICAgICAgICAgICB6ZXJvLCAodDApICAgICAgICAgICAgICAgICAgICAgLy8gc2V0IGFsbCBleHRlcmluYWwgaW50ZXJydXB0IGxpbmVzIGxvdworICAgICNpZmRlZiBJUElDX0VOQUJMRUQKKyAgICAgICAgbGkgICAgICAgICAgICAgICAgICB0MCwgSVBJQ19JUlFfTElORTkKKyAgICAgICAgY3NydyAgICAgICAgICAgICAgICBJUElDX0lEWCwgdDAgICAgICAgICAgICAgICAvLyBzZXQgSVBJQyB0byBleHBlY3QgaW50ZXJ1cHQgb24gbGluZSA5Li4uCisgICAgICAgIGxpICAgICAgICAgICAgICAgICAgdDAsIChJUElDX0lDU1JfSUUgfCBJUElDX0lDU1JfSU0pCisgICAgICAgIGNzcncgICAgICAgICAgICAgICAgSVBJQ19JQ1NSLCB0MCAgICAgICAgICAgICAgLy8gIC4uLi5lbmFibGUgaW50ZXJydXB0LHNldCBlZGdlIGludGVycnVwdCBtb2RlCisgICAgI2VuZGlmCisgICAgbGkgICAgICAgICAgICAgICAgICB0MCwgTUVJRQorICAgIGNzcnMgICAgICAgICAgICAgICAgbWllLCB0MCAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVuYWJsZSBleHRlcm5hbCBpbnRlcnJ1cHQgCisgICAgbGkgICAgICAgICAgICAgICAgICB0MCwgVFJJR19FWFRfSVJRX0FERFIKKyAgICAjaWZkZWYgSVBJQ19FTkFCTEVEICAgICAgICAgIAorICAgICAgICBsaSAgICAgICAgICAgICAgICAgIHQxLCAoMSA8PCBJUElDX0lSUV9MSU5FOSkKKyAgICAjZWxzZQorICAgICAgICBsaSAgICAgICAgICAgICAgICAgIHQxLCAoMSA8PCBFWFRfSVJRX0xJTkVfQ09NTU9OKQorICAgICNlbmRpZgorICAgIHNoICAgICAgICAgICAgICAgICAgdDEsICh0MCkgICAgICAgICAgICAgICAgICAgICAgIC8vc2VuZCBjb21tYW5kIHRvIGdlbmVyYXRlIGV4dGVybmFsIGludGVycnVwdCBvbiBsaW5lIDkgdG8gdGVzdGJlbmNoCisgICAgbm9wCisgICAgbm9wCisgICAgbm9wCisgICAgbm9wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy93YWl0IGZvciBleHRlcm5hbCBpbnRlcnJ1cHQKKworCisgICAgLy8vIGNvbmZpZ3VyaW5nIHNvZnR3YXJlIGludGVycnVwdCAvLy8gCisgICAgY3NydyAgICAgICAgICAgICAgICBtaWUsIHplcm8gICAgICAgICAgICAgICAgICAgICAgLy8gZGlzYWJsZSBhbGwgaW50ZXJydXB0cworICAgIGxpICAgICAgICAgICAgICAgICAgdDAsIFRSSUdfU1dfSVJRX0FERFIKKyAgICBsaSAgICAgICAgICAgICAgICAgIHQxLCAweDAwMDEwMDAwICAgICAgICAgICAgICAgICAvLyBTb2Z0IGlyZXEgYml0IFsxNl0gCisgICAgc3cgICAgICAgICAgICAgICAgICB0MSwgKHQwKSAgICAgICAgICAgICAgICAgICAgICAgLy9zZW5kIGNvbW1hbmQgdG8gZ2VuZXJhdGUgc29mdHdhcmUgaW50ZXJydXB0IAorICAgIGxpICAgICAgICAgICAgICAgICAgdDAsIE1TSUUKKyAgICBjc3JzICAgICAgICAgICAgICAgIG1pZSwgdDAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlbmFibGUgc29mdHdhcmUgaW50ZXJydXB0IAorICAgIG5vcAorICAgIG5vcAorICAgIG5vcAorICAgIG5vcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vd2FpdCBmb3Igc29mdHdhcmUgaW50ZXJydXB0CisKKyAgICBsaSAgICAgICAgICAgICAgICAgIHMxLCAzCisgICAgbGkgICAgICAgICAgICAgICAgICBhMCwgMAorICAgIGJlcSAgICAgICAgICAgICAgICAgdDIsIHMxLCAxZgorICAgIGxpICAgICAgICAgICAgICAgICAgYTAsIC0xCisxOgorICAgIGptcF9zY19leGl0CisKKworI2lmbmRlZiBWRUNUX0lSUV9FTkFCTEVECisKK2RpcmVjdF9pcnFfaGFuZGxlcjoKKyAgICBjc3JyICAgICAgICAgICAgYTEsIG1jYXVzZQorICAgIGxpICAgICAgICAgICAgICBhNSwgTUNBVVNFX1RNUl9JUlEgICAgICAvLzB4ODAwMDAwMDcgLS0gbWNhdXNlID0gdG1yLmlycQorICAgIGJlcSAgICAgICAgICAgICBhMSwgYTUsIHZlY19tYWNoaW5lX3Rtcl9oYW5kbGVyCisgICAgbGkgICAgICAgICAgICAgIGE1LCBNQ0FVU0VfU09GVF9JUlEgICAgIC8vMHg4MDAwMDAwMyAtLSBtY2F1c2UgPSBzb2Z0LmlycQorICAgIGJlcSAgICAgICAgICAgICBhMSwgYTUsIHZlY19tYWNoaW5lX3NvZnRfaGFuZGxlcgorICAgIGxpICAgICAgICAgICAgICBhNSwgTUNBVVNFX0VYVF9JUlEgICAgICAvLzB4ODAwMDAwMEIgLS0gbWNhdXNlID0gZXh0LmlycQorICAgIGJlcSAgICAgICAgICAgICBhMSwgYTUsIHZlY19tYWNoaW5lX2V4dF9oYW5kbGVyCisgICAgbXJldAorI2VuZGlmCisKK3ZlY19tYWNoaW5lX3Rtcl9oYW5kbGVyOgorICAgIGNzcnIgICAgICAgICAgICBhMSwgbWNhdXNlCisgICAgbGkgICAgICAgICAgICAgIGE1LCBNQ0FVU0VfVE1SX0lSUSAgICAgIC8vMHg4MDAwMDAwNyAtLSBtY2F1c2UgPSB0bXIuaXJxCisgICAgbGkgICAgICAgICAgICAgIGEwLCAtMQorICAgIGJuZSAgICAgICAgICAgICBhMSwgYTUsIGNoZWNrX2ZhaWwKKyAgICBjc3JyICAgICAgICAgICAgdDEsIG1pcAorICAgIGxpICAgICAgICAgICAgICB0MCwgTUlQX01USVAKKyAgICBhbmQgICAgICAgICAgICAgdDAsIHQxLCB0MAorICAgIGJlcXogICAgICAgICAgICB0MCwgY2hlY2tfZmFpbAorI2lmZGVmIElQSUNfRU5BQkxFRAorICAgIGNzcncgICAgICAgICAgICBJUElDX1NPSSwgemVybworICAgIGNzcncgICAgICAgICAgICBJUElDX0VPSSwgemVybworI2VuZGlmCisgICAgX3Jlc2V0X210aW1lY21wCisgICAgY3NyciAgICAgICAgICAgIHQxLCBtaXAKKyAgICBhbmRpICAgICAgICAgICAgdDEsIHQxLCBNSVBfTVRJUAorICAgIGJuZSAgICAgICAgICAgICB0MSwgemVybywgY2hlY2tfZmFpbAorICAgIGFkZGkgICAgICAgICAgICB0MiwgdDIsIDEgICAgICAgICAgICAgICAvLyB0bXIgaXJxIGNvdW50ZXIgdXBkYXRlCisgICAgbXJldAorCit2ZWNfbWFjaGluZV9leHRfaGFuZGxlcjoKKworICAgIGNzcnIgICAgICAgICAgICBhMSwgbWNhdXNlCisgICAgbGkgICAgICAgICAgICAgIGE1LCBNQ0FVU0VfRVhUX0lSUSAgICAgIC8vMHg4MDAwMDAwQiAtLSBtY2F1c2UgPSBleHQuaXJxCisgICAgbGkgICAgICAgICAgICAgIGEwLCAtMQorICAgIGJuZSAgICAgICAgICAgICBhMSwgYTUsIGNoZWNrX2ZhaWwKKyAgICBjc3JyICAgICAgICAgICAgdDEsIG1pcAorICAgIGxpICAgICAgICAgICAgICB0MCwgTUlQX01FSVAKKyAgICBhbmQgICAgICAgICAgICAgdDAsIHQxLCB0MAorICAgIGJlcXogICAgICAgICAgICB0MCwgY2hlY2tfZmFpbAorI2lmZGVmIElQSUNfRU5BQkxFRAorICAgIGNzcncgICAgICAgICAgICBJUElDX1NPSSwgemVybworICAgIGNzcncgICAgICAgICAgICBJUElDX0VPSSwgemVybworI2VuZGlmCisgICAgbGkgICAgICAgICAgICAgICAgICB0MCwgTUVJRQorICAgIGNzcmMgICAgICAgICAgICAgICAgbWllLCB0MCAgICAgICAgICAgICAvLyBkaXNhYmxlIHNvZnR3YXJlIGludGVycnVwdCAKKworICAgIGxpICAgICAgICAgICAgICB0MCwgVFJJR19FWFRfSVJRX0FERFIKKyAgICBsaSAgICAgICAgICAgICAgdDEsIEVYVF9JUlFfTElORV9DT01NT04gICAgICAgICAKKyAgICBzaCAgICAgICAgICAgICAgdDEsICh0MCkgICAgICAgICAgICAgICAgLy8gc2VuZCBjb21tYW5kIHRvIGRpc2FibGUgZXh0ZXJuYWwgaW50ZXJydXB0IAorICAgICAKKyAgICBjc3JyICAgICAgICAgICAgdDEsIG1pcAorICAgIGxpICAgICAgICAgICAgICB0MCwgTUlQX01FSVAKKyAgICBibmUgICAgICAgICAgICAgdDEsIHplcm8sIGNoZWNrX2ZhaWwKKyAgICBhZGRpICAgICAgICAgICAgdDIsIHQyLCAxICAgICAgICAgICAgICAgLy8gZXh0IGlycSBjb3VudGVyIHVwZGF0ZQorICAgIG1yZXQKKwordmVjX21hY2hpbmVfc29mdF9oYW5kbGVyOgorICAgIGNzcnIgICAgICAgICAgICBhMSwgbWNhdXNlCisgICAgbGkgICAgICAgICAgICAgIGE1LCBNQ0FVU0VfU09GVF9JUlEgICAgIC8vMHg4MDAwMDAwMyAtLSBtY2F1c2UgPSBzb2Z0LmlycQorICAgIGxpICAgICAgICAgICAgICBhMCwgLTEKKyAgICBibmUgICAgICAgICAgICAgYTEsIGE1LCBjaGVja19mYWlsCisgICAgY3NyciAgICAgICAgICAgIHQxLCBtaXAKKyAgICBsaSAgICAgICAgICAgICAgdDAsIE1JUF9NU0lQCisgICAgYW5kICAgICAgICAgICAgIHQwLCB0MSwgdDAKKyAgICBiZXF6ICAgICAgICAgICAgdDAsIGNoZWNrX2ZhaWwKKyAgICAjaWZkZWYgSVBJQ19FTkFCTEVECisgICAgICAgY3NydyAgICAgICAgIElQSUNfU09JLCB6ZXJvCisgICAgICAgY3NydyAgICAgICAgIElQSUNfRU9JLCB6ZXJvCisgICAgI2VuZGlmCisgICAgbGkgICAgICAgICAgICAgIHQwLCBNU0lFCisgICAgY3NyYyAgICAgICAgICAgIG1pZSwgdDAgICAgICAgICAgICAgICAgIC8vIGRpc2FibGUgc29mdHdhcmUgaW50ZXJydXB0IAorICAgIGxpICAgICAgICAgICAgICB0MCwgVFJJR19TV19JUlFfQUREUgorICAgIGxpICAgICAgICAgICAgICB0MSwgMHgwMDAwMDAwMAorICAgIHN3ICAgICAgICAgICAgICB0MSwgKHQwKSAgICAgICAgICAgICAgICAvLyBzZW5kIGNvbW1hbmQgdG8gc3RvcCBnZW5lcmF0aW5nICBzb2Z0d2FyZSBpbnRlcnJ1cHQgCisgICAgbGkgICAgICAgICAgICAgIHQwLCBNSVBfTVNJUAorICAgIGNzcmMgICAgICAgICAgICBtaXAsIHQwCisgICAgY3NyciAgICAgICAgICAgIHQxLCBtaXAKKyAgICBsaSAgICAgICAgICAgICAgdDAsIE1JUF9NU0lQCisgICAgYW5kICAgICAgICAgICAgIHQxLCB0MSwgdDAKKyAgICBibmUgICAgICAgICAgICAgdDEsIHplcm8sIGNoZWNrX2ZhaWwKKyAgICBhZGRpICAgICAgICAgICAgdDIsIHQyLCAxICAgICAgICAgICAgICAgLy8gZXh0IGlycSBjb3VudGVyIHVwZGF0ZQorICAgIG1yZXQKKworY2hlY2tfZmFpbDoKKyAgICBsYSAgICAgICAgICAgICAgdDAsIHNjX2V4aXQKKyAgICBqciAgICAgICAgICAgICAgdDAKKworX3RyYXBfZmFpbDoKKyAgICBsaSAgICAgICAgICAgICAgYTAsIC0xCisgICAgaiAgICAgICAgICAgICAgIGNoZWNrX2ZhaWwKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9pc3Jfc2FtcGxlL3RpbWVyLmggYi92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvaXNyX3NhbXBsZS90aW1lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyN2I4NDkKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvaXNyX3NhbXBsZS90aW1lci5oCkBAIC0wLDAgKzEsOTcgQEAKKyNpZm5kZWYgX19USU1FUl9fSAorI2RlZmluZSBfX1RJTUVSX19ICisKKworCisjZGVmaW5lIE1FTV9NVElNRV9NQVNLICAweEYwMDAwMDAwCisjZGVmaW5lIE1FTV9NVElNRV9DVFJMICAweDBDNDkwMDAwCisjZGVmaW5lIE1FTV9NVElNRV9ESVYgICAweDBDNDkwMDA0CisjZGVmaW5lIE1FTV9NVElNRSAgICAgICAweDBDNDkwMDA4CisjZGVmaW5lIE1FTV9NVElNRUggICAgICAweDBDNDkwMDBDCisjZGVmaW5lIE1FTV9NVElNRUNNUCAgICAweDBDNDkwMDEwCisjZGVmaW5lIE1FTV9NVElNRUNNUEggICAweDBDNDkwMDE0CisKKyNkZWZpbmUgVE1QICAgdDAKKyNkZWZpbmUgVE1QMiAgdDEKKyNkZWZpbmUgVE1QMyAgdDIKKworLy8gUmVzZXQKKy5tYWNybyBfcmVzZXRfbXRpbWUKKyAgICBsaSAgICAgICAgICBUTVAsIE1FTV9NVElNRQorICAgIHN3ICAgICAgICAgIHplcm8sIDAoVE1QKQorICAgIHN3ICAgICAgICAgIHplcm8sIDQoVE1QKQorLmVuZG0KKworLm1hY3JvIF9yZXNldF9tdGltZWNtcAorICAgIGxpICAgICAgICAgIFRNUCwgTUVNX01USU1FQ01QCisgICAgbm90ICAgICAgICAgVE1QMiwgemVybworICAgIHN3ICAgICAgICAgIFRNUDIsIDAoVE1QKQorICAgIHN3ICAgICAgICAgIFRNUDIsIDQoVE1QKQorLmVuZG0KKworLy8gV3JpdGUKKy5tYWNybyBfd3JpdGVfbXRpbWVfY3RybCByZWcKKyAgICBsaSAgICAgICAgICBUTVAsIE1FTV9NVElNRV9DVFJMCisgICAgc3cgICAgICAgICAgXHJlZywgMChUTVApCisuZW5kbQorCisubWFjcm8gX3dyaXRlX210aW1lX2RpdiByZWcKKyAgICBsaSAgICAgICAgICBUTVAsIE1FTV9NVElNRV9ESVYKKyAgICBzdyAgICAgICAgICBccmVnLCAwKFRNUCkKKy5lbmRtCisKKy5tYWNybyBfd3JpdGVfbXRpbWVjbXBfMzIgcmVnCisgICAgbGkgICAgICAgICAgVE1QLCBNRU1fTVRJTUVDTVAKKyAgICBsaSAgICAgICAgICBUTVAyLCAtMQorICAgIHN3ICAgICAgICAgIFRNUDIsIDAoVE1QKQorICAgIHN3ICAgICAgICAgIHplcm8sIDQoVE1QKQorICAgIHN3ICAgICAgICAgIFxyZWcsIDAoVE1QKQorLmVuZG0KKworLm1hY3JvIF93cml0ZV9tdGltZSByZWcKKyAgICBsaSAgICAgICAgICBUTVAsIE1FTV9NVElNRQorICAgIHN3ICAgICAgICAgIFxyZWcsIDAoVE1QKQorLmVuZG0KKworLm1hY3JvIF9yZWFkX210aW1lIHJlZworICAgIGxpICAgICAgICAgIFRNUCwgTUVNX01USU1FCisgICAgbHcgICAgICAgICAgXHJlZywgMChUTVApCisuZW5kbQorCisvLyBSZWFkCisubWFjcm8gX3JlYWRfbXRpbWVjbXAgcmVnCisgICAgbGkgICAgICAgICAgVE1QLCBNRU1fTVRJTUVDTVAKKyAgICBsdyAgICAgICAgICBccmVnLCAwKFRNUCkKKy5lbmRtCisKKy5tYWNybyBfcmVhZF9tdGltZV9jdHJsIHJlZworICAgIGxpICAgICAgICAgIFRNUCwgTUVNX01USU1FX0NUUkwKKyAgICBsdyAgICAgICAgICBccmVnLCAwKFRNUCkKKy5lbmRtCisKKy5tYWNybyBfcmVhZF9tdGltZV9kaXYgcmVnCisgICAgbGkgICAgICAgICAgVE1QLCBNRU1fTVRJTUVfRElWCisgICAgbHcgICAgICAgICAgXHJlZywgMChUTVApCisuZW5kbQorCisvLyBNaXNjCisubWFjcm8gX3J1bl90aW1lcgorICAgIGxpICAgICAgICAgIFRNUCwgTUVNX01USU1FX0NUUkwKKyAgICBsdyAgICAgICAgICBUTVAyLCAwKFRNUCkKKyAgICBsaSAgICAgICAgICBUTVAzLCAoMSA8PCBZQ1IxX01USU1FX0NUUkxfRU4pCisgICAgb3IgICAgICAgICAgVE1QMiwgVE1QMiwgVE1QMworICAgIHN3ICAgICAgICAgIFRNUDIsIDAoVE1QKQorLmVuZG0KKworLm1hY3JvIF9zdG9wX3RpbWVyCisgICAgbGkgICAgICAgICAgVE1QLCBNRU1fTVRJTUVfQ1RSTAorICAgIGx3ICAgICAgICAgIFRNUDIsIDAoVE1QKQorICAgIGxpICAgICAgICAgIFRNUDMsICgxIDw8IFlDUjFfTVRJTUVfQ1RSTF9FTikKKyAgICBub3QgICAgICAgICBUTVAzLCBUTVAzCisgICAgYW5kICAgICAgICAgVE1QMiwgVE1QMiwgVE1QMworICAgIHN3ICAgICAgICAgIFRNUDIsIDAoVE1QKQorLmVuZG0KKworCisKKyNlbmRpZiAvLyAjaWZuZGVmIF9fVElNRVJfX0gKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9yaXNjdl9jb21wbGlhbmNlL01ha2VmaWxlIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL3Jpc2N2X2NvbXBsaWFuY2UvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThmM2Q1ZgotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9yaXNjdl9jb21wbGlhbmNlL01ha2VmaWxlCkBAIC0wLDAgKzEsMjAwIEBACisjIyBAZmlsZQorIyMgIFlDUiogdGVzdHMKKyMjCisjIworCitBUkNIID89aW0KK292ZXJyaWRlIEFSQ0g6PXJ2MzIkKEFSQ0gpCisKK3NyY19kaXIgICAgICAgOj0gJChDVVJESVIpCitSSVNDVl9DT01QTElBTkNFX1RFU1RTIDo9ICQoc3JjX2RpcikvLi4vLi4vZGVwZW5kZW5jaWVzL3Jpc2N2LWNvbXBsaWFuY2UvCisKKyNJIElNIElNQyBJQworI0VNIEVNQyBFQworCitpZmVxIChydjMyZSwkKGZpbmRzdHJpbmcgcnYzMmUsJChBUkNIKSkpCisgICAgJChpbmZvID4+PiBSVjMyRSAtIG5vIGNvbXBsaWFuY2UgdGVzdHMpCitlbHNlICMjIGlmZGVmIFlDUl9CQVNFX1JWRV9FWFQKKyAgI2lmZXEgKHJ2MzJpLCQoZmluZHN0cmluZyBydjMyaSwkKEFSQ0gpKSkKKyAgaWZlcSAoJChBUkNIKSwkKGZpbHRlciAkKEFSQ0gpLHJ2MzJpIHJ2MzJpbSBydjMyaW1jIHJ2MzJpYykpCisgICAgJChpbmZvID4+PiBJMzIgVEVTVFMpCisgICAgaW5jbHVkZWRfaSArPSAkKGZpbHRlciAlLlMsXAorICAgICAgICAgICAgICAgICAgICAgICAgJCh3aWxkY2FyZCAkKFJJU0NWX0NPTVBMSUFOQ0VfVEVTVFMpL3Jpc2N2LXRlc3Qtc3VpdGUvcnYzMmkvc3JjLyopKQorCWluY2x1ZGVkX2kgKz0gJChmaWx0ZXIgJS5TLFwKKyAgICAgICAgICAgICAgICAgICAgICAgICQod2lsZGNhcmQgJChSSVNDVl9DT01QTElBTkNFX1RFU1RTKS9yaXNjdi10ZXN0LXN1aXRlL3J2MzJaaWNzci9zcmMvKikpCisJaW5jbHVkZWRfaSArPSAkKGZpbHRlciAlLlMsXAorICAgICAgICAgICAgICAgICAgICAgICAgJCh3aWxkY2FyZCAkKFJJU0NWX0NPTVBMSUFOQ0VfVEVTVFMpL3Jpc2N2LXRlc3Qtc3VpdGUvcnYzMlppZmVuY2VpL3NyYy8qKSkKKyAgICBjb21wbGlhbmNlX3NldCArPSAkKGluY2x1ZGVkX2kpCisgIGVuZGlmCisKKyAgIyQoaWYgb3IgaWZlcShydjMyaW0sJChmaW5kc3RyaW5nIHJ2MzJpbSwkKEFSQ0gpKSksIChydjMyaW1jLCQoZmluZHN0cmluZyBydjMyaW1jLCQoQVJDSCkpKSkKKyAgaWZlcSAoJChBUkNIKSwkKGZpbHRlciAkKEFSQ0gpLCBydjMyaW0gcnYzMmltYykpCisgICAgJChpbmZvID4+PiBJTTMyIFRFU1RTKQorICAgIGluY2x1ZGVkX2ltICs9ICQoZmlsdGVyICUuUyxcCisgICAgICAgICAgICAgICAgICAgICAgICAkKHdpbGRjYXJkICQoUklTQ1ZfQ09NUExJQU5DRV9URVNUUykvcmlzY3YtdGVzdC1zdWl0ZS9ydjMyaW0vc3JjLyopKQorICAgIGNvbXBsaWFuY2Vfc2V0ICs9ICQoaW5jbHVkZWRfaW0pCisgIGVuZGlmICMjCisKKyAgaWZlcSAocnYzMmltYywkKGZpbmRzdHJpbmcgcnYzMmltYywkKEFSQ0gpKSkKKyAgICAkKGluZm8gPj4+IElNQzMyIFRFU1RTKQorICAgIGluY2x1ZGVkX2ltYyArPSAkKGZpbHRlciAlLlMsXAorICAgICAgICAgICAgICAgICAgICAgICAgJCh3aWxkY2FyZCAkKFJJU0NWX0NPTVBMSUFOQ0VfVEVTVFMpL3Jpc2N2LXRlc3Qtc3VpdGUvcnYzMmltYy9zcmMvKikpCisgICAgY29tcGxpYW5jZV9zZXQgKz0gJChpbmNsdWRlZF9pbWMpCisgIGVuZGlmICMjIGlmZXEgKHJ2MzJpbWMsJChmaW5kc3RyaW5nIHJ2MzJpbWMsJChBUkNIKSkpCisgIGlmZXEgKHJ2MzJpYywkKGZpbmRzdHJpbmcgcnYzMmljLCQoQVJDSCkpKQorICBlbmRpZgorZW5kaWYgIyMKKworCiskKGluZm8gPj4+JChBUkNIKSBzZXQgaW5jbHVkZWQpCisKK2lmZXEgKCQoY29tcGxpYW5jZV9zZXQpLCkKKyQoaW5mbyA+Pj4gTm8gY29tcGxpYW5jZSB0ZXN0cyBpbmNsdWRlZCkKK2VuZGlmCisKKyQoaW5mbyA+Pj4+PiBjb21wbGlhbmNlIHNldDogJChjb21wbGlhbmNlX3NldCkpCisKK2RzdF9kaXIgICAgICAgOj0gJChibGRfZGlyKQordGVzdF9uYW1lICAgICA6PSByaXNjdl9jb21wbGlhbmNlCitibGRfZGlyICAgICAgIDo9ICQoYWRkcHJlZml4ICQoZHN0X2RpcikvLCAkKHRlc3RfbmFtZSkpCitvYmpfZGlyICAgICAgIDo9ICQoYmxkX2RpcikvcmlzY3ZfY29tcGxpYW5jZV9vYmpzCisKKyNjdXRfbGlzdCAgICAgICs9IHNjYWxsIGNzciBzaGFtdCBzaW1wbGUKK2N1dF9saXN0ICs9IEktTUlTQUxJR05fSk1QLTAxIEktTUlTQUxJR05fTERTVC0wMSBJLUVCUkVBSy0wMSBJLUVDQUxMLTAxCityZWZlcmVuY2Vfc3JjICs9ICQod2lsZGNhcmQgJChSSVNDVl9DT01QTElBTkNFX1RFU1RTKS9yaXNjdi10ZXN0LXN1aXRlL3J2MzJpKi8qLyoucmVmZXJlbmNlX291dHB1dCkKK3JlZmVyZW5jZV9zcmMgKz0gJCh3aWxkY2FyZCAkKFJJU0NWX0NPTVBMSUFOQ0VfVEVTVFMpL3Jpc2N2LXRlc3Qtc3VpdGUvcnYzMlppKi8qLyoucmVmZXJlbmNlX291dHB1dCkKK3Rlc3RuYW1lcyAgICAgOj0gJChiYXNlbmFtZSAkKG5vdGRpciAkKGNvbXBsaWFuY2Vfc2V0KSkpCitmaWx0ZXJlZCAgICAgIDo9ICQoZmlsdGVyLW91dCAkKGN1dF9saXN0KSwkKHRlc3RuYW1lcykpCitvYmpzICAgICAgICAgIDo9ICQoYWRkcHJlZml4ICQoYmxkX2RpcikvLCQoZmlsdGVyZWQ6JT0lLm8pKQordGVzdF9lbGYgICAgICA6PSAkKGFkZHByZWZpeCAkKGRzdF9kaXIpL2NvbXBsaWFuY2VfLCQoZmlsdGVyZWQ6JT0lLmVsZikpCit0ZXN0X2hleCAgICAgIDo9ICQoYWRkcHJlZml4ICQoZHN0X2RpcikvY29tcGxpYW5jZV8sJChmaWx0ZXJlZDolPSUuaGV4KSkKK3Rlc3RfZHVtcCAgICAgOj0gJChhZGRwcmVmaXggJChibGRfZGlyKS9jb21wbGlhbmNlXywkKGZpbHRlcmVkOiU9JS5kdW1wKSkKKworY29tcGxpYW5jZV9tYWNyb3NfZmlsZSA6PSAkKHJvb3RfZGlyKS90ZXN0cy9yaXNjdl9jb21wbGlhbmNlL2NvbXBsaWFuY2VfaW8uaAorY29tcGxpYW5jZV9vdXRwdXQgPz0gdHJ1ZQorCit0ZXN0bmFtZXNfaSAgICAgOj0gJChiYXNlbmFtZSAkKG5vdGRpciAkKGluY2x1ZGVkX2kpKSkKK3Rlc3RuYW1lc19pbSAgICAgOj0gJChiYXNlbmFtZSAkKG5vdGRpciAkKGluY2x1ZGVkX2ltKSkpCit0ZXN0bmFtZXNfaW1jICAgICA6PSAkKGJhc2VuYW1lICQobm90ZGlyICQoaW5jbHVkZWRfaW1jKSkpCitmaWx0ZXJlZF9pICAgICAgOj0gJChmaWx0ZXItb3V0ICQoY3V0X2xpc3QpLCQodGVzdG5hbWVzX2kpKQorZmlsdGVyZWRfaW0gICAgICA6PSAkKGZpbHRlci1vdXQgJChjdXRfbGlzdCksJCh0ZXN0bmFtZXNfaW0pKQorZmlsdGVyZWRfaW1jICAgICAgOj0gJChmaWx0ZXItb3V0ICQoY3V0X2xpc3QpLCQodGVzdG5hbWVzX2ltYykpCisKKyMgQVJDSF9GTEFHUyA6PSAtV2EsLW1hcmNoPXJ2MzJpbSAtbWFyY2g9cnYzMmltCisjIEFSQ0hfRkxBR1NfQyA6PSAtV2EsLW1hcmNoPXJ2MzJpbWMgLW1hcmNoPXJ2MzJpbWMKK0NGTEFHUyA6PSAtSSQoaW5jX2RpcikgLUkkKHNyY19kaXIpIC1EQVNNIC1tYWJpPWlscDMyIC1EX19yaXNjdl94bGVuPTMyIC13CitMREZMQUdTIDo9IC1zdGF0aWMgLWZ2aXNpYmlsaXR5PWhpZGRlbiAtbm9zdGRsaWIgLW5vc3RhcnRmaWxlcyAtVCQoaW5jX2RpcikvbGluay5sZCAtbWFyY2g9JChBUkNIKSAtbWFiaT1pbHAzMgorR0NDVkVSU0lPTkdUNyA6PSAkKHNoZWxsIGV4cHIgYCQoUklTQ1ZfR0NDKSAtZHVtcGZ1bGx2ZXJzaW9uIHwgY3V0IC1mMSAtZCcuJ2AgXD4gNykKK2lmZXEgIiQoR0NDVkVSU0lPTkdUNykiICIxIgorCUxERkxBR1MgKz0gLW1uby1yZWxheAorZW5kaWYKK1ZQQVRIICs9ICQoc3JjX2RpcikgJChibGRfZGlyKSAkKG9ial9kaXIpICQoYXNtX3BhdGgpICQocmVmX3BhdGgpICQoUklTQ1ZfQ09NUExJQU5DRV9URVNUUykKKworaWZlcSAoJChjb21wbGlhbmNlX291dHB1dCksIHRydWUpCitDRkxBR1MgKz0gLURfQ09NUExJQU5DRV9PVVRQVVQKK2VuZGlmCisKK2RlZmF1bHQ6IGNsZWFuIGxvZ19yZXF1ZXN0ZWRfdGd0IGNoZWNrX3ZlcnNpb24gY3BfYXNtIHJlZl9kYXRhICQodGVzdF9lbGYpICQodGVzdF9oZXgpICQodGVzdF9kdW1wKQorCitkZWZpbmUgY29tcGlsZV90ZW1wbGF0ZQorJChvYmpfZGlyKS8kKDEpLm86ICQob2JqX2RpcikgY3BfYXNtCisJJChSSVNDVl9HQ0MpIC1jICQkKGJsZF9kaXIpL2NvbXBsaWFuY2VfYXNtLyQoMSkuUyAkJChDRkxBR1MpIC1XYSwkKDIpICQoMikgLW8gJCRACitlbmRlZgorCitkZWZpbmUgcHJlcHJvY2Vzc2luZworZm9yIHRlc3RfYXNtIGluICQoMSk7IGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCittYXJjaF90bXA9JCR0ZXN0X2FzbSA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK21hcmNoX3RtcD0kJHttYXJjaF90bXAlL3NyYyp9IDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorbWFyY2hfdG1wPSQkKGJhc2VuYW1lICQkbWFyY2hfdG1wKSA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitmaWxlX25hbWU9IiQkKGJhc2VuYW1lICQke3Rlc3RfYXNtfSkiIDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyQoUklTQ1ZfR0NDKSAkKENGTEFHUykgLVdhLCQoMikgJCgyKSAtRSAkJHRlc3RfYXNtICAgICAgICAgICAgICAgICAgICAgICAgXAorLW8gJChibGRfZGlyKS9jb21wbGlhbmNlX2FzbS8kJGZpbGVfbmFtZSA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitkb25lCitlbmRlZgorCiskKGZvcmVhY2ggU1JDLCQoZmlsdGVyZWRfaSksJChldmFsICQoY2FsbCBjb21waWxlX3RlbXBsYXRlLCQoU1JDKSwtbWFyY2g9cnYzMmkpKSkKKyQoZm9yZWFjaCBTUkMsJChmaWx0ZXJlZF9pbSksJChldmFsICQoY2FsbCBjb21waWxlX3RlbXBsYXRlLCQoU1JDKSwtbWFyY2g9cnYzMmltKSkpCiskKGZvcmVhY2ggU1JDLCQoZmlsdGVyZWRfaW1jKSwkKGV2YWwgJChjYWxsIGNvbXBpbGVfdGVtcGxhdGUsJChTUkMpLC1tYXJjaD1ydjMyaW1jKSkpCisKKworbG9nX3JlcXVlc3RlZF90Z3Q6ICQoYmxkX2RpcikKKwkkKGZvcmVhY2ggdGVzdF9uYW1lLCAkKGZpbHRlcmVkKSwgJChldmFsICQoc2hlbGwgZWNobyBjb21wbGlhbmNlXyQodGVzdF9uYW1lKS5oZXggPj4gJChibGRfZGlyKS8uLi90ZXN0X2luZm8pKSkKKworJChibGRfZGlyKSA6CisJbWtkaXIgLXAgJChibGRfZGlyKQorCiskKG9ial9kaXIpIDogfCByZWZfZGF0YQorCW1rZGlyIC1wICQob2JqX2RpcikKKworJChkc3RfZGlyKS9jb21wbGlhbmNlXyUuZWxmOiAkKG9ial9kaXIpLyUubyB8ICQoZGVwX2ZpbGVzKQorCSQoUklTQ1ZfR0NDKSAkXiAkKExERkxBR1MpIC1vICRAIC1nCisKKyQoZHN0X2RpcikvY29tcGxpYW5jZV8lLmhleDogJChkc3RfZGlyKS9jb21wbGlhbmNlXyUuZWxmCisJJChSSVNDVl9ST01fT0JKQ09QWSkgJF4gJEAKKwkkKFJJU0NWX1JBTV9PQkpDT1BZKSAkXiAkQC5yYW0KKwkjYXNzaWduIDB4MDgwMF8weHh4ICB0byAweDAwMDBfMHh4eCB0byBtYXAgdG8gVENNIE1lbW9yeQorCXNlZCAtaSAncy9AMDgwMDAvQDAwMDAwL2cnICRALnJhbQorCiskKGJsZF9kaXIpL2NvbXBsaWFuY2VfJS5kdW1wOiAkKGRzdF9kaXIpL2NvbXBsaWFuY2VfJS5lbGYKKwkkKFJJU0NWX09CSkRVTVApIC1EIC13IC14IC1TICReID4gJEAKKworcmVmX2RhdGE6CisJbWtkaXIgLXAgJChibGRfZGlyKS9yZWZfZGF0YQorCWZvciBmaWxlcyBpbiAkKHJlZmVyZW5jZV9zcmMpIDsgZG8gXAorCXNlZF9pbnB1dD0kJGZpbGVzIDsgXAorCXNlZF9vdXRwdXQ9JCQoYmFzZW5hbWUgJCR7ZmlsZXMlLip9KSA7IFwKKwlzZWQgInMvXHIkJC8vOyBcCisJcy9cKC4uLi4uLi4uXCkvXDEsL2c7IFwKKwlzLy4kJC8vOyBzL1woLipcKSxcKC4qXCksXCguKlwpLFwoLipcKS9cNCxcMyxcMixcMS87IFwKKwlzL1woLi4uLi4uLi4uXCkvXDEweC9nOyBzL14vMHgvOyBzLyQkLywvOyAkJCBzLy4kJC8vIiAkJHNlZF9pbnB1dCA+ICQoYmxkX2RpcikvcmVmX2RhdGEvJCRzZWRfb3V0cHV0OyBcCisJZG9uZQorCitjcF9hc206CisJbWtkaXIgLXAgJChibGRfZGlyKS9jb21wbGlhbmNlX2FzbQorCSQoY2FsbCBwcmVwcm9jZXNzaW5nLCQoaW5jbHVkZWRfaSksLW1hcmNoPXJ2MzJpKQorCSQoY2FsbCBwcmVwcm9jZXNzaW5nLCQoaW5jbHVkZWRfaW0pLC1tYXJjaD1ydjMyaW0pCisJJChjYWxsIHByZXByb2Nlc3NpbmcsJChpbmNsdWRlZF9pbWMpLC1tYXJjaD1ydjMyaW1jKQorCisKK3Jpc2N2X2NvbXBsaWFuY2VfdGVzdHNfZGlyICAgIDo9ICQoaWYgJChSSVNDVl9DT01QTElBTkNFX1RFU1RTKSwgJChSSVNDVl9DT01QTElBTkNFX1RFU1RTKSwgLi91bmRlZmluZWQpCityaXNjdl90ZXN0c19jb21taXQgOj0gZDUxMjU5YjJhOTQ5YmUzYWYwMmU3NzZjMzllMTM1NDAyNjc1YWM5YgorIyMgY29tbWl0IGhhc2ggcmVhZGVkIGZyb20gbG9jYWwgY29weSBvZiBodHRwczovL2dpdGh1Yi5jb20vcmlzY3YvcmlzY3YtY29tcGxpYW5jZQordG1wX2NvbW1pdCA9ICQoc2hlbGwgY2QgJChyaXNjdl9jb21wbGlhbmNlX3Rlc3RzX2RpcikgMj4vZGV2L251bGwgJiYgZ2l0IGxvZyAtMSB8IGdyZXAgImNvbW1pdCIgfCBjdXQgLWYyIC1kICcgJykKK2lzX2NvbW1pdF9nb29kID0gJChpZiAkKHN1YnN0ICQocmlzY3ZfdGVzdHNfY29tbWl0KSwsJCh0bXBfY29tbWl0KSksZmFsc2UsdHJ1ZSkKKworIyBDb2xvcgorUkVEPVwwMzNbMDszMW0KK05DPVwwMzNbMG0KKworY2hlY2tfdmVyc2lvbiA6ICQocmlzY3ZfY29tcGxpYW5jZV90ZXN0c19kaXIpCisJQGlmIFsgISAtZCAkKHJpc2N2X2NvbXBsaWFuY2VfdGVzdHNfZGlyKSBdOyB0aGVuIFwKKwkJZWNobyAtZSAiJChSRUQpPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iICYmXAorCQllY2hvICIgICBFcnJvciEgRW52aXJvbm1lbnQgdmFyaWFibGUgUklTQ1ZfQ09NUExJQU5DRV9URVNUUz0nJChyaXNjdl9jb21wbGlhbmNlX3Rlc3RzX2RpciknICIgJiZcCisJCWVjaG8gIiAgICAgIGRpcmVjdG9yeSBub3QgZXhpc3QhIiAmJiBcCisJCWVjaG8gIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09JChOQykiIDsgXAorCWZpCitpZm5lcSAoJChpc19jb21taXRfZ29vZCksdHJ1ZSkKKwlAZWNobyAtZSAiJChSRUQpPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iCisJQGVjaG8gIiAgIFdhcm5pbmchIEV4ZWN1dGlvbiBvZiB0ZXN0IGNvZGUgaXMgbm90IGd1YXJhbnRlZWQgIgorCUBlY2hvICIgICB3aGlsZSB1c2luZyB0aGUgY3VycmVudCBjb21taXQgb2YgcmVwb3NpdG9yeSBsb2NhdGVkIGF0IDogJChyaXNjdl9jb21wbGlhbmNlX3Rlc3RzX2RpcikgLiIKKwlAZWNobyAiICAgIgorCUBlY2hvICIgICByaXNjdl9jb21wbGlhbmNlIHJlcG9zaXRvcnkgbXVzdCBwb2ludCB0byBjb21taXQgJChyaXNjdl90ZXN0c19jb21taXQpISIKKwlAZWNobyAtZSAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0kKE5DKSIKK2VuZGlmCisKKyQocmlzY3ZfY29tcGxpYW5jZV90ZXN0c19kaXIpIDouCitpZm5kZWYgUklTQ1ZfQ09NUExJQU5DRV9URVNUUworCUBlY2hvIC1lICIkKFJFRCk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIKKwlAZWNobyAiICAgIEVycm9yISBFbnZpcm9ubWVudCB2YXJpYWJsZSBSSVNDVl9DT01QTElBTkNFX1RFU1RTIG5vdCBzZXQhIgorCUBlY2hvICIgICAgWW91IG11c3Qgc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBSSVNDVl9DT01QTElBTkNFX1RFU1RTIgorCUBlY2hvICIgICAgVGhlIHZhcmlhYmxlIHNob3VsZCBwb2ludCB0byB0aGUgbG9jYWwgY29weSBvZiB0aGUiCisJQGVjaG8gIiAgICAgIHJlcG9zaXRvcnkgaHR0cHM6Ly9naXRodWIuY29tL3Jpc2N2L3Jpc2N2LWNvbXBsaWFuY2UiCisJQGVjaG8gIiAgICAgIHdpdGggdGhlIGNvbW1pdCAkKHJpc2N2X3Rlc3RzX2NvbW1pdCkiCisJQGVjaG8gLWUgIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09JChOQykiCisJZXhpdCAxCitlbmRpZgorCitjbGVhbjoKKwkkKFJNKSAtUiAkKHRlc3RfZWxmKSAkKHRlc3RfaGV4KSAkKGJsZF9kaXIpCisKKy5QSE9OWTogY2hlY2tfdmVyc2lvbiBjbGVhbiByZWZfZGF0YSBjcF9hc20gZGVmYXVsdApkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL3Jpc2N2X2NvbXBsaWFuY2UvYXdfdGVzdF9tYWNyb3MuaCBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9yaXNjdl9jb21wbGlhbmNlL2F3X3Rlc3RfbWFjcm9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2UwNTJhMQotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9yaXNjdl9jb21wbGlhbmNlL2F3X3Rlc3RfbWFjcm9zLmgKQEAgLTAsMCArMSw2ODMgQEAKKy8qCisgIENPUFkgT0YgL3Jpc2N2LWNvbXBsaWFuY2UvcmlzY3YtdGVzdC1lbnYvYXdfdGVzdF9tYWNyb3MuaAorICAqLworCisvLyBTZWUgTElDRU5TRSBmb3IgbGljZW5zZSBkZXRhaWxzLgorCisjaWZuZGVmIF9fVEVTVF9NQUNST1NfU0NBTEFSX0gKKyNkZWZpbmUgX19URVNUX01BQ1JPU19TQ0FMQVJfSAorCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBIZWxwZXIgbWFjcm9zCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworI2RlZmluZSBNQVNLX1hMRU4oeCkgKCh4KSAmICgoMSA8PCAoX19yaXNjdl94bGVuIC0gMSkgPDwgMSkgLSAxKSkKKworI2RlZmluZSBDSEVDS19YTEVOIGxpIGEwLCAxOyBzbGxpIGEwLCBhMCwgMzE7IGJsdHogYTAsIDFmOyBSVlRFU1RfUEFTUzsgMTogc3JsaSBhMCwgYTAsIDMxOyBsYSB0MCwgYmVnaW5fc2lnbmF0dXJlOyBzdyBhMCwgMCh0MCkKKworI2RlZmluZSBURVNUTlVNIGdwCisKKyNkZWZpbmUgU1dTSUcoIHRlc3RudW0sIHRlc3RyZWcgKSBcCisgICAgbGEgIHgyOCwgdGVzdF9yZXM7IFwKKyAgICBzdyB0ZXN0cmVnLCAodGVzdG51bTw8MikoeDI4KTsgXAorCisjCisjIEFkZHJlc3MgPSBiYXNlKyh0ZXN0bnVtPDwyKQorIyBzdyB0ZXN0cmVnLCAodGVzdG51bTw8MikoYmFzZXJlZykKKyMKKyNkZWZpbmUgVEVTVF9DQVNFKCB0ZXN0bnVtLCB0ZXN0cmVnLCBjb3JyZWN0dmFsLCBjb2RlLi4uICkgXAordGVzdF8gIyMgdGVzdG51bTogXAorICAgIGNvZGU7IFwKKyAgICBsaSAgeDI5LCBNQVNLX1hMRU4oY29ycmVjdHZhbCk7IFwKKyAgICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAorICAgICAgICBTV1NJRyh0ZXN0bnVtLHRlc3RyZWcpOyBcCisgICAgYm5lIHRlc3RyZWcsIHgyOSwgZmFpbDsKKworIyBXZSB1c2UgYSBtYWNybyBoYWNrIHRvIHNpbXBpZnkgY29kZSBnZW5lcmF0aW9uIGZvciB2YXJpb3VzIG51bWJlcnMKKyMgb2YgYnViYmxlIGN5Y2xlcy4KKworI2RlZmluZSBURVNUX0lOU0VSVF9OT1BTXzAKKyNkZWZpbmUgVEVTVF9JTlNFUlRfTk9QU18xICBub3A7IFRFU1RfSU5TRVJUX05PUFNfMAorI2RlZmluZSBURVNUX0lOU0VSVF9OT1BTXzIgIG5vcDsgVEVTVF9JTlNFUlRfTk9QU18xCisjZGVmaW5lIFRFU1RfSU5TRVJUX05PUFNfMyAgbm9wOyBURVNUX0lOU0VSVF9OT1BTXzIKKyNkZWZpbmUgVEVTVF9JTlNFUlRfTk9QU180ICBub3A7IFRFU1RfSU5TRVJUX05PUFNfMworI2RlZmluZSBURVNUX0lOU0VSVF9OT1BTXzUgIG5vcDsgVEVTVF9JTlNFUlRfTk9QU180CisjZGVmaW5lIFRFU1RfSU5TRVJUX05PUFNfNiAgbm9wOyBURVNUX0lOU0VSVF9OT1BTXzUKKyNkZWZpbmUgVEVTVF9JTlNFUlRfTk9QU183ICBub3A7IFRFU1RfSU5TRVJUX05PUFNfNgorI2RlZmluZSBURVNUX0lOU0VSVF9OT1BTXzggIG5vcDsgVEVTVF9JTlNFUlRfTk9QU183CisjZGVmaW5lIFRFU1RfSU5TRVJUX05PUFNfOSAgbm9wOyBURVNUX0lOU0VSVF9OT1BTXzgKKyNkZWZpbmUgVEVTVF9JTlNFUlRfTk9QU18xMCBub3A7IFRFU1RfSU5TRVJUX05PUFNfOQorCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSVjY0VUkgTUFDUk9TCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3RzIGZvciBpbnN0cnVjdGlvbnMgd2l0aCBpbW1lZGlhdGUgb3BlcmFuZAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyNkZWZpbmUgU0VYVF9JTU0oeCkgKCh4KSB8ICgtKCgoeCkgPj4gMTEpICYgMSkgPDwgMTEpKQorCisjZGVmaW5lIFRFU1RfSU1NX09QKCB0ZXN0bnVtLCBpbnN0LCByZXN1bHQsIHZhbDEsIGltbSApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgzMCwgcmVzdWx0LCBcCisgICAgICBsaSAgeDEsIE1BU0tfWExFTih2YWwxKTsgXAorICAgICAgaW5zdCB4MzAsIHgxLCBTRVhUX0lNTShpbW0pOyBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfSU1NX1NSQzFfRVFfREVTVCggdGVzdG51bSwgaW5zdCwgcmVzdWx0LCB2YWwxLCBpbW0gKSBcCisgICAgVEVTVF9DQVNFKCB0ZXN0bnVtLCB4MSwgcmVzdWx0LCBcCisgICAgICBsaSAgeDEsIE1BU0tfWExFTih2YWwxKTsgXAorICAgICAgaW5zdCB4MSwgeDEsIFNFWFRfSU1NKGltbSk7IFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9JTU1fREVTVF9CWVBBU1MoIHRlc3RudW0sIG5vcF9jeWNsZXMsIGluc3QsIHJlc3VsdCwgdmFsMSwgaW1tICkgXAorICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDYsIHJlc3VsdCwgXAorICAgICAgbGkgIHg0LCAwOyBcCisxOiAgICBsaSAgeDEsIE1BU0tfWExFTih2YWwxKTsgXAorICAgICAgaW5zdCB4MzAsIHgxLCBTRVhUX0lNTShpbW0pOyBcCisgICAgICBURVNUX0lOU0VSVF9OT1BTXyAjIyBub3BfY3ljbGVzIFwKKyAgICAgIGFkZGkgIHg2LCB4MzAsIDA7IFwKKyAgICAgIGFkZGkgIHg0LCB4NCwgMTsgXAorICAgICAgbGkgIHg1LCAyOyBcCisgICAgICBibmUgeDQsIHg1LCAxYiBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfSU1NX1NSQzFfQllQQVNTKCB0ZXN0bnVtLCBub3BfY3ljbGVzLCBpbnN0LCByZXN1bHQsIHZhbDEsIGltbSApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgzMCwgcmVzdWx0LCBcCisgICAgICBsaSAgeDQsIDA7IFwKKzE6ICAgIGxpICB4MSwgTUFTS19YTEVOKHZhbDEpOyBcCisgICAgICBURVNUX0lOU0VSVF9OT1BTXyAjIyBub3BfY3ljbGVzIFwKKyAgICAgIGluc3QgeDMwLCB4MSwgU0VYVF9JTU0oaW1tKTsgXAorICAgICAgYWRkaSAgeDQsIHg0LCAxOyBcCisgICAgICBsaSAgeDUsIDI7IFwKKyAgICAgIGJuZSB4NCwgeDUsIDFiIFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9JTU1fWkVST1NSQzEoIHRlc3RudW0sIGluc3QsIHJlc3VsdCwgaW1tICkgXAorICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDEsIHJlc3VsdCwgXAorICAgICAgaW5zdCB4MSwgeDAsIFNFWFRfSU1NKGltbSk7IFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9JTU1fWkVST0RFU1QoIHRlc3RudW0sIGluc3QsIHZhbDEsIGltbSApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgwLCAwLCBcCisgICAgICBsaSAgeDEsIE1BU0tfWExFTih2YWwxKTsgXAorICAgICAgaW5zdCB4MCwgeDEsIFNFWFRfSU1NKGltbSk7IFwKKyAgICApCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUZXN0cyBmb3IgYW4gaW5zdHJ1Y3Rpb24gd2l0aCByZWdpc3RlciBvcGVyYW5kcworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyNkZWZpbmUgVEVTVF9SX09QKCB0ZXN0bnVtLCBpbnN0LCByZXN1bHQsIHZhbDEgKSBcCisgICAgVEVTVF9DQVNFKCB0ZXN0bnVtLCB4MzAsIHJlc3VsdCwgXAorICAgICAgbGkgIHgxLCB2YWwxOyBcCisgICAgICBpbnN0IHgzMCwgeDE7IFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9SX1NSQzFfRVFfREVTVCggdGVzdG51bSwgaW5zdCwgcmVzdWx0LCB2YWwxICkgXAorICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDEsIHJlc3VsdCwgXAorICAgICAgbGkgIHgxLCB2YWwxOyBcCisgICAgICBpbnN0IHgxLCB4MTsgXAorICAgICkKKworI2RlZmluZSBURVNUX1JfREVTVF9CWVBBU1MoIHRlc3RudW0sIG5vcF9jeWNsZXMsIGluc3QsIHJlc3VsdCwgdmFsMSApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHg2LCByZXN1bHQsIFwKKyAgICAgIGxpICB4NCwgMDsgXAorMTogICAgbGkgIHgxLCB2YWwxOyBcCisgICAgICBpbnN0IHgzMCwgeDE7IFwKKyAgICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIG5vcF9jeWNsZXMgXAorICAgICAgYWRkaSAgeDYsIHgzMCwgMDsgXAorICAgICAgYWRkaSAgeDQsIHg0LCAxOyBcCisgICAgICBsaSAgeDUsIDI7IFwKKyAgICAgIGJuZSB4NCwgeDUsIDFiIFwKKyAgICApCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUZXN0cyBmb3IgYW4gaW5zdHJ1Y3Rpb24gd2l0aCByZWdpc3Rlci1yZWdpc3RlciBvcGVyYW5kcworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyNkZWZpbmUgVEVTVF9SUl9PUCggdGVzdG51bSwgaW5zdCwgcmVzdWx0LCB2YWwxLCB2YWwyICkgXAorICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDMwLCByZXN1bHQsIFwKKyAgICAgIGxpICB4MSwgTUFTS19YTEVOKHZhbDEpOyBcCisgICAgICBsaSAgeDIsIE1BU0tfWExFTih2YWwyKTsgXAorICAgICAgaW5zdCB4MzAsIHgxLCB4MjsgXAorICAgICkKKworI2RlZmluZSBURVNUX1JSX1NSQzFfRVFfREVTVCggdGVzdG51bSwgaW5zdCwgcmVzdWx0LCB2YWwxLCB2YWwyICkgXAorICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDEsIHJlc3VsdCwgXAorICAgICAgbGkgIHgxLCBNQVNLX1hMRU4odmFsMSk7IFwKKyAgICAgIGxpICB4MiwgTUFTS19YTEVOKHZhbDIpOyBcCisgICAgICBpbnN0IHgxLCB4MSwgeDI7IFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9SUl9TUkMyX0VRX0RFU1QoIHRlc3RudW0sIGluc3QsIHJlc3VsdCwgdmFsMSwgdmFsMiApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgyLCByZXN1bHQsIFwKKyAgICAgIGxpICB4MSwgTUFTS19YTEVOKHZhbDEpOyBcCisgICAgICBsaSAgeDIsIE1BU0tfWExFTih2YWwyKTsgXAorICAgICAgaW5zdCB4MiwgeDEsIHgyOyBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfUlJfU1JDMTJfRVFfREVTVCggdGVzdG51bSwgaW5zdCwgcmVzdWx0LCB2YWwxICkgXAorICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDEsIHJlc3VsdCwgXAorICAgICAgbGkgIHgxLCBNQVNLX1hMRU4odmFsMSk7IFwKKyAgICAgIGluc3QgeDEsIHgxLCB4MTsgXAorICAgICkKKworI2RlZmluZSBURVNUX1JSX0RFU1RfQllQQVNTKCB0ZXN0bnVtLCBub3BfY3ljbGVzLCBpbnN0LCByZXN1bHQsIHZhbDEsIHZhbDIgKSBcCisgICAgVEVTVF9DQVNFKCB0ZXN0bnVtLCB4NiwgcmVzdWx0LCBcCisgICAgICBsaSAgeDQsIDA7IFwKKzE6ICAgIGxpICB4MSwgTUFTS19YTEVOKHZhbDEpOyBcCisgICAgICBsaSAgeDIsIE1BU0tfWExFTih2YWwyKTsgXAorICAgICAgaW5zdCB4MzAsIHgxLCB4MjsgXAorICAgICAgVEVTVF9JTlNFUlRfTk9QU18gIyMgbm9wX2N5Y2xlcyBcCisgICAgICBhZGRpICB4NiwgeDMwLCAwOyBcCisgICAgICBhZGRpICB4NCwgeDQsIDE7IFwKKyAgICAgIGxpICB4NSwgMjsgXAorICAgICAgYm5lIHg0LCB4NSwgMWIgXAorICAgICkKKworI2RlZmluZSBURVNUX1JSX1NSQzEyX0JZUEFTUyggdGVzdG51bSwgc3JjMV9ub3BzLCBzcmMyX25vcHMsIGluc3QsIHJlc3VsdCwgdmFsMSwgdmFsMiApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgzMCwgcmVzdWx0LCBcCisgICAgICBsaSAgeDQsIDA7IFwKKzE6ICAgIGxpICB4MSwgTUFTS19YTEVOKHZhbDEpOyBcCisgICAgICBURVNUX0lOU0VSVF9OT1BTXyAjIyBzcmMxX25vcHMgXAorICAgICAgbGkgIHgyLCBNQVNLX1hMRU4odmFsMik7IFwKKyAgICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIHNyYzJfbm9wcyBcCisgICAgICBpbnN0IHgzMCwgeDEsIHgyOyBcCisgICAgICBhZGRpICB4NCwgeDQsIDE7IFwKKyAgICAgIGxpICB4NSwgMjsgXAorICAgICAgYm5lIHg0LCB4NSwgMWIgXAorICAgICkKKworI2RlZmluZSBURVNUX1JSX1NSQzIxX0JZUEFTUyggdGVzdG51bSwgc3JjMV9ub3BzLCBzcmMyX25vcHMsIGluc3QsIHJlc3VsdCwgdmFsMSwgdmFsMiApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgzMCwgcmVzdWx0LCBcCisgICAgICBsaSAgeDQsIDA7IFwKKzE6ICAgIGxpICB4MiwgTUFTS19YTEVOKHZhbDIpOyBcCisgICAgICBURVNUX0lOU0VSVF9OT1BTXyAjIyBzcmMxX25vcHMgXAorICAgICAgbGkgIHgxLCBNQVNLX1hMRU4odmFsMSk7IFwKKyAgICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIHNyYzJfbm9wcyBcCisgICAgICBpbnN0IHgzMCwgeDEsIHgyOyBcCisgICAgICBhZGRpICB4NCwgeDQsIDE7IFwKKyAgICAgIGxpICB4NSwgMjsgXAorICAgICAgYm5lIHg0LCB4NSwgMWIgXAorICAgICkKKworI2RlZmluZSBURVNUX1JSX1pFUk9TUkMxKCB0ZXN0bnVtLCBpbnN0LCByZXN1bHQsIHZhbCApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgyLCByZXN1bHQsIFwKKyAgICAgIGxpIHgxLCBNQVNLX1hMRU4odmFsKTsgXAorICAgICAgaW5zdCB4MiwgeDAsIHgxOyBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfUlJfWkVST1NSQzIoIHRlc3RudW0sIGluc3QsIHJlc3VsdCwgdmFsICkgXAorICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDIsIHJlc3VsdCwgXAorICAgICAgbGkgeDEsIE1BU0tfWExFTih2YWwpOyBcCisgICAgICBpbnN0IHgyLCB4MSwgeDA7IFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9SUl9aRVJPU1JDMTIoIHRlc3RudW0sIGluc3QsIHJlc3VsdCApIFwKKyAgICBURVNUX0NBU0UoIHRlc3RudW0sIHgxLCByZXN1bHQsIFwKKyAgICAgIGluc3QgeDEsIHgwLCB4MDsgXAorICAgICkKKworI2RlZmluZSBURVNUX1JSX1pFUk9ERVNUKCB0ZXN0bnVtLCBpbnN0LCB2YWwxLCB2YWwyICkgXAorICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDAsIDAsIFwKKyAgICAgIGxpIHgxLCBNQVNLX1hMRU4odmFsMSk7IFwKKyAgICAgIGxpIHgyLCBNQVNLX1hMRU4odmFsMik7IFwKKyAgICAgIGluc3QgeDAsIHgxLCB4MjsgXAorICAgICkKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3QgbWVtb3J5IGluc3RydWN0aW9ucworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyNkZWZpbmUgVEVTVF9MRF9PUCggdGVzdG51bSwgaW5zdCwgcmVzdWx0LCBvZmZzZXQsIGJhc2UgKSBcCisgICAgVEVTVF9DQVNFKCB0ZXN0bnVtLCB4MzAsIHJlc3VsdCwgXAorICAgICAgbGEgIHgxLCBiYXNlOyBcCisgICAgICBpbnN0IHgzMCwgb2Zmc2V0KHgxKTsgXAorICAgICkKKworI2RlZmluZSBURVNUX1NUX09QKCB0ZXN0bnVtLCBsb2FkX2luc3QsIHN0b3JlX2luc3QsIHJlc3VsdCwgb2Zmc2V0LCBiYXNlICkgXAorICAgIFRFU1RfQ0FTRSggdGVzdG51bSwgeDMwLCByZXN1bHQsIFwKKyAgICAgIGxhICB4MSwgYmFzZTsgXAorICAgICAgbGkgIHgyLCByZXN1bHQ7IFwKKyAgICAgIHN0b3JlX2luc3QgeDIsIG9mZnNldCh4MSk7IFwKKyAgICAgIGxvYWRfaW5zdCB4MzAsIG9mZnNldCh4MSk7IFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9MRF9ERVNUX0JZUEFTUyggdGVzdG51bSwgbm9wX2N5Y2xlcywgaW5zdCwgcmVzdWx0LCBvZmZzZXQsIGJhc2UgKSBcCit0ZXN0XyAjIyB0ZXN0bnVtOiBcCisgICAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKKyAgU1dTSUcgKHRlc3RudW0sIFRFU1ROVU0pO1wKKyAgICBsaSAgeDQsIDA7IFwKKzE6ICBsYSAgeDEsIGJhc2U7IFwKKyAgICBpbnN0IHgzMCwgb2Zmc2V0KHgxKTsgXAorICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIG5vcF9jeWNsZXMgXAorICAgIGFkZGkgIHg2LCB4MzAsIDA7IFwKKyAgICBsaSAgeDI5LCByZXN1bHQ7IFwKKyAgICBibmUgeDYsIHgyOSwgZmFpbDsgXAorICAgIGFkZGkgIHg0LCB4NCwgMTsgXAorICAgIGxpICB4NSwgMjsgXAorICAgIGJuZSB4NCwgeDUsIDFiOyBcCisKKyNkZWZpbmUgVEVTVF9MRF9TUkMxX0JZUEFTUyggdGVzdG51bSwgbm9wX2N5Y2xlcywgaW5zdCwgcmVzdWx0LCBvZmZzZXQsIGJhc2UgKSBcCit0ZXN0XyAjIyB0ZXN0bnVtOiBcCisgICAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKKyAgU1dTSUcgKHRlc3RudW0sIFRFU1ROVU0pO1wKKyAgICBsaSAgeDQsIDA7IFwKKzE6ICBsYSAgeDEsIGJhc2U7IFwKKyAgICBURVNUX0lOU0VSVF9OT1BTXyAjIyBub3BfY3ljbGVzIFwKKyAgICBpbnN0IHgzMCwgb2Zmc2V0KHgxKTsgXAorICAgIGxpICB4MjksIHJlc3VsdDsgXAorICAgIGJuZSB4MzAsIHgyOSwgZmFpbDsgXAorICAgIGFkZGkgIHg0LCB4NCwgMTsgXAorICAgIGxpICB4NSwgMjsgXAorICAgIGJuZSB4NCwgeDUsIDFiIFwKKworI2RlZmluZSBURVNUX1NUX1NSQzEyX0JZUEFTUyggdGVzdG51bSwgc3JjMV9ub3BzLCBzcmMyX25vcHMsIGxvYWRfaW5zdCwgc3RvcmVfaW5zdCwgcmVzdWx0LCBvZmZzZXQsIGJhc2UgKSBcCit0ZXN0XyAjIyB0ZXN0bnVtOiBcCisgICAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKKyAgU1dTSUcgKHRlc3RudW0sIFRFU1ROVU0pO1wKKyAgICBsaSAgeDQsIDA7IFwKKzE6ICBsaSAgeDEsIHJlc3VsdDsgXAorICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIHNyYzFfbm9wcyBcCisgICAgbGEgIHgyLCBiYXNlOyBcCisgICAgVEVTVF9JTlNFUlRfTk9QU18gIyMgc3JjMl9ub3BzIFwKKyAgICBzdG9yZV9pbnN0IHgxLCBvZmZzZXQoeDIpOyBcCisgICAgbG9hZF9pbnN0IHgzMCwgb2Zmc2V0KHgyKTsgXAorICAgIGxpICB4MjksIHJlc3VsdDsgXAorICAgIGJuZSB4MzAsIHgyOSwgZmFpbDsgXAorICAgIGFkZGkgIHg0LCB4NCwgMTsgXAorICAgIGxpICB4NSwgMjsgXAorICAgIGJuZSB4NCwgeDUsIDFiIFwKKworI2RlZmluZSBURVNUX1NUX1NSQzIxX0JZUEFTUyggdGVzdG51bSwgc3JjMV9ub3BzLCBzcmMyX25vcHMsIGxvYWRfaW5zdCwgc3RvcmVfaW5zdCwgcmVzdWx0LCBvZmZzZXQsIGJhc2UgKSBcCit0ZXN0XyAjIyB0ZXN0bnVtOiBcCisgICAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKKyAgU1dTSUcgKHRlc3RudW0sIFRFU1ROVU0pO1wKKyAgICBsaSAgeDQsIDA7IFwKKzE6ICBsYSAgeDIsIGJhc2U7IFwKKyAgICBURVNUX0lOU0VSVF9OT1BTXyAjIyBzcmMxX25vcHMgXAorICAgIGxpICB4MSwgcmVzdWx0OyBcCisgICAgVEVTVF9JTlNFUlRfTk9QU18gIyMgc3JjMl9ub3BzIFwKKyAgICBzdG9yZV9pbnN0IHgxLCBvZmZzZXQoeDIpOyBcCisgICAgbG9hZF9pbnN0IHgzMCwgb2Zmc2V0KHgyKTsgXAorICAgIGxpICB4MjksIHJlc3VsdDsgXAorICAgIGJuZSB4MzAsIHgyOSwgZmFpbDsgXAorICAgIGFkZGkgIHg0LCB4NCwgMTsgXAorICAgIGxpICB4NSwgMjsgXAorICAgIGJuZSB4NCwgeDUsIDFiIFwKKworI2RlZmluZSBURVNUX0JSMl9PUF9UQUtFTiggdGVzdG51bSwgaW5zdCwgdmFsMSwgdmFsMiApIFwKK3Rlc3RfICMjIHRlc3RudW06IFwKKyAgICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAorICBTV1NJRyAodGVzdG51bSwgVEVTVE5VTSk7XAorICAgIGxpICB4MSwgdmFsMTsgXAorICAgIGxpICB4MiwgdmFsMjsgXAorICAgIGluc3QgeDEsIHgyLCAyZjsgXAorICAgIGJuZSB4MCwgVEVTVE5VTSwgZmFpbDsgXAorMTogIGJuZSB4MCwgVEVTVE5VTSwgM2Y7IFwKKzI6ICBpbnN0IHgxLCB4MiwgMWI7IFwKKyAgICBibmUgeDAsIFRFU1ROVU0sIGZhaWw7IFwKKzM6CisKKyNkZWZpbmUgVEVTVF9CUjJfT1BfTk9UVEFLRU4oIHRlc3RudW0sIGluc3QsIHZhbDEsIHZhbDIgKSBcCit0ZXN0XyAjIyB0ZXN0bnVtOiBcCisgICAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKKyAgU1dTSUcgKHRlc3RudW0sIFRFU1ROVU0pO1wKKyAgICBsaSAgeDEsIHZhbDE7IFwKKyAgICBsaSAgeDIsIHZhbDI7IFwKKyAgICBpbnN0IHgxLCB4MiwgMWY7IFwKKyAgICBibmUgeDAsIFRFU1ROVU0sIDJmOyBcCisxOiAgYm5lIHgwLCBURVNUTlVNLCBmYWlsOyBcCisyOiAgaW5zdCB4MSwgeDIsIDFiOyBcCiszOgorCisjZGVmaW5lIFRFU1RfQlIyX1NSQzEyX0JZUEFTUyggdGVzdG51bSwgc3JjMV9ub3BzLCBzcmMyX25vcHMsIGluc3QsIHZhbDEsIHZhbDIgKSBcCit0ZXN0XyAjIyB0ZXN0bnVtOiBcCisgICAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKKyAgU1dTSUcgKHRlc3RudW0sIFRFU1ROVU0pO1wKKyAgICBsaSAgeDQsIDA7IFwKKzE6ICBsaSAgeDEsIHZhbDE7IFwKKyAgICBURVNUX0lOU0VSVF9OT1BTXyAjIyBzcmMxX25vcHMgXAorICAgIGxpICB4MiwgdmFsMjsgXAorICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIHNyYzJfbm9wcyBcCisgICAgaW5zdCB4MSwgeDIsIGZhaWw7IFwKKyAgICBhZGRpICB4NCwgeDQsIDE7IFwKKyAgICBsaSAgeDUsIDI7IFwKKyAgICBibmUgeDQsIHg1LCAxYiBcCisKKyNkZWZpbmUgVEVTVF9CUjJfU1JDMjFfQllQQVNTKCB0ZXN0bnVtLCBzcmMxX25vcHMsIHNyYzJfbm9wcywgaW5zdCwgdmFsMSwgdmFsMiApIFwKK3Rlc3RfICMjIHRlc3RudW06IFwKKyAgICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAorICBTV1NJRyAodGVzdG51bSwgVEVTVE5VTSk7XAorICAgIGxpICB4NCwgMDsgXAorMTogIGxpICB4MiwgdmFsMjsgXAorICAgIFRFU1RfSU5TRVJUX05PUFNfICMjIHNyYzFfbm9wcyBcCisgICAgbGkgIHgxLCB2YWwxOyBcCisgICAgVEVTVF9JTlNFUlRfTk9QU18gIyMgc3JjMl9ub3BzIFwKKyAgICBpbnN0IHgxLCB4MiwgZmFpbDsgXAorICAgIGFkZGkgIHg0LCB4NCwgMTsgXAorICAgIGxpICB4NSwgMjsgXAorICAgIGJuZSB4NCwgeDUsIDFiIFwKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3QganVtcCBpbnN0cnVjdGlvbnMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjZGVmaW5lIFRFU1RfSlJfU1JDMV9CWVBBU1MoIHRlc3RudW0sIG5vcF9jeWNsZXMsIGluc3QgKSBcCit0ZXN0XyAjIyB0ZXN0bnVtOiBcCisgICAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKKyAgU1dTSUcgKHRlc3RudW0sIFRFU1ROVU0pO1wKKyAgICBsaSAgeDQsIDA7IFwKKzE6ICBsYSAgeDYsIDJmOyBcCisgICAgVEVTVF9JTlNFUlRfTk9QU18gIyMgbm9wX2N5Y2xlcyBcCisgICAgaW5zdCB4NjsgXAorICAgIGJuZSB4MCwgVEVTVE5VTSwgZmFpbDsgXAorMjogIGFkZGkgIHg0LCB4NCwgMTsgXAorICAgIGxpICB4NSwgMjsgXAorICAgIGJuZSB4NCwgeDUsIDFiIFwKKworI2RlZmluZSBURVNUX0pBTFJfU1JDMV9CWVBBU1MoIHRlc3RudW0sIG5vcF9jeWNsZXMsIGluc3QgKSBcCit0ZXN0XyAjIyB0ZXN0bnVtOiBcCisgICAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKKyAgU1dTSUcgKHRlc3RudW0sIFRFU1ROVU0pO1wKKyAgICBsaSAgeDQsIDA7IFwKKzE6ICBsYSAgeDYsIDJmOyBcCisgICAgVEVTVF9JTlNFUlRfTk9QU18gIyMgbm9wX2N5Y2xlcyBcCisgICAgaW5zdCB4MTksIHg2LCAwOyBcCisgICAgYm5lIHgwLCBURVNUTlVNLCBmYWlsOyBcCisyOiAgYWRkaSAgeDQsIHg0LCAxOyBcCisgICAgbGkgIHg1LCAyOyBcCisgICAgYm5lIHg0LCB4NSwgMWIgXAorCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSVjY0VUYgTUFDUk9TCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3RzIGZsb2F0aW5nLXBvaW50IGluc3RydWN0aW9ucworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyNkZWZpbmUgcU5hTmYgMGY6N2ZjMDAwMDAKKyNkZWZpbmUgc05hTmYgMGY6N2Y4MDAwMDEKKyNkZWZpbmUgcU5hTiAwZDo3ZmY4MDAwMDAwMDAwMDAwCisjZGVmaW5lIHNOYU4gMGQ6N2ZmMDAwMDAwMDAwMDAwMQorCisjZGVmaW5lIFRFU1RfRlBfT1BfU19JTlRFUk5BTCggdGVzdG51bSwgZmxhZ3MsIHJlc3VsdCwgdmFsMSwgdmFsMiwgdmFsMywgY29kZS4uLiApIFwKK3Rlc3RfICMjIHRlc3RudW06IFwKKyAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKKyAgU1dTSUcgKHRlc3RudW0sIFRFU1ROVU0pO1wKKyAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0bnVtICMjIF9kYXRhIDtcCisgIGZsdyBmMCwgMChhMCk7IFwKKyAgZmx3IGYxLCA0KGEwKTsgXAorICBmbHcgZjIsIDgoYTApOyBcCisgIGx3ICBhMywgMTIoYTApOyBcCisgIGNvZGU7IFwKKyAgZnNmbGFncyBhMSwgeDA7IFwKKyAgbGkgYTIsIGZsYWdzOyBcCisgIGJuZSBhMCwgYTMsIGZhaWw7IFwKKyAgYm5lIGExLCBhMiwgZmFpbDsgXAorICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKKyAgLmFsaWduIDI7IFwKKyAgdGVzdF8gIyMgdGVzdG51bSAjIyBfZGF0YTogXAorICAuZmxvYXQgdmFsMTsgXAorICAuZmxvYXQgdmFsMjsgXAorICAuZmxvYXQgdmFsMzsgXAorICAucmVzdWx0OyBcCisgIC5wb3BzZWN0aW9uCisKKyNkZWZpbmUgVEVTVF9GUF9PUF9EX0lOVEVSTkFMKCB0ZXN0bnVtLCBmbGFncywgcmVzdWx0LCB2YWwxLCB2YWwyLCB2YWwzLCBjb2RlLi4uICkgXAordGVzdF8gIyMgdGVzdG51bTogXAorICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAorICBTV1NJRyAodGVzdG51bSwgVEVTVE5VTSk7XAorICBsYSAgYTAsIHRlc3RfICMjIHRlc3RudW0gIyMgX2RhdGEgO1wKKyAgZmxkIGYwLCAwKGEwKTsgXAorICBmbGQgZjEsIDgoYTApOyBcCisgIGZsZCBmMiwgMTYoYTApOyBcCisgIGxkICBhMywgMjQoYTApOyBcCisgIGNvZGU7IFwKKyAgZnNmbGFncyBhMSwgeDA7IFwKKyAgbGkgYTIsIGZsYWdzOyBcCisgIGJuZSBhMCwgYTMsIGZhaWw7IFwKKyAgYm5lIGExLCBhMiwgZmFpbDsgXAorICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKKyAgLmFsaWduIDM7IFwKKyAgdGVzdF8gIyMgdGVzdG51bSAjIyBfZGF0YTogXAorICAuZG91YmxlIHZhbDE7IFwKKyAgLmRvdWJsZSB2YWwyOyBcCisgIC5kb3VibGUgdmFsMzsgXAorICAucmVzdWx0OyBcCisgIC5wb3BzZWN0aW9uCisKKy8vIFRPRE86IGFzc2lnbiBhIHNlcGFyYXRlIG1lbSBsb2NhdGlvbiBmb3IgdGhlIGNvbXBhcmlzb24gYWRkcmVzcz8KKyNkZWZpbmUgVEVTVF9GUF9PUF9EMzJfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCByZXN1bHQsIHZhbDEsIHZhbDIsIHZhbDMsIGNvZGUuLi4gKSBcCit0ZXN0XyAjIyB0ZXN0bnVtOiBcCisgIGxpICBURVNUTlVNLCB0ZXN0bnVtOyBcCisgIFNXU0lHICh0ZXN0bnVtLCBURVNUTlVNKTtcCisgIGxhICBhMCwgdGVzdF8gIyMgdGVzdG51bSAjIyBfZGF0YSA7XAorICBmbGQgZjAsIDAoYTApOyBcCisgIGZsZCBmMSwgOChhMCk7IFwKKyAgZmxkIGYyLCAxNihhMCk7IFwKKyAgbHcgIGEzLCAyNChhMCk7IFwKKyAgbHcgIHQxLCAyOChhMCk7IFwKKyAgY29kZTsgXAorICBmc2ZsYWdzIGExLCB4MDsgXAorICBsaSBhMiwgZmxhZ3M7IFwKKyAgYm5lIGEwLCBhMywgZmFpbDsgXAorICBibmUgdDEsIHQyLCBmYWlsOyBcCisgIGJuZSBhMSwgYTIsIGZhaWw7IFwKKyAgLnB1c2hzZWN0aW9uIC5kYXRhOyBcCisgIC5hbGlnbiAzOyBcCisgIHRlc3RfICMjIHRlc3RudW0gIyMgX2RhdGE6IFwKKyAgLmRvdWJsZSB2YWwxOyBcCisgIC5kb3VibGUgdmFsMjsgXAorICAuZG91YmxlIHZhbDM7IFwKKyAgLnJlc3VsdDsgXAorICAucG9wc2VjdGlvbgorCisjZGVmaW5lIFRFU1RfRkNWVF9TX0QzMiggdGVzdG51bSwgcmVzdWx0LCB2YWwxICkgXAorICBURVNUX0ZQX09QX0QzMl9JTlRFUk5BTCggdGVzdG51bSwgMCwgZG91YmxlIHJlc3VsdCwgdmFsMSwgMC4wLCAwLjAsIFwKKyAgICAgICAgICAgICAgICAgICAgZmN2dC5zLmQgZjMsIGYwOyBmY3Z0LmQucyBmMywgZjM7IGZzZCBmMywgMChhMCk7IGx3IHQyLCA0KGEwKTsgbHcgYTAsIDAoYTApKQorCisjZGVmaW5lIFRFU1RfRkNWVF9TX0QoIHRlc3RudW0sIHJlc3VsdCwgdmFsMSApIFwKKyAgVEVTVF9GUF9PUF9EX0lOVEVSTkFMKCB0ZXN0bnVtLCAwLCBkb3VibGUgcmVzdWx0LCB2YWwxLCAwLjAsIDAuMCwgXAorICAgICAgICAgICAgICAgICAgICBmY3Z0LnMuZCBmMywgZjA7IGZjdnQuZC5zIGYzLCBmMzsgZm12LnguZCBhMCwgZjMpCisKKyNkZWZpbmUgVEVTVF9GQ1ZUX0RfUyggdGVzdG51bSwgcmVzdWx0LCB2YWwxICkgXAorICBURVNUX0ZQX09QX1NfSU5URVJOQUwoIHRlc3RudW0sIDAsIGZsb2F0IHJlc3VsdCwgdmFsMSwgMC4wLCAwLjAsIFwKKyAgICAgICAgICAgICAgICAgICAgZmN2dC5kLnMgZjMsIGYwOyBmY3Z0LnMuZCBmMywgZjM7IGZtdi54LnMgYTAsIGYzKQorCisjZGVmaW5lIFRFU1RfRlBfT1AxX1MoIHRlc3RudW0sIGluc3QsIGZsYWdzLCByZXN1bHQsIHZhbDEgKSBcCisgIFRFU1RfRlBfT1BfU19JTlRFUk5BTCggdGVzdG51bSwgZmxhZ3MsIGZsb2F0IHJlc3VsdCwgdmFsMSwgMC4wLCAwLjAsIFwKKyAgICAgICAgICAgICAgICAgICAgaW5zdCBmMywgZjA7IGZtdi54LnMgYTAsIGYzKQorCisjZGVmaW5lIFRFU1RfRlBfT1AxX0QzMiggdGVzdG51bSwgaW5zdCwgZmxhZ3MsIHJlc3VsdCwgdmFsMSApIFwKKyAgVEVTVF9GUF9PUF9EMzJfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBkb3VibGUgcmVzdWx0LCB2YWwxLCAwLjAsIDAuMCwgXAorICAgICAgICAgICAgICAgICAgICBpbnN0IGYzLCBmMDsgZnNkIGYzLCAwKGEwKTsgbHcgdDIsIDQoYTApOyBsdyBhMCwgMChhMCkpCisvLyBeOiBzdG9yZSBjb21wdXRhdGlvbiByZXN1bHQgaW4gYWRkcmVzcyBmcm9tIGEwLCBsb2FkIGhpZ2gtd29yZCBpbnRvIHQyCisKKyNkZWZpbmUgVEVTVF9GUF9PUDFfRCggdGVzdG51bSwgaW5zdCwgZmxhZ3MsIHJlc3VsdCwgdmFsMSApIFwKKyAgVEVTVF9GUF9PUF9EX0lOVEVSTkFMKCB0ZXN0bnVtLCBmbGFncywgZG91YmxlIHJlc3VsdCwgdmFsMSwgMC4wLCAwLjAsIFwKKyAgICAgICAgICAgICAgICAgICAgaW5zdCBmMywgZjA7IGZtdi54LmQgYTAsIGYzKQorCisjZGVmaW5lIFRFU1RfRlBfT1AxX1NfRFdPUkRfUkVTVUxUKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxICkgXAorICBURVNUX0ZQX09QX1NfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBkd29yZCByZXN1bHQsIHZhbDEsIDAuMCwgMC4wLCBcCisgICAgICAgICAgICAgICAgICAgIGluc3QgZjMsIGYwOyBmbXYueC5zIGEwLCBmMykKKworI2RlZmluZSBURVNUX0ZQX09QMV9EMzJfRFdPUkRfUkVTVUxUKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxICkgXAorICBURVNUX0ZQX09QX0QzMl9JTlRFUk5BTCggdGVzdG51bSwgZmxhZ3MsIGR3b3JkIHJlc3VsdCwgdmFsMSwgMC4wLCAwLjAsIFwKKyAgICAgICAgICAgICAgICAgICAgaW5zdCBmMywgZjA7IGZzZCBmMywgMChhMCk7IGx3IHQyLCA0KGEwKTsgbHcgYTAsIDAoYTApKQorLy8gXjogc3RvcmUgY29tcHV0YXRpb24gcmVzdWx0IGluIGFkZHJlc3MgZnJvbSBhMCwgbG9hZCBoaWdoLXdvcmQgaW50byB0MgorCisjZGVmaW5lIFRFU1RfRlBfT1AxX0RfRFdPUkRfUkVTVUxUKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxICkgXAorICBURVNUX0ZQX09QX0RfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBkd29yZCByZXN1bHQsIHZhbDEsIDAuMCwgMC4wLCBcCisgICAgICAgICAgICAgICAgICAgIGluc3QgZjMsIGYwOyBmbXYueC5kIGEwLCBmMykKKworI2RlZmluZSBURVNUX0ZQX09QMl9TKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxLCB2YWwyICkgXAorICBURVNUX0ZQX09QX1NfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBmbG9hdCByZXN1bHQsIHZhbDEsIHZhbDIsIDAuMCwgXAorICAgICAgICAgICAgICAgICAgICBpbnN0IGYzLCBmMCwgZjE7IGZtdi54LnMgYTAsIGYzKQorCisjZGVmaW5lIFRFU1RfRlBfT1AyX0QzMiggdGVzdG51bSwgaW5zdCwgZmxhZ3MsIHJlc3VsdCwgdmFsMSwgdmFsMiApIFwKKyAgVEVTVF9GUF9PUF9EMzJfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBkb3VibGUgcmVzdWx0LCB2YWwxLCB2YWwyLCAwLjAsIFwKKyAgICAgICAgICAgICAgICAgICAgaW5zdCBmMywgZjAsIGYxOyBmc2QgZjMsIDAoYTApOyBsdyB0MiwgNChhMCk7IGx3IGEwLCAwKGEwKSkKKy8vIF46IHN0b3JlIGNvbXB1dGF0aW9uIHJlc3VsdCBpbiBhZGRyZXNzIGZyb20gYTAsIGxvYWQgaGlnaC13b3JkIGludG8gdDIKKworI2RlZmluZSBURVNUX0ZQX09QMl9EKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxLCB2YWwyICkgXAorICBURVNUX0ZQX09QX0RfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBkb3VibGUgcmVzdWx0LCB2YWwxLCB2YWwyLCAwLjAsIFwKKyAgICAgICAgICAgICAgICAgICAgaW5zdCBmMywgZjAsIGYxOyBmbXYueC5kIGEwLCBmMykKKworI2RlZmluZSBURVNUX0ZQX09QM19TKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxLCB2YWwyLCB2YWwzICkgXAorICBURVNUX0ZQX09QX1NfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBmbG9hdCByZXN1bHQsIHZhbDEsIHZhbDIsIHZhbDMsIFwKKyAgICAgICAgICAgICAgICAgICAgaW5zdCBmMywgZjAsIGYxLCBmMjsgZm12LngucyBhMCwgZjMpCisKKyNkZWZpbmUgVEVTVF9GUF9PUDNfRDMyKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxLCB2YWwyLCB2YWwzICkgXAorICBURVNUX0ZQX09QX0QzMl9JTlRFUk5BTCggdGVzdG51bSwgZmxhZ3MsIGRvdWJsZSByZXN1bHQsIHZhbDEsIHZhbDIsIHZhbDMsIFwKKyAgICAgICAgICAgICAgICAgICAgaW5zdCBmMywgZjAsIGYxLCBmMjsgZnNkIGYzLCAwKGEwKTsgbHcgdDIsIDQoYTApOyBsdyBhMCwgMChhMCkpCisvLyBeOiBzdG9yZSBjb21wdXRhdGlvbiByZXN1bHQgaW4gYWRkcmVzcyBmcm9tIGEwLCBsb2FkIGhpZ2gtd29yZCBpbnRvIHQyCisKKyNkZWZpbmUgVEVTVF9GUF9PUDNfRCggdGVzdG51bSwgaW5zdCwgZmxhZ3MsIHJlc3VsdCwgdmFsMSwgdmFsMiwgdmFsMyApIFwKKyAgVEVTVF9GUF9PUF9EX0lOVEVSTkFMKCB0ZXN0bnVtLCBmbGFncywgZG91YmxlIHJlc3VsdCwgdmFsMSwgdmFsMiwgdmFsMywgXAorICAgICAgICAgICAgICAgICAgICBpbnN0IGYzLCBmMCwgZjEsIGYyOyBmbXYueC5kIGEwLCBmMykKKworI2RlZmluZSBURVNUX0ZQX0lOVF9PUF9TKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxLCBybSApIFwKKyAgVEVTVF9GUF9PUF9TX0lOVEVSTkFMKCB0ZXN0bnVtLCBmbGFncywgd29yZCByZXN1bHQsIHZhbDEsIDAuMCwgMC4wLCBcCisgICAgICAgICAgICAgICAgICAgIGluc3QgYTAsIGYwLCBybSkKKworI2RlZmluZSBURVNUX0ZQX0lOVF9PUF9EMzIoIHRlc3RudW0sIGluc3QsIGZsYWdzLCByZXN1bHQsIHZhbDEsIHJtICkgXAorICBURVNUX0ZQX09QX0QzMl9JTlRFUk5BTCggdGVzdG51bSwgZmxhZ3MsIGR3b3JkIHJlc3VsdCwgdmFsMSwgMC4wLCAwLjAsIFwKKyAgICAgICAgICAgICAgICAgICAgaW5zdCBhMCwgZjAsIGYxOyBsaSB0MiwgMCkKKworI2RlZmluZSBURVNUX0ZQX0lOVF9PUF9EKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxLCBybSApIFwKKyAgVEVTVF9GUF9PUF9EX0lOVEVSTkFMKCB0ZXN0bnVtLCBmbGFncywgZHdvcmQgcmVzdWx0LCB2YWwxLCAwLjAsIDAuMCwgXAorICAgICAgICAgICAgICAgICAgICBpbnN0IGEwLCBmMCwgcm0pCisKKyNkZWZpbmUgVEVTVF9GUF9DTVBfT1BfUyggdGVzdG51bSwgaW5zdCwgZmxhZ3MsIHJlc3VsdCwgdmFsMSwgdmFsMiApIFwKKyAgVEVTVF9GUF9PUF9TX0lOVEVSTkFMKCB0ZXN0bnVtLCBmbGFncywgd29yZCByZXN1bHQsIHZhbDEsIHZhbDIsIDAuMCwgXAorICAgICAgICAgICAgICAgICAgICBpbnN0IGEwLCBmMCwgZjEpCisKKyNkZWZpbmUgVEVTVF9GUF9DTVBfT1BfRDMyKCB0ZXN0bnVtLCBpbnN0LCBmbGFncywgcmVzdWx0LCB2YWwxLCB2YWwyICkgXAorICBURVNUX0ZQX09QX0QzMl9JTlRFUk5BTCggdGVzdG51bSwgZmxhZ3MsIGR3b3JkIHJlc3VsdCwgdmFsMSwgdmFsMiwgMC4wLCBcCisgICAgICAgICAgICAgICAgICAgIGluc3QgYTAsIGYwLCBmMTsgbGkgdDIsIDApCisKKyNkZWZpbmUgVEVTVF9GUF9DTVBfT1BfRCggdGVzdG51bSwgaW5zdCwgZmxhZ3MsIHJlc3VsdCwgdmFsMSwgdmFsMiApIFwKKyAgVEVTVF9GUF9PUF9EX0lOVEVSTkFMKCB0ZXN0bnVtLCBmbGFncywgZHdvcmQgcmVzdWx0LCB2YWwxLCB2YWwyLCAwLjAsIFwKKyAgICAgICAgICAgICAgICAgICAgaW5zdCBhMCwgZjAsIGYxKQorCisjZGVmaW5lIFRFU1RfRkNMQVNTX1ModGVzdG51bSwgY29ycmVjdCwgaW5wdXQpIFwKKyAgVEVTVF9DQVNFKHRlc3RudW0sIGEwLCBjb3JyZWN0LCBsaSBhMCwgaW5wdXQ7IGZtdi5zLnggZmEwLCBhMDsgXAorICAgICAgICAgICAgICAgICAgICBmY2xhc3MucyBhMCwgZmEwKQorCisjZGVmaW5lIFRFU1RfRkNMQVNTX0QzMih0ZXN0bnVtLCBjb3JyZWN0LCBpbnB1dCkgXAorICBURVNUX0NBU0UodGVzdG51bSwgYTAsIGNvcnJlY3QsIFwKKyAgICAgICAgICAgIGxhIGEwLCB0ZXN0XyAjIyB0ZXN0bnVtICMjIF9kYXRhIDtcCisgICAgICAgICAgICBmbGQgZmEwLCAwKGEwKTsgXAorICAgICAgICAgICAgZmNsYXNzLmQgYTAsIGZhMCkgXAorICAgIC5wdXNoc2VjdGlvbiAuZGF0YTsgXAorICAgIC5hbGlnbiAzOyBcCisgICAgdGVzdF8gIyMgdGVzdG51bSAjIyBfZGF0YTogXAorICAgIC5kd29yZCBpbnB1dDsgXAorICAgIC5wb3BzZWN0aW9uCisKKyNkZWZpbmUgVEVTVF9GQ0xBU1NfRCh0ZXN0bnVtLCBjb3JyZWN0LCBpbnB1dCkgXAorICBURVNUX0NBU0UodGVzdG51bSwgYTAsIGNvcnJlY3QsIGxpIGEwLCBpbnB1dDsgZm12LmQueCBmYTAsIGEwOyBcCisgICAgICAgICAgICAgICAgICAgIGZjbGFzcy5kIGEwLCBmYTApCisKKyNkZWZpbmUgVEVTVF9JTlRfRlBfT1BfUyggdGVzdG51bSwgaW5zdCwgcmVzdWx0LCB2YWwxICkgXAordGVzdF8gIyMgdGVzdG51bTogXAorICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAorICBTV1NJRyAodGVzdG51bSwgVEVTVE5VTSk7XAorICBsYSAgYTAsIHRlc3RfICMjIHRlc3RudW0gIyMgX2RhdGEgO1wKKyAgbHcgIGEzLCAwKGEwKTsgXAorICBsaSAgYTAsIHZhbDE7IFwKKyAgaW5zdCBmMCwgYTA7IFwKKyAgZnNmbGFncyB4MDsgXAorICBmbXYueC5zIGEwLCBmMDsgXAorICBibmUgYTAsIGEzLCBmYWlsOyBcCisgIC5wdXNoc2VjdGlvbiAuZGF0YTsgXAorICAuYWxpZ24gMjsgXAorICB0ZXN0XyAjIyB0ZXN0bnVtICMjIF9kYXRhOiBcCisgIC5mbG9hdCByZXN1bHQ7IFwKKyAgLnBvcHNlY3Rpb24KKworI2RlZmluZSBURVNUX0lOVF9GUF9PUF9EMzIoIHRlc3RudW0sIGluc3QsIHJlc3VsdCwgdmFsMSApIFwKK3Rlc3RfICMjIHRlc3RudW06IFwKKyAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKKyAgU1dTSUcgKHRlc3RudW0sIFRFU1ROVU0pO1wKKyAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0bnVtICMjIF9kYXRhIDtcCisgIGx3ICBhMywgMChhMCk7IFwKKyAgbHcgIGE0LCA0KGEwKTsgXAorICBsaSAgYTEsIHZhbDE7IFwKKyAgaW5zdCBmMCwgYTE7IFwKKyAgXAorICBmc2QgZjAsIDAoYTApOyBcCisgIGx3IGExLCA0KGEwKTsgXAorICBsdyBhMCwgMChhMCk7IFwKKyAgXAorICBmc2ZsYWdzIHgwOyBcCisgIGJuZSBhMCwgYTMsIGZhaWw7IFwKKyAgYm5lIGExLCBhNCwgZmFpbDsgXAorICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKKyAgLmFsaWduIDM7IFwKKyAgdGVzdF8gIyMgdGVzdG51bSAjIyBfZGF0YTogXAorICAuZG91YmxlIHJlc3VsdDsgXAorICAucG9wc2VjdGlvbgorCisjZGVmaW5lIFRFU1RfSU5UX0ZQX09QX0QoIHRlc3RudW0sIGluc3QsIHJlc3VsdCwgdmFsMSApIFwKK3Rlc3RfICMjIHRlc3RudW06IFwKKyAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKKyAgU1dTSUcgKHRlc3RudW0sIFRFU1ROVU0pO1wKKyAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0bnVtICMjIF9kYXRhIDtcCisgIGxkICBhMywgMChhMCk7IFwKKyAgbGkgIGEwLCB2YWwxOyBcCisgIGluc3QgZjAsIGEwOyBcCisgIGZzZmxhZ3MgeDA7IFwKKyAgZm12LnguZCBhMCwgZjA7IFwKKyAgYm5lIGEwLCBhMywgZmFpbDsgXAorICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKKyAgLmFsaWduIDM7IFwKKyAgdGVzdF8gIyMgdGVzdG51bSAjIyBfZGF0YTogXAorICAuZG91YmxlIHJlc3VsdDsgXAorICAucG9wc2VjdGlvbgorCisvLyBXZSBuZWVkIHNvbWUgc3BlY2lhbCBoYW5kbGluZyBoZXJlIHRvIGFsbG93IDY0LWJpdCBjb21wYXJpc29uIGluIDMyLWJpdCBhcmNoCisvLyBUT0RPOiBmaW5kIGEgYmV0dGVyIG5hbWUgYW5kIGNsZWFuIHVwIHdoZW4gaW50ZW5kZWQgZm9yIGdlbmVyYWwgdXNhZ2U/CisjZGVmaW5lIFRFU1RfQ0FTRV9EMzIoIHRlc3RudW0sIHRlc3RyZWcxLCB0ZXN0cmVnMiwgY29ycmVjdHZhbCwgY29kZS4uLiApIFwKK3Rlc3RfICMjIHRlc3RudW06IFwKKyAgICBjb2RlOyBcCisgICAgbGEgIHgzMSwgdGVzdF8gIyMgdGVzdG51bSAjIyBfZGF0YSA7IFwKKyAgICBsdyAgeDI5LCAwKHgzMSk7IFwKKyAgICBsdyAgeDMxLCA0KHgzMSk7IFwKKyAgICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAorICAgIFNXU0lHICh0ZXN0bnVtLCBURVNUTlVNKTtcCisgICAgYm5lIHRlc3RyZWcxLCB4MjksIGZhaWw7XAorICAgIGJuZSB0ZXN0cmVnMiwgeDMxLCBmYWlsO1wKKyAgICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKKyAgICAuYWxpZ24gMzsgXAorICAgIHRlc3RfICMjIHRlc3RudW0gIyMgX2RhdGE6IFwKKyAgICAuZHdvcmQgY29ycmVjdHZhbDsgXAorICAgIC5wb3BzZWN0aW9uCisKKy8vIF4geDMwIGlzIHVzZWQgaW4gc29tZSBvdGhlciBtYWNyb3MsIHRvIGF2b2lkIGlzc3VlcyB3ZSB1c2UgeDMxIGZvciB1cHBlciB3b3JkCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQYXNzIGFuZCBmYWlsIGNvZGUgKGFzc3VtZXMgdGVzdCBudW0gaXMgaW4gVEVTVE5VTSkKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjZGVmaW5lIFRFU1RfUEFTU0ZBSUwgXAorICAgICAgICBibmUgeDAsIFRFU1ROVU0sIHBhc3M7IFwKK2ZhaWw6IFwKKyAgICAgICAgUlZURVNUX0ZBSUw7IFwKK3Bhc3M6IFwKKyAgICAgICAgUlZURVNUX1BBU1MgXAorCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUZXN0IGRhdGEgc2VjdGlvbgorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyNkZWZpbmUgVEVTVF9EQVRBCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL3Jpc2N2X2NvbXBsaWFuY2UvY29tcGxpYW5jZV9pby5oIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL3Jpc2N2X2NvbXBsaWFuY2UvY29tcGxpYW5jZV9pby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViN2NhNTQKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvcmlzY3ZfY29tcGxpYW5jZS9jb21wbGlhbmNlX2lvLmgKQEAgLTAsMCArMSw3MCBAQAorLy8gUklTQy1WIENvbXBsaWFuY2UgSU8gVGVzdCBIZWFkZXIgRmlsZQorCisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMTggSW1wZXJhcyBTb2Z0d2FyZSBMdGQuLCB3d3cuaW1wZXJhcy5jb20KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELAorICogZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKi8KKworI2lmbmRlZiBfQ09NUExJQU5DRV9JT19ICisjZGVmaW5lIF9DT01QTElBTkNFX0lPX0gKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUlYgSU8gTWFjcm9zIChOb24gZnVuY3Rpb25hbCkKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyNpZmRlZiBfQ09NUExJQU5DRV9PVVRQVVQKKworI2RlZmluZSBSVlRFU1RfSU9fUFVTSChfU1ApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorbGEgX1NQLCBiZWdpbl9yZWdzdGF0ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorc3cgeDMsIDAoX1NQKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorc3cgeDQsIDQoX1NQKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorc3cgeDUsIDgoX1NQKTsKKworI2RlZmluZSBSVlRFU1RfSU9fUE9QKF9TUCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorbGEgX1NQLCBiZWdpbl9yZWdzdGF0ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorbHcgeDMsIDAoX1NQKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorbHcgeDQsIDQoX1NQKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorbHcgeDUsIDgoX1NQKTsJCisKKyNkZWZpbmUgUlZURVNUX0lPX1dSSVRFX1NUUihfU1AsIF9TVFIpCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC5zZWN0aW9uIC5kYXRhLnN0cmluZzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorMjAwMDE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC5zdHJpbmcgX1NUUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC5zZWN0aW9uIC50ZXh0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFJWVEVTVF9JT19QVVNIKF9TUCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGxpIHgzLCAweEYwMDAwMDAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGxhIHg0LCAyMDAwMWI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorMjogIGxiIHg1LCAwKHg0KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHNiIHg1LCAwKHgzKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGJlcSB4NSwgemVybywgMWY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGFkZCB4NCwgeDQsIDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGogMmI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorMTogIFJWVEVTVF9JT19QT1AoX1NQKQorCisjZWxzZSAvLyAjaWZkZWYgX0NPTVBMSUFOQ0VfT1VUUFVUCisKKyNkZWZpbmUgUlZURVNUX0lPX1dSSVRFX1NUUihfU1AsIF9TVFIpCisKKyNlbmRpZiAvLyAjZW5kICNpZmRlZiBfQ09NUExJQU5DRV9PVVRQVVQKKworI2RlZmluZSBSVlRFU1RfSU9fSU5JVAorI2RlZmluZSBSVlRFU1RfSU9fQ0hFQ0soKQorI2RlZmluZSBSVlRFU1RfSU9fQVNTRVJUX0dQUl9FUShfU1AsIF9SLCBfSSkKKyNkZWZpbmUgUlZURVNUX0lPX0FTU0VSVF9TRlBSX0VRKF9GLCBfUiwgX0kpCisjZGVmaW5lIFJWVEVTVF9JT19BU1NFUlRfREZQUl9FUShfRCwgX1IsIF9JKQorI2RlZmluZSBSVlRFU1RfSU9fQVNTRVJUX0VRKF9SLCBfSSkgCisKKyNlbmRpZiAvLyBfQ09NUExJQU5DRV9JT19ICmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvcmlzY3ZfY29tcGxpYW5jZS9jb21wbGlhbmNlX3Rlc3QuaCBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9yaXNjdl9jb21wbGlhbmNlL2NvbXBsaWFuY2VfdGVzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjN2U3ZjkKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvcmlzY3ZfY29tcGxpYW5jZS9jb21wbGlhbmNlX3Rlc3QuaApAQCAtMCwwICsxLDMxIEBACisvLyBSSVNDLVYgQ29tcGxpYW5jZSBUZXN0IEhlYWRlciBGaWxlCisvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIENvZGFzaXAgTHRkLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8gU2VlIExJQ0VOU0UgZm9yIGxpY2Vuc2UgZGV0YWlscy4KKy8vCisvLyBEZXNjcmlwdGlvbjogQ29tbW9uIGhlYWRlciBmaWxlIGZvciBSVjMySSB0ZXN0cworCisjaWZuZGVmIF9DT01QTElBTkNFX1RFU1RfSAorI2RlZmluZSBfQ09NUExJQU5DRV9URVNUX0gKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUlYgQ29tcGxpYW5jZSBNYWNyb3MKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworI2RlZmluZSBSVl9DT01QTElBTkNFX0hBTFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisKKyNkZWZpbmUgUlZfQ09NUExJQU5DRV9SVjMyTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBSVlRFU1RfUlYzMk0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisKKyNkZWZpbmUgUlZfQ09NUExJQU5DRV9DT0RFX0JFR0lOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBSVlRFU1RfQ09ERV9CRUdJTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisKKyNkZWZpbmUgUlZfQ09NUExJQU5DRV9DT0RFX0VORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBSVlRFU1RfQ09ERV9FTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisKKyNkZWZpbmUgUlZfQ09NUExJQU5DRV9EQVRBX0JFR0lOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBSVlRFU1RfREFUQV9CRUdJTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisKKyNkZWZpbmUgUlZfQ09NUExJQU5DRV9EQVRBX0VORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBSVlRFU1RfREFUQV9FTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisKKyNlbmRpZgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9yaXNjdl9jb21wbGlhbmNlL3Jpc2N2X3Rlc3QuaCBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9yaXNjdl9jb21wbGlhbmNlL3Jpc2N2X3Rlc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGM2MTU2Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL3Jpc2N2X2NvbXBsaWFuY2UvcmlzY3ZfdGVzdC5oCkBAIC0wLDAgKzEsNyBAQAorCisjaWZuZGVmIF9SSVNDVl9URVNUX0gKKyNkZWZpbmUgX1JJU0NWX1RFU1RfSAorCisjaW5jbHVkZSAidGVzdF9tYWNyb3MuaCIKKworI2VuZGlmClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL3Jpc2N2X2NvbXBsaWFuY2UvcmlzY3ZfdGVzdF9tYWNyb3MuaCBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9yaXNjdl9jb21wbGlhbmNlL3Jpc2N2X3Rlc3RfbWFjcm9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjcxN2JkNAotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9yaXNjdl9jb21wbGlhbmNlL3Jpc2N2X3Rlc3RfbWFjcm9zLmgKQEAgLTAsMCArMSw0NjMgQEAKKy8vIFJJU0MtViBDb21wbGlhbmNlIElPIFRlc3QgSGVhZGVyIEZpbGUKKworLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDE4IEltcGVyYXMgU29mdHdhcmUgTHRkLiwgd3d3LmltcGVyYXMuY29tCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwKKyAqIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICovCisKKyNpbmNsdWRlICJyaXNjdl9tYWNyb3MuaCIKKworLy8KKy8vIEluIGdlbmVyYWwgdGhlIGZvbGxvd2luZyByZWdpc3RlcnMgYXJlIHJlc2VydmVkCisvLyByYSwgYTAsIHQwLCB0MQorLy8gQWRkaXRpb25hbGx5IG9uIGFuIGFzc2VydGlvbiB2aW9sYXRpb24sIHQxLCB0MiBhcmUgb3ZlcndyaXR0ZW4KKy8vIHgxLCB4MTAsIHg1LCB4NiwgeDcgcmVzcGVjdGl2ZWx5CisvLyBGbG9hdGluZyByZWdpc3RlcnMgcmVzZXJ2ZWQKKy8vIGY1CisvLworCisjZGVmaW5lIE1BU0tfWExFTih4KSAoKHgpICYgKCgxIDw8IChfX3Jpc2N2X3hsZW4gLSAxKSA8PCAxKSAtIDEpKQorCisjZGVmaW5lIFNFWFRfSU1NKHgpICgoeCkgfCAoLSgoKHgpID4+IDExKSAmIDEpIDw8IDExKSkKKworLy8gQmFzZSBmdW5jdGlvbiBmb3IgaW50ZWdlciBvcGVyYXRpb25zCisjZGVmaW5lIFRFU1RfQ0FTRSh0ZXN0cmVnLCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBjb2RlLi4uICkgXAorICAgIGNvZGU7IFwKKyAgICBzdyBkZXN0cmVnLCBvZmZzZXQoc3dyZWcpOyBcCisgICAgUlZURVNUX0lPX0FTU0VSVF9HUFJfRVEodGVzdHJlZywgZGVzdHJlZywgY29ycmVjdHZhbCkgXAorCisvLyBCYXNlIGZ1bmN0aW9ucyBmb3Igc2luZ2xlIHByZWNpc2lvbiBmbG9hdGluZyBwb2ludCBvcGVyYXRpb25zCisjZGVmaW5lIFRFU1RfQ0FTRV9GUCh0ZXN0X251bSwgZGVzdHJlZywgcmVnMSwgcmVnMiwgY29ycmVjdHZhbCwgdmFsMSwgdmFsMiwgc3dyZWcsIG9mZnNldCwgY29kZS4uLiApIFwKKyAgICBsYSAgYTAsIHRlc3RfICMjIHRlc3RfbnVtICMjIF9kYXRhOyBcCisgICAgZmx3IHJlZzEsIDAoYTApOyBcCisgICAgZmx3IHJlZzIsIDQoYTApOyBcCisgICAgbHcgdDEsIDgoYTApOyBcCisgICAgY29kZTsgXAorICAgIGZzdyBkZXN0cmVnLCBvZmZzZXQoc3dyZWcpOyBcCisgICAgUlZURVNUX0lPX0FTU0VSVF9TRlBSX0VRKGRlc3RyZWcsIHQxLCBjb3JyZWN0dmFsKSBcCisgICAgLnB1c2hzZWN0aW9uIC5kYXRhOyBcCisgICAgLmFsaWduIDM7IFwKKyAgICB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTogXAorICAgICAgLmZsb2F0IHZhbDE7IFwKKyAgICAgIC5mbG9hdCB2YWwyOyBcCisgICAgICAud29yZCBjb3JyZWN0dmFsOyBcCisgICAgLnBvcHNlY3Rpb24KKworI2RlZmluZSBURVNUX0NBU0VfRlBfSSh0ZXN0X251bSwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQsIGNvZGUuLi4gKSBcCisgICAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTsgXAorICAgIGx3IHQxLCAwKGEwKTsgXAorICAgIGNvZGU7IFwKKyAgICBmc3cgZGVzdHJlZywgb2Zmc2V0KHN3cmVnKTsgXAorICAgIFJWVEVTVF9JT19BU1NFUlRfU0ZQUl9FUShkZXN0cmVnLCB0MSwgY29ycmVjdHZhbCkgXAorICAgIC5wdXNoc2VjdGlvbiAuZGF0YTsgXAorICAgIC5hbGlnbiAxOyBcCisgICAgdGVzdF8gIyMgdGVzdF9udW0gIyMgX2RhdGE6IFwKKyAgICAgIC53b3JkIGNvcnJlY3R2YWw7IFwKKyAgICAucG9wc2VjdGlvbgorCisjZGVmaW5lIFRFU1RfQ0FTRV9GUF9JMih0ZXN0X251bSwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQsIGNvZGUuLi4gKSBcCisgICAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTsgXAorICAgIGZsdyByZWcsIDAoYTApOyBcCisgICAgbHcgdDEsIDQoYTApOyBcCisgICAgY29kZTsgXAorICAgIHN3IGRlc3RyZWcsIG9mZnNldChzd3JlZyk7IFwKKyAgICBSVlRFU1RfSU9fQVNTRVJUX0dQUl9FUSh4MzEsIGRlc3RyZWcsIGNvcnJlY3R2YWwpIFwKKyAgICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKKyAgICAuYWxpZ24gMjsgXAorICAgIHRlc3RfICMjIHRlc3RfbnVtICMjIF9kYXRhOiBcCisgICAgICAuZmxvYXQgdmFsOyBcCisgICAgICAud29yZCBjb3JyZWN0dmFsOyBcCisgICAgLnBvcHNlY3Rpb24KKworI2RlZmluZSBURVNUX0NBU0VfRlBfNFJFRyh0ZXN0X251bSwgZGVzdHJlZywgcmVnMSwgcmVnMiwgcmVnMywgY29ycmVjdHZhbCwgdmFsMSwgdmFsMiwgdmFsMywgc3dyZWcsIG9mZnNldCwgY29kZS4uLiApIFwKKyAgICBsYSAgYTAsIHRlc3RfICMjIHRlc3RfbnVtICMjIF9kYXRhOyBcCisgICAgZmx3IHJlZzEsIDAoYTApOyBcCisgICAgZmx3IHJlZzIsIDQoYTApOyBcCisgICAgZmx3IHJlZzMsIDgoYTApOyBcCisgICAgbHcgdDEsIDEyKGEwKTsgXAorICAgIGNvZGU7IFwKKyAgICBmc3cgZGVzdHJlZywgb2Zmc2V0KHN3cmVnKTsgXAorICAgIFJWVEVTVF9JT19BU1NFUlRfU0ZQUl9FUShkZXN0cmVnLCB0MSwgY29ycmVjdHZhbCkgXAorICAgIC5wdXNoc2VjdGlvbiAuZGF0YTsgXAorICAgIC5hbGlnbiA0OyBcCisgICAgdGVzdF8gIyMgdGVzdF9udW0gIyMgX2RhdGE6IFwKKyAgICAgIC5mbG9hdCB2YWwxOyBcCisgICAgICAuZmxvYXQgdmFsMjsgXAorICAgICAgLmZsb2F0IHZhbDM7IFwKKyAgICAgIC53b3JkIGNvcnJlY3R2YWw7IFwKKyAgICAucG9wc2VjdGlvbgorCisjZGVmaW5lIFRFU1RfQ0FTRV9GUF9GTVZYUyh0ZXN0X251bSwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQsIGNvZGUuLi4gKSBcCisgICAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTsgXAorICAgIGZsdyByZWcsIDAoYTApOyBcCisgICAgY29kZTsgXAorICAgIHN3IGRlc3RyZWcsIG9mZnNldChzd3JlZyk7IFwKKyAgICBSVlRFU1RfSU9fQVNTRVJUX0dQUl9FUSh4MzEsIGRlc3RyZWcsIGNvcnJlY3R2YWwpIFwKKyAgICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKKyAgICAuYWxpZ24gMTsgXAorICAgIHRlc3RfICMjIHRlc3RfbnVtICMjIF9kYXRhOiBcCisgICAgICAuZmxvYXQgdmFsOyBcCisgICAgLnBvcHNlY3Rpb24KKworI2RlZmluZSBURVNUX0NBU0VfRlBfRk1WU1godGVzdF9udW0sIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0LCBjb2RlLi4uKSBcCisgICAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTsgXAorICAgIGxpIHJlZywgdmFsOyBcCisgICAgY29kZTsgXAorICAgIGZzdyBkZXN0cmVnLCBvZmZzZXQoc3dyZWcpOyBcCisgICAgbHcgYTEsIDAoYTApOyBcCisgICAgUlZURVNUX0lPX0FTU0VSVF9TRlBSX0VRKGRlc3RyZWcsIGExLCBjb3JyZWN0dmFsKSBcCisgICAgLnB1c2hzZWN0aW9uIC5kYXRhOyBcCisgICAgLmFsaWduIDE7IFwKKyAgICB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTogXAorICAgICAgLndvcmQgY29ycmVjdHZhbDsgXAorICAgIC5wb3BzZWN0aW9uCisKKy8vIEJhc2UgZnVuY3Rpb25zIGZvciBkb3VibGUgcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IG9wZXJhdGlvbnMgLSBydjMyZAorI2RlZmluZSBURVNUX0NBU0VfRlBEKHRlc3RfbnVtLCBkZXN0cmVnLCByZWcxLCByZWcyLCBjb3JyZWN0dmFsLCB2YWwxLCB2YWwyLCBzd3JlZywgb2Zmc2V0LCBjb2RlLi4uICkgXAorICAgIGxhICBhMCwgdGVzdF8gIyMgdGVzdF9udW0gIyMgX2RhdGE7IFwKKyAgICBmbGQgcmVnMSwgMChhMCk7IFwKKyAgICBmbGQgcmVnMiwgOChhMCk7IFwKKyAgICBjb2RlOyBcCisgICAgZnNkIGRlc3RyZWcsIG9mZnNldChzd3JlZyk7IFwKKyAgICBsdyB0MSwgMTYoYTApOyBcCisgICAgbHcgdDIsIDIwKGEwKTsgXAorICAgIGxhIGEwLCBzdG9yZV8gIyMgdGVzdF9udW0gIyMgX2RhdGE7IFwKKyAgICBmc2QgZGVzdHJlZywgMChhMCk7IFwKKyAgICBsdyBhMSwgMChhMCk7IFwKKyAgICBsdyBhMiwgNChhMCk7IFwKKyAgICBSVlRFU1RfSU9fQVNTRVJUX0RGUFJfRVEoZGVzdHJlZywgdDIsIHQxLCBhMiwgYTEsIGNvcnJlY3R2YWwpIFwKKyAgICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKKyAgICAuYWxpZ24gMzsgXAorICAgIHRlc3RfICMjIHRlc3RfbnVtICMjIF9kYXRhOiBcCisgICAgICAuZG91YmxlIHZhbDE7IFwKKyAgICAgIC5kb3VibGUgdmFsMjsgXAorICAgICAgLmR3b3JkIGNvcnJlY3R2YWw7IFwKKyAgICAucG9wc2VjdGlvbjsgXAorICAgIC5wdXNoc2VjdGlvbiAuZGF0YTsgXAorICAgIHN0b3JlXyAjIyB0ZXN0X251bSAjIyBfZGF0YTogXAorICAgICAgLmZpbGwgMSwgOCwgLTE7IFwKKyAgICAucG9wc2VjdGlvbgorCisjZGVmaW5lIFRFU1RfQ0FTRV9GUERfSSh0ZXN0X251bSwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQsIGNvZGUuLi4gKSBcCisgICAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTsgXAorICAgIGNvZGU7IFwKKyAgICBmc2QgZGVzdHJlZywgb2Zmc2V0KHN3cmVnKTsgXAorICAgIGx3IHQxLCAwKGEwKTsgXAorICAgIGx3IHQyLCA0KGEwKTsgXAorICAgIGxhIGEwLCBzdG9yZV8gIyMgdGVzdF9udW0gIyMgX2RhdGE7IFwKKyAgICBmc2QgZGVzdHJlZywgMChhMCk7IFwKKyAgICBsdyBhMSwgMChhMCk7IFwKKyAgICBsdyBhMiwgNChhMCk7IFwKKyAgICBSVlRFU1RfSU9fQVNTRVJUX0RGUFJfRVEoZGVzdHJlZywgdDIsIHQxLCBhMiwgYTEsIGNvcnJlY3R2YWwpIFwKKyAgICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKKyAgICAuYWxpZ24gMTsgXAorICAgIHRlc3RfICMjIHRlc3RfbnVtICMjIF9kYXRhOiBcCisgICAgICAuZHdvcmQgY29ycmVjdHZhbDsgXAorICAgIC5wb3BzZWN0aW9uOyBcCisgICAgc3RvcmVfICMjIHRlc3RfbnVtICMjIF9kYXRhOiBcCisgICAgICAuZmlsbCAxLCA4LCAtMTsgXAorICAgIC5wb3BzZWN0aW9uCisKKyNkZWZpbmUgVEVTVF9DQVNFX0ZQRF9JMih0ZXN0X251bSwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQsIGNvZGUuLi4gKSBcCisgICAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTsgXAorICAgIGZsZCByZWcsIDAoYTApOyBcCisgICAgbHcgdDEsIDgoYTApOyBcCisgICAgY29kZTsgXAorICAgIHN3IGRlc3RyZWcsIG9mZnNldChzd3JlZyk7IFwKKyAgICBSVlRFU1RfSU9fQVNTRVJUX0dQUl9FUSh4MzEsIGRlc3RyZWcsIGNvcnJlY3R2YWwpIFwKKyAgICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKKyAgICAuYWxpZ24gMjsgXAorICAgIHRlc3RfICMjIHRlc3RfbnVtICMjIF9kYXRhOiBcCisgICAgICAuZG91YmxlIHZhbDsgXAorICAgICAgLndvcmQgY29ycmVjdHZhbDsgXAorICAgIC5wb3BzZWN0aW9uCisKKyNkZWZpbmUgVEVTVF9DQVNFX0ZQRF80UkVHKHRlc3RfbnVtLCBkZXN0cmVnLCByZWcxLCByZWcyLCByZWczLCBjb3JyZWN0dmFsLCB2YWwxLCB2YWwyLCB2YWwzLCBzd3JlZywgb2Zmc2V0LCBjb2RlLi4uICkgXAorICAgIGxhICBhMCwgdGVzdF8gIyMgdGVzdF9udW0gIyMgX2RhdGE7IFwKKyAgICBmbGQgcmVnMSwgMChhMCk7IFwKKyAgICBmbGQgcmVnMiwgOChhMCk7IFwKKyAgICBmbGQgcmVnMywgMTYoYTApOyBcCisgICAgY29kZTsgXAorICAgIGZzZCBkZXN0cmVnLCBvZmZzZXQoc3dyZWcpOyBcCisgICAgbHcgdDEsIDI0KGEwKTsgXAorICAgIGx3IHQyLCAyOChhMCk7IFwKKyAgICBsYSBhMCwgc3RvcmVfICMjIHRlc3RfbnVtICMjIF9kYXRhOyBcCisgICAgZnNkIGRlc3RyZWcsIDAoYTApOyBcCisgICAgbHcgYTEsIDAoYTApOyBcCisgICAgbHcgYTIsIDQoYTApOyBcCisgICAgUlZURVNUX0lPX0FTU0VSVF9ERlBSX0VRKGRlc3RyZWcsIHQyLCB0MSwgYTIsIGExLCBjb3JyZWN0dmFsKSBcCisgICAgLnB1c2hzZWN0aW9uIC5kYXRhOyBcCisgICAgLmFsaWduIDQ7IFwKKyAgICB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTogXAorICAgICAgLmRvdWJsZSB2YWwxOyBcCisgICAgICAuZG91YmxlIHZhbDI7IFwKKyAgICAgIC5kb3VibGUgdmFsMzsgXAorICAgICAgLmR3b3JkIGNvcnJlY3R2YWw7IFwKKyAgICAucG9wc2VjdGlvbjsgXAorICAgIC5wdXNoc2VjdGlvbiAuZGF0YTsgXAorICAgIHN0b3JlXyAjIyB0ZXN0X251bSAjIyBfZGF0YTogXAorICAgICAgLmZpbGwgMSwgOCwgLTE7IFwKKyAgICAucG9wc2VjdGlvbgorCisvL1Rlc3RzIGZvciBhIGluc3RydWN0aW9ucyB3aXRoIHJlZ2lzdGVyLXJlZ2lzdGVyIG9wZXJhbmQKKyNkZWZpbmUgVEVTVF9SUl9PUChpbnN0LCBkZXN0cmVnLCByZWcxLCByZWcyLCBjb3JyZWN0dmFsLCB2YWwxLCB2YWwyLCBzd3JlZywgb2Zmc2V0LCB0ZXN0cmVnKSBcCisgICAgVEVTVF9DQVNFKHRlc3RyZWcsIGRlc3RyZWcsIGNvcnJlY3R2YWwsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgIGxpICByZWcxLCBNQVNLX1hMRU4odmFsMSk7IFwKKyAgICAgIGxpICByZWcyLCBNQVNLX1hMRU4odmFsMik7IFwKKyAgICAgIGluc3QgZGVzdHJlZywgcmVnMSwgcmVnMjsgXAorICAgICkKKworI2RlZmluZSBURVNUX1JSX1NSQzEoIGluc3QsIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsMSwgdmFsMiwgc3dyZWcsIG9mZnNldCwgdGVzdHJlZykgXAorICAgIFRFU1RfQ0FTRSh0ZXN0cmVnLCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICBsaSBkZXN0cmVnLCBNQVNLX1hMRU4odmFsMSk7IFwKKyAgICAgIGxpIHJlZywgTUFTS19YTEVOKHZhbDIpOyBcCisgICAgICBpbnN0IGRlc3RyZWcsIGRlc3RyZWcsIHJlZzsgXAorICAgICkKKworI2RlZmluZSBURVNUX1JSX1NSQzIoIGluc3QsIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsMSwgdmFsMiwgc3dyZWcsIG9mZnNldCwgdGVzdHJlZykgXAorICAgIFRFU1RfQ0FTRSh0ZXN0cmVnLCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICBsaSByZWcsIE1BU0tfWExFTih2YWwxKTsgXAorICAgICAgbGkgZGVzdHJlZywgTUFTS19YTEVOKHZhbDIpOyBcCisgICAgICBpbnN0IGRlc3RyZWcsIHJlZywgZGVzdHJlZzsgXAorICAgICkKKworI2RlZmluZSBURVNUX1JSX1NSQzEyKCBpbnN0LCBkZXN0cmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQsIHRlc3RyZWcpIFwKKyAgICBURVNUX0NBU0UodGVzdHJlZywgZGVzdHJlZywgY29ycmVjdHZhbCwgc3dyZWcsIG9mZnNldCwgXAorICAgICAgbGkgZGVzdHJlZywgTUFTS19YTEVOKHZhbDEpOyBcCisgICAgICBpbnN0IGRlc3RyZWcsIGRlc3RyZWcsIGRlc3RyZWc7IFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9SUl9aRVJPMSggaW5zdCwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQsIHRlc3RyZWcpIFwKKyAgICBURVNUX0NBU0UodGVzdHJlZywgZGVzdHJlZywgY29ycmVjdHZhbCwgc3dyZWcsIG9mZnNldCwgXAorICAgICAgbGkgcmVnLCBNQVNLX1hMRU4odmFsKTsgXAorICAgICAgaW5zdCBkZXN0cmVnLCB4MCwgcmVnOyBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfUlJfWkVSTzIoIGluc3QsIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0LCB0ZXN0cmVnKSBcCisgICAgVEVTVF9DQVNFKHRlc3RyZWcsIGRlc3RyZWcsIGNvcnJlY3R2YWwsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgIGxpIHJlZywgTUFTS19YTEVOKHZhbCk7IFwKKyAgICAgIGluc3QgZGVzdHJlZywgcmVnLCB4MDsgXAorICAgICkKKworI2RlZmluZSBURVNUX1JSX1pFUk8xMiggaW5zdCwgZGVzdHJlZywgY29ycmVjdHZhbCwgc3dyZWcsIG9mZnNldCwgdGVzdHJlZykgXAorICAgIFRFU1RfQ0FTRSh0ZXN0cmVnLCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICBpbnN0IGRlc3RyZWcsIHgwLCB4MDsgXAorICAgICkKKworI2RlZmluZSBURVNUX1JSX1pFUk9ERVNUKCBpbnN0LCByZWcxLCByZWcyLCB2YWwxLCB2YWwyLCBzd3JlZywgb2Zmc2V0LCB0ZXN0cmVnKSBcCisgICAgVEVTVF9DQVNFKHRlc3RyZWcsIHgwLCAwLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICBsaSByZWcxLCBNQVNLX1hMRU4odmFsMSk7IFwKKyAgICAgIGxpIHJlZzIsIE1BU0tfWExFTih2YWwyKTsgXAorICAgICAgaW5zdCB4MCwgcmVnMSwgcmVnMjsgXAorICAgICkKKworLy9UZXN0cyBmb3IgYSBpbnN0cnVjdGlvbnMgd2l0aCByZWdpc3Rlci1pbW1lZGlhdGUgb3BlcmFuZAorI2RlZmluZSBURVNUX0lNTV9PUCggaW5zdCwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIGltbSwgc3dyZWcsIG9mZnNldCwgdGVzdHJlZykgXAorICAgIFRFU1RfQ0FTRSh0ZXN0cmVnLCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICBsaSByZWcsIE1BU0tfWExFTih2YWwpOyBcCisgICAgICBpbnN0IGRlc3RyZWcsIHJlZywgU0VYVF9JTU0oaW1tKTsgXAorICAgICkKKworI2RlZmluZSBURVNUX0lNTV9TUkMoIGluc3QsIGRlc3RyZWcsIGNvcnJlY3R2YWwsIHZhbCwgaW1tLCBzd3JlZywgb2Zmc2V0LCB0ZXN0cmVnKSBcCisgICAgVEVTVF9DQVNFKHRlc3RyZWcsIGRlc3RyZWcsIGNvcnJlY3R2YWwsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgIGxpIGRlc3RyZWcsIE1BU0tfWExFTih2YWwpOyBcCisgICAgICBpbnN0IGRlc3RyZWcsIGRlc3RyZWcsIFNFWFRfSU1NKGltbSk7IFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9JTU1fWkVST1NSQyggaW5zdCwgZGVzdHJlZywgY29ycmVjdHZhbCwgaW1tLCBzd3JlZywgb2Zmc2V0LCB0ZXN0cmVnKSBcCisgICAgVEVTVF9DQVNFKHRlc3RyZWcsIGRlc3RyZWcsIGNvcnJlY3R2YWwsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgIGluc3QgZGVzdHJlZywgeDAsIFNFWFRfSU1NKGltbSk7IFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9JTU1fWkVST0RFU1QoIGluc3QsIHJlZywgdmFsLCBpbW0sIHN3cmVnLCBvZmZzZXQsIHRlc3RyZWcpIFwKKyAgICBURVNUX0NBU0UodGVzdHJlZywgeDAsIDAsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgIGxpIHJlZywgTUFTS19YTEVOKHZhbCk7IFwKKyAgICAgIGluc3QgeDAsIHJlZywgU0VYVF9JTU0oaW1tKTsgXAorICAgICkKKworI2RlZmluZSBURVNUX0lNTV9PTkVSRUcoIGluc3QsIGRlc3RyZWcsIGNvcnJlY3R2YWwsIGltbSwgc3dyZWcsIG9mZnNldCwgdGVzdHJlZykgXAorICAgIFRFU1RfQ0FTRSh0ZXN0cmVnLCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICBpbnN0IGRlc3RyZWcsIFNFWFRfSU1NKGltbSk7IFwKKyAgICAgICkKKworI2RlZmluZSBURVNUX0FVSVBDKGluc3QsIGRlc3RyZWcsIGNvcnJlY3R2YWwsIGltbSwgc3dyZWcsIG9mZnNldCwgdGVzdHJlZykgXAorICAgIFRFU1RfQ0FTRSh0ZXN0cmVnLCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICAxOiBcCisgICAgICBpbnN0IGRlc3RyZWcsIGltbTsgXAorICAgICAgbGEgc3dyZWcsIDFiOyBcCisgICAgICBzdWIgZGVzdHJlZywgZGVzdHJlZywgc3dyZWc7IFwKKyAgICAgICkKKworLy9UZXN0cyBmb3IgYSBjb21wcmVzc2VkIGluc3RydWN0aW9uCisjZGVmaW5lIFRFU1RfQ1JfT1AoIGluc3QsIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsMSwgdmFsMiwgc3dyZWcsIG9mZnNldCwgdGVzdHJlZykgXAorICAgIFRFU1RfQ0FTRSh0ZXN0cmVnLCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICBsaSByZWcsIE1BU0tfWExFTih2YWwxKTsgXAorICAgICAgbGkgZGVzdHJlZywgTUFTS19YTEVOKHZhbDIpOyBcCisgICAgICBpbnN0IGRlc3RyZWcsIHJlZzsgXAorICAgICAgKQorCisjZGVmaW5lIFRFU1RfQ0lfT1AoIGluc3QsIGRlc3RyZWcsIGNvcnJlY3R2YWwsIHZhbCwgaW1tLCBzd3JlZywgb2Zmc2V0LCB0ZXN0cmVnKSBcCisgICAgVEVTVF9DQVNFKHRlc3RyZWcsIGRlc3RyZWcsIGNvcnJlY3R2YWwsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgIGxpIGRlc3RyZWcsIE1BU0tfWExFTih2YWwpOyBcCisgICAgICBpbnN0IGRlc3RyZWcsIGltbTsgXAorICAgICAgKQorCisjZGVmaW5lIFRFU1RfQ0lfT1BfTk9SRUcoaW5zdCwgY29ycmVjdHZhbCwgaW1tLCBzd3JlZywgb2Zmc2V0LCB0ZXN0cmVnKSBcCisgICAgVEVTVF9DQVNFKHRlc3RyZWcseDAsIGNvcnJlY3R2YWwsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgIGluc3QgaW1tOyBcCisgICAgICApCisKKy8vVGVzdHMgZm9yIGZsb2F0aW5nIHBvaW50IGluc3RydWN0aW9ucyAtIHNpbmdsZSBwcmVjaXNpb24KKyNkZWZpbmUgVEVTVF9GUF9PUCh0ZXN0X251bSwgaW5zdCwgZGVzdHJlZywgcmVnMSwgcmVnMiwgY29ycmVjdHZhbCwgdmFsMSwgdmFsMiwgc3dyZWcsIG9mZnNldCkgXAorICAgICAgVEVTVF9DQVNFX0ZQKHRlc3RfbnVtLCBkZXN0cmVnLCByZWcxLCByZWcyLCBjb3JyZWN0dmFsLCB2YWwxLCB2YWwyLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICAgIGluc3QgZGVzdHJlZywgcmVnMSwgcmVnMjsgXAorICAgICAgICApCisKKyNkZWZpbmUgVEVTVF9GUF9PTkVSRUcodGVzdF9udW0sIGluc3QsIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgICBURVNUX0NBU0VfRlAodGVzdF9udW0sIGRlc3RyZWcsIHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCwgXAorICAgICAgICBpbnN0IGRlc3RyZWcsIHJlZzsgXAorICAgICAgICApCisKKyNkZWZpbmUgVEVTVF9GUF80UkVHKHRlc3RfbnVtLCBpbnN0LCBkZXN0cmVnLCByZWcxLCByZWcyLCByZWczLCBjb3JyZWN0dmFsLCB2YWwxLCB2YWwyLCB2YWwzLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgICBURVNUX0NBU0VfRlBfNFJFRyh0ZXN0X251bSwgZGVzdHJlZywgcmVnMSwgcmVnMiwgcmVnMywgY29ycmVjdHZhbCwgdmFsMSwgdmFsMiwgdmFsMywgc3dyZWcsIG9mZnNldCwgXAorICAgICAgICBpbnN0IGRlc3RyZWcsIHJlZzEsIHJlZzIsIHJlZzM7IFwKKyAgICAgICAgKQorCisjZGVmaW5lIFRFU1RfRlBfSSh0ZXN0X251bSwgaW5zdCwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQpIFwKKyAgICAgIFRFU1RfQ0FTRV9GUF9JKHRlc3RfbnVtLCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCwgXAorICAgICAgICBsaSByZWcsIE1BU0tfWExFTih2YWwpOyBcCisgICAgICAgIGluc3QgZGVzdHJlZywgcmVnOyBcCisgICAgICAgICkKKworI2RlZmluZSBURVNUX0ZQX0kyKHRlc3RfbnVtLCBpbnN0LCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCkgXAorICAgICAgVEVTVF9DQVNFX0ZQX0kyKHRlc3RfbnVtLCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCwgXAorICAgICAgICBpbnN0IGRlc3RyZWcsIHJlZzsgXAorICAgICAgICApCisKKy8vVGVzdHMgZm9yIGZsb2F0aW5nIHBvaW50IGluc3RydWN0aW9ucyAtIGRvdWJsZSBwcmVjaXNpb24KKyNkZWZpbmUgVEVTVF9GUERfT1AodGVzdF9udW0sIGluc3QsIGRlc3RyZWcsIHJlZzEsIHJlZzIsIGNvcnJlY3R2YWwsIHZhbDEsIHZhbDIsIHN3cmVnLCBvZmZzZXQpIFwKKyAgICAgIFRFU1RfQ0FTRV9GUEQodGVzdF9udW0sIGRlc3RyZWcsIHJlZzEsIHJlZzIsIGNvcnJlY3R2YWwsIHZhbDEsIHZhbDIsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgICAgaW5zdCBkZXN0cmVnLCByZWcxLCByZWcyOyBcCisgICAgICAgICkKKworI2RlZmluZSBURVNUX0ZQRF9PTkVSRUcodGVzdF9udW0sIGluc3QsIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgICBURVNUX0NBU0VfRlBEKHRlc3RfbnVtLCBkZXN0cmVnLCByZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgICAgaW5zdCBkZXN0cmVnLCByZWc7IFwKKyAgICAgICAgKQorCisjZGVmaW5lIFRFU1RfRlBEXzRSRUcodGVzdF9udW0sIGluc3QsIGRlc3RyZWcsIHJlZzEsIHJlZzIsIHJlZzMsIGNvcnJlY3R2YWwsIHZhbDEsIHZhbDIsIHZhbDMsIHN3cmVnLCBvZmZzZXQpIFwKKyAgICAgIFRFU1RfQ0FTRV9GUERfNFJFRyh0ZXN0X251bSwgZGVzdHJlZywgcmVnMSwgcmVnMiwgcmVnMywgY29ycmVjdHZhbCwgdmFsMSwgdmFsMiwgdmFsMywgc3dyZWcsIG9mZnNldCwgXAorICAgICAgICBpbnN0IGRlc3RyZWcsIHJlZzEsIHJlZzIsIHJlZzM7IFwKKyAgICAgICAgKQorCisjZGVmaW5lIFRFU1RfRlBEX0kodGVzdF9udW0sIGluc3QsIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgICBURVNUX0NBU0VfRlBEX0kodGVzdF9udW0sIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICAgIGxpIHJlZywgTUFTS19YTEVOKHZhbCk7IFwKKyAgICAgICAgaW5zdCBkZXN0cmVnLCByZWc7IFwKKyAgICAgICAgKQorCisjZGVmaW5lIFRFU1RfRlBEX0kyKHRlc3RfbnVtLCBpbnN0LCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCkgXAorICAgICAgVEVTVF9DQVNFX0ZQRF9JMih0ZXN0X251bSwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgICAgaW5zdCBkZXN0cmVnLCByZWc7IFwKKyAgICAgICAgKQorCisjZGVmaW5lIFRFU1RfQ0FEREkxNlNQKGNvcnJlY3R2YWwsIGltbSwgc3dyZWcsIG9mZnNldCwgdGVzdHJlZykgXAorICAgICAgVEVTVF9DQVNFKHRlc3RyZWcseDIsIGNvcnJlY3R2YWwsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgIGMuYWRkaTE2c3AgeDIsIGltbTsgXAorICAgICAgKQorCisjZGVmaW5lIFRFU1RfQ0FEREk0U1BOKGRlc3RyZWcsIGNvcnJlY3R2YWwsIGltbSwgc3dyZWcsIG9mZnNldCwgdGVzdHJlZykgXAorICAgICAgVEVTVF9DQVNFKHRlc3RyZWcsZGVzdHJlZywgY29ycmVjdHZhbCwgc3dyZWcsIG9mZnNldCwgXAorICAgICAgICBjLmFkZGk0c3BuIGRlc3RyZWcsIHgyLCBTRVhUX0lNTShpbW0pOyBcCisgICAgICAgICkKKworI2RlZmluZSBURVNUX0NKTChpbnN0LCByZWcsIHZhbCwgc3dyZWcsIG9mZnNldCkgXAorICAgICAgbGkgeDEwLCB2YWw7IFwKKyAgICAgIGxhIHJlZywgMWY7IFwKKyAgICAgIGluc3QgcmVnOyBcCisgICAgICBsaSB4MTAsIDB4MTIzYWI7IFwKKzE6IFwKKyAgICAgIHN3IHgxMCwgb2Zmc2V0KHN3cmVnKTsgXAorICAgICAgUlZURVNUX0lPX0FTU0VSVF9HUFJfRVEoeDMxLCB4MTAsIHZhbCk7IFwKKworI2RlZmluZSBBQlMoeCkgKCh4ID4+IDExKSBeIHgpIC0gKHggPj4gMTEpCisKKyNkZWZpbmUgVEVTVF9DSihpbnN0LCByZWcsIHZhbCwgc3dyZWcsIG9mZnNldCkgXAorICAgICAgbGkgcmVnLCB2YWw7IFwKKyAgICAgIGluc3QgMWY7IFwKKyAgICAgIGxpIHJlZywgMHgxMjNhYjsgXAorMTogXAorICAgICAgc3cgcmVnLCBvZmZzZXQoc3dyZWcpOyBcCisgICAgICBSVlRFU1RfSU9fQVNTRVJUX0dQUl9FUSh4MzEsIHJlZywgdmFsKTsgXAorCisjZGVmaW5lIFRFU1RfQ0woaW5zdCwgcmVnLCBpbW0sIHN3cmVnLCBvZmZzZXQpIFwKKyAgICAgIGxhIHJlZywgdGVzdF9kYXRhOyBcCisgICAgICBpbnN0IHJlZywgaW1tKHJlZyk7IFwKKyAgICAgIHN3IHJlZywgb2Zmc2V0KHN3cmVnKTsgXAorCisvLyBsdyByZWcsIGltbSh4MikKKy8vIGMubHdzcCByZWcsIGltbSh4MikKKyNkZWZpbmUgVEVTVF9DTFdTUChyZWcsIGltbSwgc3dyZWcsIG9mZnNldCkgXAorICAgICAgbGEgeDIsIHRlc3RfZGF0YTsgXAorICAgICAgYy5sd3NwIHJlZywgaW1tKHgyKTsgXAorICAgICAgc3cgcmVnLCBvZmZzZXQoc3dyZWcpOyBcCisKKyNkZWZpbmUgVEVTVF9DU1codGVzdF9kYXRhLCBpbnN0LCByZWcxLCByZWcyLCB2YWwsIGltbSwgc3dyZWcsIG9mZnNldCkgXAorICAgICAgbGkgcmVnMSwgdmFsOyBcCisgICAgICBsYSByZWcyLCB0ZXN0X2RhdGE7IFwKKyAgICAgIGluc3QgcmVnMSwgaW1tKHJlZzIpOyBcCisgICAgICBsdyByZWcxLCBpbW0ocmVnMik7IFwKKyAgICAgIHN3IHJlZzEsIG9mZnNldChzd3JlZyk7IFwKKyAgICAgIFJWVEVTVF9JT19BU1NFUlRfR1BSX0VRKHgzMSwgcmVnMSwgdmFsKTsgXAorCisjZGVmaW5lIFRFU1RfQ1NXU1AodGVzdF9kYXRhLCByZWcsIHZhbCwgaW1tLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgICBsYSB4MiwgdGVzdF9kYXRhOyBcCisgICAgICBsaSByZWcsIHZhbDsgXAorICAgICAgYy5zd3NwIHJlZywgaW1tKHgyKTsgXAorICAgICAgbHcgcmVnLCBpbW0oeDIpOyBcCisgICAgICBzdyByZWcsIG9mZnNldChzd3JlZyk7IFwKKyAgICAgIFJWVEVTVF9JT19BU1NFUlRfR1BSX0VRKHgzMSwgcmVnLCB2YWwpOyBcCisKKyNkZWZpbmUgVEVTVF9DQkVRWihyZWcsIHZhbCwgc3dyZWcsIG9mZnNldCkgXAorICAgICAgbGkgcmVnLCB2YWw7IFwKKyAgICAgIGMuc3ViIHJlZywgcmVnOyBcCisgICAgICBjLmJlcXogcmVnLCAzZjsgXAorICAgICAgbGkgcmVnLCAweDEyM2FiOyBcCiszOiBcCisgICAgICBzdyByZWcsIG9mZnNldChzd3JlZyk7IFwKKyAgICAgIFJWVEVTVF9JT19BU1NFUlRfR1BSX0VRKHgzMSwgcmVnLCAweDApOyBcCisKKyNkZWZpbmUgVEVTVF9DQk5FWihyZWcsIHZhbCwgc3dyZWcsIG9mZnNldCkgXAorICAgICAgbGkgcmVnLCB2YWw7IFwKKyAgICAgIGMuYm5leiByZWcsIDRmOyBcCisgICAgICBsaSByZWcsIDB4MDsgXAorNDogXAorICAgICAgc3cgcmVnLCBvZmZzZXQoc3dyZWcpOyBcCisgICAgICBSVlRFU1RfSU9fQVNTRVJUX0dQUl9FUSh4MzEsIHJlZywgdmFsKTsgXAorCisjZGVmaW5lIFRFU1RfRk1WWFModGVzdF9udW0sIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgICBURVNUX0NBU0VfRlBfRk1WWFModGVzdF9udW0sIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICAgIGZtdi54LnMgZGVzdHJlZywgcmVnOyBcCisgICAgICAgICkKKworI2RlZmluZSBURVNUX0ZNVlNYKHRlc3RfbnVtLCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCkgXAorICAgICAgVEVTVF9DQVNFX0ZQX0ZNVlNYKHRlc3RfbnVtLCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCwgXAorICAgICAgICBmbXYucy54IGRlc3RyZWcsIHJlZzsgXAorICAgICAgICApCisKKyNkZWZpbmUgU1dTSUcoYSxiKQorCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvcmlzY3ZfY29tcGxpYW5jZS90ZXN0X21hY3Jvcy5oIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL3Jpc2N2X2NvbXBsaWFuY2UvdGVzdF9tYWNyb3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmM2MTBlCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL3Jpc2N2X2NvbXBsaWFuY2UvdGVzdF9tYWNyb3MuaApAQCAtMCwwICsxLDU5MyBAQAorCisvLyBSSVNDLVYgQ29tcGxpYW5jZSBUZXN0IEhlYWRlciBGaWxlCisvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIENvZGFzaXAgTHRkLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorLy8gU2VlIExJQ0VOU0UgZm9yIGxpY2Vuc2UgZGV0YWlscy4KKy8vCisvLyBEZXNjcmlwdGlvbjogQ29tbW9uIGhlYWRlciBmaWxlIGZvciBSVjMySSB0ZXN0cworCisjaWZuZGVmIF9URVNUX01BQ1JPU19ICisjZGVmaW5lIF9URVNUX01BQ1JPU19ICisKKyNpbmNsdWRlICJyaXNjdl9tYWNyb3MuaCIKKworLy8gUklTQy1WIENvbXBsaWFuY2UgSU8gVGVzdCBIZWFkZXIgRmlsZQorCisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMTggSW1wZXJhcyBTb2Z0d2FyZSBMdGQuLCB3d3cuaW1wZXJhcy5jb20KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELAorICogZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKi8KKworCisvLworLy8gSW4gZ2VuZXJhbCB0aGUgZm9sbG93aW5nIHJlZ2lzdGVycyBhcmUgcmVzZXJ2ZWQKKy8vIHJhLCBhMCwgdDAsIHQxCisvLyBBZGRpdGlvbmFsbHkgb24gYW4gYXNzZXJ0aW9uIHZpb2xhdGlvbiwgdDEsIHQyIGFyZSBvdmVyd3JpdHRlbgorLy8geDEsIHgxMCwgeDUsIHg2LCB4NyByZXNwZWN0aXZlbHkKKy8vIEZsb2F0aW5nIHJlZ2lzdGVycyByZXNlcnZlZAorLy8gZjUKKy8vCisKKyNkZWZpbmUgTUFTS19YTEVOKHgpICgoeCkgJiAoKDEgPDwgKF9fcmlzY3ZfeGxlbiAtIDEpIDw8IDEpIC0gMSkpCisKKyNkZWZpbmUgU0VYVF9JTU0oeCkgKCh4KSB8ICgtKCgoeCkgPj4gMTEpICYgMSkgPDwgMTEpKQorCisvLyBCYXNlIGZ1bmN0aW9uIGZvciBpbnRlZ2VyIG9wZXJhdGlvbnMKKyNkZWZpbmUgVEVTVF9DQVNFKGRlc3RyZWcsIGNvcnJlY3R2YWwsIHN3cmVnLCBvZmZzZXQsIGNvZGUuLi4gKSBcCisgICAgY29kZTsgXAorICAgIHN3IGRlc3RyZWcsIG9mZnNldChzd3JlZyk7IFwKKyAgICBSVlRFU1RfSU9fQVNTRVJUX0dQUl9FUSh4MzEsIGRlc3RyZWcsIGNvcnJlY3R2YWwpIFwKKworLy8gQmFzZSBmdW5jdGlvbnMgZm9yIHNpbmdsZSBwcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgb3BlcmF0aW9ucworI2RlZmluZSBURVNUX0NBU0VfRlAodGVzdF9udW0sIGRlc3RyZWcsIHJlZzEsIHJlZzIsIGNvcnJlY3R2YWwsIHZhbDEsIHZhbDIsIHN3cmVnLCBvZmZzZXQsIGNvZGUuLi4gKSBcCisgICAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTsgXAorICAgIGZsdyByZWcxLCAwKGEwKTsgXAorICAgIGZsdyByZWcyLCA0KGEwKTsgXAorICAgIGx3IHQxLCA4KGEwKTsgXAorICAgIGNvZGU7IFwKKyAgICBmc3cgZGVzdHJlZywgb2Zmc2V0KHN3cmVnKTsgXAorICAgIFJWVEVTVF9JT19BU1NFUlRfU0ZQUl9FUShkZXN0cmVnLCB0MSwgY29ycmVjdHZhbCkgXAorICAgIC5wdXNoc2VjdGlvbiAuZGF0YTsgXAorICAgIC5iYWxpZ24gODsgXAorICAgIHRlc3RfICMjIHRlc3RfbnVtICMjIF9kYXRhOiBcCisgICAgICAuZmxvYXQgdmFsMTsgXAorICAgICAgLmZsb2F0IHZhbDI7IFwKKyAgICAgIC53b3JkIGNvcnJlY3R2YWw7IFwKKyAgICAucG9wc2VjdGlvbgorCisjZGVmaW5lIFRFU1RfQ0FTRV9GUF9JKHRlc3RfbnVtLCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCwgY29kZS4uLiApIFwKKyAgICBsYSAgYTAsIHRlc3RfICMjIHRlc3RfbnVtICMjIF9kYXRhOyBcCisgICAgbHcgdDEsIDAoYTApOyBcCisgICAgY29kZTsgXAorICAgIGZzdyBkZXN0cmVnLCBvZmZzZXQoc3dyZWcpOyBcCisgICAgUlZURVNUX0lPX0FTU0VSVF9TRlBSX0VRKGRlc3RyZWcsIHQxLCBjb3JyZWN0dmFsKSBcCisgICAgLnB1c2hzZWN0aW9uIC5kYXRhOyBcCisgICAgLmJhbGlnbiAyOyBcCisgICAgdGVzdF8gIyMgdGVzdF9udW0gIyMgX2RhdGE6IFwKKyAgICAgIC53b3JkIGNvcnJlY3R2YWw7IFwKKyAgICAucG9wc2VjdGlvbgorCisjZGVmaW5lIFRFU1RfQ0FTRV9GUF9JMih0ZXN0X251bSwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQsIGNvZGUuLi4gKSBcCisgICAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTsgXAorICAgIGZsdyByZWcsIDAoYTApOyBcCisgICAgbHcgdDEsIDQoYTApOyBcCisgICAgY29kZTsgXAorICAgIHN3IGRlc3RyZWcsIG9mZnNldChzd3JlZyk7IFwKKyAgICBSVlRFU1RfSU9fQVNTRVJUX0dQUl9FUSh4MzEsIGRlc3RyZWcsIGNvcnJlY3R2YWwpIFwKKyAgICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKKyAgICAuYmFsaWduIDQ7IFwKKyAgICB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTogXAorICAgICAgLmZsb2F0IHZhbDsgXAorICAgICAgLndvcmQgY29ycmVjdHZhbDsgXAorICAgIC5wb3BzZWN0aW9uCisKKyNkZWZpbmUgVEVTVF9DQVNFX0ZQXzRSRUcodGVzdF9udW0sIGRlc3RyZWcsIHJlZzEsIHJlZzIsIHJlZzMsIGNvcnJlY3R2YWwsIHZhbDEsIHZhbDIsIHZhbDMsIHN3cmVnLCBvZmZzZXQsIGNvZGUuLi4gKSBcCisgICAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTsgXAorICAgIGZsdyByZWcxLCAwKGEwKTsgXAorICAgIGZsdyByZWcyLCA0KGEwKTsgXAorICAgIGZsdyByZWczLCA4KGEwKTsgXAorICAgIGx3IHQxLCAxMihhMCk7IFwKKyAgICBjb2RlOyBcCisgICAgZnN3IGRlc3RyZWcsIG9mZnNldChzd3JlZyk7IFwKKyAgICBSVlRFU1RfSU9fQVNTRVJUX1NGUFJfRVEoZGVzdHJlZywgdDEsIGNvcnJlY3R2YWwpIFwKKyAgICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKKyAgICAuYmFsaWduIDE2OyBcCisgICAgdGVzdF8gIyMgdGVzdF9udW0gIyMgX2RhdGE6IFwKKyAgICAgIC5mbG9hdCB2YWwxOyBcCisgICAgICAuZmxvYXQgdmFsMjsgXAorICAgICAgLmZsb2F0IHZhbDM7IFwKKyAgICAgIC53b3JkIGNvcnJlY3R2YWw7IFwKKyAgICAucG9wc2VjdGlvbgorCisjZGVmaW5lIFRFU1RfQ0FTRV9GUF9GTVZYUyh0ZXN0X251bSwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQsIGNvZGUuLi4gKSBcCisgICAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTsgXAorICAgIGZsdyByZWcsIDAoYTApOyBcCisgICAgY29kZTsgXAorICAgIHN3IGRlc3RyZWcsIG9mZnNldChzd3JlZyk7IFwKKyAgICBSVlRFU1RfSU9fQVNTRVJUX0dQUl9FUSh4MzEsIGRlc3RyZWcsIGNvcnJlY3R2YWwpIFwKKyAgICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKKyAgICAuYmFsaWduIDI7IFwKKyAgICB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTogXAorICAgICAgLmZsb2F0IHZhbDsgXAorICAgIC5wb3BzZWN0aW9uCisKKyNkZWZpbmUgVEVTVF9DQVNFX0ZQX0ZNVlNYKHRlc3RfbnVtLCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCwgY29kZS4uLikgXAorICAgIGxhICBhMCwgdGVzdF8gIyMgdGVzdF9udW0gIyMgX2RhdGE7IFwKKyAgICBsaSByZWcsIHZhbDsgXAorICAgIGNvZGU7IFwKKyAgICBmc3cgZGVzdHJlZywgb2Zmc2V0KHN3cmVnKTsgXAorICAgIGx3IGExLCAwKGEwKTsgXAorICAgIFJWVEVTVF9JT19BU1NFUlRfU0ZQUl9FUShkZXN0cmVnLCBhMSwgY29ycmVjdHZhbCkgXAorICAgIC5wdXNoc2VjdGlvbiAuZGF0YTsgXAorICAgIC5iYWxpZ24gMjsgXAorICAgIHRlc3RfICMjIHRlc3RfbnVtICMjIF9kYXRhOiBcCisgICAgICAud29yZCBjb3JyZWN0dmFsOyBcCisgICAgLnBvcHNlY3Rpb24KKworLy8gQmFzZSBmdW5jdGlvbnMgZm9yIGRvdWJsZSBwcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgb3BlcmF0aW9ucyAtIHJ2MzJkCisjZGVmaW5lIFRFU1RfQ0FTRV9GUEQodGVzdF9udW0sIGRlc3RyZWcsIHJlZzEsIHJlZzIsIGNvcnJlY3R2YWwsIHZhbDEsIHZhbDIsIHN3cmVnLCBvZmZzZXQsIGNvZGUuLi4gKSBcCisgICAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTsgXAorICAgIGZsZCByZWcxLCAwKGEwKTsgXAorICAgIGZsZCByZWcyLCA4KGEwKTsgXAorICAgIGNvZGU7IFwKKyAgICBmc2QgZGVzdHJlZywgb2Zmc2V0KHN3cmVnKTsgXAorICAgIGx3IHQxLCAxNihhMCk7IFwKKyAgICBsdyB0MiwgMjAoYTApOyBcCisgICAgbGEgYTAsIHN0b3JlXyAjIyB0ZXN0X251bSAjIyBfZGF0YTsgXAorICAgIGZzZCBkZXN0cmVnLCAwKGEwKTsgXAorICAgIGx3IGExLCAwKGEwKTsgXAorICAgIGx3IGEyLCA0KGEwKTsgXAorICAgIFJWVEVTVF9JT19BU1NFUlRfREZQUl9FUShkZXN0cmVnLCB0MiwgdDEsIGEyLCBhMSwgY29ycmVjdHZhbCkgXAorICAgIC5wdXNoc2VjdGlvbiAuZGF0YTsgXAorICAgIC5iYWxpZ24gODsgXAorICAgIHRlc3RfICMjIHRlc3RfbnVtICMjIF9kYXRhOiBcCisgICAgICAuZG91YmxlIHZhbDE7IFwKKyAgICAgIC5kb3VibGUgdmFsMjsgXAorICAgICAgLmR3b3JkIGNvcnJlY3R2YWw7IFwKKyAgICAucG9wc2VjdGlvbjsgXAorICAgIC5wdXNoc2VjdGlvbiAuZGF0YTsgXAorICAgIHN0b3JlXyAjIyB0ZXN0X251bSAjIyBfZGF0YTogXAorICAgICAgLmZpbGwgMSwgOCwgLTE7IFwKKyAgICAucG9wc2VjdGlvbgorCisjZGVmaW5lIFRFU1RfQ0FTRV9GUERfSSh0ZXN0X251bSwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQsIGNvZGUuLi4gKSBcCisgICAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTsgXAorICAgIGNvZGU7IFwKKyAgICBmc2QgZGVzdHJlZywgb2Zmc2V0KHN3cmVnKTsgXAorICAgIGx3IHQxLCAwKGEwKTsgXAorICAgIGx3IHQyLCA0KGEwKTsgXAorICAgIGxhIGEwLCBzdG9yZV8gIyMgdGVzdF9udW0gIyMgX2RhdGE7IFwKKyAgICBmc2QgZGVzdHJlZywgMChhMCk7IFwKKyAgICBsdyBhMSwgMChhMCk7IFwKKyAgICBsdyBhMiwgNChhMCk7IFwKKyAgICBSVlRFU1RfSU9fQVNTRVJUX0RGUFJfRVEoZGVzdHJlZywgdDIsIHQxLCBhMiwgYTEsIGNvcnJlY3R2YWwpIFwKKyAgICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKKyAgICAuYmFsaWduIDI7IFwKKyAgICB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTogXAorICAgICAgLmR3b3JkIGNvcnJlY3R2YWw7IFwKKyAgICAucG9wc2VjdGlvbjsgXAorICAgIHN0b3JlXyAjIyB0ZXN0X251bSAjIyBfZGF0YTogXAorICAgICAgLmZpbGwgMSwgOCwgLTE7IFwKKyAgICAucG9wc2VjdGlvbgorCisjZGVmaW5lIFRFU1RfQ0FTRV9GUERfSTIodGVzdF9udW0sIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0LCBjb2RlLi4uICkgXAorICAgIGxhICBhMCwgdGVzdF8gIyMgdGVzdF9udW0gIyMgX2RhdGE7IFwKKyAgICBmbGQgcmVnLCAwKGEwKTsgXAorICAgIGx3IHQxLCA4KGEwKTsgXAorICAgIGNvZGU7IFwKKyAgICBzdyBkZXN0cmVnLCBvZmZzZXQoc3dyZWcpOyBcCisgICAgUlZURVNUX0lPX0FTU0VSVF9HUFJfRVEoeDMxLCBkZXN0cmVnLCBjb3JyZWN0dmFsKSBcCisgICAgLnB1c2hzZWN0aW9uIC5kYXRhOyBcCisgICAgLmJhbGlnbiA0OyBcCisgICAgdGVzdF8gIyMgdGVzdF9udW0gIyMgX2RhdGE6IFwKKyAgICAgIC5kb3VibGUgdmFsOyBcCisgICAgICAud29yZCBjb3JyZWN0dmFsOyBcCisgICAgLnBvcHNlY3Rpb24KKworI2RlZmluZSBURVNUX0NBU0VfRlBEXzRSRUcodGVzdF9udW0sIGRlc3RyZWcsIHJlZzEsIHJlZzIsIHJlZzMsIGNvcnJlY3R2YWwsIHZhbDEsIHZhbDIsIHZhbDMsIHN3cmVnLCBvZmZzZXQsIGNvZGUuLi4gKSBcCisgICAgbGEgIGEwLCB0ZXN0XyAjIyB0ZXN0X251bSAjIyBfZGF0YTsgXAorICAgIGZsZCByZWcxLCAwKGEwKTsgXAorICAgIGZsZCByZWcyLCA4KGEwKTsgXAorICAgIGZsZCByZWczLCAxNihhMCk7IFwKKyAgICBjb2RlOyBcCisgICAgZnNkIGRlc3RyZWcsIG9mZnNldChzd3JlZyk7IFwKKyAgICBsdyB0MSwgMjQoYTApOyBcCisgICAgbHcgdDIsIDI4KGEwKTsgXAorICAgIGxhIGEwLCBzdG9yZV8gIyMgdGVzdF9udW0gIyMgX2RhdGE7IFwKKyAgICBmc2QgZGVzdHJlZywgMChhMCk7IFwKKyAgICBsdyBhMSwgMChhMCk7IFwKKyAgICBsdyBhMiwgNChhMCk7IFwKKyAgICBSVlRFU1RfSU9fQVNTRVJUX0RGUFJfRVEoZGVzdHJlZywgdDIsIHQxLCBhMiwgYTEsIGNvcnJlY3R2YWwpIFwKKyAgICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKKyAgICAuYmFsaWduIDE2OyBcCisgICAgdGVzdF8gIyMgdGVzdF9udW0gIyMgX2RhdGE6IFwKKyAgICAgIC5kb3VibGUgdmFsMTsgXAorICAgICAgLmRvdWJsZSB2YWwyOyBcCisgICAgICAuZG91YmxlIHZhbDM7IFwKKyAgICAgIC5kd29yZCBjb3JyZWN0dmFsOyBcCisgICAgLnBvcHNlY3Rpb247IFwKKyAgICAucHVzaHNlY3Rpb24gLmRhdGE7IFwKKyAgICBzdG9yZV8gIyMgdGVzdF9udW0gIyMgX2RhdGE6IFwKKyAgICAgIC5maWxsIDEsIDgsIC0xOyBcCisgICAgLnBvcHNlY3Rpb24KKworLy9UZXN0cyBmb3IgYSBpbnN0cnVjdGlvbnMgd2l0aCByZWdpc3Rlci1yZWdpc3RlciBvcGVyYW5kCisjZGVmaW5lIFRFU1RfUlJfT1AoaW5zdCwgZGVzdHJlZywgcmVnMSwgcmVnMiwgY29ycmVjdHZhbCwgdmFsMSwgdmFsMiwgc3dyZWcsIG9mZnNldCkgXAorICAgIFRFU1RfQ0FTRSggZGVzdHJlZywgY29ycmVjdHZhbCwgc3dyZWcsIG9mZnNldCwgXAorICAgICAgbGkgIHJlZzEsIE1BU0tfWExFTih2YWwxKTsgXAorICAgICAgbGkgIHJlZzIsIE1BU0tfWExFTih2YWwyKTsgXAorICAgICAgaW5zdCBkZXN0cmVnLCByZWcxLCByZWcyOyBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfUlJfU1JDMSggaW5zdCwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwxLCB2YWwyLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgVEVTVF9DQVNFKCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICBsaSBkZXN0cmVnLCBNQVNLX1hMRU4odmFsMSk7IFwKKyAgICAgIGxpIHJlZywgTUFTS19YTEVOKHZhbDIpOyBcCisgICAgICBpbnN0IGRlc3RyZWcsIGRlc3RyZWcsIHJlZzsgXAorICAgICkKKworI2RlZmluZSBURVNUX1JSX1NSQzIoIGluc3QsIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsMSwgdmFsMiwgc3dyZWcsIG9mZnNldCkgXAorICAgIFRFU1RfQ0FTRSggZGVzdHJlZywgY29ycmVjdHZhbCwgc3dyZWcsIG9mZnNldCwgXAorICAgICAgbGkgcmVnLCBNQVNLX1hMRU4odmFsMSk7IFwKKyAgICAgIGxpIGRlc3RyZWcsIE1BU0tfWExFTih2YWwyKTsgXAorICAgICAgaW5zdCBkZXN0cmVnLCByZWcsIGRlc3RyZWc7IFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9SUl9TUkMxMiggaW5zdCwgZGVzdHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgVEVTVF9DQVNFKCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICBsaSBkZXN0cmVnLCBNQVNLX1hMRU4odmFsMSk7IFwKKyAgICAgIGluc3QgZGVzdHJlZywgZGVzdHJlZywgZGVzdHJlZzsgXAorICAgICkKKworI2RlZmluZSBURVNUX1JSX1pFUk8xKCBpbnN0LCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCkgXAorICAgIFRFU1RfQ0FTRSggZGVzdHJlZywgY29ycmVjdHZhbCwgc3dyZWcsIG9mZnNldCwgXAorICAgICAgbGkgcmVnLCBNQVNLX1hMRU4odmFsKTsgXAorICAgICAgaW5zdCBkZXN0cmVnLCB4MCwgcmVnOyBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfUlJfWkVSTzIoIGluc3QsIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgVEVTVF9DQVNFKCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICBsaSByZWcsIE1BU0tfWExFTih2YWwpOyBcCisgICAgICBpbnN0IGRlc3RyZWcsIHJlZywgeDA7IFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9SUl9aRVJPMTIoIGluc3QsIGRlc3RyZWcsIGNvcnJlY3R2YWwsIHN3cmVnLCBvZmZzZXQpIFwKKyAgICBURVNUX0NBU0UoIGRlc3RyZWcsIGNvcnJlY3R2YWwsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgIGluc3QgZGVzdHJlZywgeDAsIHgwOyBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfUlJfWkVST0RFU1QoIGluc3QsIHJlZzEsIHJlZzIsIHZhbDEsIHZhbDIsIHN3cmVnLCBvZmZzZXQpIFwKKyAgICBURVNUX0NBU0UoIHgwLCAwLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICBsaSByZWcxLCBNQVNLX1hMRU4odmFsMSk7IFwKKyAgICAgIGxpIHJlZzIsIE1BU0tfWExFTih2YWwyKTsgXAorICAgICAgaW5zdCB4MCwgcmVnMSwgcmVnMjsgXAorICAgICkKKworLy9UZXN0cyBmb3IgYSBpbnN0cnVjdGlvbnMgd2l0aCByZWdpc3Rlci1pbW1lZGlhdGUgb3BlcmFuZAorI2RlZmluZSBURVNUX0lNTV9PUCggaW5zdCwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIGltbSwgc3dyZWcsIG9mZnNldCkgXAorICAgIFRFU1RfQ0FTRSAoIGRlc3RyZWcsIGNvcnJlY3R2YWwsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgIGxpIHJlZywgTUFTS19YTEVOKHZhbCk7IFwKKyAgICAgIGluc3QgZGVzdHJlZywgcmVnLCBTRVhUX0lNTShpbW0pOyBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfSU1NX1NSQyggaW5zdCwgZGVzdHJlZywgY29ycmVjdHZhbCwgdmFsLCBpbW0sIHN3cmVnLCBvZmZzZXQpIFwKKyAgICBURVNUX0NBU0UgKCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICBsaSBkZXN0cmVnLCBNQVNLX1hMRU4odmFsKTsgXAorICAgICAgaW5zdCBkZXN0cmVnLCBkZXN0cmVnLCBTRVhUX0lNTShpbW0pOyBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfSU1NX1pFUk9TUkMoIGluc3QsIGRlc3RyZWcsIGNvcnJlY3R2YWwsIGltbSwgc3dyZWcsIG9mZnNldCkgXAorICAgIFRFU1RfQ0FTRSAoIGRlc3RyZWcsIGNvcnJlY3R2YWwsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgIGluc3QgZGVzdHJlZywgeDAsIFNFWFRfSU1NKGltbSk7IFwKKyAgICApCisKKyNkZWZpbmUgVEVTVF9JTU1fWkVST0RFU1QoIGluc3QsIHJlZywgdmFsLCBpbW0sIHN3cmVnLCBvZmZzZXQpIFwKKyAgICBURVNUX0NBU0UgKCB4MCwgMCwgc3dyZWcsIG9mZnNldCwgXAorICAgICAgbGkgcmVnLCBNQVNLX1hMRU4odmFsKTsgXAorICAgICAgaW5zdCB4MCwgcmVnLCBTRVhUX0lNTShpbW0pOyBcCisgICAgKQorCisjZGVmaW5lIFRFU1RfSU1NX09ORVJFRyggaW5zdCwgZGVzdHJlZywgY29ycmVjdHZhbCwgaW1tLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgVEVTVF9DQVNFICggZGVzdHJlZywgY29ycmVjdHZhbCwgc3dyZWcsIG9mZnNldCwgXAorICAgICAgaW5zdCBkZXN0cmVnLCBTRVhUX0lNTShpbW0pOyBcCisgICAgICApCisKKyNkZWZpbmUgVEVTVF9BVUlQQyhpbnN0LCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBpbW0sIHN3cmVnLCBvZmZzZXQpIFwKKyAgICBURVNUX0NBU0UgKCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICAxOiBcCisgICAgICBpbnN0IGRlc3RyZWcsIFNFWFRfSU1NKGltbSk7IFwKKyAgICAgIGxhIHN3cmVnLCAxYjsgXAorICAgICAgc3ViIGRlc3RyZWcsIGRlc3RyZWcsIHN3cmVnOyBcCisgICAgICApCisKKy8vVGVzdHMgZm9yIGEgY29tcHJlc3NlZCBpbnN0cnVjdGlvbgorI2RlZmluZSBURVNUX0NSX09QKCBpbnN0LCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbDEsIHZhbDIsIHN3cmVnLCBvZmZzZXQpIFwKKyAgICBURVNUX0NBU0UgKCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICBsaSByZWcsIE1BU0tfWExFTih2YWwxKTsgXAorICAgICAgbGkgZGVzdHJlZywgTUFTS19YTEVOKHZhbDIpOyBcCisgICAgICBpbnN0IGRlc3RyZWcsIHJlZzsgXAorICAgICAgKQorCisjZGVmaW5lIFRFU1RfQ0lfT1AoIGluc3QsIGRlc3RyZWcsIGNvcnJlY3R2YWwsIHZhbCwgaW1tLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgVEVTVF9DQVNFKCBkZXN0cmVnLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICBsaSBkZXN0cmVnLCBNQVNLX1hMRU4odmFsKTsgXAorICAgICAgaW5zdCBkZXN0cmVnLCBpbW07IFwKKyAgICAgICkKKworI2RlZmluZSBURVNUX0NJX09QX05PUkVHKGluc3QsIGNvcnJlY3R2YWwsIGltbSwgc3dyZWcsIG9mZnNldCkgXAorICAgIFRFU1RfQ0FTRSAoeDAsIGNvcnJlY3R2YWwsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgIGluc3QgaW1tOyBcCisgICAgICApCisKKy8vVGVzdHMgZm9yIGZsb2F0aW5nIHBvaW50IGluc3RydWN0aW9ucyAtIHNpbmdsZSBwcmVjaXNpb24KKyNkZWZpbmUgVEVTVF9GUF9PUCh0ZXN0X251bSwgaW5zdCwgZGVzdHJlZywgcmVnMSwgcmVnMiwgY29ycmVjdHZhbCwgdmFsMSwgdmFsMiwgc3dyZWcsIG9mZnNldCkgXAorICAgICAgVEVTVF9DQVNFX0ZQKHRlc3RfbnVtLCBkZXN0cmVnLCByZWcxLCByZWcyLCBjb3JyZWN0dmFsLCB2YWwxLCB2YWwyLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICAgIGluc3QgZGVzdHJlZywgcmVnMSwgcmVnMjsgXAorICAgICAgICApCisKKyNkZWZpbmUgVEVTVF9GUF9PTkVSRUcodGVzdF9udW0sIGluc3QsIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgICBURVNUX0NBU0VfRlAodGVzdF9udW0sIGRlc3RyZWcsIHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCwgXAorICAgICAgICBpbnN0IGRlc3RyZWcsIHJlZzsgXAorICAgICAgICApCisKKyNkZWZpbmUgVEVTVF9GUF80UkVHKHRlc3RfbnVtLCBpbnN0LCBkZXN0cmVnLCByZWcxLCByZWcyLCByZWczLCBjb3JyZWN0dmFsLCB2YWwxLCB2YWwyLCB2YWwzLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgICBURVNUX0NBU0VfRlBfNFJFRyh0ZXN0X251bSwgZGVzdHJlZywgcmVnMSwgcmVnMiwgcmVnMywgY29ycmVjdHZhbCwgdmFsMSwgdmFsMiwgdmFsMywgc3dyZWcsIG9mZnNldCwgXAorICAgICAgICBpbnN0IGRlc3RyZWcsIHJlZzEsIHJlZzIsIHJlZzM7IFwKKyAgICAgICAgKQorCisjZGVmaW5lIFRFU1RfRlBfSSh0ZXN0X251bSwgaW5zdCwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQpIFwKKyAgICAgIFRFU1RfQ0FTRV9GUF9JKHRlc3RfbnVtLCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCwgXAorICAgICAgICBsaSByZWcsIE1BU0tfWExFTih2YWwpOyBcCisgICAgICAgIGluc3QgZGVzdHJlZywgcmVnOyBcCisgICAgICAgICkKKworI2RlZmluZSBURVNUX0ZQX0kyKHRlc3RfbnVtLCBpbnN0LCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCkgXAorICAgICAgVEVTVF9DQVNFX0ZQX0kyKHRlc3RfbnVtLCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCwgXAorICAgICAgICBpbnN0IGRlc3RyZWcsIHJlZzsgXAorICAgICAgICApCisKKy8vVGVzdHMgZm9yIGZsb2F0aW5nIHBvaW50IGluc3RydWN0aW9ucyAtIGRvdWJsZSBwcmVjaXNpb24KKyNkZWZpbmUgVEVTVF9GUERfT1AodGVzdF9udW0sIGluc3QsIGRlc3RyZWcsIHJlZzEsIHJlZzIsIGNvcnJlY3R2YWwsIHZhbDEsIHZhbDIsIHN3cmVnLCBvZmZzZXQpIFwKKyAgICAgIFRFU1RfQ0FTRV9GUEQodGVzdF9udW0sIGRlc3RyZWcsIHJlZzEsIHJlZzIsIGNvcnJlY3R2YWwsIHZhbDEsIHZhbDIsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgICAgaW5zdCBkZXN0cmVnLCByZWcxLCByZWcyOyBcCisgICAgICAgICkKKworI2RlZmluZSBURVNUX0ZQRF9PTkVSRUcodGVzdF9udW0sIGluc3QsIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgICBURVNUX0NBU0VfRlBEKHRlc3RfbnVtLCBkZXN0cmVnLCByZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgICAgaW5zdCBkZXN0cmVnLCByZWc7IFwKKyAgICAgICAgKQorCisjZGVmaW5lIFRFU1RfRlBEXzRSRUcodGVzdF9udW0sIGluc3QsIGRlc3RyZWcsIHJlZzEsIHJlZzIsIHJlZzMsIGNvcnJlY3R2YWwsIHZhbDEsIHZhbDIsIHZhbDMsIHN3cmVnLCBvZmZzZXQpIFwKKyAgICAgIFRFU1RfQ0FTRV9GUERfNFJFRyh0ZXN0X251bSwgZGVzdHJlZywgcmVnMSwgcmVnMiwgcmVnMywgY29ycmVjdHZhbCwgdmFsMSwgdmFsMiwgdmFsMywgc3dyZWcsIG9mZnNldCwgXAorICAgICAgICBpbnN0IGRlc3RyZWcsIHJlZzEsIHJlZzIsIHJlZzM7IFwKKyAgICAgICAgKQorCisjZGVmaW5lIFRFU1RfRlBEX0kodGVzdF9udW0sIGluc3QsIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgICBURVNUX0NBU0VfRlBEX0kodGVzdF9udW0sIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICAgIGxpIHJlZywgTUFTS19YTEVOKHZhbCk7IFwKKyAgICAgICAgaW5zdCBkZXN0cmVnLCByZWc7IFwKKyAgICAgICAgKQorCisjZGVmaW5lIFRFU1RfRlBEX0kyKHRlc3RfbnVtLCBpbnN0LCBkZXN0cmVnLCByZWcsIGNvcnJlY3R2YWwsIHZhbCwgc3dyZWcsIG9mZnNldCkgXAorICAgICAgVEVTVF9DQVNFX0ZQRF9JMih0ZXN0X251bSwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgICAgaW5zdCBkZXN0cmVnLCByZWc7IFwKKyAgICAgICAgKQorCisjZGVmaW5lIFRFU1RfQ0FEREkxNlNQKGNvcnJlY3R2YWwsIGltbSwgc3dyZWcsIG9mZnNldCkgXAorICAgICAgVEVTVF9DQVNFKHgyLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICBjLmFkZGkxNnNwIHgyLCBpbW07IFwKKyAgICAgICkKKworI2RlZmluZSBURVNUX0NBRERJNFNQTihkZXN0cmVnLCBjb3JyZWN0dmFsLCBpbW0sIHN3cmVnLCBvZmZzZXQpIFwKKyAgICAgIFRFU1RfQ0FTRShkZXN0cmVnLCBjb3JyZWN0dmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICAgIGMuYWRkaTRzcG4gZGVzdHJlZywgeDIsIFNFWFRfSU1NKGltbSk7IFwKKyAgICAgICAgKQorCisjZGVmaW5lIFRFU1RfQ0pMKGluc3QsIHJlZywgdmFsLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgICBsaSB4MTAsIHZhbDsgXAorICAgICAgbGEgcmVnLCAxZjsgXAorICAgICAgaW5zdCByZWc7IFwKKyAgICAgIGxpIHgxMCwgMHgxMjNhYjsgXAorMTogXAorICAgICAgc3cgeDEwLCBvZmZzZXQoc3dyZWcpOyBcCisgICAgICBSVlRFU1RfSU9fQVNTRVJUX0dQUl9FUSh4MzEsIHgxMCwgdmFsKTsgXAorCisjZGVmaW5lIEFCUyh4KSAoKHggPj4gMTEpIF4geCkgLSAoeCA+PiAxMSkKKworI2RlZmluZSBURVNUX0NKKGluc3QsIHJlZywgdmFsLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgICBsaSByZWcsIHZhbDsgXAorICAgICAgaW5zdCAxZjsgXAorICAgICAgbGkgcmVnLCAweDEyM2FiOyBcCisxOiBcCisgICAgICBzdyByZWcsIG9mZnNldChzd3JlZyk7IFwKKyAgICAgIFJWVEVTVF9JT19BU1NFUlRfR1BSX0VRKHgzMSwgcmVnLCB2YWwpOyBcCisKKyNkZWZpbmUgVEVTVF9DTChpbnN0LCByZWcsIGltbSwgc3dyZWcsIG9mZnNldCkgXAorICAgICAgbGEgcmVnLCB0ZXN0X2RhdGE7IFwKKyAgICAgIGluc3QgcmVnLCBpbW0ocmVnKTsgXAorICAgICAgc3cgcmVnLCBvZmZzZXQoc3dyZWcpOyBcCisKKy8vIGx3IHJlZywgaW1tKHgyKQorLy8gYy5sd3NwIHJlZywgaW1tKHgyKQorI2RlZmluZSBURVNUX0NMV1NQKHJlZywgaW1tLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgICBsYSB4MiwgdGVzdF9kYXRhOyBcCisgICAgICBjLmx3c3AgcmVnLCBpbW0oeDIpOyBcCisgICAgICBzdyByZWcsIG9mZnNldChzd3JlZyk7IFwKKworI2RlZmluZSBURVNUX0NTVyh0ZXN0X2RhdGEsIGluc3QsIHJlZzEsIHJlZzIsIHZhbCwgaW1tLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgICBsaSByZWcxLCB2YWw7IFwKKyAgICAgIGxhIHJlZzIsIHRlc3RfZGF0YTsgXAorICAgICAgaW5zdCByZWcxLCBpbW0ocmVnMik7IFwKKyAgICAgIGx3IHJlZzEsIGltbShyZWcyKTsgXAorICAgICAgc3cgcmVnMSwgb2Zmc2V0KHN3cmVnKTsgXAorICAgICAgUlZURVNUX0lPX0FTU0VSVF9HUFJfRVEoeDMxLCByZWcxLCB2YWwpOyBcCisKKyNkZWZpbmUgVEVTVF9DU1dTUCh0ZXN0X2RhdGEsIHJlZywgdmFsLCBpbW0sIHN3cmVnLCBvZmZzZXQpIFwKKyAgICAgIGxhIHgyLCB0ZXN0X2RhdGE7IFwKKyAgICAgIGxpIHJlZywgdmFsOyBcCisgICAgICBjLnN3c3AgcmVnLCBpbW0oeDIpOyBcCisgICAgICBsdyByZWcsIGltbSh4Mik7IFwKKyAgICAgIHN3IHJlZywgb2Zmc2V0KHN3cmVnKTsgXAorICAgICAgUlZURVNUX0lPX0FTU0VSVF9HUFJfRVEoeDMxLCByZWcsIHZhbCk7IFwKKworI2RlZmluZSBURVNUX0NCRVFaKHJlZywgdmFsLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgICBsaSByZWcsIHZhbDsgXAorICAgICAgYy5zdWIgcmVnLCByZWc7IFwKKyAgICAgIGMuYmVxeiByZWcsIDNmOyBcCisgICAgICBsaSByZWcsIDB4MTIzYWI7IFwKKzM6IFwKKyAgICAgIHN3IHJlZywgb2Zmc2V0KHN3cmVnKTsgXAorICAgICAgUlZURVNUX0lPX0FTU0VSVF9HUFJfRVEoeDMxLCByZWcsIDB4MCk7IFwKKworI2RlZmluZSBURVNUX0NCTkVaKHJlZywgdmFsLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgICBsaSByZWcsIHZhbDsgXAorICAgICAgYy5ibmV6IHJlZywgNGY7IFwKKyAgICAgIGxpIHJlZywgMHgwOyBcCis0OiBcCisgICAgICBzdyByZWcsIG9mZnNldChzd3JlZyk7IFwKKyAgICAgIFJWVEVTVF9JT19BU1NFUlRfR1BSX0VRKHgzMSwgcmVnLCB2YWwpOyBcCisKKyNkZWZpbmUgVEVTVF9GTVZYUyh0ZXN0X251bSwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQpIFwKKyAgICAgIFRFU1RfQ0FTRV9GUF9GTVZYUyh0ZXN0X251bSwgZGVzdHJlZywgcmVnLCBjb3JyZWN0dmFsLCB2YWwsIHN3cmVnLCBvZmZzZXQsIFwKKyAgICAgICAgZm12LngucyBkZXN0cmVnLCByZWc7IFwKKyAgICAgICAgKQorCisjZGVmaW5lIFRFU1RfRk1WU1godGVzdF9udW0sIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0KSBcCisgICAgICBURVNUX0NBU0VfRlBfRk1WU1godGVzdF9udW0sIGRlc3RyZWcsIHJlZywgY29ycmVjdHZhbCwgdmFsLCBzd3JlZywgb2Zmc2V0LCBcCisgICAgICAgIGZtdi5zLnggZGVzdHJlZywgcmVnOyBcCisgICAgICAgICkKKworI2RlZmluZSBTV1NJRyhhLGIpCisKKworI2lmIF9fcmlzY3ZfeGxlbiA9PSA2NAorI2RlZmluZSBTQVRQX01PREUgU0FUUDY0X01PREUKKyNlbHNlCisjZGVmaW5lIFNBVFBfTU9ERSBTQVRQMzJfTU9ERQorI2VuZGlmCisKKyNkZWZpbmUgU0FUUDMyX01PREUgICAgICAgICAweDgwMDAwMDAwCisjZGVmaW5lIFNBVFAzMl9BU0lEICAgICAgICAgMHg3RkMwMDAwMAorI2RlZmluZSBTQVRQMzJfUFBOICAgICAgICAgIDB4MDAzRkZGRkYKKyNkZWZpbmUgU0FUUDY0X01PREUgMHhGMDAwMDAwMDAwMDAwMDAwCisjZGVmaW5lIFNBVFA2NF9BU0lEIDB4MEZGRkYwMDAwMDAwMDAwMAorI2RlZmluZSBTQVRQNjRfUFBOICAweDAwMDAwRkZGRkZGRkZGRkYKKworI2RlZmluZSBTQVRQX01PREVfT0ZGICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgU0FUUF9NT0RFX1NWMzIgICAgICAgICAgICAgICAxCisjZGVmaW5lIFNBVFBfTU9ERV9TVjM5ICAgICAgICAgICAgICAgOAorI2RlZmluZSBTQVRQX01PREVfU1Y0OCAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgU0FUUF9NT0RFX1NWNTcgICAgICAgICAgICAgIDEwCisjZGVmaW5lIFNBVFBfTU9ERV9TVjY0ICAgICAgICAgICAgICAxMQorCisjZGVmaW5lIFRFU1RfRlBfT1AyX0QzMiggdGVzdG51bSwgaW5zdCwgZmxhZ3MsIHJlc3VsdCwgdmFsMSwgdmFsMiApIFwKKyAgVEVTVF9GUF9PUF9EMzJfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBkb3VibGUgcmVzdWx0LCB2YWwxLCB2YWwyLCAwLjAsIFwKKyAgICAgICAgICAgICAgICAgICAgaW5zdCBmMywgZjAsIGYxOyBmc2QgZjMsIDAoYTApOyBsdyB0MiwgNChhMCk7IGx3IGEwLCAwKGEwKSkKKworI2RlZmluZSBURVNUX0NBU0VfRDMyKCB0ZXN0bnVtLCB0ZXN0cmVnMSwgdGVzdHJlZzIsIGNvcnJlY3R2YWwsIGNvZGUuLi4gKSBcCit0ZXN0XyAjIyB0ZXN0bnVtOiBcCisgICAgY29kZTsgXAorICAgIGxhICB4MzEsIHRlc3RfICMjIHRlc3RudW0gIyMgX2RhdGEgOyBcCisgICAgbHcgIHgyOSwgMCh4MzEpOyBcCisgICAgbHcgIHgzMSwgNCh4MzEpOyBcCisgICAgbGkgIFRFU1ROVU0sIHRlc3RudW07IFwKKyAgICBibmUgdGVzdHJlZzEsIHgyOSwgZmFpbDtcCisgICAgYm5lIHRlc3RyZWcyLCB4MzEsIGZhaWw7XAorICAgIC5wdXNoc2VjdGlvbiAuZGF0YTsgXAorICAgIC5iYWxpZ24gODsgXAorICAgIHRlc3RfICMjIHRlc3RudW0gIyMgX2RhdGE6IFwKKyAgICAuZHdvcmQgY29ycmVjdHZhbDsgXAorICAgIC5wb3BzZWN0aW9uCisKKyNkZWZpbmUgVEVTVF9GUF9PUF9EMzJfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCByZXN1bHQsIHZhbDEsIHZhbDIsIHZhbDMsIGNvZGUuLi4gKSBcCit0ZXN0XyAjIyB0ZXN0bnVtOiBcCisgIGxpICBURVNUTlVNLCB0ZXN0bnVtOyBcCisgIGxhICBhMCwgdGVzdF8gIyMgdGVzdG51bSAjIyBfZGF0YSA7XAorICBmbGQgZjAsIDAoYTApOyBcCisgIGZsZCBmMSwgOChhMCk7IFwKKyAgZmxkIGYyLCAxNihhMCk7IFwKKyAgbHcgIGEzLCAyNChhMCk7IFwKKyAgbHcgIHQxLCAyOChhMCk7IFwKKyAgY29kZTsgXAorICBmc2ZsYWdzIGExLCB4MDsgXAorICBsaSBhMiwgZmxhZ3M7IFwKKyAgYm5lIGEwLCBhMywgZmFpbDsgXAorICBibmUgdDEsIHQyLCBmYWlsOyBcCisgIGJuZSBhMSwgYTIsIGZhaWw7IFwKKyAgLnB1c2hzZWN0aW9uIC5kYXRhOyBcCisgIC5iYWxpZ24gODsgXAorICB0ZXN0XyAjIyB0ZXN0bnVtICMjIF9kYXRhOiBcCisgIC5kb3VibGUgdmFsMTsgXAorICAuZG91YmxlIHZhbDI7IFwKKyAgLmRvdWJsZSB2YWwzOyBcCisgIC5yZXN1bHQ7IFwKKyAgLnBvcHNlY3Rpb24KKworI2RlZmluZSBURVNUX0ZQX09QMV9EMzIoIHRlc3RudW0sIGluc3QsIGZsYWdzLCByZXN1bHQsIHZhbDEgKSBcCisgIFRFU1RfRlBfT1BfRDMyX0lOVEVSTkFMKCB0ZXN0bnVtLCBmbGFncywgZG91YmxlIHJlc3VsdCwgdmFsMSwgMC4wLCAwLjAsIFwKKyAgICAgICAgICAgICAgICAgICAgaW5zdCBmMywgZjA7IGZzZCBmMywgMChhMCk7IGx3IHQyLCA0KGEwKTsgbHcgYTAsIDAoYTApKQorCisjZGVmaW5lIFRFU1RfRkNMQVNTX0QzMih0ZXN0bnVtLCBjb3JyZWN0LCBpbnB1dCkgXAorICBURVNUX0NBU0UodGVzdG51bSwgYTAsIGNvcnJlY3QsIFwKKyAgICAgICAgICAgIGxhIGEwLCB0ZXN0XyAjIyB0ZXN0bnVtICMjIF9kYXRhIDtcCisgICAgICAgICAgICBmbGQgZmEwLCAwKGEwKTsgXAorICAgICAgICAgICAgZmNsYXNzLmQgYTAsIGZhMCkgXAorICAgIC5wdXNoc2VjdGlvbiAuZGF0YTsgXAorICAgIC5iYWxpZ24gODsgXAorICAgIHRlc3RfICMjIHRlc3RudW0gIyMgX2RhdGE6IFwKKyAgICAuZHdvcmQgaW5wdXQ7IFwKKyAgICAucG9wc2VjdGlvbgorCisjZGVmaW5lIFRFU1RfRlBfQ01QX09QX0QzMiggdGVzdG51bSwgaW5zdCwgZmxhZ3MsIHJlc3VsdCwgdmFsMSwgdmFsMiApIFwKKyAgVEVTVF9GUF9PUF9EMzJfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBkd29yZCByZXN1bHQsIHZhbDEsIHZhbDIsIDAuMCwgXAorICAgICAgICAgICAgICAgICAgICBpbnN0IGEwLCBmMCwgZjE7IGxpIHQyLCAwKQorCisjZGVmaW5lIFRFU1RfSU5UX0ZQX09QX0QzMiggdGVzdG51bSwgaW5zdCwgcmVzdWx0LCB2YWwxICkgXAordGVzdF8gIyMgdGVzdG51bTogXAorICBsaSAgVEVTVE5VTSwgdGVzdG51bTsgXAorICBsYSAgYTAsIHRlc3RfICMjIHRlc3RudW0gIyMgX2RhdGEgO1wKKyAgbHcgIGEzLCAwKGEwKTsgXAorICBsdyAgYTQsIDQoYTApOyBcCisgIGxpICBhMSwgdmFsMTsgXAorICBpbnN0IGYwLCBhMTsgXAorICBcCisgIGZzZCBmMCwgMChhMCk7IFwKKyAgbHcgYTEsIDQoYTApOyBcCisgIGx3IGEwLCAwKGEwKTsgXAorICBcCisgIGZzZmxhZ3MgeDA7IFwKKyAgYm5lIGEwLCBhMywgZmFpbDsgXAorICBibmUgYTEsIGE0LCBmYWlsOyBcCisgIC5wdXNoc2VjdGlvbiAuZGF0YTsgXAorICAuYmFsaWduIDg7IFwKKyAgdGVzdF8gIyMgdGVzdG51bSAjIyBfZGF0YTogXAorICAuZG91YmxlIHJlc3VsdDsgXAorICAucG9wc2VjdGlvbgorCisjZGVmaW5lIFRFU1RfRkNWVF9TX0QzMiggdGVzdG51bSwgcmVzdWx0LCB2YWwxICkgXAorICBURVNUX0ZQX09QX0QzMl9JTlRFUk5BTCggdGVzdG51bSwgMCwgZG91YmxlIHJlc3VsdCwgdmFsMSwgMC4wLCAwLjAsIFwKKyAgICAgICAgICAgICAgICAgICAgZmN2dC5zLmQgZjMsIGYwOyBmY3Z0LmQucyBmMywgZjM7IGZzZCBmMywgMChhMCk7IGx3IHQyLCA0KGEwKTsgbHcgYTAsIDAoYTApKQorCisjZGVmaW5lIFRFU1RfRlBfT1AzX0QzMiggdGVzdG51bSwgaW5zdCwgZmxhZ3MsIHJlc3VsdCwgdmFsMSwgdmFsMiwgdmFsMyApIFwKKyAgVEVTVF9GUF9PUF9EMzJfSU5URVJOQUwoIHRlc3RudW0sIGZsYWdzLCBkb3VibGUgcmVzdWx0LCB2YWwxLCB2YWwyLCB2YWwzLCBcCisgICAgICAgICAgICAgICAgICAgIGluc3QgZjMsIGYwLCBmMSwgZjI7IGZzZCBmMywgMChhMCk7IGx3IHQyLCA0KGEwKTsgbHcgYTAsIDAoYTApKQorCisjZGVmaW5lIFRFU1RfRlBfT1AxX0QzMl9EV09SRF9SRVNVTFQoIHRlc3RudW0sIGluc3QsIGZsYWdzLCByZXN1bHQsIHZhbDEgKSBcCisgIFRFU1RfRlBfT1BfRDMyX0lOVEVSTkFMKCB0ZXN0bnVtLCBmbGFncywgZHdvcmQgcmVzdWx0LCB2YWwxLCAwLjAsIDAuMCwgXAorICAgICAgICAgICAgICAgICAgICBpbnN0IGYzLCBmMDsgZnNkIGYzLCAwKGEwKTsgbHcgdDIsIDQoYTApOyBsdyBhMCwgMChhMCkpCisKKworI2VuZGlmCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvcmlzY3ZfaXNhL01ha2VmaWxlIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL3Jpc2N2X2lzYS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjBmYTNmCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL3Jpc2N2X2lzYS9NYWtlZmlsZQpAQCAtMCwwICsxLDk2IEBACisKK2luY2x1ZGUgcnYzMl90ZXN0cy5pbmMKKworQVJDSF90bXAgOj0gaW1mCisKK2lmbmVxICgsJChmaW5kc3RyaW5nIGMsJChBUkNIX2xvd2VyY2FzZSkpKQorCUFSQ0hfdG1wIDo9ICQoQVJDSF90bXApYworZW5kaWYKKworb3ZlcnJpZGUgQVJDSCA6PSAkKEFSQ0hfdG1wKQorCitzcmNfZGlyIDo9ICQoQ1VSRElSKQorb2JqX2RpciAgIDo9ICQoYmxkX2RpcikvcmlzY3Zfb2JqcwordGVzdF9saXN0IDo9ICQocGF0c3Vic3QgJS5TLCAlLCAkKG5vdGRpciAkKHJ2MzJfaXNhX3Rlc3RzKSkpCitvYmpzICAgICAgOj0gJChhZGRwcmVmaXggJChvYmpfZGlyKS8sJCh0ZXN0X2xpc3Q6JT0lLm8pKQordGVzdF9lbGYgIDo9ICQoYWRkcHJlZml4ICQoYmxkX2RpcikvLCQodGVzdF9saXN0OiU9JS5lbGYpKQordGVzdF9oZXggIDo9ICQoYWRkcHJlZml4ICQoYmxkX2RpcikvLCQodGVzdF9saXN0OiU9JS5oZXgpKQordGVzdF9kdW1wIDo9ICQoYWRkcHJlZml4ICQoYmxkX2RpcikvLCQodGVzdF9saXN0OiU9JS5kdW1wKSkKKworQ0ZMQUdTIDo9IC1JJChpbmNfZGlyKSAtSSQoc3JjX2RpcikgLURBU00gLVdhLC1tYXJjaD1ydjMyJChBUkNIKSAtbWFyY2g9cnYzMiQoQVJDSCkgLW1hYmk9aWxwMzJmIC1EX19yaXNjdl94bGVuPTMyCitMREZMQUdTIDo9IC1zdGF0aWMgLWZ2aXNpYmlsaXR5PWhpZGRlbiAtbm9zdGRsaWIgLW5vc3RhcnRmaWxlcyAtVCQoaW5jX2RpcikvbGluay5sZCAtbWFyY2g9cnYzMiQoQVJDSCkgLW1hYmk9aWxwMzJmCitSSVNDVl9URVNUUyA6PSAkKHNyY19kaXIpLy4uLy4uL2RlcGVuZGVuY2llcy9yaXNjdi10ZXN0cy8KKworVlBBVEggKz0gJChzcmNfZGlyKSAkKGJsZF9kaXIpICQob2JqX2RpcikgJChSSVNDVl9URVNUUykKKworZGVmYXVsdDogbG9nX3JlcXVlc3RlZF90Z3QgY2hlY2tfcmlzY3ZfdGVzdHMgJCh0ZXN0X2VsZikgJCh0ZXN0X2hleCkgJCh0ZXN0X2R1bXApCisKK2RlZmluZSBjb21waWxlX3RlbXBsYXRlCiskKG9ial9kaXIpLyQkKGJhc2VuYW1lICQobm90ZGlyICQoU1JDKSkpLm86ICQkKFNSQykgfCAkKG9ial9kaXIpCisJJChSSVNDVl9HQ0MpIC1jICQkPCAkKENGTEFHUykgLW8gJCRACisgZW5kZWYKKworJChmb3JlYWNoIFNSQywkKHJ2MzJfaXNhX3Rlc3RzKSwgJChldmFsICQoY29tcGlsZV90ZW1wbGF0ZSkpKQorCitsb2dfcmVxdWVzdGVkX3RndDoKKwkkKGZvcmVhY2ggdGVzdF9uYW1lLCAkKHRlc3RfbGlzdCksICQoZXZhbCAkKHNoZWxsIGVjaG8gJCh0ZXN0X25hbWUpLmhleCA+PiAkKGJsZF9kaXIpL3Rlc3RfaW5mbykpKQorCiskKG9ial9kaXIpIDoKKwlta2RpciAtcCAkKG9ial9kaXIpCisKKyQoYmxkX2RpcikvJS5lbGY6ICQob2JqX2RpcikvJS5vIHwgJChvYmpfZGlyKQorCSQoUklTQ1ZfR0NDKSAkXiAkKExERkxBR1MpIC1vICRACisKKyQoYmxkX2RpcikvJS5oZXg6ICQoYmxkX2RpcikvJS5lbGYKKwkkKFJJU0NWX1JPTV9PQkpDT1BZKSAkXiAkQAorCSQoUklTQ1ZfUkFNX09CSkNPUFkpICReICRALnJhbQorCSNhc3NpZ24gMHgwODAwXzB4eHggIHRvIDB4MDAwMF8weHh4IHRvIG1hcCB0byBUQ00gTWVtb3J5CisJc2VkIC1pICdzL0AwODAwMC9AMDAwMDAvZycgJEAucmFtCisKKyQoYmxkX2RpcikvJS5kdW1wOiAkKGJsZF9kaXIpLyUuZWxmCisJJChSSVNDVl9PQkpEVU1QKSAkXiA+ICRACisKK2NsZWFuOgorCSQoUk0pICQodGVzdF9lbGYpICQodGVzdF9oZXgpICQodGVzdF9kdW1wKSAkKG9ianMpCisJJChSTSkgLVIgJChvYmpfZGlyKQorCisKKy5QSE9OWTogY2hlY2tfcmlzY3ZfdGVzdHMKKworcmlzY3ZfdGVzdHNfZGlyICAgIDo9ICQoaWYgJChSSVNDVl9URVNUUyksICQoUklTQ1ZfVEVTVFMpLCAuL3VuZGVmaW5lZCkKK3Jpc2N2X3Rlc3RzX2NvbW1pdCA6PSA1ZjhhNDkxOGM2NDgyZTY1YzY3YTJiN2RlY2Q1YzJhZjNlM2ZlMGU1CisjIyBjb21taXQgaGFzaCByZWFkZWQgZnJvbSBsb2NhbCBjb3B5IG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9yaXNjdi9yaXNjdi10ZXN0cwordG1wX2NvbW1pdCA9ICQoc2hlbGwgY2QgJChyaXNjdl90ZXN0c19kaXIpIDI+L2Rldi9udWxsICYmIGdpdCBsb2cgLTEgfCBncmVwICJjb21taXQiIHwgY3V0IC1mMiAtZCAnICcpCitpc19jb21taXRfZ29vZCA9ICQoaWYgJChzdWJzdCAkKHJpc2N2X3Rlc3RzX2NvbW1pdCksLCQodG1wX2NvbW1pdCkpLGZhbHNlLHRydWUpCisKKyMgQ29sb3IKK1JFRD1cMDMzWzA7MzFtCitOQz1cMDMzWzBtCisKK2NoZWNrX3Jpc2N2X3Rlc3RzIDogJChyaXNjdl90ZXN0c19kaXIpCisJQGlmIFsgISAtZCAkKHJpc2N2X3Rlc3RzX2RpcikgXTsgdGhlbiBcCisJCWVjaG8gLWUgIiQoUkVEKT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IiAmJlwKKwkJZWNobyAiICAgRXJyb3IhIEVudmlyb25tZW50IHZhcmlhYmxlIFJJU0NWX1RFU1RTPSckKHJpc2N2X3Rlc3RzX2RpciknICIgJiZcCisJCWVjaG8gIiAgICAgIGRpcmVjdG9yeSBub3QgZXhpc3QhIiAmJiBcCisJCWVjaG8gIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09JChOQykiIDsgXAorCWZpCitpZm5lcSAoJChpc19jb21taXRfZ29vZCksdHJ1ZSkKKwlAZWNobyAtZSAiJChSRUQpPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iCisJQGVjaG8gIiAgIFdhcm5pbmchIEV4ZWN1dGlvbiBvZiB0ZXN0IGNvZGUgaXMgbm90IGd1YXJhbnRlZWQgIgorCUBlY2hvICIgICB3aGlsZSB1c2luZyB0aGUgY3VycmVudCBjb21taXQgb2YgcmVwb3NpdG9yeWxvY2F0ZWQgYXQgOiAkKHJpc2N2X3Rlc3RzX2RpcikgLiIKKwlAZWNobyAiICAgIgorCUBlY2hvICIgICBSaXNjdi10ZXN0cyByZXBvc2l0b3J5IG11c3QgcG9pbnQgdG8gY29tbWl0ICQocmlzY3ZfdGVzdHNfY29tbWl0KSEiCisJQGVjaG8gLWUgIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09JChOQykiCitlbmRpZgorCiskKHJpc2N2X3Rlc3RzX2RpcikgOi4KK2lmbmRlZiBSSVNDVl9URVNUUworCUBlY2hvIC1lICIkKFJFRCk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSIKKwlAZWNobyAiICAgIEVycm9yISBFbnZpcm9ubWVudCB2YXJpYWJsZSBSSVNDVl9URVNUUyBub3Qgc2V0ISIKKwlAZWNobyAiICAgIFlvdSBtdXN0IHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgUklTQ1ZfVEVTVFMiCisJQGVjaG8gIiAgICBUaGUgdmFyaWFibGUgc2hvdWxkIHBvaW50IHRvIHRoZSBsb2NhbCBjb3B5IG9mIHRoZSIKKwlAZWNobyAiICAgICAgcmVwb3NpdG9yeSBodHRwczovL2dpdGh1Yi5jb20vcmlzY3YvcmlzY3YtdGVzdHMiCisJQGVjaG8gIiAgICAgIHdpdGggdGhlIGNvbW1pdCAkKHJpc2N2X3Rlc3RzX2NvbW1pdCkiCisJQGVjaG8gLWUgIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09JChOQykiCisJZXhpdCAxCitlbmRpZgpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL3Jpc2N2X2lzYS9yaXNjdl90ZXN0LmggYi92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvcmlzY3ZfaXNhL3Jpc2N2X3Rlc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjljZTBkCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL3Jpc2N2X2lzYS9yaXNjdl90ZXN0LmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIF9fUklTQ1ZfX1RFU1RfX0gKKyNkZWZpbmUgX19SSVNDVl9fVEVTVF9fSAorCisjaW5jbHVkZSAicmlzY3ZfbWFjcm9zLmgiIAorCisjZW5kaWYgLy8gI2lmbmRlZiBfX1JJU0NWX19URVNUX19ICmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdGVzdHMvcmlzY3ZfaXNhL3J2MzJfdGVzdHMuaW5jIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL3Jpc2N2X2lzYS9ydjMyX3Rlc3RzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmU1MDEyCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL3Jpc2N2X2lzYS9ydjMyX3Rlc3RzLmluYwpAQCAtMCwwICsxLDY2IEBACisKK0FSQ0hfbG93ZXJjYXNlID0gJChzaGVsbCBlY2hvICQoQVJDSCkgfCB0ciBBLVogYS16KQorCisKK3J2MzJfaXNhX3Rlc3RzICs9IGlzYS9ydjMydWkvYWRkLlMgICAgICBcCisgICAgICAgICAgICAgIGlzYS9ydjMydWkvYWRkaS5TICAgICAgICAgXAorICAgICAgICAgICAgICBpc2EvcnYzMnVpL2FuZC5TICAgICAgICAgIFwKKyAgICAgICAgICAgICAgaXNhL3J2MzJ1aS9hbmRpLlMgICAgICAgICBcCisgICAgICAgICAgICAgIGlzYS9ydjMydWkvYXVpcGMuUyAgICAgICAgXAorICAgICAgICAgICAgICBpc2EvcnYzMnVpL2JlcS5TICAgICAgICAgIFwKKyAgICAgICAgICAgICAgaXNhL3J2MzJ1aS9iZ2UuUyAgICAgICAgICBcCisgICAgICAgICAgICAgIGlzYS9ydjMydWkvYmdldS5TICAgICAgICAgXAorICAgICAgICAgICAgICBpc2EvcnYzMnVpL2JsdC5TICAgICAgICAgIFwKKyAgICAgICAgICAgICAgaXNhL3J2MzJ1aS9ibHR1LlMgICAgICAgICBcCisgICAgICAgICAgICAgIGlzYS9ydjMydWkvYm5lLlMgICAgICAgICAgXAorICAgICAgICAgICAgICBpc2EvcnYzMm1pL2Nzci5TICAgICAgICAgIFwKKyAgICAgICAgICAgICAgaXNhL3J2MzJ1aS9mZW5jZV9pLlMgICAgICBcCisgICAgICAgICAgICAgIGlzYS9ydjMybWkvaWxsZWdhbC5TICAgICAgXAorICAgICAgICAgICAgICBpc2EvcnYzMnVpL2phbC5TICAgICAgICAgIFwKKyAgICAgICAgICAgICAgaXNhL3J2MzJ1aS9qYWxyLlMgICAgICAgICBcCisgICAgICAgICAgICAgIGlzYS9ydjMydWkvbGIuUyAgICAgICAgICAgXAorICAgICAgICAgICAgICBpc2EvcnYzMnVpL2xidS5TICAgICAgICAgIFwKKyAgICAgICAgICAgICAgaXNhL3J2MzJ1aS9saC5TICAgICAgICAgICBcCisgICAgICAgICAgICAgIGlzYS9ydjMydWkvbGh1LlMgICAgICAgICAgXAorICAgICAgICAgICAgICBpc2EvcnYzMnVpL2x1aS5TICAgICAgICAgIFwKKyAgICAgICAgICAgICAgaXNhL3J2MzJ1aS9sdy5TICAgICAgICAgICBcCisgICAgICAgICAgICAgIGlzYS9ydjMybWkvbWFfYWRkci5TICAgICAgXAorICAgICAgICAgICAgICBpc2EvcnYzMm1pL21hX2ZldGNoLlMgICAgIFwKKyAgICAgICAgICAgICAgaXNhL3J2MzJtaS9tY3NyLlMgICAgICAgICBcCisgICAgICAgICAgICAgIGlzYS9ydjMydWkvb3IuUyAgICAgICAgICAgXAorICAgICAgICAgICAgICBpc2EvcnYzMnVpL29yaS5TICAgICAgICAgIFwKKyAgICAgICAgICAgICAgaXNhL3J2MzJ1aS9zYi5TICAgICAgICAgICBcCisgICAgICAgICAgICAgIGlzYS9ydjMybWkvc2JyZWFrLlMgICAgICAgXAorICAgICAgICAgICAgICBpc2EvcnYzMm1pL3NjYWxsLlMgICAgICAgIFwKKyAgICAgICAgICAgICAgaXNhL3J2MzJ1aS9zaC5TICAgICAgICAgICBcCisgICAgICAgICAgICAgIGlzYS9ydjMybWkvc2hhbXQuUyAgICAgICAgXAorICAgICAgICAgICAgICBpc2EvcnYzMnVpL3NpbXBsZS5TICAgICAgIFwKKyAgICAgICAgICAgICAgaXNhL3J2MzJ1aS9zbGwuUyAgICAgICAgICBcCisgICAgICAgICAgICAgIGlzYS9ydjMydWkvc2xsaS5TICAgICAgICAgXAorICAgICAgICAgICAgICBpc2EvcnYzMnVpL3NsdC5TICAgICAgICAgIFwKKyAgICAgICAgICAgICAgaXNhL3J2MzJ1aS9zbHRpLlMgICAgICAgICBcCisgICAgICAgICAgICAgIGlzYS9ydjMydWkvc2x0aXUuUyAgICAgICAgXAorICAgICAgICAgICAgICBpc2EvcnYzMnVpL3NsdHUuUyAgICAgICAgIFwKKyAgICAgICAgICAgICAgaXNhL3J2MzJ1aS9zcmEuUyAgICAgICAgICBcCisgICAgICAgICAgICAgIGlzYS9ydjMydWkvc3JhaS5TICAgICAgICAgXAorICAgICAgICAgICAgICBpc2EvcnYzMnVpL3NybC5TICAgICAgICAgIFwKKyAgICAgICAgICAgICAgaXNhL3J2MzJ1aS9zcmxpLlMgICAgICAgICBcCisgICAgICAgICAgICAgIGlzYS9ydjMydWkvc3ViLlMgICAgICAgICAgXAorICAgICAgICAgICAgICBpc2EvcnYzMnVpL3N3LlMgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgaXNhL3J2MzJ1aS94b3IuUyAgICAgICAgICBcCisgICAgICAgICAgICAgIGlzYS9ydjMydWkveG9yaS5TCisKK2lmbmVxICgsJChmaW5kc3RyaW5nIG0sJChBUkNIX2xvd2VyY2FzZSkpKQorcnYzMl9pc2FfdGVzdHMgKz0gaXNhL3J2MzJ1bS9kaXYuUyAgICAgIFwKKyAgICAgICAgICAgICAgaXNhL3J2MzJ1bS9kaXZ1LlMgICAgICAgICBcCisgICAgICAgICAgICAgIGlzYS9ydjMydW0vbXVsLlMgICAgICAgICAgXAorICAgICAgICAgICAgICBpc2EvcnYzMnVtL211bGguUyAgICAgICAgIFwKKyAgICAgICAgICAgICAgaXNhL3J2MzJ1bS9tdWxoc3UuUyAgICAgICBcCisgICAgICAgICAgICAgIGlzYS9ydjMydW0vbXVsaHUuUyAgICAgICAgXAorICAgICAgICAgICAgICBpc2EvcnYzMnVtL3JlbS5TICAgICAgICAgIFwKKyAgICAgICAgICAgICAgaXNhL3J2MzJ1bS9yZW11LlMKK2VuZGlmICMjIGlmZXEgKG0sJChmaW5kc3RyaW5nIG0sJChBUkNIX2xvd2VyY2FzZSkpKQorCitpZm5lcSAoLCQoZmluZHN0cmluZyBjLCQoQVJDSF9sb3dlcmNhc2UpKSkKK3J2MzJfaXNhX3Rlc3RzICs9IGlzYS9ydjMydWMvcnZjLlMKK2VuZGlmICMjIGlmZXEgKG0sJChmaW5kc3RyaW5nIGMsJChBUkNIX2xvd2VyY2FzZSkpKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9yaXNjdl9pc2EvdGVzdF9tYWNyb3MuaCBiL3Zlcmlsb2cvZHYvcmlzY3ZfcmVncmVzcy90ZXN0cy9yaXNjdl9pc2EvdGVzdF9tYWNyb3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDM5MThkCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3Rlc3RzL3Jpc2N2X2lzYS90ZXN0X21hY3Jvcy5oCkBAIC0wLDAgKzEsNSBAQAorI2lmbmRlZiBfX1RFU1RfX01BQ1JPU19fSAorI2RlZmluZSBfX1RFU1RfX01BQ1JPU19fSAorCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3VzZXJfcmlzY19yZWdyZXNzX3RiLnYgYi92ZXJpbG9nL2R2L3Jpc2N2X3JlZ3Jlc3MvdXNlcl9yaXNjX3JlZ3Jlc3NfdGIudgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTllZTBhCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi9yaXNjdl9yZWdyZXNzL3VzZXJfcmlzY19yZWdyZXNzX3RiLnYKQEAgLTAsMCArMSw1MzcgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6ICAyMDIxICwgRGluZXNoIEFubmF5eWEKKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IE1vZGlmaWVkIGJ5IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBTdGFuZGFsb25lIFVzZXIgdmFsaWRhdGlvbiBUZXN0IGJlbmNoICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgWUlGaXZlIGNvcmVzIHByb2plY3QgICAgICAgICAgICAgICAvLy8vCisvLy8vICBodHRwczovL2dpdGh1Yi5jb20vZGluZXNoYW5uYXl5YS95aWZpdmVfcjAuZ2l0ICAgICAgICAgICAgICAvLy8vCisvLy8vICBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvY29yZXMveWlmaXZlLyAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgVGhpcyBpcyBhIHN0YW5kYWxvbmUgdGVzdCBiZW5jaCB0byB2YWxpZGF0ZSB0aGUgICAgICAgICAgICAvLy8vCisvLy8vICAgRGlnaXRhbCBjb3JlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgMS4gVXNlciBSaXNjIGNvcmUgaXMgYm9vdGVkIHVzaW5nICBjb21waWxlZCBjb2RlIG9mICAgICAgICAvLy8vCisvLy8vICAgICAgdXNlcl9yaXNjX2Jvb3QuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgMi4gVXNlciBSaXNjIGNvcmUgdXNlcyBTZXJpYWwgRmxhc2ggYW5kIFNEUkFNIHRvIGJvb3QgICAgICAvLy8vCisvLy8vICAgMy4gQWZ0ZXIgc3VjY2Vzc2Z1bCBib290LCBSaXNjIGNvcmUgd2lsbCAgd3JpdGUgc2lnbmF0dXJlICAvLy8vCisvLy8vICAgICAgaW4gdG8gIHVzZXIgcmVnaXN0ZXIgZnJvbSAweDMwMDBfMDAxOCB0byAweDMwMDBfMDAyQyAgICAvLy8vCisvLy8vICAgNC4gVGhyb3VnaCB0aGUgRXh0ZXJuYWwgV2lzaGJvbmUgSW50ZXJmYWNlIHdlIHJlYWQgYmFjayAgICAvLy8vCisvLy8vICAgICAgIGFuZCB2YWxpZGF0ZSB0aGUgdXNlciByZWdpc3RlciB0byBkZWNsYXJlZCBwYXNzIGZhaWwgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUbyBEbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIG5vdGhpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBBdXRob3Iocyk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgLSBEaW5lc2ggQW5uYXl5YSwgZGluZXNoYUBvcGVuY29yZXMub3JnICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBSZXZpc2lvbiA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIDAuMSAtIDE2dGggRmViIDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIENvcHlyaWdodCAoQykgMjAwMCBBdXRob3JzIGFuZCBPUEVOQ09SRVMuT1JHICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgICAvLy8vCisvLy8vIHJlc3RyaWN0aW9uIHByb3ZpZGVkIHRoYXQgdGhpcyBjb3B5cmlnaHQgc3RhdGVtZW50IGlzIG5vdCAgICAvLy8vCisvLy8vIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSBhbmQgdGhhdCBhbnkgZGVyaXZhdGl2ZSB3b3JrIGNvbnRhaW5zICAvLy8vCisvLy8vIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLiAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgICAvLy8vCisvLy8vIGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAvLy8vCisvLy8vIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAvLy8vCisvLy8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgICAvLy8vCisvLy8vIGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSAgICAgICAvLy8vCisvLy8vIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgICAvLy8vCisvLy8vIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgICAgICAvLy8vCisvLy8vIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSAvLy8vCisvLy8vIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgICAvLy8vCisvLy8vIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBzb3VyY2U7IGlmIG5vdCwgZG93bmxvYWQgaXQgICAvLy8vCisvLy8vIGZyb20gaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2xncGwuc2h0bWwgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2BkZWZhdWx0X25ldHR5cGUgd2lyZQorCitgdGltZXNjYWxlIDEgbnMgLyAxIG5zCisKK2BpbmNsdWRlICJzMjVmbDI1NnMuc3YiCitgaW5jbHVkZSAidXByal9uZXRsaXN0cy52IgorYGluY2x1ZGUgIm10NDhsYzhtOGEyLnYiCitgaW5jbHVkZSAic3BpcmFtLnYiCisKK2xvY2FscGFyYW0gWzMxOjBdICAgICAgWUNSMV9TSU1fRVhJVF9BRERSICAgICAgPSAzMidoMDAwMF8wMEY4OworbG9jYWxwYXJhbSBbMzE6MF0gICAgICBZQ1IxX1NJTV9QUklOVF9BRERSICAgICA9IDMyJ2hGMDAwXzAwMDA7Citsb2NhbHBhcmFtIFszMTowXSAgICAgIFlDUjFfU0lNX0VYVF9JUlFfQUREUiAgID0gMzInaEYwMDBfMDEwMDsKK2xvY2FscGFyYW0gWzMxOjBdICAgICAgWUNSMV9TSU1fU09GVF9JUlFfQUREUiAgPSAzMidoRjAwMF8wMjAwOworCisgYGRlZmluZSBRU1BJTV9HTEJMX0NUUkwgICAgICAgICAgMzInaDEwMDAwMDAwCisgYGRlZmluZSBRU1BJTV9ETUVNX0cwX1JEX0NUUkwgICAgMzInaDEwMDAwMDA0CisgYGRlZmluZSBRU1BJTV9ETUVNX0cwX1dSX0NUUkwgICAgMzInaDEwMDAwMDA4CisgYGRlZmluZSBRU1BJTV9ETUVNX0cxX1JEX0NUUkwgICAgMzInaDEwMDAwMDBDCisgYGRlZmluZSBRU1BJTV9ETUVNX0cxX1dSX0NUUkwgICAgMzInaDEwMDAwMDEwCisKKyBgZGVmaW5lIFFTUElNX0RNRU1fQ1NfQU1BUCAgICAgICAgMzInaDEwMDAwMDE0CisgYGRlZmluZSBRU1BJTV9ETUVNX0NBX0FNQVNLICAgICAgIDMyJ2gxMDAwMDAxOAorCisgYGRlZmluZSBRU1BJTV9JTUVNX0NUUkwxICAgICAgICAgIDMyJ2gxMDAwMDAxQworIGBkZWZpbmUgUVNQSU1fSU1FTV9DVFJMMiAgICAgICAgICAzMidoMTAwMDAwMjAKKyBgZGVmaW5lIFFTUElNX0lNRU1fQUREUiAgICAgICAgICAgMzInaDEwMDAwMDI0CisgYGRlZmluZSBRU1BJTV9JTUVNX1dEQVRBICAgICAgICAgIDMyJ2gxMDAwMDAyOAorIGBkZWZpbmUgUVNQSU1fSU1FTV9SREFUQSAgICAgICAgICAzMidoMTAwMDAwMkMKKyBgZGVmaW5lIFFTUElNX1NQSV9TVEFUVVMgICAgICAgICAgMzInaDEwMDAwMDMwCisKK21vZHVsZSB1c2VyX3Jpc2NfcmVncmVzc190YjsKKwlyZWcgY2xvY2s7CisJcmVnIHdiX3JzdF9pOworCXJlZyBwb3dlcjEsIHBvd2VyMjsKKwlyZWcgcG93ZXIzLCBwb3dlcjQ7CisKKyAgICAgICAgcmVnICAgICAgICB3YmRfZXh0X2N5Y19pOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAgICAgcmVnICAgICAgICB3YmRfZXh0X3N0Yl9pOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAgICAgcmVnIFszMTowXSB3YmRfZXh0X2Fkcl9pOyAgLy8gYWRkcmVzcworICAgICAgICByZWcgICAgICAgIHdiZF9leHRfd2VfaTsgIC8vIHdyaXRlCisgICAgICAgIHJlZyBbMzE6MF0gd2JkX2V4dF9kYXRfaTsgIC8vIGRhdGEgb3V0cHV0CisgICAgICAgIHJlZyBbMzowXSAgd2JkX2V4dF9zZWxfaTsgIC8vIGJ5dGUgZW5hYmxlCisKKyAgICAgICAgd2lyZSBbMzE6MF0gd2JkX2V4dF9kYXRfbzsgIC8vIGRhdGEgaW5wdXQKKyAgICAgICAgd2lyZSAgICAgICAgd2JkX2V4dF9hY2tfbzsgIC8vIGFja25vd2xlZ2VtZW50CisgICAgICAgIHdpcmUgICAgICAgIHdiZF9leHRfZXJyX287ICAvLyBlcnJvcgorCXdpcmUgICAgICAgIGNsazsKKworCS8vIFVzZXIgSS9PCisJd2lyZSBbMzc6MF0gaW9fb2ViOworCXdpcmUgWzM3OjBdIGlvX291dDsKKwl3aXJlIFszNzowXSBpb19pbjsKKworCXdpcmUgZ3BpbzsKKwl3aXJlIFszNzowXSBtcHJqX2lvOworCXdpcmUgWzc6MF0gbXByal9pb18wOworCXJlZyAgICAgICAgIHRlc3RfZmFpbDsKKwlyZWcgWzMxOjBdIHJlYWRfZGF0YTsKKworCisJaW50IHVuc2lnbmVkICAgICAgICAgICAgICAgIGZfcmVzdWx0czsKKyAgICAgICAgaW50IHVuc2lnbmVkICAgICAgICAgICAgICAgIGZfaW5mbzsKKyAgICAgICAgCisgICAgICAgIHN0cmluZyAgICAgICAgICAgICAgICAgICAgICBzX3Jlc3VsdHM7CisgICAgICAgIHN0cmluZyAgICAgICAgICAgICAgICAgICAgICBzX2luZm87CisgICAgICAgIGBpZmRlZiBTSUdOQVRVUkVfT1VUCisgICAgICAgIHN0cmluZyAgICAgICAgICAgICAgICAgICAgICBzX3Rlc3RuYW1lOworICAgICAgICBiaXQgICAgICAgICAgICAgICAgICAgICAgICAgYl9zaW5nbGVfcnVuX2ZsYWc7CisgICAgICAgIGBlbmRpZiAgLy8gIFNJR05BVFVSRV9PVVQKKworCisJYGlmZGVmIFZFUklMQVRPUgorICAgICAgICAgbG9naWMgWzI1NTowXSAgICAgICAgICB0ZXN0X2ZpbGU7CisJIGxvZ2ljIFsyNTU6MF0gICAgICAgICAgdGVzdF9yYW1fZmlsZTsKKyAgICAgICAgIGBlbHNlIC8vIFZFUklMQVRPUgorICAgICAgICAgc3RyaW5nICAgICAgICAgICAgICAgICB0ZXN0X2ZpbGU7CisJIHN0cmluZyAgICAgICAgICAgICAgICAgdGVzdF9yYW1fZmlsZTsKKworICAgICAgICAgYGVuZGlmIC8vIFZFUklMQVRPUgorCisKKyAgICAgICAgZXZlbnQJICAgICAgICAgICAgICAgcmVpbml0X2V2ZW50OworCWJpdCAgICAgICAgICAgICAgICAgICAgdGVzdF9ydW5uaW5nOworICAgICAgICBpbnQgdW5zaWduZWQgICAgICAgICAgIHRlc3RzX3Bhc3NlZDsKKyAgICAgICAgaW50IHVuc2lnbmVkICAgICAgICAgICB0ZXN0c190b3RhbDsKKworCWxvZ2ljICBbNzowXSAgICAgICAgICAgdGVtX21lbVswOjQwOTVdOworCWxvZ2ljICBbMzE6MF0gICAgICAgICAgbWVtX2RhdGE7CisKKworcGFyYW1ldGVyIFBfRlNNX0MgICAgICA9IDQnYjAwMDA7IC8vIENvbW1hbmQgUGhhc2UgT25seQorcGFyYW1ldGVyIFBfRlNNX0NXICAgICA9IDQnYjAwMDE7IC8vIENvbW1hbmQgKyBXcml0ZSBEQVRBIFBoYXNlIE9ubHkKK3BhcmFtZXRlciBQX0ZTTV9DQSAgICAgPSA0J2IwMDEwOyAvLyBDb21tYW5kIC0+IEFkZHJlc3MgUGhhc2UgT25seQorCitwYXJhbWV0ZXIgUF9GU01fQ0FSICAgID0gNCdiMDAxMTsgLy8gQ29tbWFuZCAtPiBBZGRyZXNzIC0+IFJlYWQgRGF0YQorcGFyYW1ldGVyIFBfRlNNX0NBRFIgICA9IDQnYjAxMDA7IC8vIENvbW1hbmQgLT4gQWRkcmVzcyAtPiBEdW1teSAtPiBSZWFkIERhdGEKK3BhcmFtZXRlciBQX0ZTTV9DQU1SICAgPSA0J2IwMTAxOyAvLyBDb21tYW5kIC0+IEFkZHJlc3MgLT4gTW9kZSAtPiBSZWFkIERhdGEKK3BhcmFtZXRlciBQX0ZTTV9DQU1EUiAgPSA0J2IwMTEwOyAvLyBDb21tYW5kIC0+IEFkZHJlc3MgLT4gTW9kZSAtPiBEdW1teSAtPiBSZWFkIERhdGEKKworcGFyYW1ldGVyIFBfRlNNX0NBVyAgICA9IDQnYjAxMTE7IC8vIENvbW1hbmQgLT4gQWRkcmVzcyAtPldyaXRlIERhdGEKK3BhcmFtZXRlciBQX0ZTTV9DQURXICAgPSA0J2IxMDAwOyAvLyBDb21tYW5kIC0+IEFkZHJlc3MgLT4gRFVNTVkgKyBXcml0ZSBEYXRhCitwYXJhbWV0ZXIgUF9GU01fQ0FNVyAgID0gNCdiMTAwMTsgLy8gQ29tbWFuZCAtPiBBZGRyZXNzIC0+IE1PREUgKyBXcml0ZSBEYXRhCisKK3BhcmFtZXRlciBQX0ZTTV9DRFIgICAgPSA0J2IxMDEwOyAvLyBDT01NQU5EIC0+IERVTU1ZIC0+IFJFQUQKK3BhcmFtZXRlciBQX0ZTTV9DRFcgICAgPSA0J2IxMDExOyAvLyBDT01NQU5EIC0+IERVTU1ZIC0+IFdSSVRFCitwYXJhbWV0ZXIgUF9GU01fQ1IgICAgID0gNCdiMTEwMDsgIC8vIENPTU1BTkQgLT4gUkVBRAorCitwYXJhbWV0ZXIgUF9NT0RFX1NXSVRDSF9JRExFICAgICA9IDInYjAwOworcGFyYW1ldGVyIFBfTU9ERV9TV0lUQ0hfQVRfQUREUiAgPSAyJ2IwMTsKK3BhcmFtZXRlciBQX01PREVfU1dJVENIX0FUX0RBVEEgID0gMidiMTA7CisKK3BhcmFtZXRlciBQX1NJTkdMRSA9IDInYjAwOworcGFyYW1ldGVyIFBfRE9VQkxFID0gMidiMDE7CitwYXJhbWV0ZXIgUF9RVUFEICAgPSAyJ2IxMDsKK3BhcmFtZXRlciBQX1FERFIgICA9IDInYjExOworCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkvLyBTaW5jZSB0aGlzIGlzIHJlZ3Jlc3Npb24sIHJlc2V0IHdpbGwgYmUgYXBwbGllZCBtdWx0aXBsZSB0aW1lCisJLy8gUmVzZXQgbG9naWMKKwkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJYml0IFsxOjBdICAgICByc3RfY250OworICAgICAgICBiaXQgICAgICAgICAgIHJzdF9pbml0OworCXdpcmUgICAgICAgICAgcnN0X247CisKKworICAgICAgICBhc3NpZ24gcnN0X24gPSAmcnN0X2NudDsKKwlhc3NpZ24gd2JfcnN0X2kgICAgPSAgIXJzdF9uOworICAgICAgICAKKyAgICAgICAgYWx3YXlzX2ZmIEAocG9zZWRnZSBjbGspIGJlZ2luCisJaWYgKHJzdF9pbml0KSAgIGJlZ2luCisJICAgICByc3RfY250IDw9ICcwOworCSAgICAgLT4gcmVpbml0X2V2ZW50OworCWVuZAorICAgICAgICAgICAgZWxzZSBpZiAofiZyc3RfY250KSByc3RfY250IDw9IHJzdF9jbnQgKyAxJ2IxOworICAgICAgICBlbmQKKworCS8vIEV4dGVybmFsIGNsb2NrIGlzIHVzZWQgYnkgZGVmYXVsdC4gIE1ha2UgdGhpcyBhcnRpZmljaWFsbHkgZmFzdCBmb3IgdGhlCisJLy8gc2ltdWxhdGlvbi4gIE5vcm1hbGx5IHRoaXMgd291bGQgYmUgYSBzbG93IGNsb2NrIGFuZCB0aGUgZGlnaXRhbCBQTEwKKwkvLyB3b3VsZCBiZSB0aGUgZmFzdCBjbG9jay4KKworCWFsd2F5cyAjMTIuNSBjbG9jayA8PSAoY2xvY2sgPT09IDEnYjApOworCisJYXNzaWduIGNsayA9IGNsb2NrOworCisJaW5pdGlhbCBiZWdpbgorCQljbG9jayA9IDA7CisgICAgICAgICAgICAgICAgd2JkX2V4dF9jeWNfaSA9J2gwOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAgICAgICAgICAgICB3YmRfZXh0X3N0Yl9pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICAgICAgICAgICAgICAgIHdiZF9leHRfYWRyX2kgPSdoMDsgIC8vIGFkZHJlc3MKKyAgICAgICAgICAgICAgICB3YmRfZXh0X3dlX2kgID0naDA7ICAvLyB3cml0ZQorICAgICAgICAgICAgICAgIHdiZF9leHRfZGF0X2kgPSdoMDsgIC8vIGRhdGEgb3V0cHV0CisgICAgICAgICAgICAgICAgd2JkX2V4dF9zZWxfaSA9J2gwOyAgLy8gYnl0ZSBlbmFibGUKKwllbmQKKworCWBpZmRlZiBXRkRVTVAKKwkgICBpbml0aWFsIGJlZ2luCisJICAgCSRkdW1wZmlsZSgic2lteC52Y2QiKTsKKwkgICAJJGR1bXB2YXJzKDEsIHVzZXJfcmlzY19yZWdyZXNzX3RiKTsKKwkgICAJJGR1bXB2YXJzKDEsIHVzZXJfcmlzY19yZWdyZXNzX3RiLnVfdG9wKTsKKwkgICAJJGR1bXB2YXJzKDAsIHVzZXJfcmlzY19yZWdyZXNzX3RiLnVfdG9wLnVfcmlzY3ZfdG9wKTsKKwkgICAJJGR1bXB2YXJzKDAsIHVzZXJfcmlzY19yZWdyZXNzX3RiLnVfdG9wLnVfcXNwaV9tYXN0ZXIpOworCSAgIAkkZHVtcHZhcnMoMCwgdXNlcl9yaXNjX3JlZ3Jlc3NfdGIudV90b3AudV9pbnRlcmNvbik7CisJICAgCSRkdW1wdmFycygwLCB1c2VyX3Jpc2NfcmVncmVzc190Yi51X3RvcC51X21iaXN0KTsKKwkgICBlbmQKKyAgICAgICBgZW5kaWYKKworICAgICAgICBpbnRlZ2VyIGk7CisKKyAgICAgICAgYWx3YXlzIEByZWluaXRfZXZlbnQKKwliZWdpbgorCQkvLyBJbml0aWFsaXplIHRoZSBTUEkgbWVtb3J5IHdpdGggaGV4IGNvbnRlbnQKKwkJLy8gV2FpdCBmb3IgcmVzZXQgcmVtb3ZhbAorCQl3YWl0IChyc3RfbiA9PSAxKTsKKworCisJCS8vIEluaXRpYWxpemUgdGhlIFNQSSBtZW1vcnkgd2l0aCBoZXggY29udGVudAorICAgICAgICAgICAgICAgICR3cml0ZSgiXDAzM1swOzM0bS0tLUluaXRpYWxpemluZyB0aGUgU1BJIE1lbW9yeSB3aXRoIEhleGZpbGU6ICVzXDAzM1swbVxuIiwgdGVzdF9maWxlKTsKKyAgICAgICAgICAgICAgICAkcmVhZG1lbWgodGVzdF9maWxlLHVfc3BpX2ZsYXNoXzI1Nm1iLk1lbSk7CisKKwkJLy8gc29tZSBvZiB0aGUgUklTQ1YgdGVzdCBuZWVkIFNSQU0gYXJlYSBmb3Igc3BlY2lmaWMKKwkJLy8gaW5zdHJ1Y3Rpb24gZXhlY3V0aW9uIGxpa2UgZmVuY2UKKwkJJHNmb3JtYXQodGVzdF9yYW1fZmlsZSwgIiVzLnJhbSIsdGVzdF9maWxlKTsKKyAgICAgICAgICAgICAgICAkcmVhZG1lbWgodGVzdF9yYW1fZmlsZSx1X3NyYW0ubWVtb3J5KTsKKworCQkvKioqCisJCS8vIFNwbGl0IHRoZSBUZW1wIG1lbW9yeSBjb250ZW50IHRvIHR3byBzcmFtIGZpbGUKKyAgICAgICAgICAgICAgICAkcmVhZG1lbWgodGVzdF9yYW1fZmlsZSx0ZW1fbWVtKTsKKwkJLy8gTG9hZCB0aGUgU1JBTTAvU1JBTTEgd2l0aCAyS0IgZGF0YQorICAgICAgICAgICAgICAgICR3cml0ZSgiXDAzM1swOzM0bS0tLUluaXRpYWxpemluZyB0aGUgdV9zcmFtMF8ya2IgTWVtb3J5IHdpdGggSGV4ZmlsZTogJXNcMDMzWzBtXG4iLHRlc3RfcmFtX2ZpbGUpOworCQkvLyBJbml0aWFsaXppbmcgdGhlIFNSQU0KKwkJZm9yKGkgPSAwIDsgaSA8IDIwNDg7IGkgPSBpICs0KSBiZWdpbgorCQkgICAgbWVtX2RhdGEgPSB7dGVtX21lbVtpKzNdLHRlbV9tZW1baSsyXSx0ZW1fbWVtW2krMV0sdGVtX21lbVtpKzBdfTsKKwkJICAgIC8vJGRpc3BsYXkoIkZpbGxpbmcgTWVtIExvY2F0aW9uIDogJXggd2l0aCBkYXRhIDogJXgiLGksIG1lbV9kYXRhKTsKKwkJICAgIHVfdG9wLnVfc3JhbTBfMmtiLm1lbVtpLzRdID0gbWVtX2RhdGE7CisJCWVuZAorCQlmb3IoaSA9IDIwNDggOyBpIDwgNDA5NjsgaSA9IGkgKzQpIGJlZ2luCisJCSAgbWVtX2RhdGEgPSB7dGVtX21lbVtpKzNdLHRlbV9tZW1baSsyXSx0ZW1fbWVtW2krMV0sdGVtX21lbVtpKzBdfTsKKwkJICAvLyRkaXNwbGF5KCJGaWxsaW5nIE1lbSBMb2NhdGlvbiA6ICV4IHdpdGggZGF0YSA6ICV4IixpLCBtZW1fZGF0YSk7CisJCSAgdV90b3AudV9zcmFtMV8ya2IubWVtWygyMDQ4LWkpLzRdID0gbWVtX2RhdGE7CisJCWVuZAorCQkqKiovCisKKwkJLy9mb3IoaSA9MzInaDAwOyBpIDwgMzInaDEwMDsgaSA9IGkrMSkKKyAgICAgICAgICAgICAgICAvLyAgICAkZGlzcGxheSgiTG9jYXRpb246ICV4LCBEYXRhOiAleCIsIGksIHVfdG9wLnVfdHNyYW0wXzJrYi5tZW1baV0pOworCisKKwkJIzIwMDsgCisJICAgICAgICByZXBlYXQgKDEwKSBAKHBvc2VkZ2UgY2xvY2spOworCQkkZGlzcGxheSgiTW9uaXRvcjogQ29yZSByZXNldCByZW1vdmFsIik7CisKKwkJLy8gUmVtb3ZlIFdiIFJlc2V0CisJCXdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwMCwnaDEpOworCSAgICAgICAgcmVwZWF0ICgyKSBAKHBvc2VkZ2UgY2xvY2spOworCQkjMTsKKwkJLy8tLS0tLS0tLS0tLS0gZnVzZV9taGFydGlkPSAweDAwCisgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzAwMl8wMDA0LCdoMCk7CisKKworCSAgICAgICAgcmVwZWF0ICgyKSBAKHBvc2VkZ2UgY2xvY2spOworCQkjMTsKKwkJLy8gUmVtb3ZlIFdCIGFuZCBTUEkgUmVzZXQsIEtlZXAgU0RBUk0gYW5kIENPUkUgdW5kZXIgUmVzZXQKKyAgICAgICAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDAsJ2g1KTsKKworCQkvLyBDUyMyIFN3aXRjaCB0byBRU1BJIE1vZGUKKyAgICAgICAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDQsJ2gxMCk7IC8vIENoYW5nZSB0aGUgQmFuayBTZWwgMTAKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0NUUkwxLHsxNidoMCwxJ2IwLDEnYjAsNCdiMDAwMCxQX01PREVfU1dJVENIX0lETEUsUF9TSU5HTEUsUF9TSU5HTEUsNCdiMDEwMH0pOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQ1RSTDIsezgnaDAsMidiMDAsMidiMDAsUF9GU01fQyw4J2gwMCw4J2gzOH0pOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDApOworCisJCS8vIEVuYWJsZSB0aGUgRENBQ0hFIFJlbWFwIHRvIFNSQU0gcmVnaW9uCisJCS8vd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDBDLHs0J2IwMDAwLDQnYjExMTEsIDI0J2gwfSk7CisJCS8vCisJCS8vIFJlbW92ZSBhbGwgdGhlIHJlc2V0CisgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDAwLCdoOEYpOworCisJZW5kCisKK3dpcmUgVVNFUl9WREQxVjggPSAxJ2IxOword2lyZSBWU1MgPSAxJ2IwOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ1biB0ZXN0cworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2BpbmNsdWRlICJyaXNjdl9ydW50ZXN0cy5zdiIKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIENvcmUgaW5zdGFuY2UKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit1c2VyX3Byb2plY3Rfd3JhcHBlciB1X3RvcCgKK2BpZmRlZiBVU0VfUE9XRVJfUElOUworICAgIC52Y2NkMShVU0VSX1ZERDFWOCksCS8vIFVzZXIgYXJlYSAxIDEuOFYgc3VwcGx5CisgICAgLnZzc2QxKFZTUyksCS8vIFVzZXIgYXJlYSAxIGRpZ2l0YWwgZ3JvdW5kCitgZW5kaWYKKyAgICAud2JfY2xrX2kgICAgICAgIChjbG9jayksICAvLyBTeXN0ZW0gY2xvY2sKKyAgICAudXNlcl9jbG9jazIgICAgICgxJ2IxKSwgIC8vIFJlYWwtdGltZSBjbG9jaworICAgIC53Yl9yc3RfaSAgICAgICAgKHdiX3JzdF9pKSwgIC8vIFJlZ3VsYXIgUmVzZXQgc2lnbmFsCisKKyAgICAud2JzX2N5Y19pICAgKHdiZF9leHRfY3ljX2kpLCAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAud2JzX3N0Yl9pICAgKHdiZF9leHRfc3RiX2kpLCAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAud2JzX2Fkcl9pICAgKHdiZF9leHRfYWRyX2kpLCAgLy8gYWRkcmVzcworICAgIC53YnNfd2VfaSAgICAod2JkX2V4dF93ZV9pKSwgIC8vIHdyaXRlCisgICAgLndic19kYXRfaSAgICh3YmRfZXh0X2RhdF9pKSwgIC8vIGRhdGEgb3V0cHV0CisgICAgLndic19zZWxfaSAgICh3YmRfZXh0X3NlbF9pKSwgIC8vIGJ5dGUgZW5hYmxlCisKKyAgICAud2JzX2RhdF9vICAgKHdiZF9leHRfZGF0X28pLCAgLy8gZGF0YSBpbnB1dAorICAgIC53YnNfYWNrX28gICAod2JkX2V4dF9hY2tfbyksICAvLyBhY2tub3dsZWdlbWVudAorCisgCisgICAgLy8gTG9naWMgQW5hbHl6ZXIgU2lnbmFscworICAgIC5sYV9kYXRhX2luICAgICAgKCcxKSAsCisgICAgLmxhX2RhdGFfb3V0ICAgICAoKSwKKyAgICAubGFfb2VuYiAgICAgICAgICgnMCksCisgCisKKyAgICAvLyBJT3MKKyAgICAuaW9faW4gICAgICAgICAgKGlvX2luKSAgLAorICAgIC5pb19vdXQgICAgICAgICAoaW9fb3V0KSAsCisgICAgLmlvX29lYiAgICAgICAgIChpb19vZWIpICwKKworICAgIC51c2VyX2lycSAgICAgICAoKSAKKworKTsKKworCitsb2dpYyBbMzE6MF0gcmlzY3ZfZG1lbV9yZXFfY250OyAvLyBjbnQgZG1lbSByZXEKK2luaXRpYWwgCitiZWdpbgorICAgcmlzY3ZfZG1lbV9yZXFfY250ID0gMDsKK2VuZAorCithbHdheXMgQChwb3NlZGdlIHVfdG9wLndiZF9yaXNjdl9kbWVtX3N0Yl9pKQorYmVnaW4KKyAgICByaXNjdl9kbWVtX3JlcV9jbnQgPSByaXNjdl9kbWVtX3JlcV9jbnQrMTsKKyAgICBpZigocmlzY3ZfZG1lbV9yZXFfY250ICUyMDApID09IDApCisJJGRpc3BsYXkoIlNUQVRVUzogVG90YWwgRG1lbSBSZXEgQ250OiAlZCAiLHJpc2N2X2RtZW1fcmVxX2NudCk7CitlbmQKKworCitgaWZuZGVmIEdMIC8vIERyaXZlIFBvd2VyIGZvciBIb2xkIEZpeCBCdWYKKyAgICAvLyBBbGwgc3RhbmRhcmQgY2VsbCBuZWVkIHBvd2VyIGhvb2stdXAgZm9yIGZ1bmN0aW9uYWxpdHkgd29yaworICAgIGluaXRpYWwgYmVnaW4KKyAgICBlbmQKK2BlbmRpZiAgICAKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICBJbnRlZ3JhdGUgdGhlIFNlcmlhbCBmbGFzaCB3aXRoIHF1cmQgc3VwcG9ydCB0bworLy8gIHVzZXIgY29yZSB1c2luZyB0aGUgZ3BpbyBwYWRzCisvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICB3aXJlIGZsYXNoX2NsayA9IGlvX291dFsyNF07CisgICB3aXJlIGZsYXNoX2NzYiA9IGlvX291dFsyOF07CisgICAvLyBDcmVhdGluZyBQYWQgRGVsYXkKKyAgIHdpcmUgIzEgaW9fb2ViXzI5ID0gaW9fb2ViWzI5XTsKKyAgIHdpcmUgIzEgaW9fb2ViXzMwID0gaW9fb2ViWzMwXTsKKyAgIHdpcmUgIzEgaW9fb2ViXzMxID0gaW9fb2ViWzMxXTsKKyAgIHdpcmUgIzEgaW9fb2ViXzMyID0gaW9fb2ViWzMyXTsKKyAgIHRyaSAgIzEgZmxhc2hfaW8wID0gKGlvX29lYl8yOT09IDEnYjApID8gaW9fb3V0WzI5XSA6IDEnYno7CisgICB0cmkgICMxIGZsYXNoX2lvMSA9IChpb19vZWJfMzA9PSAxJ2IwKSA/IGlvX291dFszMF0gOiAxJ2J6OworICAgdHJpICAjMSBmbGFzaF9pbzIgPSAoaW9fb2ViXzMxPT0gMSdiMCkgPyBpb19vdXRbMzFdIDogMSdiejsKKyAgIHRyaSAgIzEgZmxhc2hfaW8zID0gKGlvX29lYl8zMj09IDEnYjApID8gaW9fb3V0WzMyXSA6IDEnYno7CisKKyAgIGFzc2lnbiBpb19pblsyOV0gPSBmbGFzaF9pbzA7CisgICBhc3NpZ24gaW9faW5bMzBdID0gZmxhc2hfaW8xOworICAgYXNzaWduIGlvX2luWzMxXSA9IGZsYXNoX2lvMjsKKyAgIGFzc2lnbiBpb19pblszMl0gPSBmbGFzaF9pbzM7CisKKworICAgLy8gUXVhcmQgZmxhc2gKKyAgICAgczI1ZmwyNTZzICMoLm1lbV9maWxlX25hbWUoImFkZC5oZXgiKSwKKwkgICAgICAgICAub3RwX2ZpbGVfbmFtZSgibm9uZSIpLAorICAgICAgICAgICAgICAgICAuVGltaW5nTW9kZWwoIlMyNUZMNTEyU0FHTUZJMDEwX0ZfMzBwRiIpKSAKKwkJIHVfc3BpX2ZsYXNoXzI1Nm1iICgKKyAgICAgICAgICAgLy8gRGF0YSBJbnB1dHMvT3V0cHV0cworICAgICAgIC5TSSAgICAgIChmbGFzaF9pbzApLAorICAgICAgIC5TTyAgICAgIChmbGFzaF9pbzEpLAorICAgICAgIC8vIENvbnRyb2xzCisgICAgICAgLlNDSyAgICAgKGZsYXNoX2NsayksCisgICAgICAgLkNTTmVnICAgKGZsYXNoX2NzYiksCisgICAgICAgLldQTmVnICAgKGZsYXNoX2lvMiksCisgICAgICAgLkhPTEROZWcgKGZsYXNoX2lvMyksCisgICAgICAgLlJTVE5lZyAgKCF3Yl9yc3RfaSkKKworICAgICAgICk7CisKKworICAgd2lyZSBzcGlyYW1fY3NiID0gaW9fb3V0WzI2XTsKKworICAgc3BpcmFtICMoLm1lbV9maWxlX25hbWUoIm5vbmUiKSkKKwl1X3NyYW0gKAorICAgICAgICAgLy8gRGF0YSBJbnB1dHMvT3V0cHV0cworICAgICAgICAgICAuaW8wICAgICAoZmxhc2hfaW8wKSwKKyAgICAgICAgICAgLmlvMSAgICAgKGZsYXNoX2lvMSksCisgICAgICAgICAgIC8vIENvbnRyb2xzCisgICAgICAgICAgIC5jbGsgICAgKGZsYXNoX2NsayksCisgICAgICAgICAgIC5jc2IgICAgKHNwaXJhbV9jc2IpLAorICAgICAgICAgICAuaW8yICAgIChmbGFzaF9pbzIpLAorICAgICAgICAgICAuaW8zICAgIChmbGFzaF9pbzMpCisgICAgKTsKKworCisKK3Rhc2sgd2JfdXNlcl9jb3JlX3dyaXRlOworaW5wdXQgWzMxOjBdIGFkZHJlc3M7CitpbnB1dCBbMzE6MF0gZGF0YTsKK2JlZ2luCisgIHJlcGVhdCAoMSkgQChwb3NlZGdlIGNsb2NrKTsKKyAgIzE7CisgIHdiZF9leHRfYWRyX2kgPWFkZHJlc3M7ICAvLyBhZGRyZXNzCisgIHdiZF9leHRfd2VfaSAgPSdoMTsgIC8vIHdyaXRlCisgIHdiZF9leHRfZGF0X2kgPWRhdGE7ICAvLyBkYXRhIG91dHB1dAorICB3YmRfZXh0X3NlbF9pID0naEY7ICAvLyBieXRlIGVuYWJsZQorICB3YmRfZXh0X2N5Y19pID0naDE7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X3N0Yl9pID0naDE7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YWl0KHdiZF9leHRfYWNrX28gPT0gMSk7CisgIHJlcGVhdCAoMSkgQChwb3NlZGdlIGNsb2NrKTsKKyAgIzE7CisgIHdiZF9leHRfY3ljX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfc3RiX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfYWRyX2kgPSdoMDsgIC8vIGFkZHJlc3MKKyAgd2JkX2V4dF93ZV9pICA9J2gwOyAgLy8gd3JpdGUKKyAgd2JkX2V4dF9kYXRfaSA9J2gwOyAgLy8gZGF0YSBvdXRwdXQKKyAgd2JkX2V4dF9zZWxfaSA9J2gwOyAgLy8gYnl0ZSBlbmFibGUKKyAgJGRpc3BsYXkoIkRFQlVHIFdCIFVTRVIgQUNDRVNTIFdSSVRFIEFkZHJlc3MgOiAleCwgRGF0YSA6ICV4IixhZGRyZXNzLGRhdGEpOworICByZXBlYXQgKDIpIEAocG9zZWRnZSBjbG9jayk7CitlbmQKK2VuZHRhc2sKKwordGFzayAgd2JfdXNlcl9jb3JlX3JlYWQ7CitpbnB1dCBbMzE6MF0gYWRkcmVzczsKK291dHB1dCBbMzE6MF0gZGF0YTsKK3JlZyAgICBbMzE6MF0gZGF0YTsKK2JlZ2luCisgIHJlcGVhdCAoMSkgQChwb3NlZGdlIGNsb2NrKTsKKyAgIzE7CisgIHdiZF9leHRfYWRyX2kgPWFkZHJlc3M7ICAvLyBhZGRyZXNzCisgIHdiZF9leHRfd2VfaSAgPSdoMDsgIC8vIHdyaXRlCisgIHdiZF9leHRfZGF0X2kgPScwOyAgLy8gZGF0YSBvdXRwdXQKKyAgd2JkX2V4dF9zZWxfaSA9J2hGOyAgLy8gYnl0ZSBlbmFibGUKKyAgd2JkX2V4dF9jeWNfaSA9J2gxOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2JkX2V4dF9zdGJfaSA9J2gxOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2FpdCh3YmRfZXh0X2Fja19vID09IDEpOworICBkYXRhICA9IHdiZF9leHRfZGF0X287ICAKKyAgcmVwZWF0ICgxKSBAKHBvc2VkZ2UgY2xvY2spOworICAjMTsKKyAgd2JkX2V4dF9jeWNfaSA9J2gwOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2JkX2V4dF9zdGJfaSA9J2gwOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2JkX2V4dF9hZHJfaSA9J2gwOyAgLy8gYWRkcmVzcworICB3YmRfZXh0X3dlX2kgID0naDA7ICAvLyB3cml0ZQorICB3YmRfZXh0X2RhdF9pID0naDA7ICAvLyBkYXRhIG91dHB1dAorICB3YmRfZXh0X3NlbF9pID0naDA7ICAvLyBieXRlIGVuYWJsZQorICAkZGlzcGxheSgiREVCVUcgV0IgVVNFUiBBQ0NFU1MgUkVBRCBBZGRyZXNzIDogJXgsIERhdGEgOiAleCIsYWRkcmVzcyxkYXRhKTsKKyAgcmVwZWF0ICgyKSBAKHBvc2VkZ2UgY2xvY2spOworZW5kCitlbmR0YXNrCisKK2BpZmRlZiBHTAorCit3aXJlICAgICAgICB3YmRfc3BpX3N0Yl9pICAgPSB1X3RvcC51X3NwaV9tYXN0ZXIud2JkX3N0Yl9pOword2lyZSAgICAgICAgd2JkX3NwaV9hY2tfbyAgID0gdV90b3AudV9zcGlfbWFzdGVyLndiZF9hY2tfbzsKK3dpcmUgICAgICAgIHdiZF9zcGlfd2VfaSAgICA9IHVfdG9wLnVfc3BpX21hc3Rlci53YmRfd2VfaTsKK3dpcmUgWzMxOjBdIHdiZF9zcGlfYWRyX2kgICA9IHVfdG9wLnVfc3BpX21hc3Rlci53YmRfYWRyX2k7Cit3aXJlIFszMTowXSB3YmRfc3BpX2RhdF9pICAgPSB1X3RvcC51X3NwaV9tYXN0ZXIud2JkX2RhdF9pOword2lyZSBbMzE6MF0gd2JkX3NwaV9kYXRfbyAgID0gdV90b3AudV9zcGlfbWFzdGVyLndiZF9kYXRfbzsKK3dpcmUgWzM6MF0gIHdiZF9zcGlfc2VsX2kgICA9IHVfdG9wLnVfc3BpX21hc3Rlci53YmRfc2VsX2k7CisKK3dpcmUgICAgICAgIHdiZF9zZHJhbV9zdGJfaSA9IHVfdG9wLnVfc2RyYW1fY3RybC53Yl9zdGJfaTsKK3dpcmUgICAgICAgIHdiZF9zZHJhbV9hY2tfbyA9IHVfdG9wLnVfc2RyYW1fY3RybC53Yl9hY2tfbzsKK3dpcmUgICAgICAgIHdiZF9zZHJhbV93ZV9pICA9IHVfdG9wLnVfc2RyYW1fY3RybC53Yl93ZV9pOword2lyZSBbMzE6MF0gd2JkX3NkcmFtX2Fkcl9pID0gdV90b3AudV9zZHJhbV9jdHJsLndiX2FkZHJfaTsKK3dpcmUgWzMxOjBdIHdiZF9zZHJhbV9kYXRfaSA9IHVfdG9wLnVfc2RyYW1fY3RybC53Yl9kYXRfaTsKK3dpcmUgWzMxOjBdIHdiZF9zZHJhbV9kYXRfbyA9IHVfdG9wLnVfc2RyYW1fY3RybC53Yl9kYXRfbzsKK3dpcmUgWzM6MF0gIHdiZF9zZHJhbV9zZWxfaSA9IHVfdG9wLnVfc2RyYW1fY3RybC53Yl9zZWxfaTsKKword2lyZSAgICAgICAgd2JkX3VhcnRfc3RiX2kgID0gdV90b3AudV91YXJ0X2kyY191c2IucmVnX2NzOword2lyZSAgICAgICAgd2JkX3VhcnRfYWNrX28gID0gdV90b3AudV91YXJ0X2kyY191c2IucmVnX2FjazsKK3dpcmUgICAgICAgIHdiZF91YXJ0X3dlX2kgICA9IHVfdG9wLnVfdWFydF9pMmNfdXNiLnJlZ193cjsKK3dpcmUgWzc6MF0gIHdiZF91YXJ0X2Fkcl9pICA9IHVfdG9wLnVfdWFydF9pMmNfdXNiLnJlZ19hZGRyOword2lyZSBbNzowXSAgd2JkX3VhcnRfZGF0X2kgID0gdV90b3AudV91YXJ0X2kyY191c2IucmVnX3dkYXRhOword2lyZSBbNzowXSAgd2JkX3VhcnRfZGF0X28gID0gdV90b3AudV91YXJ0X2kyY191c2IucmVnX3JkYXRhOword2lyZSAgICAgICAgd2JkX3VhcnRfc2VsX2kgID0gdV90b3AudV91YXJ0X2kyY191c2IucmVnX2JlOworCitgZW5kaWYKKworLyoqCitgaWZkZWYgR0wKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJJU0MgSU1FTSBhbWQgRE1FTSBNb25pdG9yaW5nIFRBU0sKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYGRlZmluZSBSSVNDX0NPUkUgIHVzZXJfdWFydF90Yi51X3RvcC51X2NvcmUudV9yaXNjdl90b3AKKworYWx3YXlzQChwb3NlZGdlIGBSSVNDX0NPUkUud2JfY2xrKSBiZWdpbgorICAgIGlmKGBSSVNDX0NPUkUud2JkX2ltZW1fYWNrX2kpCisgICAgICAgICAgJGRpc3BsYXkoIlJJU0NWLURFQlVHID0+IElNRU0gQUREUkVTUzogJXggUmVhZCBEYXRhIDogJXgiLCBgUklTQ19DT1JFLndiZF9pbWVtX2Fkcl9vLGBSSVNDX0NPUkUud2JkX2ltZW1fZGF0X2kpOworICAgIGlmKGBSSVNDX0NPUkUud2JkX2RtZW1fYWNrX2kgJiYgYFJJU0NfQ09SRS53YmRfZG1lbV93ZV9vKQorICAgICAgICAgICRkaXNwbGF5KCJSSVNDVi1ERUJVRyA9PiBETUVNIEFERFJFU1M6ICV4IFdyaXRlIERhdGE6ICV4IFJlc29uc2U6ICV4IiwgYFJJU0NfQ09SRS53YmRfZG1lbV9hZHJfbyxgUklTQ19DT1JFLndiZF9kbWVtX2RhdF9vKTsKKyAgICBpZihgUklTQ19DT1JFLndiZF9kbWVtX2Fja19pICYmICFgUklTQ19DT1JFLndiZF9kbWVtX3dlX28pCisgICAgICAgICAgJGRpc3BsYXkoIlJJU0NWLURFQlVHID0+IERNRU0gQUREUkVTUzogJXggUkVBRCBEYXRhIDogJXggUmVzb25zZTogJXgiLCBgUklTQ19DT1JFLndiZF9kbWVtX2Fkcl9vLGBSSVNDX0NPUkUud2JkX2RtZW1fZGF0X2kpOworZW5kCisKK2BlbmRpZgorKiovCitlbmRtb2R1bGUKK2BkZWZhdWx0X25ldHR5cGUgd2lyZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi91YXJ0X21hc3Rlci9NYWtlZmlsZSBiL3Zlcmlsb2cvZHYvdWFydF9tYXN0ZXIvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM2Zjk2MwotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvdWFydF9tYXN0ZXIvTWFrZWZpbGUKQEAgLTAsMCArMSwxMjAgQEAKKyMgU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMCBFZmFibGVzcyBDb3Jwb3JhdGlvbgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKworIyMgUERLIAorUERLX1BBVEggPSAkKFBES19ST09UKS9za3kxMzBBCisKKyMjIENhcmF2ZWwgUG9pbnRlcnMKK0NBUkFWRUxfUk9PVCA/PSAuLi8uLi8uLi9jYXJhdmVsCitDQVJBVkVMX1BBVEggPz0gJChDQVJBVkVMX1JPT1QpCitDQVJBVkVMX0ZJUk1XQVJFX1BBVEggPSAkKENBUkFWRUxfUEFUSCkvdmVyaWxvZy9kdi9jYXJhdmVsCitDQVJBVkVMX1ZFUklMT0dfUEFUSCAgPSAkKENBUkFWRUxfUEFUSCkvdmVyaWxvZworQ0FSQVZFTF9SVExfUEFUSCA9ICQoQ0FSQVZFTF9WRVJJTE9HX1BBVEgpL3J0bAorQ0FSQVZFTF9CRUhBVklPVVJBTF9NT0RFTFMgPSAkKENBUkFWRUxfVkVSSUxPR19QQVRIKS9kdi9jYXJhdmVsCisKKyMjIFVzZXIgUHJvamVjdCBQb2ludGVycworVVBSSl9WRVJJTE9HX1BBVEggPz0gLi4vLi4vLi4vdmVyaWxvZworVVBSSl9SVExfUEFUSCA9ICQoVVBSSl9WRVJJTE9HX1BBVEgpL3J0bAorVVBSSl9HTF9QQVRIID0gJChVUFJKX1ZFUklMT0dfUEFUSCkvZ2wKK1VQUkpfQkVIQVZJT1VSQUxfTU9ERUxTID0gLi4vbW9kZWwKK1VQUkpfQkVIQVZJT1VSQUxfQUdFTlRTID0gLi4vYWdlbnRzCitVUFJKX0lOQ0xVREVfUEFUSDEgPSAkKFVQUkpfUlRMX1BBVEgpL3lpZml2ZS95Y3IxYy9zcmMvaW5jbHVkZXMKK1VQUkpfSU5DTFVERV9QQVRIMiA9ICQoVVBSSl9SVExfUEFUSCkvc2RyYW1fY3RybC9zcmMvZGVmcworVVBSSl9JTkNMVURFX1BBVEgzID0gJChVUFJKX1JUTF9QQVRIKS9pMmNtL3NyYy9pbmNsdWRlcworVVBSSl9JTkNMVURFX1BBVEg0ID0gJChVUFJKX1JUTF9QQVRIKS91c2IxX2hvc3Qvc3JjL2luY2x1ZGVzCitVUFJKX0lOQ0xVREVfUEFUSDUgPSAkKFVQUkpfUlRMX1BBVEgpL21iaXN0L2luY2x1ZGUKKyMjIFJJU0NWIEdDQyAKK0dDQ19QQVRIPz0vZWYvYXBwcy9iaW4KK0dDQ19QUkVGSVg/PXJpc2N2MzItdW5rbm93bi1lbGYKK0dDQzY0X1BSRUZJWD89cmlzY3Y2NC11bmtub3duLWVsZgorCisjIyBTaW11bGF0aW9uIG1vZGU6IFJUTC9HTAorU0lNX0RFRklORVMgPSAtREZVTkNUSU9OQUwgLURTSU0KK1NJTT89UlRMCitEVU1QPz1PRkYKKworLlNVRkZJWEVTOgorCitQQVRURVJOID0gdWFydF9tYXN0ZXIKKworYWxsOiAgJHtQQVRURVJOOj0udmNkfQorCitoZXg6ICAke1BBVFRFUk46PS5oZXh9CisKK3Z2cDogICR7UEFUVEVSTjo9LnZ2cH0KKworJS52dnA6ICVfdGIudiAlLmhleAoraWZlcSAoJChTSU0pLFJUTCkKKyAgIGlmZXEgKCQoRFVNUCksT0ZGKQorCWl2ZXJpbG9nIC1nMjAwNS1zdiAkKFNJTV9ERUZJTkVTKSAtSSAkKFBES19QQVRIKSBcCisJLUkgJChDQVJBVkVMX0JFSEFWSU9VUkFMX01PREVMUykgLUkgJChDQVJBVkVMX1JUTF9QQVRIKSBcCisJLUkgJChVUFJKX0JFSEFWSU9VUkFMX01PREVMUykgICAgLUkgJChVUFJKX1JUTF9QQVRIKSAtSSAkKFVQUkpfVkVSSUxPR19QQVRIKSBcCisJLUkgJChVUFJKX0JFSEFWSU9VUkFMX0FHRU5UUykgICAgXAorCS1JICQoVVBSSl9JTkNMVURFX1BBVEgxKSAgICAtSSAkKFVQUkpfSU5DTFVERV9QQVRIMikgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDMpIFwKKwktSSAkKFVQUkpfSU5DTFVERV9QQVRINCkgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDUpIFwKKwkkPCAtbyAkQCAKKyAgICBlbHNlICAKKwlpdmVyaWxvZyAtZzIwMDUtc3YgLURXRkRVTVAgJChTSU1fREVGSU5FUykgLUkgJChQREtfUEFUSCkgXAorCS1JICQoQ0FSQVZFTF9CRUhBVklPVVJBTF9NT0RFTFMpIC1JICQoQ0FSQVZFTF9SVExfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9BR0VOVFMpICAgIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfTU9ERUxTKSAgICAtSSAkKFVQUkpfUlRMX1BBVEgpIC1JICQoVVBSSl9WRVJJTE9HX1BBVEgpIFwKKwktSSAkKFVQUkpfSU5DTFVERV9QQVRIMSkgICAgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDIpIC1JICQoVVBSSl9JTkNMVURFX1BBVEgzKSBcCisJLUkgJChVUFJKX0lOQ0xVREVfUEFUSDQpIC1JICQoVVBSSl9JTkNMVURFX1BBVEg1KSBcCisJJDwgLW8gJEAgCisgICBlbmRpZgorZWxzZSAgCisJaXZlcmlsb2cgJChTSU1fREVGSU5FUykgLURHTCAtSSAkKFBES19QQVRIKSBcCisJLUkgJChVUFJKX0JFSEFWSU9VUkFMX0FHRU5UUykgICAgXAorCS1JICQoQ0FSQVZFTF9CRUhBVklPVVJBTF9NT0RFTFMpIC1JICQoQ0FSQVZFTF9SVExfUEFUSCkgLUkgJChDQVJBVkVMX1ZFUklMT0dfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9NT0RFTFMpIC1JJChVUFJKX0dMX1BBVEgpICAtSSQoVVBSSl9SVExfUEFUSCkgIC1JICQoVVBSSl9WRVJJTE9HX1BBVEgpIFwKKwkkPCAtbyAkQCAKK2VuZGlmCisKKyUudmNkOiAlLnZ2cAorCXZ2cCAkPAorCislLmVsZjogJS5jICQoQ0FSQVZFTF9GSVJNV0FSRV9QQVRIKS9zZWN0aW9ucy5sZHMgJChDQVJBVkVMX0ZJUk1XQVJFX1BBVEgpL3N0YXJ0LnMgY2hlY2stZW52CisJJHtHQ0M2NF9QUkVGSVh9LWdjYyAtSSAkKENBUkFWRUxfUEFUSCkgLW1hcmNoPXJ2MzJpbWMgLW1hYmk9aWxwMzIgLVdsLC1Cc3RhdGljLC1ULCQoQ0FSQVZFTF9GSVJNV0FSRV9QQVRIKS9zZWN0aW9ucy5sZHMsLS1zdHJpcC1kZWJ1ZyAtZmZyZWVzdGFuZGluZyAtbm9zdGRsaWIgLW8gJEAgJChDQVJBVkVMX0ZJUk1XQVJFX1BBVEgpL3N0YXJ0LnMgJDwKKworJS5oZXg6ICUuZWxmCisJJHtHQ0M2NF9QUkVGSVh9LW9iamNvcHkgLU8gdmVyaWxvZyAkPCAkQCAKKwkjIHRvIGZpeCBmbGFzaCBiYXNlIGFkZHJlc3MKKwlzZWQgLWkgJ3MvQDEwMDAwMDAwL0AwMDAwMDAwMC9nJyAkQAorCislLmJpbjogJS5lbGYKKwkke0dDQzY0X1BSRUZJWH0tb2JqY29weSAtTyBiaW5hcnkgJDwgL2Rldi9zdGRvdXQgfCB0YWlsIC1jICsxMDQ4NTc3ID4gJEAKKworY2hlY2stZW52OgoraWZuZGVmIFBES19ST09UCisJJChlcnJvciBQREtfUk9PVCBpcyB1bmRlZmluZWQsIHBsZWFzZSBleHBvcnQgaXQgYmVmb3JlIHJ1bm5pbmcgbWFrZSkKK2VuZGlmCitpZmVxICgsJCh3aWxkY2FyZCAkKFBES19ST09UKS9za3kxMzBBKSkKKwkkKGVycm9yICQoUERLX1JPT1QpL3NreTEzMEEgbm90IGZvdW5kLCBwbGVhc2UgaW5zdGFsbCBwZGsgYmVmb3JlIHJ1bm5pbmcgbWFrZSkKK2VuZGlmCisjaWZlcSAoLCQod2lsZGNhcmQgJChHQ0M2NF9QUkVGSVgpLWdjYyApKQorIwkkKGVycm9yICQoR0NDNjRfUFJFRklYKS1nY2MgaXMgbm90IGZvdW5kLCBwbGVhc2UgZXhwb3J0IEdDQ19QQVRIIGFuZCBHQ0NfUFJFRklYIGJlZm9yZSBydW5uaW5nIG1ha2UpCisjZW5kaWYKKyMgY2hlY2sgZm9yIGVmYWJsZXNzIHN0eWxlIGluc3RhbGxhdGlvbgoraWZlcSAoLCQod2lsZGNhcmQgJChQREtfUk9PVCkvc2t5MTMwQS9saWJzLnJlZi8qL3Zlcmlsb2cpKQorU0lNX0RFRklORVMgOj0gJHtTSU1fREVGSU5FU30gLURFRl9TVFlMRQorZW5kaWYKKworIyAtLS0tIENsZWFuIC0tLS0KKworY2xlYW46CisJcm0gLWYgKi5lbGYgKi5oZXggKi5iaW4gKi52dnAgKi52Y2QgKi5sb2cKKworLlBIT05ZOiBjbGVhbiBoZXggYWxsCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3VhcnRfbWFzdGVyL3J1bl92ZXJpbG9nIGIvdmVyaWxvZy9kdi91YXJ0X21hc3Rlci9ydW5fdmVyaWxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZmZlZDNjCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi91YXJ0X21hc3Rlci9ydW5fdmVyaWxvZwpAQCAtMCwwICsxLDIwIEBACisjIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworIyAvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxLCBEaW5lc2ggQW5uYXl5YQorIyAvLyAKKyMgLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIC8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjIC8vCisjIC8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjIC8vCisjIC8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIC8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisjIC8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorIyAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisjaXZlcmlsb2cgLWcyMDA1LXN2IC1ERlVOQ1RJT05BTCAtRFNJTSAtREdMIC1JIC9ob21lL2RpbmVzaGEvd29ya2FyZWEvcGRrL3NreTEzMEEgLUkgL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL2NhcmF2ZWwvdmVyaWxvZy9kdi9jYXJhdmVsIC1JIC9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9jYXJhdmVsL3Zlcmlsb2cvcnRsIC1JIC9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9jYXJhdmVsL3Zlcmlsb2cgLUkgLi4vIC1JLi4vLi4vLi4vdmVyaWxvZy9ydGwgLUkuLi8uLi8uLi92ZXJpbG9nL2dsICAtSSAuLi8uLi8uLi92ZXJpbG9nIHdiX3BvcnRfdGIudiAtbyB3Yl9wb3J0LnZ2cAoraXZlcmlsb2cgLWcyMDA1LXN2IC1EV0ZEVU1QIC1ERlVOQ1RJT05BTCAtRFNJTSAtREdMIC1JIC9ob21lL2RpbmVzaGEvd29ya2FyZWEvcGRrL3NreTEzMEEgLUkgL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQveWlmaXZlX3IwL2NhcmF2ZWwvdmVyaWxvZy9kdi9jYXJhdmVsIC1JIC9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9jYXJhdmVsL3Zlcmlsb2cvcnRsIC1JIC9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9jYXJhdmVsL3Zlcmlsb2cgLUkgLi4vIC1JLi4vLi4vLi4vdmVyaWxvZy9ydGwgLUkuLi8uLi8uLi92ZXJpbG9nL2dsICAtSSAuLi8uLi8uLi92ZXJpbG9nIHdiX3BvcnRfdGIudiAtbyB3Yl9wb3J0LnZ2cApkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi91YXJ0X21hc3Rlci91YXJ0X21hc3Rlci5jIGIvdmVyaWxvZy9kdi91YXJ0X21hc3Rlci91YXJ0X21hc3Rlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmNTkxMmEKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3VhcnRfbWFzdGVyL3VhcnRfbWFzdGVyLmMKQEAgLTAsMCArMSwxNTYgQEAKKy8qCisgKiBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIwIEVmYWJsZXNzIENvcnBvcmF0aW9uCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqLworCisvLyBUaGlzIGluY2x1ZGUgaXMgcmVsYXRpdmUgdG8gJENBUkFWRUxfUEFUSCAoc2VlIE1ha2VmaWxlKQorI2luY2x1ZGUgInZlcmlsb2cvZHYvY2FyYXZlbC9kZWZzLmgiCisjaW5jbHVkZSAidmVyaWxvZy9kdi9jYXJhdmVsL3N0dWIuYyIKKworLy8gVXNlciBQcm9qZWN0IFNsYXZlcyAoMHgzMDAwXzAwMDApCisKKworI2RlZmluZSBHUElPX01PREVfVVNFUl9TVERfQklESVJFQ1RJT05BTF9QVUxMVVAgICAweDFDMDAKKworI2RlZmluZSBTQ19TSU1fT1VUUE9SVCAoMHhmMDAwMDAwMCkKKworLyoKKyAgICAgICAgIFJpc2NWIEhlbGxvIFdvcmxkIHRlc3QuCisJICAgICAgICAtIFdha2UgdXAgdGhlIFJpc2MgVgorCQktIEJvb3QgZnJvbSBTUEkgRmxhc2gKKwkJLSBSaXNjdiBXcml0ZSBIZWxsbyBXb3JsZCB0byBTRFJBTSwKKwkJLSBFeHRlcm5hbCBXaXNoYm9uZSByZWFkIGJhY2sgdmFsaWRhdGlvbiB0aGUgZGF0YQorKi8KK2ludCBpID0gMDsgCitpbnQgY2xrID0gMDsKK2ludCB1YXJ0X2NmZyA9IDA7Cit2b2lkIG1haW4oKQoreworCisJaW50IGJGYWlsID0gMDsKKwkvKiAKKwlJTyBDb250cm9sIFJlZ2lzdGVycworCXwgRE0gICAgIHwgVlRSSVAgfCBTTE9XICB8IEFOX1BPTCB8IEFOX1NFTCB8IEFOX0VOIHwgTU9EX1NFTCB8IElOUF9ESVMgfCBIT0xESCB8IE9FQl9OIHwgTUdNVF9FTiB8CisJfCAzLWJpdHMgfCAxLWJpdCB8IDEtYml0IHwgMS1iaXQgIHwgMS1iaXQgIHwgMS1iaXQgfCAxLWJpdCAgIHwgMS1iaXQgICB8IDEtYml0IHwgMS1iaXQgfCAxLWJpdCAgIHwKKwlPdXRwdXQ6IDAwMDBfMDExMF8wMDAwXzExMTAgICgweDE4MDgpID0gR1BJT19NT0RFX1VTRVJfU1REX09VVFBVVAorCXwgRE0gICAgIHwgVlRSSVAgfCBTTE9XICB8IEFOX1BPTCB8IEFOX1NFTCB8IEFOX0VOIHwgTU9EX1NFTCB8IElOUF9ESVMgfCBIT0xESCB8IE9FQl9OIHwgTUdNVF9FTiB8CisJfCAxMTAgICAgfCAwICAgICB8IDAgICAgIHwgMCAgICAgIHwgMCAgICAgIHwgMCAgICAgfCAwICAgICAgIHwgMSAgICAgICB8IDAgICAgIHwgMCAgICAgfCAwICAgICAgIHwKKwkKKwkgCisJSW5wdXQ6IDAwMDBfMDAwMV8wMDAwXzExMTEgKDB4MDQwMikgPSBHUElPX01PREVfVVNFUl9TVERfSU5QVVRfTk9QVUxMCisJfCBETSAgICAgfCBWVFJJUCB8IFNMT1cgIHwgQU5fUE9MIHwgQU5fU0VMIHwgQU5fRU4gfCBNT0RfU0VMIHwgSU5QX0RJUyB8IEhPTERIIHwgT0VCX04gfCBNR01UX0VOIHwKKwl8IDAwMSAgICB8IDAgICAgIHwgMCAgICAgfCAwICAgICAgfCAwICAgICAgfCAwICAgICB8IDAgICAgICAgfCAwICAgICAgIHwgMCAgICAgfCAxICAgICB8IDAgICAgICAgfAorCisJSW5wdXQ6IDAwMDBfMDAwMV8wMDAwXzExMTEgKDB4MTgwMCkgPSBHUElPX01PREVfVVNFUl9TVERfQklESVJFQ1RJT05BTAorCXwgRE0gICAgIHwgVlRSSVAgfCBTTE9XICB8IEFOX1BPTCB8IEFOX1NFTCB8IEFOX0VOIHwgTU9EX1NFTCB8IElOUF9ESVMgfCBIT0xESCB8IE9FQl9OIHwgTUdNVF9FTiB8CisJfCAxMTAgICAgfCAwICAgICB8IDAgICAgIHwgMCAgICAgIHwgMCAgICAgIHwgMCAgICAgfCAwICAgICAgIHwgMCAgICAgICB8IDAgICAgIHwgMCAgICAgfCAwICAgICAgIHwKKwkqLworCisJLyogU2V0IHVwIHRoZSBob3VzZWtlZXBpbmcgU1BJIHRvIGJlIGNvbm5lY3RlZCBpbnRlcm5hbGx5IHNvCSovCisJLyogdGhhdCBleHRlcm5hbCBwaW4gY2hhbmdlcyBkb24ndCBhZmZlY3QgaXQuCQkJKi8KKworCXJlZ19zcGltYXN0ZXJfY29uZmlnID0gMHhhMDAyOwkvLyBFbmFibGUsIHByZXNjYWxlciA9IDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29ubmVjdCB0byBob3VzZWtlZXBpbmcgU1BJCisKKwkvLyBDb25uZWN0IHRoZSBob3VzZWtlZXBpbmcgU1BJIHRvIHRoZSBTUEkgbWFzdGVyCisJLy8gc28gdGhhdCB0aGUgQ1NCIGxpbmUgaXMgbm90IGxlZnQgZmxvYXRpbmcuICBUaGlzIGFsbG93cworCS8vIGFsbCBvZiB0aGUgR1BJTyBwaW5zIHRvIGJlIHVzZWQgZm9yIHVzZXIgZnVuY3Rpb25zLgorICAgICAgICByZWdfbXByal9pb18zMSA9IEdQSU9fTU9ERV9NR01UX1NURF9PVVRQVVQ7CisgICAgICAgIHJlZ19tcHJqX2lvXzMwID0gR1BJT19NT0RFX01HTVRfU1REX09VVFBVVDsKKyAgICAgICAgcmVnX21wcmpfaW9fMjkgPSBHUElPX01PREVfTUdNVF9TVERfT1VUUFVUOworICAgICAgICByZWdfbXByal9pb18yOCA9IEdQSU9fTU9ERV9NR01UX1NURF9PVVRQVVQ7CisgICAgICAgIHJlZ19tcHJqX2lvXzI3ID0gR1BJT19NT0RFX01HTVRfU1REX09VVFBVVDsKKyAgICAgICAgcmVnX21wcmpfaW9fMjYgPSBHUElPX01PREVfTUdNVF9TVERfT1VUUFVUOworICAgICAgICByZWdfbXByal9pb18yNSA9IEdQSU9fTU9ERV9NR01UX1NURF9PVVRQVVQ7CisgICAgICAgIHJlZ19tcHJqX2lvXzI0ID0gR1BJT19NT0RFX01HTVRfU1REX09VVFBVVDsKKyAgICAgICAgcmVnX21wcmpfaW9fMjMgPSBHUElPX01PREVfTUdNVF9TVERfT1VUUFVUOworICAgICAgICByZWdfbXByal9pb18yMiA9IEdQSU9fTU9ERV9NR01UX1NURF9PVVRQVVQ7CisgICAgICAgIHJlZ19tcHJqX2lvXzIxID0gR1BJT19NT0RFX01HTVRfU1REX09VVFBVVDsKKyAgICAgICAgcmVnX21wcmpfaW9fMjAgPSBHUElPX01PREVfTUdNVF9TVERfT1VUUFVUOworICAgICAgICByZWdfbXByal9pb18xOSA9IEdQSU9fTU9ERV9NR01UX1NURF9PVVRQVVQ7CisgICAgICAgIHJlZ19tcHJqX2lvXzE4ID0gR1BJT19NT0RFX01HTVRfU1REX09VVFBVVDsKKyAgICAgICAgcmVnX21wcmpfaW9fMTcgPSBHUElPX01PREVfTUdNVF9TVERfT1VUUFVUOworICAgICAgICByZWdfbXByal9pb18xNiA9IEdQSU9fTU9ERV9NR01UX1NURF9PVVRQVVQ7CisKKworICAgIHJlZ19sYTBfb2VuYiA9IHJlZ19sYTBfaWVuYSA9ICAweDAwMDAwMDA7CisgICAgIC8qIEFwcGx5IGNvbmZpZ3VyYXRpb24gKi8KKyAgICByZWdfbXByal94ZmVyID0gMTsKKyAgICB3aGlsZSAocmVnX21wcmpfeGZlciA9PSAxKTsKKyAgICByZWdfbXByal9kYXRhbCA9IDB4QUI2MDAwMDA7CisKKyAgICByZWdfbGEwX29lbmIgPSByZWdfbGEwX2llbmEgPSAgMHgwMDAwMDAwOworCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFN0YXJ0IG9mIFVzZXIgRnVuY3Rpb25hbGl0eSBhbmQgdGFrZSBvdmVyIHRoZSBHUElPIFBpbnMKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBVc2VyIGJsb2NrIGRlY2lkZSBvbiB0aGUgR1BJTyBmdW5jdGlvbgorICAgIHJlZ19tcHJqX2lvXzM3ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzM2ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzM1ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzM0ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzMzID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzMyID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzMxID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzMwID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzI5ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzI4ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzI3ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzI2ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzI1ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzI0ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzIzID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzIyID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzIxID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzIwID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzE5ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzE4ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzE3ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzE2ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzE1ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzE0ID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzEzID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzEyID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzExID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzEwID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzkgID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzggID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzcgID0gR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzYgPSAgR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzUgPSAgR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzQgPSAgR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzMgPSAgR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzIgPSAgR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzEgPSAgR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworICAgIHJlZ19tcHJqX2lvXzAgPSAgR1BJT19NT0RFX1VTRVJfU1REX0JJRElSRUNUSU9OQUxfUFVMTFVQOworCisgICAgIC8qIEFwcGx5IGNvbmZpZ3VyYXRpb24gKi8KKyAgICByZWdfbXByal94ZmVyID0gMTsKKyAgICB3aGlsZSAocmVnX21wcmpfeGZlciA9PSAxKTsKKworICAgIHJlZ19sYTBfZGF0YSA9IDB4MDAwOworICAgIC8vcmVnX2xhMF9kYXRhID0gMHgwMDA7CisgICAgLy9yZWdfbGEwX2RhdGEgfD0gMHgxOyAvLyBiaXRbMF0gLSBSZW1vdmUgU29mdHdhcmUgUmVzZXQKKyAgICAvL3JlZ19sYTBfZGF0YSB8PSAweDE7IC8vIGJpdFsxXSAtIEVuYWJsZSBUcmFuc21pdCBQYXRoCisgICAgLy9yZWdfbGEwX2RhdGEgfD0gMHgyOyAvLyBiaXRbMl0gLSBFbmFibGUgUmVjZWl2ZSBQYXRoCisgICAgLy9yZWdfbGEwX2RhdGEgfD0gMHg0OyAvLyBiaXRbM10gLSBTZXQgMiBTdG9wIEJpdAorICAgIC8vcmVnX2xhMF9kYXRhIHw9IDB4MDsgLy8gYml0WzE1OjRdIC0gMTZ4IEJhdWQgQ2xvY2sKKyAgICAvL3JlZ19sYTBfZGF0YSB8PSAweDA7IC8vIGJpdFsxNzoxNl0gLSBQcmlvcml0eSBtb2RlID0gMAorICAgIHJlZ19sYTBfZGF0YSA9IDB4MDAxOworICAgIHJlZ19sYTBfZGF0YSA9IDB4MDBGOworCisKKworfQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi91YXJ0X21hc3Rlci91YXJ0X21hc3Rlcl90Yi52IGIvdmVyaWxvZy9kdi91YXJ0X21hc3Rlci91YXJ0X21hc3Rlcl90Yi52Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhN2Y2NmUKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3VhcnRfbWFzdGVyL3VhcnRfbWFzdGVyX3RiLnYKQEAgLTAsMCArMSwyNzkgQEAKKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjAgRWZhYmxlc3MgQ29ycG9yYXRpb24KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorCitgZGVmYXVsdF9uZXR0eXBlIG5vbmUKKworYHRpbWVzY2FsZSAxIG5zIC8gMSBwcworCitgaW5jbHVkZSAidXByal9uZXRsaXN0cy52IgorYGluY2x1ZGUgImNhcmF2ZWxfbmV0bGlzdHMudiIKK2BpbmNsdWRlICJzcGlmbGFzaC52IgorYGluY2x1ZGUgInVhcnRfYWdlbnQudiIKKworbW9kdWxlIHVhcnRfbWFzdGVyX3RiOworCXJlZyBjbG9jazsKKwlyZWcgUlNUQjsKKwlyZWcgQ1NCOworCXJlZyBwb3dlcjEsIHBvd2VyMjsKKwlyZWcgcG93ZXIzLCBwb3dlcjQ7CisKKwl3aXJlIGdwaW87CisJd2lyZSBbMzc6MF0gbXByal9pbzsKKwl3aXJlIFs3OjBdIG1wcmpfaW9fMDsKKwl3aXJlIFsxNTowXSBjaGVja2JpdHM7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gVWFydCBDb25maWd1cmF0aW9uCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3JlZyBbMTowXSAgICAgIHVhcnRfZGF0YV9iaXQgICAgICAgIDsKK3JlZwkgICAgICAgdWFydF9zdG9wX2JpdHMgICAgICAgOyAvLyAwOiAxIHN0b3AgYml0OyAxOiAyIHN0b3AgYml0OworcmVnCSAgICAgICB1YXJ0X3N0aWNrX3Bhcml0eSAgICA7IC8vIDE6IGZvcmNlIGV2ZW4gcGFyaXR5CityZWcJICAgICAgIHVhcnRfcGFyaXR5X2VuICAgICAgIDsgLy8gcGFyaXR5IGVuYWJsZQorcmVnCSAgICAgICB1YXJ0X2V2ZW5fb2RkX3Bhcml0eSA7IC8vIDA6IG9kZCBwYXJpdHk7IDE6IGV2ZW4gcGFyaXR5CisKK3JlZyBbNzowXSAgICAgIHVhcnRfZGF0YSAgICAgICAgICAgIDsKK3JlZyBbMTU6MF0gICAgIHVhcnRfZGl2aXNvciAgICAgICAgIDsJLy8gZGl2aWRlZCBieSBuICogMTYKK3JlZyBbMTU6MF0gICAgIHVhcnRfdGltZW91dCAgICAgICAgIDsvLyB3YWl0IHRpbWUgbGltaXQKKworcmVnIFsxNTowXSAgICAgdWFydF9yeF9udSAgICAgICAgICAgOworcmVnIFsxNTowXSAgICAgdWFydF90eF9udSAgICAgICAgICAgOworcmVnIFs3OjBdICAgICAgdWFydF93cml0ZV9kYXRhIFswOjM5XTsKK3JlZyAJICAgICAgIHVhcnRfZmlmb19lbmFibGUgICAgIDsJLy8gZmlmbyBtb2RlIGRpc2FibGUKKworcmVnIFszMTowXSAgICAgcmVhZF9kYXRhICAgICA7CityZWcgICAgICAgICAgICBmbGFnOworcmVnICAgICAgICAgICAgdGVzdF9mYWlsICAgICA7CisKKworCWFzc2lnbiBjaGVja2JpdHMgPSBtcHJqX2lvWzMxOjE2XTsKKworCWFzc2lnbiBtcHJqX2lvWzNdID0gKENTQiA9PSAxJ2IxKSA/IDEnYjEgOiAxJ2J6OworCisJLy8gRXh0ZXJuYWwgY2xvY2sgaXMgdXNlZCBieSBkZWZhdWx0LiAgTWFrZSB0aGlzIGFydGlmaWNpYWxseSBmYXN0IGZvciB0aGUKKwkvLyBzaW11bGF0aW9uLiAgTm9ybWFsbHkgdGhpcyB3b3VsZCBiZSBhIHNsb3cgY2xvY2sgYW5kIHRoZSBkaWdpdGFsIFBMTAorCS8vIHdvdWxkIGJlIHRoZSBmYXN0IGNsb2NrLgorCisJYWx3YXlzICMxMi41IGNsb2NrIDw9IChjbG9jayA9PT0gMSdiMCk7CisKKwlpbml0aWFsIGJlZ2luCisJCWNsb2NrID0gMDsKKwllbmQKKworCWBpZmRlZiBXRkRVTVAKKwlpbml0aWFsIGJlZ2luCisJCSRkdW1wZmlsZSgic2lteC52Y2QiKTsKKwkJJGR1bXB2YXJzKDEsIHVhcnRfbWFzdGVyX3RiKTsKKwkJJGR1bXB2YXJzKDEsIHVhcnRfbWFzdGVyX3RiLnV1dCk7CisJCSRkdW1wdmFycygxLCB1YXJ0X21hc3Rlcl90Yi51dXQubXByaik7CisJCSRkdW1wdmFycygxLCB1YXJ0X21hc3Rlcl90Yi51dXQubXByai51X3diX2hvc3QpOworCQkkZHVtcHZhcnMoMSwgdWFydF9tYXN0ZXJfdGIudXV0Lm1wcmoudV93Yl9ob3N0LnVfdWFydDJ3Yik7CisJCSRkdW1wdmFycygxLCB1YXJ0X21hc3Rlcl90Yi50Yl9tYXN0ZXJfdWFydCk7CisJCS8vJGR1bXB2YXJzKDIsIHVhcnRfbWFzdGVyX3RiLnV1dC5tcHJqLnVfcGlubXV4KTsKKwllbmQKKyAgICAgICBgZW5kaWYKKworCWluaXRpYWwgYmVnaW4KKworCQkvLyBSZXBlYXQgY3ljbGVzIG9mIDEwMDAgY2xvY2sgZWRnZXMgYXMgbmVlZGVkIHRvIGNvbXBsZXRlIHRlc3RiZW5jaAorCQlyZXBlYXQgKDQwMCkgYmVnaW4KKwkJCXJlcGVhdCAoMTAwMCkgQChwb3NlZGdlIGNsb2NrKTsKKwkJCS8vICRkaXNwbGF5KCIrMTAwMCBjeWNsZXMiKTsKKwkJZW5kCisJCSRkaXNwbGF5KCIlY1sxOzMxbSIsMjcpOworCQkkZGlzcGxheSAoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkJYGlmZGVmIEdMCisJCSAgICRkaXNwbGF5ICgiTW9uaXRvcjogVGltZW91dCwgVGVzdCBVQVJUIE1hc3RlciAoR0wpIEZhaWxlZCIpOworCQlgZWxzZQorCQkgICAkZGlzcGxheSAoIk1vbml0b3I6IFRpbWVvdXQsIFRlc3QgVUFSVCBNYXN0ZXIgKFJUTCkgRmFpbGVkIik7CisJCWBlbmRpZgorCQkkZGlzcGxheSAoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkJJGRpc3BsYXkoIiVjWzBtIiwyNyk7CisJCSRmaW5pc2g7CisJZW5kCisKKwlpbml0aWFsIGJlZ2luCisgICAgICAgICAgICB1YXJ0X2RhdGFfYml0ICAgICAgICAgICA9IDInYjExOworICAgICAgICAgICAgdWFydF9zdG9wX2JpdHMgICAgICAgICAgPSAxOyAvLyAwOiAxIHN0b3AgYml0OyAxOiAyIHN0b3AgYml0OworICAgICAgICAgICAgdWFydF9zdGlja19wYXJpdHkgICAgICAgPSAwOyAvLyAxOiBmb3JjZSBldmVuIHBhcml0eQorICAgICAgICAgICAgdWFydF9wYXJpdHlfZW4gICAgICAgICAgPSAwOyAvLyBwYXJpdHkgZW5hYmxlCisgICAgICAgICAgICB1YXJ0X2V2ZW5fb2RkX3Bhcml0eSAgICA9IDE7IC8vIDA6IG9kZCBwYXJpdHk7IDE6IGV2ZW4gcGFyaXR5CisgICAgICAgICAgICB1YXJ0X2Rpdmlzb3IgICAgICAgICAgICA9IDE1Oy8vIGRpdmlkZWQgYnkgbiAqIDE2CisgICAgICAgICAgICB1YXJ0X3RpbWVvdXQgICAgICAgICAgICA9IDYwMDsvLyB3YWl0IHRpbWUgbGltaXQKKyAgICAgICAgICAgIHVhcnRfZmlmb19lbmFibGUgICAgICAgID0gMDsJLy8gZmlmbyBtb2RlIGRpc2FibGUKKyAgICAgICAgICAgIHRiX21hc3Rlcl91YXJ0LmRlYnVnX21vZGUgPSAwOyAvLyBkaXNhYmxlIGRlYnVnIGRpc3BsYXkKKyAgICAgICAgICAgIHRiX21hc3Rlcl91YXJ0LnVhcnRfaW5pdDsKKyAgICAgICAgICAgIHRiX21hc3Rlcl91YXJ0LmNvbnRyb2xfc2V0dXAgKHVhcnRfZGF0YV9iaXQsIHVhcnRfc3RvcF9iaXRzLCB1YXJ0X3Bhcml0eV9lbiwgdWFydF9ldmVuX29kZF9wYXJpdHksIAorICAgICAgICAJICAgICAgICAgICAgICAgICAgICAgICAgICB1YXJ0X3N0aWNrX3Bhcml0eSwgdWFydF90aW1lb3V0LCB1YXJ0X2Rpdmlzb3IpOworCSAgIHdhaXQoY2hlY2tiaXRzID09IDE2J2ggQUI2MCk7CisJCSRkaXNwbGF5KCJNb25pdG9yOiBVQVJUIE1hc3RlciBUZXN0IFN0YXJ0ZWQiKTsKKworICAgICAgICAgICByZXBlYXQgKDQwMDApIEAocG9zZWRnZSBjbG9jayk7CisgICAgICAgICAgIC8vJHdyaXRlICgiXG4oJXQpUmVzcG9uc2U6XG4iLCR0aW1lKTsKKyAgICAgICAgICAgZmxhZyA9IDA7CisgICAgICAgICAgIHdoaWxlKGZsYWcgPT0gMCkKKyAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICB0Yl9tYXN0ZXJfdWFydC5yZWFkX2NoYXIocmVhZF9kYXRhLGZsYWcpOworICAgICAgICAgICAgICAgICR3cml0ZSAoIiVjIixyZWFkX2RhdGEpOworICAgICAgICAgICBlbmQKKworCisKKyAgICAgICAgICAgLy8gUmVtb3ZlIFdiIFJlc2V0CisgICAgICAgICAgIHVhcnRtX3JlZ193cml0ZSgnaDMwODBfMDAwMCwnaDEpOworCisgICAgICAgICAgIHJlcGVhdCAoMikgQChwb3NlZGdlIGNsb2NrKTsKKyAgICAgICAgICAgIzE7CisKKyAgICAgICAgICAgJGRpc3BsYXkoIk1vbml0b3I6IFdyaXRpbmcgIGV4cGVjdGVkIHZhbHVlIik7CisgICAgICAgICAgIAorICAgICAgICAgICB0ZXN0X2ZhaWwgPSAwOworICAgICAgICAgICB1YXJ0bV9yZWdfd3JpdGUoMzInaDMwMDIwMDU4LDMyJ2gxMTIyMzM0NCk7CisgICAgICAgICAgIHVhcnRtX3JlZ193cml0ZSgzMidoMzAwMjAwNUMsMzInaDIyMzM0NDU1KTsKKyAgICAgICAgICAgdWFydG1fcmVnX3dyaXRlKDMyJ2gzMDAyMDA2MCwzMidoMzM0NDU1NjYpOworICAgICAgICAgICB1YXJ0bV9yZWdfd3JpdGUoMzInaDMwMDIwMDY0LDMyJ2g0NDU1NjY3Nyk7CisgICAgICAgICAgIHVhcnRtX3JlZ193cml0ZSgzMidoMzAwMjAwNjgsMzInaDU1NjY3Nzg4KTsKKyAgICAgICAgICAgdWFydG1fcmVnX3dyaXRlKDMyJ2gzMDAyMDA2QywzMidoNjY3Nzg4OTkpOworCisgICAgICAgICAgIHVhcnRtX3JlZ19yZWFkX2NoZWNrKDMyJ2gzMDAyMDA1OCwzMidoMTEyMjMzNDQpOworICAgICAgICAgICB1YXJ0bV9yZWdfcmVhZF9jaGVjaygzMidoMzAwMjAwNUMsMzInaDIyMzM0NDU1KTsKKyAgICAgICAgICAgdWFydG1fcmVnX3JlYWRfY2hlY2soMzInaDMwMDIwMDYwLDMyJ2gzMzQ0NTU2Nik7CisgICAgICAgICAgIHVhcnRtX3JlZ19yZWFkX2NoZWNrKDMyJ2gzMDAyMDA2NCwzMidoNDQ1NTY2NzcpOworICAgICAgICAgICB1YXJ0bV9yZWdfcmVhZF9jaGVjaygzMidoMzAwMjAwNjgsMzInaDU1NjY3Nzg4KTsKKyAgICAgICAgICAgdWFydG1fcmVnX3JlYWRfY2hlY2soMzInaDMwMDIwMDZDLDMyJ2g2Njc3ODg5OSk7CisKKyAgICAgICAgICAgJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworICAgICAgICAgICBpZih0ZXN0X2ZhaWwgPT0gMCkgYmVnaW4KKyAgICAgICAgICAgICAgYGlmZGVmIEdMCisgICAgICAgICAgICAgICAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RhbmRhbG9uZSBVc2VyIFVBUlQgTWFzdGVyIChHTCkgUGFzc2VkIik7CisgICAgICAgICAgICAgIGBlbHNlCisgICAgICAgICAgICAgICAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RhbmRhbG9uZSBVc2VyIFVhcnQgTWFzdGVyIChSVEwpIFBhc3NlZCIpOworICAgICAgICAgICAgICBgZW5kaWYKKyAgICAgICAgICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgICAgICAgICAgIGBpZmRlZiBHTAorICAgICAgICAgICAgICAgICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGFuZGFsb25lIFVzZXIgVWFydCBNYXN0ZXIgKEdMKSBGYWlsZWQiKTsKKyAgICAgICAgICAgICAgIGBlbHNlCisgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkoIk1vbml0b3I6IFN0YW5kYWxvbmUgVXNlciBVYXJ0IE1hc3RlciAoUlRMKSBGYWlsZWQiKTsKKyAgICAgICAgICAgICAgIGBlbmRpZgorICAgICAgICAgICAgZW5kCisgICAgICAgICAgICRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKyAgICAgICAgICAgIzEwMAorCisJICAgICRmaW5pc2g7CisJZW5kCisKKwlpbml0aWFsIGJlZ2luCisJCVJTVEIgPD0gMSdiMDsKKwkJQ1NCICA8PSAxJ2IxOwkJLy8gRm9yY2UgQ1NCIGhpZ2gKKwkJIzIwMDA7CisJCVJTVEIgPD0gMSdiMTsJICAgIAkvLyBSZWxlYXNlIHJlc2V0CisJCSMxNzAwMDA7CisJCUNTQiA9IDEnYjA7CQkvLyBDU0IgY2FuIGJlIHJlbGVhc2VkCisJZW5kCisKKwlpbml0aWFsIGJlZ2luCQkvLyBQb3dlci11cCBzZXF1ZW5jZQorCQlwb3dlcjEgPD0gMSdiMDsKKwkJcG93ZXIyIDw9IDEnYjA7CisJCXBvd2VyMyA8PSAxJ2IwOworCQlwb3dlcjQgPD0gMSdiMDsKKwkJIzEwMDsKKwkJcG93ZXIxIDw9IDEnYjE7CisJCSMxMDA7CisJCXBvd2VyMiA8PSAxJ2IxOworCQkjMTAwOworCQlwb3dlcjMgPD0gMSdiMTsKKwkJIzEwMDsKKwkJcG93ZXI0IDw9IDEnYjE7CisJZW5kCisKKwkvL2Fsd2F5cyBAKG1wcmpfaW8pIGJlZ2luCisJLy8JIzEgJGRpc3BsYXkoIk1QUkotSU8gc3RhdGUgPSAlYiAiLCBtcHJqX2lvWzc6MF0pOworCS8vZW5kCisKKwl3aXJlIGZsYXNoX2NzYjsKKwl3aXJlIGZsYXNoX2NsazsKKwl3aXJlIGZsYXNoX2lvMDsKKwl3aXJlIGZsYXNoX2lvMTsKKworCXdpcmUgVkREM1YzID0gcG93ZXIxOworCXdpcmUgVkREMVY4ID0gcG93ZXIyOworCXdpcmUgVVNFUl9WREQzVjMgPSBwb3dlcjM7CisJd2lyZSBVU0VSX1ZERDFWOCA9IHBvd2VyNDsKKwl3aXJlIFZTUyA9IDEnYjA7CisKKwljYXJhdmVsIHV1dCAoCisJCS52ZGRpbwkgIChWREQzVjMpLAorCQkudnNzaW8JICAoVlNTKSwKKwkJLnZkZGEJICAoVkREM1YzKSwKKwkJLnZzc2EJICAoVlNTKSwKKwkJLnZjY2QJICAoVkREMVY4KSwKKwkJLnZzc2QJICAoVlNTKSwKKwkJLnZkZGExICAgIChVU0VSX1ZERDNWMyksCisJCS52ZGRhMiAgICAoVVNFUl9WREQzVjMpLAorCQkudnNzYTEJICAoVlNTKSwKKwkJLnZzc2EyCSAgKFZTUyksCisJCS52Y2NkMQkgIChVU0VSX1ZERDFWOCksCisJCS52Y2NkMgkgIChVU0VSX1ZERDFWOCksCisJCS52c3NkMQkgIChWU1MpLAorCQkudnNzZDIJICAoVlNTKSwKKwkJLmNsb2NrCSAgKGNsb2NrKSwKKwkJLmdwaW8gICAgIChncGlvKSwKKyAgICAgICAgLm1wcmpfaW8gIChtcHJqX2lvKSwKKwkJLmZsYXNoX2NzYihmbGFzaF9jc2IpLAorCQkuZmxhc2hfY2xrKGZsYXNoX2NsayksCisJCS5mbGFzaF9pbzAoZmxhc2hfaW8wKSwKKwkJLmZsYXNoX2lvMShmbGFzaF9pbzEpLAorCQkucmVzZXRiCSAgKFJTVEIpCisJKTsKKworCXNwaWZsYXNoICMoCisJCS5GSUxFTkFNRSgidWFydF9tYXN0ZXIuaGV4IikKKwkpIHNwaWZsYXNoICgKKwkJLmNzYihmbGFzaF9jc2IpLAorCQkuY2xrKGZsYXNoX2NsayksCisJCS5pbzAoZmxhc2hfaW8wKSwKKwkJLmlvMShmbGFzaF9pbzEpLAorCQkuaW8yKCksCQkJLy8gbm90IHVzZWQKKwkJLmlvMygpCQkJLy8gbm90IHVzZWQKKwkpOworCisKKworCitgaWZuZGVmIEdMIC8vIERyaXZlIFBvd2VyIGZvciBIb2xkIEZpeCBCdWYKKyAgICAvLyBBbGwgc3RhbmRhcmQgY2VsbCBuZWVkIHBvd2VyIGhvb2stdXAgZm9yIGZ1bmN0aW9uYWxpdHkgd29yaworICAgIGluaXRpYWwgYmVnaW4KKyAgICBlbmQKK2BlbmRpZiAgICAKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gIFVBUlQgQWdlbnQgaW50ZWdyYXRpb24KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXJlIHVhcnRfdHhkLHVhcnRfcnhkOworCithc3NpZ24gdWFydF90eGQgICA9IG1wcmpfaW9bMzVdOworYXNzaWduIG1wcmpfaW9bMzRdICA9IHVhcnRfcnhkIDsKKyAKK3VhcnRfYWdlbnQgdGJfbWFzdGVyX3VhcnQoCisJLm1jbGsgICAgICAgICAgICAgICAgKGNsb2NrICAgICAgICAgICAgICApLAorCS50eGQgICAgICAgICAgICAgICAgICh1YXJ0X3J4ZCAgICAgICAgICAgKSwKKwkucnhkICAgICAgICAgICAgICAgICAodWFydF90eGQgICAgICAgICAgICkKKwkpOworCisKK2BpbmNsdWRlICJ1YXJ0X21hc3Rlcl90YXNrcy5zdiIKKworZW5kbW9kdWxlCitgZGVmYXVsdF9uZXR0eXBlIHdpcmUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvdXNlcl9iYXNpYy9NYWtlZmlsZSBiL3Zlcmlsb2cvZHYvdXNlcl9iYXNpYy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTU1OGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi91c2VyX2Jhc2ljL01ha2VmaWxlCkBAIC0wLDAgKzEsMTA1IEBACisjIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjAgRWZhYmxlc3MgQ29ycG9yYXRpb24KKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisKKyMjIENhcmF2ZWwgUG9pbnRlcnMKK0NBUkFWRUxfUk9PVCA/PSAuLi8uLi8uLi9jYXJhdmVsCitDQVJBVkVMX1BBVEggPz0gJChDQVJBVkVMX1JPT1QpCitDQVJBVkVMX0ZJUk1XQVJFX1BBVEggPSAkKENBUkFWRUxfUEFUSCkvdmVyaWxvZy9kdi9jYXJhdmVsCitDQVJBVkVMX1ZFUklMT0dfUEFUSCAgPSAkKENBUkFWRUxfUEFUSCkvdmVyaWxvZworQ0FSQVZFTF9SVExfUEFUSCA9ICQoQ0FSQVZFTF9WRVJJTE9HX1BBVEgpL3J0bAorQ0FSQVZFTF9CRUhBVklPVVJBTF9NT0RFTFMgPSAkKENBUkFWRUxfVkVSSUxPR19QQVRIKS9kdi9jYXJhdmVsCisKKworIyMgVXNlciBQcm9qZWN0IFBvaW50ZXJzCitVUFJKX1ZFUklMT0dfUEFUSCA/PSAuLi8uLi8uLi92ZXJpbG9nCitVUFJKX1JUTF9QQVRIID0gJChVUFJKX1ZFUklMT0dfUEFUSCkvcnRsCitVUFJKX0dMX1BBVEggPSAkKFVQUkpfVkVSSUxPR19QQVRIKS9nbAorVVBSSl9CRUhBVklPVVJBTF9NT0RFTFMgPSAuLi9tb2RlbAorVVBSSl9CRUhBVklPVVJBTF9BR0VOVFMgPSAuLi9hZ2VudHMKK1VQUkpfSU5DTFVERV9QQVRIMSA9ICQoVVBSSl9SVExfUEFUSCkveWlmaXZlL3ljcjFjL3NyYy9pbmNsdWRlcworVVBSSl9JTkNMVURFX1BBVEgyID0gJChVUFJKX1JUTF9QQVRIKS9zZHJhbV9jdHJsL3NyYy9kZWZzCitVUFJKX0lOQ0xVREVfUEFUSDMgPSAkKFVQUkpfUlRMX1BBVEgpL2kyY20vc3JjL2luY2x1ZGVzCitVUFJKX0lOQ0xVREVfUEFUSDQgPSAkKFVQUkpfUlRMX1BBVEgpL3VzYjFfaG9zdC9zcmMvaW5jbHVkZXMKK1VQUkpfSU5DTFVERV9QQVRINSA9ICQoVVBSSl9SVExfUEFUSCkvbWJpc3QvaW5jbHVkZQorCisjIyBZSUZJVkUgRklSTVdBUkUKK1lJRklWRV9GSVJNV0FSRV9QQVRIID0gJChVUFJKX1ZFUklMT0dfUEFUSCkvZHYvZmlybXdhcmUKK0dDQzY0X1BSRUZJWD89cmlzY3Y2NC11bmtub3duLWVsZgorCisjIyBSSVNDViBHQ0MgCitHQ0NfUEFUSD89L2VmL2FwcHMvYmluCitHQ0NfUFJFRklYPz1yaXNjdjMyLXVua25vd24tZWxmCitQREtfUEFUSD89L2VmL3RlY2gvU1cvc2t5MTMwQQorCisjIyBTaW11bGF0aW9uIG1vZGU6IFJUTC9HTAorU0lNPz1SVEwKK0RVTVA/PU9GRgorCisuU1VGRklYRVM6CisKK1BBVFRFUk4gPSB1c2VyX2Jhc2ljCisKK2FsbDogICR7UEFUVEVSTjo9LnZjZH0KKworaGV4OiAgJHtQQVRURVJOOj0uaGV4fQorCit2dnA6ICAke1BBVFRFUk46PS52dnB9CisKKyUudnZwOiAlX3RiLnYKK2lmZXEgKCQoU0lNKSxSVEwpCisgICBpZmVxICgkKERVTVApLE9GRikKKwlpdmVyaWxvZyAtZzIwMDUtc3YgLURGVU5DVElPTkFMIC1EU0lNIC1JICQoUERLX1BBVEgpIFwKKwktSSAkKENBUkFWRUxfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSAkKENBUkFWRUxfUlRMX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfTU9ERUxTKSAgICAtSSAkKFVQUkpfUlRMX1BBVEgpIC1JICQoVVBSSl9WRVJJTE9HX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfQUdFTlRTKSAgICBcCisJLUkgJChVUFJKX0lOQ0xVREVfUEFUSDEpICAgIC1JICQoVVBSSl9JTkNMVURFX1BBVEgyKSAtSSAkKFVQUkpfSU5DTFVERV9QQVRIMykgXAorCS1JICQoVVBSSl9JTkNMVURFX1BBVEg0KSAtSSAkKFVQUkpfSU5DTFVERV9QQVRINSkgXAorCSQ8IC1vICRAIAorICAgIGVsc2UgIAorCWl2ZXJpbG9nIC1nMjAwNS1zdiAtRFdGRFVNUCAtREZVTkNUSU9OQUwgLURTSU0gLUkgJChQREtfUEFUSCkgXAorCS1JICQoQ0FSQVZFTF9CRUhBVklPVVJBTF9NT0RFTFMpIC1JICQoQ0FSQVZFTF9SVExfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9NT0RFTFMpICAgIC1JICQoVVBSSl9SVExfUEFUSCkgLUkgJChVUFJKX1ZFUklMT0dfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9BR0VOVFMpICAgIFwKKwktSSAkKFVQUkpfSU5DTFVERV9QQVRIMSkgICAgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDIpIC1JICQoVVBSSl9JTkNMVURFX1BBVEgzKSBcCisJLUkgJChVUFJKX0lOQ0xVREVfUEFUSDQpIC1JICQoVVBSSl9JTkNMVURFX1BBVEg1KSBcCisJJDwgLW8gJEAgCisgICBlbmRpZgorZWxzZSAgCisJaXZlcmlsb2cgLWcyMDA1LXN2IC1ERlVOQ1RJT05BTCAtRFNJTSAtREdMIC1JICQoUERLX1BBVEgpIFwKKwktSSAkKENBUkFWRUxfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSAkKENBUkFWRUxfUlRMX1BBVEgpIC1JICQoQ0FSQVZFTF9WRVJJTE9HX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSAkKFVQUkpfR0xfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9BR0VOVFMpICAgIFwKKwkkPCAtbyAkQCAKK2VuZGlmCisKKyUudmNkOiAlLnZ2cAorCXZ2cCAkPAorCislLmVsZjogJS5jICQoQ0FSQVZFTF9GSVJNV0FSRV9QQVRIKS9zZWN0aW9ucy5sZHMgJChDQVJBVkVMX0ZJUk1XQVJFX1BBVEgpL3N0YXJ0LnMKKwkke0dDQzY0X1BSRUZJWH0tZ2NjIC1JICQoQ0FSQVZFTF9QQVRIKSAtbWFyY2g9cnYzMmltYyAtbWFiaT1pbHAzMiAtV2wsLUJzdGF0aWMsLVQsJChDQVJBVkVMX0ZJUk1XQVJFX1BBVEgpL3NlY3Rpb25zLmxkcywtLXN0cmlwLWRlYnVnIC1mZnJlZXN0YW5kaW5nIC1ub3N0ZGxpYiAtbyAkQCAkKENBUkFWRUxfRklSTVdBUkVfUEFUSCkvc3RhcnQucyAkPAorCislLmhleDogCisJZWNobyBAIlRoaXMgaXMgdXNlciBib290IHRlc3QsIG5vdGluZyB0byBjb21waWxlIHRoZSBtYW5nbWVudCBjb3JlIGNvZGUiCisKKyUuYmluOiAlLmVsZgorCSR7R0NDNjRfUFJFRklYfS1vYmpjb3B5IC1PIGJpbmFyeSAkPCAvZGV2L3N0ZG91dCB8IHRhaWwgLWMgKzEwNDg1NzcgPiAkQAorCisjIC0tLS0gQ2xlYW4gLS0tLQorCitjbGVhbjoKKwlybSAtZiAqLmVsZiAqLmhleCAqLmJpbiAqLnZ2cCAqLnZjZCAqLmxvZyAqLmR1bXAKKworLlBIT05ZOiBjbGVhbiBoZXggYWxsCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3VzZXJfYmFzaWMvdXNlcl9iYXNpY190Yi52IGIvdmVyaWxvZy9kdi91c2VyX2Jhc2ljL3VzZXJfYmFzaWNfdGIudgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGQ5ODIxCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi91c2VyX2Jhc2ljL3VzZXJfYmFzaWNfdGIudgpAQCAtMCwwICsxLDUxNyBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogIDIwMjEgLCBEaW5lc2ggQW5uYXl5YQorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogTW9kaWZpZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFN0YW5kYWxvbmUgVXNlciB2YWxpZGF0aW9uIFRlc3QgYmVuY2ggICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBZSUZpdmUgY29yZXMgcHJvamVjdCAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHBzOi8vZ2l0aHViLmNvbS9kaW5lc2hhbm5heXlhL3lpZml2ZV9yMC5naXQgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9jb3Jlcy95aWZpdmUvICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICBUaGlzIGlzIGEgc3RhbmRhbG9uZSB0ZXN0IGJlbmNoIHRvIHZhbGlkYXRlIHRoZSAgICAgICAgICAgIC8vLy8KKy8vLy8gICBEaWdpdGFsIGNvcmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAxLiBVc2VyIFJpc2MgY29yZSBpcyBib290ZWQgdXNpbmcgIGNvbXBpbGVkIGNvZGUgb2YgICAgICAgIC8vLy8KKy8vLy8gICAgICB1c2VyX3Jpc2NfYm9vdC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAyLiBVc2VyIFJpc2MgY29yZSB1c2VzIFNlcmlhbCBGbGFzaCBhbmQgU0RSQU0gdG8gYm9vdCAgICAgIC8vLy8KKy8vLy8gICAzLiBBZnRlciBzdWNjZXNzZnVsIGJvb3QsIFJpc2MgY29yZSB3aWxsIGNoZWNrIHRoZSBVQVJUICAgIC8vLy8KKy8vLy8gICAgICBSWCBEYXRhLCBJZiBpdCdzIGF2YWlsYWJsZSB0aGVuIGl0IGxvb3AgYmFjayB0aGUgc2FtZSAgIC8vLy8KKy8vLy8gICAgICBkYXRhIGluIHVhcnQgdHggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICA0LiBUZXN0IGJlbmNoIHNlbmQgcmFuZG9tIDQwIGNoYXJhY3RlciB0b3dhcmRzIFVzZXIgdWFydCAgIC8vLy8KKy8vLy8gICAgICBhbmQgZXhwZWN0IHNhbWUgZGF0YSB0byByZXR1cm4gYmFjayAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcihzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAtIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFJldmlzaW9uIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC4xIC0gMTZ0aCBGZWIgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gQ29weXJpZ2h0IChDKSAyMDAwIEF1dGhvcnMgYW5kIE9QRU5DT1JFUy5PUkcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgIC8vLy8KKy8vLy8gcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgIC8vLy8KKy8vLy8gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgIC8vLy8KKy8vLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCAgIC8vLy8KKy8vLy8gYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IC8vLy8KKy8vLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSAgIC8vLy8KKy8vLy8gbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlICAgICAgIC8vLy8KKy8vLy8gdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCAgIC8vLy8KKy8vLy8gd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAgICAgIC8vLy8KKy8vLy8gUFVSUE9TRS4gIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIC8vLy8KKy8vLy8gZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvdXJjZTsgaWYgbm90LCBkb3dubG9hZCBpdCAgIC8vLy8KKy8vLy8gZnJvbSBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvbGdwbC5zaHRtbCAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworYGRlZmF1bHRfbmV0dHlwZSB3aXJlCisKK2B0aW1lc2NhbGUgMSBucy8xMCBwcworCitgaW5jbHVkZSAidXByal9uZXRsaXN0cy52IgorCisKK21vZHVsZSB1c2VyX2Jhc2ljX3RiOworcGFyYW1ldGVyIENMSzFfUEVSSU9EID0gMTA7CitwYXJhbWV0ZXIgQ0xLMl9QRVJJT0QgPSAyOworCityZWcgICAgICAgICAgICBjbG9jayAgICAgICAgIDsKK3JlZyAgICAgICAgICAgIGNsb2NrMiAgICAgICAgOworcmVnICAgICAgICAgICAgd2JfcnN0X2kgICAgICA7CityZWcgICAgICAgICAgICBwb3dlcjEsIHBvd2VyMjsKK3JlZyAgICAgICAgICAgIHBvd2VyMywgcG93ZXI0OworCityZWcgICAgICAgICAgICB3YmRfZXh0X2N5Y19pOyAgLy8gc3Ryb2JlL3JlcXVlc3QKK3JlZyAgICAgICAgICAgIHdiZF9leHRfc3RiX2k7ICAvLyBzdHJvYmUvcmVxdWVzdAorcmVnIFszMTowXSAgICAgd2JkX2V4dF9hZHJfaTsgIC8vIGFkZHJlc3MKK3JlZyAgICAgICAgICAgIHdiZF9leHRfd2VfaTsgIC8vIHdyaXRlCityZWcgWzMxOjBdICAgICB3YmRfZXh0X2RhdF9pOyAgLy8gZGF0YSBvdXRwdXQKK3JlZyBbMzowXSAgICAgIHdiZF9leHRfc2VsX2k7ICAvLyBieXRlIGVuYWJsZQorCit3aXJlIFszMTowXSAgICB3YmRfZXh0X2RhdF9vOyAgLy8gZGF0YSBpbnB1dAord2lyZSAgICAgICAgICAgd2JkX2V4dF9hY2tfbzsgIC8vIGFja25vd2xlZ2VtZW50Cit3aXJlICAgICAgICAgICB3YmRfZXh0X2Vycl9vOyAgLy8gZXJyb3IKKworLy8gVXNlciBJL08KK3dpcmUgWzM3OjBdICAgIGlvX29lYiAgICAgICAgOword2lyZSBbMzc6MF0gICAgaW9fb3V0ICAgICAgICA7Cit3aXJlIFszNzowXSAgICBpb19pbiAgICAgICAgIDsKKword2lyZSBbMzc6MF0gICAgbXByal9pbyAgICAgICA7Cit3aXJlIFs3OjBdICAgICBtcHJqX2lvXzAgICAgIDsKK3JlZyAgICAgICAgICAgIHRlc3RfZmFpbCAgICAgOworcmVnIFszMTowXSAgICAgcmVhZF9kYXRhICAgICA7CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFVhcnQgQ29uZmlndXJhdGlvbgorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCityZWcgWzE6MF0gICAgICB1YXJ0X2RhdGFfYml0ICAgICAgICA7CityZWcJICAgICAgIHVhcnRfc3RvcF9iaXRzICAgICAgIDsgLy8gMDogMSBzdG9wIGJpdDsgMTogMiBzdG9wIGJpdDsKK3JlZwkgICAgICAgdWFydF9zdGlja19wYXJpdHkgICAgOyAvLyAxOiBmb3JjZSBldmVuIHBhcml0eQorcmVnCSAgICAgICB1YXJ0X3Bhcml0eV9lbiAgICAgICA7IC8vIHBhcml0eSBlbmFibGUKK3JlZwkgICAgICAgdWFydF9ldmVuX29kZF9wYXJpdHkgOyAvLyAwOiBvZGQgcGFyaXR5OyAxOiBldmVuIHBhcml0eQorCityZWcgWzc6MF0gICAgICB1YXJ0X2RhdGEgICAgICAgICAgICA7CityZWcgWzE1OjBdICAgICB1YXJ0X2Rpdmlzb3IgICAgICAgICA7CS8vIGRpdmlkZWQgYnkgbiAqIDE2CityZWcgWzE1OjBdICAgICB1YXJ0X3RpbWVvdXQgICAgICAgICA7Ly8gd2FpdCB0aW1lIGxpbWl0CisKK3JlZyBbMTU6MF0gICAgIHVhcnRfcnhfbnUgICAgICAgICAgIDsKK3JlZyBbMTU6MF0gICAgIHVhcnRfdHhfbnUgICAgICAgICAgIDsKK3JlZyBbNzowXSAgICAgIHVhcnRfd3JpdGVfZGF0YSBbMDozOV07CityZWcgCSAgICAgICB1YXJ0X2ZpZm9fZW5hYmxlICAgICA7CS8vIGZpZm8gbW9kZSBkaXNhYmxlCisKK3dpcmUgICAgICAgICAgIGNsb2NrX21vbjsKK2ludGVnZXIgICAgICAgIHRlc3Rfc3RlcDsKKworaW50ZWdlciBpLGo7CisKKwkvLyBFeHRlcm5hbCBjbG9jayBpcyB1c2VkIGJ5IGRlZmF1bHQuICBNYWtlIHRoaXMgYXJ0aWZpY2lhbGx5IGZhc3QgZm9yIHRoZQorCS8vIHNpbXVsYXRpb24uICBOb3JtYWxseSB0aGlzIHdvdWxkIGJlIGEgc2xvdyBjbG9jayBhbmQgdGhlIGRpZ2l0YWwgUExMCisJLy8gd291bGQgYmUgdGhlIGZhc3QgY2xvY2suCisKKwlhbHdheXMgIyhDTEsxX1BFUklPRC8yKSBjbG9jayAgPD0gKGNsb2NrID09PSAxJ2IwKTsKKwlhbHdheXMgIyhDTEsyX1BFUklPRC8yKSBjbG9jazIgPD0gKGNsb2NrMiA9PT0gMSdiMCk7CisKKwlpbml0aWFsIGJlZ2luCisJCXRlc3Rfc3RlcCA9IDA7CisJCWNsb2NrID0gMDsKKwkJY2xvY2syID0gMDsKKyAgICAgICAgICAgICAgICB3YmRfZXh0X2N5Y19pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICAgICAgICAgICAgICAgIHdiZF9leHRfc3RiX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgICAgICAgICAgICAgd2JkX2V4dF9hZHJfaSA9J2gwOyAgLy8gYWRkcmVzcworICAgICAgICAgICAgICAgIHdiZF9leHRfd2VfaSAgPSdoMDsgIC8vIHdyaXRlCisgICAgICAgICAgICAgICAgd2JkX2V4dF9kYXRfaSA9J2gwOyAgLy8gZGF0YSBvdXRwdXQKKyAgICAgICAgICAgICAgICB3YmRfZXh0X3NlbF9pID0naDA7ICAvLyBieXRlIGVuYWJsZQorCWVuZAorCisJYGlmZGVmIFdGRFVNUAorCSAgIGluaXRpYWwgYmVnaW4KKwkgICAJJGR1bXBmaWxlKCJzaW14LnZjZCIpOworCSAgIAkkZHVtcHZhcnMoNCwgdXNlcl9iYXNpY190Yik7CisJICAgZW5kCisgICAgICAgYGVuZGlmCisKKwlpbml0aWFsIGJlZ2luCisJCXdiX3JzdF9pIDw9IDEnYjE7CisJCSMxMDA7CisJCXdiX3JzdF9pIDw9IDEnYjA7CSAgICAJLy8gUmVsZWFzZSByZXNldAorCWVuZAoraW5pdGlhbAorYmVnaW4KKworICAgIzIwMDsgLy8gV2FpdCBmb3IgcmVzZXQgcmVtb3ZhbAorICAgcmVwZWF0ICgxMCkgQChwb3NlZGdlIGNsb2NrKTsKKyAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGFuZGFsb25lIFVzZXIgQmFzaWMgVGVzdCBTdGFydGVkIik7CisgICAKKyAgIHJlcGVhdCAoMikgQChwb3NlZGdlIGNsb2NrKTsKKworICAgdGVzdF9mYWlsPTA7CisgICBmb3JrCisgICAgICBiZWdpbgorCSAgLy8gRGVmYXVsdCBWYWx1ZSBDaGVjaworICAgICAgICAgIC8vIGNmZ19nbGJfY3RybCAgICAgICAgID0gcmVnXzBbNjowXTsKKyAgICAgICAgICAvLyB1YXJ0X2kyY191c2Jfc2VsICAgICA9IHJlZ18wWzg6N107CisgICAgICAgICAgLy8gY2ZnX3diX2Nsa19jdHJsICAgICAgPSByZWdfMFsxMTo5XTsKKyAgICAgICAgICAvLyBjZmdfcnRjX2Nsa19jdHJsICAgICA9IHJlZ18wWzE5OjEyXTsKKyAgICAgICAgICAvLyBjZmdfY3B1X2Nsa19jdHJsICAgICA9IHJlZ18wWzIzOjIwXTsKKyAgICAgICAgICAvLyBjZmdfc2RyYW1fY2xrX2N0cmwgICA9IHJlZ18wWzI3OjI0XTsKKyAgICAgICAgICAvLyBjZmdfdXNiX2Nsa19jdHJsICAgICA9IHJlZ18wWzMxOjI4XTsKKwkgICRkaXNwbGF5KCJTdGVwLTEsIENQVTogQ0xPQ0sxLCBSVEM6IENMT0NLMi8yLCBVU0I6IENMT0NLMiwgV0JTOkNMT0NLMSIpOworCSAgdGVzdF9zdGVwID0gMTsKKyAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDAsezQnaDAsNCdoMCw0J2gwLDgnaDAsMydiMDAwLDInYjAwLDcnaDAwfSk7CisJICBjbG9ja19tb25pdG9yKENMSzFfUEVSSU9ELENMSzJfUEVSSU9EKjIsQ0xLMl9QRVJJT0QsQ0xLMV9QRVJJT0QpOworCisJICAkZGlzcGxheSgiU3RlcC0yLCBDUFU6IENMT0NLMiwgUlRDOiBDTE9DSzIvKDIrMSksIFVTQjogQ0xPQ0syLzIsIFdCUzpDTE9DSzEvMiIpOworCSAgdGVzdF9zdGVwID0gMjsKKyAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDAsezQnaDgsNCdoMCw0J2g4LDgnaDEsMydiMTAwLDInYjAwLDcnaDAwfSk7CisJICBjbG9ja19tb25pdG9yKENMSzJfUEVSSU9ELCgzKSpDTEsyX1BFUklPRCwyKkNMSzJfUEVSSU9ELDIqQ0xLMV9QRVJJT0QpOworCisJICAkZGlzcGxheSgiU3RlcC0zLCBDUFU6IENMT0NLMS8yLCBSVEM6IENMT0NLMi8oMisyKSwgVVNCOiBDTE9DSzIvKDIrMSksIFdCUzpDTE9DSzEvKDIrMSkiKTsKKwkgIHRlc3Rfc3RlcCA9IDM7CisgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDAwLHs0J2g5LDQnaDAsNCdoNCw4J2gyLDMnYjEwMSwyJ2IwMCw3J2gwMH0pOworCSAgY2xvY2tfbW9uaXRvcigyKkNMSzFfUEVSSU9ELCg0KSpDTEsyX1BFUklPRCwzKkNMSzJfUEVSSU9ELDMqQ0xLMV9QRVJJT0QpOworCisJICAkZGlzcGxheSgiU3RlcC00LCBDUFU6IENMT0NLMS8zLCBSVEM6IENMT0NLMi8oMiszKSwgVVNCOiBDTE9DSzIvKDIrMiksIFdCUzpDTE9DSzEvKDIrMikiKTsKKwkgIHRlc3Rfc3RlcCA9IDQ7CisgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDAwLHs0J2hBLDQnaDAsNCdoNSw4J2gzLDMnYjExMCwyJ2IwMCw3J2gwMH0pOworCSAgY2xvY2tfbW9uaXRvcigzKkNMSzFfUEVSSU9ELDUqQ0xLMl9QRVJJT0QsNCpDTEsyX1BFUklPRCw0KkNMSzFfUEVSSU9EKTsKKworCSAgJGRpc3BsYXkoIlN0ZXAtNSwgQ1BVOiBDTE9DSzEvNCwgUlRDOiBDTE9DSzIvKDIrNCksIFVTQjogQ0xPQ0syLygyKzMpLCBXQlM6Q0xPQ0sxLygyKzMpIik7CisJICB0ZXN0X3N0ZXAgPSA1OworICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwMCx7NCdoQiw0J2gwLDQnaDYsOCdoNCwzJ2IxMTEsMidiMDAsNydoMDB9KTsKKwkgIGNsb2NrX21vbml0b3IoNCpDTEsxX1BFUklPRCw2KkNMSzJfUEVSSU9ELDUqQ0xLMl9QRVJJT0QsNSpDTEsxX1BFUklPRCk7CisKKwkgICRkaXNwbGF5KCJTdGVwLTYsIENQVTogQ0xPQ0sxLygyKzMpLCBSVEM6IENMT0NLMi8oMis1KSwgVVNCOiBDTE9DSzIvKDIrNCksIFdCUzpDTE9DSzEvKDIrMykiKTsKKwkgIHRlc3Rfc3RlcCA9IDY7CisgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDAwLHs0J2hDLDQnaDAsNCdoNyw4J2g1LDMnYjExMSwyJ2IwMCw3J2gwMH0pOworCSAgY2xvY2tfbW9uaXRvcig1KkNMSzFfUEVSSU9ELDcqQ0xLMl9QRVJJT0QsNipDTEsyX1BFUklPRCw1KkNMSzFfUEVSSU9EKTsKKworCSAgJGRpc3BsYXkoIlN0ZXAtNywgQ1BVOiBDTE9DSzEvKDIrMyksIFJUQzogQ0xPQ0syLygyKzYpLCBVU0I6IENMT0NLMi8oMis1KSwgV0JTOkNMT0NLMS8oMiszKSIpOworCSAgdGVzdF9zdGVwID0gNzsKKyAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDAsezQnaEQsNCdoMCw0J2g3LDgnaDYsMydiMTExLDInYjAwLDcnaDAwfSk7CisJICBjbG9ja19tb25pdG9yKDUqQ0xLMV9QRVJJT0QsOCpDTEsyX1BFUklPRCw3KkNMSzJfUEVSSU9ELDUqQ0xLMV9QRVJJT0QpOworCisJICAkZGlzcGxheSgiU3RlcC04LCBDUFU6IENMT0NLMS8oMiszKSwgUlRDOiBDTE9DSzIvKDIrNyksIFVTQjogQ0xPQ0syLygyKzYpLCBXQlM6Q0xPQ0sxLygyKzMpIik7CisJICB0ZXN0X3N0ZXAgPSA4OworICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwMCx7NCdoRSw0J2gwLDQnaDcsOCdoNywzJ2IxMTEsMidiMDAsNydoMDB9KTsKKwkgIGNsb2NrX21vbml0b3IoNSpDTEsxX1BFUklPRCw5KkNMSzJfUEVSSU9ELDgqQ0xLMl9QRVJJT0QsNSpDTEsxX1BFUklPRCk7CisKKwkgICRkaXNwbGF5KCJTdGVwLTksIENQVTogQ0xPQ0sxLygyKzMpLCBSVEM6IENMT0NLMi8oMis4KSwgVVNCOiBDTE9DSzIvKDIrNyksIFdCUzpDTE9DSzEvKDIrMykiKTsKKwkgIHRlc3Rfc3RlcCA9IDk7CisgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDAwLHs0J2hGLDQnaDAsNCdoNyw4J2g4LDMnYjExMSwyJ2IwMCw3J2gwMH0pOworCSAgY2xvY2tfbW9uaXRvcig1KkNMSzFfUEVSSU9ELDEwKkNMSzJfUEVSSU9ELDkqQ0xLMl9QRVJJT0QsNSpDTEsxX1BFUklPRCk7CisKKwkgICRkaXNwbGF5KCJTdGVwLTEwLCBDUFU6IENMT0NLMS8oMiszKSwgUlRDOiBDTE9DSzIvKDIrMTI4KSwgVVNCOiBDTE9DSzIvKDIrNyksIFdCUzpDTE9DSzEvKDIrMykiKTsKKwkgIHRlc3Rfc3RlcCA9IDEwOworICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwMCx7NCdoRiw0J2gwLDQnaDcsOCdoODAsMydiMTExLDInYjAwLDcnaDAwfSk7CisJICBjbG9ja19tb25pdG9yKDUqQ0xLMV9QRVJJT0QsMTMwKkNMSzJfUEVSSU9ELDkqQ0xLMl9QRVJJT0QsNSpDTEsxX1BFUklPRCk7CisKKwkgICRkaXNwbGF5KCJTdGVwLTEwLCBDUFU6IENMT0NLMS8oMiszKSwgUlRDOiBDTE9DSzIvKDIrMjU1KSwgVVNCOiBDTE9DSzIvKDIrNyksIFdCUzpDTE9DSzEvKDIrMykiKTsKKwkgIHRlc3Rfc3RlcCA9IDEwOworICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwMCx7NCdoRiw0J2gwLDQnaDcsOCdoRkYsMydiMTExLDInYjAwLDcnaDAwfSk7CisJICBjbG9ja19tb25pdG9yKDUqQ0xLMV9QRVJJT0QsMjU3KkNMSzJfUEVSSU9ELDkqQ0xLMl9QRVJJT0QsNSpDTEsxX1BFUklPRCk7CisKKyAgICAgICAgICRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKyAgICAgICAgICRkaXNwbGF5KCJNb25pdG9yOiBDaGVja2luZyB0aGUgY2hpcCBzaWduYXR1cmUgOiIpOworICAgICAgICAgLy8gUmVtb3ZlIFdiL1Bpbk11eCBSZXNldAorICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDAwLCdoMSk7CisKKwkgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDMwMDIwMDU4LHJlYWRfZGF0YSwzMidoODI3M184MzQzKTsKKwkgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDMwMDIwMDVDLHJlYWRfZGF0YSwzMidoMTQwMl8yMDIyKTsKKwkgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDMwMDIwMDYwLHJlYWRfZGF0YSwzMidoMDAwM180MDAwKTsKKworICAgICAgZW5kCisgICAKKyAgICAgIGJlZ2luCisgICAgICByZXBlYXQgKDIwMDAwKSBAKHBvc2VkZ2UgY2xvY2spOworICAgCQkvLyAkZGlzcGxheSgiKzEwMDAgY3ljbGVzIik7CisgICAgICB0ZXN0X2ZhaWwgPSAxOworICAgICAgZW5kCisgICAgICBqb2luX2FueQorICAgICAgZGlzYWJsZSBmb3JrOyAvL2Rpc2FibGUgcGVuZGluZyBmb3JrIGFjdGl2aXR5CisKKyAgIAorICAgICAgJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworICAgICAgaWYodGVzdF9mYWlsID09IDApIGJlZ2luCisgICAgICAgICBgaWZkZWYgR0wKKyAgICAgICAgICAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RhbmRhbG9uZSBVc2VyIFVBUlQgVGVzdCAoR0wpIFBhc3NlZCIpOworICAgICAgICAgYGVsc2UKKyAgICAgICAgICAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RhbmRhbG9uZSBVc2VyIFVBUlQgVGVzdCAoUlRMKSBQYXNzZWQiKTsKKyAgICAgICAgIGBlbmRpZgorICAgICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgICAgICBgaWZkZWYgR0wKKyAgICAgICAgICAgICAgJGRpc3BsYXkoIk1vbml0b3I6IFN0YW5kYWxvbmUgVXNlciBVQVJUIFRlc3QgKEdMKSBGYWlsZWQiKTsKKyAgICAgICAgICBgZWxzZQorICAgICAgICAgICAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RhbmRhbG9uZSBVc2VyIFVBUlQgVGVzdCAoUlRMKSBGYWlsZWQiKTsKKyAgICAgICAgICBgZW5kaWYKKyAgICAgICBlbmQKKyAgICAgICRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKyAgICAgICMxMDAKKyAgICAgICRmaW5pc2g7CitlbmQKKworCit3aXJlIFVTRVJfVkREMVY4ID0gMSdiMTsKK3dpcmUgVlNTID0gMSdiMDsKKworCit1c2VyX3Byb2plY3Rfd3JhcHBlciB1X3RvcCgKK2BpZmRlZiBVU0VfUE9XRVJfUElOUworICAgIC52Y2NkMShVU0VSX1ZERDFWOCksCS8vIFVzZXIgYXJlYSAxIDEuOFYgc3VwcGx5CisgICAgLnZzc2QxKFZTUyksCS8vIFVzZXIgYXJlYSAxIGRpZ2l0YWwgZ3JvdW5kCitgZW5kaWYKKyAgICAud2JfY2xrX2kgICAgICAgIChjbG9jayksICAvLyBTeXN0ZW0gY2xvY2sKKyAgICAudXNlcl9jbG9jazIgICAgIChjbG9jazIpLCAgLy8gUmVhbC10aW1lIGNsb2NrCisgICAgLndiX3JzdF9pICAgICAgICAod2JfcnN0X2kpLCAgLy8gUmVndWxhciBSZXNldCBzaWduYWwKKworICAgIC53YnNfY3ljX2kgICAod2JkX2V4dF9jeWNfaSksICAvLyBzdHJvYmUvcmVxdWVzdAorICAgIC53YnNfc3RiX2kgICAod2JkX2V4dF9zdGJfaSksICAvLyBzdHJvYmUvcmVxdWVzdAorICAgIC53YnNfYWRyX2kgICAod2JkX2V4dF9hZHJfaSksICAvLyBhZGRyZXNzCisgICAgLndic193ZV9pICAgICh3YmRfZXh0X3dlX2kpLCAgLy8gd3JpdGUKKyAgICAud2JzX2RhdF9pICAgKHdiZF9leHRfZGF0X2kpLCAgLy8gZGF0YSBvdXRwdXQKKyAgICAud2JzX3NlbF9pICAgKHdiZF9leHRfc2VsX2kpLCAgLy8gYnl0ZSBlbmFibGUKKworICAgIC53YnNfZGF0X28gICAod2JkX2V4dF9kYXRfbyksICAvLyBkYXRhIGlucHV0CisgICAgLndic19hY2tfbyAgICh3YmRfZXh0X2Fja19vKSwgIC8vIGFja25vd2xlZ2VtZW50CisKKyAKKyAgICAvLyBMb2dpYyBBbmFseXplciBTaWduYWxzCisgICAgLmxhX2RhdGFfaW4gICAgICAoJzEpICwKKyAgICAubGFfZGF0YV9vdXQgICAgICgpLAorICAgIC5sYV9vZW5iICAgICAgICAgKCcwKSwKKyAKKworICAgIC8vIElPcworICAgIC5pb19pbiAgICAgICAgICAoaW9faW4pICAsCisgICAgLmlvX291dCAgICAgICAgIChpb19vdXQpICwKKyAgICAuaW9fb2ViICAgICAgICAgKGlvX29lYikgLAorCisgICAgLnVzZXJfaXJxICAgICAgICgpIAorCispOworCitgaWZuZGVmIEdMIC8vIERyaXZlIFBvd2VyIGZvciBIb2xkIEZpeCBCdWYKKyAgICAvLyBBbGwgc3RhbmRhcmQgY2VsbCBuZWVkIHBvd2VyIGhvb2stdXAgZm9yIGZ1bmN0aW9uYWxpdHkgd29yaworICAgIGluaXRpYWwgYmVnaW4KKworCisgICAgZW5kCitgZW5kaWYgICAgCisKKwordGFzayBjbG9ja19tb25pdG9yOworaW5wdXQgWzE1OjBdIGV4cF9jcHVfcGVyaW9kOworaW5wdXQgWzE1OjBdIGV4cF9ydGNfcGVyaW9kOworaW5wdXQgWzE1OjBdIGV4cF91c2JfcGVyaW9kOworaW5wdXQgWzE1OjBdIGV4cF93YnNfcGVyaW9kOworYmVnaW4KKyAgIGZvcmNlIGNsb2NrX21vbiA9IHVfdG9wLnVfd2JfaG9zdC5jcHVfY2xrOworICAgY2hlY2tfY2xvY2tfcGVyaW9kKCJDUFUgQ0xvY2siLGV4cF9jcHVfcGVyaW9kKTsKKyAgIHJlbGVhc2UgY2xvY2tfbW9uOworCisgICBmb3JjZSBjbG9ja19tb24gPSB1X3RvcC51X3diX2hvc3QucnRjX2NsazsKKyAgIGNoZWNrX2Nsb2NrX3BlcmlvZCgiUlRDIENsb2NrIixleHBfcnRjX3BlcmlvZCk7CisgICByZWxlYXNlIGNsb2NrX21vbjsKKworICAgZm9yY2UgY2xvY2tfbW9uID0gdV90b3AudV93Yl9ob3N0LnVzYl9jbGs7CisgICBjaGVja19jbG9ja19wZXJpb2QoIlVTQiBDbG9jayIsZXhwX3VzYl9wZXJpb2QpOworICAgcmVsZWFzZSBjbG9ja19tb247CisKKyAgIGZvcmNlIGNsb2NrX21vbiA9IHVfdG9wLnVfd2JfaG9zdC53YnNfY2xrX291dDsKKyAgIGNoZWNrX2Nsb2NrX3BlcmlvZCgiV0JTIENsb2NrIixleHBfd2JzX3BlcmlvZCk7CisgICByZWxlYXNlIGNsb2NrX21vbjsKK2VuZAorZW5kdGFzaworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIENoZWNrIHRoZSBjbG9jayBwZXJpb2QKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordGFzayBjaGVja19jbG9ja19wZXJpb2Q7CitpbnB1dCBbMTI3OjBdIGNsa19uYW1lOworaW5wdXQgWzE1OjBdIGNsa19wZXJpb2Q7IC8vIGluIE5TCit0aW1lIHByZXZfdCwgbmV4dF90LCBwZXJpb2RkOworYmVnaW4KKwkkdGltZWZvcm1hdCgtMTIsMywibnMiLDEwKTsKKyAgIHJlcGVhdCgxKSBAKHBvc2VkZ2UgY2xvY2tfbW9uKTsKKyAgIHJlcGVhdCgxKSBAKHBvc2VkZ2UgY2xvY2tfbW9uKTsKKyAgIHByZXZfdCAgPSAkcmVhbHRpbWU7CisgICByZXBlYXQoMTAwKSBAKHBvc2VkZ2UgY2xvY2tfbW9uKTsKKyAgIG5leHRfdCAgPSAkcmVhbHRpbWU7CisgICBwZXJpb2RkID0gKG5leHRfdC1wcmV2X3QpLzEwMDsKKyAgIC8vcGVyaW9kZCA9IChwZXJpb2RkKS8xZTk7CisgICBpZihjbGtfcGVyaW9kICE9IHBlcmlvZGQpIGJlZ2luCisgICAgICAgJGRpc3BsYXkoIlNUQVRVUzogRkFJTCA9PiAlcyBFeHAgUGVyaW9kOiAlZCBSeGQ6ICVkIixjbGtfbmFtZSxjbGtfcGVyaW9kLHBlcmlvZGQpOworICAgICAgIHRlc3RfZmFpbCA9IDE7CisgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICRkaXNwbGF5KCJTVEFUVVM6IFBBU1MgPT4gJXMgIFBlcmlvZDogJWQgIixjbGtfbmFtZSxjbGtfcGVyaW9kKTsKKyAgIGVuZAorZW5kCitlbmR0YXNrCisKKworCisKKworCit0YXNrIHdiX3VzZXJfY29yZV93cml0ZTsKK2lucHV0IFszMTowXSBhZGRyZXNzOworaW5wdXQgWzMxOjBdIGRhdGE7CitiZWdpbgorICByZXBlYXQgKDEpIEAocG9zZWRnZSBjbG9jayk7CisgICMxOworICB3YmRfZXh0X2Fkcl9pID1hZGRyZXNzOyAgLy8gYWRkcmVzcworICB3YmRfZXh0X3dlX2kgID0naDE7ICAvLyB3cml0ZQorICB3YmRfZXh0X2RhdF9pID1kYXRhOyAgLy8gZGF0YSBvdXRwdXQKKyAgd2JkX2V4dF9zZWxfaSA9J2hGOyAgLy8gYnl0ZSBlbmFibGUKKyAgd2JkX2V4dF9jeWNfaSA9J2gxOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2JkX2V4dF9zdGJfaSA9J2gxOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2FpdCh3YmRfZXh0X2Fja19vID09IDEpOworICByZXBlYXQgKDEpIEAocG9zZWRnZSBjbG9jayk7CisgICMxOworICB3YmRfZXh0X2N5Y19pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X3N0Yl9pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X2Fkcl9pID0naDA7ICAvLyBhZGRyZXNzCisgIHdiZF9leHRfd2VfaSAgPSdoMDsgIC8vIHdyaXRlCisgIHdiZF9leHRfZGF0X2kgPSdoMDsgIC8vIGRhdGEgb3V0cHV0CisgIHdiZF9leHRfc2VsX2kgPSdoMDsgIC8vIGJ5dGUgZW5hYmxlCisgICRkaXNwbGF5KCJERUJVRyBXQiBVU0VSIEFDQ0VTUyBXUklURSBBZGRyZXNzIDogJXgsIERhdGEgOiAleCIsYWRkcmVzcyxkYXRhKTsKKyAgcmVwZWF0ICgyKSBAKHBvc2VkZ2UgY2xvY2spOworZW5kCitlbmR0YXNrCisKK3Rhc2sgIHdiX3VzZXJfY29yZV9yZWFkOworaW5wdXQgWzMxOjBdIGFkZHJlc3M7CitvdXRwdXQgWzMxOjBdIGRhdGE7CityZWcgICAgWzMxOjBdIGRhdGE7CitiZWdpbgorICByZXBlYXQgKDEpIEAocG9zZWRnZSBjbG9jayk7CisgICMxOworICB3YmRfZXh0X2Fkcl9pID1hZGRyZXNzOyAgLy8gYWRkcmVzcworICB3YmRfZXh0X3dlX2kgID0naDA7ICAvLyB3cml0ZQorICB3YmRfZXh0X2RhdF9pID0nMDsgIC8vIGRhdGEgb3V0cHV0CisgIHdiZF9leHRfc2VsX2kgPSdoRjsgIC8vIGJ5dGUgZW5hYmxlCisgIHdiZF9leHRfY3ljX2kgPSdoMTsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfc3RiX2kgPSdoMTsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdhaXQod2JkX2V4dF9hY2tfbyA9PSAxKTsKKyAgZGF0YSAgPSB3YmRfZXh0X2RhdF9vOyAgCisgIHJlcGVhdCAoMSkgQChwb3NlZGdlIGNsb2NrKTsKKyAgIzE7CisgIHdiZF9leHRfY3ljX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfc3RiX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfYWRyX2kgPSdoMDsgIC8vIGFkZHJlc3MKKyAgd2JkX2V4dF93ZV9pICA9J2gwOyAgLy8gd3JpdGUKKyAgd2JkX2V4dF9kYXRfaSA9J2gwOyAgLy8gZGF0YSBvdXRwdXQKKyAgd2JkX2V4dF9zZWxfaSA9J2gwOyAgLy8gYnl0ZSBlbmFibGUKKyAgJGRpc3BsYXkoIkRFQlVHIFdCIFVTRVIgQUNDRVNTIFJFQUQgQWRkcmVzcyA6ICV4LCBEYXRhIDogJXgiLGFkZHJlc3MsZGF0YSk7CisgIHJlcGVhdCAoMikgQChwb3NlZGdlIGNsb2NrKTsKK2VuZAorZW5kdGFzaworCit0YXNrICB3Yl91c2VyX2NvcmVfcmVhZF9jaGVjazsKK2lucHV0IFszMTowXSBhZGRyZXNzOworb3V0cHV0IFszMTowXSBkYXRhOworaW5wdXQgWzMxOjBdIGNtcF9kYXRhOworcmVnICAgIFszMTowXSBkYXRhOworYmVnaW4KKyAgcmVwZWF0ICgxKSBAKHBvc2VkZ2UgY2xvY2spOworICAjMTsKKyAgd2JkX2V4dF9hZHJfaSA9YWRkcmVzczsgIC8vIGFkZHJlc3MKKyAgd2JkX2V4dF93ZV9pICA9J2gwOyAgLy8gd3JpdGUKKyAgd2JkX2V4dF9kYXRfaSA9JzA7ICAvLyBkYXRhIG91dHB1dAorICB3YmRfZXh0X3NlbF9pID0naEY7ICAvLyBieXRlIGVuYWJsZQorICB3YmRfZXh0X2N5Y19pID0naDE7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X3N0Yl9pID0naDE7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YWl0KHdiZF9leHRfYWNrX28gPT0gMSk7CisgIGRhdGEgID0gd2JkX2V4dF9kYXRfbzsgIAorICByZXBlYXQgKDEpIEAocG9zZWRnZSBjbG9jayk7CisgICMxOworICB3YmRfZXh0X2N5Y19pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X3N0Yl9pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X2Fkcl9pID0naDA7ICAvLyBhZGRyZXNzCisgIHdiZF9leHRfd2VfaSAgPSdoMDsgIC8vIHdyaXRlCisgIHdiZF9leHRfZGF0X2kgPSdoMDsgIC8vIGRhdGEgb3V0cHV0CisgIHdiZF9leHRfc2VsX2kgPSdoMDsgIC8vIGJ5dGUgZW5hYmxlCisgIGlmKGRhdGEgIT09IGNtcF9kYXRhKSBiZWdpbgorICAgICAkZGlzcGxheSgiRVJST1IgOiBXQiBVU0VSIEFDQ0VTUyBSRUFEICBBZGRyZXNzIDogMHgleCwgRXhkOiAweCV4IFJ4ZDogMHgleCAiLGFkZHJlc3MsY21wX2RhdGEsZGF0YSk7CisgICAgIHRlc3RfZmFpbCA9IDE7CisgIGVuZCBlbHNlIGJlZ2luCisgICAgICRkaXNwbGF5KCJTVEFUVVM6IFdCIFVTRVIgQUNDRVNTIFJFQUQgIEFkZHJlc3MgOiAweCV4LCBEYXRhIDogMHgleCIsYWRkcmVzcyxkYXRhKTsKKyAgZW5kCisgIHJlcGVhdCAoMikgQChwb3NlZGdlIGNsb2NrKTsKK2VuZAorZW5kdGFzaworCitgaWZkZWYgR0wKKword2lyZSAgICAgICAgd2JkX3NwaV9zdGJfaSAgID0gdV90b3AudV9zcGlfbWFzdGVyLndiZF9zdGJfaTsKK3dpcmUgICAgICAgIHdiZF9zcGlfYWNrX28gICA9IHVfdG9wLnVfc3BpX21hc3Rlci53YmRfYWNrX287Cit3aXJlICAgICAgICB3YmRfc3BpX3dlX2kgICAgPSB1X3RvcC51X3NwaV9tYXN0ZXIud2JkX3dlX2k7Cit3aXJlIFszMTowXSB3YmRfc3BpX2Fkcl9pICAgPSB1X3RvcC51X3NwaV9tYXN0ZXIud2JkX2Fkcl9pOword2lyZSBbMzE6MF0gd2JkX3NwaV9kYXRfaSAgID0gdV90b3AudV9zcGlfbWFzdGVyLndiZF9kYXRfaTsKK3dpcmUgWzMxOjBdIHdiZF9zcGlfZGF0X28gICA9IHVfdG9wLnVfc3BpX21hc3Rlci53YmRfZGF0X287Cit3aXJlIFszOjBdICB3YmRfc3BpX3NlbF9pICAgPSB1X3RvcC51X3NwaV9tYXN0ZXIud2JkX3NlbF9pOworCit3aXJlICAgICAgICB3YmRfc2RyYW1fc3RiX2kgPSB1X3RvcC51X3NkcmFtX2N0cmwud2Jfc3RiX2k7Cit3aXJlICAgICAgICB3YmRfc2RyYW1fYWNrX28gPSB1X3RvcC51X3NkcmFtX2N0cmwud2JfYWNrX287Cit3aXJlICAgICAgICB3YmRfc2RyYW1fd2VfaSAgPSB1X3RvcC51X3NkcmFtX2N0cmwud2Jfd2VfaTsKK3dpcmUgWzMxOjBdIHdiZF9zZHJhbV9hZHJfaSA9IHVfdG9wLnVfc2RyYW1fY3RybC53Yl9hZGRyX2k7Cit3aXJlIFszMTowXSB3YmRfc2RyYW1fZGF0X2kgPSB1X3RvcC51X3NkcmFtX2N0cmwud2JfZGF0X2k7Cit3aXJlIFszMTowXSB3YmRfc2RyYW1fZGF0X28gPSB1X3RvcC51X3NkcmFtX2N0cmwud2JfZGF0X287Cit3aXJlIFszOjBdICB3YmRfc2RyYW1fc2VsX2kgPSB1X3RvcC51X3NkcmFtX2N0cmwud2Jfc2VsX2k7CisKK3dpcmUgICAgICAgIHdiZF91YXJ0X3N0Yl9pICA9IHVfdG9wLnVfdWFydF9pMmNfdXNiLnJlZ19jczsKK3dpcmUgICAgICAgIHdiZF91YXJ0X2Fja19vICA9IHVfdG9wLnVfdWFydF9pMmNfdXNiLnJlZ19hY2s7Cit3aXJlICAgICAgICB3YmRfdWFydF93ZV9pICAgPSB1X3RvcC51X3VhcnRfaTJjX3VzYi5yZWdfd3I7Cit3aXJlIFs3OjBdICB3YmRfdWFydF9hZHJfaSAgPSB1X3RvcC51X3VhcnRfaTJjX3VzYi5yZWdfYWRkcjsKK3dpcmUgWzc6MF0gIHdiZF91YXJ0X2RhdF9pICA9IHVfdG9wLnVfdWFydF9pMmNfdXNiLnJlZ193ZGF0YTsKK3dpcmUgWzc6MF0gIHdiZF91YXJ0X2RhdF9vICA9IHVfdG9wLnVfdWFydF9pMmNfdXNiLnJlZ19yZGF0YTsKK3dpcmUgICAgICAgIHdiZF91YXJ0X3NlbF9pICA9IHVfdG9wLnVfdWFydF9pMmNfdXNiLnJlZ19iZTsKKworYGVuZGlmCisKKy8qKgorYGlmZGVmIEdMCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSSVNDIElNRU0gYW1kIERNRU0gTW9uaXRvcmluZyBUQVNLCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2BkZWZpbmUgUklTQ19DT1JFICB1c2VyX3VhcnRfdGIudV90b3AudV9jb3JlLnVfcmlzY3ZfdG9wCisKK2Fsd2F5c0AocG9zZWRnZSBgUklTQ19DT1JFLndiX2NsaykgYmVnaW4KKyAgICBpZihgUklTQ19DT1JFLndiZF9pbWVtX2Fja19pKQorICAgICAgICAgICRkaXNwbGF5KCJSSVNDVi1ERUJVRyA9PiBJTUVNIEFERFJFU1M6ICV4IFJlYWQgRGF0YSA6ICV4IiwgYFJJU0NfQ09SRS53YmRfaW1lbV9hZHJfbyxgUklTQ19DT1JFLndiZF9pbWVtX2RhdF9pKTsKKyAgICBpZihgUklTQ19DT1JFLndiZF9kbWVtX2Fja19pICYmIGBSSVNDX0NPUkUud2JkX2RtZW1fd2VfbykKKyAgICAgICAgICAkZGlzcGxheSgiUklTQ1YtREVCVUcgPT4gRE1FTSBBRERSRVNTOiAleCBXcml0ZSBEYXRhOiAleCBSZXNvbnNlOiAleCIsIGBSSVNDX0NPUkUud2JkX2RtZW1fYWRyX28sYFJJU0NfQ09SRS53YmRfZG1lbV9kYXRfbyk7CisgICAgaWYoYFJJU0NfQ09SRS53YmRfZG1lbV9hY2tfaSAmJiAhYFJJU0NfQ09SRS53YmRfZG1lbV93ZV9vKQorICAgICAgICAgICRkaXNwbGF5KCJSSVNDVi1ERUJVRyA9PiBETUVNIEFERFJFU1M6ICV4IFJFQUQgRGF0YSA6ICV4IFJlc29uc2U6ICV4IiwgYFJJU0NfQ09SRS53YmRfZG1lbV9hZHJfbyxgUklTQ19DT1JFLndiZF9kbWVtX2RhdF9pKTsKK2VuZAorCitgZW5kaWYKKyoqLworZW5kbW9kdWxlCitgZGVmYXVsdF9uZXR0eXBlIHdpcmUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvdXNlcl9pMmNtL01ha2VmaWxlIGIvdmVyaWxvZy9kdi91c2VyX2kyY20vTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc4OGVkOAotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvdXNlcl9pMmNtL01ha2VmaWxlCkBAIC0wLDAgKzEsMTExIEBACisjIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjAgRWZhYmxlc3MgQ29ycG9yYXRpb24KKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisKKyMjIENhcmF2ZWwgUG9pbnRlcnMKK0NBUkFWRUxfUk9PVCA/PSAuLi8uLi8uLi9jYXJhdmVsCitDQVJBVkVMX1BBVEggPz0gJChDQVJBVkVMX1JPT1QpCitDQVJBVkVMX0ZJUk1XQVJFX1BBVEggPSAkKENBUkFWRUxfUEFUSCkvdmVyaWxvZy9kdi9jYXJhdmVsCitDQVJBVkVMX1ZFUklMT0dfUEFUSCAgPSAkKENBUkFWRUxfUEFUSCkvdmVyaWxvZworQ0FSQVZFTF9SVExfUEFUSCA9ICQoQ0FSQVZFTF9WRVJJTE9HX1BBVEgpL3J0bAorQ0FSQVZFTF9CRUhBVklPVVJBTF9NT0RFTFMgPSAkKENBUkFWRUxfVkVSSUxPR19QQVRIKS9kdi9jYXJhdmVsCisKKworIyMgVXNlciBQcm9qZWN0IFBvaW50ZXJzCitVUFJKX1ZFUklMT0dfUEFUSCA/PSAuLi8uLi8uLi92ZXJpbG9nCitVUFJKX1JUTF9QQVRIID0gJChVUFJKX1ZFUklMT0dfUEFUSCkvcnRsCitVUFJKX0dMX1BBVEggPSAkKFVQUkpfVkVSSUxPR19QQVRIKS9nbAorVVBSSl9CRUhBVklPVVJBTF9NT0RFTFMgPSAuLi9tb2RlbAorVVBSSl9CRUhBVklPVVJBTF9BR0VOVFMgPSAuLi9hZ2VudHMKK1VQUkpfSU5DTFVERV9QQVRIMSA9ICQoVVBSSl9SVExfUEFUSCkveWlmaXZlL3ljcjFjL3NyYy9pbmNsdWRlcworVVBSSl9JTkNMVURFX1BBVEgyID0gJChVUFJKX1JUTF9QQVRIKS9zZHJhbV9jdHJsL3NyYy9kZWZzCitVUFJKX0lOQ0xVREVfUEFUSDMgPSAkKFVQUkpfUlRMX1BBVEgpL2kyY20vc3JjL2luY2x1ZGVzCitVUFJKX0lOQ0xVREVfUEFUSDQgPSAkKFVQUkpfUlRMX1BBVEgpL3VzYjFfaG9zdC9zcmMvaW5jbHVkZXMKK1VQUkpfSU5DTFVERV9QQVRINSA9ICQoVVBSSl9SVExfUEFUSCkvbWJpc3QvaW5jbHVkZQorCisjIyBZSUZJVkUgRklSTVdBUkUKK1lJRklWRV9GSVJNV0FSRV9QQVRIID0gJChVUFJKX1ZFUklMT0dfUEFUSCkvZHYvZmlybXdhcmUKK0dDQzY0X1BSRUZJWD89cmlzY3Y2NC11bmtub3duLWVsZgorCisjIyBSSVNDViBHQ0MgCitHQ0NfUEFUSD89L2VmL2FwcHMvYmluCitHQ0NfUFJFRklYPz1yaXNjdjMyLXVua25vd24tZWxmCitQREtfUEFUSD89L2VmL3RlY2gvU1cvc2t5MTMwQQorCisjIyBTaW11bGF0aW9uIG1vZGU6IFJUTC9HTAorU0lNPz1SVEwKK0RVTVA/PU9GRgorCisuU1VGRklYRVM6CisKK1BBVFRFUk4gPSB1c2VyX2kyY20KKworYWxsOiAgJHtQQVRURVJOOj0udmNkfQorCitoZXg6ICAke1BBVFRFUk46PS5oZXh9CisKK3Z2cDogICR7UEFUVEVSTjo9LnZ2cH0KKworJS52dnA6ICVfdGIudgorCSR7R0NDNjRfUFJFRklYfS1nY2MgLU8yIC1mdW5yb2xsLWxvb3BzIC1mcGVlbC1sb29wcyAtZmdjc2Utc20gLWZnY3NlLWxhcyAgLURfX1JWQ19FWFQgLXN0YXRpYyAtc3RkPWdudTk5IC1mbm8tY29tbW9uIC1mbm8tYnVpbHRpbi1wcmludGYgLURUQ009MSAtV2EsLW1hcmNoPXJ2MzJpbWMgLW1hcmNoPXJ2MzJpbWMgLW1hYmk9aWxwMzIgLURGTEFHU19TVFI9XCIiLU8yIC1mdW5yb2xsLWxvb3BzIC1mcGVlbC1sb29wcyAtZmdjc2Utc20gLWZnY3NlLWxhcyAiXCIgIC1jIC1JLi8gLUkkKFlJRklWRV9GSVJNV0FSRV9QQVRIKSAgdXNlcl91YXJ0LmMgLW8gdXNlcl91YXJ0Lm8KKwkke0dDQzY0X1BSRUZJWH0tZ2NjIC1PMiAtZnVucm9sbC1sb29wcyAtZnBlZWwtbG9vcHMgLWZnY3NlLXNtIC1mZ2NzZS1sYXMgIC1EX19SVkNfRVhUIC1zdGF0aWMgLXN0ZD1nbnU5OSAtZm5vLWNvbW1vbiAtZm5vLWJ1aWx0aW4tcHJpbnRmIC1EVENNPTEgLVdhLC1tYXJjaD1ydjMyaW1jIC1tYXJjaD1ydjMyaW1jIC1tYWJpPWlscDMyIC1ERkxBR1NfU1RSPVwiIi1PMiAtZnVucm9sbC1sb29wcyAtZnBlZWwtbG9vcHMgLWZnY3NlLXNtIC1mZ2NzZS1sYXMgIlwiICAtRF9fQVNTRU1CTFlfXz0xIC1jIC1JLi8gLUkkKFlJRklWRV9GSVJNV0FSRV9QQVRIKSAgJChZSUZJVkVfRklSTVdBUkVfUEFUSCkvY3J0X3RjbS5TIC1vIGNydF90Y20ubworCSR7R0NDNjRfUFJFRklYfS1nY2MgLW8gdXNlcl91YXJ0LmVsZiAtVCAkKFlJRklWRV9GSVJNV0FSRV9QQVRIKS9saW5rX3RjbS5sZCB1c2VyX3VhcnQubyBjcnRfdGNtLm8gLW5vc3RhcnRmaWxlcyAtbm9zdGRsaWIgLWxjIC1sZ2NjIC1tYXJjaD1ydjMyaW1jIC1tYWJpPWlscDMyCisJJHtHQ0M2NF9QUkVGSVh9LW9iamNvcHkgLU8gdmVyaWxvZyB1c2VyX3VhcnQuZWxmIHVzZXJfdWFydC5oZXgKKwkke0dDQzY0X1BSRUZJWH0tb2JqZHVtcCAtRCB1c2VyX3VhcnQuZWxmID4gdXNlcl91YXJ0LmR1bXAKKwlybSBjcnRfdGNtLm8gdXNlcl91YXJ0Lm8KK2lmZXEgKCQoU0lNKSxSVEwpCisgICBpZmVxICgkKERVTVApLE9GRikKKwlpdmVyaWxvZyAtZzIwMDUtc3YgLURGVU5DVElPTkFMIC1EU0lNIC1JICQoUERLX1BBVEgpIFwKKwktSSAkKENBUkFWRUxfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSAkKENBUkFWRUxfUlRMX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfTU9ERUxTKSAgICAtSSAkKFVQUkpfUlRMX1BBVEgpIC1JICQoVVBSSl9WRVJJTE9HX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfQUdFTlRTKSAgICBcCisJLUkgJChVUFJKX0lOQ0xVREVfUEFUSDEpICAgIC1JICQoVVBSSl9JTkNMVURFX1BBVEgyKSAtSSAkKFVQUkpfSU5DTFVERV9QQVRIMykgXAorCS1JICQoVVBSSl9JTkNMVURFX1BBVEg0KSAtSSAkKFVQUkpfSU5DTFVERV9QQVRINSkgXAorCSQ8IC1vICRAIAorICAgIGVsc2UgIAorCWl2ZXJpbG9nIC1nMjAwNS1zdiAtRFdGRFVNUCAtREZVTkNUSU9OQUwgLURTSU0gLUkgJChQREtfUEFUSCkgXAorCS1JICQoQ0FSQVZFTF9CRUhBVklPVVJBTF9NT0RFTFMpIC1JICQoQ0FSQVZFTF9SVExfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9NT0RFTFMpICAgIC1JICQoVVBSSl9SVExfUEFUSCkgLUkgJChVUFJKX1ZFUklMT0dfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9BR0VOVFMpICAgIFwKKwktSSAkKFVQUkpfSU5DTFVERV9QQVRIMSkgICAgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDIpIC1JICQoVVBSSl9JTkNMVURFX1BBVEgzKSBcCisJLUkgJChVUFJKX0lOQ0xVREVfUEFUSDQpIC1JICQoVVBSSl9JTkNMVURFX1BBVEg1KSBcCisJJDwgLW8gJEAgCisgICBlbmRpZgorZWxzZSAgCisJaXZlcmlsb2cgLWcyMDA1LXN2IC1ERlVOQ1RJT05BTCAtRFNJTSAtREdMIC1JICQoUERLX1BBVEgpIFwKKwktSSAkKENBUkFWRUxfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSAkKENBUkFWRUxfUlRMX1BBVEgpIC1JICQoQ0FSQVZFTF9WRVJJTE9HX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSAkKFVQUkpfR0xfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9BR0VOVFMpICAgIFwKKwkkPCAtbyAkQCAKK2VuZGlmCisKKyUudmNkOiAlLnZ2cAorCXZ2cCAkPAorCislLmVsZjogJS5jICQoQ0FSQVZFTF9GSVJNV0FSRV9QQVRIKS9zZWN0aW9ucy5sZHMgJChDQVJBVkVMX0ZJUk1XQVJFX1BBVEgpL3N0YXJ0LnMKKwkke0dDQzY0X1BSRUZJWH0tZ2NjIC1JICQoQ0FSQVZFTF9QQVRIKSAtbWFyY2g9cnYzMmltYyAtbWFiaT1pbHAzMiAtV2wsLUJzdGF0aWMsLVQsJChDQVJBVkVMX0ZJUk1XQVJFX1BBVEgpL3NlY3Rpb25zLmxkcywtLXN0cmlwLWRlYnVnIC1mZnJlZXN0YW5kaW5nIC1ub3N0ZGxpYiAtbyAkQCAkKENBUkFWRUxfRklSTVdBUkVfUEFUSCkvc3RhcnQucyAkPAorCislLmhleDogCisJZWNobyBAIlRoaXMgaXMgdXNlciBib290IHRlc3QsIG5vdGluZyB0byBjb21waWxlIHRoZSBtYW5nbWVudCBjb3JlIGNvZGUiCisKKyUuYmluOiAlLmVsZgorCSR7R0NDNjRfUFJFRklYfS1vYmpjb3B5IC1PIGJpbmFyeSAkPCAvZGV2L3N0ZG91dCB8IHRhaWwgLWMgKzEwNDg1NzcgPiAkQAorCisjIC0tLS0gQ2xlYW4gLS0tLQorCitjbGVhbjoKKwlybSAtZiAqLmVsZiAqLmhleCAqLmJpbiAqLnZ2cCAqLnZjZCAqLmxvZyAqLmR1bXAKKworLlBIT05ZOiBjbGVhbiBoZXggYWxsCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3VzZXJfaTJjbS9ydW5faXZlcmlsb2cgYi92ZXJpbG9nL2R2L3VzZXJfaTJjbS9ydW5faXZlcmlsb2cKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uM2FlMWZmZAotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvdXNlcl9pMmNtL3J1bl9pdmVyaWxvZwpAQCAtMCwwICsxLDM3IEBACisjIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworIyAvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxLCBEaW5lc2ggQW5uYXl5YQorIyAvLyAKKyMgLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIC8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjIC8vCisjIC8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjIC8vCisjIC8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIC8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisjIC8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorIyAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworcmlzY3Y2NC11bmtub3duLWVsZi1nY2MgLU8yIC1mdW5yb2xsLWxvb3BzIC1mcGVlbC1sb29wcyAtZmdjc2Utc20gLWZnY3NlLWxhcyAgLURfX1JWQ19FWFQgLXN0YXRpYyAtc3RkPWdudTk5IC1mbm8tY29tbW9uIC1mbm8tYnVpbHRpbi1wcmludGYgLURUQ009MSAtV2EsLW1hcmNoPXJ2MzJpbWMgLW1hcmNoPXJ2MzJpbWMgLW1hYmk9aWxwMzIgLURGTEFHU19TVFI9XCIiLU8yIC1mdW5yb2xsLWxvb3BzIC1mcGVlbC1sb29wcyAtZmdjc2Utc20gLWZnY3NlLWxhcyAiXCIgIC1jIC1JLi8gLUkuLi8uLi9ydGwvc3ludGFjb3JlL3NjcjEvc2ltL3Rlc3RzL2NvbW1vbiAgdXNlcl91YXJ0LmMgLW8gdXNlcl91YXJ0Lm8KKworcmlzY3Y2NC11bmtub3duLWVsZi1nY2MgLU8yIC1mdW5yb2xsLWxvb3BzIC1mcGVlbC1sb29wcyAtZmdjc2Utc20gLWZnY3NlLWxhcyAgLURfX1JWQ19FWFQgLXN0YXRpYyAtc3RkPWdudTk5IC1mbm8tY29tbW9uIC1mbm8tYnVpbHRpbi1wcmludGYgLURUQ009MSAtV2EsLW1hcmNoPXJ2MzJpbWMgLW1hcmNoPXJ2MzJpbWMgLW1hYmk9aWxwMzIgLURGTEFHU19TVFI9XCIiLU8yIC1mdW5yb2xsLWxvb3BzIC1mcGVlbC1sb29wcyAtZmdjc2Utc20gLWZnY3NlLWxhcyAiXCIgIC1EX19BU1NFTUJMWV9fPTEgLWMgLUkuLyAtSS4uLy4uL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvY29tbW9uLyAgLi4vLi4vcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9jb21tb24vY3J0X3RjbS5TIC1vIGNydF90Y20ubworCityaXNjdjY0LXVua25vd24tZWxmLWdjYyAtbyB1c2VyX3VhcnQuZWxmIC1UIC4uLy4uL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvY29tbW9uL2xpbmtfdGNtLmxkIHVzZXJfdWFydC5vIGNydF90Y20ubyAtbm9zdGFydGZpbGVzIC1ub3N0ZGxpYiAtbGMgLWxnY2MgLW1hcmNoPXJ2MzJpbWMgLW1hYmk9aWxwMzIKKworcmlzY3Y2NC11bmtub3duLWVsZi1vYmpjb3B5IC1PIHZlcmlsb2cgdXNlcl91YXJ0LmVsZiB1c2VyX3VhcnQuaGV4CisKK3Jpc2N2NjQtdW5rbm93bi1lbGYtb2JqZHVtcCAtRCB1c2VyX3VhcnQuZWxmID4gdXNlcl91YXJ0LmR1bXAKKworcm0gY3J0X3RjbS5vIHVzZXJfdWFydC5vCisKKyNpdmVyaWxvZyB3aXRoIHdhdmVmb3JtIGR1bXAKK2l2ZXJpbG9nIC1nMjAwNS1zdiAtREZVTkNUSU9OQUwgLURTSU0gLUkgJFBES19QQVRIIC1JICAuLi8uLi8uLi9jYXJhdmVsL3Zlcmlsb2cvcnRsICAtSSAuLi8gLUkgLi4vLi4vLi4vdmVyaWxvZy9ydGwgLUkgLi4vIC1JIC4uLy4uLy4uL3Zlcmlsb2cgLUkgLi4vLi4vLi4vdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL2luY2x1ZGVzICAgLUkgLi4vLi4vLi4vdmVyaWxvZy9ydGwvc2RyYW1fY3RybC9zcmMvZGVmcyAtSSAuLi8uLi8uLi92ZXJpbG9nL3J0bC9pMmNtL3NyYy9pbmNsdWRlcyAtSSAkQ0FSQVZFTF9ST09UL3Zlcmlsb2cvZHYvY2FyYXZlbCAtSSAuLi9tb2RlbCAtSSAuLi9hZ2VudHMgdXNlcl9pMmNtX3RiLnYgLW8gdXNlcl9pMmNtX3RiLnZ2cAorCisKKwordnZwIHVzZXJfaTJjbV90Yi52dnAgfCB0ZWUgdGVzdC5sb2cKKworXHJtIC1yZiB1c2VyX2kyY21fdGIudnZwCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3VzZXJfaTJjbS91c2VyX2kyY21fdGIudiBiL3Zlcmlsb2cvZHYvdXNlcl9pMmNtL3VzZXJfaTJjbV90Yi52Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyNjc3NGQKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3VzZXJfaTJjbS91c2VyX2kyY21fdGIudgpAQCAtMCwwICsxLDU1MiBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogIDIwMjEgLCBEaW5lc2ggQW5uYXl5YQorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogTW9kaWZpZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFN0YW5kYWxvbmUgVXNlciB2YWxpZGF0aW9uIFRlc3QgYmVuY2ggICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBZSUZpdmUgY29yZXMgcHJvamVjdCAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHBzOi8vZ2l0aHViLmNvbS9kaW5lc2hhbm5heXlhL3lpZml2ZV9yMC5naXQgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICBUaGlzIGlzIGEgc3RhbmRhbG9uZSB0ZXN0IGJlbmNoIHRvIHZhbGlkYXRlIHRoZSAgICAgICAgICAgIC8vLy8KKy8vLy8gICBpMmMgTWFzdGVyIC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcihzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAtIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFJldmlzaW9uIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC4xIC0gMTZ0aCBGZWIgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gQ29weXJpZ2h0IChDKSAyMDAwIEF1dGhvcnMgYW5kIE9QRU5DT1JFUy5PUkcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgIC8vLy8KKy8vLy8gcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgIC8vLy8KKy8vLy8gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgIC8vLy8KKy8vLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCAgIC8vLy8KKy8vLy8gYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IC8vLy8KKy8vLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSAgIC8vLy8KKy8vLy8gbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlICAgICAgIC8vLy8KKy8vLy8gdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCAgIC8vLy8KKy8vLy8gd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAgICAgIC8vLy8KKy8vLy8gUFVSUE9TRS4gIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIC8vLy8KKy8vLy8gZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvdXJjZTsgaWYgbm90LCBkb3dubG9hZCBpdCAgIC8vLy8KKy8vLy8gZnJvbSBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvbGdwbC5zaHRtbCAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworYGRlZmF1bHRfbmV0dHlwZSB3aXJlCisKK2B0aW1lc2NhbGUgMSBucyAvIDEgbnMKKworYGluY2x1ZGUgInMyNWZsMjU2cy5zdiIKK2BpbmNsdWRlICJ1cHJqX25ldGxpc3RzLnYiCitgaW5jbHVkZSAibXQ0OGxjOG04YTIudiIKK2BpbmNsdWRlICJpMmNfc2xhdmVfbW9kZWwudiIKKworCitgZGVmaW5lIEFERFJfU1BBQ0VfVUFSVCAgMzInaDMwMDFfMDAwMAorYGRlZmluZSBBRERSX1NQQUNFX0kyQ00gIDMyJ2gzMDAxXzAwNDAKK2BkZWZpbmUgQUREUl9TUEFDRV9QSU5NVVggIDMyJ2gzMDAyXzAwMDAKKworCittb2R1bGUgdGJfdG9wOworCityZWcgICAgICAgICAgICBjbG9jayAgICAgICAgIDsKK3JlZyAgICAgICAgICAgIHdiX3JzdF9pICAgICAgOworcmVnICAgICAgICAgICAgcG93ZXIxLCBwb3dlcjI7CityZWcgICAgICAgICAgICBwb3dlcjMsIHBvd2VyNDsKKworcmVnICAgICAgICAgICAgd2JkX2V4dF9jeWNfaTsgIC8vIHN0cm9iZS9yZXF1ZXN0CityZWcgICAgICAgICAgICB3YmRfZXh0X3N0Yl9pOyAgLy8gc3Ryb2JlL3JlcXVlc3QKK3JlZyBbMzE6MF0gICAgIHdiZF9leHRfYWRyX2k7ICAvLyBhZGRyZXNzCityZWcgICAgICAgICAgICB3YmRfZXh0X3dlX2k7ICAvLyB3cml0ZQorcmVnIFszMTowXSAgICAgd2JkX2V4dF9kYXRfaTsgIC8vIGRhdGEgb3V0cHV0CityZWcgWzM6MF0gICAgICB3YmRfZXh0X3NlbF9pOyAgLy8gYnl0ZSBlbmFibGUKKword2lyZSBbMzE6MF0gICAgd2JkX2V4dF9kYXRfbzsgIC8vIGRhdGEgaW5wdXQKK3dpcmUgICAgICAgICAgIHdiZF9leHRfYWNrX287ICAvLyBhY2tub3dsZWdlbWVudAord2lyZSAgICAgICAgICAgd2JkX2V4dF9lcnJfbzsgIC8vIGVycm9yCisKKy8vIFVzZXIgSS9PCit3aXJlIFszNzowXSAgICBpb19vZWIgICAgICAgIDsKK3dpcmUgWzM3OjBdICAgIGlvX291dCAgICAgICAgOword2lyZSBbMzc6MF0gICAgaW9faW4gICAgICAgICA7CisKK3dpcmUgWzM3OjBdICAgIG1wcmpfaW8gICAgICAgOword2lyZSBbNzowXSAgICAgbXByal9pb18wICAgICA7CityZWcgICAgICAgICAgICB0ZXN0X2ZhaWwgICAgIDsKK3JlZyBbMzE6MF0gICAgIHJlYWRfZGF0YSAgICAgOworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBVYXJ0IENvbmZpZ3VyYXRpb24KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitpbnRlZ2VyIGksajsKKworCS8vIEV4dGVybmFsIGNsb2NrIGlzIHVzZWQgYnkgZGVmYXVsdC4gIE1ha2UgdGhpcyBhcnRpZmljaWFsbHkgZmFzdCBmb3IgdGhlCisJLy8gc2ltdWxhdGlvbi4gIE5vcm1hbGx5IHRoaXMgd291bGQgYmUgYSBzbG93IGNsb2NrIGFuZCB0aGUgZGlnaXRhbCBQTEwKKwkvLyB3b3VsZCBiZSB0aGUgZmFzdCBjbG9jay4KKworCWFsd2F5cyAjMTIuNSBjbG9jayA8PSAoY2xvY2sgPT09IDEnYjApOworCisJaW5pdGlhbCBiZWdpbgorCQljbG9jayA9IDA7CisgICAgICAgICAgICAgICAgd2JkX2V4dF9jeWNfaSA9J2gwOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAgICAgICAgICAgICB3YmRfZXh0X3N0Yl9pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICAgICAgICAgICAgICAgIHdiZF9leHRfYWRyX2kgPSdoMDsgIC8vIGFkZHJlc3MKKyAgICAgICAgICAgICAgICB3YmRfZXh0X3dlX2kgID0naDA7ICAvLyB3cml0ZQorICAgICAgICAgICAgICAgIHdiZF9leHRfZGF0X2kgPSdoMDsgIC8vIGRhdGEgb3V0cHV0CisgICAgICAgICAgICAgICAgd2JkX2V4dF9zZWxfaSA9J2gwOyAgLy8gYnl0ZSBlbmFibGUKKwllbmQKKworCWBpZmRlZiBXRkRVTVAKKwkgICBpbml0aWFsIGJlZ2luCisJICAgCSRkdW1wZmlsZSgidGJfdG9wLnZjZCIpOworCSAgIAkkZHVtcHZhcnMoMCwgdGJfdG9wKTsKKwkgICBlbmQKKyAgICAgICBgZW5kaWYKKworCWluaXRpYWwgYmVnaW4KKwkJd2JfcnN0X2kgPD0gMSdiMTsKKwkJIzEwMDsKKwkJd2JfcnN0X2kgPD0gMSdiMDsJICAgIAkvLyBSZWxlYXNlIHJlc2V0CisJZW5kCitpbml0aWFsCitiZWdpbgorICAgdGVzdF9mYWlsID0gMDsKKworICAgIzIwMDsgLy8gV2FpdCBmb3IgcmVzZXQgcmVtb3ZhbAorICAgcmVwZWF0ICgxMCkgQChwb3NlZGdlIGNsb2NrKTsKKyAgICRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworICAgJGRpc3BsYXkoIiAgIFRlc3RpbmcgSTJDTSBSZWFkL1dyaXRlIEFjY2VzcyAgICAgICAgICAgIik7CisgICAkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKyAgIAorCisgICByZXBlYXQgKDEwKSBAKHBvc2VkZ2UgY2xvY2spOworICAgIzE7CisgICAvLyBFbmFibGUgSTJNIEJsb2NrICYgV0IgUmVzZXQgYW5kIEVuYWJsZSBJMkNNIE11eCBTZWxlY3QKKyAgIHdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwMCwnaEExKTsKKworICAgLy8gRW5hYmxlIEkyQyBNdWx0aSBGdW5jdGlvbmFsIFBvcnRzCisgICB3Yl91c2VyX2NvcmVfd3JpdGUoYEFERFJfU1BBQ0VfUElOTVVYKydoMDAzOCwnaDIwMCk7CisKKyAgIHJlcGVhdCAoMTAwKSBAKHBvc2VkZ2UgY2xvY2spOyAgCisKKyAgICBAKHBvc2VkZ2UgIGNsb2NrKTsKKyAgICAkZGlzcGxheSgiLS0tLS0tLS0tLSBJbml0aWFsaXplIEkyQyBNYXN0ZXIgLS0tLS0tLS0tLSIpOyAKKworICAgIC8vV3JpcmUgUHJlc2NhbGUgcmVnaXN0ZXJzCisgICAgIHdiX3VzZXJfY29yZV93cml0ZShgQUREUl9TUEFDRV9JMkNNKyg4J2gwPDwyKSw4J2hDNyk7ICAKKyAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKGBBRERSX1NQQUNFX0kyQ00rKDgnaDE8PDIpLDgnaDAwKTsgIAorICAgIC8vIENvcmUgRW5hYmxlCisgICAgIHdiX3VzZXJfY29yZV93cml0ZShgQUREUl9TUEFDRV9JMkNNKyg4J2gyPDwyKSw4J2g4MCk7ICAKKyAgICAKKyAgICAvLyBXcml0aW5nIERhdGEKKworICAgICRkaXNwbGF5KCItLS0tLS0tLS0tIFdyaXRpbmcgRGF0YSAtLS0tLS0tLS0tIik7IAorICAgIHdiX3VzZXJfY29yZV93cml0ZShgQUREUl9TUEFDRV9JMkNNKyg4J2gzPDwyKSw4J2gyMCk7IC8vIFNsYXZlIEFkZHIgKyBXUiAgCisgICAgd2JfdXNlcl9jb3JlX3dyaXRlKGBBRERSX1NQQUNFX0kyQ00rKDgnaDQ8PDIpLDgnaDkwKTsgIAorICAgIHJlYWRfZGF0YVsxXSA9IDEnYjE7CisgICAgd2hpbGUocmVhZF9kYXRhWzFdPT0xKQorICAgICAgd2JfdXNlcl9jb3JlX3JlYWQoYEFERFJfU1BBQ0VfSTJDTSsoOCdoNDw8MikscmVhZF9kYXRhKTsgIAorICAgICAKKyAgICB3Yl91c2VyX2NvcmVfd3JpdGUoYEFERFJfU1BBQ0VfSTJDTSsoOCdoMzw8MiksOCdoNjYpOyAgCisgICAgd2JfdXNlcl9jb3JlX3dyaXRlKGBBRERSX1NQQUNFX0kyQ00rKDgnaDQ8PDIpLDgnaDEwKTsgIAorCisgICAgcmVhZF9kYXRhWzFdID0gMSdiMTsKKyAgICB3aGlsZShyZWFkX2RhdGFbMV09PTEpCisgICAgICB3Yl91c2VyX2NvcmVfcmVhZChgQUREUl9TUEFDRV9JMkNNKyg4J2g0PDwyKSxyZWFkX2RhdGEpOyAgCisgICAKKyAgIC8qIEJ5dGUxOiAxMiAqLyAKKyAgICB3Yl91c2VyX2NvcmVfd3JpdGUoYEFERFJfU1BBQ0VfSTJDTSsoOCdoMzw8MiksOCdoMTIpOyAgCisgICAgd2JfdXNlcl9jb3JlX3dyaXRlKGBBRERSX1NQQUNFX0kyQ00rKDgnaDQ8PDIpLDgnaDEwKTsgLy8gTm8gU3RvcCArIFdyaXRlICAKKworICAgIHJlYWRfZGF0YVsxXSA9IDEnYjE7CisgICAgd2hpbGUocmVhZF9kYXRhWzFdPT0xKQorICAgICAgd2JfdXNlcl9jb3JlX3JlYWQoYEFERFJfU1BBQ0VfSTJDTSsoOCdoNDw8MikscmVhZF9kYXRhKTsgIAorICAgCisgICAvKiBCeXRlMTogMzQgKi8gCisgICAgd2JfdXNlcl9jb3JlX3dyaXRlKGBBRERSX1NQQUNFX0kyQ00rKDgnaDM8PDIpLDgnaDM0KTsgIAorICAgIHdiX3VzZXJfY29yZV93cml0ZShgQUREUl9TUEFDRV9JMkNNKyg4J2g0PDwyKSw4J2gxMCk7IC8vIE5vIFN0b3AgKyBXcml0ZSAKKworICAgIHJlYWRfZGF0YVsxXSA9IDEnYjE7CisgICAgd2hpbGUocmVhZF9kYXRhWzFdPT0xKQorICAgICAgd2JfdXNlcl9jb3JlX3JlYWQoYEFERFJfU1BBQ0VfSTJDTSsoOCdoNDw8MikscmVhZF9kYXRhKTsgIAorCisgICAvKiBCeXRlMTogNTYgKi8gCisgICAgd2JfdXNlcl9jb3JlX3dyaXRlKGBBRERSX1NQQUNFX0kyQ00rKDgnaDM8PDIpLDgnaDU2KTsgIAorICAgIHdiX3VzZXJfY29yZV93cml0ZShgQUREUl9TUEFDRV9JMkNNKyg4J2g0PDwyKSw4J2gxMCk7IC8vIE5vIFN0b3AgKyBXcml0ZSAKKworICAgIHJlYWRfZGF0YVsxXSA9IDEnYjE7CisgICAgd2hpbGUocmVhZF9kYXRhWzFdPT0xKQorICAgICAgd2JfdXNlcl9jb3JlX3JlYWQoYEFERFJfU1BBQ0VfSTJDTSsoOCdoNDw8MikscmVhZF9kYXRhKTsgIAorCisgICAvKiBCeXRlMTogNzggKi8gCisgICAgd2JfdXNlcl9jb3JlX3dyaXRlKGBBRERSX1NQQUNFX0kyQ00rKDgnaDM8PDIpLDgnaDc4KTsgIAorICAgIHdiX3VzZXJfY29yZV93cml0ZShgQUREUl9TUEFDRV9JMkNNKyg4J2g0PDwyKSw4J2g1MCk7IC8vIFN0b3AgKyBXcml0ZSAKKworICAgIHJlYWRfZGF0YVsxXSA9IDEnYjE7CisgICAgd2hpbGUocmVhZF9kYXRhWzFdPT0xKQorICAgICAgd2JfdXNlcl9jb3JlX3JlYWQoYEFERFJfU1BBQ0VfSTJDTSsoOCdoNDw8MikscmVhZF9kYXRhKTsgIAorCisgICAgLy9SZWFkaW5nIERhdGEKKyAgICAKKyAgICAvL1dyaXJlIEFkZHJlc3MKKyAgICAkZGlzcGxheSgiLS0tLS0tLS0tLSBXcml0aW5nIERhdGEgLS0tLS0tLS0tLSIpOyAKKyAgICB3Yl91c2VyX2NvcmVfd3JpdGUoYEFERFJfU1BBQ0VfSTJDTSsoOCdoMzw8MiksOCdoMjApOyAgCisgICAgd2JfdXNlcl9jb3JlX3dyaXRlKGBBRERSX1NQQUNFX0kyQ00rKDgnaDQ8PDIpLDgnaDkwKTsgIAorICAgIHJlYWRfZGF0YVsxXSA9IDEnYjE7CisgICAgd2hpbGUocmVhZF9kYXRhWzFdPT0xKQorICAgICAgd2JfdXNlcl9jb3JlX3JlYWQoYEFERFJfU1BBQ0VfSTJDTSsoOCdoNDw8MikscmVhZF9kYXRhKTsgIAorICAgICAKKyAgICB3Yl91c2VyX2NvcmVfd3JpdGUoYEFERFJfU1BBQ0VfSTJDTSsoOCdoMzw8MiksOCdoNjYpOyAgCisgICAgd2JfdXNlcl9jb3JlX3dyaXRlKGBBRERSX1NQQUNFX0kyQ00rKDgnaDQ8PDIpLDgnaDUwKTsgIAorCisgICAgcmVhZF9kYXRhWzFdID0gMSdiMTsKKyAgICB3aGlsZShyZWFkX2RhdGFbMV09PTEpCisgICAgICB3Yl91c2VyX2NvcmVfcmVhZChgQUREUl9TUEFDRV9JMkNNKyg4J2g0PDwyKSxyZWFkX2RhdGEpOyAgCisKKyAgICAvL0dlbmVyYXRlIFJlYWQKKyAgICAkZGlzcGxheSgiLS0tLS0tLS0tLSBXcml0aW5nIERhdGEgLS0tLS0tLS0tLSIpOyAKKyAgICB3Yl91c2VyX2NvcmVfd3JpdGUoYEFERFJfU1BBQ0VfSTJDTSsoOCdoMzw8MiksOCdoMjEpOyAvLyBTbGF2ZSBBZGRyICsgUkQgIAorICAgIHdiX3VzZXJfY29yZV93cml0ZShgQUREUl9TUEFDRV9JMkNNKyg4J2g0PDwyKSw4J2g5MCk7ICAKKyAgICByZWFkX2RhdGFbMV0gPSAxJ2IxOworICAgIHdoaWxlKHJlYWRfZGF0YVsxXT09MSkKKyAgICAgIHdiX3VzZXJfY29yZV9yZWFkKGBBRERSX1NQQUNFX0kyQ00rKDgnaDQ8PDIpLHJlYWRfZGF0YSk7ICAKKworICAgIC8qIEJZVEUtMSA6IDB4MTIgICovIAorICAgIHdiX3VzZXJfY29yZV93cml0ZShgQUREUl9TUEFDRV9JMkNNKyg4J2g0PDwyKSw4J2gyMCk7ICAvLyBSRCArIEFDSworCisgICAgcmVhZF9kYXRhWzFdID0gMSdiMTsKKyAgICB3aGlsZShyZWFkX2RhdGFbMV09PTEpCisgICAgICB3Yl91c2VyX2NvcmVfcmVhZChgQUREUl9TUEFDRV9JMkNNKyg4J2g0PDwyKSxyZWFkX2RhdGEpOyAgCisKKyAgICAvL0NvbXBhcmUgcmVjZWl2ZWQgZGF0YQorICAgIHdiX3VzZXJfY29yZV9yZWFkX2NtcChgQUREUl9TUEFDRV9JMkNNKyg4J2gzPDwyKSw4J2gxMik7ICAKKyAgICAgCisgICAgLyogQllURS0yIDogMHgzNCAgKi8gCisgICAgd2JfdXNlcl9jb3JlX3dyaXRlKGBBRERSX1NQQUNFX0kyQ00rKDgnaDQ8PDIpLDgnaDIwKTsgIC8vIFJEICsgQUNLCisKKyAgICByZWFkX2RhdGFbMV0gPSAxJ2IxOworICAgIHdoaWxlKHJlYWRfZGF0YVsxXT09MSkKKyAgICAgIHdiX3VzZXJfY29yZV9yZWFkKGBBRERSX1NQQUNFX0kyQ00rKDgnaDQ8PDIpLHJlYWRfZGF0YSk7ICAKKworICAgIC8vQ29tcGFyZSByZWNlaXZlZCBkYXRhCisgICAgd2JfdXNlcl9jb3JlX3JlYWRfY21wKGBBRERSX1NQQUNFX0kyQ00rKDgnaDM8PDIpLDgnaDM0KTsgIAorCisgICAgLyogQllURS0zIDogMHg1NiAgKi8gCisgICAgd2JfdXNlcl9jb3JlX3dyaXRlKGBBRERSX1NQQUNFX0kyQ00rKDgnaDQgPDwyKSw4J2gyMCk7ICAvLyBSRCArIEFDSworCisgICAgcmVhZF9kYXRhWzFdID0gMSdiMTsKKyAgICB3aGlsZShyZWFkX2RhdGFbMV09PTEpCisgICAgICB3Yl91c2VyX2NvcmVfcmVhZChgQUREUl9TUEFDRV9JMkNNKyg4J2g0PDwyKSxyZWFkX2RhdGEpOyAgCisKKyAgICAvL0NvbXBhcmUgcmVjZWl2ZWQgZGF0YQorICAgIHdiX3VzZXJfY29yZV9yZWFkX2NtcChgQUREUl9TUEFDRV9JMkNNKyg4J2gzPDwyKSw4J2g1Nik7ICAKKworICAgIC8qIEJZVEUtNCA6IDB4NzggICovIAorICAgIHdiX3VzZXJfY29yZV93cml0ZShgQUREUl9TUEFDRV9JMkNNKyg4J2g0PDwyKSw4J2g2OCk7ICAvLyBTVE9QICsgUkQgKyBOQUNLIAorCisgICAgcmVhZF9kYXRhWzFdID0gMSdiMTsKKyAgICB3aGlsZShyZWFkX2RhdGFbMV09PTEpCisgICAgICB3Yl91c2VyX2NvcmVfcmVhZChgQUREUl9TUEFDRV9JMkNNKyg4J2g0IDw8MikscmVhZF9kYXRhKTsgIAorCisgICAgLy9Db21wYXJlIHJlY2VpdmVkIGRhdGEKKyAgICB3Yl91c2VyX2NvcmVfcmVhZF9jbXAoYEFERFJfU1BBQ0VfSTJDTSsoOCdoMyA8PDIpLDgnaDc4KTsgIAorCisgICAgcmVwZWF0KDEwMClAKHBvc2VkZ2UgY2xvY2spOworCisKKworICAgICAkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisgICAgIGlmKHRlc3RfZmFpbCA9PSAwKSBiZWdpbgorICAgICAgICBgaWZkZWYgR0wKKyAgICAgICAgICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGFuZGFsb25lIFVzZXIgSTJNIFRlc3QgKEdMKSBQYXNzZWQiKTsKKyAgICAgICAgYGVsc2UKKyAgICAgICAgICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGFuZGFsb25lIFVzZXIgSTJNIFRlc3QgKFJUTCkgUGFzc2VkIik7CisgICAgICAgIGBlbmRpZgorICAgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICAgYGlmZGVmIEdMCisgICAgICAgICAgICAgJGRpc3BsYXkoIk1vbml0b3I6IFN0YW5kYWxvbmUgVXNlciBJMk0gVGVzdCAoR0wpIEZhaWxlZCIpOworICAgICAgICAgYGVsc2UKKyAgICAgICAgICAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RhbmRhbG9uZSBVc2VyIEkyTSBUZXN0IChSVEwpIEZhaWxlZCIpOworICAgICAgICAgYGVuZGlmCisgICAgICBlbmQKKyAgICAgJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworICAgICAjMTAwCisgICAgICRmaW5pc2g7CitlbmQKKworCit3aXJlIFVTRVJfVkREMVY4ID0gMSdiMTsKK3dpcmUgVlNTID0gMSdiMDsKKworCit1c2VyX3Byb2plY3Rfd3JhcHBlciB1X3RvcCgKK2BpZmRlZiBVU0VfUE9XRVJfUElOUworICAgIC52Y2NkMShVU0VSX1ZERDFWOCksCS8vIFVzZXIgYXJlYSAxIDEuOFYgc3VwcGx5CisgICAgLnZzc2QxKFZTUyksCS8vIFVzZXIgYXJlYSAxIGRpZ2l0YWwgZ3JvdW5kCitgZW5kaWYKKyAgICAud2JfY2xrX2kgICAgICAgIChjbG9jayksICAvLyBTeXN0ZW0gY2xvY2sKKyAgICAudXNlcl9jbG9jazIgICAgICgxJ2IxKSwgIC8vIFJlYWwtdGltZSBjbG9jaworICAgIC53Yl9yc3RfaSAgICAgICAgKHdiX3JzdF9pKSwgIC8vIFJlZ3VsYXIgUmVzZXQgc2lnbmFsCisKKyAgICAud2JzX2N5Y19pICAgKHdiZF9leHRfY3ljX2kpLCAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAud2JzX3N0Yl9pICAgKHdiZF9leHRfc3RiX2kpLCAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAud2JzX2Fkcl9pICAgKHdiZF9leHRfYWRyX2kpLCAgLy8gYWRkcmVzcworICAgIC53YnNfd2VfaSAgICAod2JkX2V4dF93ZV9pKSwgIC8vIHdyaXRlCisgICAgLndic19kYXRfaSAgICh3YmRfZXh0X2RhdF9pKSwgIC8vIGRhdGEgb3V0cHV0CisgICAgLndic19zZWxfaSAgICh3YmRfZXh0X3NlbF9pKSwgIC8vIGJ5dGUgZW5hYmxlCisKKyAgICAud2JzX2RhdF9vICAgKHdiZF9leHRfZGF0X28pLCAgLy8gZGF0YSBpbnB1dAorICAgIC53YnNfYWNrX28gICAod2JkX2V4dF9hY2tfbyksICAvLyBhY2tub3dsZWdlbWVudAorCisgCisgICAgLy8gTG9naWMgQW5hbHl6ZXIgU2lnbmFscworICAgIC5sYV9kYXRhX2luICAgICAgKCcxKSAsCisgICAgLmxhX2RhdGFfb3V0ICAgICAoKSwKKyAgICAubGFfb2VuYiAgICAgICAgICgnMCksCisgCisKKyAgICAvLyBJT3MKKyAgICAuaW9faW4gICAgICAgICAgKGlvX2luKSAgLAorICAgIC5pb19vdXQgICAgICAgICAoaW9fb3V0KSAsCisgICAgLmlvX29lYiAgICAgICAgIChpb19vZWIpICwKKworICAgIC51c2VyX2lycSAgICAgICAoKSAKKworKTsKKworYGlmbmRlZiBHTCAvLyBEcml2ZSBQb3dlciBmb3IgSG9sZCBGaXggQnVmCisgICAgLy8gQWxsIHN0YW5kYXJkIGNlbGwgbmVlZCBwb3dlciBob29rLXVwIGZvciBmdW5jdGlvbmFsaXR5IHdvcmsKKyAgICBpbml0aWFsIGJlZ2luCisKKyAgICBlbmQKK2BlbmRpZiAgICAKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgSW50ZWdyYXRlIHRoZSBTZXJpYWwgZmxhc2ggd2l0aCBxdXJkIHN1cHBvcnQgdG8KKy8vICB1c2VyIGNvcmUgdXNpbmcgdGhlIGdwaW8gcGFkcworLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgd2lyZSBmbGFzaF9jbGsgPSBpb19vdXRbMjRdOworICAgd2lyZSBmbGFzaF9jc2IgPSBpb19vdXRbMjhdOworICAgLy8gQ3JlYXRpbmcgUGFkIERlbGF5CisgICB3aXJlICMxIGlvX29lYl8yOSA9IGlvX29lYlsyOV07CisgICB3aXJlICMxIGlvX29lYl8zMCA9IGlvX29lYlszMF07CisgICB3aXJlICMxIGlvX29lYl8zMSA9IGlvX29lYlszMV07CisgICB3aXJlICMxIGlvX29lYl8zMiA9IGlvX29lYlszMl07CisgICB0cmkgICMxIGZsYXNoX2lvMCA9IChpb19vZWJfMjk9PSAxJ2IwKSA/IGlvX291dFsyOV0gOiAxJ2J6OworICAgdHJpICAjMSBmbGFzaF9pbzEgPSAoaW9fb2ViXzMwPT0gMSdiMCkgPyBpb19vdXRbMzBdIDogMSdiejsKKyAgIHRyaSAgIzEgZmxhc2hfaW8yID0gKGlvX29lYl8zMT09IDEnYjApID8gaW9fb3V0WzMxXSA6IDEnYno7CisgICB0cmkgICMxIGZsYXNoX2lvMyA9IChpb19vZWJfMzI9PSAxJ2IwKSA/IGlvX291dFszMl0gOiAxJ2J6OworCisgICBhc3NpZ24gaW9faW5bMjldID0gZmxhc2hfaW8wOworICAgYXNzaWduIGlvX2luWzMwXSA9IGZsYXNoX2lvMTsKKyAgIGFzc2lnbiBpb19pblszMV0gPSBmbGFzaF9pbzI7CisgICBhc3NpZ24gaW9faW5bMzJdID0gZmxhc2hfaW8zOworCisKKyAgIC8vIFF1YXJkIGZsYXNoCisgICAgIHMyNWZsMjU2cyAjKC5tZW1fZmlsZV9uYW1lKCJ1c2VyX3VhcnQuaGV4IiksCisJICAgICAgICAgLm90cF9maWxlX25hbWUoIm5vbmUiKSwgCisgICAgICAgICAgICAgICAgIC5UaW1pbmdNb2RlbCgiUzI1Rkw1MTJTQUdNRkkwMTBfRl8zMHBGIikpIAorCQkgdV9zcGlfZmxhc2hfMjU2bWIKKyAgICAgICAoCisgICAgICAgICAgIC8vIERhdGEgSW5wdXRzL091dHB1dHMKKyAgICAgICAuU0kgICAgICAoZmxhc2hfaW8wKSwKKyAgICAgICAuU08gICAgICAoZmxhc2hfaW8xKSwKKyAgICAgICAvLyBDb250cm9scworICAgICAgIC5TQ0sgICAgIChmbGFzaF9jbGspLAorICAgICAgIC5DU05lZyAgIChmbGFzaF9jc2IpLAorICAgICAgIC5XUE5lZyAgIChmbGFzaF9pbzIpLAorICAgICAgIC5IT0xETmVnIChmbGFzaF9pbzMpLAorICAgICAgIC5SU1ROZWcgICghd2JfcnN0X2kpCisKKyAgICAgICApOworCisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEkyQworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3RyaSBzY2wsc2RhOworCithc3NpZ24gc2RhICA9ICAoaW9fb2ViWzIyXSA9PSAxJ2IwKSA/IGlvX291dFsyMl0gOiAxJ2J6OworYXNzaWduIHNjbCAgID0gKGlvX29lYlsyM10gPT0gMSdiMCkgPyBpb19vdXRbMjNdOiAxJ2J6OworYXNzaWduIGlvX2luWzIyXSAgPSAgc2RhOworYXNzaWduIGlvX2luWzIzXSAgPSAgc2NsOworCitwdWxsdXAgcDEoc2NsKTsgLy8gcHVsbHVwIHNjbCBsaW5lCitwdWxsdXAgcDIoc2RhKTsgLy8gcHVsbHVwIHNkYSBsaW5lCisKKyAKK2kyY19zbGF2ZV9tb2RlbCB1X2kyY19zbGF2ZSAoCisJLnNjbCAgIChzY2wpLCAKKwkuc2RhICAgKHNkYSkKKyAgICAgICApOworCisKK3Rhc2sgd2JfdXNlcl9jb3JlX3dyaXRlOworaW5wdXQgWzMxOjBdIGFkZHJlc3M7CitpbnB1dCBbMzE6MF0gZGF0YTsKK2JlZ2luCisgIHJlcGVhdCAoMSkgQChwb3NlZGdlIGNsb2NrKTsKKyAgIzE7CisgIHdiZF9leHRfYWRyX2kgPWFkZHJlc3M7ICAvLyBhZGRyZXNzCisgIHdiZF9leHRfd2VfaSAgPSdoMTsgIC8vIHdyaXRlCisgIHdiZF9leHRfZGF0X2kgPWRhdGE7ICAvLyBkYXRhIG91dHB1dAorICB3YmRfZXh0X3NlbF9pID0naEY7ICAvLyBieXRlIGVuYWJsZQorICB3YmRfZXh0X2N5Y19pID0naDE7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X3N0Yl9pID0naDE7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YWl0KHdiZF9leHRfYWNrX28gPT0gMSk7CisgIHJlcGVhdCAoMSkgQChwb3NlZGdlIGNsb2NrKTsKKyAgIzE7CisgIHdiZF9leHRfY3ljX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfc3RiX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfYWRyX2kgPSdoMDsgIC8vIGFkZHJlc3MKKyAgd2JkX2V4dF93ZV9pICA9J2gwOyAgLy8gd3JpdGUKKyAgd2JkX2V4dF9kYXRfaSA9J2gwOyAgLy8gZGF0YSBvdXRwdXQKKyAgd2JkX2V4dF9zZWxfaSA9J2gwOyAgLy8gYnl0ZSBlbmFibGUKKyAgJGRpc3BsYXkoIkRFQlVHIFdCIFVTRVIgQUNDRVNTIFdSSVRFIEFkZHJlc3MgOiAleCwgRGF0YSA6ICV4IixhZGRyZXNzLGRhdGEpOworICByZXBlYXQgKDIpIEAocG9zZWRnZSBjbG9jayk7CitlbmQKK2VuZHRhc2sKKwordGFzayAgd2JfdXNlcl9jb3JlX3JlYWQ7CitpbnB1dCBbMzE6MF0gYWRkcmVzczsKK291dHB1dCBbMzE6MF0gZGF0YTsKK3JlZyAgICBbMzE6MF0gZGF0YTsKK2JlZ2luCisgIHJlcGVhdCAoMSkgQChwb3NlZGdlIGNsb2NrKTsKKyAgIzE7CisgIHdiZF9leHRfYWRyX2kgPWFkZHJlc3M7ICAvLyBhZGRyZXNzCisgIHdiZF9leHRfd2VfaSAgPSdoMDsgIC8vIHdyaXRlCisgIHdiZF9leHRfZGF0X2kgPScwOyAgLy8gZGF0YSBvdXRwdXQKKyAgd2JkX2V4dF9zZWxfaSA9J2hGOyAgLy8gYnl0ZSBlbmFibGUKKyAgd2JkX2V4dF9jeWNfaSA9J2gxOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2JkX2V4dF9zdGJfaSA9J2gxOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2FpdCh3YmRfZXh0X2Fja19vID09IDEpOworICBkYXRhICA9IHdiZF9leHRfZGF0X287ICAKKyAgcmVwZWF0ICgxKSBAKHBvc2VkZ2UgY2xvY2spOworICAjMTsKKyAgd2JkX2V4dF9jeWNfaSA9J2gwOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2JkX2V4dF9zdGJfaSA9J2gwOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2JkX2V4dF9hZHJfaSA9J2gwOyAgLy8gYWRkcmVzcworICB3YmRfZXh0X3dlX2kgID0naDA7ICAvLyB3cml0ZQorICB3YmRfZXh0X2RhdF9pID0naDA7ICAvLyBkYXRhIG91dHB1dAorICB3YmRfZXh0X3NlbF9pID0naDA7ICAvLyBieXRlIGVuYWJsZQorICAvLyRkaXNwbGF5KCJERUJVRyBXQiBVU0VSIEFDQ0VTUyBSRUFEIEFkZHJlc3MgOiAleCwgRGF0YSA6ICV4IixhZGRyZXNzLGRhdGEpOworICByZXBlYXQgKDIpIEAocG9zZWRnZSBjbG9jayk7CitlbmQKK2VuZHRhc2sKKwordGFzayAgd2JfdXNlcl9jb3JlX3JlYWRfY21wOworaW5wdXQgWzMxOjBdIGFkZHJlc3M7CitpbnB1dCBbMzE6MF0gY21wX2RhdGE7CityZWcgICAgWzMxOjBdIGRhdGE7CitiZWdpbgorICByZXBlYXQgKDEpIEAocG9zZWRnZSBjbG9jayk7CisgICMxOworICB3YmRfZXh0X2Fkcl9pID1hZGRyZXNzOyAgLy8gYWRkcmVzcworICB3YmRfZXh0X3dlX2kgID0naDA7ICAvLyB3cml0ZQorICB3YmRfZXh0X2RhdF9pID0nMDsgIC8vIGRhdGEgb3V0cHV0CisgIHdiZF9leHRfc2VsX2kgPSdoRjsgIC8vIGJ5dGUgZW5hYmxlCisgIHdiZF9leHRfY3ljX2kgPSdoMTsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfc3RiX2kgPSdoMTsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdhaXQod2JkX2V4dF9hY2tfbyA9PSAxKTsKKyAgZGF0YSAgPSB3YmRfZXh0X2RhdF9vOyAgCisgIHJlcGVhdCAoMSkgQChwb3NlZGdlIGNsb2NrKTsKKyAgIzE7CisgIHdiZF9leHRfY3ljX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfc3RiX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfYWRyX2kgPSdoMDsgIC8vIGFkZHJlc3MKKyAgd2JkX2V4dF93ZV9pICA9J2gwOyAgLy8gd3JpdGUKKyAgd2JkX2V4dF9kYXRfaSA9J2gwOyAgLy8gZGF0YSBvdXRwdXQKKyAgd2JkX2V4dF9zZWxfaSA9J2gwOyAgLy8gYnl0ZSBlbmFibGUKKyAgaWYoZGF0YSA9PT0gY21wX2RhdGEpIGJlZ2luCisgICAgICRkaXNwbGF5KCJTVEFUVVM6IERFQlVHIFdCIFVTRVIgQUNDRVNTIFJFQUQgQWRkcmVzcyA6ICV4LCBEYXRhIDogJXgiLGFkZHJlc3MsZGF0YSk7CisgIGVuZCBlbHNlIGJlZ2luCisgICAgICRkaXNwbGF5KCJFUlJPUjogREVCVUcgV0IgVVNFUiBBQ0NFU1MgUkVBRCBBZGRyZXNzIDogJXgsIEV4cCBEYXRhIDogJXggUnhkIERhdGE6ICIsYWRkcmVzcyxjbXBfZGF0YSxkYXRhKTsKKyAgICAgdGVzdF9mYWlsPSAxOworICAgICAjMTAwCisgICAgICRmaW5pc2g7CisgIGVuZAorICByZXBlYXQgKDIpIEAocG9zZWRnZSBjbG9jayk7CitlbmQKK2VuZHRhc2sKKworYGlmZGVmIEdMCisKK3dpcmUgICAgICAgIHdiZF9zcGlfc3RiX2kgICA9IHVfdG9wLnVfc3BpX21hc3Rlci53YmRfc3RiX2k7Cit3aXJlICAgICAgICB3YmRfc3BpX2Fja19vICAgPSB1X3RvcC51X3NwaV9tYXN0ZXIud2JkX2Fja19vOword2lyZSAgICAgICAgd2JkX3NwaV93ZV9pICAgID0gdV90b3AudV9zcGlfbWFzdGVyLndiZF93ZV9pOword2lyZSBbMzE6MF0gd2JkX3NwaV9hZHJfaSAgID0gdV90b3AudV9zcGlfbWFzdGVyLndiZF9hZHJfaTsKK3dpcmUgWzMxOjBdIHdiZF9zcGlfZGF0X2kgICA9IHVfdG9wLnVfc3BpX21hc3Rlci53YmRfZGF0X2k7Cit3aXJlIFszMTowXSB3YmRfc3BpX2RhdF9vICAgPSB1X3RvcC51X3NwaV9tYXN0ZXIud2JkX2RhdF9vOword2lyZSBbMzowXSAgd2JkX3NwaV9zZWxfaSAgID0gdV90b3AudV9zcGlfbWFzdGVyLndiZF9zZWxfaTsKKword2lyZSAgICAgICAgd2JkX3NkcmFtX3N0Yl9pID0gdV90b3AudV9zZHJhbV9jdHJsLndiX3N0Yl9pOword2lyZSAgICAgICAgd2JkX3NkcmFtX2Fja19vID0gdV90b3AudV9zZHJhbV9jdHJsLndiX2Fja19vOword2lyZSAgICAgICAgd2JkX3NkcmFtX3dlX2kgID0gdV90b3AudV9zZHJhbV9jdHJsLndiX3dlX2k7Cit3aXJlIFszMTowXSB3YmRfc2RyYW1fYWRyX2kgPSB1X3RvcC51X3NkcmFtX2N0cmwud2JfYWRkcl9pOword2lyZSBbMzE6MF0gd2JkX3NkcmFtX2RhdF9pID0gdV90b3AudV9zZHJhbV9jdHJsLndiX2RhdF9pOword2lyZSBbMzE6MF0gd2JkX3NkcmFtX2RhdF9vID0gdV90b3AudV9zZHJhbV9jdHJsLndiX2RhdF9vOword2lyZSBbMzowXSAgd2JkX3NkcmFtX3NlbF9pID0gdV90b3AudV9zZHJhbV9jdHJsLndiX3NlbF9pOworCit3aXJlICAgICAgICB3YmRfdWFydF9zdGJfaSAgPSB1X3RvcC51X3VhcnRfaTJjLnVfdWFydF9jb3JlLnJlZ19jczsKK3dpcmUgICAgICAgIHdiZF91YXJ0X2Fja19vICA9IHVfdG9wLnVfdWFydF9pMmMudV91YXJ0X2NvcmUucmVnX2FjazsKK3dpcmUgICAgICAgIHdiZF91YXJ0X3dlX2kgICA9IHVfdG9wLnVfdWFydF9pMmMudV91YXJ0X2NvcmUucmVnX3dyOword2lyZSBbNzowXSAgd2JkX3VhcnRfYWRyX2kgID0gdV90b3AudV91YXJ0X2kyYy51X3VhcnRfY29yZS5yZWdfYWRkcjsKK3dpcmUgWzc6MF0gIHdiZF91YXJ0X2RhdF9pICA9IHVfdG9wLnVfdWFydF9pMmMudV91YXJ0X2NvcmUucmVnX3dkYXRhOword2lyZSBbNzowXSAgd2JkX3VhcnRfZGF0X28gID0gdV90b3AudV91YXJ0X2kyYy51X3VhcnRfY29yZS5yZWdfcmRhdGE7Cit3aXJlICAgICAgICB3YmRfdWFydF9zZWxfaSAgPSB1X3RvcC51X3VhcnRfaTJjLnVfdWFydF9jb3JlLnJlZ19iZTsKKworYGVuZGlmCisKKy8qKgorYGlmZGVmIEdMCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSSVNDIElNRU0gYW1kIERNRU0gTW9uaXRvcmluZyBUQVNLCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2BkZWZpbmUgUklTQ19DT1JFICB1c2VyX3VhcnRfdGIudV90b3AudV9jb3JlLnVfcmlzY3ZfdG9wCisKK2Fsd2F5c0AocG9zZWRnZSBgUklTQ19DT1JFLndiX2NsaykgYmVnaW4KKyAgICBpZihgUklTQ19DT1JFLndiZF9pbWVtX2Fja19pKQorICAgICAgICAgICRkaXNwbGF5KCJSSVNDVi1ERUJVRyA9PiBJTUVNIEFERFJFU1M6ICV4IFJlYWQgRGF0YSA6ICV4IiwgYFJJU0NfQ09SRS53YmRfaW1lbV9hZHJfbyxgUklTQ19DT1JFLndiZF9pbWVtX2RhdF9pKTsKKyAgICBpZihgUklTQ19DT1JFLndiZF9kbWVtX2Fja19pICYmIGBSSVNDX0NPUkUud2JkX2RtZW1fd2VfbykKKyAgICAgICAgICAkZGlzcGxheSgiUklTQ1YtREVCVUcgPT4gRE1FTSBBRERSRVNTOiAleCBXcml0ZSBEYXRhOiAleCBSZXNvbnNlOiAleCIsIGBSSVNDX0NPUkUud2JkX2RtZW1fYWRyX28sYFJJU0NfQ09SRS53YmRfZG1lbV9kYXRfbyk7CisgICAgaWYoYFJJU0NfQ09SRS53YmRfZG1lbV9hY2tfaSAmJiAhYFJJU0NfQ09SRS53YmRfZG1lbV93ZV9vKQorICAgICAgICAgICRkaXNwbGF5KCJSSVNDVi1ERUJVRyA9PiBETUVNIEFERFJFU1M6ICV4IFJFQUQgRGF0YSA6ICV4IFJlc29uc2U6ICV4IiwgYFJJU0NfQ09SRS53YmRfZG1lbV9hZHJfbyxgUklTQ19DT1JFLndiZF9kbWVtX2RhdF9pKTsKK2VuZAorCitgZW5kaWYKKyoqLworZW5kbW9kdWxlCitgZGVmYXVsdF9uZXR0eXBlIHdpcmUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvdXNlcl9pMmNtL3VzZXJfdWFydC5jIGIvdmVyaWxvZy9kdi91c2VyX2kyY20vdXNlcl91YXJ0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg2ZjIzYgotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvdXNlcl9pMmNtL3VzZXJfdWFydC5jCkBAIC0wLDAgKzEsNDIgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSwgRGluZXNoIEFubmF5eWEKKy8vIAorLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyNkZWZpbmUgU0NfU0lNX09VVFBPUlQgKDB4ZjAwMDAwMDApCisjZGVmaW5lIHVpbnQzMl90ICBsb25nCisKKyNkZWZpbmUgcmVnX21wcmpfdWFydF9yZWcwICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDEwMDAwKQorI2RlZmluZSByZWdfbXByal91YXJ0X3JlZzEgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMTAwMDQpCisjZGVmaW5lIHJlZ19tcHJqX3VhcnRfcmVnMiAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAxMDAwOCkKKyNkZWZpbmUgcmVnX21wcmpfdWFydF9yZWczICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDEwMDBDKQorI2RlZmluZSByZWdfbXByal91YXJ0X3JlZzQgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMTAwMTApCisjZGVmaW5lIHJlZ19tcHJqX3VhcnRfcmVnNSAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAxMDAxNCkKKyNkZWZpbmUgcmVnX21wcmpfdWFydF9yZWc2ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDEwMDE4KQorI2RlZmluZSByZWdfbXByal91YXJ0X3JlZzcgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMTAwMUMpCisjZGVmaW5lIHJlZ19tcHJqX3VhcnRfcmVnOCAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAxMDAyMCkKKworaW50IG1haW4oKQoreworCisgICAgd2hpbGUoMSkgeworICAgICAgIC8vIENoZWNrIFVBUlQgUlggZmlmbyBoYXMgZGF0YSwgaWYgYXZhaWxhYmxlIGxvb3AgYmFjayB0aGUgZGF0YQorICAgICAgIGlmKHJlZ19tcHJqX3VhcnRfcmVnOCAhPSAwKSB7IAorCSAgIHJlZ19tcHJqX3VhcnRfcmVnNSA9IHJlZ19tcHJqX3VhcnRfcmVnNjsKKyAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3VzZXJfbWJpc3RfdGVzdDEvTWFrZWZpbGUgYi92ZXJpbG9nL2R2L3VzZXJfbWJpc3RfdGVzdDEvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjg1ZDZiYQotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvdXNlcl9tYmlzdF90ZXN0MS9NYWtlZmlsZQpAQCAtMCwwICsxLDEwOSBAQAorIyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIwIEVmYWJsZXNzIENvcnBvcmF0aW9uCisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIworIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorCisjIyBDYXJhdmVsIFBvaW50ZXJzCitDQVJBVkVMX1JPT1QgPz0gLi4vLi4vLi4vY2FyYXZlbAorQ0FSQVZFTF9QQVRIID89ICQoQ0FSQVZFTF9ST09UKQorQ0FSQVZFTF9GSVJNV0FSRV9QQVRIID0gJChDQVJBVkVMX1BBVEgpL3Zlcmlsb2cvZHYvY2FyYXZlbAorQ0FSQVZFTF9WRVJJTE9HX1BBVEggID0gJChDQVJBVkVMX1BBVEgpL3Zlcmlsb2cKK0NBUkFWRUxfUlRMX1BBVEggPSAkKENBUkFWRUxfVkVSSUxPR19QQVRIKS9ydGwKK0NBUkFWRUxfQkVIQVZJT1VSQUxfTU9ERUxTID0gJChDQVJBVkVMX1ZFUklMT0dfUEFUSCkvZHYvY2FyYXZlbAorCisKKyMjIFVzZXIgUHJvamVjdCBQb2ludGVycworVVBSSl9WRVJJTE9HX1BBVEggPz0gLi4vLi4vLi4vdmVyaWxvZworVVBSSl9SVExfUEFUSCA9ICQoVVBSSl9WRVJJTE9HX1BBVEgpL3J0bAorVVBSSl9HTF9QQVRIID0gJChVUFJKX1ZFUklMT0dfUEFUSCkvZ2wKK1VQUkpfQkVIQVZJT1VSQUxfTU9ERUxTID0gLi4vbW9kZWwKK1VQUkpfQkVIQVZJT1VSQUxfQUdFTlRTID0gLi4vYWdlbnRzCitVUFJKX0lOQ0xVREVfUEFUSDEgPSAkKFVQUkpfUlRMX1BBVEgpL3lpZml2ZS95Y3IxYy9zcmMvaW5jbHVkZXMKK1VQUkpfSU5DTFVERV9QQVRIMiA9ICQoVVBSSl9SVExfUEFUSCkvc2RyYW1fY3RybC9zcmMvZGVmcworVVBSSl9JTkNMVURFX1BBVEgzID0gJChVUFJKX1JUTF9QQVRIKS9pMmNtL3NyYy9pbmNsdWRlcworVVBSSl9JTkNMVURFX1BBVEg0ID0gJChVUFJKX1JUTF9QQVRIKS91c2IxX2hvc3Qvc3JjL2luY2x1ZGVzCitVUFJKX0lOQ0xVREVfUEFUSDUgPSAkKFVQUkpfUlRMX1BBVEgpL21iaXN0L2luY2x1ZGUKKworIyMgWUlGSVZFIEZJUk1XQVJFCitZSUZJVkVfRklSTVdBUkVfUEFUSCA9ICQoVVBSSl9WRVJJTE9HX1BBVEgpL2R2L2Zpcm13YXJlCitHQ0M2NF9QUkVGSVg/PXJpc2N2NjQtdW5rbm93bi1lbGYKKworIyMgUklTQ1YgR0NDIAorR0NDX1BBVEg/PS9lZi9hcHBzL2JpbgorR0NDX1BSRUZJWD89cmlzY3YzMi11bmtub3duLWVsZgorUERLX1BBVEg/PS9lZi90ZWNoL1NXL3NreTEzMEEKKworIyMgU2ltdWxhdGlvbiBtb2RlOiBSVEwvR0wKK1NJTT89UlRMCitEVU1QPz1PRkYKKworLlNVRkZJWEVTOgorCitQQVRURVJOID0gdXNlcl9tYmlzdF90ZXN0MQorCithbGw6ICAke1BBVFRFUk46PS52Y2R9CisKK3Z2cDogICR7UEFUVEVSTjo9LnZ2cH0KKworJS52dnA6ICVfdGIudiAKK2lmZXEgKCQoU0lNKSxSVEwpCisgICBpZmVxICgkKERVTVApLE9GRikKKwlpdmVyaWxvZyAtZzIwMDUtc3YgLURGVU5DVElPTkFMIC1EU0lNIC1JICQoUERLX1BBVEgpIFwKKwktSSAkKENBUkFWRUxfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSAkKENBUkFWRUxfUlRMX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfTU9ERUxTKSAgICAtSSAkKFVQUkpfUlRMX1BBVEgpIC1JICQoVVBSSl9WRVJJTE9HX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfQUdFTlRTKSAgICBcCisJLUkgJChVUFJKX0lOQ0xVREVfUEFUSDEpICAgIC1JICQoVVBSSl9JTkNMVURFX1BBVEgyKSAtSSAkKFVQUkpfSU5DTFVERV9QQVRIMykgXAorCS1JICQoVVBSSl9JTkNMVURFX1BBVEg0KSAtSSAkKFVQUkpfSU5DTFVERV9QQVRINSkgXAorCSQ8IC1vICRAIAorICAgIGVsc2UgIAorCWl2ZXJpbG9nIC1nMjAwNS1zdiAtRFdGRFVNUCAtREZVTkNUSU9OQUwgLURTSU0gLUkgJChQREtfUEFUSCkgXAorCS1JICQoQ0FSQVZFTF9CRUhBVklPVVJBTF9NT0RFTFMpIC1JICQoQ0FSQVZFTF9SVExfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9NT0RFTFMpICAgIC1JICQoVVBSSl9SVExfUEFUSCkgLUkgJChVUFJKX1ZFUklMT0dfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9BR0VOVFMpICAgIFwKKwktSSAkKFVQUkpfSU5DTFVERV9QQVRIMSkgICAgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDIpIC1JICQoVVBSSl9JTkNMVURFX1BBVEgzKSBcCisJLUkgJChVUFJKX0lOQ0xVREVfUEFUSDQpIC1JICQoVVBSSl9JTkNMVURFX1BBVEg1KSBcCisJJDwgLW8gJEAgCisgICBlbmRpZgorZWxzZSAgCisJaXZlcmlsb2cgLWcyMDA1LXN2IC1ERlVOQ1RJT05BTCAtRFNJTSAtREdMIC1JICQoUERLX1BBVEgpIFwKKwktSSAkKENBUkFWRUxfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSAkKENBUkFWRUxfUlRMX1BBVEgpIC1JICQoQ0FSQVZFTF9WRVJJTE9HX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSAkKFVQUkpfR0xfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9BR0VOVFMpICAgIFwKKwkkPCAtbyAkQCAKK2VuZGlmCisKKyUudmNkOiAlLnZ2cAorCXZ2cCAkPCAgfCB0ZWUgc2ltX3Jlc3VsdC5sb2cKKworY2hlY2stZW52OgoraWZuZGVmIFBES19ST09UCisJJChlcnJvciBQREtfUk9PVCBpcyB1bmRlZmluZWQsIHBsZWFzZSBleHBvcnQgaXQgYmVmb3JlIHJ1bm5pbmcgbWFrZSkKK2VuZGlmCitpZmVxICgsJCh3aWxkY2FyZCAkKFBES19ST09UKS9za3kxMzBBKSkKKwkkKGVycm9yICQoUERLX1JPT1QpL3NreTEzMEEgbm90IGZvdW5kLCBwbGVhc2UgaW5zdGFsbCBwZGsgYmVmb3JlIHJ1bm5pbmcgbWFrZSkKK2VuZGlmCisjaWZlcSAoLCQod2lsZGNhcmQgJChHQ0M2NF9QUkVGSVgpLWdjYyApKQorIwkkKGVycm9yICQoR0NDNjRfUFJFRklYKS1nY2MgaXMgbm90IGZvdW5kLCBwbGVhc2UgZXhwb3J0IEdDQ19QQVRIIGFuZCBHQ0NfUFJFRklYIGJlZm9yZSBydW5uaW5nIG1ha2UpCisjZW5kaWYKKyMgY2hlY2sgZm9yIGVmYWJsZXNzIHN0eWxlIGluc3RhbGxhdGlvbgoraWZlcSAoLCQod2lsZGNhcmQgJChQREtfUk9PVCkvc2t5MTMwQS9saWJzLnJlZi8qL3Zlcmlsb2cpKQorU0lNX0RFRklORVMgOj0gJHtTSU1fREVGSU5FU30gLURFRl9TVFlMRQorZW5kaWYKKworIyAtLS0tIENsZWFuIC0tLS0KKworY2xlYW46CisJcm0gLWYgKi52dnAgKi52Y2QgKi5sb2cKKworLlBIT05ZOiBjbGVhbiBhbGwKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvdXNlcl9tYmlzdF90ZXN0MS9ydW5faXZlcmlsb2cgYi92ZXJpbG9nL2R2L3VzZXJfbWJpc3RfdGVzdDEvcnVuX2l2ZXJpbG9nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU2NmI4NjMKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3VzZXJfbWJpc3RfdGVzdDEvcnVuX2l2ZXJpbG9nCkBAIC0wLDAgKzEsMzEgQEAKKyMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisjIC8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEsIERpbmVzaCBBbm5heXlhCisjIC8vIAorIyAvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgLy8KKyMgLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgLy8KKyMgLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMgLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyMgLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisjIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyNpdmVyaWxvZyB3aXRob3V0IER1bXAKKyMKK2l2ZXJpbG9nIC1nMjAwNS1zdiAtRFdGRFVNUCAtREZVTkNUSU9OQUwgLURTSU0gLUkgL2hvbWUvZGluZXNoYS93b3JrYXJlYS9lZmFibGVzcy9NUFctMy9wZGsvc2t5MTMwQSBcCistSSAvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC9yaXNjZHVpbm8vY2FyYXZlbC92ZXJpbG9nL2R2L2NhcmF2ZWwgXAorLUkgL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQvcmlzY2R1aW5vL2NhcmF2ZWwvdmVyaWxvZy9ydGwgXAorLUkgLi4vICAgIC1JIC4uLy4uLy4uL3Zlcmlsb2cvcnRsIFwKKy1JIC4uLy4uLy4uL3Zlcmlsb2cvcnRsL21iaXN0L2luY2x1ZGUgXAordXNlcl9tYmlzdF90ZXN0MV90Yi52IC1vIHVzZXJfbWJpc3RfdGVzdDEudnZwCisKKwordnZwIHVzZXJfbWJpc3RfdGVzdDEudnZwIHwgdGVlIHRlc3QubG9nCisKK1xybSAtcmYgdXNlcl9tYmlzdF90ZXN0MS52dnAKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvdXNlcl9tYmlzdF90ZXN0MS91c2VyX21iaXN0X3Rlc3QxX3RiLnYgYi92ZXJpbG9nL2R2L3VzZXJfbWJpc3RfdGVzdDEvdXNlcl9tYmlzdF90ZXN0MV90Yi52Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1NzBlMTgKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3VzZXJfbWJpc3RfdGVzdDEvdXNlcl9tYmlzdF90ZXN0MV90Yi52CkBAIC0wLDAgKzEsMTEzOSBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogIDIwMjEgLCBEaW5lc2ggQW5uYXl5YQorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogTW9kaWZpZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFN0YW5kYWxvbmUgVXNlciB2YWxpZGF0aW9uIFRlc3QgYmVuY2ggICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICBUaGlzIGlzIGEgc3RhbmRhbG9uZSB0ZXN0IGJlbmNoIHRvIHZhbGlkYXRlIHRoZSAgICAgICAgICAgIC8vLy8KKy8vLy8gICBEaWdpdGFsIGNvcmUgTUJJU1QgbG9naWMgdGhyb3VnaCBFeHRlcm5hbCBXQiBpL0YuICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcihzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAtIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFJldmlzaW9uIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC4xIC0gMTggT2N0IDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworYGRlZmF1bHRfbmV0dHlwZSB3aXJlCisKK2B0aW1lc2NhbGUgMSBucyAvIDEgbnMKKworYGluY2x1ZGUgInVwcmpfbmV0bGlzdHMudiIKKworYGRlZmluZSBXQl9NQVAgICAgICAgICAgIGAzMDA4MF8wMDAwCitgZGVmaW5lIEdMQkxfRlVOQ19NQVAgICAgJ2gzMDAyXzAwMDAKK2BkZWZpbmUgTUJJU1QxX0ZVTkNfTUFQICAnaDMwMDNfMDAwMCAgLy8gMHgzMDAzXzAwMDAgdG8gMHgzMDAzXzA3RkYKK2BkZWZpbmUgTUJJU1QyX0ZVTkNfTUFQICAnaDMwMDNfMDgwMCAgLy8gMHgzMDAzXzA4MDAgdG8gMHgzMDAzXzBGRkYKK2BkZWZpbmUgTUJJU1QzX0ZVTkNfTUFQICAnaDMwMDNfMTAwMCAgLy8gMHgzMDAzXzEwMDAgdG8gMHgzMDAzXzE3RkYKK2BkZWZpbmUgTUJJU1Q0X0ZVTkNfTUFQICAnaDMwMDNfMTgwMCAgLy8gMHgzMDAzXzE4MDAgdG8gMHgzMDAzXzFGRkYKKworYGRlZmluZSBHTEJMX0JJU1RfQ1RSTDEgICdoMzAwMl8wMDcwICAgIAorYGRlZmluZSBHTEJMX0JJU1RfU1RBVDEgICdoMzAwMl8wMDc0CitgZGVmaW5lIEdMQkxfQklTVF9TV0RBVEEgJ2gzMDAyXzAwNzgKK2BkZWZpbmUgR0xCTF9CSVNUX1NSREFUQSAnaDMwMDJfMDA3QworYGRlZmluZSBHTEJMX0JJU1RfU1BEQVRBICdoMzAwMl8wMDc4ICAjCisKK2BkZWZpbmUgV0JfR0xCTF9DVFJMICAgICAnaDMwODBfMDAwMAorCitgZGVmaW5lIE5PX1NSQU0gICAgICAgICAgNCAvLyA4CisKKworCittb2R1bGUgdXNlcl9tYmlzdF90ZXN0MV90YjsKKwlyZWcgY2xvY2s7CisJcmVnIHdiX3JzdF9pOworCXJlZyBwb3dlcjEsIHBvd2VyMjsKKwlyZWcgcG93ZXIzLCBwb3dlcjQ7CisKKyAgICAgICAgcmVnICAgICAgICB3YmRfZXh0X2N5Y19pOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAgICAgcmVnICAgICAgICB3YmRfZXh0X3N0Yl9pOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAgICAgcmVnIFszMTowXSB3YmRfZXh0X2Fkcl9pOyAgLy8gYWRkcmVzcworICAgICAgICByZWcgICAgICAgIHdiZF9leHRfd2VfaTsgIC8vIHdyaXRlCisgICAgICAgIHJlZyBbMzE6MF0gd2JkX2V4dF9kYXRfaTsgIC8vIGRhdGEgb3V0cHV0CisgICAgICAgIHJlZyBbMzowXSAgd2JkX2V4dF9zZWxfaTsgIC8vIGJ5dGUgZW5hYmxlCisKKyAgICAgICAgd2lyZSBbMzE6MF0gd2JkX2V4dF9kYXRfbzsgIC8vIGRhdGEgaW5wdXQKKyAgICAgICAgd2lyZSAgICAgICAgd2JkX2V4dF9hY2tfbzsgIC8vIGFja25vd2xlZ2VtZW50CisgICAgICAgIHdpcmUgICAgICAgIHdiZF9leHRfZXJyX287ICAvLyBlcnJvcgorCisJLy8gVXNlciBJL08KKwl3aXJlIFszNzowXSBpb19vZWI7CisJd2lyZSBbMzc6MF0gaW9fb3V0OworCXdpcmUgWzM3OjBdIGlvX2luOworCisJd2lyZSBncGlvOworCXdpcmUgWzM3OjBdIG1wcmpfaW87CisJd2lyZSBbNzowXSBtcHJqX2lvXzA7CisJcmVnICAgICAgICB0ZXN0X2ZhaWw7CisJcmVnIFszMTowXSByZWFkX2RhdGE7CisgICAgICAgIHJlZyBbMzE6MF0gd3JpdGVtZW0gWzA6NTExXTsKKyAgICAgICAgcmVnIFs4OjBdICBmYXVsdGFkZHIgWzA6N107CisgICAgICAgIGludGVnZXIgaTsKKyAgICAgICAgZXZlbnQgICAgICBlcnJvcl9pbnNlcnQ7CisKKworCS8vIEV4dGVybmFsIGNsb2NrIGlzIHVzZWQgYnkgZGVmYXVsdC4gIE1ha2UgdGhpcyBhcnRpZmljaWFsbHkgZmFzdCBmb3IgdGhlCisJLy8gc2ltdWxhdGlvbi4gIE5vcm1hbGx5IHRoaXMgd291bGQgYmUgYSBzbG93IGNsb2NrIGFuZCB0aGUgZGlnaXRhbCBQTEwKKwkvLyB3b3VsZCBiZSB0aGUgZmFzdCBjbG9jay4KKworCWFsd2F5cyAjMTIuNSBjbG9jayA8PSAoY2xvY2sgPT09IDEnYjApOworCisJaW5pdGlhbCBiZWdpbgorCQljbG9jayA9IDA7CisgICAgICAgICAgICAgICAgd2JkX2V4dF9jeWNfaSA9J2gwOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAgICAgICAgICAgICB3YmRfZXh0X3N0Yl9pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICAgICAgICAgICAgICAgIHdiZF9leHRfYWRyX2kgPSdoMDsgIC8vIGFkZHJlc3MKKyAgICAgICAgICAgICAgICB3YmRfZXh0X3dlX2kgID0naDA7ICAvLyB3cml0ZQorICAgICAgICAgICAgICAgIHdiZF9leHRfZGF0X2kgPSdoMDsgIC8vIGRhdGEgb3V0cHV0CisgICAgICAgICAgICAgICAgd2JkX2V4dF9zZWxfaSA9J2gwOyAgLy8gYnl0ZSBlbmFibGUKKwllbmQKKworCWBpZmRlZiBXRkRVTVAKKwkgICBpbml0aWFsIGJlZ2luCisJICAgCSRkdW1wZmlsZSgic2lteC52Y2QiKTsKKwkgICAJJGR1bXB2YXJzKDIsIHVzZXJfbWJpc3RfdGVzdDFfdGIpOworCSAgIAkkZHVtcHZhcnMoMCwgdXNlcl9tYmlzdF90ZXN0MV90Yi51X3RvcC51X21iaXN0KTsKKwkgICAJJGR1bXB2YXJzKDAsIHVzZXJfbWJpc3RfdGVzdDFfdGIudV90b3AudV9pbnRlcmNvbik7CisJCSRkdW1wb2ZmOworCSAgIGVuZAorICAgICAgIGBlbmRpZgorCisJaW5pdGlhbCBiZWdpbgorCQl3Yl9yc3RfaSA8PSAxJ2IxOworCQkjMTAwOworCQl3Yl9yc3RfaSA8PSAxJ2IwOwkgICAgCS8vIFJlbGVhc2UgcmVzZXQKKworCQkjMjAwOyAvLyBXYWl0IGZvciByZXNldCByZW1vdmFsCisJICAgICAgICByZXBlYXQgKDEwKSBAKHBvc2VkZ2UgY2xvY2spOworCQkkZGlzcGxheSgiTW9uaXRvcjogU3RhbmRhbG9uZSBVc2VyIFRlc3QgU3RhcnRlZCIpOworCisJCXRlc3RfZmFpbCA9IDA7CisJCS8vIFJlbW92ZSBXYiBSZXNldAorCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFdCX0dMQkxfQ1RSTCwnaDEpOworCisJCSRkdW1wb2ZmOworCSAgICAJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCSAgICAJJGRpc3BsYXkoIiBNQklTVCBUZXN0IHdpdGggV2l0aG91dCBBZGRyZXNzIEZhaWx1cmUiKTsKKwkgICAgCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKworCQkvLyBDaGVjayBJcyB0aGVyZSBpcyBhbnkgQklTVCBFcnJvcgorCQkvLyBbMF0gICAtIEJpc3QgRG9uZSAgICAgIC0gMQorCQkvLyBbMV0gICAtIEJpc3QgRXJyb3IgICAgIC0gMAorCQkvLyBbMl0gICAtIEJpc3QgQ29ycmVjdCAgIC0gMAorCQkvLyBbM10gICAtIFJlc2VydmVkICAgICAgIC0gMAorCQkvLyBbNzo0XSAtIEJpc3QgRXJyb3IgQ250IC0gNCdoMAorCQlpbnNlcnRfZmF1bHQoMCwwLDAsMCwwLDMyJ2gwMTAxMDEwMSk7CisKKyAgICAgICAgICAJaWYodGVzdF9mYWlsID09IDApIGJlZ2luCisJICAgIAkgICAgJGRpc3BsYXkoIk1vbml0b3I6IFN0ZXAtMTogQklTVCBUZXN0IHdpdGhvdXQgYW55IE1lbW9yeSBFcnJvciBpbnNlcnRpb24gdGVzdCBQYXNzZWQiKTsKKwkgICAgICAgIGVuZCBlbHNlIGJlZ2luCisJICAgIAkgICAgJGRpc3BsYXkoIk1vbml0b3I6IFN0ZXAtMTogQklTVCBUZXN0IHdpdGhvdXQgYW55IE1lbW9yeSBFcnJvciBpbnNlcnRpb24gdGVzdCBGYWlsZWQiKTsKKwkJZW5kCisJICAgIAkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisJICAgIAkKKwkJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCSAgICAJJGRpc3BsYXkoIiBNQklTVCBUZXN0IHdpdGggV2l0aCBTaW5nbGUgQWRkcmVzcyBGYWlsdXJlIGZvciBNRU0tMCIpOworCSAgICAJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCisJCS8vIENoZWNrIElzIHRoZXJlIGlzIGFueSBCSVNUIEVycm9yCisJCS8vIFswXSAgIC0gQmlzdCBEb25lICAgICAgLSAxCisJCS8vIFsxXSAgIC0gQmlzdCBFcnJvciAgICAgLSAwCisJCS8vIFsyXSAgIC0gQmlzdCBDb3JyZWN0ICAgLSAxCisJCS8vIFszXSAgIC0gUmVzZXJ2ZWQgICAgICAgLSAwCisJCS8vIFs3OjRdIC0gQmlzdCBFcnJvciBDbnQgLSA0J2gxCisJCWZhdWx0YWRkclswXSA9IDknaDEwOworCQlmYXVsdGFkZHJbMV0gPSA5J2gyMDsKKwkJZmF1bHRhZGRyWzJdID0gOSdoMzA7CisJCWZhdWx0YWRkclszXSA9IDknaDQwOworCQlpbnNlcnRfZmF1bHQoMSwwLDAsMCwwLDMyJ2gwMTAxMDExNSk7CisKKyAgICAgICAgICAJaWYodGVzdF9mYWlsID09IDApIGJlZ2luCisJICAgIAkgICAgJGRpc3BsYXkoIk1vbml0b3I6IFN0ZXAtMi4xOiBCSVNUIFRlc3Qgd2l0aCBTaW5nbGUgQWRkcmVzcyBGYWlsdXJlIGF0IE1FTTAgRXJyb3IgaW5zZXJ0aW9uIHRlc3QgUGFzc2VkIik7CisJICAgICAgICBlbmQgZWxzZSBiZWdpbgorCSAgICAJICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGVwLTIuMTogQklTVCBUZXN0IHdpdGggU2luZ2xlIEFkZHJlc3MgRmFpbHVyZSBhdCBNRU0wIEVycm9yIGluc2VydGlvbiB0ZXN0IEZhaWxlZCIpOworCQllbmQKKwkJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkgICAgCSRkaXNwbGF5KCIgTUJJU1QgVGVzdCB3aXRoIFdpdGggU2luZ2xlIEFkZHJlc3MgRmFpbHVyZSBmb3IgTUVNLTAvMSIpOworCSAgICAJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKworCQkvLyBDaGVjayBJcyB0aGVyZSBpcyBhbnkgQklTVCBFcnJvcgorCQkvLyBbMF0gICAtIEJpc3QgRG9uZSAgICAgIC0gMQorCQkvLyBbMV0gICAtIEJpc3QgRXJyb3IgICAgIC0gMAorCQkvLyBbMl0gICAtIEJpc3QgQ29ycmVjdCAgIC0gMQorCQkvLyBbM10gICAtIFJlc2VydmVkICAgICAgIC0gMAorCQkvLyBbNzo0XSAtIEJpc3QgRXJyb3IgQ250IC0gNCdoMQorCQlmYXVsdGFkZHJbMF0gPSA5J2gxMDsKKwkJZmF1bHRhZGRyWzFdID0gOSdoMjA7CisJCWZhdWx0YWRkclsyXSA9IDknaDMwOworCQlmYXVsdGFkZHJbM10gPSA5J2g0MDsKKwkJaW5zZXJ0X2ZhdWx0KDEsMSwwLDAsMCwzMidoMDEwMTE1MTUpOworCisgICAgICAgICAgCWlmKHRlc3RfZmFpbCA9PSAwKSBiZWdpbgorCSAgICAJICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGVwLTIuMjogQklTVCBUZXN0IHdpdGggU2luZ2xlIEFkZHJlc3MgRmFpbHVyZSBhdCBNRU0wLzEgRXJyb3IgaW5zZXJ0aW9uIHRlc3QgUGFzc2VkIik7CisJICAgICAgICBlbmQgZWxzZSBiZWdpbgorCSAgICAJICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGVwLTIuMjogQklTVCBUZXN0IHdpdGggU2luZ2xlIEFkZHJlc3MgRmFpbHVyZSBhdCBNRU0wLzEgRXJyb3IgaW5zZXJ0aW9uIHRlc3QgRmFpbGVkIik7CisJCWVuZAorCQkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCSAgICAJJGRpc3BsYXkoIiBNQklTVCBUZXN0IHdpdGggV2l0aCBTaW5nbGUgQWRkcmVzcyBGYWlsdXJlIGZvciBNRU0tMC8xLzIiKTsKKwkgICAgCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisKKwkJLy8gQ2hlY2sgSXMgdGhlcmUgaXMgYW55IEJJU1QgRXJyb3IKKwkJLy8gWzBdICAgLSBCaXN0IERvbmUgICAgICAtIDEKKwkJLy8gWzFdICAgLSBCaXN0IEVycm9yICAgICAtIDAKKwkJLy8gWzJdICAgLSBCaXN0IENvcnJlY3QgICAtIDEKKwkJLy8gWzNdICAgLSBSZXNlcnZlZCAgICAgICAtIDAKKwkJLy8gWzc6NF0gLSBCaXN0IEVycm9yIENudCAtIDQnaDEKKwkJZmF1bHRhZGRyWzBdID0gOSdoMTA7CisJCWZhdWx0YWRkclsxXSA9IDknaDIwOworCQlmYXVsdGFkZHJbMl0gPSA5J2gzMDsKKwkJZmF1bHRhZGRyWzNdID0gOSdoNDA7CisJCWluc2VydF9mYXVsdCgxLDEsMSwwLDAsMzInaDAxMTUxNTE1KTsKKworICAgICAgICAgIAlpZih0ZXN0X2ZhaWwgPT0gMCkgYmVnaW4KKwkgICAgCSAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RlcC0yLjM6IEJJU1QgVGVzdCB3aXRoIFNpbmdsZSBBZGRyZXNzIEZhaWx1cmUgYXQgTUVNMC8xLzIgRXJyb3IgaW5zZXJ0aW9uIHRlc3QgUGFzc2VkIik7CisJICAgICAgICBlbmQgZWxzZSBiZWdpbgorCSAgICAJICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGVwLTIuMzogQklTVCBUZXN0IHdpdGggU2luZ2xlIEFkZHJlc3MgRmFpbHVyZSBhdCBNRU0wLzEvMiBFcnJvciBpbnNlcnRpb24gdGVzdCBGYWlsZWQiKTsKKwkJZW5kCisKKwkgICAgCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkgICAgCSRkaXNwbGF5KCIgTUJJU1QgVGVzdCB3aXRoIFNpbmdsZSBBZGRyZXNzIEZhaWx1cmUgdG8gQWxsIE1lbW9yeSIpOworCSAgICAJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCQkgICAvLyBDaGVjayBJcyB0aGVyZSBpcyBhbnkgQklTVCBFcnJvcgorCQkgICAvLyBbMF0gICAtIEJpc3QgRG9uZSAgICAgIC0gMQorCQkgICAvLyBbMV0gICAtIEJpc3QgRXJyb3IgICAgIC0gMAorCQkgICAvLyBbMl0gICAtIEJpc3QgQ29ycmVjdCAgIC0gMQorCQkgICAvLyBbM10gICAtIFJlc2VydmVkICAgICAgIC0gMAorCQkgICAvLyBbNzo0XSAtIEJpc3QgRXJyb3IgQ250IC0gNCdoMQorCQkgICAvL2lmKHJlYWRfZGF0YVs2OjBdICAhPSA3J2IwMDAxMTAxKSB0ZXN0X2ZhaWwgPSAxOyAvLyBCaXN0IGNvcnJlY3QgPSAxIGFuZCBCaXN0IEVyciBDbnQgLSAweDEKKwkJZmF1bHRhZGRyWzBdID0gOSdoMTA7CisJCWZhdWx0YWRkclsxXSA9IDknaDIwOworCQlmYXVsdGFkZHJbMl0gPSA5J2gzMDsKKwkJZmF1bHRhZGRyWzNdID0gOSdoNDA7CisJCWluc2VydF9mYXVsdCgxLDEsMSwxLDEsMzInaDE1MTUxNTE1KTsKKworICAgICAgICAgIAlpZih0ZXN0X2ZhaWwgPT0gMCkgYmVnaW4KKwkgICAgCSAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RlcC0yLjQ6IEJJU1QgVGVzdCB3aXRoIE9uZSBNZW1vcnkgRXJyb3IgaW5zZXJ0aW9uIHRlc3QgUGFzc2VkIik7CisJICAgICAgICBlbmQgZWxzZSBiZWdpbgorCSAgICAJICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGVwLTIuNDogQklTVCBUZXN0IHdpdGggT25lIE1lbW9yeSBFcnJvciBpbnNlcnRpb24gdGVzdCBGYWlsZWQiKTsKKwkJZW5kCisJICAgIAkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisKKwkJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCSAgICAJJGRpc3BsYXkoIiBNQklTVCBUZXN0IHdpdGggV2l0aCBUd28gQWRkcmVzcyBGYWlsdXJlIGZvciBNRU0tMCIpOworCSAgICAJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCisJCS8vIENoZWNrIElzIHRoZXJlIGlzIGFueSBCSVNUIEVycm9yCisJCS8vIFswXSAgIC0gQmlzdCBEb25lICAgICAgLSAxCisJCS8vIFsxXSAgIC0gQmlzdCBFcnJvciAgICAgLSAwCisJCS8vIFsyXSAgIC0gQmlzdCBDb3JyZWN0ICAgLSAxCisJCS8vIFszXSAgIC0gUmVzZXJ2ZWQgICAgICAgLSAwCisJCS8vIFs3OjRdIC0gQmlzdCBFcnJvciBDbnQgLSA0J2gyCisJCWZhdWx0YWRkclswXSA9IDknaDEwOworCQlmYXVsdGFkZHJbMV0gPSA5J2gyMDsKKwkJZmF1bHRhZGRyWzJdID0gOSdoMzA7CisJCWZhdWx0YWRkclszXSA9IDknaDQwOworCQlpbnNlcnRfZmF1bHQoMiwwLDAsMCwwLDMyJ2gwMTAxMDEyNSk7CisKKyAgICAgICAgICAJaWYodGVzdF9mYWlsID09IDApIGJlZ2luCisJICAgIAkgICAgJGRpc3BsYXkoIk1vbml0b3I6IFN0ZXAtMy4xOiBCSVNUIFRlc3Qgd2l0aCBUd28gQWRkcmVzcyBGYWlsdXJlIGF0IE1FTTAgRXJyb3IgaW5zZXJ0aW9uIHRlc3QgUGFzc2VkIik7CisJICAgICAgICBlbmQgZWxzZSBiZWdpbgorCSAgICAJICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGVwLTMuMTogQklTVCBUZXN0IHdpdGggVHdvIEFkZHJlc3MgRmFpbHVyZSBhdCBNRU0wIEVycm9yIGluc2VydGlvbiB0ZXN0IEZhaWxlZCIpOworCQllbmQKKwkJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkgICAgCSRkaXNwbGF5KCIgTUJJU1QgVGVzdCB3aXRoIFdpdGggVHdvIEFkZHJlc3MgRmFpbHVyZSBmb3IgTUVNLTAvMSIpOworCSAgICAJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKworCQkvLyBDaGVjayBJcyB0aGVyZSBpcyBhbnkgQklTVCBFcnJvcgorCQkvLyBbMF0gICAtIEJpc3QgRG9uZSAgICAgIC0gMQorCQkvLyBbMV0gICAtIEJpc3QgRXJyb3IgICAgIC0gMAorCQkvLyBbMl0gICAtIEJpc3QgQ29ycmVjdCAgIC0gMQorCQkvLyBbM10gICAtIFJlc2VydmVkICAgICAgIC0gMAorCQkvLyBbNzo0XSAtIEJpc3QgRXJyb3IgQ250IC0gNCdoMgorCQlmYXVsdGFkZHJbMF0gPSA5J2gxMDsKKwkJZmF1bHRhZGRyWzFdID0gOSdoMjA7CisJCWZhdWx0YWRkclsyXSA9IDknaDMwOworCQlmYXVsdGFkZHJbM10gPSA5J2g0MDsKKwkJaW5zZXJ0X2ZhdWx0KDIsMiwwLDAsMCwzMidoMDEwMTI1MjUpOworCisgICAgICAgICAgCWlmKHRlc3RfZmFpbCA9PSAwKSBiZWdpbgorCSAgICAJICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGVwLTMuMjogQklTVCBUZXN0IHdpdGggVHdvIEFkZHJlc3MgRmFpbHVyZSBhdCBNRU0wLzEgRXJyb3IgaW5zZXJ0aW9uIHRlc3QgUGFzc2VkIik7CisJICAgICAgICBlbmQgZWxzZSBiZWdpbgorCSAgICAJICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGVwLTMuMjogQklTVCBUZXN0IHdpdGggVHdvIEFkZHJlc3MgRmFpbHVyZSBhdCBNRU0wLzEgRXJyb3IgaW5zZXJ0aW9uIHRlc3QgRmFpbGVkIik7CisJCWVuZAorCQkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCSAgICAJJGRpc3BsYXkoIiBNQklTVCBUZXN0IHdpdGggV2l0aCBUd28gQWRkcmVzcyBGYWlsdXJlIGZvciBNRU0tMC8xLzIiKTsKKwkgICAgCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisKKwkJLy8gQ2hlY2sgSXMgdGhlcmUgaXMgYW55IEJJU1QgRXJyb3IKKwkJLy8gWzBdICAgLSBCaXN0IERvbmUgICAgICAtIDEKKwkJLy8gWzFdICAgLSBCaXN0IEVycm9yICAgICAtIDAKKwkJLy8gWzJdICAgLSBCaXN0IENvcnJlY3QgICAtIDEKKwkJLy8gWzNdICAgLSBSZXNlcnZlZCAgICAgICAtIDAKKwkJLy8gWzc6NF0gLSBCaXN0IEVycm9yIENudCAtIDQnaDIKKwkJZmF1bHRhZGRyWzBdID0gOSdoMTA7CisJCWZhdWx0YWRkclsxXSA9IDknaDIwOworCQlmYXVsdGFkZHJbMl0gPSA5J2gzMDsKKwkJZmF1bHRhZGRyWzNdID0gOSdoNDA7CisJCWluc2VydF9mYXVsdCgyLDIsMiwwLDAsMzInaDAxMjUyNTI1KTsKKworICAgICAgICAgIAlpZih0ZXN0X2ZhaWwgPT0gMCkgYmVnaW4KKwkgICAgCSAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RlcC0zLjM6IEJJU1QgVGVzdCB3aXRoIFR3byBBZGRyZXNzIEZhaWx1cmUgYXQgTUVNMC8xLzIgRXJyb3IgaW5zZXJ0aW9uIHRlc3QgUGFzc2VkIik7CisJICAgICAgICBlbmQgZWxzZSBiZWdpbgorCSAgICAJICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGVwLTMuMzogQklTVCBUZXN0IHdpdGggVHdvIEFkZHJlc3MgRmFpbHVyZSBhdCBNRU0wLzEvMiBFcnJvciBpbnNlcnRpb24gdGVzdCBGYWlsZWQiKTsKKwkJZW5kCisKKwkgICAgCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkgICAgCSRkaXNwbGF5KCIgTUJJU1QgVGVzdCB3aXRoIFR3byBBZGRyZXNzIEZhaWx1cmUgdG8gQWxsIE1lbW9yeSIpOworCSAgICAJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCQkvLyBDaGVjayBJcyB0aGVyZSBpcyBhbnkgQklTVCBFcnJvcgorCQkvLyBbMF0gICAtIEJpc3QgRG9uZSAgICAgIC0gMQorCQkvLyBbMV0gICAtIEJpc3QgRXJyb3IgICAgIC0gMAorCQkvLyBbMl0gICAtIEJpc3QgQ29ycmVjdCAgIC0gMQorCQkvLyBbM10gICAtIFJlc2VydmVkICAgICAgIC0gMAorCQkvLyBbNzo0XSAtIEJpc3QgRXJyb3IgQ250IC0gNCdoMgorCQkgICAvL2lmKHJlYWRfZGF0YVs2OjBdICAhPSA3J2IwMDAxMTAxKSB0ZXN0X2ZhaWwgPSAxOyAvLyBCaXN0IGNvcnJlY3QgPSAxIGFuZCBCaXN0IEVyciBDbnQgLSAweDEKKwkJZmF1bHRhZGRyWzBdID0gOSdoMTA7CisJCWZhdWx0YWRkclsxXSA9IDknaDIwOworCQlmYXVsdGFkZHJbMl0gPSA5J2gzMDsKKwkJZmF1bHRhZGRyWzNdID0gOSdoNDA7CisJCWluc2VydF9mYXVsdCgyLDIsMiwyLDEsMzInaDI1MjUyNTI1KTsKKworICAgICAgICAgIAlpZih0ZXN0X2ZhaWwgPT0gMCkgYmVnaW4KKwkgICAgCSAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RlcC0zLjQ6IEJJU1QgVGVzdCB3aXRoIFR3byBNZW1vcnkgRXJyb3IgaW5zZXJ0aW9uIHRlc3QgUGFzc2VkIik7CisJICAgICAgICBlbmQgZWxzZSBiZWdpbgorCSAgICAJICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGVwLTMuNDogQklTVCBUZXN0IHdpdGggVHdvIE1lbW9yeSBFcnJvciBpbnNlcnRpb24gdGVzdCBGYWlsZWQiKTsKKwkJZW5kCisJICAgIAkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisKKwkJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCSAgICAJJGRpc3BsYXkoIiBNQklTVCBUZXN0IHdpdGggV2l0aCBUaHJlZSBBZGRyZXNzIEZhaWx1cmUgZm9yIE1FTS0wIik7CisJICAgIAkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisKKwkJLy8gQ2hlY2sgSXMgdGhlcmUgaXMgYW55IEJJU1QgRXJyb3IKKwkJLy8gWzBdICAgLSBCaXN0IERvbmUgICAgICAtIDEKKwkJLy8gWzFdICAgLSBCaXN0IEVycm9yICAgICAtIDAKKwkJLy8gWzJdICAgLSBCaXN0IENvcnJlY3QgICAtIDEKKwkJLy8gWzNdICAgLSBSZXNlcnZlZCAgICAgICAtIDAKKwkJLy8gWzc6NF0gLSBCaXN0IEVycm9yIENudCAtIDQnaDMKKwkJZmF1bHRhZGRyWzBdID0gOSdoMTA7CisJCWZhdWx0YWRkclsxXSA9IDknaDIwOworCQlmYXVsdGFkZHJbMl0gPSA5J2gzMDsKKwkJZmF1bHRhZGRyWzNdID0gOSdoNDA7CisJCWluc2VydF9mYXVsdCgzLDAsMCwwLDAsMzInaDAxMDEwMTM1KTsKKworICAgICAgICAgIAlpZih0ZXN0X2ZhaWwgPT0gMCkgYmVnaW4KKwkgICAgCSAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RlcC00LjE6IEJJU1QgVGVzdCB3aXRoIFRocmVlIEFkZHJlc3MgRmFpbHVyZSBhdCBNRU0wIEVycm9yIGluc2VydGlvbiB0ZXN0IFBhc3NlZCIpOworCSAgICAgICAgZW5kIGVsc2UgYmVnaW4KKwkgICAgCSAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RlcC00LjE6IEJJU1QgVGVzdCB3aXRoIFRocmVlIEFkZHJlc3MgRmFpbHVyZSBhdCBNRU0wIEVycm9yIGluc2VydGlvbiB0ZXN0IEZhaWxlZCIpOworCQllbmQKKwkJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkgICAgCSRkaXNwbGF5KCIgTUJJU1QgVGVzdCB3aXRoIFdpdGggVGhyZWUgQWRkcmVzcyBGYWlsdXJlIGZvciBNRU0tMC8xIik7CisJICAgIAkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCisJCS8vIENoZWNrIElzIHRoZXJlIGlzIGFueSBCSVNUIEVycm9yCisJCS8vIFswXSAgIC0gQmlzdCBEb25lICAgICAgLSAxCisJCS8vIFsxXSAgIC0gQmlzdCBFcnJvciAgICAgLSAwCisJCS8vIFsyXSAgIC0gQmlzdCBDb3JyZWN0ICAgLSAxCisJCS8vIFszXSAgIC0gUmVzZXJ2ZWQgICAgICAgLSAwCisJCS8vIFs3OjRdIC0gQmlzdCBFcnJvciBDbnQgLSA0J2gzCisJCWZhdWx0YWRkclswXSA9IDknaDEwOworCQlmYXVsdGFkZHJbMV0gPSA5J2gyMDsKKwkJZmF1bHRhZGRyWzJdID0gOSdoMzA7CisJCWZhdWx0YWRkclszXSA9IDknaDQwOworCQlpbnNlcnRfZmF1bHQoMywzLDAsMCwwLDMyJ2gwMTAxMzUzNSk7CisKKyAgICAgICAgICAJaWYodGVzdF9mYWlsID09IDApIGJlZ2luCisJICAgIAkgICAgJGRpc3BsYXkoIk1vbml0b3I6IFN0ZXAtNC4yOiBCSVNUIFRlc3Qgd2l0aCBUaHJlZSBBZGRyZXNzIEZhaWx1cmUgYXQgTUVNMC8xIEVycm9yIGluc2VydGlvbiB0ZXN0IFBhc3NlZCIpOworCSAgICAgICAgZW5kIGVsc2UgYmVnaW4KKwkgICAgCSAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RlcC00LjI6IEJJU1QgVGVzdCB3aXRoIFRocmVlIEFkZHJlc3MgRmFpbHVyZSBhdCBNRU0wLzEgRXJyb3IgaW5zZXJ0aW9uIHRlc3QgRmFpbGVkIik7CisJCWVuZAorCQkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCSAgICAJJGRpc3BsYXkoIiBNQklTVCBUZXN0IHdpdGggV2l0aCBUaHJlZSBBZGRyZXNzIEZhaWx1cmUgZm9yIE1FTS0wLzEvMiIpOworCSAgICAJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKworCQkvLyBDaGVjayBJcyB0aGVyZSBpcyBhbnkgQklTVCBFcnJvcgorCQkvLyBbMF0gICAtIEJpc3QgRG9uZSAgICAgIC0gMQorCQkvLyBbMV0gICAtIEJpc3QgRXJyb3IgICAgIC0gMAorCQkvLyBbMl0gICAtIEJpc3QgQ29ycmVjdCAgIC0gMQorCQkvLyBbM10gICAtIFJlc2VydmVkICAgICAgIC0gMAorCQkvLyBbNzo0XSAtIEJpc3QgRXJyb3IgQ250IC0gNCdoMworCQlmYXVsdGFkZHJbMF0gPSA5J2gxMDsKKwkJZmF1bHRhZGRyWzFdID0gOSdoMjA7CisJCWZhdWx0YWRkclsyXSA9IDknaDMwOworCQlmYXVsdGFkZHJbM10gPSA5J2g0MDsKKwkJaW5zZXJ0X2ZhdWx0KDMsMywzLDAsMCwzMidoMDEzNTM1MzUpOworCisgICAgICAgICAgCWlmKHRlc3RfZmFpbCA9PSAwKSBiZWdpbgorCSAgICAJICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGVwLTQuMzogQklTVCBUZXN0IHdpdGggVGhyZWUgQWRkcmVzcyBGYWlsdXJlIGF0IE1FTTAvMS8yIEVycm9yIGluc2VydGlvbiB0ZXN0IFBhc3NlZCIpOworCSAgICAgICAgZW5kIGVsc2UgYmVnaW4KKwkgICAgCSAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RlcC00LjM6IEJJU1QgVGVzdCB3aXRoIFRocmVlIEFkZHJlc3MgRmFpbHVyZSBhdCBNRU0wLzEvMiBFcnJvciBpbnNlcnRpb24gdGVzdCBGYWlsZWQiKTsKKwkJZW5kCisKKwkgICAgCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkgICAgCSRkaXNwbGF5KCIgTUJJU1QgVGVzdCB3aXRoIFRocmVlIEFkZHJlc3MgRmFpbHVyZSB0byBBbGwgTWVtb3J5Iik7CisJICAgIAkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisJCSAgIC8vIENoZWNrIElzIHRoZXJlIGlzIGFueSBCSVNUIEVycm9yCisJCSAgIC8vIFswXSAgIC0gQmlzdCBEb25lICAgICAgLSAxCisJCSAgIC8vIFsxXSAgIC0gQmlzdCBFcnJvciAgICAgLSAwCisJCSAgIC8vIFsyXSAgIC0gQmlzdCBDb3JyZWN0ICAgLSAxCisJCSAgIC8vIFszXSAgIC0gUmVzZXJ2ZWQgICAgICAgLSAwCisJCSAgIC8vIFs3OjRdIC0gQmlzdCBFcnJvciBDbnQgLSA0J2gzCisJCSAgIC8vaWYocmVhZF9kYXRhWzY6MF0gICE9IDcnYjAwMDExMDEpIHRlc3RfZmFpbCA9IDE7IC8vIEJpc3QgY29ycmVjdCA9IDEgYW5kIEJpc3QgRXJyIENudCAtIDB4MQorCQlmYXVsdGFkZHJbMF0gPSA5J2gxMDsKKwkJZmF1bHRhZGRyWzFdID0gOSdoMjA7CisJCWZhdWx0YWRkclsyXSA9IDknaDMwOworCQlmYXVsdGFkZHJbM10gPSA5J2g0MDsKKwkJaW5zZXJ0X2ZhdWx0KDMsMywzLDMsMSwzMidoMzUzNTM1MzUpOworCisgICAgICAgICAgCWlmKHRlc3RfZmFpbCA9PSAwKSBiZWdpbgorCSAgICAJICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGVwLTQuNDogQklTVCBUZXN0IHdpdGggVGhyZWUgTWVtb3J5IEVycm9yIGluc2VydGlvbiB0ZXN0IFBhc3NlZCIpOworCSAgICAgICAgZW5kIGVsc2UgYmVnaW4KKwkgICAgCSAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RlcC00LjQ6IEJJU1QgVGVzdCB3aXRoIFRocmVlIE1lbW9yeSBFcnJvciBpbnNlcnRpb24gdGVzdCBGYWlsZWQiKTsKKwkJZW5kCisJICAgIAkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisKKwkJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCSAgICAJJGRpc3BsYXkoIiBNQklTVCBUZXN0IHdpdGggV2l0aCBGb3VyIEFkZHJlc3MgRmFpbHVyZSBmb3IgTUVNLTAiKTsKKwkgICAgCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKworCQkvLyBDaGVjayBJcyB0aGVyZSBpcyBhbnkgQklTVCBFcnJvcgorCQkvLyBbMF0gICAtIEJpc3QgRG9uZSAgICAgIC0gMQorCQkvLyBbMV0gICAtIEJpc3QgRXJyb3IgICAgIC0gMAorCQkvLyBbMl0gICAtIEJpc3QgQ29ycmVjdCAgIC0gMQorCQkvLyBbM10gICAtIFJlc2VydmVkICAgICAgIC0gMAorCQkvLyBbNzo0XSAtIEJpc3QgRXJyb3IgQ250IC0gNCdoNAorCQlmYXVsdGFkZHJbMF0gPSA5J2gxMDsKKwkJZmF1bHRhZGRyWzFdID0gOSdoMjA7CisJCWZhdWx0YWRkclsyXSA9IDknaDMwOworCQlmYXVsdGFkZHJbM10gPSA5J2g0MDsKKwkJaW5zZXJ0X2ZhdWx0KDQsMCwwLDAsMCwzMidoMDEwMTAxNDUpOworCisgICAgICAgICAgCWlmKHRlc3RfZmFpbCA9PSAwKSBiZWdpbgorCSAgICAJICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGVwLTQuMTogQklTVCBUZXN0IHdpdGggRm91ciBBZGRyZXNzIEZhaWx1cmUgYXQgTUVNMCBFcnJvciBpbnNlcnRpb24gdGVzdCBQYXNzZWQiKTsKKwkgICAgICAgIGVuZCBlbHNlIGJlZ2luCisJICAgIAkgICAgJGRpc3BsYXkoIk1vbml0b3I6IFN0ZXAtNC4xOiBCSVNUIFRlc3Qgd2l0aCBGb3VyIEFkZHJlc3MgRmFpbHVyZSBhdCBNRU0wIEVycm9yIGluc2VydGlvbiB0ZXN0IEZhaWxlZCIpOworCQllbmQKKwkJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkgICAgCSRkaXNwbGF5KCIgTUJJU1QgVGVzdCB3aXRoIFdpdGggRm91ciBBZGRyZXNzIEZhaWx1cmUgZm9yIE1FTS0wLzEiKTsKKwkgICAgCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisKKwkJLy8gQ2hlY2sgSXMgdGhlcmUgaXMgYW55IEJJU1QgRXJyb3IKKwkJLy8gWzBdICAgLSBCaXN0IERvbmUgICAgICAtIDEKKwkJLy8gWzFdICAgLSBCaXN0IEVycm9yICAgICAtIDAKKwkJLy8gWzJdICAgLSBCaXN0IENvcnJlY3QgICAtIDEKKwkJLy8gWzNdICAgLSBSZXNlcnZlZCAgICAgICAtIDAKKwkJLy8gWzc6NF0gLSBCaXN0IEVycm9yIENudCAtIDQnaDQKKwkJZmF1bHRhZGRyWzBdID0gOSdoMTA7CisJCWZhdWx0YWRkclsxXSA9IDknaDIwOworCQlmYXVsdGFkZHJbMl0gPSA5J2gzMDsKKwkJZmF1bHRhZGRyWzNdID0gOSdoNDA7CisJCWluc2VydF9mYXVsdCg0LDQsMCwwLDAsMzInaDAxMDE0NTQ1KTsKKworICAgICAgICAgIAlpZih0ZXN0X2ZhaWwgPT0gMCkgYmVnaW4KKwkgICAgCSAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RlcC00LjI6IEJJU1QgVGVzdCB3aXRoIEZvdXIgQWRkcmVzcyBGYWlsdXJlIGF0IE1FTTAvMSBFcnJvciBpbnNlcnRpb24gdGVzdCBQYXNzZWQiKTsKKwkgICAgICAgIGVuZCBlbHNlIGJlZ2luCisJICAgIAkgICAgJGRpc3BsYXkoIk1vbml0b3I6IFN0ZXAtNC4yOiBCSVNUIFRlc3Qgd2l0aCBGb3VyIEFkZHJlc3MgRmFpbHVyZSBhdCBNRU0wLzEgRXJyb3IgaW5zZXJ0aW9uIHRlc3QgRmFpbGVkIik7CisJCWVuZAorCQkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCSAgICAJJGRpc3BsYXkoIiBNQklTVCBUZXN0IHdpdGggV2l0aCBGb3VyIEFkZHJlc3MgRmFpbHVyZSBmb3IgTUVNLTAvMS8yIik7CisJICAgIAkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCisJCS8vIENoZWNrIElzIHRoZXJlIGlzIGFueSBCSVNUIEVycm9yCisJCS8vIFswXSAgIC0gQmlzdCBEb25lICAgICAgLSAxCisJCS8vIFsxXSAgIC0gQmlzdCBFcnJvciAgICAgLSAwCisJCS8vIFsyXSAgIC0gQmlzdCBDb3JyZWN0ICAgLSAxCisJCS8vIFszXSAgIC0gUmVzZXJ2ZWQgICAgICAgLSAwCisJCS8vIFs3OjRdIC0gQmlzdCBFcnJvciBDbnQgLSA0J2gzCisJCWZhdWx0YWRkclswXSA9IDknaDEwOworCQlmYXVsdGFkZHJbMV0gPSA5J2gyMDsKKwkJZmF1bHRhZGRyWzJdID0gOSdoMzA7CisJCWZhdWx0YWRkclszXSA9IDknaDQwOworCQlpbnNlcnRfZmF1bHQoNCw0LDQsMCwwLDMyJ2gwMTQ1NDU0NSk7CisKKyAgICAgICAgICAJaWYodGVzdF9mYWlsID09IDApIGJlZ2luCisJICAgIAkgICAgJGRpc3BsYXkoIk1vbml0b3I6IFN0ZXAtNC4zOiBCSVNUIFRlc3Qgd2l0aCBGb3VyIEFkZHJlc3MgRmFpbHVyZSBhdCBNRU0wLzEvMiBFcnJvciBpbnNlcnRpb24gdGVzdCBQYXNzZWQiKTsKKwkgICAgICAgIGVuZCBlbHNlIGJlZ2luCisJICAgIAkgICAgJGRpc3BsYXkoIk1vbml0b3I6IFN0ZXAtNC4zOiBCSVNUIFRlc3Qgd2l0aCBGb3VyIEFkZHJlc3MgRmFpbHVyZSBhdCBNRU0wLzEvMiBFcnJvciBpbnNlcnRpb24gdGVzdCBGYWlsZWQiKTsKKwkJZW5kCisKKwkgICAgCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkgICAgCSRkaXNwbGF5KCIgTUJJU1QgVGVzdCB3aXRoIEZvdXIgQWRkcmVzcyBGYWlsdXJlIHRvIEFsbCBNZW1vcnkiKTsKKwkgICAgCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkJICAgLy8gQ2hlY2sgSXMgdGhlcmUgaXMgYW55IEJJU1QgRXJyb3IKKwkJICAgLy8gWzBdICAgLSBCaXN0IERvbmUgICAgICAtIDEKKwkJICAgLy8gWzFdICAgLSBCaXN0IEVycm9yICAgICAtIDAKKwkJICAgLy8gWzJdICAgLSBCaXN0IENvcnJlY3QgICAtIDEKKwkJICAgLy8gWzNdICAgLSBSZXNlcnZlZCAgICAgICAtIDAKKwkJICAgLy8gWzc6NF0gLSBCaXN0IEVycm9yIENudCAtIDQnaDMKKwkJICAgLy9pZihyZWFkX2RhdGFbNjowXSAgIT0gNydiMDAwMTEwMSkgdGVzdF9mYWlsID0gMTsgLy8gQmlzdCBjb3JyZWN0ID0gMSBhbmQgQmlzdCBFcnIgQ250IC0gMHgxCisJCWZhdWx0YWRkclswXSA9IDknaDEwOworCQlmYXVsdGFkZHJbMV0gPSA5J2gyMDsKKwkJZmF1bHRhZGRyWzJdID0gOSdoMzA7CisJCWZhdWx0YWRkclszXSA9IDknaDQwOworCQlpbnNlcnRfZmF1bHQoNCw0LDQsNCwxLDMyJ2g0NTQ1NDU0NSk7CisKKyAgICAgICAgICAJaWYodGVzdF9mYWlsID09IDApIGJlZ2luCisJICAgIAkgICAgJGRpc3BsYXkoIk1vbml0b3I6IFN0ZXAtNC40OiBCSVNUIFRlc3Qgd2l0aCBGb3VyIE1lbW9yeSBFcnJvciBpbnNlcnRpb24gdGVzdCBQYXNzZWQiKTsKKwkgICAgICAgIGVuZCBlbHNlIGJlZ2luCisJICAgIAkgICAgJGRpc3BsYXkoIk1vbml0b3I6IFN0ZXAtNC40OiBCSVNUIFRlc3Qgd2l0aCBGb3VyIE1lbW9yeSBFcnJvciBpbnNlcnRpb24gdGVzdCBGYWlsZWQiKTsKKwkJZW5kCisJICAgIAkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisKKworCSAgICAJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCSAgICAJJGRpc3BsYXkoIiBNQklTVCBUZXN0IHdpdGggRm91cnMgQWRkcmVzcyhDb250aW5vdXMgU3RhcnRpbmcgQWRkcnNlc3MpIEZhaWx1cmUiKTsKKwkgICAgCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkJLy8gQ2hlY2sgSXMgdGhlcmUgaXMgYW55IEJJU1QgRXJyb3IKKwkJLy8gWzBdICAgLSBCaXN0IERvbmUgICAgICAtIDEKKwkJLy8gWzFdICAgLSBCaXN0IEVycm9yICAgICAtIDAKKwkJLy8gWzJdICAgLSBCaXN0IENvcnJlY3QgICAtIDEKKwkJLy8gWzNdICAgLSBSZXNlcnZlZCAgICAgICAtIDAKKwkJLy8gWzc6NF0gLSBCaXN0IEVycm9yIENudCAtIDQnaDQKKwkJLy9pZihyZWFkX2RhdGFbNjowXSAgIT0gNydiMDEwMDEwMSkgdGVzdF9mYWlsID0gMTsgLy8gQmlzdCBjb3JyZWN0ID0gMSBhbmQgQmlzdCBFcnIgQ250IC0gMHg0CisJCWZhdWx0YWRkclswXSA9IDknaDA7CisJCWZhdWx0YWRkclsxXSA9IDknaDE7CisJCWZhdWx0YWRkclsyXSA9IDknaDI7CisJCWZhdWx0YWRkclszXSA9IDknaDM7CisJCWluc2VydF9mYXVsdCg0LDQsNCw0LDAsMzInaDQ1NDU0NTQ1KTsKKworICAgICAgICAgIAlpZih0ZXN0X2ZhaWwgPT0gMCkgYmVnaW4KKwkgICAgCSAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RlcC01LjE6IEJJU1QgVGVzdCB3aXRoIEZvdXIgTWVtb3J5IEVycm9yIGluc2VydGlvbiB0ZXN0IFBhc3NlZCIpOworCSAgICAgICAgZW5kIGVsc2UgYmVnaW4KKwkgICAgCSAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RlcC01LjE6IEJJU1QgVGVzdCB3aXRoIEZvdXIgTWVtb3J5IEVycm9yIGluc2VydGlvbiB0ZXN0IEZhaWxlZCIpOworCQllbmQKKworCSAgICAJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCSAgICAJJGRpc3BsYXkoIiBNQklTVCBUZXN0IHdpdGggRm91cnMgQWRkcmVzcyhMYXN0IEFkZHJzZXNzKSBGYWlsdXJlIik7CisJICAgIAkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisJCS8vIENoZWNrIElzIHRoZXJlIGlzIGFueSBCSVNUIEVycm9yCisJCS8vIFswXSAgIC0gQmlzdCBEb25lICAgICAgLSAxCisJCS8vIFsxXSAgIC0gQmlzdCBFcnJvciAgICAgLSAwCisJCS8vIFsyXSAgIC0gQmlzdCBDb3JyZWN0ICAgLSAxCisJCS8vIFszXSAgIC0gUmVzZXJ2ZWQgICAgICAgLSAwCisJCS8vIFs3OjRdIC0gQmlzdCBFcnJvciBDbnQgLSA0J2g0CisJCS8vaWYocmVhZF9kYXRhWzY6MF0gICE9IDcnYjAxMDAxMDEpIHRlc3RfZmFpbCA9IDE7IC8vIEJpc3QgY29ycmVjdCA9IDEgYW5kIEJpc3QgRXJyIENudCAtIDB4NAorCQlmYXVsdGFkZHJbMF0gPSA5J2hGMDsKKwkJZmF1bHRhZGRyWzFdID0gOSdoRjE7CisJCWZhdWx0YWRkclsyXSA9IDknaEYyOworCQlmYXVsdGFkZHJbM10gPSA5J2hGMzsKKwkJaW5zZXJ0X2ZhdWx0KDQsNCw0LDQsMCwzMidoNDU0NTQ1NDUpOworCisgICAgICAgICAgCWlmKHRlc3RfZmFpbCA9PSAwKSBiZWdpbgorCSAgICAJICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGVwLTUuMjogQklTVCBUZXN0IHdpdGggRm91ciBNZW1vcnkgRXJyb3IgaW5zZXJ0aW9uIHRlc3QgUGFzc2VkIik7CisJICAgICAgICBlbmQgZWxzZSBiZWdpbgorCSAgICAJICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGVwLTUuMjogQklTVCBUZXN0IHdpdGggRm91ciBNZW1vcnkgRXJyb3IgaW5zZXJ0aW9uIHRlc3QgRmFpbGVkIik7CisJCWVuZAorCSAgICAJCisJCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkgICAgCSRkaXNwbGF5KCIgTUJJU1QgVGVzdCB3aXRoIEZpdmUgQWRkcmVzcyBGYWlsdXJlIGZvciBNRU0wIik7CisJICAgIAkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisJCS8vIENoZWNrIElzIHRoZXJlIGlzIGFueSBCSVNUIEVycm9yCisJCS8vIFswXSAgIC0gQmlzdCBEb25lICAgICAgLSAxCisJCS8vIFsxXSAgIC0gQmlzdCBFcnJvciAgICAgLSAxCisJCS8vIFsyXSAgIC0gQmlzdCBDb3JyZWN0ICAgLSAxCisJCS8vIFszXSAgIC0gUmVzZXJ2ZWQgICAgICAgLSAwCisJCS8vIFs3OjRdIC0gQmlzdCBFcnJvciBDbnQgLSA0J2g0CisJCS8vaWYocmVhZF9kYXRhWzY6MF0gICE9IDcnYjAxMDAxMDEpIHRlc3RfZmFpbCA9IDE7IC8vIEJpc3QgY29ycmVjdCA9IDEgYW5kIEJpc3QgRXJyIENudCAtIDB4NAorCQlmYXVsdGFkZHJbMF0gPSA5J2gxMDsKKwkJZmF1bHRhZGRyWzFdID0gOSdoMjA7CisJCWZhdWx0YWRkclsyXSA9IDknaDMwOworCQlmYXVsdGFkZHJbM10gPSA5J2g0MDsKKwkJZmF1bHRhZGRyWzRdID0gOSdoNTA7CisJCWluc2VydF9mYXVsdCg1LDAsMCwwLDEsMzInaDAxMDEwMTQ3KTsKKworICAgICAgICAgIAlpZih0ZXN0X2ZhaWwgPT0gMCkgYmVnaW4KKwkgICAgCSAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RlcC02LjE6IEJJU1QgVGVzdCB3aXRoIEZpdmUgTWVtb3J5IEVycm9yIGluc2VydGlvbiBmb3IgTUVNMCB0ZXN0IFBhc3NlZCIpOworCSAgICAgICAgZW5kIGVsc2UgYmVnaW4KKwkgICAgCSAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RlcC02LjE6IEJJU1QgVGVzdCB3aXRoIEZpdmUgTWVtb3J5IEVycm9yIGluc2VydGlvbiBmb3IgTUVNMCB0ZXN0IEZhaWxlZCIpOworCQkgZW5kCisKKwkJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCSAgICAJJGRpc3BsYXkoIiBNQklTVCBUZXN0IHdpdGggRml2ZSBBZGRyZXNzIEZhaWx1cmUgZm9yIE1FTTAvMSIpOworCSAgICAJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCQkvLyBDaGVjayBJcyB0aGVyZSBpcyBhbnkgQklTVCBFcnJvcgorCQkvLyBbMF0gICAtIEJpc3QgRG9uZSAgICAgIC0gMQorCQkvLyBbMV0gICAtIEJpc3QgRXJyb3IgICAgIC0gMQorCQkvLyBbMl0gICAtIEJpc3QgQ29ycmVjdCAgIC0gMQorCQkvLyBbM10gICAtIFJlc2VydmVkICAgICAgIC0gMAorCQkvLyBbNzo0XSAtIEJpc3QgRXJyb3IgQ250IC0gNCdoNAorCQkvL2lmKHJlYWRfZGF0YVs2OjBdICAhPSA3J2IwMTAwMTAxKSB0ZXN0X2ZhaWwgPSAxOyAvLyBCaXN0IGNvcnJlY3QgPSAxIGFuZCBCaXN0IEVyciBDbnQgLSAweDQKKwkJZmF1bHRhZGRyWzBdID0gOSdoMTA7CisJCWZhdWx0YWRkclsxXSA9IDknaDIwOworCQlmYXVsdGFkZHJbMl0gPSA5J2gzMDsKKwkJZmF1bHRhZGRyWzNdID0gOSdoNDA7CisJCWZhdWx0YWRkcls0XSA9IDknaDUwOworCQlpbnNlcnRfZmF1bHQoNSw1LDAsMCwxLDMyJ2gwMTAxNDc0Nyk7CisKKyAgICAgICAgICAJaWYodGVzdF9mYWlsID09IDApIGJlZ2luCisJICAgIAkgICAgJGRpc3BsYXkoIk1vbml0b3I6IFN0ZXAtNi4yOiBCSVNUIFRlc3Qgd2l0aCBGaXZlIE1lbW9yeSBFcnJvciBpbnNlcnRpb24gZm9yIE1FTTAvMSB0ZXN0IFBhc3NlZCIpOworCSAgICAgICAgZW5kIGVsc2UgYmVnaW4KKwkgICAgCSAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RlcC02LjI6IEJJU1QgVGVzdCB3aXRoIEZpdmUgTWVtb3J5IEVycm9yIGluc2VydGlvbiBmb3IgTUVNMC8xIHRlc3QgRmFpbGVkIik7CisJCSBlbmQKKworICAgICAgICAJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCSAgICAJJGRpc3BsYXkoIiBNQklTVCBUZXN0IHdpdGggRml2ZSBBZGRyZXNzIEZhaWx1cmUgZm9yIE1FTTAvMS8yIik7CisJICAgIAkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisJCS8vIENoZWNrIElzIHRoZXJlIGlzIGFueSBCSVNUIEVycm9yCisJCS8vIFswXSAgIC0gQmlzdCBEb25lICAgICAgLSAxCisJCS8vIFsxXSAgIC0gQmlzdCBFcnJvciAgICAgLSAxCisJCS8vIFsyXSAgIC0gQmlzdCBDb3JyZWN0ICAgLSAxCisJCS8vIFszXSAgIC0gUmVzZXJ2ZWQgICAgICAgLSAwCisJCS8vIFs3OjRdIC0gQmlzdCBFcnJvciBDbnQgLSA0J2g0CisJCS8vaWYocmVhZF9kYXRhWzY6MF0gICE9IDcnYjAxMDAxMDEpIHRlc3RfZmFpbCA9IDE7IC8vIEJpc3QgY29ycmVjdCA9IDEgYW5kIEJpc3QgRXJyIENudCAtIDB4NAorCQlmYXVsdGFkZHJbMF0gPSA5J2gxMDsKKwkJZmF1bHRhZGRyWzFdID0gOSdoMjA7CisJCWZhdWx0YWRkclsyXSA9IDknaDMwOworCQlmYXVsdGFkZHJbM10gPSA5J2g0MDsKKwkJZmF1bHRhZGRyWzRdID0gOSdoNTA7CisJCWluc2VydF9mYXVsdCg1LDUsNSwwLDEsMzInaDAxNDc0NzQ3KTsKKworICAgICAgICAgIAlpZih0ZXN0X2ZhaWwgPT0gMCkgYmVnaW4KKwkgICAgCSAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RlcC02LjM6IEJJU1QgVGVzdCB3aXRoIEZpdmUgTWVtb3J5IEVycm9yIGluc2VydGlvbiBmb3IgTUVNMC8xLzIgdGVzdCBQYXNzZWQiKTsKKwkgICAgICAgIGVuZCBlbHNlIGJlZ2luCisJICAgIAkgICAgJGRpc3BsYXkoIk1vbml0b3I6IFN0ZXAtNi4zOiBCSVNUIFRlc3Qgd2l0aCBGaXZlIE1lbW9yeSBFcnJvciBpbnNlcnRpb24gZm9yIE1FTTAvMS8yIHRlc3QgRmFpbGVkIik7CisJCSBlbmQKKworCSAgICAJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCSAgICAJJGRpc3BsYXkoIiBNQklTVCBUZXN0IHdpdGggRml2ZSBBZGRyZXNzIEZhaWx1cmUgZm9yIEFsbCBNZW1vcnkiKTsKKwkgICAgCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkJLy8gQ2hlY2sgSXMgdGhlcmUgaXMgYW55IEJJU1QgRXJyb3IKKwkJLy8gWzBdICAgLSBCaXN0IERvbmUgICAgICAtIDEKKwkJLy8gWzFdICAgLSBCaXN0IEVycm9yICAgICAtIDEKKwkJLy8gWzJdICAgLSBCaXN0IENvcnJlY3QgICAtIDEKKwkJLy8gWzNdICAgLSBSZXNlcnZlZCAgICAgICAtIDAKKwkJLy8gWzc6NF0gLSBCaXN0IEVycm9yIENudCAtIDQnaDQKKwkJLy9pZihyZWFkX2RhdGFbNjowXSAgIT0gNydiMDEwMDEwMSkgdGVzdF9mYWlsID0gMTsgLy8gQmlzdCBjb3JyZWN0ID0gMSBhbmQgQmlzdCBFcnIgQ250IC0gMHg0CisJCWZhdWx0YWRkclswXSA9IDknaDEwOworCQlmYXVsdGFkZHJbMV0gPSA5J2gyMDsKKwkJZmF1bHRhZGRyWzJdID0gOSdoMzA7CisJCWZhdWx0YWRkclszXSA9IDknaDQwOworCQlmYXVsdGFkZHJbNF0gPSA5J2g1MDsKKwkJaW5zZXJ0X2ZhdWx0KDUsNSw1LDUsMSwzMidoNDc0NzQ3NDcpOworCisgICAgICAgICAgCWlmKHRlc3RfZmFpbCA9PSAwKSBiZWdpbgorCSAgICAJICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGVwLTYuNDogQklTVCBUZXN0IHdpdGggRml2ZSBNZW1vcnkgRXJyb3IgaW5zZXJ0aW9uIHRlc3QgUGFzc2VkIik7CisJICAgICAgICBlbmQgZWxzZSBiZWdpbgorCSAgICAJICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGVwLTYuNDogQklTVCBUZXN0IHdpdGggRml2ZSBNZW1vcnkgRXJyb3IgaW5zZXJ0aW9uIHRlc3QgRmFpbGVkIik7CisJCSBlbmQKKwkJJGR1bXBvbjsKKwkgICAgCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkgICAgCSRkaXNwbGF5KCIgTUJJU1QgVGVzdCB3aXRoIEZ1bmN0aW9uYWwgQWNjZXNzLCBjb250aW51YXRpb24gb2YgcHJldmlvdXMgTUJJU1QgU2lnbmF0dXJlIik7CisJICAgIAkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisJCWZvcmsKKwkJYmVnaW4KKwkJICAgIC8vIFJlbW92ZSB0aGUgQmlzdCBFbmFibGUgYW5kIEJpc3QgUnVuCisgICAgICAgICAgICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZShgR0xCTF9CSVNUX0NUUkwxLCdoMDAwKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIFdCIGFuZCBCSVNUIFJFU0VUCisgICAgICAgICAgICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZShgV0JfR0xCTF9DVFJMLCdoMDgxKTsKKyAgCisJICAgICAgICAgICAgLy8gRmlsbCBSYW5kb20gRGF0YQkKKwkJICAgIGZvciAoaT0wOyBpPCA5J2gxRkM7IGk9aSsxKSBiZWdpbgorICAgCSAgICAgICAgICAgICAgICB3cml0ZW1lbVtpXSA9ICRyYW5kb207CisgICAgICAgICAgICAgICAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoYE1CSVNUMV9GVU5DX01BUCsoaSo0KSx3cml0ZW1lbVtpXSk7CisgICAgICAgICAgICAgICAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoYE1CSVNUMl9GVU5DX01BUCsoaSo0KSx3cml0ZW1lbVtpXSk7CisgICAgICAgICAgICAgICAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoYE1CSVNUM19GVU5DX01BUCsoaSo0KSx3cml0ZW1lbVtpXSk7CisgICAgICAgICAgICAgICAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoYE1CSVNUNF9GVU5DX01BUCsoaSo0KSx3cml0ZW1lbVtpXSk7CisJCSAgICAgICAgLy9pZihpIDwgOSdoMEZDKSBiZWdpbiAvLyBTUkFNNS1TUkFNOCBhcmUgMUtCCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgIHdiX3VzZXJfY29yZV93cml0ZShgTUJJU1Q1X0ZVTkNfTUFQKyhpKjQpLHdyaXRlbWVtW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgd2JfdXNlcl9jb3JlX3dyaXRlKGBNQklTVDZfRlVOQ19NQVArKGkqNCksd3JpdGVtZW1baV0pOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gICB3Yl91c2VyX2NvcmVfd3JpdGUoYE1CSVNUN19GVU5DX01BUCsoaSo0KSx3cml0ZW1lbVtpXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgIHdiX3VzZXJfY29yZV93cml0ZShgTUJJU1Q4X0ZVTkNfTUFQKyhpKjQpLHdyaXRlbWVtW2ldKTsKKwkgICAgICAgICAgICAgICAgLy9lbmQKKwkJICAgIGVuZAorCQkgICAgLy8gUmVhZCBiYWNrIGRhdGEKKwkJICAgIGZvciAoaT0wOyBpPCA5J2gxRkM7IGk9aSsxKSBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYE1CSVNUMV9GVU5DX01BUCsoaSo0KSxyZWFkX2RhdGEsd3JpdGVtZW1baV0sMzInaEZGRkZGRkZGKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBNQklTVDJfRlVOQ19NQVArKGkqNCkscmVhZF9kYXRhLHdyaXRlbWVtW2ldLDMyJ2hGRkZGRkZGRik7CisgICAgICAgICAgICAgICAgICAgICAgICB3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgTUJJU1QzX0ZVTkNfTUFQKyhpKjQpLHJlYWRfZGF0YSx3cml0ZW1lbVtpXSwzMidoRkZGRkZGRkYpOworICAgICAgICAgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYE1CSVNUNF9GVU5DX01BUCsoaSo0KSxyZWFkX2RhdGEsd3JpdGVtZW1baV0sMzInaEZGRkZGRkZGKTsKKwkJICAgICAgICAvL2lmKGkgPCA5J2gwRkMpIGJlZ2luIC8vIFNSQU01IC0gU1JBTTggYXJlIDFLQgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICB3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgTUJJU1Q1X0ZVTkNfTUFQKyhpKjQpLHJlYWRfZGF0YSx3cml0ZW1lbVtpXSwzMidoRkZGRkZGRkYpOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gICB3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgTUJJU1Q2X0ZVTkNfTUFQKyhpKjQpLHJlYWRfZGF0YSx3cml0ZW1lbVtpXSwzMidoRkZGRkZGRkYpOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gICB3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgTUJJU1Q3X0ZVTkNfTUFQKyhpKjQpLHJlYWRfZGF0YSx3cml0ZW1lbVtpXSwzMidoRkZGRkZGRkYpOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gICB3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgTUJJU1Q4X0ZVTkNfTUFQKyhpKjQpLHJlYWRfZGF0YSx3cml0ZW1lbVtpXSwzMidoRkZGRkZGRkYpOworCSAgICAgICAgICAgICAgICAvL2VuZAorCQkgICAgZW5kCisKKwkJICAgIC8vIENyb3NzLWNoZWNrIFJlZHVjZW5jeSBhZGRyZXNzIGhvbGQgdGhlIGZhaWx1cmUgYWRkcmVzcyBkYXRhCisJCSAgICAvLyBJcyBsYXN0IEVycm9yIGluc2VydGVkIGFkZHJlc3MgYXJlIDB4MTAsMHgyMCwweDMwLDB4NDAKKwkJICAgIC8vIFNvIEFkZHJlc3MgMHgxRkMgPSBEYXRhWzB4MTBdLCAweDFGRCA9IERhdGFbMHgyMF0KKwkJICAgIC8vICAgIEFkZHJlc3MgMHgxRkUgPSBEYXRhWzB4MzBdLCAweDFGRiA9IERhdGFbMHg0MF0KKwkJICAgIC8vIENoZWNrIDJrYiBTUkFNMQorICAgICAgICAgICAgICAgICAgICB3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgTUJJU1QxX0ZVTkNfTUFQICsgKDknaDFGQyAqNCkscmVhZF9kYXRhLHdyaXRlbWVtWzknaDEwXSwzMidoRkZGRkZGRkYpOworICAgICAgICAgICAgICAgICAgICB3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgTUJJU1QxX0ZVTkNfTUFQICsgKDknaDFGRCAqNCkscmVhZF9kYXRhLHdyaXRlbWVtWzknaDIwXSwzMidoRkZGRkZGRkYpOworICAgICAgICAgICAgICAgICAgICB3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgTUJJU1QxX0ZVTkNfTUFQICsgKDknaDFGRSAqNCkscmVhZF9kYXRhLHdyaXRlbWVtWzknaDMwXSwzMidoRkZGRkZGRkYpOworICAgICAgICAgICAgICAgICAgICB3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgTUJJU1QxX0ZVTkNfTUFQICsgKDknaDFGRiAqNCkscmVhZF9kYXRhLHdyaXRlbWVtWzknaDQwXSwzMidoRkZGRkZGRkYpOworCisJCSAgICAvLyBDaGVjayAya2IgU1JBTTIKKyAgICAgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYE1CSVNUMl9GVU5DX01BUCArICg5J2gxRkMgKjQpLHJlYWRfZGF0YSx3cml0ZW1lbVs5J2gxMV0sMzInaEZGRkZGRkZGKTsKKyAgICAgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYE1CSVNUMl9GVU5DX01BUCArICg5J2gxRkQgKjQpLHJlYWRfZGF0YSx3cml0ZW1lbVs5J2gyMV0sMzInaEZGRkZGRkZGKTsKKyAgICAgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYE1CSVNUMl9GVU5DX01BUCArICg5J2gxRkUgKjQpLHJlYWRfZGF0YSx3cml0ZW1lbVs5J2gzMV0sMzInaEZGRkZGRkZGKTsKKyAgICAgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYE1CSVNUMl9GVU5DX01BUCArICg5J2gxRkYgKjQpLHJlYWRfZGF0YSx3cml0ZW1lbVs5J2g0MV0sMzInaEZGRkZGRkZGKTsKKworCQkgICAgLy8vLyBDaGVjayAya2IgU1JBTTMKKyAgICAgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYE1CSVNUM19GVU5DX01BUCArICg5J2gxRkMgKjQpLHJlYWRfZGF0YSx3cml0ZW1lbVs5J2gxMl0sMzInaEZGRkZGRkZGKTsKKyAgICAgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYE1CSVNUM19GVU5DX01BUCArICg5J2gxRkQgKjQpLHJlYWRfZGF0YSx3cml0ZW1lbVs5J2gyMl0sMzInaEZGRkZGRkZGKTsKKyAgICAgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYE1CSVNUM19GVU5DX01BUCArICg5J2gxRkUgKjQpLHJlYWRfZGF0YSx3cml0ZW1lbVs5J2gzMl0sMzInaEZGRkZGRkZGKTsKKyAgICAgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYE1CSVNUM19GVU5DX01BUCArICg5J2gxRkYgKjQpLHJlYWRfZGF0YSx3cml0ZW1lbVs5J2g0Ml0sMzInaEZGRkZGRkZGKTsKKworCQkgICAgLy8vLyBDaGVjayAya2IgU1JBTTQKKyAgICAgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYE1CSVNUNF9GVU5DX01BUCArICg5J2gxRkMgKjQpLHJlYWRfZGF0YSx3cml0ZW1lbVs5J2gxM10sMzInaEZGRkZGRkZGKTsKKyAgICAgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYE1CSVNUNF9GVU5DX01BUCArICg5J2gxRkQgKjQpLHJlYWRfZGF0YSx3cml0ZW1lbVs5J2gyM10sMzInaEZGRkZGRkZGKTsKKyAgICAgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYE1CSVNUNF9GVU5DX01BUCArICg5J2gxRkUgKjQpLHJlYWRfZGF0YSx3cml0ZW1lbVs5J2gzM10sMzInaEZGRkZGRkZGKTsKKyAgICAgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYE1CSVNUNF9GVU5DX01BUCArICg5J2gxRkYgKjQpLHJlYWRfZGF0YSx3cml0ZW1lbVs5J2g0M10sMzInaEZGRkZGRkZGKTsKKworCQkgICAgLy8vLyBDaGVjayAxa2IgU1JBTTUKKyAgICAgICAgICAgICAgICAgICAgLy93Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgTUJJU1Q1X0ZVTkNfTUFQICsgKDgnaEZDICo0KSxyZWFkX2RhdGEsd3JpdGVtZW1bOSdoMTRdLDMyJ2hGRkZGRkZGRik7CisgICAgICAgICAgICAgICAgICAgIC8vd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYE1CSVNUNV9GVU5DX01BUCArICg4J2hGRCAqNCkscmVhZF9kYXRhLHdyaXRlbWVtWzknaDI0XSwzMidoRkZGRkZGRkYpOworICAgICAgICAgICAgICAgICAgICAvL3diX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBNQklTVDVfRlVOQ19NQVAgKyAoOCdoRkUgKjQpLHJlYWRfZGF0YSx3cml0ZW1lbVs5J2gzNF0sMzInaEZGRkZGRkZGKTsKKyAgICAgICAgICAgICAgICAgICAgLy93Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgTUJJU1Q1X0ZVTkNfTUFQICsgKDgnaEZGICo0KSxyZWFkX2RhdGEsd3JpdGVtZW1bOSdoNDRdLDMyJ2hGRkZGRkZGRik7CisKKwkJICAgIC8vLy8gQ2hlY2sgMWtiIFNSQU02CisgICAgICAgICAgICAgICAgICAgIC8vd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYE1CSVNUNl9GVU5DX01BUCArICg4J2hGQyAqNCkscmVhZF9kYXRhLHdyaXRlbWVtWzknaDE1XSwzMidoRkZGRkZGRkYpOworICAgICAgICAgICAgICAgICAgICAvL3diX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBNQklTVDZfRlVOQ19NQVAgKyAoOCdoRkQgKjQpLHJlYWRfZGF0YSx3cml0ZW1lbVs5J2gyNV0sMzInaEZGRkZGRkZGKTsKKyAgICAgICAgICAgICAgICAgICAgLy93Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgTUJJU1Q2X0ZVTkNfTUFQICsgKDgnaEZFICo0KSxyZWFkX2RhdGEsd3JpdGVtZW1bOSdoMzVdLDMyJ2hGRkZGRkZGRik7CisgICAgICAgICAgICAgICAgICAgIC8vd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYE1CSVNUNl9GVU5DX01BUCArICg4J2hGRiAqNCkscmVhZF9kYXRhLHdyaXRlbWVtWzknaDQ1XSwzMidoRkZGRkZGRkYpOworCisJCSAgICAvLy8vIENoZWNrIDFrYiBTUkFNNworICAgICAgICAgICAgICAgICAgICAvL3diX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBNQklTVDdfRlVOQ19NQVAgKyAoOCdoRkMgKjQpLHJlYWRfZGF0YSx3cml0ZW1lbVs5J2gxNl0sMzInaEZGRkZGRkZGKTsKKyAgICAgICAgICAgICAgICAgICAgLy93Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgTUJJU1Q3X0ZVTkNfTUFQICsgKDgnaEZEICo0KSxyZWFkX2RhdGEsd3JpdGVtZW1bOSdoMjZdLDMyJ2hGRkZGRkZGRik7CisgICAgICAgICAgICAgICAgICAgIC8vd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYE1CSVNUN19GVU5DX01BUCArICg4J2hGRSAqNCkscmVhZF9kYXRhLHdyaXRlbWVtWzknaDM2XSwzMidoRkZGRkZGRkYpOworICAgICAgICAgICAgICAgICAgICAvL3diX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBNQklTVDdfRlVOQ19NQVAgKyAoOCdoRkYgKjQpLHJlYWRfZGF0YSx3cml0ZW1lbVs5J2g0Nl0sMzInaEZGRkZGRkZGKTsKKworCQkgICAgLy8vLyBDaGVjayAxa2IgU1JBTTgKKyAgICAgICAgICAgICAgICAgICAgLy93Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgTUJJU1Q4X0ZVTkNfTUFQICsgKDgnaEZDICo0KSxyZWFkX2RhdGEsd3JpdGVtZW1bOSdoMTddLDMyJ2hGRkZGRkZGRik7CisgICAgICAgICAgICAgICAgICAgIC8vd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYE1CSVNUOF9GVU5DX01BUCArICg4J2hGRCAqNCkscmVhZF9kYXRhLHdyaXRlbWVtWzknaDI3XSwzMidoRkZGRkZGRkYpOworICAgICAgICAgICAgICAgICAgICAvL3diX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBNQklTVDhfRlVOQ19NQVAgKyAoOCdoRkUgKjQpLHJlYWRfZGF0YSx3cml0ZW1lbVs5J2gzN10sMzInaEZGRkZGRkZGKTsKKyAgICAgICAgICAgICAgICAgICAgLy93Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgTUJJU1Q4X0ZVTkNfTUFQICsgKDgnaEZGICo0KSxyZWFkX2RhdGEsd3JpdGVtZW1bOSdoNDddLDMyJ2hGRkZGRkZGRik7CisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAvLyBMb29wIGZvciBCSVNUIFRpbWVPdXQKKyAgICAgICAgICAgICAgICAgICByZXBlYXQgKDIwMDAwMCkgQChwb3NlZGdlIGNsb2NrKTsKKyAgICAgICAgICAgICAgICAJCS8vICRkaXNwbGF5KCIrMTAwMCBjeWNsZXMiKTsKKyAgICAgICAgICAgICAgICAgICB0ZXN0X2ZhaWwgPSAxOworICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGpvaW5fYW55CisgICAgICAgICAgICAgICAgZGlzYWJsZSBmb3JrOyAvL2Rpc2FibGUgcGVuZGluZyBmb3JrIGFjdGl2aXR5CisgICAgICAgICAgCWlmKHRlc3RfZmFpbCA9PSAwKSBiZWdpbgorCSAgICAJICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGVwLTc6IEJJU1QgVGVzdCB3aXRoIEZ1bmN0aW9uYWwgYWNjZXNzIHRlc3QgUGFzc2VkIik7CisJICAgICAgICBlbmQgZWxzZSBiZWdpbgorCSAgICAJICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGVwLTc6IEJJU1QgVGVzdCB3aXRoIEZ1bmN0aW9uYWwgYWNjZXNzIHRlc3QgZmFpbGVkIik7CisJCSBlbmQKKworCSAgICAJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCSAgICAgICAgJGZpbmlzaDsKKwllbmQKKword2lyZSBVU0VSX1ZERDFWOCA9IDEnYjE7Cit3aXJlIFZTUyA9IDEnYjA7CisKKwordXNlcl9wcm9qZWN0X3dyYXBwZXIgdV90b3AoCitgaWZkZWYgVVNFX1BPV0VSX1BJTlMKKyAgICAudmNjZDEoVVNFUl9WREQxVjgpLAkvLyBVc2VyIGFyZWEgMSAxLjhWIHN1cHBseQorICAgIC52c3NkMShWU1MpLAkvLyBVc2VyIGFyZWEgMSBkaWdpdGFsIGdyb3VuZAorYGVuZGlmCisgICAgLndiX2Nsa19pICAgICAgICAoY2xvY2spLCAgLy8gU3lzdGVtIGNsb2NrCisgICAgLnVzZXJfY2xvY2syICAgICAoMSdiMSksICAvLyBSZWFsLXRpbWUgY2xvY2sKKyAgICAud2JfcnN0X2kgICAgICAgICh3Yl9yc3RfaSksICAvLyBSZWd1bGFyIFJlc2V0IHNpZ25hbAorCisgICAgLndic19jeWNfaSAgICh3YmRfZXh0X2N5Y19pKSwgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgLndic19zdGJfaSAgICh3YmRfZXh0X3N0Yl9pKSwgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgLndic19hZHJfaSAgICh3YmRfZXh0X2Fkcl9pKSwgIC8vIGFkZHJlc3MKKyAgICAud2JzX3dlX2kgICAgKHdiZF9leHRfd2VfaSksICAvLyB3cml0ZQorICAgIC53YnNfZGF0X2kgICAod2JkX2V4dF9kYXRfaSksICAvLyBkYXRhIG91dHB1dAorICAgIC53YnNfc2VsX2kgICAod2JkX2V4dF9zZWxfaSksICAvLyBieXRlIGVuYWJsZQorCisgICAgLndic19kYXRfbyAgICh3YmRfZXh0X2RhdF9vKSwgIC8vIGRhdGEgaW5wdXQKKyAgICAud2JzX2Fja19vICAgKHdiZF9leHRfYWNrX28pLCAgLy8gYWNrbm93bGVnZW1lbnQKKworIAorICAgIC8vIExvZ2ljIEFuYWx5emVyIFNpZ25hbHMKKyAgICAubGFfZGF0YV9pbiAgICAgICgnMSkgLAorICAgIC5sYV9kYXRhX291dCAgICAgKCksCisgICAgLmxhX29lbmIgICAgICAgICAoJzApLAorIAorCisgICAgLy8gSU9zCisgICAgLmlvX2luICAgICAgICAgIChpb19pbikgICwKKyAgICAuaW9fb3V0ICAgICAgICAgKGlvX291dCkgLAorICAgIC5pb19vZWIgICAgICAgICAoaW9fb2ViKSAsCisKKyAgICAudXNlcl9pcnEgICAgICAgKCkgCisKKyk7CisKK2BpZm5kZWYgR0wgLy8gRHJpdmUgUG93ZXIgZm9yIEhvbGQgRml4IEJ1ZgorICAgIC8vIEFsbCBzdGFuZGFyZCBjZWxsIG5lZWQgcG93ZXIgaG9vay11cCBmb3IgZnVuY3Rpb25hbGl0eSB3b3JrCisgICAgaW5pdGlhbCBiZWdpbgorCisKKyAgICBlbmQKK2BlbmRpZiAgICAKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEluc2VydCB1c2VyIGRlZmluZWQgbnVtYmVyIG9mIGZhdWx0IAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordGFzayBpbnNlcnRfZmF1bHQ7CitpbnB1dCBbMzowXSAgbnVtMF9mYXVsdDsKK2lucHV0IFszOjBdICBudW0xX2ZhdWx0OworaW5wdXQgWzM6MF0gIG51bTJfZmF1bHQ7CitpbnB1dCBbMzowXSAgbnVtM19mYXVsdDsKK2lucHV0ICAgICAgICBmYXVsdF90eXBlOyAvLyAwIC0+IHN0cnVjayBhdCAwIGFuZCAxIC0+IHN0cnVjayBhdCAxCitpbnB1dCBbMzE6MF0gIG1iaXN0X3NpZ25hdHVyZTsKK3JlZyBbMzE6MF0gZGF0YWluOworcmVnIFs4OjBdICBmYWlsX2FkZHIxOworcmVnIFs4OjBdICBmYWlsX2FkZHIyOworcmVnIFs4OjBdICBmYWlsX2FkZHIzOworcmVnIFs4OjBdICBmYWlsX2FkZHI0OworcmVnIFszOjBdICBudW1fZmF1bHRbMDozXTsKK2ludGVnZXIgajsKK2JlZ2luCisgICBudW1fZmF1bHRbMF0gPSBudW0wX2ZhdWx0OworICAgbnVtX2ZhdWx0WzFdID0gbnVtMV9mYXVsdDsKKyAgIG51bV9mYXVsdFsyXSA9IG51bTJfZmF1bHQ7CisgICBudW1fZmF1bHRbM10gPSBudW0zX2ZhdWx0OworICAgcmVwZWF0ICgyKSBAKHBvc2VkZ2UgY2xvY2spOworICAgZm9yaworICAgYmVnaW4KKyAgICAgICAvLyBSZW1vdmUgdGhlIEJpc3QgRW5hYmxlIGFuZCBCaXN0IFJ1bgorICAgICAgIHdiX3VzZXJfY29yZV93cml0ZShgR0xCTF9CSVNUX0NUUkwxLCdoMDAwKTsKKyAgICAgICAvLyBSZW1vdmUgV0IgYW5kIEJJU1QgUkVTRVQKKyAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoYFdCX0dMQkxfQ1RSTCwnaDAwMSk7CisgICAgICAgLy8gU2V0IHRoZSBCaXN0IEVuYWJsZSBhbmQgQmlzdCBSdW4KKyAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoYEdMQkxfQklTVF9DVFJMMSwnaDAwMDAwMDAzKTsKKyAgICAgICAvLyBSZW1vdmUgV0IgYW5kIEJJU1QgUkVTRVQKKyAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoYFdCX0dMQkxfQ1RSTCwnaDA4MSk7CisgICAgICAvLyBDaGVjayBmb3IgTUJJU1QgRG9uZQorICAgICAgcmVhZF9kYXRhID0gJ2gwOworICAgICAgd2hpbGUgKHJlYWRfZGF0YVswXSAhPSAxJ2IxKSBiZWdpbgorICAgICAgICAgd2JfdXNlcl9jb3JlX3JlYWQoYEdMQkxfQklTVF9TVEFUMSxyZWFkX2RhdGEpOworICAgICAgZW5kCisgICAgICAvLyB3YWl0IGZvciBzb21lIHRpbWUgZm9yIGFsbCB0aGUgQklTVCB0byBjb21wbGV0ZQorICAgICAgcmVwZWF0ICgxMDAwKSBAKHBvc2VkZ2UgY2xvY2spOworICAgICAgLy8gVG9nZ2xlIHRoZSBCaXN0IExvYWQgZm9yIHVwZGF0ZSB0aGUgc2hpZnQgZGF0YQorICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKGBHTEJMX0JJU1RfQ1RSTDEsJ2gwMDAwMDAwNCk7CisgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoYEdMQkxfQklTVF9DVFJMMSwnaDAwMDAwMDAwKTsKKyAgICAgIC8vIENoZWNrIElzIHRoZXJlIGlzIGFueSBCSVNUIEVycm9yCisgICAgICAvLyBbMF0gICAtIEJpc3QgRG9uZSAgICAgIAorICAgICAgLy8gWzFdICAgLSBCaXN0IEVycm9yICAgICAKKyAgICAgIC8vIFsyXSAgIC0gQmlzdCBDb3JyZWN0ICAgCisgICAgICAvLyBbM10gICAtIFJlc2VydmVkCisgICAgICAvLyBbNzo0XSAtIEJpc3QgRXJyb3IgQ250IAorICAgICAgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYEdMQkxfQklTVF9TVEFUMSxyZWFkX2RhdGEsbWJpc3Rfc2lnbmF0dXJlWzMxOjBdLDMyJ2hGRkZGRkZGRik7CisgICAgICAvL3diX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBHTEJMX0JJU1RfU1RBVDIscmVhZF9kYXRhLG1iaXN0X3NpZ25hdHVyZVs2MzozMl0sMzInaEZGRkZGRkZGKTsKKyAgIGVuZAorICAgLy8gSW5zZXJ0ICBFcnJvciBJbnNlcnRpb24KKyAgIGJlZ2luCisgICAgICB3aGlsZSgxKSBiZWdpbgorICAgICAgICAgcmVwZWF0ICgxKSBAKHBvc2VkZ2UgY2xvY2spOworICAgICAgICAgIzE7CisKKyAgICAgICAgIGlmKHVfdG9wLnVfc3JhbTBfMmtiLndlYjAgPT0gMSdiMCAmJiAKKwkgICAoKG51bV9mYXVsdFswXSA+IDAgJiYgdV90b3AudV9zcmFtMF8ya2IuYWRkcjAgPT0gZmF1bHRhZGRyWzBdKSB8fAorCSAgICAobnVtX2ZhdWx0WzBdID4gMSAmJiB1X3RvcC51X3NyYW0wXzJrYi5hZGRyMCA9PSBmYXVsdGFkZHJbMV0pIHx8CisJICAgIChudW1fZmF1bHRbMF0gPiAyICYmIHVfdG9wLnVfc3JhbTBfMmtiLmFkZHIwID09IGZhdWx0YWRkclsyXSkgfHwKKwkgICAgKG51bV9mYXVsdFswXSA+IDMgJiYgdV90b3AudV9zcmFtMF8ya2IuYWRkcjAgPT0gZmF1bHRhZGRyWzNdKSB8fAorCSAgICAobnVtX2ZhdWx0WzBdID4gNCAmJiB1X3RvcC51X3NyYW0wXzJrYi5hZGRyMCA9PSBmYXVsdGFkZHJbNF0pIHx8CisJICAgIChudW1fZmF1bHRbMF0gPiA1ICYmIHVfdG9wLnVfc3JhbTBfMmtiLmFkZHIwID09IGZhdWx0YWRkcls1XSkgfHwKKwkgICAgKG51bV9mYXVsdFswXSA+IDYgJiYgdV90b3AudV9zcmFtMF8ya2IuYWRkcjAgPT0gZmF1bHRhZGRyWzZdKSB8fAorCSAgICAobnVtX2ZhdWx0WzBdID4gNyAmJiB1X3RvcC51X3NyYW0wXzJrYi5hZGRyMCA9PSBmYXVsdGFkZHJbN10pKSkKKyAgICAgICAgICAgICBiZWdpbgorCSAgIGlmKGZhdWx0X3R5cGUgPT0gMCkgLy8gU3RydWNrIGF0IDAKKwkgICAgICBmb3JjZSB1X3RvcC51X3NyYW0wXzJrYi5kaW4wID0gdV90b3AubWVtMF9kaW5fYSAgJiAzMidoRkZGRl9GRkZFOworCSAgIGVsc2UKKwkgICAgICBmb3JjZSB1X3RvcC51X3NyYW0wXzJrYi5kaW4wID0gdV90b3AubWVtMF9kaW5fYSB8IDMyJ2gxOworICAgCSAgIC0+IGVycm9yX2luc2VydDsKKyAgICAgICAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgICAgICByZWxlYXNlIHVfdG9wLnVfc3JhbTBfMmtiLmRpbjA7CisgICAgICAgICBlbmQKKworICAgICAgICAgaWYodV90b3AudV9zcmFtMV8ya2Iud2ViMCA9PSAxJ2IwICYmIAorCSAgICgobnVtX2ZhdWx0WzFdID4gMCAmJiB1X3RvcC51X3NyYW0xXzJrYi5hZGRyMCA9PSBmYXVsdGFkZHJbMF0rMSkgfHwKKwkgICAgKG51bV9mYXVsdFsxXSA+IDEgJiYgdV90b3AudV9zcmFtMV8ya2IuYWRkcjAgPT0gZmF1bHRhZGRyWzFdKzEpIHx8CisJICAgIChudW1fZmF1bHRbMV0gPiAyICYmIHVfdG9wLnVfc3JhbTFfMmtiLmFkZHIwID09IGZhdWx0YWRkclsyXSsxKSB8fAorCSAgICAobnVtX2ZhdWx0WzFdID4gMyAmJiB1X3RvcC51X3NyYW0xXzJrYi5hZGRyMCA9PSBmYXVsdGFkZHJbM10rMSkgfHwKKwkgICAgKG51bV9mYXVsdFsxXSA+IDQgJiYgdV90b3AudV9zcmFtMV8ya2IuYWRkcjAgPT0gZmF1bHRhZGRyWzRdKzEpIHx8CisJICAgIChudW1fZmF1bHRbMV0gPiA1ICYmIHVfdG9wLnVfc3JhbTFfMmtiLmFkZHIwID09IGZhdWx0YWRkcls1XSsxKSB8fAorCSAgICAobnVtX2ZhdWx0WzFdID4gNiAmJiB1X3RvcC51X3NyYW0xXzJrYi5hZGRyMCA9PSBmYXVsdGFkZHJbNl0rMSkgfHwKKwkgICAgKG51bV9mYXVsdFsxXSA+IDcgJiYgdV90b3AudV9zcmFtMV8ya2IuYWRkcjAgPT0gZmF1bHRhZGRyWzddKzEpKSkKKyAgICAgICAgICAgICBiZWdpbgorCSAgIGlmKGZhdWx0X3R5cGUgPT0gMCkgLy8gU3RydWNrIGF0IDAKKwkgICAgICBmb3JjZSB1X3RvcC51X3NyYW0xXzJrYi5kaW4wID0gdV90b3AubWVtMV9kaW5fYSAgJiAzMidoRkZGRl9GRkZFOworCSAgIGVsc2UKKwkgICAgICBmb3JjZSB1X3RvcC51X3NyYW0xXzJrYi5kaW4wID0gdV90b3AubWVtMV9kaW5fYSB8IDMyJ2gxOworICAgCSAgIC0+IGVycm9yX2luc2VydDsKKyAgICAgICAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgICAgICByZWxlYXNlIHVfdG9wLnVfc3JhbTFfMmtiLmRpbjA7CisgICAgICAgICBlbmQKKworICAgICAgICAgaWYodV90b3AudV9zcmFtMl8ya2Iud2ViMCA9PSAxJ2IwICYmIAorCSAgICgobnVtX2ZhdWx0WzJdID4gMCAmJiB1X3RvcC51X3NyYW0yXzJrYi5hZGRyMCA9PSBmYXVsdGFkZHJbMF0rMikgfHwKKwkgICAgKG51bV9mYXVsdFsyXSA+IDEgJiYgdV90b3AudV9zcmFtMl8ya2IuYWRkcjAgPT0gZmF1bHRhZGRyWzFdKzIpIHx8CisJICAgIChudW1fZmF1bHRbMl0gPiAyICYmIHVfdG9wLnVfc3JhbTJfMmtiLmFkZHIwID09IGZhdWx0YWRkclsyXSsyKSB8fAorCSAgICAobnVtX2ZhdWx0WzJdID4gMyAmJiB1X3RvcC51X3NyYW0yXzJrYi5hZGRyMCA9PSBmYXVsdGFkZHJbM10rMikgfHwKKwkgICAgKG51bV9mYXVsdFsyXSA+IDQgJiYgdV90b3AudV9zcmFtMl8ya2IuYWRkcjAgPT0gZmF1bHRhZGRyWzRdKzIpIHx8CisJICAgIChudW1fZmF1bHRbMl0gPiA1ICYmIHVfdG9wLnVfc3JhbTJfMmtiLmFkZHIwID09IGZhdWx0YWRkcls1XSsyKSB8fAorCSAgICAobnVtX2ZhdWx0WzJdID4gNiAmJiB1X3RvcC51X3NyYW0yXzJrYi5hZGRyMCA9PSBmYXVsdGFkZHJbNl0rMikgfHwKKwkgICAgKG51bV9mYXVsdFsyXSA+IDcgJiYgdV90b3AudV9zcmFtMl8ya2IuYWRkcjAgPT0gZmF1bHRhZGRyWzddKzIpKSkKKyAgICAgICAgICAgICBiZWdpbgorCSAgIGlmKGZhdWx0X3R5cGUgPT0gMCkgLy8gU3RydWNrIGF0IDAKKwkgICAgICBmb3JjZSB1X3RvcC51X3NyYW0yXzJrYi5kaW4wID0gdV90b3AubWVtMl9kaW5fYSAgJiAzMidoRkZGRl9GRkZFOworCSAgIGVsc2UKKwkgICAgICBmb3JjZSB1X3RvcC51X3NyYW0yXzJrYi5kaW4wID0gdV90b3AubWVtMl9kaW5fYSB8IDMyJ2gxOworICAgCSAgIC0+IGVycm9yX2luc2VydDsKKyAgICAgICAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgICAgICByZWxlYXNlIHVfdG9wLnVfc3JhbTJfMmtiLmRpbjA7CisgICAgICAgICBlbmQKKworICAgICAgICAgaWYodV90b3AudV9zcmFtM18ya2Iud2ViMCA9PSAxJ2IwICYmIAorCSAgICgobnVtX2ZhdWx0WzNdID4gMCAmJiB1X3RvcC51X3NyYW0zXzJrYi5hZGRyMCA9PSBmYXVsdGFkZHJbMF0rMykgfHwKKwkgICAgKG51bV9mYXVsdFszXSA+IDEgJiYgdV90b3AudV9zcmFtM18ya2IuYWRkcjAgPT0gZmF1bHRhZGRyWzFdKzMpIHx8CisJICAgIChudW1fZmF1bHRbM10gPiAyICYmIHVfdG9wLnVfc3JhbTNfMmtiLmFkZHIwID09IGZhdWx0YWRkclsyXSszKSB8fAorCSAgICAobnVtX2ZhdWx0WzNdID4gMyAmJiB1X3RvcC51X3NyYW0zXzJrYi5hZGRyMCA9PSBmYXVsdGFkZHJbM10rMykgfHwKKwkgICAgKG51bV9mYXVsdFszXSA+IDQgJiYgdV90b3AudV9zcmFtM18ya2IuYWRkcjAgPT0gZmF1bHRhZGRyWzRdKzMpIHx8CisJICAgIChudW1fZmF1bHRbM10gPiA1ICYmIHVfdG9wLnVfc3JhbTNfMmtiLmFkZHIwID09IGZhdWx0YWRkcls1XSszKSB8fAorCSAgICAobnVtX2ZhdWx0WzNdID4gNiAmJiB1X3RvcC51X3NyYW0zXzJrYi5hZGRyMCA9PSBmYXVsdGFkZHJbNl0rMykgfHwKKwkgICAgKG51bV9mYXVsdFszXSA+IDcgJiYgdV90b3AudV9zcmFtM18ya2IuYWRkcjAgPT0gZmF1bHRhZGRyWzddKzMpKSkKKyAgICAgICAgICAgICBiZWdpbgorCSAgIGlmKGZhdWx0X3R5cGUgPT0gMCkgLy8gU3RydWNrIGF0IDAKKwkgICAgICBmb3JjZSB1X3RvcC51X3NyYW0zXzJrYi5kaW4wID0gdV90b3AubWVtM19kaW5fYSAgJiAzMidoRkZGRl9GRkZFOworCSAgIGVsc2UKKwkgICAgICBmb3JjZSB1X3RvcC51X3NyYW0zXzJrYi5kaW4wID0gdV90b3AubWVtM19kaW5fYSB8IDMyJ2gxOworICAgCSAgIC0+IGVycm9yX2luc2VydDsKKyAgICAgICAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgICAgICByZWxlYXNlIHVfdG9wLnVfc3JhbTNfMmtiLmRpbjA7CisgICAgICAgICBlbmQKKworICAgICAgICAgLy9pZih1X3RvcC51X3NyYW01XzFrYi53ZWIwID09IDEnYjAgJiYgCisJIC8vICAoKG51bV9mYXVsdCA+IDAgJiYgdV90b3AudV9zcmFtNV8xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzBdKzQpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDEgJiYgdV90b3AudV9zcmFtNV8xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzFdKzQpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDIgJiYgdV90b3AudV9zcmFtNV8xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzJdKzQpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDMgJiYgdV90b3AudV9zcmFtNV8xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzNdKzQpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDQgJiYgdV90b3AudV9zcmFtNV8xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzRdKzQpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDUgJiYgdV90b3AudV9zcmFtNV8xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzVdKzQpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDYgJiYgdV90b3AudV9zcmFtNV8xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzZdKzQpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDcgJiYgdV90b3AudV9zcmFtNV8xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzddKzQpKSkKKyAgICAgICAgIC8vICAgIGJlZ2luCisJIC8vICBpZihmYXVsdF90eXBlID09IDApIC8vIFN0cnVjayBhdCAwCisJIC8vICAgICBmb3JjZSB1X3RvcC51X3NyYW01XzFrYi5kaW4wID0gdV90b3AubWVtNV9kaW5fYiAgJiAzMidoRkZGRl9GRkZFOworCSAvLyAgZWxzZQorCSAvLyAgICAgZm9yY2UgdV90b3AudV9zcmFtNV8xa2IuZGluMCA9IHVfdG9wLm1lbTVfZGluX2IgfCAzMidoMTsKKyAgIAkgLy8gIC0+IGVycm9yX2luc2VydDsKKyAgICAgICAgIC8vZW5kIGVsc2UgYmVnaW4KKyAgICAgICAgIC8vICAgcmVsZWFzZSB1X3RvcC51X3NyYW01XzFrYi5kaW4wOworICAgICAgICAgLy9lbmQKKworICAgICAgICAgLy9pZih1X3RvcC51X3NyYW02XzFrYi53ZWIwID09IDEnYjAgJiYgCisJIC8vICAoKG51bV9mYXVsdCA+IDAgJiYgdV90b3AudV9zcmFtNl8xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzBdKzUpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDEgJiYgdV90b3AudV9zcmFtNl8xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzFdKzUpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDIgJiYgdV90b3AudV9zcmFtNl8xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzJdKzUpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDMgJiYgdV90b3AudV9zcmFtNl8xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzNdKzUpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDQgJiYgdV90b3AudV9zcmFtNl8xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzRdKzUpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDUgJiYgdV90b3AudV9zcmFtNl8xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzVdKzUpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDYgJiYgdV90b3AudV9zcmFtNl8xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzZdKzUpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDcgJiYgdV90b3AudV9zcmFtNl8xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzddKzUpKSkKKyAgICAgICAgIC8vICAgIGJlZ2luCisJIC8vICBpZihmYXVsdF90eXBlID09IDApIC8vIFN0cnVjayBhdCAwCisJIC8vICAgICBmb3JjZSB1X3RvcC51X3NyYW02XzFrYi5kaW4wID0gdV90b3AubWVtNl9kaW5fYiAgJiAzMidoRkZGRl9GRkZFOworCSAvLyAgZWxzZQorCSAvLyAgICAgZm9yY2UgdV90b3AudV9zcmFtNl8xa2IuZGluMCA9IHVfdG9wLm1lbTZfZGluX2IgfCAzMidoMTsKKyAgIAkgLy8gIC0+IGVycm9yX2luc2VydDsKKyAgICAgICAgIC8vZW5kIGVsc2UgYmVnaW4KKyAgICAgICAgIC8vICAgcmVsZWFzZSB1X3RvcC51X3NyYW02XzFrYi5kaW4wOworICAgICAgICAgLy9lbmQKKworICAgICAgICAgLy9pZih1X3RvcC51X3NyYW03XzFrYi53ZWIwID09IDEnYjAgJiYgCisJIC8vICAoKG51bV9mYXVsdCA+IDAgJiYgdV90b3AudV9zcmFtN18xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzBdKzYpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDEgJiYgdV90b3AudV9zcmFtN18xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzFdKzYpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDIgJiYgdV90b3AudV9zcmFtN18xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzJdKzYpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDMgJiYgdV90b3AudV9zcmFtN18xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzNdKzYpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDQgJiYgdV90b3AudV9zcmFtN18xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzRdKzYpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDUgJiYgdV90b3AudV9zcmFtN18xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzVdKzYpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDYgJiYgdV90b3AudV9zcmFtN18xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzZdKzYpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDcgJiYgdV90b3AudV9zcmFtN18xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzddKzYpKSkKKyAgICAgICAgIC8vICAgIGJlZ2luCisJIC8vICBpZihmYXVsdF90eXBlID09IDApIC8vIFN0cnVjayBhdCAwCisJIC8vICAgICBmb3JjZSB1X3RvcC51X3NyYW03XzFrYi5kaW4wID0gdV90b3AubWVtN19kaW5fYiAgJiAzMidoRkZGRl9GRkZFOworCSAvLyAgZWxzZQorCSAvLyAgICAgZm9yY2UgdV90b3AudV9zcmFtN18xa2IuZGluMCA9IHVfdG9wLm1lbTdfZGluX2IgfCAzMidoMTsKKyAgIAkgLy8gIC0+IGVycm9yX2luc2VydDsKKyAgICAgICAgIC8vZW5kIGVsc2UgYmVnaW4KKyAgICAgICAgIC8vICAgcmVsZWFzZSB1X3RvcC51X3NyYW03XzFrYi5kaW4wOworICAgICAgICAgLy9lbmQKKworICAgICAgICAgLy9pZih1X3RvcC51X3NyYW04XzFrYi53ZWIwID09IDEnYjAgJiYgCisJIC8vICAoKG51bV9mYXVsdCA+IDAgJiYgdV90b3AudV9zcmFtOF8xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzBdKzcpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDEgJiYgdV90b3AudV9zcmFtOF8xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzFdKzcpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDIgJiYgdV90b3AudV9zcmFtOF8xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzJdKzcpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDMgJiYgdV90b3AudV9zcmFtOF8xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzNdKzcpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDQgJiYgdV90b3AudV9zcmFtOF8xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzRdKzcpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDUgJiYgdV90b3AudV9zcmFtOF8xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzVdKzcpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDYgJiYgdV90b3AudV9zcmFtOF8xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzZdKzcpIHx8CisJIC8vICAgKG51bV9mYXVsdCA+IDcgJiYgdV90b3AudV9zcmFtOF8xa2IuYWRkcjAgPT0gZmF1bHRhZGRyWzddKzcpKSkKKyAgICAgICAgIC8vICAgIGJlZ2luCisJIC8vICBpZihmYXVsdF90eXBlID09IDApIC8vIFN0cnVjayBhdCAwCisJIC8vICAgICBmb3JjZSB1X3RvcC51X3NyYW04XzFrYi5kaW4wID0gdV90b3AubWVtOF9kaW5fYiAgJiAzMidoRkZGRl9GRkZFOworCSAvLyAgZWxzZQorCSAvLyAgICAgZm9yY2UgdV90b3AudV9zcmFtOF8xa2IuZGluMCA9IHVfdG9wLm1lbThfZGluX2IgfCAzMidoMTsKKyAgIAkgLy8gIC0+IGVycm9yX2luc2VydDsKKyAgICAgICAgIC8vZW5kIGVsc2UgYmVnaW4KKyAgICAgICAgIC8vICAgcmVsZWFzZSB1X3RvcC51X3NyYW04XzFrYi5kaW4wOworICAgICAgICAgLy9lbmQKKworICAgICAgZW5kCisgICBlbmQKKyAgIGJlZ2luCisgICAgICAvLyBMb29wIGZvciBCSVNUIFRpbWVPdXQKKyAgICAgIHJlcGVhdCAoMjAwMDAwKSBAKHBvc2VkZ2UgY2xvY2spOworICAgCQkvLyAkZGlzcGxheSgiKzEwMDAgY3ljbGVzIik7CisgICAgICB0ZXN0X2ZhaWwgPSAxOworICAgZW5kCisgICBqb2luX2FueQorICAgZGlzYWJsZSBmb3JrOyAvL2Rpc2FibGUgcGVuZGluZyBmb3JrIGFjdGl2aXR5CisKKyAgIC8vIFJlYWQgQmFjayB0aGUgRmFpbHVyZSBBZGRyZXNzIGFuZCBjcm9zcy1jaGVjayBhbGwgdGhlIDggTUJJU1QKKyAgIC8vIFJlYWQgU2lnbmF0dXJlIGlzIGNvbW1pbmcgaXMgcmV2ZXJzZSBvcmRlciwgTUJJU1Q0ID0+IE1CSVNUMyA9PiBNQklTVDIKKyAgIGZvcihqPWBOT19TUkFNOyBqID4gMDsgaj1qLTEpIGJlZ2luCisgICAgICBmYWlsX2FkZHIxID0gZmF1bHRhZGRyWzBdK2otMTsKKyAgICAgIGZhaWxfYWRkcjIgPSBmYXVsdGFkZHJbMV0rai0xOworICAgICAgZmFpbF9hZGRyMyA9IGZhdWx0YWRkclsyXStqLTE7CisgICAgICBmYWlsX2FkZHI0ID0gZmF1bHRhZGRyWzNdK2otMTsKKworICAgICAgaWYobnVtX2ZhdWx0W2otMV0gPT0gMSkgYmVnaW4KKyAgICAgICAgICB3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgR0xCTF9CSVNUX1NSREFUQSxyZWFkX2RhdGEsezMyJ2gwfSwzMidoRkZGRl9GRkZGKTsKKyAgICAgICAgICB3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgR0xCTF9CSVNUX1NSREFUQSxyZWFkX2RhdGEsezcnaDAsZmFpbF9hZGRyMSwxNidoMH0sMzInaEZGRkZfRkZGRik7CisgICAgICBlbmQgZWxzZSBpZihudW1fZmF1bHRbai0xXSA9PSAyKSBiZWdpbgorICAgICAgICAgIHdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBHTEJMX0JJU1RfU1JEQVRBLHJlYWRfZGF0YSx7MzInaDB9LDMyJ2hGRkZGX0ZGRkYpOworICAgICAgICAgIHdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBHTEJMX0JJU1RfU1JEQVRBLHJlYWRfZGF0YSx7NydoMCxmYWlsX2FkZHIxLDcnaDAsZmFpbF9hZGRyMn0sMzInaEZGRkZfRkZGRik7CisgICAgIGVuZCBlbHNlIGlmKG51bV9mYXVsdFtqLTFdID09IDMpIGJlZ2luCisgICAgICAgICAgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYEdMQkxfQklTVF9TUkRBVEEscmVhZF9kYXRhLHs3J2gwLGZhaWxfYWRkcjMsMTYnaDB9LDMyJ2hGRkZGX0ZGRkYpOworICAgICAgICAgIHdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBHTEJMX0JJU1RfU1JEQVRBLHJlYWRfZGF0YSx7NydoMCxmYWlsX2FkZHIxLDcnaDAsZmFpbF9hZGRyMn0sMzInaEZGRkZfRkZGRik7CisgICAgICBlbmQgZWxzZSBpZihudW1fZmF1bHRbai0xXSA+PSA0KSBiZWdpbgorICAgICAgICAgIHdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBHTEJMX0JJU1RfU1JEQVRBLHJlYWRfZGF0YSx7NydoMCxmYWlsX2FkZHIzLDcnaDAsZmFpbF9hZGRyNH0sMzInaEZGRkZfRkZGRik7CisgICAgICAgICAgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYEdMQkxfQklTVF9TUkRBVEEscmVhZF9kYXRhLHs3J2gwLGZhaWxfYWRkcjEsNydoMCxmYWlsX2FkZHIyfSwzMidoRkZGRl9GRkZGKTsKKyAgICAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgICAgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYEdMQkxfQklTVF9TUkRBVEEscmVhZF9kYXRhLDMyJ2gwLDMyJ2hGRkZGX0ZGRkYpOworICAgICAgICAgIHdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBHTEJMX0JJU1RfU1JEQVRBLHJlYWRfZGF0YSwzMidoMCwzMidoRkZGRl9GRkZGKTsKKyAgICAgIGVuZAorICAgZW5kCitlbmQKK2VuZHRhc2sKKworCit0YXNrIHdiX3VzZXJfY29yZV93cml0ZTsKK2lucHV0IFszMTowXSBhZGRyZXNzOworaW5wdXQgWzMxOjBdIGRhdGE7CitiZWdpbgorICByZXBlYXQgKDEpIEAocG9zZWRnZSBjbG9jayk7CisgICMxOworICB3YmRfZXh0X2Fkcl9pID1hZGRyZXNzOyAgLy8gYWRkcmVzcworICB3YmRfZXh0X3dlX2kgID0naDE7ICAvLyB3cml0ZQorICB3YmRfZXh0X2RhdF9pID1kYXRhOyAgLy8gZGF0YSBvdXRwdXQKKyAgd2JkX2V4dF9zZWxfaSA9J2hGOyAgLy8gYnl0ZSBlbmFibGUKKyAgd2JkX2V4dF9jeWNfaSA9J2gxOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2JkX2V4dF9zdGJfaSA9J2gxOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2FpdCh3YmRfZXh0X2Fja19vID09IDEpOworICByZXBlYXQgKDEpIEAocG9zZWRnZSBjbG9jayk7CisgICMxOworICB3YmRfZXh0X2N5Y19pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X3N0Yl9pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X2Fkcl9pID0naDA7ICAvLyBhZGRyZXNzCisgIHdiZF9leHRfd2VfaSAgPSdoMDsgIC8vIHdyaXRlCisgIHdiZF9leHRfZGF0X2kgPSdoMDsgIC8vIGRhdGEgb3V0cHV0CisgIHdiZF9leHRfc2VsX2kgPSdoMDsgIC8vIGJ5dGUgZW5hYmxlCisgICRkaXNwbGF5KCJTVEFUVVM6IFdCIFVTRVIgQUNDRVNTIFdSSVRFIEFkZHJlc3MgOiAweCV4LCBEYXRhIDogMHgleCIsYWRkcmVzcyxkYXRhKTsKKyAgcmVwZWF0ICgyKSBAKHBvc2VkZ2UgY2xvY2spOworZW5kCitlbmR0YXNrCisKK3Rhc2sgIHdiX3VzZXJfY29yZV9yZWFkOworaW5wdXQgWzMxOjBdIGFkZHJlc3M7CitvdXRwdXQgWzMxOjBdIGRhdGE7CityZWcgICAgWzMxOjBdIGRhdGE7CitiZWdpbgorICByZXBlYXQgKDEpIEAocG9zZWRnZSBjbG9jayk7CisgICMxOworICB3YmRfZXh0X2Fkcl9pID1hZGRyZXNzOyAgLy8gYWRkcmVzcworICB3YmRfZXh0X3dlX2kgID0naDA7ICAvLyB3cml0ZQorICB3YmRfZXh0X2RhdF9pID0nMDsgIC8vIGRhdGEgb3V0cHV0CisgIHdiZF9leHRfc2VsX2kgPSdoRjsgIC8vIGJ5dGUgZW5hYmxlCisgIHdiZF9leHRfY3ljX2kgPSdoMTsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfc3RiX2kgPSdoMTsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdhaXQod2JkX2V4dF9hY2tfbyA9PSAxKTsKKyAgIzE7CisgIGRhdGEgID0gd2JkX2V4dF9kYXRfbzsgIAorICByZXBlYXQgKDEpIEAocG9zZWRnZSBjbG9jayk7CisgICMxOworICB3YmRfZXh0X2N5Y19pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X3N0Yl9pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X2Fkcl9pID0naDA7ICAvLyBhZGRyZXNzCisgIHdiZF9leHRfd2VfaSAgPSdoMDsgIC8vIHdyaXRlCisgIHdiZF9leHRfZGF0X2kgPSdoMDsgIC8vIGRhdGEgb3V0cHV0CisgIHdiZF9leHRfc2VsX2kgPSdoMDsgIC8vIGJ5dGUgZW5hYmxlCisgIC8vJGRpc3BsYXkoIlNUQVRVUzogV0IgVVNFUiBBQ0NFU1MgUkVBRCAgQWRkcmVzcyA6IDB4JXgsIERhdGEgOiAweCV4IixhZGRyZXNzLGRhdGEpOworICByZXBlYXQgKDIpIEAocG9zZWRnZSBjbG9jayk7CitlbmQKK2VuZHRhc2sKKwordGFzayAgd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2s7CitpbnB1dCBbMzE6MF0gYWRkcmVzczsKK291dHB1dCBbMzE6MF0gZGF0YTsKK2lucHV0IFszMTowXSBjbXBfZGF0YTsKK2lucHV0IFszMTowXSBjbXBfbWFzazsKK3JlZyAgICBbMzE6MF0gZGF0YTsKK2JlZ2luCisgIHJlcGVhdCAoMSkgQChwb3NlZGdlIGNsb2NrKTsKKyAgIzE7CisgIHdiZF9leHRfYWRyX2kgPWFkZHJlc3M7ICAvLyBhZGRyZXNzCisgIHdiZF9leHRfd2VfaSAgPSdoMDsgIC8vIHdyaXRlCisgIHdiZF9leHRfZGF0X2kgPScwOyAgLy8gZGF0YSBvdXRwdXQKKyAgd2JkX2V4dF9zZWxfaSA9J2hGOyAgLy8gYnl0ZSBlbmFibGUKKyAgd2JkX2V4dF9jeWNfaSA9J2gxOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2JkX2V4dF9zdGJfaSA9J2gxOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2FpdCh3YmRfZXh0X2Fja19vID09IDEpOworICAjMTsKKyAgZGF0YSAgPSB3YmRfZXh0X2RhdF9vOyAgCisgIHJlcGVhdCAoMSkgQChwb3NlZGdlIGNsb2NrKTsKKyAgIzE7CisgIHdiZF9leHRfY3ljX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfc3RiX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfYWRyX2kgPSdoMDsgIC8vIGFkZHJlc3MKKyAgd2JkX2V4dF93ZV9pICA9J2gwOyAgLy8gd3JpdGUKKyAgd2JkX2V4dF9kYXRfaSA9J2gwOyAgLy8gZGF0YSBvdXRwdXQKKyAgd2JkX2V4dF9zZWxfaSA9J2gwOyAgLy8gYnl0ZSBlbmFibGUKKyAgaWYoKGRhdGEgJiBjbXBfbWFzaykgIT09IChjbXBfZGF0YSAmIGNtcF9tYXNrKSApIGJlZ2luCisgICAgICRkaXNwbGF5KCJFUlJPUiA6IFdCIFVTRVIgQUNDRVNTIFJFQUQgIEFkZHJlc3MgOiAweCV4LCBFeGQ6IDB4JXggUnhkOiAweCV4ICIsYWRkcmVzcywoY21wX2RhdGEgJiBjbXBfbWFzayksKGRhdGEgJiBjbXBfbWFzaykpOworICAgICB0ZXN0X2ZhaWwgPSAxOworICBlbmQgZWxzZSBiZWdpbgorICAgICAkZGlzcGxheSgiU1RBVFVTOiBXQiBVU0VSIEFDQ0VTUyBSRUFEICBBZGRyZXNzIDogMHgleCwgRGF0YSA6IDB4JXgiLGFkZHJlc3MsKGRhdGEgJiBjbXBfbWFzaykpOworICBlbmQKKyAgcmVwZWF0ICgyKSBAKHBvc2VkZ2UgY2xvY2spOworZW5kCitlbmR0YXNrCisKKworZW5kbW9kdWxlCitgZGVmYXVsdF9uZXR0eXBlIHdpcmUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvdXNlcl9yaXNjX2Jvb3QvTWFrZWZpbGUgYi92ZXJpbG9nL2R2L3VzZXJfcmlzY19ib290L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwNTdjMTAKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3VzZXJfcmlzY19ib290L01ha2VmaWxlCkBAIC0wLDAgKzEsMTExIEBACisjIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjAgRWZhYmxlc3MgQ29ycG9yYXRpb24KKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisKKyMjIENhcmF2ZWwgUG9pbnRlcnMKK0NBUkFWRUxfUk9PVCA/PSAuLi8uLi8uLi9jYXJhdmVsCitDQVJBVkVMX1BBVEggPz0gJChDQVJBVkVMX1JPT1QpCitDQVJBVkVMX0ZJUk1XQVJFX1BBVEggPSAkKENBUkFWRUxfUEFUSCkvdmVyaWxvZy9kdi9jYXJhdmVsCitDQVJBVkVMX1ZFUklMT0dfUEFUSCAgPSAkKENBUkFWRUxfUEFUSCkvdmVyaWxvZworQ0FSQVZFTF9SVExfUEFUSCA9ICQoQ0FSQVZFTF9WRVJJTE9HX1BBVEgpL3J0bAorQ0FSQVZFTF9CRUhBVklPVVJBTF9NT0RFTFMgPSAkKENBUkFWRUxfVkVSSUxPR19QQVRIKS9kdi9jYXJhdmVsCisKKworIyMgVXNlciBQcm9qZWN0IFBvaW50ZXJzCitVUFJKX1ZFUklMT0dfUEFUSCA/PSAuLi8uLi8uLi92ZXJpbG9nCitVUFJKX1JUTF9QQVRIID0gJChVUFJKX1ZFUklMT0dfUEFUSCkvcnRsCitVUFJKX0dMX1BBVEggPSAkKFVQUkpfVkVSSUxPR19QQVRIKS9nbAorVVBSSl9CRUhBVklPVVJBTF9NT0RFTFMgPSAuLi9tb2RlbAorVVBSSl9CRUhBVklPVVJBTF9BR0VOVFMgPSAuLi9hZ2VudHMKK1VQUkpfSU5DTFVERV9QQVRIMSA9ICQoVVBSSl9SVExfUEFUSCkveWlmaXZlL3ljcjFjL3NyYy9pbmNsdWRlcworVVBSSl9JTkNMVURFX1BBVEgyID0gJChVUFJKX1JUTF9QQVRIKS9zZHJhbV9jdHJsL3NyYy9kZWZzCitVUFJKX0lOQ0xVREVfUEFUSDMgPSAkKFVQUkpfUlRMX1BBVEgpL2kyY20vc3JjL2luY2x1ZGVzCitVUFJKX0lOQ0xVREVfUEFUSDQgPSAkKFVQUkpfUlRMX1BBVEgpL3VzYjFfaG9zdC9zcmMvaW5jbHVkZXMKK1VQUkpfSU5DTFVERV9QQVRINSA9ICQoVVBSSl9SVExfUEFUSCkvbWJpc3QvaW5jbHVkZQorCisjIyBZSUZJVkUgRklSTVdBUkUKK1lJRklWRV9GSVJNV0FSRV9QQVRIID0gJChVUFJKX1ZFUklMT0dfUEFUSCkvZHYvZmlybXdhcmUKK0dDQzY0X1BSRUZJWD89cmlzY3Y2NC11bmtub3duLWVsZgorCisjIyBSSVNDViBHQ0MgCitHQ0NfUEFUSD89L2VmL2FwcHMvYmluCitHQ0NfUFJFRklYPz1yaXNjdjMyLXVua25vd24tZWxmCitQREtfUEFUSD89L2VmL3RlY2gvU1cvc2t5MTMwQQorCisjIyBTaW11bGF0aW9uIG1vZGU6IFJUTC9HTAorU0lNPz1SVEwKK0RVTVA/PU9GRgorCisuU1VGRklYRVM6CisKK1BBVFRFUk4gPSB1c2VyX3Jpc2NfYm9vdAorCithbGw6ICAke1BBVFRFUk46PS52Y2R9CisKK2hleDogICR7UEFUVEVSTjo9LmhleH0KKwordnZwOiAgJHtQQVRURVJOOj0udnZwfQorCislLnZ2cDogJV90Yi52CisJJHtHQ0M2NF9QUkVGSVh9LWdjYyAtTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICAtRF9fUlZDX0VYVCAtc3RhdGljIC1zdGQ9Z251OTkgLWZuby1jb21tb24gLWZuby1idWlsdGluLXByaW50ZiAtRFRDTT0wIC1XYSwtbWFyY2g9cnYzMmltYyAtbWFyY2g9cnYzMmltYyAtbWFiaT1pbHAzMiAtREZMQUdTX1NUUj1cIiItTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICJcIiAgLWMgLUkuLyAtSSQoWUlGSVZFX0ZJUk1XQVJFX1BBVEgpICB1c2VyX3Jpc2NfYm9vdC5jIC1vIHVzZXJfcmlzY19ib290Lm8KKwkke0dDQzY0X1BSRUZJWH0tZ2NjIC1PMiAtZnVucm9sbC1sb29wcyAtZnBlZWwtbG9vcHMgLWZnY3NlLXNtIC1mZ2NzZS1sYXMgIC1EX19SVkNfRVhUIC1zdGF0aWMgLXN0ZD1nbnU5OSAtZm5vLWNvbW1vbiAtZm5vLWJ1aWx0aW4tcHJpbnRmIC1EVENNPTAgLVdhLC1tYXJjaD1ydjMyaW1jIC1tYXJjaD1ydjMyaW1jIC1tYWJpPWlscDMyIC1ERkxBR1NfU1RSPVwiIi1PMiAtZnVucm9sbC1sb29wcyAtZnBlZWwtbG9vcHMgLWZnY3NlLXNtIC1mZ2NzZS1sYXMgIlwiICAtRF9fQVNTRU1CTFlfXz0xIC1jIC1JLi8gLUkkKFlJRklWRV9GSVJNV0FSRV9QQVRIKSAgJChZSUZJVkVfRklSTVdBUkVfUEFUSCkvY3J0LlMgLW8gY3J0Lm8KKwkke0dDQzY0X1BSRUZJWH0tZ2NjIC1vIHVzZXJfcmlzY19ib290LmVsZiAtVCAkKFlJRklWRV9GSVJNV0FSRV9QQVRIKS9saW5rLmxkIHVzZXJfcmlzY19ib290Lm8gY3J0Lm8gLW5vc3RhcnRmaWxlcyAtbm9zdGRsaWIgLWxjIC1sZ2NjIC1tYXJjaD1ydjMyaW1jIC1tYWJpPWlscDMyIC1OCisJJHtHQ0M2NF9QUkVGSVh9LW9iamNvcHkgLU8gdmVyaWxvZyB1c2VyX3Jpc2NfYm9vdC5lbGYgdXNlcl9yaXNjX2Jvb3QuaGV4CisJJHtHQ0M2NF9QUkVGSVh9LW9iamR1bXAgLUQgdXNlcl9yaXNjX2Jvb3QuZWxmID4gdXNlcl9yaXNjX2Jvb3QuZHVtcAorCXJtIGNydC5vIHVzZXJfcmlzY19ib290Lm8KK2lmZXEgKCQoU0lNKSxSVEwpCisgICBpZmVxICgkKERVTVApLE9GRikKKwlpdmVyaWxvZyAtZzIwMDUtc3YgLURGVU5DVElPTkFMIC1EU0lNIC1JICQoUERLX1BBVEgpIFwKKwktSSAkKENBUkFWRUxfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSAkKENBUkFWRUxfUlRMX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfTU9ERUxTKSAgICAtSSAkKFVQUkpfUlRMX1BBVEgpIC1JICQoVVBSSl9WRVJJTE9HX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfQUdFTlRTKSAgICBcCisJLUkgJChVUFJKX0lOQ0xVREVfUEFUSDEpICAgIC1JICQoVVBSSl9JTkNMVURFX1BBVEgyKSAtSSAkKFVQUkpfSU5DTFVERV9QQVRIMykgXAorCS1JICQoVVBSSl9JTkNMVURFX1BBVEg0KSAtSSAkKFVQUkpfSU5DTFVERV9QQVRINSkgXAorCSQ8IC1vICRAIAorICAgIGVsc2UgIAorCWl2ZXJpbG9nIC1nMjAwNS1zdiAtRFdGRFVNUCAtREZVTkNUSU9OQUwgLURTSU0gLUkgJChQREtfUEFUSCkgXAorCS1JICQoQ0FSQVZFTF9CRUhBVklPVVJBTF9NT0RFTFMpIC1JICQoQ0FSQVZFTF9SVExfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9NT0RFTFMpICAgIC1JICQoVVBSSl9SVExfUEFUSCkgLUkgJChVUFJKX1ZFUklMT0dfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9BR0VOVFMpICAgIFwKKwktSSAkKFVQUkpfSU5DTFVERV9QQVRIMSkgICAgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDIpIC1JICQoVVBSSl9JTkNMVURFX1BBVEgzKSBcCisJLUkgJChVUFJKX0lOQ0xVREVfUEFUSDQpIC1JICQoVVBSSl9JTkNMVURFX1BBVEg1KSBcCisJJDwgLW8gJEAgCisgICBlbmRpZgorZWxzZSAgCisJaXZlcmlsb2cgLWcyMDA1LXN2IC1ERlVOQ1RJT05BTCAtRFNJTSAtREdMIC1JICQoUERLX1BBVEgpIFwKKwktSSAkKENBUkFWRUxfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSAkKENBUkFWRUxfUlRMX1BBVEgpIC1JICQoQ0FSQVZFTF9WRVJJTE9HX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSAkKFVQUkpfR0xfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9BR0VOVFMpICAgIFwKKwkkPCAtbyAkQCAKK2VuZGlmCisKKyUudmNkOiAlLnZ2cAorCXZ2cCAkPAorCislLmVsZjogJS5jICQoQ0FSQVZFTF9GSVJNV0FSRV9QQVRIKS9zZWN0aW9ucy5sZHMgJChDQVJBVkVMX0ZJUk1XQVJFX1BBVEgpL3N0YXJ0LnMKKwkke0dDQzY0X1BSRUZJWH0tZ2NjIC1JICQoQ0FSQVZFTF9QQVRIKSAtbWFyY2g9cnYzMmltYyAtbWFiaT1pbHAzMiAtV2wsLUJzdGF0aWMsLVQsJChDQVJBVkVMX0ZJUk1XQVJFX1BBVEgpL3NlY3Rpb25zLmxkcywtLXN0cmlwLWRlYnVnIC1mZnJlZXN0YW5kaW5nIC1ub3N0ZGxpYiAtbyAkQCAkKENBUkFWRUxfRklSTVdBUkVfUEFUSCkvc3RhcnQucyAkPAorCislLmhleDogCisJZWNobyBAIlRoaXMgaXMgdXNlciBib290IHRlc3QsIG5vdGluZyB0byBjb21waWxlIHRoZSBtYW5nbWVudCBjb3JlIGNvZGUiCisKKyUuYmluOiAlLmVsZgorCSR7R0NDNjRfUFJFRklYfS1vYmpjb3B5IC1PIGJpbmFyeSAkPCAvZGV2L3N0ZG91dCB8IHRhaWwgLWMgKzEwNDg1NzcgPiAkQAorCisjIC0tLS0gQ2xlYW4gLS0tLQorCitjbGVhbjoKKwlybSAtZiAqLmVsZiAqLmhleCAqLmJpbiAqLnZ2cCAqLnZjZCAqLmxvZyAqLmR1bXAKKworLlBIT05ZOiBjbGVhbiBoZXggYWxsCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3VzZXJfcmlzY19ib290L3J1bl9pdmVyaWxvZyBiL3Zlcmlsb2cvZHYvdXNlcl9yaXNjX2Jvb3QvcnVuX2l2ZXJpbG9nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmYwODNkNmQKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3VzZXJfcmlzY19ib290L3J1bl9pdmVyaWxvZwpAQCAtMCwwICsxLDQyIEBACisjIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworIyAvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxLCBEaW5lc2ggQW5uYXl5YQorIyAvLyAKKyMgLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIC8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjIC8vCisjIC8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjIC8vCisjIC8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIC8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisjIC8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorIyAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCityaXNjdjY0LXVua25vd24tZWxmLWdjYyAtTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICAtRF9fUlZDX0VYVCAtc3RhdGljIC1zdGQ9Z251OTkgLWZuby1jb21tb24gLWZuby1idWlsdGluLXByaW50ZiAtRFRDTT0xIC1XYSwtbWFyY2g9cnYzMmltYyAtbWFyY2g9cnYzMmltYyAtbWFiaT1pbHAzMiAtREZMQUdTX1NUUj1cIiItTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICJcIiAgLWMgLUkuLyAtSS4uLy4uL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvY29tbW9uICB1c2VyX3Jpc2NfYm9vdC5jIC1vIHVzZXJfcmlzY19ib290Lm8KKworcmlzY3Y2NC11bmtub3duLWVsZi1nY2MgLU8yIC1mdW5yb2xsLWxvb3BzIC1mcGVlbC1sb29wcyAtZmdjc2Utc20gLWZnY3NlLWxhcyAgLURfX1JWQ19FWFQgLXN0YXRpYyAtc3RkPWdudTk5IC1mbm8tY29tbW9uIC1mbm8tYnVpbHRpbi1wcmludGYgLURUQ009MSAtV2EsLW1hcmNoPXJ2MzJpbWMgLW1hcmNoPXJ2MzJpbWMgLW1hYmk9aWxwMzIgLURGTEFHU19TVFI9XCIiLU8yIC1mdW5yb2xsLWxvb3BzIC1mcGVlbC1sb29wcyAtZmdjc2Utc20gLWZnY3NlLWxhcyAiXCIgIC1EX19BU1NFTUJMWV9fPTEgLWMgLUkuLyAtSS4uLy4uL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvY29tbW9uLyAgLi4vLi4vcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9jb21tb24vY3J0X3RjbS5TIC1vIGNydF90Y20ubworCityaXNjdjY0LXVua25vd24tZWxmLWdjYyAtbyB1c2VyX3Jpc2NfYm9vdC5lbGYgLVQgLi4vLi4vcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9jb21tb24vbGlua190Y20ubGQgdXNlcl9yaXNjX2Jvb3QubyBjcnRfdGNtLm8gLW5vc3RhcnRmaWxlcyAtbm9zdGRsaWIgLWxjIC1sZ2NjIC1tYXJjaD1ydjMyaW1jIC1tYWJpPWlscDMyCisKK3Jpc2N2NjQtdW5rbm93bi1lbGYtb2JqY29weSAtTyB2ZXJpbG9nIHVzZXJfcmlzY19ib290LmVsZiB1c2VyX3Jpc2NfYm9vdC5oZXgKKworcmlzY3Y2NC11bmtub3duLWVsZi1vYmpkdW1wIC1EIHVzZXJfcmlzY19ib290LmVsZiA+IHVzZXJfcmlzY19ib290LmR1bXAKKworcm0gY3J0X3RjbS5vIHVzZXJfcmlzY19ib290Lm8KKworI2l2ZXJpbG9nIHdpdGggd2F2ZWZvcm0gZHVtcAoraXZlcmlsb2cgLWcyMDA1LXN2IC1EV0ZEVU1QIC1ERlVOQ1RJT05BTCAtRFNJTSAtSSAkUERLX1BBVEggLUkgIC4uLy4uLy4uL2NhcmF2ZWwvdmVyaWxvZy9ydGwgIC1JIC4uLyAtSSAuLi8uLi8uLi92ZXJpbG9nL3J0bCAtSSAuLi8gLUkgLi4vLi4vLi4vdmVyaWxvZyAtSSAuLi8uLi8uLi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvaW5jbHVkZXMgICAtSSAuLi8uLi8uLi92ZXJpbG9nL3J0bC9zZHJhbV9jdHJsL3NyYy9kZWZzIC1JICRDQVJBVkVMX1JPT1QvdmVyaWxvZy9kdi9jYXJhdmVsIC1JIC4uL21vZGVsIC1JIC4uL2FnZW50cyB1c2VyX3Jpc2NfYm9vdF90Yi52IC1vIHVzZXJfcmlzY19ib290X3RiLnZ2cAorCisKKyNpdmVyaWxvZyAtZzIwMDUtc3YgLUkgJFBES19QQVRIIC1ERlVOQ1RJT05BTCAtRFNJTSAtSSAgLi4vLi4vLi4vY2FyYXZlbC92ZXJpbG9nL3J0bCAtSSAuLi8gLUkgLi4vLi4vLi4vdmVyaWxvZy9ydGwgLUkgLi4vLi4vLi4vdmVyaWxvZyAtSSAuLi8uLi8uLi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvaW5jbHVkZXMgICAtSSAuLi8uLi8uLi92ZXJpbG9nL3J0bC9zZHJhbV9jdHJsL3NyYy9kZWZzIC1JICRDQVJBVkVMX1JPT1QvdmVyaWxvZy9kdi9jYXJhdmVsIC1JIC4uL21vZGVsIC1JIC4uL2FnZW50cyB1c2VyX3Jpc2NfYm9vdF90Yi52IC1vIHVzZXJfcmlzY19ib290X3RiLnZ2cAorCisjIEdMUworI2l2ZXJpbG9nIC1nMjAwNS1zdiAtREdMIC1JICRQREtfUEFUSCAtSSAgLi4vLi4vLi4vY2FyYXZlbC92ZXJpbG9nL3J0bCAgLUkgLi4vIC1JIC4uLy4uLy4uL3Zlcmlsb2cvcnRsIC1JIC4uLy4uLy4uL3Zlcmlsb2cgLUkgL2hvbWUvZGluZXNoYS93b3JrYXJlYS9wZGsvc2t5MTMwQSAtSSAuLi8uLi8uLi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvaW5jbHVkZXMgICAtSSAuLi8uLi8uLi92ZXJpbG9nL3J0bC9zZHJhbV9jdHJsL3NyYy9kZWZzIC1JICRDQVJBVkVMX1JPT1QvdmVyaWxvZy9kdi9jYXJhdmVsIC1JIC4uL21vZGVsIC1JIC4uL2FnZW50cyB1c2VyX3VhcnRfdGIudiAtbyB1c2VyX3Jpc2NfYm9vdF90Yi52dnAKKwordnZwIHVzZXJfcmlzY19ib290X3RiLnZ2cCB8IHRlZSB0ZXN0LmxvZworCitccm0gLXJmIHVzZXJfcmlzY19ib290X3RiLnZ2cApkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi91c2VyX3Jpc2NfYm9vdC91c2VyX3Jpc2NfYm9vdC5jIGIvdmVyaWxvZy9kdi91c2VyX3Jpc2NfYm9vdC91c2VyX3Jpc2NfYm9vdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3ZTQyNGIKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3VzZXJfcmlzY19ib290L3VzZXJfcmlzY19ib290LmMKQEAgLTAsMCArMSw3MyBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxLCBEaW5lc2ggQW5uYXl5YQorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworI2RlZmluZSBTQ19TSU1fT1VUUE9SVCAoMHhmMDAwMDAwMCkKKyNkZWZpbmUgdWludDMyX3QgIGxvbmcKKworI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcwICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAyMDAwMCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMSAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMjAwMDQpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzIgICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDIwMDA4KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWczICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAyMDAwQykKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnNCAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMjAwMTApCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzUgICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDIwMDE0KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWc2ICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAyMDAxOCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnNyAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMjAwMUMpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzggICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDIwMDIwKQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWc5ICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAyMDAyNCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMTAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMjAwMjgpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzExICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDIwMDJDKQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcxMiAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAyMDAzMCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMTMgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMjAwMzQpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzE0ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDIwMDM4KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcxNSAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAyMDAzQykKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMTYgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMjAwNDApCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzE3ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDIwMDQ0KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcxOCAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAyMDA0OCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMTkgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMjAwNEMpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzIwICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDIwMDUwKQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcyMSAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAyMDA1NCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMjIgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMjAwNTgpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzIzICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDIwMDVDKQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcyNCAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAyMDA2MCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMjUgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMjAwNjQpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzI2ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDIwMDY4KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcyNyAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAyMDA2QykKKworaW50IG1haW4oKQoreworCisgICAgLy92b2xhdGlsZSBsb25nICpvdXRfcHRyID0gKHZvbGF0aWxlIGxvbmcqKVNDX1NJTV9PVVRQT1JUOworICAgIC8vKm91dF9wdHIgPSAweEFBQkJDQ0REOworICAgIC8vKm91dF9wdHIgPSAweEJCQ0NEREVFOworICAgIC8vKm91dF9wdHIgPSAweENDRERFRUZGOworICAgIC8vKm91dF9wdHIgPSAweERERUVGRjAwOworCisgICAgLy8gV3JpdGUgc29mdHdhcmUgV3JpdGUgJiBSZWFkIFJlZ2lzdGVyCisgICAgcmVnX21wcmpfZ2xvYmxfcmVnMjIgID0gMHgxMTIyMzM0NDsgCisgICAgcmVnX21wcmpfZ2xvYmxfcmVnMjMgID0gMHgyMjMzNDQ1NTsgCisgICAgcmVnX21wcmpfZ2xvYmxfcmVnMjQgID0gMHgzMzQ0NTU2NjsgCisgICAgcmVnX21wcmpfZ2xvYmxfcmVnMjUgID0gMHg0NDU1NjY3NzsgCisgICAgcmVnX21wcmpfZ2xvYmxfcmVnMjYgPSAweDU1NjY3Nzg4OyAKKyAgICByZWdfbXByal9nbG9ibF9yZWcyNyA9IDB4NjY3Nzg4OTk7IAorICAgIC8vcmVnX21wcmpfZ2xvYmxfcmVnMTIgPSAweDc3ODg5OUFBOyAKKyAgICAvL3JlZ19tcHJqX2dsb2JsX3JlZzEzID0gMHg4ODk5QUFCQjsgCisgICAgLy9yZWdfbXByal9nbG9ibF9yZWcxNCA9IDB4OTlBQUJCQ0M7IAorICAgIC8vcmVnX21wcmpfZ2xvYmxfcmVnMTUgPSAweEFBQkJDQ0REOyAKKworICAgIHdoaWxlKDEpIHt9CisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3VzZXJfcmlzY19ib290L3VzZXJfcmlzY19ib290X3RiLnYgYi92ZXJpbG9nL2R2L3VzZXJfcmlzY19ib290L3VzZXJfcmlzY19ib290X3RiLnYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZmMjQwOAotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvdXNlcl9yaXNjX2Jvb3QvdXNlcl9yaXNjX2Jvb3RfdGIudgpAQCAtMCwwICsxLDM5OCBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogIDIwMjEgLCBEaW5lc2ggQW5uYXl5YQorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogTW9kaWZpZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFN0YW5kYWxvbmUgVXNlciB2YWxpZGF0aW9uIFRlc3QgYmVuY2ggICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBZSUZpdmUgY29yZXMgcHJvamVjdCAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHBzOi8vZ2l0aHViLmNvbS9kaW5lc2hhbm5heXlhL3lpZml2ZV9yMC5naXQgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9jb3Jlcy95aWZpdmUvICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICBUaGlzIGlzIGEgc3RhbmRhbG9uZSB0ZXN0IGJlbmNoIHRvIHZhbGlkYXRlIHRoZSAgICAgICAgICAgIC8vLy8KKy8vLy8gICBEaWdpdGFsIGNvcmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAxLiBVc2VyIFJpc2MgY29yZSBpcyBib290ZWQgdXNpbmcgIGNvbXBpbGVkIGNvZGUgb2YgICAgICAgIC8vLy8KKy8vLy8gICAgICB1c2VyX3Jpc2NfYm9vdC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAyLiBVc2VyIFJpc2MgY29yZSB1c2VzIFNlcmlhbCBGbGFzaCBhbmQgU0RSQU0gdG8gYm9vdCAgICAgIC8vLy8KKy8vLy8gICAzLiBBZnRlciBzdWNjZXNzZnVsIGJvb3QsIFJpc2MgY29yZSB3aWxsICB3cml0ZSBzaWduYXR1cmUgIC8vLy8KKy8vLy8gICAgICBpbiB0byAgdXNlciByZWdpc3RlciBmcm9tIDB4MTAwM18wMDU4IHRvIDB4MTAwM18wMDZDICAgIC8vLy8KKy8vLy8gICA0LiBUaHJvdWdoIHRoZSBFeHRlcm5hbCBXaXNoYm9uZSBJbnRlcmZhY2Ugd2UgcmVhZCBiYWNrICAgIC8vLy8KKy8vLy8gICAgICAgZnJvbSAweDMwMDNfMDA1OCB0byAweDMwMDNfMDA2QyAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgYW5kIHZhbGlkYXRlIHRoZSB1c2VyIHJlZ2lzdGVyIHRvIGRlY2xhcmVkIHBhc3MgZmFpbCAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcihzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAtIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFJldmlzaW9uIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC4xIC0gMTZ0aCBGZWIgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gQ29weXJpZ2h0IChDKSAyMDAwIEF1dGhvcnMgYW5kIE9QRU5DT1JFUy5PUkcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgIC8vLy8KKy8vLy8gcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgIC8vLy8KKy8vLy8gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgIC8vLy8KKy8vLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCAgIC8vLy8KKy8vLy8gYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IC8vLy8KKy8vLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSAgIC8vLy8KKy8vLy8gbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlICAgICAgIC8vLy8KKy8vLy8gdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCAgIC8vLy8KKy8vLy8gd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAgICAgIC8vLy8KKy8vLy8gUFVSUE9TRS4gIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIC8vLy8KKy8vLy8gZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvdXJjZTsgaWYgbm90LCBkb3dubG9hZCBpdCAgIC8vLy8KKy8vLy8gZnJvbSBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvbGdwbC5zaHRtbCAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworYGRlZmF1bHRfbmV0dHlwZSB3aXJlCisKK2B0aW1lc2NhbGUgMSBucyAvIDEgbnMKKworYGluY2x1ZGUgInMyNWZsMjU2cy5zdiIKK2BpbmNsdWRlICJ1cHJqX25ldGxpc3RzLnYiCitgaW5jbHVkZSAibXQ0OGxjOG04YTIudiIKKworbW9kdWxlIHVzZXJfcmlzY19ib290X3RiOworCXJlZyBjbG9jazsKKwlyZWcgd2JfcnN0X2k7CisJcmVnIHBvd2VyMSwgcG93ZXIyOworCXJlZyBwb3dlcjMsIHBvd2VyNDsKKworICAgICAgICByZWcgICAgICAgIHdiZF9leHRfY3ljX2k7ICAvLyBzdHJvYmUvcmVxdWVzdAorICAgICAgICByZWcgICAgICAgIHdiZF9leHRfc3RiX2k7ICAvLyBzdHJvYmUvcmVxdWVzdAorICAgICAgICByZWcgWzMxOjBdIHdiZF9leHRfYWRyX2k7ICAvLyBhZGRyZXNzCisgICAgICAgIHJlZyAgICAgICAgd2JkX2V4dF93ZV9pOyAgLy8gd3JpdGUKKyAgICAgICAgcmVnIFszMTowXSB3YmRfZXh0X2RhdF9pOyAgLy8gZGF0YSBvdXRwdXQKKyAgICAgICAgcmVnIFszOjBdICB3YmRfZXh0X3NlbF9pOyAgLy8gYnl0ZSBlbmFibGUKKworICAgICAgICB3aXJlIFszMTowXSB3YmRfZXh0X2RhdF9vOyAgLy8gZGF0YSBpbnB1dAorICAgICAgICB3aXJlICAgICAgICB3YmRfZXh0X2Fja19vOyAgLy8gYWNrbm93bGVnZW1lbnQKKyAgICAgICAgd2lyZSAgICAgICAgd2JkX2V4dF9lcnJfbzsgIC8vIGVycm9yCisKKwkvLyBVc2VyIEkvTworCXdpcmUgWzM3OjBdIGlvX29lYjsKKwl3aXJlIFszNzowXSBpb19vdXQ7CisJd2lyZSBbMzc6MF0gaW9faW47CisKKwl3aXJlIGdwaW87CisJd2lyZSBbMzc6MF0gbXByal9pbzsKKwl3aXJlIFs3OjBdIG1wcmpfaW9fMDsKKwlyZWcgICAgICAgICB0ZXN0X2ZhaWw7CisJcmVnIFszMTowXSByZWFkX2RhdGE7CisKKworCisJLy8gRXh0ZXJuYWwgY2xvY2sgaXMgdXNlZCBieSBkZWZhdWx0LiAgTWFrZSB0aGlzIGFydGlmaWNpYWxseSBmYXN0IGZvciB0aGUKKwkvLyBzaW11bGF0aW9uLiAgTm9ybWFsbHkgdGhpcyB3b3VsZCBiZSBhIHNsb3cgY2xvY2sgYW5kIHRoZSBkaWdpdGFsIFBMTAorCS8vIHdvdWxkIGJlIHRoZSBmYXN0IGNsb2NrLgorCisJYWx3YXlzICMxMi41IGNsb2NrIDw9IChjbG9jayA9PT0gMSdiMCk7CisKKwlpbml0aWFsIGJlZ2luCisJCWNsb2NrID0gMDsKKyAgICAgICAgICAgICAgICB3YmRfZXh0X2N5Y19pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICAgICAgICAgICAgICAgIHdiZF9leHRfc3RiX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgICAgICAgICAgICAgd2JkX2V4dF9hZHJfaSA9J2gwOyAgLy8gYWRkcmVzcworICAgICAgICAgICAgICAgIHdiZF9leHRfd2VfaSAgPSdoMDsgIC8vIHdyaXRlCisgICAgICAgICAgICAgICAgd2JkX2V4dF9kYXRfaSA9J2gwOyAgLy8gZGF0YSBvdXRwdXQKKyAgICAgICAgICAgICAgICB3YmRfZXh0X3NlbF9pID0naDA7ICAvLyBieXRlIGVuYWJsZQorCWVuZAorCisJYGlmZGVmIFdGRFVNUAorCSAgIGluaXRpYWwgYmVnaW4KKwkgICAJJGR1bXBmaWxlKCJyaXNjX2Jvb3QudmNkIik7CisJICAgCSRkdW1wdmFycygyLCB1c2VyX3Jpc2NfYm9vdF90Yik7CisJICAgZW5kCisgICAgICAgYGVuZGlmCisKKwlpbml0aWFsIGJlZ2luCisKKwkJIzIwMDsgLy8gV2FpdCBmb3IgcmVzZXQgcmVtb3ZhbAorCSAgICAgICAgcmVwZWF0ICgxMCkgQChwb3NlZGdlIGNsb2NrKTsKKwkJJGRpc3BsYXkoIk1vbml0b3I6IFN0YW5kYWxvbmUgVXNlciBSaXNjIEJvb3QgVGVzdCBTdGFydGVkIik7CisKKwkJLy8gUmVtb3ZlIFdiIFJlc2V0CisJCXdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwMCwnaDEpOworCisJICAgICAgICByZXBlYXQgKDIpIEAocG9zZWRnZSBjbG9jayk7CisJCSMxOworCQkvLyBSZW1vdmUgYWxsIHRoZSByZXNldAorICAgICAgICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwMCwnaEYpOworCisKKwkJLy8gUmVwZWF0IGN5Y2xlcyBvZiAxMDAwIGNsb2NrIGVkZ2VzIGFzIG5lZWRlZCB0byBjb21wbGV0ZSB0ZXN0YmVuY2gKKwkJcmVwZWF0ICgzMCkgYmVnaW4KKwkJCXJlcGVhdCAoMTAwMCkgQChwb3NlZGdlIGNsb2NrKTsKKwkJCS8vICRkaXNwbGF5KCIrMTAwMCBjeWNsZXMiKTsKKwkJZW5kCisKKworCQkkZGlzcGxheSgiTW9uaXRvcjogUmVhZGluZyBCYWNrIHRoZSBleHBlY3RlZCB2YWx1ZSIpOworCQkvLyBVc2VyIFJJU0MgY29yZSBleHBlY3QgdG8gd3JpdGUgdGhlc2UgdmFsdWUgaW4gZ2xvYmFsCisJCS8vIHJlZ2lzdGVyLCByZWFkIGJhY2sgYW5kIGRlY2lkZSBvbiBwYXNzIGZhaWwKKwkJLy8gMHgzMDAwMDAxOCAgPSAweDExMjIzMzQ0OyAKKyAgICAgICAgICAgICAgICAvLyAweDMwMDAwMDFDICA9IDB4MjIzMzQ0NTU7IAorICAgICAgICAgICAgICAgIC8vIDB4MzAwMDAwMjAgID0gMHgzMzQ0NTU2NjsgCisgICAgICAgICAgICAgICAgLy8gMHgzMDAwMDAyNCAgPSAweDQ0NTU2Njc3OyAKKyAgICAgICAgICAgICAgICAvLyAweDMwMDAwMDI4ID0gMHg1NTY2Nzc4ODsgCisgICAgICAgICAgICAgICAgLy8gMHgzMDAwMDAyQyA9IDB4NjY3Nzg4OTk7IAorCisgICAgICAgICAgICAgICAgdGVzdF9mYWlsID0gMDsKKwkJd2JfdXNlcl9jb3JlX3JlYWQoMzInaDMwMDIwMDU4LHJlYWRfZGF0YSk7CisJCWlmKHJlYWRfZGF0YSAhPSAzMidoMTEyMjMzNDQpIHRlc3RfZmFpbCA9IDE7CisKKwkJd2JfdXNlcl9jb3JlX3JlYWQoMzInaDMwMDIwMDVDLHJlYWRfZGF0YSk7CisJCWlmKHJlYWRfZGF0YSAhPSAzMidoMjIzMzQ0NTUpIHRlc3RfZmFpbCA9IDE7CisKKwkJd2JfdXNlcl9jb3JlX3JlYWQoMzInaDMwMDIwMDYwLHJlYWRfZGF0YSk7CisJICAgICAgICBpZihyZWFkX2RhdGEgIT0gMzInaDMzNDQ1NTY2KSB0ZXN0X2ZhaWwgPSAxOworCisJCXdiX3VzZXJfY29yZV9yZWFkKDMyJ2gzMDAyMDA2NCxyZWFkX2RhdGEpOworICAgICAgICAgICAgICAgIGlmKHJlYWRfZGF0YSE9IDMyJ2g0NDU1NjY3NykgdGVzdF9mYWlsID0gMTsKKworCQl3Yl91c2VyX2NvcmVfcmVhZCgzMidoMzAwMjAwNjgscmVhZF9kYXRhKTsKKyAgICAgICAgICAgICAgICBpZihyZWFkX2RhdGEhPSAzMidoNTU2Njc3ODgpIHRlc3RfZmFpbCA9IDE7CisKKwkJd2JfdXNlcl9jb3JlX3JlYWQoMzInaDMwMDIwMDZDLHJlYWRfZGF0YSkgOworCSAgICAgICAgaWYocmVhZF9kYXRhICE9IDMyJ2g2Njc3ODg5OSkgdGVzdF9mYWlsID0gMTsKKworCSAgIAorCSAgICAJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworICAgICAgICAgIAlpZih0ZXN0X2ZhaWwgPT0gMCkgYmVnaW4KKwkJICAgYGlmZGVmIEdMCisJICAgIAkgICAgICAgJGRpc3BsYXkoIk1vbml0b3I6IFN0YW5kYWxvbmUgVXNlciBSaXNjIEJvb3QgKEdMKSBQYXNzZWQiKTsKKwkJICAgYGVsc2UKKwkJICAgICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGFuZGFsb25lIFVzZXIgUmlzYyBCb290IChSVEwpIFBhc3NlZCIpOworCQkgICBgZW5kaWYKKwkgICAgICAgIGVuZCBlbHNlIGJlZ2luCisJCSAgICBgaWZkZWYgR0wKKwkgICAgCSAgICAgICAgJGRpc3BsYXkoIk1vbml0b3I6IFN0YW5kYWxvbmUgVXNlciBSaXNjIEJvb3QgKEdMKSBGYWlsZWQiKTsKKwkJICAgIGBlbHNlCisJCSAgICAgICAgJGRpc3BsYXkoIk1vbml0b3I6IFN0YW5kYWxvbmUgVXNlciBSaXNjIEJvb3QgKFJUTCkgRmFpbGVkIik7CisJCSAgICBgZW5kaWYKKwkJIGVuZAorCSAgICAJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCSAgICAkZmluaXNoOworCWVuZAorCisJaW5pdGlhbCBiZWdpbgorCQl3Yl9yc3RfaSA8PSAxJ2IxOworCQkjMTAwOworCQl3Yl9yc3RfaSA8PSAxJ2IwOwkgICAgCS8vIFJlbGVhc2UgcmVzZXQKKwllbmQKK3dpcmUgVVNFUl9WREQxVjggPSAxJ2IxOword2lyZSBWU1MgPSAxJ2IwOworCit1c2VyX3Byb2plY3Rfd3JhcHBlciB1X3RvcCgKK2BpZmRlZiBVU0VfUE9XRVJfUElOUworICAgIC52Y2NkMShVU0VSX1ZERDFWOCksCS8vIFVzZXIgYXJlYSAxIDEuOFYgc3VwcGx5CisgICAgLnZzc2QxKFZTUyksCS8vIFVzZXIgYXJlYSAxIGRpZ2l0YWwgZ3JvdW5kCitgZW5kaWYKKyAgICAud2JfY2xrX2kgICAgICAgIChjbG9jayksICAvLyBTeXN0ZW0gY2xvY2sKKyAgICAudXNlcl9jbG9jazIgICAgICgxJ2IxKSwgIC8vIFJlYWwtdGltZSBjbG9jaworICAgIC53Yl9yc3RfaSAgICAgICAgKHdiX3JzdF9pKSwgIC8vIFJlZ3VsYXIgUmVzZXQgc2lnbmFsCisKKyAgICAud2JzX2N5Y19pICAgKHdiZF9leHRfY3ljX2kpLCAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAud2JzX3N0Yl9pICAgKHdiZF9leHRfc3RiX2kpLCAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAud2JzX2Fkcl9pICAgKHdiZF9leHRfYWRyX2kpLCAgLy8gYWRkcmVzcworICAgIC53YnNfd2VfaSAgICAod2JkX2V4dF93ZV9pKSwgIC8vIHdyaXRlCisgICAgLndic19kYXRfaSAgICh3YmRfZXh0X2RhdF9pKSwgIC8vIGRhdGEgb3V0cHV0CisgICAgLndic19zZWxfaSAgICh3YmRfZXh0X3NlbF9pKSwgIC8vIGJ5dGUgZW5hYmxlCisKKyAgICAud2JzX2RhdF9vICAgKHdiZF9leHRfZGF0X28pLCAgLy8gZGF0YSBpbnB1dAorICAgIC53YnNfYWNrX28gICAod2JkX2V4dF9hY2tfbyksICAvLyBhY2tub3dsZWdlbWVudAorCisgCisgICAgLy8gTG9naWMgQW5hbHl6ZXIgU2lnbmFscworICAgIC5sYV9kYXRhX2luICAgICAgKCcxKSAsCisgICAgLmxhX2RhdGFfb3V0ICAgICAoKSwKKyAgICAubGFfb2VuYiAgICAgICAgICgnMCksCisgCisKKyAgICAvLyBJT3MKKyAgICAuaW9faW4gICAgICAgICAgKGlvX2luKSAgLAorICAgIC5pb19vdXQgICAgICAgICAoaW9fb3V0KSAsCisgICAgLmlvX29lYiAgICAgICAgIChpb19vZWIpICwKKworICAgIC51c2VyX2lycSAgICAgICAoKSAKKworKTsKKworYGlmbmRlZiBHTCAvLyBEcml2ZSBQb3dlciBmb3IgSG9sZCBGaXggQnVmCisgICAgLy8gQWxsIHN0YW5kYXJkIGNlbGwgbmVlZCBwb3dlciBob29rLXVwIGZvciBmdW5jdGlvbmFsaXR5IHdvcmsKKyAgICBpbml0aWFsIGJlZ2luCisKKyAgICBlbmQKK2BlbmRpZiAgICAKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICBJbnRlZ3JhdGUgdGhlIFNlcmlhbCBmbGFzaCB3aXRoIHF1cmQgc3VwcG9ydCB0bworLy8gIHVzZXIgY29yZSB1c2luZyB0aGUgZ3BpbyBwYWRzCisvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICB3aXJlIGZsYXNoX2NsayA9IGlvX291dFsyNF07CisgICB3aXJlIGZsYXNoX2NzYiA9IGlvX291dFsyOF07CisgICAvLyBDcmVhdGluZyBQYWQgRGVsYXkKKyAgIHdpcmUgIzEgaW9fb2ViXzI5ID0gaW9fb2ViWzI5XTsKKyAgIHdpcmUgIzEgaW9fb2ViXzMwID0gaW9fb2ViWzMwXTsKKyAgIHdpcmUgIzEgaW9fb2ViXzMxID0gaW9fb2ViWzMxXTsKKyAgIHdpcmUgIzEgaW9fb2ViXzMyID0gaW9fb2ViWzMyXTsKKyAgIHRyaSAgIzEgZmxhc2hfaW8wID0gKGlvX29lYl8yOT09IDEnYjApID8gaW9fb3V0WzI5XSA6IDEnYno7CisgICB0cmkgICMxIGZsYXNoX2lvMSA9IChpb19vZWJfMzA9PSAxJ2IwKSA/IGlvX291dFszMF0gOiAxJ2J6OworICAgdHJpICAjMSBmbGFzaF9pbzIgPSAoaW9fb2ViXzMxPT0gMSdiMCkgPyBpb19vdXRbMzFdIDogMSdiejsKKyAgIHRyaSAgIzEgZmxhc2hfaW8zID0gKGlvX29lYl8zMj09IDEnYjApID8gaW9fb3V0WzMyXSA6IDEnYno7CisKKyAgIGFzc2lnbiBpb19pblsyOV0gPSBmbGFzaF9pbzA7CisgICBhc3NpZ24gaW9faW5bMzBdID0gZmxhc2hfaW8xOworICAgYXNzaWduIGlvX2luWzMxXSA9IGZsYXNoX2lvMjsKKyAgIGFzc2lnbiBpb19pblszMl0gPSBmbGFzaF9pbzM7CisKKyAgIC8vIFF1YXJkIGZsYXNoCisgICAgIHMyNWZsMjU2cyAjKC5tZW1fZmlsZV9uYW1lKCJ1c2VyX3Jpc2NfYm9vdC5oZXgiKSwKKwkgICAgICAgICAub3RwX2ZpbGVfbmFtZSgibm9uZSIpLAorICAgICAgICAgICAgICAgICAuVGltaW5nTW9kZWwoIlMyNUZMNTEyU0FHTUZJMDEwX0ZfMzBwRiIpKSAKKwkJIHVfc3BpX2ZsYXNoXzI1Nm1iICgKKyAgICAgICAgICAgLy8gRGF0YSBJbnB1dHMvT3V0cHV0cworICAgICAgIC5TSSAgICAgIChmbGFzaF9pbzApLAorICAgICAgIC5TTyAgICAgIChmbGFzaF9pbzEpLAorICAgICAgIC8vIENvbnRyb2xzCisgICAgICAgLlNDSyAgICAgKGZsYXNoX2NsayksCisgICAgICAgLkNTTmVnICAgKGZsYXNoX2NzYiksCisgICAgICAgLldQTmVnICAgKGZsYXNoX2lvMiksCisgICAgICAgLkhPTEROZWcgKGZsYXNoX2lvMyksCisgICAgICAgLlJTVE5lZyAgKCF3Yl9yc3RfaSkKKworICAgICAgICk7CisKKworCisKK3Rhc2sgd2JfdXNlcl9jb3JlX3dyaXRlOworaW5wdXQgWzMxOjBdIGFkZHJlc3M7CitpbnB1dCBbMzE6MF0gZGF0YTsKK2JlZ2luCisgIHJlcGVhdCAoMSkgQChwb3NlZGdlIGNsb2NrKTsKKyAgIzE7CisgIHdiZF9leHRfYWRyX2kgPWFkZHJlc3M7ICAvLyBhZGRyZXNzCisgIHdiZF9leHRfd2VfaSAgPSdoMTsgIC8vIHdyaXRlCisgIHdiZF9leHRfZGF0X2kgPWRhdGE7ICAvLyBkYXRhIG91dHB1dAorICB3YmRfZXh0X3NlbF9pID0naEY7ICAvLyBieXRlIGVuYWJsZQorICB3YmRfZXh0X2N5Y19pID0naDE7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X3N0Yl9pID0naDE7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YWl0KHdiZF9leHRfYWNrX28gPT0gMSk7CisgIHJlcGVhdCAoMSkgQChwb3NlZGdlIGNsb2NrKTsKKyAgIzE7CisgIHdiZF9leHRfY3ljX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfc3RiX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfYWRyX2kgPSdoMDsgIC8vIGFkZHJlc3MKKyAgd2JkX2V4dF93ZV9pICA9J2gwOyAgLy8gd3JpdGUKKyAgd2JkX2V4dF9kYXRfaSA9J2gwOyAgLy8gZGF0YSBvdXRwdXQKKyAgd2JkX2V4dF9zZWxfaSA9J2gwOyAgLy8gYnl0ZSBlbmFibGUKKyAgJGRpc3BsYXkoIkRFQlVHIFdCIFVTRVIgQUNDRVNTIFdSSVRFIEFkZHJlc3MgOiAleCwgRGF0YSA6ICV4IixhZGRyZXNzLGRhdGEpOworICByZXBlYXQgKDIpIEAocG9zZWRnZSBjbG9jayk7CitlbmQKK2VuZHRhc2sKKwordGFzayAgd2JfdXNlcl9jb3JlX3JlYWQ7CitpbnB1dCBbMzE6MF0gYWRkcmVzczsKK291dHB1dCBbMzE6MF0gZGF0YTsKK3JlZyAgICBbMzE6MF0gZGF0YTsKK2JlZ2luCisgIHJlcGVhdCAoMSkgQChwb3NlZGdlIGNsb2NrKTsKKyAgIzE7CisgIHdiZF9leHRfYWRyX2kgPWFkZHJlc3M7ICAvLyBhZGRyZXNzCisgIHdiZF9leHRfd2VfaSAgPSdoMDsgIC8vIHdyaXRlCisgIHdiZF9leHRfZGF0X2kgPScwOyAgLy8gZGF0YSBvdXRwdXQKKyAgd2JkX2V4dF9zZWxfaSA9J2hGOyAgLy8gYnl0ZSBlbmFibGUKKyAgd2JkX2V4dF9jeWNfaSA9J2gxOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2JkX2V4dF9zdGJfaSA9J2gxOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2FpdCh3YmRfZXh0X2Fja19vID09IDEpOworICBkYXRhICA9IHdiZF9leHRfZGF0X287ICAKKyAgcmVwZWF0ICgxKSBAKHBvc2VkZ2UgY2xvY2spOworICAjMTsKKyAgd2JkX2V4dF9jeWNfaSA9J2gwOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2JkX2V4dF9zdGJfaSA9J2gwOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2JkX2V4dF9hZHJfaSA9J2gwOyAgLy8gYWRkcmVzcworICB3YmRfZXh0X3dlX2kgID0naDA7ICAvLyB3cml0ZQorICB3YmRfZXh0X2RhdF9pID0naDA7ICAvLyBkYXRhIG91dHB1dAorICB3YmRfZXh0X3NlbF9pID0naDA7ICAvLyBieXRlIGVuYWJsZQorICAkZGlzcGxheSgiREVCVUcgV0IgVVNFUiBBQ0NFU1MgUkVBRCBBZGRyZXNzIDogJXgsIERhdGEgOiAleCIsYWRkcmVzcyxkYXRhKTsKKyAgcmVwZWF0ICgyKSBAKHBvc2VkZ2UgY2xvY2spOworZW5kCitlbmR0YXNrCisKK2BpZmRlZiBHTAorCit3aXJlICAgICAgICB3YmRfc3BpX3N0Yl9pICAgPSB1X3RvcC51X3NwaV9tYXN0ZXIud2JkX3N0Yl9pOword2lyZSAgICAgICAgd2JkX3NwaV9hY2tfbyAgID0gdV90b3AudV9zcGlfbWFzdGVyLndiZF9hY2tfbzsKK3dpcmUgICAgICAgIHdiZF9zcGlfd2VfaSAgICA9IHVfdG9wLnVfc3BpX21hc3Rlci53YmRfd2VfaTsKK3dpcmUgWzMxOjBdIHdiZF9zcGlfYWRyX2kgICA9IHVfdG9wLnVfc3BpX21hc3Rlci53YmRfYWRyX2k7Cit3aXJlIFszMTowXSB3YmRfc3BpX2RhdF9pICAgPSB1X3RvcC51X3NwaV9tYXN0ZXIud2JkX2RhdF9pOword2lyZSBbMzE6MF0gd2JkX3NwaV9kYXRfbyAgID0gdV90b3AudV9zcGlfbWFzdGVyLndiZF9kYXRfbzsKK3dpcmUgWzM6MF0gIHdiZF9zcGlfc2VsX2kgICA9IHVfdG9wLnVfc3BpX21hc3Rlci53YmRfc2VsX2k7CisKK3dpcmUgICAgICAgIHdiZF9zZHJhbV9zdGJfaSA9IHVfdG9wLnVfc2RyYW1fY3RybC53Yl9zdGJfaTsKK3dpcmUgICAgICAgIHdiZF9zZHJhbV9hY2tfbyA9IHVfdG9wLnVfc2RyYW1fY3RybC53Yl9hY2tfbzsKK3dpcmUgICAgICAgIHdiZF9zZHJhbV93ZV9pICA9IHVfdG9wLnVfc2RyYW1fY3RybC53Yl93ZV9pOword2lyZSBbMzE6MF0gd2JkX3NkcmFtX2Fkcl9pID0gdV90b3AudV9zZHJhbV9jdHJsLndiX2FkZHJfaTsKK3dpcmUgWzMxOjBdIHdiZF9zZHJhbV9kYXRfaSA9IHVfdG9wLnVfc2RyYW1fY3RybC53Yl9kYXRfaTsKK3dpcmUgWzMxOjBdIHdiZF9zZHJhbV9kYXRfbyA9IHVfdG9wLnVfc2RyYW1fY3RybC53Yl9kYXRfbzsKK3dpcmUgWzM6MF0gIHdiZF9zZHJhbV9zZWxfaSA9IHVfdG9wLnVfc2RyYW1fY3RybC53Yl9zZWxfaTsKKword2lyZSAgICAgICAgd2JkX3VhcnRfc3RiX2kgID0gdV90b3AudV91YXJ0X2kyY191c2IucmVnX2NzOword2lyZSAgICAgICAgd2JkX3VhcnRfYWNrX28gID0gdV90b3AudV91YXJ0X2kyY191c2IucmVnX2FjazsKK3dpcmUgICAgICAgIHdiZF91YXJ0X3dlX2kgICA9IHVfdG9wLnVfdWFydF9pMmNfdXNiLnJlZ193cjsKK3dpcmUgWzc6MF0gIHdiZF91YXJ0X2Fkcl9pICA9IHVfdG9wLnVfdWFydF9pMmNfdXNiLnJlZ19hZGRyOword2lyZSBbNzowXSAgd2JkX3VhcnRfZGF0X2kgID0gdV90b3AudV91YXJ0X2kyY191c2IucmVnX3dkYXRhOword2lyZSBbNzowXSAgd2JkX3VhcnRfZGF0X28gID0gdV90b3AudV91YXJ0X2kyY191c2IucmVnX3JkYXRhOword2lyZSAgICAgICAgd2JkX3VhcnRfc2VsX2kgID0gdV90b3AudV91YXJ0X2kyY191c2IucmVnX2JlOworCitgZW5kaWYKKworLyoqCitgaWZkZWYgR0wKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJJU0MgSU1FTSBhbWQgRE1FTSBNb25pdG9yaW5nIFRBU0sKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYGRlZmluZSBSSVNDX0NPUkUgIHVzZXJfdWFydF90Yi51X3RvcC51X2NvcmUudV9yaXNjdl90b3AKKworYWx3YXlzQChwb3NlZGdlIGBSSVNDX0NPUkUud2JfY2xrKSBiZWdpbgorICAgIGlmKGBSSVNDX0NPUkUud2JkX2ltZW1fYWNrX2kpCisgICAgICAgICAgJGRpc3BsYXkoIlJJU0NWLURFQlVHID0+IElNRU0gQUREUkVTUzogJXggUmVhZCBEYXRhIDogJXgiLCBgUklTQ19DT1JFLndiZF9pbWVtX2Fkcl9vLGBSSVNDX0NPUkUud2JkX2ltZW1fZGF0X2kpOworICAgIGlmKGBSSVNDX0NPUkUud2JkX2RtZW1fYWNrX2kgJiYgYFJJU0NfQ09SRS53YmRfZG1lbV93ZV9vKQorICAgICAgICAgICRkaXNwbGF5KCJSSVNDVi1ERUJVRyA9PiBETUVNIEFERFJFU1M6ICV4IFdyaXRlIERhdGE6ICV4IFJlc29uc2U6ICV4IiwgYFJJU0NfQ09SRS53YmRfZG1lbV9hZHJfbyxgUklTQ19DT1JFLndiZF9kbWVtX2RhdF9vKTsKKyAgICBpZihgUklTQ19DT1JFLndiZF9kbWVtX2Fja19pICYmICFgUklTQ19DT1JFLndiZF9kbWVtX3dlX28pCisgICAgICAgICAgJGRpc3BsYXkoIlJJU0NWLURFQlVHID0+IERNRU0gQUREUkVTUzogJXggUkVBRCBEYXRhIDogJXggUmVzb25zZTogJXgiLCBgUklTQ19DT1JFLndiZF9kbWVtX2Fkcl9vLGBSSVNDX0NPUkUud2JkX2RtZW1fZGF0X2kpOworZW5kCisKK2BlbmRpZgorKiovCitlbmRtb2R1bGUKK2BkZWZhdWx0X25ldHR5cGUgd2lyZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi91c2VyX3Jpc2NfYm9vdC91c2VyX3VhcnQuYyBiL3Zlcmlsb2cvZHYvdXNlcl9yaXNjX2Jvb3QvdXNlcl91YXJ0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ1MTJiYwotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvdXNlcl9yaXNjX2Jvb3QvdXNlcl91YXJ0LmMKQEAgLTAsMCArMSw2MCBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxLCBEaW5lc2ggQW5uYXl5YQorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisjZGVmaW5lIFNDX1NJTV9PVVRQT1JUICgweGYwMDAwMDAwKQorI2RlZmluZSB1aW50MzJfdCAgbG9uZworCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzAgICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDAwMDAwKQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcxICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAwMDAwNCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMiAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMDAwMDgpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzMgICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDAwMDBDKQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWc0ICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAwMDAxMCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnNSAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMDAwMTQpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzYgICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDAwMDE4KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWc3ICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAwMDAxQykKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnOCAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMDAwMjApCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzkgICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDAwMDI0KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcxMCAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAwMDAyOCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMTEgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMDAwMkMpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzEyICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDAwMDMwKQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcxMyAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAwMDAzNCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMTQgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMDAwMzgpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzE1ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDAwMDNDKQorCisjZGVmaW5lIHJlZ19tcHJqX3VhcnRfcmVnMCAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAxMDAwMCkKKyNkZWZpbmUgcmVnX21wcmpfdWFydF9yZWcxICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDEwMDA0KQorI2RlZmluZSByZWdfbXByal91YXJ0X3JlZzIgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMTAwMDgpCisjZGVmaW5lIHJlZ19tcHJqX3VhcnRfcmVnMyAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAxMDAwQykKKyNkZWZpbmUgcmVnX21wcmpfdWFydF9yZWc0ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDEwMDEwKQorI2RlZmluZSByZWdfbXByal91YXJ0X3JlZzUgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMTAwMTQpCisjZGVmaW5lIHJlZ19tcHJqX3VhcnRfcmVnNiAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAxMDAxOCkKKyNkZWZpbmUgcmVnX21wcmpfdWFydF9yZWc3ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDEwMDFDKQorI2RlZmluZSByZWdfbXByal91YXJ0X3JlZzggKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMTAwMjApCisKK2ludCBtYWluKCkKK3sKKworICAgIHdoaWxlKDEpIHsKKyAgICAgICAvLyBDaGVjayBVQVJUIFJYIGZpZm8gaGFzIGRhdGEsIGlmIGF2YWlsYWJsZSBsb29wIGJhY2sgdGhlIGRhdGEKKyAgICAgICBpZihyZWdfbXByal91YXJ0X3JlZzggIT0gMCkgeyAKKwkgICByZWdfbXByal91YXJ0X3JlZzUgPSByZWdfbXByal91YXJ0X3JlZzY7CisgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi91c2VyX3Jpc2Nfc29mdF9ib290L01ha2VmaWxlIGIvdmVyaWxvZy9kdi91c2VyX3Jpc2Nfc29mdF9ib290L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyZjY1YmUKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3VzZXJfcmlzY19zb2Z0X2Jvb3QvTWFrZWZpbGUKQEAgLTAsMCArMSwxMTEgQEAKKyMgU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMCBFZmFibGVzcyBDb3Jwb3JhdGlvbgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKworIyMgQ2FyYXZlbCBQb2ludGVycworQ0FSQVZFTF9ST09UID89IC4uLy4uLy4uL2NhcmF2ZWwKK0NBUkFWRUxfUEFUSCA/PSAkKENBUkFWRUxfUk9PVCkKK0NBUkFWRUxfRklSTVdBUkVfUEFUSCA9ICQoQ0FSQVZFTF9QQVRIKS92ZXJpbG9nL2R2L2NhcmF2ZWwKK0NBUkFWRUxfVkVSSUxPR19QQVRIICA9ICQoQ0FSQVZFTF9QQVRIKS92ZXJpbG9nCitDQVJBVkVMX1JUTF9QQVRIID0gJChDQVJBVkVMX1ZFUklMT0dfUEFUSCkvcnRsCitDQVJBVkVMX0JFSEFWSU9VUkFMX01PREVMUyA9ICQoQ0FSQVZFTF9WRVJJTE9HX1BBVEgpL2R2L2NhcmF2ZWwKKworCisjIyBVc2VyIFByb2plY3QgUG9pbnRlcnMKK1VQUkpfVkVSSUxPR19QQVRIID89IC4uLy4uLy4uL3Zlcmlsb2cKK1VQUkpfUlRMX1BBVEggPSAkKFVQUkpfVkVSSUxPR19QQVRIKS9ydGwKK1VQUkpfR0xfUEFUSCA9ICQoVVBSSl9WRVJJTE9HX1BBVEgpL2dsCitVUFJKX0JFSEFWSU9VUkFMX01PREVMUyA9IC4uL21vZGVsCitVUFJKX0JFSEFWSU9VUkFMX0FHRU5UUyA9IC4uL2FnZW50cworVVBSSl9JTkNMVURFX1BBVEgxID0gJChVUFJKX1JUTF9QQVRIKS95aWZpdmUveWNyMWMvc3JjL2luY2x1ZGVzCitVUFJKX0lOQ0xVREVfUEFUSDIgPSAkKFVQUkpfUlRMX1BBVEgpL3NkcmFtX2N0cmwvc3JjL2RlZnMKK1VQUkpfSU5DTFVERV9QQVRIMyA9ICQoVVBSSl9SVExfUEFUSCkvaTJjbS9zcmMvaW5jbHVkZXMKK1VQUkpfSU5DTFVERV9QQVRINCA9ICQoVVBSSl9SVExfUEFUSCkvdXNiMV9ob3N0L3NyYy9pbmNsdWRlcworVVBSSl9JTkNMVURFX1BBVEg1ID0gJChVUFJKX1JUTF9QQVRIKS9tYmlzdC9pbmNsdWRlCisKKyMjIFlJRklWRSBGSVJNV0FSRQorWUlGSVZFX0ZJUk1XQVJFX1BBVEggPSAkKFVQUkpfVkVSSUxPR19QQVRIKS9kdi9maXJtd2FyZQorR0NDNjRfUFJFRklYPz1yaXNjdjY0LXVua25vd24tZWxmCisKKyMjIFJJU0NWIEdDQyAKK0dDQ19QQVRIPz0vZWYvYXBwcy9iaW4KK0dDQzMyX1BSRUZJWD89cmlzY3YzMi11bmtub3duLWVsZgorUERLX1BBVEg/PS9lZi90ZWNoL1NXL3NreTEzMEEKKworIyMgU2ltdWxhdGlvbiBtb2RlOiBSVEwvR0wKK1NJTT89UlRMCitEVU1QPz1PRkYKKworLlNVRkZJWEVTOgorCitQQVRURVJOID0gdXNlcl9yaXNjX3NvZnRfYm9vdAorCithbGw6ICAke1BBVFRFUk46PS52Y2R9CisKK2hleDogICR7UEFUVEVSTjo9LmhleH0KKwordnZwOiAgJHtQQVRURVJOOj0udnZwfQorCislLnZ2cDogJV90Yi52CisJJHtHQ0M2NF9QUkVGSVh9LWdjYyAtTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICAtRF9fUlZDX0VYVCAtc3RhdGljIC1zdGQ9Z251OTkgLWZuby1jb21tb24gLWZuby1idWlsdGluLXByaW50ZiAtRFRDTT0wIC1XYSwtbWFyY2g9cnYzMmltYyAtbWFyY2g9cnYzMmltYyAtbWFiaT1pbHAzMiAtREZMQUdTX1NUUj1cIiItTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICJcIiAgLWMgLUkuLyAtSSQoWUlGSVZFX0ZJUk1XQVJFX1BBVEgpICB1c2VyX3Jpc2NfYm9vdC5jIC1vIHVzZXJfcmlzY19ib290Lm8KKwkke0dDQzY0X1BSRUZJWH0tZ2NjIC1PMiAtZnVucm9sbC1sb29wcyAtZnBlZWwtbG9vcHMgLWZnY3NlLXNtIC1mZ2NzZS1sYXMgIC1EX19SVkNfRVhUIC1zdGF0aWMgLXN0ZD1nbnU5OSAtZm5vLWNvbW1vbiAtZm5vLWJ1aWx0aW4tcHJpbnRmIC1EVENNPTAgLVdhLC1tYXJjaD1ydjMyaW1jIC1tYXJjaD1ydjMyaW1jIC1tYWJpPWlscDMyIC1ERkxBR1NfU1RSPVwiIi1PMiAtZnVucm9sbC1sb29wcyAtZnBlZWwtbG9vcHMgLWZnY3NlLXNtIC1mZ2NzZS1sYXMgIlwiICAtRF9fQVNTRU1CTFlfXz0xIC1jIC1JLi8gLUkkKFlJRklWRV9GSVJNV0FSRV9QQVRIKSAgJChZSUZJVkVfRklSTVdBUkVfUEFUSCkvY3J0LlMgLW8gY3J0Lm8KKwkke0dDQzY0X1BSRUZJWH0tZ2NjIC1vIHVzZXJfcmlzY19ib290LmVsZiAtVCAkKFlJRklWRV9GSVJNV0FSRV9QQVRIKS9saW5rLmxkIHVzZXJfcmlzY19ib290Lm8gY3J0Lm8gLW5vc3RhcnRmaWxlcyAtbm9zdGRsaWIgLWxjIC1sZ2NjIC1tYXJjaD1ydjMyaW1jIC1tYWJpPWlscDMyIC1OCisJJHtHQ0M2NF9QUkVGSVh9LW9iamNvcHkgLU8gdmVyaWxvZyB1c2VyX3Jpc2NfYm9vdC5lbGYgdXNlcl9yaXNjX2Jvb3QuaGV4CisJJHtHQ0M2NF9QUkVGSVh9LW9iamR1bXAgLUQgdXNlcl9yaXNjX2Jvb3QuZWxmID4gdXNlcl9yaXNjX2Jvb3QuZHVtcAorCXJtIGNydC5vIHVzZXJfcmlzY19ib290Lm8KK2lmZXEgKCQoU0lNKSxSVEwpCisgICBpZmVxICgkKERVTVApLE9GRikKKwlpdmVyaWxvZyAtZzIwMDUtc3YgLURGVU5DVElPTkFMIC1EU0lNIC1JICQoUERLX1BBVEgpIFwKKwktSSAkKENBUkFWRUxfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSAkKENBUkFWRUxfUlRMX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfTU9ERUxTKSAgICAtSSAkKFVQUkpfUlRMX1BBVEgpIC1JICQoVVBSSl9WRVJJTE9HX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfQUdFTlRTKSAgICBcCisJLUkgJChVUFJKX0lOQ0xVREVfUEFUSDEpICAgIC1JICQoVVBSSl9JTkNMVURFX1BBVEgyKSAtSSAkKFVQUkpfSU5DTFVERV9QQVRIMykgXAorCS1JICQoVVBSSl9JTkNMVURFX1BBVEg0KSAtSSAkKFVQUkpfSU5DTFVERV9QQVRINSkgXAorCSQ8IC1vICRAIAorICAgIGVsc2UgIAorCWl2ZXJpbG9nIC1nMjAwNS1zdiAtRFdGRFVNUCAtREZVTkNUSU9OQUwgLURTSU0gLUkgJChQREtfUEFUSCkgXAorCS1JICQoQ0FSQVZFTF9CRUhBVklPVVJBTF9NT0RFTFMpIC1JICQoQ0FSQVZFTF9SVExfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9NT0RFTFMpICAgIC1JICQoVVBSSl9SVExfUEFUSCkgLUkgJChVUFJKX1ZFUklMT0dfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9BR0VOVFMpICAgIFwKKwktSSAkKFVQUkpfSU5DTFVERV9QQVRIMSkgICAgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDIpIC1JICQoVVBSSl9JTkNMVURFX1BBVEgzKSBcCisJLUkgJChVUFJKX0lOQ0xVREVfUEFUSDQpIC1JICQoVVBSSl9JTkNMVURFX1BBVEg1KSBcCisJJDwgLW8gJEAgCisgICBlbmRpZgorZWxzZSAgCisJaXZlcmlsb2cgLWcyMDA1LXN2IC1ERlVOQ1RJT05BTCAtRFNJTSAtREdMIC1JICQoUERLX1BBVEgpIFwKKwktSSAkKENBUkFWRUxfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSAkKENBUkFWRUxfUlRMX1BBVEgpIC1JICQoQ0FSQVZFTF9WRVJJTE9HX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSAkKFVQUkpfR0xfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9BR0VOVFMpICAgIFwKKwkkPCAtbyAkQCAKK2VuZGlmCisKKyUudmNkOiAlLnZ2cAorCXZ2cCAkPAorCislLmVsZjogJS5jICQoQ0FSQVZFTF9GSVJNV0FSRV9QQVRIKS9zZWN0aW9ucy5sZHMgJChDQVJBVkVMX0ZJUk1XQVJFX1BBVEgpL3N0YXJ0LnMKKwkke0dDQzY0X1BSRUZJWH0tZ2NjIC1JICQoQ0FSQVZFTF9QQVRIKSAtbWFyY2g9cnYzMmltYyAtbWFiaT1pbHAzMiAtV2wsLUJzdGF0aWMsLVQsJChDQVJBVkVMX0ZJUk1XQVJFX1BBVEgpL3NlY3Rpb25zLmxkcywtLXN0cmlwLWRlYnVnIC1mZnJlZXN0YW5kaW5nIC1ub3N0ZGxpYiAtbyAkQCAkKENBUkFWRUxfRklSTVdBUkVfUEFUSCkvc3RhcnQucyAkPAorCislLmhleDogCisJZWNobyBAIlRoaXMgaXMgdXNlciBib290IHRlc3QsIG5vdGluZyB0byBjb21waWxlIHRoZSBtYW5nbWVudCBjb3JlIGNvZGUiCisKKyUuYmluOiAlLmVsZgorCSR7R0NDNjRfUFJFRklYfS1vYmpjb3B5IC1PIGJpbmFyeSAkPCAvZGV2L3N0ZG91dCB8IHRhaWwgLWMgKzEwNDg1NzcgPiAkQAorCisjIC0tLS0gQ2xlYW4gLS0tLQorCitjbGVhbjoKKwlybSAtZiAqLmVsZiAqLmhleCAqLmJpbiAqLnZ2cCAqLnZjZCAqLmxvZyAqLmR1bXAKKworLlBIT05ZOiBjbGVhbiBoZXggYWxsCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3VzZXJfcmlzY19zb2Z0X2Jvb3QvcnVuX2l2ZXJpbG9nIGIvdmVyaWxvZy9kdi91c2VyX3Jpc2Nfc29mdF9ib290L3J1bl9pdmVyaWxvZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41NjQxNGY4Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi91c2VyX3Jpc2Nfc29mdF9ib290L3J1bl9pdmVyaWxvZwpAQCAtMCwwICsxLDQ5IEBACisjIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworIyAvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxLCBEaW5lc2ggQW5uYXl5YQorIyAvLyAKKyMgLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIC8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjIC8vCisjIC8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjIC8vCisjIC8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIC8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisjIC8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorIyAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCityaXNjdjY0LXVua25vd24tZWxmLWdjYyAtTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICAtRF9fUlZDX0VYVCAtc3RhdGljIC1zdGQ9Z251OTkgLWZuby1jb21tb24gLWZuby1idWlsdGluLXByaW50ZiAtRFRDTT0xIC1XYSwtbWFyY2g9cnYzMmltYyAtbWFyY2g9cnYzMmltYyAtbWFiaT1pbHAzMiAtREZMQUdTX1NUUj1cIiItTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICJcIiAgLWMgLUkuLyAtSS4uLy4uL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvY29tbW9uICB1c2VyX3Jpc2NfYm9vdC5jIC1vIHVzZXJfcmlzY19ib290Lm8KKworcmlzY3Y2NC11bmtub3duLWVsZi1nY2MgLU8yIC1mdW5yb2xsLWxvb3BzIC1mcGVlbC1sb29wcyAtZmdjc2Utc20gLWZnY3NlLWxhcyAgLURfX1JWQ19FWFQgLXN0YXRpYyAtc3RkPWdudTk5IC1mbm8tY29tbW9uIC1mbm8tYnVpbHRpbi1wcmludGYgLURUQ009MSAtV2EsLW1hcmNoPXJ2MzJpbWMgLW1hcmNoPXJ2MzJpbWMgLW1hYmk9aWxwMzIgLURGTEFHU19TVFI9XCIiLU8yIC1mdW5yb2xsLWxvb3BzIC1mcGVlbC1sb29wcyAtZmdjc2Utc20gLWZnY3NlLWxhcyAiXCIgIC1EX19BU1NFTUJMWV9fPTEgLWMgLUkuLyAtSS4uLy4uL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvY29tbW9uLyAgLi4vLi4vcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9jb21tb24vY3J0X3RjbS5TIC1vIGNydF90Y20ubworCityaXNjdjY0LXVua25vd24tZWxmLWdjYyAtbyB1c2VyX3Jpc2NfYm9vdC5lbGYgLVQgLi4vLi4vcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9jb21tb24vbGlua190Y20ubGQgdXNlcl9yaXNjX2Jvb3QubyBjcnRfdGNtLm8gLW5vc3RhcnRmaWxlcyAtbm9zdGRsaWIgLWxjIC1sZ2NjIC1tYXJjaD1ydjMyaW1jIC1tYWJpPWlscDMyCisKK3Jpc2N2NjQtdW5rbm93bi1lbGYtb2JqY29weSAtTyB2ZXJpbG9nIHVzZXJfcmlzY19ib290LmVsZiB1c2VyX3Jpc2NfYm9vdC5oZXgKKworcmlzY3Y2NC11bmtub3duLWVsZi1vYmpkdW1wIC1EIHVzZXJfcmlzY19ib290LmVsZiA+IHVzZXJfcmlzY19ib290LmR1bXAKKworcm0gY3J0X3RjbS5vIHVzZXJfcmlzY19ib290Lm8KKworI2l2ZXJpbG9nIHdpdGggd2F2ZWZvcm0gZHVtcAorCitpdmVyaWxvZyAtZzIwMDUtc3YgLURXRkRVTVAgIC1ERlVOQ1RJT05BTCAtRFNJTSAtSSAkUERLX1BBVEggXAorLUkgL2hvbWUvZGluZXNoYS93b3JrYXJlYS9vcGVuY29yZS9naXQvcmlzY2R1aW5vL2NhcmF2ZWwvdmVyaWxvZy9kdi9jYXJhdmVsIC1JIC9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3Jpc2NkdWluby9jYXJhdmVsL3Zlcmlsb2cvcnRsIFwKKy1JIC4uL21vZGVsICAgIC1JIC4uLy4uLy4uL3Zlcmlsb2cvcnRsIC1JIC4uLy4uLy4uL3Zlcmlsb2cgXAorLUkgLi4vYWdlbnRzICAgIFwKKy1JIC4uLy4uLy4uL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy9pbmNsdWRlcyAgICAtSSAuLi8uLi8uLi92ZXJpbG9nL3J0bC9zZHJhbV9jdHJsL3NyYy9kZWZzIC1JIC4uLy4uLy4uL3Zlcmlsb2cvcnRsL2kyY20vc3JjL2luY2x1ZGVzIFwKKy1JIC4uLy4uLy4uL3Zlcmlsb2cvcnRsL3VzYjFfaG9zdC9zcmMvaW5jbHVkZXMgLUkgLi4vLi4vLi4vdmVyaWxvZy9ydGwvbWJpc3QvaW5jbHVkZSBcCit1c2VyX3Jpc2Nfc29mdF9ib290X3RiLnYgLW8gdXNlcl9yaXNjX3NvZnRfYm9vdC52dnAgCisKKworI2l2ZXJpbG9nIC1nMjAwNS1zdiAtSSAkUERLX1BBVEggLURGVU5DVElPTkFMIC1EU0lNIC1JICAuLi8uLi8uLi9jYXJhdmVsL3Zlcmlsb2cvcnRsIC1JIC4uLyAtSSAuLi8uLi8uLi92ZXJpbG9nL3J0bCAtSSAuLi8uLi8uLi92ZXJpbG9nIC1JIC4uLy4uLy4uL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy9pbmNsdWRlcyAgIC1JIC4uLy4uLy4uL3Zlcmlsb2cvcnRsL3NkcmFtX2N0cmwvc3JjL2RlZnMgLUkgJENBUkFWRUxfUk9PVC92ZXJpbG9nL2R2L2NhcmF2ZWwgLUkgLi4vbW9kZWwgLUkgLi4vYWdlbnRzIHVzZXJfcmlzY19ib290X3RiLnYgLW8gdXNlcl9yaXNjX2Jvb3RfdGIudnZwCisKKyMgR0xTCisjaXZlcmlsb2cgLWcyMDA1LXN2IC1ER0wgLUkgJFBES19QQVRIIC1JICAuLi8uLi8uLi9jYXJhdmVsL3Zlcmlsb2cvcnRsICAtSSAuLi8gLUkgLi4vLi4vLi4vdmVyaWxvZy9ydGwgLUkgLi4vLi4vLi4vdmVyaWxvZyAtSSAvaG9tZS9kaW5lc2hhL3dvcmthcmVhL3Bkay9za3kxMzBBIC1JIC4uLy4uLy4uL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy9pbmNsdWRlcyAgIC1JIC4uLy4uLy4uL3Zlcmlsb2cvcnRsL3NkcmFtX2N0cmwvc3JjL2RlZnMgLUkgJENBUkFWRUxfUk9PVC92ZXJpbG9nL2R2L2NhcmF2ZWwgLUkgLi4vbW9kZWwgLUkgLi4vYWdlbnRzIHVzZXJfdWFydF90Yi52IC1vIHVzZXJfcmlzY19ib290X3RiLnZ2cAorCit2dnAgdXNlcl9yaXNjX3NvZnRfYm9vdC52dnAgfCB0ZWUgdGVzdC5sb2cKKworXHJtIC1yZiB1c2VyX3Jpc2Nfc29mdF9ib290LnZ2cApkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi91c2VyX3Jpc2Nfc29mdF9ib290L3VzZXJfcmlzY19ib290LmMgYi92ZXJpbG9nL2R2L3VzZXJfcmlzY19zb2Z0X2Jvb3QvdXNlcl9yaXNjX2Jvb3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2U0MjRiCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi91c2VyX3Jpc2Nfc29mdF9ib290L3VzZXJfcmlzY19ib290LmMKQEAgLTAsMCArMSw3MyBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxLCBEaW5lc2ggQW5uYXl5YQorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworI2RlZmluZSBTQ19TSU1fT1VUUE9SVCAoMHhmMDAwMDAwMCkKKyNkZWZpbmUgdWludDMyX3QgIGxvbmcKKworI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcwICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAyMDAwMCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMSAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMjAwMDQpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzIgICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDIwMDA4KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWczICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAyMDAwQykKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnNCAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMjAwMTApCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzUgICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDIwMDE0KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWc2ICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAyMDAxOCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnNyAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMjAwMUMpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzggICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDIwMDIwKQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWc5ICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAyMDAyNCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMTAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMjAwMjgpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzExICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDIwMDJDKQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcxMiAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAyMDAzMCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMTMgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMjAwMzQpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzE0ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDIwMDM4KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcxNSAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAyMDAzQykKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMTYgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMjAwNDApCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzE3ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDIwMDQ0KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcxOCAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAyMDA0OCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMTkgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMjAwNEMpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzIwICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDIwMDUwKQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcyMSAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAyMDA1NCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMjIgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMjAwNTgpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzIzICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDIwMDVDKQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcyNCAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAyMDA2MCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMjUgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMjAwNjQpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzI2ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDIwMDY4KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcyNyAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAyMDA2QykKKworaW50IG1haW4oKQoreworCisgICAgLy92b2xhdGlsZSBsb25nICpvdXRfcHRyID0gKHZvbGF0aWxlIGxvbmcqKVNDX1NJTV9PVVRQT1JUOworICAgIC8vKm91dF9wdHIgPSAweEFBQkJDQ0REOworICAgIC8vKm91dF9wdHIgPSAweEJCQ0NEREVFOworICAgIC8vKm91dF9wdHIgPSAweENDRERFRUZGOworICAgIC8vKm91dF9wdHIgPSAweERERUVGRjAwOworCisgICAgLy8gV3JpdGUgc29mdHdhcmUgV3JpdGUgJiBSZWFkIFJlZ2lzdGVyCisgICAgcmVnX21wcmpfZ2xvYmxfcmVnMjIgID0gMHgxMTIyMzM0NDsgCisgICAgcmVnX21wcmpfZ2xvYmxfcmVnMjMgID0gMHgyMjMzNDQ1NTsgCisgICAgcmVnX21wcmpfZ2xvYmxfcmVnMjQgID0gMHgzMzQ0NTU2NjsgCisgICAgcmVnX21wcmpfZ2xvYmxfcmVnMjUgID0gMHg0NDU1NjY3NzsgCisgICAgcmVnX21wcmpfZ2xvYmxfcmVnMjYgPSAweDU1NjY3Nzg4OyAKKyAgICByZWdfbXByal9nbG9ibF9yZWcyNyA9IDB4NjY3Nzg4OTk7IAorICAgIC8vcmVnX21wcmpfZ2xvYmxfcmVnMTIgPSAweDc3ODg5OUFBOyAKKyAgICAvL3JlZ19tcHJqX2dsb2JsX3JlZzEzID0gMHg4ODk5QUFCQjsgCisgICAgLy9yZWdfbXByal9nbG9ibF9yZWcxNCA9IDB4OTlBQUJCQ0M7IAorICAgIC8vcmVnX21wcmpfZ2xvYmxfcmVnMTUgPSAweEFBQkJDQ0REOyAKKworICAgIHdoaWxlKDEpIHt9CisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3VzZXJfcmlzY19zb2Z0X2Jvb3QvdXNlcl9yaXNjX3NvZnRfYm9vdF90Yi52IGIvdmVyaWxvZy9kdi91c2VyX3Jpc2Nfc29mdF9ib290L3VzZXJfcmlzY19zb2Z0X2Jvb3RfdGIudgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMmEyOGI4Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi91c2VyX3Jpc2Nfc29mdF9ib290L3VzZXJfcmlzY19zb2Z0X2Jvb3RfdGIudgpAQCAtMCwwICsxLDQwNyBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogIDIwMjEgLCBEaW5lc2ggQW5uYXl5YQorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogTW9kaWZpZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFN0YW5kYWxvbmUgVXNlciB2YWxpZGF0aW9uIFRlc3QgYmVuY2ggICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBZSUZpdmUgY29yZXMgcHJvamVjdCAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHBzOi8vZ2l0aHViLmNvbS9kaW5lc2hhbm5heXlhL3lpZml2ZV9yMC5naXQgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9jb3Jlcy95aWZpdmUvICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICBUaGlzIGlzIGEgc3RhbmRhbG9uZSB0ZXN0IGJlbmNoIHRvIHZhbGlkYXRlIHRoZSAgICAgICAgICAgIC8vLy8KKy8vLy8gICBEaWdpdGFsIGNvcmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAxLiBVc2VyIFJpc2MgY29yZSBpcyBib290ZWQgdXNpbmcgIGNvbXBpbGVkIGNvZGUgb2YgICAgICAgIC8vLy8KKy8vLy8gICAgICB1c2VyX3Jpc2NfYm9vdC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAyLiBVc2VyIFJpc2MgY29yZSB1c2VzIFNlcmlhbCBGbGFzaCBhbmQgU0RSQU0gdG8gYm9vdCAgICAgIC8vLy8KKy8vLy8gICAzLiBBZnRlciBzdWNjZXNzZnVsIGJvb3QsIFJpc2MgY29yZSB3aWxsICB3cml0ZSBzaWduYXR1cmUgIC8vLy8KKy8vLy8gICAgICBpbiB0byAgdXNlciByZWdpc3RlciBmcm9tIDB4MTAwM18wMDU4IHRvIDB4MTAwM18wMDZDICAgIC8vLy8KKy8vLy8gICA0LiBUaHJvdWdoIHRoZSBFeHRlcm5hbCBXaXNoYm9uZSBJbnRlcmZhY2Ugd2UgcmVhZCBiYWNrICAgIC8vLy8KKy8vLy8gICAgICAgZnJvbSAweDMwMDNfMDA1OCB0byAweDMwMDNfMDA2QyAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgYW5kIHZhbGlkYXRlIHRoZSB1c2VyIHJlZ2lzdGVyIHRvIGRlY2xhcmVkIHBhc3MgZmFpbCAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcihzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAtIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFJldmlzaW9uIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC4xIC0gMTZ0aCBGZWIgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gQ29weXJpZ2h0IChDKSAyMDAwIEF1dGhvcnMgYW5kIE9QRU5DT1JFUy5PUkcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgIC8vLy8KKy8vLy8gcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgIC8vLy8KKy8vLy8gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgIC8vLy8KKy8vLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCAgIC8vLy8KKy8vLy8gYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IC8vLy8KKy8vLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSAgIC8vLy8KKy8vLy8gbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlICAgICAgIC8vLy8KKy8vLy8gdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCAgIC8vLy8KKy8vLy8gd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAgICAgIC8vLy8KKy8vLy8gUFVSUE9TRS4gIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIC8vLy8KKy8vLy8gZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvdXJjZTsgaWYgbm90LCBkb3dubG9hZCBpdCAgIC8vLy8KKy8vLy8gZnJvbSBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvbGdwbC5zaHRtbCAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworYGRlZmF1bHRfbmV0dHlwZSB3aXJlCisKK2B0aW1lc2NhbGUgMSBucyAvIDEgbnMKKworYGluY2x1ZGUgInVwcmpfbmV0bGlzdHMudiIKKworbW9kdWxlIHVzZXJfcmlzY19zb2Z0X2Jvb3RfdGI7CisJcmVnIGNsb2NrOworCXJlZyB3Yl9yc3RfaTsKKwlyZWcgcG93ZXIxLCBwb3dlcjI7CisJcmVnIHBvd2VyMywgcG93ZXI0OworCisgICAgICAgIHJlZyAgICAgICAgd2JkX2V4dF9jeWNfaTsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgICAgIHJlZyAgICAgICAgd2JkX2V4dF9zdGJfaTsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgICAgIHJlZyBbMzE6MF0gd2JkX2V4dF9hZHJfaTsgIC8vIGFkZHJlc3MKKyAgICAgICAgcmVnICAgICAgICB3YmRfZXh0X3dlX2k7ICAvLyB3cml0ZQorICAgICAgICByZWcgWzMxOjBdIHdiZF9leHRfZGF0X2k7ICAvLyBkYXRhIG91dHB1dAorICAgICAgICByZWcgWzM6MF0gIHdiZF9leHRfc2VsX2k7ICAvLyBieXRlIGVuYWJsZQorCisgICAgICAgIHdpcmUgWzMxOjBdIHdiZF9leHRfZGF0X287ICAvLyBkYXRhIGlucHV0CisgICAgICAgIHdpcmUgICAgICAgIHdiZF9leHRfYWNrX287ICAvLyBhY2tub3dsZWdlbWVudAorICAgICAgICB3aXJlICAgICAgICB3YmRfZXh0X2Vycl9vOyAgLy8gZXJyb3IKKworCS8vIFVzZXIgSS9PCisJd2lyZSBbMzc6MF0gaW9fb2ViOworCXdpcmUgWzM3OjBdIGlvX291dDsKKwl3aXJlIFszNzowXSBpb19pbjsKKworCXdpcmUgZ3BpbzsKKwl3aXJlIFszNzowXSBtcHJqX2lvOworCXdpcmUgWzc6MF0gbXByal9pb18wOworCXJlZyAgICAgICAgIHRlc3RfZmFpbDsKKwlyZWcgWzMxOjBdIHJlYWRfZGF0YTsKKwlsb2dpYyAgWzc6MF0gICAgICAgICAgIHRlbV9tZW1bMDo0MDk1XTsKKwlsb2dpYyAgWzMxOjBdICAgICAgICAgIHRlbV9tZW1fMzJiWzA6NTExXTsKKworCWBpZmRlZiBWRVJJTEFUT1IKKwkgbG9naWMgWzI1NTowXSAgICAgICAgICB0ZXN0X3JhbV9maWxlOworICAgICAgICAgYGVsc2UgLy8gVkVSSUxBVE9SCisJIAorCSAgICBzdHJpbmcgICAgICAgICAgICAgICAgIHRlc3RfcmFtX2ZpbGU7CisKKyAgICAgICAgIGBlbmRpZiAvLyBWRVJJTEFUT1IKKworICAgICAgICAgaW50ZWdlciBpOworCisKKwkvLyBFeHRlcm5hbCBjbG9jayBpcyB1c2VkIGJ5IGRlZmF1bHQuICBNYWtlIHRoaXMgYXJ0aWZpY2lhbGx5IGZhc3QgZm9yIHRoZQorCS8vIHNpbXVsYXRpb24uICBOb3JtYWxseSB0aGlzIHdvdWxkIGJlIGEgc2xvdyBjbG9jayBhbmQgdGhlIGRpZ2l0YWwgUExMCisJLy8gd291bGQgYmUgdGhlIGZhc3QgY2xvY2suCisKKwlhbHdheXMgIzEyLjUgY2xvY2sgPD0gKGNsb2NrID09PSAxJ2IwKTsKKworCWluaXRpYWwgYmVnaW4KKwkJY2xvY2sgPSAwOworICAgICAgICAgICAgICAgIHdiZF9leHRfY3ljX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgICAgICAgICAgICAgd2JkX2V4dF9zdGJfaSA9J2gwOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAgICAgICAgICAgICB3YmRfZXh0X2Fkcl9pID0naDA7ICAvLyBhZGRyZXNzCisgICAgICAgICAgICAgICAgd2JkX2V4dF93ZV9pICA9J2gwOyAgLy8gd3JpdGUKKyAgICAgICAgICAgICAgICB3YmRfZXh0X2RhdF9pID0naDA7ICAvLyBkYXRhIG91dHB1dAorICAgICAgICAgICAgICAgIHdiZF9leHRfc2VsX2kgPSdoMDsgIC8vIGJ5dGUgZW5hYmxlCisJZW5kCisKKwlgaWZkZWYgV0ZEVU1QCisJICAgaW5pdGlhbCBiZWdpbgorCSAgIAkkZHVtcGZpbGUoInNpbXgudmNkIik7CisJICAgCSRkdW1wdmFycyg0LCB1c2VyX3Jpc2Nfc29mdF9ib290X3RiLnVfdG9wKTsKKwkgICAJLy8kZHVtcHZhcnMoMywgdXNlcl9yaXNjX3NvZnRfYm9vdF90Yi51X3RvcC51X3Jpc2N2X3RvcCk7CisJICAgZW5kCisgICAgICAgYGVuZGlmCisKKwlpbml0aWFsIGJlZ2luCisKKwkJIzIwMDsgLy8gV2FpdCBmb3IgcmVzZXQgcmVtb3ZhbAorCSAgICAgICAgcmVwZWF0ICgxMCkgQChwb3NlZGdlIGNsb2NrKTsKKwkJJGRpc3BsYXkoIk1vbml0b3I6IFN0YW5kYWxvbmUgVXNlciBSaXNjIEJvb3QgVGVzdCBTdGFydGVkIik7CisKKwkJLy8gUmVtb3ZlIFdiIFJlc2V0CisJCXdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwMCwnaDEpOworCisJCSRyZWFkbWVtaCgidXNlcl9yaXNjX2Jvb3QuaGV4Iix0ZW1fbWVtKTsKKwkJLy8gY29udmVydCA4IGJpdCAzMiBtZW0gZm9ybWF0CisJCWZvcihpID0wOyBpIDwgNTExOyBpID0gaSsxKQorCQkgICB0ZW1fbWVtXzMyYltpXSA9IHt0ZW1fbWVtWyhpKjQpKzNdLHRlbV9tZW1bKGkqNCkrMl0sdGVtX21lbVsoaSo0KSsxXSx0ZW1fbWVtWyhpKjQpXX07CisKKwkgICAgICAgICR3cml0ZW1lbWgoInNyYW1fYmFuazAuaGV4Iix0ZW1fbWVtXzMyYiwwLDUxMSk7CisJICAgICAgICAkcmVhZG1lbWgoInNyYW1fYmFuazAuaGV4Iix1X3RvcC51X3NyYW0wXzJrYi5tZW0sMCw1MTEpOworCisJCWZvcihpID01MTI7IGkgPCAxMDIzOyBpID0gaSsxKQorCQkgICB0ZW1fbWVtXzMyYltpLTUxMl0gPSB7dGVtX21lbVsoaSo0KSszXSx0ZW1fbWVtWyhpKjQpKzJdLHRlbV9tZW1bKGkqNCkrMV0sdGVtX21lbVsoaSo0KV19OworCisJICAgICAgICAkd3JpdGVtZW1oKCJzcmFtX2JhbmsxLmhleCIsdGVtX21lbV8zMmIsMCw1MTEpOworCSAgICAgICAgJHJlYWRtZW1oKCJzcmFtX2JhbmsxLmhleCIsdV90b3AudV9zcmFtMV8ya2IubWVtLDAsNTExKTsKKworCQkvLyBFbmFibGUgdGhlIFNSQU0gUmVtYXAgdG8gYm9vdCByZWdpb24KKwkJd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDBDLHs0J2IxMTExLDI4J2gwfSk7CisJICAgICAgICByZXBlYXQgKDIpIEAocG9zZWRnZSBjbG9jayk7CisJCSMxOworCQkvLyBSZW1vdmUgdGhlIHJlc2V0LCBtYmlzdCwgd2lzaGJvbmUsIHJpc2N2CisgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDAwLCdoOEYpOworCisKKwkJLy8gUmVwZWF0IGN5Y2xlcyBvZiAxMDAwIGNsb2NrIGVkZ2VzIGFzIG5lZWRlZCB0byBjb21wbGV0ZSB0ZXN0YmVuY2gKKwkJcmVwZWF0ICgyNCkgYmVnaW4KKwkJCXJlcGVhdCAoNTAwKSBAKHBvc2VkZ2UgY2xvY2spOworCQkJLy8kZGlzcGxheSgiKzUwMCBjeWNsZXMiKTsKKwkJZW5kCisKKworCQkkZGlzcGxheSgiTW9uaXRvcjogUmVhZGluZyBCYWNrIHRoZSBleHBlY3RlZCB2YWx1ZSIpOworCQkvLyBVc2VyIFJJU0MgY29yZSBleHBlY3QgdG8gd3JpdGUgdGhlc2UgdmFsdWUgaW4gZ2xvYmFsCisJCS8vIHJlZ2lzdGVyLCByZWFkIGJhY2sgYW5kIGRlY2lkZSBvbiBwYXNzIGZhaWwKKwkJLy8gMHgzMDAwMDAxOCAgPSAweDExMjIzMzQ0OyAKKyAgICAgICAgICAgICAgICAvLyAweDMwMDAwMDFDICA9IDB4MjIzMzQ0NTU7IAorICAgICAgICAgICAgICAgIC8vIDB4MzAwMDAwMjAgID0gMHgzMzQ0NTU2NjsgCisgICAgICAgICAgICAgICAgLy8gMHgzMDAwMDAyNCAgPSAweDQ0NTU2Njc3OyAKKyAgICAgICAgICAgICAgICAvLyAweDMwMDAwMDI4ID0gMHg1NTY2Nzc4ODsgCisgICAgICAgICAgICAgICAgLy8gMHgzMDAwMDAyQyA9IDB4NjY3Nzg4OTk7IAorCisgICAgICAgICAgICAgICAgdGVzdF9mYWlsID0gMDsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDMwMDIwMDU4LHJlYWRfZGF0YSwzMidoMTEyMjMzNDQpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMzAwMjAwNUMscmVhZF9kYXRhLDMyJ2gyMjMzNDQ1NSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gzMDAyMDA2MCxyZWFkX2RhdGEsMzInaDMzNDQ1NTY2KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDMwMDIwMDY0LHJlYWRfZGF0YSwzMidoNDQ1NTY2NzcpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMzAwMjAwNjgscmVhZF9kYXRhLDMyJ2g1NTY2Nzc4OCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gzMDAyMDA2QyxyZWFkX2RhdGEsMzInaDY2Nzc4ODk5KSA7CisKKwkgICAKKwkgICAgCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKyAgICAgICAgICAJaWYodGVzdF9mYWlsID09IDApIGJlZ2luCisJCSAgIGBpZmRlZiBHTAorCSAgICAJICAgICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGFuZGFsb25lIFVzZXIgUmlzYyBCb290IChHTCkgUGFzc2VkIik7CisJCSAgIGBlbHNlCisJCSAgICAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RhbmRhbG9uZSBVc2VyIFJpc2MgQm9vdCAoUlRMKSBQYXNzZWQiKTsKKwkJICAgYGVuZGlmCisJICAgICAgICBlbmQgZWxzZSBiZWdpbgorCQkgICAgYGlmZGVmIEdMCisJICAgIAkgICAgICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGFuZGFsb25lIFVzZXIgUmlzYyBCb290IChHTCkgRmFpbGVkIik7CisJCSAgICBgZWxzZQorCQkgICAgICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGFuZGFsb25lIFVzZXIgUmlzYyBCb290IChSVEwpIEZhaWxlZCIpOworCQkgICAgYGVuZGlmCisJCSBlbmQKKwkgICAgCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkgICAgJGZpbmlzaDsKKwllbmQKKworCWluaXRpYWwgYmVnaW4KKwkJd2JfcnN0X2kgPD0gMSdiMTsKKwkJIzEwMDsKKwkJd2JfcnN0X2kgPD0gMSdiMDsJICAgIAkvLyBSZWxlYXNlIHJlc2V0CisJZW5kCit3aXJlIFVTRVJfVkREMVY4ID0gMSdiMTsKK3dpcmUgVlNTID0gMSdiMDsKKwordXNlcl9wcm9qZWN0X3dyYXBwZXIgdV90b3AoCitgaWZkZWYgVVNFX1BPV0VSX1BJTlMKKyAgICAudmNjZDEoVVNFUl9WREQxVjgpLAkvLyBVc2VyIGFyZWEgMSAxLjhWIHN1cHBseQorICAgIC52c3NkMShWU1MpLAkvLyBVc2VyIGFyZWEgMSBkaWdpdGFsIGdyb3VuZAorYGVuZGlmCisgICAgLndiX2Nsa19pICAgICAgICAoY2xvY2spLCAgLy8gU3lzdGVtIGNsb2NrCisgICAgLnVzZXJfY2xvY2syICAgICAoMSdiMSksICAvLyBSZWFsLXRpbWUgY2xvY2sKKyAgICAud2JfcnN0X2kgICAgICAgICh3Yl9yc3RfaSksICAvLyBSZWd1bGFyIFJlc2V0IHNpZ25hbAorCisgICAgLndic19jeWNfaSAgICh3YmRfZXh0X2N5Y19pKSwgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgLndic19zdGJfaSAgICh3YmRfZXh0X3N0Yl9pKSwgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgLndic19hZHJfaSAgICh3YmRfZXh0X2Fkcl9pKSwgIC8vIGFkZHJlc3MKKyAgICAud2JzX3dlX2kgICAgKHdiZF9leHRfd2VfaSksICAvLyB3cml0ZQorICAgIC53YnNfZGF0X2kgICAod2JkX2V4dF9kYXRfaSksICAvLyBkYXRhIG91dHB1dAorICAgIC53YnNfc2VsX2kgICAod2JkX2V4dF9zZWxfaSksICAvLyBieXRlIGVuYWJsZQorCisgICAgLndic19kYXRfbyAgICh3YmRfZXh0X2RhdF9vKSwgIC8vIGRhdGEgaW5wdXQKKyAgICAud2JzX2Fja19vICAgKHdiZF9leHRfYWNrX28pLCAgLy8gYWNrbm93bGVnZW1lbnQKKworIAorICAgIC8vIExvZ2ljIEFuYWx5emVyIFNpZ25hbHMKKyAgICAubGFfZGF0YV9pbiAgICAgICgnMSkgLAorICAgIC5sYV9kYXRhX291dCAgICAgKCksCisgICAgLmxhX29lbmIgICAgICAgICAoJzApLAorIAorCisgICAgLy8gSU9zCisgICAgLmlvX2luICAgICAgICAgIChpb19pbikgICwKKyAgICAuaW9fb3V0ICAgICAgICAgKGlvX291dCkgLAorICAgIC5pb19vZWIgICAgICAgICAoaW9fb2ViKSAsCisKKyAgICAudXNlcl9pcnEgICAgICAgKCkgCisKKyk7CisKK2BpZm5kZWYgR0wgLy8gRHJpdmUgUG93ZXIgZm9yIEhvbGQgRml4IEJ1ZgorICAgIC8vIEFsbCBzdGFuZGFyZCBjZWxsIG5lZWQgcG93ZXIgaG9vay11cCBmb3IgZnVuY3Rpb25hbGl0eSB3b3JrCisgICAgaW5pdGlhbCBiZWdpbgorCisgICAgZW5kCitgZW5kaWYgICAgCisKKworCit0YXNrIHdiX3VzZXJfY29yZV93cml0ZTsKK2lucHV0IFszMTowXSBhZGRyZXNzOworaW5wdXQgWzMxOjBdIGRhdGE7CitiZWdpbgorICByZXBlYXQgKDEpIEAocG9zZWRnZSBjbG9jayk7CisgICMxOworICB3YmRfZXh0X2Fkcl9pID1hZGRyZXNzOyAgLy8gYWRkcmVzcworICB3YmRfZXh0X3dlX2kgID0naDE7ICAvLyB3cml0ZQorICB3YmRfZXh0X2RhdF9pID1kYXRhOyAgLy8gZGF0YSBvdXRwdXQKKyAgd2JkX2V4dF9zZWxfaSA9J2hGOyAgLy8gYnl0ZSBlbmFibGUKKyAgd2JkX2V4dF9jeWNfaSA9J2gxOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2JkX2V4dF9zdGJfaSA9J2gxOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2FpdCh3YmRfZXh0X2Fja19vID09IDEpOworICByZXBlYXQgKDEpIEAocG9zZWRnZSBjbG9jayk7CisgICMxOworICB3YmRfZXh0X2N5Y19pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X3N0Yl9pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X2Fkcl9pID0naDA7ICAvLyBhZGRyZXNzCisgIHdiZF9leHRfd2VfaSAgPSdoMDsgIC8vIHdyaXRlCisgIHdiZF9leHRfZGF0X2kgPSdoMDsgIC8vIGRhdGEgb3V0cHV0CisgIHdiZF9leHRfc2VsX2kgPSdoMDsgIC8vIGJ5dGUgZW5hYmxlCisgICRkaXNwbGF5KCJERUJVRyBXQiBVU0VSIEFDQ0VTUyBXUklURSBBZGRyZXNzIDogJXgsIERhdGEgOiAleCIsYWRkcmVzcyxkYXRhKTsKKyAgcmVwZWF0ICgyKSBAKHBvc2VkZ2UgY2xvY2spOworZW5kCitlbmR0YXNrCisKK3Rhc2sgIHdiX3VzZXJfY29yZV9yZWFkOworaW5wdXQgWzMxOjBdIGFkZHJlc3M7CitvdXRwdXQgWzMxOjBdIGRhdGE7CityZWcgICAgWzMxOjBdIGRhdGE7CitiZWdpbgorICByZXBlYXQgKDEpIEAocG9zZWRnZSBjbG9jayk7CisgICMxOworICB3YmRfZXh0X2Fkcl9pID1hZGRyZXNzOyAgLy8gYWRkcmVzcworICB3YmRfZXh0X3dlX2kgID0naDA7ICAvLyB3cml0ZQorICB3YmRfZXh0X2RhdF9pID0nMDsgIC8vIGRhdGEgb3V0cHV0CisgIHdiZF9leHRfc2VsX2kgPSdoRjsgIC8vIGJ5dGUgZW5hYmxlCisgIHdiZF9leHRfY3ljX2kgPSdoMTsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfc3RiX2kgPSdoMTsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdhaXQod2JkX2V4dF9hY2tfbyA9PSAxKTsKKyAgZGF0YSAgPSB3YmRfZXh0X2RhdF9vOyAgCisgIHJlcGVhdCAoMSkgQChwb3NlZGdlIGNsb2NrKTsKKyAgIzE7CisgIHdiZF9leHRfY3ljX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfc3RiX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfYWRyX2kgPSdoMDsgIC8vIGFkZHJlc3MKKyAgd2JkX2V4dF93ZV9pICA9J2gwOyAgLy8gd3JpdGUKKyAgd2JkX2V4dF9kYXRfaSA9J2gwOyAgLy8gZGF0YSBvdXRwdXQKKyAgd2JkX2V4dF9zZWxfaSA9J2gwOyAgLy8gYnl0ZSBlbmFibGUKKyAgJGRpc3BsYXkoIkRFQlVHIFdCIFVTRVIgQUNDRVNTIFJFQUQgQWRkcmVzcyA6ICV4LCBEYXRhIDogJXgiLGFkZHJlc3MsZGF0YSk7CisgIHJlcGVhdCAoMikgQChwb3NlZGdlIGNsb2NrKTsKK2VuZAorZW5kdGFzaworCit0YXNrICB3Yl91c2VyX2NvcmVfcmVhZF9jaGVjazsKK2lucHV0IFszMTowXSBhZGRyZXNzOworb3V0cHV0IFszMTowXSBkYXRhOworaW5wdXQgWzMxOjBdIGNtcF9kYXRhOworcmVnICAgIFszMTowXSBkYXRhOworYmVnaW4KKyAgcmVwZWF0ICgxKSBAKHBvc2VkZ2UgY2xvY2spOworICAjMTsKKyAgd2JkX2V4dF9hZHJfaSA9YWRkcmVzczsgIC8vIGFkZHJlc3MKKyAgd2JkX2V4dF93ZV9pICA9J2gwOyAgLy8gd3JpdGUKKyAgd2JkX2V4dF9kYXRfaSA9JzA7ICAvLyBkYXRhIG91dHB1dAorICB3YmRfZXh0X3NlbF9pID0naEY7ICAvLyBieXRlIGVuYWJsZQorICB3YmRfZXh0X2N5Y19pID0naDE7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X3N0Yl9pID0naDE7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YWl0KHdiZF9leHRfYWNrX28gPT0gMSk7CisgIGRhdGEgID0gd2JkX2V4dF9kYXRfbzsgIAorICByZXBlYXQgKDEpIEAocG9zZWRnZSBjbG9jayk7CisgICMxOworICB3YmRfZXh0X2N5Y19pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X3N0Yl9pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X2Fkcl9pID0naDA7ICAvLyBhZGRyZXNzCisgIHdiZF9leHRfd2VfaSAgPSdoMDsgIC8vIHdyaXRlCisgIHdiZF9leHRfZGF0X2kgPSdoMDsgIC8vIGRhdGEgb3V0cHV0CisgIHdiZF9leHRfc2VsX2kgPSdoMDsgIC8vIGJ5dGUgZW5hYmxlCisgIGlmKGRhdGEgIT09IGNtcF9kYXRhKSBiZWdpbgorICAgICAkZGlzcGxheSgiRVJST1IgOiBXQiBVU0VSIEFDQ0VTUyBSRUFEICBBZGRyZXNzIDogMHgleCwgRXhkOiAweCV4IFJ4ZDogMHgleCAiLGFkZHJlc3MsY21wX2RhdGEsZGF0YSk7CisgICAgIHRlc3RfZmFpbCA9IDE7CisgIGVuZCBlbHNlIGJlZ2luCisgICAgICRkaXNwbGF5KCJTVEFUVVM6IFdCIFVTRVIgQUNDRVNTIFJFQUQgIEFkZHJlc3MgOiAweCV4LCBEYXRhIDogMHgleCIsYWRkcmVzcyxkYXRhKTsKKyAgZW5kCisgIHJlcGVhdCAoMikgQChwb3NlZGdlIGNsb2NrKTsKK2VuZAorZW5kdGFzaworCitgaWZkZWYgR0wKKword2lyZSAgICAgICAgd2JkX3NwaV9zdGJfaSAgID0gdV90b3AudV9zcGlfbWFzdGVyLndiZF9zdGJfaTsKK3dpcmUgICAgICAgIHdiZF9zcGlfYWNrX28gICA9IHVfdG9wLnVfc3BpX21hc3Rlci53YmRfYWNrX287Cit3aXJlICAgICAgICB3YmRfc3BpX3dlX2kgICAgPSB1X3RvcC51X3NwaV9tYXN0ZXIud2JkX3dlX2k7Cit3aXJlIFszMTowXSB3YmRfc3BpX2Fkcl9pICAgPSB1X3RvcC51X3NwaV9tYXN0ZXIud2JkX2Fkcl9pOword2lyZSBbMzE6MF0gd2JkX3NwaV9kYXRfaSAgID0gdV90b3AudV9zcGlfbWFzdGVyLndiZF9kYXRfaTsKK3dpcmUgWzMxOjBdIHdiZF9zcGlfZGF0X28gICA9IHVfdG9wLnVfc3BpX21hc3Rlci53YmRfZGF0X287Cit3aXJlIFszOjBdICB3YmRfc3BpX3NlbF9pICAgPSB1X3RvcC51X3NwaV9tYXN0ZXIud2JkX3NlbF9pOworCit3aXJlICAgICAgICB3YmRfc2RyYW1fc3RiX2kgPSB1X3RvcC51X3NkcmFtX2N0cmwud2Jfc3RiX2k7Cit3aXJlICAgICAgICB3YmRfc2RyYW1fYWNrX28gPSB1X3RvcC51X3NkcmFtX2N0cmwud2JfYWNrX287Cit3aXJlICAgICAgICB3YmRfc2RyYW1fd2VfaSAgPSB1X3RvcC51X3NkcmFtX2N0cmwud2Jfd2VfaTsKK3dpcmUgWzMxOjBdIHdiZF9zZHJhbV9hZHJfaSA9IHVfdG9wLnVfc2RyYW1fY3RybC53Yl9hZGRyX2k7Cit3aXJlIFszMTowXSB3YmRfc2RyYW1fZGF0X2kgPSB1X3RvcC51X3NkcmFtX2N0cmwud2JfZGF0X2k7Cit3aXJlIFszMTowXSB3YmRfc2RyYW1fZGF0X28gPSB1X3RvcC51X3NkcmFtX2N0cmwud2JfZGF0X287Cit3aXJlIFszOjBdICB3YmRfc2RyYW1fc2VsX2kgPSB1X3RvcC51X3NkcmFtX2N0cmwud2Jfc2VsX2k7CisKK3dpcmUgICAgICAgIHdiZF91YXJ0X3N0Yl9pICA9IHVfdG9wLnVfdWFydF9pMmNfdXNiLnJlZ19jczsKK3dpcmUgICAgICAgIHdiZF91YXJ0X2Fja19vICA9IHVfdG9wLnVfdWFydF9pMmNfdXNiLnJlZ19hY2s7Cit3aXJlICAgICAgICB3YmRfdWFydF93ZV9pICAgPSB1X3RvcC51X3VhcnRfaTJjX3VzYi5yZWdfd3I7Cit3aXJlIFs3OjBdICB3YmRfdWFydF9hZHJfaSAgPSB1X3RvcC51X3VhcnRfaTJjX3VzYi5yZWdfYWRkcjsKK3dpcmUgWzc6MF0gIHdiZF91YXJ0X2RhdF9pICA9IHVfdG9wLnVfdWFydF9pMmNfdXNiLnJlZ193ZGF0YTsKK3dpcmUgWzc6MF0gIHdiZF91YXJ0X2RhdF9vICA9IHVfdG9wLnVfdWFydF9pMmNfdXNiLnJlZ19yZGF0YTsKK3dpcmUgICAgICAgIHdiZF91YXJ0X3NlbF9pICA9IHVfdG9wLnVfdWFydF9pMmNfdXNiLnJlZ19iZTsKKworYGVuZGlmCisKKy8qKgorYGlmZGVmIEdMCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSSVNDIElNRU0gYW1kIERNRU0gTW9uaXRvcmluZyBUQVNLCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2BkZWZpbmUgUklTQ19DT1JFICB1c2VyX3VhcnRfdGIudV90b3AudV9jb3JlLnVfcmlzY3ZfdG9wCisKK2Fsd2F5c0AocG9zZWRnZSBgUklTQ19DT1JFLndiX2NsaykgYmVnaW4KKyAgICBpZihgUklTQ19DT1JFLndiZF9pbWVtX2Fja19pKQorICAgICAgICAgICRkaXNwbGF5KCJSSVNDVi1ERUJVRyA9PiBJTUVNIEFERFJFU1M6ICV4IFJlYWQgRGF0YSA6ICV4IiwgYFJJU0NfQ09SRS53YmRfaW1lbV9hZHJfbyxgUklTQ19DT1JFLndiZF9pbWVtX2RhdF9pKTsKKyAgICBpZihgUklTQ19DT1JFLndiZF9kbWVtX2Fja19pICYmIGBSSVNDX0NPUkUud2JkX2RtZW1fd2VfbykKKyAgICAgICAgICAkZGlzcGxheSgiUklTQ1YtREVCVUcgPT4gRE1FTSBBRERSRVNTOiAleCBXcml0ZSBEYXRhOiAleCBSZXNvbnNlOiAleCIsIGBSSVNDX0NPUkUud2JkX2RtZW1fYWRyX28sYFJJU0NfQ09SRS53YmRfZG1lbV9kYXRfbyk7CisgICAgaWYoYFJJU0NfQ09SRS53YmRfZG1lbV9hY2tfaSAmJiAhYFJJU0NfQ09SRS53YmRfZG1lbV93ZV9vKQorICAgICAgICAgICRkaXNwbGF5KCJSSVNDVi1ERUJVRyA9PiBETUVNIEFERFJFU1M6ICV4IFJFQUQgRGF0YSA6ICV4IFJlc29uc2U6ICV4IiwgYFJJU0NfQ09SRS53YmRfZG1lbV9hZHJfbyxgUklTQ19DT1JFLndiZF9kbWVtX2RhdF9pKTsKK2VuZAorCitgZW5kaWYKKyoqLworZW5kbW9kdWxlCitgZGVmYXVsdF9uZXR0eXBlIHdpcmUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvdXNlcl9zcGkvTWFrZWZpbGUgYi92ZXJpbG9nL2R2L3VzZXJfc3BpL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwOTM0ZTEKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3VzZXJfc3BpL01ha2VmaWxlCkBAIC0wLDAgKzEsOTkgQEAKKyMgU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMCBFZmFibGVzcyBDb3Jwb3JhdGlvbgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKworIyMgQ2FyYXZlbCBQb2ludGVycworQ0FSQVZFTF9ST09UID89IC4uLy4uLy4uL2NhcmF2ZWwKK0NBUkFWRUxfUEFUSCA/PSAkKENBUkFWRUxfUk9PVCkKK0NBUkFWRUxfRklSTVdBUkVfUEFUSCA9ICQoQ0FSQVZFTF9QQVRIKS92ZXJpbG9nL2R2L2NhcmF2ZWwKK0NBUkFWRUxfVkVSSUxPR19QQVRIICA9ICQoQ0FSQVZFTF9QQVRIKS92ZXJpbG9nCitDQVJBVkVMX1JUTF9QQVRIID0gJChDQVJBVkVMX1ZFUklMT0dfUEFUSCkvcnRsCitDQVJBVkVMX0JFSEFWSU9VUkFMX01PREVMUyA9ICQoQ0FSQVZFTF9WRVJJTE9HX1BBVEgpL2R2L2NhcmF2ZWwKKworCisjIyBVc2VyIFByb2plY3QgUG9pbnRlcnMKK1VQUkpfVkVSSUxPR19QQVRIID89IC4uLy4uLy4uL3Zlcmlsb2cKK1VQUkpfUlRMX1BBVEggPSAkKFVQUkpfVkVSSUxPR19QQVRIKS9ydGwKK1VQUkpfR0xfUEFUSCA9ICQoVVBSSl9WRVJJTE9HX1BBVEgpL2dsCitVUFJKX0JFSEFWSU9VUkFMX01PREVMUyA9IC4uL21vZGVsCitVUFJKX0JFSEFWSU9VUkFMX0FHRU5UUyA9IC4uL2FnZW50cworVVBSSl9JTkNMVURFX1BBVEgxID0gJChVUFJKX1JUTF9QQVRIKS95aWZpdmUveWNyMWMvc3JjL2luY2x1ZGVzCitVUFJKX0lOQ0xVREVfUEFUSDIgPSAkKFVQUkpfUlRMX1BBVEgpL3NkcmFtX2N0cmwvc3JjL2RlZnMKK1VQUkpfSU5DTFVERV9QQVRIMyA9ICQoVVBSSl9SVExfUEFUSCkvaTJjbS9zcmMvaW5jbHVkZXMKK1VQUkpfSU5DTFVERV9QQVRINCA9ICQoVVBSSl9SVExfUEFUSCkvdXNiMV9ob3N0L3NyYy9pbmNsdWRlcworVVBSSl9JTkNMVURFX1BBVEg1ID0gJChVUFJKX1JUTF9QQVRIKS9tYmlzdC9pbmNsdWRlCisKKyMjIFlJRklWRSBGSVJNV0FSRQorWUlGSVZFX0ZJUk1XQVJFX1BBVEggPSAkKFVQUkpfVkVSSUxPR19QQVRIKS9kdi9maXJtd2FyZQorR0NDNjRfUFJFRklYPz1yaXNjdjY0LXVua25vd24tZWxmCisKKyMjIFJJU0NWIEdDQyAKK0dDQ19QQVRIPz0vZWYvYXBwcy9iaW4KK0dDQ19QUkVGSVg/PXJpc2N2MzItdW5rbm93bi1lbGYKK1BES19QQVRIPz0vZWYvdGVjaC9TVy9za3kxMzBBCisKKyMjIFNpbXVsYXRpb24gbW9kZTogUlRML0dMCitTSU0/PVJUTAorRFVNUD89T0ZGCisKKy5TVUZGSVhFUzoKKworUEFUVEVSTiA9IHVzZXJfc3BpCisKK2FsbDogICR7UEFUVEVSTjo9LnZjZH0KKworCit2dnA6ICAke1BBVFRFUk46PS52dnB9CisKKyUudnZwOiAlX3RiLnYKK2lmZXEgKCQoU0lNKSxSVEwpCisgICBpZmVxICgkKERVTVApLE9GRikKKwlpdmVyaWxvZyAtZzIwMDUtc3YgLURGVU5DVElPTkFMIC1EU0lNIC1JICQoUERLX1BBVEgpIFwKKwktSSAkKENBUkFWRUxfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSAkKENBUkFWRUxfUlRMX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfTU9ERUxTKSAgICAtSSAkKFVQUkpfUlRMX1BBVEgpIC1JICQoVVBSSl9WRVJJTE9HX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfQUdFTlRTKSAgICBcCisJLUkgJChVUFJKX0lOQ0xVREVfUEFUSDEpICAgIC1JICQoVVBSSl9JTkNMVURFX1BBVEgyKSAtSSAkKFVQUkpfSU5DTFVERV9QQVRIMykgXAorCS1JICQoVVBSSl9JTkNMVURFX1BBVEg0KSAtSSAkKFVQUkpfSU5DTFVERV9QQVRINSkgXAorCSQ8IC1vICRAIAorICAgIGVsc2UgIAorCWl2ZXJpbG9nIC1nMjAwNS1zdiAtRFdGRFVNUCAtREZVTkNUSU9OQUwgLURTSU0gLUkgJChQREtfUEFUSCkgXAorCS1JICQoQ0FSQVZFTF9CRUhBVklPVVJBTF9NT0RFTFMpIC1JICQoQ0FSQVZFTF9SVExfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9NT0RFTFMpICAgIC1JICQoVVBSSl9SVExfUEFUSCkgLUkgJChVUFJKX1ZFUklMT0dfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9BR0VOVFMpICAgIFwKKwktSSAkKFVQUkpfSU5DTFVERV9QQVRIMSkgICAgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDIpIC1JICQoVVBSSl9JTkNMVURFX1BBVEgzKSBcCisJLUkgJChVUFJKX0lOQ0xVREVfUEFUSDQpIC1JICQoVVBSSl9JTkNMVURFX1BBVEg1KSBcCisJJDwgLW8gJEAgCisgICBlbmRpZgorZWxzZSAgCisJaXZlcmlsb2cgLWcyMDA1LXN2IC1ERlVOQ1RJT05BTCAtRFNJTSAtREdMIC1JICQoUERLX1BBVEgpIFwKKwktSSAkKENBUkFWRUxfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSAkKENBUkFWRUxfUlRMX1BBVEgpIC1JICQoQ0FSQVZFTF9WRVJJTE9HX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSAkKFVQUkpfR0xfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9BR0VOVFMpICAgIFwKKwkkPCAtbyAkQCAKK2VuZGlmCisKKyUudmNkOiAlLnZ2cAorCXZ2cCAkPAorCislLmhleDogCisJZWNobyBAIlRoaXMgaXMgdXNlciBib290IHRlc3QsIG5vdGluZyB0byBjb21waWxlIHRoZSBtYW5nbWVudCBjb3JlIGNvZGUiCisKKworIyAtLS0tIENsZWFuIC0tLS0KKworY2xlYW46CisJcm0gLWYgKi52dnAgKi52Y2QgKi5sb2cgKi5mc3QKKworLlBIT05ZOiBjbGVhbiBoZXggYWxsCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3VzZXJfc3BpL2ZsYXNoMC5oZXggYi92ZXJpbG9nL2R2L3VzZXJfc3BpL2ZsYXNoMC5oZXgKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMjRhMmU0NwotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvdXNlcl9zcGkvZmxhc2gwLmhleApAQCAtMCwwICsxLDc5IEBACitAMDAwMDAwMDANCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMA0KKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwDQorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDANCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMA0KKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwDQorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDANCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMA0KKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwDQorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDANCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMA0KKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwDQorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDANCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMA0KKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwDQorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDANCiswMCAwMCAwMCAwMCAxMyAwMCAwMCAwMCA2RiAwMCAwMCAwMCBGRiBGRiBGRiBGRg0KKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwDQorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDANCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMA0KKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwDQorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDANCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMA0KKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwDQorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDANCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMA0KKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwDQorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDANCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMA0KKzZGIDAwIDYwIDE4IDEzIDAwIDAwIDAwIDEzIDAwIDAwIDAwIDEzIDAwIDAwIDAwDQorMTMgMDAgMDAgMDAgMTMgMDAgMDAgMDAgMTMgMDAgMDAgMDAgMTMgMDAgMDAgMDANCisxMyAwMCAwMCAwMCAxMyAwMCAwMCAwMCAxMyAwMCAwMCAwMCAxMyAwMCAwMCAwMA0KKzEzIDAwIDAwIDAwIDEzIDAwIDAwIDAwIDEzIDAwIDAwIDAwIDEzIDAwIDAwIDAwDQorOTMgMDAgMDAgMDAgMTMgMDEgMDAgMDAgOTMgMDEgMDAgMDAgMTMgMDIgMDAgMDANCis5MyAwMiAwMCAwMCAxMyAwMyAwMCAwMCA5MyAwMyAwMCAwMCAxMyAwNCAwMCAwMA0KKzkzIDA0IDAwIDAwIDEzIDA1IDAwIDAwIDkzIDA1IDAwIDAwIDEzIDA2IDAwIDAwDQorOTMgMDYgMDAgMDAgMTMgMDcgMDAgMDAgOTMgMDcgMDAgMDAgMTMgMDggMDAgMDANCis5MyAwOCAwMCAwMCAxMyAwOSAwMCAwMCA5MyAwOSAwMCAwMCAxMyAwQSAwMCAwMA0KKzkzIDBBIDAwIDAwIDEzIDBCIDAwIDAwIDkzIDBCIDAwIDAwIDEzIDBDIDAwIDAwDQorOTMgMEMgMDAgMDAgMTMgMEQgMDAgMDAgOTMgMEQgMDAgMDAgMTMgMEUgMDAgMDANCis5MyAwRSAwMCAwMCAxMyAwRiAwMCAwMCA5MyAwRiAwMCAwMCA5NyAwMSA0OCAwMA0KKzkzIDgxIDQxIDYyIDEzIDA1IDAwIDQwIDk3IDA1IDQ4IDAwIDkzIDg1IDg1IEQ3DQorMTcgMDYgNDggMDAgMTMgMDYgMDYgRTMgNjMgMEQgQjUgMDAgMjkgQTAgMTQgNDENCis5NCBDMSAxMSAwNSA5MSAwNSBFMyA5QyBDNSBGRSAxNyAwNiA0OCAwMCAxMyAwNg0KKzY2IEUxIDk3IDA1IDQ4IDAwIDkzIDg1IEU1IEUwIDIxIEEwIDIzIDIwIDA2IDAwDQorMTEgMDYgRTMgOUQgQzUgRkUgMTMgODEgMDEgNzYgMTcgMDUgNDggMDAgMTMgMDUNCis2NSBERiAxNyAwNiA0OCAwMCAxMyAwNiBFNiBERSBCMyAwNSBBNiA0MCAxMyA4Nw0KKzAxIDY2IDMzIDAyIEI3IDQwIDkyIDg1IDE3IDA2IDQ4IDAwIDEzIDA2IDg2IEREDQorMjkgQTAgMTQgNDEgOTQgQzEgMTEgMDUgOTEgMDUgRTMgMUMgQzUgRkUgMjEgQTANCisyMyBBMCAwNSAwMCA5MSAwNSBFMyA5RCBFNSBGRSBCNyAwMiA0OSAwMCAwNSA0Mw0KKzIzIEEwIDYyIDAwIEI3IDAyIDQ5IDAwIDkxIDAyIDEzIDAzIDMwIDA2IDIzIEEwDQorNjIgMDAgQjcgMDIgNDkgMDAgQzEgMDIgN0QgNTMgMjMgQTAgNjIgMDAgMjMgQTINCis2MiAwMCAwMSA0NSA4MSA0NSA5NyAwMiA0OCAwMCBFNyA4MCBBMiBDQyA5NyAwMg0KKzQ4IDAwIDkzIDgyIDIyIEQyIDZEIDcxIDA2IEMyIDBBIEM0IDBFIEM2IDEyIEM4DQorMTYgQ0EgMUEgQ0MgMUUgQ0UgMjIgRDAgMjYgRDIgMkEgRDQgMkUgRDYgMzIgRDgNCiszNiBEQSAzQSBEQyAzRSBERSBDMiBDMCBDNiBDMiBDQSBDNCBDRSBDNiBEMiBDOA0KK0Q2IENBIERBIENDIERFIENFIEUyIEQwIEU2IEQyIEVBIEQ0IEVFIEQ2IEYyIEQ4DQorRjYgREEgRkEgREMgRkUgREUgNzMgMjUgMjAgMzQgRjMgMjUgMTAgMzQgMEEgODYNCitFRiAwMCA4MCAwNCA5MiA0MCAyMiA0MSBCMiA0MSA0MiA0MiBEMiA0MiA2MiA0Mw0KK0YyIDQzIDAyIDU0IDkyIDU0IDIyIDU1IEIyIDU1IDQyIDU2IEQyIDU2IDYyIDU3DQorRjIgNTcgMDYgNDggOTYgNDggMjYgNDkgQjYgNDkgNDYgNEEgRDYgNEEgNjYgNEINCitGNiA0QiAwNiA1QyA5NiA1QyAyNiA1RCBCNiA1RCA0NiA1RSBENiA1RSA2NiA1Rg0KK0Y2IDVGIDUxIDYxIDczIDAwIDIwIDMwIDZGIEYwIERGIEQxIDAwIDAwIDAwIDAwDQorMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDANCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMA0KK0AwMDAwMDQwMA0KKzM3IDM3IDIyIDExIEI3IDA3IDAzIDMwIDkzIDAyIDQ3IDM0IDM3IDQzIDMzIDIyDQorMjMgQUMgNTcgMDQgOTMgMDMgNTMgNDUgMzcgNTUgNDQgMzMgMjMgQUUgNzcgMDQNCis5MyAwNSA2NSA1NiAzNyA2NiA1NSA0NCBBQyBEMyA5MyAwNiA3NiA2NyAzNyA3OA0KKzY2IDU1IEY0IEQzIDkzIDA4IDg4IDc4IDM3IDlFIDc3IDY2IDIzIEE0IDE3IDA3DQorOTMgMEUgOUUgODkgMjMgQTYgRDcgMDcgMDEgQTAgMDAgMDAgMDAgMDAgMDAgMDANCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMA0KKzk3IDAyIEI4IEZGIDkzIDgyIDQyIDA5IDgyIDgyIDEzIDAwIDAwIDAwIDEzIDAwDQorMDAgMDAgMTMgMDAgMDAgMDAgMTMgMDAgMDAgMDAgMTMgMDAgMDAgMDAgMDEgMDANCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMA0KKzAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwDQorQDAwMDAwNEEwDQorMTMgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDANCiswMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMA0KZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvdXNlcl9zcGkvcnVuX2l2ZXJpbG9nIGIvdmVyaWxvZy9kdi91c2VyX3NwaS9ydW5faXZlcmlsb2cKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmVkYWJjMwotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvdXNlcl9zcGkvcnVuX2l2ZXJpbG9nCkBAIC0wLDAgKzEsNDQgQEAKKyMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisjIC8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEsIERpbmVzaCBBbm5heXlhCisjIC8vIAorIyAvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgLy8KKyMgLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgLy8KKyMgLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMgLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyMgLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisjIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCityaXNjdjY0LXVua25vd24tZWxmLWdjYyAtTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICAtRF9fUlZDX0VYVCAtc3RhdGljIC1zdGQ9Z251OTkgLWZuby1jb21tb24gLWZuby1idWlsdGluLXByaW50ZiAtRFRDTT0xIC1XYSwtbWFyY2g9cnYzMmltYyAtbWFyY2g9cnYzMmltYyAtbWFiaT1pbHAzMiAtREZMQUdTX1NUUj1cIiItTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICJcIiAgLWMgLUkuLyAtSS4uLy4uL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvY29tbW9uICB1c2VyX3Jpc2NfYm9vdC5jIC1vIHVzZXJfcmlzY19ib290Lm8KKworcmlzY3Y2NC11bmtub3duLWVsZi1nY2MgLU8yIC1mdW5yb2xsLWxvb3BzIC1mcGVlbC1sb29wcyAtZmdjc2Utc20gLWZnY3NlLWxhcyAgLURfX1JWQ19FWFQgLXN0YXRpYyAtc3RkPWdudTk5IC1mbm8tY29tbW9uIC1mbm8tYnVpbHRpbi1wcmludGYgLURUQ009MSAtV2EsLW1hcmNoPXJ2MzJpbWMgLW1hcmNoPXJ2MzJpbWMgLW1hYmk9aWxwMzIgLURGTEFHU19TVFI9XCIiLU8yIC1mdW5yb2xsLWxvb3BzIC1mcGVlbC1sb29wcyAtZmdjc2Utc20gLWZnY3NlLWxhcyAiXCIgIC1EX19BU1NFTUJMWV9fPTEgLWMgLUkuLyAtSS4uLy4uL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvY29tbW9uLyAgLi4vLi4vcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9jb21tb24vY3J0X3RjbS5TIC1vIGNydF90Y20ubworCityaXNjdjY0LXVua25vd24tZWxmLWdjYyAtbyB1c2VyX3Jpc2NfYm9vdC5lbGYgLVQgLi4vLi4vcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9jb21tb24vbGlua190Y20ubGQgdXNlcl9yaXNjX2Jvb3QubyBjcnRfdGNtLm8gLW5vc3RhcnRmaWxlcyAtbm9zdGRsaWIgLWxjIC1sZ2NjIC1tYXJjaD1ydjMyaW1jIC1tYWJpPWlscDMyCisKK3Jpc2N2NjQtdW5rbm93bi1lbGYtb2JqY29weSAtTyB2ZXJpbG9nIHVzZXJfcmlzY19ib290LmVsZiB1c2VyX3Jpc2NfYm9vdC5oZXgKKworcmlzY3Y2NC11bmtub3duLWVsZi1vYmpkdW1wIC1EIHVzZXJfcmlzY19ib290LmVsZiA+IHVzZXJfcmlzY19ib290LmR1bXAKKworcm0gY3J0X3RjbS5vIHVzZXJfcmlzY19ib290Lm8KKworCisjaXZlcmlsb2cgd2l0aG91dCBEdW1wCitpdmVyaWxvZyAtZzIwMDUtc3YgLURGVU5DVElPTkFMIC1EU0lNIC1JICRQREtfUEFUSCBcCistSSAuLi8uLi9jYXJhdmVsL3Zlcmlsb2cvZHYvY2FyYXZlbCAtSSAuLi8uLi9jYXJhdmVsL3Zlcmlsb2cvcnRsIFwKKy1JIC4uL21vZGVsICAgIC1JIC4uLy4uLy4uL3Zlcmlsb2cvcnRsIC1JIC4uLy4uLy4uL3Zlcmlsb2cgXAorLUkgLi4vYWdlbnRzICAgIFwKKy1JIC4uLy4uLy4uL3Zlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy9pbmNsdWRlcyAgICAtSSAuLi8uLi8uLi92ZXJpbG9nL3J0bC9zZHJhbV9jdHJsL3NyYy9kZWZzIC1JIC4uLy4uLy4uL3Zlcmlsb2cvcnRsL2kyY20vc3JjL2luY2x1ZGVzIFwKKy1JIC4uLy4uLy4uL3Zlcmlsb2cvcnRsL3VzYjFfaG9zdC9zcmMvaW5jbHVkZXMgXAordXNlcl9zcGlfdGIudiAtbyB1c2VyX3NwaS52dnAgCisKKworCit2dnAgdXNlcl9zcGlfdGIudnZwIHwgdGVlIHRlc3QubG9nCisKK1xybSAtcmYgdXNlcl9zcGlfdGIudnZwCmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3VzZXJfc3BpL3VzZXJfcmlzY19ib290LmMgYi92ZXJpbG9nL2R2L3VzZXJfc3BpL3VzZXJfcmlzY19ib290LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDcxMWI3YgotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvdXNlcl9zcGkvdXNlcl9yaXNjX2Jvb3QuYwpAQCAtMCwwICsxLDY5IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEsIERpbmVzaCBBbm5heXlhCisvLyAKKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKy8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisjZGVmaW5lIFNDX1NJTV9PVVRQT1JUICgweGYwMDAwMDAwKQorI2RlZmluZSB1aW50MzJfdCAgbG9uZworCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzAgICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDMwMDAwKQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcxICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAzMDAwNCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMiAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMzAwMDgpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzMgICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDMwMDBDKQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWc0ICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAzMDAxMCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnNSAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMzAwMTQpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzYgICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDMwMDE4KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWc3ICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAzMDAxQykKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnOCAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMzAwMjApCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzkgICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDMwMDI0KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcxMCAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAzMDAyOCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMTEgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMzAwMkMpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzEyICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDMwMDMwKQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcxMyAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAzMDAzNCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMTQgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMzAwMzgpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzE1ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDMwMDNDKQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcxNiAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAzMDA0MCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMTcgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMzAwNDQpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzE4ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDMwMDQ4KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcxOSAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAzMDA0QykKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMjAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMzAwNTApCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzIxICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDMwMDU0KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcyMiAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAzMDA1OCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMjMgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMzAwNUMpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzI0ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDMwMDYwKQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcyNSAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAzMDA2NCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMjYgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMzAwNjgpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzI3ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDMwMDZDKQorCitpbnQgbWFpbigpCit7CisKKyAgICAvL3ZvbGF0aWxlIGxvbmcgKm91dF9wdHIgPSAodm9sYXRpbGUgbG9uZyopU0NfU0lNX09VVFBPUlQ7CisgICAgLy8qb3V0X3B0ciA9IDB4QUFCQkNDREQ7CisgICAgLy8qb3V0X3B0ciA9IDB4QkJDQ0RERUU7CisgICAgLy8qb3V0X3B0ciA9IDB4Q0NEREVFRkY7CisgICAgLy8qb3V0X3B0ciA9IDB4RERFRUZGMDA7CisKKyAgICAvLyBXcml0ZSBzb2Z0d2FyZSBXcml0ZSAmIFJlYWQgUmVnaXN0ZXIKKyAgICByZWdfbXByal9nbG9ibF9yZWcyMiAgPSAweDExMjIzMzQ0OyAKKyAgICByZWdfbXByal9nbG9ibF9yZWcyMyAgPSAweDIyMzM0NDU1OyAKKyAgICByZWdfbXByal9nbG9ibF9yZWcyNCAgPSAweDMzNDQ1NTY2OyAKKyAgICByZWdfbXByal9nbG9ibF9yZWcyNSAgPSAweDQ0NTU2Njc3OyAKKyAgICByZWdfbXByal9nbG9ibF9yZWcyNiA9IDB4NTU2Njc3ODg7IAorICAgIHJlZ19tcHJqX2dsb2JsX3JlZzI3ID0gMHg2Njc3ODg5OTsgCisKKyAgICB3aGlsZSgxKSB7fQorICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi91c2VyX3NwaS91c2VyX3NwaV90Yi52IGIvdmVyaWxvZy9kdi91c2VyX3NwaS91c2VyX3NwaV90Yi52Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxNmJmYTgKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3VzZXJfc3BpL3VzZXJfc3BpX3RiLnYKQEAgLTAsMCArMSwxNDE2IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAgMjAyMSAsIERpbmVzaCBBbm5heXlhCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBNb2RpZmllZCBieSBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgU3RhbmRhbG9uZSBVc2VyIHZhbGlkYXRpb24gVGVzdCBiZW5jaCAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFlJRml2ZSBjb3JlcyBwcm9qZWN0ICAgICAgICAgICAgICAgLy8vLworLy8vLyAgaHR0cHM6Ly9naXRodWIuY29tL2RpbmVzaGFubmF5eWEveWlmaXZlX3IwLmdpdCAgICAgICAgICAgICAgLy8vLworLy8vLyAgaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2NvcmVzL3lpZml2ZS8gICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgIFRoaXMgaXMgYSBzdGFuZGFsb25lIHRlc3QgYmVuY2ggdG8gdmFsaWRhdGUgdGhlICAgICAgICAgICAgLy8vLworLy8vLyAgIERpZ2l0YWwgY29yZSBmbGFzaCBhY2Nlc3MgdGhyb3VnaCBFeHRlcm5hbCBXQiBpL0YuICAgICAgICAgLy8vLworLy8vLyAgIDEuICBDaGVjayBTUEkgUmVhZCBJZGVudGlmaWNhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgIDIuICBDaGVjayB0aGUgRGlyZWN0IE1lbW9yeSBSZWFkIChRdWFsL1NpbmdsZS9RdWFkKSAgICAgICAgLy8vLyAgICAgICAgCisvLy8vICAgMy4gIERpcmVjdCBTUEkgTWVtb3J5IFByZWZldGNoIC0gM0RXICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgNC4gIERpcmVjdCBTUEkgTWVtb3J5IFByZWZldGNoIC0gMkRXICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgNS4gIERpcmVjdCBTUEkgTWVtb3J5IFByZWZldGNoIC0gMURXICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgNi4gIERpcmVjdCBTUEkgTWVtb3J5IFByZWZldGNoIC0gN0RXICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgNy4gIDFEVyAgSW5kaXJlY3QgUmVhZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgOC4gIDJEVyAgSW5kaXJlY3QgUmVhZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgOS4gIDNEVyAgSW5kaXJlY3QgUmVhZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgMTAuIDREVyAgSW5kaXJlY3QgUmVhZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgMTEuIDVEVyAgSW5kaXJlY3QgUmVhZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgMTIuIDhEVyAgSW5kaXJlY3QgUmVhZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgMTMuIFNlY3RvciBFcmFzZSBjb21tYW5kICsgUGFnZSBXcml0ZSAmIFJlYWQgQmFjayAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUbyBEbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIG5vdGhpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBBdXRob3Iocyk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgLSBEaW5lc2ggQW5uYXl5YSwgZGluZXNoYUBvcGVuY29yZXMub3JnICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBSZXZpc2lvbiA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIDAuMSAtIDAxIE9jdCAyMDIxLCBEaW5lc2ggQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIENvcHlyaWdodCAoQykgMjAwMCBBdXRob3JzIGFuZCBPUEVOQ09SRVMuT1JHICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgICAvLy8vCisvLy8vIHJlc3RyaWN0aW9uIHByb3ZpZGVkIHRoYXQgdGhpcyBjb3B5cmlnaHQgc3RhdGVtZW50IGlzIG5vdCAgICAvLy8vCisvLy8vIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSBhbmQgdGhhdCBhbnkgZGVyaXZhdGl2ZSB3b3JrIGNvbnRhaW5zICAvLy8vCisvLy8vIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLiAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgICAvLy8vCisvLy8vIGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAvLy8vCisvLy8vIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAvLy8vCisvLy8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgICAvLy8vCisvLy8vIGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSAgICAgICAvLy8vCisvLy8vIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgICAvLy8vCisvLy8vIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgICAgICAvLy8vCisvLy8vIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSAvLy8vCisvLy8vIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgICAvLy8vCisvLy8vIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBzb3VyY2U7IGlmIG5vdCwgZG93bmxvYWQgaXQgICAvLy8vCisvLy8vIGZyb20gaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2xncGwuc2h0bWwgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2BkZWZhdWx0X25ldHR5cGUgd2lyZQorCitgdGltZXNjYWxlIDEgbnMgLyAxIG5zCisKK2BpbmNsdWRlICJzMjVmbDI1NnMuc3YiCitgaW5jbHVkZSAidXByal9uZXRsaXN0cy52IgorYGluY2x1ZGUgIm10NDhsYzhtOGEyLnYiCitgaW5jbHVkZSAic3BpcmFtLnYiCisKKyAvLyBSRUdJU1RFUiBNQVAKKyBgZGVmaW5lIFFTUElNX0dMQkxfQ1RSTCAgICAgICAgICAgMzInaDEwMDAwMDAwCisgYGRlZmluZSBRU1BJTV9ETUVNX0cwX1JEX0NUUkwgICAgMzInaDEwMDAwMDA0CisgYGRlZmluZSBRU1BJTV9ETUVNX0cwX1dSX0NUUkwgICAgMzInaDEwMDAwMDA4CisgYGRlZmluZSBRU1BJTV9ETUVNX0cxX1JEX0NUUkwgICAgMzInaDEwMDAwMDBDCisgYGRlZmluZSBRU1BJTV9ETUVNX0cxX1dSX0NUUkwgICAgMzInaDEwMDAwMDEwCisKKyBgZGVmaW5lIFFTUElNX0RNRU1fQ1NfQU1BUCAgICAgICAgMzInaDEwMDAwMDE0CisgYGRlZmluZSBRU1BJTV9ETUVNX0NBX0FNQVNLICAgICAgIDMyJ2gxMDAwMDAxOAorCisgYGRlZmluZSBRU1BJTV9JTUVNX0NUUkwxICAgICAgICAgIDMyJ2gxMDAwMDAxQworIGBkZWZpbmUgUVNQSU1fSU1FTV9DVFJMMiAgICAgICAgICAzMidoMTAwMDAwMjAKKyBgZGVmaW5lIFFTUElNX0lNRU1fQUREUiAgICAgICAgICAgMzInaDEwMDAwMDI0CisgYGRlZmluZSBRU1BJTV9JTUVNX1dEQVRBICAgICAgICAgIDMyJ2gxMDAwMDAyOAorIGBkZWZpbmUgUVNQSU1fSU1FTV9SREFUQSAgICAgICAgICAzMidoMTAwMDAwMkMKKyBgZGVmaW5lIFFTUElNX1NQSV9TVEFUVVMgICAgICAgICAgMzInaDEwMDAwMDMwCisKK21vZHVsZSB1c2VyX3NwaV90YjsKKwlyZWcgY2xvY2s7CisJcmVnIHdiX3JzdF9pOworCXJlZyBwb3dlcjEsIHBvd2VyMjsKKwlyZWcgcG93ZXIzLCBwb3dlcjQ7CisKKyAgICAgICAgcmVnICAgICAgICB3YmRfZXh0X2N5Y19pOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAgICAgcmVnICAgICAgICB3YmRfZXh0X3N0Yl9pOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAgICAgcmVnIFszMTowXSB3YmRfZXh0X2Fkcl9pOyAgLy8gYWRkcmVzcworICAgICAgICByZWcgICAgICAgIHdiZF9leHRfd2VfaTsgIC8vIHdyaXRlCisgICAgICAgIHJlZyBbMzE6MF0gd2JkX2V4dF9kYXRfaTsgIC8vIGRhdGEgb3V0cHV0CisgICAgICAgIHJlZyBbMzowXSAgd2JkX2V4dF9zZWxfaTsgIC8vIGJ5dGUgZW5hYmxlCisKKyAgICAgICAgd2lyZSBbMzE6MF0gd2JkX2V4dF9kYXRfbzsgIC8vIGRhdGEgaW5wdXQKKyAgICAgICAgd2lyZSAgICAgICAgd2JkX2V4dF9hY2tfbzsgIC8vIGFja25vd2xlZ2VtZW50CisgICAgICAgIHdpcmUgICAgICAgIHdiZF9leHRfZXJyX287ICAvLyBlcnJvcgorCisJLy8gVXNlciBJL08KKwl3aXJlIFszNzowXSBpb19vZWI7CisJd2lyZSBbMzc6MF0gaW9fb3V0OworCXdpcmUgWzM3OjBdIGlvX2luOworCisJd2lyZSBncGlvOworCXdpcmUgWzM3OjBdIG1wcmpfaW87CisJd2lyZSBbNzowXSBtcHJqX2lvXzA7CisJcmVnICAgICAgICB0ZXN0X2ZhaWw7CisJcmVnIFszMTowXSByZWFkX2RhdGE7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBTUEkgRlNNIFN0YXRlIENvbnRyb2wKKyoKKyogICBPUEVSQVRJT04gICBDT01NQU5EICAgICAgICAgICAgICAgICAgIFNFUVVFTkNFIAorKgorKiAgICBFUkFTRSAgICAgICBQNEUoMHgyMCkgICAgICAgICAgIC0+ICBDT01NQU5EICsgQUREUkVTUworKiAgICBFUkFTRSAgICAgICBQOEUoMHg0MCkgICAgICAgICAgIC0+ICBDT01NQU5EICsgQUREUkVTUworKiAgICBFUkFTRSAgICAgICBTRSgweEQ4KSAgICAgICAgICAgIC0+ICBDT01NQU5EICsgQUREUkVTUworKiAgICBFUkFTRSAgICAgICBCRSgweDYwKSAgICAgICAgICAgIC0+ICBDT01NQU5EICsgQUREUkVTUworKiAgICBFUkFTRSAgICAgICBCRSgweEM3KSAgICAgICAgICAgIC0+ICBDT01NQU5EIAorKiAgICBQUk9HUkFNICAgICBQUCgweDAyKSAgICAgICAgICAgIC0+ICBDT01NQU5EICsgQUREUkVTUyArIFdyaXRlIERBVEEKKyogICAgUFJPR1JBTSAgICAgUVBQKDB4MzIpICAgICAgICAgICAtPiAgQ09NTUFORCArIEFERFJFU1MgKyBXcml0ZSBEQVRBCisqICAgIFJFQUQgICAgICAgIFJFQUQoMHgzKSAgICAgICAgICAgLT4gIENPTU1BTkQgKyBBRERSRVNTICsgUkVBRCBEQVRBCisqICAgIFJFQUQgICAgICAgIEZBU1RfUkVBRCgweEIpICAgICAgLT4gIENPTU1BTkQgKyBBRERSRVNTICsgRFVNTVkgKyBSRUFEIERBVEEKKyogICAgUkVBRCAgICAgICAgRE9SICgweDNCKSAgICAgICAgICAtPiAgQ09NTUFORCArIEFERFJFU1MgKyBEVU1NWSArIFJFQUQgREFUQQorKiAgICBSRUFEICAgICAgICBRT1IgKDB4NkIpICAgICAgICAgIC0+ICBDT01NQU5EICsgQUREUkVTUyArIERVTU1ZICsgUkVBRCBEQVRBCisqICAgIFJFQUQgICAgICAgIERJT1IgKDB4QkIpICAgICAgICAgLT4gIENPTU1BTkQgKyBBRERSRVNTICsgTU9ERSAgKyBSRUFEIERBVEEKKyogICAgUkVBRCAgICAgICAgUUlPUiAoMHhFQikgICAgICAgICAtPiAgQ09NTUFORCArIEFERFJFU1MgKyBNT0RFICArIERVTU1ZICsgUkVBRCBEQVRBCisqICAgIFJFQUQgICAgICAgIFJESUQgKDB4OUYpICAgICAgICAgLT4gIENPTU1BTkQgKyBSRUFEIERBVEEKKyogICAgUkVBRCAgICAgICAgUkVBRF9JRCAoMHg5MCkgICAgICAtPiAgQ09NTUFORCArIEFERFJFU1MgKyBSRUFEIERBVEEKKyogICAgV1JJVEUgICAgICAgV1JFTigweDYpICAgICAgICAgICAtPiAgQ09NTUFORAorKiAgICBXUklURSAgICAgICBXUkRJICAgICAgICAgICAgICAgIC0+ICBDT01NQU5ECisqICAgIFNUQVRVUyAgICAgIFJEU1IoMHgwNSkgICAgICAgICAgLT4gIENPTU1BTkQgKyBSRUFEIERBVEEKKyogICAgU1RBVFVTICAgICAgUkNSKDB4MzUpICAgICAgICAgICAtPiAgQ09NTUFORCArIFJFQUQgREFUQQorKiAgICBDT05GSUcgICAgICBXUlIoMHgwMSkgICAgICAgICAgIC0+ICBDT01NQU5EICsgV1JJVEUgREFUQQorKiAgICBDT05GSUcgICAgICBDTFNSKDB4MzApICAgICAgICAgIC0+ICBDT01NQU5ECisqICAgIFBvd2VyIFNhdmluZyBEUCgweEI5KSAgICAgICAgICAgLT4gIENPTU1BTkQKKyogICAgUG93ZXIgU2F2aW5nIFJFUygweEFCKSAgICAgICAgICAtPiAgQ09NTUFORCArIFJFQUQgREFUQQorKiAgICBPVFAgICAgICAgICAgT1RQUCgweDQyKSAgICAgICAgIC0+ICBDT01NQU5EICsgQUREUisgV1JJVEUgREFUQQorKiAgICBPVFAgICAgICAgICAgT1RQUigweDRCKSAgICAgICAgIC0+ICBDT01NQU5EICsgQUREUiArIERVTU1ZICsgUkVBRCBEQVRBCisqICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFyYW1ldGVyIFBfRlNNX0MgICAgICA9IDQnYjAwMDA7IC8vIENvbW1hbmQgUGhhc2UgT25seQorcGFyYW1ldGVyIFBfRlNNX0NXICAgICA9IDQnYjAwMDE7IC8vIENvbW1hbmQgKyBXcml0ZSBEQVRBIFBoYXNlIE9ubHkKK3BhcmFtZXRlciBQX0ZTTV9DQSAgICAgPSA0J2IwMDEwOyAvLyBDb21tYW5kIC0+IEFkZHJlc3MgUGhhc2UgT25seQorCitwYXJhbWV0ZXIgUF9GU01fQ0FSICAgID0gNCdiMDAxMTsgLy8gQ29tbWFuZCAtPiBBZGRyZXNzIC0+IFJlYWQgRGF0YQorcGFyYW1ldGVyIFBfRlNNX0NBRFIgICA9IDQnYjAxMDA7IC8vIENvbW1hbmQgLT4gQWRkcmVzcyAtPiBEdW1teSAtPiBSZWFkIERhdGEKK3BhcmFtZXRlciBQX0ZTTV9DQU1SICAgPSA0J2IwMTAxOyAvLyBDb21tYW5kIC0+IEFkZHJlc3MgLT4gTW9kZSAtPiBSZWFkIERhdGEKK3BhcmFtZXRlciBQX0ZTTV9DQU1EUiAgPSA0J2IwMTEwOyAvLyBDb21tYW5kIC0+IEFkZHJlc3MgLT4gTW9kZSAtPiBEdW1teSAtPiBSZWFkIERhdGEKKworcGFyYW1ldGVyIFBfRlNNX0NBVyAgICA9IDQnYjAxMTE7IC8vIENvbW1hbmQgLT4gQWRkcmVzcyAtPldyaXRlIERhdGEKK3BhcmFtZXRlciBQX0ZTTV9DQURXICAgPSA0J2IxMDAwOyAvLyBDb21tYW5kIC0+IEFkZHJlc3MgLT4gRFVNTVkgKyBXcml0ZSBEYXRhCitwYXJhbWV0ZXIgUF9GU01fQ0FNVyAgID0gNCdiMTAwMTsgLy8gQ29tbWFuZCAtPiBBZGRyZXNzIC0+IE1PREUgKyBXcml0ZSBEYXRhCisKK3BhcmFtZXRlciBQX0ZTTV9DRFIgICAgPSA0J2IxMDEwOyAvLyBDT01NQU5EIC0+IERVTU1ZIC0+IFJFQUQKK3BhcmFtZXRlciBQX0ZTTV9DRFcgICAgPSA0J2IxMDExOyAvLyBDT01NQU5EIC0+IERVTU1ZIC0+IFdSSVRFCitwYXJhbWV0ZXIgUF9GU01fQ1IgICAgID0gNCdiMTEwMDsgIC8vIENPTU1BTkQgLT4gUkVBRAorCitwYXJhbWV0ZXIgUF9NT0RFX1NXSVRDSF9JRExFICAgICA9IDInYjAwOworcGFyYW1ldGVyIFBfTU9ERV9TV0lUQ0hfQVRfQUREUiAgPSAyJ2IwMTsKK3BhcmFtZXRlciBQX01PREVfU1dJVENIX0FUX0RBVEEgID0gMidiMTA7CisKK3BhcmFtZXRlciBQX1NJTkdMRSA9IDInYjAwOworcGFyYW1ldGVyIFBfRE9VQkxFID0gMidiMDE7CitwYXJhbWV0ZXIgUF9RVUFEICAgPSAyJ2IxMDsKK3BhcmFtZXRlciBQX1FERFIgICA9IDInYjExOworCisJLy8gRXh0ZXJuYWwgY2xvY2sgaXMgdXNlZCBieSBkZWZhdWx0LiAgTWFrZSB0aGlzIGFydGlmaWNpYWxseSBmYXN0IGZvciB0aGUKKwkvLyBzaW11bGF0aW9uLiAgTm9ybWFsbHkgdGhpcyB3b3VsZCBiZSBhIHNsb3cgY2xvY2sgYW5kIHRoZSBkaWdpdGFsIFBMTAorCS8vIHdvdWxkIGJlIHRoZSBmYXN0IGNsb2NrLgorCisJYWx3YXlzICMxMi41IGNsb2NrIDw9IChjbG9jayA9PT0gMSdiMCk7CisKKwlpbml0aWFsIGJlZ2luCisJCWNsb2NrID0gMDsKKyAgICAgICAgICAgICAgICB3YmRfZXh0X2N5Y19pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICAgICAgICAgICAgICAgIHdiZF9leHRfc3RiX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgICAgICAgICAgICAgd2JkX2V4dF9hZHJfaSA9J2gwOyAgLy8gYWRkcmVzcworICAgICAgICAgICAgICAgIHdiZF9leHRfd2VfaSAgPSdoMDsgIC8vIHdyaXRlCisgICAgICAgICAgICAgICAgd2JkX2V4dF9kYXRfaSA9J2gwOyAgLy8gZGF0YSBvdXRwdXQKKyAgICAgICAgICAgICAgICB3YmRfZXh0X3NlbF9pID0naDA7ICAvLyBieXRlIGVuYWJsZQorCWVuZAorCisJYGlmZGVmIFdGRFVNUAorCSAgIGluaXRpYWwgYmVnaW4KKwkgICAJJGR1bXBmaWxlKCJzaW14LnZjZCIpOworCSAgIAkkZHVtcHZhcnMoNSwgdXNlcl9zcGlfdGIpOworCSAgIGVuZAorICAgICAgIGBlbmRpZgorCisJaW5pdGlhbCBiZWdpbgorCQkkZHVtcG9uOworCisJCSMyMDA7IC8vIFdhaXQgZm9yIHJlc2V0IHJlbW92YWwKKwkgICAgICAgIHJlcGVhdCAoMTApIEAocG9zZWRnZSBjbG9jayk7CisJCSRkaXNwbGF5KCJNb25pdG9yOiBTdGFuZGFsb25lIFVzZXIgUmlzYyBCb290IFRlc3QgU3RhcnRlZCIpOworCisJCS8vIFJlbW92ZSBXYiBSZXNldAorCQl3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDAsJ2gxKTsKKworCSAgICAgICAgcmVwZWF0ICgyKSBAKHBvc2VkZ2UgY2xvY2spOworCQkjMTsKKwkJLy8gUmVtb3ZlIFdCIGFuZCBTUEkgUmVzZXQsIEtlZXAgU0RBUk0gYW5kIENPUkUgdW5kZXIgUmVzZXQKKyAgICAgICAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDAsJ2g1KTsKKworICAgICAgICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwNCwnaDApOyAvLyBDaGFuZ2UgdGhlIEJhbmsgU2VsIDAKKworCisJCXRlc3RfZmFpbCA9IDA7CisJICAgICAgICByZXBlYXQgKDIwMCkgQChwb3NlZGdlIGNsb2NrKTsKKyAgICAgICAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDQsJ2gxMCk7IC8vIENoYW5nZSB0aGUgQmFuayBTZWwgMTAKKwkJLy8gQ1MjMiBTU1BJIEluZGlyZWN0IFJBTSBSRUFEIEFDQ0VTUy0KKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0NUUkwxLHsxNidoMCwxJ2IwLDEnYjAsNCdiMDAwMCxQX01PREVfU1dJVENIX0lETEUsUF9TSU5HTEUsUF9TSU5HTEUsNCdiMDEwMH0pOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQ1RSTDIsezgnaDQsMidiMDAsMidiMTAsUF9GU01fQ0FEUiw4J2gwMCw4J2gwM30pOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQUREUiwzMidoMDAwMDAwMDApOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAzMDIwMTAwKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0FERFIsMzInaDAwMDAwMDA0KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwNzA2MDUwNCk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9BRERSLDMyJ2gwMDAwMDAwOCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMGIwYTA5MDgpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQUREUiwzMidoMDAwMDAwMEMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDBmMGUwZDBjKTsKKworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQUREUiwzMidoMDAwMDAyMDApOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDExMTExMTExKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0FERFIsMzInaDAwMDAwMjA0KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gyMjIyMjIyMik7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9BRERSLDMyJ2gwMDAwMDIwOCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMzMzMzMzMzMpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQUREUiwzMidoMDAwMDAyMEMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDQ0NDQ0NDQ0KTsKKworCQkvLyBDUyMyIFNTUEkgSW5kaWVjdCBXcml0ZSBEQVRBCisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9DVFJMMSx7MTYnaDAsMSdiMCwxJ2IwLDQnYjAwMDAsUF9NT0RFX1NXSVRDSF9JRExFLFBfU0lOR0xFLFBfU0lOR0xFLDQnYjAxMDB9KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0NUUkwyLHs4J2gxMCwyJ2IwMCwyJ2IxMCxQX0ZTTV9DQVcsOCdoMDAsOCdoMDJ9KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0FERFIsMzInaDAwMDAwMDAwKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDExMjIzMyk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoNDQ1NTY2NzcpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDg4OTlBQUJCKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2hDQ0RERUVGRik7CisJCQorCQkvLyBDUyMyIFNTUEkgSW5kaXJlY3QgUkVBRCBEQVRBCisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9DVFJMMSx7MTYnaDAsMSdiMCwxJ2IwLDQnYjAwMDAsUF9NT0RFX1NXSVRDSF9JRExFLFBfU0lOR0xFLFBfU0lOR0xFLDQnYjAxMDB9KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0NUUkwyLHs4J2gxMCwyJ2IwMCwyJ2IxMCxQX0ZTTV9DQURSLDgnaDAwLDgnaDAzfSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9BRERSLDMyJ2gwMDAwMDAwMCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAxMTIyMzMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDQ0NTU2Njc3KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2g4ODk5QUFCQik7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoQ0NEREVFRkYpOworCisKKwkJLy8gQ1MjMiBTd2l0Y2ggdG8gUVNQSSBNb2RlCisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9DVFJMMSx7MTYnaDAsMSdiMCwxJ2IwLDQnYjAwMDAsUF9NT0RFX1NXSVRDSF9JRExFLFBfU0lOR0xFLFBfU0lOR0xFLDQnYjAxMDB9KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0NUUkwyLHs4J2gwLDInYjAwLDInYjAwLFBfRlNNX0MsOCdoMDAsOCdoMzh9KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwKTsKKworCisJCS8vIENTIzIgUVVBRCBJbmRpcmVjdCBXcml0ZSBEQVRBCisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9DVFJMMSx7MTYnaDAsMSdiMCwxJ2IwLDQnYjAwMDAsUF9NT0RFX1NXSVRDSF9JRExFLFBfUVVBRCxQX1FVQUQsNCdiMDEwMH0pOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQ1RSTDIsezgnaDEwLDInYjAwLDInYjEwLFBfRlNNX0NBVyw4J2gwMCw4J2gwMn0pOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQUREUiwzMidoMDAwMDAwMDApOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAxMjM0NTU3KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2g4OUFCQ0RFRik7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMTIzNDU2NzgpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDlBQkNERUYwKTsKKworCisJCS8vIENTIzIgUVVBRCBJbmRpcmVjdCBSRUFEIERBVEEKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0NUUkwxLHsxNidoMCwxJ2IwLDEnYjAsNCdiMDAwMCxQX01PREVfU1dJVENIX0lETEUsUF9RVUFELFBfUVVBRCw0J2IwMTAwfSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9DVFJMMix7OCdoMTAsMidiMDAsMidiMTAsUF9GU01fQ0FEUiw4J2gwMCw4J2gwM30pOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQUREUiwzMidoMDAwMDAwMDApOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAxMjM0NTU3KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2g4OUFCQ0RFRik7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMTIzNDU2NzgpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDlBQkNERUYwKTsKKworCQkvLyBDUyMyIFN3aXRjaCBGcm9tIFFTUEkgdG8gU1NQSSBNb2RlCisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9DVFJMMSx7MTYnaDAsMSdiMCwxJ2IwLDQnYjAwMDAsUF9NT0RFX1NXSVRDSF9JRExFLFBfUVVBRCxQX1FVQUQsNCdiMDEwMH0pOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQ1RSTDIsezgnaDAsMidiMDAsMidiMDAsUF9GU01fQyw4J2gwMCw4J2hGRn0pOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDApOworCQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8gRW5kIG9mIENTIzEgSW5kaXJlY3QgTWVtb3J5IEFjY2VzcyBUZXN0aW5nIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKwkJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCQkkZGlzcGxheSgiICBSZWFkIElkZW50aWZpY2F0aW9uIChSRElEOjB4OUYpICAgICAgICAgICAgIik7CisJCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKyAgICAgICAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDQsJ2gxMCk7IC8vIENoYW5nZSB0aGUgQmFuayBTZWwgMTAKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0NUUkwxLHsxNidoMCwxJ2IwLDEnYjAsNCdiMDAwMCwyJ2IwMCxQX1NJTkdMRSxQX1NJTkdMRSw0J2IwMDAxfSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9DVFJMMix7OCdoNCwyJ2IwMCwyJ2IwMCxQX0ZTTV9DUiw4J2gwMCw4J2g5Rn0pOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMTkwMjAxKTsKKwkJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCQkkZGlzcGxheSgiVGVzdGluZyBEaXJlY3QgU1BJIE1lbW9yeSBSZWFkICAgICAgICAgICAgICAiKTsKKwkJJGRpc3BsYXkoIiBTUEkgTW9kZTogUUREUiAoRHVhbCA0IGJpdCkgICAgICAgICAgICAgICAgIik7CisJCSRkaXNwbGF5KCJQcmVmZXRjaCA6IDFEVywgT1BDT0RFOlJFQUQoMHhFRCkgICAgICAgICAgICIpOworCQkkZGlzcGxheSgiU0VROiBDb21tYW5kIC0+IEFkZHJlc3MgLT4gUmVhZCBEYXRhICAgICAgICAiKTsKKwkJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCQkvLyBRRERSIENvbmZpZworICAgICAgICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwNCwnaDEwKTsgLy8gQ2hhbmdlIHRoZSBCYW5rIFNlbCAxMAorCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0RNRU1fRzBfUkRfQ1RSTCx7UF9GU01fQ0FNRFIsNCdiMDEwMCwyJ2IxMCxQX01PREVfU1dJVENIX0FUX0FERFIsUF9RRERSLFBfU0lOR0xFLDgnaDAwLDgnaEVEfSk7CisgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDA0LCdoMDApOyAvLyBDaGFuZ2UgdGhlIEJhbmsgU2VsIDAwCisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIwMCxyZWFkX2RhdGEsMzInaDAwMDAwMDkzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjA0LHJlYWRfZGF0YSwzMidoMDAwMDAxMTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMDgscmVhZF9kYXRhLDMyJ2gwMDAwMDE5Myk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIwQyxyZWFkX2RhdGEsMzInaDAwMDAwMjEzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjEwLHJlYWRfZGF0YSwzMidoMDAwMDAyOTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMTQscmVhZF9kYXRhLDMyJ2gwMDAwMDMxMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIxOCxyZWFkX2RhdGEsMzInaDAwMDAwMzkzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjFDLHJlYWRfZGF0YSwzMidoMDAwMDA0MTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMDAscmVhZF9kYXRhLDMyJ2gwMDA1QTAyMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMwNCxyZWFkX2RhdGEsMzInaDlERTMwNTkxKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMzA4LHJlYWRfZGF0YSwzMidoMDJCN0ZFRTUpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMEMscmVhZF9kYXRhLDMyJ2g0MzA1MDA0OSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMxMCxyZWFkX2RhdGEsMzInaDAwNjJBMDIzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMzE0LHJlYWRfZGF0YSwzMidoMDA0OTAyQjcpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMTgscmVhZF9kYXRhLDMyJ2gwMzEzMDI5MSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMxQyxyZWFkX2RhdGEsMzInaGEwMjMwNjMwKTsKKwkJJGR1bXBvZmY7CisJCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkJJGRpc3BsYXkoIlRlc3RpbmcgRGlyZWN0IFNQSSBNZW1vcnkgUmVhZCAgICAgICAgICAgICAgIik7CisJCSRkaXNwbGF5KCIgU1BJIE1vZGU6IE5vcm1hbC9TaW5nbGUgQml0ICAgICAgICAgICAgICAgICIpOworCQkkZGlzcGxheSgiUHJlZmV0Y2ggOiAxRFcsIE9QQ09ERTpSRUFEKDB4MykgICAgICAgICAgICAiKTsKKwkJJGRpc3BsYXkoIlNFUTogQ29tbWFuZCAtPiBBZGRyZXNzIC0+IFJlYWQgRGF0YSAgICAgICAgIik7CisJCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKyAgICAgICAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDQsJ2gxMCk7IC8vIENoYW5nZSB0aGUgQmFuayBTZWwgMTAKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9ETUVNX0cwX1JEX0NUUkwse1BfRlNNX0NBUiw0J2IwMDAwLDInYjEwLFBfTU9ERV9TV0lUQ0hfSURMRSxQX1NJTkdMRSxQX1NJTkdMRSw4J2gwMCw4J2gwM30pOworICAgICAgICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwNCwnaDAwKTsgLy8gQ2hhbmdlIHRoZSBCYW5rIFNlbCAwMAorCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMDAscmVhZF9kYXRhLDMyJ2gwMDAwMDA5Myk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIwNCxyZWFkX2RhdGEsMzInaDAwMDAwMTEzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjA4LHJlYWRfZGF0YSwzMidoMDAwMDAxOTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMEMscmVhZF9kYXRhLDMyJ2gwMDAwMDIxMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIxMCxyZWFkX2RhdGEsMzInaDAwMDAwMjkzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjE0LHJlYWRfZGF0YSwzMidoMDAwMDAzMTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMTgscmVhZF9kYXRhLDMyJ2gwMDAwMDM5Myk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIxQyxyZWFkX2RhdGEsMzInaDAwMDAwNDEzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMzAwLHJlYWRfZGF0YSwzMidoMDAwNUEwMjMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMDQscmVhZF9kYXRhLDMyJ2g5REUzMDU5MSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMwOCxyZWFkX2RhdGEsMzInaDAyQjdGRUU1KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMzBDLHJlYWRfZGF0YSwzMidoNDMwNTAwNDkpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMTAscmVhZF9kYXRhLDMyJ2gwMDYyQTAyMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMxNCxyZWFkX2RhdGEsMzInaDAwNDkwMkI3KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMzE4LHJlYWRfZGF0YSwzMidoMDMxMzAyOTEpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMUMscmVhZF9kYXRhLDMyJ2hhMDIzMDYzMCk7CisJCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkJJGRpc3BsYXkoIlRlc3RpbmcgRGlyZWN0IFNQSSBNZW1vcnkgUmVhZCAgICAgICAgICAgICAgIik7CisJCSRkaXNwbGF5KCIgU1BJIE1vZGU6IE5vcm1hbC9TaW5nbGUgQml0ICAgICAgICAgICAgICAgICIpOworCQkkZGlzcGxheSgiUHJlZmV0Y2ggOiAxRFcsIE9QQ09ERTpGQVNUUkVBRCgweEIpICAgICAgICAiKTsKKwkJJGRpc3BsYXkoIlNFUTogQ29tbWFuZCAtPiBBZGRyZXNzIC0+IER1bW15IC0+IFJlYWQgRGF0YSIpOworCQkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDA0LCdoMTApOyAvLyBDaGFuZ2UgdGhlIEJhbmsgU2VsIDEwCisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fRE1FTV9HMF9SRF9DVFJMLHtQX0ZTTV9DQURSLDQnYjAwMDAsMidiMTAsUF9NT0RFX1NXSVRDSF9JRExFLFBfU0lOR0xFLFBfU0lOR0xFLDgnaDAwLDgnaDBCfSk7CisgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDA0LCdoMDApOyAvLyBDaGFuZ2UgdGhlIEJhbmsgU2VsIDAwCisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIwMCxyZWFkX2RhdGEsMzInaDAwMDAwMDkzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjA0LHJlYWRfZGF0YSwzMidoMDAwMDAxMTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMDgscmVhZF9kYXRhLDMyJ2gwMDAwMDE5Myk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIwQyxyZWFkX2RhdGEsMzInaDAwMDAwMjEzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjEwLHJlYWRfZGF0YSwzMidoMDAwMDAyOTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMTQscmVhZF9kYXRhLDMyJ2gwMDAwMDMxMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIxOCxyZWFkX2RhdGEsMzInaDAwMDAwMzkzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjFDLHJlYWRfZGF0YSwzMidoMDAwMDA0MTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMDAscmVhZF9kYXRhLDMyJ2gwMDA1QTAyMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMwNCxyZWFkX2RhdGEsMzInaDlERTMwNTkxKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMzA4LHJlYWRfZGF0YSwzMidoMDJCN0ZFRTUpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMEMscmVhZF9kYXRhLDMyJ2g0MzA1MDA0OSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMxMCxyZWFkX2RhdGEsMzInaDAwNjJBMDIzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMzE0LHJlYWRfZGF0YSwzMidoMDA0OTAyQjcpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMTgscmVhZF9kYXRhLDMyJ2gwMzEzMDI5MSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMxQyxyZWFkX2RhdGEsMzInaGEwMjMwNjMwKTsKKworCQkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisJCSRkaXNwbGF5KCJUZXN0aW5nIERpcmVjdCBTUEkgTWVtb3J5IFJlYWQgICAgICAgICAgICAgICIpOworCQkkZGlzcGxheSgiIFNQSSBNb2RlOiBEdWFsIE1vZGUgICAgICAgICAgICAgICAgICAgICAgICAiKTsKKwkJJGRpc3BsYXkoIlByZWZldGNoIDogMURXLCBPUENPREU6RE9SKDB4M0IpICAgICAgICAiKTsKKwkJJGRpc3BsYXkoIlNFUTogQ29tbWFuZCAtPiBBZGRyZXNzIC0+IER1bW15IC0+IFJlYWQgRGF0YSIpOworCQkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDA0LCdoMTApOyAvLyBDaGFuZ2UgdGhlIEJhbmsgU2VsIDEwCisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fRE1FTV9HMF9SRF9DVFJMLHtQX0ZTTV9DQURSLDQnYjAwMDAsMidiMTAsUF9NT0RFX1NXSVRDSF9BVF9EQVRBLFBfRE9VQkxFLFBfU0lOR0xFLDgnaDAwLDgnaDNCfSk7CisgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDA0LCdoMDApOyAvLyBDaGFuZ2UgdGhlIEJhbmsgU2VsIDAwCisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIwMCxyZWFkX2RhdGEsMzInaDAwMDAwMDkzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjA0LHJlYWRfZGF0YSwzMidoMDAwMDAxMTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMDgscmVhZF9kYXRhLDMyJ2gwMDAwMDE5Myk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIwQyxyZWFkX2RhdGEsMzInaDAwMDAwMjEzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjEwLHJlYWRfZGF0YSwzMidoMDAwMDAyOTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMTQscmVhZF9kYXRhLDMyJ2gwMDAwMDMxMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIxOCxyZWFkX2RhdGEsMzInaDAwMDAwMzkzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjFDLHJlYWRfZGF0YSwzMidoMDAwMDA0MTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMDAscmVhZF9kYXRhLDMyJ2gwMDA1QTAyMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMwNCxyZWFkX2RhdGEsMzInaDlERTMwNTkxKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMzA4LHJlYWRfZGF0YSwzMidoMDJCN0ZFRTUpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMEMscmVhZF9kYXRhLDMyJ2g0MzA1MDA0OSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMxMCxyZWFkX2RhdGEsMzInaDAwNjJBMDIzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMzE0LHJlYWRfZGF0YSwzMidoMDA0OTAyQjcpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMTgscmVhZF9kYXRhLDMyJ2gwMzEzMDI5MSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMxQyxyZWFkX2RhdGEsMzInaGEwMjMwNjMwKTsKKworCQkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisJCSRkaXNwbGF5KCJUZXN0aW5nIERpcmVjdCBTUEkgTWVtb3J5IFJlYWQgd2l0aCBQcmVmZXRjaCIpOworCQkkZGlzcGxheSgiIFNQSSBNb2RlOiBRdWFkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKTsKKwkJJGRpc3BsYXkoIlByZWZldGNoIDogOERXLCBPUENPREU6VVJBRCBSRUFEKDB4RUIpICAgICAgIik7CisJCSRkaXNwbGF5KCJTRVE6IENvbW1hbmQgLT4gQWRkcmVzcyAtPiBEdW1teSAtPiBSZWFkIERhdGEiKTsKKwkJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworICAgICAgICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwNCwnaDEwKTsgLy8gQ2hhbmdlIHRoZSBCYW5rIFNlbCAxMAorCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0RNRU1fRzBfUkRfQ1RSTCx7UF9GU01fQ0FNRFIsNCdiMDAwMSwyJ2IxMCxQX01PREVfU1dJVENIX0FUX0FERFIsUF9RVUFELFBfU0lOR0xFLDgnaDAwLDgnaEVCfSk7CisgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDA0LCdoMDApOyAvLyBDaGFuZ2UgdGhlIEJhbmsgU2VsIDAwCisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIwMCxyZWFkX2RhdGEsMzInaDAwMDAwMDkzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjA0LHJlYWRfZGF0YSwzMidoMDAwMDAxMTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMDgscmVhZF9kYXRhLDMyJ2gwMDAwMDE5Myk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIwQyxyZWFkX2RhdGEsMzInaDAwMDAwMjEzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjEwLHJlYWRfZGF0YSwzMidoMDAwMDAyOTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMTQscmVhZF9kYXRhLDMyJ2gwMDAwMDMxMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIxOCxyZWFkX2RhdGEsMzInaDAwMDAwMzkzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjFDLHJlYWRfZGF0YSwzMidoMDAwMDA0MTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMDAscmVhZF9kYXRhLDMyJ2gwMDA1QTAyMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMwNCxyZWFkX2RhdGEsMzInaDlERTMwNTkxKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMzA4LHJlYWRfZGF0YSwzMidoMDJCN0ZFRTUpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMEMscmVhZF9kYXRhLDMyJ2g0MzA1MDA0OSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMxMCxyZWFkX2RhdGEsMzInaDAwNjJBMDIzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMzE0LHJlYWRfZGF0YSwzMidoMDA0OTAyQjcpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMTgscmVhZF9kYXRhLDMyJ2gwMzEzMDI5MSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMxQyxyZWFkX2RhdGEsMzInaGEwMjMwNjMwKTsKKworCQkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisJCSRkaXNwbGF5KCJUZXN0aW5nIERpcmVjdCBTUEkgTWVtb3J5IFJlYWQgd2l0aCBQcmVmZXRjaDozRFciKTsKKwkJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworICAgICAgICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwNCwnaDEwKTsgLy8gQ2hhbmdlIHRoZSBCYW5rIFNlbCAxMAorCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0RNRU1fRzBfUkRfQ1RSTCx7UF9GU01fQ0FNRFIsNCdiMDAwMSwyJ2IxMCxQX01PREVfU1dJVENIX0FUX0FERFIsUF9RVUFELFBfU0lOR0xFLDgnaDAwLDgnaEVCfSk7CisgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDA0LCdoMDApOyAvLyBDaGFuZ2UgdGhlIEJhbmsgU2VsIDAwCisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIwMCxyZWFkX2RhdGEsMzInaDAwMDAwMDkzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjA0LHJlYWRfZGF0YSwzMidoMDAwMDAxMTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMDgscmVhZF9kYXRhLDMyJ2gwMDAwMDE5Myk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIwQyxyZWFkX2RhdGEsMzInaDAwMDAwMjEzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjEwLHJlYWRfZGF0YSwzMidoMDAwMDAyOTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMTQscmVhZF9kYXRhLDMyJ2gwMDAwMDMxMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIxOCxyZWFkX2RhdGEsMzInaDAwMDAwMzkzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjFDLHJlYWRfZGF0YSwzMidoMDAwMDA0MTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMDAscmVhZF9kYXRhLDMyJ2gwMDA1QTAyMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMwNCxyZWFkX2RhdGEsMzInaDlERTMwNTkxKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMzA4LHJlYWRfZGF0YSwzMidoMDJCN0ZFRTUpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMEMscmVhZF9kYXRhLDMyJ2g0MzA1MDA0OSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMxMCxyZWFkX2RhdGEsMzInaDAwNjJBMDIzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMzE0LHJlYWRfZGF0YSwzMidoMDA0OTAyQjcpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMTgscmVhZF9kYXRhLDMyJ2gwMzEzMDI5MSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMxQyxyZWFkX2RhdGEsMzInaGEwMjMwNjMwKTsKKworCQkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisJCSRkaXNwbGF5KCJUZXN0aW5nIERpcmVjdCBTUEkgTWVtb3J5IFJlYWQgd2l0aCBQcmVmZXRjaDoyRFciKTsKKwkJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworICAgICAgICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwNCwnaDEwKTsgLy8gQ2hhbmdlIHRoZSBCYW5rIFNlbCAxMAorCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0RNRU1fRzBfUkRfQ1RSTCx7UF9GU01fQ0FNRFIsNCdiMDAwMSwyJ2IxMCxQX01PREVfU1dJVENIX0FUX0FERFIsUF9RVUFELFBfU0lOR0xFLDgnaDAwLDgnaEVCfSk7CisgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDA0LCdoMDApOyAvLyBDaGFuZ2UgdGhlIEJhbmsgU2VsIDAwCisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIwMCxyZWFkX2RhdGEsMzInaDAwMDAwMDkzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjA0LHJlYWRfZGF0YSwzMidoMDAwMDAxMTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMDgscmVhZF9kYXRhLDMyJ2gwMDAwMDE5Myk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIwQyxyZWFkX2RhdGEsMzInaDAwMDAwMjEzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjEwLHJlYWRfZGF0YSwzMidoMDAwMDAyOTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMTQscmVhZF9kYXRhLDMyJ2gwMDAwMDMxMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIxOCxyZWFkX2RhdGEsMzInaDAwMDAwMzkzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjFDLHJlYWRfZGF0YSwzMidoMDAwMDA0MTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMDAscmVhZF9kYXRhLDMyJ2gwMDA1QTAyMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMwNCxyZWFkX2RhdGEsMzInaDlERTMwNTkxKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMzA4LHJlYWRfZGF0YSwzMidoMDJCN0ZFRTUpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMEMscmVhZF9kYXRhLDMyJ2g0MzA1MDA0OSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMxMCxyZWFkX2RhdGEsMzInaDAwNjJBMDIzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMzE0LHJlYWRfZGF0YSwzMidoMDA0OTAyQjcpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMTgscmVhZF9kYXRhLDMyJ2gwMzEzMDI5MSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMxQyxyZWFkX2RhdGEsMzInaGEwMjMwNjMwKTsKKworCisJCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkJJGRpc3BsYXkoIlRlc3RpbmcgRGlyZWN0IFNQSSBNZW1vcnkgUmVhZCB3aXRoIFByZWZldGNoOjFEVyIpOworCQkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDA0LCdoMTApOyAvLyBDaGFuZ2UgdGhlIEJhbmsgU2VsIDEwCisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fRE1FTV9HMF9SRF9DVFJMLHtQX0ZTTV9DQU1EUiw0J2IwMDAxLDInYjEwLFBfTU9ERV9TV0lUQ0hfQVRfQUREUixQX1FVQUQsUF9TSU5HTEUsOCdoMDAsOCdoRUJ9KTsKKyAgICAgICAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDQsJ2gwMCk7IC8vIENoYW5nZSB0aGUgQmFuayBTZWwgMDAKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjAwLHJlYWRfZGF0YSwzMidoMDAwMDAwOTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMDQscmVhZF9kYXRhLDMyJ2gwMDAwMDExMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIwOCxyZWFkX2RhdGEsMzInaDAwMDAwMTkzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjBDLHJlYWRfZGF0YSwzMidoMDAwMDAyMTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMTAscmVhZF9kYXRhLDMyJ2gwMDAwMDI5Myk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIxNCxyZWFkX2RhdGEsMzInaDAwMDAwMzEzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjE4LHJlYWRfZGF0YSwzMidoMDAwMDAzOTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMUMscmVhZF9kYXRhLDMyJ2gwMDAwMDQxMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMwMCxyZWFkX2RhdGEsMzInaDAwMDVBMDIzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMzA0LHJlYWRfZGF0YSwzMidoOURFMzA1OTEpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMDgscmVhZF9kYXRhLDMyJ2gwMkI3RkVFNSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMwQyxyZWFkX2RhdGEsMzInaDQzMDUwMDQ5KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMzEwLHJlYWRfZGF0YSwzMidoMDA2MkEwMjMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMTQscmVhZF9kYXRhLDMyJ2gwMDQ5MDJCNyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMxOCxyZWFkX2RhdGEsMzInaDAzMTMwMjkxKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMzFDLHJlYWRfZGF0YSwzMidoYTAyMzA2MzApOworCisJCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkJJGRpc3BsYXkoIlRlc3RpbmcgRGlyZWN0IFNQSSBNZW1vcnkgUmVhZCB3aXRoIFByZWZldGNoOjdEVyIpOworCQkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDA0LCdoMTApOyAvLyBDaGFuZ2UgdGhlIEJhbmsgU2VsIDEwCisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fRE1FTV9HMF9SRF9DVFJMLHtQX0ZTTV9DQU1EUiw0J2IwMDAxLDInYjEwLFBfTU9ERV9TV0lUQ0hfQVRfQUREUixQX1FVQUQsUF9TSU5HTEUsOCdoMDAsOCdoRUJ9KTsKKyAgICAgICAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDQsJ2gwMCk7IC8vIENoYW5nZSB0aGUgQmFuayBTZWwgMDAKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjAwLHJlYWRfZGF0YSwzMidoMDAwMDAwOTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMDQscmVhZF9kYXRhLDMyJ2gwMDAwMDExMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIwOCxyZWFkX2RhdGEsMzInaDAwMDAwMTkzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjBDLHJlYWRfZGF0YSwzMidoMDAwMDAyMTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMTAscmVhZF9kYXRhLDMyJ2gwMDAwMDI5Myk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIxNCxyZWFkX2RhdGEsMzInaDAwMDAwMzEzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjE4LHJlYWRfZGF0YSwzMidoMDAwMDAzOTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMUMscmVhZF9kYXRhLDMyJ2gwMDAwMDQxMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMwMCxyZWFkX2RhdGEsMzInaDAwMDVBMDIzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMzA0LHJlYWRfZGF0YSwzMidoOURFMzA1OTEpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMDgscmVhZF9kYXRhLDMyJ2gwMkI3RkVFNSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMwQyxyZWFkX2RhdGEsMzInaDQzMDUwMDQ5KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMzEwLHJlYWRfZGF0YSwzMidoMDA2MkEwMjMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAzMTQscmVhZF9kYXRhLDMyJ2gwMDQ5MDJCNyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDMxOCxyZWFkX2RhdGEsMzInaDAzMTMwMjkxKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMzFDLHJlYWRfZGF0YSwzMidoYTAyMzA2MzApOworCisJCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkJJGRpc3BsYXkoIiAgVGVzdGluZyBTaW5nbGUgV29yZCBJbmRpcmVjdCBTUEkgTWVtb3J5IFJlYWQiKTsKKwkJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworICAgICAgICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwNCwnaDEwKTsgLy8gQ2hhbmdlIHRoZSBCYW5rIFNlbCAxMAorCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQ1RSTDEsezE2J2gwLDEnYjAsMSdiMCw0J2IwMDAxLFBfTU9ERV9TV0lUQ0hfQVRfQUREUixQX1FVQUQsUF9TSU5HTEUsNCdiMDAwMX0pOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQ1RSTDIsezgnaDQsMidiMDAsMidiMTAsUF9GU01fQ0FNRFIsOCdoMDAsOCdoRUJ9KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0FERFIsMzInaDAwMDAwMjAwKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAwMDA5Myk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9BRERSLDMyJ2gwMDAwMDIwNCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMDAxMTMpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQUREUiwzMidoMDAwMDAyMDgpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDAwMTkzKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0FERFIsMzInaDAwMDAwMjBDKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAwMDIxMyk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9BRERSLDMyJ2gwMDAwMDIxMCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMDAyOTMpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQUREUiwzMidoMDAwMDAyMTQpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDAwMzEzKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0FERFIsMzInaDAwMDAwMjE4KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAwMDM5Myk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9BRERSLDMyJ2gwMDAwMDIxQyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMDA0MTMpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQUREUiwzMidoMDAwMDAzMDApOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDVBMDIzKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0FERFIsMzInaDAwMDAwMzA0KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2g5REUzMDU5MSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9BRERSLDMyJ2gwMDAwMDMwOCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDJCN0ZFRTUpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQUREUiwzMidoMDAwMDAzMEMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDQzMDUwMDQ5KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0FERFIsMzInaDAwMDAwMzEwKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDYyQTAyMyk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9BRERSLDMyJ2gwMDAwMDMxNCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDA0OTAyQjcpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQUREUiwzMidoMDAwMDAzMTgpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAzMTMwMjkxKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0FERFIsMzInaDAwMDAwMzFDKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2hhMDIzMDYzMCk7CisJCXJlcGVhdCAoMTAwKSBAKHBvc2VkZ2UgY2xvY2spOworCQkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisJCSRkaXNwbGF5KCIgIFRlc3RpbmcgVHdvIFdvcmQgSW5kaXJlY3QgU1BJIE1lbW9yeSBSZWFkIik7CisJCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKyAgICAgICAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDQsJ2gxMCk7IC8vIENoYW5nZSB0aGUgQmFuayBTZWwgMTAKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0NUUkwxLHsxNidoMCwxJ2IwLDEnYjAsNCdiMDAwMSxQX01PREVfU1dJVENIX0FUX0FERFIsUF9RVUFELFBfU0lOR0xFLDQnYjAwMDF9KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0NUUkwyLHs4J2g4LDInYjAwLDInYjEwLFBfRlNNX0NBTURSLDgnaDAwLDgnaEVCfSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9BRERSLDMyJ2gwMDAwMDIwMCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMDAwOTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDAwMTEzKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0FERFIsMzInaDAwMDAwMjA4KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAwMDE5Myk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMDAyMTMpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQUREUiwzMidoMDAwMDAyMTApOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDAwMjkzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAwMDMxMyk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9BRERSLDMyJ2gwMDAwMDIxOCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMDAzOTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDAwNDEzKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0FERFIsMzInaDAwMDAwMzAwKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDA1QTAyMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoOURFMzA1OTEpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQUREUiwzMidoMDAwMDAzMDgpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAyQjdGRUU1KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2g0MzA1MDA0OSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9BRERSLDMyJ2gwMDAwMDMxMCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDA2MkEwMjMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwNDkwMkI3KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0FERFIsMzInaDAwMDAwMzE4KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMzEzMDI5MSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoYTAyMzA2MzApOworCQlyZXBlYXQgKDEwMCkgQChwb3NlZGdlIGNsb2NrKTsKKwkJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCQkkZGlzcGxheSgiICBUZXN0aW5nIFRocmVlIFdvcmQgSW5kaXJlY3QgU1BJIE1lbW9yeSBSZWFkIik7CisJCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKyAgICAgICAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDQsJ2gxMCk7IC8vIENoYW5nZSB0aGUgQmFuayBTZWwgMTAKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0NUUkwxLHsxNidoMCwxJ2IwLDEnYjAsNCdiMDAwMSxQX01PREVfU1dJVENIX0FUX0FERFIsUF9RVUFELFBfU0lOR0xFLDQnYjAwMDF9KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0NUUkwyLHs4J2hDLDInYjAwLDInYjEwLFBfRlNNX0NBTURSLDgnaDAwLDgnaEVCfSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9BRERSLDMyJ2gwMDAwMDIwMCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMDAwOTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDAwMTEzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAwMDE5Myk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9BRERSLDMyJ2gwMDAwMDIwQyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMDAyMTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDAwMjkzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAwMDMxMyk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9BRERSLDMyJ2gwMDAwMDMwMCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwNUEwMjMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDlERTMwNTkxKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMkI3RkVFNSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9BRERSLDMyJ2gwMDAwMDMwQyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoNDMwNTAwNDkpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwNjJBMDIzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDQ5MDJCNyk7CisJCXJlcGVhdCAoMTAwKSBAKHBvc2VkZ2UgY2xvY2spOworCQkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisJCSRkaXNwbGF5KCIgIFRlc3RpbmcgRm91ciBXb3JkIEluZGlyZWN0IFNQSSBNZW1vcnkgUmVhZCIpOworCQkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDA0LCdoMTApOyAvLyBDaGFuZ2UgdGhlIEJhbmsgU2VsIDEwCisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9DVFJMMSx7MTYnaDAsMSdiMCwxJ2IwLDQnYjAwMDEsUF9NT0RFX1NXSVRDSF9BVF9BRERSLFBfUVVBRCxQX1NJTkdMRSw0J2IwMDAxfSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9DVFJMMix7OCdoMTAsMidiMDAsMidiMTAsUF9GU01fQ0FNRFIsOCdoMDAsOCdoRUJ9KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0FERFIsMzInaDAwMDAwMjAwKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAwMDA5Myk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMDAxMTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDAwMTkzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAwMDIxMyk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9BRERSLDMyJ2gwMDAwMDIxMCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMDAyOTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDAwMzEzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAwMDM5Myk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMDA0MTMpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQUREUiwzMidoMDAwMDAzMDApOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDVBMDIzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2g5REUzMDU5MSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDJCN0ZFRTUpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDQzMDUwMDQ5KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0FERFIsMzInaDAwMDAwMzEwKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDYyQTAyMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDA0OTAyQjcpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAzMTMwMjkxKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2hhMDIzMDYzMCk7CisJCXJlcGVhdCAoMTAwKSBAKHBvc2VkZ2UgY2xvY2spOworCQkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisJCSRkaXNwbGF5KCIgIFRlc3RpbmcgRml2ZSBXb3JkIEluZGlyZWN0IFNQSSBNZW1vcnkgUmVhZCIpOworCQkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDA0LCdoMTApOyAvLyBDaGFuZ2UgdGhlIEJhbmsgU2VsIDEwCisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9DVFJMMSx7MTYnaDAsMSdiMCwxJ2IwLDQnYjAwMDEsUF9NT0RFX1NXSVRDSF9BVF9BRERSLFBfUVVBRCxQX1NJTkdMRSw0J2IwMDAxfSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9DVFJMMix7OCdoMTQsMidiMDAsMidiMTAsUF9GU01fQ0FNRFIsOCdoMDAsOCdoRUJ9KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0FERFIsMzInaDAwMDAwMjAwKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAwMDA5Myk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMDAxMTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDAwMTkzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAwMDIxMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMDAyOTMpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQUREUiwzMidoMDAwMDAzMDApOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDVBMDIzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2g5REUzMDU5MSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDJCN0ZFRTUpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDQzMDUwMDQ5KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDYyQTAyMyk7CisJCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkJJGRpc3BsYXkoIiAgVGVzdGluZyBFaWdodCBXb3JkIEluZGlyZWN0IFNQSSBNZW1vcnkgUmVhZCIpOworCQkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDA0LCdoMTApOyAvLyBDaGFuZ2UgdGhlIEJhbmsgU2VsIDEwCisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9DVFJMMSx7MTYnaDAsMSdiMCwxJ2IwLDQnYjAwMDEsUF9NT0RFX1NXSVRDSF9BVF9BRERSLFBfUVVBRCxQX1NJTkdMRSw0J2IwMDAxfSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9DVFJMMix7OCdoMjAsMidiMDAsMidiMTAsUF9GU01fQ0FNRFIsOCdoMDAsOCdoRUJ9KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0FERFIsMzInaDAwMDAwMjAwKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAwMDA5Myk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMDAxMTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDAwMTkzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAwMDIxMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMDAyOTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDAwMzEzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAwMDM5Myk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMDA0MTMpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQUREUiwzMidoMDAwMDAzMDApOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDVBMDIzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2g5REUzMDU5MSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDJCN0ZFRTUpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDQzMDUwMDQ5KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDYyQTAyMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDA0OTAyQjcpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAzMTMwMjkxKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2hhMDIzMDYzMCk7CisKKwkJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCQkkZGlzcGxheSgiICBTZWN0b3IgRXJhc2UgQ29tbWFuZCAgICAgICAgICAgICIpOworCQkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDA0LCdoMTApOyAvLyBDaGFuZ2UgdGhlIEJhbmsgU2VsIDEwCisJCS8vIFdFTiBDT01NQU5ECisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9DVFJMMSx7MTYnaDAsMSdiMCwxJ2IwLDQnYjAwMDAsUF9NT0RFX1NXSVRDSF9JRExFLFBfU0lOR0xFLFBfU0lOR0xFLDQnYjAwMDF9KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0NUUkwyLHs4J2gwLDInYjAwLDInYjAwLFBfRlNNX0MsOCdoMDAsOCdoMDZ9KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwKTsKKyAgICAgICAgICAgICAgICAvLyBTZWN0b3IgRXJhc2UKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0NUUkwxLHsxNidoMCwxJ2IwLDEnYjAsNCdiMDAwMCxQX01PREVfU1dJVENIX0lETEUsUF9TSU5HTEUsUF9TSU5HTEUsNCdiMDAwMX0pOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQ1RSTDIsezgnaDAsMidiMDAsMidiMTAsUF9GU01fQ0EsOCdoMDAsOCdoRDh9KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0FERFIsMzInaDAwMDAwMDAwKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwKTsKKworCQkvLyBSRFNSCisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9DVFJMMSx7MTYnaDAsMSdiMCwxJ2IwLDQnYjAwMDAsUF9NT0RFX1NXSVRDSF9JRExFLFBfU0lOR0xFLFBfU0lOR0xFLDQnYjAwMDF9KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0NUUkwyLHs4J2g0LDInYjAwLDInYjAwLFBfRlNNX0NSLDgnaDAwLDgnaDA1fSk7CisJCXJlYWRfZGF0YSA9IDMyJ2hGRkZGX0ZGRkY7CisJCXdoaWxlIChyZWFkX2RhdGFbMTowXSA9PSAyJ2IxMSkgYmVnaW4KKwkJICAgIHdiX3VzZXJfY29yZV9yZWFkKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSk7CisJCSAgICByZXBlYXQgKDEwKSBAKHBvc2VkZ2UgY2xvY2spOworCQllbmQKKworCQkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisJCSRkaXNwbGF5KCIgIFBhZ2UgV3JpdGUgQ29tbWFuZCBBZGRyZXNzOiAweDAwICAgICAgICAgICIpOworCQkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisJCS8vIFdFTiBDT01NQU5ECisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9DVFJMMSx7MTYnaDAsMSdiMCwxJ2IwLDQnYjAwMDAsUF9NT0RFX1NXSVRDSF9JRExFLFBfU0lOR0xFLFBfU0lOR0xFLDQnYjAwMDF9KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0NUUkwyLHs4J2gwLDInYjAwLDInYjAwLFBfRlNNX0MsOCdoMDAsOCdoMDZ9KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwKTsKKwkJIC8vIFBhZ2UgUHJvZ3JhbWluZworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQ1RSTDEsezE2J2gwLDEnYjAsMSdiMCw0J2IwMDAwLFBfTU9ERV9TV0lUQ0hfSURMRSxQX1NJTkdMRSxQX1NJTkdMRSw0J2IwMDAxfSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9DVFJMMix7OCdoRjAsMidiMDAsMidiMTAsUF9GU01fQ0FXLDgnaDAwLDgnaDAyfSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9BRERSLDMyJ2gwMDAwMDAwMCk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMTAwMDApOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDEwMDAxKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAxMDAwMik7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMTAwMDMpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDEwMDA0KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAxMDAwNSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMTAwMDYpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDEwMDA3KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAxMDAwOCk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMTAwMDkpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDEwMDEwKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAxMDAxMSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMTAwMTIpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDEwMDEzKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAxMDAxNCk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMTAwMTUpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDEwMDE2KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAxMDAxNyk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMTAwMTgpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDEwMDE5KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAxMDAyMCk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMTAwMjEpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDEwMDIyKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAxMDAyMyk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMTAwMjQpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDEwMDI1KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAxMDAyNik7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMTAwMjcpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDEwMDI4KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAxMDAyOSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMTAwMzApOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDEwMDMxKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAxMDAzMik7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMTAwMzMpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDEwMDM0KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAxMDAzNSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMTAwMzYpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDEwMDM3KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAxMDAzOCk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMTAwMzkpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDEwMDQwKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAxMDA0MSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMTAwNDIpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDEwMDQzKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAxMDA0NCk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMTAwNDUpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDEwMDQ2KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAxMDA0Nyk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMTAwNDgpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDEwMDQ5KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAxMDA1MCk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMTAwNTEpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDEwMDUyKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAxMDA1Myk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMTAwNTQpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDEwMDU1KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAxMDA1Nik7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMTAwNTcpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDEwMDU4KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAxMDA1OSk7CisKKwkJLy8gUkRTUgorCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQ1RSTDEsezE2J2gwLDEnYjAsMSdiMCw0J2IwMDAwLFBfTU9ERV9TV0lUQ0hfSURMRSxQX1NJTkdMRSxQX1NJTkdMRSw0J2IwMDAxfSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9DVFJMMix7OCdoNCwyJ2IwMCwyJ2IwMCxQX0ZTTV9DUiw4J2gwMCw4J2gwNX0pOworCQlyZWFkX2RhdGEgPSAzMidoRkZGRl9GRkZGOworCQl3aGlsZSAocmVhZF9kYXRhWzE6MF0gPT0gMidiMTEpIGJlZ2luCisJCSAgICB3Yl91c2VyX2NvcmVfcmVhZChgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEpOworCQkgICAgcmVwZWF0ICgxMCkgQChwb3NlZGdlIGNsb2NrKTsKKwkJIGVuZAorCisJCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkJJGRpc3BsYXkoIiAgUGFnZSBSZWFkIHRocm91Z2ggRGlyZWN0IEFjY2VzcyAgICAgICAgICAgICIpOworCQkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisgICAgICAgICAgICAgICAgd2JfdXNlcl9jb3JlX3dyaXRlKCdoMzA4MF8wMDA0LCdoMDApOyAvLyBDaGFuZ2UgdGhlIEJhbmsgU2VsIDAwCisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDAwMCxyZWFkX2RhdGEsMzInaDAwMDEwMDAwKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMDA0LHJlYWRfZGF0YSwzMidoMDAwMTAwMDEpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAwMDgscmVhZF9kYXRhLDMyJ2gwMDAxMDAwMik7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDAwQyxyZWFkX2RhdGEsMzInaDAwMDEwMDAzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMDEwLHJlYWRfZGF0YSwzMidoMDAwMTAwMDQpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAwMTQscmVhZF9kYXRhLDMyJ2gwMDAxMDAwNSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDAxOCxyZWFkX2RhdGEsMzInaDAwMDEwMDA2KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMDFDLHJlYWRfZGF0YSwzMidoMDAwMTAwMDcpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAwMjAscmVhZF9kYXRhLDMyJ2gwMDAxMDAwOCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDAyNCxyZWFkX2RhdGEsMzInaDAwMDEwMDA5KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMDI4LHJlYWRfZGF0YSwzMidoMDAwMTAwMTApOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAwMkMscmVhZF9kYXRhLDMyJ2gwMDAxMDAxMSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDAzMCxyZWFkX2RhdGEsMzInaDAwMDEwMDEyKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMDM0LHJlYWRfZGF0YSwzMidoMDAwMTAwMTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAwMzgscmVhZF9kYXRhLDMyJ2gwMDAxMDAxNCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDAzQyxyZWFkX2RhdGEsMzInaDAwMDEwMDE1KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMDQwLHJlYWRfZGF0YSwzMidoMDAwMTAwMTYpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAwNDQscmVhZF9kYXRhLDMyJ2gwMDAxMDAxNyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDA0OCxyZWFkX2RhdGEsMzInaDAwMDEwMDE4KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMDRDLHJlYWRfZGF0YSwzMidoMDAwMTAwMTkpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAwNTAscmVhZF9kYXRhLDMyJ2gwMDAxMDAyMCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDA1NCxyZWFkX2RhdGEsMzInaDAwMDEwMDIxKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMDU4LHJlYWRfZGF0YSwzMidoMDAwMTAwMjIpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAwNUMscmVhZF9kYXRhLDMyJ2gwMDAxMDAyMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDA2MCxyZWFkX2RhdGEsMzInaDAwMDEwMDI0KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMDY0LHJlYWRfZGF0YSwzMidoMDAwMTAwMjUpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAwNjgscmVhZF9kYXRhLDMyJ2gwMDAxMDAyNik7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDA2QyxyZWFkX2RhdGEsMzInaDAwMDEwMDI3KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMDcwLHJlYWRfZGF0YSwzMidoMDAwMTAwMjgpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAwNzQscmVhZF9kYXRhLDMyJ2gwMDAxMDAyOSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDA3OCxyZWFkX2RhdGEsMzInaDAwMDEwMDMwKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMDdDLHJlYWRfZGF0YSwzMidoMDAwMTAwMzEpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAwODAscmVhZF9kYXRhLDMyJ2gwMDAxMDAzMik7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDA4NCxyZWFkX2RhdGEsMzInaDAwMDEwMDMzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMDg4LHJlYWRfZGF0YSwzMidoMDAwMTAwMzQpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAwOEMscmVhZF9kYXRhLDMyJ2gwMDAxMDAzNSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDA5MCxyZWFkX2RhdGEsMzInaDAwMDEwMDM2KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMDk0LHJlYWRfZGF0YSwzMidoMDAwMTAwMzcpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAwOTgscmVhZF9kYXRhLDMyJ2gwMDAxMDAzOCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDA5QyxyZWFkX2RhdGEsMzInaDAwMDEwMDM5KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMEEwLHJlYWRfZGF0YSwzMidoMDAwMTAwNDApOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAwQTQscmVhZF9kYXRhLDMyJ2gwMDAxMDA0MSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDBBOCxyZWFkX2RhdGEsMzInaDAwMDEwMDQyKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMEFDLHJlYWRfZGF0YSwzMidoMDAwMTAwNDMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAwQjAscmVhZF9kYXRhLDMyJ2gwMDAxMDA0NCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDBCNCxyZWFkX2RhdGEsMzInaDAwMDEwMDQ1KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMEI4LHJlYWRfZGF0YSwzMidoMDAwMTAwNDYpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAwQkMscmVhZF9kYXRhLDMyJ2gwMDAxMDA0Nyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDBDMCxyZWFkX2RhdGEsMzInaDAwMDEwMDQ4KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMEM0LHJlYWRfZGF0YSwzMidoMDAwMTAwNDkpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAwQzgscmVhZF9kYXRhLDMyJ2gwMDAxMDA1MCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDBDQyxyZWFkX2RhdGEsMzInaDAwMDEwMDUxKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMEQwLHJlYWRfZGF0YSwzMidoMDAwMTAwNTIpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAwRDQscmVhZF9kYXRhLDMyJ2gwMDAxMDA1Myk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDBEOCxyZWFkX2RhdGEsMzInaDAwMDEwMDU0KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMERDLHJlYWRfZGF0YSwzMidoMDAwMTAwNTUpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAwRTAscmVhZF9kYXRhLDMyJ2gwMDAxMDA1Nik7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDBFNCxyZWFkX2RhdGEsMzInaDAwMDEwMDU3KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMEU4LHJlYWRfZGF0YSwzMidoMDAwMTAwNTgpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAwRUMscmVhZF9kYXRhLDMyJ2gwMDAxMDA1OSk7CisKKwkJcmVwZWF0ICgxMDApIEAocG9zZWRnZSBjbG9jayk7CisJCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkJJGRpc3BsYXkoIiAgUGFnZSBSZWFkIHRocm91Z2ggSW5kaXJlY3QgQWNjZXNzICAgICAgICAgICAiKTsKKwkJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworICAgICAgICAgICAgICAgIHdiX3VzZXJfY29yZV93cml0ZSgnaDMwODBfMDAwNCwnaDEwKTsgLy8gQ2hhbmdlIHRoZSBCYW5rIFNlbCAxMAorCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQ1RSTDEsezE2J2gwLDEnYjAsMSdiMCw0J2IwMDAxLFBfTU9ERV9TV0lUQ0hfQVRfQUREUixQX1FVQUQsUF9TSU5HTEUsNCdiMDAwMX0pOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQ1RSTDIsezgnaEYwLDInYjAwLDInYjEwLFBfRlNNX0NBTURSLDgnaDAwLDgnaEVCfSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9BRERSLDMyJ2gwMDAwMDAwMCk7CisKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAxMDAwMCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMTAwMDEpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDEwMDAyKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAxMDAwMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMTAwMDQpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDEwMDA1KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAxMDAwNik7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMTAwMDcpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDEwMDA4KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAxMDAwOSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMTAwMTApOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDEwMDExKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAxMDAxMik7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMTAwMTMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDEwMDE0KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAxMDAxNSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMTAwMTYpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDEwMDE3KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAxMDAxOCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMTAwMTkpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDEwMDIwKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAxMDAyMSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMTAwMjIpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDEwMDIzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAxMDAyNCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMTAwMjUpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDEwMDI2KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAxMDAyNyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMTAwMjgpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDEwMDI5KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAxMDAzMCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMTAwMzEpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDEwMDMyKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAxMDAzMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMTAwMzQpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDEwMDM1KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAxMDAzNik7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMTAwMzcpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDEwMDM4KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAxMDAzOSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMTAwNDApOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDEwMDQxKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAxMDA0Mik7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMTAwNDMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDEwMDQ0KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAxMDA0NSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMTAwNDYpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDEwMDQ3KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAxMDA0OCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMTAwNDkpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDEwMDUwKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAxMDA1MSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMTAwNTIpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDEwMDUzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAxMDA1NCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMTAwNTUpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDEwMDU2KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAxMDA1Nyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMTAwNTgpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDEwMDU5KTsKKworCQlyZXBlYXQgKDEwMCkgQChwb3NlZGdlIGNsb2NrKTsKKwkJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCQkkZGlzcGxheSgiICBQYWdlIFdyaXRlIENvbW1hbmQgQWRkcmVzczogMHgyMDAgICAgICAgICAgIik7CisJCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKyAgICAgICAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDQsJ2gxMCk7IC8vIENoYW5nZSB0aGUgQmFuayBTZWwgMTAKKwkJLy8gV0VOIENPTU1BTkQKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0NUUkwxLHsxNidoMCwxJ2IwLDEnYjAsNCdiMDAwMCxQX01PREVfU1dJVENIX0lETEUsUF9TSU5HTEUsUF9TSU5HTEUsNCdiMDAwMX0pOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQ1RSTDIsezgnaDAsMidiMDAsMidiMDAsUF9GU01fQyw4J2gwMCw4J2gwNn0pOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDApOworCQkgLy8gUGFnZSBQcm9ncmFtaW5nCisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9DVFJMMSx7MTYnaDAsMSdiMCwxJ2IwLDQnYjAwMDAsUF9NT0RFX1NXSVRDSF9JRExFLFBfU0lOR0xFLFBfU0lOR0xFLDQnYjAwMDF9KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0NUUkwyLHs4J2hGMCwyJ2IwMCwyJ2IxMCxQX0ZTTV9DQVcsOCdoMDAsOCdoMDJ9KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0FERFIsMzInaDAwMDAwMjAwKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAyMDAwMCk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMjAwMDEpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDIwMDAyKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAyMDAwMyk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMjAwMDQpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDIwMDA1KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAyMDAwNik7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMjAwMDcpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDIwMDA4KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAyMDAwOSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMjAwMTApOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDIwMDExKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAyMDAxMik7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMjAwMTMpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDIwMDE0KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAyMDAxNSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMjAwMTYpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDIwMDE3KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAyMDAxOCk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMjAwMTkpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDIwMDIwKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAyMDAyMSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMjAwMjIpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDIwMDIzKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAyMDAyNCk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMjAwMjUpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDIwMDI2KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAyMDAyNyk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMjAwMjgpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDIwMDI5KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAyMDAzMCk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMjAwMzEpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDIwMDMyKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAyMDAzMyk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMjAwMzQpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDIwMDM1KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAyMDAzNik7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMjAwMzcpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDIwMDM4KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAyMDAzOSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMjAwNDApOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDIwMDQxKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAyMDA0Mik7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMjAwNDMpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDIwMDQ0KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAyMDA0NSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMjAwNDYpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDIwMDQ3KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAyMDA0OCk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMjAwNDkpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDIwMDUwKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAyMDA1MSk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMjAwNTIpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDIwMDUzKTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAyMDA1NCk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMjAwNTUpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDIwMDU2KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX1dEQVRBLDMyJ2gwMDAyMDA1Nyk7CisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9XREFUQSwzMidoMDAwMjAwNTgpOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fV0RBVEEsMzInaDAwMDIwMDU5KTsKKworCQkvLyBSRFNSCisJCXdiX3VzZXJfY29yZV93cml0ZShgUVNQSU1fSU1FTV9DVFJMMSx7MTYnaDAsMSdiMCwxJ2IwLDQnYjAwMDAsUF9NT0RFX1NXSVRDSF9JRExFLFBfU0lOR0xFLFBfU0lOR0xFLDQnYjAwMDF9KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0NUUkwyLHs4J2g0LDInYjAwLDInYjAwLFBfRlNNX0NSLDgnaDAwLDgnaDA1fSk7CisJCXJlYWRfZGF0YSA9IDMyJ2hGRkZGX0ZGRkY7CisJCXdoaWxlIChyZWFkX2RhdGFbMTowXSA9PSAyJ2IxMSkgYmVnaW4KKwkJICAgIHdiX3VzZXJfY29yZV9yZWFkKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSk7CisJCSAgICByZXBlYXQgKDEwKSBAKHBvc2VkZ2UgY2xvY2spOworCQkgZW5kCisKKwkJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCQkkZGlzcGxheSgiICBQYWdlIFJlYWQgdGhyb3VnaCBEaXJlY3QgQWNjZXNzICAgICAgICAgICAgIik7CisJCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKyAgICAgICAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDQsJ2gwMCk7IC8vIENoYW5nZSB0aGUgQmFuayBTZWwgMDAKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjAwLHJlYWRfZGF0YSwzMidoMDAwMjAwMDApOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMDQscmVhZF9kYXRhLDMyJ2gwMDAyMDAwMSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIwOCxyZWFkX2RhdGEsMzInaDAwMDIwMDAyKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjBDLHJlYWRfZGF0YSwzMidoMDAwMjAwMDMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMTAscmVhZF9kYXRhLDMyJ2gwMDAyMDAwNCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIxNCxyZWFkX2RhdGEsMzInaDAwMDIwMDA1KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjE4LHJlYWRfZGF0YSwzMidoMDAwMjAwMDYpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMUMscmVhZF9kYXRhLDMyJ2gwMDAyMDAwNyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIyMCxyZWFkX2RhdGEsMzInaDAwMDIwMDA4KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjI0LHJlYWRfZGF0YSwzMidoMDAwMjAwMDkpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMjgscmVhZF9kYXRhLDMyJ2gwMDAyMDAxMCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIyQyxyZWFkX2RhdGEsMzInaDAwMDIwMDExKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjMwLHJlYWRfZGF0YSwzMidoMDAwMjAwMTIpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyMzQscmVhZF9kYXRhLDMyJ2gwMDAyMDAxMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDIzOCxyZWFkX2RhdGEsMzInaDAwMDIwMDE0KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjNDLHJlYWRfZGF0YSwzMidoMDAwMjAwMTUpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyNDAscmVhZF9kYXRhLDMyJ2gwMDAyMDAxNik7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDI0NCxyZWFkX2RhdGEsMzInaDAwMDIwMDE3KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjQ4LHJlYWRfZGF0YSwzMidoMDAwMjAwMTgpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyNEMscmVhZF9kYXRhLDMyJ2gwMDAyMDAxOSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDI1MCxyZWFkX2RhdGEsMzInaDAwMDIwMDIwKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjU0LHJlYWRfZGF0YSwzMidoMDAwMjAwMjEpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyNTgscmVhZF9kYXRhLDMyJ2gwMDAyMDAyMik7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDI1QyxyZWFkX2RhdGEsMzInaDAwMDIwMDIzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjYwLHJlYWRfZGF0YSwzMidoMDAwMjAwMjQpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyNjQscmVhZF9kYXRhLDMyJ2gwMDAyMDAyNSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDI2OCxyZWFkX2RhdGEsMzInaDAwMDIwMDI2KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjZDLHJlYWRfZGF0YSwzMidoMDAwMjAwMjcpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyNzAscmVhZF9kYXRhLDMyJ2gwMDAyMDAyOCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDI3NCxyZWFkX2RhdGEsMzInaDAwMDIwMDI5KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjc4LHJlYWRfZGF0YSwzMidoMDAwMjAwMzApOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyN0MscmVhZF9kYXRhLDMyJ2gwMDAyMDAzMSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDI4MCxyZWFkX2RhdGEsMzInaDAwMDIwMDMyKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjg0LHJlYWRfZGF0YSwzMidoMDAwMjAwMzMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyODgscmVhZF9kYXRhLDMyJ2gwMDAyMDAzNCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDI4QyxyZWFkX2RhdGEsMzInaDAwMDIwMDM1KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjkwLHJlYWRfZGF0YSwzMidoMDAwMjAwMzYpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyOTQscmVhZF9kYXRhLDMyJ2gwMDAyMDAzNyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDI5OCxyZWFkX2RhdGEsMzInaDAwMDIwMDM4KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMjlDLHJlYWRfZGF0YSwzMidoMDAwMjAwMzkpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyQTAscmVhZF9kYXRhLDMyJ2gwMDAyMDA0MCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDJBNCxyZWFkX2RhdGEsMzInaDAwMDIwMDQxKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMkE4LHJlYWRfZGF0YSwzMidoMDAwMjAwNDIpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyQUMscmVhZF9kYXRhLDMyJ2gwMDAyMDA0Myk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDJCMCxyZWFkX2RhdGEsMzInaDAwMDIwMDQ0KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMkI0LHJlYWRfZGF0YSwzMidoMDAwMjAwNDUpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyQjgscmVhZF9kYXRhLDMyJ2gwMDAyMDA0Nik7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDJCQyxyZWFkX2RhdGEsMzInaDAwMDIwMDQ3KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMkMwLHJlYWRfZGF0YSwzMidoMDAwMjAwNDgpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyQzQscmVhZF9kYXRhLDMyJ2gwMDAyMDA0OSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDJDOCxyZWFkX2RhdGEsMzInaDAwMDIwMDUwKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMkNDLHJlYWRfZGF0YSwzMidoMDAwMjAwNTEpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyRDAscmVhZF9kYXRhLDMyJ2gwMDAyMDA1Mik7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDJENCxyZWFkX2RhdGEsMzInaDAwMDIwMDUzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMkQ4LHJlYWRfZGF0YSwzMidoMDAwMjAwNTQpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyREMscmVhZF9kYXRhLDMyJ2gwMDAyMDA1NSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDJFMCxyZWFkX2RhdGEsMzInaDAwMDIwMDU2KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soMzInaDAwMDAwMkU0LHJlYWRfZGF0YSwzMidoMDAwMjAwNTcpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjaygzMidoMDAwMDAyRTgscmVhZF9kYXRhLDMyJ2gwMDAyMDA1OCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKDMyJ2gwMDAwMDJFQyxyZWFkX2RhdGEsMzInaDAwMDIwMDU5KTsKKworCQlyZXBlYXQgKDEwKSBAKHBvc2VkZ2UgY2xvY2spOworCQkkZGlzcGxheSgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisJCSRkaXNwbGF5KCIgIFBhZ2UgUmVhZCB0aHJvdWdoIEluZGlyZWN0IEFjY2VzcyAgICAgICAgICAgIik7CisJCSRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKyAgICAgICAgICAgICAgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDQsJ2gxMCk7IC8vIENoYW5nZSB0aGUgQmFuayBTZWwgMTAKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0NUUkwxLHsxNidoMCwxJ2IwLDEnYjAsNCdiMDAwMSxQX01PREVfU1dJVENIX0FUX0FERFIsUF9RVUFELFBfU0lOR0xFLDQnYjAwMDF9KTsKKwkJd2JfdXNlcl9jb3JlX3dyaXRlKGBRU1BJTV9JTUVNX0NUUkwyLHs4J2hGMCwyJ2IwMCwyJ2IxMCxQX0ZTTV9DQU1EUiw4J2gwMCw4J2hFQn0pOworCQl3Yl91c2VyX2NvcmVfd3JpdGUoYFFTUElNX0lNRU1fQUREUiwzMidoMDAwMDAyMDApOworCisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMjAwMDApOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDIwMDAxKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAyMDAwMik7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMjAwMDMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDIwMDA0KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAyMDAwNSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMjAwMDYpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDIwMDA3KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAyMDAwOCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMjAwMDkpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDIwMDEwKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAyMDAxMSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMjAwMTIpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDIwMDEzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAyMDAxNCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMjAwMTUpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDIwMDE2KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAyMDAxNyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMjAwMTgpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDIwMDE5KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAyMDAyMCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMjAwMjEpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDIwMDIyKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAyMDAyMyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMjAwMjQpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDIwMDI1KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAyMDAyNik7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMjAwMjcpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDIwMDI4KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAyMDAyOSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMjAwMzApOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDIwMDMxKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAyMDAzMik7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMjAwMzMpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDIwMDM0KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAyMDAzNSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMjAwMzYpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDIwMDM3KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAyMDAzOCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMjAwMzkpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDIwMDQwKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAyMDA0MSk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMjAwNDIpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDIwMDQzKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAyMDA0NCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMjAwNDUpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDIwMDQ2KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAyMDA0Nyk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMjAwNDgpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDIwMDQ5KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAyMDA1MCk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMjAwNTEpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDIwMDUyKTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAyMDA1Myk7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMjAwNTQpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDIwMDU1KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAyMDA1Nik7CisJCXdiX3VzZXJfY29yZV9yZWFkX2NoZWNrKGBRU1BJTV9JTUVNX1JEQVRBLHJlYWRfZGF0YSwzMidoMDAwMjAwNTcpOworCQl3Yl91c2VyX2NvcmVfcmVhZF9jaGVjayhgUVNQSU1fSU1FTV9SREFUQSxyZWFkX2RhdGEsMzInaDAwMDIwMDU4KTsKKwkJd2JfdXNlcl9jb3JlX3JlYWRfY2hlY2soYFFTUElNX0lNRU1fUkRBVEEscmVhZF9kYXRhLDMyJ2gwMDAyMDA1OSk7CisKKwkJcmVwZWF0ICgxMDApIEAocG9zZWRnZSBjbG9jayk7CisJCQkvLyAkZGlzcGxheSgiKzEwMDAgY3ljbGVzIik7CisKKyAgICAgICAgICAJaWYodGVzdF9mYWlsID09IDApIGJlZ2luCisJCSAgIGBpZmRlZiBHTAorCSAgICAJICAgICAgICRkaXNwbGF5KCJNb25pdG9yOiBTUEkgTWFzdGVyIE1vZGUgKEdMKSBQYXNzZWQiKTsKKwkJICAgYGVsc2UKKwkJICAgICAgICRkaXNwbGF5KCJNb25pdG9yOiBTUEkgTWFzdGVyIE1vZGUgKFJUTCkgUGFzc2VkIik7CisJCSAgIGBlbmRpZgorCSAgICAgICAgZW5kIGVsc2UgYmVnaW4KKwkJICAgIGBpZmRlZiBHTAorCSAgICAJICAgICAgICAkZGlzcGxheSgiTW9uaXRvcjogU1BJIE1hc3RlciBNb2RlIChHTCkgRmFpbGVkIik7CisJCSAgICBgZWxzZQorCQkgICAgICAgICRkaXNwbGF5KCJNb25pdG9yOiBTUEkgTWFzdGVyIE1vZGUgKFJUTCkgRmFpbGVkIik7CisJCSAgICBgZW5kaWYKKwkJIGVuZAorCSAgICAJJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCSAgICAgICAgJGZpbmlzaDsKKwllbmQKKworCWluaXRpYWwgYmVnaW4KKwkJd2JfcnN0X2kgPD0gMSdiMTsKKwkJIzEwMDsKKwkJd2JfcnN0X2kgPD0gMSdiMDsJICAgIAkvLyBSZWxlYXNlIHJlc2V0CisJZW5kCit3aXJlIFVTRVJfVkREMVY4ID0gMSdiMTsKK3dpcmUgVlNTID0gMSdiMDsKKwordXNlcl9wcm9qZWN0X3dyYXBwZXIgdV90b3AoCitgaWZkZWYgVVNFX1BPV0VSX1BJTlMKKyAgICAudmNjZDEoVVNFUl9WREQxVjgpLAkvLyBVc2VyIGFyZWEgMSAxLjhWIHN1cHBseQorICAgIC52c3NkMShWU1MpLAkvLyBVc2VyIGFyZWEgMSBkaWdpdGFsIGdyb3VuZAorYGVuZGlmCisgICAgLndiX2Nsa19pICAgICAgICAoY2xvY2spLCAgLy8gU3lzdGVtIGNsb2NrCisgICAgLnVzZXJfY2xvY2syICAgICAoMSdiMSksICAvLyBSZWFsLXRpbWUgY2xvY2sKKyAgICAud2JfcnN0X2kgICAgICAgICh3Yl9yc3RfaSksICAvLyBSZWd1bGFyIFJlc2V0IHNpZ25hbAorCisgICAgLndic19jeWNfaSAgICh3YmRfZXh0X2N5Y19pKSwgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgLndic19zdGJfaSAgICh3YmRfZXh0X3N0Yl9pKSwgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgLndic19hZHJfaSAgICh3YmRfZXh0X2Fkcl9pKSwgIC8vIGFkZHJlc3MKKyAgICAud2JzX3dlX2kgICAgKHdiZF9leHRfd2VfaSksICAvLyB3cml0ZQorICAgIC53YnNfZGF0X2kgICAod2JkX2V4dF9kYXRfaSksICAvLyBkYXRhIG91dHB1dAorICAgIC53YnNfc2VsX2kgICAod2JkX2V4dF9zZWxfaSksICAvLyBieXRlIGVuYWJsZQorCisgICAgLndic19kYXRfbyAgICh3YmRfZXh0X2RhdF9vKSwgIC8vIGRhdGEgaW5wdXQKKyAgICAud2JzX2Fja19vICAgKHdiZF9leHRfYWNrX28pLCAgLy8gYWNrbm93bGVnZW1lbnQKKworIAorICAgIC8vIExvZ2ljIEFuYWx5emVyIFNpZ25hbHMKKyAgICAubGFfZGF0YV9pbiAgICAgICgnMSkgLAorICAgIC5sYV9kYXRhX291dCAgICAgKCksCisgICAgLmxhX29lbmIgICAgICAgICAoJzApLAorIAorCisgICAgLy8gSU9zCisgICAgLmlvX2luICAgICAgICAgIChpb19pbikgICwKKyAgICAuaW9fb3V0ICAgICAgICAgKGlvX291dCkgLAorICAgIC5pb19vZWIgICAgICAgICAoaW9fb2ViKSAsCisKKyAgICAudXNlcl9pcnEgICAgICAgKCkgCisKKyk7CisKK2BpZm5kZWYgR0wgLy8gRHJpdmUgUG93ZXIgZm9yIEhvbGQgRml4IEJ1ZgorICAgIC8vIEFsbCBzdGFuZGFyZCBjZWxsIG5lZWQgcG93ZXIgaG9vay11cCBmb3IgZnVuY3Rpb25hbGl0eSB3b3JrCisgICAgaW5pdGlhbCBiZWdpbgorCisgICAgZW5kCitgZW5kaWYgICAgCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgSW50ZWdyYXRlIHRoZSBTZXJpYWwgZmxhc2ggd2l0aCBxdXJkIHN1cHBvcnQgdG8KKy8vICB1c2VyIGNvcmUgdXNpbmcgdGhlIGdwaW8gcGFkcworLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgd2lyZSBmbGFzaF9jbGsgPSBpb19vdXRbMjRdOworICAgd2lyZSBmbGFzaF9jc2IgPSBpb19vdXRbMjhdOworICAgLy8gQ3JlYXRpbmcgUGFkIERlbGF5CisgICB3aXJlICMxIGlvX29lYl8yOSA9IGlvX29lYlsyOV07CisgICB3aXJlICMxIGlvX29lYl8zMCA9IGlvX29lYlszMF07CisgICB3aXJlICMxIGlvX29lYl8zMSA9IGlvX29lYlszMV07CisgICB3aXJlICMxIGlvX29lYl8zMiA9IGlvX29lYlszMl07CisgICB0cmkgICMxIGZsYXNoX2lvMCA9IChpb19vZWJfMjk9PSAxJ2IwKSA/IGlvX291dFsyOV0gOiAxJ2J6OworICAgdHJpICAjMSBmbGFzaF9pbzEgPSAoaW9fb2ViXzMwPT0gMSdiMCkgPyBpb19vdXRbMzBdIDogMSdiejsKKyAgIHRyaSAgIzEgZmxhc2hfaW8yID0gKGlvX29lYl8zMT09IDEnYjApID8gaW9fb3V0WzMxXSA6IDEnYno7CisgICB0cmkgICMxIGZsYXNoX2lvMyA9IChpb19vZWJfMzI9PSAxJ2IwKSA/IGlvX291dFszMl0gOiAxJ2J6OworCisgICBhc3NpZ24gaW9faW5bMjldID0gZmxhc2hfaW8wOworICAgYXNzaWduIGlvX2luWzMwXSA9IGZsYXNoX2lvMTsKKyAgIGFzc2lnbiBpb19pblszMV0gPSBmbGFzaF9pbzI7CisgICBhc3NpZ24gaW9faW5bMzJdID0gZmxhc2hfaW8zOworCisKKyAgIC8vIFF1YWQgZmxhc2gKKyAgICAgczI1ZmwyNTZzICMoLm1lbV9maWxlX25hbWUoImZsYXNoMC5oZXgiKSwKKwkgICAgICAgICAub3RwX2ZpbGVfbmFtZSgibm9uZSIpLAorICAgICAgICAgICAgICAgICAuVGltaW5nTW9kZWwoIlMyNUZMNTEyU0FHTUZJMDEwX0ZfMzBwRiIpKSAKKwkJIHVfc3BpX2ZsYXNoXzI1Nm1iICgKKyAgICAgICAgICAgLy8gRGF0YSBJbnB1dHMvT3V0cHV0cworICAgICAgIC5TSSAgICAgIChmbGFzaF9pbzApLAorICAgICAgIC5TTyAgICAgIChmbGFzaF9pbzEpLAorICAgICAgIC8vIENvbnRyb2xzCisgICAgICAgLlNDSyAgICAgKGZsYXNoX2NsayksCisgICAgICAgLkNTTmVnICAgKGZsYXNoX2NzYiksCisgICAgICAgLldQTmVnICAgKGZsYXNoX2lvMiksCisgICAgICAgLkhPTEROZWcgKGZsYXNoX2lvMyksCisgICAgICAgLlJTVE5lZyAgKCF3Yl9yc3RfaSkKKworICAgICAgICk7CisKKyAgIHdpcmUgc3BpcmFtX2NzYiA9IGlvX291dFsyNl07CisKKyAgIHNwaXJhbSAjKC5tZW1fZmlsZV9uYW1lKCJmbGFzaDEuaGV4IikpCisJdV9zZnJhbSAoCisgICAgICAgICAvLyBEYXRhIElucHV0cy9PdXRwdXRzCisgICAgICAgICAgIC5pbzAgICAgIChmbGFzaF9pbzApLAorICAgICAgICAgICAuaW8xICAgICAoZmxhc2hfaW8xKSwKKyAgICAgICAgICAgLy8gQ29udHJvbHMKKyAgICAgICAgICAgLmNsayAgICAoZmxhc2hfY2xrKSwKKyAgICAgICAgICAgLmNzYiAgICAoc3BpcmFtX2NzYiksCisgICAgICAgICAgIC5pbzIgICAgKGZsYXNoX2lvMiksCisgICAgICAgICAgIC5pbzMgICAgKGZsYXNoX2lvMykKKyAgICApOworCisKK3Rhc2sgd2JfdXNlcl9jb3JlX3dyaXRlOworaW5wdXQgWzMxOjBdIGFkZHJlc3M7CitpbnB1dCBbMzE6MF0gZGF0YTsKK2JlZ2luCisgIHJlcGVhdCAoMSkgQChwb3NlZGdlIGNsb2NrKTsKKyAgIzE7CisgIHdiZF9leHRfYWRyX2kgPWFkZHJlc3M7ICAvLyBhZGRyZXNzCisgIHdiZF9leHRfd2VfaSAgPSdoMTsgIC8vIHdyaXRlCisgIHdiZF9leHRfZGF0X2kgPWRhdGE7ICAvLyBkYXRhIG91dHB1dAorICB3YmRfZXh0X3NlbF9pID0naEY7ICAvLyBieXRlIGVuYWJsZQorICB3YmRfZXh0X2N5Y19pID0naDE7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X3N0Yl9pID0naDE7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YWl0KHdiZF9leHRfYWNrX28gPT0gMSk7CisgIHJlcGVhdCAoMSkgQChwb3NlZGdlIGNsb2NrKTsKKyAgIzE7CisgIHdiZF9leHRfY3ljX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfc3RiX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfYWRyX2kgPSdoMDsgIC8vIGFkZHJlc3MKKyAgd2JkX2V4dF93ZV9pICA9J2gwOyAgLy8gd3JpdGUKKyAgd2JkX2V4dF9kYXRfaSA9J2gwOyAgLy8gZGF0YSBvdXRwdXQKKyAgd2JkX2V4dF9zZWxfaSA9J2gwOyAgLy8gYnl0ZSBlbmFibGUKKyAgJGRpc3BsYXkoIlNUQVRVUzogV0IgVVNFUiBBQ0NFU1MgV1JJVEUgQWRkcmVzcyA6IDB4JXgsIERhdGEgOiAweCV4IixhZGRyZXNzLGRhdGEpOworICByZXBlYXQgKDIpIEAocG9zZWRnZSBjbG9jayk7CitlbmQKK2VuZHRhc2sKKwordGFzayAgd2JfdXNlcl9jb3JlX3JlYWQ7CitpbnB1dCBbMzE6MF0gYWRkcmVzczsKK291dHB1dCBbMzE6MF0gZGF0YTsKK3JlZyAgICBbMzE6MF0gZGF0YTsKK2JlZ2luCisgIHJlcGVhdCAoMSkgQChwb3NlZGdlIGNsb2NrKTsKKyAgIzE7CisgIHdiZF9leHRfYWRyX2kgPWFkZHJlc3M7ICAvLyBhZGRyZXNzCisgIHdiZF9leHRfd2VfaSAgPSdoMDsgIC8vIHdyaXRlCisgIHdiZF9leHRfZGF0X2kgPScwOyAgLy8gZGF0YSBvdXRwdXQKKyAgd2JkX2V4dF9zZWxfaSA9J2hGOyAgLy8gYnl0ZSBlbmFibGUKKyAgd2JkX2V4dF9jeWNfaSA9J2gxOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2JkX2V4dF9zdGJfaSA9J2gxOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2FpdCh3YmRfZXh0X2Fja19vID09IDEpOworICBkYXRhICA9IHdiZF9leHRfZGF0X287ICAKKyAgcmVwZWF0ICgxKSBAKHBvc2VkZ2UgY2xvY2spOworICAjMTsKKyAgd2JkX2V4dF9jeWNfaSA9J2gwOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2JkX2V4dF9zdGJfaSA9J2gwOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2JkX2V4dF9hZHJfaSA9J2gwOyAgLy8gYWRkcmVzcworICB3YmRfZXh0X3dlX2kgID0naDA7ICAvLyB3cml0ZQorICB3YmRfZXh0X2RhdF9pID0naDA7ICAvLyBkYXRhIG91dHB1dAorICB3YmRfZXh0X3NlbF9pID0naDA7ICAvLyBieXRlIGVuYWJsZQorICAkZGlzcGxheSgiU1RBVFVTOiBXQiBVU0VSIEFDQ0VTUyBSRUFEICBBZGRyZXNzIDogMHgleCwgRGF0YSA6IDB4JXgiLGFkZHJlc3MsZGF0YSk7CisgIHJlcGVhdCAoMikgQChwb3NlZGdlIGNsb2NrKTsKK2VuZAorZW5kdGFzaworCit0YXNrICB3Yl91c2VyX2NvcmVfcmVhZF9jaGVjazsKK2lucHV0IFszMTowXSBhZGRyZXNzOworb3V0cHV0IFszMTowXSBkYXRhOworaW5wdXQgWzMxOjBdIGNtcF9kYXRhOworcmVnICAgIFszMTowXSBkYXRhOworYmVnaW4KKyAgcmVwZWF0ICgxKSBAKHBvc2VkZ2UgY2xvY2spOworICAjMTsKKyAgd2JkX2V4dF9hZHJfaSA9YWRkcmVzczsgIC8vIGFkZHJlc3MKKyAgd2JkX2V4dF93ZV9pICA9J2gwOyAgLy8gd3JpdGUKKyAgd2JkX2V4dF9kYXRfaSA9JzA7ICAvLyBkYXRhIG91dHB1dAorICB3YmRfZXh0X3NlbF9pID0naEY7ICAvLyBieXRlIGVuYWJsZQorICB3YmRfZXh0X2N5Y19pID0naDE7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X3N0Yl9pID0naDE7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YWl0KHdiZF9leHRfYWNrX28gPT0gMSk7CisgIGRhdGEgID0gd2JkX2V4dF9kYXRfbzsgIAorICByZXBlYXQgKDEpIEAocG9zZWRnZSBjbG9jayk7CisgICMxOworICB3YmRfZXh0X2N5Y19pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X3N0Yl9pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X2Fkcl9pID0naDA7ICAvLyBhZGRyZXNzCisgIHdiZF9leHRfd2VfaSAgPSdoMDsgIC8vIHdyaXRlCisgIHdiZF9leHRfZGF0X2kgPSdoMDsgIC8vIGRhdGEgb3V0cHV0CisgIHdiZF9leHRfc2VsX2kgPSdoMDsgIC8vIGJ5dGUgZW5hYmxlCisgIGlmKGRhdGEgIT09IGNtcF9kYXRhKSBiZWdpbgorICAgICAkZGlzcGxheSgiRVJST1IgOiBXQiBVU0VSIEFDQ0VTUyBSRUFEICBBZGRyZXNzIDogMHgleCwgRXhkOiAweCV4IFJ4ZDogMHgleCAiLGFkZHJlc3MsY21wX2RhdGEsZGF0YSk7CisgICAgIHVzZXJfc3BpX3RiLnRlc3RfZmFpbCA9IDE7CisgIGVuZCBlbHNlIGJlZ2luCisgICAgICRkaXNwbGF5KCJTVEFUVVM6IFdCIFVTRVIgQUNDRVNTIFJFQUQgIEFkZHJlc3MgOiAweCV4LCBEYXRhIDogMHgleCIsYWRkcmVzcyxkYXRhKTsKKyAgZW5kCisgIHJlcGVhdCAoMikgQChwb3NlZGdlIGNsb2NrKTsKK2VuZAorZW5kdGFzaworCisKK2BpZmRlZiBHTAorCit3aXJlICAgICAgICB3YmRfc3BpX3N0Yl9pICAgPSB1X3RvcC51X3NwaV9tYXN0ZXIud2JkX3N0Yl9pOword2lyZSAgICAgICAgd2JkX3NwaV9hY2tfbyAgID0gdV90b3AudV9zcGlfbWFzdGVyLndiZF9hY2tfbzsKK3dpcmUgICAgICAgIHdiZF9zcGlfd2VfaSAgICA9IHVfdG9wLnVfc3BpX21hc3Rlci53YmRfd2VfaTsKK3dpcmUgWzMxOjBdIHdiZF9zcGlfYWRyX2kgICA9IHVfdG9wLnVfc3BpX21hc3Rlci53YmRfYWRyX2k7Cit3aXJlIFszMTowXSB3YmRfc3BpX2RhdF9pICAgPSB1X3RvcC51X3NwaV9tYXN0ZXIud2JkX2RhdF9pOword2lyZSBbMzE6MF0gd2JkX3NwaV9kYXRfbyAgID0gdV90b3AudV9zcGlfbWFzdGVyLndiZF9kYXRfbzsKK3dpcmUgWzM6MF0gIHdiZF9zcGlfc2VsX2kgICA9IHVfdG9wLnVfc3BpX21hc3Rlci53YmRfc2VsX2k7CisKK3dpcmUgICAgICAgIHdiZF9zZHJhbV9zdGJfaSA9IHVfdG9wLnVfc2RyYW1fY3RybC53Yl9zdGJfaTsKK3dpcmUgICAgICAgIHdiZF9zZHJhbV9hY2tfbyA9IHVfdG9wLnVfc2RyYW1fY3RybC53Yl9hY2tfbzsKK3dpcmUgICAgICAgIHdiZF9zZHJhbV93ZV9pICA9IHVfdG9wLnVfc2RyYW1fY3RybC53Yl93ZV9pOword2lyZSBbMzE6MF0gd2JkX3NkcmFtX2Fkcl9pID0gdV90b3AudV9zZHJhbV9jdHJsLndiX2FkZHJfaTsKK3dpcmUgWzMxOjBdIHdiZF9zZHJhbV9kYXRfaSA9IHVfdG9wLnVfc2RyYW1fY3RybC53Yl9kYXRfaTsKK3dpcmUgWzMxOjBdIHdiZF9zZHJhbV9kYXRfbyA9IHVfdG9wLnVfc2RyYW1fY3RybC53Yl9kYXRfbzsKK3dpcmUgWzM6MF0gIHdiZF9zZHJhbV9zZWxfaSA9IHVfdG9wLnVfc2RyYW1fY3RybC53Yl9zZWxfaTsKKword2lyZSAgICAgICAgd2JkX3VhcnRfc3RiX2kgID0gdV90b3AudV91YXJ0X2kyY191c2IucmVnX2NzOword2lyZSAgICAgICAgd2JkX3VhcnRfYWNrX28gID0gdV90b3AudV91YXJ0X2kyY191c2IucmVnX2FjazsKK3dpcmUgICAgICAgIHdiZF91YXJ0X3dlX2kgICA9IHVfdG9wLnVfdWFydF9pMmNfdXNiLnJlZ193cjsKK3dpcmUgWzc6MF0gIHdiZF91YXJ0X2Fkcl9pICA9IHVfdG9wLnVfdWFydF9pMmNfdXNiLnJlZ19hZGRyOword2lyZSBbNzowXSAgd2JkX3VhcnRfZGF0X2kgID0gdV90b3AudV91YXJ0X2kyY191c2IucmVnX3dkYXRhOword2lyZSBbNzowXSAgd2JkX3VhcnRfZGF0X28gID0gdV90b3AudV91YXJ0X2kyY191c2IucmVnX3JkYXRhOword2lyZSAgICAgICAgd2JkX3VhcnRfc2VsX2kgID0gdV90b3AudV91YXJ0X2kyY191c2IucmVnX2JlOworCitgZW5kaWYKKworLyoqCitgaWZkZWYgR0wKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJJU0MgSU1FTSBhbWQgRE1FTSBNb25pdG9yaW5nIFRBU0sKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYGRlZmluZSBSSVNDX0NPUkUgIHVzZXJfdWFydF90Yi51X3RvcC51X2NvcmUudV9yaXNjdl90b3AKKworYWx3YXlzQChwb3NlZGdlIGBSSVNDX0NPUkUud2JfY2xrKSBiZWdpbgorICAgIGlmKGBSSVNDX0NPUkUud2JkX2ltZW1fYWNrX2kpCisgICAgICAgICAgJGRpc3BsYXkoIlJJU0NWLURFQlVHID0+IElNRU0gQUREUkVTUzogJXggUmVhZCBEYXRhIDogJXgiLCBgUklTQ19DT1JFLndiZF9pbWVtX2Fkcl9vLGBSSVNDX0NPUkUud2JkX2ltZW1fZGF0X2kpOworICAgIGlmKGBSSVNDX0NPUkUud2JkX2RtZW1fYWNrX2kgJiYgYFJJU0NfQ09SRS53YmRfZG1lbV93ZV9vKQorICAgICAgICAgICRkaXNwbGF5KCJSSVNDVi1ERUJVRyA9PiBETUVNIEFERFJFU1M6ICV4IFdyaXRlIERhdGE6ICV4IFJlc29uc2U6ICV4IiwgYFJJU0NfQ09SRS53YmRfZG1lbV9hZHJfbyxgUklTQ19DT1JFLndiZF9kbWVtX2RhdF9vKTsKKyAgICBpZihgUklTQ19DT1JFLndiZF9kbWVtX2Fja19pICYmICFgUklTQ19DT1JFLndiZF9kbWVtX3dlX28pCisgICAgICAgICAgJGRpc3BsYXkoIlJJU0NWLURFQlVHID0+IERNRU0gQUREUkVTUzogJXggUkVBRCBEYXRhIDogJXggUmVzb25zZTogJXgiLCBgUklTQ19DT1JFLndiZF9kbWVtX2Fkcl9vLGBSSVNDX0NPUkUud2JkX2RtZW1fZGF0X2kpOworZW5kCisKK2BlbmRpZgorKiovCitlbmRtb2R1bGUKK2BkZWZhdWx0X25ldHR5cGUgd2lyZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi91c2VyX3VhcnQvLnVzZXJfdWFydC5jLnVufiBiL3Zlcmlsb2cvZHYvdXNlcl91YXJ0Ly51c2VyX3VhcnQuYy51bn4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgzNTMxMwotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvdXNlcl91YXJ0Ly51c2VyX3VhcnQuYy51bn4KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi91c2VyX3VhcnQvTWFrZWZpbGUgYi92ZXJpbG9nL2R2L3VzZXJfdWFydC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODdmMzVkCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi91c2VyX3VhcnQvTWFrZWZpbGUKQEAgLTAsMCArMSwxMTEgQEAKKyMgU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMCBFZmFibGVzcyBDb3Jwb3JhdGlvbgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKworIyMgQ2FyYXZlbCBQb2ludGVycworQ0FSQVZFTF9ST09UID89IC4uLy4uLy4uL2NhcmF2ZWwKK0NBUkFWRUxfUEFUSCA/PSAkKENBUkFWRUxfUk9PVCkKK0NBUkFWRUxfRklSTVdBUkVfUEFUSCA9ICQoQ0FSQVZFTF9QQVRIKS92ZXJpbG9nL2R2L2NhcmF2ZWwKK0NBUkFWRUxfVkVSSUxPR19QQVRIICA9ICQoQ0FSQVZFTF9QQVRIKS92ZXJpbG9nCitDQVJBVkVMX1JUTF9QQVRIID0gJChDQVJBVkVMX1ZFUklMT0dfUEFUSCkvcnRsCitDQVJBVkVMX0JFSEFWSU9VUkFMX01PREVMUyA9ICQoQ0FSQVZFTF9WRVJJTE9HX1BBVEgpL2R2L2NhcmF2ZWwKKworCisjIyBVc2VyIFByb2plY3QgUG9pbnRlcnMKK1VQUkpfVkVSSUxPR19QQVRIID89IC4uLy4uLy4uL3Zlcmlsb2cKK1VQUkpfUlRMX1BBVEggPSAkKFVQUkpfVkVSSUxPR19QQVRIKS9ydGwKK1VQUkpfR0xfUEFUSCA9ICQoVVBSSl9WRVJJTE9HX1BBVEgpL2dsCitVUFJKX0JFSEFWSU9VUkFMX01PREVMUyA9IC4uL21vZGVsCitVUFJKX0JFSEFWSU9VUkFMX0FHRU5UUyA9IC4uL2FnZW50cworVVBSSl9JTkNMVURFX1BBVEgxID0gJChVUFJKX1JUTF9QQVRIKS95aWZpdmUveWNyMWMvc3JjL2luY2x1ZGVzCitVUFJKX0lOQ0xVREVfUEFUSDIgPSAkKFVQUkpfUlRMX1BBVEgpL3NkcmFtX2N0cmwvc3JjL2RlZnMKK1VQUkpfSU5DTFVERV9QQVRIMyA9ICQoVVBSSl9SVExfUEFUSCkvaTJjbS9zcmMvaW5jbHVkZXMKK1VQUkpfSU5DTFVERV9QQVRINCA9ICQoVVBSSl9SVExfUEFUSCkvdXNiMV9ob3N0L3NyYy9pbmNsdWRlcworVVBSSl9JTkNMVURFX1BBVEg1ID0gJChVUFJKX1JUTF9QQVRIKS9tYmlzdC9pbmNsdWRlCisKKyMjIFlJRklWRSBGSVJNV0FSRQorWUlGSVZFX0ZJUk1XQVJFX1BBVEggPSAkKFVQUkpfVkVSSUxPR19QQVRIKS9kdi9maXJtd2FyZQorR0NDNjRfUFJFRklYPz1yaXNjdjY0LXVua25vd24tZWxmCisKKyMjIFJJU0NWIEdDQyAKK0dDQ19QQVRIPz0vZWYvYXBwcy9iaW4KK0dDQ19QUkVGSVg/PXJpc2N2MzItdW5rbm93bi1lbGYKK1BES19QQVRIPz0vZWYvdGVjaC9TVy9za3kxMzBBCisKKyMjIFNpbXVsYXRpb24gbW9kZTogUlRML0dMCitTSU0/PVJUTAorRFVNUD89T0ZGCisKKy5TVUZGSVhFUzoKKworUEFUVEVSTiA9IHVzZXJfdWFydAorCithbGw6ICAke1BBVFRFUk46PS52Y2R9CisKK2hleDogICR7UEFUVEVSTjo9LmhleH0KKwordnZwOiAgJHtQQVRURVJOOj0udnZwfQorCislLnZ2cDogJV90Yi52CisJJHtHQ0M2NF9QUkVGSVh9LWdjYyAtTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICAtRF9fUlZDX0VYVCAtc3RhdGljIC1zdGQ9Z251OTkgLWZuby1jb21tb24gLWZuby1idWlsdGluLXByaW50ZiAtRFRDTT0wIC1XYSwtbWFyY2g9cnYzMmltYyAtbWFyY2g9cnYzMmltYyAtbWFiaT1pbHAzMiAtREZMQUdTX1NUUj1cIiItTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICJcIiAgLWMgLUkuLyAtSSQoWUlGSVZFX0ZJUk1XQVJFX1BBVEgpIHVzZXJfdWFydC5jIC1vIHVzZXJfdWFydC5vCisJJHtHQ0M2NF9QUkVGSVh9LWdjYyAtTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICAtRF9fUlZDX0VYVCAtc3RhdGljIC1zdGQ9Z251OTkgLWZuby1jb21tb24gLWZuby1idWlsdGluLXByaW50ZiAtRFRDTT0wIC1XYSwtbWFyY2g9cnYzMmltYyAtbWFyY2g9cnYzMmltYyAtbWFiaT1pbHAzMiAtREZMQUdTX1NUUj1cIiItTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICJcIiAgLURfX0FTU0VNQkxZX189MSAtYyAtSS4vIC1JJChZSUZJVkVfRklSTVdBUkVfUEFUSCkgICQoWUlGSVZFX0ZJUk1XQVJFX1BBVEgpL2NydC5TIC1vIGNydC5vCisJJHtHQ0M2NF9QUkVGSVh9LWdjYyAtbyB1c2VyX3VhcnQuZWxmIC1UICQoWUlGSVZFX0ZJUk1XQVJFX1BBVEgpL2xpbmsubGQgdXNlcl91YXJ0Lm8gY3J0Lm8gLW5vc3RhcnRmaWxlcyAtbm9zdGRsaWIgLWxjIC1sZ2NjIC1tYXJjaD1ydjMyaW1jIC1tYWJpPWlscDMyIC1OCisJJHtHQ0M2NF9QUkVGSVh9LW9iamNvcHkgLU8gdmVyaWxvZyB1c2VyX3VhcnQuZWxmIHVzZXJfdWFydC5oZXgKKwkke0dDQzY0X1BSRUZJWH0tb2JqZHVtcCAtRCB1c2VyX3VhcnQuZWxmID4gdXNlcl91YXJ0LmR1bXAKKwlybSBjcnQubyB1c2VyX3VhcnQubworaWZlcSAoJChTSU0pLFJUTCkKKyAgIGlmZXEgKCQoRFVNUCksT0ZGKQorCWl2ZXJpbG9nIC1nMjAwNS1zdiAtREZVTkNUSU9OQUwgLURTSU0gLUkgJChQREtfUEFUSCkgXAorCS1JICQoQ0FSQVZFTF9CRUhBVklPVVJBTF9NT0RFTFMpIC1JICQoQ0FSQVZFTF9SVExfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9NT0RFTFMpICAgIC1JICQoVVBSSl9SVExfUEFUSCkgLUkgJChVUFJKX1ZFUklMT0dfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9BR0VOVFMpICAgIFwKKwktSSAkKFVQUkpfSU5DTFVERV9QQVRIMSkgICAgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDIpIC1JICQoVVBSSl9JTkNMVURFX1BBVEgzKSBcCisJLUkgJChVUFJKX0lOQ0xVREVfUEFUSDQpIC1JICQoVVBSSl9JTkNMVURFX1BBVEg1KSBcCisJJDwgLW8gJEAgCisgICAgZWxzZSAgCisJaXZlcmlsb2cgLWcyMDA1LXN2IC1EV0ZEVU1QIC1ERlVOQ1RJT05BTCAtRFNJTSAtSSAkKFBES19QQVRIKSBcCisJLUkgJChDQVJBVkVMX0JFSEFWSU9VUkFMX01PREVMUykgLUkgJChDQVJBVkVMX1JUTF9QQVRIKSBcCisJLUkgJChVUFJKX0JFSEFWSU9VUkFMX01PREVMUykgICAgLUkgJChVUFJKX1JUTF9QQVRIKSAtSSAkKFVQUkpfVkVSSUxPR19QQVRIKSBcCisJLUkgJChVUFJKX0JFSEFWSU9VUkFMX0FHRU5UUykgICAgXAorCS1JICQoVVBSSl9JTkNMVURFX1BBVEgxKSAgICAtSSAkKFVQUkpfSU5DTFVERV9QQVRIMikgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDMpIFwKKwktSSAkKFVQUkpfSU5DTFVERV9QQVRINCkgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDUpIFwKKwkkPCAtbyAkQCAKKyAgIGVuZGlmCitlbHNlICAKKwlpdmVyaWxvZyAtZzIwMDUtc3YgLURGVU5DVElPTkFMIC1EU0lNIC1ER0wgLUkgJChQREtfUEFUSCkgXAorCS1JICQoQ0FSQVZFTF9CRUhBVklPVVJBTF9NT0RFTFMpIC1JICQoQ0FSQVZFTF9SVExfUEFUSCkgLUkgJChDQVJBVkVMX1ZFUklMT0dfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9NT0RFTFMpIC1JICQoVVBSSl9HTF9QQVRIKSBcCisJLUkgJChVUFJKX0JFSEFWSU9VUkFMX0FHRU5UUykgICAgXAorCSQ8IC1vICRAIAorZW5kaWYKKworJS52Y2Q6ICUudnZwCisJdnZwICQ8CisKKyUuZWxmOiAlLmMgJChDQVJBVkVMX0ZJUk1XQVJFX1BBVEgpL3NlY3Rpb25zLmxkcyAkKENBUkFWRUxfRklSTVdBUkVfUEFUSCkvc3RhcnQucworCSR7R0NDNjRfUFJFRklYfS1nY2MgLUkgJChDQVJBVkVMX1BBVEgpIC1tYXJjaD1ydjMyaW1jIC1tYWJpPWlscDMyIC1XbCwtQnN0YXRpYywtVCwkKENBUkFWRUxfRklSTVdBUkVfUEFUSCkvc2VjdGlvbnMubGRzLC0tc3RyaXAtZGVidWcgLWZmcmVlc3RhbmRpbmcgLW5vc3RkbGliIC1vICRAICQoQ0FSQVZFTF9GSVJNV0FSRV9QQVRIKS9zdGFydC5zICQ8CisKKyUuaGV4OiAKKwllY2hvIEAiVGhpcyBpcyB1c2VyIGJvb3QgdGVzdCwgbm90aW5nIHRvIGNvbXBpbGUgdGhlIG1hbmdtZW50IGNvcmUgY29kZSIKKworJS5iaW46ICUuZWxmCisJJHtHQ0M2NF9QUkVGSVh9LW9iamNvcHkgLU8gYmluYXJ5ICQ8IC9kZXYvc3Rkb3V0IHwgdGFpbCAtYyArMTA0ODU3NyA+ICRACisKKyMgLS0tLSBDbGVhbiAtLS0tCisKK2NsZWFuOgorCXJtIC1mICouZWxmICouaGV4ICouYmluICoudnZwICoudmNkICoubG9nICouZHVtcAorCisuUEhPTlk6IGNsZWFuIGhleCBhbGwKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvdXNlcl91YXJ0L3J1bl9pdmVyaWxvZyBiL3Zlcmlsb2cvZHYvdXNlcl91YXJ0L3J1bl9pdmVyaWxvZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lNDYxZmQxCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi91c2VyX3VhcnQvcnVuX2l2ZXJpbG9nCkBAIC0wLDAgKzEsNDIgQEAKKyMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisjIC8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEsIERpbmVzaCBBbm5heXlhCisjIC8vIAorIyAvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgLy8KKyMgLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgLy8KKyMgLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMgLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyMgLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisjIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCityaXNjdjY0LXVua25vd24tZWxmLWdjYyAtTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICAtRF9fUlZDX0VYVCAtc3RhdGljIC1zdGQ9Z251OTkgLWZuby1jb21tb24gLWZuby1idWlsdGluLXByaW50ZiAtRFRDTT0xIC1XYSwtbWFyY2g9cnYzMmltYyAtbWFyY2g9cnYzMmltYyAtbWFiaT1pbHAzMiAtREZMQUdTX1NUUj1cIiItTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICJcIiAgLWMgLUkuLyAtSS4uLy4uL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvY29tbW9uICB1c2VyX3VhcnQuYyAtbyB1c2VyX3VhcnQubworCityaXNjdjY0LXVua25vd24tZWxmLWdjYyAtTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICAtRF9fUlZDX0VYVCAtc3RhdGljIC1zdGQ9Z251OTkgLWZuby1jb21tb24gLWZuby1idWlsdGluLXByaW50ZiAtRFRDTT0xIC1XYSwtbWFyY2g9cnYzMmltYyAtbWFyY2g9cnYzMmltYyAtbWFiaT1pbHAzMiAtREZMQUdTX1NUUj1cIiItTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICJcIiAgLURfX0FTU0VNQkxZX189MSAtYyAtSS4vIC1JLi4vLi4vcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9jb21tb24vICAuLi8uLi9ydGwvc3ludGFjb3JlL3NjcjEvc2ltL3Rlc3RzL2NvbW1vbi9jcnRfdGNtLlMgLW8gY3J0X3RjbS5vCisKK3Jpc2N2NjQtdW5rbm93bi1lbGYtZ2NjIC1vIHVzZXJfdWFydC5lbGYgLVQgLi4vLi4vcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9jb21tb24vbGlua190Y20ubGQgdXNlcl91YXJ0Lm8gY3J0X3RjbS5vIC1ub3N0YXJ0ZmlsZXMgLW5vc3RkbGliIC1sYyAtbGdjYyAtbWFyY2g9cnYzMmltYyAtbWFiaT1pbHAzMgorCityaXNjdjY0LXVua25vd24tZWxmLW9iamNvcHkgLU8gdmVyaWxvZyB1c2VyX3VhcnQuZWxmIHVzZXJfdWFydC5oZXgKKworcmlzY3Y2NC11bmtub3duLWVsZi1vYmpkdW1wIC1EIHVzZXJfdWFydC5lbGYgPiB1c2VyX3VhcnQuZHVtcAorCitybSBjcnRfdGNtLm8gdXNlcl91YXJ0Lm8KKworI2l2ZXJpbG9nIHdpdGggd2F2ZWZvcm0gZHVtcAoraXZlcmlsb2cgLWcyMDA1LXN2IC1EV0ZEVU1QIC1ERlVOQ1RJT05BTCAtRFNJTSAtSSAkUERLX1BBVEggLUkgIC4uLy4uLy4uL2NhcmF2ZWwvdmVyaWxvZy9ydGwgIC1JIC4uLyAtSSAuLi8uLi8uLi92ZXJpbG9nL3J0bCAtSSAuLi8gLUkgLi4vLi4vLi4vdmVyaWxvZyAtSSAuLi8uLi8uLi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvaW5jbHVkZXMgICAtSSAuLi8uLi8uLi92ZXJpbG9nL3J0bC9zZHJhbV9jdHJsL3NyYy9kZWZzIC1JIC4uLy4uLy4uL3Zlcmlsb2cvcnRsL2kyY20vc3JjL2luY2x1ZGVzIC1JIC4uLy4uLy4uL3Zlcmlsb2cvcnRsL3VzYjFfaG9zdC9zcmMvaW5jbHVkZXMgLUkgJENBUkFWRUxfUk9PVC92ZXJpbG9nL2R2L2NhcmF2ZWwgLUkgLi4vbW9kZWwgLUkgLi4vYWdlbnRzIHVzZXJfdWFydF90Yi52IC1vIHVzZXJfdWFydF90Yi52dnAKKworCisjaXZlcmlsb2cgLWcyMDA1LXN2IC1JICRQREtfUEFUSCAtREZVTkNUSU9OQUwgLURTSU0gLUkgIC4uLy4uLy4uL2NhcmF2ZWwvdmVyaWxvZy9ydGwgLUkgLi4vIC1JIC4uLy4uLy4uL3Zlcmlsb2cvcnRsIC1JIC4uLy4uLy4uL3Zlcmlsb2cgLUkgLi4vLi4vLi4vdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL2luY2x1ZGVzICAgLUkgLi4vLi4vLi4vdmVyaWxvZy9ydGwvc2RyYW1fY3RybC9zcmMvZGVmcyAtSSAkQ0FSQVZFTF9ST09UL3Zlcmlsb2cvZHYvY2FyYXZlbCAtSSAuLi9tb2RlbCAtSSAuLi9hZ2VudHMgdXNlcl91YXJ0X3RiLnYgLW8gdXNlcl91YXJ0X3RiLnZ2cAorCisjIEdMUyAKKyNpdmVyaWxvZyAtZzIwMDUtc3YgLUQgR0wgLUQgRlVOQ1RJT05BTCAtSSAkUERLX1BBVEggLUkgIC4uLy4uLy4uL2NhcmF2ZWwvdmVyaWxvZy9ydGwgIC1JIC4uLyAtSSAuLi8uLi8uLi92ZXJpbG9nL2dsIC1JIC4uLy4uLy4uL3Zlcmlsb2cgLUkgL2hvbWUvZGluZXNoYS93b3JrYXJlYS9wZGsvc2t5MTMwQSAtSSAuLi8uLi8uLi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvaW5jbHVkZXMgICAtSSAuLi8uLi8uLi92ZXJpbG9nL3J0bC9zZHJhbV9jdHJsL3NyYy9kZWZzIC1JICRDQVJBVkVMX1JPT1QvdmVyaWxvZy9kdi9jYXJhdmVsIC1JIC4uL21vZGVsIC1JIC4uL2FnZW50cyB1c2VyX3VhcnRfdGIudiAtbyB1c2VyX3VhcnRfdGIudnZwCisjCisKK3Z2cCB1c2VyX3VhcnRfdGIudnZwIHwgdGVlIHRlc3QubG9nCisKK1xybSAtcmYgdXNlcl91YXJ0X3RiLnZ2cApkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi91c2VyX3VhcnQvdXNlcl91YXJ0LmMgYi92ZXJpbG9nL2R2L3VzZXJfdWFydC91c2VyX3VhcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWUwMjA0Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi91c2VyX3VhcnQvdXNlcl91YXJ0LmMKQEAgLTAsMCArMSw0MyBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxLCBEaW5lc2ggQW5uYXl5YQorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworI2RlZmluZSBTQ19TSU1fT1VUUE9SVCAoMHhmMDAwMDAwMCkKKyNkZWZpbmUgdWludDMyX3QgIGxvbmcKKworCisjZGVmaW5lIHJlZ19tcHJqX3VhcnRfcmVnMCAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAxMDAwMCkKKyNkZWZpbmUgcmVnX21wcmpfdWFydF9yZWcxICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDEwMDA0KQorI2RlZmluZSByZWdfbXByal91YXJ0X3JlZzIgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMTAwMDgpCisjZGVmaW5lIHJlZ19tcHJqX3VhcnRfcmVnMyAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAxMDAwQykKKyNkZWZpbmUgcmVnX21wcmpfdWFydF9yZWc0ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDEwMDEwKQorI2RlZmluZSByZWdfbXByal91YXJ0X3JlZzUgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMTAwMTQpCisjZGVmaW5lIHJlZ19tcHJqX3VhcnRfcmVnNiAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAxMDAxOCkKKyNkZWZpbmUgcmVnX21wcmpfdWFydF9yZWc3ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDEwMDFDKQorI2RlZmluZSByZWdfbXByal91YXJ0X3JlZzggKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMTAwMjApCisKK2ludCBtYWluKCkKK3sKKworICAgIHdoaWxlKDEpIHsKKyAgICAgICAvLyBDaGVjayBVQVJUIFJYIGZpZm8gaGFzIGRhdGEsIGlmIGF2YWlsYWJsZSBsb29wIGJhY2sgdGhlIGRhdGEKKyAgICAgICBpZihyZWdfbXByal91YXJ0X3JlZzggIT0gMCkgeyAKKwkgICByZWdfbXByal91YXJ0X3JlZzUgPSByZWdfbXByal91YXJ0X3JlZzY7CisgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi91c2VyX3VhcnQvdXNlcl91YXJ0X3RiLnYgYi92ZXJpbG9nL2R2L3VzZXJfdWFydC91c2VyX3VhcnRfdGIudgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzdmMjU1Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi91c2VyX3VhcnQvdXNlcl91YXJ0X3RiLnYKQEAgLTAsMCArMSw0NTYgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6ICAyMDIxICwgRGluZXNoIEFubmF5eWEKKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IE1vZGlmaWVkIGJ5IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBTdGFuZGFsb25lIFVzZXIgdmFsaWRhdGlvbiBUZXN0IGJlbmNoICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgWUlGaXZlIGNvcmVzIHByb2plY3QgICAgICAgICAgICAgICAvLy8vCisvLy8vICBodHRwczovL2dpdGh1Yi5jb20vZGluZXNoYW5uYXl5YS95aWZpdmVfcjAuZ2l0ICAgICAgICAgICAgICAvLy8vCisvLy8vICBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvY29yZXMveWlmaXZlLyAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgVGhpcyBpcyBhIHN0YW5kYWxvbmUgdGVzdCBiZW5jaCB0byB2YWxpZGF0ZSB0aGUgICAgICAgICAgICAvLy8vCisvLy8vICAgRGlnaXRhbCBjb3JlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgMS4gVXNlciBSaXNjIGNvcmUgaXMgYm9vdGVkIHVzaW5nICBjb21waWxlZCBjb2RlIG9mICAgICAgICAvLy8vCisvLy8vICAgICAgdXNlcl9yaXNjX2Jvb3QuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgMi4gVXNlciBSaXNjIGNvcmUgdXNlcyBTZXJpYWwgRmxhc2ggYW5kIFNEUkFNIHRvIGJvb3QgICAgICAvLy8vCisvLy8vICAgMy4gQWZ0ZXIgc3VjY2Vzc2Z1bCBib290LCBSaXNjIGNvcmUgd2lsbCBjaGVjayB0aGUgVUFSVCAgICAvLy8vCisvLy8vICAgICAgUlggRGF0YSwgSWYgaXQncyBhdmFpbGFibGUgdGhlbiBpdCBsb29wIGJhY2sgdGhlIHNhbWUgICAvLy8vCisvLy8vICAgICAgZGF0YSBpbiB1YXJ0IHR4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgNC4gVGVzdCBiZW5jaCBzZW5kIHJhbmRvbSA0MCBjaGFyYWN0ZXIgdG93YXJkcyBVc2VyIHVhcnQgICAvLy8vCisvLy8vICAgICAgYW5kIGV4cGVjdCBzYW1lIGRhdGEgdG8gcmV0dXJuIGJhY2sgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUbyBEbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIG5vdGhpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBBdXRob3Iocyk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgLSBEaW5lc2ggQW5uYXl5YSwgZGluZXNoYUBvcGVuY29yZXMub3JnICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBSZXZpc2lvbiA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIDAuMSAtIDE2dGggRmViIDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIENvcHlyaWdodCAoQykgMjAwMCBBdXRob3JzIGFuZCBPUEVOQ09SRVMuT1JHICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgICAvLy8vCisvLy8vIHJlc3RyaWN0aW9uIHByb3ZpZGVkIHRoYXQgdGhpcyBjb3B5cmlnaHQgc3RhdGVtZW50IGlzIG5vdCAgICAvLy8vCisvLy8vIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSBhbmQgdGhhdCBhbnkgZGVyaXZhdGl2ZSB3b3JrIGNvbnRhaW5zICAvLy8vCisvLy8vIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLiAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgICAvLy8vCisvLy8vIGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAvLy8vCisvLy8vIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAvLy8vCisvLy8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgICAvLy8vCisvLy8vIGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSAgICAgICAvLy8vCisvLy8vIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgICAvLy8vCisvLy8vIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgICAgICAvLy8vCisvLy8vIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSAvLy8vCisvLy8vIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgICAvLy8vCisvLy8vIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBzb3VyY2U7IGlmIG5vdCwgZG93bmxvYWQgaXQgICAvLy8vCisvLy8vIGZyb20gaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2xncGwuc2h0bWwgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2BkZWZhdWx0X25ldHR5cGUgd2lyZQorCitgdGltZXNjYWxlIDEgbnMgLyAxIG5zCisKK2BpbmNsdWRlICJzMjVmbDI1NnMuc3YiCitgaW5jbHVkZSAidXByal9uZXRsaXN0cy52IgorYGluY2x1ZGUgIm10NDhsYzhtOGEyLnYiCitgaW5jbHVkZSAidWFydF9hZ2VudC52IgorCisKK2BkZWZpbmUgQUREUl9TUEFDRV9VQVJUICAgIDMyJ2gzMDAxXzAwMDAKK2BkZWZpbmUgQUREUl9TUEFDRV9QSU5NVVggIDMyJ2gzMDAyXzAwMDAKKworCittb2R1bGUgdXNlcl91YXJ0X3RiOworCityZWcgICAgICAgICAgICBjbG9jayAgICAgICAgIDsKK3JlZyAgICAgICAgICAgIHdiX3JzdF9pICAgICAgOworcmVnICAgICAgICAgICAgcG93ZXIxLCBwb3dlcjI7CityZWcgICAgICAgICAgICBwb3dlcjMsIHBvd2VyNDsKKworcmVnICAgICAgICAgICAgd2JkX2V4dF9jeWNfaTsgIC8vIHN0cm9iZS9yZXF1ZXN0CityZWcgICAgICAgICAgICB3YmRfZXh0X3N0Yl9pOyAgLy8gc3Ryb2JlL3JlcXVlc3QKK3JlZyBbMzE6MF0gICAgIHdiZF9leHRfYWRyX2k7ICAvLyBhZGRyZXNzCityZWcgICAgICAgICAgICB3YmRfZXh0X3dlX2k7ICAvLyB3cml0ZQorcmVnIFszMTowXSAgICAgd2JkX2V4dF9kYXRfaTsgIC8vIGRhdGEgb3V0cHV0CityZWcgWzM6MF0gICAgICB3YmRfZXh0X3NlbF9pOyAgLy8gYnl0ZSBlbmFibGUKKword2lyZSBbMzE6MF0gICAgd2JkX2V4dF9kYXRfbzsgIC8vIGRhdGEgaW5wdXQKK3dpcmUgICAgICAgICAgIHdiZF9leHRfYWNrX287ICAvLyBhY2tub3dsZWdlbWVudAord2lyZSAgICAgICAgICAgd2JkX2V4dF9lcnJfbzsgIC8vIGVycm9yCisKKy8vIFVzZXIgSS9PCit3aXJlIFszNzowXSAgICBpb19vZWIgICAgICAgIDsKK3dpcmUgWzM3OjBdICAgIGlvX291dCAgICAgICAgOword2lyZSBbMzc6MF0gICAgaW9faW4gICAgICAgICA7CisKK3dpcmUgWzM3OjBdICAgIG1wcmpfaW8gICAgICAgOword2lyZSBbNzowXSAgICAgbXByal9pb18wICAgICA7CityZWcgICAgICAgICAgICB0ZXN0X2ZhaWwgICAgIDsKK3JlZyBbMzE6MF0gICAgIHJlYWRfZGF0YSAgICAgOworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBVYXJ0IENvbmZpZ3VyYXRpb24KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcmVnIFsxOjBdICAgICAgdWFydF9kYXRhX2JpdCAgICAgICAgOworcmVnCSAgICAgICB1YXJ0X3N0b3BfYml0cyAgICAgICA7IC8vIDA6IDEgc3RvcCBiaXQ7IDE6IDIgc3RvcCBiaXQ7CityZWcJICAgICAgIHVhcnRfc3RpY2tfcGFyaXR5ICAgIDsgLy8gMTogZm9yY2UgZXZlbiBwYXJpdHkKK3JlZwkgICAgICAgdWFydF9wYXJpdHlfZW4gICAgICAgOyAvLyBwYXJpdHkgZW5hYmxlCityZWcJICAgICAgIHVhcnRfZXZlbl9vZGRfcGFyaXR5IDsgLy8gMDogb2RkIHBhcml0eTsgMTogZXZlbiBwYXJpdHkKKworcmVnIFs3OjBdICAgICAgdWFydF9kYXRhICAgICAgICAgICAgOworcmVnIFsxNTowXSAgICAgdWFydF9kaXZpc29yICAgICAgICAgOwkvLyBkaXZpZGVkIGJ5IG4gKiAxNgorcmVnIFsxNTowXSAgICAgdWFydF90aW1lb3V0ICAgICAgICAgOy8vIHdhaXQgdGltZSBsaW1pdAorCityZWcgWzE1OjBdICAgICB1YXJ0X3J4X251ICAgICAgICAgICA7CityZWcgWzE1OjBdICAgICB1YXJ0X3R4X251ICAgICAgICAgICA7CityZWcgWzc6MF0gICAgICB1YXJ0X3dyaXRlX2RhdGEgWzA6MzldOworcmVnIAkgICAgICAgdWFydF9maWZvX2VuYWJsZSAgICAgOwkvLyBmaWZvIG1vZGUgZGlzYWJsZQorCitpbnRlZ2VyIGksajsKKworCS8vIEV4dGVybmFsIGNsb2NrIGlzIHVzZWQgYnkgZGVmYXVsdC4gIE1ha2UgdGhpcyBhcnRpZmljaWFsbHkgZmFzdCBmb3IgdGhlCisJLy8gc2ltdWxhdGlvbi4gIE5vcm1hbGx5IHRoaXMgd291bGQgYmUgYSBzbG93IGNsb2NrIGFuZCB0aGUgZGlnaXRhbCBQTEwKKwkvLyB3b3VsZCBiZSB0aGUgZmFzdCBjbG9jay4KKworCWFsd2F5cyAjMTIuNSBjbG9jayA8PSAoY2xvY2sgPT09IDEnYjApOworCisJaW5pdGlhbCBiZWdpbgorCQljbG9jayA9IDA7CisgICAgICAgICAgICAgICAgd2JkX2V4dF9jeWNfaSA9J2gwOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAgICAgICAgICAgICB3YmRfZXh0X3N0Yl9pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICAgICAgICAgICAgICAgIHdiZF9leHRfYWRyX2kgPSdoMDsgIC8vIGFkZHJlc3MKKyAgICAgICAgICAgICAgICB3YmRfZXh0X3dlX2kgID0naDA7ICAvLyB3cml0ZQorICAgICAgICAgICAgICAgIHdiZF9leHRfZGF0X2kgPSdoMDsgIC8vIGRhdGEgb3V0cHV0CisgICAgICAgICAgICAgICAgd2JkX2V4dF9zZWxfaSA9J2gwOyAgLy8gYnl0ZSBlbmFibGUKKwllbmQKKworCWBpZmRlZiBXRkRVTVAKKwkgICBpbml0aWFsIGJlZ2luCisJICAgCSRkdW1wZmlsZSgic2lteC52Y2QiKTsKKwkgICAJJGR1bXB2YXJzKDEsIHVzZXJfdWFydF90Yik7CisJICAgCSRkdW1wdmFycygwLCB1c2VyX3VhcnRfdGIudV90b3ApOworCSAgIGVuZAorICAgICAgIGBlbmRpZgorCisJaW5pdGlhbCBiZWdpbgorCQl3Yl9yc3RfaSA8PSAxJ2IxOworCQkjMTAwOworCQl3Yl9yc3RfaSA8PSAxJ2IwOwkgICAgCS8vIFJlbGVhc2UgcmVzZXQKKwllbmQKK2luaXRpYWwKK2JlZ2luCisgICB1YXJ0X2RhdGFfYml0ICAgICAgICAgICA9IDInYjExOworICAgdWFydF9zdG9wX2JpdHMgICAgICAgICAgPSAwOyAvLyAwOiAxIHN0b3AgYml0OyAxOiAyIHN0b3AgYml0OworICAgdWFydF9zdGlja19wYXJpdHkgICAgICAgPSAwOyAvLyAxOiBmb3JjZSBldmVuIHBhcml0eQorICAgdWFydF9wYXJpdHlfZW4gICAgICAgICAgPSAwOyAvLyBwYXJpdHkgZW5hYmxlCisgICB1YXJ0X2V2ZW5fb2RkX3Bhcml0eSAgICA9IDE7IC8vIDA6IG9kZCBwYXJpdHk7IDE6IGV2ZW4gcGFyaXR5CisgICB1YXJ0X2Rpdmlzb3IgICAgICAgICAgICA9IDE1Oy8vIGRpdmlkZWQgYnkgbiAqIDE2CisgICB1YXJ0X3RpbWVvdXQgICAgICAgICAgICA9IDUwMDsvLyB3YWl0IHRpbWUgbGltaXQKKyAgIHVhcnRfZmlmb19lbmFibGUgICAgICAgID0gMDsJLy8gZmlmbyBtb2RlIGRpc2FibGUKKworICAgIzIwMDsgLy8gV2FpdCBmb3IgcmVzZXQgcmVtb3ZhbAorICAgcmVwZWF0ICgxMCkgQChwb3NlZGdlIGNsb2NrKTsKKyAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGFuZGFsb25lIFVzZXIgVWFydCBUZXN0IFN0YXJ0ZWQiKTsKKyAgIAorICAgLy8gUmVtb3ZlIFdiIFJlc2V0CisgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDAsJ2gxKTsKKworICAgLy8gRW5hYmxlIFVBUlQgTXVsdGkgRnVuY3Rpb25hbCBQb3J0cworICAgd2JfdXNlcl9jb3JlX3dyaXRlKGBBRERSX1NQQUNFX1BJTk1VWCsnaDAwMzgsJ2gxMDApOworICAgCisgICByZXBlYXQgKDIpIEAocG9zZWRnZSBjbG9jayk7CisgICAjMTsKKyAgIC8vIFJlbW92ZSBhbGwgdGhlIHJlc2V0CisgICB3Yl91c2VyX2NvcmVfd3JpdGUoJ2gzMDgwXzAwMDAsJ2gxRik7CisKKyAgIHJlcGVhdCAoMjAwMDApIEAocG9zZWRnZSBjbG9jayk7ICAvLyB3YWl0IGZvciBQcm9jZXNzb3IgR2V0IFJlYWR5CisgICB0Yl91YXJ0LnVhcnRfaW5pdDsKKyAgIHdiX3VzZXJfY29yZV93cml0ZShgQUREUl9TUEFDRV9VQVJUKzgnaDAsezMnaDAsMidiMDAsMSdiMSwxJ2IxLDEnYjF9KTsgIAorICAgCisgICB0Yl91YXJ0LmNvbnRyb2xfc2V0dXAgKHVhcnRfZGF0YV9iaXQsIHVhcnRfc3RvcF9iaXRzLCB1YXJ0X3Bhcml0eV9lbiwgdWFydF9ldmVuX29kZF9wYXJpdHksIAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgdWFydF9zdGlja19wYXJpdHksIHVhcnRfdGltZW91dCwgdWFydF9kaXZpc29yKTsKKyAgIAorICAgZm9yIChpPTA7IGk8NDA7IGk9aSsxKQorICAgCXVhcnRfd3JpdGVfZGF0YVtpXSA9ICRyYW5kb207CisgICAKKyAgIAorICAgCisgICBmb3JrCisgICAgICBiZWdpbgorICAgICAgICAgZm9yIChpPTA7IGk8NDA7IGk9aSsxKQorICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgJGRpc3BsYXkgKCJcbi4uLiBVQVJUIEFnZW50IFdyaXRpbmcgY2hhciAleCAuLi4iLCB1YXJ0X3dyaXRlX2RhdGFbaV0pOworICAgICAgICAgICAgdXNlcl91YXJ0X3RiLnRiX3VhcnQud3JpdGVfY2hhciAodWFydF93cml0ZV9kYXRhW2ldKTsKKyAgICAgICAgIGVuZAorICAgICAgZW5kCisgICAKKyAgICAgIGJlZ2luCisgICAgICAgICBmb3IgKGo9MDsgajw0MDsgaj1qKzEpCisgICAgICAgICBiZWdpbgorICAgICAgICAgICB1c2VyX3VhcnRfdGIudGJfdWFydC5yZWFkX2NoYXJfY2hrKHVhcnRfd3JpdGVfZGF0YVtqXSk7CisgICAgICAgICBlbmQKKyAgICAgIGVuZAorICAgICAgam9pbgorICAgCisgICAgICAjMTAwCisgICAgICB0Yl91YXJ0LnJlcG9ydF9zdGF0dXModWFydF9yeF9udSwgdWFydF90eF9udSk7CisgICAKKyAgICAgIHRlc3RfZmFpbCA9IDA7CisKKyAgICAgIC8vIENoZWNrIAorICAgICAgLy8gaWYgYWxsIHRoZSA0MCBieXRlIHRyYW5zbWl0dGVkCisgICAgICAvLyBpZiBhbGwgdGhlIDQwIGJ5dGUgcmVjZWl2ZWQKKyAgICAgIC8vIGlmIG5vIGVycm9yIAorICAgICAgaWYodWFydF90eF9udSAhPSA0MCkgdGVzdF9mYWlsID0gMTsKKyAgICAgIGlmKHVhcnRfcnhfbnUgIT0gNDApIHRlc3RfZmFpbCA9IDE7CisgICAgICBpZih0Yl91YXJ0LmVycl9jbnQgIT0gMCkgdGVzdF9mYWlsID0gMTsKKworICAgICAgJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworICAgICAgaWYodGVzdF9mYWlsID09IDApIGJlZ2luCisgICAgICAgICBgaWZkZWYgR0wKKyAgICAgICAgICAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RhbmRhbG9uZSBVc2VyIFVBUlQgVGVzdCAoR0wpIFBhc3NlZCIpOworICAgICAgICAgYGVsc2UKKyAgICAgICAgICAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RhbmRhbG9uZSBVc2VyIFVBUlQgVGVzdCAoUlRMKSBQYXNzZWQiKTsKKyAgICAgICAgIGBlbmRpZgorICAgICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgICAgICBgaWZkZWYgR0wKKyAgICAgICAgICAgICAgJGRpc3BsYXkoIk1vbml0b3I6IFN0YW5kYWxvbmUgVXNlciBVQVJUIFRlc3QgKEdMKSBGYWlsZWQiKTsKKyAgICAgICAgICBgZWxzZQorICAgICAgICAgICAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RhbmRhbG9uZSBVc2VyIFVBUlQgVGVzdCAoUlRMKSBGYWlsZWQiKTsKKyAgICAgICAgICBgZW5kaWYKKyAgICAgICBlbmQKKyAgICAgICRkaXNwbGF5KCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKyAgICAgICMxMDAKKyAgICAgICRmaW5pc2g7CitlbmQKKworCit3aXJlIFVTRVJfVkREMVY4ID0gMSdiMTsKK3dpcmUgVlNTID0gMSdiMDsKKworCit1c2VyX3Byb2plY3Rfd3JhcHBlciB1X3RvcCgKK2BpZmRlZiBVU0VfUE9XRVJfUElOUworICAgIC52Y2NkMShVU0VSX1ZERDFWOCksCS8vIFVzZXIgYXJlYSAxIDEuOFYgc3VwcGx5CisgICAgLnZzc2QxKFZTUyksCS8vIFVzZXIgYXJlYSAxIGRpZ2l0YWwgZ3JvdW5kCitgZW5kaWYKKyAgICAud2JfY2xrX2kgICAgICAgIChjbG9jayksICAvLyBTeXN0ZW0gY2xvY2sKKyAgICAudXNlcl9jbG9jazIgICAgICgxJ2IxKSwgIC8vIFJlYWwtdGltZSBjbG9jaworICAgIC53Yl9yc3RfaSAgICAgICAgKHdiX3JzdF9pKSwgIC8vIFJlZ3VsYXIgUmVzZXQgc2lnbmFsCisKKyAgICAud2JzX2N5Y19pICAgKHdiZF9leHRfY3ljX2kpLCAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAud2JzX3N0Yl9pICAgKHdiZF9leHRfc3RiX2kpLCAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAud2JzX2Fkcl9pICAgKHdiZF9leHRfYWRyX2kpLCAgLy8gYWRkcmVzcworICAgIC53YnNfd2VfaSAgICAod2JkX2V4dF93ZV9pKSwgIC8vIHdyaXRlCisgICAgLndic19kYXRfaSAgICh3YmRfZXh0X2RhdF9pKSwgIC8vIGRhdGEgb3V0cHV0CisgICAgLndic19zZWxfaSAgICh3YmRfZXh0X3NlbF9pKSwgIC8vIGJ5dGUgZW5hYmxlCisKKyAgICAud2JzX2RhdF9vICAgKHdiZF9leHRfZGF0X28pLCAgLy8gZGF0YSBpbnB1dAorICAgIC53YnNfYWNrX28gICAod2JkX2V4dF9hY2tfbyksICAvLyBhY2tub3dsZWdlbWVudAorCisgCisgICAgLy8gTG9naWMgQW5hbHl6ZXIgU2lnbmFscworICAgIC5sYV9kYXRhX2luICAgICAgKCcxKSAsCisgICAgLmxhX2RhdGFfb3V0ICAgICAoKSwKKyAgICAubGFfb2VuYiAgICAgICAgICgnMCksCisgCisKKyAgICAvLyBJT3MKKyAgICAuaW9faW4gICAgICAgICAgKGlvX2luKSAgLAorICAgIC5pb19vdXQgICAgICAgICAoaW9fb3V0KSAsCisgICAgLmlvX29lYiAgICAgICAgIChpb19vZWIpICwKKworICAgIC51c2VyX2lycSAgICAgICAoKSAKKworKTsKKworYGlmbmRlZiBHTCAvLyBEcml2ZSBQb3dlciBmb3IgSG9sZCBGaXggQnVmCisgICAgLy8gQWxsIHN0YW5kYXJkIGNlbGwgbmVlZCBwb3dlciBob29rLXVwIGZvciBmdW5jdGlvbmFsaXR5IHdvcmsKKyAgICBpbml0aWFsIGJlZ2luCisgICAgZW5kCitgZW5kaWYgICAgCisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICBJbnRlZ3JhdGUgdGhlIFNlcmlhbCBmbGFzaCB3aXRoIHF1cmQgc3VwcG9ydCB0bworLy8gIHVzZXIgY29yZSB1c2luZyB0aGUgZ3BpbyBwYWRzCisvLyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICB3aXJlIGZsYXNoX2NsayA9IGlvX291dFsyNF07CisgICB3aXJlIGZsYXNoX2NzYiA9IGlvX291dFsyOF07CisgICAvLyBDcmVhdGluZyBQYWQgRGVsYXkKKyAgIHdpcmUgIzEgaW9fb2ViXzI5ID0gaW9fb2ViWzI5XTsKKyAgIHdpcmUgIzEgaW9fb2ViXzMwID0gaW9fb2ViWzMwXTsKKyAgIHdpcmUgIzEgaW9fb2ViXzMxID0gaW9fb2ViWzMxXTsKKyAgIHdpcmUgIzEgaW9fb2ViXzMyID0gaW9fb2ViWzMyXTsKKyAgIHRyaSAgIzEgZmxhc2hfaW8wID0gKGlvX29lYl8yOT09IDEnYjApID8gaW9fb3V0WzI5XSA6IDEnYno7CisgICB0cmkgICMxIGZsYXNoX2lvMSA9IChpb19vZWJfMzA9PSAxJ2IwKSA/IGlvX291dFszMF0gOiAxJ2J6OworICAgdHJpICAjMSBmbGFzaF9pbzIgPSAoaW9fb2ViXzMxPT0gMSdiMCkgPyBpb19vdXRbMzFdIDogMSdiejsKKyAgIHRyaSAgIzEgZmxhc2hfaW8zID0gKGlvX29lYl8zMj09IDEnYjApID8gaW9fb3V0WzMyXSA6IDEnYno7CisKKyAgIGFzc2lnbiBpb19pblsyOV0gPSBmbGFzaF9pbzA7CisgICBhc3NpZ24gaW9faW5bMzBdID0gZmxhc2hfaW8xOworICAgYXNzaWduIGlvX2luWzMxXSA9IGZsYXNoX2lvMjsKKyAgIGFzc2lnbiBpb19pblszMl0gPSBmbGFzaF9pbzM7CisKKworICAgLy8gUXVhcmQgZmxhc2gKKyAgICAgczI1ZmwyNTZzICMoLm1lbV9maWxlX25hbWUoInVzZXJfdWFydC5oZXgiKSwKKwkgICAgICAgICAub3RwX2ZpbGVfbmFtZSgibm9uZSIpLCAKKyAgICAgICAgICAgICAgICAgLlRpbWluZ01vZGVsKCJTMjVGTDUxMlNBR01GSTAxMF9GXzMwcEYiKSkgCisJCSB1X3NwaV9mbGFzaF8yNTZtYgorICAgICAgICgKKyAgICAgICAgICAgLy8gRGF0YSBJbnB1dHMvT3V0cHV0cworICAgICAgIC5TSSAgICAgIChmbGFzaF9pbzApLAorICAgICAgIC5TTyAgICAgIChmbGFzaF9pbzEpLAorICAgICAgIC8vIENvbnRyb2xzCisgICAgICAgLlNDSyAgICAgKGZsYXNoX2NsayksCisgICAgICAgLkNTTmVnICAgKGZsYXNoX2NzYiksCisgICAgICAgLldQTmVnICAgKGZsYXNoX2lvMiksCisgICAgICAgLkhPTEROZWcgKGZsYXNoX2lvMyksCisgICAgICAgLlJTVE5lZyAgKCF3Yl9yc3RfaSkKKworICAgICAgICk7CisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICBVQVJUIEFnZW50IGludGVncmF0aW9uCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2lyZSB1YXJ0X3R4ZCx1YXJ0X3J4ZDsKKworYXNzaWduIHVhcnRfdHhkICAgPSBpb19vdXRbMl07Cithc3NpZ24gaW9faW5bMV0gID0gdWFydF9yeGQgOworIAordWFydF9hZ2VudCB0Yl91YXJ0KAorCS5tY2xrICAgICAgICAgICAgICAgIChjbG9jayAgICAgICAgICAgICAgKSwKKwkudHhkICAgICAgICAgICAgICAgICAodWFydF9yeGQgICAgICAgICAgICksCisJLnJ4ZCAgICAgICAgICAgICAgICAgKHVhcnRfdHhkICAgICAgICAgICApCisJKTsKKworCit0YXNrIHdiX3VzZXJfY29yZV93cml0ZTsKK2lucHV0IFszMTowXSBhZGRyZXNzOworaW5wdXQgWzMxOjBdIGRhdGE7CitiZWdpbgorICByZXBlYXQgKDEpIEAocG9zZWRnZSBjbG9jayk7CisgICMxOworICB3YmRfZXh0X2Fkcl9pID1hZGRyZXNzOyAgLy8gYWRkcmVzcworICB3YmRfZXh0X3dlX2kgID0naDE7ICAvLyB3cml0ZQorICB3YmRfZXh0X2RhdF9pID1kYXRhOyAgLy8gZGF0YSBvdXRwdXQKKyAgd2JkX2V4dF9zZWxfaSA9J2hGOyAgLy8gYnl0ZSBlbmFibGUKKyAgd2JkX2V4dF9jeWNfaSA9J2gxOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2JkX2V4dF9zdGJfaSA9J2gxOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgd2FpdCh3YmRfZXh0X2Fja19vID09IDEpOworICByZXBlYXQgKDEpIEAocG9zZWRnZSBjbG9jayk7CisgICMxOworICB3YmRfZXh0X2N5Y19pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X3N0Yl9pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICB3YmRfZXh0X2Fkcl9pID0naDA7ICAvLyBhZGRyZXNzCisgIHdiZF9leHRfd2VfaSAgPSdoMDsgIC8vIHdyaXRlCisgIHdiZF9leHRfZGF0X2kgPSdoMDsgIC8vIGRhdGEgb3V0cHV0CisgIHdiZF9leHRfc2VsX2kgPSdoMDsgIC8vIGJ5dGUgZW5hYmxlCisgICRkaXNwbGF5KCJERUJVRyBXQiBVU0VSIEFDQ0VTUyBXUklURSBBZGRyZXNzIDogJXgsIERhdGEgOiAleCIsYWRkcmVzcyxkYXRhKTsKKyAgcmVwZWF0ICgyKSBAKHBvc2VkZ2UgY2xvY2spOworZW5kCitlbmR0YXNrCisKK3Rhc2sgIHdiX3VzZXJfY29yZV9yZWFkOworaW5wdXQgWzMxOjBdIGFkZHJlc3M7CitvdXRwdXQgWzMxOjBdIGRhdGE7CityZWcgICAgWzMxOjBdIGRhdGE7CitiZWdpbgorICByZXBlYXQgKDEpIEAocG9zZWRnZSBjbG9jayk7CisgICMxOworICB3YmRfZXh0X2Fkcl9pID1hZGRyZXNzOyAgLy8gYWRkcmVzcworICB3YmRfZXh0X3dlX2kgID0naDA7ICAvLyB3cml0ZQorICB3YmRfZXh0X2RhdF9pID0nMDsgIC8vIGRhdGEgb3V0cHV0CisgIHdiZF9leHRfc2VsX2kgPSdoRjsgIC8vIGJ5dGUgZW5hYmxlCisgIHdiZF9leHRfY3ljX2kgPSdoMTsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfc3RiX2kgPSdoMTsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdhaXQod2JkX2V4dF9hY2tfbyA9PSAxKTsKKyAgZGF0YSAgPSB3YmRfZXh0X2RhdF9vOyAgCisgIHJlcGVhdCAoMSkgQChwb3NlZGdlIGNsb2NrKTsKKyAgIzE7CisgIHdiZF9leHRfY3ljX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfc3RiX2kgPSdoMDsgIC8vIHN0cm9iZS9yZXF1ZXN0CisgIHdiZF9leHRfYWRyX2kgPSdoMDsgIC8vIGFkZHJlc3MKKyAgd2JkX2V4dF93ZV9pICA9J2gwOyAgLy8gd3JpdGUKKyAgd2JkX2V4dF9kYXRfaSA9J2gwOyAgLy8gZGF0YSBvdXRwdXQKKyAgd2JkX2V4dF9zZWxfaSA9J2gwOyAgLy8gYnl0ZSBlbmFibGUKKyAgJGRpc3BsYXkoIkRFQlVHIFdCIFVTRVIgQUNDRVNTIFJFQUQgQWRkcmVzcyA6ICV4LCBEYXRhIDogJXgiLGFkZHJlc3MsZGF0YSk7CisgIHJlcGVhdCAoMikgQChwb3NlZGdlIGNsb2NrKTsKK2VuZAorZW5kdGFzaworCitgaWZkZWYgR0wKKword2lyZSAgICAgICAgd2JkX3NwaV9zdGJfaSAgID0gdV90b3AudV9zcGlfbWFzdGVyLndiZF9zdGJfaTsKK3dpcmUgICAgICAgIHdiZF9zcGlfYWNrX28gICA9IHVfdG9wLnVfc3BpX21hc3Rlci53YmRfYWNrX287Cit3aXJlICAgICAgICB3YmRfc3BpX3dlX2kgICAgPSB1X3RvcC51X3NwaV9tYXN0ZXIud2JkX3dlX2k7Cit3aXJlIFszMTowXSB3YmRfc3BpX2Fkcl9pICAgPSB1X3RvcC51X3NwaV9tYXN0ZXIud2JkX2Fkcl9pOword2lyZSBbMzE6MF0gd2JkX3NwaV9kYXRfaSAgID0gdV90b3AudV9zcGlfbWFzdGVyLndiZF9kYXRfaTsKK3dpcmUgWzMxOjBdIHdiZF9zcGlfZGF0X28gICA9IHVfdG9wLnVfc3BpX21hc3Rlci53YmRfZGF0X287Cit3aXJlIFszOjBdICB3YmRfc3BpX3NlbF9pICAgPSB1X3RvcC51X3NwaV9tYXN0ZXIud2JkX3NlbF9pOworCit3aXJlICAgICAgICB3YmRfc2RyYW1fc3RiX2kgPSB1X3RvcC51X3NkcmFtX2N0cmwud2Jfc3RiX2k7Cit3aXJlICAgICAgICB3YmRfc2RyYW1fYWNrX28gPSB1X3RvcC51X3NkcmFtX2N0cmwud2JfYWNrX287Cit3aXJlICAgICAgICB3YmRfc2RyYW1fd2VfaSAgPSB1X3RvcC51X3NkcmFtX2N0cmwud2Jfd2VfaTsKK3dpcmUgWzMxOjBdIHdiZF9zZHJhbV9hZHJfaSA9IHVfdG9wLnVfc2RyYW1fY3RybC53Yl9hZGRyX2k7Cit3aXJlIFszMTowXSB3YmRfc2RyYW1fZGF0X2kgPSB1X3RvcC51X3NkcmFtX2N0cmwud2JfZGF0X2k7Cit3aXJlIFszMTowXSB3YmRfc2RyYW1fZGF0X28gPSB1X3RvcC51X3NkcmFtX2N0cmwud2JfZGF0X287Cit3aXJlIFszOjBdICB3YmRfc2RyYW1fc2VsX2kgPSB1X3RvcC51X3NkcmFtX2N0cmwud2Jfc2VsX2k7CisKK3dpcmUgICAgICAgIHdiZF91YXJ0X3N0Yl9pICA9IHVfdG9wLnVfdWFydF9pMmNfdXNiLnJlZ19jczsKK3dpcmUgICAgICAgIHdiZF91YXJ0X2Fja19vICA9IHVfdG9wLnVfdWFydF9pMmNfdXNiLnJlZ19hY2s7Cit3aXJlICAgICAgICB3YmRfdWFydF93ZV9pICAgPSB1X3RvcC51X3VhcnRfaTJjX3VzYi5yZWdfd3I7Cit3aXJlIFs3OjBdICB3YmRfdWFydF9hZHJfaSAgPSB1X3RvcC51X3VhcnRfaTJjX3VzYi5yZWdfYWRkcjsKK3dpcmUgWzc6MF0gIHdiZF91YXJ0X2RhdF9pICA9IHVfdG9wLnVfdWFydF9pMmNfdXNiLnJlZ193ZGF0YTsKK3dpcmUgWzc6MF0gIHdiZF91YXJ0X2RhdF9vICA9IHVfdG9wLnVfdWFydF9pMmNfdXNiLnJlZ19yZGF0YTsKK3dpcmUgICAgICAgIHdiZF91YXJ0X3NlbF9pICA9IHVfdG9wLnVfdWFydF9pMmNfdXNiLnJlZ19iZTsKKworYGVuZGlmCisKKy8qKgorYGlmZGVmIEdMCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSSVNDIElNRU0gYW1kIERNRU0gTW9uaXRvcmluZyBUQVNLCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2BkZWZpbmUgUklTQ19DT1JFICB1c2VyX3VhcnRfdGIudV90b3AudV9jb3JlLnVfcmlzY3ZfdG9wCisKK2Fsd2F5c0AocG9zZWRnZSBgUklTQ19DT1JFLndiX2NsaykgYmVnaW4KKyAgICBpZihgUklTQ19DT1JFLndiZF9pbWVtX2Fja19pKQorICAgICAgICAgICRkaXNwbGF5KCJSSVNDVi1ERUJVRyA9PiBJTUVNIEFERFJFU1M6ICV4IFJlYWQgRGF0YSA6ICV4IiwgYFJJU0NfQ09SRS53YmRfaW1lbV9hZHJfbyxgUklTQ19DT1JFLndiZF9pbWVtX2RhdF9pKTsKKyAgICBpZihgUklTQ19DT1JFLndiZF9kbWVtX2Fja19pICYmIGBSSVNDX0NPUkUud2JkX2RtZW1fd2VfbykKKyAgICAgICAgICAkZGlzcGxheSgiUklTQ1YtREVCVUcgPT4gRE1FTSBBRERSRVNTOiAleCBXcml0ZSBEYXRhOiAleCBSZXNvbnNlOiAleCIsIGBSSVNDX0NPUkUud2JkX2RtZW1fYWRyX28sYFJJU0NfQ09SRS53YmRfZG1lbV9kYXRfbyk7CisgICAgaWYoYFJJU0NfQ09SRS53YmRfZG1lbV9hY2tfaSAmJiAhYFJJU0NfQ09SRS53YmRfZG1lbV93ZV9vKQorICAgICAgICAgICRkaXNwbGF5KCJSSVNDVi1ERUJVRyA9PiBETUVNIEFERFJFU1M6ICV4IFJFQUQgRGF0YSA6ICV4IFJlc29uc2U6ICV4IiwgYFJJU0NfQ09SRS53YmRfZG1lbV9hZHJfbyxgUklTQ19DT1JFLndiZF9kbWVtX2RhdF9pKTsKK2VuZAorCitgZW5kaWYKKyoqLworZW5kbW9kdWxlCitgZGVmYXVsdF9uZXR0eXBlIHdpcmUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvdXNlcl91YXJ0X21hc3Rlci9NYWtlZmlsZSBiL3Zlcmlsb2cvZHYvdXNlcl91YXJ0X21hc3Rlci9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTJjYWVmCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi91c2VyX3VhcnRfbWFzdGVyL01ha2VmaWxlCkBAIC0wLDAgKzEsOTIgQEAKKyMgU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMCBFZmFibGVzcyBDb3Jwb3JhdGlvbgorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKworIyMgQ2FyYXZlbCBQb2ludGVycworQ0FSQVZFTF9ST09UID89IC4uLy4uLy4uL2NhcmF2ZWwKK0NBUkFWRUxfUEFUSCA/PSAkKENBUkFWRUxfUk9PVCkKK0NBUkFWRUxfRklSTVdBUkVfUEFUSCA9ICQoQ0FSQVZFTF9QQVRIKS92ZXJpbG9nL2R2L2NhcmF2ZWwKK0NBUkFWRUxfVkVSSUxPR19QQVRIICA9ICQoQ0FSQVZFTF9QQVRIKS92ZXJpbG9nCitDQVJBVkVMX1JUTF9QQVRIID0gJChDQVJBVkVMX1ZFUklMT0dfUEFUSCkvcnRsCitDQVJBVkVMX0JFSEFWSU9VUkFMX01PREVMUyA9ICQoQ0FSQVZFTF9WRVJJTE9HX1BBVEgpL2R2L2NhcmF2ZWwKKworCisjIyBVc2VyIFByb2plY3QgUG9pbnRlcnMKK1VQUkpfVkVSSUxPR19QQVRIID89IC4uLy4uLy4uL3Zlcmlsb2cKK1VQUkpfUlRMX1BBVEggPSAkKFVQUkpfVkVSSUxPR19QQVRIKS9ydGwKK1VQUkpfR0xfUEFUSCA9ICQoVVBSSl9WRVJJTE9HX1BBVEgpL2dsCitVUFJKX0JFSEFWSU9VUkFMX01PREVMUyA9IC4uL21vZGVsCitVUFJKX0JFSEFWSU9VUkFMX0FHRU5UUyA9IC4uL2FnZW50cworVVBSSl9JTkNMVURFX1BBVEgxID0gJChVUFJKX1JUTF9QQVRIKS95aWZpdmUveWNyMWMvc3JjL2luY2x1ZGVzCitVUFJKX0lOQ0xVREVfUEFUSDIgPSAkKFVQUkpfUlRMX1BBVEgpL3NkcmFtX2N0cmwvc3JjL2RlZnMKK1VQUkpfSU5DTFVERV9QQVRIMyA9ICQoVVBSSl9SVExfUEFUSCkvaTJjbS9zcmMvaW5jbHVkZXMKK1VQUkpfSU5DTFVERV9QQVRINCA9ICQoVVBSSl9SVExfUEFUSCkvdXNiMV9ob3N0L3NyYy9pbmNsdWRlcworVVBSSl9JTkNMVURFX1BBVEg1ID0gJChVUFJKX1JUTF9QQVRIKS9tYmlzdC9pbmNsdWRlCisKKyMjIFlJRklWRSBGSVJNV0FSRQorWUlGSVZFX0ZJUk1XQVJFX1BBVEggPSAkKFVQUkpfVkVSSUxPR19QQVRIKS9kdi9maXJtd2FyZQorCisKKyMjIFNpbXVsYXRpb24gbW9kZTogUlRML0dMCitTSU0/PVJUTAorRFVNUD89T0ZGCisKKy5TVUZGSVhFUzoKKworUEFUVEVSTiA9IHVzZXJfdWFydF9tYXN0ZXIKKworYWxsOiAgJHtQQVRURVJOOj0udmNkfQorCisKK3Z2cDogICR7UEFUVEVSTjo9LnZ2cH0KKworJS52dnA6ICVfdGIudgoraWZlcSAoJChTSU0pLFJUTCkKKyAgIGlmZXEgKCQoRFVNUCksT0ZGKQorCWl2ZXJpbG9nIC1nMjAwNS1zdiAtREZVTkNUSU9OQUwgLURTSU0gLUkgJChQREtfUEFUSCkgXAorCS1JICQoQ0FSQVZFTF9CRUhBVklPVVJBTF9NT0RFTFMpIC1JICQoQ0FSQVZFTF9SVExfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9NT0RFTFMpICAgIC1JICQoVVBSSl9SVExfUEFUSCkgLUkgJChVUFJKX1ZFUklMT0dfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9BR0VOVFMpICAgIFwKKwktSSAkKFVQUkpfSU5DTFVERV9QQVRIMSkgICAgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDIpIC1JICQoVVBSSl9JTkNMVURFX1BBVEgzKSBcCisJLUkgJChVUFJKX0lOQ0xVREVfUEFUSDQpIC1JICQoVVBSSl9JTkNMVURFX1BBVEg1KSBcCisJJDwgLW8gJEAgCisgICAgZWxzZSAgCisJaXZlcmlsb2cgLWcyMDA1LXN2IC1EV0ZEVU1QIC1ERlVOQ1RJT05BTCAtRFNJTSAtSSAkKFBES19QQVRIKSBcCisJLUkgJChDQVJBVkVMX0JFSEFWSU9VUkFMX01PREVMUykgLUkgJChDQVJBVkVMX1JUTF9QQVRIKSBcCisJLUkgJChVUFJKX0JFSEFWSU9VUkFMX01PREVMUykgICAgLUkgJChVUFJKX1JUTF9QQVRIKSAtSSAkKFVQUkpfVkVSSUxPR19QQVRIKSBcCisJLUkgJChVUFJKX0JFSEFWSU9VUkFMX0FHRU5UUykgICAgXAorCS1JICQoVVBSSl9JTkNMVURFX1BBVEgxKSAgICAtSSAkKFVQUkpfSU5DTFVERV9QQVRIMikgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDMpIFwKKwktSSAkKFVQUkpfSU5DTFVERV9QQVRINCkgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDUpIFwKKwkkPCAtbyAkQCAKKyAgIGVuZGlmCitlbHNlICAKKwlpdmVyaWxvZyAtZzIwMDUtc3YgLURGVU5DVElPTkFMIC1EU0lNIC1ER0wgLUkgJChQREtfUEFUSCkgXAorCS1JICQoQ0FSQVZFTF9CRUhBVklPVVJBTF9NT0RFTFMpIC1JICQoQ0FSQVZFTF9SVExfUEFUSCkgLUkgJChDQVJBVkVMX1ZFUklMT0dfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9NT0RFTFMpIC1JICQoVVBSSl9HTF9QQVRIKSBcCisJLUkgJChVUFJKX0JFSEFWSU9VUkFMX0FHRU5UUykgICAgXAorCSQ8IC1vICRAIAorZW5kaWYKKworJS52Y2Q6ICUudnZwCisJdnZwICQ8CisKKworCisjIC0tLS0gQ2xlYW4gLS0tLQorCitjbGVhbjoKKwlybSAtZiAqLnZ2cCAqLnZjZCAqLmxvZyAKKworLlBIT05ZOiBjbGVhbiBhbGwKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvdXNlcl91YXJ0X21hc3Rlci9ydW5faXZlcmlsb2cgYi92ZXJpbG9nL2R2L3VzZXJfdWFydF9tYXN0ZXIvcnVuX2l2ZXJpbG9nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU0NjFmZDEKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3VzZXJfdWFydF9tYXN0ZXIvcnVuX2l2ZXJpbG9nCkBAIC0wLDAgKzEsNDIgQEAKKyMgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisjIC8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEsIERpbmVzaCBBbm5heXlhCisjIC8vIAorIyAvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyAvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgLy8KKyMgLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgLy8KKyMgLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyAvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyAvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyAvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMgLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyMgLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisjIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCityaXNjdjY0LXVua25vd24tZWxmLWdjYyAtTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICAtRF9fUlZDX0VYVCAtc3RhdGljIC1zdGQ9Z251OTkgLWZuby1jb21tb24gLWZuby1idWlsdGluLXByaW50ZiAtRFRDTT0xIC1XYSwtbWFyY2g9cnYzMmltYyAtbWFyY2g9cnYzMmltYyAtbWFiaT1pbHAzMiAtREZMQUdTX1NUUj1cIiItTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICJcIiAgLWMgLUkuLyAtSS4uLy4uL3J0bC9zeW50YWNvcmUvc2NyMS9zaW0vdGVzdHMvY29tbW9uICB1c2VyX3VhcnQuYyAtbyB1c2VyX3VhcnQubworCityaXNjdjY0LXVua25vd24tZWxmLWdjYyAtTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICAtRF9fUlZDX0VYVCAtc3RhdGljIC1zdGQ9Z251OTkgLWZuby1jb21tb24gLWZuby1idWlsdGluLXByaW50ZiAtRFRDTT0xIC1XYSwtbWFyY2g9cnYzMmltYyAtbWFyY2g9cnYzMmltYyAtbWFiaT1pbHAzMiAtREZMQUdTX1NUUj1cIiItTzIgLWZ1bnJvbGwtbG9vcHMgLWZwZWVsLWxvb3BzIC1mZ2NzZS1zbSAtZmdjc2UtbGFzICJcIiAgLURfX0FTU0VNQkxZX189MSAtYyAtSS4vIC1JLi4vLi4vcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9jb21tb24vICAuLi8uLi9ydGwvc3ludGFjb3JlL3NjcjEvc2ltL3Rlc3RzL2NvbW1vbi9jcnRfdGNtLlMgLW8gY3J0X3RjbS5vCisKK3Jpc2N2NjQtdW5rbm93bi1lbGYtZ2NjIC1vIHVzZXJfdWFydC5lbGYgLVQgLi4vLi4vcnRsL3N5bnRhY29yZS9zY3IxL3NpbS90ZXN0cy9jb21tb24vbGlua190Y20ubGQgdXNlcl91YXJ0Lm8gY3J0X3RjbS5vIC1ub3N0YXJ0ZmlsZXMgLW5vc3RkbGliIC1sYyAtbGdjYyAtbWFyY2g9cnYzMmltYyAtbWFiaT1pbHAzMgorCityaXNjdjY0LXVua25vd24tZWxmLW9iamNvcHkgLU8gdmVyaWxvZyB1c2VyX3VhcnQuZWxmIHVzZXJfdWFydC5oZXgKKworcmlzY3Y2NC11bmtub3duLWVsZi1vYmpkdW1wIC1EIHVzZXJfdWFydC5lbGYgPiB1c2VyX3VhcnQuZHVtcAorCitybSBjcnRfdGNtLm8gdXNlcl91YXJ0Lm8KKworI2l2ZXJpbG9nIHdpdGggd2F2ZWZvcm0gZHVtcAoraXZlcmlsb2cgLWcyMDA1LXN2IC1EV0ZEVU1QIC1ERlVOQ1RJT05BTCAtRFNJTSAtSSAkUERLX1BBVEggLUkgIC4uLy4uLy4uL2NhcmF2ZWwvdmVyaWxvZy9ydGwgIC1JIC4uLyAtSSAuLi8uLi8uLi92ZXJpbG9nL3J0bCAtSSAuLi8gLUkgLi4vLi4vLi4vdmVyaWxvZyAtSSAuLi8uLi8uLi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvaW5jbHVkZXMgICAtSSAuLi8uLi8uLi92ZXJpbG9nL3J0bC9zZHJhbV9jdHJsL3NyYy9kZWZzIC1JIC4uLy4uLy4uL3Zlcmlsb2cvcnRsL2kyY20vc3JjL2luY2x1ZGVzIC1JIC4uLy4uLy4uL3Zlcmlsb2cvcnRsL3VzYjFfaG9zdC9zcmMvaW5jbHVkZXMgLUkgJENBUkFWRUxfUk9PVC92ZXJpbG9nL2R2L2NhcmF2ZWwgLUkgLi4vbW9kZWwgLUkgLi4vYWdlbnRzIHVzZXJfdWFydF90Yi52IC1vIHVzZXJfdWFydF90Yi52dnAKKworCisjaXZlcmlsb2cgLWcyMDA1LXN2IC1JICRQREtfUEFUSCAtREZVTkNUSU9OQUwgLURTSU0gLUkgIC4uLy4uLy4uL2NhcmF2ZWwvdmVyaWxvZy9ydGwgLUkgLi4vIC1JIC4uLy4uLy4uL3Zlcmlsb2cvcnRsIC1JIC4uLy4uLy4uL3Zlcmlsb2cgLUkgLi4vLi4vLi4vdmVyaWxvZy9ydGwvc3ludGFjb3JlL3NjcjEvc3JjL2luY2x1ZGVzICAgLUkgLi4vLi4vLi4vdmVyaWxvZy9ydGwvc2RyYW1fY3RybC9zcmMvZGVmcyAtSSAkQ0FSQVZFTF9ST09UL3Zlcmlsb2cvZHYvY2FyYXZlbCAtSSAuLi9tb2RlbCAtSSAuLi9hZ2VudHMgdXNlcl91YXJ0X3RiLnYgLW8gdXNlcl91YXJ0X3RiLnZ2cAorCisjIEdMUyAKKyNpdmVyaWxvZyAtZzIwMDUtc3YgLUQgR0wgLUQgRlVOQ1RJT05BTCAtSSAkUERLX1BBVEggLUkgIC4uLy4uLy4uL2NhcmF2ZWwvdmVyaWxvZy9ydGwgIC1JIC4uLyAtSSAuLi8uLi8uLi92ZXJpbG9nL2dsIC1JIC4uLy4uLy4uL3Zlcmlsb2cgLUkgL2hvbWUvZGluZXNoYS93b3JrYXJlYS9wZGsvc2t5MTMwQSAtSSAuLi8uLi8uLi92ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvaW5jbHVkZXMgICAtSSAuLi8uLi8uLi92ZXJpbG9nL3J0bC9zZHJhbV9jdHJsL3NyYy9kZWZzIC1JICRDQVJBVkVMX1JPT1QvdmVyaWxvZy9kdi9jYXJhdmVsIC1JIC4uL21vZGVsIC1JIC4uL2FnZW50cyB1c2VyX3VhcnRfdGIudiAtbyB1c2VyX3VhcnRfdGIudnZwCisjCisKK3Z2cCB1c2VyX3VhcnRfdGIudnZwIHwgdGVlIHRlc3QubG9nCisKK1xybSAtcmYgdXNlcl91YXJ0X3RiLnZ2cApkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi91c2VyX3VhcnRfbWFzdGVyL3VzZXJfdWFydC5jIGIvdmVyaWxvZy9kdi91c2VyX3VhcnRfbWFzdGVyL3VzZXJfdWFydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5ZTAyMDQKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3VzZXJfdWFydF9tYXN0ZXIvdXNlcl91YXJ0LmMKQEAgLTAsMCArMSw0MyBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxLCBEaW5lc2ggQW5uYXl5YQorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworI2RlZmluZSBTQ19TSU1fT1VUUE9SVCAoMHhmMDAwMDAwMCkKKyNkZWZpbmUgdWludDMyX3QgIGxvbmcKKworCisjZGVmaW5lIHJlZ19tcHJqX3VhcnRfcmVnMCAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAxMDAwMCkKKyNkZWZpbmUgcmVnX21wcmpfdWFydF9yZWcxICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDEwMDA0KQorI2RlZmluZSByZWdfbXByal91YXJ0X3JlZzIgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMTAwMDgpCisjZGVmaW5lIHJlZ19tcHJqX3VhcnRfcmVnMyAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAxMDAwQykKKyNkZWZpbmUgcmVnX21wcmpfdWFydF9yZWc0ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDEwMDEwKQorI2RlZmluZSByZWdfbXByal91YXJ0X3JlZzUgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMTAwMTQpCisjZGVmaW5lIHJlZ19tcHJqX3VhcnRfcmVnNiAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgxMDAxMDAxOCkKKyNkZWZpbmUgcmVnX21wcmpfdWFydF9yZWc3ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDEwMDEwMDFDKQorI2RlZmluZSByZWdfbXByal91YXJ0X3JlZzggKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MTAwMTAwMjApCisKK2ludCBtYWluKCkKK3sKKworICAgIHdoaWxlKDEpIHsKKyAgICAgICAvLyBDaGVjayBVQVJUIFJYIGZpZm8gaGFzIGRhdGEsIGlmIGF2YWlsYWJsZSBsb29wIGJhY2sgdGhlIGRhdGEKKyAgICAgICBpZihyZWdfbXByal91YXJ0X3JlZzggIT0gMCkgeyAKKwkgICByZWdfbXByal91YXJ0X3JlZzUgPSByZWdfbXByal91YXJ0X3JlZzY7CisgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi91c2VyX3VhcnRfbWFzdGVyL3VzZXJfdWFydF9tYXN0ZXJfdGIudiBiL3Zlcmlsb2cvZHYvdXNlcl91YXJ0X21hc3Rlci91c2VyX3VhcnRfbWFzdGVyX3RiLnYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQxZmY1OQotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvdXNlcl91YXJ0X21hc3Rlci91c2VyX3VhcnRfbWFzdGVyX3RiLnYKQEAgLTAsMCArMSwzMDMgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6ICAyMDIxICwgRGluZXNoIEFubmF5eWEKKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IE1vZGlmaWVkIGJ5IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBTdGFuZGFsb25lIFVzZXIgdmFsaWRhdGlvbiBUZXN0IGJlbmNoICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgWUlGaXZlIGNvcmVzIHByb2plY3QgICAgICAgICAgICAgICAvLy8vCisvLy8vICBodHRwczovL2dpdGh1Yi5jb20vZGluZXNoYW5uYXl5YS95aWZpdmVfcjAuZ2l0ICAgICAgICAgICAgICAvLy8vCisvLy8vICBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvY29yZXMveWlmaXZlLyAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgVGhpcyBpcyBhIHN0YW5kYWxvbmUgdGVzdCBiZW5jaCB0byB2YWxpZGF0ZSB0aGUgICAgICAgICAgICAvLy8vCisvLy8vICAgRGlnaXRhbCBjb3JlIHVzaW5nIHVhcnQgbWFzdGVyIGkvZi4gICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUbyBEbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIG5vdGhpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBBdXRob3Iocyk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgLSBEaW5lc2ggQW5uYXl5YSwgZGluZXNoYUBvcGVuY29yZXMub3JnICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBSZXZpc2lvbiA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIDAuMSAtIDE2dGggRmViIDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIENvcHlyaWdodCAoQykgMjAwMCBBdXRob3JzIGFuZCBPUEVOQ09SRVMuT1JHICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgICAvLy8vCisvLy8vIHJlc3RyaWN0aW9uIHByb3ZpZGVkIHRoYXQgdGhpcyBjb3B5cmlnaHQgc3RhdGVtZW50IGlzIG5vdCAgICAvLy8vCisvLy8vIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSBhbmQgdGhhdCBhbnkgZGVyaXZhdGl2ZSB3b3JrIGNvbnRhaW5zICAvLy8vCisvLy8vIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLiAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgICAvLy8vCisvLy8vIGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAvLy8vCisvLy8vIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAvLy8vCisvLy8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgICAvLy8vCisvLy8vIGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSAgICAgICAvLy8vCisvLy8vIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgICAvLy8vCisvLy8vIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgICAgICAvLy8vCisvLy8vIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSAvLy8vCisvLy8vIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgICAvLy8vCisvLy8vIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBzb3VyY2U7IGlmIG5vdCwgZG93bmxvYWQgaXQgICAvLy8vCisvLy8vIGZyb20gaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2xncGwuc2h0bWwgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2BkZWZhdWx0X25ldHR5cGUgd2lyZQorCitgdGltZXNjYWxlIDEgbnMgLyAxIG5zCisKK2BpbmNsdWRlICJ1cHJqX25ldGxpc3RzLnYiCitgaW5jbHVkZSAidWFydF9hZ2VudC52IgorCisKK2BkZWZpbmUgQUREUl9TUEFDRV9VQVJUICAgIDMyJ2gzMDAxXzAwMDAKK2BkZWZpbmUgQUREUl9TUEFDRV9QSU5NVVggIDMyJ2gzMDAyXzAwMDAKKworCittb2R1bGUgdXNlcl91YXJ0X21hc3Rlcl90YjsKKworcmVnICAgICAgICAgICAgY2xvY2sgICAgICAgICA7CityZWcgICAgICAgICAgICB3Yl9yc3RfaSAgICAgIDsKK3JlZyAgICAgICAgICAgIHBvd2VyMSwgcG93ZXIyOworcmVnICAgICAgICAgICAgcG93ZXIzLCBwb3dlcjQ7CisKK3JlZyAgICAgICAgICAgIHdiZF9leHRfY3ljX2k7ICAvLyBzdHJvYmUvcmVxdWVzdAorcmVnICAgICAgICAgICAgd2JkX2V4dF9zdGJfaTsgIC8vIHN0cm9iZS9yZXF1ZXN0CityZWcgWzMxOjBdICAgICB3YmRfZXh0X2Fkcl9pOyAgLy8gYWRkcmVzcworcmVnICAgICAgICAgICAgd2JkX2V4dF93ZV9pOyAgLy8gd3JpdGUKK3JlZyBbMzE6MF0gICAgIHdiZF9leHRfZGF0X2k7ICAvLyBkYXRhIG91dHB1dAorcmVnIFszOjBdICAgICAgd2JkX2V4dF9zZWxfaTsgIC8vIGJ5dGUgZW5hYmxlCisKK3dpcmUgWzMxOjBdICAgIHdiZF9leHRfZGF0X287ICAvLyBkYXRhIGlucHV0Cit3aXJlICAgICAgICAgICB3YmRfZXh0X2Fja19vOyAgLy8gYWNrbm93bGVnZW1lbnQKK3dpcmUgICAgICAgICAgIHdiZF9leHRfZXJyX287ICAvLyBlcnJvcgorCisvLyBVc2VyIEkvTword2lyZSBbMzc6MF0gICAgaW9fb2ViICAgICAgICA7Cit3aXJlIFszNzowXSAgICBpb19vdXQgICAgICAgIDsKK3dpcmUgWzM3OjBdICAgIGlvX2luICAgICAgICAgOworCit3aXJlIFszNzowXSAgICBtcHJqX2lvICAgICAgIDsKK3dpcmUgWzc6MF0gICAgIG1wcmpfaW9fMCAgICAgOworcmVnICAgICAgICAgICAgdGVzdF9mYWlsICAgICA7CityZWcgWzMxOjBdICAgICByZWFkX2RhdGEgICAgIDsKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gVWFydCBDb25maWd1cmF0aW9uCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3JlZyBbMTowXSAgICAgIHVhcnRfZGF0YV9iaXQgICAgICAgIDsKK3JlZwkgICAgICAgdWFydF9zdG9wX2JpdHMgICAgICAgOyAvLyAwOiAxIHN0b3AgYml0OyAxOiAyIHN0b3AgYml0OworcmVnCSAgICAgICB1YXJ0X3N0aWNrX3Bhcml0eSAgICA7IC8vIDE6IGZvcmNlIGV2ZW4gcGFyaXR5CityZWcJICAgICAgIHVhcnRfcGFyaXR5X2VuICAgICAgIDsgLy8gcGFyaXR5IGVuYWJsZQorcmVnCSAgICAgICB1YXJ0X2V2ZW5fb2RkX3Bhcml0eSA7IC8vIDA6IG9kZCBwYXJpdHk7IDE6IGV2ZW4gcGFyaXR5CisKK3JlZyBbNzowXSAgICAgIHVhcnRfZGF0YSAgICAgICAgICAgIDsKK3JlZyBbMTU6MF0gICAgIHVhcnRfZGl2aXNvciAgICAgICAgIDsJLy8gZGl2aWRlZCBieSBuICogMTYKK3JlZyBbMTU6MF0gICAgIHVhcnRfdGltZW91dCAgICAgICAgIDsvLyB3YWl0IHRpbWUgbGltaXQKKworcmVnIFsxNTowXSAgICAgdWFydF9yeF9udSAgICAgICAgICAgOworcmVnIFsxNTowXSAgICAgdWFydF90eF9udSAgICAgICAgICAgOworcmVnIFs3OjBdICAgICAgdWFydF93cml0ZV9kYXRhIFswOjM5XTsKK3JlZyAJICAgICAgIHVhcnRfZmlmb19lbmFibGUgICAgIDsJLy8gZmlmbyBtb2RlIGRpc2FibGUKKworcmVnICBbMTI3OjBdICAgbGFfZGF0YV9pbjsKK3JlZyAgICAgICBmbGFnOworCisKK2ludGVnZXIgaSxqOworCisJLy8gRXh0ZXJuYWwgY2xvY2sgaXMgdXNlZCBieSBkZWZhdWx0LiAgTWFrZSB0aGlzIGFydGlmaWNpYWxseSBmYXN0IGZvciB0aGUKKwkvLyBzaW11bGF0aW9uLiAgTm9ybWFsbHkgdGhpcyB3b3VsZCBiZSBhIHNsb3cgY2xvY2sgYW5kIHRoZSBkaWdpdGFsIFBMTAorCS8vIHdvdWxkIGJlIHRoZSBmYXN0IGNsb2NrLgorCisJYWx3YXlzICMxMi41IGNsb2NrIDw9IChjbG9jayA9PT0gMSdiMCk7CisKKwlpbml0aWFsIGJlZ2luCisJCWNsb2NrID0gMDsKKwkJbGFfZGF0YV9pbiA9IDE7CisJZW5kCisKKwlgaWZkZWYgV0ZEVU1QCisJICAgaW5pdGlhbCBiZWdpbgorCSAgIAkkZHVtcGZpbGUoInJpc2NfYm9vdC52Y2QiKTsKKwkgICAJJGR1bXB2YXJzKDAsIHVzZXJfdWFydF9tYXN0ZXJfdGIpOworCSAgIGVuZAorICAgICAgIGBlbmRpZgorCisJaW5pdGlhbCBiZWdpbgorCQljbG9jayA9IDA7CisgICAgICAgICAgICAgICAgd2JkX2V4dF9jeWNfaSA9J2gwOyAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAgICAgICAgICAgICB3YmRfZXh0X3N0Yl9pID0naDA7ICAvLyBzdHJvYmUvcmVxdWVzdAorICAgICAgICAgICAgICAgIHdiZF9leHRfYWRyX2kgPSdoMDsgIC8vIGFkZHJlc3MKKyAgICAgICAgICAgICAgICB3YmRfZXh0X3dlX2kgID0naDA7ICAvLyB3cml0ZQorICAgICAgICAgICAgICAgIHdiZF9leHRfZGF0X2kgPSdoMDsgIC8vIGRhdGEgb3V0cHV0CisgICAgICAgICAgICAgICAgd2JkX2V4dF9zZWxfaSA9J2gwOyAgLy8gYnl0ZSBlbmFibGUKKwllbmQKK2luaXRpYWwKK2JlZ2luCisgICB3Yl9yc3RfaSA8PSAxJ2IxOworICAgdWFydF9kYXRhX2JpdCAgICAgICAgICAgPSAyJ2IxMTsKKyAgIHVhcnRfc3RvcF9iaXRzICAgICAgICAgID0gMTsgLy8gMDogMSBzdG9wIGJpdDsgMTogMiBzdG9wIGJpdDsKKyAgIHVhcnRfc3RpY2tfcGFyaXR5ICAgICAgID0gMDsgLy8gMTogZm9yY2UgZXZlbiBwYXJpdHkKKyAgIHVhcnRfcGFyaXR5X2VuICAgICAgICAgID0gMDsgLy8gcGFyaXR5IGVuYWJsZQorICAgdWFydF9ldmVuX29kZF9wYXJpdHkgICAgPSAxOyAvLyAwOiBvZGQgcGFyaXR5OyAxOiBldmVuIHBhcml0eQorICAgdWFydF9kaXZpc29yICAgICAgICAgICAgPSAxNTsvLyBkaXZpZGVkIGJ5IG4gKiAxNgorICAgdWFydF90aW1lb3V0ICAgICAgICAgICAgPSA2MDA7Ly8gd2FpdCB0aW1lIGxpbWl0CisgICB1YXJ0X2ZpZm9fZW5hYmxlICAgICAgICA9IDA7CS8vIGZpZm8gbW9kZSBkaXNhYmxlCisKKyAgIC8vIFVQREFURSB0aGUgUlRMIFVBUlQgTUFTVEVSCisgICBsYV9kYXRhX2luWzFdID0gMTsgLy8gIEVuYWJsZSBUcmFuc21pdCBQYXRoCisgICBsYV9kYXRhX2luWzJdID0gMTsgLy8gIEVuYWJsZSBSZWNlaXZlZCBQYXRoCisgICBsYV9kYXRhX2luWzNdID0gMTsgLy8gIEVuYWJsZSBSZWNlaXZlZCBQYXRoCisgICBsYV9kYXRhX2luWzE1OjRdID0gKCh1YXJ0X2Rpdmlzb3IrMSkvMTYpLTE7IC8vICBEaXZpc29yIHZhbHVlCisgICBsYV9kYXRhX2luWzE3OjE2XSA9IDInYjAwOyAvLyAgcHJpb3JpdHkgbW9kZSwgMCAtPiBub3AsIDEgLT4gRXZlbiwgMiAtPiBPZGQKKworICAgIzEwMDsKKyAgIHdiX3JzdF9pIDw9IDEnYjA7CSAgICAJLy8gUmVsZWFzZSByZXNldAorCisgICAkZGlzcGxheSgiTW9uaXRvcjogU3RhbmRhbG9uZSBVc2VyIFVhcnQgbWFzdGVyIFRlc3QgU3RhcnRlZCIpOworCisgICB0Yl9tYXN0ZXJfdWFydC5kZWJ1Z19tb2RlID0gMDsgLy8gZGlzYWJsZSBkZWJ1ZyBkaXNwbGF5CisgICB0Yl9tYXN0ZXJfdWFydC51YXJ0X2luaXQ7CisgICB0Yl9tYXN0ZXJfdWFydC5jb250cm9sX3NldHVwICh1YXJ0X2RhdGFfYml0LCB1YXJ0X3N0b3BfYml0cywgdWFydF9wYXJpdHlfZW4sIHVhcnRfZXZlbl9vZGRfcGFyaXR5LCAKKwkgICAgICAgICAgICAgICAgICAgICAgICAgIHVhcnRfc3RpY2tfcGFyaXR5LCB1YXJ0X3RpbWVvdXQsIHVhcnRfZGl2aXNvcik7CisKKyAgIC8vJHdyaXRlICgiXG4oJXQpUmVzcG9uc2U6XG4iLCR0aW1lKTsKKyAgIGZsYWcgPSAwOworICAgd2hpbGUoZmxhZyA9PSAwKQorICAgYmVnaW4KKyAgICAgICAgdGJfbWFzdGVyX3VhcnQucmVhZF9jaGFyKHJlYWRfZGF0YSxmbGFnKTsKKyAgICAgICAgJHdyaXRlICgiJWMiLHJlYWRfZGF0YSk7CisgICBlbmQKKworCisKKyAgIC8vIFJlbW92ZSBXYiBSZXNldAorICAgdWFydG1fcmVnX3dyaXRlKCdoMzA4MF8wMDAwLCdoMSk7CisKKyAgIHJlcGVhdCAoMikgQChwb3NlZGdlIGNsb2NrKTsKKyAgICMxOworCisgICAkZGlzcGxheSgiTW9uaXRvcjogV3JpdGluZyAgZXhwZWN0ZWQgdmFsdWUiKTsKKyAgIAorICAgdGVzdF9mYWlsID0gMDsKKyAgIHVhcnRtX3JlZ193cml0ZSgzMidoMzAwMjAwNTgsMzInaDExMjIzMzQ0KTsKKyAgIHVhcnRtX3JlZ193cml0ZSgzMidoMzAwMjAwNUMsMzInaDIyMzM0NDU1KTsKKyAgIHVhcnRtX3JlZ193cml0ZSgzMidoMzAwMjAwNjAsMzInaDMzNDQ1NTY2KTsKKyAgIHVhcnRtX3JlZ193cml0ZSgzMidoMzAwMjAwNjQsMzInaDQ0NTU2Njc3KTsKKyAgIHVhcnRtX3JlZ193cml0ZSgzMidoMzAwMjAwNjgsMzInaDU1NjY3Nzg4KTsKKyAgIHVhcnRtX3JlZ193cml0ZSgzMidoMzAwMjAwNkMsMzInaDY2Nzc4ODk5KTsKKworICAgdWFydG1fcmVnX3JlYWRfY2hlY2soMzInaDMwMDIwMDU4LDMyJ2gxMTIyMzM0NCk7CisgICB1YXJ0bV9yZWdfcmVhZF9jaGVjaygzMidoMzAwMjAwNUMsMzInaDIyMzM0NDU1KTsKKyAgIHVhcnRtX3JlZ19yZWFkX2NoZWNrKDMyJ2gzMDAyMDA2MCwzMidoMzM0NDU1NjYpOworICAgdWFydG1fcmVnX3JlYWRfY2hlY2soMzInaDMwMDIwMDY0LDMyJ2g0NDU1NjY3Nyk7CisgICB1YXJ0bV9yZWdfcmVhZF9jaGVjaygzMidoMzAwMjAwNjgsMzInaDU1NjY3Nzg4KTsKKyAgIHVhcnRtX3JlZ19yZWFkX2NoZWNrKDMyJ2gzMDAyMDA2QywzMidoNjY3Nzg4OTkpOworICAgCisgICAKKyAgIAorICAgJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworICAgaWYodGVzdF9mYWlsID09IDApIGJlZ2luCisgICAgICBgaWZkZWYgR0wKKyAgICAgICAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RhbmRhbG9uZSBVc2VyIFVBUlQgTWFzdGVyIChHTCkgUGFzc2VkIik7CisgICAgICBgZWxzZQorICAgICAgICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGFuZGFsb25lIFVzZXIgVWFydCBNYXN0ZXIgKFJUTCkgUGFzc2VkIik7CisgICAgICBgZW5kaWYKKyAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgYGlmZGVmIEdMCisgICAgICAgICAgICRkaXNwbGF5KCJNb25pdG9yOiBTdGFuZGFsb25lIFVzZXIgVWFydCBNYXN0ZXIgKEdMKSBGYWlsZWQiKTsKKyAgICAgICBgZWxzZQorICAgICAgICAgICAkZGlzcGxheSgiTW9uaXRvcjogU3RhbmRhbG9uZSBVc2VyIFVhcnQgTWFzdGVyIChSVEwpIEZhaWxlZCIpOworICAgICAgIGBlbmRpZgorICAgIGVuZAorICAgJGRpc3BsYXkoIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworICAgIzEwMAorICAgJGZpbmlzaDsKK2VuZAorCisKK3dpcmUgVVNFUl9WREQxVjggPSAxJ2IxOword2lyZSBWU1MgPSAxJ2IwOworCisKK3VzZXJfcHJvamVjdF93cmFwcGVyIHVfdG9wKAorYGlmZGVmIFVTRV9QT1dFUl9QSU5TCisgICAgLnZjY2QxKFVTRVJfVkREMVY4KSwJLy8gVXNlciBhcmVhIDEgMS44ViBzdXBwbHkKKyAgICAudnNzZDEoVlNTKSwJLy8gVXNlciBhcmVhIDEgZGlnaXRhbCBncm91bmQKK2BlbmRpZgorICAgIC53Yl9jbGtfaSAgICAgICAgKGNsb2NrKSwgIC8vIFN5c3RlbSBjbG9jaworICAgIC51c2VyX2Nsb2NrMiAgICAgKDEnYjEpLCAgLy8gUmVhbC10aW1lIGNsb2NrCisgICAgLndiX3JzdF9pICAgICAgICAod2JfcnN0X2kpLCAgLy8gUmVndWxhciBSZXNldCBzaWduYWwKKworICAgIC53YnNfY3ljX2kgICAod2JkX2V4dF9jeWNfaSksICAvLyBzdHJvYmUvcmVxdWVzdAorICAgIC53YnNfc3RiX2kgICAod2JkX2V4dF9zdGJfaSksICAvLyBzdHJvYmUvcmVxdWVzdAorICAgIC53YnNfYWRyX2kgICAod2JkX2V4dF9hZHJfaSksICAvLyBhZGRyZXNzCisgICAgLndic193ZV9pICAgICh3YmRfZXh0X3dlX2kpLCAgLy8gd3JpdGUKKyAgICAud2JzX2RhdF9pICAgKHdiZF9leHRfZGF0X2kpLCAgLy8gZGF0YSBvdXRwdXQKKyAgICAud2JzX3NlbF9pICAgKHdiZF9leHRfc2VsX2kpLCAgLy8gYnl0ZSBlbmFibGUKKworICAgIC53YnNfZGF0X28gICAod2JkX2V4dF9kYXRfbyksICAvLyBkYXRhIGlucHV0CisgICAgLndic19hY2tfbyAgICh3YmRfZXh0X2Fja19vKSwgIC8vIGFja25vd2xlZ2VtZW50CisKKyAKKyAgICAvLyBMb2dpYyBBbmFseXplciBTaWduYWxzCisgICAgLmxhX2RhdGFfaW4gICAgICAobGFfZGF0YV9pbikgLAorICAgIC5sYV9kYXRhX291dCAgICAgKCksCisgICAgLmxhX29lbmIgICAgICAgICAoJzApLAorIAorCisgICAgLy8gSU9zCisgICAgLmlvX2luICAgICAgICAgIChpb19pbikgICwKKyAgICAuaW9fb3V0ICAgICAgICAgKGlvX291dCkgLAorICAgIC5pb19vZWIgICAgICAgICAoaW9fb2ViKSAsCisKKyAgICAudXNlcl9pcnEgICAgICAgKCkgCisKKyk7CisKK2BpZm5kZWYgR0wgLy8gRHJpdmUgUG93ZXIgZm9yIEhvbGQgRml4IEJ1ZgorICAgIC8vIEFsbCBzdGFuZGFyZCBjZWxsIG5lZWQgcG93ZXIgaG9vay11cCBmb3IgZnVuY3Rpb25hbGl0eSB3b3JrCisgICAgaW5pdGlhbCBiZWdpbgorICAgIGVuZAorYGVuZGlmICAgIAorCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgVUFSVCBBZ2VudCBpbnRlZ3JhdGlvbgorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpcmUgdWFydF90eGQsdWFydF9yeGQ7CisKK2Fzc2lnbiB1YXJ0X3R4ZCAgID0gaW9fb3V0WzM1XTsKK2Fzc2lnbiBpb19pblszNF0gID0gdWFydF9yeGQgOworIAordWFydF9hZ2VudCB0Yl9tYXN0ZXJfdWFydCgKKwkubWNsayAgICAgICAgICAgICAgICAoY2xvY2sgICAgICAgICAgICAgICksCisJLnR4ZCAgICAgICAgICAgICAgICAgKHVhcnRfcnhkICAgICAgICAgICApLAorCS5yeGQgICAgICAgICAgICAgICAgICh1YXJ0X3R4ZCAgICAgICAgICAgKQorCSk7CisKKworCitgaW5jbHVkZSAidWFydF9tYXN0ZXJfdGFza3Muc3YiCitlbmRtb2R1bGUKK2BkZWZhdWx0X25ldHR5cGUgd2lyZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi92cGkvc3lzdGVtL3N5c3RlbS5jIGIvdmVyaWxvZy9kdi92cGkvc3lzdGVtL3N5c3RlbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1MDFhMDkKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3ZwaS9zeXN0ZW0vc3lzdGVtLmMKQEAgLTAsMCArMSw1MiBAQAorIyBpbmNsdWRlICA8dnBpX3VzZXIuaD4KKworc3RhdGljIGludCBzeXN0ZW1fY29tcGlsZXRmKGNoYXIqdXNlcl9kYXRhKQoreworICAgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3lzdGVtX2NhbGx0ZihjaGFyKm5hbWUpCit7CisgICAgICB2cGlIYW5kbGUgY2FsbGggPSB2cGlfaGFuZGxlKHZwaVN5c1RmQ2FsbCwgMCk7CisgICAgICB2cGlIYW5kbGUgYXJndiAgPSB2cGlfaXRlcmF0ZSh2cGlBcmd1bWVudCwgY2FsbGgpOworICAgICAgdnBpSGFuZGxlIGFyZ19oYW5kbGU7CisgICAgICBzX3ZwaV92YWx1ZSB2YWx1ZV9zOworCisKKyAgICAgIAkvKiBDaGVjayB0aGF0IHRoZXJlIGFyZSBhcmd1bWVudHMuICovCisgICAgICBpZiAoYXJndiA9PSAwKSB7CisJICAgIHZwaV9wcmludGYoIkVSUk9SOiAlczolZDogIiwgdnBpX2dldF9zdHIodnBpRmlsZSwgY2FsbGgpLAorCSAgICAgICAgICAgICAgIChpbnQpdnBpX2dldCh2cGlMaW5lTm8sIGNhbGxoKSk7CisJICAgIHZwaV9wcmludGYoIiVzIHJlcXVpcmVzIHR3byBhcmd1bWVudHMuXG4iLCBuYW1lKTsKKwkgICAgdnBpcF9zZXRfcmV0dXJuX3ZhbHVlKDEpOworCSAgICB2cGlfY29udHJvbCh2cGlGaW5pc2gsIDEpOworCSAgICByZXR1cm4gMDsKKyAgICAgIH0KKworICAgICAgLyogQ2hlY2sgdGhhdCB0aGUgZmlyc3QgYXJndW1lbnQgaXMgYSBzdHJpbmcuICovCisgICAgICBhcmdfaGFuZGxlID0gdnBpX3NjYW4oYXJndik7CisgICAgICB2cGlfZnJlZV9vYmplY3QoYXJndik7IC8qIG5vdCBjYWxsaW5nIHNjYW4gdW50aWwgcmV0dXJucyBudWxsICovCisgICAgICB2YWx1ZV9zLmZvcm1hdCA9IHZwaVN0cmluZ1ZhbDsgLyogcmVhZCBhcyBhIHN0cmluZyAqLworICAgICAgdnBpX2dldF92YWx1ZShhcmdfaGFuZGxlLCAgJnZhbHVlX3MpOworICAgICAgdnBpX3ByaW50ZigiU3lzdGVtIENtZDogJXNcbiIsdmFsdWVfcy52YWx1ZS5zdHIpOworICAgICAgc3lzdGVtKHZhbHVlX3MudmFsdWUuc3RyKTsKKyAgICAgIHJldHVybiAwOworfQorCit2b2lkIHN5c3RlbV9yZWdpc3RlcigpCit7CisgICAgICBzX3ZwaV9zeXN0Zl9kYXRhIHRmX2RhdGE7CisKKyAgICAgIHRmX2RhdGEudHlwZSAgICAgID0gdnBpU3lzVGFzazsKKyAgICAgIHRmX2RhdGEudGZuYW1lICAgID0gIiRzeXN0ZW0iOworICAgICAgdGZfZGF0YS5jYWxsdGYgICAgPSBzeXN0ZW1fY2FsbHRmOworICAgICAgdGZfZGF0YS5jb21waWxldGYgPSBzeXN0ZW1fY29tcGlsZXRmOworICAgICAgdGZfZGF0YS5zaXpldGYgICAgPSAwOworICAgICAgdGZfZGF0YS51c2VyX2RhdGEgPSAiJHN5c3RlbSI7CisgICAgICB2cGlfcmVnaXN0ZXJfc3lzdGYoJnRmX2RhdGEpOworfQorCit2b2lkICgqdmxvZ19zdGFydHVwX3JvdXRpbmVzW10pKCkgPSB7CisgICAgc3lzdGVtX3JlZ2lzdGVyLAorICAgIDAKK307CmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3diX3BvcnQvTWFrZWZpbGUgYi92ZXJpbG9nL2R2L3diX3BvcnQvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE5YmU2YQotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvZHYvd2JfcG9ydC9NYWtlZmlsZQpAQCAtMCwwICsxLDExNiBAQAorIyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIwIEVmYWJsZXNzIENvcnBvcmF0aW9uCisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIworIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorCisjIyBQREsgCitQREtfUEFUSCA9ICQoUERLX1JPT1QpL3NreTEzMEEKKworIyMgQ2FyYXZlbCBQb2ludGVycworQ0FSQVZFTF9ST09UID89IC4uLy4uLy4uL2NhcmF2ZWwKK0NBUkFWRUxfUEFUSCA/PSAkKENBUkFWRUxfUk9PVCkKK0NBUkFWRUxfRklSTVdBUkVfUEFUSCA9ICQoQ0FSQVZFTF9QQVRIKS92ZXJpbG9nL2R2L2NhcmF2ZWwKK0NBUkFWRUxfVkVSSUxPR19QQVRIICA9ICQoQ0FSQVZFTF9QQVRIKS92ZXJpbG9nCitDQVJBVkVMX1JUTF9QQVRIID0gJChDQVJBVkVMX1ZFUklMT0dfUEFUSCkvcnRsCitDQVJBVkVMX0JFSEFWSU9VUkFMX01PREVMUyA9ICQoQ0FSQVZFTF9WRVJJTE9HX1BBVEgpL2R2L2NhcmF2ZWwKKworIyMgVXNlciBQcm9qZWN0IFBvaW50ZXJzCitVUFJKX1ZFUklMT0dfUEFUSCA/PSAuLi8uLi8uLi92ZXJpbG9nCitVUFJKX1JUTF9QQVRIID0gJChVUFJKX1ZFUklMT0dfUEFUSCkvcnRsCitVUFJKX0dMX1BBVEggPSAkKFVQUkpfVkVSSUxPR19QQVRIKS9nbAorVVBSSl9CRUhBVklPVVJBTF9NT0RFTFMgPSAuLi8KK1VQUkpfSU5DTFVERV9QQVRIMSA9ICQoVVBSSl9SVExfUEFUSCkveWlmaXZlL3ljcjFjL3NyYy9pbmNsdWRlcworVVBSSl9JTkNMVURFX1BBVEgyID0gJChVUFJKX1JUTF9QQVRIKS9zZHJhbV9jdHJsL3NyYy9kZWZzCitVUFJKX0lOQ0xVREVfUEFUSDMgPSAkKFVQUkpfUlRMX1BBVEgpL2kyY20vc3JjL2luY2x1ZGVzCitVUFJKX0lOQ0xVREVfUEFUSDQgPSAkKFVQUkpfUlRMX1BBVEgpL3VzYjFfaG9zdC9zcmMvaW5jbHVkZXMKK1VQUkpfSU5DTFVERV9QQVRINSA9ICQoVVBSSl9SVExfUEFUSCkvbWJpc3QvaW5jbHVkZQorIyMgUklTQ1YgR0NDIAorR0NDX1BBVEg/PS9lZi9hcHBzL2JpbgorR0NDX1BSRUZJWD89cmlzY3YzMi11bmtub3duLWVsZgorR0NDNjRfUFJFRklYPz1yaXNjdjY0LXVua25vd24tZWxmCisKKyMjIFNpbXVsYXRpb24gbW9kZTogUlRML0dMCitTSU1fREVGSU5FUyA9IC1ERlVOQ1RJT05BTCAtRFNJTQorU0lNPz1SVEwKK0RVTVA/PU9GRgorCisuU1VGRklYRVM6CisKK1BBVFRFUk4gPSB3Yl9wb3J0CisKK2FsbDogICR7UEFUVEVSTjo9LnZjZH0KKworaGV4OiAgJHtQQVRURVJOOj0uaGV4fQorCit2dnA6ICAke1BBVFRFUk46PS52dnB9CisKKyUudnZwOiAlX3RiLnYgJS5oZXgKK2lmZXEgKCQoU0lNKSxSVEwpCisgICBpZmVxICgkKERVTVApLE9GRikKKwlpdmVyaWxvZyAtZzIwMDUtc3YgJChTSU1fREVGSU5FUykgLUkgJChQREtfUEFUSCkgXAorCS1JICQoQ0FSQVZFTF9CRUhBVklPVVJBTF9NT0RFTFMpIC1JICQoQ0FSQVZFTF9SVExfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9NT0RFTFMpICAgIC1JICQoVVBSSl9SVExfUEFUSCkgLUkgJChVUFJKX1ZFUklMT0dfUEFUSCkgXAorCS1JICQoVVBSSl9JTkNMVURFX1BBVEgxKSAgICAtSSAkKFVQUkpfSU5DTFVERV9QQVRIMikgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDMpIFwKKwktSSAkKFVQUkpfSU5DTFVERV9QQVRINCkgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDUpIFwKKwkkPCAtbyAkQCAKKyAgICBlbHNlICAKKwlpdmVyaWxvZyAtZzIwMDUtc3YgLURXRkRVTVAgJChTSU1fREVGSU5FUykgLUkgJChQREtfUEFUSCkgXAorCS1JICQoQ0FSQVZFTF9CRUhBVklPVVJBTF9NT0RFTFMpIC1JICQoQ0FSQVZFTF9SVExfUEFUSCkgXAorCS1JICQoVVBSSl9CRUhBVklPVVJBTF9NT0RFTFMpICAgIC1JICQoVVBSSl9SVExfUEFUSCkgLUkgJChVUFJKX1ZFUklMT0dfUEFUSCkgXAorCS1JICQoVVBSSl9JTkNMVURFX1BBVEgxKSAgICAtSSAkKFVQUkpfSU5DTFVERV9QQVRIMikgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDMpIFwKKwktSSAkKFVQUkpfSU5DTFVERV9QQVRINCkgLUkgJChVUFJKX0lOQ0xVREVfUEFUSDUpIFwKKwkkPCAtbyAkQCAKKyAgIGVuZGlmCitlbHNlICAKKwlpdmVyaWxvZyAkKFNJTV9ERUZJTkVTKSAtREdMIC1JICQoUERLX1BBVEgpIFwKKwktSSAkKENBUkFWRUxfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSAkKENBUkFWRUxfUlRMX1BBVEgpIC1JICQoQ0FSQVZFTF9WRVJJTE9HX1BBVEgpIFwKKwktSSAkKFVQUkpfQkVIQVZJT1VSQUxfTU9ERUxTKSAtSSQoVVBSSl9HTF9QQVRIKSAgLUkkKFVQUkpfUlRMX1BBVEgpICAtSSAkKFVQUkpfVkVSSUxPR19QQVRIKSBcCisJJDwgLW8gJEAgCitlbmRpZgorCislLnZjZDogJS52dnAKKwl2dnAgJDwKKworJS5lbGY6ICUuYyAkKENBUkFWRUxfRklSTVdBUkVfUEFUSCkvc2VjdGlvbnMubGRzICQoQ0FSQVZFTF9GSVJNV0FSRV9QQVRIKS9zdGFydC5zIGNoZWNrLWVudgorCSR7R0NDNjRfUFJFRklYfS1nY2MgLUkgJChDQVJBVkVMX1BBVEgpIC1tYXJjaD1ydjMyaW1jIC1tYWJpPWlscDMyIC1XbCwtQnN0YXRpYywtVCwkKENBUkFWRUxfRklSTVdBUkVfUEFUSCkvc2VjdGlvbnMubGRzLC0tc3RyaXAtZGVidWcgLWZmcmVlc3RhbmRpbmcgLW5vc3RkbGliIC1vICRAICQoQ0FSQVZFTF9GSVJNV0FSRV9QQVRIKS9zdGFydC5zICQ8CisKKyUuaGV4OiAlLmVsZgorCSR7R0NDNjRfUFJFRklYfS1vYmpjb3B5IC1PIHZlcmlsb2cgJDwgJEAgCisJIyB0byBmaXggZmxhc2ggYmFzZSBhZGRyZXNzCisJc2VkIC1pICdzL0AxMDAwMDAwMC9AMDAwMDAwMDAvZycgJEAKKworJS5iaW46ICUuZWxmCisJJHtHQ0M2NF9QUkVGSVh9LW9iamNvcHkgLU8gYmluYXJ5ICQ8IC9kZXYvc3Rkb3V0IHwgdGFpbCAtYyArMTA0ODU3NyA+ICRACisKK2NoZWNrLWVudjoKK2lmbmRlZiBQREtfUk9PVAorCSQoZXJyb3IgUERLX1JPT1QgaXMgdW5kZWZpbmVkLCBwbGVhc2UgZXhwb3J0IGl0IGJlZm9yZSBydW5uaW5nIG1ha2UpCitlbmRpZgoraWZlcSAoLCQod2lsZGNhcmQgJChQREtfUk9PVCkvc2t5MTMwQSkpCisJJChlcnJvciAkKFBES19ST09UKS9za3kxMzBBIG5vdCBmb3VuZCwgcGxlYXNlIGluc3RhbGwgcGRrIGJlZm9yZSBydW5uaW5nIG1ha2UpCitlbmRpZgorI2lmZXEgKCwkKHdpbGRjYXJkICQoR0NDNjRfUFJFRklYKS1nY2MgKSkKKyMJJChlcnJvciAkKEdDQzY0X1BSRUZJWCktZ2NjIGlzIG5vdCBmb3VuZCwgcGxlYXNlIGV4cG9ydCBHQ0NfUEFUSCBhbmQgR0NDX1BSRUZJWCBiZWZvcmUgcnVubmluZyBtYWtlKQorI2VuZGlmCisjIGNoZWNrIGZvciBlZmFibGVzcyBzdHlsZSBpbnN0YWxsYXRpb24KK2lmZXEgKCwkKHdpbGRjYXJkICQoUERLX1JPT1QpL3NreTEzMEEvbGlicy5yZWYvKi92ZXJpbG9nKSkKK1NJTV9ERUZJTkVTIDo9ICR7U0lNX0RFRklORVN9IC1ERUZfU1RZTEUKK2VuZGlmCisKKyMgLS0tLSBDbGVhbiAtLS0tCisKK2NsZWFuOgorCXJtIC1mICouZWxmICouaGV4ICouYmluICoudnZwICoudmNkICoubG9nCisKKy5QSE9OWTogY2xlYW4gaGV4IGFsbApkaWZmIC0tZ2l0IGEvdmVyaWxvZy9kdi93Yl9wb3J0L3J1bl92ZXJpbG9nIGIvdmVyaWxvZy9kdi93Yl9wb3J0L3J1bl92ZXJpbG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmZmVkM2MKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3diX3BvcnQvcnVuX3Zlcmlsb2cKQEAgLTAsMCArMSwyMCBAQAorIyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyMgLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSwgRGluZXNoIEFubmF5eWEKKyMgLy8gCisjIC8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIC8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAvLworIyAvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAvLworIyAvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIC8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIC8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIC8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIyAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorIyAvLyBTUERYLUZpbGVDb250cmlidXRvcjogRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKyMgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworI2l2ZXJpbG9nIC1nMjAwNS1zdiAtREZVTkNUSU9OQUwgLURTSU0gLURHTCAtSSAvaG9tZS9kaW5lc2hhL3dvcmthcmVhL3Bkay9za3kxMzBBIC1JIC9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9jYXJhdmVsL3Zlcmlsb2cvZHYvY2FyYXZlbCAtSSAvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvY2FyYXZlbC92ZXJpbG9nL3J0bCAtSSAvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvY2FyYXZlbC92ZXJpbG9nIC1JIC4uLyAtSS4uLy4uLy4uL3Zlcmlsb2cvcnRsIC1JLi4vLi4vLi4vdmVyaWxvZy9nbCAgLUkgLi4vLi4vLi4vdmVyaWxvZyB3Yl9wb3J0X3RiLnYgLW8gd2JfcG9ydC52dnAKK2l2ZXJpbG9nIC1nMjAwNS1zdiAtRFdGRFVNUCAtREZVTkNUSU9OQUwgLURTSU0gLURHTCAtSSAvaG9tZS9kaW5lc2hhL3dvcmthcmVhL3Bkay9za3kxMzBBIC1JIC9ob21lL2RpbmVzaGEvd29ya2FyZWEvb3BlbmNvcmUvZ2l0L3lpZml2ZV9yMC9jYXJhdmVsL3Zlcmlsb2cvZHYvY2FyYXZlbCAtSSAvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvY2FyYXZlbC92ZXJpbG9nL3J0bCAtSSAvaG9tZS9kaW5lc2hhL3dvcmthcmVhL29wZW5jb3JlL2dpdC95aWZpdmVfcjAvY2FyYXZlbC92ZXJpbG9nIC1JIC4uLyAtSS4uLy4uLy4uL3Zlcmlsb2cvcnRsIC1JLi4vLi4vLi4vdmVyaWxvZy9nbCAgLUkgLi4vLi4vLi4vdmVyaWxvZyB3Yl9wb3J0X3RiLnYgLW8gd2JfcG9ydC52dnAKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvZHYvd2JfcG9ydC93Yl9wb3J0LmMgYi92ZXJpbG9nL2R2L3diX3BvcnQvd2JfcG9ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2NDljNjcKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL2R2L3diX3BvcnQvd2JfcG9ydC5jCkBAIC0wLDAgKzEsMTUzIEBACisvKgorICogU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMCBFZmFibGVzcyBDb3Jwb3JhdGlvbgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKi8KKworLy8gVGhpcyBpbmNsdWRlIGlzIHJlbGF0aXZlIHRvICRDQVJBVkVMX1BBVEggKHNlZSBNYWtlZmlsZSkKKyNpbmNsdWRlICJ2ZXJpbG9nL2R2L2NhcmF2ZWwvZGVmcy5oIgorI2luY2x1ZGUgInZlcmlsb2cvZHYvY2FyYXZlbC9zdHViLmMiCisKKy8vIFVzZXIgUHJvamVjdCBTbGF2ZXMgKDB4MzAwMF8wMDAwKQorI2RlZmluZSByZWdfbXByal9zbGF2ZSAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAwMDAwMCkKKworI2RlZmluZSByZWdfbXByal93Ymhvc3RfcmVnMCAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDgwMDAwMCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMCAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMjAwMDApCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzEgICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDIwMDA0KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcyICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAyMDAwOCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMyAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMjAwMEMpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzQgICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDIwMDEwKQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWc1ICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAyMDAxNCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnNiAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMjAwMTgpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzcgICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDIwMDFDKQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWc4ICAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAyMDAyMCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnOSAgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMjAwMjQpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzEwICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDIwMDI4KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcxMSAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAyMDAyQykKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMTIgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMjAwMzApCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzEzICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDIwMDM0KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcxNCAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAyMDAzOCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMTUgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMjAwM0MpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzE2ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDIwMDQwKQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcxNyAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAyMDA0NCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMTggKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMjAwNDgpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzE5ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDIwMDRDKQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcyMCAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAyMDA1MCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMjEgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMjAwNTQpCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzIyICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDIwMDU4KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcyMyAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAyMDA1QykKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMjQgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMjAwNjApCisjZGVmaW5lIHJlZ19tcHJqX2dsb2JsX3JlZzI1ICgqKHZvbGF0aWxlIHVpbnQzMl90KikweDMwMDIwMDY0KQorI2RlZmluZSByZWdfbXByal9nbG9ibF9yZWcyNiAoKih2b2xhdGlsZSB1aW50MzJfdCopMHgzMDAyMDA2OCkKKyNkZWZpbmUgcmVnX21wcmpfZ2xvYmxfcmVnMjcgKCoodm9sYXRpbGUgdWludDMyX3QqKTB4MzAwMjAwNkMpCisKKworLyoKKwlXaXNoYm9uZSBUZXN0OgorCQktIENvbmZpZ3VyZXMgTVBSSiBsb3dlciA4LUlPIHBpbnMgYXMgb3V0cHV0cworCQktIENoZWNrcyBjb3VudGVyIHZhbHVlIHRocm91Z2ggdGhlIHdpc2hib25lIHBvcnQKKyovCitpbnQgaSA9IDA7IAoraW50IGNsayA9IDA7CisKK3ZvaWQgbWFpbigpCit7CisKKwlpbnQgYkZhaWwgPSAwOworCS8qIAorCUlPIENvbnRyb2wgUmVnaXN0ZXJzCisJfCBETSAgICAgfCBWVFJJUCB8IFNMT1cgIHwgQU5fUE9MIHwgQU5fU0VMIHwgQU5fRU4gfCBNT0RfU0VMIHwgSU5QX0RJUyB8IEhPTERIIHwgT0VCX04gfCBNR01UX0VOIHwKKwl8IDMtYml0cyB8IDEtYml0IHwgMS1iaXQgfCAxLWJpdCAgfCAxLWJpdCAgfCAxLWJpdCB8IDEtYml0ICAgfCAxLWJpdCAgIHwgMS1iaXQgfCAxLWJpdCB8IDEtYml0ICAgfAorCU91dHB1dDogMDAwMF8wMTEwXzAwMDBfMTExMCAgKDB4MTgwOCkgPSBHUElPX01PREVfVVNFUl9TVERfT1VUUFVUCisJfCBETSAgICAgfCBWVFJJUCB8IFNMT1cgIHwgQU5fUE9MIHwgQU5fU0VMIHwgQU5fRU4gfCBNT0RfU0VMIHwgSU5QX0RJUyB8IEhPTERIIHwgT0VCX04gfCBNR01UX0VOIHwKKwl8IDExMCAgICB8IDAgICAgIHwgMCAgICAgfCAwICAgICAgfCAwICAgICAgfCAwICAgICB8IDAgICAgICAgfCAxICAgICAgIHwgMCAgICAgfCAwICAgICB8IDAgICAgICAgfAorCQorCSAKKwlJbnB1dDogMDAwMF8wMDAxXzAwMDBfMTExMSAoMHgwNDAyKSA9IEdQSU9fTU9ERV9VU0VSX1NURF9JTlBVVF9OT1BVTEwKKwl8IERNICAgICB8IFZUUklQIHwgU0xPVyAgfCBBTl9QT0wgfCBBTl9TRUwgfCBBTl9FTiB8IE1PRF9TRUwgfCBJTlBfRElTIHwgSE9MREggfCBPRUJfTiB8IE1HTVRfRU4gfAorCXwgMDAxICAgIHwgMCAgICAgfCAwICAgICB8IDAgICAgICB8IDAgICAgICB8IDAgICAgIHwgMCAgICAgICB8IDAgICAgICAgfCAwICAgICB8IDEgICAgIHwgMCAgICAgICB8CisJKi8KKworCS8qIFNldCB1cCB0aGUgaG91c2VrZWVwaW5nIFNQSSB0byBiZSBjb25uZWN0ZWQgaW50ZXJuYWxseSBzbwkqLworCS8qIHRoYXQgZXh0ZXJuYWwgcGluIGNoYW5nZXMgZG9uJ3QgYWZmZWN0IGl0LgkJCSovCisKKwlyZWdfc3BpbWFzdGVyX2NvbmZpZyA9IDB4YTAwMjsJLy8gRW5hYmxlLCBwcmVzY2FsZXIgPSAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbm5lY3QgdG8gaG91c2VrZWVwaW5nIFNQSQorCisJLy8gQ29ubmVjdCB0aGUgaG91c2VrZWVwaW5nIFNQSSB0byB0aGUgU1BJIG1hc3RlcgorCS8vIHNvIHRoYXQgdGhlIENTQiBsaW5lIGlzIG5vdCBsZWZ0IGZsb2F0aW5nLiAgVGhpcyBhbGxvd3MKKwkvLyBhbGwgb2YgdGhlIEdQSU8gcGlucyB0byBiZSB1c2VkIGZvciB1c2VyIGZ1bmN0aW9ucy4KKworICAgIHJlZ19tcHJqX2lvXzMxID0gR1BJT19NT0RFX01HTVRfU1REX09VVFBVVDsKKyAgICByZWdfbXByal9pb18zMCA9IEdQSU9fTU9ERV9NR01UX1NURF9PVVRQVVQ7CisgICAgcmVnX21wcmpfaW9fMjkgPSBHUElPX01PREVfTUdNVF9TVERfT1VUUFVUOworICAgIHJlZ19tcHJqX2lvXzI4ID0gR1BJT19NT0RFX01HTVRfU1REX09VVFBVVDsKKyAgICByZWdfbXByal9pb18yNyA9IEdQSU9fTU9ERV9NR01UX1NURF9PVVRQVVQ7CisgICAgcmVnX21wcmpfaW9fMjYgPSBHUElPX01PREVfTUdNVF9TVERfT1VUUFVUOworICAgIHJlZ19tcHJqX2lvXzI1ID0gR1BJT19NT0RFX01HTVRfU1REX09VVFBVVDsKKyAgICByZWdfbXByal9pb18yNCA9IEdQSU9fTU9ERV9NR01UX1NURF9PVVRQVVQ7CisgICAgcmVnX21wcmpfaW9fMjMgPSBHUElPX01PREVfTUdNVF9TVERfT1VUUFVUOworICAgIHJlZ19tcHJqX2lvXzIyID0gR1BJT19NT0RFX01HTVRfU1REX09VVFBVVDsKKyAgICByZWdfbXByal9pb18yMSA9IEdQSU9fTU9ERV9NR01UX1NURF9PVVRQVVQ7CisgICAgcmVnX21wcmpfaW9fMjAgPSBHUElPX01PREVfTUdNVF9TVERfT1VUUFVUOworICAgIHJlZ19tcHJqX2lvXzE5ID0gR1BJT19NT0RFX01HTVRfU1REX09VVFBVVDsKKyAgICByZWdfbXByal9pb18xOCA9IEdQSU9fTU9ERV9NR01UX1NURF9PVVRQVVQ7CisgICAgcmVnX21wcmpfaW9fMTcgPSBHUElPX01PREVfTUdNVF9TVERfT1VUUFVUOworICAgIHJlZ19tcHJqX2lvXzE2ID0gR1BJT19NT0RFX01HTVRfU1REX09VVFBVVDsKKworICAgICAvKiBBcHBseSBjb25maWd1cmF0aW9uICovCisgICAgcmVnX21wcmpfeGZlciA9IDE7CisgICAgd2hpbGUgKHJlZ19tcHJqX3hmZXIgPT0gMSk7CisKKyAgICByZWdfbGEyX29lbmIgPSByZWdfbGEyX2llbmEgPSAweEZGRkZGRkZGOyAgICAvLyBbOTU6NjRdCisgICAgcmVnX2xhMF9kYXRhID0gMHgwMDA7CisgICAgcmVnX2xhMF9kYXRhID0gMHgwMDE7IC8vIFJlbW92ZSBTb2Z0IFJlc2V0CisKKyAgICAvLyBGbGFnIHN0YXJ0IG9mIHRoZSB0ZXN0CisJcmVnX21wcmpfZGF0YWwgPSAweEFCNjAwMDAwOworCisgICAgLy8gUmVtb3ZlIFdpc2hib25lIFJlc2V0CisgICAgcmVnX21wcmpfd2Job3N0X3JlZzAgPSAweDE7CisKKyAgICBpZiAocmVnX21wcmpfZ2xvYmxfcmVnMCAhPSAweDg5NDkwMjAxKSBiRmFpbCA9IDE7CisgICAgaWYgKHJlZ19tcHJqX2dsb2JsX3JlZzEgIT0gMHhBNTVBQTU1QSkgYkZhaWwgPSAxOworCisgICAgLy8gV3JpdGUgc29mdHdhcmUgV3JpdGUgJiBSZWFkIFJlZ2lzdGVyCisgICAgcmVnX21wcmpfZ2xvYmxfcmVnMjIgID0gMHgxMTIyMzM0NDsgCisgICAgcmVnX21wcmpfZ2xvYmxfcmVnMjMgID0gMHgyMjMzNDQ1NTsgCisgICAgcmVnX21wcmpfZ2xvYmxfcmVnMjQgID0gMHgzMzQ0NTU2NjsgCisgICAgcmVnX21wcmpfZ2xvYmxfcmVnMjUgID0gMHg0NDU1NjY3NzsgCisgICAgcmVnX21wcmpfZ2xvYmxfcmVnMjYgID0gMHg1NTY2Nzc4ODsgCisgICAgcmVnX21wcmpfZ2xvYmxfcmVnMjcgID0gMHg2Njc3ODg5OTsgCisKKworICAgIGlmIChyZWdfbXByal9nbG9ibF9yZWcyMiAgIT0gMHgxMTIyMzM0NCkgYkZhaWwgPSAxOworICAgIGlmIChiRmFpbCA9PSAxKSByZWdfbXByal9kYXRhbCA9IDB4QUI2MTAwMDA7CisgICAgaWYgKHJlZ19tcHJqX2dsb2JsX3JlZzIzICAhPSAweDIyMzM0NDU1KSBiRmFpbCA9IDE7CisgICAgaWYgKGJGYWlsID09IDEpIHJlZ19tcHJqX2RhdGFsID0gMHhBQjYyMDAwMDsKKyAgICBpZiAocmVnX21wcmpfZ2xvYmxfcmVnMjQgICE9IDB4MzM0NDU1NjYpIGJGYWlsID0gMTsKKyAgICBpZiAoYkZhaWwgPT0gMSkgcmVnX21wcmpfZGF0YWwgPSAweEFCNjMwMDAwOworICAgIGlmIChyZWdfbXByal9nbG9ibF9yZWcyNSAgIT0gMHg0NDU1NjY3NykgYkZhaWwgPSAxOworICAgIGlmIChiRmFpbCA9PSAxKSByZWdfbXByal9kYXRhbCA9IDB4QUI2NDAwMDA7CisgICAgaWYgKHJlZ19tcHJqX2dsb2JsX3JlZzI2ICE9IDB4NTU2Njc3ODgpIGJGYWlsID0gMTsKKyAgICBpZiAoYkZhaWwgPT0gMSkgcmVnX21wcmpfZGF0YWwgPSAweEFCNjUwMDAwOworICAgIGlmIChyZWdfbXByal9nbG9ibF9yZWcyNyAhPSAweDY2Nzc4ODk5KSBiRmFpbCA9IDE7CisgICAgaWYgKGJGYWlsID09IDEpIHJlZ19tcHJqX2RhdGFsID0gMHhBQjY2MDAwMDsKKworICAgIGlmKGJGYWlsID09IDApIHsKKyAgICAgICAgcmVnX21wcmpfZGF0YWwgPSAweEFCNkEwMDAwOworICAgIH0gZWxzZSB7CisgICAgICAgIHJlZ19tcHJqX2RhdGFsID0gMHhBQjYwMDAwMDsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS92ZXJpbG9nL2R2L3diX3BvcnQvd2JfcG9ydF90Yi52IGIvdmVyaWxvZy9kdi93Yl9wb3J0L3diX3BvcnRfdGIudgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGU4YmVlCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9kdi93Yl9wb3J0L3diX3BvcnRfdGIudgpAQCAtMCwwICsxLDE3NSBAQAorLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMCBFZmFibGVzcyBDb3Jwb3JhdGlvbgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisKK2BkZWZhdWx0X25ldHR5cGUgbm9uZQorCitgdGltZXNjYWxlIDEgbnMgLyAxIHBzCisKK2BpbmNsdWRlICJ1cHJqX25ldGxpc3RzLnYiCitgaW5jbHVkZSAiY2FyYXZlbF9uZXRsaXN0cy52IgorYGluY2x1ZGUgInNwaWZsYXNoLnYiCisKK21vZHVsZSB3Yl9wb3J0X3RiOworCXJlZyBjbG9jazsKKwlyZWcgUlNUQjsKKwlyZWcgQ1NCOworCXJlZyBwb3dlcjEsIHBvd2VyMjsKKwlyZWcgcG93ZXIzLCBwb3dlcjQ7CisKKwl3aXJlIGdwaW87CisJd2lyZSBbMzc6MF0gbXByal9pbzsKKwl3aXJlIFs3OjBdIG1wcmpfaW9fMDsKKwl3aXJlIFsxNTowXSBjaGVja2JpdHM7CisKKwlhc3NpZ24gY2hlY2tiaXRzID0gbXByal9pb1szMToxNl07CisKKwlhc3NpZ24gbXByal9pb1szXSA9IChDU0IgPT0gMSdiMSkgPyAxJ2IxIDogMSdiejsKKworCS8vIEV4dGVybmFsIGNsb2NrIGlzIHVzZWQgYnkgZGVmYXVsdC4gIE1ha2UgdGhpcyBhcnRpZmljaWFsbHkgZmFzdCBmb3IgdGhlCisJLy8gc2ltdWxhdGlvbi4gIE5vcm1hbGx5IHRoaXMgd291bGQgYmUgYSBzbG93IGNsb2NrIGFuZCB0aGUgZGlnaXRhbCBQTEwKKwkvLyB3b3VsZCBiZSB0aGUgZmFzdCBjbG9jay4KKworCWFsd2F5cyAjMTIuNSBjbG9jayA8PSAoY2xvY2sgPT09IDEnYjApOworCisJaW5pdGlhbCBiZWdpbgorCQljbG9jayA9IDA7CisJZW5kCisKKwlgaWZkZWYgV0ZEVU1QCisJaW5pdGlhbCBiZWdpbgorCQkkZHVtcGZpbGUoIndiX3BvcnQudmNkIik7CisJCSRkdW1wdmFycygxLCB3Yl9wb3J0X3RiKTsKKwkJJGR1bXB2YXJzKDIsIHdiX3BvcnRfdGIudXV0KTsKKwkJLy8kZHVtcHZhcnMoMSwgd2JfcG9ydF90Yi51dXQubXByaik7CisJCSRkdW1wdmFycygxLCB3Yl9wb3J0X3RiLnV1dC5tcHJqLnVfd2JfaG9zdCk7CisJCSRkdW1wdmFycygyLCB3Yl9wb3J0X3RiLnV1dC5tcHJqLnVfcGlubXV4KTsKKwllbmQKKyAgICAgICBgZW5kaWYKKworCWluaXRpYWwgYmVnaW4KKworCQkvLyBSZXBlYXQgY3ljbGVzIG9mIDEwMDAgY2xvY2sgZWRnZXMgYXMgbmVlZGVkIHRvIGNvbXBsZXRlIHRlc3RiZW5jaAorCQlyZXBlYXQgKDMwKSBiZWdpbgorCQkJcmVwZWF0ICgxMDAwKSBAKHBvc2VkZ2UgY2xvY2spOworCQkJLy8gJGRpc3BsYXkoIisxMDAwIGN5Y2xlcyIpOworCQllbmQKKwkJJGRpc3BsYXkoIiVjWzE7MzFtIiwyNyk7CisJCSRkaXNwbGF5ICgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCQlgaWZkZWYgR0wKKwkJCSRkaXNwbGF5ICgiTW9uaXRvcjogVGltZW91dCwgVGVzdCBNZWdhLVByb2plY3QgV0IgUG9ydCAoR0wpIEZhaWxlZCIpOworCQlgZWxzZQorCQkJJGRpc3BsYXkgKCJNb25pdG9yOiBUaW1lb3V0LCBUZXN0IE1lZ2EtUHJvamVjdCBXQiBQb3J0IChSVEwpIEZhaWxlZCIpOworCQlgZW5kaWYKKwkJJGRpc3BsYXkgKCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisJCSRkaXNwbGF5KCIlY1swbSIsMjcpOworCQkkZmluaXNoOworCWVuZAorCisJaW5pdGlhbCBiZWdpbgorCSAgIHdhaXQoY2hlY2tiaXRzID09IDE2J2ggQUI2MCk7CisJCSRkaXNwbGF5KCJNb25pdG9yOiBNUFJKLUxvZ2ljIFdCIFN0YXJ0ZWQiKTsKKwkJd2FpdChjaGVja2JpdHMgPT0gMTYnaCBBQjZBKTsKKwkJJGRpc3BsYXkgKCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisJCWBpZmRlZiBHTAorCSAgICAJJGRpc3BsYXkoIk1vbml0b3I6IE1lZ2EtUHJvamVjdCBXQiAoR0wpIFBhc3NlZCIpOworCQlgZWxzZQorCQkgICAgJGRpc3BsYXkoIk1vbml0b3I6IE1lZ2EtUHJvamVjdCBXQiAoUlRMKSBQYXNzZWQiKTsKKwkJYGVuZGlmCisJCSRkaXNwbGF5ICgiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCSAgICAkZmluaXNoOworCWVuZAorCisJaW5pdGlhbCBiZWdpbgorCQlSU1RCIDw9IDEnYjA7CisJCUNTQiAgPD0gMSdiMTsJCS8vIEZvcmNlIENTQiBoaWdoCisJCSMyMDAwOworCQlSU1RCIDw9IDEnYjE7CSAgICAJLy8gUmVsZWFzZSByZXNldAorCQkjMTcwMDAwOworCQlDU0IgPSAxJ2IwOwkJLy8gQ1NCIGNhbiBiZSByZWxlYXNlZAorCWVuZAorCisJaW5pdGlhbCBiZWdpbgkJLy8gUG93ZXItdXAgc2VxdWVuY2UKKwkJcG93ZXIxIDw9IDEnYjA7CisJCXBvd2VyMiA8PSAxJ2IwOworCQlwb3dlcjMgPD0gMSdiMDsKKwkJcG93ZXI0IDw9IDEnYjA7CisJCSMxMDA7CisJCXBvd2VyMSA8PSAxJ2IxOworCQkjMTAwOworCQlwb3dlcjIgPD0gMSdiMTsKKwkJIzEwMDsKKwkJcG93ZXIzIDw9IDEnYjE7CisJCSMxMDA7CisJCXBvd2VyNCA8PSAxJ2IxOworCWVuZAorCisJLy9hbHdheXMgQChtcHJqX2lvKSBiZWdpbgorCS8vCSMxICRkaXNwbGF5KCJNUFJKLUlPIHN0YXRlID0gJWIgIiwgbXByal9pb1s3OjBdKTsKKwkvL2VuZAorCisJd2lyZSBmbGFzaF9jc2I7CisJd2lyZSBmbGFzaF9jbGs7CisJd2lyZSBmbGFzaF9pbzA7CisJd2lyZSBmbGFzaF9pbzE7CisKKwl3aXJlIFZERDNWMyA9IHBvd2VyMTsKKwl3aXJlIFZERDFWOCA9IHBvd2VyMjsKKwl3aXJlIFVTRVJfVkREM1YzID0gcG93ZXIzOworCXdpcmUgVVNFUl9WREQxVjggPSBwb3dlcjQ7CisJd2lyZSBWU1MgPSAxJ2IwOworCisJY2FyYXZlbCB1dXQgKAorCQkudmRkaW8JICAoVkREM1YzKSwKKwkJLnZzc2lvCSAgKFZTUyksCisJCS52ZGRhCSAgKFZERDNWMyksCisJCS52c3NhCSAgKFZTUyksCisJCS52Y2NkCSAgKFZERDFWOCksCisJCS52c3NkCSAgKFZTUyksCisJCS52ZGRhMSAgICAoVVNFUl9WREQzVjMpLAorCQkudmRkYTIgICAgKFVTRVJfVkREM1YzKSwKKwkJLnZzc2ExCSAgKFZTUyksCisJCS52c3NhMgkgIChWU1MpLAorCQkudmNjZDEJICAoVVNFUl9WREQxVjgpLAorCQkudmNjZDIJICAoVVNFUl9WREQxVjgpLAorCQkudnNzZDEJICAoVlNTKSwKKwkJLnZzc2QyCSAgKFZTUyksCisJCS5jbG9jawkgIChjbG9jayksCisJCS5ncGlvICAgICAoZ3BpbyksCisgICAgICAgIC5tcHJqX2lvICAobXByal9pbyksCisJCS5mbGFzaF9jc2IoZmxhc2hfY3NiKSwKKwkJLmZsYXNoX2NsayhmbGFzaF9jbGspLAorCQkuZmxhc2hfaW8wKGZsYXNoX2lvMCksCisJCS5mbGFzaF9pbzEoZmxhc2hfaW8xKSwKKwkJLnJlc2V0YgkgIChSU1RCKQorCSk7CisKKwlzcGlmbGFzaCAjKAorCQkuRklMRU5BTUUoIndiX3BvcnQuaGV4IikKKwkpIHNwaWZsYXNoICgKKwkJLmNzYihmbGFzaF9jc2IpLAorCQkuY2xrKGZsYXNoX2NsayksCisJCS5pbzAoZmxhc2hfaW8wKSwKKwkJLmlvMShmbGFzaF9pbzEpLAorCQkuaW8yKCksCQkJLy8gbm90IHVzZWQKKwkJLmlvMygpCQkJLy8gbm90IHVzZWQKKwkpOworCitgaWZuZGVmIEdMIC8vIERyaXZlIFBvd2VyIGZvciBIb2xkIEZpeCBCdWYKKyAgICAvLyBBbGwgc3RhbmRhcmQgY2VsbCBuZWVkIHBvd2VyIGhvb2stdXAgZm9yIGZ1bmN0aW9uYWxpdHkgd29yaworICAgIGluaXRpYWwgYmVnaW4KKyAgICBlbmQKK2BlbmRpZiAgICAKK2VuZG1vZHVsZQorYGRlZmF1bHRfbmV0dHlwZSB3aXJlCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9jbGtfc2tld19hZGp1c3Qvc3JjL2Nsa19za2V3X2FkanVzdC5ndiBiL3Zlcmlsb2cvcnRsL2Nsa19za2V3X2FkanVzdC9zcmMvY2xrX3NrZXdfYWRqdXN0Lmd2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmZDFhNjIKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC9jbGtfc2tld19hZGp1c3Qvc3JjL2Nsa19za2V3X2FkanVzdC5ndgpAQCAtMCwwICsxLDIwNSBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxICwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgIAorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IENyZWF0ZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBjbG9jayBza2V3IGFkanVzdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBZSUZpdmUgY29yZXMgcHJvamVjdCAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHBzOi8vZ2l0aHViLmNvbS9kaW5lc2hhbm5heXlhL3lpZml2ZV9yMC5naXQgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9jb3Jlcy95aWZpdmUvICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICBUaGlzIGJsb2NrIGlzIHVzZWZ1bCBmb3IgZ2xvYmFsIGNsb2NrIHNrZXcgYWRqdXN0bWVudCAgIC8vLy8KKy8vLy8gICAgICBsb2dpYyBpbXBsZW1lbnRhdGlvbjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgIGNsa19vdXQgPSAoc2VsPTApID8gY2xrX2luIDogICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAoc2VsPTEpID8gY2xrX2QxIDogICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAoc2VsPTEpID8gY2xrX2QyIDogICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAuLi4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAoc2VsPTE1KT8gY2xrX2QxNSA6Y2xrX2luICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgIE5vdGU6IGVhY2ggZCogaW5kaWNhdGUgY2xrIGJ1ZiBkZWxheSAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcihzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAtIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFJldmlzaW9uIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC4wIC0gMjl0aCBGZWIgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgSW5pdGlhbCB2ZXJzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBDb3B5cmlnaHQgKEMpIDIwMDAgQXV0aG9ycyBhbmQgT1BFTkNPUkVTLk9SRyAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBmaWxlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCB3aXRob3V0ICAgICAgICAgLy8vLworLy8vLyByZXN0cmljdGlvbiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgICAgLy8vLworLy8vLyByZW1vdmVkIGZyb20gdGhlIGZpbGUgYW5kIHRoYXQgYW55IGRlcml2YXRpdmUgd29yayBjb250YWlucyAgLy8vLworLy8vLyB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGFzc29jaWF0ZWQgZGlzY2xhaW1lci4gLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0ICAgLy8vLworLy8vLyBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgLy8vLworLy8vLyBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgLy8vLworLy8vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55ICAgLy8vLworLy8vLyBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgICAgICAgLy8vLworLy8vLyB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkICAgLy8vLworLy8vLyB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSICAgICAgLy8vLworLy8vLyBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgLy8vLworLy8vLyBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAgLy8vLworLy8vLyBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgc291cmNlOyBpZiBub3QsIGRvd25sb2FkIGl0ICAgLy8vLworLy8vLyBmcm9tIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9sZ3BsLnNodG1sICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gQ2xvY2staW4gaXMgZWFzdCBwYWQgZGlyZWN0aW9uCisvLyBjbG9jayBvdXQgZ2l2ZSBpbiBvdGhlciB0aHJlZSBkaXJlY3Rpb24gZm9yIGJldHRlciBwbGFjZW1lbnQKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworbW9kdWxlIGNsa19za2V3X2FkanVzdCgKK2BpZmRlZiBVU0VfUE9XRVJfUElOUworICAgICB2Y2NkMSwvLyBVc2VyIGFyZWEgMSAxLjhWIHN1cHBseQorICAgICB2c3NkMSwvLyBVc2VyIGFyZWEgMSBkaWdpdGFsIGdyb3VuZAorYGVuZGlmCitjbGtfaW4sIHNlbCwgY2xrX291dCk7CisKKworYGlmZGVmIFVTRV9QT1dFUl9QSU5TCisgICAgIGlucHV0IHZjY2QxOy8vIFVzZXIgYXJlYSAxIDEuOFYgc3VwcGx5CisgICAgIGlucHV0IHZzc2QxOy8vIFVzZXIgYXJlYSAxIGRpZ2l0YWwgZ3JvdW5kCitgZW5kaWYKKyAgaW5wdXQgIGNsa19pbjsKKyAgb3V0cHV0IGNsa19vdXQ7CisgIGlucHV0IFszOjBdIHNlbDsKKyAgd2lyZSBpbjA7CisgIHdpcmUgaW4xOworICB3aXJlIGluMjsKKyAgd2lyZSBpbjM7CisgIHdpcmUgaW40OworICB3aXJlIGluNTsKKyAgd2lyZSBpbjY7CisgIHdpcmUgaW43OworICB3aXJlIGluODsKKyAgd2lyZSBpbjk7CisgIHdpcmUgaW4xMDsKKyAgd2lyZSBpbjExOworICB3aXJlIGluMTI7CisgIHdpcmUgaW4xMzsKKyAgd2lyZSBpbjE0OworICB3aXJlIGluMTU7CisKKyAgd2lyZSBjbGtfZDE7CisgIHdpcmUgY2xrX2QyOworICB3aXJlIGNsa19kMzsKKyAgd2lyZSBjbGtfZDQ7CisgIHdpcmUgY2xrX2Q1OworICB3aXJlIGNsa19kNjsKKyAgd2lyZSBjbGtfZDc7CisgIHdpcmUgY2xrX2Q4OworICB3aXJlIGNsa19kOTsKKyAgd2lyZSBjbGtfZDEwOworICB3aXJlIGNsa19kMTE7CisgIHdpcmUgY2xrX2QxMjsKKyAgd2lyZSBjbGtfZDEzOworICB3aXJlIGNsa19kMTQ7CisgIHdpcmUgY2xrX2QxNTsKKworICB3aXJlIGQwMDsKKyAgd2lyZSBkMDE7CisgIHdpcmUgZDAyOworICB3aXJlIGQwMzsKKyAgd2lyZSBkMDQ7CisgIHdpcmUgZDA1OworICB3aXJlIGQwNjsKKyAgd2lyZSBkMDc7CisgIHdpcmUgZDEwOworICB3aXJlIGQxMTsKKyAgd2lyZSBkMTI7CisgIHdpcmUgZDEzOworICB3aXJlIGQyMDsKKyAgd2lyZSBkMjE7CisgIHdpcmUgZDMwOworCisKKyAgc2t5MTMwX2ZkX3NjX2hkX19jbGtkbHlidWY0czE1XzIgY2xrYnVmXzEgICguQShjbGtfaW4pLCAgICAuWChjbGtfZDEpKTsKKyAgc2t5MTMwX2ZkX3NjX2hkX19jbGtkbHlidWY0czE1XzIgY2xrYnVmXzIgICguQShjbGtfZDEpLCAgICAuWChjbGtfZDIpKTsKKyAgc2t5MTMwX2ZkX3NjX2hkX19jbGtkbHlidWY0czE1XzIgY2xrYnVmXzMgICguQShjbGtfZDIpLCAgICAuWChjbGtfZDMpKTsKKyAgc2t5MTMwX2ZkX3NjX2hkX19jbGtkbHlidWY0czE1XzIgY2xrYnVmXzQgICguQShjbGtfZDMpLCAgICAuWChjbGtfZDQpKTsKKyAgc2t5MTMwX2ZkX3NjX2hkX19jbGtkbHlidWY0czE1XzIgY2xrYnVmXzUgICguQShjbGtfZDQpLCAgICAuWChjbGtfZDUpKTsKKyAgc2t5MTMwX2ZkX3NjX2hkX19jbGtkbHlidWY0czE1XzIgY2xrYnVmXzYgICguQShjbGtfZDUpLCAgICAuWChjbGtfZDYpKTsKKyAgc2t5MTMwX2ZkX3NjX2hkX19jbGtkbHlidWY0czE1XzIgY2xrYnVmXzcgICguQShjbGtfZDYpLCAgICAuWChjbGtfZDcpKTsKKyAgc2t5MTMwX2ZkX3NjX2hkX19jbGtkbHlidWY0czE1XzIgY2xrYnVmXzggICguQShjbGtfZDcpLCAgICAuWChjbGtfZDgpKTsKKyAgc2t5MTMwX2ZkX3NjX2hkX19jbGtkbHlidWY0czE1XzIgY2xrYnVmXzkgICguQShjbGtfZDgpLCAgICAuWChjbGtfZDkpKTsKKyAgc2t5MTMwX2ZkX3NjX2hkX19jbGtkbHlidWY0czE1XzIgY2xrYnVmXzEwICguQShjbGtfZDkpLCAgICAuWChjbGtfZDEwKSk7CisgIHNreTEzMF9mZF9zY19oZF9fY2xrZGx5YnVmNHMxNV8yIGNsa2J1Zl8xMSAoLkEoY2xrX2QxMCksICAgLlgoY2xrX2QxMSkpOworICBza3kxMzBfZmRfc2NfaGRfX2Nsa2RseWJ1ZjRzMTVfMiBjbGtidWZfMTIgKC5BKGNsa19kMTEpLCAgIC5YKGNsa19kMTIpKTsKKyAgc2t5MTMwX2ZkX3NjX2hkX19jbGtkbHlidWY0czE1XzIgY2xrYnVmXzEzICguQShjbGtfZDEyKSwgICAuWChjbGtfZDEzKSk7CisgIHNreTEzMF9mZF9zY19oZF9fY2xrZGx5YnVmNHMxNV8yIGNsa2J1Zl8xNCAoLkEoY2xrX2QxMyksICAgLlgoY2xrX2QxNCkpOworICBza3kxMzBfZmRfc2NfaGRfX2Nsa2RseWJ1ZjRzMTVfMiBjbGtidWZfMTUgKC5BKGNsa19kMTQpLCAgIC5YKGNsa19kMTUpKTsKKworCisgIC8vIFRhcCBwb2ludCBzZWxlY3Rpb24KKyAgYXNzaWduIGluMCAgPSBjbGtfaW47CisgIGFzc2lnbiBpbjEgID0gY2xrX2QxOworICBhc3NpZ24gaW4yICA9IGNsa19kMjsKKyAgYXNzaWduIGluMyAgPSBjbGtfZDM7CisgIGFzc2lnbiBpbjQgID0gY2xrX2Q0OworICBhc3NpZ24gaW41ICA9IGNsa19kNTsKKyAgYXNzaWduIGluNiAgPSBjbGtfZDY7CisgIGFzc2lnbiBpbjcgID0gY2xrX2Q3OworICBhc3NpZ24gaW44ICA9IGNsa19kODsKKyAgYXNzaWduIGluOSAgPSBjbGtfZDk7CisgIGFzc2lnbiBpbjEwID0gY2xrX2QxMDsKKyAgYXNzaWduIGluMTEgPSBjbGtfZDExOworICBhc3NpZ24gaW4xMiA9IGNsa19kMTI7CisgIGFzc2lnbiBpbjEzID0gY2xrX2QxMzsKKyAgYXNzaWduIGluMTQgPSBjbGtfZDE0OworICBhc3NpZ24gaW4xNSA9IGNsa19kMTU7CisKKworICAvLyBmaXJzdCBsZXZlbCBtdXggLSA4CisgIHNreTEzMF9mZF9zY19oZF9fbXV4Ml8xIHVfbXV4X2xldmVsXzAwICggLlggKGQwMCkgLCAuQTAgKGluMCksICAuQTEoaW4xKSwgIC5TKHNlbFswXSkpOworICBza3kxMzBfZmRfc2NfaGRfX211eDJfMSB1X211eF9sZXZlbF8wMSAoIC5YIChkMDEpICwgLkEwIChpbjIpLCAgLkExKGluMyksICAuUyhzZWxbMF0pKTsKKyAgc2t5MTMwX2ZkX3NjX2hkX19tdXgyXzEgdV9tdXhfbGV2ZWxfMDIgKCAuWCAoZDAyKSAsIC5BMCAoaW40KSwgIC5BMShpbjUpLCAgLlMoc2VsWzBdKSk7CisgIHNreTEzMF9mZF9zY19oZF9fbXV4Ml8xIHVfbXV4X2xldmVsXzAzICggLlggKGQwMykgLCAuQTAgKGluNiksICAuQTEoaW43KSwgIC5TKHNlbFswXSkpOworICBza3kxMzBfZmRfc2NfaGRfX211eDJfMSB1X211eF9sZXZlbF8wNCAoIC5YIChkMDQpICwgLkEwIChpbjgpLCAgLkExKGluOSksICAuUyhzZWxbMF0pKTsKKyAgc2t5MTMwX2ZkX3NjX2hkX19tdXgyXzEgdV9tdXhfbGV2ZWxfMDUgKCAuWCAoZDA1KSAsIC5BMCAoaW4xMCksIC5BMShpbjExKSwgLlMoc2VsWzBdKSk7CisgIHNreTEzMF9mZF9zY19oZF9fbXV4Ml8xIHVfbXV4X2xldmVsXzA2ICggLlggKGQwNikgLCAuQTAgKGluMTIpLCAuQTEoaW4xMyksIC5TKHNlbFswXSkpOworICBza3kxMzBfZmRfc2NfaGRfX211eDJfMSB1X211eF9sZXZlbF8wNyAoIC5YIChkMDcpICwgLkEwIChpbjE0KSwgLkExKGluMTUpLCAuUyhzZWxbMF0pKTsKKworICAvLyBzZWNvbmQgbGV2ZWwgbXV4IC0gNAorICBza3kxMzBfZmRfc2NfaGRfX211eDJfMSB1X211eF9sZXZlbF8xMCAoIC5YIChkMTApICwgLkEwIChkMDApLCAuQTEoZDAxKSwgLlMoc2VsWzFdKSk7CisgIHNreTEzMF9mZF9zY19oZF9fbXV4Ml8xIHVfbXV4X2xldmVsXzExICggLlggKGQxMSkgLCAuQTAgKGQwMiksIC5BMShkMDMpLCAuUyhzZWxbMV0pKTsKKyAgc2t5MTMwX2ZkX3NjX2hkX19tdXgyXzEgdV9tdXhfbGV2ZWxfMTIgKCAuWCAoZDEyKSAsIC5BMCAoZDA0KSwgLkExKGQwNSksIC5TKHNlbFsxXSkpOworICBza3kxMzBfZmRfc2NfaGRfX211eDJfMSB1X211eF9sZXZlbF8xMyAoIC5YIChkMTMpICwgLkEwIChkMDYpLCAuQTEoZDA3KSwgLlMoc2VsWzFdKSk7CisKKyAgLy8gdGhpcmQgbGV2ZWwgbXV4IC0gMgorICBza3kxMzBfZmRfc2NfaGRfX211eDJfMSB1X211eF9sZXZlbF8yMCAoIC5YIChkMjApICwgLkEwIChkMTApLCAuQTEoZDExKSwgLlMoc2VsWzJdKSk7CisgIHNreTEzMF9mZF9zY19oZF9fbXV4Ml8xIHVfbXV4X2xldmVsXzIxICggLlggKGQyMSkgLCAuQTAgKGQxMiksIC5BMShkMTMpLCAuUyhzZWxbMl0pKTsKKworICAvLyBmb3VydGggbGV2ZWwgbXV4IC0gMQorICBza3kxMzBfZmRfc2NfaGRfX211eDJfNCB1X211eF9sZXZlbF8zMCAoIC5YIChkMzApICwgLkEwIChkMjApLCAuQTEoZDIxKSwgLlMoc2VsWzNdKSk7CisKKworICBhc3NpZ24gY2xrX291dCA9IGQzMDsKKworZW5kbW9kdWxlCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9jbGtfc2tld19hZGp1c3Qvc3JjL2Nsa19za2V3X2FkanVzdC52IGIvdmVyaWxvZy9ydGwvY2xrX3NrZXdfYWRqdXN0L3NyYy9jbGtfc2tld19hZGp1c3QudgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTYxYTUwCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvY2xrX3NrZXdfYWRqdXN0L3NyYy9jbGtfc2tld19hZGp1c3QudgpAQCAtMCwwICsxLDI4OTggQEAKK21vZHVsZSBjbGtfc2tld19hZGp1c3QgKGNsa19pbiwKKyAgICBjbGtfb3V0LAorICAgIHZjY2QxLAorICAgIHZzc2QxLAorICAgIHNlbCk7CisgaW5wdXQgY2xrX2luOworIG91dHB1dCBjbGtfb3V0OworIGlucHV0IHZjY2QxOworIGlucHV0IHZzc2QxOworIGlucHV0IFszOjBdIHNlbDsKKworIHNreTEzMF9mZF9zY19oZF9fY2xrZGx5YnVmNHMxNV8yIGNsa2J1Zl8xICguQShjbGtfaW4pLAorICAgIC5YKGNsa19kMSksCisgICAgLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19jbGtkbHlidWY0czE1XzIgY2xrYnVmXzEwICguQShjbGtfZDkpLAorICAgIC5YKGNsa19kMTApLAorICAgIC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fY2xrZGx5YnVmNHMxNV8yIGNsa2J1Zl8xMSAoLkEoY2xrX2QxMCksCisgICAgLlgoY2xrX2QxMSksCisgICAgLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19jbGtkbHlidWY0czE1XzIgY2xrYnVmXzEyICguQShjbGtfZDExKSwKKyAgICAuWChjbGtfZDEyKSwKKyAgICAuVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2Nsa2RseWJ1ZjRzMTVfMiBjbGtidWZfMTMgKC5BKGNsa19kMTIpLAorICAgIC5YKGNsa19kMTMpLAorICAgIC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fY2xrZGx5YnVmNHMxNV8yIGNsa2J1Zl8xNCAoLkEoY2xrX2QxMyksCisgICAgLlgoY2xrX2QxNCksCisgICAgLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19jbGtkbHlidWY0czE1XzIgY2xrYnVmXzE1ICguQShjbGtfZDE0KSwKKyAgICAuWChjbGtfZDE1KSwKKyAgICAuVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2Nsa2RseWJ1ZjRzMTVfMiBjbGtidWZfMiAoLkEoY2xrX2QxKSwKKyAgICAuWChjbGtfZDIpLAorICAgIC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fY2xrZGx5YnVmNHMxNV8yIGNsa2J1Zl8zICguQShjbGtfZDIpLAorICAgIC5YKGNsa19kMyksCisgICAgLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19jbGtkbHlidWY0czE1XzIgY2xrYnVmXzQgKC5BKGNsa19kMyksCisgICAgLlgoY2xrX2Q0KSwKKyAgICAuVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2Nsa2RseWJ1ZjRzMTVfMiBjbGtidWZfNSAoLkEoY2xrX2Q0KSwKKyAgICAuWChjbGtfZDUpLAorICAgIC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fY2xrZGx5YnVmNHMxNV8yIGNsa2J1Zl82ICguQShjbGtfZDUpLAorICAgIC5YKGNsa19kNiksCisgICAgLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19jbGtkbHlidWY0czE1XzIgY2xrYnVmXzcgKC5BKGNsa19kNiksCisgICAgLlgoY2xrX2Q3KSwKKyAgICAuVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2Nsa2RseWJ1ZjRzMTVfMiBjbGtidWZfOCAoLkEoY2xrX2Q3KSwKKyAgICAuWChjbGtfZDgpLAorICAgIC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fY2xrZGx5YnVmNHMxNV8yIGNsa2J1Zl85ICguQShjbGtfZDgpLAorICAgIC5YKGNsa19kOSksCisgICAgLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19tdXgyXzEgdV9tdXhfbGV2ZWxfMDAgKC5BMChjbGtfaW4pLAorICAgIC5BMShjbGtfZDEpLAorICAgIC5TKHNlbFswXSksCisgICAgLlgoZDAwKSwKKyAgICAuVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX211eDJfMSB1X211eF9sZXZlbF8wMSAoLkEwKGNsa19kMiksCisgICAgLkExKGNsa19kMyksCisgICAgLlMoc2VsWzBdKSwKKyAgICAuWChkMDEpLAorICAgIC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fbXV4Ml8xIHVfbXV4X2xldmVsXzAyICguQTAoY2xrX2Q0KSwKKyAgICAuQTEoY2xrX2Q1KSwKKyAgICAuUyhzZWxbMF0pLAorICAgIC5YKGQwMiksCisgICAgLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19tdXgyXzEgdV9tdXhfbGV2ZWxfMDMgKC5BMChjbGtfZDYpLAorICAgIC5BMShjbGtfZDcpLAorICAgIC5TKHNlbFswXSksCisgICAgLlgoZDAzKSwKKyAgICAuVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX211eDJfMSB1X211eF9sZXZlbF8wNCAoLkEwKGNsa19kOCksCisgICAgLkExKGNsa19kOSksCisgICAgLlMoc2VsWzBdKSwKKyAgICAuWChkMDQpLAorICAgIC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fbXV4Ml8xIHVfbXV4X2xldmVsXzA1ICguQTAoY2xrX2QxMCksCisgICAgLkExKGNsa19kMTEpLAorICAgIC5TKHNlbFswXSksCisgICAgLlgoZDA1KSwKKyAgICAuVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX211eDJfMSB1X211eF9sZXZlbF8wNiAoLkEwKGNsa19kMTIpLAorICAgIC5BMShjbGtfZDEzKSwKKyAgICAuUyhzZWxbMF0pLAorICAgIC5YKGQwNiksCisgICAgLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19tdXgyXzEgdV9tdXhfbGV2ZWxfMDcgKC5BMChjbGtfZDE0KSwKKyAgICAuQTEoY2xrX2QxNSksCisgICAgLlMoc2VsWzBdKSwKKyAgICAuWChkMDcpLAorICAgIC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fbXV4Ml8xIHVfbXV4X2xldmVsXzEwICguQTAoZDAwKSwKKyAgICAuQTEoZDAxKSwKKyAgICAuUyhzZWxbMV0pLAorICAgIC5YKGQxMCksCisgICAgLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19tdXgyXzEgdV9tdXhfbGV2ZWxfMTEgKC5BMChkMDIpLAorICAgIC5BMShkMDMpLAorICAgIC5TKHNlbFsxXSksCisgICAgLlgoZDExKSwKKyAgICAuVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX211eDJfMSB1X211eF9sZXZlbF8xMiAoLkEwKGQwNCksCisgICAgLkExKGQwNSksCisgICAgLlMoc2VsWzFdKSwKKyAgICAuWChkMTIpLAorICAgIC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fbXV4Ml8xIHVfbXV4X2xldmVsXzEzICguQTAoZDA2KSwKKyAgICAuQTEoZDA3KSwKKyAgICAuUyhzZWxbMV0pLAorICAgIC5YKGQxMyksCisgICAgLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19tdXgyXzEgdV9tdXhfbGV2ZWxfMjAgKC5BMChkMTApLAorICAgIC5BMShkMTEpLAorICAgIC5TKHNlbFsyXSksCisgICAgLlgoZDIwKSwKKyAgICAuVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX211eDJfMSB1X211eF9sZXZlbF8yMSAoLkEwKGQxMiksCisgICAgLkExKGQxMyksCisgICAgLlMoc2VsWzJdKSwKKyAgICAuWChkMjEpLAorICAgIC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fbXV4Ml80IHVfbXV4X2xldmVsXzMwICguQTAoZDIwKSwKKyAgICAuQTEoZDIxKSwKKyAgICAuUyhzZWxbM10pLAorICAgIC5YKGNsa19vdXQpLAorICAgIC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMyBQSFlfMCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV8xICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzMgUEhZXzIgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMyBQSFlfMyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV80ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzMgUEhZXzUgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMyBQSFlfNiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV83ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzMgUEhZXzggKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMyBQSFlfOSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV8xMCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV8xMSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV8xMiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV8xMyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV8xNCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV8xNSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV8xNiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV8xNyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV8xOCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV8xOSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV8yMCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV8yMSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV8yMiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV8yMyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV8yNCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV8yNSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV8yNiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV8yNyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV8yOCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV8yOSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV8zMCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV8zMSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV8zMiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV8zMyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV8zNCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV8zNSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV8zNiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV8zNyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV8zOCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV8zOSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV80MCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV80MSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV80MiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV80MyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV80NCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV80NSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV80NiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV80NyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV80OCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV80OSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV81MCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV81MSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV81MiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV81MyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV81NCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV81NSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV81NiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV81NyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV81OCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV81OSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV82MCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV82MSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV82MiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIFBIWV82MyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV82NCAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV82NSAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV82NiAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV82NyAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV82OCAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV82OSAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV83MCAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV83MSAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV83MiAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV83MyAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV83NCAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV83NSAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV83NiAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV83NyAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV83OCAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV83OSAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV84MCAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV84MSAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV84MiAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV84MyAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV84NCAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV84NSAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV84NiAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV84NyAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV84OCAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV84OSAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV85MCAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV85MSAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV85MiAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV85MyAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV85NCAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV85NSAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV85NiAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV85NyAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV85OCAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV85OSAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV8xMDAgKC5WR05EKHZzc2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fdGFwdnB3cnZnbmRfMSBQSFlfMTAxICguVkdORCh2c3NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX3RhcHZwd3J2Z25kXzEgUEhZXzEwMiAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV8xMDMgKC5WR05EKHZzc2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fdGFwdnB3cnZnbmRfMSBQSFlfMTA0ICguVkdORCh2c3NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX3RhcHZwd3J2Z25kXzEgUEhZXzEwNSAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV8xMDYgKC5WR05EKHZzc2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fdGFwdnB3cnZnbmRfMSBQSFlfMTA3ICguVkdORCh2c3NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX3RhcHZwd3J2Z25kXzEgUEhZXzEwOCAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV8xMDkgKC5WR05EKHZzc2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fdGFwdnB3cnZnbmRfMSBQSFlfMTEwICguVkdORCh2c3NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX3RhcHZwd3J2Z25kXzEgUEhZXzExMSAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV8xMTIgKC5WR05EKHZzc2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fdGFwdnB3cnZnbmRfMSBQSFlfMTEzICguVkdORCh2c3NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX3RhcHZwd3J2Z25kXzEgUEhZXzExNCAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV8xMTUgKC5WR05EKHZzc2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fdGFwdnB3cnZnbmRfMSBQSFlfMTE2ICguVkdORCh2c3NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX3RhcHZwd3J2Z25kXzEgUEhZXzExNyAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV8xMTggKC5WR05EKHZzc2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fdGFwdnB3cnZnbmRfMSBQSFlfMTE5ICguVkdORCh2c3NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX3RhcHZwd3J2Z25kXzEgUEhZXzEyMCAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV8xMjEgKC5WR05EKHZzc2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fdGFwdnB3cnZnbmRfMSBQSFlfMTIyICguVkdORCh2c3NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX3RhcHZwd3J2Z25kXzEgUEhZXzEyMyAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV8xMjQgKC5WR05EKHZzc2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fdGFwdnB3cnZnbmRfMSBQSFlfMTI1ICguVkdORCh2c3NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX3RhcHZwd3J2Z25kXzEgUEhZXzEyNiAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV8xMjcgKC5WR05EKHZzc2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fdGFwdnB3cnZnbmRfMSBQSFlfMTI4ICguVkdORCh2c3NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX3RhcHZwd3J2Z25kXzEgUEhZXzEyOSAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV8xMzAgKC5WR05EKHZzc2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fdGFwdnB3cnZnbmRfMSBQSFlfMTMxICguVkdORCh2c3NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX3RhcHZwd3J2Z25kXzEgUEhZXzEzMiAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV8xMzMgKC5WR05EKHZzc2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fdGFwdnB3cnZnbmRfMSBQSFlfMTM0ICguVkdORCh2c3NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX3RhcHZwd3J2Z25kXzEgUEhZXzEzNSAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV8xMzYgKC5WR05EKHZzc2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fdGFwdnB3cnZnbmRfMSBQSFlfMTM3ICguVkdORCh2c3NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX3RhcHZwd3J2Z25kXzEgUEhZXzEzOCAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV8xMzkgKC5WR05EKHZzc2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fdGFwdnB3cnZnbmRfMSBQSFlfMTQwICguVkdORCh2c3NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX3RhcHZwd3J2Z25kXzEgUEhZXzE0MSAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV8xNDIgKC5WR05EKHZzc2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fdGFwdnB3cnZnbmRfMSBQSFlfMTQzICguVkdORCh2c3NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX3RhcHZwd3J2Z25kXzEgUEhZXzE0NCAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV8xNDUgKC5WR05EKHZzc2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fdGFwdnB3cnZnbmRfMSBQSFlfMTQ2ICguVkdORCh2c3NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX3RhcHZwd3J2Z25kXzEgUEhZXzE0NyAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV8xNDggKC5WR05EKHZzc2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fdGFwdnB3cnZnbmRfMSBQSFlfMTQ5ICguVkdORCh2c3NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX3RhcHZwd3J2Z25kXzEgUEhZXzE1MCAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV8xNTEgKC5WR05EKHZzc2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fdGFwdnB3cnZnbmRfMSBQSFlfMTUyICguVkdORCh2c3NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX3RhcHZwd3J2Z25kXzEgUEhZXzE1MyAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV8xNTQgKC5WR05EKHZzc2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fdGFwdnB3cnZnbmRfMSBQSFlfMTU1ICguVkdORCh2c3NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX3RhcHZwd3J2Z25kXzEgUEhZXzE1NiAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV8xNTcgKC5WR05EKHZzc2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fdGFwdnB3cnZnbmRfMSBQSFlfMTU4ICguVkdORCh2c3NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX3RhcHZwd3J2Z25kXzEgUEhZXzE1OSAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV8xNjAgKC5WR05EKHZzc2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fdGFwdnB3cnZnbmRfMSBQSFlfMTYxICguVkdORCh2c3NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX3RhcHZwd3J2Z25kXzEgUEhZXzE2MiAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX190YXB2cHdydmduZF8xIFBIWV8xNjMgKC5WR05EKHZzc2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fdGFwdnB3cnZnbmRfMSBQSFlfMTY0ICguVkdORCh2c3NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX3RhcHZwd3J2Z25kXzEgUEhZXzE2NSAoLlZHTkQodnNzZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMF8zICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8wXzE1ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzQgRklMTEVSXzBfMjcgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzBfMzIgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzBfNDQgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfNiBGSUxMRVJfMF81NiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMF82MyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMF83NSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF82IEZJTExFUl8wXzg3ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8wXzk0ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8wXzEwNiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF82IEZJTExFUl8wXzExOCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMF8xMjUgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzBfMTM3ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzYgRklMTEVSXzBfMTQ5ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8wXzE1NiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMF8xNjggKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfNiBGSUxMRVJfMF8xODAgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMyBGSUxMRVJfMF8xODcgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzFfMyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMV8xNSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF80IEZJTExFUl8xXzI3ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xXzMyICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xXzQ0ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xXzU2ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xXzY4ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xXzgwICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xXzkzICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xXzEwNSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMV8xMTcgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzFfMTI5ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xXzE0MSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMV8xNTQgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzFfMTY2ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xXzE3OCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMl8zICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yXzE1ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yXzI3ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yXzM5ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzggRklMTEVSXzJfNTEgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZmlsbF8yIEZJTExFUl8yXzU5ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yXzYyICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yXzc0ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yXzg2ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yXzk4ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yXzExMCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMl8xMjMgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzJfMTM1ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yXzE0NyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMl8xNTkgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzJfMTcxICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzYgRklMTEVSXzJfMTg0ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8zXzMgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzNfMTUgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfNCBGSUxMRVJfM18yNyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfM18zMiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfM180NCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfM181NiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfM182OCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfM184MCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfM185MyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfM18xMDUgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzNfMTE3ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8zXzEyOSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfM18xNDEgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzNfMTU0ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8zXzE2NiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfM18xNzggKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzRfMyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF84IEZJTExFUl80XzE1ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzMgRklMTEVSXzRfMjMgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzRfMzUgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzRfNDcgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZmlsbF8yIEZJTExFUl80XzU5ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl80XzYyICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl80Xzc0ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl80Xzg2ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl80Xzk4ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl80XzExMCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfNF8xMjMgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzRfMTM1ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl80XzE0NyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfNF8xNTkgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzRfMTcxICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzYgRklMTEVSXzRfMTg0ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl81XzMgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzVfMTUgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfNCBGSUxMRVJfNV8yNyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfNV8zMiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfNV80NCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfNV81NiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfNV82OCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfNV84MCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfNV85MyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfNV8xMTQgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfOCBGSUxMRVJfNV8xMjYgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMyBGSUxMRVJfNV8xMzQgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfNiBGSUxMRVJfNV8xNDYgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZmlsbF8xIEZJTExFUl81XzE1MiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfNV8xNTQgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzVfMTY2ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl81XzE3OCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfNl8zICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl82XzE1ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl82XzI3ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl82XzM5ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzggRklMTEVSXzZfNTEgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZmlsbF8yIEZJTExFUl82XzU5ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl82XzYyICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl82Xzc0ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl82Xzg2ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl82Xzk4ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl82XzExMCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfNl8xMjMgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzZfMTM1ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl82XzE0NyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfNl8xNTkgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzZfMTcxICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzYgRklMTEVSXzZfMTg0ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl83XzMgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzdfMTUgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfNCBGSUxMRVJfN18yNyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfN18zMiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfN180NCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfN181NiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfN182OCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfN184MCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfN18xMDIgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzdfMTE0ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl83XzEyNiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfN18xMzggKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMyBGSUxMRVJfN18xNTAgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzdfMTU0ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl83XzE2NiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfN18xNzggKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzhfMyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfOF8xNSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfOF8yNyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfOF8zOSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF84IEZJTExFUl84XzUxICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2ZpbGxfMiBGSUxMRVJfOF81OSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfOF82MiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfOF83NCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfOF84NiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfOF85OCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfOF8xMTAgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzhfMTIzICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl84XzEzNSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfOF8xNDcgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzhfMTU5ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl84XzE3MSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF82IEZJTExFUl84XzE4NCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfOV8zICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl85XzE1ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzQgRklMTEVSXzlfMjcgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzlfMzIgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzlfNDQgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfOCBGSUxMRVJfOV81NiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIEZJTExFUl85XzY0ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl85Xzc2ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzQgRklMTEVSXzlfODggKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzlfOTMgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzlfMTA1ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl85XzExNyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfOV8xMjkgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzlfMTQxICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl85XzE1NCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF84IEZJTExFUl85XzE2NiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF82IEZJTExFUl85XzE4MyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19maWxsXzEgRklMTEVSXzlfMTg5ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xMF8zICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xMF8xNSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTBfMjcgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzEwXzM5ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzggRklMTEVSXzEwXzUxICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2ZpbGxfMiBGSUxMRVJfMTBfNTkgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzEwXzYyICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xMF83NCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTBfODYgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzEwXzk4ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xMF8xMTAgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzEwXzEyMyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTBfMTM1ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xMF8xNDcgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzEwXzE1OSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTBfMTcxICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzYgRklMTEVSXzEwXzE4NCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTFfMyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIEZJTExFUl8xMV8xNSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF80IEZJTExFUl8xMV8yNyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTFfMzIgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzExXzQ0ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xMV81NiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTFfNjggKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzExXzgwICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xMV85MyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTFfMTA1ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xMV8xMTcgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzExXzEyOSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTFfMTQxICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xMV8xNTQgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfOCBGSUxMRVJfMTFfMTY2ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzMgRklMTEVSXzExXzE3NCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF80IEZJTExFUl8xMV8xODYgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzEyXzMgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzEyXzE1ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xMl8yNyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTJfMzkgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfOCBGSUxMRVJfMTJfNTEgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZmlsbF8yIEZJTExFUl8xMl81OSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTJfNjIgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzEyXzc0ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xMl84NiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF84IEZJTExFUl8xMl85OCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIEZJTExFUl8xMl8xMDYgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfNCBGSUxMRVJfMTJfMTE4ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xMl8xMjMgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzEyXzEzNSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTJfMTQ3ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xMl8xNTkgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzEyXzE3MSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF82IEZJTExFUl8xMl8xODQgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzEzXzMgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzEzXzE1ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzQgRklMTEVSXzEzXzI3ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xM18zMiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTNfNDQgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzEzXzU2ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xM182OCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTNfODAgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzEzXzkzICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xM18xMDUgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzEzXzExNyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTNfMTI5ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xM18xNDEgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzEzXzE1NCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTNfMTY2ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xM18xNzggKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzE0XzMgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzE0XzE1ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xNF8yNyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTRfMzkgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfOCBGSUxMRVJfMTRfNTEgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZmlsbF8yIEZJTExFUl8xNF81OSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTRfNjIgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzE0Xzc0ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xNF84NiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTRfOTggKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzE0XzExMCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTRfMTIzICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2ZpbGxfMiBGSUxMRVJfMTRfMTM1ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xNF8xNDYgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfNiBGSUxMRVJfMTRfMTU4ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2ZpbGxfMSBGSUxMRVJfMTRfMTY0ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzggRklMTEVSXzE0XzE3NCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19maWxsXzEgRklMTEVSXzE0XzE4MiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF82IEZJTExFUl8xNF8xODQgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzE1XzMgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzE1XzE1ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzQgRklMTEVSXzE1XzI3ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xNV8zMiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTVfNDQgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzE1XzU2ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xNV82OCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTVfODAgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzE1XzkzICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xNV8xMDUgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzE1XzExNyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTVfMTI5ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xNV8xNDEgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzE1XzE1NCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTVfMTY2ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xNV8xNzggKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzE2XzMgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzE2XzE1ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xNl8yNyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTZfMzkgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfOCBGSUxMRVJfMTZfNTEgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZmlsbF8yIEZJTExFUl8xNl81OSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTZfNjIgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzE2Xzc0ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xNl84NiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTZfOTggKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzE2XzExMCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTZfMTIzICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xNl8xMzUgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzE2XzE0NyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTZfMTU5ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xNl8xNzEgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfNiBGSUxMRVJfMTZfMTg0ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xN18zICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xN18xNSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF80IEZJTExFUl8xN18yNyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTdfMzIgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzE3XzQ0ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzQgRklMTEVSXzE3XzU2ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2ZpbGxfMSBGSUxMRVJfMTdfNjAgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzE3XzczICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzYgRklMTEVSXzE3Xzg1ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2ZpbGxfMSBGSUxMRVJfMTdfOTEgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzE3XzkzICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xN18xMDUgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzE3XzExNyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTdfMTI5ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xN18xNDEgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzE3XzE1NCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF84IEZJTExFUl8xN18xNjYgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMyBGSUxMRVJfMTdfMTc0ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzQgRklMTEVSXzE3XzE4NiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMThfMyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMThfMTUgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfNCBGSUxMRVJfMThfMjcgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzE4XzQwICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzggRklMTEVSXzE4XzUyICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2ZpbGxfMSBGSUxMRVJfMThfNjAgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzE4XzYyICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xOF83NCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMThfODYgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzE4Xzk4ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xOF8xMTAgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzE4XzEyMyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMThfMTM1ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xOF8xNDcgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzE4XzE1OSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMThfMTcxICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzYgRklMTEVSXzE4XzE4NCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTlfMyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTlfMTUgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfNCBGSUxMRVJfMTlfMjcgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzE5XzMyICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xOV80NCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTlfNTYgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzE5XzY4ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xOV84MCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTlfOTMgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzE5XzEwNSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTlfMTE3ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xOV8xMjkgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzE5XzE0MSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMTlfMTU0ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8xOV8xNjYgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzE5XzE3OCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjBfMyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjBfMTUgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzIwXzI3ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yMF8zOSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF84IEZJTExFUl8yMF81MSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19maWxsXzIgRklMTEVSXzIwXzU5ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yMF82MiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjBfNzQgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzIwXzg2ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yMF85OCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjBfMTEwICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yMF8xMjMgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzIwXzEzNSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjBfMTQ3ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yMF8xNTkgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzIwXzE3MSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF82IEZJTExFUl8yMF8xODQgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzIxXzEyICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzYgRklMTEVSXzIxXzI0ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2ZpbGxfMSBGSUxMRVJfMjFfMzAgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzIxXzMyICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yMV80NCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjFfNTYgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzIxXzY4ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yMV84MCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjFfOTMgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzIxXzEwNSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjFfMTE3ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yMV8xMjkgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzIxXzE0MSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjFfMTU0ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzQgRklMTEVSXzIxXzE2NiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF84IEZJTExFUl8yMV8xNzkgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMyBGSUxMRVJfMjFfMTg3ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yMl8zICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yMl8xNSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjJfMjcgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzIyXzM5ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzggRklMTEVSXzIyXzUxICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2ZpbGxfMiBGSUxMRVJfMjJfNTkgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzIyXzcxICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yMl84MyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjJfOTUgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzIyXzEwNyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIEZJTExFUl8yMl8xMTkgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzIyXzEzMiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjJfMTQ0ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yMl8xNTYgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzIyXzE2OCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIEZJTExFUl8yMl8xODAgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfNiBGSUxMRVJfMjJfMTg0ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yM18zICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yM18xNSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF80IEZJTExFUl8yM18yNyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjNfMzIgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzIzXzQ0ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yM181NiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjNfNjggKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzIzXzgwICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yM185MyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjNfMTA1ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzYgRklMTEVSXzIzXzExNyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19maWxsXzEgRklMTEVSXzIzXzEyMyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjNfMTMzICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzggRklMTEVSXzIzXzE0NSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF80IEZJTExFUl8yM18xNTQgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzIzXzE2NyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF84IEZJTExFUl8yM18xNzkgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMyBGSUxMRVJfMjNfMTg3ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yNF8zICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yNF8xNSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjRfMjcgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzI0XzM5ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzggRklMTEVSXzI0XzUxICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2ZpbGxfMiBGSUxMRVJfMjRfNTkgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzI0XzYyICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yNF83NCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjRfODYgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzI0Xzk4ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yNF8xMTAgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzI0XzEyMyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjRfMTM1ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yNF8xNDcgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzI0XzE1OSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjRfMTcxICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzYgRklMTEVSXzI0XzE4NCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjVfMTIgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfNiBGSUxMRVJfMjVfMjQgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZmlsbF8xIEZJTExFUl8yNV8zMCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjVfMzIgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzI1XzQ0ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzMgRklMTEVSXzI1XzU2ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yNV82OCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjVfODAgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzI1XzkzICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yNV8xMDUgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzI1XzExNyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjVfMTI5ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yNV8xNDEgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzI1XzE1NCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF84IEZJTExFUl8yNV8xNjYgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMyBGSUxMRVJfMjVfMTc0ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzQgRklMTEVSXzI1XzE4NiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjZfMyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjZfMTUgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzI2XzI3ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yNl8zOSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF84IEZJTExFUl8yNl81MSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19maWxsXzIgRklMTEVSXzI2XzU5ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yNl82MiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjZfNzQgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzI2Xzg2ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yNl85OCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjZfMTEwICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yNl8xMjMgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzI2XzEzNSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjZfMTQ3ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzggRklMTEVSXzI2XzE1OSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8zIEZJTExFUl8yNl8xNjcgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfNCBGSUxMRVJfMjZfMTc5ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzYgRklMTEVSXzI2XzE4NCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjdfMyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjdfMTUgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfNCBGSUxMRVJfMjdfMjcgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzI3XzMyICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yN180NCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjdfNTYgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzI3XzY4ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yN184MCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjdfOTMgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzI3XzEwNSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjdfMTE3ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yN18xMjkgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzI3XzE0MSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjdfMTU0ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yN18xNjYgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzI3XzE3OCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjhfMyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjhfMTUgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzI4XzI3ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yOF8zOSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF84IEZJTExFUl8yOF81MSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19maWxsXzIgRklMTEVSXzI4XzU5ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yOF82MiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjhfNzQgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzI4Xzg2ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yOF85OCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjhfMTEwICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yOF8xMjMgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzI4XzEzNSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjhfMTQ3ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yOF8xNTkgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzI4XzE3MSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF82IEZJTExFUl8yOF8xODQgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzI5XzMgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzI5XzE1ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzQgRklMTEVSXzI5XzI3ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yOV8zMiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjlfNDQgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzI5XzU2ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzggRklMTEVSXzI5XzY4ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzMgRklMTEVSXzI5Xzc2ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzQgRklMTEVSXzI5Xzg4ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yOV85MyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjlfMTA1ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yOV8xMTcgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzI5XzEyOSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMjlfMTQxICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8yOV8xNTQgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfNiBGSUxMRVJfMjlfMTY2ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzggRklMTEVSXzI5XzE4MSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19maWxsXzEgRklMTEVSXzI5XzE4OSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMzBfMyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMzBfMTUgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzMwXzI3ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8zMF8zOSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF84IEZJTExFUl8zMF81MSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19maWxsXzIgRklMTEVSXzMwXzU5ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8zMF82MiAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMzBfNzQgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzMwXzg2ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzggRklMTEVSXzMwXzk4ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2ZpbGxfMiBGSUxMRVJfMzBfMTA2ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzQgRklMTEVSXzMwXzExNyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19maWxsXzEgRklMTEVSXzMwXzEyMSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMzBfMTIzICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzQgRklMTEVSXzMwXzEzNSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19maWxsXzEgRklMTEVSXzMwXzEzOSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMzBfMTQ5ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzggRklMTEVSXzMwXzE2MSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19maWxsXzEgRklMTEVSXzMwXzE2OSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF80IEZJTExFUl8zMF8xNzkgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfNiBGSUxMRVJfMzBfMTg0ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8zMV8zICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8zMV8xNSAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF80IEZJTExFUl8zMV8yNyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMzFfMzIgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzMxXzQ0ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzYgRklMTEVSXzMxXzU2ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8zMV82MyAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF8xMiBGSUxMRVJfMzFfNzUgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfNiBGSUxMRVJfMzFfODcgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzMxXzk0ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8zMV8xMDYgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfNiBGSUxMRVJfMzFfMTE4ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8zMV8xMjUgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZmlsbF8xIEZJTExFUl8zMV8xMzcgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfOCBGSUxMRVJfMzFfMTQ3ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKKyBza3kxMzBfZmRfc2NfaGRfX2RlY2FwXzEyIEZJTExFUl8zMV8xNTYgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMTIgRklMTEVSXzMxXzE2OCAoLlZHTkQodnNzZDEpLAorICAgIC5WTkIodnNzZDEpLAorICAgIC5WUEIodmNjZDEpLAorICAgIC5WUFdSKHZjY2QxKSk7Cisgc2t5MTMwX2ZkX3NjX2hkX19kZWNhcF82IEZJTExFUl8zMV8xODAgKC5WR05EKHZzc2QxKSwKKyAgICAuVk5CKHZzc2QxKSwKKyAgICAuVlBCKHZjY2QxKSwKKyAgICAuVlBXUih2Y2NkMSkpOworIHNreTEzMF9mZF9zY19oZF9fZGVjYXBfMyBGSUxMRVJfMzFfMTg3ICguVkdORCh2c3NkMSksCisgICAgLlZOQih2c3NkMSksCisgICAgLlZQQih2Y2NkMSksCisgICAgLlZQV1IodmNjZDEpKTsKK2VuZG1vZHVsZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvY2xrX3NrZXdfYWRqdXN0L3N5bnRoL01ha2VmaWxlIGIvdmVyaWxvZy9ydGwvY2xrX3NrZXdfYWRqdXN0L3N5bnRoL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2YWUxZGYKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC9jbGtfc2tld19hZGp1c3Qvc3ludGgvTWFrZWZpbGUKQEAgLTAsMCArMSw0OSBAQAorIyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyMgLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSwgRGluZXNoIEFubmF5eWEKKyMgLy8gCisjIC8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIC8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAvLworIyAvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAvLworIyAvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIC8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIC8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIC8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIyAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorIyAvLyBTUERYLUZpbGVDb250cmlidXRvcjogRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKyMgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgTWFrZWZpbGUgZm9yIFN5bnRoZXNpcworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIFBhdGhzCitleHBvcnQgUk9PVF9ESVIgOj0gJChzaGVsbCBwd2QpCitleHBvcnQgUkVQT1JUX0RJUiAgOj0gJChST09UX0RJUikvcmVwb3J0cworZXhwb3J0IE5FVExJU1RfRElSICA6PSAkKFJPT1RfRElSKS9uZXRsaXN0CitleHBvcnQgVE1QX0RJUiAgOj0gJChST09UX0RJUikvdG1wCisKKworIyBUYXJnZXRzCisuUEhPTlk6IGNsZWFuIGNyZWF0ZSBzeW50aAorCitkZWZhdWx0OiBjbGVhbiBjcmVhdGUgc3ludGgKKworc3ludGg6IGNsZWFuIGNyZWF0ZSAKKwl5b3N5cyAtZyAtYyBzeW50aC50Y2wgLWwgc3ludGgubG9nCisKK2NyZWF0ZToKKwlta2RpciAtcCAuL3RtcC9zeW50aGVzaXM7IAorCW1rZGlyIC1wIC4vcmVwb3J0czsgCisJbWtkaXIgLXAgLi9uZXRsaXN0OworCSQoT1BFTkxBTkVfUk9PVCkvc2NyaXB0cy9saWJ0cmltLnBsICQoUERLX1JPT1QpL3NreTEzMEEvbGlicy5yZWYvc2t5MTMwX2ZkX3NjX2hkL2xpYi9za3kxMzBfZmRfc2NfaGRfX3R0XzAyNUNfMXY4MC5saWIgJChQREtfUk9PVCkvc2t5MTMwQS9saWJzLnRlY2gvb3BlbmxhbmUvc2t5MTMwX2ZkX3NjX2hkL25vX3N5bnRoLmNlbGxzID4gLi90bXAvdHJpbW1lZC5saWIKKworCisKK2NsZWFuOgorCSQoUk0pIC1SIHN5bnRoLmxvZworCSQoUk0pIC1SICQoUkVQT1JUX0RJUikKKwkkKFJNKSAtUiAkKE5FVExJU1RfRElSKQorCSQoUk0pIC1SICQoVE1QX0RJUikKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL2Nsa19za2V3X2FkanVzdC9zeW50aC9zeW50aC50Y2wgYi92ZXJpbG9nL3J0bC9jbGtfc2tld19hZGp1c3Qvc3ludGgvc3ludGgudGNsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI3YWRlYTYKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC9jbGtfc2tld19hZGp1c3Qvc3ludGgvc3ludGgudGNsCkBAIC0wLDAgKzEsMzg1IEBACisjIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworIyAvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxLCBEaW5lc2ggQW5uYXl5YQorIyAvLyAKKyMgLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIC8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjIC8vCisjIC8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjIC8vCisjIC8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIC8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisjIC8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorIyAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworIyBpbnB1dHMgZXhwZWN0ZWQgYXMgZW52IHZhcnMKKyNzZXQgb3B0ICQ6OmVudihTWU5USF9PUFQpCisjIyMjIyMjIyMjIyBjb25maWcudGNsICMjIyMjIyMjIyMjIyMjIyMjIworIyBVc2VyIGNvbmZpZworCisjIFVzZXIgY29uZmlnCitzZXQgOjplbnYoREVTSUdOX0RJUikgLi4vCisKK3NldCA6OmVudihQUk9KX0RJUikgLi4vLi4vLi4vLi4vCisKKyMgVXNlciBjb25maWcKK3NldCA6OmVudihERVNJR05fTkFNRSkgY2xrX211eAorCisjIENoYW5nZSBpZiBuZWVkZWQKK3NldCA6OmVudihWRVJJTE9HX0ZJTEVTKSBbZ2xvYiAgXAorCS4uL3NyYy9jbGtfbXV4LnYgIF0KKworCitzZXQgOjplbnYoU1lOVEhfREVGSU5FUykgW2xpc3QgWU9TWVMgXQorCisKK3NldCA6OmVudihMSUJfU1lOVEgpICAuL3RtcC90cmltbWVkLmxpYgorCisKKyMgRmlsbCB0aGlzCitzZXQgOjplbnYoQ0xPQ0tfUEVSSU9EKSAiMTAiCisjc2V0IDo6ZW52KENMT0NLX1BPUlQpICJtY2xrIgorc2V0IDo6ZW52KENMT0NLX1RSRUVfU1lOVEgpIDAKKworc2V0IDo6ZW52KFJVTl9TSU1QTEVfQ1RTKSAwCitzZXQgOjplbnYoU1lOVEhfQlVGRkVSSU5HKSAwCitzZXQgOjplbnYoU1lOVEhfU0laSU5HKSAwCisKK3NldCA6OmVudihTWU5USF9EUklWSU5HX0NFTEwpICJza3kxMzBfZmRfc2NfaGRfX2ludl84Igorc2V0IDo6ZW52KFNZTlRIX0NBUF9MT0FEKSAiMTcuNjUiCitzZXQgOjplbnYoU1lOVEhfTUFYX1RSQU4pICJbZXhwciB7MC4xKjEwLjB9XSIKKworc2V0IDo6ZW52KFNZTlRIX01BWF9GQU5PVVQpIDYKK3NldCA6OmVudihGUF9DT1JFX1VUSUwpIDUwCitzZXQgOjplbnYoUExfVEFSR0VUX0RFTlNJVFkpIFsgZXhwciAoJDo6ZW52KEZQX0NPUkVfVVRJTCkrNSkgLyAxMDAuMCBdCitzZXQgOjplbnYoQ0VMTF9QQUQpIDQKKworc2V0IDo6ZW52KFNZTlRIX05PX0ZMQVQpICIwIgorCisKK3NldCA6OmVudihTWU5USF9TVFJBVEVHWSkgIkFSRUEgMCIKK3NldCA6OmVudihTWU5USF9USUVMT19QT1JUKSAic2t5MTMwX2ZkX3NjX2hkX19jb25iXzEgTE8iCitzZXQgOjplbnYoU1lOVEhfVElFSElfUE9SVCkgInNreTEzMF9mZF9zY19oZF9fY29uYl8xIEhJIgorc2V0IDo6ZW52KFNZTlRIX01JTl9CVUZfUE9SVCkgInNreTEzMF9mZF9zY19oZF9fYnVmXzIgQSBYIgorCisKKyNzZXQgOjplbnYoQ0xPQ0tfTkVUKSAkOjplbnYoQ0xPQ0tfUE9SVCkKKworCisKK3NldCA6OmVudih5b3N5c190bXBfZmlsZV90YWcpICIuL3RtcC8iCitzZXQgOjplbnYoVE1QX0RJUikgIi4vdG1wLyIKK3NldCA6OmVudih5b3N5c19uZXRsaXN0X2RpcikgIi4vbmV0bGlzdCIKK3NldCA6OmVudih5b3N5c19yZXBvcnRfZmlsZV90YWcpICIuL3JlcG9ydHMveW9zeXMiCitzZXQgOjplbnYoeW9zeXNfcmVzdWx0X2ZpbGVfdGFnKSAiLi9yZXBvcnRzL3lvc3lzLnN5bnRoZXNpcyIKKworc2V0IDo6ZW52KFNBVkVfTkVUTElTVCkgJDo6ZW52KHlvc3lzX25ldGxpc3RfZGlyKS8kOjplbnYoREVTSUdOX05BTUUpLmd2CisKKworCisjIyMjIyMjIyMjIyBFbmQgb2YgY29uZmlnLnRjbAorc2V0IGJ1ZmZlcmluZyAkOjplbnYoU1lOVEhfQlVGRkVSSU5HKQorc2V0IHNpemluZyAkOjplbnYoU1lOVEhfU0laSU5HKQorCit5b3N5cyAtaW1wb3J0CisKK3NldCB2dG9wICQ6OmVudihERVNJR05fTkFNRSkKKyNzZXQgc2RjX2ZpbGUgJDo6ZW52KFNEQ19GSUxFKQorc2V0IHNjbGliICQ6OmVudihMSUJfU1lOVEgpCisKK2lmIHsgW2luZm8gZXhpc3RzIDo6ZW52KFNZTlRIX0RFRklORVMpIF0gfSB7CisJZm9yZWFjaCBkZWZpbmUgJDo6ZW52KFNZTlRIX0RFRklORVMpIHsKKwkJbG9nICJEZWZpbmluZyAkZGVmaW5lIgorCQl2ZXJpbG9nX2RlZmluZXMgLUQkZGVmaW5lCisJfQorfQorCitzZXQgdklkaXJzQXJncyAiIgoraWYge1tpbmZvIGV4aXN0IDo6ZW52KFZFUklMT0dfSU5DTFVERV9ESVJTKV19IHsKKwlmb3JlYWNoIGRpciAkOjplbnYoVkVSSUxPR19JTkNMVURFX0RJUlMpIHsKKwkJbG9nICJBZGRpbmcgaW5jbHVkZSBmaWxlIC1JJGRpciAiCisJCWxhcHBlbmQgdklkaXJzQXJncyAiLUkkZGlyIgorCX0KKwlzZXQgdklkaXJzQXJncyBbam9pbiAkdklkaXJzQXJnc10KK30KKworCisKK2lmIHsgW2luZm8gZXhpc3RzIDo6ZW52KEVYVFJBX0xJQlMpIF0gfSB7CisJZm9yZWFjaCBsaWIgJDo6ZW52KEVYVFJBX0xJQlMpIHsKKwkJcmVhZF9saWJlcnR5IHsqfSR2SWRpcnNBcmdzIC1saWIgLWlnbm9yZV9taXNzX2RpciAtc2V0YXR0ciBibGFja2JveCAkbGliCisJfQorfQorCisKKworIyBucyBleHBlY3RlZCAoaW4gc2RjIGFzIHdlbGwpCitzZXQgY2xvY2tfcGVyaW9kIFtleHByIHskOjplbnYoQ0xPQ0tfUEVSSU9EKSoxMDAwfV0KKworc2V0IGRyaXZlciAgJDo6ZW52KFNZTlRIX0RSSVZJTkdfQ0VMTCkKK3NldCBjbG9hZCAgICQ6OmVudihTWU5USF9DQVBfTE9BRCkKKyMgaW5wdXQgcGluIGNhcCBvZiBJTl8zVlg4CitzZXQgbWF4X0ZPICQ6OmVudihTWU5USF9NQVhfRkFOT1VUKQoraWYgeyFbaW5mbyBleGlzdCA6OmVudihTWU5USF9NQVhfVFJBTildfSB7CisJc2V0IDo6ZW52KFNZTlRIX01BWF9UUkFOKSBbZXhwciB7MC4xKiRjbG9ja19wZXJpb2R9XQorfSBlbHNlIHsKKwlzZXQgOjplbnYoU1lOVEhfTUFYX1RSQU4pIFtleHByIHskOjplbnYoU1lOVEhfTUFYX1RSQU4pICogMTAwMH1dCit9CitzZXQgbWF4X1RyYW4gJDo6ZW52KFNZTlRIX01BWF9UUkFOKQorCisKKyMgTWFwcGluZyBwYXJhbWV0ZXJzCitzZXQgQV9mYWN0b3IgIDAuMDAKK3NldCBCX2ZhY3RvciAgMC44OAorc2V0IEZfZmFjdG9yICAwLjAwCisKKyMgRG9uJ3QgY2hhbmdlIHRoZXNlIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKK3NldCBzdGF0X2V4dCAgICAiLnN0YXQucnB0Igorc2V0IGNoa19leHQgICAgIi5jaGsucnB0Igorc2V0IGdsX2V4dCAgICAgICIuZ2wudiIKK3NldCBjb25zdHJfZXh0ICAiLiRjbG9ja19wZXJpb2QuY29uc3RyIgorc2V0IHRpbWluZ19leHQgICIudGltaW5nLnR4dCIKK3NldCBhYmNfZXh0ICAgICAiLmFiYyIKKworCisjIGdldCBvbGQgc2RjLCBhZGQgbGlicmFyeSBzcGVjaWZpYyBzdHVmZiBmb3IgYWJjIHNjcmlwdHMKK3NldCBzZGNfZmlsZSAkOjplbnYoeW9zeXNfdG1wX2ZpbGVfdGFnKS5zZGMKK3NldCBvdXRmaWxlIFtvcGVuICR7c2RjX2ZpbGV9IHddCisjcHV0cyAkb3V0ZmlsZSAkc2RjX2RhdGEKK3B1dHMgJG91dGZpbGUgInNldF9kcml2aW5nX2NlbGwgJHtkcml2ZXJ9IgorcHV0cyAkb3V0ZmlsZSAic2V0X2xvYWQgJHtjbG9hZH0iCitjbG9zZSAkb3V0ZmlsZQorCisKKyMgQUJDIFNjcmlwcworc2V0IGFiY19yc19LICAgICJyZXN1YiwtSywiCitzZXQgYWJjX3JzICAgICAgInJlc3ViIgorc2V0IGFiY19yc3ogICAgICJyZXN1YiwteiIKK3NldCBhYmNfcndfSyAgICAicmV3cml0ZSwtSywiCitzZXQgYWJjX3J3ICAgICAgInJld3JpdGUiCitzZXQgYWJjX3J3eiAgICAgInJld3JpdGUsLXoiCitzZXQgYWJjX3JmICAgICAgInJlZmFjdG9yIgorc2V0IGFiY19yZnogICAgICJyZWZhY3RvciwteiIKK3NldCBhYmNfYiAgICAgICAiYmFsYW5jZSIKKworc2V0IGFiY19yZXN5bjIgICAgICAgICIke2FiY19ifTsgJHthYmNfcnd9OyAke2FiY19yZn07ICR7YWJjX2J9OyAke2FiY19yd307ICR7YWJjX3J3en07ICR7YWJjX2J9OyAke2FiY19yZnp9OyAke2FiY19yd3p9OyAke2FiY19ifSIKK3NldCBhYmNfc2hhcmUgICAgICAgICAic3RyYXNoOyBtdWx0aSwtbTsgJHthYmNfcmVzeW4yfSIKK3NldCBhYmNfcmVzeW4yYSAgICAgICAiJHthYmNfYn07JHthYmNfcnd9OyR7YWJjX2J9OyR7YWJjX3J3fTske2FiY19yd3p9OyR7YWJjX2J9OyR7YWJjX3J3en07JHthYmNfYn0iCitzZXQgYWJjX3Jlc3luMyAgICAgICAgImJhbGFuY2U7cmVzdWI7cmVzdWIsLUssNjtiYWxhbmNlO3Jlc3ViLC16O3Jlc3ViLC16LC1LLDY7YmFsYW5jZTtyZXN1YiwteiwtSyw1O2JhbGFuY2UiCitzZXQgYWJjX3Jlc3luMnJzICAgICAgIiR7YWJjX2J9OyR7YWJjX3JzX0t9LDY7JHthYmNfcnd9OyR7YWJjX3JzX0t9LDYsLU4sMjske2FiY19yZn07JHthYmNfcnNfS30sODske2FiY19yd307JHthYmNfcnNfS30sMTA7JHthYmNfcnd6fTske2FiY19yc19LfSwxMCwtTiwyOyR7YWJjX2J9LCR7YWJjX3JzX0t9LDEyOyR7YWJjX3Jmen07JHthYmNfcnNfS30sMTIsLU4sMjske2FiY19yd3p9OyR7YWJjX2J9IgorCitzZXQgYWJjX2Nob2ljZSAgICAgICAgImZyYWlnX3N0b3JlOyAke2FiY19yZXN5bjJ9OyBmcmFpZ19zdG9yZTsgJHthYmNfcmVzeW4yfTsgZnJhaWdfc3RvcmU7IGZyYWlnX3Jlc3RvcmUiCitzZXQgYWJjX2Nob2ljZTIgICAgICAiZnJhaWdfc3RvcmU7IGJhbGFuY2U7IGZyYWlnX3N0b3JlOyAke2FiY19yZXN5bjJ9OyBmcmFpZ19zdG9yZTsgJHthYmNfcmVzeW4yfTsgZnJhaWdfc3RvcmU7ICR7YWJjX3Jlc3luMn07IGZyYWlnX3N0b3JlOyBmcmFpZ19yZXN0b3JlIgorCitzZXQgYWJjX21hcF9vbGRfY250CQkJIm1hcCwtcCwtYSwtQiwwLjIsLUEsMC45LC1NLDAiCitzZXQgYWJjX21hcF9vbGRfZGx5ICAgICAgICAgIm1hcCwtcCwtQiwwLjIsLUEsMC45LC1NLDAiCitzZXQgYWJjX3JldGltZV9hcmVhICAgICAgICAgInJldGltZSwtRCx7RH0sLU0sNSIKK3NldCBhYmNfcmV0aW1lX2RseSAgICAgICAgICAicmV0aW1lLC1ELHtEfSwtTSw2Igorc2V0IGFiY19tYXBfbmV3X2FyZWEgICAgICAgICJhbWFwLC1tLC1RLDAuMSwtRiwyMCwtQSwyMCwtQyw1MDAwIgorCitzZXQgYWJjX2FyZWFfcmVjb3ZlcnlfMSAgICAgICAiJHthYmNfY2hvaWNlfTsgbWFwOyIKK3NldCBhYmNfYXJlYV9yZWNvdmVyeV8yICAgICAgICIke2FiY19jaG9pY2UyfTsgbWFwOyIKKworc2V0IG1hcF9vbGRfY250CQkJICAgICJtYXAsLXAsLWEsLUIsMC4yLC1BLDAuOSwtTSwwIgorc2V0IG1hcF9vbGRfZGx5CQkJICAgICJtYXAsLXAsLUIsMC4yLC1BLDAuOSwtTSwwIgorc2V0IGFiY19yZXRpbWVfYXJlYSAgIAkicmV0aW1lLC1ELHtEfSwtTSw1Igorc2V0IGFiY19yZXRpbWVfZGx5ICAgIAkicmV0aW1lLC1ELHtEfSwtTSw2Igorc2V0IGFiY19tYXBfbmV3X2FyZWEgIAkiYW1hcCwtbSwtUSwwLjEsLUYsMjAsLUEsMjAsLUMsNTAwMCIKKworaWYgeyRidWZmZXJpbmc9PTF9IHsKKwlzZXQgYWJjX2ZpbmVfdHVuZQkJImJ1ZmZlciwtTiwke21heF9GT30sLVMsJHttYXhfVHJhbn07dXBzaXplLHtEfTtkbnNpemUse0R9IgorfSBlbHNlaWYgeyRzaXppbmd9IHsKKwlzZXQgYWJjX2ZpbmVfdHVuZSAgICAgICAidXBzaXplLHtEfTtkbnNpemUse0R9IgorfSBlbHNlIHsKKwlzZXQgYWJjX2ZpbmVfdHVuZSAgICAgICAiIgorfQorCisKK3NldCBkZWxheV9zY3JpcHRzIFtsaXN0IFwKKwkiK3JlYWRfY29uc3RyLCR7c2RjX2ZpbGV9O2Z4O21mcztzdHJhc2g7cmVmYWN0b3I7JHthYmNfcmVzeW4yfTske2FiY19yZXRpbWVfZGx5fTsgc2NsZWFudXA7JHthYmNfbWFwX29sZF9kbHl9O3JldGltZSwtRCx7RH07JHthYmNfZmluZV90dW5lfTtzdGltZSwtcDtwcmludF9zdGF0cyAtbSIgXAorCVwKKwkiK3JlYWRfY29uc3RyLCR7c2RjX2ZpbGV9O2Z4O21mcztzdHJhc2g7cmVmYWN0b3I7JHthYmNfcmVzeW4yfTske2FiY19yZXRpbWVfZGx5fTsgc2NsZWFudXA7JHthYmNfY2hvaWNlMn07JHthYmNfbWFwX29sZF9kbHl9OyR7YWJjX2FyZWFfcmVjb3ZlcnlfMn07IHJldGltZSwtRCx7RH07JHthYmNfZmluZV90dW5lfTtzdGltZSwtcDtwcmludF9zdGF0cyAtbSIgXAorCVwKKwkiK3JlYWRfY29uc3RyLCR7c2RjX2ZpbGV9O2Z4O21mcztzdHJhc2g7cmVmYWN0b3I7JHthYmNfcmVzeW4yfTske2FiY19yZXRpbWVfZGx5fTsgc2NsZWFudXA7JHthYmNfY2hvaWNlfTske2FiY19tYXBfb2xkX2RseX07JHthYmNfYXJlYV9yZWNvdmVyeV8xfTsgcmV0aW1lLC1ELHtEfTske2FiY19maW5lX3R1bmV9O3N0aW1lLC1wO3ByaW50X3N0YXRzIC1tIiBcCisJXAorCSIrcmVhZF9jb25zdHIsJHtzZGNfZmlsZX07Zng7bWZzO3N0cmFzaDtyZWZhY3Rvcjske2FiY19yZXN5bjJ9OyR7YWJjX3JldGltZV9hcmVhfTtzY2xlYW51cDske2FiY19jaG9pY2UyfTske2FiY19tYXBfbmV3X2FyZWF9OyR7YWJjX2Nob2ljZTJ9OyR7YWJjX21hcF9vbGRfZGx5fTtyZXRpbWUsLUQse0R9OyR7YWJjX2ZpbmVfdHVuZX07c3RpbWUsLXA7cHJpbnRfc3RhdHMgLW0iIFwKKwldCisKK3NldCBhcmVhX3NjcmlwdHMgW2xpc3QgXAorCSIrcmVhZF9jb25zdHIsJHtzZGNfZmlsZX07Zng7bWZzO3N0cmFzaDtyZWZhY3Rvcjske2FiY19yZXN5bjJ9OyR7YWJjX3JldGltZV9hcmVhfTtzY2xlYW51cDske2FiY19jaG9pY2UyfTske2FiY19tYXBfbmV3X2FyZWF9O3JldGltZSwtRCx7RH07JHthYmNfZmluZV90dW5lfTtzdGltZSwtcDtwcmludF9zdGF0cyAtbSIgXAorCVwKKwkiK3JlYWRfY29uc3RyLCR7c2RjX2ZpbGV9O2Z4O21mcztzdHJhc2g7cmVmYWN0b3I7JHthYmNfcmVzeW4yfTske2FiY19yZXRpbWVfYXJlYX07c2NsZWFudXA7JHthYmNfY2hvaWNlMn07JHthYmNfbWFwX25ld19hcmVhfTske2FiY19jaG9pY2UyfTske2FiY19tYXBfbmV3X2FyZWF9O3JldGltZSwtRCx7RH07JHthYmNfZmluZV90dW5lfTtzdGltZSwtcDtwcmludF9zdGF0cyAtbSIgXAorCVwKKwkiK3JlYWRfY29uc3RyLCR7c2RjX2ZpbGV9O2Z4O21mcztzdHJhc2g7cmVmYWN0b3I7JHthYmNfY2hvaWNlMn07JHthYmNfcmV0aW1lX2FyZWF9O3NjbGVhbnVwOyR7YWJjX2Nob2ljZTJ9OyR7YWJjX21hcF9uZXdfYXJlYX07JHthYmNfY2hvaWNlMn07JHthYmNfbWFwX25ld19hcmVhfTtyZXRpbWUsLUQse0R9OyR7YWJjX2ZpbmVfdHVuZX07c3RpbWUsLXA7cHJpbnRfc3RhdHMgLW0iIFwKKwldCisKK3NldCBhbGxfc2NyaXB0cyBbbGlzdCB7Kn0kZGVsYXlfc2NyaXB0cyB7Kn0kYXJlYV9zY3JpcHRzXQorCitzZXQgc3RyYXRlZ3lfcGFydHMgW3NwbGl0ICQ6OmVudihTWU5USF9TVFJBVEVHWSldCisKK3Byb2Mgc3ludGhfc3RyYXRlZ3lfZm9ybWF0X2VyciB7IH0geworCXVwdmFyIGFyZWFfc2NyaXB0cyBhcmVhX3NjcmlwdHMKKwl1cHZhciBkZWxheV9zY3JpcHRzIGRlbGF5X3NjcmlwdHMKKwlsb2cgLXN0ZGVyciAiXFtFUlJPUl0gTWlzZm9ybWF0dGVkIFNZTlRIX1NUUkFURUdZIChcIiQ6OmVudihTWU5USF9TVFJBVEVHWSlcIikuIgorCWxvZyAtc3RkZXJyICJcW0VSUk9SXSBDb3JyZWN0IGZvcm1hdCBpcyBcIkRFTEFZfEFSRUEgMC1bZXhwciBbbGxlbmd0aCAkZGVsYXlfc2NyaXB0c10tMV18MC1bZXhwciBbbGxlbmd0aCAkYXJlYV9zY3JpcHRzXS0xXVwiLiIKKwlleGl0IDEKK30KKworaWYgeyBbbGxlbmd0aCAkc3RyYXRlZ3lfcGFydHNdICE9IDIgfSB7CisJc3ludGhfc3RyYXRlZ3lfZm9ybWF0X2VycgorfQorCitzZXQgc3RyYXRlZ3lfdHlwZSBbbGluZGV4ICRzdHJhdGVneV9wYXJ0cyAwXQorc2V0IHN0cmF0ZWd5X3R5cGVfaWR4IFtsaW5kZXggJHN0cmF0ZWd5X3BhcnRzIDFdCisKK2lmIHsgJHN0cmF0ZWd5X3R5cGUgIT0gIkFSRUEiICYmICRzdHJhdGVneV90eXBlICE9ICJERUxBWSIgfSB7CisJbG9nIC1zdGRlcnIgIlxbRVJST1JdIEFSRUF8REVMQVkgdG9rZW5zIG5vdCBmb3VuZC4gKCRzdHJhdGVneV90eXBlKSIKKwlzeW50aF9zdHJhdGVneV9mb3JtYXRfZXJyCit9CisKK2lmIHsgJHN0cmF0ZWd5X3R5cGUgPT0gIkRFTEFZIiAmJiAkc3RyYXRlZ3lfdHlwZV9pZHggPj0gW2xsZW5ndGggJGRlbGF5X3NjcmlwdHNdIH0geworCWxvZyAtc3RkZXJyICJcW0VSUk9SXSBzdHJhdGVneSBpbmRleCAoJHN0cmF0ZWd5X3R5cGVfaWR4KSBpcyB0b28gaGlnaC4iCisJc3ludGhfc3RyYXRlZ3lfZm9ybWF0X2VycgorfQorCitpZiB7ICRzdHJhdGVneV90eXBlID09ICJBUkVBIiAmJiAkc3RyYXRlZ3lfdHlwZV9pZHggPj0gW2xsZW5ndGggJGFyZWFfc2NyaXB0c10gfSB7CisJbG9nIC1zdGRlcnIgIlxbRVJST1JdIHN0cmF0ZWd5IGluZGV4ICgkc3RyYXRlZ3lfdHlwZV9pZHgpIGlzIHRvbyBoaWdoLiIKKwlzeW50aF9zdHJhdGVneV9mb3JtYXRfZXJyCit9CisKK2lmIHsgJHN0cmF0ZWd5X3R5cGUgPT0gIkRFTEFZIiB9IHsKKwlzZXQgc3RyYXRlZ3kgJHN0cmF0ZWd5X3R5cGVfaWR4Cit9IGVsc2UgeworCXNldCBzdHJhdGVneSBbZXhwciB7W2xsZW5ndGggJGRlbGF5X3NjcmlwdHNdKyRzdHJhdGVneV90eXBlX2lkeH1dCit9CisKKworZm9yIHsgc2V0IGkgMCB9IHsgJGkgPCBbbGxlbmd0aCAkOjplbnYoVkVSSUxPR19GSUxFUyldIH0geyBpbmNyIGkgfSB7CisJcmVhZF92ZXJpbG9nIC1zdiB7Kn0kdklkaXJzQXJncyBbbGluZGV4ICQ6OmVudihWRVJJTE9HX0ZJTEVTKSAkaV0KK30KKworaWYgeyBbaW5mbyBleGlzdHMgOjplbnYoVkVSSUxPR19GSUxFU19CTEFDS0JPWCldIH0geworCWZvcmVhY2ggdmVyaWxvZ19maWxlICQ6OmVudihWRVJJTE9HX0ZJTEVTX0JMQUNLQk9YKSB7CisJCXJlYWRfdmVyaWxvZyAtc3Ygeyp9JHZJZGlyc0FyZ3MgLWxpYiAkdmVyaWxvZ19maWxlCisJfQorfQorc2VsZWN0IC1tb2R1bGUgJHZ0b3AKK3Nob3cgLWZvcm1hdCBkb3QgLXByZWZpeCAkOjplbnYoVE1QX0RJUikvc3ludGhlc2lzL2hpZXJhcmNoeQorc2VsZWN0IC1jbGVhcgorCitoaWVyYXJjaHkgLWNoZWNrIC10b3AgJHZ0b3AKKworIyBJbmZlciB0cmktc3RhdGUgYnVmZmVycy4KK3NldCB0YnVmX21hcCBmYWxzZQoraWYgeyBbaW5mbyBleGlzdHMgOjplbnYoVFJJU1RBVEVfQlVGRkVSX01BUCldIH0geworICAgICAgICBpZiB7IFtmaWxlIGV4aXN0cyAkOjplbnYoVFJJU1RBVEVfQlVGRkVSX01BUCldIH0geworICAgICAgICAgICAgICAgIHNldCB0YnVmX21hcCB0cnVlCisgICAgICAgICAgICAgICAgdHJpYnVmCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgbG9nICJXQVJOSU5HOiBUUklTVEFURV9CVUZGRVJfTUFQIGlzIGRlZmluZWQgYnV0IGNvdWxkIG5vdCBiZSBmb3VuZDogJDo6ZW52KFRSSVNUQVRFX0JVRkZFUl9NQVApIgorICAgICAgICB9Cit9CisKK2lmIHsgJDo6ZW52KFNZTlRIX05PX0ZMQVQpIH0geworCXN5bnRoIC10b3AgJHZ0b3AKK30gZWxzZSB7CisJc3ludGggLXRvcCAkdnRvcCAtZmxhdHRlbgorfQorCitzaGFyZSAtYWdncmVzc2l2ZQorb3B0CitvcHRfY2xlYW4gLXB1cmdlCisKK3RlZSAtbyAiJDo6ZW52KHlvc3lzX3JlcG9ydF9maWxlX3RhZylfcHJlLnN0YXQiIHN0YXQKKworIyBNYXAgdHJpLXN0YXRlIGJ1ZmZlcnMuCitpZiB7ICR0YnVmX21hcCB9IHsKKyAgICAgICAgbG9nIHttYXBwaW5nIHRidWZ9CisgICAgICAgIHRlY2htYXAgLW1hcCAkOjplbnYoVFJJU1RBVEVfQlVGRkVSX01BUCkKKyAgICAgICAgc2ltcGxlbWFwCit9CisKKyMgaGFuZGxlIHRlY2hub2xvZ3kgbWFwcGluZyBvZiA0LU1VWCwgYW5kIHRlbGwgWW9zeXMgdG8gaW5mZXIgNC1tdXhlcworaWYgeyBbaW5mbyBleGlzdHMgOjplbnYoU1lOVEhfTVVYNF9NQVApXSAmJiBbZmlsZSBleGlzdHMgJDo6ZW52KFNZTlRIX01VWDRfTUFQKV0gfSB7CisgIG11eGNvdmVyIC1tdXg0IAorICB0ZWNobWFwIC1tYXAgJDo6ZW52KFNZTlRIX01VWDRfTUFQKQorICBzaW1wbGVtYXAKK30KKworIyBoYW5kbGUgdGVjaG5vbG9neSBtYXBwaW5nIG9mIDItTVVYCitpZiB7IFtpbmZvIGV4aXN0cyA6OmVudihTWU5USF9NVVhfTUFQKV0gJiYgW2ZpbGUgZXhpc3RzICQ6OmVudihTWU5USF9NVVhfTUFQKV0gfSB7CisgIHRlY2htYXAgLW1hcCAkOjplbnYoU1lOVEhfTVVYX01BUCkKKyAgc2ltcGxlbWFwCit9CisKKyMgaGFuZGxlIHRlY2hub2xvZ3kgbWFwcGluZyBvZiBsYXRjaGVzCitpZiB7IFtpbmZvIGV4aXN0cyA6OmVudihTWU5USF9MQVRDSF9NQVApXSAmJiBbZmlsZSBleGlzdHMgJDo6ZW52KFNZTlRIX0xBVENIX01BUCldIH0geworCXRlY2htYXAgLW1hcCAkOjplbnYoU1lOVEhfTEFUQ0hfTUFQKQorCXNpbXBsZW1hcAorfQorCitkZmZsaWJtYXAgLWxpYmVydHkgJHNjbGliCit0ZWUgLW8gIiQ6OmVudih5b3N5c19yZXBvcnRfZmlsZV90YWcpX2RmZi5zdGF0IiBzdGF0CisKK2lmIHsgW2luZm8gZXhpc3RzIDo6ZW52KFNZTlRIX0VYUExPUkUpXSAmJiAkOjplbnYoU1lOVEhfRVhQTE9SRSkgfSB7CisJZGVzaWduIC1zYXZlIG15RGVzaWduCisKKwlmb3IgeyBzZXQgaW5kZXggMCB9ICB7ICRpbmRleCA8IFtsbGVuZ3RoICRhbGxfc2NyaXB0c10gfSAgeyBpbmNyIGluZGV4IH0geworCQlsb2cgIlxbSU5GT1xdOiBBQkM6IFdpcmVMb2FkIDogU18kaW5kZXgiCisJCWRlc2lnbiAtbG9hZCBteURlc2lnbgorCisJCWFiYyAtRCAkY2xvY2tfcGVyaW9kIFwKKwkJCS1jb25zdHIgIiRzZGNfZmlsZSIgXAorCQkJLWxpYmVydHkgJHNjbGliICBcCisJCQktc2NyaXB0IFtsaW5kZXggJGFsbF9zY3JpcHRzICRpbmRleF0KKworCQlzZXR1bmRlZiAtemVybworCisJCWhpbG9tYXAgLWhpY2VsbCB7Kn0kOjplbnYoU1lOVEhfVElFSElfUE9SVCkgLWxvY2VsbCB7Kn0kOjplbnYoU1lOVEhfVElFTE9fUE9SVCkKKworCQkjIGdldCByaWQgb2YgdGhlIGFzc2lnbm1lbnRzIHRoYXQgbWFrZSB2ZXJpbG9nMmRlZiBmYWlsCisJCXNwbGl0bmV0cworCQlvcHRfY2xlYW4gLXB1cmdlCisJCWluc2J1ZiAtYnVmIHsqfSQ6OmVudihTWU5USF9NSU5fQlVGX1BPUlQpCisKKwkJdGVlIC1vICIkOjplbnYoeW9zeXNfcmVwb3J0X2ZpbGVfdGFnKV8kaW5kZXgkY2hrX2V4dCIgY2hlY2sKKwkJd3JpdGVfdmVyaWxvZyAtbm9hdHRyIC1ub2V4cHIgLW5vaGV4IC1ub2RlYyAtZGVmcGFyYW0gIiQ6OmVudih5b3N5c19yZXN1bHRfZmlsZV90YWcpXyRpbmRleC52IgorCQlkZXNpZ24gLXJlc2V0CisJfQorfSBlbHNlIHsKKworCWxvZyAiXFtJTkZPXF06IEFCQzogV2lyZUxvYWQgOiBTXyRzdHJhdGVneSIKKworCWFiYyAtRCAkY2xvY2tfcGVyaW9kIFwKKwkJLWNvbnN0ciAiJHNkY19maWxlIiBcCisJCS1saWJlcnR5ICRzY2xpYiAgXAorCQktc2NyaXB0IFtsaW5kZXggJGFsbF9zY3JpcHRzICRzdHJhdGVneV0gXAorCQktc2hvd3RtcDsKKworCXNldHVuZGVmIC16ZXJvCisKKwloaWxvbWFwIC1oaWNlbGwgeyp9JDo6ZW52KFNZTlRIX1RJRUhJX1BPUlQpIC1sb2NlbGwgeyp9JDo6ZW52KFNZTlRIX1RJRUxPX1BPUlQpCisKKwkjIGdldCByaWQgb2YgdGhlIGFzc2lnbm1lbnRzIHRoYXQgbWFrZSB2ZXJpbG9nMmRlZiBmYWlsCisJc3BsaXRuZXRzCisJb3B0X2NsZWFuIC1wdXJnZQorCWluc2J1ZiAtYnVmIHsqfSQ6OmVudihTWU5USF9NSU5fQlVGX1BPUlQpCisKKwl0ZWUgLW8gIiQ6OmVudih5b3N5c19yZXBvcnRfZmlsZV90YWcpXyRzdHJhdGVneSRjaGtfZXh0IiBjaGVjaworCXdyaXRlX3Zlcmlsb2cgLW5vYXR0ciAtbm9leHByIC1ub2hleCAtbm9kZWMgLWRlZnBhcmFtICIkOjplbnYoU0FWRV9ORVRMSVNUKSIKK30KKworaWYgeyAkOjplbnYoU1lOVEhfTk9fRkxBVCkgfSB7CisJZGVzaWduIC1yZXNldAorCWZpbGUgY29weSAtZm9yY2UgJDo6ZW52KFNBVkVfTkVUTElTVCkgJDo6ZW52KHlvc3lzX3RtcF9maWxlX3RhZylfdW5mbGF0LnYKKwlyZWFkX3Zlcmlsb2cgLXN2ICQ6OmVudihTQVZFX05FVExJU1QpCisJc3ludGggLXRvcCAkdnRvcCAtZmxhdHRlbgorCXNwbGl0bmV0cworCW9wdF9jbGVhbiAtcHVyZ2UKKwlpbnNidWYgLWJ1ZiB7Kn0kOjplbnYoU1lOVEhfTUlOX0JVRl9QT1JUKQorCXdyaXRlX3Zlcmlsb2cgLW5vYXR0ciAtbm9leHByIC1ub2hleCAtbm9kZWMgLWRlZnBhcmFtICIkOjplbnYoU0FWRV9ORVRMSVNUKSIKKwl0ZWUgLW8gIiQ6OmVudih5b3N5c19yZXBvcnRfZmlsZV90YWcpXyRzdHJhdGVneSRjaGtfZXh0IiBjaGVjaworfQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvZGlnaXRhbF9jb3JlL2ZpbGVsaXN0X3J0bC5mIGIvdmVyaWxvZy9ydGwvZGlnaXRhbF9jb3JlL2ZpbGVsaXN0X3J0bC5mCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNiYjNkOTUKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC9kaWdpdGFsX2NvcmUvZmlsZWxpc3RfcnRsLmYKQEAgLTAsMCArMSw3NSBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxLCBEaW5lc2ggQW5uYXl5YQorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworK2luY2RpcisuLi9zZHJhbV9jdHJsL3NyYy9kZWZzIAorK2luY2RpcisuLi9zeW50YWNvcmUvc2NyMS9zcmMvaW5jbHVkZXMKKworLi4vc3BpX21hc3Rlci9zcmMvc3BpbV90b3Auc3YKKy4uL3NwaV9tYXN0ZXIvc3JjL3NwaW1fcmVncy5zdgorLi4vc3BpX21hc3Rlci9zcmMvc3BpbV9jbGtnZW4uc3YKKy4uL3NwaV9tYXN0ZXIvc3JjL3NwaW1fY3RybC5zdgorLi4vc3BpX21hc3Rlci9zcmMvc3BpbV9yeC5zdgorLi4vc3BpX21hc3Rlci9zcmMvc3BpbV90eC5zdgorCisuLi9zZHJhbV9jdHJsL3NyYy90b3Avc2RyY190b3AudiAKKy4uL3NkcmFtX2N0cmwvc3JjL3diMnNkcmMvd2Iyc2RyYy52IAorLi4vbGliL2FzeW5jX2ZpZm8uc3YgIAorLi4vc2RyYW1fY3RybC9zcmMvY29yZS9zZHJjX2NvcmUudiAKKy4uL3NkcmFtX2N0cmwvc3JjL2NvcmUvc2RyY19iYW5rX2N0bC52IAorLi4vc2RyYW1fY3RybC9zcmMvY29yZS9zZHJjX2JhbmtfZnNtLnYgCisuLi9zZHJhbV9jdHJsL3NyYy9jb3JlL3NkcmNfYnNfY29udmVydC52IAorLi4vc2RyYW1fY3RybC9zcmMvY29yZS9zZHJjX3JlcV9nZW4udiAKKy4uL3NkcmFtX2N0cmwvc3JjL2NvcmUvc2RyY194ZnJfY3RsLnYgCisKKy4uL2xpYi93Yl9jcm9zc2Jhci52CisuLi9saWIvcmVnaXN0ZXJzLnYKKy4uL2xpYi9jbGtfY3RsLnYKKy4vc3JjL2dsYmxfY2ZnLnN2CisuL3NyYy9kaWdpdGFsX2NvcmUuc3YKKworCisuLi9zeW50YWNvcmUvc2NyMS9zcmMvY29yZS9waXBlbGluZS9zY3IxX3BpcGVfaGR1LnN2CisuLi9zeW50YWNvcmUvc2NyMS9zcmMvY29yZS9waXBlbGluZS9zY3IxX3BpcGVfdGR1LnN2CisuLi9zeW50YWNvcmUvc2NyMS9zcmMvY29yZS9waXBlbGluZS9zY3IxX2lwaWMuc3YKKy4uL3N5bnRhY29yZS9zY3IxL3NyYy9jb3JlL3BpcGVsaW5lL3NjcjFfcGlwZV9jc3Iuc3YKKy4uL3N5bnRhY29yZS9zY3IxL3NyYy9jb3JlL3BpcGVsaW5lL3NjcjFfcGlwZV9leHUuc3YKKy4uL3N5bnRhY29yZS9zY3IxL3NyYy9jb3JlL3BpcGVsaW5lL3NjcjFfcGlwZV9pYWx1LnN2CisuLi9zeW50YWNvcmUvc2NyMS9zcmMvY29yZS9waXBlbGluZS9zY3IxX3BpcGVfaWR1LnN2CisuLi9zeW50YWNvcmUvc2NyMS9zcmMvY29yZS9waXBlbGluZS9zY3IxX3BpcGVfaWZ1LnN2CisuLi9zeW50YWNvcmUvc2NyMS9zcmMvY29yZS9waXBlbGluZS9zY3IxX3BpcGVfbHN1LnN2CisuLi9zeW50YWNvcmUvc2NyMS9zcmMvY29yZS9waXBlbGluZS9zY3IxX3BpcGVfbXByZi5zdgorLi4vc3ludGFjb3JlL3NjcjEvc3JjL2NvcmUvcGlwZWxpbmUvc2NyMV9waXBlX3RvcC5zdgorLi4vc3ludGFjb3JlL3NjcjEvc3JjL2NvcmUvcHJpbWl0aXZlcy9zY3IxX3Jlc2V0X2NlbGxzLnN2CisuLi9zeW50YWNvcmUvc2NyMS9zcmMvY29yZS9wcmltaXRpdmVzL3NjcjFfY2cuc3YKKy4uL3N5bnRhY29yZS9zY3IxL3NyYy9jb3JlL3NjcjFfY2xrX2N0cmwuc3YKKy4uL3N5bnRhY29yZS9zY3IxL3NyYy9jb3JlL3NjcjFfdGFwY19zaGlmdF9yZWcuc3YKKy4uL3N5bnRhY29yZS9zY3IxL3NyYy9jb3JlL3NjcjFfdGFwYy5zdgorLi4vc3ludGFjb3JlL3NjcjEvc3JjL2NvcmUvc2NyMV90YXBjX3N5bmNocm9uaXplci5zdgorLi4vc3ludGFjb3JlL3NjcjEvc3JjL2NvcmUvc2NyMV9jb3JlX3RvcC5zdgorLi4vc3ludGFjb3JlL3NjcjEvc3JjL2NvcmUvc2NyMV9kbS5zdgorLi4vc3ludGFjb3JlL3NjcjEvc3JjL2NvcmUvc2NyMV9kbWkuc3YKKy4uL3N5bnRhY29yZS9zY3IxL3NyYy9jb3JlL3NjcjFfc2N1LnN2CisKKy4uL3N5bnRhY29yZS9zY3IxL3NyYy90b3Avc2NyMV9kbWVtX3JvdXRlci5zdgorLi4vc3ludGFjb3JlL3NjcjEvc3JjL3RvcC9zY3IxX2RwX21lbW9yeS5zdgorLi4vc3ludGFjb3JlL3NjcjEvc3JjL3RvcC9zY3IxX3RjbS5zdgorLi4vc3ludGFjb3JlL3NjcjEvc3JjL3RvcC9zY3IxX3RpbWVyLnN2CisuLi9zeW50YWNvcmUvc2NyMS9zcmMvdG9wL3NjcjFfZG1lbV93Yi5zdgorLi4vc3ludGFjb3JlL3NjcjEvc3JjL3RvcC9zY3IxX2ltZW1fd2Iuc3YKKy4uL3N5bnRhY29yZS9zY3IxL3NyYy90b3Avc2NyMV90b3Bfd2Iuc3YKKy4uL2xpYi9zeW5jX2ZpZm8uc3YKKwpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvZGlnaXRhbF9jb3JlL3J1bl9tb2RlbHNpbSBiL3Zlcmlsb2cvcnRsL2RpZ2l0YWxfY29yZS9ydW5fbW9kZWxzaW0KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmI1NmIxMgotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL2RpZ2l0YWxfY29yZS9ydW5fbW9kZWxzaW0KQEAgLTAsMCArMSwyMSBAQAorIyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyMgLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSwgRGluZXNoIEFubmF5eWEKKyMgLy8gCisjIC8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyAvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIC8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAvLworIyAvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAvLworIyAvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIC8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIC8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyAvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIC8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIyAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorIyAvLyBTUERYLUZpbGVDb250cmlidXRvcjogRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKyMgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwordmxpYiB3b3JrCit2bG9nIC1mIGZpbGVsaXN0X3J0bC5mCit2c2ltIC1jIGRpZ2l0YWxfY29yZSAtc3VwcHJlc3MgdnNpbS0zOTk5IC1kbyAiZXhpdCIKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL2RpZ2l0YWxfY29yZS9zcmMvZGlnaXRhbF9jb3JlLnN2IGIvdmVyaWxvZy9ydGwvZGlnaXRhbF9jb3JlL3NyYy9kaWdpdGFsX2NvcmUuc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmViNGIyNwotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL2RpZ2l0YWxfY29yZS9zcmMvZGlnaXRhbF9jb3JlLnN2CkBAIC0wLDAgKzEsODA1IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEgLCBEaW5lc2ggQW5uYXl5YSAgICAgICAgICAgICAgICAgICAgICAgICAgCisvLyAKKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogQ3JlYXRlZCBieSBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERpZ2l0YWwgY29yZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBZSUZpdmUgY29yZXMgcHJvamVjdCAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHBzOi8vZ2l0aHViLmNvbS9kaW5lc2hhbm5heXlhL3lpZml2ZV9yMC5naXQgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9jb3Jlcy95aWZpdmUvICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICBUaGlzIGlzIGRpZ2l0YWwgY29yZSBhbmQgaW50ZWdyYXRlIGFsbCB0aGUgbWFpbiBibG9jayAgIC8vLy8KKy8vLy8gICAgICBoZXJlLiAgRm9sbG93aW5nIGJsb2NrIGFyZSBpbnRlZ3JhdGVkIGhlcmUgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAxLiBSaXNjIFYgQ29yZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAyLiBTUEkgTWFzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAzLiBXaXNoYm9uZSBDcm9zcyBCYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcihzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAtIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFJldmlzaW9uIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC4xIC0gMTZ0aCBGZWIgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgSW5pdGlhbCBpbnRlZ3JhdGlvbiB3aXRoIFJpc2MtViBjb3JlICsgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgV2lzaGJvbmUgQ3Jvc3MgQmFyICsgU1BJICBNYXN0ZXIgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC4yIC0gMTd0aCBKdW5lIDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgIDEuIEluIHJpc2MgY29yZSwgd2lzaGJvbmUgYW5kIGNvcmUgZG9tYWluIGlzICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgIGNyZWF0ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgIDIuIGNwdSBhbmQgcnRjIGNsb2NrIGFyZSBnZW5lcmF0ZWQgaW4gZ2xibCByZWcgYmxvY2sgIC8vLy8KKy8vLy8gICAgICAgIDMuIGluIHdpc2hib25lIGludGVyY29ubmVjdDotIFN0YWdnaW5nIGZsb3AgYXJlIGFkZGVkIC8vLy8KKy8vLy8gICAgICAgICAgIGF0IGludGVyZmFjZSB0byBicmVhayB3aXNoYm9uZSB0aW1pbmcgcGF0aCAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgIDQuIGJ1c3dpZHRoIHdhcm5pbmcgYXJlIGZpeGVkIGluc2lkZSBzcGlfbWFzdGVyICAgICAgIC8vLy8KKy8vLy8gICAgICAgIG1vZGlmaWVkIHJ0bCBmaWxlcyBhcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgIHZlcmlsb2cvcnRsL2RpZ2l0YWxfY29yZS9zcmMvZGlnaXRhbF9jb3JlLnN2ICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgIHZlcmlsb2cvcnRsL2RpZ2l0YWxfY29yZS9zcmMvZ2xibF9jZmcuc3YgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgIHZlcmlsb2cvcnRsL2xpYi93Yl9zdGFnZ2luZy5zdiAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgIHZlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy90b3Avc2NyMV9kbWVtX3diLnN2IC8vLy8KKy8vLy8gICAgICAgICAgIHZlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy90b3Avc2NyMV9pbWVtX3diLnN2IC8vLy8KKy8vLy8gICAgICAgICAgIHZlcmlsb2cvcnRsL3N5bnRhY29yZS9zY3IxL3NyYy90b3Avc2NyMV90b3Bfd2Iuc3YgIC8vLy8KKy8vLy8gICAgICAgICAgIHZlcmlsb2cvcnRsL3VzZXJfcHJvamVjdF93cmFwcGVyLnYgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgIHZlcmlsb2cvcnRsL3diX2ludGVyY29ubmVjdC9zcmMvd2JfaW50ZXJjb25uZWN0LnN2IC8vLy8KKy8vLy8gICAgICAgICAgIHZlcmlsb2cvcnRsL3NwaV9tYXN0ZXIvc3JjL3NwaW1fY2xrZ2VuLnN2ICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgIHZlcmlsb2cvcnRsL3NwaV9tYXN0ZXIvc3JjL3NwaW1fY3RybC5zdiAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC4zIC0gMjB0aCBKdW5lIDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgIDEuIHVhcnQgY29yZSBpcyBpbnRlZ3JhdGVkICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgIDIuIDNyZCBTbGF2ZSBwb3J0ZWQgYWRkZWQgdG8gd2lzaGJvbmUgaW50ZXJjb25uZWN0IC8vLy8KKy8vLy8gICAgMC40IC0gMjV0aCBKdW5lIDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgTW92ZWQgdGhlIHBhZCBsb2dpYyBpbnNpZGUgc2RyYW0sc3BpLHVhcnQgYmxvY2sgdG8gIC8vLy8KKy8vLy8gICAgICAgICAgYXZvaWQgbG9naWMgYXQgZGlnaXRhbCBjb3JlIGxldmVsICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC41IC0gMjV0aCBKdW5lIDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgU2luY2UgY2FydmVsIGdpdmVzIG9ubHkgMTZNQiBhZGRyZXNzIHNwYWNlIGZvciB1c2VyIC8vLy8KKy8vLy8gICAgICAgICAgc3BhY2UsIHdlIGhhdmUgaW1wbGVtZW50ZWQgaW5kaXJlY3QgYWRkcmVzcyBzZWxlY3QgIC8vLy8KKy8vLy8gICAgICAgICAgd2l0aCA4IGJpdCBiYW5rIHNlbGVjdCBnaXZlbiBpbnNpZGUgd2JfaG9zdCAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgY29yZSBBZGRyZXNzID0ge0JhbmtfU2VsWzc6MF0sIFdiX0FkZHJlc3NbMjM6MF0gICAgIC8vLy8KKy8vLy8gICAgICAgICAgY2FyYXZlbCB1c2VyIGFkZHJlc3Mgc3BhY2UgaXMgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgMHgzMDAwXzAwMDAgdG8gMHgzMEZGX0ZGRkYgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC42IC0gMjd0aCBKdW5lIDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgRGlnaXRhbCBjb3JlIGxldmVsIHRpZSBhcmUgbW92ZWQgaW5zaWRlIElQIHRvIGF2b2lkIC8vLy8KKy8vLy8gICAgICAgICAgcG93ZXIgaG9vayB1cCBhdCBjb3JlIGxldmVsICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgdV9yaXNjX3RvcCAtIHRlc3RfbW9kZSAmIHRlc3RfcnN0X24gICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgdV9pbnRlcmNvbiAtIHMqX3diZF9lcnJfaSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgdW51c2VkIHdiX2N0aV9pIGlzIHJlbW92ZWQgZnJvbSB1X3NkcmFtX2N0cmwgICAgICAgIC8vLy8KKy8vLy8gICAgMC43IC0gMjh0aCBKdW5lIDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgd2JfaW50ZXJjb25uZWN0IG1hc3RlciBwb3J0IGFyZSBpbnRlcmNoYW5nZWQgZm9yICAgIC8vLy8KKy8vLy8gICAgICAgICAgYmV0dGVyIHBoeXNpY2FsIHBsYWNlbWVudC4gICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgbTAgLSBFeHRlcm5hbCBIT1NUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgbTEgLSBSSVNDIElNRU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgbTIgLSBSSVNDIERNRU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC44IC0gNnRoIEp1bHkgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgRm9yIEJldHRlciBTRFJBTSBJbnRlcmZhY2UgdGltaW5nIHdlIGhhdmUgdGFwaW5nICAgIC8vLy8KKy8vLy8gICAgICAgICAgc2RyYW1fY2xvY2sgZ29pbnQgdG8gaW9fb3V0WzI5XSBkaXJlY3RseSBmcm9tICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgZ2xvYmFsIHJlZ2lzdGVyIGJsb2NrLCB0aGlzIGhlbHAgaW4gYmV0dGVyIFNEUkFNICAgIC8vLy8KKy8vLy8gICAgICAgICAgaW50ZXJmYWNlIHRpbWluZyBjb250cm9sICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gQ29weXJpZ2h0IChDKSAyMDAwIEF1dGhvcnMgYW5kIE9QRU5DT1JFUy5PUkcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgIC8vLy8KKy8vLy8gcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgIC8vLy8KKy8vLy8gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgIC8vLy8KKy8vLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCAgIC8vLy8KKy8vLy8gYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IC8vLy8KKy8vLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSAgIC8vLy8KKy8vLy8gbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlICAgICAgIC8vLy8KKy8vLy8gdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCAgIC8vLy8KKy8vLy8gd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAgICAgIC8vLy8KKy8vLy8gUFVSUE9TRS4gIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIC8vLy8KKy8vLy8gZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvdXJjZTsgaWYgbm90LCBkb3dubG9hZCBpdCAgIC8vLy8KKy8vLy8gZnJvbSBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvbGdwbC5zaHRtbCAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworCittb2R1bGUgZGlnaXRhbF9jb3JlICgKK2BpZmRlZiBVU0VfUE9XRVJfUElOUworICAgIGlub3V0IHZkZGExLAkvLyBVc2VyIGFyZWEgMSAzLjNWIHN1cHBseQorICAgIGlub3V0IHZkZGEyLAkvLyBVc2VyIGFyZWEgMiAzLjNWIHN1cHBseQorICAgIGlub3V0IHZzc2ExLAkvLyBVc2VyIGFyZWEgMSBhbmFsb2cgZ3JvdW5kCisgICAgaW5vdXQgdnNzYTIsCS8vIFVzZXIgYXJlYSAyIGFuYWxvZyBncm91bmQKKyAgICBpbm91dCB2Y2NkMSwJLy8gVXNlciBhcmVhIDEgMS44ViBzdXBwbHkKKyAgICBpbm91dCB2Y2NkMiwJLy8gVXNlciBhcmVhIDIgMS44diBzdXBwbHkKKyAgICBpbm91dCB2c3NkMSwJLy8gVXNlciBhcmVhIDEgZGlnaXRhbCBncm91bmQKKyAgICBpbm91dCB2c3NkMiwJLy8gVXNlciBhcmVhIDIgZGlnaXRhbCBncm91bmQKK2BlbmRpZgorICAgIGlucHV0ICAgd2lyZSAgICAgICAgICAgICAgICAgICAgICAgd2JfY2xrX2kgICAgICAgICwgIC8vIFN5c3RlbSBjbG9jaworICAgIGlucHV0ICAgd2lyZSAgICAgICAgICAgICAgICAgICAgICAgdXNlcl9jbG9jazIgICAgICwgIC8vIHVzZXIgQ2xvY2sKKyAgICBpbnB1dCAgIHdpcmUgICAgICAgICAgICAgICAgICAgICAgIHdiX3JzdF9pICAgICAgICAsICAvLyBSZWd1bGFyIFJlc2V0IHNpZ25hbAorCisgICAgaW5wdXQgICB3aXJlICAgICAgICAgICAgICAgICAgICAgICB3YnNfY3ljX2kgICAgICAgLCAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICBpbnB1dCAgIHdpcmUgICAgICAgICAgICAgICAgICAgICAgIHdic19zdGJfaSAgICAgICAsICAvLyBzdHJvYmUvcmVxdWVzdAorICAgIGlucHV0ICAgd2lyZSBbV0JfV0lEVEgtMTowXSAgICAgICAgd2JzX2Fkcl9pICAgICAgICwgIC8vIGFkZHJlc3MKKyAgICBpbnB1dCAgIHdpcmUgICAgICAgICAgICAgICAgICAgICAgIHdic193ZV9pICAgICAgICAsICAvLyB3cml0ZQorICAgIGlucHV0ICAgd2lyZSBbV0JfV0lEVEgtMTowXSAgICAgICAgd2JzX2RhdF9pICAgICAgICwgIC8vIGRhdGEgb3V0cHV0CisgICAgaW5wdXQgICB3aXJlIFszOjBdICAgICAgICAgICAgICAgICB3YnNfc2VsX2kgICAgICAgLCAgLy8gYnl0ZSBlbmFibGUKKyAgICBvdXRwdXQgIHdpcmUgW1dCX1dJRFRILTE6MF0gICAgICAgIHdic19kYXRfbyAgICAgICAsICAvLyBkYXRhIGlucHV0CisgICAgb3V0cHV0ICB3aXJlICAgICAgICAgICAgICAgICAgICAgICB3YnNfYWNrX28gICAgICAgLCAgLy8gYWNrbm93bGVnZW1lbnQKKworICAgIC8vIEFuYWxvZyAoZGlyZWN0IGNvbm5lY3Rpb24gdG8gR1BJTyBwYWQtLS11c2Ugd2l0aCBjYXV0aW9uKQorICAgIC8vIE5vdGUgdGhhdCBhbmFsb2cgSS9PIGlzIG5vdCBhdmFpbGFibGUgb24gdGhlIDcgbG93ZXN0LW51bWJlcmVkCisgICAgLy8gR1BJTyBwYWRzLCBhbmQgc28gdGhlIGFuYWxvZ19pbyBpbmRleGluZyBpcyBvZmZzZXQgZnJvbSB0aGUKKyAgICAvLyBHUElPIGluZGV4aW5nIGJ5IDcgKGFsc28gdXBwZXIgMiBHUElPcyBkbyBub3QgaGF2ZSBhbmFsb2dfaW8pLgorICAgIGlub3V0IFtgTVBSSl9JT19QQURTLTEwOjBdIGFuYWxvZ19pbywKKyAKKyAgICAvLyBMb2dpYyBBbmFseXplciBTaWduYWxzCisgICAgaW5wdXQgIHdpcmUgWzEyNzowXSAgICAgICAgICAgICAgICBsYV9kYXRhX2luICAgICAgLAorICAgIG91dHB1dCB3aXJlIFsxMjc6MF0gICAgICAgICAgICAgICAgbGFfZGF0YV9vdXQgICAgICwKKyAgICBpbnB1dCAgd2lyZSBbMTI3OjBdICAgICAgICAgICAgICAgIGxhX29lbmIgICAgICAgICAsCisgCisKKyAgICAvLyBJT3MKKyAgICBpbnB1dCAgd2lyZSAgWzM3OjBdICAgICAgICAgICAgICAgIGlvX2luICAgICAgICAgICAsCisgICAgb3V0cHV0IHdpcmUgIFszNzowXSAgICAgICAgICAgICAgICBpb19vdXQgICAgICAgICAgLAorICAgIG91dHB1dCB3aXJlICBbMzc6MF0gICAgICAgICAgICAgICAgaW9fb2ViICAgICAgICAgICwKKworICAgIG91dHB1dCB3aXJlICBbMjowXSAgICAgICAgICAgICAgICAgdXNlcl9pcnEgICAgICAgICAgICAgCisKKyk7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBMb2NhbCBQYXJhbWV0ZXIgRGVjbGFyYXRpb24KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3BhcmFtZXRlciAgICAgIFNEUl9EVyAgID0gODsgIC8vIFNEUiBEYXRhIFdpZHRoIAorcGFyYW1ldGVyICAgICAgU0RSX0JXICAgPSAxOyAgLy8gU0RSIEJ5dGUgV2lkdGgKK3BhcmFtZXRlciAgICAgIFdCX1dJRFRIID0gMzI7IC8vIFdCIEFERFJFU1MvREFSQSBXSURUSAorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gV2lzaGJvbmUgUmlzYyBWIEluc3RydWN0aW9uIE1lbW9yeSBJbnRlcmZhY2UKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX3Jpc2N2X2ltZW1fc3RiX2k7IC8vIHN0cm9iZS9yZXF1ZXN0Cit3aXJlICAgW1dCX1dJRFRILTE6MF0gICAgICAgICAgd2JkX3Jpc2N2X2ltZW1fYWRyX2k7IC8vIGFkZHJlc3MKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfcmlzY3ZfaW1lbV93ZV9pOyAgLy8gd3JpdGUKK3dpcmUgICBbV0JfV0lEVEgtMTowXSAgICAgICAgICB3YmRfcmlzY3ZfaW1lbV9kYXRfaTsgLy8gZGF0YSBvdXRwdXQKK3dpcmUgICBbMzowXSAgICAgICAgICAgICAgICAgICB3YmRfcmlzY3ZfaW1lbV9zZWxfaTsgLy8gYnl0ZSBlbmFibGUKK3dpcmUgICBbV0JfV0lEVEgtMTowXSAgICAgICAgICB3YmRfcmlzY3ZfaW1lbV9kYXRfbzsgLy8gZGF0YSBpbnB1dAord2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9yaXNjdl9pbWVtX2Fja19vOyAvLyBhY2tub3dsZWdlbWVudAord2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9yaXNjdl9pbWVtX2Vycl9vOyAgLy8gZXJyb3IKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJJU0MgViBXaXNoYm9uZSBEYXRhIE1lbW9yeSBJbnRlcmZhY2UKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX3Jpc2N2X2RtZW1fc3RiX2k7IC8vIHN0cm9iZS9yZXF1ZXN0Cit3aXJlICAgW1dCX1dJRFRILTE6MF0gICAgICAgICAgd2JkX3Jpc2N2X2RtZW1fYWRyX2k7IC8vIGFkZHJlc3MKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfcmlzY3ZfZG1lbV93ZV9pOyAgLy8gd3JpdGUKK3dpcmUgICBbV0JfV0lEVEgtMTowXSAgICAgICAgICB3YmRfcmlzY3ZfZG1lbV9kYXRfaTsgLy8gZGF0YSBvdXRwdXQKK3dpcmUgICBbMzowXSAgICAgICAgICAgICAgICAgICB3YmRfcmlzY3ZfZG1lbV9zZWxfaTsgLy8gYnl0ZSBlbmFibGUKK3dpcmUgICBbV0JfV0lEVEgtMTowXSAgICAgICAgICB3YmRfcmlzY3ZfZG1lbV9kYXRfbzsgLy8gZGF0YSBpbnB1dAord2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9yaXNjdl9kbWVtX2Fja19vOyAvLyBhY2tub3dsZWdlbWVudAord2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9yaXNjdl9kbWVtX2Vycl9vOyAvLyBlcnJvcgorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gV0IgSE9TVCBJbnRlcmZhY2UKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX2ludF9jeWNfaTsgLy8gc3Ryb2JlL3JlcXVlc3QKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfaW50X3N0Yl9pOyAvLyBzdHJvYmUvcmVxdWVzdAord2lyZSAgIFtXQl9XSURUSC0xOjBdICAgICAgICAgIHdiZF9pbnRfYWRyX2k7IC8vIGFkZHJlc3MKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfaW50X3dlX2k7ICAvLyB3cml0ZQord2lyZSAgIFtXQl9XSURUSC0xOjBdICAgICAgICAgIHdiZF9pbnRfZGF0X2k7IC8vIGRhdGEgb3V0cHV0Cit3aXJlICAgWzM6MF0gICAgICAgICAgICAgICAgICAgd2JkX2ludF9zZWxfaTsgLy8gYnl0ZSBlbmFibGUKK3dpcmUgICBbV0JfV0lEVEgtMTowXSAgICAgICAgICB3YmRfaW50X2RhdF9vOyAvLyBkYXRhIGlucHV0Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX2ludF9hY2tfbzsgLy8gYWNrbm93bGVnZW1lbnQKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfaW50X2Vycl9vOyAvLyBlcnJvcgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICAgIFNQSSBNYXN0ZXIgV2lzaGJvbmUgSW50ZXJmYWNlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9zcGltX3N0Yl9vOyAvLyBzdHJvYmUvcmVxdWVzdAord2lyZSAgIFtXQl9XSURUSC0xOjBdICAgICAgICAgIHdiZF9zcGltX2Fkcl9vOyAvLyBhZGRyZXNzCit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX3NwaW1fd2VfbzsgIC8vIHdyaXRlCit3aXJlICAgW1dCX1dJRFRILTE6MF0gICAgICAgICAgd2JkX3NwaW1fZGF0X287IC8vIGRhdGEgb3V0cHV0Cit3aXJlICAgWzM6MF0gICAgICAgICAgICAgICAgICAgd2JkX3NwaW1fc2VsX287IC8vIGJ5dGUgZW5hYmxlCit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX3NwaW1fY3ljX28gOword2lyZSAgIFtXQl9XSURUSC0xOjBdICAgICAgICAgIHdiZF9zcGltX2RhdF9pOyAvLyBkYXRhIGlucHV0Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX3NwaW1fYWNrX2k7IC8vIGFja25vd2xlZ2VtZW50Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX3NwaW1fZXJyX2k7ICAvLyBlcnJvcgorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gICAgU1BJIE1hc3RlciBXaXNoYm9uZSBJbnRlcmZhY2UKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX3NkcmFtX3N0Yl9vIDsKK3dpcmUgW1dCX1dJRFRILTE6MF0gICAgICAgICAgICB3YmRfc2RyYW1fYWRyX28gOword2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9zZHJhbV93ZV9vICA7IC8vIDEgLSBXcml0ZSwgMCAtIFJlYWQKK3dpcmUgW1dCX1dJRFRILTE6MF0gICAgICAgICAgICB3YmRfc2RyYW1fZGF0X28gOword2lyZSBbV0JfV0lEVEgvOC0xOjBdICAgICAgICAgIHdiZF9zZHJhbV9zZWxfbyA7IC8vIEJ5dGUgZW5hYmxlCit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX3NkcmFtX2N5Y19vIDsKK3dpcmUgIFsyOjBdICAgICAgICAgICAgICAgICAgICB3YmRfc2RyYW1fY3RpX28gOword2lyZSAgW1dCX1dJRFRILTE6MF0gICAgICAgICAgIHdiZF9zZHJhbV9kYXRfaSA7Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX3NkcmFtX2Fja19pIDsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICAgIEdsb2JhbCBSZWdpc3RlciBXaXNoYm9uZSBJbnRlcmZhY2UKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX2dsYmxfc3RiX287IC8vIHN0cm9iZS9yZXF1ZXN0Cit3aXJlICAgWzc6MF0gICAgICAgICAgICAgICAgICAgd2JkX2dsYmxfYWRyX287IC8vIGFkZHJlc3MKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfZ2xibF93ZV9vOyAgLy8gd3JpdGUKK3dpcmUgICBbV0JfV0lEVEgtMTowXSAgICAgICAgICB3YmRfZ2xibF9kYXRfbzsgLy8gZGF0YSBvdXRwdXQKK3dpcmUgICBbMzowXSAgICAgICAgICAgICAgICAgICB3YmRfZ2xibF9zZWxfbzsgLy8gYnl0ZSBlbmFibGUKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfZ2xibF9jeWNfbyA7Cit3aXJlICAgW1dCX1dJRFRILTE6MF0gICAgICAgICAgd2JkX2dsYmxfZGF0X2k7IC8vIGRhdGEgaW5wdXQKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfZ2xibF9hY2tfaTsgLy8gYWNrbm93bGVnZW1lbnQKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfZ2xibF9lcnJfaTsgIC8vIGVycm9yCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgICBHbG9iYWwgUmVnaXN0ZXIgV2lzaGJvbmUgSW50ZXJmYWNlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF91YXJ0X3N0Yl9vOyAvLyBzdHJvYmUvcmVxdWVzdAord2lyZSAgIFs3OjBdICAgICAgICAgICAgICAgICAgIHdiZF91YXJ0X2Fkcl9vOyAvLyBhZGRyZXNzCit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX3VhcnRfd2VfbzsgIC8vIHdyaXRlCit3aXJlICAgWzc6MF0gICAgICAgICAgICAgICAgICAgd2JkX3VhcnRfZGF0X287IC8vIGRhdGEgb3V0cHV0Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX3VhcnRfc2VsX287IC8vIGJ5dGUgZW5hYmxlCit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX3VhcnRfY3ljX28gOword2lyZSAgIFs3OjBdICAgICAgICAgICAgICAgICAgIHdiZF91YXJ0X2RhdF9pOyAvLyBkYXRhIGlucHV0Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX3VhcnRfYWNrX2k7IC8vIGFja25vd2xlZ2VtZW50Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX3VhcnRfZXJyX2k7ICAvLyBlcnJvcgorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICBDUFUgQ29uZmlndXJhdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3B1X3JzdF9uICAgICA7Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BpX3JzdF9uICAgICA7Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2RyYW1fcnN0X24gICA7Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2RyYW1fY2xrICAgICAgICAgICA7Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3B1X2NsayAgICAgICA7Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnRjX2NsayAgICAgICA7Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX2Nsa19pbnQgICA7Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX2ludF9yc3RfbiA7CisKK3dpcmUgWzMxOjBdICAgICAgICAgICAgICAgICAgICAgICBmdXNlX21oYXJ0aWQgIDsKK3dpcmUgWzE1OjBdICAgICAgICAgICAgICAgICAgICAgICBpcnFfbGluZXMgICAgIDsKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2Z0X2lycSAgICAgIDsKKword2lyZSBbNzowXSAgICAgICAgICAgICAgICAgICAgICAgIGNmZ19nbGJfY3RybCAgOword2lyZSBbMzE6MF0gICAgICAgICAgICAgICAgICAgICAgIGNmZ19jbGtfY3RybDEgOword2lyZSBbMzE6MF0gICAgICAgICAgICAgICAgICAgICAgIGNmZ19jbGtfY3RybDIgOword2lyZSBbMzowXSAgICAgICAgICAgICAgICAgICAgICAgIGNmZ19jc2thX3dpICAgOyAvLyBjbG9jayBza2V3IGFkanVzdCBmb3Igd2lzaGJvbmUgaW50ZXJjb25uZWN0Cit3aXJlIFszOjBdICAgICAgICAgICAgICAgICAgICAgICAgY2ZnX2Nza2FfcmlzY3Y7IC8vIGNsb2NrIHNrZXcgYWRqdXN0IGZvciByaXNjdgord2lyZSBbMzowXSAgICAgICAgICAgICAgICAgICAgICAgIGNmZ19jc2thX3VhcnQgOyAvLyBjbG9jayBza2V3IGFkanVzdCBmb3IgdWFydAord2lyZSBbMzowXSAgICAgICAgICAgICAgICAgICAgICAgIGNmZ19jc2thX3NwaSAgOyAvLyBjbG9jayBza2V3IGFkanVzdCBmb3Igc3BpCit3aXJlIFszOjBdICAgICAgICAgICAgICAgICAgICAgICAgY2ZnX2Nza2Ffc2RyYW07IC8vIGNsb2NrIHNrZXcgYWRqdXN0IGZvciBzZHJhbQord2lyZSBbMzowXSAgICAgICAgICAgICAgICAgICAgICAgIGNmZ19jc2thX2dsYmwgOyAvLyBjbG9jayBza2V3IGFkanVzdCBmb3IgZ2xvYmFsIHJlZword2lyZSBbMzowXSAgICAgICAgICAgICAgICAgICAgICAgIGNmZ19jc2thX3doICAgOyAvLyBjbG9jayBza2V3IGFkanVzdCBmb3Igd2ViIGhvc3QKKworCit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX2Nsa193aSAgICA7IC8vIGNsb2NrIGZvciB3aXNoYm9uZSBpbnRlcmNvbm5lY3QKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfY2xrX3Jpc2N2IDsgLy8gY2xvY2sgZm9yIHJpc2N2Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX2Nsa191YXJ0ICA7IC8vIGNsb2NrIGZvciB1YXJ0Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX2Nsa19zcGkgICA7IC8vIGNsb2NrIGZvciBzcGkKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfY2xrX3NkcmFtIDsgLy8gY2xvY2sgZm9yIHNkcmFtCit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX2Nsa19nbGJsICA7IC8vIGNsb2NrIGZvciBnbG9iYWwgcmVnCit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX2Nsa193aCAgICA7IC8vIGNsb2NrIGZvciBnbG9iYWwgcmVnCisKK3dpcmUgWzM6MF0gICAgICAgICAgICAgICAgICAgICAgICBjZmdfY3NrYV9zZF9jbzsgLy8gY2xvY2sgc2tldyBhZGp1c3QgZm9yIHNkcmFtIGNsb2NrIG91dAord2lyZSBbMzowXSAgICAgICAgICAgICAgICAgICAgICAgIGNmZ19jc2thX3NkX2NpOyAvLyBjbG9jayBza2V3IGFkanVzdCBmb3Igc2RyYW0gY2xvY2sgaW5wdXQKK3dpcmUgWzM6MF0gICAgICAgICAgICAgICAgICAgICAgICBjZmdfY3NrYV9zcF9jbzsgLy8gY2xvY2sgc2tldyBhZGp1c3QgZm9yIFNQSSBjbG9jayBvdXQKKword2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX291dF8yOV8gICAgOyAvLyBJbnRlcm5hbGx5IHRhcHBlZCBTRFJBTSBjbG9jaword2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvX2luXzI5XyAgICAgOyAvLyBDbG9jayBTa2V3ZWQgUGFkIFNEUkFNIGNsb2NrCit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9faW5fMzBfICAgICA7IC8vIFNQSSBjbG9jayBvdXQKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIENvbmZpZ3VyYXRpb24gUGFyYW1ldGVyCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2lyZSBbMTowXSAgICAgICAgICAgICAgICAgICAgICAgIGNmZ19zZHJfd2lkdGggICAgICAgOyAvLyAyJ2IwMCAtIDMyIEJpdCBTRFIsIDInYjAxIC0gMTYgQml0IFNEUiwgMidiMXggLSA4IEJpdAord2lyZSBbMTowXSAgICAgICAgICAgICAgICAgICAgICAgIGNmZ19jb2xiaXRzICAgICAgICAgOyAvLyAyJ2IwMCAtIDggQml0IGNvbHVtbiBhZGRyZXNzLCAKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZHJfaW5pdF9kb25lICAgICAgIDsgLy8gSW5kaWNhdGUgU0RSQU0gSW5pdGlhbGlzYXRpb24gRG9uZQord2lyZSBbMzowXSAJCSAgICAgICAgICBjZmdfc2RyX3RyYXNfZCAgICAgIDsgLy8gQWN0aXZlIHRvIHByZWNoYXJnZSBkZWxheQord2lyZSBbMzowXSAgICAgICAgICAgICAgICAgICAgICAgIGNmZ19zZHJfdHJwX2QgICAgICAgOyAvLyBQcmVjaGFyZ2UgdG8gYWN0aXZlIGRlbGF5Cit3aXJlIFszOjBdICAgICAgICAgICAgICAgICAgICAgICAgY2ZnX3Nkcl90cmNkX2QgICAgICA7IC8vIEFjdGl2ZSB0byBSL1cgZGVsYXkKK3dpcmUgCQkJICAgICAgICAgIGNmZ19zZHJfZW4gICAgICAgICAgOyAvLyBFbmFibGUgU0RSQU0gY29udHJvbGxlcgord2lyZSBbMTowXSAJCSAgICAgICAgICBjZmdfcmVxX2RlcHRoICAgICAgIDsgLy8gTWF4aW11bSBSZXF1ZXN0IGFjY2VwdGVkIGJ5IFNEUkFNIGNvbnRyb2xsZXIKK3dpcmUgWzEyOjBdIAkJICAgICAgICAgIGNmZ19zZHJfbW9kZV9yZWcgICAgOword2lyZSBbMjowXSAJCSAgICAgICAgICBjZmdfc2RyX2NhcyAgICAgICAgIDsgLy8gU0RSQU0gQ0FTIExhdGVuY3kKK3dpcmUgWzM6MF0gCQkgICAgICAgICAgY2ZnX3Nkcl90cmNhcl9kICAgICA7IC8vIEF1dG8tcmVmcmVzaCBwZXJpb2QKK3dpcmUgWzM6MF0gICAgICAgICAgICAgICAgICAgICAgICBjZmdfc2RyX3R3cl9kICAgICAgIDsgLy8gV3JpdGUgcmVjb3ZlcnkgZGVsYXkKK3dpcmUgWzExOiAwXSAgICAgICAgICAgICAgICAgICAgICBjZmdfc2RyX3Jmc2ggICAgICAgIDsKK3dpcmUgWzIgOiAwXSAgICAgICAgICAgICAgICAgICAgICBjZmdfc2RyX3JmbWF4ICAgICAgIDsKKworCisKKworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIEdlbmVyYXRpbmcgYWNpdmUgbG93IHdpc2hib25lIHJlc2V0ICAgICAgICAgICAgICAgICAKKy8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworYXNzaWduIHdiZF9pbnRfcnN0X24gID0gY2ZnX2dsYl9jdHJsWzBdOworYXNzaWduIGNwdV9yc3RfbiAgICAgID0gY2ZnX2dsYl9jdHJsWzFdOworYXNzaWduIHNwaV9yc3RfbiAgICAgID0gY2ZnX2dsYl9jdHJsWzJdOworYXNzaWduIHNkcmFtX3JzdF9uICAgID0gY2ZnX2dsYl9jdHJsWzNdOworCithc3NpZ24gY2ZnX2Nza2Ffd2kgICAgPSBjZmdfY2xrX2N0cmwxWzM6MF07Cithc3NpZ24gY2ZnX2Nza2FfcmlzY3YgPSBjZmdfY2xrX2N0cmwxWzc6NF07Cithc3NpZ24gY2ZnX2Nza2FfdWFydCAgPSBjZmdfY2xrX2N0cmwxWzExOjhdOworYXNzaWduIGNmZ19jc2thX3NwaSAgID0gY2ZnX2Nsa19jdHJsMVsxNToxMl07Cithc3NpZ24gY2ZnX2Nza2Ffc2RyYW0gPSBjZmdfY2xrX2N0cmwxWzE5OjE2XTsKK2Fzc2lnbiBjZmdfY3NrYV9nbGJsICA9IGNmZ19jbGtfY3RybDFbMjM6MjBdOworYXNzaWduIGNmZ19jc2thX3doICAgID0gY2ZnX2Nsa19jdHJsMVsyNzoyNF07CisKK2Fzc2lnbiBjZmdfY3NrYV9zZF9jbyA9IGNmZ19jbGtfY3RybDJbMzowXTsgLy8gU0RSQU0gY2xvY2sgb3V0IGNvbnRyb2wKK2Fzc2lnbiBjZmdfY3NrYV9zZF9jaSA9IGNmZ19jbGtfY3RybDJbNzo0XTsgLy8gU0RSQU0gY2xvY2sgaW4gY29udHJvbAorYXNzaWduIGNmZ19jc2thX3NwX2NvID0gY2ZnX2Nsa19jdHJsMlsxMTo4XTsvLyBTUEkgY2xvY2sgb3V0IGNvbnRyb2wKKworCit3Yl9ob3N0IHVfd2JfaG9zdCgKKworICAgIC8vIE1hc3RlciBQb3J0CisgICAgICAgLndibV9yc3RfaSAgICAgICAgKHdiX3JzdF9pICAgICAgICAgICAgICksICAKKyAgICAgICAud2JtX2Nsa19pICAgICAgICAod2JfY2xrX2kgICAgICAgICAgICAgKSwgIAorICAgICAgIC53Ym1fY3ljX2kgICAgICAgICh3YnNfY3ljX2kgICAgICAgICAgICApLCAgCisgICAgICAgLndibV9zdGJfaSAgICAgICAgKHdic19zdGJfaSAgICAgICAgICAgICksICAKKyAgICAgICAud2JtX2Fkcl9pICAgICAgICAod2JzX2Fkcl9pICAgICAgICAgICAgKSwgIAorICAgICAgIC53Ym1fd2VfaSAgICAgICAgICh3YnNfd2VfaSAgICAgICAgICAgICApLCAgCisgICAgICAgLndibV9kYXRfaSAgICAgICAgKHdic19kYXRfaSAgICAgICAgICAgICksICAKKyAgICAgICAud2JtX3NlbF9pICAgICAgICAod2JzX3NlbF9pICAgICAgICAgICAgKSwgIAorICAgICAgIC53Ym1fZGF0X28gICAgICAgICh3YnNfZGF0X28gICAgICAgICAgICApLCAgCisgICAgICAgLndibV9hY2tfbyAgICAgICAgKHdic19hY2tfbyAgICAgICAgICAgICksICAKKyAgICAgICAud2JtX2Vycl9vICAgICAgICAoICAgICAgICAgICAgICAgICAgICAgKSwgIAorCisgICAgLy8gU2xhdmUgUG9ydAorICAgICAgIC53YnNfY2xrX291dCAgICAgICh3YmRfY2xrX2ludCAgICAgICAgICApLCAgCisgICAgICAgLndic19jbGtfaSAgICAgICAgKHdiZF9jbGtfd2ggICAgICAgICAgICksICAKKyAgICAgICAud2JzX2N5Y19vICAgICAgICAod2JkX2ludF9jeWNfaSAgICAgICAgKSwgIAorICAgICAgIC53YnNfc3RiX28gICAgICAgICh3YmRfaW50X3N0Yl9pICAgICAgICApLCAgCisgICAgICAgLndic19hZHJfbyAgICAgICAgKHdiZF9pbnRfYWRyX2kgICAgICAgICksICAKKyAgICAgICAud2JzX3dlX28gICAgICAgICAod2JkX2ludF93ZV9pICAgICAgICAgKSwgIAorICAgICAgIC53YnNfZGF0X28gICAgICAgICh3YmRfaW50X2RhdF9pICAgICAgICApLCAgCisgICAgICAgLndic19zZWxfbyAgICAgICAgKHdiZF9pbnRfc2VsX2kgICAgICAgICksICAKKyAgICAgICAud2JzX2RhdF9pICAgICAgICAod2JkX2ludF9kYXRfbyAgICAgICAgKSwgIAorICAgICAgIC53YnNfYWNrX2kgICAgICAgICh3YmRfaW50X2Fja19vICAgICAgICApLCAgCisgICAgICAgLndic19lcnJfaSAgICAgICAgKHdiZF9pbnRfZXJyX28gICAgICAgICksICAKKworICAgICAgIC5jZmdfZ2xiX2N0cmwgICAgIChjZmdfZ2xiX2N0cmwgICAgICAgICApLAorICAgICAgIC5jZmdfY2xrX2N0cmwxICAgIChjZmdfY2xrX2N0cmwxICAgICAgICApLAorICAgICAgIC5jZmdfY2xrX2N0cmwyICAgIChjZmdfY2xrX2N0cmwyICAgICAgICApLAorCisgICAgLy8gTG9naWMgQW5hbHl6ZXIgU2lnbmFscworICAgICAgIC5sYV9kYXRhX2luICAgICAgIChsYV9kYXRhX2luICAgICAgICAgICApLAorICAgICAgIC5sYV9kYXRhX291dCAgICAgIChsYV9kYXRhX291dCAgICAgICAgICApLAorICAgICAgIC5sYV9vZW5iICAgICAgICAgIChsYV9vZW5iICAgICAgICAgICAgICApCisgICAgKTsKKworCisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJJU0MgViBDb3JlIGluc3RhbmNlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorc2NyMV90b3Bfd2IgdV9yaXNjdl90b3AgKAorICAgIC8vIFJlc2V0CisgICAgLnB3cnVwX3JzdF9uICAgICAgICAgICAgKHdiZF9pbnRfcnN0X24gICAgICAgICAgICAgKSwKKyAgICAucnN0X24gICAgICAgICAgICAgICAgICAod2JkX2ludF9yc3RfbiAgICAgICAgICAgICApLAorICAgIC5jcHVfcnN0X24gICAgICAgICAgICAgIChjcHVfcnN0X24gICAgICAgICAgICAgICAgICksCisKKyAgICAvLyBDbG9jaworICAgIC5jb3JlX2NsayAgICAgICAgICAgICAgIChjcHVfY2xrICAgICAgICAgICAgICAgICAgICksCisgICAgLnJ0Y19jbGsgICAgICAgICAgICAgICAgKHJ0Y19jbGsgICAgICAgICAgICAgICAgICAgKSwKKworICAgIC8vIEZ1c2VzCisgICAgLmZ1c2VfbWhhcnRpZCAgICAgICAgICAgKGZ1c2VfbWhhcnRpZCAgICAgICAgICAgICAgKSwKKworICAgIC8vIElSUQorICAgIC5pcnFfbGluZXMgICAgICAgICAgICAgIChpcnFfbGluZXMgICAgICAgICAgICAgICAgICksIAorICAgIC5zb2Z0X2lycSAgICAgICAgICAgICAgIChzb2Z0X2lycSAgICAgICAgICAgICAgICAgICksIC8vIFRPRE8gLSBJbnRlcnJ1cHRzCisKKyAgICAvLyBERlQKKyAgICAvLyAudGVzdF9tb2RlICAgICAgICAgICAoMSdiMCAgICAgICAgICAgICAgICAgICAgICApLCAvLyBNb3ZlZCBpbnNpZGUgSVAKKyAgICAvLyAudGVzdF9yc3RfbiAgICAgICAgICAoMSdiMSAgICAgICAgICAgICAgICAgICAgICApLCAvLyBNb3ZlZCBpbnNpZGUgSVAKKworICAgIAorICAgIC53Yl9yc3RfbiAgICAgICAgICAgICAgICh3YmRfaW50X3JzdF9uICAgICAgICAgICAgICksCisgICAgLndiX2NsayAgICAgICAgICAgICAgICAgKHdiZF9jbGtfcmlzY3YgICAgICAgICAgICAgKSwKKyAgICAvLyBJbnN0cnVjdGlvbiBtZW1vcnkgaW50ZXJmYWNlCisgICAgLndiZF9pbWVtX3N0Yl9vICAgICAgICAgKHdiZF9yaXNjdl9pbWVtX3N0Yl9pICAgICAgKSwKKyAgICAud2JkX2ltZW1fYWRyX28gICAgICAgICAod2JkX3Jpc2N2X2ltZW1fYWRyX2kgICAgICApLAorICAgIC53YmRfaW1lbV93ZV9vICAgICAgICAgICh3YmRfcmlzY3ZfaW1lbV93ZV9pICAgICAgICksIAorICAgIC53YmRfaW1lbV9kYXRfbyAgICAgICAgICh3YmRfcmlzY3ZfaW1lbV9kYXRfaSAgICAgICksCisgICAgLndiZF9pbWVtX3NlbF9vICAgICAgICAgKHdiZF9yaXNjdl9pbWVtX3NlbF9pICAgICAgKSwKKyAgICAud2JkX2ltZW1fZGF0X2kgICAgICAgICAod2JkX3Jpc2N2X2ltZW1fZGF0X28gICAgICApLAorICAgIC53YmRfaW1lbV9hY2tfaSAgICAgICAgICh3YmRfcmlzY3ZfaW1lbV9hY2tfbyAgICAgICksCisgICAgLndiZF9pbWVtX2Vycl9pICAgICAgICAgKHdiZF9yaXNjdl9pbWVtX2Vycl9vICAgICAgKSwKKworICAgIC8vIERhdGEgbWVtb3J5IGludGVyZmFjZQorICAgIC53YmRfZG1lbV9zdGJfbyAgICAgICAgICh3YmRfcmlzY3ZfZG1lbV9zdGJfaSAgICAgICksCisgICAgLndiZF9kbWVtX2Fkcl9vICAgICAgICAgKHdiZF9yaXNjdl9kbWVtX2Fkcl9pICAgICAgKSwKKyAgICAud2JkX2RtZW1fd2VfbyAgICAgICAgICAod2JkX3Jpc2N2X2RtZW1fd2VfaSAgICAgICApLCAKKyAgICAud2JkX2RtZW1fZGF0X28gICAgICAgICAod2JkX3Jpc2N2X2RtZW1fZGF0X2kgICAgICApLAorICAgIC53YmRfZG1lbV9zZWxfbyAgICAgICAgICh3YmRfcmlzY3ZfZG1lbV9zZWxfaSAgICAgICksCisgICAgLndiZF9kbWVtX2RhdF9pICAgICAgICAgKHdiZF9yaXNjdl9kbWVtX2RhdF9vICAgICAgKSwKKyAgICAud2JkX2RtZW1fYWNrX2kgICAgICAgICAod2JkX3Jpc2N2X2RtZW1fYWNrX28gICAgICApLAorICAgIC53YmRfZG1lbV9lcnJfaSAgICAgICAgICh3YmRfcmlzY3ZfZG1lbV9lcnJfbyAgICAgICkgCispOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIFNQSSBNYXN0ZXIKKyogVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiBhbiBTUEkgbWFzdGVyIHRoYXQgaXMgY29udHJvbGxlZCB2aWEgYW4gQVhJIGJ1cy4gCisqIEl0IGhhcyBGSUZPcyBmb3IgdHJhbnNtaXR0aW5nIGFuZCByZWNlaXZpbmcgZGF0YS4gCisqIEl0IHN1cHBvcnRzIGJvdGggdGhlIG5vcm1hbCBTUEkgbW9kZSBhbmQgUVBJIG1vZGUgd2l0aCA0IGRhdGEgbGluZXMuCisqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3NwaW1fdG9wCisjKAorYGlmbmRlZiBTWU5USEVTSVMKKyAgICAuV0JfV0lEVEggIChXQl9XSURUSCkKK2BlbmRpZgorKSB1X3NwaV9tYXN0ZXIKKygKKyAgICAubWNsayAgICAgICAgICAgICAgICAgICAod2JkX2Nsa19zcGkgICAgICAgICAgICAgICApLAorICAgIC5yc3RfbiAgICAgICAgICAgICAgICAgIChzcGlfcnN0X24gICAgICAgICAgICAgICAgICksCisKKyAgICAud2JkX3N0Yl9pICAgICAgICAgICAgICAod2JkX3NwaW1fc3RiX28gICAgICAgICAgICApLAorICAgIC53YmRfYWRyX2kgICAgICAgICAgICAgICh3YmRfc3BpbV9hZHJfbyAgICAgICAgICAgICksCisgICAgLndiZF93ZV9pICAgICAgICAgICAgICAgKHdiZF9zcGltX3dlX28gICAgICAgICAgICAgKSwgCisgICAgLndiZF9kYXRfaSAgICAgICAgICAgICAgKHdiZF9zcGltX2RhdF9vICAgICAgICAgICAgKSwKKyAgICAud2JkX3NlbF9pICAgICAgICAgICAgICAod2JkX3NwaW1fc2VsX28gICAgICAgICAgICApLAorICAgIC53YmRfZGF0X28gICAgICAgICAgICAgICh3YmRfc3BpbV9kYXRfaSAgICAgICAgICAgICksCisgICAgLndiZF9hY2tfbyAgICAgICAgICAgICAgKHdiZF9zcGltX2Fja19pICAgICAgICAgICAgKSwKKyAgICAud2JkX2Vycl9vICAgICAgICAgICAgICAod2JkX3NwaW1fZXJyX2kgICAgICAgICAgICApLAorCisgICAgLnNwaV9kZWJ1ZyAgICAgICAgICAgICAgKHNwaV9kZWJ1ZyAgICAgICAgICAgICAgICAgKSwKKworICAgIC8vIFBhZCBJbnRlcmZhY2UKKyAgICAuaW9faW4gICAgICAgICAgICAgICAgICAoaW9faW5bMzU6MzBdICAgICAgICAgICAgICApLAorICAgIC5pb19vdXQgICAgICAgICAgICAgICAgICh7aW9fb3V0WzM1OjMxXSxpb19pbl8zMF99ICksCisgICAgLmlvX29lYiAgICAgICAgICAgICAgICAgKGlvX29lYlszNTozMF0gICAgICAgICAgICAgKQorCispOworCisKK3NkcmNfdG9wICAKKyAgICBgaWZuZGVmIFNZTlRIRVNJUworICAgICMoLkFQUF9BVyhXQl9XSURUSCksIAorCSAgICAuQVBQX0RXKFdCX1dJRFRIKSwgCisJICAgIC5BUFBfQlcoNCksCisJICAgIC5TRFJfRFcoOCksIAorCSAgICAuU0RSX0JXKDEpKQorICAgICAgYGVuZGlmCisgICAgIHVfc2RyYW1fY3RybCAoCisgICAgLmNmZ19zZHJfd2lkdGggICAgICAgICAgKGNmZ19zZHJfd2lkdGggICAgICAgICAgICAgICksCisgICAgLmNmZ19jb2xiaXRzICAgICAgICAgICAgKGNmZ19jb2xiaXRzICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgIAorICAgIC8vIFdCIGJ1cworICAgIC53Yl9yc3RfbiAgICAgICAgICAgICAgICh3YmRfaW50X3JzdF9uICAgICAgICAgICAgICApLAorICAgIC53Yl9jbGtfaSAgICAgICAgICAgICAgICh3YmRfY2xrX3NkcmFtICAgICAgICAgICAgICApLAorICAgIAorICAgIC53Yl9zdGJfaSAgICAgICAgICAgICAgICh3YmRfc2RyYW1fc3RiX28gICAgICAgICAgICApLAorICAgIC53Yl9hZGRyX2kgICAgICAgICAgICAgICh3YmRfc2RyYW1fYWRyX28gICAgICAgICAgICApLAorICAgIC53Yl93ZV9pICAgICAgICAgICAgICAgICh3YmRfc2RyYW1fd2VfbyAgICAgICAgICAgICApLAorICAgIC53Yl9kYXRfaSAgICAgICAgICAgICAgICh3YmRfc2RyYW1fZGF0X28gICAgICAgICAgICApLAorICAgIC53Yl9zZWxfaSAgICAgICAgICAgICAgICh3YmRfc2RyYW1fc2VsX28gICAgICAgICAgICApLAorICAgIC53Yl9jeWNfaSAgICAgICAgICAgICAgICh3YmRfc2RyYW1fY3ljX28gICAgICAgICAgICApLAorICAgIC53Yl9hY2tfbyAgICAgICAgICAgICAgICh3YmRfc2RyYW1fYWNrX2kgICAgICAgICAgICApLAorICAgIC53Yl9kYXRfbyAgICAgICAgICAgICAgICh3YmRfc2RyYW1fZGF0X2kgICAgICAgICAgICApLAorCisJCQorICAgIC8qIEludGVyZmFjZSB0byBTRFJBTXMgKi8KKyAgICAuc2RyYW1fY2xrICAgICAgICAgICAgICAoc2RyYW1fY2xrICAgICAgICAgICAgICAgICApLAorICAgIC5zZHJhbV9yZXNldG4gICAgICAgICAgIChzZHJhbV9yc3RfbiAgICAgICAgICAgICAgICksCisKKyAgICAvKiogUGFkIEludGVyZmFjZSAgICAgICAqKi8KKyAgICAuaW9faW4gICAgICAgICAgICAgICAgICAoe2lvX2luXzI5Xyxpb19pblsyODowXX0gICApLAorICAgIC5pb19vZWIgICAgICAgICAgICAgICAgIChpb19vZWJbMjk6MF0gICAgICAgICAgICAgICksCisgICAgLmlvX291dCAgICAgICAgICAgICAgICAgKHtpb19vdXRfMjlfLGlvX291dFsyODowXX0gKSwKKyAgICAgICAgICAgICAgICAgICAgCisgICAgLyogUGFyYW1ldGVycyAqLworICAgIC5zZHJfaW5pdF9kb25lICAgICAgICAgIChzZHJfaW5pdF9kb25lICAgICAgICAgICAgICksCisgICAgLmNmZ19yZXFfZGVwdGggICAgICAgICAgKGNmZ19yZXFfZGVwdGggICAgICAgICAgICAgKSwgLy9ob3cgbWFueSByZXEuIGJ1ZmZlciBzaG91bGQgaG9sZAorICAgIC5jZmdfc2RyX2VuICAgICAgICAgICAgIChjZmdfc2RyX2VuICAgICAgICAgICAgICAgICksCisgICAgLmNmZ19zZHJfbW9kZV9yZWcgICAgICAgKGNmZ19zZHJfbW9kZV9yZWcgICAgICAgICAgKSwKKyAgICAuY2ZnX3Nkcl90cmFzX2QgICAgICAgICAoY2ZnX3Nkcl90cmFzX2QgICAgICAgICAgICApLAorICAgIC5jZmdfc2RyX3RycF9kICAgICAgICAgIChjZmdfc2RyX3RycF9kICAgICAgICAgICAgICksCisgICAgLmNmZ19zZHJfdHJjZF9kICAgICAgICAgKGNmZ19zZHJfdHJjZF9kICAgICAgICAgICAgKSwKKyAgICAuY2ZnX3Nkcl9jYXMgICAgICAgICAgICAoY2ZnX3Nkcl9jYXMgICAgICAgICAgICAgICApLAorICAgIC5jZmdfc2RyX3RyY2FyX2QgICAgICAgIChjZmdfc2RyX3RyY2FyX2QgICAgICAgICAgICksCisgICAgLmNmZ19zZHJfdHdyX2QgICAgICAgICAgKGNmZ19zZHJfdHdyX2QgICAgICAgICAgICAgKSwKKyAgICAuY2ZnX3Nkcl9yZnNoICAgICAgICAgICAoY2ZnX3Nkcl9yZnNoICAgICAgICAgICAgICApLAorICAgIC5jZmdfc2RyX3JmbWF4ICAgICAgICAgIChjZmdfc2RyX3JmbWF4ICAgICAgICAgICAgICkKKyAgICk7CisKKword2JfaW50ZXJjb25uZWN0ICB1X2ludGVyY29uICgKKyAgICAgICAgIC5jbGtfaSAgICAgICAgICh3YmRfY2xrX3dpICAgICAgICAgICAgKSwgCisgICAgICAgICAucnN0X24gICAgICAgICAod2JkX2ludF9yc3RfbiAgICAgICAgICksCisKKyAgICAgICAgIC8vIE1hc3RlciAwIEludGVyZmFjZQorICAgICAgICAgLm0wX3diZF9kYXRfaSAgKHdiZF9pbnRfZGF0X2kgICAgICAgICApLAorICAgICAgICAgLm0wX3diZF9hZHJfaSAgKHdiZF9pbnRfYWRyX2kgICAgICAgICApLAorICAgICAgICAgLm0wX3diZF9zZWxfaSAgKHdiZF9pbnRfc2VsX2kgICAgICAgICApLAorICAgICAgICAgLm0wX3diZF93ZV9pICAgKHdiZF9pbnRfd2VfaSAgICAgICAgICApLAorICAgICAgICAgLm0wX3diZF9jeWNfaSAgKHdiZF9pbnRfY3ljX2kgICAgICAgICApLAorICAgICAgICAgLm0wX3diZF9zdGJfaSAgKHdiZF9pbnRfc3RiX2kgICAgICAgICApLAorICAgICAgICAgLm0wX3diZF9kYXRfbyAgKHdiZF9pbnRfZGF0X28gICAgICAgICApLAorICAgICAgICAgLm0wX3diZF9hY2tfbyAgKHdiZF9pbnRfYWNrX28gICAgICAgICApLAorICAgICAgICAgLm0wX3diZF9lcnJfbyAgKHdiZF9pbnRfZXJyX28gICAgICAgICApLAorICAgICAgICAgCisgICAgICAgICAvLyBNYXN0ZXIgMCBJbnRlcmZhY2UKKyAgICAgICAgIC5tMV93YmRfZGF0X2kgICh3YmRfcmlzY3ZfaW1lbV9kYXRfaSAgKSwKKyAgICAgICAgIC5tMV93YmRfYWRyX2kgICh3YmRfcmlzY3ZfaW1lbV9hZHJfaSAgKSwKKyAgICAgICAgIC5tMV93YmRfc2VsX2kgICh3YmRfcmlzY3ZfaW1lbV9zZWxfaSAgKSwKKyAgICAgICAgIC5tMV93YmRfd2VfaSAgICh3YmRfcmlzY3ZfaW1lbV93ZV9pICAgKSwKKyAgICAgICAgIC5tMV93YmRfY3ljX2kgICh3YmRfcmlzY3ZfaW1lbV9zdGJfaSAgKSwKKyAgICAgICAgIC5tMV93YmRfc3RiX2kgICh3YmRfcmlzY3ZfaW1lbV9zdGJfaSAgKSwKKyAgICAgICAgIC5tMV93YmRfZGF0X28gICh3YmRfcmlzY3ZfaW1lbV9kYXRfbyAgKSwKKyAgICAgICAgIC5tMV93YmRfYWNrX28gICh3YmRfcmlzY3ZfaW1lbV9hY2tfbyAgKSwKKyAgICAgICAgIC5tMV93YmRfZXJyX28gICh3YmRfcmlzY3ZfaW1lbV9lcnJfbyAgKSwKKyAgICAgICAgIAorICAgICAgICAgLy8gTWFzdGVyIDEgSW50ZXJmYWNlCisgICAgICAgICAubTJfd2JkX2RhdF9pICAod2JkX3Jpc2N2X2RtZW1fZGF0X2kgICksCisgICAgICAgICAubTJfd2JkX2Fkcl9pICAod2JkX3Jpc2N2X2RtZW1fYWRyX2kgICksCisgICAgICAgICAubTJfd2JkX3NlbF9pICAod2JkX3Jpc2N2X2RtZW1fc2VsX2kgICksCisgICAgICAgICAubTJfd2JkX3dlX2kgICAod2JkX3Jpc2N2X2RtZW1fd2VfaSAgICksCisgICAgICAgICAubTJfd2JkX2N5Y19pICAod2JkX3Jpc2N2X2RtZW1fc3RiX2kgICksCisgICAgICAgICAubTJfd2JkX3N0Yl9pICAod2JkX3Jpc2N2X2RtZW1fc3RiX2kgICksCisgICAgICAgICAubTJfd2JkX2RhdF9vICAod2JkX3Jpc2N2X2RtZW1fZGF0X28gICksCisgICAgICAgICAubTJfd2JkX2Fja19vICAod2JkX3Jpc2N2X2RtZW1fYWNrX28gICksCisgICAgICAgICAubTJfd2JkX2Vycl9vICAod2JkX3Jpc2N2X2RtZW1fZXJyX28gICksCisgICAgICAgICAKKyAgICAgICAgIAorICAgICAgICAgLy8gU2xhdmUgMCBJbnRlcmZhY2UKKyAgICAgICAgIC8vIC5zMF93YmRfZXJyX2kgICgxJ2IwICAgICAgICAgICApLCAtIE1vdmVkIGluc2lkZSBJUAorICAgICAgICAgLnMwX3diZF9kYXRfaSAgKHdiZF9zcGltX2RhdF9pICksCisgICAgICAgICAuczBfd2JkX2Fja19pICAod2JkX3NwaW1fYWNrX2kgKSwKKyAgICAgICAgIC5zMF93YmRfZGF0X28gICh3YmRfc3BpbV9kYXRfbyApLAorICAgICAgICAgLnMwX3diZF9hZHJfbyAgKHdiZF9zcGltX2Fkcl9vICksCisgICAgICAgICAuczBfd2JkX3NlbF9vICAod2JkX3NwaW1fc2VsX28gKSwKKyAgICAgICAgIC5zMF93YmRfd2VfbyAgICh3YmRfc3BpbV93ZV9vICApLCAgCisgICAgICAgICAuczBfd2JkX2N5Y19vICAod2JkX3NwaW1fY3ljX28gKSwKKyAgICAgICAgIC5zMF93YmRfc3RiX28gICh3YmRfc3BpbV9zdGJfbyApLAorICAgICAgICAgCisgICAgICAgICAvLyBTbGF2ZSAxIEludGVyZmFjZQorICAgICAgICAgLy8gLnMxX3diZF9lcnJfaSAgKDEnYjAgICAgICAgICAgICksIC0gTW92ZWQgaW5zaWRlIElQCisgICAgICAgICAuczFfd2JkX2RhdF9pICAod2JkX3NkcmFtX2RhdF9pICksCisgICAgICAgICAuczFfd2JkX2Fja19pICAod2JkX3NkcmFtX2Fja19pICksCisgICAgICAgICAuczFfd2JkX2RhdF9vICAod2JkX3NkcmFtX2RhdF9vICksCisgICAgICAgICAuczFfd2JkX2Fkcl9vICAod2JkX3NkcmFtX2Fkcl9vICksCisgICAgICAgICAuczFfd2JkX3NlbF9vICAod2JkX3NkcmFtX3NlbF9vICksCisgICAgICAgICAuczFfd2JkX3dlX28gICAod2JkX3NkcmFtX3dlX28gICksICAKKyAgICAgICAgIC5zMV93YmRfY3ljX28gICh3YmRfc2RyYW1fY3ljX28gKSwKKyAgICAgICAgIC5zMV93YmRfc3RiX28gICh3YmRfc2RyYW1fc3RiX28gKSwKKyAgICAgICAgIAorICAgICAgICAgLy8gU2xhdmUgMiBJbnRlcmZhY2UKKyAgICAgICAgIC8vIC5zMl93YmRfZXJyX2kgICgxJ2IwICAgICAgICAgICApLCAtIE1vdmVkIGluc2lkZSBJUAorICAgICAgICAgLnMyX3diZF9kYXRfaSAgKHdiZF9nbGJsX2RhdF9pICksCisgICAgICAgICAuczJfd2JkX2Fja19pICAod2JkX2dsYmxfYWNrX2kgKSwKKyAgICAgICAgIC5zMl93YmRfZGF0X28gICh3YmRfZ2xibF9kYXRfbyApLAorICAgICAgICAgLnMyX3diZF9hZHJfbyAgKHdiZF9nbGJsX2Fkcl9vICksCisgICAgICAgICAuczJfd2JkX3NlbF9vICAod2JkX2dsYmxfc2VsX28gKSwKKyAgICAgICAgIC5zMl93YmRfd2VfbyAgICh3YmRfZ2xibF93ZV9vICApLCAgCisgICAgICAgICAuczJfd2JkX2N5Y19vICAod2JkX2dsYmxfY3ljX28gKSwKKyAgICAgICAgIC5zMl93YmRfc3RiX28gICh3YmRfZ2xibF9zdGJfbyApLAorCisgICAgICAgICAvLyBTbGF2ZSAzIEludGVyZmFjZQorICAgICAgICAgLy8gLnMzX3diZF9lcnJfaSAgKDEnYjAgICAgICAgICAgICksIC0gTW92ZWQgaW5zaWRlIElQCisgICAgICAgICAuczNfd2JkX2RhdF9pICAod2JkX3VhcnRfZGF0X2kgKSwKKyAgICAgICAgIC5zM193YmRfYWNrX2kgICh3YmRfdWFydF9hY2tfaSApLAorICAgICAgICAgLnMzX3diZF9kYXRfbyAgKHdiZF91YXJ0X2RhdF9vICksCisgICAgICAgICAuczNfd2JkX2Fkcl9vICAod2JkX3VhcnRfYWRyX28gKSwKKyAgICAgICAgIC5zM193YmRfc2VsX28gICh3YmRfdWFydF9zZWxfbyApLAorICAgICAgICAgLnMzX3diZF93ZV9vICAgKHdiZF91YXJ0X3dlX28gICksICAKKyAgICAgICAgIC5zM193YmRfY3ljX28gICh3YmRfdWFydF9jeWNfbyApLAorICAgICAgICAgLnMzX3diZF9zdGJfbyAgKHdiZF91YXJ0X3N0Yl9vICkKKwkpOworCitnbGJsX2NmZyAgIHVfZ2xibF9jZmcgKAorCisgICAgICAgLm1jbGsgICAgICAgICAgICAgICAgICAgKHdiZF9jbGtfZ2xibCAgICAgICAgICAgICAgKSwKKyAgICAgICAucmVzZXRfbiAgICAgICAgICAgICAgICAod2JkX2ludF9yc3RfbiAgICAgICAgICAgICApLAorICAgICAgIC51c2VyX2Nsb2NrMSAgICAgICAgICAgICh3Yl9jbGtfaSAgICAgICAgICAgICAgICAgICksCisgICAgICAgLnVzZXJfY2xvY2syICAgICAgICAgICAgKHVzZXJfY2xvY2syICAgICAgICAgICAgICAgKSwKKyAgICAgICAuZGV2aWNlX2lkY29kZSAgICAgICAgICAoICAgICAgICAgICAgICAgICAgICAgICAgICApLAorCisgICAgICAgIC8vIFJlZyBCdXMgSW50ZXJmYWNlIFNpZ25hbAorICAgICAgIC5yZWdfY3MgICAgICAgICAgICAgICAgICh3YmRfZ2xibF9zdGJfbyAgICAgICAgICAgICksCisgICAgICAgLnJlZ193ciAgICAgICAgICAgICAgICAgKHdiZF9nbGJsX3dlX28gICAgICAgICAgICAgKSwKKyAgICAgICAucmVnX2FkZHIgICAgICAgICAgICAgICAod2JkX2dsYmxfYWRyX28gICAgICAgICAgICApLAorICAgICAgIC5yZWdfd2RhdGEgICAgICAgICAgICAgICh3YmRfZ2xibF9kYXRfbyAgICAgICAgICAgICksCisgICAgICAgLnJlZ19iZSAgICAgICAgICAgICAgICAgKHdiZF9nbGJsX3NlbF9vICAgICAgICAgICAgKSwKKworICAgICAgIC8vIE91dHB1dHMKKyAgICAgICAucmVnX3JkYXRhICAgICAgICAgICAgICAod2JkX2dsYmxfZGF0X2kgICAgICAgICAgICApLAorICAgICAgIC5yZWdfYWNrICAgICAgICAgICAgICAgICh3YmRfZ2xibF9hY2tfaSAgICAgICAgICAgICksCisKKyAgICAgICAvLyBTRFJBTSBDbG9jaworCisgICAgICAgLnNkcmFtX2NsayAgICAgICAgICAgICAgKHNkcmFtX2NsayAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAuY3B1X2NsayAgICAgICAgICAgICAgICAoY3B1X2NsayAgICAgICAgICAgICAgICAgICApLAorICAgICAgIC5ydGNfY2xrICAgICAgICAgICAgICAgIChydGNfY2xrICAgICAgICAgICAgICAgICAgICksCisKKyAgICAgICAvLyBSaXNjIGNvbmZpZ3VyYXRpb24KKyAgICAgICAuZnVzZV9taGFydGlkICAgICAgICAgICAoZnVzZV9taGFydGlkICAgICAgICAgICAgICApLAorICAgICAgIC5pcnFfbGluZXMgICAgICAgICAgICAgIChpcnFfbGluZXMgICAgICAgICAgICAgICAgICksIAorICAgICAgIC5zb2Z0X2lycSAgICAgICAgICAgICAgIChzb2Z0X2lycSAgICAgICAgICAgICAgICAgICksCisgICAgICAgLnVzZXJfaXJxICAgICAgICAgICAgICAgKHVzZXJfaXJxICAgICAgICAgICAgICAgICAgKSwKKworICAgICAgIC8vIFNEUkFNIENvbmZpZworICAgICAgIC5jZmdfc2RyX3dpZHRoICAgICAgICAgIChjZmdfc2RyX3dpZHRoICAgICAgICAgICAgICksCisgICAgICAgLmNmZ19jb2xiaXRzICAgICAgICAgICAgKGNmZ19jb2xiaXRzICAgICAgICAgICAgICAgKSwKKworCS8qIFBhcmFtZXRlcnMgKi8KKyAgICAgICAuc2RyX2luaXRfZG9uZSAgICAgICAgICAoc2RyX2luaXRfZG9uZSAgICAgICAgICAgICApLAorICAgICAgIC5jZmdfcmVxX2RlcHRoICAgICAgICAgIChjZmdfcmVxX2RlcHRoICAgICAgICAgICAgICksIC8vaG93IG1hbnkgcmVxLiBidWZmZXIgc2hvdWxkIGhvbGQKKyAgICAgICAuY2ZnX3Nkcl9lbiAgICAgICAgICAgICAoY2ZnX3Nkcl9lbiAgICAgICAgICAgICAgICApLAorICAgICAgIC5jZmdfc2RyX21vZGVfcmVnICAgICAgIChjZmdfc2RyX21vZGVfcmVnICAgICAgICAgICksCisgICAgICAgLmNmZ19zZHJfdHJhc19kICAgICAgICAgKGNmZ19zZHJfdHJhc19kICAgICAgICAgICAgKSwKKyAgICAgICAuY2ZnX3Nkcl90cnBfZCAgICAgICAgICAoY2ZnX3Nkcl90cnBfZCAgICAgICAgICAgICApLAorICAgICAgIC5jZmdfc2RyX3RyY2RfZCAgICAgICAgIChjZmdfc2RyX3RyY2RfZCAgICAgICAgICAgICksCisgICAgICAgLmNmZ19zZHJfY2FzICAgICAgICAgICAgKGNmZ19zZHJfY2FzICAgICAgICAgICAgICAgKSwKKyAgICAgICAuY2ZnX3Nkcl90cmNhcl9kICAgICAgICAoY2ZnX3Nkcl90cmNhcl9kICAgICAgICAgICApLAorICAgICAgIC5jZmdfc2RyX3R3cl9kICAgICAgICAgIChjZmdfc2RyX3R3cl9kICAgICAgICAgICAgICksCisgICAgICAgLmNmZ19zZHJfcmZzaCAgICAgICAgICAgKGNmZ19zZHJfcmZzaCAgICAgICAgICAgICAgKSwKKyAgICAgICAuY2ZnX3Nkcl9yZm1heCAgICAgICAgICAoY2ZnX3Nkcl9yZm1heCAgICAgICAgICAgICApCisKKworICAgICAgICApOworCit1YXJ0X2NvcmUgICB1X3VhcnRfY29yZSAoCisgICAgICAgIC5hcnN0X24gICAgICAgICAgICAgICAgICh3YmRfaW50X3JzdF9uICAgICAgICAgICAgKSwgLy8gYXN5bmMgcmVzZXQKKyAgICAgICAgLmFwcF9jbGsgICAgICAgICAgICAgICAgKHdiZF9jbGtfdWFydCAgICAgICAgICAgICApLAorCisgICAgICAgIC8vIFJlZyBCdXMgSW50ZXJmYWNlIFNpZ25hbAorICAgICAgIC5yZWdfY3MgICAgICAgICAgICAgICAgICh3YmRfdWFydF9zdGJfbyAgICAgICAgICAgICksCisgICAgICAgLnJlZ193ciAgICAgICAgICAgICAgICAgKHdiZF91YXJ0X3dlX28gICAgICAgICAgICAgKSwKKyAgICAgICAucmVnX2FkZHIgICAgICAgICAgICAgICAod2JkX3VhcnRfYWRyX29bNToyXSAgICAgICApLAorICAgICAgIC5yZWdfd2RhdGEgICAgICAgICAgICAgICh3YmRfdWFydF9kYXRfb1s3OjBdICAgICAgICksCisgICAgICAgLnJlZ19iZSAgICAgICAgICAgICAgICAgKHdiZF91YXJ0X3NlbF9vICAgICAgICAgICAgKSwKKworICAgICAgIC8vIE91dHB1dHMKKyAgICAgICAucmVnX3JkYXRhICAgICAgICAgICAgICAod2JkX3VhcnRfZGF0X2lbNzowXSAgICAgICApLAorICAgICAgIC5yZWdfYWNrICAgICAgICAgICAgICAgICh3YmRfdWFydF9hY2tfaSAgICAgICAgICAgICksCisKKyAgICAgICAvLyBQYWQgaW50ZXJmYWNlCisgICAgICAgLmlvX2luICAgICAgICAgICAgICAgICAgKGlvX2luIFszNzozNl0gICAgICAgICAgICAgICksCisgICAgICAgLmlvX29lYiAgICAgICAgICAgICAgICAgKGlvX29lYlszNzozNl0gICAgICAgICAgICAgICksCisgICAgICAgLmlvX291dCAgICAgICAgICAgICAgICAgKGlvX291dFszNzozNl0gICAgICAgICAgICAgICkKKworICAgICApOworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBDbG9jayBTa2V3IGFkanVzdCBtb2R1bGUKKy8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKy8vIFdpc2hib25lIGludGVyY29ubmVjdCBjbG9jayBza2V3IGNvbnRyb2wKK2Nsa19za2V3X2FkanVzdCB1X3NrZXdfd2kKKyAgICAgICAoCitgaWZkZWYgVVNFX1BPV0VSX1BJTlMKKyAgICAgICAgICAgICAgIC52Y2NkMSAgICAgICh2Y2NkMSAgICAgICAgICAgICAgICAgICAgICApLC8vIFVzZXIgYXJlYSAxIDEuOFYgc3VwcGx5CisgICAgICAgICAgICAgICAudnNzZDEgICAgICAodnNzZDEgICAgICAgICAgICAgICAgICAgICAgKSwvLyBVc2VyIGFyZWEgMSBkaWdpdGFsIGdyb3VuZAorYGVuZGlmCisJICAgICAgIC5jbGtfaW4gICAgICh3YmRfY2xrX2ludCAgICAgICAgICAgICAgICAgKSwgCisJICAgICAgIC5zZWwgICAgICAgIChjZmdfY3NrYV93aSAgICAgICAgICAgICAgICAgKSwgCisJICAgICAgIC5jbGtfb3V0ICAgICh3YmRfY2xrX3dpICAgICAgICAgICAgICAgICAgKSAKKyAgICAgICApOworCisvLyByaXNjdiBjbG9jayBza2V3IGNvbnRyb2wKK2Nsa19za2V3X2FkanVzdCB1X3NrZXdfcmlzY3YKKyAgICAgICAoCitgaWZkZWYgVVNFX1BPV0VSX1BJTlMKKyAgICAgICAgICAgICAgIC52Y2NkMSAgICAgICh2Y2NkMSAgICAgICAgICAgICAgICAgICAgICApLC8vIFVzZXIgYXJlYSAxIDEuOFYgc3VwcGx5CisgICAgICAgICAgICAgICAudnNzZDEgICAgICAodnNzZDEgICAgICAgICAgICAgICAgICAgICAgKSwvLyBVc2VyIGFyZWEgMSBkaWdpdGFsIGdyb3VuZAorYGVuZGlmCisJICAgICAgIC5jbGtfaW4gICAgICh3YmRfY2xrX2ludCAgICAgICAgICAgICAgICAgKSwgCisJICAgICAgIC5zZWwgICAgICAgIChjZmdfY3NrYV9yaXNjdiAgICAgICAgICAgICAgKSwgCisJICAgICAgIC5jbGtfb3V0ICAgICh3YmRfY2xrX3Jpc2N2ICAgICAgICAgICAgICAgKSAKKyAgICAgICApOworCisvLyB1YXJ0IGNsb2NrIHNrZXcgY29udHJvbAorY2xrX3NrZXdfYWRqdXN0IHVfc2tld191YXJ0CisgICAgICAgKAorYGlmZGVmIFVTRV9QT1dFUl9QSU5TCisgICAgICAgICAgICAgICAudmNjZDEgICAgICAodmNjZDEgICAgICAgICAgICAgICAgICAgICAgKSwvLyBVc2VyIGFyZWEgMSAxLjhWIHN1cHBseQorICAgICAgICAgICAgICAgLnZzc2QxICAgICAgKHZzc2QxICAgICAgICAgICAgICAgICAgICAgICksLy8gVXNlciBhcmVhIDEgZGlnaXRhbCBncm91bmQKK2BlbmRpZgorCSAgICAgICAuY2xrX2luICAgICAod2JkX2Nsa19pbnQgICAgICAgICAgICAgICAgICksIAorCSAgICAgICAuc2VsICAgICAgICAoY2ZnX2Nza2FfdWFydCAgICAgICAgICAgICAgICksIAorCSAgICAgICAuY2xrX291dCAgICAod2JkX2Nsa191YXJ0ICAgICAgICAgICAgICAgICkgCisgICAgICAgKTsKKworLy8gc3BpIGNsb2NrIHNrZXcgY29udHJvbAorY2xrX3NrZXdfYWRqdXN0IHVfc2tld19zcGkKKyAgICAgICAoCitgaWZkZWYgVVNFX1BPV0VSX1BJTlMKKyAgICAgICAgICAgICAgIC52Y2NkMSAgICAgICh2Y2NkMSAgICAgICAgICAgICAgICAgICAgICApLC8vIFVzZXIgYXJlYSAxIDEuOFYgc3VwcGx5CisgICAgICAgICAgICAgICAudnNzZDEgICAgICAodnNzZDEgICAgICAgICAgICAgICAgICAgICAgKSwvLyBVc2VyIGFyZWEgMSBkaWdpdGFsIGdyb3VuZAorYGVuZGlmCisJICAgICAgIC5jbGtfaW4gICAgICh3YmRfY2xrX2ludCAgICAgICAgICAgICAgICApLCAKKwkgICAgICAgLnNlbCAgICAgICAgKGNmZ19jc2thX3NwaSAgICAgICAgICAgICAgICksIAorCSAgICAgICAuY2xrX291dCAgICAod2JkX2Nsa19zcGkgICAgICAgICAgICAgICAgKSAKKyAgICAgICApOworCisvLyBzZHJhbSBjbG9jayBza2V3IGNvbnRyb2wKK2Nsa19za2V3X2FkanVzdCB1X3NrZXdfc2RyYW0KKyAgICAgICAoCitgaWZkZWYgVVNFX1BPV0VSX1BJTlMKKyAgICAgICAgICAgICAgIC52Y2NkMSAgICAgICh2Y2NkMSAgICAgICAgICAgICAgICAgICAgICApLC8vIFVzZXIgYXJlYSAxIDEuOFYgc3VwcGx5CisgICAgICAgICAgICAgICAudnNzZDEgICAgICAodnNzZDEgICAgICAgICAgICAgICAgICAgICAgKSwvLyBVc2VyIGFyZWEgMSBkaWdpdGFsIGdyb3VuZAorYGVuZGlmCisJICAgICAgIC5jbGtfaW4gICAgICh3YmRfY2xrX2ludCAgICAgICAgICAgICAgICApLCAKKwkgICAgICAgLnNlbCAgICAgICAgKGNmZ19jc2thX3NkcmFtICAgICAgICAgICAgICksIAorCSAgICAgICAuY2xrX291dCAgICAod2JkX2Nsa19zZHJhbSAgICAgICAgICAgICAgKSAKKyAgICAgICApOworCisvLyBnbG9iYWwgY2xvY2sgc2tldyBjb250cm9sCitjbGtfc2tld19hZGp1c3QgdV9za2V3X2dsYmwKKyAgICAgICAoCitgaWZkZWYgVVNFX1BPV0VSX1BJTlMKKyAgICAgICAgICAgICAgIC52Y2NkMSAgICAgICh2Y2NkMSAgICAgICAgICAgICAgICAgICAgICApLC8vIFVzZXIgYXJlYSAxIDEuOFYgc3VwcGx5CisgICAgICAgICAgICAgICAudnNzZDEgICAgICAodnNzZDEgICAgICAgICAgICAgICAgICAgICAgKSwvLyBVc2VyIGFyZWEgMSBkaWdpdGFsIGdyb3VuZAorYGVuZGlmCisJICAgICAgIC5jbGtfaW4gICAgICh3YmRfY2xrX2ludCAgICAgICAgICAgICAgICksIAorCSAgICAgICAuc2VsICAgICAgICAoY2ZnX2Nza2FfZ2xibCAgICAgICAgICAgICApLCAKKwkgICAgICAgLmNsa19vdXQgICAgKHdiZF9jbGtfZ2xibCAgICAgICAgICAgICAgKSAKKyAgICAgICApOworCisvLyB3Yl9ob3N0IGNsb2NrIHNrZXcgY29udHJvbAorY2xrX3NrZXdfYWRqdXN0IHVfc2tld193aAorICAgICAgICgKK2BpZmRlZiBVU0VfUE9XRVJfUElOUworICAgICAgICAgICAgICAgLnZjY2QxICAgICAgKHZjY2QxICAgICAgICAgICAgICAgICAgICAgICksLy8gVXNlciBhcmVhIDEgMS44ViBzdXBwbHkKKyAgICAgICAgICAgICAgIC52c3NkMSAgICAgICh2c3NkMSAgICAgICAgICAgICAgICAgICAgICApLC8vIFVzZXIgYXJlYSAxIGRpZ2l0YWwgZ3JvdW5kCitgZW5kaWYKKwkgICAgICAgLmNsa19pbiAgICAgKHdiZF9jbGtfaW50ICAgICAgICAgICAgICAgKSwgCisJICAgICAgIC5zZWwgICAgICAgIChjZmdfY3NrYV93aCAgICAgICAgICAgICAgICksIAorCSAgICAgICAuY2xrX291dCAgICAod2JkX2Nsa193aCAgICAgICAgICAgICAgICApIAorICAgICAgICk7CisKKy8vIFNEUkFNIGNsb2NrIG91dCBjbG9jayBza2V3IGNvbnRyb2wKK2Nsa19za2V3X2FkanVzdCB1X3NrZXdfc2RfY28KKyAgICAgICAoCitgaWZkZWYgVVNFX1BPV0VSX1BJTlMKKyAgICAgICAgICAgICAgIC52Y2NkMSAgICAgICh2Y2NkMSAgICAgICAgICAgICAgICAgICAgICApLC8vIFVzZXIgYXJlYSAxIDEuOFYgc3VwcGx5CisgICAgICAgICAgICAgICAudnNzZDEgICAgICAodnNzZDEgICAgICAgICAgICAgICAgICAgICAgKSwvLyBVc2VyIGFyZWEgMSBkaWdpdGFsIGdyb3VuZAorYGVuZGlmCisJICAgICAgIC5jbGtfaW4gICAgIChpb19vdXRfMjlfICAgICAgICAgICAgICAgICksIAorCSAgICAgICAuc2VsICAgICAgICAoY2ZnX2Nza2Ffc2RfY28gICAgICAgICAgICApLCAKKwkgICAgICAgLmNsa19vdXQgICAgKGlvX291dFsyOV0gICAgICAgICAgICAgICAgKSAKKyAgICAgICApOworCisvLyBDbG9jayBTa2V5IGZvciBQQUQgU0RSQU0gY2xvY2sKK2Nsa19za2V3X2FkanVzdCB1X3NrZXdfc2RfY2kKKyAgICAgICAoCitgaWZkZWYgVVNFX1BPV0VSX1BJTlMKKyAgICAgICAgICAgICAgIC52Y2NkMSAgICAgICh2Y2NkMSAgICAgICAgICAgICAgICAgICAgICApLC8vIFVzZXIgYXJlYSAxIDEuOFYgc3VwcGx5CisgICAgICAgICAgICAgICAudnNzZDEgICAgICAodnNzZDEgICAgICAgICAgICAgICAgICAgICAgKSwvLyBVc2VyIGFyZWEgMSBkaWdpdGFsIGdyb3VuZAorYGVuZGlmCisJICAgICAgIC5jbGtfaW4gICAgIChzZHJhbV9jbGsgICAgICAgICAgICAgICAgICksIAorCSAgICAgICAuc2VsICAgICAgICAoY2ZnX2Nza2Ffc2RfY2kgICAgICAgICAgICApLCAKKwkgICAgICAgLmNsa19vdXQgICAgKGlvX2luXzI5XyAgICAgICAgICAgICAgICAgKSAKKyAgICAgICApOworCisvLyBDbG9jayBTa2V5IGZvciBTUEkgY2xvY2sgb3V0CitjbGtfc2tld19hZGp1c3QgdV9za2V3X3NwX2NvCisgICAgICAgKAorYGlmZGVmIFVTRV9QT1dFUl9QSU5TCisgICAgICAgICAgICAgICAudmNjZDEgICAgICAodmNjZDEgICAgICAgICAgICAgICAgICAgICAgKSwvLyBVc2VyIGFyZWEgMSAxLjhWIHN1cHBseQorICAgICAgICAgICAgICAgLnZzc2QxICAgICAgKHZzc2QxICAgICAgICAgICAgICAgICAgICAgICksLy8gVXNlciBhcmVhIDEgZGlnaXRhbCBncm91bmQKK2BlbmRpZgorCSAgICAgICAuY2xrX2luICAgICAoaW9faW5fMzBfICAgICAgICAgICAgICAgICApLCAKKwkgICAgICAgLnNlbCAgICAgICAgKGNmZ19jc2thX3NwX2NvICAgICAgICAgICAgKSwgCisJICAgICAgIC5jbGtfb3V0ICAgIChpb19vdXRbMzBdICAgICAgICAgICAgICAgICkgCisgICAgICAgKTsKKworZW5kbW9kdWxlIDogZGlnaXRhbF9jb3JlCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9kaWdpdGFsX2NvcmUvc3JjL2dsYmxfY2ZnLnN2IGIvdmVyaWxvZy9ydGwvZGlnaXRhbF9jb3JlL3NyYy9nbGJsX2NmZy5zdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODUyZTE5Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvZGlnaXRhbF9jb3JlL3NyYy9nbGJsX2NmZy5zdgpAQCAtMCwwICsxLDEwNDEgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSAsIERpbmVzaCBBbm5heXlhICAgICAgICAgICAgICAgICAgICAgICAgICAKKy8vIAorLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBDcmVhdGVkIGJ5IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgR2xvYmFsIGNvbmZnIHJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFlJRml2ZSBjb3JlcyBwcm9qZWN0ICAgICAgICAgICAgICAgLy8vLworLy8vLyAgaHR0cHM6Ly9naXRodWIuY29tL2RpbmVzaGFubmF5eWEveWlmaXZlX3IwLmdpdCAgICAgICAgICAgICAgLy8vLworLy8vLyAgaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2NvcmVzL3lpZml2ZS8gICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgIFRoaXMgYmxvY2sgZ2VuZXJhdGUgYWxsIHRoZSBnbG9iYWwgY29uZmlnIGFuZCBzdGF0dXMgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVG8gRG86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICBub3RoaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgQXV0aG9yKHMpOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgIC0gRGluZXNoIEFubmF5eWEsIGRpbmVzaGFAb3BlbmNvcmVzLm9yZyAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgUmV2aXNpb24gOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAwLjEgLSAwOCBKdW5lIDIwMjEgIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICBJbml0aWFsIHZlcnNpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBDb3B5cmlnaHQgKEMpIDIwMDAgQXV0aG9ycyBhbmQgT1BFTkNPUkVTLk9SRyAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBmaWxlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCB3aXRob3V0ICAgICAgICAgLy8vLworLy8vLyByZXN0cmljdGlvbiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgICAgLy8vLworLy8vLyByZW1vdmVkIGZyb20gdGhlIGZpbGUgYW5kIHRoYXQgYW55IGRlcml2YXRpdmUgd29yayBjb250YWlucyAgLy8vLworLy8vLyB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGFzc29jaWF0ZWQgZGlzY2xhaW1lci4gLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0ICAgLy8vLworLy8vLyBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgLy8vLworLy8vLyBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgLy8vLworLy8vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55ICAgLy8vLworLy8vLyBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgICAgICAgLy8vLworLy8vLyB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkICAgLy8vLworLy8vLyB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSICAgICAgLy8vLworLy8vLyBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgLy8vLworLy8vLyBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAgLy8vLworLy8vLyBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgc291cmNlOyBpZiBub3QsIGRvd25sb2FkIGl0ICAgLy8vLworLy8vLyBmcm9tIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9sZ3BsLnNodG1sICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCittb2R1bGUgZ2xibF9jZmcgKAorCisgICAgICAgIGlucHV0IGxvZ2ljICAgICAgICAgICAgIG1jbGssCisgICAgICAgIGlucHV0IGxvZ2ljICAgICAgICAgICAgIHJlc2V0X24sCisKKyAgICAgICAgLy8gUmVnIEJ1cyBJbnRlcmZhY2UgU2lnbmFsCisgICAgICAgIGlucHV0IGxvZ2ljICAgICAgICAgICAgIHJlZ19jcywKKyAgICAgICAgaW5wdXQgbG9naWMgICAgICAgICAgICAgcmVnX3dyLAorICAgICAgICBpbnB1dCBsb2dpYyBbNzowXSAgICAgICByZWdfYWRkciwKKyAgICAgICAgaW5wdXQgbG9naWMgWzMxOjBdICAgICAgcmVnX3dkYXRhLAorICAgICAgICBpbnB1dCBsb2dpYyBbMzowXSAgICAgICByZWdfYmUsCisKKyAgICAgICAvLyBPdXRwdXRzCisgICAgICAgIG91dHB1dCBsb2dpYyBbMzE6MF0gICAgIHJlZ19yZGF0YSwKKyAgICAgICAgb3V0cHV0IGxvZ2ljICAgICAgICAgICAgcmVnX2FjaywKKworICAgICAgIC8vIFJpc2MgY29uZmlndXJhdGlvbgorICAgICAgIG91dHB1dCBsb2dpYyBbMzE6MF0gICAgIGZ1c2VfbWhhcnRpZCwKKyAgICAgICBvdXRwdXQgbG9naWMgWzE1OjBdICAgICBpcnFfbGluZXMsCisgICAgICAgb3V0cHV0IGxvZ2ljICAgICAgICAgICAgc29mdF9pcnEsCisgICAgICAgb3V0cHV0IGxvZ2ljIFsyOjBdICAgICAgdXNlcl9pcnEsCisKKyAgICAgICAvLyBTRFJBTSBDb25maWcKKyAgICAgICBpbnB1dCBsb2dpYyAgICAgICAgICAgICBzZHJfaW5pdF9kb25lICAgICAgICwgLy8gSW5kaWNhdGUgU0RSQU0gSW5pdGlhbGlzYXRpb24gRG9uZQorICAgICAgIG91dHB1dCBsb2dpYyBbMTowXSAgICAgIGNmZ19zZHJfd2lkdGggICAgICAgLCAvLyAyJ2IwMCAtIDMyIEJpdCBTRFIsIDInYjAxIC0gMTYgQml0IFNEUiwgMidiMXggLSA4IEJpdAorICAgICAgIG91dHB1dCBsb2dpYyBbMTowXSAgICAgIGNmZ19jb2xiaXRzICAgICAgICAgLCAvLyAyJ2IwMCAtIDggQml0IGNvbHVtbiBhZGRyZXNzLCAKKyAgICAgICBvdXRwdXQgbG9naWMgWzM6MF0gICAgICBjZmdfc2RyX3RyYXNfZCAgICAgICwgLy8gQWN0aXZlIHRvIHByZWNoYXJnZSBkZWxheQorICAgICAgIG91dHB1dCBsb2dpYyBbMzowXSAgICAgIGNmZ19zZHJfdHJwX2QgICAgICAgLCAvLyBQcmVjaGFyZ2UgdG8gYWN0aXZlIGRlbGF5CisgICAgICAgb3V0cHV0IGxvZ2ljIFszOjBdICAgICAgY2ZnX3Nkcl90cmNkX2QgICAgICAsIC8vIEFjdGl2ZSB0byBSL1cgZGVsYXkKKyAgICAgICBvdXRwdXQgbG9naWMgCSAgICAgICBjZmdfc2RyX2VuICAgICAgICAgICwgLy8gRW5hYmxlIFNEUkFNIGNvbnRyb2xsZXIKKyAgICAgICBvdXRwdXQgbG9naWMgWzE6MF0gICAgICBjZmdfcmVxX2RlcHRoICAgICAgICwgLy8gTWF4aW11bSBSZXF1ZXN0IGFjY2VwdGVkIGJ5IFNEUkFNIGNvbnRyb2xsZXIKKyAgICAgICBvdXRwdXQgbG9naWMgWzEyOjBdICAgICBjZmdfc2RyX21vZGVfcmVnICAgICwKKyAgICAgICBvdXRwdXQgbG9naWMgWzI6MF0gICAgICBjZmdfc2RyX2NhcyAgICAgICAgICwgLy8gU0RSQU0gQ0FTIExhdGVuY3kKKyAgICAgICBvdXRwdXQgbG9naWMgWzM6MF0gICAgICBjZmdfc2RyX3RyY2FyX2QgICAgICwgLy8gQXV0by1yZWZyZXNoIHBlcmlvZAorICAgICAgIG91dHB1dCBsb2dpYyBbMzowXSAgICAgIGNmZ19zZHJfdHdyX2QgICAgICAgLCAvLyBXcml0ZSByZWNvdmVyeSBkZWxheQorICAgICAgIG91dHB1dCBsb2dpYyBbMTE6MF0gICAgIGNmZ19zZHJfcmZzaCAgICAgICAgLAorICAgICAgIG91dHB1dCBsb2dpYyBbMjowXSAgICAgIGNmZ19zZHJfcmZtYXggICAgICAgCisKKworICAgICAgICApOworCisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gSW50ZXJuYWwgV2lyZSBEZWNsYXJhdGlvbnMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbG9naWMgICAgICAgICAgIHN3X3JkX2VuOworbG9naWMgICAgICAgICAgIHN3X3dyX2VuOworbG9naWMgIFszOjBdICAgIHN3X2FkZHIgOyAvLyBhZGRyZXNzaW5nIDE2IHJlZ2lzdGVycworbG9naWMgIFszOjBdICAgIHdyX2JlICAgOworbG9naWMgIFszMTowXSAgIHN3X3JlZ193ZGF0YTsKKworbG9naWMgICAgICAgICAgIHJlZ19jc19sICAgIDsKK2xvZ2ljICAgICAgICAgICByZWdfY3NfMmwgICAgOworCisKK2xvZ2ljIFszMTowXSAgICByZWdfMDsgIC8vIFNvZnR3YXJlX1JlZ18wCitsb2dpYyBbMzE6MF0gICAgcmVnXzE7ICAvLyBSaXNjIEZ1c2UgSUQKK2xvZ2ljIFszMTowXSAgICByZWdfMjsgIC8vIFNvZnR3YXJlLVJlZ18yCitsb2dpYyBbMzE6MF0gICAgcmVnXzM7ICAvLyBJbnRlcnJ1cCBDb250cm9sCitsb2dpYyBbMzE6MF0gICAgcmVnXzQ7ICAvLyBTRFJBTV9DVFJMMQorbG9naWMgWzMxOjBdICAgIHJlZ181OyAgLy8gU0RSQU1fQ1RSTDIKK2xvZ2ljIFszMTowXSAgICByZWdfNjsgIC8vIFNvZnR3YXJlLVJlZ182Citsb2dpYyBbMzE6MF0gICAgcmVnXzc7ICAvLyBTb2Z0d2FyZS1SZWdfNworbG9naWMgWzMxOjBdICAgIHJlZ184OyAgLy8gU29mdHdhcmUtUmVnXzgKK2xvZ2ljIFszMTowXSAgICByZWdfOTsgIC8vIFNvZnR3YXJlLVJlZ185Citsb2dpYyBbMzE6MF0gICAgcmVnXzEwOyAvLyBTb2Z0d2FyZS1SZWdfMTAKK2xvZ2ljIFszMTowXSAgICByZWdfMTE7IC8vIFNvZnR3YXJlLVJlZ18xMQorbG9naWMgWzMxOjBdICAgIHJlZ18xMjsgLy8gU29mdHdhcmUtUmVnXzEyCitsb2dpYyBbMzE6MF0gICAgcmVnXzEzOyAvLyBTb2Z0d2FyZS1SZWdfMTMKK2xvZ2ljIFszMTowXSAgICByZWdfMTQ7IC8vIFNvZnR3YXJlLVJlZ18xNAorbG9naWMgWzMxOjBdICAgIHJlZ18xNTsgLy8gU29mdHdhcmUtUmVnXzE1Citsb2dpYyBbMzE6MF0gICAgcmVnX291dDsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTWFpbiBjb2RlIHN0YXJ0cyBoZXJlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFRvIGF2b2lkIGludGVyZmFjZSB0aW1pbmcsIGFsbCB0aGUgY29udGVudCBhcmUgcmVnaXN0ZXJlZAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYWx3YXlzIEAgKHBvc2VkZ2UgbWNsayBvciBuZWdlZGdlIHJlc2V0X24pCitiZWdpbiAKKyAgIGlmIChyZXNldF9uID09IDEnYjApCisgICBiZWdpbgorICAgIHN3X2FkZHIgICAgICAgPD0gJzA7CisgICAgc3dfcmRfZW4gICAgICA8PSAnMDsKKyAgICBzd193cl9lbiAgICAgIDw9ICcwOworICAgIHN3X3JlZ193ZGF0YSAgPD0gJzA7CisgICAgd3JfYmUgICAgICAgICA8PSAnMDsKKyAgICByZWdfY3NfbCAgICAgIDw9ICcwOworICAgIHJlZ19jc18ybCAgICAgPD0gJzA7CisgIGVuZCBlbHNlIGJlZ2luCisgICAgc3dfYWRkciAgICAgICA8PSByZWdfYWRkciBbNToyXTsKKyAgICBzd19yZF9lbiAgICAgIDw9IHJlZ19jcyAmICFyZWdfd3I7CisgICAgc3dfd3JfZW4gICAgICA8PSByZWdfY3MgJiByZWdfd3I7CisgICAgc3dfcmVnX3dkYXRhICA8PSByZWdfd2RhdGE7CisgICAgd3JfYmUgICAgICAgICA8PSByZWdfYmU7CisgICAgcmVnX2NzX2wgICAgICA8PSByZWdfY3M7CisgICAgcmVnX2NzXzJsICAgICA8PSByZWdfY3NfbDsKKyAgZW5kCitlbmQKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSZWFkIHBhdGggbXV4CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Fsd2F5cyBAIChwb3NlZGdlIG1jbGsgb3IgbmVnZWRnZSByZXNldF9uKQorYmVnaW4gOiBwcmVnX291dF9TZXEKKyAgIGlmIChyZXNldF9uID09IDEnYjApIGJlZ2luCisgICAgICByZWdfcmRhdGEgWzMxOjBdICA8PSAzMidoMDAwMF8wMDAwOworICAgICAgcmVnX2FjayAgICAgICAgICAgPD0gMSdiMDsKKyAgIGVuZCBlbHNlIGlmIChzd19yZF9lbiAmJiAhcmVnX2FjayAmJiAhcmVnX2NzXzJsKSBiZWdpbgorICAgICAgcmVnX3JkYXRhIFszMTowXSAgPD0gcmVnX291dCBbMzE6MF07CisgICAgICByZWdfYWNrICAgICAgICAgICA8PSAxJ2IxOworICAgZW5kIGVsc2UgaWYgKHN3X3dyX2VuICYmICFyZWdfYWNrICYmICFyZWdfY3NfMmwpIGJlZ2luIAorICAgICAgcmVnX2FjayAgICAgICAgICAgPD0gMSdiMTsKKyAgIGVuZCBlbHNlIGJlZ2luCisgICAgICByZWdfYWNrICAgICAgICA8PSAxJ2IwOworICAgZW5kCitlbmQKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyByZWdpc3RlciByZWFkIGVuYWJsZSBhbmQgd3JpdGUgZW5hYmxlIGRlY29kaW5nIGxvZ2ljCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXJlICAgc3dfd3JfZW5fMCA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNCdoMCk7Cit3aXJlICAgc3dfcmRfZW5fMCA9IHN3X3JkX2VuICYgKHN3X2FkZHIgPT0gNCdoMCk7Cit3aXJlICAgc3dfd3JfZW5fMSA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNCdoMSk7Cit3aXJlICAgc3dfcmRfZW5fMSA9IHN3X3JkX2VuICYgKHN3X2FkZHIgPT0gNCdoMSk7Cit3aXJlICAgc3dfd3JfZW5fMiA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNCdoMik7Cit3aXJlICAgc3dfcmRfZW5fMiA9IHN3X3JkX2VuICYgKHN3X2FkZHIgPT0gNCdoMik7Cit3aXJlICAgc3dfd3JfZW5fMyA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNCdoMyk7Cit3aXJlICAgc3dfcmRfZW5fMyA9IHN3X3JkX2VuICYgKHN3X2FkZHIgPT0gNCdoMyk7Cit3aXJlICAgc3dfd3JfZW5fNCA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNCdoNCk7Cit3aXJlICAgc3dfcmRfZW5fNCA9IHN3X3JkX2VuICYgKHN3X2FkZHIgPT0gNCdoNCk7Cit3aXJlICAgc3dfd3JfZW5fNSA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNCdoNSk7Cit3aXJlICAgc3dfcmRfZW5fNSA9IHN3X3JkX2VuICYgKHN3X2FkZHIgPT0gNCdoNSk7Cit3aXJlICAgc3dfd3JfZW5fNiA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNCdoNik7Cit3aXJlICAgc3dfcmRfZW5fNiA9IHN3X3JkX2VuICYgKHN3X2FkZHIgPT0gNCdoNik7Cit3aXJlICAgc3dfd3JfZW5fNyA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNCdoNyk7Cit3aXJlICAgc3dfcmRfZW5fNyA9IHN3X3JkX2VuICYgKHN3X2FkZHIgPT0gNCdoNyk7Cit3aXJlICAgc3dfd3JfZW5fOCA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNCdoOCk7Cit3aXJlICAgc3dfcmRfZW5fOCA9IHN3X3JkX2VuICYgKHN3X2FkZHIgPT0gNCdoOCk7Cit3aXJlICAgc3dfd3JfZW5fOSA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNCdoOSk7Cit3aXJlICAgc3dfcmRfZW5fOSA9IHN3X3JkX2VuICYgKHN3X2FkZHIgPT0gNCdoOSk7Cit3aXJlICAgc3dfd3JfZW5fMTAgPSBzd193cl9lbiAmIChzd19hZGRyID09IDQnaEEpOword2lyZSAgIHN3X3JkX2VuXzEwID0gc3dfcmRfZW4gJiAoc3dfYWRkciA9PSA0J2hBKTsKK3dpcmUgICBzd193cl9lbl8xMSA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNCdoQik7Cit3aXJlICAgc3dfcmRfZW5fMTEgPSBzd19yZF9lbiAmIChzd19hZGRyID09IDQnaEIpOword2lyZSAgIHN3X3dyX2VuXzEyID0gc3dfd3JfZW4gJiAoc3dfYWRkciA9PSA0J2hDKTsKK3dpcmUgICBzd19yZF9lbl8xMiA9IHN3X3JkX2VuICYgKHN3X2FkZHIgPT0gNCdoQyk7Cit3aXJlICAgc3dfd3JfZW5fMTMgPSBzd193cl9lbiAmIChzd19hZGRyID09IDQnaEQpOword2lyZSAgIHN3X3JkX2VuXzEzID0gc3dfcmRfZW4gJiAoc3dfYWRkciA9PSA0J2hEKTsKK3dpcmUgICBzd193cl9lbl8xNCA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNCdoRSk7Cit3aXJlICAgc3dfcmRfZW5fMTQgPSBzd19yZF9lbiAmIChzd19hZGRyID09IDQnaEUpOword2lyZSAgIHN3X3dyX2VuXzE1ID0gc3dfd3JfZW4gJiAoc3dfYWRkciA9PSA0J2hGKTsKK3dpcmUgICBzd19yZF9lbl8xNSA9IHN3X3JkX2VuICYgKHN3X2FkZHIgPT0gNCdoRik7CisKKworYWx3YXlzIEAoICopCitiZWdpbiA6IHByZWdfc2VsX0NvbQorCisgIHJlZ19vdXQgWzMxOjBdID0gMzInZDA7CisKKyAgY2FzZSAoc3dfYWRkciBbMzowXSkKKyAgICA0J2IwMDAwIDogcmVnX291dCBbMzE6MF0gPSByZWdfMCBbMzE6MF07ICAgICAKKyAgICA0J2IwMDAxIDogcmVnX291dCBbMzE6MF0gPSByZWdfMSBbMzE6MF07ICAgIAorICAgIDQnYjAwMTAgOiByZWdfb3V0IFszMTowXSA9IHJlZ18yIFszMTowXTsgICAgIAorICAgIDQnYjAwMTEgOiByZWdfb3V0IFszMTowXSA9IHJlZ18zIFszMTowXTsgICAgCisgICAgNCdiMDEwMCA6IHJlZ19vdXQgWzMxOjBdID0gcmVnXzQgWzMxOjBdOyAgICAKKyAgICA0J2IwMTAxIDogcmVnX291dCBbMzE6MF0gPSByZWdfNSBbMzE6MF07ICAgIAorICAgIDQnYjAxMTAgOiByZWdfb3V0IFszMTowXSA9IHJlZ182IFszMTowXTsgICAgCisgICAgNCdiMDExMSA6IHJlZ19vdXQgWzMxOjBdID0gcmVnXzcgWzMxOjBdOyAgICAKKyAgICA0J2IxMDAwIDogcmVnX291dCBbMzE6MF0gPSByZWdfOCBbMzE6MF07ICAgIAorICAgIDQnYjEwMDEgOiByZWdfb3V0IFszMTowXSA9IHJlZ185IFszMTowXTsgICAgCisgICAgNCdiMTAxMCA6IHJlZ19vdXQgWzMxOjBdID0gcmVnXzEwIFszMTowXTsgICAKKyAgICA0J2IxMDExIDogcmVnX291dCBbMzE6MF0gPSByZWdfMTEgWzMxOjBdOyAgIAorICAgIDQnYjExMDAgOiByZWdfb3V0IFszMTowXSA9IHJlZ18xMiBbMzE6MF07ICAgCisgICAgNCdiMTEwMSA6IHJlZ19vdXQgWzMxOjBdID0gcmVnXzEzIFszMTowXTsKKyAgICA0J2IxMTEwIDogcmVnX291dCBbMzE6MF0gPSByZWdfMTQgWzMxOjBdOworICAgIDQnYjExMTEgOiByZWdfb3V0IFszMTowXSA9IHJlZ18xNSBbMzE6MF07IAorICBlbmRjYXNlCitlbmQKKworCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEluZGl2aWR1YWwgcmVnaXN0ZXIgYXNzaWdubWVudHMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICAgcmVnLTAKKy8vICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCisKK2dlbmVyaWNfcmVnaXN0ZXIgIyg4LDgnaEFBICApIHVfcmVnMF9iZTAgKAorCSAgICAgIC53ZSAgICAgICAgICAgICh7OHtzd193cl9lbl8wICYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cl9iZVswXSAgIH19ICApLAkJIAorCSAgICAgIC5kYXRhX2luICAgICAgIChzd19yZWdfd2RhdGFbNzowXSAgICApLAorCSAgICAgIC5yZXNldF9uICAgICAgIChyZXNldF9uICAgICAgICAgICApLAorCSAgICAgIC5jbGsgICAgICAgICAgIChtY2xrICAgICAgICAgICAgICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgICAgKHJlZ18wWzc6MF0gICAgICAgICkKKyAgICAgICAgICApOworCitnZW5lcmljX3JlZ2lzdGVyICMoOCw4J2hCQiAgKSB1X3JlZzBfYmUxICgKKwkgICAgICAud2UgICAgICAgICAgICAoezh7c3dfd3JfZW5fMCAmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JfYmVbMV0gICB9fSAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAgICAoc3dfcmVnX3dkYXRhWzE1OjhdICAgICksCisJICAgICAgLnJlc2V0X24gICAgICAgKHJlc2V0X24gICAgICAgICAgICksCisJICAgICAgLmNsayAgICAgICAgICAgKG1jbGsgICAgICAgICAgICAgICksCisJICAgICAgCisJICAgICAgLy9MaXN0IG9mIE91dHMKKwkgICAgICAuZGF0YV9vdXQgICAgICAocmVnXzBbMTU6OF0gICAgICAgICkKKyAgICAgICAgICApOworZ2VuZXJpY19yZWdpc3RlciAjKDgsOCdoQ0MgICkgdV9yZWcwX2JlMiAoCisJICAgICAgLndlICAgICAgICAgICAgKHs4e3N3X3dyX2VuXzAgJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyX2JlWzJdICAgfX0gICksCQkgCisJICAgICAgLmRhdGFfaW4gICAgICAgKHN3X3JlZ193ZGF0YVsyMzoxNl0gICAgKSwKKwkgICAgICAucmVzZXRfbiAgICAgICAocmVzZXRfbiAgICAgICAgICAgKSwKKwkgICAgICAuY2xrICAgICAgICAgICAobWNsayAgICAgICAgICAgICAgKSwKKwkgICAgICAKKwkgICAgICAvL0xpc3Qgb2YgT3V0cworCSAgICAgIC5kYXRhX291dCAgICAgIChyZWdfMFsyMzoxNl0gICAgICAgICkKKyAgICAgICAgICApOworCitnZW5lcmljX3JlZ2lzdGVyICMoOCw4J2hERCAgKSB1X3JlZzBfYmUzICgKKwkgICAgICAud2UgICAgICAgICAgICAoezh7c3dfd3JfZW5fMCAmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JfYmVbM10gICB9fSAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAgICAoc3dfcmVnX3dkYXRhWzMxOjI0XSAgICApLAorCSAgICAgIC5yZXNldF9uICAgICAgIChyZXNldF9uICAgICAgICAgICApLAorCSAgICAgIC5jbGsgICAgICAgICAgIChtY2xrICAgICAgICAgICAgICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgICAgKHJlZ18wWzMxOjI0XSAgICAgICAgKQorICAgICAgICAgICk7CisKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgIHJlZy0xLCByZXNldCB2YWx1ZSA9IDMyJ2hBNTVBX0E1NUEKKy8vICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYXNzaWduICBmdXNlX21oYXJ0aWQgICAgID0gcmVnXzFbMzE6MF07IAorZ2VuZXJpY19yZWdpc3RlciAjKC5XRCg4KSwuUkVTRVRfREVGQVVMVCg4J2g1QSkpIHVfcmVnMV9iZTAgKAorCSAgICAgIC53ZSAgICAgICAgICAgICh7OHtzd193cl9lbl8xICYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cl9iZVswXSAgIH19ICApLAkJIAorCSAgICAgIC5kYXRhX2luICAgICAgIChzd19yZWdfd2RhdGFbNzowXSAgICApLAorCSAgICAgIC5yZXNldF9uICAgICAgIChyZXNldF9uICAgICAgICAgICApLAorCSAgICAgIC5jbGsgICAgICAgICAgIChtY2xrICAgICAgICAgICAgICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgICAgKHJlZ18xWzc6MF0gICAgICAgICkKKyAgICAgICAgICApOworCitnZW5lcmljX3JlZ2lzdGVyICMoLldEKDgpLC5SRVNFVF9ERUZBVUxUKDgnaEE1KSAgKSB1X3JlZzFfYmUxICgKKwkgICAgICAud2UgICAgICAgICAgICAoezh7c3dfd3JfZW5fMSAmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JfYmVbMV0gICB9fSAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAgICAoc3dfcmVnX3dkYXRhWzE1OjhdICAgICksCisJICAgICAgLnJlc2V0X24gICAgICAgKHJlc2V0X24gICAgICAgICAgICksCisJICAgICAgLmNsayAgICAgICAgICAgKG1jbGsgICAgICAgICAgICAgICksCisJICAgICAgCisJICAgICAgLy9MaXN0IG9mIE91dHMKKwkgICAgICAuZGF0YV9vdXQgICAgICAocmVnXzFbMTU6OF0gICAgICAgICkKKyAgICAgICAgICApOworZ2VuZXJpY19yZWdpc3RlciAjKC5XRCg4KSwuUkVTRVRfREVGQVVMVCg4J2g1QSkgICkgdV9yZWcxX2JlMiAoCisJICAgICAgLndlICAgICAgICAgICAgKHs4e3N3X3dyX2VuXzEgJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyX2JlWzJdICAgfX0gICksCQkgCisJICAgICAgLmRhdGFfaW4gICAgICAgKHN3X3JlZ193ZGF0YVsyMzoxNl0gICAgKSwKKwkgICAgICAucmVzZXRfbiAgICAgICAocmVzZXRfbiAgICAgICAgICAgKSwKKwkgICAgICAuY2xrICAgICAgICAgICAobWNsayAgICAgICAgICAgICAgKSwKKwkgICAgICAKKwkgICAgICAvL0xpc3Qgb2YgT3V0cworCSAgICAgIC5kYXRhX291dCAgICAgIChyZWdfMVsyMzoxNl0gICAgICAgICkKKyAgICAgICAgICApOworCitnZW5lcmljX3JlZ2lzdGVyICMoLldEKDgpLC5SRVNFVF9ERUZBVUxUKDgnaEE1KSAgKSB1X3JlZzFfYmUzICgKKwkgICAgICAud2UgICAgICAgICAgICAoezh7c3dfd3JfZW5fMSAmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JfYmVbM10gICB9fSAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAgICAoc3dfcmVnX3dkYXRhWzMxOjI0XSAgICApLAorCSAgICAgIC5yZXNldF9uICAgICAgIChyZXNldF9uICAgICAgICAgICApLAorCSAgICAgIC5jbGsgICAgICAgICAgIChtY2xrICAgICAgICAgICAgICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgICAgKHJlZ18xWzMxOjI0XSAgICAgICAgKQorICAgICAgICAgICk7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICAgcmVnLTIsIHJlc2V0IHZhbHVlID0gMzInaEFBQkJDQ0RECisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2dlbmVyaWNfcmVnaXN0ZXIgIyguV0QoOCksLlJFU0VUX0RFRkFVTFQoOCdoREQpICApIHVfcmVnMl9iZTAgKAorCSAgICAgIC53ZSAgICAgICAgICAgICh7OHtzd193cl9lbl8yICYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cl9iZVswXSAgIH19ICApLAkJIAorCSAgICAgIC5kYXRhX2luICAgICAgIChzd19yZWdfd2RhdGFbNzowXSAgICApLAorCSAgICAgIC5yZXNldF9uICAgICAgIChyZXNldF9uICAgICAgICAgICApLAorCSAgICAgIC5jbGsgICAgICAgICAgIChtY2xrICAgICAgICAgICAgICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgICAgKHJlZ18yWzc6MF0gICAgICAgICkKKyAgICAgICAgICApOworCitnZW5lcmljX3JlZ2lzdGVyICMoLldEKDgpLC5SRVNFVF9ERUZBVUxUKDgnaENDKSAgKSB1X3JlZzJfYmUxICgKKwkgICAgICAud2UgICAgICAgICAgICAoezh7c3dfd3JfZW5fMiAmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JfYmVbMV0gICB9fSAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAgICAoc3dfcmVnX3dkYXRhWzE1OjhdICAgICksCisJICAgICAgLnJlc2V0X24gICAgICAgKHJlc2V0X24gICAgICAgICAgICksCisJICAgICAgLmNsayAgICAgICAgICAgKG1jbGsgICAgICAgICAgICAgICksCisJICAgICAgCisJICAgICAgLy9MaXN0IG9mIE91dHMKKwkgICAgICAuZGF0YV9vdXQgICAgICAocmVnXzJbMTU6OF0gICAgICAgICkKKyAgICAgICAgICApOworZ2VuZXJpY19yZWdpc3RlciAjKC5XRCg4KSwuUkVTRVRfREVGQVVMVCg4J2hCQikgICkgdV9yZWcyX2JlMiAoCisJICAgICAgLndlICAgICAgICAgICAgKHs4e3N3X3dyX2VuXzIgJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyX2JlWzJdICAgfX0gICksCQkgCisJICAgICAgLmRhdGFfaW4gICAgICAgKHN3X3JlZ193ZGF0YVsyMzoxNl0gICAgKSwKKwkgICAgICAucmVzZXRfbiAgICAgICAocmVzZXRfbiAgICAgICAgICAgKSwKKwkgICAgICAuY2xrICAgICAgICAgICAobWNsayAgICAgICAgICAgICAgKSwKKwkgICAgICAKKwkgICAgICAvL0xpc3Qgb2YgT3V0cworCSAgICAgIC5kYXRhX291dCAgICAgIChyZWdfMlsyMzoxNl0gICAgICAgICkKKyAgICAgICAgICApOworCitnZW5lcmljX3JlZ2lzdGVyICMoLldEKDgpLC5SRVNFVF9ERUZBVUxUKDgnaEFBKSAgKSB1X3JlZzJfYmUzICgKKwkgICAgICAud2UgICAgICAgICAgICAoezh7c3dfd3JfZW5fMiAmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JfYmVbM10gICB9fSAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAgICAoc3dfcmVnX3dkYXRhWzMxOjI0XSAgICApLAorCSAgICAgIC5yZXNldF9uICAgICAgIChyZXNldF9uICAgICAgICAgICApLAorCSAgICAgIC5jbGsgICAgICAgICAgIChtY2xrICAgICAgICAgICAgICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgICAgKHJlZ18yWzMxOjI0XSAgICAgICAgKQorICAgICAgICAgICk7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICAgcmVnLTMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2Fzc2lnbiAgaXJxX2xpbmVzICAgICA9IHJlZ18zWzE1OjBdOyAKK2Fzc2lnbiAgc29mdF9pcnEgICAgICA9IHJlZ18zWzE2XTsgCithc3NpZ24gIHVzZXJfaXJxICAgICAgPSByZWdfM1sxOToxN107IAorCitnZW5lcmljX3JlZ2lzdGVyICMoOCwwICApIHVfcmVnM19iZTAgKAorCSAgICAgIC53ZSAgICAgICAgICAgICh7OHtzd193cl9lbl8zICYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cl9iZVswXSAgIH19ICApLAkJIAorCSAgICAgIC5kYXRhX2luICAgICAgIChzd19yZWdfd2RhdGFbNzowXSAgICApLAorCSAgICAgIC5yZXNldF9uICAgICAgIChyZXNldF9uICAgICAgICAgICApLAorCSAgICAgIC5jbGsgICAgICAgICAgIChtY2xrICAgICAgICAgICAgICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgICAgKHJlZ18zWzc6MF0gICAgICAgICkKKyAgICAgICAgICApOworCitnZW5lcmljX3JlZ2lzdGVyICMoOCwwICApIHVfcmVnM19iZTEgKAorCSAgICAgIC53ZSAgICAgICAgICAgICh7OHtzd193cl9lbl8zICYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cl9iZVsxXSAgIH19ICApLAkJIAorCSAgICAgIC5kYXRhX2luICAgICAgIChzd19yZWdfd2RhdGFbMTU6OF0gICAgKSwKKwkgICAgICAucmVzZXRfbiAgICAgICAocmVzZXRfbiAgICAgICAgICAgKSwKKwkgICAgICAuY2xrICAgICAgICAgICAobWNsayAgICAgICAgICAgICAgKSwKKwkgICAgICAKKwkgICAgICAvL0xpc3Qgb2YgT3V0cworCSAgICAgIC5kYXRhX291dCAgICAgIChyZWdfM1sxNTo4XSAgICAgICAgKQorICAgICAgICAgICk7CitnZW5lcmljX3JlZ2lzdGVyICMoNCwwICApIHVfcmVnM19iZTIgKAorCSAgICAgIC53ZSAgICAgICAgICAgICh7NHtzd193cl9lbl8zICYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cl9iZVsyXSAgIH19ICApLAkJIAorCSAgICAgIC5kYXRhX2luICAgICAgIChzd19yZWdfd2RhdGFbMTk6MTZdICAgICksCisJICAgICAgLnJlc2V0X24gICAgICAgKHJlc2V0X24gICAgICAgICAgICksCisJICAgICAgLmNsayAgICAgICAgICAgKG1jbGsgICAgICAgICAgICAgICksCisJICAgICAgCisJICAgICAgLy9MaXN0IG9mIE91dHMKKwkgICAgICAuZGF0YV9vdXQgICAgICAocmVnXzNbMTk6MTZdICAgICAgICApCisgICAgICAgICAgKTsKKworYXNzaWduIHJlZ18zWzMxOjIwXSA9ICcwOworCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICAgcmVnLTQKKy8vICAgcmVjb21tZW5kZWQgRGVmYXVsdCB2YWx1ZToKKy8vICAgMSdiMSwzJ2gzLDInaDMsNCdoMSw0J2g3Jyw0J2gyLDQnaDIsNCdoNiwyJ2IwMSwyJ2IxMCA9IDMyJ2gyRjE3XzIyNjYKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2Fzc2lnbiAgICAgIGNmZ19zZHJfd2lkdGggICAgID0gcmVnXzRbMTowXSA7ICAvLyAyJ2IxMCAvLyAyJ2IwMCAtIDMyIEJpdCBTRFIsIDInYjAxIC0gMTYgQml0IFNEUiwgMidiMXggLSA4IEJpdAorYXNzaWduICAgICAgY2ZnX2NvbGJpdHMgICAgICAgPSByZWdfNFszOjJdIDsgIC8vIDInYjAwIDggQml0IGNvbHVtbiBhZGRyZXNzLCAyJ2IwMSAtICA5IEJpdCBjb2x1bW4gYWRkcmVzcywgCithc3NpZ24gICAgICBjZmdfc2RyX3RyYXNfZCAgICA9IHJlZ180Wzc6NF0gOyAgLy8gNCdoNCAgLy8gQWN0aXZlIHRvIHByZWNoYXJnZSBkZWxheQorYXNzaWduICAgICAgY2ZnX3Nkcl90cnBfZCAgICAgPSByZWdfNFsxMTo4XTsgIC8vIDQnaDIgIC8vIFByZWNoYXJnZSB0byBhY3RpdmUgZGVsYXkKK2Fzc2lnbiAgICAgIGNmZ19zZHJfdHJjZF9kICAgID0gcmVnXzRbMTU6MTJdOyAvLyA0J2gyICAvLyBBY3RpdmUgdG8gUi9XIGRlbGF5Cithc3NpZ24gICAgICBjZmdfc2RyX3RyY2FyX2QgICA9IHJlZ180WzE5OjE2XTsgLy8gNCdoNyAgLy8gQXV0by1yZWZyZXNoIHBlcmlvZAorYXNzaWduICAgICAgY2ZnX3Nkcl90d3JfZCAgICAgPSByZWdfNFsyMzoyMF07IC8vIDQnaDEgIC8vIFdyaXRlIHJlY292ZXJ5IGRlbGF5Cithc3NpZ24gICAgICBjZmdfcmVxX2RlcHRoICAgICA9IHJlZ180WzI1OjI0XTsgLy8gMidoMyAgLy8gTWF4aW11bSBSZXF1ZXN0IGFjY2VwdGVkIGJ5IFNEUkFNIGNvbnRyb2xsZXIKK2Fzc2lnbiAgICAgIGNmZ19zZHJfY2FzICAgICAgID0gcmVnXzRbMjg6MjZdOyAvLyAzJ2gzICAvLyBTRFJBTSBDQVMgTGF0ZW5jeQorYXNzaWduICAgICAgY2ZnX3Nkcl9lbiAgICAgICAgPSByZWdfNFsyOV0gICA7IC8vIDEnYjEgLy8gRW5hYmxlIFNEUkFNIGNvbnRyb2xsZXIKK2Fzc2lnbiAgICAgIHJlZ180WzMwXSAgICAgICAgID0gc2RyX2luaXRfZG9uZSA7IC8vIEluZGljYXRlIFNEUkFNIEluaXRpYWxpc2F0aW9uIERvbmUKK2Fzc2lnbiAgICAgIHJlZ180WzMxXSAgICAgICAgID0gMSdiMDsKKworCitnZW5lcmljX3JlZ2lzdGVyICMoOCwwICApIHVfcmVnNF9iZTAgKAorCSAgICAgIC53ZSAgICAgICAgICAgICh7OHtzd193cl9lbl80ICYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cl9iZVswXSAgIH19ICApLAkJIAorCSAgICAgIC5kYXRhX2luICAgICAgIChzd19yZWdfd2RhdGFbNzowXSAgICApLAorCSAgICAgIC5yZXNldF9uICAgICAgIChyZXNldF9uICAgICAgICAgICApLAorCSAgICAgIC5jbGsgICAgICAgICAgIChtY2xrICAgICAgICAgICAgICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgICAgKHJlZ180Wzc6MF0gICAgICAgICkKKyAgICAgICAgICApOworCitnZW5lcmljX3JlZ2lzdGVyICMoOCwwICApIHVfcmVnNF9iZTEgKAorCSAgICAgIC53ZSAgICAgICAgICAgICh7OHtzd193cl9lbl80ICYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cl9iZVsxXSAgIH19ICApLAkJIAorCSAgICAgIC5kYXRhX2luICAgICAgIChzd19yZWdfd2RhdGFbMTU6OF0gICAgKSwKKwkgICAgICAucmVzZXRfbiAgICAgICAocmVzZXRfbiAgICAgICAgICAgKSwKKwkgICAgICAuY2xrICAgICAgICAgICAobWNsayAgICAgICAgICAgICAgKSwKKwkgICAgICAKKwkgICAgICAvL0xpc3Qgb2YgT3V0cworCSAgICAgIC5kYXRhX291dCAgICAgIChyZWdfNFsxNTo4XSAgICAgICAgKQorICAgICAgICAgICk7CitnZW5lcmljX3JlZ2lzdGVyICMoOCwwICApIHVfcmVnNF9iZTIgKAorCSAgICAgIC53ZSAgICAgICAgICAgICh7OHtzd193cl9lbl80ICYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cl9iZVsyXSAgIH19ICApLAkJIAorCSAgICAgIC5kYXRhX2luICAgICAgIChzd19yZWdfd2RhdGFbMjM6MTZdICAgICksCisJICAgICAgLnJlc2V0X24gICAgICAgKHJlc2V0X24gICAgICAgICAgICksCisJICAgICAgLmNsayAgICAgICAgICAgKG1jbGsgICAgICAgICAgICAgICksCisJICAgICAgCisJICAgICAgLy9MaXN0IG9mIE91dHMKKwkgICAgICAuZGF0YV9vdXQgICAgICAocmVnXzRbMjM6MTZdICAgICAgICApCisgICAgICAgICAgKTsKKworZ2VuZXJpY19yZWdpc3RlciAjKDYsMCAgKSB1X3JlZzRfYmUzICgKKwkgICAgICAud2UgICAgICAgICAgICAoezZ7c3dfd3JfZW5fNCAmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JfYmVbM10gICB9fSAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAgICAoc3dfcmVnX3dkYXRhWzI5OjI0XSAgICApLAorCSAgICAgIC5yZXNldF9uICAgICAgIChyZXNldF9uICAgICAgICAgICApLAorCSAgICAgIC5jbGsgICAgICAgICAgIChtY2xrICAgICAgICAgICAgICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgICAgKHJlZ180WzI5OjI0XSAgICAgICAgKQorICAgICAgICAgICk7CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgIHJlZy01LCByZWNvbWVuZGVkIGRlZmF1bHQgdmFsdWUgezEyJ2gxMDAsMTMnaDMzLDMnaDZ9ID0gMzInaDEwMF8wMTlFCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCithc3NpZ24gICAgICBjZmdfc2RyX3JmbWF4ICAgICA9IHJlZ181WzI6MF0gOyAgIC8vIDMnaDYKK2Fzc2lnbiAgICAgIGNmZ19zZHJfbW9kZV9yZWcgID0gcmVnXzVbMTU6M10gOyAgLy8gMTMnaDAzMworYXNzaWduICAgICAgY2ZnX3Nkcl9yZnNoICAgICAgPSByZWdfNVsyNzoxNl07ICAvLyAxMidoMTAwCisKK2dlbmVyaWNfcmVnaXN0ZXIgIyg4LDAgICkgdV9yZWc1X2JlMCAoCisJICAgICAgLndlICAgICAgICAgICAgKHs4e3N3X3dyX2VuXzUgJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyX2JlWzBdICAgfX0gICksCQkgCisJICAgICAgLmRhdGFfaW4gICAgICAgKHN3X3JlZ193ZGF0YVs3OjBdICAgICksCisJICAgICAgLnJlc2V0X24gICAgICAgKHJlc2V0X24gICAgICAgICAgICksCisJICAgICAgLmNsayAgICAgICAgICAgKG1jbGsgICAgICAgICAgICAgICksCisJICAgICAgCisJICAgICAgLy9MaXN0IG9mIE91dHMKKwkgICAgICAuZGF0YV9vdXQgICAgICAocmVnXzVbNzowXSAgICAgICAgKQorICAgICAgICAgICk7CisKK2dlbmVyaWNfcmVnaXN0ZXIgIyg4LDAgICkgdV9yZWc1X2JlMSAoCisJICAgICAgLndlICAgICAgICAgICAgKHs4e3N3X3dyX2VuXzUgJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyX2JlWzFdICAgfX0gICksCQkgCisJICAgICAgLmRhdGFfaW4gICAgICAgKHN3X3JlZ193ZGF0YVsxNTo4XSAgICApLAorCSAgICAgIC5yZXNldF9uICAgICAgIChyZXNldF9uICAgICAgICAgICApLAorCSAgICAgIC5jbGsgICAgICAgICAgIChtY2xrICAgICAgICAgICAgICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgICAgKHJlZ181WzE1OjhdICAgICAgICApCisgICAgICAgICAgKTsKK2dlbmVyaWNfcmVnaXN0ZXIgIyg4LDAgICkgdV9yZWc1X2JlMiAoCisJICAgICAgLndlICAgICAgICAgICAgKHs4e3N3X3dyX2VuXzUgJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyX2JlWzJdICAgfX0gICksCQkgCisJICAgICAgLmRhdGFfaW4gICAgICAgKHN3X3JlZ193ZGF0YVsyMzoxNl0gICAgKSwKKwkgICAgICAucmVzZXRfbiAgICAgICAocmVzZXRfbiAgICAgICAgICAgKSwKKwkgICAgICAuY2xrICAgICAgICAgICAobWNsayAgICAgICAgICAgICAgKSwKKwkgICAgICAKKwkgICAgICAvL0xpc3Qgb2YgT3V0cworCSAgICAgIC5kYXRhX291dCAgICAgIChyZWdfNVsyMzoxNl0gICAgICAgICkKKyAgICAgICAgICApOworCitnZW5lcmljX3JlZ2lzdGVyICMoOCwwICApIHVfcmVnNV9iZTMgKAorCSAgICAgIC53ZSAgICAgICAgICAgICh7OHtzd193cl9lbl81ICYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cl9iZVszXSAgIH19ICApLAkJIAorCSAgICAgIC5kYXRhX2luICAgICAgIChzd19yZWdfd2RhdGFbMzE6MjRdICAgICksCisJICAgICAgLnJlc2V0X24gICAgICAgKHJlc2V0X24gICAgICAgICAgICksCisJICAgICAgLmNsayAgICAgICAgICAgKG1jbGsgICAgICAgICAgICAgICksCisJICAgICAgCisJICAgICAgLy9MaXN0IG9mIE91dHMKKwkgICAgICAuZGF0YV9vdXQgICAgICAocmVnXzVbMzE6MjRdICAgICAgICApCisgICAgICAgICAgKTsKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgIHJlZy0gNgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitnZW5lcmljX3JlZ2lzdGVyICMoOCwwICApIHVfcmVnNl9iZTAgKAorCSAgICAgIC53ZSAgICAgICAgICAgICh7OHtzd193cl9lbl82ICYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cl9iZVswXSAgIH19ICApLAkJIAorCSAgICAgIC5kYXRhX2luICAgICAgIChzd19yZWdfd2RhdGFbNzowXSAgICApLAorCSAgICAgIC5yZXNldF9uICAgICAgIChyZXNldF9uICAgICAgICAgICApLAorCSAgICAgIC5jbGsgICAgICAgICAgIChtY2xrICAgICAgICAgICAgICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgICAgKHJlZ182Wzc6MF0gICAgICAgICkKKyAgICAgICAgICApOworCitnZW5lcmljX3JlZ2lzdGVyICMoOCwwICApIHVfcmVnNl9iZTEgKAorCSAgICAgIC53ZSAgICAgICAgICAgICh7OHtzd193cl9lbl82ICYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cl9iZVsxXSAgIH19ICApLAkJIAorCSAgICAgIC5kYXRhX2luICAgICAgIChzd19yZWdfd2RhdGFbMTU6OF0gICAgKSwKKwkgICAgICAucmVzZXRfbiAgICAgICAocmVzZXRfbiAgICAgICAgICAgKSwKKwkgICAgICAuY2xrICAgICAgICAgICAobWNsayAgICAgICAgICAgICAgKSwKKwkgICAgICAKKwkgICAgICAvL0xpc3Qgb2YgT3V0cworCSAgICAgIC5kYXRhX291dCAgICAgIChyZWdfNlsxNTo4XSAgICAgICAgKQorICAgICAgICAgICk7CitnZW5lcmljX3JlZ2lzdGVyICMoOCwwICApIHVfcmVnNl9iZTIgKAorCSAgICAgIC53ZSAgICAgICAgICAgICh7OHtzd193cl9lbl82ICYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cl9iZVsyXSAgIH19ICApLAkJIAorCSAgICAgIC5kYXRhX2luICAgICAgIChzd19yZWdfd2RhdGFbMjM6MTZdICAgICksCisJICAgICAgLnJlc2V0X24gICAgICAgKHJlc2V0X24gICAgICAgICAgICksCisJICAgICAgLmNsayAgICAgICAgICAgKG1jbGsgICAgICAgICAgICAgICksCisJICAgICAgCisJICAgICAgLy9MaXN0IG9mIE91dHMKKwkgICAgICAuZGF0YV9vdXQgICAgICAocmVnXzZbMjM6MTZdICAgICAgICApCisgICAgICAgICAgKTsKKworZ2VuZXJpY19yZWdpc3RlciAjKDgsMCAgKSB1X3JlZzZfYmUzICgKKwkgICAgICAud2UgICAgICAgICAgICAoezh7c3dfd3JfZW5fNiAmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JfYmVbM10gICB9fSAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAgICAoc3dfcmVnX3dkYXRhWzMxOjI0XSAgICApLAorCSAgICAgIC5yZXNldF9uICAgICAgIChyZXNldF9uICAgICAgICAgICApLAorCSAgICAgIC5jbGsgICAgICAgICAgIChtY2xrICAgICAgICAgICAgICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgICAgKHJlZ182WzMxOjI0XSAgICAgICAgKQorICAgICAgICAgICk7CisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gICByZWctIDcKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZ2VuZXJpY19yZWdpc3RlciAjKDgsMCAgKSB1X3JlZzdfYmUwICgKKwkgICAgICAud2UgICAgICAgICAgICAoezh7c3dfd3JfZW5fNyAmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JfYmVbMF0gICB9fSAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAgICAoc3dfcmVnX3dkYXRhWzc6MF0gICAgKSwKKwkgICAgICAucmVzZXRfbiAgICAgICAocmVzZXRfbiAgICAgICAgICAgKSwKKwkgICAgICAuY2xrICAgICAgICAgICAobWNsayAgICAgICAgICAgICAgKSwKKwkgICAgICAKKwkgICAgICAvL0xpc3Qgb2YgT3V0cworCSAgICAgIC5kYXRhX291dCAgICAgIChyZWdfN1s3OjBdICAgICAgICApCisgICAgICAgICAgKTsKKworZ2VuZXJpY19yZWdpc3RlciAjKDgsMCAgKSB1X3JlZzdfYmUxICgKKwkgICAgICAud2UgICAgICAgICAgICAoezh7c3dfd3JfZW5fNyAmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JfYmVbMV0gICB9fSAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAgICAoc3dfcmVnX3dkYXRhWzE1OjhdICAgICksCisJICAgICAgLnJlc2V0X24gICAgICAgKHJlc2V0X24gICAgICAgICAgICksCisJICAgICAgLmNsayAgICAgICAgICAgKG1jbGsgICAgICAgICAgICAgICksCisJICAgICAgCisJICAgICAgLy9MaXN0IG9mIE91dHMKKwkgICAgICAuZGF0YV9vdXQgICAgICAocmVnXzdbMTU6OF0gICAgICAgICkKKyAgICAgICAgICApOworZ2VuZXJpY19yZWdpc3RlciAjKDgsMCAgKSB1X3JlZzdfYmUyICgKKwkgICAgICAud2UgICAgICAgICAgICAoezh7c3dfd3JfZW5fNyAmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JfYmVbMl0gICB9fSAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAgICAoc3dfcmVnX3dkYXRhWzIzOjE2XSAgICApLAorCSAgICAgIC5yZXNldF9uICAgICAgIChyZXNldF9uICAgICAgICAgICApLAorCSAgICAgIC5jbGsgICAgICAgICAgIChtY2xrICAgICAgICAgICAgICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgICAgKHJlZ183WzIzOjE2XSAgICAgICAgKQorICAgICAgICAgICk7CisKK2dlbmVyaWNfcmVnaXN0ZXIgIyg4LDAgICkgdV9yZWc3X2JlMyAoCisJICAgICAgLndlICAgICAgICAgICAgKHs4e3N3X3dyX2VuXzcgJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyX2JlWzNdICAgfX0gICksCQkgCisJICAgICAgLmRhdGFfaW4gICAgICAgKHN3X3JlZ193ZGF0YVszMToyNF0gICAgKSwKKwkgICAgICAucmVzZXRfbiAgICAgICAocmVzZXRfbiAgICAgICAgICAgKSwKKwkgICAgICAuY2xrICAgICAgICAgICAobWNsayAgICAgICAgICAgICAgKSwKKwkgICAgICAKKwkgICAgICAvL0xpc3Qgb2YgT3V0cworCSAgICAgIC5kYXRhX291dCAgICAgIChyZWdfN1szMToyNF0gICAgICAgICkKKyAgICAgICAgICApOworCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICAgcmVnLSA4CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2dlbmVyaWNfcmVnaXN0ZXIgIyg4LDAgICkgdV9yZWc4X2JlMCAoCisJICAgICAgLndlICAgICAgICAgICAgKHs4e3N3X3dyX2VuXzggJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyX2JlWzBdICAgfX0gICksCQkgCisJICAgICAgLmRhdGFfaW4gICAgICAgKHN3X3JlZ193ZGF0YVs3OjBdICAgICksCisJICAgICAgLnJlc2V0X24gICAgICAgKHJlc2V0X24gICAgICAgICAgICksCisJICAgICAgLmNsayAgICAgICAgICAgKG1jbGsgICAgICAgICAgICAgICksCisJICAgICAgCisJICAgICAgLy9MaXN0IG9mIE91dHMKKwkgICAgICAuZGF0YV9vdXQgICAgICAocmVnXzhbNzowXSAgICAgICAgKQorICAgICAgICAgICk7CisKK2dlbmVyaWNfcmVnaXN0ZXIgIyg4LDAgICkgdV9yZWc4X2JlMSAoCisJICAgICAgLndlICAgICAgICAgICAgKHs4e3N3X3dyX2VuXzggJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyX2JlWzFdICAgfX0gICksCQkgCisJICAgICAgLmRhdGFfaW4gICAgICAgKHN3X3JlZ193ZGF0YVsxNTo4XSAgICApLAorCSAgICAgIC5yZXNldF9uICAgICAgIChyZXNldF9uICAgICAgICAgICApLAorCSAgICAgIC5jbGsgICAgICAgICAgIChtY2xrICAgICAgICAgICAgICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgICAgKHJlZ184WzE1OjhdICAgICAgICApCisgICAgICAgICAgKTsKK2dlbmVyaWNfcmVnaXN0ZXIgIyg4LDAgICkgdV9yZWc4X2JlMiAoCisJICAgICAgLndlICAgICAgICAgICAgKHs4e3N3X3dyX2VuXzggJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyX2JlWzJdICAgfX0gICksCQkgCisJICAgICAgLmRhdGFfaW4gICAgICAgKHN3X3JlZ193ZGF0YVsyMzoxNl0gICAgKSwKKwkgICAgICAucmVzZXRfbiAgICAgICAocmVzZXRfbiAgICAgICAgICAgKSwKKwkgICAgICAuY2xrICAgICAgICAgICAobWNsayAgICAgICAgICAgICAgKSwKKwkgICAgICAKKwkgICAgICAvL0xpc3Qgb2YgT3V0cworCSAgICAgIC5kYXRhX291dCAgICAgIChyZWdfOFsyMzoxNl0gICAgICAgICkKKyAgICAgICAgICApOworCitnZW5lcmljX3JlZ2lzdGVyICMoOCwwICApIHVfcmVnOF9iZTMgKAorCSAgICAgIC53ZSAgICAgICAgICAgICh7OHtzd193cl9lbl84ICYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cl9iZVszXSAgIH19ICApLAkJIAorCSAgICAgIC5kYXRhX2luICAgICAgIChzd19yZWdfd2RhdGFbMzE6MjRdICAgICksCisJICAgICAgLnJlc2V0X24gICAgICAgKHJlc2V0X24gICAgICAgICAgICksCisJICAgICAgLmNsayAgICAgICAgICAgKG1jbGsgICAgICAgICAgICAgICksCisJICAgICAgCisJICAgICAgLy9MaXN0IG9mIE91dHMKKwkgICAgICAuZGF0YV9vdXQgICAgICAocmVnXzhbMzE6MjRdICAgICAgICApCisgICAgICAgICAgKTsKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgIHJlZy0gOQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitnZW5lcmljX3JlZ2lzdGVyICMoOCwwICApIHVfcmVnOV9iZTAgKAorCSAgICAgIC53ZSAgICAgICAgICAgICh7OHtzd193cl9lbl85ICYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cl9iZVswXSAgIH19ICApLAkJIAorCSAgICAgIC5kYXRhX2luICAgICAgIChzd19yZWdfd2RhdGFbNzowXSAgICApLAorCSAgICAgIC5yZXNldF9uICAgICAgIChyZXNldF9uICAgICAgICAgICApLAorCSAgICAgIC5jbGsgICAgICAgICAgIChtY2xrICAgICAgICAgICAgICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgICAgKHJlZ185Wzc6MF0gICAgICAgICkKKyAgICAgICAgICApOworCitnZW5lcmljX3JlZ2lzdGVyICMoOCwwICApIHVfcmVnOV9iZTEgKAorCSAgICAgIC53ZSAgICAgICAgICAgICh7OHtzd193cl9lbl85ICYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cl9iZVsxXSAgIH19ICApLAkJIAorCSAgICAgIC5kYXRhX2luICAgICAgIChzd19yZWdfd2RhdGFbMTU6OF0gICAgKSwKKwkgICAgICAucmVzZXRfbiAgICAgICAocmVzZXRfbiAgICAgICAgICAgKSwKKwkgICAgICAuY2xrICAgICAgICAgICAobWNsayAgICAgICAgICAgICAgKSwKKwkgICAgICAKKwkgICAgICAvL0xpc3Qgb2YgT3V0cworCSAgICAgIC5kYXRhX291dCAgICAgIChyZWdfOVsxNTo4XSAgICAgICAgKQorICAgICAgICAgICk7CitnZW5lcmljX3JlZ2lzdGVyICMoOCwwICApIHVfcmVnOV9iZTIgKAorCSAgICAgIC53ZSAgICAgICAgICAgICh7OHtzd193cl9lbl85ICYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cl9iZVsyXSAgIH19ICApLAkJIAorCSAgICAgIC5kYXRhX2luICAgICAgIChzd19yZWdfd2RhdGFbMjM6MTZdICAgICksCisJICAgICAgLnJlc2V0X24gICAgICAgKHJlc2V0X24gICAgICAgICAgICksCisJICAgICAgLmNsayAgICAgICAgICAgKG1jbGsgICAgICAgICAgICAgICksCisJICAgICAgCisJICAgICAgLy9MaXN0IG9mIE91dHMKKwkgICAgICAuZGF0YV9vdXQgICAgICAocmVnXzlbMjM6MTZdICAgICAgICApCisgICAgICAgICAgKTsKKworZ2VuZXJpY19yZWdpc3RlciAjKDgsMCAgKSB1X3JlZzlfYmUzICgKKwkgICAgICAud2UgICAgICAgICAgICAoezh7c3dfd3JfZW5fOSAmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JfYmVbM10gICB9fSAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAgICAoc3dfcmVnX3dkYXRhWzMxOjI0XSAgICApLAorCSAgICAgIC5yZXNldF9uICAgICAgIChyZXNldF9uICAgICAgICAgICApLAorCSAgICAgIC5jbGsgICAgICAgICAgIChtY2xrICAgICAgICAgICAgICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgICAgKHJlZ185WzMxOjI0XSAgICAgICAgKQorICAgICAgICAgICk7CisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gICByZWctIDEwCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2dlbmVyaWNfcmVnaXN0ZXIgIyg4LDAgICkgdV9yZWcxMF9iZTAgKAorCSAgICAgIC53ZSAgICAgICAgICAgICh7OHtzd193cl9lbl8xMCAmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JfYmVbMF0gICB9fSAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAgICAoc3dfcmVnX3dkYXRhWzc6MF0gICAgKSwKKwkgICAgICAucmVzZXRfbiAgICAgICAocmVzZXRfbiAgICAgICAgICAgKSwKKwkgICAgICAuY2xrICAgICAgICAgICAobWNsayAgICAgICAgICAgICAgKSwKKwkgICAgICAKKwkgICAgICAvL0xpc3Qgb2YgT3V0cworCSAgICAgIC5kYXRhX291dCAgICAgIChyZWdfMTBbNzowXSAgICAgICAgKQorICAgICAgICAgICk7CisKK2dlbmVyaWNfcmVnaXN0ZXIgIyg4LDAgICkgdV9yZWcxMF9iZTEgKAorCSAgICAgIC53ZSAgICAgICAgICAgICh7OHtzd193cl9lbl8xMCAmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JfYmVbMV0gICB9fSAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAgICAoc3dfcmVnX3dkYXRhWzE1OjhdICAgICksCisJICAgICAgLnJlc2V0X24gICAgICAgKHJlc2V0X24gICAgICAgICAgICksCisJICAgICAgLmNsayAgICAgICAgICAgKG1jbGsgICAgICAgICAgICAgICksCisJICAgICAgCisJICAgICAgLy9MaXN0IG9mIE91dHMKKwkgICAgICAuZGF0YV9vdXQgICAgICAocmVnXzEwWzE1OjhdICAgICAgICApCisgICAgICAgICAgKTsKK2dlbmVyaWNfcmVnaXN0ZXIgIyg4LDAgICkgdV9yZWcxMF9iZTIgKAorCSAgICAgIC53ZSAgICAgICAgICAgICh7OHtzd193cl9lbl8xMCAmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JfYmVbMl0gICB9fSAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAgICAoc3dfcmVnX3dkYXRhWzIzOjE2XSAgICApLAorCSAgICAgIC5yZXNldF9uICAgICAgIChyZXNldF9uICAgICAgICAgICApLAorCSAgICAgIC5jbGsgICAgICAgICAgIChtY2xrICAgICAgICAgICAgICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgICAgKHJlZ18xMFsyMzoxNl0gICAgICAgICkKKyAgICAgICAgICApOworCitnZW5lcmljX3JlZ2lzdGVyICMoOCwwICApIHVfcmVnMTBfYmUzICgKKwkgICAgICAud2UgICAgICAgICAgICAoezh7c3dfd3JfZW5fMTAgJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyX2JlWzNdICAgfX0gICksCQkgCisJICAgICAgLmRhdGFfaW4gICAgICAgKHN3X3JlZ193ZGF0YVszMToyNF0gICAgKSwKKwkgICAgICAucmVzZXRfbiAgICAgICAocmVzZXRfbiAgICAgICAgICAgKSwKKwkgICAgICAuY2xrICAgICAgICAgICAobWNsayAgICAgICAgICAgICAgKSwKKwkgICAgICAKKwkgICAgICAvL0xpc3Qgb2YgT3V0cworCSAgICAgIC5kYXRhX291dCAgICAgIChyZWdfMTBbMzE6MjRdICAgICAgICApCisgICAgICAgICAgKTsKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgIHJlZy0gMTEKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZ2VuZXJpY19yZWdpc3RlciAjKDgsMCAgKSB1X3JlZzExX2JlMCAoCisJICAgICAgLndlICAgICAgICAgICAgKHs4e3N3X3dyX2VuXzExICYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cl9iZVswXSAgIH19ICApLAkJIAorCSAgICAgIC5kYXRhX2luICAgICAgIChzd19yZWdfd2RhdGFbNzowXSAgICApLAorCSAgICAgIC5yZXNldF9uICAgICAgIChyZXNldF9uICAgICAgICAgICApLAorCSAgICAgIC5jbGsgICAgICAgICAgIChtY2xrICAgICAgICAgICAgICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgICAgKHJlZ18xMVs3OjBdICAgICAgICApCisgICAgICAgICAgKTsKKworZ2VuZXJpY19yZWdpc3RlciAjKDgsMCAgKSB1X3JlZzExX2JlMSAoCisJICAgICAgLndlICAgICAgICAgICAgKHs4e3N3X3dyX2VuXzExICYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cl9iZVsxXSAgIH19ICApLAkJIAorCSAgICAgIC5kYXRhX2luICAgICAgIChzd19yZWdfd2RhdGFbMTU6OF0gICAgKSwKKwkgICAgICAucmVzZXRfbiAgICAgICAocmVzZXRfbiAgICAgICAgICAgKSwKKwkgICAgICAuY2xrICAgICAgICAgICAobWNsayAgICAgICAgICAgICAgKSwKKwkgICAgICAKKwkgICAgICAvL0xpc3Qgb2YgT3V0cworCSAgICAgIC5kYXRhX291dCAgICAgIChyZWdfMTFbMTU6OF0gICAgICAgICkKKyAgICAgICAgICApOworZ2VuZXJpY19yZWdpc3RlciAjKDgsMCAgKSB1X3JlZzExX2JlMiAoCisJICAgICAgLndlICAgICAgICAgICAgKHs4e3N3X3dyX2VuXzExICYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cl9iZVsyXSAgIH19ICApLAkJIAorCSAgICAgIC5kYXRhX2luICAgICAgIChzd19yZWdfd2RhdGFbMjM6MTZdICAgICksCisJICAgICAgLnJlc2V0X24gICAgICAgKHJlc2V0X24gICAgICAgICAgICksCisJICAgICAgLmNsayAgICAgICAgICAgKG1jbGsgICAgICAgICAgICAgICksCisJICAgICAgCisJICAgICAgLy9MaXN0IG9mIE91dHMKKwkgICAgICAuZGF0YV9vdXQgICAgICAocmVnXzExWzIzOjE2XSAgICAgICAgKQorICAgICAgICAgICk7CisKK2dlbmVyaWNfcmVnaXN0ZXIgIyg4LDAgICkgdV9yZWcxMV9iZTMgKAorCSAgICAgIC53ZSAgICAgICAgICAgICh7OHtzd193cl9lbl8xMSAmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JfYmVbM10gICB9fSAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAgICAoc3dfcmVnX3dkYXRhWzMxOjI0XSAgICApLAorCSAgICAgIC5yZXNldF9uICAgICAgIChyZXNldF9uICAgICAgICAgICApLAorCSAgICAgIC5jbGsgICAgICAgICAgIChtY2xrICAgICAgICAgICAgICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgICAgKHJlZ18xMVszMToyNF0gICAgICAgICkKKyAgICAgICAgICApOworCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICAgcmVnLSAxMgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitnZW5lcmljX3JlZ2lzdGVyICMoOCwwICApIHVfcmVnMTJfYmUwICgKKwkgICAgICAud2UgICAgICAgICAgICAoezh7c3dfd3JfZW5fMTIgJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyX2JlWzBdICAgfX0gICksCQkgCisJICAgICAgLmRhdGFfaW4gICAgICAgKHN3X3JlZ193ZGF0YVs3OjBdICAgICksCisJICAgICAgLnJlc2V0X24gICAgICAgKHJlc2V0X24gICAgICAgICAgICksCisJICAgICAgLmNsayAgICAgICAgICAgKG1jbGsgICAgICAgICAgICAgICksCisJICAgICAgCisJICAgICAgLy9MaXN0IG9mIE91dHMKKwkgICAgICAuZGF0YV9vdXQgICAgICAocmVnXzEyWzc6MF0gICAgICAgICkKKyAgICAgICAgICApOworCitnZW5lcmljX3JlZ2lzdGVyICMoOCwwICApIHVfcmVnMTJfYmUxICgKKwkgICAgICAud2UgICAgICAgICAgICAoezh7c3dfd3JfZW5fMTIgJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyX2JlWzFdICAgfX0gICksCQkgCisJICAgICAgLmRhdGFfaW4gICAgICAgKHN3X3JlZ193ZGF0YVsxNTo4XSAgICApLAorCSAgICAgIC5yZXNldF9uICAgICAgIChyZXNldF9uICAgICAgICAgICApLAorCSAgICAgIC5jbGsgICAgICAgICAgIChtY2xrICAgICAgICAgICAgICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgICAgKHJlZ18xMlsxNTo4XSAgICAgICAgKQorICAgICAgICAgICk7CitnZW5lcmljX3JlZ2lzdGVyICMoOCwwICApIHVfcmVnMTJfYmUyICgKKwkgICAgICAud2UgICAgICAgICAgICAoezh7c3dfd3JfZW5fMTIgJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyX2JlWzJdICAgfX0gICksCQkgCisJICAgICAgLmRhdGFfaW4gICAgICAgKHN3X3JlZ193ZGF0YVsyMzoxNl0gICAgKSwKKwkgICAgICAucmVzZXRfbiAgICAgICAocmVzZXRfbiAgICAgICAgICAgKSwKKwkgICAgICAuY2xrICAgICAgICAgICAobWNsayAgICAgICAgICAgICAgKSwKKwkgICAgICAKKwkgICAgICAvL0xpc3Qgb2YgT3V0cworCSAgICAgIC5kYXRhX291dCAgICAgIChyZWdfMTJbMjM6MTZdICAgICAgICApCisgICAgICAgICAgKTsKKworZ2VuZXJpY19yZWdpc3RlciAjKDgsMCAgKSB1X3JlZzEyX2JlMyAoCisJICAgICAgLndlICAgICAgICAgICAgKHs4e3N3X3dyX2VuXzEyICYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cl9iZVszXSAgIH19ICApLAkJIAorCSAgICAgIC5kYXRhX2luICAgICAgIChzd19yZWdfd2RhdGFbMzE6MjRdICAgICksCisJICAgICAgLnJlc2V0X24gICAgICAgKHJlc2V0X24gICAgICAgICAgICksCisJICAgICAgLmNsayAgICAgICAgICAgKG1jbGsgICAgICAgICAgICAgICksCisJICAgICAgCisJICAgICAgLy9MaXN0IG9mIE91dHMKKwkgICAgICAuZGF0YV9vdXQgICAgICAocmVnXzEyWzMxOjI0XSAgICAgICAgKQorICAgICAgICAgICk7CisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gICByZWctIDEzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2dlbmVyaWNfcmVnaXN0ZXIgIyg4LDAgICkgdV9yZWcxM19iZTAgKAorCSAgICAgIC53ZSAgICAgICAgICAgICh7OHtzd193cl9lbl8xMyAmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JfYmVbMF0gICB9fSAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAgICAoc3dfcmVnX3dkYXRhWzc6MF0gICAgKSwKKwkgICAgICAucmVzZXRfbiAgICAgICAocmVzZXRfbiAgICAgICAgICAgKSwKKwkgICAgICAuY2xrICAgICAgICAgICAobWNsayAgICAgICAgICAgICAgKSwKKwkgICAgICAKKwkgICAgICAvL0xpc3Qgb2YgT3V0cworCSAgICAgIC5kYXRhX291dCAgICAgIChyZWdfMTNbNzowXSAgICAgICAgKQorICAgICAgICAgICk7CisKK2dlbmVyaWNfcmVnaXN0ZXIgIyg4LDAgICkgdV9yZWcxM19iZTEgKAorCSAgICAgIC53ZSAgICAgICAgICAgICh7OHtzd193cl9lbl8xMyAmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JfYmVbMV0gICB9fSAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAgICAoc3dfcmVnX3dkYXRhWzE1OjhdICAgICksCisJICAgICAgLnJlc2V0X24gICAgICAgKHJlc2V0X24gICAgICAgICAgICksCisJICAgICAgLmNsayAgICAgICAgICAgKG1jbGsgICAgICAgICAgICAgICksCisJICAgICAgCisJICAgICAgLy9MaXN0IG9mIE91dHMKKwkgICAgICAuZGF0YV9vdXQgICAgICAocmVnXzEzWzE1OjhdICAgICAgICApCisgICAgICAgICAgKTsKK2dlbmVyaWNfcmVnaXN0ZXIgIyg4LDAgICkgdV9yZWcxM19iZTIgKAorCSAgICAgIC53ZSAgICAgICAgICAgICh7OHtzd193cl9lbl8xMyAmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JfYmVbMl0gICB9fSAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAgICAoc3dfcmVnX3dkYXRhWzIzOjE2XSAgICApLAorCSAgICAgIC5yZXNldF9uICAgICAgIChyZXNldF9uICAgICAgICAgICApLAorCSAgICAgIC5jbGsgICAgICAgICAgIChtY2xrICAgICAgICAgICAgICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgICAgKHJlZ18xM1syMzoxNl0gICAgICAgICkKKyAgICAgICAgICApOworCitnZW5lcmljX3JlZ2lzdGVyICMoOCwwICApIHVfcmVnMTNfYmUzICgKKwkgICAgICAud2UgICAgICAgICAgICAoezh7c3dfd3JfZW5fMTMgJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyX2JlWzNdICAgfX0gICksCQkgCisJICAgICAgLmRhdGFfaW4gICAgICAgKHN3X3JlZ193ZGF0YVszMToyNF0gICAgKSwKKwkgICAgICAucmVzZXRfbiAgICAgICAocmVzZXRfbiAgICAgICAgICAgKSwKKwkgICAgICAuY2xrICAgICAgICAgICAobWNsayAgICAgICAgICAgICAgKSwKKwkgICAgICAKKwkgICAgICAvL0xpc3Qgb2YgT3V0cworCSAgICAgIC5kYXRhX291dCAgICAgIChyZWdfMTNbMzE6MjRdICAgICAgICApCisgICAgICAgICAgKTsKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgIHJlZy0gMTQKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZ2VuZXJpY19yZWdpc3RlciAjKDgsMCAgKSB1X3JlZzE0X2JlMCAoCisJICAgICAgLndlICAgICAgICAgICAgKHs4e3N3X3dyX2VuXzE0ICYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cl9iZVswXSAgIH19ICApLAkJIAorCSAgICAgIC5kYXRhX2luICAgICAgIChzd19yZWdfd2RhdGFbNzowXSAgICApLAorCSAgICAgIC5yZXNldF9uICAgICAgIChyZXNldF9uICAgICAgICAgICApLAorCSAgICAgIC5jbGsgICAgICAgICAgIChtY2xrICAgICAgICAgICAgICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgICAgKHJlZ18xNFs3OjBdICAgICAgICApCisgICAgICAgICAgKTsKKworZ2VuZXJpY19yZWdpc3RlciAjKDgsMCAgKSB1X3JlZzE0X2JlMSAoCisJICAgICAgLndlICAgICAgICAgICAgKHs4e3N3X3dyX2VuXzE0ICYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cl9iZVsxXSAgIH19ICApLAkJIAorCSAgICAgIC5kYXRhX2luICAgICAgIChzd19yZWdfd2RhdGFbMTU6OF0gICAgKSwKKwkgICAgICAucmVzZXRfbiAgICAgICAocmVzZXRfbiAgICAgICAgICAgKSwKKwkgICAgICAuY2xrICAgICAgICAgICAobWNsayAgICAgICAgICAgICAgKSwKKwkgICAgICAKKwkgICAgICAvL0xpc3Qgb2YgT3V0cworCSAgICAgIC5kYXRhX291dCAgICAgIChyZWdfMTRbMTU6OF0gICAgICAgICkKKyAgICAgICAgICApOworZ2VuZXJpY19yZWdpc3RlciAjKDgsMCAgKSB1X3JlZzE0X2JlMiAoCisJICAgICAgLndlICAgICAgICAgICAgKHs4e3N3X3dyX2VuXzE0ICYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cl9iZVsyXSAgIH19ICApLAkJIAorCSAgICAgIC5kYXRhX2luICAgICAgIChzd19yZWdfd2RhdGFbMjM6MTZdICAgICksCisJICAgICAgLnJlc2V0X24gICAgICAgKHJlc2V0X24gICAgICAgICAgICksCisJICAgICAgLmNsayAgICAgICAgICAgKG1jbGsgICAgICAgICAgICAgICksCisJICAgICAgCisJICAgICAgLy9MaXN0IG9mIE91dHMKKwkgICAgICAuZGF0YV9vdXQgICAgICAocmVnXzE0WzIzOjE2XSAgICAgICAgKQorICAgICAgICAgICk7CisKK2dlbmVyaWNfcmVnaXN0ZXIgIyg4LDAgICkgdV9yZWcxNF9iZTMgKAorCSAgICAgIC53ZSAgICAgICAgICAgICh7OHtzd193cl9lbl8xNCAmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JfYmVbM10gICB9fSAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAgICAoc3dfcmVnX3dkYXRhWzMxOjI0XSAgICApLAorCSAgICAgIC5yZXNldF9uICAgICAgIChyZXNldF9uICAgICAgICAgICApLAorCSAgICAgIC5jbGsgICAgICAgICAgIChtY2xrICAgICAgICAgICAgICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgICAgKHJlZ18xNFszMToyNF0gICAgICAgICkKKyAgICAgICAgICApOworCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICAgcmVnLSAxNQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitnZW5lcmljX3JlZ2lzdGVyICMoOCwwICApIHVfcmVnMTVfYmUwICgKKwkgICAgICAud2UgICAgICAgICAgICAoezh7c3dfd3JfZW5fMTUgJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyX2JlWzBdICAgfX0gICksCQkgCisJICAgICAgLmRhdGFfaW4gICAgICAgKHN3X3JlZ193ZGF0YVs3OjBdICAgICksCisJICAgICAgLnJlc2V0X24gICAgICAgKHJlc2V0X24gICAgICAgICAgICksCisJICAgICAgLmNsayAgICAgICAgICAgKG1jbGsgICAgICAgICAgICAgICksCisJICAgICAgCisJICAgICAgLy9MaXN0IG9mIE91dHMKKwkgICAgICAuZGF0YV9vdXQgICAgICAocmVnXzE1Wzc6MF0gICAgICAgICkKKyAgICAgICAgICApOworCitnZW5lcmljX3JlZ2lzdGVyICMoOCwwICApIHVfcmVnMTVfYmUxICgKKwkgICAgICAud2UgICAgICAgICAgICAoezh7c3dfd3JfZW5fMTUgJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyX2JlWzFdICAgfX0gICksCQkgCisJICAgICAgLmRhdGFfaW4gICAgICAgKHN3X3JlZ193ZGF0YVsxNTo4XSAgICApLAorCSAgICAgIC5yZXNldF9uICAgICAgIChyZXNldF9uICAgICAgICAgICApLAorCSAgICAgIC5jbGsgICAgICAgICAgIChtY2xrICAgICAgICAgICAgICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgICAgKHJlZ18xNVsxNTo4XSAgICAgICAgKQorICAgICAgICAgICk7CitnZW5lcmljX3JlZ2lzdGVyICMoOCwwICApIHVfcmVnMTVfYmUyICgKKwkgICAgICAud2UgICAgICAgICAgICAoezh7c3dfd3JfZW5fMTUgJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyX2JlWzJdICAgfX0gICksCQkgCisJICAgICAgLmRhdGFfaW4gICAgICAgKHN3X3JlZ193ZGF0YVsyMzoxNl0gICAgKSwKKwkgICAgICAucmVzZXRfbiAgICAgICAocmVzZXRfbiAgICAgICAgICAgKSwKKwkgICAgICAuY2xrICAgICAgICAgICAobWNsayAgICAgICAgICAgICAgKSwKKwkgICAgICAKKwkgICAgICAvL0xpc3Qgb2YgT3V0cworCSAgICAgIC5kYXRhX291dCAgICAgIChyZWdfMTVbMjM6MTZdICAgICAgICApCisgICAgICAgICAgKTsKKworZ2VuZXJpY19yZWdpc3RlciAjKDgsMCAgKSB1X3JlZzE1X2JlMyAoCisJICAgICAgLndlICAgICAgICAgICAgKHs4e3N3X3dyX2VuXzE1ICYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cl9iZVszXSAgIH19ICApLAkJIAorCSAgICAgIC5kYXRhX2luICAgICAgIChzd19yZWdfd2RhdGFbMzE6MjRdICAgICksCisJICAgICAgLnJlc2V0X24gICAgICAgKHJlc2V0X24gICAgICAgICAgICksCisJICAgICAgLmNsayAgICAgICAgICAgKG1jbGsgICAgICAgICAgICAgICksCisJICAgICAgCisJICAgICAgLy9MaXN0IG9mIE91dHMKKwkgICAgICAuZGF0YV9vdXQgICAgICAocmVnXzE1WzMxOjI0XSAgICAgKQorICAgICAgICAgICk7CisKKworCisKKworZW5kbW9kdWxlCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9pMmNtL3NyYy9jb3JlL2kyY21fYml0X2N0cmwudiBiL3Zlcmlsb2cvcnRsL2kyY20vc3JjL2NvcmUvaTJjbV9iaXRfY3RybC52Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjM1YzIxNDYKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC9pMmNtL3NyYy9jb3JlL2kyY21fYml0X2N0cmwudgpAQCAtMCwwICsxLDU0NSBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxICwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgIAorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IENyZWF0ZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKy8vCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIE9NUzgwNTEgSTJDIE1hc3RlciBiaXQtY29udHJvbGxlciBNb2R1bGUgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFdJU0hCT05FIHJldi5CMiBjb21wbGlhbnQgSTJDIE1hc3RlciBiaXQtY29udHJvbGxlciAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBPTVMgODA1MSBjb3JlcyBwcm9qZWN0ICAgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9jb3Jlcy9vbXM4MDUxbWluaS8gICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIE9NUyA4MDUxIGRlZmluaXRpb25zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcihzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAtUmljaGFyZCBIZXJ2ZWlsbGUgLCAgcmljaGFyZEBhc2ljcy53cywgd3d3LmFzaWNzLndzICAgIC8vLy8KKy8vLy8gICAgICAtRGluZXNoIEFubmF5eWEsIGRpbmVzaGFAb3BlbmNvcmVzLm9yZyAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFJldmlzaW9uIDogSmFuIDYsIDIwMTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8gCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyAgICAgdjAuMCAtIERpbmVzaCBBLCA2dGggSmFuIDIwMTcKKy8vICAgICAgICAgIDEuIEluaXRhaWwgdmVyc2lvbiBwaWNrZWQgZnJvbQorLy8gICAgICAgICAgICAgIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9wcm9qZWN0cy9pMmMvCisvLyAgICAgdjAuMSAtIERpbmVzaCBBLCAxOXRoIEphbiAyMDE3CisvLyAgICAgICAgICAxLiBMaW50IHdhcm5pbmcgY2xlYW4gdXAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gQ29weXJpZ2h0IChDKSAyMDAwIEF1dGhvcnMgYW5kIE9QRU5DT1JFUy5PUkcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgIC8vLy8KKy8vLy8gcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgIC8vLy8KKy8vLy8gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgIC8vLy8KKy8vLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCAgIC8vLy8KKy8vLy8gYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IC8vLy8KKy8vLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSAgIC8vLy8KKy8vLy8gbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlICAgICAgIC8vLy8KKy8vLy8gdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCAgIC8vLy8KKy8vLy8gd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAgICAgIC8vLy8KKy8vLy8gUFVSUE9TRS4gIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIC8vLy8KKy8vLy8gZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvdXJjZTsgaWYgbm90LCBkb3dubG9hZCBpdCAgIC8vLy8KKy8vLy8gZnJvbSBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvbGdwbC5zaHRtbCAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIEJpdCBjb250cm9sbGVyIHNlY3Rpb24KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBUcmFuc2xhdGUgc2ltcGxlIGNvbW1hbmRzIGludG8gU0NML1NEQSB0cmFuc2l0aW9ucworLy8gRWFjaCBjb21tYW5kIGhhcyA1IHN0YXRlcywgQS9CL0MvRC9pZGxlCisvLworLy8gc3RhcnQ6CVNDTAl+fn5+fn5+fn5+XF9fX18KKy8vCVNEQQl+fn5+fn5+flxfX19fX18KKy8vCQkgeCB8IEEgfCBCIHwgQyB8IEQgfCBpCisvLworLy8gcmVwc3RhcnQJU0NMCV9fX18vfn5+flxfX18KKy8vCVNEQQlfXy9+fn5cX19fX19fCisvLwkJIHggfCBBIHwgQiB8IEMgfCBEIHwgaQorLy8KKy8vIHN0b3AJU0NMCV9fX18vfn5+fn5+fn4KKy8vCVNEQQk9PVxfX19fL35+fn5+CisvLwkJIHggfCBBIHwgQiB8IEMgfCBEIHwgaQorLy8KKy8vLSB3cml0ZQlTQ0wJX19fXy9+fn5+XF9fX18KKy8vCVNEQQk9PVg9PT09PT09PT1YPQorLy8JCSB4IHwgQSB8IEIgfCBDIHwgRCB8IGkKKy8vCisvLy0gcmVhZAlTQ0wJX19fXy9+fn5+XF9fX18KKy8vCVNEQQlYWFhYPT09PT1YWFhYCisvLwkJIHggfCBBIHwgQiB8IEMgfCBEIHwgaQorLy8KKworLy8gVGltaW5nOiAgICAgTm9ybWFsIG1vZGUgICAgICBGYXN0IG1vZGUKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBGc2NsICAgICAgICAxMDBLSHogICAgICAgICAgIDQwMEtIegorLy8gVGhfc2NsICAgICAgNC4wdXMgICAgICAgICAgICAwLjZ1cyAgIEhpZ2ggcGVyaW9kIG9mIFNDTAorLy8gVGxfc2NsICAgICAgNC43dXMgICAgICAgICAgICAxLjN1cyAgIExvdyBwZXJpb2Qgb2YgU0NMCisvLyBUc3U6c3RhICAgICA0Ljd1cyAgICAgICAgICAgIDAuNnVzICAgc2V0dXAgdGltZSBmb3IgYSByZXBlYXRlZCBzdGFydCBjb25kaXRpb24KKy8vIFRzdTpzdG8gICAgIDQuMHVzICAgICAgICAgICAgMC42dXMgICBzZXR1cCB0aW1lIGZvciBhIHN0b3AgY29uZGl0b24KKy8vIFRidWYgICAgICAgIDQuN3VzICAgICAgICAgICAgMS4zdXMgICBCdXMgZnJlZSB0aW1lIGJldHdlZW4gYSBzdG9wIGFuZCBzdGFydCBjb25kaXRpb24KKy8vCisKKworYGluY2x1ZGUgImkyY21fZGVmaW5lcy52IgorCittb2R1bGUgaTJjbV9iaXRfY3RybCAoCisgICAgaW5wdXQgICAgICAgICAgICAgY2xrLCAgICAgIC8vIHN5c3RlbSBjbG9jaworICAgIGlucHV0ICAgICAgICAgICAgIHNyZXNldG4sICAvLyBzeW5jaHJvbm91cyBhY3RpdmUgbG93IHJlc2V0CisgICAgaW5wdXQgICAgICAgICAgICAgYXJlc2V0biwgIC8vIGFzeW5jaHJvbm91cyBhY3RpdmUgbG93IHJlc2V0CisgICAgaW5wdXQgICAgICAgICAgICAgZW5hLCAgICAgIC8vIGNvcmUgZW5hYmxlIHNpZ25hbAorCisgICAgaW5wdXQgICAgICBbMTU6MF0gY2xrX2NudCwgIC8vIGNsb2NrIHByZXNjYWxlIHZhbHVlCisKKyAgICBpbnB1dCAgICAgIFsgMzowXSBjbWQsICAgICAgLy8gY29tbWFuZCAoZnJvbSBieXRlIGNvbnRyb2xsZXIpCisgICAgb3V0cHV0IHJlZyAgICAgICAgY21kX2FjaywgIC8vIGNvbW1hbmQgY29tcGxldGUgYWNrbm93bGVkZ2UKKyAgICBvdXRwdXQgcmVnICAgICAgICBidXN5LCAgICAgLy8gaTJjIGJ1cyBidXN5CisgICAgb3V0cHV0IHJlZyAgICAgICAgYWwsICAgICAgIC8vIGkyYyBidXMgYXJiaXRyYXRpb24gbG9zdAorCisgICAgaW5wdXQgICAgICAgICAgICAgZGluLAorICAgIG91dHB1dCByZWcgICAgICAgIGRvdXQsCisKKyAgICBpbnB1dCAgICAgICAgICAgICBzY2xfaSwgICAgLy8gaTJjIGNsb2NrIGxpbmUgaW5wdXQKKyAgICBvdXRwdXQgICAgICAgICAgICBzY2xfbywgICAgLy8gaTJjIGNsb2NrIGxpbmUgb3V0cHV0CisgICAgb3V0cHV0IHJlZyAgICAgICAgc2NsX29lbiwgIC8vIGkyYyBjbG9jayBsaW5lIG91dHB1dCBlbmFibGUgKGFjdGl2ZSBsb3cpCisgICAgaW5wdXQgICAgICAgICAgICAgc2RhX2ksICAgIC8vIGkyYyBkYXRhIGxpbmUgaW5wdXQKKyAgICBvdXRwdXQgICAgICAgICAgICBzZGFfbywgICAgLy8gaTJjIGRhdGEgbGluZSBvdXRwdXQKKyAgICBvdXRwdXQgcmVnICAgICAgICBzZGFfb2VuICAgLy8gaTJjIGRhdGEgbGluZSBvdXRwdXQgZW5hYmxlIChhY3RpdmUgbG93KQorKTsKKworCisgICAgLy8KKyAgICAvLyB2YXJpYWJsZSBkZWNsYXJhdGlvbnMKKyAgICAvLworCisgICAgcmVnIFsgMTowXSBjU0NMLCBjU0RBOyAgICAgIC8vIGNhcHR1cmUgU0NMIGFuZCBTREEKKyAgICByZWcgWyAyOjBdIGZTQ0wsIGZTREE7ICAgICAgLy8gU0NMIGFuZCBTREEgZmlsdGVyIGlucHV0cworICAgIHJlZyAgICAgICAgc1NDTCwgc1NEQTsgICAgICAvLyBmaWx0ZXJlZCBhbmQgc3luY2hyb25pemVkIFNDTCBhbmQgU0RBIGlucHV0cworICAgIHJlZyAgICAgICAgZFNDTCwgZFNEQTsgICAgICAvLyBkZWxheWVkIHZlcnNpb25zIG9mIHNTQ0wgYW5kIHNTREEKKyAgICByZWcgICAgICAgIGRzY2xfb2VuOyAgICAgICAgLy8gZGVsYXllZCBzY2xfb2VuCisgICAgcmVnICAgICAgICBzZGFfY2hrOyAgICAgICAgIC8vIGNoZWNrIFNEQSBvdXRwdXQgKE11bHRpLW1hc3RlciBhcmJpdHJhdGlvbikKKyAgICByZWcgICAgICAgIGNsa19lbjsgICAgICAgICAgLy8gY2xvY2sgZ2VuZXJhdGlvbiBzaWduYWxzCisgICAgcmVnICAgICAgICBzbGF2ZV93YWl0OyAgICAgIC8vIHNsYXZlIGluc2VydHMgd2FpdCBzdGF0ZXMKKyAgICByZWcgWzE1OjBdIGNudDsgICAgICAgICAgICAgLy8gY2xvY2sgZGl2aWRlciBjb3VudGVyIChzeW50aGVzaXMpCisgICAgcmVnIFsxMzowXSBmaWx0ZXJfY250OyAgICAgIC8vIGNsb2NrIGRpdmlkZXIgZm9yIGZpbHRlcgorCisKKyAgICAvLyBzdGF0ZSBtYWNoaW5lIHZhcmlhYmxlCisgICAgcmVnIFsxNzowXSBjX3N0YXRlOyAvLyBzeW5vcHN5cyBlbnVtX3N0YXRlCisKKyAgICAvLworICAgIC8vIG1vZHVsZSBib2R5CisgICAgLy8KKworICAgIC8vIHdoZW5ldmVyIHRoZSBzbGF2ZSBpcyBub3QgcmVhZHkgaXQgY2FuIGRlbGF5IHRoZSBjeWNsZSBieSBwdWxsaW5nIFNDTCBsb3cKKyAgICAvLyBkZWxheSBzY2xfb2VuCisgICAgYWx3YXlzIEAocG9zZWRnZSBjbGspCisgICAgICBkc2NsX29lbiA8PSBzY2xfb2VuOworCisgICAgLy8gc2xhdmVfd2FpdCBpcyBhc3NlcnRlZCB3aGVuIG1hc3RlciB3YW50cyB0byBkcml2ZSBTQ0wgaGlnaCwgYnV0IHRoZSBzbGF2ZSBwdWxscyBpdCBsb3cKKyAgICAvLyBzbGF2ZV93YWl0IHJlbWFpbnMgYXNzZXJ0ZWQgdW50aWwgdGhlIHNsYXZlIHJlbGVhc2VzIFNDTAorICAgIGFsd2F5cyBAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgYXJlc2V0bikKKyAgICAgIGlmICghYXJlc2V0bikgc2xhdmVfd2FpdCA8PSAxJ2IwOworICAgICAgZWxzZSAgICAgICAgIHNsYXZlX3dhaXQgPD0gKHNjbF9vZW4gJiB+ZHNjbF9vZW4gJiB+c1NDTCkgfCAoc2xhdmVfd2FpdCAmIH5zU0NMKTsKKworICAgIC8vIG1hc3RlciBkcml2ZXMgU0NMIGhpZ2gsIGJ1dCBhbm90aGVyIG1hc3RlciBwdWxscyBpdCBsb3cKKyAgICAvLyBtYXN0ZXIgc3RhcnQgY291bnRpbmcgZG93biBpdHMgbG93IGN5Y2xlIG5vdyAoY2xvY2sgc3luY2hyb25pemF0aW9uKQorICAgIHdpcmUgc2NsX3N5bmMgICA9IGRTQ0wgJiB+c1NDTCAmIHNjbF9vZW47CisKKworICAgIC8vIGdlbmVyYXRlIGNsayBlbmFibGUgc2lnbmFsCisgICAgYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSBhcmVzZXRuKQorICAgICAgaWYgKH5hcmVzZXRuKQorICAgICAgYmVnaW4KKyAgICAgICAgICBjbnQgICAgPD0gMTYnaDA7CisgICAgICAgICAgY2xrX2VuIDw9IDEnYjE7CisgICAgICBlbmQKKyAgICAgIGVsc2UgaWYgKCFzcmVzZXRuIHx8IH58Y250IHx8ICFlbmEgfHwgc2NsX3N5bmMpCisgICAgICBiZWdpbgorICAgICAgICAgIGNudCAgICA8PSBjbGtfY250OworICAgICAgICAgIGNsa19lbiA8PSAxJ2IxOworICAgICAgZW5kCisgICAgICBlbHNlIGlmIChzbGF2ZV93YWl0KQorICAgICAgYmVnaW4KKyAgICAgICAgICBjbnQgICAgPD0gY250OworICAgICAgICAgIGNsa19lbiA8PSAxJ2IwOyAgICAKKyAgICAgIGVuZAorICAgICAgZWxzZQorICAgICAgYmVnaW4KKyAgICAgICAgICBjbnQgICAgPD0gY250IC0gMTYnaDE7CisgICAgICAgICAgY2xrX2VuIDw9IDEnYjA7CisgICAgICBlbmQKKworCisgICAgLy8gZ2VuZXJhdGUgYnVzIHN0YXR1cyBjb250cm9sbGVyCisKKyAgICAvLyBjYXB0dXJlIFNEQSBhbmQgU0NMCisgICAgLy8gcmVkdWNlIG1ldGFzdGFiaWxpdHkgcmlzaworICAgIGFsd2F5cyBAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgYXJlc2V0bikKKyAgICAgIGlmICghYXJlc2V0bikKKyAgICAgIGJlZ2luCisgICAgICAgICAgY1NDTCA8PSAyJ2IwMDsKKyAgICAgICAgICBjU0RBIDw9IDInYjAwOworICAgICAgZW5kCisgICAgICBlbHNlIGlmICghc3Jlc2V0bikKKyAgICAgIGJlZ2luCisgICAgICAgICAgY1NDTCA8PSAyJ2IwMDsKKyAgICAgICAgICBjU0RBIDw9IDInYjAwOworICAgICAgZW5kCisgICAgICBlbHNlCisgICAgICBiZWdpbgorICAgICAgICAgIGNTQ0wgPD0ge2NTQ0xbMF0sc2NsX2l9OworICAgICAgICAgIGNTREEgPD0ge2NTREFbMF0sc2RhX2l9OworICAgICAgZW5kCisKKworICAgIC8vIGZpbHRlciBTQ0wgYW5kIFNEQSBzaWduYWxzOyAoYXR0ZW1wdCB0bykgcmVtb3ZlIGdsaXRjaGVzCisgICAgYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSBhcmVzZXRuKQorICAgICAgaWYgICAgICAoIWFyZXNldG4gICAgICkgZmlsdGVyX2NudCA8PSAxNCdoMDsKKyAgICAgIGVsc2UgaWYgKCFzcmVzZXRuIHx8ICFlbmEgKSBmaWx0ZXJfY250IDw9IDE0J2gwOworICAgICAgZWxzZSBpZiAofnxmaWx0ZXJfY250KSBmaWx0ZXJfY250IDw9IGNsa19jbnQgPj4gMjsgLy8xNnggSTJDIGJ1cyBmcmVxdWVuY3kKKyAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgZmlsdGVyX2NudCA8PSBmaWx0ZXJfY250IC0xOworCisKKyAgICBhbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIGFyZXNldG4pCisgICAgICBpZiAoIWFyZXNldG4pCisgICAgICBiZWdpbgorICAgICAgICAgIGZTQ0wgPD0gMydiMTExOworICAgICAgICAgIGZTREEgPD0gMydiMTExOworICAgICAgZW5kCisgICAgICBlbHNlIGlmICghc3Jlc2V0bikKKyAgICAgIGJlZ2luCisgICAgICAgICAgZlNDTCA8PSAzJ2IxMTE7CisgICAgICAgICAgZlNEQSA8PSAzJ2IxMTE7CisgICAgICBlbmQKKyAgICAgIGVsc2UgaWYgKH58ZmlsdGVyX2NudCkKKyAgICAgIGJlZ2luCisgICAgICAgICAgZlNDTCA8PSB7ZlNDTFsxOjBdLGNTQ0xbMV19OworICAgICAgICAgIGZTREEgPD0ge2ZTREFbMTowXSxjU0RBWzFdfTsKKyAgICAgIGVuZAorCisKKyAgICAvLyBnZW5lcmF0ZSBmaWx0ZXJlZCBTQ0wgYW5kIFNEQSBzaWduYWxzCisgICAgYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSBhcmVzZXRuKQorICAgICAgaWYgKH5hcmVzZXRuKQorICAgICAgYmVnaW4KKyAgICAgICAgICBzU0NMIDw9IDEnYjE7CisgICAgICAgICAgc1NEQSA8PSAxJ2IxOworCisgICAgICAgICAgZFNDTCA8PSAxJ2IxOworICAgICAgICAgIGRTREEgPD0gMSdiMTsKKyAgICAgIGVuZAorICAgICAgZWxzZSBpZiAoIXNyZXNldG4pCisgICAgICBiZWdpbgorICAgICAgICAgIHNTQ0wgPD0gMSdiMTsKKyAgICAgICAgICBzU0RBIDw9IDEnYjE7CisKKyAgICAgICAgICBkU0NMIDw9IDEnYjE7CisgICAgICAgICAgZFNEQSA8PSAxJ2IxOworICAgICAgZW5kCisgICAgICBlbHNlCisgICAgICBiZWdpbgorICAgICAgICAgIHNTQ0wgPD0gJmZTQ0xbMjoxXSB8ICZmU0NMWzE6MF0gfCAoZlNDTFsyXSAmIGZTQ0xbMF0pOworICAgICAgICAgIHNTREEgPD0gJmZTREFbMjoxXSB8ICZmU0RBWzE6MF0gfCAoZlNEQVsyXSAmIGZTREFbMF0pOworCisgICAgICAgICAgZFNDTCA8PSBzU0NMOworICAgICAgICAgIGRTREEgPD0gc1NEQTsKKyAgICAgIGVuZAorCisgICAgLy8gZGV0ZWN0IHN0YXJ0IGNvbmRpdGlvbiA9PiBkZXRlY3QgZmFsbGluZyBlZGdlIG9uIFNEQSB3aGlsZSBTQ0wgaXMgaGlnaAorICAgIC8vIGRldGVjdCBzdG9wIGNvbmRpdGlvbiA9PiBkZXRlY3QgcmlzaW5nIGVkZ2Ugb24gU0RBIHdoaWxlIFNDTCBpcyBoaWdoCisgICAgcmVnIHN0YV9jb25kaXRpb247CisgICAgcmVnIHN0b19jb25kaXRpb247CisgICAgYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSBhcmVzZXRuKQorICAgICAgaWYgKH5hcmVzZXRuKQorICAgICAgYmVnaW4KKyAgICAgICAgICBzdGFfY29uZGl0aW9uIDw9IDEnYjA7CisgICAgICAgICAgc3RvX2NvbmRpdGlvbiA8PSAxJ2IwOworICAgICAgZW5kCisgICAgICBlbHNlIGlmICghc3Jlc2V0bikKKyAgICAgIGJlZ2luCisgICAgICAgICAgc3RhX2NvbmRpdGlvbiA8PSAxJ2IwOworICAgICAgICAgIHN0b19jb25kaXRpb24gPD0gMSdiMDsKKyAgICAgIGVuZAorICAgICAgZWxzZQorICAgICAgYmVnaW4KKyAgICAgICAgICBzdGFfY29uZGl0aW9uIDw9IH5zU0RBICYgIGRTREEgJiBzU0NMOworICAgICAgICAgIHN0b19jb25kaXRpb24gPD0gIHNTREEgJiB+ZFNEQSAmIHNTQ0w7CisgICAgICBlbmQKKworCisgICAgLy8gZ2VuZXJhdGUgaTJjIGJ1cyBidXN5IHNpZ25hbAorICAgIGFsd2F5cyBAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgYXJlc2V0bikKKyAgICAgIGlmICAgICAgKCFhcmVzZXRuKSBidXN5IDw9IDEnYjA7CisgICAgICBlbHNlIGlmICghc3Jlc2V0biAgICApIGJ1c3kgPD0gMSdiMDsKKyAgICAgIGVsc2UgICAgICAgICAgICAgIGJ1c3kgPD0gKHN0YV9jb25kaXRpb24gfCBidXN5KSAmIH5zdG9fY29uZGl0aW9uOworCisKKyAgICAvLyBnZW5lcmF0ZSBhcmJpdHJhdGlvbiBsb3N0IHNpZ25hbAorICAgIC8vIGFyaWJpdHJhdGlvbiBsb3N0IHdoZW46CisgICAgLy8gMSkgbWFzdGVyIGRyaXZlcyBTREEgaGlnaCwgYnV0IHRoZSBpMmMgYnVzIGlzIGxvdworICAgIC8vIDIpIHN0b3AgZGV0ZWN0ZWQgd2hpbGUgbm90IHJlcXVlc3RlZAorICAgIHJlZyBjbWRfc3RvcDsKKyAgICBhbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIGFyZXNldG4pCisgICAgICBpZiAofmFyZXNldG4pCisgICAgICAgICAgY21kX3N0b3AgPD0gMSdiMDsKKyAgICAgIGVsc2UgaWYgKCFzcmVzZXRuKQorICAgICAgICAgIGNtZF9zdG9wIDw9IDEnYjA7CisgICAgICBlbHNlIGlmIChjbGtfZW4pCisgICAgICAgICAgY21kX3N0b3AgPD0gY21kID09IGBJMkNfQ01EX1NUT1A7CisKKyAgICBhbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIGFyZXNldG4pCisgICAgICBpZiAofmFyZXNldG4pCisgICAgICAgICAgYWwgPD0gMSdiMDsKKyAgICAgIGVsc2UgaWYgKCFzcmVzZXRuKQorICAgICAgICAgIGFsIDw9IDEnYjA7CisgICAgICBlbHNlCisgICAgICAgICAgYWwgPD0gKHNkYV9jaGsgJiB+c1NEQSAmIHNkYV9vZW4pIHwgKHxjX3N0YXRlICYgc3RvX2NvbmRpdGlvbiAmIH5jbWRfc3RvcCk7CisKKworICAgIC8vIGdlbmVyYXRlIGRvdXQgc2lnbmFsIChzdG9yZSBTREEgb24gcmlzaW5nIGVkZ2Ugb2YgU0NMKQorICAgIGFsd2F5cyBAKHBvc2VkZ2UgY2xrKQorICAgICAgaWYgKHNTQ0wgJiB+ZFNDTCkgZG91dCA8PSBzU0RBOworCisKKyAgICAvLyBnZW5lcmF0ZSBzdGF0ZW1hY2hpbmUKKworICAgIC8vIG54dF9zdGF0ZSBkZWNvZGVyCisgICAgcGFyYW1ldGVyIFsxNzowXSBpZGxlICAgID0gMTgnYjBfMDAwMF8wMDAwXzAwMDBfMDAwMDsKKyAgICBwYXJhbWV0ZXIgWzE3OjBdIHN0YXJ0X2EgPSAxOCdiMF8wMDAwXzAwMDBfMDAwMF8wMDAxOworICAgIHBhcmFtZXRlciBbMTc6MF0gc3RhcnRfYiA9IDE4J2IwXzAwMDBfMDAwMF8wMDAwXzAwMTA7CisgICAgcGFyYW1ldGVyIFsxNzowXSBzdGFydF9jID0gMTgnYjBfMDAwMF8wMDAwXzAwMDBfMDEwMDsKKyAgICBwYXJhbWV0ZXIgWzE3OjBdIHN0YXJ0X2QgPSAxOCdiMF8wMDAwXzAwMDBfMDAwMF8xMDAwOworICAgIHBhcmFtZXRlciBbMTc6MF0gc3RhcnRfZSA9IDE4J2IwXzAwMDBfMDAwMF8wMDAxXzAwMDA7CisgICAgcGFyYW1ldGVyIFsxNzowXSBzdG9wX2EgID0gMTgnYjBfMDAwMF8wMDAwXzAwMTBfMDAwMDsKKyAgICBwYXJhbWV0ZXIgWzE3OjBdIHN0b3BfYiAgPSAxOCdiMF8wMDAwXzAwMDBfMDEwMF8wMDAwOworICAgIHBhcmFtZXRlciBbMTc6MF0gc3RvcF9jICA9IDE4J2IwXzAwMDBfMDAwMF8xMDAwXzAwMDA7CisgICAgcGFyYW1ldGVyIFsxNzowXSBzdG9wX2QgID0gMTgnYjBfMDAwMF8wMDAxXzAwMDBfMDAwMDsKKyAgICBwYXJhbWV0ZXIgWzE3OjBdIHJkX2EgICAgPSAxOCdiMF8wMDAwXzAwMTBfMDAwMF8wMDAwOworICAgIHBhcmFtZXRlciBbMTc6MF0gcmRfYiAgICA9IDE4J2IwXzAwMDBfMDEwMF8wMDAwXzAwMDA7CisgICAgcGFyYW1ldGVyIFsxNzowXSByZF9jICAgID0gMTgnYjBfMDAwMF8xMDAwXzAwMDBfMDAwMDsKKyAgICBwYXJhbWV0ZXIgWzE3OjBdIHJkX2QgICAgPSAxOCdiMF8wMDAxXzAwMDBfMDAwMF8wMDAwOworICAgIHBhcmFtZXRlciBbMTc6MF0gd3JfYSAgICA9IDE4J2IwXzAwMTBfMDAwMF8wMDAwXzAwMDA7CisgICAgcGFyYW1ldGVyIFsxNzowXSB3cl9iICAgID0gMTgnYjBfMDEwMF8wMDAwXzAwMDBfMDAwMDsKKyAgICBwYXJhbWV0ZXIgWzE3OjBdIHdyX2MgICAgPSAxOCdiMF8xMDAwXzAwMDBfMDAwMF8wMDAwOworICAgIHBhcmFtZXRlciBbMTc6MF0gd3JfZCAgICA9IDE4J2IxXzAwMDBfMDAwMF8wMDAwXzAwMDA7CisKKyAgICBhbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIGFyZXNldG4pCisgICAgICBpZiAoIWFyZXNldG4pCisgICAgICBiZWdpbgorICAgICAgICAgIGNfc3RhdGUgPD0gaWRsZTsKKyAgICAgICAgICBjbWRfYWNrIDw9IDEnYjA7CisgICAgICAgICAgc2NsX29lbiA8PSAxJ2IxOworICAgICAgICAgIHNkYV9vZW4gPD0gMSdiMTsKKyAgICAgICAgICBzZGFfY2hrIDw9IDEnYjA7CisgICAgICBlbmQKKyAgICAgIGVsc2UgaWYgKCFzcmVzZXRuIHwgYWwpCisgICAgICBiZWdpbgorICAgICAgICAgIGNfc3RhdGUgPD0gaWRsZTsKKyAgICAgICAgICBjbWRfYWNrIDw9IDEnYjA7CisgICAgICAgICAgc2NsX29lbiA8PSAxJ2IxOworICAgICAgICAgIHNkYV9vZW4gPD0gMSdiMTsKKyAgICAgICAgICBzZGFfY2hrIDw9IDEnYjA7CisgICAgICBlbmQKKyAgICAgIGVsc2UKKyAgICAgIGJlZ2luCisgICAgICAgICAgY21kX2FjayAgIDw9IDEnYjA7IC8vIGRlZmF1bHQgbm8gY29tbWFuZCBhY2tub3dsZWRnZSArIGFzc2VydCBjbWRfYWNrIG9ubHkgMWNsayBjeWNsZQorCisgICAgICAgICAgaWYgKGNsa19lbikKKyAgICAgICAgICAgICAgY2FzZSAoY19zdGF0ZSkgLy8gc3lub3BzeXMgZnVsbF9jYXNlIHBhcmFsbGVsX2Nhc2UKKyAgICAgICAgICAgICAgICAgICAgLy8gaWRsZSBzdGF0ZQorICAgICAgICAgICAgICAgICAgICBpZGxlOgorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAoY21kKSAvLyBzeW5vcHN5cyBmdWxsX2Nhc2UgcGFyYWxsZWxfY2FzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgSTJDX0NNRF9TVEFSVDogY19zdGF0ZSA8PSBzdGFydF9hOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgSTJDX0NNRF9TVE9QOiAgY19zdGF0ZSA8PSBzdG9wX2E7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBJMkNfQ01EX1dSSVRFOiBjX3N0YXRlIDw9IHdyX2E7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBJMkNfQ01EX1JFQUQ6ICBjX3N0YXRlIDw9IHJkX2E7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6ICAgICAgICBjX3N0YXRlIDw9IGlkbGU7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmRjYXNlCisKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjbF9vZW4gPD0gc2NsX29lbjsgLy8ga2VlcCBTQ0wgaW4gc2FtZSBzdGF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgc2RhX29lbiA8PSBzZGFfb2VuOyAvLyBrZWVwIFNEQSBpbiBzYW1lIHN0YXRlCisgICAgICAgICAgICAgICAgICAgICAgICBzZGFfY2hrIDw9IDEnYjA7ICAgIC8vIGRvbid0IGNoZWNrIFNEQSBvdXRwdXQKKyAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgLy8gc3RhcnQKKyAgICAgICAgICAgICAgICAgICAgc3RhcnRfYToKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGNfc3RhdGUgPD0gc3RhcnRfYjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjbF9vZW4gPD0gc2NsX29lbjsgLy8ga2VlcCBTQ0wgaW4gc2FtZSBzdGF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgc2RhX29lbiA8PSAxJ2IxOyAgICAvLyBzZXQgU0RBIGhpZ2gKKyAgICAgICAgICAgICAgICAgICAgICAgIHNkYV9jaGsgPD0gMSdiMDsgICAgLy8gZG9uJ3QgY2hlY2sgU0RBIG91dHB1dAorICAgICAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgICAgICBzdGFydF9iOgorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgY19zdGF0ZSA8PSBzdGFydF9jOworICAgICAgICAgICAgICAgICAgICAgICAgc2NsX29lbiA8PSAxJ2IxOyAvLyBzZXQgU0NMIGhpZ2gKKyAgICAgICAgICAgICAgICAgICAgICAgIHNkYV9vZW4gPD0gMSdiMTsgLy8ga2VlcCBTREEgaGlnaAorICAgICAgICAgICAgICAgICAgICAgICAgc2RhX2NoayA8PSAxJ2IwOyAvLyBkb24ndCBjaGVjayBTREEgb3V0cHV0CisgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2M6CisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBjX3N0YXRlIDw9IHN0YXJ0X2Q7CisgICAgICAgICAgICAgICAgICAgICAgICBzY2xfb2VuIDw9IDEnYjE7IC8vIGtlZXAgU0NMIGhpZ2gKKyAgICAgICAgICAgICAgICAgICAgICAgIHNkYV9vZW4gPD0gMSdiMDsgLy8gc2V0IFNEQSBsb3cKKyAgICAgICAgICAgICAgICAgICAgICAgIHNkYV9jaGsgPD0gMSdiMDsgLy8gZG9uJ3QgY2hlY2sgU0RBIG91dHB1dAorICAgICAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgICAgICBzdGFydF9kOgorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgY19zdGF0ZSA8PSBzdGFydF9lOworICAgICAgICAgICAgICAgICAgICAgICAgc2NsX29lbiA8PSAxJ2IxOyAvLyBrZWVwIFNDTCBoaWdoCisgICAgICAgICAgICAgICAgICAgICAgICBzZGFfb2VuIDw9IDEnYjA7IC8vIGtlZXAgU0RBIGxvdworICAgICAgICAgICAgICAgICAgICAgICAgc2RhX2NoayA8PSAxJ2IwOyAvLyBkb24ndCBjaGVjayBTREEgb3V0cHV0CisgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2U6CisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBjX3N0YXRlIDw9IGlkbGU7CisgICAgICAgICAgICAgICAgICAgICAgICBjbWRfYWNrIDw9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICBzY2xfb2VuIDw9IDEnYjA7IC8vIHNldCBTQ0wgbG93CisgICAgICAgICAgICAgICAgICAgICAgICBzZGFfb2VuIDw9IDEnYjA7IC8vIGtlZXAgU0RBIGxvdworICAgICAgICAgICAgICAgICAgICAgICAgc2RhX2NoayA8PSAxJ2IwOyAvLyBkb24ndCBjaGVjayBTREEgb3V0cHV0CisgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgIC8vIHN0b3AKKyAgICAgICAgICAgICAgICAgICAgc3RvcF9hOgorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgY19zdGF0ZSA8PSBzdG9wX2I7CisgICAgICAgICAgICAgICAgICAgICAgICBzY2xfb2VuIDw9IDEnYjA7IC8vIGtlZXAgU0NMIGxvdworICAgICAgICAgICAgICAgICAgICAgICAgc2RhX29lbiA8PSAxJ2IwOyAvLyBzZXQgU0RBIGxvdworICAgICAgICAgICAgICAgICAgICAgICAgc2RhX2NoayA8PSAxJ2IwOyAvLyBkb24ndCBjaGVjayBTREEgb3V0cHV0CisgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgIHN0b3BfYjoKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGNfc3RhdGUgPD0gc3RvcF9jOworICAgICAgICAgICAgICAgICAgICAgICAgc2NsX29lbiA8PSAxJ2IxOyAvLyBzZXQgU0NMIGhpZ2gKKyAgICAgICAgICAgICAgICAgICAgICAgIHNkYV9vZW4gPD0gMSdiMDsgLy8ga2VlcCBTREEgbG93CisgICAgICAgICAgICAgICAgICAgICAgICBzZGFfY2hrIDw9IDEnYjA7IC8vIGRvbid0IGNoZWNrIFNEQSBvdXRwdXQKKyAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgc3RvcF9jOgorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgY19zdGF0ZSA8PSBzdG9wX2Q7CisgICAgICAgICAgICAgICAgICAgICAgICBzY2xfb2VuIDw9IDEnYjE7IC8vIGtlZXAgU0NMIGhpZ2gKKyAgICAgICAgICAgICAgICAgICAgICAgIHNkYV9vZW4gPD0gMSdiMDsgLy8ga2VlcCBTREEgbG93CisgICAgICAgICAgICAgICAgICAgICAgICBzZGFfY2hrIDw9IDEnYjA7IC8vIGRvbid0IGNoZWNrIFNEQSBvdXRwdXQKKyAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgc3RvcF9kOgorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgY19zdGF0ZSA8PSBpZGxlOworICAgICAgICAgICAgICAgICAgICAgICAgY21kX2FjayA8PSAxJ2IxOworICAgICAgICAgICAgICAgICAgICAgICAgc2NsX29lbiA8PSAxJ2IxOyAvLyBrZWVwIFNDTCBoaWdoCisgICAgICAgICAgICAgICAgICAgICAgICBzZGFfb2VuIDw9IDEnYjE7IC8vIHNldCBTREEgaGlnaAorICAgICAgICAgICAgICAgICAgICAgICAgc2RhX2NoayA8PSAxJ2IwOyAvLyBkb24ndCBjaGVjayBTREEgb3V0cHV0CisgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgIC8vIHJlYWQKKyAgICAgICAgICAgICAgICAgICAgcmRfYToKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGNfc3RhdGUgPD0gcmRfYjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjbF9vZW4gPD0gMSdiMDsgLy8ga2VlcCBTQ0wgbG93CisgICAgICAgICAgICAgICAgICAgICAgICBzZGFfb2VuIDw9IDEnYjE7IC8vIHRyaS1zdGF0ZSBTREEKKyAgICAgICAgICAgICAgICAgICAgICAgIHNkYV9jaGsgPD0gMSdiMDsgLy8gZG9uJ3QgY2hlY2sgU0RBIG91dHB1dAorICAgICAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgICAgICByZF9iOgorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgY19zdGF0ZSA8PSByZF9jOworICAgICAgICAgICAgICAgICAgICAgICAgc2NsX29lbiA8PSAxJ2IxOyAvLyBzZXQgU0NMIGhpZ2gKKyAgICAgICAgICAgICAgICAgICAgICAgIHNkYV9vZW4gPD0gMSdiMTsgLy8ga2VlcCBTREEgdHJpLXN0YXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgc2RhX2NoayA8PSAxJ2IwOyAvLyBkb24ndCBjaGVjayBTREEgb3V0cHV0CisgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgIHJkX2M6CisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBjX3N0YXRlIDw9IHJkX2Q7CisgICAgICAgICAgICAgICAgICAgICAgICBzY2xfb2VuIDw9IDEnYjE7IC8vIGtlZXAgU0NMIGhpZ2gKKyAgICAgICAgICAgICAgICAgICAgICAgIHNkYV9vZW4gPD0gMSdiMTsgLy8ga2VlcCBTREEgdHJpLXN0YXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgc2RhX2NoayA8PSAxJ2IwOyAvLyBkb24ndCBjaGVjayBTREEgb3V0cHV0CisgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgIHJkX2Q6CisgICAgICAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgICBjX3N0YXRlIDw9IGlkbGU7CisgICAgICAgICAgICAgICAgICAgICAgICBjbWRfYWNrIDw9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgICAgICBzY2xfb2VuIDw9IDEnYjA7IC8vIHNldCBTQ0wgbG93CisgICAgICAgICAgICAgICAgICAgICAgICBzZGFfb2VuIDw9IDEnYjE7IC8vIGtlZXAgU0RBIHRyaS1zdGF0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIHNkYV9jaGsgPD0gMSdiMDsgLy8gZG9uJ3QgY2hlY2sgU0RBIG91dHB1dAorICAgICAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgICAgICAvLyB3cml0ZQorICAgICAgICAgICAgICAgICAgICB3cl9hOgorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgY19zdGF0ZSA8PSB3cl9iOworICAgICAgICAgICAgICAgICAgICAgICAgc2NsX29lbiA8PSAxJ2IwOyAvLyBrZWVwIFNDTCBsb3cKKyAgICAgICAgICAgICAgICAgICAgICAgIHNkYV9vZW4gPD0gZGluOyAgLy8gc2V0IFNEQQorICAgICAgICAgICAgICAgICAgICAgICAgc2RhX2NoayA8PSAxJ2IwOyAvLyBkb24ndCBjaGVjayBTREEgb3V0cHV0IChTQ0wgbG93KQorICAgICAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgICAgICB3cl9iOgorICAgICAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICAgY19zdGF0ZSA8PSB3cl9jOworICAgICAgICAgICAgICAgICAgICAgICAgc2NsX29lbiA8PSAxJ2IxOyAvLyBzZXQgU0NMIGhpZ2gKKyAgICAgICAgICAgICAgICAgICAgICAgIHNkYV9vZW4gPD0gZGluOyAgLy8ga2VlcCBTREEKKyAgICAgICAgICAgICAgICAgICAgICAgIHNkYV9jaGsgPD0gMSdiMDsgLy8gZG9uJ3QgY2hlY2sgU0RBIG91dHB1dCB5ZXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWxsb3cgc29tZSB0aW1lIGZvciBTREEgYW5kIFNDTCB0byBzZXR0bGUKKyAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgd3JfYzoKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGNfc3RhdGUgPD0gd3JfZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjbF9vZW4gPD0gMSdiMTsgLy8ga2VlcCBTQ0wgaGlnaAorICAgICAgICAgICAgICAgICAgICAgICAgc2RhX29lbiA8PSBkaW47CisgICAgICAgICAgICAgICAgICAgICAgICBzZGFfY2hrIDw9IDEnYjE7IC8vIGNoZWNrIFNEQSBvdXRwdXQKKyAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgd3JfZDoKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGNfc3RhdGUgPD0gaWRsZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNtZF9hY2sgPD0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjbF9vZW4gPD0gMSdiMDsgLy8gc2V0IFNDTCBsb3cKKyAgICAgICAgICAgICAgICAgICAgICAgIHNkYV9vZW4gPD0gZGluOworICAgICAgICAgICAgICAgICAgICAgICAgc2RhX2NoayA8PSAxJ2IwOyAvLyBkb24ndCBjaGVjayBTREEgb3V0cHV0IChTQ0wgbG93KQorICAgICAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICBlbmRjYXNlCisgICAgICBlbmQKKworCisgICAgLy8gYXNzaWduIHNjbCBhbmQgc2RhIG91dHB1dCAoYWx3YXlzIGduZCkKKyAgICBhc3NpZ24gc2NsX28gPSAxJ2IwOworICAgIGFzc2lnbiBzZGFfbyA9IDEnYjA7CisKK2VuZG1vZHVsZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvaTJjbS9zcmMvY29yZS9pMmNtX2J5dGVfY3RybC52IGIvdmVyaWxvZy9ydGwvaTJjbS9zcmMvY29yZS9pMmNtX2J5dGVfY3RybC52Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjAwMmI1MWUKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC9pMmNtL3NyYy9jb3JlL2kyY21fYnl0ZV9jdHJsLnYKQEAgLTAsMCArMSwzNDMgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSAsIERpbmVzaCBBbm5heXlhICAgICAgICAgICAgICAgICAgICAgICAgICAKKy8vIAorLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBDcmVhdGVkIGJ5IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisvLworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBPTVM4MDUxIEkyQyBNYXN0ZXIgYnl0ZS1jb250cm9sbGVyIE1vZHVsZSAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFdJU0hCT05FIHJldi5CMiBjb21wbGlhbnQgSTJDIE1hc3RlciBieXRlLWNvbnRyb2xsZXIgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIE9NUyA4MDUxIGNvcmVzIHByb2plY3QgICAgICAgICAgICAgLy8vLworLy8vLyAgaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2NvcmVzL29tczgwNTFtaW5pLyAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgT01TIDgwNTEgZGVmaW5pdGlvbnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVG8gRG86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICBub3RoaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgQXV0aG9yKHMpOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgIC1SaWNoYXJkIEhlcnZlaWxsZSAsICByaWNoYXJkQGFzaWNzLndzLCB3d3cuYXNpY3Mud3MgICAgLy8vLworLy8vLyAgICAgIC1EaW5lc2ggQW5uYXl5YSwgZGluZXNoYUBvcGVuY29yZXMub3JnICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgUmV2aXNpb24gOiBKYW4gNiwgMjAxNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLyAKKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICB2MC4wIC0gRGluZXNoIEEsIDZ0aCBKYW4gMjAxNworLy8vLyAgICAgICAgMS4gSW5pdGFpbCB2ZXJzaW9uIHBpY2tlZCBmcm9tCisvLy8vICAgICAgICAgICAgaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL3Byb2plY3RzL2kyYy8KKy8vLy8gICAgICAgIDIuIHJlbmFtaW5nIG9mIHJlc2V0IHNpZ25hbCB0byBhcmVzZXRuIGFuZCBzcmVzZXRuCisvLy8vICAgdjAuMSAtIERpbmVzaC5BLCAxOXRoIEphbiAyMDE3CisvLy8vICAgICAgICAxLiBMaW50IEVycm9yIGZpeGVzCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIENvcHlyaWdodCAoQykgMjAwMCBBdXRob3JzIGFuZCBPUEVOQ09SRVMuT1JHICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgICAvLy8vCisvLy8vIHJlc3RyaWN0aW9uIHByb3ZpZGVkIHRoYXQgdGhpcyBjb3B5cmlnaHQgc3RhdGVtZW50IGlzIG5vdCAgICAvLy8vCisvLy8vIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSBhbmQgdGhhdCBhbnkgZGVyaXZhdGl2ZSB3b3JrIGNvbnRhaW5zICAvLy8vCisvLy8vIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLiAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgICAvLy8vCisvLy8vIGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAvLy8vCisvLy8vIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAvLy8vCisvLy8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgICAvLy8vCisvLy8vIGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSAgICAgICAvLy8vCisvLy8vIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgICAvLy8vCisvLy8vIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgICAgICAvLy8vCisvLy8vIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSAvLy8vCisvLy8vIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgICAvLy8vCisvLy8vIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBzb3VyY2U7IGlmIG5vdCwgZG93bmxvYWQgaXQgICAvLy8vCisvLy8vIGZyb20gaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2xncGwuc2h0bWwgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2BpbmNsdWRlICJpMmNtX2RlZmluZXMudiIKKworbW9kdWxlIGkyY21fYnl0ZV9jdHJsICgKKwkvLworCS8vIGlucHV0cyAmIG91dHB1dHMKKwkvLworCWlucHV0ICAgICAgICBjbGssICAgICAvLyBtYXN0ZXIgY2xvY2sKKwlpbnB1dCAgICAgICAgc3Jlc2V0biwgLy8gc3luY2hyb25vdXMgYWN0aXZlIGhpZ2ggcmVzZXQKKwlpbnB1dCAgICAgICAgYXJlc2V0biwgLy8gYXN5bmNocm9ub3VzIGFjdGl2ZSBsb3cgcmVzZXQKKwlpbnB1dCAgICAgICAgZW5hLCAgICAgLy8gY29yZSBlbmFibGUgc2lnbmFsCisKKwlpbnB1dCBbMTU6MF0gY2xrX2NudCwgLy8gNHggU0NMCisKKwkvLyBjb250cm9sIGlucHV0cworCWlucHV0ICAgICAgICBzdGFydCwKKwlpbnB1dCAgICAgICAgc3RvcCwKKwlpbnB1dCAgICAgICAgcmVhZCwKKwlpbnB1dCAgICAgICAgd3JpdGUsCisJaW5wdXQgICAgICAgIGFja19pbiwKKwlpbnB1dCBbNzowXSAgZGluLAorCisJLy8gc3RhdHVzIG91dHB1dHMKKwlvdXRwdXQgcmVnICAgY21kX2FjaywKKwlvdXRwdXQgcmVnICAgYWNrX291dCwKKwlvdXRwdXQgICAgICAgaTJjX2J1c3ksCisJb3V0cHV0ICAgICAgIGkyY19hbCwKKwlvdXRwdXQgWzc6MF0gZG91dCwKKworCS8vIEkyQyBzaWduYWxzCisJaW5wdXQgICAgICAgIHNjbF9pLAorCW91dHB1dCAgICAgICBzY2xfbywKKwlvdXRwdXQgICAgICAgc2NsX29lbiwKKwlpbnB1dCAgICAgICAgc2RhX2ksCisJb3V0cHV0ICAgICAgIHNkYV9vLAorCW91dHB1dCAgICAgICBzZGFfb2VuCisKKyAgICAgICApOworCisKKworCS8vCisJLy8gVmFyaWFibGUgZGVjbGFyYXRpb25zCisJLy8KKworCS8vIHN0YXRlbWFjaGluZQorCXBhcmFtZXRlciBbNDowXSBTVF9JRExFICA9IDUnYjBfMDAwMDsKKwlwYXJhbWV0ZXIgWzQ6MF0gU1RfU1RBUlQgPSA1J2IwXzAwMDE7CisJcGFyYW1ldGVyIFs0OjBdIFNUX1JFQUQgID0gNSdiMF8wMDEwOworCXBhcmFtZXRlciBbNDowXSBTVF9XUklURSA9IDUnYjBfMDEwMDsKKwlwYXJhbWV0ZXIgWzQ6MF0gU1RfQUNLICAgPSA1J2IwXzEwMDA7CisJcGFyYW1ldGVyIFs0OjBdIFNUX1NUT1AgID0gNSdiMV8wMDAwOworCisJLy8gc2lnbmFscyBmb3IgYml0X2NvbnRyb2xsZXIKKwlyZWcgIFszOjBdIGNvcmVfY21kOworCXJlZyAgICAgICAgY29yZV90eGQ7CisJd2lyZSAgICAgICBjb3JlX2FjaywgY29yZV9yeGQ7CisKKwkvLyBzaWduYWxzIGZvciBzaGlmdCByZWdpc3RlcgorCXJlZyBbNzowXSBzcjsgLy84Yml0IHNoaWZ0IHJlZ2lzdGVyCisJcmVnICAgICAgIHNoaWZ0LCBsZDsKKworCS8vIHNpZ25hbHMgZm9yIHN0YXRlIG1hY2hpbmUKKwl3aXJlICAgICAgIGdvOworCXJlZyAgWzI6MF0gZGNudDsKKwl3aXJlICAgICAgIGNudF9kb25lOworCisJLy8KKwkvLyBNb2R1bGUgYm9keQorCS8vCisKKwkvLyBob29rdXAgYml0X2NvbnRyb2xsZXIKKwlpMmNtX2JpdF9jdHJsIHVfYml0X2N0cmwgKAorCQkuY2xrICAgICAoIGNsayAgICAgICksCisJCS5zcmVzZXRuICggc3Jlc2V0biAgKSwKKwkJLmFyZXNldG4gKCBhcmVzZXRuICksCisJCS5lbmEgICAgICggZW5hICAgICAgKSwKKwkJLmNsa19jbnQgKCBjbGtfY250ICApLAorCQkuY21kICAgICAoIGNvcmVfY21kICksCisJCS5jbWRfYWNrICggY29yZV9hY2sgKSwKKwkJLmJ1c3kgICAgKCBpMmNfYnVzeSApLAorCQkuYWwgICAgICAoIGkyY19hbCAgICksCisJCS5kaW4gICAgICggY29yZV90eGQgKSwKKwkJLmRvdXQgICAgKCBjb3JlX3J4ZCApLAorCQkuc2NsX2kgICAoIHNjbF9pICAgICksCisJCS5zY2xfbyAgICggc2NsX28gICAgKSwKKwkJLnNjbF9vZW4gKCBzY2xfb2VuICApLAorCQkuc2RhX2kgICAoIHNkYV9pICAgICksCisJCS5zZGFfbyAgICggc2RhX28gICAgKSwKKwkJLnNkYV9vZW4gKCBzZGFfb2VuICApCisJKTsKKworCS8vIGdlbmVyYXRlIGdvLXNpZ25hbAorCWFzc2lnbiBnbyA9IChyZWFkIHwgd3JpdGUgfCBzdG9wKSAmIH5jbWRfYWNrOworCisJLy8gYXNzaWduIGRvdXQgb3V0cHV0IHRvIHNoaWZ0LXJlZ2lzdGVyCisJYXNzaWduIGRvdXQgPSBzcjsKKworCS8vIGdlbmVyYXRlIHNoaWZ0IHJlZ2lzdGVyCisJYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSBhcmVzZXRuKQorCSAgaWYgKCFhcmVzZXRuKQorCSAgICBzciA8PSA4J2gwOworCSAgZWxzZSBpZiAoIXNyZXNldG4pCisJICAgIHNyIDw9IDgnaDA7CisJICBlbHNlIGlmIChsZCkKKwkgICAgc3IgPD0gZGluOworCSAgZWxzZSBpZiAoc2hpZnQpCisJICAgIHNyIDw9IHtzcls2OjBdLCBjb3JlX3J4ZH07CisKKwkvLyBnZW5lcmF0ZSBjb3VudGVyCisJYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSBhcmVzZXRuKQorCSAgaWYgKCFhcmVzZXRuKQorCSAgICBkY250IDw9IDMnaDA7CisJICBlbHNlIGlmICghc3Jlc2V0bikKKwkgICAgZGNudCA8PSAzJ2gwOworCSAgZWxzZSBpZiAobGQpCisJICAgIGRjbnQgPD0gMydoNzsKKwkgIGVsc2UgaWYgKHNoaWZ0KQorCSAgICBkY250IDw9IGRjbnQgLSAzJ2gxOworCisJYXNzaWduIGNudF9kb25lID0gfih8ZGNudCk7CisKKwkvLworCS8vIHN0YXRlIG1hY2hpbmUKKwkvLworCXJlZyBbNDowXSBjX3N0YXRlOyAvLyBzeW5vcHN5cyBlbnVtX3N0YXRlCisKKwlhbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIGFyZXNldG4pCisJICBpZiAoIWFyZXNldG4pCisJICAgIGJlZ2luCisJICAgICAgICBjb3JlX2NtZCA8PSBgSTJDX0NNRF9OT1A7CisJICAgICAgICBjb3JlX3R4ZCA8PSAxJ2IwOworCSAgICAgICAgc2hpZnQgICAgPD0gMSdiMDsKKwkgICAgICAgIGxkICAgICAgIDw9IDEnYjA7CisJICAgICAgICBjbWRfYWNrICA8PSAxJ2IwOworCSAgICAgICAgY19zdGF0ZSAgPD0gU1RfSURMRTsKKwkgICAgICAgIGFja19vdXQgIDw9IDEnYjA7CisJICAgIGVuZAorCSAgZWxzZSBpZiAoIXNyZXNldG4gfCBpMmNfYWwpCisJICAgYmVnaW4KKwkgICAgICAgY29yZV9jbWQgPD0gYEkyQ19DTURfTk9QOworCSAgICAgICBjb3JlX3R4ZCA8PSAxJ2IwOworCSAgICAgICBzaGlmdCAgICA8PSAxJ2IwOworCSAgICAgICBsZCAgICAgICA8PSAxJ2IwOworCSAgICAgICBjbWRfYWNrICA8PSAxJ2IwOworCSAgICAgICBjX3N0YXRlICA8PSBTVF9JRExFOworCSAgICAgICBhY2tfb3V0ICA8PSAxJ2IwOworCSAgIGVuZAorCWVsc2UKKwkgIGJlZ2luCisJICAgICAgLy8gaW5pdGlhbGx5IHJlc2V0IGFsbCBzaWduYWxzCisJICAgICAgY29yZV90eGQgPD0gc3JbN107CisJICAgICAgc2hpZnQgICAgPD0gMSdiMDsKKwkgICAgICBsZCAgICAgICA8PSAxJ2IwOworCSAgICAgIGNtZF9hY2sgIDw9IDEnYjA7CisKKwkgICAgICBjYXNlIChjX3N0YXRlKSAvLyBzeW5vcHN5cyBmdWxsX2Nhc2UgcGFyYWxsZWxfY2FzZQorCSAgICAgICAgU1RfSURMRToKKwkgICAgICAgICAgaWYgKGdvKQorCSAgICAgICAgICAgIGJlZ2luCisJICAgICAgICAgICAgICAgIGlmIChzdGFydCkKKwkgICAgICAgICAgICAgICAgICBiZWdpbgorCSAgICAgICAgICAgICAgICAgICAgICBjX3N0YXRlICA8PSBTVF9TVEFSVDsKKwkgICAgICAgICAgICAgICAgICAgICAgY29yZV9jbWQgPD0gYEkyQ19DTURfU1RBUlQ7CisJICAgICAgICAgICAgICAgICAgZW5kCisJICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlYWQpCisJICAgICAgICAgICAgICAgICAgYmVnaW4KKwkgICAgICAgICAgICAgICAgICAgICAgY19zdGF0ZSAgPD0gU1RfUkVBRDsKKwkgICAgICAgICAgICAgICAgICAgICAgY29yZV9jbWQgPD0gYEkyQ19DTURfUkVBRDsKKwkgICAgICAgICAgICAgICAgICBlbmQKKwkgICAgICAgICAgICAgICAgZWxzZSBpZiAod3JpdGUpCisJICAgICAgICAgICAgICAgICAgYmVnaW4KKwkgICAgICAgICAgICAgICAgICAgICAgY19zdGF0ZSAgPD0gU1RfV1JJVEU7CisJICAgICAgICAgICAgICAgICAgICAgIGNvcmVfY21kIDw9IGBJMkNfQ01EX1dSSVRFOworCSAgICAgICAgICAgICAgICAgIGVuZAorCSAgICAgICAgICAgICAgICBlbHNlIC8vIHN0b3AKKwkgICAgICAgICAgICAgICAgICBiZWdpbgorCSAgICAgICAgICAgICAgICAgICAgICBjX3N0YXRlICA8PSBTVF9TVE9QOworCSAgICAgICAgICAgICAgICAgICAgICBjb3JlX2NtZCA8PSBgSTJDX0NNRF9TVE9QOworCSAgICAgICAgICAgICAgICAgIGVuZAorCisJICAgICAgICAgICAgICAgIGxkIDw9IDEnYjE7CisJICAgICAgICAgICAgZW5kCisKKwkgICAgICAgIFNUX1NUQVJUOgorCSAgICAgICAgICBpZiAoY29yZV9hY2spCisJICAgICAgICAgICAgYmVnaW4KKwkgICAgICAgICAgICAgICAgaWYgKHJlYWQpCisJICAgICAgICAgICAgICAgICAgYmVnaW4KKwkgICAgICAgICAgICAgICAgICAgICAgY19zdGF0ZSAgPD0gU1RfUkVBRDsKKwkgICAgICAgICAgICAgICAgICAgICAgY29yZV9jbWQgPD0gYEkyQ19DTURfUkVBRDsKKwkgICAgICAgICAgICAgICAgICBlbmQKKwkgICAgICAgICAgICAgICAgZWxzZQorCSAgICAgICAgICAgICAgICAgIGJlZ2luCisJICAgICAgICAgICAgICAgICAgICAgIGNfc3RhdGUgIDw9IFNUX1dSSVRFOworCSAgICAgICAgICAgICAgICAgICAgICBjb3JlX2NtZCA8PSBgSTJDX0NNRF9XUklURTsKKwkgICAgICAgICAgICAgICAgICBlbmQKKworCSAgICAgICAgICAgICAgICBsZCA8PSAxJ2IxOworCSAgICAgICAgICAgIGVuZAorCisJICAgICAgICBTVF9XUklURToKKwkgICAgICAgICAgaWYgKGNvcmVfYWNrKQorCSAgICAgICAgICAgIGlmIChjbnRfZG9uZSkKKwkgICAgICAgICAgICAgIGJlZ2luCisJICAgICAgICAgICAgICAgICAgY19zdGF0ZSAgPD0gU1RfQUNLOworCSAgICAgICAgICAgICAgICAgIGNvcmVfY21kIDw9IGBJMkNfQ01EX1JFQUQ7CisJICAgICAgICAgICAgICBlbmQKKwkgICAgICAgICAgICBlbHNlCisJICAgICAgICAgICAgICBiZWdpbgorCSAgICAgICAgICAgICAgICAgIGNfc3RhdGUgIDw9IFNUX1dSSVRFOyAgICAgICAvLyBzdGF5IGluIHNhbWUgc3RhdGUKKwkgICAgICAgICAgICAgICAgICBjb3JlX2NtZCA8PSBgSTJDX0NNRF9XUklURTsgLy8gd3JpdGUgbmV4dCBiaXQKKwkgICAgICAgICAgICAgICAgICBzaGlmdCAgICA8PSAxJ2IxOworCSAgICAgICAgICAgICAgZW5kCisKKwkgICAgICAgIFNUX1JFQUQ6CisJICAgICAgICAgIGlmIChjb3JlX2FjaykKKwkgICAgICAgICAgICBiZWdpbgorCSAgICAgICAgICAgICAgICBpZiAoY250X2RvbmUpCisJICAgICAgICAgICAgICAgICAgYmVnaW4KKwkgICAgICAgICAgICAgICAgICAgICAgY19zdGF0ZSAgPD0gU1RfQUNLOworCSAgICAgICAgICAgICAgICAgICAgICBjb3JlX2NtZCA8PSBgSTJDX0NNRF9XUklURTsKKwkgICAgICAgICAgICAgICAgICBlbmQKKwkgICAgICAgICAgICAgICAgZWxzZQorCSAgICAgICAgICAgICAgICAgIGJlZ2luCisJICAgICAgICAgICAgICAgICAgICAgIGNfc3RhdGUgIDw9IFNUX1JFQUQ7ICAgICAgIC8vIHN0YXkgaW4gc2FtZSBzdGF0ZQorCSAgICAgICAgICAgICAgICAgICAgICBjb3JlX2NtZCA8PSBgSTJDX0NNRF9SRUFEOyAvLyByZWFkIG5leHQgYml0CisJICAgICAgICAgICAgICAgICAgZW5kCisKKwkgICAgICAgICAgICAgICAgc2hpZnQgICAgPD0gMSdiMTsKKwkgICAgICAgICAgICAgICAgY29yZV90eGQgPD0gYWNrX2luOworCSAgICAgICAgICAgIGVuZAorCisJICAgICAgICBTVF9BQ0s6CisJICAgICAgICAgIGlmIChjb3JlX2FjaykKKwkgICAgICAgICAgICBiZWdpbgorCSAgICAgICAgICAgICAgIGlmIChzdG9wKQorCSAgICAgICAgICAgICAgICAgYmVnaW4KKwkgICAgICAgICAgICAgICAgICAgICBjX3N0YXRlICA8PSBTVF9TVE9QOworCSAgICAgICAgICAgICAgICAgICAgIGNvcmVfY21kIDw9IGBJMkNfQ01EX1NUT1A7CisJICAgICAgICAgICAgICAgICBlbmQKKwkgICAgICAgICAgICAgICBlbHNlCisJICAgICAgICAgICAgICAgICBiZWdpbgorCSAgICAgICAgICAgICAgICAgICAgIGNfc3RhdGUgIDw9IFNUX0lETEU7CisJICAgICAgICAgICAgICAgICAgICAgY29yZV9jbWQgPD0gYEkyQ19DTURfTk9QOworCisJICAgICAgICAgICAgICAgICAgICAgLy8gZ2VuZXJhdGUgY29tbWFuZCBhY2tub3dsZWRnZSBzaWduYWwKKwkgICAgICAgICAgICAgICAgICAgICBjbWRfYWNrICA8PSAxJ2IxOworCSAgICAgICAgICAgICAgICAgZW5kCisKKwkgICAgICAgICAgICAgICAgIC8vIGFzc2lnbiBhY2tfb3V0IG91dHB1dCB0byBiaXRfY29udHJvbGxlcl9yeGQgKGNvbnRhaW5zIGxhc3QgcmVjZWl2ZWQgYml0KQorCSAgICAgICAgICAgICAgICAgYWNrX291dCA8PSAgY29yZV9yeGQ7CisKKwkgICAgICAgICAgICAgICAgIGNvcmVfdHhkIDw9ICAxJ2IxOworCSAgICAgICAgICAgICBlbmQKKwkgICAgICAgICAgIGVsc2UKKwkgICAgICAgICAgICAgY29yZV90eGQgPD0gYWNrX2luOworCisJICAgICAgICBTVF9TVE9QOgorCSAgICAgICAgICBpZiAoY29yZV9hY2spCisJICAgICAgICAgICAgYmVnaW4KKwkgICAgICAgICAgICAgICAgY19zdGF0ZSAgPD0gU1RfSURMRTsKKwkgICAgICAgICAgICAgICAgY29yZV9jbWQgPD0gYEkyQ19DTURfTk9QOworCisJICAgICAgICAgICAgICAgIC8vIGdlbmVyYXRlIGNvbW1hbmQgYWNrbm93bGVkZ2Ugc2lnbmFsCisJICAgICAgICAgICAgICAgIGNtZF9hY2sgIDw9IDEnYjE7CisJICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICBkZWZhdWx0OiBjX3N0YXRlICA8PSBTVF9JRExFOworCisJICAgICAgZW5kY2FzZQorCSAgZW5kCitlbmRtb2R1bGUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL2kyY20vc3JjL2NvcmUvaTJjbV90b3AudiBiL3Zlcmlsb2cvcnRsL2kyY20vc3JjL2NvcmUvaTJjbV90b3AudgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zYjMyZGI5Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvaTJjbS9zcmMvY29yZS9pMmNtX3RvcC52CkBAIC0wLDAgKzEsMjgwIEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEgLCBEaW5lc2ggQW5uYXl5YSAgICAgICAgICAgICAgICAgICAgICAgICAgCisvLyAKKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogQ3JlYXRlZCBieSBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIE9NUzgwNTEgSTJDIE1hc3RlciBDb3JlIE1vZHVsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFdJU0hCT05FIHJldkIuMiBjb21wbGlhbnQgSTJDIE1hc3RlciBjb250cm9sbGVyIFRvcC1sZXZlbCAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBPTVMgODA1MSBjb3JlcyBwcm9qZWN0ICAgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9jb3Jlcy9vbXM4MDUxbWluaS8gICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIE9NUyA4MDUxIGRlZmluaXRpb25zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcihzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAtUmljaGFyZCBIZXJ2ZWlsbGUgLCAgcmljaGFyZEBhc2ljcy53cywgd3d3LmFzaWNzLndzICAgIC8vLy8KKy8vLy8gICAgICAtRGluZXNoIEFubmF5eWEsIGRpbmVzaGFAb3BlbmNvcmVzLm9yZyAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFJldmlzaW9uIDogSmFuIDYsIDIwMTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8gCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyAgICAgdjAuMCAtIERpbmVzaCBBLCA2dGggSmFuIDIwMTcKKy8vICAgICAgICAgIDEuIEluaXRhaWwgdmVyc2lvbiBwaWNrZWQgZnJvbQorLy8gICAgICAgICAgICAgIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9wcm9qZWN0cy9pMmMvCisvLyAgICAgICAgICAyLiByZW5hbWluZyBvZiByZXNldCBzaWduYWwgdG8gYXJlc2V0biBhbmQgc3Jlc2V0bgorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gQ29weXJpZ2h0IChDKSAyMDAwIEF1dGhvcnMgYW5kIE9QRU5DT1JFUy5PUkcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgIC8vLy8KKy8vLy8gcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgIC8vLy8KKy8vLy8gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgIC8vLy8KKy8vLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCAgIC8vLy8KKy8vLy8gYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IC8vLy8KKy8vLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSAgIC8vLy8KKy8vLy8gbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlICAgICAgIC8vLy8KKy8vLy8gdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCAgIC8vLy8KKy8vLy8gd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAgICAgIC8vLy8KKy8vLy8gUFVSUE9TRS4gIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIC8vLy8KKy8vLy8gZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvdXJjZTsgaWYgbm90LCBkb3dubG9hZCBpdCAgIC8vLy8KKy8vLy8gZnJvbSBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvbGdwbC5zaHRtbCAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworYGluY2x1ZGUgImkyY21fZGVmaW5lcy52IgorCittb2R1bGUgaTJjbV90b3AoCisJLy8gd2lzaGJvbmUgc2lnbmFscworCWlucHV0ICAgICAgICB3Yl9jbGtfaSwgICAgIC8vIG1hc3RlciBjbG9jayBpbnB1dAorCWlucHV0ICAgICAgICBzcmVzZXRuLCAgICAgIC8vIHN5bmNocm9ub3VzIHJlc2V0CisJaW5wdXQgICAgICAgIGFyZXNldG4sICAgICAgLy8gYXN5bmNocm9ub3VzIHJlc2V0CisJaW5wdXQgIFsyOjBdIHdiX2Fkcl9pLCAgICAgLy8gbG93ZXIgYWRkcmVzcyBiaXRzCisJaW5wdXQgIFs3OjBdIHdiX2RhdF9pLCAgICAgLy8gZGF0YWJ1cyBpbnB1dAorCW91dHB1dCByZWcgWzc6MF0gd2JfZGF0X28sICAgICAvLyBkYXRhYnVzIG91dHB1dAorCWlucHV0ICAgICAgICB3Yl93ZV9pLCAgICAgIC8vIHdyaXRlIGVuYWJsZSBpbnB1dAorCWlucHV0ICAgICAgICB3Yl9zdGJfaSwgICAgIC8vIHN0b2JlL2NvcmUgc2VsZWN0IHNpZ25hbAorCWlucHV0ICAgICAgICB3Yl9jeWNfaSwgICAgIC8vIHZhbGlkIGJ1cyBjeWNsZSBpbnB1dAorCW91dHB1dCByZWcgICB3Yl9hY2tfbywgICAgIC8vIGJ1cyBjeWNsZSBhY2tub3dsZWRnZSBvdXRwdXQKKwlvdXRwdXQgcmVnICB3Yl9pbnRhX28sICAgIC8vIGludGVycnVwdCByZXF1ZXN0IHNpZ25hbCBvdXRwdXQKKworCS8vIEkyQyBzaWduYWxzCisJLy8gaTJjIGNsb2NrIGxpbmUKKwlpbnB1dCAgICAgICAgc2NsX3BhZF9pLCAgICAvLyBTQ0wtbGluZSBpbnB1dAorCW91dHB1dCAgICAgICBzY2xfcGFkX28sICAgIC8vIFNDTC1saW5lIG91dHB1dCAoYWx3YXlzIDEnYjApCisJb3V0cHV0ICAgICAgIHNjbF9wYWRvZW5fbywgLy8gU0NMLWxpbmUgb3V0cHV0IGVuYWJsZSAoYWN0aXZlIGxvdykKKworCS8vIGkyYyBkYXRhIGxpbmUKKwlpbnB1dCAgICAgICAgc2RhX3BhZF9pLCAgICAvLyBTREEtbGluZSBpbnB1dAorCW91dHB1dCAgICAgICBzZGFfcGFkX28sICAgIC8vIFNEQS1saW5lIG91dHB1dCAoYWx3YXlzIDEnYjApCisJb3V0cHV0ICAgICAgIHNkYV9wYWRvZW5fbyAgLy8gU0RBLWxpbmUgb3V0cHV0IGVuYWJsZSAoYWN0aXZlIGxvdykKKworICAgICAgICAgKTsKKworCisJLy8KKwkvLyB2YXJpYWJsZSBkZWNsYXJhdGlvbnMKKwkvLworCisJLy8gcmVnaXN0ZXJzCisJcmVnICBbMTU6MF0gcHJlcjsgLy8gY2xvY2sgcHJlc2NhbGUgcmVnaXN0ZXIKKwlyZWcgIFsgNzowXSBjdHI7ICAvLyBjb250cm9sIHJlZ2lzdGVyCisJcmVnICBbIDc6MF0gdHhyOyAgLy8gdHJhbnNtaXQgcmVnaXN0ZXIKKwl3aXJlIFsgNzowXSByeHI7ICAvLyByZWNlaXZlIHJlZ2lzdGVyCisJcmVnICBbIDc6MF0gY3I7ICAgLy8gY29tbWFuZCByZWdpc3RlcgorCXdpcmUgWyA3OjBdIHNyOyAgIC8vIHN0YXR1cyByZWdpc3RlcgorCisJLy8gZG9uZSBzaWduYWw6IGNvbW1hbmQgY29tcGxldGVkLCBjbGVhciBjb21tYW5kIHJlZ2lzdGVyCisJd2lyZSBkb25lOworCisJLy8gY29yZSBlbmFibGUgc2lnbmFsCisJd2lyZSBjb3JlX2VuOworCXdpcmUgaWVuOworCisJLy8gc3RhdHVzIHJlZ2lzdGVyIHNpZ25hbHMKKwl3aXJlIGlyeGFjazsKKwlyZWcgIHJ4YWNrOyAgICAgICAvLyByZWNlaXZlZCBha25vd2xlZGdlIGZyb20gc2xhdmUKKwlyZWcgIHRpcDsgICAgICAgICAvLyB0cmFuc2ZlciBpbiBwcm9ncmVzcworCXJlZyAgaXJxX2ZsYWc7ICAgIC8vIGludGVycnVwdCBwZW5kaW5nIGZsYWcKKwl3aXJlIGkyY19idXN5OyAgICAvLyBidXMgYnVzeSAoc3RhcnQgc2lnbmFsIGRldGVjdGVkKQorCXdpcmUgaTJjX2FsOyAgICAgIC8vIGkyYyBidXMgYXJiaXRyYXRpb24gbG9zdAorCXJlZyAgYWw7ICAgICAgICAgIC8vIHN0YXR1cyByZWdpc3RlciBhcmJpdHJhdGlvbiBsb3N0IGJpdAorCisJLy8KKwkvLyBtb2R1bGUgYm9keQorCS8vCisKKworCS8vIGdlbmVyYXRlIHdpc2hib25lIHNpZ25hbHMKKwl3aXJlIHdiX3dhY2MgPSB3Yl93ZV9pICYgd2JfYWNrX287CisKKwkvLyBnZW5lcmF0ZSBhY2tub3dsZWRnZSBvdXRwdXQgc2lnbmFsCisJYWx3YXlzIEAocG9zZWRnZSB3Yl9jbGtfaSkKKwkgIHdiX2Fja19vIDw9ICMxIHdiX2N5Y19pICYgd2Jfc3RiX2kgJiB+d2JfYWNrX287IC8vIGJlY2F1c2UgdGltaW5nIGlzIGFsd2F5cyBob25vcmVkCisKKwkvLyBhc3NpZ24gREFUX08KKwlhbHdheXMgQChwb3NlZGdlIHdiX2Nsa19pKQorCWJlZ2luCisJICBjYXNlICh3Yl9hZHJfaSkgLy8gc3lub3BzeXMgcGFyYWxsZWxfY2FzZQorCSAgICAzJ2IwMDA6IHdiX2RhdF9vIDw9ICMxIHByZXJbIDc6MF07CisJICAgIDMnYjAwMTogd2JfZGF0X28gPD0gIzEgcHJlclsxNTo4XTsKKwkgICAgMydiMDEwOiB3Yl9kYXRfbyA8PSAjMSBjdHI7CisJICAgIDMnYjAxMTogd2JfZGF0X28gPD0gIzEgcnhyOyAvLyB3cml0ZSBpcyB0cmFuc21pdCByZWdpc3RlciAodHhyKQorCSAgICAzJ2IxMDA6IHdiX2RhdF9vIDw9ICMxIHNyOyAgLy8gd3JpdGUgaXMgY29tbWFuZCByZWdpc3RlciAoY3IpCisJICAgIDMnYjEwMTogd2JfZGF0X28gPD0gIzEgdHhyOworCSAgICAzJ2IxMTA6IHdiX2RhdF9vIDw9ICMxIGNyOworCSAgICAzJ2IxMTE6IHdiX2RhdF9vIDw9ICMxIDA7ICAgLy8gcmVzZXJ2ZWQKKwkgIGVuZGNhc2UKKwllbmQKKworCS8vIGdlbmVyYXRlIHJlZ2lzdGVycworCWFsd2F5cyBAKHBvc2VkZ2Ugd2JfY2xrX2kgb3IgbmVnZWRnZSBhcmVzZXRuKQorCSAgaWYgKCFhcmVzZXRuKQorCSAgICBiZWdpbgorCSAgICAgICAgcHJlciA8PSAjMSAxNidoZmZmZjsKKwkgICAgICAgIGN0ciAgPD0gIzEgIDgnaDA7CisJICAgICAgICB0eHIgIDw9ICMxICA4J2gwOworCSAgICBlbmQKKwkgIGVsc2UgaWYgKCFzcmVzZXRuKQorCSAgICBiZWdpbgorCSAgICAgICAgcHJlciA8PSAjMSAxNidoZmZmZjsKKwkgICAgICAgIGN0ciAgPD0gIzEgIDgnaDA7CisJICAgICAgICB0eHIgIDw9ICMxICA4J2gwOworCSAgICBlbmQKKwkgIGVsc2UKKwkgICAgaWYgKHdiX3dhY2MpCisJICAgICAgY2FzZSAod2JfYWRyX2kpIC8vIHN5bm9wc3lzIHBhcmFsbGVsX2Nhc2UKKwkgICAgICAgICAzJ2IwMDAgOiBwcmVyIFsgNzowXSA8PSAjMSB3Yl9kYXRfaTsKKwkgICAgICAgICAzJ2IwMDEgOiBwcmVyIFsxNTo4XSA8PSAjMSB3Yl9kYXRfaTsKKwkgICAgICAgICAzJ2IwMTAgOiBjdHIgICAgICAgICA8PSAjMSB3Yl9kYXRfaTsKKwkgICAgICAgICAzJ2IwMTEgOiB0eHIgICAgICAgICA8PSAjMSB3Yl9kYXRfaTsKKwkgICAgICAgICBkZWZhdWx0OiA7CisJICAgICAgZW5kY2FzZQorCisJLy8gZ2VuZXJhdGUgY29tbWFuZCByZWdpc3RlciAoc3BlY2lhbCBjYXNlKQorCWFsd2F5cyBAKHBvc2VkZ2Ugd2JfY2xrX2kgb3IgbmVnZWRnZSBhcmVzZXRuKQorCSAgaWYgKCFhcmVzZXRuKQorCSAgICBjciA8PSAjMSA4J2gwOworCSAgZWxzZSBpZiAoIXNyZXNldG4pCisJICAgIGNyIDw9ICMxIDgnaDA7CisJICBlbHNlIGlmICh3Yl93YWNjKQorCSAgICBiZWdpbgorCSAgICAgICAgaWYgKGNvcmVfZW4gJiAod2JfYWRyX2kgPT0gMydiMTAwKSApCisJICAgICAgICAgIGNyIDw9ICMxIHdiX2RhdF9pOworCSAgICBlbmQKKwkgIGVsc2UKKwkgICAgYmVnaW4KKwkgICAgICAgIGlmIChkb25lIHwgaTJjX2FsKQorCSAgICAgICAgICBjcls3OjRdIDw9ICMxIDQnaDA7ICAgICAgICAgICAvLyBjbGVhciBjb21tYW5kIGJpdHMgd2hlbiBkb25lCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9yIHdoZW4gYXJpYml0cmF0aW9uIGxvc3QKKwkgICAgICAgIGNyWzI6MV0gPD0gIzEgMidiMDsgICAgICAgICAgICAgLy8gcmVzZXJ2ZWQgYml0cworCSAgICAgICAgY3JbMF0gICA8PSAjMSAxJ2IwOyAgICAgICAgICAgICAvLyBjbGVhciBJUlFfQUNLIGJpdAorCSAgICBlbmQKKworCisJLy8gZGVjb2RlIGNvbW1hbmQgcmVnaXN0ZXIKKwl3aXJlIHN0YSAgPSBjcls3XTsKKwl3aXJlIHN0byAgPSBjcls2XTsKKwl3aXJlIHJkICAgPSBjcls1XTsKKwl3aXJlIHdyICAgPSBjcls0XTsKKwl3aXJlIGFjayAgPSBjclszXTsKKwl3aXJlIGlhY2sgPSBjclswXTsKKworCS8vIGRlY29kZSBjb250cm9sIHJlZ2lzdGVyCisJYXNzaWduIGNvcmVfZW4gPSBjdHJbN107CisJYXNzaWduIGllbiA9IGN0cls2XTsKKworCS8vIGhvb2t1cCBieXRlIGNvbnRyb2xsZXIgYmxvY2sKKwlpMmNtX2J5dGVfY3RybCB1X2J5dGVfY3RybCAoCisJCS5jbGsgICAgICAoIHdiX2Nsa19pICAgICApLAorCQkuc3Jlc2V0biAgKCBzcmVzZXRuICAgICAgKSwKKwkJLmFyZXNldG4gICggYXJlc2V0biAgICAgICksCisJCS5lbmEgICAgICAoIGNvcmVfZW4gICAgICApLAorCQkuY2xrX2NudCAgKCBwcmVyICAgICAgICAgKSwKKwkJLnN0YXJ0ICAgICggc3RhICAgICAgICAgICksCisJCS5zdG9wICAgICAoIHN0byAgICAgICAgICApLAorCQkucmVhZCAgICAgKCByZCAgICAgICAgICAgKSwKKwkJLndyaXRlICAgICggd3IgICAgICAgICAgICksCisJCS5hY2tfaW4gICAoIGFjayAgICAgICAgICApLAorCQkuZGluICAgICAgKCB0eHIgICAgICAgICAgKSwKKwkJLmNtZF9hY2sgICggZG9uZSAgICAgICAgICksCisJCS5hY2tfb3V0ICAoIGlyeGFjayAgICAgICApLAorCQkuZG91dCAgICAgKCByeHIgICAgICAgICAgKSwKKwkJLmkyY19idXN5ICggaTJjX2J1c3kgICAgICksCisJCS5pMmNfYWwgICAoIGkyY19hbCAgICAgICApLAorCQkuc2NsX2kgICAgKCBzY2xfcGFkX2kgICAgKSwKKwkJLnNjbF9vICAgICggc2NsX3BhZF9vICAgICksCisJCS5zY2xfb2VuICAoIHNjbF9wYWRvZW5fbyApLAorCQkuc2RhX2kgICAgKCBzZGFfcGFkX2kgICAgKSwKKwkJLnNkYV9vICAgICggc2RhX3BhZF9vICAgICksCisJCS5zZGFfb2VuICAoIHNkYV9wYWRvZW5fbyApCisJKTsKKworCS8vIHN0YXR1cyByZWdpc3RlciBibG9jayArIGludGVycnVwdCByZXF1ZXN0IHNpZ25hbAorCWFsd2F5cyBAKHBvc2VkZ2Ugd2JfY2xrX2kgb3IgbmVnZWRnZSBhcmVzZXRuKQorCSAgaWYgKCFhcmVzZXRuKQorCSAgICBiZWdpbgorCSAgICAgICAgYWwgICAgICAgPD0gIzEgMSdiMDsKKwkgICAgICAgIHJ4YWNrICAgIDw9ICMxIDEnYjA7CisJICAgICAgICB0aXAgICAgICA8PSAjMSAxJ2IwOworCSAgICAgICAgaXJxX2ZsYWcgPD0gIzEgMSdiMDsKKwkgICAgZW5kCisJICBlbHNlIGlmICghc3Jlc2V0bikKKwkgICAgYmVnaW4KKwkgICAgICAgIGFsICAgICAgIDw9ICMxIDEnYjA7CisJICAgICAgICByeGFjayAgICA8PSAjMSAxJ2IwOworCSAgICAgICAgdGlwICAgICAgPD0gIzEgMSdiMDsKKwkgICAgICAgIGlycV9mbGFnIDw9ICMxIDEnYjA7CisJICAgIGVuZAorCSAgZWxzZQorCSAgICBiZWdpbgorCSAgICAgICAgYWwgICAgICAgPD0gIzEgaTJjX2FsIHwgKGFsICYgfnN0YSk7CisJICAgICAgICByeGFjayAgICA8PSAjMSBpcnhhY2s7CisJICAgICAgICB0aXAgICAgICA8PSAjMSAocmQgfCB3cik7CisJICAgICAgICBpcnFfZmxhZyA8PSAjMSAoZG9uZSB8IGkyY19hbCB8IGlycV9mbGFnKSAmIH5pYWNrOyAvLyBpbnRlcnJ1cHQgcmVxdWVzdCBmbGFnIGlzIGFsd2F5cyBnZW5lcmF0ZWQKKwkgICAgZW5kCisKKwkvLyBnZW5lcmF0ZSBpbnRlcnJ1cHQgcmVxdWVzdCBzaWduYWxzCisJYWx3YXlzIEAocG9zZWRnZSB3Yl9jbGtfaSBvciBuZWdlZGdlIGFyZXNldG4pCisJICBpZiAoIWFyZXNldG4pCisJICAgIHdiX2ludGFfbyA8PSAjMSAxJ2IwOworCSAgZWxzZSBpZiAoIXNyZXNldG4pCisJICAgIHdiX2ludGFfbyA8PSAjMSAxJ2IwOworCSAgZWxzZQorCSAgICB3Yl9pbnRhX28gPD0gIzEgaXJxX2ZsYWcgJiYgaWVuOyAvLyBpbnRlcnJ1cHQgc2lnbmFsIGlzIG9ubHkgZ2VuZXJhdGVkIHdoZW4gSUVOIChpbnRlcnJ1cHQgZW5hYmxlIGJpdCBpcyBzZXQpCisKKwkvLyBhc3NpZ24gc3RhdHVzIHJlZ2lzdGVyIGJpdHMKKwlhc3NpZ24gc3JbN10gICA9IHJ4YWNrOworCWFzc2lnbiBzcls2XSAgID0gaTJjX2J1c3k7CisJYXNzaWduIHNyWzVdICAgPSBhbDsKKwlhc3NpZ24gc3JbNDoyXSA9IDMnaDA7IC8vIHJlc2VydmVkCisJYXNzaWduIHNyWzFdICAgPSB0aXA7CisJYXNzaWduIHNyWzBdICAgPSBpcnFfZmxhZzsKKworZW5kbW9kdWxlCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9pMmNtL3NyYy9pbmNsdWRlcy9pMmNtX2RlZmluZXMudiBiL3Zlcmlsb2cvcnRsL2kyY20vc3JjL2luY2x1ZGVzL2kyY21fZGVmaW5lcy52Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNjZmVlMjUKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC9pMmNtL3NyYy9pbmNsdWRlcy9pMmNtX2RlZmluZXMudgpAQCAtMCwwICsxLDI1IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEgLCBEaW5lc2ggQW5uYXl5YSAgICAgICAgICAgICAgICAgICAgICAgICAgCisvLyAKKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogQ3JlYXRlZCBieSBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorLy8KKy8vIEkyQyByZWdpc3RlcnMgd2lzaGJvbmUgYWRkcmVzc2VzCisKKy8vIGJpdGNvbnRyb2xsZXIgc3RhdGVzCitgZGVmaW5lIEkyQ19DTURfTk9QICAgNCdiMDAwMAorYGRlZmluZSBJMkNfQ01EX1NUQVJUIDQnYjAwMDEKK2BkZWZpbmUgSTJDX0NNRF9TVE9QICA0J2IwMDEwCitgZGVmaW5lIEkyQ19DTURfV1JJVEUgNCdiMDEwMAorYGRlZmluZSBJMkNfQ01EX1JFQUQgIDQnYjEwMDAKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL2xpYi9hc3luY19maWZvLnN2IGIvdmVyaWxvZy9ydGwvbGliL2FzeW5jX2ZpZm8uc3YKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmQ1OWNmYQotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL2xpYi9hc3luY19maWZvLnN2CkBAIC0wLDAgKzEsMzQxIEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEgLCBEaW5lc2ggQW5uYXl5YSAgICAgICAgICAgICAgICAgICAgICAgICAgCisvLyAKKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogQ3JlYXRlZCBieSBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorLy8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIEFTWU5DIEZJRk8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBzZHJhbSBjb250cm9sbGVyIHByb2plY3QKKyAgaHR0cHM6Ly9naXRodWIuY29tL2RpbmVzaGFubmF5eWEveWlmaXZlX3IwLmdpdCAgICAgICAgICAgCisgIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9jb3Jlcy9zZHJfY3RybC8gICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgRGVzY3JpcHRpb246IEFTWU5DIEZJRk8gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICBUbyBEbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICBub3RoaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICBBdXRob3Iocyk6ICBEaW5lc2ggQW5uYXl5YSwgZGluZXNoYUBvcGVuY29yZXMub3JnICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyBDb3B5cmlnaHQgKEMpIDIwMDAgQXV0aG9ycyBhbmQgT1BFTkNPUkVTLk9SRyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyBUaGlzIHNvdXJjZSBmaWxlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCB3aXRob3V0ICAgICAgICAgCisgcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgIAorIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSBhbmQgdGhhdCBhbnkgZGVyaXZhdGl2ZSB3b3JrIGNvbnRhaW5zICAKKyB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGFzc29jaWF0ZWQgZGlzY2xhaW1lci4gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIFRoaXMgc291cmNlIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgICAKKyBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgCisgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IAorIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgICAKK2xhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgVGhpcyBzb3VyY2UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlICAgICAgIAorIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgICAKKyB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSICAgICAgCisgUFVSUE9TRS4gIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIAorIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgIAorIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBzb3VyY2U7IGlmIG5vdCwgZG93bmxvYWQgaXQgICAKKyBmcm9tIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9sZ3BsLnNodG1sICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBhc3luYyBGSUZPCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvL2B0aW1lc2NhbGUgIDFucy8xcHMKKworbW9kdWxlIGFzeW5jX2ZpZm8gKHdyX2NsaywKKyAgICAgICAgICAgICAgICAgICB3cl9yZXNldF9uLAorICAgICAgICAgICAgICAgICAgIHdyX2VuLAorICAgICAgICAgICAgICAgICAgIHdyX2RhdGEsCisgICAgICAgICAgICAgICAgICAgZnVsbCwgICAgICAgICAgICAgICAgIC8vIHN5bmMnZWQgdG8gd3JfY2xrCisgICAgICAgICAgICAgICAgICAgYWZ1bGwsICAgICAgICAgICAgICAgICAvLyBzeW5jJ2VkIHRvIHdyX2NsaworICAgICAgICAgICAgICAgICAgIHJkX2NsaywKKyAgICAgICAgICAgICAgICAgICByZF9yZXNldF9uLAorICAgICAgICAgICAgICAgICAgIHJkX2VuLAorICAgICAgICAgICAgICAgICAgIGVtcHR5LCAgICAgICAgICAgICAgICAvLyBzeW5jJ2VkIHRvIHJkX2NsaworICAgICAgICAgICAgICAgICAgIGFlbXB0eSwgICAgICAgICAgICAgICAgLy8gc3luYydlZCB0byByZF9jbGsKKyAgICAgICAgICAgICAgICAgICByZF9kYXRhKTsKKworICAgcGFyYW1ldGVyIFcgPSA0J2Q4OworICAgcGFyYW1ldGVyIERQID0gMydkNDsKKyAgIHBhcmFtZXRlciBXUl9GQVNUID0gMSdiMTsKKyAgIHBhcmFtZXRlciBSRF9GQVNUID0gMSdiMTsKKyAgIHBhcmFtZXRlciBGVUxMX0RQID0gRFA7CisgICBwYXJhbWV0ZXIgRU1QVFlfRFAgPSAxJ2IwOworCisgICBwYXJhbWV0ZXIgQVcgPSAoRFAgPT0gMikgICA/IDEgOiAKKwkJICAoRFAgPT0gNCkgICA/IDIgOgorICAgICAgICAgICAgICAgICAgKERQID09IDgpICAgPyAzIDoKKyAgICAgICAgICAgICAgICAgIChEUCA9PSAxNikgID8gNCA6CisgICAgICAgICAgICAgICAgICAoRFAgPT0gMzIpICA/IDUgOgorICAgICAgICAgICAgICAgICAgKERQID09IDY0KSAgPyA2IDoKKyAgICAgICAgICAgICAgICAgIChEUCA9PSAxMjgpID8gNyA6CisgICAgICAgICAgICAgICAgICAoRFAgPT0gMjU2KSA/IDggOiAwOworCisgICBvdXRwdXQgW1ctMSA6IDBdICByZF9kYXRhOworICAgaW5wdXQgW1ctMSA6IDBdICAgd3JfZGF0YTsKKyAgIGlucHV0ICAgICAgICAgICAgIHdyX2Nsaywgd3JfcmVzZXRfbiwgd3JfZW4sIHJkX2NsaywgcmRfcmVzZXRfbiwKKyAgICAgICAgICAgICAgICAgICAgIHJkX2VuOworICAgb3V0cHV0ICAgICAgICAgICAgZnVsbCwgZW1wdHk7CisgICBvdXRwdXQgICAgICAgICAgICBhZnVsbCwgYWVtcHR5OyAgICAgICAvLyBhYm91dCBmdWxsIGFuZCBhYm91dCB0byBlbXB0eQorCisKKyAgIC8vIHN5bm9wc3lzIHRyYW5zbGF0ZV9vZmYKKworICAgaW5pdGlhbCBiZWdpbgorICAgICAgaWYgKEFXID09IDApIGJlZ2luCisgICAgICAgICAkZGlzcGxheSAoIiVtIDogRVJST1IhISEgRmlmbyBkZXB0aCAlZCBub3QgaW4gcmFuZ2UgMiB0byAyNTYiLCBEUCk7CisgICAgICBlbmQgLy8gaWYgKEFXID09IDApCisgICBlbmQgLy8gaW5pdGlhbCBiZWdpbgorCisgICAvLyBzeW5vcHN5cyB0cmFuc2xhdGVfb24KKworICAgcmVnIFtXLTEgOiAwXSAgICBtZW1bRFAtMSA6IDBdOworCisgICAvKioqKioqKioqKioqKioqKioqKioqKiogd3JpdGUgc2lkZSAqKioqKioqKioqKioqKioqKioqKioqKiovCisgICByZWcgW0FXOjBdIHN5bmNfcmRfcHRyXzAsIHN5bmNfcmRfcHRyXzE7IAorICAgd2lyZSBbQVc6MF0gc3luY19yZF9wdHI7CisgICByZWcgW0FXOjBdIHdyX3B0ciwgZ3JleV93cl9wdHI7CisgICByZWcgW0FXOjBdIGdyZXlfcmRfcHRyOworICAgcmVnIGZ1bGxfcTsKKyAgIHdpcmUgZnVsbF9jOworICAgd2lyZSBhZnVsbF9jOworICAgd2lyZSBbQVc6MF0gd3JfcHRyX2luYyA9IHdyX3B0ciArIDEnYjE7CisgICB3aXJlIFtBVzowXSB3cl9jbnQgPSBnZXRfY250KHdyX3B0ciwgc3luY19yZF9wdHIpOworCisgICBhc3NpZ24gZnVsbF9jICA9ICh3cl9jbnQgPT0gRlVMTF9EUCkgPyAxJ2IxIDogMSdiMDsKKyAgIGFzc2lnbiBhZnVsbF9jID0gKHdyX2NudCA9PSBGVUxMX0RQLTEpID8gMSdiMSA6IDEnYjA7CisKKworICAgYWx3YXlzIEAocG9zZWRnZSB3cl9jbGsgb3IgbmVnZWRnZSB3cl9yZXNldF9uKSBiZWdpbgorCWlmICghd3JfcmVzZXRfbikgYmVnaW4KKwkJd3JfcHRyIDw9IDA7CisJCWdyZXlfd3JfcHRyIDw9IDA7CisJCWZ1bGxfcSA8PSAwOwkKKwllbmQKKwllbHNlIGlmICh3cl9lbikgYmVnaW4KKwkJd3JfcHRyIDw9IHdyX3B0cl9pbmM7CisJCWdyZXlfd3JfcHRyIDw9IGJpbjJncmV5KHdyX3B0cl9pbmMpOworCQlpZiAod3JfY250ID09IChGVUxMX0RQLTEpKSBiZWdpbgorCQkJZnVsbF9xIDw9IDEnYjE7CisJCWVuZAorCWVuZAorCWVsc2UgYmVnaW4KKwkgICAgCWlmIChmdWxsX3EgJiYgKHdyX2NudDxGVUxMX0RQKSkgYmVnaW4KKwkJCWZ1bGxfcSA8PSAxJ2IwOworCSAgICAgCWVuZAorCWVuZAorICAgIGVuZAorCisgICAgYXNzaWduIGZ1bGwgID0gKFdSX0ZBU1QgPT0gMSkgPyBmdWxsX2MgOiBmdWxsX3E7CisgICAgYXNzaWduIGFmdWxsID0gYWZ1bGxfYzsKKworICAgIGFsd2F5cyBAKHBvc2VkZ2Ugd3JfY2xrKSBiZWdpbgorCWlmICh3cl9lbikgYmVnaW4KKwkJbWVtW3dyX3B0cltBVy0xOjBdXSA8PSB3cl9kYXRhOworCWVuZAorICAgIGVuZAorCisgICAgd2lyZSBbQVc6MF0gZ3JleV9yZF9wdHJfZGx5IDsKKyAgICBhc3NpZ24gIzEgZ3JleV9yZF9wdHJfZGx5ID0gZ3JleV9yZF9wdHI7CisKKyAgICAvLyByZWFkIHBvaW50ZXIgc3luY2hyb25pemVyCisgICAgYWx3YXlzIEAocG9zZWRnZSB3cl9jbGsgb3IgbmVnZWRnZSB3cl9yZXNldF9uKSBiZWdpbgorCWlmICghd3JfcmVzZXRfbikgYmVnaW4KKwkJc3luY19yZF9wdHJfMCA8PSAwOworCQlzeW5jX3JkX3B0cl8xIDw9IDA7CisJZW5kCisJZWxzZSBiZWdpbgorCQlzeW5jX3JkX3B0cl8wIDw9IGdyZXlfcmRfcHRyX2RseTsJCQorCQlzeW5jX3JkX3B0cl8xIDw9IHN5bmNfcmRfcHRyXzA7CisJZW5kCisgICAgZW5kCisKKyAgICBhc3NpZ24gc3luY19yZF9wdHIgPSBncmV5MmJpbihzeW5jX3JkX3B0cl8xKTsKKworICAgLyoqKioqKioqKioqKioqKioqKioqKioqKiByZWFkIHNpZGUgKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICByZWcgW0FXOjBdIHN5bmNfd3JfcHRyXzAsIHN5bmNfd3JfcHRyXzE7IAorICAgd2lyZSBbQVc6MF0gc3luY193cl9wdHI7CisgICByZWcgW0FXOjBdIHJkX3B0cjsKKyAgIHJlZyBlbXB0eV9xOworICAgd2lyZSBlbXB0eV9jOworICAgd2lyZSBhZW1wdHlfYzsKKyAgIHdpcmUgW0FXOjBdIHJkX3B0cl9pbmMgPSByZF9wdHIgKyAxJ2IxOworICAgd2lyZSBbQVc6MF0gc3luY193cl9wdHJfZGVjID0gc3luY193cl9wdHIgLSAxJ2IxOworICAgd2lyZSBbQVc6MF0gcmRfY250ID0gZ2V0X2NudChzeW5jX3dyX3B0ciwgcmRfcHRyKTsKKyAKKyAgIGFzc2lnbiBlbXB0eV9jICA9IChyZF9jbnQgPT0gMCkgPyAxJ2IxIDogMSdiMDsKKyAgIGFzc2lnbiBhZW1wdHlfYyA9IChyZF9jbnQgPT0gMSkgPyAxJ2IxIDogMSdiMDsKKworICAgYWx3YXlzIEAocG9zZWRnZSByZF9jbGsgb3IgbmVnZWRnZSByZF9yZXNldF9uKSBiZWdpbgorICAgICAgaWYgKCFyZF9yZXNldF9uKSBiZWdpbgorICAgICAgICAgcmRfcHRyIDw9IDA7CisJIGdyZXlfcmRfcHRyIDw9IDA7CisJIGVtcHR5X3EgPD0gMSdiMTsKKyAgICAgIGVuZAorICAgICAgZWxzZSBiZWdpbgorICAgICAgICAgaWYgKHJkX2VuKSBiZWdpbgorICAgICAgICAgICAgcmRfcHRyIDw9IHJkX3B0cl9pbmM7CisgICAgICAgICAgICBncmV5X3JkX3B0ciA8PSBiaW4yZ3JleShyZF9wdHJfaW5jKTsKKyAgICAgICAgICAgIGlmIChyZF9jbnQ9PShFTVBUWV9EUCsxKSkgYmVnaW4KKyAgICAgICAgICAgICAgIGVtcHR5X3EgPD0gMSdiMTsKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgZW5kCisgICAgICAgICBlbHNlIGJlZ2luCisgICAgICAgICAgICBpZiAoZW1wdHlfcSAmJiAocmRfY250IT1FTVBUWV9EUCkpIGJlZ2luCisJICAgICAgZW1wdHlfcSA8PSAxJ2IwOworCSAgICBlbmQKKyAgICAgICAgIGVuZAorICAgICAgIGVuZAorICAgIGVuZAorCisgICAgYXNzaWduIGVtcHR5ICA9IChSRF9GQVNUID09IDEpID8gZW1wdHlfYyA6IGVtcHR5X3E7CisgICAgYXNzaWduIGFlbXB0eSA9IGFlbXB0eV9jOworCisgICAgcmVnIFtXLTEgOiAwXSAgcmRfZGF0YV9xOworCisgICB3aXJlIFtXLTEgOiAwXSByZF9kYXRhX2MgPSBtZW1bcmRfcHRyW0FXLTE6MF1dOworICAgYWx3YXlzIEAocG9zZWRnZSByZF9jbGspIGJlZ2luCisJcmRfZGF0YV9xIDw9IHJkX2RhdGFfYzsKKyAgIGVuZAorICAgYXNzaWduIHJkX2RhdGEgID0gKFJEX0ZBU1QgPT0gMSkgPyByZF9kYXRhX2MgOiByZF9kYXRhX3E7CisKKyAgICB3aXJlIFtBVzowXSBncmV5X3dyX3B0cl9kbHkgOworICAgIGFzc2lnbiAjMSBncmV5X3dyX3B0cl9kbHkgPSAgZ3JleV93cl9wdHI7CisKKyAgICAvLyB3cml0ZSBwb2ludGVyIHN5bmNocm9uaXplcgorICAgIGFsd2F5cyBAKHBvc2VkZ2UgcmRfY2xrIG9yIG5lZ2VkZ2UgcmRfcmVzZXRfbikgYmVnaW4KKwlpZiAoIXJkX3Jlc2V0X24pIGJlZ2luCisJICAgc3luY193cl9wdHJfMCA8PSAwOworCSAgIHN5bmNfd3JfcHRyXzEgPD0gMDsKKwllbmQKKwllbHNlIGJlZ2luCisJICAgc3luY193cl9wdHJfMCA8PSBncmV5X3dyX3B0cl9kbHk7CQkKKwkgICBzeW5jX3dyX3B0cl8xIDw9IHN5bmNfd3JfcHRyXzA7CisJZW5kCisgICAgZW5kCisgICAgYXNzaWduIHN5bmNfd3JfcHRyID0gZ3JleTJiaW4oc3luY193cl9wdHJfMSk7CisKKwkKKy8qKioqKioqKioqKioqKioqKioqKioqKiogZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2Z1bmN0aW9uIFtBVzowXSBiaW4yZ3JleTsKK2lucHV0IFtBVzowXSBiaW47CityZWcgWzg6MF0gYmluXzg7CityZWcgWzg6MF0gZ3JleV84OworYmVnaW4KKwliaW5fOCA9IGJpbjsKKwlncmV5XzhbMTowXSA9IGRvX2dyZXkoYmluXzhbMjowXSk7CisJZ3JleV84WzM6Ml0gPSBkb19ncmV5KGJpbl84WzQ6Ml0pOworCWdyZXlfOFs1OjRdID0gZG9fZ3JleShiaW5fOFs2OjRdKTsKKwlncmV5XzhbNzo2XSA9IGRvX2dyZXkoYmluXzhbODo2XSk7CisJZ3JleV84WzhdID0gYmluXzhbOF07CisJYmluMmdyZXkgPSBncmV5Xzg7CitlbmQKK2VuZGZ1bmN0aW9uCisKK2Z1bmN0aW9uIFtBVzowXSBncmV5MmJpbjsKK2lucHV0IFtBVzowXSBncmV5OworcmVnIFs4OjBdIGdyZXlfODsKK3JlZyBbODowXSBiaW5fODsKK2JlZ2luCisJZ3JleV84ID0gZ3JleTsKKwliaW5fOFs4XSA9IGdyZXlfOFs4XTsKKwliaW5fOFs3OjZdID0gZG9fYmluKHtiaW5fOFs4XSwgZ3JleV84Wzc6Nl19KTsKKwliaW5fOFs1OjRdID0gZG9fYmluKHtiaW5fOFs2XSwgZ3JleV84WzU6NF19KTsKKwliaW5fOFszOjJdID0gZG9fYmluKHtiaW5fOFs0XSwgZ3JleV84WzM6Ml19KTsKKwliaW5fOFsxOjBdID0gZG9fYmluKHtiaW5fOFsyXSwgZ3JleV84WzE6MF19KTsKKwlncmV5MmJpbiA9IGJpbl84OworZW5kCitlbmRmdW5jdGlvbgorCisKK2Z1bmN0aW9uIFsxOjBdIGRvX2dyZXk7CitpbnB1dCBbMjowXSBiaW47CitiZWdpbgorCWlmIChiaW5bMl0pIGJlZ2luICAvLyBkbyByZXZlcnNlIGdyZXkKKwkJY2FzZSAoYmluWzE6MF0pIAorCQkJMidiMDA6IGRvX2dyZXkgPSAyJ2IxMDsKKwkJCTInYjAxOiBkb19ncmV5ID0gMidiMTE7CisJCQkyJ2IxMDogZG9fZ3JleSA9IDInYjAxOworCQkJMidiMTE6IGRvX2dyZXkgPSAyJ2IwMDsKKwkJZW5kY2FzZQorCWVuZAorCWVsc2UgYmVnaW4KKwkJY2FzZSAoYmluWzE6MF0pIAorCQkJMidiMDA6IGRvX2dyZXkgPSAyJ2IwMDsKKwkJCTInYjAxOiBkb19ncmV5ID0gMidiMDE7CisJCQkyJ2IxMDogZG9fZ3JleSA9IDInYjExOworCQkJMidiMTE6IGRvX2dyZXkgPSAyJ2IxMDsKKwkJZW5kY2FzZQorCWVuZAorZW5kCitlbmRmdW5jdGlvbgorCitmdW5jdGlvbiBbMTowXSBkb19iaW47CitpbnB1dCBbMjowXSBncmV5OworYmVnaW4KKwlpZiAoZ3JleVsyXSkgYmVnaW4JLy8gYWN0dWFsbHkgYmluWzJdCisJCWNhc2UgKGdyZXlbMTowXSkKKwkJCTInYjEwOiBkb19iaW4gPSAyJ2IwMDsKKwkJCTInYjExOiBkb19iaW4gPSAyJ2IwMTsKKwkJCTInYjAxOiBkb19iaW4gPSAyJ2IxMDsKKwkJCTInYjAwOiBkb19iaW4gPSAyJ2IxMTsKKwkJZW5kY2FzZQorCWVuZAorCWVsc2UgYmVnaW4KKwkJY2FzZSAoZ3JleVsxOjBdKQorCQkJMidiMDA6IGRvX2JpbiA9IDInYjAwOworCQkJMidiMDE6IGRvX2JpbiA9IDInYjAxOworCQkJMidiMTE6IGRvX2JpbiA9IDInYjEwOworCQkJMidiMTA6IGRvX2JpbiA9IDInYjExOworCQllbmRjYXNlCisJZW5kCitlbmQKK2VuZGZ1bmN0aW9uCisJCQkKK2Z1bmN0aW9uIFtBVzowXSBnZXRfY250OworaW5wdXQgW0FXOjBdIHdyX3B0ciwgcmRfcHRyOworYmVnaW4KKwlpZiAod3JfcHRyID49IHJkX3B0cikgYmVnaW4KKwkJZ2V0X2NudCA9ICh3cl9wdHIgLSByZF9wdHIpOwkKKwllbmQKKwllbHNlIGJlZ2luCisJCWdldF9jbnQgPSBEUCoyIC0gKHJkX3B0ciAtIHdyX3B0cik7CisJZW5kCitlbmQKK2VuZGZ1bmN0aW9uCisKKy8vIHN5bm9wc3lzIHRyYW5zbGF0ZV9vZmYKK2Fsd2F5cyBAKHBvc2VkZ2Ugd3JfY2xrKSBiZWdpbgorICAgaWYgKHdyX2VuICYmIGZ1bGwpIGJlZ2luCisgICAgICAkZGlzcGxheSgkdGltZSwgIiVtIEVycm9yISBhZmlmbyBvdmVyZmxvdyEiKTsKKyAgICAgICRzdG9wOworICAgZW5kCitlbmQKKworYWx3YXlzIEAocG9zZWRnZSByZF9jbGspIGJlZ2luCisgICBpZiAocmRfZW4gJiYgZW1wdHkpIGJlZ2luCisgICAgICAkZGlzcGxheSgkdGltZSwgIiVtIGVycm9yISBhZmlmbyB1bmRlcmZsb3chIik7CisgICAgICAkc3RvcDsKKyAgIGVuZAorZW5kCisvLyBzeW5vcHN5cyB0cmFuc2xhdGVfb24KKworZW5kbW9kdWxlCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9saWIvYXN5bmNfZmlmb190aC5zdiBiL3Zlcmlsb2cvcnRsL2xpYi9hc3luY19maWZvX3RoLnN2Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA1ODYwZjgKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC9saWIvYXN5bmNfZmlmb190aC5zdgpAQCAtMCwwICsxLDQwNCBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxICwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgIAorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IENyZWF0ZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBPTVMgODA1MSBjb3JlcyBjb21tb24gbGlicmFyeSBNb2R1bGUgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgT01TIDgwNTEgY29yZXMgcHJvamVjdCAgICAgICAgICAgICAvLy8vCisvLy8vICBodHRwczovL2dpdGh1Yi5jb20vZGluZXNoYW5uYXl5YS95aWZpdmVfcjAuZ2l0ICAgICAgICAgICAgICAvLy8vCisvLy8vICBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvY29yZXMvb21zODA1MW1pbmkvICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIEFzeW5jIEZpZm8gd2l0aCB0aHJlc2hvbGQgdHJhY2tpbmcvc3RhdHVzICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUbyBEbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIG5vdGhpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBBdXRob3Iocyk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgLSBEaW5lc2ggQW5uYXl5YSwgZGluZXNoYUBvcGVuY29yZXMub3JnICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBSZXZpc2lvbiA6IE5vdiAyNiwgMjAxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLyAKKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gQ29weXJpZ2h0IChDKSAyMDAwIEF1dGhvcnMgYW5kIE9QRU5DT1JFUy5PUkcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgIC8vLy8KKy8vLy8gcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgIC8vLy8KKy8vLy8gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgIC8vLy8KKy8vLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCAgIC8vLy8KKy8vLy8gYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IC8vLy8KKy8vLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSAgIC8vLy8KKy8vLy8gbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlICAgICAgIC8vLy8KKy8vLy8gdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCAgIC8vLy8KKy8vLy8gd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAgICAgIC8vLy8KKy8vLy8gUFVSUE9TRS4gIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIC8vLy8KKy8vLy8gZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvdXJjZTsgaWYgbm90LCBkb3dubG9hZCBpdCAgIC8vLy8KKy8vLy8gZnJvbSBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvbGdwbC5zaHRtbCAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBhc3luY19maWZvOjogYXN5bmMgRklGTworLy8gICAgRm9sbG93aW5nIHR3byBwb3J0cyBhcmUgbmV3bHkgYWRkZWQKKy8vICAgICAgICAxLiBBdCB3cml0ZSBjbG9jayBkb21haW46CisvLyAgICAgICAgICAgd3JfdG90YWxfZnJlZV9zcGFjZSAtLT4gIEluZGljYXRlIHRvdGFsIGZyZWUgdHJhbnNmZXIgYXZhaWxhYmxlIAorLy8gICAgICAgIDIuIEF0IHJlYWQgY2xvY2sgZG9tYWluOgorLy8gICAgICAgICAgIHJkX3RvdGFsX2F2YWwgICAgICAgLS0+ICBJbmRpY2F0ZSB0b3RhbCBubyBvZiB0cmFuc2ZlciBhdmFpbGFibGUKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlIGFzeW5jX2ZpZm9fdGggKAorCSAgICAgICAgICAgd3JfY2xrLAorICAgICAgICAgICAgICAgICAgIHdyX3Jlc2V0X24sCisgICAgICAgICAgICAgICAgICAgd3JfZW4sCisgICAgICAgICAgICAgICAgICAgd3JfZGF0YSwKKyAgICAgICAgICAgICAgICAgICBmdWxsLCAgICAgICAgICAgICAgICAgLy8gc3luYydlZCB0byB3cl9jbGsKKyAgICAgICAgICAgICAgICAgICBhZnVsbCwgICAgICAgICAgICAgICAgIC8vIHN5bmMnZWQgdG8gd3JfY2xrCisgICAgICAgICAgICAgICAgICAgd3JfdG90YWxfZnJlZV9zcGFjZSwKKyAgICAgICAgICAgICAgICAgICByZF9jbGssCisgICAgICAgICAgICAgICAgICAgcmRfcmVzZXRfbiwKKyAgICAgICAgICAgICAgICAgICByZF9lbiwKKyAgICAgICAgICAgICAgICAgICBlbXB0eSwgICAgICAgICAgICAgICAgLy8gc3luYydlZCB0byByZF9jbGsKKyAgICAgICAgICAgICAgICAgICBhZW1wdHksICAgICAgICAgICAgICAgIC8vIHN5bmMnZWQgdG8gcmRfY2xrCisgICAgICAgICAgICAgICAgICAgcmRfdG90YWxfYXZhbCwKKyAgICAgICAgICAgICAgICAgICByZF9kYXRhKTsKKworICAgcGFyYW1ldGVyIFcgPSA0J2Q4OworICAgcGFyYW1ldGVyIERQID0gMydkNDsKKyAgIHBhcmFtZXRlciBXUl9GQVNUID0gMSdiMTsKKyAgIHBhcmFtZXRlciBSRF9GQVNUID0gMSdiMTsKKyAgIHBhcmFtZXRlciBGVUxMX0RQID0gRFA7CisgICBwYXJhbWV0ZXIgRU1QVFlfRFAgPSAxJ2IwOworCisgICBwYXJhbWV0ZXIgQVcgPSAoRFAgPT0gMikgICA/IDEgOiAKKwkJICAoRFAgPT0gNCkgICA/IDIgOgorICAgICAgICAgICAgICAgICAgKERQID09IDgpICAgPyAzIDoKKyAgICAgICAgICAgICAgICAgIChEUCA9PSAxNikgID8gNCA6CisgICAgICAgICAgICAgICAgICAoRFAgPT0gMzIpICA/IDUgOgorICAgICAgICAgICAgICAgICAgKERQID09IDY0KSAgPyA2IDoKKyAgICAgICAgICAgICAgICAgIChEUCA9PSAxMjgpID8gNyA6CisgICAgICAgICAgICAgICAgICAoRFAgPT0gMjU2KSA/IDggOiAwOworCisgICBvdXRwdXQgW1ctMSA6IDBdICByZF9kYXRhOworICAgaW5wdXQgW1ctMSA6IDBdICAgd3JfZGF0YTsKKyAgIGlucHV0ICAgICAgICAgICAgIHdyX2Nsaywgd3JfcmVzZXRfbiwgd3JfZW4sIHJkX2NsaywgcmRfcmVzZXRfbiwKKyAgICAgICAgICAgICAgICAgICAgIHJkX2VuOworICAgb3V0cHV0ICAgICAgICAgICAgZnVsbCwgZW1wdHk7CisgICBvdXRwdXQgICAgICAgICAgICBhZnVsbCwgYWVtcHR5OyAvLyBhYm91dCBmdWxsIGFuZCBhYm91dCB0byBlbXB0eQorICAgb3V0cHV0ICAgW0FXOjBdICAgd3JfdG90YWxfZnJlZV9zcGFjZTsgLy8gVG90YWwgTnVtYmVyIG9mIGZyZWUgc3BhY2UgYXZhbCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdy5yLnQgd3JpdGUgY2xrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vdGU6IFdpdGhvdXQgYWNjb3VudGluZyBieXRlIGVuYWJsZXMKKyAgIG91dHB1dCAgIFtBVzowXSAgIHJkX3RvdGFsX2F2YWw7ICAgICAgIC8vIFRvdGFsIE51bWJlciBvZiB3b3JkcyBhdmFpYWxibGUgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHcuci50IHJkIGNsb2NrLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBub3RlOiBXaXRob3V0IGFjY291bnRpbmcgYnl0ZSBlbmFibGVzCisgICAvLyBzeW5vcHN5cyB0cmFuc2xhdGVfb2ZmCisKKyAgIGluaXRpYWwgYmVnaW4KKyAgICAgIGlmIChBVyA9PSAwKSBiZWdpbgorICAgICAgICAgJGRpc3BsYXkgKCIlbSA6IEVSUk9SISEhIEZpZm8gZGVwdGggJWQgbm90IGluIHJhbmdlIDIgdG8gMjU2IiwgRFApOworICAgICAgZW5kIC8vIGlmIChBVyA9PSAwKQorICAgZW5kIC8vIGluaXRpYWwgYmVnaW4KKworICAgLy8gc3lub3BzeXMgdHJhbnNsYXRlX29uCisgICByZWcgW1ctMSA6IDBdICAgIG1lbVtEUC0xIDogMF07CisKKyAgIC8qKioqKioqKioqKioqKioqKioqKioqKiB3cml0ZSBzaWRlICoqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgIHJlZyBbQVc6MF0gc3luY19yZF9wdHJfMCwgc3luY19yZF9wdHJfMTsgCisgICB3aXJlIFtBVzowXSBzeW5jX3JkX3B0cjsKKyAgIHJlZyBbQVc6MF0gd3JfcHRyLCBncmV5X3dyX3B0cjsKKyAgIHJlZyBbQVc6MF0gZ3JleV9yZF9wdHI7CisgICByZWcgZnVsbF9xOworICAgd2lyZSBmdWxsX2M7CisgICB3aXJlIGFmdWxsX2M7CisgICB3aXJlIFtBVzowXSB3cl9wdHJfaW5jID0gd3JfcHRyICsgMSdiMTsKKyAgIHdpcmUgW0FXOjBdIHdyX2NudCA9IGdldF9jbnQod3JfcHRyLCBzeW5jX3JkX3B0cik7CisKKyAgIGFzc2lnbiBmdWxsX2MgID0gKHdyX2NudCA9PSBGVUxMX0RQKSA/IDEnYjEgOiAxJ2IwOworICAgYXNzaWduIGFmdWxsX2MgPSAod3JfY250ID09IEZVTExfRFAtMSkgPyAxJ2IxIDogMSdiMDsKKworICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLy8gU2hvd3MgdG90YWwgbnVtYmVyIG9mIHdvcmRzIAorICAgLy8gb2YgZnJlZSBzcGFjZSBhdmFpbGFibGUgdy5yLnQgd3JpdGUgY2xvY2sKKyAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIAorICAgYXNzaWduIHdyX3RvdGFsX2ZyZWVfc3BhY2UgPSBGVUxMX0RQIC0gd3JfY250OworCisgICBhbHdheXMgQChwb3NlZGdlIHdyX2NsayBvciBuZWdlZGdlIHdyX3Jlc2V0X24pIGJlZ2luCisJaWYgKCF3cl9yZXNldF9uKSBiZWdpbgorCQl3cl9wdHIgPD0gMDsKKwkJZ3JleV93cl9wdHIgPD0gMDsKKwkJZnVsbF9xIDw9IDA7CQorCWVuZAorCWVsc2UgaWYgKHdyX2VuKSBiZWdpbgorCQl3cl9wdHIgPD0gd3JfcHRyX2luYzsKKwkJZ3JleV93cl9wdHIgPD0gYmluMmdyZXkod3JfcHRyX2luYyk7CisJCWlmICh3cl9jbnQgPT0gKEZVTExfRFAtMSkpIGJlZ2luCisJCQlmdWxsX3EgPD0gMSdiMTsKKwkJZW5kCisJZW5kCisJZWxzZSBiZWdpbgorCSAgICAJaWYgKGZ1bGxfcSAmJiAod3JfY250PEZVTExfRFApKSBiZWdpbgorCQkJZnVsbF9xIDw9IDEnYjA7CisJICAgICAJZW5kCisJZW5kCisgICAgZW5kCisKKyAgICBhc3NpZ24gZnVsbCAgPSAoV1JfRkFTVCA9PSAxKSA/IGZ1bGxfYyA6IGZ1bGxfcTsKKyAgICBhc3NpZ24gYWZ1bGwgPSBhZnVsbF9jOworCisgICAgYWx3YXlzIEAocG9zZWRnZSB3cl9jbGspIGJlZ2luCisJaWYgKHdyX2VuKSBiZWdpbgorCQltZW1bd3JfcHRyW0FXLTE6MF1dIDw9IHdyX2RhdGE7CisJZW5kCisgICAgZW5kCisKKyAgICB3aXJlIFtBVzowXSBncmV5X3JkX3B0cl9kbHkgOworICAgIGFzc2lnbiAjMSBncmV5X3JkX3B0cl9kbHkgPSBncmV5X3JkX3B0cjsKKworICAgIC8vIHJlYWQgcG9pbnRlciBzeW5jaHJvbml6ZXIKKyAgICBhbHdheXMgQChwb3NlZGdlIHdyX2NsayBvciBuZWdlZGdlIHdyX3Jlc2V0X24pIGJlZ2luCisJaWYgKCF3cl9yZXNldF9uKSBiZWdpbgorCQlzeW5jX3JkX3B0cl8wIDw9IDA7CisJCXN5bmNfcmRfcHRyXzEgPD0gMDsKKwllbmQKKwllbHNlIGJlZ2luCisJCXN5bmNfcmRfcHRyXzAgPD0gZ3JleV9yZF9wdHJfZGx5OwkJCisJCXN5bmNfcmRfcHRyXzEgPD0gc3luY19yZF9wdHJfMDsKKwllbmQKKyAgICBlbmQKKworICAgIGFzc2lnbiBzeW5jX3JkX3B0ciA9IGdyZXkyYmluKHN5bmNfcmRfcHRyXzEpOworCisgICAvKioqKioqKioqKioqKioqKioqKioqKioqIHJlYWQgc2lkZSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgIHJlZyBbQVc6MF0gc3luY193cl9wdHJfMCwgc3luY193cl9wdHJfMTsgCisgICB3aXJlIFtBVzowXSBzeW5jX3dyX3B0cjsKKyAgIHJlZyBbQVc6MF0gcmRfcHRyOworICAgcmVnIGVtcHR5X3E7CisgICB3aXJlIGVtcHR5X2M7CisgICB3aXJlIGFlbXB0eV9jOworICAgd2lyZSBbQVc6MF0gcmRfcHRyX2luYyA9IHJkX3B0ciArIDEnYjE7CisgICB3aXJlIFtBVzowXSBzeW5jX3dyX3B0cl9kZWMgPSBzeW5jX3dyX3B0ciAtIDEnYjE7CisgICB3aXJlIFtBVzowXSByZF9jbnQgPSBnZXRfY250KHN5bmNfd3JfcHRyLCByZF9wdHIpOworIAorICAgYXNzaWduIGVtcHR5X2MgID0gKHJkX2NudCA9PSAwKSA/IDEnYjEgOiAxJ2IwOworICAgYXNzaWduIGFlbXB0eV9jID0gKHJkX2NudCA9PSAxKSA/IDEnYjEgOiAxJ2IwOworICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgLy8gU2hvd3MgdG90YWwgbnVtYmVyIG9mIHdvcmRzIAorICAgLy8gc3BhY2UgYXZhaWxhYmxlIHcuci50IHdyaXRlIGNsb2NrCisgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAKKyAgIGFzc2lnbiByZF90b3RhbF9hdmFsID0gcmRfY250OworCisgICBhbHdheXMgQChwb3NlZGdlIHJkX2NsayBvciBuZWdlZGdlIHJkX3Jlc2V0X24pIGJlZ2luCisJaWYgKCFyZF9yZXNldF9uKSBiZWdpbgorCQlyZF9wdHIgPD0gMDsKKwkJZ3JleV9yZF9wdHIgPD0gMDsKKwkJZW1wdHlfcSA8PSAxJ2IxOworCWVuZAorCWVsc2UgYmVnaW4KKwkJaWYgKHJkX2VuKSBiZWdpbgorCQkJcmRfcHRyIDw9IHJkX3B0cl9pbmM7CisJCQlncmV5X3JkX3B0ciA8PSBiaW4yZ3JleShyZF9wdHJfaW5jKTsKKwkJCWlmIChyZF9jbnQ9PShFTVBUWV9EUCsxKSkgYmVnaW4KKwkJCQllbXB0eV9xIDw9IDEnYjE7CisJCQllbmQKKwkJZW5kCisJCWVsc2UgYmVnaW4KKwkJCWlmIChlbXB0eV9xICYmIChyZF9jbnQhPUVNUFRZX0RQKSkgYmVnaW4KKwkJCQllbXB0eV9xIDw9IDEnYjA7CisJCQllbmQKKwkJZW5kCisJZW5kCisgICAgZW5kCisKKyAgICBhc3NpZ24gZW1wdHkgID0gKFJEX0ZBU1QgPT0gMSkgPyBlbXB0eV9jIDogZW1wdHlfcTsKKyAgICBhc3NpZ24gYWVtcHR5ID0gYWVtcHR5X2M7CisKKyAgICBhc3NpZ24gcmRfZGF0YSA9IG1lbVtyZF9wdHJbQVctMTowXV07CisKKyAgICB3aXJlIFtBVzowXSBncmV5X3dyX3B0cl9kbHkgOworICAgIGFzc2lnbiAjMSBncmV5X3dyX3B0cl9kbHkgPSAgZ3JleV93cl9wdHI7CisKKyAgICAvLyB3cml0ZSBwb2ludGVyIHN5bmNocm9uaXplcgorICAgIGFsd2F5cyBAKHBvc2VkZ2UgcmRfY2xrIG9yIG5lZ2VkZ2UgcmRfcmVzZXRfbikgYmVnaW4KKwlpZiAoIXJkX3Jlc2V0X24pIGJlZ2luCisJCXN5bmNfd3JfcHRyXzAgPD0gMDsKKwkJc3luY193cl9wdHJfMSA8PSAwOworCWVuZAorCWVsc2UgYmVnaW4KKwkJc3luY193cl9wdHJfMCA8PSBncmV5X3dyX3B0cl9kbHk7CQkKKwkJc3luY193cl9wdHJfMSA8PSBzeW5jX3dyX3B0cl8wOworCWVuZAorICAgIGVuZAorICAgIGFzc2lnbiBzeW5jX3dyX3B0ciA9IGdyZXkyYmluKHN5bmNfd3JfcHRyXzEpOworCisJCisvKioqKioqKioqKioqKioqKioqKioqKioqIGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitmdW5jdGlvbiBbQVc6MF0gYmluMmdyZXk7CitpbnB1dCBbQVc6MF0gYmluOworcmVnIFs4OjBdIGJpbl84OworcmVnIFs4OjBdIGdyZXlfODsKK2JlZ2luCisJYmluXzggPSBiaW47CisJZ3JleV84WzE6MF0gPSBkb19ncmV5KGJpbl84WzI6MF0pOworCWdyZXlfOFszOjJdID0gZG9fZ3JleShiaW5fOFs0OjJdKTsKKwlncmV5XzhbNTo0XSA9IGRvX2dyZXkoYmluXzhbNjo0XSk7CisJZ3JleV84Wzc6Nl0gPSBkb19ncmV5KGJpbl84Wzg6Nl0pOworCWdyZXlfOFs4XSA9IGJpbl84WzhdOworCWJpbjJncmV5ID0gZ3JleV84OworZW5kCitlbmRmdW5jdGlvbgorCitmdW5jdGlvbiBbQVc6MF0gZ3JleTJiaW47CitpbnB1dCBbQVc6MF0gZ3JleTsKK3JlZyBbODowXSBncmV5Xzg7CityZWcgWzg6MF0gYmluXzg7CitiZWdpbgorCWdyZXlfOCA9IGdyZXk7CisJYmluXzhbOF0gPSBncmV5XzhbOF07CisJYmluXzhbNzo2XSA9IGRvX2Jpbih7YmluXzhbOF0sIGdyZXlfOFs3OjZdfSk7CisJYmluXzhbNTo0XSA9IGRvX2Jpbih7YmluXzhbNl0sIGdyZXlfOFs1OjRdfSk7CisJYmluXzhbMzoyXSA9IGRvX2Jpbih7YmluXzhbNF0sIGdyZXlfOFszOjJdfSk7CisJYmluXzhbMTowXSA9IGRvX2Jpbih7YmluXzhbMl0sIGdyZXlfOFsxOjBdfSk7CisJZ3JleTJiaW4gPSBiaW5fODsKK2VuZAorZW5kZnVuY3Rpb24KKworCitmdW5jdGlvbiBbMTowXSBkb19ncmV5OworaW5wdXQgWzI6MF0gYmluOworYmVnaW4KKwlpZiAoYmluWzJdKSBiZWdpbiAgLy8gZG8gcmV2ZXJzZSBncmV5CisJCWNhc2UgKGJpblsxOjBdKSAKKwkJCTInYjAwOiBkb19ncmV5ID0gMidiMTA7CisJCQkyJ2IwMTogZG9fZ3JleSA9IDInYjExOworCQkJMidiMTA6IGRvX2dyZXkgPSAyJ2IwMTsKKwkJCTInYjExOiBkb19ncmV5ID0gMidiMDA7CisJCWVuZGNhc2UKKwllbmQKKwllbHNlIGJlZ2luCisJCWNhc2UgKGJpblsxOjBdKSAKKwkJCTInYjAwOiBkb19ncmV5ID0gMidiMDA7CisJCQkyJ2IwMTogZG9fZ3JleSA9IDInYjAxOworCQkJMidiMTA6IGRvX2dyZXkgPSAyJ2IxMTsKKwkJCTInYjExOiBkb19ncmV5ID0gMidiMTA7CisJCWVuZGNhc2UKKwllbmQKK2VuZAorZW5kZnVuY3Rpb24KKworZnVuY3Rpb24gWzE6MF0gZG9fYmluOworaW5wdXQgWzI6MF0gZ3JleTsKK2JlZ2luCisJaWYgKGdyZXlbMl0pIGJlZ2luCS8vIGFjdHVhbGx5IGJpblsyXQorCQljYXNlIChncmV5WzE6MF0pCisJCQkyJ2IxMDogZG9fYmluID0gMidiMDA7CisJCQkyJ2IxMTogZG9fYmluID0gMidiMDE7CisJCQkyJ2IwMTogZG9fYmluID0gMidiMTA7CisJCQkyJ2IwMDogZG9fYmluID0gMidiMTE7CisJCWVuZGNhc2UKKwllbmQKKwllbHNlIGJlZ2luCisJCWNhc2UgKGdyZXlbMTowXSkKKwkJCTInYjAwOiBkb19iaW4gPSAyJ2IwMDsKKwkJCTInYjAxOiBkb19iaW4gPSAyJ2IwMTsKKwkJCTInYjExOiBkb19iaW4gPSAyJ2IxMDsKKwkJCTInYjEwOiBkb19iaW4gPSAyJ2IxMTsKKwkJZW5kY2FzZQorCWVuZAorZW5kCitlbmRmdW5jdGlvbgorCQkJCitmdW5jdGlvbiBbQVc6MF0gZ2V0X2NudDsKK2lucHV0IFtBVzowXSB3cl9wdHIsIHJkX3B0cjsKK2JlZ2luCisJaWYgKHdyX3B0ciA+PSByZF9wdHIpIGJlZ2luCisJCWdldF9jbnQgPSAod3JfcHRyIC0gcmRfcHRyKTsJCisJZW5kCisJZWxzZSBiZWdpbgorCQlnZXRfY250ID0gRFAqMiAtIChyZF9wdHIgLSB3cl9wdHIpOworCWVuZAorZW5kCitlbmRmdW5jdGlvbgorCisvLyBzeW5vcHN5cyB0cmFuc2xhdGVfb2ZmCithbHdheXMgQChwb3NlZGdlIHdyX2NsaykgYmVnaW4KKyAgIGlmICh3cl9lbiAmJiBmdWxsKSBiZWdpbgorICAgICAgJGRpc3BsYXkoJHRpbWUsICIlbSBFcnJvciEgYWZpZm8gb3ZlcmZsb3chIik7CisgICAgICAkc3RvcDsKKyAgIGVuZAorZW5kCisKK2Fsd2F5cyBAKHBvc2VkZ2UgcmRfY2xrKSBiZWdpbgorICAgaWYgKHJkX2VuICYmIGVtcHR5KSBiZWdpbgorICAgICAgJGRpc3BsYXkoJHRpbWUsICIlbSBlcnJvciEgYWZpZm8gdW5kZXJmbG93ISIpOworICAgICAgJHN0b3A7CisgICBlbmQKK2VuZAorCisvLyBncmF5IGNvZGUgbW9uaXRvcgorcmVnIFtBVzowXSBsYXN0X2d3cl9wdHI7CithbHdheXMgQChwb3NlZGdlIHdyX2NsayBvciBuZWdlZGdlIHdyX3Jlc2V0X24pIGJlZ2luCisgICBpZiAoIXdyX3Jlc2V0X24pIGJlZ2luCisgICAgICBsYXN0X2d3cl9wdHIgPD0gIzEgMDsKKyAgIGVuZAorICAgZWxzZSBpZiAobGFzdF9nd3JfcHRyICE9PSBncmV5X3dyX3B0cikgYmVnaW4KKyAgICAgIGNoZWNrX3B0cl9jaGcobGFzdF9nd3JfcHRyLCBncmV5X3dyX3B0cik7CisgICAgICBsYXN0X2d3cl9wdHIgPD0gIzEgZ3JleV93cl9wdHI7CisgICBlbmQgCQorZW5kCisKK3JlZyBbQVc6MF0gbGFzdF9ncmRfcHRyOworYWx3YXlzIEAocG9zZWRnZSByZF9jbGsgb3IgbmVnZWRnZSByZF9yZXNldF9uKSBiZWdpbgorICAgaWYgKCFyZF9yZXNldF9uKSBiZWdpbgorICAgICBsYXN0X2dyZF9wdHIgPD0gIzEgMDsKKyAgIGVuZAorICAgZWxzZSBpZiAobGFzdF9ncmRfcHRyICE9PSBncmV5X3JkX3B0cikgYmVnaW4KKyAgICAgIGNoZWNrX3B0cl9jaGcobGFzdF9ncmRfcHRyLCBncmV5X3JkX3B0cik7CisgICAgICBsYXN0X2dyZF9wdHIgPD0gIzEgZ3JleV9yZF9wdHI7CisgICBlbmQgCQorZW5kCisKK3Rhc2sgY2hlY2tfcHRyX2NoZzsKK2lucHV0IFtBVzowXSBsYXN0X3B0cjsKK2lucHV0IFtBVzowXSBjdXJfcHRyOworaW50ZWdlciBpOworaW50ZWdlciBwdHJfZGlmZjsKK2JlZ2luCisgICBwdHJfZGlmZiA9IDA7CisgICBmb3IgKGk9MDsgaTw9IEFXOyBpPWkrIDEnYjEpIGJlZ2luCisgICAgICBpZiAobGFzdF9wdHJbaV0gIT0gY3VyX3B0cltpXSkgYmVnaW4KKyAgICAgICAgIHB0cl9kaWZmID0gcHRyX2RpZmYgKyAxJ2IxOworICAgICAgZW5kCisgICBlbmQKKyAgIGlmIChwdHJfZGlmZiAhPT0gMSkgYmVnaW4KKyAgICAgICRkaXNwbGF5KCR0aW1lLCAiJW0sIEVSUk9SISBhc3luYyBmaWZvIHB0ciBoYXMgY2hhbmdlZCBtb3JlIHRoYW4gbm9lIGJpdCwgbGFzdD0laCwgY3VyPSVoIiwKKwkJCQlsYXN0X3B0ciwgY3VyX3B0cik7CisgICAgICAkc3RvcDsKKyAgIGVuZAorZW5kCitlbmR0YXNrIAkKKyAgIC8vIHN5bm9wc3lzIHRyYW5zbGF0ZV9vbgorCitlbmRtb2R1bGUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL2xpYi9hc3luY19yZWdfYnVzLnN2IGIvdmVyaWxvZy9ydGwvbGliL2FzeW5jX3JlZ19idXMuc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMwMjcwMQotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL2xpYi9hc3luY19yZWdfYnVzLnN2CkBAIC0wLDAgKzEsMzA1IEBACisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBUaGlzIGJsb2NrIHRyYW5zbGF0ZSB0aGUgUmVnIEJ1cyB0cmFuc2FjdGlvbiBmcm9tIGluX2NsayBjbG9jayBkb21haW4gdG8gb3V0X2NsayBjbG9jayBkb21haW4uCisvLyBUaGlzIGJsb2NrIGFsc28gZ2VuZXJhdGUgYW5kIHRlcm1pbmF0ZSB0aGUgdHJhbnNmZXIgaWYgNTEyIGN5Y2xlIHRyYW5zYWN0aW9uIGlzIG5vdCBjb21wbGV0ZWQKKy8vICBBc3N1bXB0aW9uCisvLyAgICAxLiBpbl9yZWdfY3Mgd2lsbCBiZSBhc3NlcnRlZCB1bnRpbGwgYWNrIGlzIHJlY2VpdmVkCisvLyAgICAyLiByZWdfYWRkci9yZWdfd2RhdGEvcmVnX2JlIHdpbGwgYmUgYXZhaWxhYmxlIGR1cmluZyByZWdfY3MKKy8vICAgIDMuIEV2ZXIgYWZ0ZXIgb3V0X3JlZ19hY2sgZGUtYXNzZXJ0ZWQgcmVnX3JkYXRhIGhvbGRzIHRoZSBvbGQgZGF0YQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZSBhc3luY19yZWdfYnVzICgKKyAgICAvLyBJbml0aWF0b3IgZGVjbGFydGlvbgorICAgICAgICAgICBpbl9jbGsgICAgICAgICAgICAgICAgICAgICwKKyAgICAgICAgICAgaW5fcmVzZXRfbiAgICAgICAgICAgICAgICAsCisgICAgICAgLy8gUmVnIEJ1cyBNYXN0ZXIKKyAgICAgICAgICAvLyBvdXRwdXRzCisgICAgICAgICAgaW5fcmVnX3JkYXRhICAgICAgICAgICAgICAgLAorICAgICAgICAgIGluX3JlZ19hY2sgICAgICAgICAgICAgICAgICwKKyAgICAgICAgICBpbl9yZWdfdGltZW91dCAgICAgICAgICAgICAsCisKKyAgICAgICAgICAvLyBJbnB1dHMKKyAgICAgICAgICBpbl9yZWdfY3MgICAgICAgICAgICAgICAgICAsCisgICAgICAgICAgaW5fcmVnX2FkZHIgICAgICAgICAgICAgICAgLAorICAgICAgICAgIGluX3JlZ193ZGF0YSAgICAgICAgICAgICAgICwKKyAgICAgICAgICBpbl9yZWdfd3IgICAgICAgICAgICAgICAgICAsCisgICAgICAgICAgaW5fcmVnX2JlICAgICAgICAgICAgICAgICAgLAorCisgICAgLy8gVGFyZ2V0IERlY2xhcmF0aW9uCisgICAgICAgICAgb3V0X2NsayAgICAgICAgICAgICAgICAgICAgLAorICAgICAgICAgIG91dF9yZXNldF9uICAgICAgICAgICAgICAgICwKKyAgICAgIC8vIFJlZyBCdXMgU2xhdmUKKyAgICAgICAgICAvLyBvdXRwdXQKKyAgICAgICAgICBvdXRfcmVnX2NzICAgICAgICAgICAgICAgICAsCisgICAgICAgICAgb3V0X3JlZ19hZGRyICAgICAgICAgICAgICAgLAorICAgICAgICAgIG91dF9yZWdfd2RhdGEgICAgICAgICAgICAgICwKKyAgICAgICAgICBvdXRfcmVnX3dyICAgICAgICAgICAgICAgICAsCisgICAgICAgICAgb3V0X3JlZ19iZSAgICAgICAgICAgICAgICAgLAorCisgICAgICAgICAgLy8gSW5wdXRzCisgICAgICAgICAgb3V0X3JlZ19yZGF0YSAgICAgICAgICAgICAgLAorICAgICAgICAgIG91dF9yZWdfYWNrCisgICApOworcGFyYW1ldGVyIEFXID0gMjYgOyAvLyBBZGRyZXNzIHdpZHRoCitwYXJhbWV0ZXIgRFcgPSAzMiA7IC8vIERBVEEgV0lEVEgKK3BhcmFtZXRlciBCRVcgPSA0IDsgLy8gQnl0ZSBlbmFibGUgd2lkdGgKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSZWcgQnVzIHJlZyBpbm91dCBkZWNscmF0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2lucHV0ICAgICAgICAgICAgICBpbl9jbGsgICAgICAgICAgICAgOyAvLyBJbml0aWF0b3IgZG9tYWluIGNsb2NrCitpbnB1dCAgICAgICAgICAgICAgaW5fcmVzZXRfbiAgICAgICAgIDsgLy8gSW5pdGlhdG9yIGRvbWFpbiByZXNldAorCitpbnB1dCAgICAgICAgICAgICAgaW5fcmVnX2NzICAgICAgICAgIDsgLy8gSW5pdGlhdG9yIENoaXAgU2VsZWN0CitpbnB1dCAgW0FXLTE6MF0gICAgaW5fcmVnX2FkZHIgICAgICAgIDsgLy8gQWRkcmVzcyBidXMKK2lucHV0ICBbRFctMTowXSAgICBpbl9yZWdfd2RhdGEgICAgICAgOyAvLyBXcml0ZSBkYXRhCitpbnB1dCAgICAgICAgICAgICAgaW5fcmVnX3dyICAgICAgICAgIDsgLy8gUmVhZC93cml0ZSBpbmRpY2F0aW9uLCAxLT4gd3JpdGUKK2lucHV0ICBbQkVXLTE6MF0gICBpbl9yZWdfYmUgICAgICAgICAgOyAvLyBCeXRlIHZhbGlkIGZvciB3cml0ZQorCitvdXRwdXQgW0RXLTE6MF0gICAgaW5fcmVnX3JkYXRhICAgICAgIDsgLy8gUmVhZCBEYXRhCitvdXRwdXQgICAgICAgICAgICAgaW5fcmVnX2FjayAgICAgICAgIDsgLy8gUmVnIEFjY2VzcyBkb25lIAorb3V0cHV0ICAgICAgICAgICAgIGluX3JlZ190aW1lb3V0ICAgICA7IC8vIEFjY2VzcyBlcnJvciBpbmRpY2F0aW9uIHB1bHNlIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdlbmVyZXJhdGVkIGlmIG5vIHRhcmdldCBhY2sgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVjZWl2ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aXRoaW4gNTEyIGN5Y2xlIAorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUmVnIEJ1cyB0YXJnZXQgaW5vdXQgZGVjbHJhdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworaW5wdXQgICAgICAgICAgICAgIG91dF9jbGsgICAgICAgICAgIDsgLy8gVGFyZ2V0IGRvbWFpbiBjbG9jaworaW5wdXQgICAgICAgICAgICAgIG91dF9yZXNldF9uICAgICAgIDsgLy8gVHJhZ2V0IGRvbWFpbiByZXNldAorCitpbnB1dCBbRFctMTowXSAgICAgb3V0X3JlZ19yZGF0YSAgICAgOyAvLyBSZWFkIGRhdGEKK2lucHV0ICAgICAgICAgICAgICBvdXRfcmVnX2FjayAgICAgICA7IC8vIHRhcmdldCBmaW5pc2gKKworb3V0cHV0ICAgICAgICAgICAgIG91dF9yZWdfY3MgICAgICAgIDsgLy8gVGFyZ2V0IFN0YXJ0IGluZGljYXRpb24KK291dHB1dCBbQVctMTowXSAgICBvdXRfcmVnX2FkZHIgICAgICA7IC8vIFRhcmdldCBhZGRyZXNzCitvdXRwdXQgW0RXLTE6MF0gICAgb3V0X3JlZ193ZGF0YSAgICAgOyAvLyBUYXJnZXQgd3JpdGUgZGF0YQorb3V0cHV0ICAgICAgICAgICAgIG91dF9yZWdfd3IgICAgICAgIDsgLy8gVGFyZ2V0IFJlYWQvd3JpdGUgaW5kLCAxLT4gV3JpdGUKK291dHB1dCBbQkVXLTE6MF0gICBvdXRfcmVnX2JlICAgICAgICA7IC8vIFRhcmdldCBCeXRlIGVuYWJsZQorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBJbml0aWF0b3IgTG9jYWwgRGVjbGFyYXRpb24KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3BhcmFtZXRlciBJTklfSURMRSAgICAgICAgICAgICA9IDInYjAwOworcGFyYW1ldGVyIElOSV9XQUlUX0FDSyAgICAgICAgID0gMidiMDE7CitwYXJhbWV0ZXIgSU5JX1dBSVRfVEFSX0RPTkUgICAgPSAyJ2IxMDsKKworcmVnICBbMTowXSAgICAgICAgIGluX3N0YXRlICAgICAgICAgICA7IC8vIHJlZyBzdGF0ZQorcmVnICBbODowXSAgICAgICAgIGluX3RpbWVyICAgICAgICAgICA7IC8vIHJlZyB0aW1vdXQgbW9uaXRvciB0aW1lcgorcmVnICAgICAgICAgICAgICAgIGluX2ZsYWcgICAgICAgICAgICA7IC8vIHJlZyBoYW5kc2hha2UgZmxhZyAKK3JlZyAgICAgICAgICAgICAgICBpbl9yZWdfYWNrICAgICAgICAgOyAvLyByZWcgcmVnIGFjY2VzcyBmaW5pc2ggaW5kCityZWcgIFtEVy0xOjBdICAgICAgaW5fcmVnX3JkYXRhICAgICAgIDsgLy8gcmVnIHJlZyBhY2Nlc3MgcmVhZCBkYXRhCityZWcgICAgICAgICAgICAgICAgaW5fcmVnX3RpbWVvdXQgICAgIDsgLy8gcmVnIHRpbWUgb3V0IGVycm9yIHB1bHNlCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFRhcmdldCBMb2NhbCBEZWNsYXJhdGlvbgorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcGFyYW1ldGVyIFRBUl9JRExFICAgICAgICAgICA9IDInYjAwOworcGFyYW1ldGVyIFRBUl9XQUlUX0FDSyAgICAgICA9IDInYjAxOworcGFyYW1ldGVyIFRBUl9XQUlUX0lOSV9ET05FICA9IDInYjEwOworCityZWcgWzE6MF0gICAgIG91dF9zdGF0ZSAgICAgICAgICAgICAgIDsgLy8gdGFyZ2V0IHN0YXRlIG1hY2hpbmUKK3JlZyAgICAgICAgICAgb3V0X2ZsYWcgICAgICAgICAgICAgICAgOyAvLyB0YXJnZXQgaGFuZHNoYWtlIGZsYWcKK3JlZyAgICAgICAgICAgb3V0X3JlZ19jcyAgICAgICAgOyAvLyBUYXJnZXQgU3RhcnQgaW5kaWNhdGlvbgorCityZWcgWzg6MF0gICAgIGluaXRpdGFvcl90aW1lciAgICAgICAgIDsgLy8gdGltZW91dCBjb3VudGVyCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBEb3VibGUgc3luYyBsb2NhbCBkZWNsYXJhdGlvbgorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCityZWcgICAgICAgICAgIGluX2ZsYWdfcyAgICAgICAgICAgICAgOyAvLyBJbml0aWF0b3IgaGFuZHNoYWtlIGZsYWcgc3luYyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdpdGggdGFyZ2V0IGNsayAKK3JlZyAgICAgICAgICAgaW5fZmxhZ19zcyAgICAgICAgICAgICA7IC8vIEluaXRpYXRvciBoYW5kc2hha2UgZmxhZyBzeW5jIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2l0aCB0YXJnZXQgY2xrCisKK3JlZyAgICAgICAgICAgb3V0X2ZsYWdfcyAgICAgICAgICAgICA7IC8vIHRhcmdldCBoYW5kc2hha2UgZmxhZyBzeW5jIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2l0aCBpbml0aWF0b3IgY2xrCityZWcgICAgICAgICAgIG91dF9mbGFnX3NzICAgICAgICAgICAgOyAvLyB0YXJnZXQgaGFuZHNoYWtlIGZsYWcgc3luYyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdpdGggaW5pdGlhdG9yIGNsY2sKKworCisKKworYXNzaWduICBvdXRfcmVnX2FkZHIgID0gaW5fcmVnX2FkZHI7Cithc3NpZ24gIG91dF9yZWdfd2RhdGEgPSBpbl9yZWdfd2RhdGE7Cithc3NpZ24gIG91dF9yZWdfd3IgICAgPSBpbl9yZWdfd3I7Cithc3NpZ24gIG91dF9yZWdfYmUgICAgPSBpbl9yZWdfYmU7CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gSW5pdGlhdG9yIERvbWFpbiBsb2dpYworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYWx3YXlzIEAobmVnZWRnZSBpbl9yZXNldF9uIG9yIHBvc2VkZ2UgaW5fY2xrKQorYmVnaW4KKyAgIGlmKGluX3Jlc2V0X24gPT0gMSdiMCkKKyAgIGJlZ2luCisgICAgICBpbl9zdGF0ZSAgICAgIDw9IElOSV9JRExFOworICAgICAgaW5fdGltZXIgICAgICA8PSA5J2gwOworICAgICAgaW5fZmxhZyAgICAgICA8PSAxJ2IwOworICAgICAgaW5fcmVnX2FjayAgICA8PSAxJ2IwOworICAgICAgaW5fcmVnX3JkYXRhICA8PSB7RFcgezEnYjB9fTsKKyAgICAgIGluX3JlZ190aW1lb3V0PD0gMSdiMDsKKyAgICBlbmQKKyAgICBlbHNlIAorICAgIGJlZ2luCisgICAgICAgY2FzZShpbl9zdGF0ZSkKKyAgICAgICBJTklfSURMRSA6IAorICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgaW5fcmVnX2FjayAgICAgICAgIDw9IDEnYjA7CisgICAgICAgICAgICAgaW5fcmVnX3RpbWVvdXQgICAgIDw9IDEnYjA7CisJICAgICBpbl90aW1lciAgICAgICAgICAgPD0gJ2gwOworICAgICAgICAgICAgIC8vIFdhaXQgZm9yIEluaXRpYXRvciBTdGFydCBJbmRpY2F0aW9uCisgICAgICAgICAgICAgLy8gT25jZSB0aGUgcmVnIHN0YXJ0IGlzIGRldGVjdGVkCisgICAgICAgICAgICAgLy8gU2V0IHRoZSByZWcgZmxhZyBhbmQgbW92ZSB0byBXQUlUCisgICAgICAgICAgICAgLy8gZm9yIGFjayBmcm9tIFRhcmdldAorICAgICAgICAgICAgIGlmKGluX3JlZ19jcykgYmVnaW4KKyAgICAgICAgICAgICAgICBpbl9mbGFnICAgICAgIDw9IDEnYjE7CisgICAgICAgICAgICAgICAgaW5fc3RhdGUgICAgICA8PSBJTklfV0FJVF9BQ0s7CisgICAgICAgICAgICAgZW5kCisgICAgICAgICAgZW5kCisgICAgICAgSU5JX1dBSVRfQUNLIDoKKyAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAvLyAxLiBXYWl0IGZvciBPdXQgRmxhZyA9PSAxCisgICAgICAgICAgICAgLy8gMi4gSWYgdGhlIE91dCBGbGFnID0xIGlzIG5vdAorICAgICAgICAgICAgIC8vICAgIGRldGVjdGVkIHdpdGluIDUxMiBjeWNsZSwgZXhpdCB3aXRoIGVycm9yIGluZGljYXRpb24gCisgICAgICAgICAgICAgLy8gMy4gSWYgVGFyZ2V0IGZsYWcgZGV0ZWN0ZWQsIHRoZW4gZGUtYXNzZXJ0CisgICAgICAgICAgICAgLy8gIHJlZ19mbGFnID0gMCBhbmQgbW92ZSB0aGUgdGFyX3dhaXRfZG9uZSBzdGF0ZQorICAgICAgICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAKKyAgICAgICAgICAgICBpZihvdXRfZmxhZ19zcyA9PSAxJ2IxKSBiZWdpbgorICAgICAgICAgICAgICAgIGluX2ZsYWcgICAgICAgICAgICAgPD0gMSdiMDsKKyAgICAgICAgICAgICAgICBpbl9yZWdfcmRhdGEgICAgICAgIDw9IG91dF9yZWdfcmRhdGE7CisJCWluX3JlZ19hY2sgICAgICAgICAgPD0gMSdiMTsKKyAgICAgICAgICAgICAgICBpbl9zdGF0ZSAgICAgICAgICAgPD0gSU5JX1dBSVRfVEFSX0RPTkU7CisgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgZWxzZSBiZWdpbgorICAgICAgICAgICAgICAgICBpZihpbl90aW1lciA9PSA5J2gxRkYpIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIGluX2ZsYWcgICAgICAgICAgPD0gMSdiMDsKKyAgICAgICAgICAgICAgICAgICAgaW5fcmVnX2FjayAgICAgICA8PSAxJ2IxOworICAgICAgICAgICAgICAgICAgICBpbl9yZWdfcmRhdGEgICAgIDw9IDMyJ2gwOworICAgICAgICAgICAgICAgICAgICBpbl9yZWdfdGltZW91dCAgIDw9IDEnYjE7CisgICAgICAgICAgICAgICAgICAgIGluX3N0YXRlICAgICAgICAgPD0gSU5JX0lETEU7CisgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICBlbHNlIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICBpbl90aW1lciAgICAgICA8PSBpbl90aW1lciArIDE7CisgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgIGVuZAorICAgICAgICAgICBlbmQKKyAgICAgIElOSV9XQUlUX1RBUl9ET05FIDoKKyAgICAgICAgICBiZWdpbgorCSAgICAgaW5fcmVnX2FjayAgICAgICAgICA8PSAxJ2IwOworICAgICAgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAvLyAxLiBXYWl0IGZvciBUYXJnZXQgRmxhZyA9PSAwCisgICAgICAgICAgICAgLy8gMi4gSWYgVGFyZ2V0IGZsYWcgPSAwIGRldGVjdGVkLCB0aGVuIHJlbW92ZQorICAgICAgICAgICAgIC8vICBtb3ZlIHRoZSBpZGxlIHN0YXRlCisgICAgICAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIAorICAgICAgICAgICAgIGlmKG91dF9mbGFnX3NzID09IDEnYjApIGJlZ2luCisgICAgICAgICAgICAgICAgaW5fc3RhdGUgICAgICA8PSBJTklfSURMRTsKKyAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgZW5kCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgIGluX3N0YXRlICAgICAgICAgPD0gSU5JX0lETEU7CisgICAgICAgICAgICAgIGluX3RpbWVyICAgICAgICAgPD0gOSdoMDsKKyAgICAgICAgICAgICAgaW5fZmxhZyAgICAgICAgICA8PSAxJ2IwOworICAgICAgICAgICAgICBpbl9yZWdfcmRhdGEgICAgIDw9IHtEVyB7MSdiMH19OworICAgICAgICAgICAgICBpbl9yZWdfdGltZW91dCAgIDw9IDEnYjA7CisgICAgICAgICAgIGVuZAorICAgICAgZW5kY2FzZQorICAgIGVuZCAKK2VuZAorCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyB0YXJnZXQgRG9tYWluIGxvZ2ljCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYWx3YXlzIEAobmVnZWRnZSBvdXRfcmVzZXRfbiBvciBwb3NlZGdlIG91dF9jbGspCitiZWdpbgorICAgaWYob3V0X3Jlc2V0X24gPT0gMSdiMCkKKyAgIGJlZ2luCisgICAgICBvdXRfc3RhdGUgICAgICAgICA8PSBUQVJfSURMRTsKKyAgICAgIG91dF9mbGFnICAgICAgICAgIDw9IDEnYjA7CisgICAgICBvdXRfcmVnX2NzICAgICAgICA8PSAxJ2IwOworICAgIGVuZAorICAgIGVsc2UgCisgICAgYmVnaW4KKyAgICAgICBjYXNlKG91dF9zdGF0ZSkKKyAgICAgICBUQVJfSURMRSA6IAorICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgLy8gMS4gV2FpdCBmb3IgSW5pdGlhdG9yIGZsYWcgYXNzZXJ0aW9uIAorICAgICAgICAgICAgIC8vIDIuIE9uY2UgdGhlIHJlZyBmbGFnID0gMSBpcyBkZXRlY3RlZAorICAgICAgICAgICAgIC8vICAgIFNldCB0aGUgdGFyZ2V0X2ZsYWcgYW5kIGluaXRpYXRlIHRoZQorCSAgICAgLy8gICAgdGFyZ2V0IHJlZyBidXMgYWNjZXNzCisgICAgICAgICAgICAgICAgb3V0X2ZsYWcgICAgICAgICAgPD0gMSdiMDsKKyAgICAgICAgICAgICAgaWYoaW5fZmxhZ19zcykgYmVnaW4KKyAgICAgICAgICAgICAgICBvdXRfcmVnX2NzICAgICAgICA8PSAxJ2IxOworICAgICAgICAgICAgICAgIG91dF9zdGF0ZSAgICAgICAgIDw9IFRBUl9XQUlUX0FDSzsKKyAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgZW5kCisgICAgICBUQVJfV0FJVF9BQ0sgOgorICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgIC8vIDEuIFdhaXQgZm9yIHJlZyBGbGFnID09IDAKKyAgICAgICAgICAgICAvLyAyLiBJZiByZWcgZmxhZyA9IDAgZGV0ZWN0ZWQsIHRoZW4gCisgICAgICAgICAgICAgLy8gIG1vdmUgdGhlIGlkbGUgc3RhdGUKKyAgICAgICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCisgICAgICAgICAgICAgaWYob3V0X3JlZ19hY2sgPT0gMSdiMSkgCisJICAgICBiZWdpbgorICAgICAgICAgICAgICAgIG91dF9yZWdfY3MgICAgICAgICA8PSAxJ2IwOworCQlvdXRfZmxhZyAgICAgICAgICAgPD0gMSdiMTsgICAKKyAgICAgICAgICAgICAgICBvdXRfc3RhdGUgICAgICAgICAgPD0gVEFSX1dBSVRfSU5JX0RPTkU7CisgICAgICAgICAgICAgZW5kCisgICAgICAgICAgIGVuZAorICAgICAgIFRBUl9XQUlUX0lOSV9ET05FIDoKKyAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgIGlmKGluX2ZsYWdfc3MgPT0gMSdiMCkgYmVnaW4KKwkJb3V0X2ZsYWcgICAgIDw9IDEnYjA7ICAgCisgICAgICAgICAgICAgICAgb3V0X3N0YXRlICAgIDw9IFRBUl9JRExFOworICAgICAgICAgICAgIGVuZAorICAgICAgICAgICBlbmQKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgb3V0X3N0YXRlICAgICAgICA8PSBUQVJfSURMRTsKKyAgICAgICAgICAgICBvdXRfcmVnX2NzICAgICAgIDw9IDEnYjA7CisgICAgICAgICAgICAgb3V0X2ZsYWcgICAgICAgICA8PSAxJ2IwOworICAgICAgICAgICBlbmQKKyAgICAgIGVuZGNhc2UKKyAgICBlbmQgCitlbmQKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBEb3VibGUgU3luYyBMb2dpYworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCithbHdheXMgQChuZWdlZGdlIGluX3Jlc2V0X24gb3IgcG9zZWRnZSBpbl9jbGspCitiZWdpbgorICAgaWYoaW5fcmVzZXRfbiA9PSAxJ2IwKQorICAgYmVnaW4KKyAgICAgIG91dF9mbGFnX3MgICAgICAgICAgIDw9IDEnYjA7CisgICAgICBvdXRfZmxhZ19zcyAgICAgICAgICA8PSAxJ2IwOworICAgZW5kCisgICBlbHNlCisgICBiZWdpbgorICAgICAgb3V0X2ZsYWdfcyAgICAgICAgICAgPD0gb3V0X2ZsYWc7CisgICAgICBvdXRfZmxhZ19zcyAgICAgICAgICA8PSBvdXRfZmxhZ19zOworICAgZW5kCitlbmQKKworCithbHdheXMgQChuZWdlZGdlIG91dF9yZXNldF9uIG9yIHBvc2VkZ2Ugb3V0X2NsaykKK2JlZ2luCisgICBpZihvdXRfcmVzZXRfbiA9PSAxJ2IwKQorICAgYmVnaW4KKyAgICAgIGluX2ZsYWdfcyAgICAgICAgPD0gMSdiMDsKKyAgICAgIGluX2ZsYWdfc3MgICAgICAgPD0gMSdiMDsKKyAgIGVuZAorICAgZWxzZQorICAgYmVnaW4KKyAgICAgIGluX2ZsYWdfcyAgICAgICAgPD0gaW5fZmxhZzsKKyAgICAgIGluX2ZsYWdfc3MgICAgICAgPD0gaW5fZmxhZ19zOworICAgZW5kCitlbmQKKworCitlbmRtb2R1bGUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL2xpYi9hc3luY193Yi5zdiBiL3Zlcmlsb2cvcnRsL2xpYi9hc3luY193Yi5zdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTVkNGE2Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvbGliL2FzeW5jX3diLnN2CkBAIC0wLDAgKzEsMjM0IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEgLCBEaW5lc2ggQW5uYXl5YSAgICAgICAgICAgICAgICAgICAgICAgICAgCisvLyAKKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogQ3JlYXRlZCBieSBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEFzeW5jIFdpc2hib25lIEludGVyZmFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBZSUZpdmUgY29yZXMgcHJvamVjdCAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9jb3Jlcy95aWZpdmUvICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICBUaGlzIGJsb2NrIGRvZXMgYXN5bmMgV2lzaGJvbmUgZnJvbSBvbmUgY2xvY2sgdG8gb3RoZXIgIC8vLy8KKy8vLy8gICAgICBjbG9jayBkb21haW4KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcihzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAtIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFJldmlzaW9uIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC4xIC0gMjV0aCBGZWIgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgaW5pdGlhbCB2ZXJzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC4yIC0gMjh0aCBGZWIgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgcmVkdWNlZCB0aGUgcmVzcG9uc2UgRklGTyBwYXRoIGRlcHRoIHRvIDIgYXMgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgcmV0dXJuIHBhdGggdXNlZCBieSBvbmx5IHJlYWQgbG9naWMgYW5kIHJlYWQgaXMgICAgIC8vLy8KKy8vLy8gICAgICAgICAgYmxvY2tpbmcgcmVxdWVzdCBhbmQgZXhwZWN0IG9ubHkgb25lIGxvY2F0aW9uIHdpbGwgIC8vLy8KKy8vLy8gICAgICAgICAgYmUgdXNlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gQ29weXJpZ2h0IChDKSAyMDAwIEF1dGhvcnMgYW5kIE9QRU5DT1JFUy5PUkcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgIC8vLy8KKy8vLy8gcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgIC8vLy8KKy8vLy8gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgIC8vLy8KKy8vLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCAgIC8vLy8KKy8vLy8gYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IC8vLy8KKy8vLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSAgIC8vLy8KKy8vLy8gbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlICAgICAgIC8vLy8KKy8vLy8gdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCAgIC8vLy8KKy8vLy8gd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAgICAgIC8vLy8KKy8vLy8gUFVSUE9TRS4gIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIC8vLy8KKy8vLy8gZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvdXJjZTsgaWYgbm90LCBkb3dubG9hZCBpdCAgIC8vLy8KKy8vLy8gZnJvbSBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvbGdwbC5zaHRtbCAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworbW9kdWxlIGFzeW5jX3diIAorICAgICAjKHBhcmFtZXRlciBBVyAgPSAzMiwKKyAgICAgICBwYXJhbWV0ZXIgQlcgID0gNCwKKyAgICAgICBwYXJhbWV0ZXIgRFcgID0gMzIpCisgICAgICAgKAorCisgICAgLy8gTWFzdGVyIFBvcnQKKyAgICAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgd2JtX3JzdF9uICAgLCAgLy8gUmVndWxhciBSZXNldCBzaWduYWwKKyAgICAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgd2JtX2Nsa19pICAgLCAgLy8gU3lzdGVtIGNsb2NrCisgICAgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgIHdibV9jeWNfaSAgICwgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgIHdibV9zdGJfaSAgICwgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgICAgaW5wdXQgICBsb2dpYyBbQVctMTowXSAgICAgIHdibV9hZHJfaSAgICwgIC8vIGFkZHJlc3MKKyAgICAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgd2JtX3dlX2kgICAgLCAgLy8gd3JpdGUKKyAgICAgICBpbnB1dCAgIGxvZ2ljIFtEVy0xOjBdICAgICAgd2JtX2RhdF9pICAgLCAgLy8gZGF0YSBvdXRwdXQKKyAgICAgICBpbnB1dCAgIGxvZ2ljIFtCVy0xOjBdICAgICAgd2JtX3NlbF9pICAgLCAgLy8gYnl0ZSBlbmFibGUKKyAgICAgICBvdXRwdXQgIGxvZ2ljIFtEVy0xOjBdICAgICAgd2JtX2RhdF9vICAgLCAgLy8gZGF0YSBpbnB1dAorICAgICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICB3Ym1fYWNrX28gICAsICAvLyBhY2tub3dsZWdlbWVudAorICAgICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICB3Ym1fZXJyX28gICAsICAvLyBlcnJvcgorCisgICAgLy8gU2xhdmUgUG9ydAorICAgICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICB3YnNfcnN0X24gICAsICAvLyBSZWd1bGFyIFJlc2V0IHNpZ25hbAorICAgICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICB3YnNfY2xrX2kgICAsICAvLyBTeXN0ZW0gY2xvY2sKKyAgICAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgd2JzX2N5Y19vICAgLCAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgd2JzX3N0Yl9vICAgLCAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAgICBvdXRwdXQgIGxvZ2ljIFtBVy0xOjBdICAgICAgd2JzX2Fkcl9vICAgLCAgLy8gYWRkcmVzcworICAgICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICB3YnNfd2VfbyAgICAsICAvLyB3cml0ZQorICAgICAgIG91dHB1dCAgbG9naWMgW0RXLTE6MF0gICAgICB3YnNfZGF0X28gICAsICAvLyBkYXRhIG91dHB1dAorICAgICAgIG91dHB1dCAgbG9naWMgW0JXLTE6MF0gICAgICB3YnNfc2VsX28gICAsICAvLyBieXRlIGVuYWJsZQorICAgICAgIGlucHV0ICAgbG9naWMgW0RXLTE6MF0gICAgICB3YnNfZGF0X2kgICAsICAvLyBkYXRhIGlucHV0CisgICAgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgIHdic19hY2tfaSAgICwgIC8vIGFja25vd2xlZ2VtZW50CisgICAgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgIHdic19lcnJfaSAgICAgIC8vIGVycm9yCisKKyAgICApOworCisKKworcGFyYW1ldGVyIENGVyA9IEFXK0RXK0JXKzEgOyAvLyBDT01NQU5EIEZJRk8gV0lEVEgKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgTWFzdGVyIEludGVyZmFjZQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbG9naWMgICAgICAgICAgIFBlbmRpbmdSZCAgICAgOyAvLyBQZW5kaW5nIFJlYWQgVHJhbnNhY3Rpb24KK2xvZ2ljICAgICAgICAgICBtX2NtZF93cl9lbiAgICAgICA7Citsb2dpYyBbQ0ZXLTE6MF0gbV9jbWRfd3JfZGF0YSAgICAgOworbG9naWMgICAgICAgICAgIG1fY21kX3dyX2Z1bGwgICAgIDsKK2xvZ2ljICAgICAgICAgICBtX2NtZF93cl9hZnVsbCAgICA7CisKK2xvZ2ljICAgICAgICAgICBtX3Jlc3BfcmRfZW1wdHkgICAgOworbG9naWMgICAgICAgICAgIG1fcmVzcF9yZF9hZW1wdHkgICA7Citsb2dpYyAgICAgICAgICAgbV9yZXNwX3JkX2VuICAgICAgIDsKK2xvZ2ljIFtEVzowXSAgICBtX3Jlc3BfcmRfZGF0YSAgICAgOworCisvLyBNYXN0ZXIgV3JpdGUgSW50ZXJmYWNlCisKKworYXNzaWduIG1fY21kX3dyX2VuID0gKCFQZW5kaW5nUmQpICYmIHdibV9zdGJfaSAmJiAhbV9jbWRfd3JfZnVsbCAmJiAhbV9jbWRfd3JfYWZ1bGw7CisKK2Fzc2lnbiBtX2NtZF93cl9kYXRhID0ge3dibV9hZHJfaSx3Ym1fd2VfaSx3Ym1fZGF0X2ksd2JtX3NlbF9pfTsKKworYWx3YXlzQChuZWdlZGdlIHdibV9yc3RfbiBvciBwb3NlZGdlIHdibV9jbGtfaSkKK2JlZ2luCisgICBpZih3Ym1fcnN0X24gPT0gMCkgYmVnaW4KKyAgICAgIFBlbmRpbmdSZCA8PSAxJ2IwOworICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgIGlmKCghUGVuZGluZ1JkKSAmJiB3Ym1fc3RiX2kgJiYgKCF3Ym1fd2VfaSkgJiYgbV9jbWRfd3JfZW4pIGJlZ2luCisgICAgICBQZW5kaW5nUmQgPD0gMSdiMTsKKyAgICAgIGVuZCBlbHNlIGlmKFBlbmRpbmdSZCAmJiB3Ym1fc3RiX2kgJiYgKCF3Ym1fd2VfaSkgJiYgd2JtX2Fja19vKSBiZWdpbgorICAgICAgICAgUGVuZGluZ1JkIDw9IDEnYjA7CisgICAgICBlbmQKKyAgIGVuZAorZW5kCisKKworLy8gTWFzdGVyIFJlYWQgSW50ZXJmYWNlCisvLyBGb3IgV3JpdGUgaXMgZmVlZCB0aHJvdWdoLCBpZiB0aGVyZSBpcyBzcGFjZSBpbiBmaWZvIHRoZSBhY2sKKy8vIEZvciBSZWFkLCBXYWl0IGZvciBSZXNwb25zZSBQYXRoIEZJRk8gc3RhdHVzCithc3NpZ24gd2JtX2Fja19vID0gKHdibV9zdGJfaSAmJiB3Ym1fd2VfaSkgICAgPyAgbV9jbWRfd3JfZW4gOiAvLyBXcml0ZSBMb2dpYworCSAgICAgICAgICAgKHdibV9zdGJfaSAmJiAoIXdibV93ZV9pKSkgPyAhbV9yZXNwX3JkX2VtcHR5IDogMSdiMDsgLy8gUmVhZCBMb2dpYworCithc3NpZ24gbV9yZXNwX3JkX2VuICAgPSAhbV9yZXNwX3JkX2VtcHR5OworYXNzaWduIHdibV9kYXRfbyAgICAgID0gbV9yZXNwX3JkX2RhdGFbRFctMTowXTsKK2Fzc2lnbiB3Ym1fZXJyX28gICAgICA9IG1fcmVzcF9yZF9kYXRhW0RXXTsKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gU2xhdmUgSW50ZXJmYWNlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbG9naWMgW0NGVy0xOjBdIHNfY21kX3JkX2RhdGEgICAgICA7Citsb2dpYyAgICAgICAgc19jbWRfcmRfZW1wdHkgICAgIDsKK2xvZ2ljICAgICAgICBzX2NtZF9yZF9hZW1wdHkgICAgOworbG9naWMgICAgICAgIHNfY21kX3JkX2VuICAgICAgICA7Citsb2dpYyAgICAgICAgc19yZXNwX3dyX2VuICAgICAgICA7Citsb2dpYyBbRFc6MF0gc19yZXNwX3dyX2RhdGEgICAgICA7Citsb2dpYyAgICAgICAgc19yZXNwX3dyX2Z1bGwgICAgICA7Citsb2dpYyAgICAgICAgc19yZXNwX3dyX2FmdWxsICAgICA7Citsb2dpYyAgICAgICAgd2JzX2Fja19mICAgICAgICAgIDsKKworCithbHdheXNAKG5lZ2VkZ2Ugd2JzX3JzdF9uIG9yIHBvc2VkZ2Ugd2JzX2Nsa19pKQorYmVnaW4KKyAgIGlmKHdic19yc3RfbiA9PSAwKSBiZWdpbgorICAgICAgd2JzX2Fja19mIDw9IDEnYjA7CisgICBlbmQgZWxzZSBiZWdpbgorICAgICAgd2JzX2Fja19mIDw9IHdic19hY2tfaTsKKyAgIGVuZAorZW5kCisKKworLy8gUmVhZCBJbnRlcmZhY2UKK2Fzc2lnbiB7d2JzX2Fkcl9vLHdic193ZV9vLHdic19kYXRfbyx3YnNfc2VsX299ID0gKHNfY21kX3JkX2VtcHR5KSA/ICcwOiAgc19jbWRfcmRfZGF0YTsKKy8vIEFsbCB0aGUgZG93bnN0cmVhbSBsb2dpYyBleHBlY3QgU3RvYmUgaXMgZ2V0dGluZyBkZS1hc3NlcnRlZCAKKy8vIGF0bGVhc3QgZm9yIDEgY3ljbGUgYWZ0ZXIgYWNrIGlzIGdlbmVyYXRlZAorYXNzaWduIHdic19zdGJfbyA9ICh3YnNfYWNrX2YpID8gMSdiMCA6IChzX2NtZF9yZF9lbXB0eSkgPyAxJ2IwOiAxJ2IxOworYXNzaWduIHdic19jeWNfbyA9ICh3YnNfYWNrX2YpID8gMSdiMCA6IChzX2NtZF9yZF9lbXB0eSkgPyAxJ2IwOiAxJ2IxOworCithc3NpZ24gc19jbWRfcmRfZW4gPSB3YnNfYWNrX2k7CisKKy8vIFdyaXRlIEludGVyZmFjZQorLy8gcmVzcG9uc2Ugc2VuZCBvbmx5IGZvciByZWFkIGxvZ2ljCithc3NpZ24gc19yZXNwX3dyX2VuICAgPSB3YnNfc3RiX28gJiAoIXdic193ZV9vKSAmIHdic19hY2tfaSAmICFzX3Jlc3Bfd3JfZnVsbDsKK2Fzc2lnbiBzX3Jlc3Bfd3JfZGF0YSA9IHt3YnNfZXJyX2ksd2JzX2RhdF9pfTsKKworYXN5bmNfZmlmbyAjKC5XKENGVyksIC5EUCg0KSwgLldSX0ZBU1QoMSksIC5SRF9GQVNUKDEpKSB1X2NtZF9pZiAoCisJICAgICAgICAgICAvLyBTeW5jIHcuci50IFdSIGNsb2NrCisJICAgICAgICAgICAud3JfY2xrICAgICAgICAod2JtX2Nsa19pICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAud3JfcmVzZXRfbiAgICAod2JtX3JzdF9uICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAud3JfZW4gICAgICAgICAobV9jbWRfd3JfZW4gICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAud3JfZGF0YSAgICAgICAobV9jbWRfd3JfZGF0YSAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAuZnVsbCAgICAgICAgICAobV9jbWRfd3JfZnVsbCAgICAgKSwgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgIC5hZnVsbCAgICAgICAgIChtX2NtZF93cl9hZnVsbCAgICApLCAgICAgICAgICAgICAgICAgCisKKwkJICAgLy8gU3luYyB3LnIudCBSRCBDbG9jaworICAgICAgICAgICAgICAgICAgIC5yZF9jbGsgICAgICAgICh3YnNfY2xrX2kgICAgICAgICApLAorICAgICAgICAgICAgICAgICAgIC5yZF9yZXNldF9uICAgICh3YnNfcnN0X24gICAgICAgICApLAorICAgICAgICAgICAgICAgICAgIC5yZF9lbiAgICAgICAgIChzX2NtZF9yZF9lbiAgICAgICApLAorICAgICAgICAgICAgICAgICAgIC5lbXB0eSAgICAgICAgIChzX2NtZF9yZF9lbXB0eSAgICApLCAvLyBzeW5jJ2VkIHRvIHJkX2NsaworICAgICAgICAgICAgICAgICAgIC5hZW1wdHkgICAgICAgIChzX2NtZF9yZF9hZW1wdHkgICApLCAvLyBzeW5jJ2VkIHRvIHJkX2NsaworICAgICAgICAgICAgICAgICAgIC5yZF9kYXRhICAgICAgIChzX2NtZF9yZF9kYXRhICAgICApCisJICAgICApOworCisKKy8vIFJlc3BvbnNlIHVzZWQgb25seSByZWFkIHBhdGgsIHJlYWQgaXMgYmxvY2tpbmcgYWNjZXNzLCBleHBlY3QKKy8vIG9ubHkgb25lIGxvY2F0aW9uIHVzZWQgaW4gcmV0dXJuIHBhdGggLSByZWR1Y2VkIHRoZSBkZXB0aCB0byAyCithc3luY19maWZvICMoLlcoRFcrMSksIC5EUCgyKSwgLldSX0ZBU1QoMSksIC5SRF9GQVNUKDEpKSB1X3Jlc3BfaWYgKAorCSAgICAgICAgICAgLy8gU3luYyB3LnIudCBXUiBjbG9jaworCSAgICAgICAgICAgLndyX2NsayAgICAgICAgKHdic19jbGtfaSAgICAgICAgICApLAorICAgICAgICAgICAgICAgICAgIC53cl9yZXNldF9uICAgICh3YnNfcnN0X24gICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAud3JfZW4gICAgICAgICAoc19yZXNwX3dyX2VuICAgICAgICksCisgICAgICAgICAgICAgICAgICAgLndyX2RhdGEgICAgICAgKHNfcmVzcF93cl9kYXRhICAgICApLAorICAgICAgICAgICAgICAgICAgIC5mdWxsICAgICAgICAgIChzX3Jlc3Bfd3JfZnVsbCAgICAgKSwgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgIC5hZnVsbCAgICAgICAgIChzX3Jlc3Bfd3JfYWZ1bGwgICAgKSwgICAgICAgICAgICAgICAgIAorCisJCSAgIC8vIFN5bmMgdy5yLnQgUkQgQ2xvY2sKKyAgICAgICAgICAgICAgICAgICAucmRfY2xrICAgICAgICAod2JtX2Nsa19pICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgLnJkX3Jlc2V0X24gICAgKHdibV9yc3RfbiAgICAgICAgICApLAorICAgICAgICAgICAgICAgICAgIC5yZF9lbiAgICAgICAgIChtX3Jlc3BfcmRfZW4gICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAuZW1wdHkgICAgICAgICAobV9yZXNwX3JkX2VtcHR5ICAgICksIC8vIHN5bmMnZWQgdG8gcmRfY2xrCisgICAgICAgICAgICAgICAgICAgLmFlbXB0eSAgICAgICAgKG1fcmVzcF9yZF9hZW1wdHkgICApLCAvLyBzeW5jJ2VkIHRvIHJkX2NsaworICAgICAgICAgICAgICAgICAgIC5yZF9kYXRhICAgICAgIChtX3Jlc3BfcmRfZGF0YSAgICAgKQorCSAgICAgKTsKKworCisKK2VuZG1vZHVsZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvbGliL2Nsa19idWYudiBiL3Zlcmlsb2cvcnRsL2xpYi9jbGtfYnVmLnYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFkOGZjNgotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL2xpYi9jbGtfYnVmLnYKQEAgLTAsMCArMSw4NSBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxICwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgIAorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IENyZWF0ZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBDbGsgQnVmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgWUlGaXZlIGNvcmVzIHByb2plY3QgICAgICAgICAgICAgICAvLy8vCisvLy8vICBodHRwczovL2dpdGh1Yi5jb20vZGluZXNoYW5uYXl5YS95aWZpdmVfcjAuZ2l0ICAgICAgICAgICAgICAvLy8vCisvLy8vICBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvY29yZXMveWlmaXZlLyAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICBBZGRpbmcgY2xvY2sgYnVmIGZvciBtYW51YWwgY2xvY2sgdHJlZSBhdCBTT0MgbGV2ZWwgICAgICAvLy8vCisvLy8vICBUbyBEbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIG5vdGhpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBBdXRob3Iocyk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgLSBEaW5lc2ggQW5uYXl5YSwgZGluZXNoYUBvcGVuY29yZXMub3JnICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBSZXZpc2lvbiA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIENvcHlyaWdodCAoQykgMjAwMCBBdXRob3JzIGFuZCBPUEVOQ09SRVMuT1JHICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgICAvLy8vCisvLy8vIHJlc3RyaWN0aW9uIHByb3ZpZGVkIHRoYXQgdGhpcyBjb3B5cmlnaHQgc3RhdGVtZW50IGlzIG5vdCAgICAvLy8vCisvLy8vIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSBhbmQgdGhhdCBhbnkgZGVyaXZhdGl2ZSB3b3JrIGNvbnRhaW5zICAvLy8vCisvLy8vIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLiAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgICAvLy8vCisvLy8vIGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAvLy8vCisvLy8vIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAvLy8vCisvLy8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgICAvLy8vCisvLy8vIGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSAgICAgICAvLy8vCisvLy8vIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgICAvLy8vCisvLy8vIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgICAgICAvLy8vCisvLy8vIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSAvLy8vCisvLy8vIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgICAvLy8vCisvLy8vIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBzb3VyY2U7IGlmIG5vdCwgZG93bmxvYWQgaXQgICAvLy8vCisvLy8vIGZyb20gaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2xncGwuc2h0bWwgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKworbW9kdWxlIGNsa19idWYgKAorICAgLy8gT3V0cHV0cworICAgICAgIGNsa19vLAorICAgLy8gSW5wdXRzCisgICAgICAgY2xrX2kKKyAgICk7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBBbGwgdGhlIGlucHV0IHRvIHRoaXMgYmxvY2sgYXJlIGRlY2xhcmVkIGhlcmUKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBpbnB1dCAgICAgICAgY2xrX2kgICAgICAgICAgOy8vIAorICAgCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gQWxsIHRoZSBvdXRwdXQgdG8gdGhpcyBibG9jayBhcmUgZGVjbGFyZWQgaGVyZQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIG91dHB1dCAgICAgICBjbGtfbyAgICAgICAgICAgICA7IC8vIGNsb2NrIG91dAorCisgICAgICAgICAgICAgICAKKworc2t5MTMwX2ZkX3NjX2hkX19jbGtidWZfMTYgdV9idWYgICguQShjbGtfaSksLlgoY2xrX28pKTsKKworZW5kbW9kdWxlIAorCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9saWIvY2xrX2N0bC52IGIvdmVyaWxvZy9ydGwvbGliL2Nsa19jdGwudgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTQ0NzhiCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvbGliL2Nsa19jdGwudgpAQCAtMCwwICsxLDE0NyBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxICwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgIAorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IENyZWF0ZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVHVibyA4MDUxIGNvcmVzIGNvbW1vbiBsaWJyYXJ5IE1vZHVsZSAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFR1cmJvIDgwNTEgY29yZXMgcHJvamVjdCAgICAgICAgICAgLy8vLworLy8vLyAgaHR0cHM6Ly9naXRodWIuY29tL2RpbmVzaGFubmF5eWEveWlmaXZlX3IwLmdpdCAgICAgICAgICAgICAgLy8vLworLy8vLyAgaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2NvcmVzL3R1cmJvODA1MS8gICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVHVyYm8gODA1MSBkZWZpbml0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVG8gRG86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICBub3RoaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgQXV0aG9yKHMpOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgIC0gRGluZXNoIEFubmF5eWEsIGRpbmVzaGFAb3BlbmNvcmVzLm9yZyAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgUmV2aXNpb24gOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgIDEuMCAgICBNYXIgMiwgMjAxMSxEaW5lc2guQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgSW5pdGlhbCBWZXJzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgIDEuMSAgIE5vdiAxNSwyMDIxLERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLyAKKy8vLy8gICAgICAgICAgICBCdWcgZml4IGluIEhpZ2ggYW5kIExvdyBjb3VudCB3aWR0aCAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gQ29weXJpZ2h0IChDKSAyMDAwIEF1dGhvcnMgYW5kIE9QRU5DT1JFUy5PUkcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgIC8vLy8KKy8vLy8gcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgIC8vLy8KKy8vLy8gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgIC8vLy8KKy8vLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCAgIC8vLy8KKy8vLy8gYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IC8vLy8KKy8vLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSAgIC8vLy8KKy8vLy8gbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlICAgICAgIC8vLy8KKy8vLy8gdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCAgIC8vLy8KKy8vLy8gd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAgICAgIC8vLy8KKy8vLy8gUFVSUE9TRS4gIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIC8vLy8KKy8vLy8gZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvdXJjZTsgaWYgbm90LCBkb3dubG9hZCBpdCAgIC8vLy8KKy8vLy8gZnJvbSBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvbGdwbC5zaHRtbCAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKy8vIE1vZHVsZTogY2xrX2N0bAorLy8KKy8vIERlc2NyaXB0aW9uOiAgR2VuZXJpYyBjbG9jayBjb250cm9sIGxvZ2ljICwgY2xrLW91dCA9IG1jbGsvKDIrY2xrX2Rpdl9yYXRpbykKKy8vCisvLyAgCisvLyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisKK21vZHVsZSBjbGtfY3RsICgKKyAgIC8vIE91dHB1dHMKKyAgICAgICBjbGtfbywKKyAgIC8vIElucHV0cworICAgICAgIG1jbGssCisgICAgICAgcmVzZXRfbiwgCisgICAgICAgY2xrX2Rpdl9yYXRpbyAKKyAgICk7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBDTE9DSyBEZWZhdWx0IERpdmlkZXIgdmFsdWUuCisvLyBUaGlzIHZhbHVlIHdpbGwgYmUgY2hhbmdlIGZyb20gb3V0c2lkZQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3BhcmFtZXRlciAgV0QgPSAnaDE7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBBbGwgdGhlIGlucHV0IHRvIHRoaXMgYmxvY2sgYXJlIGRlY2xhcmVkIGhlcmUKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBpbnB1dCAgICAgICAgbWNsayAgICAgICAgICA7Ly8gCisgICBpbnB1dCAgICAgICAgcmVzZXRfbiAgICAgICA7Ly8gcHJpbWFyeSByZXNldCBzaWduYWwKKyAgIGlucHV0IFtXRDowXSBjbGtfZGl2X3JhdGlvIDsvLyBwcmltYXJ5IGNsb2NrIGRpdmlkZSByYXRpbworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG91dHB1dCBjbG9jayA9IHNlbGVjdGVkIGNsb2NrIC8gKGRpdl9yYXRpbysxKQorICAgCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gQWxsIHRoZSBvdXRwdXQgdG8gdGhpcyBibG9jayBhcmUgZGVjbGFyZWQgaGVyZQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIG91dHB1dCAgICAgICBjbGtfbyAgICAgICAgICAgICA7IC8vIGNsb2NrIG91dAorCisgICAgICAgICAgICAgICAKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIENsb2NrIERpdmlkZSBmdW5jIGlzIGRvbmUgaGVyZQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3JlZyAgW1dEOjBdICAgICAgaGlnaF9jb3VudCAgICAgICA7IC8vIGhpZ2ggbGV2ZWwgY291bnRlcgorcmVnICBbV0Q6MF0gICAgICBsb3dfY291bnQgICAgICAgIDsgLy8gbG93IGxldmVsIGNvdW50ZXIKK3JlZyAgICAgICAgICAgICAgbWNsa19kaXYgICAgICAgICA7IC8vIGRpdmlkZWQgY2xvY2sKKworCithc3NpZ24gY2xrX28gID0gbWNsa19kaXY7CisKK2Fsd2F5cyBAIChwb3NlZGdlIG1jbGsgb3IgbmVnZWRnZSByZXNldF9uKQorYmVnaW4gLy8geworICAgaWYocmVzZXRfbiA9PSAxJ2IwKSAKKyAgIGJlZ2luIAorICAgICAgaGlnaF9jb3VudCAgPD0gJ2gwOworICAgICAgbG93X2NvdW50ICAgPD0gJ2gwOworICAgICAgbWNsa19kaXYgICAgPD0gJ2IwOworICAgZW5kICAgCisgICBlbHNlIAorICAgYmVnaW4gCisgICAgICBpZihoaWdoX2NvdW50ICE9IDApCisgICAgICBiZWdpbiAvLyB7CisgICAgICAgICBoaWdoX2NvdW50ICAgIDw9IGhpZ2hfY291bnQgLSAxOworICAgICAgICAgbWNsa19kaXYgICAgICA8PSAxJ2IxOworICAgICAgZW5kICAgLy8gfQorICAgICAgZWxzZSBpZihsb3dfY291bnQgIT0gMCkKKyAgICAgIGJlZ2luIC8vIHsKKyAgICAgICAgIGxvd19jb3VudCAgICAgPD0gbG93X2NvdW50IC0gMTsKKyAgICAgICAgIG1jbGtfZGl2ICAgICAgPD0gMSdiMDsKKyAgICAgIGVuZCAgIC8vIH0KKyAgICAgIGVsc2UKKyAgICAgIGJlZ2luIC8vIHsKKyAgICAgICAgIGhpZ2hfY291bnQgICAgPD0gY2xrX2Rpdl9yYXRpb1tXRDoxXSArIGNsa19kaXZfcmF0aW9bMF07CisgICAgICAgICBsb3dfY291bnQgICAgIDw9IGNsa19kaXZfcmF0aW9bV0Q6MV0gKyAxOworICAgICAgICAgbWNsa19kaXYgICAgICA8PSB+bWNsa19kaXY7CisgICAgICBlbmQgICAvLyB9CisgICBlbmQgICAvLyB9CitlbmQgICAvLyB9CisKKworZW5kbW9kdWxlIAorCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9saWIvY2xrX3NrZXdfYWRqdXN0Lmd2IGIvdmVyaWxvZy9ydGwvbGliL2Nsa19za2V3X2FkanVzdC5ndgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzgxMWMwCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvbGliL2Nsa19za2V3X2FkanVzdC5ndgpAQCAtMCwwICsxLDIwNSBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxICwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgIAorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IENyZWF0ZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBjbG9jayBza2V3IGFkanVzdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBZSUZpdmUgY29yZXMgcHJvamVjdCAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHBzOi8vZ2l0aHViLmNvbS9kaW5lc2hhbm5heXlhL3lpZml2ZV9yMC5naXQgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9jb3Jlcy95aWZpdmUvICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICBUaGlzIGJsb2NrIGlzIHVzZWZ1bCBmb3IgZ2xvYmFsIGNsb2NrIHNrZXcgYWRqdXN0bWVudCAgIC8vLy8KKy8vLy8gICAgICBsb2dpYyBpbXBsZW1lbnRhdGlvbjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgIGNsa19vdXQgPSAoc2VsPTApID8gY2xrX2luIDogICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAoc2VsPTEpID8gY2xrX2QxIDogICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAoc2VsPTEpID8gY2xrX2QyIDogICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAuLi4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAoc2VsPTE1KT8gY2xrX2QxNSA6Y2xrX2luICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgIE5vdGU6IGVhY2ggZCogaW5kaWNhdGUgY2xrIGJ1ZiBkZWxheSAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcihzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAtIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFJldmlzaW9uIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC4wIC0gMjl0aCBGZWIgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgSW5pdGlhbCB2ZXJzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBDb3B5cmlnaHQgKEMpIDIwMDAgQXV0aG9ycyBhbmQgT1BFTkNPUkVTLk9SRyAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBmaWxlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCB3aXRob3V0ICAgICAgICAgLy8vLworLy8vLyByZXN0cmljdGlvbiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgICAgLy8vLworLy8vLyByZW1vdmVkIGZyb20gdGhlIGZpbGUgYW5kIHRoYXQgYW55IGRlcml2YXRpdmUgd29yayBjb250YWlucyAgLy8vLworLy8vLyB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGFzc29jaWF0ZWQgZGlzY2xhaW1lci4gLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0ICAgLy8vLworLy8vLyBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgLy8vLworLy8vLyBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgLy8vLworLy8vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55ICAgLy8vLworLy8vLyBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgICAgICAgLy8vLworLy8vLyB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkICAgLy8vLworLy8vLyB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSICAgICAgLy8vLworLy8vLyBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgLy8vLworLy8vLyBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAgLy8vLworLy8vLyBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgc291cmNlOyBpZiBub3QsIGRvd25sb2FkIGl0ICAgLy8vLworLy8vLyBmcm9tIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9sZ3BsLnNodG1sICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gQ2xvY2staW4gaXMgZWFzdCBwYWQgZGlyZWN0aW9uCisvLyBjbG9jayBvdXQgZ2l2ZSBpbiBvdGhlciB0aHJlZSBkaXJlY3Rpb24gZm9yIGJldHRlciBwbGFjZW1lbnQKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworbW9kdWxlIGNsa19za2V3X2FkanVzdCgKK2BpZmRlZiBVU0VfUE9XRVJfUElOUworICAgICB2Y2NkMSwvLyBVc2VyIGFyZWEgMSAxLjhWIHN1cHBseQorICAgICB2c3NkMSwvLyBVc2VyIGFyZWEgMSBkaWdpdGFsIGdyb3VuZAorYGVuZGlmCitjbGtfaW4sIHNlbCwgY2xrX291dCk7CisKKworYGlmZGVmIFVTRV9QT1dFUl9QSU5TCisgICAgIGlucHV0IHZjY2QxOy8vIFVzZXIgYXJlYSAxIDEuOFYgc3VwcGx5CisgICAgIGlucHV0IHZzc2QxOy8vIFVzZXIgYXJlYSAxIGRpZ2l0YWwgZ3JvdW5kCitgZW5kaWYKKyAgaW5wdXQgIGNsa19pbjsKKyAgb3V0cHV0IGNsa19vdXQ7CisgIGlucHV0IFszOjBdIHNlbDsKKyAgd2lyZSBpbjA7CisgIHdpcmUgaW4xOworICB3aXJlIGluMjsKKyAgd2lyZSBpbjM7CisgIHdpcmUgaW40OworICB3aXJlIGluNTsKKyAgd2lyZSBpbjY7CisgIHdpcmUgaW43OworICB3aXJlIGluODsKKyAgd2lyZSBpbjk7CisgIHdpcmUgaW4xMDsKKyAgd2lyZSBpbjExOworICB3aXJlIGluMTI7CisgIHdpcmUgaW4xMzsKKyAgd2lyZSBpbjE0OworICB3aXJlIGluMTU7CisKKyAgd2lyZSBjbGtfZDE7CisgIHdpcmUgY2xrX2QyOworICB3aXJlIGNsa19kMzsKKyAgd2lyZSBjbGtfZDQ7CisgIHdpcmUgY2xrX2Q1OworICB3aXJlIGNsa19kNjsKKyAgd2lyZSBjbGtfZDc7CisgIHdpcmUgY2xrX2Q4OworICB3aXJlIGNsa19kOTsKKyAgd2lyZSBjbGtfZDEwOworICB3aXJlIGNsa19kMTE7CisgIHdpcmUgY2xrX2QxMjsKKyAgd2lyZSBjbGtfZDEzOworICB3aXJlIGNsa19kMTQ7CisgIHdpcmUgY2xrX2QxNTsKKworICB3aXJlIGQwMDsKKyAgd2lyZSBkMDE7CisgIHdpcmUgZDAyOworICB3aXJlIGQwMzsKKyAgd2lyZSBkMDQ7CisgIHdpcmUgZDA1OworICB3aXJlIGQwNjsKKyAgd2lyZSBkMDc7CisgIHdpcmUgZDEwOworICB3aXJlIGQxMTsKKyAgd2lyZSBkMTI7CisgIHdpcmUgZDEzOworICB3aXJlIGQyMDsKKyAgd2lyZSBkMjE7CisgIHdpcmUgZDMwOworCisKKyAgY3RlY2hfZGVsYXlfY2xrYnVmIGNsa2J1Zl8xICAoLkEoY2xrX2luKSwgICAgLlgoY2xrX2QxKSk7CisgIGN0ZWNoX2RlbGF5X2Nsa2J1ZiBjbGtidWZfMiAgKC5BKGNsa19kMSksICAgIC5YKGNsa19kMikpOworICBjdGVjaF9kZWxheV9jbGtidWYgY2xrYnVmXzMgICguQShjbGtfZDIpLCAgICAuWChjbGtfZDMpKTsKKyAgY3RlY2hfZGVsYXlfY2xrYnVmIGNsa2J1Zl80ICAoLkEoY2xrX2QzKSwgICAgLlgoY2xrX2Q0KSk7CisgIGN0ZWNoX2RlbGF5X2Nsa2J1ZiBjbGtidWZfNSAgKC5BKGNsa19kNCksICAgIC5YKGNsa19kNSkpOworICBjdGVjaF9kZWxheV9jbGtidWYgY2xrYnVmXzYgICguQShjbGtfZDUpLCAgICAuWChjbGtfZDYpKTsKKyAgY3RlY2hfZGVsYXlfY2xrYnVmIGNsa2J1Zl83ICAoLkEoY2xrX2Q2KSwgICAgLlgoY2xrX2Q3KSk7CisgIGN0ZWNoX2RlbGF5X2Nsa2J1ZiBjbGtidWZfOCAgKC5BKGNsa19kNyksICAgIC5YKGNsa19kOCkpOworICBjdGVjaF9kZWxheV9jbGtidWYgY2xrYnVmXzkgICguQShjbGtfZDgpLCAgICAuWChjbGtfZDkpKTsKKyAgY3RlY2hfZGVsYXlfY2xrYnVmIGNsa2J1Zl8xMCAoLkEoY2xrX2Q5KSwgICAgLlgoY2xrX2QxMCkpOworICBjdGVjaF9kZWxheV9jbGtidWYgY2xrYnVmXzExICguQShjbGtfZDEwKSwgICAuWChjbGtfZDExKSk7CisgIGN0ZWNoX2RlbGF5X2Nsa2J1ZiBjbGtidWZfMTIgKC5BKGNsa19kMTEpLCAgIC5YKGNsa19kMTIpKTsKKyAgY3RlY2hfZGVsYXlfY2xrYnVmIGNsa2J1Zl8xMyAoLkEoY2xrX2QxMiksICAgLlgoY2xrX2QxMykpOworICBjdGVjaF9kZWxheV9jbGtidWYgY2xrYnVmXzE0ICguQShjbGtfZDEzKSwgICAuWChjbGtfZDE0KSk7CisgIGN0ZWNoX2RlbGF5X2Nsa2J1ZiBjbGtidWZfMTUgKC5BKGNsa19kMTQpLCAgIC5YKGNsa19kMTUpKTsKKworCisgIC8vIFRhcCBwb2ludCBzZWxlY3Rpb24KKyAgYXNzaWduIGluMCAgPSBjbGtfaW47CisgIGFzc2lnbiBpbjEgID0gY2xrX2QxOworICBhc3NpZ24gaW4yICA9IGNsa19kMjsKKyAgYXNzaWduIGluMyAgPSBjbGtfZDM7CisgIGFzc2lnbiBpbjQgID0gY2xrX2Q0OworICBhc3NpZ24gaW41ICA9IGNsa19kNTsKKyAgYXNzaWduIGluNiAgPSBjbGtfZDY7CisgIGFzc2lnbiBpbjcgID0gY2xrX2Q3OworICBhc3NpZ24gaW44ICA9IGNsa19kODsKKyAgYXNzaWduIGluOSAgPSBjbGtfZDk7CisgIGFzc2lnbiBpbjEwID0gY2xrX2QxMDsKKyAgYXNzaWduIGluMTEgPSBjbGtfZDExOworICBhc3NpZ24gaW4xMiA9IGNsa19kMTI7CisgIGFzc2lnbiBpbjEzID0gY2xrX2QxMzsKKyAgYXNzaWduIGluMTQgPSBjbGtfZDE0OworICBhc3NpZ24gaW4xNSA9IGNsa19kMTU7CisKKworICAvLyBmaXJzdCBsZXZlbCBtdXggLSA4CisgIGN0ZWNoX211eDJ4MV8yIHVfbXV4X2xldmVsXzAwICggLlggKGQwMCkgLCAuQTAgKGluMCksICAuQTEoaW4xKSwgIC5TKHNlbFswXSkpOworICBjdGVjaF9tdXgyeDFfMiB1X211eF9sZXZlbF8wMSAoIC5YIChkMDEpICwgLkEwIChpbjIpLCAgLkExKGluMyksICAuUyhzZWxbMF0pKTsKKyAgY3RlY2hfbXV4MngxXzIgdV9tdXhfbGV2ZWxfMDIgKCAuWCAoZDAyKSAsIC5BMCAoaW40KSwgIC5BMShpbjUpLCAgLlMoc2VsWzBdKSk7CisgIGN0ZWNoX211eDJ4MV8yIHVfbXV4X2xldmVsXzAzICggLlggKGQwMykgLCAuQTAgKGluNiksICAuQTEoaW43KSwgIC5TKHNlbFswXSkpOworICBjdGVjaF9tdXgyeDFfMiB1X211eF9sZXZlbF8wNCAoIC5YIChkMDQpICwgLkEwIChpbjgpLCAgLkExKGluOSksICAuUyhzZWxbMF0pKTsKKyAgY3RlY2hfbXV4MngxXzIgdV9tdXhfbGV2ZWxfMDUgKCAuWCAoZDA1KSAsIC5BMCAoaW4xMCksIC5BMShpbjExKSwgLlMoc2VsWzBdKSk7CisgIGN0ZWNoX211eDJ4MV8yIHVfbXV4X2xldmVsXzA2ICggLlggKGQwNikgLCAuQTAgKGluMTIpLCAuQTEoaW4xMyksIC5TKHNlbFswXSkpOworICBjdGVjaF9tdXgyeDFfMiB1X211eF9sZXZlbF8wNyAoIC5YIChkMDcpICwgLkEwIChpbjE0KSwgLkExKGluMTUpLCAuUyhzZWxbMF0pKTsKKworICAvLyBzZWNvbmQgbGV2ZWwgbXV4IC0gNAorICBjdGVjaF9tdXgyeDFfMiB1X211eF9sZXZlbF8xMCAoIC5YIChkMTApICwgLkEwIChkMDApLCAuQTEoZDAxKSwgLlMoc2VsWzFdKSk7CisgIGN0ZWNoX211eDJ4MV8yIHVfbXV4X2xldmVsXzExICggLlggKGQxMSkgLCAuQTAgKGQwMiksIC5BMShkMDMpLCAuUyhzZWxbMV0pKTsKKyAgY3RlY2hfbXV4MngxXzIgdV9tdXhfbGV2ZWxfMTIgKCAuWCAoZDEyKSAsIC5BMCAoZDA0KSwgLkExKGQwNSksIC5TKHNlbFsxXSkpOworICBjdGVjaF9tdXgyeDFfMiB1X211eF9sZXZlbF8xMyAoIC5YIChkMTMpICwgLkEwIChkMDYpLCAuQTEoZDA3KSwgLlMoc2VsWzFdKSk7CisKKyAgLy8gdGhpcmQgbGV2ZWwgbXV4IC0gMgorICBjdGVjaF9tdXgyeDFfMiB1X211eF9sZXZlbF8yMCAoIC5YIChkMjApICwgLkEwIChkMTApLCAuQTEoZDExKSwgLlMoc2VsWzJdKSk7CisgIGN0ZWNoX211eDJ4MV8yIHVfbXV4X2xldmVsXzIxICggLlggKGQyMSkgLCAuQTAgKGQxMiksIC5BMShkMTMpLCAuUyhzZWxbMl0pKTsKKworICAvLyBmb3VydGggbGV2ZWwgbXV4IC0gMQorICBjdGVjaF9tdXgyeDFfNCB1X211eF9sZXZlbF8zMCAoIC5YIChkMzApICwgLkEwIChkMjApLCAuQTEoZDIxKSwgLlMoc2VsWzNdKSk7CisKKworICBhc3NpZ24gY2xrX291dCA9IGQzMDsKKworZW5kbW9kdWxlCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9saWIvY3RlY2hfY2VsbHMuc3YgYi92ZXJpbG9nL3J0bC9saWIvY3RlY2hfY2VsbHMuc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk1MjhkZQotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL2xpYi9jdGVjaF9jZWxscy5zdgpAQCAtMCwwICsxLDkwIEBACisKK21vZHVsZSBjdGVjaF9tdXgyeDEgKAorCWlucHV0ICBsb2dpYyBBMCwKKwlpbnB1dCAgbG9naWMgQTEsCisJaW5wdXQgIGxvZ2ljIFMgLAorCW91dHB1dCBsb2dpYyBYKTsKKworYGlmbmRlZiBTWU5USEVTSVMKK2Fzc2lnbiBYID0gKFMpID8gQTEgOiBBMDsKK2BlbHNlIAorc2t5MTMwX2ZkX3NjX2hkX19tdXgyXzggdV9tdXggKC5BMCAoQTApLCAuQTEgKEExKSwgLlMgIChTKSwgLlggKFgpKTsKK2BlbmRpZgorCitlbmRtb2R1bGUKKworbW9kdWxlIGN0ZWNoX211eDJ4MV8yICgKKwlpbnB1dCAgbG9naWMgQTAsCisJaW5wdXQgIGxvZ2ljIEExLAorCWlucHV0ICBsb2dpYyBTICwKKwlvdXRwdXQgbG9naWMgWCk7CisKK2BpZm5kZWYgU1lOVEhFU0lTCithc3NpZ24gWCA9IChTKSA/IEExIDogQTA7CitgZWxzZSAKK3NreTEzMF9mZF9zY19oZF9fbXV4Ml8yIHVfbXV4ICguQTAgKEEwKSwgLkExIChBMSksIC5TICAoUyksIC5YIChYKSk7CitgZW5kaWYKKworZW5kbW9kdWxlCisKK21vZHVsZSBjdGVjaF9tdXgyeDFfNCAoCisJaW5wdXQgIGxvZ2ljIEEwLAorCWlucHV0ICBsb2dpYyBBMSwKKwlpbnB1dCAgbG9naWMgUyAsCisJb3V0cHV0IGxvZ2ljIFgpOworCitgaWZuZGVmIFNZTlRIRVNJUworYXNzaWduIFggPSAoUykgPyBBMSA6IEEwOworYGVsc2UgCitza3kxMzBfZmRfc2NfaGRfX211eDJfNCB1X211eCAoLkEwIChBMCksIC5BMSAoQTEpLCAuUyAgKFMpLCAuWCAoWCkpOworYGVuZGlmCisKK2VuZG1vZHVsZQorCittb2R1bGUgY3RlY2hfYnVmICgKKwlpbnB1dCAgbG9naWMgQSwKKwlvdXRwdXQgbG9naWMgWCk7CisKK2BpZm5kZWYgU1lOVEhFU0lTCithc3NpZ24gWCA9IEE7CitgZWxzZQorICAgIHNreTEzMF9mZF9zY19oZF9fYnVmYnVmXzggdV9idWYgICguQShBKSwuWChYKSk7CitgZW5kaWYKKworZW5kbW9kdWxlCisKK21vZHVsZSBjdGVjaF9jbGtfYnVmICgKKwlpbnB1dCAgbG9naWMgQSwKKwlvdXRwdXQgbG9naWMgWCk7CisKK2BpZm5kZWYgU1lOVEhFU0lTCithc3NpZ24gWCA9IEE7CitgZWxzZQorICAgIHNreTEzMF9mZF9zY19oZF9fY2xrYnVmXzggdV9idWYgICguQShBKSwuWChYKSk7CitgZW5kaWYKKworZW5kbW9kdWxlCisKK21vZHVsZSBjdGVjaF9kZWxheV9idWYgKAorCWlucHV0ICBsb2dpYyBBLAorCW91dHB1dCBsb2dpYyBYKTsKKworYGlmbmRlZiBTWU5USEVTSVMKKyAgICBhc3NpZ24gWCA9IEE7CitgZWxzZQorICAgICBza3kxMzBfZmRfc2NfaGRfX2RseWdhdGU0c2QzXzEgdV9kbHkgKC5YKFgpLC5BKEEpKTsKK2BlbmRpZgorCitlbmRtb2R1bGUKKworbW9kdWxlIGN0ZWNoX2RlbGF5X2Nsa2J1ZiAoCisJaW5wdXQgIGxvZ2ljIEEsCisJb3V0cHV0IGxvZ2ljIFgpOworCitgaWZuZGVmIFNZTlRIRVNJUworICAgIGFzc2lnbiBYID0gQTsKK2BlbHNlCisgICAgIHNreTEzMF9mZF9zY19oZF9fY2xrZGx5YnVmNHMxNV8yIHVfZGx5ICguWChYKSwuQShBKSk7CitgZW5kaWYKKworZW5kbW9kdWxlCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9saWIvZG91YmxlX3N5bmNfaGlnaC52IGIvdmVyaWxvZy9ydGwvbGliL2RvdWJsZV9zeW5jX2hpZ2gudgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kMWQyY2E2Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvbGliL2RvdWJsZV9zeW5jX2hpZ2gudgpAQCAtMCwwICsxLDEwNiBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxICwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgIAorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IENyZWF0ZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBPTVMgODA1MSBjb3JlcyBjb21tb24gbGlicmFyeSBNb2R1bGUgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgT01TIDgwNTEgY29yZXMgcHJvamVjdCAgICAgICAgICAgICAvLy8vCisvLy8vICBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvY29yZXMvb21zODA1MW1pbmkvICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9kaW5lc2hhbm5heXlhL3lpZml2ZV9yMC5naXQgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBPTVMgODA1MSBkZWZpbml0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUbyBEbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIG5vdGhpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBBdXRob3Iocyk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgLSBEaW5lc2ggQW5uYXl5YSwgZGluZXNoYUBvcGVuY29yZXMub3JnICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBSZXZpc2lvbiA6IE5vdiAyNiwgMjAxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vIAorLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBDb3B5cmlnaHQgKEMpIDIwMDAgQXV0aG9ycyBhbmQgT1BFTkNPUkVTLk9SRyAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBmaWxlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCB3aXRob3V0ICAgICAgICAgLy8vLworLy8vLyByZXN0cmljdGlvbiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgICAgLy8vLworLy8vLyByZW1vdmVkIGZyb20gdGhlIGZpbGUgYW5kIHRoYXQgYW55IGRlcml2YXRpdmUgd29yayBjb250YWlucyAgLy8vLworLy8vLyB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGFzc29jaWF0ZWQgZGlzY2xhaW1lci4gLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0ICAgLy8vLworLy8vLyBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgLy8vLworLy8vLyBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgLy8vLworLy8vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55ICAgLy8vLworLy8vLyBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgICAgICAgLy8vLworLy8vLyB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkICAgLy8vLworLy8vLyB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSICAgICAgLy8vLworLy8vLyBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgLy8vLworLy8vLyBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAgLy8vLworLy8vLyBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgc291cmNlOyBpZiBub3QsIGRvd25sb2FkIGl0ICAgLy8vLworLy8vLyBmcm9tIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9sZ3BsLnNodG1sICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBTaW1wbGUgRG91YmxlIHN5bmMgbG9naWMgd2l0aCBSZXNldCB2YWx1ZSA9IDAKKy8vIFRoaXMgZG91YmxlIHNpZ25hbCBzaG91bGQgYmUgdXNlZCBmb3Igc2lnbmFsIHRyYW5zaXRpbmcgZnJvbSBsb3cgdG8gaGlnaAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZSBkb3VibGVfc3luY19oaWdoICAgKAorICAgICAgICAgICAgICBpbl9kYXRhICAgICwKKyAgICAgICAgICAgICAgb3V0X2NsayAgICAsCisgICAgICAgICAgICAgIG91dF9yc3RfbiAgLAorICAgICAgICAgICAgICBvdXRfZGF0YSAgIAorICAgICAgICAgICk7CisKK3BhcmFtZXRlciBXSURUSCA9IDE7CisKK2lucHV0IFtXSURUSC0xOjBdICAgIGluX2RhdGEgICAgOyAvLyBJbnB1dCBmcm9tIERpZmZlcmVudCBjbG9jayBkb21haW4KK2lucHV0ICAgICAgICAgICAgICAgIG91dF9jbGsgICAgOyAvLyBPdXRwdXQgY2xvY2sKK2lucHV0ICAgICAgICAgICAgICAgIG91dF9yc3RfbiAgOyAvLyBBY3RpdmUgbG93IFJlc2V0CitvdXRwdXRbV0lEVEgtMTowXSAgICBvdXRfZGF0YSAgIDsgLy8gT3V0cHV0IERhdGEKKworCityZWcgW1dJRFRILTE6MF0gICAgIGluX2RhdGFfcyAgOyAvLyBPbmUgICBDeWNsZSBzeW5jIAorcmVnIFtXSURUSC0xOjBdICAgICBpbl9kYXRhXzJzIDsgLy8gdHdvICAgQ3ljbGUgc3luYyAKK3JlZyBbV0lEVEgtMTowXSAgICAgaW5fZGF0YV8zcyA7IC8vIHRocmVlIEN5Y2xlIHN5bmMgCisKK2Fzc2lnbiBvdXRfZGF0YSA9ICBpbl9kYXRhXzNzOworCithbHdheXMgQChuZWdlZGdlIG91dF9yc3RfbiBvciBwb3NlZGdlIG91dF9jbGspCitiZWdpbgorICAgaWYob3V0X3JzdF9uID09IDEnYjApCisgICBiZWdpbgorICAgICAgaW5fZGF0YV9zICA8PSB7V0lEVEh7MSdiMH19OworICAgICAgaW5fZGF0YV8ycyA8PSB7V0lEVEh7MSdiMH19OworICAgICAgaW5fZGF0YV8zcyA8PSB7V0lEVEh7MSdiMH19OworICAgZW5kCisgICBlbHNlCisgICBiZWdpbgorICAgICAgaW5fZGF0YV9zICA8PSBpbl9kYXRhOworICAgICAgaW5fZGF0YV8ycyA8PSBpbl9kYXRhX3M7CisgICAgICBpbl9kYXRhXzNzIDw9IGluX2RhdGFfMnM7CisgICBlbmQKK2VuZAorCisKK2VuZG1vZHVsZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvbGliL2RvdWJsZV9zeW5jX2xvdy52IGIvdmVyaWxvZy9ydGwvbGliL2RvdWJsZV9zeW5jX2xvdy52Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmVmZDQyNjkKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC9saWIvZG91YmxlX3N5bmNfbG93LnYKQEAgLTAsMCArMSwxMDYgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSAsIERpbmVzaCBBbm5heXlhICAgICAgICAgICAgICAgICAgICAgICAgICAKKy8vIAorLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBDcmVhdGVkIGJ5IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgT01TIDgwNTEgY29yZXMgY29tbW9uIGxpYnJhcnkgTW9kdWxlICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIE9NUyA4MDUxIGNvcmVzIHByb2plY3QgICAgICAgICAgICAgLy8vLworLy8vLyAgaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2NvcmVzL29tczgwNTFtaW5pLyAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgaHR0cHM6Ly9naXRodWIuY29tL2RpbmVzaGFubmF5eWEveWlmaXZlX3IwLmdpdCAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgT01TIDgwNTEgZGVmaW5pdGlvbnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVG8gRG86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICBub3RoaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgQXV0aG9yKHMpOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgIC0gRGluZXNoIEFubmF5eWEsIGRpbmVzaGFAb3BlbmNvcmVzLm9yZyAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgUmV2aXNpb24gOiBOb3YgMjYsIDIwMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLyAKKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gQ29weXJpZ2h0IChDKSAyMDAwIEF1dGhvcnMgYW5kIE9QRU5DT1JFUy5PUkcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgIC8vLy8KKy8vLy8gcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgIC8vLy8KKy8vLy8gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgIC8vLy8KKy8vLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCAgIC8vLy8KKy8vLy8gYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IC8vLy8KKy8vLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSAgIC8vLy8KKy8vLy8gbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlICAgICAgIC8vLy8KKy8vLy8gdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCAgIC8vLy8KKy8vLy8gd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAgICAgIC8vLy8KKy8vLy8gUFVSUE9TRS4gIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIC8vLy8KKy8vLy8gZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvdXJjZTsgaWYgbm90LCBkb3dubG9hZCBpdCAgIC8vLy8KKy8vLy8gZnJvbSBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvbGdwbC5zaHRtbCAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gU2ltcGxlIERvdWJsZSBzeW5jIGxvZ2ljIHdpdGggUmVzZXQgdmFsdWUgPSAxCisvLyBUaGlzIGRvdWJsZSBzaWduYWwgc2hvdWxkIGJlIHVzZWQgZm9yIHNpZ25hbCB0cmFuc2l0aW5nIGZyb20gbG93IHRvIGhpZ2gKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUgZG91YmxlX3N5bmNfbG93ICAgKAorICAgICAgICAgICAgICBpbl9kYXRhICAgICwKKyAgICAgICAgICAgICAgb3V0X2NsayAgICAsCisgICAgICAgICAgICAgIG91dF9yc3RfbiAgLAorICAgICAgICAgICAgICBvdXRfZGF0YSAgIAorICAgICAgICAgICk7CisKK3BhcmFtZXRlciBXSURUSCA9IDE7CisKK2lucHV0IFtXSURUSC0xOjBdICAgIGluX2RhdGEgICAgOyAvLyBJbnB1dCBmcm9tIERpZmZlcmVudCBjbG9jayBkb21haW4KK2lucHV0ICAgICAgICAgICAgICAgIG91dF9jbGsgICAgOyAvLyBPdXRwdXQgY2xvY2sKK2lucHV0ICAgICAgICAgICAgICAgIG91dF9yc3RfbiAgOyAvLyBBY3RpdmUgbG93IFJlc2V0CitvdXRwdXRbV0lEVEgtMTowXSAgICBvdXRfZGF0YSAgIDsgLy8gT3V0cHV0IERhdGEKKworCityZWcgW1dJRFRILTE6MF0gICAgIGluX2RhdGFfcyAgOyAvLyBPbmUgICBDeWNsZSBzeW5jIAorcmVnIFtXSURUSC0xOjBdICAgICBpbl9kYXRhXzJzIDsgLy8gdHdvICAgQ3ljbGUgc3luYyAKK3JlZyBbV0lEVEgtMTowXSAgICAgaW5fZGF0YV8zcyA7IC8vIHRocmVlIEN5Y2xlIHN5bmMgCisKK2Fzc2lnbiBvdXRfZGF0YSA9ICBpbl9kYXRhXzNzOworCithbHdheXMgQChuZWdlZGdlIG91dF9yc3RfbiBvciBwb3NlZGdlIG91dF9jbGspCitiZWdpbgorICAgaWYob3V0X3JzdF9uID09IDEnYjApCisgICBiZWdpbgorICAgICAgaW5fZGF0YV9zICA8PSB7V0lEVEh7MSdiMX19OworICAgICAgaW5fZGF0YV8ycyA8PSB7V0lEVEh7MSdiMX19OworICAgICAgaW5fZGF0YV8zcyA8PSB7V0lEVEh7MSdiMX19OworICAgZW5kCisgICBlbHNlCisgICBiZWdpbgorICAgICAgaW5fZGF0YV9zICA8PSBpbl9kYXRhOworICAgICAgaW5fZGF0YV8ycyA8PSBpbl9kYXRhX3M7CisgICAgICBpbl9kYXRhXzNzIDw9IGluX2RhdGFfMnM7CisgICBlbmQKK2VuZAorCisKK2VuZG1vZHVsZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvbGliL3B1bHNlX2dlbl90eXBlMS5zdiBiL3Zlcmlsb2cvcnRsL2xpYi9wdWxzZV9nZW5fdHlwZTEuc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM4ZmUwMwotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL2xpYi9wdWxzZV9nZW5fdHlwZTEuc3YKQEAgLTAsMCArMSwzNyBAQAorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gVGhpcyBtb2R1bGUgaXMgdXNlZCB0byBnZW5lcmF0ZSAxbXMgYW5kIDFzZWMgcHVsc2UgYmFzZWQgb24gMXVzIHRyaWdnZXIKKy8vIHB1bHNlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUgcHVsc2VfZ2VuX3R5cGUxKAorCW91dHB1dCBsb2dpYyBjbGtfcHVsc2UsCisKKwlpbnB1dCBsb2dpYyBjbGssCisgICAgICAgIGlucHV0IGxvZ2ljIHJlc2V0X24sCisJaW5wdXQgbG9naWMgdHJpZ2dlcgorKTsKKworcGFyYW1ldGVyIFdEPSAxMDsgICAvLyBUaGlzIHdpbGwgY291bnQgZnJvbSAwIHRvIDEwMjMKK3BhcmFtZXRlciBNQVhfQ05UID0gOTk5OworCitsb2dpYyBbV0QtMTowXSAgY250OworCithc3NpZ24gY2xrX3B1bHNlID0gKGNudCA9PSAwKSAmJiB0cmlnZ2VyOworCithbHdheXMgQCAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByZXNldF9uKQorYmVnaW4KKyAgIGlmIChyZXNldF9uID09IDEnYjApIGJlZ2luIAorICAgICAgY250IDw9ICdiMDsKKyAgIGVuZCBlbHNlIGJlZ2luIAorICAgICAgaWYodHJpZ2dlcikgYmVnaW4KKyAgICAgICAgICBpZihjbnQgPj0gTUFYX0NOVCkKKyAgICAgICAgICAgICAgY250IDw9IDA7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBjbnQgPD0gY250ICsxOworICAgICAgZW5kCisgICBlbmQKK2VuZAorCitlbmRtb2R1bGUKKwpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvbGliL3B1bHNlX2dlbl90eXBlMi5zdiBiL3Zlcmlsb2cvcnRsL2xpYi9wdWxzZV9nZW5fdHlwZTIuc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJjNzU5ZQotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL2xpYi9wdWxzZV9nZW5fdHlwZTIuc3YKQEAgLTAsMCArMSwzNiBAQAorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gVGhpcyBtb2R1bGUgaXMgdXNlZCB0byBnZW5lcmF0ZSAxdXMgYmFzZWQgb24gY29uZmlnIHZhbHVlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUgcHVsc2VfZ2VuX3R5cGUyICMocGFyYW1ldGVyIFdEID0gMTApCisgICAgKAorCW91dHB1dCBsb2dpYyAgICAgICAgICAgY2xrX3B1bHNlLAorCisJaW5wdXQgbG9naWMgICAgICAgICAgICBjbGssCisgICAgICAgIGlucHV0IGxvZ2ljICAgICAgICAgICAgcmVzZXRfbiwKKwlpbnB1dCBsb2dpYyBbV0QtMTowXSAgIGNmZ19tYXhfY250CispOworCisKK2xvZ2ljIFtXRC0xOjBdICBjbnQ7CisKKworYWx3YXlzIEAgKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcmVzZXRfbikKK2JlZ2luCisgICBpZiAocmVzZXRfbiA9PSAxJ2IwKSBiZWdpbiAKKyAgICAgIGNudCA8PSAnYjA7CisgICAgICBjbGtfcHVsc2UgPD0gJ2IwOworICAgZW5kIGVsc2UgYmVnaW4gCisgICAgICBpZihjbnQgPT0gY2ZnX21heF9jbnQpIGJlZ2luCisgICAgICAgICAgY250ICAgICAgIDw9IDA7CisgICAgICAgICAgY2xrX3B1bHNlIDw9IDEnYjE7CisgICAgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICAgIGNudCAgICAgICA8PSBjbnQgKzE7CisgICAgICAgICAgY2xrX3B1bHNlIDw9IDEnYjA7CisgICAgICBlbmQKKyAgIGVuZAorZW5kCisKK2VuZG1vZHVsZQorCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9saWIvcmVnaXN0ZXJzLnYgYi92ZXJpbG9nL3J0bC9saWIvcmVnaXN0ZXJzLnYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTRhODdhMQotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL2xpYi9yZWdpc3RlcnMudgpAQCAtMCwwICsxLDMyOSBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxICwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgIAorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IENyZWF0ZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUdWJvIDgwNTEgY29yZXMgY29tbW9uIGxpYnJhcnkgTW9kdWxlICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgVHVyYm8gODA1MSBjb3JlcyBwcm9qZWN0ICAgICAgICAgICAvLy8vCisvLy8vICBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvY29yZXMvdHVyYm84MDUxLyAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUdXJibyA4MDUxIGRlZmluaXRpb25zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUbyBEbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIG5vdGhpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBBdXRob3Iocyk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgLSBEaW5lc2ggQW5uYXl5YSwgZGluZXNoYUBvcGVuY29yZXMub3JnICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBSZXZpc2lvbiA6IE1hciAyLCAyMDExICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vIAorLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBDb3B5cmlnaHQgKEMpIDIwMDAgQXV0aG9ycyBhbmQgT1BFTkNPUkVTLk9SRyAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBmaWxlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCB3aXRob3V0ICAgICAgICAgLy8vLworLy8vLyByZXN0cmljdGlvbiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgICAgLy8vLworLy8vLyByZW1vdmVkIGZyb20gdGhlIGZpbGUgYW5kIHRoYXQgYW55IGRlcml2YXRpdmUgd29yayBjb250YWlucyAgLy8vLworLy8vLyB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGFzc29jaWF0ZWQgZGlzY2xhaW1lci4gLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0ICAgLy8vLworLy8vLyBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgLy8vLworLy8vLyBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgLy8vLworLy8vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55ICAgLy8vLworLy8vLyBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgICAgICAgLy8vLworLy8vLyB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkICAgLy8vLworLy8vLyB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSICAgICAgLy8vLworLy8vLyBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgLy8vLworLy8vLyBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAgLy8vLworLy8vLyBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgc291cmNlOyBpZiBub3QsIGRvd25sb2FkIGl0ICAgLy8vLworLy8vLyBmcm9tIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9sZ3BsLnNodG1sICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqKiBtb2R1bGU6IGJpdCByZWdpc3RlcgorCisqKiBkZXNjcmlwdGlvbjogaW5mZXJzIGEgcmVnaXN0ZXIsIG1ha2UgaXQgbW9kdWxhcgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworbW9kdWxlIGJpdF9yZWdpc3RlciAoCisJCSAvL2lucHV0cworCQkgd2UsCQkgCisJCSBjbGssCisJCSByZXNldF9uLAorCQkgZGF0YV9pbiwKKwkJIAorCQkgLy9vdXRwdXRzCisJCSBkYXRhX291dAorCQkgKTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJlc2V0IERlZmF1bHQgdmFsdWUKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitwYXJhbWV0ZXIgIFJFU0VUX0RFRkFVTFQgPSAxJ2gwOworCisgIGlucHV0CSB3ZTsKKyAgaW5wdXQJIGNsazsKKyAgaW5wdXQJIHJlc2V0X247CisgIGlucHV0CSBkYXRhX2luOworICBvdXRwdXQgZGF0YV9vdXQ7CisgIAorICByZWcJIGRhdGFfb3V0OworICAKKyAgLy9pbmZlciB0aGUgcmVnaXN0ZXIKKyAgYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByZXNldF9uKQorICAgIGJlZ2luCisgICAgICBpZiAoIXJlc2V0X24pCisJZGF0YV9vdXQgPD0gUkVTRVRfREVGQVVMVDsKKyAgICAgIGVsc2UgaWYgKHdlKQorCWRhdGFfb3V0IDw9IGRhdGFfaW47CisgICAgZW5kIC8vIGFsd2F5cyBAIChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJlc2V0X24pCitlbmRtb2R1bGUgLy8gcmVnaXN0ZXIKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqKiBtb2R1bGU6IHJlcSByZWdpc3Rlci4KKworKiogZGVzY3JpcHRpb246IFRoaXMgcmVnaXN0ZXIgaXMgc2V0IGJ5IGNwdSB3cml0dGluZyAxIGFuZCByZXNldCBieQorICAgICAgICAgICAgICAgIGhhcndhcmQgcmVxID0gMQorCisgTm90ZTogV2hlbiB0aGVyZSBpcyBhIGNsYXNoIGJldHdlZW4gY3B1IGFuZCBoYXJkd2FyZSwgY3B1IGlzIGdpdmVuIGhpZ2hlcgorICAgICAgIHByaW9yaXR5CisKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK21vZHVsZSByZXFfcmVnaXN0ZXIgKAorCQkgLy9pbnB1dHMKKwkJIGNsaywKKwkJIHJlc2V0X24sCisJCSBjcHVfd2UsCQkgCisJCSBjcHVfcmVxLAorCQkgaHdhcmVfYWNrLAorCQkgCisJCSAvL291dHB1dHMKKwkJIGRhdGFfb3V0CisJCSApOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUmVzZXQgRGVmYXVsdCB2YWx1ZQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3BhcmFtZXRlciAgUkVTRVRfREVGQVVMVCA9IDEnaDA7CisKKyAgaW5wdXQJIGNsayAgICAgIDsKKyAgaW5wdXQJIHJlc2V0X24gIDsKKyAgaW5wdXQJIGNwdV93ZSAgIDsgLy8gY3B1IHdyaXRlIGVuYWJsZQorICBpbnB1dAkgY3B1X3JlcSAgOyAvLyBDUFUgUmVxdWVzdAorICBpbnB1dAkgaHdhcmVfYWNrOyAvLyBIYXJkd2FyZSBBY2sKKyAgb3V0cHV0IGRhdGFfb3V0IDsKKyAgCisgIHJlZwkgZGF0YV9vdXQ7CisgIAorICAvL2luZmVyIHRoZSByZWdpc3RlcgorICBhbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJlc2V0X24pCisgICAgYmVnaW4KKyAgICAgIGlmICghcmVzZXRfbikKKwlkYXRhX291dCA8PSBSRVNFVF9ERUZBVUxUOworICAgICAgZWxzZSBpZiAoY3B1X3dlICYgY3B1X3JlcSkgLy8gU2V0IG9uIENQVSBSZXF1ZXN0CisJIGRhdGFfb3V0IDw9IDEnYjE7CisgICAgICBlbHNlIGlmIChod2FyZV9hY2spICAvLyBSZXNldCB0aGUgZmxhZyBvbiBIYXJkd2FyZSBhY2sKKwkgZGF0YV9vdXQgPD0gMSdiMDsKKyAgICBlbmQgLy8gYWx3YXlzIEAgKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcmVzZXRfbikKK2VuZG1vZHVsZSAvLyByZWdpc3RlcgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoqIG1vZHVsZTogcmVxIHJlZ2lzdGVyLgorCisqKiBkZXNjcmlwdGlvbjogVGhpcyByZWdpc3RlciBpcyBjbGVhcmVkIGJ5IGNwdSB3cml0dGluZyAxIGFuZCBzZXQgYnkKKyAgICAgICAgICAgICAgICBoYXJ3YXJkIHJlcSA9IDEKKworIE5vdGU6IFdoZW4gdGhlcmUgaXMgYSBjbGFzaCBiZXR3ZWVuIGNwdSBhbmQgaGFyZHdhcmUsIAorICAgICAgIGhhcmR3YXJlIGlzIGdpdmVuIGhpZ2hlciBwcmlvcml0eQorCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCittb2R1bGUgc3RhdF9yZWdpc3RlciAoCisJCSAvL2lucHV0cworCQkgY2xrLAorCQkgcmVzZXRfbiwKKwkJIGNwdV93ZSwJCSAKKwkJIGNwdV9hY2ssCisJCSBod2FyZV9yZXEsCisJCSAKKwkJIC8vb3V0cHV0cworCQkgZGF0YV9vdXQKKwkJICk7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSZXNldCBEZWZhdWx0IHZhbHVlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcGFyYW1ldGVyICBSRVNFVF9ERUZBVUxUID0gMSdoMDsKKworICBpbnB1dAkgY2xrICAgICAgOworICBpbnB1dAkgcmVzZXRfbiAgOworICBpbnB1dAkgY3B1X3dlICAgOyAvLyBjcHUgd3JpdGUgZW5hYmxlCisgIGlucHV0CSBjcHVfYWNrICA7IC8vIENQVSBBY2sKKyAgaW5wdXQJIGh3YXJlX3JlcTsgLy8gSGFyZHdhcmUgUmVxCisgIG91dHB1dCBkYXRhX291dCA7CisgIAorICByZWcJIGRhdGFfb3V0OworICAKKyAgLy9pbmZlciB0aGUgcmVnaXN0ZXIKKyAgYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByZXNldF9uKQorICAgIGJlZ2luCisgICAgICBpZiAoIXJlc2V0X24pCisJZGF0YV9vdXQgPD0gUkVTRVRfREVGQVVMVDsKKyAgICAgIGVsc2UgaWYgKGh3YXJlX3JlcSkgIC8vIFNldCB0aGUgZmxhZyBvbiBIYXJkd2FyZSBSZXEKKwkgZGF0YV9vdXQgPD0gMSdiMTsKKyAgICAgIGVsc2UgaWYgKGNwdV93ZSAmIGNwdV9hY2spIC8vIENsZWFyIG9uIENQVSBBY2sKKwkgZGF0YV9vdXQgPD0gMSdiMDsKKyAgICBlbmQgLy8gYWx3YXlzIEAgKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcmVzZXRfbikKK2VuZG1vZHVsZSAvLyByZWdpc3RlcgorCisKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBtb2R1bGU6IGdlbmVyaWMgcmVnaXN0ZXIKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworbW9kdWxlICBnZW5lcmljX3JlZ2lzdGVyCSgKKwkgICAgICAvL0xpc3Qgb2YgSW5wdXRzCisJICAgICAgd2UsCQkgCisJICAgICAgZGF0YV9pbiwKKwkgICAgICByZXNldF9uLAorCSAgICAgIGNsaywKKwkgICAgICAKKwkgICAgICAvL0xpc3Qgb2YgT3V0cworCSAgICAgIGRhdGFfb3V0CisJICAgICAgKTsKKworICBwYXJhbWV0ZXIgICBXRCAgICAgICAgICAgICAgID0gMTsgIAorICBwYXJhbWV0ZXIgICBSRVNFVF9ERUZBVUxUICAgID0gMDsgIAorICBpbnB1dCBbV0QtMTowXSAgICAgd2U7CQorICBpbnB1dCBbV0QtMTowXSAgICAgZGF0YV9pbjsJCisgIGlucHV0ICAgICAgICAgICAgICByZXNldF9uOworICBpbnB1dAkJICAgICBjbGs7CisgIG91dHB1dCBbV0QtMTowXSAgICBkYXRhX291dDsKKworCitnZW5lcmF0ZQorICBnZW52YXIgaTsKKyAgZm9yIChpID0gMDsgaSA8IFdEOyBpID0gaSArIDEpIGJlZ2luIDogZ2VuX2JpdF9yZWcKKyAgICBiaXRfcmVnaXN0ZXIgIyhSRVNFVF9ERUZBVUxUW2ldKSB1X2JpdF9yZWcgKCAgIAorICAgICAgICAgICAgICAgIC53ZSAgICAgICAgICh3ZVtpXSksCisgICAgICAgICAgICAgICAgLmNsayAgICAgICAgKGNsayksCisgICAgICAgICAgICAgICAgLnJlc2V0X24gICAgKHJlc2V0X24pLAorICAgICAgICAgICAgICAgIC5kYXRhX2luICAgIChkYXRhX2luW2ldKSwKKyAgICAgICAgICAgICAgICAuZGF0YV9vdXQgICAoZGF0YV9vdXRbaV0pCisgICAgICAgICAgICApOworICBlbmQKK2VuZGdlbmVyYXRlCisKKworZW5kbW9kdWxlCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIG1vZHVsZTogZ2VuZXJpYyBpbnRlcnJ1cHQgc3RhdHVzCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK21vZHVsZSAgZ2VuZXJpY19pbnRyX3N0YXRfcmVnCSgKKwkJIC8vaW5wdXRzCisJCSBjbGssCisJCSByZXNldF9uLAorCQkgcmVnX3dlLAkJIAorCQkgcmVnX2RpbiwKKwkJIGh3YXJlX3JlcSwKKwkJIAorCQkgLy9vdXRwdXRzCisJCSBkYXRhX291dAorCSAgICAgICk7CisKKyAgcGFyYW1ldGVyICAgV0QgICAgICAgICAgICAgICA9IDE7ICAKKyAgcGFyYW1ldGVyICAgUkVTRVRfREVGQVVMVCAgICA9IDA7ICAKKyAgaW5wdXQgW1dELTE6MF0gICAgIHJlZ193ZTsJCisgIGlucHV0IFtXRC0xOjBdICAgICByZWdfZGluOwkKKyAgaW5wdXQgW1dELTE6MF0gICAgIGh3YXJlX3JlcTsJCisgIGlucHV0ICAgICAgICAgICAgICByZXNldF9uOworICBpbnB1dAkJICAgICBjbGs7CisgIG91dHB1dCBbV0QtMTowXSAgICBkYXRhX291dDsKKworCitnZW5lcmF0ZQorICBnZW52YXIgaTsKKyAgZm9yIChpID0gMDsgaSA8IFdEOyBpID0gaSArIDEpIGJlZ2luIDogZ2VuX2JpdF9yZWcKKyAgICBzdGF0X3JlZ2lzdGVyICMoUkVTRVRfREVGQVVMVFtpXSkgdV9iaXRfcmVnICgKKwkJIC8vaW5wdXRzCisJCSAuIGNsayAgICAgICAgKGNsayAgICAgICAgICAgKSwKKwkJIC4gcmVzZXRfbiAgICAocmVzZXRfbiAgICAgICApLAorCQkgLiBjcHVfd2UgICAgIChyZWdfd2VbaV0gICAgICksCQkgCisJCSAuIGNwdV9hY2sgICAgKHJlZ19kaW5baV0gICAgKSwKKwkJIC4gaHdhcmVfcmVxICAoaHdhcmVfcmVxW2ldICApLAorCQkgCisJCSAvL291dHB1dHMKKwkJIC4gZGF0YV9vdXQgIChkYXRhX291dFtpXSAgICApCisJCSApOworCisgIGVuZAorZW5kZ2VuZXJhdGUKKworCitlbmRtb2R1bGUKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIG1vZHVsZTogZ2VuZXJpYyAzMmIgcmVnaXN0ZXIKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworbW9kdWxlICBnZW5fMzJiX3JlZwkoCisJICAgICAgLy9MaXN0IG9mIElucHV0cworCSAgICAgIGNzLAorCSAgICAgIHdlLAkJIAorCSAgICAgIGRhdGFfaW4sCisJICAgICAgcmVzZXRfbiwKKwkgICAgICBjbGssCisJICAgICAgCisJICAgICAgLy9MaXN0IG9mIE91dHMKKwkgICAgICBkYXRhX291dAorCSAgICAgICk7CisKKyAgcGFyYW1ldGVyICAgUkVTRVRfREVGQVVMVCAgICA9IDMyJ2gwOyAgCisgIGlucHV0IFszOjBdICAgICAgd2U7CQorICBpbnB1dCAgICAgICAgICAgIGNzOworICBpbnB1dCBbMzE6MF0gICAgIGRhdGFfaW47CQorICBpbnB1dCAgICAgICAgICAgIHJlc2V0X247CisgIGlucHV0CQkgICBjbGs7CisgIG91dHB1dCBbMzE6MF0gICAgZGF0YV9vdXQ7CisKKworICByZWcgWzMxOjBdICAgIGRhdGFfb3V0OworCithbHdheXMgQCAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByZXNldF9uKSBiZWdpbiAKKyAgaWYgKHJlc2V0X24gPT0gMSdiMCkgYmVnaW4KKyAgICBkYXRhX291dCAgPD0gUkVTRVRfREVGQVVMVCA7CisgIGVuZAorICBlbHNlIGJlZ2luCisgICAgaWYoY3MgJiYgd2VbMF0pIGRhdGFfb3V0Wzc6MF0gICA8PSBkYXRhX2luWzc6MF07CisgICAgaWYoY3MgJiYgd2VbMV0pIGRhdGFfb3V0WzE1OjhdICA8PSBkYXRhX2luWzE1OjhdOworICAgIGlmKGNzICYmIHdlWzJdKSBkYXRhX291dFsyMzoxNl0gPD0gZGF0YV9pblsyMzoxNl07CisgICAgaWYoY3MgJiYgd2VbM10pIGRhdGFfb3V0WzMxOjI0XSA8PSBkYXRhX2luWzMxOjI0XTsKKyAgZW5kCitlbmQKKworCitlbmRtb2R1bGUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL2xpYi9yZXNldF9zeW5jLnN2IGIvdmVyaWxvZy9ydGwvbGliL3Jlc2V0X3N5bmMuc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDk2YzcxOQotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL2xpYi9yZXNldF9zeW5jLnN2CkBAIC0wLDAgKzEsMTAxIEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEgLCBEaW5lc2ggQW5uYXl5YSAgICAgICAgICAgICAgICAgICAgICAgICAgCisvLyAKKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogQ3JlYXRlZCBieSBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEFjdGl2ZSBsb3cgcmVzZXQgc3luY2hyb25pemF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIHlpZml2ZSBjb3JlcyBwcm9qZWN0ICAgICAgICAgICAgICAgLy8vLworLy8vLyAgaHR0cHM6Ly9naXRodWIuY29tL2RpbmVzaGFubmF5eWEveWlmaXZlX3IwLmdpdCAgICAgICAgICAgICAgLy8vLworLy8vLyAgaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2NvcmVzL3lpZml2ZS8gICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgRGVzY3JpcHRpb246ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgU3luY2hyb25pemUgdGhlIGFjdGl2ZSBsb3cgcmVzZXQgdG8gZGVzdGluYXRpb24gY2xvY2sgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVG8gRG86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICBub3RoaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgQXV0aG9yKHMpOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgIC0gRGluZXNoIEFubmF5eWEsIGRpbmVzaGFAb3BlbmNvcmVzLm9yZyAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgUmV2aXNpb24gOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgdjA6ICAgIEp1bmUgMTcsIDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICBJbml0aWFsIHZlcnNpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBDb3B5cmlnaHQgKEMpIDIwMDAgQXV0aG9ycyBhbmQgT1BFTkNPUkVTLk9SRyAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBmaWxlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCB3aXRob3V0ICAgICAgICAgLy8vLworLy8vLyByZXN0cmljdGlvbiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgICAgLy8vLworLy8vLyByZW1vdmVkIGZyb20gdGhlIGZpbGUgYW5kIHRoYXQgYW55IGRlcml2YXRpdmUgd29yayBjb250YWlucyAgLy8vLworLy8vLyB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGFzc29jaWF0ZWQgZGlzY2xhaW1lci4gLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0ICAgLy8vLworLy8vLyBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgLy8vLworLy8vLyBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgLy8vLworLy8vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55ICAgLy8vLworLy8vLyBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgICAgICAgLy8vLworLy8vLyB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkICAgLy8vLworLy8vLyB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSICAgICAgLy8vLworLy8vLyBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgLy8vLworLy8vLyBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAgLy8vLworLy8vLyBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgc291cmNlOyBpZiBub3QsIGRvd25sb2FkIGl0ICAgLy8vLworLy8vLyBmcm9tIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9sZ3BsLnNodG1sICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCittb2R1bGUgcmVzZXRfc3luYyAgICgKKwkgICAgICBzY2FuX21vZGUgICwKKyAgICAgICAgICAgICAgZGNsayAgICAgICAsIC8vIERlc3RpbmF0aW9uIGNsb2NrIGRvbWFpbgorCSAgICAgIGFyc3RfbiAgICAgLCAvLyBhY3RpdmUgbG93IGFzeW5jIHJlc2V0CisgICAgICAgICAgICAgIHNyc3RfbiAKKyAgICAgICAgICApOworCitwYXJhbWV0ZXIgV0lEVEggPSAxOworCitpbnB1dCAgICBzY2FuX21vZGUgIDsgLy8gdGVzdCBtb2RlCitpbnB1dCAgICBkY2xrICAgICAgIDsgLy8gRGVzdGluYXRpb24gY2xvY2sKK2lucHV0ICAgIGFyc3RfbiAgICAgOyAvLyBBc3luYyBSZXNldAorb3V0cHV0ICAgc3JzdF9uICAgICA7IC8vIFN5bmMgUmVzZXQgdy5yLnQgZGNsaworCisKK3JlZyAgICAgIGluX2RhdGFfcyAgOyAvLyBPbmUgICBDeWNsZSBzeW5jIAorcmVnICAgICAgaW5fZGF0YV8ycyA7IC8vIHR3byAgIEN5Y2xlIHN5bmMgCisKK2Fzc2lnbiBzcnN0X24gPSAgKHNjYW5fbW9kZSkgPyBhcnN0X24gOiBpbl9kYXRhXzJzOworCithbHdheXMgQChuZWdlZGdlIGFyc3RfbiAgb3IgcG9zZWRnZSBkY2xrKQorYmVnaW4KKyAgIGlmKGFyc3RfbiA9PSAxJ2IwKQorICAgYmVnaW4KKyAgICAgIGluX2RhdGFfcyAgPD0gMSdiMDsKKyAgICAgIGluX2RhdGFfMnMgPD0gMSdiMDsKKyAgIGVuZAorICAgZWxzZQorICAgYmVnaW4KKyAgICAgIGluX2RhdGFfcyAgPD0gMSdiMTsKKyAgICAgIGluX2RhdGFfMnMgPD0gaW5fZGF0YV9zOworICAgZW5kCitlbmQKKworCitlbmRtb2R1bGUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL2xpYi9zZXJfaW5mXzMyYi5zdiBiL3Zlcmlsb2cvcnRsL2xpYi9zZXJfaW5mXzMyYi5zdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjI4ODUyCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvbGliL3Nlcl9pbmZfMzJiLnN2CkBAIC0wLDAgKzEsMTIxIEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEgLCBEaW5lc2ggQW5uYXl5YSAgICAgICAgICAgICAgICAgICAgICAgICAgCisvLyAKKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogQ3JlYXRlZCBieSBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIHNlcl9pbmZfMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBtYmlzdF9jdHJsIGNvcmVzIHByb2plY3QgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHBzOi8vZ2l0aHViLmNvbS9kaW5lc2hhbm5heXlhL21iaXN0X2N0cmwuZ2l0ICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICBUaGlzIGJsb2NrIG1hbmFnZXMgdGhlIHNlcmlhbCB0byBQYXJhbGxlbCBjb252ZXJzaW9uICAgICAgIC8vLy8KKy8vLy8gICBUaGlzIGJsb2NrIHVzZWZ1bGwgZm9yIEJpc3QgU0RJL1NETyBhY2Nlc3MgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICBGdW5jdGlvbjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAxLiBXaGVuIHJlZ193cj0xLCB0aGlzIGJsb2NrIHNldCBzaGlmdD0xIGFuZCBzaGlmdCAgICAgIC8vLy8KKy8vLy8gICAgICAgICByZWdfd2RhdGEgc2VyaWFsIHRocm91Z2ggc2RpIGZvciAzMiBjeWNsZXMgYW5kICAgICAgIC8vLy8KKy8vLy8gICAgICAgICBhc3NlcnRzIFJlZyBBY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAyLiBXaGVuIHJlZ19yZD0xLCB0aGlzIGJsb2NrIHNldCBzaG9mdD0xIGFuZCBzZXJpYWwgICAgIC8vLy8KKy8vLy8gICAgICAgICBjYXB0dXJlIHRoZSBzZG8gdG8gcmVnX3JkYXRhIGZvciAzMiBjeWNsZXMgYW5kICAgICAgIC8vLy8KKy8vLy8gICAgICAgICBhc3NlcnRzIFJlZyBBY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcihzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAtIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFJldmlzaW9uIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC4wIC0gMjB0aCBPY3QgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgSW5pdGlhbCBpbnRlZ3JhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworbW9kdWxlIHNlcl9pbmZfMzJiCisgICAgICAgKAorCisgICAgLy8gTWFzdGVyIFBvcnQKKyAgICAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgcnN0X24gICAgICAgLCAgLy8gUmVndWxhciBSZXNldCBzaWduYWwKKyAgICAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgY2xrICAgICAgICAgLCAgLy8gU3lzdGVtIGNsb2NrCisgICAgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgIHJlZ193ciAgICAgICwgIC8vIFdyaXRlIFJlcXVlc3QKKyAgICAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgcmVnX3JkICAgICAgLCAgLy8gUmVhZCBSZXF1ZXN0CisgICAgICAgaW5wdXQgICBsb2dpYyBbMzE6MF0gICAgICAgIHJlZ193ZGF0YSAgICwgIC8vIGRhdGEgb3V0cHV0CisgICAgICAgb3V0cHV0ICBsb2dpYyBbMzE6MF0gICAgICAgIHJlZ19yZGF0YSAgICwgIC8vIGRhdGEgaW5wdXQKKyAgICAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgcmVnX2FjayAgICAgLCAgLy8gYWNrbm93bGVnZW1lbnQKKworICAgIC8vIFNsYXZlIFBvcnQKKyAgICAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgc2RpICAgICAgICAgLCAgLy8gU2VyaWFsIFNESQorICAgICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICBzaGlmdCAgICAgICAsICAvLyBTaGlmdCBTaWduYWwKKyAgICAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgc2RvICAgICAgICAgICAgLy8gU2VyaWFsIFNETworCisgICAgKTsKKworCisgICAgcGFyYW1ldGVyIElETEUgPSAxJ2IwOworICAgIHBhcmFtZXRlciBTSElGVF9EQVRBID0gMSdiMTsKKworICAgIGxvZ2ljICAgICAgICBzdGF0ZTsKKyAgICBsb2dpYyBbNTowXSAgYml0X2NudDsKKyAgICBsb2dpYyBbMzE6MF0gc2hpZnRfZGF0YTsKKworCithbHdheXNAKG5lZ2VkZ2UgcnN0X24gb3IgcG9zZWRnZSBjbGspCitiZWdpbgorICAgaWYocnN0X24gPT0gMCkgYmVnaW4KKyAgICAgIHN0YXRlICAgPD0gSURMRTsKKyAgICAgIHJlZ19yZGF0YSA8PSAnaDA7CisgICAgICByZWdfYWNrIDw9IDEnYjA7CisgICAgICBzZGkgICAgIDw9IDEnYjA7CisgICAgICBiaXRfY250IDw9IDYnaDA7CisgICAgICBzaGlmdCAgIDw9ICdiMDsKKyAgICAgIHNoaWZ0X2RhdGEgPD0gMzInaDA7CisgICBlbmQgZWxzZSBiZWdpbgorICAgICAgIGNhc2Uoc3RhdGUpCisgICAgICAgSURMRTogYmVnaW4KKyAgICAgICAgICAgICAgICByZWdfYWNrIDw9IDEnYjA7CisgICAgICAgICAgICAgICAgYml0X2NudCAgICA8PSA2J2gwOworCQlpZihyZWdfd3IpIGJlZ2luCisgICAgICAgICAgICAgICAgICAgc2hpZnQgICAgICA8PSAnYjE7CisJICAgICAgICAgICBzaGlmdF9kYXRhIDw9IHJlZ193ZGF0YTsKKwkJICAgc3RhdGUgICAgICA8PSBTSElGVF9EQVRBOworICAgICAgICAgICAgICAgIGVuZCBlbHNlIGlmKHJlZ19yZCkgYmVnaW4KKyAgICAgICAgICAgICAgICAgICBzaGlmdCAgICAgIDw9ICdiMTsKKwkgICAgICAgICAgIHNoaWZ0X2RhdGEgPD0gJ2gwOworCSAgICAgICAgICAgc3RhdGUgICAgICA8PSBTSElGVF9EQVRBOworCSAgICAgICAgZW5kCisJICAgICBlbmQKKyAgICAgICAgU0hJRlRfREFUQTogYmVnaW4gCisJCXNoaWZ0X2RhdGEgPD0gezEnYjAsc2hpZnRfZGF0YVszMToxXX07CisJCXJlZ19yZGF0YSAgPD0ge3NkbyxyZWdfcmRhdGFbMzE6MV19OworCSAgICAgICAgc2RpICAgICAgICA8PSBzaGlmdF9kYXRhWzBdOworICAgICAgICAgICAgICAJaWYoYml0X2NudCA8IDMxKSBiZWdpbgorCQkgICAgYml0X2NudCAgICA8PSBiaXRfY250ICsxOworCSAgICAgICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgcmVnX2FjayA8PSAxJ2IxOworICAgICAgICAgICAgICAgICAgICBzaGlmdCAgIDw9ICdiMDsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUgICA8PSBJRExFOworCSAgICAgICAgZW5kCisJICAgICBlbmQKKyAgICAgICBlbmRjYXNlCisgICBlbmQKK2VuZAorCisKKworCitlbmRtb2R1bGUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL2xpYi9zZXJfc2hpZnQuc3YgYi92ZXJpbG9nL3J0bC9saWIvc2VyX3NoaWZ0LnN2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxZWY5ZGMKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC9saWIvc2VyX3NoaWZ0LnN2CkBAIC0wLDAgKzEsNzYgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSAsIERpbmVzaCBBbm5heXlhICAgICAgICAgICAgICAgICAgICAgICAgICAKKy8vIAorLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBDcmVhdGVkIGJ5IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgc2VyX3NoaWZ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIG1iaXN0X2N0cmwgY29yZXMgcHJvamVjdCAgICAgICAgICAgLy8vLworLy8vLyAgaHR0cHM6Ly9naXRodWIuY29tL2RpbmVzaGFubmF5eWEvcmlzY2R1bmlvLmdpdCAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgIFRoaXMgYmxvY2sgbWFuYWdlcyB0aGUgcGFyYWxsZWwgdG8gc2VyaWFsIGNvbnZlcnNpb24gICAgICAgLy8vLworLy8vLyAgIFRoaXMgYmxvY2sgdXNlZnVsbCBmb3IgQmlzdCBTREkvU0RPIGFjY2VzcyAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgIGFzc2VydHMgUmVnIEFjayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVG8gRG86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICBub3RoaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgQXV0aG9yKHMpOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgIC0gRGluZXNoIEFubmF5eWEsIGRpbmVzaGFAb3BlbmNvcmVzLm9yZyAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgUmV2aXNpb24gOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAwLjAgLSAxNnRoIERlYyAyMDIxLCBEaW5lc2ggQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICBJbml0aWFsIGludGVncmF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCittb2R1bGUgc2VyX3NoaWZ0CisgICAgICMocGFyYW1ldGVyIFdEID0gMzIpCisgICAgICAgKAorCisgICAgLy8gTWFzdGVyIFBvcnQKKyAgICAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgcnN0X24gICAgICAgLCAgLy8gUmVndWxhciBSZXNldCBzaWduYWwKKyAgICAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgY2xrICAgICAgICAgLCAgLy8gU3lzdGVtIGNsb2NrCisgICAgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgIGxvYWQgICAgICAgICwgIC8vIGxvYWQgcmVxdWVzdAorICAgICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICBzaGlmdCAgICAgICAsICAvLyBzaGlmdAorICAgICAgIGlucHV0ICAgbG9naWMgW1dELTE6MF0gICAgICBsb2FkX2RhdGEgICAsICAvLyBsb2FkIGRhdGEKKyAgICAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgc2RpICAgICAgICAgLCAgLy8gc2RpCisgICAgICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgIHNkbyAgICAgICAgICAgIC8vIHNkbworCisKKyAgICApOworCitsb2dpYyBbV0QtMTowXSBzaGlmdF9yZWc7CisKK2Fsd2F5c0AobmVnZWRnZSByc3RfbiBvciBwb3NlZGdlIGNsaykKK2JlZ2luCisgICBpZihyc3RfbiA9PSAwKSBiZWdpbgorICAgICAgc2hpZnRfcmVnICAgPD0gJ2gwOworICAgZW5kIGVsc2UgaWYobG9hZCkgYmVnaW4KKyAgICAgIHNoaWZ0X3JlZyAgIDw9IGxvYWRfZGF0YTsKKyAgIGVuZCBlbHNlIGlmKHNoaWZ0KSBiZWdpbgorICAgICAgc2hpZnRfcmVnICAgPD0ge3NkaSxzaGlmdF9yZWdbV0QtMToxXX07CisgICBlbmQKK2VuZAorCithc3NpZ24gc2RvID0gc2hpZnRfcmVnWzBdOworCisKKworZW5kbW9kdWxlCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9saWIvc3luY19maWZvLnN2IGIvdmVyaWxvZy9ydGwvbGliL3N5bmNfZmlmby5zdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjRhMjZjCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvbGliL3N5bmNfZmlmby5zdgpAQCAtMCwwICsxLDE2NyBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxICwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgIAorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IENyZWF0ZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKy8vCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgc2RyYW0gY29udHJvbGxlciBwcm9qZWN0ICAgICAgICAgICAKKyAgaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2NvcmVzL3Nkcl9jdHJsLyAgICAgICAgICAgICAgICAgICAgCisgIGh0dHBzOi8vZ2l0aHViLmNvbS9kaW5lc2hhbm5heXlhL3lpZml2ZV9yMC5naXQgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICBEZXNjcmlwdGlvbjogU1lOQyBGSUZPIAorICBQYXJhbWV0ZXJzOgorICAgICAgVyA6IFdpZHRoIChpbnRlZ2VyKQorICAgICAgRCA6IERlcHRoIChpbnRlZ2VyLCBwb3dlciBvZiAyLCA0IHRvIDI1NikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIG5vdGhpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIEF1dGhvcihzKTogIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIENvcHlyaWdodCAoQykgMjAwMCBBdXRob3JzIGFuZCBPUEVOQ09SRVMuT1JHICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgICAKKyByZXN0cmljdGlvbiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgICAgCisgcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgIAorIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCAgIAorIGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAKKyBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgCisgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSAgIAorbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyBUaGlzIHNvdXJjZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgICAgICAgCisgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCAgIAorIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgICAgICAKKyBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgCisgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAgCisgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvdXJjZTsgaWYgbm90LCBkb3dubG9hZCBpdCAgIAorIGZyb20gaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2xncGwuc2h0bWwgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKK21vZHVsZSBzeW5jX2ZpZm8gKGNsaywKKwkgICAgICAgICAgcmVzZXRfbiwKKwkJICB3cl9lbiwKKwkJICB3cl9kYXRhLAorCQkgIGZ1bGwsCisJCSAgZW1wdHksCisJCSAgcmRfZW4sCisJCSAgcmRfZGF0YSk7CisKKyAgIHBhcmFtZXRlciBXID0gODsKKyAgIHBhcmFtZXRlciBEID0gNDsKKworICAgcGFyYW1ldGVyIEFXID0gKEQgPT0gMikgICA/IDEgOgorCSAgICAgICAgICAoRCA9PSA0KSAgID8gMiA6CisJCSAgKEQgPT0gOCkgICA/IDMgOgorCQkgIChEID09IDE2KSAgPyA0IDoKKwkJICAoRCA9PSAzMikgID8gNSA6CisJCSAgKEQgPT0gNjQpICA/IDYgOgorCQkgIChEID09IDEyOCkgPyA3IDoKKwkJICAoRCA9PSAyNTYpID8gOCA6IDA7CisgICAKKyAgIG91dHB1dCBbVy0xIDogMF0gIHJkX2RhdGE7CisgICBpbnB1dCBbVy0xIDogMF0gICB3cl9kYXRhOworICAgaW5wdXQgCSAgICAgY2xrLCByZXNldF9uLCB3cl9lbiwgcmRfZW47CisgICBvdXRwdXQgCSAgICAgZnVsbCwgZW1wdHk7CisKKyAgIC8vIHN5bm9wc3lzIHRyYW5zbGF0ZV9vZmYKKworICAgaW5pdGlhbCBiZWdpbgorICAgICAgaWYgKEFXID09IDApIGJlZ2luCisJICRkaXNwbGF5ICgiJW0gOiBFUlJPUiEhISBGaWZvIGRlcHRoICVkIG5vdCBpbiByYW5nZSA0IHRvIDI1NiIsIEQpOworICAgICAgZW5kIC8vIGlmIChBVyA9PSAwKQorICAgZW5kIC8vIGluaXRpYWwgYmVnaW4KKworICAgLy8gc3lub3BzeXMgdHJhbnNsYXRlX29uCisKKworICAgcmVnIFtXLTEgOiAwXSAgICBtZW1bRC0xIDogMF07CisgICByZWcgW0FXLTEgOiAwXSAgIHJkX3B0ciwgd3JfcHRyOworICAgcmVnCSAJICAgIGZ1bGwsIGVtcHR5OworCisgICB3aXJlIFtXLTEgOiAwXSAgIHJkX2RhdGE7CisgICAKKyAgIGFsd2F5cyBAIChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJlc2V0X24pIAorICAgICAgaWYgKHJlc2V0X24gPT0gMSdiMCkgYmVnaW4KKyAgICAgICAgIHdyX3B0ciA8PSB7QVd7MSdiMH19IDsKKyAgICAgIGVuZAorICAgICAgZWxzZSBiZWdpbgorICAgICAgICAgaWYgKHdyX2VuICYgIWZ1bGwpIGJlZ2luCisgICAgICAgICAgICB3cl9wdHIgPD0gd3JfcHRyICsgMSdiMSA7CisgICAgICAgICBlbmQKKyAgICAgIGVuZAorCisgICBhbHdheXMgQCAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByZXNldF9uKSAKKyAgICAgIGlmIChyZXNldF9uID09IDEnYjApIGJlZ2luCisgICAgICAgICByZF9wdHIgPD0ge0FXezEnYjB9fSA7CisgICAgICBlbmQKKyAgICAgIGVsc2UgYmVnaW4KKyAgICAgICAgIGlmIChyZF9lbiAmICFlbXB0eSkgYmVnaW4KKyAgICAgICAgICAgIHJkX3B0ciA8PSByZF9wdHIgKyAxJ2IxIDsKKyAgICAgICAgIGVuZAorICAgICAgZW5kCisKKworICAgYWx3YXlzIEAgKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcmVzZXRfbikgCisgICAgICBpZiAocmVzZXRfbiA9PSAxJ2IwKSBiZWdpbgorICAgICAgICAgZW1wdHkgPD0gMSdiMSA7CisgICAgICBlbmQKKyAgICAgIGVsc2UgYmVnaW4KKyAgICAgICAgIGVtcHR5IDw9ICgoKHdyX3B0ciAtIHJkX3B0cikgPT0ge3soQVctMSl7MSdiMH19LCAxJ2IxfSkgJiByZF9lbiAmIH53cl9lbikgPyAxJ2IxIDogCisgICAgICAgICAgICAgICAgICAgKCh3cl9wdHIgPT0gcmRfcHRyKSAmIH5yZF9lbiAmIHdyX2VuKSA/IDEnYjAgOiBlbXB0eSA7CisgICAgICBlbmQKKworICAgYWx3YXlzIEAgKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcmVzZXRfbikgCisgICAgICBpZiAocmVzZXRfbiA9PSAxJ2IwKSBiZWdpbgorICAgICAgICAgZnVsbCA8PSAxJ2IwIDsKKyAgICAgIGVuZAorICAgICAgZWxzZSBiZWdpbgorICAgICAgICAgZnVsbCA8PSAoKCh3cl9wdHIgLSByZF9wdHIpID09IHt7KEFXLTEpezEnYjF9fSwgMSdiMH0pICYgfnJkX2VuICYgd3JfZW4pID8gMSdiMSA6IAorICAgICAgICAgICAgICAgICAoKCh3cl9wdHIgLSByZF9wdHIpID09IHtBV3sxJ2IxfX0pICYgcmRfZW4gJiB+d3JfZW4pID8gMSdiMCA6IGZ1bGwgOworICAgICAgZW5kCisKKyAgIGFsd2F5cyBAIChwb3NlZGdlIGNsaykgCisgICAgICBpZiAod3JfZW4pCisJIG1lbVt3cl9wdHJdIDw9IHdyX2RhdGE7CisKK2Fzc2lnbiAgcmRfZGF0YSA9IG1lbVtyZF9wdHJdOworCisKKy8vIHN5bm9wc3lzIHRyYW5zbGF0ZV9vZmYKKyAgIGFsd2F5cyBAKHBvc2VkZ2UgY2xrKSBiZWdpbgorICAgICAgaWYgKHdyX2VuICYmIGZ1bGwpIGJlZ2luCisgICAgICAgICAkZGlzcGxheSgiJW0gOiBFcnJvciEgc2ZpZm8gb3ZlcmZsb3chIik7CisgICAgICBlbmQKKyAgIGVuZAorCisgICBhbHdheXMgQChwb3NlZGdlIGNsaykgYmVnaW4KKyAgICAgIGlmIChyZF9lbiAmJiBlbXB0eSkgYmVnaW4KKyAgICAgICAgICRkaXNwbGF5KCIlbSA6IGVycm9yISBzZmlmbyB1bmRlcmZsb3chIik7CisgICAgICBlbmQKKyAgIGVuZAorCisvLyBzeW5vcHN5cyB0cmFuc2xhdGVfb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2VuZG1vZHVsZQorCisKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL2xpYi9zeW5jX2ZpZm8yLnN2IGIvdmVyaWxvZy9ydGwvbGliL3N5bmNfZmlmbzIuc3YKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjcxYWQzMAotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL2xpYi9zeW5jX2ZpZm8yLnN2CkBAIC0wLDAgKzEsMjIyIEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEgLCBEaW5lc2ggQW5uYXl5YSAgICAgICAgICAgICAgICAgICAgICAgICAgCisvLyAKKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogQ3JlYXRlZCBieSBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorLy8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIFNZTkMgRklGTyB3aXRoIGVtcHR5LGFlbXB0eSxmdWxsLGFmdWxsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgRGVzY3JpcHRpb246IFNZTkMgRklGTyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIG5vdGhpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIEF1dGhvcihzKTogIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIENvcHlyaWdodCAoQykgMjAwMCBBdXRob3JzIGFuZCBPUEVOQ09SRVMuT1JHICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgICAKKyByZXN0cmljdGlvbiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgICAgCisgcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgIAorIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCAgIAorIGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAKKyBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgCisgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSAgIAorbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyBUaGlzIHNvdXJjZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgICAgICAgCisgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCAgIAorIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgICAgICAKKyBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgCisgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAgCisgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvdXJjZTsgaWYgbm90LCBkb3dubG9hZCBpdCAgIAorIGZyb20gaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2xncGwuc2h0bWwgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIHN5bmMgRklGTworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy9gdGltZXNjYWxlICAxbnMvMXBzCisKK21vZHVsZSBzeW5jX2ZpZm8yIChjbGssCisgICAgICAgICAgICAgICAgICAgcmVzZXRfbiwKKyAgICAgICAgICAgICAgICAgICB3cl9lbiwKKyAgICAgICAgICAgICAgICAgICB3cl9kYXRhLAorICAgICAgICAgICAgICAgICAgIGZ1bGwsICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICBhZnVsbCwgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgIHJkX2VuLAorICAgICAgICAgICAgICAgICAgIGVtcHR5LCAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICBhZW1wdHksICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgIHJkX2RhdGEpOworCisgICBwYXJhbWV0ZXIgVyA9IDQnZDg7CisgICBwYXJhbWV0ZXIgRFAgPSAzJ2Q0OworICAgcGFyYW1ldGVyIFdSX0ZBU1QgPSAxJ2IxOworICAgcGFyYW1ldGVyIFJEX0ZBU1QgPSAxJ2IxOworICAgcGFyYW1ldGVyIEZVTExfRFAgPSBEUDsKKyAgIHBhcmFtZXRlciBFTVBUWV9EUCA9IDEnYjA7CisKKyAgIHBhcmFtZXRlciBBVyA9IChEUCA9PSAyKSAgID8gMSA6IAorCQkgIChEUCA9PSA0KSAgID8gMiA6CisgICAgICAgICAgICAgICAgICAoRFAgPT0gOCkgICA/IDMgOgorICAgICAgICAgICAgICAgICAgKERQID09IDE2KSAgPyA0IDoKKyAgICAgICAgICAgICAgICAgIChEUCA9PSAzMikgID8gNSA6CisgICAgICAgICAgICAgICAgICAoRFAgPT0gNjQpICA/IDYgOgorICAgICAgICAgICAgICAgICAgKERQID09IDEyOCkgPyA3IDoKKyAgICAgICAgICAgICAgICAgIChEUCA9PSAyNTYpID8gOCA6IDA7CisKKyAgIG91dHB1dCBbVy0xIDogMF0gIHJkX2RhdGE7CisgICBpbnB1dCBbVy0xIDogMF0gICB3cl9kYXRhOworICAgaW5wdXQgICAgICAgICAgICAgY2xrLCByZXNldF9uLCB3cl9lbiwgcmRfZW47CisgICBvdXRwdXQgICAgICAgICAgICBmdWxsLCBlbXB0eTsKKyAgIG91dHB1dCAgICAgICAgICAgIGFmdWxsLCBhZW1wdHk7ICAgICAgIC8vIGFib3V0IGZ1bGwgYW5kIGFib3V0IHRvIGVtcHR5CisKKworICAgLy8gc3lub3BzeXMgdHJhbnNsYXRlX29mZgorCisgICBpbml0aWFsIGJlZ2luCisgICAgICBpZiAoQVcgPT0gMCkgYmVnaW4KKyAgICAgICAgICRkaXNwbGF5ICgiJW0gOiBFUlJPUiEhISBGaWZvIGRlcHRoICVkIG5vdCBpbiByYW5nZSAyIHRvIDI1NiIsIERQKTsKKyAgICAgIGVuZCAvLyBpZiAoQVcgPT0gMCkKKyAgIGVuZCAvLyBpbml0aWFsIGJlZ2luCisKKyAgIC8vIHN5bm9wc3lzIHRyYW5zbGF0ZV9vbgorCisgICByZWcgW1ctMSA6IDBdICAgIG1lbVtEUC0xIDogMF07CisKKyAgIC8qKioqKioqKioqKioqKioqKioqKioqKiB3cml0ZSBzaWRlICoqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgIHJlZyBbQVc6MF0gd3JfcHRyOworICAgcmVnICAgICAgICBmdWxsX3E7CisgICB3aXJlICAgICAgIGZ1bGxfYzsKKyAgIHdpcmUgICAgICAgYWZ1bGxfYzsKKyAgIHdpcmUgW0FXOjBdd3JfcHRyX2luYyA9IHdyX3B0ciArIDEnYjE7CisgICB3aXJlIFtBVzowXXdyX2NudCA9IGdldF9jbnQod3JfcHRyLCByZF9wdHIpOworCisgICBhc3NpZ24gZnVsbF9jICA9ICh3cl9jbnQgPT0gRlVMTF9EUCkgPyAxJ2IxIDogMSdiMDsKKyAgIGFzc2lnbiBhZnVsbF9jID0gKHdyX2NudCA9PSBGVUxMX0RQLTEpID8gMSdiMSA6IDEnYjA7CisKKworICAgYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByZXNldF9uKSBiZWdpbgorCWlmICghcmVzZXRfbikgYmVnaW4KKwkJd3JfcHRyIDw9IDA7CisJCWZ1bGxfcSA8PSAwOwkKKwllbmQKKwllbHNlIGlmICh3cl9lbikgYmVnaW4KKwkJd3JfcHRyIDw9IHdyX3B0cl9pbmM7CisJCWlmICh3cl9jbnQgPT0gKEZVTExfRFAtMSkpIGJlZ2luCisJCQlmdWxsX3EgPD0gMSdiMTsKKwkJZW5kCisJZW5kCisJZWxzZSBiZWdpbgorCSAgICAJaWYgKGZ1bGxfcSAmJiAod3JfY250PEZVTExfRFApKSBiZWdpbgorCQkJZnVsbF9xIDw9IDEnYjA7CisJICAgICAJZW5kCisJZW5kCisgICAgZW5kCisKKyAgICBhc3NpZ24gZnVsbCAgPSAoV1JfRkFTVCA9PSAxKSA/IGZ1bGxfYyA6IGZ1bGxfcTsKKyAgICBhc3NpZ24gYWZ1bGwgPSBhZnVsbF9jOworCisgICAgYWx3YXlzIEAocG9zZWRnZSBjbGspIGJlZ2luCisJaWYgKHdyX2VuKSBiZWdpbgorCQltZW1bd3JfcHRyW0FXLTE6MF1dIDw9IHdyX2RhdGE7CisJZW5kCisgICAgZW5kCisKKworCisgICAvKioqKioqKioqKioqKioqKioqKioqKioqIHJlYWQgc2lkZSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgIHJlZyBbQVc6MF0gcmRfcHRyOworICAgcmVnIGVtcHR5X3E7CisgICB3aXJlIGVtcHR5X2M7CisgICB3aXJlIGFlbXB0eV9jOworICAgd2lyZSBbQVc6MF0gcmRfcHRyX2luYyA9IHJkX3B0ciArIDEnYjE7CisgICB3aXJlIFtBVzowXSByZF9jbnQgPSBnZXRfY250KHdyX3B0ciwgcmRfcHRyKTsKKyAKKyAgIGFzc2lnbiBlbXB0eV9jICA9IChyZF9jbnQgPT0gMCkgPyAxJ2IxIDogMSdiMDsKKyAgIGFzc2lnbiBhZW1wdHlfYyA9IChyZF9jbnQgPT0gMSkgPyAxJ2IxIDogMSdiMDsKKworICAgYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByZXNldF9uKSBiZWdpbgorICAgICAgaWYgKCFyZXNldF9uKSBiZWdpbgorICAgICAgICAgcmRfcHRyIDw9IDA7CisJIGVtcHR5X3EgPD0gMSdiMTsKKyAgICAgIGVuZAorICAgICAgZWxzZSBiZWdpbgorICAgICAgICAgaWYgKHJkX2VuKSBiZWdpbgorICAgICAgICAgICAgcmRfcHRyIDw9IHJkX3B0cl9pbmM7CisgICAgICAgICAgICBpZiAocmRfY250PT0oRU1QVFlfRFArMSkpIGJlZ2luCisgICAgICAgICAgICAgICBlbXB0eV9xIDw9IDEnYjE7CisgICAgICAgICAgICBlbmQKKyAgICAgICAgIGVuZAorICAgICAgICAgZWxzZSBiZWdpbgorICAgICAgICAgICAgaWYgKGVtcHR5X3EgJiYgKHJkX2NudCE9RU1QVFlfRFApKSBiZWdpbgorCSAgICAgIGVtcHR5X3EgPD0gMSdiMDsKKwkgICAgZW5kCisgICAgICAgICBlbmQKKyAgICAgICBlbmQKKyAgICBlbmQKKworICAgIGFzc2lnbiBlbXB0eSAgPSAoUkRfRkFTVCA9PSAxKSA/IGVtcHR5X2MgOiBlbXB0eV9xOworICAgIGFzc2lnbiBhZW1wdHkgPSBhZW1wdHlfYzsKKworICAgIHJlZyBbVy0xIDogMF0gIHJkX2RhdGFfcTsKKworICAgd2lyZSBbVy0xIDogMF0gcmRfZGF0YV9jID0gbWVtW3JkX3B0cltBVy0xOjBdXTsKKworCisgICBhbHdheXMgQChwb3NlZGdlIGNsaykgYmVnaW4KKwlyZF9kYXRhX3EgPD0gcmRfZGF0YV9jOworICAgZW5kCisgICBhc3NpZ24gcmRfZGF0YSAgPSAoUkRfRkFTVCA9PSAxKSA/IHJkX2RhdGFfYyA6IHJkX2RhdGFfcTsKKworCisJCisJCQkKK2Z1bmN0aW9uIFtBVzowXSBnZXRfY250OworaW5wdXQgW0FXOjBdIHdyX3B0ciwgcmRfcHRyOworYmVnaW4KKwlpZiAod3JfcHRyID49IHJkX3B0cikgYmVnaW4KKwkJZ2V0X2NudCA9ICh3cl9wdHIgLSByZF9wdHIpOwkKKwllbmQKKwllbHNlIGJlZ2luCisJCWdldF9jbnQgPSBEUCoyIC0gKHJkX3B0ciAtIHdyX3B0cik7CisJZW5kCitlbmQKK2VuZGZ1bmN0aW9uCisKKy8vIHN5bm9wc3lzIHRyYW5zbGF0ZV9vZmYKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrKSBiZWdpbgorICAgaWYgKHdyX2VuICYmIGZ1bGwpIGJlZ2luCisgICAgICAkZGlzcGxheSgkdGltZSwgIiVtIEVycm9yISBhZmlmbyBvdmVyZmxvdyEiKTsKKyAgICAgICRzdG9wOworICAgZW5kCitlbmQKKworYWx3YXlzIEAocG9zZWRnZSBjbGspIGJlZ2luCisgICBpZiAocmRfZW4gJiYgZW1wdHkpIGJlZ2luCisgICAgICAkZGlzcGxheSgkdGltZSwgIiVtIGVycm9yISBhZmlmbyB1bmRlcmZsb3chIik7CisgICAgICAkc3RvcDsKKyAgIGVuZAorZW5kCisvLyBzeW5vcHN5cyB0cmFuc2xhdGVfb24KKworZW5kbW9kdWxlCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9saWIvc3luY193YmIuc3YgYi92ZXJpbG9nL3J0bC9saWIvc3luY193YmIuc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJjYzc5NAotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL2xpYi9zeW5jX3diYi5zdgpAQCAtMCwwICsxLDMzNiBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxICwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgIAorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IENyZWF0ZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBzeW5jIFdpc2hib25lIEludGVyZmFjZSBpQnVyc3QgRW5hYmxlIGFuZCBsYWNrICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBZSUZpdmUgY29yZXMgcHJvamVjdCAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9jb3Jlcy95aWZpdmUvICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICBUaGlzIGJsb2NrIGRvZXMgYXN5bmMgV2lzaGJvbmUgZnJvbSBvbmUgY2xvY2sgdG8gb3RoZXIgIC8vLy8KKy8vLy8gICAgICBjbG9jayBkb21haW4KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcihzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAtIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFJldmlzaW9uIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC4xIC0gMjV0aCBGZWIgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgaW5pdGlhbCB2ZXJzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC4yIC0gMjh0aCBGZWIgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgcmVkdWNlZCB0aGUgcmVzcG9uc2UgRklGTyBwYXRoIGRlcHRoIHRvIDIgYXMgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgcmV0dXJuIHBhdGggdXNlZCBieSBvbmx5IHJlYWQgbG9naWMgYW5kIHJlYWQgaXMgICAgIC8vLy8KKy8vLy8gICAgICAgICAgYmxvY2tpbmcgcmVxdWVzdCBhbmQgZXhwZWN0IG9ubHkgb25lIGxvY2F0aW9uIHdpbGwgIC8vLy8KKy8vLy8gICAgICAgICAgYmUgdXNlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC4zIC0gMjAgSmFuIDIwMjIsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgYWRkZWQgd2lzaGJvbmUgYnVyc3QgbW9kZS4gQWRkaXRpb25hbCBzaWduYWwgYWRkZWQgIC8vLy8KKy8vLy8gICAgICAgICAgIEEuICpibCAgLSAxMCBCaXQgd29yZCBCdXJzdCBjb3VudCwgMSAtIDEgRFcoMzIgYml0KS8vLy8KKy8vLy8gICAgICAgICAgIEIuICpsYWNrIC0gTGFzdCBCdXJzdCBhY2sgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8gCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIENvcHlyaWdodCAoQykgMjAwMCBBdXRob3JzIGFuZCBPUEVOQ09SRVMuT1JHICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgICAvLy8vCisvLy8vIHJlc3RyaWN0aW9uIHByb3ZpZGVkIHRoYXQgdGhpcyBjb3B5cmlnaHQgc3RhdGVtZW50IGlzIG5vdCAgICAvLy8vCisvLy8vIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSBhbmQgdGhhdCBhbnkgZGVyaXZhdGl2ZSB3b3JrIGNvbnRhaW5zICAvLy8vCisvLy8vIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLiAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgICAvLy8vCisvLy8vIGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAvLy8vCisvLy8vIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAvLy8vCisvLy8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgICAvLy8vCisvLy8vIGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSAgICAgICAvLy8vCisvLy8vIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgICAvLy8vCisvLy8vIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgICAgICAvLy8vCisvLy8vIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSAvLy8vCisvLy8vIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgICAvLy8vCisvLy8vIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBzb3VyY2U7IGlmIG5vdCwgZG93bmxvYWQgaXQgICAvLy8vCisvLy8vIGZyb20gaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2xncGwuc2h0bWwgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK21vZHVsZSBzeW5jX3diYiAKKyAgICAgIyhwYXJhbWV0ZXIgQVcgID0gMzIsCisgICAgICAgcGFyYW1ldGVyIEJXICA9IDQsCisgICAgICAgcGFyYW1ldGVyIEJMICA9IDEwLAorICAgICAgIHBhcmFtZXRlciBEVyAgPSAzMikKKyAgICAgICAoCisKKyAgICAvLyBNYXN0ZXIgUG9ydAorICAgICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICByc3RfbiAgICAgICAsICAvLyBSZWd1bGFyIFJlc2V0IHNpZ25hbAorICAgICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICBjbGtfaSAgICAgICAsICAvLyBTeXN0ZW0gY2xvY2sKKyAgICAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgd2JtX2N5Y19pICAgLCAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgd2JtX3N0Yl9pICAgLCAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAgICBpbnB1dCAgIGxvZ2ljIFtBVy0xOjBdICAgICAgd2JtX2Fkcl9pICAgLCAgLy8gYWRkcmVzcworICAgICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICB3Ym1fd2VfaSAgICAsICAvLyB3cml0ZQorICAgICAgIGlucHV0ICAgbG9naWMgW0RXLTE6MF0gICAgICB3Ym1fZGF0X2kgICAsICAvLyBkYXRhIG91dHB1dAorICAgICAgIGlucHV0ICAgbG9naWMgW0JXLTE6MF0gICAgICB3Ym1fc2VsX2kgICAsICAvLyBieXRlIGVuYWJsZQorICAgICAgIGlucHV0ICAgbG9naWMgWzM6MF0gICAgICAgICB3Ym1fdGlkX2kgICAsCisgICAgICAgaW5wdXQgICBsb2dpYyBbQkwtMTowXSAgICAgIHdibV9ibF9pICAgICwgIC8vIEJ1cnN0IENvdW50CisgICAgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgIHdibV9icnlfaSAgICwgIC8vIEJ1cnN0IFJlYWR5CisgICAgICAgb3V0cHV0ICBsb2dpYyBbRFctMTowXSAgICAgIHdibV9kYXRfbyAgICwgIC8vIGRhdGEgaW5wdXQKKyAgICAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgd2JtX2Fja19vICAgLCAgLy8gYWNrbm93bGVnZW1lbnQKKyAgICAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgd2JtX2xhY2tfbyAgLCAgLy8gTGFzdCBCdXJzdCBhY2Nlc3MKKyAgICAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgd2JtX2Vycl9vICAgLCAgLy8gZXJyb3IKKworICAgIC8vIFNsYXZlIFBvcnQKKyAgICAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgd2JzX2N5Y19vICAgLCAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgd2JzX3N0Yl9vICAgLCAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAgICBvdXRwdXQgIGxvZ2ljIFtBVy0xOjBdICAgICAgd2JzX2Fkcl9vICAgLCAgLy8gYWRkcmVzcworICAgICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICB3YnNfd2VfbyAgICAsICAvLyB3cml0ZQorICAgICAgIG91dHB1dCAgbG9naWMgW0RXLTE6MF0gICAgICB3YnNfZGF0X28gICAsICAvLyBkYXRhIG91dHB1dAorICAgICAgIG91dHB1dCAgbG9naWMgW0JXLTE6MF0gICAgICB3YnNfc2VsX28gICAsICAvLyBieXRlIGVuYWJsZQorICAgICAgIG91dHB1dCAgbG9naWMgWzM6MF0gICAgICAgICB3YnNfdGlkX28gICAsCisgICAgICAgb3V0cHV0ICBsb2dpYyBbQkwtMTowXSAgICAgIHdic19ibF9vICAgICwgIC8vIEJ1cnN0IENvdW50CisgICAgICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgIHdic19icnlfbyAgICwgIC8vIEJ1c3J0IFdEYXRhIEF2aWFsYmxlIE9yIFJlYWR5IFRvIGFjY2VwdCBSZGF0YSAgCisgICAgICAgaW5wdXQgICBsb2dpYyBbRFctMTowXSAgICAgIHdic19kYXRfaSAgICwgIC8vIGRhdGEgaW5wdXQKKyAgICAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgd2JzX2Fja19pICAgLCAgLy8gYWNrbm93bGVnZW1lbnQKKyAgICAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgd2JzX2xhY2tfaSAgLCAgLy8gTGFzdCBBY2sKKyAgICAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgd2JzX2Vycl9pICAgICAgLy8gZXJyb3IKKworICAgICk7CisKKworCitwYXJhbWV0ZXIgQ0ZXID0gQVcrRFcrQlcrQkwrNCsxIDsgLy8gQ09NTUFORCBGSUZPIFdJRFRICitwYXJhbWV0ZXIgUkZXID0gRFcrMSsxIDsgICAgICAgIC8vIFJFU1BPTlNFIEZJRk8gV0lEVEgKKworcGFyYW1ldGVyIElETEUgICAgICAgID0gMidiMDA7CitwYXJhbWV0ZXIgV1JJVEVfREFUQSAgPSAyJ2IwMTsKK3BhcmFtZXRlciBSRUFEX0RBVEEgICA9IDInYjEwOworCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gIE1hc3RlciBJbnRlcmZhY2UKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2xvZ2ljICAgICAgICAgICBtX2NtZF93cl9lbiAgICAgICA7Citsb2dpYyBbQ0ZXLTE6MF0gbV9jbWRfd3JfZGF0YSAgICAgOworbG9naWMgICAgICAgICAgIG1fY21kX3dyX2Z1bGwgICAgIDsKK2xvZ2ljICAgICAgICAgICBtX2NtZF93cl9hZnVsbCAgICA7CisKK2xvZ2ljICAgICAgICAgICBtX3Jlc3BfcmRfZW1wdHkgICAgOworbG9naWMgICAgICAgICAgIG1fcmVzcF9yZF9hZW1wdHkgICA7Citsb2dpYyAgICAgICAgICAgbV9yZXNwX3JkX2VuICAgICAgIDsKK2xvZ2ljIFtSRlctMTowXSBtX3Jlc3BfcmRfZGF0YSAgICAgOworbG9naWMgW0JMLTE6MF0gIG1fYmxfY250ICAgICAgICAgICA7Citsb2dpYyBbMTowXSAgICAgbV9zdGF0ZSAgICAgICAgICAgIDsKKworLy8gTWFzdGVyIFdyaXRlIEludGVyZmFjZQorCisKKworYXNzaWduIG1fY21kX3dyX2RhdGEgPSB7d2JtX2Fkcl9pLHdibV93ZV9pLHdibV9kYXRfaSx3Ym1fc2VsX2ksd2JtX3RpZF9pLHdibV9ibF9pfTsKKworYXNzaWduIHdibV9kYXRfbyA9IG1fcmVzcF9yZF9kYXRhW0RXLTE6MF07Cithc3NpZ24gd2JtX2Vycl9vID0gJ2IwOworCithbHdheXNAKG5lZ2VkZ2UgcnN0X24gb3IgcG9zZWRnZSBjbGtfaSkKK2JlZ2luCisgICBpZihyc3RfbiA9PSAwKSBiZWdpbgorICAgICAgICBtX2NtZF93cl9lbiAgICAgICAgPD0gJ2IwOworICAgICAgICBtX3Jlc3BfcmRfZW4gICAgICAgPD0gJ2IwOworICAgICAgICBtX3N0YXRlICAgICAgICAgICAgPD0gJ2gwOworICAgICAgICBtX2JsX2NudCAgICAgICAgICAgPD0gJ2gwOworICAgICAgICB3Ym1fYWNrX28gICAgICAgICAgPD0gJ2IwOworICAgICAgICB3Ym1fbGFja19vICAgICAgICAgPD0gJ2IwOworICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgIGNhc2UobV9zdGF0ZSkKKyAgICAgIElETEU6ICBiZWdpbgorCSAvLyBSZWFkIERBVEEKKwkgLy8gTWFrZSBzdXJlIHRoYXQgRklGTyBpcyBub3Qgb3ZlcmZsb3cgYW5kIHRoZXJlIGlzIG5vIHByZXZpb3VzCisJIC8vIHBlbmRpbmcgd3JpdGUgKyBmaWZvIGlzIGFib3V0IHRvIGZ1bGwKKyAgICAgICAgIGlmKHdibV9zdGJfaSAmJiAhd2JtX3dlX2kgJiYgd2JtX2JyeV9pICYmICFtX2NtZF93cl9mdWxsICYmICEobV9jbWRfd3JfYWZ1bGwgJiYgbV9jbWRfd3JfZW4pICAmJiAhd2JtX2xhY2tfbykgYmVnaW4KKyAgICAgICAgICAgbV9ibF9jbnQgICAgICAgICA8PSB3Ym1fYmxfaTsKKyAgICAgICAgICAgbV9jbWRfd3JfZW4gICAgICA8PSAnYjE7CisgICAgICAgICAgIG1fc3RhdGUgICAgICAgICAgPD0gUkVBRF9EQVRBOworICAgICAgICAgZW5kIGVsc2UgaWYod2JtX3N0Yl9pICYmIHdibV93ZV9pICYmIHdibV9icnlfaSAmJiAhbV9jbWRfd3JfZnVsbCAmJiAhKG1fY21kX3dyX2FmdWxsICYmIG1fY21kX3dyX2VuKSAmJiAhd2JtX2xhY2tfbykgYmVnaW4KKyAgICAgICAgICAgIHdibV9hY2tfbyAgICAgICA8PSAnYjE7CisgICAgICAgICAgICBtX2NtZF93cl9lbiAgICAgPD0gJ2IxOworICAgICAgICAgICAgbV9ibF9jbnQgICAgICAgIDw9IHdibV9ibF9pLTE7CisgICAgICAgICAgICBpZih3Ym1fYmxfaSA9PSAnaDEpIGJlZ2luCisgICAgICAgICAgICAgICB3Ym1fbGFja19vICAgPD0gJ2IxOworICAgICAgICAgICAgICAgbV9zdGF0ZSAgICAgIDw9IElETEU7CisgICAgICAgICAgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICAgICAgICAgbV9ibF9jbnQgICAgIDw9IHdibV9ibF9pLTE7CisgICAgICAgICAgICAgICBtX3N0YXRlICAgICAgPD0gV1JJVEVfREFUQTsKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgICAgICAgIG1fcmVzcF9yZF9lbiAgICA8PSAnYjA7CisgICAgICAgICAgICBtX2NtZF93cl9lbiAgICAgPD0gJ2IwOworICAgICAgICAgICAgd2JtX2Fja19vICAgICAgIDw9ICdiMDsKKyAgICAgICAgICAgIHdibV9sYWNrX28gICAgICA8PSAnYjA7CisgICAgICAgICBlbmQKKyAgICAgIGVuZAorCisgICAgICAvLyBXcml0ZSBuZXh0IFRyYW5zYWN0aW9uCisgICAgICBXUklURV9EQVRBOiBiZWdpbgorICAgICAgICAgaWYobV9jbWRfd3JfZnVsbCAhPSAxICYmICEobV9jbWRfd3JfYWZ1bGwgJiYgbV9jbWRfd3JfZW4pICYmIHdibV9icnlfaSkgYmVnaW4KKyAgICAgICAgICAgIHdibV9hY2tfbyAgICAgICA8PSAnYjE7CisgICAgICAgICAgICBtX2NtZF93cl9lbiAgICAgPD0gJ2IxOworICAgICAgICAgICAgaWYobV9ibF9jbnQgPT0gMSkgYmVnaW4KKyAgICAgICAgICAgICAgIHdibV9sYWNrX28gICA8PSAnYjE7CisgICAgICAgICAgICAgICBtX3N0YXRlICAgICAgPD0gSURMRTsKKyAgICAgICAgICAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgICAgICAgICBtX2JsX2NudCAgICAgICAgPD0gbV9ibF9jbnQtMTsKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgICAgICAgIG1fY21kX3dyX2VuICAgICA8PSAnYjA7CisgICAgICAgICAgICB3Ym1fYWNrX28gICAgICAgPD0gJ2IwOworICAgICAgICAgICAgd2JtX2xhY2tfbyAgICAgIDw9ICdiMDsKKyAgICAgICAgIGVuZAorICAgICAgZW5kCisKKyAgICAgIC8vIFJlYWQgVHJhbnNhY3Rpb24KKyAgICAgIFJFQURfREFUQTogYmVnaW4KKwkgICAvLyBDaGVjayBCYWNrIHRvIEJhY2sgQWNrIGFuZCBsYXN0IExvY2F0aW9uIGNhc2UKKyAgICAgICAgICAgaWYoKCh3Ym1fYWNrX28gPT0gMCAmJiBtX3Jlc3BfcmRfZW1wdHkgIT0gMSkgfHwKKwkgICAgICAgKHdibV9hY2tfbyA9PSAxICYmIG1fcmVzcF9yZF9hZW1wdHkgIT0gMSkpICYmIHdibV9icnlfaSkgYmVnaW4KKyAgICAgICAgICAgICAgbV9yZXNwX3JkX2VuICAgPD0gJ2IxOworICAgICAgICAgICAgICB3Ym1fYWNrX28gICAgICA8PSAnYjE7CisgICAgICAgICAgICAgIGlmKG1fYmxfY250ID09IDEpIGJlZ2luCisgICAgICAgICAgICAgICAgICB3Ym1fbGFja19vICAgPD0gJ2IxOworICAgICAgICAgICAgICAgICAgbV9zdGF0ZSAgICAgIDw9IElETEU7CisgICAgICAgICAgICAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgICAgICAgICAgIG1fYmxfY250ICAgICAgICA8PSBtX2JsX2NudC0xOworCSAgICAgIGVuZAorICAgICAgICAgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICAgICAgICBtX3Jlc3BfcmRfZW4gICAgPD0gJ2IwOworICAgICAgICAgICAgICBtX2NtZF93cl9lbiAgICAgPD0gJ2IwOworICAgICAgICAgICAgICB3Ym1fYWNrX28gICAgICAgPD0gJ2IwOworICAgICAgICAgICAgICB3Ym1fbGFja19vICAgICAgPD0gJ2IwOworCSAgIGVuZAorICAgICAgZW5kCisgICAgICBlbmRjYXNlCisgICBlbmQKK2VuZAorCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBTbGF2ZSBJbnRlcmZhY2UKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitsb2dpYyBbQ0ZXLTE6MF0gc19jbWRfcmRfZGF0YSAgIDsKK2xvZ2ljIFtDRlctMTowXSBzX2NtZF9yZF9kYXRhX2wgOworbG9naWMgICAgICAgIHNfY21kX3JkX2VtcHR5ICAgICA7Citsb2dpYyAgICAgICAgc19jbWRfcmRfYWVtcHR5ICAgIDsKK2xvZ2ljICAgICAgICBzX2NtZF9yZF9lbiAgICAgICAgOworbG9naWMgICAgICAgIHNfcmVzcF93cl9lbiAgICAgICAgOworbG9naWMgW1JGVy0xOjBdIHNfcmVzcF93cl9kYXRhICAgICAgOworbG9naWMgICAgICAgIHNfcmVzcF93cl9mdWxsICAgICAgOworbG9naWMgICAgICAgIHNfcmVzcF93cl9hZnVsbCAgICAgOworbG9naWMgICAgICAgIHdic19hY2tfZiAgICAgICAgICA7Citsb2dpYyAgICAgICAgd2JzX3N0Yl9sICAgICAgICAgIDsKK2xvZ2ljICAgICAgICB3YnNfYnVyc3QgICAgICAgICAgOworCit3aXJlIHdic19zdGJfcGVkZ2UgPSAod2JzX3N0Yl9sID09IDEnYjApICYmIHdic19zdGJfbzsKKworCithbHdheXNAKG5lZ2VkZ2UgcnN0X24gb3IgcG9zZWRnZSBjbGtfaSkKK2JlZ2luCisgICBpZihyc3RfbiA9PSAwKSBiZWdpbgorICAgICAgd2JzX2Fja19mIDw9IDEnYjA7CisgICAgICB3YnNfc3RiX2wgPD0gMSdiMDsKKyAgICAgIHdic19idXJzdCA8PSAnaDA7CisgICAgICBzX2NtZF9yZF9kYXRhX2wgPD0gJ2gwOworICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgIHdic19hY2tfZiA8PSB3YnNfbGFja19pOworICAgICAgd2JzX3N0Yl9sIDw9IHdic19zdGJfbzsKKyAgICAgIGlmKHNfY21kX3JkX2VuKQorICAgICAgICAgIHNfY21kX3JkX2RhdGFfbCA8PSBzX2NtZF9yZF9kYXRhOworICAgICAgaWYod2JzX3N0Yl9wZWRnZSAmJiB3YnNfYmxfbyA+ICdoMSkKKyAgICAgICAgIHdic19idXJzdCA8PSAxJ2IxOworICAgICAgZWxzZSBpZih3YnNfbGFja19pKQorICAgICAgICAgd2JzX2J1cnN0IDw9IDEnYjA7CisgICBlbmQKK2VuZAorCisKKy8vIFJlYWQgSW50ZXJmYWNlCisKKworYXNzaWduIHt3YnNfYWRyX28sd2JzX3dlX28sd2JzX2RhdF9vLHdic19zZWxfbyx3YnNfdGlkX28sd2JzX2JsX299ID0gKHNfY21kX3JkX2VtcHR5KSA/IHNfY21kX3JkX2RhdGFfbDogIHNfY21kX3JkX2RhdGE7CisvLyBBbGwgdGhlIGRvd25zdHJlYW0gbG9naWMgZXhwZWN0IFN0b2JlIGlzIGdldHRpbmcgZGUtYXNzZXJ0ZWQgCisvLyBhdGxlYXN0IGZvciAxIGN5Y2xlIGFmdGVyIGFjayBpcyBnZW5lcmF0ZWQKK2Fzc2lnbiB3YnNfc3RiX28gPSAod2JzX2J1cnN0KSA/IDEnYjEgOiAoKHdic19hY2tfZikgPyAxJ2IwIDogKHNfY21kX3JkX2VtcHR5KSA/IDEnYjA6IDEnYjEpOworYXNzaWduIHdic19jeWNfbyA9ICh3YnNfYnVyc3QpID8gMSdiMSA6ICgod2JzX2Fja19mKSA/IDEnYjAgOiAoc19jbWRfcmRfZW1wdHkpID8gMSdiMDogMSdiMSk7CisKKy8vIEdlbmVyYXRlIGJ1c3QgcmVhZHkgb25seSB3ZSBoYXZlIHNwYWNlIGluc2lkZSByZXNwb25zZSBmaWZvCisvLyBJbiBXcml0ZSBQaGFzZSwgCisvLyAgICAgIEdlbmVyYXRlIGJ1cnN0IHJlYWR5LCBvbmx5IHdoZW4gd2UgaGF2ZSB3ZGF0YSAmIHNwYWNlIGluIHJlc3BvbnNlIGZpZm8gCisvLyBJbiBSZWFkIFBoYXNlIAorLy8gICAgICBHZW5lcmF0ZSBidXJzdCByZWFkeSwgb25seSB3aGVuIHNwYWNlIGluIHJlc3BvbnNlIGZpZm8gCisvLworYXNzaWduIHdic19icnlfbyA9ICh3YnNfd2VfbykgPyAoKHNfY21kX3JkX2VtcHR5IHx8IChzX2NtZF9yZF9lbiAgJiYgc19jbWRfcmRfYWVtcHR5KSkgPyAxJ2IwOiAxJ2IxKSA6CisJICAgICAgICAgICAgICAgICAgICAgICAgIChzX3Jlc3Bfd3JfZnVsbCB8fCAoc19yZXNwX3dyX2VuICYmIHNfcmVzcF93cl9hZnVsbCkpID8gMSdiMDogMSdiMTsKKworLy8gRHVyaW5nIFdyaXRlIHBoYXNlLCBjbWQgZmlmbyB3aWxsIGhhdmUgd2RhdGEsIHNvIGRlcXVldWUgZm9yIGV2ZXJ5IGFjaworLy8gRHVyaW5nIFJlYWQgUGhhc2UsIGNtZCBmaWZvIHdpbGwgYmUgd3JpdHRlbiBvbmx5IG9uZSB0aW1lLCBob2xkIHRoZSBidXMKKy8vIHVudGlsbCBsYXN0IGFjayByZWNlaXZlZAorYXNzaWduIHNfY21kX3JkX2VuID0gKHdic19zdGJfbyAmJiB3YnNfd2VfbykgPyB3YnNfYWNrX2k6IHdic19sYWNrX2k7CisKKy8vIFdyaXRlIEludGVyZmFjZQorLy8gcmVzcG9uc2Ugc2VuZCBvbmx5IGZvciByZWFkIGxvZ2ljCithc3NpZ24gc19yZXNwX3dyX2VuICAgPSB3YnNfc3RiX28gJiAoIXdic193ZV9vKSAmIHdic19hY2tfaSA7Cithc3NpZ24gc19yZXNwX3dyX2RhdGEgPSB7d2JzX2Vycl9pLHdic19sYWNrX2ksd2JzX2RhdF9pfTsKKworc3luY19maWZvMiAjKC5XKENGVyksIC5EUCg0KSwuV1JfRkFTVCgxKSwgLlJEX0ZBU1QoMSkpIHVfY21kX2lmICgKKwkgICAgICAgICAgIC8vIFN5bmMgdy5yLnQgV1IgY2xvY2sKKwkgICAgICAgICAgIC5jbGsgICAgICAgICAgIChjbGtfaSAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgICAgIC5yZXNldF9uICAgICAgIChyc3RfbiAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgICAgIC53cl9lbiAgICAgICAgIChtX2NtZF93cl9lbiAgICAgICApLAorICAgICAgICAgICAgICAgICAgIC53cl9kYXRhICAgICAgIChtX2NtZF93cl9kYXRhICAgICApLAorICAgICAgICAgICAgICAgICAgIC5mdWxsICAgICAgICAgIChtX2NtZF93cl9mdWxsICAgICApLCAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgLmFmdWxsICAgICAgICAgKG1fY21kX3dyX2FmdWxsICAgICksICAgICAgICAgICAgICAgICAKKworCQkgICAvLyBTeW5jIHcuci50IFJEIENsb2NrCisgICAgICAgICAgICAgICAgICAgLnJkX2VuICAgICAgICAgKHNfY21kX3JkX2VuICAgICAgICksCisgICAgICAgICAgICAgICAgICAgLmVtcHR5ICAgICAgICAgKHNfY21kX3JkX2VtcHR5ICAgICksIC8vIHN5bmMnZWQgdG8gcmRfY2xrCisgICAgICAgICAgICAgICAgICAgLmFlbXB0eSAgICAgICAgKHNfY21kX3JkX2FlbXB0eSAgICksIC8vIHN5bmMnZWQgdG8gcmRfY2xrCisgICAgICAgICAgICAgICAgICAgLnJkX2RhdGEgICAgICAgKHNfY21kX3JkX2RhdGEgICAgICkKKwkgICAgICk7CisKKworLy8gUmVzcG9uc2UgdXNlZCBvbmx5IGZvciByZWFkIHBhdGgsIAorLy8gQXMgY2FjaGUgYWNjZXNzIHdpbGwgYmUgYnVzcnQgb2YgNTEyIGxvY2F0aW9uLCBUbyAKKy8vIHN1cHBvcnQgY29udGlub3VzIGFjaywgZGVwdGggaXMgaW5jcmVhc2UgdG8gOCBsb2NhdGlvbgorc3luY19maWZvMiAjKC5XKFJGVyksIC5EUCg0KSwgLldSX0ZBU1QoMSksIC5SRF9GQVNUKDEpKSB1X3Jlc3BfaWYgKAorCSAgICAgICAgICAgLy8gU3luYyB3LnIudCBXUiBjbG9jaworCSAgICAgICAgICAgLmNsayAgICAgICAgICAgKGNsa19pICAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgICAgIC5yZXNldF9uICAgICAgIChyc3RfbiAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAud3JfZW4gICAgICAgICAoc19yZXNwX3dyX2VuICAgICAgICksCisgICAgICAgICAgICAgICAgICAgLndyX2RhdGEgICAgICAgKHNfcmVzcF93cl9kYXRhICAgICApLAorICAgICAgICAgICAgICAgICAgIC5mdWxsICAgICAgICAgIChzX3Jlc3Bfd3JfZnVsbCAgICAgKSwgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgIC5hZnVsbCAgICAgICAgIChzX3Jlc3Bfd3JfYWZ1bGwgICAgKSwgICAgICAgICAgICAgICAgIAorCisJCSAgIC8vIFN5bmMgdy5yLnQgUkQgQ2xvY2sKKyAgICAgICAgICAgICAgICAgICAucmRfZW4gICAgICAgICAobV9yZXNwX3JkX2VuICAgICAgICksCisgICAgICAgICAgICAgICAgICAgLmVtcHR5ICAgICAgICAgKG1fcmVzcF9yZF9lbXB0eSAgKSwgLy8gc3luYydlZCB0byByZF9jbGsKKyAgICAgICAgICAgICAgICAgICAuYWVtcHR5ICAgICAgICAobV9yZXNwX3JkX2FlbXB0eSAgICksIC8vIHN5bmMnZWQgdG8gcmRfY2xrCisgICAgICAgICAgICAgICAgICAgLnJkX2RhdGEgICAgICAgKG1fcmVzcF9yZF9kYXRhICAgICApCisJICAgICApOworCisKKworZW5kbW9kdWxlCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9saWIvd2JfaW50ZXJmYWNlLnYgYi92ZXJpbG9nL3J0bC9saWIvd2JfaW50ZXJmYWNlLnYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI1YjE0NwotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL2xpYi93Yl9pbnRlcmZhY2UudgpAQCAtMCwwICsxLDQwNCBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxICwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgIAorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IENyZWF0ZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICB5aWZpdmUgY29tbW9uIGxpYnJhcnkgTW9kdWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgeWlmaXZlIGNvcmVzIHByb2plY3QgICAgICAgICAgICAgICAvLy8vCisvLy8vICBodHRwczovL2dpdGh1Yi5jb20vZGluZXNoYW5uYXl5YS95aWZpdmVfcjAuZ2l0ICAgICAgICAgICAgICAvLy8vCisvLy8vICBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvY29yZXMveWlmaXZlLyAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBEZXNjcmlwdGlvbjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICBUaGlzIG1vZHVsZSBkb2VzIHRoZSBETUEgdG8gd2lzaGJvbmUgSS9mICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUbyBEbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIG5vdGhpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBBdXRob3Iocyk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgLSBEaW5lc2ggQW5uYXl5YSwgZGluZXNoYUBvcGVuY29yZXMub3JnICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBSZXZpc2lvbiA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICB2MDogICAgTm92IDI2LCAyMDE2LCBEaW5lc2ggQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgVGhpcyBmaWxlcyBjb3BpZWQgZnJvbSBteSBvcGVuIGNvcmUgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgIHR1cmJvODA1MSBwcm9qZWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIENvcHlyaWdodCAoQykgMjAwMCBBdXRob3JzIGFuZCBPUEVOQ09SRVMuT1JHICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgICAvLy8vCisvLy8vIHJlc3RyaWN0aW9uIHByb3ZpZGVkIHRoYXQgdGhpcyBjb3B5cmlnaHQgc3RhdGVtZW50IGlzIG5vdCAgICAvLy8vCisvLy8vIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSBhbmQgdGhhdCBhbnkgZGVyaXZhdGl2ZSB3b3JrIGNvbnRhaW5zICAvLy8vCisvLy8vIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLiAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgICAvLy8vCisvLy8vIGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAvLy8vCisvLy8vIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAvLy8vCisvLy8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgICAvLy8vCisvLy8vIGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSAgICAgICAvLy8vCisvLy8vIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgICAvLy8vCisvLy8vIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgICAgICAvLy8vCisvLy8vIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSAvLy8vCisvLy8vIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgICAvLy8vCisvLy8vIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBzb3VyY2U7IGlmIG5vdCwgZG93bmxvYWQgaXQgICAvLy8vCisvLy8vIGZyb20gaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2xncGwuc2h0bWwgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK21vZHVsZSB3Yl9pbnRlcmZhY2UgKAorICAgICAgICAgIHJzdCAgICAgICAgICAsIAorICAgICAgICAgIGNsayAgICAgICAgICAsCisKKyAgICAgICAgICBkbWFfcmVxX2kgICAgLAorICAgICAgICAgIGRtYV93cml0ZV9pICAsCisgICAgICAgICAgZG1hX2FkZHJfaSAgICwKKyAgICAgICAgICBkbWFfbGVuZ3RoX2kgLAorICAgICAgICAgIGRtYV9hY2tfbyAgICAsCisgICAgICAgICAgZG1hX2RvbmVfbyAgICwKKworICAgICAgICAgIGRtYV9zdGFydF9vICAsCisgICAgICAgICAgZG1hX3dyX28gICAgICwKKyAgICAgICAgICBkbWFfcmRfbyAgICAgLAorICAgICAgICAgIGRtYV9sYXN0X28gICAsCisgICAgICAgICAgZG1hX3dkYXRhX2kgICwKKyAgICAgICAgICBkbWFfcmRhdGFfbyAgLAorCisgICAgLy8gZXh0ZXJuYWwgbWVtb3J5CisgICAgICAgICAgd2JkX2RhdF9pICAgICwgCisgICAgICAgICAgd2JkX2RhdF9vICAgICwKKyAgICAgICAgICB3YmRfYWRyX28gICAgLCAKKyAgICAgICAgICB3YmRfYmVfbyAgICAgLCAKKyAgICAgICAgICB3YmRfd2VfbyAgICAgLCAKKyAgICAgICAgICB3YmRfYWNrX2kgICAgLAorICAgICAgICAgIHdiZF9zdGJfbyAgICAsIAorICAgICAgICAgIHdiZF9jeWNfbyAgICAsIAorICAgICAgICAgIHdiZF9lcnJfaSAgICAKKworCisgICAgICk7CisKKworCitpbnB1dCAgICAgICAgICAgIHJzdCAgICAgICAgICAgICA7IAoraW5wdXQgICAgICAgICAgICBjbGsgICAgICAgICAgICAgOworCitpbnB1dCAgICAgICAgICAgIGRtYV9yZXFfaSAgICAgICA7CitpbnB1dCAgICAgICAgICAgIGRtYV93cml0ZV9pICAgICA7CitpbnB1dCBbMjU6MF0gICAgIGRtYV9hZGRyX2kgICAgICA7CitpbnB1dCBbNzowXSAgICAgIGRtYV9sZW5ndGhfaSAgICA7CitvdXRwdXQgICAgICAgICAgIGRtYV9hY2tfbyAgICAgICA7CitvdXRwdXQgICAgICAgICAgIGRtYV9kb25lX28gICAgICA7IC8vIGluZGljYXRlcyBlbmQgb2YgRE1BIHRyYW5zYWN0aW9uCisKK291dHB1dCAgICAgICAgICAgZG1hX3N0YXJ0X28gICAgIDsKK291dHB1dCAgICAgICAgICAgZG1hX3dyX28gICAgICAgIDsKK291dHB1dCAgICAgICAgICAgZG1hX3JkX28gICAgICAgIDsKK291dHB1dCAgICAgICAgICAgZG1hX2xhc3RfbyAgICAgIDsKK2lucHV0ICBbMzE6MF0gICAgZG1hX3dkYXRhX2kgICAgIDsKK291dHB1dCBbMzE6MF0gICAgZG1hX3JkYXRhX28gICAgIDsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gV0IgaW50ZXJmYWNlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitpbnB1dCAgWzMxOjBdICAgIHdiZF9kYXRfaSAgICAgICA7IC8vIGRhdGEgaW5wdXQKK291dHB1dCBbMzE6MF0gICAgd2JkX2RhdF9vICAgICAgIDsgLy8gZGF0YSBvdXRwdXQKK291dHB1dCBbMjM6MF0gICAgd2JkX2Fkcl9vICAgICAgIDsgLy8gYWRkcmVzcworb3V0cHV0ICBbMzowXSAgICB3YmRfYmVfbyAgICAgICAgOyAvLyBieXRlIGVuYWJsZQorb3V0cHV0ICAgICAgICAgICB3YmRfd2VfbyAgICAgICAgOyAvLyB3cml0ZSAKK2lucHV0ICAgICAgICAgICAgd2JkX2Fja19pICAgICAgIDsgLy8gYWNrbm93bGVnZW1lbnQKK291dHB1dCAgICAgICAgICAgd2JkX3N0Yl9vICAgICAgIDsgLy8gc3Ryb2JlL3JlcXVlc3QKK291dHB1dCAgICAgICAgICAgd2JkX2N5Y19vICAgICAgIDsgLy8gd2IgY3ljbGUKK2lucHV0ICAgICAgICAgICAgd2JkX2Vycl9pICAgICAgIDsgLy8gd2UgZXJyb3IKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJlZyBEZWNsYXJhdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcmVnIFsyOjBdICAgICAgICBzdGF0ZSAgICAgICAgICAgOworcmVnIFsyOjBdICAgICAgICBzdGF0ZV9kICAgICAgICAgOworcmVnIFs3OjBdICAgICAgICBwcmVxX2xlbiAgICAgICAgOyAvLyBwZW5kaW5nIHJlcXVlc3QgbGVuZ3RoIGluIGJ5dGVzCityZWcgICAgICAgICAgICAgIHdiZF93ZV9vICAgICAgICA7IC8vIHdlc3Rib25lIHdyaXRlIHJlcQorcmVnIFsyMzowXSAgICAgICB3YmRfYWRyX28gICAgICAgOyAvLyB3ZXN0bm9uZSBhZGRyZXNzCityZWcgICAgICAgICAgICAgIGRtYV9hY2tfbyAgICAgICA7IC8vIGRtYSBhY2sKK3JlZyBbNzowXSAgICAgICAgdHdidHJhbnMgICAgICAgIDsgLy8gdG90YWwgd2VzdGJvbmUgdHJhbnNhY3Rpb24KK3JlZyAgICAgICAgICAgICAgZG1hX3dyX28gICAgICAgIDsgLy8gZG1hIHdyaXRlIHJlcXVlc3QKK3JlZyAgICAgICAgICAgICAgZG1hX3JkX28gICAgICAgIDsgLy8gZG1hIHJlYWQgcmVxdWVzdAorcmVnIFszMTowXSAgICAgICB0ZW1wX2RhdGEgICAgICAgOyAvLyB0ZW1wIGhvbGRpbmcgZGF0YQorcmVnIFsxOjBdICAgICAgICBiZV9zb2YgICAgICAgICAgOyAvLyBCeXRlIGVuYWJsZSBzdGFydGluZyBhbGlnbm1lbnQKK3JlZyBbMzE6MF0gICAgICAgd2JkX2RhdF9vICAgICAgIDsgLy8gd2VzdGJvbmUgZGF0YSBvdXQKK3JlZyBbMzowXSAgICAgICAgd2JkX2JlX28gICAgICAgIDsgLy8gd2VzdCBib25lIGJ5dGUgZW5hYmxlIAorcmVnIFszMTowXSAgICAgICBkbWFfcmRhdGFfbyAgICAgOyAvLyBkbWEgcmVhZCBkYXRhCityZWcgICAgICAgICAgICAgIHdiZF9zdGJfbyAgICAgICA7IAorcmVnICAgICAgICAgICAgICBkbWFfc3RhcnRfbyAgICAgOyAvLyBkbWEgZmlyc3QgdHJhbnNmZXIKK3JlZyAgICAgICAgICAgICAgZG1hX2xhc3RfbyAgICAgIDsgLy8gZG1hIGxhc3QgdHJhbnNmZXIKKworcGFyYW1ldGVyIFdCX0lETEUgICAgICAgICAgID0gMydiMDAwOworcGFyYW1ldGVyIFdCX1JFUSAgICAgICAgICAgID0gMydiMDAxOworcGFyYW1ldGVyIFdCX1dSX1BIQVNFICAgICAgID0gMydiMDEwOworcGFyYW1ldGVyIFdCX1JEX1BIQVNFX1NPRiAgID0gMydiMDExOworcGFyYW1ldGVyIFdCX1JEX1BIQVNFX0NPTlQgID0gMydiMTAwOworCithc3NpZ24gZG1hX2RvbmVfbyA9IChzdGF0ZSA9PSBXQl9JRExFKSAmJiAoc3RhdGVfZCAhPSAgV0JfSURMRSk7CisKK2Fsd2F5cyBAKHBvc2VkZ2UgcnN0IG9yIHBvc2VkZ2UgY2xrKQorYmVnaW4KKyAgIGlmKHJzdCkgYmVnaW4KKyAgICAgIHN0YXRlICAgICAgICAgPD0gV0JfSURMRTsKKyAgICAgIHN0YXRlX2QgICAgICAgPD0gV0JfSURMRTsKKyAgICAgIHdiZF93ZV9vICAgICAgPD0gMDsKKyAgICAgIHdiZF9hZHJfbyAgICAgPD0gMDsKKyAgICAgIHByZXFfbGVuICAgICAgPD0gMDsKKyAgICAgIGRtYV9hY2tfbyAgICAgPD0gMDsKKyAgICAgIHR3YnRyYW5zICAgICAgPD0gMDsKKyAgICAgIGRtYV93cl9vICAgICAgPD0gMDsKKyAgICAgIGRtYV9yZF9vICAgICAgPD0gMDsKKyAgICAgIHRlbXBfZGF0YSAgICAgPD0gMDsKKyAgICAgIGJlX3NvZiAgICAgICAgPD0gMDsKKyAgICAgIHdiZF9kYXRfbyAgICAgPD0gMDsgCisgICAgICB3YmRfYmVfbyAgICAgIDw9IDA7IAorICAgICAgZG1hX3JkYXRhX28gICA8PSAwOworICAgICAgd2JkX3N0Yl9vICAgICA8PSAwOworICAgICAgZG1hX3N0YXJ0X28gICA8PSAwOworICAgICAgZG1hX2xhc3RfbyAgICA8PSAwOworICAgZW5kCisgICBlbHNlIGJlZ2luCisgICAgICBzdGF0ZV9kICAgICAgIDw9IHN0YXRlOworICAgICAgY2FzZShzdGF0ZSkKKyAgICAgIFdCX0lETEUgOiAKKyAgICAgICAgIGJlZ2luCisgICAgICAgICAgICBpZihkbWFfcmVxX2kpCisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgZG1hX2Fja19vICA8PSAxOworICAgICAgICAgICAgICAgd2JkX3dlX28gICA8PSBkbWFfd3JpdGVfaTsKKyAgICAgICAgICAgICAgIHdiZF9hZHJfbyAgPD0gZG1hX2FkZHJfaVsyNToyXTsKKyAgICAgICAgICAgICAgIGJlX3NvZiAgICAgPD0gZG1hX2FkZHJfaVsxXSA8PCAxICsgZG1hX2FkZHJfaVswXTsKKyAgICAgICAgICAgICAgIHByZXFfbGVuICAgPD0gZG1hX2xlbmd0aF9pOworICAgICAgICAgICAgICAgLy8gdG90YWwgd2IgdHJhbnNmZXIKKyAgICAgICAgICAgICAgIHR3YnRyYW5zICAgPD0gZG1hX2xlbmd0aF9pWzc6Ml0gKyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfChkbWFfbGVuZ3RoX2lbMTowXSkgKyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfChkbWFfYWRkcl9pWzE6MF0pOworICAgICAgICAgICAgICAgc3RhdGUgICAgICAgPD0gV0JfUkVROworICAgICAgICAgICAgZW5kIAorICAgICAgICAgICAgZG1hX3dyX28gICA8PSAwOworICAgICAgICAgICAgZG1hX3JkX28gICA8PSAwOworICAgICAgICAgICAgd2JkX3N0Yl9vICA8PSAwOworICAgICAgICAgICAgZG1hX3N0YXJ0X28gIDw9IDA7CisgICAgICAgICBlbmQKKyAgICAgIFdCX1JFUSA6CisgICAgICAgICBiZWdpbgorICAgICAgICAgICAgZG1hX2Fja19vICAgICAgPD0gMDsKKyAgICAgICAgICAgIHdiZF9zdGJfbyAgICAgIDw9IDE7CisgICAgICAgICAgICBpZih3YmRfd2VfbykgYmVnaW4KKyAgICAgICAgICAgICAgIGRtYV93cl9vICAgIDw9IDE7CisgICAgICAgICAgICAgICBkbWFfc3RhcnRfbyA8PSAxOworICAgICAgICAgICAgICAgdGVtcF9kYXRhICAgPD0gZG1hX3dkYXRhX2k7IAorICAgICAgICAgICAgICAgaWYoYmVfc29mID09IDApIGJlZ2luCisgICAgICAgICAgICAgICAgICB3YmRfZGF0X28gIDw9IGRtYV93ZGF0YV9pOyAKKyAgICAgICAgICAgICAgICAgIHdiZF9iZV9vICAgPD0gNCdiMTExMTsgCisgICAgICAgICAgICAgICAgICBwcmVxX2xlbiAgICA8PSBwcmVxX2xlbiAtIDQ7CisgICAgICAgICAgICAgICBlbmQgCisgICAgICAgICAgICAgICBlbHNlIGlmKGJlX3NvZiA9PSAxKSBiZWdpbgorICAgICAgICAgICAgICAgICAgd2JkX2RhdF9vICA8PSB7ZG1hX3dkYXRhX2lbMjM6MF0sOCdoMH07IAorICAgICAgICAgICAgICAgICAgd2JkX2JlX28gICA8PSA0J2IxMTEwOyAKKyAgICAgICAgICAgICAgICAgIHByZXFfbGVuICAgIDw9IHByZXFfbGVuIC0gMzsKKyAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgZWxzZSBpZihiZV9zb2YgPT0gMikgYmVnaW4KKyAgICAgICAgICAgICAgICAgIHdiZF9kYXRfbyAgPD0ge2RtYV93ZGF0YV9pWzE1OjBdLDE2J2gwfTsgCisgICAgICAgICAgICAgICAgICB3YmRfYmVfbyAgIDw9IDQnYjExMDA7IAorICAgICAgICAgICAgICAgICAgcHJlcV9sZW4gICAgPD0gcHJlcV9sZW4gLSAyOworICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICBlbHNlIGJlZ2luCisgICAgICAgICAgICAgICAgICB3YmRfZGF0X28gIDw9IHtkbWFfd2RhdGFfaVs3OjBdLDIzJ2gwfTsgCisgICAgICAgICAgICAgICAgICB3YmRfYmVfbyAgIDw9IDQnYjEwMDA7IAorICAgICAgICAgICAgICAgICAgcHJlcV9sZW4gICAgPD0gcHJlcV9sZW4gLSAxOworICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICB0d2J0cmFucyAgIDw9IHR3YnRyYW5zIC0xOworICAgICAgICAgICAgICAgc3RhdGUgICAgICA8PSBXQl9XUl9QSEFTRTsKKyAgICAgICAgICAgICAgIGlmKHR3YnRyYW5zID09IDEpIAorICAgICAgICAgICAgICAgICAgIGRtYV9sYXN0X28gPD0gMTsKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZWxzZSBiZWdpbgorICAgICAgICAgICAgICAgc3RhdGUgICA8PSBXQl9SRF9QSEFTRV9TT0Y7CisgICAgICAgICAgICBlbmQKKyAgICAgICAgIGVuZAorICAgICAgV0JfV1JfUEhBU0UgOgorICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIGRtYV9zdGFydF9vICAgICAgIDw9IDA7CisgICAgICAgICAgICBpZih3YmRfYWNrX2kpIGJlZ2luCisgICAgICAgICAgICAgICBpZih0d2J0cmFucyA9PSAxKSAKKyAgICAgICAgICAgICAgICAgICBkbWFfbGFzdF9vIDw9IDE7CisgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgZG1hX2xhc3RfbyA8PSAwOworICAgICAgICAgICAgICAgaWYodHdidHJhbnMgPiAwKSBiZWdpbgorICAgICAgICAgICAgICAgICAgdGVtcF9kYXRhICAgPD0gZG1hX3dkYXRhX2k7IAorICAgICAgICAgICAgICAgICAgdHdidHJhbnMgICAgPD0gdHdidHJhbnMgLTE7CisgICAgICAgICAgICAgICAgICBpZihiZV9zb2YgPT0gMCkgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgIHdiZF9kYXRfbyAgPD0gZG1hX3dkYXRhX2k7IAorICAgICAgICAgICAgICAgICAgZW5kIAorICAgICAgICAgICAgICAgICAgZWxzZSBpZihiZV9zb2YgPT0gMSkgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgIHdiZF9kYXRfbyAgPD0ge2RtYV93ZGF0YV9pWzIzOjBdLHRlbXBfZGF0YVszMToyNF19OyAKKyAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgZWxzZSBpZihiZV9zb2YgPT0gMikgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgIHdiZF9kYXRfbyAgPD0ge2RtYV93ZGF0YV9pWzE1OjBdLHRlbXBfZGF0YVszMToxNl19OyAKKyAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgZWxzZSBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgd2JkX2RhdF9vICA8PSB7ZG1hX3dkYXRhX2lbNzowXSx0ZW1wX2RhdGFbMzE6OF19OyAKKyAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICBpZih0d2J0cmFucyA+IDEpIGJlZ2luIC8vIElmIHRoZSBQZW5kaW5nIFRyYW5zZmVyIGlzIG1vcmUgdGhhbiAxCisgICAgICAgICAgICAgICAgICAgICBkbWFfd3JfbyAgIDw9IDE7CisgICAgICAgICAgICAgICAgICAgICB3YmRfYmVfbyAgIDw9IDQnYjExMTE7IAorICAgICAgICAgICAgICAgICAgICAgcHJlcV9sZW4gICA8PSBwcmVxX2xlbiAtIDQ7CisgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgIGVsc2UgYmVnaW4gLy8gZm9yIGxhc3Qgd3JpdGUgYWNjZXNzCisgICAgICAgICAgICAgICAgICAgICB3YmRfYmVfbyAgIDw9IHByZXFfbGVuWzE6MF0gPT0gMidiMDAgPyA0J2IxMTExOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVxX2xlblsxOjBdID09IDInYjAxID8gNCdiMDAwMToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlcV9sZW5bMTowXSA9PSAyJ2IxMCA/IDQnYjAwMTE6IDQnYjAxMTE7CisKKyAgICAgICAgICAgICAgICAgICAgIGNhc2Uoe2JlX3NvZlsxOjBdLHByZXFfbGVuWzE6MF19KQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3RhcnQgYWxpZ25tZW50ID0gMAorICAgICAgICAgICAgICAgICAgICAgICAgNCdiMDAwMSA6IGRtYV93cl9vICAgPD0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIDQnYjAwMTAgOiBkbWFfd3JfbyAgIDw9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICA0J2IwMDExIDogZG1hX3dyX28gICA8PSAxOworICAgICAgICAgICAgICAgICAgICAgICAgNCdiMDAwMCA6IGRtYV93cl9vICAgPD0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN0YXJ0IGFsaWdubWVudCA9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgIDQnYjAxMDEgOiBkbWFfd3JfbyAgIDw9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICA0J2IwMTEwIDogZG1hX3dyX28gICA8PSAxOworICAgICAgICAgICAgICAgICAgICAgICAgNCdiMDExMSA6IGRtYV93cl9vICAgPD0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIDQnYjAxMDAgOiBkbWFfd3JfbyAgIDw9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBTdGFydCBhbGlnbm1lbnQgPSAyCisgICAgICAgICAgICAgICAgICAgICAgICA0J2IxMDAxIDogZG1hX3dyX28gICA8PSAwOworICAgICAgICAgICAgICAgICAgICAgICAgNCdiMTAxMCA6IGRtYV93cl9vICAgPD0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIDQnYjEwMTEgOiBkbWFfd3JfbyAgIDw9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICA0J2IxMDAwIDogZG1hX3dyX28gICA8PSAxOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3RhcnQgYWxpZ25tZW50ID0gMworICAgICAgICAgICAgICAgICAgICAgICAgNCdiMTEwMSA6IGRtYV93cl9vICAgPD0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIDQnYjExMTAgOiBkbWFfd3JfbyAgIDw9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICA0J2IxMTExIDogZG1hX3dyX28gICA8PSAwOworICAgICAgICAgICAgICAgICAgICAgICAgNCdiMTEwMCA6IGRtYV93cl9vICAgPD0gMTsKKyAgICAgICAgICAgICAgICAgICAgIGVuZGNhc2UKKyAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICBlbHNlIGJlZ2luCisgICAgICAgICAgICAgICAgICBkbWFfd3JfbyAgPD0gMDsKKyAgICAgICAgICAgICAgICAgIHdiZF9zdGJfbyA8PSAwOworICAgICAgICAgICAgICAgICAgc3RhdGUgICAgIDw9IFdCX0lETEU7CisgICAgICAgICAgICAgICBlbmQgCisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVsc2UgYmVnaW4KKyAgICAgICAgICAgICAgIGRtYV9sYXN0X28gPD0gMDsKKyAgICAgICAgICAgICAgIGRtYV93cl9vICAgPD0gMDsKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgZW5kCisgICAgICBXQl9SRF9QSEFTRV9TT0YgOgorICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIGlmKHdiZF9hY2tfaSkgYmVnaW4KKyAgICAgICAgICAgICAgIHR3YnRyYW5zICAgIDw9IHR3YnRyYW5zIC0xOworICAgICAgICAgICAgICAgaWYodHdidHJhbnMgPT0gMSkgYmVnaW4gLy8gSWYgdGhlIFBlbmRpbmcgVHJhbnNmZXIgaXMgMQorICAgICAgICAgICAgICAgICAgIGRtYV9yZF9vICAgPD0gMTsKKyAgICAgICAgICAgICAgICAgICBkbWFfc3RhcnRfbzw9IDE7CisgICAgICAgICAgICAgICAgICAgaWYoYmVfc29mID09IDApIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgIGRtYV9yZGF0YV9vICA8PSB3YmRfZGF0X2k7IAorICAgICAgICAgICAgICAgICAgICAgICBwcmVxX2xlbiAgICAgPD0gcHJlcV9sZW4gLSA0OworICAgICAgICAgICAgICAgICAgIGVuZCAKKyAgICAgICAgICAgICAgICAgICBlbHNlIGlmKGJlX3NvZiA9PSAxKSBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgICBkbWFfcmRhdGFfbyAgPD0gezgnaDAsd2JkX2RhdF9pWzMxOjI0XX07IAorICAgICAgICAgICAgICAgICAgICAgICBwcmVxX2xlbiAgICAgPD0gcHJlcV9sZW4gLSAzOworICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgIGVsc2UgaWYoYmVfc29mID09IDIpIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgIGRtYV9yZGF0YV9vICA8PSB7MTYnaDAsd2JkX2RhdF9pWzMxOjE2XX07IAorICAgICAgICAgICAgICAgICAgICAgICBwcmVxX2xlbiAgICAgPD0gcHJlcV9sZW4gLSAyOworICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgIGVsc2UgYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgZG1hX3JkYXRhX28gIDw9IHsyMydoMCx3YmRfZGF0X2lbMzE6OF19OyAKKyAgICAgICAgICAgICAgICAgICAgICAgcHJlcV9sZW4gICAgIDw9IHByZXFfbGVuIC0gMDsKKyAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICBkbWFfbGFzdF9vIDw9IDE7CisgICAgICAgICAgICAgICAgICAgc3RhdGUgICAgICA8PSBXQl9JRExFOworICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICBlbHNlIGJlZ2luIC8vIHBlbmRpbmcgdHJhbnNjdGlvbiBpcyBtb3JlIHRoYW4gMQorICAgICAgICAgICAgICAgICAgaWYoYmVfc29mID09IDApIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgZG1hX3JkYXRhX28gIDw9IHdiZF9kYXRfaTsgCisgICAgICAgICAgICAgICAgICAgICAgZG1hX3JkX28gICAgIDw9IDE7CisgICAgICAgICAgICAgICAgICAgICAgZG1hX3N0YXJ0X28gIDw9IDE7CisgICAgICAgICAgICAgICAgICAgICAgcHJlcV9sZW4gICAgIDw9IHByZXFfbGVuIC0gNDsKKyAgICAgICAgICAgICAgICAgIGVuZCAKKyAgICAgICAgICAgICAgICAgIGVsc2UgaWYoYmVfc29mID09IDEpIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgdGVtcF9kYXRhICAgIDw9IHs4J2gwLHdiZF9kYXRfaVszMToyNF19OyAKKyAgICAgICAgICAgICAgICAgICAgICBkbWFfcmRfbyAgICAgPD0gMDsKKyAgICAgICAgICAgICAgICAgICAgICBwcmVxX2xlbiAgICAgPD0gcHJlcV9sZW4gLSAzOworICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICBlbHNlIGlmKGJlX3NvZiA9PSAyKSBiZWdpbgorICAgICAgICAgICAgICAgICAgICAgIHRlbXBfZGF0YSAgIDw9IHsxNidoMCx3YmRfZGF0X2lbMzE6MTZdfTsgCisgICAgICAgICAgICAgICAgICAgICAgcHJlcV9sZW4gICAgPD0gcHJlcV9sZW4gLSAyOworICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICBlbHNlIGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAgdGVtcF9kYXRhICAgPD0gezIzJ2gwLHdiZF9kYXRfaVszMTo4XX07IAorICAgICAgICAgICAgICAgICAgICAgIHByZXFfbGVuICAgIDw9IHByZXFfbGVuIC0gMDsKKyAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgc3RhdGUgICAgIDw9IFdCX1JEX1BIQVNFX0NPTlQ7CisgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZWxzZSBiZWdpbgorICAgICAgICAgICAgICAgZG1hX3JkX28gIDw9IDA7CisgICAgICAgICAgICBlbmQKKyAgICAgICAgIGVuZAorICAgICAgV0JfUkRfUEhBU0VfQ09OVDoKKyAgICAgICAgIGJlZ2luCisgICAgICAgICAgICBkbWFfc3RhcnRfbyAgPD0gMDsKKyAgICAgICAgICAgIGlmKHdiZF9hY2tfaSkgYmVnaW4KKyAgICAgICAgICAgICAgIGRtYV9yZF9vICAgICAgICAgPD0gMTsKKyAgICAgICAgICAgICAgIHR3YnRyYW5zICAgICAgICAgPD0gdHdidHJhbnMgLTE7CisgICAgICAgICAgICAgICBpZihiZV9zb2YgPT0gMCkgYmVnaW4KKyAgICAgICAgICAgICAgICAgIGRtYV9yZGF0YV9vICAgPD0gd2JkX2RhdF9pOyAKKyAgICAgICAgICAgICAgICAgIHByZXFfbGVuICAgICAgPD0gcHJlcV9sZW4gLSA0OworICAgICAgICAgICAgICAgZW5kIAorICAgICAgICAgICAgICAgZWxzZSBpZihiZV9zb2YgPT0gMSkgYmVnaW4KKyAgICAgICAgICAgICAgICAgIGRtYV9yZGF0YV9vICAgPD0ge3diZF9kYXRfaVs3OjBdLHRlbXBfZGF0YVsyMzowXX07IAorICAgICAgICAgICAgICAgICAgdGVtcF9kYXRhICAgICA8PSB7OCdoMCx3YmRfZGF0X2lbMzE6OF19OworICAgICAgICAgICAgICAgICAgcHJlcV9sZW4gICAgICA8PSBwcmVxX2xlbiAtIDM7CisgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgIGVsc2UgaWYoYmVfc29mID09IDIpIGJlZ2luCisgICAgICAgICAgICAgICAgICBkbWFfcmRhdGFfbyAgIDw9IHt3YmRfZGF0X2lbMTU6MF0sdGVtcF9kYXRhWzE1OjBdfTsgCisgICAgICAgICAgICAgICAgICB0ZW1wX2RhdGEgICAgIDw9IHsxNidoMCx3YmRfZGF0X2lbMzE6MTZdfTsKKyAgICAgICAgICAgICAgICAgIHByZXFfbGVuICAgICAgPD0gcHJlcV9sZW4gLSAyOworICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICBlbHNlIGJlZ2luCisgICAgICAgICAgICAgICAgICBkbWFfcmRhdGFfbyAgIDw9IHt3YmRfZGF0X2lbMjM6MF0sdGVtcF9kYXRhWzc6MF19OyAKKyAgICAgICAgICAgICAgICAgIHRlbXBfZGF0YSAgICAgPD0gezI0J2gwLHdiZF9kYXRfaVszMToyM119OworICAgICAgICAgICAgICAgICAgcHJlcV9sZW4gICAgICA8PSBwcmVxX2xlbiAtIDE7CisgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgIGlmKHR3YnRyYW5zID09IDEpIGJlZ2luICAvLyBJZiB0aGUgaXQncyBsYXN0IHRyYW5zZmVyCisgICAgICAgICAgICAgICAgICBkbWFfbGFzdF9vIDw9IDE7CisgICAgICAgICAgICAgICAgICBzdGF0ZSAgICAgIDw9IFdCX0lETEU7CisgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgZWxzZSBiZWdpbgorICAgICAgICAgICAgICAgZG1hX2xhc3RfbyA8PSAwOworICAgICAgICAgICAgICAgZG1hX3JkX28gICA8PSAwOworICAgICAgICAgICAgZW5kCisgICAgICAgICBlbmQKKyAgICAgIGVuZGNhc2UKKyAgIGVuZAorZW5kIAorCisKKworZW5kbW9kdWxlCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9saWIvd2Jfc3RhZ2dpbmcuc3YgYi92ZXJpbG9nL3J0bC9saWIvd2Jfc3RhZ2dpbmcuc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY2MTAwNQotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL2xpYi93Yl9zdGFnZ2luZy5zdgpAQCAtMCwwICsxLDE5MiBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxICwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgIAorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IENyZWF0ZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKy8vCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFRoaXMgbG9naWMgY3JlYXRlIGEgaG9sZGluZyByZWdpc3RlciBmb3IgV2lzaGJvbmUgaW50ZXJmYWNlLgorLy8gVGhpcyBpcyB1c2VmdWxsIHRvIGJyZWFrIHRpbWluZyBpc3N1ZSBhdCBpbnRlcmNvbm5lY3QKKy8vCisvLyBMaW1pdGF0aW9uOiBEdWUgdG8gc3RhZ2dpbmcgRkYsIENvbnRpbm91cyBCdXJzdCBvZiBXaXNoYm9uZSB3aWxsIGhhdmUgb25lCisvLyBjeWNsZSBicmVhayBiZXR3ZWVuIGVhY2ggdHJhbnNhY3Rpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgV2lzaGJvbmUgU3RhZ2dpbmcgRkYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFlJRml2ZSBjb3JlcyBwcm9qZWN0ICAgICAgICAgICAgICAgLy8vLworLy8vLyAgaHR0cHM6Ly9naXRodWIuY29tL2RpbmVzaGFubmF5eWEveWlmaXZlX3IwLmdpdCAgICAgICAgICAgICAgLy8vLworLy8vLyAgaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2NvcmVzL3lpZml2ZS8gICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICBUaGlzIGxvZ2ljIGNyZWF0ZSBhIGhvbGRpbmcgRkYgZm9yIFdpc2hib25lIGludGVyZmFjZS4gICAgLy8vLworLy8vLyAgICBUaGlzIGlzIHVzZWZ1bGwgdG8gYnJlYWsgdGltaW5nIGlzc3VlIGF0IGludGVyY29ubmVjdCAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgTGltaXRhdGlvbjogRHVlIHRvIHN0YWdnaW5nIEZGLCBDb250aW5vdXMgQnVyc3Qgb2YgICAgICAgICAgLy8vLworLy8vLyAgV2lzaGJvbmUgd2lsbCBoYXZlIG9uZSBjeWNsZSBicmVhayBiZXR3ZWVuIGVhY2ggdHJhbnNhY3Rpb24gLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVG8gRG86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICBub3RoaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgQXV0aG9yKHMpOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgIC0gRGluZXNoIEFubmF5eWEsIGRpbmVzaGFAb3BlbmNvcmVzLm9yZyAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgUmV2aXNpb24gOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAwLjEgLSAxMnRoIEp1bmUgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBDb3B5cmlnaHQgKEMpIDIwMDAgQXV0aG9ycyBhbmQgT1BFTkNPUkVTLk9SRyAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBmaWxlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCB3aXRob3V0ICAgICAgICAgLy8vLworLy8vLyByZXN0cmljdGlvbiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgICAgLy8vLworLy8vLyByZW1vdmVkIGZyb20gdGhlIGZpbGUgYW5kIHRoYXQgYW55IGRlcml2YXRpdmUgd29yayBjb250YWlucyAgLy8vLworLy8vLyB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGFzc29jaWF0ZWQgZGlzY2xhaW1lci4gLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0ICAgLy8vLworLy8vLyBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgLy8vLworLy8vLyBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgLy8vLworLy8vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55ICAgLy8vLworLy8vLyBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgICAgICAgLy8vLworLy8vLyB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkICAgLy8vLworLy8vLyB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSICAgICAgLy8vLworLy8vLyBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgLy8vLworLy8vLyBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAgLy8vLworLy8vLyBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgc291cmNlOyBpZiBub3QsIGRvd25sb2FkIGl0ICAgLy8vLworLy8vLyBmcm9tIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9sZ3BsLnNodG1sICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisKK21vZHVsZSB3Yl9zdGFnZ2luZyAoCisgICAgICAgICBpbnB1dCBsb2dpYwkJY2xrX2ksIAorICAgICAgICAgaW5wdXQgbG9naWMgICAgICAgICAgICByc3RfbiwKKyAgICAgICAgIC8vIFdpc2hCb25lIElucHV0IG1hc3RlciBJL1AKKyAgICAgICAgIGlucHV0ICAgbG9naWMJWzMxOjBdCW1fd2JkX2RhdF9pLAorICAgICAgICAgaW5wdXQgICBsb2dpYyAgWzMxOjBdCW1fd2JkX2Fkcl9pLAorICAgICAgICAgaW5wdXQgICBsb2dpYyAgWzM6MF0JbV93YmRfc2VsX2ksCisgICAgICAgICBpbnB1dCAgIGxvZ2ljICBbOTowXQltX3diZF9ibF9pLAorICAgICAgICAgaW5wdXQgICBsb2dpYyAgCW1fd2JkX2JyeV9pLAorICAgICAgICAgaW5wdXQgICBsb2dpYyAgCW1fd2JkX3dlX2ksCisgICAgICAgICBpbnB1dCAgIGxvZ2ljICAJbV93YmRfY3ljX2ksCisgICAgICAgICBpbnB1dCAgIGxvZ2ljICAJbV93YmRfc3RiX2ksCisgICAgICAgICBpbnB1dCAgIGxvZ2ljICBbMzowXQltX3diZF90aWRfaSwKKyAgICAgICAgIG91dHB1dCAgbG9naWMJWzMxOjBdCW1fd2JkX2RhdF9vLAorICAgICAgICAgb3V0cHV0ICBsb2dpYwkJbV93YmRfYWNrX28sCisgICAgICAgICBvdXRwdXQgIGxvZ2ljCQltX3diZF9sYWNrX28sCisgICAgICAgICBvdXRwdXQgIGxvZ2ljCQltX3diZF9lcnJfbywKKworICAgICAgICAgLy8gU2xhdmUgSW50ZXJmYWNlCisgICAgICAgICBpbnB1dAlsb2dpYyBbMzE6MF0Jc193YmRfZGF0X2ksCisgICAgICAgICBpbnB1dAlsb2dpYyAJICAgICAgICBzX3diZF9hY2tfaSwKKyAgICAgICAgIGlucHV0CWxvZ2ljIAkgICAgICAgIHNfd2JkX2xhY2tfaSwKKyAgICAgICAgIGlucHV0CWxvZ2ljIAkgICAgICAgIHNfd2JkX2Vycl9pLAorICAgICAgICAgb3V0cHV0CWxvZ2ljIFszMTowXQlzX3diZF9kYXRfbywKKyAgICAgICAgIG91dHB1dAlsb2dpYyBbMzE6MF0Jc193YmRfYWRyX28sCisgICAgICAgICBvdXRwdXQJbG9naWMgWzM6MF0Jc193YmRfc2VsX28sCisgICAgICAgICBvdXRwdXQJbG9naWMgWzk6MF0Jc193YmRfYmxfbywKKyAgICAgICAgIG91dHB1dAlsb2dpYyAgICAJc193YmRfYnJ5X28sCisgICAgICAgICBvdXRwdXQJbG9naWMgCSAgICAgICAgc193YmRfd2VfbywKKyAgICAgICAgIG91dHB1dAlsb2dpYyAJICAgICAgICBzX3diZF9jeWNfbywKKyAgICAgICAgIG91dHB1dAlsb2dpYyAJICAgICAgICBzX3diZF9zdGJfbywKKyAgICAgICAgIG91dHB1dAlsb2dpYyBbMzowXQlzX3diZF90aWRfbworCispOworCitsb2dpYyBbMzE6MF0gbV93YmRfZGF0X2lfZmYgOyAvLyBGbG9wcGVkIHZlc2lvbiBvZiBtX3diZF9kYXRfaQorbG9naWMgWzMxOjBdIG1fd2JkX2Fkcl9pX2ZmIDsgLy8gRmxvcHBlZCB2ZXNpb24gb2YgbV93YmRfYWRyX2kKK2xvZ2ljIFszOjBdICBtX3diZF9zZWxfaV9mZiA7IC8vIEZsb3BwZWQgdmVzaW9uIG9mIG1fd2JkX3NlbF9pCitsb2dpYyBbOTowXSAgbV93YmRfYmxfaV9mZiA7ICAvLyBGbG9wcGVkIHZlc2lvbiBvZiBtX3diZF9ibF9pCitsb2dpYyAgICAgICAgbV93YmRfYnJ5X2lfZmYgOyAvLyBGbG9wcGVkIHZlc2lvbiBvZiBtX3diZF9icnlfaQorbG9naWMgICAgICAgIG1fd2JkX3dlX2lfZmYgIDsgLy8gRmxvcHBlZCB2ZXNpb24gb2YgbV93YmRfd2VfaQorbG9naWMgICAgICAgIG1fd2JkX2N5Y19pX2ZmIDsgLy8gRmxvcHBlZCB2ZXNpb24gb2YgbV93YmRfY3ljX2kKK2xvZ2ljICAgICAgICBtX3diZF9zdGJfaV9mZiA7IC8vIEZsb3BwZWQgdmVzaW9uIG9mIG1fd2JkX3N0Yl9pCitsb2dpYyBbMzowXSAgbV93YmRfdGlkX2lfZmYgOyAvLyBGbG9wcGVkIHZlc2lvbiBvZiBtX3diZF90aWRfaQorbG9naWMgWzMxOjBdIHNfd2JkX2RhdF9pX2ZmIDsgLy8gRmxvcHBlZCB2ZXNpb24gb2Ygc193YmRfZGF0X2kKK2xvZ2ljICAgICAgICBzX3diZF9hY2tfaV9mZiA7IC8vIEZsb3BwZWQgdmVzaW9uIG9mIHNfd2JkX2Fja19pCitsb2dpYyAgICAgICAgc193YmRfbGFja19pX2ZmIDsgLy8gRmxvcHBlZCB2ZXNpb24gb2Ygc193YmRfYWNrX2kKK2xvZ2ljICAgICAgICBzX3diZF9lcnJfaV9mZiA7IC8vIEZsb3BwZWQgdmVzaW9uIG9mIHNfd2JkX2Vycl9pCisKKworYXNzaWduIHNfd2JkX2RhdF9vID0gbV93YmRfZGF0X2lfZmY7Cithc3NpZ24gc193YmRfYWRyX28gPSBtX3diZF9hZHJfaV9mZjsKK2Fzc2lnbiBzX3diZF9zZWxfbyA9IG1fd2JkX3NlbF9pX2ZmOworYXNzaWduIHNfd2JkX2JsX28gID0gbV93YmRfYmxfaV9mZjsKK2Fzc2lnbiBzX3diZF9icnlfbyA9IG1fd2JkX2JyeV9pX2ZmOworYXNzaWduIHNfd2JkX3dlX28gID0gbV93YmRfd2VfaV9mZjsKK2Fzc2lnbiBzX3diZF9jeWNfbyA9IG1fd2JkX2N5Y19pX2ZmOworYXNzaWduIHNfd2JkX3N0Yl9vID0gbV93YmRfc3RiX2lfZmY7Cithc3NpZ24gc193YmRfdGlkX28gPSBtX3diZF90aWRfaV9mZjsKKworYXNzaWduIG1fd2JkX2RhdF9vID0gc193YmRfZGF0X2lfZmY7Cithc3NpZ24gbV93YmRfYWNrX28gPSBzX3diZF9hY2tfaV9mZjsKK2Fzc2lnbiBtX3diZF9sYWNrX28gPSBzX3diZF9sYWNrX2lfZmY7Cithc3NpZ24gbV93YmRfZXJyX28gPSBzX3diZF9lcnJfaV9mZjsKKworYWx3YXlzIEAobmVnZWRnZSByc3RfbiBvciBwb3NlZGdlIGNsa19pKQorYmVnaW4KKyAgIGlmKHJzdF9uID09IDEnYjApIGJlZ2luCisgICAgICAgbV93YmRfZGF0X2lfZmYgPD0gJ2gwOworICAgICAgIG1fd2JkX2Fkcl9pX2ZmIDw9ICdoMDsKKyAgICAgICBtX3diZF9zZWxfaV9mZiA8PSAnaDA7CisgICAgICAgbV93YmRfYmxfaV9mZiAgPD0gJ2gwOworICAgICAgIG1fd2JkX2JyeV9pX2ZmIDw9ICdiMDsKKyAgICAgICBtX3diZF93ZV9pX2ZmICA8PSAnaDA7CisgICAgICAgbV93YmRfY3ljX2lfZmYgPD0gJ2gwOworICAgICAgIG1fd2JkX3N0Yl9pX2ZmIDw9ICdoMDsKKyAgICAgICBtX3diZF90aWRfaV9mZiA8PSAnaDA7CisgICAgICAgc193YmRfZGF0X2lfZmYgPD0gJ2gwOworICAgICAgIHNfd2JkX2Fja19pX2ZmIDw9ICdoMDsKKyAgICAgICBzX3diZF9sYWNrX2lfZmYgPD0gJ2gwOworICAgICAgIHNfd2JkX2Vycl9pX2ZmIDw9ICdoMDsKKyAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgc193YmRfZGF0X2lfZmYgIDw9IHNfd2JkX2RhdF9pOworICAgICAgIHNfd2JkX2Fja19pX2ZmICA8PSBzX3diZF9hY2tfaTsKKyAgICAgICBzX3diZF9sYWNrX2lfZmYgPD0gc193YmRfbGFja19pOworICAgICAgIHNfd2JkX2Vycl9pX2ZmIDw9IHNfd2JkX2Vycl9pOworICAgICAgIGlmKChtX3diZF9zdGJfaSAmJiBtX3diZF9icnlfaSAmJiBzX3diZF9hY2tfaSA9PSAwICYmIG1fd2JkX2xhY2tfbyA9PSAwKSB8fAorICAgICAgICAgIChtX3diZF9zdGJfaSAmJiBtX3diZF9icnlfaSAmJiBzX3diZF9hY2tfaSA9PSAxICYmIHNfd2JkX2xhY2tfaSA9PSAwKSkgYmVnaW4KKyAgICAgICAgICBtX3diZF9kYXRfaV9mZiA8PSBtX3diZF9kYXRfaTsKKyAgICAgICAgICBtX3diZF9hZHJfaV9mZiA8PSBtX3diZF9hZHJfaTsKKyAgICAgICAgICBtX3diZF9zZWxfaV9mZiA8PSBtX3diZF9zZWxfaTsKKyAgICAgICAgICBtX3diZF93ZV9pX2ZmICA8PSBtX3diZF93ZV9pOworICAgICAgICAgIG1fd2JkX2N5Y19pX2ZmIDw9IG1fd2JkX2N5Y19pOworICAgICAgICAgIG1fd2JkX3N0Yl9pX2ZmIDw9IG1fd2JkX3N0Yl9pOworICAgICAgICAgIG1fd2JkX3RpZF9pX2ZmIDw9IG1fd2JkX3RpZF9pOworICAgICAgICAgIG1fd2JkX2JsX2lfZmYgIDw9IG1fd2JkX2JsX2k7CisgICAgICAgICAgbV93YmRfYnJ5X2lfZmYgPD0gJ2IxOworICAgICAgIGVuZCBlbHNlICBpZiAoKG1fd2JkX3N0Yl9pICYmICFtX3diZF9icnlfaSAmJiBzX3diZF9hY2tfaSA9PSAxICYmIHNfd2JkX2xhY2tfaSA9PSAwKSkgYmVnaW4gLy8gRGUtQXNzZXJ0IGJ1cnN0IHJlYWR5CisgICAgICAgICAgbV93YmRfYnJ5X2lfZmYgPD0gJ2IwOworICAgICAgIGVuZCBlbHNlIGlmIChzX3diZF9sYWNrX2kpIGJlZ2luCisgICAgICAgICAgbV93YmRfZGF0X2lfZmYgPD0gJ2gwOworICAgICAgICAgIG1fd2JkX2Fkcl9pX2ZmIDw9ICdoMDsKKyAgICAgICAgICBtX3diZF9zZWxfaV9mZiA8PSAnaDA7CisgICAgICAgICAgbV93YmRfd2VfaV9mZiAgPD0gJ2gwOworICAgICAgICAgIG1fd2JkX2N5Y19pX2ZmIDw9ICdoMDsKKyAgICAgICAgICBtX3diZF9zdGJfaV9mZiA8PSAnaDA7CisgICAgICAgICAgbV93YmRfdGlkX2lfZmYgPD0gJ2gwOworICAgICAgICAgIG1fd2JkX2JsX2lfZmYgIDw9ICdoMDsKKyAgICAgICAgICBtX3diZF9icnlfaV9mZiA8PSAnYjA7CisgICAgICAgZW5kCisgICBlbmQKK2VuZAorCisKK2VuZG1vZHVsZQorCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9tYmlzdC9pbmNsdWRlL21iaXN0X2RlZi5zdmggYi92ZXJpbG9nL3J0bC9tYmlzdC9pbmNsdWRlL21iaXN0X2RlZi5zdmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBmYjJlYQotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL21iaXN0L2luY2x1ZGUvbWJpc3RfZGVmLnN2aApAQCAtMCwwICsxLDY2IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSAsIERpbmVzaCBBbm5heXlhICAgICAgICAgICAgICAgICAgICAgICAgICAKKy8vIAorLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBDcmVhdGVkIGJ5IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworYGlmbmRlZiBCSVNUX0RFRklORV9TVkgKK2BkZWZpbmUgQklTVF9ERUZJTkVfU1ZICisKKy8vIEJJU1QgQUREUkVTUyBDT05UUkwKKy8vCisvL3BhcmFtZXRlciBCSVNUX0FERFJfV0QgICAgPSA5ICAgICA7CisvL3BhcmFtZXRlciBCSVNUX0FERFJfU1RBUlQgPSAxMCdoMDAwIDsgCisvL3BhcmFtZXRlciBCSVNUX0FERFJfRU5EICAgPSAxMCdoM0ZCIDsKKworLy8gQklTVCBEQVRBIENPTlRSTAorLy9wYXJhbWV0ZXIgQklTVF9EQVRBX1dEICAgICAgICA9IDMyOworcGFyYW1ldGVyIEJJU1RfREFUQV9QQVRfU0laRSAgPSA4OworcGFyYW1ldGVyIEJJU1RfREFUQV9QQVRfVFlQRTEgPSA2NCdoNTU1NV81NTU1XzU1NTVfNTU1NTsKK3BhcmFtZXRlciBCSVNUX0RBVEFfUEFUX1RZUEUyID0gNjQnaDMzMzNfMzMzM18zMzMzXzMzMzM7CitwYXJhbWV0ZXIgQklTVF9EQVRBX1BBVF9UWVBFMyA9IDY0J2gwRjBGXzBGMEZfMEYwRl8wRjBGOworcGFyYW1ldGVyIEJJU1RfREFUQV9QQVRfVFlQRTQgPSA2NCdoMDBGRl8wMEZGXzAwRkZfMDBGRjsKK3BhcmFtZXRlciBCSVNUX0RBVEFfUEFUX1RZUEU1ID0gNjQnaDAwMDBfRkZGRl8wMDAwX0ZGRkY7CitwYXJhbWV0ZXIgQklTVF9EQVRBX1BBVF9UWVBFNiA9IDY0J2gwMDAwXzAwMDBfRkZGRl9GRkZGOworcGFyYW1ldGVyIEJJU1RfREFUQV9QQVRfVFlQRTcgPSA2NCdoRkZGRl9GRkZGX0ZGRkZfRkZGRjsKK3BhcmFtZXRlciBCSVNUX0RBVEFfUEFUX1RZUEU4ID0gNjQnaDAwMDBfMDAwMF8wMDAwXzAwMDA7CisKKy8vIEJJU1QgU1RJTVVMQVRJT04gU0VMRUNUCisKK3BhcmFtZXRlciAgQklTVF9TVElfU0laRSA9IDU7CitwYXJhbWV0ZXIgIEJJU1RfU1RJX1dEICAgPSAxNTsKKy8vIEFkZGl0aW9uYWwgMydiMDAwIGFkZGVkIGF0IGVuZCBvZiBlYWNoIHN0aW11bHVzIHRvIGZsdXNoIG91dCB0aGUgY29tcGFyaW9uCisvLyByZXN1bHQgKyB0byBoYW5kbGUgZXJyb3IgZml4IGNhc2UKK3BhcmFtZXRlciAgQklTVF9TVElNVUxVU19UWVBFMSA9IDE1J2IxMDAxMDAxMDAxMDAwMDA7CitwYXJhbWV0ZXIgIEJJU1RfU1RJTVVMVVNfVFlQRTIgPSAxNSdiMTAwMDEwMTAxMDExMDAwOworcGFyYW1ldGVyICBCSVNUX1NUSU1VTFVTX1RZUEUzID0gMTUnYjExMDAxMTEwMDAxMDAwMDsKK3BhcmFtZXRlciAgQklTVF9TVElNVUxVU19UWVBFNCA9IDE1J2IwMDAwMTAxMDEwMTEwMDA7CitwYXJhbWV0ZXIgIEJJU1RfU1RJTVVMVVNfVFlQRTUgPSAxNSdiMDEwMDExMTAwMDEwMDAwOworcGFyYW1ldGVyICBCSVNUX1NUSU1VTFVTX1RZUEU2ID0gMTUnYjAwMDAwMDAwMDAwMDAwMDsKK3BhcmFtZXRlciAgQklTVF9TVElNVUxVU19UWVBFNyA9IDE1J2IwMDAwMDAwMDAwMDAwMDA7CitwYXJhbWV0ZXIgIEJJU1RfU1RJTVVMVVNfVFlQRTggPSAxNSdiMDAwMDAwMDAwMDAwMDAwOworCisKKy8vIE9wZXJhdGlvbiAKK3BhcmFtZXRlciAgQklTVF9PUF9TSVpFICAgICAgICA9IDQ7CisKKy8vIEJJU1QgQUREUkVTUyBSRVBBSVIKKy8vcGFyYW1ldGVyICBCSVNUX1JBRF9XRF9JICAgICAgICAgICAgPSBCSVNUX0FERFJfV0Q7CisvL3BhcmFtZXRlciAgQklTVF9SQURfV0RfTyAgICAgICAgICAgID0gQklTVF9BRERSX1dEOworcGFyYW1ldGVyICBCSVNUX0VSUl9MSU1JVCAgICAgICAgICAgPSA0OworLy8gTWFrZSBTdXJlIHRoYXQgdGhpcyBhZGRyZXNzIGluIG91dHNpZGUgdGhlIHZhbGlkIGFkZHJlc3MgcmFuZ2UKKy8vcGFyYW1ldGVyICBCSVNUX1JFUEFJUl9BRERSX1NUQVJUICAgPSAxMCdoM0ZDIDsgCisKK2BlbmRpZiAvLyBCSVNUX0RFRklORV9TVkgKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL21iaXN0L3J1bl9pdmVyaWxvZyBiL3Zlcmlsb2cvcnRsL21iaXN0L3J1bl9pdmVyaWxvZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mNWY1MDIwCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvbWJpc3QvcnVuX2l2ZXJpbG9nCkBAIC0wLDAgKzEsMTcgQEAKK2l2ZXJpbG9nIC1nMjAwNS1zdiAtREZVTkNUSU9OQUwgLUQgVU5JVF9ERUxBWT0jMC4xIFwKK3NyYy90b3AvbWJpc3RfdG9wLnN2IFwKK3NyYy9jb3JlL21iaXN0X2FkZHJfZ2VuLnN2IFwKK3NyYy9jb3JlL21iaXN0X2ZzbS5zdiBcCitzcmMvY29yZS9tYmlzdF9vcF9zZWwuc3YgXAorc3JjL2NvcmUvbWJpc3RfcmVwYWlyX2FkZHIuc3YgXAorc3JjL2NvcmUvbWJpc3RfZGF0YV9jbXAuc3YgXAorc3JjL2NvcmUvbWJpc3RfbXV4LnN2IFwKK3NyYy9jb3JlL21iaXN0X3BhdF9zZWwuc3YgXAorc3JjL2NvcmUvbWJpc3Rfc3RpX3NlbC5zdiBcCitzcmMvY29yZS9tYmlzdF9tZW1fd3JhcHBlci5zdiBcCistSSBpbmNsdWRlLyBcCisuLi9saWIvY3RlY2hfY2VsbHMuc3YgXAorLi4vbGliL3Jlc2V0X3N5bmMuc3YgXAorLi4vY2xrX3NrZXdfYWRqdXN0L3NyYy9jbGtfc2tld19hZGp1c3QuZ3YgXAorJFBES19ST09UL3NreTEzMEEvbGlicy5yZWYvc2t5MTMwX2ZkX3NjX2hkL3Zlcmlsb2cvc2t5MTMwX2ZkX3NjX2hkLnYgXAorJFBES19ST09UL3NreTEzMEEvbGlicy5yZWYvc2t5MTMwX2ZkX3NjX2hkL3Zlcmlsb2cvcHJpbWl0aXZlcy52IApkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvbWJpc3QvcnVuX3ZlcmlsYXRvciBiL3Zlcmlsb2cvcnRsL21iaXN0L3J1bl92ZXJpbGF0b3IKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMWRkNWQ2YgotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL21iaXN0L3J1bl92ZXJpbGF0b3IKQEAgLTAsMCArMSwxNyBAQAordmVyaWxhdG9yIC1jYyAgXAorc3JjL3RvcC9tYmlzdF90b3AxLnN2IFwKK3NyYy9jb3JlL21iaXN0X2FkZHJfZ2VuLnN2IFwKK3NyYy9jb3JlL21iaXN0X2ZzbS5zdiBcCitzcmMvY29yZS9tYmlzdF9vcF9zZWwuc3YgXAorc3JjL2NvcmUvbWJpc3RfcmVwYWlyX2FkZHIuc3YgXAorc3JjL2NvcmUvbWJpc3RfZGF0YV9jbXAuc3YgXAorc3JjL2NvcmUvbWJpc3RfbXV4LnN2IFwKK3NyYy9jb3JlL21iaXN0X3BhdF9zZWwuc3YgXAorc3JjL2NvcmUvbWJpc3Rfc3RpX3NlbC5zdiBcCisraW5jZGlyK2luY2x1ZGUvIFwKKy4uL2xpYi9jdGVjaF9jZWxscy5zdiBcCisuLi9saWIvcmVzZXRfc3luYy5zdiBcCistdiAkUERLX1JPT1Qvc2t5MTMwQS9saWJzLnJlZi9za3kxMzBfZmRfc2NfaGQvdmVyaWxvZy9za3kxMzBfZmRfc2NfaGQudiBcCistdiAkUERLX1JPT1Qvc2t5MTMwQS9saWJzLnJlZi9za3kxMzBfZmRfc2NfaGQvdmVyaWxvZy9wcmltaXRpdmVzLnYgXAorLS10aW1lc2NhbGUgMW5zLzEwMHBzIFwKKy0tYmJveC11bnN1cApkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvbWJpc3Qvc3JjL2NvcmUvbWJpc3RfYWRkcl9nZW4uc3YgYi92ZXJpbG9nL3J0bC9tYmlzdC9zcmMvY29yZS9tYmlzdF9hZGRyX2dlbi5zdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmNmNDJjCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvbWJpc3Qvc3JjL2NvcmUvbWJpc3RfYWRkcl9nZW4uc3YKQEAgLTAsMCArMSwxMTYgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxICwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgIAorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IENyZWF0ZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBNQklTVCBBZGRyZXNzIEdlbmVyYXRvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgbWJpc3RfY3RybCBjb3JlcyBwcm9qZWN0ICAgICAgICAgICAvLy8vCisvLy8vICBodHRwczovL2dpdGh1Yi5jb20vZGluZXNoYW5uYXl5YS9tYmlzdF9jdHJsLmdpdCAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgVGhpcyBibG9jayBpbnRlZ3JhdGUgbWJpc3QgYWRkcmVzcyBnZW4gICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUbyBEbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIG5vdGhpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBBdXRob3Iocyk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgLSBEaW5lc2ggQW5uYXl5YSwgZGluZXNoYUBvcGVuY29yZXMub3JnICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBSZXZpc2lvbiA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIDAuMCAtIDExdGggT2N0IDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIEluaXRpYWwgaW50ZWdyYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2BpbmNsdWRlICJtYmlzdF9kZWYuc3ZoIgorCittb2R1bGUgbWJpc3RfYWRkcl9nZW4KKyAgICAgIyggIHBhcmFtZXRlciBCSVNUX0FERFJfV0QgICAgICAgICAgID0gOSwKKwkgcGFyYW1ldGVyIEJJU1RfREFUQV9XRCAgICAgICAgICAgPSAzMiwKKwkgcGFyYW1ldGVyIEJJU1RfQUREUl9TVEFSVCAgICAgICAgPSA5J2gwMDAsCisJIHBhcmFtZXRlciBCSVNUX0FERFJfRU5EICAgICAgICAgID0gOSdoMUY4LAorCSBwYXJhbWV0ZXIgQklTVF9SRVBBSVJfQUREUl9TVEFSVCA9IDknaDFGQywKKwkgcGFyYW1ldGVyIEJJU1RfUkFEX1dEX0kgICAgICAgICAgPSBCSVNUX0FERFJfV0QsCisJIHBhcmFtZXRlciBCSVNUX1JBRF9XRF9PICAgICAgICAgID0gQklTVF9BRERSX1dEKSAoCisKKyAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgIGxhc3RfYWRkciwgICAvLyAgTGFzdCBhZGRyZXNzIGFjY2VzcworICAgb3V0cHV0ICBsb2dpYyBbQklTVF9BRERSX1dELTE6MF0gYmlzdF9hZGRyLCAgIC8vICBCaXN0IEFkZHJlc3MgIAorICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgc2RvLCAgICAgICAgIC8vICBzY2FuIGRhdGEgb3V0cHV0CisgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICBjbGssICAgICAgICAgLy8gIGNsb2NrIGlucHV0CisgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICByc3RfbiwgICAgICAgLy8gIGFzeW5jaHJvbm91cyByZXNldCAKKyAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgIHJ1biwgICAgICAgICAvLyAgc3RvcCBvciBzdGFydCBzdGF0ZSBtYWNoaW5lIAorICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgdXBkb3duLCAgICAgIC8vICBjb3VudCB1cCBvciBkb3duIAorICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgYmlzdF9zaGlmdCwgIC8vICBzaGlmdCBzY2FuIGlucHV0CisgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICBiaXN0X2xvYWQsICAgLy8gIGxvYWQgc2NhbiBpbnB1dAorICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgc2RpICAgICAgICAgIC8vICBzY2FuIGRhdGEgaW5wdXQgCisKKyk7CisKKworbG9naWMgICBbQklTVF9BRERSX1dELTE6MF0gbmV4dF9hZGRyOyAgLy8gTmV4dCBBZGRyZXNzCitsb2dpYyAgIFtCSVNUX0FERFJfV0QtMTowXSBzdGFydF9hZGRyOyAvLyBBZGRyZXNzIFN0YXJ0IEFkZHJlc3MKK2xvZ2ljICAgW0JJU1RfQUREUl9XRC0xOjBdIGVuZF9hZGRyOyAgIC8vIEFkZHJlc3MgU3RvcCBBZGRyZXNzCisKKworYXNzaWduIGxhc3RfYWRkciA9ICgoKHVwZG93biA9PSAxJ2IxKSYmKGJpc3RfYWRkciA9PSBlbmRfYWRkcikpfHwoKHVwZG93biA9PSAxJ2IwKSYmKGJpc3RfYWRkciA9PSBzdGFydF9hZGRyKSkpPzEnYjE6MSdiMDsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgIEFkZHJlc3MgcmVnaXN0ZXIgCisgICAgIEJhc2ljIEFzc3VtcHRpb246IEFsbHdheXMgY291bnRlciBzdGFydCB3aXRoIHVwY291bnRpbmcKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCithbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJzdF9uKSBiZWdpbgorICBpZighcnN0X24pICAgICAgICAgIGJpc3RfYWRkciA8PSBCSVNUX0FERFJfU1RBUlQgOworICBlbHNlIGlmKGJpc3RfbG9hZCkgIGJpc3RfYWRkciA8PSBzdGFydF9hZGRyOworICBlbHNlICAgICAgICAgICAgICAgIGJpc3RfYWRkciA8PSBuZXh0X2FkZHI7CitlbmQKKworLyogSW5wdXQgY29tYmluYXRpb25hbCBibG9jayAqLworCithbHdheXNfY29tYiAgYmVnaW4KKyAgICBpZihydW4pIGJlZ2luCisgICAgICAgaWYoKGJpc3RfYWRkciA9PSBlbmRfYWRkcikmJih1cGRvd24gPT0gMSdiMSkpICAgIAorCSAgbmV4dF9hZGRyID0gc3RhcnRfYWRkciA7CisgICAgICAgZWxzZSBpZigoYmlzdF9hZGRyID09IHN0YXJ0X2FkZHIpJiYodXBkb3duID09IDEnYjApKSAKKwkgIG5leHRfYWRkciA9IGVuZF9hZGRyIDsKKyAgICAgICBlbHNlIG5leHRfYWRkciA9ICh1cGRvd24pP2Jpc3RfYWRkcisxJ2IxOmJpc3RfYWRkci0xJ2IxOworICAgIGVuZAorICAgIGVsc2UgbmV4dF9hZGRyID0gYmlzdF9hZGRyOworZW5kCisKKworLyogU3RhcnQgcmVnaXN0ZXIgKi8KKworYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByc3RfbikgYmVnaW4KKyAgaWYoIXJzdF9uKSAgICAgICAgICAgc3RhcnRfYWRkciA8PSBCSVNUX0FERFJfU1RBUlQgOworICBlbHNlIGlmKGJpc3Rfc2hpZnQpICBzdGFydF9hZGRyIDw9IHtzZGksIHN0YXJ0X2FkZHJbQklTVF9BRERSX1dELTE6MV19OworZW5kCisKKy8qIFN0YXJ0IHJlZ2lzdGVyICovCithbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJzdF9uKSBiZWdpbgorICBpZighcnN0X24pICAgICAgICAgICBlbmRfYWRkciA8PSBCSVNUX0FERFJfRU5EIDsKKyAgZWxzZSBpZihiaXN0X3NoaWZ0KSAgZW5kX2FkZHIgPD0ge3N0YXJ0X2FkZHJbMF0sIGVuZF9hZGRyW0JJU1RfQUREUl9XRC0xOjFdfTsKK2VuZAorCisKK2Fzc2lnbiBzZG8gICA9IGVuZF9hZGRyWzBdOworCitlbmRtb2R1bGUKKwpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvbWJpc3Qvc3JjL2NvcmUvbWJpc3RfZGF0YV9jbXAuc3YgYi92ZXJpbG9nL3J0bC9tYmlzdC9zcmMvY29yZS9tYmlzdF9kYXRhX2NtcC5zdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWRkMzQzCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvbWJpc3Qvc3JjL2NvcmUvbWJpc3RfZGF0YV9jbXAuc3YKQEAgLTAsMCArMSwxMTYgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxICwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgIAorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IENyZWF0ZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBNQklTVCBEYXRhIENvbXBhcmF0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgbWJpc3RfY3RybCBjb3JlcyBwcm9qZWN0ICAgICAgICAgICAvLy8vCisvLy8vICBodHRwczovL2dpdGh1Yi5jb20vZGluZXNoYW5uYXl5YS9tYmlzdF9jdHJsLmdpdCAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgVGhpcyBibG9jayBpbnRlZ3JhdGUgbWJpc3QgZGF0YSBjb21wYXJhdG9yICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUbyBEbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIG5vdGhpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBBdXRob3Iocyk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgLSBEaW5lc2ggQW5uYXl5YSwgZGluZXNoYUBvcGVuY29yZXMub3JnICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBSZXZpc2lvbiA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIDAuMCAtIDExdGggT2N0IDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIEluaXRpYWwgaW50ZWdyYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCitgaW5jbHVkZSAibWJpc3RfZGVmLnN2aCIKKworCittb2R1bGUgbWJpc3RfZGF0YV9jbXAKKyAgICAgIyggIHBhcmFtZXRlciBCSVNUX0FERFJfV0QgICAgICAgICAgID0gOSwKKwkgcGFyYW1ldGVyIEJJU1RfREFUQV9XRCAgICAgICAgICAgPSAzMiwKKwkgcGFyYW1ldGVyIEJJU1RfQUREUl9TVEFSVCAgICAgICAgPSA5J2gwMDAsCisJIHBhcmFtZXRlciBCSVNUX0FERFJfRU5EICAgICAgICAgID0gOSdoMUY4LAorCSBwYXJhbWV0ZXIgQklTVF9SRVBBSVJfQUREUl9TVEFSVCA9IDknaDFGQywKKwkgcGFyYW1ldGVyIEJJU1RfUkFEX1dEX0kgICAgICAgICAgPSBCSVNUX0FERFJfV0QsCisJIHBhcmFtZXRlciBCSVNUX1JBRF9XRF9PICAgICAgICAgID0gQklTVF9BRERSX1dEKSAoCisKKyAgICAgICAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgIGVycm9yLAorCSAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb3JyZWN0LAorCSAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICBjb3JyZWN0LAorCSAgb3V0cHV0ICBsb2dpYyBbQklTVF9BRERSX1dELTE6MF0gICBlcnJvcl9hZGRyLAorICAgICAgICAgIG91dHB1dCAgbG9naWMgIFszOjBdICAgICAgICAgICAgICAgZXJyb3JfY250LAorICAgICAgICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgY2xrLAorICAgICAgICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgcnN0X24sCisgICAgICAgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICBjb21wYXJlLCAKKwkgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgYWRkcl9pbmNfcGhhc2UsCisJICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgIHJlYWRfaW52ZXJ0LAorICAgICAgICAgIGlucHV0ICAgbG9naWMgIFtCSVNUX0RBVEFfV0QtMTowXSAgY29tcF9kYXRhLAorICAgICAgICAgIGlucHV0ICAgbG9naWMgIFtCSVNUX0RBVEFfV0QtMTowXSAgcnhkX2RhdGEsCisJICBpbnB1dCAgIGxvZ2ljIFtCSVNUX0FERFJfV0QtMTowXSAgIGFkZHIKKwkgICAgIAorCSk7CisKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgIG1hc2tfY29tcGFyZTsKK2xvZ2ljICBbQklTVF9EQVRBX1dELTE6MF0gIGV4cF9kYXRhOworbG9naWMgICAgICAgICAgICAgICAgICAgICAgY29tcF9zdGF0dXM7CisKK2Fzc2lnbiBleHBfZGF0YSA9IChyZWFkX2ludmVydCkgPyB+Y29tcF9kYXRhOiBjb21wX2RhdGE7CisgIAorLyogQ29tcGFyaXNvbiByZWdpc3RlciAqLworCithbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJzdF9uKSBiZWdpbgorICAgaWYoIXJzdF9uKSAgICAgICAgIGJlZ2luCisgICAgICBjb21wX3N0YXR1cyA8PSAxJ2IwOworICAgICAgZXJyb3JfYWRkciAgPD0gJ2IwOworICAgZW5kIGVsc2UgaWYoY29tcGFyZSAmJiAhbWFza19jb21wYXJlKSAgIGJlZ2luCisgICAgICBjb21wX3N0YXR1cyA8PSB8KGV4cF9kYXRhIF4gcnhkX2RhdGEpOworICAgICAgZXJyb3JfYWRkciAgPD0gYWRkcjsKKyAgIGVuZCBlbHNlIGJlZ2luIAorICAgICBjb21wX3N0YXR1cyA8PSAxJ2IwOworICAgZW5kCitlbmQKKworLy8gRHVlIHRvIGN5Y2xlIGRpZmVyZW5jZSBiZXR3ZWVuIGNvbXBhcmUgYW5kIHdyaXRlIG9wcGVyYXRpb24KKy8vIFRoZXJlIGlzIGNoYW5jZSB0d28gZXJyb3IgcmVwb3J0ZWQgZm9yIHNhbWUgYWRkcmVzcworLy8gVG8gYXZvaWQgdGhpcywgb25jZSBlcnJvciBpcyBkZXRlY3RlZCwgY29tcGFyaXNpb24gaXMgbWFza2VkCisvLyB1bml0IHRoZSBuZXh0IGFkZHJlc3MgcGhhc2UKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcnN0X24pIGJlZ2luCisgICBpZighcnN0X24pIGJlZ2luICAgICAgICAgICAgIAorICAgICAgZXJyb3JfY250ICAgIDw9ICdiMDsKKyAgICAgIGNvcnJlY3QgICAgICA8PSdiMDsKKyAgICAgIG1hc2tfY29tcGFyZSA8PSAnYjA7CisgICAgICBlcnJvciAgICAgICAgPD0gJzA7CisgICBlbmQgZWxzZSBpZihtYXNrX2NvbXBhcmUgJiYgYWRkcl9pbmNfcGhhc2UpIGJlZ2luIAorICAgICAgbWFza19jb21wYXJlIDw9IDEnYjA7CisgICBlbmQgZWxzZSBpZihjb21wX3N0YXR1cyAmJiAoZXJyb3JfY250IDwgQklTVF9FUlJfTElNSVQpICkgICBiZWdpbgorICAgICAgZXJyb3JfY250ICAgIDw9IGVycm9yX2NudCsxOworICAgICAgbWFza19jb21wYXJlIDw9IDEnYjE7CisgICAgICBjb3JyZWN0ICAgICAgPD0nYjE7CisgICBlbmQgZWxzZSBpZihjb21wX3N0YXR1cyAmJiAoZXJyb3JfY250ID09IEJJU1RfRVJSX0xJTUlUKSApICAgYmVnaW4KKyAgICAgIGVycm9yICAgICAgICA8PSAnMTsKKyAgIGVuZCAKK2VuZAorCithc3NpZ24gZXJyb3JfY29ycmVjdCA9IChlcnJvcl9jbnQgPCBCSVNUX0VSUl9MSU1JVCkgPyBjb21wX3N0YXR1cyA6IDEnYjA7CisKK2VuZG1vZHVsZQorCisKKworCisKKwpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvbWJpc3Qvc3JjL2NvcmUvbWJpc3RfZnNtLnN2IGIvdmVyaWxvZy9ydGwvbWJpc3Qvc3JjL2NvcmUvbWJpc3RfZnNtLnN2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2NzJlZTcKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC9tYmlzdC9zcmMvY29yZS9tYmlzdF9mc20uc3YKQEAgLTAsMCArMSwxNDEgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxICwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgIAorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IENyZWF0ZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBNQklTVCBNYWluIGNvbnRyb2wgRlNNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgbWJpc3RfY3RybCBjb3JlcyBwcm9qZWN0ICAgICAgICAgICAvLy8vCisvLy8vICBodHRwczovL2dpdGh1Yi5jb20vZGluZXNoYW5uYXl5YS9tYmlzdF9jdHJsLmdpdCAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBNQklTVCBNYWluIGNvbnRyb2wgRlNNIHRvIGNvbnRyb2wgQ29tbWFuZCwgQWRkcmVzcywgV3JpdGUgICAvLy8vCisvLy8vICAgYW5kIFJlYWQgY29tcGFyZSBwaGFzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUbyBEbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIG5vdGhpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBBdXRob3Iocyk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgLSBEaW5lc2ggQW5uYXl5YSwgZGluZXNoYUBvcGVuY29yZXMub3JnICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBSZXZpc2lvbiA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIDAuMCAtIDExdGggT2N0IDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIEluaXRpYWwgaW50ZWdyYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCittb2R1bGUgbWJpc3RfZnNtIAorICAgICAjKCAgcGFyYW1ldGVyIEJJU1RfQUREUl9XRCAgICAgICAgICAgPSA5LAorCSBwYXJhbWV0ZXIgQklTVF9EQVRBX1dEICAgICAgICAgICA9IDMyLAorCSBwYXJhbWV0ZXIgQklTVF9BRERSX1NUQVJUICAgICAgICA9IDknaDAwMCwKKwkgcGFyYW1ldGVyIEJJU1RfQUREUl9FTkQgICAgICAgICAgPSA5J2gxRjgsCisJIHBhcmFtZXRlciBCSVNUX1JFUEFJUl9BRERSX1NUQVJUID0gOSdoMUZDLAorCSBwYXJhbWV0ZXIgQklTVF9SQURfV0RfSSAgICAgICAgICA9IEJJU1RfQUREUl9XRCwKKwkgcGFyYW1ldGVyIEJJU1RfUkFEX1dEX08gICAgICAgICAgPSBCSVNUX0FERFJfV0QpICgKKworCW91dHB1dCBsb2dpYyBjbWRfcGhhc2UsICAgIC8vIENvbW1hbmQgUGhhc2UKKwlvdXRwdXQgbG9naWMgY21wX3BoYXNlLCAgICAvLyBDb21wYXJlIFBoYXNlCisJb3V0cHV0IGxvZ2ljIHJ1bl9vcCwgICAgICAgLy8gTW92ZSB0byBOZXh0IE9wZXJhdGlvbgorCW91dHB1dCBsb2dpYyBydW5fYWRkciwgICAgIC8vIE1vdmUgdG8gTmV4dCBBZGRyZXNzCisJb3V0cHV0IGxvZ2ljIHJ1bl9zdGksICAgICAgLy8gTW92ZSB0byBOZXh0IFN0aW11bHVzCisJb3V0cHV0IGxvZ2ljIHJ1bl9wYXQsICAgICAgLy8gTW92ZSB0byBuZXh0IHBhdHRlcm4KKwlvdXRwdXQgbG9naWMgYmlzdF9kb25lLCAgICAvLyBCaXN0IFRlc3QgRG9uZQorCisKKwlpbnB1dCBsb2dpYyAgY2xrLCAgICAgICAgICAvLyBDbG9jaworCWlucHV0IGxvZ2ljICByc3RfbiwgICAgICAgIC8vIFJlc2V0CisJaW5wdXQgbG9naWMgIGJpc3RfcnVuLCAgICAgLy8gQmlzdCBSdW4KKwlpbnB1dCBsb2dpYyAgYmlzdF9lcnJvciwgICAvLyBCaXN0IEVycm9yCisJaW5wdXQgbG9naWMgIG9wX3JldmVyc2UsICAgLy8gQWRkcmVzcyBSZXZlcnNlIGluIE5leHQgQ3ljbGUKKwlpbnB1dCBsb2dpYyAgbGFzdF9vcCwgICAgICAvLyBMYXN0IE9wZXJhdGlvbgorCWlucHV0IGxvZ2ljICBsYXN0X2FkZHIsICAgIC8vIExhc3QgQWRkcmVzcworCWlucHV0IGxvZ2ljICBsYXN0X3N0aSwgICAgIC8vIExhc3QgU3RpbXVsdXMKKwlpbnB1dCBsb2dpYyAgbGFzdF9wYXQgICAgICAvLyBMYXN0IFBhdHRlcm4KKworCispOworCitwYXJhbWV0ZXIgRlNNX1BIQVNFMSA9IDInYjAwOworcGFyYW1ldGVyIEZTTV9QSEFTRTIgPSAyJ2IwMTsKK3BhcmFtZXRlciBGU01fRVhJVCAgID0gMidiMTA7CisKK2xvZ2ljIFsxOjBdICBzdGF0ZTsKKworCisKK2Fsd2F5cyBAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcnN0X24pCitiZWdpbgorICAgaWYoIXJzdF9uKSBiZWdpbgorICAgICAgY21kX3BoYXNlICAgICAgIDw9IDA7CisgICAgICBjbXBfcGhhc2UgICAgICAgPD0gMDsKKyAgICAgIHJ1bl9vcCAgICAgICAgIDw9IDA7CisgICAgICBydW5fYWRkciAgICAgICA8PSAwOworICAgICAgcnVuX3N0aSAgICAgICAgPD0gMDsKKyAgICAgIHJ1bl9wYXQgICAgICAgIDw9IDA7CisgICAgICBiaXN0X2RvbmUgICAgICA8PSAwOworICAgICAgc3RhdGUgICAgICAgICAgPD0gRlNNX1BIQVNFMTsKKyAgIGVuZCBlbHNlIGlmKGJpc3RfcnVuKSBiZWdpbgorICAgICAgY2FzZShzdGF0ZSkKKyAgICAgICAgIEZTTV9QSEFTRTEgIDogIAorICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIGNtZF9waGFzZSA8PSAxOworICAgICAgICAgICAgY21wX3BoYXNlIDw9IDA7CisgICAgICAgICAgICBydW5fb3AgICAgPD0gMDsKKyAgICAgICAgICAgIHJ1bl9hZGRyICA8PSAwOworICAgICAgICAgICAgcnVuX3N0aSAgIDw9IDA7CisgICAgICAgICAgICBydW5fcGF0ICAgPD0gMDsKKyAgICAgICAgICAgIHN0YXRlICAgICA8PSBGU01fUEhBU0UyOworICAgICAgICAgIGVuZAorICAgICAgICAgRlNNX1BIQVNFMiAgOiAgCisgICAgICAgICBiZWdpbgorICAgICAgICAgICAgaWYoKGxhc3RfYWRkciAmJiBsYXN0X29wICYmIGxhc3Rfc3RpICYmIGxhc3RfcGF0KSB8fCBiaXN0X2Vycm9yKSAgYmVnaW4KKyAgICAgICAgICAgICAgIGNtZF9waGFzZSAgPD0gMDsKKyAgICAgICAgICAgICAgIGNtcF9waGFzZSAgPD0gMDsKKyAgICAgICAgICAgICAgIHJ1bl9vcCAgICAgPD0gMDsKKyAgICAgICAgICAgICAgIHJ1bl9hZGRyICAgPD0gMDsKKyAgICAgICAgICAgICAgIHJ1bl9zdGkgICAgPD0gMDsKKyAgICAgICAgICAgICAgIHJ1bl9wYXQgICAgPD0gMDsKKyAgICAgICAgICAgICAgIHN0YXRlICAgICAgPD0gRlNNX0VYSVQ7CisgICAgICAgICAgICBlbmQgZWxzZSBiZWdpbgorICAgICAgICAgICAgICAgY21kX3BoYXNlICAgPD0gMDsKKyAgICAgICAgICAgICAgIGNtcF9waGFzZSAgIDw9IDE7CisgICAgICAgICAgICAgICBydW5fb3AgICAgICA8PSAxOworICAgICAgICAgICAgICAgaWYobGFzdF9vcCAmJiAhKGxhc3RfYWRkciAmJiBvcF9yZXZlcnNlKSkKKyAgICAgICAgICAgICAgICAgIHJ1bl9hZGRyIDw9IDE7CisgICAgICAgICAgICAgICBpZihsYXN0X2FkZHIgJiYgbGFzdF9vcCkgCisgICAgICAgICAgICAgICAgICBydW5fc3RpICA8PSAxOworICAgICAgICAgICAgICAgaWYobGFzdF9hZGRyICYmIGxhc3Rfb3AgJiYgbGFzdF9zdGkpIAorICAgICAgICAgICAgICAgICAgcnVuX3BhdCAgPD0gMTsKKyAgICAgICAgICAgICAgIHN0YXRlICAgIDw9IEZTTV9QSEFTRTE7CisJICAgIGVuZAorICAgICAgICAgZW5kCisJIEZTTV9FWElUOiBiaXN0X2RvbmUgIDw9IDE7CisJIGRlZmF1bHQ6ICBzdGF0ZSAgICAgIDw9IEZTTV9QSEFTRTE7CisgICAgICBlbmRjYXNlCisgICBlbmQgZWxzZSBiZWdpbgorICAgICAgY21kX3BoYXNlIDw9IDA7CisgICAgICBjbXBfcGhhc2UgPD0gMDsKKyAgICAgIHJ1bl9vcCAgICA8PSAwOworICAgICAgcnVuX2FkZHIgIDw9IDA7CisgICAgICBydW5fc3RpICAgPD0gMDsgCisgICAgICBydW5fcGF0ICAgPD0gMDsKKyAgICAgIHN0YXRlICAgICA8PSBGU01fUEhBU0UxOworICAgZW5kCitlbmQKKworCisKK2VuZG1vZHVsZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvbWJpc3Qvc3JjL2NvcmUvbWJpc3RfbWVtX3dyYXBwZXIuc3YgYi92ZXJpbG9nL3J0bC9tYmlzdC9zcmMvY29yZS9tYmlzdF9tZW1fd3JhcHBlci5zdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjMxNjcxCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvbWJpc3Qvc3JjL2NvcmUvbWJpc3RfbWVtX3dyYXBwZXIuc3YKQEAgLTAsMCArMSwxMDIgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSAsIERpbmVzaCBBbm5heXlhICAgICAgICAgICAgICAgICAgICAgICAgICAKKy8vIAorLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBDcmVhdGVkIGJ5IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgTWVtb3J5IHdyYXBwZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIG1iaXN0X2N0cmwgIHByb2plY3QgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgaHR0cHM6Ly9naXRodWIuY29tL2RpbmVzaGFubmF5eWEvbWJpc3RfY3RybC5naXQgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgIFRoaXMgYmxvY2sgZG9lcyB3aXNoYm9uZSB0byBTUkFNIHNpZ25hbCBtYXBwaW5nICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVG8gRG86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICBub3RoaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgQXV0aG9yKHMpOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgIC0gRGluZXNoIEFubmF5eWEsIGRpbmVzaGFAb3BlbmNvcmVzLm9yZyAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgUmV2aXNpb24gOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAwLjEgLSAxOCBOb3YgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICBpbml0aWFsIHZlcnNpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBDb3B5cmlnaHQgKEMpIDIwMDAgQXV0aG9ycyBhbmQgT1BFTkNPUkVTLk9SRyAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBmaWxlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCB3aXRob3V0ICAgICAgICAgLy8vLworLy8vLyByZXN0cmljdGlvbiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgICAgLy8vLworLy8vLyByZW1vdmVkIGZyb20gdGhlIGZpbGUgYW5kIHRoYXQgYW55IGRlcml2YXRpdmUgd29yayBjb250YWlucyAgLy8vLworLy8vLyB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGFzc29jaWF0ZWQgZGlzY2xhaW1lci4gLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0ICAgLy8vLworLy8vLyBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgLy8vLworLy8vLyBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgLy8vLworLy8vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55ICAgLy8vLworLy8vLyBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgICAgICAgLy8vLworLy8vLyB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkICAgLy8vLworLy8vLyB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSICAgICAgLy8vLworLy8vLyBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgLy8vLworLy8vLyBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAgLy8vLworLy8vLyBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgc291cmNlOyBpZiBub3QsIGRvd25sb2FkIGl0ICAgLy8vLworLy8vLyBmcm9tIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9sZ3BsLnNodG1sICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworbW9kdWxlIG1iaXN0X21lbV93cmFwcGVyICMoCisJcGFyYW1ldGVyIEJJU1RfTk9fU1JBTT00LAorCXBhcmFtZXRlciBCSVNUX0FERFJfV0Q9MTAsCisJcGFyYW1ldGVyIEJJU1RfREFUQV9XRD0zMikgKAorCWlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgIHJzdF9uICAgICAgICAgICAsCisgICAgICAgICAgLy8gV0IgSS9GCisJaW5wdXQgICBsb2dpYyBbKEJJU1RfTk9fU1JBTSsxKS8yLTE6MF0gc3JhbV9pZCAgICAgICAgICwKKyAgICAgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgd2JfY2xrX2kgICAgICAgICwgIC8vIFN5c3RlbSBjbG9jaworICAgICAgICBpbnB1dCAgIGxvZ2ljIFsoQklTVF9OT19TUkFNKzEpLzItMTowXSBtZW1fY3MgICAgICAgICAgLCAgLy8gQ2hpcCBTZWxlY3QKKyAgICAgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtX3JlcSAgICAgICAgICwgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgICAgIGlucHV0ICAgbG9naWMgW0JJU1RfQUREUl9XRC0xOjBdICAgICAgIG1lbV9hZGRyICAgICAgICAsICAvLyBhZGRyZXNzCisgICAgICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbV93ZSAgICAgICAgICAsICAvLyB3cml0ZQorICAgICAgICBpbnB1dCAgIGxvZ2ljIFtCSVNUX0RBVEFfV0QtMTowXSAgICAgICBtZW1fd2RhdGEgICAgICAgLCAgLy8gZGF0YSBvdXRwdXQKKyAgICAgICAgaW5wdXQgICBsb2dpYyBbQklTVF9EQVRBX1dELzgtMTowXSAgICAgbWVtX3dtYXNrICAgICAgICwgIC8vIGJ5dGUgZW5hYmxlCisgICAgICAgIG91dHB1dCAgbG9naWMgW0JJU1RfREFUQV9XRC0xOjBdICAgICAgIG1lbV9yZGF0YSAgICAgICAsICAvLyBkYXRhIGlucHV0CisgICAgICAvLyBNRU0gUE9SVCAKKyAgICAgICAgb3V0cHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY19jbGsgICAgICAgICwKKyAgICAgICAgb3V0cHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY19jZW4gICAgICAgICwKKyAgICAgICAgb3V0cHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY193ZWIgICAgICAgICwKKyAgICAgICAgb3V0cHV0ICAgbG9naWMgW0JJU1RfREFUQV9XRC84LTE6MF0gICAgZnVuY19tYXNrICAgICAgICwKKyAgICAgICAgb3V0cHV0ICAgbG9naWMgIFtCSVNUX0FERFJfV0QtMTowXSAgICAgZnVuY19hZGRyICAgICAgICwKKyAgICAgICAgaW5wdXQgICAgbG9naWMgIFtCSVNUX0RBVEFfV0QtMTowXSAgICAgZnVuY19kb3V0ICAgICAgICwKKyAgICAgICAgb3V0cHV0ICAgbG9naWMgIFtCSVNUX0RBVEFfV0QtMTowXSAgICAgZnVuY19kaW4gICAgICAgIAorCispOworCisKKy8vIE1lbW9yeSBXcml0ZSBQT1JUCithc3NpZ24gZnVuY19jbGsgICAgPSB3Yl9jbGtfaTsKK2Fzc2lnbiBmdW5jX2NlbiAgICA9IChtZW1fY3MgID09IHNyYW1faWQpID8gIW1lbV9yZXEgOiAxJ2IxOworYXNzaWduIGZ1bmNfd2ViICAgID0gKG1lbV9jcyAgPT0gc3JhbV9pZCkgPyAhbWVtX3dlICAgOiAxJ2IxOworYXNzaWduIGZ1bmNfbWFzayAgID0gbWVtX3dtYXNrOworYXNzaWduIGZ1bmNfYWRkciAgID0gbWVtX2FkZHI7Cithc3NpZ24gZnVuY19kaW4gICAgPSBtZW1fd2RhdGE7Cithc3NpZ24gbWVtX3JkYXRhICAgPSBmdW5jX2RvdXQ7CisKKworCisKK2VuZG1vZHVsZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvbWJpc3Qvc3JjL2NvcmUvbWJpc3RfbXV4LnN2IGIvdmVyaWxvZy9ydGwvbWJpc3Qvc3JjL2NvcmUvbWJpc3RfbXV4LnN2Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjAzNDFiMTYKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC9tYmlzdC9zcmMvY29yZS9tYmlzdF9tdXguc3YKQEAgLTAsMCArMSwxNTQgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSAsIERpbmVzaCBBbm5heXlhICAgICAgICAgICAgICAgICAgICAgICAgICAKKy8vIAorLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBDcmVhdGVkIGJ5IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgTUJJU1QgYW5kIE1FTU9SWSBNdXggQ29udHJvbCBTZWxlY3Rpb24gICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIG1iaXN0X2N0cmwgY29yZXMgcHJvamVjdCAgICAgICAgICAgLy8vLworLy8vLyAgaHR0cHM6Ly9naXRodWIuY29tL2RpbmVzaGFubmF5eWEvbWJpc3RfY3RybC5naXQgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgIFRoaXMgYmxvY2sgaW50ZWdyYXRlIE1CSVNUIGFuZCBNZW1vcnkgY29udHJvbCBzZWxlY3Rpb24gLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVG8gRG86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICBub3RoaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgQXV0aG9yKHMpOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgIC0gRGluZXNoIEFubmF5eWEsIGRpbmVzaGFAb3BlbmNvcmVzLm9yZyAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgUmV2aXNpb24gOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAwLjAgLSAxMXRoIE9jdCAyMDIxLCBEaW5lc2ggQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICBJbml0aWFsIGludGVncmF0aW9uIAorLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitgaW5jbHVkZSAibWJpc3RfZGVmLnN2aCIKK21vZHVsZSAgIG1iaXN0X211eAorICAgICAjKCAgcGFyYW1ldGVyIEJJU1RfQUREUl9XRCAgICAgICAgICAgPSA5LAorCSBwYXJhbWV0ZXIgQklTVF9EQVRBX1dEICAgICAgICAgICA9IDMyLAorCSBwYXJhbWV0ZXIgQklTVF9BRERSX1NUQVJUICAgICAgICA9IDknaDAwMCwKKwkgcGFyYW1ldGVyIEJJU1RfQUREUl9FTkQgICAgICAgICAgPSA5J2gxRjgsCisJIHBhcmFtZXRlciBCSVNUX1JFUEFJUl9BRERSX1NUQVJUID0gOSdoMUZDLAorCSBwYXJhbWV0ZXIgQklTVF9SQURfV0RfSSAgICAgICAgICA9IEJJU1RfQUREUl9XRCwKKwkgcGFyYW1ldGVyIEJJU1RfUkFEX1dEX08gICAgICAgICAgPSBCSVNUX0FERFJfV0QpICgKKworICAgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICBzY2FuX21vZGUsCisKKyAgICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgcnN0X24sCisgICAgICAvLyBNQklTVCBDVFJMIFNJR05BTAorICAgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICBiaXN0X2VuLAorICAgICAgaW5wdXQgICBsb2dpYyAgW0JJU1RfQUREUl9XRC0xOjBdICBiaXN0X2FkZHIsCisgICAgICBpbnB1dCAgIGxvZ2ljICBbQklTVF9EQVRBX1dELTE6MF0gIGJpc3Rfd2RhdGEsCisgICAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgIGJpc3RfY2xrLAorICAgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICBiaXN0X3dyLAorICAgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICBiaXN0X3JkLAorICAgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICBiaXN0X2Vycm9yLAorICAgICAgaW5wdXQgICBsb2dpYyAgW0JJU1RfQUREUl9XRC0xOjBdICBiaXN0X2Vycm9yX2FkZHIsCisgICAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgIGJpc3RfY29ycmVjdCwKKyAgICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgYmlzdF9zZGksCisgICAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgIGJpc3RfbG9hZCwKKyAgICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgYmlzdF9zaGlmdCwKKyAgICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgYmlzdF9zZG8sCisKKyAgICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgZnVuY19jbGssCisgICAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgIGZ1bmNfY2VuLAorICAgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICBmdW5jX3dlYiwKKyAgICAgIGlucHV0ICAgbG9naWMgW0JJU1RfREFUQV9XRC84LTE6MF0gZnVuY19tYXNrLAorICAgICAgaW5wdXQgICBsb2dpYyAgW0JJU1RfQUREUl9XRC0xOjBdICBmdW5jX2FkZHIsCisgICAgICBpbnB1dCAgIGxvZ2ljICBbQklTVF9EQVRBX1dELTE6MF0gIGZ1bmNfZGluLAorICAgICAgb3V0cHV0ICBsb2dpYyAgW0JJU1RfREFUQV9XRC0xOjBdICBmdW5jX2RvdXQsCisKKworICAgICAvLyB0b3dhcmRzIG1lbW9yeQorCisgICAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgIG1lbV9jbGssCisgICAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgIG1lbV9jZW4sCisgICAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgIG1lbV93ZWIsCisgICAgICBvdXRwdXQgbG9naWMgW0JJU1RfREFUQV9XRC84LTE6MF0gIG1lbV9tYXNrLAorICAgICAgb3V0cHV0IGxvZ2ljICAgW0JJU1RfQUREUl9XRC0xOjBdICBtZW1fYWRkciwKKyAgICAgIG91dHB1dCBsb2dpYyAgIFtCSVNUX0RBVEFfV0QtMTowXSAgbWVtX2RpbiwKKyAgICAgIGlucHV0ICBsb2dpYyAgIFtCSVNUX0RBVEFfV0QtMTowXSAgbWVtX2RvdXQKKyAgICApOworCisKK3BhcmFtZXRlciBCSVNUX01BU0tfV0QgPSBCSVNUX0RBVEFfV0QvODsKKword2lyZSAgIFtCSVNUX0FERFJfV0QtMTowXSAgICAgIGFkZHI7CisKKworCithc3NpZ24gYWRkciAgID0gKGJpc3RfZW4pID8gYmlzdF9hZGRyICAgOiBmdW5jX2FkZHI7CisKK2Fzc2lnbiBtZW1fY2VuICAgID0gKGJpc3RfZW4pID8gIShiaXN0X3JkIHwgYmlzdF93cikgICA6IGZ1bmNfY2VuOworYXNzaWduIG1lbV93ZWIgICAgPSAoYmlzdF9lbikgPyAhYmlzdF93ciAgIDogZnVuY193ZWI7Cithc3NpZ24gbWVtX21hc2sgICA9IChiaXN0X2VuKSA/IHt7QklTVF9NQVNLX1dEfXsxJ2IxfX0gOiBmdW5jX21hc2s7CisKKy8vYXNzaWduIG1lbV9jbGtfYSAgICA9IChiaXN0X2VuKSA/IGJpc3RfY2xrICAgOiBmdW5jX2Nsa19hOworLy9hc3NpZ24gbWVtX2Nsa19iICAgID0gKGJpc3RfZW4pID8gYmlzdF9jbGsgICA6IGZ1bmNfY2xrX2I7CisKK2N0ZWNoX211eDJ4MSB1X21lbV9jbGtfc2VsICguQTAgKGZ1bmNfY2xrKSwuQTEgKGJpc3RfY2xrKSwuUyAgKGJpc3RfZW4pLCAgICAgLlggIChtZW1fY2xrKSk7CisKKy8vY3RlY2hfY2xrX2J1ZiB1X21lbV9jbGsgKC5BIChtZW1fY2xrX2N0cyksIC4gWChtZW1fY2xrKSk7CisKK2Fzc2lnbiBtZW1fZGluICAgID0gKGJpc3RfZW4pID8gYmlzdF93ZGF0YSAgIDogZnVuY19kaW47CisKKworCisvLyBEdXJpbmcgc2NhbiwgU1JBTSBkYXRhIGlzIHVua25vd24sIGZlZWQgZGF0YSBpbiBiYWNrIHRvIGF2b2lkIHVua25vdworLy8gcHJvcGFnYXRpb24KK2Fzc2lnbiBmdW5jX2RvdXQgICA9ICAoc2Nhbl9tb2RlKSA/ICBtZW1fZGluIDogbWVtX2RvdXQ7CisKK21iaXN0X3JlcGFpcl9hZGRyIAorICAgICAgIyguQklTVF9BRERSX1dEICAgICAgICAgICAoQklTVF9BRERSX1dEKSwKKwkuQklTVF9EQVRBX1dEICAgICAgICAgICAoQklTVF9EQVRBX1dEKSwKKwkuQklTVF9BRERSX1NUQVJUICAgICAgICAoQklTVF9BRERSX1NUQVJUKSwKKwkuQklTVF9BRERSX0VORCAgICAgICAgICAoQklTVF9BRERSX0VORCksCisJLkJJU1RfUkVQQUlSX0FERFJfU1RBUlQgKEJJU1RfUkVQQUlSX0FERFJfU1RBUlQpLAorCS5CSVNUX1JBRF9XRF9JICAgICAgICAgIChCSVNUX1JBRF9XRF9JKSwKKwkuQklTVF9SQURfV0RfTyAgICAgICAgICAoQklTVF9SQURfV0RfTykpIAorICAgICB1X3JlcGFpcigKKyAgICAuQWRkcmVzc091dCAgICAobWVtX2FkZHIgICAgICAgICApLAorICAgIC5Db3JyZWN0ICAgICAgIChiaXN0X2NvcnJlY3QgICAgICksCisgICAgLnNkbyAgICAgICAgICAgKGJpc3Rfc2RvICAgICAgICAgKSwKKworICAgIC5BZGRyZXNzSW4gICAgIChhZGRyICAgICAgICAgICAgICksCisgICAgLmNsayAgICAgICAgICAgKG1lbV9jbGsgICAgICAgICAgKSwKKyAgICAucnN0X24gICAgICAgICAocnN0X24gICAgICAgICAgICApLAorICAgIC5FcnJvciAgICAgICAgIChiaXN0X2Vycm9yICAgICAgICksCisgICAgLkVycm9yQWRkciAgICAgKGJpc3RfZXJyb3JfYWRkciAgKSwKKyAgICAuYmlzdF9sb2FkICAgICAoYmlzdF9sb2FkICAgICAgICksCisgICAgLmJpc3Rfc2hpZnQgICAgKGJpc3Rfc2hpZnQgICAgICAgKSwKKyAgICAuc2RpICAgICAgICAgICAoYmlzdF9zZGkgICAgICAgICApCispOworCisKKworCisKK2VuZG1vZHVsZQorCisKKworCisKKworCisKKworCisKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL21iaXN0L3NyYy9jb3JlL21iaXN0X29wX3NlbC5zdiBiL3Zlcmlsb2cvcnRsL21iaXN0L3NyYy9jb3JlL21iaXN0X29wX3NlbC5zdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTk1YjhlCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvbWJpc3Qvc3JjL2NvcmUvbWJpc3Rfb3Bfc2VsLnN2CkBAIC0wLDAgKzEsMTMyIEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSAsIERpbmVzaCBBbm5heXlhICAgICAgICAgICAgICAgICAgICAgICAgICAKKy8vIAorLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBDcmVhdGVkIGJ5IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgTUJJU1QgT3BlcmF0aW9uIFNlbGVjdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIG1iaXN0X2N0cmwgY29yZXMgcHJvamVjdCAgICAgICAgICAgLy8vLworLy8vLyAgaHR0cHM6Ly9naXRodWIuY29tL2RpbmVzaGFubmF5eWEvbWJpc3RfY3RybC5naXQgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgIFRoaXMgYmxvY2sgaW50ZWdyYXRlIE9wZXJhdGlvbiBTZWxlY3Rpb24gICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVG8gRG86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICBub3RoaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgQXV0aG9yKHMpOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgIC0gRGluZXNoIEFubmF5eWEsIGRpbmVzaGFAb3BlbmNvcmVzLm9yZyAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgUmV2aXNpb24gOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAwLjAgLSAxMXRoIE9jdCAyMDIxLCBEaW5lc2ggQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICBJbml0aWFsIGludGVncmF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisKK2BpbmNsdWRlICJtYmlzdF9kZWYuc3ZoIgorLy8gYmlzdCBzdGltdWx1cyBzZWxlY3Rpb24KKworbW9kdWxlIG1iaXN0X29wX3NlbCAKKyAgICAgIyggIHBhcmFtZXRlciBCSVNUX0FERFJfV0QgICAgICAgICAgID0gOSwKKwkgcGFyYW1ldGVyIEJJU1RfREFUQV9XRCAgICAgICAgICAgPSAzMiwKKwkgcGFyYW1ldGVyIEJJU1RfQUREUl9TVEFSVCAgICAgICAgPSA5J2gwMDAsCisJIHBhcmFtZXRlciBCSVNUX0FERFJfRU5EICAgICAgICAgID0gOSdoMUY4LAorCSBwYXJhbWV0ZXIgQklTVF9SRVBBSVJfQUREUl9TVEFSVCA9IDknaDFGQywKKwkgcGFyYW1ldGVyIEJJU1RfUkFEX1dEX0kgICAgICAgICAgPSBCSVNUX0FERFJfV0QsCisJIHBhcmFtZXRlciBCSVNUX1JBRF9XRF9PICAgICAgICAgID0gQklTVF9BRERSX1dEKSAoCisKKyAgICAgICAgb3V0cHV0IGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgb3BfcmVhZCAgICAgICAsICAvLyBPcGVydGlvbiBSZWFkCisJb3V0cHV0IGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgb3Bfd3JpdGUgICAgICAsICAvLyBPcGVyYXRpb24gV3JpdGUKKwlvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICBvcF9pbnZlcnQgICAgICwgIC8vIE9wZXJ0YWlvbiBEYXRhIEludmVydAorCW91dHB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgIG9wX3VwZG93biAgICAgLCAgLy8gT3BlcmF0aW9uIEFkZHJlc3MgVXAgRG93bgorCW91dHB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgIG9wX3JldmVyc2UgICAgLCAgLy8gT3BlcmF0aW9uIFJldmVyc2UKKwlvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICBvcF9yZXBlYXRmbGFnICwgIC8vIE9wZXJhdGlvbiBSZXBlYXQgZmxhZworCW91dHB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgIHNkbyAgICAgICAgICAgLCAgLy8gU2NhbiBEYXRhIE91dAorCW91dHB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgIGxhc3Rfb3AgICAgICAgLCAgLy8gbGFzdCBvcGVyYXRpb24KKworCWlucHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgIGNsayAgICAgICAgICAgLCAgLy8gQ2xvY2sKKwlpbnB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICByc3RfbiAgICAgICAgICwgIC8vIFJlc2V0IAorCWlucHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgIHNjYW5fc2hpZnQgICAgLCAgLy8gU2NhbiBTaGlmdAorCWlucHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgIHNkaSAgICAgICAgICAgLCAgLy8gU2NhbiBkYXRhIGluCisJaW5wdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgcmVfaW5pdCAgICAgICAsICAvLyBSZS1pbml0IHdoZW4gdGhlcmUgaXMgZXJyb3IgY29ycmVjdGlvbgorCWlucHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgIHJ1biAgICAgICAgICAgLCAgLy8gUnVuIAorICAgICAgICBpbnB1dCAgbG9naWMgIFtCSVNUX1NUSV9XRC0xOjBdICAgICBzdGltdWx1cyAgICAgCisKKyk7CisKKworbG9naWMgW0JJU1RfT1BfU0laRS0xOjBdIG9wX3NlbCAgICAgICA7Ly8gQWN0dWFsIE9wZXJhdGlvbgorbG9naWMgICAgICBbNzowXSAgICAgICAgIHRtcF9vcCAgICAgICA7Ly8gV2FybmluZyA6IEFzc21pbmcgTWF4IG9wZXJ0aW9uIGlzIDgKK2xvZ2ljICAgICAgWzc6MF0gICAgICAgICB0bXBpbnZlcnQgICAgOy8vIHJlYWQgY29udHJvbCAKK2xvZ2ljICAgICAgWzc6MF0gICAgICAgICB0bXByZWFkICAgICAgOy8vIHdyaXRlIGNvbnRyb2wgCitsb2dpYyAgICAgIFs3OjBdICAgICAgICAgdG1wd3JpdGUgICAgIDsvLyBpbnZlcnRvciBjb250cm9sIAoraW50ZWdlciAgICAgICAgICAgICAgICAgIGluZGV4ICAgICAgICA7Ly8gb3V0cHV0IGluZGV4ICovCitpbnRlZ2VyICAgICAgICAgICAgICAgICAgbG9vcCAgICAgICAgIDsvLyBiaXQgY291bnQKKworCisvKiBPcGVyYXRpb24gU2VsZWN0aW9uIFNlbGVjdGlvbiAqLworCithbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJzdF9uKSBiZWdpbgorICBpZighcnN0X24pICAgICAgICAgICBvcF9zZWwgPD0gezEnYjEseyhCSVNUX09QX1NJWkUtMSl7MSdiMH19fTsKKyAgZWxzZSBpZihzY2FuX3NoaWZ0KSAgb3Bfc2VsIDw9IHtzZGksIG9wX3NlbFtCSVNUX09QX1NJWkUtMToxXX07CisgIGVsc2UgaWYocmVfaW5pdCkgICAgIG9wX3NlbCA8PSB7MSdiMSx7KEJJU1RfT1BfU0laRS0xKXsxJ2IwfX19OyAvLyBuZWVkIGZpeCBmb3IgcG1iaXN0IG1vb2RlCisgIGVsc2UgaWYocnVuKSAgICAgICAgIG9wX3NlbCA8PSB7b3Bfc2VsWzBdLG9wX3NlbFtCSVNUX09QX1NJWkUtMToxXX07CitlbmQKKworYXNzaWduIG9wX3VwZG93biAgICAgPSBzdGltdWx1c1tCSVNUX1NUSV9XRC0xXTsKK2Fzc2lnbiBvcF9yZXZlcnNlICAgID0gc3RpbXVsdXNbQklTVF9TVElfV0QtMl07Cithc3NpZ24gb3BfcmVwZWF0ZmxhZyA9IHN0aW11bHVzW0JJU1RfU1RJX1dELTNdOworLy8gUmUtd2luZCB0aGUgb3BlcmF0aW9uLCB3aGVuIHRoZSBpcyBlcnJvciBjb3JyZWN0Cithc3NpZ24gbGFzdF9vcCAgICAgICA9IChyZV9pbml0KSA/IDEnYjAgOiBvcF9zZWxbMF07CisKKworCithbHdheXNfY29tYgorYmVnaW4KKyAgIGxvb3A9MDsKKyAgIHRtcGludmVydCA9IDgnaDA7CisgICB0bXByZWFkICAgPSA4J2gwOworICAgdG1wd3JpdGUgID0gOCdoMDsKKyAgIGZvcihpbmRleCA9IDAgOyBpbmRleCA8IEJJU1RfT1BfU0laRSA7IGluZGV4ID0gaW5kZXgrMSliZWdpbgorICAgICAgdG1waW52ZXJ0W2luZGV4XSA9IHN0aW11bHVzW2xvb3BdOworICAgICAgdG1wcmVhZFtpbmRleF0gICA9IHN0aW11bHVzW2xvb3ArMV07CisgICAgICB0bXB3cml0ZVtpbmRleF0gID0gc3RpbXVsdXNbbG9vcCsyXTsKKyAgICAgIGxvb3AgICAgICAgICAgICAgPSBsb29wICsgMzsKKyAgIGVuZAorZW5kCisKKworYWx3YXlzX2NvbWIKK2JlZ2luCisgICB0bXBfb3AgPSA4J2IwMDAwMDAwMDsKKyAgIHRtcF9vcFtCSVNUX09QX1NJWkUtMTowXSA9IG9wX3NlbDsKKyAgIGNhc2UodG1wX29wKQorICAgICA4J2IxMDAwMDAwMDoge29wX3JlYWQsb3Bfd3JpdGUsb3BfaW52ZXJ0fSA9IHt0bXByZWFkWzddLHRtcHdyaXRlWzddLHRtcGludmVydFs3XX07CisgICAgIDgnYjAxMDAwMDAwOiB7b3BfcmVhZCxvcF93cml0ZSxvcF9pbnZlcnR9ID0ge3RtcHJlYWRbNl0sdG1wd3JpdGVbNl0sdG1waW52ZXJ0WzZdfTsKKyAgICAgOCdiMDAxMDAwMDA6IHtvcF9yZWFkLG9wX3dyaXRlLG9wX2ludmVydH0gPSB7dG1wcmVhZFs1XSx0bXB3cml0ZVs1XSx0bXBpbnZlcnRbNV19OworICAgICA4J2IwMDAxMDAwMDoge29wX3JlYWQsb3Bfd3JpdGUsb3BfaW52ZXJ0fSA9IHt0bXByZWFkWzRdLHRtcHdyaXRlWzRdLHRtcGludmVydFs0XX07CisgICAgIDgnYjAwMDAxMDAwOiB7b3BfcmVhZCxvcF93cml0ZSxvcF9pbnZlcnR9ID0ge3RtcHJlYWRbM10sdG1wd3JpdGVbM10sdG1waW52ZXJ0WzNdfTsKKyAgICAgOCdiMDAwMDAxMDA6IHtvcF9yZWFkLG9wX3dyaXRlLG9wX2ludmVydH0gPSB7dG1wcmVhZFsyXSx0bXB3cml0ZVsyXSx0bXBpbnZlcnRbMl19OworICAgICA4J2IwMDAwMDAxMDoge29wX3JlYWQsb3Bfd3JpdGUsb3BfaW52ZXJ0fSA9IHt0bXByZWFkWzFdLHRtcHdyaXRlWzFdLHRtcGludmVydFsxXX07CisgICAgIDgnYjAwMDAwMDAxOiB7b3BfcmVhZCxvcF93cml0ZSxvcF9pbnZlcnR9ID0ge3RtcHJlYWRbMF0sdG1wd3JpdGVbMF0sdG1waW52ZXJ0WzBdfTsKKyAgICAgZGVmYXVsdDogICAgIHtvcF9yZWFkLG9wX3dyaXRlLG9wX2ludmVydH0gPSB7dG1wcmVhZFswXSx0bXB3cml0ZVswXSx0bXBpbnZlcnRbMF19OworICAgZW5kY2FzZQorZW5kCisKKworZW5kbW9kdWxlCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9tYmlzdC9zcmMvY29yZS9tYmlzdF9wYXRfc2VsLnN2IGIvdmVyaWxvZy9ydGwvbWJpc3Qvc3JjL2NvcmUvbWJpc3RfcGF0X3NlbC5zdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2E1Yzk4Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvbWJpc3Qvc3JjL2NvcmUvbWJpc3RfcGF0X3NlbC5zdgpAQCAtMCwwICsxLDExNiBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEgLCBEaW5lc2ggQW5uYXl5YSAgICAgICAgICAgICAgICAgICAgICAgICAgCisvLyAKKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogQ3JlYXRlZCBieSBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIE1CSVNUIFBhdHRlcm4gU2VsZWN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBtYmlzdF9jdHJsIGNvcmVzIHByb2plY3QgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHBzOi8vZ2l0aHViLmNvbS9kaW5lc2hhbm5heXlhL21iaXN0X2N0cmwuZ2l0ICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICBUaGlzIGJsb2NrIGludGVncmF0ZSBtYmlzdCBwYXR0ZXJuIHNlbGVjdGlvbiAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcihzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAtIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFJldmlzaW9uIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC4wIC0gMTF0aCBPY3QgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgSW5pdGlhbCBpbnRlZ3JhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KK2BpbmNsdWRlICJtYmlzdF9kZWYuc3ZoIgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTUJJU1QgRGF0YSBQYXR0ZXJuIFNlbGVjdGlvbiBMb2dpYworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbW9kdWxlIG1iaXN0X3BhdF9zZWwgCisgICAgICMoICBwYXJhbWV0ZXIgQklTVF9BRERSX1dEICAgICAgICAgICA9IDksCisJIHBhcmFtZXRlciBCSVNUX0RBVEFfV0QgICAgICAgICAgID0gMzIsCisJIHBhcmFtZXRlciBCSVNUX0FERFJfU1RBUlQgICAgICAgID0gOSdoMDAwLAorCSBwYXJhbWV0ZXIgQklTVF9BRERSX0VORCAgICAgICAgICA9IDknaDFGOCwKKwkgcGFyYW1ldGVyIEJJU1RfUkVQQUlSX0FERFJfU1RBUlQgPSA5J2gxRkMsCisJIHBhcmFtZXRlciBCSVNUX1JBRF9XRF9JICAgICAgICAgID0gQklTVF9BRERSX1dELAorCSBwYXJhbWV0ZXIgQklTVF9SQURfV0RfTyAgICAgICAgICA9IEJJU1RfQUREUl9XRCkgKAorCisgICAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgcGF0X2xhc3QsICAgLy8gTGFzdCBwYXR0ZXJuCisgICAgICBvdXRwdXQgIGxvZ2ljIFtCSVNUX0RBVEFfV0QtMTowXSAgcGF0X2RhdGEsICAgLy8gcGF0dGVybiBkYXRhCisgICAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgc2RvLCAgICAgICAgLy8gc2NhbiBkYXRhIG91dHB1dAorICAgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgIGNsaywgICAgICAgIC8vIGNsb2NrIAorICAgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgIHJzdF9uLCAgICAgIC8vIHJlc2V0IAorICAgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgIHJ1biwgICAgICAgIC8vIHN0b3Agb3Igc3RhcnQgc3RhdGUgbWFjaGluZSAKKyAgICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICBzY2FuX3NoaWZ0LCAvLyBzY2FuIHNoaWZ0IAorICAgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgIHNkaSAgICAgICAgIC8vIHNjYW4gaW5wdXQKKworKTsKKworCitsb2dpYyAgICBbQklTVF9EQVRBX1BBVF9TSVpFLTE6MF0gcGF0X3NlbCAgICAgOy8qIFBhdHRlcm4gU2VsZWN0ICAgICovCitsb2dpYyAgICBbNjM6MF0gICAgICAgICAgICAgICAgICAgcGF0dGVybjsgCisgICAgICAgICAgICAgICAgICAgIAoraW50ZWdlciAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ICAgICAgIDsvKiBvdXRwdXQgaW5kZXggKi8KKworCisKKy8vIGxhc3QgcGF0dGVybgorYXNzaWduIHBhdF9sYXN0ID0gcGF0X3NlbFswXTsKKworCisvKiBQYXR0ZXJuIFNlbGVjdGlvbiAqLworCithbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJzdF9uKSBiZWdpbgorICBpZighcnN0X24pICAgICAgICAgICBwYXRfc2VsIDw9IHsxJ2IxLHsoQklTVF9EQVRBX1BBVF9TSVpFLTEpezEnYjB9fX07CisgIGVsc2UgaWYoc2Nhbl9zaGlmdCkgIHBhdF9zZWwgPD0ge3NkaSwgcGF0X3NlbFtCSVNUX0RBVEFfUEFUX1NJWkUtMToxXX07CisgIGVsc2UgaWYocnVuKSAgICAgICAgIHBhdF9zZWwgPD0ge3BhdF9zZWxbMF0scGF0X3NlbFtCSVNUX0RBVEFfUEFUX1NJWkUtMToxXX07CitlbmQKKworCisvKiBQYXR0ZXJuIFNlbGVjdGlvbiAqLworbG9naWMgWzc6MF0gdG1wX3BhdDsKK2Fsd2F5c19jb21iCitiZWdpbgorICAgdG1wX3BhdCA9IDgnYjAwMDAwMDAwOworICAgdG1wX3BhdFs3OjgtQklTVF9EQVRBX1BBVF9TSVpFXSA9IHBhdF9zZWw7CisgICBjYXNlKHRtcF9wYXQpCisgICAgIDgnYjEwMDAwMDAwOiBwYXR0ZXJuID0gQklTVF9EQVRBX1BBVF9UWVBFMTsKKyAgICAgOCdiMDEwMDAwMDA6IHBhdHRlcm4gPSBCSVNUX0RBVEFfUEFUX1RZUEUyOworICAgICA4J2IwMDEwMDAwMDogcGF0dGVybiA9IEJJU1RfREFUQV9QQVRfVFlQRTM7CisgICAgIDgnYjAwMDEwMDAwOiBwYXR0ZXJuID0gQklTVF9EQVRBX1BBVF9UWVBFNDsKKyAgICAgOCdiMDAwMDEwMDA6IHBhdHRlcm4gPSBCSVNUX0RBVEFfUEFUX1RZUEU1OworICAgICA4J2IwMDAwMDEwMDogcGF0dGVybiA9IEJJU1RfREFUQV9QQVRfVFlQRTY7CisgICAgIDgnYjAwMDAwMDEwOiBwYXR0ZXJuID0gQklTVF9EQVRBX1BBVF9UWVBFNzsKKyAgICAgOCdiMDAwMDAwMDE6IHBhdHRlcm4gPSBCSVNUX0RBVEFfUEFUX1RZUEU4OworICAgICBkZWZhdWx0OiAgICAgcGF0dGVybiA9IEJJU1RfREFUQV9QQVRfVFlQRTE7CisgICBlbmRjYXNlCitlbmQKKworLyogRGF0YSBkaXN0cmlidXRvciAqLworCithbHdheXNfY29tYgorYmVnaW4KKyAgIGZvcihpbmRleCA9IDAgOyBpbmRleCA8IEJJU1RfREFUQV9XRCA7IGluZGV4ID0gaW5kZXggKyAxKSBiZWdpbgorICAgICAgIHBhdF9kYXRhW2luZGV4XSA9IHBhdHRlcm5baW5kZXglNjRdOworICAgZW5kCitlbmQKKworYXNzaWduIHNkbyAgID0gcGF0X3NlbFswXTsKKworZW5kbW9kdWxlCisKKwpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvbWJpc3Qvc3JjL2NvcmUvbWJpc3RfcmVwYWlyX2FkZHIuc3YgYi92ZXJpbG9nL3J0bC9tYmlzdC9zcmMvY29yZS9tYmlzdF9yZXBhaXJfYWRkci5zdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Nzg3MWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvbWJpc3Qvc3JjL2NvcmUvbWJpc3RfcmVwYWlyX2FkZHIuc3YKQEAgLTAsMCArMSwxNTEgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxICwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgIAorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IENyZWF0ZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBNQklTVCBBZGRyZXNzIFJlcGFpciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgbWJpc3RfY3RybCBjb3JlcyBwcm9qZWN0ICAgICAgICAgICAvLy8vCisvLy8vICBodHRwczovL2dpdGh1Yi5jb20vZGluZXNoYW5uYXl5YS9tYmlzdF9jdHJsLmdpdCAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgVGhpcyBibG9jayBpbnRlZ3JhdGUgbWJpc3QgYWRkcmVzcyByZXBhaXIgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUbyBEbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIG5vdGhpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBBdXRob3Iocyk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgLSBEaW5lc2ggQW5uYXl5YSwgZGluZXNoYUBvcGVuY29yZXMub3JnICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBSZXZpc2lvbiA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIDAuMCAtIDExdGggT2N0IDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIEluaXRpYWwgaW50ZWdyYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKworLy8gQklTVCBhZGRyZXNzIFJlcGFpciBMb2dpYworCitgaW5jbHVkZSAibWJpc3RfZGVmLnN2aCIKKworbW9kdWxlIG1iaXN0X3JlcGFpcl9hZGRyIAorICAgICAjKCAgcGFyYW1ldGVyIEJJU1RfQUREUl9XRCAgICAgICAgICAgPSA5LAorCSBwYXJhbWV0ZXIgQklTVF9EQVRBX1dEICAgICAgICAgICA9IDMyLAorCSBwYXJhbWV0ZXIgQklTVF9BRERSX1NUQVJUICAgICAgICA9IDknaDAwMCwKKwkgcGFyYW1ldGVyIEJJU1RfQUREUl9FTkQgICAgICAgICAgPSA5J2gxRjgsCisJIHBhcmFtZXRlciBCSVNUX1JFUEFJUl9BRERSX1NUQVJUID0gOSdoMUZDLAorCSBwYXJhbWV0ZXIgQklTVF9SQURfV0RfSSAgICAgICAgICA9IEJJU1RfQUREUl9XRCwKKwkgcGFyYW1ldGVyIEJJU1RfUkFEX1dEX08gICAgICAgICAgPSBCSVNUX0FERFJfV0QpICgKKwkKKyAgICBvdXRwdXQgbG9naWMgW0JJU1RfUkFEX1dEX08tMTowXSBBZGRyZXNzT3V0LAorICAgIG91dHB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgIENvcnJlY3QsCisgICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgc2RvLCAgICAgICAgIC8vICBzY2FuIGRhdGEgb3V0cHV0CisKKyAgICBpbnB1dCBsb2dpYyBbQklTVF9SQURfV0RfSS0xOjBdICBBZGRyZXNzSW4sCisgICAgaW5wdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgY2xrLAorICAgIGlucHV0IGxvZ2ljICAgICAgICAgICAgICAgICAgICAgIHJzdF9uLAorICAgIGlucHV0IGxvZ2ljICAgICAgICAgICAgICAgICAgICAgIEVycm9yLAorICAgIGlucHV0IGxvZ2ljIFtCSVNUX1JBRF9XRF9JLTE6MF0gIEVycm9yQWRkciwKKyAgICBpbnB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgICBiaXN0X2xvYWQsCisgICAgaW5wdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgYmlzdF9zaGlmdCwgIC8vICBzaGlmdCBzY2FuIGlucHV0CisgICAgaW5wdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgc2RpICAgICAgICAgIC8vICBzY2FuIGRhdGEgaW5wdXQgCisKKworKTsKKworbG9naWMgWzM6MF0gICBFcnJvckNudDsgLy8gQXNzdW1lZCBNYXhpbXVtIEVycm9yIGNvcnJlY3Rpb24gaXMgbGVzcyB0aGFuIDE2CisKK2xvZ2ljIFtCSVNUX1JBRF9XRF9JLTE6MF0gUmVwYWlyTWVtIFswOkJJU1RfRVJSX0xJTUlULTFdOworaW50ZWdlciBpOworCisKK2Fsd2F5c0AocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByc3RfbikKK2JlZ2luCisgICBpZighcnN0X24pIGJlZ2luCisgICAgIEVycm9yQ250ICAgIDw9ICcwOworICAgICBDb3JyZWN0IDw9ICcwOworICAgICAvLyBJbml0aWFsaXplIHRoZSBSZXBhaXIgUkFNIGZvciBTQ0FOIHB1cnBvc2UKKyAgICAgZm9yKGkgPTA7IGkgPCBCSVNUX0VSUl9MSU1JVDsgaSA9IGkrMSkgYmVnaW4KKyAgICAgICAgUmVwYWlyTWVtW2ldID0gJ2gwOworICAgICBlbmQKKyAgIGVuZCBlbHNlIGlmKEVycm9yKSBiZWdpbgorICAgICAgaWYoRXJyb3JDbnQgPD0gQklTVF9FUlJfTElNSVQpIGJlZ2luCisgICAgICAgICAgRXJyb3JDbnQgICAgICAgICAgICA8PSBFcnJvckNudCsxOworICAgICAgICAgIFJlcGFpck1lbVtFcnJvckNudF0gPD0gRXJyb3JBZGRyOworICAgICAgICAgIENvcnJlY3QgICAgICAgICA8PSAxJ2IxOworICAgICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgICAgICBDb3JyZWN0ICAgICAgICAgPD0gMSdiMDsKKyAgICAgIGVuZAorICAgZW5kCitlbmQKKworaW50ZWdlciBpbmRleDsKKworYWx3YXlzX2NvbWIKK2JlZ2luCisgICBBZGRyZXNzT3V0ID0gQWRkcmVzc0luOworICAgZm9yKGluZGV4PTA7IGluZGV4IDwgQklTVF9FUlJfTElNSVQ7IGluZGV4PWluZGV4KzEpIGJlZ2luCisgICAgICBpZihFcnJvckNudCA+IGluZGV4ICYmIEFkZHJlc3NJbiA9PSBSZXBhaXJNZW1baW5kZXhdKSBiZWdpbgorCSAgQWRkcmVzc091dCA9IEJJU1RfUkVQQUlSX0FERFJfU1RBUlQraW5kZXg7CisJICAkZGlzcGxheSgiU1RBVFVTOiBNQklTVCBBRERSRVNTIFJFUEFJUjogJW0gPT4gT2xkIEFkZHI6ICV4IE5leCBBZGRyOiAleCIsQWRkcmVzc0luLEFkZHJlc3NPdXQpOworICAgICAgZW5kCisgICBlbmQKK2VuZAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogU2VyaWFsIHNoaWZ0aW5nIHRoZSBSZXBhaXIgYWRkcmVzcworKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50ZWdlciBqOworbG9naWMgWzA6QklTVF9FUlJfTElNSVQtMV0gc2RpX2luOworbG9naWMgWzA6QklTVF9FUlJfTElNSVQtMV0gc2RvX291dDsKKy8vIERhaXN5IGNoYWluIHRoZSBTZXJpYWwgSW4vT1VUIAorYWx3YXlzX2NvbWIgYmVnaW4KKyAgIGZvcihqID0wOyBqIDwgQklTVF9FUlJfTElNSVQ7IGo9aisxKSBiZWdpbgorICAgICAgc2RpX2luW2pdID0oaj09MCkgPyAgc2RpIDogIHNkb19vdXRbai0xXTsKKyAgIGVuZAorZW5kCisKK2Fzc2lnbiAgc2RvID0gc2RvX291dFtCSVNUX0VSUl9MSU1JVC0xXTsKKworZ2VudmFyIG5vOworZ2VuZXJhdGUgCitmb3IgKG5vID0gMDsgJHVuc2lnbmVkKG5vKSA8IEJJU1RfRVJSX0xJTUlUOyBubz1ubysxKSBiZWdpbiA6IG51bQorCisgc2VyX3NoaWZ0CisgICAgICMoLldEKDE2KSkgdV9zaGlmdCgKKworICAgIC8vIE1hc3RlciBQb3J0CisgICAgICAgLnJzdF9uICAgICAgIChyc3RfbiAgICAgICAgICksCisgICAgICAgLmNsayAgICAgICAgIChjbGsgICAgICAgICAgICksIAorICAgICAgIC5sb2FkICAgICAgICAoYmlzdF9sb2FkICAgICApLAorICAgICAgIC5zaGlmdCAgICAgICAoYmlzdF9zaGlmdCAgICApLAorICAgICAgIC5sb2FkX2RhdGEgICAoUmVwYWlyTWVtW25vXSApLCAKKyAgICAgICAuc2RpICAgICAgICAgKHNkaV9pbltub10gICAgKSwgIAorICAgICAgIC5zZG8gICAgICAgICAoc2RvX291dFtub10gICApICAKKworCisgICAgKTsKK2VuZAorZW5kZ2VuZXJhdGUKKworZW5kbW9kdWxlCisKKworCisKKworCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9tYmlzdC9zcmMvY29yZS9tYmlzdF9zdGlfc2VsLnN2IGIvdmVyaWxvZy9ydGwvbWJpc3Qvc3JjL2NvcmUvbWJpc3Rfc3RpX3NlbC5zdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTlkYzlmCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvbWJpc3Qvc3JjL2NvcmUvbWJpc3Rfc3RpX3NlbC5zdgpAQCAtMCwwICsxLDEwNSBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEgLCBEaW5lc2ggQW5uYXl5YSAgICAgICAgICAgICAgICAgICAgICAgICAgCisvLyAKKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogQ3JlYXRlZCBieSBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIE1CSVNUIFN0aW11bHVzIFNlbGVjdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBtYmlzdF9jdHJsIGNvcmVzIHByb2plY3QgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHBzOi8vZ2l0aHViLmNvbS9kaW5lc2hhbm5heXlhL21iaXN0X2N0cmwuZ2l0ICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICBUaGlzIGJsb2NrIGludGVncmF0ZSBzdGltdWx1cyBzbGVjdGlpb24gICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcihzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAtIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFJldmlzaW9uIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC4wIC0gMTF0aCBPY3QgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgSW5pdGlhbCBpbnRlZ3JhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworCitgaW5jbHVkZSAibWJpc3RfZGVmLnN2aCIKKy8vIGJpc3Qgc3RpbXVsdXMgc2VsZWN0aW9uCisKK21vZHVsZSBtYmlzdF9zdGlfc2VsIAorICAgICAjKCAgcGFyYW1ldGVyIEJJU1RfQUREUl9XRCAgICAgICAgICAgPSA5LAorCSBwYXJhbWV0ZXIgQklTVF9EQVRBX1dEICAgICAgICAgICA9IDMyLAorCSBwYXJhbWV0ZXIgQklTVF9BRERSX1NUQVJUICAgICAgICA9IDknaDAwMCwKKwkgcGFyYW1ldGVyIEJJU1RfQUREUl9FTkQgICAgICAgICAgPSA5J2gxRjgsCisJIHBhcmFtZXRlciBCSVNUX1JFUEFJUl9BRERSX1NUQVJUID0gOSdoMUZDLAorCSBwYXJhbWV0ZXIgQklTVF9SQURfV0RfSSAgICAgICAgICA9IEJJU1RfQUREUl9XRCwKKwkgcGFyYW1ldGVyIEJJU1RfUkFEX1dEX08gICAgICAgICAgPSBCSVNUX0FERFJfV0QpICgKKworCW91dHB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICBzZG8gICAgICAgICAgICwgIC8vIFNjYW4gRGF0YSBPdXQKKwlvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdF9zdGltdWx1cyAsICAvLyBsYXN0IHN0aW11bHVzCisgICAgICAgIG91dHB1dCBsb2dpYyAgW0JJU1RfU1RJX1dELTE6MF0gICAgICBzdGltdWx1cyAgICAgICwKKworCWlucHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgY2xrICAgICAgICAgICAsICAvLyBDbG9jaworCWlucHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgcnN0X24gICAgICAgICAsICAvLyBSZXNldCAKKwlpbnB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYW5fc2hpZnQgICAgLCAgLy8gU2NhbiBTaGlmdAorCWlucHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgc2RpICAgICAgICAgICAsICAvLyBTY2FuIGRhdGEgaW4KKwlpbnB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1biAgICAgICAgICAgICAgLy8gUnVuIAorCispOworCitsb2dpYyAgW0JJU1RfU1RJX1NJWkUtMTowXSAgICBzdGlfc2VsICAgICAgOyAvLyBTdGltdWxhdGlvbiBTZWxlY3Rpb24KK2xvZ2ljICBbNzowXSAgICAgICAgICAgICAgICAgIHRtcF9zdGkgICAgICA7IC8vIFdhcm5pbmc6IE1heCBTdGltdWx1cyBhc3NtZWQgaXMgOAorCisKKworLyogUGF0dGVybiBTZWxlY3Rpb24gKi8KKworYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByc3RfbikgYmVnaW4KKyAgaWYoIXJzdF9uKSAgICAgICAgICAgc3RpX3NlbCA8PSB7MSdiMSx7KEJJU1RfU1RJX1NJWkUtMSl7MSdiMH19fTsKKyAgZWxzZSBpZihzY2FuX3NoaWZ0KSAgc3RpX3NlbCA8PSB7c2RpLCBzdGlfc2VsW0JJU1RfU1RJX1NJWkUtMToxXX07CisgIGVsc2UgaWYocnVuKSAgICAgICAgIHN0aV9zZWwgPD0ge3N0aV9zZWxbMF0sc3RpX3NlbFtCSVNUX1NUSV9TSVpFLTE6MV19OworZW5kCisKKworLyogUGF0dGVybiBTZWxlY3Rpb24gKi8KK2Fsd2F5c19jb21iCitiZWdpbgorICAgdG1wX3N0aSA9IDgnYjAwMDAwMDAwOworICAgdG1wX3N0aVs3OjgtQklTVF9TVElfU0laRV0gPSBzdGlfc2VsOworICAgY2FzZSh0bXBfc3RpKQorICAgICA4J2IxMDAwMDAwMDogc3RpbXVsdXMgPSBCSVNUX1NUSU1VTFVTX1RZUEUxOworICAgICA4J2IwMTAwMDAwMDogc3RpbXVsdXMgPSBCSVNUX1NUSU1VTFVTX1RZUEUyOworICAgICA4J2IwMDEwMDAwMDogc3RpbXVsdXMgPSBCSVNUX1NUSU1VTFVTX1RZUEUzOworICAgICA4J2IwMDAxMDAwMDogc3RpbXVsdXMgPSBCSVNUX1NUSU1VTFVTX1RZUEU0OworICAgICA4J2IwMDAwMTAwMDogc3RpbXVsdXMgPSBCSVNUX1NUSU1VTFVTX1RZUEU1OworICAgICA4J2IwMDAwMDEwMDogc3RpbXVsdXMgPSBCSVNUX1NUSU1VTFVTX1RZUEU2OworICAgICA4J2IwMDAwMDAxMDogc3RpbXVsdXMgPSBCSVNUX1NUSU1VTFVTX1RZUEU3OworICAgICA4J2IwMDAwMDAwMTogc3RpbXVsdXMgPSBCSVNUX1NUSU1VTFVTX1RZUEU4OworICAgICBkZWZhdWx0OiAgICAgc3RpbXVsdXMgPSBCSVNUX1NUSU1VTFVTX1RZUEUxOworICAgZW5kY2FzZQorZW5kCisKKworLyogQXNzaWduIG91dHB1dCAgKi8KKworYXNzaWduIHNkbyAgICAgICAgICAgPSBzdGlfc2VsWzBdOworYXNzaWduIGxhc3Rfc3RpbXVsdXMgPSBzdGlfc2VsWzBdOworCisKKworZW5kbW9kdWxlCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9tYmlzdC9zcmMvdG9wL21iaXN0X3RvcC5zdiBiL3Zlcmlsb2cvcnRsL21iaXN0L3NyYy90b3AvbWJpc3RfdG9wLnN2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwNmNlMTMKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC9tYmlzdC9zcmMvdG9wL21iaXN0X3RvcC5zdgpAQCAtMCwwICsxLDU2NiBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxICwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgIAorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IENyZWF0ZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBNQklTVCBUT1AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgbWJpc3RfY3RybCBjb3JlcyBwcm9qZWN0ICAgICAgICAgICAvLy8vCisvLy8vICBodHRwczovL2dpdGh1Yi5jb20vZGluZXNoYW5uYXl5YS9tYmlzdF9jdHJsLmdpdCAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgVGhpcyBibG9jayBpbnRlZ3JhdGUgbWJpc3QgY29udHJvbGxlciB3aXRoIHJvdyAgICAgICAgICAvLy8vCisvLy8vICAgICAgcmVkZW5kZW5jeSBmZWF0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUbyBEbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIG5vdGhpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBBdXRob3Iocyk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgLSBEaW5lc2ggQW5uYXl5YSwgZGluZXNoYUBvcGVuY29yZXMub3JnICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBSZXZpc2lvbiA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIDAuMCAtIDExdGggT2N0IDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIEluaXRpYWwgaW50ZWdyYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIDAuMSAtIDI2dGggT2N0IDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIEZpeGVkIEVycm9yIEFkZHJlc3MgYXJlIHNlcmlhbCBzaGlmdGVkIHRocm91Z2ggICAgICAvLy8vCisvLy8vICAgICAgICAgIHNkaS9zZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIDAuMiAtIDE1IERlYyAyMDIxLCBEaW5lc2ggQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIGNvbW1vbiBNQklTVCBmb3IgNCBTUkFNICAgICAgICAgICAvLy8vCisvLy8vICAgIDAuMyAtIDI5dGggRGVjIDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIHlvc3lzIHN5bnRoZXNpcyBpc3N1ZSBmb3IgdHdvIGRpbWVuc2lvbiB2YXJpYWJsZSAgICAvLy8vCisvLy8vICAgICAgICAgIGNoYW5nZWQgdGhlIHZhcmlhYmxlIGRlZmluYXRpb24gZnJvbSBsb2dpYyB0byB3aXJlICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2BpbmNsdWRlICJtYmlzdF9kZWYuc3ZoIgorbW9kdWxlIG1iaXN0X3RvcAorICAgICAjKCAgCisgICAgICAgICBwYXJhbWV0ZXIgQklTVF9OT19TUkFNICAgICAgICAgICA9IDQsCisJIHBhcmFtZXRlciBCSVNUX0FERFJfV0QgICAgICAgICAgID0gOSwKKwkgcGFyYW1ldGVyIEJJU1RfREFUQV9XRCAgICAgICAgICAgPSAzMiwKKwkgcGFyYW1ldGVyIEJJU1RfQUREUl9TVEFSVCAgICAgICAgPSA5J2gwMDAsCisJIHBhcmFtZXRlciBCSVNUX0FERFJfRU5EICAgICAgICAgID0gOSdoMUZCLAorCSBwYXJhbWV0ZXIgQklTVF9SRVBBSVJfQUREUl9TVEFSVCA9IDknaDFGQywKKwkgcGFyYW1ldGVyIEJJU1RfUkFEX1dEX0kgICAgICAgICAgPSBCSVNUX0FERFJfV0QsCisJIHBhcmFtZXRlciBCSVNUX1JBRF9XRF9PICAgICAgICAgID0gQklTVF9BRERSX1dEKSAoCisKK2BpZmRlZiBVU0VfUE9XRVJfUElOUworICAgIGlub3V0IHZjY2QxLAkvLyBVc2VyIGFyZWEgMSAxLjhWIHN1cHBseQorICAgIGlub3V0IHZzc2QxLAkvLyBVc2VyIGFyZWEgMSBkaWdpdGFsIGdyb3VuZAorYGVuZGlmCisKKyAgICAvLyBDbG9jayBTa2V3IEFkanVzdAorICAgICAgIGlucHV0ICB3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX2Nsa19pbnQsIAorICAgICAgIG91dHB1dCB3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX2Nsa19tYmlzdCwKKyAgICAgICBpbnB1dCAgd2lyZSBbMzowXSAgICAgICAgICAgICAgICAgICAgIGNmZ19jc2thX21iaXN0LCAvLyBjbG9jayBza2V3IGFkanVzdCBmb3Igd2ViIGhvc3QKKworCWlucHV0IGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzdF9uLAorCisJLy8gTUJJU1QgSS9GCisJaW5wdXQgd2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpc3RfZW4sCisJaW5wdXQgd2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXN0X3J1biwKKwlpbnB1dCB3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpc3Rfc2hpZnQsCisJaW5wdXQgd2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXN0X2xvYWQsCisJaW5wdXQgd2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXN0X3NkaSwKKworCW91dHB1dCB3aXJlIFszOjBdICAgICAgICAgICAgICAgICAgICAgYmlzdF9lcnJvcl9jbnQwLAorCW91dHB1dCB3aXJlIFszOjBdICAgICAgICAgICAgICAgICAgICAgYmlzdF9lcnJvcl9jbnQxLAorCW91dHB1dCB3aXJlIFszOjBdICAgICAgICAgICAgICAgICAgICAgYmlzdF9lcnJvcl9jbnQyLAorCW91dHB1dCB3aXJlIFszOjBdICAgICAgICAgICAgICAgICAgICAgYmlzdF9lcnJvcl9jbnQzLAorCW91dHB1dCB3aXJlIFtCSVNUX05PX1NSQU0tMTowXSAgICAgICAgYmlzdF9jb3JyZWN0ICAgLAorCW91dHB1dCB3aXJlIFtCSVNUX05PX1NSQU0tMTowXSAgICAgICAgYmlzdF9lcnJvciAgICAgLAorCW91dHB1dCB3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlzdF9kb25lLAorCW91dHB1dCB3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlzdF9zZG8sCisKKworICAgICAgICAvLyBXQiBJL0YKKyAgICAgICAgaW5wdXQgICB3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICB3Yl9jbGtfaSwgIC8vIFN5c3RlbSBjbG9jaworICAgICAgICBpbnB1dCAgIHdpcmUgICAgICAgICAgICAgICAgICAgICAgICAgIHdiX2NsazJfaSwgLy8gU3lzdGVtIGNsb2NrMiBpcyBubyBjdHMKKyAgICAgICAgaW5wdXQgICB3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1fcmVxLCAgLy8gc3Ryb2JlL3JlcXVlc3QKKwlpbnB1dCAgIHdpcmUgWyhCSVNUX05PX1NSQU0rMSkvMi0xOjBdIG1lbV9jcywKKyAgICAgICAgaW5wdXQgICB3aXJlIFtCSVNUX0FERFJfV0QtMTowXSAgICAgICBtZW1fYWRkciwgIC8vIGFkZHJlc3MKKyAgICAgICAgaW5wdXQgICB3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1fd2UgLCAgLy8gd3JpdGUKKyAgICAgICAgaW5wdXQgICB3aXJlIFtCSVNUX0RBVEFfV0QtMTowXSAgICAgICBtZW1fd2RhdGEsICAvLyBkYXRhIG91dHB1dAorICAgICAgICBpbnB1dCAgIHdpcmUgW0JJU1RfREFUQV9XRC84LTE6MF0gICAgIG1lbV93bWFzaywgIC8vIGJ5dGUgZW5hYmxlCisgICAgICAgIG91dHB1dCAgd2lyZSBbQklTVF9EQVRBX1dELTE6MF0gICAgICAgbWVtX3JkYXRhLCAgLy8gZGF0YSBpbnB1dAorCisgICAgIC8vIHRvd2FyZHMgbWVtb3J5CisgICAgIC8vIFBPUlQtQQorICAgICAgICBvdXRwdXQgd2lyZSAgIFtCSVNUX05PX1NSQU0tMTowXSAgICAgIG1lbV9jbGtfYSwKKyAgICAgICAgb3V0cHV0IHdpcmUgICBbQklTVF9BRERSX1dELTE6MF0gICAgICBtZW1fYWRkcl9hMCwKKyAgICAgICAgb3V0cHV0IHdpcmUgICBbQklTVF9BRERSX1dELTE6MF0gICAgICBtZW1fYWRkcl9hMSwKKyAgICAgICAgb3V0cHV0IHdpcmUgICBbQklTVF9BRERSX1dELTE6MF0gICAgICBtZW1fYWRkcl9hMiwKKyAgICAgICAgb3V0cHV0IHdpcmUgICBbQklTVF9BRERSX1dELTE6MF0gICAgICBtZW1fYWRkcl9hMywKKyAgICAgICAgb3V0cHV0IHdpcmUgICBbQklTVF9OT19TUkFNLTE6MF0gICAgICBtZW1fY2VuX2EsCisgICAgICAgIG91dHB1dCB3aXJlICAgW0JJU1RfTk9fU1JBTS0xOjBdICAgICAgbWVtX3dlYl9hLAorICAgICAgICBvdXRwdXQgd2lyZSAgIFtCSVNUX0RBVEFfV0QvOC0xOjBdICAgIG1lbV9tYXNrX2EwLAorICAgICAgICBvdXRwdXQgd2lyZSAgIFtCSVNUX0RBVEFfV0QvOC0xOjBdICAgIG1lbV9tYXNrX2ExLAorICAgICAgICBvdXRwdXQgd2lyZSAgIFtCSVNUX0RBVEFfV0QvOC0xOjBdICAgIG1lbV9tYXNrX2EyLAorICAgICAgICBvdXRwdXQgd2lyZSAgIFtCSVNUX0RBVEFfV0QvOC0xOjBdICAgIG1lbV9tYXNrX2EzLAorICAgICAgICBvdXRwdXQgd2lyZSAgIFtCSVNUX0RBVEFfV0QtMTowXSAgICAgIG1lbV9kaW5fYTAsCisgICAgICAgIG91dHB1dCB3aXJlICAgW0JJU1RfREFUQV9XRC0xOjBdICAgICAgbWVtX2Rpbl9hMSwKKyAgICAgICAgb3V0cHV0IHdpcmUgICBbQklTVF9EQVRBX1dELTE6MF0gICAgICBtZW1fZGluX2EyLAorICAgICAgICBvdXRwdXQgd2lyZSAgIFtCSVNUX0RBVEFfV0QtMTowXSAgICAgIG1lbV9kaW5fYTMsCisKKyAgICAgICAgaW5wdXQgIHdpcmUgICBbQklTVF9EQVRBX1dELTE6MF0gICAgICBtZW1fZG91dF9hMCwKKyAgICAgICAgaW5wdXQgIHdpcmUgICBbQklTVF9EQVRBX1dELTE6MF0gICAgICBtZW1fZG91dF9hMSwKKyAgICAgICAgaW5wdXQgIHdpcmUgICBbQklTVF9EQVRBX1dELTE6MF0gICAgICBtZW1fZG91dF9hMiwKKyAgICAgICAgaW5wdXQgIHdpcmUgICBbQklTVF9EQVRBX1dELTE6MF0gICAgICBtZW1fZG91dF9hMywKKworCisgICAgIC8vIFBPUlQtQgorICAgICAgICBvdXRwdXQgd2lyZSBbQklTVF9OT19TUkFNLTE6MF0gICAgICAgIG1lbV9jbGtfYiwKKyAgICAgICAgb3V0cHV0IHdpcmUgW0JJU1RfTk9fU1JBTS0xOjBdICAgICAgICBtZW1fY2VuX2IsCisgICAgICAgIG91dHB1dCB3aXJlICAgW0JJU1RfQUREUl9XRC0xOjBdICAgICAgbWVtX2FkZHJfYjAsCisgICAgICAgIG91dHB1dCB3aXJlICAgW0JJU1RfQUREUl9XRC0xOjBdICAgICAgbWVtX2FkZHJfYjEsCisgICAgICAgIG91dHB1dCB3aXJlICAgW0JJU1RfQUREUl9XRC0xOjBdICAgICAgbWVtX2FkZHJfYjIsCisgICAgICAgIG91dHB1dCB3aXJlICAgW0JJU1RfQUREUl9XRC0xOjBdICAgICAgbWVtX2FkZHJfYjMKKworCisKKworKTsKKworcGFyYW1ldGVyICBOT19TUkFNX1dEID0gKEJJU1RfTk9fU1JBTSsxKS8yOworCisvLyBGVU5DVElPTkFMIFBPUlQgCit3aXJlICAgICAgICAgICAgICAgICAgICBmdW5jX2Nsa1swOkJJU1RfTk9fU1JBTS0xXTsKK3dpcmUgICAgICAgICAgICAgICAgICAgIGZ1bmNfY2VuWzA6QklTVF9OT19TUkFNLTFdOword2lyZSAgICAgICAgICAgICAgICAgICAgZnVuY193ZWJbMDpCSVNUX05PX1NSQU0tMV07Cit3aXJlIFtCSVNUX0RBVEFfV0QvOC0xOjBdZnVuY19tYXNrWzA6QklTVF9OT19TUkFNLTFdOword2lyZSAgW0JJU1RfQUREUl9XRC0xOjBdZnVuY19hZGRyWzA6QklTVF9OT19TUkFNLTFdOword2lyZSAgW0JJU1RfREFUQV9XRC0xOjBdZnVuY19kb3V0WzA6QklTVF9OT19TUkFNLTFdOword2lyZSAgW0JJU1RfREFUQV9XRC0xOjBdZnVuY19kaW5bMDpCSVNUX05PX1NSQU0tMV07CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTG9jYWwgdmFyaWFibGUgZGVmaW5hdGlvbgorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLword2lyZSAgICAgICAgICAgICAgICAgICAgc3JzdF9uICAgICA7IC8vIHN5bmMgcmVzZXQgdy5yLnQgYmlzdF9jbGsKK3dpcmUgICAgICAgICAgICAgICAgICAgIGNtZF9waGFzZSAgOyAgLy8gQ29tbWFuZCBQaGFzZQord2lyZSAgICAgICAgICAgICAgICAgICAgY21wX3BoYXNlICA7ICAvLyBDb21wYXJlIFBoYXNlCit3aXJlICAgICAgICAgICAgICAgICAgICBydW5fb3AgICAgIDsgIC8vIFJ1biBuZXh0IE9wZXJhdGlvbgord2lyZSAgICAgICAgICAgICAgICAgICAgcnVuX2FkZHIgICA7ICAvLyBSdW4gTmV4dCBBZGRyZXNzCit3aXJlICAgICAgICAgICAgICAgICAgICBydW5fc3RpICAgIDsgIC8vIFJ1biBOZXh0IFN0aW11bHVzCit3aXJlICAgICAgICAgICAgICAgICAgICBydW5fcGF0ICAgIDsgIC8vIFJ1biBOZXh0IFBhdHRlcm4KK3dpcmUgICAgICAgICAgICAgICAgICAgIG9wX3VwZG93biAgOyAgLy8gQWRyZXNzIHVwZG93biBkaXJlY3Rpb24KK3dpcmUgICAgICAgICAgICAgICAgICAgIGxhc3RfYWRkciAgOyAgLy8gbGFzdCBhZGRyZXNzIGluZGljYXRpb24KK3dpcmUgICAgICAgICAgICAgICAgICAgIGxhc3Rfc3RpICAgOyAgLy8gbGFzdCBzdGltdWx1cword2lyZSAgICAgICAgICAgICAgICAgICAgbGFzdF9vcCAgICA7ICAvLyBsYXN0IG9wZXJhdGlvbgord2lyZSAgICAgICAgICAgICAgICAgICAgbGFzdF9wYXQgICA7ICAvLyBsYXN0IHBhdHRlcm4KK3dpcmUgW0JJU1RfREFUQV9XRC0xOjBdIHBhdF9kYXRhICAgOyAgLy8gU2VsZWN0ZWQgRGF0YSBQYXR0ZXJuCit3aXJlIFtCSVNUX1NUSV9XRC0xOjBdICBzdGltdWx1cyAgIDsgIC8vIGN1cnJlbnQgc3RpbXVsdXMKK3dpcmUgICAgICAgICAgICAgICAgICAgIGNvbXBhcmUgICAgOyAgLy8gY29tcGFyZSBkYXRhCit3aXJlICAgICAgICAgICAgICAgICAgICBvcF9yZXBlYXRmbGFnOword2lyZSAgICAgICAgICAgICAgICAgICAgb3BfcmV2ZXJzZTsKK3dpcmUgICAgICAgICAgICAgICAgICAgIG9wX3JlYWQgICA7Cit3aXJlICAgICAgICAgICAgICAgICAgICBvcF93cml0ZSAgIDsKK3dpcmUgICAgICAgICAgICAgICAgICAgIG9wX2ludmVydCAgIDsKKworCit3aXJlICAgICAgICAgICAgICAgICAgICBiaXN0X2Vycm9yX2NvcnJlY3RbMDpCSVNUX05PX1NSQU0tMV0gIDsKK3dpcmUgIFtCSVNUX0FERFJfV0QtMTowXWJpc3RfZXJyb3JfYWRkclswOkJJU1RfTk9fU1JBTS0xXSA7IC8vIGJpc3QgYWRkcmVzcworCit3aXJlICBbQklTVF9BRERSX1dELTE6MF1iaXN0X2FkZHIgICAgICAgOyAvLyBiaXN0IGFkZHJlc3MKK3dpcmUgW0JJU1RfREFUQV9XRC0xOjBdIGJpc3Rfd2RhdGEgICAgICA7IC8vIGJpc3Qgd3JpdGUgZGF0YQord2lyZSAgICAgICAgICAgICAgICAgICAgYmlzdF93ciAgICAgICAgIDsKK3dpcmUgICAgICAgICAgICAgICAgICAgIGJpc3RfcmQgICAgICAgICA7Cit3aXJlIFtCSVNUX0RBVEFfV0QtMTowXSB3Yl9kYXRbMDpCSVNUX05PX1NSQU0tMV07ICAvLyBkYXRhIGlucHV0CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEFzIHlvc3lzIGRvZXMgbm90IHN1cHBvcnQgdHdvIGRpbWVuc2lvbmFsIHZhciwgCisvLyBjb252ZXJ0aW5nIGl0IHNpbmdsZSBkaW1lbnNpb24KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpcmUgWzM6MF0gICAgICAgICAgICAgIGJpc3RfZXJyb3JfY250X2kgWzA6QklTVF9OT19TUkFNLTFdOworCithc3NpZ24gYmlzdF9lcnJvcl9jbnQwID0gYmlzdF9lcnJvcl9jbnRfaVswXTsKK2Fzc2lnbiBiaXN0X2Vycm9yX2NudDEgPSBiaXN0X2Vycm9yX2NudF9pWzFdOworYXNzaWduIGJpc3RfZXJyb3JfY250MiA9IGJpc3RfZXJyb3JfY250X2lbMl07Cithc3NpZ24gYmlzdF9lcnJvcl9jbnQzID0gYmlzdF9lcnJvcl9jbnRfaVszXTsKKworCisvLyBUb3dhcmRzIE1FTU9SWSBQT1JUIC0gQQord2lyZSAgIFtCSVNUX0FERFJfV0QtMTowXSAgICAgIG1lbV9hZGRyX2FfaVswOkJJU1RfTk9fU1JBTS0xXTsKK3dpcmUgW0JJU1RfREFUQV9XRC84LTE6MF0gICAgICBtZW1fbWFza19hX2lbMDpCSVNUX05PX1NSQU0tMV07Cit3aXJlICAgW0JJU1RfREFUQV9XRC0xOjBdICAgICAgbWVtX2RvdXRfYV9pWzA6QklTVF9OT19TUkFNLTFdOword2lyZSAgIFtCSVNUX0RBVEFfV0QtMTowXSAgICAgIG1lbV9kaW5fYV9pWzA6QklTVF9OT19TUkFNLTFdOworCithc3NpZ24gbWVtX2FkZHJfYTAgPSBtZW1fYWRkcl9hX2lbMF07Cithc3NpZ24gbWVtX2FkZHJfYTEgPSBtZW1fYWRkcl9hX2lbMV07Cithc3NpZ24gbWVtX2FkZHJfYTIgPSBtZW1fYWRkcl9hX2lbMl07Cithc3NpZ24gbWVtX2FkZHJfYTMgPSBtZW1fYWRkcl9hX2lbM107CisKK2Fzc2lnbiBtZW1fZGluX2EwID0gbWVtX2Rpbl9hX2lbMF07Cithc3NpZ24gbWVtX2Rpbl9hMSA9IG1lbV9kaW5fYV9pWzFdOworYXNzaWduIG1lbV9kaW5fYTIgPSBtZW1fZGluX2FfaVsyXTsKK2Fzc2lnbiBtZW1fZGluX2EzID0gbWVtX2Rpbl9hX2lbM107CisKK2Fzc2lnbiBtZW1fbWFza19hMD0gbWVtX21hc2tfYV9pWzBdOworYXNzaWduIG1lbV9tYXNrX2ExPSBtZW1fbWFza19hX2lbMV07Cithc3NpZ24gbWVtX21hc2tfYTI9IG1lbV9tYXNrX2FfaVsyXTsKK2Fzc2lnbiBtZW1fbWFza19hMz0gbWVtX21hc2tfYV9pWzNdOworCisvLyBGUk9NIE1FTU9SWQorYXNzaWduIG1lbV9kb3V0X2FfaVswXSA9IG1lbV9kb3V0X2EwOworYXNzaWduIG1lbV9kb3V0X2FfaVsxXSA9IG1lbV9kb3V0X2ExOworYXNzaWduIG1lbV9kb3V0X2FfaVsyXSA9IG1lbV9kb3V0X2EyOworYXNzaWduIG1lbV9kb3V0X2FfaVszXSA9IG1lbV9kb3V0X2EzOworCisvLyBUb3dhcmRzIE1FTU9SWSBQT1JUIC0gQQorYXNzaWduIG1lbV9jbGtfYiAgID0gJ2IwOworYXNzaWduIG1lbV9jZW5fYiAgID0gJ2IwOworYXNzaWduIG1lbV9hZGRyX2IwID0gJ2IwOworYXNzaWduIG1lbV9hZGRyX2IxID0gJ2IwOworYXNzaWduIG1lbV9hZGRyX2IyID0gJ2IwOworYXNzaWduIG1lbV9hZGRyX2IzID0gJ2IwOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTWFuYWdlIHRoZSBTREkgPT4gU0RPIERpYXN5IGNoYWluCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFNESSA9PiBTRE8gZGlhc3kgY2hhaW4KKy8vIGJpc3Rfc2RpID0+IGJpc3RfYWRkcl9zZG8gPT4gIGJpc3Rfc3RpX3NkbyA9PiAgYmlzdF9vcF9zZG8gPT4gYmlzdF9wYXRfc2RvID0+IGJpc3Rfc2RvCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpcmUgICAgICAgICAgICAgICAgICAgIGJpc3RfYWRkcl9zZG8gICA7ICAgICAgICAgICAgICAgICAKK3dpcmUgICAgICAgICAgICAgICAgICAgIGJpc3Rfc3RpX3NkbyAgICA7ICAgICAgICAgICAgICAgICAKK3dpcmUgICAgICAgICAgICAgICAgICAgIGJpc3Rfb3Bfc2RvICAgICA7ICAgICAgICAgICAgICAgICAKK3dpcmUgICAgICAgICAgICAgICAgICAgIGJpc3RfcGF0X3NkbyAgICA7ICAgICAgICAgICAgICAgICAKKword2lyZSAgICAgICAgICAgICAgICAgICAgYmlzdF9tc19zZGlbMDpCSVNUX05PX1NSQU0tMV07Cit3aXJlICAgICAgICAgICAgICAgICAgICBiaXN0X21zX3Nkb1swOkJJU1RfTk9fU1JBTS0xXTsKKworLy8gQWRqdXN0IHRoZSBTREkgPT4gU0RPIERhaXN5IGNoYWluCithc3NpZ24gYmlzdF9tc19zZGlbMF0gPSBiaXN0X3BhdF9zZG87Cithc3NpZ24gYmlzdF9tc19zZGlbMV0gPSBiaXN0X21zX3Nkb1swXTsKK2Fzc2lnbiBiaXN0X21zX3NkaVsyXSA9IGJpc3RfbXNfc2RvWzFdOworYXNzaWduIGJpc3RfbXNfc2RpWzNdID0gYmlzdF9tc19zZG9bMl07Cithc3NpZ24gYmlzdF9zZG8gPSBiaXN0X21zX3Nkb1szXTsKKworLy8gUGljayB0aGUgY29ycmVjdCByZWFkIHBhdGgKK2Fzc2lnbiBtZW1fcmRhdGEgPSB3Yl9kYXRbbWVtX2NzXTsKKworYXNzaWduIGJpc3Rfd3IgPSAoY21kX3BoYXNlICYmIG9wX3dyaXRlKTsKK2Fzc2lnbiBiaXN0X3JkID0gKGNtZF9waGFzZSAmJiBvcF9yZWFkKTsKKworYXNzaWduIGNvbXBhcmUgICAgPSAoY21wX3BoYXNlICYmIG9wX3JlYWQpOworYXNzaWduIGJpc3Rfd2RhdGEgPSAob3BfaW52ZXJ0KSA/IH5wYXRfZGF0YSA6IHBhdF9kYXRhOworCisvLyBDbG9jayBUcmVlIGJyYW5jaGluZyB0byBhdm9pZCBjbG9jayBsYXRlbmN5IHRvd2FyZHMgU1JBTSBwYXRoCit3aXJlIHdiX2Nsa19iMSx3Yl9jbGtfYjI7CisvL2N0ZWNoX2Nsa19idWYgdV9jdHNfd2JfY2xrX2IxICguQSAod2JfY2xrX2kpLCAuIFgod2JfY2xrX2IxKSk7CisvL2N0ZWNoX2Nsa19idWYgdV9jdHNfd2JfY2xrX2IyICguQSAod2JfY2xrX2kpLCAuIFgod2JfY2xrX2IyKSk7CisKKy8vIHdiX2hvc3QgY2xvY2sgc2tldyBjb250cm9sCitjbGtfc2tld19hZGp1c3QgdV9za2V3X21iaXN0CisgICAgICAgKAorYGlmZGVmIFVTRV9QT1dFUl9QSU5TCisgICAgICAgICAgICAgICAudmNjZDEgICAgICAodmNjZDEgICAgICAgICAgICAgICAgICAgICAgKSwvLyBVc2VyIGFyZWEgMSAxLjhWIHN1cHBseQorICAgICAgICAgICAgICAgLnZzc2QxICAgICAgKHZzc2QxICAgICAgICAgICAgICAgICAgICAgICksLy8gVXNlciBhcmVhIDEgZGlnaXRhbCBncm91bmQKK2BlbmRpZgorCSAgICAgICAuY2xrX2luICAgICAod2JkX2Nsa19pbnQgICAgICAgICAgICAgICAgKSwgCisJICAgICAgIC5zZWwgICAgICAgIChjZmdfY3NrYV9tYmlzdCAgICAgICAgICAgICApLCAKKwkgICAgICAgLmNsa19vdXQgICAgKHdiZF9jbGtfbWJpc3QgICAgICAgICAgICAgICkgCisgICAgICAgKTsKKworcmVzZXRfc3luYyAgIHVfcmVzZXRfc3luYyAoCisJICAgICAgLnNjYW5fbW9kZSAgKDEnYjAgKSwKKyAgICAgICAgICAgICAgLmRjbGsgICAgICAgKHdiX2Nsa19pICApLCAvLyBEZXN0aW5hdGlvbiBjbG9jayBkb21haW4KKwkgICAgICAuYXJzdF9uICAgICAocnN0X24gICAgICksIC8vIGFjdGl2ZSBsb3cgYXN5bmMgcmVzZXQKKyAgICAgICAgICAgICAgLnNyc3RfbiAgICAgKHNyc3RfbiAgICApCisgICAgICAgICAgKTsKKworCitpbnRlZ2VyIGk7CityZWcgYmlzdF9lcnJvcl9hbmQ7CityZWcgYmlzdF9lcnJvcl9jb3JyZWN0X29yOworCithbHdheXNfY29tYiBiZWdpbgorICAgYmlzdF9lcnJvcl9hbmQgPTA7CisgICBiaXN0X2Vycm9yX2NvcnJlY3Rfb3IgPSAwOworICAgZm9yKGk9MDsgaSA8QklTVF9OT19TUkFNOyBpID0gaSsxKSBiZWdpbgorICAgICBiaXN0X2Vycm9yX2FuZCA9IGJpc3RfZXJyb3JfYW5kICYgYmlzdF9lcnJvcltpXTsKKyAgICAgYmlzdF9lcnJvcl9jb3JyZWN0X29yID0gYmlzdF9lcnJvcl9jb3JyZWN0X29yIHwgYmlzdF9lcnJvcl9jb3JyZWN0W2ldOworICAgZW5kCitlbmQKKworCisvLyBiaXN0IG1haW4gY29udHJvbCBGU00KKworbWJpc3RfZnNtICAKKyAgICAgICMoCisJIC5CSVNUX0FERFJfV0QgICAgICAgICAgIChCSVNUX0FERFJfV0QgICAgICAgICAgICksCisJIC5CSVNUX0RBVEFfV0QgICAgICAgICAgIChCSVNUX0RBVEFfV0QgICAgICAgICAgICksCisJIC5CSVNUX0FERFJfU1RBUlQgICAgICAgIChCSVNUX0FERFJfU1RBUlQgICAgICAgICksCisJIC5CSVNUX0FERFJfRU5EICAgICAgICAgIChCSVNUX0FERFJfRU5EICAgICAgICAgICksCisJIC5CSVNUX1JFUEFJUl9BRERSX1NUQVJUIChCSVNUX1JFUEFJUl9BRERSX1NUQVJUICksCisJIC5CSVNUX1JBRF9XRF9JICAgICAgICAgIChCSVNUX1JBRF9XRF9JICAgICAgICAgICksCisJIC5CSVNUX1JBRF9XRF9PICAgICAgICAgIChCSVNUX1JBRF9XRF9PICAgICAgICAgICkKKyAgICAgICAgICApCisgICAgIHVfZnNtICgKKworCSAgICAgICAgICAgIC5jbWRfcGhhc2UgICAgICAgICAgKGNtZF9waGFzZSAgICAgICAgICAgKSwKKwkgICAgICAgICAgICAuY21wX3BoYXNlICAgICAgICAgIChjbXBfcGhhc2UgICAgICAgICAgICksCisJICAgICAgICAgICAgLnJ1bl9vcCAgICAgICAgICAgICAocnVuX29wICAgICAgICAgICAgICksCisJICAgICAgICAgICAgLnJ1bl9hZGRyICAgICAgICAgICAocnVuX2FkZHIgICAgICAgICAgICksCisJICAgICAgICAgICAgLnJ1bl9zdGkgICAgICAgICAgICAocnVuX3N0aSAgICAgICAgICAgICksCisJICAgICAgICAgICAgLnJ1bl9wYXQgICAgICAgICAgICAocnVuX3BhdCAgICAgICAgICAgICksCisJICAgICAgICAgICAgLmJpc3RfZG9uZSAgICAgICAgICAoYmlzdF9kb25lICAgICAgICAgICksCisKKworCSAgICAgICAgICAgIC5jbGsgICAgICAgICAgICAgICAgKHdiX2Nsa19pICAgICAgICAgICApLAorCSAgICAgICAgICAgIC5yc3RfbiAgICAgICAgICAgICAgKHNyc3RfbiAgICAgICAgICAgICApLAorCSAgICAgICAgICAgIC5iaXN0X3J1biAgICAgICAgICAgKGJpc3RfcnVuICAgICAgICAgICApLAorCSAgICAgICAgICAgIC5sYXN0X29wICAgICAgICAgICAgKGxhc3Rfb3AgICAgICAgICAgICApLAorCSAgICAgICAgICAgIC5sYXN0X2FkZHIgICAgICAgICAgKGxhc3RfYWRkciAgICAgICAgICApLAorCSAgICAgICAgICAgIC5sYXN0X3N0aSAgICAgICAgICAgKGxhc3Rfc3RpICAgICAgICAgICApLAorCSAgICAgICAgICAgIC5sYXN0X3BhdCAgICAgICAgICAgKGxhc3RfcGF0ICAgICAgICAgICApLAorCQkgICAgLm9wX3JldmVyc2UgICAgICAgICAob3BfcmV2ZXJzZSAgICAgICAgICksCisJCSAgICAuYmlzdF9lcnJvciAgICAgICAgIChiaXN0X2Vycm9yX2FuZCAgICAgKQorKTsKKworCisvLyBiaXN0IGFkZHJlc3MgZ2VuZXJhdGlvbgorbWJpc3RfYWRkcl9nZW4gICAKKyAgICAgICMoCisJIC5CSVNUX0FERFJfV0QgICAgICAgICAgIChCSVNUX0FERFJfV0QgICAgICAgICAgICksCisJIC5CSVNUX0RBVEFfV0QgICAgICAgICAgIChCSVNUX0RBVEFfV0QgICAgICAgICAgICksCisJIC5CSVNUX0FERFJfU1RBUlQgICAgICAgIChCSVNUX0FERFJfU1RBUlQgICAgICAgICksCisJIC5CSVNUX0FERFJfRU5EICAgICAgICAgIChCSVNUX0FERFJfRU5EICAgICAgICAgICksCisJIC5CSVNUX1JFUEFJUl9BRERSX1NUQVJUIChCSVNUX1JFUEFJUl9BRERSX1NUQVJUICksCisJIC5CSVNUX1JBRF9XRF9JICAgICAgICAgIChCSVNUX1JBRF9XRF9JICAgICAgICAgICksCisJIC5CSVNUX1JBRF9XRF9PICAgICAgICAgIChCSVNUX1JBRF9XRF9PICAgICAgICAgICkKKyAgICAgICAgICApCisgICAgICB1X2FkZHJfZ2VuKAorICAgICAgICAgICAgICAgICAgICAubGFzdF9hZGRyICAgICAgICAgIChsYXN0X2FkZHIgICAgICAgICAgKSwgCisgICAgICAgICAgICAgICAgICAgIC5iaXN0X2FkZHIgICAgICAgICAgKGJpc3RfYWRkciAgICAgICAgICApLCAgIAorICAgICAgICAgICAgICAgICAgICAuc2RvICAgICAgICAgICAgICAgIChiaXN0X2FkZHJfc2RvICAgICAgKSwgICAgICAgICAKKworICAgICAgICAgICAgICAgICAgICAuY2xrICAgICAgICAgICAgICAgICh3Yl9jbGtfaSAgICAgICAgICAgKSwgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgLnJzdF9uICAgICAgICAgICAgICAoc3JzdF9uICAgICAgICAgICAgICksICAgICAgIAorICAgICAgICAgICAgICAgICAgICAucnVuICAgICAgICAgICAgICAgIChydW5fYWRkciAgICAgICAgICAgKSwgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgLnVwZG93biAgICAgICAgICAgICAob3BfdXBkb3duICAgICAgICAgICksICAgICAgCisgICAgICAgICAgICAgICAgICAgIC5iaXN0X3NoaWZ0ICAgICAgICAgKGJpc3Rfc2hpZnQgICAgICAgICApLCAgCisgICAgICAgICAgICAgICAgICAgIC5iaXN0X2xvYWQgICAgICAgICAgKGJpc3RfbG9hZCAgICAgICAgICApLCAgIAorICAgICAgICAgICAgICAgICAgICAuc2RpICAgICAgICAgICAgICAgIChiaXN0X3NkaSAgICAgICAgICAgKQorCispOworCisKKy8vIEJJU1QgY3VycmVudCBzdGltdWx1cyBzZWxlY3Rpb24KK21iaXN0X3N0aV9zZWwgCisgICAgICAjKAorCSAuQklTVF9BRERSX1dEICAgICAgICAgICAoQklTVF9BRERSX1dEICAgICAgICAgICApLAorCSAuQklTVF9EQVRBX1dEICAgICAgICAgICAoQklTVF9EQVRBX1dEICAgICAgICAgICApLAorCSAuQklTVF9BRERSX1NUQVJUICAgICAgICAoQklTVF9BRERSX1NUQVJUICAgICAgICApLAorCSAuQklTVF9BRERSX0VORCAgICAgICAgICAoQklTVF9BRERSX0VORCAgICAgICAgICApLAorCSAuQklTVF9SRVBBSVJfQUREUl9TVEFSVCAoQklTVF9SRVBBSVJfQUREUl9TVEFSVCApLAorCSAuQklTVF9SQURfV0RfSSAgICAgICAgICAoQklTVF9SQURfV0RfSSAgICAgICAgICApLAorCSAuQklTVF9SQURfV0RfTyAgICAgICAgICAoQklTVF9SQURfV0RfTyAgICAgICAgICApCisgICAgICAgICAgKQorICAgICAgIHVfc3RpX3NlbCgKKworCSAgICAgICAgICAgIC5zZG8gICAgICAgICAgICAgICAgKGJpc3Rfc3RpX3NkbyAgICAgICApLCAgCisJICAgICAgICAgICAgLmxhc3Rfc3RpbXVsdXMgICAgICAobGFzdF9zdGkgICAgICAgICAgICksICAKKyAgICAgICAgICAgICAgICAgICAgLnN0aW11bHVzICAgICAgICAgICAoc3RpbXVsdXMgICAgICAgICAgICksCisKKwkgICAgICAgICAgICAuY2xrICAgICAgICAgICAgICAgICh3Yl9jbGtfaSAgICAgICAgICAgKSwgIAorCSAgICAgICAgICAgIC5yc3RfbiAgICAgICAgICAgICAgKHNyc3RfbiAgICAgICAgICAgICApLCAgCisJICAgICAgICAgICAgLnNjYW5fc2hpZnQgICAgICAgICAoYmlzdF9zaGlmdCAgICAgICAgICksICAKKwkgICAgICAgICAgICAuc2RpICAgICAgICAgICAgICAgIChiaXN0X2FkZHJfc2RvICAgICAgKSwgIAorCSAgICAgICAgICAgIC5ydW4gICAgICAgICAgICAgICAgKHJ1bl9zdGkgICAgICAgICAgICApICAgICAgICAgICAgICAKKworKTsKKworCisvLyBCaXN0IE9wZXJhdGlvbiBzZWxlY3Rpb24KK21iaXN0X29wX3NlbCAKKyAgICAgICMoCisJIC5CSVNUX0FERFJfV0QgICAgICAgICAgIChCSVNUX0FERFJfV0QgICAgICAgICAgICksCisJIC5CSVNUX0RBVEFfV0QgICAgICAgICAgIChCSVNUX0RBVEFfV0QgICAgICAgICAgICksCisJIC5CSVNUX0FERFJfU1RBUlQgICAgICAgIChCSVNUX0FERFJfU1RBUlQgICAgICAgICksCisJIC5CSVNUX0FERFJfRU5EICAgICAgICAgIChCSVNUX0FERFJfRU5EICAgICAgICAgICksCisJIC5CSVNUX1JFUEFJUl9BRERSX1NUQVJUIChCSVNUX1JFUEFJUl9BRERSX1NUQVJUICksCisJIC5CSVNUX1JBRF9XRF9JICAgICAgICAgIChCSVNUX1JBRF9XRF9JICAgICAgICAgICksCisJIC5CSVNUX1JBRF9XRF9PICAgICAgICAgIChCSVNUX1JBRF9XRF9PICAgICAgICAgICkKKyAgICAgICAgICApCisgICAgICAgIHVfb3Bfc2VsICgKKworICAgICAgICAgICAgICAgICAgICAub3BfcmVhZCAgICAgICAgICAgIChvcF9yZWFkICAgICAgICAgICAgICAgKSwgCisJICAgICAgICAgICAgLm9wX3dyaXRlICAgICAgICAgICAob3Bfd3JpdGUgICAgICAgICAgICAgICksCisJICAgICAgICAgICAgLm9wX2ludmVydCAgICAgICAgICAob3BfaW52ZXJ0ICAgICAgICAgICAgICksCisJICAgICAgICAgICAgLm9wX3VwZG93biAgICAgICAgICAob3BfdXBkb3duICAgICAgICAgICAgICksCisJICAgICAgICAgICAgLm9wX3JldmVyc2UgICAgICAgICAob3BfcmV2ZXJzZSAgICAgICAgICAgICksCisJICAgICAgICAgICAgLm9wX3JlcGVhdGZsYWcgICAgICAob3BfcmVwZWF0ZmxhZyAgICAgICAgICksCisJICAgICAgICAgICAgLnNkbyAgICAgICAgICAgICAgICAoYmlzdF9vcF9zZG8gICAgICAgICAgICksCisJICAgICAgICAgICAgLmxhc3Rfb3AgICAgICAgICAgICAobGFzdF9vcCAgICAgICAgICAgICAgICksCisKKwkgICAgICAgICAgICAuY2xrICAgICAgICAgICAgICAgICh3Yl9jbGtfaSAgICAgICAgICAgICAgKSwKKwkgICAgICAgICAgICAucnN0X24gICAgICAgICAgICAgIChzcnN0X24gICAgICAgICAgICAgICAgKSwKKwkgICAgICAgICAgICAuc2Nhbl9zaGlmdCAgICAgICAgIChiaXN0X3NoaWZ0ICAgICAgICAgICAgKSwKKwkgICAgICAgICAgICAuc2RpICAgICAgICAgICAgICAgIChiaXN0X3N0aV9zZG8gICAgICAgICAgKSwKKwkJICAgIC5yZV9pbml0ICAgICAgICAgICAgKGJpc3RfZXJyb3JfY29ycmVjdF9vciApLAorCSAgICAgICAgICAgIC5ydW4gICAgICAgICAgICAgICAgKHJ1bl9vcCAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgICAgICAuc3RpbXVsdXMgICAgICAgICAgIChzdGltdWx1cyAgICAgICAgICAgICAgKQorCisgICAgKTsKKworCisKK21iaXN0X3BhdF9zZWwgCisgICAgICAjKAorCSAuQklTVF9BRERSX1dEICAgICAgICAgICAoQklTVF9BRERSX1dEICAgICAgICAgICApLAorCSAuQklTVF9EQVRBX1dEICAgICAgICAgICAoQklTVF9EQVRBX1dEICAgICAgICAgICApLAorCSAuQklTVF9BRERSX1NUQVJUICAgICAgICAoQklTVF9BRERSX1NUQVJUICAgICAgICApLAorCSAuQklTVF9BRERSX0VORCAgICAgICAgICAoQklTVF9BRERSX0VORCAgICAgICAgICApLAorCSAuQklTVF9SRVBBSVJfQUREUl9TVEFSVCAoQklTVF9SRVBBSVJfQUREUl9TVEFSVCApLAorCSAuQklTVF9SQURfV0RfSSAgICAgICAgICAoQklTVF9SQURfV0RfSSAgICAgICAgICApLAorCSAuQklTVF9SQURfV0RfTyAgICAgICAgICAoQklTVF9SQURfV0RfTyAgICAgICAgICApCisgICAgICAgICAgKQorICAgICAgdV9wYXRfc2VsICgKKyAgICAgICAgICAgICAgICAgICAgLnBhdF9sYXN0ICAgICAgICAgICAobGFzdF9wYXQgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5wYXRfZGF0YSAgICAgICAgICAgKHBhdF9kYXRhICAgICAgICAgICApLAorICAgICAgICAgICAgICAgICAgICAuc2RvICAgICAgICAgICAgICAgIChiaXN0X3BhdF9zZG8gICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgLmNsayAgICAgICAgICAgICAgICAod2JfY2xrX2kgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5yc3RfbiAgICAgICAgICAgICAgKHNyc3RfbiAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgICAgICAucnVuICAgICAgICAgICAgICAgIChydW5fcGF0ICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgLnNjYW5fc2hpZnQgICAgICAgICAoYmlzdF9zaGlmdCAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5zZGkgICAgICAgICAgICAgICAgKGJpc3Rfb3Bfc2RvICAgICAgICApCisKKyAgICk7CisKKworCisKKworZ2VudmFyIHNyYW1fbm87CitnZW5lcmF0ZQorZm9yIChzcmFtX25vID0gMDsgJHVuc2lnbmVkKHNyYW1fbm8pIDwgQklTVF9OT19TUkFNOyBzcmFtX25vPXNyYW1fbm8rMSkgYmVnaW4gOiBtZW1fbm8KKworCQorbWJpc3RfZGF0YV9jbXAgIAorICAgICAgIygKKwkgLkJJU1RfQUREUl9XRCAgICAgICAgICAgKEJJU1RfQUREUl9XRCAgICAgICAgICAgKSwKKwkgLkJJU1RfREFUQV9XRCAgICAgICAgICAgKEJJU1RfREFUQV9XRCAgICAgICAgICAgKSwKKwkgLkJJU1RfQUREUl9TVEFSVCAgICAgICAgKEJJU1RfQUREUl9TVEFSVCAgICAgICAgKSwKKwkgLkJJU1RfQUREUl9FTkQgICAgICAgICAgKEJJU1RfQUREUl9FTkQgICAgICAgICAgKSwKKwkgLkJJU1RfUkVQQUlSX0FERFJfU1RBUlQgKEJJU1RfUkVQQUlSX0FERFJfU1RBUlQgKSwKKwkgLkJJU1RfUkFEX1dEX0kgICAgICAgICAgKEJJU1RfUkFEX1dEX0kgICAgICAgICAgKSwKKwkgLkJJU1RfUkFEX1dEX08gICAgICAgICAgKEJJU1RfUkFEX1dEX08gICAgICAgICAgKQorICAgICAgICAgICkKKworCisgICAgIHVfY21wICgKKyAgICAgICAgICAgICAgICAgICAgLmVycm9yICAgICAgICAgICAgICAoYmlzdF9lcnJvcltzcmFtX25vXSAgICAgICAgICksCisJCSAgICAuZXJyb3JfY29ycmVjdCAgICAgIChiaXN0X2Vycm9yX2NvcnJlY3Rbc3JhbV9ub10gKSwKKwkJICAgIC5jb3JyZWN0ICAgICAgICAgICAgKCAgICAgICAgICAgICAgICAgICAgICAgICAgICApLCAvLyBzYW1lIHNpZ25hbCBhdmFpbGFibGUgYXQgYmlzdCBtdXgKKwkJICAgIC5lcnJvcl9hZGRyICAgICAgICAgKGJpc3RfZXJyb3JfYWRkcltzcmFtX25vXSAgICApLAorCQkgICAgLmVycm9yX2NudCAgICAgICAgICAoYmlzdF9lcnJvcl9jbnRfaVtzcmFtX25vXSAgICksCisgICAgICAgICAgICAgICAgICAgIC5jbGsgICAgICAgICAgICAgICAgKHdiX2Nsa19pICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgICAgICAucnN0X24gICAgICAgICAgICAgIChzcnN0X24gICAgICAgICAgICAgICAgICAgICAgKSwKKwkJICAgIC5hZGRyX2luY19waGFzZSAgICAgKHJ1bl9hZGRyICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgICAgICAuY29tcGFyZSAgICAgICAgICAgIChjb21wYXJlICAgICAgICAgICAgICAgICAgICAgKSwgCisJICAgICAgICAgICAgLnJlYWRfaW52ZXJ0ICAgICAgICAob3BfaW52ZXJ0ICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5jb21wX2RhdGEgICAgICAgICAgKHBhdF9kYXRhICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgICAgICAucnhkX2RhdGEgICAgICAgICAgIChmdW5jX2RvdXRbc3JhbV9ub10gICAgICAgICAgKSwKKwkJICAgIC5hZGRyICAgICAgICAgICAgICAgKGJpc3RfYWRkciAgICAgICAgICAgICAgICAgICApCisJICAgICAKKwkpOworCisgICAgLy8gV0IgVG8gTWVtb3J5IFNpZ25hbCBNYXBwaW5nCisgICAgbWJpc3RfbWVtX3dyYXBwZXIgIygKKwkgLkJJU1RfTk9fU1JBTSAgICAgICAgICAgKEJJU1RfTk9fU1JBTSAgICAgICAgICAgKSwKKyAgICAJIC5CSVNUX0FERFJfV0QgICAgICAgICAgIChCSVNUX0FERFJfV0QgICAgICAgICAgICksCisgICAgCSAuQklTVF9EQVRBX1dEICAgICAgICAgICAoQklTVF9EQVRBX1dEICAgICAgICAgICApCisgICAgICAgICAgICAgICkgdV9tZW1fd3JhcHBlcl8oCisgICAgCSAgICAgICAgICAgICAgICAucnN0X24gICAgICAgICAgIChzcnN0X24gICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgLy8gV0IgSS9GCisJCSAgICAgICAgLnNyYW1faWQgICAgICAgICAoTk9fU1JBTV9XRCcoc3JhbV9ubykgICAgICApLAorICAgICAgICAgICAgICAgICAgICAgICAgLndiX2Nsa19pICAgICAgICAod2JfY2xrMl9pICAgICAgICAgICAgICAgICApLCAgLy8gU3lzdGVtIGNsb2NrCisJCQkubWVtX2NzICAgICAgICAgIChtZW1fY3MgICAgICAgICAgICAgICAgICAgICksICAvLyBDaGlwIFNlbGVjdAorICAgICAgICAgICAgICAgICAgICAgICAgLm1lbV9yZXEgICAgICAgICAobWVtX3JlcSAgICAgICAgICAgICAgICAgICApLCAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAgICAgICAgICAgICAgICAgICAgIC5tZW1fYWRkciAgICAgICAgKG1lbV9hZGRyICAgICAgICAgICAgICAgICAgKSwgIC8vIGFkZHJlc3MKKyAgICAgICAgICAgICAgICAgICAgICAgIC5tZW1fd2UgICAgICAgICAgKG1lbV93ZSAgICAgICAgICAgICAgICAgICAgKSwgIC8vIHdyaXRlCisgICAgICAgICAgICAgICAgICAgICAgICAubWVtX3dkYXRhICAgICAgIChtZW1fd2RhdGEgICAgICAgICAgICAgICAgICksICAvLyBkYXRhIG91dHB1dAorICAgICAgICAgICAgICAgICAgICAgICAgLm1lbV93bWFzayAgICAgICAobWVtX3dtYXNrICAgICAgICAgICAgICAgICApLCAgLy8gYnl0ZSBlbmFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgIC5tZW1fcmRhdGEgICAgICAgKHdiX2RhdFtzcmFtX25vXSAgICAgICAgICAgKSwgIC8vIGRhdGEgaW5wdXQKKyAgICAgICAgICAgICAgICAgICAgLy8gTUVNIEEgUE9SVCAKKyAgICAgICAgICAgICAgICAgICAgICAgIC5mdW5jX2NsayAgICAgICAgKGZ1bmNfY2xrW3NyYW1fbm9dICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIC5mdW5jX2NlbiAgICAgICAgKGZ1bmNfY2VuW3NyYW1fbm9dICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIC5mdW5jX3dlYiAgICAgICAgKGZ1bmNfd2ViW3NyYW1fbm9dICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIC5mdW5jX21hc2sgICAgICAgKGZ1bmNfbWFza1tzcmFtX25vXSAgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIC5mdW5jX2FkZHIgICAgICAgKGZ1bmNfYWRkcltzcmFtX25vXSAgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIC5mdW5jX2RpbiAgICAgICAgKGZ1bmNfZGluW3NyYW1fbm9dICAgICAgICAgKSwgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAuZnVuY19kb3V0ICAgICAgIChmdW5jX2RvdXRbc3JhbV9ub10gICAgICAgICkKKyAgICAgICAgICk7CisKKworbWJpc3RfbXV4ICAKKyAgICAgICMoCisJIC5CSVNUX0FERFJfV0QgICAgICAgICAgIChCSVNUX0FERFJfV0QgICAgICAgICAgICksCisJIC5CSVNUX0RBVEFfV0QgICAgICAgICAgIChCSVNUX0RBVEFfV0QgICAgICAgICAgICksCisJIC5CSVNUX0FERFJfU1RBUlQgICAgICAgIChCSVNUX0FERFJfU1RBUlQgICAgICAgICksCisJIC5CSVNUX0FERFJfRU5EICAgICAgICAgIChCSVNUX0FERFJfRU5EICAgICAgICAgICksCisJIC5CSVNUX1JFUEFJUl9BRERSX1NUQVJUIChCSVNUX1JFUEFJUl9BRERSX1NUQVJUICksCisJIC5CSVNUX1JBRF9XRF9JICAgICAgICAgIChCSVNUX1JBRF9XRF9JICAgICAgICAgICksCisJIC5CSVNUX1JBRF9XRF9PICAgICAgICAgIChCSVNUX1JBRF9XRF9PICAgICAgICAgICkKKyAgICAgICAgICApCisgICAgICAgdV9tZW1fc2VsICgKKworCSAgICAgICAgICAgIC5zY2FuX21vZGUgICAgICAgICAgICAoMSdiMCAgICAgICAgICAgICAgICAgICAgICAgKSwKKworICAgICAgICAgICAgICAgICAgICAucnN0X24gICAgICAgICAgICAgICAgKHNyc3RfbiAgICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgIC8vIE1CSVNUIENUUkwgU0lHTkFMCisgICAgICAgICAgICAgICAgICAgIC5iaXN0X2VuICAgICAgICAgICAgICAoYmlzdF9lbiAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgLmJpc3RfYWRkciAgICAgICAgICAgIChiaXN0X2FkZHIgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgICAgICAuYmlzdF93ZGF0YSAgICAgICAgICAgKGJpc3Rfd2RhdGEgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5iaXN0X2NsayAgICAgICAgICAgICAod2JfY2xrMl9pICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgLmJpc3Rfd3IgICAgICAgICAgICAgIChiaXN0X3dyICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgICAgICAuYmlzdF9yZCAgICAgICAgICAgICAgKGJpc3RfcmQgICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5iaXN0X2Vycm9yICAgICAgICAgICAoYmlzdF9lcnJvcl9jb3JyZWN0W3NyYW1fbm9dKSwKKyAgICAgICAgICAgICAgICAgICAgLmJpc3RfZXJyb3JfYWRkciAgICAgIChiaXN0X2Vycm9yX2FkZHJbc3JhbV9ub10gICApLAorICAgICAgICAgICAgICAgICAgICAuYmlzdF9jb3JyZWN0ICAgICAgICAgKGJpc3RfY29ycmVjdFtzcmFtX25vXSAgICAgICksCisJCSAgICAuYmlzdF9zZGkgICAgICAgICAgICAgKGJpc3RfbXNfc2RpW3NyYW1fbm9dICAgICAgICksCisJCSAgICAuYmlzdF9sb2FkICAgICAgICAgICAgKGJpc3RfbG9hZCAgICAgICAgICAgICAgICAgICksCisJCSAgICAuYmlzdF9zaGlmdCAgICAgICAgICAgKGJpc3Rfc2hpZnQgICAgICAgICAgICAgICAgICksCisJCSAgICAuYmlzdF9zZG8gICAgICAgICAgICAgKGJpc3RfbXNfc2RvW3NyYW1fbm9dICAgICAgICksCisKKyAgICAgICAgICAgICAgICAgICAgLy8gRlVOQ1RJT05BTCBDVFJMIFNJR05BTAorICAgICAgICAgICAgICAgICAgICAuZnVuY19jbGsgICAgICAgICAgICAgKGZ1bmNfY2xrW3NyYW1fbm9dICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5mdW5jX2NlbiAgICAgICAgICAgICAoZnVuY19jZW5bc3JhbV9ub10gICAgICAgICAgKSwKKwkgICAgICAgICAgICAuZnVuY193ZWIgICAgICAgICAgICAgKGZ1bmNfd2ViW3NyYW1fbm9dICAgICAgICAgICksCisJICAgICAgICAgICAgLmZ1bmNfbWFzayAgICAgICAgICAgIChmdW5jX21hc2tbc3JhbV9ub10gICAgICAgICApLAorICAgICAgICAgICAgICAgICAgICAuZnVuY19hZGRyICAgICAgICAgICAgKGZ1bmNfYWRkcltzcmFtX25vXSAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5mdW5jX2RpbiAgICAgICAgICAgICAoZnVuY19kaW5bc3JhbV9ub10gICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgLmZ1bmNfZG91dCAgICAgICAgICAgIChmdW5jX2RvdXRbc3JhbV9ub10gICAgICAgICApLAorCisKKyAgICAgICAgICAgICAgICAgICAgLy8gdG93YXJkcyBtZW1vcnkKKyAgICAgICAgICAgICAgICAgICAgLy8gTWVtb3J5IE91dCBQb3J0CisgICAgICAgICAgICAgICAgICAgIC5tZW1fY2xrICAgICAgICAgICAgIChtZW1fY2xrX2Fbc3JhbV9ub10gICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgLm1lbV9jZW4gICAgICAgICAgICAgKG1lbV9jZW5fYVtzcmFtX25vXSAgICAgICAgICApLAorICAgICAgICAgICAgICAgICAgICAubWVtX3dlYiAgICAgICAgICAgICAobWVtX3dlYl9hW3NyYW1fbm9dICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5tZW1fbWFzayAgICAgICAgICAgIChtZW1fbWFza19hX2lbc3JhbV9ub10gICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgLm1lbV9hZGRyICAgICAgICAgICAgKG1lbV9hZGRyX2FfaVtzcmFtX25vXSAgICAgICApLAorICAgICAgICAgICAgICAgICAgICAubWVtX2RpbiAgICAgICAgICAgICAobWVtX2Rpbl9hX2lbc3JhbV9ub10gICAgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5tZW1fZG91dCAgICAgICAgICAgIChtZW1fZG91dF9hX2lbc3JhbV9ub10gICAgICAgKQorCisgICAgKTsKK2VuZAorZW5kZ2VuZXJhdGUKKworZW5kbW9kdWxlCisKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL21iaXN0L3NyYy90b3AvbWJpc3RfdG9wMS5zdiBiL3Zlcmlsb2cvcnRsL21iaXN0L3NyYy90b3AvbWJpc3RfdG9wMS5zdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGZkYmZkCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvbWJpc3Qvc3JjL3RvcC9tYmlzdF90b3AxLnN2CkBAIC0wLDAgKzEsNDY5IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEgLCBEaW5lc2ggQW5uYXl5YSAgICAgICAgICAgICAgICAgICAgICAgICAgCisvLyAKKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogQ3JlYXRlZCBieSBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIE1CSVNUIFRPUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBtYmlzdF9jdHJsIGNvcmVzIHByb2plY3QgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHBzOi8vZ2l0aHViLmNvbS9kaW5lc2hhbm5heXlhL21iaXN0X2N0cmwuZ2l0ICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICBUaGlzIGJsb2NrIGludGVncmF0ZSBtYmlzdCBjb250cm9sbGVyIHdpdGggcm93ICAgICAgICAgIC8vLy8KKy8vLy8gICAgICByZWRlbmRlbmN5IGZlYXR1cmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcihzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAtIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFJldmlzaW9uIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC4wIC0gMTF0aCBPY3QgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgSW5pdGlhbCBpbnRlZ3JhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC4xIC0gMjZ0aCBPY3QgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgRml4ZWQgRXJyb3IgQWRkcmVzcyBhcmUgc2VyaWFsIHNoaWZ0ZWQgdGhyb3VnaCAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgc2RpL3NkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworYGluY2x1ZGUgIm1iaXN0X2RlZi5zdmgiCittb2R1bGUgbWJpc3RfdG9wMSAKKyAgICAgIyggIAorCSBwYXJhbWV0ZXIgQklTVF9BRERSX1dEICAgICAgICAgICA9IDksCisJIHBhcmFtZXRlciBCSVNUX0RBVEFfV0QgICAgICAgICAgID0gMzIsCisJIHBhcmFtZXRlciBCSVNUX0FERFJfU1RBUlQgICAgICAgID0gOSdoMDAwLAorCSBwYXJhbWV0ZXIgQklTVF9BRERSX0VORCAgICAgICAgICA9IDknaDFGQiwKKwkgcGFyYW1ldGVyIEJJU1RfUkVQQUlSX0FERFJfU1RBUlQgPSA5J2gxRkMsCisJIHBhcmFtZXRlciBCSVNUX1JBRF9XRF9JICAgICAgICAgID0gQklTVF9BRERSX1dELAorCSBwYXJhbWV0ZXIgQklTVF9SQURfV0RfTyAgICAgICAgICA9IEJJU1RfQUREUl9XRCkgKAorCitgaWZkZWYgVVNFX1BPV0VSX1BJTlMKKyAgICBpbm91dCB2Y2NkMSwJLy8gVXNlciBhcmVhIDEgMS44ViBzdXBwbHkKKyAgICBpbm91dCB2c3NkMSwJLy8gVXNlciBhcmVhIDEgZGlnaXRhbCBncm91bmQKK2BlbmRpZgorCisgICAgLy8gQ2xvY2sgU2tldyBBZGp1c3QKKyAgICAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgd2JkX2Nsa19pbnQsIAorICAgICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICB3YmRfY2xrX21iaXN0LAorICAgICAgIGlucHV0ICAgbG9naWMgWzM6MF0gICAgICAgICAgICAgICAgICBjZmdfY3NrYV9tYmlzdCwgLy8gY2xvY2sgc2tldyBhZGp1c3QgZm9yIHdlYiBob3N0CisKKwlpbnB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICByc3RfbiwKKworCS8vIE1CSVNUIEkvRgorCWlucHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgIGJpc3RfZW4sCisJaW5wdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgYmlzdF9ydW4sCisJaW5wdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgYmlzdF9zaGlmdCwKKwlpbnB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICBiaXN0X2xvYWQsCisJaW5wdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgYmlzdF9zZGksCisKKwlvdXRwdXQgbG9naWMgWzM6MF0gICAgICAgICAgICAgICAgICBiaXN0X2Vycm9yX2NudCwKKwlvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICBiaXN0X2NvcnJlY3QsCisJb3V0cHV0IGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgYmlzdF9lcnJvciwKKwlvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICBiaXN0X2RvbmUsCisJb3V0cHV0IGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgYmlzdF9zZG8sCisKKworICAgICAgICAvLyBXQiBJL0YKKyAgICAgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgd2JfY2xrX2ksICAvLyBTeXN0ZW0gY2xvY2sKKyAgICAgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgd2JfY3ljX2ksICAvLyBzdHJvYmUvcmVxdWVzdAorICAgICAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICB3Yl9zdGJfaSwgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgICAgIGlucHV0ICAgbG9naWMgW0JJU1RfQUREUl9XRC0xOjBdICAgIHdiX2Fkcl9pLCAgLy8gYWRkcmVzcworICAgICAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICB3Yl93ZV9pICwgIC8vIHdyaXRlCisgICAgICAgIGlucHV0ICAgbG9naWMgW0JJU1RfREFUQV9XRC0xOjBdICAgIHdiX2RhdF9pLCAgLy8gZGF0YSBvdXRwdXQKKyAgICAgICAgaW5wdXQgICBsb2dpYyBbQklTVF9EQVRBX1dELzgtMTowXSAgd2Jfc2VsX2ksICAvLyBieXRlIGVuYWJsZQorICAgICAgICBvdXRwdXQgIGxvZ2ljIFtCSVNUX0RBVEFfV0QtMTowXSAgICB3Yl9kYXRfbywgIC8vIGRhdGEgaW5wdXQKKyAgICAgICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgd2JfYWNrX28sICAvLyBhY2tub3dsZWdlbWVudAorICAgICAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICB3Yl9lcnJfbywgIC8vIGVycm9yCisKKyAgICAgLy8gdG93YXJkcyBtZW1vcnkKKyAgICAgLy8gUE9SVC1BCisgICAgICAgIG91dHB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgIG1lbV9jbGtfYSwKKyAgICAgICAgb3V0cHV0IGxvZ2ljICAgW0JJU1RfQUREUl9XRC0xOjBdbWVtX2FkZHJfYSwKKyAgICAgICAgb3V0cHV0IGxvZ2ljICAgICAgICAgICAgICAgICAgICAgbWVtX2Nlbl9hLAorICAgICAgICBvdXRwdXQgbG9naWMgICBbQklTVF9EQVRBX1dELTE6MF1tZW1fZGluX2IsCisgICAgIC8vIFBPUlQtQgorICAgICAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICBtZW1fY2xrX2IsCisgICAgICAgIG91dHB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgIG1lbV9jZW5fYiwKKyAgICAgICAgb3V0cHV0IGxvZ2ljICAgICAgICAgICAgICAgICAgICAgbWVtX3dlYl9iLAorICAgICAgICBvdXRwdXQgbG9naWMgW0JJU1RfREFUQV9XRC84LTE6MF1tZW1fbWFza19iLAorICAgICAgICBvdXRwdXQgbG9naWMgICBbQklTVF9BRERSX1dELTE6MF1tZW1fYWRkcl9iLAorICAgICAgICBpbnB1dCAgbG9naWMgICBbQklTVF9EQVRBX1dELTE6MF1tZW1fZG91dF9hCisKKworCisKKyk7CisKKy8vIEZVTkNUSU9OQUwgQSBQT1JUIAorbG9naWMgICAgICAgICAgICAgICAgICAgIGZ1bmNfY2xrX2E7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgZnVuY19jZW5fYTsKK2xvZ2ljICBbQklTVF9BRERSX1dELTE6MF1mdW5jX2FkZHJfYTsKK2xvZ2ljICBbQklTVF9EQVRBX1dELTE6MF1mdW5jX2RvdXRfYTsKKworLy8gRnVuY3Rpb25hbCBCIFBvcnQKK2xvZ2ljICAgICAgICAgICAgICAgICAgICBmdW5jX2Nsa19iOworbG9naWMgICAgICAgICAgICAgICAgICAgIGZ1bmNfY2VuX2I7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgZnVuY193ZWJfYjsKK2xvZ2ljIFtCSVNUX0RBVEFfV0QvOC0xOjBdZnVuY19tYXNrX2I7Citsb2dpYyAgW0JJU1RfQUREUl9XRC0xOjBdZnVuY19hZGRyX2I7Citsb2dpYyAgW0JJU1RfREFUQV9XRC0xOjBdZnVuY19kaW5fYjsKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTG9jYWwgdmFyaWFibGUgZGVmaW5hdGlvbgorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLworbG9naWMgICAgICAgICAgICAgICAgICAgIHNyc3RfbiAgICAgOyAvLyBzeW5jIHJlc2V0IHcuci50IGJpc3RfY2xrCitsb2dpYyAgICAgICAgICAgICAgICAgICAgY21kX3BoYXNlICA7ICAvLyBDb21tYW5kIFBoYXNlCitsb2dpYyAgICAgICAgICAgICAgICAgICAgY21wX3BoYXNlICA7ICAvLyBDb21wYXJlIFBoYXNlCitsb2dpYyAgICAgICAgICAgICAgICAgICAgcnVuX29wICAgICA7ICAvLyBSdW4gbmV4dCBPcGVyYXRpb24KK2xvZ2ljICAgICAgICAgICAgICAgICAgICBydW5fYWRkciAgIDsgIC8vIFJ1biBOZXh0IEFkZHJlc3MKK2xvZ2ljICAgICAgICAgICAgICAgICAgICBydW5fc3RpICAgIDsgIC8vIFJ1biBOZXh0IFN0aW11bHVzCitsb2dpYyAgICAgICAgICAgICAgICAgICAgcnVuX3BhdCAgICA7ICAvLyBSdW4gTmV4dCBQYXR0ZXJuCitsb2dpYyAgICAgICAgICAgICAgICAgICAgb3BfdXBkb3duICA7ICAvLyBBZHJlc3MgdXBkb3duIGRpcmVjdGlvbgorbG9naWMgICAgICAgICAgICAgICAgICAgIGxhc3RfYWRkciAgOyAgLy8gbGFzdCBhZGRyZXNzIGluZGljYXRpb24KK2xvZ2ljICAgICAgICAgICAgICAgICAgICBsYXN0X3N0aSAgIDsgIC8vIGxhc3Qgc3RpbXVsdXMKK2xvZ2ljICAgICAgICAgICAgICAgICAgICBsYXN0X29wICAgIDsgIC8vIGxhc3Qgb3BlcmF0aW9uCitsb2dpYyAgICAgICAgICAgICAgICAgICAgbGFzdF9wYXQgICA7ICAvLyBsYXN0IHBhdHRlcm4KK2xvZ2ljIFtCSVNUX0RBVEFfV0QtMTowXSBwYXRfZGF0YSAgIDsgIC8vIFNlbGVjdGVkIERhdGEgUGF0dGVybgorbG9naWMgW0JJU1RfU1RJX1dELTE6MF0gIHN0aW11bHVzICAgOyAgLy8gY3VycmVudCBzdGltdWx1cworbG9naWMgICAgICAgICAgICAgICAgICAgIGNvbXBhcmUgICAgOyAgLy8gY29tcGFyZSBkYXRhCitsb2dpYyAgICAgICAgICAgICAgICAgICAgb3BfcmVwZWF0ZmxhZzsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICBvcF9yZXZlcnNlOworbG9naWMgICAgICAgICAgICAgICAgICAgIG9wX3JlYWQgICA7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgb3Bfd3JpdGUgICA7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgb3BfaW52ZXJ0ICAgOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gU0RJID0+IFNETyBkaWFzeSBjaGFpbgorLy8gYmlzdF9zZGkgPT4gYmlzdF9hZGRyX3NkbyA9PiAgYmlzdF9zdGlfc2RvID0+ICBiaXN0X29wX3NkbyA9PiBiaXN0X3BhdF9zZG8gPT4gYmlzdF9zZG8KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbG9naWMgICAgICAgICAgICAgICAgICAgIGJpc3RfYWRkcl9zZG8gICA7ICAgICAgICAgICAgICAgICAKK2xvZ2ljICAgICAgICAgICAgICAgICAgICBiaXN0X3N0aV9zZG8gICAgOyAgICAgICAgICAgICAgICAgCitsb2dpYyAgICAgICAgICAgICAgICAgICAgYmlzdF9vcF9zZG8gICAgIDsgICAgICAgICAgICAgICAgIAorbG9naWMgICAgICAgICAgICAgICAgICAgIGJpc3RfcGF0X3NkbyAgICA7ICAgICAgICAgICAgICAgICAKKworbG9naWMgICAgICAgICAgICAgICAgICAgIGJpc3RfZXJyb3JfY29ycmVjdCAgOworbG9naWMgIFtCSVNUX0FERFJfV0QtMTowXWJpc3RfZXJyb3JfYWRkciA7IC8vIGJpc3QgYWRkcmVzcworCitsb2dpYyAgW0JJU1RfQUREUl9XRC0xOjBdYmlzdF9hZGRyICAgICAgIDsgLy8gYmlzdCBhZGRyZXNzCitsb2dpYyBbQklTVF9EQVRBX1dELTE6MF0gYmlzdF93ZGF0YSAgICAgIDsgLy8gYmlzdCB3cml0ZSBkYXRhCitsb2dpYyAgICAgICAgICAgICAgICAgICAgYmlzdF93ciAgICAgICAgIDsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICBiaXN0X3JkICAgICAgICAgOworCisKK2Fzc2lnbiBiaXN0X3dyID0gKGNtZF9waGFzZSAmJiBvcF93cml0ZSk7Cithc3NpZ24gYmlzdF9yZCA9IChjbWRfcGhhc2UgJiYgb3BfcmVhZCk7CisKK2Fzc2lnbiBjb21wYXJlICAgID0gKGNtcF9waGFzZSAmJiBvcF9yZWFkKTsKK2Fzc2lnbiBiaXN0X3dkYXRhID0gKG9wX2ludmVydCkgPyB+cGF0X2RhdGEgOiBwYXRfZGF0YTsKKworLy8gQ2xvY2sgVHJlZSBicmFuY2hpbmcgdG8gYXZvaWQgY2xvY2sgbGF0ZW5jeSB0b3dhcmRzIFNSQU0gcGF0aAord2lyZSB3Yl9jbGtfYjEsd2JfY2xrX2IyOworY3RlY2hfY2xrX2J1ZiB1X2N0c193Yl9jbGtfYjEgKC5BICh3Yl9jbGtfaSksIC4gWCh3Yl9jbGtfYjEpKTsKK2N0ZWNoX2Nsa19idWYgdV9jdHNfd2JfY2xrX2IyICguQSAod2JfY2xrX2kpLCAuIFgod2JfY2xrX2IyKSk7CisKKy8vIHdiX2hvc3QgY2xvY2sgc2tldyBjb250cm9sCitjbGtfc2tld19hZGp1c3QgdV9za2V3X21iaXN0CisgICAgICAgKAorYGlmZGVmIFVTRV9QT1dFUl9QSU5TCisgICAgICAgICAgICAgICAudmNjZDEgICAgICAodmNjZDEgICAgICAgICAgICAgICAgICAgICAgKSwvLyBVc2VyIGFyZWEgMSAxLjhWIHN1cHBseQorICAgICAgICAgICAgICAgLnZzc2QxICAgICAgKHZzc2QxICAgICAgICAgICAgICAgICAgICAgICksLy8gVXNlciBhcmVhIDEgZGlnaXRhbCBncm91bmQKK2BlbmRpZgorCSAgICAgICAuY2xrX2luICAgICAod2JkX2Nsa19pbnQgICAgICAgICAgICAgICAgKSwgCisJICAgICAgIC5zZWwgICAgICAgIChjZmdfY3NrYV9tYmlzdCAgICAgICAgICAgICApLCAKKwkgICAgICAgLmNsa19vdXQgICAgKHdiZF9jbGtfbWJpc3QgICAgICAgICAgICAgICkgCisgICAgICAgKTsKKworcmVzZXRfc3luYyAgIHVfcmVzZXRfc3luYyAoCisJICAgICAgLnNjYW5fbW9kZSAgKDEnYjAgKSwKKyAgICAgICAgICAgICAgLmRjbGsgICAgICAgKHdiX2Nsa19iMSApLCAvLyBEZXN0aW5hdGlvbiBjbG9jayBkb21haW4KKwkgICAgICAuYXJzdF9uICAgICAocnN0X24gICAgICksIC8vIGFjdGl2ZSBsb3cgYXN5bmMgcmVzZXQKKyAgICAgICAgICAgICAgLnNyc3RfbiAgICAgKHNyc3RfbiAgICApCisgICAgICAgICAgKTsKKworCisKKy8vIGJpc3QgbWFpbiBjb250cm9sIEZTTQorCittYmlzdF9mc20gIAorICAgICAgIygKKwkgLkJJU1RfQUREUl9XRCAgICAgICAgICAgKEJJU1RfQUREUl9XRCAgICAgICAgICAgKSwKKwkgLkJJU1RfREFUQV9XRCAgICAgICAgICAgKEJJU1RfREFUQV9XRCAgICAgICAgICAgKSwKKwkgLkJJU1RfQUREUl9TVEFSVCAgICAgICAgKEJJU1RfQUREUl9TVEFSVCAgICAgICAgKSwKKwkgLkJJU1RfQUREUl9FTkQgICAgICAgICAgKEJJU1RfQUREUl9FTkQgICAgICAgICAgKSwKKwkgLkJJU1RfUkVQQUlSX0FERFJfU1RBUlQgKEJJU1RfUkVQQUlSX0FERFJfU1RBUlQgKSwKKwkgLkJJU1RfUkFEX1dEX0kgICAgICAgICAgKEJJU1RfUkFEX1dEX0kgICAgICAgICAgKSwKKwkgLkJJU1RfUkFEX1dEX08gICAgICAgICAgKEJJU1RfUkFEX1dEX08gICAgICAgICAgKQorICAgICAgICAgICkKKyAgICAgdV9mc20gKAorCisJICAgICAgICAgICAgLmNtZF9waGFzZSAgICAgICAgICAoY21kX3BoYXNlICAgICAgICAgICApLAorCSAgICAgICAgICAgIC5jbXBfcGhhc2UgICAgICAgICAgKGNtcF9waGFzZSAgICAgICAgICAgKSwKKwkgICAgICAgICAgICAucnVuX29wICAgICAgICAgICAgIChydW5fb3AgICAgICAgICAgICAgKSwKKwkgICAgICAgICAgICAucnVuX2FkZHIgICAgICAgICAgIChydW5fYWRkciAgICAgICAgICAgKSwKKwkgICAgICAgICAgICAucnVuX3N0aSAgICAgICAgICAgIChydW5fc3RpICAgICAgICAgICAgKSwKKwkgICAgICAgICAgICAucnVuX3BhdCAgICAgICAgICAgIChydW5fcGF0ICAgICAgICAgICAgKSwKKwkgICAgICAgICAgICAuYmlzdF9kb25lICAgICAgICAgIChiaXN0X2RvbmUgICAgICAgICAgKSwKKworCisJICAgICAgICAgICAgLmNsayAgICAgICAgICAgICAgICAod2JfY2xrX2IxICAgICAgICAgICksCisJICAgICAgICAgICAgLnJzdF9uICAgICAgICAgICAgICAoc3JzdF9uICAgICAgICAgICAgICksCisJICAgICAgICAgICAgLmJpc3RfcnVuICAgICAgICAgICAoYmlzdF9ydW4gICAgICAgICAgICksCisJICAgICAgICAgICAgLmxhc3Rfb3AgICAgICAgICAgICAobGFzdF9vcCAgICAgICAgICAgICksCisJICAgICAgICAgICAgLmxhc3RfYWRkciAgICAgICAgICAobGFzdF9hZGRyICAgICAgICAgICksCisJICAgICAgICAgICAgLmxhc3Rfc3RpICAgICAgICAgICAobGFzdF9zdGkgICAgICAgICAgICksCisJICAgICAgICAgICAgLmxhc3RfcGF0ICAgICAgICAgICAobGFzdF9wYXQgICAgICAgICAgICksCisJCSAgICAub3BfcmV2ZXJzZSAgICAgICAgIChvcF9yZXZlcnNlICAgICAgICAgKSwKKwkJICAgIC5iaXN0X2Vycm9yICAgICAgICAgKGJpc3RfZXJyb3IgICAgICAgICApCispOworCisKKy8vIGJpc3QgYWRkcmVzcyBnZW5lcmF0aW9uCittYmlzdF9hZGRyX2dlbiAgIAorICAgICAgIygKKwkgLkJJU1RfQUREUl9XRCAgICAgICAgICAgKEJJU1RfQUREUl9XRCAgICAgICAgICAgKSwKKwkgLkJJU1RfREFUQV9XRCAgICAgICAgICAgKEJJU1RfREFUQV9XRCAgICAgICAgICAgKSwKKwkgLkJJU1RfQUREUl9TVEFSVCAgICAgICAgKEJJU1RfQUREUl9TVEFSVCAgICAgICAgKSwKKwkgLkJJU1RfQUREUl9FTkQgICAgICAgICAgKEJJU1RfQUREUl9FTkQgICAgICAgICAgKSwKKwkgLkJJU1RfUkVQQUlSX0FERFJfU1RBUlQgKEJJU1RfUkVQQUlSX0FERFJfU1RBUlQgKSwKKwkgLkJJU1RfUkFEX1dEX0kgICAgICAgICAgKEJJU1RfUkFEX1dEX0kgICAgICAgICAgKSwKKwkgLkJJU1RfUkFEX1dEX08gICAgICAgICAgKEJJU1RfUkFEX1dEX08gICAgICAgICAgKQorICAgICAgICAgICkKKyAgICAgIHVfYWRkcl9nZW4oCisgICAgICAgICAgICAgICAgICAgIC5sYXN0X2FkZHIgICAgICAgICAgKGxhc3RfYWRkciAgICAgICAgICApLCAKKyAgICAgICAgICAgICAgICAgICAgLmJpc3RfYWRkciAgICAgICAgICAoYmlzdF9hZGRyICAgICAgICAgICksICAgCisgICAgICAgICAgICAgICAgICAgIC5zZG8gICAgICAgICAgICAgICAgKGJpc3RfYWRkcl9zZG8gICAgICApLCAgICAgICAgIAorCisgICAgICAgICAgICAgICAgICAgIC5jbGsgICAgICAgICAgICAgICAgKHdiX2Nsa19iMSAgICAgICAgICApLCAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAucnN0X24gICAgICAgICAgICAgIChzcnN0X24gICAgICAgICAgICAgKSwgICAgICAgCisgICAgICAgICAgICAgICAgICAgIC5ydW4gICAgICAgICAgICAgICAgKHJ1bl9hZGRyICAgICAgICAgICApLCAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAudXBkb3duICAgICAgICAgICAgIChvcF91cGRvd24gICAgICAgICAgKSwgICAgICAKKyAgICAgICAgICAgICAgICAgICAgLnNjYW5fc2hpZnQgICAgICAgICAoYmlzdF9zaGlmdCAgICAgICAgICksICAKKyAgICAgICAgICAgICAgICAgICAgLnNjYW5fbG9hZCAgICAgICAgICAoYmlzdF9sb2FkICAgICAgICAgICksICAgCisgICAgICAgICAgICAgICAgICAgIC5zZGkgICAgICAgICAgICAgICAgKGJpc3Rfc2RpICAgICAgICAgICApCisKKyk7CisKKworLy8gQklTVCBjdXJyZW50IHN0aW11bHVzIHNlbGVjdGlvbgorbWJpc3Rfc3RpX3NlbCAKKyAgICAgICMoCisJIC5CSVNUX0FERFJfV0QgICAgICAgICAgIChCSVNUX0FERFJfV0QgICAgICAgICAgICksCisJIC5CSVNUX0RBVEFfV0QgICAgICAgICAgIChCSVNUX0RBVEFfV0QgICAgICAgICAgICksCisJIC5CSVNUX0FERFJfU1RBUlQgICAgICAgIChCSVNUX0FERFJfU1RBUlQgICAgICAgICksCisJIC5CSVNUX0FERFJfRU5EICAgICAgICAgIChCSVNUX0FERFJfRU5EICAgICAgICAgICksCisJIC5CSVNUX1JFUEFJUl9BRERSX1NUQVJUIChCSVNUX1JFUEFJUl9BRERSX1NUQVJUICksCisJIC5CSVNUX1JBRF9XRF9JICAgICAgICAgIChCSVNUX1JBRF9XRF9JICAgICAgICAgICksCisJIC5CSVNUX1JBRF9XRF9PICAgICAgICAgIChCSVNUX1JBRF9XRF9PICAgICAgICAgICkKKyAgICAgICAgICApCisgICAgICAgdV9zdGlfc2VsKAorCisJICAgICAgICAgICAgLnNkbyAgICAgICAgICAgICAgICAoYmlzdF9zdGlfc2RvICAgICAgICksICAKKwkgICAgICAgICAgICAubGFzdF9zdGltdWx1cyAgICAgIChsYXN0X3N0aSAgICAgICAgICAgKSwgIAorICAgICAgICAgICAgICAgICAgICAuc3RpbXVsdXMgICAgICAgICAgIChzdGltdWx1cyAgICAgICAgICAgKSwKKworCSAgICAgICAgICAgIC5jbGsgICAgICAgICAgICAgICAgKHdiX2Nsa19iMSAgICAgICAgICApLCAgCisJICAgICAgICAgICAgLnJzdF9uICAgICAgICAgICAgICAoc3JzdF9uICAgICAgICAgICAgICksICAKKwkgICAgICAgICAgICAuc2Nhbl9zaGlmdCAgICAgICAgIChiaXN0X3NoaWZ0ICAgICAgICAgKSwgIAorCSAgICAgICAgICAgIC5zZGkgICAgICAgICAgICAgICAgKGJpc3RfYWRkcl9zZG8gICAgICApLCAgCisJICAgICAgICAgICAgLnJ1biAgICAgICAgICAgICAgICAocnVuX3N0aSAgICAgICAgICAgICkgICAgICAgICAgICAgIAorCispOworCisKKy8vIEJpc3QgT3BlcmF0aW9uIHNlbGVjdGlvbgorbWJpc3Rfb3Bfc2VsIAorICAgICAgIygKKwkgLkJJU1RfQUREUl9XRCAgICAgICAgICAgKEJJU1RfQUREUl9XRCAgICAgICAgICAgKSwKKwkgLkJJU1RfREFUQV9XRCAgICAgICAgICAgKEJJU1RfREFUQV9XRCAgICAgICAgICAgKSwKKwkgLkJJU1RfQUREUl9TVEFSVCAgICAgICAgKEJJU1RfQUREUl9TVEFSVCAgICAgICAgKSwKKwkgLkJJU1RfQUREUl9FTkQgICAgICAgICAgKEJJU1RfQUREUl9FTkQgICAgICAgICAgKSwKKwkgLkJJU1RfUkVQQUlSX0FERFJfU1RBUlQgKEJJU1RfUkVQQUlSX0FERFJfU1RBUlQgKSwKKwkgLkJJU1RfUkFEX1dEX0kgICAgICAgICAgKEJJU1RfUkFEX1dEX0kgICAgICAgICAgKSwKKwkgLkJJU1RfUkFEX1dEX08gICAgICAgICAgKEJJU1RfUkFEX1dEX08gICAgICAgICAgKQorICAgICAgICAgICkKKyAgICAgICAgdV9vcF9zZWwgKAorCisgICAgICAgICAgICAgICAgICAgIC5vcF9yZWFkICAgICAgICAgICAgKG9wX3JlYWQgICAgICAgICAgICApLCAKKwkgICAgICAgICAgICAub3Bfd3JpdGUgICAgICAgICAgIChvcF93cml0ZSAgICAgICAgICAgKSwKKwkgICAgICAgICAgICAub3BfaW52ZXJ0ICAgICAgICAgIChvcF9pbnZlcnQgICAgICAgICAgKSwKKwkgICAgICAgICAgICAub3BfdXBkb3duICAgICAgICAgIChvcF91cGRvd24gICAgICAgICAgKSwKKwkgICAgICAgICAgICAub3BfcmV2ZXJzZSAgICAgICAgIChvcF9yZXZlcnNlICAgICAgICAgKSwKKwkgICAgICAgICAgICAub3BfcmVwZWF0ZmxhZyAgICAgIChvcF9yZXBlYXRmbGFnICAgICAgKSwKKwkgICAgICAgICAgICAuc2RvICAgICAgICAgICAgICAgIChiaXN0X29wX3NkbyAgICAgICAgKSwKKwkgICAgICAgICAgICAubGFzdF9vcCAgICAgICAgICAgIChsYXN0X29wICAgICAgICAgICAgKSwKKworCSAgICAgICAgICAgIC5jbGsgICAgICAgICAgICAgICAgKHdiX2Nsa19iMSAgICAgICAgICApLAorCSAgICAgICAgICAgIC5yc3RfbiAgICAgICAgICAgICAgKHNyc3RfbiAgICAgICAgICAgICApLAorCSAgICAgICAgICAgIC5zY2FuX3NoaWZ0ICAgICAgICAgKGJpc3Rfc2hpZnQgICAgICAgICApLAorCSAgICAgICAgICAgIC5zZGkgICAgICAgICAgICAgICAgKGJpc3Rfc3RpX3NkbyAgICAgICApLAorCQkgICAgLnJlX2luaXQgICAgICAgICAgICAoYmlzdF9lcnJvcl9jb3JyZWN0ICksCisJICAgICAgICAgICAgLnJ1biAgICAgICAgICAgICAgICAocnVuX29wICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5zdGltdWx1cyAgICAgICAgICAgKHN0aW11bHVzICAgICAgICAgICApCisKKyAgICApOworCisKKworbWJpc3RfcGF0X3NlbCAKKyAgICAgICMoCisJIC5CSVNUX0FERFJfV0QgICAgICAgICAgIChCSVNUX0FERFJfV0QgICAgICAgICAgICksCisJIC5CSVNUX0RBVEFfV0QgICAgICAgICAgIChCSVNUX0RBVEFfV0QgICAgICAgICAgICksCisJIC5CSVNUX0FERFJfU1RBUlQgICAgICAgIChCSVNUX0FERFJfU1RBUlQgICAgICAgICksCisJIC5CSVNUX0FERFJfRU5EICAgICAgICAgIChCSVNUX0FERFJfRU5EICAgICAgICAgICksCisJIC5CSVNUX1JFUEFJUl9BRERSX1NUQVJUIChCSVNUX1JFUEFJUl9BRERSX1NUQVJUICksCisJIC5CSVNUX1JBRF9XRF9JICAgICAgICAgIChCSVNUX1JBRF9XRF9JICAgICAgICAgICksCisJIC5CSVNUX1JBRF9XRF9PICAgICAgICAgIChCSVNUX1JBRF9XRF9PICAgICAgICAgICkKKyAgICAgICAgICApCisgICAgICB1X3BhdF9zZWwgKAorICAgICAgICAgICAgICAgICAgICAucGF0X2xhc3QgICAgICAgICAgIChsYXN0X3BhdCAgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgLnBhdF9kYXRhICAgICAgICAgICAocGF0X2RhdGEgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5zZG8gICAgICAgICAgICAgICAgKGJpc3RfcGF0X3NkbyAgICAgICApLAorICAgICAgICAgICAgICAgICAgICAuY2xrICAgICAgICAgICAgICAgICh3Yl9jbGtfYjEgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgLnJzdF9uICAgICAgICAgICAgICAoc3JzdF9uICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5ydW4gICAgICAgICAgICAgICAgKHJ1bl9wYXQgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgICAgICAuc2Nhbl9zaGlmdCAgICAgICAgIChiaXN0X3NoaWZ0ICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgLnNkaSAgICAgICAgICAgICAgICAoYmlzdF9vcF9zZG8gICAgICAgICkKKworICAgKTsKKworCittYmlzdF9kYXRhX2NtcCAgCisgICAgICAjKAorCSAuQklTVF9BRERSX1dEICAgICAgICAgICAoQklTVF9BRERSX1dEICAgICAgICAgICApLAorCSAuQklTVF9EQVRBX1dEICAgICAgICAgICAoQklTVF9EQVRBX1dEICAgICAgICAgICApLAorCSAuQklTVF9BRERSX1NUQVJUICAgICAgICAoQklTVF9BRERSX1NUQVJUICAgICAgICApLAorCSAuQklTVF9BRERSX0VORCAgICAgICAgICAoQklTVF9BRERSX0VORCAgICAgICAgICApLAorCSAuQklTVF9SRVBBSVJfQUREUl9TVEFSVCAoQklTVF9SRVBBSVJfQUREUl9TVEFSVCApLAorCSAuQklTVF9SQURfV0RfSSAgICAgICAgICAoQklTVF9SQURfV0RfSSAgICAgICAgICApLAorCSAuQklTVF9SQURfV0RfTyAgICAgICAgICAoQklTVF9SQURfV0RfTyAgICAgICAgICApCisgICAgICAgICAgKQorCisKKyAgICAgdV9jbXAgKAorICAgICAgICAgICAgICAgICAgICAuZXJyb3IgICAgICAgICAgICAgIChiaXN0X2Vycm9yICAgICAgICAgKSwKKwkJICAgIC5lcnJvcl9jb3JyZWN0ICAgICAgKGJpc3RfZXJyb3JfY29ycmVjdCApLAorCQkgICAgLmNvcnJlY3QgICAgICAgICAgICAoICAgICAgICAgICAgICAgICAgICksIC8vIHNhbWUgc2lnbmFsIGF2YWlsYWJsZSBhdCBiaXN0IG11eAorCQkgICAgLmVycm9yX2FkZHIgICAgICAgICAoYmlzdF9lcnJvcl9hZGRyICAgICksCisJCSAgICAuZXJyb3JfY250ICAgICAgICAgIChiaXN0X2Vycm9yX2NudCAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgLmNsayAgICAgICAgICAgICAgICAod2JfY2xrX2IxICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5yc3RfbiAgICAgICAgICAgICAgKHNyc3RfbiAgICAgICAgICAgICApLAorCQkgICAgLmFkZHJfaW5jX3BoYXNlICAgICAocnVuX2FkZHIgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5jb21wYXJlICAgICAgICAgICAgKGNvbXBhcmUgICAgICAgICAgICApLCAKKwkgICAgICAgICAgICAucmVhZF9pbnZlcnQgICAgICAgIChvcF9pbnZlcnQgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgLmNvbXBfZGF0YSAgICAgICAgICAocGF0X2RhdGEgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5yeGRfZGF0YSAgICAgICAgICAgKGZ1bmNfZG91dF9hICAgICAgICApLAorCQkgICAgLmFkZHIgICAgICAgICAgICAgICAoYmlzdF9hZGRyICAgICAgICAgICkKKwkgICAgIAorCSk7CisKKworbWJpc3RfbWVtX3dyYXBwZXIgIygKKwkgLkJJU1RfQUREUl9XRCAgICAgICAgICAgKEJJU1RfQUREUl9XRCAgICAgICAgICAgKSwKKwkgLkJJU1RfREFUQV9XRCAgICAgICAgICAgKEJJU1RfREFUQV9XRCAgICAgICAgICAgKQorICAgICAgICAgICkgdV9tZW1fd3JhcHBlcigKKwkgICAgICAgICAgICAucnN0X24gICAgICAgICAgIChzcnN0X24gICAgICAgICAgICksCisgICAgICAgICAgICAgICAvLyBXQiBJL0YKKyAgICAgICAgICAgICAgICAgICAgLndiX2Nsa19pICAgICAgICAod2JfY2xrX2IyICAgICAgICApLCAgLy8gU3lzdGVtIGNsb2NrCisgICAgICAgICAgICAgICAgICAgIC53Yl9jeWNfaSAgICAgICAgKHdiX2N5Y19pICAgICAgICAgKSwgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgICAgICAgICAgICAgICAgIC53Yl9zdGJfaSAgICAgICAgKHdiX3N0Yl9pICAgICAgICAgKSwgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgICAgICAgICAgICAgICAgIC53Yl9hZHJfaSAgICAgICAgKHdiX2Fkcl9pICAgICAgICAgKSwgIC8vIGFkZHJlc3MKKyAgICAgICAgICAgICAgICAgICAgLndiX3dlX2kgICAgICAgICAod2Jfd2VfaSAgICAgICAgICApLCAgLy8gd3JpdGUKKyAgICAgICAgICAgICAgICAgICAgLndiX2RhdF9pICAgICAgICAod2JfZGF0X2kgICAgICAgICApLCAgLy8gZGF0YSBvdXRwdXQKKyAgICAgICAgICAgICAgICAgICAgLndiX3NlbF9pICAgICAgICAod2Jfc2VsX2kgICAgICAgICApLCAgLy8gYnl0ZSBlbmFibGUKKyAgICAgICAgICAgICAgICAgICAgLndiX2RhdF9vICAgICAgICAod2JfZGF0X28gICAgICAgICApLCAgLy8gZGF0YSBpbnB1dAorICAgICAgICAgICAgICAgICAgICAud2JfYWNrX28gICAgICAgICh3Yl9hY2tfbyAgICAgICAgICksICAvLyBhY2tub3dsZWdlbWVudAorICAgICAgICAgICAgICAgICAgICAud2JfZXJyX28gICAgICAgICh3Yl9lcnJfbyAgICAgICAgICksICAvLyBlcnJvcgorICAgICAgICAgICAgICAgIC8vIE1FTSBBIFBPUlQgCisgICAgICAgICAgICAgICAgICAgIC5mdW5jX2Nsa19hICAgICAgKGZ1bmNfY2xrX2EgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgLmZ1bmNfY2VuX2EgICAgICAoZnVuY19jZW5fYSAgICAgICApLAorICAgICAgICAgICAgICAgICAgICAuZnVuY19hZGRyX2EgICAgIChmdW5jX2FkZHJfYSAgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5mdW5jX2RvdXRfYSAgICAgKGZ1bmNfZG91dF9hICAgICAgKSwKKyAgCisgICAgICAgICAgICAgICAgLy8gRnVuY3Rpb25hbCBCIFBvcnQKKyAgICAgICAgICAgICAgICAgICAgLmZ1bmNfY2xrX2IgICAgICAoZnVuY19jbGtfYiAgICAgICApLAorICAgICAgICAgICAgICAgICAgICAuZnVuY19jZW5fYiAgICAgIChmdW5jX2Nlbl9iICAgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5mdW5jX3dlYl9iICAgICAgKGZ1bmNfd2ViX2IgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgLmZ1bmNfbWFza19iICAgICAoZnVuY19tYXNrX2IgICAgICApLAorICAgICAgICAgICAgICAgICAgICAuZnVuY19hZGRyX2IgICAgIChmdW5jX2FkZHJfYiAgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5mdW5jX2Rpbl9iICAgICAgKGZ1bmNfZGluX2IgICAgICAgKSAgICAgCisgICAgICk7CisKKworbWJpc3RfbXV4ICAKKyAgICAgICMoCisJIC5CSVNUX0FERFJfV0QgICAgICAgICAgIChCSVNUX0FERFJfV0QgICAgICAgICAgICksCisJIC5CSVNUX0RBVEFfV0QgICAgICAgICAgIChCSVNUX0RBVEFfV0QgICAgICAgICAgICksCisJIC5CSVNUX0FERFJfU1RBUlQgICAgICAgIChCSVNUX0FERFJfU1RBUlQgICAgICAgICksCisJIC5CSVNUX0FERFJfRU5EICAgICAgICAgIChCSVNUX0FERFJfRU5EICAgICAgICAgICksCisJIC5CSVNUX1JFUEFJUl9BRERSX1NUQVJUIChCSVNUX1JFUEFJUl9BRERSX1NUQVJUICksCisJIC5CSVNUX1JBRF9XRF9JICAgICAgICAgIChCSVNUX1JBRF9XRF9JICAgICAgICAgICksCisJIC5CSVNUX1JBRF9XRF9PICAgICAgICAgIChCSVNUX1JBRF9XRF9PICAgICAgICAgICkKKyAgICAgICAgICApCisgICAgICAgdV9tZW1fc2VsICgKKworCSAgICAgICAgICAgIC5zY2FuX21vZGUgICAgICAgICAgICAoMSdiMCAgICAgICAgICApLAorCisgICAgICAgICAgICAgICAgICAgIC5yc3RfbiAgICAgICAgICAgICAgICAoc3JzdF9uICAgICAgICApLAorICAgICAgICAgICAgICAgICAgICAvLyBNQklTVCBDVFJMIFNJR05BTAorICAgICAgICAgICAgICAgICAgICAuYmlzdF9lbiAgICAgICAgICAgICAgKGJpc3RfZW4gICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgLmJpc3RfYWRkciAgICAgICAgICAgIChiaXN0X2FkZHIgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5iaXN0X3dkYXRhICAgICAgICAgICAoYmlzdF93ZGF0YSAgICApLAorICAgICAgICAgICAgICAgICAgICAuYmlzdF9jbGsgICAgICAgICAgICAgKHdiX2Nsa19iMiAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgLmJpc3Rfd3IgICAgICAgICAgICAgIChiaXN0X3dyICAgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5iaXN0X3JkICAgICAgICAgICAgICAoYmlzdF9yZCAgICAgICApLAorICAgICAgICAgICAgICAgICAgICAuYmlzdF9lcnJvciAgICAgICAgICAgKGJpc3RfZXJyb3JfY29ycmVjdCksCisgICAgICAgICAgICAgICAgICAgIC5iaXN0X2Vycm9yX2FkZHIgICAgICAoYmlzdF9lcnJvcl9hZGRyKSwKKyAgICAgICAgICAgICAgICAgICAgLmJpc3RfY29ycmVjdCAgICAgICAgIChiaXN0X2NvcnJlY3QgICksCisJCSAgICAuYmlzdF9zZGkgICAgICAgICAgICAgKGJpc3RfcGF0X3NkbyksCisJCSAgICAuYmlzdF9zaGlmdCAgICAgICAgICAgKGJpc3Rfc2hpZnQpLAorCQkgICAgLmJpc3Rfc2RvICAgICAgICAgICAgIChiaXN0X3NkbyksCisKKyAgICAgICAgICAgICAgICAgICAgLy8gRlVOQ1RJT05BTCBDVFJMIFNJR05BTAorICAgICAgICAgICAgICAgICAgICAuZnVuY19jbGtfYSAgICAgICAgICAoZnVuY19jbGtfYSAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgLmZ1bmNfY2VuX2EgICAgICAgICAgKGZ1bmNfY2VuX2EgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5mdW5jX2FkZHJfYSAgICAgICAgIChmdW5jX2FkZHJfYSAgICApLAorICAgICAgICAgICAgICAgICAgICAvLyBDb21tb24gZm9yIGZ1bmMgYW5kIE1iaXN0IGkvZgorICAgICAgICAgICAgICAgICAgICAuZnVuY19kb3V0X2EgICAgICAgICAoZnVuY19kb3V0X2EgICAgKSwKKworICAgICAgICAgICAgICAgICAgICAuZnVuY19jbGtfYiAgICAgICAgICAoZnVuY19jbGtfYiAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgLmZ1bmNfY2VuX2IgICAgICAgICAgKGZ1bmNfY2VuX2IgICAgICksCisJICAgICAgICAgICAgLmZ1bmNfd2ViX2IgICAgICAgICAgKGZ1bmNfd2ViX2IgICAgICksCisJICAgICAgICAgICAgLmZ1bmNfbWFza19iICAgICAgICAgKGZ1bmNfbWFza19iICAgICksCisgICAgICAgICAgICAgICAgICAgIC5mdW5jX2FkZHJfYiAgICAgICAgIChmdW5jX2FkZHJfYiAgICApLAorICAgICAgICAgICAgICAgICAgICAuZnVuY19kaW5fYiAgICAgICAgICAoZnVuY19kaW5fYiAgICAgKSwKKworCisgICAgICAgICAgICAgICAgICAgIC8vIHRvd2FyZHMgbWVtb3J5CisgICAgICAgICAgICAgICAgICAgIC8vIE1lbW9yeSBPdXQgUG9ydAorICAgICAgICAgICAgICAgICAgICAubWVtX2Nsa19hICAgICAgICAgICAobWVtX2Nsa19hICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgLm1lbV9jZW5fYSAgICAgICAgICAgKG1lbV9jZW5fYSAgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5tZW1fYWRkcl9hICAgICAgICAgIChtZW1fYWRkcl9hICAgICApLAorICAgICAgICAgICAgICAgICAgICAubWVtX2RvdXRfYSAgICAgICAgICAobWVtX2RvdXRfYSAgICAgKSwKKworICAgICAgICAgICAgICAgICAgICAvLyBNZW1vcnkgSW5wdXQgUG9ydAorICAgICAgICAgICAgICAgICAgICAubWVtX2Nsa19iICAgICAgICAgICAobWVtX2Nsa19iICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgLm1lbV9jZW5fYiAgICAgICAgICAgKG1lbV9jZW5fYiAgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5tZW1fd2ViX2IgICAgICAgICAgIChtZW1fd2ViX2IgICAgICApLAorICAgICAgICAgICAgICAgICAgICAubWVtX21hc2tfYiAgICAgICAgICAobWVtX21hc2tfYiAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgLm1lbV9hZGRyX2IgICAgICAgICAgKG1lbV9hZGRyX2IgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5tZW1fZGluX2IgICAgICAgICAgIChtZW1fZGluX2IgICAgICApCisgICAgKTsKKworCitlbmRtb2R1bGUKKwpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvbWJpc3Qvc3JjL3RvcC9tYmlzdF90b3AyLnN2IGIvdmVyaWxvZy9ydGwvbWJpc3Qvc3JjL3RvcC9tYmlzdF90b3AyLnN2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5NDMzZGYKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC9tYmlzdC9zcmMvdG9wL21iaXN0X3RvcDIuc3YKQEAgLTAsMCArMSw0NzkgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSAsIERpbmVzaCBBbm5heXlhICAgICAgICAgICAgICAgICAgICAgICAgICAKKy8vIAorLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBDcmVhdGVkIGJ5IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgTUJJU1QgVE9QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIG1iaXN0X2N0cmwgY29yZXMgcHJvamVjdCAgICAgICAgICAgLy8vLworLy8vLyAgaHR0cHM6Ly9naXRodWIuY29tL2RpbmVzaGFubmF5eWEvbWJpc3RfY3RybC5naXQgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgIFRoaXMgYmxvY2sgaW50ZWdyYXRlIG1iaXN0IGNvbnRyb2xsZXIgd2l0aCByb3cgICAgICAgICAgLy8vLworLy8vLyAgICAgIHJlZGVuZGVuY3kgZmVhdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVG8gRG86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICBub3RoaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgQXV0aG9yKHMpOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgIC0gRGluZXNoIEFubmF5eWEsIGRpbmVzaGFAb3BlbmNvcmVzLm9yZyAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgUmV2aXNpb24gOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAwLjAgLSAxMXRoIE9jdCAyMDIxLCBEaW5lc2ggQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICBJbml0aWFsIGludGVncmF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAwLjEgLSAyNnRoIE9jdCAyMDIxLCBEaW5lc2ggQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICBGaXhlZCBFcnJvciBBZGRyZXNzIGFyZSBzZXJpYWwgc2hpZnRlZCB0aHJvdWdoICAgICAgLy8vLworLy8vLyAgICAgICAgICBzZGkvc2RvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitgaW5jbHVkZSAibWJpc3RfZGVmLnN2aCIKK21vZHVsZSBtYmlzdF90b3AyIAorICAgICAjKCAgcGFyYW1ldGVyIFNDVyA9IDgsICAgLy8gU0NBTiBDSEFJTiBXSURUSAorICAgICAgICAgcGFyYW1ldGVyIEJJU1RfQUREUl9XRCAgICAgICAgICAgPSA4LAorCSBwYXJhbWV0ZXIgQklTVF9EQVRBX1dEICAgICAgICAgICA9IDMyLAorCSBwYXJhbWV0ZXIgQklTVF9BRERSX1NUQVJUICAgICAgICA9IDgnaDAwLAorCSBwYXJhbWV0ZXIgQklTVF9BRERSX0VORCAgICAgICAgICA9IDgnaEZCLAorCSBwYXJhbWV0ZXIgQklTVF9SRVBBSVJfQUREUl9TVEFSVCA9IDgnaEZDLAorCSBwYXJhbWV0ZXIgQklTVF9SQURfV0RfSSAgICAgICAgICA9IEJJU1RfQUREUl9XRCwKKwkgcGFyYW1ldGVyIEJJU1RfUkFEX1dEX08gICAgICAgICAgPSBCSVNUX0FERFJfV0QpICgKKworYGlmZGVmIFVTRV9QT1dFUl9QSU5TCisgICAgaW5vdXQgdmNjZDEsCS8vIFVzZXIgYXJlYSAxIDEuOFYgc3VwcGx5CisgICAgaW5vdXQgdnNzZDEsCS8vIFVzZXIgYXJlYSAxIGRpZ2l0YWwgZ3JvdW5kCitgZW5kaWYKKworICAgICAgIC8vIFNjYW4gSS9GCisgICAgICAgaW5wdXQgbG9naWMgICAgICAgICAgICAgc2Nhbl9lbiwKKyAgICAgICBpbnB1dCBsb2dpYyAgICAgICAgICAgICBzY2FuX21vZGUsCisgICAgICAgaW5wdXQgbG9naWMgW1NDVy0xOjBdICAgc2Nhbl9zaSwKKyAgICAgICBvdXRwdXQgbG9naWMgW1NDVy0xOjBdICBzY2FuX3NvLAorICAgICAgIG91dHB1dCBsb2dpYyAgICAgICAgICAgIHNjYW5fZW5fbywKKyAgICAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICBzY2FuX21vZGVfbywKKwkKKyAgICAvLyBDbG9jayBTa2V3IEFkanVzdAorICAgICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICB3YmRfY2xrX2ludCwgCisgICAgICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9jbGtfbWJpc3QsCisgICAgICAgaW5wdXQgICBsb2dpYyBbMzowXSAgICAgICAgICAgICAgICAgIGNmZ19jc2thX21iaXN0LCAvLyBjbG9jayBza2V3IGFkanVzdCBmb3Igd2ViIGhvc3QKKworCWlucHV0IGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgIHJzdF9uLAorCisJLy8gTUJJU1QgSS9GCisJaW5wdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgYmlzdF9lbiwKKwlpbnB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICBiaXN0X3J1biwKKwlpbnB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICBiaXN0X3NoaWZ0LAorCWlucHV0IGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgIGJpc3RfbG9hZCwKKwlpbnB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICBiaXN0X3NkaSwKKworCW91dHB1dCBsb2dpYyBbMzowXSAgICAgICAgICAgICAgICAgIGJpc3RfZXJyb3JfY250LAorCW91dHB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgIGJpc3RfY29ycmVjdCwKKwlvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICBiaXN0X2Vycm9yLAorCW91dHB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgIGJpc3RfZG9uZSwKKwlvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICBiaXN0X3NkbywKKworCisgICAgICAgIC8vIFdCIEkvRgorICAgICAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICB3Yl9jbGtfaSwgIC8vIFN5c3RlbSBjbG9jaworICAgICAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICB3Yl9jeWNfaSwgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgIHdiX3N0Yl9pLCAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAgICAgaW5wdXQgICBsb2dpYyBbQklTVF9BRERSX1dELTE6MF0gICAgd2JfYWRyX2ksICAvLyBhZGRyZXNzCisgICAgICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgIHdiX3dlX2kgLCAgLy8gd3JpdGUKKyAgICAgICAgaW5wdXQgICBsb2dpYyBbQklTVF9EQVRBX1dELTE6MF0gICAgd2JfZGF0X2ksICAvLyBkYXRhIG91dHB1dAorICAgICAgICBpbnB1dCAgIGxvZ2ljIFtCSVNUX0RBVEFfV0QvOC0xOjBdICB3Yl9zZWxfaSwgIC8vIGJ5dGUgZW5hYmxlCisgICAgICAgIG91dHB1dCAgbG9naWMgW0JJU1RfREFUQV9XRC0xOjBdICAgIHdiX2RhdF9vLCAgLy8gZGF0YSBpbnB1dAorICAgICAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICB3Yl9hY2tfbywgIC8vIGFja25vd2xlZ2VtZW50CisgICAgICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgIHdiX2Vycl9vLCAgLy8gZXJyb3IKKworICAgICAvLyB0b3dhcmRzIG1lbW9yeQorICAgICAvLyBQT1JULUEKKyAgICAgICAgb3V0cHV0IGxvZ2ljICAgICAgICAgICAgICAgICAgICAgbWVtX2Nsa19hLAorICAgICAgICBvdXRwdXQgbG9naWMgICBbQklTVF9BRERSX1dELTE6MF1tZW1fYWRkcl9hLAorICAgICAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICBtZW1fY2VuX2EsCisgICAgICAgIG91dHB1dCBsb2dpYyAgIFtCSVNUX0RBVEFfV0QtMTowXW1lbV9kaW5fYiwKKyAgICAgLy8gUE9SVC1CCisgICAgICAgIG91dHB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgIG1lbV9jbGtfYiwKKyAgICAgICAgb3V0cHV0IGxvZ2ljICAgICAgICAgICAgICAgICAgICAgbWVtX2Nlbl9iLAorICAgICAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgICAgICBtZW1fd2ViX2IsCisgICAgICAgIG91dHB1dCBsb2dpYyBbQklTVF9EQVRBX1dELzgtMTowXW1lbV9tYXNrX2IsCisgICAgICAgIG91dHB1dCBsb2dpYyAgIFtCSVNUX0FERFJfV0QtMTowXW1lbV9hZGRyX2IsCisgICAgICAgIGlucHV0ICBsb2dpYyAgIFtCSVNUX0RBVEFfV0QtMTowXW1lbV9kb3V0X2EKKworCisKKworKTsKKworLy8gRlVOQ1RJT05BTCBBIFBPUlQgCitsb2dpYyAgICAgICAgICAgICAgICAgICAgZnVuY19jbGtfYTsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICBmdW5jX2Nlbl9hOworbG9naWMgIFtCSVNUX0FERFJfV0QtMTowXWZ1bmNfYWRkcl9hOworbG9naWMgIFtCSVNUX0RBVEFfV0QtMTowXWZ1bmNfZG91dF9hOworCisvLyBGdW5jdGlvbmFsIEIgUG9ydAorbG9naWMgICAgICAgICAgICAgICAgICAgIGZ1bmNfY2xrX2I7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgZnVuY19jZW5fYjsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICBmdW5jX3dlYl9iOworbG9naWMgW0JJU1RfREFUQV9XRC84LTE6MF1mdW5jX21hc2tfYjsKK2xvZ2ljICBbQklTVF9BRERSX1dELTE6MF1mdW5jX2FkZHJfYjsKK2xvZ2ljICBbQklTVF9EQVRBX1dELTE6MF1mdW5jX2Rpbl9iOworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBMb2NhbCB2YXJpYWJsZSBkZWZpbmF0aW9uCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vCitsb2dpYyAgICAgICAgICAgICAgICAgICAgc3JzdF9uICAgICA7IC8vIHN5bmMgcmVzZXQgdy5yLnQgYmlzdF9jbGsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICBjbWRfcGhhc2UgIDsgIC8vIENvbW1hbmQgUGhhc2UKK2xvZ2ljICAgICAgICAgICAgICAgICAgICBjbXBfcGhhc2UgIDsgIC8vIENvbXBhcmUgUGhhc2UKK2xvZ2ljICAgICAgICAgICAgICAgICAgICBydW5fb3AgICAgIDsgIC8vIFJ1biBuZXh0IE9wZXJhdGlvbgorbG9naWMgICAgICAgICAgICAgICAgICAgIHJ1bl9hZGRyICAgOyAgLy8gUnVuIE5leHQgQWRkcmVzcworbG9naWMgICAgICAgICAgICAgICAgICAgIHJ1bl9zdGkgICAgOyAgLy8gUnVuIE5leHQgU3RpbXVsdXMKK2xvZ2ljICAgICAgICAgICAgICAgICAgICBydW5fcGF0ICAgIDsgIC8vIFJ1biBOZXh0IFBhdHRlcm4KK2xvZ2ljICAgICAgICAgICAgICAgICAgICBvcF91cGRvd24gIDsgIC8vIEFkcmVzcyB1cGRvd24gZGlyZWN0aW9uCitsb2dpYyAgICAgICAgICAgICAgICAgICAgbGFzdF9hZGRyICA7ICAvLyBsYXN0IGFkZHJlc3MgaW5kaWNhdGlvbgorbG9naWMgICAgICAgICAgICAgICAgICAgIGxhc3Rfc3RpICAgOyAgLy8gbGFzdCBzdGltdWx1cworbG9naWMgICAgICAgICAgICAgICAgICAgIGxhc3Rfb3AgICAgOyAgLy8gbGFzdCBvcGVyYXRpb24KK2xvZ2ljICAgICAgICAgICAgICAgICAgICBsYXN0X3BhdCAgIDsgIC8vIGxhc3QgcGF0dGVybgorbG9naWMgW0JJU1RfREFUQV9XRC0xOjBdIHBhdF9kYXRhICAgOyAgLy8gU2VsZWN0ZWQgRGF0YSBQYXR0ZXJuCitsb2dpYyBbQklTVF9TVElfV0QtMTowXSAgc3RpbXVsdXMgICA7ICAvLyBjdXJyZW50IHN0aW11bHVzCitsb2dpYyAgICAgICAgICAgICAgICAgICAgY29tcGFyZSAgICA7ICAvLyBjb21wYXJlIGRhdGEKK2xvZ2ljICAgICAgICAgICAgICAgICAgICBvcF9yZXBlYXRmbGFnOworbG9naWMgICAgICAgICAgICAgICAgICAgIG9wX3JldmVyc2U7Citsb2dpYyAgICAgICAgICAgICAgICAgICAgb3BfcmVhZCAgIDsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICBvcF93cml0ZSAgIDsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICBvcF9pbnZlcnQgICA7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBTREkgPT4gU0RPIGRpYXN5IGNoYWluCisvLyBiaXN0X3NkaSA9PiBiaXN0X2FkZHJfc2RvID0+ICBiaXN0X3N0aV9zZG8gPT4gIGJpc3Rfb3Bfc2RvID0+IGJpc3RfcGF0X3NkbyA9PiBiaXN0X3NkbworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitsb2dpYyAgICAgICAgICAgICAgICAgICAgYmlzdF9hZGRyX3NkbyAgIDsgICAgICAgICAgICAgICAgIAorbG9naWMgICAgICAgICAgICAgICAgICAgIGJpc3Rfc3RpX3NkbyAgICA7ICAgICAgICAgICAgICAgICAKK2xvZ2ljICAgICAgICAgICAgICAgICAgICBiaXN0X29wX3NkbyAgICAgOyAgICAgICAgICAgICAgICAgCitsb2dpYyAgICAgICAgICAgICAgICAgICAgYmlzdF9wYXRfc2RvICAgIDsgICAgICAgICAgICAgICAgIAorCitsb2dpYyAgICAgICAgICAgICAgICAgICAgYmlzdF9lcnJvcl9jb3JyZWN0ICA7Citsb2dpYyAgW0JJU1RfQUREUl9XRC0xOjBdYmlzdF9lcnJvcl9hZGRyIDsgLy8gYmlzdCBhZGRyZXNzCisKK2xvZ2ljICBbQklTVF9BRERSX1dELTE6MF1iaXN0X2FkZHIgICAgICAgOyAvLyBiaXN0IGFkZHJlc3MKK2xvZ2ljIFtCSVNUX0RBVEFfV0QtMTowXSBiaXN0X3dkYXRhICAgICAgOyAvLyBiaXN0IHdyaXRlIGRhdGEKK2xvZ2ljICAgICAgICAgICAgICAgICAgICBiaXN0X3dyICAgICAgICAgOworbG9naWMgICAgICAgICAgICAgICAgICAgIGJpc3RfcmQgICAgICAgICA7CisKK2Fzc2lnbiBzY2FuX2VuX28gPSBzY2FuX2VuOworYXNzaWduIHNjYW5fbW9kZV9vID0gc2Nhbl9tb2RlOworCithc3NpZ24gYmlzdF93ciA9IChjbWRfcGhhc2UgJiYgb3Bfd3JpdGUpOworYXNzaWduIGJpc3RfcmQgPSAoY21kX3BoYXNlICYmIG9wX3JlYWQpOworCithc3NpZ24gY29tcGFyZSAgICA9IChjbXBfcGhhc2UgJiYgb3BfcmVhZCk7Cithc3NpZ24gYmlzdF93ZGF0YSA9IChvcF9pbnZlcnQpID8gfnBhdF9kYXRhIDogcGF0X2RhdGE7CisKKy8vIENsb2NrIFRyZWUgYnJhbmNoaW5nIHRvIGF2b2lkIGNsb2NrIGxhdGVuY3kgdG93YXJkcyBTUkFNIHBhdGgKK3dpcmUgd2JfY2xrX2IxLHdiX2Nsa19iMjsKK2N0ZWNoX2Nsa19idWYgdV9jdHNfd2JfY2xrX2IxICguQSAod2JfY2xrX2kpLCAuIFgod2JfY2xrX2IxKSk7CitjdGVjaF9jbGtfYnVmIHVfY3RzX3diX2Nsa19iMiAoLkEgKHdiX2Nsa19pKSwgLiBYKHdiX2Nsa19iMikpOworCisvLyB3Yl9ob3N0IGNsb2NrIHNrZXcgY29udHJvbAorY2xrX3NrZXdfYWRqdXN0IHVfc2tld19tYmlzdAorICAgICAgICgKK2BpZmRlZiBVU0VfUE9XRVJfUElOUworICAgICAgICAgICAgICAgLnZjY2QxICAgICAgKHZjY2QxICAgICAgICAgICAgICAgICAgICAgICksLy8gVXNlciBhcmVhIDEgMS44ViBzdXBwbHkKKyAgICAgICAgICAgICAgIC52c3NkMSAgICAgICh2c3NkMSAgICAgICAgICAgICAgICAgICAgICApLC8vIFVzZXIgYXJlYSAxIGRpZ2l0YWwgZ3JvdW5kCitgZW5kaWYKKwkgICAgICAgLmNsa19pbiAgICAgKHdiZF9jbGtfaW50ICAgICAgICAgICAgICAgICksIAorCSAgICAgICAuc2VsICAgICAgICAoY2ZnX2Nza2FfbWJpc3QgICAgICAgICAgICAgKSwgCisJICAgICAgIC5jbGtfb3V0ICAgICh3YmRfY2xrX21iaXN0ICAgICAgICAgICAgICApIAorICAgICAgICk7CisKK3Jlc2V0X3N5bmMgICB1X3Jlc2V0X3N5bmMgKAorCSAgICAgIC5zY2FuX21vZGUgIChzY2FuX21vZGUgKSwKKyAgICAgICAgICAgICAgLmRjbGsgICAgICAgKHdiX2Nsa19iMSApLCAvLyBEZXN0aW5hdGlvbiBjbG9jayBkb21haW4KKwkgICAgICAuYXJzdF9uICAgICAocnN0X24gICAgICksIC8vIGFjdGl2ZSBsb3cgYXN5bmMgcmVzZXQKKyAgICAgICAgICAgICAgLnNyc3RfbiAgICAgKHNyc3RfbiAgICApCisgICAgICAgICAgKTsKKworCisKKy8vIGJpc3QgbWFpbiBjb250cm9sIEZTTQorCittYmlzdF9mc20gIAorICAgICAgIygKKwkgLkJJU1RfQUREUl9XRCAgICAgICAgICAgKEJJU1RfQUREUl9XRCAgICAgICAgICAgKSwKKwkgLkJJU1RfREFUQV9XRCAgICAgICAgICAgKEJJU1RfREFUQV9XRCAgICAgICAgICAgKSwKKwkgLkJJU1RfQUREUl9TVEFSVCAgICAgICAgKEJJU1RfQUREUl9TVEFSVCAgICAgICAgKSwKKwkgLkJJU1RfQUREUl9FTkQgICAgICAgICAgKEJJU1RfQUREUl9FTkQgICAgICAgICAgKSwKKwkgLkJJU1RfUkVQQUlSX0FERFJfU1RBUlQgKEJJU1RfUkVQQUlSX0FERFJfU1RBUlQgKSwKKwkgLkJJU1RfUkFEX1dEX0kgICAgICAgICAgKEJJU1RfUkFEX1dEX0kgICAgICAgICAgKSwKKwkgLkJJU1RfUkFEX1dEX08gICAgICAgICAgKEJJU1RfUkFEX1dEX08gICAgICAgICAgKQorICAgICAgICAgICkKKyAgICAgdV9mc20gKAorCisJICAgICAgICAgICAgLmNtZF9waGFzZSAgICAgICAgICAoY21kX3BoYXNlICAgICAgICAgICApLAorCSAgICAgICAgICAgIC5jbXBfcGhhc2UgICAgICAgICAgKGNtcF9waGFzZSAgICAgICAgICAgKSwKKwkgICAgICAgICAgICAucnVuX29wICAgICAgICAgICAgIChydW5fb3AgICAgICAgICAgICAgKSwKKwkgICAgICAgICAgICAucnVuX2FkZHIgICAgICAgICAgIChydW5fYWRkciAgICAgICAgICAgKSwKKwkgICAgICAgICAgICAucnVuX3N0aSAgICAgICAgICAgIChydW5fc3RpICAgICAgICAgICAgKSwKKwkgICAgICAgICAgICAucnVuX3BhdCAgICAgICAgICAgIChydW5fcGF0ICAgICAgICAgICAgKSwKKwkgICAgICAgICAgICAuYmlzdF9kb25lICAgICAgICAgIChiaXN0X2RvbmUgICAgICAgICAgKSwKKworCisJICAgICAgICAgICAgLmNsayAgICAgICAgICAgICAgICAod2JfY2xrX2IxICAgICAgICAgICksCisJICAgICAgICAgICAgLnJzdF9uICAgICAgICAgICAgICAoc3JzdF9uICAgICAgICAgICAgICksCisJICAgICAgICAgICAgLmJpc3RfcnVuICAgICAgICAgICAoYmlzdF9ydW4gICAgICAgICAgICksCisJICAgICAgICAgICAgLmxhc3Rfb3AgICAgICAgICAgICAobGFzdF9vcCAgICAgICAgICAgICksCisJICAgICAgICAgICAgLmxhc3RfYWRkciAgICAgICAgICAobGFzdF9hZGRyICAgICAgICAgICksCisJICAgICAgICAgICAgLmxhc3Rfc3RpICAgICAgICAgICAobGFzdF9zdGkgICAgICAgICAgICksCisJICAgICAgICAgICAgLmxhc3RfcGF0ICAgICAgICAgICAobGFzdF9wYXQgICAgICAgICAgICksCisJCSAgICAub3BfcmV2ZXJzZSAgICAgICAgIChvcF9yZXZlcnNlICAgICAgICAgKSwKKwkJICAgIC5iaXN0X2Vycm9yICAgICAgICAgKGJpc3RfZXJyb3IgICAgICAgICApCispOworCisKKy8vIGJpc3QgYWRkcmVzcyBnZW5lcmF0aW9uCittYmlzdF9hZGRyX2dlbiAgIAorICAgICAgIygKKwkgLkJJU1RfQUREUl9XRCAgICAgICAgICAgKEJJU1RfQUREUl9XRCAgICAgICAgICAgKSwKKwkgLkJJU1RfREFUQV9XRCAgICAgICAgICAgKEJJU1RfREFUQV9XRCAgICAgICAgICAgKSwKKwkgLkJJU1RfQUREUl9TVEFSVCAgICAgICAgKEJJU1RfQUREUl9TVEFSVCAgICAgICAgKSwKKwkgLkJJU1RfQUREUl9FTkQgICAgICAgICAgKEJJU1RfQUREUl9FTkQgICAgICAgICAgKSwKKwkgLkJJU1RfUkVQQUlSX0FERFJfU1RBUlQgKEJJU1RfUkVQQUlSX0FERFJfU1RBUlQgKSwKKwkgLkJJU1RfUkFEX1dEX0kgICAgICAgICAgKEJJU1RfUkFEX1dEX0kgICAgICAgICAgKSwKKwkgLkJJU1RfUkFEX1dEX08gICAgICAgICAgKEJJU1RfUkFEX1dEX08gICAgICAgICAgKQorICAgICAgICAgICkKKyAgICAgIHVfYWRkcl9nZW4oCisgICAgICAgICAgICAgICAgICAgIC5sYXN0X2FkZHIgICAgICAgICAgKGxhc3RfYWRkciAgICAgICAgICApLCAKKyAgICAgICAgICAgICAgICAgICAgLmJpc3RfYWRkciAgICAgICAgICAoYmlzdF9hZGRyICAgICAgICAgICksICAgCisgICAgICAgICAgICAgICAgICAgIC5zZG8gICAgICAgICAgICAgICAgKGJpc3RfYWRkcl9zZG8gICAgICApLCAgICAgICAgIAorCisgICAgICAgICAgICAgICAgICAgIC5jbGsgICAgICAgICAgICAgICAgKHdiX2Nsa19iMSAgICAgICAgICApLCAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAucnN0X24gICAgICAgICAgICAgIChzcnN0X24gICAgICAgICAgICAgKSwgICAgICAgCisgICAgICAgICAgICAgICAgICAgIC5ydW4gICAgICAgICAgICAgICAgKHJ1bl9hZGRyICAgICAgICAgICApLCAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAudXBkb3duICAgICAgICAgICAgIChvcF91cGRvd24gICAgICAgICAgKSwgICAgICAKKyAgICAgICAgICAgICAgICAgICAgLnNjYW5fc2hpZnQgICAgICAgICAoYmlzdF9zaGlmdCAgICAgICAgICksICAKKyAgICAgICAgICAgICAgICAgICAgLnNjYW5fbG9hZCAgICAgICAgICAoYmlzdF9sb2FkICAgICAgICAgICksICAgCisgICAgICAgICAgICAgICAgICAgIC5zZGkgICAgICAgICAgICAgICAgKGJpc3Rfc2RpICAgICAgICAgICApCisKKyk7CisKKworLy8gQklTVCBjdXJyZW50IHN0aW11bHVzIHNlbGVjdGlvbgorbWJpc3Rfc3RpX3NlbCAKKyAgICAgICMoCisJIC5CSVNUX0FERFJfV0QgICAgICAgICAgIChCSVNUX0FERFJfV0QgICAgICAgICAgICksCisJIC5CSVNUX0RBVEFfV0QgICAgICAgICAgIChCSVNUX0RBVEFfV0QgICAgICAgICAgICksCisJIC5CSVNUX0FERFJfU1RBUlQgICAgICAgIChCSVNUX0FERFJfU1RBUlQgICAgICAgICksCisJIC5CSVNUX0FERFJfRU5EICAgICAgICAgIChCSVNUX0FERFJfRU5EICAgICAgICAgICksCisJIC5CSVNUX1JFUEFJUl9BRERSX1NUQVJUIChCSVNUX1JFUEFJUl9BRERSX1NUQVJUICksCisJIC5CSVNUX1JBRF9XRF9JICAgICAgICAgIChCSVNUX1JBRF9XRF9JICAgICAgICAgICksCisJIC5CSVNUX1JBRF9XRF9PICAgICAgICAgIChCSVNUX1JBRF9XRF9PICAgICAgICAgICkKKyAgICAgICAgICApCisgICAgICAgdV9zdGlfc2VsKAorCisJICAgICAgICAgICAgLnNkbyAgICAgICAgICAgICAgICAoYmlzdF9zdGlfc2RvICAgICAgICksICAKKwkgICAgICAgICAgICAubGFzdF9zdGltdWx1cyAgICAgIChsYXN0X3N0aSAgICAgICAgICAgKSwgIAorICAgICAgICAgICAgICAgICAgICAuc3RpbXVsdXMgICAgICAgICAgIChzdGltdWx1cyAgICAgICAgICAgKSwKKworCSAgICAgICAgICAgIC5jbGsgICAgICAgICAgICAgICAgKHdiX2Nsa19iMSAgICAgICAgICApLCAgCisJICAgICAgICAgICAgLnJzdF9uICAgICAgICAgICAgICAoc3JzdF9uICAgICAgICAgICAgICksICAKKwkgICAgICAgICAgICAuc2Nhbl9zaGlmdCAgICAgICAgIChiaXN0X3NoaWZ0ICAgICAgICAgKSwgIAorCSAgICAgICAgICAgIC5zZGkgICAgICAgICAgICAgICAgKGJpc3RfYWRkcl9zZG8gICAgICApLCAgCisJICAgICAgICAgICAgLnJ1biAgICAgICAgICAgICAgICAocnVuX3N0aSAgICAgICAgICAgICkgICAgICAgICAgICAgIAorCispOworCisKKy8vIEJpc3QgT3BlcmF0aW9uIHNlbGVjdGlvbgorbWJpc3Rfb3Bfc2VsIAorICAgICAgIygKKwkgLkJJU1RfQUREUl9XRCAgICAgICAgICAgKEJJU1RfQUREUl9XRCAgICAgICAgICAgKSwKKwkgLkJJU1RfREFUQV9XRCAgICAgICAgICAgKEJJU1RfREFUQV9XRCAgICAgICAgICAgKSwKKwkgLkJJU1RfQUREUl9TVEFSVCAgICAgICAgKEJJU1RfQUREUl9TVEFSVCAgICAgICAgKSwKKwkgLkJJU1RfQUREUl9FTkQgICAgICAgICAgKEJJU1RfQUREUl9FTkQgICAgICAgICAgKSwKKwkgLkJJU1RfUkVQQUlSX0FERFJfU1RBUlQgKEJJU1RfUkVQQUlSX0FERFJfU1RBUlQgKSwKKwkgLkJJU1RfUkFEX1dEX0kgICAgICAgICAgKEJJU1RfUkFEX1dEX0kgICAgICAgICAgKSwKKwkgLkJJU1RfUkFEX1dEX08gICAgICAgICAgKEJJU1RfUkFEX1dEX08gICAgICAgICAgKQorICAgICAgICAgICkKKyAgICAgICAgdV9vcF9zZWwgKAorCisgICAgICAgICAgICAgICAgICAgIC5vcF9yZWFkICAgICAgICAgICAgKG9wX3JlYWQgICAgICAgICAgICApLCAKKwkgICAgICAgICAgICAub3Bfd3JpdGUgICAgICAgICAgIChvcF93cml0ZSAgICAgICAgICAgKSwKKwkgICAgICAgICAgICAub3BfaW52ZXJ0ICAgICAgICAgIChvcF9pbnZlcnQgICAgICAgICAgKSwKKwkgICAgICAgICAgICAub3BfdXBkb3duICAgICAgICAgIChvcF91cGRvd24gICAgICAgICAgKSwKKwkgICAgICAgICAgICAub3BfcmV2ZXJzZSAgICAgICAgIChvcF9yZXZlcnNlICAgICAgICAgKSwKKwkgICAgICAgICAgICAub3BfcmVwZWF0ZmxhZyAgICAgIChvcF9yZXBlYXRmbGFnICAgICAgKSwKKwkgICAgICAgICAgICAuc2RvICAgICAgICAgICAgICAgIChiaXN0X29wX3NkbyAgICAgICAgKSwKKwkgICAgICAgICAgICAubGFzdF9vcCAgICAgICAgICAgIChsYXN0X29wICAgICAgICAgICAgKSwKKworCSAgICAgICAgICAgIC5jbGsgICAgICAgICAgICAgICAgKHdiX2Nsa19iMSAgICAgICAgICApLAorCSAgICAgICAgICAgIC5yc3RfbiAgICAgICAgICAgICAgKHNyc3RfbiAgICAgICAgICAgICApLAorCSAgICAgICAgICAgIC5zY2FuX3NoaWZ0ICAgICAgICAgKGJpc3Rfc2hpZnQgICAgICAgICApLAorCSAgICAgICAgICAgIC5zZGkgICAgICAgICAgICAgICAgKGJpc3Rfc3RpX3NkbyAgICAgICApLAorCQkgICAgLnJlX2luaXQgICAgICAgICAgICAoYmlzdF9lcnJvcl9jb3JyZWN0ICksCisJICAgICAgICAgICAgLnJ1biAgICAgICAgICAgICAgICAocnVuX29wICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5zdGltdWx1cyAgICAgICAgICAgKHN0aW11bHVzICAgICAgICAgICApCisKKyAgICApOworCisKKworbWJpc3RfcGF0X3NlbCAKKyAgICAgICMoCisJIC5CSVNUX0FERFJfV0QgICAgICAgICAgIChCSVNUX0FERFJfV0QgICAgICAgICAgICksCisJIC5CSVNUX0RBVEFfV0QgICAgICAgICAgIChCSVNUX0RBVEFfV0QgICAgICAgICAgICksCisJIC5CSVNUX0FERFJfU1RBUlQgICAgICAgIChCSVNUX0FERFJfU1RBUlQgICAgICAgICksCisJIC5CSVNUX0FERFJfRU5EICAgICAgICAgIChCSVNUX0FERFJfRU5EICAgICAgICAgICksCisJIC5CSVNUX1JFUEFJUl9BRERSX1NUQVJUIChCSVNUX1JFUEFJUl9BRERSX1NUQVJUICksCisJIC5CSVNUX1JBRF9XRF9JICAgICAgICAgIChCSVNUX1JBRF9XRF9JICAgICAgICAgICksCisJIC5CSVNUX1JBRF9XRF9PICAgICAgICAgIChCSVNUX1JBRF9XRF9PICAgICAgICAgICkKKyAgICAgICAgICApCisgICAgICB1X3BhdF9zZWwgKAorICAgICAgICAgICAgICAgICAgICAucGF0X2xhc3QgICAgICAgICAgIChsYXN0X3BhdCAgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgLnBhdF9kYXRhICAgICAgICAgICAocGF0X2RhdGEgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5zZG8gICAgICAgICAgICAgICAgKGJpc3RfcGF0X3NkbyAgICAgICApLAorICAgICAgICAgICAgICAgICAgICAuY2xrICAgICAgICAgICAgICAgICh3Yl9jbGtfYjEgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgLnJzdF9uICAgICAgICAgICAgICAoc3JzdF9uICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5ydW4gICAgICAgICAgICAgICAgKHJ1bl9wYXQgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgICAgICAuc2Nhbl9zaGlmdCAgICAgICAgIChiaXN0X3NoaWZ0ICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgLnNkaSAgICAgICAgICAgICAgICAoYmlzdF9vcF9zZG8gICAgICAgICkKKworICAgKTsKKworCittYmlzdF9kYXRhX2NtcCAgCisgICAgICAjKAorCSAuQklTVF9BRERSX1dEICAgICAgICAgICAoQklTVF9BRERSX1dEICAgICAgICAgICApLAorCSAuQklTVF9EQVRBX1dEICAgICAgICAgICAoQklTVF9EQVRBX1dEICAgICAgICAgICApLAorCSAuQklTVF9BRERSX1NUQVJUICAgICAgICAoQklTVF9BRERSX1NUQVJUICAgICAgICApLAorCSAuQklTVF9BRERSX0VORCAgICAgICAgICAoQklTVF9BRERSX0VORCAgICAgICAgICApLAorCSAuQklTVF9SRVBBSVJfQUREUl9TVEFSVCAoQklTVF9SRVBBSVJfQUREUl9TVEFSVCApLAorCSAuQklTVF9SQURfV0RfSSAgICAgICAgICAoQklTVF9SQURfV0RfSSAgICAgICAgICApLAorCSAuQklTVF9SQURfV0RfTyAgICAgICAgICAoQklTVF9SQURfV0RfTyAgICAgICAgICApCisgICAgICAgICAgKQorCisKKyAgICAgdV9jbXAgKAorICAgICAgICAgICAgICAgICAgICAuZXJyb3IgICAgICAgICAgICAgIChiaXN0X2Vycm9yICAgICAgICAgKSwKKwkJICAgIC5lcnJvcl9jb3JyZWN0ICAgICAgKGJpc3RfZXJyb3JfY29ycmVjdCApLAorCQkgICAgLmNvcnJlY3QgICAgICAgICAgICAoICAgICAgICAgICAgICAgICAgICksIC8vIHNhbWUgc2lnbmFsIGF2YWlsYWJsZSBhdCBiaXN0IG11eAorCQkgICAgLmVycm9yX2FkZHIgICAgICAgICAoYmlzdF9lcnJvcl9hZGRyICAgICksCisJCSAgICAuZXJyb3JfY250ICAgICAgICAgIChiaXN0X2Vycm9yX2NudCAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgLmNsayAgICAgICAgICAgICAgICAod2JfY2xrX2IxICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5yc3RfbiAgICAgICAgICAgICAgKHNyc3RfbiAgICAgICAgICAgICApLAorCQkgICAgLmFkZHJfaW5jX3BoYXNlICAgICAocnVuX2FkZHIgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5jb21wYXJlICAgICAgICAgICAgKGNvbXBhcmUgICAgICAgICAgICApLCAKKwkgICAgICAgICAgICAucmVhZF9pbnZlcnQgICAgICAgIChvcF9pbnZlcnQgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgLmNvbXBfZGF0YSAgICAgICAgICAocGF0X2RhdGEgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5yeGRfZGF0YSAgICAgICAgICAgKGZ1bmNfZG91dF9hICAgICAgICApLAorCQkgICAgLmFkZHIgICAgICAgICAgICAgICAoYmlzdF9hZGRyICAgICAgICAgICkKKwkgICAgIAorCSk7CisKKworbWJpc3RfbWVtX3dyYXBwZXIgIygKKwkgLkJJU1RfQUREUl9XRCAgICAgICAgICAgKEJJU1RfQUREUl9XRCAgICAgICAgICAgKSwKKwkgLkJJU1RfREFUQV9XRCAgICAgICAgICAgKEJJU1RfREFUQV9XRCAgICAgICAgICAgKQorICAgICAgICAgICkgdV9tZW1fd3JhcHBlcigKKwkgICAgICAgICAgICAucnN0X24gICAgICAgICAgIChzcnN0X24gICAgICAgICAgICksCisgICAgICAgICAgICAgICAvLyBXQiBJL0YKKyAgICAgICAgICAgICAgICAgICAgLndiX2Nsa19pICAgICAgICAod2JfY2xrX2IyICAgICAgICApLCAgLy8gU3lzdGVtIGNsb2NrCisgICAgICAgICAgICAgICAgICAgIC53Yl9jeWNfaSAgICAgICAgKHdiX2N5Y19pICAgICAgICAgKSwgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgICAgICAgICAgICAgICAgIC53Yl9zdGJfaSAgICAgICAgKHdiX3N0Yl9pICAgICAgICAgKSwgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgICAgICAgICAgICAgICAgIC53Yl9hZHJfaSAgICAgICAgKHdiX2Fkcl9pICAgICAgICAgKSwgIC8vIGFkZHJlc3MKKyAgICAgICAgICAgICAgICAgICAgLndiX3dlX2kgICAgICAgICAod2Jfd2VfaSAgICAgICAgICApLCAgLy8gd3JpdGUKKyAgICAgICAgICAgICAgICAgICAgLndiX2RhdF9pICAgICAgICAod2JfZGF0X2kgICAgICAgICApLCAgLy8gZGF0YSBvdXRwdXQKKyAgICAgICAgICAgICAgICAgICAgLndiX3NlbF9pICAgICAgICAod2Jfc2VsX2kgICAgICAgICApLCAgLy8gYnl0ZSBlbmFibGUKKyAgICAgICAgICAgICAgICAgICAgLndiX2RhdF9vICAgICAgICAod2JfZGF0X28gICAgICAgICApLCAgLy8gZGF0YSBpbnB1dAorICAgICAgICAgICAgICAgICAgICAud2JfYWNrX28gICAgICAgICh3Yl9hY2tfbyAgICAgICAgICksICAvLyBhY2tub3dsZWdlbWVudAorICAgICAgICAgICAgICAgICAgICAud2JfZXJyX28gICAgICAgICh3Yl9lcnJfbyAgICAgICAgICksICAvLyBlcnJvcgorICAgICAgICAgICAgICAgIC8vIE1FTSBBIFBPUlQgCisgICAgICAgICAgICAgICAgICAgIC5mdW5jX2Nsa19hICAgICAgKGZ1bmNfY2xrX2EgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgLmZ1bmNfY2VuX2EgICAgICAoZnVuY19jZW5fYSAgICAgICApLAorICAgICAgICAgICAgICAgICAgICAuZnVuY19hZGRyX2EgICAgIChmdW5jX2FkZHJfYSAgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5mdW5jX2RvdXRfYSAgICAgKGZ1bmNfZG91dF9hICAgICAgKSwKKyAgCisgICAgICAgICAgICAgICAgLy8gRnVuY3Rpb25hbCBCIFBvcnQKKyAgICAgICAgICAgICAgICAgICAgLmZ1bmNfY2xrX2IgICAgICAoZnVuY19jbGtfYiAgICAgICApLAorICAgICAgICAgICAgICAgICAgICAuZnVuY19jZW5fYiAgICAgIChmdW5jX2Nlbl9iICAgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5mdW5jX3dlYl9iICAgICAgKGZ1bmNfd2ViX2IgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgLmZ1bmNfbWFza19iICAgICAoZnVuY19tYXNrX2IgICAgICApLAorICAgICAgICAgICAgICAgICAgICAuZnVuY19hZGRyX2IgICAgIChmdW5jX2FkZHJfYiAgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5mdW5jX2Rpbl9iICAgICAgKGZ1bmNfZGluX2IgICAgICAgKSAgICAgCisgICAgICk7CisKKworbWJpc3RfbXV4ICAKKyAgICAgICMoCisJIC5CSVNUX0FERFJfV0QgICAgICAgICAgIChCSVNUX0FERFJfV0QgICAgICAgICAgICksCisJIC5CSVNUX0RBVEFfV0QgICAgICAgICAgIChCSVNUX0RBVEFfV0QgICAgICAgICAgICksCisJIC5CSVNUX0FERFJfU1RBUlQgICAgICAgIChCSVNUX0FERFJfU1RBUlQgICAgICAgICksCisJIC5CSVNUX0FERFJfRU5EICAgICAgICAgIChCSVNUX0FERFJfRU5EICAgICAgICAgICksCisJIC5CSVNUX1JFUEFJUl9BRERSX1NUQVJUIChCSVNUX1JFUEFJUl9BRERSX1NUQVJUICksCisJIC5CSVNUX1JBRF9XRF9JICAgICAgICAgIChCSVNUX1JBRF9XRF9JICAgICAgICAgICksCisJIC5CSVNUX1JBRF9XRF9PICAgICAgICAgIChCSVNUX1JBRF9XRF9PICAgICAgICAgICkKKyAgICAgICAgICApCisgICAgICAgdV9tZW1fc2VsICgKKworCSAgICAgICAgICAgIC5zY2FuX21vZGUgICAgICAgICAgICAoc2Nhbl9tb2RlICAgICApLAorCisgICAgICAgICAgICAgICAgICAgIC5yc3RfbiAgICAgICAgICAgICAgICAoc3JzdF9uICAgICAgICApLAorICAgICAgICAgICAgICAgICAgICAvLyBNQklTVCBDVFJMIFNJR05BTAorICAgICAgICAgICAgICAgICAgICAuYmlzdF9lbiAgICAgICAgICAgICAgKGJpc3RfZW4gICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgLmJpc3RfYWRkciAgICAgICAgICAgIChiaXN0X2FkZHIgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5iaXN0X3dkYXRhICAgICAgICAgICAoYmlzdF93ZGF0YSAgICApLAorICAgICAgICAgICAgICAgICAgICAuYmlzdF9jbGsgICAgICAgICAgICAgKHdiX2Nsa19iMiAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgLmJpc3Rfd3IgICAgICAgICAgICAgIChiaXN0X3dyICAgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5iaXN0X3JkICAgICAgICAgICAgICAoYmlzdF9yZCAgICAgICApLAorICAgICAgICAgICAgICAgICAgICAuYmlzdF9lcnJvciAgICAgICAgICAgKGJpc3RfZXJyb3JfY29ycmVjdCksCisgICAgICAgICAgICAgICAgICAgIC5iaXN0X2Vycm9yX2FkZHIgICAgICAoYmlzdF9lcnJvcl9hZGRyKSwKKyAgICAgICAgICAgICAgICAgICAgLmJpc3RfY29ycmVjdCAgICAgICAgIChiaXN0X2NvcnJlY3QgICksCisJCSAgICAuYmlzdF9zZGkgICAgICAgICAgICAgKGJpc3RfcGF0X3NkbyksCisJCSAgICAuYmlzdF9zaGlmdCAgICAgICAgICAgKGJpc3Rfc2hpZnQpLAorCQkgICAgLmJpc3Rfc2RvICAgICAgICAgICAgIChiaXN0X3NkbyksCisKKyAgICAgICAgICAgICAgICAgICAgLy8gRlVOQ1RJT05BTCBDVFJMIFNJR05BTAorICAgICAgICAgICAgICAgICAgICAuZnVuY19jbGtfYSAgICAgICAgICAoZnVuY19jbGtfYSAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgLmZ1bmNfY2VuX2EgICAgICAgICAgKGZ1bmNfY2VuX2EgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5mdW5jX2FkZHJfYSAgICAgICAgIChmdW5jX2FkZHJfYSAgICApLAorICAgICAgICAgICAgICAgICAgICAvLyBDb21tb24gZm9yIGZ1bmMgYW5kIE1iaXN0IGkvZgorICAgICAgICAgICAgICAgICAgICAuZnVuY19kb3V0X2EgICAgICAgICAoZnVuY19kb3V0X2EgICAgKSwKKworICAgICAgICAgICAgICAgICAgICAuZnVuY19jbGtfYiAgICAgICAgICAoZnVuY19jbGtfYiAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgLmZ1bmNfY2VuX2IgICAgICAgICAgKGZ1bmNfY2VuX2IgICAgICksCisJICAgICAgICAgICAgLmZ1bmNfd2ViX2IgICAgICAgICAgKGZ1bmNfd2ViX2IgICAgICksCisJICAgICAgICAgICAgLmZ1bmNfbWFza19iICAgICAgICAgKGZ1bmNfbWFza19iICAgICksCisgICAgICAgICAgICAgICAgICAgIC5mdW5jX2FkZHJfYiAgICAgICAgIChmdW5jX2FkZHJfYiAgICApLAorICAgICAgICAgICAgICAgICAgICAuZnVuY19kaW5fYiAgICAgICAgICAoZnVuY19kaW5fYiAgICAgKSwKKworCisgICAgICAgICAgICAgICAgICAgIC8vIHRvd2FyZHMgbWVtb3J5CisgICAgICAgICAgICAgICAgICAgIC8vIE1lbW9yeSBPdXQgUG9ydAorICAgICAgICAgICAgICAgICAgICAubWVtX2Nsa19hICAgICAgICAgICAobWVtX2Nsa19hICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgLm1lbV9jZW5fYSAgICAgICAgICAgKG1lbV9jZW5fYSAgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5tZW1fYWRkcl9hICAgICAgICAgIChtZW1fYWRkcl9hICAgICApLAorICAgICAgICAgICAgICAgICAgICAubWVtX2RvdXRfYSAgICAgICAgICAobWVtX2RvdXRfYSAgICAgKSwKKworICAgICAgICAgICAgICAgICAgICAvLyBNZW1vcnkgSW5wdXQgUG9ydAorICAgICAgICAgICAgICAgICAgICAubWVtX2Nsa19iICAgICAgICAgICAobWVtX2Nsa19iICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgLm1lbV9jZW5fYiAgICAgICAgICAgKG1lbV9jZW5fYiAgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5tZW1fd2ViX2IgICAgICAgICAgIChtZW1fd2ViX2IgICAgICApLAorICAgICAgICAgICAgICAgICAgICAubWVtX21hc2tfYiAgICAgICAgICAobWVtX21hc2tfYiAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgLm1lbV9hZGRyX2IgICAgICAgICAgKG1lbV9hZGRyX2IgICAgICksCisgICAgICAgICAgICAgICAgICAgIC5tZW1fZGluX2IgICAgICAgICAgIChtZW1fZGluX2IgICAgICApCisgICAgKTsKKworCitlbmRtb2R1bGUKKwpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvbWJpc3Rfd3JhcHBlci9zcmMvbWJpc3Rfd2Iuc3YgYi92ZXJpbG9nL3J0bC9tYmlzdF93cmFwcGVyL3NyYy9tYmlzdF93Yi5zdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjk4OWRkCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvbWJpc3Rfd3JhcHBlci9zcmMvbWJpc3Rfd2Iuc3YKQEAgLTAsMCArMSwxNzkgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSAsIERpbmVzaCBBbm5heXlhICAgICAgICAgICAgICAgICAgICAgICAgICAKKy8vIAorLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBDcmVhdGVkIGJ5IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gICAKKy8vICAgTUJJU1Qgd2lzaGJvbmUgQnVyc3QgYWNjZXNzIHRvIFNSQU0gV3JpdGUgYW5kIFJlYWQgYWNjZXNzCisvLyAgIE5vdGU6IEJVU1JUIGNyb3NzaW5nIHRoZSBTUkFNIGJvdW5kYXJ5IGlzIG5vdCBzdXBwb3J0ZWQgZHVlIHRvIHNyYW0KKy8vICAgMiBjeWNsZSBwaXBlIGxpbmUgZGVsYXkKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworbW9kdWxlIG1iaXN0X3diCisgICAgICMoICAKKyAgICAgICAgIHBhcmFtZXRlciBCSVNUX05PX1NSQU0gICAgICAgICAgID0gNCwKKwkgcGFyYW1ldGVyIEJJU1RfQUREUl9XRCAgICAgICAgICAgPSA5LAorCSBwYXJhbWV0ZXIgQklTVF9EQVRBX1dEICAgICAgICAgICA9IDMyKSAoCisKK2BpZmRlZiBVU0VfUE9XRVJfUElOUworICAgIGlub3V0IHZjY2QxLAkvLyBVc2VyIGFyZWEgMSAxLjhWIHN1cHBseQorICAgIGlub3V0IHZzc2QxLAkvLyBVc2VyIGFyZWEgMSBkaWdpdGFsIGdyb3VuZAorYGVuZGlmCisKKworCWlucHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICByc3RfbiwKKworCisgICAgICAgIC8vIFdCIEkvRgorICAgICAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICB3Yl9jbGtfaSwgIC8vIFN5c3RlbSBjbG9jaworICAgICAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICB3Yl9zdGJfaSwgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgICAgIGlucHV0ICAgbG9naWMgW0JJU1RfQUREUl9XRC0xOjBdICAgICAgIHdiX2Fkcl9pLCAgLy8gYWRkcmVzcworICAgICAgICBpbnB1dCAgIGxvZ2ljIFsoQklTVF9OT19TUkFNKzEpLzItMTowXSB3Yl9jc19pLCAgIC8vIGFkZHJlc3MKKyAgICAgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgd2Jfd2VfaSAsICAvLyB3cml0ZQorICAgICAgICBpbnB1dCAgIGxvZ2ljIFtCSVNUX0RBVEFfV0QtMTowXSAgICAgICB3Yl9kYXRfaSwgIC8vIGRhdGEgb3V0cHV0CisgICAgICAgIGlucHV0ICAgbG9naWMgW0JJU1RfREFUQV9XRC84LTE6MF0gICAgIHdiX3NlbF9pLCAgLy8gYnl0ZSBlbmFibGUKKyAgICAgICAgaW5wdXQgICBsb2dpYyBbOTowXSAgICAgICAgICAgICAgICAgICAgd2JfYmxfaSwgICAvLyBCdXJzdCBMZW5ndGgKKyAgICAgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgd2JfYnJ5X2ksICAvLyBCdXJzdCBSZWFkeQorICAgICAgICBvdXRwdXQgIGxvZ2ljIFtCSVNUX0RBVEFfV0QtMTowXSAgICAgICB3Yl9kYXRfbywgIC8vIGRhdGEgaW5wdXQKKyAgICAgICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgd2JfYWNrX28sICAvLyBhY2tub3dsZWdlbWVudAorICAgICAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICB3Yl9sYWNrX28sIC8vIGFja25vd2xlZ2VtZW50CisgICAgICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgIHdiX2Vycl9vLCAgLy8gZXJyb3IKKworCW91dHB1dCAgbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbV9yZXEsCisJb3V0cHV0ICBsb2dpYyBbKEJJU1RfTk9fU1JBTSsxKS8yLTE6MF0gbWVtX2NzLAorCW91dHB1dCAgbG9naWMgW0JJU1RfQUREUl9XRC0xOjBdICAgICAgIG1lbV9hZGRyLAorCW91dHB1dCAgbG9naWMgWzMxOjBdICAgICAgICAgICAgICAgICAgIG1lbV93ZGF0YSwKKwlvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1fd2UsCisJb3V0cHV0ICBsb2dpYyBbMzowXSAgICAgICAgICAgICAgICAgICAgbWVtX3dtYXNrLAorCWlucHV0ICAgbG9naWMgWzMxOjBdICAgICAgICAgICAgICAgICAgIG1lbV9yZGF0YQorCisKKworCispOworCitwYXJhbWV0ZXIgSURMRSAgICAgICAgICA9IDInYjAwOworcGFyYW1ldGVyIFdSSVRFX0FDVElPTiAgPSAyJ2IwMTsKK3BhcmFtZXRlciBSRUFEX0FDVElPTjEgID0gMidiMTA7CitwYXJhbWV0ZXIgUkVBRF9BQ1RJT04yICA9IDInYjExOworCisKK2xvZ2ljIFs5OjBdICAgICAgICAgICAgICAgIG1lbV9ibF9jbnQgICAgIDsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgIHdiX2Fja19sICAgICAgIDsKK2xvZ2ljIFtCSVNUX0FERFJfV0QtMTowXSAgIG1lbV9uZXh0X2FkZHI7Citsb2dpYyBbMTowXSAgICAgICAgICAgICAgICBzdGF0ZTsKK2xvZ2ljICAgICAgICAgICAgICAgICAgICAgIG1lbV9odmFsOyAgIC8vIE1lbSBIb2xkIERhdGEgdmFsaWQKK2xvZ2ljIFszMTowXSAgICAgICAgICAgICAgIG1lbV9oZGF0YTsgIC8vIE1lbSBIb2xkIERhdGEKKworCithc3NpZ24gIG1lbV93ZGF0YSAgICA9IHdiX2RhdF9pOworCithbHdheXMgQChuZWdlZGdlIHJzdF9uLCBwb3NlZGdlIHdiX2Nsa19pKSBiZWdpbgorICAgIGlmICh+cnN0X24pIGJlZ2luCisgICAgICAgbWVtX2JsX2NudCAgICAgICA8PSAnaDA7CisgICAgICAgbWVtX2FkZHIgICAgICAgICA8PSAnaDA7CisgICAgICAgbWVtX25leHRfYWRkciAgICA8PSAnaDA7CisgICAgICAgd2JfYWNrX2wgICAgICAgICA8PSAnYjA7CisgICAgICAgd2JfZGF0X28gICAgICAgICA8PSAnaDA7CisgICAgICAgbWVtX3JlcSAgICAgICAgICA8PSAnYjA7CisgICAgICAgbWVtX2NzICAgICAgICAgICA8PSAnYjA7CisgICAgICAgbWVtX3dtYXNrICAgICAgICA8PSAnaDA7CisgICAgICAgbWVtX3dlICAgICAgICAgICA8PSAnaDA7CisgICAgICAgbWVtX2h2YWwgICAgICAgICA8PSAnYjA7CisgICAgICAgbWVtX2hkYXRhICAgICAgICA8PSAnaDA7CisgICAgICAgc3RhdGUgICAgICAgICAgICA8PSBJRExFOworICAgIGVuZCBlbHNlIGJlZ2luCisJY2FzZShzdGF0ZSkKKwkgSURMRTogYmVnaW4KKwkgICAgICAgbWVtX2JsX2NudCAgPD0gICdoMTsKKwkgICAgICAgd2JfYWNrX28gICAgPD0gICdiMDsKKwkgICAgICAgd2JfbGFja19vICAgPD0gICdiMDsKKwkgICAgICAgaWYod2Jfc3RiX2kgJiYgd2JfYnJ5X2kgJiYgfndiX3dlX2kgJiYgIXdiX2xhY2tfbykgYmVnaW4KKwkgICAgICAgICAgbWVtX2NzICAgICAgPD0gIHdiX2NzX2k7CisJICAgICAgICAgIG1lbV9hZGRyICAgIDw9ICB3Yl9hZHJfaTsKKwkgICAgICAgICAgbWVtX3JlcSAgICAgPD0gICdiMTsKKwkJICBtZW1fd2UgICAgICA8PSAgJ2IwOworCSAgICAgICAgICBzdGF0ZSAgICAgICA8PSAgUkVBRF9BQ1RJT04xOworCSAgICAgICBlbmQgZWxzZSBpZih3Yl9zdGJfaSAmJiB3Yl9icnlfaSAmJiB3Yl93ZV9pICYmICF3Yl9sYWNrX28pIGJlZ2luCisJICAgICAgICAgIG1lbV9jcyAgICAgIDw9ICB3Yl9jc19pOworCSAgICAgICAgICBtZW1fbmV4dF9hZGRyPD0gIHdiX2Fkcl9pOworCQkgIG1lbV93ZSAgICAgIDw9ICAnYjE7CisgICAgICAgICAgICAgICAgICBtZW1fd21hc2sgICA8PSAgd2Jfc2VsX2k7CisJICAgICAgICAgIHN0YXRlICAgICAgIDw9ICBXUklURV9BQ1RJT047CisJICAgICAgIGVuZCBlbHNlIGJlZ2luCisJICAgICAgICAgIG1lbV9yZXEgICAgICA8PSAgMSdiMDsKKyAgICAgICAgICAgICAgIGVuZAorCSAgICBlbmQKKworICAgICAgICAgV1JJVEVfQUNUSU9OOiBiZWdpbgorCSAgICBpZiAod2Jfc3RiX2kgJiYgd2JfYnJ5X2kgKSBiZWdpbgorCSAgICAgICB3Yl9hY2tfbyAgICAgPD0gICdiMTsKKwkgICAgICAgbWVtX3JlcSAgICAgIDw9ICAxJ2IxOworCSAgICAgICBtZW1fYWRkciAgICAgPD0gIG1lbV9uZXh0X2FkZHI7CisJICAgICAgIGlmKCh3Yl9zdGJfaSAmJiB3Yl9icnlfaSApICYmICh3Yl9ibF9pID09IG1lbV9ibF9jbnQpKSBiZWdpbgorCSAgICAgICAgICAgd2JfbGFja19vICAgPD0gICdiMTsKKwkgICAgICAgICAgIHN0YXRlICAgICAgIDw9IElETEU7CisJICAgICAgIGVuZCBlbHNlIGJlZ2luCisJICAgICAgICAgIG1lbV9ibF9jbnQgICA8PSBtZW1fYmxfY250KzE7CisJICAgICAgICAgIG1lbV9uZXh0X2FkZHI8PSAgbWVtX25leHRfYWRkcisxOworCSAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZCBlbHNlIGJlZ2luIAorCSAgICAgICB3Yl9hY2tfbyAgICAgPD0gICdiMDsKKwkgICAgICAgbWVtX3JlcSAgICAgIDw9ICAxJ2IwOworICAgICAgICAgICAgZW5kCisgICAgICAgICBlbmQKKyAgICAgICBSRUFEX0FDVElPTjE6IGJlZ2luCisJICAgbWVtX2FkZHIgICA8PSAgbWVtX2FkZHIgKzE7CisgICAgICAgICAgIG1lbV9odmFsICAgPD0gMSdiMDsKKwkgICB3Yl9hY2tfbCAgIDw9ICAnYjE7CisJICAgbWVtX2JsX2NudCA8PSAgJ2gxOworCSAgIHN0YXRlICAgICAgPD0gIFJFQURfQUNUSU9OMjsKKyAgICAgICBlbmQKKworICAgICAgIC8vIFdhaXQgZm9yIEFjayBmcm9tIGFwcGxpY2F0aW9uIGxheWVyCisgICAgICAgUkVBRF9BQ1RJT04yOiBiZWdpbgorICAgICAgICAgICAvLyBJZiB0aGUgbm90IHRoZSBsYXN0IGFjaywgdXBkYXRlIG1lbW9yeSBwb2ludGVyCisgICAgICAgICAgIC8vIGFjY29yZGluZ2x5CisJICAgd2JfYWNrX2wgICAgPD0gd2JfYWNrX287CisJICAgaWYgKHdiX3N0Yl9pICYmIHdiX2JyeV9pICkgYmVnaW4KKwkgICAgICB3Yl9hY2tfbyAgIDw9IDEnYjE7CisJICAgICAgbWVtX2JsX2NudCA8PSBtZW1fYmxfY250KzE7CisJICAgICAgbWVtX2FkZHIgICA8PSAgbWVtX2FkZHIgKzE7CisJICAgICAgaWYod2JfYWNrX2wgfHwgd2JfYWNrX28gKSBiZWdpbiAvLyBJZiBiYWNrIHRvIGJhY2sgYWNrIAorICAgICAgICAgICAgICAgICB3Yl9kYXRfbyAgICAgPD0gbWVtX3JkYXRhOworICAgICAgICAgICAgICAgICBtZW1faHZhbCAgICAgPD0gMSdiMDsKKwkgICAgICBlbmQgZWxzZSBiZWdpbiAvLyBQaWNrIGZyb20gcHJldmlvdXMgaG9sZGluZyBkYXRhCisgICAgICAgICAgICAgICAgIG1lbV9odmFsICAgICA8PSAxJ2IxOworICAgICAgICAgICAgICAgICB3Yl9kYXRfbyAgICAgPD0gbWVtX2hkYXRhOworICAgICAgICAgICAgICAgICBtZW1faGRhdGEgICAgPD0gbWVtX3JkYXRhOworCSAgICAgIGVuZAorCSAgICAgIGlmKCh3Yl9zdGJfaSAmJiB3Yl9icnlfaSApICYmICh3Yl9ibF9pID09IG1lbV9ibF9jbnQpKSBiZWdpbgorCQkgIHdiX2xhY2tfbyAgIDw9IDEnYjE7CisJICAgICAgICAgIHN0YXRlICAgICAgIDw9IElETEU7CisJICAgICAgZW5kCisgICAgICAgICAgIGVuZCBlbHNlIGJlZ2luCisJICAgICAgd2JfYWNrX28gICA8PSAxJ2IwOworCSAgICAgIGlmKCFtZW1faHZhbCkgYmVnaW4KKyAgICAgICAgICAgICAgICAgbWVtX2hkYXRhICA8PSBtZW1fcmRhdGE7CisgICAgICAgICAgICAgICAgIG1lbV9odmFsICAgPD0gMSdiMTsKKwkgICAgICBlbmQKKyAgICAgICAgICAgZW5kCisgICAgICAgZW5kCisgICAgICAgZW5kY2FzZQorICAgZW5kCitlbmQKKworZW5kbW9kdWxlCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9tYmlzdF93cmFwcGVyL3NyYy9tYmlzdF93cmFwcGVyLnN2IGIvdmVyaWxvZy9ydGwvbWJpc3Rfd3JhcHBlci9zcmMvbWJpc3Rfd3JhcHBlci5zdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2M1Y2UzCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvbWJpc3Rfd3JhcHBlci9zcmMvbWJpc3Rfd3JhcHBlci5zdgpAQCAtMCwwICsxLDM2OSBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxICwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgIAorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IENyZWF0ZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBNQklTVCBUT1AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgbWJpc3RfY3RybCBjb3JlcyBwcm9qZWN0ICAgICAgICAgICAvLy8vCisvLy8vICBodHRwczovL2dpdGh1Yi5jb20vZGluZXNoYW5uYXl5YS9tYmlzdF9jdHJsLmdpdCAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgVGhpcyBibG9jayBpbnRlZ3JhdGUgbWJpc3QgY29udHJvbGxlciB3aXRoIHJvdyAgICAgICAgICAvLy8vCisvLy8vICAgICAgcmVkZW5kZW5jeSBmZWF0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUbyBEbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIG5vdGhpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBBdXRob3Iocyk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgLSBEaW5lc2ggQW5uYXl5YSwgZGluZXNoYUBvcGVuY29yZXMub3JnICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBSZXZpc2lvbiA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIDAuMCAtIDExdGggT2N0IDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIEluaXRpYWwgaW50ZWdyYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIDAuMSAtIDI2dGggT2N0IDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIEZpeGVkIEVycm9yIEFkZHJlc3MgYXJlIHNlcmlhbCBzaGlmdGVkIHRocm91Z2ggICAgICAvLy8vCisvLy8vICAgICAgICAgIHNkaS9zZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIDAuMiAtIDE1IERlYyAyMDIxLCBEaW5lc2ggQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIGNvbW1vbiBNQklTVCBmb3IgNCBTUkFNICAgICAgICAgICAvLy8vCisvLy8vICAgIDAuMyAtIDI5dGggRGVjIDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIHlvc3lzIHN5bnRoZXNpcyBpc3N1ZSBmb3IgdHdvIGRpbWVuc2lvbiB2YXJpYWJsZSAgICAvLy8vCisvLy8vICAgICAgICAgIGNoYW5nZWQgdGhlIHZhcmlhYmxlIGRlZmluYXRpb24gZnJvbSBsb2dpYyB0byB3aXJlICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2BpbmNsdWRlICJtYmlzdF9kZWYuc3ZoIgorbW9kdWxlIG1iaXN0X3dyYXBwZXIKKyAgICAgIyggIAorICAgICAgICAgcGFyYW1ldGVyIEJJU1RfTk9fU1JBTSAgICAgICAgICAgPSA0LAorCSBwYXJhbWV0ZXIgQklTVF9BRERSX1dEICAgICAgICAgICA9IDksCisJIHBhcmFtZXRlciBCSVNUX0RBVEFfV0QgICAgICAgICAgID0gMzIsCisJIHBhcmFtZXRlciBCSVNUX0FERFJfU1RBUlQgICAgICAgID0gOSdoMDAwLAorCSBwYXJhbWV0ZXIgQklTVF9BRERSX0VORCAgICAgICAgICA9IDknaDFGQiwKKwkgcGFyYW1ldGVyIEJJU1RfUkVQQUlSX0FERFJfU1RBUlQgPSA5J2gxRkMsCisJIHBhcmFtZXRlciBCSVNUX1JBRF9XRF9JICAgICAgICAgID0gQklTVF9BRERSX1dELAorCSBwYXJhbWV0ZXIgQklTVF9SQURfV0RfTyAgICAgICAgICA9IEJJU1RfQUREUl9XRCkgKAorCitgaWZkZWYgVVNFX1BPV0VSX1BJTlMKKyAgICBpbm91dCB2Y2NkMSwJLy8gVXNlciBhcmVhIDEgMS44ViBzdXBwbHkKKyAgICBpbm91dCB2c3NkMSwJLy8gVXNlciBhcmVhIDEgZGlnaXRhbCBncm91bmQKK2BlbmRpZgorCisgICAgLy8gQ2xvY2sgU2tldyBBZGp1c3QKKyAgICAgICBpbnB1dCAgd2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9jbGtfaW50LCAKKyAgICAgICBvdXRwdXQgd2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9jbGtfbWJpc3QsCisgICAgICAgaW5wdXQgIHdpcmUgWzM6MF0gICAgICAgICAgICAgICAgICAgICBjZmdfY3NrYV9tYmlzdCwgLy8gY2xvY2sgc2tldyBhZGp1c3QgZm9yIHdlYiBob3N0CisKKwlpbnB1dCBsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICByc3RfbiwKKworCS8vIE1CSVNUIEkvRgorCWlucHV0IHdpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXN0X2VuLAorCWlucHV0IHdpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlzdF9ydW4sCisJaW5wdXQgd2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXN0X3NoaWZ0LAorCWlucHV0IHdpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlzdF9sb2FkLAorCWlucHV0IHdpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlzdF9zZGksCisKKwlvdXRwdXQgd2lyZSBbMzowXSAgICAgICAgICAgICAgICAgICAgIGJpc3RfZXJyb3JfY250MCwKKwlvdXRwdXQgd2lyZSBbMzowXSAgICAgICAgICAgICAgICAgICAgIGJpc3RfZXJyb3JfY250MSwKKwlvdXRwdXQgd2lyZSBbMzowXSAgICAgICAgICAgICAgICAgICAgIGJpc3RfZXJyb3JfY250MiwKKwlvdXRwdXQgd2lyZSBbMzowXSAgICAgICAgICAgICAgICAgICAgIGJpc3RfZXJyb3JfY250MywKKwlvdXRwdXQgd2lyZSBbQklTVF9OT19TUkFNLTE6MF0gICAgICAgIGJpc3RfY29ycmVjdCAgICwKKwlvdXRwdXQgd2lyZSBbQklTVF9OT19TUkFNLTE6MF0gICAgICAgIGJpc3RfZXJyb3IgICAgICwKKwlvdXRwdXQgd2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpc3RfZG9uZSwKKwlvdXRwdXQgd2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpc3Rfc2RvLAorCisKKyAgICAgICAgLy8gV0IgSS9GCisgICAgICAgIGlucHV0ICAgd2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgd2JfY2xrX2ksICAvLyBTeXN0ZW0gY2xvY2sKKyAgICAgICAgaW5wdXQgICB3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICB3Yl9jbGsyX2ksIC8vIFN5c3RlbSBjbG9jazIgaXMgbm8gY3RzCisgICAgICAgIGlucHV0ICAgd2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgd2Jfc3RiX2ksICAvLyBzdHJvYmUvcmVxdWVzdAorCWlucHV0ICAgd2lyZSBbKEJJU1RfTk9fU1JBTSsxKS8yLTE6MF0gd2JfY3NfaSwKKyAgICAgICAgaW5wdXQgICB3aXJlIFtCSVNUX0FERFJfV0QtMTowXSAgICAgICB3Yl9hZHJfaSwgIC8vIGFkZHJlc3MKKyAgICAgICAgaW5wdXQgICB3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICB3Yl93ZV9pICwgIC8vIHdyaXRlCisgICAgICAgIGlucHV0ICAgd2lyZSBbQklTVF9EQVRBX1dELTE6MF0gICAgICAgd2JfZGF0X2ksICAvLyBkYXRhIG91dHB1dAorICAgICAgICBpbnB1dCAgIHdpcmUgW0JJU1RfREFUQV9XRC84LTE6MF0gICAgIHdiX3NlbF9pLCAgLy8gYnl0ZSBlbmFibGUKKyAgICAgICAgaW5wdXQgICB3aXJlIFs5OjBdICAgICAgICAgICAgICAgICAgICB3Yl9ibF9pLCAgIC8vIGJ1cnN0IAorICAgICAgICBpbnB1dCAgIHdpcmUgICAgICAgICAgICAgICAgICAgICAgICAgIHdiX2JyeV9pLCAgLy8gYnVyc3QgcmVhZHkKKyAgICAgICAgb3V0cHV0ICB3aXJlIFtCSVNUX0RBVEFfV0QtMTowXSAgICAgICB3Yl9kYXRfbywgIC8vIGRhdGEgaW5wdXQKKyAgICAgICAgb3V0cHV0ICB3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICB3Yl9hY2tfbywgIC8vIGFja25vd2xlZ2VtZW50CisgICAgICAgIG91dHB1dCAgd2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgd2JfbGFja19vLCAvLyBhY2tub3dsZWdlbWVudAorICAgICAgICBvdXRwdXQgIHdpcmUgICAgICAgICAgICAgICAgICAgICAgICAgIHdiX2Vycl9vLCAgLy8gZXJyb3IKKworCisgICAgIC8vIHRvd2FyZHMgbWVtb3J5CisgICAgIC8vIFBPUlQtQQorICAgICAgICBvdXRwdXQgd2lyZSAgIFtCSVNUX05PX1NSQU0tMTowXSAgICAgIG1lbV9jbGtfYSwKKyAgICAgICAgb3V0cHV0IHdpcmUgICBbQklTVF9BRERSX1dELTE6MF0gICAgICBtZW1fYWRkcl9hMCwKKyAgICAgICAgb3V0cHV0IHdpcmUgICBbQklTVF9BRERSX1dELTE6MF0gICAgICBtZW1fYWRkcl9hMSwKKyAgICAgICAgb3V0cHV0IHdpcmUgICBbQklTVF9BRERSX1dELTE6MF0gICAgICBtZW1fYWRkcl9hMiwKKyAgICAgICAgb3V0cHV0IHdpcmUgICBbQklTVF9BRERSX1dELTE6MF0gICAgICBtZW1fYWRkcl9hMywKKyAgICAgICAgb3V0cHV0IHdpcmUgICBbQklTVF9OT19TUkFNLTE6MF0gICAgICBtZW1fY2VuX2EsCisgICAgICAgIG91dHB1dCB3aXJlICAgW0JJU1RfTk9fU1JBTS0xOjBdICAgICAgbWVtX3dlYl9hLAorICAgICAgICBvdXRwdXQgd2lyZSAgIFtCSVNUX0RBVEFfV0QvOC0xOjBdICAgIG1lbV9tYXNrX2EwLAorICAgICAgICBvdXRwdXQgd2lyZSAgIFtCSVNUX0RBVEFfV0QvOC0xOjBdICAgIG1lbV9tYXNrX2ExLAorICAgICAgICBvdXRwdXQgd2lyZSAgIFtCSVNUX0RBVEFfV0QvOC0xOjBdICAgIG1lbV9tYXNrX2EyLAorICAgICAgICBvdXRwdXQgd2lyZSAgIFtCSVNUX0RBVEFfV0QvOC0xOjBdICAgIG1lbV9tYXNrX2EzLAorICAgICAgICBvdXRwdXQgd2lyZSAgIFtCSVNUX0RBVEFfV0QtMTowXSAgICAgIG1lbV9kaW5fYTAsCisgICAgICAgIG91dHB1dCB3aXJlICAgW0JJU1RfREFUQV9XRC0xOjBdICAgICAgbWVtX2Rpbl9hMSwKKyAgICAgICAgb3V0cHV0IHdpcmUgICBbQklTVF9EQVRBX1dELTE6MF0gICAgICBtZW1fZGluX2EyLAorICAgICAgICBvdXRwdXQgd2lyZSAgIFtCSVNUX0RBVEFfV0QtMTowXSAgICAgIG1lbV9kaW5fYTMsCisKKyAgICAgICAgaW5wdXQgIHdpcmUgICBbQklTVF9EQVRBX1dELTE6MF0gICAgICBtZW1fZG91dF9hMCwKKyAgICAgICAgaW5wdXQgIHdpcmUgICBbQklTVF9EQVRBX1dELTE6MF0gICAgICBtZW1fZG91dF9hMSwKKyAgICAgICAgaW5wdXQgIHdpcmUgICBbQklTVF9EQVRBX1dELTE6MF0gICAgICBtZW1fZG91dF9hMiwKKyAgICAgICAgaW5wdXQgIHdpcmUgICBbQklTVF9EQVRBX1dELTE6MF0gICAgICBtZW1fZG91dF9hMywKKworCisgICAgIC8vIFBPUlQtQgorICAgICAgICBvdXRwdXQgd2lyZSBbQklTVF9OT19TUkFNLTE6MF0gICAgICAgIG1lbV9jbGtfYiwKKyAgICAgICAgb3V0cHV0IHdpcmUgW0JJU1RfTk9fU1JBTS0xOjBdICAgICAgICBtZW1fY2VuX2IsCisgICAgICAgIG91dHB1dCB3aXJlICAgW0JJU1RfQUREUl9XRC0xOjBdICAgICAgbWVtX2FkZHJfYjAsCisgICAgICAgIG91dHB1dCB3aXJlICAgW0JJU1RfQUREUl9XRC0xOjBdICAgICAgbWVtX2FkZHJfYjEsCisgICAgICAgIG91dHB1dCB3aXJlICAgW0JJU1RfQUREUl9XRC0xOjBdICAgICAgbWVtX2FkZHJfYjIsCisgICAgICAgIG91dHB1dCB3aXJlICAgW0JJU1RfQUREUl9XRC0xOjBdICAgICAgbWVtX2FkZHJfYjMKKworCisKKyk7CisKK3BhcmFtZXRlciAgTk9fU1JBTV9XRCA9IChCSVNUX05PX1NSQU0rMSkvMjsKK3BhcmFtZXRlciAgICAgQklTVDFfQUREUl9XRCA9IDExOyAvLyA1MTJ4MzIgU1JBTQorCitsb2dpYyAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtX3JlcTsgIC8vIHN0cm9iZS9yZXF1ZXN0Citsb2dpYyBbKEJJU1RfTk9fU1JBTSsxKS8yLTE6MF0gbWVtX2NzOworbG9naWMgW0JJU1RfQUREUl9XRC0xOjBdICAgICAgIG1lbV9hZGRyOyAgLy8gYWRkcmVzcworbG9naWMgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbV93ZSA7ICAvLyB3cml0ZQorbG9naWMgW0JJU1RfREFUQV9XRC0xOjBdICAgICAgIG1lbV93ZGF0YTsgIC8vIGRhdGEgb3V0cHV0Citsb2dpYyBbQklTVF9EQVRBX1dELzgtMTowXSAgICAgbWVtX3dtYXNrOyAgLy8gYnl0ZSBlbmFibGUKK2xvZ2ljIFtCSVNUX0RBVEFfV0QtMTowXSAgICAgICBtZW1fcmRhdGE7ICAvLyBkYXRhIGlucHV0CisKKworbWJpc3Rfd2IgICMoCisJLkJJU1RfTk9fU1JBTSAgICAgICAgICAgKDQgICAgICAgICAgICAgICAgICAgICAgKSwKKwkuQklTVF9BRERSX1dEICAgICAgICAgICAoQklTVDFfQUREUl9XRC0yICAgICAgICApLAorCS5CSVNUX0RBVEFfV0QgICAgICAgICAgIChCSVNUX0RBVEFfV0QgICAgICAgICAgICkKKyAgICAgKSAKKwkgICAgIHVfd2IgKAorCitgaWZkZWYgVVNFX1BPV0VSX1BJTlMKKyAgICAgICAudmNjZDEgICAgICAgICAgICAgICAgICAodmNjZDEgICAgICAgICAgICAgICAgICAgICApLC8vIFVzZXIgYXJlYSAxIDEuOFYgc3VwcGx5CisgICAgICAgLnZzc2QxICAgICAgICAgICAgICAgICAgKHZzc2QxICAgICAgICAgICAgICAgICAgICAgKSwvLyBVc2VyIGFyZWEgMSBkaWdpdGFsIGdyb3VuZAorYGVuZGlmCisKKwkucnN0X24gICAgICAgICAgICAgICAgKHJzdF9uICAgICAgICAgICAgICAgICksCisJLy8gV0IgSS9GCisgICAgICAgIC53Yl9jbGtfaSAgICAgICAgICAgICAod2JfY2xrX2kgICAgICAgICAgICAgKSwgIAorICAgICAgICAud2Jfc3RiX2kgICAgICAgICAgICAgKHdiX3N0Yl9pICAgICAgICAgICAgICksICAKKyAgICAgICAgLndiX2NzX2kgICAgICAgICAgICAgICh3Yl9jc19pICAgICAgICAgICAgICApLAorICAgICAgICAud2JfYWRyX2kgICAgICAgICAgICAgKHdiX2Fkcl9pICAgICAgICAgICAgICksCisgICAgICAgIC53Yl93ZV9pICAgICAgICAgICAgICAod2Jfd2VfaSAgICAgICAgICAgICAgKSwgIAorICAgICAgICAud2JfZGF0X2kgICAgICAgICAgICAgKHdiX2RhdF9pICAgICAgICAgICAgICksICAKKyAgICAgICAgLndiX3NlbF9pICAgICAgICAgICAgICh3Yl9zZWxfaSAgICAgICAgICAgICApLCAgCisgICAgICAgIC53Yl9ibF9pICAgICAgICAgICAgICAod2JfYmxfaSAgICAgICAgICAgICAgKSwgIAorICAgICAgICAud2JfYnJ5X2kgICAgICAgICAgICAgKHdiX2JyeV9pICAgICAgICAgICAgICksICAKKyAgICAgICAgLndiX2RhdF9vICAgICAgICAgICAgICh3Yl9kYXRfbyAgICAgICAgICAgICApLCAgCisgICAgICAgIC53Yl9hY2tfbyAgICAgICAgICAgICAod2JfYWNrX28gICAgICAgICAgICAgKSwgIAorICAgICAgICAud2JfbGFja19vICAgICAgICAgICAgKHdiX2xhY2tfbyAgICAgICAgICAgICksICAKKyAgICAgICAgLndiX2Vycl9vICAgICAgICAgICAgICggICAgICAgICAgICAgICAgICAgICApLCAKKworCS5tZW1fcmVxICAgICAgICAgICAgICAobWVtX3JlcSAgICAgICAgICAgICAgKSwKKwkubWVtX2NzICAgICAgICAgICAgICAgKG1lbV9jcyAgICAgICAgICAgICAgICksCisJLm1lbV9hZGRyICAgICAgICAgICAgIChtZW1fYWRkciAgICAgICAgICAgICApLAorCS5tZW1fd2UgICAgICAgICAgICAgICAobWVtX3dlICAgICAgICAgICAgICAgKSwKKwkubWVtX3dkYXRhICAgICAgICAgICAgKG1lbV93ZGF0YSAgICAgICAgICAgICksCisJLm1lbV93bWFzayAgICAgICAgICAgIChtZW1fd21hc2sgICAgICAgICAgICApLAorCS5tZW1fcmRhdGEgICAgICAgICAgICAobWVtX3JkYXRhICAgICAgICAgICAgKQorCisJCisKKworKTsKKworCittYmlzdF90b3AgICMoCisJYGlmbmRlZiBTWU5USEVTSVMKKwkuQklTVF9OT19TUkFNICAgICAgICAgICAoNCAgICAgICAgICAgICAgICAgICAgICApLAorCS5CSVNUX0FERFJfV0QgICAgICAgICAgIChCSVNUMV9BRERSX1dELTIgICAgICAgICksCisJLkJJU1RfREFUQV9XRCAgICAgICAgICAgKEJJU1RfREFUQV9XRCAgICAgICAgICAgKSwKKwkuQklTVF9BRERSX1NUQVJUICAgICAgICAoOSdoMDAwICAgICAgICAgICAgICAgICApLAorCS5CSVNUX0FERFJfRU5EICAgICAgICAgICg5J2gxRkIgICAgICAgICAgICAgICAgICksCisJLkJJU1RfUkVQQUlSX0FERFJfU1RBUlQgKDknaDFGQyAgICAgICAgICAgICAgICAgKSwKKwkuQklTVF9SQURfV0RfSSAgICAgICAgICAoQklTVDFfQUREUl9XRC0yICAgICAgICApLAorCS5CSVNUX1JBRF9XRF9PICAgICAgICAgIChCSVNUMV9BRERSX1dELTIgICAgICAgICkKKyAgICAgICAgYGVuZGlmCisgICAgICkgCisJICAgICB1X21iaXN0ICgKKworYGlmZGVmIFVTRV9QT1dFUl9QSU5TCisgICAgICAgLnZjY2QxICAgICAgICAgICAgICAgICAgKHZjY2QxICAgICAgICAgICAgICAgICAgICAgKSwvLyBVc2VyIGFyZWEgMSAxLjhWIHN1cHBseQorICAgICAgIC52c3NkMSAgICAgICAgICAgICAgICAgICh2c3NkMSAgICAgICAgICAgICAgICAgICAgICksLy8gVXNlciBhcmVhIDEgZGlnaXRhbCBncm91bmQKK2BlbmRpZgorCisgICAgIC8vIENsb2NrIFNrZXcgYWRqdXN0CisJLndiZF9jbGtfaW50ICAgICAgICAgICh3YmRfY2xrX2ludCAgICAgICAgICApLCAKKwkuY2ZnX2Nza2FfbWJpc3QgICAgICAgKGNmZ19jc2thX21iaXN0ICAgICAgICksIAorCS53YmRfY2xrX21iaXN0ICAgICAgICAod2JkX2Nsa19tYmlzdCAgICAgICAgKSwKKworCS8vIFdCIEkvRgorICAgICAgICAud2JfY2xrMl9pICAgICAgICAgICAgKHdiX2NsazJfaSAgICAgICAgICAgICksICAKKyAgICAgICAgLndiX2Nsa19pICAgICAgICAgICAgICh3Yl9jbGtfaSAgICAgICAgICAgICApLCAgCisgICAgICAgIC5tZW1fcmVxICAgICAgICAgICAgICAobWVtX3JlcSAgICAgICAgICAgICAgKSwgIAorCS5tZW1fY3MgICAgICAgICAgICAgICAobWVtX2NzICAgICAgICAgICAgICAgKSwKKyAgICAgICAgLm1lbV9hZGRyICAgICAgICAgICAgIChtZW1fYWRkciAgICAgICAgICAgICApLCAgCisgICAgICAgIC5tZW1fd2UgICAgICAgICAgICAgICAobWVtX3dlICAgICAgICAgICAgICAgKSwgIAorICAgICAgICAubWVtX3dkYXRhICAgICAgICAgICAgKG1lbV93ZGF0YSAgICAgICAgICAgICksICAKKyAgICAgICAgLm1lbV93bWFzayAgICAgICAgICAgIChtZW1fd21hc2sgICAgICAgICAgICApLCAgCisgICAgICAgIC5tZW1fcmRhdGEgICAgICAgICAgICAobWVtX3JkYXRhICAgICAgICAgICAgKSwgIAorCisJLnJzdF9uICAgICAgICAgICAgICAgIChyc3RfbiAgICAgICAgICAgICAgICApLAorCisJCisJLmJpc3RfZW4gICAgICAgICAgICAgIChiaXN0X2VuICAgICAgICAgICAgICApLAorCS5iaXN0X3J1biAgICAgICAgICAgICAoYmlzdF9ydW4gICAgICAgICAgICAgKSwKKwkuYmlzdF9zaGlmdCAgICAgICAgICAgKGJpc3Rfc2hpZnQgICAgICAgICAgICksCisJLmJpc3RfbG9hZCAgICAgICAgICAgIChiaXN0X2xvYWQgICAgICAgICAgICApLAorCS5iaXN0X3NkaSAgICAgICAgICAgICAoYmlzdF9zZGkgICAgICAgICAgICAgKSwKKworCS5iaXN0X2Vycm9yX2NudDMgICAgICAoYmlzdF9lcnJvcl9jbnQzICApLAorCS5iaXN0X2Vycm9yX2NudDIgICAgICAoYmlzdF9lcnJvcl9jbnQyICApLAorCS5iaXN0X2Vycm9yX2NudDEgICAgICAoYmlzdF9lcnJvcl9jbnQxICApLAorCS5iaXN0X2Vycm9yX2NudDAgICAgICAoYmlzdF9lcnJvcl9jbnQwICApLAorCS5iaXN0X2NvcnJlY3QgICAgICAgICAoYmlzdF9jb3JyZWN0ICAgICApLAorCS5iaXN0X2Vycm9yICAgICAgICAgICAoYmlzdF9lcnJvciAgICAgICApLAorCS5iaXN0X2RvbmUgICAgICAgICAgICAoYmlzdF9kb25lICAgICAgICApLAorCS5iaXN0X3NkbyAgICAgICAgICAgICAoYmlzdF9zZG8gICAgICAgICApLAorCisgICAgIC8vIHRvd2FyZHMgbWVtb3J5CisgICAgIC8vIFBPUlQtQQorICAgICAgICAubWVtX2Nsa19hICAgICAgICAgICAgKG1lbV9jbGtfYSAgICAgICAgKSwKKyAgICAgICAgLm1lbV9hZGRyX2EwICAgICAgICAgIChtZW1fYWRkcl9hMCAgICAgICksCisgICAgICAgIC5tZW1fYWRkcl9hMSAgICAgICAgICAobWVtX2FkZHJfYTEgICAgICApLAorICAgICAgICAubWVtX2FkZHJfYTIgICAgICAgICAgKG1lbV9hZGRyX2EyICAgICAgKSwKKyAgICAgICAgLm1lbV9hZGRyX2EzICAgICAgICAgIChtZW1fYWRkcl9hMyAgICAgICksCisgICAgICAgIC5tZW1fY2VuX2EgICAgICAgICAgICAobWVtX2Nlbl9hICAgICAgICApLAorICAgICAgICAubWVtX3dlYl9hICAgICAgICAgICAgKG1lbV93ZWJfYSAgICAgICAgKSwKKyAgICAgICAgLm1lbV9tYXNrX2EwICAgICAgICAgIChtZW1fbWFza19hMCAgICAgICksCisgICAgICAgIC5tZW1fbWFza19hMSAgICAgICAgICAobWVtX21hc2tfYTEgICAgICApLAorICAgICAgICAubWVtX21hc2tfYTIgICAgICAgICAgKG1lbV9tYXNrX2EyICAgICAgKSwKKyAgICAgICAgLm1lbV9tYXNrX2EzICAgICAgICAgIChtZW1fbWFza19hMyAgICAgICksCisgICAgICAgIC5tZW1fZGluX2EwICAgICAgICAgICAobWVtX2Rpbl9hMCAgICAgICApLAorICAgICAgICAubWVtX2Rpbl9hMSAgICAgICAgICAgKG1lbV9kaW5fYTEgICAgICAgKSwKKyAgICAgICAgLm1lbV9kaW5fYTIgICAgICAgICAgIChtZW1fZGluX2EyICAgICAgICksCisgICAgICAgIC5tZW1fZGluX2EzICAgICAgICAgICAobWVtX2Rpbl9hMyAgICAgICApLAorICAgICAgICAubWVtX2RvdXRfYTAgICAgICAgICAgKG1lbV9kb3V0X2EwICAgICAgKSwKKyAgICAgICAgLm1lbV9kb3V0X2ExICAgICAgICAgIChtZW1fZG91dF9hMSAgICAgICksCisgICAgICAgIC5tZW1fZG91dF9hMiAgICAgICAgICAobWVtX2RvdXRfYTIgICAgICApLAorICAgICAgICAubWVtX2RvdXRfYTMgICAgICAgICAgKG1lbV9kb3V0X2EzICAgICAgKSwKKyAgICAgLy8gUE9SVC1CCisgICAgICAgIC5tZW1fY2xrX2IgICAgICAgICAgICAobWVtX2Nsa19iICAgICAgICApLAorICAgICAgICAubWVtX2Nlbl9iICAgICAgICAgICAgKG1lbV9jZW5fYiAgICAgICAgKSwKKyAgICAgICAgLm1lbV9hZGRyX2IwICAgICAgICAgIChtZW1fYWRkcl9iMCAgICAgICksCisgICAgICAgIC5tZW1fYWRkcl9iMSAgICAgICAgICAobWVtX2FkZHJfYjEgICAgICApLAorICAgICAgICAubWVtX2FkZHJfYjIgICAgICAgICAgKG1lbV9hZGRyX2IyICAgICAgKSwKKyAgICAgICAgLm1lbV9hZGRyX2IzICAgICAgICAgIChtZW1fYWRkcl9iMyAgICAgICkKKworCispOworCisKKy8qKgorc2t5MTMwX3NyYW1fMmtieXRlXzFydzFyXzMyeDUxMl84IHVfc3JhbTBfMmtiKAorYGlmZGVmIFVTRV9QT1dFUl9QSU5TCisgICAgLnZjY2QxICh2Y2NkMSksLy8gVXNlciBhcmVhIDEgMS44ViBzdXBwbHkKKyAgICAudnNzZDEgKHZzc2QxKSwvLyBVc2VyIGFyZWEgMSBkaWdpdGFsIGdyb3VuZAorYGVuZGlmCisvLyBQb3J0IDA6IFJXCisgICAgLmNsazAgICAgIChtZW1fY2xrX2FbMF0pLAorICAgIC5jc2IwICAgICAobWVtX2Nlbl9hWzBdKSwKKyAgICAud2ViMCAgICAgKG1lbV93ZWJfYVswXSksCisgICAgLndtYXNrMCAgIChtZW0wX21hc2tfYSksCisgICAgLmFkZHIwICAgIChtZW0wX2FkZHJfYSksCisgICAgLmRpbjAgICAgIChtZW0wX2Rpbl9hKSwKKyAgICAuZG91dDAgICAgKG1lbTBfZG91dF9hKSwKKy8vIFBvcnQgMTogUgorICAgIC5jbGsxICAgICAobWVtX2Nsa19iWzBdKSwKKyAgICAuY3NiMSAgICAgKG1lbV9jZW5fYlswXSksCisgICAgLmFkZHIxICAgIChtZW0wX2FkZHJfYiksCisgICAgLmRvdXQxICAgICgpCisgICk7CisKK3NreTEzMF9zcmFtXzJrYnl0ZV8xcncxcl8zMng1MTJfOCB1X3NyYW0xXzJrYigKK2BpZmRlZiBVU0VfUE9XRVJfUElOUworICAgIC52Y2NkMSAodmNjZDEpLC8vIFVzZXIgYXJlYSAxIDEuOFYgc3VwcGx5CisgICAgLnZzc2QxICh2c3NkMSksLy8gVXNlciBhcmVhIDEgZGlnaXRhbCBncm91bmQKK2BlbmRpZgorLy8gUG9ydCAwOiBSVworICAgIC5jbGswICAgICAobWVtX2Nsa19hWzFdKSwKKyAgICAuY3NiMCAgICAgKG1lbV9jZW5fYVsxXSksCisgICAgLndlYjAgICAgIChtZW1fd2ViX2FbMV0pLAorICAgIC53bWFzazAgICAobWVtMV9tYXNrX2EpLAorICAgIC5hZGRyMCAgICAobWVtMV9hZGRyX2EpLAorICAgIC5kaW4wICAgICAobWVtMV9kaW5fYSksCisgICAgLmRvdXQwICAgIChtZW0xX2RvdXRfYSksCisvLyBQb3J0IDE6IFIKKyAgICAuY2xrMSAgICAgKG1lbV9jbGtfYlsxXSksCisgICAgLmNzYjEgICAgIChtZW1fY2VuX2JbMV0pLAorICAgIC5hZGRyMSAgICAobWVtMV9hZGRyX2IpLAorICAgIC5kb3V0MSAgICAoKQorICApOworCitza3kxMzBfc3JhbV8ya2J5dGVfMXJ3MXJfMzJ4NTEyXzggdV9zcmFtMl8ya2IoCitgaWZkZWYgVVNFX1BPV0VSX1BJTlMKKyAgICAudmNjZDEgKHZjY2QxKSwvLyBVc2VyIGFyZWEgMSAxLjhWIHN1cHBseQorICAgIC52c3NkMSAodnNzZDEpLC8vIFVzZXIgYXJlYSAxIGRpZ2l0YWwgZ3JvdW5kCitgZW5kaWYKKy8vIFBvcnQgMDogUlcKKyAgICAuY2xrMCAgICAgKG1lbV9jbGtfYVsyXSksCisgICAgLmNzYjAgICAgIChtZW1fY2VuX2FbMl0pLAorICAgIC53ZWIwICAgICAobWVtX3dlYl9hWzJdKSwKKyAgICAud21hc2swICAgKG1lbTJfbWFza19hKSwKKyAgICAuYWRkcjAgICAgKG1lbTJfYWRkcl9hKSwKKyAgICAuZGluMCAgICAgKG1lbTJfZGluX2EpLAorICAgIC5kb3V0MCAgICAobWVtMl9kb3V0X2EpLAorLy8gUG9ydCAxOiBSCisgICAgLmNsazEgICAgIChtZW1fY2xrX2JbMl0pLAorICAgIC5jc2IxICAgICAobWVtX2Nlbl9iWzJdKSwKKyAgICAuYWRkcjEgICAgKG1lbTJfYWRkcl9iKSwKKyAgICAuZG91dDEgICAgKCkKKyAgKTsKKworCitza3kxMzBfc3JhbV8ya2J5dGVfMXJ3MXJfMzJ4NTEyXzggdV9zcmFtM18ya2IoCitgaWZkZWYgVVNFX1BPV0VSX1BJTlMKKyAgICAudmNjZDEgKHZjY2QxKSwvLyBVc2VyIGFyZWEgMSAxLjhWIHN1cHBseQorICAgIC52c3NkMSAodnNzZDEpLC8vIFVzZXIgYXJlYSAxIGRpZ2l0YWwgZ3JvdW5kCitgZW5kaWYKKy8vIFBvcnQgMDogUlcKKyAgICAuY2xrMCAgICAgKG1lbV9jbGtfYVszXSksCisgICAgLmNzYjAgICAgIChtZW1fY2VuX2FbM10pLAorICAgIC53ZWIwICAgICAobWVtX3dlYl9hWzNdKSwKKyAgICAud21hc2swICAgKG1lbTNfbWFza19hKSwKKyAgICAuYWRkcjAgICAgKG1lbTNfYWRkcl9hKSwKKyAgICAuZGluMCAgICAgKG1lbTNfZGluX2EpLAorICAgIC5kb3V0MCAgICAobWVtM19kb3V0X2EpLAorLy8gUG9ydCAxOiBSCisgICAgLmNsazEgICAgIChtZW1fY2xrX2JbM10pLAorICAgIC5jc2IxICAgICAobWVtX2Nlbl9iWzNdKSwKKyAgICAuYWRkcjEgICAgKG1lbTNfYWRkcl9iKSwKKyAgICAuZG91dDEgICAgKCkKKyAgKTsKKworCisqKiovCisKK2VuZG1vZHVsZQorCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9waW5tdXgvc3JjL2dwaW9fY29udHJvbC5zdiBiL3Zlcmlsb2cvcnRsL3Bpbm11eC9zcmMvZ3Bpb19jb250cm9sLnN2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjOTE3ZGMKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC9waW5tdXgvc3JjL2dwaW9fY29udHJvbC5zdgpAQCAtMCwwICsxLDQ0IEBACisKKy8vIEdQSU8gSW50ZXJydXB0IEdlbmVyYXRpb24KK21vZHVsZSBncGlvX2ludHIgKAorICAgaW5wdXQgIGxvZ2ljICAgICAgICAgbWNsayAgICAgICAgICAgICAgICAgICAgICwvLyBTeXN0ZW0gY2xrCisgICBpbnB1dCAgbG9naWMgICAgICAgICBoX3Jlc2V0X24gICAgICAgICAgICAgICAgLC8vIHN5c3RlbSByZXNldAorICAgaW5wdXQgIGxvZ2ljIFszMTowXSAgZ3Bpb19wcmV2X2luZGF0YSAgICAgICAgICwvLyBwcmV2aW91c2x5IGNhcHR1cmVkIEdQSU8gSS9QIHBpbnMgZGF0YQorICAgaW5wdXQgIGxvZ2ljIFszMTowXSAgY2ZnX2dwaW9fZGF0YV9pbiAgICAgICAgICwvLyBHUElPIEkvUCBwaW5zIGRhdGEgY2FwdHVyZWQgaW50byB0aGlzCisgICBpbnB1dCAgbG9naWMgWzMxOjBdICBjZmdfZ3Bpb19vdXRfZGF0YSAgICAgICAgLC8vIEdQSU8gc3RhdHVjIE8vUCBkYXRhIGZyb20gY29uZmlnIHJlZworICAgaW5wdXQgIGxvZ2ljIFszMTowXSAgY2ZnX2dwaW9fZGlyX3NlbCAgICAgICAgICwvLyBkZWNpZGVzIG9uIEdQSU8gcGluIGlzIEkvUCBvciBPL1AgYXQgcGFkIGxldmVsCisgICBpbnB1dCAgbG9naWMgWzMxOjBdICBjZmdfZ3Bpb19wb3NlZGdlX2ludF9zZWwgLC8vIHNlbGVjdCBwb3NlZGdlIGludGVycnVwdAorICAgaW5wdXQgIGxvZ2ljIFszMTowXSAgY2ZnX2dwaW9fbmVnZWRnZV9pbnRfc2VsICwvLyBzZWxlY3QgbmVnZWRnZSBpbnRlcnJ1cHQKKyAgIAorICAgCisgICBvdXRwdXQgbG9naWMgWzMxOjBdICBwYWRfZ3Bpb19vdXQgICAgICAgICAgICAgLC8vIEdQSU8gTy9QIHRvIHRoZSBncGlvIGNmZyByZWcKKyAgIG91dHB1dCBsb2dpYyBbMzE6MF0gIGdwaW9faW50X2V2ZW50ICAgICAgICAgICAgLy8gdG8gdGhlIGNmZyBpbnRlcnJ1cHQgc3RhdHVzIHJlZyAKKyAKKyk7CisKKworaW50ZWdlciBpOworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTG9naWMgZm9yIGludGVycnVwdCBkZXRlY3Rpb24gCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3JlZyBbMzE6MF0gIGxvY2FsX2dwaW9faW50X2V2ZW50OyAgICAgICAgICAgICAvLyB0byB0aGUgY2ZnIGludGVycnVwdCBzdGF0dXMgcmVnIAorYWx3YXlzIEAoY2ZnX2dwaW9fZGF0YV9pbiBvciBjZmdfZ3Bpb19uZWdlZGdlX2ludF9zZWwgb3IgY2ZnX2dwaW9fcG9zZWRnZV9pbnRfc2VsCisgICAgICAgICAgICBvciBncGlvX3ByZXZfaW5kYXRhKQorYmVnaW4KKyAgIGZvciAoaT0wOyBpPDMyOyBpPWkrMSkKKyAgIGJlZ2luIAorICAgLy8gbG9va2luZyBmb3IgcmlzaW5nIGVkZ2UgaW50IAorICAgICAgbG9jYWxfZ3Bpb19pbnRfZXZlbnRbaV0gPSAoKGNmZ19ncGlvX3Bvc2VkZ2VfaW50X3NlbFtpXSAmIH5ncGlvX3ByZXZfaW5kYXRhW2ldIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmICBjZmdfZ3Bpb19kYXRhX2luW2ldKSB8IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNmZ19ncGlvX25lZ2VkZ2VfaW50X3NlbFtpXSAmIGdwaW9fcHJldl9pbmRhdGFbaV0gJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB+Y2ZnX2dwaW9fZGF0YV9pbltpXSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsb29raW5nIGZvciBmYWxsaW5nIGVkZ2UgaW50IAorICAgZW5kCitlbmQKKworYXNzaWduIGdwaW9faW50X2V2ZW50ICAgPSBsb2NhbF9ncGlvX2ludF9ldmVudFszMTowXTsgLy8gZ29lcyBhcyBPL1AgdG8gdGhlIGNmZyByZWcgCisKK2Fzc2lnbiBwYWRfZ3Bpb19vdXQgICAgID0gY2ZnX2dwaW9fb3V0X2RhdGFbMzE6MF0gICAgIDsvLyBPL1Agb24gdGhlIEdQSU8gYnVzCisKK2VuZG1vZHVsZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvcGlubXV4L3NyYy9ncGlvX2ludHIuc3YgYi92ZXJpbG9nL3J0bC9waW5tdXgvc3JjL2dwaW9faW50ci5zdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzE5MThkCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvcGlubXV4L3NyYy9ncGlvX2ludHIuc3YKQEAgLTAsMCArMSw0MyBAQAorCisvLyBHUElPIEludGVycnVwdCBHZW5lcmF0aW9uCittb2R1bGUgZ3Bpb19pbnRyICgKKyAgIGlucHV0ICBsb2dpYyAgICAgICAgIG1jbGsgICAgICAgICAgICAgICAgICAgICAsLy8gU3lzdGVtIGNsaworICAgaW5wdXQgIGxvZ2ljICAgICAgICAgaF9yZXNldF9uICAgICAgICAgICAgICAgICwvLyBzeXN0ZW0gcmVzZXQKKyAgIGlucHV0ICBsb2dpYyBbMzE6MF0gIGdwaW9fcHJldl9pbmRhdGEgICAgICAgICAsLy8gcHJldmlvdXNseSBjYXB0dXJlZCBHUElPIEkvUCBwaW5zIGRhdGEKKyAgIGlucHV0ICBsb2dpYyBbMzE6MF0gIGNmZ19ncGlvX2RhdGFfaW4gICAgICAgICAsLy8gR1BJTyBJL1AgcGlucyBkYXRhIGNhcHR1cmVkIGludG8gdGhpcworICAgaW5wdXQgIGxvZ2ljIFszMTowXSAgY2ZnX2dwaW9fb3V0X2RhdGEgICAgICAgICwvLyBHUElPIHN0YXR1YyBPL1AgZGF0YSBmcm9tIGNvbmZpZyByZWcKKyAgIGlucHV0ICBsb2dpYyBbMzE6MF0gIGNmZ19ncGlvX2Rpcl9zZWwgICAgICAgICAsLy8gZGVjaWRlcyBvbiBHUElPIHBpbiBpcyBJL1Agb3IgTy9QIGF0IHBhZCBsZXZlbAorICAgaW5wdXQgIGxvZ2ljIFszMTowXSAgY2ZnX2dwaW9fcG9zZWRnZV9pbnRfc2VsICwvLyBzZWxlY3QgcG9zZWRnZSBpbnRlcnJ1cHQKKyAgIGlucHV0ICBsb2dpYyBbMzE6MF0gIGNmZ19ncGlvX25lZ2VkZ2VfaW50X3NlbCAsLy8gc2VsZWN0IG5lZ2VkZ2UgaW50ZXJydXB0CisgICAKKyAgIAorICAgb3V0cHV0IGxvZ2ljIFszMTowXSAgcGFkX2dwaW9fb3V0ICAgICAgICAgICAgICwvLyBHUElPIE8vUCB0byB0aGUgZ3BpbyBjZmcgcmVnCisgICBvdXRwdXQgbG9naWMgWzMxOjBdICBncGlvX2ludF9ldmVudCAgICAgICAgICAgIC8vIHRvIHRoZSBjZmcgaW50ZXJydXB0IHN0YXR1cyByZWcgCisgCispOworCisKK2ludGVnZXIgaTsKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIExvZ2ljIGZvciBpbnRlcnJ1cHQgZGV0ZWN0aW9uIAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCityZWcgWzMxOjBdICBsb2NhbF9ncGlvX2ludF9ldmVudDsgICAgICAgICAgICAgLy8gdG8gdGhlIGNmZyBpbnRlcnJ1cHQgc3RhdHVzIHJlZyAKK2Fsd2F5c19jb21iCitiZWdpbgorICAgZm9yIChpPTA7IGk8MzI7IGk9aSsxKQorICAgYmVnaW4gCisgICAvLyBsb29raW5nIGZvciByaXNpbmcgZWRnZSBpbnQgCisgICAgICBsb2NhbF9ncGlvX2ludF9ldmVudFtpXSA9ICgoY2ZnX2dwaW9fcG9zZWRnZV9pbnRfc2VsW2ldICYgfmdwaW9fcHJldl9pbmRhdGFbaV0gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgIGNmZ19ncGlvX2RhdGFfaW5baV0pIHwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2ZnX2dwaW9fbmVnZWRnZV9pbnRfc2VsW2ldICYgZ3Bpb19wcmV2X2luZGF0YVtpXSAmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH5jZmdfZ3Bpb19kYXRhX2luW2ldKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxvb2tpbmcgZm9yIGZhbGxpbmcgZWRnZSBpbnQgCisgICBlbmQKK2VuZAorCithc3NpZ24gZ3Bpb19pbnRfZXZlbnQgICA9IGxvY2FsX2dwaW9faW50X2V2ZW50WzMxOjBdOyAvLyBnb2VzIGFzIE8vUCB0byB0aGUgY2ZnIHJlZyAKKworYXNzaWduIHBhZF9ncGlvX291dCAgICAgPSBjZmdfZ3Bpb19vdXRfZGF0YVszMTowXSAgICAgOy8vIE8vUCBvbiB0aGUgR1BJTyBidXMKKworZW5kbW9kdWxlCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9waW5tdXgvc3JjL3Bpbm11eC5zdiBiL3Zlcmlsb2cvcnRsL3Bpbm11eC9zcmMvcGlubXV4LnN2Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQ2YTY5YTQKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC9waW5tdXgvc3JjL3Bpbm11eC5zdgpAQCAtMCwwICsxLDgwMSBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxICwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgIAorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IENyZWF0ZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBQaW5tdXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSByaXNjZHVpbm8gY29yZXMgcHJvamVjdCAgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHBzOi8vZ2l0aHViLmNvbS9kaW5lc2hhbm5heXlhL3Jpc2NkdWluby5naXQgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICBQaW5NdXggTWFuYWdlcyBhbGwgdGhlIHBpbiBtdWx0aXBsZXhpbmcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcihzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAtIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFJldmlzaW9uIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC4xIC0gMTZ0aCBGZWIgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgaW5pdGlhbCB2ZXJzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworbW9kdWxlIHBpbm11eCAoCisgICAgICAgICAgICAgICAgICAgIGBpZmRlZiBVU0VfUE9XRVJfUElOUworICAgICAgICAgICAgICAgICAgICAgICBpbnB1dCBsb2dpYyAgICAgICAgIHZjY2QxLC8vIFVzZXIgYXJlYSAxIDEuOFYgc3VwcGx5CisgICAgICAgICAgICAgICAgICAgICAgIGlucHV0IGxvZ2ljICAgICAgICAgdnNzZDEsLy8gVXNlciBhcmVhIDEgZGlnaXRhbCBncm91bmQKKyAgICAgICAgICAgICAgICAgICAgYGVuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBjbG9jayBza2V3IGFkanVzdAorICAgICAgICAgICAgICAgICAgICAgICBpbnB1dCBsb2dpYyBbMzowXSAgICAgICAgY2ZnX2Nza2FfcGlubXV4LAorICAgICAgICAgICAgICAgICAgICAgICBpbnB1dCBsb2dpYwkgICAgICAgIHdiZF9jbGtfaW50LAorICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgbG9naWMJICAgICAgICB3YmRfY2xrX3Bpbm11eCwKKyAgICAgICAgICAgICAgICAgICAgICAgLy8gU3lzdGVtIFNpZ25hbHMKKyAgICAgICAgICAgICAgICAgICAgICAgLy8gSW5wdXRzCisJCSAgICAgICBpbnB1dCBsb2dpYyAgICAgICAgICAgICBtY2xrLAorICAgICAgICAgICAgICAgICAgICAgICBpbnB1dCBsb2dpYyAgICAgICAgICAgICBoX3Jlc2V0X24sCisKKwkJICAgICAgIC8vIFJlZyBCdXMgSW50ZXJmYWNlIFNpZ25hbAorICAgICAgICAgICAgICAgICAgICAgICBpbnB1dCBsb2dpYyAgICAgICAgICAgICByZWdfY3MsCisgICAgICAgICAgICAgICAgICAgICAgIGlucHV0IGxvZ2ljICAgICAgICAgICAgIHJlZ193ciwKKyAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQgbG9naWMgWzc6MF0gICAgICAgcmVnX2FkZHIsCisgICAgICAgICAgICAgICAgICAgICAgIGlucHV0IGxvZ2ljIFszMTowXSAgICAgIHJlZ193ZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQgbG9naWMgWzM6MF0gICAgICAgcmVnX2JlLAorCisgICAgICAgICAgICAgICAgICAgICAgIC8vIE91dHB1dHMKKyAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0IGxvZ2ljIFszMTowXSAgICAgcmVnX3JkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICByZWdfYWNrLAorCisJCSAgICAgIC8vIFJpc2MgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgbG9naWMgWzMxOjBdICAgICBmdXNlX21oYXJ0aWQsCisgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCBsb2dpYyBbMTU6MF0gICAgIGlycV9saW5lcywKKyAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0IGxvZ2ljICAgICAgICAgICAgc29mdF9pcnEsCisgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCBsb2dpYyBbMjowXSAgICAgIHVzZXJfaXJxLAorCQkgICAgICAgaW5wdXQgIGxvZ2ljICAgICAgICAgICAgdXNiX2ludHIsCisJCSAgICAgICBpbnB1dCAgbG9naWMgICAgICAgICAgICBpMmNtX2ludHIsCisKKyAgICAgICAgICAgICAgICAgICAgICAgLy8gRGlnaXRhbCBJTworICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgbG9naWMgWzM3OjBdICAgICBkaWdpdGFsX2lvX291dCwKKyAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0IGxvZ2ljIFszNzowXSAgICAgZGlnaXRhbF9pb19vZW4sCisgICAgICAgICAgICAgICAgICAgICAgIGlucHV0ICBsb2dpYyBbMzc6MF0gICAgIGRpZ2l0YWxfaW9faW4sCisKKwkJICAgICAgIC8vIFNGTEFTSCBJL0YKKwkJICAgICAgIGlucHV0ICBsb2dpYyAgICAgICAgICAgIHNmbGFzaF9zY2ssCisJCSAgICAgICBpbnB1dCAgbG9naWMgWzM6MF0gICAgICBzZmxhc2hfc3MsCisJCSAgICAgICBpbnB1dCAgbG9naWMgWzM6MF0gICAgICBzZmxhc2hfb2VuLAorCQkgICAgICAgaW5wdXQgIGxvZ2ljIFszOjBdICAgICAgc2ZsYXNoX2RvLAorCQkgICAgICAgb3V0cHV0IGxvZ2ljIFszOjBdICAgICAgc2ZsYXNoX2RpLAorCisJCSAgICAgICAvLyBTU1JBTSBJL0YgLSBUZW1wIE1hc2tlZAorCQkgICAgICAgLy9pbnB1dCAgbG9naWMgICAgICAgICAgICBzc3JhbV9zY2ssCisJCSAgICAgICAvL2lucHV0ICBsb2dpYyAgICAgICAgICAgIHNzcmFtX3NzLAorCQkgICAgICAgLy9pbnB1dCAgbG9naWMgWzM6MF0gICAgICBzc3JhbV9vZW4sCisJCSAgICAgICAvL2lucHV0ICBsb2dpYyBbMzowXSAgICAgIHNzcmFtX2RvLAorCQkgICAgICAgLy9vdXRwdXQgbG9naWMgWzM6MF0gICAgICBzc3JhbV9kaSwKKworCQkgICAgICAgLy8gVVNCIEkvRgorCQkgICAgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgdXNiX2RwX28sCisJCSAgICAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICB1c2JfZG5fbywKKwkJICAgICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgIHVzYl9vZW4sCisJCSAgICAgICBvdXRwdXQgICBsb2dpYyAgICAgICAgICB1c2JfZHBfaSwKKwkJICAgICAgIG91dHB1dCAgIGxvZ2ljICAgICAgICAgIHVzYl9kbl9pLAorCisJCSAgICAgICAvLyBVQVJUIEkvRgorCQkgICAgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgdWFydF90eGQsCisJCSAgICAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICB1YXJ0X3J4ZCwKKworCQkgICAgICAgLy8gSTJDTSBJL0YKKwkJICAgICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgIGkyY21fY2xrX28sCisJCSAgICAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICBpMmNtX2Nsa19pLAorCQkgICAgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgaTJjbV9jbGtfb2VuLAorCQkgICAgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgaTJjbV9kYXRhX29lbiwKKwkJICAgICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgIGkyY21fZGF0YV9vLAorCQkgICAgICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgaTJjbV9kYXRhX2ksCisKKwkJICAgICAgIC8vIFNQSSBNQVNURVIKKwkJICAgICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgIHNwaW1fc2NrLAorCQkgICAgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgc3BpbV9zcywKKwkJICAgICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgIHNwaW1fbWlzbywKKwkJICAgICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgIHNwaW1fbW9zaSwKKworICAgICAgICAgICAgICAgICAgICAgICAvLyBVQVJUIE1BU1RFUiBJL0YKKyAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgIHVhcnRtX3J4ZCAsCisgICAgICAgICAgICAgICAgICAgICAgIGlucHV0IGxvZ2ljICAgICAgICAgICAgICB1YXJ0bV90eGQgICwgICAgICAgCisKKwkJICAgICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgIHB1bHNlMW1fbWNsaywKKwkgICAgICAgICAgICAgICBvdXRwdXQgIGxvZ2ljIFszMTowXSAgICBwaW5tdXhfZGVidWcsCSAgICAgICAKKworCQkvLyBCSVNUIEkvRgorCSAgICAgICAgICAgICAgIG91dHB1dCBsb2dpYyAgICAgICAgICAgIGJpc3RfZW4sCisJICAgICAgICAgICAgICAgb3V0cHV0IGxvZ2ljICAgICAgICAgICAgYmlzdF9ydW4sCisJICAgICAgICAgICAgICAgb3V0cHV0IGxvZ2ljICAgICAgICAgICAgYmlzdF9sb2FkLAorCisJICAgICAgICAgICAgICAgb3V0cHV0IGxvZ2ljICAgICAgICAgICAgYmlzdF9zZGksCisJICAgICAgICAgICAgICAgb3V0cHV0IGxvZ2ljICAgICAgICAgICAgYmlzdF9zaGlmdCwKKwkgICAgICAgICAgICAgICBpbnB1dCAgbG9naWMgICAgICAgICAgICBiaXN0X3NkbywKKworCSAgICAgICAgICAgICAgIGlucHV0IGxvZ2ljICAgICAgICAgICAgIGJpc3RfZG9uZSwKKwkgICAgICAgICAgICAgICBpbnB1dCBsb2dpYyBbMzowXSAgICAgICBiaXN0X2Vycm9yLAorCSAgICAgICAgICAgICAgIGlucHV0IGxvZ2ljIFszOjBdICAgICAgIGJpc3RfY29ycmVjdCwKKwkgICAgICAgICAgICAgICBpbnB1dCBsb2dpYyBbMzowXSAgICAgICBiaXN0X2Vycm9yX2NudDAsCisJICAgICAgICAgICAgICAgaW5wdXQgbG9naWMgWzM6MF0gICAgICAgYmlzdF9lcnJvcl9jbnQxLAorCSAgICAgICAgICAgICAgIGlucHV0IGxvZ2ljIFszOjBdICAgICAgIGJpc3RfZXJyb3JfY250MiwKKwkgICAgICAgICAgICAgICBpbnB1dCBsb2dpYyBbMzowXSAgICAgICBiaXN0X2Vycm9yX2NudDMKKyAgICk7IAorCisKKworICAgCisvKiBjbG9jayBwdWxzZSAqLworLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorbG9naWMgICAgICAgICAgIHB1bHNlMXVfbWNsayAgICAgICAgICAgIDsvLyAxIFVzU2Vjb25kIFB1bHNlIGZvciB3YXZlZm9ybSBHZW5lcmF0b3IKK2xvZ2ljICAgICAgICAgICBwdWxzZTFzX21jbGsgICAgICAgICAgICA7Ly8gMVNlY29uZCBQdWxzZSBmb3Igd2F2ZWZvcm0gR2VuZXJhdG9yCitsb2dpYyBbOTowXSAgICAgY2ZnX3B1bHNlXzF1cyAgICAgICAgICAgOy8vIDF1cyBwdWxzZSBnZW5lcmF0aW9uIGNvbmZpZworICAgICAgICAgICAgICAgIAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIDYgUFdNIHZhcmlhYmxlZAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbG9naWMgWzU6MF0gICAgIHB3bV93Zm0gICAgICAgICAgICAgICAgIDsKK2xvZ2ljIFs1OjBdICAgICBjZmdfcHdtX2VuYiAgICAgICAgICAgICA7Citsb2dpYyBbMTU6MF0gICAgY2ZnX3B3bTBfaGlnaCAgICAgICAgICAgOworbG9naWMgWzE1OjBdICAgIGNmZ19wd20wX2xvdyAgICAgICAgICAgIDsKK2xvZ2ljIFsxNTowXSAgICBjZmdfcHdtMV9oaWdoICAgICAgICAgICA7Citsb2dpYyBbMTU6MF0gICAgY2ZnX3B3bTFfbG93ICAgICAgICAgICAgOworbG9naWMgWzE1OjBdICAgIGNmZ19wd20yX2hpZ2ggICAgICAgICAgIDsKK2xvZ2ljIFsxNTowXSAgICBjZmdfcHdtMl9sb3cgICAgICAgICAgICA7Citsb2dpYyBbMTU6MF0gICAgY2ZnX3B3bTNfaGlnaCAgICAgICAgICAgOworbG9naWMgWzE1OjBdICAgIGNmZ19wd20zX2xvdyAgICAgICAgICAgIDsKK2xvZ2ljIFsxNTowXSAgICBjZmdfcHdtNF9oaWdoICAgICAgICAgICA7Citsb2dpYyBbMTU6MF0gICAgY2ZnX3B3bTRfbG93ICAgICAgICAgICAgOworbG9naWMgWzE1OjBdICAgIGNmZ19wd201X2hpZ2ggICAgICAgICAgIDsKK2xvZ2ljIFsxNTowXSAgICBjZmdfcHdtNV9sb3cgICAgICAgICAgICA7CisKKword2lyZSAgWzMxOjBdICBncGlvX3ByZXZfaW5kYXRhICAgICAgICAgOy8vIHByZXZpb3VzbHkgY2FwdHVyZWQgR1BJTyBJL1AgcGlucyBkYXRhCit3aXJlICBbMzE6MF0gIGNmZ19ncGlvX291dF9kYXRhICAgICAgICA7Ly8gR1BJTyBzdGF0dWMgTy9QIGRhdGEgZnJvbSBjb25maWcgcmVnCit3aXJlICBbMzE6MF0gIGNmZ19ncGlvX2Rpcl9zZWwgICAgICAgICA7Ly8gZGVjaWRlcyBvbiBHUElPIHBpbiBpcyBJL1Agb3IgTy9QIGF0IHBhZCBsZXZlbCwgMCAtPiBJbnB1dCwgMSAtPiBPdXRwdXQKK3dpcmUgIFszMTowXSAgY2ZnX2dwaW9fb3V0X3R5cGUgICAgICAgIDsvLyBHUElPIFR5cGUsIFVudXNlZAord2lyZSAgWzMxOjBdICBjZmdfbXVsdGlfZnVuY19zZWwgICAgICAgOy8vIEdQSU8gTXVsdGkgZnVuY3Rpb24gdHlwZQord2lyZSAgWzMxOjBdICBjZmdfZ3Bpb19wb3NlZGdlX2ludF9zZWwgOy8vIHNlbGVjdCBwb3NlZGdlIGludGVycnVwdAord2lyZSAgWzMxOjBdICBjZmdfZ3Bpb19uZWdlZGdlX2ludF9zZWwgOy8vIHNlbGVjdCBuZWdlZGdlIGludGVycnVwdAord2lyZSAgWzMxOjAwXSBjZmdfZ3Bpb19kYXRhX2luICAgICAgICAgOworCisKK3JlZyBbNzowXSAgICAgcG9ydF9hX2luOyAgICAgIC8vIFBPUlQgQSBEYXRhIEluCityZWcgWzc6MF0gICAgIHBvcnRfYl9pbjsgICAgICAvLyBQT1JUIEIgRGF0YSBJbgorcmVnIFs3OjBdICAgICBwb3J0X2NfaW47ICAgICAgLy8gUE9SVCBDIERhdGEgSW4KK3JlZyBbNzowXSAgICAgcG9ydF9kX2luOyAgICAgIC8vIFBPUlQgRCBEYXRhIEluCisKK3dpcmUgWzc6MF0gICAgcG9ydF9hX291dDsgICAgIC8vIFBPUlQgQSBEYXRhIE91dAord2lyZSBbNzowXSAgICBwb3J0X2Jfb3V0OyAgICAgLy8gUE9SVCBCIERhdGEgT3V0Cit3aXJlIFs3OjBdICAgIHBvcnRfY19vdXQ7ICAgICAvLyBQT1JUIEMgRGF0YSBPdXQKK3dpcmUgWzc6MF0gICAgcG9ydF9kX291dDsgICAgIC8vIFBPUlQgRCBEYXRhIE91dAord2lyZSBbMzE6MF0gICBwYWRfZ3Bpb19pbjsgICAgLy8gR1BJTyBkYXRhIGlucHV0IGZyb20gUEFECit3aXJlIFszMTowXSAgIHBhZF9ncGlvX291dDsgICAvLyBHUElPIERhdGEgb3V0IHRvd2FyZHMgUEFECit3aXJlIFszMTowXSAgIGdwaW9faW50X2V2ZW50OyAvLyBHUElPIEludGVycnVwdCBpbmRpY2F0aW9uCityZWcgWzE6MF0gICAgIGV4dF9pbnRyX2luOyAgICAvLyBFeHRlcm5hbCBQQUQgbGV2ZWwgaW50ZXJydXB0CisKKy8vIEdQSU8gdG8gUE9SVCBNYXBwaW5nCithc3NpZ24gICAgICBwYWRfZ3Bpb19pbls3OjBdICAgICA9IHBvcnRfYV9pbjsKK2Fzc2lnbiAgICAgIHBhZF9ncGlvX2luWzE1OjhdICAgID0gcG9ydF9iX2luOworYXNzaWduICAgICAgcGFkX2dwaW9faW5bMjM6MTZdICAgPSBwb3J0X2NfaW47Cithc3NpZ24gICAgICBwYWRfZ3Bpb19pblszMToyNF0gICA9IHBvcnRfZF9pbjsKKworYXNzaWduICAgICAgcG9ydF9hX291dCAgICAgICAgICAgPSBwYWRfZ3Bpb19vdXRbNzowXTsKK2Fzc2lnbiAgICAgIHBvcnRfYl9vdXQgICAgICAgICAgID0gcGFkX2dwaW9fb3V0WzE1OjhdOworYXNzaWduICAgICAgcG9ydF9jX291dCAgICAgICAgICAgPSBwYWRfZ3Bpb19vdXRbMjM6MTZdOworYXNzaWduICAgICAgcG9ydF9kX291dCAgICAgICAgICAgPSBwYWRfZ3Bpb19vdXRbMzE6MjRdOworCithc3NpZ24gICAgICBwaW5tdXhfZGVidWcgPSAnMDsgLy8gVG9kbzogTmVlZCB0byBmaXgKKworLy8gU1NSQU0gSS9GIC0gVGVtcCBtYXNrZWQKKy8vaW5wdXQgIGxvZ2ljICAgICAgICAgICAgc3NyYW1fc2NrLAorLy9pbnB1dCAgbG9naWMgICAgICAgICAgICBzc3JhbV9zcywKKy8vaW5wdXQgIGxvZ2ljIFszOjBdICAgICAgc3NyYW1fb2VuLAorLy9pbnB1dCAgbG9naWMgWzM6MF0gICAgICBzc3JhbV9kbywKKy8vb3V0cHV0IGxvZ2ljIFszOjBdICAgICAgc3NyYW1fZGksCisKKy8vIHBpbm11eCBjbG9jayBza2V3IGNvbnRyb2wKK2Nsa19za2V3X2FkanVzdCB1X3NrZXdfcGlubXV4CisgICAgICAgKAorYGlmZGVmIFVTRV9QT1dFUl9QSU5TCisgICAgICAgICAgICAgICAudmNjZDEgICAgICAodmNjZDEgICAgICAgICAgICAgICAgICAgICAgKSwvLyBVc2VyIGFyZWEgMSAxLjhWIHN1cHBseQorICAgICAgICAgICAgICAgLnZzc2QxICAgICAgKHZzc2QxICAgICAgICAgICAgICAgICAgICAgICksLy8gVXNlciBhcmVhIDEgZGlnaXRhbCBncm91bmQKK2BlbmRpZgorCSAgICAgICAuY2xrX2luICAgICAod2JkX2Nsa19pbnQgICAgICAgICAgICAgICAgICksIAorCSAgICAgICAuc2VsICAgICAgICAoY2ZnX2Nza2FfcGlubXV4ICAgICAgICAgICAgICksIAorCSAgICAgICAuY2xrX291dCAgICAod2JkX2Nsa19waW5tdXggICAgICAgICAgICAgICkgCisgICAgICAgKTsKKworZ3Bpb19pbnRyIHVfZ3Bpb19pbnRyICgKKyAgIC8vIFN5c3RlbSBTaWduYWxzCisgICAvLyBJbnB1dHMKKyAgICAgICAgICAubWNsayAgICAgICAgICAgICAgICAgICAgKG1jbGsgICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLmhfcmVzZXRfbiAgICAgICAgICAgICAgIChoX3Jlc2V0X24gICAgICAgICAgICAgICApLAorCisgICAvLyBHUElPIGNmZyBpbnB1dCBwaW5zCisgICAgICAgICAgLmdwaW9fcHJldl9pbmRhdGEgICAgICAgIChncGlvX3ByZXZfaW5kYXRhICAgICAgICApLAorICAgICAgICAgIC5jZmdfZ3Bpb19kYXRhX2luICAgICAgICAoY2ZnX2dwaW9fZGF0YV9pbiAgICAgICAgKSwKKyAgICAgICAgICAuY2ZnX2dwaW9fZGlyX3NlbCAgICAgICAgKGNmZ19ncGlvX2Rpcl9zZWwgICAgICAgICksCisgICAgICAgICAgLmNmZ19ncGlvX291dF9kYXRhICAgICAgIChjZmdfZ3Bpb19vdXRfZGF0YSAgICAgICApLAorICAgICAgICAgIC5jZmdfZ3Bpb19wb3NlZGdlX2ludF9zZWwoY2ZnX2dwaW9fcG9zZWRnZV9pbnRfc2VsKSwKKyAgICAgICAgICAuY2ZnX2dwaW9fbmVnZWRnZV9pbnRfc2VsKGNmZ19ncGlvX25lZ2VkZ2VfaW50X3NlbCksCisKKworICAgLy8gR1BJTyBvdXRwdXQgcGlucworICAgICAgICAgIC5wYWRfZ3Bpb19vdXQgICAgICAgICAgICAocGFkX2dwaW9fb3V0ICAgICAgICAgICAgKSwKKyAgICAgICAgICAuZ3Bpb19pbnRfZXZlbnQgICAgICAgICAgKGdwaW9faW50X2V2ZW50ICAgICAgICAgICkgIAorICApOworCisKKy8vIDF1cyBwdWxzZQorcHVsc2VfZ2VuX3R5cGUyICAjKC5XRCgxMCkpIHVfcHVsc2VfMXVzICgKKworCS5jbGtfcHVsc2UgICAgICAgICAgICAgICAgIChwdWxzZTF1X21jbGspLAorCS5jbGsgICAgICAgICAgICAgICAgICAgICAgIChtY2xrICAgICAgICApLAorICAgICAgICAucmVzZXRfbiAgICAgICAgICAgICAgICAgICAoaF9yZXNldF9uICAgKSwKKwkuY2ZnX21heF9jbnQgICAgICAgICAgICAgICAoY2ZnX3B1bHNlXzF1cykKKworICAgICApOworCisvLyAxbWlsbGlzZWNvbmQgcHVsc2UKK3B1bHNlX2dlbl90eXBlMSB1X3B1bHNlXzFtcyAoCisKKwkuY2xrX3B1bHNlICAgKHB1bHNlMW1fbWNsayksCisJLmNsayAgICAgICAgIChtY2xrICAgICAgICApLAorICAgICAgICAucmVzZXRfbiAgICAgKGhfcmVzZXRfbiAgICksCisJLnRyaWdnZXIgICAgIChwdWxzZTF1X21jbGspCisKKyAgICAgICk7CisKKy8vIDEgc2Vjb25kIHB1bHNlCitwdWxzZV9nZW5fdHlwZTIgdV9wdWxzZV8xcyAoCisKKwkuY2xrX3B1bHNlICAgKHB1bHNlMXNfbWNsayksCisJLmNsayAgICAgICAgIChtY2xrICAgICAgICApLAorICAgICAgICAucmVzZXRfbiAgICAgKGhfcmVzZXRfbiAgICksCisJLmNmZ19tYXhfY250IChjZmdfcHVsc2VfMXVzKQorCisgICAgICAgKTsKKworcGlubXV4X3JlZyB1X3Bpbm11eF9yZWcoCisgICAgICAvLyBTeXN0ZW0gU2lnbmFscworICAgICAgLy8gSW5wdXRzCisgICAgICAgICAgLm1jbGsgICAgICAgICAgICAgICAgICAgICAgICAgKG1jbGsgICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLmhfcmVzZXRfbiAgICAgICAgICAgICAgICAgICAgKGhfcmVzZXRfbiAgICAgICAgICAgICAgICksCisKKworICAgICAgLy8gUmVnIHJlYWQvd3JpdGUgSW50ZXJmYWNlIElucHV0cworICAgICAgICAgIC5yZWdfY3MgICAgICAgICAgICAgICAgICAgICAgIChyZWdfY3MgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5yZWdfd3IgICAgICAgICAgICAgICAgICAgICAgIChyZWdfd3IgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5yZWdfYWRkciAgICAgICAgICAgICAgICAgICAgIChyZWdfYWRkciAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5yZWdfd2RhdGEgICAgICAgICAgICAgICAgICAgIChyZWdfd2RhdGEgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5yZWdfYmUgICAgICAgICAgICAgICAgICAgICAgIChyZWdfYmUgICAgICAgICAgICAgICAgICApLAorCisgICAgICAgICAgLnJlZ19yZGF0YSAgICAgICAgICAgICAgICAgICAgKHJlZ19yZGF0YSAgICAgICAgICAgICAgICksCisgICAgICAgICAgLnJlZ19hY2sgICAgICAgICAgICAgICAgICAgICAgKHJlZ19hY2sgICAgICAgICAgICAgICAgICksCisKKwkgIC5leHRfaW50cl9pbiAgICAgICAgICAgICAgICAgIChleHRfaW50cl9pbiAgICAgICAgICAgICApLAorCisJICAuZnVzZV9taGFydGlkICAgICAgICAgICAgICAgICAoZnVzZV9taGFydGlkICAgICAgICAgICAgKSwKKwkgIC5pcnFfbGluZXMgICAgICAgICAgICAgICAgICAgIChpcnFfbGluZXMgICAgICAgICAgICAgICApLAorCSAgLnNvZnRfaXJxICAgICAgICAgICAgICAgICAgICAgKHNvZnRfaXJxICAgICAgICAgICAgICAgICksCisJICAudXNlcl9pcnEgICAgICAgICAgICAgICAgICAgICAodXNlcl9pcnEgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAudXNiX2ludHIgICAgICAgICAgICAgICAgICAgICAodXNiX2ludHIgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuaTJjbV9pbnRyICAgICAgICAgICAgICAgICAgICAoaTJjbV9pbnRyICAgICAgICAgICAgICAgKSwKKworCSAgLmNmZ19wdWxzZV8xdXMgICAgICAgICAgICAgICAgKGNmZ19wdWxzZV8xdXMgICAgICAgICAgICksCisKKworICAgICAgICAgIC5jZmdfcHdtMF9oaWdoICAgICAgICAgICAgICAgIChjZmdfcHdtMF9oaWdoICAgICAgICAgICApLAorICAgICAgICAgIC5jZmdfcHdtMF9sb3cgICAgICAgICAgICAgICAgIChjZmdfcHdtMF9sb3cgICAgICAgICAgICApLAorICAgICAgICAgIC5jZmdfcHdtMV9oaWdoICAgICAgICAgICAgICAgIChjZmdfcHdtMV9oaWdoICAgICAgICAgICApLAorICAgICAgICAgIC5jZmdfcHdtMV9sb3cgICAgICAgICAgICAgICAgIChjZmdfcHdtMV9sb3cgICAgICAgICAgICApLAorICAgICAgICAgIC5jZmdfcHdtMl9oaWdoICAgICAgICAgICAgICAgIChjZmdfcHdtMl9oaWdoICAgICAgICAgICApLAorICAgICAgICAgIC5jZmdfcHdtMl9sb3cgICAgICAgICAgICAgICAgIChjZmdfcHdtMl9sb3cgICAgICAgICAgICApLAorICAgICAgICAgIC5jZmdfcHdtM19oaWdoICAgICAgICAgICAgICAgIChjZmdfcHdtM19oaWdoICAgICAgICAgICApLAorICAgICAgICAgIC5jZmdfcHdtM19sb3cgICAgICAgICAgICAgICAgIChjZmdfcHdtM19sb3cgICAgICAgICAgICApLAorICAgICAgICAgIC5jZmdfcHdtNF9oaWdoICAgICAgICAgICAgICAgIChjZmdfcHdtNF9oaWdoICAgICAgICAgICApLAorICAgICAgICAgIC5jZmdfcHdtNF9sb3cgICAgICAgICAgICAgICAgIChjZmdfcHdtNF9sb3cgICAgICAgICAgICApLAorICAgICAgICAgIC5jZmdfcHdtNV9oaWdoICAgICAgICAgICAgICAgIChjZmdfcHdtNV9oaWdoICAgICAgICAgICApLAorICAgICAgICAgIC5jZmdfcHdtNV9sb3cgICAgICAgICAgICAgICAgIChjZmdfcHdtNV9sb3cgICAgICAgICAgICApLAorCisgICAgICAvLyBHUElPIGlucHV0IHBpbnMKKyAgICAgICAgICAuZ3Bpb19pbl9kYXRhICAgICAgICAgICAgICAgICAocGFkX2dwaW9faW4gICAgICAgICAgICAgKSwKKyAgICAgICAgICAuZ3Bpb19pbnRfZXZlbnQgICAgICAgICAgICAgICAoZ3Bpb19pbnRfZXZlbnQgICAgICAgICAgKSwKKworICAgICAgLy8gR1BJTyBjb25maWcgcGlucworICAgICAgICAgIC5jZmdfZ3Bpb19vdXRfZGF0YSAgICAgICAgICAgIChjZmdfZ3Bpb19vdXRfZGF0YSAgICAgICApLAorICAgICAgICAgIC5jZmdfZ3Bpb19kaXJfc2VsICAgICAgICAgICAgIChjZmdfZ3Bpb19kaXJfc2VsICAgICAgICApLAorICAgICAgICAgIC5jZmdfZ3Bpb19vdXRfdHlwZSAgICAgICAgICAgIChjZmdfZ3Bpb19vdXRfdHlwZSAgICAgICApLAorICAgICAgICAgIC5jZmdfZ3Bpb19wb3NlZGdlX2ludF9zZWwgICAgIChjZmdfZ3Bpb19wb3NlZGdlX2ludF9zZWwpLAorICAgICAgICAgIC5jZmdfZ3Bpb19uZWdlZGdlX2ludF9zZWwgICAgIChjZmdfZ3Bpb19uZWdlZGdlX2ludF9zZWwpLAorICAgICAgICAgIC5jZmdfbXVsdGlfZnVuY19zZWwgICAgICAgICAgIChjZmdfbXVsdGlfZnVuY19zZWwgICAgICApLAorCSAgLmNmZ19ncGlvX2RhdGFfaW4gICAgICAgICAgICAgKGNmZ19ncGlvX2RhdGFfaW4gICAgICAgICksCisKKworICAgICAgIC8vIE91dHB1dHMKKyAgICAgICAgICAuZ3Bpb19wcmV2X2luZGF0YSAgICAgICAgICAgICAoZ3Bpb19wcmV2X2luZGF0YSAgICAgICAgKSAsCisKKyAgICAgICAvLyBCSVNUIEkvRgorICAgICAgICAgIC5iaXN0X2VuICAgICAgICAgICAgICAgICAgICAgIChiaXN0X2VuICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5iaXN0X3J1biAgICAgICAgICAgICAgICAgICAgIChiaXN0X3J1biAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5iaXN0X2xvYWQgICAgICAgICAgICAgICAgICAgIChiaXN0X2xvYWQgICAgICAgICAgICAgICApLAorICAgICAgICAgIAorICAgICAgICAgIC5iaXN0X3NkaSAgICAgICAgICAgICAgICAgICAgIChiaXN0X3NkaSAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5iaXN0X3NoaWZ0ICAgICAgICAgICAgICAgICAgIChiaXN0X3NoaWZ0ICAgICAgICAgICAgICApLAorICAgICAgICAgIC5iaXN0X3NkbyAgICAgICAgICAgICAgICAgICAgIChiaXN0X3NkbyAgICAgICAgICAgICAgICApLAorICAgICAgICAgIAorICAgICAgICAgIC5iaXN0X2RvbmUgICAgICAgICAgICAgICAgICAgIChiaXN0X2RvbmUgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5iaXN0X2Vycm9yICAgICAgICAgICAgICAgICAgIChiaXN0X2Vycm9yICAgICAgICAgICAgICApLAorICAgICAgICAgIC5iaXN0X2NvcnJlY3QgICAgICAgICAgICAgICAgIChiaXN0X2NvcnJlY3QgICAgICAgICAgICApLAorICAgICAgICAgIC5iaXN0X2Vycm9yX2NudDAgICAgICAgICAgICAgIChiaXN0X2Vycm9yX2NudDAgICAgICAgICApLAorICAgICAgICAgIC5iaXN0X2Vycm9yX2NudDEgICAgICAgICAgICAgIChiaXN0X2Vycm9yX2NudDEgICAgICAgICApLAorICAgICAgICAgIC5iaXN0X2Vycm9yX2NudDIgICAgICAgICAgICAgIChiaXN0X2Vycm9yX2NudDIgICAgICAgICApLAorICAgICAgICAgIC5iaXN0X2Vycm9yX2NudDMgICAgICAgICAgICAgIChiaXN0X2Vycm9yX2NudDMgICAgICAgICApCisKKyAgICk7IAorCisKKy8vIDYgUFdNIFdhdmVmb3JtIEdlbmVyYXRvcgorcHdtICB1X3B3bV8wICgKKwkgIC53YXZlZm9ybSAgICAgICAgICAgICAgICAgICAgKHB3bV93Zm1bMF0gICAgICAgICApLCAKKwkgIC5oX3Jlc2V0X24gICAgICAgICAgICAgICAgICAgKGhfcmVzZXRfbiAgICAgICAgICApLAorCSAgLm1jbGsgICAgICAgICAgICAgICAgICAgICAgICAobWNsayAgICAgICAgICAgICAgICksCisJICAucHVsc2UxbV9tY2xrICAgICAgICAgICAgICAgIChwdWxzZTFtX21jbGsgICAgICAgKSwKKwkgIC5jZmdfcHdtX2VuYiAgICAgICAgICAgICAgICAgKGNmZ19wd21fZW5iWzBdICAgICApLAorCSAgLmNmZ19wd21faGlnaCAgICAgICAgICAgICAgICAoY2ZnX3B3bTBfaGlnaCAgICAgICksCisJICAuY2ZnX3B3bV9sb3cgICAgICAgICAgICAgICAgIChjZmdfcHdtMF9sb3cgICAgICAgKQorICAgICApOworCitwd20gIHVfcHdtXzEgKAorCSAgLndhdmVmb3JtICAgICAgICAgICAgICAgICAgICAocHdtX3dmbVsxXSAgICAgICAgICksIAorCSAgLmhfcmVzZXRfbiAgICAgICAgICAgICAgICAgICAoaF9yZXNldF9uICAgICAgICAgICksCisJICAubWNsayAgICAgICAgICAgICAgICAgICAgICAgIChtY2xrICAgICAgICAgICAgICAgKSwKKwkgIC5wdWxzZTFtX21jbGsgICAgICAgICAgICAgICAgKHB1bHNlMW1fbWNsayAgICAgICApLAorCSAgLmNmZ19wd21fZW5iICAgICAgICAgICAgICAgICAoY2ZnX3B3bV9lbmJbMV0gICAgICksCisJICAuY2ZnX3B3bV9oaWdoICAgICAgICAgICAgICAgIChjZmdfcHdtMV9oaWdoICAgICAgKSwKKwkgIC5jZmdfcHdtX2xvdyAgICAgICAgICAgICAgICAgKGNmZ19wd20xX2xvdyAgICAgICApCisgICAgICk7CisgICAKK3B3bSAgdV9wd21fMiAoCisJICAud2F2ZWZvcm0gICAgICAgICAgICAgICAgICAgIChwd21fd2ZtWzJdICAgICAgICAgKSwgCisJICAuaF9yZXNldF9uICAgICAgICAgICAgICAgICAgIChoX3Jlc2V0X24gICAgICAgICAgKSwKKwkgIC5tY2xrICAgICAgICAgICAgICAgICAgICAgICAgKG1jbGsgICAgICAgICAgICAgICApLAorCSAgLnB1bHNlMW1fbWNsayAgICAgICAgICAgICAgICAocHVsc2UxbV9tY2xrICAgICAgICksCisJICAuY2ZnX3B3bV9lbmIgICAgICAgICAgICAgICAgIChjZmdfcHdtX2VuYlsyXSAgICAgKSwKKwkgIC5jZmdfcHdtX2hpZ2ggICAgICAgICAgICAgICAgKGNmZ19wd20yX2hpZ2ggICAgICApLAorCSAgLmNmZ19wd21fbG93ICAgICAgICAgICAgICAgICAoY2ZnX3B3bTJfbG93ICAgICAgICkKKyAgICAgKTsKKworcHdtICB1X3B3bV8zICgKKwkgIC53YXZlZm9ybSAgICAgICAgICAgICAgICAgICAgKHB3bV93Zm1bM10gICAgICAgICApLCAKKwkgIC5oX3Jlc2V0X24gICAgICAgICAgICAgICAgICAgKGhfcmVzZXRfbiAgICAgICAgICApLAorCSAgLm1jbGsgICAgICAgICAgICAgICAgICAgICAgICAobWNsayAgICAgICAgICAgICAgICksCisJICAucHVsc2UxbV9tY2xrICAgICAgICAgICAgICAgIChwdWxzZTFtX21jbGsgICAgICAgKSwKKwkgIC5jZmdfcHdtX2VuYiAgICAgICAgICAgICAgICAgKGNmZ19wd21fZW5iWzNdICAgICApLAorCSAgLmNmZ19wd21faGlnaCAgICAgICAgICAgICAgICAoY2ZnX3B3bTNfaGlnaCAgICAgICksCisJICAuY2ZnX3B3bV9sb3cgICAgICAgICAgICAgICAgIChjZmdfcHdtM19sb3cgICAgICAgKQorICAgICApOworcHdtICB1X3B3bV80ICgKKwkgIC53YXZlZm9ybSAgICAgICAgICAgICAgICAgICAgKHB3bV93Zm1bNF0gICAgICAgICApLCAKKwkgIC5oX3Jlc2V0X24gICAgICAgICAgICAgICAgICAgKGhfcmVzZXRfbiAgICAgICAgICApLAorCSAgLm1jbGsgICAgICAgICAgICAgICAgICAgICAgICAobWNsayAgICAgICAgICAgICAgICksCisJICAucHVsc2UxbV9tY2xrICAgICAgICAgICAgICAgIChwdWxzZTFtX21jbGsgICAgICAgKSwKKwkgIC5jZmdfcHdtX2VuYiAgICAgICAgICAgICAgICAgKGNmZ19wd21fZW5iWzRdICAgICApLAorCSAgLmNmZ19wd21faGlnaCAgICAgICAgICAgICAgICAoY2ZnX3B3bTRfaGlnaCAgICAgICksCisJICAuY2ZnX3B3bV9sb3cgICAgICAgICAgICAgICAgIChjZmdfcHdtNF9sb3cgICAgICAgKQorICAgICApOworcHdtICB1X3B3bV81ICgKKwkgIC53YXZlZm9ybSAgICAgICAgICAgICAgICAgICAgKHB3bV93Zm1bNV0gICAgICAgICApLCAKKwkgIC5oX3Jlc2V0X24gICAgICAgICAgICAgICAgICAgKGhfcmVzZXRfbiAgICAgICAgICApLAorCSAgLm1jbGsgICAgICAgICAgICAgICAgICAgICAgICAobWNsayAgICAgICAgICAgICAgICksCisJICAucHVsc2UxbV9tY2xrICAgICAgICAgICAgICAgIChwdWxzZTFtX21jbGsgICAgICAgKSwKKwkgIC5jZmdfcHdtX2VuYiAgICAgICAgICAgICAgICAgKGNmZ19wd21fZW5iWzVdICAgICApLAorCSAgLmNmZ19wd21faGlnaCAgICAgICAgICAgICAgICAoY2ZnX3B3bTVfaGlnaCAgICAgICksCisJICAuY2ZnX3B3bV9sb3cgICAgICAgICAgICAgICAgIChjZmdfcHdtNV9sb3cgICAgICAgKQorICAgICApOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIFBpbiBNYXBwaW5nICAgIEFUTUdFIENPTkZJRworKiAgIEFUTUVHQTMyOCAgICAgICAgICAgICAgICAgICAgICAgIGNhcmF2ZWwgUGluIE1hcHBpbmcKKyogICBQaW4tMSAgICAgICAgUEM2L1JFU0VUKiAgICAgICAgICBkaWdpdGFsX2lvWzBdCisqICAgUGluLTIgICAgICAgIFBEMC9SWEQgICAgICAgICAgICAgZGlnaXRhbF9pb1sxXQorKiAgIFBpbi0zICAgICAgICBQRDEvVFhEICAgICAgICAgICAgIGRpZ2l0YWxfaW9bMl0KKyogICBQaW4tNCAgICAgICAgUEQyL0lOVDAgICAgICAgICAgICBkaWdpdGFsX2lvWzNdCisqICAgUGluLTUgICAgICAgIFBEMy9JTlQxL09DMkIoUFdNMCkgZGlnaXRhbF9pb1s0XQorKiAgIFBpbi02ICAgICAgICBQRDQgICAgICAgICAgICAgICAgIGRpZ2l0YWxfaW9bNV0KKyogICBQaW4tNyAgICAgICAgVkNDICAgICAgICAgICAgICAgICAgLQorKiAgIFBpbi04ICAgICAgICBHTkQgICAgICAgICAgICAgICAgICAtCisqICAgUGluLTkgICAgICAgIFBCNi9YVEFMMS9UT1NDMSAgICAgZGlnaXRhbF9pb1s2XQorKiAgIFBpbi0xMCAgICAgICBQQjcvWFRBTDIvVE9TQzIgICAgIGRpZ2l0YWxfaW9bN10KKyogICBQaW4tMTEgICAgICAgUEQ1L09DMEIoUFdNMSkvVDEgICBkaWdpdGFsX2lvWzhdCisqICAgUGluLTEyICAgICAgIFBENi9PQzBBKFBXTTIpL0FJTjAgZGlnaXRhbF9pb1s5XSAvYW5hbG9nX2lvWzJdCisqICAgUGluLTEzICAgICAgIFBENy9BMU4xICAgICAgICAgICAgZGlnaXRhbF9pb1sxMF0vYW5hbG9nX2lvWzNdCisqICAgUGluLTE0ICAgICAgIFBCMC9DTEtPL0lDUDEgICAgICAgZGlnaXRhbF9pb1sxMV0KKyogICBQaW4tMTUgICAgICAgUEIxL09DMUEoUFdNMykgICAgICBkaWdpdGFsX2lvWzEyXQorKiAgIFBpbi0xNiAgICAgICBQQjIvU1MvT0MxQihQV000KSAgIGRpZ2l0YWxfaW9bMTNdCisqICAgUGluLTE3ICAgICAgIFBCMy9NT1NJL09DMkEoUFdNNSkgZGlnaXRhbF9pb1sxNF0KKyogICBQaW4tMTggICAgICAgUEI0L01JU08gICAgICAgICAgICBkaWdpdGFsX2lvWzE1XQorKiAgIFBpbi0xOSAgICAgICBQQjUvU0NLICAgICAgICAgICAgIGRpZ2l0YWxfaW9bMTZdCisqICAgUGluLTIwICAgICAgIEFWQ0MgICAgICAgICAgICAgICAgLQorKiAgIFBpbi0yMSAgICAgICBBUkVGICAgICAgICAgICAgICAgIGFuYWxvZ19pb1sxMF0KKyogICBQaW4tMjIgICAgICAgR05EICAgICAgICAgICAgICAgICAtCisqICAgUGluLTIzICAgICAgIFBDMC9BREMwICAgICAgICAgICAgZGlnaXRhbF9pb1sxOF0vYW5hbG9nX2lvWzExXQorKiAgIFBpbi0yNCAgICAgICBQQzEvQURDMSAgICAgICAgICAgIGRpZ2l0YWxfaW9bMTldL2FuYWxvZ19pb1sxMl0KKyogICBQaW4tMjUgICAgICAgUEMyL0FEQzIgICAgICAgICAgICBkaWdpdGFsX2lvWzIwXS9hbmFsb2dfaW9bMTNdCisqICAgUGluLTI2ICAgICAgIFBDMy9BREMzICAgICAgICAgICAgZGlnaXRhbF9pb1syMV0vYW5hbG9nX2lvWzE0XQorKiAgIFBpbi0yNyAgICAgICBQQzQvQURDNC9TREEgICAgICAgIGRpZ2l0YWxfaW9bMjJdL2FuYWxvZ19pb1sxNV0KKyogICBQaW4tMjggICAgICAgUEM1L0FEQzUvU0NMICAgICAgICBkaWdpdGFsX2lvWzIzXS9hbmFsb2dfaW9bMTZdCisqCisqICBBZGRpdGlvbmFsIFBhZCB1c2VkIGZvciBFeHRlcm5hbSBST00vUkFNCisqICAgICAgICAgICAgICAgIHNmbGFzaF9zY2sgICAgICAgICAgZGlnaXRhbF9pb1syNF0KKyogICAgICAgICAgICAgICAgc2ZsYXNoX3NzWzNdICAgICAgICBkaWdpdGFsX2lvWzI1XQorKiAgICAgICAgICAgICAgICBzZmxhc2hfc3NbMl0gICAgICAgIGRpZ2l0YWxfaW9bMjZdCisqICAgICAgICAgICAgICAgIHNmbGFzaF9zc1sxXSAgICAgICAgZGlnaXRhbF9pb1syN10KKyogICAgICAgICAgICAgICAgc2ZsYXNoX3NzWzBdICAgICAgICBkaWdpdGFsX2lvWzI4XQorKiAgICAgICAgICAgICAgICBzZmxhc2hfaW8wICAgICAgICAgIGRpZ2l0YWxfaW9bMjldCisqICAgICAgICAgICAgICAgIHNmbGFzaF9pbzEgICAgICAgICAgZGlnaXRhbF9pb1szMF0KKyogICAgICAgICAgICAgICAgc2ZsYXNoX2lvMiAgICAgICAgICBkaWdpdGFsX2lvWzMxXQorKiAgICAgICAgICAgICAgICBzZmxhc2hfaW8zICAgICAgICAgIGRpZ2l0YWxfaW9bMzJdCisqICAgICAgICAgICAgICAgIHJlc2VydmVkICAgICAgICAgICAgZGlnaXRhbF9pb1szM10KKyogICAgICAgICAgICAgICAgdWFydG1fcnhkICAgICAgICAgICBkaWdpdGFsX2lvWzM0XQorKiAgICAgICAgICAgICAgICB1YXJ0bV90eGQgICAgICAgICAgIGRpZ2l0YWxfaW9bMzVdCisqICAgICAgICAgICAgICAgIHVzYl9kcCAgICAgICAgICAgICAgZGlnaXRhbF9pb1szNl0KKyogICAgICAgICAgICAgICAgdXNiX2RuICAgICAgICAgICAgICBkaWdpdGFsX2lvWzM3XQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBQaW4tMSBSRVNFVCBpcyBub3Qgc3VwcG9ydGVkIGFzIHRoZXJlIGlzIG5vIHN1cHBwb3J0IGZvciBmdXNlIGNvbmZpZworKioqKioqKioqKioqKiovCisKK2Fzc2lnbiAgICAgIGNmZ19wd21fZW5iICAgICAgICAgID0gY2ZnX211bHRpX2Z1bmNfc2VsWzU6MF07Cit3aXJlIFsxOjBdICBjZmdfaW50X2VuYiAgICAgICAgICA9IGNmZ19tdWx0aV9mdW5jX3NlbFs3OjZdOword2lyZSAgICAgICAgY2ZnX3VhcnRfZW5iICAgICAgICAgPSBjZmdfbXVsdGlfZnVuY19zZWxbOF07Cit3aXJlICAgICAgICBjZmdfaTJjbV9lbmIgICAgICAgICA9IGNmZ19tdWx0aV9mdW5jX3NlbFs5XTsKK3dpcmUgICAgICAgIGNmZ19zcGltX2VuYiAgICAgICAgID0gY2ZnX211bHRpX2Z1bmNfc2VsWzEwXTsKKword2lyZSBbNzowXSAgY2ZnX3BvcnRfYV9kaXJfc2VsICAgPSBjZmdfZ3Bpb19kaXJfc2VsWzc6MF07Cit3aXJlIFs3OjBdICBjZmdfcG9ydF9iX2Rpcl9zZWwgICA9IGNmZ19ncGlvX2Rpcl9zZWxbMTU6OF07Cit3aXJlIFs3OjBdICBjZmdfcG9ydF9jX2Rpcl9zZWwgICA9IGNmZ19ncGlvX2Rpcl9zZWxbMjM6MTZdOword2lyZSBbNzowXSAgY2ZnX3BvcnRfZF9kaXJfc2VsICAgPSBjZmdfZ3Bpb19kaXJfc2VsWzMxOjI0XTsKKworCisvLyBkYXRhaW4gc2VsZWN0aW9uCithbHdheXNfY29tYiBiZWdpbgorICAgICBwb3J0X2FfaW4gPSAnaDA7CisgICAgIHBvcnRfYl9pbiA9ICdoMDsKKyAgICAgcG9ydF9jX2luID0gJ2gwOworICAgICBwb3J0X2RfaW4gPSAnaDA7CisgICAgIHVhcnRfcnhkICAgPSAnaDA7CisgICAgIGV4dF9pbnRyX2luPSAnaDA7CisgICAgIHNwaW1fbW9zaSAgPSAnaDA7CisgICAgIGkyY21fZGF0YV9pPSAnaDA7CisgICAgIGkyY21fY2xrX2kgPSAnaDA7CisKKyAgICAgLy9QaW4tMSAgICAgICAgUEM2L1JFU0VUKiAgICAgICAgICBkaWdpdGFsX2lvWzBdCisgICAgIHBvcnRfY19pbls2XSA9IGRpZ2l0YWxfaW9faW5bMF07CisKKyAgICAgLy9QaW4tMiAgICAgICAgUEQwL1JYRCAgICAgICAgICAgICBkaWdpdGFsX2lvWzFdCisgICAgIHBvcnRfZF9pblswXSA9IGRpZ2l0YWxfaW9faW5bMV07CisgICAgIGlmKGNmZ191YXJ0X2VuYikgIHVhcnRfcnhkICAgICAgPSBkaWdpdGFsX2lvX2luWzFdOworICAKKyAgICAgLy9QaW4tMyAgICAgICAgUEQxL1RYRCAgICAgICAgICAgICBkaWdpdGFsX2lvWzJdCisgICAgIHBvcnRfZF9pblsxXSA9IGRpZ2l0YWxfaW9faW5bMl07CisKKworICAgICAvL1Bpbi00ICAgICAgICBQRDIvSU5UMCAgICAgICAgICAgIGRpZ2l0YWxfaW9bM10KKyAgICAgcG9ydF9kX2luWzJdID0gZGlnaXRhbF9pb19pblszXTsKKyAgICAgaWYoY2ZnX2ludF9lbmJbMF0pIGV4dF9pbnRyX2luWzBdID0gZGlnaXRhbF9pb19pblszXTsKKworICAgICAvL1Bpbi01ICAgICAgICBQRDMvSU5UMS9PQzJCKFBXTTApICBkaWdpdGFsX2lvWzRdCisgICAgIHBvcnRfZF9pblszXSA9IGRpZ2l0YWxfaW9faW5bNF07CisgICAgIGlmKGNmZ19pbnRfZW5iWzFdKSBleHRfaW50cl9pblsxXSA9IGRpZ2l0YWxfaW9faW5bNF07CisKKyAgICAgLy9QaW4tNiAgICAgICAgUEQ0ICAgICAgICAgICAgICAgICBkaWdpdGFsX2lvWzVdCisgICAgIHBvcnRfZF9pbls0XSA9IGRpZ2l0YWxfaW9faW5bNV07CisKKyAgICAgLy9QaW4tOSAgICAgICAgUEI2L1hUQUwxL1RPU0MxICAgICBkaWdpdGFsX2lvWzZdCisgICAgIHBvcnRfYl9pbls2XSA9IGRpZ2l0YWxfaW9faW5bNl07CisKKyAgICAgLy8gUGluLTEwICAgICAgIFBCNy9YVEFMMi9UT1NDMiAgICAgZGlnaXRhbF9pb1s3XQorICAgICBwb3J0X2JfaW5bN10gPSBkaWdpdGFsX2lvX2luWzddOworCisgICAgIC8vUGluLTExICAgICAgIFBENS9PQzBCKFBXTTEpL1QxICAgZGlnaXRhbF9pb1s4XQorICAgICBwb3J0X2RfaW5bNV0gPSBkaWdpdGFsX2lvX2luWzhdOworCisgICAgIC8vUGluLTEyICAgICAgIFBENi9PQzBBKFBXTTIpL0FJTjAgZGlnaXRhbF9pb1s5XSAvYW5hbG9nX2lvWzJdCisgICAgIHBvcnRfZF9pbls2XSA9IGRpZ2l0YWxfaW9faW5bOV07CisKKyAgICAgLy9QaW4tMTMgICAgICAgUEQ3L0ExTjEgICAgICAgICAgICBkaWdpdGFsX2lvWzEwXS9hbmFsb2dfaW9bM10KKyAgICAgcG9ydF9kX2luWzddID0gZGlnaXRhbF9pb19pblsxMF07CisgICAgIAorICAgICAvL1Bpbi0xNCAgICAgICBQQjAvQ0xLTy9JQ1AxICAgICAgIGRpZ2l0YWxfaW9bMTFdCisgICAgIHBvcnRfYl9pblswXSA9ICBkaWdpdGFsX2lvX2luWzExXTsKKworICAgICAvL1Bpbi0xNSAgICAgICBQQjEvT0MxQShQV00zKSAgICAgIGRpZ2l0YWxfaW9bMTJdCisgICAgIHBvcnRfYl9pblsxXSA9IGRpZ2l0YWxfaW9faW5bMTJdOworCisgICAgIC8vUGluLTE2ICAgICAgIFBCMi9TUy9PQzFCKFBXTTQpICAgZGlnaXRhbF9pb1sxM10KKyAgICAgcG9ydF9iX2luWzJdID0gZGlnaXRhbF9pb19pblsxM107CisKKyAgICAgLy9QaW4tMTcgICAgICAgUEIzL01PU0kvT0MyQShQV001KSBkaWdpdGFsX2lvWzE0XQorICAgICBwb3J0X2JfaW5bM10gPSBkaWdpdGFsX2lvX2luWzE0XTsKKyAgICAgaWYoY2ZnX3NwaW1fZW5iKSBzcGltX21vc2kgPSBkaWdpdGFsX2lvX2luWzE0XTsKKworICAgICAvL1Bpbi0xOCAgICAgICBQQjQvTUlTTyAgICAgICAgICAgIGRpZ2l0YWxfaW9bMTVdCisgICAgIHBvcnRfYl9pbls0XSA9IGRpZ2l0YWxfaW9faW5bMTVdOworCisgICAgIC8vUGluLTE5ICAgICAgIFBCNS9TQ0sgICAgICAgICAgICAgZGlnaXRhbF9pb1sxNl0KKyAgICAgcG9ydF9iX2luWzVdPSBkaWdpdGFsX2lvX2luWzE2XTsKKyAgICAgCisgICAgIC8vUGluLTIzICAgICAgIFBDMC9BREMwICAgICAgICAgICAgZGlnaXRhbF9pb1sxOF0vYW5hbG9nX2lvWzExXQorICAgICBwb3J0X2NfaW5bMF0gPSBkaWdpdGFsX2lvX2luWzE4XTsKKworICAgICAvL1Bpbi0yNCAgICAgICBQQzEvQURDMSAgICAgICAgICAgIGRpZ2l0YWxfaW9bMTldL2FuYWxvZ19pb1sxMl0KKyAgICAgcG9ydF9jX2luWzFdID0gZGlnaXRhbF9pb19pblsxOV07CisKKyAgICAgLy9QaW4tMjUgICAgICAgUEMyL0FEQzIgICAgICAgICAgICBkaWdpdGFsX2lvWzIwXS9hbmFsb2dfaW9bMTNdCisgICAgIHBvcnRfY19pblsyXSA9IGRpZ2l0YWxfaW9faW5bMjBdOworCisgICAgIC8vUGluLTI2ICAgICAgIFBDMy9BREMzICAgICAgICAgICAgZGlnaXRhbF9pb1syMV0vYW5hbG9nX2lvWzE0XQorICAgICBwb3J0X2NfaW5bM10gPSBkaWdpdGFsX2lvX2luWzIxXTsKKworICAgICAvL1Bpbi0yNyAgICAgICBQQzQvQURDNC9TREEgICAgICAgIGRpZ2l0YWxfaW9bMjJdL2FuYWxvZ19pb1sxNV0KKyAgICAgcG9ydF9jX2luWzRdID0gZGlnaXRhbF9pb19pblsyMl07CisgICAgIGlmKGNmZ19pMmNtX2VuYikgIGkyY21fZGF0YV9pID0gZGlnaXRhbF9pb19pblsyMl07CisKKyAgICAgLy9QaW4tMjggICAgICAgUEM1L0FEQzUvU0NMICAgICAgICBkaWdpdGFsX2lvWzIzXS9hbmFsb2dfaW9bMTZdCisgICAgIHBvcnRfY19pbls1XSA9IGRpZ2l0YWxfaW9faW5bMjNdOworICAgICBpZihjZmdfaTJjbV9lbmIpICBpMmNtX2Nsa19pID0gZGlnaXRhbF9pb19pblsyM107CisKKyAgICAgc2ZsYXNoX2RpWzBdID0gZGlnaXRhbF9pb19pblsyOV07CisgICAgIHNmbGFzaF9kaVsxXSA9IGRpZ2l0YWxfaW9faW5bMzBdOworICAgICBzZmxhc2hfZGlbMl0gPSBkaWdpdGFsX2lvX2luWzMxXTsKKyAgICAgc2ZsYXNoX2RpWzNdID0gZGlnaXRhbF9pb19pblszMl07CisKKyAgICAgLy8gVUFSIE1BU1RFUiBJL0YKKyAgICAgdWFydG1fcnhkICAgID0gZGlnaXRhbF9pb19pblszNF07CisKKyAgICAgdXNiX2RwX2kgICAgPSBkaWdpdGFsX2lvX2luWzM2XTsKKyAgICAgdXNiX2RuX2kgICAgPSBkaWdpdGFsX2lvX2luWzM3XTsKK2VuZAorCisvLyBkYXRhb3V0IHNlbGVjdGlvbgorYWx3YXlzX2NvbWIgYmVnaW4KKyAgICAgZGlnaXRhbF9pb19vdXQgPSAnaDA7CisgICAgIC8vUGluLTEgICAgICAgIFBDNi9SRVNFVCogICAgICAgICAgZGlnaXRhbF9pb1swXQorICAgICBpZihjZmdfcG9ydF9jX2Rpcl9zZWxbNl0pICAgICAgIGRpZ2l0YWxfaW9fb3V0WzBdICAgPSBwb3J0X2Nfb3V0WzZdOworCisgICAgIC8vUGluLTIgICAgICAgIFBEMC9SWEQgICAgICAgICAgICAgZGlnaXRhbF9pb1sxXQorICAgICBpZihjZmdfcG9ydF9kX2Rpcl9zZWxbMF0pICAgICAgIGRpZ2l0YWxfaW9fb3V0WzFdICAgPSBwb3J0X2Rfb3V0WzBdOworICAKKyAgICAgLy9QaW4tMyAgICAgICAgUEQxL1RYRCAgICAgICAgICAgICBkaWdpdGFsX2lvWzJdCisgICAgIGlmICAgICAoY2ZnX3VhcnRfZW5iKSAgICAgICAgICAgZGlnaXRhbF9pb19vdXRbMl0gICA9IHVhcnRfdHhkOworICAgICBlbHNlIGlmKGNmZ19wb3J0X2RfZGlyX3NlbFsxXSkgIGRpZ2l0YWxfaW9fb3V0WzJdICAgPSBwb3J0X2Rfb3V0WzFdOworCisKKyAgICAgLy9QaW4tNCAgICAgICAgUEQyL0lOVDAgICAgICAgICAgICBkaWdpdGFsX2lvWzNdCisgICAgIGlmKGNmZ19wb3J0X2RfZGlyX3NlbFsyXSkgICAgICAgZGlnaXRhbF9pb19vdXRbM10gICA9IHBvcnRfZF9vdXRbMl07CisKKyAgICAgLy9QaW4tNSAgICAgICAgUEQzL0lOVDEvT0MyQihQV00wKSAgZGlnaXRhbF9pb1s0XQorICAgICBpZihjZmdfcHdtX2VuYlswXSkgICAgICAgICAgICAgIGRpZ2l0YWxfaW9fb3V0WzRdICAgPSBwd21fd2ZtWzBdOworICAgICBpZihjZmdfcG9ydF9kX2Rpcl9zZWxbM10pICAgICAgIGRpZ2l0YWxfaW9fb3V0WzRdICAgPSBwb3J0X2Rfb3V0WzNdOworCisgICAgIC8vUGluLTYgICAgICAgIFBENCAgICAgICAgICAgICAgICAgZGlnaXRhbF9pb1s1XQorICAgICBpZihjZmdfcG9ydF9kX2Rpcl9zZWxbNF0pICAgICAgIGRpZ2l0YWxfaW9fb3V0WzVdICAgPSBwb3J0X2Rfb3V0WzRdOworCisgICAgIC8vUGluLTkgICAgICAgIFBCNi9YVEFMMS9UT1NDMSAgICAgZGlnaXRhbF9pb1s2XQorICAgICBpZihjZmdfcG9ydF9iX2Rpcl9zZWxbNl0pICAgICAgIGRpZ2l0YWxfaW9fb3V0WzZdICAgPSBwb3J0X2Jfb3V0WzZdOworCisKKyAgICAgLy8gUGluLTEwICAgICAgIFBCNy9YVEFMMi9UT1NDMiAgICAgZGlnaXRhbF9pb1s3XQorICAgICBpZihjZmdfcG9ydF9iX2Rpcl9zZWxbN10pICAgICAgIGRpZ2l0YWxfaW9fb3V0WzddICAgPSBwb3J0X2Jfb3V0WzddOworCisgICAgIC8vUGluLTExICAgICAgIFBENS9PQzBCKFBXTTEpL1QxICAgZGlnaXRhbF9pb1s4XQorICAgICBpZihjZmdfcHdtX2VuYlsxXSkgICAgICAgICAgICAgIGRpZ2l0YWxfaW9fb3V0WzhdICAgPSBwd21fd2ZtWzFdOworICAgICBlbHNlIGlmKGNmZ19wb3J0X2RfZGlyX3NlbFs1XSkgIGRpZ2l0YWxfaW9fb3V0WzhdICAgPSBwb3J0X2Rfb3V0WzVdOworCisgICAgIC8vUGluLTEyICAgICAgIFBENi9PQzBBKFBXTTIpL0FJTjAgZGlnaXRhbF9pb1s5XSAvYW5hbG9nX2lvWzJdCisgICAgIGlmKGNmZ19wd21fZW5iWzJdKSAgICAgICAgICAgICAgZGlnaXRhbF9pb19vdXRbOV0gICA9IHB3bV93Zm1bMl07CisgICAgIGVsc2UgaWYoY2ZnX3BvcnRfZF9kaXJfc2VsWzZdKSAgZGlnaXRhbF9pb19vdXRbOV0gICA9IHBvcnRfZF9vdXRbNl07CisKKworICAgICAvL1Bpbi0xMyAgICAgICBQRDcvQTFOMSAgICAgICAgICAgIGRpZ2l0YWxfaW9bMTBdL2FuYWxvZ19pb1szXQorICAgICBpZihjZmdfcG9ydF9kX2Rpcl9zZWxbN10pICAgICAgIGRpZ2l0YWxfaW9fb3V0WzEwXSAgPSBwb3J0X2Rfb3V0WzddOworICAgICAKKyAgICAgLy9QaW4tMTQgICAgICAgUEIwL0NMS08vSUNQMSAgICAgICBkaWdpdGFsX2lvWzExXQorICAgICBpZihjZmdfcG9ydF9iX2Rpcl9zZWxbMF0pICAgICAgIGRpZ2l0YWxfaW9fb3V0WzExXSAgPSBwb3J0X2Jfb3V0WzBdOworCisgICAgIC8vUGluLTE1ICAgICAgIFBCMS9PQzFBKFBXTTMpICAgICAgZGlnaXRhbF9pb1sxMl0KKyAgICAgaWYoY2ZnX3B3bV9lbmJbM10pICAgICAgICAgICAgICBkaWdpdGFsX2lvX291dFsxMl0gID0gcHdtX3dmbVszXTsKKyAgICAgZWxzZSBpZihjZmdfcG9ydF9iX2Rpcl9zZWxbMV0pICBkaWdpdGFsX2lvX291dFsxMl0gID0gcG9ydF9iX291dFsxXTsKKworICAgICAvL1Bpbi0xNiAgICAgICBQQjIvU1MvT0MxQihQV000KSAgIGRpZ2l0YWxfaW9bMTNdCisgICAgIGlmKGNmZ19wd21fZW5iWzRdKSAgICAgICAgICAgICAgZGlnaXRhbF9pb19vdXRbMTNdICA9IHB3bV93Zm1bNF07CisgICAgIGVsc2UgaWYoY2ZnX3NwaW1fZW5iKSAgICAgICAgICAgZGlnaXRhbF9pb19vdXRbMTNdICA9IHNwaW1fc3M7CisgICAgIGVsc2UgaWYoY2ZnX3BvcnRfYl9kaXJfc2VsWzJdKSAgZGlnaXRhbF9pb19vdXRbMTNdICA9IHBvcnRfYl9vdXRbMl07CisKKyAgICAgLy9QaW4tMTcgICAgICAgUEIzL01PU0kvT0MyQShQV001KSBkaWdpdGFsX2lvWzE0XQorICAgICBpZihjZmdfcHdtX2VuYls1XSkgICAgICAgICAgICAgIGRpZ2l0YWxfaW9fb3V0WzE0XSAgPSBwd21fd2ZtWzVdOworICAgICBlbHNlIGlmKGNmZ19wb3J0X2JfZGlyX3NlbFszXSkgIGRpZ2l0YWxfaW9fb3V0WzE0XSAgPSBwb3J0X2Jfb3V0WzNdOworCisgICAgIC8vUGluLTE4ICAgICAgIFBCNC9NSVNPICAgICAgICAgICAgZGlnaXRhbF9pb1sxNV0KKyAgICAgaWYoY2ZnX3NwaW1fZW5iKSAgICAgICAgICAgICAgICBkaWdpdGFsX2lvX291dFsxNV0gID0gc3BpbV9taXNvOworICAgICBlbHNlIGlmKGNmZ19wb3J0X2JfZGlyX3NlbFs0XSkgIGRpZ2l0YWxfaW9fb3V0WzE1XSAgPSBwb3J0X2Jfb3V0WzRdOworCisgICAgIC8vUGluLTE5ICAgICAgIFBCNS9TQ0sgICAgICAgICAgICAgZGlnaXRhbF9pb1sxNl0KKyAgICAgaWYoY2ZnX3NwaW1fZW5iKSAgICAgICAgICAgICAgICBkaWdpdGFsX2lvX291dFsxNl0gID0gc3BpbV9zY2s7CisgICAgIGVsc2UgaWYoY2ZnX3BvcnRfYl9kaXJfc2VsWzVdKSAgZGlnaXRhbF9pb19vdXRbMTZdICA9IHBvcnRfYl9vdXRbNV07CisgICAgIAorICAgICAvL1Bpbi0yMyAgICAgICBQQzAvQURDMCAgICAgICAgICAgIGRpZ2l0YWxfaW9bMThdL2FuYWxvZ19pb1sxMV0KKyAgICAgaWYoY2ZnX3BvcnRfY19kaXJfc2VsWzBdKSAgICAgICBkaWdpdGFsX2lvX291dFsxOF0gID0gcG9ydF9jX291dFswXTsKKworICAgICAvL1Bpbi0yNCAgICAgICBQQzEvQURDMSAgICAgICAgICAgIGRpZ2l0YWxfaW9bMTldL2FuYWxvZ19pb1sxMl0KKyAgICAgaWYoY2ZnX3BvcnRfY19kaXJfc2VsWzFdKSAgICAgICBkaWdpdGFsX2lvX291dFsxOV0gID0gcG9ydF9jX291dFsxXTsKKworICAgICAvL1Bpbi0yNSAgICAgICBQQzIvQURDMiAgICAgICAgICAgIGRpZ2l0YWxfaW9bMjBdL2FuYWxvZ19pb1sxM10KKyAgICAgaWYoY2ZnX3BvcnRfY19kaXJfc2VsWzJdKSAgICAgICBkaWdpdGFsX2lvX291dFsyMF0gID0gcG9ydF9jX291dFsyXTsKKworICAgICAvL1Bpbi0yNiAgICAgICBQQzMvQURDMyAgICAgICAgICAgIGRpZ2l0YWxfaW9bMjFdL2FuYWxvZ19pb1sxNF0KKyAgICAgaWYoY2ZnX3BvcnRfY19kaXJfc2VsWzNdKSAgICAgICBkaWdpdGFsX2lvX291dFsyMV0gID0gcG9ydF9jX291dFszXTsKKworICAgICAvL1Bpbi0yNyAgICAgICBQQzQvQURDNC9TREEgICAgICAgIGRpZ2l0YWxfaW9bMjJdL2FuYWxvZ19pb1sxNV0KKyAgICAgaWYoY2ZnX2kyY21fZW5iKSAgICAgICAgICAgICAgICBkaWdpdGFsX2lvX291dFsyMl0gID0gaTJjbV9kYXRhX287CisgICAgIGVsc2UgaWYoY2ZnX3BvcnRfY19kaXJfc2VsWzRdKSAgZGlnaXRhbF9pb19vdXRbMjJdICA9IHBvcnRfY19vdXRbNF07CisKKyAgICAgLy9QaW4tMjggICAgICAgUEM1L0FEQzUvU0NMICAgICAgICBkaWdpdGFsX2lvWzIzXS9hbmFsb2dfaW9bMTZdCisgICAgIGlmKGNmZ19pMmNtX2VuYikgICAgICAgICAgICAgICAgZGlnaXRhbF9pb19vdXRbMjNdICA9IGkyY21fY2xrX287CisgICAgIGVsc2UgaWYoY2ZnX3BvcnRfY19kaXJfc2VsWzVdKSAgZGlnaXRhbF9pb19vdXRbMjNdICA9IHBvcnRfY19vdXRbNV07CisKKyAgICAgLy8gU2VyaWFsIEZsYXNoCisgICAgIGRpZ2l0YWxfaW9fb3V0WzI0XSA9IHNmbGFzaF9zY2sgICA7CisgICAgIGRpZ2l0YWxfaW9fb3V0WzI1XSA9IHNmbGFzaF9zc1szXSA7CisgICAgIGRpZ2l0YWxfaW9fb3V0WzI2XSA9IHNmbGFzaF9zc1syXSA7CisgICAgIGRpZ2l0YWxfaW9fb3V0WzI3XSA9IHNmbGFzaF9zc1sxXSA7CisgICAgIGRpZ2l0YWxfaW9fb3V0WzI4XSA9IHNmbGFzaF9zc1swXSA7CisgICAgIGRpZ2l0YWxfaW9fb3V0WzI5XSA9IHNmbGFzaF9kb1swXSA7CisgICAgIGRpZ2l0YWxfaW9fb3V0WzMwXSA9IHNmbGFzaF9kb1sxXSA7CisgICAgIGRpZ2l0YWxfaW9fb3V0WzMxXSA9IHNmbGFzaF9kb1syXSA7CisgICAgIGRpZ2l0YWxfaW9fb3V0WzMyXSA9IHNmbGFzaF9kb1szXSA7CisgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAvLyBSZXNlcnZlZAorICAgICBkaWdpdGFsX2lvX291dFszM10gPSAxJ2IwOworCisgICAgIC8vIFVBUlQgTUFTVEVSIEkvZgorICAgICBkaWdpdGFsX2lvX291dFszNF0gPSAxJ2IwICAgICAgICAgOyAvLyBSWEQKKyAgICAgZGlnaXRhbF9pb19vdXRbMzVdID0gdWFydG1fdHhkICAgIDsgLy8gVFhECisgICAgICAgICAgICAgICAgICAKKyAgICAgLy8gVVNCIDEuMSAgICAgCisgICAgIGRpZ2l0YWxfaW9fb3V0WzM2XSA9IHVzYl9kcF9vICAgICA7CisgICAgIGRpZ2l0YWxfaW9fb3V0WzM3XSA9IHVzYl9kbl9vICAgICA7CitlbmQKKworLy8gZGF0YW9lbiBzZWxlY3Rpb24KK2Fsd2F5c19jb21iIGJlZ2luCisgICAgIGRpZ2l0YWxfaW9fb2VuID0gMzgnaDNGX0ZGRkZfRkZGRjsKKyAgICAgLy9QaW4tMSAgICAgICAgUEM2L1JFU0VUKiAgICAgICAgICBkaWdpdGFsX2lvWzBdCisgICAgIGlmKGNmZ19wb3J0X2NfZGlyX3NlbFs2XSkgICAgICAgZGlnaXRhbF9pb19vZW5bMF0gICA9IDEnYjA7CisKKyAgICAgLy9QaW4tMiAgICAgICAgUEQwL1JYRCAgICAgICAgICAgICBkaWdpdGFsX2lvWzFdCisgICAgIGlmICAgICAoY2ZnX3VhcnRfZW5iKSAgICAgICAgICAgZGlnaXRhbF9pb19vZW5bMV0gICA9IDEnYjE7CisgICAgIGVsc2UgaWYoY2ZnX3BvcnRfZF9kaXJfc2VsWzBdKSAgZGlnaXRhbF9pb19vZW5bMV0gICA9IDEnYjA7CisKKyAgICAgLy9QaW4tMyAgICAgICAgUEQxL1RYRCAgICAgICAgICAgICBkaWdpdGFsX2lvWzJdCisgICAgIGlmICAgICAoY2ZnX3VhcnRfZW5iKSAgICAgICAgICAgZGlnaXRhbF9pb19vZW5bMl0gICA9IDEnYjA7CisgICAgIGVsc2UgaWYoY2ZnX3BvcnRfZF9kaXJfc2VsWzFdKSAgZGlnaXRhbF9pb19vZW5bMl0gICA9IDEnYjA7CisKKyAgICAvL1Bpbi00ICAgICAgICBQRDIvSU5UMCAgICAgICAgICAgIGRpZ2l0YWxfaW9bM10KKyAgICAgaWYoY2ZnX2ludF9lbmJbMF0pICAgICAgICAgICAgICBkaWdpdGFsX2lvX29lblszXSAgID0gMSdiMTsKKyAgICAgZWxzZSBpZihjZmdfcG9ydF9kX2Rpcl9zZWxbMl0pICBkaWdpdGFsX2lvX29lblszXSAgID0gMSdiMDsKKworICAgICAvL1Bpbi01ICAgICAgICBQRDMvSU5UMS9PQzJCKFBXTTApICBkaWdpdGFsX2lvWzRdCisgICAgIGlmKGNmZ19wd21fZW5iWzBdKSAgICAgICAgICAgICAgZGlnaXRhbF9pb19vZW5bNF0gICA9IDEnYjA7CisgICAgIGVsc2UgaWYoY2ZnX2ludF9lbmJbMV0pICAgICAgICAgZGlnaXRhbF9pb19vZW5bNF0gICA9IDEnYjE7CisgICAgIGVsc2UgaWYoY2ZnX3BvcnRfZF9kaXJfc2VsWzNdKSAgZGlnaXRhbF9pb19vZW5bNF0gICA9IDEnYjA7CisKKyAgICAgLy9QaW4tNiAgICAgICAgUEQ0ICAgICAgICAgICAgICAgICBkaWdpdGFsX2lvWzVdCisgICAgIGlmKGNmZ19wb3J0X2RfZGlyX3NlbFs0XSkgICAgICAgZGlnaXRhbF9pb19vZW5bNV0gICA9IDEnYjA7CisKKyAgICAgLy9QaW4tOSAgICAgICAgUEI2L1hUQUwxL1RPU0MxICAgICBkaWdpdGFsX2lvWzZdCisgICAgIGlmKGNmZ19wb3J0X2JfZGlyX3NlbFs2XSkgICAgICAgZGlnaXRhbF9pb19vZW5bNl0gICA9IDEnYjA7CisKKyAgICAgLy8gUGluLTEwICAgICAgIFBCNy9YVEFMMi9UT1NDMiAgICAgZGlnaXRhbF9pb1s3XQorICAgICBpZihjZmdfcG9ydF9iX2Rpcl9zZWxbN10pICAgICAgIGRpZ2l0YWxfaW9fb2VuWzddICAgPSAxJ2IwOworCisgICAgIC8vUGluLTExICAgICAgIFBENS9PQzBCKFBXTTEpL1QxICAgZGlnaXRhbF9pb1s4XQorICAgICBpZihjZmdfcHdtX2VuYlsxXSkgICAgICAgICAgICAgIGRpZ2l0YWxfaW9fb2VuWzhdICAgPSAxJ2IwOworICAgICBlbHNlIGlmKGNmZ19wb3J0X2RfZGlyX3NlbFs1XSkgIGRpZ2l0YWxfaW9fb2VuWzhdICAgPSAxJ2IwOworCisgICAgIC8vUGluLTEyICAgICAgIFBENi9PQzBBKFBXTTIpL0FJTjAgZGlnaXRhbF9pb1s5XSAvYW5hbG9nX2lvWzJdCisgICAgIGlmKGNmZ19wd21fZW5iWzJdKSAgICAgICAgICAgICAgZGlnaXRhbF9pb19vZW5bOV0gICA9IDEnYjA7CisgICAgIGVsc2UgaWYoY2ZnX3BvcnRfZF9kaXJfc2VsWzZdKSAgZGlnaXRhbF9pb19vZW5bOV0gICA9IDEnYjA7CisKKyAgICAgLy9QaW4tMTMgICAgICAgUEQ3L0ExTjEgICAgICAgICAgICBkaWdpdGFsX2lvWzEwXS9hbmFsb2dfaW9bM10KKyAgICAgaWYoY2ZnX3BvcnRfZF9kaXJfc2VsWzddKSAgICAgICBkaWdpdGFsX2lvX29lblsxMF0gID0gMSdiMDsKKyAgICAgCisgICAgIC8vUGluLTE0ICAgICAgIFBCMC9DTEtPL0lDUDEgICAgICAgZGlnaXRhbF9pb1sxMV0KKyAgICAgaWYoY2ZnX3BvcnRfYl9kaXJfc2VsWzBdKSAgICAgICBkaWdpdGFsX2lvX29lblsxMV0gID0gMSdiMDsKKworICAgICAvL1Bpbi0xNSAgICAgICBQQjEvT0MxQShQV00zKSAgICAgIGRpZ2l0YWxfaW9bMTJdCisgICAgIGlmKGNmZ19wd21fZW5iWzNdKSAgICAgICAgICAgICAgZGlnaXRhbF9pb19vZW5bMTJdICA9IDEnYjA7CisgICAgIGVsc2UgaWYoY2ZnX3BvcnRfYl9kaXJfc2VsWzFdKSAgZGlnaXRhbF9pb19vZW5bMTJdICA9IDEnYjA7CisKKyAgICAgLy9QaW4tMTYgICAgICAgUEIyL1NTL09DMUIoUFdNNCkgICBkaWdpdGFsX2lvWzEzXQorICAgICBpZihjZmdfcHdtX2VuYls0XSkgICAgICAgICAgICAgIGRpZ2l0YWxfaW9fb2VuWzEzXSAgPSAxJ2IwOworICAgICBlbHNlIGlmKGNmZ19zcGltX2VuYikgICAgICAgICAgIGRpZ2l0YWxfaW9fb2VuWzEzXSAgPSAxJ2IwOworICAgICBlbHNlIGlmKGNmZ19wb3J0X2JfZGlyX3NlbFsyXSkgIGRpZ2l0YWxfaW9fb2VuWzEzXSAgPSAxJ2IwOworCisgICAgIC8vUGluLTE3ICAgICAgIFBCMy9NT1NJL09DMkEoUFdNNSkgZGlnaXRhbF9pb1sxNF0KKyAgICAgaWYoY2ZnX3NwaW1fZW5iKSAgICAgICAgICAgICAgICBkaWdpdGFsX2lvX29lblsxNF0gID0gMSdiMTsKKyAgICAgZWxzZSBpZihjZmdfcHdtX2VuYls1XSkgICAgICAgICBkaWdpdGFsX2lvX29lblsxNF0gID0gMSdiMDsKKyAgICAgZWxzZSBpZihjZmdfcG9ydF9iX2Rpcl9zZWxbM10pICBkaWdpdGFsX2lvX29lblsxNF0gID0gMSdiMDsKKworICAgICAvL1Bpbi0xOCAgICAgICBQQjQvTUlTTyAgICAgICAgICAgIGRpZ2l0YWxfaW9bMTVdCisgICAgIGlmKGNmZ19zcGltX2VuYikgICAgICAgICAgICAgICAgZGlnaXRhbF9pb19vZW5bMTVdICA9IDEnYjA7CisgICAgIGVsc2UgaWYoY2ZnX3BvcnRfYl9kaXJfc2VsWzRdKSAgZGlnaXRhbF9pb19vZW5bMTVdICA9IDEnYjA7CisKKyAgICAgLy9QaW4tMTkgICAgICAgUEI1L1NDSyAgICAgICAgICAgICBkaWdpdGFsX2lvWzE2XQorICAgICBpZihjZmdfc3BpbV9lbmIpICAgICAgICAgICAgICAgIGRpZ2l0YWxfaW9fb2VuWzE2XSAgPSAxJ2IwOworICAgICBlbHNlIGlmKGNmZ19wb3J0X2JfZGlyX3NlbFs1XSkgIGRpZ2l0YWxfaW9fb2VuWzE2XSAgPSAxJ2IwOworICAgICAKKyAgICAgLy9QaW4tMjMgICAgICAgUEMwL0FEQzAgICAgICAgICAgICBkaWdpdGFsX2lvWzE4XS9hbmFsb2dfaW9bMTFdCisgICAgIGlmKGNmZ19wb3J0X2NfZGlyX3NlbFswXSkgICAgICAgZGlnaXRhbF9pb19vZW5bMThdICA9IDEnYjA7CisKKyAgICAgLy9QaW4tMjQgICAgICAgUEMxL0FEQzEgICAgICAgICAgICBkaWdpdGFsX2lvWzE5XS9hbmFsb2dfaW9bMTJdCisgICAgIGlmKGNmZ19wb3J0X2NfZGlyX3NlbFsxXSkgICAgICAgZGlnaXRhbF9pb19vZW5bMTldICA9IDEnYjA7CisKKyAgICAgLy9QaW4tMjUgICAgICAgUEMyL0FEQzIgICAgICAgICAgICBkaWdpdGFsX2lvWzIwXS9hbmFsb2dfaW9bMTNdCisgICAgIGlmKGNmZ19wb3J0X2NfZGlyX3NlbFsyXSkgICAgICAgZGlnaXRhbF9pb19vZW5bMjBdICA9IDEnYjA7CisKKyAgICAgLy9QaW4tMjYgICAgICAgUEMzL0FEQzMgICAgICAgICAgICBkaWdpdGFsX2lvWzIxXS9hbmFsb2dfaW9bMTRdCisgICAgIGlmKGNmZ19wb3J0X2NfZGlyX3NlbFszXSkgICAgICAgZGlnaXRhbF9pb19vZW5bMjFdICA9IDEnYjA7CisKKyAgICAgLy9QaW4tMjcgICAgICAgUEM0L0FEQzQvU0RBICAgICAgICBkaWdpdGFsX2lvWzIyXS9hbmFsb2dfaW9bMTVdCisgICAgIGlmKGNmZ19pMmNtX2VuYikgICAgICAgICAgICAgICAgZGlnaXRhbF9pb19vZW5bMjJdICA9IGkyY21fZGF0YV9vZW47CisgICAgIGVsc2UgaWYoY2ZnX3BvcnRfY19kaXJfc2VsWzRdKSAgZGlnaXRhbF9pb19vZW5bMjJdICA9IDEnYjA7CisKKyAgICAgLy9QaW4tMjggICAgICAgUEM1L0FEQzUvU0NMICAgICAgICBkaWdpdGFsX2lvWzIzXS9hbmFsb2dfaW9bMTZdCisgICAgIGlmKGNmZ19pMmNtX2VuYikgICAgICAgICAgICAgICAgZGlnaXRhbF9pb19vZW5bMjNdICA9IGkyY21fY2xrX29lbjsKKyAgICAgZWxzZSBpZihjZmdfcG9ydF9jX2Rpcl9zZWxbNV0pICBkaWdpdGFsX2lvX29lblsyM10gID0gMSdiMDsKKworICAgICAvLyBTZXJpYWwgRmxhc2gKKyAgICAgZGlnaXRhbF9pb19vZW5bMjRdID0gMSdiMCAgIDsKKyAgICAgZGlnaXRhbF9pb19vZW5bMjVdID0gMSdiMCAgIDsKKyAgICAgZGlnaXRhbF9pb19vZW5bMjZdID0gMSdiMCAgIDsKKyAgICAgZGlnaXRhbF9pb19vZW5bMjddID0gMSdiMCAgIDsKKyAgICAgZGlnaXRhbF9pb19vZW5bMjhdID0gMSdiMCAgIDsKKyAgICAgZGlnaXRhbF9pb19vZW5bMjldID0gc2ZsYXNoX29lblswXTsKKyAgICAgZGlnaXRhbF9pb19vZW5bMzBdID0gc2ZsYXNoX29lblsxXTsKKyAgICAgZGlnaXRhbF9pb19vZW5bMzFdID0gc2ZsYXNoX29lblsyXTsKKyAgICAgZGlnaXRhbF9pb19vZW5bMzJdID0gc2ZsYXNoX29lblszXTsKKyAgICAgICAgICAgICAgICAgICAgICAgCisgICAgIC8vIFJlc2VydmVkCisgICAgIGRpZ2l0YWxfaW9fb2VuWzMzXSA9IDEnYjAgIDsKKyAgICAgLy8gVUFSVCBNQVNURVIKKyAgICAgZGlnaXRhbF9pb19vZW5bMzRdID0gMSdiMTsgLy8gUlhECisgICAgIGRpZ2l0YWxfaW9fb2VuWzM1XSA9IDEnYjA7IC8vIFRYRAorICAgICAgICAgICAgICAgICAgCisgICAgIC8vIFVTQiAxLjEgICAgIAorICAgICBkaWdpdGFsX2lvX29lblszNl0gPSB1c2Jfb2VuOworICAgICBkaWdpdGFsX2lvX29lblszN10gPSB1c2Jfb2VuOworZW5kCisKKworZW5kbW9kdWxlIAorCisKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3Bpbm11eC9zcmMvcGlubXV4X3JlZy5zdiBiL3Zlcmlsb2cvcnRsL3Bpbm11eC9zcmMvcGlubXV4X3JlZy5zdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTFiZDQwCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvcGlubXV4L3NyYy9waW5tdXhfcmVnLnN2CkBAIC0wLDAgKzEsOTEzIEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEgLCBEaW5lc2ggQW5uYXl5YSAgICAgICAgICAgICAgICAgICAgICAgICAgCisvLyAKKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogQ3JlYXRlZCBieSBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFBpbm11eCBSZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSByaXNjZHVpbm8gY29yZXMgcHJvamVjdCAgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHBzOi8vZ2l0aHViLmNvbS9kaW5lc2hhbm5heXlhL3Jpc2NkdWluby5naXQgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICBIb2xkIGFsbCB0aGUgR2xvYmFsIGFuZCBQaW5NdXggUmVnaXN0ZXIgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcihzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAtIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFJldmlzaW9uIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC4xIC0gMTZ0aCBGZWIgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgaW5pdGlhbCB2ZXJzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCittb2R1bGUgcGlubXV4X3JlZyAoCisgICAgICAgICAgICAgICAgICAgICAgIC8vIFN5c3RlbSBTaWduYWxzCisgICAgICAgICAgICAgICAgICAgICAgIC8vIElucHV0cworCQkgICAgICAgaW5wdXQgbG9naWMgICAgICAgICAgICAgbWNsaywKKyAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQgbG9naWMgICAgICAgICAgICAgaF9yZXNldF9uLAorCisJCSAgICAgICAvLyBSZWcgQnVzIEludGVyZmFjZSBTaWduYWwKKyAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQgbG9naWMgICAgICAgICAgICAgcmVnX2NzLAorICAgICAgICAgICAgICAgICAgICAgICBpbnB1dCBsb2dpYyAgICAgICAgICAgICByZWdfd3IsCisgICAgICAgICAgICAgICAgICAgICAgIGlucHV0IGxvZ2ljIFs3OjBdICAgICAgIHJlZ19hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICBpbnB1dCBsb2dpYyBbMzE6MF0gICAgICByZWdfd2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgIGlucHV0IGxvZ2ljIFszOjBdICAgICAgIHJlZ19iZSwKKworICAgICAgICAgICAgICAgICAgICAgICAvLyBPdXRwdXRzCisgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCBsb2dpYyBbMzE6MF0gICAgIHJlZ19yZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0IGxvZ2ljICAgICAgICAgICAgcmVnX2FjaywKKworCQkgICAgICAgaW5wdXQgIGxvZ2ljIFsxOjBdICAgICAgZXh0X2ludHJfaW4sCisKKwkJICAgICAgLy8gUmlzYyBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCBsb2dpYyBbMzE6MF0gICAgIGZ1c2VfbWhhcnRpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0IGxvZ2ljIFsxNTowXSAgICAgaXJxX2xpbmVzLAorICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICBzb2Z0X2lycSwKKyAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0IGxvZ2ljIFsyOjBdICAgICAgdXNlcl9pcnEsCisJCSAgICAgICBpbnB1dCAgbG9naWMgICAgICAgICAgICB1c2JfaW50ciwKKwkJICAgICAgIGlucHV0ICBsb2dpYyAgICAgICAgICAgIGkyY21faW50ciwKKworICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgbG9naWMgWzk6MF0gICAgICBjZmdfcHVsc2VfMXVzLAorCQkgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgIC8vIDYgUFdNIENvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCBsb2dpYyBbMTU6MF0gICAgY2ZnX3B3bTBfaGlnaCAgICAgICAgICAgLAorICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgbG9naWMgWzE1OjBdICAgIGNmZ19wd20wX2xvdyAgICAgICAgICAgICwKKyAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0IGxvZ2ljIFsxNTowXSAgICBjZmdfcHdtMV9oaWdoICAgICAgICAgICAsCisgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCBsb2dpYyBbMTU6MF0gICAgY2ZnX3B3bTFfbG93ICAgICAgICAgICAgLAorICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgbG9naWMgWzE1OjBdICAgIGNmZ19wd20yX2hpZ2ggICAgICAgICAgICwKKyAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0IGxvZ2ljIFsxNTowXSAgICBjZmdfcHdtMl9sb3cgICAgICAgICAgICAsCisgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCBsb2dpYyBbMTU6MF0gICAgY2ZnX3B3bTNfaGlnaCAgICAgICAgICAgLAorICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgbG9naWMgWzE1OjBdICAgIGNmZ19wd20zX2xvdyAgICAgICAgICAgICwKKyAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0IGxvZ2ljIFsxNTowXSAgICBjZmdfcHdtNF9oaWdoICAgICAgICAgICAsCisgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCBsb2dpYyBbMTU6MF0gICAgY2ZnX3B3bTRfbG93ICAgICAgICAgICAgLAorICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgbG9naWMgWzE1OjBdICAgIGNmZ19wd201X2hpZ2ggICAgICAgICAgICwKKyAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0IGxvZ2ljIFsxNTowXSAgICBjZmdfcHdtNV9sb3cgICAgICAgICAgICAsCisKKyAgICAgICAgICAgICAgICAvLyBHUElPIGlucHV0IHBpbnMKKyAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQgIGxvZ2ljIFszMTowXSAgICAgZ3Bpb19pbl9kYXRhICAgLC8vIEdQSU8gSS9QIHBpbnMKKyAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQgIGxvZ2ljIFszMTowXSAgICAgZ3Bpb19pbnRfZXZlbnQgLC8vIGZyb20gZ3BpbyBjb250cm9sIGJsaworCisKKworICAgICAgICAgICAgICAgIC8vIEdQSU8gY29uZmlnIHBpbnMKKyAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0ICBsb2dpYyBbMzE6MF0gICAgIGNmZ19ncGlvX291dF9kYXRhICAgICAgICAsLy8gdG8gdGhlIEdQSU8gY29udHJvbCBibG9jayAKKyAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0ICBsb2dpYyBbMzE6MF0gICAgIGNmZ19ncGlvX2RhdGFfaW4gICAgICAgICAsLy8gR1BJTyBJL1AgcGlucyBkYXRhIGNhcHR1cmVkIGludG8gdGhpcworICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgIGxvZ2ljIFszMTowXSAgICAgY2ZnX2dwaW9fZGlyX3NlbCAgICAgICAgICwvLyBkZWNpZGVzIG9uIEdQSU8gcGluIGlzIEkvUCBvciBPL1AgYXQgcGFkIGxldmVsCisgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCAgbG9naWMgWzMxOjBdICAgICBjZmdfZ3Bpb19vdXRfdHlwZSAgICAgICAgLC8vIE8vUCBpcyBzdGF0aWMgLCAnMScgOiB3YXZlZm9ybQorICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgIGxvZ2ljIFszMTowXSAgICAgY2ZnX2dwaW9fcG9zZWRnZV9pbnRfc2VsICwvLyBzZWxlY3QgcG9zZWRnZSBpbnRlcnJ1cHQKKyAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0ICBsb2dpYyBbMzE6MF0gICAgIGNmZ19ncGlvX25lZ2VkZ2VfaW50X3NlbCAsLy8gc2VsZWN0IG5lZ2VkZ2UgaW50ZXJydXB0CisgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCAgbG9naWMgWzMxOjBdICAgICBjZmdfbXVsdGlfZnVuY19zZWwgICAgICAgLC8vIG11bHRpZnVuY3Rpb24gcGlucworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgIC8vIE91dHB1dHMKKyAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0IGxvZ2ljIFszMTowXSAgICAgIGdwaW9fcHJldl9pbmRhdGEsICAgICAgIC8vIHBydiBkYXRhIGZyb20gR1BJTyBJL1AgcGlucworCisJCS8vIEJJU1QgSS9GCisJICAgICAgICAgICAgICAgb3V0cHV0IGxvZ2ljICAgICAgICAgICAgIGJpc3RfZW4sCisJICAgICAgICAgICAgICAgb3V0cHV0IGxvZ2ljICAgICAgICAgICAgIGJpc3RfcnVuLAorCSAgICAgICAgICAgICAgIG91dHB1dCBsb2dpYyAgICAgICAgICAgICBiaXN0X2xvYWQsCisKKwkgICAgICAgICAgICAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICAgYmlzdF9zZGksCisJICAgICAgICAgICAgICAgb3V0cHV0IGxvZ2ljICAgICAgICAgICAgIGJpc3Rfc2hpZnQsCisJICAgICAgICAgICAgICAgaW5wdXQgIGxvZ2ljICAgICAgICAgICAgIGJpc3Rfc2RvLAorCisJICAgICAgICAgICAgICAgaW5wdXQgbG9naWMgICAgICAgICAgICAgIGJpc3RfZG9uZSwKKwkgICAgICAgICAgICAgICBpbnB1dCBsb2dpYyBbMzowXSAgICAgICAgYmlzdF9lcnJvciwKKwkgICAgICAgICAgICAgICBpbnB1dCBsb2dpYyBbMzowXSAgICAgICAgYmlzdF9jb3JyZWN0LAorCSAgICAgICAgICAgICAgIGlucHV0IGxvZ2ljIFszOjBdICAgICAgICBiaXN0X2Vycm9yX2NudDAsCisJICAgICAgICAgICAgICAgaW5wdXQgbG9naWMgWzM6MF0gICAgICAgIGJpc3RfZXJyb3JfY250MSwKKwkgICAgICAgICAgICAgICBpbnB1dCBsb2dpYyBbMzowXSAgICAgICAgYmlzdF9lcnJvcl9jbnQyLAorCSAgICAgICAgICAgICAgIGlucHV0IGxvZ2ljIFszOjBdICAgICAgICBiaXN0X2Vycm9yX2NudDMKKworICAgKTsgCisKKworICAgICAgICAgICAgICAgICAgICAgICAKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEludGVybmFsIFdpcmUgRGVjbGFyYXRpb25zCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2xvZ2ljICAgICAgICAgIHN3X3JkX2VuICAgICAgICAgICAgICAgOworbG9naWMgICAgICAgICAgc3dfd3JfZW47Citsb2dpYyBbNDowXSAgICBzd19hZGRyOyAvLyBhZGRyZXNzaW5nIDE2IHJlZ2lzdGVycworbG9naWMgWzMxOjBdICAgc3dfcmVnX3dkYXRhOworbG9naWMgWzM6MF0gICAgd3JfYmUgIDsKKworbG9naWMgWzMxOjBdICAgcmVnX291dDsKK2xvZ2ljICBbMzE6MF0gICByZWdfMDsgLy8gQ2hpcCBJRAorbG9naWMgIFszMTowXSAgIHJlZ18xOyAvLyBSaXNjIEZ1c2UgSWQKK2xvZ2ljIFszMTowXSAgICByZWdfMjsgLy8gR1BJTyBSZWFkIERhdGEKK2xvZ2ljIFszMTowXSAgICByZWdfMzsgLy8gR1BJTyBPdXRwdXQgRGF0YQorbG9naWMgWzMxOjBdICAgIHJlZ180OyAvLyBHUElPIERpciBTZWwKK2xvZ2ljIFszMTowXSAgICByZWdfNTsgLy8gR1BJTyBUeXBlCitsb2dpYyBbMzE6MF0gICAgcmVnXzY7IC8vIEludGVycnVwdAorbG9naWMgWzMxOjBdICAgIHJlZ183OyAvLyAKK2xvZ2ljIFszMTowXSAgICByZWdfODsgLy8gCitsb2dpYyBbMzE6MF0gICAgcmVnXzk7IC8vIEdQSU8gSW50ZXJydXB0IFN0YXR1cworbG9naWMgIFszMTowXSAgIHJlZ18xMDsgLy8gR1BJTyBJbnRlcnJ1cHQgU3RhdHVzCitsb2dpYyBbMzE6MF0gICAgcmVnXzExOyAvLyBHUElPIEludGVycnVwdCBNYXNrCitsb2dpYyBbMzE6MF0gICAgcmVnXzEyOyAvLyBHUElPIFBvc2VkZ2UgSW50ZXJydXB0IFNlbGVjdAorbG9naWMgWzMxOjBdICAgIHJlZ18xMzsgLy8gR1BJTyBOZWdlZGdlIEludGVycnVwdCBTZWxlY3QKK2xvZ2ljIFszMTowXSAgICByZWdfMTQ7IC8vIFNvZnR3YXJlLVJlZ18xNAorbG9naWMgWzMxOjBdICAgIHJlZ18xNTsgLy8gU29mdHdhcmUtUmVnXzE1Citsb2dpYyBbMzE6MF0gICAgcmVnXzE2OyAvLyBQV04tMCBDb25maWcKK2xvZ2ljIFszMTowXSAgICByZWdfMTc7IC8vIFBXTi0xIENvbmZpZworbG9naWMgWzMxOjBdICAgIHJlZ18xODsgLy8gUFdOLTIgQ29uZmlnCitsb2dpYyBbMzE6MF0gICAgcmVnXzE5OyAvLyBQV04tMyBDb25maWcKK2xvZ2ljIFszMTowXSAgICByZWdfMjA7IC8vIFBXTi00IENvbmZpZworbG9naWMgWzMxOjBdICAgIHJlZ18yMTsgLy8gUFdOLTUgQ29uZmlnCitsb2dpYyBbMzE6MF0gICAgcmVnXzIyOyAvLyBTb2Z0d2FyZS1SZWcxCitsb2dpYyBbMzE6MF0gICAgcmVnXzIzOyAvLyBTb2Z0d2FyZS1SZWcyCitsb2dpYyBbMzE6MF0gICAgcmVnXzI0OyAvLyBTb2Z0d2FyZS1SZWczCitsb2dpYyBbMzE6MF0gICAgcmVnXzI1OyAvLyBTb2Z0d2FyZS1SZWc0Citsb2dpYyBbMzE6MF0gICAgcmVnXzI2OyAvLyBTb2Z0d2FyZS1SZWc1Citsb2dpYyBbMzE6MF0gICAgcmVnXzI3OyAvLyBTb2Z0d2FyZS1SZWc2CisKKworbG9naWMgICAgICAgICAgIGNzX2ludDsKK2xvZ2ljICAgICAgICAgICBncGlvX2ludHI7CisKKworYXNzaWduICAgICAgIHN3X2FkZHIgICAgICAgPSByZWdfYWRkciBbNjoyXTsKK2Fzc2lnbiAgICAgICBzd19yZF9lbiAgICAgID0gcmVnX2NzICYgIXJlZ193cjsKK2Fzc2lnbiAgICAgICBzd193cl9lbiAgICAgID0gcmVnX2NzICYgcmVnX3dyOworYXNzaWduICAgICAgIHdyX2JlICAgICAgICAgPSByZWdfYmU7Cithc3NpZ24gICAgICAgc3dfcmVnX3dkYXRhICA9IHJlZ193ZGF0YTsKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBFZGdlIGRldGVjdGlvbiBmb3IgTG9naWMgQmlzdAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitsb2dpYyB3Yl9yZXE7Citsb2dpYyB3Yl9yZXFfZDsKK2xvZ2ljIHdiX3JlcV9wZWRnZTsKKworYWx3YXlzX2ZmIEAobmVnZWRnZSBoX3Jlc2V0X24gb3IgcG9zZWRnZSBtY2xrKSBiZWdpbgorICAgIGlmICggaF9yZXNldF9uID09IDEnYjAgKSBiZWdpbgorICAgICAgICB3Yl9yZXEgICAgPD0gJzA7CisJd2JfcmVxX2QgIDw9ICcwOworICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgICB3Yl9yZXEgICA8PSByZWdfY3MgJiYgKHJlZ19hY2sgPT0gMCkgOworICAgICAgIHdiX3JlcV9kIDw9IHdiX3JlcTsKKyAgIGVuZAorZW5kCisKKy8vIERldGVjdCBwb3MgZWRnZSBvZiByZXF1ZXN0Cithc3NpZ24gd2JfcmVxX3BlZGdlID0gKHdiX3JlcV9kID09MCkgJiYgKHdiX3JlcT09MSdiMSk7CisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUmVnIDQvNSBhcmUgQklTVCBTZXJpYWwgSS9GIHJlZ2lzdGVyIGFuZCBpdCB0YWtlcyBtaW5pbXVtIDMyCisvLyBjeWNsZSB0byByZXNwb25kIEFDSyBiYWNrCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXJlIHNlcl9hY2MgICAgID0gc3dfd3JfZW5fMzAgfCBzd19yZF9lbl8zMTsKK3dpcmUgbm9uX3Nlcl9hY2MgPSByZWdfY3MgPyAhc2VyX2FjYyA6IDEnYjA7Cit3aXJlIHNlcmlhbF9hY2s7CisKK2Fsd2F5cyBAIChwb3NlZGdlIG1jbGsgb3IgbmVnZWRnZSBoX3Jlc2V0X24pCitiZWdpbiA6IHByZWdfb3V0X1NlcQorICAgaWYgKGhfcmVzZXRfbiA9PSAxJ2IwKSBiZWdpbgorICAgICAgcmVnX3JkYXRhICA8PSAnaDA7CisgICAgICByZWdfYWNrICAgIDw9IDEnYjA7CisgICBlbmQgZWxzZSBpZiAoc2VyX2FjYyAmJiBzZXJpYWxfYWNrKSAgYmVnaW4KKyAgICAgIHJlZ19yZGF0YSA8PSBzZXJhaWxfZG91dCA7CisgICAgICByZWdfYWNrICAgPD0gMSdiMTsKKyAgIGVuZCBlbHNlIGlmIChub25fc2VyX2FjYyAmJiAhcmVnX2FjaykgYmVnaW4KKyAgICAgIHJlZ19yZGF0YSA8PSByZWdfb3V0IDsKKyAgICAgIHJlZ19hY2sgICA8PSAxJ2IxOworICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgIHJlZ19hY2sgICAgICAgIDw9IDEnYjA7CisgICBlbmQKK2VuZAorCisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gcmVnaXN0ZXIgcmVhZCBlbmFibGUgYW5kIHdyaXRlIGVuYWJsZSBkZWNvZGluZyBsb2dpYworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2lyZSAgIHN3X3dyX2VuXzAgPSBzd193cl9lbiAgJiAoc3dfYWRkciA9PSA1J2gwKTsKK3dpcmUgICBzd193cl9lbl8xID0gc3dfd3JfZW4gICYgKHN3X2FkZHIgPT0gNSdoMSk7Cit3aXJlICAgc3dfd3JfZW5fMiA9IHN3X3dyX2VuICAmIChzd19hZGRyID09IDUnaDIpOword2lyZSAgIHN3X3dyX2VuXzMgPSBzd193cl9lbiAgJiAoc3dfYWRkciA9PSA1J2gzKTsKK3dpcmUgICBzd193cl9lbl80ID0gc3dfd3JfZW4gICYgKHN3X2FkZHIgPT0gNSdoNCk7Cit3aXJlICAgc3dfd3JfZW5fNSA9IHN3X3dyX2VuICAmIChzd19hZGRyID09IDUnaDUpOword2lyZSAgIHN3X3dyX2VuXzYgPSBzd193cl9lbiAgJiAoc3dfYWRkciA9PSA1J2g2KTsKK3dpcmUgICBzd193cl9lbl83ID0gc3dfd3JfZW4gICYgKHN3X2FkZHIgPT0gNSdoNyk7Cit3aXJlICAgc3dfd3JfZW5fOCA9IHN3X3dyX2VuICAmIChzd19hZGRyID09IDUnaDgpOword2lyZSAgIHN3X3dyX2VuXzkgPSBzd193cl9lbiAgJiAoc3dfYWRkciA9PSA1J2g5KTsKK3dpcmUgICBzd193cl9lbl8xMCA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNSdoQSk7Cit3aXJlICAgc3dfd3JfZW5fMTEgPSBzd193cl9lbiAmIChzd19hZGRyID09IDUnaEIpOword2lyZSAgIHN3X3dyX2VuXzEyID0gc3dfd3JfZW4gJiAoc3dfYWRkciA9PSA1J2hDKTsKK3dpcmUgICBzd193cl9lbl8xMyA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNSdoRCk7Cit3aXJlICAgc3dfd3JfZW5fMTQgPSBzd193cl9lbiAmIChzd19hZGRyID09IDUnaEUpOword2lyZSAgIHN3X3dyX2VuXzE1ID0gc3dfd3JfZW4gJiAoc3dfYWRkciA9PSA1J2hGKTsKK3dpcmUgICBzd193cl9lbl8xNiA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNSdoMTApOword2lyZSAgIHN3X3dyX2VuXzE3ID0gc3dfd3JfZW4gJiAoc3dfYWRkciA9PSA1J2gxMSk7Cit3aXJlICAgc3dfd3JfZW5fMTggPSBzd193cl9lbiAmIChzd19hZGRyID09IDUnaDEyKTsKK3dpcmUgICBzd193cl9lbl8xOSA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNSdoMTMpOword2lyZSAgIHN3X3dyX2VuXzIwID0gc3dfd3JfZW4gJiAoc3dfYWRkciA9PSA1J2gxNCk7Cit3aXJlICAgc3dfd3JfZW5fMjEgPSBzd193cl9lbiAmIChzd19hZGRyID09IDUnaDE1KTsKKword2lyZSAgIHN3X3dyX2VuXzIyID0gc3dfd3JfZW4gJiAoc3dfYWRkciA9PSA1J2gxNik7Cit3aXJlICAgc3dfd3JfZW5fMjMgPSBzd193cl9lbiAmIChzd19hZGRyID09IDUnaDE3KTsKK3dpcmUgICBzd193cl9lbl8yNCA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNSdoMTgpOword2lyZSAgIHN3X3dyX2VuXzI1ID0gc3dfd3JfZW4gJiAoc3dfYWRkciA9PSA1J2gxOSk7Cit3aXJlICAgc3dfd3JfZW5fMjYgPSBzd193cl9lbiAmIChzd19hZGRyID09IDUnaDFBKTsKK3dpcmUgICBzd193cl9lbl8yNyA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNSdoMUIpOword2lyZSAgIHN3X3dyX2VuXzI4ID0gc3dfd3JfZW4gJiAoc3dfYWRkciA9PSA1J2gxQyk7Cit3aXJlICAgc3dfd3JfZW5fMjkgPSBzd193cl9lbiAmIChzd19hZGRyID09IDUnaDFEKTsKK3dpcmUgICBzd193cl9lbl8zMCA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNSdoMUUpOword2lyZSAgIHN3X3dyX2VuXzMxID0gc3dfd3JfZW4gJiAoc3dfYWRkciA9PSA1J2gxRik7CisKK3dpcmUgICBzd19yZF9lbl8yOCA9IHN3X3JkX2VuICYgKHN3X2FkZHIgPT0gNSdoMUMpOword2lyZSAgIHN3X3JkX2VuXzI5ID0gc3dfcmRfZW4gJiAoc3dfYWRkciA9PSA1J2gxRCk7Cit3aXJlICAgc3dfcmRfZW5fMzAgPSBzd19yZF9lbiAmIChzd19hZGRyID09IDUnaDFFKTsKK3dpcmUgICBzd19yZF9lbl8zMSA9IHN3X3JkX2VuICYgKHN3X2FkZHIgPT0gNSdoMUYpOworCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEluZGl2aWR1YWwgcmVnaXN0ZXIgYXNzaWdubWVudHMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8gQ2hpcCBJRAord2lyZSBbMTU6MF0gbWFudV9pZCAgPSAgMTYnaDg5NDk7IC8vIEFzY2kgdmFsdWUgb2YgWUkKK3dpcmUgWzc6MF0gY2hpcF9pZCAgID0gIDgnaDAyOword2lyZSBbNzowXSBjaGlwX3JldiAgPSAgOCdoMDE7CisKK2Fzc2lnbiByZWdfMCA9IHttYW51X2lkLGNoaXBfaWQsY2hpcF9yZXZ9OworCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICAgcmVnLTEsIHJlc2V0IHZhbHVlID0gMzInaEE1NUFfQTU1QQorLy8gICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitnZW5fMzJiX3JlZyAgIygzMidoQTU1QV9BNTVBKSB1X3JlZ18xCSgKKwkgICAgICAvL0xpc3Qgb2YgSW5wdXRzCisJICAgICAgLnJlc2V0X24gICAgKGhfcmVzZXRfbiAgICAgKSwKKwkgICAgICAuY2xrICAgICAgICAobWNsayAgICAgICAgICApLAorCSAgICAgIC5jcyAgICAgICAgIChzd193cl9lbl8xICAgICksCisJICAgICAgLndlICAgICAgICAgKHdyX2JlICAgICAgICAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAoc3dfcmVnX3dkYXRhICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgKHJlZ18xICAgICAgICAgKQorCSAgICAgICk7CisKK2Fzc2lnbiBmdXNlX21oYXJ0aWQgPSByZWdfMTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTG9naWMgZm9yIGdwaW9fZGF0YV9pbiAKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2xvZ2ljIFszMTowXSBncGlvX2luX2RhdGFfczsKK2xvZ2ljIFszMTowXSBncGlvX2luX2RhdGFfc3M7CisvLyBEb3VibGUgU3luYyB0aGUgZ3BpbyBwaW4gZGF0YSBmb3IgZWRnZSBkZXRlY3Rpb24KK2Fsd2F5cyBAIChwb3NlZGdlIG1jbGsgb3IgbmVnZWRnZSBoX3Jlc2V0X24pCitiZWdpbiAKKyAgaWYgKGhfcmVzZXRfbiA9PSAxJ2IwKSBiZWdpbgorICAgIHJlZ18yICA8PSAnaDAgOworICAgIGdwaW9faW5fZGF0YV9zICA8PSAzMidkMDsKKyAgICBncGlvX2luX2RhdGFfc3MgPD0gMzInZDA7CisgIGVuZAorICBlbHNlIGJlZ2luCisgICAgZ3Bpb19pbl9kYXRhX3MgICA8PSBncGlvX2luX2RhdGE7CisgICAgZ3Bpb19pbl9kYXRhX3NzIDw9IGdwaW9faW5fZGF0YV9zOworICAgIHJlZ18yICAgICAgICAgICA8PSBncGlvX2luX2RhdGFfc3M7CisgIGVuZAorZW5kCisKKworYXNzaWduIGNmZ19ncGlvX2RhdGFfaW4gPSByZWdfMlszMTowXTsgLy8gdG8gYmUgdXNlZCBmb3IgZWRnZSBpbnRlcnJ1cHQgZGV0ZWN0Cithc3NpZ24gZ3Bpb19wcmV2X2luZGF0YSA9IGdwaW9faW5fZGF0YV9zczsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTG9naWMgZm9yIGNmZ19ncGlvX291dF9kYXRhIAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYXNzaWduIGNmZ19ncGlvX291dF9kYXRhID0gcmVnXzNbMzE6MF07IC8vIGRhdGEgdG8gdGhlIEdQSU8gY29udHJvbCBibGsgCisKK2dlbl8zMmJfcmVnICAjKDMyJ2gwKSB1X3JlZ18zCSgKKwkgICAgICAvL0xpc3Qgb2YgSW5wdXRzCisJICAgICAgLnJlc2V0X24gICAgKGhfcmVzZXRfbiAgICAgKSwKKwkgICAgICAuY2xrICAgICAgICAobWNsayAgICAgICAgICApLAorCSAgICAgIC5jcyAgICAgICAgIChzd193cl9lbl8zICAgICksCisJICAgICAgLndlICAgICAgICAgKHdyX2JlICAgICAgICAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAoc3dfcmVnX3dkYXRhICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgKHJlZ18zICAgICAgICAgKQorCSAgICAgICk7CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBMb2dpYyBmb3IgY2ZnX2dwaW9fZGlyX3NlbCAKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2Fzc2lnbiBjZmdfZ3Bpb19kaXJfc2VsID0gcmVnXzRbMzE6MF07IC8vIGRhdGEgdG8gdGhlIEdQSU8gTy9QIHBpbnMgCisKK2dlbl8zMmJfcmVnICAjKDMyJ2gwKSB1X3JlZ180CSgKKwkgICAgICAvL0xpc3Qgb2YgSW5wdXRzCisJICAgICAgLnJlc2V0X24gICAgKGhfcmVzZXRfbiAgICAgKSwKKwkgICAgICAuY2xrICAgICAgICAobWNsayAgICAgICAgICApLAorCSAgICAgIC5jcyAgICAgICAgIChzd193cl9lbl80ICAgICksCisJICAgICAgLndlICAgICAgICAgKHdyX2JlICAgICAgICAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAoc3dfcmVnX3dkYXRhICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgKHJlZ180ICAgICAgICAgKQorCSAgICAgICk7CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBMb2dpYyBmb3IgY2ZnX2dwaW9fb3V0X3R5cGUgCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCithc3NpZ24gY2ZnX2dwaW9fb3V0X3R5cGUgPSByZWdfNVszMTowXTsgLy8gdG8gYmUgdXNlZCBmb3IgcmVhZAorCitnZW5fMzJiX3JlZyAgIygzMidoMCkgdV9yZWdfNQkoCisJICAgICAgLy9MaXN0IG9mIElucHV0cworCSAgICAgIC5yZXNldF9uICAgIChoX3Jlc2V0X24gICAgICksCisJICAgICAgLmNsayAgICAgICAgKG1jbGsgICAgICAgICAgKSwKKwkgICAgICAuY3MgICAgICAgICAoc3dfd3JfZW5fNSAgICApLAorCSAgICAgIC53ZSAgICAgICAgICh3cl9iZSAgICAgICAgICksCQkgCisJICAgICAgLmRhdGFfaW4gICAgKHN3X3JlZ193ZGF0YSAgKSwKKwkgICAgICAKKwkgICAgICAvL0xpc3Qgb2YgT3V0cworCSAgICAgIC5kYXRhX291dCAgIChyZWdfNSAgICAgICAgICkKKwkgICAgICApOworCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICAgcmVnLTYKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2Fzc2lnbiAgaXJxX2xpbmVzICAgICA9IHJlZ182WzE1OjBdOyAKK2Fzc2lnbiAgc29mdF9pcnEgICAgICA9IHJlZ182WzE2XTsgCithc3NpZ24gIHVzZXJfaXJxICAgICAgPSByZWdfNlsxOToxN107IAorCisKK2dlbmVyaWNfcmVnaXN0ZXIgIyg4LDAgICkgdV9yZWc2X2JlMCAoCisJICAgICAgLndlICAgICAgICAgICAgKHs4e3N3X3dyX2VuXzYgJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyX2JlWzBdICAgfX0gICApLAkJIAorCSAgICAgIC5kYXRhX2luICAgICAgIChzd19yZWdfd2RhdGFbNzowXSAgKSwKKwkgICAgICAucmVzZXRfbiAgICAgICAoaF9yZXNldF9uICAgICAgICAgICksCisJICAgICAgLmNsayAgICAgICAgICAgKG1jbGsgICAgICAgICAgICAgICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgICAgKHJlZ182Wzc6MF0gICAgICAgICApCisgICAgICAgICAgKTsKKworZ2VuZXJpY19yZWdpc3RlciAjKDMsMCAgKSB1X3JlZzZfYmUxXzEgKAorCSAgICAgIC53ZSAgICAgICAgICAgICh7M3tzd193cl9lbl82ICYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cl9iZVsxXSAgIH19ICAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAgICAoc3dfcmVnX3dkYXRhWzEwOjhdICksCisJICAgICAgLnJlc2V0X24gICAgICAgKGhfcmVzZXRfbiAgICAgICAgICApLAorCSAgICAgIC5jbGsgICAgICAgICAgIChtY2xrICAgICAgICAgICAgICAgKSwKKwkgICAgICAKKwkgICAgICAvL0xpc3Qgb2YgT3V0cworCSAgICAgIC5kYXRhX291dCAgICAgIChyZWdfNlsxMDo4XSAgICAgICAgKQorICAgICAgICAgICk7CisKKworYXNzaWduIHJlZ182WzE1OjExXSA9IHtncGlvX2ludHIsIGV4dF9pbnRyX2luWzE6MF0sIHVzYl9pbnRyLCBpMmNtX2ludHJ9OworCisKK2dlbmVyaWNfcmVnaXN0ZXIgIyg0LDAgICkgdV9yZWc2X2JlMiAoCisJICAgICAgLndlICAgICAgICAgICAgKHs0e3N3X3dyX2VuXzYgJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyX2JlWzJdICAgfX0gICksCQkgCisJICAgICAgLmRhdGFfaW4gICAgICAgKHN3X3JlZ193ZGF0YVsxOToxNl0pLAorCSAgICAgIC5yZXNldF9uICAgICAgIChoX3Jlc2V0X24gICAgICAgICAgICksCisJICAgICAgLmNsayAgICAgICAgICAgKG1jbGsgICAgICAgICAgICAgICksCisJICAgICAgCisJICAgICAgLy9MaXN0IG9mIE91dHMKKwkgICAgICAuZGF0YV9vdXQgICAgICAocmVnXzZbMTk6MTZdICAgICAgICApCisgICAgICAgICAgKTsKKworYXNzaWduIHJlZ182WzMxOjIwXSA9ICcwOworCisvLyAgUmVnaXN0ZXItNworZ2VuXzMyYl9yZWcgICMoMzInaDApIHVfcmVnXzcJKAorCSAgICAgIC8vTGlzdCBvZiBJbnB1dHMKKwkgICAgICAucmVzZXRfbiAgICAoaF9yZXNldF9uICAgICApLAorCSAgICAgIC5jbGsgICAgICAgIChtY2xrICAgICAgICAgICksCisJICAgICAgLmNzICAgICAgICAgKHN3X3dyX2VuXzcgICApLAorCSAgICAgIC53ZSAgICAgICAgICh3cl9iZSAgICAgICAgICksCQkgCisJICAgICAgLmRhdGFfaW4gICAgKHN3X3JlZ193ZGF0YSAgKSwKKwkgICAgICAKKwkgICAgICAvL0xpc3Qgb2YgT3V0cworCSAgICAgIC5kYXRhX291dCAgIChyZWdfNyAgICAgICAgKQorCSAgICAgICk7CisKK2Fzc2lnbiBjZmdfcHVsc2VfMXVzID0gcmVnXzdbOTowXTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTG9naWMgZm9yIGNmZ19pbnRfc3RhdHVzIAorLy8gQWx3YXlzIHVwZGF0ZSBpbnRfc3RhdHVzLCBldmVuIGlmIG5vIHJlZ2lzdGVyIHdyaXRlIGlzIG9jY3VyaW5nLgorLy8gSW50ZXJydXB0IHBvc3RpbmcgaXMgaGlnaGVyIHByaW9yaXR5IHRoYW4gaW50IGNsZWFyIGJ5IGhvc3QgCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXJlIFszMTowXSAgY2ZnX2dwaW9faW50X3N0YXR1cyA9IHJlZ185WzMxOjBdOyAvLyB0byBiZSB1c2VkIGZvciByZWFkCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEludGVycnVwdCBTdGF0dXMgR2VuZXJhdGlvbgorLy8gTm90ZTogUmVnXzkgLS0+IEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIsIFdyaXR0aW5nICcxJyB3aWxsIGNsZWFyIHRoZQorLy8gICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRpbmcgaW50ZXJydXB0IHN0YXR1cyBiaXQuIFdyaXR0aW5nICcwJyBoYXMgbm8KKy8vICAgICAgICAgICAgICAgICBlZmZlY3QgCisvLyAgICAgICBSZWdfMTAgLS0+IFdyaXR0aW5nIG9uZSB0byB0aGlzIHJlZ2lzdGVyIHdpbGwgc2V0IHRoZSBpbnRlcnJ1cHQgaW4KKy8vICAgICAgICAgICAgICAgICAgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciAocmVnXzkpLCBXcml0dGluZyAnMCcgZG9lcyBub3QgaGFzIGFueQorLy8gICAgICAgICAgICAgICAgICBlZmZlY3QuCisvLy8gQWx3YXlzIHVwZGF0ZSBpbnRfc3RhdHVzLCBldmVuIGlmIG5vIHJlZ2lzdGVyIHdyaXRlIGlzIG9jY3VyaW5nLgorLy8JICAgIEludGVycnVwdCBwb3N0aW5nIGlzIGhpZ2hlciBwcmlvcml0eSB0aGFuIGludCBjbGVhciBieSBob3N0IAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2lyZSBbMzE6MF0gZ3Bpb19pbnRfc3RhdHVzID0gcmVnXzk7CQkJCSAgICAgIAorYWx3YXlzIEAocG9zZWRnZSBtY2xrIG9yIG5lZ2VkZ2UgaF9yZXNldF9uKQorYmVnaW4KKyAgIGlmKH5oX3Jlc2V0X24pCisgICBiZWdpbgorICAgICAgcmVnXzlbMzE6MF0gICA8PSAzMidoMDsKKyAgIGVuZAorICAgZWxzZQorICAgYmVnaW4KKyAgICAgIGlmKHN3X3dyX2VuXzkgJiYgd3JfYmVbMF0pCisgICAgICBiZWdpbgorICAgICAgICAgcmVnXzlbNzowXSA8PSAgKCh+c3dfcmVnX3dkYXRhWzc6MF0gJiBncGlvX2ludF9zdGF0dXNbNzowXSkgfCBncGlvX2ludF9ldmVudFs3OjBdKTsKKyAgICAgIGVuZAorICAgICAgZWxzZSBpZihzd193cl9lbl8xMCAmJiB3cl9iZVswXSkgCisgICAgICBiZWdpbgorICAgICAgICAgcmVnXzlbNzowXSA8PSAoKHN3X3JlZ193ZGF0YVs3OjBdIHwgZ3Bpb19pbnRfc3RhdHVzWzc6MF0pIHwgZ3Bpb19pbnRfZXZlbnRbNzowXSk7CisgICAgICBlbmQKKyAgICAgIGVsc2UKKyAgICAgIGJlZ2luCisgICAgICAgICByZWdfOVs3OjBdIDw9ICAgKGdwaW9faW50X3N0YXR1c1s3OjBdIHwgZ3Bpb19pbnRfZXZlbnRbNzowXSk7CisgICAgICBlbmQKKworICAgICAgaWYoc3dfd3JfZW5fOSAmJiB3cl9iZVsxXSkKKyAgICAgIGJlZ2luCisgICAgICAgICByZWdfOVsxNTo4XSA8PSAgKCh+c3dfcmVnX3dkYXRhWzE1OjhdICYgZ3Bpb19pbnRfc3RhdHVzWzE1OjhdKSB8IGdwaW9faW50X2V2ZW50WzE1OjhdKTsKKyAgICAgIGVuZAorICAgICAgZWxzZSBpZihzd193cl9lbl8xMCAmJiB3cl9iZVsxXSkgCisgICAgICBiZWdpbgorICAgICAgICAgcmVnXzlbMTU6OF0gPD0gKChzd19yZWdfd2RhdGFbMTU6OF0gfCBncGlvX2ludF9zdGF0dXNbMTU6OF0pIHwgZ3Bpb19pbnRfZXZlbnRbMTU6OF0pOworICAgICAgZW5kCisgICAgICBlbHNlCisgICAgICBiZWdpbgorICAgICAgICAgcmVnXzlbMTU6OF0gPD0gICAoZ3Bpb19pbnRfc3RhdHVzWzE1OjhdIHwgZ3Bpb19pbnRfZXZlbnRbMTU6OF0pOworICAgICAgZW5kCisKKyAgICAgIGlmKHN3X3dyX2VuXzkgJiYgd3JfYmVbMl0pCisgICAgICBiZWdpbgorICAgICAgICAgcmVnXzlbMjM6MTZdIDw9ICAoKH5zd19yZWdfd2RhdGFbMjM6MTZdICYgZ3Bpb19pbnRfc3RhdHVzWzIzOjE2XSkgfCBncGlvX2ludF9ldmVudFsyMzoxNl0pOworICAgICAgZW5kCisgICAgICBlbHNlIGlmKHN3X3dyX2VuXzEwICYmIHdyX2JlWzJdKSAKKyAgICAgIGJlZ2luCisgICAgICAgICByZWdfOVsyMzoxNl0gPD0gKChzd19yZWdfd2RhdGFbMjM6MTZdIHwgZ3Bpb19pbnRfc3RhdHVzWzIzOjE2XSkgfCBncGlvX2ludF9ldmVudFsyMzoxNl0pOworICAgICAgZW5kCisgICAgICBlbHNlCisgICAgICBiZWdpbgorICAgICAgICAgcmVnXzlbMjM6MTZdIDw9ICAgKGdwaW9faW50X3N0YXR1c1syMzoxNl0gfCBncGlvX2ludF9ldmVudFsyMzoxNl0pOworICAgICAgZW5kCisKKyAgICAgIGlmKHN3X3dyX2VuXzkgJiYgd3JfYmVbM10pCisgICAgICBiZWdpbgorICAgICAgICAgcmVnXzlbMzE6MjRdIDw9ICAoKH5zd19yZWdfd2RhdGFbMzE6MjRdICYgZ3Bpb19pbnRfc3RhdHVzWzMxOjI0XSkgfCBncGlvX2ludF9ldmVudFszMToyNF0pOworICAgICAgZW5kCisgICAgICBlbHNlIGlmKHN3X3dyX2VuXzEwICYmIHdyX2JlWzNdKSAKKyAgICAgIGJlZ2luCisgICAgICAgICByZWdfOVszMToyNF0gPD0gKChzd19yZWdfd2RhdGFbMzE6MjRdIHwgZ3Bpb19pbnRfc3RhdHVzWzMxOjI0XSkgfCBncGlvX2ludF9ldmVudFszMToyNF0pOworICAgICAgZW5kCisgICAgICBlbHNlCisgICAgICBiZWdpbgorICAgICAgICAgcmVnXzlbMzE6MjRdIDw9ICAgKGdwaW9faW50X3N0YXR1c1szMToyNF0gfCBncGlvX2ludF9ldmVudFszMToyNF0pOworICAgICAgZW5kCisgICBlbmQKK2VuZAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSZXR1cm5zIHNhbWUgdmFsdWUgYXMgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlcgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYXNzaWduIHJlZ18xMCA9IHJlZ185OworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTG9naWMgZm9yIGNmZ19ncGlvX2ludF9tYXNrIDogIEdQSU8gaW50ZXJydXB0IG1hc2sgIAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2lyZSBbMzE6MF0gIGNmZ19ncGlvX2ludF9tYXNrID0gcmVnXzExWzMxOjBdOyAvLyB0byBiZSB1c2VkIGZvciByZWFkCisKK2Fzc2lnbiBncGlvX2ludHIgID0gKCB8IChyZWdfOSAmIHJlZ18xMSkgKTsgLy8gaW50ZXJydXB0IHBpbiB0byB0aGUgUklTQworCisKKy8vICBSZWdpc3Rlci0xMQorZ2VuXzMyYl9yZWcgICMoMzInaDApIHVfcmVnXzExCSgKKwkgICAgICAvL0xpc3Qgb2YgSW5wdXRzCisJICAgICAgLnJlc2V0X24gICAgKGhfcmVzZXRfbiAgICAgKSwKKwkgICAgICAuY2xrICAgICAgICAobWNsayAgICAgICAgICApLAorCSAgICAgIC5jcyAgICAgICAgIChzd193cl9lbl8xMSAgICksCisJICAgICAgLndlICAgICAgICAgKHdyX2JlICAgICAgICAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAoc3dfcmVnX3dkYXRhICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgKHJlZ18xMSAgICAgICAgKQorCSAgICAgICk7CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBMb2dpYyBmb3IgY2ZnX2dwaW9fcG9zZWRnZV9pbnRfc2VsIDogIEVuYWJsZSBwb3NlZGdlIEdQSU8gaW50ZXJydXB0IAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYXNzaWduICBjZmdfZ3Bpb19wb3NlZGdlX2ludF9zZWwgPSByZWdfMTJbMzE6MF07IC8vIHRvIGJlIHVzZWQgZm9yIHJlYWQKK2dlbl8zMmJfcmVnICAjKDMyJ2gwKSB1X3JlZ18xMgkoCisJICAgICAgLy9MaXN0IG9mIElucHV0cworCSAgICAgIC5yZXNldF9uICAgIChoX3Jlc2V0X24gICAgICksCisJICAgICAgLmNsayAgICAgICAgKG1jbGsgICAgICAgICAgKSwKKwkgICAgICAuY3MgICAgICAgICAoc3dfd3JfZW5fMTIgICApLAorCSAgICAgIC53ZSAgICAgICAgICh3cl9iZSAgICAgICAgICksCQkgCisJICAgICAgLmRhdGFfaW4gICAgKHN3X3JlZ193ZGF0YSAgKSwKKwkgICAgICAKKwkgICAgICAvL0xpc3Qgb2YgT3V0cworCSAgICAgIC5kYXRhX291dCAgIChyZWdfMTIgICAgICAgICkKKwkgICAgICApOworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTG9naWMgZm9yIGNmZ19ncGlvX25lZ2VkZ2VfaW50X3NlbCA6ICBFbmFibGUgbmVnZWRnZSBHUElPIGludGVycnVwdCAKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2Fzc2lnbiBjZmdfZ3Bpb19uZWdlZGdlX2ludF9zZWwgPSByZWdfMTNbMzE6MF07IC8vIHRvIGJlIHVzZWQgZm9yIHJlYWQKK2dlbl8zMmJfcmVnICAjKDMyJ2gwKSB1X3JlZ18xMwkoCisJICAgICAgLy9MaXN0IG9mIElucHV0cworCSAgICAgIC5yZXNldF9uICAgIChoX3Jlc2V0X24gICAgICksCisJICAgICAgLmNsayAgICAgICAgKG1jbGsgICAgICAgICAgKSwKKwkgICAgICAuY3MgICAgICAgICAoc3dfd3JfZW5fMTMgICApLAorCSAgICAgIC53ZSAgICAgICAgICh3cl9iZSAgICAgICAgICksCQkgCisJICAgICAgLmRhdGFfaW4gICAgKHN3X3JlZ193ZGF0YSAgKSwKKwkgICAgICAKKwkgICAgICAvL0xpc3Qgb2YgT3V0cworCSAgICAgIC5kYXRhX291dCAgIChyZWdfMTMgICAgICAgICkKKwkgICAgICApOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBMb2dpYyBmb3IgY2ZnX211bHRpX2Z1bmNfc2VsIDpFbmFibGUgR1BJTyB0byBhY3QgYXMgbXVsdGkgZnVuY3Rpb24gcGlucyAKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2Fzc2lnbiAgY2ZnX211bHRpX2Z1bmNfc2VsID0gcmVnXzE0WzMxOjBdOyAvLyB0byBiZSB1c2VkIGZvciByZWFkCisKKworZ2VuXzMyYl9yZWcgICMoMzInaDApIHVfcmVnXzE0CSgKKwkgICAgICAvL0xpc3Qgb2YgSW5wdXRzCisJICAgICAgLnJlc2V0X24gICAgKGhfcmVzZXRfbiAgICAgKSwKKwkgICAgICAuY2xrICAgICAgICAobWNsayAgICAgICAgICApLAorCSAgICAgIC5jcyAgICAgICAgIChzd193cl9lbl8xNCAgICksCisJICAgICAgLndlICAgICAgICAgKHdyX2JlICAgICAgICAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAoc3dfcmVnX3dkYXRhICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgKHJlZ18xNCAgICAgICAgKQorCSAgICAgICk7CisKKy8vIFJlZy0xNQorZ2VuXzMyYl9yZWcgICMoMzInaDApIHVfcmVnXzE1CSgKKwkgICAgICAvL0xpc3Qgb2YgSW5wdXRzCisJICAgICAgLnJlc2V0X24gICAgKGhfcmVzZXRfbiAgICAgKSwKKwkgICAgICAuY2xrICAgICAgICAobWNsayAgICAgICAgICApLAorCSAgICAgIC5jcyAgICAgICAgIChzd193cl9lbl8xNSAgICksCisJICAgICAgLndlICAgICAgICAgKHdyX2JlICAgICAgICAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAoc3dfcmVnX3dkYXRhICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgKHJlZ18xNSAgICAgICAgKQorCSAgICAgICk7CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBMb2dpYyBmb3IgUFdNLTAgQ29uZmlnCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCithc3NpZ24gIGNmZ19wd20wX2xvdyAgPSByZWdfMTZbMTU6MF07ICAvLyBsb3cgcGVyaW9kIG9mIHcvZiAKK2Fzc2lnbiAgY2ZnX3B3bTBfaGlnaCA9IHJlZ18xNlszMToxNl07IC8vIGhpZ2ggcGVyaW9kIG9mIHcvZiAKKworZ2VuXzMyYl9yZWcgICMoMzInaDApIHVfcmVnXzE2CSgKKwkgICAgICAvL0xpc3Qgb2YgSW5wdXRzCisJICAgICAgLnJlc2V0X24gICAgKGhfcmVzZXRfbiAgICAgKSwKKwkgICAgICAuY2xrICAgICAgICAobWNsayAgICAgICAgICApLAorCSAgICAgIC5jcyAgICAgICAgIChzd193cl9lbl8xNiAgICksCisJICAgICAgLndlICAgICAgICAgKHdyX2JlICAgICAgICAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAoc3dfcmVnX3dkYXRhICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgKHJlZ18xNiAgICAgICAgKQorCSAgICAgICk7CisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTG9naWMgZm9yIFBXTS0xIENvbmZpZworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYXNzaWduICBjZmdfcHdtMV9sb3cgID0gcmVnXzE3WzE1OjBdOyAgLy8gbG93IHBlcmlvZCBvZiB3L2YgCithc3NpZ24gIGNmZ19wd20xX2hpZ2ggPSByZWdfMTdbMzE6MTZdOyAvLyBoaWdoIHBlcmlvZCBvZiB3L2YgCitnZW5fMzJiX3JlZyAgIygzMidoMCkgdV9yZWdfMTcJKAorCSAgICAgIC8vTGlzdCBvZiBJbnB1dHMKKwkgICAgICAucmVzZXRfbiAgICAoaF9yZXNldF9uICAgICApLAorCSAgICAgIC5jbGsgICAgICAgIChtY2xrICAgICAgICAgICksCisJICAgICAgLmNzICAgICAgICAgKHN3X3dyX2VuXzE3ICAgKSwKKwkgICAgICAud2UgICAgICAgICAod3JfYmUgICAgICAgICApLAkJIAorCSAgICAgIC5kYXRhX2luICAgIChzd19yZWdfd2RhdGEgICksCisJICAgICAgCisJICAgICAgLy9MaXN0IG9mIE91dHMKKwkgICAgICAuZGF0YV9vdXQgICAocmVnXzE3ICAgICAgICAgKQorCSAgICAgICk7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIExvZ2ljIGZvciBQV00tMiBDb25maWcKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2Fzc2lnbiAgY2ZnX3B3bTJfbG93ICA9IHJlZ18xOFsxNTowXTsgIC8vIGxvdyBwZXJpb2Qgb2Ygdy9mIAorYXNzaWduICBjZmdfcHdtMl9oaWdoID0gcmVnXzE4WzMxOjE2XTsgLy8gaGlnaCBwZXJpb2Qgb2Ygdy9mIAorZ2VuXzMyYl9yZWcgICMoMzInaDApIHVfcmVnXzE4CSgKKwkgICAgICAvL0xpc3Qgb2YgSW5wdXRzCisJICAgICAgLnJlc2V0X24gICAgKGhfcmVzZXRfbiAgICAgKSwKKwkgICAgICAuY2xrICAgICAgICAobWNsayAgICAgICAgICApLAorCSAgICAgIC5jcyAgICAgICAgIChzd193cl9lbl8xOCAgICksCisJICAgICAgLndlICAgICAgICAgKHdyX2JlICAgICAgICAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAoc3dfcmVnX3dkYXRhICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgKHJlZ18xOCAgICAgICAgKQorCSAgICAgICk7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIExvZ2ljIGZvciBQV00tMyBDb25maWcKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2Fzc2lnbiAgY2ZnX3B3bTNfbG93ICA9IHJlZ18xOVsxNTowXTsgIC8vIGxvdyBwZXJpb2Qgb2Ygdy9mIAorYXNzaWduICBjZmdfcHdtM19oaWdoID0gcmVnXzE5WzMxOjE2XTsgLy8gaGlnaCBwZXJpb2Qgb2Ygdy9mIAorZ2VuXzMyYl9yZWcgICMoMzInaDApIHVfcmVnXzE5CSgKKwkgICAgICAvL0xpc3Qgb2YgSW5wdXRzCisJICAgICAgLnJlc2V0X24gICAgKGhfcmVzZXRfbiAgICAgKSwKKwkgICAgICAuY2xrICAgICAgICAobWNsayAgICAgICAgICApLAorCSAgICAgIC5jcyAgICAgICAgIChzd193cl9lbl8xOSAgICksCisJICAgICAgLndlICAgICAgICAgKHdyX2JlICAgICAgICAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAoc3dfcmVnX3dkYXRhICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgKHJlZ18xOSAgICAgICAgKQorCSAgICAgICk7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIExvZ2ljIGZvciBQV00tNCBDb25maWcKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2Fzc2lnbiAgY2ZnX3B3bTRfbG93ICA9IHJlZ18yMFsxNTowXTsgIC8vIGxvdyBwZXJpb2Qgb2Ygdy9mIAorYXNzaWduICBjZmdfcHdtNF9oaWdoID0gcmVnXzIwWzMxOjE2XTsgLy8gaGlnaCBwZXJpb2Qgb2Ygdy9mIAorCitnZW5fMzJiX3JlZyAgIygzMidoMCkgdV9yZWdfMjAJKAorCSAgICAgIC8vTGlzdCBvZiBJbnB1dHMKKwkgICAgICAucmVzZXRfbiAgICAoaF9yZXNldF9uICAgICApLAorCSAgICAgIC5jbGsgICAgICAgIChtY2xrICAgICAgICAgICksCisJICAgICAgLmNzICAgICAgICAgKHN3X3dyX2VuXzIwICAgKSwKKwkgICAgICAud2UgICAgICAgICAod3JfYmUgICAgICAgICApLAkJIAorCSAgICAgIC5kYXRhX2luICAgIChzd19yZWdfd2RhdGEgICksCisJICAgICAgCisJICAgICAgLy9MaXN0IG9mIE91dHMKKwkgICAgICAuZGF0YV9vdXQgICAocmVnXzIwICAgICAgICApCisJICAgICAgKTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTG9naWMgZm9yIFBXTS01IENvbmZpZworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYXNzaWduICBjZmdfcHdtNV9sb3cgID0gcmVnXzIxWzE1OjBdOyAgLy8gbG93IHBlcmlvZCBvZiB3L2YgCithc3NpZ24gIGNmZ19wd201X2hpZ2ggPSByZWdfMjFbMzE6MTZdOyAvLyBoaWdoIHBlcmlvZCBvZiB3L2YgCisKK2dlbl8zMmJfcmVnICAjKDMyJ2gwKSB1X3JlZ18yMQkoCisJICAgICAgLy9MaXN0IG9mIElucHV0cworCSAgICAgIC5yZXNldF9uICAgIChoX3Jlc2V0X24gICAgICksCisJICAgICAgLmNsayAgICAgICAgKG1jbGsgICAgICAgICAgKSwKKwkgICAgICAuY3MgICAgICAgICAoc3dfd3JfZW5fMjEgICApLAorCSAgICAgIC53ZSAgICAgICAgICh3cl9iZSAgICAgICAgICksCQkgCisJICAgICAgLmRhdGFfaW4gICAgKHN3X3JlZ193ZGF0YSAgKSwKKwkgICAgICAKKwkgICAgICAvL0xpc3Qgb2YgT3V0cworCSAgICAgIC5kYXRhX291dCAgIChyZWdfMjEgICAgICAgKQorCSAgICAgICk7CisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gU29mdHdhcmUgUmVnLTEgOiBBU0NJIFJlcHJlc2VudGF0aW9uIG9mIFJJU0MgPSAzMidoODI3M184MzQzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitnZW5fMzJiX3JlZyAgIygzMidoODI3M184MzQzKSB1X3JlZ18yMgkoCisJICAgICAgLy9MaXN0IG9mIElucHV0cworCSAgICAgIC5yZXNldF9uICAgIChoX3Jlc2V0X24gICAgICksCisJICAgICAgLmNsayAgICAgICAgKG1jbGsgICAgICAgICAgKSwKKwkgICAgICAuY3MgICAgICAgICAoc3dfd3JfZW5fMjIgICApLAorCSAgICAgIC53ZSAgICAgICAgICh3cl9iZSAgICAgICAgICksCQkgCisJICAgICAgLmRhdGFfaW4gICAgKHN3X3JlZ193ZGF0YSAgKSwKKwkgICAgICAKKwkgICAgICAvL0xpc3Qgb2YgT3V0cworCSAgICAgIC5kYXRhX291dCAgIChyZWdfMjIgICAgICAgKQorCSAgICAgICk7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFNvZnR3YXJlIFJlZy0yLCBSZWxlYXNlIGRhdGU6IDxEQVk+PE1PTlRIPjxZRUFSPgorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZ2VuXzMyYl9yZWcgICMoMzInaDE0MDJfMjAyMikgdV9yZWdfMjMJKAorCSAgICAgIC8vTGlzdCBvZiBJbnB1dHMKKwkgICAgICAucmVzZXRfbiAgICAoaF9yZXNldF9uICAgICApLAorCSAgICAgIC5jbGsgICAgICAgIChtY2xrICAgICAgICAgICksCisJICAgICAgLmNzICAgICAgICAgKHN3X3dyX2VuXzIzICAgKSwKKwkgICAgICAud2UgICAgICAgICAod3JfYmUgICAgICAgICApLAkJIAorCSAgICAgIC5kYXRhX2luICAgIChzd19yZWdfd2RhdGEgICksCisJICAgICAgCisJICAgICAgLy9MaXN0IG9mIE91dHMKKwkgICAgICAuZGF0YV9vdXQgICAocmVnXzIzICAgICAgICkKKwkgICAgICApOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBTb2Z0d2FyZSBSZWctMzogUG9qZWN0IFJldmlzb24gMy4zID0gMDAwMzQwMAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZ2VuXzMyYl9yZWcgICMoMzInaDAwMDNfNDAwMCkgdV9yZWdfMjQJKAorCSAgICAgIC8vTGlzdCBvZiBJbnB1dHMKKwkgICAgICAucmVzZXRfbiAgICAoaF9yZXNldF9uICAgICApLAorCSAgICAgIC5jbGsgICAgICAgIChtY2xrICAgICAgICAgICksCisJICAgICAgLmNzICAgICAgICAgKHN3X3dyX2VuXzI0ICAgKSwKKwkgICAgICAud2UgICAgICAgICAod3JfYmUgICAgICAgICApLAkJIAorCSAgICAgIC5kYXRhX2luICAgIChzd19yZWdfd2RhdGEgICksCisJICAgICAgCisJICAgICAgLy9MaXN0IG9mIE91dHMKKwkgICAgICAuZGF0YV9vdXQgICAocmVnXzI0ICAgICAgICkKKwkgICAgICApOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBTb2Z0d2FyZSBSZWctNAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZ2VuXzMyYl9yZWcgICMoMzInaDApIHVfcmVnXzI1CSgKKwkgICAgICAvL0xpc3Qgb2YgSW5wdXRzCisJICAgICAgLnJlc2V0X24gICAgKGhfcmVzZXRfbiAgICAgKSwKKwkgICAgICAuY2xrICAgICAgICAobWNsayAgICAgICAgICApLAorCSAgICAgIC5jcyAgICAgICAgIChzd193cl9lbl8yNSAgICksCisJICAgICAgLndlICAgICAgICAgKHdyX2JlICAgICAgICAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAoc3dfcmVnX3dkYXRhICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgKHJlZ18yNSAgICAgICApCisJICAgICAgKTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gU29mdHdhcmUgUmVnLTUKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2dlbl8zMmJfcmVnICAjKDMyJ2gwKSB1X3JlZ18yNgkoCisJICAgICAgLy9MaXN0IG9mIElucHV0cworCSAgICAgIC5yZXNldF9uICAgIChoX3Jlc2V0X24gICAgICksCisJICAgICAgLmNsayAgICAgICAgKG1jbGsgICAgICAgICAgKSwKKwkgICAgICAuY3MgICAgICAgICAoc3dfd3JfZW5fMjYgICApLAorCSAgICAgIC53ZSAgICAgICAgICh3cl9iZSAgICAgICAgICksCQkgCisJICAgICAgLmRhdGFfaW4gICAgKHN3X3JlZ193ZGF0YSAgKSwKKwkgICAgICAKKwkgICAgICAvL0xpc3Qgb2YgT3V0cworCSAgICAgIC5kYXRhX291dCAgIChyZWdfMjYgICAgICAgKQorCSAgICAgICk7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFNvZnR3YXJlIFJlZy02CisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitnZW5fMzJiX3JlZyAgIygzMidoMCkgdV9yZWdfMjcJKAorCSAgICAgIC8vTGlzdCBvZiBJbnB1dHMKKwkgICAgICAucmVzZXRfbiAgICAoaF9yZXNldF9uICAgICApLAorCSAgICAgIC5jbGsgICAgICAgIChtY2xrICAgICAgICAgICksCisJICAgICAgLmNzICAgICAgICAgKHN3X3dyX2VuXzI3ICAgKSwKKwkgICAgICAud2UgICAgICAgICAod3JfYmUgICAgICAgICApLAkJIAorCSAgICAgIC5kYXRhX2luICAgIChzd19yZWdfd2RhdGEgICksCisJICAgICAgCisJICAgICAgLy9MaXN0IG9mIE91dHMKKwkgICAgICAuZGF0YV9vdXQgICAocmVnXzI3ICAgICAgICkKKwkgICAgICApOworCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICAgcmVnLTI4CisvLyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitsb2dpYyBbMzE6MF0gY2ZnX2Jpc3RfY3RybF8xOworCitnZW5fMzJiX3JlZyAgIygzMidoMCkgdV9yZWdfMjgJKAorCSAgICAgIC8vTGlzdCBvZiBJbnB1dHMKKwkgICAgICAucmVzZXRfbiAgICAoaF9yZXNldF9uICAgICApLAorCSAgICAgIC5jbGsgICAgICAgIChtY2xrICAgICAgICAgICksCisJICAgICAgLmNzICAgICAgICAgKHN3X3dyX2VuXzI4ICAgKSwKKwkgICAgICAud2UgICAgICAgICAod3JfYmUgICAgICAgICApLAkJIAorCSAgICAgIC5kYXRhX2luICAgIChzd19yZWdfd2RhdGEgICksCisJICAgICAgCisJICAgICAgLy9MaXN0IG9mIE91dHMKKwkgICAgICAuZGF0YV9vdXQgICAoY2ZnX2Jpc3RfY3RybF8xWzMxOjBdICApCisJICAgICAgKTsKKworCisKK2Fzc2lnbiBiaXN0X2VuICAgICAgICAgICAgID0gY2ZnX2Jpc3RfY3RybF8xWzBdOworYXNzaWduIGJpc3RfcnVuICAgICAgICAgICAgPSBjZmdfYmlzdF9jdHJsXzFbMV07Cithc3NpZ24gYmlzdF9sb2FkICAgICAgICAgICA9IGNmZ19iaXN0X2N0cmxfMVsyXTsKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgIHJlZy0yOQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbG9naWMgWzMxOjBdIGNmZ19iaXN0X3N0YXR1c18xOworCithc3NpZ24gY2ZnX2Jpc3Rfc3RhdHVzXzEgPSB7ICBiaXN0X2Vycm9yX2NudDMsIDEnYjAsIGJpc3RfY29ycmVjdFszXSwgYmlzdF9lcnJvclszXSwgYmlzdF9kb25lLAorCSAgICAgICAgICAgICAgICAgICAgICBiaXN0X2Vycm9yX2NudDIsIDEnYjAsIGJpc3RfY29ycmVjdFsyXSwgYmlzdF9lcnJvclsyXSwgYmlzdF9kb25lLAorCSAgICAgICAgICAgICAgICAgICAgICBiaXN0X2Vycm9yX2NudDEsIDEnYjAsIGJpc3RfY29ycmVjdFsxXSwgYmlzdF9lcnJvclsxXSwgYmlzdF9kb25lLAorCSAgICAgICAgICAgICAgICAgICAgICBiaXN0X2Vycm9yX2NudDAsIDEnYjAsIGJpc3RfY29ycmVjdFswXSwgYmlzdF9lcnJvclswXSwgYmlzdF9kb25lCisJCQkgICB9OworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgIHJlZy0zMCA9PiBXcml0ZSB0byBTZXJhaWwgSS9GCisvLyAgIHJlZy0zMSA9PiBSRUFEICBmcm9tIFNlcmFpbCBJL0YKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2xvZ2ljICAgICAgICBiaXN0X3NkaV9pbnQ7Citsb2dpYyAgICAgICAgYmlzdF9zaGlmdF9pbnQ7Citsb2dpYyAgICAgICAgYmlzdF9zZG9faW50OworbG9naWMgWzMxOjBdIHNlcmFpbF9kb3V0OworCithc3NpZ24gYmlzdF9zZG9faW50ID0gYmlzdF9zZG87Cithc3NpZ24gIGJpc3Rfc2hpZnQgPSBiaXN0X3NoaWZ0X2ludDsKK2Fzc2lnbiAgYmlzdF9zZGkgICA9IGJpc3Rfc2RpX2ludCA7CisKK3Nlcl9pbmZfMzJiIHVfc2VyX2ludGYKKyAgICAgICAoCisKKyAgICAvLyBNYXN0ZXIgUG9ydAorICAgICAgIC5yc3RfbiAgICAgICAoaF9yZXNldF9uKSwgIC8vIFJlZ3VsYXIgUmVzZXQgc2lnbmFsCisgICAgICAgLmNsayAgICAgICAgIChtY2xrKSwgIC8vIFN5c3RlbSBjbG9jaworICAgICAgIC5yZWdfd3IgICAgICAoc3dfd3JfZW5fMzAgJiB3Yl9yZXFfcGVkZ2UpLCAgLy8gV3JpdGUgUmVxdWVzdAorICAgICAgIC5yZWdfcmQgICAgICAoc3dfcmRfZW5fMzEgJiB3Yl9yZXFfcGVkZ2UpLCAgLy8gUmVhZCBSZXF1ZXN0CisgICAgICAgLnJlZ193ZGF0YSAgIChzd19yZWdfd2RhdGEpICwgIC8vIGRhdGEgb3V0cHV0CisgICAgICAgLnJlZ19yZGF0YSAgIChzZXJhaWxfZG91dCksICAvLyBkYXRhIGlucHV0CisgICAgICAgLnJlZ19hY2sgICAgIChzZXJpYWxfYWNrKSwgIC8vIGFja25vd2xlZ2VtZW50CisKKyAgICAvLyBTbGF2ZSBQb3J0CisgICAgICAgLnNkaSAgICAgICAgIChiaXN0X3NkaV9pbnQpLCAgICAvLyBTZXJpYWwgU0RJCisgICAgICAgLnNoaWZ0ICAgICAgIChiaXN0X3NoaWZ0X2ludCksICAvLyBTaGlmdCBTaWduYWwKKyAgICAgICAuc2RvICAgICAgICAgKGJpc3Rfc2RvX2ludCkgLy8gU2VyaWFsIFNETworCisgICAgKTsKKworCisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUmVnaXN0ZXIgUmVhZCBQYXRoIE11bHRpcGxleGVyIGluc3RhbnRpYXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYWx3YXlzX2NvbWIKK2JlZ2luIAorICByZWdfb3V0IFszMTowXSA9IDMyJ2gwOworCisgIGNhc2UgKHN3X2FkZHIgWzQ6MF0pCisgICAgNSdiMDAwMDAgOiByZWdfb3V0IFszMTowXSA9IHJlZ18wIFszMTowXTsgICAgIAorICAgIDUnYjAwMDAxIDogcmVnX291dCBbMzE6MF0gPSByZWdfMSBbMzE6MF07ICAgIAorICAgIDUnYjAwMDEwIDogcmVnX291dCBbMzE6MF0gPSByZWdfMiBbMzE6MF07ICAgICAKKyAgICA1J2IwMDAxMSA6IHJlZ19vdXQgWzMxOjBdID0gcmVnXzMgWzMxOjBdOyAgICAKKyAgICA1J2IwMDEwMCA6IHJlZ19vdXQgWzMxOjBdID0gcmVnXzQgWzMxOjBdOyAgICAKKyAgICA1J2IwMDEwMSA6IHJlZ19vdXQgWzMxOjBdID0gcmVnXzUgWzMxOjBdOyAgICAKKyAgICA1J2IwMDExMCA6IHJlZ19vdXQgWzMxOjBdID0gcmVnXzYgWzMxOjBdOyAgICAKKyAgICA1J2IwMDExMSA6IHJlZ19vdXQgWzMxOjBdID0gcmVnXzcgWzMxOjBdOyAgICAKKyAgICA1J2IwMTAwMCA6IHJlZ19vdXQgWzMxOjBdID0gcmVnXzggWzMxOjBdOyAgICAKKyAgICA1J2IwMTAwMSA6IHJlZ19vdXQgWzMxOjBdID0gcmVnXzkgWzMxOjBdOyAgICAKKyAgICA1J2IwMTAxMCA6IHJlZ19vdXQgWzMxOjBdID0gcmVnXzEwIFszMTowXTsgICAKKyAgICA1J2IwMTAxMSA6IHJlZ19vdXQgWzMxOjBdID0gcmVnXzExIFszMTowXTsgICAKKyAgICA1J2IwMTEwMCA6IHJlZ19vdXQgWzMxOjBdID0gcmVnXzEyIFszMTowXTsgICAKKyAgICA1J2IwMTEwMSA6IHJlZ19vdXQgWzMxOjBdID0gcmVnXzEzIFszMTowXTsKKyAgICA1J2IwMTExMCA6IHJlZ19vdXQgWzMxOjBdID0gcmVnXzE0IFszMTowXTsKKyAgICA1J2IwMTExMSA6IHJlZ19vdXQgWzMxOjBdID0gcmVnXzE1IFszMTowXTsgCisgICAgNSdiMTAwMDAgOiByZWdfb3V0IFszMTowXSA9IHJlZ18xNiBbMzE6MF07CisgICAgNSdiMTAwMDEgOiByZWdfb3V0IFszMTowXSA9IHJlZ18xNyBbMzE6MF07CisgICAgNSdiMTAwMTAgOiByZWdfb3V0IFszMTowXSA9IHJlZ18xOCBbMzE6MF07CisgICAgNSdiMTAwMTEgOiByZWdfb3V0IFszMTowXSA9IHJlZ18xOSBbMzE6MF07CisgICAgNSdiMTAxMDAgOiByZWdfb3V0IFszMTowXSA9IHJlZ18yMCBbMzE6MF07CisgICAgNSdiMTAxMDEgOiByZWdfb3V0IFszMTowXSA9IHJlZ18yMSBbMzE6MF07CisgICAgNSdiMTAxMTAgOiByZWdfb3V0IFszMTowXSA9IHJlZ18yMiBbMzE6MF07CisgICAgNSdiMTAxMTEgOiByZWdfb3V0IFszMTowXSA9IHJlZ18yMyBbMzE6MF07CisgICAgNSdiMTEwMDAgOiByZWdfb3V0IFszMTowXSA9IHJlZ18yNCBbMzE6MF07CisgICAgNSdiMTEwMDEgOiByZWdfb3V0IFszMTowXSA9IHJlZ18yNSBbMzE6MF07CisgICAgNSdiMTEwMTAgOiByZWdfb3V0IFszMTowXSA9IHJlZ18yNiBbMzE6MF07CisgICAgNSdiMTEwMTEgOiByZWdfb3V0IFszMTowXSA9IHJlZ18yNyBbMzE6MF07CisgICAgNSdiMTExMDAgOiByZWdfb3V0IFszMTowXSA9IGNmZ19iaXN0X2N0cmxfMSBbMzE6MF07CisgICAgNSdiMTExMDEgOiByZWdfb3V0IFszMTowXSA9IGNmZ19iaXN0X3N0YXR1c18xIFszMTowXTsKKyAgICA1J2IxMTExMCA6IHJlZ19vdXQgWzMxOjBdID0gc2VyYWlsX2RvdXQgWzMxOjBdOyAvLyBQcmV2aW91cyBTaGlmdCBEYXRhCisgICAgNSdiMTExMTEgOiByZWdfb3V0IFszMTowXSA9IHNlcmFpbF9kb3V0IFszMTowXTsgLy8gTGF0ZXN0IFNoaWZ0IERhdGEKKyAgICBkZWZhdWx0ICA6IHJlZ19vdXQgWzMxOjBdID0gMzInaDA7CisgIGVuZGNhc2UKK2VuZAorCisKK2VuZG1vZHVsZSAgICAgICAgICAgICAgICAgICAgICAgCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9waW5tdXgvc3JjL3B3bS5zdiBiL3Zlcmlsb2cvcnRsL3Bpbm11eC9zcmMvcHdtLnN2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhMzA3NzIKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC9waW5tdXgvc3JjL3B3bS5zdgpAQCAtMCwwICsxLDQ0IEBACisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUFdNIHdhdmVmb3JtIHBlcmlvZDogIDEwMDAvKChjZmdfcHdtX2hpZ2grMSkgKyAoY2ZnX3B3bV9sb3crMSkpCisvLyBGb3IgMSBTZWNvbmQgd2l0aCBEdXR5IGN5Y2xlIDUwID0gICAxMDAwLygoNDk5KzEpICsgKDQ5OSsxKSkKKy8vIEZvciAxIFNlY29uZCB3aXRoIDFtcyBPbiBhbmQgOTk5bXMgT2ZmID0gIDEwMDAvKCgwKzEpICsgKDk5OCsxKSkKKy8vIFRpbWluZyBSdW4ncyB3aXRoIDEgTWlsaXNlY29uZCBwdWxzZQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZSBwd20oCisJb3V0cHV0ICBsb2dpYyAgICAgICAgIHdhdmVmb3JtLAorCisJaW5wdXQgIGxvZ2ljICAgICAgICAgaF9yZXNldF9uLAorCWlucHV0ICBsb2dpYyAgICAgICAgIG1jbGssCisJaW5wdXQgIGxvZ2ljICAgICAgICAgcHVsc2UxbV9tY2xrLAorCWlucHV0ICBsb2dpYyAgICAgICAgIGNmZ19wd21fZW5iLAorCWlucHV0ICBsb2dpYyBbMTU6MF0gIGNmZ19wd21faGlnaCwKKwlpbnB1dCAgbG9naWMgWzE1OjBdICBjZmdfcHdtX2xvdworKTsKKworbG9naWMgWzE1OjBdICBwd21fY250ICA7IC8vIFBXTSBvbi9vZmYgY291bnRlcgorCisKK2Fsd2F5cyBAKHBvc2VkZ2UgbWNsayBvciBuZWdlZGdlIGhfcmVzZXRfbikKK2JlZ2luIAorICAgaWYgKCB+aF9yZXNldF9uICkKKyAgIGJlZ2luCisgICAgICBwd21fY250ICA8PSAxNidoMDsKKyAgICAgIHdhdmVmb3JtIDw9IDEnYjA7CisgICBlbmQKKyAgIGVsc2UgaWYgKCBwdWxzZTFtX21jbGsgICYmIGNmZ19wd21fZW5iKQorICAgYmVnaW4gCisgICAgICBpZiAoIHB3bV9jbnQgPT0gMTYnaDAgJiYgd2F2ZWZvcm0gID09IDEnYjApIGJlZ2luCisgICAgICAgICBwd21fY250ICAgICAgIDw9IGNmZ19wd21faGlnaDsKKyAgICAgICAgIHdhdmVmb3JtICAgICAgPD0gfndhdmVmb3JtOworICAgICAgZW5kIGVsc2UgaWYgKCBwd21fY250ID09IDE2J2gwICYmIHdhdmVmb3JtICA9PSAxJ2IxKSBiZWdpbgorICAgICAgICAgcHdtX2NudCAgICAgICA8PSBjZmdfcHdtX2xvdzsKKyAgICAgICAgIHdhdmVmb3JtICAgICAgPD0gfndhdmVmb3JtOworICAgICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgCSAgIHB3bV9jbnQgPD0gcHdtX2NudCAtIDE7CisgICAgICBlbmQKKyAgIGVuZAorZW5kIAorCitlbmRtb2R1bGUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3Nhcl9hZGMvQUNNUC5zdiBiL3Zlcmlsb2cvcnRsL3Nhcl9hZGMvQUNNUC5zdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjU4ZjQyCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvc2FyX2FkYy9BQ01QLnN2CkBAIC0wLDAgKzEsMTAzIEBACittb2R1bGUgQUNNUCgKK2BpZmRlZiBVU0VfUE9XRVJfUElOUworICAgIGlucHV0IHdpcmUgdmNjZDIsCisgICAgaW5wdXQgd2lyZSB2c3NkMiwgCitgZW5kaWYgCisgICAgaW5wdXQgICB3aXJlIGNsaywKKyAgICBpbnB1dCAgIHdpcmUgSU5QLAorICAgIGlucHV0ICAgd2lyZSBJTk4sCisgICAgaW5wdXQgICB3aXJlIFZERCwKKyAgICBpbnB1dCAgIHdpcmUgVlNTLAorICAgIG91dHB1dCAgd2lyZSBRICAgIAorKTsKKworYGlmZGVmIEFDTVBfRlVOQ1RJT05BTAorCisgICAgYXNzaWduIFEgPSBJTlAgPiBJTk4gOworYGVsc2UgCisKKyAgICB3aXJlICAgIGNsa2I7CisgICAgd2lyZSAgICBuZXQxLCAKKyAgICAgICAgICAgIG5ldDIsCisgICAgICAgICAgICBuZXQzLAorICAgICAgICAgICAgbmV0NCwKKyAgICAgICAgICAgIG5ldDUsCisgICAgICAgICAgICBuZXQ2LAorICAgICAgICAgICAgbmV0NzsKKyAgICAKKyAgICBza3kxMzBfZmRfc2NfaGRfX2ludl8xIHgxNSAoCisgICAgYGlmZGVmIFVTRV9QT1dFUl9QSU5TCisgICAgICAgIC5WUFdSKFZQV1IpLAorICAgICAgICAuVkdORChWR05EKSwgCisgICAgICAgIC5WUEIoVlBXUiksCisgICAgICAgIC5WTkIoVkdORCksCisgICAgYGVuZGlmIAorICAgICAgICAuQShjbGspLCAuWShjbGtiKSk7CisgICAgc2t5MTMwX2ZkX3NjX2hkX19hMjIxb2lfMSB4NyAoCisgICAgYGlmZGVmIFVTRV9QT1dFUl9QSU5TCisgICAgICAgIC5WUFdSKFZQV1IpLAorICAgICAgICAuVkdORChWR05EKSwgCisgICAgICAgIC5WUEIoVlBXUiksCisgICAgICAgIC5WTkIoVkdORCksCisgICAgYGVuZGlmIAorICAgICAgICAuQTEoSU5QKSwgLkEyKElOUCksIC5CMShjbGtiKSwgLkIyKFZERCksIC5DMShuZXQyKSwgLlkobmV0MSkpOyAgICAgCisgICAgc2t5MTMwX2ZkX3NjX2hkX19hMjIxb2lfMSB4OCAoCisgICAgYGlmZGVmIFVTRV9QT1dFUl9QSU5TCisgICAgICAgIC5WUFdSKFZQV1IpLAorICAgICAgICAuVkdORChWR05EKSwgCisgICAgICAgIC5WUEIoVlBXUiksCisgICAgICAgIC5WTkIoVkdORCksCisgICAgYGVuZGlmIAorICAgICAgICAuQTEoSU5OKSwgLkEyKElOTiksIC5CMShjbGtiKSwgLkIyKFZERCksIC5DMShuZXQxKSwgLlkobmV0MikpOyAgCisgICAgc2t5MTMwX2ZkX3NjX2hkX19pbnZfMSB4MiAoCisgICAgYGlmZGVmIFVTRV9QT1dFUl9QSU5TCisgICAgICAgIC5WUFdSKFZQV1IpLAorICAgICAgICAuVkdORChWR05EKSwgCisgICAgICAgIC5WUEIoVlBXUiksCisgICAgICAgIC5WTkIoVkdORCksCisgICAgYGVuZGlmIAorICAgICAgICAuQShuZXQzKSwgLlkobmV0NikpOworICAgIHNreTEzMF9mZF9zY19oZF9faW52XzEgeDMgKAorICAgIGBpZmRlZiBVU0VfUE9XRVJfUElOUworICAgICAgICAuVlBXUihWUFdSKSwKKyAgICAgICAgLlZHTkQoVkdORCksIAorICAgICAgICAuVlBCKFZQV1IpLAorICAgICAgICAuVk5CKFZHTkQpLAorICAgIGBlbmRpZiAKKyAgICAgICAgLkEobmV0NCksIC5ZKG5ldDUpKTsKKyAgICBza3kxMzBfZmRfc2NfaGRfX28yMjFhaV8xIHg2ICgKKyAgICBgaWZkZWYgVVNFX1BPV0VSX1BJTlMKKyAgICAgICAgLlZQV1IoVlBXUiksCisgICAgICAgIC5WR05EKFZHTkQpLCAKKyAgICAgICAgLlZQQihWUFdSKSwKKyAgICAgICAgLlZOQihWR05EKSwKKyAgICBgZW5kaWYgCisgICAgICAgIC5BMShJTlApLCAuQTIoSU5QKSwgLkIxKGNsayksIC5CMihWU1MpLCAuQzEobmV0NCksIC5ZKG5ldDMpKTsKKyAgICBza3kxMzBfZmRfc2NfaGRfX28yMjFhaV8xIHg5ICgKKyAgICBgaWZkZWYgVVNFX1BPV0VSX1BJTlMKKyAgICAgICAgLlZQV1IoVlBXUiksCisgICAgICAgIC5WR05EKFZHTkQpLCAKKyAgICAgICAgLlZQQihWUFdSKSwKKyAgICAgICAgLlZOQihWR05EKSwKKyAgICBgZW5kaWYgCisgICAgICAgIC5BMShJTk4pLCAuQTIoSU5OKSwgLkIxKGNsayksIC5CMihWU1MpLCAuQzEobmV0MyksIC5ZKG5ldDQpKTsKKyAgICBza3kxMzBfZmRfc2NfaGRfX25vcjNfMSB4MTAgKAorICAgIGBpZmRlZiBVU0VfUE9XRVJfUElOUworICAgICAgICAuVlBXUihWUFdSKSwKKyAgICAgICAgLlZHTkQoVkdORCksIAorICAgICAgICAuVlBCKFZQV1IpLAorICAgICAgICAuVk5CKFZHTkQpLAorICAgIGBlbmRpZiAKKyAgICAgICAgLkEobmV0NSksIC5CKG5ldDEpLCAuQyhuZXQ3KSwgLlkoUSkpOworICAgIHNreTEzMF9mZF9zY19oZF9fbm9yM18xIHgxMSAoCisgICAgYGlmZGVmIFVTRV9QT1dFUl9QSU5TCisgICAgICAgIC5WUFdSKFZQV1IpLAorICAgICAgICAuVkdORChWR05EKSwKKyAgICAgICAgLlZQQihWUFdSKSwKKyAgICAgICAgLlZOQihWR05EKSwgCisgICAgYGVuZGlmIAorICAgICAgICAuQShRKSwgLkIobmV0NiksIC5DKG5ldDIpLCAuWShuZXQ3KSk7CisgICAgCitgZW5kaWYKKworZW5kbW9kdWxlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc2FyX2FkYy9BQ01QX0hWTC52IGIvdmVyaWxvZy9ydGwvc2FyX2FkYy9BQ01QX0hWTC52Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0M2NkNmUKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC9zYXJfYWRjL0FDTVBfSFZMLnYKQEAgLTAsMCArMSwxMTIgQEAKKy8qCisgICAgQW4gYW5hbG9nIGNvbXBhcmF0b3IgdXNpbmcgSFZMIGNlbGxzCisqLworCittb2R1bGUgQUNNUF9IVkwoCitgaWZkZWYgVVNFX1BPV0VSX1BJTlMKKyAgICBpbnB1dCB3aXJlIHZjY2QyLAkKKyAgICBpbnB1dCB3aXJlIHZzc2QyLAkKK2BlbmRpZgorICAgIGlucHV0ICAgd2lyZSBjbGssCisgICAgaW5wdXQgICB3aXJlIElOUCwKKyAgICBpbnB1dCAgIHdpcmUgSU5OLAorICAgIG91dHB1dCAgd2lyZSBRICAgIAorKTsKKyAgICB3aXJlIGNsa2I7CisgICAgd2lyZSBRMWIsIFExOworICAgIHdpcmUgUTJiLCBRMjsKKyAgICB3aXJlIFFiOworCisgICAgc2t5MTMwX2ZkX3NjX2h2bF9faW52XzEgeDAgKAorICAgICAgICAuWShjbGtiKSwKKyAgICAgICAgLkEoY2xrKQorICAgICk7ICAgIAorCisgICAgc2t5MTMwX2ZkX3NjX2h2bF9fbm9yM18xIHg1KAorICAgICAgICAuWShRKSwKKyAgICAgICAgLkEoUTFiKSwKKyAgICAgICAgLkIoUTJiKSwKKyAgICAgICAgLkMoUWIpCisgICAgKTsKKworICAgIHNreTEzMF9mZF9zY19odmxfX25vcjNfMSB4NigKKyAgICAgICAgLlkoUWIpLAorICAgICAgICAuQShRMSksCisgICAgICAgIC5CKFEyKSwKKyAgICAgICAgLkMoUSkKKyAgICApOworCisgICAgbGF0Y2hfbmFuZDMgeDEgKAorICAgICAgICAuQ0xLKGNsayksIAorICAgICAgICAuVlAoSU5QKSwgCisgICAgICAgIC5WTihJTk4pLAorICAgICAgICAuUShRMSksCisgICAgICAgIC5RYihRMWIpIAorICAgICk7CisKKyAgICBsYXRjaF9ub3IzIHgyICgKKyAgICAgICAgLkNMSyhjbGtiKSwgCisgICAgICAgIC5WUChJTlApLCAKKyAgICAgICAgLlZOKElOTiksCisgICAgICAgIC5RKFEyKSwKKyAgICAgICAgLlFiKFEyYikgCisgICAgKTsKKworZW5kbW9kdWxlCisKK21vZHVsZSBsYXRjaF9ub3IzICgKKyAgICBpbnB1dCAgIHdpcmUgQ0xLLCAKKyAgICBpbnB1dCAgIHdpcmUgVlAsIAorICAgIGlucHV0ICAgd2lyZSBWTiwKKyAgICBvdXRwdXQgIHdpcmUgUSwKKyAgICBvdXRwdXQgIHdpcmUgUWIgCispOworCisgICAgc2t5MTMwX2ZkX3NjX2h2bF9fbm9yM18xIHgxKAorICAgICAgICAuWShRYiksCisgICAgICAgIC5BKENMSyksCisgICAgICAgIC5CKFZQKSwKKyAgICAgICAgLkMoUSkKKyAgICApOworICAgIHNreTEzMF9mZF9zY19odmxfX25vcjNfMSB4MigKKyAgICAgICAgLlkoUSksCisgICAgICAgIC5BKENMSyksCisgICAgICAgIC5CKFZOKSwKKyAgICAgICAgLkMoUWIpCisgICAgKTsKKyAgICAKK2VuZG1vZHVsZQorCittb2R1bGUgbGF0Y2hfbmFuZDMgKAorICAgIGlucHV0ICAgd2lyZSBDTEssIAorICAgIGlucHV0ICAgd2lyZSBWUCwgCisgICAgaW5wdXQgICB3aXJlIFZOLAorICAgIG91dHB1dCAgd2lyZSBRLAorICAgIG91dHB1dCAgd2lyZSBRYiAKKyk7CisgICAgd2lyZSBRMCwgUTBiOworCisgICAgc2t5MTMwX2ZkX3NjX2h2bF9fbmFuZDNfMSB4MSgKKyAgICAgICAgLlkoUTBiKSwKKyAgICAgICAgLkEoQ0xLKSwKKyAgICAgICAgLkIoVlApLAorICAgICAgICAuQyhRMCkKKyAgICApOworICAgIHNreTEzMF9mZF9zY19odmxfX25hbmQzXzEgeDIoCisgICAgICAgIC5ZKFEwKSwKKyAgICAgICAgLkEoQ0xLKSwKKyAgICAgICAgLkIoVk4pLAorICAgICAgICAuQyhRMGIpCisgICAgKTsKKworICAgIHNreTEzMF9mZF9zY19odmxfX2ludl80IHgzICgKKyAgICAgICAgLlkoUWIpLAorICAgICAgICAuQShRMCkKKyAgICApOyAKKworICAgIHNreTEzMF9mZF9zY19odmxfX2ludl80IHg0ICgKKyAgICAgICAgLlkoUSksCisgICAgICAgIC5BKFEwYikKKyAgICApOyAKKyAgICAKK2VuZG1vZHVsZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3Nhcl9hZGMvREFDXzhCSVQudiBiL3Zlcmlsb2cvcnRsL3Nhcl9hZGMvREFDXzhCSVQudgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDMwZTE4Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvc2FyX2FkYy9EQUNfOEJJVC52CkBAIC0wLDAgKzEsMjQgQEAKK21vZHVsZSBEQUNfOEJJVCAoCitgaWZkZWYgVVNFX1BPV0VSX1BJTlMKKyAgICBpbnB1dCB3aXJlIHZkZCwJLy8gVXNlciBhcmVhIDEgMS44ViBzdXBwbHkKKyAgICBpbnB1dCB3aXJlIGduZCwJLy8gVXNlciBhcmVhIDEgZGlnaXRhbCBncm91bmQKK2BlbmRpZgorICAgIGlucHV0IHdpcmUgZDAsCisgICAgaW5wdXQgd2lyZSBkMSwKKyAgICBpbnB1dCB3aXJlIGQyLAorICAgIGlucHV0IHdpcmUgZDMsCisgICAgaW5wdXQgd2lyZSBkNCwKKyAgICBpbnB1dCB3aXJlIGQ1LAorICAgIGlucHV0IHdpcmUgZDYsCisgICAgaW5wdXQgd2lyZSBkNywKKyAgICAKKyAgICBpbnB1dCB3aXJlIGlucDEsCisgICAgaW5wdXQgd2lyZSBpbnAyLCAKKworICAgIG91dHB1dCB3aXJlIG91dF92CispOworCisvLyBEdW1teSBiZWhhdmlyb2wgbW9kZWwgdG8gdmVyaWZ5IHRoZSBEQUMgY29ubmVjdGlvbiB3aXRoIHRoZSB1c2VyX3Byb2plY3Rfd3JhcHBlcgorYXNzaWduIG91dF92ID0gZDAgfCBkMSB8IGQyIHwgZDMgfCBkNCB8IGQ1IHwgZDYgfCBkNyA7CisKK2VuZG1vZHVsZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3Nhcl9hZGMvU0FSLnN2IGIvdmVyaWxvZy9ydGwvc2FyX2FkYy9TQVIuc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTkzMTQ4MwotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL3Nhcl9hZGMvU0FSLnN2CkBAIC0wLDAgKzEsNjUgQEAKKy8vIGZpbGU6IFNBUi52CisvLyBBIHBhcmFtZXRyaXplZCBTdWNjZXNzaXZlIEFwcHJveGltYXRpb24gUmVnaXN0ZXIgKFNBUikKKy8vIFRoZSBtb2R1bGUgaXMgc28gY29tcGFjdDsgaXQgaXMgb25seSAxMTAgY2VsbHMgZm9yIAorLy8gOC1iaXQgU0FSIHVzaW5nIFNLWTEzMCBIRCBsaWJyYXJ5CisvLworLy8gYXV0aG9yOiBNb2hhbWVkIFNoYWxhbiAobXNoYWxhbkBhdWNlZ3lwdC5lZHUpCisKK2B0aW1lc2NhbGUgMW5zLzFucworCittb2R1bGUgU0FSICAjKHBhcmFtZXRlciBTSVpFID0gOCkgKCAKKyAgICBpbnB1dCAgIHdpcmUgICAgICAgICAgICBjbGssICAgIC8vIFRoZSBjbG9jaworICAgIGlucHV0ICAgd2lyZSAgICAgICAgICAgIHJlc2V0X24sIC8vIEFjdGl2ZSBsb3cgcmVzZXQKKyAgICBpbnB1dCAgIHdpcmUgICAgICAgICAgICBzdGFydCwgIC8vIENvbnZlcnNpb24gc3RhcnQgCisgICAgaW5wdXQgICB3aXJlICAgICAgICAgICAgY21wLCAgICAvLyBBbmFsb2cgY29tcGFyYXRvciBvdXRwdXQKKyAgICBvdXRwdXQgIHdpcmUgW1NJWkUtMTowXSBvdXQsICAgIC8vIFRoZSBvdXRwdXQgc2FtcGxlCisgICAgb3V0cHV0ICB3aXJlIFtTSVpFLTE6MF0gb3V0biwgICAvLyBJbnZlcnRlZCBvdXRwdXQgZm9yIGFjdGl2ZSBsb3cgREFDCisgICAgb3V0cHV0ICB3aXJlICAgICAgICAgICAgZG9uZSwgICAvLyBDb252ZXJzaW9uIGlzIGRvbmUKKyAgICBvdXRwdXQgIHdpcmUgICAgICAgICAgICBjbGtuICAgIC8vIEludmVydGVkIGNsb2NrIHRvIGJlIHVzZWQgYnkgdGhlIGNsb2NrZWQgYW5hbG9nIGNvbXBhcmF0b3IKKyk7CisJCisJcmVnIFtTSVpFLTE6MF0gcmVzdWx0OworCXJlZyBbU0laRS0xOjBdIHNoaWZ0OworCQorICAgIC8vIEZTTSB0byBoYW5kbGUgdGhlIFNBUiBvcGVyYXRpb24KKyAgICByZWcgWzE6MF0gc3RhdGUsIG5zdGF0ZTsKKwlsb2NhbHBhcmFtIElETEU9MCwgQ09OVj0xLCBET05FPTI7CisKKwlhbHdheXMgQCoKKyAgICAgICAgY2FzZSAoc3RhdGUpCisgICAgICAgICAgICBJRExFOiAgICAgICBpZihzdGFydCkgbnN0YXRlID0gQ09OVjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIG5zdGF0ZSA9IElETEU7CisgICAgICAgICAgICBDT05WOiAgICAgICBpZihzaGlmdCA9PSAxJ2IxKSBuc3RhdGUgPSBET05FOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgbnN0YXRlID0gQ09OVjsKKyAgICAgICAgICAgIERPTkU6ICAgICAgIG5zdGF0ZSA9IElETEU7CisgICAgICAgICAgICBkZWZhdWx0OiAgICBuc3RhdGUgPSBJRExFOworICAgICAgICBlbmRjYXNlCisJICAKKwlhbHdheXMgQChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJlc2V0X24pCisgICAgICAgIGlmKCFyZXNldF9uKQorICAgICAgICAgICAgc3RhdGUgPD0gSURMRTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3RhdGUgPD0gbnN0YXRlOworCisgICAgLy8gU2hpZnQgUmVnaXN0ZXIKKyAgICBhbHdheXMgQChwb3NlZGdlIGNsaykKKyAgICAgICAgaWYoc3RhdGUgPT0gSURMRSkgCisgICAgICAgICAgICBzaGlmdCA8PSAxJ2IxIDw8IChTSVpFLTEpOworICAgICAgICBlbHNlIGlmKHN0YXRlID09IENPTlYpCisgICAgICAgICAgICBzaGlmdDw9IHNoaWZ0ID4+IDE7IAorCisgICAgLy8gVGhlIFNBUgorICAgIHdpcmUgW1NJWkUtMTowXSBjdXJyZW50ID0gKGNtcCA9PSAxJ2IwKSA/IH5zaGlmdCA6IHtTSVpFezEnYjF9fSA7CisgICAgd2lyZSBbU0laRS0xOjBdIG5leHQgPSBzaGlmdCA+PiAxOworICAgIGFsd2F5cyBAKHBvc2VkZ2UgY2xrKQorICAgICAgICBpZihzdGF0ZSA9PSBJRExFKSAKKyAgICAgICAgICAgIHJlc3VsdCA8PSAxJ2IxIDw8IChTSVpFLTEpOworICAgICAgICBlbHNlIGlmKHN0YXRlID09IENPTlYpCisgICAgICAgICAgICByZXN1bHQgPD0gKHJlc3VsdCB8IG5leHQpICYgY3VycmVudDsgCisJICAgCisJICBhc3NpZ24gb3V0ID0gcmVzdWx0OworICAgICAgYXNzaWduIG91dG4gPSB+cmVzdWx0OworICAgICAgYXNzaWduIGNsa24gPSB+Y2xrOworCSAgYXNzaWduIGRvbmUgPSAoc3RhdGU9PURPTkUpOworCQorZW5kbW9kdWxlCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zYXJfYWRjL2FkY19yZWcuc3YgYi92ZXJpbG9nL3J0bC9zYXJfYWRjL2FkY19yZWcuc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRkY2YwZgotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL3Nhcl9hZGMvYWRjX3JlZy5zdgpAQCAtMCwwICsxLDI2MiBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxICwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgIAorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IENyZWF0ZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBBREMgcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgWUlGaXZlIGNvcmVzIHByb2plY3QgICAgICAgICAgICAgICAvLy8vCisvLy8vICBodHRwczovL2dpdGh1Yi5jb20vZGluZXNoYW5uYXl5YS9yaXNjZHVpbm8uZ2l0ICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgVGhpcyBibG9jayBnZW5lcmF0ZSBhbGwgdGhlIEFEQyBjb25maWcgYW5kIHN0YXR1cyAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUbyBEbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIG5vdGhpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBBdXRob3Iocyk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgLSBEaW5lc2ggQW5uYXl5YSwgZGluZXNoYUBvcGVuY29yZXMub3JnICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBSZXZpc2lvbiA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIDAuMSAtIDI2IFNlcHQgMjAyMSAgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIEluaXRpYWwgdmVyc2lvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIENvcHlyaWdodCAoQykgMjAwMCBBdXRob3JzIGFuZCBPUEVOQ09SRVMuT1JHICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgICAvLy8vCisvLy8vIHJlc3RyaWN0aW9uIHByb3ZpZGVkIHRoYXQgdGhpcyBjb3B5cmlnaHQgc3RhdGVtZW50IGlzIG5vdCAgICAvLy8vCisvLy8vIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSBhbmQgdGhhdCBhbnkgZGVyaXZhdGl2ZSB3b3JrIGNvbnRhaW5zICAvLy8vCisvLy8vIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLiAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgICAvLy8vCisvLy8vIGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAvLy8vCisvLy8vIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAvLy8vCisvLy8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgICAvLy8vCisvLy8vIGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSAgICAgICAvLy8vCisvLy8vIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgICAvLy8vCisvLy8vIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgICAgICAvLy8vCisvLy8vIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSAvLy8vCisvLy8vIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgICAvLy8vCisvLy8vIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBzb3VyY2U7IGlmIG5vdCwgZG93bmxvYWQgaXQgICAvLy8vCisvLy8vIGZyb20gaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2xncGwuc2h0bWwgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK21vZHVsZSBhZGNfcmVnICgKKworICAgICAgICBpbnB1dCBsb2dpYyAgICAgICAgICAgICBtY2xrLAorICAgICAgICBpbnB1dCBsb2dpYyAgICAgICAgICAgICByZXNldF9uLAorCisgICAgICAgIC8vIFJlZyBCdXMgSW50ZXJmYWNlIFNpZ25hbAorICAgICAgICBpbnB1dCBsb2dpYyAgICAgICAgICAgICByZWdfY3MsCisgICAgICAgIGlucHV0IGxvZ2ljICAgICAgICAgICAgIHJlZ193ciwKKyAgICAgICAgaW5wdXQgbG9naWMgWzc6MF0gICAgICAgcmVnX2FkZHIsCisgICAgICAgIGlucHV0IGxvZ2ljIFszMTowXSAgICAgIHJlZ193ZGF0YSwKKyAgICAgICAgaW5wdXQgbG9naWMgWzM6MF0gICAgICAgcmVnX2JlLAorCisgICAgICAgLy8gT3V0cHV0cworICAgICAgICBvdXRwdXQgbG9naWMgWzMxOjBdICAgICByZWdfcmRhdGEsCisgICAgICAgIG91dHB1dCBsb2dpYyAgICAgICAgICAgIHJlZ19hY2ssCisKKwlpbnB1dCAgbG9naWMgICAgICAgICAgICBwdWxzZTFtX21jbGssCisgICAgICAgLy8gQURDIEkvRgorICAgICAgIG91dHB1dCBsb2dpYyAgICAgICAgICAgIHN0YXJ0X2NvbnYsCisgICAgICAgb3V0cHV0IGxvZ2ljIFsyOjBdICAgICAgYWRjX2NoX25vLCAgICAgICAgICAgCisgICAgICAgaW5wdXQgIGxvZ2ljICAgICAgICAgICAgY29udl9kb25lLAorICAgICAgIGlucHV0ICBsb2dpYyBbNzowXSAgICAgIGFkY19yZXN1bHQKKworCisgICAgICAgICk7CisKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBJbnRlcm5hbCBXaXJlIERlY2xhcmF0aW9ucworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitsb2dpYyAgICAgICAgICAgc3dfcmRfZW47Citsb2dpYyAgICAgICAgICAgc3dfd3JfZW47Citsb2dpYyAgWzM6MF0gICAgc3dfYWRkciA7IC8vIGFkZHJlc3NpbmcgMTYgcmVnaXN0ZXJzCitsb2dpYyAgWzM6MF0gICAgd3JfYmUgICA7Citsb2dpYyAgWzMxOjBdICAgc3dfcmVnX3dkYXRhOworCitsb2dpYyAgICAgICAgICAgcmVnX2NzX2wgICAgOworbG9naWMgICAgICAgICAgIHJlZ19jc18ybCAgICA7CisKKworbG9naWMgWzMxOjBdICAgIHJlZ18wOyAgLy8gQURDIENvbmZpZworbG9naWMgWzMxOjBdICAgIHJlZ18xOyAgLy8gQURDIENoLTEgUmVzdWx0Citsb2dpYyBbMzE6MF0gICAgcmVnXzI7ICAvLyBBREMgQ2gtMiBSZXN1bHQgCitsb2dpYyBbMzE6MF0gICAgcmVnXzM7ICAvLyBBREMgQ2gtMyBSZXN1bHQKK2xvZ2ljIFszMTowXSAgICByZWdfNDsgIC8vIEFEQyBDaC00IFJlc3VsdAorbG9naWMgWzMxOjBdICAgIHJlZ181OyAgLy8gQURDIENoLTUgUmVzdWx0Citsb2dpYyBbMzE6MF0gICAgcmVnXzY7ICAvLyBBREMgQ2gtNiBSZXN1bHQKK2xvZ2ljIFszMTowXSAgICByZWdfNzsgIC8vIFNvZnR3YXJlLVJlZ183Citsb2dpYyBbMzE6MF0gICAgcmVnX291dDsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTWFpbiBjb2RlIHN0YXJ0cyBoZXJlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFRvIGF2b2lkIGludGVyZmFjZSB0aW1pbmcsIGFsbCB0aGUgY29udGVudCBhcmUgcmVnaXN0ZXJlZAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYWx3YXlzIEAgKHBvc2VkZ2UgbWNsayBvciBuZWdlZGdlIHJlc2V0X24pCitiZWdpbiAKKyAgIGlmIChyZXNldF9uID09IDEnYjApCisgICBiZWdpbgorICAgIHN3X2FkZHIgICAgICAgPD0gJzA7CisgICAgc3dfcmRfZW4gICAgICA8PSAnMDsKKyAgICBzd193cl9lbiAgICAgIDw9ICcwOworICAgIHN3X3JlZ193ZGF0YSAgPD0gJzA7CisgICAgd3JfYmUgICAgICAgICA8PSAnMDsKKyAgICByZWdfY3NfbCAgICAgIDw9ICcwOworICAgIHJlZ19jc18ybCAgICAgPD0gJzA7CisgIGVuZCBlbHNlIGJlZ2luCisgICAgc3dfYWRkciAgICAgICA8PSByZWdfYWRkciBbNToyXTsKKyAgICBzd19yZF9lbiAgICAgIDw9IHJlZ19jcyAmICFyZWdfd3I7CisgICAgc3dfd3JfZW4gICAgICA8PSByZWdfY3MgJiByZWdfd3I7CisgICAgc3dfcmVnX3dkYXRhICA8PSByZWdfd2RhdGE7CisgICAgd3JfYmUgICAgICAgICA8PSByZWdfYmU7CisgICAgcmVnX2NzX2wgICAgICA8PSByZWdfY3M7CisgICAgcmVnX2NzXzJsICAgICA8PSByZWdfY3NfbDsKKyAgZW5kCitlbmQKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSZWFkIHBhdGggbXV4CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Fsd2F5cyBAIChwb3NlZGdlIG1jbGsgb3IgbmVnZWRnZSByZXNldF9uKQorYmVnaW4gOiBwcmVnX291dF9TZXEKKyAgIGlmIChyZXNldF9uID09IDEnYjApIGJlZ2luCisgICAgICByZWdfcmRhdGEgWzMxOjBdICA8PSAzMidoMDAwMF8wMDAwOworICAgICAgcmVnX2FjayAgICAgICAgICAgPD0gMSdiMDsKKyAgIGVuZCBlbHNlIGlmIChzd19yZF9lbiAmJiAhcmVnX2FjayAmJiAhcmVnX2NzXzJsKSBiZWdpbgorICAgICAgcmVnX3JkYXRhIFszMTowXSAgPD0gcmVnX291dCBbMzE6MF07CisgICAgICByZWdfYWNrICAgICAgICAgICA8PSAxJ2IxOworICAgZW5kIGVsc2UgaWYgKHN3X3dyX2VuICYmICFyZWdfYWNrICYmICFyZWdfY3NfMmwpIGJlZ2luIAorICAgICAgcmVnX2FjayAgICAgICAgICAgPD0gMSdiMTsKKyAgIGVuZCBlbHNlIGJlZ2luCisgICAgICByZWdfYWNrICAgICAgICA8PSAxJ2IwOworICAgZW5kCitlbmQKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyByZWdpc3RlciByZWFkIGVuYWJsZSBhbmQgd3JpdGUgZW5hYmxlIGRlY29kaW5nIGxvZ2ljCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXJlICAgc3dfd3JfZW5fMCA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNCdoMCk7Cit3aXJlICAgc3dfcmRfZW5fMCA9IHN3X3JkX2VuICYgKHN3X2FkZHIgPT0gNCdoMCk7Cit3aXJlICAgc3dfd3JfZW5fMSA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNCdoMSk7Cit3aXJlICAgc3dfcmRfZW5fMSA9IHN3X3JkX2VuICYgKHN3X2FkZHIgPT0gNCdoMSk7Cit3aXJlICAgc3dfd3JfZW5fMiA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNCdoMik7Cit3aXJlICAgc3dfcmRfZW5fMiA9IHN3X3JkX2VuICYgKHN3X2FkZHIgPT0gNCdoMik7Cit3aXJlICAgc3dfd3JfZW5fMyA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNCdoMyk7Cit3aXJlICAgc3dfcmRfZW5fMyA9IHN3X3JkX2VuICYgKHN3X2FkZHIgPT0gNCdoMyk7Cit3aXJlICAgc3dfd3JfZW5fNCA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNCdoNCk7Cit3aXJlICAgc3dfcmRfZW5fNCA9IHN3X3JkX2VuICYgKHN3X2FkZHIgPT0gNCdoNCk7Cit3aXJlICAgc3dfd3JfZW5fNSA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNCdoNSk7Cit3aXJlICAgc3dfcmRfZW5fNSA9IHN3X3JkX2VuICYgKHN3X2FkZHIgPT0gNCdoNSk7Cit3aXJlICAgc3dfd3JfZW5fNiA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNCdoNik7Cit3aXJlICAgc3dfcmRfZW5fNiA9IHN3X3JkX2VuICYgKHN3X2FkZHIgPT0gNCdoNik7Cit3aXJlICAgc3dfd3JfZW5fNyA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNCdoNyk7Cit3aXJlICAgc3dfcmRfZW5fNyA9IHN3X3JkX2VuICYgKHN3X2FkZHIgPT0gNCdoNyk7CisKK2Fsd2F5cyBAKCAqKQorYmVnaW4gOiBwcmVnX3NlbF9Db20KKworICByZWdfb3V0IFszMTowXSA9IDMyJ2QwOworCisgIGNhc2UgKHN3X2FkZHIgWzM6MF0pCisgICAgNCdiMDAwMCA6IHJlZ19vdXQgWzMxOjBdID0gcmVnXzAgWzMxOjBdOyAgICAgCisgICAgNCdiMDAwMSA6IHJlZ19vdXQgWzMxOjBdID0gezI0J2gwLHJlZ18xIFs3OjBdfTsgICAgCisgICAgNCdiMDAxMCA6IHJlZ19vdXQgWzMxOjBdID0gezI0J2gwLHJlZ18yIFs3OjBdfTsgICAgIAorICAgIDQnYjAwMTEgOiByZWdfb3V0IFszMTowXSA9IHsyNCdoMCxyZWdfMyBbNzowXX07ICAgIAorICAgIDQnYjAxMDAgOiByZWdfb3V0IFszMTowXSA9IHsyNCdoMCxyZWdfNCBbNzowXX07ICAgIAorICAgIDQnYjAxMDEgOiByZWdfb3V0IFszMTowXSA9IHsyNCdoMCxyZWdfNSBbNzowXX07ICAgIAorICAgIDQnYjAxMTAgOiByZWdfb3V0IFszMTowXSA9IHsyNCdoMCxyZWdfNiBbNzowXX07ICAgIAorICAgIGRlZmF1bHQgOiByZWdfb3V0IFszMTowXSA9ICdoMDsKKyAgZW5kY2FzZQorZW5kCisKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBJbmRpdmlkdWFsIHJlZ2lzdGVyIGFzc2lnbm1lbnRzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitsb2dpYyBbNTowXSBjZmdfYWRjX2VuYiA9IHJlZ18wWzU6MF07CisKK2dlbl8zMmJfcmVnICAjKDMyJ2gwKSB1X3JlZ18wCSgKKwkgICAgICAvL0xpc3Qgb2YgSW5wdXRzCisJICAgICAgLnJlc2V0X24gICAgKHJlc2V0X24gICAgICksCisJICAgICAgLmNsayAgICAgICAgKG1jbGsgICAgICAgICAgKSwKKwkgICAgICAuY3MgICAgICAgICAoc3dfd3JfZW5fMCAgICApLAorCSAgICAgIC53ZSAgICAgICAgICh3cl9iZSAgICAgICAgICksCQkgCisJICAgICAgLmRhdGFfaW4gICAgKHN3X3JlZ193ZGF0YSAgKSwKKwkgICAgICAKKwkgICAgICAvL0xpc3Qgb2YgT3V0cworCSAgICAgIC5kYXRhX291dCAgIChyZWdfMCAgICAgICAgKQorCSAgICAgICk7CisKKworYWx3YXlzIEAocG9zZWRnZSBtY2xrIG9yIG5lZ2VkZ2UgcmVzZXRfbikKK2JlZ2luCisgICBpZih+cmVzZXRfbikgYmVnaW4KKyAgICAgIHJlZ18xWzc6MF0gICA8PSA4J2gwOworICAgICAgcmVnXzJbNzowXSAgIDw9IDgnaDA7CisgICAgICByZWdfM1s3OjBdICAgPD0gOCdoMDsKKyAgICAgIHJlZ180Wzc6MF0gICA8PSA4J2gwOworICAgICAgcmVnXzVbNzowXSAgIDw9IDgnaDA7CisgICAgICByZWdfNls3OjBdICAgPD0gOCdoMDsKKyAgICAgIHN0YXJ0X2NvbnYgICA8PSAnMDsKKyAgICAgIGFkY19jaF9ubyAgICA8PSAnMDsKKyAgIGVuZCBlbHNlIGJlZ2luCisgICAgICBpZihjZmdfYWRjX2VuYlswXSAmJiBwdWxzZTFtX21jbGspIGJlZ2luCisJIGlmKHN0YXJ0X2NvbnYgJiYgY29udl9kb25lKSBiZWdpbgorICAgICAgICAgICAgc3RhcnRfY29udiA8PSAwOworCSAgICBjYXNlKGFkY19jaF9ubykKKwkgICAgMydiMDAwOiByZWdfMVs3OjBdIDw9IGFkY19yZXN1bHQ7CisJICAgIDMnYjAwMTogcmVnXzJbNzowXSA8PSBhZGNfcmVzdWx0OworCSAgICAzJ2IwMTA6IHJlZ18zWzc6MF0gPD0gYWRjX3Jlc3VsdDsKKwkgICAgMydiMDExOiByZWdfNFs3OjBdIDw9IGFkY19yZXN1bHQ7CisJICAgIDMnYjEwMDogcmVnXzVbNzowXSA8PSBhZGNfcmVzdWx0OworCSAgICAzJ2IxMDE6IHJlZ182Wzc6MF0gPD0gYWRjX3Jlc3VsdDsKKwkgICAgZW5kY2FzZQorICAgICAgICAgZW5kCisgICAgICBlbmQgZWxzZSBiZWdpbgorCSBzdGFydF9jb252IDw9IDE7CisJIGlmKGFkY19jaF9ubyA9PSA1KSBiZWdpbgorCSAgICBhZGNfY2hfbm8gPD0gMDsKKyAgICAgICAgIGVuZCBlbHNlIGJlZ2luCisJICAgIGFkY19jaF9ubyAgICA8PSBhZGNfY2hfbm8rMTsKKwkgZW5kCisgICAgICBlbmQKKyAgIGVuZAorZW5kCisKKworCisKK2VuZG1vZHVsZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc2FyX2FkYy9zYXJfYWRjLnN2IGIvdmVyaWxvZy9ydGwvc2FyX2FkYy9zYXJfYWRjLnN2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1YjdkYmQKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC9zYXJfYWRjL3Nhcl9hZGMuc3YKQEAgLTAsMCArMSwxNzAgQEAKK21vZHVsZSBzYXJfYWRjKAorYGlmZGVmIFVTRV9QT1dFUl9QSU5TCisgICAgaW5wdXQgbG9naWMgICAgICAgICAgICAgdmNjZDEgICAgICAgICAsLy8gVXNlciBhcmVhIDEgMS44ViBzdXBwbHkKKyAgICBpbnB1dCBsb2dpYyAgICAgICAgICAgICB2c3NkMSAgICAgICAgICwvLyBVc2VyIGFyZWEgMSBkaWdpdGFsIGdyb3VuZAorICAgIGlucHV0IGxvZ2ljICAgICAgICAgICAgIHZjY2QyICAgICAgICAgLC8vIFVzZXIgYXJlYSAyIDEuOFYgc3VwcGx5IChhbmFsb2cpCisgICAgaW5wdXQgbG9naWMgICAgICAgICAgICAgdnNzZDIgICAgICAgICAsLy8gVXNlciBhcmVhIDIgZ3JvdW5kICAgICAgKGFuYWxvZykKK2BlbmRpZgorCisgICAgCisgICAgaW5wdXQgIGxvZ2ljICAgICAgICAgICAgY2xrICAgICAgICAgICAsLy8gVGhlIGNsb2NrIChkaWdpdGFsKQorICAgIGlucHV0ICBsb2dpYyAgICAgICAgICAgIHJlc2V0X24gICAgICAgLC8vIEFjdGl2ZSBsb3cgcmVzZXQgKGRpZ2l0YWwpCisKKyAgICAvLyBSZWcgQnVzIEludGVyZmFjZSBTaWduYWwKKyAgICBpbnB1dCBsb2dpYyAgICAgICAgICAgICByZWdfY3MgICAgICAgICwKKyAgICBpbnB1dCBsb2dpYyAgICAgICAgICAgICByZWdfd3IgICAgICAgICwKKyAgICBpbnB1dCBsb2dpYyBbNzowXSAgICAgICByZWdfYWRkciAgICAgICwKKyAgICBpbnB1dCBsb2dpYyBbMzE6MF0gICAgICByZWdfd2RhdGEgICAgICwKKyAgICBpbnB1dCBsb2dpYyBbMzowXSAgICAgICByZWdfYmUgICAgICAgICwKKworICAgIC8vIE91dHB1dHMKKyAgICBvdXRwdXQgbG9naWMgWzMxOjBdICAgICByZWdfcmRhdGEgICAgICwKKyAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICByZWdfYWNrICAgICAgICwKKworICAgIGlucHV0ICBsb2dpYyAgICAgICAgICAgIHB1bHNlMW1fbWNsayAgLAorICAgIG91dHB1dCAgbG9naWMgWzc6MF0gICAgIHNhcjJkYWMgICAgICAgLC8vIFNBUiBPL1AgdG93YXJkcyBEQUMKKworICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgIGFuYWxvZ19kYWNfb3V0LCAvLyBEQUMgYW5hbG9nIG8vcCBmb3IgY29tcGFyZQorCisgICAgLy8gQUNNUCAoSEQpIFBvcnRzIAorICAgIGlucHV0ICAgbG9naWMgICAgWzU6MF0gIGFuYWxvZ19kaW4gICAgICAgIC8vIChBbmFsb2cpCisKKyk7CisKKyAgICBsb2dpYyAgICAgICAgY2xrbjsKKyAgICBsb2dpYyBbNTowXSAgc2FyX2NtcDsgLy8gU0FSIGNvbXBhcmUgc2lnbmFsCisgICAgbG9naWMgICAgICAgIHNhcl9jbXBfaW50OworICAgIGxvZ2ljIFsyOjBdICBhZGNfY2hfbm87CisgICAgbG9naWMgICAgICAgIHN0YXJ0X2NvbnYgICAgOy8vIENvbnZlcnNpb24gc3RhcnQgKGRpZ2l0YWwpCisgICAgbG9naWMgICAgICAgIGNvbnZfZG9uZSAgICAgOy8vIENvbnZlcnNpb24gaXMgZG9uZSAoZGlnaXRhbCkKKyAgICBsb2dpYyBbNzowXSAgYWRjX3Jlc3VsdCAgICA7Ly8gU0FSIG8vcCAoZGlnaXRhbCkKKyAgCithbHdheXNfY29tYiAKK2JlZ2luCisgICBzYXJfY21wX2ludCA9IDA7CisgICBjYXNlKGFkY19jaF9ubykKKyAgIDMnYjAwMCA6ICBzYXJfY21wX2ludCA9IHNhcl9jbXBbMF07CisgICAzJ2IwMDEgOiAgc2FyX2NtcF9pbnQgPSBzYXJfY21wWzFdOworICAgMydiMDEwIDogIHNhcl9jbXBfaW50ID0gc2FyX2NtcFsyXTsKKyAgIDMnYjAxMSA6ICBzYXJfY21wX2ludCA9IHNhcl9jbXBbM107CisgICAzJ2IxMDAgOiAgc2FyX2NtcF9pbnQgPSBzYXJfY21wWzRdOworICAgMydiMTAxIDogIHNhcl9jbXBfaW50ID0gc2FyX2NtcFs1XTsKKyAgIGVuZGNhc2UKKworCitlbmQKKworYWRjX3JlZyB1X2FkY19yZWcgKAorICAgICAgICAubWNsayAgICAgICAgKG1jbGspLAorICAgICAgICAucmVzZXRfbiAgICAgKHJlc2V0X24pLAorCisgICAgICAgIC8vIFJlZyBCdXMgSW50ZXJmYWNlIFNpZ25hbAorICAgICAgICAucmVnX2NzICAgICAgKHJlZ19jcyksCisgICAgICAgIC5yZWdfd3IgICAgICAocmVnX3dyKSwKKyAgICAgICAgLnJlZ19hZGRyICAgIChyZWdfYWRkciksCisgICAgICAgIC5yZWdfd2RhdGEgICAocmVnX3dkYXRhKSwKKyAgICAgICAgLnJlZ19iZSAgICAgIChyZWdfYmUpLAorCisgICAgICAgLy8gT3V0cHV0cworICAgICAgICAucmVnX3JkYXRhICAgKHJlZ19yZGF0YSksCisgICAgICAgIC5yZWdfYWNrICAgICAocmVnX2FjayksCisKKwkucHVsc2UxbV9tY2xrICAocHVsc2UxbV9tY2xrKSwKKyAgICAgICAvLyBBREMgSS9GCisgICAgICAgLnN0YXJ0X2NvbnYgICAoc3RhcnRfY29udiksCisgICAgICAgLmFkY19jaF9ubyAgICAoYWRjX2NoX25vKSwgICAgICAgICAgIAorICAgICAgIC5jb252X2RvbmUgICAgKGNvbnZfZG9uZSksCisgICAgICAgLmFkY19yZXN1bHQgICAoYWRjX3Jlc3VsdCkKKworICAgICAgICk7CisKKworICAgIEFDTVAgQ09NUF8wICgKKyAgICBgaWZkZWYgVVNFX1BPV0VSX1BJTlMKKyAgICAgICAgLnZjY2QyICAgKHZjY2QyICAgICAgICAgICApLAorICAgICAgICAudnNzZDIgICAodnNzZDIgICAgICAgICAgICksCisgICAgICAgIC5WREQgICAgICh2Y2NkMiAgICAgICAgICAgKSwKKyAgICAgICAgLlZTUyAgICAgKHZzc2QyICAgICAgICAgICApLAorICAgIGBlbmRpZgorICAgICAgICAuY2xrICAgICAoY2xrICAgICAgICAgICAgICksCisgICAgICAgIC5JTlAgICAgIChhbmFsb2dfZGluWzBdICAgKSwKKyAgICAgICAgLklOTiAgICAgKGFuYWxvZ19kYWNfb3V0ICApLAorICAgICAgICAuUSAgICAgICAoc2FyX2NtcFswXSAgICAgICkgICAgCisgICAgKTsKKworICAgIEFDTVAgQ09NUF8xICgKKyAgICBgaWZkZWYgVVNFX1BPV0VSX1BJTlMKKyAgICAgICAgLnZjY2QyICAgKHZjY2QyICAgICAgICAgICApLAorICAgICAgICAudnNzZDIgICAodnNzZDIgICAgICAgICAgICksCisgICAgICAgIC5WREQgICAgICh2Y2NkMiAgICAgICAgICAgKSwKKyAgICAgICAgLlZTUyAgICAgKHZzc2QyICAgICAgICAgICApLAorICAgIGBlbmRpZgorICAgICAgICAuY2xrICAgICAoY2xrICAgICAgICAgICAgICksCisgICAgICAgIC5JTlAgICAgIChhbmFsb2dfZGluWzFdICAgKSwKKyAgICAgICAgLklOTiAgICAgKGFuYWxvZ19kYWNfb3V0ICApLAorICAgICAgICAuUSAgICAgICAoc2FyX2NtcFsxXSAgICAgICkgICAgCisgICAgKTsKKworICAgIEFDTVAgQ09NUF8yICgKKyAgICBgaWZkZWYgVVNFX1BPV0VSX1BJTlMKKyAgICAgICAgLnZjY2QyICAgKHZjY2QyICAgICAgICAgICApLAorICAgICAgICAudnNzZDIgICAodnNzZDIgICAgICAgICAgICksCisgICAgICAgIC5WREQgICAgICh2Y2NkMiAgICAgICAgICAgKSwKKyAgICAgICAgLlZTUyAgICAgKHZzc2QyICAgICAgICAgICApLAorICAgIGBlbmRpZgorICAgICAgICAuY2xrICAgICAoY2xrICAgICAgICAgICAgICksCisgICAgICAgIC5JTlAgICAgIChhbmFsb2dfZGluWzJdICAgKSwKKyAgICAgICAgLklOTiAgICAgKGFuYWxvZ19kYWNfb3V0ICApLAorICAgICAgICAuUSAgICAgICAoc2FyX2NtcFsyXSAgICAgICkgICAgCisgICAgKTsKKworICAgIEFDTVAgQ09NUF8zICgKKyAgICBgaWZkZWYgVVNFX1BPV0VSX1BJTlMKKyAgICAgICAgLnZjY2QyICAgKHZjY2QyICAgICAgICAgICApLAorICAgICAgICAudnNzZDIgICAodnNzZDIgICAgICAgICAgICksCisgICAgICAgIC5WREQgICAgICh2Y2NkMiAgICAgICAgICAgKSwKKyAgICAgICAgLlZTUyAgICAgKHZzc2QyICAgICAgICAgICApLAorICAgIGBlbmRpZgorICAgICAgICAuY2xrICAgICAoY2xrICAgICAgICAgICAgICksCisgICAgICAgIC5JTlAgICAgIChhbmFsb2dfZGluWzNdICAgKSwKKyAgICAgICAgLklOTiAgICAgKGFuYWxvZ19kYWNfb3V0ICApLAorICAgICAgICAuUSAgICAgICAoc2FyX2NtcFszXSAgICAgICkgICAgCisgICAgKTsKKyAgICBBQ01QIENPTVBfNCAoCisgICAgYGlmZGVmIFVTRV9QT1dFUl9QSU5TCisgICAgICAgIC52Y2NkMiAgICh2Y2NkMiAgICAgICAgICAgKSwKKyAgICAgICAgLnZzc2QyICAgKHZzc2QyICAgICAgICAgICApLAorICAgICAgICAuVkREICAgICAodmNjZDIgICAgICAgICAgICksCisgICAgICAgIC5WU1MgICAgICh2c3NkMiAgICAgICAgICAgKSwKKyAgICBgZW5kaWYKKyAgICAgICAgLmNsayAgICAgKGNsayAgICAgICAgICAgICApLAorICAgICAgICAuSU5QICAgICAoYW5hbG9nX2Rpbls0XSAgICksCisgICAgICAgIC5JTk4gICAgIChhbmFsb2dfZGFjX291dCAgKSwKKyAgICAgICAgLlEgICAgICAgKHNhcl9jbXBbNF0gICAgICApICAgIAorICAgICk7CisgICAgQUNNUCBDT01QXzUgKAorICAgIGBpZmRlZiBVU0VfUE9XRVJfUElOUworICAgICAgICAudmNjZDIgICAodmNjZDIgICAgICAgICAgICksCisgICAgICAgIC52c3NkMiAgICh2c3NkMiAgICAgICAgICAgKSwKKyAgICAgICAgLlZERCAgICAgKHZjY2QyICAgICAgICAgICApLAorICAgICAgICAuVlNTICAgICAodnNzZDIgICAgICAgICAgICksCisgICAgYGVuZGlmCisgICAgICAgIC5jbGsgICAgIChjbGsgICAgICAgICAgICAgKSwKKyAgICAgICAgLklOUCAgICAgKGFuYWxvZ19kaW5bNV0gICApLAorICAgICAgICAuSU5OICAgICAoYW5hbG9nX2RhY19vdXQgICksCisgICAgICAgIC5RICAgICAgIChzYXJfY21wWzVdICAgICAgKSAgICAKKyAgICApOworCisgICAgU0FSIENUUkwgKCAKKyAgICAgICAgLmNsayAgICAgKGNsayAgICAgICAgICAgICApLCAgIAorICAgICAgICAucmVzZXRfbiAocmVzZXRfbiAgICAgICAgICksICAKKyAgICAgICAgLnN0YXJ0ICAgKHN0YXJ0X2NvbnYgICAgICApLAorICAgICAgICAuY21wICAgICAoc2FyX2NtcF9pbnQgICAgICksCisgICAgICAgIC5vdXQgICAgIChhZGNfcmVzdWx0ICAgICAgKSwgICAgCisgICAgICAgIC5kb25lICAgIChjb252X2RvbmUgICAgICAgKSwKKyAgICAgICAgLm91dG4gICAgKHNhcjJkYWMgICAgICAgICApLAorICAgICAgICAuY2xrbiAgICAoY2xrbiAgICAgICAgICAgICkgCisgICAgKTsKKworCitlbmRtb2R1bGUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3NyYW1fbWFjcm9zL3NreTEzMF9zcmFtXzJrYnl0ZV8xcncxcl8zMng1MTJfOC52IGIvdmVyaWxvZy9ydGwvc3JhbV9tYWNyb3Mvc2t5MTMwX3NyYW1fMmtieXRlXzFydzFyXzMyeDUxMl84LnYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg5YTc3MAotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL3NyYW1fbWFjcm9zL3NreTEzMF9zcmFtXzJrYnl0ZV8xcncxcl8zMng1MTJfOC52CkBAIC0wLDAgKzEsMTE0IEBACisvLyBPcGVuUkFNIFNSQU0gbW9kZWwKKy8vIFdvcmRzOiA1MTIKKy8vIFdvcmQgc2l6ZTogMzIKKy8vIFdyaXRlIHNpemU6IDgKKworbW9kdWxlIHNreTEzMF9zcmFtXzJrYnl0ZV8xcncxcl8zMng1MTJfOCgKK2BpZmRlZiBVU0VfUE9XRVJfUElOUworICAgIHZjY2QxLAorICAgIHZzc2QxLAorYGVuZGlmCisvLyBQb3J0IDA6IFJXCisgICAgY2xrMCxjc2IwLHdlYjAsd21hc2swLGFkZHIwLGRpbjAsZG91dDAsCisvLyBQb3J0IDE6IFIKKyAgICBjbGsxLGNzYjEsYWRkcjEsZG91dDEKKyAgKTsKKworICBwYXJhbWV0ZXIgTlVNX1dNQVNLUyA9IDQgOworICBwYXJhbWV0ZXIgREFUQV9XSURUSCA9IDMyIDsKKyAgcGFyYW1ldGVyIEFERFJfV0lEVEggPSA5IDsKKyAgcGFyYW1ldGVyIFJBTV9ERVBUSCA9IDEgPDwgQUREUl9XSURUSDsKKyAgLy8gRklYTUU6IFRoaXMgZGVsYXkgaXMgYXJiaXRyYXJ5LgorICBwYXJhbWV0ZXIgREVMQVkgPSAzIDsKKyAgcGFyYW1ldGVyIFZFUkJPU0UgPSAwIDsgLy9TZXQgdG8gMCB0byBvbmx5IGRpc3BsYXkgd2FybmluZ3MKKyAgcGFyYW1ldGVyIFRfSE9MRCA9IDEgOyAvL0RlbGF5IHRvIGhvbGQgZG91dCB2YWx1ZSBhZnRlciBwb3NlZGdlLiBWYWx1ZSBpcyBhcmJpdHJhcnkKKworYGlmZGVmIFVTRV9QT1dFUl9QSU5TCisgICAgaW5vdXQgdmNjZDE7CisgICAgaW5vdXQgdnNzZDE7CitgZW5kaWYKKyAgaW5wdXQgIGNsazA7IC8vIGNsb2NrCisgIGlucHV0ICAgY3NiMDsgLy8gYWN0aXZlIGxvdyBjaGlwIHNlbGVjdAorICBpbnB1dCAgd2ViMDsgLy8gYWN0aXZlIGxvdyB3cml0ZSBjb250cm9sCisgIGlucHV0IFtOVU1fV01BU0tTLTE6MF0gICB3bWFzazA7IC8vIHdyaXRlIG1hc2sKKyAgaW5wdXQgW0FERFJfV0lEVEgtMTowXSAgYWRkcjA7CisgIGlucHV0IFtEQVRBX1dJRFRILTE6MF0gIGRpbjA7CisgIG91dHB1dCBbREFUQV9XSURUSC0xOjBdIGRvdXQwOworICBpbnB1dCAgY2xrMTsgLy8gY2xvY2sKKyAgaW5wdXQgICBjc2IxOyAvLyBhY3RpdmUgbG93IGNoaXAgc2VsZWN0CisgIGlucHV0IFtBRERSX1dJRFRILTE6MF0gIGFkZHIxOworICBvdXRwdXQgW0RBVEFfV0lEVEgtMTowXSBkb3V0MTsKKworICByZWcgIGNzYjBfcmVnOworICByZWcgIHdlYjBfcmVnOworICByZWcgW05VTV9XTUFTS1MtMTowXSAgIHdtYXNrMF9yZWc7CisgIHJlZyBbQUREUl9XSURUSC0xOjBdICBhZGRyMF9yZWc7CisgIHJlZyBbREFUQV9XSURUSC0xOjBdICBkaW4wX3JlZzsKKyAgcmVnIFtEQVRBX1dJRFRILTE6MF0gIGRvdXQwOworCisgIC8vIEFsbCBpbnB1dHMgYXJlIHJlZ2lzdGVycworICBhbHdheXMgQChwb3NlZGdlIGNsazApCisgIGJlZ2luCisgICAgY3NiMF9yZWcgPSBjc2IwOworICAgIHdlYjBfcmVnID0gd2ViMDsKKyAgICB3bWFzazBfcmVnID0gd21hc2swOworICAgIGFkZHIwX3JlZyA9IGFkZHIwOworICAgIGRpbjBfcmVnID0gZGluMDsKKyAgICAjKFRfSE9MRCkgZG91dDAgPSAzMidieDsKKyAgICBpZiAoICFjc2IwX3JlZyAmJiB3ZWIwX3JlZyAmJiBWRVJCT1NFICkgCisgICAgICAkZGlzcGxheSgkdGltZSwiIFJlYWRpbmcgJW0gYWRkcjA9JWIgZG91dDA9JWIiLGFkZHIwX3JlZyxtZW1bYWRkcjBfcmVnXSk7CisgICAgaWYgKCAhY3NiMF9yZWcgJiYgIXdlYjBfcmVnICYmIFZFUkJPU0UgKQorICAgICAgJGRpc3BsYXkoJHRpbWUsIiBXcml0aW5nICVtIGFkZHIwPSViIGRpbjA9JWIgd21hc2swPSViIixhZGRyMF9yZWcsZGluMF9yZWcsd21hc2swX3JlZyk7CisgIGVuZAorCisgIHJlZyAgY3NiMV9yZWc7CisgIHJlZyBbQUREUl9XSURUSC0xOjBdICBhZGRyMV9yZWc7CisgIHJlZyBbREFUQV9XSURUSC0xOjBdICBkb3V0MTsKKworICAvLyBBbGwgaW5wdXRzIGFyZSByZWdpc3RlcnMKKyAgYWx3YXlzIEAocG9zZWRnZSBjbGsxKQorICBiZWdpbgorICAgIGNzYjFfcmVnID0gY3NiMTsKKyAgICBhZGRyMV9yZWcgPSBhZGRyMTsKKyAgICBpZiAoIWNzYjAgJiYgIXdlYjAgJiYgIWNzYjEgJiYgKGFkZHIwID09IGFkZHIxKSkKKyAgICAgICAgICRkaXNwbGF5KCR0aW1lLCIgV0FSTklORzogV3JpdGluZyBhbmQgcmVhZGluZyBhZGRyMD0lYiBhbmQgYWRkcjE9JWIgc2ltdWx0YW5lb3VzbHkhIixhZGRyMCxhZGRyMSk7CisgICAgIyhUX0hPTEQpIGRvdXQxID0gMzInYng7CisgICAgaWYgKCAhY3NiMV9yZWcgJiYgVkVSQk9TRSApIAorICAgICAgJGRpc3BsYXkoJHRpbWUsIiBSZWFkaW5nICVtIGFkZHIxPSViIGRvdXQxPSViIixhZGRyMV9yZWcsbWVtW2FkZHIxX3JlZ10pOworICBlbmQKKworcmVnIFtEQVRBX1dJRFRILTE6MF0gICAgbWVtIFswOlJBTV9ERVBUSC0xXTsKKworICAvLyBNZW1vcnkgV3JpdGUgQmxvY2sgUG9ydCAwCisgIC8vIFdyaXRlIE9wZXJhdGlvbiA6IFdoZW4gd2ViMCA9IDAsIGNzYjAgPSAwCisgIGFsd2F5cyBAIChuZWdlZGdlIGNsazApCisgIGJlZ2luIDogTUVNX1dSSVRFMAorICAgIGlmICggIWNzYjBfcmVnICYmICF3ZWIwX3JlZyApIGJlZ2luCisgICAgICAgIGlmICh3bWFzazBfcmVnWzBdKQorICAgICAgICAgICAgICAgIG1lbVthZGRyMF9yZWddWzc6MF0gPSBkaW4wX3JlZ1s3OjBdOworICAgICAgICBpZiAod21hc2swX3JlZ1sxXSkKKyAgICAgICAgICAgICAgICBtZW1bYWRkcjBfcmVnXVsxNTo4XSA9IGRpbjBfcmVnWzE1OjhdOworICAgICAgICBpZiAod21hc2swX3JlZ1syXSkKKyAgICAgICAgICAgICAgICBtZW1bYWRkcjBfcmVnXVsyMzoxNl0gPSBkaW4wX3JlZ1syMzoxNl07CisgICAgICAgIGlmICh3bWFzazBfcmVnWzNdKQorICAgICAgICAgICAgICAgIG1lbVthZGRyMF9yZWddWzMxOjI0XSA9IGRpbjBfcmVnWzMxOjI0XTsKKyAgICBlbmQKKyAgZW5kCisKKyAgLy8gTWVtb3J5IFJlYWQgQmxvY2sgUG9ydCAwCisgIC8vIFJlYWQgT3BlcmF0aW9uIDogV2hlbiB3ZWIwID0gMSwgY3NiMCA9IDAKKyAgYWx3YXlzIEAgKG5lZ2VkZ2UgY2xrMCkKKyAgYmVnaW4gOiBNRU1fUkVBRDAKKyAgICBpZiAoIWNzYjBfcmVnICYmIHdlYjBfcmVnKQorICAgICAgIGRvdXQwIDw9ICMoREVMQVkpIG1lbVthZGRyMF9yZWddOworICBlbmQKKworICAvLyBNZW1vcnkgUmVhZCBCbG9jayBQb3J0IDEKKyAgLy8gUmVhZCBPcGVyYXRpb24gOiBXaGVuIHdlYjEgPSAxLCBjc2IxID0gMAorICBhbHdheXMgQCAobmVnZWRnZSBjbGsxKQorICBiZWdpbiA6IE1FTV9SRUFEMQorICAgIGlmICghY3NiMV9yZWcpCisgICAgICAgZG91dDEgPD0gIyhERUxBWSkgbWVtW2FkZHIxX3JlZ107CisgIGVuZAorCitlbmRtb2R1bGUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3NzcGltL3NyYy9maWxlbGlzdF9zcGkuZiBiL3Zlcmlsb2cvcnRsL3NzcGltL3NyYy9maWxlbGlzdF9zcGkuZgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yM2EyYWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvc3NwaW0vc3JjL2ZpbGVsaXN0X3NwaS5mCkBAIC0wLDAgKzEsNSBAQAorc3NwaW1fdG9wLnN2ICAKK3NzcGltX2N0bC5zdiAgCitzc3BpbV9pZi5zdgorc3NwaW1fY2ZnLnN2CistdiAuLi8uLi9saWIvcmVnaXN0ZXJzLnYKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3NzcGltL3NyYy9zc3BpbV9jZmcuc3YgYi92ZXJpbG9nL3J0bC9zc3BpbS9zcmMvc3NwaW1fY2ZnLnN2Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNkMzllMWYKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC9zc3BpbS9zcmMvc3NwaW1fY2ZnLnN2CkBAIC0wLDAgKzEsMjk4IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBTaW5nbGUgU1BJIE1hc3RlciBJbnRlcmZhY2UgTW9kdWxlICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmlzY2R1aW5vIGNvcmVzIHByb2plY3QgICAgICAgICAgICAvLy8vCisvLy8vICBodHRwczovL2dpdGh1Yi5jb20vZGluZXNoYW5uYXl5YS9yaXNjZHVpbm8uZ2l0ICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICBTdWJicG9ydCBTaW5nbGUgQml0IFNQSSBNYXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUbyBEbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIG5vdGhpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBBdXRob3Iocyk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgLSBEaW5lc2ggQW5uYXl5YSwgZGluZXNoYUBvcGVuY29yZXMub3JnICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBSZXZpc2lvbiA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgVi4wICAtIDA2IE9jdCAyMDIxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIEluaXRpYWwgU3BJIE1vZHVsZSBwaWNrZWQgZnJvbSAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9jb3Jlcy90dXJibzgwNTEvICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIENvcHlyaWdodCAoQykgMjAwMCBBdXRob3JzIGFuZCBPUEVOQ09SRVMuT1JHICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgICAvLy8vCisvLy8vIHJlc3RyaWN0aW9uIHByb3ZpZGVkIHRoYXQgdGhpcyBjb3B5cmlnaHQgc3RhdGVtZW50IGlzIG5vdCAgICAvLy8vCisvLy8vIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSBhbmQgdGhhdCBhbnkgZGVyaXZhdGl2ZSB3b3JrIGNvbnRhaW5zICAvLy8vCisvLy8vIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLiAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgICAvLy8vCisvLy8vIGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAvLy8vCisvLy8vIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAvLy8vCisvLy8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgICAvLy8vCisvLy8vIGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSAgICAgICAvLy8vCisvLy8vIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgICAvLy8vCisvLy8vIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgICAgICAvLy8vCisvLy8vIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSAvLy8vCisvLy8vIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgICAvLy8vCisvLy8vIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBzb3VyY2U7IGlmIG5vdCwgZG93bmxvYWQgaXQgICAvLy8vCisvLy8vIGZyb20gaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2xncGwuc2h0bWwgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKworCittb2R1bGUgc3NwaW1fY2ZnICgKKyAgICAgICAgICAgICAgaW5wdXQgIGxvZ2ljICAgICAgICAgIG1jbGsgICAgICAgICAgICAgICAsCisgICAgICAgICAgICAgIGlucHV0ICBsb2dpYyAgICAgICAgICByZXNldF9uICAgICAgICAgICAgLAorICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgb3V0cHV0IGxvZ2ljIFsxOjBdICAgIGNmZ190Z3Rfc2VsICAgICAgICAsCisgICAgICAgICAgICAgIAorICAgICAgICAgICAgICBvdXRwdXQgbG9naWMgICAgICAgICAgY2ZnX29wX3JlcSAgICAgICAgICwgLy8gU1BJIG9wZXJhdGlvbiByZXF1ZXN0CisgICAgICAgICAgICAgIG91dHB1dCBsb2dpYyBbMTowXSAgICBjZmdfb3BfdHlwZSAgICAgICAgLCAvLyBTUEkgb3BlcmF0aW9uIHR5cGUKKyAgICAgICAgICAgICAgb3V0cHV0IGxvZ2ljIFsxOjBdICAgIGNmZ190cmFuc2Zlcl9zaXplICAsIC8vIFNQSSB0cmFuc2ZlciBzaXplCisgICAgICAgICAgICAgIG91dHB1dCBsb2dpYyBbNTowXSAgICBjZmdfc2NrX3BlcmlvZCAgICAgLCAvLyBzY2sgY2xvY2sgcGVyaW9kCisgICAgICAgICAgICAgIG91dHB1dCBsb2dpYyBbNDowXSAgICBjZmdfc2NrX2NzX3BlcmlvZCAgLCAvLyBjcyBzZXR1cC9ob2xkIHBlcmlvZAorICAgICAgICAgICAgICBvdXRwdXQgbG9naWMgWzc6MF0gICAgY2ZnX2NzX2J5dGUgICAgICAgICwgLy8gY3MgYml0IGluZm9ybWF0aW9uCisgICAgICAgICAgICAgIG91dHB1dCBsb2dpYyBbMzE6MF0gICBjZmdfZGF0YWluICAgICAgICAgLCAvLyBkYXRhIGZvciB0cmFuc2ZlcgorICAgICAgICAgICAgICBpbnB1dCAgbG9naWMgWzMxOjBdICAgY2ZnX2RhdGFvdXQgICAgICAgICwgLy8gZGF0YSBmb3IgcmVjZWl2ZWQKKyAgICAgICAgICAgICAgaW5wdXQgIGxvZ2ljICAgICAgICAgIGh3YXJlX29wX2RvbmUgICAgICAsIC8vIG9wZXJhdGlvbiBkb25lCisgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAvLyBSZWcgQnVzIEludGVyZmFjZSBTaWduYWwKKyAgICAgICAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgaW5wdXQgbG9naWMgICAgICAgICAgIHJlZ19jcyAgICAgICAgICAgICAsCisgICAgICAgICAgICAgIGlucHV0IGxvZ2ljICAgICAgICAgICByZWdfd3IgICAgICAgICAgICAgLAorICAgICAgICAgICAgICBpbnB1dCBsb2dpYyBbNzowXSAgICAgcmVnX2FkZHIgICAgICAgICAgICwKKyAgICAgICAgICAgICAgaW5wdXQgbG9naWMgWzMxOjBdICAgIHJlZ193ZGF0YSAgICAgICAgICAsCisgICAgICAgICAgICAgIGlucHV0IGxvZ2ljIFszOjBdICAgICByZWdfYmUgICAgICAgICAgICAgLAorICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgLy8gT3V0cHV0cworICAgICAgICAgICAgICBvdXRwdXQgbG9naWMgWzMxOjBdICAgcmVnX3JkYXRhICAgICAgICAgICwKKyAgICAgICAgICAgICAgb3V0cHV0IGxvZ2ljICAgICAgICAgIHJlZ19hY2sgICAgICAgICAgICAKKworCisgICAgICAgICk7CisKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBJbnRlcm5hbCBXaXJlIERlY2xhcmF0aW9ucworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbG9naWMgICAgICAgICAgIHN3X3JkX2VuICAgICAgICAgICAgICAgOworbG9naWMgICAgICAgICAgIHN3X3dyX2VuOworbG9naWMgICBbMTowXSAgIHN3X2FkZHI7IC8vIGFkZHJlc3NpbmcgMTYgcmVnaXN0ZXJzCitsb2dpYyAgIFszMTowXSAgc3dfcmVnX3dkYXRhOworbG9naWMgICBbMzowXSAgIHdyX2JlICA7Citsb2dpYyAgICAgICAgICAgcmVnX2NzX2w7Citsb2dpYyAgICAgICAgICAgcmVnX2NzXzJsOworCitsb2dpYyAgWzMxOjBdICAgIHJlZ18wOyAgLy8gU29mdHdhcmVfUmVnXzAKK2xvZ2ljICBbMzE6MF0gICAgcmVnXzE7ICAvLyBTb2Z0d2FyZS1SZWdfMQorbG9naWMgIFszMTowXSAgICByZWdfMjsgIC8vIFNvZnR3YXJlLVJlZ18yCitsb2dpYyAgWzMxOjBdICAgIHJlZ19vdXQ7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIE1haW4gY29kZSBzdGFydHMgaGVyZQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBUbyBhdm9pZCBpbnRlcmZhY2UgdGltaW5nLCBhbGwgdGhlIGNvbnRlbnQgYXJlIHJlZ2lzdGVyZWQKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2Fsd2F5cyBAIChwb3NlZGdlIG1jbGsgb3IgbmVnZWRnZSByZXNldF9uKQorYmVnaW4gCisgICBpZiAocmVzZXRfbiA9PSAxJ2IwKQorICAgYmVnaW4KKyAgICBzd19hZGRyICAgICAgIDw9ICcwOworICAgIHN3X3JkX2VuICAgICAgPD0gJzA7CisgICAgc3dfd3JfZW4gICAgICA8PSAnMDsKKyAgICBzd19yZWdfd2RhdGEgIDw9ICcwOworICAgIHdyX2JlICAgICAgICAgPD0gJzA7CisgICAgcmVnX2NzX2wgICAgICA8PSAnMDsKKyAgICByZWdfY3NfMmwgICAgIDw9ICcwOworICBlbmQgZWxzZSBiZWdpbgorICAgIHN3X2FkZHIgICAgICAgPD0gcmVnX2FkZHIgWzM6Ml07CisgICAgc3dfcmRfZW4gICAgICA8PSByZWdfY3MgJiAhcmVnX3dyOworICAgIHN3X3dyX2VuICAgICAgPD0gcmVnX2NzICYgcmVnX3dyOworICAgIHN3X3JlZ193ZGF0YSAgPD0gcmVnX3dkYXRhOworICAgIHdyX2JlICAgICAgICAgPD0gcmVnX2JlOworICAgIHJlZ19jc19sICAgICAgPD0gcmVnX2NzOworICAgIHJlZ19jc18ybCAgICAgPD0gcmVnX2NzX2w7CisgIGVuZAorZW5kCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJlYWQgcGF0aCBtdXgKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYWx3YXlzIEAgKHBvc2VkZ2UgbWNsayBvciBuZWdlZGdlIHJlc2V0X24pCitiZWdpbiA6IHByZWdfb3V0X1NlcQorICAgaWYgKHJlc2V0X24gPT0gMSdiMCkgYmVnaW4KKyAgICAgIHJlZ19yZGF0YSBbMzE6MF0gIDw9IDMyJ2gwMDAwXzAwMDA7CisgICAgICByZWdfYWNrICAgICAgICAgICA8PSAxJ2IwOworICAgZW5kIGVsc2UgaWYgKHN3X3JkX2VuICYmICFyZWdfYWNrICYmICFyZWdfY3NfMmwpIGJlZ2luCisgICAgICByZWdfcmRhdGEgWzMxOjBdICA8PSByZWdfb3V0IFszMTowXTsKKyAgICAgIHJlZ19hY2sgICAgICAgICAgIDw9IDEnYjE7CisgICBlbmQgZWxzZSBpZiAoc3dfd3JfZW4gJiYgIXJlZ19hY2sgJiYgIXJlZ19jc18ybCkgYmVnaW4gCisgICAgICByZWdfYWNrICAgICAgICAgICA8PSAxJ2IxOworICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgIHJlZ19hY2sgICAgICAgIDw9IDEnYjA7CisgICBlbmQKK2VuZAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gcmVnaXN0ZXIgcmVhZCBlbmFibGUgYW5kIHdyaXRlIGVuYWJsZSBkZWNvZGluZyBsb2dpYworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2lyZSAgIHN3X3dyX2VuXzAgICA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gMidoMCk7Cit3aXJlICAgc3dfcmRfZW5fMCAgID0gc3dfcmRfZW4gJiAoc3dfYWRkciA9PSAyJ2gwKTsKK3dpcmUgICBzd193cl9lbl8xICAgPSBzd193cl9lbiAmIChzd19hZGRyID09IDInaDEpOword2lyZSAgIHN3X3JkX2VuXzEgICA9IHN3X3JkX2VuICYgKHN3X2FkZHIgPT0gMidoMSk7Cit3aXJlICAgc3dfd3JfZW5fMiAgID0gc3dfd3JfZW4gJiAoc3dfYWRkciA9PSAyJ2gyKTsKK3dpcmUgICBzd19yZF9lbl8yICAgPSBzd19yZF9lbiAmIChzd19hZGRyID09IDInaDIpOword2lyZSAgIHN3X3dyX2VuXzMgICA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gMidoMyk7Cit3aXJlICAgc3dfcmRfZW5fMyAgID0gc3dfcmRfZW4gJiAoc3dfYWRkciA9PSAyJ2gzKTsKKworCithbHdheXMgQCggKikKK2JlZ2luIDogcHJlZ19zZWxfQ29tCisKKyAgcmVnX291dCBbMzE6MF0gPSAzMidkMDsKKworICBjYXNlIChzd19hZGRyIFszOjBdKQorICAgIDQnYjAwMDAgOiByZWdfb3V0IFszMTowXSA9IHJlZ18wIFszMTowXTsgICAgIAorICAgIDQnYjAwMDEgOiByZWdfb3V0IFszMTowXSA9IHJlZ18xIFszMTowXTsgICAgCisgICAgNCdiMDAxMCA6IHJlZ19vdXQgWzMxOjBdID0gcmVnXzIgWzMxOjBdOyAgICAgCisgICAgZGVmYXVsdCA6IHJlZ19vdXQgWzMxOjBdID0gMzInaDA7CisgIGVuZGNhc2UKK2VuZAorCisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gSW5kaXZpZHVhbCByZWdpc3RlciBhc3NpZ25tZW50cworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTG9naWMgZm9yIFJlZ2lzdGVyIDAgOiBTUEkgQ29udHJvbCBSZWdpc3RlcgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYXNzaWduICAgIGNmZ19vcF9yZXEgICAgICAgICA9IHJlZ18wWzMxXTsgICAgLy8gY3B1IHJlcXVlc3QKK2Fzc2lnbiAgICBjZmdfdGd0X3NlbCAgICAgICAgPSByZWdfMFsyNDoyM107IC8vIHRhcmdldCBjaGlwIHNlbGVjdAorYXNzaWduICAgIGNmZ19vcF90eXBlICAgICAgICA9IHJlZ18wWzIyOjIxXTsgLy8gU1BJIG9wZXJhdGlvbiB0eXBlCithc3NpZ24gICAgY2ZnX3RyYW5zZmVyX3NpemUgID0gcmVnXzBbMjA6MTldOyAvLyBTUEkgdHJhbnNmZXIgc2l6ZQorYXNzaWduICAgIGNmZ19zY2tfcGVyaW9kICAgICA9IHJlZ18wWzE4OjEzXTsgLy8gc2NrIGNsb2NrIHBlcmlvZAorYXNzaWduICAgIGNmZ19zY2tfY3NfcGVyaW9kICA9IHJlZ18wWzEyOjhdOyAgLy8gY3Mgc2V0dXAvaG9sZCBwZXJpb2QKK2Fzc2lnbiAgICBjZmdfY3NfYnl0ZSAgICAgICAgPSByZWdfMFs3OjBdOyAgIC8vIGNzIGJpdCBpbmZvcm1hdGlvbgorCitnZW5lcmljX3JlZ2lzdGVyICMoOCwwICApIHVfc3BpX2N0cmxfYmUwICgKKwkgICAgICAud2UgICAgICAgICAgICAoezh7c3dfd3JfZW5fMCAmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JfYmVbMF0gICB9fSAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAgICAoc3dfcmVnX3dkYXRhWzc6MF0gICAgKSwKKwkgICAgICAucmVzZXRfbiAgICAgICAocmVzZXRfbiAgICAgICAgICAgKSwKKwkgICAgICAuY2xrICAgICAgICAgICAobWNsayAgICAgICAgICAgICAgKSwKKwkgICAgICAKKwkgICAgICAvL0xpc3Qgb2YgT3V0cworCSAgICAgIC5kYXRhX291dCAgICAgIChyZWdfMFs3OjBdICAgICAgICApCisgICAgICAgICAgKTsKKworZ2VuZXJpY19yZWdpc3RlciAjKDgsMCAgKSB1X3NwaV9jdHJsX2JlMSAoCisJICAgICAgLndlICAgICAgICAgICAgKHs4e3N3X3dyX2VuXzAgJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JfYmVbMV0gICB9fSAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAgICAoc3dfcmVnX3dkYXRhWzE1OjhdICApLAorCSAgICAgIC5yZXNldF9uICAgICAgIChyZXNldF9uICAgICAgICAgICApLAorCSAgICAgIC5jbGsgICAgICAgICAgIChtY2xrICAgICAgICAgICAgICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgICAgKHJlZ18wWzE1OjhdICAgICAgICkKKyAgICAgICAgICApOworCitnZW5lcmljX3JlZ2lzdGVyICMoOCwwICApIHVfc3BpX2N0cmxfYmUyICgKKwkgICAgICAud2UgICAgICAgICAgICAoezh7c3dfd3JfZW5fMCAmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cl9iZVsyXSAgIH19ICApLAkJIAorCSAgICAgIC5kYXRhX2luICAgICAgIChzd19yZWdfd2RhdGFbMjM6MTZdICksCisJICAgICAgLnJlc2V0X24gICAgICAgKHJlc2V0X24gICAgICAgICAgICksCisJICAgICAgLmNsayAgICAgICAgICAgKG1jbGsgICAgICAgICAgICAgICksCisJICAgICAgCisJICAgICAgLy9MaXN0IG9mIE91dHMKKwkgICAgICAuZGF0YV9vdXQgICAgICAocmVnXzBbMjM6MTZdICAgICAgICkKKyAgICAgICAgICApOworCithc3NpZ24gcmVnXzBbMzA6MjRdID0gNydoMDsKKworcmVxX3JlZ2lzdGVyICMoMCAgKSB1X3NwaV9jdHJsX3JlcSAoCisJICAgICAgLmNwdV93ZSAgICAgICAoe3N3X3dyX2VuXzAgJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JfYmVbM10gICB9ICAgICAgICksCQkgCisJICAgICAgLmNwdV9yZXEgICAgICAoc3dfcmVnX3dkYXRhWzMxXSAgICAgICksCisJICAgICAgLmh3YXJlX2FjayAgICAoaHdhcmVfb3BfZG9uZSAgICAgICksCisJICAgICAgLnJlc2V0X24gICAgICAgKHJlc2V0X24gICAgICAgICAgICksCisJICAgICAgLmNsayAgICAgICAgICAgKG1jbGsgICAgICAgICAgICAgICksCisJICAgICAgCisJICAgICAgLy9MaXN0IG9mIE91dHMKKwkgICAgICAuZGF0YV9vdXQgICAgICAocmVnXzBbMzFdICAgICAgICAgKQorICAgICAgICAgICk7CisKKworCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIExvZ2ljIGZvciBSZWdpc3RlciAxIDogU1BJIERhdGEgSW4gUmVnaXN0ZXIKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2Fzc2lnbiAgIGNmZ19kYXRhaW4gICAgICAgID0gcmVnXzFbMzE6MF07IAorCitnZW5lcmljX3JlZ2lzdGVyICMoOCwwICApIHVfc3BpX2Rpbl9iZTAgKAorCSAgICAgIC53ZSAgICAgICAgICAgICh7OHtzd193cl9lbl8xICYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyX2JlWzBdICAgfX0gICksCQkgCisJICAgICAgLmRhdGFfaW4gICAgICAgKHN3X3JlZ193ZGF0YVs3OjBdICAgICksCisJICAgICAgLnJlc2V0X24gICAgICAgKHJlc2V0X24gICAgICAgICAgICksCisJICAgICAgLmNsayAgICAgICAgICAgKG1jbGsgICAgICAgICAgICAgICksCisJICAgICAgCisJICAgICAgLy9MaXN0IG9mIE91dHMKKwkgICAgICAuZGF0YV9vdXQgICAgICAocmVnXzFbNzowXSAgICAgICAgKQorICAgICAgICAgICk7CisKK2dlbmVyaWNfcmVnaXN0ZXIgIyg4LDAgICkgdV9zcGlfZGluX2JlMSAoCisJICAgICAgLndlICAgICAgICAgICAgKHs4e3N3X3dyX2VuXzEgJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JfYmVbMV0gICB9fSAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAgICAoc3dfcmVnX3dkYXRhWzE1OjhdICAgKSwKKwkgICAgICAucmVzZXRfbiAgICAgICAocmVzZXRfbiAgICAgICAgICAgKSwKKwkgICAgICAuY2xrICAgICAgICAgICAobWNsayAgICAgICAgICAgICAgKSwKKwkgICAgICAKKwkgICAgICAvL0xpc3Qgb2YgT3V0cworCSAgICAgIC5kYXRhX291dCAgICAgIChyZWdfMVsxNTo4XSAgICAgICApCisgICAgICAgICAgKTsKKworZ2VuZXJpY19yZWdpc3RlciAjKDgsMCAgKSB1X3NwaV9kaW5fYmUyICgKKwkgICAgICAud2UgICAgICAgICAgICAoezh7c3dfd3JfZW5fMSAmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cl9iZVsyXSAgIH19ICApLAkJIAorCSAgICAgIC5kYXRhX2luICAgICAgIChzd19yZWdfd2RhdGFbMjM6MTZdICApLAorCSAgICAgIC5yZXNldF9uICAgICAgIChyZXNldF9uICAgICAgICAgICApLAorCSAgICAgIC5jbGsgICAgICAgICAgIChtY2xrICAgICAgICAgICAgICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgICAgKHJlZ18xWzIzOjE2XSAgICAgICkKKyAgICAgICAgICApOworCisKK2dlbmVyaWNfcmVnaXN0ZXIgIyg4LDAgICkgdV9zcGlfZGluX2JlMyAoCisJICAgICAgLndlICAgICAgICAgICAgKHs4e3N3X3dyX2VuXzEgJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JfYmVbM10gICB9fSAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAgICAoc3dfcmVnX3dkYXRhWzMxOjI0XSAgKSwKKwkgICAgICAucmVzZXRfbiAgICAgICAocmVzZXRfbiAgICAgICAgICAgKSwKKwkgICAgICAuY2xrICAgICAgICAgICAobWNsayAgICAgICAgICAgICAgKSwKKwkgICAgICAKKwkgICAgICAvL0xpc3Qgb2YgT3V0cworCSAgICAgIC5kYXRhX291dCAgICAgIChyZWdfMVszMToyNF0gICAgICApCisgICAgICAgICAgKTsKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBMb2dpYyBmb3IgUmVnaXN0ZXIgMiA6IFNQSSBEYXRhIG91dHB1dCBSZWdpc3RlcgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYXNzaWduICByZWdfMiA9IGNmZ19kYXRhb3V0OyAKKworCisKK2VuZG1vZHVsZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvc3NwaW0vc3JjL3NzcGltX2N0bC5zdiBiL3Zlcmlsb2cvcnRsL3NzcGltL3NyYy9zc3BpbV9jdGwuc3YKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjY1YzBjMgotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL3NzcGltL3NyYy9zc3BpbV9jdGwuc3YKQEAgLTAsMCArMSwyODYgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgU2luZ2xlIFNQSSBNYXN0ZXIgSW50ZXJmYWNlIE1vZHVsZSAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmlzY2R1aW5vIGNvcmVzIHByb2plY3QgICAgICAgICAgICAvLy8vDQorLy8vLyAgaHR0cHM6Ly9naXRodWIuY29tL2RpbmVzaGFubmF5eWEvcmlzY2R1aW5vLmdpdCAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgICAgIFNQSSBDb250cm9sIG1vZHVsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICBUbyBEbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgICBub3RoaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICBBdXRob3Iocyk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgICAgIC0gRGluZXNoIEFubmF5eWEsIGRpbmVzaGFAb3BlbmNvcmVzLm9yZyAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICBSZXZpc2lvbiA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgICAgIFYuMCAgLSAwNiBPY3QgMjAyMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gICAgICAgICAgSW5pdGlhbCBTcEkgTW9kdWxlIHBpY2tlZCBmcm9tICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICAgICAgICAgICAgIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9jb3Jlcy90dXJibzgwNTEvICAgICAgICAvLy8vDQorLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyBDb3B5cmlnaHQgKEMpIDIwMDAgQXV0aG9ycyBhbmQgT1BFTkNPUkVTLk9SRyAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgICAvLy8vDQorLy8vLyByZXN0cmljdGlvbiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgICAgLy8vLw0KKy8vLy8gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgIC8vLy8NCisvLy8vIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLiAvLy8vDQorLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCAgIC8vLy8NCisvLy8vIGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAvLy8vDQorLy8vLyBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgLy8vLw0KKy8vLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSAgIC8vLy8NCisvLy8vIGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gVGhpcyBzb3VyY2UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlICAgICAgIC8vLy8NCisvLy8vIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgICAvLy8vDQorLy8vLyB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSICAgICAgLy8vLw0KKy8vLy8gUFVSUE9TRS4gIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIC8vLy8NCisvLy8vIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgIC8vLy8NCisvLy8vIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBzb3VyY2U7IGlmIG5vdCwgZG93bmxvYWQgaXQgICAvLy8vDQorLy8vLyBmcm9tIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9sZ3BsLnNodG1sICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQorDQorDQorDQorbW9kdWxlIHNzcGltX2N0bA0KKyAgICAgICAoIA0KKyAgaW5wdXQgIGxvZ2ljICAgICAgICAgIGNsaywNCisgIGlucHV0ICBsb2dpYyAgICAgICAgICByZXNldF9uLA0KKyAgaW5wdXQgIGxvZ2ljICAgICAgICAgIGNmZ19vcF9yZXEsDQorICBpbnB1dCAgbG9naWMgWzE6MF0gICAgY2ZnX29wX3R5cGUsDQorICBpbnB1dCAgbG9naWMgWzE6MF0gICAgY2ZnX3RyYW5zZmVyX3NpemUsDQorICAgIA0KKyAgaW5wdXQgIGxvZ2ljIFs1OjBdICAgIGNmZ19zY2tfcGVyaW9kLA0KKyAgaW5wdXQgIGxvZ2ljIFs0OjBdICAgIGNmZ19zY2tfY3NfcGVyaW9kLCAvLyBjcyBzZXR1cCAmIGhvbGQgcGVyaW9kDQorICBpbnB1dCAgbG9naWMgWzc6MF0gICAgY2ZnX2NzX2J5dGUsDQorICBpbnB1dCAgbG9naWMgWzMxOjBdICAgY2ZnX2RhdGFpbiwNCisgIG91dHB1dCBsb2dpYyBbMzE6MF0gICBjZmdfZGF0YW91dCwNCisNCisgIG91dHB1dCBsb2dpYyBbNzowXSAgICBieXRlX291dCwgLy8gQnl0ZSBvdXQgZm9yIFNlcmlhbCBTaGlmdGluZyBvdXQNCisgIGlucHV0ICBsb2dpYyBbNzowXSAgICBieXRlX2luLCAgLy8gU2VyaWFsIFJlY2VpdmVkIEJ5dGUNCisgIG91dHB1dCBsb2dpYyAgICAgICAgICBzY2tfaW50LA0KKyAgb3V0cHV0IGxvZ2ljICAgICAgICAgIGNzX2ludF9uLA0KKyAgb3V0cHV0IGxvZ2ljICAgICAgICAgIHNja19wZSwNCisgIG91dHB1dCBsb2dpYyAgICAgICAgICBzY2tfbmUsDQorICBvdXRwdXQgbG9naWMgICAgICAgICAgc2hpZnRfb3V0LA0KKyAgb3V0cHV0IGxvZ2ljICAgICAgICAgIHNoaWZ0X2luLA0KKyAgb3V0cHV0IGxvZ2ljICAgICAgICAgIGxvYWRfYnl0ZSwNCisgIG91dHB1dCBsb2dpYyAgICAgICAgICBvcF9kb25lDQorICAgICAgICAgDQorICAgICAgICAgKTsNCisNCisgLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorDQorDQorICBsb2dpYyBbNTowXSAgICAgICBjbGtfY250Ow0KKyAgbG9naWMgWzU6MF0gICAgICAgc2NrX2NudDsNCisNCisgIGxvZ2ljIFszOjBdICAgICAgIHNwaWlmX2NzOw0KKyAgbG9naWMgICAgICAgICAgICAgc2hpZnRfZW5iOw0KKyAgbG9naWMgICAgICAgICAgICAgY2xyX3Nja19jbnQgOw0KKyAgbG9naWMgICAgICAgICAgICAgc2NrX291dF9lbjsNCisNCisgIGxvZ2ljICBbNTowXSAgICAgIHNja19oYWxmX3BlcmlvZDsNCisgIGxvZ2ljIFsyOjBdICAgICAgIGJ5dGVfY250Ow0KKw0KKw0KKyAgYGRlZmluZSBTUElfSURMRSAgIDQnYjAwMDANCisgIGBkZWZpbmUgU1BJX0NTX1NVICA0J2IwMDAxDQorICBgZGVmaW5lIFNQSV9XUklURSAgNCdiMDAxMA0KKyAgYGRlZmluZSBTUElfUkVBRCAgIDQnYjAwMTENCisgIGBkZWZpbmUgU1BJX0NTX0hMRCA0J2IwMTAwDQorICBgZGVmaW5lIFNQSV9XQUlUICAgNCdiMDEwMQ0KKw0KKw0KKyAgYXNzaWduIHNja19oYWxmX3BlcmlvZCA9IHsxJ2IwLCBjZmdfc2NrX3BlcmlvZFs1OjFdfTsNCisgIC8vIFRoZSBmaXJzdCB0cmFuc2l0aW9uIG9uIHRoZSBzY2tfdG9nZ2xlIGhhcHBlbnMgb25lIFNDSyBwZXJpb2QNCisgIC8vIGFmdGVyIG9wX2VuIG9yIGJvb3RfZW4gaXMgYXNzZXJ0ZWQNCisgIGFsd2F5cyBAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcmVzZXRfbikgYmVnaW4NCisgICAgIGlmKCFyZXNldF9uKSBiZWdpbg0KKyAgICAgICAgc2NrX25lICAgPD0gMSdiMDsNCisgICAgICAgIGNsa19jbnQgIDw9IDYnaDE7DQorICAgICAgICBzY2tfcGUgICA8PSAxJ2IwOw0KKyAgICAgICAgc2NrX2ludCAgPD0gMSdiMDsNCisgICAgIGVuZCAvLyBpZiAoIXJlc2V0X24pDQorICAgICBlbHNlIA0KKyAgICAgYmVnaW4NCisgICAgICAgIGlmKGNmZ19vcF9yZXEpIA0KKyAgICAgICAgYmVnaW4NCisgICAgICAgICAgIGlmKGNsa19jbnQgPT0gc2NrX2hhbGZfcGVyaW9kKSANCisgICAgICAgICAgIGJlZ2luDQorICAgICAgICAgICAgICBzY2tfbmUgPD0gMSdiMTsNCisgICAgICAgICAgICAgIHNja19wZSA8PSAxJ2IwOw0KKyAgICAgICAgICAgICAgaWYoc2NrX291dF9lbikgc2NrX2ludCA8PSAwOw0KKyAgICAgICAgICAgICAgY2xrX2NudCA8PSBjbGtfY250ICsgMSdiMTsNCisgICAgICAgICAgIGVuZCAvLyBpZiAoY2xrX2NudCA9PSBzY2tfaGFsZl9wZXJpb2QpDQorICAgICAgICAgICBlbHNlIA0KKyAgICAgICAgICAgYmVnaW4NCisgICAgICAgICAgICAgIGlmKGNsa19jbnQgPT0gY2ZnX3Nja19wZXJpb2QpIA0KKyAgICAgICAgICAgICAgYmVnaW4NCisgICAgICAgICAgICAgICAgIHNja19uZSA8PSAxJ2IwOw0KKyAgICAgICAgICAgICAgICAgc2NrX3BlIDw9IDEnYjE7DQorICAgICAgICAgICAgICAgICBpZihzY2tfb3V0X2VuKSBzY2tfaW50IDw9IDE7DQorICAgICAgICAgICAgICAgICBjbGtfY250IDw9IDYnaDE7DQorICAgICAgICAgICAgICBlbmQgLy8gaWYgKGNsa19jbnQgPT0gY2ZnX3Nja19wZXJpb2QpDQorICAgICAgICAgICAgICBlbHNlIA0KKyAgICAgICAgICAgICAgYmVnaW4NCisgICAgICAgICAgICAgICAgIGNsa19jbnQgPD0gY2xrX2NudCArIDEnYjE7DQorICAgICAgICAgICAgICAgICBzY2tfcGUgPD0gMSdiMDsNCisgICAgICAgICAgICAgICAgIHNja19uZSA8PSAxJ2IwOw0KKyAgICAgICAgICAgICAgZW5kIC8vIGVsc2U6ICFpZihjbGtfY250ID09IGNmZ19zY2tfcGVyaW9kKQ0KKyAgICAgICAgICAgZW5kIC8vIGVsc2U6ICFpZihjbGtfY250ID09IHNja19oYWxmX3BlcmlvZCkNCisgICAgICAgIGVuZCAvLyBpZiAob3BfZW4pDQorICAgICAgICBlbHNlIA0KKyAgICAgICAgYmVnaW4NCisgICAgICAgICAgIGNsa19jbnQgICAgPD0gNidoMTsNCisgICAgICAgICAgIHNja19wZSAgICAgPD0gMSdiMDsNCisgICAgICAgICAgIHNja19uZSAgICAgPD0gMSdiMDsNCisgICAgICAgIGVuZCAvLyBlbHNlOiAhaWYob3BfZW4pDQorICAgICBlbmQgLy8gZWxzZTogIWlmKCFyZXNldF9uKQ0KKyAgZW5kIC8vIGFsd2F5cyBAIChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJlc2V0X24pDQorICANCisNCit3aXJlIFsxOjBdIGNzX2RhdGEgPSAgKGJ5dGVfY250ID09IDInYjAwKSA/IGNmZ19jc19ieXRlWzc6Nl0gIDoNCisgICAgICAgICAgICAgICAgICAgICAgKGJ5dGVfY250ID09IDInYjAxKSA/IGNmZ19jc19ieXRlWzU6NF0gIDoNCisgICAgICAgICAgICAgICAgICAgICAgKGJ5dGVfY250ID09IDInYjEwKSA/IGNmZ19jc19ieXRlWzM6Ml0gIDogY2ZnX2NzX2J5dGVbMTowXSA7DQorDQorYXNzaWduIGJ5dGVfb3V0ID0gKGJ5dGVfY250ID09IDInYjAwKSA/IGNmZ19kYXRhaW5bMzE6MjRdIDoNCisgICAgICAgICAgICAgICAgICAgICAgKGJ5dGVfY250ID09IDInYjAxKSA/IGNmZ19kYXRhaW5bMjM6MTZdIDoNCisgICAgICAgICAgICAgICAgICAgICAgKGJ5dGVfY250ID09IDInYjEwKSA/IGNmZ19kYXRhaW5bMTU6OF0gIDogY2ZnX2RhdGFpbls3OjBdIDsNCisgICAgICAgICANCithc3NpZ24gc2hpZnRfb3V0ID0gIHNoaWZ0X2VuYiAmJiBzY2tfbmU7DQorDQorYWx3YXlzIEAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByZXNldF9uKSBiZWdpbg0KKyAgIGlmKCFyZXNldF9uKSBiZWdpbg0KKyAgICAgIHNwaWlmX2NzICAgIDw9IGBTUElfSURMRTsNCisgICAgICBzY2tfY250ICAgICA8PSA2J2gwOw0KKyAgICAgIHNoaWZ0X2luICAgIDw9IDEnYjA7DQorICAgICAgY2xyX3Nja19jbnQgPD0gMSdiMTsNCisgICAgICBieXRlX2NudCAgICA8PSAyJ2IwMDsNCisgICAgICBjc19pbnRfbiAgICA8PSAxJ2IxOw0KKyAgICAgIHNja19vdXRfZW4gIDw9IDEnYjA7DQorICAgICAgc2hpZnRfZW5iICAgPD0gMSdiMDsNCisgICAgICBjZmdfZGF0YW91dCA8PSAzMidoMDsNCisgICAgICBsb2FkX2J5dGUgICA8PSAxJ2IwOw0KKyAgIGVuZA0KKyAgIGVsc2UgYmVnaW4NCisgICAgICBpZihzY2tfbmUpDQorICAgICAgICAgc2NrX2NudCA8PSAgY2xyX3Nja19jbnQgID8gNidoMCA6IHNja19jbnQgKyAxIDsNCisNCisgICAgICBjYXNlKHNwaWlmX2NzKQ0KKyAgICAgIGBTUElfSURMRSAgIDogDQorICAgICAgYmVnaW4NCisgICAgICAgICAgb3BfZG9uZSAgICAgPD0gMDsNCisgICAgICAgICAgY2xyX3Nja19jbnQgPD0gMSdiMTsNCisgICAgICAgICAgc2NrX291dF9lbiAgPD0gMSdiMDsNCisgICAgICAgICAgc2hpZnRfZW5iICAgPD0gMSdiMDsNCisgICAgICAgICAgaWYoY2ZnX29wX3JlcSkgDQorICAgICAgICAgIGJlZ2luDQorICAgICAgICAgICAgICBjZmdfZGF0YW91dCA8PSAzMidoMDsNCisgICAgICAgICAgICAgIHNwaWlmX2NzICAgIDw9IGBTUElfQ1NfU1U7DQorICAgICAgICAgICBlbmQgDQorICAgICAgICAgICBlbHNlIGJlZ2luDQorICAgICAgICAgICAgICBzcGlpZl9jcyA8PSBgU1BJX0lETEU7DQorICAgICAgICAgICBlbmQgDQorICAgICAgZW5kIA0KKw0KKyAgICAgIGBTUElfQ1NfU1UgIDogDQorICAgICAgIGJlZ2luDQorICAgICAgICAgIGlmKHNja19uZSkgYmVnaW4NCisgICAgICAgICAgICBjc19pbnRfbiA8PSBjc19kYXRhWzFdOw0KKyAgICAgICAgICAgIGlmKHNja19jbnQgPT0gY2ZnX3Nja19jc19wZXJpb2QpIGJlZ2luDQorICAgICAgICAgICAgICAgY2xyX3Nja19jbnQgPD0gMSdiMTsNCisgICAgICAgICAgICAgICBpZihjZmdfb3BfdHlwZSA9PSAwKSBiZWdpbiAvLyBXcml0ZSBNb2RlDQorICAgICAgICAgICAgICAgICAgbG9hZF9ieXRlICAgPD0gMSdiMTsNCisgICAgICAgICAgICAgICAgICBzcGlpZl9jcyAgICA8PSBgU1BJX1dSSVRFOw0KKyAgICAgICAgICAgICAgICAgIHNoaWZ0X2VuYiAgIDw9IDEnYjA7DQorICAgICAgICAgICAgICAgZW5kIGVsc2UgYmVnaW4NCisgICAgICAgICAgICAgICAgICBzaGlmdF9pbiAgICA8PSAxOw0KKyAgICAgICAgICAgICAgICAgIHNwaWlmX2NzICAgIDw9IGBTUElfUkVBRDsNCisgICAgICAgICAgICAgICAgZW5kDQorICAgICAgICAgICAgIGVuZA0KKyAgICAgICAgICAgICBlbHNlIGJlZ2luIA0KKyAgICAgICAgICAgICAgICBjbHJfc2NrX2NudCA8PSAxJ2IwOw0KKyAgICAgICAgICAgICBlbmQNCisgICAgICAgICBlbmQNCisgICAgICBlbmQgDQorDQorICAgICAgYFNQSV9XUklURSA6IA0KKyAgICAgICBiZWdpbiANCisgICAgICAgICBsb2FkX2J5dGUgICA8PSAxJ2IwOw0KKyAgICAgICAgIGlmKHNja19uZSkgYmVnaW4NCisgICAgICAgICAgIGlmKHNja19jbnQgPT0gMydoNyApYmVnaW4NCisgICAgICAgICAgICAgIGNscl9zY2tfY250IDw9IDEnYjE7DQorICAgICAgICAgICAgICBzcGlpZl9jcyAgICA8PSBgU1BJX0NTX0hMRDsNCisgICAgICAgICAgICAgIHNoaWZ0X2VuYiAgIDw9IDEnYjA7DQorICAgICAgICAgICAgICBzY2tfb3V0X2VuICA8PSAxJ2IwOyAvLyBEaXNhYmxlIGNsb2NrIG91dHB1dA0KKyAgICAgICAgICAgZW5kDQorICAgICAgICAgICBlbHNlIGJlZ2luDQorICAgICAgICAgICAgICBzaGlmdF9lbmIgICA8PSAxJ2IxOw0KKyAgICAgICAgICAgICAgc2NrX291dF9lbiAgPD0gMSdiMTsNCisgICAgICAgICAgICAgIGNscl9zY2tfY250IDw9IDEnYjA7DQorICAgICAgICAgICBlbmQNCisgICAgICAgICBlbmQgZWxzZSBiZWdpbg0KKyAgICAgICAgICAgIHNoaWZ0X2VuYiAgIDw9IDEnYjE7DQorICAgICAgICAgZW5kDQorICAgICAgZW5kIA0KKw0KKyAgICAgIGBTUElfUkVBRCA6IA0KKyAgICAgICBiZWdpbiANCisgICAgICAgICBpZihzY2tfbmUpIGJlZ2luDQorICAgICAgICAgICAgIGlmKCBzY2tfY250ID09IDMnaDcgKSBiZWdpbg0KKyAgICAgICAgICAgICAgICBjbHJfc2NrX2NudCA8PSAxJ2IxOw0KKyAgICAgICAgICAgICAgICBzaGlmdF9pbiAgICA8PSAwOw0KKyAgICAgICAgICAgICAgICBzcGlpZl9jcyAgICA8PSBgU1BJX0NTX0hMRDsNCisgICAgICAgICAgICAgICAgc2NrX291dF9lbiAgPD0gMSdiMDsgLy8gRGlzYWJsZSBjbG9jayBvdXRwdXQNCisgICAgICAgICAgICAgZW5kDQorICAgICAgICAgICAgIGVsc2UgYmVnaW4NCisgICAgICAgICAgICAgICAgc2NrX291dF9lbiAgPD0gMSdiMTsgLy8gRGlzYWJsZSBjbG9jayBvdXRwdXQNCisgICAgICAgICAgICAgICAgY2xyX3Nja19jbnQgPD0gMSdiMDsNCisgICAgICAgICAgICAgZW5kDQorICAgICAgICAgZW5kDQorICAgICAgZW5kIA0KKw0KKyAgICAgIGBTUElfQ1NfSExEIDogYmVnaW4NCisgICAgICAgICBpZihzY2tfbmUpIGJlZ2luDQorICAgICAgICAgICAgIGNzX2ludF9uIDw9IGNzX2RhdGFbMF07DQorICAgICAgICAgICAgaWYoc2NrX2NudCA9PSBjZmdfc2NrX2NzX3BlcmlvZCkgYmVnaW4NCisgICAgICAgICAgICAgICBpZihjZmdfb3BfdHlwZSA9PSAxKSBiZWdpbiAvLyBSZWFkIE1vZGUNCisgICAgICAgICAgICAgICAgICBjZmdfZGF0YW91dCA8PSAoYnl0ZV9jbnRbMTowXSA9PSAyJ2IwMCkgPyB7IGJ5dGVfaW4sIGNmZ19kYXRhb3V0WzIzOjBdIH0gOg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChieXRlX2NudFsxOjBdID09IDInYjAxKSA/IHsgY2ZnX2RhdGFvdXRbMzE6MjRdICwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVfaW4sIGNmZ19kYXRhb3V0WzE1OjBdIH0gOg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChieXRlX2NudFsxOjBdID09IDInYjEwKSA/IHsgY2ZnX2RhdGFvdXRbMzE6MTZdICwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVfaW4sIGNmZ19kYXRhb3V0Wzc6MF0gIH0gOg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgY2ZnX2RhdGFvdXRbMzE6OF0gICwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVfaW4gIH0gOw0KKyAgICAgICAgICAgICAgIGVuZA0KKyAgICAgICAgICAgICAgIGNscl9zY2tfY250IDw9IDEnYjE7DQorICAgICAgICAgICAgICAgaWYoYnl0ZV9jbnQgPT0gY2ZnX3RyYW5zZmVyX3NpemUpIGJlZ2luDQorICAgICAgICAgICAgICAgICAgc3BpaWZfY3MgPD0gYFNQSV9XQUlUOw0KKyAgICAgICAgICAgICAgICAgIGJ5dGVfY250IDw9IDA7DQorICAgICAgICAgICAgICAgICAgb3BfZG9uZSAgPD0gMTsNCisgICAgICAgICAgICAgICBlbmQgZWxzZSBiZWdpbg0KKyAgICAgICAgICAgICAgICAgIGJ5dGVfY250IDw9IGJ5dGVfY250ICsxOw0KKyAgICAgICAgICAgICAgICAgIHNwaWlmX2NzIDw9IGBTUElfQ1NfU1U7DQorICAgICAgICAgICAgICAgZW5kDQorICAgICAgICAgICAgZW5kDQorICAgICAgICAgICAgZWxzZSBiZWdpbg0KKyAgICAgICAgICAgICAgICBjbHJfc2NrX2NudCA8PSAxJ2IwOw0KKyAgICAgICAgICAgIGVuZA0KKyAgICAgICAgIGVuZCANCisgICAgICBlbmQgLy8gY2FzZTogYFNQSV9DU19ITEQgICAgDQorICAgICAgYFNQSV9XQUlUIDogYmVnaW4NCisgICAgICAgICAgaWYoIWNmZ19vcF9yZXEpIC8vIFdhaXQgZm9yIFJlcXVlc3QgZGUtYXNzZXJ0aW9uDQorICAgICAgICAgICAgIHNwaWlmX2NzIDw9IGBTUElfSURMRTsNCisgICAgICAgZW5kDQorICAgIGVuZGNhc2UgLy8gY2FzZXgoc3BpaWZfY3MpDQorICAgZW5kDQorZW5kIC8vIGFsd2F5cyBAKHNja19uZQ0KKw0KK2VuZG1vZHVsZQ0KZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3NzcGltL3NyYy9zc3BpbV9pZi5zdiBiL3Zlcmlsb2cvcnRsL3NzcGltL3NyYy9zc3BpbV9pZi5zdgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40MmIxOGYyCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvc3NwaW0vc3JjL3NzcGltX2lmLnN2CkBAIC0wLDAgKzEsMTIyIEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBTaW5nbGUgU1BJIE1hc3RlciBJbnRlcmZhY2UgTW9kdWxlICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmlzY2R1aW5vIGNvcmVzIHByb2plY3QgICAgICAgICAgICAvLy8vCisvLy8vICBodHRwczovL2dpdGh1Yi5jb20vZGluZXNoYW5uYXl5YS9yaXNjZHVpbm8uZ2l0ICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUbyBEbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIG5vdGhpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBBdXRob3Iocyk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgLSBEaW5lc2ggQW5uYXl5YSwgZGluZXNoYUBvcGVuY29yZXMub3JnICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBSZXZpc2lvbiA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgVi4wICAtIDA2IE9jdCAyMDIxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIEluaXRpYWwgU3BJIE1vZHVsZSBwaWNrZWQgZnJvbSAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9jb3Jlcy90dXJibzgwNTEvICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIENvcHlyaWdodCAoQykgMjAwMCBBdXRob3JzIGFuZCBPUEVOQ09SRVMuT1JHICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgICAvLy8vCisvLy8vIHJlc3RyaWN0aW9uIHByb3ZpZGVkIHRoYXQgdGhpcyBjb3B5cmlnaHQgc3RhdGVtZW50IGlzIG5vdCAgICAvLy8vCisvLy8vIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSBhbmQgdGhhdCBhbnkgZGVyaXZhdGl2ZSB3b3JrIGNvbnRhaW5zICAvLy8vCisvLy8vIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLiAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgICAvLy8vCisvLy8vIGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAvLy8vCisvLy8vIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAvLy8vCisvLy8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgICAvLy8vCisvLy8vIGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSAgICAgICAvLy8vCisvLy8vIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgICAvLy8vCisvLy8vIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgICAgICAvLy8vCisvLy8vIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSAvLy8vCisvLy8vIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgICAvLy8vCisvLy8vIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBzb3VyY2U7IGlmIG5vdCwgZG93bmxvYWQgaXQgICAvLy8vCisvLy8vIGZyb20gaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2xncGwuc2h0bWwgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK21vZHVsZSBzc3BpbV9pZgorICAgICAgICAgICgKKyAgICAgICAgICBpbnB1dCAgbG9naWMgY2xrLAorICAgICAgICAgIGlucHV0ICBsb2dpYyByZXNldF9uLAorICAgICAgICAgIGlucHV0ICBsb2dpYyBzY2tfcGUsCisgICAgICAgICAgaW5wdXQgIGxvZ2ljIHNja19pbnQsCisgICAgICAgICAgaW5wdXQgIGxvZ2ljIGNzX2ludF9uLAorICAgICAgICAgIAorICAgICAgICAgIGlucHV0ICBsb2dpYyAgICAgICBsb2FkX2J5dGUsCisgICAgICAgICAgaW5wdXQgIGxvZ2ljIFsxOjBdIGNmZ190Z3Rfc2VsLAorCisgICAgICAgICAgaW5wdXQgIGxvZ2ljIFs3OjBdIGJ5dGVfb3V0LAorICAgICAgICAgIGlucHV0ICBsb2dpYyAgICAgICBzaGlmdF9vdXQsCisgICAgICAgICAgaW5wdXQgIGxvZ2ljICAgICAgIHNoaWZ0X2luLAorCisgICAgICAgICAgb3V0cHV0IGxvZ2ljICBbNzowXSBieXRlX2luLAorICAgICAgICAgIG91dHB1dCBsb2dpYyAgICAgICAgc2NrLAorICAgICAgICAgIG91dHB1dCBsb2dpYyAgICAgICAgc28sCisgICAgICAgICAgb3V0cHV0IGxvZ2ljICBbMzowXSBjc19uLAorICAgICAgICAgIGlucHV0ICBsb2dpYyAgICAgICAgc2kKKyAgICAgICAgICAgKTsKKworCisKKyAgbG9naWMgWzc6MF0gICAgc29fcmVnOworICBsb2dpYyBbNzowXSAgICBzaV9yZWc7CisKKworICAvL091dHB1dCBTaGlmdCBSZWdpc3RlcgorCisgIGFsd2F5cyBAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcmVzZXRfbikgYmVnaW4KKyAgICAgaWYoIXJlc2V0X24pIGJlZ2luCisgICAgICAgIHNvX3JlZyA8PSA4J2gwMDsKKyAgICAgICAgc28gPD0gMSdiMDsKKyAgICAgZW5kCisgICAgIGVsc2UgYmVnaW4KKyAgICAgICAgaWYobG9hZF9ieXRlKSBiZWdpbgorICAgICAgICAgICBzb19yZWcgPD0gYnl0ZV9vdXQ7CisgICAgICAgICAgIGlmKHNoaWZ0X291dCkgYmVnaW4gCisgICAgICAgICAgICAgIC8vIEhhbmRsaW5nIGJhY2t0byBiYWNrIGNhc2UgOiAKKyAgICAgICAgICAgICAgLy8gTGFzdCBUcmFuc2ZlciBiaXQgKyBOZXcgVHJhc2ZlciBMb2FkCisgICAgICAgICAgICAgIHNvIDw9IHNvX3JlZ1s3XTsKKyAgICAgICAgICAgZW5kCisgICAgICAgIGVuZCAvLyBpZiAobG9hZF9ieXRlKQorICAgICAgICBlbHNlIGJlZ2luCisgICAgICAgICAgIGlmKHNoaWZ0X291dCkgYmVnaW4KKyAgICAgICAgICAgICAgc28gPD0gc29fcmVnWzddOworICAgICAgICAgICAgICBzb19yZWcgPD0ge3NvX3JlZ1s2OjBdLDEnYjB9OworICAgICAgICAgICBlbmQgLy8gaWYgKHNoaWZ0X291dCkKKyAgICAgICAgZW5kIC8vIGVsc2U6ICFpZihsb2FkX2J5dGUpCisgICAgIGVuZCAvLyBlbHNlOiAhaWYoIXJlc2V0X24pCisgIGVuZCAvLyBhbHdheXMgQCAocG9zZWRnZSBjbGsgb3IgbmVnZWRnZSByZXNldF9uKQorCisKKy8vIElucHV0IHNoaWZ0IHJlZ2lzdGVyCisgIGFsd2F5cyBAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcmVzZXRfbikgYmVnaW4KKyAgICAgaWYoIXJlc2V0X24pIGJlZ2luCisgICAgICAgIHNpX3JlZyA8PSA4J2gwOworICAgICBlbmQKKyAgICAgZWxzZSBiZWdpbgorICAgICAgICBpZihzY2tfcGUgJiBzaGlmdF9pbikgYmVnaW4KKyAgICAgICAgICAgc2lfcmVnWzc6MF0gPD0ge3NpX3JlZ1s2OjBdLHNpfTsKKyAgICAgICAgZW5kIC8vIGlmIChzY2tfcGUgJiBzaGlmdF9pbikKKyAgICAgZW5kIC8vIGVsc2U6ICFpZighcmVzZXRfbikKKyAgZW5kIC8vIGFsd2F5cyBAIChwb3NlZGdlIGNsayBvciBuZWdlZGdlIHJlc2V0X24pCisKKworICBhc3NpZ24gYnl0ZV9pbls3OjBdID0gc2lfcmVnWzc6MF07CisgIGFzc2lnbiBjc19uWzBdID0gKGNmZ190Z3Rfc2VsWzE6MF0gPT0gMidiMDApID8gY3NfaW50X24gOiAxJ2IxOworICBhc3NpZ24gY3NfblsxXSA9IChjZmdfdGd0X3NlbFsxOjBdID09IDInYjAxKSA/IGNzX2ludF9uIDogMSdiMTsKKyAgYXNzaWduIGNzX25bMl0gPSAoY2ZnX3RndF9zZWxbMTowXSA9PSAyJ2IxMCkgPyBjc19pbnRfbiA6IDEnYjE7CisgIGFzc2lnbiBjc19uWzNdID0gKGNmZ190Z3Rfc2VsWzE6MF0gPT0gMidiMTEpID8gY3NfaW50X24gOiAxJ2IxOworICBhc3NpZ24gc2NrID0gc2NrX2ludDsKKworZW5kbW9kdWxlCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC9zc3BpbS9zcmMvc3NwaW1fdG9wLnN2IGIvdmVyaWxvZy9ydGwvc3NwaW0vc3JjL3NzcGltX3RvcC5zdgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wYzc0MGQ2Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvc3NwaW0vc3JjL3NzcGltX3RvcC5zdgpAQCAtMCwwICsxLDIwOCBAQAorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEgLCBEaW5lc2ggQW5uYXl5YSAgICAgICAgICAgICAgICAgICAgICAgICAgCisvLyAKKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogQ3JlYXRlZCBieSBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFNQSSBNYXN0ZXIgVG9wIE1vZHVsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSByaXNjZHVpbm8gY29yZXMgcHJvamVjdCAgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHBzOi8vZ2l0aHViLmNvbS9kaW5lc2hhbm5heXlhL3Jpc2NkdWluby5naXQgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRoaXMgYmxvY2sgaW50ZWdyYXRlIHRoZSBTUEkgTWFzdGVyIHJlbGF0ZWQgbW9kdWxlICAgICAgICAgIC8vLy8KKy8vLy8gICAgIC0gc3NwaW1faWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgIC0gc3NwaW1fY3RsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgIC0gc3NwaW1fY2ZnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcihzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAtIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFJldmlzaW9uIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC4xIC0gMDMgT2N0IDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgSW5pdGlhbCBTcEkgTW9kdWxlIHBpY2tlZCBmcm9tICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9jb3Jlcy90dXJibzgwNTEvICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gQ29weXJpZ2h0IChDKSAyMDAwIEF1dGhvcnMgYW5kIE9QRU5DT1JFUy5PUkcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgIC8vLy8KKy8vLy8gcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgIC8vLy8KKy8vLy8gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgIC8vLy8KKy8vLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCAgIC8vLy8KKy8vLy8gYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IC8vLy8KKy8vLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSAgIC8vLy8KKy8vLy8gbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlICAgICAgIC8vLy8KKy8vLy8gdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCAgIC8vLy8KKy8vLy8gd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAgICAgIC8vLy8KKy8vLy8gUFVSUE9TRS4gIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIC8vLy8KKy8vLy8gZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvdXJjZTsgaWYgbm90LCBkb3dubG9hZCBpdCAgIC8vLy8KKy8vLy8gZnJvbSBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvbGdwbC5zaHRtbCAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworCittb2R1bGUgc3NwaW1fdG9wICgKKyAgICAgICAgICAgaW5wdXQgIGxvZ2ljICAgICAgICAgY2xrICAgICAgICAgICwKKyAgICAgICAgICAgaW5wdXQgIGxvZ2ljICAgICAgICAgcmVzZXRfbiAgICAgICwgICAgICAgICAgCisgICAgICAgICAgIAorICAgICAgICAgICAKKyAgICAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgLy8gUmVnIEJ1cyBJbnRlcmZhY2UgU2lnbmFsCisgICAgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgIGlucHV0IGxvZ2ljICAgICAgICAgIHJlZ19jcyAgICAgICAsCisgICAgICAgICAgIGlucHV0IGxvZ2ljICAgICAgICAgIHJlZ193ciAgICAgICAsCisgICAgICAgICAgIGlucHV0IGxvZ2ljIFs3OjBdICAgIHJlZ19hZGRyICAgICAsCisgICAgICAgICAgIGlucHV0IGxvZ2ljIFszMTowXSAgIHJlZ193ZGF0YSAgICAsCisgICAgICAgICAgIGlucHV0IGxvZ2ljIFszOjBdICAgIHJlZ19iZSAgICAgICAsCisgICAgICAgICAgIAorICAgICAgICAgICAvLyBPdXRwdXRzCisgICAgICAgICAgIG91dHB1dCBsb2dpYyBbMzE6MF0gIHJlZ19yZGF0YSAgICAsCisgICAgICAgICAgIG91dHB1dCBsb2dpYyAgICAgICAgIHJlZ19hY2sgICAgICAsCisgICAgICAgICAgIAorICAgICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgLy8gTGluZSBJbnRlcmZhY2UKKyAgICAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgIAorICAgICAgICAgICBvdXRwdXQgbG9naWMgICAgICAgIHNjayAgICAgICAgICAgLCAvLyBjbG9jayBvdXQKKyAgICAgICAgICAgb3V0cHV0IGxvZ2ljICAgICAgICBzbyAgICAgICAgICAgICwgLy8gc2VyaWFsIGRhdGEgb3V0CisgICAgICAgICAgIGlucHV0ICBsb2dpYyAgICAgICAgc2kgICAgICAgICAgICAsIC8vIHNlcmlhbCBkYXRhIGluCisgICAgICAgICAgIG91dHB1dCBsb2dpYyAgICAgICAgc3NuICAgICAgICAgICAgIC8vIGNzX24KKworICAgICAgICAgICApOworIAorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTG9jYWwgZGVjbHJhdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbG9naWMgWzc6MF0gICAgICAgICAgYnl0ZV9pbiAgICAgICAgICAgICAgICAgICAgICAgOworbG9naWMgWzc6MF0gICAgICAgICAgYnl0ZV9vdXQgICAgICAgICAgICAgICAgICAgICAgOworCisKK2xvZ2ljICBbMTowXSAgICAgICAgIGNmZ190Z3Rfc2VsICAgICAgICAgICAgICAgICAgIDsKKworbG9naWMgICAgICAgICAgICAgICAgY2ZnX29wX3JlcSAgICAgICAgICAgICAgICAgICAgOyAvLyBTUEkgb3BlcmF0aW9uIHJlcXVlc3QKK2xvZ2ljICBbMTowXSAgICAgICAgIGNmZ19vcF90eXBlICAgICAgICAgICAgICAgICAgIDsgLy8gU1BJIG9wZXJhdGlvbiB0eXBlCitsb2dpYyAgWzE6MF0gICAgICAgICBjZmdfdHJhbnNmZXJfc2l6ZSAgICAgICAgICAgICA7IC8vIFNQSSB0cmFuc2ZlciBzaXplCitsb2dpYyAgWzU6MF0gICAgICAgICBjZmdfc2NrX3BlcmlvZCAgICAgICAgICAgICAgICA7IC8vIHNjayBjbG9jayBwZXJpb2QKK2xvZ2ljICBbNDowXSAgICAgICAgIGNmZ19zY2tfY3NfcGVyaW9kICAgICAgICAgICAgIDsgLy8gY3Mgc2V0dXAvaG9sZCBwZXJpb2QKK2xvZ2ljICBbNzowXSAgICAgICAgIGNmZ19jc19ieXRlICAgICAgICAgICAgICAgICAgIDsgLy8gY3MgYml0IGluZm9ybWF0aW9uCitsb2dpYyAgWzMxOjBdICAgICAgICBjZmdfZGF0YWluICAgICAgICAgICAgICAgICAgICA7IC8vIGRhdGEgZm9yIHRyYW5zZmVyCitsb2dpYyAgWzMxOjBdICAgICAgICBjZmdfZGF0YW91dCAgICAgICAgICAgICAgICAgICA7IC8vIGRhdGEgZm9yIHJlY2VpdmVkCitsb2dpYyAgICAgICAgICAgICAgICBod2FyZV9vcF9kb25lICAgICAgICAgICAgICAgICA7IC8vIG9wZXJhdGlvbiBkb25lCitsb2dpYyBbMzowXSAgICAgICAgICBjc19uICAgICAgICAgICAgICAgICAgICAgICAgICA7IC8vIGNzX24KKworYXNzaWduIHNzbiA9ICBjc19uWzBdOyAvLyBPbmx5IDEgY2hpcCBzZWxlY3Qgc3VwcG9ydGVkIGluIHJpc2NkdW5pbworCitzc3BpbV9pZiAgdV9zcGlfaWYKKyAgICAgICAgICAoCisgICAgICAgICAgLiBjbGsgICAgICAgICAgICAgICAgICAgICAgICAgKGNsayAgICAgICAgICAgICAgICAgICAgICAgICAgKSwgCisgICAgICAgICAgLiByZXNldF9uICAgICAgICAgICAgICAgICAgICAgKHJlc2V0X24gICAgICAgICAgICAgICAgICAgICAgKSwKKworICAgICAgICAgICAvLyB0b3dhcmRzIGN0cmwgaS9mCisgICAgICAgICAgLiBzY2tfcGUgICAgICAgICAgICAgICAgICAgICAgKHNja19wZSAgICAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuIHNja19pbnQgICAgICAgICAgICAgICAgICAgICAoc2NrX2ludCAgICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC4gY3NfaW50X24gICAgICAgICAgICAgICAgICAgIChjc19pbnRfbiAgICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLiBieXRlX2luICAgICAgICAgICAgICAgICAgICAgKGJ5dGVfaW4gICAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuIGxvYWRfYnl0ZSAgICAgICAgICAgICAgICAgICAobG9hZF9ieXRlICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC4gYnl0ZV9vdXQgICAgICAgICAgICAgICAgICAgIChieXRlX291dCAgICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLiBzaGlmdF9vdXQgICAgICAgICAgICAgICAgICAgKHNoaWZ0X291dCAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuIHNoaWZ0X2luICAgICAgICAgICAgICAgICAgICAoc2hpZnRfaW4gICAgICAgICAgICAgICAgICAgICApLAorCisgICAgICAgICAgLiBjZmdfdGd0X3NlbCAgICAgICAgICAgICAgICAgKGNmZ190Z3Rfc2VsICAgICAgICAgICAgICAgICAgKSwKKworICAgICAgICAgIC4gc2NrICAgICAgICAgICAgICAgICAgICAgICAgIChzY2sgICAgICAgICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLiBzbyAgICAgICAgICAgICAgICAgICAgICAgICAgKHNvICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuIHNpICAgICAgICAgICAgICAgICAgICAgICAgICAoc2kgICAgICAgICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC4gY3NfbiAgICAgICAgICAgICAgICAgICAgICAgIChjc19uICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgKTsKKworCitzc3BpbV9jdGwgIHVfc3BpX2N0cmwKKyAgICAgICAoIAorICAgICAgICAgIC4gY2xrICAgICAgICAgICAgICAgICAgICAgICAgIChjbGsgICAgICAgICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLiByZXNldF9uICAgICAgICAgICAgICAgICAgICAgKHJlc2V0X24gICAgICAgICAgICAgICAgICAgICAgKSwKKworICAgICAgICAgIC4gY2ZnX29wX3JlcSAgICAgICAgICAgICAgICAgIChjZmdfb3BfcmVxICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLiBjZmdfb3BfdHlwZSAgICAgICAgICAgICAgICAgKGNmZ19vcF90eXBlICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuIGNmZ190cmFuc2Zlcl9zaXplICAgICAgICAgICAoY2ZnX3RyYW5zZmVyX3NpemUgICAgICAgICAgICApLAorICAgICAgICAgIC4gY2ZnX3Nja19wZXJpb2QgICAgICAgICAgICAgIChjZmdfc2NrX3BlcmlvZCAgICAgICAgICAgICAgICksCisgICAgICAgICAgLiBjZmdfc2NrX2NzX3BlcmlvZCAgICAgICAgICAgKGNmZ19zY2tfY3NfcGVyaW9kICAgICAgICAgICAgKSwKKyAgICAgICAgICAuIGNmZ19jc19ieXRlICAgICAgICAgICAgICAgICAoY2ZnX2NzX2J5dGUgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC4gY2ZnX2RhdGFpbiAgICAgICAgICAgICAgICAgIChjZmdfZGF0YWluICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLiBjZmdfZGF0YW91dCAgICAgICAgICAgICAgICAgKGNmZ19kYXRhb3V0ICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuIG9wX2RvbmUgICAgICAgICAgICAgICAgICAgICAoaHdhcmVfb3BfZG9uZSAgICAgICAgICAgICAgICApLAorCisgICAgICAgICAgLiBzY2tfaW50ICAgICAgICAgICAgICAgICAgICAgKHNja19pbnQgICAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuIGNzX2ludF9uICAgICAgICAgICAgICAgICAgICAoY3NfaW50X24gICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC4gc2NrX3BlICAgICAgICAgICAgICAgICAgICAgIChzY2tfcGUgICAgICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLiBzY2tfbmUgICAgICAgICAgICAgICAgICAgICAgKHNja19uZSAgICAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuIHNoaWZ0X291dCAgICAgICAgICAgICAgICAgICAoc2hpZnRfb3V0ICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC4gc2hpZnRfaW4gICAgICAgICAgICAgICAgICAgIChzaGlmdF9pbiAgICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLiBsb2FkX2J5dGUgICAgICAgICAgICAgICAgICAgKGxvYWRfYnl0ZSAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuIGJ5dGVfb3V0ICAgICAgICAgICAgICAgICAgICAoYnl0ZV9vdXQgICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC4gYnl0ZV9pbiAgICAgICAgICAgICAgICAgICAgIChieXRlX2luICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgIAorICAgICAgICAgKTsKKworCisKKworc3NwaW1fY2ZnIHVfY2ZnICgKKworICAgICAgICAgIC4gbWNsayAgICAgICAgICAgICAgICAgICAgICAgIChjbGsgICAgICAgICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLiByZXNldF9uICAgICAgICAgICAgICAgICAgICAgKHJlc2V0X24gICAgICAgICAgICAgICAgICAgICAgKSwKKworICAgICAgICAvLyBSZWcgQnVzIEludGVyZmFjZSBTaWduYWwKKyAgICAgICAgICAuIHJlZ19jcyAgICAgICAgICAgICAgICAgICAgICAocmVnX2NzICAgICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC4gcmVnX3dyICAgICAgICAgICAgICAgICAgICAgIChyZWdfd3IgICAgICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLiByZWdfYWRkciAgICAgICAgICAgICAgICAgICAgKHJlZ19hZGRyICAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuIHJlZ193ZGF0YSAgICAgICAgICAgICAgICAgICAocmVnX3dkYXRhICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC4gcmVnX2JlICAgICAgICAgICAgICAgICAgICAgIChyZWdfYmUgICAgICAgICAgICAgICAgICAgICAgICksCisKKyAgICAgICAgICAgIC8vIE91dHB1dHMKKyAgICAgICAgICAuIHJlZ19yZGF0YSAgICAgICAgICAgICAgICAgICAocmVnX3JkYXRhICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC4gcmVnX2FjayAgICAgICAgICAgICAgICAgICAgIChyZWdfYWNrICAgICAgICAgICAgICAgICAgICAgICksCisKKworICAgICAgICAgICAvLyBjb25maWd1cmF0aW9uIHNpZ25hbAorICAgICAgICAgIC4gY2ZnX3RndF9zZWwgICAgICAgICAgICAgICAgIChjZmdfdGd0X3NlbCAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLiBjZmdfb3BfcmVxICAgICAgICAgICAgICAgICAgKGNmZ19vcF9yZXEgICAgICAgICAgICAgICAgICAgKSwgLy8gU1BJIG9wZXJhdGlvbiByZXF1ZXN0CisgICAgICAgICAgLiBjZmdfb3BfdHlwZSAgICAgICAgICAgICAgICAgKGNmZ19vcF90eXBlICAgICAgICAgICAgICAgICAgKSwgLy8gU1BJIG9wZXJhdGlvbiB0eXBlCisgICAgICAgICAgLiBjZmdfdHJhbnNmZXJfc2l6ZSAgICAgICAgICAgKGNmZ190cmFuc2Zlcl9zaXplICAgICAgICAgICAgKSwgLy8gU1BJIHRyYW5zZmVyIHNpemUKKyAgICAgICAgICAuIGNmZ19zY2tfcGVyaW9kICAgICAgICAgICAgICAoY2ZnX3Nja19wZXJpb2QgICAgICAgICAgICAgICApLCAvLyBzY2sgY2xvY2sgcGVyaW9kCisgICAgICAgICAgLiBjZmdfc2NrX2NzX3BlcmlvZCAgICAgICAgICAgKGNmZ19zY2tfY3NfcGVyaW9kICAgICAgICAgICAgKSwgLy8gY3Mgc2V0dXAvaG9sZCBwZXJpb2QKKyAgICAgICAgICAuIGNmZ19jc19ieXRlICAgICAgICAgICAgICAgICAoY2ZnX2NzX2J5dGUgICAgICAgICAgICAgICAgICApLCAvLyBjcyBiaXQgaW5mb3JtYXRpb24KKyAgICAgICAgICAuIGNmZ19kYXRhaW4gICAgICAgICAgICAgICAgICAoY2ZnX2RhdGFpbiAgICAgICAgICAgICAgICAgICApLCAvLyBkYXRhIGZvciB0cmFuc2ZlcgorICAgICAgICAgIC4gY2ZnX2RhdGFvdXQgICAgICAgICAgICAgICAgIChjZmdfZGF0YW91dCAgICAgICAgICAgICAgICAgICksIC8vIGRhdGEgZm9yIHJlY2VpdmVkCisgICAgICAgICAgLiBod2FyZV9vcF9kb25lICAgICAgICAgICAgICAgKGh3YXJlX29wX2RvbmUgICAgICAgICAgICAgICAgKSAgLy8gb3BlcmF0aW9uIGRvbmUKKworICAgICAgICApOworCitlbmRtb2R1bGUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3VhcnQvc3JjL3VhcnRfY2ZnLnN2IGIvdmVyaWxvZy9ydGwvdWFydC9zcmMvdWFydF9jZmcuc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E0ZGVhNgotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL3VhcnQvc3JjL3VhcnRfY2ZnLnN2CkBAIC0wLDAgKzEsNDA1IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEgLCBEaW5lc2ggQW5uYXl5YSAgICAgICAgICAgICAgICAgICAgICAgICAgCisvLyAKKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogQ3JlYXRlZCBieSBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFVBUlQgQ29uZmlndXJhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBZSUZpdmUgY29yZXMgcHJvamVjdCAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHBzOi8vZ2l0aHViLmNvbS9kaW5lc2hhbm5heXlhL3lpZml2ZV9yMC5naXQgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9jb3Jlcy95aWZpdmUvICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcihzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAtIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFJldmlzaW9uIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8gCisvLy8vICAgIDAuMSAtIDIwdGggSnVuZSAyMDIxLCBEaW5lc2ggQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAxLiBpbml0aWFsIHZlcnNpb24gcGlja2VkIGZyb20gICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9jb3Jlcy9vbXM4MDUxbWluaSAgICAgICAgICAvLy8vCisvLy8vICAgIDAuMiAtIDIwdGggSnVuZSAyMDIxLCBEaW5lc2ggQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIHR4IGFuZCByeCBidWZmZXIgc3RhdHVzIGFkZGVkIGludG8gcmVnNyBhbmQgcmVnOCAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIENvcHlyaWdodCAoQykgMjAwMCBBdXRob3JzIGFuZCBPUEVOQ09SRVMuT1JHICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgICAvLy8vCisvLy8vIHJlc3RyaWN0aW9uIHByb3ZpZGVkIHRoYXQgdGhpcyBjb3B5cmlnaHQgc3RhdGVtZW50IGlzIG5vdCAgICAvLy8vCisvLy8vIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSBhbmQgdGhhdCBhbnkgZGVyaXZhdGl2ZSB3b3JrIGNvbnRhaW5zICAvLy8vCisvLy8vIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLiAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgICAvLy8vCisvLy8vIGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAvLy8vCisvLy8vIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAvLy8vCisvLy8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgICAvLy8vCisvLy8vIGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSAgICAgICAvLy8vCisvLy8vIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgICAvLy8vCisvLy8vIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgICAgICAvLy8vCisvLy8vIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSAvLy8vCisvLy8vIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgICAvLy8vCisvLy8vIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBzb3VyY2U7IGlmIG5vdCwgZG93bmxvYWQgaXQgICAvLy8vCisvLy8vIGZyb20gaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2xncGwuc2h0bWwgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK21vZHVsZSB1YXJ0X2NmZyAoCisKKyAgICAgICAgICAgICBtY2xrLAorICAgICAgICAgICAgIHJlc2V0X24sCisKKyAgICAgICAgLy8gUmVnIEJ1cyBJbnRlcmZhY2UgU2lnbmFsCisgICAgICAgICAgICAgcmVnX2NzLAorICAgICAgICAgICAgIHJlZ193ciwKKyAgICAgICAgICAgICByZWdfYWRkciwKKyAgICAgICAgICAgICByZWdfd2RhdGEsCisgICAgICAgICAgICAgcmVnX2JlLAorCisgICAgICAgICAgICAvLyBPdXRwdXRzCisgICAgICAgICAgICAgcmVnX3JkYXRhLAorICAgICAgICAgICAgIHJlZ19hY2ssCisKKyAgICAgICAgIC8vIFVhcnQgVHggZmlmbyBpbnRlcmZhY2UKKyAgICAgICAgICAgICB0eF9maWZvX2Z1bGwsCisgICAgICAgICAgICAgdHhfZmlmb19mc3BhY2UsCisgICAgICAgICAgICAgdHhfZmlmb193cl9lbiwKKyAgICAgICAgICAgICB0eF9maWZvX2RhdGEsCisKKyAgICAgICAgIC8vIFVhcnQgUnggZmlmbyBpbnRlcmZhY2UKKyAgICAgICAgICAgICByeF9maWZvX2VtcHR5LAorICAgICAgICAgICAgIHJ4X2ZpZm9fZHZhbCAsCisgICAgICAgICAgICAgcnhfZmlmb19yZF9lbiwKKyAgICAgICAgICAgICByeF9maWZvX2RhdGEgLAorCisgICAgICAgLy8gY29uZmlndXJhdGlvbgorICAgICAgICAgICAgIGNmZ190eF9lbmFibGUsCisgICAgICAgICAgICAgY2ZnX3J4X2VuYWJsZSwKKyAgICAgICAgICAgICBjZmdfc3RvcF9iaXQgLAorICAgICAgICAgICAgIGNmZ19wcmlfbW9kICAsCisgICAgICAgICAgICAgY2ZnX2JhdWRfMTZ4ICwKKworICAgICAgICAgICAgIGZybV9lcnJvcl9vLAorICAgICAgICAgICAgIHBhcl9lcnJvcl9vLAorICAgICAgICAgICAgIHJ4X2ZpZm9fZnVsbF9lcnJfbworCisgICAgICAgICk7CisKKworCitpbnB1dCAgICAgICAgICAgIG1jbGs7CitpbnB1dCAgICAgICAgICAgIHJlc2V0X247CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFVhcnQgVHggZmlmbyBpbnRlcmZhY2UKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2lucHV0ICAgICAgICAgICAgdHhfZmlmb19mdWxsOworaW5wdXQgWzQ6MF0gICAgICB0eF9maWZvX2ZzcGFjZSAgICAgICAgOyAvLyBUb3RhbCBUeCBmaWZvIEZyZWUgU3BhY2UKK291dHB1dCAgICAgICAgICAgdHhfZmlmb193cl9lbjsKK291dHB1dCBbNzowXSAgICAgdHhfZmlmb19kYXRhOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBVYXJ0IFJ4IGZpZm8gaW50ZXJmYWNlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitpbnB1dCAgICAgICAgICAgIHJ4X2ZpZm9fZW1wdHk7CitpbnB1dCBbNDowXSAgICAgIHJ4X2ZpZm9fZHZhbCAgICAgICAgICA7IC8vIFRvdGFsIFJ4IGZpZm8gRGF0YSBBdmFpbGFibGUKK291dHB1dCAgICAgICAgICAgcnhfZmlmb19yZF9lbjsKK2lucHV0IFs3OjBdICAgICAgcnhfZmlmb19kYXRhOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIGNvbmZpZ3VyYXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorb3V0cHV0ICAgICAgICAgICBjZmdfdHhfZW5hYmxlICAgICAgIDsgLy8gVHggRW5hYmxlCitvdXRwdXQgICAgICAgICAgIGNmZ19yeF9lbmFibGUgICAgICAgOyAvLyBSeCBFbmFibGUKK291dHB1dCAgICAgICAgICAgY2ZnX3N0b3BfYml0ICAgICAgICA7IC8vIDAgLT4gMSBTdG9wLCAxIC0+IDIgU3RvcAorb3V0cHV0IFsxOjBdICAgICBjZmdfcHJpX21vZCAgICAgICAgIDsgLy8gcHJpb3JpdHkgbW9kZSwgMCAtPiBub3AsIDEgLT4gRXZlbiwgMiAtPiBPZGQKK291dHB1dCBbMTE6MF0gICAgY2ZnX2JhdWRfMTZ4ICAgICAgICA7IC8vIDE2eCBCYXVkIGNsb2NrIGNvbmZpZworCitpbnB1dCAgICAgICAgICAgIGZybV9lcnJvcl9vICAgICAgICAgOyAvLyBmcmFtaW5nIGVycm9yCitpbnB1dCAgICAgICAgICAgIHBhcl9lcnJvcl9vICAgICAgICAgOyAvLyBwYXIgZXJyb3IKK2lucHV0ICAgICAgICAgICAgcnhfZmlmb19mdWxsX2Vycl9vICA7IC8vIHJ4IGZpZm8gZnVsbCBlcnJvcgorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUmVnIEJ1cyBJbnRlcmZhY2UgU2lnbmFsCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoraW5wdXQgICAgICAgICAgICAgcmVnX2NzICAgICAgICAgOworaW5wdXQgICAgICAgICAgICAgcmVnX3dyICAgICAgICAgOworaW5wdXQgWzM6MF0gICAgICAgcmVnX2FkZHIgICAgICAgOworaW5wdXQgWzc6MF0gICAgICAgcmVnX3dkYXRhICAgICAgOworaW5wdXQgICAgICAgICAgICAgcmVnX2JlICAgICAgICAgOworCisvLyBPdXRwdXRzCitvdXRwdXQgWzc6MF0gICAgICByZWdfcmRhdGEgICAgICA7CitvdXRwdXQgICAgICAgICAgICByZWdfYWNrICAgICAgICA7CisKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBJbnRlcm5hbCBXaXJlIERlY2xhcmF0aW9ucworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit3aXJlICAgICAgICAgICBzd19yZF9lbjsKK3dpcmUgICAgICAgICAgIHN3X3dyX2VuOword2lyZSAgWzM6MF0gICAgc3dfYWRkciA7IC8vIGFkZHJlc3NpbmcgMTYgcmVnaXN0ZXJzCit3aXJlICAgICAgICAgICB3cl9iZSAgIDsKKworcmVnICAgWzc6MF0gIHJlZ19yZGF0YSAgICAgIDsKK3JlZyAgICAgICAgICAgcmVnX2FjayAgICAgOworCit3aXJlIFs3OjBdICAgIHJlZ18wOyAgLy8gU29mdHdhcmVfUmVnXzAKK3dpcmUgWzc6MF0gICAgcmVnXzE7ICAvLyBTb2Z0d2FyZS1SZWdfMQord2lyZSBbNzowXSAgICByZWdfMjsgIC8vIFNvZnR3YXJlLVJlZ18yCit3aXJlIFs3OjBdICAgIHJlZ18zOyAgLy8gU29mdHdhcmUtUmVnXzMKK3dpcmUgWzc6MF0gICAgcmVnXzQ7ICAvLyBTb2Z0d2FyZS1SZWdfNAord2lyZSBbNzowXSAgICByZWdfNTsgIC8vIFNvZnR3YXJlLVJlZ181Cit3aXJlIFs3OjBdICAgIHJlZ182OyAgLy8gU29mdHdhcmUtUmVnXzYKK3dpcmUgWzc6MF0gICAgcmVnXzc7ICAvLyBTb2Z0d2FyZS1SZWdfNword2lyZSBbNzowXSAgICByZWdfODsgIC8vIFNvZnR3YXJlLVJlZ184Cit3aXJlIFs3OjBdICAgIHJlZ185OyAgLy8gU29mdHdhcmUtUmVnXzkKK3dpcmUgWzc6MF0gICAgcmVnXzEwOyAvLyBTb2Z0d2FyZS1SZWdfMTAKK3dpcmUgWzc6MF0gICAgcmVnXzExOyAvLyBTb2Z0d2FyZS1SZWdfMTEKK3dpcmUgWzc6MF0gICAgcmVnXzEyOyAvLyBTb2Z0d2FyZS1SZWdfMTIKK3dpcmUgWzc6MF0gICAgcmVnXzEzOyAvLyBTb2Z0d2FyZS1SZWdfMTMKK3dpcmUgWzc6MF0gICAgcmVnXzE0OyAvLyBTb2Z0d2FyZS1SZWdfMTQKK3dpcmUgWzc6MF0gICAgcmVnXzE1OyAvLyBTb2Z0d2FyZS1SZWdfMTUKK3JlZyAgWzc6MF0gICAgcmVnX291dDsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTWFpbiBjb2RlIHN0YXJ0cyBoZXJlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEludGVybmFsIExvZ2ljIFN0YXJ0cyBoZXJlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgYXNzaWduIHN3X2FkZHIgICAgICAgPSByZWdfYWRkciBbMzowXTsKKyAgICBhc3NpZ24gc3dfcmRfZW4gICAgICA9IHJlZ19jcyAmICFyZWdfd3I7CisgICAgYXNzaWduIHN3X3dyX2VuICAgICAgPSByZWdfY3MgJiByZWdfd3I7CisgICAgYXNzaWduIHdyX2JlICAgICAgICAgPSByZWdfYmU7CisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUmVhZCBwYXRoIG11eAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithbHdheXMgQCAocG9zZWRnZSBtY2xrIG9yIG5lZ2VkZ2UgcmVzZXRfbikKK2JlZ2luIDogcHJlZ19vdXRfU2VxCisgICBpZiAocmVzZXRfbiA9PSAxJ2IwKQorICAgYmVnaW4KKyAgICAgIHJlZ19yZGF0YSBbNzowXSAgPD0gOCdoMDA7CisgICAgICByZWdfYWNrICAgICAgICAgIDw9IDEnYjA7CisgICBlbmQKKyAgIGVsc2UgaWYgKHN3X3JkX2VuICYmICFyZWdfYWNrKSAKKyAgIGJlZ2luCisgICAgICByZWdfcmRhdGEgWzc6MF0gIDw9IHJlZ19vdXQgWzc6MF07CisgICAgICByZWdfYWNrICAgICAgICAgIDw9IDEnYjE7CisgICBlbmQKKyAgIGVsc2UgaWYgKHN3X3dyX2VuICYmICFyZWdfYWNrKSAKKyAgICAgIHJlZ19hY2sgICAgICAgICAgPD0gMSdiMTsKKyAgIGVsc2UKKyAgIGJlZ2luCisgICAgICByZWdfYWNrICAgICAgICA8PSAxJ2IwOworICAgZW5kCitlbmQKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyByZWdpc3RlciByZWFkIGVuYWJsZSBhbmQgd3JpdGUgZW5hYmxlIGRlY29kaW5nIGxvZ2ljCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXJlICAgc3dfd3JfZW5fMCA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNCdoMCk7Cit3aXJlICAgc3dfcmRfZW5fMCA9IHN3X3JkX2VuICYgKHN3X2FkZHIgPT0gNCdoMCk7Cit3aXJlICAgc3dfd3JfZW5fMSA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNCdoMSk7Cit3aXJlICAgc3dfcmRfZW5fMSA9IHN3X3JkX2VuICYgKHN3X2FkZHIgPT0gNCdoMSk7Cit3aXJlICAgc3dfd3JfZW5fMiA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNCdoMik7Cit3aXJlICAgc3dfcmRfZW5fMiA9IHN3X3JkX2VuICYgKHN3X2FkZHIgPT0gNCdoMik7Cit3aXJlICAgc3dfd3JfZW5fMyA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNCdoMyk7Cit3aXJlICAgc3dfcmRfZW5fMyA9IHN3X3JkX2VuICYgKHN3X2FkZHIgPT0gNCdoMyk7Cit3aXJlICAgc3dfd3JfZW5fNCA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNCdoNCk7Cit3aXJlICAgc3dfcmRfZW5fNCA9IHN3X3JkX2VuICYgKHN3X2FkZHIgPT0gNCdoNCk7Cit3aXJlICAgc3dfd3JfZW5fNSA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNCdoNSk7Cit3aXJlICAgc3dfcmRfZW5fNSA9IHN3X3JkX2VuICYgKHN3X2FkZHIgPT0gNCdoNSk7Cit3aXJlICAgc3dfd3JfZW5fNiA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNCdoNik7Cit3aXJlICAgc3dfcmRfZW5fNiA9IHN3X3JkX2VuICYgKHN3X2FkZHIgPT0gNCdoNik7Cit3aXJlICAgc3dfd3JfZW5fNyA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNCdoNyk7Cit3aXJlICAgc3dfcmRfZW5fNyA9IHN3X3JkX2VuICYgKHN3X2FkZHIgPT0gNCdoNyk7Cit3aXJlICAgc3dfd3JfZW5fOCA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNCdoOCk7Cit3aXJlICAgc3dfcmRfZW5fOCA9IHN3X3JkX2VuICYgKHN3X2FkZHIgPT0gNCdoOCk7Cit3aXJlICAgc3dfd3JfZW5fOSA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNCdoOSk7Cit3aXJlICAgc3dfcmRfZW5fOSA9IHN3X3JkX2VuICYgKHN3X2FkZHIgPT0gNCdoOSk7Cit3aXJlICAgc3dfd3JfZW5fMTAgPSBzd193cl9lbiAmIChzd19hZGRyID09IDQnaEEpOword2lyZSAgIHN3X3JkX2VuXzEwID0gc3dfcmRfZW4gJiAoc3dfYWRkciA9PSA0J2hBKTsKK3dpcmUgICBzd193cl9lbl8xMSA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNCdoQik7Cit3aXJlICAgc3dfcmRfZW5fMTEgPSBzd19yZF9lbiAmIChzd19hZGRyID09IDQnaEIpOword2lyZSAgIHN3X3dyX2VuXzEyID0gc3dfd3JfZW4gJiAoc3dfYWRkciA9PSA0J2hDKTsKK3dpcmUgICBzd19yZF9lbl8xMiA9IHN3X3JkX2VuICYgKHN3X2FkZHIgPT0gNCdoQyk7Cit3aXJlICAgc3dfd3JfZW5fMTMgPSBzd193cl9lbiAmIChzd19hZGRyID09IDQnaEQpOword2lyZSAgIHN3X3JkX2VuXzEzID0gc3dfcmRfZW4gJiAoc3dfYWRkciA9PSA0J2hEKTsKK3dpcmUgICBzd193cl9lbl8xNCA9IHN3X3dyX2VuICYgKHN3X2FkZHIgPT0gNCdoRSk7Cit3aXJlICAgc3dfcmRfZW5fMTQgPSBzd19yZF9lbiAmIChzd19hZGRyID09IDQnaEUpOword2lyZSAgIHN3X3dyX2VuXzE1ID0gc3dfd3JfZW4gJiAoc3dfYWRkciA9PSA0J2hGKTsKK3dpcmUgICBzd19yZF9lbl8xNSA9IHN3X3JkX2VuICYgKHN3X2FkZHIgPT0gNCdoRik7CisKKworYWx3YXlzIEAoICopCitiZWdpbiA6IHByZWdfc2VsX0NvbQorCisgIHJlZ19vdXQgWzc6MF0gPSA4J2QwOworCisgIGNhc2UgKHN3X2FkZHIgWzM6MF0pCisgICAgNCdiMDAwMCA6IHJlZ19vdXQgWzc6MF0gPSByZWdfMCBbNzowXTsgICAgIAorICAgIDQnYjAwMDEgOiByZWdfb3V0IFs3OjBdID0gcmVnXzEgWzc6MF07ICAgIAorICAgIDQnYjAwMTAgOiByZWdfb3V0IFs3OjBdID0gcmVnXzIgWzc6MF07ICAgICAKKyAgICA0J2IwMDExIDogcmVnX291dCBbNzowXSA9IHJlZ18zIFs3OjBdOyAgICAKKyAgICA0J2IwMTAwIDogcmVnX291dCBbNzowXSA9IHJlZ180IFs3OjBdOyAgICAKKyAgICA0J2IwMTAxIDogcmVnX291dCBbNzowXSA9IHJlZ181IFs3OjBdOyAgICAKKyAgICA0J2IwMTEwIDogcmVnX291dCBbNzowXSA9IHJlZ182IFs3OjBdOyAgICAKKyAgICA0J2IwMTExIDogcmVnX291dCBbNzowXSA9IHJlZ183IFs3OjBdOyAgICAKKyAgICA0J2IxMDAwIDogcmVnX291dCBbNzowXSA9IHJlZ184IFs3OjBdOyAgICAKKyAgICA0J2IxMDAxIDogcmVnX291dCBbNzowXSA9IHJlZ185IFs3OjBdOyAgICAKKyAgICA0J2IxMDEwIDogcmVnX291dCBbNzowXSA9IHJlZ18xMCBbNzowXTsgICAKKyAgICA0J2IxMDExIDogcmVnX291dCBbNzowXSA9IHJlZ18xMSBbNzowXTsgICAKKyAgICA0J2IxMTAwIDogcmVnX291dCBbNzowXSA9IHJlZ18xMiBbNzowXTsgICAKKyAgICA0J2IxMTAxIDogcmVnX291dCBbNzowXSA9IHJlZ18xMyBbNzowXTsKKyAgICA0J2IxMTEwIDogcmVnX291dCBbNzowXSA9IHJlZ18xNCBbNzowXTsKKyAgICA0J2IxMTExIDogcmVnX291dCBbNzowXSA9IHJlZ18xNSBbNzowXTsgCisgIGVuZGNhc2UKK2VuZAorCisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gSW5kaXZpZHVhbCByZWdpc3RlciBhc3NpZ25tZW50cworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTG9naWMgZm9yIFJlZ2lzdGVyIDAgOiB1YXJ0IENvbnRyb2wgUmVnaXN0ZXIKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpcmUgWzE6MF0gICBjZmdfcHJpX21vZCAgICAgPSByZWdfMFs0OjNdOyAvLyBwcmlvcml0eSBtb2RlLCAwIC0+IG5vcCwgMSAtPiBFdmVuLCAyIC0+IE9kZAord2lyZSAgICAgICAgIGNmZ19zdG9wX2JpdCAgICA9IHJlZ18wWzJdOyAgIC8vIDAgLT4gMSBTdG9wLCAxIC0+IDIgU3RvcAord2lyZSAgICAgICAgIGNmZ19yeF9lbmFibGUgICA9IHJlZ18wWzFdOyAgIC8vIFJ4IEVuYWJsZQord2lyZSAgICAgICAgIGNmZ190eF9lbmFibGUgICA9IHJlZ18wWzBdOyAgIC8vIFR4IEVuYWJsZQorCitnZW5lcmljX3JlZ2lzdGVyICMoNSwwICApIHVfdWFydF9jdHJsX2JlMCAoCisJICAgICAgLndlICAgICAgICAgICAgKHs1e3N3X3dyX2VuXzAgJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyX2JlICAgfX0gICksCQkgCisJICAgICAgLmRhdGFfaW4gICAgICAgKHJlZ193ZGF0YVs0OjBdICAgICksCisJICAgICAgLnJlc2V0X24gICAgICAgKHJlc2V0X24gICAgICAgICAgICksCisJICAgICAgLmNsayAgICAgICAgICAgKG1jbGsgICAgICAgICAgICAgICksCisJICAgICAgCisJICAgICAgLy9MaXN0IG9mIE91dHMKKwkgICAgICAuZGF0YV9vdXQgICAgICAocmVnXzBbNDowXSAgICAgICAgKQorICAgICAgICAgICk7CisKKworYXNzaWduIHJlZ18wWzc6NV0gPSAzJ2gwOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBMb2dpYyBmb3IgUmVnaXN0ZXIgMSA6IHVhcnQgaW50ZXJydXB0IHN0YXR1cworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorc3RhdF9yZWdpc3RlciB1X2ludHJfYml0MCAoCisJCSAvL2lucHV0cworCQkgLiBjbGsgICAgICAgIChtY2xrICAgICAgICAgICAgKSwKKwkJIC4gcmVzZXRfbiAgICAocmVzZXRfbiAgICAgICAgICksCisJCSAuIGNwdV93ZSAgICAgKHN3X3dyX2VuXzEgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyX2JlICAgICAgICApLAkJIAorCQkgLiBjcHVfYWNrICAgIChyZWdfd2RhdGFbMF0gICAgKSwKKwkJIC4gaHdhcmVfcmVxICAoZnJtX2Vycm9yX28gICAgICksCisJCSAKKwkJIC8vb3V0cHV0cworCQkgLiBkYXRhX291dCAgIChyZWdfMVswXSAgICAgICAgKQorCQkgKTsKKworc3RhdF9yZWdpc3RlciB1X2ludHJfYml0MSAoCisJCSAvL2lucHV0cworCQkgLiBjbGsgICAgICAgIChtY2xrICAgICAgICAgICAgKSwKKwkJIC4gcmVzZXRfbiAgICAocmVzZXRfbiAgICAgICAgICksCisJCSAuIGNwdV93ZSAgICAgKHN3X3dyX2VuXzEgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyX2JlICAgICAgICApLAkJIAorCQkgLiBjcHVfYWNrICAgIChyZWdfd2RhdGFbMV0gICAgKSwKKwkJIC4gaHdhcmVfcmVxICAocGFyX2Vycm9yX28gICAgICksCisJCSAKKwkJIC8vb3V0cHV0cworCQkgLiBkYXRhX291dCAgIChyZWdfMVsxXSAgICAgICAgKQorCQkgKTsKKworc3RhdF9yZWdpc3RlciB1X2ludHJfYml0MiAoCisJCSAvL2lucHV0cworCQkgLiBjbGsgICAgICAgIChtY2xrICAgICAgICAgICAgICAgICksCisJCSAuIHJlc2V0X24gICAgKHJlc2V0X24gICAgICAgICAgICAgKSwKKwkJIC4gY3B1X3dlICAgICAoc3dfd3JfZW5fMSAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JfYmUgICAgICAgICAgICApLAkJIAorCQkgLiBjcHVfYWNrICAgIChyZWdfd2RhdGFbMl0gICAgICAgICksCisJCSAuIGh3YXJlX3JlcSAgKHJ4X2ZpZm9fZnVsbF9lcnJfbyAgKSwKKwkJIAorCQkgLy9vdXRwdXRzCisJCSAuIGRhdGFfb3V0ICAgKHJlZ18xWzJdICAgICAgICAgICAgKQorCQkgKTsKKworYXNzaWduIHJlZ18xWzc6M10gPSA1J2gwOworCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIExvZ2ljIGZvciBSZWdpc3RlciAyIDogIEJhdWQgUmF0ZSBDb250cm9sCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXJlIFsxMTowXSAgIGNmZ19iYXVkXzE2eCAgICA9IHtyZWdfM1szOjBdLHJlZ18yWzc6MF19OyAKKworZ2VuZXJpY19yZWdpc3RlciAjKDgsMCAgKSB1X3VhcnRfY3RybF9yZWcyICgKKwkgICAgICAud2UgICAgICAgICAgICAoezh7c3dfd3JfZW5fMiAmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JfYmUgICB9fSAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAgICAocmVnX3dkYXRhWzc6MF0gICAgKSwKKwkgICAgICAucmVzZXRfbiAgICAgICAocmVzZXRfbiAgICAgICAgICAgKSwKKwkgICAgICAuY2xrICAgICAgICAgICAobWNsayAgICAgICAgICAgICAgKSwKKwkgICAgICAKKwkgICAgICAvL0xpc3Qgb2YgT3V0cworCSAgICAgIC5kYXRhX291dCAgICAgIChyZWdfMls3OjBdICAgICAgICApCisgICAgICAgICAgKTsKKworZ2VuZXJpY19yZWdpc3RlciAjKDQsMCAgKSB1X3VhcnRfY3RybF9yZWczICgKKwkgICAgICAud2UgICAgICAgICAgICAoezR7c3dfd3JfZW5fMyAmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JfYmUgICB9fSAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAgICAocmVnX3dkYXRhWzM6MF0gICAgKSwKKwkgICAgICAucmVzZXRfbiAgICAgICAocmVzZXRfbiAgICAgICAgICAgKSwKKwkgICAgICAuY2xrICAgICAgICAgICAobWNsayAgICAgICAgICAgICAgKSwKKwkgICAgICAKKwkgICAgICAvL0xpc3Qgb2YgT3V0cworCSAgICAgIC5kYXRhX291dCAgICAgIChyZWdfM1szOjBdICAgICAgICApCisgICAgICAgICAgKTsKKworYXNzaWduIHJlZ18zWzc6NF0gPSA0J2gwOworCisKKy8vIHJlZy00ICBzdGF0dXMKKy8vCithc3NpZ24gcmVnXzRbNzowXSA9IHs2J2gwLHJ4X2ZpZm9fZW1wdHksdHhfZmlmb19mdWxsfTsKKworLy8gcmVnXzUgaXMgdHhfZmlmbyB3cgorYXNzaWduIHR4X2ZpZm9fd3JfZW4gID0gc3dfd3JfZW5fNSAmIHJlZ19hY2sgJiAhdHhfZmlmb19mdWxsOworYXNzaWduIHR4X2ZpZm9fZGF0YSAgID0gcmVnX3dkYXRhWzc6MF07CisKKy8vIHJlZ182IGlzIHJ4X2ZpZm8gcmVhZAorLy8gcnhfZmlmbyByZWFkIGRhdGEKK2Fzc2lnbiByZWdfNls3OjBdID0ge3J4X2ZpZm9fZGF0YX07Cithc3NpZ24gIHJ4X2ZpZm9fcmRfZW4gPSBzd19yZF9lbl82ICYgcmVnX2FjayAmICFyeF9maWZvX2VtcHR5OworCithc3NpZ24gcmVnXzdbNzowXSA9IHszJ2gwLHR4X2ZpZm9fZnNwYWNlfTsgLy8gdHggZmlmbyBmcmVlIHNwYWNlCithc3NpZ24gcmVnXzhbNzowXSA9IHszJ2gwLHJ4X2ZpZm9fZHZhbH07ICAgLy8gcnggZmlmbyBkYXRhIGF2YWlsYWJsZQorCitlbmRtb2R1bGUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3VhcnQvc3JjL3VhcnRfY29yZS5zdiBiL3Zlcmlsb2cvcnRsL3VhcnQvc3JjL3VhcnRfY29yZS5zdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDhjZDM1Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvdWFydC9zcmMvdWFydF9jb3JlLnN2CkBAIC0wLDAgKzEsMzM0IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEgLCBEaW5lc2ggQW5uYXl5YSAgICAgICAgICAgICAgICAgICAgICAgICAgCisvLyAKKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogQ3JlYXRlZCBieSBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFVBUlQgQ09SRSB3aXRoIFRYL1JYIDE2IEJ5dGUgQnVmZmVyICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBZSUZpdmUgY29yZXMgcHJvamVjdCAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHBzOi8vZ2l0aHViLmNvbS9kaW5lc2hhbm5heXlhL3lpZml2ZV9yMC5naXQgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9jb3Jlcy95aWZpdmUvICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcihzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAtIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFJldmlzaW9uIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC4xIC0gMjB0aCBKdW5lIDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgIDEuIGluaXRpYWwgdmVyc2lvbiBwaWNrZWQgZnJvbSAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2NvcmVzL29tczgwNTFtaW5pICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC4yIC0gMjV0aCBKdW5lIDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgIFBhZCBsb2dpYyBtb3ZlZCBpbnNpZGUgY29yZSB0byBhdm9pZCBjb21ibyBsb2dpYyBhdCAgIC8vLy8KKy8vLy8gICAgICAgIHNvYyBkaWdpdGFsIGNvcmUgbGV2ZWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gQ29weXJpZ2h0IChDKSAyMDAwIEF1dGhvcnMgYW5kIE9QRU5DT1JFUy5PUkcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgIC8vLy8KKy8vLy8gcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgIC8vLy8KKy8vLy8gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgIC8vLy8KKy8vLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCAgIC8vLy8KKy8vLy8gYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IC8vLy8KKy8vLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSAgIC8vLy8KKy8vLy8gbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlICAgICAgIC8vLy8KKy8vLy8gdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCAgIC8vLy8KKy8vLy8gd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAgICAgIC8vLy8KKy8vLy8gUFVSUE9TRS4gIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIC8vLy8KKy8vLy8gZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvdXJjZTsgaWYgbm90LCBkb3dubG9hZCBpdCAgIC8vLy8KKy8vLy8gZnJvbSBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvbGdwbC5zaHRtbCAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworbW9kdWxlIHVhcnRfY29yZSAKKworICAgICAoICAKKworICAgaW5wdXQgbG9naWMgICAgICAgICBhcnN0X24gICwgLy8gYXN5bmMgcmVzZXQKKyAgIGlucHV0IGxvZ2ljICAgICAgICAgYXBwX2NsayAsCisKKyAgICAgICAgLy8gUmVnIEJ1cyBJbnRlcmZhY2UgU2lnbmFsCisgICBpbnB1dCBsb2dpYyAgICAgICAgIHJlZ19jcywKKyAgIGlucHV0IGxvZ2ljICAgICAgICAgcmVnX3dyLAorICAgaW5wdXQgbG9naWMgWzM6MF0gICByZWdfYWRkciwKKyAgIGlucHV0IGxvZ2ljIFs3OjBdICAgcmVnX3dkYXRhLAorICAgaW5wdXQgbG9naWMgICAgICAgICByZWdfYmUsCisKKyAgICAgICAgLy8gT3V0cHV0cworICAgb3V0cHV0IGxvZ2ljIFs3OjBdICByZWdfcmRhdGEsCisgICBvdXRwdXQgbG9naWMgICAgICAgIHJlZ19hY2ssCisKKyAgICAgICAvLyBQYWQgQ29udHJvbAorICAgaW5wdXQgIGxvZ2ljICAgICAgICByeGQsCisgICBvdXRwdXQgbG9naWMgICAgICAgIHR4ZAorCisgICAgICk7CisKKworCisKK3BhcmFtZXRlciBXICA9IDgnZDg7CitwYXJhbWV0ZXIgRFAgPSA4J2QxNjsKK3BhcmFtZXRlciBBVyA9IChEUCA9PSAyKSAgID8gMSA6IAorCSAgICAgICAoRFAgPT0gNCkgICA/IDIgOgorICAgICAgICAgICAgICAgKERQID09IDgpICAgPyAzIDoKKyAgICAgICAgICAgICAgIChEUCA9PSAxNikgID8gNCA6CisgICAgICAgICAgICAgICAoRFAgPT0gMzIpICA/IDUgOgorICAgICAgICAgICAgICAgKERQID09IDY0KSAgPyA2IDoKKyAgICAgICAgICAgICAgIChEUCA9PSAxMjgpID8gNyA6CisgICAgICAgICAgICAgICAoRFAgPT0gMjU2KSA/IDggOiAwOworCisKKworLy8gV2lyZSBEZWNsYXJhdGlvbgord2lyZSAgICAgICAgICAgIGFwcF9yZXNldF9uICAgICAgIDsKK3dpcmUgICAgICAgICAgICBsaW5lX3Jlc2V0X24gICAgICA7CisKK3dpcmUgW1ctMTogMF0gICB0eF9maWZvX3JkX2RhdGE7Cit3aXJlIFtXLTE6IDBdICAgcnhfZmlmb193cl9kYXRhOword2lyZSBbVy0xOiAwXSAgIGFwcF9yeGZpZm9fZGF0YTsKK3dpcmUgW1ctMTogMF0gICBhcHBfdHhmaWZvX2RhdGE7Cit3aXJlIFsxICA6IDBdICAgZXJyb3JfaW5kOworCisvLyBXaXJlIAord2lyZSAgICAgICAgICAgIGNmZ190eF9lbmFibGUgICAgICAgIDsgLy8gVHggRW5hYmxlCit3aXJlICAgICAgICAgICAgY2ZnX3J4X2VuYWJsZSAgICAgICAgOyAvLyBSeCBFbmFibGUKK3dpcmUgICAgICAgICAgICBjZmdfc3RvcF9iaXQgICAgICAgICA7IC8vIDAgLT4gMSBTdG9wLCAxIC0+IDIgU3RvcAord2lyZSAgIFsxOjBdICAgIGNmZ19wcmlfbW9kICAgICAgICAgIDsgLy8gcHJpb3JpdHkgbW9kZSwgMCAtPiBub3AsIDEgLT4gRXZlbiwgMiAtPiBPZGQKKword2lyZSAgICAgICAgICAgIGZybV9lcnJvcl9vICAgICAgICAgIDsgLy8gZnJhbWluZyBlcnJvcgord2lyZSAgICAgICAgICAgIHBhcl9lcnJvcl9vICAgICAgICAgIDsgLy8gcGFyIGVycm9yCit3aXJlICAgICAgICAgICAgcnhfZmlmb19mdWxsX2Vycl9vICAgOyAvLyByeCBmaWZvIGZ1bGwgZXJyb3IKKword2lyZSAgIFsxMTowXSAgIGNmZ19iYXVkXzE2eCAgICAgICAgIDsgLy8gMTZ4IEJhdWQgY2xvY2sgZ2VuZXJhdGlvbgord2lyZSAgICAgICAgICAgIHJ4X2ZpZm9fd3JfZnVsbCAgICAgIDsKK3dpcmUgICAgICAgICAgICB0eF9maWZvX3JkX2VtcHR5ICAgICA7Cit3aXJlICAgICAgICAgICAgdHhfZmlmb19yZCAgICAgICAgICAgOword2lyZSAgICAgICAgICAgYXBwX3J4Zmlmb19lbXB0eSAgICAgIDsKK3dpcmUgICAgICAgICAgIGFwcF9yeGZpZm9fcmRfZW4gICAgICA7Cit3aXJlICAgICAgICAgICBhcHBfdHhfZmlmb19mdWxsICAgICAgOword2lyZSAgICAgICAgICAgcnhfZmlmb193ciAgICAgICAgICAgIDsKK3dpcmUgICAgICAgICAgIHR4X2ZpZm9fd3JfZW4gICAgICAgICA7Cit3aXJlIFtBVzowXSAgICB0eF9maWZvX2ZzcGFjZSAgICAgICAgOyAvLyBUb3RhbCBUeCBmaWZvIEZyZWUgU3BhY2UKK3dpcmUgW0FXOjBdICAgIHJ4X2ZpZm9fZHZhbCAgICAgICAgICA7IC8vIFRvdGFsIFJ4IGZpZm8gRGF0YSBBdmFpbGFibGUKK3dpcmUgICAgICAgICAgIHNpX3NzICAgICAgICAgICAgICAgICA7CisKKworCit1YXJ0X2NmZyB1X2NmZyAoCisKKyAgICAgICAgICAgICAuIG1jbGsgICAgICAgICAgICAgICAgKGFwcF9jbGspLAorICAgICAgICAgICAgIC4gcmVzZXRfbiAgICAgICAgICAgICAoYXBwX3Jlc2V0X24pLAorCisgICAgICAgIC8vIFJlZyBCdXMgSW50ZXJmYWNlIFNpZ25hbAorICAgICAgICAgICAgIC4gcmVnX2NzICAgICAgICAgICAgICAocmVnX2NzKSwKKyAgICAgICAgICAgICAuIHJlZ193ciAgICAgICAgICAgICAgKHJlZ193ciksCisgICAgICAgICAgICAgLiByZWdfYWRkciAgICAgICAgICAgIChyZWdfYWRkciksCisgICAgICAgICAgICAgLiByZWdfd2RhdGEgICAgICAgICAgIChyZWdfd2RhdGEpLAorICAgICAgICAgICAgIC4gcmVnX2JlICAgICAgICAgICAgICAocmVnX2JlKSwKKworICAgICAgICAgICAgLy8gT3V0cHV0cworICAgICAgICAgICAgLiByZWdfcmRhdGEgICAgICAgICAgIChyZWdfcmRhdGEpLAorICAgICAgICAgICAgLiByZWdfYWNrICAgICAgICAgICAgIChyZWdfYWNrKSwKKworCisgICAgICAgLy8gY29uZmlndXJhdGlvbgorICAgICAgICAgICAgLiBjZmdfdHhfZW5hYmxlICAgICAgIChjZmdfdHhfZW5hYmxlKSwKKyAgICAgICAgICAgIC4gY2ZnX3J4X2VuYWJsZSAgICAgICAoY2ZnX3J4X2VuYWJsZSksCisgICAgICAgICAgICAuIGNmZ19zdG9wX2JpdCAgICAgICAgKGNmZ19zdG9wX2JpdCksCisgICAgICAgICAgICAuIGNmZ19wcmlfbW9kICAgICAgICAgKGNmZ19wcmlfbW9kKSwKKworICAgICAgICAgICAgLiBjZmdfYmF1ZF8xNnggICAgICAgIChjZmdfYmF1ZF8xNngpLCAgCisKKyAgICAgICAgICAgIC4gdHhfZmlmb19mdWxsICAgICAgICAoYXBwX3R4X2ZpZm9fZnVsbCksCisgICAgICAgICAgICAgLnR4X2ZpZm9fZnNwYWNlICAgICAgKHR4X2ZpZm9fZnNwYWNlICksCisgICAgICAgICAgICAuIHR4X2ZpZm9fd3JfZW4gICAgICAgKHR4X2ZpZm9fd3JfZW4pLAorICAgICAgICAgICAgLiB0eF9maWZvX2RhdGEgICAgICAgIChhcHBfdHhmaWZvX2RhdGEpLAorCisgICAgICAgICAgICAuIHJ4X2ZpZm9fZW1wdHkgICAgICAgKGFwcF9yeGZpZm9fZW1wdHkpLAorICAgICAgICAgICAgIC5yeF9maWZvX2R2YWwgICAgICAgIChyeF9maWZvX2R2YWwgICApLAorICAgICAgICAgICAgLiByeF9maWZvX3JkX2VuICAgICAgIChhcHBfcnhmaWZvX3JkX2VuKSwKKyAgICAgICAgICAgIC4gcnhfZmlmb19kYXRhICAgICAgICAoYXBwX3J4Zmlmb19kYXRhKSAsCisKKyAgICAgICAgICAgIC4gZnJtX2Vycm9yX28gICAgICAgICAoZnJtX2Vycm9yX28pLAorICAgICAgICAgICAgLiBwYXJfZXJyb3JfbyAgICAgICAgIChwYXJfZXJyb3JfbyksCisgICAgICAgICAgICAuIHJ4X2ZpZm9fZnVsbF9lcnJfbyAgKHJ4X2ZpZm9fZnVsbF9lcnJfbykKKworICAgICAgICApOworCisKKy8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKy8vIDE2eCBCYXVkIGNsb2NrIGdlbmVyYXRpb24KKy8vIEV4YW1wbGU6IHRvIGdlbmVyYXRlIDE5MjAwIEJhdWQgY2xvY2sgZnJvbSA1ME1oeiBMaW5rIGNsb2NrCisvLyAgICA1MCAqIDEwMDAgKiAxMDAwIC8gKDIgKyBjZmdfYmF1ZF8xNngpID0gMTkyMDAgKiAxNgorLy8gICAgY2ZnX2JhdWRfMTZ4ID0gMHhBMCAoMTYwKQorLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKword2lyZSBsaW5lX2Nsa18xNnhfaW47CisKKy8vIE9wZW5Tb3VyY2UgQ1RTIHRvb2wgZG9lcyBub3Qgd29yayB3aXRoIGJ1ZmZlciBhcyBzb3VyY2UgcG9pbnQKKy8vIGNoYW5nZWQgYnVmIHRvIG1heCB3aXRoIHNlbGVjdCB0aWVkPTAKKy8vY3RlY2hfY2xrX2J1ZiB1X2xpbmVjbGtfYnVmICAoLkEobGluZV9jbGtfMTZ4X2luKSwgIC5YKGxpbmVfY2xrXzE2eCkpOworY3RlY2hfbXV4MngxIHVfbGluZWNsa19idWYgICguQTAobGluZV9jbGtfMTZ4X2luKSwgLkExKDEnYjApLCAuUygxJ2IwKSwgLlgobGluZV9jbGtfMTZ4KSk7CisKK2Nsa19jdGwgIygxMSkgdV9jbGtfY3RsICgKKyAgIC8vIE91dHB1dHMKKyAgICAgICAuY2xrX28gICAgICAgICAgKGxpbmVfY2xrXzE2eF9pbiksCisKKyAgIC8vIElucHV0cworICAgICAgIC5tY2xrICAgICAgICAgICAoYXBwX2NsayksCisgICAgICAgLnJlc2V0X24gICAgICAgIChhcHBfcmVzZXRfbiksIAorICAgICAgIC5jbGtfZGl2X3JhdGlvICAoY2ZnX2JhdWRfMTZ4KQorICAgKTsKKworLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworLy8gQXBwbGljYXRpb24gUmVzZXQgU3luY2hyb25pemF0aW9uCisvLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCityZXNldF9zeW5jICB1X2FwcF9yc3QgKAorCSAgICAgIC5zY2FuX21vZGUgICgxJ2IwICAgICAgICAgICApLAorICAgICAgICAgICAgICAuZGNsayAgICAgICAoYXBwX2NsayAgICAgICAgKSwgLy8gRGVzdGluYXRpb24gY2xvY2sgZG9tYWluCisJICAgICAgLmFyc3RfbiAgICAgKGFyc3RfbiAgICAgICAgICksIC8vIGFjdGl2ZSBsb3cgYXN5bmMgcmVzZXQKKyAgICAgICAgICAgICAgLnNyc3RfbiAgICAgKGFwcF9yZXNldF9uICAgICkKKyAgICAgICAgICApOworCisvLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisvLyBMaW5lIFJlc2V0IFN5bmNocm9uaXphdGlvbgorLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworcmVzZXRfc3luYyAgdV9saW5lX3JzdCAoCisJICAgICAgLnNjYW5fbW9kZSAgKDEnYjAgICAgICAgICAgICksCisgICAgICAgICAgICAgIC5kY2xrICAgICAgIChsaW5lX2Nsa18xNnggICApLCAvLyBEZXN0aW5hdGlvbiBjbG9jayBkb21haW4KKwkgICAgICAuYXJzdF9uICAgICAoYXJzdF9uICAgICAgICAgKSwgLy8gYWN0aXZlIGxvdyBhc3luYyByZXNldAorICAgICAgICAgICAgICAuc3JzdF9uICAgICAobGluZV9yZXNldF9uICAgKQorICAgICAgICAgICk7CisKKwordWFydF90eGZzbSB1X3R4ZnNtICgKKyAgICAgICAgICAgICAgIC5yZXNldF9uICAgICAgICAgICAoIGxpbmVfcmVzZXRfbiAgICAgICksCisgICAgICAgICAgICAgICAuYmF1ZF9jbGtfMTZ4ICAgICAgKCBsaW5lX2Nsa18xNnggICAgICApLAorCisgICAgICAgICAgICAgICAuY2ZnX3R4X2VuYWJsZSAgICAgKCBjZmdfdHhfZW5hYmxlICAgICApLAorICAgICAgICAgICAgICAgLmNmZ19zdG9wX2JpdCAgICAgICggY2ZnX3N0b3BfYml0ICAgICAgKSwKKyAgICAgICAgICAgICAgIC5jZmdfcHJpX21vZCAgICAgICAoIGNmZ19wcmlfbW9kICAgICAgICksCisKKyAgICAgICAvLyBGSUZPIGNvbnRyb2wgc2lnbmFsCisgICAgICAgICAgICAgICAuZmlmb19lbXB0eSAgICAgICAgKCB0eF9maWZvX3JkX2VtcHR5ICApLAorICAgICAgICAgICAgICAgLmZpZm9fcmQgICAgICAgICAgICggdHhfZmlmb19yZCAgICAgICAgKSwKKyAgICAgICAgICAgICAgIC5maWZvX2RhdGEgICAgICAgICAoIHR4X2ZpZm9fcmRfZGF0YSAgICksCisKKyAgICAgICAgICAvLyBMaW5lIEludGVyZmFjZQorICAgICAgICAgICAgICAgLnNvICAgICAgICAgICAgICAgICggdHhkICAgICAgICAgICAgICAgKQorICAgICAgICAgICk7CisKKwordWFydF9yeGZzbSB1X3J4ZnNtICgKKyAgICAgICAgICAgICAgIC5yZXNldF9uICAgICAgICAgICAoICBsaW5lX3Jlc2V0X24gICAgICksCisgICAgICAgICAgICAgICAuYmF1ZF9jbGtfMTZ4ICAgICAgKCAgbGluZV9jbGtfMTZ4ICAgICApICwKKworICAgICAgICAgICAgICAgLmNmZ19yeF9lbmFibGUgICAgICggIGNmZ19yeF9lbmFibGUgICAgKSwKKyAgICAgICAgICAgICAgIC5jZmdfc3RvcF9iaXQgICAgICAoICBjZmdfc3RvcF9iaXQgICAgICksCisgICAgICAgICAgICAgICAuY2ZnX3ByaV9tb2QgICAgICAgKCAgY2ZnX3ByaV9tb2QgICAgICApLAorCisgICAgICAgICAgICAgICAuZXJyb3JfaW5kICAgICAgICAgKCAgZXJyb3JfaW5kICAgICAgICApLAorCisgICAgICAgLy8gRklGTyBjb250cm9sIHNpZ25hbAorICAgICAgICAgICAgICAgLmZpZm9fYXZhbCAgICAgICAgKCAhcnhfZmlmb193cl9mdWxsICApLAorICAgICAgICAgICAgICAgLmZpZm9fd3IgICAgICAgICAgKCByeF9maWZvX3dyICAgICAgICApLAorICAgICAgICAgICAgICAgLmZpZm9fZGF0YSAgICAgICAgKCByeF9maWZvX3dyX2RhdGEgICApLAorCisgICAgICAgICAgLy8gTGluZSBJbnRlcmZhY2UKKyAgICAgICAgICAgICAgIC5zaSAgICAgICAgICAgICAgIChzaV9zcyAgICAgICAgICAgICAgKQorICAgICAgICAgICk7CisKK2FzeW5jX2ZpZm9fdGggIyhXLERQLDAsMCkgdV9yeGZpZm8gKCAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgLndyX2NsayAgICAgICAgICAgICAobGluZV9jbGtfMTZ4ICAgICAgICksCisgICAgICAgICAgICAgICAud3JfcmVzZXRfbiAgICAgICAgIChsaW5lX3Jlc2V0X24gICAgICAgKSwKKyAgICAgICAgICAgICAgIC53cl9lbiAgICAgICAgICAgICAgKHJ4X2ZpZm9fd3IgICAgICAgICApLAorICAgICAgICAgICAgICAgLndyX2RhdGEgICAgICAgICAgICAocnhfZmlmb193cl9kYXRhICAgICksCisgICAgICAgICAgICAgICAuZnVsbCAgICAgICAgICAgICAgIChyeF9maWZvX3dyX2Z1bGwgICAgKSwgLy8gc3luYydlZCB0byB3cl9jbGsKKyAgICAgICAgICAgICAgIC53cl90b3RhbF9mcmVlX3NwYWNlKCAgICAgICAgICAgICAgICAgICApLAorCisgICAgICAgICAgICAgICAucmRfY2xrICAgICAgICAgICAgIChhcHBfY2xrICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgIC5yZF9yZXNldF9uICAgICAgICAgKGFwcF9yZXNldF9uICAgICAgICApLAorICAgICAgICAgICAgICAgLnJkX2VuICAgICAgICAgICAgICAoYXBwX3J4Zmlmb19yZF9lbiAgICksCisgICAgICAgICAgICAgICAuZW1wdHkgICAgICAgICAgICAgIChhcHBfcnhmaWZvX2VtcHR5ICAgKSwgIC8vIHN5bmMnZWQgdG8gcmRfY2xrCisgICAgICAgICAgICAgICAucmRfdG90YWxfYXZhbCAgICAgIChyeF9maWZvX2R2YWwgICAgICAgICksCisgICAgICAgICAgICAgICAucmRfZGF0YSAgICAgICAgICAgIChhcHBfcnhmaWZvX2RhdGEgICAgKQorICAgICAgICAgICAgICAgICk7CisKK2FzeW5jX2ZpZm9fdGggIyhXLERQLDAsMCkgdV90eGZpZm8gICgKKyAgICAgICAgICAgICAgIC53cl9jbGsgICAgICAgICAgICAgKGFwcF9jbGsgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgLndyX3Jlc2V0X24gICAgICAgICAoYXBwX3Jlc2V0X24gICAgICAgICksCisgICAgICAgICAgICAgICAud3JfZW4gICAgICAgICAgICAgICh0eF9maWZvX3dyX2VuICAgICAgKSwKKyAgICAgICAgICAgICAgIC53cl9kYXRhICAgICAgICAgICAgKGFwcF90eGZpZm9fZGF0YSAgICApLAorICAgICAgICAgICAgICAgLmZ1bGwgICAgICAgICAgICAgICAoYXBwX3R4X2ZpZm9fZnVsbCAgICksIC8vIHN5bmMnZWQgdG8gd3JfY2xrCisgICAgICAgICAgICAgICAud3JfdG90YWxfZnJlZV9zcGFjZSh0eF9maWZvX2ZzcGFjZSAgICAgKSwKKworICAgICAgICAgICAgICAgLnJkX2NsayAgICAgICAgICAgICAobGluZV9jbGtfMTZ4ICAgICAgICksCisgICAgICAgICAgICAgICAucmRfcmVzZXRfbiAgICAgICAgIChsaW5lX3Jlc2V0X24gICAgICAgKSwKKyAgICAgICAgICAgICAgIC5yZF9lbiAgICAgICAgICAgICAgKHR4X2ZpZm9fcmQgICAgICAgICApLAorICAgICAgICAgICAgICAgLmVtcHR5ICAgICAgICAgICAgICAodHhfZmlmb19yZF9lbXB0eSAgICksICAvLyBzeW5jJ2VkIHRvIHJkX2NsaworICAgICAgICAgICAgICAgLnJkX3RvdGFsX2F2YWwgICAgICAoICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAucmRfZGF0YSAgICAgICAgICAgICh0eF9maWZvX3JkX2RhdGEgICAgKQorICAgICAgICAgICAgICAgICAgICk7CisKKworZG91YmxlX3N5bmNfbG93ICAgdV9zaV9zeW5jICgKKyAgICAgICAgICAgICAgIC5pbl9kYXRhICAgICAgICAgICAocnhkICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAub3V0X2NsayAgICAgICAgICAgKGxpbmVfY2xrXzE2eCAgICAgICApLAorICAgICAgICAgICAgICAgLm91dF9yc3RfbiAgICAgICAgIChsaW5lX3Jlc2V0X24gICAgICAgKSwKKyAgICAgICAgICAgICAgIC5vdXRfZGF0YSAgICAgICAgICAoc2lfc3MgICAgICAgICAgICAgICkgCisgICAgICAgICAgKTsKKword2lyZSAgIGZybV9lcnJvciAgICAgICAgICA9IChlcnJvcl9pbmQgPT0gMidiMDEpOword2lyZSAgIHBhcl9lcnJvciAgICAgICAgICA9IChlcnJvcl9pbmQgPT0gMidiMTApOword2lyZSAgIHJ4X2ZpZm9fZnVsbF9lcnIgICA9IChlcnJvcl9pbmQgPT0gMidiMTEpOworCitkb3VibGVfc3luY19sb3cgICB1X2ZybV9lcnIgKAorICAgICAgICAgICAgICAgLmluX2RhdGEgICAgICAgICAgICggZnJtX2Vycm9yICAgICAgICApLAorICAgICAgICAgICAgICAgLm91dF9jbGsgICAgICAgICAgICggYXBwX2NsayAgICAgICAgICApLAorICAgICAgICAgICAgICAgLm91dF9yc3RfbiAgICAgICAgICggYXBwX3Jlc2V0X24gICAgICApLAorICAgICAgICAgICAgICAgLm91dF9kYXRhICAgICAgICAgICggZnJtX2Vycm9yX28gICAgICApIAorICAgICAgICAgICk7CisKK2RvdWJsZV9zeW5jX2xvdyAgIHVfcGFyX2VyciAoCisgICAgICAgICAgICAgICAuaW5fZGF0YSAgICAgICAgICAgKCBwYXJfZXJyb3IgICAgICAgICksCisgICAgICAgICAgICAgICAub3V0X2NsayAgICAgICAgICAgKCBhcHBfY2xrICAgICAgICAgICksCisgICAgICAgICAgICAgICAub3V0X3JzdF9uICAgICAgICAgKCBhcHBfcmVzZXRfbiAgICAgICksCisgICAgICAgICAgICAgICAub3V0X2RhdGEgICAgICAgICAgKCBwYXJfZXJyb3JfbyAgICAgICkgCisgICAgICAgICAgKTsKKworZG91YmxlX3N5bmNfbG93ICAgdV9yeGZpZm9fZXJyICgKKyAgICAgICAgICAgICAgIC5pbl9kYXRhICAgICAgICAgICAoIHJ4X2ZpZm9fZnVsbF9lcnIgKSwKKyAgICAgICAgICAgICAgIC5vdXRfY2xrICAgICAgICAgICAoIGFwcF9jbGsgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgIC5vdXRfcnN0X24gICAgICAgICAoIGFwcF9yZXNldF9uICAgICAgKSwKKyAgICAgICAgICAgICAgIC5vdXRfZGF0YSAgICAgICAgICAoIHJ4X2ZpZm9fZnVsbF9lcnJfbyAgKSAKKyAgICAgICAgICApOworCisKK2VuZG1vZHVsZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvdWFydC9zcmMvdWFydF9yeGZzbS5zdiBiL3Zlcmlsb2cvcnRsL3VhcnQvc3JjL3VhcnRfcnhmc20uc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTg5MTZlNgotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL3VhcnQvc3JjL3VhcnRfcnhmc20uc3YKQEAgLTAsMCArMSwyMjEgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSAsIERpbmVzaCBBbm5heXlhICAgICAgICAgICAgICAgICAgICAgICAgICAKKy8vIAorLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBDcmVhdGVkIGJ5IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVUFSVCBSWCBGU00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFlJRml2ZSBjb3JlcyBwcm9qZWN0ICAgICAgICAgICAgICAgLy8vLworLy8vLyAgaHR0cHM6Ly9naXRodWIuY29tL2RpbmVzaGFubmF5eWEveWlmaXZlX3IwLmdpdCAgICAgICAgICAgICAgLy8vLworLy8vLyAgaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2NvcmVzL3lpZml2ZS8gICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVG8gRG86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICBub3RoaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgQXV0aG9yKHMpOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgIC0gRGluZXNoIEFubmF5eWEsIGRpbmVzaGFAb3BlbmNvcmVzLm9yZyAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgUmV2aXNpb24gOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLyAKKy8vLy8gICAgMC4xIC0gMjB0aCBKdW5lIDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgIDEuIGluaXRpYWwgdmVyc2lvbiBwaWNrZWQgZnJvbSAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2NvcmVzL29tczgwNTFtaW5pICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gQ29weXJpZ2h0IChDKSAyMDAwIEF1dGhvcnMgYW5kIE9QRU5DT1JFUy5PUkcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgIC8vLy8KKy8vLy8gcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgIC8vLy8KKy8vLy8gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgIC8vLy8KKy8vLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCAgIC8vLy8KKy8vLy8gYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IC8vLy8KKy8vLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSAgIC8vLy8KKy8vLy8gbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlICAgICAgIC8vLy8KKy8vLy8gdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCAgIC8vLy8KKy8vLy8gd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAgICAgIC8vLy8KKy8vLy8gUFVSUE9TRS4gIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIC8vLy8KKy8vLy8gZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvdXJjZTsgaWYgbm90LCBkb3dubG9hZCBpdCAgIC8vLy8KKy8vLy8gZnJvbSBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvbGdwbC5zaHRtbCAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworbW9kdWxlIHVhcnRfcnhmc20gKAorICAgICAgICAgICAgIHJlc2V0X24gICAgICAgICwKKyAgICAgICAgICAgICBiYXVkX2Nsa18xNnggICAsCisKKyAgICAgICAgICAgICBjZmdfcnhfZW5hYmxlICAsCisgICAgICAgICAgICAgY2ZnX3N0b3BfYml0ICAgLAorICAgICAgICAgICAgIGNmZ19wcmlfbW9kICAgICwKKworICAgICAgICAgICAgIGVycm9yX2luZCAgICAgICwKKworICAgICAgIC8vIEZJRk8gY29udHJvbCBzaWduYWwKKyAgICAgICAgICAgICBmaWZvX2F2YWwgICAgICAsCisgICAgICAgICAgICAgZmlmb193ciAgICAgICAgLAorICAgICAgICAgICAgIGZpZm9fZGF0YSAgICAgICwKKworICAgICAgICAgIC8vIExpbmUgSW50ZXJmYWNlCisgICAgICAgICAgICAgc2kgIAorICAgICAgICAgICk7CisKKworaW5wdXQgICAgICAgICAgICAgcmVzZXRfbiAgICAgICAgOyAvLyBhY3RpdmUgbG93IHJlc2V0IHNpZ25hbAoraW5wdXQgICAgICAgICAgICAgYmF1ZF9jbGtfMTZ4ICAgOyAvLyBiYXVkIGNsb2NrLTE2eAorCitpbnB1dCAgICAgICAgICAgICBjZmdfcnhfZW5hYmxlICA7IC8vIHRyYW5zbWl0IGludGVyZmFjZSBlbmFibGUKK2lucHV0ICAgICAgICAgICAgIGNmZ19zdG9wX2JpdCAgIDsgLy8gc3RvcCBiaXQgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDAgLS0+IDEgc3RvcCwgMSAtLT4gMiBTdG9wCitpbnB1dCAgIFsxOjBdICAgICBjZmdfcHJpX21vZCAgICA7Ly8gUHJpb3JpdHkgTW9kZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAyJ2IwMCAtLT4gTm9uZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAyJ2IxMCAtLT4gRXZlbiBwcmlvcml0eQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAyJ2IxMSAtLT4gT2RkIHByaW9yaXR5CisKK291dHB1dCBbMTowXSAgICAgIGVycm9yX2luZCAgICAgOyAvLyAyJ2IwMCAtLT4gTm9ybWFsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMidiMDEgLS0+IGZyYW1pbmcgZXJyb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAyJ2IxMCAtLT4gcGFyaXR5IGVycm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMidiMTEgLS0+IGZpZm8gZnVsbAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gICBGSUZPIGNvbnRyb2wgc2lnbmFsCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitpbnB1dCAgICAgICAgICAgICBmaWZvX2F2YWwgICAgICA7IC8vIGZpZm8gZW1wdHkKK291dHB1dCAgICAgICAgICAgIGZpZm9fd3IgICAgICAgIDsgLy8gZmlmbyB3cml0ZSwgYXNzdW1lZCBubyBiYWNrIHRvIGJhY2sgd3JpdGUKK291dHB1dCAgWzc6MF0gICAgIGZpZm9fZGF0YSAgICAgIDsgLy8gZmlmbyB3cml0ZSBkYXRhCisKKy8vIExpbmUgSW50ZXJmYWNlCitpbnB1dCAgICAgICAgICAgICBzaSAgICAgICAgICAgICA7ICAvLyByeGQgcGluCisKKworCityZWcgICAgIFs3OjBdICAgIGZpZm9fZGF0YSAgICAgICA7IC8vIGZpZm8gd3JpdGUgZGF0YQorcmVnICAgICAgICAgICAgICBmaWZvX3dyICAgICAgICAgOyAvLyBmaWZvIHdyaXRlIAorcmVnICAgIFsxOjBdICAgICBlcnJvcl9pbmQgICAgICAgOyAKK3JlZyAgICBbMjowXSAgICAgY250ICAgICAgICAgICAgIDsKK3JlZyAgICBbMzowXSAgICAgb2Zmc2V0ICAgICAgICAgIDsgLy8gZnJlZS1ydW5uaW5nIGNvdW50ZXIgZnJvbSAwIC0gMTUKK3JlZyAgICBbMzowXSAgICAgcnhwb3MgICAgICAgICAgIDsgLy8gc3RhYmxlIHJ4IHBvc2l0aW9uCityZWcgICAgWzI6MF0gICAgIHJ4c3RhdGUgICAgICAgICA7CisKK3BhcmFtZXRlciBpZGxlX3N0ICAgICAgPSAzJ2IwMDA7CitwYXJhbWV0ZXIgeGZyX3N0YXJ0ICAgID0gMydiMDAxOworcGFyYW1ldGVyIHhmcl9kYXRhX3N0ICA9IDMnYjAxMDsKK3BhcmFtZXRlciB4ZnJfcHJpX3N0ICAgPSAzJ2IwMTE7CitwYXJhbWV0ZXIgeGZyX3N0b3Bfc3QxID0gMydiMTAwOworcGFyYW1ldGVyIHhmcl9zdG9wX3N0MiA9IDMnYjEwMTsKKworCithbHdheXMgQChuZWdlZGdlIHJlc2V0X24gb3IgcG9zZWRnZSBiYXVkX2Nsa18xNngpIGJlZ2luCisgICBpZihyZXNldF9uID09IDApIGJlZ2luCisgICAgICByeHN0YXRlICAgPD0gMydiMDsKKyAgICAgIG9mZnNldCAgICA8PSA0J2IwOworICAgICAgcnhwb3MgICAgIDw9IDQnYjA7CisgICAgICBjbnQgICAgICAgPD0gMydiMDsKKyAgICAgIGVycm9yX2luZCA8PSAyJ2IwOworICAgICAgZmlmb193ciAgIDw9IDEnYjA7CisgICAgICBmaWZvX2RhdGEgPD0gOCdoMDsKKyAgIGVuZAorICAgZWxzZSBiZWdpbgorICAgICAgb2Zmc2V0ICAgICA8PSBvZmZzZXQgKyAxOworICAgICAgY2FzZShyeHN0YXRlKQorICAgICAgIGlkbGVfc3QgICA6IGJlZ2luCisgICAgICAgICAgICBpZighc2kpIGJlZ2luIC8vIFN0YXJ0IGluZGljYXRpb24KKyAgICAgICAgICAgICAgIGlmKGZpZm9fYXZhbCAmJiBjZmdfcnhfZW5hYmxlKSBiZWdpbgorICAgICAgICAgICAgICAgICByeHN0YXRlICAgPD0gICB4ZnJfc3RhcnQ7CisgICAgICAgICAgICAgICAgIGNudCAgICAgICA8PSAgIDA7CisgICAgICAgICAgICAgICAgIHJ4cG9zICAgICA8PSAgIG9mZnNldCArIDg7IC8vIEFzc2lnbiBjZW50ZXIgcnhvZmZzZXQKKyAgICAgICAgICAgICAgICAgZXJyb3JfaW5kIDw9IDInYjAwOworICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICBlbHNlIGJlZ2luCisgICAgICAgICAgICAgICAgICBlcnJvcl9pbmQgPD0gMidiMTE7IC8vIGZpZm8gZnVsbCBlcnJvciBpbmRpY2F0aW9uCisgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgICAgICAgICBlcnJvcl9pbmQgPD0gMidiMDA7IC8vIFJlc2V0IEVycm9yCisgICAgICAgICAgICBlbmQKKyAgICAgICAgIGVuZAorICAgICAgeGZyX3N0YXJ0IDogYmVnaW4KKyAgICAgICAgICAgIC8vIE1ha2UgU3VyZSB0aGF0IG1pbmltdW0gOCBjeWNsZSBsb3cgaXMgZGV0ZWN0ZWQKKyAgICAgICAgICAgIGlmKGNudCA8IDcgJiYgc2kpIGJlZ2luIC8vIFN0YXJ0IGluZGljYXRpb24KKyAgICAgICAgICAgICAgIHJ4c3RhdGUgPD0gICBpZGxlX3N0OworICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbHNlIGlmKGNudCA9PSA3ICYmICFzaSkgYmVnaW4gLy8gU3RhcnQgaW5kaWNhdGlvbgorICAgICAgICAgICAgICAgIHJ4c3RhdGUgPD0gICB4ZnJfZGF0YV9zdDsKKyAgICAgICAgICAgICAgICBjbnQgICAgIDw9ICAgMDsKKyAgICAgICAgICAgIGVuZCBlbHNlIGJlZ2luCisgICAgICAgICAgICAgIGNudCAgPD0gY250ICsxOworICAgICAgICAgICAgZW5kCisgICAgICAgICBlbmQKKyAgICAgIHhmcl9kYXRhX3N0IDogYmVnaW4KKyAgICAgICAgICAgICBpZihyeHBvcyA9PSBvZmZzZXQpIGJlZ2luCisgICAgICAgICAgICAgICAgZmlmb19kYXRhW2NudF0gPD0gc2k7CisgICAgICAgICAgICAgICAgY250ICAgICAgICAgICAgPD0gY250KzE7CisgICAgICAgICAgICAgICAgaWYoY250ID09IDcpIGJlZ2luCisgICAgICAgICAgICAgICAgICAgZmlmb193ciA8PSAxOworICAgICAgICAgICAgICAgICAgIGlmKGNmZ19wcmlfbW9kID09IDInYjAwKSAgLy8gTm8gUHJpb3JpdHkKKyAgICAgICAgICAgICAgICAgICAgICAgcnhzdGF0ZSA8PSAgIHhmcl9zdG9wX3N0MTsKKyAgICAgICAgICAgICAgICAgICBlbHNlIHJ4c3RhdGUgPD0geGZyX3ByaV9zdDsgIAorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgIGVuZAorICAgICAgICAgIGVuZAorICAgICAgIHhmcl9wcmlfc3QgICA6IGJlZ2luCisgICAgICAgICAgICBmaWZvX3dyIDw9IDA7CisgICAgICAgICAgICBpZihyeHBvcyA9PSBvZmZzZXQpIGJlZ2luCisgICAgICAgICAgICAgICBpZihjZmdfcHJpX21vZCA9PSAyJ2IxMCkgIC8vIGV2ZW4gcHJpb3JpdHkKKyAgICAgICAgICAgICAgICAgIGlmKCBzaSAhPSBeZmlmb19kYXRhKSBlcnJvcl9pbmQgPD0gMidiMTA7CisgICAgICAgICAgICAgICBlbHNlICAvLyBPZGQgUHJpb3JpdHkKKyAgICAgICAgICAgICAgICAgIGlmKCBzaSAhPSB+KF5maWZvX2RhdGEpKSBlcnJvcl9pbmQgPD0gMidiMTA7CisgICAgICAgICAgICAgICByeHN0YXRlIDw9ICAgeGZyX3N0b3Bfc3QxOworICAgICAgICAgICAgZW5kCisgICAgICAgICBlbmQKKyAgICAgICB4ZnJfc3RvcF9zdDEgIDogYmVnaW4KKyAgICAgICAgICBmaWZvX3dyIDw9IDA7CisgICAgICAgICAgaWYocnhwb3MgPT0gb2Zmc2V0KSBiZWdpbgorICAgICAgICAgICAgIGlmKHNpKSBiZWdpbgorICAgICAgICAgICAgICAgaWYoY2ZnX3N0b3BfYml0KSAvLyBUd28gU3RvcCBiaXQKKyAgICAgICAgICAgICAgICAgIHJ4c3RhdGUgPD0gICB4ZnJfc3RvcF9zdDI7CisgICAgICAgICAgICAgICBlbHNlICAgCisgICAgICAgICAgICAgICAgICByeHN0YXRlIDw9ICAgaWRsZV9zdDsKKyAgICAgICAgICAgICBlbmQgZWxzZSBiZWdpbiAvLyBGcmFtaW5nIGVycm9yCisgICAgICAgICAgICAgICAgZXJyb3JfaW5kIDw9IDInYjAxOworICAgICAgICAgICAgICAgIHJ4c3RhdGUgICA8PSAgIGlkbGVfc3Q7CisgICAgICAgICAgICAgZW5kCisgICAgICAgICAgZW5kCisgICAgICAgZW5kCisgICAgICAgeGZyX3N0b3Bfc3QyICA6IGJlZ2luCisgICAgICAgICAgaWYocnhwb3MgPT0gb2Zmc2V0KSBiZWdpbgorICAgICAgICAgICAgIGlmKHNpKSBiZWdpbgorICAgICAgICAgICAgICAgIHJ4c3RhdGUgPD0gICBpZGxlX3N0OworICAgICAgICAgICAgIGVuZCBlbHNlIGJlZ2luIC8vIEZyYW1pbmcgZXJyb3IKKyAgICAgICAgICAgICAgICBlcnJvcl9pbmQgPD0gMidiMDE7CisgICAgICAgICAgICAgICAgcnhzdGF0ZSAgIDw9ICAgaWRsZV9zdDsKKyAgICAgICAgICAgICBlbmQKKyAgICAgICAgICBlbmQKKyAgICAgICBlbmQKKyAgICAgICBkZWZhdWx0OiByeHN0YXRlICAgPD0gICBpZGxlX3N0OworICAgIGVuZGNhc2UKKyAgIGVuZAorZW5kCisKKworZW5kbW9kdWxlCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC91YXJ0L3NyYy91YXJ0X3R4ZnNtLnN2IGIvdmVyaWxvZy9ydGwvdWFydC9zcmMvdWFydF90eGZzbS5zdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDY1MDdlCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvdWFydC9zcmMvdWFydF90eGZzbS5zdgpAQCAtMCwwICsxLDE5MCBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxICwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgIAorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IENyZWF0ZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBVQVJUIFRYIEZTTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgWUlGaXZlIGNvcmVzIHByb2plY3QgICAgICAgICAgICAgICAvLy8vCisvLy8vICBodHRwczovL2dpdGh1Yi5jb20vZGluZXNoYW5uYXl5YS95aWZpdmVfcjAuZ2l0ICAgICAgICAgICAgICAvLy8vCisvLy8vICBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvY29yZXMveWlmaXZlLyAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUbyBEbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIG5vdGhpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBBdXRob3Iocyk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgLSBEaW5lc2ggQW5uYXl5YSwgZGluZXNoYUBvcGVuY29yZXMub3JnICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBSZXZpc2lvbiA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vIAorLy8vLyAgICAwLjEgLSAyMHRoIEp1bmUgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgMS4gaW5pdGlhbCB2ZXJzaW9uIHBpY2tlZCBmcm9tICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvY29yZXMvb21zODA1MW1pbmkgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBDb3B5cmlnaHQgKEMpIDIwMDAgQXV0aG9ycyBhbmQgT1BFTkNPUkVTLk9SRyAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBmaWxlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCB3aXRob3V0ICAgICAgICAgLy8vLworLy8vLyByZXN0cmljdGlvbiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgICAgLy8vLworLy8vLyByZW1vdmVkIGZyb20gdGhlIGZpbGUgYW5kIHRoYXQgYW55IGRlcml2YXRpdmUgd29yayBjb250YWlucyAgLy8vLworLy8vLyB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGFzc29jaWF0ZWQgZGlzY2xhaW1lci4gLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0ICAgLy8vLworLy8vLyBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgLy8vLworLy8vLyBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgLy8vLworLy8vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55ICAgLy8vLworLy8vLyBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgICAgICAgLy8vLworLy8vLyB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkICAgLy8vLworLy8vLyB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSICAgICAgLy8vLworLy8vLyBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgLy8vLworLy8vLyBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAgLy8vLworLy8vLyBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgc291cmNlOyBpZiBub3QsIGRvd25sb2FkIGl0ICAgLy8vLworLy8vLyBmcm9tIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9sZ3BsLnNodG1sICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisKK21vZHVsZSB1YXJ0X3R4ZnNtICgKKyAgICAgICAgICAgICByZXNldF9uICAgICAgICAsCisgICAgICAgICAgICAgYmF1ZF9jbGtfMTZ4ICAgLAorCisgICAgICAgICAgICAgY2ZnX3R4X2VuYWJsZSAgLAorICAgICAgICAgICAgIGNmZ19zdG9wX2JpdCAgICwKKyAgICAgICAgICAgICBjZmdfcHJpX21vZCAgICAsCisKKyAgICAgICAvLyBGSUZPIGNvbnRyb2wgc2lnbmFsCisgICAgICAgICAgICAgZmlmb19lbXB0eSAgICAgLAorICAgICAgICAgICAgIGZpZm9fcmQgICAgICAgICwKKyAgICAgICAgICAgICBmaWZvX2RhdGEgICAgICAsCisKKyAgICAgICAgICAvLyBMaW5lIEludGVyZmFjZQorICAgICAgICAgICAgIHNvICAKKyAgICAgICAgICApOworCisKK2lucHV0ICAgICAgICAgICAgIHJlc2V0X24gICAgICAgIDsgLy8gYWN0aXZlIGxvdyByZXNldCBzaWduYWwKK2lucHV0ICAgICAgICAgICAgIGJhdWRfY2xrXzE2eCAgIDsgLy8gYmF1ZCBjbG9jay0xNngKKworaW5wdXQgICAgICAgICAgICAgY2ZnX3R4X2VuYWJsZSAgOyAvLyB0cmFuc21pdCBpbnRlcmZhY2UgZW5hYmxlCitpbnB1dCAgICAgICAgICAgICBjZmdfc3RvcF9iaXQgICA7IC8vIHN0b3AgYml0IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAwIC0tPiAxIHN0b3AsIDEgLS0+IDIgU3RvcAoraW5wdXQgICBbMTowXSAgICAgY2ZnX3ByaV9tb2QgICAgOy8vIFByaW9yaXR5IE1vZGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMidiMDAgLS0+IE5vbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMidiMTAgLS0+IEV2ZW4gcHJpb3JpdHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMidiMTEgLS0+IE9kZCBwcmlvcml0eQorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgIEZJRk8gY29udHJvbCBzaWduYWwKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2lucHV0ICAgICAgICAgICAgIGZpZm9fZW1wdHkgICAgIDsgLy8gZmlmbyBlbXB0eQorb3V0cHV0ICAgICAgICAgICAgZmlmb19yZCAgICAgICAgOyAvLyBmaWZvIHJlYWQsIGFzc3VtZWQgbm8gYmFjayB0byBiYWNrIHJlYWQKK2lucHV0ICBbNzowXSAgICAgIGZpZm9fZGF0YSAgICAgIDsgLy8gZmlmbyByZWFkIGRhdGEKKworLy8gTGluZSBJbnRlcmZhY2UKK291dHB1dCAgICAgICAgICAgIHNvICAgICAgICAgICAgIDsgIC8vIHR4ZCBwaW4KKworCityZWcgIFsyOjBdICAgICAgICAgdHhzdGF0ZSAgICAgICA7IC8vIHR4IHN0YXRlCityZWcgICAgICAgICAgICAgICAgc28gICAgICAgICAgICA7IC8vIHR4ZCBwaW4KK3JlZyAgWzc6MF0gICAgICAgICB0eGRhdGEgICAgICAgIDsgLy8gbG9jYWwgdHhkYXRhCityZWcgICAgICAgICAgICAgICAgZmlmb19yZCAgICAgICA7IC8vIEZpZm8gcmVhZCBlbmFibGUKK3JlZyAgWzI6MF0gICAgICAgICBjbnQgICAgICAgICAgIDsgLy8gbG9jYWwgZGF0YSBjb250CityZWcgIFszOjBdICAgICAgICAgZGl2Y250ICAgICAgICA7IC8vIGNsb2NrIGRpdiBjb3VudAorCitwYXJhbWV0ZXIgaWRsZV9zdCAgICAgID0gMydiMDAwOworcGFyYW1ldGVyIHhmcl9kYXRhX3N0ICA9IDMnYjAwMTsKK3BhcmFtZXRlciB4ZnJfcHJpX3N0ICAgPSAzJ2IwMTA7CitwYXJhbWV0ZXIgeGZyX3N0b3Bfc3QxID0gMydiMDExOworcGFyYW1ldGVyIHhmcl9zdG9wX3N0MiA9IDMnYjEwMDsKKworCithbHdheXMgQChuZWdlZGdlIHJlc2V0X24gb3IgcG9zZWRnZSBiYXVkX2Nsa18xNngpCitiZWdpbgorICAgaWYocmVzZXRfbiA9PSAxJ2IwKSBiZWdpbgorICAgICAgdHhzdGF0ZSAgPD0gaWRsZV9zdDsKKyAgICAgIHNvICAgICAgIDw9IDEnYjE7CisgICAgICBjbnQgICAgICA8PSAzJ2IwOworICAgICAgdHhkYXRhICAgPD0gOCdoMDsKKyAgICAgIGZpZm9fcmQgIDw9IDEnYjA7CisgICAgICBkaXZjbnQgICA8PSA0J2IwOworICAgZW5kCisgICBlbHNlIGJlZ2luCisgICAgICBkaXZjbnQgPD0gZGl2Y250KzE7CisgICAgICBpZihkaXZjbnQgPT0gNCdiMDAwMCkgYmVnaW4gLy8gRG8gYXQgb25jZSBpbiAxNiBjbG9jaworICAgICAgICAgY2FzZSh0eHN0YXRlKQorICAgICAgICAgIGlkbGVfc3QgICAgICA6IGJlZ2luCisgICAgICAgICAgICAgICBpZighZmlmb19lbXB0eSAmJiBjZmdfdHhfZW5hYmxlKSBiZWdpbgorICAgICAgICAgICAgICAgICAgc28gICAgICAgPD0gMSdiMCA7IC8vIFN0YXJ0IGJpdAorICAgICAgICAgICAgICAgICAgY250ICAgICAgPD0gMydiMDsKKyAgICAgICAgICAgICAgICAgIGZpZm9fcmQgIDw9IDEnYjE7CisgICAgICAgICAgICAgICAgICB0eGRhdGEgICA8PSBmaWZvX2RhdGE7CisgICAgICAgICAgICAgICAgICB0eHN0YXRlICA8PSB4ZnJfZGF0YV9zdDsgIAorICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbmQKKworICAgICAgICAgIHhmcl9kYXRhX3N0ICA6IGJlZ2luCisgICAgICAgICAgICAgIGZpZm9fcmQgIDw9IDEnYjA7CisgICAgICAgICAgICAgIHNvICAgPD0gdHhkYXRhW2NudF07CisgICAgICAgICAgICAgIGNudCAgPD0gY250KzE7CisgICAgICAgICAgICAgIGlmKGNudCA9PSA3KSBiZWdpbgorICAgICAgICAgICAgICAgICBpZihjZmdfcHJpX21vZCA9PSAyJ2IwMCkgYmVnaW4gLy8gTm8gUHJpb3JpdHkKKyAgICAgICAgICAgICAgICAgICAgdHhzdGF0ZSAgPD0geGZyX3N0b3Bfc3QxOyAgCisgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICBlbHNlIGJlZ2luCisgICAgICAgICAgICAgICAgICAgIHR4c3RhdGUgPD0geGZyX3ByaV9zdDsgIAorICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgIGVuZAorCisgICAgICAgICAgeGZyX3ByaV9zdCAgIDogYmVnaW4KKyAgICAgICAgICAgICAgIGlmKGNmZ19wcmlfbW9kID09IDInYjEwKSAgLy8gZXZlbiBwcmlvcml0eQorICAgICAgICAgICAgICAgICAgIHNvIDw9IF50eGRhdGE7CisgICAgICAgICAgICAgICBlbHNlIGJlZ2luIC8vIE9kZCBQcmlvcml0eQorICAgICAgICAgICAgICAgICAgIHNvIDw9IH4oXnR4ZGF0YSk7CisgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgIHR4c3RhdGUgIDw9IHhmcl9zdG9wX3N0MTsgIAorICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICB4ZnJfc3RvcF9zdDEgIDogYmVnaW4gLy8gRmlyc3QgU3RvcCBCaXQKKyAgICAgICAgICAgICAgIHNvIDw9IDE7CisgICAgICAgICAgICAgICBpZihjZmdfc3RvcF9iaXQgPT0gMCkgIC8vIDEgU3RvcCBCaXQKKyAgICAgICAgICAgICAgICAgICAgdHhzdGF0ZSA8PSBpZGxlX3N0OworICAgICAgICAgICAgICAgZWxzZSAvLyAyIFN0b3AgQml0IAorICAgICAgICAgICAgICAgICAgdHhzdGF0ZSAgPD0geGZyX3N0b3Bfc3QyOworICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICB4ZnJfc3RvcF9zdDIgIDogYmVnaW4gLy8gU2Vjb25kIFN0b3AgQml0CisgICAgICAgICAgICAgICBzbyA8PSAxOworICAgICAgICAgICAgICAgdHhzdGF0ZSA8PSBpZGxlX3N0OworICAgICAgICAgICAgZW5kCisgICAgICAgICBkZWZhdWx0OiB0eHN0YXRlICA8PSBpZGxlX3N0OworICAgICAgICAgZW5kY2FzZQorICAgICAgZW5kCisgICAgIGVsc2UgYmVnaW4KKyAgICAgICAgZmlmb19yZCAgPD0gMSdiMDsKKyAgICAgZW5kCisgICBlbmQKK2VuZAorCisKK2VuZG1vZHVsZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvdWFydDJ3Yi9zcmMvcnVuX3Zlcmlsb2cgYi92ZXJpbG9nL3J0bC91YXJ0MndiL3NyYy9ydW5fdmVyaWxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjg5ODI3Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvdWFydDJ3Yi9zcmMvcnVuX3Zlcmlsb2cKQEAgLTAsMCArMSBAQAoraXZlcmlsb2cgdWFydDJ3Yi5zdiB1YXJ0Ml9jb3JlLnN2IHVhcnRfbXNnX2hhbmRsZXIudiAgLi4vLi4vdWFydC9zcmMvdWFydF9yeGZzbS5zdiAuLi8uLi91YXJ0L3NyYy91YXJ0X3R4ZnNtLnN2IC4uLy4uL2xpYi9kb3VibGVfc3luY19sb3cudiAuLi8uLi9saWIvY2xrX2N0bC52IC4uLy4uL2xpYi9yZXNldF9zeW5jLnN2CmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC91YXJ0MndiL3NyYy91YXJ0Ml9jb3JlLnN2IGIvdmVyaWxvZy9ydGwvdWFydDJ3Yi9zcmMvdWFydDJfY29yZS5zdgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43OGRhYTFhCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvdWFydDJ3Yi9zcmMvdWFydDJfY29yZS5zdgpAQCAtMCwwICsxLDE5MiBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxICwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgIAorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IENyZWF0ZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUdWJvIDgwNTEgY29yZXMgVUFSVCBJbnRlcmZhY2UgTW9kdWxlICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgVHVyYm8gODA1MSBjb3JlcyBwcm9qZWN0ICAgICAgICAgICAvLy8vCisvLy8vICBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvY29yZXMvdHVyYm84MDUxLyAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUdXJibyA4MDUxIGRlZmluaXRpb25zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUbyBEbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIG5vdGhpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBBdXRob3Iocyk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgLSBEaW5lc2ggQW5uYXl5YSwgZGluZXNoYUBvcGVuY29yZXMub3JnICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIENvcHlyaWdodCAoQykgMjAwMCBBdXRob3JzIGFuZCBPUEVOQ09SRVMuT1JHICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgICAvLy8vCisvLy8vIHJlc3RyaWN0aW9uIHByb3ZpZGVkIHRoYXQgdGhpcyBjb3B5cmlnaHQgc3RhdGVtZW50IGlzIG5vdCAgICAvLy8vCisvLy8vIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSBhbmQgdGhhdCBhbnkgZGVyaXZhdGl2ZSB3b3JrIGNvbnRhaW5zICAvLy8vCisvLy8vIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLiAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgICAvLy8vCisvLy8vIGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAvLy8vCisvLy8vIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAvLy8vCisvLy8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgICAvLy8vCisvLy8vIGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFRoaXMgc291cmNlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSAgICAgICAvLy8vCisvLy8vIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgICAvLy8vCisvLy8vIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgICAgICAvLy8vCisvLy8vIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSAvLy8vCisvLy8vIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgICAvLy8vCisvLy8vIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBzb3VyY2U7IGlmIG5vdCwgZG93bmxvYWQgaXQgICAvLy8vCisvLy8vIGZyb20gaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2xncGwuc2h0bWwgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCittb2R1bGUgdWFydDJfY29yZSAoICAKKyAgICAgICAgaW5wdXQgd2lyZSAgICAgICBhcnN0X24gLCAgICAgLy8gQXN5bmMgcmVzZXQKKyAgICAgICAgaW5wdXQgd2lyZSAgICAgICBhcHBfY2xrICwgICAgLy8gQXBwbGljYXRpb24gY2xvY2sKKyAgICAKKworCS8vIGNvbmZpZ3VyYXRpb24gY29udHJvbAorICAgICAgICBpbnB1dCB3aXJlICAgICAgIGNmZ190eF9lbmFibGUgICwgLy8gRW5hYmxlIFRyYW5zbWl0IFBhdGgKKyAgICAgICAgaW5wdXQgd2lyZSAgICAgICBjZmdfcnhfZW5hYmxlICAsIC8vIEVuYWJsZSBSZWNlaXZlZCBQYXRoCisgICAgICAgIGlucHV0IHdpcmUgICAgICAgY2ZnX3N0b3BfYml0ICAgLCAvLyAwIC0+IDEgU3RhcnQgLCAxIC0+IDIgU3RvcCBCaXRzCisgICAgICAgIGlucHV0IHdpcmUgWzE6MF0gY2ZnX3ByaV9tb2QgICAgLCAvLyBwcmlvcml0eSBtb2RlLCAwIC0+IG5vcCwgMSAtPiBFdmVuLCAyIC0+IE9kZAorCWlucHV0IHdpcmUgWzExOjBdY2ZnX2JhdWRfMTZ4ICAgLCAvLyAxNnggYmF1ZCByYXRlIGNvbnRyb2wKKworICAgIC8vIFRYIFBBVEggSW5mb3JtYXRpb24KKyAgICAgICAgaW5wdXQgIHdpcmUgICAgICB0eF9kYXRhX2F2YWlsICAsICAgLy8gSW5kaWNhdGUgdmFsaWQgVFhEIERhdGEKKyAgICAgICAgb3V0cHV0IHdpcmUgICAgIHR4X3JkICAgICAgICAgICwgICAvLyBJbmRpY2F0ZSBUWEQgRGF0YSBCZWVuIFJlYWQKKyAgICAgICAgaW5wdXQgIHdpcmUgWzc6MF10eF9kYXRhICAgICAgICAsICAgLy8gSW5kaWNhdGUgVFhEIERhdGEgQmVlbiAKKyAgICAgICAgIAorCisgICAgLy8gUlhEIEluZm9ybWF0aW9uCisgICAgICAgIGlucHV0ICB3aXJlICAgICAgIHJ4X3JlYWR5ICAgICAgICwgIC8vIEluZGljYXRlIFJlYWR5IHRvIGFjY2VwdCB0aGUgUmVhZCBEYXRhCisgICAgICAgIG91dHB1dCB3aXJlICAgICAgcnhfd3IgICAgICAgICAgLCAgLy8gVmFsaWQgUlhEIERhdGEKKyAgICAgICAgb3V0cHV0IHdpcmUgWzc6MF1yeF9kYXRhICAgICAgICAsICAvLyBSWEQgRGF0YQorCisgICAgICAgLy8gU3RhdHVzIGluZm9ybWF0aW9uCisgICAgICAgIG91dHB1dCB3aXJlICAgICAgZnJtX2Vycm9yICAgICAgLCAgLy8gZnJhbWluZyBlcnJvcgorCW91dHB1dCB3aXJlICAgICAgcGFyX2Vycm9yICAgICAgLCAgLy8gcGFyIGVycm9yCisKKwlvdXRwdXQgd2lyZSAgICAgIGJhdWRfY2xrXzE2eCAgICwgIC8vIDE2eCBCYXVkIGNsb2NrCisJb3V0cHV0IHdpcmUgICAgICBsaW5lX3Jlc2V0X24gICAsICAvLyBSZXNldCBzeW5jIHRvIDE2eCBCYXVkIGNsb2NrCisKKyAgICAgICAvLyBMaW5lIEludGVyZmFjZQorICAgICAgICBpbnB1dCAgd2lyZSAgICAgICByeGQgICAgICAgICAgICAsICAvLyB1YXJ0IHJ4ZAorICAgICAgICBvdXRwdXQgd2lyZSAgICAgIHR4ZCAgICAgICAgICAgICAgIC8vIHVhcnQgdHhkCisKKyAgICAgKTsKKworCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBHbG9iYWwgRGVjCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8gV2lyZSBEZWNsYXJhdGlvbgorCit3aXJlIFsxICA6IDBdICAgZXJyb3JfaW5kICAgICAgICAgIDsKK3dpcmUgICAgICAgICAgICBzaV9zcyAgICAgICAgICAgICAgOworCisvLyBPcGVuU291cmNlIENUUyB0b29sIGRvZXMgbm90IHdvcmsgd2l0aCBidWZmZXIgYXMgc291cmNlIHBvaW50CisvLyBjaGFuZ2VkIGJ1ZiB0byBtYXggd2l0aCBzZWxlY3QgdGllZD0wCisvL2N0ZWNoX2Nsa19idWYgdV9saW5lY2xrX2J1ZiAgKC5BKGxpbmVfY2xrXzE2eF9pbiksICAuWChsaW5lX2Nsa18xNngpKTsKK3dpcmUgbGluZV9jbGtfMTZ4OworY3RlY2hfbXV4MngxIHVfdWFydF9jbGsgICguQTAobGluZV9jbGtfMTZ4KSwgLkExKDEnYjApLCAuUygxJ2IwKSwgLlgoYmF1ZF9jbGtfMTZ4KSk7CisKKy8vIDE2eCBCYXVkIGNsb2NrIGdlbmVyYXRpb24KKy8vIEV4YW1wbGU6IHRvIGdlbmVyYXRlIDE5MjAwIEJhdWQgY2xvY2sgZnJvbSA1ME1oeiBMaW5rIGNsb2NrCisvLyAgICA1MCAqIDEwMDAgKiAxMDAwIC8gKDIgKyBjZmdfYmF1ZF8xNngpID0gMTkyMDAgKiAxNgorLy8gICAgY2ZnX2JhdWRfMTZ4ID0gMHhBMCAoMTYwKQorCitjbGtfY3RsICMoMTEpIHVfY2xrX2N0bCAoCisgICAvLyBPdXRwdXRzCisgICAgICAgLmNsa19vICAgICAgICAgIChsaW5lX2Nsa18xNngpLAorCisgICAvLyBJbnB1dHMKKyAgICAgICAubWNsayAgICAgICAgICAgKGFwcF9jbGspLAorICAgICAgIC5yZXNldF9uICAgICAgICAoYXJzdF9uKSwgCisgICAgICAgLmNsa19kaXZfcmF0aW8gIChjZmdfYmF1ZF8xNngpCisgICApOworCisgICAKKy8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKy8vIExpbmUgUmVzZXQgU3luY2hyb25pemF0aW9uCisvLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCityZXNldF9zeW5jICB1X2xpbmVfcnN0ICgKKwkgICAgICAuc2Nhbl9tb2RlICAoMSdiMCAgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgLmRjbGsgICAgICAgKGJhdWRfY2xrXzE2eCAgICksIC8vIERlc3RpbmF0aW9uIGNsb2NrIGRvbWFpbgorCSAgICAgIC5hcnN0X24gICAgIChhcnN0X24gICAgICAgICApLCAvLyBhY3RpdmUgbG93IGFzeW5jIHJlc2V0CisgICAgICAgICAgICAgIC5zcnN0X24gICAgIChsaW5lX3Jlc2V0X24gICApCisgICAgICAgICAgKTsKKworCisKK3VhcnRfdHhmc20gdV90eGZzbSAoCisgICAgICAgICAgICAgICAuIHJlc2V0X24gICAgICAgICAgICggbGluZV9yZXNldF9uICAgICAgKSwKKyAgICAgICAgICAgICAgIC4gYmF1ZF9jbGtfMTZ4ICAgICAgKCBiYXVkX2Nsa18xNnggICAgICApLAorCisgICAgICAgICAgICAgICAuIGNmZ190eF9lbmFibGUgICAgICggY2ZnX3R4X2VuYWJsZSAgICAgKSwKKyAgICAgICAgICAgICAgIC4gY2ZnX3N0b3BfYml0ICAgICAgKCBjZmdfc3RvcF9iaXQgICAgICApLAorICAgICAgICAgICAgICAgLiBjZmdfcHJpX21vZCAgICAgICAoIGNmZ19wcmlfbW9kICAgICAgICksCisKKyAgICAgICAvLyBGSUZPIGNvbnRyb2wgc2lnbmFsCisgICAgICAgICAgICAgICAuIGZpZm9fZW1wdHkgICAgICAgICggIXR4X2RhdGFfYXZhaWwgICAgKSwKKyAgICAgICAgICAgICAgIC4gZmlmb19yZCAgICAgICAgICAgKCB0eF9yZCAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgLiBmaWZvX2RhdGEgICAgICAgICAoIHR4X2RhdGEgICAgICAgICAgICksCisKKyAgICAgICAgICAvLyBMaW5lIEludGVyZmFjZQorICAgICAgICAgICAgICAgLiBzbyAgICAgICAgICAgICAgICAoIHR4ZCAgICAgICAgICAgICAgICkKKyAgICAgICAgICApOworCisKK3VhcnRfcnhmc20gdV9yeGZzbSAoCisgICAgICAgICAgICAgICAuIHJlc2V0X24gICAgICAgICAgICggIGxpbmVfcmVzZXRfbiAgICAgKSwKKyAgICAgICAgICAgICAgIC4gYmF1ZF9jbGtfMTZ4ICAgICAgKCAgYmF1ZF9jbGtfMTZ4ICAgICApICwKKworICAgICAgICAgICAgICAgLiBjZmdfcnhfZW5hYmxlICAgICAoICBjZmdfcnhfZW5hYmxlICAgICksCisgICAgICAgICAgICAgICAuIGNmZ19zdG9wX2JpdCAgICAgICggIGNmZ19zdG9wX2JpdCAgICAgKSwKKyAgICAgICAgICAgICAgIC4gY2ZnX3ByaV9tb2QgICAgICAgKCAgY2ZnX3ByaV9tb2QgICAgICApLAorCisgICAgICAgICAgICAgICAuIGVycm9yX2luZCAgICAgICAgICggIGVycm9yX2luZCAgICAgICAgKSwKKworICAgICAgIC8vIEZJRk8gY29udHJvbCBzaWduYWwKKyAgICAgICAgICAgICAgIC4gIGZpZm9fYXZhbCAgICAgICAgKCByeF9yZWFkeSAgICAgICAgICApLAorICAgICAgICAgICAgICAgLiAgZmlmb193ciAgICAgICAgICAoIHJ4X3dyICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAuICBmaWZvX2RhdGEgICAgICAgICggcnhfZGF0YSAgICAgICAgICAgKSwKKworICAgICAgICAgIC8vIExpbmUgSW50ZXJmYWNlCisgICAgICAgICAgICAgICAuICBzaSAgICAgICAgICAgICAgIChzaV9zcyAgICAgICAgICAgICAgKQorICAgICAgICAgICk7CisKKy8vIERvdWJsZSBTeW5jIFJYRAorZG91YmxlX3N5bmNfbG93ICAgdV9yeGRfc3luYyAoCisgICAgICAgICAgICAgICAuaW5fZGF0YSAgICAgICAgICAgKHJ4ZCAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgICAgLm91dF9jbGsgICAgICAgICAgIChiYXVkX2Nsa18xNnggICAgICAgKSwKKyAgICAgICAgICAgICAgIC5vdXRfcnN0X24gICAgICAgICAobGluZV9yZXNldF9uICAgICAgICksCisgICAgICAgICAgICAgICAub3V0X2RhdGEgICAgICAgICAgKHNpX3NzICAgICAgICAgICAgICApIAorICAgICAgICAgICk7CisKKworYXNzaWduICAgZnJtX2Vycm9yICAgICAgICAgID0gKGVycm9yX2luZCA9PSAyJ2IwMSk7Cithc3NpZ24gICBwYXJfZXJyb3IgICAgICAgICAgPSAoZXJyb3JfaW5kID09IDInYjEwKTsKKworCisKK2VuZG1vZHVsZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvdWFydDJ3Yi9zcmMvdWFydDJ3Yi5zdiBiL3Zlcmlsb2cvcnRsL3VhcnQyd2Ivc3JjL3VhcnQyd2Iuc3YKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGJmNTBiMwotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL3VhcnQyd2Ivc3JjL3VhcnQyd2Iuc3YKQEAgLTAsMCArMSwyMjkgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEgLCBEaW5lc2ggQW5uYXl5YSAgICAgICAgICAgICAgICAgICAgICAgICAgDQorLy8gDQorLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7DQorLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKy8vDQorLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisvLw0KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUNCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLA0KKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMA0KKy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBDcmVhdGVkIGJ5IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+DQorLy8NCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQorLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gIFVBUlQyV0IgIFRvcCBNb2R1bGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gICAgMS4gdWFydF9jb3JlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICAgIDIuIHVhcnRfbXNnX2hhbmRsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICAgIG5vdGhpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gIEF1dGhvcihzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vICAgICAgLSBEaW5lc2ggQW5uYXl5YSwgZGluZXNoYUBvcGVuY29yZXMub3JnICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyBDb3B5cmlnaHQgKEMpIDIwMDAgQXV0aG9ycyBhbmQgT1BFTkNPUkVTLk9SRyAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgICAvLy8vDQorLy8vLyByZXN0cmljdGlvbiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgICAgLy8vLw0KKy8vLy8gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgIC8vLy8NCisvLy8vIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLiAvLy8vDQorLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCAgIC8vLy8NCisvLy8vIGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAvLy8vDQorLy8vLyBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgLy8vLw0KKy8vLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSAgIC8vLy8NCisvLy8vIGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gVGhpcyBzb3VyY2UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlICAgICAgIC8vLy8NCisvLy8vIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgICAvLy8vDQorLy8vLyB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSICAgICAgLy8vLw0KKy8vLy8gUFVSUE9TRS4gIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIC8vLy8NCisvLy8vIGRldGFpbHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vDQorLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgIC8vLy8NCisvLy8vIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBzb3VyY2U7IGlmIG5vdCwgZG93bmxvYWQgaXQgICAvLy8vDQorLy8vLyBmcm9tIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9sZ3BsLnNodG1sICAgICAgICAgICAgICAgICAgICAgLy8vLw0KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8NCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQorDQorbW9kdWxlIHVhcnQyd2IgKCAgDQorICAgICAgICBpbnB1dCB3aXJlICAgICAgICAgICAgICAgICAgYXJzdF9uICAgICAgICAgICwgLy8gIHN5bmMgcmVzZXQNCisgICAgICAgIGlucHV0IHdpcmUgICAgICAgICAgICAgICAgICBhcHBfY2xrICAgICAgICAgLCAvLyAgc3lzIGNsb2NrICAgIA0KKw0KKwkvLyBjb25maWd1cmF0aW9uIGNvbnRyb2wNCisgICAgICAgaW5wdXQgd2lyZSAgICAgICAgICAgICAgICAgIGNmZ190eF9lbmFibGUgICAgLCAvLyBFbmFibGUgVHJhbnNtaXQgUGF0aA0KKyAgICAgICBpbnB1dCB3aXJlICAgICAgICAgICAgICAgICAgY2ZnX3J4X2VuYWJsZSAgICAsIC8vIEVuYWJsZSBSZWNlaXZlZCBQYXRoDQorICAgICAgIGlucHV0IHdpcmUgICAgICAgICAgICAgICAgICBjZmdfc3RvcF9iaXQgICAgICwgLy8gMCAtPiAxIFN0YXJ0ICwgMSAtPiAyIFN0b3AgQml0cw0KKyAgICAgICBpbnB1dCB3aXJlIFsxOjBdICAgICAgICAgICAgY2ZnX3ByaV9tb2QgICAgICAsIC8vIHByaW9yaXR5IG1vZGUsIDAgLT4gbm9wLCAxIC0+IEV2ZW4sIDIgLT4gT2RkDQorICAgICAgIGlucHV0IHdpcmUgWzExOjBdCSAgICBjZmdfYmF1ZF8xNnggICAgICwgLy8gMTZ4IEJhdWQgY2xvY2sgZ2VuZXJhdGlvbg0KKw0KKyAgICAvLyBNYXN0ZXIgUG9ydA0KKyAgICAgICBvdXRwdXQgICB3aXJlICAgICAgICAgICAgICAgIHdibV9jeWNfbyAgICAgICAgLCAgLy8gc3Ryb2JlL3JlcXVlc3QNCisgICAgICAgb3V0cHV0ICAgd2lyZSAgICAgICAgICAgICAgICB3Ym1fc3RiX28gICAgICAgICwgIC8vIHN0cm9iZS9yZXF1ZXN0DQorICAgICAgIG91dHB1dCAgIHdpcmUgWzMxOjBdICAgICAgICAgd2JtX2Fkcl9vICAgICAgICAsICAvLyBhZGRyZXNzDQorICAgICAgIG91dHB1dCAgIHdpcmUgICAgICAgICAgICAgICAgd2JtX3dlX28gICAgICAgICAsICAvLyB3cml0ZQ0KKyAgICAgICBvdXRwdXQgICB3aXJlIFszMTowXSAgICAgICAgIHdibV9kYXRfbyAgICAgICAgLCAgLy8gZGF0YSBvdXRwdXQNCisgICAgICAgb3V0cHV0ICAgd2lyZSBbMzowXSAgICAgICAgICB3Ym1fc2VsX28gICAgICAgICwgIC8vIGJ5dGUgZW5hYmxlDQorICAgICAgIGlucHV0ICAgIHdpcmUgWzMxOjBdICAgICAgICAgd2JtX2RhdF9pICAgICAgICAsICAvLyBkYXRhIGlucHV0DQorICAgICAgIGlucHV0ICAgIHdpcmUgICAgICAgICAgICAgICAgd2JtX2Fja19pICAgICAgICAsICAvLyBhY2tub3dsZWdlbWVudA0KKyAgICAgICBpbnB1dCAgICB3aXJlICAgICAgICAgICAgICAgIHdibV9lcnJfaSAgICAgICAgLCAgLy8gZXJyb3INCisNCisgICAgICAgLy8gU3RhdHVzIGluZm9ybWF0aW9uDQorICAgICAgIG91dHB1dCAgIHdpcmUgICAgICAgICAgICAgICBmcm1fZXJyb3IgICAgICAgICwgLy8gZnJhbWluZyBlcnJvcg0KKyAgICAgICBvdXRwdXQgICB3aXJlICAgICAgIAkgICAgcGFyX2Vycm9yICAgICAgICAsIC8vIHBhciBlcnJvcg0KKw0KKyAgICAgICBvdXRwdXQgICB3aXJlICAgICAgICAgICAgICAgYmF1ZF9jbGtfMTZ4ICAgICAsIC8vIDE2eCBCYXVkIGNsb2NrDQorDQorICAgICAgIC8vIExpbmUgSW50ZXJmYWNlDQorICAgICAgIGlucHV0ICAgIHdpcmUgICAgICAgICAgICAgIHJ4ZCAgICAgICAgICAgICAgICwgLy8gdWFydCByeGQNCisgICAgICAgb3V0cHV0ICAgd2lyZSAgICAgICAgICAgICAgdHhkICAgICAgICAgICAgICAgICAvLyB1YXJ0IHR4ZA0KKw0KKyAgICAgKTsNCisNCisNCisNCisNCisNCisNCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vIENvbnRyb2wgVW5pdCBpbnRlcmZhY2UNCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKw0KK3dpcmUgIFszMTowXSAgICAgICByZWdfYWRkciAgICAgICAgOyAvLyBSZWdpc3RlciBBZGRyZXNzDQord2lyZSAgWzMxOjBdICAgICAgIHJlZ193ZGF0YSAgICAgICA7IC8vIFJlZ2lzdGVyIFdkYXRhDQord2lyZSAgICAgICAgICAgICAgIHJlZ19yZXEgICAgICAgICA7IC8vIFJlZ2lzdGVyIFJlcXVlc3QNCit3aXJlICAgICAgICAgICAgICAgcmVnX3dyICAgICAgICAgIDsgLy8gMSAtPiB3cml0ZTsgMCAtPiByZWFkDQord2lyZSAgICAgICAgICAgICAgIHJlZ19hY2sgICAgICAgICA7IC8vIFJlZ2lzdGVyIEFjaw0KK3dpcmUgICBbMzE6MF0gICAgICByZWdfcmRhdGEgICAgICAgOw0KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisvLyBUWEQgUGF0aA0KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCit3aXJlICAgICAgICAgICAgICB0eF9kYXRhX2F2YWlsICAgIDsgLy8gSW5kaWNhdGUgdmFsaWQgVFhEIERhdGEgDQord2lyZSBbNzowXSAgICAgICAgdHhfZGF0YSAgICAgICAgICA7IC8vIFRYRCBEYXRhIHRvIGJlIHRyYW5zbWl0ZWQNCit3aXJlICAgICAgICAgICAgICB0eF9yZCAgICAgICAgICAgIDsgLy8gSW5kaWNhdGUgVFhEIERhdGEgQmVlbiBSZWFkDQorDQorDQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy8vIFJYRCBQYXRoDQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK3dpcmUgICAgICAgICByeF9yZWFkeSAgICAgICAgICAgICAgOyAvLyBJbmRpY2F0ZSBSZWFkeSB0byBhY2NlcHQgdGhlIFJlYWQgRGF0YQ0KK3dpcmUgWzc6MF0gIHJ4X2RhdGEgICAgICAgICAgICAgICAgOyAvLyBSWEQgRGF0YSANCit3aXJlICAgICAgICByeF93ciAgICAgICAgICAgICAgICAgIDsgLy8gVmFsaWQgUlhEIERhdGENCisNCit3aXJlICAgICAgICBsaW5lX3Jlc2V0X24gICAgICAgICAgIDsNCisNCithc3NpZ24gd2JtX2N5Y19vICA9IHdibV9zdGJfbzsNCisNCisNCisvLyBBc3luYyBBcHAgY2xvY2sgdG8gVWFydCBjbG9jayBoYW5kbGluZw0KKw0KK2FzeW5jX3JlZ19idXMgIyguQVcoMzIpLCAuRFcoMzIpLC5CRVcoNCkpDQorICAgICAgICAgIHVfYXN5bmNfcmVnX2J1cyAoDQorICAgIC8vIEluaXRpYXRvciBkZWNsYXJ0aW9uDQorICAgICAgICAgIC5pbl9jbGsgICAgICAgICAgICAgICAgICAgIChiYXVkX2Nsa18xNngpLA0KKyAgICAgICAgICAuaW5fcmVzZXRfbiAgICAgICAgICAgICAgICAobGluZV9yZXNldF9uKSwNCisgICAgICAgLy8gUmVnIEJ1cyBNYXN0ZXINCisgICAgICAgICAgLy8gb3V0cHV0cw0KKyAgICAgICAgICAuaW5fcmVnX3JkYXRhICAgICAgICAgICAgICAgKHJlZ19yZGF0YSksDQorICAgICAgICAgIC5pbl9yZWdfYWNrICAgICAgICAgICAgICAgICAocmVnX2FjayksDQorICAgICAgICAgIC5pbl9yZWdfdGltZW91dCAgICAgICAgICAgICAoKSwNCisNCisgICAgICAgICAgLy8gSW5wdXRzDQorICAgICAgICAgIC5pbl9yZWdfY3MgICAgICAgICAgICAgICAgICAocmVnX3JlcSksDQorICAgICAgICAgIC5pbl9yZWdfYWRkciAgICAgICAgICAgICAgICAocmVnX2FkZHIpLA0KKyAgICAgICAgICAuaW5fcmVnX3dkYXRhICAgICAgICAgICAgICAgKHJlZ193ZGF0YSksDQorICAgICAgICAgIC5pbl9yZWdfd3IgICAgICAgICAgICAgICAgICAocmVnX3dyKSwNCisgICAgICAgICAgLmluX3JlZ19iZSAgICAgICAgICAgICAgICAgICg0J2hGKSwgLy8gTm8gYnl0ZSBlbmFibGUgYmFzZWQgc3VwcG9ydA0KKw0KKyAgICAvLyBUYXJnZXQgRGVjbGFyYXRpb24NCisgICAgICAgICAgLm91dF9jbGsgICAgICAgICAgICAgICAgICAgIChhcHBfY2xrKSwNCisgICAgICAgICAgLm91dF9yZXNldF9uICAgICAgICAgICAgICAgIChhcnN0X24pLA0KKyAgICAgIC8vIFJlZyBCdXMgU2xhdmUNCisgICAgICAgICAgLy8gb3V0cHV0DQorICAgICAgICAgIC5vdXRfcmVnX2NzICAgICAgICAgICAgICAgICAod2JtX3N0Yl9vKSwNCisgICAgICAgICAgLm91dF9yZWdfYWRkciAgICAgICAgICAgICAgICh3Ym1fYWRyX28pLA0KKyAgICAgICAgICAub3V0X3JlZ193ZGF0YSAgICAgICAgICAgICAgKHdibV9kYXRfbyksDQorICAgICAgICAgIC5vdXRfcmVnX3dyICAgICAgICAgICAgICAgICAod2JtX3dlX28pLA0KKyAgICAgICAgICAub3V0X3JlZ19iZSAgICAgICAgICAgICAgICAgKHdibV9zZWxfbyksDQorDQorICAgICAgICAgIC8vIElucHV0cw0KKyAgICAgICAgICAub3V0X3JlZ19yZGF0YSAgICAgICAgICAgICAgKHdibV9kYXRfaSksDQorICAgICAgICAgIC5vdXRfcmVnX2FjayAgICAgICAgICAgICAgICAod2JtX2Fja19pKQ0KKyAgICk7DQorDQorDQordWFydDJfY29yZSB1X2NvcmUgKCAgDQorICAgICAgICAgIC5hcnN0X24gICAgICAgICAgICAoYXJzdF9uKSAsDQorICAgICAgICAgIC5hcHBfY2xrICAgICAgICAgICAoYXBwX2NsaykgLA0KKw0KKwkvLyBjb25maWd1cmF0aW9uIGNvbnRyb2wNCisgICAgICAgICAgLmNmZ190eF9lbmFibGUgICAgICAoY2ZnX3R4X2VuYWJsZSkgLCANCisgICAgICAgICAgLmNmZ19yeF9lbmFibGUgICAgICAoY2ZnX3J4X2VuYWJsZSkgLCANCisgICAgICAgICAgLmNmZ19zdG9wX2JpdCAgICAgICAoY2ZnX3N0b3BfYml0KSAgLCANCisgICAgICAgICAgLmNmZ19wcmlfbW9kICAgICAgICAoY2ZnX3ByaV9tb2QpICAgLCANCisJICAuY2ZnX2JhdWRfMTZ4ICAgICAgIChjZmdfYmF1ZF8xNngpICAsDQorDQorICAgIC8vIFRYRCBJbmZvcm1hdGlvbg0KKyAgICAgICAgICAudHhfZGF0YV9hdmFpbCAgICAgICh0eF9kYXRhX2F2YWlsKSAsDQorICAgICAgICAgIC50eF9yZCAgICAgICAgICAgICAgKHR4X3JkKSAgICAgICAgICwNCisgICAgICAgICAgLnR4X2RhdGEgICAgICAgICAgICAodHhfZGF0YSkgICAgICAgLA0KKyAgICAgICAgIA0KKw0KKyAgICAvLyBSWEQgSW5mb3JtYXRpb24NCisgICAgICAgICAgLnJ4X3JlYWR5ICAgICAgICAgICAocnhfcmVhZHkpICAgICAgLA0KKyAgICAgICAgICAucnhfd3IgICAgICAgICAgICAgIChyeF93cikgICAgICAgICAsDQorICAgICAgICAgIC5yeF9kYXRhICAgICAgICAgICAgKHJ4X2RhdGEpICAgICAgICwNCisNCisgICAgICAgLy8gU3RhdHVzIGluZm9ybWF0aW9uDQorICAgICAgICAgIC5mcm1fZXJyb3IgICAgICAgICAgKGZybV9lcnJvcikgLA0KKwkgIC5wYXJfZXJyb3IgICAgICAgICAgKHBhcl9lcnJvcikgLA0KKw0KKwkgIC5iYXVkX2Nsa18xNnggICAgICAgKGJhdWRfY2xrXzE2eCkgLA0KKwkgIC5saW5lX3Jlc2V0X24gICAgICAgKGxpbmVfcmVzZXRfbiksDQorDQorICAgICAgIC8vIExpbmUgSW50ZXJmYWNlDQorICAgICAgICAgIC5yeGQgICAgICAgICAgICAgICAgKHJ4ZCkgLA0KKyAgICAgICAgICAudHhkICAgICAgICAgICAgICAgICh0eGQpIA0KKw0KKyAgICAgKTsNCisNCisNCisNCit1YXJ0X21zZ19oYW5kbGVyIHVfbXNnICggIA0KKyAgICAgICAgICAucmVzZXRfbiAgICAgICAgICAgIChhcnN0X24gKSAsDQorICAgICAgICAgIC5zeXNfY2xrICAgICAgICAgICAgKGJhdWRfY2xrXzE2eCApICwNCisNCisNCisgICAgLy8gVUFSVC1UWCBJbmZvcm1hdGlvbg0KKyAgICAgICAgICAudHhfZGF0YV9hdmFpbCAgICAgICh0eF9kYXRhX2F2YWlsKSAsDQorICAgICAgICAgIC50eF9yZCAgICAgICAgICAgICAgKHR4X3JkKSAsDQorICAgICAgICAgIC50eF9kYXRhICAgICAgICAgICAgKHR4X2RhdGEpICwNCisgICAgICAgICANCisNCisgICAgLy8gVUFSVC1SWCBJbmZvcm1hdGlvbg0KKyAgICAgICAgICAucnhfcmVhZHkgICAgICAgICAgIChyeF9yZWFkeSkgLA0KKyAgICAgICAgICAucnhfd3IgICAgICAgICAgICAgIChyeF93cikgLA0KKyAgICAgICAgICAucnhfZGF0YSAgICAgICAgICAgIChyeF9kYXRhKSAsDQorDQorICAgICAgLy8gVG93YXJkcyBDb250cm9sIFVuaXQNCisgICAgICAgICAgLnJlZ19hZGRyICAgICAgICAgIChyZWdfYWRkciksDQorICAgICAgICAgIC5yZWdfd3IgICAgICAgICAgICAocmVnX3dyKSwNCisgICAgICAgICAgLnJlZ193ZGF0YSAgICAgICAgIChyZWdfd2RhdGEpLA0KKyAgICAgICAgICAucmVnX3JlcSAgICAgICAgICAgKHJlZ19yZXEpLA0KKyAgICAgICAgICAucmVnX2FjayAgICAgICAgICAgKHJlZ19hY2spLA0KKwkgIC5yZWdfcmRhdGEgICAgICAgICAocmVnX3JkYXRhKSANCisNCisgICAgICk7DQorDQorZW5kbW9kdWxlDQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvdWFydDJ3Yi9zcmMvdWFydF9tc2dfaGFuZGxlci52IGIvdmVyaWxvZy9ydGwvdWFydDJ3Yi9zcmMvdWFydF9tc2dfaGFuZGxlci52Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQ3MWZmODgKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC91YXJ0MndiL3NyYy91YXJ0X21zZ19oYW5kbGVyLnYKQEAgLTAsMCArMSwzNzYgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFVBUlQgTWVzc2FnZSBIYW5kbGVyIE1vZHVsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSB1YXJ0MnNwaSBjb3JlcyBwcm9qZWN0ICAgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9jb3Jlcy91YXJ0MnNwaS8gICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFVhcnQgTWVzc2FnZSBIYW5kbGVyIGRlZmluaXRpb25zLiAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcihzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAtIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gQ29weXJpZ2h0IChDKSAyMDAwIEF1dGhvcnMgYW5kIE9QRU5DT1JFUy5PUkcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgIC8vLy8KKy8vLy8gcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgIC8vLy8KKy8vLy8gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgIC8vLy8KKy8vLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCAgIC8vLy8KKy8vLy8gYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IC8vLy8KKy8vLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSAgIC8vLy8KKy8vLy8gbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlICAgICAgIC8vLy8KKy8vLy8gdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCAgIC8vLy8KKy8vLy8gd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAgICAgIC8vLy8KKy8vLy8gUFVSUE9TRS4gIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIC8vLy8KKy8vLy8gZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvdXJjZTsgaWYgbm90LCBkb3dubG9hZCBpdCAgIC8vLy8KKy8vLy8gZnJvbSBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvbGdwbC5zaHRtbCAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworbW9kdWxlIHVhcnRfbXNnX2hhbmRsZXIgKCAgCisgICAgICAgIHJlc2V0X24gLAorICAgICAgICBzeXNfY2xrICwKKworCisgICAgLy8gVUFSVC1UWCBJbmZvcm1hdGlvbgorICAgICAgICB0eF9kYXRhX2F2YWlsLAorICAgICAgICB0eF9yZCwKKyAgICAgICAgdHhfZGF0YSwKKyAgICAgICAgIAorCisgICAgLy8gVUFSVC1SWCBJbmZvcm1hdGlvbgorICAgICAgICByeF9yZWFkeSwKKyAgICAgICAgcnhfd3IsCisgICAgICAgIHJ4X2RhdGEsCisKKyAgICAgIC8vIFRvd2FyZHMgUmVnaXN0ZXIgSW50ZXJmYWNlCisgICAgICAgIHJlZ19hZGRyLAorICAgICAgICByZWdfd3IsICAKKyAgICAgICAgcmVnX3dkYXRhLAorICAgICAgICByZWdfcmVxLAorCXJlZ19hY2ssCisJcmVnX3JkYXRhCisKKyAgICAgKTsKKworCisvLyBEZWZpbmUgdGhlIE1lc3NhZ2UgSGFubGRlIFN0YXRlcworYGRlZmluZSBJRExFCSAgICAgICAgIDQnaDAKK2BkZWZpbmUgSURMRV9UWF9NU0cxCSA0J2gxCitgZGVmaW5lIElETEVfVFhfTVNHMgkgNCdoMgorYGRlZmluZSBSWF9DTURfUEhBU0UJIDQnaDMKK2BkZWZpbmUgQURSX1BIQVNFCSA0J2g0CitgZGVmaW5lIFdSX0RBVEFfUEhBU0UJIDQnaDUKK2BkZWZpbmUgU0VORF9XUl9SRVEJIDQnaDYKK2BkZWZpbmUgU0VORF9SRF9SRVEJIDQnaDcKK2BkZWZpbmUgU0VORF9SRF9EQVRBCSA0J2g4CitgZGVmaW5lIFRYX01TRyAgICAgICAgICAgNCdoOQorICAgICAKK2BkZWZpbmUgQlJFQUtfQ0hBUiAgICAgICA4J2gwQQorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gR2xvYmFsIERlYworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2lucHV0ICAgICAgICByZXNldF9uICAgICAgICAgICAgICAgOyAvLyBsaW5lIHJlc2V0CitpbnB1dCAgICAgICAgc3lzX2NsayAgICAgICAgICAgICAgIDsgLy8gbGluZSBjbG9jaworCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFVBUlQgVFhEIFBhdGgKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK291dHB1dCAgICAgICAgIHR4X2RhdGFfYXZhaWwgICAgICAgIDsgLy8gSW5kaWNhdGUgdmFsaWQgVFhEIERhdGEgYXZhaWxhYmxlCitvdXRwdXQgWzc6MF0gICB0eF9kYXRhICAgICAgICAgICAgICA7IC8vIFRYRCBEYXRhIHRvIGJlIHRyYW5zbWl0ZWQKK2lucHV0ICAgICAgICAgIHR4X3JkICAgICAgICAgICAgICAgIDsgLy8gSW5kaWNhdGUgVFhEIERhdGEgQmVlbiBSZWFkCisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gVUFSVCBSWEQgUGF0aAorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorb3V0cHV0ICAgICAgICAgcnhfcmVhZHkgICAgICAgICAgICA7IC8vIEluZGljYXRlIFJlYWR5IHRvIGFjY2VwdCB0aGUgUmVhZCBEYXRhCitpbnB1dCBbNzowXSAgICByeF9kYXRhICAgICAgICAgICAgIDsgLy8gUlhEIERhdGEgCitpbnB1dCAgICAgICAgICByeF93ciAgICAgICAgICAgICAgIDsgLy8gVmFsaWQgUlhEIERhdGEKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIENvbnRyb2wgVW5pdCBpbnRlcmZhY2UKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK291dHB1dCAgWzMxOjBdIHJlZ19hZGRyICAgICAgICAgICA7IC8vIE9wZXJlbmQtMQorb3V0cHV0ICBbMzE6MF0gcmVnX3dkYXRhICAgICAgICAgIDsgLy8gT3BlcmVuZC0yCitvdXRwdXQgICAgICAgICByZWdfcmVxICAgICAgICAgICAgOyAvLyBSZWdpc3RlciBSZXF1ZXN0CitvdXRwdXQgICAgICAgICByZWdfd3IgICAgICAgICAgICAgOyAvLyAxIC0+IHdyaXRlOyAwIC0+IHJlYWQKK2lucHV0ICAgICAgICAgIHJlZ19hY2sgICAgICAgICAgICA7IC8vIFJlZ2lzdGVyIEFjaworaW5wdXQgICBbMzE6MF0gcmVnX3JkYXRhICAgICAgICAgIDsKKworLy8gTG9jYWwgV2lyZS9SZWdpc3RlciBEZWNsZXJhdGlvbgorLy8KKy8vCityZWcgICAgICAgICAgICAgdHhfZGF0YV9hdmFpbCAgICAgIDsKK3JlZyBbNzowXSAgICAgICB0eF9kYXRhICAgICAgICAgICAgOworcmVnIFsxNio4LTE6MF0gIFR4TXNnQnVmICAgICAgICAgICA7IC8vIDE2IEJ5dGUgVHggTWVzc2FnZSBCdWZmZXIKK3JlZyAgWzQ6MF0gICAgICBUeE1zZ1NpemUgICAgICAgICAgOworcmVnICBbNDowXSAgICAgIFJ4TXNnQ250ICAgICAgICAgICA7IC8vIENvdW50IHRoZSBSZWNlaXZlIE1lc3NhZ2UgQ291bnQKK3JlZyAgWzM6MF0gICAgICBTdGF0ZSAgICAgICAgICAgICAgOworcmVnICBbMzowXSAgICAgIE5leHRTdGF0ZSAgICAgICAgICA7CityZWcgIFsxNTowXSAgICAgY21kICAgICAgICAgICAgICAgIDsgLy8gY29tbWFuZAorcmVnICBbMzE6MF0gICAgIHJlZ19hZGRyICAgICAgICAgICA7IC8vIHJlZ19hZGRyCityZWcgIFszMTowXSAgICAgcmVnX3dkYXRhICAgICAgICAgIDsgLy8gcmVnX2FkZHIKK3JlZyAgICAgICAgICAgICByZWdfd3IgICAgICAgICAgICAgOyAvLyAxIC0+IFJlZyBXcml0ZSByZXF1ZXN0LCAwIC0+IFJlYWQgUmVxdWVzdGlvbgorcmVnICAgICAgICAgICAgIHJlZ19yZXEgICAgICAgICAgICA7IC8vIDEgLT4gUmVnaXN0ZXIgcmVxdWVzdAorCisKK3dpcmUgcnhfcmVhZHkgPSAxOyAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBVQVJUIE1lc3NhZ2UgSGFubGRpbmcgU3RlcHMKKyoKKyogIDEuIE9uIFJlc2V0IE9yIFVua25vd24gY29tbWFuZCwgU2VuZCB0aGUgRGVmYXVsdCBNZXNzYWdlCisqICAgICBTZWxlY3QgT3B0aW9uOgorKiAgICAgd3IgPGFkZHI+IDxkYXRhPgorKiAgICAgcmQgPGFkZHI+CisqICAyLiBXYWl0IGZvciBVc2VyIGNvbW1hbmQgPHdyL3JkPiAKKyogIDMuIE9uIDx3cj4gY29tbWFuZCBtb3ZlIHRvIHdyaXRlIGFkZHJlc3MgcGhhc2U7CisqICBwaGFzZQorKiAgICAgICBBLiBBZnRlciB3cml0ZSBhZGRyZXNzIHBoYXNlIG1vdmUgdG8gd3JpdGUgZGF0YSBwaGFzZQorKiAgICAgICBCLiBBZnRlciB3cml0ZSBkYXRhIHBoYXNlLCBvbmNlIHVzZXIgcHJlc3MgXHIgY29tbWFuZCA7IHNlbmQgcmVnaXN0ZXIgcmVxCisqICAgICAgICAgIGFuZCB3cml0ZSByZXF1ZXN0IGFuZCBhZGRyZXNzICsgZGF0YSAKKyogICAgICAgQy4gT24gcmVjZWl2aW5nIHJlZ2lzdGVyIGFjayByZXNwb25zZTsgc2VuZCA8c3VjY2Vzcz4gbWVzc2FnZSBiYWNrIGFuZCBtb3ZlCisqICAgICAgICAgIHRvIHN0YXRlLTIKKyogIDMuICBPbiA8cmQ+IGNvbW1hbmQgbW92ZSB0byByZWFkIGFkZHJlc3MgcGhhc2U7CisqICAgICAgIEEuIEFmdGVyIHJlYWQgYWRkcmVzcyBwaGFzZSAsIG9uY2UgdXNlciBwcmVzcyAnXHInIGNvbW1hbmQ7IHNlbmQKKyogICAgICAgICAgcmVnaXN0ZXIgcmVxICwgcmVhZCByZXF1ZXN0IAorKiAgICAgICBDLiBPbiByZWNlaXZpbmcgcmVnaXN0ZXIgYWNrIHJlc3BvbnNlOyBzZW5kIDxyZXNwb25zZSArIHJlYWRfZGF0YT4gbWVzc2FnZSBhbmQgbW92ZQorKiAgICAgICAgICB0byBzdGF0ZS0yCisqICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworYWx3YXlzIEAobmVnZWRnZSByZXNldF9uIG9yIHBvc2VkZ2Ugc3lzX2NsaykKK2JlZ2luCisgICBpZihyZXNldF9uID09IDEnYjApIGJlZ2luCisgICAgICB0eF9kYXRhX2F2YWlsIDw9IDA7CisgICAgICByZWdfcmVxICAgICAgIDw9IDA7CisgICAgICByZWdfYWRkciAgICAgICA8PSAwOworICAgICAgcmVnX3dyICAgICAgICA8PSAxJ2IwOyAvLyBSZWFkIHJlcXVlc3QKKyAgICAgIHJlZ193ZGF0YSAgICAgPD0gMDsKKyAgICAgIFN0YXRlICAgICAgICAgPD0gYElETEU7CisgICAgICBOZXh0U3RhdGUgICAgIDw9IGBJRExFOworICAgZW5kIGVsc2UgYmVnaW4KKyAgIGNhc2UoU3RhdGUpCisgICAgICAvLyBTZW5kIERlZmF1bHQgTWVzc2FnZQorICAgICAgYElETEU6IGJlZ2luCisgICAJICBUeE1zZ0J1ZiAgICAgIDw9ICJDb21tYW5kIEZvcm1hdDpcbiI7ICAvLyBBbGlnbiB0byAxNiBjaGFyYWN0ZXIgZm9ybWF0IGJ5IGFwcGVuZGluZyBzcGFjZSBjaGFyYWN0ZXIKKyAgICAgICAgICBUeE1zZ1NpemUgICAgIDw9IDE2OworCSAgdHhfZGF0YV9hdmFpbCA8PSAwOworCSAgU3RhdGUgICAgICAgICA8PSBgVFhfTVNHOworCSAgTmV4dFN0YXRlICAgICA8PSBgSURMRV9UWF9NU0cxOworICAgICAgIGVuZAorCisgICAgICAvLyBTZW5kIERlZmF1bHQgTWVzc2FnZSAoQ29udGQuLikKKyAgICAgIGBJRExFX1RYX01TRzE6IGJlZ2luCisJICAgVHhNc2dCdWYgICAgICA8PSAid20gPGFkPiA8ZGF0YT5cbiAiOyAvLyBBbGlnbiB0byAxNiBjaGFyYWN0ZXIgZm9ybWF0IGJ5IGFwcGVuZGluZyBzcGFjZSBjaGFyYWN0ZXIgCisgICAgICAgICAgIFR4TXNnU2l6ZSAgICAgPD0gMTU7CisJICAgdHhfZGF0YV9hdmFpbCA8PSAwOworCSAgIFN0YXRlICAgICAgICAgPD0gYFRYX01TRzsKKwkgICBOZXh0U3RhdGUgICAgIDw9IGBJRExFX1RYX01TRzI7CisgICAgICAgIGVuZAorCisgICAgICAvLyBTZW5kIERlZmF1bHQgTWVzc2FnZSAoQ29udGQuLikKKyAgICAgIGBJRExFX1RYX01TRzI6IGJlZ2luCisJICAgVHhNc2dCdWYgICAgICA8PSAicm0gPGFkPlxuPj4gICAgICAiOyAgLy8gQWxpZ24gdG8gMTYgY2hhcmFjdGVyIGZvcm1hdCBieSBhcHBlbmRpbmcgc3BhY2UgY2hhcmFjdGVyCisgICAgICAgICAgIFR4TXNnU2l6ZSAgICAgPD0gMTA7CisJICAgdHhfZGF0YV9hdmFpbCA8PSAwOworCSAgIFJ4TXNnQ250ICAgICAgPD0gMDsKKwkgICBTdGF0ZSAgICAgICAgIDw9IGBUWF9NU0c7CisJICAgTmV4dFN0YXRlICAgICA8PSBgUlhfQ01EX1BIQVNFOworICAgICAgZW5kCisKKyAgICAgICAvLyBXYWl0IGZvciBSZXNwb25zZQorICAgIGBSWF9DTURfUEhBU0U6IGJlZ2luCisJaWYocnhfd3IgPT0gMSkgYmVnaW4KKwkgICAvL2lmKFJ4TXNnQ250ID09IDAgJiYgcnhfZGF0YSA9PSAiICIpIGJlZ2luIC8vIElnbm9yZSB0aGUgc2FtZQorCSAgIGlmKFJ4TXNnQ250ID09IDAgJiYgcnhfZGF0YSA9PSA4J2gyMCkgYmVnaW4gLy8gSWdub3JlIHRoZSBzYW1lCisJICAgLy9lbmQgZWxzZSBpZihSeE1zZ0NudCA+IDAgJiYgcnhfZGF0YSA9PSAiICIpIGJlZ2luIC8vIENoZWNrIHRoZSBjb21tYW5kCisJICAgZW5kIGVsc2UgaWYoUnhNc2dDbnQgPiAwICYmIHJ4X2RhdGEgPT0gOCdoMjApIGJlZ2luIC8vIENoZWNrIHRoZSBjb21tYW5kCisJICAgICAgcmVnX2FkZHIgPD0gMDsKKwkgICAgICBSeE1zZ0NudCA8PSAwOworCSAgICAgLy9pZihjbWQgPT0gIndtIikgYmVnaW4KKwkgICAgIGlmKGNtZCA9PSAxNidoNzc2RCkgYmVnaW4KKwkJIFN0YXRlIDw9IGBBRFJfUEhBU0U7CisJICAgICAgLy9lbmQgZWxzZSBpZihjbWQgPT0gInJtIikgYmVnaW4KKwkgICAgIGVuZCBlbHNlIGlmKGNtZCA9PSAxNidoNzI2RCkgYmVnaW4KKworCQkgU3RhdGUgPD0gYEFEUl9QSEFTRTsKKyAgICAgICAgICAgICBlbmQgZWxzZSBiZWdpbiAvLyBVbmtub3cgY29tbWFuZAorCSAgICAgICAgU3RhdGUgICAgICAgICA8PSBgSURMRTsKKyAgICAgICAgICAgICBlbmQKKwkgICAvL2VuZCBlbHNlIGlmKHJ4X2RhdGEgPT0gIlxuIikgYmVnaW4gLy8gRXJyb3IgU3RhdGUKKwkgICBlbmQgZWxzZSBpZihyeF9kYXRhID09IGBCUkVBS19DSEFSKSBiZWdpbiAvLyBFcnJvciBTdGF0ZQorCSAgICAgIFN0YXRlICAgICAgICAgPD0gYElETEU7CisJICAgZW5kIAorCSAgIGVsc2UgYmVnaW4KKyAgICAgICAgICAgICAgY21kIDw9ICAoY21kIDw8IDgpIHwgcnhfZGF0YSA7CisJICAgICAgUnhNc2dDbnQgPD0gUnhNc2dDbnQrMTsKKyAgICAgICAgICAgZW5kCisgICAgICAgIGVuZCAKKyAgICAgZW5kCisgICAgICAgLy8gV3JpdGUgQWRkcmVzcyBQaGFzZSAKKyAgICBgQURSX1BIQVNFOiBiZWdpbgorCWlmKHJ4X3dyID09IDEpIGJlZ2luCisJICAgLy9pZihSeE1zZ0NudCA9PSAwICYmIHJ4X2RhdGEgPT0gIiAiKSBiZWdpbiAvLyBJZ25vcmUgdGhlIFNwYWNlIGNoYXJhY3RlcgorCSAgIGlmKFJ4TXNnQ250ID09IDAgJiYgcnhfZGF0YSA9PSA4J2gyMCkgYmVnaW4gLy8gSWdub3JlIHRoZSBTcGFjZSBjaGFyYWN0ZXIKKwkgICBlbmQgZWxzZSBpZihSeE1zZ0NudCA+IDAgJiYgKHJ4X2RhdGEgPT0gOCdoMjAgfHwgcnhfZGF0YSA9PSBgQlJFQUtfQ0hBUikpIGJlZ2luIC8vIE1vdmUgdG8gd3JpdGUgZGF0YSBwaGFzZQorCSAgICAgLy9pZihSeE1zZ0NudCA+IDAgJiYgIndtIiAmJiByeF9kYXRhID09ICIgIikgYmVnaW4gLy8gTW92ZSB0byB3cml0ZSBkYXRhIHBoYXNlCisJICAgICAgIGlmKGNtZCA9PSAxNidoNzc2RCAmJiByeF9kYXRhID09IDgnaDIwKSBiZWdpbiAvLyBNb3ZlIHRvIHdyaXRlIGRhdGEgcGhhc2UKKwkgICAgICAgICAgIHJlZ193ZGF0YSAgICAgPD0gMDsKKwkgICAgICAgICAgIFN0YXRlICAgICAgICAgPD0gYFdSX0RBVEFfUEhBU0U7CisJICAgLy8gIGVuZCBlbHNlIGlmKFJ4TXNnQ250ID4gMCAmJiAicm0iICYmIHJ4X2RhdGEgPT0gIlxuIikgYmVnaW4gLy8gTW92ZSB0byByZWFkIGRhdGEgcGhhc2UKKwkgICAgICAgZW5kIGVsc2UgaWYoY21kID09IDE2J2g3MjZEICYmIHJ4X2RhdGEgPT0gYEJSRUFLX0NIQVIpIGJlZ2luIC8vIE1vdmUgdG8gcmVhZCBkYXRhIHBoYXNlCisJICAgICAgICAgICByZWdfd3IgICAgICAgIDw9IDEnYjA7IC8vIFJlYWQgcmVxdWVzdAorCSAgICAgICAgICAgcmVnX3JlcSAgICAgICA8PSAxJ2IxOyAvLyBSZWcgUmVxdWVzdAorCSAgICAgICAgICAgU3RhdGUgICAgICAgICA8PSBgU0VORF9SRF9SRVE7CisgICAgICAgICAgICAgICAgZW5kIGVsc2UgYmVnaW4gLy8gVW5rbm93IGNvbW1hbmQKKwkgICAgICAgICAgU3RhdGUgICAgICAgICA8PSBgSURMRTsKKyAgICAgICAgICAgICAgIGVuZAorCSAgIC8vZW5kIGVsc2UgaWYocnhfZGF0YSA9PSAiXG4iKSBiZWdpbiAvLyBFcnJvciBTdGF0ZQorCSAgIGVuZCBlbHNlIGlmKHJ4X2RhdGEgPT0gYEJSRUFLX0NIQVIpIGJlZ2luIC8vIEVycm9yIFN0YXRlCisJICAgICAgU3RhdGUgICAgICAgICA8PSBgSURMRTsKKwkgICBlbmQgZWxzZSBiZWdpbiAKKyAgICAgICAgICAgICAgcmVnX2FkZHIgPD0gKHJlZ19hZGRyIDw8IDQpIHwgY2hhcjJoZXgocnhfZGF0YSk7IAorCSAgICAgIFJ4TXNnQ250IDw9IFJ4TXNnQ250KzE7CisgICAgICAgICAgIGVuZAorCWVuZAorICAgICBlbmQKKyAgICAvLyBXcml0ZSBEYXRhIFBoYXNlIAorICAgIGBXUl9EQVRBX1BIQVNFOiBiZWdpbgorCWlmKHJ4X3dyID09IDEpIGJlZ2luCisJICAgLy9pZihyeF9kYXRhID09ICIgIikgYmVnaW4gLy8gSWdub3JlIHRoZSBTcGFjZSBjaGFyYWN0ZXIKKwkgICBpZihyeF9kYXRhID09IDgnaDIwKSBiZWdpbiAvLyBJZ25vcmUgdGhlIFNwYWNlIGNoYXJhY3RlcgorCSAgIC8vZW5kIGVsc2UgaWYocnhfZGF0YSA9PSAiXG4iKSBiZWdpbiAvLyBFcnJvciBTdGF0ZQorCSAgIGVuZCBlbHNlIGlmKHJ4X2RhdGEgPT0gYEJSRUFLX0NIQVIpIGJlZ2luIC8vIEVycm9yIFN0YXRlCisJICAgICAgU3RhdGUgICAgICAgICAgIDw9IGBTRU5EX1dSX1JFUTsKKwkgICAgICByZWdfd3IgICAgICAgICAgPD0gMSdiMTsgLy8gV3JpdGUgcmVxdWVzdAorCSAgICAgIHJlZ19yZXEgICAgICAgICA8PSAxJ2IxOworCSAgIGVuZCBlbHNlIGJlZ2luIC8vIEEgdG8gRgorICAgICAgICAgICAgICAgICByZWdfd2RhdGEgPD0gKHJlZ193ZGF0YSA8PCA0KSB8IGNoYXIyaGV4KHJ4X2RhdGEpOyAKKyAgICAgICAgICAgZW5kCisJZW5kCisgICAgIGVuZAorICAgIGBTRU5EX1dSX1JFUTogYmVnaW4KKwlpZihyZWdfYWNrKSAgYmVnaW4KKwkgICByZWdfcmVxICAgICAgIDw9IDEnYjA7CisJICAgVHhNc2dCdWYgICAgICA8PSAiY21kIHN1Y2Nlc3Ncbj4+ICAiOyAvLyBBbGlnbiB0byAxNiBjaGFyYWN0ZXIgZm9ybWF0IGJ5IGFwcGVuZGluZyBzcGFjZSBjaGFyYWN0ZXIgCisgICAgICAgICAgIFR4TXNnU2l6ZSAgICAgPD0gMTQ7CisJICAgdHhfZGF0YV9hdmFpbCA8PSAwOworCSAgIFN0YXRlICAgICAgICAgPD0gYFRYX01TRzsKKwkgICBOZXh0U3RhdGUgICAgIDw9IGBSWF9DTURfUEhBU0U7CisgICAgICAgZW5kCisgICAgZW5kCisKKyAgICBgU0VORF9SRF9SRVE6IGJlZ2luCisJaWYocmVnX2FjaykgIGJlZ2luCisJICAgcmVnX3JlcSAgICAgICA8PSAxJ2IwOworCSAgIFR4TXNnQnVmICAgICAgPD0gIlJlc3BvbnNlOiAgICAgICAiOyAvLyBBbGlnbiB0byAxNiBjaGFyYWN0ZXIgZm9ybWF0IGJ5IGFwcGVuZGluZyBzcGFjZSBjaGFyYWN0ZXIgCisgICAgICAgICAgIFR4TXNnU2l6ZSAgICAgPD0gMTA7CisJICAgdHhfZGF0YV9hdmFpbCA8PSAwOworCSAgIFN0YXRlICAgICAgICAgPD0gYFRYX01TRzsKKwkgICBOZXh0U3RhdGUgICAgIDw9IGBTRU5EX1JEX0RBVEE7CisgICAgICAgZW5kCisgICAgZW5kCisgICAgYFNFTkRfUkRfREFUQTogYmVnaW4gLy8gV2FpdCBmb3IgT3BlcmF0aW9uIENvbXBsZXRpb24KKwkgICBUeE1zZ0J1ZlsxNio4LTE6MTUqOF0gPD0gaGV4MmNoYXIocmVnX3JkYXRhWzMxOjI4XSk7CisJICAgVHhNc2dCdWZbMTUqOC0xOjE0KjhdIDw9IGhleDJjaGFyKHJlZ19yZGF0YVsyNzoyNF0pOworCSAgIFR4TXNnQnVmWzE0KjgtMToxMyo4XSA8PSBoZXgyY2hhcihyZWdfcmRhdGFbMjM6MjBdKTsKKwkgICBUeE1zZ0J1ZlsxMyo4LTE6MTIqOF0gPD0gaGV4MmNoYXIocmVnX3JkYXRhWzE5OjE2XSk7CisJICAgVHhNc2dCdWZbMTIqOC0xOjExKjhdIDw9IGhleDJjaGFyKHJlZ19yZGF0YVsxNToxMl0pOworCSAgIFR4TXNnQnVmWzExKjgtMToxMCo4XSA8PSBoZXgyY2hhcihyZWdfcmRhdGFbMTE6OF0pOworCSAgIFR4TXNnQnVmWzEwKjgtMTo5KjhdICA8PSBoZXgyY2hhcihyZWdfcmRhdGFbNzo0XSk7CisJICAgVHhNc2dCdWZbOSo4LTE6OCo4XSAgIDw9IGhleDJjaGFyKHJlZ19yZGF0YVszOjBdKTsKKwkgICBUeE1zZ0J1Zls4KjgtMTo3KjhdICAgPD0gIlxuIjsKKyAgICAgICAgICAgVHhNc2dTaXplICAgICA8PSA5OworCSAgIHR4X2RhdGFfYXZhaWwgPD0gMDsKKwkgICBTdGF0ZSAgICAgICAgIDw9IGBUWF9NU0c7CisJICAgTmV4dFN0YXRlICAgICA8PSBgUlhfQ01EX1BIQVNFOworICAgICBlbmQKKworICAgICAgIC8vIFNlbmQgRGVmYXVsdCBNZXNzYWdlIChDb250ZC4uKQorICAgIGBUWF9NU0c6IGJlZ2luCisJICAgdHhfZGF0YV9hdmFpbCAgICA8PSAxOworCSAgIHR4X2RhdGEgICAgICAgICAgPD0gVHhNc2dCdWZbMTYqOC0xOjE1KjhdOworCSAgIGlmKFR4TXNnU2l6ZSA9PSAwKSBiZWdpbgorCSAgICAgIHR4X2RhdGFfYXZhaWwgPD0gMDsKKwkgICAgICBTdGF0ZSAgICAgICAgIDw9IE5leHRTdGF0ZTsKKyAgICAgICAgICAgZW5kIGVsc2UgaWYodHhfcmQpIGJlZ2luCisgICAJICAgICAgVHhNc2dCdWYgICAgICA8PSBUeE1zZ0J1ZiA8PCA4OworICAgICAgICAgICAgICBUeE1zZ1NpemUgICAgIDw9IFR4TXNnU2l6ZSAtMTsKKyAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorICAgZW5kY2FzZQorICAgZW5kCitlbmQKKworCisvLyBDaGFyYWN0ZXIgdG8gaGV4IG51bWJlcgorZnVuY3Rpb24gWzM6MF0gY2hhcjJoZXg7CitpbnB1dCBbNzowXSBkYXRhX2luOworY2FzZSAoZGF0YV9pbikKKyAgICAgOCdoMzA6CWNoYXIyaGV4ID0gNCdoMDsgLy8gY2hhcmFjdGVyICcwJyAKKyAgICAgOCdoMzE6CWNoYXIyaGV4ID0gNCdoMTsgLy8gY2hhcmFjdGVyICcxJworICAgICA4J2gzMjoJY2hhcjJoZXggPSA0J2gyOyAvLyBjaGFyYWN0ZXIgJzInCisgICAgIDgnaDMzOgljaGFyMmhleCA9IDQnaDM7IC8vIGNoYXJhY3RlciAnMycKKyAgICAgOCdoMzQ6CWNoYXIyaGV4ID0gNCdoNDsgLy8gY2hhcmFjdGVyICc0JyAKKyAgICAgOCdoMzU6CWNoYXIyaGV4ID0gNCdoNTsgLy8gY2hhcmFjdGVyICc1JworICAgICA4J2gzNjoJY2hhcjJoZXggPSA0J2g2OyAvLyBjaGFyYWN0ZXIgJzYnCisgICAgIDgnaDM3OgljaGFyMmhleCA9IDQnaDc7IC8vIGNoYXJhY3RlciAnNycKKyAgICAgOCdoMzg6CWNoYXIyaGV4ID0gNCdoODsgLy8gY2hhcmFjdGVyICc4JworICAgICA4J2gzOToJY2hhcjJoZXggPSA0J2g5OyAvLyBjaGFyYWN0ZXIgJzknCisgICAgIDgnaDQxOgljaGFyMmhleCA9IDQnaEE7IC8vIGNoYXJhY3RlciAnQScKKyAgICAgOCdoNDI6CWNoYXIyaGV4ID0gNCdoQjsgLy8gY2hhcmFjdGVyICdCJworICAgICA4J2g0MzoJY2hhcjJoZXggPSA0J2hDOyAvLyBjaGFyYWN0ZXIgJ0MnCisgICAgIDgnaDQ0OgljaGFyMmhleCA9IDQnaEQ7IC8vIGNoYXJhY3RlciAnRCcKKyAgICAgOCdoNDU6CWNoYXIyaGV4ID0gNCdoRTsgLy8gY2hhcmFjdGVyICdFJworICAgICA4J2g0NjoJY2hhcjJoZXggPSA0J2hGOyAvLyBjaGFyYWN0ZXIgJ0YnCisgICAgIDgnaDYxOgljaGFyMmhleCA9IDQnaEE7IC8vIGNoYXJhY3RlciAnYScKKyAgICAgOCdoNjI6CWNoYXIyaGV4ID0gNCdoQjsgLy8gY2hhcmFjdGVyICdiJworICAgICA4J2g2MzoJY2hhcjJoZXggPSA0J2hDOyAvLyBjaGFyYWN0ZXIgJ2MnCisgICAgIDgnaDY0OgljaGFyMmhleCA9IDQnaEQ7IC8vIGNoYXJhY3RlciAnZCcKKyAgICAgOCdoNjU6CWNoYXIyaGV4ID0gNCdoRTsgLy8gY2hhcmFjdGVyICdlJworICAgICA4J2g2NjoJY2hhcjJoZXggPSA0J2hGOyAvLyBjaGFyYWN0ZXIgJ2YnCisgICAgICBkZWZhdWx0IDogIGNoYXIyaGV4ID0gNCdoRjsKKyAgIGVuZGNhc2UgCitlbmRmdW5jdGlvbgorCisvLyBIZXggdG8gQXNjaSBDaGFyYWN0ZXIgCitmdW5jdGlvbiBbNzowXSBoZXgyY2hhcjsKK2lucHV0IFszOjBdIGRhdGFfaW47CitjYXNlIChkYXRhX2luKQorICAgICA0J2gwOgloZXgyY2hhciA9IDgnaDMwOyAvLyBjaGFyYWN0ZXIgJzAnIAorICAgICA0J2gxOgloZXgyY2hhciA9IDgnaDMxOyAvLyBjaGFyYWN0ZXIgJzEnCisgICAgIDQnaDI6CWhleDJjaGFyID0gOCdoMzI7IC8vIGNoYXJhY3RlciAnMicKKyAgICAgNCdoMzoJaGV4MmNoYXIgPSA4J2gzMzsgLy8gY2hhcmFjdGVyICczJworICAgICA0J2g0OgloZXgyY2hhciA9IDgnaDM0OyAvLyBjaGFyYWN0ZXIgJzQnIAorICAgICA0J2g1OgloZXgyY2hhciA9IDgnaDM1OyAvLyBjaGFyYWN0ZXIgJzUnCisgICAgIDQnaDY6CWhleDJjaGFyID0gOCdoMzY7IC8vIGNoYXJhY3RlciAnNicKKyAgICAgNCdoNzoJaGV4MmNoYXIgPSA4J2gzNzsgLy8gY2hhcmFjdGVyICc3JworICAgICA0J2g4OgloZXgyY2hhciA9IDgnaDM4OyAvLyBjaGFyYWN0ZXIgJzgnCisgICAgIDQnaDk6CWhleDJjaGFyID0gOCdoMzk7IC8vIGNoYXJhY3RlciAnOScKKyAgICAgNCdoQToJaGV4MmNoYXIgPSA4J2g0MTsgLy8gY2hhcmFjdGVyICdBJworICAgICA0J2hCOgloZXgyY2hhciA9IDgnaDQyOyAvLyBjaGFyYWN0ZXIgJ0InCisgICAgIDQnaEM6CWhleDJjaGFyID0gOCdoNDM7IC8vIGNoYXJhY3RlciAnQycKKyAgICAgNCdoRDoJaGV4MmNoYXIgPSA4J2g0NDsgLy8gY2hhcmFjdGVyICdEJworICAgICA0J2hFOgloZXgyY2hhciA9IDgnaDQ1OyAvLyBjaGFyYWN0ZXIgJ0UnCisgICAgIDQnaEY6CWhleDJjaGFyID0gOCdoNDY7IC8vIGNoYXJhY3RlciAnRicKKyAgIGVuZGNhc2UgCitlbmRmdW5jdGlvbgorZW5kbW9kdWxlCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC91YXJ0X2kyYy9zcmMvdWFydF9pMmNfdG9wLnN2IGIvdmVyaWxvZy9ydGwvdWFydF9pMmMvc3JjL3VhcnRfaTJjX3RvcC5zdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGI2OGM1Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvdWFydF9pMmMvc3JjL3VhcnRfaTJjX3RvcC5zdgpAQCAtMCwwICsxLDE3OSBAQAorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEgLCBEaW5lc2ggQW5uYXl5YSAgICAgICAgICAgICAgICAgICAgICAgICAgCisvLyAKKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogQ3JlYXRlZCBieSBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFVBUlQgQ09SRSB3aXRoIFRYL1JYIDE2IEJ5dGUgQnVmZmVyICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEkyQyBNYXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBZSUZpdmUgY29yZXMgcHJvamVjdCAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHBzOi8vZ2l0aHViLmNvbS9kaW5lc2hhbm5heXlhL3lpZml2ZV9yMC5naXQgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERlc2NyaXB0aW9uOiBUaGlzIG1vZHVsZSBpbnRlZ2FydGUgVWFydCBhbmQgSTJDIE1hc3RlciAgICAgIC8vLy8KKy8vLy8gICAgQm90aCB0aGVzZSBibG9jayBzaGFyZSBjb21tb24gdHdvIHBpbnMsIGVmZmVjdGx5IG9ubHkgICAgIC8vLy8KKy8vLy8gICAgb25lIGJsb2NrIGFjdGl2ZSBhdCB0aW1lLiBUaGlzIGlzIGR1ZSB0byB0b3AtbGV2ZWwgcGluICAgIC8vLy8KKy8vLy8gICAgcmVzdHJpY3Rpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcihzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAtIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFJldmlzaW9uIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gQ29weXJpZ2h0IChDKSAyMDAwIEF1dGhvcnMgYW5kIE9QRU5DT1JFUy5PUkcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgIC8vLy8KKy8vLy8gcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgIC8vLy8KKy8vLy8gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgIC8vLy8KKy8vLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCAgIC8vLy8KKy8vLy8gYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IC8vLy8KKy8vLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSAgIC8vLy8KKy8vLy8gbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlICAgICAgIC8vLy8KKy8vLy8gdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCAgIC8vLy8KKy8vLy8gd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAgICAgIC8vLy8KKy8vLy8gUFVSUE9TRS4gIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIC8vLy8KKy8vLy8gZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvdXJjZTsgaWYgbm90LCBkb3dubG9hZCBpdCAgIC8vLy8KKy8vLy8gZnJvbSBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvbGdwbC5zaHRtbCAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworbW9kdWxlIHVhcnRfaTJjX3RvcCAKKworICAgICAoICAKKworICAgaW5wdXQgbG9naWMgICAgICAgICB1YXJ0X3JzdG4gICwgLy8gYXN5bmMgcmVzZXQKKyAgIGlucHV0IGxvZ2ljICAgICAgICAgaTJjX3JzdG4gICwgLy8gYXN5bmMgcmVzZXQKKyAgIGlucHV0IGxvZ2ljICAgICAgICAgYXBwX2NsayAsCisgICBpbnB1dCBsb2dpYyAgICAgICAgIHVhcnRfaTJjX3NlbCwgLy8gVWFydCBPciBJMkMgSW50ZXJmYWNlIFNlbGVjdAorCisgICAgICAgIC8vIFJlZyBCdXMgSW50ZXJmYWNlIFNpZ25hbAorICAgaW5wdXQgbG9naWMgICAgICAgICByZWdfY3MsCisgICBpbnB1dCBsb2dpYyAgICAgICAgIHJlZ193ciwKKyAgIGlucHV0IGxvZ2ljIFszOjBdICAgcmVnX2FkZHIsCisgICBpbnB1dCBsb2dpYyBbNzowXSAgIHJlZ193ZGF0YSwKKyAgIGlucHV0IGxvZ2ljICAgICAgICAgcmVnX2JlLAorCisgICAgICAgIC8vIE91dHB1dHMKKyAgIG91dHB1dCBsb2dpYyBbNzowXSAgcmVnX3JkYXRhLAorICAgb3V0cHV0IGxvZ2ljICAgICAgICByZWdfYWNrLAorCisgICAgICAgLy8gUGFkIENvbnRyb2wKKyAgIGlucHV0ICBsb2dpYyBbMTowXSAgaW9faW4sCisgICBvdXRwdXQgbG9naWMgWzE6MF0gIGlvX291dCwKKyAgIG91dHB1dCBsb2dpYyBbMTowXSAgaW9fb2ViCisKKyAgICAgKTsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyB1YXJ0IGludGVyZmFjZQorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitsb2dpYyAgICAgICAgICAgICB1YXJ0X3J4ZCAgICAgICAgICAgICAgICAgIDsgCitsb2dpYyAgICAgICAgICAgICB1YXJ0X3R4ZCAgICAgICAgICAgICAgICAgIDsKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gaTJjIGludGVyZmFjZQorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworbG9naWMgICAgICAgICAgICAgc2NsX3BhZF9pICAgICAgICAgICAgICAgICA7IC8vIFNDTC1saW5lIGlucHV0Citsb2dpYyAgICAgICAgICAgICBzY2xfcGFkX28gICAgICAgICAgICAgICAgIDsgLy8gU0NMLWxpbmUgb3V0cHV0IChhbHdheXMgMSdiMCkKK2xvZ2ljICAgICAgICAgICAgIHNjbF9wYWRfb2VuX28gICAgICAgICAgICAgOyAvLyBTQ0wtbGluZSBvdXRwdXQgZW5hYmxlIChhY3RpdmUgbG93KQorCitsb2dpYyAgICAgICAgICAgICBzZGFfcGFkX2kgICAgICAgICAgICAgICAgIDsgLy8gU0RBLWxpbmUgaW5wdXQKK2xvZ2ljICAgICAgICAgICAgIHNkYV9wYWRfbyAgICAgICAgICAgICAgICAgOyAvLyBTREEtbGluZSBvdXRwdXQgKGFsd2F5cyAxJ2IwKQorbG9naWMgICAgICAgICAgICAgc2RhX3BhZG9lbl9vICAgICAgICAgICAgICA7IC8vIFNEQS1saW5lIG91dHB1dCBlbmFibGUgKGFjdGl2ZSBsb3cpCisKKworCithc3NpZ24gIGlvX29lYlswXSAgPSAgKHVhcnRfaTJjX3NlbCA9PSAwKSA/IDEnYjEgOiBzY2xfcGFkX29lbl9vIDsgLy8gVWFydCBSWAorYXNzaWduICB1YXJ0X3J4ZCAgID0gICh1YXJ0X2kyY19zZWwgPT0gMCkgPyBpb19pblswXTogMSdiMDsKK2Fzc2lnbiAgc2NsX3BhZF9pICA9ICAodWFydF9pMmNfc2VsID09IDEpID8gaW9faW5bMF06IDEnYjA7Cithc3NpZ24gIGlvX291dFswXSAgPSAgKHVhcnRfaTJjX3NlbCA9PSAwKSA/IDEnYjAgOiBzY2xfcGFkX28gOworCithc3NpZ24gIGlvX29lYlsxXSA9ICAodWFydF9pMmNfc2VsID09IDApID8gMSdiMCA6IHNkYV9wYWRvZW5fbyA7IC8vIFVhcnQgVFggJiBJMkMgQ2xvY2sKK2Fzc2lnbiAgaW9fb3V0WzFdICA9ICh1YXJ0X2kyY19zZWwgPT0gMCkgPyB1YXJ0X3R4ZDogc2RhX3BhZF9vIDsKK2Fzc2lnbiAgc2RhX3BhZF9pID0gICh1YXJ0X2kyY19zZWwgPT0gMSkgPyBpb19pblsxXSA6IDEnYjA7CisKK2xvZ2ljIFs3OjBdICAgcmVnX3VhcnRfcmRhdGE7Citsb2dpYyBbNzowXSAgIHJlZ19pMmNfcmRhdGE7Citsb2dpYyAgICAgICAgIHJlZ191YXJ0X2FjazsKK2xvZ2ljICAgICAgICAgcmVnX2kyY19hY2s7CisKKworYXNzaWduIHJlZ19yZGF0YSA9ICh1YXJ0X2kyY19zZWwgPT0gMCkgPyByZWdfdWFydF9yZGF0YSA6IHJlZ19pMmNfcmRhdGE7Cithc3NpZ24gcmVnX2FjayAgID0gKHVhcnRfaTJjX3NlbCA9PSAwKSA/IHJlZ191YXJ0X2FjayAgIDogcmVnX2kyY19hY2s7CisKK3VhcnRfY29yZSAgdV91YXJ0X2NvcmUgKCAgCisKKyAgICAgICAgLmFyc3RfbiAgICAgICh1YXJ0X3JzdG4gICAgICAgICksIC8vIGFzeW5jIHJlc2V0CisgICAgICAgIC5hcHBfY2xrICAgICAoYXBwX2NsayAgICAgICAgICApLAorCisgICAgICAgIC8vIFJlZyBCdXMgSW50ZXJmYWNlIFNpZ25hbAorICAgICAgICAucmVnX2NzICAgICAgKHJlZ19jcyAgICAgICAgICAgKSwKKyAgICAgICAgLnJlZ193ciAgICAgIChyZWdfd3IgICAgICAgICAgICksCisgICAgICAgIC5yZWdfYWRkciAgICAocmVnX2FkZHJbMzowXSAgICApLAorICAgICAgICAucmVnX3dkYXRhICAgKHJlZ193ZGF0YVs3OjBdICAgKSwKKyAgICAgICAgLnJlZ19iZSAgICAgIChyZWdfYmUgICAgICAgICAgICksCisKKyAgICAgICAgLy8gT3V0cHV0cworICAgICAgICAucmVnX3JkYXRhICAgKHJlZ191YXJ0X3JkYXRhWzc6MF0pLAorICAgICAgICAucmVnX2FjayAgICAgKHJlZ191YXJ0X2FjayAgICAgKSwKKworICAgICAgICAgICAgLy8gUGFkIENvbnRyb2wKKyAgICAgICAgLnJ4ZCAgICAgICAgICAodWFydF9yeGQgICAgICAgICksCisgICAgICAgIC50eGQgICAgICAgICAgKHVhcnRfdHhkICAgICAgICApCisgICAgICk7CisKK2kyY21fdG9wICB1X2kyY20gKAorCS8vIHdpc2hib25lIHNpZ25hbHMKKwkud2JfY2xrX2kgICAgICAoYXBwX2NsayAgICAgICAgKSwgLy8gbWFzdGVyIGNsb2NrIGlucHV0CisJLnNyZXNldG4gICAgICAgKDEnYjEgICAgICAgICAgICksIC8vIHN5bmNocm9ub3VzIHJlc2V0CisJLmFyZXNldG4gICAgICAgKGkyY19yc3RuICAgICAgICksIC8vIGFzeW5jaHJvbm91cyByZXNldAorCS53Yl9hZHJfaSAgICAgIChyZWdfYWRkclsyOjBdICApLCAvLyBsb3dlciBhZGRyZXNzIGJpdHMKKwkud2JfZGF0X2kgICAgICAocmVnX3dkYXRhICAgICAgKSwgLy8gZGF0YWJ1cyBpbnB1dAorCS53Yl9kYXRfbyAgICAgIChyZWdfaTJjX3JkYXRhICApLCAvLyBkYXRhYnVzIG91dHB1dAorCS53Yl93ZV9pICAgICAgIChyZWdfd3IgICAgICAgICApLCAvLyB3cml0ZSBlbmFibGUgaW5wdXQKKwkud2Jfc3RiX2kgICAgICAocmVnX2NzICAgICAgICAgKSwgLy8gc3RvYmUvY29yZSBzZWxlY3Qgc2lnbmFsCisJLndiX2N5Y19pICAgICAgKHJlZ19jcyAgICAgICAgICksIC8vIHZhbGlkIGJ1cyBjeWNsZSBpbnB1dAorCS53Yl9hY2tfbyAgICAgIChyZWdfaTJjX2FjayAgICApLCAvLyBidXMgY3ljbGUgYWNrbm93bGVkZ2Ugb3V0cHV0CisJLndiX2ludGFfbyAgICAgKCAgICAgICAgICAgICAgICksIC8vIGludGVycnVwdCByZXF1ZXN0IHNpZ25hbCBvdXRwdXQKKworCS8vIEkyQyBzaWduYWxzCisJLy8gaTJjIGNsb2NrIGxpbmUKKwkuc2NsX3BhZF9pICAgICAoc2NsX3BhZF9pICAgICAgKSwgLy8gU0NMLWxpbmUgaW5wdXQKKwkuc2NsX3BhZF9vICAgICAoc2NsX3BhZF9vICAgICAgKSwgLy8gU0NMLWxpbmUgb3V0cHV0IChhbHdheXMgMSdiMCkKKwkuc2NsX3BhZG9lbl9vICAoc2NsX3BhZF9vZW5fbyAgKSwgLy8gU0NMLWxpbmUgb3V0cHV0IGVuYWJsZSAoYWN0aXZlIGxvdykKKworCS8vIGkyYyBkYXRhIGxpbmUKKwkuc2RhX3BhZF9pICAgICAoc2RhX3BhZF9pICAgICAgKSwgLy8gU0RBLWxpbmUgaW5wdXQKKwkuc2RhX3BhZF9vICAgICAoc2RhX3BhZF9vICAgICAgKSwgLy8gU0RBLWxpbmUgb3V0cHV0IChhbHdheXMgMSdiMCkKKwkuc2RhX3BhZG9lbl9vICAoc2RhX3BhZG9lbl9vICAgKSAgLy8gU0RBLWxpbmUgb3V0cHV0IGVuYWJsZSAoYWN0aXZlIGxvdykKKworICAgICAgICAgKTsKKworZW5kbW9kdWxlCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC91YXJ0X2kyY191c2Ivc3JjL3VhcnRfaTJjX3VzYi5zdiBiL3Zlcmlsb2cvcnRsL3VhcnRfaTJjX3VzYi9zcmMvdWFydF9pMmNfdXNiLnN2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxZTdhZjYKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC91YXJ0X2kyY191c2Ivc3JjL3VhcnRfaTJjX3VzYi5zdgpAQCAtMCwwICsxLDIxOCBAQAorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEgLCBEaW5lc2ggQW5uYXl5YSAgICAgICAgICAgICAgICAgICAgICAgICAgCisvLyAKKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogQ3JlYXRlZCBieSBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIGludGVncmF0ZWQgVUFSVC9JMkMgTWFzdGVyICYgVVNCMS4xIEhvc3QgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBZSUZpdmUgY29yZXMgcHJvamVjdCAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHBzOi8vZ2l0aHViLmNvbS9kaW5lc2hhbm5heXlhL3lpZml2ZV9yMC5naXQgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERlc2NyaXB0aW9uOiBUaGlzIG1vZHVsZSBpbnRlZ2FydGUgVWFydCBhbmQgSTJDIE1hc3RlciAgICAgIC8vLy8KKy8vLy8gICBhbmQgVVNCIDEuMSBIb3N0LiBCb3RoIHRoZXNlIGJsb2NrIHNoYXJlIGNvbW1vbiB0d28gcGlucywgIC8vLy8KKy8vLy8gICBlZmZlY3RseSBvbmx5IG9uZSBibG9jayBhY3RpdmUgYXQgdGltZS4gVGhpcyBpcyBkdWUgdG8gICAgIC8vLy8KKy8vLy8gICB0b3AtbGV2ZWwgcGluIHJlc3RyaWN0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgUGluICBNYXBpbmcgICAgVUFSVCAgICAgICBJMkMgICAgICAgVVNCICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgSU9bMV0gLSAgICAgICAgVFhEICAgICAgICBTREEgICAgICAgRFAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgSU9bMF0gLSAgICAgICAgUlhEICAgICAgICBTQ0wgICAgICAgRE4gICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcihzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAtIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFJldmlzaW9uIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gQ29weXJpZ2h0IChDKSAyMDAwIEF1dGhvcnMgYW5kIE9QRU5DT1JFUy5PUkcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgIC8vLy8KKy8vLy8gcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgIC8vLy8KKy8vLy8gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgIC8vLy8KKy8vLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCAgIC8vLy8KKy8vLy8gYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IC8vLy8KKy8vLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSAgIC8vLy8KKy8vLy8gbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlICAgICAgIC8vLy8KKy8vLy8gdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCAgIC8vLy8KKy8vLy8gd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAgICAgIC8vLy8KKy8vLy8gUFVSUE9TRS4gIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIC8vLy8KKy8vLy8gZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvdXJjZTsgaWYgbm90LCBkb3dubG9hZCBpdCAgIC8vLy8KKy8vLy8gZnJvbSBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvbGdwbC5zaHRtbCAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworbW9kdWxlIHVhcnRfaTJjX3VzYl90b3AgCisKKyAgICAgKCAgCisKKyAgIGlucHV0IGxvZ2ljICAgICAgICAgdWFydF9yc3RuICAsIC8vIGFzeW5jIHJlc2V0CisgICBpbnB1dCBsb2dpYyAgICAgICAgIGkyY19yc3RuICAsIC8vIGFzeW5jIHJlc2V0CisgICBpbnB1dCBsb2dpYyAgICAgICAgIHVzYl9yc3RuICAsIC8vIGFzeW5jIHJlc2V0CisgICBpbnB1dCBsb2dpYyAgICAgICAgIGFwcF9jbGsgLAorICAgaW5wdXQgbG9naWMgICAgICAgICB1c2JfY2xrICwgICAvLyA0OE1oeiB1c2IgY2xvY2sKKworICAgICAgICAvLyBSZWcgQnVzIEludGVyZmFjZSBTaWduYWwKKyAgIGlucHV0IGxvZ2ljICAgICAgICAgcmVnX2NzLAorICAgaW5wdXQgbG9naWMgICAgICAgICByZWdfd3IsCisgICBpbnB1dCBsb2dpYyBbNzowXSAgIHJlZ19hZGRyLAorICAgaW5wdXQgbG9naWMgWzMxOjBdICByZWdfd2RhdGEsCisgICBpbnB1dCBsb2dpYyAgICAgICAgIHJlZ19iZSwKKworICAgICAgICAvLyBPdXRwdXRzCisgICBvdXRwdXQgbG9naWMgWzMxOjBdIHJlZ19yZGF0YSwKKyAgIG91dHB1dCBsb2dpYyAgICAgICAgcmVnX2FjaywKKyAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgLy8gaTJjIGludGVyZmFjZQorICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgaW5wdXQgbG9naWMgICAgICAgICBzY2xfcGFkX2kgICAgICAgICAgICAgICwgLy8gU0NMLWxpbmUgaW5wdXQKKyAgIG91dHB1dCBsb2dpYyAgICAgICAgc2NsX3BhZF9vICAgICAgICAgICAgICAsIC8vIFNDTC1saW5lIG91dHB1dCAoYWx3YXlzIDEnYjApCisgICBvdXRwdXQgbG9naWMgICAgICAgIHNjbF9wYWRfb2VuX28gICAgICAgICAgLCAvLyBTQ0wtbGluZSBvdXRwdXQgZW5hYmxlIChhY3RpdmUgbG93KQorICAgCisgICBpbnB1dCBsb2dpYyAgICAgICAgIHNkYV9wYWRfaSAgICAgICAgICAgICAgLCAvLyBTREEtbGluZSBpbnB1dAorICAgb3V0cHV0IGxvZ2ljICAgICAgICBzZGFfcGFkX28gICAgICAgICAgICAgICwgLy8gU0RBLWxpbmUgb3V0cHV0IChhbHdheXMgMSdiMCkKKyAgIG91dHB1dCBsb2dpYyAgICAgICAgc2RhX3BhZG9lbl9vICAgICAgICAgICAsIC8vIFNEQS1saW5lIG91dHB1dCBlbmFibGUgKGFjdGl2ZSBsb3cpCisKKyAgIC8vIFVBUlQgSS9GCisgICBpbnB1dCAgbG9naWMgICAgICAgIHVhcnRfcnhkICAgICAgICAgICAgICAgLCAKKyAgIG91dHB1dCBsb2dpYyAgICAgICAgdWFydF90eGQgICAgICAgICAgICAgICAsCisKKyAgIGlucHV0ICBsb2dpYyAgICAgICAgdXNiX2luX2RwICAgICAgICAgICAgICAsCisgICBpbnB1dCAgbG9naWMgICAgICAgIHVzYl9pbl9kbiAgICAgICAgICAgICAgLAorCisgICBvdXRwdXQgbG9naWMgICAgICAgIHVzYl9vdXRfZHAgICAgICAgICAgICAgLAorICAgb3V0cHV0IGxvZ2ljICAgICAgICB1c2Jfb3V0X2RuICAgICAgICAgICAgICwKKyAgIG91dHB1dCBsb2dpYyAgICAgICAgdXNiX291dF90eF9vZW4gICAgICAgCisKKyAgICAgKTsKKworCitgZGVmaW5lIFNFTF9VQVJUIDInYjAwCitgZGVmaW5lIFNFTF9JMkMgIDInYjAxCitgZGVmaW5lIFNFTF9VU0IgIDInYjEwCisKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICBSZWdpc3RlciBSZXNwb25zZSBQYXRoIE11eAorLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitsb2dpYyBbNzowXSAgIHJlZ191YXJ0X3JkYXRhOworbG9naWMgWzc6MF0gICByZWdfaTJjX3JkYXRhOworbG9naWMgWzMxOjBdICByZWdfdXNiX3JkYXRhOworbG9naWMgICAgICAgICByZWdfdWFydF9hY2s7Citsb2dpYyAgICAgICAgIHJlZ19pMmNfYWNrOworbG9naWMgICAgICAgICByZWdfdXNiX2FjazsKKworCithc3NpZ24gcmVnX3JkYXRhID0gKHJlZ19hZGRyWzc6Nl0gPT0gYFNFTF9VQVJUKSA/IHsyNCdoMCxyZWdfdWFydF9yZGF0YX0gOiAKKwkgICAgICAgICAgIChyZWdfYWRkcls3OjZdID09IGBTRUxfSTJDKSA/IHsyNCdoMCxyZWdfaTJjX3JkYXRhfSA6IHJlZ191c2JfcmRhdGE7Cithc3NpZ24gcmVnX2FjayAgID0gKHJlZ19hZGRyWzc6Nl0gPT0gYFNFTF9VQVJUKSA/IHJlZ191YXJ0X2FjayAgIDogCisJICAgICAgICAgICAocmVnX2FkZHJbNzo2XSA9PSBgU0VMX0kyQykgPyByZWdfaTJjX2FjayAgIDogcmVnX3VzYl9hY2s7CisKK3VhcnRfY29yZSAgdV91YXJ0X2NvcmUgKCAgCisKKyAgICAgICAgLmFyc3RfbiAgICAgICh1YXJ0X3JzdG4gICAgICAgICksIC8vIGFzeW5jIHJlc2V0CisgICAgICAgIC5hcHBfY2xrICAgICAoYXBwX2NsayAgICAgICAgICApLAorCisgICAgICAgIC8vIFJlZyBCdXMgSW50ZXJmYWNlIFNpZ25hbAorICAgICAgICAucmVnX2NzICAgICAgKHJlZ19jcyAgICAgICAgICAgKSwKKyAgICAgICAgLnJlZ193ciAgICAgIChyZWdfd3IgICAgICAgICAgICksCisgICAgICAgIC5yZWdfYWRkciAgICAocmVnX2FkZHJbNToyXSAgICApLAorICAgICAgICAucmVnX3dkYXRhICAgKHJlZ193ZGF0YVs3OjBdICAgKSwKKyAgICAgICAgLnJlZ19iZSAgICAgIChyZWdfYmUgICAgICAgICAgICksCisKKyAgICAgICAgLy8gT3V0cHV0cworICAgICAgICAucmVnX3JkYXRhICAgKHJlZ191YXJ0X3JkYXRhWzc6MF0pLAorICAgICAgICAucmVnX2FjayAgICAgKHJlZ191YXJ0X2FjayAgICAgKSwKKworICAgICAgICAgICAgLy8gUGFkIENvbnRyb2wKKyAgICAgICAgLnJ4ZCAgICAgICAgICAodWFydF9yeGQgICAgICAgICksCisgICAgICAgIC50eGQgICAgICAgICAgKHVhcnRfdHhkICAgICAgICApCisgICAgICk7CisKK2kyY21fdG9wICB1X2kyY20gKAorCS8vIHdpc2hib25lIHNpZ25hbHMKKwkud2JfY2xrX2kgICAgICAoYXBwX2NsayAgICAgICAgKSwgLy8gbWFzdGVyIGNsb2NrIGlucHV0CisJLnNyZXNldG4gICAgICAgKGkyY19yc3RuICAgICAgICksIC8vIHN5bmNocm9ub3VzIHJlc2V0CisJLmFyZXNldG4gICAgICAgKDEnYjEgICAgICAgICAgICksIC8vIGFzeW5jaHJvbm91cyByZXNldAorCS53Yl9hZHJfaSAgICAgIChyZWdfYWRkcls0OjJdICApLCAvLyBsb3dlciBhZGRyZXNzIGJpdHMKKwkud2JfZGF0X2kgICAgICAocmVnX3dkYXRhWzc6MF0gKSwgLy8gZGF0YWJ1cyBpbnB1dAorCS53Yl9kYXRfbyAgICAgIChyZWdfaTJjX3JkYXRhICApLCAvLyBkYXRhYnVzIG91dHB1dAorCS53Yl93ZV9pICAgICAgIChyZWdfd3IgICAgICAgICApLCAvLyB3cml0ZSBlbmFibGUgaW5wdXQKKwkud2Jfc3RiX2kgICAgICAocmVnX2NzICAgICAgICAgKSwgLy8gc3RvYmUvY29yZSBzZWxlY3Qgc2lnbmFsCisJLndiX2N5Y19pICAgICAgKHJlZ19jcyAgICAgICAgICksIC8vIHZhbGlkIGJ1cyBjeWNsZSBpbnB1dAorCS53Yl9hY2tfbyAgICAgIChyZWdfaTJjX2FjayAgICApLCAvLyBidXMgY3ljbGUgYWNrbm93bGVkZ2Ugb3V0cHV0CisJLndiX2ludGFfbyAgICAgKCAgICAgICAgICAgICAgICksIC8vIGludGVycnVwdCByZXF1ZXN0IHNpZ25hbCBvdXRwdXQKKworCS8vIEkyQyBzaWduYWxzCisJLy8gaTJjIGNsb2NrIGxpbmUKKwkuc2NsX3BhZF9pICAgICAoc2NsX3BhZF9pICAgICAgKSwgLy8gU0NMLWxpbmUgaW5wdXQKKwkuc2NsX3BhZF9vICAgICAoc2NsX3BhZF9vICAgICAgKSwgLy8gU0NMLWxpbmUgb3V0cHV0IChhbHdheXMgMSdiMCkKKwkuc2NsX3BhZG9lbl9vICAoc2NsX3BhZF9vZW5fbyAgKSwgLy8gU0NMLWxpbmUgb3V0cHV0IGVuYWJsZSAoYWN0aXZlIGxvdykKKworCS8vIGkyYyBkYXRhIGxpbmUKKwkuc2RhX3BhZF9pICAgICAoc2RhX3BhZF9pICAgICAgKSwgLy8gU0RBLWxpbmUgaW5wdXQKKwkuc2RhX3BhZF9vICAgICAoc2RhX3BhZF9vICAgICAgKSwgLy8gU0RBLWxpbmUgb3V0cHV0IChhbHdheXMgMSdiMCkKKwkuc2RhX3BhZG9lbl9vICAoc2RhX3BhZG9lbl9vICAgKSAgLy8gU0RBLWxpbmUgb3V0cHV0IGVuYWJsZSAoYWN0aXZlIGxvdykKKworICAgICAgICAgKTsKKworCit1c2IxX2hvc3QgdV91c2JfaG9zdCAoCisgICAgLnVzYl9jbGtfaSAgICAgICh1c2JfY2xrICAgICAgICksCisgICAgLnVzYl9yc3RuX2kgICAgICh1c2JfcnN0biAgICAgICksCisKKyAgICAvLyBVU0IgRCsvRC0KKyAgICAuaW5fZHAgICAgICAgICAgKHVzYl9pbl9kcCAgICAgKSwKKyAgICAuaW5fZG4gICAgICAgICAgKHVzYl9pbl9kbiAgICAgKSwKKworICAgIC5vdXRfZHAgICAgICAgICAodXNiX291dF9kcCAgICApLAorICAgIC5vdXRfZG4gICAgICAgICAodXNiX291dF9kbiAgICApLAorICAgIC5vdXRfdHhfb2VuICAgICAodXNiX291dF90eF9vZW4pLAorCisgICAgLy8gTWFzdGVyIFBvcnQKKyAgICAud2JtX3JzdF9uICAgICAgKHVzYl9yc3RuICAgICAgKSwgIC8vIFJlZ3VsYXIgUmVzZXQgc2lnbmFsCisgICAgLndibV9jbGtfaSAgICAgIChhcHBfY2xrICAgICAgICksICAvLyBTeXN0ZW0gY2xvY2sKKyAgICAud2JtX3N0Yl9pICAgICAgKHJlZ19jcyAgICAgICAgKSwgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgLndibV9hZHJfaSAgICAgIChyZWdfYWRkcls1OjBdKSwgIC8vIGFkZHJlc3MKKyAgICAud2JtX3dlX2kgICAgICAgKHJlZ193ciAgICAgICAgKSwgIC8vIHdyaXRlCisgICAgLndibV9kYXRfaSAgICAgIChyZWdfd2RhdGEgICAgICksICAvLyBkYXRhIG91dHB1dAorICAgIC53Ym1fc2VsX2kgICAgICAocmVnX2JlICAgICAgICApLCAgLy8gYnl0ZSBlbmFibGUKKyAgICAud2JtX2RhdF9vICAgICAgKHJlZ191c2JfcmRhdGEgKSwgIC8vIGRhdGEgaW5wdXQKKyAgICAud2JtX2Fja19vICAgICAgKHJlZ191c2JfYWNrICAgKSwgIC8vIGFja25vd2xlZ2VtZW50CisgICAgLndibV9lcnJfbyAgICAgICggICAgICAgICAgICAgICksICAvLyBlcnJvcgorCisgICAgLy8gT3V0cHV0cworICAgIC51c2JfaW50cl9vICAgICggICAgICAgICAgICAgICApCisKKworICAgICk7CisKKworZW5kbW9kdWxlCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC91YXJ0X2kyY191c2Jfc3BpL3NyYy91YXJ0X2kyY191c2Jfc3BpLnN2IGIvdmVyaWxvZy9ydGwvdWFydF9pMmNfdXNiX3NwaS9zcmMvdWFydF9pMmNfdXNiX3NwaS5zdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzM3OGUwCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvdWFydF9pMmNfdXNiX3NwaS9zcmMvdWFydF9pMmNfdXNiX3NwaS5zdgpAQCAtMCwwICsxLDI4MSBAQAorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEgLCBEaW5lc2ggQW5uYXl5YSAgICAgICAgICAgICAgICAgICAgICAgICAgCisvLyAKKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogQ3JlYXRlZCBieSBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIGludGVncmF0ZWQgVUFSVCxJMkMgTWFzdGVyLCBTUFUgTWFzdGVyICYgVVNCMS4xIEhvc3QgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSByaXNjZHVpbm8gY29yZXMgcHJvamVjdCAgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHBzOi8vZ2l0aHViLmNvbS9kaW5lc2hhbm5heXlhL3Jpc2NkdWluby5naXQgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERlc2NyaXB0aW9uOiBUaGlzIG1vZHVsZSBpbnRlZ2FydGUgVWFydCAsIEkyQyBNYXN0ZXIgICAgICAgIC8vLy8KKy8vLy8gICBTUEkgTWFzdGVyIGFuZCBVU0IgMS4xIEhvc3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcihzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAtIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFJldmlzaW9uIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gQ29weXJpZ2h0IChDKSAyMDAwIEF1dGhvcnMgYW5kIE9QRU5DT1JFUy5PUkcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgIC8vLy8KKy8vLy8gcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgIC8vLy8KKy8vLy8gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgIC8vLy8KKy8vLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCAgIC8vLy8KKy8vLy8gYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IC8vLy8KKy8vLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSAgIC8vLy8KKy8vLy8gbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlICAgICAgIC8vLy8KKy8vLy8gdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCAgIC8vLy8KKy8vLy8gd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAgICAgIC8vLy8KKy8vLy8gUFVSUE9TRS4gIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIC8vLy8KKy8vLy8gZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvdXJjZTsgaWYgbm90LCBkb3dubG9hZCBpdCAgIC8vLy8KKy8vLy8gZnJvbSBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvbGdwbC5zaHRtbCAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworbW9kdWxlIHVhcnRfaTJjX3VzYl9zcGlfdG9wIAorCisgICAgICggIAorYGlmZGVmIFVTRV9QT1dFUl9QSU5TCisgICBpbnB1dCBsb2dpYyAgICAgICAgIHZjY2QxLC8vIFVzZXIgYXJlYSAxIDEuOFYgc3VwcGx5CisgICBpbnB1dCBsb2dpYyAgICAgICAgIHZzc2QxLC8vIFVzZXIgYXJlYSAxIGRpZ2l0YWwgZ3JvdW5kCitgZW5kaWYKKyAgICAvLyBjbG9jayBza2V3IGFkanVzdAorICAgaW5wdXQgbG9naWMgWzM6MF0gICBjZmdfY3NrYV91YXJ0LAorICAgaW5wdXQgbG9naWMJICAgICAgIHdiZF9jbGtfaW50LAorICAgb3V0cHV0IGxvZ2ljCSAgICAgICB3YmRfY2xrX3VhcnQsCisKKyAgIGlucHV0IGxvZ2ljICAgICAgICAgdWFydF9yc3RuICAsIC8vIGFzeW5jIHJlc2V0CisgICBpbnB1dCBsb2dpYyAgICAgICAgIGkyY19yc3RuICAsICAvLyBhc3luYyByZXNldAorICAgaW5wdXQgbG9naWMgICAgICAgICB1c2JfcnN0biAgLCAgLy8gYXN5bmMgcmVzZXQKKyAgIGlucHV0IGxvZ2ljICAgICAgICAgc3BpX3JzdG4gICwgIC8vIGFzeW5jIHJlc2V0CisgICBpbnB1dCBsb2dpYyAgICAgICAgIGFwcF9jbGsgLAorICAgaW5wdXQgbG9naWMgICAgICAgICB1c2JfY2xrICwgICAvLyA0OE1oeiB1c2IgY2xvY2sKKworICAgICAgICAvLyBSZWcgQnVzIEludGVyZmFjZSBTaWduYWwKKyAgIGlucHV0IGxvZ2ljICAgICAgICAgcmVnX2NzLAorICAgaW5wdXQgbG9naWMgICAgICAgICByZWdfd3IsCisgICBpbnB1dCBsb2dpYyBbNzowXSAgIHJlZ19hZGRyLAorICAgaW5wdXQgbG9naWMgWzMxOjBdICByZWdfd2RhdGEsCisgICBpbnB1dCBsb2dpYyBbMzowXSAgIHJlZ19iZSwKKworICAgICAgICAvLyBPdXRwdXRzCisgICBvdXRwdXQgbG9naWMgWzMxOjBdIHJlZ19yZGF0YSwKKyAgIG91dHB1dCBsb2dpYyAgICAgICAgcmVnX2FjaywKKyAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgLy8gaTJjIGludGVyZmFjZQorICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgaW5wdXQgbG9naWMgICAgICAgICBzY2xfcGFkX2kgICAgICAgICAgICAgICwgLy8gU0NMLWxpbmUgaW5wdXQKKyAgIG91dHB1dCBsb2dpYyAgICAgICAgc2NsX3BhZF9vICAgICAgICAgICAgICAsIC8vIFNDTC1saW5lIG91dHB1dCAoYWx3YXlzIDEnYjApCisgICBvdXRwdXQgbG9naWMgICAgICAgIHNjbF9wYWRfb2VuX28gICAgICAgICAgLCAvLyBTQ0wtbGluZSBvdXRwdXQgZW5hYmxlIChhY3RpdmUgbG93KQorICAgCisgICBpbnB1dCBsb2dpYyAgICAgICAgIHNkYV9wYWRfaSAgICAgICAgICAgICAgLCAvLyBTREEtbGluZSBpbnB1dAorICAgb3V0cHV0IGxvZ2ljICAgICAgICBzZGFfcGFkX28gICAgICAgICAgICAgICwgLy8gU0RBLWxpbmUgb3V0cHV0IChhbHdheXMgMSdiMCkKKyAgIG91dHB1dCBsb2dpYyAgICAgICAgc2RhX3BhZG9lbl9vICAgICAgICAgICAsIC8vIFNEQS1saW5lIG91dHB1dCBlbmFibGUgKGFjdGl2ZSBsb3cpCisKKyAgIG91dHB1dCBsb2dpYyAgICAgICAgaTJjbV9pbnRyX28gICAgICAgICAgICAsCisKKyAgIC8vIFVBUlQgSS9GCisgICBpbnB1dCAgbG9naWMgICAgICAgIHVhcnRfcnhkICAgICAgICAgICAgICAgLCAKKyAgIG91dHB1dCBsb2dpYyAgICAgICAgdWFydF90eGQgICAgICAgICAgICAgICAsCisKKyAgIC8vIFVTQiAxLjEgSE9TVCBJL0YKKyAgIGlucHV0ICBsb2dpYyAgICAgICAgdXNiX2luX2RwICAgICAgICAgICAgICAsCisgICBpbnB1dCAgbG9naWMgICAgICAgIHVzYl9pbl9kbiAgICAgICAgICAgICAgLAorCisgICBvdXRwdXQgbG9naWMgICAgICAgIHVzYl9vdXRfZHAgICAgICAgICAgICAgLAorICAgb3V0cHV0IGxvZ2ljICAgICAgICB1c2Jfb3V0X2RuICAgICAgICAgICAgICwKKyAgIG91dHB1dCBsb2dpYyAgICAgICAgdXNiX291dF90eF9vZW4gICAgICAgICAsCisgICAKKyAgIG91dHB1dCBsb2dpYyAgICAgICAgdXNiX2ludHJfbyAgICAgICAgICAgICwKKworICAgLy8gU1BJTSBJL0YKKyAgIG91dHB1dCBsb2dpYyAgICAgICAgc3NwaW1fc2NrLCAvLyBjbG9jayBvdXQKKyAgIG91dHB1dCBsb2dpYyAgICAgICAgc3NwaW1fc28sICAvLyBzZXJpYWwgZGF0YSBvdXQKKyAgIGlucHV0ICBsb2dpYyAgICAgICAgc3NwaW1fc2ksICAvLyBzZXJpYWwgZGF0YSBpbgorICAgb3V0cHV0IGxvZ2ljICAgICAgICBzc3BpbV9zc24gIC8vIGNzX24KKworICAgICApOworCisvLyB1YXJ0IGNsb2NrIHNrZXcgY29udHJvbAorY2xrX3NrZXdfYWRqdXN0IHVfc2tld191YXJ0CisgICAgICAgKAorYGlmZGVmIFVTRV9QT1dFUl9QSU5TCisgICAgICAgICAgICAgICAudmNjZDEgICAgICAodmNjZDEgICAgICAgICAgICAgICAgICAgICAgKSwvLyBVc2VyIGFyZWEgMSAxLjhWIHN1cHBseQorICAgICAgICAgICAgICAgLnZzc2QxICAgICAgKHZzc2QxICAgICAgICAgICAgICAgICAgICAgICksLy8gVXNlciBhcmVhIDEgZGlnaXRhbCBncm91bmQKK2BlbmRpZgorCSAgICAgICAuY2xrX2luICAgICAod2JkX2Nsa19pbnQgICAgICAgICAgICAgICAgICksIAorCSAgICAgICAuc2VsICAgICAgICAoY2ZnX2Nza2FfdWFydCAgICAgICAgICAgICAgICksIAorCSAgICAgICAuY2xrX291dCAgICAod2JkX2Nsa191YXJ0ICAgICAgICAgICAgICAgICkgCisgICAgICAgKTsKKworYGRlZmluZSBTRUxfVUFSVCAyJ2IwMAorYGRlZmluZSBTRUxfSTJDICAyJ2IwMQorYGRlZmluZSBTRUxfVVNCICAyJ2IxMAorYGRlZmluZSBTRUxfU1BJICAyJ2IxMQorCisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgUmVnaXN0ZXIgUmVzcG9uc2UgUGF0aCBNdXgKKy8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbG9naWMgWzc6MF0gICByZWdfdWFydF9yZGF0YTsKK2xvZ2ljIFs3OjBdICAgcmVnX2kyY19yZGF0YTsKK2xvZ2ljIFszMTowXSAgcmVnX3VzYl9yZGF0YTsKK2xvZ2ljIFszMTowXSAgcmVnX3NwaW1fcmRhdGE7Citsb2dpYyAgICAgICAgIHJlZ191YXJ0X2FjazsKK2xvZ2ljICAgICAgICAgcmVnX2kyY19hY2s7Citsb2dpYyAgICAgICAgIHJlZ191c2JfYWNrOworbG9naWMgICAgICAgICByZWdfc3BpbV9hY2s7CisKKworYXNzaWduIHJlZ19yZGF0YSA9IChyZWdfYWRkcls3OjZdID09IGBTRUxfVUFSVCkgPyB7MjQnaDAscmVnX3VhcnRfcmRhdGF9IDogCisJICAgICAgICAgICAocmVnX2FkZHJbNzo2XSA9PSBgU0VMX0kyQykgPyB7MjQnaDAscmVnX2kyY19yZGF0YX0gOgorCSAgICAgICAgICAgKHJlZ19hZGRyWzc6Nl0gPT0gYFNFTF9VU0IpID8gcmVnX3VzYl9yZGF0YSA6IHJlZ19zcGltX3JkYXRhOworYXNzaWduIHJlZ19hY2sgICA9IChyZWdfYWRkcls3OjZdID09IGBTRUxfVUFSVCkgPyByZWdfdWFydF9hY2sgICA6IAorCSAgICAgICAgICAgKHJlZ19hZGRyWzc6Nl0gPT0gYFNFTF9JMkMpID8gcmVnX2kyY19hY2sgICA6IAorCSAgICAgICAgICAgKHJlZ19hZGRyWzc6Nl0gPT0gYFNFTF9VU0IpID8gcmVnX3VzYl9hY2sgOiByZWdfc3BpbV9hY2s7CisKK3dpcmUgcmVnX3VhcnRfY3MgID0gKHJlZ19hZGRyWzc6Nl0gPT0gYFNFTF9VQVJUKSA/IHJlZ19jcyA6IDEnYjA7Cit3aXJlIHJlZ19pMmNtX2NzICA9IChyZWdfYWRkcls3OjZdID09IGBTRUxfSTJDKSAgPyByZWdfY3MgOiAxJ2IwOword2lyZSByZWdfdXNiX2NzICAgPSAocmVnX2FkZHJbNzo2XSA9PSBgU0VMX1VBUlQpID8gcmVnX2NzIDogMSdiMDsKK3dpcmUgcmVnX3NwaW1fY3MgID0gKHJlZ19hZGRyWzc6Nl0gPT0gYFNFTF9TUEkpID8gIHJlZ19jcyA6IDEnYjA7CisKK3VhcnRfY29yZSAgdV91YXJ0X2NvcmUgKCAgCisKKyAgICAgICAgLmFyc3RfbiAgICAgICh1YXJ0X3JzdG4gICAgICAgICksIC8vIGFzeW5jIHJlc2V0CisgICAgICAgIC5hcHBfY2xrICAgICAoYXBwX2NsayAgICAgICAgICApLAorCisgICAgICAgIC8vIFJlZyBCdXMgSW50ZXJmYWNlIFNpZ25hbAorICAgICAgICAucmVnX2NzICAgICAgKHJlZ191YXJ0X2NzICAgICAgKSwKKyAgICAgICAgLnJlZ193ciAgICAgIChyZWdfd3IgICAgICAgICAgICksCisgICAgICAgIC5yZWdfYWRkciAgICAocmVnX2FkZHJbNToyXSAgICApLAorICAgICAgICAucmVnX3dkYXRhICAgKHJlZ193ZGF0YVs3OjBdICAgKSwKKyAgICAgICAgLnJlZ19iZSAgICAgIChyZWdfYmVbMF0gICAgICAgICksCisKKyAgICAgICAgLy8gT3V0cHV0cworICAgICAgICAucmVnX3JkYXRhICAgKHJlZ191YXJ0X3JkYXRhWzc6MF0pLAorICAgICAgICAucmVnX2FjayAgICAgKHJlZ191YXJ0X2FjayAgICAgKSwKKworICAgICAgICAgICAgLy8gUGFkIENvbnRyb2wKKyAgICAgICAgLnJ4ZCAgICAgICAgICAodWFydF9yeGQgICAgICAgICksCisgICAgICAgIC50eGQgICAgICAgICAgKHVhcnRfdHhkICAgICAgICApCisgICAgICk7CisKK2kyY21fdG9wICB1X2kyY20gKAorCS8vIHdpc2hib25lIHNpZ25hbHMKKwkud2JfY2xrX2kgICAgICAoYXBwX2NsayAgICAgICAgKSwgLy8gbWFzdGVyIGNsb2NrIGlucHV0CisJLnNyZXNldG4gICAgICAgKDEnYjEgICAgICAgICAgICksIC8vIHN5bmNocm9ub3VzIHJlc2V0CisJLmFyZXNldG4gICAgICAgKGkyY19yc3RuICAgICAgICksIC8vIGFzeW5jaHJvbm91cyByZXNldAorCS53Yl9hZHJfaSAgICAgIChyZWdfYWRkcls0OjJdICApLCAvLyBsb3dlciBhZGRyZXNzIGJpdHMKKwkud2JfZGF0X2kgICAgICAocmVnX3dkYXRhWzc6MF0gKSwgLy8gZGF0YWJ1cyBpbnB1dAorCS53Yl9kYXRfbyAgICAgIChyZWdfaTJjX3JkYXRhICApLCAvLyBkYXRhYnVzIG91dHB1dAorCS53Yl93ZV9pICAgICAgIChyZWdfd3IgICAgICAgICApLCAvLyB3cml0ZSBlbmFibGUgaW5wdXQKKwkud2Jfc3RiX2kgICAgICAocmVnX2kyY21fY3MgICAgKSwgLy8gc3RvYmUvY29yZSBzZWxlY3Qgc2lnbmFsCisJLndiX2N5Y19pICAgICAgKHJlZ19pMmNtX2NzICAgICksIC8vIHZhbGlkIGJ1cyBjeWNsZSBpbnB1dAorCS53Yl9hY2tfbyAgICAgIChyZWdfaTJjX2FjayAgICApLCAvLyBidXMgY3ljbGUgYWNrbm93bGVkZ2Ugb3V0cHV0CisJLndiX2ludGFfbyAgICAgKGkyY21faW50cl9vICAgICksIC8vIGludGVycnVwdCByZXF1ZXN0IHNpZ25hbCBvdXRwdXQKKworCS8vIEkyQyBzaWduYWxzCisJLy8gaTJjIGNsb2NrIGxpbmUKKwkuc2NsX3BhZF9pICAgICAoc2NsX3BhZF9pICAgICAgKSwgLy8gU0NMLWxpbmUgaW5wdXQKKwkuc2NsX3BhZF9vICAgICAoc2NsX3BhZF9vICAgICAgKSwgLy8gU0NMLWxpbmUgb3V0cHV0IChhbHdheXMgMSdiMCkKKwkuc2NsX3BhZG9lbl9vICAoc2NsX3BhZF9vZW5fbyAgKSwgLy8gU0NMLWxpbmUgb3V0cHV0IGVuYWJsZSAoYWN0aXZlIGxvdykKKworCS8vIGkyYyBkYXRhIGxpbmUKKwkuc2RhX3BhZF9pICAgICAoc2RhX3BhZF9pICAgICAgKSwgLy8gU0RBLWxpbmUgaW5wdXQKKwkuc2RhX3BhZF9vICAgICAoc2RhX3BhZF9vICAgICAgKSwgLy8gU0RBLWxpbmUgb3V0cHV0IChhbHdheXMgMSdiMCkKKwkuc2RhX3BhZG9lbl9vICAoc2RhX3BhZG9lbl9vICAgKSAgLy8gU0RBLWxpbmUgb3V0cHV0IGVuYWJsZSAoYWN0aXZlIGxvdykKKworICAgICAgICAgKTsKKworCit1c2IxX2hvc3QgdV91c2JfaG9zdCAoCisgICAgLnVzYl9jbGtfaSAgICAgICh1c2JfY2xrICAgICAgICksCisgICAgLnVzYl9yc3RuX2kgICAgICh1c2JfcnN0biAgICAgICksCisKKyAgICAvLyBVU0IgRCsvRC0KKyAgICAuaW5fZHAgICAgICAgICAgKHVzYl9pbl9kcCAgICAgKSwKKyAgICAuaW5fZG4gICAgICAgICAgKHVzYl9pbl9kbiAgICAgKSwKKworICAgIC5vdXRfZHAgICAgICAgICAodXNiX291dF9kcCAgICApLAorICAgIC5vdXRfZG4gICAgICAgICAodXNiX291dF9kbiAgICApLAorICAgIC5vdXRfdHhfb2VuICAgICAodXNiX291dF90eF9vZW4pLAorCisgICAgLy8gTWFzdGVyIFBvcnQKKyAgICAud2JtX3JzdF9uICAgICAgKHVzYl9yc3RuICAgICAgKSwgIC8vIFJlZ3VsYXIgUmVzZXQgc2lnbmFsCisgICAgLndibV9jbGtfaSAgICAgIChhcHBfY2xrICAgICAgICksICAvLyBTeXN0ZW0gY2xvY2sKKyAgICAud2JtX3N0Yl9pICAgICAgKHJlZ191c2JfY3MgICAgKSwgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgLndibV9hZHJfaSAgICAgIChyZWdfYWRkcls1OjBdKSwgIC8vIGFkZHJlc3MKKyAgICAud2JtX3dlX2kgICAgICAgKHJlZ193ciAgICAgICAgKSwgIC8vIHdyaXRlCisgICAgLndibV9kYXRfaSAgICAgIChyZWdfd2RhdGEgICAgICksICAvLyBkYXRhIG91dHB1dAorICAgIC53Ym1fc2VsX2kgICAgICAocmVnX2JlICAgICAgICApLCAgLy8gYnl0ZSBlbmFibGUKKyAgICAud2JtX2RhdF9vICAgICAgKHJlZ191c2JfcmRhdGEgKSwgIC8vIGRhdGEgaW5wdXQKKyAgICAud2JtX2Fja19vICAgICAgKHJlZ191c2JfYWNrICAgKSwgIC8vIGFja25vd2xlZ2VtZW50CisgICAgLndibV9lcnJfbyAgICAgICggICAgICAgICAgICAgICksICAvLyBlcnJvcgorCisgICAgLy8gT3V0cHV0cworICAgIC51c2JfaW50cl9vICAgICggdXNiX2ludHJfbyAgICApCisKKyAgICApOworCitzc3BpbV90b3AgdV9zc3BpbSAoCisgICAgIC5jbGsgICAgICAgICAgKGFwcF9jbGsgICAgICAgICApLAorICAgICAucmVzZXRfbiAgICAgIChzcGlfcnN0biAgICAgICAgKSwgICAgICAgICAgCisgICAgICAgICAgIAorICAgICAgICAgICAKKyAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgLy8gUmVnIEJ1cyBJbnRlcmZhY2UgU2lnbmFsCisgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIC5yZWdfY3MgICAgICAocmVnX3NwaW1fY3MgICAgICApLAorICAgICAucmVnX3dyICAgICAgKHJlZ193ciAgICAgICAgICAgKSwKKyAgICAgLnJlZ19hZGRyICAgIChyZWdfYWRkciAgICAgICAgICksCisgICAgIC5yZWdfd2RhdGEgICAocmVnX3dkYXRhICAgICAgICApLAorICAgICAucmVnX2JlICAgICAgKHJlZ19iZSAgICAgICAgICAgKSwKKworICAgICAvLyBPdXRwdXRzCisgICAgIC5yZWdfcmRhdGEgICAocmVnX3NwaW1fcmRhdGEgICApLAorICAgICAucmVnX2FjayAgICAgKHJlZ19zcGltX2FjayAgICAgKSwKKyAgICAgICAgICAgCisgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgIC8vIExpbmUgSW50ZXJmYWNlCisgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgCisgICAgICAuc2NrICAgICAgICAgICAoc3NwaW1fc2NrKSwgLy8gY2xvY2sgb3V0CisgICAgICAuc28gICAgICAgICAgICAoc3NwaW1fc28pLCAgLy8gc2VyaWFsIGRhdGEgb3V0CisgICAgICAuc2kgICAgICAgICAgICAoc3NwaW1fc2kpLCAgLy8gc2VyaWFsIGRhdGEgaW4KKyAgICAgIC5zc24gICAgICAgICAgIChzc3BpbV9zc24pICAvLyBjc19uCisKKyAgICAgICAgICAgKTsKKworZW5kbW9kdWxlCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC91cHJqX25ldGxpc3RzLnYgYi92ZXJpbG9nL3J0bC91cHJqX25ldGxpc3RzLnYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjgxYWQ3ZQotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL3VwcmpfbmV0bGlzdHMudgpAQCAtMCwwICsxLDE4MyBAQAorLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMCBFZmFibGVzcyBDb3Jwb3JhdGlvbgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisKKy8vIEluY2x1ZGUgY2FyYXZlbCBnbG9iYWwgZGVmaW5lcyBmb3IgdGhlIG51bWJlciBvZiB0aGUgdXNlciBwcm9qZWN0IElPIHBhZHMgCitgaW5jbHVkZSAiZGVmaW5lcy52IgorYGRlZmluZSBVU0VfUE9XRVJfUElOUworYGRlZmluZSBVTklUX0RFTEFZICMwLjEKKworYGlmZGVmIEdMCisgICAgICAgYGluY2x1ZGUgImxpYnMucmVmL3NreTEzMF9mZF9zY19oZC92ZXJpbG9nL3ByaW1pdGl2ZXMudiIKKyAgICAgICBgaW5jbHVkZSAibGlicy5yZWYvc2t5MTMwX2ZkX3NjX2hkL3Zlcmlsb2cvc2t5MTMwX2ZkX3NjX2hkLnYiCisgICAgICAgYGluY2x1ZGUgImxpYnMucmVmL3NreTEzMF9mZF9zY19odmwvdmVyaWxvZy9wcmltaXRpdmVzLnYiCisgICAgICAgYGluY2x1ZGUgImxpYnMucmVmL3NreTEzMF9mZF9zY19odmwvdmVyaWxvZy9za3kxMzBfZmRfc2NfaHZsLnYiCisgICAgICAgYGluY2x1ZGUgImxpYnMucmVmLy9za3kxMzBfZmRfc2NfaGQvdmVyaWxvZy9za3kxMzBfZWZfc2NfaGRfX2Zha2VkaW9kZV8yLnYiCisKKyAgICAgICAgYGluY2x1ZGUgImdsYmxfY2ZnLnYiCisgICAgICAgIGBpbmNsdWRlICJzcGlfbWFzdGVyLnYiCisgICAgICAgIGBpbmNsdWRlICJ1YXJ0X2kyY20udiIKKyAgICAgICAgYGluY2x1ZGUgIndiX2ludGVyY29ubmVjdC52IgorICAgICAgICBgaW5jbHVkZSAidXNlcl9wcm9qZWN0X3dyYXBwZXIudiIKKyAgICAgICAgYGluY2x1ZGUgInlpZml2ZS52IgorICAgICAgICBgaW5jbHVkZSAid2JfaG9zdC52IgorCWBpbmNsdWRlICJjbGtfc2tld19hZGp1c3QudiIKKwlgaW5jbHVkZSAiY2xrX2J1Zi52IgorCitgZWxzZQorICAgICBgaW5jbHVkZSAibGlicy5yZWYvc2t5MTMwX2ZkX3NjX2hkL3Zlcmlsb2cvcHJpbWl0aXZlcy52IgorICAgICBgaW5jbHVkZSAibGlicy5yZWYvc2t5MTMwX2ZkX3NjX2hkL3Zlcmlsb2cvc2t5MTMwX2ZkX3NjX2hkLnYiCisgICAgIGBpbmNsdWRlICJsaWJzLnJlZi9za3kxMzBfZmRfc2NfaHZsL3Zlcmlsb2cvcHJpbWl0aXZlcy52IgorICAgICBgaW5jbHVkZSAibGlicy5yZWYvc2t5MTMwX2ZkX3NjX2h2bC92ZXJpbG9nL3NreTEzMF9mZF9zY19odmwudiIKKworICAgICBgaW5jbHVkZSJzYXJfYWRjL1NBUi5zdiIKKyAgICAgYGluY2x1ZGUic2FyX2FkYy9BQ01QLnN2IgorICAgICBgaW5jbHVkZSJzYXJfYWRjL3Nhcl9hZGMuc3YiCisgICAgIGBpbmNsdWRlInNhcl9hZGMvYWRjX3JlZy5zdiIKKyAgICAgYGluY2x1ZGUic2FyX2FkYy9EQUNfOEJJVC52IgorCisKKyAgICAgYGluY2x1ZGUgInNyYW1fbWFjcm9zL3NreTEzMF9zcmFtXzJrYnl0ZV8xcncxcl8zMng1MTJfOC52IgorICAgICBgaW5jbHVkZSAicGlubXV4L3NyYy9waW5tdXguc3YiCisgICAgIGBpbmNsdWRlICJwaW5tdXgvc3JjL3Bpbm11eF9yZWcuc3YiCisgICAgIGBpbmNsdWRlICJwaW5tdXgvc3JjL2dwaW9faW50ci5zdiIKKyAgICAgYGluY2x1ZGUgInBpbm11eC9zcmMvcHdtLnN2IgorICAgICBgaW5jbHVkZSAibGliL3B1bHNlX2dlbl90eXBlMS5zdiIKKyAgICAgYGluY2x1ZGUgImxpYi9wdWxzZV9nZW5fdHlwZTIuc3YiCisKKyAgICAgYGluY2x1ZGUgInFzcGltL3NyYy9xc3BpbV90b3Auc3YiCisgICAgIGBpbmNsdWRlICJxc3BpbS9zcmMvcXNwaW1faWYuc3YiCisgICAgIGBpbmNsdWRlICJxc3BpbS9zcmMvcXNwaW1fZmlmby5zdiIKKyAgICAgYGluY2x1ZGUgInFzcGltL3NyYy9xc3BpbV9yZWdzLnN2IgorICAgICBgaW5jbHVkZSAicXNwaW0vc3JjL3FzcGltX2Nsa2dlbi5zdiIKKyAgICAgYGluY2x1ZGUgInFzcGltL3NyYy9xc3BpbV9jdHJsLnN2IgorICAgICBgaW5jbHVkZSAicXNwaW0vc3JjL3FzcGltX3J4LnN2IgorICAgICBgaW5jbHVkZSAicXNwaW0vc3JjL3FzcGltX3R4LnN2IgorCisgICAgIGBpbmNsdWRlICJ1YXJ0L3NyYy91YXJ0X2NvcmUuc3YiCisgICAgIGBpbmNsdWRlICJ1YXJ0L3NyYy91YXJ0X2NmZy5zdiIKKyAgICAgYGluY2x1ZGUgInVhcnQvc3JjL3VhcnRfcnhmc20uc3YiCisgICAgIGBpbmNsdWRlICJ1YXJ0L3NyYy91YXJ0X3R4ZnNtLnN2IgorICAgICBgaW5jbHVkZSAibGliL2FzeW5jX2ZpZm9fdGguc3YiICAKKyAgICAgYGluY2x1ZGUgImxpYi9yZXNldF9zeW5jLnN2IiAgCisgICAgIGBpbmNsdWRlICJsaWIvZG91YmxlX3N5bmNfbG93LnYiICAKKyAgICAgYGluY2x1ZGUgImxpYi9jbGtfYnVmLnYiICAKKworICAgICBgaW5jbHVkZSAiaTJjbS9zcmMvY29yZS9pMmNtX2JpdF9jdHJsLnYiCisgICAgIGBpbmNsdWRlICJpMmNtL3NyYy9jb3JlL2kyY21fYnl0ZV9jdHJsLnYiCisgICAgIGBpbmNsdWRlICJpMmNtL3NyYy9jb3JlL2kyY21fdG9wLnYiCisKKyAgICAgYGluY2x1ZGUgInVzYjFfaG9zdC9zcmMvY29yZS91c2JoX2NvcmUuc3YiCisgICAgIGBpbmNsdWRlICJ1c2IxX2hvc3Qvc3JjL2NvcmUvdXNiaF9jcmMxNi5zdiIKKyAgICAgYGluY2x1ZGUgInVzYjFfaG9zdC9zcmMvY29yZS91c2JoX2NyYzUuc3YiCisgICAgIGBpbmNsdWRlICJ1c2IxX2hvc3Qvc3JjL2NvcmUvdXNiaF9maWZvLnN2IgorICAgICBgaW5jbHVkZSAidXNiMV9ob3N0L3NyYy9jb3JlL3VzYmhfc2llLnN2IgorICAgICBgaW5jbHVkZSAidXNiMV9ob3N0L3NyYy9waHkvdXNiX2ZzX3BoeS52IgorICAgICBgaW5jbHVkZSAidXNiMV9ob3N0L3NyYy9waHkvdXNiX3RyYW5zY2VpdmVyLnYiCisgICAgIGBpbmNsdWRlICJ1c2IxX2hvc3Qvc3JjL3RvcC91c2IxX2hvc3Quc3YiCisKKyAgICAgYGluY2x1ZGUgInNzcGltL3NyYy9zc3BpbV90b3Auc3YiICAKKyAgICAgYGluY2x1ZGUgInNzcGltL3NyYy9zc3BpbV9jdGwuc3YiICAKKyAgICAgYGluY2x1ZGUgInNzcGltL3NyYy9zc3BpbV9pZi5zdiIKKyAgICAgYGluY2x1ZGUgInNzcGltL3NyYy9zc3BpbV9jZmcuc3YiCisKKworICAgICBgaW5jbHVkZSAidWFydF9pMmNfdXNiX3NwaS9zcmMvdWFydF9pMmNfdXNiX3NwaS5zdiIKKworICAgICBgaW5jbHVkZSAibGliL2FzeW5jX2ZpZm8uc3YiICAKKyAgICAgYGluY2x1ZGUgImxpYi9yZWdpc3RlcnMudiIKKyAgICAgYGluY2x1ZGUgImxpYi9jbGtfY3RsLnYiCisgICAgIGBpbmNsdWRlICJsaWIvc2VyX2luZl8zMmIuc3YiCisgICAgIGBpbmNsdWRlICJsaWIvc2VyX3NoaWZ0LnN2IgorICAgICBgaW5jbHVkZSAiZGlnaXRhbF9jb3JlL3NyYy9nbGJsX2NmZy5zdiIKKworICAgICBgaW5jbHVkZSAid2JfaG9zdC9zcmMvd2JfaG9zdC5zdiIKKyAgICAgYGluY2x1ZGUgImxpYi9hc3luY193Yi5zdiIKKworICAgICBgaW5jbHVkZSAibGliL3N5bmNfd2JiLnN2IgorICAgICBgaW5jbHVkZSAibGliL3N5bmNfZmlmbzIuc3YiCisgICAgIGBpbmNsdWRlICJ3Yl9pbnRlcmNvbm5lY3Qvc3JjL3diX2FyYi5zdiIKKyAgICAgYGluY2x1ZGUgIndiX2ludGVyY29ubmVjdC9zcmMvd2JfaW50ZXJjb25uZWN0LnN2IgorCisKKyAgICAgYGluY2x1ZGUgInlpZml2ZS95Y3IxYy9zcmMvY29yZS9waXBlbGluZS95Y3IxX3BpcGVfaGR1LnN2IgorICAgICBgaW5jbHVkZSAieWlmaXZlL3ljcjFjL3NyYy9jb3JlL3BpcGVsaW5lL3ljcjFfcGlwZV90ZHUuc3YiCisgICAgIGBpbmNsdWRlICJ5aWZpdmUveWNyMWMvc3JjL2NvcmUvcGlwZWxpbmUveWNyMV9pcGljLnN2IgorICAgICBgaW5jbHVkZSAieWlmaXZlL3ljcjFjL3NyYy9jb3JlL3BpcGVsaW5lL3ljcjFfcGlwZV9jc3Iuc3YiCisgICAgIGBpbmNsdWRlICJ5aWZpdmUveWNyMWMvc3JjL2NvcmUvcGlwZWxpbmUveWNyMV9waXBlX2V4dS5zdiIKKyAgICAgYGluY2x1ZGUgInlpZml2ZS95Y3IxYy9zcmMvY29yZS9waXBlbGluZS95Y3IxX3BpcGVfaWFsdS5zdiIKKyAgICAgYGluY2x1ZGUgInlpZml2ZS95Y3IxYy9zcmMvY29yZS9waXBlbGluZS95Y3IxX3BpcGVfaWR1LnN2IgorICAgICBgaW5jbHVkZSAieWlmaXZlL3ljcjFjL3NyYy9jb3JlL3BpcGVsaW5lL3ljcjFfcGlwZV9pZnUuc3YiCisgICAgIGBpbmNsdWRlICJ5aWZpdmUveWNyMWMvc3JjL2NvcmUvcGlwZWxpbmUveWNyMV9waXBlX2xzdS5zdiIKKyAgICAgYGluY2x1ZGUgInlpZml2ZS95Y3IxYy9zcmMvY29yZS9waXBlbGluZS95Y3IxX3BpcGVfbXByZi5zdiIKKyAgICAgYGluY2x1ZGUgInlpZml2ZS95Y3IxYy9zcmMvY29yZS9waXBlbGluZS95Y3IxX3BpcGVfbXVsLnN2IgorICAgICBgaW5jbHVkZSAieWlmaXZlL3ljcjFjL3NyYy9jb3JlL3BpcGVsaW5lL3ljcjFfcGlwZV9kaXYuc3YiCisgICAgIGBpbmNsdWRlICJ5aWZpdmUveWNyMWMvc3JjL2NvcmUvcGlwZWxpbmUveWNyMV9waXBlX3RvcC5zdiIKKyAgICAgYGluY2x1ZGUgInlpZml2ZS95Y3IxYy9zcmMvY29yZS9wcmltaXRpdmVzL3ljcjFfcmVzZXRfY2VsbHMuc3YiCisgICAgIGBpbmNsdWRlICJ5aWZpdmUveWNyMWMvc3JjL2NvcmUvcHJpbWl0aXZlcy95Y3IxX2NnLnN2IgorICAgICBgaW5jbHVkZSAieWlmaXZlL3ljcjFjL3NyYy9jb3JlL3ljcjFfY2xrX2N0cmwuc3YiCisgICAgIGBpbmNsdWRlICJ5aWZpdmUveWNyMWMvc3JjL2NvcmUveWNyMV90YXBjX3NoaWZ0X3JlZy5zdiIKKyAgICAgYGluY2x1ZGUgInlpZml2ZS95Y3IxYy9zcmMvY29yZS95Y3IxX3RhcGMuc3YiCisgICAgIGBpbmNsdWRlICJ5aWZpdmUveWNyMWMvc3JjL2NvcmUveWNyMV90YXBjX3N5bmNocm9uaXplci5zdiIKKyAgICAgYGluY2x1ZGUgInlpZml2ZS95Y3IxYy9zcmMvY29yZS95Y3IxX2NvcmVfdG9wLnN2IgorICAgICBgaW5jbHVkZSAieWlmaXZlL3ljcjFjL3NyYy9jb3JlL3ljcjFfZG0uc3YiCisgICAgIGBpbmNsdWRlICJ5aWZpdmUveWNyMWMvc3JjL2NvcmUveWNyMV9kbWkuc3YiCisgICAgIGBpbmNsdWRlICJ5aWZpdmUveWNyMWMvc3JjL2NvcmUveWNyMV9zY3Uuc3YiCisgICAgIGBpbmNsdWRlICJ5aWZpdmUveWNyMWMvc3JjL3RvcC95Y3IxX2ltZW1fcm91dGVyLnN2IgorICAgICBgaW5jbHVkZSAieWlmaXZlL3ljcjFjL3NyYy90b3AveWNyMV9kbWVtX3JvdXRlci5zdiIKKyAgICAgYGluY2x1ZGUgInlpZml2ZS95Y3IxYy9zcmMvdG9wL3ljcjFfZHBfbWVtb3J5LnN2IgorICAgICBgaW5jbHVkZSAieWlmaXZlL3ljcjFjL3NyYy90b3AveWNyMV90Y20uc3YiCisgICAgIGBpbmNsdWRlICJ5aWZpdmUveWNyMWMvc3JjL3RvcC95Y3IxX3RpbWVyLnN2IgorICAgICBgaW5jbHVkZSAieWlmaXZlL3ljcjFjL3NyYy90b3AveWNyMV9kbWVtX3diLnN2IgorICAgICBgaW5jbHVkZSAieWlmaXZlL3ljcjFjL3NyYy90b3AveWNyMV9pbWVtX3diLnN2IgorICAgICBgaW5jbHVkZSAieWlmaXZlL3ljcjFjL3NyYy90b3AveWNyMV9pbnRmLnN2IgorICAgICBgaW5jbHVkZSAieWlmaXZlL3ljcjFjL3NyYy90b3AveWNyMV90b3Bfd2Iuc3YiCisgICAgIGBpbmNsdWRlICJ5aWZpdmUveWNyMWMvc3JjL3RvcC95Y3IxX2ljYWNoZV9yb3V0ZXIuc3YiCisgICAgIGBpbmNsdWRlICJ5aWZpdmUveWNyMWMvc3JjL3RvcC95Y3IxX2RjYWNoZV9yb3V0ZXIuc3YiCisgICAgIGBpbmNsdWRlICJ5aWZpdmUveWNyMWMvc3JjL2NhY2hlL3NyYy9jb3JlL2ljYWNoZV90b3Auc3YiCisgICAgIGBpbmNsdWRlICJ5aWZpdmUveWNyMWMvc3JjL2NhY2hlL3NyYy9jb3JlL2ljYWNoZV9hcHBfZnNtLnN2IgorICAgICBgaW5jbHVkZSAieWlmaXZlL3ljcjFjL3NyYy9jYWNoZS9zcmMvY29yZS9pY2FjaGVfdGFnX2ZpZm8uc3YiCisgICAgIGBpbmNsdWRlICJ5aWZpdmUveWNyMWMvc3JjL2NhY2hlL3NyYy9jb3JlL2RjYWNoZV90YWdfZmlmby5zdiIKKyAgICAgYGluY2x1ZGUgInlpZml2ZS95Y3IxYy9zcmMvY2FjaGUvc3JjL2NvcmUvZGNhY2hlX3RvcC5zdiIKKyAgICAgYGluY2x1ZGUgInlpZml2ZS95Y3IxYy9zcmMvbGliL3ljcjFfYXN5bmNfd2JiLnN2IgorICAgICBgaW5jbHVkZSAieWlmaXZlL3ljcjFjL3NyYy9saWIveWNyMV9hcmIuc3YiCisKKyAgICAgYGluY2x1ZGUgImxpYi9zeW5jX2ZpZm8uc3YiCisKKyAgICAgYGluY2x1ZGUgIm1iaXN0L3NyYy9jb3JlL21iaXN0X2FkZHJfZ2VuLnN2IgorICAgICBgaW5jbHVkZSAibWJpc3Qvc3JjL2NvcmUvbWJpc3RfZnNtLnN2IiAKKyAgICAgYGluY2x1ZGUgIm1iaXN0L3NyYy9jb3JlL21iaXN0X29wX3NlbC5zdiIgCisgICAgIGBpbmNsdWRlICJtYmlzdC9zcmMvY29yZS9tYmlzdF9yZXBhaXJfYWRkci5zdiIgCisgICAgIGBpbmNsdWRlICJtYmlzdC9zcmMvY29yZS9tYmlzdF9zdGlfc2VsLnN2IiAKKyAgICAgYGluY2x1ZGUgIm1iaXN0L3NyYy9jb3JlL21iaXN0X3BhdF9zZWwuc3YiCisgICAgIGBpbmNsdWRlICJtYmlzdC9zcmMvY29yZS9tYmlzdF9tdXguc3YiCisgICAgIGBpbmNsdWRlICJtYmlzdC9zcmMvY29yZS9tYmlzdF9kYXRhX2NtcC5zdiIKKyAgICAgYGluY2x1ZGUgIm1iaXN0L3NyYy9jb3JlL21iaXN0X21lbV93cmFwcGVyLnN2IgorCisgICAgYGluY2x1ZGUgIm1iaXN0L3NyYy90b3AvbWJpc3RfdG9wLnN2IiAKKyAgICBgaW5jbHVkZSAibWJpc3Rfd3JhcHBlci9zcmMvbWJpc3Rfd2Iuc3YiIAorICAgIGBpbmNsdWRlICJtYmlzdF93cmFwcGVyL3NyYy9tYmlzdF93cmFwcGVyLnN2IiAKKworCisgICAgYGluY2x1ZGUgInVhcnQyd2Ivc3JjL3VhcnQyd2Iuc3YiIAorICAgIGBpbmNsdWRlICJ1YXJ0MndiL3NyYy91YXJ0Ml9jb3JlLnN2IiAKKyAgICBgaW5jbHVkZSAidWFydDJ3Yi9zcmMvdWFydF9tc2dfaGFuZGxlci52IiAKKyAgICAgYGluY2x1ZGUgImxpYi9hc3luY19yZWdfYnVzLnN2IgorCisgICAgIGBpbmNsdWRlICJ1c2VyX3Byb2plY3Rfd3JhcHBlci52IgorICAgICAvLyB3ZSBhcmUgdXNpbmcgbmV0bGlzdCBmaWxlIGZvciBjbGtfc2tld19hZGp1c3QgYXMgaXQgaGFzIAorICAgICAvLyBzdGFuZGFyZCBjZWxsICsgcG93ZXIgcGluCisgICAgIGBpbmNsdWRlICJjbGtfc2tld19hZGp1c3Qvc3JjL2Nsa19za2V3X2FkanVzdC52IgorICAgICBgaW5jbHVkZSAibGliL2N0ZWNoX2NlbGxzLnN2IgorYGVuZGlmCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC91c2IxX2hvc3Qvc3JjL2NvcmUvdXNiaF9jb3JlLnN2IGIvdmVyaWxvZy9ydGwvdXNiMV9ob3N0L3NyYy9jb3JlL3VzYmhfY29yZS5zdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGZmZWNiCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvdXNiMV9ob3N0L3NyYy9jb3JlL3VzYmhfY29yZS5zdgpAQCAtMCwwICsxLDEwMTkgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSAsIERpbmVzaCBBbm5heXlhICAgICAgICAgICAgICAgICAgICAgICAgICAKKy8vIAorLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBDcmVhdGVkIGJ5IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisvLworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gICAgICAgICAgICAgICAgICAgICBVU0IgRnVsbCBTcGVlZCBIb3N0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgIFYwLjYKKy8vICAgICAgICAgICAgICAgICAgICAgVWx0cmEtRW1iZWRkZWQuY29tCisvLyAgICAgICAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDE1LTIwMjAKKy8vCisvLyAgICAgICAgICAgICAgICAgRW1haWw6IGFkbWluQHVsdHJhLWVtYmVkZGVkLmNvbQorLy8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgIExpY2Vuc2U6IEdQTAorLy8gSWYgeW91IHdvdWxkIGxpa2UgYSB2ZXJzaW9uIHdpdGggYSBtb3JlIHBlcm1pc3NpdmUgbGljZW5zZSBmb3IKKy8vIHVzZSBpbiBjbG9zZWQgc291cmNlIGNvbW1lcmNpYWwgYXBwbGljYXRpb25zIHBsZWFzZSBjb250YWN0IG1lCisvLyBmb3IgZGV0YWlscy4KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vCisvLyBUaGlzIGZpbGUgaXMgb3BlbiBzb3VyY2UgSERMOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgCisvLyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyAKKy8vIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIAorLy8gdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisvLworLy8gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy8vCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgCisvLyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBmaWxlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisvLyBVU0EKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEdlbmVyYXRlZCBGaWxlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2BpbmNsdWRlICJ1c2JoX2hvc3RfZGVmcy52IgorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBNb2R1bGU6ICBVU0IgSG9zdCBJUAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbW9kdWxlIHVzYmhfY29yZQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUGFyYW1zCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjKAorICAgICBwYXJhbWV0ZXIgVVNCX0NMS19GUkVRICAgICA9IDQ4MDAwMDAwCispCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBQb3J0cworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKAorICAgIC8vIElucHV0cworICAgIGlucHV0IGxvZ2ljICAgICAgICAgICAgIGNsa19pLAorICAgIGlucHV0IGxvZ2ljICAgICAgICAgICAgIHJzdG5faSwKKworICAgIC8vIFJlZyBCdXMgSW50ZXJmYWNlIFNpZ25hbAorICAgIGlucHV0IGxvZ2ljICAgICAgICAgICAgIHJlZ19jcywKKyAgICBpbnB1dCBsb2dpYyAgICAgICAgICAgICByZWdfd3IsCisgICAgaW5wdXQgbG9naWMgWzU6MF0gICAgICAgcmVnX2FkZHIsCisgICAgaW5wdXQgbG9naWMgWzMxOjBdICAgICAgcmVnX3dkYXRhLAorICAgIGlucHV0IGxvZ2ljIFszOjBdICAgICAgIHJlZ19iZSwKKworICAgLy8gT3V0cHV0cworICAgIG91dHB1dCBsb2dpYyBbMzE6MF0gICAgIHJlZ19yZGF0YSwKKyAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICByZWdfYWNrLAorCisgICAgLy8gVVRNSSBJbnB1dAorICAgIGlucHV0ICBsb2dpYyBbNzowXSAgIHV0bWlfZGF0YV9pbl9pLAorICAgIGlucHV0ICBsb2dpYyAgICAgICAgIHV0bWlfdHhyZWFkeV9pLAorICAgIGlucHV0ICBsb2dpYyAgICAgICAgIHV0bWlfcnh2YWxpZF9pLAorICAgIGlucHV0ICBsb2dpYyAgICAgICAgIHV0bWlfcnhhY3RpdmVfaSwKKyAgICBpbnB1dCAgbG9naWMgICAgICAgICB1dG1pX3J4ZXJyb3JfaSwKKyAgICBpbnB1dCAgbG9naWMgWzE6MF0gICB1dG1pX2xpbmVzdGF0ZV9pLAorCisgICAgLy8gVVRNSSBPdXRwdXRzCisgICAgb3V0cHV0IGxvZ2ljICAgICAgICAgaW50cl9vLAorICAgIG91dHB1dCBsb2dpYyBbNzowXSAgIHV0bWlfZGF0YV9vdXRfbywKKyAgICBvdXRwdXQgbG9naWMgICAgICAgICB1dG1pX3R4dmFsaWRfbywKKyAgICBvdXRwdXQgbG9naWMgWzE6MF0gICB1dG1pX29wX21vZGVfbywKKyAgICBvdXRwdXQgbG9naWMgWzE6MF0gICB1dG1pX3hjdnJzZWxlY3RfbywKKyAgICBvdXRwdXQgbG9naWMgICAgICAgICB1dG1pX3Rlcm1zZWxlY3RfbywKKyAgICBvdXRwdXQgbG9naWMgICAgICAgICB1dG1pX2RwcHVsbGRvd25fbywKKyAgICBvdXRwdXQgbG9naWMgICAgICAgICB1dG1pX2RtcHVsbGRvd25fbworKTsKKworCityZWcgWzMxOjBdIHJlZ19yZGF0YV9yOword2lyZSBbMTU6MF0gIHVzYl9zdGF0dXNfc29mX3RpbWVfaW5fdzsKK3dpcmUgICAgICAgIHVzYl9zdGF0dXNfcnhfZXJyb3JfaW5fdzsKK3dpcmUgWzE6MF0gIHVzYl9zdGF0dXNfbGluZXN0YXRlX2JpdHNfaW5fdzsKK3dpcmUgICAgICAgIHVzYl9pcnFfc3RzX2RldmljZV9kZXRlY3RfaW5fdzsKK3dpcmUgICAgICAgIHVzYl9pcnFfc3RzX2Vycl9pbl93Oword2lyZSAgICAgICAgdXNiX2lycV9zdHNfZG9uZV9pbl93Oword2lyZSAgICAgICAgdXNiX2lycV9zdHNfc29mX2luX3c7Cit3aXJlICAgICAgICB1c2Jfcnhfc3RhdF9zdGFydF9wZW5kX2luX3c7Cit3aXJlICAgICAgICB1c2Jfcnhfc3RhdF9jcmNfZXJyX2luX3c7Cit3aXJlICAgICAgICB1c2Jfcnhfc3RhdF9yZXNwX3RpbWVvdXRfaW5fdzsKK3dpcmUgICAgICAgIHVzYl9yeF9zdGF0X2lkbGVfaW5fdzsKK3dpcmUgWzc6MF0gIHVzYl9yeF9zdGF0X3Jlc3BfYml0c19pbl93Oword2lyZSBbMTU6MF0gIHVzYl9yeF9zdGF0X2NvdW50X2JpdHNfaW5fdzsKK3dpcmUgWzc6MF0gIHVzYl9yZF9kYXRhX2RhdGFfaW5fdzsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUmVhZCBwYXRoIG11eAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitsb2dpYyBjZmdfd3I7CisKK2Fsd2F5cyBAIChwb3NlZGdlIGNsa19pIG9yIG5lZ2VkZ2UgcnN0bl9pKQorYmVnaW4gOiBwcmVnX291dF9TZXEKKyAgIGlmIChyc3RuX2kgPT0gMSdiMCkgYmVnaW4KKyAgICAgIHJlZ19yZGF0YSBbMzE6MF0gIDw9IDMyJ2gwMDAwXzAwMDA7CisgICAgICByZWdfYWNrICAgICAgICAgICA8PSAxJ2IwOworICAgICAgY2ZnX3dyICAgICAgICAgICAgPD0gMSdiMDsKKyAgIGVuZCBlbHNlIGlmIChyZWdfY3MgJiYgKHJlZ193ciA9PSAwKSAgJiYgIXJlZ19hY2spIGJlZ2luCisgICAgICByZWdfcmRhdGEgWzMxOjBdICA8PSByZWdfcmRhdGFfciBbMzE6MF07CisgICAgICByZWdfYWNrICAgICAgICAgICA8PSAxJ2IxOworICAgZW5kIGVsc2UgaWYgKHJlZ19jcyAmJiAocmVnX3dyID09IDEpICYmICFyZWdfYWNrKSBiZWdpbiAKKyAgICAgIHJlZ19hY2sgICAgICAgICAgIDw9IDEnYjE7CisgICAgICBjZmdfd3IgICAgICAgICAgICA8PSAxJ2IxOworICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgIHJlZ19hY2sgICAgICAgIDw9IDEnYjA7CisgICAgICBjZmdfd3IgICAgICAgICA8PSAxJ2IwOworICAgZW5kCitlbmQKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSZWdpc3RlciB1c2JfY3RybAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcmVnIHVzYl9jdHJsX3dyX3E7CisKK2Fsd2F5cyBAIChwb3NlZGdlIGNsa19pIG9yIG5lZ2VkZ2UgcnN0bl9pKQoraWYgKCFyc3RuX2kpCisgICAgdXNiX2N0cmxfd3JfcSA8PSAxJ2IwOworZWxzZSBpZiAoY2ZnX3dyICYmIChyZWdfYWRkcls1OjBdID09IGBVU0JfQ1RSTCkpCisgICAgdXNiX2N0cmxfd3JfcSA8PSAxJ2IxOworZWxzZQorICAgIHVzYl9jdHJsX3dyX3EgPD0gMSdiMDsKKworLy8gdXNiX2N0cmxfdHhfZmx1c2ggW2F1dG9fY2xyXQorcmVnICAgICAgICB1c2JfY3RybF90eF9mbHVzaF9xOworCithbHdheXMgQCAocG9zZWRnZSBjbGtfaSBvciBuZWdlZGdlIHJzdG5faSkKK2lmICghcnN0bl9pKQorICAgIHVzYl9jdHJsX3R4X2ZsdXNoX3EgPD0gMSdkYFVTQl9DVFJMX1RYX0ZMVVNIX0RFRkFVTFQ7CitlbHNlIGlmIChjZmdfd3IgJiYgKHJlZ19hZGRyWzU6MF0gPT0gYFVTQl9DVFJMKSkKKyAgICB1c2JfY3RybF90eF9mbHVzaF9xIDw9IHJlZ193ZGF0YVtgVVNCX0NUUkxfVFhfRkxVU0hfUl07CitlbHNlCisgICAgdXNiX2N0cmxfdHhfZmx1c2hfcSA8PSAxJ2RgVVNCX0NUUkxfVFhfRkxVU0hfREVGQVVMVDsKKword2lyZSAgICAgICAgdXNiX2N0cmxfdHhfZmx1c2hfb3V0X3cgPSB1c2JfY3RybF90eF9mbHVzaF9xOworCisKKy8vIHVzYl9jdHJsX3BoeV9kbXB1bGxkb3duIFtpbnRlcm5hbF0KK3JlZyAgICAgICAgdXNiX2N0cmxfcGh5X2RtcHVsbGRvd25fcTsKKworYWx3YXlzIEAgKHBvc2VkZ2UgY2xrX2kgb3IgbmVnZWRnZSByc3RuX2kpCitpZiAoIXJzdG5faSkKKyAgICB1c2JfY3RybF9waHlfZG1wdWxsZG93bl9xIDw9IDEnZGBVU0JfQ1RSTF9QSFlfRE1QVUxMRE9XTl9ERUZBVUxUOworZWxzZSBpZiAoY2ZnX3dyICYmIChyZWdfYWRkcls1OjBdID09IGBVU0JfQ1RSTCkpCisgICAgdXNiX2N0cmxfcGh5X2RtcHVsbGRvd25fcSA8PSByZWdfd2RhdGFbYFVTQl9DVFJMX1BIWV9ETVBVTExET1dOX1JdOworCit3aXJlICAgICAgICB1c2JfY3RybF9waHlfZG1wdWxsZG93bl9vdXRfdyA9IHVzYl9jdHJsX3BoeV9kbXB1bGxkb3duX3E7CisKKworLy8gdXNiX2N0cmxfcGh5X2RwcHVsbGRvd24gW2ludGVybmFsXQorcmVnICAgICAgICB1c2JfY3RybF9waHlfZHBwdWxsZG93bl9xOworCithbHdheXMgQCAocG9zZWRnZSBjbGtfaSBvciBuZWdlZGdlIHJzdG5faSkKK2lmICghcnN0bl9pKQorICAgIHVzYl9jdHJsX3BoeV9kcHB1bGxkb3duX3EgPD0gMSdkYFVTQl9DVFJMX1BIWV9EUFBVTExET1dOX0RFRkFVTFQ7CitlbHNlIGlmIChjZmdfd3IgJiYgKHJlZ19hZGRyWzU6MF0gPT0gYFVTQl9DVFJMKSkKKyAgICB1c2JfY3RybF9waHlfZHBwdWxsZG93bl9xIDw9IHJlZ193ZGF0YVtgVVNCX0NUUkxfUEhZX0RQUFVMTERPV05fUl07CisKK3dpcmUgICAgICAgIHVzYl9jdHJsX3BoeV9kcHB1bGxkb3duX291dF93ID0gdXNiX2N0cmxfcGh5X2RwcHVsbGRvd25fcTsKKworCisvLyB1c2JfY3RybF9waHlfdGVybXNlbGVjdCBbaW50ZXJuYWxdCityZWcgICAgICAgIHVzYl9jdHJsX3BoeV90ZXJtc2VsZWN0X3E7CisKK2Fsd2F5cyBAIChwb3NlZGdlIGNsa19pIG9yIG5lZ2VkZ2UgcnN0bl9pKQoraWYgKCFyc3RuX2kpCisgICAgdXNiX2N0cmxfcGh5X3Rlcm1zZWxlY3RfcSA8PSAxJ2RgVVNCX0NUUkxfUEhZX1RFUk1TRUxFQ1RfREVGQVVMVDsKK2Vsc2UgaWYgKGNmZ193ciAmJiAocmVnX2FkZHJbNTowXSA9PSBgVVNCX0NUUkwpKQorICAgIHVzYl9jdHJsX3BoeV90ZXJtc2VsZWN0X3EgPD0gcmVnX3dkYXRhW2BVU0JfQ1RSTF9QSFlfVEVSTVNFTEVDVF9SXTsKKword2lyZSAgICAgICAgdXNiX2N0cmxfcGh5X3Rlcm1zZWxlY3Rfb3V0X3cgPSB1c2JfY3RybF9waHlfdGVybXNlbGVjdF9xOworCisKKy8vIHVzYl9jdHJsX3BoeV94Y3Zyc2VsZWN0IFtpbnRlcm5hbF0KK3JlZyBbMTowXSAgdXNiX2N0cmxfcGh5X3hjdnJzZWxlY3RfcTsKKworYWx3YXlzIEAgKHBvc2VkZ2UgY2xrX2kgb3IgbmVnZWRnZSByc3RuX2kpCitpZiAoIXJzdG5faSkKKyAgICB1c2JfY3RybF9waHlfeGN2cnNlbGVjdF9xIDw9IDInZGBVU0JfQ1RSTF9QSFlfWENWUlNFTEVDVF9ERUZBVUxUOworZWxzZSBpZiAoY2ZnX3dyICYmIChyZWdfYWRkcls1OjBdID09IGBVU0JfQ1RSTCkpCisgICAgdXNiX2N0cmxfcGh5X3hjdnJzZWxlY3RfcSA8PSByZWdfd2RhdGFbYFVTQl9DVFJMX1BIWV9YQ1ZSU0VMRUNUX1JdOworCit3aXJlIFsxOjBdICB1c2JfY3RybF9waHlfeGN2cnNlbGVjdF9vdXRfdyA9IHVzYl9jdHJsX3BoeV94Y3Zyc2VsZWN0X3E7CisKKworLy8gdXNiX2N0cmxfcGh5X29wbW9kZSBbaW50ZXJuYWxdCityZWcgWzE6MF0gIHVzYl9jdHJsX3BoeV9vcG1vZGVfcTsKKworYWx3YXlzIEAgKHBvc2VkZ2UgY2xrX2kgb3IgbmVnZWRnZSByc3RuX2kpCitpZiAoIXJzdG5faSkKKyAgICB1c2JfY3RybF9waHlfb3Btb2RlX3EgPD0gMidkYFVTQl9DVFJMX1BIWV9PUE1PREVfREVGQVVMVDsKK2Vsc2UgaWYgKGNmZ193ciAmJiAocmVnX2FkZHJbNTowXSA9PSBgVVNCX0NUUkwpKQorICAgIHVzYl9jdHJsX3BoeV9vcG1vZGVfcSA8PSByZWdfd2RhdGFbYFVTQl9DVFJMX1BIWV9PUE1PREVfUl07CisKK3dpcmUgWzE6MF0gIHVzYl9jdHJsX3BoeV9vcG1vZGVfb3V0X3cgPSB1c2JfY3RybF9waHlfb3Btb2RlX3E7CisKKworLy8gdXNiX2N0cmxfZW5hYmxlX3NvZiBbaW50ZXJuYWxdCityZWcgICAgICAgIHVzYl9jdHJsX2VuYWJsZV9zb2ZfcTsKKworYWx3YXlzIEAgKHBvc2VkZ2UgY2xrX2kgb3IgbmVnZWRnZSByc3RuX2kpCitpZiAoIXJzdG5faSkKKyAgICB1c2JfY3RybF9lbmFibGVfc29mX3EgPD0gMSdkYFVTQl9DVFJMX0VOQUJMRV9TT0ZfREVGQVVMVDsKK2Vsc2UgaWYgKGNmZ193ciAmJiAocmVnX2FkZHJbNTowXSA9PSBgVVNCX0NUUkwpKQorICAgIHVzYl9jdHJsX2VuYWJsZV9zb2ZfcSA8PSByZWdfd2RhdGFbYFVTQl9DVFJMX0VOQUJMRV9TT0ZfUl07CisKK3dpcmUgICAgICAgIHVzYl9jdHJsX2VuYWJsZV9zb2Zfb3V0X3cgPSB1c2JfY3RybF9lbmFibGVfc29mX3E7CisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUmVnaXN0ZXIgdXNiX3N0YXR1cworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcmVnIHVzYl9zdGF0dXNfd3JfcTsKKworYWx3YXlzIEAgKHBvc2VkZ2UgY2xrX2kgb3IgbmVnZWRnZSByc3RuX2kpCitpZiAoIXJzdG5faSkKKyAgICB1c2Jfc3RhdHVzX3dyX3EgPD0gMSdiMDsKK2Vsc2UgaWYgKGNmZ193ciAmJiAocmVnX2FkZHJbNTowXSA9PSBgVVNCX1NUQVRVUykpCisgICAgdXNiX3N0YXR1c193cl9xIDw9IDEnYjE7CitlbHNlCisgICAgdXNiX3N0YXR1c193cl9xIDw9IDEnYjA7CisKKworCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJlZ2lzdGVyIHVzYl9pcnFfYWNrCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCityZWcgdXNiX2lycV9hY2tfd3JfcTsKKworYWx3YXlzIEAgKHBvc2VkZ2UgY2xrX2kgb3IgbmVnZWRnZSByc3RuX2kpCitpZiAoIXJzdG5faSkKKyAgICB1c2JfaXJxX2Fja193cl9xIDw9IDEnYjA7CitlbHNlIGlmIChjZmdfd3IgJiYgKHJlZ19hZGRyWzU6MF0gPT0gYFVTQl9JUlFfQUNLKSkKKyAgICB1c2JfaXJxX2Fja193cl9xIDw9IDEnYjE7CitlbHNlCisgICAgdXNiX2lycV9hY2tfd3JfcSA8PSAxJ2IwOworCisvLyB1c2JfaXJxX2Fja19kZXZpY2VfZGV0ZWN0IFthdXRvX2Nscl0KK3JlZyAgICAgICAgdXNiX2lycV9hY2tfZGV2aWNlX2RldGVjdF9xOworCithbHdheXMgQCAocG9zZWRnZSBjbGtfaSBvciBuZWdlZGdlIHJzdG5faSkKK2lmICghcnN0bl9pKQorICAgIHVzYl9pcnFfYWNrX2RldmljZV9kZXRlY3RfcSA8PSAxJ2RgVVNCX0lSUV9BQ0tfREVWSUNFX0RFVEVDVF9ERUZBVUxUOworZWxzZSBpZiAoY2ZnX3dyICYmIChyZWdfYWRkcls1OjBdID09IGBVU0JfSVJRX0FDSykpCisgICAgdXNiX2lycV9hY2tfZGV2aWNlX2RldGVjdF9xIDw9IHJlZ193ZGF0YVtgVVNCX0lSUV9BQ0tfREVWSUNFX0RFVEVDVF9SXTsKK2Vsc2UKKyAgICB1c2JfaXJxX2Fja19kZXZpY2VfZGV0ZWN0X3EgPD0gMSdkYFVTQl9JUlFfQUNLX0RFVklDRV9ERVRFQ1RfREVGQVVMVDsKKword2lyZSAgICAgICAgdXNiX2lycV9hY2tfZGV2aWNlX2RldGVjdF9vdXRfdyA9IHVzYl9pcnFfYWNrX2RldmljZV9kZXRlY3RfcTsKKworCisvLyB1c2JfaXJxX2Fja19lcnIgW2F1dG9fY2xyXQorcmVnICAgICAgICB1c2JfaXJxX2Fja19lcnJfcTsKKworYWx3YXlzIEAgKHBvc2VkZ2UgY2xrX2kgb3IgbmVnZWRnZSByc3RuX2kpCitpZiAoIXJzdG5faSkKKyAgICB1c2JfaXJxX2Fja19lcnJfcSA8PSAxJ2RgVVNCX0lSUV9BQ0tfRVJSX0RFRkFVTFQ7CitlbHNlIGlmIChjZmdfd3IgJiYgKHJlZ19hZGRyWzU6MF0gPT0gYFVTQl9JUlFfQUNLKSkKKyAgICB1c2JfaXJxX2Fja19lcnJfcSA8PSByZWdfd2RhdGFbYFVTQl9JUlFfQUNLX0VSUl9SXTsKK2Vsc2UKKyAgICB1c2JfaXJxX2Fja19lcnJfcSA8PSAxJ2RgVVNCX0lSUV9BQ0tfRVJSX0RFRkFVTFQ7CisKK3dpcmUgICAgICAgIHVzYl9pcnFfYWNrX2Vycl9vdXRfdyA9IHVzYl9pcnFfYWNrX2Vycl9xOworCisKKy8vIHVzYl9pcnFfYWNrX2RvbmUgW2F1dG9fY2xyXQorcmVnICAgICAgICB1c2JfaXJxX2Fja19kb25lX3E7CisKK2Fsd2F5cyBAIChwb3NlZGdlIGNsa19pIG9yIG5lZ2VkZ2UgcnN0bl9pKQoraWYgKCFyc3RuX2kpCisgICAgdXNiX2lycV9hY2tfZG9uZV9xIDw9IDEnZGBVU0JfSVJRX0FDS19ET05FX0RFRkFVTFQ7CitlbHNlIGlmIChjZmdfd3IgJiYgKHJlZ19hZGRyWzU6MF0gPT0gYFVTQl9JUlFfQUNLKSkKKyAgICB1c2JfaXJxX2Fja19kb25lX3EgPD0gcmVnX3dkYXRhW2BVU0JfSVJRX0FDS19ET05FX1JdOworZWxzZQorICAgIHVzYl9pcnFfYWNrX2RvbmVfcSA8PSAxJ2RgVVNCX0lSUV9BQ0tfRE9ORV9ERUZBVUxUOworCit3aXJlICAgICAgICB1c2JfaXJxX2Fja19kb25lX291dF93ID0gdXNiX2lycV9hY2tfZG9uZV9xOworCisKKy8vIHVzYl9pcnFfYWNrX3NvZiBbYXV0b19jbHJdCityZWcgICAgICAgIHVzYl9pcnFfYWNrX3NvZl9xOworCithbHdheXMgQCAocG9zZWRnZSBjbGtfaSBvciBuZWdlZGdlIHJzdG5faSkKK2lmICghcnN0bl9pKQorICAgIHVzYl9pcnFfYWNrX3NvZl9xIDw9IDEnZGBVU0JfSVJRX0FDS19TT0ZfREVGQVVMVDsKK2Vsc2UgaWYgKGNmZ193ciAmJiAocmVnX2FkZHJbNTowXSA9PSBgVVNCX0lSUV9BQ0spKQorICAgIHVzYl9pcnFfYWNrX3NvZl9xIDw9IHJlZ193ZGF0YVtgVVNCX0lSUV9BQ0tfU09GX1JdOworZWxzZQorICAgIHVzYl9pcnFfYWNrX3NvZl9xIDw9IDEnZGBVU0JfSVJRX0FDS19TT0ZfREVGQVVMVDsKKword2lyZSAgICAgICAgdXNiX2lycV9hY2tfc29mX291dF93ID0gdXNiX2lycV9hY2tfc29mX3E7CisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUmVnaXN0ZXIgdXNiX2lycV9zdHMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3JlZyB1c2JfaXJxX3N0c193cl9xOworCithbHdheXMgQCAocG9zZWRnZSBjbGtfaSBvciBuZWdlZGdlIHJzdG5faSkKK2lmICghcnN0bl9pKQorICAgIHVzYl9pcnFfc3RzX3dyX3EgPD0gMSdiMDsKK2Vsc2UgaWYgKGNmZ193ciAmJiAocmVnX2FkZHJbNTowXSA9PSBgVVNCX0lSUV9TVFMpKQorICAgIHVzYl9pcnFfc3RzX3dyX3EgPD0gMSdiMTsKK2Vsc2UKKyAgICB1c2JfaXJxX3N0c193cl9xIDw9IDEnYjA7CisKKworCisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUmVnaXN0ZXIgdXNiX2lycV9tYXNrCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCityZWcgdXNiX2lycV9tYXNrX3dyX3E7CisKK2Fsd2F5cyBAIChwb3NlZGdlIGNsa19pIG9yIG5lZ2VkZ2UgcnN0bl9pKQoraWYgKCFyc3RuX2kpCisgICAgdXNiX2lycV9tYXNrX3dyX3EgPD0gMSdiMDsKK2Vsc2UgaWYgKGNmZ193ciAmJiAocmVnX2FkZHJbNTowXSA9PSBgVVNCX0lSUV9NQVNLKSkKKyAgICB1c2JfaXJxX21hc2tfd3JfcSA8PSAxJ2IxOworZWxzZQorICAgIHVzYl9pcnFfbWFza193cl9xIDw9IDEnYjA7CisKKy8vIHVzYl9pcnFfbWFza19kZXZpY2VfZGV0ZWN0IFtpbnRlcm5hbF0KK3JlZyAgICAgICAgdXNiX2lycV9tYXNrX2RldmljZV9kZXRlY3RfcTsKKworYWx3YXlzIEAgKHBvc2VkZ2UgY2xrX2kgb3IgbmVnZWRnZSByc3RuX2kpCitpZiAoIXJzdG5faSkKKyAgICB1c2JfaXJxX21hc2tfZGV2aWNlX2RldGVjdF9xIDw9IDEnZGBVU0JfSVJRX01BU0tfREVWSUNFX0RFVEVDVF9ERUZBVUxUOworZWxzZSBpZiAoY2ZnX3dyICYmIChyZWdfYWRkcls1OjBdID09IGBVU0JfSVJRX01BU0spKQorICAgIHVzYl9pcnFfbWFza19kZXZpY2VfZGV0ZWN0X3EgPD0gcmVnX3dkYXRhW2BVU0JfSVJRX01BU0tfREVWSUNFX0RFVEVDVF9SXTsKKword2lyZSAgICAgICAgdXNiX2lycV9tYXNrX2RldmljZV9kZXRlY3Rfb3V0X3cgPSB1c2JfaXJxX21hc2tfZGV2aWNlX2RldGVjdF9xOworCisKKy8vIHVzYl9pcnFfbWFza19lcnIgW2ludGVybmFsXQorcmVnICAgICAgICB1c2JfaXJxX21hc2tfZXJyX3E7CisKK2Fsd2F5cyBAIChwb3NlZGdlIGNsa19pIG9yIG5lZ2VkZ2UgcnN0bl9pKQoraWYgKCFyc3RuX2kpCisgICAgdXNiX2lycV9tYXNrX2Vycl9xIDw9IDEnZGBVU0JfSVJRX01BU0tfRVJSX0RFRkFVTFQ7CitlbHNlIGlmIChjZmdfd3IgJiYgKHJlZ19hZGRyWzU6MF0gPT0gYFVTQl9JUlFfTUFTSykpCisgICAgdXNiX2lycV9tYXNrX2Vycl9xIDw9IHJlZ193ZGF0YVtgVVNCX0lSUV9NQVNLX0VSUl9SXTsKKword2lyZSAgICAgICAgdXNiX2lycV9tYXNrX2Vycl9vdXRfdyA9IHVzYl9pcnFfbWFza19lcnJfcTsKKworCisvLyB1c2JfaXJxX21hc2tfZG9uZSBbaW50ZXJuYWxdCityZWcgICAgICAgIHVzYl9pcnFfbWFza19kb25lX3E7CisKK2Fsd2F5cyBAIChwb3NlZGdlIGNsa19pIG9yIG5lZ2VkZ2UgcnN0bl9pKQoraWYgKCFyc3RuX2kpCisgICAgdXNiX2lycV9tYXNrX2RvbmVfcSA8PSAxJ2RgVVNCX0lSUV9NQVNLX0RPTkVfREVGQVVMVDsKK2Vsc2UgaWYgKGNmZ193ciAmJiAocmVnX2FkZHJbNTowXSA9PSBgVVNCX0lSUV9NQVNLKSkKKyAgICB1c2JfaXJxX21hc2tfZG9uZV9xIDw9IHJlZ193ZGF0YVtgVVNCX0lSUV9NQVNLX0RPTkVfUl07CisKK3dpcmUgICAgICAgIHVzYl9pcnFfbWFza19kb25lX291dF93ID0gdXNiX2lycV9tYXNrX2RvbmVfcTsKKworCisvLyB1c2JfaXJxX21hc2tfc29mIFtpbnRlcm5hbF0KK3JlZyAgICAgICAgdXNiX2lycV9tYXNrX3NvZl9xOworCithbHdheXMgQCAocG9zZWRnZSBjbGtfaSBvciBuZWdlZGdlIHJzdG5faSkKK2lmICghcnN0bl9pKQorICAgIHVzYl9pcnFfbWFza19zb2ZfcSA8PSAxJ2RgVVNCX0lSUV9NQVNLX1NPRl9ERUZBVUxUOworZWxzZSBpZiAoY2ZnX3dyICYmIChyZWdfYWRkcls1OjBdID09IGBVU0JfSVJRX01BU0spKQorICAgIHVzYl9pcnFfbWFza19zb2ZfcSA8PSByZWdfd2RhdGFbYFVTQl9JUlFfTUFTS19TT0ZfUl07CisKK3dpcmUgICAgICAgIHVzYl9pcnFfbWFza19zb2Zfb3V0X3cgPSB1c2JfaXJxX21hc2tfc29mX3E7CisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUmVnaXN0ZXIgdXNiX3hmZXJfZGF0YQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcmVnIHVzYl94ZmVyX2RhdGFfd3JfcTsKKworYWx3YXlzIEAgKHBvc2VkZ2UgY2xrX2kgb3IgbmVnZWRnZSByc3RuX2kpCitpZiAoIXJzdG5faSkKKyAgICB1c2JfeGZlcl9kYXRhX3dyX3EgPD0gMSdiMDsKK2Vsc2UgaWYgKGNmZ193ciAmJiAocmVnX2FkZHJbNTowXSA9PSBgVVNCX1hGRVJfREFUQSkpCisgICAgdXNiX3hmZXJfZGF0YV93cl9xIDw9IDEnYjE7CitlbHNlCisgICAgdXNiX3hmZXJfZGF0YV93cl9xIDw9IDEnYjA7CisKKy8vIHVzYl94ZmVyX2RhdGFfdHhfbGVuIFtpbnRlcm5hbF0KK3JlZyBbMTU6MF0gIHVzYl94ZmVyX2RhdGFfdHhfbGVuX3E7CisKK2Fsd2F5cyBAIChwb3NlZGdlIGNsa19pIG9yIG5lZ2VkZ2UgcnN0bl9pKQoraWYgKCFyc3RuX2kpCisgICAgdXNiX3hmZXJfZGF0YV90eF9sZW5fcSA8PSAxNidkYFVTQl9YRkVSX0RBVEFfVFhfTEVOX0RFRkFVTFQ7CitlbHNlIGlmIChjZmdfd3IgJiYgKHJlZ19hZGRyWzU6MF0gPT0gYFVTQl9YRkVSX0RBVEEpKQorICAgIHVzYl94ZmVyX2RhdGFfdHhfbGVuX3EgPD0gcmVnX3dkYXRhW2BVU0JfWEZFUl9EQVRBX1RYX0xFTl9SXTsKKword2lyZSBbMTU6MF0gIHVzYl94ZmVyX2RhdGFfdHhfbGVuX291dF93ID0gdXNiX3hmZXJfZGF0YV90eF9sZW5fcTsKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSZWdpc3RlciB1c2JfeGZlcl90b2tlbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcmVnIHVzYl94ZmVyX3Rva2VuX3dyX3E7CisKK2Fsd2F5cyBAIChwb3NlZGdlIGNsa19pIG9yIG5lZ2VkZ2UgcnN0bl9pKQoraWYgKCFyc3RuX2kpCisgICAgdXNiX3hmZXJfdG9rZW5fd3JfcSA8PSAxJ2IwOworZWxzZSBpZiAoY2ZnX3dyICYmIChyZWdfYWRkcls1OjBdID09IGBVU0JfWEZFUl9UT0tFTikpCisgICAgdXNiX3hmZXJfdG9rZW5fd3JfcSA8PSAxJ2IxOworZWxzZQorICAgIHVzYl94ZmVyX3Rva2VuX3dyX3EgPD0gMSdiMDsKKworLy8gdXNiX3hmZXJfdG9rZW5fc3RhcnQgW2NsZWFyYWJsZV0KK3JlZyAgICAgICAgdXNiX3hmZXJfdG9rZW5fc3RhcnRfcTsKKword2lyZSB1c2JfeGZlcl90b2tlbl9zdGFydF9hY2tfaW5fdzsKKworYWx3YXlzIEAgKHBvc2VkZ2UgY2xrX2kgb3IgbmVnZWRnZSByc3RuX2kpCitpZiAoIXJzdG5faSkKKyAgICB1c2JfeGZlcl90b2tlbl9zdGFydF9xIDw9IDEnYjA7CitlbHNlIGlmIChjZmdfd3IgJiYgKHJlZ19hZGRyWzU6MF0gPT0gYFVTQl9YRkVSX1RPS0VOKSkKKyAgICB1c2JfeGZlcl90b2tlbl9zdGFydF9xIDw9IHJlZ193ZGF0YVtgVVNCX1hGRVJfVE9LRU5fU1RBUlRfUl07CitlbHNlIGlmICh1c2JfeGZlcl90b2tlbl9zdGFydF9hY2tfaW5fdykKKyAgICB1c2JfeGZlcl90b2tlbl9zdGFydF9xIDw9IDEnYjA7CisKK3dpcmUgICAgICAgIHVzYl94ZmVyX3Rva2VuX3N0YXJ0X291dF93ID0gdXNiX3hmZXJfdG9rZW5fc3RhcnRfcTsKKworCisvLyB1c2JfeGZlcl90b2tlbl9pbiBbaW50ZXJuYWxdCityZWcgICAgICAgIHVzYl94ZmVyX3Rva2VuX2luX3E7CisKK2Fsd2F5cyBAIChwb3NlZGdlIGNsa19pIG9yIG5lZ2VkZ2UgcnN0bl9pKQoraWYgKCFyc3RuX2kpCisgICAgdXNiX3hmZXJfdG9rZW5faW5fcSA8PSAxJ2RgVVNCX1hGRVJfVE9LRU5fSU5fREVGQVVMVDsKK2Vsc2UgaWYgKGNmZ193ciAmJiAocmVnX2FkZHJbNTowXSA9PSBgVVNCX1hGRVJfVE9LRU4pKQorICAgIHVzYl94ZmVyX3Rva2VuX2luX3EgPD0gcmVnX3dkYXRhW2BVU0JfWEZFUl9UT0tFTl9JTl9SXTsKKword2lyZSAgICAgICAgdXNiX3hmZXJfdG9rZW5faW5fb3V0X3cgPSB1c2JfeGZlcl90b2tlbl9pbl9xOworCisKKy8vIHVzYl94ZmVyX3Rva2VuX2FjayBbaW50ZXJuYWxdCityZWcgICAgICAgIHVzYl94ZmVyX3Rva2VuX2Fja19xOworCithbHdheXMgQCAocG9zZWRnZSBjbGtfaSBvciBuZWdlZGdlIHJzdG5faSkKK2lmICghcnN0bl9pKQorICAgIHVzYl94ZmVyX3Rva2VuX2Fja19xIDw9IDEnZGBVU0JfWEZFUl9UT0tFTl9BQ0tfREVGQVVMVDsKK2Vsc2UgaWYgKGNmZ193ciAmJiAocmVnX2FkZHJbNTowXSA9PSBgVVNCX1hGRVJfVE9LRU4pKQorICAgIHVzYl94ZmVyX3Rva2VuX2Fja19xIDw9IHJlZ193ZGF0YVtgVVNCX1hGRVJfVE9LRU5fQUNLX1JdOworCit3aXJlICAgICAgICB1c2JfeGZlcl90b2tlbl9hY2tfb3V0X3cgPSB1c2JfeGZlcl90b2tlbl9hY2tfcTsKKworCisvLyB1c2JfeGZlcl90b2tlbl9waWRfZGF0YXggW2ludGVybmFsXQorcmVnICAgICAgICB1c2JfeGZlcl90b2tlbl9waWRfZGF0YXhfcTsKKworYWx3YXlzIEAgKHBvc2VkZ2UgY2xrX2kgb3IgbmVnZWRnZSByc3RuX2kpCitpZiAoIXJzdG5faSkKKyAgICB1c2JfeGZlcl90b2tlbl9waWRfZGF0YXhfcSA8PSAxJ2RgVVNCX1hGRVJfVE9LRU5fUElEX0RBVEFYX0RFRkFVTFQ7CitlbHNlIGlmIChjZmdfd3IgJiYgKHJlZ19hZGRyWzU6MF0gPT0gYFVTQl9YRkVSX1RPS0VOKSkKKyAgICB1c2JfeGZlcl90b2tlbl9waWRfZGF0YXhfcSA8PSByZWdfd2RhdGFbYFVTQl9YRkVSX1RPS0VOX1BJRF9EQVRBWF9SXTsKKword2lyZSAgICAgICAgdXNiX3hmZXJfdG9rZW5fcGlkX2RhdGF4X291dF93ID0gdXNiX3hmZXJfdG9rZW5fcGlkX2RhdGF4X3E7CisKKworLy8gdXNiX3hmZXJfdG9rZW5fcGlkX2JpdHMgW2ludGVybmFsXQorcmVnIFs3OjBdICB1c2JfeGZlcl90b2tlbl9waWRfYml0c19xOworCithbHdheXMgQCAocG9zZWRnZSBjbGtfaSBvciBuZWdlZGdlIHJzdG5faSkKK2lmICghcnN0bl9pKQorICAgIHVzYl94ZmVyX3Rva2VuX3BpZF9iaXRzX3EgPD0gOCdkYFVTQl9YRkVSX1RPS0VOX1BJRF9CSVRTX0RFRkFVTFQ7CitlbHNlIGlmIChjZmdfd3IgJiYgKHJlZ19hZGRyWzU6MF0gPT0gYFVTQl9YRkVSX1RPS0VOKSkKKyAgICB1c2JfeGZlcl90b2tlbl9waWRfYml0c19xIDw9IHJlZ193ZGF0YVtgVVNCX1hGRVJfVE9LRU5fUElEX0JJVFNfUl07CisKK3dpcmUgWzc6MF0gIHVzYl94ZmVyX3Rva2VuX3BpZF9iaXRzX291dF93ID0gdXNiX3hmZXJfdG9rZW5fcGlkX2JpdHNfcTsKKworCisvLyB1c2JfeGZlcl90b2tlbl9kZXZfYWRkciBbaW50ZXJuYWxdCityZWcgWzY6MF0gIHVzYl94ZmVyX3Rva2VuX2Rldl9hZGRyX3E7CisKK2Fsd2F5cyBAIChwb3NlZGdlIGNsa19pIG9yIG5lZ2VkZ2UgcnN0bl9pKQoraWYgKCFyc3RuX2kpCisgICAgdXNiX3hmZXJfdG9rZW5fZGV2X2FkZHJfcSA8PSA3J2RgVVNCX1hGRVJfVE9LRU5fREVWX0FERFJfREVGQVVMVDsKK2Vsc2UgaWYgKGNmZ193ciAmJiAocmVnX2FkZHJbNTowXSA9PSBgVVNCX1hGRVJfVE9LRU4pKQorICAgIHVzYl94ZmVyX3Rva2VuX2Rldl9hZGRyX3EgPD0gcmVnX3dkYXRhW2BVU0JfWEZFUl9UT0tFTl9ERVZfQUREUl9SXTsKKword2lyZSBbNjowXSAgdXNiX3hmZXJfdG9rZW5fZGV2X2FkZHJfb3V0X3cgPSB1c2JfeGZlcl90b2tlbl9kZXZfYWRkcl9xOworCisKKy8vIHVzYl94ZmVyX3Rva2VuX2VwX2FkZHIgW2ludGVybmFsXQorcmVnIFszOjBdICB1c2JfeGZlcl90b2tlbl9lcF9hZGRyX3E7CisKK2Fsd2F5cyBAIChwb3NlZGdlIGNsa19pIG9yIG5lZ2VkZ2UgcnN0bl9pKQoraWYgKCFyc3RuX2kpCisgICAgdXNiX3hmZXJfdG9rZW5fZXBfYWRkcl9xIDw9IDQnZGBVU0JfWEZFUl9UT0tFTl9FUF9BRERSX0RFRkFVTFQ7CitlbHNlIGlmIChjZmdfd3IgJiYgKHJlZ19hZGRyWzU6MF0gPT0gYFVTQl9YRkVSX1RPS0VOKSkKKyAgICB1c2JfeGZlcl90b2tlbl9lcF9hZGRyX3EgPD0gcmVnX3dkYXRhW2BVU0JfWEZFUl9UT0tFTl9FUF9BRERSX1JdOworCit3aXJlIFszOjBdICB1c2JfeGZlcl90b2tlbl9lcF9hZGRyX291dF93ID0gdXNiX3hmZXJfdG9rZW5fZXBfYWRkcl9xOworCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJlZ2lzdGVyIHVzYl9yeF9zdGF0CisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCityZWcgdXNiX3J4X3N0YXRfd3JfcTsKKworYWx3YXlzIEAgKHBvc2VkZ2UgY2xrX2kgb3IgbmVnZWRnZSByc3RuX2kpCitpZiAoIXJzdG5faSkKKyAgICB1c2Jfcnhfc3RhdF93cl9xIDw9IDEnYjA7CitlbHNlIGlmIChjZmdfd3IgJiYgKHJlZ19hZGRyWzU6MF0gPT0gYFVTQl9SWF9TVEFUKSkKKyAgICB1c2Jfcnhfc3RhdF93cl9xIDw9IDEnYjE7CitlbHNlCisgICAgdXNiX3J4X3N0YXRfd3JfcSA8PSAxJ2IwOworCisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUmV0aW1lIHdyaXRlIGRhdGEKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3JlZyBbMzE6MF0gd3JfZGF0YV9xOworCithbHdheXMgQCAocG9zZWRnZSBjbGtfaSBvciBuZWdlZGdlIHJzdG5faSkKK2lmICghcnN0bl9pKQorICAgIHdyX2RhdGFfcSA8PSAzMidiMDsKK2Vsc2UgaWYgKGNmZ193cikKKyAgICB3cl9kYXRhX3EgPD0gcmVnX3dkYXRhOworCisKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSZWdpc3RlciB1c2Jfd3JfZGF0YQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcmVnIHVzYl93cl9kYXRhX3dyX3E7CisKK2Fsd2F5cyBAIChwb3NlZGdlIGNsa19pIG9yIG5lZ2VkZ2UgcnN0bl9pKQoraWYgKCFyc3RuX2kpCisgICAgdXNiX3dyX2RhdGFfd3JfcSA8PSAxJ2IwOworZWxzZSBpZiAoY2ZnX3dyICYmIChyZWdfYWRkcls1OjBdID09IGBVU0JfV1JfREFUQSkpCisgICAgdXNiX3dyX2RhdGFfd3JfcSA8PSAxJ2IxOworZWxzZQorICAgIHVzYl93cl9kYXRhX3dyX3EgPD0gMSdiMDsKKworLy8gdXNiX3dyX2RhdGFfZGF0YSBbZXh0ZXJuYWxdCit3aXJlIFs3OjBdICB1c2Jfd3JfZGF0YV9kYXRhX291dF93ID0gd3JfZGF0YV9xW2BVU0JfV1JfREFUQV9EQVRBX1JdOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSZWFkIG11eAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithbHdheXMgQCAqCitiZWdpbgorICAgIHJlZ19yZGF0YV9yID0gMzInYjA7CisKKyAgICBjYXNlIChyZWdfYWRkcls1OjBdKQorCisgICAgYFVTQl9DVFJMOgorICAgIGJlZ2luCisgICAgICAgIHJlZ19yZGF0YV9yW2BVU0JfQ1RSTF9QSFlfRE1QVUxMRE9XTl9SXSA9IHVzYl9jdHJsX3BoeV9kbXB1bGxkb3duX3E7CisgICAgICAgIHJlZ19yZGF0YV9yW2BVU0JfQ1RSTF9QSFlfRFBQVUxMRE9XTl9SXSA9IHVzYl9jdHJsX3BoeV9kcHB1bGxkb3duX3E7CisgICAgICAgIHJlZ19yZGF0YV9yW2BVU0JfQ1RSTF9QSFlfVEVSTVNFTEVDVF9SXSA9IHVzYl9jdHJsX3BoeV90ZXJtc2VsZWN0X3E7CisgICAgICAgIHJlZ19yZGF0YV9yW2BVU0JfQ1RSTF9QSFlfWENWUlNFTEVDVF9SXSA9IHVzYl9jdHJsX3BoeV94Y3Zyc2VsZWN0X3E7CisgICAgICAgIHJlZ19yZGF0YV9yW2BVU0JfQ1RSTF9QSFlfT1BNT0RFX1JdID0gdXNiX2N0cmxfcGh5X29wbW9kZV9xOworICAgICAgICByZWdfcmRhdGFfcltgVVNCX0NUUkxfRU5BQkxFX1NPRl9SXSA9IHVzYl9jdHJsX2VuYWJsZV9zb2ZfcTsKKyAgICBlbmQKKyAgICBgVVNCX1NUQVRVUzoKKyAgICBiZWdpbgorICAgICAgICByZWdfcmRhdGFfcltgVVNCX1NUQVRVU19TT0ZfVElNRV9SXSA9IHVzYl9zdGF0dXNfc29mX3RpbWVfaW5fdzsKKyAgICAgICAgcmVnX3JkYXRhX3JbYFVTQl9TVEFUVVNfUlhfRVJST1JfUl0gPSB1c2Jfc3RhdHVzX3J4X2Vycm9yX2luX3c7CisgICAgICAgIHJlZ19yZGF0YV9yW2BVU0JfU1RBVFVTX0xJTkVTVEFURV9CSVRTX1JdID0gdXNiX3N0YXR1c19saW5lc3RhdGVfYml0c19pbl93OworICAgIGVuZAorICAgIGBVU0JfSVJRX1NUUzoKKyAgICBiZWdpbgorICAgICAgICByZWdfcmRhdGFfcltgVVNCX0lSUV9TVFNfREVWSUNFX0RFVEVDVF9SXSA9IHVzYl9pcnFfc3RzX2RldmljZV9kZXRlY3RfaW5fdzsKKyAgICAgICAgcmVnX3JkYXRhX3JbYFVTQl9JUlFfU1RTX0VSUl9SXSA9IHVzYl9pcnFfc3RzX2Vycl9pbl93OworICAgICAgICByZWdfcmRhdGFfcltgVVNCX0lSUV9TVFNfRE9ORV9SXSA9IHVzYl9pcnFfc3RzX2RvbmVfaW5fdzsKKyAgICAgICAgcmVnX3JkYXRhX3JbYFVTQl9JUlFfU1RTX1NPRl9SXSA9IHVzYl9pcnFfc3RzX3NvZl9pbl93OworICAgIGVuZAorICAgIGBVU0JfSVJRX01BU0s6CisgICAgYmVnaW4KKyAgICAgICAgcmVnX3JkYXRhX3JbYFVTQl9JUlFfTUFTS19ERVZJQ0VfREVURUNUX1JdID0gdXNiX2lycV9tYXNrX2RldmljZV9kZXRlY3RfcTsKKyAgICAgICAgcmVnX3JkYXRhX3JbYFVTQl9JUlFfTUFTS19FUlJfUl0gPSB1c2JfaXJxX21hc2tfZXJyX3E7CisgICAgICAgIHJlZ19yZGF0YV9yW2BVU0JfSVJRX01BU0tfRE9ORV9SXSA9IHVzYl9pcnFfbWFza19kb25lX3E7CisgICAgICAgIHJlZ19yZGF0YV9yW2BVU0JfSVJRX01BU0tfU09GX1JdID0gdXNiX2lycV9tYXNrX3NvZl9xOworICAgIGVuZAorICAgIGBVU0JfWEZFUl9EQVRBOgorICAgIGJlZ2luCisgICAgICAgIHJlZ19yZGF0YV9yW2BVU0JfWEZFUl9EQVRBX1RYX0xFTl9SXSA9IHVzYl94ZmVyX2RhdGFfdHhfbGVuX3E7CisgICAgZW5kCisgICAgYFVTQl9YRkVSX1RPS0VOOgorICAgIGJlZ2luCisgICAgICAgIHJlZ19yZGF0YV9yW2BVU0JfWEZFUl9UT0tFTl9JTl9SXSA9IHVzYl94ZmVyX3Rva2VuX2luX3E7CisgICAgICAgIHJlZ19yZGF0YV9yW2BVU0JfWEZFUl9UT0tFTl9BQ0tfUl0gPSB1c2JfeGZlcl90b2tlbl9hY2tfcTsKKyAgICAgICAgcmVnX3JkYXRhX3JbYFVTQl9YRkVSX1RPS0VOX1BJRF9EQVRBWF9SXSA9IHVzYl94ZmVyX3Rva2VuX3BpZF9kYXRheF9xOworICAgICAgICByZWdfcmRhdGFfcltgVVNCX1hGRVJfVE9LRU5fUElEX0JJVFNfUl0gPSB1c2JfeGZlcl90b2tlbl9waWRfYml0c19xOworICAgICAgICByZWdfcmRhdGFfcltgVVNCX1hGRVJfVE9LRU5fREVWX0FERFJfUl0gPSB1c2JfeGZlcl90b2tlbl9kZXZfYWRkcl9xOworICAgICAgICByZWdfcmRhdGFfcltgVVNCX1hGRVJfVE9LRU5fRVBfQUREUl9SXSA9IHVzYl94ZmVyX3Rva2VuX2VwX2FkZHJfcTsKKyAgICBlbmQKKyAgICBgVVNCX1JYX1NUQVQ6CisgICAgYmVnaW4KKyAgICAgICAgcmVnX3JkYXRhX3JbYFVTQl9SWF9TVEFUX1NUQVJUX1BFTkRfUl0gPSB1c2Jfcnhfc3RhdF9zdGFydF9wZW5kX2luX3c7CisgICAgICAgIHJlZ19yZGF0YV9yW2BVU0JfUlhfU1RBVF9DUkNfRVJSX1JdID0gdXNiX3J4X3N0YXRfY3JjX2Vycl9pbl93OworICAgICAgICByZWdfcmRhdGFfcltgVVNCX1JYX1NUQVRfUkVTUF9USU1FT1VUX1JdID0gdXNiX3J4X3N0YXRfcmVzcF90aW1lb3V0X2luX3c7CisgICAgICAgIHJlZ19yZGF0YV9yW2BVU0JfUlhfU1RBVF9JRExFX1JdID0gdXNiX3J4X3N0YXRfaWRsZV9pbl93OworICAgICAgICByZWdfcmRhdGFfcltgVVNCX1JYX1NUQVRfUkVTUF9CSVRTX1JdID0gdXNiX3J4X3N0YXRfcmVzcF9iaXRzX2luX3c7CisgICAgICAgIHJlZ19yZGF0YV9yW2BVU0JfUlhfU1RBVF9DT1VOVF9CSVRTX1JdID0gdXNiX3J4X3N0YXRfY291bnRfYml0c19pbl93OworICAgIGVuZAorICAgIGBVU0JfUkRfREFUQToKKyAgICBiZWdpbgorICAgICAgICByZWdfcmRhdGFfcltgVVNCX1JEX0RBVEFfREFUQV9SXSA9IHVzYl9yZF9kYXRhX2RhdGFfaW5fdzsKKyAgICBlbmQKKyAgICBkZWZhdWx0IDoKKyAgICAgICAgcmVnX3JkYXRhX3IgPSAzMidiMDsKKyAgICBlbmRjYXNlCitlbmQKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUmVnaXN0ZXIgdXNiX3JkX2RhdGEKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3JlZyB1c2JfcmRfZGF0YV93cl9xOworCithbHdheXMgQCAocG9zZWRnZSBjbGtfaSBvciBuZWdlZGdlIHJzdG5faSkKK2lmICghcnN0bl9pKQorICAgIHVzYl9yZF9kYXRhX3dyX3EgPD0gMSdiMDsKK2Vsc2UgaWYgKGNmZ193ciAmJiAocmVnX2FkZHJbNTowXSA9PSBgVVNCX1JEX0RBVEEpKQorICAgIHVzYl9yZF9kYXRhX3dyX3EgPD0gMSdiMTsKK2Vsc2UKKyAgICB1c2JfcmRfZGF0YV93cl9xIDw9IDEnYjA7CisKKworCit3aXJlIHVzYl9yZF9kYXRhX3JkX3JlcV93ID0gcmVnX2NzICYgKHJlZ193cj09MCkgJiAoIXJlZ19hY2spICYgKHJlZ19hZGRyWzU6MF0gPT0gYFVTQl9SRF9EQVRBKTsKKword2lyZSB1c2Jfd3JfZGF0YV93cl9yZXFfdyA9IHVzYl93cl9kYXRhX3dyX3E7Cit3aXJlIHVzYl9yZF9kYXRhX3dyX3JlcV93ID0gdXNiX3JkX2RhdGFfd3JfcTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUmVnaXN0ZXJzIC8gV2lyZXMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFNPRgorcmVnIFsxMDowXSAgc29mX3ZhbHVlX3E7CityZWcgWzE1OjBdICBzb2ZfdGltZV9xOworcmVnICAgICAgICAgc29mX2lycV9xOworCityZWcgICAgICAgICB0cmFuc2Zlcl9yZXFfYWNrX3E7CisKK3dpcmUgWzc6MF0gIGZpZm9fdHhfZGF0YV93Oword2lyZSAgICAgICAgZmlmb190eF9wb3BfdzsKKword2lyZSBbNzowXSAgZmlmb19yeF9kYXRhX3c7Cit3aXJlICAgICAgICBmaWZvX3J4X3B1c2hfdzsKKworcmVnICAgICAgICAgZmlmb19mbHVzaF9xOworCit3aXJlIFs3OjBdICB0b2tlbl9waWRfdzsKK3dpcmUgWzY6MF0gIHRva2VuX2Rldl93Oword2lyZSBbMzowXSAgdG9rZW5fZXBfdzsKKworcmVnICAgICAgICAgdHJhbnNmZXJfc3RhcnRfcTsKK3JlZyAgICAgICAgIGluX3RyYW5zZmVyX3E7CityZWcgICAgICAgICBzb2ZfdHJhbnNmZXJfcTsKK3JlZyAgICAgICAgIHJlc3BfZXhwZWN0ZWRfcTsKK3dpcmUgICAgICAgIHRyYW5zZmVyX2Fja193OworCit3aXJlICAgICAgICBzdGF0dXNfY3JjX2Vycl93Oword2lyZSAgICAgICAgc3RhdHVzX3RpbWVvdXRfdzsKK3dpcmUgWzc6MF0gIHN0YXR1c19yZXNwb25zZV93Oword2lyZSBbMTU6MF0gc3RhdHVzX3J4X2NvdW50X3c7Cit3aXJlICAgICAgICBzdGF0dXNfc2llX2lkbGVfdzsKK3dpcmUgICAgICAgIHN0YXR1c190eF9kb25lX3c7Cit3aXJlICAgICAgICBzdGF0dXNfcnhfZG9uZV93OworCit3aXJlICAgICAgICBzZW5kX3NvZl93Oword2lyZSAgICAgICAgc29mX2dhdXJkX2JhbmRfdzsKK3dpcmUgICAgICAgIGNsZWFyX3RvX3NlbmRfdzsKKworcmVnICAgICAgICAgdXNiX2Vycl9xOworCityZWcgICAgICAgICBpbnRyX2RvbmVfcTsKK3JlZyAgICAgICAgIGludHJfc29mX3E7CityZWcgICAgICAgICBpbnRyX2Vycl9xOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBEZWZpbml0aW9ucworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbG9jYWxwYXJhbSBTT0ZfWkVSTyAgICAgICAgPSAwOworbG9jYWxwYXJhbSBTT0ZfSU5DICAgICAgICAgPSAxOworbG9jYWxwYXJhbSBTT0ZfVEhSRVNIT0xEICAgPSAoVVNCX0NMS19GUkVRLzEwMDApLTE7CisKK2xvY2FscGFyYW0gQ0xLU19QRVJfQklUICAgID0gKFVTQl9DTEtfRlJFUSAvIDEyMDAwMDAwKTsgLy8gaW5wdXQgY2xrcyBwZXIgRlMgYml0IHRpbWUKKworbG9jYWxwYXJhbSBFT0YxX1RIUkVTSE9MRCAgPSAoNTAgKiBDTEtTX1BFUl9CSVQpOyAvLyBFT0YxICsgc29tZSBtYXJnaW4KK2xvY2FscGFyYW0gTUFYX1hGRVJfU0laRSAgID0gNjQ7Citsb2NhbHBhcmFtIE1BWF9YRkVSX1BFUklPRCA9ICgoTUFYX1hGRVJfU0laRSArIDYpICogMTAgICogQ0xLU19QRVJfQklUKTsgLy8gTWF4IHBhY2tldCB0cmFuc2ZlciB0aW1lICgrIG1hcmdpbikKK2xvY2FscGFyYW0gU09GX0dBVVJEX0xPVyAgID0gKDIwICogQ0xLU19QRVJfQklUKTsKK2xvY2FscGFyYW0gU09GX0dBVVJEX0hJR0ggID0gU09GX1RIUkVTSE9MRCAtIEVPRjFfVEhSRVNIT0xEIC0gTUFYX1hGRVJfUEVSSU9EOworCitsb2NhbHBhcmFtIFBJRF9TT0YgICAgICA9IDgnaEE1OworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBTSUUKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3VzYmhfc2llCisjKCAuVVNCX0NMS19GUkVRKFVTQl9DTEtfRlJFUSkgKQordV9zaWUKKygKKyAgICAvLyBDbG9jayAmIHJlc2V0CisgICAgLmNsa19pKGNsa19pKSwKKyAgICAucnN0bl9pKHJzdG5faSksCisKKyAgICAvLyBDb250cm9sCisgICAgLnN0YXJ0X2kodHJhbnNmZXJfc3RhcnRfcSksCisgICAgLmluX3RyYW5zZmVyX2koaW5fdHJhbnNmZXJfcSksCisgICAgLnNvZl90cmFuc2Zlcl9pKHNvZl90cmFuc2Zlcl9xKSwKKyAgICAucmVzcF9leHBlY3RlZF9pKHJlc3BfZXhwZWN0ZWRfcSksICAgIAorICAgIC5hY2tfbyh0cmFuc2Zlcl9hY2tfdyksCisKKyAgICAvLyBUb2tlbiBwYWNrZXQgICAgCisgICAgLnRva2VuX3BpZF9pKHRva2VuX3BpZF93KSwKKyAgICAudG9rZW5fZGV2X2kodG9rZW5fZGV2X3cpLAorICAgIC50b2tlbl9lcF9pKHRva2VuX2VwX3cpLAorCisgICAgLy8gRGF0YSBwYWNrZXQKKyAgICAuZGF0YV9sZW5faSh1c2JfeGZlcl9kYXRhX3R4X2xlbl9vdXRfdyksCisgICAgLmRhdGFfaWR4X2kodXNiX3hmZXJfdG9rZW5fcGlkX2RhdGF4X291dF93KSwKKworICAgIC8vIFR4IERhdGEgRklGTworICAgIC50eF9kYXRhX2koZmlmb190eF9kYXRhX3cpLAorICAgIC50eF9wb3BfbyhmaWZvX3R4X3BvcF93KSwKKworICAgIC8vIFJ4IERhdGEgRklGTworICAgIC5yeF9kYXRhX28oZmlmb19yeF9kYXRhX3cpLAorICAgIC5yeF9wdXNoX28oZmlmb19yeF9wdXNoX3cpLAorCisgICAgLy8gU3RhdHVzCisgICAgLnJ4X2RvbmVfbyhzdGF0dXNfcnhfZG9uZV93KSwKKyAgICAudHhfZG9uZV9vKHN0YXR1c190eF9kb25lX3cpLAorICAgIC5jcmNfZXJyX28oc3RhdHVzX2NyY19lcnJfdyksCisgICAgLnRpbWVvdXRfbyhzdGF0dXNfdGltZW91dF93KSwKKyAgICAucmVzcG9uc2VfbyhzdGF0dXNfcmVzcG9uc2VfdyksCisgICAgLnJ4X2NvdW50X28oc3RhdHVzX3J4X2NvdW50X3cpLAorICAgIC5pZGxlX28oc3RhdHVzX3NpZV9pZGxlX3cpLAorCisgICAgLy8gVVRNSSBJbnRlcmZhY2UKKyAgICAudXRtaV9kYXRhX28odXRtaV9kYXRhX291dF9vKSwKKyAgICAudXRtaV90eHZhbGlkX28odXRtaV90eHZhbGlkX28pLAorICAgIC51dG1pX3R4cmVhZHlfaSh1dG1pX3R4cmVhZHlfaSksCisgICAgLnV0bWlfZGF0YV9pKHV0bWlfZGF0YV9pbl9pKSwKKyAgICAudXRtaV9yeHZhbGlkX2kodXRtaV9yeHZhbGlkX2kpLAorICAgIC51dG1pX3J4YWN0aXZlX2kodXRtaV9yeGFjdGl2ZV9pKSwKKyAgICAudXRtaV9saW5lc3RhdGVfaSh1dG1pX2xpbmVzdGF0ZV9pKQorKTsgICAgCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFBlcmlwaGVyYWwgSW50ZXJmYWNlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCithc3NpZ24gdXNiX3N0YXR1c19zb2ZfdGltZV9pbl93ICAgICAgID0gc29mX3RpbWVfcTsKK2Fzc2lnbiB1c2Jfc3RhdHVzX3J4X2Vycm9yX2luX3cgICAgICAgPSB1c2JfZXJyX3E7Cithc3NpZ24gdXNiX3N0YXR1c19saW5lc3RhdGVfYml0c19pbl93ID0gdXRtaV9saW5lc3RhdGVfaTsKKworYXNzaWduIHVzYl9pcnFfc3RzX2Vycl9pbl93ICAgICAgICAgICA9IGludHJfZXJyX3E7Cithc3NpZ24gdXNiX2lycV9zdHNfZG9uZV9pbl93ICAgICAgICAgID0gaW50cl9kb25lX3E7Cithc3NpZ24gdXNiX2lycV9zdHNfc29mX2luX3cgICAgICAgICAgID0gaW50cl9zb2ZfcTsKKworYXNzaWduIHVzYl9yeF9zdGF0X3N0YXJ0X3BlbmRfaW5fdyAgICA9IHVzYl94ZmVyX3Rva2VuX3N0YXJ0X291dF93OworYXNzaWduIHVzYl9yeF9zdGF0X2NyY19lcnJfaW5fdyAgICAgICA9IHN0YXR1c19jcmNfZXJyX3c7Cithc3NpZ24gdXNiX3J4X3N0YXRfcmVzcF90aW1lb3V0X2luX3cgID0gc3RhdHVzX3RpbWVvdXRfdzsKK2Fzc2lnbiB1c2Jfcnhfc3RhdF9pZGxlX2luX3cgICAgICAgICAgPSBzdGF0dXNfc2llX2lkbGVfdzsKK2Fzc2lnbiB1c2Jfcnhfc3RhdF9yZXNwX2JpdHNfaW5fdyAgICAgPSBzdGF0dXNfcmVzcG9uc2VfdzsKK2Fzc2lnbiB1c2Jfcnhfc3RhdF9jb3VudF9iaXRzX2luX3cgICAgPSBzdGF0dXNfcnhfY291bnRfdzsKKworYXNzaWduIHVzYl94ZmVyX3Rva2VuX3N0YXJ0X2Fja19pbl93ICA9IHRyYW5zZmVyX3JlcV9hY2tfcTsKKworYXNzaWduIHV0bWlfb3BfbW9kZV9vICAgICAgICAgICAgICAgICA9IHVzYl9jdHJsX3BoeV9vcG1vZGVfb3V0X3c7Cithc3NpZ24gdXRtaV94Y3Zyc2VsZWN0X28gICAgICAgICAgICAgID0gdXNiX2N0cmxfcGh5X3hjdnJzZWxlY3Rfb3V0X3c7Cithc3NpZ24gdXRtaV90ZXJtc2VsZWN0X28gICAgICAgICAgICAgID0gdXNiX2N0cmxfcGh5X3Rlcm1zZWxlY3Rfb3V0X3c7Cithc3NpZ24gdXRtaV9kcHB1bGxkb3duX28gICAgICAgICAgICAgID0gdXNiX2N0cmxfcGh5X2RwcHVsbGRvd25fb3V0X3c7Cithc3NpZ24gdXRtaV9kbXB1bGxkb3duX28gICAgICAgICAgICAgID0gdXNiX2N0cmxfcGh5X2RtcHVsbGRvd25fb3V0X3c7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFR4IEZJRk8gKEhvc3QgLT4gRGV2aWNlKQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordXNiaF9maWZvCit1X2ZpZm9fdHgKKygKKyAgICAuY2xrX2koY2xrX2kpLAorICAgIC5yc3RuX2kocnN0bl9pKSwKKworICAgIC5kYXRhX2kodXNiX3dyX2RhdGFfZGF0YV9vdXRfdyksCisgICAgLnB1c2hfaSh1c2Jfd3JfZGF0YV93cl9yZXFfdyksCisKKyAgICAuZmx1c2hfaSh1c2JfY3RybF90eF9mbHVzaF9vdXRfdyksCisKKyAgICAuZnVsbF9vKCksCisgICAgLmVtcHR5X28oKSwKKworICAgIC5kYXRhX28oZmlmb190eF9kYXRhX3cpLAorICAgIC5wb3BfaShmaWZvX3R4X3BvcF93KQorKTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUnggRklGTyAoRGV2aWNlIC0+IEhvc3QpCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit1c2JoX2ZpZm8KK3VfZmlmb19yeAorKAorICAgIC5jbGtfaShjbGtfaSksCisgICAgLnJzdG5faShyc3RuX2kpLAorCisgICAgLy8gUmVjZWl2ZSBmcm9tIFVUTUkgaW50ZXJmYWNlCisgICAgLmRhdGFfaShmaWZvX3J4X2RhdGFfdyksCisgICAgLnB1c2hfaShmaWZvX3J4X3B1c2hfdyksCisKKyAgICAuZmx1c2hfaShmaWZvX2ZsdXNoX3EpLAorCisgICAgLmZ1bGxfbygpLAorICAgIC5lbXB0eV9vKCksCisKKyAgICAuZGF0YV9vKHVzYl9yZF9kYXRhX2RhdGFfaW5fdyksCisgICAgLnBvcF9pKHVzYl9yZF9kYXRhX3JkX3JlcV93KQorKTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gQXNzaWdubWVudHMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2Fzc2lnbiBzZW5kX3NvZl93ICAgICAgID0gKHsxNidiMCwgc29mX3RpbWVfcX0gPT0gU09GX1RIUkVTSE9MRCAmJiB1c2JfY3RybF9lbmFibGVfc29mX291dF93KSAmIHN0YXR1c19zaWVfaWRsZV93OworYXNzaWduIHNvZl9nYXVyZF9iYW5kX3cgPSAoezE2J2IwLCBzb2ZfdGltZV9xfSA8PSBTT0ZfR0FVUkRfTE9XIHx8IHsxNidiMCwgc29mX3RpbWVfcX0gPj0gU09GX0dBVVJEX0hJR0gpOworYXNzaWduIGNsZWFyX3RvX3NlbmRfdyAgPSAofnNvZl9nYXVyZF9iYW5kX3cgfCB+dXNiX2N0cmxfZW5hYmxlX3NvZl9vdXRfdykgJiBzdGF0dXNfc2llX2lkbGVfdzsKKworYXNzaWduIHRva2VuX3BpZF93ICAgICAgPSBzb2ZfdHJhbnNmZXJfcSA/IFBJRF9TT0YgOiB1c2JfeGZlcl90b2tlbl9waWRfYml0c19vdXRfdzsKKworYXNzaWduIHRva2VuX2Rldl93ICAgICAgPSBzb2ZfdHJhbnNmZXJfcSA/IAorICAgICAgICAgICAgICAgICAgICAgICAgICB7c29mX3ZhbHVlX3FbMF0sIHNvZl92YWx1ZV9xWzFdLCBzb2ZfdmFsdWVfcVsyXSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNvZl92YWx1ZV9xWzNdLCBzb2ZfdmFsdWVfcVs0XSwgc29mX3ZhbHVlX3FbNV0sIHNvZl92YWx1ZV9xWzZdfSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgIHt1c2JfeGZlcl90b2tlbl9kZXZfYWRkcl9vdXRfd1swXSwgdXNiX3hmZXJfdG9rZW5fZGV2X2FkZHJfb3V0X3dbMV0sIHVzYl94ZmVyX3Rva2VuX2Rldl9hZGRyX291dF93WzJdLCB1c2JfeGZlcl90b2tlbl9kZXZfYWRkcl9vdXRfd1szXSwgdXNiX3hmZXJfdG9rZW5fZGV2X2FkZHJfb3V0X3dbNF0sIHVzYl94ZmVyX3Rva2VuX2Rldl9hZGRyX291dF93WzVdLCB1c2JfeGZlcl90b2tlbl9kZXZfYWRkcl9vdXRfd1s2XX07CisKK2Fzc2lnbiB0b2tlbl9lcF93ICAgICAgID0gc29mX3RyYW5zZmVyX3EgPyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAge3NvZl92YWx1ZV9xWzddLCBzb2ZfdmFsdWVfcVs4XSwgc29mX3ZhbHVlX3FbOV0sIHNvZl92YWx1ZV9xWzEwXX0gOiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAge3VzYl94ZmVyX3Rva2VuX2VwX2FkZHJfb3V0X3dbMF0sIHVzYl94ZmVyX3Rva2VuX2VwX2FkZHJfb3V0X3dbMV0sIHVzYl94ZmVyX3Rva2VuX2VwX2FkZHJfb3V0X3dbMl0sIHVzYl94ZmVyX3Rva2VuX2VwX2FkZHJfb3V0X3dbM119OworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBDb250cm9sIGxvZ2ljCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCithbHdheXMgQCAocG9zZWRnZSBjbGtfaSBvciBuZWdlZGdlIHJzdG5faSkKK2lmICghcnN0bl9pKQorYmVnaW4KKyAgICBmaWZvX2ZsdXNoX3EgICAgICAgPD0gMSdiMDsKKyAgICB0cmFuc2Zlcl9zdGFydF9xICAgPD0gMSdiMDsKKyAgICBzb2ZfdHJhbnNmZXJfcSAgICAgPD0gMSdiMDsKKyAgICB0cmFuc2Zlcl9yZXFfYWNrX3EgPD0gMSdiMDsKKyAgICBpbl90cmFuc2Zlcl9xICAgICAgPD0gMSdiMDsKKyAgICByZXNwX2V4cGVjdGVkX3EgICAgPD0gMSdiMDsKK2VuZAorZWxzZQorYmVnaW4KKyAgICAvLyBUcmFuc2ZlciBpbiBwcm9ncmVzcz8KKyAgICBpZiAodHJhbnNmZXJfc3RhcnRfcSkKKyAgICBiZWdpbgorICAgICAgICAvLyBUcmFuc2ZlciBhY2NlcHRlZAorICAgICAgICBpZiAodHJhbnNmZXJfYWNrX3cpCisgICAgICAgICAgICB0cmFuc2Zlcl9zdGFydF9xICAgPD0gMSdiMDsKKworICAgICAgICBmaWZvX2ZsdXNoX3EgICAgICAgPD0gMSdiMDsKKyAgICAgICAgdHJhbnNmZXJfcmVxX2Fja19xIDw9IDEnYjA7CisgICAgZW5kCisgICAgLy8gVGltZSB0byBzZW5kIGFub3RoZXIgU09GIHRva2VuPworICAgIGVsc2UgaWYgKHNlbmRfc29mX3cpCisgICAgYmVnaW4KKyAgICAgICAgLy8gU3RhcnQgdHJhbnNmZXIKKyAgICAgICAgaW5fdHJhbnNmZXJfcSAgICAgPD0gMSdiMDsKKyAgICAgICAgcmVzcF9leHBlY3RlZF9xICAgPD0gMSdiMDsKKyAgICAgICAgdHJhbnNmZXJfc3RhcnRfcSAgPD0gMSdiMTsKKyAgICAgICAgc29mX3RyYW5zZmVyX3EgICAgPD0gMSdiMTsKKyAgICBlbmQgICAgICAgICAgICAgICAKKyAgICAvLyBOb3QgaW4gU09GIGdhdXJkIGJhbmQgcmVnaW9uIG9yIFNPRiBkaXNhYmxlZD8KKyAgICBlbHNlIGlmIChjbGVhcl90b19zZW5kX3cpCisgICAgYmVnaW4KKyAgICAgICAgLy8gVHJhbnNmZXIgcmVxdWVzdAorICAgICAgICBpZiAodXNiX3hmZXJfdG9rZW5fc3RhcnRfb3V0X3cpCisgICAgICAgIGJlZ2luICAgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEZsdXNoIHVuLXVzZWQgcHJldmlvdXMgUnggZGF0YQorICAgICAgICAgICAgZmlmb19mbHVzaF9xICAgICAgIDw9IDEnYjE7CisKKyAgICAgICAgICAgIC8vIFN0YXJ0IHRyYW5zZmVyCisgICAgICAgICAgICBpbl90cmFuc2Zlcl9xICAgICAgPD0gdXNiX3hmZXJfdG9rZW5faW5fb3V0X3c7CisgICAgICAgICAgICByZXNwX2V4cGVjdGVkX3EgICAgPD0gdXNiX3hmZXJfdG9rZW5fYWNrX291dF93OworICAgICAgICAgICAgdHJhbnNmZXJfc3RhcnRfcSAgIDw9IDEnYjE7CisgICAgICAgICAgICBzb2ZfdHJhbnNmZXJfcSAgICAgPD0gMSdiMDsKKyAgICAgICAgICAgIHRyYW5zZmVyX3JlcV9hY2tfcSA8PSAxJ2IxOworICAgICAgICBlbmQKKyAgICBlbmQKK2VuZAorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBTT0YgRnJhbWUgTnVtYmVyCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCithbHdheXMgQCAocG9zZWRnZSBjbGtfaSBvciBuZWdlZGdlIHJzdG5faSkKK2lmICghcnN0bl9pKQorYmVnaW4KKyAgICBzb2ZfdmFsdWVfcSAgICA8PSAxMSdkMDsKKyAgICBzb2ZfdGltZV9xICAgICA8PSBTT0ZfWkVSTzsKKyAgICBzb2ZfaXJxX3EgICAgICA8PSAxJ2IwOworZW5kCisvLyBUaW1lIHRvIHNlbmQgYW5vdGhlciBTT0YgdG9rZW4/CitlbHNlIGlmIChzZW5kX3NvZl93KQorYmVnaW4KKyAgICBzb2ZfdGltZV9xICAgIDw9IFNPRl9aRVJPOworICAgIHNvZl92YWx1ZV9xICAgPD0gc29mX3ZhbHVlX3EgKyAxMSdkMTsKKworICAgIC8vIFN0YXJ0IG9mIGZyYW1lIGludGVycnVwdAorICAgIHNvZl9pcnFfcSAgICAgPD0gMSdiMTsKK2VuZAorZWxzZQorYmVnaW4KKyAgICAvLyBJbmNyZW1lbnQgdGhlIFNPRiB0aW1lcgorICAgIGlmICh7MTYnYjAsIHNvZl90aW1lX3F9ICE9IFNPRl9USFJFU0hPTEQpCisgICAgICAgIHNvZl90aW1lX3EgPD0gc29mX3RpbWVfcSArIFNPRl9JTkM7CisKKyAgICBzb2ZfaXJxX3EgICAgIDw9IDEnYjA7CitlbmQKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUmVjb3JkIEVycm9ycworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYWx3YXlzIEAgKHBvc2VkZ2UgY2xrX2kgb3IgbmVnZWRnZSByc3RuX2kpCitpZiAoIXJzdG5faSkKKyAgICB1c2JfZXJyX3EgPD0gMSdiMDsKKy8vIENsZWFyIGVycm9yCitlbHNlIGlmICh1c2JfY3RybF93cl9xKQorICAgIHVzYl9lcnJfcSA8PSAxJ2IwOworLy8gUmVjb3JkIGJ1cyBlcnJvcnMKK2Vsc2UgaWYgKHV0bWlfcnhlcnJvcl9pKQorICAgIHVzYl9lcnJfcSA8PSAxJ2IxOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBJbnRlcnJ1cHRzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCityZWcgZXJyX2NvbmRfcTsKK3JlZyBpbnRyX3E7CityZWcgZGV2aWNlX2RldF9xOworCithbHdheXMgQCAocG9zZWRnZSBjbGtfaSBvciBuZWdlZGdlIHJzdG5faSkKK2lmICghcnN0bl9pKQorYmVnaW4KKyAgICBpbnRyX2RvbmVfcSAgIDw9IDEnYjA7CisgICAgaW50cl9zb2ZfcSAgICA8PSAxJ2IwOworICAgIGludHJfZXJyX3EgICAgPD0gMSdiMDsKKyAgICBlcnJfY29uZF9xICAgIDw9IDEnYjA7CisgICAgZGV2aWNlX2RldF9xICA8PSAxJ2IwOworICAgIGludHJfcSAgICAgICAgPD0gMSdiMDsKK2VuZAorZWxzZQorYmVnaW4KKyAgICBpZiAoc3RhdHVzX3J4X2RvbmVfdyB8fCBzdGF0dXNfdHhfZG9uZV93KQorICAgICAgICBpbnRyX2RvbmVfcSA8PSAxJ2IxOworICAgIGVsc2UgaWYgKHVzYl9pcnFfYWNrX2RvbmVfb3V0X3cpCisgICAgICAgIGludHJfZG9uZV9xIDw9IDEnYjA7CisKKyAgICBpZiAoc29mX2lycV9xKQorICAgICAgICBpbnRyX3NvZl9xICA8PSAxJ2IxOworICAgIGVsc2UgaWYgKHVzYl9pcnFfYWNrX3NvZl9vdXRfdykKKyAgICAgICAgaW50cl9zb2ZfcSA8PSAxJ2IwOworCisgICAgaWYgKChzdGF0dXNfY3JjX2Vycl93IHx8IHN0YXR1c190aW1lb3V0X3cpICYmICghZXJyX2NvbmRfcSkpCisgICAgICAgIGludHJfZXJyX3EgPD0gMSdiMTsKKyAgICBlbHNlIGlmICh1c2JfaXJxX2Fja19lcnJfb3V0X3cpCisgICAgICAgIGludHJfZXJyX3EgPD0gMSdiMDsKKworICAgIC8vIExpbmUgc3RhdGUgIT0gU0UwCisgICAgaWYgKHV0bWlfbGluZXN0YXRlX2kgIT0gMidiMCkKKyAgICAgICAgZGV2aWNlX2RldF9xICA8PSAxJ2IxOworICAgIGVsc2UgaWYgKHVzYl9pcnFfYWNrX2RldmljZV9kZXRlY3Rfb3V0X3cpCisgICAgICAgIGRldmljZV9kZXRfcSA8PSAxJ2IwOworCisgICAgZXJyX2NvbmRfcSAgPD0gKHN0YXR1c19jcmNfZXJyX3cgfCBzdGF0dXNfdGltZW91dF93KTsKKworICAgIGludHJfcSA8PSAoaW50cl9kb25lX3EgICYgdXNiX2lycV9tYXNrX2RvbmVfb3V0X3cpIHwKKyAgICAgICAgICAgICAgKGludHJfZXJyX3EgICAmIHVzYl9pcnFfbWFza19lcnJfb3V0X3cpICB8CisgICAgICAgICAgICAgIChpbnRyX3NvZl9xICAgJiB1c2JfaXJxX21hc2tfc29mX291dF93KSAgfAorICAgICAgICAgICAgICAoZGV2aWNlX2RldF9xICYgdXNiX2lycV9tYXNrX2RldmljZV9kZXRlY3Rfb3V0X3cpOworZW5kCisKK2Fzc2lnbiB1c2JfaXJxX3N0c19kZXZpY2VfZGV0ZWN0X2luX3cgPSAxJ2IwOworCithc3NpZ24gaW50cl9vID0gaW50cl9xOworCisKKworZW5kbW9kdWxlCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC91c2IxX2hvc3Qvc3JjL2NvcmUvdXNiaF9jcmMxNi5zdiBiL3Zlcmlsb2cvcnRsL3VzYjFfaG9zdC9zcmMvY29yZS91c2JoX2NyYzE2LnN2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExZjc2N2MKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC91c2IxX2hvc3Qvc3JjL2NvcmUvdXNiaF9jcmMxNi5zdgpAQCAtMCwwICsxLDg5IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEgLCBEaW5lc2ggQW5uYXl5YSAgICAgICAgICAgICAgICAgICAgICAgICAgCisvLyAKKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogQ3JlYXRlZCBieSBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorLy8KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICAgICAgICAgICAgICAgICAgICAgVVNCIEZ1bGwgU3BlZWQgSG9zdAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICBWMC42CisvLyAgICAgICAgICAgICAgICAgICAgIFVsdHJhLUVtYmVkZGVkLmNvbQorLy8gICAgICAgICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAxNS0yMDIwCisvLworLy8gICAgICAgICAgICAgICAgIEVtYWlsOiBhZG1pbkB1bHRyYS1lbWJlZGRlZC5jb20KKy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICBMaWNlbnNlOiBHUEwKKy8vIElmIHlvdSB3b3VsZCBsaWtlIGEgdmVyc2lvbiB3aXRoIGEgbW9yZSBwZXJtaXNzaXZlIGxpY2Vuc2UgZm9yCisvLyB1c2UgaW4gY2xvc2VkIHNvdXJjZSBjb21tZXJjaWFsIGFwcGxpY2F0aW9ucyBwbGVhc2UgY29udGFjdCBtZQorLy8gZm9yIGRldGFpbHMuCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLworLy8gVGhpcyBmaWxlIGlzIG9wZW4gc291cmNlIEhETDsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIAorLy8gbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgCisvLyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiAKKy8vIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisvLworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIAorLy8gTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgZmlsZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworLy8gVVNBCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBHZW5lcmF0ZWQgRmlsZQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTW9kdWxlOiAxNi1iaXQgQ1JDIHVzZWQgYnkgVVNCIGRhdGEgcGFja2V0cworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbW9kdWxlIHVzYmhfY3JjMTYKKygKKyAgICBpbnB1dCBbMTU6MF0gICAgY3JjX2ksCisgICAgaW5wdXQgWzc6MF0gICAgIGRhdGFfaSwKKyAgICBvdXRwdXQgWzE1OjBdICAgY3JjX28KKyk7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEltcGxlbWVudGF0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCithc3NpZ24gY3JjX29bMTVdID0gICAgZGF0YV9pWzBdIF4gZGF0YV9pWzFdIF4gZGF0YV9pWzJdIF4gZGF0YV9pWzNdIF4gZGF0YV9pWzRdIF4KKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfaVs1XSBeIGRhdGFfaVs2XSBeIGRhdGFfaVs3XSBeIGNyY19pWzddIF4gY3JjX2lbNl0gXgorICAgICAgICAgICAgICAgICAgICAgICAgY3JjX2lbNV0gXiBjcmNfaVs0XSBeIGNyY19pWzNdIF4gY3JjX2lbMl0gXgorICAgICAgICAgICAgICAgICAgICAgICAgY3JjX2lbMV0gXiBjcmNfaVswXTsKK2Fzc2lnbiBjcmNfb1sxNF0gPSAgICBkYXRhX2lbMF0gXiBkYXRhX2lbMV0gXiBkYXRhX2lbMl0gXiBkYXRhX2lbM10gXiBkYXRhX2lbNF0gXiBkYXRhX2lbNV0gXgorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9pWzZdIF4gY3JjX2lbNl0gXiBjcmNfaVs1XSBeIGNyY19pWzRdIF4KKyAgICAgICAgICAgICAgICAgICAgICAgIGNyY19pWzNdIF4gY3JjX2lbMl0gXiBjcmNfaVsxXSBeIGNyY19pWzBdOworYXNzaWduIGNyY19vWzEzXSA9ICAgIGRhdGFfaVs2XSBeIGRhdGFfaVs3XSBeIGNyY19pWzddIF4gY3JjX2lbNl07Cithc3NpZ24gY3JjX29bMTJdID0gICAgZGF0YV9pWzVdIF4gZGF0YV9pWzZdIF4gY3JjX2lbNl0gXiBjcmNfaVs1XTsKK2Fzc2lnbiBjcmNfb1sxMV0gPSAgICBkYXRhX2lbNF0gXiBkYXRhX2lbNV0gXiBjcmNfaVs1XSBeIGNyY19pWzRdOworYXNzaWduIGNyY19vWzEwXSA9ICAgIGRhdGFfaVszXSBeIGRhdGFfaVs0XSBeIGNyY19pWzRdIF4gY3JjX2lbM107Cithc3NpZ24gY3JjX29bOV0gPSAgICAgZGF0YV9pWzJdIF4gZGF0YV9pWzNdIF4gY3JjX2lbM10gXiBjcmNfaVsyXTsKK2Fzc2lnbiBjcmNfb1s4XSA9ICAgICBkYXRhX2lbMV0gXiBkYXRhX2lbMl0gXiBjcmNfaVsyXSBeIGNyY19pWzFdOworYXNzaWduIGNyY19vWzddID0gICAgIGRhdGFfaVswXSBeIGRhdGFfaVsxXSBeIGNyY19pWzE1XSBeIGNyY19pWzFdIF4gY3JjX2lbMF07Cithc3NpZ24gY3JjX29bNl0gPSAgICAgZGF0YV9pWzBdIF4gY3JjX2lbMTRdIF4gY3JjX2lbMF07Cithc3NpZ24gY3JjX29bNV0gPSAgICAgY3JjX2lbMTNdOworYXNzaWduIGNyY19vWzRdID0gICAgIGNyY19pWzEyXTsKK2Fzc2lnbiBjcmNfb1szXSA9ICAgICBjcmNfaVsxMV07Cithc3NpZ24gY3JjX29bMl0gPSAgICAgY3JjX2lbMTBdOworYXNzaWduIGNyY19vWzFdID0gICAgIGNyY19pWzldOworYXNzaWduIGNyY19vWzBdID0gICAgIGRhdGFfaVswXSBeIGRhdGFfaVsxXSBeIGRhdGFfaVsyXSBeIGRhdGFfaVszXSBeIGRhdGFfaVs0XSBeIGRhdGFfaVs1XSBeCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX2lbNl0gXiBkYXRhX2lbN10gXiBjcmNfaVs4XSBeIGNyY19pWzddIF4gY3JjX2lbNl0gXgorICAgICAgICAgICAgICAgICAgICAgICAgY3JjX2lbNV0gXiBjcmNfaVs0XSBeIGNyY19pWzNdIF4gY3JjX2lbMl0gXgorICAgICAgICAgICAgICAgICAgICAgICAgY3JjX2lbMV0gXiBjcmNfaVswXTsKKworZW5kbW9kdWxlCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC91c2IxX2hvc3Qvc3JjL2NvcmUvdXNiaF9jcmM1LnN2IGIvdmVyaWxvZy9ydGwvdXNiMV9ob3N0L3NyYy9jb3JlL3VzYmhfY3JjNS5zdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTI1OTA1Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvdXNiMV9ob3N0L3NyYy9jb3JlL3VzYmhfY3JjNS5zdgpAQCAtMCwwICsxLDc5IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEgLCBEaW5lc2ggQW5uYXl5YSAgICAgICAgICAgICAgICAgICAgICAgICAgCisvLyAKKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogQ3JlYXRlZCBieSBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorLy8KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICAgICAgICAgICAgICAgICAgICAgVVNCIEZ1bGwgU3BlZWQgSG9zdAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICBWMC42CisvLyAgICAgICAgICAgICAgICAgICAgIFVsdHJhLUVtYmVkZGVkLmNvbQorLy8gICAgICAgICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAxNS0yMDIwCisvLworLy8gICAgICAgICAgICAgICAgIEVtYWlsOiBhZG1pbkB1bHRyYS1lbWJlZGRlZC5jb20KKy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICBMaWNlbnNlOiBHUEwKKy8vIElmIHlvdSB3b3VsZCBsaWtlIGEgdmVyc2lvbiB3aXRoIGEgbW9yZSBwZXJtaXNzaXZlIGxpY2Vuc2UgZm9yCisvLyB1c2UgaW4gY2xvc2VkIHNvdXJjZSBjb21tZXJjaWFsIGFwcGxpY2F0aW9ucyBwbGVhc2UgY29udGFjdCBtZQorLy8gZm9yIGRldGFpbHMuCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLworLy8gVGhpcyBmaWxlIGlzIG9wZW4gc291cmNlIEhETDsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIAorLy8gbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgCisvLyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiAKKy8vIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisvLworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIAorLy8gTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgZmlsZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNworLy8gVVNBCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBHZW5lcmF0ZWQgRmlsZQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTW9kdWxlOiA1LWJpdCBDUkMgdXNlZCBieSBVU0IgdG9rZW5zCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittb2R1bGUgdXNiaF9jcmM1CisoCisgICAgaW5wdXQgWzQ6MF0gICAgIGNyY19pLAorICAgIGlucHV0IFsxMDowXSAgICBkYXRhX2ksCisgICAgb3V0cHV0IFs0OjBdICAgIGNyY19vCispOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBJbXBsZW1lbnRhdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYXNzaWduIGNyY19vWzBdID0gICAgZGF0YV9pWzEwXSBeIGRhdGFfaVs5XSBeIGRhdGFfaVs2XSBeIGRhdGFfaVs1XSBeIGRhdGFfaVszXSBeIGRhdGFfaVswXSBeCisgICAgICAgICAgICAgICAgICAgICAgIGNyY19pWzBdIF4gY3JjX2lbM10gXiBjcmNfaVs0XTsKKworYXNzaWduIGNyY19vWzFdID0gICAgZGF0YV9pWzEwXSBeIGRhdGFfaVs3XSBeIGRhdGFfaVs2XSBeIGRhdGFfaVs0XSBeIGRhdGFfaVsxXSBeCisgICAgICAgICAgICAgICAgICAgICAgIGNyY19pWzBdIF4gY3JjX2lbMV0gXiBjcmNfaVs0XTsKKworYXNzaWduIGNyY19vWzJdID0gICAgZGF0YV9pWzEwXSBeIGRhdGFfaVs5XSBeIGRhdGFfaVs4XSBeIGRhdGFfaVs3XSBeIGRhdGFfaVs2XSBeIGRhdGFfaVszXSBeIGRhdGFfaVsyXSBeIGRhdGFfaVswXSBeCisgICAgICAgICAgICAgICAgICAgICAgIGNyY19pWzBdIF4gY3JjX2lbMV0gXiBjcmNfaVsyXSBeIGNyY19pWzNdIF4gY3JjX2lbNF07CisKK2Fzc2lnbiBjcmNfb1szXSA9ICAgIGRhdGFfaVsxMF0gXiBkYXRhX2lbOV0gXiBkYXRhX2lbOF0gXiBkYXRhX2lbN10gXiBkYXRhX2lbNF0gXiBkYXRhX2lbM10gXiBkYXRhX2lbMV0gXiAKKyAgICAgICAgICAgICAgICAgICAgICAgY3JjX2lbMV0gXiBjcmNfaVsyXSBeIGNyY19pWzNdIF4gY3JjX2lbNF07CisKK2Fzc2lnbiBjcmNfb1s0XSA9ICAgIGRhdGFfaVsxMF0gXiBkYXRhX2lbOV0gXiBkYXRhX2lbOF0gXiBkYXRhX2lbNV0gXiBkYXRhX2lbNF0gXiBkYXRhX2lbMl0gXgorICAgICAgICAgICAgICAgICAgICAgICBjcmNfaVsyXSBeIGNyY19pWzNdIF4gY3JjX2lbNF07CisKK2VuZG1vZHVsZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvdXNiMV9ob3N0L3NyYy9jb3JlL3VzYmhfZmlmby5zdiBiL3Zlcmlsb2cvcnRsL3VzYjFfaG9zdC9zcmMvY29yZS91c2JoX2ZpZm8uc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjcxMTNjMwotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL3VzYjFfaG9zdC9zcmMvY29yZS91c2JoX2ZpZm8uc3YKQEAgLTAsMCArMSwxNDMgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSAsIERpbmVzaCBBbm5heXlhICAgICAgICAgICAgICAgICAgICAgICAgICAKKy8vIAorLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBDcmVhdGVkIGJ5IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisvLworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gICAgICAgICAgICAgICAgICAgICBVU0IgRnVsbCBTcGVlZCBIb3N0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgIFYwLjYKKy8vICAgICAgICAgICAgICAgICAgICAgVWx0cmEtRW1iZWRkZWQuY29tCisvLyAgICAgICAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDE1LTIwMjAKKy8vCisvLyAgICAgICAgICAgICAgICAgRW1haWw6IGFkbWluQHVsdHJhLWVtYmVkZGVkLmNvbQorLy8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgIExpY2Vuc2U6IEdQTAorLy8gSWYgeW91IHdvdWxkIGxpa2UgYSB2ZXJzaW9uIHdpdGggYSBtb3JlIHBlcm1pc3NpdmUgbGljZW5zZSBmb3IKKy8vIHVzZSBpbiBjbG9zZWQgc291cmNlIGNvbW1lcmNpYWwgYXBwbGljYXRpb25zIHBsZWFzZSBjb250YWN0IG1lCisvLyBmb3IgZGV0YWlscy4KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vCisvLyBUaGlzIGZpbGUgaXMgb3BlbiBzb3VyY2UgSERMOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgCisvLyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyAKKy8vIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIAorLy8gdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisvLworLy8gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy8vCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgCisvLyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBmaWxlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisvLyBVU0EKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEdlbmVyYXRlZCBGaWxlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZSB1c2JoX2ZpZm8KKygKKyAgICAvLyBJbnB1dHMKKyAgICAgaW5wdXQgICAgICAgICAgIGNsa19pCisgICAgLGlucHV0ICAgICAgICAgICByc3RuX2kKKyAgICAsaW5wdXQgIFsgIDc6MF0gIGRhdGFfaQorICAgICxpbnB1dCAgICAgICAgICAgcHVzaF9pCisgICAgLGlucHV0ICAgICAgICAgICBwb3BfaQorICAgICxpbnB1dCAgICAgICAgICAgZmx1c2hfaQorCisgICAgLy8gT3V0cHV0cworICAgICxvdXRwdXQgICAgICAgICAgZnVsbF9vCisgICAgLG91dHB1dCAgICAgICAgICBlbXB0eV9vCisgICAgLG91dHB1dCBbICA3OjBdICBkYXRhX28KKyk7CisKKworCitwYXJhbWV0ZXIgV0lEVEggICA9IDg7CitwYXJhbWV0ZXIgREVQVEggICA9IDY0OworcGFyYW1ldGVyIEFERFJfVyAgPSA2OworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBMb2NhbCBQYXJhbXMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2xvY2FscGFyYW0gQ09VTlRfVyA9IEFERFJfVyArIDE7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJlZ2lzdGVycworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcmVnIFtXSURUSC0xOjBdICAgICAgICAgcmFtIFtERVBUSC0xOjBdOworcmVnIFtBRERSX1ctMTowXSAgICAgICAgcmRfcHRyOworcmVnIFtBRERSX1ctMTowXSAgICAgICAgd3JfcHRyOworcmVnIFtDT1VOVF9XLTE6MF0gICAgICAgY291bnQ7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFNlcXVlbnRpYWwKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2Fsd2F5cyBAIChwb3NlZGdlIGNsa19pIG9yIG5lZ2VkZ2UgcnN0bl9pKQoraWYgKCFyc3RuX2kpCitiZWdpbgorICAgIGNvdW50ICAgPD0geyhDT1VOVF9XKSB7MSdiMH19OworICAgIHJkX3B0ciAgPD0geyhBRERSX1cpIHsxJ2IwfX07CisgICAgd3JfcHRyICA8PSB7KEFERFJfVykgezEnYjB9fTsKK2VuZAorZWxzZQorYmVnaW4KKworICAgIGlmIChmbHVzaF9pKQorICAgIGJlZ2luCisgICAgICAgIGNvdW50ICAgPD0geyhDT1VOVF9XKSB7MSdiMH19OworICAgICAgICByZF9wdHIgIDw9IHsoQUREUl9XKSB7MSdiMH19OworICAgICAgICB3cl9wdHIgIDw9IHsoQUREUl9XKSB7MSdiMH19OworICAgIGVuZAorCisgICAgLy8gUHVzaAorICAgIGlmIChwdXNoX2kgJiB+ZnVsbF9vKQorICAgIGJlZ2luCisgICAgICAgIHJhbVt3cl9wdHJdIDw9IGRhdGFfaTsKKyAgICAgICAgd3JfcHRyICAgICAgPD0gd3JfcHRyICsgMTsKKyAgICBlbmQKKworICAgIC8vIFBvcAorICAgIGlmIChwb3BfaSAmIH5lbXB0eV9vKQorICAgIGJlZ2luCisgICAgICAgIHJkX3B0ciAgICAgIDw9IHJkX3B0ciArIDE7CisgICAgZW5kCisKKyAgICAvLyBDb3VudCB1cAorICAgIGlmICgocHVzaF9pICYgfmZ1bGxfbykgJiB+KHBvcF9pICYgfmVtcHR5X28pKQorICAgIGJlZ2luCisgICAgICAgIGNvdW50IDw9IGNvdW50ICsgMTsKKyAgICBlbmQKKyAgICAvLyBDb3VudCBkb3duCisgICAgZWxzZSBpZiAofihwdXNoX2kgJiB+ZnVsbF9vKSAmIChwb3BfaSAmIH5lbXB0eV9vKSkKKyAgICBiZWdpbgorICAgICAgICBjb3VudCA8PSBjb3VudCAtIDE7CisgICAgZW5kCitlbmQKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBDb21iaW5hdG9yaWFsCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8qIHZlcmlsYXRvciBsaW50X29mZiBXSURUSCAqLworYXNzaWduIGZ1bGxfbyAgICA9IChjb3VudCA9PSBERVBUSCk7Cithc3NpZ24gZW1wdHlfbyAgID0gKGNvdW50ID09IDApOworLyogdmVyaWxhdG9yIGxpbnRfb24gV0lEVEggKi8KKworYXNzaWduIGRhdGFfbyAgICA9IHJhbVtyZF9wdHJdOworCisKK2VuZG1vZHVsZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvdXNiMV9ob3N0L3NyYy9jb3JlL3VzYmhfc2llLnN2IGIvdmVyaWxvZy9ydGwvdXNiMV9ob3N0L3NyYy9jb3JlL3VzYmhfc2llLnN2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMDQ2YzAKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC91c2IxX2hvc3Qvc3JjL2NvcmUvdXNiaF9zaWUuc3YKQEAgLTAsMCArMSw4NDYgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSAsIERpbmVzaCBBbm5heXlhICAgICAgICAgICAgICAgICAgICAgICAgICAKKy8vIAorLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBDcmVhdGVkIGJ5IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisvLworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gICAgICAgICAgICAgICAgICAgICBVU0IgRnVsbCBTcGVlZCBIb3N0CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgIFYwLjYKKy8vICAgICAgICAgICAgICAgICAgICAgVWx0cmEtRW1iZWRkZWQuY29tCisvLyAgICAgICAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDE1LTIwMjAKKy8vCisvLyAgICAgICAgICAgICAgICAgRW1haWw6IGFkbWluQHVsdHJhLWVtYmVkZGVkLmNvbQorLy8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgIExpY2Vuc2U6IEdQTAorLy8gSWYgeW91IHdvdWxkIGxpa2UgYSB2ZXJzaW9uIHdpdGggYSBtb3JlIHBlcm1pc3NpdmUgbGljZW5zZSBmb3IKKy8vIHVzZSBpbiBjbG9zZWQgc291cmNlIGNvbW1lcmNpYWwgYXBwbGljYXRpb25zIHBsZWFzZSBjb250YWN0IG1lCisvLyBmb3IgZGV0YWlscy4KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vCisvLyBUaGlzIGZpbGUgaXMgb3BlbiBzb3VyY2UgSERMOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgCisvLyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyAKKy8vIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIAorLy8gdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisvLworLy8gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy8vCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgCisvLyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBmaWxlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3CisvLyBVU0EKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIEdlbmVyYXRlZCBGaWxlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK21vZHVsZSB1c2JoX3NpZQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUGFyYW1zCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjKAorICAgICBwYXJhbWV0ZXIgVVNCX0NMS19GUkVRICAgICA9IDQ4MDAwMDAwCispCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBQb3J0cworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKAorICAgIC8vIElucHV0cworICAgIGlucHV0ICAgICAgICAgICBjbGtfaSwKKyAgICBpbnB1dCAgICAgICAgICAgcnN0bl9pLAorICAgIGlucHV0ICAgICAgICAgICBzdGFydF9pLAorICAgIGlucHV0ICAgICAgICAgICBpbl90cmFuc2Zlcl9pLAorICAgIGlucHV0ICAgICAgICAgICBzb2ZfdHJhbnNmZXJfaSwKKyAgICBpbnB1dCAgICAgICAgICAgcmVzcF9leHBlY3RlZF9pLAorICAgIGlucHV0ICBbICA3OjBdICB0b2tlbl9waWRfaSwKKyAgICBpbnB1dCAgWyAgNjowXSAgdG9rZW5fZGV2X2ksCisgICAgaW5wdXQgIFsgIDM6MF0gIHRva2VuX2VwX2ksCisgICAgaW5wdXQgIFsgMTU6MF0gIGRhdGFfbGVuX2ksCisgICAgaW5wdXQgICAgICAgICAgIGRhdGFfaWR4X2ksCisgICAgaW5wdXQgIFsgIDc6MF0gIHR4X2RhdGFfaSwKKyAgICBpbnB1dCAgICAgICAgICAgdXRtaV90eHJlYWR5X2ksCisgICAgaW5wdXQgIFsgIDc6MF0gIHV0bWlfZGF0YV9pLAorICAgIGlucHV0ICAgICAgICAgICB1dG1pX3J4dmFsaWRfaSwKKyAgICBpbnB1dCAgICAgICAgICAgdXRtaV9yeGFjdGl2ZV9pLAorICAgIGlucHV0ICBbICAxOjBdICB1dG1pX2xpbmVzdGF0ZV9pLAorCisgICAgLy8gT3V0cHV0cworICAgIG91dHB1dCAgICAgICAgICBhY2tfbywKKyAgICBvdXRwdXQgICAgICAgICAgdHhfcG9wX28sCisgICAgb3V0cHV0IFsgIDc6MF0gIHJ4X2RhdGFfbywKKyAgICBvdXRwdXQgICAgICAgICAgcnhfcHVzaF9vLAorICAgIG91dHB1dCAgICAgICAgICB0eF9kb25lX28sCisgICAgb3V0cHV0ICAgICAgICAgIHJ4X2RvbmVfbywKKyAgICBvdXRwdXQgICAgICAgICAgY3JjX2Vycl9vLAorICAgIG91dHB1dCAgICAgICAgICB0aW1lb3V0X28sCisgICAgb3V0cHV0IFsgIDc6MF0gIHJlc3BvbnNlX28sCisgICAgb3V0cHV0IFsgMTU6MF0gIHJ4X2NvdW50X28sCisgICAgb3V0cHV0ICAgICAgICAgIGlkbGVfbywKKyAgICBvdXRwdXQgWyAgNzowXSAgdXRtaV9kYXRhX28sCisgICAgb3V0cHV0ICAgICAgICAgIHV0bWlfdHh2YWxpZF9vCispOworCisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUmVnaXN0ZXJzIC8gV2lyZXMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2xvZ2ljICAgICAgICAgICAgICAgICBzdGFydF9hY2tfcTsKKworLy8gU3RhdHVzCitsb2dpYyAgICAgICAgICAgICAgICAgc3RhdHVzX3R4X2RvbmVfcTsKK2xvZ2ljICAgICAgICAgICAgICAgICBzdGF0dXNfcnhfZG9uZV9xOworbG9naWMgICAgICAgICAgICAgICAgIHN0YXR1c19jcmNfZXJyX3E7Citsb2dpYyAgICAgICAgICAgICAgICAgc3RhdHVzX3RpbWVvdXRfcTsKK2xvZ2ljIFs3OjBdICAgICAgICAgICBzdGF0dXNfcmVzcG9uc2VfcTsKKworbG9naWMgWzE1OjBdICAgICAgICAgIGJ5dGVfY291bnRfcTsKK2xvZ2ljICAgICAgICAgICAgICAgICBpbl90cmFuc2Zlcl9xOworCitsb2dpYyBbODowXSAgICAgICAgICAgbGFzdF90eF90aW1lX3E7CisKK2xvZ2ljICAgICAgICAgICAgICAgICBzZW5kX2RhdGExX3E7Citsb2dpYyAgICAgICAgICAgICAgICAgc2VuZF9zb2ZfcTsKK2xvZ2ljICAgICAgICAgICAgICAgICBzZW5kX2Fja19xOworCisvLyBDUkMxNgorbG9naWMgWzE1OjBdICAgICAgICAgIGNyY19zdW1fcTsKK2xvZ2ljICBbMTU6MF0gICAgICAgICBjcmNfb3V0X3c7Citsb2dpYyAgWzc6MF0gICAgICAgICAgY3JjX2RhdGFfaW5fdzsKKworLy8gQ1JDNQorbG9naWMgWzQ6MF0gICAgICAgICAgY3JjNV9vdXRfdzsKK3dpcmUgIFs0OjBdICAgICAgICAgIGNyYzVfbmV4dF93ID0gY3JjNV9vdXRfdyBeIDUnaDFGOworCitsb2dpYyBbMTU6MF0gICAgICAgICAgdG9rZW5fcTsKKworbG9naWMgICAgICAgICAgICAgICAgIHdhaXRfcmVzcF9xOworCitsb2dpYyBbMzowXSAgICAgICAgICAgc3RhdGVfcTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gRGVmaW5pdGlvbnMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2xvY2FscGFyYW0gUlhfVElNRU9VVCAgICAgICA9IChVU0JfQ0xLX0ZSRVEgPT0gNjAwMDAwMDApID8gOSdkNTExIDogOSdkMjU1OworIC8vIDIgRlMgYml0IHRpbWVzICh4NSBDTEtzIEAgNjBNSHosIHg0IENMS3MgQCA0OE1IeikKK2xvY2FscGFyYW0gVFhfSUZTICAgICAgICAgICA9IChVU0JfQ0xLX0ZSRVEgPT0gNjAwMDAwMDApID8gNCdkMTAgIDogNCdkNzsgCisKK2xvY2FscGFyYW0gUElEX09VVCAgICAgICAgICA9IDgnaEUxOworbG9jYWxwYXJhbSBQSURfSU4gICAgICAgICAgID0gOCdoNjk7Citsb2NhbHBhcmFtIFBJRF9TT0YgICAgICAgICAgPSA4J2hBNTsKK2xvY2FscGFyYW0gUElEX1NFVFVQICAgICAgICA9IDgnaDJEOworCitsb2NhbHBhcmFtIFBJRF9EQVRBMCAgICAgICAgPSA4J2hDMzsKK2xvY2FscGFyYW0gUElEX0RBVEExICAgICAgICA9IDgnaDRCOworCitsb2NhbHBhcmFtIFBJRF9BQ0sgICAgICAgICAgPSA4J2hEMjsKK2xvY2FscGFyYW0gUElEX05BSyAgICAgICAgICA9IDgnaDVBOworbG9jYWxwYXJhbSBQSURfU1RBTEwgICAgICAgID0gOCdoMUU7CisKKy8vIFN0YXRlcworbG9jYWxwYXJhbSBTVEFURV9JRExFICAgICAgID0gNCdkMDsKK2xvY2FscGFyYW0gU1RBVEVfUlhfREFUQSAgICA9IDQnZDE7Citsb2NhbHBhcmFtIFNUQVRFX1RYX1BJRCAgICAgPSA0J2QyOworbG9jYWxwYXJhbSBTVEFURV9UWF9EQVRBICAgID0gNCdkMzsKK2xvY2FscGFyYW0gU1RBVEVfVFhfQ1JDMSAgICA9IDQnZDQ7Citsb2NhbHBhcmFtIFNUQVRFX1RYX0NSQzIgICAgPSA0J2Q1OworbG9jYWxwYXJhbSBTVEFURV9UWF9UT0tFTjEgID0gNCdkNjsKK2xvY2FscGFyYW0gU1RBVEVfVFhfVE9LRU4yICA9IDQnZDc7Citsb2NhbHBhcmFtIFNUQVRFX1RYX1RPS0VOMyAgPSA0J2Q4OworbG9jYWxwYXJhbSBTVEFURV9UWF9BQ0tOQUsgID0gNCdkOTsKK2xvY2FscGFyYW0gU1RBVEVfVFhfV0FJVCAgICA9IDQnZDEwOworbG9jYWxwYXJhbSBTVEFURV9SWF9XQUlUICAgID0gNCdkMTE7Citsb2NhbHBhcmFtIFNUQVRFX1RYX0lGUyAgICAgPSA0J2QxMjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gV2lyZXMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ4IGRhdGEKK2xvZ2ljIFs3OjBdIHJ4X2RhdGFfdzsKK2xvZ2ljICAgICAgIGRhdGFfcmVhZHlfdzsKK2xvZ2ljICAgICAgIGNyY19ieXRlX3c7Citsb2dpYyAgICAgICByeF9hY3RpdmVfdzsKK2xvZ2ljICAgICAgIHJ4X2FjdGl2ZV9yaXNlX3c7CisKKy8vIFR4L1J4IC0+IFR4IElGUyB0aW1lb3V0Citsb2dpYyBpZnNfYnVzeV93OworCisvLyBSZXNwb25zZSB0aW1lb3V0IChubyByZXNwb25zZSBhZnRlciA1MDB1UyBmcm9tIHRyYW5zbWl0KQord2lyZSByeF9yZXNwX3RpbWVvdXRfdyA9IChsYXN0X3R4X3RpbWVfcSA+PSBSWF9USU1FT1VUKSAmIHdhaXRfcmVzcF9xOworCisvLyBDUkMxNiBlcnJvciBvbiByZWNlaXZlZCBkYXRhCit3aXJlIGNyY19lcnJvcl93ID0gKHN0YXRlX3EgPT0gU1RBVEVfUlhfREFUQSkgJiYgIXJ4X2FjdGl2ZV93ICYmIGluX3RyYW5zZmVyX3EgICAgICAgICYmCisgICAgICAgICAgICAgICAgICAgKHN0YXR1c19yZXNwb25zZV9xID09IFBJRF9EQVRBMCB8fCBzdGF0dXNfcmVzcG9uc2VfcSA9PSBQSURfREFUQTEpICYmCisgICAgICAgICAgICAgICAgICAgKGNyY19zdW1fcSAhPSAxNidoQjAwMSk7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFN0YXRlIE1hY2hpbmUKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2xvZ2ljIFszOjBdIG5leHRfc3RhdGVfcjsKKworYWx3YXlzIEAgKgorYmVnaW4KKyAgICBuZXh0X3N0YXRlX3IgPSBzdGF0ZV9xOworICAgICAgICAKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gVHggU3RhdGUgTWFjaGluZQorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBjYXNlIChzdGF0ZV9xKQorCisgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgLy8gVFhfVE9LRU4xIChieXRlIDEgb2YgdG9rZW4pCisgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgU1RBVEVfVFhfVE9LRU4xIDoKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIC8vIERhdGEgc2VudD8KKyAgICAgICAgICAgIGlmICh1dG1pX3R4cmVhZHlfaSkKKyAgICAgICAgICAgICAgICBuZXh0X3N0YXRlX3IgPSBTVEFURV9UWF9UT0tFTjI7CisgICAgICAgIGVuZAorICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIC8vIFRYX1RPS0VOMiAoYnl0ZSAyIG9mIHRva2VuKQorICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIFNUQVRFX1RYX1RPS0VOMiA6CisgICAgICAgIGJlZ2luCisgICAgICAgICAgICAvLyBEYXRhIHNlbnQ/CisgICAgICAgICAgICBpZiAodXRtaV90eHJlYWR5X2kpCisgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZV9yID0gU1RBVEVfVFhfVE9LRU4zOyAgICAgICAgCisgICAgICAgIGVuZAorICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIC8vIFRYX1RPS0VOMyAoYnl0ZSAzIG9mIHRva2VuKQorICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIFNUQVRFX1RYX1RPS0VOMyA6CisgICAgICAgIGJlZ2luCisgICAgICAgICAgICAvLyBEYXRhIHNlbnQ/CisgICAgICAgICAgICBpZiAodXRtaV90eHJlYWR5X2kpCisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgIC8vIFNPRiAtIG5vIGRhdGEgcGFja2V0CisgICAgICAgICAgICAgICAgaWYgKHNlbmRfc29mX3EpCisgICAgICAgICAgICAgICAgICAgIG5leHRfc3RhdGVfciA9IFNUQVRFX1RYX0lGUzsKKyAgICAgICAgICAgICAgICAvLyBJTiAtIHdhaXQgZm9yIGRhdGEKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChpbl90cmFuc2Zlcl9xKQorICAgICAgICAgICAgICAgICAgICBuZXh0X3N0YXRlX3IgPSBTVEFURV9SWF9XQUlUOworICAgICAgICAgICAgICAgIC8vIE9VVC9TRVRVUCAtIFNlbmQgZGF0YSBvciBaTFAKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG5leHRfc3RhdGVfciA9IFNUQVRFX1RYX0lGUzsKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKyAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAvLyBUWF9JRlMKKyAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBTVEFURV9UWF9JRlMgOgorICAgICAgICBiZWdpbgorICAgICAgICAgICAgLy8gSUZTIGV4cGlyZWQKKyAgICAgICAgICAgIGlmICh+aWZzX2J1c3lfdykKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgLy8gU09GIC0gbm8gZGF0YSBwYWNrZXQKKyAgICAgICAgICAgICAgICBpZiAoc2VuZF9zb2ZfcSkKKyAgICAgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZV9yID0gU1RBVEVfSURMRTsKKyAgICAgICAgICAgICAgICAvLyBPVVQvU0VUVVAgLSBTZW5kIGRhdGEgb3IgWkxQCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBuZXh0X3N0YXRlX3IgPSBTVEFURV9UWF9QSUQ7CisgICAgICAgICAgICBlbmQKKyAgICAgICAgZW5kCisgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgLy8gVFhfUElECisgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgU1RBVEVfVFhfUElEIDoKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIC8vIExhc3QgZGF0YSBieXRlIHNlbnQ/CisgICAgICAgICAgICBpZiAodXRtaV90eHJlYWR5X2kgJiYgKGJ5dGVfY291bnRfcSA9PSAxNidiMCkpCisgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZV9yID0gU1RBVEVfVFhfQ1JDMTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHV0bWlfdHhyZWFkeV9pKQorICAgICAgICAgICAgICAgIG5leHRfc3RhdGVfciA9IFNUQVRFX1RYX0RBVEE7CisgICAgICAgIGVuZAorICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIC8vIFRYX0RBVEEKKyAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBTVEFURV9UWF9EQVRBIDoKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIC8vIExhc3QgZGF0YSBieXRlIHNlbnQ/CisgICAgICAgICAgICBpZiAodXRtaV90eHJlYWR5X2kgJiYgKGJ5dGVfY291bnRfcSA9PSAxNidiMCkpCisgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZV9yID0gU1RBVEVfVFhfQ1JDMTsKKyAgICAgICAgZW5kCisgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgLy8gVFhfQ1JDMSAoZmlyc3QgYnl0ZSkKKyAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBTVEFURV9UWF9DUkMxIDoKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIC8vIERhdGEgc2VudD8KKyAgICAgICAgICAgIGlmICh1dG1pX3R4cmVhZHlfaSkKKyAgICAgICAgICAgICAgICBuZXh0X3N0YXRlX3IgPSBTVEFURV9UWF9DUkMyOworICAgICAgICBlbmQKKyAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAvLyBUWF9DUkMgKHNlY29uZCBieXRlKQorICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIFNUQVRFX1RYX0NSQzIgOgorICAgICAgICBiZWdpbgorICAgICAgICAgICAgLy8gRGF0YSBzZW50PworICAgICAgICAgICAgaWYgKHV0bWlfdHhyZWFkeV9pKQorICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgIC8vIElmIGEgcmVzcG9uc2UgaXMgZXhwZWN0ZWQKKyAgICAgICAgICAgICAgIGlmICh3YWl0X3Jlc3BfcSkKKyAgICAgICAgICAgICAgICAgIG5leHRfc3RhdGVfciA9IFNUQVRFX1JYX1dBSVQ7CisgICAgICAgICAgICAgICAgLy8gTm8gcmVzcG9uc2UgZXhwZWN0ZWQgKGUuZyBJU08gdHJhbnNmZXIpCisgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBuZXh0X3N0YXRlX3IgPSBTVEFURV9JRExFOyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKyAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAvLyBTVEFURV9UWF9XQUlUCisgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgU1RBVEVfVFhfV0FJVCA6CisgICAgICAgIGJlZ2luCisgICAgICAgICAgICAvLyBXYWl0ZWQgbG9uZyBlbm91Z2g/CisgICAgICAgICAgICBpZiAofmlmc19idXN5X3cpCisgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZV9yID0gU1RBVEVfVFhfQUNLTkFLOworICAgICAgICBlbmQgICAgICAgIAorICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIC8vIFNUQVRFX1RYX0FDS05BSworICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIFNUQVRFX1RYX0FDS05BSyA6CisgICAgICAgIGJlZ2luCisgICAgICAgICAgICAvLyBEYXRhIHNlbnQ/CisgICAgICAgICAgICBpZiAodXRtaV90eHJlYWR5X2kpCisgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZV9yID0gU1RBVEVfSURMRTsKKyAgICAgICAgZW5kCisgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgLy8gU1RBVEVfUlhfV0FJVAorICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIFNUQVRFX1JYX1dBSVQgOgorICAgICAgICBiZWdpbgorICAgICAgICAgICAvLyBEYXRhIHJlY2VpdmVkPworICAgICAgICAgICBpZiAoZGF0YV9yZWFkeV93KQorICAgICAgICAgICAgICBuZXh0X3N0YXRlX3IgPSBTVEFURV9SWF9EQVRBOworICAgICAgICAgICAgLy8gV2FpdGVkIGxvbmcgZW5vdWdoPworICAgICAgICAgICBlbHNlIGlmIChyeF9yZXNwX3RpbWVvdXRfdykKKyAgICAgICAgICAgICAgbmV4dF9zdGF0ZV9yID0gU1RBVEVfSURMRTsKKyAgICAgICAgZW5kCisgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgLy8gUlhfREFUQQorICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIFNUQVRFX1JYX0RBVEEgOgorICAgICAgICBiZWdpbgorICAgICAgICAgICAgLy8gUmVjZWl2ZSBjb21wbGV0ZQorICAgICAgICAgICAgaWYgKH5yeF9hY3RpdmVfdykKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgLy8gU2VuZCBBQ0sgYnV0IGluY29taW5nIGRhdGEgaGFkIENSQyBlcnJvciwgZG8gbm90IEFDSworICAgICAgICAgICAgICAgIGlmIChzZW5kX2Fja19xICYmIGNyY19lcnJvcl93KQorICAgICAgICAgICAgICAgICAgICBuZXh0X3N0YXRlX3IgPSBTVEFURV9JRExFOworICAgICAgICAgICAgICAgIC8vIFNlbmQgYW4gQUNLIHJlc3BvbnNlIHdpdGhvdXQgQ1BVIGludGVyYWN0aW9uPworICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNlbmRfYWNrX3EgJiYgKHN0YXR1c19yZXNwb25zZV9xID09IFBJRF9EQVRBMCB8fCBzdGF0dXNfcmVzcG9uc2VfcSA9PSBQSURfREFUQTEpKQorICAgICAgICAgICAgICAgICAgICBuZXh0X3N0YXRlX3IgPSBTVEFURV9UWF9XQUlUOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbmV4dF9zdGF0ZV9yID0gU1RBVEVfSURMRTsKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKyAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAvLyBJRExFIC8gUkVDRUlWRSBCRUdJTgorICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIFNUQVRFX0lETEUgOgorICAgICAgICBiZWdpbgorICAgICAgICAgICAvLyBUb2tlbiB0cmFuc2ZlciByZXF1ZXN0CisgICAgICAgICAgIGlmIChzdGFydF9pKQorICAgICAgICAgICAgICBuZXh0X3N0YXRlX3IgID0gU1RBVEVfVFhfVE9LRU4xOworICAgICAgICBlbmQKKyAgICAgICAgZGVmYXVsdCA6CisgICAgICAgICAgIDsKKyAgICBlbmRjYXNlCitlbmQKKworLy8gVXBkYXRlIHN0YXRlCithbHdheXMgQCAocG9zZWRnZSBjbGtfaSBvciBuZWdlZGdlIHJzdG5faSkKK2lmICghcnN0bl9pKQorICAgIHN0YXRlX3EgICA8PSBTVEFURV9JRExFOworZWxzZQorICAgIHN0YXRlX3EgICA8PSBuZXh0X3N0YXRlX3I7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFR4IFRva2VuCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCithbHdheXMgQCAocG9zZWRnZSBjbGtfaSBvciBuZWdlZGdlIHJzdG5faSkKK2lmICghcnN0bl9pKQorICAgIHRva2VuX3EgICAgICAgICA8PSAxNidoMDAwMDsKK2Vsc2UgaWYgKHN0YXRlX3EgPT0gU1RBVEVfSURMRSkKKyAgICB0b2tlbl9xICAgICAgICAgPD0ge3Rva2VuX2Rldl9pLCB0b2tlbl9lcF9pLCA1J2IwfTsKKy8vIFBJRCBvZiB0b2tlbiBzZW50LCBjYXB0dXJlIGNhbGN1bGF0ZWQgQ1JDIGZvciB0b2tlbiBwYWNrZXQKK2Vsc2UgaWYgKHN0YXRlX3EgPT0gU1RBVEVfVFhfVE9LRU4xICYmIHV0bWlfdHhyZWFkeV9pKQorICAgIHRva2VuX3FbNDowXSAgICA8PSBjcmM1X25leHRfdzsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gVHggRU9QIC0gZGV0ZWN0IGVuZCBvZiB0cmFuc21pdCAodG9rZW4sIGRhdGEgb3IgQUNLL05BSykKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3JlZyBbMTowXSB1dG1pX2xpbmVzdGF0ZV9xOworcmVnICAgICAgIHNlMF9kZXRlY3RfcTsKK3JlZyAgICAgICB3YWl0X2VvcF9xOworCithbHdheXMgQCAocG9zZWRnZSBjbGtfaSBvciBuZWdlZGdlIHJzdG5faSkKK2lmICghcnN0bl9pKQorICAgIHV0bWlfbGluZXN0YXRlX3EgPD0gMidiMDsKK2Vsc2UKKyAgICB1dG1pX2xpbmVzdGF0ZV9xIDw9IHV0bWlfbGluZXN0YXRlX2k7CisKKy8vIFNFMCBmaWx0ZXJpbmcgKDIgY3ljbGVzIEZTKQord2lyZSBzZTBfZGV0ZWN0X3cgPSAodXRtaV9saW5lc3RhdGVfcSA9PSAyJ2IwMCAmJiB1dG1pX2xpbmVzdGF0ZV9pID09IDInYjAwKTsKKworYWx3YXlzIEAgKHBvc2VkZ2UgY2xrX2kgb3IgbmVnZWRnZSByc3RuX2kpCitpZiAoIXJzdG5faSkKKyAgICBzZTBfZGV0ZWN0X3EgPD0gMSdiMDsKK2Vsc2UKKyAgICBzZTBfZGV0ZWN0X3EgPD0gc2UwX2RldGVjdF93OworCisvLyBUT0RPOiBUaGlzIG5lZWRzIHVwZGF0aW5nIGZvciBIUyBVU0IuLi4KK3dpcmUgZW9wX2RldGVjdGVkX3cgPSBzZTBfZGV0ZWN0X3EgJiAodXRtaV9saW5lc3RhdGVfaSAhPSAyJ2IwMCk7CisKKy8vIEVuZCBvZiB0cmFuc21pdCBkZXRlY3Rpb24KK2Fsd2F5cyBAIChwb3NlZGdlIGNsa19pIG9yIG5lZ2VkZ2UgcnN0bl9pKQoraWYgKCFyc3RuX2kpCisgICAgd2FpdF9lb3BfcSA8PSAxJ2IwOworZWxzZSBpZiAoZW9wX2RldGVjdGVkX3cpCisgICAgd2FpdF9lb3BfcSA8PSAxJ2IwOworZWxzZSBpZiAoKHN0YXRlX3EgPT0gU1RBVEVfVFhfQ1JDMiAgICYmIG5leHRfc3RhdGVfciAhPSBTVEFURV9UWF9DUkMyKSAgIHx8CisgICAgICAgICAoc3RhdGVfcSA9PSBTVEFURV9UWF9UT0tFTjMgJiYgbmV4dF9zdGF0ZV9yICE9IFNUQVRFX1RYX1RPS0VOMykgfHwKKyAgICAgICAgIChzdGF0ZV9xID09IFNUQVRFX1RYX0FDS05BSyAmJiBuZXh0X3N0YXRlX3IgIT0gU1RBVEVfVFhfQUNLTkFLKSkKKyAgICB3YWl0X2VvcF9xIDw9IDEnYjE7CitlbHNlIGlmIChyeF9hY3RpdmVfcmlzZV93KQorICAgIHdhaXRfZW9wX3EgPD0gMSdiMTsKKworbG9jYWxwYXJhbSBUWF9JRlNfVyA9IDQ7CityZWcgW1RYX0lGU19XLTE6MF0gdHhfaWZzX3E7CisKK2Fsd2F5cyBAIChwb3NlZGdlIGNsa19pIG9yIG5lZ2VkZ2UgcnN0bl9pKQoraWYgKCFyc3RuX2kpCisgICAgdHhfaWZzX3EgPD0geyhUWF9JRlNfVyl7MSdiMH19OworLy8gU3RhcnQgY291bnRpbmcgZG93biBmcm9tIGxhc3QgVHggb3IgRU9QIGJlaW5nIGRldGVjdGVkIGF0IGVuZCBvZiBSeAorZWxzZSBpZiAod2FpdF9lb3BfcSB8fCBlb3BfZGV0ZWN0ZWRfdykKKyAgICB0eF9pZnNfcSA8PSBUWF9JRlM7CisvLyBEZWNyZW1lbnQgSUZTIGNvdW50ZXIKK2Vsc2UgaWYgKHR4X2lmc19xICE9ICB7KFRYX0lGU19XKXsxJ2IwfX0pCisgICAgdHhfaWZzX3EgPD0gdHhfaWZzX3EgLSAxOworCithc3NpZ24gaWZzX2J1c3lfdyA9IHdhaXRfZW9wX3EgfHwgKHR4X2lmc19xICE9IHsoVFhfSUZTX1cpezEnYjB9fSk7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFR4IFRpbWVyCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCithbHdheXMgQCAocG9zZWRnZSBjbGtfaSBvciBuZWdlZGdlIHJzdG5faSkKK2lmICghcnN0bl9pKQorICAgIGxhc3RfdHhfdGltZV9xIDw9IDknZDA7CisvLyBTdGFydCBjb3VudGluZyBmcm9tIGxhc3QgVHgKK2Vsc2UgaWYgKHN0YXRlX3EgPT0gU1RBVEVfSURMRSB8fCAodXRtaV90eHZhbGlkX28gJiYgdXRtaV90eHJlYWR5X2kpKQorICAgIGxhc3RfdHhfdGltZV9xIDw9IDknZDA7CisvLyBJbmNyZW1lbnQgdGhlIFR4IHRpbWVvdXQKK2Vsc2UgaWYgKGxhc3RfdHhfdGltZV9xICE9IFJYX1RJTUVPVVQpCisgICAgbGFzdF90eF90aW1lX3EgPD0gbGFzdF90eF90aW1lX3EgKyA5J2QxOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBUcmFuc21pdCAvIFJlY2VpdmUgY291bnRlcgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYWx3YXlzIEAgKHBvc2VkZ2UgY2xrX2kgb3IgbmVnZWRnZSByc3RuX2kpCitpZiAoIXJzdG5faSkKKyAgICBieXRlX2NvdW50X3EgPD0gMTYnaDAwMDA7CisvLyBOZXcgdHJhbnNmZXIgcmVxdWVzdCAobm90IGF1dG9tYXRpYyBTT0YgcmVxdWVzdCkKK2Vsc2UgaWYgKHN0YXRlX3EgPT0gU1RBVEVfSURMRSAmJiBzdGFydF9pICYmICFzb2ZfdHJhbnNmZXJfaSkKKyAgICBieXRlX2NvdW50X3EgPD0gZGF0YV9sZW5faTsKK2Vsc2UgaWYgKHN0YXRlX3EgPT0gU1RBVEVfUlhfV0FJVCkKKyAgICBieXRlX2NvdW50X3EgPD0gMTYnaDAwMDA7CisvLyBUcmFuc21pdCBieXRlCitlbHNlIGlmICgoc3RhdGVfcSA9PSBTVEFURV9UWF9QSUQgfHwgc3RhdGVfcSA9PSBTVEFURV9UWF9EQVRBKSAmJiB1dG1pX3R4cmVhZHlfaSkKK2JlZ2luCisgICAgLy8gQ291bnQgZG93biBkYXRhIGxlZnQgdG8gc2VuZAorICAgIGlmIChieXRlX2NvdW50X3EgIT0gMTYnZDApCisgICAgICAgIGJ5dGVfY291bnRfcSA8PSBieXRlX2NvdW50X3EgLSAxNidkMTsKK2VuZAorLy8gUmVjZWl2ZWQgYnl0ZQorZWxzZSBpZiAoc3RhdGVfcSA9PSBTVEFURV9SWF9EQVRBICYmIGRhdGFfcmVhZHlfdyAmJiAhY3JjX2J5dGVfdykKKyAgICBieXRlX2NvdW50X3EgPD0gYnl0ZV9jb3VudF9xICsgMTYnZDE7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFRyYW5zZmVyIHN0YXJ0IGFjaworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYWx3YXlzIEAgKHBvc2VkZ2UgY2xrX2kgb3IgbmVnZWRnZSByc3RuX2kpCitpZiAoIXJzdG5faSkKKyAgICBzdGFydF9hY2tfcSAgPD0gMSdiMDsKKy8vIEZpcnN0IGJ5dGUgb2YgUElEIHNlbnQsIGFjayB0cmFuc2ZlciByZXF1ZXN0CitlbHNlIGlmIChzdGF0ZV9xID09IFNUQVRFX1RYX1RPS0VOMSAmJiB1dG1pX3R4cmVhZHlfaSkKKyAgICBzdGFydF9hY2tfcSAgPD0gMSdiMTsKK2Vsc2UKKyAgICBzdGFydF9hY2tfcSAgPD0gMSdiMDsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUmVjb3JkIHJlcXVlc3QgZGV0YWlscworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYWx3YXlzIEAgKHBvc2VkZ2UgY2xrX2kgb3IgbmVnZWRnZSByc3RuX2kpCitpZiAoIXJzdG5faSkKK2JlZ2luCisgICAgaW5fdHJhbnNmZXJfcSAgIDw9IDEnYjA7CisgICAgc2VuZF9hY2tfcSAgICAgIDw9IDEnYjA7CisgICAgc2VuZF9kYXRhMV9xICAgIDw9IDEnYjA7CisgICAgc2VuZF9zb2ZfcSAgICAgIDw9IDEnYjA7CitlbmQKKy8vIFN0YXJ0IG9mIG5ldyByZXF1ZXN0CitlbHNlIGlmIChzdGF0ZV9xID09IFNUQVRFX0lETEUgJiYgc3RhcnRfaSkKK2JlZ2luCisgICAgLy8gVHJhbnNmZXIgcmVxdWVzdAorICAgIC8vIGUuZy4gKEgpU09GICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc29mX3RyYW5zZmVyX2ldCisgICAgLy8gICAgICAoSClPVVQgKyAoSClEQVRBICsgKEYpQUNLL05BQ0svU1RBTEwgICAgIFtkYXRhX2xlbl9pID49IDAgJiYgIWluX3RyYW5zZmVyX2ldCisgICAgLy8gICAgICAoSClJTiAgKyAoRilEQVRBICsgKEgpQUNLICAgICAgICAgICAgICAgIFtpbl90cmFuc2Zlcl9pXQorICAgIC8vICAgICAgKEgpSU4gICsgKEYpTkFLL1NUQUxMICAgICAgICAgICAgICAgICAgICBbaW5fdHJhbnNmZXJfaV0KKyAgICBpbl90cmFuc2Zlcl9xICAgPD0gaW5fdHJhbnNmZXJfaTsKKworICAgIC8vIFNlbmQgQUNLIGluIHJlc3BvbnNlIHRvIElOIERBVEEKKyAgICBzZW5kX2Fja19xICAgICAgPD0gaW5fdHJhbnNmZXJfaSAmJiByZXNwX2V4cGVjdGVkX2k7CisKKyAgICAvLyBEQVRBMC8xCisgICAgc2VuZF9kYXRhMV9xICAgIDw9IGRhdGFfaWR4X2k7CisKKyAgICBzZW5kX3NvZl9xICAgICAgPD0gc29mX3RyYW5zZmVyX2k7CitlbmQKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUmVzcG9uc2UgZXhwZWN0ZWQKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2Fsd2F5cyBAIChwb3NlZGdlIGNsa19pIG9yIG5lZ2VkZ2UgcnN0bl9pKQoraWYgKCFyc3RuX2kpCisgICAgd2FpdF9yZXNwX3EgPD0gMSdiMDsKKy8vIEluY29taW5nIGRhdGEKK2Vsc2UgaWYgKHN0YXRlX3EgPT0gU1RBVEVfUlhfV0FJVCAmJiBkYXRhX3JlYWR5X3cpCisgICAgd2FpdF9yZXNwX3EgPD0gMSdiMDsKK2Vsc2UgaWYgKHN0YXRlX3EgPT0gU1RBVEVfSURMRSAmJiBzdGFydF9pKQorICAgIHdhaXRfcmVzcF9xIDw9IHJlc3BfZXhwZWN0ZWRfaTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gU3RhdHVzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCithbHdheXMgQCAocG9zZWRnZSBjbGtfaSBvciBuZWdlZGdlIHJzdG5faSkKK2JlZ2luCisgICBpZiAoIXJzdG5faSkKKyAgIGJlZ2luCisgICAgICAgc3RhdHVzX3Jlc3BvbnNlX3EgICAgPD0gOCdoMDA7CisgICAgICAgc3RhdHVzX3RpbWVvdXRfcSAgICAgPD0gMSdiMDsKKyAgICAgICBzdGF0dXNfcnhfZG9uZV9xICAgICA8PSAxJ2IwOworICAgICAgIHN0YXR1c190eF9kb25lX3EgICAgIDw9IDEnYjA7CisgICBlbmQKKyAgIGVsc2UKKyAgIGJlZ2luCisgICAgICAgIGNhc2UgKHN0YXRlX3EpCisKKyAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAvLyBSWF9XQUlUCisgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgU1RBVEVfUlhfV0FJVCA6CisgICAgICAgIGJlZ2luCisgICAgICAgICAgIC8vIFN0b3JlIHJlc3BvbnNlIFBJRAorICAgICAgICAgICBpZiAoZGF0YV9yZWFkeV93KQorICAgICAgICAgICAgICAgc3RhdHVzX3Jlc3BvbnNlX3EgICA8PSByeF9kYXRhX3c7CisKKyAgICAgICAgICAgLy8gV2FpdGVkIGxvbmcgZW5vdWdoPworICAgICAgICAgICBpZiAocnhfcmVzcF90aW1lb3V0X3cpCisgICAgICAgICAgICAgICBzdGF0dXNfdGltZW91dF9xICAgIDw9IDEnYjE7CisKKyAgICAgICAgICAgIHN0YXR1c190eF9kb25lX3EgICAgIDw9IDEnYjA7CisgICAgICAgIGVuZAorICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIC8vIFJYX0RBVEEKKyAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBTVEFURV9SWF9EQVRBIDoKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgLy8gUmVjZWl2ZSBjb21wbGV0ZQorICAgICAgICAgICBpZiAoIXV0bWlfcnhhY3RpdmVfaSkKKyAgICAgICAgICAgICAgICBzdGF0dXNfcnhfZG9uZV9xICAgPD0gMSdiMTsKKyAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHN0YXR1c19yeF9kb25lX3EgICA8PSAxJ2IwOworICAgICAgICBlbmQKKyAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAvLyBUWF9DUkMgKHNlY29uZCBieXRlKQorICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIFNUQVRFX1RYX0NSQzIgOgorICAgICAgICBiZWdpbgorICAgICAgICAgICAgLy8gRGF0YSBzZW50PworICAgICAgICAgICAgaWYgKHV0bWlfdHhyZWFkeV9pICYmICF3YWl0X3Jlc3BfcSkKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgLy8gVHJhbnNmZXIgbm93IGNvbXBsZXRlCisgICAgICAgICAgICAgICAgc3RhdHVzX3R4X2RvbmVfcSAgICA8PSAxJ2IxOworICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIC8vIElETEUgLyBSRUNFSVZFIEJFR0lOCisgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgU1RBVEVfSURMRSA6CisgICAgICAgIGJlZ2luCisgICAgICAgICAgICAvLyBUcmFuc2ZlciByZXF1ZXN0CisgICAgICAgICAgICAvLyBlLmcuIChIKVNPRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NvZl90cmFuc2Zlcl9pXQorICAgICAgICAgICAgLy8gICAgICAoSClPVVQgKyAoSClEQVRBICsgKEYpQUNLL05BQ0svU1RBTEwgICAgIFtkYXRhX2xlbl9pID49IDAgJiYgIWluX3RyYW5zZmVyX2ldCisgICAgICAgICAgICAvLyAgICAgIChIKUlOICArIChGKURBVEEgKyAoSClBQ0sgICAgICAgICAgICAgICAgW2luX3RyYW5zZmVyX2ldCisgICAgICAgICAgICAvLyAgICAgIChIKUlOICArIChGKU5BSy9TVEFMTCAgICAgICAgICAgICAgICAgICAgW2luX3RyYW5zZmVyX2ldCisgICAgICAgICAgICBpZiAoc3RhcnRfaSAmJiAhc29mX3RyYW5zZmVyX2kpIC8vIChub3QgYXV0b21hdGljIFNPRiByZXF1ZXN0KQorICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAvLyBDbGVhciBzdGF0dXMKKyAgICAgICAgICAgICAgICBzdGF0dXNfcmVzcG9uc2VfcSAgICAgICA8PSA4J2gwMDsKKyAgICAgICAgICAgICAgICBzdGF0dXNfdGltZW91dF9xICAgICAgICA8PSAxJ2IwOworICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgIHN0YXR1c19yeF9kb25lX3EgICAgIDw9IDEnYjA7CisgICAgICAgICAgICBzdGF0dXNfdHhfZG9uZV9xICAgICA8PSAxJ2IwOworICAgICAgICBlbmQKKyAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAvLyBERUZBVUxUCisgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gICAgICAgIAorICAgICAgICBkZWZhdWx0IDoKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIHN0YXR1c19yeF9kb25lX3EgICAgIDw9IDEnYjA7CisgICAgICAgICAgICBzdGF0dXNfdHhfZG9uZV9xICAgICA8PSAxJ2IwOworICAgICAgICBlbmQKKyAgICAgICBlbmRjYXNlCisgICBlbmQKK2VuZAorCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIERhdGEgZGVsYXkgKHRvIHN0cmlwIHRoZSBDUkMxNiB0cmFpbGluZyBieXRlcykKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3JlZyBbMzE6MF0gZGF0YV9idWZmZXJfcTsKK3JlZyBbMzowXSAgZGF0YV92YWxpZF9xOworcmVnIFszOjBdICByeF9hY3RpdmVfcTsKKword2lyZSBzaGlmdF9lbl93ID0gKHV0bWlfcnh2YWxpZF9pICYgdXRtaV9yeGFjdGl2ZV9pKSB8fCAhdXRtaV9yeGFjdGl2ZV9pOworCithbHdheXMgQCAocG9zZWRnZSBjbGtfaSBvciBuZWdlZGdlIHJzdG5faSkKK2lmICghcnN0bl9pKQorICAgIGRhdGFfYnVmZmVyX3EgPD0gMzInYjA7CitlbHNlIGlmIChzaGlmdF9lbl93KQorICAgIGRhdGFfYnVmZmVyX3EgPD0ge3V0bWlfZGF0YV9pLCBkYXRhX2J1ZmZlcl9xWzMxOjhdfTsKKworYWx3YXlzIEAgKHBvc2VkZ2UgY2xrX2kgb3IgbmVnZWRnZSByc3RuX2kpCitpZiAoIXJzdG5faSkKKyAgICBkYXRhX3ZhbGlkX3EgPD0gNCdiMDsKK2Vsc2UgaWYgKHNoaWZ0X2VuX3cpCisgICAgZGF0YV92YWxpZF9xIDw9IHsodXRtaV9yeHZhbGlkX2kgJiB1dG1pX3J4YWN0aXZlX2kpLCBkYXRhX3ZhbGlkX3FbMzoxXX07CitlbHNlCisgICAgZGF0YV92YWxpZF9xIDw9IHtkYXRhX3ZhbGlkX3FbMzoxXSwgMSdiMH07CisKK3JlZyBbMTowXSBkYXRhX2NyY19xOworYWx3YXlzIEAgKHBvc2VkZ2UgY2xrX2kgb3IgbmVnZWRnZSByc3RuX2kpCitpZiAoIXJzdG5faSkKKyAgICBkYXRhX2NyY19xIDw9IDInYjA7CitlbHNlIGlmIChzaGlmdF9lbl93KQorICAgIGRhdGFfY3JjX3EgPD0geyF1dG1pX3J4YWN0aXZlX2ksIGRhdGFfY3JjX3FbMV19OworCithbHdheXMgQCAocG9zZWRnZSBjbGtfaSBvciBuZWdlZGdlIHJzdG5faSkKK2lmICghcnN0bl9pKQorICAgIHJ4X2FjdGl2ZV9xIDw9IDQnYjA7CitlbHNlCisgICAgcnhfYWN0aXZlX3EgPD0ge3V0bWlfcnhhY3RpdmVfaSwgcnhfYWN0aXZlX3FbMzoxXX07CisKK2Fzc2lnbiByeF9kYXRhX3cgICAgPSBkYXRhX2J1ZmZlcl9xWzc6MF07Cithc3NpZ24gZGF0YV9yZWFkeV93ID0gZGF0YV92YWxpZF9xWzBdOworYXNzaWduIGNyY19ieXRlX3cgICA9IGRhdGFfY3JjX3FbMF07Cithc3NpZ24gcnhfYWN0aXZlX3cgID0gcnhfYWN0aXZlX3FbMF07CisKK2Fzc2lnbiByeF9hY3RpdmVfcmlzZV93ID0gIXJ4X2FjdGl2ZV9xWzNdICYmIHV0bWlfcnhhY3RpdmVfaTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gQ1JDCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vIENSQzE2IChEYXRhKQordXNiaF9jcmMxNgordV9jcmMxNgorKAorICAgIC5jcmNfaShjcmNfc3VtX3EpLAorICAgIC5kYXRhX2koY3JjX2RhdGFfaW5fdyksCisgICAgLmNyY19vKGNyY19vdXRfdykKKyk7CisKKy8vIENSQzUgKFRva2VuKQordXNiaF9jcmM1Cit1X2NyYzUKKygKKyAgICAuY3JjX2koNSdoMUYpLAorICAgIC5kYXRhX2kodG9rZW5fcVsxNTo1XSksCisgICAgLmNyY19vKGNyYzVfb3V0X3cpCispOworCisvLyBDUkMgY29udHJvbCAvIGNoZWNrCithbHdheXMgQCAocG9zZWRnZSBjbGtfaSBvciBuZWdlZGdlIHJzdG5faSkKK2JlZ2luCisgICBpZiAoIXJzdG5faSkKKyAgIGJlZ2luCisgICAgICAgY3JjX3N1bV9xICAgICAgICAgIDw9IDE2J2hGRkZGOworICAgICAgIHN0YXR1c19jcmNfZXJyX3EgICA8PSAxJ2IwOworICAgZW5kCisgICBlbHNlCisgICBiZWdpbgorICAgICAgICBjYXNlIChzdGF0ZV9xKQorICAgICAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgLy8gVFhfUElECisgICAgICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICBTVEFURV9UWF9QSUQgOgorICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAvLyBGaXJzdCBieXRlIGlzIFBJRCAobm90IENSQydkKSwgcmVzZXQgQ1JDMTYKKyAgICAgICAgICAgICAgICBjcmNfc3VtX3EgICAgICA8PSAxNidoRkZGRjsKKyAgICAgICAgICAgIGVuZCAgICAgICAgCisgICAgICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAvLyBUWF9EQVRBCisgICAgICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICBTVEFURV9UWF9EQVRBIDoKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgLy8gRGF0YSBzZW50PworICAgICAgICAgICAgICAgIGlmICh1dG1pX3R4cmVhZHlfaSkKKyAgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAvLyBOZXh0IENSQyBzdGFydCB2YWx1ZQorICAgICAgICAgICAgICAgICAgICBjcmNfc3VtX3EgICAgICA8PSBjcmNfb3V0X3c7CisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgIC8vIFJYX1dBSVQKKyAgICAgICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgIFNUQVRFX1JYX1dBSVQgOgorICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAvLyBSZXNldCBDUkMxNgorICAgICAgICAgICAgICAgIGNyY19zdW1fcSAgIDw9IDE2J2hGRkZGOworICAgICAgICAgICAgZW5kICAgICAgICAgICAgCisgICAgICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAvLyBSWF9EQVRBCisgICAgICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICBTVEFURV9SWF9EQVRBIDoKKyAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAvLyBEYXRhIHJlY2VpdmVkPworICAgICAgICAgICAgICAgaWYgKGRhdGFfcmVhZHlfdykKKyAgICAgICAgICAgICAgIGJlZ2luCisgICAgICAgICAgICAgICAgICAgLy8gTmV4dCBDUkMgc3RhcnQgdmFsdWUKKyAgICAgICAgICAgICAgICAgICBjcmNfc3VtX3EgICAgICAgICAgPD0gY3JjX291dF93OworICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAvLyBSZWNlaXZlIGNvbXBsZXRlCisgICAgICAgICAgICAgICBlbHNlIGlmICghcnhfYWN0aXZlX3cpCisgICAgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgICAgICAvLyBJZiBzb21lIGRhdGEgcmVjZWl2ZWQsIGNoZWNrIENSQworICAgICAgICAgICAgICAgICAgICBpZiAoY3JjX2Vycm9yX3cpCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNfY3JjX2Vycl9xICAgPD0gMSdiMTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzX2NyY19lcnJfcSAgIDw9IDEnYjA7CisgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAvLyBJRExFIC8gUkVDRUlWRSBCRUdJTgorICAgICAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgU1RBVEVfSURMRSA6CisgICAgICAgICAgICBiZWdpbgorICAgICAgICAgICAgICAgLy8gU3RhcnQgdHJhbnNmZXIgcmVxdWVzdAorICAgICAgICAgICAgICAgaWYgKHN0YXJ0X2kgJiYgIXNvZl90cmFuc2Zlcl9pKQorICAgICAgICAgICAgICAgYmVnaW4KKyAgICAgICAgICAgICAgICAgIC8vIENsZWFyIGVycm9yIGZsYWchCisgICAgICAgICAgICAgICAgICBzdGF0dXNfY3JjX2Vycl9xICA8PSAxJ2IwOworICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgZGVmYXVsdCA6CisgICAgICAgICAgICAgICA7CisgICAgICAgIGVuZGNhc2UKKyAgIGVuZAorZW5kCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEFzc2lnbm1lbnRzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXJlIFsxNTowXSB0b2tlbl9yZXZfdzsKKworZ2VudmFyIGk7CitnZW5lcmF0ZQorZm9yIChpPTA7IGkgPCAxNjsgaT1pKzEpIAorYmVnaW4gOiBMT09QCisgICAgYXNzaWduIHRva2VuX3Jldl93W2ldID0gdG9rZW5fcVsxNS1pXTsKK2VuZAorZW5kZ2VuZXJhdGUKKworcmVnICAgICAgIHV0bWlfdHh2YWxpZF9yOworcmVnIFs3OjBdIHV0bWlfZGF0YV9yOworCithbHdheXMgQCAqCitiZWdpbgorICAgIGlmIChzdGF0ZV9xID09IFNUQVRFX1RYX0NSQzEpCisgICAgYmVnaW4KKyAgICAgICAgdXRtaV90eHZhbGlkX3IgPSAxJ2IxOworICAgICAgICB1dG1pX2RhdGFfciAgICA9IGNyY19zdW1fcVs3OjBdIF4gOCdoRkY7CisgICAgZW5kCisgICAgZWxzZSBpZiAoc3RhdGVfcSA9PSBTVEFURV9UWF9DUkMyKQorICAgIGJlZ2luCisgICAgICAgIHV0bWlfdHh2YWxpZF9yID0gMSdiMTsKKyAgICAgICAgdXRtaV9kYXRhX3IgICAgPSBjcmNfc3VtX3FbMTU6OF0gXiA4J2hGRjsKKyAgICBlbmQKKyAgICBlbHNlIGlmIChzdGF0ZV9xID09IFNUQVRFX1RYX1RPS0VOMSkKKyAgICBiZWdpbgorICAgICAgICB1dG1pX3R4dmFsaWRfciA9IDEnYjE7CisgICAgICAgIHV0bWlfZGF0YV9yICAgID0gdG9rZW5fcGlkX2k7CisgICAgZW5kCisgICAgZWxzZSBpZiAoc3RhdGVfcSA9PSBTVEFURV9UWF9UT0tFTjIpCisgICAgYmVnaW4KKyAgICAgICAgdXRtaV90eHZhbGlkX3IgPSAxJ2IxOworICAgICAgICB1dG1pX2RhdGFfciAgICA9IHRva2VuX3Jldl93Wzc6MF07CisgICAgZW5kCisgICAgZWxzZSBpZiAoc3RhdGVfcSA9PSBTVEFURV9UWF9UT0tFTjMpCisgICAgYmVnaW4KKyAgICAgICAgdXRtaV90eHZhbGlkX3IgPSAxJ2IxOworICAgICAgICB1dG1pX2RhdGFfciAgICA9IHRva2VuX3Jldl93WzE1OjhdOworICAgIGVuZAorICAgIGVsc2UgaWYgKHN0YXRlX3EgPT0gU1RBVEVfVFhfUElEKQorICAgIGJlZ2luCisgICAgICAgIHV0bWlfdHh2YWxpZF9yID0gMSdiMTsKKyAgICAgICAgdXRtaV9kYXRhX3IgICAgPSBzZW5kX2RhdGExX3EgPyBQSURfREFUQTEgOiBQSURfREFUQTA7CisgICAgZW5kCisgICAgZWxzZSBpZiAoc3RhdGVfcSA9PSBTVEFURV9UWF9BQ0tOQUspCisgICAgYmVnaW4KKyAgICAgICAgdXRtaV90eHZhbGlkX3IgPSAxJ2IxOworICAgICAgICB1dG1pX2RhdGFfciAgICA9IFBJRF9BQ0s7CisgICAgZW5kCisgICAgZWxzZSBpZiAoc3RhdGVfcSA9PSBTVEFURV9UWF9EQVRBKQorICAgIGJlZ2luCisgICAgICAgIHV0bWlfdHh2YWxpZF9yID0gMSdiMTsKKyAgICAgICAgdXRtaV9kYXRhX3IgICAgPSB0eF9kYXRhX2k7CisgICAgZW5kCisgICAgZWxzZQorICAgIGJlZ2luCisgICAgICAgIHV0bWlfdHh2YWxpZF9yID0gMSdiMDsKKyAgICAgICAgdXRtaV9kYXRhX3IgICAgPSA4J2IwOworICAgIGVuZAorZW5kCisKK2Fzc2lnbiB1dG1pX3R4dmFsaWRfbyA9IHV0bWlfdHh2YWxpZF9yOworYXNzaWduIHV0bWlfZGF0YV9vICAgID0gdXRtaV9kYXRhX3I7CisKKy8vIFB1c2ggaW5jb21pbmcgZGF0YSBpbnRvIEZJRk8gKG5vdCBQSUQgb3IgQ1JDKQorYXNzaWduIHJ4X2RhdGFfbyAgICA9IHJ4X2RhdGFfdzsKK2Fzc2lnbiByeF9wdXNoX28gICAgPSAoc3RhdGVfcSAhPSBTVEFURV9JRExFICYmIHN0YXRlX3EgIT0gU1RBVEVfUlhfV0FJVCkgJiBkYXRhX3JlYWR5X3cgJiAhY3JjX2J5dGVfdzsKKworYXNzaWduIGNyY19kYXRhX2luX3cgPSAoc3RhdGVfcSA9PSBTVEFURV9SWF9EQVRBKSA/IHJ4X2RhdGFfdyA6IHR4X2RhdGFfaTsKKworYXNzaWduIHJ4X2NvdW50X28gICA9IGJ5dGVfY291bnRfcTsKK2Fzc2lnbiBpZGxlX28gICAgICAgPSAoc3RhdGVfcSA9PSBTVEFURV9JRExFKTsKKworYXNzaWduIGFja19vICAgICAgICA9IHN0YXJ0X2Fja19xOworCithc3NpZ24gdHhfcG9wX28gICAgID0gc3RhdGVfcSA9PSBTVEFURV9UWF9EQVRBICYmIHV0bWlfdHhyZWFkeV9pOworCithc3NpZ24gdHhfZG9uZV9vICAgID0gc3RhdHVzX3R4X2RvbmVfcTsKK2Fzc2lnbiByeF9kb25lX28gICAgPSBzdGF0dXNfcnhfZG9uZV9xOworYXNzaWduIGNyY19lcnJfbyAgICA9IHN0YXR1c19jcmNfZXJyX3E7Cithc3NpZ24gdGltZW91dF9vICAgID0gc3RhdHVzX3RpbWVvdXRfcTsKK2Fzc2lnbiByZXNwb25zZV9vICAgPSBzdGF0dXNfcmVzcG9uc2VfcTsKKworCisKK2VuZG1vZHVsZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvdXNiMV9ob3N0L3NyYy9maWxlbGlzdC5mIGIvdmVyaWxvZy9ydGwvdXNiMV9ob3N0L3NyYy9maWxlbGlzdC5mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyODg0NDMKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC91c2IxX2hvc3Qvc3JjL2ZpbGVsaXN0LmYKQEAgLTAsMCArMSwxMCBAQAorY29yZS91c2JoX2NvcmUuc3YKK2NvcmUvdXNiaF9jcmMxNi5zdgorY29yZS91c2JoX2NyYzUuc3YKK2NvcmUvdXNiaF9maWZvLnN2Citjb3JlL3VzYmhfc2llLnN2CitwaHkvdXNiX2ZzX3BoeS52CitwaHkvdXNiX3RyYW5zY2VpdmVyLnYKK2xpYi9hc3luY193Yi5zdgorbGliL2FzeW5jX2ZpZm8uc3YKK3RvcC91c2IxX2hvc3Quc3YgCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC91c2IxX2hvc3Qvc3JjL2luY2x1ZGVzL3VzYmhfaG9zdF9kZWZzLnYgYi92ZXJpbG9nL3J0bC91c2IxX2hvc3Qvc3JjL2luY2x1ZGVzL3VzYmhfaG9zdF9kZWZzLnYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWMwNDQxZAotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL3VzYjFfaG9zdC9zcmMvaW5jbHVkZXMvdXNiaF9ob3N0X2RlZnMudgpAQCAtMCwwICsxLDMyNSBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxICwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgIAorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IENyZWF0ZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKy8vCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgICAgICAgICAgICAgICAgICAgIFVTQiBGdWxsIFNwZWVkIEhvc3QKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgVjAuNgorLy8gICAgICAgICAgICAgICAgICAgICBVbHRyYS1FbWJlZGRlZC5jb20KKy8vICAgICAgICAgICAgICAgICAgICAgQ29weXJpZ2h0IDIwMTUtMjAyMAorLy8KKy8vICAgICAgICAgICAgICAgICBFbWFpbDogYWRtaW5AdWx0cmEtZW1iZWRkZWQuY29tCisvLworLy8gICAgICAgICAgICAgICAgICAgICAgICAgTGljZW5zZTogR1BMCisvLyBJZiB5b3Ugd291bGQgbGlrZSBhIHZlcnNpb24gd2l0aCBhIG1vcmUgcGVybWlzc2l2ZSBsaWNlbnNlIGZvcgorLy8gdXNlIGluIGNsb3NlZCBzb3VyY2UgY29tbWVyY2lhbCBhcHBsaWNhdGlvbnMgcGxlYXNlIGNvbnRhY3QgbWUKKy8vIGZvciBkZXRhaWxzLgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8KKy8vIFRoaXMgZmlsZSBpcyBvcGVuIHNvdXJjZSBIREw7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciAKKy8vIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIAorLy8gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgCisvLyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKy8vCisvLyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorLy8KKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyAKKy8vIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGZpbGU7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKy8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcKKy8vIFVTQQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgR2VuZXJhdGVkIEZpbGUKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYGRlZmluZSBVU0JfQ1RSTCAgICA2J2gwCisKKyAgICBgZGVmaW5lIFVTQl9DVFJMX1RYX0ZMVVNIICAgICAgOAorICAgIGBkZWZpbmUgVVNCX0NUUkxfVFhfRkxVU0hfREVGQVVMVCAgICAwCisgICAgYGRlZmluZSBVU0JfQ1RSTF9UWF9GTFVTSF9CICAgICAgICAgIDgKKyAgICBgZGVmaW5lIFVTQl9DVFJMX1RYX0ZMVVNIX1QgICAgICAgICAgOAorICAgIGBkZWZpbmUgVVNCX0NUUkxfVFhfRkxVU0hfVyAgICAgICAgICAxCisgICAgYGRlZmluZSBVU0JfQ1RSTF9UWF9GTFVTSF9SICAgICAgICAgIDg6OAorCisgICAgYGRlZmluZSBVU0JfQ1RSTF9QSFlfRE1QVUxMRE9XTiAgICAgIDcKKyAgICBgZGVmaW5lIFVTQl9DVFJMX1BIWV9ETVBVTExET1dOX0RFRkFVTFQgICAgMAorICAgIGBkZWZpbmUgVVNCX0NUUkxfUEhZX0RNUFVMTERPV05fQiAgICAgICAgICA3CisgICAgYGRlZmluZSBVU0JfQ1RSTF9QSFlfRE1QVUxMRE9XTl9UICAgICAgICAgIDcKKyAgICBgZGVmaW5lIFVTQl9DVFJMX1BIWV9ETVBVTExET1dOX1cgICAgICAgICAgMQorICAgIGBkZWZpbmUgVVNCX0NUUkxfUEhZX0RNUFVMTERPV05fUiAgICAgICAgICA3OjcKKworICAgIGBkZWZpbmUgVVNCX0NUUkxfUEhZX0RQUFVMTERPV04gICAgICA2CisgICAgYGRlZmluZSBVU0JfQ1RSTF9QSFlfRFBQVUxMRE9XTl9ERUZBVUxUICAgIDAKKyAgICBgZGVmaW5lIFVTQl9DVFJMX1BIWV9EUFBVTExET1dOX0IgICAgICAgICAgNgorICAgIGBkZWZpbmUgVVNCX0NUUkxfUEhZX0RQUFVMTERPV05fVCAgICAgICAgICA2CisgICAgYGRlZmluZSBVU0JfQ1RSTF9QSFlfRFBQVUxMRE9XTl9XICAgICAgICAgIDEKKyAgICBgZGVmaW5lIFVTQl9DVFJMX1BIWV9EUFBVTExET1dOX1IgICAgICAgICAgNjo2CisKKyAgICBgZGVmaW5lIFVTQl9DVFJMX1BIWV9URVJNU0VMRUNUICAgICAgNQorICAgIGBkZWZpbmUgVVNCX0NUUkxfUEhZX1RFUk1TRUxFQ1RfREVGQVVMVCAgICAwCisgICAgYGRlZmluZSBVU0JfQ1RSTF9QSFlfVEVSTVNFTEVDVF9CICAgICAgICAgIDUKKyAgICBgZGVmaW5lIFVTQl9DVFJMX1BIWV9URVJNU0VMRUNUX1QgICAgICAgICAgNQorICAgIGBkZWZpbmUgVVNCX0NUUkxfUEhZX1RFUk1TRUxFQ1RfVyAgICAgICAgICAxCisgICAgYGRlZmluZSBVU0JfQ1RSTF9QSFlfVEVSTVNFTEVDVF9SICAgICAgICAgIDU6NQorCisgICAgYGRlZmluZSBVU0JfQ1RSTF9QSFlfWENWUlNFTEVDVF9ERUZBVUxUICAgIDAKKyAgICBgZGVmaW5lIFVTQl9DVFJMX1BIWV9YQ1ZSU0VMRUNUX0IgICAgICAgICAgMworICAgIGBkZWZpbmUgVVNCX0NUUkxfUEhZX1hDVlJTRUxFQ1RfVCAgICAgICAgICA0CisgICAgYGRlZmluZSBVU0JfQ1RSTF9QSFlfWENWUlNFTEVDVF9XICAgICAgICAgIDIKKyAgICBgZGVmaW5lIFVTQl9DVFJMX1BIWV9YQ1ZSU0VMRUNUX1IgICAgICAgICAgNDozCisKKyAgICBgZGVmaW5lIFVTQl9DVFJMX1BIWV9PUE1PREVfREVGQVVMVCAgICAwCisgICAgYGRlZmluZSBVU0JfQ1RSTF9QSFlfT1BNT0RFX0IgICAgICAgICAgMQorICAgIGBkZWZpbmUgVVNCX0NUUkxfUEhZX09QTU9ERV9UICAgICAgICAgIDIKKyAgICBgZGVmaW5lIFVTQl9DVFJMX1BIWV9PUE1PREVfVyAgICAgICAgICAyCisgICAgYGRlZmluZSBVU0JfQ1RSTF9QSFlfT1BNT0RFX1IgICAgICAgICAgMjoxCisKKyAgICBgZGVmaW5lIFVTQl9DVFJMX0VOQUJMRV9TT0YgICAgICAwCisgICAgYGRlZmluZSBVU0JfQ1RSTF9FTkFCTEVfU09GX0RFRkFVTFQgICAgMAorICAgIGBkZWZpbmUgVVNCX0NUUkxfRU5BQkxFX1NPRl9CICAgICAgICAgIDAKKyAgICBgZGVmaW5lIFVTQl9DVFJMX0VOQUJMRV9TT0ZfVCAgICAgICAgICAwCisgICAgYGRlZmluZSBVU0JfQ1RSTF9FTkFCTEVfU09GX1cgICAgICAgICAgMQorICAgIGBkZWZpbmUgVVNCX0NUUkxfRU5BQkxFX1NPRl9SICAgICAgICAgIDA6MAorCitgZGVmaW5lIFVTQl9TVEFUVVMgICAgNidoNAorCisgICAgYGRlZmluZSBVU0JfU1RBVFVTX1NPRl9USU1FX0RFRkFVTFQgICAgMAorICAgIGBkZWZpbmUgVVNCX1NUQVRVU19TT0ZfVElNRV9CICAgICAgICAgIDE2CisgICAgYGRlZmluZSBVU0JfU1RBVFVTX1NPRl9USU1FX1QgICAgICAgICAgMzEKKyAgICBgZGVmaW5lIFVTQl9TVEFUVVNfU09GX1RJTUVfVyAgICAgICAgICAxNgorICAgIGBkZWZpbmUgVVNCX1NUQVRVU19TT0ZfVElNRV9SICAgICAgICAgIDMxOjE2CisKKyAgICBgZGVmaW5lIFVTQl9TVEFUVVNfUlhfRVJST1IgICAgICAyCisgICAgYGRlZmluZSBVU0JfU1RBVFVTX1JYX0VSUk9SX0RFRkFVTFQgICAgMAorICAgIGBkZWZpbmUgVVNCX1NUQVRVU19SWF9FUlJPUl9CICAgICAgICAgIDIKKyAgICBgZGVmaW5lIFVTQl9TVEFUVVNfUlhfRVJST1JfVCAgICAgICAgICAyCisgICAgYGRlZmluZSBVU0JfU1RBVFVTX1JYX0VSUk9SX1cgICAgICAgICAgMQorICAgIGBkZWZpbmUgVVNCX1NUQVRVU19SWF9FUlJPUl9SICAgICAgICAgIDI6MgorCisgICAgYGRlZmluZSBVU0JfU1RBVFVTX0xJTkVTVEFURV9CSVRTX0RFRkFVTFQgICAgMAorICAgIGBkZWZpbmUgVVNCX1NUQVRVU19MSU5FU1RBVEVfQklUU19CICAgICAgICAgIDAKKyAgICBgZGVmaW5lIFVTQl9TVEFUVVNfTElORVNUQVRFX0JJVFNfVCAgICAgICAgICAxCisgICAgYGRlZmluZSBVU0JfU1RBVFVTX0xJTkVTVEFURV9CSVRTX1cgICAgICAgICAgMgorICAgIGBkZWZpbmUgVVNCX1NUQVRVU19MSU5FU1RBVEVfQklUU19SICAgICAgICAgIDE6MAorCitgZGVmaW5lIFVTQl9JUlFfQUNLICAgIDYnaDgKKworICAgIGBkZWZpbmUgVVNCX0lSUV9BQ0tfREVWSUNFX0RFVEVDVCAgICAgIDMKKyAgICBgZGVmaW5lIFVTQl9JUlFfQUNLX0RFVklDRV9ERVRFQ1RfREVGQVVMVCAgICAwCisgICAgYGRlZmluZSBVU0JfSVJRX0FDS19ERVZJQ0VfREVURUNUX0IgICAgICAgICAgMworICAgIGBkZWZpbmUgVVNCX0lSUV9BQ0tfREVWSUNFX0RFVEVDVF9UICAgICAgICAgIDMKKyAgICBgZGVmaW5lIFVTQl9JUlFfQUNLX0RFVklDRV9ERVRFQ1RfVyAgICAgICAgICAxCisgICAgYGRlZmluZSBVU0JfSVJRX0FDS19ERVZJQ0VfREVURUNUX1IgICAgICAgICAgMzozCisKKyAgICBgZGVmaW5lIFVTQl9JUlFfQUNLX0VSUiAgICAgIDIKKyAgICBgZGVmaW5lIFVTQl9JUlFfQUNLX0VSUl9ERUZBVUxUICAgIDAKKyAgICBgZGVmaW5lIFVTQl9JUlFfQUNLX0VSUl9CICAgICAgICAgIDIKKyAgICBgZGVmaW5lIFVTQl9JUlFfQUNLX0VSUl9UICAgICAgICAgIDIKKyAgICBgZGVmaW5lIFVTQl9JUlFfQUNLX0VSUl9XICAgICAgICAgIDEKKyAgICBgZGVmaW5lIFVTQl9JUlFfQUNLX0VSUl9SICAgICAgICAgIDI6MgorCisgICAgYGRlZmluZSBVU0JfSVJRX0FDS19ET05FICAgICAgMQorICAgIGBkZWZpbmUgVVNCX0lSUV9BQ0tfRE9ORV9ERUZBVUxUICAgIDAKKyAgICBgZGVmaW5lIFVTQl9JUlFfQUNLX0RPTkVfQiAgICAgICAgICAxCisgICAgYGRlZmluZSBVU0JfSVJRX0FDS19ET05FX1QgICAgICAgICAgMQorICAgIGBkZWZpbmUgVVNCX0lSUV9BQ0tfRE9ORV9XICAgICAgICAgIDEKKyAgICBgZGVmaW5lIFVTQl9JUlFfQUNLX0RPTkVfUiAgICAgICAgICAxOjEKKworICAgIGBkZWZpbmUgVVNCX0lSUV9BQ0tfU09GICAgICAgMAorICAgIGBkZWZpbmUgVVNCX0lSUV9BQ0tfU09GX0RFRkFVTFQgICAgMAorICAgIGBkZWZpbmUgVVNCX0lSUV9BQ0tfU09GX0IgICAgICAgICAgMAorICAgIGBkZWZpbmUgVVNCX0lSUV9BQ0tfU09GX1QgICAgICAgICAgMAorICAgIGBkZWZpbmUgVVNCX0lSUV9BQ0tfU09GX1cgICAgICAgICAgMQorICAgIGBkZWZpbmUgVVNCX0lSUV9BQ0tfU09GX1IgICAgICAgICAgMDowCisKK2BkZWZpbmUgVVNCX0lSUV9TVFMgICAgNidoYworCisgICAgYGRlZmluZSBVU0JfSVJRX1NUU19ERVZJQ0VfREVURUNUICAgICAgMworICAgIGBkZWZpbmUgVVNCX0lSUV9TVFNfREVWSUNFX0RFVEVDVF9ERUZBVUxUICAgIDAKKyAgICBgZGVmaW5lIFVTQl9JUlFfU1RTX0RFVklDRV9ERVRFQ1RfQiAgICAgICAgICAzCisgICAgYGRlZmluZSBVU0JfSVJRX1NUU19ERVZJQ0VfREVURUNUX1QgICAgICAgICAgMworICAgIGBkZWZpbmUgVVNCX0lSUV9TVFNfREVWSUNFX0RFVEVDVF9XICAgICAgICAgIDEKKyAgICBgZGVmaW5lIFVTQl9JUlFfU1RTX0RFVklDRV9ERVRFQ1RfUiAgICAgICAgICAzOjMKKworICAgIGBkZWZpbmUgVVNCX0lSUV9TVFNfRVJSICAgICAgMgorICAgIGBkZWZpbmUgVVNCX0lSUV9TVFNfRVJSX0RFRkFVTFQgICAgMAorICAgIGBkZWZpbmUgVVNCX0lSUV9TVFNfRVJSX0IgICAgICAgICAgMgorICAgIGBkZWZpbmUgVVNCX0lSUV9TVFNfRVJSX1QgICAgICAgICAgMgorICAgIGBkZWZpbmUgVVNCX0lSUV9TVFNfRVJSX1cgICAgICAgICAgMQorICAgIGBkZWZpbmUgVVNCX0lSUV9TVFNfRVJSX1IgICAgICAgICAgMjoyCisKKyAgICBgZGVmaW5lIFVTQl9JUlFfU1RTX0RPTkUgICAgICAxCisgICAgYGRlZmluZSBVU0JfSVJRX1NUU19ET05FX0RFRkFVTFQgICAgMAorICAgIGBkZWZpbmUgVVNCX0lSUV9TVFNfRE9ORV9CICAgICAgICAgIDEKKyAgICBgZGVmaW5lIFVTQl9JUlFfU1RTX0RPTkVfVCAgICAgICAgICAxCisgICAgYGRlZmluZSBVU0JfSVJRX1NUU19ET05FX1cgICAgICAgICAgMQorICAgIGBkZWZpbmUgVVNCX0lSUV9TVFNfRE9ORV9SICAgICAgICAgIDE6MQorCisgICAgYGRlZmluZSBVU0JfSVJRX1NUU19TT0YgICAgICAwCisgICAgYGRlZmluZSBVU0JfSVJRX1NUU19TT0ZfREVGQVVMVCAgICAwCisgICAgYGRlZmluZSBVU0JfSVJRX1NUU19TT0ZfQiAgICAgICAgICAwCisgICAgYGRlZmluZSBVU0JfSVJRX1NUU19TT0ZfVCAgICAgICAgICAwCisgICAgYGRlZmluZSBVU0JfSVJRX1NUU19TT0ZfVyAgICAgICAgICAxCisgICAgYGRlZmluZSBVU0JfSVJRX1NUU19TT0ZfUiAgICAgICAgICAwOjAKKworYGRlZmluZSBVU0JfSVJRX01BU0sgICAgNidoMTAKKworICAgIGBkZWZpbmUgVVNCX0lSUV9NQVNLX0RFVklDRV9ERVRFQ1QgICAgICAzCisgICAgYGRlZmluZSBVU0JfSVJRX01BU0tfREVWSUNFX0RFVEVDVF9ERUZBVUxUICAgIDAKKyAgICBgZGVmaW5lIFVTQl9JUlFfTUFTS19ERVZJQ0VfREVURUNUX0IgICAgICAgICAgMworICAgIGBkZWZpbmUgVVNCX0lSUV9NQVNLX0RFVklDRV9ERVRFQ1RfVCAgICAgICAgICAzCisgICAgYGRlZmluZSBVU0JfSVJRX01BU0tfREVWSUNFX0RFVEVDVF9XICAgICAgICAgIDEKKyAgICBgZGVmaW5lIFVTQl9JUlFfTUFTS19ERVZJQ0VfREVURUNUX1IgICAgICAgICAgMzozCisKKyAgICBgZGVmaW5lIFVTQl9JUlFfTUFTS19FUlIgICAgICAyCisgICAgYGRlZmluZSBVU0JfSVJRX01BU0tfRVJSX0RFRkFVTFQgICAgMAorICAgIGBkZWZpbmUgVVNCX0lSUV9NQVNLX0VSUl9CICAgICAgICAgIDIKKyAgICBgZGVmaW5lIFVTQl9JUlFfTUFTS19FUlJfVCAgICAgICAgICAyCisgICAgYGRlZmluZSBVU0JfSVJRX01BU0tfRVJSX1cgICAgICAgICAgMQorICAgIGBkZWZpbmUgVVNCX0lSUV9NQVNLX0VSUl9SICAgICAgICAgIDI6MgorCisgICAgYGRlZmluZSBVU0JfSVJRX01BU0tfRE9ORSAgICAgIDEKKyAgICBgZGVmaW5lIFVTQl9JUlFfTUFTS19ET05FX0RFRkFVTFQgICAgMAorICAgIGBkZWZpbmUgVVNCX0lSUV9NQVNLX0RPTkVfQiAgICAgICAgICAxCisgICAgYGRlZmluZSBVU0JfSVJRX01BU0tfRE9ORV9UICAgICAgICAgIDEKKyAgICBgZGVmaW5lIFVTQl9JUlFfTUFTS19ET05FX1cgICAgICAgICAgMQorICAgIGBkZWZpbmUgVVNCX0lSUV9NQVNLX0RPTkVfUiAgICAgICAgICAxOjEKKworICAgIGBkZWZpbmUgVVNCX0lSUV9NQVNLX1NPRiAgICAgIDAKKyAgICBgZGVmaW5lIFVTQl9JUlFfTUFTS19TT0ZfREVGQVVMVCAgICAwCisgICAgYGRlZmluZSBVU0JfSVJRX01BU0tfU09GX0IgICAgICAgICAgMAorICAgIGBkZWZpbmUgVVNCX0lSUV9NQVNLX1NPRl9UICAgICAgICAgIDAKKyAgICBgZGVmaW5lIFVTQl9JUlFfTUFTS19TT0ZfVyAgICAgICAgICAxCisgICAgYGRlZmluZSBVU0JfSVJRX01BU0tfU09GX1IgICAgICAgICAgMDowCisKK2BkZWZpbmUgVVNCX1hGRVJfREFUQSAgICA2J2gxNAorCisgICAgYGRlZmluZSBVU0JfWEZFUl9EQVRBX1RYX0xFTl9ERUZBVUxUICAgIDAKKyAgICBgZGVmaW5lIFVTQl9YRkVSX0RBVEFfVFhfTEVOX0IgICAgICAgICAgMAorICAgIGBkZWZpbmUgVVNCX1hGRVJfREFUQV9UWF9MRU5fVCAgICAgICAgICAxNQorICAgIGBkZWZpbmUgVVNCX1hGRVJfREFUQV9UWF9MRU5fVyAgICAgICAgICAxNgorICAgIGBkZWZpbmUgVVNCX1hGRVJfREFUQV9UWF9MRU5fUiAgICAgICAgICAxNTowCisKK2BkZWZpbmUgVVNCX1hGRVJfVE9LRU4gICAgNidoMTgKKworICAgIGBkZWZpbmUgVVNCX1hGRVJfVE9LRU5fU1RBUlQgICAgICAzMQorICAgIGBkZWZpbmUgVVNCX1hGRVJfVE9LRU5fU1RBUlRfREVGQVVMVCAgICAwCisgICAgYGRlZmluZSBVU0JfWEZFUl9UT0tFTl9TVEFSVF9CICAgICAgICAgIDMxCisgICAgYGRlZmluZSBVU0JfWEZFUl9UT0tFTl9TVEFSVF9UICAgICAgICAgIDMxCisgICAgYGRlZmluZSBVU0JfWEZFUl9UT0tFTl9TVEFSVF9XICAgICAgICAgIDEKKyAgICBgZGVmaW5lIFVTQl9YRkVSX1RPS0VOX1NUQVJUX1IgICAgICAgICAgMzE6MzEKKworICAgIGBkZWZpbmUgVVNCX1hGRVJfVE9LRU5fSU4gICAgICAzMAorICAgIGBkZWZpbmUgVVNCX1hGRVJfVE9LRU5fSU5fREVGQVVMVCAgICAwCisgICAgYGRlZmluZSBVU0JfWEZFUl9UT0tFTl9JTl9CICAgICAgICAgIDMwCisgICAgYGRlZmluZSBVU0JfWEZFUl9UT0tFTl9JTl9UICAgICAgICAgIDMwCisgICAgYGRlZmluZSBVU0JfWEZFUl9UT0tFTl9JTl9XICAgICAgICAgIDEKKyAgICBgZGVmaW5lIFVTQl9YRkVSX1RPS0VOX0lOX1IgICAgICAgICAgMzA6MzAKKworICAgIGBkZWZpbmUgVVNCX1hGRVJfVE9LRU5fQUNLICAgICAgMjkKKyAgICBgZGVmaW5lIFVTQl9YRkVSX1RPS0VOX0FDS19ERUZBVUxUICAgIDAKKyAgICBgZGVmaW5lIFVTQl9YRkVSX1RPS0VOX0FDS19CICAgICAgICAgIDI5CisgICAgYGRlZmluZSBVU0JfWEZFUl9UT0tFTl9BQ0tfVCAgICAgICAgICAyOQorICAgIGBkZWZpbmUgVVNCX1hGRVJfVE9LRU5fQUNLX1cgICAgICAgICAgMQorICAgIGBkZWZpbmUgVVNCX1hGRVJfVE9LRU5fQUNLX1IgICAgICAgICAgMjk6MjkKKworICAgIGBkZWZpbmUgVVNCX1hGRVJfVE9LRU5fUElEX0RBVEFYICAgICAgMjgKKyAgICBgZGVmaW5lIFVTQl9YRkVSX1RPS0VOX1BJRF9EQVRBWF9ERUZBVUxUICAgIDAKKyAgICBgZGVmaW5lIFVTQl9YRkVSX1RPS0VOX1BJRF9EQVRBWF9CICAgICAgICAgIDI4CisgICAgYGRlZmluZSBVU0JfWEZFUl9UT0tFTl9QSURfREFUQVhfVCAgICAgICAgICAyOAorICAgIGBkZWZpbmUgVVNCX1hGRVJfVE9LRU5fUElEX0RBVEFYX1cgICAgICAgICAgMQorICAgIGBkZWZpbmUgVVNCX1hGRVJfVE9LRU5fUElEX0RBVEFYX1IgICAgICAgICAgMjg6MjgKKworICAgIGBkZWZpbmUgVVNCX1hGRVJfVE9LRU5fUElEX0JJVFNfREVGQVVMVCAgICAwCisgICAgYGRlZmluZSBVU0JfWEZFUl9UT0tFTl9QSURfQklUU19CICAgICAgICAgIDE2CisgICAgYGRlZmluZSBVU0JfWEZFUl9UT0tFTl9QSURfQklUU19UICAgICAgICAgIDIzCisgICAgYGRlZmluZSBVU0JfWEZFUl9UT0tFTl9QSURfQklUU19XICAgICAgICAgIDgKKyAgICBgZGVmaW5lIFVTQl9YRkVSX1RPS0VOX1BJRF9CSVRTX1IgICAgICAgICAgMjM6MTYKKworICAgIGBkZWZpbmUgVVNCX1hGRVJfVE9LRU5fREVWX0FERFJfREVGQVVMVCAgICAwCisgICAgYGRlZmluZSBVU0JfWEZFUl9UT0tFTl9ERVZfQUREUl9CICAgICAgICAgIDkKKyAgICBgZGVmaW5lIFVTQl9YRkVSX1RPS0VOX0RFVl9BRERSX1QgICAgICAgICAgMTUKKyAgICBgZGVmaW5lIFVTQl9YRkVSX1RPS0VOX0RFVl9BRERSX1cgICAgICAgICAgNworICAgIGBkZWZpbmUgVVNCX1hGRVJfVE9LRU5fREVWX0FERFJfUiAgICAgICAgICAxNTo5CisKKyAgICBgZGVmaW5lIFVTQl9YRkVSX1RPS0VOX0VQX0FERFJfREVGQVVMVCAgICAwCisgICAgYGRlZmluZSBVU0JfWEZFUl9UT0tFTl9FUF9BRERSX0IgICAgICAgICAgNQorICAgIGBkZWZpbmUgVVNCX1hGRVJfVE9LRU5fRVBfQUREUl9UICAgICAgICAgIDgKKyAgICBgZGVmaW5lIFVTQl9YRkVSX1RPS0VOX0VQX0FERFJfVyAgICAgICAgICA0CisgICAgYGRlZmluZSBVU0JfWEZFUl9UT0tFTl9FUF9BRERSX1IgICAgICAgICAgODo1CisKK2BkZWZpbmUgVVNCX1JYX1NUQVQgICAgNidoMWMKKworICAgIGBkZWZpbmUgVVNCX1JYX1NUQVRfU1RBUlRfUEVORCAgICAgIDMxCisgICAgYGRlZmluZSBVU0JfUlhfU1RBVF9TVEFSVF9QRU5EX0RFRkFVTFQgICAgMAorICAgIGBkZWZpbmUgVVNCX1JYX1NUQVRfU1RBUlRfUEVORF9CICAgICAgICAgIDMxCisgICAgYGRlZmluZSBVU0JfUlhfU1RBVF9TVEFSVF9QRU5EX1QgICAgICAgICAgMzEKKyAgICBgZGVmaW5lIFVTQl9SWF9TVEFUX1NUQVJUX1BFTkRfVyAgICAgICAgICAxCisgICAgYGRlZmluZSBVU0JfUlhfU1RBVF9TVEFSVF9QRU5EX1IgICAgICAgICAgMzE6MzEKKworICAgIGBkZWZpbmUgVVNCX1JYX1NUQVRfQ1JDX0VSUiAgICAgIDMwCisgICAgYGRlZmluZSBVU0JfUlhfU1RBVF9DUkNfRVJSX0RFRkFVTFQgICAgMAorICAgIGBkZWZpbmUgVVNCX1JYX1NUQVRfQ1JDX0VSUl9CICAgICAgICAgIDMwCisgICAgYGRlZmluZSBVU0JfUlhfU1RBVF9DUkNfRVJSX1QgICAgICAgICAgMzAKKyAgICBgZGVmaW5lIFVTQl9SWF9TVEFUX0NSQ19FUlJfVyAgICAgICAgICAxCisgICAgYGRlZmluZSBVU0JfUlhfU1RBVF9DUkNfRVJSX1IgICAgICAgICAgMzA6MzAKKworICAgIGBkZWZpbmUgVVNCX1JYX1NUQVRfUkVTUF9USU1FT1VUICAgICAgMjkKKyAgICBgZGVmaW5lIFVTQl9SWF9TVEFUX1JFU1BfVElNRU9VVF9ERUZBVUxUICAgIDAKKyAgICBgZGVmaW5lIFVTQl9SWF9TVEFUX1JFU1BfVElNRU9VVF9CICAgICAgICAgIDI5CisgICAgYGRlZmluZSBVU0JfUlhfU1RBVF9SRVNQX1RJTUVPVVRfVCAgICAgICAgICAyOQorICAgIGBkZWZpbmUgVVNCX1JYX1NUQVRfUkVTUF9USU1FT1VUX1cgICAgICAgICAgMQorICAgIGBkZWZpbmUgVVNCX1JYX1NUQVRfUkVTUF9USU1FT1VUX1IgICAgICAgICAgMjk6MjkKKworICAgIGBkZWZpbmUgVVNCX1JYX1NUQVRfSURMRSAgICAgIDI4CisgICAgYGRlZmluZSBVU0JfUlhfU1RBVF9JRExFX0RFRkFVTFQgICAgMAorICAgIGBkZWZpbmUgVVNCX1JYX1NUQVRfSURMRV9CICAgICAgICAgIDI4CisgICAgYGRlZmluZSBVU0JfUlhfU1RBVF9JRExFX1QgICAgICAgICAgMjgKKyAgICBgZGVmaW5lIFVTQl9SWF9TVEFUX0lETEVfVyAgICAgICAgICAxCisgICAgYGRlZmluZSBVU0JfUlhfU1RBVF9JRExFX1IgICAgICAgICAgMjg6MjgKKworICAgIGBkZWZpbmUgVVNCX1JYX1NUQVRfUkVTUF9CSVRTX0RFRkFVTFQgICAgMAorICAgIGBkZWZpbmUgVVNCX1JYX1NUQVRfUkVTUF9CSVRTX0IgICAgICAgICAgMTYKKyAgICBgZGVmaW5lIFVTQl9SWF9TVEFUX1JFU1BfQklUU19UICAgICAgICAgIDIzCisgICAgYGRlZmluZSBVU0JfUlhfU1RBVF9SRVNQX0JJVFNfVyAgICAgICAgICA4CisgICAgYGRlZmluZSBVU0JfUlhfU1RBVF9SRVNQX0JJVFNfUiAgICAgICAgICAyMzoxNgorCisgICAgYGRlZmluZSBVU0JfUlhfU1RBVF9DT1VOVF9CSVRTX0RFRkFVTFQgICAgMAorICAgIGBkZWZpbmUgVVNCX1JYX1NUQVRfQ09VTlRfQklUU19CICAgICAgICAgIDAKKyAgICBgZGVmaW5lIFVTQl9SWF9TVEFUX0NPVU5UX0JJVFNfVCAgICAgICAgICAxNQorICAgIGBkZWZpbmUgVVNCX1JYX1NUQVRfQ09VTlRfQklUU19XICAgICAgICAgIDE2CisgICAgYGRlZmluZSBVU0JfUlhfU1RBVF9DT1VOVF9CSVRTX1IgICAgICAgICAgMTU6MAorCitgZGVmaW5lIFVTQl9XUl9EQVRBICAgIDYnaDIwCisKKyAgICBgZGVmaW5lIFVTQl9XUl9EQVRBX0RBVEFfREVGQVVMVCAgICAwCisgICAgYGRlZmluZSBVU0JfV1JfREFUQV9EQVRBX0IgICAgICAgICAgMAorICAgIGBkZWZpbmUgVVNCX1dSX0RBVEFfREFUQV9UICAgICAgICAgIDcKKyAgICBgZGVmaW5lIFVTQl9XUl9EQVRBX0RBVEFfVyAgICAgICAgICA4CisgICAgYGRlZmluZSBVU0JfV1JfREFUQV9EQVRBX1IgICAgICAgICAgNzowCisKK2BkZWZpbmUgVVNCX1JEX0RBVEEgICAgNidoMjAKKworICAgIGBkZWZpbmUgVVNCX1JEX0RBVEFfREFUQV9ERUZBVUxUICAgIDAKKyAgICBgZGVmaW5lIFVTQl9SRF9EQVRBX0RBVEFfQiAgICAgICAgICAwCisgICAgYGRlZmluZSBVU0JfUkRfREFUQV9EQVRBX1QgICAgICAgICAgNworICAgIGBkZWZpbmUgVVNCX1JEX0RBVEFfREFUQV9XICAgICAgICAgIDgKKyAgICBgZGVmaW5lIFVTQl9SRF9EQVRBX0RBVEFfUiAgICAgICAgICA3OjAKKwpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvdXNiMV9ob3N0L3NyYy9waHkvdXNiX2ZzX3BoeS52IGIvdmVyaWxvZy9ydGwvdXNiMV9ob3N0L3NyYy9waHkvdXNiX2ZzX3BoeS52Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3YWMxNzQKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC91c2IxX2hvc3Qvc3JjL3BoeS91c2JfZnNfcGh5LnYKQEAgLTAsMCArMSw3MTMgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSAsIERpbmVzaCBBbm5heXlhICAgICAgICAgICAgICAgICAgICAgICAgICAKKy8vIAorLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBDcmVhdGVkIGJ5IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisvLworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gICAgICAgICAgICAgICAgICAgICBVU0IgRnVsbCBTcGVlZCAoMTJtYnBzKSBQaHkKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVjAuMgorLy8gICAgICAgICAgICAgICAgICAgICAgICBVbHRyYS1FbWJlZGRlZC5jb20KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBDb3B5cmlnaHQgMjAxNQorLy8KKy8vICAgICAgICAgICAgICAgICBFbWFpbDogYWRtaW5AdWx0cmEtZW1iZWRkZWQuY29tCisvLworLy8gICAgICAgICAgICAgICAgICAgICAgICAgTGljZW5zZTogTEdQTAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8KKy8vIFRoaXMgc291cmNlIGZpbGUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIHdpdGhvdXQgICAgICAgICAKKy8vIHJlc3RyaWN0aW9uIHByb3ZpZGVkIHRoYXQgdGhpcyBjb3B5cmlnaHQgc3RhdGVtZW50IGlzIG5vdCAgICAKKy8vIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSBhbmQgdGhhdCBhbnkgZGVyaXZhdGl2ZSB3b3JrIGNvbnRhaW5zICAKKy8vIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgYXNzb2NpYXRlZCBkaXNjbGFpbWVyLiAKKy8vCisvLyBUaGlzIHNvdXJjZSBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0ICAgCisvLyBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgCisvLyBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgCisvLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55ICAgCisvLyBsYXRlciB2ZXJzaW9uLgorLy8KKy8vIFRoaXMgc291cmNlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSAgICAgICAKKy8vIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgICAKKy8vIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgICAgICAKKy8vIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSAKKy8vIGRldGFpbHMuCisvLworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgIAorLy8gUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvdXJjZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCAKKy8vIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgR2VuZXJhdGVkIEZpbGUKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbW9kdWxlIHVzYl9mc19waHkKKygKKyAgICAvLyBJbnB1dHMKKyAgICAgaW5wdXQgICAgICAgICAgIGNsa19pCisgICAgLGlucHV0ICAgICAgICAgICByc3RuX2kKKyAgICAsaW5wdXQgIFsgIDc6MF0gIHV0bWlfZGF0YV9vdXRfaQorICAgICxpbnB1dCAgICAgICAgICAgdXRtaV90eHZhbGlkX2kKKyAgICAsaW5wdXQgIFsgIDE6MF0gIHV0bWlfb3BfbW9kZV9pCisgICAgLGlucHV0ICBbICAxOjBdICB1dG1pX3hjdnJzZWxlY3RfaQorICAgICxpbnB1dCAgICAgICAgICAgdXRtaV90ZXJtc2VsZWN0X2kKKyAgICAsaW5wdXQgICAgICAgICAgIHV0bWlfZHBwdWxsZG93bl9pCisgICAgLGlucHV0ICAgICAgICAgICB1dG1pX2RtcHVsbGRvd25faQorICAgICxpbnB1dCAgICAgICAgICAgdXNiX3J4X3Jjdl9pCisgICAgLGlucHV0ICAgICAgICAgICB1c2JfcnhfZHBfaQorICAgICxpbnB1dCAgICAgICAgICAgdXNiX3J4X2RuX2kKKyAgICAsaW5wdXQgICAgICAgICAgIHVzYl9yZXNldF9hc3NlcnRfaQorCisgICAgLy8gT3V0cHV0cworICAgICxvdXRwdXQgWyAgNzowXSAgdXRtaV9kYXRhX2luX28KKyAgICAsb3V0cHV0ICAgICAgICAgIHV0bWlfdHhyZWFkeV9vCisgICAgLG91dHB1dCAgICAgICAgICB1dG1pX3J4dmFsaWRfbworICAgICxvdXRwdXQgICAgICAgICAgdXRtaV9yeGFjdGl2ZV9vCisgICAgLG91dHB1dCAgICAgICAgICB1dG1pX3J4ZXJyb3JfbworICAgICxvdXRwdXQgWyAgMTowXSAgdXRtaV9saW5lc3RhdGVfbworICAgICxvdXRwdXQgICAgICAgICAgdXNiX3R4X2RwX28KKyAgICAsb3V0cHV0ICAgICAgICAgIHVzYl90eF9kbl9vCisgICAgLG91dHB1dCAgICAgICAgICB1c2JfdHhfb2VuX28KKyAgICAsb3V0cHV0ICAgICAgICAgIHVzYl9yZXNldF9kZXRlY3RfbworICAgICxvdXRwdXQgICAgICAgICAgdXNiX2VuX28KKyk7CisKKworCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFdpcmVzIC8gUmVnaXN0ZXJzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCityZWcgICAgICAgICByeF9lbl9xOworCisvLyBYaWxpbnggcGxhY2VtZW50IHByYWdtYXM6CisvL3N5bnRoZXNpcyBhdHRyaWJ1dGUgSU9CIG9mIG91dF9kcF9xIGlzICJUUlVFIgorLy9zeW50aGVzaXMgYXR0cmlidXRlIElPQiBvZiBvdXRfZG5fcSBpcyAiVFJVRSIKK3JlZyAgICAgICAgIG91dF9kcF9xOworcmVnICAgICAgICAgb3V0X2RuX3E7CisKK3dpcmUgICAgICAgIGluX2RwX3c7Cit3aXJlICAgICAgICBpbl9kbl93Oword2lyZSAgICAgICAgaW5fcnhfdzsKKword2lyZSAgICAgICAgaW5fal93Oword2lyZSAgICAgICAgaW5fa193Oword2lyZSAgICAgICAgaW5fc2UwX3c7Cit3aXJlICAgICAgICBpbl9pbnZhbGlkX3c7CisKK3dpcmUgICAgICAgIHNhbXBsZV93OworCit3aXJlICAgICAgICBiaXRfZWRnZV93Oword2lyZSAgICAgICAgYml0X3RyYW5zaXRpb25fdzsKKworcmVnIFsyOjBdICAgYml0X2NvdW50X3E7CityZWcgWzI6MF0gICBvbmVzX2NvdW50X3E7CityZWcgWzc6MF0gICBkYXRhX3E7CityZWcgICAgICAgICBzZW5kX2VvcF9xOworCityZWcgICAgICAgICBzeW5jX2pfZGV0ZWN0ZWRfcTsKKword2lyZSAgICAgICAgYml0X3N0dWZmX2JpdF93Oword2lyZSAgICAgICAgbmV4dF9pc19iaXRfc3R1ZmZfdzsKKword2lyZSAgICAgICAgdXNiX3Jlc2V0X2Fzc2VydF93ID0gdXNiX3Jlc2V0X2Fzc2VydF9pIHwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1dG1pX3hjdnJzZWxlY3RfaSA9PSAyJ2IwMCAmJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0bWlfdGVybXNlbGVjdF9pID09IDEnYjAgICYmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRtaV9vcF9tb2RlX2kgICAgPT0gMidiMTAgJiYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dG1pX2RwcHVsbGRvd25faSAmJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0bWlfZG1wdWxsZG93bl9pKTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUmVzYW1wbGUgYXN5bmMgc2lnbmFscworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcmVnICAgICAgICAgcnhfZHBfbXM7CityZWcgICAgICAgICByeF9kbl9tczsKK3JlZyAgICAgICAgIHJ4ZF9tczsKKworCithbHdheXMgQCAocG9zZWRnZSBjbGtfaSBvciBuZWdlZGdlIHJzdG5faSkKK2lmICghcnN0bl9pKQorYmVnaW4KKyAgICByeF9kcF9tcyA8PSAxJ2IwOworICAgIHJ4X2RuX21zIDw9IDEnYjA7CisgICAgcnhkX21zICAgPD0gMSdiMDsKK2VuZAorZWxzZQorYmVnaW4KKyAgICByeF9kcF9tcyA8PSBpbl9kcF93OworICAgIHJ4X2RuX21zIDw9IGluX2RuX3c7CisgICAgcnhkX21zICAgPD0gaW5fcnhfdzsKK2VuZAorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBFZGdlIERldGVjdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcmVnICAgICAgICAgcnhfZHAwX3E7CityZWcgICAgICAgICByeF9kbjBfcTsKK3JlZyAgICAgICAgIHJ4X2RwMV9xOworcmVnICAgICAgICAgcnhfZG4xX3E7CityZWcgICAgICAgICByeF9kcF9xOworcmVnICAgICAgICAgcnhfZG5fcTsKK3JlZyAgICAgICAgIHJ4ZDBfcTsKK3JlZyAgICAgICAgIHJ4ZDFfcTsKK3JlZyAgICAgICAgIHJ4ZF9xOworCithbHdheXMgQCAocG9zZWRnZSBjbGtfaSBvciBuZWdlZGdlIHJzdG5faSkKK2lmICghcnN0bl9pKQorYmVnaW4KKyAgICByeF9kcDBfcSAgICA8PSAxJ2IwOworICAgIHJ4X2RuMF9xICAgIDw9IDEnYjA7CisgICAgcnhfZHAxX3EgICAgPD0gMSdiMDsKKyAgICByeF9kbjFfcSAgICA8PSAxJ2IwOworICAgIHJ4X2RwX3EgICAgIDw9IDEnYjA7CisgICAgcnhfZG5fcSAgICAgPD0gMSdiMDsKKyAgICByeGQwX3EgICAgICA8PSAxJ2IwOworICAgIHJ4ZDFfcSAgICAgIDw9IDEnYjA7CisgICAgcnhkX3EgICAgICAgPD0gMSdiMDsKK2VuZAorZWxzZQorYmVnaW4KKyAgICAvLyBHbGl0Y2ggZnJlZSB2ZXJzaW9ucworICAgIGlmIChyeF9kcDBfcSAmIHJ4X2RwMV9xKQorICAgICAgICByeF9kcF9xICAgICA8PSAxJ2IxOworICAgIGVsc2UgaWYgKCFyeF9kcDBfcSAmICFyeF9kcDFfcSkKKyAgICAgICAgcnhfZHBfcSAgICAgPD0gMSdiMDsKKworICAgIGlmIChyeF9kbjBfcSAmIHJ4X2RuMV9xKQorICAgICAgICByeF9kbl9xICAgICA8PSAxJ2IxOworICAgIGVsc2UgaWYgKCFyeF9kbjBfcSAmICFyeF9kbjFfcSkKKyAgICAgICAgcnhfZG5fcSAgICAgPD0gMSdiMDsKKworICAgIGlmIChyeGQwX3EgJiByeGQxX3EpCisgICAgICAgIHJ4ZF9xICAgICA8PSAxJ2IxOworICAgIGVsc2UgaWYgKCFyeGQwX3EgJiAhcnhkMV9xKQorICAgICAgICByeGRfcSAgICAgPD0gMSdiMDsKKworICAgIC8vIFJlc3luY3MKKyAgICByeF9kcDFfcSAgICA8PSByeF9kcDBfcTsKKyAgICByeF9kcDBfcSAgICA8PSByeF9kcF9tczsKKworICAgIHJ4X2RuMV9xICAgIDw9IHJ4X2RuMF9xOworICAgIHJ4X2RuMF9xICAgIDw9IHJ4X2RuX21zOworCisgICAgcnhkMV9xICAgICAgPD0gcnhkMF9xOworICAgIHJ4ZDBfcSAgICAgIDw9IHJ4ZF9tczsKK2VuZAorCisvLyBGb3IgRnVsbCBTcGVlZCBVU0I6CisvLyBTRTAgPSBEKyA9IDAgJiYgRC0gPSAwCisvLyBKICAgPSBEKyA9IDEgJiYgRC0gPSAwCisvLyBLICAgPSBEKyA9IDAgJiYgRC0gPSAxCisKK2Fzc2lnbiBpbl9qX3cgICAgICAgPSBpbl9zZTBfdyA/IDEnYjAgOiAgcnhkX3E7Cithc3NpZ24gaW5fa193ICAgICAgID0gaW5fc2UwX3cgPyAxJ2IwIDogfnJ4ZF9xOworYXNzaWduIGluX3NlMF93ICAgICA9ICghcnhfZHBfcSAmICFyeF9kbl9xKTsKK2Fzc2lnbiBpbl9pbnZhbGlkX3cgPSAocnhfZHBfcSAmIHJ4X2RuX3EpOworCisvLyBMaW5lIHN0YXRlIG1hdGNoZXMgdHggb3V0cHV0cyBpZiBkcml2ZXJzIGVuYWJsZWQKK2Fzc2lnbiB1dG1pX2xpbmVzdGF0ZV9vID0gdXNiX3R4X29lbl9vID8ge3J4X2RuX3EsIHJ4X2RwX3F9IDoge3VzYl90eF9kbl9vLCB1c2JfdHhfZHBfb307CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFN0YXRlIE1hY2hpbmUKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2xvY2FscGFyYW0gU1RBVEVfVyAgICAgICAgICAgICAgPSA0OworbG9jYWxwYXJhbSBTVEFURV9JRExFICAgICAgICAgICA9IDQnZDA7Citsb2NhbHBhcmFtIFNUQVRFX1JYX0RFVEVDVCAgICAgID0gNCdkMTsKK2xvY2FscGFyYW0gU1RBVEVfUlhfU1lOQ19KICAgICAgPSA0J2QyOworbG9jYWxwYXJhbSBTVEFURV9SWF9TWU5DX0sgICAgICA9IDQnZDM7Citsb2NhbHBhcmFtIFNUQVRFX1JYX0FDVElWRSAgICAgID0gNCdkNDsKK2xvY2FscGFyYW0gU1RBVEVfUlhfRU9QMCAgICAgICAgPSA0J2Q1OworbG9jYWxwYXJhbSBTVEFURV9SWF9FT1AxICAgICAgICA9IDQnZDY7Citsb2NhbHBhcmFtIFNUQVRFX1RYX1NZTkMgICAgICAgID0gNCdkNzsKK2xvY2FscGFyYW0gU1RBVEVfVFhfQUNUSVZFICAgICAgPSA0J2Q4OworbG9jYWxwYXJhbSBTVEFURV9UWF9FT1BfU1RVRkYgICA9IDQnZDk7Citsb2NhbHBhcmFtIFNUQVRFX1RYX0VPUDAgICAgICAgID0gNCdkMTA7Citsb2NhbHBhcmFtIFNUQVRFX1RYX0VPUDEgICAgICAgID0gNCdkMTE7Citsb2NhbHBhcmFtIFNUQVRFX1RYX0VPUDIgICAgICAgID0gNCdkMTI7Citsb2NhbHBhcmFtIFNUQVRFX1RYX1JTVCAgICAgICAgID0gNCdkMTM7CisKKy8vIEN1cnJlbnQgc3RhdGUKK3JlZyBbU1RBVEVfVy0xOjBdIHN0YXRlX3E7CisKK3JlZyBbU1RBVEVfVy0xOjBdIG5leHRfc3RhdGVfcjsKK2Fsd2F5cyBAICoKK2JlZ2luCisgICAgbmV4dF9zdGF0ZV9yID0gc3RhdGVfcTsKKworICAgIGNhc2UgKHN0YXRlX3EpCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFNUQVRFX0lETEUKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgU1RBVEVfSURMRSA6CisgICAgYmVnaW4KKyAgICAgICAgaWYgKGluX2tfdykKKyAgICAgICAgICAgIG5leHRfc3RhdGVfciAgICA9IFNUQVRFX1JYX0RFVEVDVDsKKyAgICAgICAgZWxzZSBpZiAodXRtaV90eHZhbGlkX2kpCisgICAgICAgICAgICBuZXh0X3N0YXRlX3IgICAgPSBTVEFURV9UWF9TWU5DOworICAgICAgICBlbHNlIGlmICh1c2JfcmVzZXRfYXNzZXJ0X3cpCisgICAgICAgICAgICBuZXh0X3N0YXRlX3IgICAgPSBTVEFURV9UWF9SU1Q7CisgICAgZW5kCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFNUQVRFX1JYX0RFVEVDVAorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBTVEFURV9SWF9ERVRFQ1QgOgorICAgIGJlZ2luCisgICAgICAgIGlmIChpbl9rX3cgJiYgc2FtcGxlX3cpCisgICAgICAgICAgICBuZXh0X3N0YXRlX3IgICAgPSBTVEFURV9SWF9TWU5DX0s7CisgICAgICAgIGVsc2UgaWYgKHNhbXBsZV93KQorICAgICAgICAgICAgbmV4dF9zdGF0ZV9yICAgID0gU1RBVEVfSURMRTsKKyAgICBlbmQKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gU1RBVEVfUlhfU1lOQ19KCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFNUQVRFX1JYX1NZTkNfSiA6CisgICAgYmVnaW4KKyAgICAgICAgaWYgKGluX2tfdyAmJiBzYW1wbGVfdykKKyAgICAgICAgICAgIG5leHRfc3RhdGVfciAgICA9IFNUQVRFX1JYX1NZTkNfSzsKKyAgICAgICAgLy8gSyBnbGl0Y2ggZm9sbG93ZWQgYnkgbXVsdGlwbGUgSidzIC0gcmV0dXJuIHRvIGlkbGUKKyAgICAgICAgZWxzZSBpZiAoKGJpdF9jb3VudF9xID09IDMnZDEpICYmIHNhbXBsZV93KQorICAgICAgICAgICAgbmV4dF9zdGF0ZV9yICAgID0gU1RBVEVfSURMRTsKKyAgICBlbmQKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gU1RBVEVfUlhfU1lOQ19LCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFNUQVRFX1JYX1NZTkNfSyA6CisgICAgYmVnaW4KKyAgICAgICAgLy8gRW5kIG9mIFNZTkMgZmllbGQgZW5kcyB3aXRoIDIgSydzCisgICAgICAgIC8vIE11c3QgaGF2ZSBzZWVuIGF0IGxlYXN0IDEgSiBzdGF0ZSBmaXJzdCEKKyAgICAgICAgaWYgKHN5bmNfal9kZXRlY3RlZF9xICYmIGluX2tfdyAmJiBzYW1wbGVfdykKKyAgICAgICAgICAgIG5leHRfc3RhdGVfciAgICA9IFNUQVRFX1JYX0FDVElWRTsKKyAgICAgICAgLy8gTm8gSiBkZXRlY3RlZCBzaW5jZSBJRExFLCBtdXN0IGJlIGFuIGVycm9yIQorICAgICAgICBlbHNlIGlmICghc3luY19qX2RldGVjdGVkX3EgJiYgaW5fa193ICYmIHNhbXBsZV93KQorICAgICAgICAgICAgbmV4dF9zdGF0ZV9yICAgID0gU1RBVEVfSURMRTsKKyAgICAgICAgZWxzZSBpZiAoaW5fal93ICYmIHNhbXBsZV93KQorICAgICAgICAgICAgbmV4dF9zdGF0ZV9yICAgID0gU1RBVEVfUlhfU1lOQ19KOworICAgIGVuZAorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBTVEFURV9SWF9BQ1RJVkUKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgU1RBVEVfUlhfQUNUSVZFIDoKKyAgICBiZWdpbgorICAgICAgICBpZiAoaW5fc2UwX3cgJiYgc2FtcGxlX3cpCisgICAgICAgICAgICBuZXh0X3N0YXRlX3IgICAgPSBTVEFURV9SWF9FT1AwOworICAgICAgICAvLyBFcnJvciEKKyAgICAgICAgZWxzZSBpZiAoaW5faW52YWxpZF93ICYmIHNhbXBsZV93KQorICAgICAgICAgICAgbmV4dF9zdGF0ZV9yICAgID0gU1RBVEVfSURMRTsKKyAgICBlbmQKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gU1RBVEVfUlhfRU9QMAorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBTVEFURV9SWF9FT1AwIDoKKyAgICBiZWdpbgorICAgICAgICBpZiAoaW5fc2UwX3cgJiYgc2FtcGxlX3cpCisgICAgICAgICAgICBuZXh0X3N0YXRlX3IgICAgPSBTVEFURV9SWF9FT1AxOworICAgICAgICAvLyBFcnJvciEKKyAgICAgICAgZWxzZSBpZiAoc2FtcGxlX3cpCisgICAgICAgICAgICBuZXh0X3N0YXRlX3IgICAgPSBTVEFURV9JRExFOworICAgIGVuZAorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBTVEFURV9SWF9FT1AxCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFNUQVRFX1JYX0VPUDEgOgorICAgIGJlZ2luCisgICAgICAgIC8vIFJldHVybiB0byBpZGxlCisgICAgICAgIGlmIChpbl9qX3cgJiYgc2FtcGxlX3cpCisgICAgICAgICAgICBuZXh0X3N0YXRlX3IgICAgPSBTVEFURV9JRExFOworICAgICAgICAvLyBFcnJvciEKKyAgICAgICAgZWxzZSBpZiAoc2FtcGxlX3cpCisgICAgICAgICAgICBuZXh0X3N0YXRlX3IgICAgPSBTVEFURV9JRExFOworICAgIGVuZAorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBTVEFURV9UWF9TWU5DCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFNUQVRFX1RYX1NZTkMgOgorICAgIGJlZ2luCisgICAgICAgIGlmIChiaXRfY291bnRfcSA9PSAzJ2Q3ICYmIHNhbXBsZV93KQorICAgICAgICAgICAgbmV4dF9zdGF0ZV9yICAgID0gU1RBVEVfVFhfQUNUSVZFOworICAgIGVuZAorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBTVEFURV9UWF9BQ1RJVkUKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgU1RBVEVfVFhfQUNUSVZFIDoKKyAgICBiZWdpbgorICAgICAgICBpZiAoYml0X2NvdW50X3EgPT0gMydkNyAmJiBzYW1wbGVfdyAmJiAoIXV0bWlfdHh2YWxpZF9pIHx8IHNlbmRfZW9wX3EpICYmICFiaXRfc3R1ZmZfYml0X3cpCisgICAgICAgIGJlZ2luCisgICAgICAgICAgICAvLyBCaXQgc3R1ZmYgcmVxdWlyZWQgYXQgZW5kIG9mIHBhY2tldD8KKyAgICAgICAgICAgIGlmIChuZXh0X2lzX2JpdF9zdHVmZl93KQorICAgICAgICAgICAgICAgIG5leHRfc3RhdGVfciAgICA9IFNUQVRFX1RYX0VPUF9TVFVGRjsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBuZXh0X3N0YXRlX3IgICAgPSBTVEFURV9UWF9FT1AwOworICAgICAgICBlbmQKKyAgICBlbmQKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gU1RBVEVfVFhfRU9QX1NUVUZGCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFNUQVRFX1RYX0VPUF9TVFVGRiA6CisgICAgYmVnaW4KKyAgICAgICAgaWYgKHNhbXBsZV93KQorICAgICAgICAgICAgbmV4dF9zdGF0ZV9yICAgID0gU1RBVEVfVFhfRU9QMDsKKyAgICBlbmQKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gU1RBVEVfVFhfRU9QMAorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBTVEFURV9UWF9FT1AwIDoKKyAgICBiZWdpbgorICAgICAgICBpZiAoc2FtcGxlX3cpCisgICAgICAgICAgICBuZXh0X3N0YXRlX3IgICAgPSBTVEFURV9UWF9FT1AxOworICAgIGVuZAorICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBTVEFURV9UWF9FT1AxCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFNUQVRFX1RYX0VPUDEgOgorICAgIGJlZ2luCisgICAgICAgIGlmIChzYW1wbGVfdykKKyAgICAgICAgICAgIG5leHRfc3RhdGVfciAgICA9IFNUQVRFX1RYX0VPUDI7CisgICAgZW5kCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFNUQVRFX1RYX0VPUDIKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgU1RBVEVfVFhfRU9QMiA6CisgICAgYmVnaW4KKyAgICAgICAgaWYgKHNhbXBsZV93KQorICAgICAgICAgICAgbmV4dF9zdGF0ZV9yICAgID0gU1RBVEVfSURMRTsKKyAgICBlbmQKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gU1RBVEVfVFhfUlNUCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFNUQVRFX1RYX1JTVCA6CisgICAgYmVnaW4KKyAgICAgICAgaWYgKCF1c2JfcmVzZXRfYXNzZXJ0X3cpCisgICAgICAgICAgICBuZXh0X3N0YXRlX3IgICAgPSBTVEFURV9JRExFOworICAgIGVuZAorICAgIGRlZmF1bHQ6CisgICAgICAgIDsKKyAgIGVuZGNhc2UKK2VuZAorCisvLyBVcGRhdGUgc3RhdGUKK2Fsd2F5cyBAIChuZWdlZGdlIHJzdG5faSBvciBwb3NlZGdlIGNsa19pKQoraWYgKCFyc3RuX2kpCisgICAgc3RhdGVfcSAgIDw9IFNUQVRFX0lETEU7CitlbHNlCisgICAgc3RhdGVfcSAgIDw9IG5leHRfc3RhdGVfcjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gU1lOQyBkZXRlY3QKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2Fsd2F5cyBAIChwb3NlZGdlIGNsa19pIG9yIG5lZ2VkZ2UgcnN0bl9pKQoraWYgKCFyc3RuX2kpCisgICAgc3luY19qX2RldGVjdGVkX3EgIDw9IDEnYjA7CisvLyBSZXNldCBzeW5jIGRldGVjdCBzdGF0ZSBpbiBJRExFCitlbHNlIGlmIChzdGF0ZV9xID09IFNUQVRFX0lETEUpCisgICAgc3luY19qX2RldGVjdGVkX3EgIDw9IDEnYjA7CisvLyBBdCBsZWFzdCBvbmUgSiBkZXRlY3RlZAorZWxzZSBpZiAoc3RhdGVfcSA9PSBTVEFURV9SWF9TWU5DX0opCisgICAgc3luY19qX2RldGVjdGVkX3EgIDw9IDEnYjE7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJ4IEVycm9yIERldGVjdGlvbgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcmVnIHJ4X2Vycm9yX3E7CisKK2Fsd2F5cyBAIChwb3NlZGdlIGNsa19pIG9yIG5lZ2VkZ2UgcnN0bl9pKQoraWYgKCFyc3RuX2kpCisgICAgcnhfZXJyb3JfcSAgPD0gMSdiMDsKKy8vIFJ4IGJpdCBzdHVmZmluZyBlcnJvcgorZWxzZSBpZiAob25lc19jb3VudF9xID09IDMnZDcpCisgICAgcnhfZXJyb3JfcSAgPD0gMSdiMTsKKy8vIEludmFsaWQgbGluZSBzdGF0ZSBkZXRlY3Rpb24KK2Vsc2UgaWYgKGluX2ludmFsaWRfdyAmJiBzYW1wbGVfdykKKyAgICByeF9lcnJvcl9xICA8PSAxJ2IxOworLy8gRGV0ZWN0IGludmFsaWQgU1lOQyBzZXF1ZW5jZQorZWxzZSBpZiAoKHN0YXRlX3EgPT0gU1RBVEVfUlhfU1lOQ19LKSAmJiAhc3luY19qX2RldGVjdGVkX3EgJiYgaW5fa193ICYmIHNhbXBsZV93KQorICAgIHJ4X2Vycm9yX3EgIDw9IDEnYjE7CitlbHNlCisgICAgcnhfZXJyb3JfcSAgPD0gMSdiMDsKKworYXNzaWduIHV0bWlfcnhlcnJvcl9vID0gcnhfZXJyb3JfcTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gRWRnZSBEZXRlY3RvcgorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcmVnIHJ4ZF9sYXN0X3E7CisKK2Fsd2F5cyBAIChwb3NlZGdlIGNsa19pIG9yIG5lZ2VkZ2UgcnN0bl9pKQoraWYgKCFyc3RuX2kpCisgICAgcnhkX2xhc3RfcSAgPD0gMSdiMDsKK2Vsc2UKKyAgICByeGRfbGFzdF9xICA8PSBpbl9qX3c7CisKK2Fzc2lnbiBiaXRfZWRnZV93ID0gcnhkX2xhc3RfcSBeIGluX2pfdzsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gU2FtcGxlIFRpbWVyCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCityZWcgWzE6MF0gc2FtcGxlX2NudF9xOworcmVnICAgICAgIGFkanVzdF9kZWxheWVkX3E7CisKK2Fsd2F5cyBAIChwb3NlZGdlIGNsa19pIG9yIG5lZ2VkZ2UgcnN0bl9pKQoraWYgKCFyc3RuX2kpCitiZWdpbgorICAgIHNhbXBsZV9jbnRfcSAgICAgICAgPD0gMidkMDsKKyAgICBhZGp1c3RfZGVsYXllZF9xICAgIDw9IDEnYjA7CitlbmQKKy8vIERlbGF5ZWQgYWRqdXN0bWVudAorZWxzZSBpZiAoYWRqdXN0X2RlbGF5ZWRfcSkKKyAgICBhZGp1c3RfZGVsYXllZF9xICAgIDw9IDEnYjA7CitlbHNlIGlmIChiaXRfZWRnZV93ICYmIChzYW1wbGVfY250X3EgIT0gMidkMCkgJiYgKHN0YXRlX3EgPCBTVEFURV9UWF9TWU5DKSkKKyAgICBzYW1wbGVfY250X3EgICAgICAgIDw9IDInZDA7CisvLyBDYW4ndCBhZGp1c3Qgc2FtcGxpbmcgcG9pbnQgbm93PworZWxzZSBpZiAoYml0X2VkZ2VfdyAmJiAoc2FtcGxlX2NudF9xID09IDInZDApICYmIChzdGF0ZV9xIDwgU1RBVEVfVFhfU1lOQykpCitiZWdpbgorICAgIC8vIFdhbnQgdG8gcmVzZXQgc2FtcGxpbmcgcG9pbnQgYnV0IG5lZWQgdG8gZGVsYXkgYWRqdXN0bWVudCBieSAxIGN5Y2xlIQorICAgIGFkanVzdF9kZWxheWVkX3EgICAgPD0gMSdiMTsKKyAgICBzYW1wbGVfY250X3EgICAgICAgIDw9IHNhbXBsZV9jbnRfcSArIDInZDE7CitlbmQKK2Vsc2UKKyAgICBzYW1wbGVfY250X3EgICAgICAgIDw9IHNhbXBsZV9jbnRfcSArIDInZDE7CisKK2Fzc2lnbiBzYW1wbGVfdyA9IChzYW1wbGVfY250X3EgPT0gMidkMCk7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIE5SWkkgUmVjZWl2ZXIKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3JlZyByeGRfbGFzdF9qX3E7CisKKy8vIE5SWkk6CisvLyAwID0gdHJhbnNpdGlvbiBiZXR3ZWVuIEogJiBLCisvLyAxID0gc2FtZSBzdGF0ZQorLy8gQWZ0ZXIgNiBjb25zZXF1aXRpdmUgMSdzLCBhIDAgaXMgaW5zZXJ0ZWQgdG8gbWFpbnRhaW4gdGhlIHRyYW5zaXRpb25zCisKK2Fsd2F5cyBAIChwb3NlZGdlIGNsa19pIG9yIG5lZ2VkZ2UgcnN0bl9pKQoraWYgKCFyc3RuX2kpCisgICAgcnhkX2xhc3Rfal9xICA8PSAxJ2IwOworZWxzZSBpZiAoKHN0YXRlX3EgPT0gU1RBVEVfSURMRSkgfHwgc2FtcGxlX3cpCisgICAgcnhkX2xhc3Rfal9xICA8PSBpbl9qX3c7CisKK2Fzc2lnbiBiaXRfdHJhbnNpdGlvbl93ID0gc2FtcGxlX3cgPyByeGRfbGFzdF9qX3EgXiBpbl9qX3cgOiAxJ2IwOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBCaXQgQ291bnRlcnMKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2Fsd2F5cyBAIChwb3NlZGdlIGNsa19pIG9yIG5lZ2VkZ2UgcnN0bl9pKQoraWYgKCFyc3RuX2kpCisgICAgb25lc19jb3VudF9xIDw9IDMnZDE7CisvLyBUaGUgcGFja2V0IHN0YXJ0cyB3aXRoIGEgZG91YmxlIEsgKG5vIHRyYW5zaXRpb24pCitlbHNlIGlmIChzdGF0ZV9xID09IFNUQVRFX0lETEUpCisgICAgb25lc19jb3VudF9xIDw9IDMnZDE7CisvLyBSeAorZWxzZSBpZiAoKHN0YXRlX3EgPT0gU1RBVEVfUlhfQUNUSVZFKSAmJiBzYW1wbGVfdykKK2JlZ2luCisgICAgaWYgKGJpdF90cmFuc2l0aW9uX3cpCisgICAgICAgIG9uZXNfY291bnRfcSA8PSAzJ2IwOworICAgIGVsc2UKKyAgICAgICAgb25lc19jb3VudF9xIDw9IG9uZXNfY291bnRfcSArIDMnZDE7CitlbmQKKy8vIFR4CitlbHNlIGlmICgoc3RhdGVfcSA9PSBTVEFURV9UWF9BQ1RJVkUpICYmIHNhbXBsZV93KQorYmVnaW4KKyAgICAvLyBUb2dnbGUgb3V0cHV0IGRhdGEKKyAgICBpZiAoIWRhdGFfcVswXSB8fCBiaXRfc3R1ZmZfYml0X3cpCisgICAgICAgIG9uZXNfY291bnRfcSA8PSAzJ2IwOworICAgIGVsc2UKKyAgICAgICAgb25lc19jb3VudF9xIDw9IG9uZXNfY291bnRfcSArIDMnZDE7CitlbmQKKworYXNzaWduIGJpdF9zdHVmZl9iaXRfdyAgICAgPSAob25lc19jb3VudF9xID09IDMnZDYpOworYXNzaWduIG5leHRfaXNfYml0X3N0dWZmX3cgPSAob25lc19jb3VudF9xID09IDMnZDUpICYmICFiaXRfdHJhbnNpdGlvbl93OworCithbHdheXMgQCAocG9zZWRnZSBjbGtfaSBvciBuZWdlZGdlIHJzdG5faSkKK2lmICghcnN0bl9pKQorICAgIGJpdF9jb3VudF9xIDw9IDMnYjA7CitlbHNlIGlmICgoc3RhdGVfcSA9PSBTVEFURV9JRExFKSB8fCAoc3RhdGVfcSA9PSBTVEFURV9SWF9TWU5DX0spKQorICAgIGJpdF9jb3VudF9xIDw9IDMnYjA7CitlbHNlIGlmICgoc3RhdGVfcSA9PSBTVEFURV9SWF9BQ1RJVkUgfHwgc3RhdGVfcSA9PSBTVEFURV9UWF9BQ1RJVkUpICYmIHNhbXBsZV93ICYmICFiaXRfc3R1ZmZfYml0X3cpCisgICAgYml0X2NvdW50X3EgPD0gYml0X2NvdW50X3EgKyAzJ2QxOworZWxzZSBpZiAoKChzdGF0ZV9xID09IFNUQVRFX1RYX1NZTkMpIHx8IChzdGF0ZV9xID09IFNUQVRFX1JYX1NZTkNfSikpICYmIHNhbXBsZV93KQorICAgIGJpdF9jb3VudF9xIDw9IGJpdF9jb3VudF9xICsgMydkMTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gU2hpZnQgcmVnaXN0ZXIKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2Fsd2F5cyBAIChwb3NlZGdlIGNsa19pIG9yIG5lZ2VkZ2UgcnN0bl9pKQoraWYgKCFyc3RuX2kpCisgICAgZGF0YV9xICA8PSA4J2IwOworLy8gUHJlLWxvYWQgc2hpZnQgcmVnaXN0ZXIgd2l0aCBTWU5DIHdvcmQKK2Vsc2UgaWYgKHN0YXRlX3EgPT0gU1RBVEVfSURMRSkKKyAgICBkYXRhX3EgIDw9IDgnYjAwMTAxMDEwOworZWxzZSBpZiAoKHN0YXRlX3EgPT0gU1RBVEVfUlhfQUNUSVZFKSAmJiBzYW1wbGVfdyAmJiAhYml0X3N0dWZmX2JpdF93KQorICAgIGRhdGFfcSAgPD0ge35iaXRfdHJhbnNpdGlvbl93LCBkYXRhX3FbNzoxXX07CitlbHNlIGlmICgoc3RhdGVfcSA9PSBTVEFURV9UWF9TWU5DKSAmJiBzYW1wbGVfdykKK2JlZ2luCisgICAgaWYgKGJpdF9jb3VudF9xID09IDMnZDcpCisgICAgICAgIGRhdGFfcSAgPD0gdXRtaV9kYXRhX291dF9pOworICAgIGVsc2UKKyAgICAgICAgZGF0YV9xICA8PSB7fmJpdF90cmFuc2l0aW9uX3csIGRhdGFfcVs3OjFdfTsKK2VuZCAgICAKK2Vsc2UgaWYgKChzdGF0ZV9xID09IFNUQVRFX1RYX0FDVElWRSkgJiYgc2FtcGxlX3cgJiYgIWJpdF9zdHVmZl9iaXRfdykKK2JlZ2luCisgICAgaWYgKGJpdF9jb3VudF9xID09IDMnZDcpCisgICAgICAgIGRhdGFfcSAgPD0gdXRtaV9kYXRhX291dF9pOworICAgIGVsc2UKKyAgICAgICAgZGF0YV9xICA8PSB7fmJpdF90cmFuc2l0aW9uX3csIGRhdGFfcVs3OjFdfTsKK2VuZAorCisvLyBSZWNlaXZlIGFjdGl2ZSAoU1lOQyByZWNpZXZlZCkKK2Fzc2lnbiB1dG1pX3J4YWN0aXZlX28gPSAoc3RhdGVfcSA9PSBTVEFURV9SWF9BQ1RJVkUpOworCithc3NpZ24gdXRtaV9kYXRhX2luX28gID0gZGF0YV9xOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBSeCBSZWFkeQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcmVnIHJ4X3JlYWR5X3E7CisKK2Fsd2F5cyBAIChwb3NlZGdlIGNsa19pIG9yIG5lZ2VkZ2UgcnN0bl9pKQoraWYgKCFyc3RuX2kpCisgICAgcnhfcmVhZHlfcSA8PSAxJ2IwOworZWxzZSBpZiAoKHN0YXRlX3EgPT0gU1RBVEVfUlhfQUNUSVZFKSAmJiBzYW1wbGVfdyAmJiAoYml0X2NvdW50X3EgPT0gMydkNykgJiYgIWJpdF9zdHVmZl9iaXRfdykKKyAgICByeF9yZWFkeV9xIDw9IDEnYjE7CitlbHNlCisgICAgcnhfcmVhZHlfcSA8PSAxJ2IwOworCithc3NpZ24gdXRtaV9yeHZhbGlkX28gID0gcnhfcmVhZHlfcTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gVHggUmVhZHkKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3JlZyB0eF9yZWFkeV9xOworCithbHdheXMgQCAocG9zZWRnZSBjbGtfaSBvciBuZWdlZGdlIHJzdG5faSkKK2lmICghcnN0bl9pKQorICAgIHR4X3JlYWR5X3EgPD0gMSdiMDsKK2Vsc2UgaWYgKChzdGF0ZV9xID09IFNUQVRFX1RYX1NZTkMpICYmIHNhbXBsZV93ICYmIChiaXRfY291bnRfcSA9PSAzJ2Q3KSkKKyAgICB0eF9yZWFkeV9xIDw9IDEnYjE7CitlbHNlIGlmICgoc3RhdGVfcSA9PSBTVEFURV9UWF9BQ1RJVkUpICYmIHNhbXBsZV93ICYmICFiaXRfc3R1ZmZfYml0X3cgJiYgKGJpdF9jb3VudF9xID09IDMnZDcpICYmICFzZW5kX2VvcF9xKQorICAgIHR4X3JlYWR5X3EgPD0gMSdiMTsKK2Vsc2UKKyAgICB0eF9yZWFkeV9xIDw9IDEnYjA7CisKK2Fzc2lnbiB1dG1pX3R4cmVhZHlfbyAgPSB0eF9yZWFkeV9xOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBFT1AgcGVuZGluZworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorYWx3YXlzIEAgKG5lZ2VkZ2UgcnN0bl9pIG9yIG5lZ2VkZ2UgY2xrX2kpCitpZiAoIXJzdG5faSkKKyAgICBzZW5kX2VvcF9xICA8PSAxJ2IwOworZWxzZSBpZiAoKHN0YXRlX3EgPT0gU1RBVEVfVFhfQUNUSVZFKSAmJiAhdXRtaV90eHZhbGlkX2kpCisgICAgc2VuZF9lb3BfcSAgPD0gMSdiMTsKK2Vsc2UgaWYgKHN0YXRlX3EgPT0gU1RBVEVfVFhfRU9QMCkKKyAgICBzZW5kX2VvcF9xICA8PSAxJ2IwOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBUeAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2lyZSBvdXRfYml0X3cgPSBzYW1wbGVfdyA/IGRhdGFfcVswXSA6IDEnYno7CisKK2Fsd2F5cyBAIChwb3NlZGdlIGNsa19pIG9yIG5lZ2VkZ2UgcnN0bl9pKQoraWYgKCFyc3RuX2kpCitiZWdpbgorICAgIG91dF9kcF9xIDw9IDEnYjA7CisgICAgb3V0X2RuX3EgPD0gMSdiMDsKKyAgICByeF9lbl9xICA8PSAxJ2IxOworZW5kCitlbHNlIGlmIChzdGF0ZV9xID09IFNUQVRFX0lETEUpCitiZWdpbgorICAgIC8vIElETEUKKyAgICBvdXRfZHBfcSA8PSAxJ2IxOworICAgIG91dF9kbl9xIDw9IDEnYjA7CisKKyAgICBpZiAodXRtaV90eHZhbGlkX2kgfHwgdXNiX3Jlc2V0X2Fzc2VydF93KQorICAgICAgICByeF9lbl9xIDw9IDEnYjA7CisgICAgZWxzZQorICAgICAgICByeF9lbl9xIDw9IDEnYjE7CitlbmQKK2Vsc2UgaWYgKChzdGF0ZV9xID09IFNUQVRFX1RYX1NZTkMpICYmIHNhbXBsZV93KQorYmVnaW4KKyAgICBvdXRfZHBfcSA8PSBkYXRhX3FbMF07CisgICAgb3V0X2RuX3EgPD0gfmRhdGFfcVswXTsKK2VuZAorZWxzZSBpZiAoKHN0YXRlX3EgPT0gU1RBVEVfVFhfQUNUSVZFIHx8IHN0YXRlX3EgPT0gU1RBVEVfVFhfRU9QX1NUVUZGKSAmJiBzYW1wbGVfdykKK2JlZ2luCisgICAgLy8gMCA9IHRvZ2dsZSwgMSA9IGhvbGQKKyAgICBpZiAoIWRhdGFfcVswXSB8fCBiaXRfc3R1ZmZfYml0X3cpCisgICAgYmVnaW4KKyAgICAgICAgb3V0X2RwX3EgPD0gfm91dF9kcF9xOworICAgICAgICBvdXRfZG5fcSA8PSB+b3V0X2RuX3E7CisgICAgZW5kCitlbmQKK2Vsc2UgaWYgKChzdGF0ZV9xID09IFNUQVRFX1RYX0VPUDAgfHwgc3RhdGVfcSA9PSBTVEFURV9UWF9FT1AxKSAmJiBzYW1wbGVfdykKK2JlZ2luCisgICAgLy8gU0UwCisgICAgb3V0X2RwX3EgPD0gMSdiMDsKKyAgICBvdXRfZG5fcSA8PSAxJ2IwOworZW5kCitlbHNlIGlmICgoc3RhdGVfcSA9PSBTVEFURV9UWF9FT1AyKSAmJiBzYW1wbGVfdykKK2JlZ2luCisgICAgLy8gSURMRQorICAgIG91dF9kcF9xIDw9IDEnYjE7CisgICAgb3V0X2RuX3EgPD0gMSdiMDsKKworICAgIC8vIFNldCBidXMgdG8gaW5wdXQKKyAgICByeF9lbl9xIDw9IDEnYjE7CitlbmQKK2Vsc2UgaWYgKHN0YXRlX3EgPT0gU1RBVEVfVFhfUlNUKQorYmVnaW4KKyAgICAvLyBTRTAKKyAgICBvdXRfZHBfcSA8PSAxJ2IwOworICAgIG91dF9kbl9xIDw9IDEnYjA7CitlbmQKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUmVzZXQgZGV0ZWN0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCityZWcgWzY6MF0gc2UwX2NudF9xOworCithbHdheXMgQCAocG9zZWRnZSBjbGtfaSBvciBuZWdlZGdlIHJzdG5faSkKK2lmICghcnN0bl9pKQorICAgIHNlMF9jbnRfcSA8PSA3J2IwOworZWxzZSBpZiAoaW5fc2UwX3cpCitiZWdpbgorICAgIGlmIChzZTBfY250X3EgIT0gNydkMTI3KQorICAgICAgICBzZTBfY250X3EgPD0gc2UwX2NudF9xICsgNydkMTsKK2VuZCAgICAKK2Vsc2UKKyAgICBzZTBfY250X3EgPD0gNydiMDsKKworYXNzaWduIHVzYl9yZXNldF9kZXRlY3RfbyA9IChzZTBfY250X3EgPT0gNydkMTI3KTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gVHJhbnNjZWl2ZXIgSW50ZXJmYWNlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBUeCBvdXRwdXQgZW5hYmxlIChhY3RpdmUgbG93KQorYXNzaWduIHVzYl90eF9vZW5fbyA9IHJ4X2VuX3E7CisKKy8vIFR4ICsvLQorYXNzaWduIHVzYl90eF9kcF9vICA9IG91dF9kcF9xOworYXNzaWduIHVzYl90eF9kbl9vICA9IG91dF9kbl9xOworCisvLyBSZWNlaXZlIEQrL0QtCithc3NpZ24gaW5fZHBfdyA9IHVzYl9yeF9kcF9pOworYXNzaWduIGluX2RuX3cgPSB1c2JfcnhfZG5faTsKKworLy8gUmVjZWl2ZSBkYXRhCithc3NpZ24gaW5fcnhfdyA9IHVzYl9yeF9yY3ZfaTsKKworLy8gVVNCIGRldmljZSBwdWxsLXVwIGVuYWJsZQorYXNzaWduIHVzYl9lbl9vID0gdXRtaV90ZXJtc2VsZWN0X2k7CisKKworZW5kbW9kdWxlCmRpZmYgLS1naXQgYS92ZXJpbG9nL3J0bC91c2IxX2hvc3Qvc3JjL3BoeS91c2JfdHJhbnNjZWl2ZXIudiBiL3Zlcmlsb2cvcnRsL3VzYjFfaG9zdC9zcmMvcGh5L3VzYl90cmFuc2NlaXZlci52Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhMzU3NWIKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC91c2IxX2hvc3Qvc3JjL3BoeS91c2JfdHJhbnNjZWl2ZXIudgpAQCAtMCwwICsxLDE4NyBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxICwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgIAorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IENyZWF0ZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKy8vCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgICAgICAgICAgICAgICAgICAgIFVTQiBGdWxsIFNwZWVkICgxMm1icHMpIFBoeQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWMC4yCisvLyAgICAgICAgICAgICAgICAgICAgICAgIFVsdHJhLUVtYmVkZGVkLmNvbQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIENvcHlyaWdodCAyMDE1CisvLworLy8gICAgICAgICAgICAgICAgIEVtYWlsOiBhZG1pbkB1bHRyYS1lbWJlZGRlZC5jb20KKy8vCisvLyAgICAgICAgICAgICAgICAgICAgICAgICBMaWNlbnNlOiBMR1BMCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLworLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgIAorLy8gcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgIAorLy8gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgIAorLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuIAorLy8KKy8vIFRoaXMgc291cmNlIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgICAKKy8vIGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAKKy8vIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAKKy8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgICAKKy8vIGxhdGVyIHZlcnNpb24uCisvLworLy8gVGhpcyBzb3VyY2UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlICAgICAgIAorLy8gdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCAgIAorLy8gd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAgICAgIAorLy8gUFVSUE9TRS4gIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIAorLy8gZGV0YWlscy4KKy8vCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAgCisvLyBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgc291cmNlOyBpZiBub3QsIHdyaXRlIHRvIHRoZSAKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIAorLy8gQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICBHZW5lcmF0ZWQgRmlsZQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCittb2R1bGUgdXNiX3RyYW5zY2VpdmVyCisoCisgICAgLy8gSW5wdXRzCisgICAgIGlucHV0ICAgICAgICAgICB1c2JfcGh5X3R4X2RwX2ksCisgICAgIGlucHV0ICAgICAgICAgICB1c2JfcGh5X3R4X2RuX2ksCisgICAgIGlucHV0ICAgICAgICAgICB1c2JfcGh5X3R4X29lbl9pLAorICAgICBpbnB1dCAgICAgICAgICAgbW9kZV9pLAorCisgICAgIG91dHB1dCByZWcgICAgICAgb3V0X2RwLAorICAgICBvdXRwdXQgcmVnICAgICAgIG91dF9kbiwKKyAgICAgb3V0cHV0ICAgICAgICAgICBvdXRfdHhfb2VuLAorCisgICAgLy8gT3V0cHV0cworICAgICBpbnB1dCAgICAgICAgICAgIGluX2RwLAorICAgICBpbnB1dCAgICAgICAgICAgIGluX2RuLAorCisgICAgIG91dHB1dCAgICAgICAgICB1c2JfcGh5X3J4X3Jjdl9vLAorICAgICBvdXRwdXQgICAgICAgICAgdXNiX3BoeV9yeF9kcF9vLAorICAgICBvdXRwdXQgICAgICAgICAgdXNiX3BoeV9yeF9kbl9vCispOworCisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTW9kdWxlOiB1c2JfdHJhbnNjZWl2ZXIKKy8vIEVtdWxhdGUgc3RhbmRhcmQgVVNCIFBIWSBpbnRlcmZhY2UgYW5kIHByb2R1Y2UgYSBEKy9ELSBvdXRwdXRzLgorLy8gQWxsb3dzIGRpcmVjdCBjb25uZWN0aW9uIG9mIFVTQiBwb3J0IHRvIEZQR0EuCisvLyBMaW1pdGF0aW9uczoKKy8vIEFzIG5vIGRpZmZlcmVudGlhbCBhbXBsaWZpZXIgcHJlc2VudCwgbm8gY29tbW9uIG1vZGUgbm9pc2UKKy8vIHJlamVjdGlvbiBvY2N1cnMuCisvLyBVbmxpa2VseSB0byB3b3JrIHdlbGwgd2l0aCBsb25nZXIgY29ubmVjdGlvbnMhCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFdpcmVzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEFzc2lnbm1lbnRzCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8vIEQrL0QtIFRyaXN0YXRlIGJ1ZmZlcnMKKy8vYXNzaWduIHVzYl9kcF9pbyA9ICh1c2JfcGh5X3R4X29lbl9pID09IDEnYjApID8gb3V0X2RwIDogMSdiejsKKy8vYXNzaWduIHVzYl9kbl9pbyA9ICh1c2JfcGh5X3R4X29lbl9pID09IDEnYjApID8gb3V0X2RuIDogMSdiejsKKy8vCithc3NpZ24gICBvdXRfdHhfb2VuID0gdXNiX3BoeV90eF9vZW5faTsKKworLy8gUmVjZWl2ZSBEKy9ELQorYXNzaWduIHVzYl9waHlfcnhfZHBfbyA9IGluX2RwOworYXNzaWduIHVzYl9waHlfcnhfZG5fbyA9IGluX2RuOworCisvLyBSZWNlaXZlIG91dHB1dAorYXNzaWduIHVzYl9waHlfcnhfcmN2X28gPSAoaW5fZHAgPT0gMSdiMSAmJiBpbl9kbiA9PSAxJ2IwKSA/IDEnYjEgOiAxJ2IwOworCisvLyBQSFkgVHJhbnNtaXQgTW9kZToKKy8vIFdoZW4gcGh5X3R4X21vZGVfaSBpcyAnMCcgdGhlIG91dHB1dHMgYXJlIGVuY29kZWQgYXM6CisvLyAgICAgdm1vX2ksIHZwb19pCisvLyAgICAgIDAgICAgMCAgICBEaWZmZXJlbnRpYWwgTG9naWMgJzAnCisvLyAgICAgIDAgICAgMSAgICBEaWZmZXJlbnRpYWwgTG9naWMgJzEnCisvLyAgICAgIDEgICAgMCAgICBTaW5nbGUgRW5kZWQgJzAnCisvLyAgICAgIDEgICAgMSAgICBTaW5nbGUgRW5kZWQgJzAnCisvLyBXaGVuIHBoeV90eF9tb2RlX2kgaXMgJzEnIHRoZSBvdXRwdXRzIGFyZSBlbmNvZGVkIGFzOgorLy8gICAgIHZtb19pLCB2cG9faQorLy8gICAgICAwICAgIDAgICAgU2luZ2xlIEVuZGVkICcwJworLy8gICAgICAwICAgIDEgICAgRGlmZmVyZW50aWFsIExvZ2ljICcxJworLy8gICAgICAxICAgIDAgICAgRGlmZmVyZW50aWFsIExvZ2ljICcwJworLy8gICAgICAxICAgIDEgICAgSWxsZWdhbCBTdGF0ZQorYWx3YXlzX2NvbWIgCitiZWdpbiA6IE1VWAorLy8gTG9naWMgIjAiCitvdXRfZHAgPSAxJ2IwOworb3V0X2RuID0gMSdiMTsKKyBjYXNlKG1vZGVfaSkKKyAgICAxJ2IwOgorICAgIGJlZ2luCisgICAgICAgIGlmICh1c2JfcGh5X3R4X2RwX2kgPT0gMSdiMCAmJiB1c2JfcGh5X3R4X2RuX2kgPT0gMSdiMCkKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIC8vIExvZ2ljICIwIgorICAgICAgICAgICAgb3V0X2RwID0gMSdiMDsKKyAgICAgICAgICAgIG91dF9kbiA9IDEnYjE7CisgICAgICAgIGVuZAorICAgICAgICBlbHNlIGlmICh1c2JfcGh5X3R4X2RwX2kgPT0gMSdiMCAmJiB1c2JfcGh5X3R4X2RuX2kgPT0gMSdiMSkKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIC8vIFNFMCAoYm90aCBsb3cpCisgICAgICAgICAgICBvdXRfZHAgPSAxJ2IwOworICAgICAgICAgICAgb3V0X2RuID0gMSdiMDsKKyAgICAgICAgZW5kCisgICAgICAgIGVsc2UgaWYgKHVzYl9waHlfdHhfZHBfaSA9PSAxJ2IxICYmIHVzYl9waHlfdHhfZG5faSA9PSAxJ2IwKQorICAgICAgICBiZWdpbgorICAgICAgICAgICAgLy8gTG9naWMgIjEiCisgICAgICAgICAgICBvdXRfZHAgPSAxJ2IxOworICAgICAgICAgICAgb3V0X2RuID0gMSdiMDsKKyAgICAgICAgZW5kCisgICAgICAgIGVsc2UgaWYgKHVzYl9waHlfdHhfZHBfaSA9PSAxJ2IxICYmIHVzYl9waHlfdHhfZG5faSA9PSAxJ2IxKQorICAgICAgICBiZWdpbgorICAgICAgICAgICAgLy8gU0UwIChib3RoIGxvdykKKyAgICAgICAgICAgIG91dF9kcCA9IDEnYjA7CisgICAgICAgICAgICBvdXRfZG4gPSAxJ2IwOworICAgICAgICBlbmQKKyAgICBlbmQKKyAgICAxJ2IxIDoKKyAgICBiZWdpbgorICAgICAgICBpZiAodXNiX3BoeV90eF9kcF9pID09IDEnYjAgJiYgdXNiX3BoeV90eF9kbl9pID09IDEnYjApCisgICAgICAgIGJlZ2luCisgICAgICAgICAgICAvLyBTRTAgKGJvdGggbG93KQorICAgICAgICAgICAgb3V0X2RwID0gMSdiMDsKKyAgICAgICAgICAgIG91dF9kbiA9IDEnYjA7CisgICAgICAgIGVuZAorICAgICAgICBlbHNlIGlmICh1c2JfcGh5X3R4X2RwX2kgPT0gMSdiMCAmJiB1c2JfcGh5X3R4X2RuX2kgPT0gMSdiMSkKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIC8vIExvZ2ljICIwIgorICAgICAgICAgICAgb3V0X2RwID0gMSdiMDsKKyAgICAgICAgICAgIG91dF9kbiA9IDEnYjE7CisgICAgICAgIGVuZAorICAgICAgICBlbHNlIGlmICh1c2JfcGh5X3R4X2RwX2kgPT0gMSdiMSAmJiB1c2JfcGh5X3R4X2RuX2kgPT0gMSdiMCkKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIC8vIExvZ2ljICIxIgorICAgICAgICAgICAgb3V0X2RwID0gMSdiMTsKKyAgICAgICAgICAgIG91dF9kbiA9IDEnYjA7CisgICAgICAgIGVuZAorICAgICAgICBlbHNlIGlmICh1c2JfcGh5X3R4X2RwX2kgPT0gMSdiMSAmJiB1c2JfcGh5X3R4X2RuX2kgPT0gMSdiMSkKKyAgICAgICAgYmVnaW4KKyAgICAgICAgICAgIC8vIElsbGVnYWwKKyAgICAgICAgICAgIG91dF9kcCA9IDEnYjE7CisgICAgICAgICAgICBvdXRfZG4gPSAxJ2IxOworICAgICAgICBlbmQKKyAgICBlbmQKKyBlbmRjYXNlCitlbmQKKworCitlbmRtb2R1bGUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3VzYjFfaG9zdC9zcmMvdG9wL3VzYjFfaG9zdC5zdiBiL3Zlcmlsb2cvcnRsL3VzYjFfaG9zdC9zcmMvdG9wL3VzYjFfaG9zdC5zdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGU3MGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvdXNiMV9ob3N0L3NyYy90b3AvdXNiMV9ob3N0LnN2CkBAIC0wLDAgKzEsMjM4IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEgLCBEaW5lc2ggQW5uYXl5YSAgICAgICAgICAgICAgICAgICAgICAgICAgCisvLyAKKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogQ3JlYXRlZCBieSBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFVTQjEuMSBIT1NUIENvbnRyb2xsZXIgKyBQSFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBZSUZpdmUgY29yZXMgcHJvamVjdCAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHBzOi8vZ2l0aHViLmNvbS9kaW5lc2hhbm5heXlhL3lpZml2ZV9yMC5naXQgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFVTQjEgQ29yZSBmcm9tIGdpdGh1Yi5jb20vdWx0cmFlbWJlZGRlZC9jb3JlX3VzYl9ob3N0ICAgICAgIC8vLy8KKy8vLy8gIFVTQkIgUGh5IGZyb20gZ2l0aHViLmNvbS91bHRyYWVtYmVkZGVkL2NvcmVfdXNiX2ZzX3BoeS5naXQgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gRm9sbG93aW5nIE1vZGlmaWNhdGlvbiBhcmUgRG9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAxLiBJbnRlZ3JhdGVkIHRoZSBXaXNoYm9uZSBJbnRlcmZhY2UgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAyLiBXaXNoQm9uZSBpbnRlcmZhY2UgbWFkZSBhc3luYyB3LnIudCB1c2IgY2xvY2sgICAgICAgICAgIC8vLy8KKy8vLy8gICAzLiB1c2IxIGNvcmUgQXhpIGxvZ2ljIGlzIG1vZGlmaWVkIHRvIG5vcm1hbCBSZWdpc3RlciAgICAgIC8vLy8KKy8vLy8gICAgICByZWFkL3dyaXRlIEkvRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICBUaGlzIG1vZHVsZSBpbnRlZ3JhdGUgZm9sbG93aW5nIHN1YiBtb2R1bGUgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAxLiBhc3luY193YiA6IEFzeW5jIHdpc2hib25lIGludGVyZmFjZSBkb2VzIHRoZSB3aXNoYm9uZSAgIC8vLy8KKy8vLy8gICAgICB0byB1c2JjbGsgY2xvY2sgc3luY2hyb25pemF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAyLiB1c2IxX2NvcmU6ICB1c2IxIGNvcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAzLiB1c2IxX2hvc3QgOiB1c2IgcGh5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICBBc3N1bXB0aW9tOiB1c2JfY2xrIGlzIDQ4TWh6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcihzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAtIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFJldmlzaW9uIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworbW9kdWxlIHVzYjFfaG9zdCAoCisgICAgaW5wdXQgIGxvZ2ljICAgICAgICAgICB1c2JfY2xrX2kgICAsCisgICAgaW5wdXQgIGxvZ2ljICAgICAgICAgICB1c2JfcnN0bl9pICAsCisKKyAgICAgICAgLy8gVVNCIEQrL0QtCisgICAgaW5wdXQgICAgICAgICAgICAgICAgICBpbl9kcCAgICwKKyAgICBpbnB1dCAgICAgICAgICAgICAgICAgIGluX2RuICAgLAorCisgICAgaW5wdXQgICAgICAgICAgICAgICAgICBvdXRfZHAgICAsCisgICAgaW5wdXQgICAgICAgICAgICAgICAgICBvdXRfZG4gICAsCisgICAgb3V0cHV0ICAgICAgICAgICAgICAgICBvdXRfdHhfb2VuLAorCisgICAgLy8gTWFzdGVyIFBvcnQKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgIHdibV9yc3RfbiAgICwgIC8vIFJlZ3VsYXIgUmVzZXQgc2lnbmFsCisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICB3Ym1fY2xrX2kgICAsICAvLyBTeXN0ZW0gY2xvY2sKKyAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgIHdibV9zdGJfaSAgICwgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgaW5wdXQgICBsb2dpYyBbNTowXSAgICB3Ym1fYWRyX2kgICAsICAvLyBhZGRyZXNzCisgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICB3Ym1fd2VfaSAgICAsICAvLyB3cml0ZQorICAgIGlucHV0ICAgbG9naWMgWzMxOjBdICAgd2JtX2RhdF9pICAgLCAgLy8gZGF0YSBvdXRwdXQKKyAgICBpbnB1dCAgIGxvZ2ljIFszOjBdICAgIHdibV9zZWxfaSAgICwgIC8vIGJ5dGUgZW5hYmxlCisgICAgb3V0cHV0ICBsb2dpYyBbMzE6MF0gICB3Ym1fZGF0X28gICAsICAvLyBkYXRhIGlucHV0CisgICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICB3Ym1fYWNrX28gICAsICAvLyBhY2tub3dsZWdlbWVudAorICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgd2JtX2Vycl9vICAgLCAgLy8gZXJyb3IKKworICAgIC8vIE91dHB1dHMKKyAgICBvdXRwdXQgICAgICAgICAgICAgICAgIHVzYl9pbnRyX28KKworCisgICAgKTsKKworICAgIGxvZ2ljICBbNzowXSAgICAgICAgICAgdXRtaV9kYXRhX2luX2k7CisgICAgbG9naWMgICAgICAgICAgICAgICAgICB1dG1pX3R4cmVhZHlfaTsKKyAgICBsb2dpYyAgICAgICAgICAgICAgICAgIHV0bWlfcnh2YWxpZF9pOworICAgIGxvZ2ljICAgICAgICAgICAgICAgICAgdXRtaV9yeGFjdGl2ZV9pOworICAgIGxvZ2ljICAgICAgICAgICAgICAgICAgdXRtaV9yeGVycm9yX2k7CisgICAgbG9naWMgIFsxOjBdICAgICAgICAgICB1dG1pX2xpbmVzdGF0ZV9pOworCisgICAgbG9naWMgWzc6MF0gICAgICAgICAgICB1dG1pX2RhdGFfb3V0X287CisgICAgbG9naWMgICAgICAgICAgICAgICAgICB1dG1pX3R4dmFsaWRfbzsKKyAgICBsb2dpYyBbMTowXSAgICAgICAgICAgIHV0bWlfb3BfbW9kZV9vOworICAgIGxvZ2ljIFsxOjBdICAgICAgICAgICAgdXRtaV94Y3Zyc2VsZWN0X287CisgICAgbG9naWMgICAgICAgICAgICAgICAgICB1dG1pX3Rlcm1zZWxlY3RfbzsKKyAgICBsb2dpYyAgICAgICAgICAgICAgICAgIHV0bWlfZHBwdWxsZG93bl9vOworICAgIGxvZ2ljICAgICAgICAgICAgICAgICAgdXRtaV9kbXB1bGxkb3duX287CisgICAgbG9naWMgICAgICAgICAgICAgICAgICB1c2JfcGFkc190eF9kcF93OworICAgIGxvZ2ljICAgICAgICAgICAgICAgICAgdXNiX3BhZHNfdHhfb2VuX3c7CisgICAgbG9naWMgICAgICAgICAgICAgICAgICB1c2JfcGFkc19yeF9kbl93OworICAgIGxvZ2ljICAgICAgICAgICAgICAgICAgdXNiX3BhZHNfdHhfZG5fdzsKKyAgICBsb2dpYyAgICAgICAgICAgICAgICAgIHVzYl9wYWRzX3J4X3Jjdl93OworICAgIGxvZ2ljICAgICAgICAgICAgICAgICAgdXNiX3BhZHNfcnhfZHBfdzsKKyAgICBsb2dpYyAgICAgICAgICAgICAgICAgIHVzYl94Y3ZyX21vZGVfdyA9IDEnaDE7CisKKyAgICAvLyBSZWcgQnVzIEludGVyZmFjZSBTaWduYWwKKyAgICBsb2dpYyAgICAgICAgICAgICAgICAgIHJlZ19jczsKKyAgICBsb2dpYyAgICAgICAgICAgICAgICAgIHJlZ193cjsKKyAgICBsb2dpYyBbNTowXSAgICAgICAgICAgIHJlZ19hZGRyOworICAgIGxvZ2ljIFszMTowXSAgICAgICAgICAgcmVnX3dkYXRhOworICAgIGxvZ2ljIFszOjBdICAgICAgICAgICAgcmVnX2JlOworCisgICAvLyBPdXRwdXRzCisgICAgbG9naWMgWzMxOjBdICAgICAgICAgICByZWdfcmRhdGE7CisgICAgbG9naWMgICAgICAgICAgICAgICAgICByZWdfYWNrOworCisKKworYXN5bmNfd2IgICMoLkFXICg2KSkKKyAgICAgdV9hc3luY193YigKKworICAgIC8vIE1hc3RlciBQb3J0CisgICAgICAgLndibV9yc3RfbiAgICAgICAgKHdibV9yc3RfbiAgICAgICAgICAgICksICAvLyBSZWd1bGFyIFJlc2V0IHNpZ25hbAorICAgICAgIC53Ym1fY2xrX2kgICAgICAgICh3Ym1fY2xrX2kgICAgICAgICAgICApLCAgLy8gU3lzdGVtIGNsb2NrCisgICAgICAgLndibV9jeWNfaSAgICAgICAgKHdibV9zdGJfaSAgICAgICAgICAgICksICAvLyBzdHJvYmUvcmVxdWVzdAorICAgICAgIC53Ym1fc3RiX2kgICAgICAgICh3Ym1fc3RiX2kgICAgICAgICAgICApLCAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAgICAud2JtX2Fkcl9pICAgICAgICAod2JtX2Fkcl9pICAgICAgICAgICAgKSwgIC8vIGFkZHJlc3MKKyAgICAgICAud2JtX3dlX2kgICAgICAgICAod2JtX3dlX2kgICAgICAgICAgICAgKSwgIC8vIHdyaXRlCisgICAgICAgLndibV9kYXRfaSAgICAgICAgKHdibV9kYXRfaSAgICAgICAgICAgICksICAvLyBkYXRhIG91dHB1dAorICAgICAgIC53Ym1fc2VsX2kgICAgICAgICh3Ym1fc2VsX2kgICAgICAgICAgICApLCAgLy8gYnl0ZSBlbmFibGUKKyAgICAgICAud2JtX2RhdF9vICAgICAgICAod2JtX2RhdF9vICAgICAgICAgICAgKSwgIC8vIGRhdGEgaW5wdXQKKyAgICAgICAud2JtX2Fja19vICAgICAgICAod2JtX2Fja19vICAgICAgICAgICAgKSwgIC8vIGFja25vd2xlZ2VtZW50CisgICAgICAgLndibV9lcnJfbyAgICAgICAgKHdibV9lcnJfbyAgICAgICAgICAgICksICAvLyBlcnJvcgorCisgICAgLy8gU2xhdmUgUG9ydAorICAgICAgIC53YnNfcnN0X24gICAgICAgICh1c2JfcnN0bl9pICAgICAgICAgICApLCAgLy8gUmVndWxhciBSZXNldCBzaWduYWwKKyAgICAgICAud2JzX2Nsa19pICAgICAgICAodXNiX2Nsa19pICAgICAgICAgICAgKSwgIC8vIFN5c3RlbSBjbG9jaworICAgICAgIC53YnNfY3ljX28gICAgICAgICggICAgICAgICAgICAgICAgICAgICApLCAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAgICAud2JzX3N0Yl9vICAgICAgICAocmVnX2NzICAgICAgICAgICAgICAgKSwgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgICAgLndic19hZHJfbyAgICAgICAgKHJlZ19hZGRyICAgICAgICAgICAgICksICAvLyBhZGRyZXNzCisgICAgICAgLndic193ZV9vICAgICAgICAgKHJlZ193ciAgICAgICAgICAgICAgICksICAvLyB3cml0ZQorICAgICAgIC53YnNfZGF0X28gICAgICAgIChyZWdfd2RhdGEgICAgICAgICAgICApLCAgLy8gZGF0YSBvdXRwdXQKKyAgICAgICAud2JzX3NlbF9vICAgICAgICAocmVnX2JlICAgICAgICAgICAgICAgKSwgIC8vIGJ5dGUgZW5hYmxlCisgICAgICAgLndic19kYXRfaSAgICAgICAgKHJlZ19yZGF0YSAgICAgICAgICAgICksICAvLyBkYXRhIGlucHV0CisgICAgICAgLndic19hY2tfaSAgICAgICAgKHJlZ19hY2sgICAgICAgICAgICAgICksICAvLyBhY2tub3dsZWdlbWVudAorICAgICAgIC53YnNfZXJyX2kgICAgICAgICgxJ2IwICAgICAgICAgICAgICAgICApICAgICAgLy8gZXJyb3IKKworICAgICk7CisKK3VzYmhfY29yZSAgdV9jb3JlICgKKyAgICAvLyBJbnB1dHMKKyAgICAuY2xrX2kgICAgICAgICAgICAgICAodXNiX2Nsa19pICAgICAgICAgICApLAorICAgIC5yc3RuX2kgICAgICAgICAgICAgICh1c2JfcnN0bl9pICAgICAgICAgICksCisKKyAgICAucmVnX2NzICAgICAgICAgICAgICAocmVnX2NzICAgICAgICAgICAgICApLAorICAgIC5yZWdfd3IgICAgICAgICAgICAgIChyZWdfd3IgICAgICAgICAgICAgICksCisgICAgLnJlZ19hZGRyICAgICAgICAgICAgKHJlZ19hZGRyICAgICAgICAgICAgKSwKKyAgICAucmVnX3dkYXRhICAgICAgICAgICAocmVnX3dkYXRhICAgICAgICAgICApLAorICAgIC5yZWdfYmUgICAgICAgICAgICAgIChyZWdfYmUgICAgICAgICAgICAgICksCisKKyAgIC8vIE91dHB1dHMKKyAgICAucmVnX3JkYXRhICAgICAgICAgICAocmVnX3JkYXRhICAgICAgICAgICApLAorICAgIC5yZWdfYWNrICAgICAgICAgICAgIChyZWdfYWNrICAgICAgICAgICAgICksCisKKyAgICAvLyBPdXRwdXRzCisgICAgLmludHJfbyAgICAgICAgICAgICAgKHVzYl9pbnRyX28gICAgICAgICAgKSwKKworICAgIC51dG1pX2RhdGFfaW5faSAgICAgICh1dG1pX2RhdGFfaW5faSAgICAgICksCisgICAgLnV0bWlfcnh2YWxpZF9pICAgICAgKHV0bWlfcnh2YWxpZF9pICAgICAgKSwKKyAgICAudXRtaV9yeGFjdGl2ZV9pICAgICAodXRtaV9yeGFjdGl2ZV9pICAgICApLAorICAgIC51dG1pX3J4ZXJyb3JfaSAgICAgICh1dG1pX3J4ZXJyb3JfaSAgICAgICksCisgICAgLnV0bWlfbGluZXN0YXRlX2kgICAgKHV0bWlfbGluZXN0YXRlX2kgICAgKSwKKworICAgIC51dG1pX3R4cmVhZHlfaSAgICAgICh1dG1pX3R4cmVhZHlfaSAgICAgICksCisgICAgLnV0bWlfZGF0YV9vdXRfbyAgICAgKHV0bWlfZGF0YV9vdXRfbyAgICAgKSwKKyAgICAudXRtaV90eHZhbGlkX28gICAgICAodXRtaV90eHZhbGlkX28gICAgICApLAorCisgICAgLnV0bWlfb3BfbW9kZV9vICAgICAgKHV0bWlfb3BfbW9kZV9vICAgICAgKSwKKyAgICAudXRtaV94Y3Zyc2VsZWN0X28gICAodXRtaV94Y3Zyc2VsZWN0X28gICApLAorICAgIC51dG1pX3Rlcm1zZWxlY3RfbyAgICh1dG1pX3Rlcm1zZWxlY3RfbyAgICksCisgICAgLnV0bWlfZHBwdWxsZG93bl9vICAgKHV0bWlfZHBwdWxsZG93bl9vICAgKSwKKyAgICAudXRtaV9kbXB1bGxkb3duX28gICAodXRtaV9kbXB1bGxkb3duX28gICApCispOworCisKKwordXNiX2ZzX3BoeSAgdV9waHkoCisgICAgLy8gSW5wdXRzCisgICAgICAgICAuY2xrX2kgICAgICAgICAgICAgICAodXNiX2Nsa19pICAgICAgICAgICApLAorICAgICAgICAgLnJzdG5faSAgICAgICAgICAgICAgKHVzYl9yc3RuX2kgICAgICAgICAgKSwKKyAgICAgICAgIC51dG1pX2RhdGFfb3V0X2kgICAgICh1dG1pX2RhdGFfb3V0X28gICAgICksCisgICAgICAgICAudXRtaV90eHZhbGlkX2kgICAgICAodXRtaV90eHZhbGlkX28gICAgICApLAorICAgICAgICAgLnV0bWlfb3BfbW9kZV9pICAgICAgKHV0bWlfb3BfbW9kZV9vICAgICAgKSwKKyAgICAgICAgIC51dG1pX3hjdnJzZWxlY3RfaSAgICh1dG1pX3hjdnJzZWxlY3RfbyAgICksCisgICAgICAgICAudXRtaV90ZXJtc2VsZWN0X2kgICAodXRtaV90ZXJtc2VsZWN0X28gICApLAorICAgICAgICAgLnV0bWlfZHBwdWxsZG93bl9pICAgKHV0bWlfZHBwdWxsZG93bl9vICAgKSwKKyAgICAgICAgIC51dG1pX2RtcHVsbGRvd25faSAgICh1dG1pX2RtcHVsbGRvd25fbyAgICksCisgICAgICAgICAudXNiX3J4X3Jjdl9pICAgICAgICAodXNiX3BhZHNfcnhfcmN2X3cgICApLAorICAgICAgICAgLnVzYl9yeF9kcF9pICAgICAgICAgKHVzYl9wYWRzX3J4X2RwX3cgICAgKSwKKyAgICAgICAgIC51c2JfcnhfZG5faSAgICAgICAgICh1c2JfcGFkc19yeF9kbl93ICAgICksCisgICAgICAgICAudXNiX3Jlc2V0X2Fzc2VydF9pICAoIDEnYjAgICAgICAgICAgICAgICApLAorCisgICAgLy8gT3V0cHV0cworICAgICAgICAgLnV0bWlfZGF0YV9pbl9vICAgICAodXRtaV9kYXRhX2luX2kgICAgICApLAorICAgICAgICAgLnV0bWlfdHhyZWFkeV9vICAgICAodXRtaV90eHJlYWR5X2kgICAgICApLAorICAgICAgICAgLnV0bWlfcnh2YWxpZF9vICAgICAodXRtaV9yeHZhbGlkX2kgICAgICApLAorICAgICAgICAgLnV0bWlfcnhhY3RpdmVfbyAgICAodXRtaV9yeGFjdGl2ZV9pICAgICApLAorICAgICAgICAgLnV0bWlfcnhlcnJvcl9vICAgICAodXRtaV9yeGVycm9yX2kgICAgICApLAorICAgICAgICAgLnV0bWlfbGluZXN0YXRlX28gICAodXRtaV9saW5lc3RhdGVfaSAgICApLAorICAgICAgICAgLnVzYl90eF9kcF9vICAgICAgICAodXNiX3BhZHNfdHhfZHBfdyAgICApLAorICAgICAgICAgLnVzYl90eF9kbl9vICAgICAgICAodXNiX3BhZHNfdHhfZG5fdyAgICApLAorICAgICAgICAgLnVzYl90eF9vZW5fbyAgICAgICAodXNiX3BhZHNfdHhfb2VuX3cgICApLAorICAgICAgICAgLnVzYl9yZXNldF9kZXRlY3RfbyAoICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgLnVzYl9lbl9vICAgICAgICAgICAoICAgICAgICAgICAgICAgICAgICApCisgICAgKTsKKworCisgdXNiX3RyYW5zY2VpdmVyIHVfdXNiX3hjdnIgKAorICAgIC8vIElucHV0cworICAgICAgICAgLnVzYl9waHlfdHhfZHBfaSAgICAodXNiX3BhZHNfdHhfZHBfdyAgICksCisgICAgICAgICAudXNiX3BoeV90eF9kbl9pICAgICh1c2JfcGFkc190eF9kbl93ICAgKSwKKyAgICAgICAgIC51c2JfcGh5X3R4X29lbl9pICAgKHVzYl9wYWRzX3R4X29lbl93ICApLAorICAgICAgICAgLm1vZGVfaSAgICAgICAgICAgICAodXNiX3hjdnJfbW9kZV93ICAgICksCisKKwkgLm91dF9kcCAgICAgICAgICAgICAob3V0X2RwICAgICAgICAgICAgICksCisgICAgICAgICAub3V0X2RuICAgICAgICAgICAgIChvdXRfZG4gICAgICAgICAgICAgKSwKKwkgLm91dF90eF9vZW4gICAgICAgICAob3V0X3R4X29lbiAgICAgICAgICksCisKKyAgICAgICAgIC5pbl9kcCAgICAgICAgICAgICAgKGluX2RwICAgICAgICAgICAgICApLAorICAgICAgICAgLmluX2RuICAgICAgICAgICAgICAoaW5fZG4gICAgICAgICAgICAgICksCisKKworICAgIC8vIE91dHB1dHMKKyAgICAgICAgIC51c2JfcGh5X3J4X3Jjdl9vICAodXNiX3BhZHNfcnhfcmN2X3cgICApLAorICAgICAgICAgLnVzYl9waHlfcnhfZHBfbyAgICh1c2JfcGFkc19yeF9kcF93ICAgICksCisgICAgICAgICAudXNiX3BoeV9yeF9kbl9vICAgKHVzYl9wYWRzX3J4X2RuX3cgICAgKQorKTsKKworCitlbmRtb2R1bGUKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3VzZXJfcHJvamVjdF93cmFwcGVyLnYgYi92ZXJpbG9nL3J0bC91c2VyX3Byb2plY3Rfd3JhcHBlci52Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzOWJmM2IKLS0tIC9kZXYvbnVsbAorKysgYi92ZXJpbG9nL3J0bC91c2VyX3Byb2plY3Rfd3JhcHBlci52CkBAIC0wLDAgKzEsMTYzMiBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxICwgRGluZXNoIEFubmF5eWEgICAgICAgICAgICAgICAgICAgICAgICAgIAorLy8gCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorLy8gU1BEWC1GaWxlQ29udHJpYnV0b3I6IENyZWF0ZWQgYnkgRGluZXNoIEFubmF5eWEgPGRpbmVzaGFAb3BlbmNvcmVzLm9yZz4KKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBEaWdpdGFsIGNvcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcmlzY2R1aW5vIGNvcmVzIHByb2plY3QgICAgICAgICAgICAvLy8vCisvLy8vICBodHRwczovL2dpdGh1Yi5jb20vZGluZXNoYW5uYXl5YS9yaXNjZHVpbm8uZ2l0ICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgVGhpcyBpcyBkaWdpdGFsIGNvcmUgYW5kIGludGVncmF0ZSBhbGwgdGhlIG1haW4gYmxvY2sgICAvLy8vCisvLy8vICAgICAgaGVyZS4gIEZvbGxvd2luZyBibG9jayBhcmUgaW50ZWdyYXRlZCBoZXJlICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgMS4gUmlzYyBWIENvcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgMi4gUXVhZCBTUEkgTWFzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgMy4gV2lzaGJvbmUgQ3Jvc3MgQmFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgNC4gVUFSVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgNSwgVVNCIDEuMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgNi4gU1BJIE1hc3RlciAoU2luZ2xlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgNy4gVENNIFNSQU0gMktCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgOC4gMktCIGljYWNoZSBhbmQgMktCIGRjYWNoZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgOC4gNiBDaGFubmVsIEFEQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgOS4gUGlubXV4IHdpdGggR1BJTyBhbmQgNiBQV00gICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBUbyBEbzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIG5vdGhpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBBdXRob3Iocyk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgLSBEaW5lc2ggQW5uYXl5YSwgZGluZXNoYUBvcGVuY29yZXMub3JnICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICBSZXZpc2lvbiA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIDAuMSAtIDE2dGggRmViIDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIEluaXRpYWwgaW50ZWdyYXRpb24gd2l0aCBSaXNjLVYgY29yZSArICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIFdpc2hib25lIENyb3NzIEJhciArIFNQSSAgTWFzdGVyICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIDAuMiAtIDE3dGggSnVuZSAyMDIxLCBEaW5lc2ggQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAxLiBJbiByaXNjIGNvcmUsIHdpc2hib25lIGFuZCBjb3JlIGRvbWFpbiBpcyAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICBjcmVhdGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAyLiBjcHUgYW5kIHJ0YyBjbG9jayBhcmUgZ2VuZXJhdGVkIGluIGdsYmwgcmVnIGJsb2NrICAvLy8vCisvLy8vICAgICAgICAzLiBpbiB3aXNoYm9uZSBpbnRlcmNvbm5lY3Q6LSBTdGFnZ2luZyBmbG9wIGFyZSBhZGRlZCAvLy8vCisvLy8vICAgICAgICAgICBhdCBpbnRlcmZhY2UgdG8gYnJlYWsgd2lzaGJvbmUgdGltaW5nIHBhdGggICAgICAgICAvLy8vCisvLy8vICAgICAgICA0LiBidXN3aWR0aCB3YXJuaW5nIGFyZSBmaXhlZCBpbnNpZGUgc3BpX21hc3RlciAgICAgICAvLy8vCisvLy8vICAgICAgICBtb2RpZmllZCBydGwgZmlsZXMgYXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICB2ZXJpbG9nL3J0bC9kaWdpdGFsX2NvcmUvc3JjL2RpZ2l0YWxfY29yZS5zdiAgICAgICAvLy8vCisvLy8vICAgICAgICAgICB2ZXJpbG9nL3J0bC9kaWdpdGFsX2NvcmUvc3JjL2dsYmxfY2ZnLnN2ICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICB2ZXJpbG9nL3J0bC9saWIvd2Jfc3RhZ2dpbmcuc3YgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICB2ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvdG9wL3NjcjFfZG1lbV93Yi5zdiAvLy8vCisvLy8vICAgICAgICAgICB2ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvdG9wL3NjcjFfaW1lbV93Yi5zdiAvLy8vCisvLy8vICAgICAgICAgICB2ZXJpbG9nL3J0bC9zeW50YWNvcmUvc2NyMS9zcmMvdG9wL3NjcjFfdG9wX3diLnN2ICAvLy8vCisvLy8vICAgICAgICAgICB2ZXJpbG9nL3J0bC91c2VyX3Byb2plY3Rfd3JhcHBlci52ICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICB2ZXJpbG9nL3J0bC93Yl9pbnRlcmNvbm5lY3Qvc3JjL3diX2ludGVyY29ubmVjdC5zdiAvLy8vCisvLy8vICAgICAgICAgICB2ZXJpbG9nL3J0bC9zcGlfbWFzdGVyL3NyYy9zcGltX2Nsa2dlbi5zdiAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICB2ZXJpbG9nL3J0bC9zcGlfbWFzdGVyL3NyYy9zcGltX2N0cmwuc3YgICAgICAgICAgICAvLy8vCisvLy8vICAgIDAuMyAtIDIwdGggSnVuZSAyMDIxLCBEaW5lc2ggQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAxLiB1YXJ0IGNvcmUgaXMgaW50ZWdyYXRlZCAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAyLiAzcmQgU2xhdmUgcG9ydGVkIGFkZGVkIHRvIHdpc2hib25lIGludGVyY29ubmVjdCAvLy8vCisvLy8vICAgIDAuNCAtIDI1dGggSnVuZSAyMDIxLCBEaW5lc2ggQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIE1vdmVkIHRoZSBwYWQgbG9naWMgaW5zaWRlIHNkcmFtLHNwaSx1YXJ0IGJsb2NrIHRvICAvLy8vCisvLy8vICAgICAgICAgIGF2b2lkIGxvZ2ljIGF0IGRpZ2l0YWwgY29yZSBsZXZlbCAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIDAuNSAtIDI1dGggSnVuZSAyMDIxLCBEaW5lc2ggQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIFNpbmNlIGNhcnZlbCBnaXZlcyBvbmx5IDE2TUIgYWRkcmVzcyBzcGFjZSBmb3IgdXNlciAvLy8vCisvLy8vICAgICAgICAgIHNwYWNlLCB3ZSBoYXZlIGltcGxlbWVudGVkIGluZGlyZWN0IGFkZHJlc3Mgc2VsZWN0ICAvLy8vCisvLy8vICAgICAgICAgIHdpdGggOCBiaXQgYmFuayBzZWxlY3QgZ2l2ZW4gaW5zaWRlIHdiX2hvc3QgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIGNvcmUgQWRkcmVzcyA9IHtCYW5rX1NlbFs3OjBdLCBXYl9BZGRyZXNzWzIzOjBdICAgICAvLy8vCisvLy8vICAgICAgICAgIGNhcmF2ZWwgdXNlciBhZGRyZXNzIHNwYWNlIGlzICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIDB4MzAwMF8wMDAwIHRvIDB4MzBGRl9GRkZGICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIDAuNiAtIDI3dGggSnVuZSAyMDIxLCBEaW5lc2ggQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIERpZ2l0YWwgY29yZSBsZXZlbCB0aWUgYXJlIG1vdmVkIGluc2lkZSBJUCB0byBhdm9pZCAvLy8vCisvLy8vICAgICAgICAgIHBvd2VyIGhvb2sgdXAgYXQgY29yZSBsZXZlbCAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIHVfcmlzY190b3AgLSB0ZXN0X21vZGUgJiB0ZXN0X3JzdF9uICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIHVfaW50ZXJjb24gLSBzKl93YmRfZXJyX2kgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIHVudXNlZCB3Yl9jdGlfaSBpcyByZW1vdmVkIGZyb20gdV9zZHJhbV9jdHJsICAgICAgICAvLy8vCisvLy8vICAgIDAuNyAtIDI4dGggSnVuZSAyMDIxLCBEaW5lc2ggQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIHdiX2ludGVyY29ubmVjdCBtYXN0ZXIgcG9ydCBhcmUgaW50ZXJjaGFuZ2VkIGZvciAgICAvLy8vCisvLy8vICAgICAgICAgIGJldHRlciBwaHlzaWNhbCBwbGFjZW1lbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIG0wIC0gRXh0ZXJuYWwgSE9TVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIG0xIC0gUklTQyBJTUVNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIG0yIC0gUklTQyBETUVNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIDAuOCAtIDZ0aCBKdWx5IDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIEZvciBCZXR0ZXIgU0RSQU0gSW50ZXJmYWNlIHRpbWluZyB3ZSBoYXZlIHRhcGluZyAgICAvLy8vCisvLy8vICAgICAgICAgIHNkcmFtX2Nsb2NrIGdvaW50IHRvIGlvX291dFsyOV0gZGlyZWN0bHkgZnJvbSAgICAgICAvLy8vCisvLy8vICAgICAgICAgIGdsb2JhbCByZWdpc3RlciBibG9jaywgdGhpcyBoZWxwIGluIGJldHRlciBTRFJBTSAgICAvLy8vCisvLy8vICAgICAgICAgIGludGVyZmFjZSB0aW1pbmcgY29udHJvbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIDAuOSAtIDd0aCBKdWx5IDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIFJlbW92ZWQgMiBVbnVzZWQgcG9ydCBjb25uZWN0aW9uIGlvX2luWzMxOjMwXSB0byAgICAvLy8vCisvLy8vICAgICAgICAgIHNwaV9tYXN0ZXIgdG8gYXZvaWQgbHZzIGlzc3VlICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIDEuMCAtIDI4dGggSnVseSAyMDIxLCBEaW5lc2ggQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIGkyY20gaW50ZWdyYXRlZCBwYXJ0IG9mIHVhcnRfaTJjbSBtb2R1bGUsICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIGR1ZSB0byBudW1iZXIgb2YgSU8gcGluIGxpbWl0YXRpb24sICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIE9ubHkgVUFSVCBPUiBJMkMgc2VsZWN0ZWQgYmFzZWQgb24gY29uZmlnIG1vZGUgICAgICAvLy8vCisvLy8vICAgIDEuMSAtIDFzdCBBdWcgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIHVzYjEuMSBob3N0IGludGVncmF0ZWQgcGFydCBvZiB1YXJ0X2kyY21fdXNiIG1vZHVsZSwvLy8vCisvLy8vICAgICAgICAgIGR1ZSB0byBudW1iZXIgb2YgSU8gcGluIGxpbWl0YXRpb24sICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIE9ubHkgVUFSVC9JMkMvVVNCIHNlbGVjdGVkIGJhc2VkIG9uIGNvbmZpZyBtb2RlICAgICAvLy8vCisvLy8vICAgIDEuMiAtIDI5dGggU2VwdCAyMDIxLCBEaW5lc2guQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIDEuIGNvcGllZCB0aGUgcmVwbyBmcm9tIHlpZml2ZSBhbmQgcmVuYW1lcyBhcyAgICAgICAvLy8vCisvLy8vICAgICAgICAgICAgIHJpc2NkdW5pbm8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIDIuIFJlbW92ZWQgdGhlIFNEUkFNIGNvbnRyb2xsZWQgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIDMuIEFkZGVkIFBpbk11eCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIDQuIEFkZGVkIFNBUiBBREMgZm9yIDYgY2hhbm5lbCAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIDEuMyAtIDMwdGggU2VwdCAyMDIxLCBEaW5lc2guQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIDJLQiBTUkFNIEludGVyZmFjZSBhZGRlZCB0byBSSVNDIENvcmUgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIDEuNCAtIDEzdGggT2N0IDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIEJhc2ljIHZlcmlmaWNhdGlvbiBhbmQgU3ludGhlc2lzIGNsZWFudXAgICAgICAgICAgICAvLy8vCisvLy8vICAgIDEuNSAtIDZ0aCBOb3YgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIENsb2NrIFNrZXcgYmxvY2sgbW92ZWQgaW5zaWRlIHJlc3BlY3RpdmUgYmxvY2sgZHVlICAvLy8vCisvLy8vICAgICAgICAgIHRvIHRvcC1sZXZlbCBwb3dlciBob29rLXVwIGNoYWxsZW5nZXMgZm9yIHNtYWxsIElQICAvLy8vCisvLy8vICAgIDEuNiAgIE5vdiAxNCwgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIE1ham9yIGJ1ZywgY2xvY2sgZGl2aWRlciBpbnNpZGUgdGhlIHdiX2hvc3QgcmVzZXQgICAvLy8vCisvLy8vICAgICAgICAgIGNvbm5lY3Rpdml0eSBvcGVuIGlzIGZpeGVkICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIDEuNyAgIE5vdiAxNSwgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICBCdWcgZml4IGluIGNsa19jdHJsIEhpZ2gvTG93IGNvdW50ZXIgd2lkdGggICAgICAgICAvLy8vCisvLy8vICAgICAgICAgICBSZW1vdmVkIHNyYW1fY2xvY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIDEuOCAgTm92IDIzLCAyMDIxLCBEaW5lc2ggQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgIFRocmVlIENoaXAgU3BlY2lmaWMgU2lnbmF0dXJlIGFkZGVkIGF0IFBpbk11eCBSZWcgICAvLy8vCisvLy8vICAgICAgICAgIHJlZ18yMixyZWdfMjMscmVnXzI0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIDEuOSAgRGVjIDExLCAyMDIxLCBEaW5lc2ggQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgMiB4IDJLIFNSQU0gYWRkZWQgaW50byBXaXNoYm9uZSBJbnRlcmZhY2UgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgVGVtcG9yYXJ5IEFEQyBibG9jayByZW1vdmVkICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgIDIuMCAgRGVjIDE0LCAyMDIxLCBEaW5lc2ggQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgICAgQWRkZWQgdHdvIG1vcmUgMksgU1JBTSBhZGRlZCBpbnRvIFdpc2hib25lIEludGVyZmFjZSAvLy8vCisvLy8vICAgIDIuMSAgRGVjIDE2LCAyMDIxLCBEaW5lc2ggQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgMS40IE1CSVNUIGNvbnRyb2xsZXIgY2hhbmdlZCB0byBzaW5nbGUgb25lICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgMi5BZGRlZCBvbmUgbW9yZSBTUkFNIHRvIFRDTSBtZW1vcnkgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgMy5XaXNoQm9uZSBJbnRlcmNvbm5lY3QgY2hhbmcgdG8gdGFrZSBjYXJlIG1iaXN0IGNoYW5nZXMvLy8vCisvLy8vICAgICAgNC5QaW5tdXggY2hhbmdlIHRvIHRha2UgY2FyZSBvZiBtYmlzdCBjaGFuZ2VzICAgICAgICAgICAvLy8vCisvLy8vICAgIDIuMiAgRGVjIDIwLCAyMDIxLCBEaW5lc2ggQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgMS4gTUJJU1QgZGVzaWduIGlzc3VlIGZpeCBmb3IgeW9zeXMgICAgICAgICAgICAgICAgICAgICAvLy8vCisvLy8vICAgICAgMi4gRnVsbCBjaGlwIFRpbWluZyBhbmQgVHJhbnNpdGlvbiBjbGVhbi11cCAgICAgICAgICAgICAvLy8vICAgICAgICAgICAgICAgICAgIAorLy8vLyAgICAyLjMgIERlYyAyNCwgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgIFVBUlQgTWFzdGVyIGFkZGVkIHdpdGggbWVzc2FnZSBoYW5kbGVyIGF0IHdiX2hvc3QgICAgICAgLy8vLworLy8vLyAgICAyLjQgIEphbiAwMSwgMjAyMiwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICBMQVswXSBpcyBhZGRlZCBhcyBzb2Z0IHJlc2V0IG9wdGlvbiBhdCB3Yl9wb3J0ICAgICAgICAgLy8vLworLy8vLyAgICAyLjUgIEphbiAwNiwgMjAyMiwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICBUQ00gUkFNIEJ1ZyBmaXggaW5zaWRlIHN5bnRhY29yZSAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAyLjYgIEphbiAwOCwgMjAyMiwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgUGlubXV4IEludGVycnVwdCBMb2dpYyBjaGFuZ2UgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAzLjAgIEphbiAxNCwgMjAyMiwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgTW92aW5nIGZyb20gcmlzY3YgY29yZSBmcm9tIHN5bnRhY29yZS9zY3IxIHRvICAgICAgICAgLy8vLworLy8vLyAgICAgICAgeWZpdmUveWNyMSBvbiBzYW5rcmFudGkgMjAyMiAoQSBIaW5kdSBOZXcgWWVhcikgICAgICAgLy8vLworLy8vLyAgICAzLjEgIEphbiAxNSwgMjAyMiwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgIE1ham9yIGNoYW5nZXMgaW4gcXNwaW0gbG9naWMgdG8gaGFuZGxlIHNwZWNpYWwgbW9kZSAgLy8vLworLy8vLyAgICAzLjIgIEZlYiAwMiwgMjAyMiwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgIEJ1ZyBmaXggYXJvdW5kIGljYWNoZS9kY2FjaGUgYW5kIHdpc2hib25lIGJ1cnN0ICAgICAgLy8vLworLy8vLyAgICAgICAgIGFjY2VzcyBjbGVhbi11cCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAzLjMgIEZlYiAwOCwgMjAyMiwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgIHN1cHBvcnQgYWRkZWQgc3Bpc3JhbSBzdXBwb3J0IGluIHFzcGltIGlwICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgIFRoZXJlIGFyZSA0IGNoaXAgc2VsZWN0IGF2YWlsYWJsZSBpbiBxc3BpbSAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgIENTIzAvQ1MjMSB0YXJnZXRlZCBmb3IgU1BJIEZMQVNIICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgIENTIzIvQ1MjMyB0YXJnZXRlZCBmb3IgU1BJIFNSQU0gICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAzLjQgIEZlYiAxNCwgMjAyMiwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgIGJ1cnN0IG1vZGUgc3VwcG9ydGVkIGFkZGVkIGluIGltZW0gYnVmZmVyIGluc2lkZSAgICAgLy8vLworLy8vLyAgICAgICAgIHJpc2N2IGNvcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICBXZSBoYXZlIGNyZWF0ZWQgc2VwZXJhdGUgcmVwbyBmcm9tIHRoaXMgb253YXJkcyAgICAgICAgICAgLy8vLworLy8vLyAgICAgIFNSQU0gYmFzZWQgU09DIGlzIHNwaW4tb3V0IHRvICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgIGRpbmVzaGFubmF5eWEvcmlzY2R1aW5vX3NyYW0uZ2l0ICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICBUaGlzIHJlcG8gd2lsbCByZW1vdmUgbWJpc3QgKyBTUkFNIGFuZCBSSVNDIFNSQU0gd2lsbCBiZSAgLy8vLworLy8vLyAgICByZXBsYWNlZCB3aXRoIERGUkFNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBDb3B5cmlnaHQgKEMpIDIwMDAgQXV0aG9ycyBhbmQgT1BFTkNPUkVTLk9SRyAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBmaWxlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCB3aXRob3V0ICAgICAgICAgLy8vLworLy8vLyByZXN0cmljdGlvbiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgICAgLy8vLworLy8vLyByZW1vdmVkIGZyb20gdGhlIGZpbGUgYW5kIHRoYXQgYW55IGRlcml2YXRpdmUgd29yayBjb250YWlucyAgLy8vLworLy8vLyB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGFzc29jaWF0ZWQgZGlzY2xhaW1lci4gLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0ICAgLy8vLworLy8vLyBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgLy8vLworLy8vLyBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgLy8vLworLy8vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55ICAgLy8vLworLy8vLyBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgICAgICAgLy8vLworLy8vLyB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkICAgLy8vLworLy8vLyB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSICAgICAgLy8vLworLy8vLyBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgLy8vLworLy8vLyBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAgLy8vLworLy8vLyBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgc291cmNlOyBpZiBub3QsIGRvd25sb2FkIGl0ICAgLy8vLworLy8vLyBmcm9tIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9sZ3BsLnNodG1sICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisKK21vZHVsZSB1c2VyX3Byb2plY3Rfd3JhcHBlciAoCitgaWZkZWYgVVNFX1BPV0VSX1BJTlMKKyAgICBpbm91dCB2ZGRhMSwJLy8gVXNlciBhcmVhIDEgMy4zViBzdXBwbHkKKyAgICBpbm91dCB2ZGRhMiwJLy8gVXNlciBhcmVhIDIgMy4zViBzdXBwbHkKKyAgICBpbm91dCB2c3NhMSwJLy8gVXNlciBhcmVhIDEgYW5hbG9nIGdyb3VuZAorICAgIGlub3V0IHZzc2EyLAkvLyBVc2VyIGFyZWEgMiBhbmFsb2cgZ3JvdW5kCisgICAgaW5vdXQgdmNjZDEsCS8vIFVzZXIgYXJlYSAxIDEuOFYgc3VwcGx5CisgICAgaW5vdXQgdmNjZDIsCS8vIFVzZXIgYXJlYSAyIDEuOHYgc3VwcGx5CisgICAgaW5vdXQgdnNzZDEsCS8vIFVzZXIgYXJlYSAxIGRpZ2l0YWwgZ3JvdW5kCisgICAgaW5vdXQgdnNzZDIsCS8vIFVzZXIgYXJlYSAyIGRpZ2l0YWwgZ3JvdW5kCitgZW5kaWYKKyAgICBpbnB1dCAgIHdpcmUgICAgICAgICAgICAgICAgICAgICAgIHdiX2Nsa19pICAgICAgICAsICAvLyBTeXN0ZW0gY2xvY2sKKyAgICBpbnB1dCAgIHdpcmUgICAgICAgICAgICAgICAgICAgICAgIHVzZXJfY2xvY2syICAgICAsICAvLyB1c2VyIENsb2NrCisgICAgaW5wdXQgICB3aXJlICAgICAgICAgICAgICAgICAgICAgICB3Yl9yc3RfaSAgICAgICAgLCAgLy8gUmVndWxhciBSZXNldCBzaWduYWwKKworICAgIGlucHV0ICAgd2lyZSAgICAgICAgICAgICAgICAgICAgICAgd2JzX2N5Y19pICAgICAgICwgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgaW5wdXQgICB3aXJlICAgICAgICAgICAgICAgICAgICAgICB3YnNfc3RiX2kgICAgICAgLCAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICBpbnB1dCAgIHdpcmUgW1dCX1dJRFRILTE6MF0gICAgICAgIHdic19hZHJfaSAgICAgICAsICAvLyBhZGRyZXNzCisgICAgaW5wdXQgICB3aXJlICAgICAgICAgICAgICAgICAgICAgICB3YnNfd2VfaSAgICAgICAgLCAgLy8gd3JpdGUKKyAgICBpbnB1dCAgIHdpcmUgW1dCX1dJRFRILTE6MF0gICAgICAgIHdic19kYXRfaSAgICAgICAsICAvLyBkYXRhIG91dHB1dAorICAgIGlucHV0ICAgd2lyZSBbMzowXSAgICAgICAgICAgICAgICAgd2JzX3NlbF9pICAgICAgICwgIC8vIGJ5dGUgZW5hYmxlCisgICAgb3V0cHV0ICB3aXJlIFtXQl9XSURUSC0xOjBdICAgICAgICB3YnNfZGF0X28gICAgICAgLCAgLy8gZGF0YSBpbnB1dAorICAgIG91dHB1dCAgd2lyZSAgICAgICAgICAgICAgICAgICAgICAgd2JzX2Fja19vICAgICAgICwgIC8vIGFja25vd2xlZ2VtZW50CisKKyAgICAvLyBBbmFsb2cgKGRpcmVjdCBjb25uZWN0aW9uIHRvIEdQSU8gcGFkLS0tdXNlIHdpdGggY2F1dGlvbikKKyAgICAvLyBOb3RlIHRoYXQgYW5hbG9nIEkvTyBpcyBub3QgYXZhaWxhYmxlIG9uIHRoZSA3IGxvd2VzdC1udW1iZXJlZAorICAgIC8vIEdQSU8gcGFkcywgYW5kIHNvIHRoZSBhbmFsb2dfaW8gaW5kZXhpbmcgaXMgb2Zmc2V0IGZyb20gdGhlCisgICAgLy8gR1BJTyBpbmRleGluZyBieSA3IChhbHNvIHVwcGVyIDIgR1BJT3MgZG8gbm90IGhhdmUgYW5hbG9nX2lvKS4KKyAgICBpbm91dCBbMjg6MF0gYW5hbG9nX2lvLAorIAorICAgIC8vIExvZ2ljIEFuYWx5emVyIFNpZ25hbHMKKyAgICBpbnB1dCAgd2lyZSBbMTI3OjBdICAgICAgICAgICAgICAgIGxhX2RhdGFfaW4gICAgICAsCisgICAgb3V0cHV0IHdpcmUgWzEyNzowXSAgICAgICAgICAgICAgICBsYV9kYXRhX291dCAgICAgLAorICAgIGlucHV0ICB3aXJlIFsxMjc6MF0gICAgICAgICAgICAgICAgbGFfb2VuYiAgICAgICAgICwKKyAKKworICAgIC8vIElPcworICAgIGlucHV0ICB3aXJlICBbMzc6MF0gICAgICAgICAgICAgICAgaW9faW4gICAgICAgICAgICwKKyAgICBvdXRwdXQgd2lyZSAgWzM3OjBdICAgICAgICAgICAgICAgIGlvX291dCAgICAgICAgICAsCisgICAgb3V0cHV0IHdpcmUgIFszNzowXSAgICAgICAgICAgICAgICBpb19vZWIgICAgICAgICAgLAorCisgICAgb3V0cHV0IHdpcmUgIFsyOjBdICAgICAgICAgICAgICAgICB1c2VyX2lycSAgICAgICAgICAgICAKKworKTsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIExvY2FsIFBhcmFtZXRlciBEZWNsYXJhdGlvbgorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworcGFyYW1ldGVyICAgICBCSVNUX05PX1NSQU0gID0gNDsgLy8gTk8gb2YgTUJJU1QgTUVNT1JZCitwYXJhbWV0ZXIgICAgIFNEUl9EVyAgICAgICAgPSA4OyAgLy8gU0RSIERhdGEgV2lkdGggCitwYXJhbWV0ZXIgICAgIFNEUl9CVyAgICAgICAgPSAxOyAgLy8gU0RSIEJ5dGUgV2lkdGgKK3BhcmFtZXRlciAgICAgV0JfV0lEVEggICAgICA9IDMyOyAvLyBXQiBBRERSRVNTL0RBUkEgV0lEVEgKK3BhcmFtZXRlciAgICAgQklTVDFfQUREUl9XRCA9IDExOyAvLyA1MTJ4MzIgU1JBTQorcGFyYW1ldGVyICAgICBCSVNUX0RBVEFfV0QgID0gMzI7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBXaXNoYm9uZSBSaXNjIFYgRGNhY2hlIE1lbW9yeSBJbnRlcmZhY2UKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX3Jpc2N2X2RjYWNoZV9zdGJfaSAgICAgICAgICAgICAgICAgOyAvLyBzdHJvYmUvcmVxdWVzdAord2lyZSAgIFtXQl9XSURUSC0xOjBdICAgICAgICAgIHdiZF9yaXNjdl9kY2FjaGVfYWRyX2kgICAgICAgICAgICAgICAgIDsgLy8gYWRkcmVzcword2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9yaXNjdl9kY2FjaGVfd2VfaSAgICAgICAgICAgICAgICAgIDsgLy8gd3JpdGUKK3dpcmUgICBbV0JfV0lEVEgtMTowXSAgICAgICAgICB3YmRfcmlzY3ZfZGNhY2hlX2RhdF9pICAgICAgICAgICAgICAgICA7IC8vIGRhdGEgb3V0cHV0Cit3aXJlICAgWzM6MF0gICAgICAgICAgICAgICAgICAgd2JkX3Jpc2N2X2RjYWNoZV9zZWxfaSAgICAgICAgICAgICAgICAgOyAvLyBieXRlIGVuYWJsZQord2lyZSAgIFs5OjBdICAgICAgICAgICAgICAgICAgIHdiZF9yaXNjdl9kY2FjaGVfYmxfaSAgICAgICAgICAgICAgICAgIDsgLy8gYnVyc3QgbGVuZ3RoCit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX3Jpc2N2X2RjYWNoZV9icnlfaSAgICAgICAgICAgICAgICAgOyAvLyBidXJzdCByZWFkeQord2lyZSAgIFtXQl9XSURUSC0xOjBdICAgICAgICAgIHdiZF9yaXNjdl9kY2FjaGVfZGF0X28gICAgICAgICAgICAgICAgIDsgLy8gZGF0YSBpbnB1dAord2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9yaXNjdl9kY2FjaGVfYWNrX28gICAgICAgICAgICAgICAgIDsgLy8gYWNrbm93bGVnZW1lbnQKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfcmlzY3ZfZGNhY2hlX2xhY2tfbyAgICAgICAgICAgICAgICA7IC8vIGxhc3QgYnVyc3QgYWNrbm93bGVnZW1lbnQKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfcmlzY3ZfZGNhY2hlX2Vycl9vICAgICAgICAgICAgICAgICA7IC8vIGVycm9yCisKKy8vIENBQ0hFIFNSQU0gTWVtb3J5IEkvRgord2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIGRjYWNoZV9tZW1fY2xrMCAgICAgICAgICAgICAgICAgICAgICAgIDsgLy8gQ0xLCit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgZGNhY2hlX21lbV9jc2IwICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBDUyMKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICBkY2FjaGVfbWVtX3dlYjAgICAgICAgICAgICAgICAgICAgICAgICA7IC8vIFdFIword2lyZSAgIFs4OjBdICAgICAgICAgICAgICAgICAgIGRjYWNoZV9tZW1fYWRkcjAgICAgICAgICAgICAgICAgICAgICAgIDsgLy8gQWRkcmVzcword2lyZSAgIFszOjBdICAgICAgICAgICAgICAgICAgIGRjYWNoZV9tZW1fd21hc2swICAgICAgICAgICAgICAgICAgICAgIDsgLy8gV01BU0sjCit3aXJlICAgWzMxOjBdICAgICAgICAgICAgICAgICAgZGNhY2hlX21lbV9kaW4wICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBXcml0ZSBEYXRhCit3aXJlICAgWzMxOjBdICAgICAgICAgICAgICAgICAgZGNhY2hlX21lbV9kb3V0MCAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBSZWFkIERhdGEKKyAgIAorLy8gU1JBTS0wIFBPUlQtMSwgSU1FTSBJL0YKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICBkY2FjaGVfbWVtX2NsazEgICAgICAgICAgICAgICAgICAgICAgICA7IC8vIENMSword2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIGRjYWNoZV9tZW1fY3NiMSAgICAgICAgICAgICAgICAgICAgICAgIDsgLy8gQ1MjCit3aXJlICBbODowXSAgICAgICAgICAgICAgICAgICAgZGNhY2hlX21lbV9hZGRyMSAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBBZGRyZXNzCit3aXJlICBbMzE6MF0gICAgICAgICAgICAgICAgICAgZGNhY2hlX21lbV9kb3V0MSAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBSZWFkIERhdGEKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBXaXNoYm9uZSBSaXNjIFYgSWNhY2hlIE1lbW9yeSBJbnRlcmZhY2UKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX3Jpc2N2X2ljYWNoZV9zdGJfaSAgICAgICAgICAgICAgICAgOyAvLyBzdHJvYmUvcmVxdWVzdAord2lyZSAgIFtXQl9XSURUSC0xOjBdICAgICAgICAgIHdiZF9yaXNjdl9pY2FjaGVfYWRyX2kgICAgICAgICAgICAgICAgIDsgLy8gYWRkcmVzcword2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9yaXNjdl9pY2FjaGVfd2VfaSAgICAgICAgICAgICAgICAgIDsgLy8gd3JpdGUKK3dpcmUgICBbMzowXSAgICAgICAgICAgICAgICAgICB3YmRfcmlzY3ZfaWNhY2hlX3NlbF9pICAgICAgICAgICAgICAgICA7IC8vIGJ5dGUgZW5hYmxlCit3aXJlICAgWzk6MF0gICAgICAgICAgICAgICAgICAgd2JkX3Jpc2N2X2ljYWNoZV9ibF9pICAgICAgICAgICAgICAgICAgOyAvLyBidXJzdCBsZW5ndGgKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfcmlzY3ZfaWNhY2hlX2JyeV9pICAgICAgICAgICAgICAgICA7IC8vIGJ1cnN0IHJlYWR5Cit3aXJlICAgW1dCX1dJRFRILTE6MF0gICAgICAgICAgd2JkX3Jpc2N2X2ljYWNoZV9kYXRfbyAgICAgICAgICAgICAgICAgOyAvLyBkYXRhIGlucHV0Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX3Jpc2N2X2ljYWNoZV9hY2tfbyAgICAgICAgICAgICAgICAgOyAvLyBhY2tub3dsZWdlbWVudAord2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9yaXNjdl9pY2FjaGVfbGFja19vICAgICAgICAgICAgICAgIDsgLy8gbGFzdCBidXJzdCBhY2tub3dsZWdlbWVudAord2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9yaXNjdl9pY2FjaGVfZXJyX28gICAgICAgICAgICAgICAgIDsgLy8gZXJyb3IKKworLy8gQ0FDSEUgU1JBTSBNZW1vcnkgSS9GCit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNhY2hlX21lbV9jbGswICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBDTEsKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICBpY2FjaGVfbWVtX2NzYjAgICAgICAgICAgICAgICAgICAgICAgICA7IC8vIENTIword2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIGljYWNoZV9tZW1fd2ViMCAgICAgICAgICAgICAgICAgICAgICAgIDsgLy8gV0UjCit3aXJlICAgWzg6MF0gICAgICAgICAgICAgICAgICAgaWNhY2hlX21lbV9hZGRyMCAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBBZGRyZXNzCit3aXJlICAgWzM6MF0gICAgICAgICAgICAgICAgICAgaWNhY2hlX21lbV93bWFzazAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBXTUFTSyMKK3dpcmUgICBbMzE6MF0gICAgICAgICAgICAgICAgICBpY2FjaGVfbWVtX2RpbjAgICAgICAgICAgICAgICAgICAgICAgICA7IC8vIFdyaXRlIERhdGEKKy8vIHdpcmUgICBbMzE6MF0gICAgICAgICAgICAgICBpY2FjaGVfbWVtX2RvdXQwICAgICAgICAgICAgICAgICAgICAgICA7IC8vIFJlYWQgRGF0YQorICAgCisvLyBTUkFNLTAgUE9SVC0xLCBJTUVNIEkvRgord2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIGljYWNoZV9tZW1fY2xrMSAgICAgICAgICAgICAgICAgICAgICAgIDsgLy8gQ0xLCit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNhY2hlX21lbV9jc2IxICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBDUyMKK3dpcmUgIFs4OjBdICAgICAgICAgICAgICAgICAgICBpY2FjaGVfbWVtX2FkZHIxICAgICAgICAgICAgICAgICAgICAgICA7IC8vIEFkZHJlc3MKK3dpcmUgIFszMTowXSAgICAgICAgICAgICAgICAgICBpY2FjaGVfbWVtX2RvdXQxICAgICAgICAgICAgICAgICAgICAgICA7IC8vIFJlYWQgRGF0YQorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUklTQyBWIFdpc2hib25lIERhdGEgTWVtb3J5IEludGVyZmFjZQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfcmlzY3ZfZG1lbV9zdGJfaSAgICAgICAgICAgICAgICAgICA7IC8vIHN0cm9iZS9yZXF1ZXN0Cit3aXJlICAgW1dCX1dJRFRILTE6MF0gICAgICAgICAgd2JkX3Jpc2N2X2RtZW1fYWRyX2kgICAgICAgICAgICAgICAgICAgOyAvLyBhZGRyZXNzCit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX3Jpc2N2X2RtZW1fd2VfaSAgICAgICAgICAgICAgICAgICAgOyAvLyB3cml0ZQord2lyZSAgIFtXQl9XSURUSC0xOjBdICAgICAgICAgIHdiZF9yaXNjdl9kbWVtX2RhdF9pICAgICAgICAgICAgICAgICAgIDsgLy8gZGF0YSBvdXRwdXQKK3dpcmUgICBbMzowXSAgICAgICAgICAgICAgICAgICB3YmRfcmlzY3ZfZG1lbV9zZWxfaSAgICAgICAgICAgICAgICAgICA7IC8vIGJ5dGUgZW5hYmxlCit3aXJlICAgW1dCX1dJRFRILTE6MF0gICAgICAgICAgd2JkX3Jpc2N2X2RtZW1fZGF0X28gICAgICAgICAgICAgICAgICAgOyAvLyBkYXRhIGlucHV0Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX3Jpc2N2X2RtZW1fYWNrX28gICAgICAgICAgICAgICAgICAgOyAvLyBhY2tub3dsZWdlbWVudAord2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9yaXNjdl9kbWVtX2Vycl9vICAgICAgICAgICAgICAgICAgIDsgLy8gZXJyb3IKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFdCIEhPU1QgSW50ZXJmYWNlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9pbnRfY3ljX2kgICAgICAgICAgICAgICAgICAgICAgICAgIDsgLy8gc3Ryb2JlL3JlcXVlc3QKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfaW50X3N0Yl9pICAgICAgICAgICAgICAgICAgICAgICAgICA7IC8vIHN0cm9iZS9yZXF1ZXN0Cit3aXJlICAgW1dCX1dJRFRILTE6MF0gICAgICAgICAgd2JkX2ludF9hZHJfaSAgICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBhZGRyZXNzCit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX2ludF93ZV9pICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyB3cml0ZQord2lyZSAgIFtXQl9XSURUSC0xOjBdICAgICAgICAgIHdiZF9pbnRfZGF0X2kgICAgICAgICAgICAgICAgICAgICAgICAgIDsgLy8gZGF0YSBvdXRwdXQKK3dpcmUgICBbMzowXSAgICAgICAgICAgICAgICAgICB3YmRfaW50X3NlbF9pICAgICAgICAgICAgICAgICAgICAgICAgICA7IC8vIGJ5dGUgZW5hYmxlCit3aXJlICAgW1dCX1dJRFRILTE6MF0gICAgICAgICAgd2JkX2ludF9kYXRfbyAgICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBkYXRhIGlucHV0Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX2ludF9hY2tfbyAgICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBhY2tub3dsZWdlbWVudAord2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9pbnRfZXJyX28gICAgICAgICAgICAgICAgICAgICAgICAgIDsgLy8gZXJyb3IKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgICBTUEkgTWFzdGVyIFdpc2hib25lIEludGVyZmFjZQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfc3BpbV9zdGJfbyAgICAgICAgICAgICAgICAgICAgICAgICA7IC8vIHN0cm9iZS9yZXF1ZXN0Cit3aXJlICAgW1dCX1dJRFRILTE6MF0gICAgICAgICAgd2JkX3NwaW1fYWRyX28gICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBhZGRyZXNzCit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX3NwaW1fd2VfbyAgICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyB3cml0ZQord2lyZSAgIFtXQl9XSURUSC0xOjBdICAgICAgICAgIHdiZF9zcGltX2RhdF9vICAgICAgICAgICAgICAgICAgICAgICAgIDsgLy8gZGF0YSBvdXRwdXQKK3dpcmUgICBbMzowXSAgICAgICAgICAgICAgICAgICB3YmRfc3BpbV9zZWxfbyAgICAgICAgICAgICAgICAgICAgICAgICA7IC8vIGJ5dGUgZW5hYmxlCit3aXJlICAgWzk6MF0gICAgICAgICAgICAgICAgICAgd2JkX3NwaW1fYmxfbyAgICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBCdXJzdCBjb3VudAord2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9zcGltX2JyeV9vICAgICAgICAgICAgICAgICAgICAgICAgIDsgLy8gQnVzcnQgUmVhZHkKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfc3BpbV9jeWNfbyAgICAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlICAgW1dCX1dJRFRILTE6MF0gICAgICAgICAgd2JkX3NwaW1fZGF0X2kgICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBkYXRhIGlucHV0Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX3NwaW1fYWNrX2kgICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBhY2tub3dsZWdlbWVudAord2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9zcGltX2xhY2tfaSAgICAgICAgICAgICAgICAgICAgICAgIDsgLy8gTGFzdCBhY2tub3dsZWdlbWVudAord2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9zcGltX2Vycl9pICAgICAgICAgICAgICAgICAgICAgICAgIDsgLy8gZXJyb3IKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICAgIFNQSSBNYXN0ZXIgV2lzaGJvbmUgSW50ZXJmYWNlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9hZGNfc3RiX28gICAgICAgICAgICAgICAgICAgICAgICAgIDsKK3dpcmUgWzc6MF0gICAgICAgICAgICAgICAgICAgICB3YmRfYWRjX2Fkcl9vICAgICAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX2FkY193ZV9vICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyAxIC0gV3JpdGUsIDAgLSBSZWFkCit3aXJlIFtXQl9XSURUSC0xOjBdICAgICAgICAgICAgd2JkX2FkY19kYXRfbyAgICAgICAgICAgICAgICAgICAgICAgICAgOword2lyZSBbV0JfV0lEVEgvOC0xOjBdICAgICAgICAgIHdiZF9hZGNfc2VsX28gICAgICAgICAgICAgICAgICAgICAgICAgIDsgLy8gQnl0ZSBlbmFibGUKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfYWRjX2N5Y19vICAgICAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlICBbMjowXSAgICAgICAgICAgICAgICAgICAgd2JkX2FkY19jdGlfbyAgICAgICAgICAgICAgICAgICAgICAgICAgOword2lyZSAgW1dCX1dJRFRILTE6MF0gICAgICAgICAgIHdiZF9hZGNfZGF0X2kgICAgICAgICAgICAgICAgICAgICAgICAgIDsKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfYWRjX2Fja19pICAgICAgICAgICAgICAgICAgICAgICAgICA7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyAgICBHbG9iYWwgUmVnaXN0ZXIgV2lzaGJvbmUgSW50ZXJmYWNlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9nbGJsX3N0Yl9vICAgICAgICAgICAgICAgICAgICAgICAgIDsgLy8gc3Ryb2JlL3JlcXVlc3QKK3dpcmUgICBbNzowXSAgICAgICAgICAgICAgICAgICB3YmRfZ2xibF9hZHJfbyAgICAgICAgICAgICAgICAgICAgICAgICA7IC8vIGFkZHJlc3MKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfZ2xibF93ZV9vICAgICAgICAgICAgICAgICAgICAgICAgICA7IC8vIHdyaXRlCit3aXJlICAgW1dCX1dJRFRILTE6MF0gICAgICAgICAgd2JkX2dsYmxfZGF0X28gICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBkYXRhIG91dHB1dAord2lyZSAgIFszOjBdICAgICAgICAgICAgICAgICAgIHdiZF9nbGJsX3NlbF9vICAgICAgICAgICAgICAgICAgICAgICAgIDsgLy8gYnl0ZSBlbmFibGUKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfZ2xibF9jeWNfbyAgICAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlICAgW1dCX1dJRFRILTE6MF0gICAgICAgICAgd2JkX2dsYmxfZGF0X2kgICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBkYXRhIGlucHV0Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX2dsYmxfYWNrX2kgICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBhY2tub3dsZWdlbWVudAord2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9nbGJsX2Vycl9pICAgICAgICAgICAgICAgICAgICAgICAgIDsgLy8gZXJyb3IKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICAgIEdsb2JhbCBSZWdpc3RlciBXaXNoYm9uZSBJbnRlcmZhY2UKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX3VhcnRfc3RiX28gICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBzdHJvYmUvcmVxdWVzdAord2lyZSAgIFs3OjBdICAgICAgICAgICAgICAgICAgIHdiZF91YXJ0X2Fkcl9vICAgICAgICAgICAgICAgICAgICAgICAgIDsgLy8gYWRkcmVzcword2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF91YXJ0X3dlX28gICAgICAgICAgICAgICAgICAgICAgICAgIDsgLy8gd3JpdGUKK3dpcmUgICBbMzE6MF0gICAgICAgICAgICAgICAgICB3YmRfdWFydF9kYXRfbyAgICAgICAgICAgICAgICAgICAgICAgICA7IC8vIGRhdGEgb3V0cHV0Cit3aXJlICAgWzM6MF0gICAgICAgICAgICAgICAgICAgd2JkX3VhcnRfc2VsX28gICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBieXRlIGVuYWJsZQord2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF91YXJ0X2N5Y19vICAgICAgICAgICAgICAgICAgICAgICAgIDsKK3dpcmUgICBbMzE6MF0gICAgICAgICAgICAgICAgICB3YmRfdWFydF9kYXRfaSAgICAgICAgICAgICAgICAgICAgICAgICA7IC8vIGRhdGEgaW5wdXQKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfdWFydF9hY2tfaSAgICAgICAgICAgICAgICAgICAgICAgICA7IC8vIGFja25vd2xlZ2VtZW50Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX3VhcnRfZXJyX2kgICAgICAgICAgICAgICAgICAgICAgICAgOyAgLy8gZXJyb3IKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vICBNQklTVDEgIAorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfbWJpc3Rfc3RiX28gICAgICAgICAgICAgICAgICAgICAgICA7IC8vIHN0cm9iZS9yZXF1ZXN0Cit3aXJlICAgWzEyOjBdICAgICAgICAgICAgICAgICAgd2JkX21iaXN0X2Fkcl9vICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBhZGRyZXNzCit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX21iaXN0X3dlX28gICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyB3cml0ZQord2lyZSAgIFtXQl9XSURUSC0xOjBdICAgICAgICAgIHdiZF9tYmlzdF9kYXRfbyAgICAgICAgICAgICAgICAgICAgICAgIDsgLy8gZGF0YSBvdXRwdXQKK3dpcmUgICBbMzowXSAgICAgICAgICAgICAgICAgICB3YmRfbWJpc3Rfc2VsX28gICAgICAgICAgICAgICAgICAgICAgICA7IC8vIGJ5dGUgZW5hYmxlCit3aXJlICAgWzk6MF0gICAgICAgICAgICAgICAgICAgd2JkX21iaXN0X2JsX28gICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBieXRlIGVuYWJsZQord2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9tYmlzdF9icnlfbyAgICAgICAgICAgICAgICAgICAgICAgIDsgLy8gYnl0ZSBlbmFibGUKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfbWJpc3RfY3ljX28gICAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlICAgW1dCX1dJRFRILTE6MF0gICAgICAgICAgd2JkX21iaXN0X2RhdF9pICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBkYXRhIGlucHV0Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX21iaXN0X2Fja19pICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBhY2tub3dsZWdlbWVudAord2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9tYmlzdF9sYWNrX2kgICAgICAgICAgICAgICAgICAgICAgIDsgLy8gYWNrbm93bGVnZW1lbnQKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfbWJpc3RfZXJyX2kgICAgICAgICAgICAgICAgICAgICAgICA7IC8vIGVycm9yCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gIENQVSBDb25maWd1cmF0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICBjcHVfcnN0X24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgcXNwaW1fcnN0X24gICAgICAgICAgICAgICAgICAgICAgICAgICAgOword2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzcGltX3JzdF9uICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB1YXJ0X3JzdF9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IC8vIHVhcnQgcmVzZXQKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICBpMmNfcnN0X24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IC8vIGkyYyByZXNldAord2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzYl9yc3RfbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgLy8gaTJjIHJlc2V0Cit3aXJlICAgWzM6MF0gICAgICAgICAgICAgICAgICAgYm9vdF9yZW1hcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBCb290IFJlbWFwCit3aXJlICAgWzM6MF0gICAgICAgICAgICAgICAgICAgZGNhY2hlX3JlbWFwICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBSZW1hcCB0aGUgZGNhY2hlIGFkZHJlc3MKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICBjcHVfY2xrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgcnRjX2NsayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOword2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzYl9jbGsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfY2xrX2ludCAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CisKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfY2xrX3Bpbm11eCAgICAgICAgICAgICAgICAgICAgICAgICA7CisvL3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfY2xrX2ludDEgICAgICAgICAgICAgICAgICAgICAgICAgOworLy93aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX2Nsa19pbnQyICAgICAgICAgICAgICAgICAgICAgICAgIDsKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfaW50X3JzdF9uICAgICAgICAgICAgICAgICAgICAgICAgICA7CisvL3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfaW50MV9yc3RfbiAgICAgICAgICAgICAgICAgICAgICAgOworLy93aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX2ludDJfcnN0X24gICAgICAgICAgICAgICAgICAgICAgIDsKKword2lyZSBbMzE6MF0gICAgICAgICAgICAgICAgICAgIGZ1c2VfbWhhcnRpZCAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKK3dpcmUgWzE1OjBdICAgICAgICAgICAgICAgICAgICBpcnFfbGluZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgc29mdF9pcnEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOworCisKK3dpcmUgWzc6MF0gICAgICAgICAgICAgICAgICAgICBjZmdfZ2xiX2N0cmwgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlIFszMTowXSAgICAgICAgICAgICAgICAgICAgY2ZnX2Nsa19jdHJsMSAgICAgICAgICAgICAgICAgICAgICAgICAgOword2lyZSBbMzE6MF0gICAgICAgICAgICAgICAgICAgIGNmZ19jbGtfY3RybDIgICAgICAgICAgICAgICAgICAgICAgICAgIDsKK3dpcmUgWzM6MF0gICAgICAgICAgICAgICAgICAgICBjZmdfY3NrYV93aSAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IC8vIGNsb2NrIHNrZXcgYWRqdXN0IGZvciB3aXNoYm9uZSBpbnRlcmNvbm5lY3QKK3dpcmUgWzM6MF0gICAgICAgICAgICAgICAgICAgICBjZmdfY3NrYV93aCAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IC8vIGNsb2NrIHNrZXcgYWRqdXN0IGZvciB3ZWIgaG9zdAorCit3aXJlIFszOjBdICAgICAgICAgICAgICAgICAgICAgY2ZnX2Nza2FfcmlzY3YgICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBjbG9jayBza2V3IGFkanVzdCBmb3IgcmlzY3YKK3dpcmUgWzM6MF0gICAgICAgICAgICAgICAgICAgICBjZmdfY3NrYV91YXJ0ICAgICAgICAgICAgICAgICAgICAgICAgICA7IC8vIGNsb2NrIHNrZXcgYWRqdXN0IGZvciB1YXJ0Cit3aXJlIFszOjBdICAgICAgICAgICAgICAgICAgICAgY2ZnX2Nza2FfcXNwaSAgICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBjbG9jayBza2V3IGFkanVzdCBmb3Igc3BpCit3aXJlIFszOjBdICAgICAgICAgICAgICAgICAgICAgY2ZnX2Nza2FfcGlubXV4ICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBjbG9jayBza2V3IGFkanVzdCBmb3IgcGlubXV4Cit3aXJlIFszOjBdICAgICAgICAgICAgICAgICAgICAgY2ZnX2Nza2FfcXNwaV9jbyAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBjbG9jayBza2V3IGFkanVzdCBmb3IgZ2xvYmFsIHJlZword2lyZSBbMzowXSAgICAgICAgICAgICAgICAgICAgIGNmZ19jc2thX21iaXN0MSAgICAgICAgICAgICAgICAgICAgICAgIDsKK3dpcmUgWzM6MF0gICAgICAgICAgICAgICAgICAgICBjZmdfY3NrYV9tYmlzdDIgICAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlIFszOjBdICAgICAgICAgICAgICAgICAgICAgY2ZnX2Nza2FfbWJpc3QzICAgICAgICAgICAgICAgICAgICAgICAgOword2lyZSBbMzowXSAgICAgICAgICAgICAgICAgICAgIGNmZ19jc2thX21iaXN0NCAgICAgICAgICAgICAgICAgICAgICAgIDsKKworLy8gQnVzIFJlcGVhdGVyIFNpZ25hbHMgIG91dHB1dCBmcm9tIFdpc2hib25lIEludGVyZmFjZQord2lyZSBbMzowXSAgICAgICAgICAgICAgICAgICAgIGNmZ19jc2thX3Jpc2N2X3JwICAgICAgICAgICAgICAgICAgICAgIDsgLy8gY2xvY2sgc2tldyBhZGp1c3QgZm9yIHJpc2N2Cit3aXJlIFszOjBdICAgICAgICAgICAgICAgICAgICAgY2ZnX2Nza2FfdWFydF9ycCAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBjbG9jayBza2V3IGFkanVzdCBmb3IgdWFydAord2lyZSBbMzowXSAgICAgICAgICAgICAgICAgICAgIGNmZ19jc2thX3FzcGlfcnAgICAgICAgICAgICAgICAgICAgICAgIDsgLy8gY2xvY2sgc2tldyBhZGp1c3QgZm9yIHNwaQord2lyZSBbMzowXSAgICAgICAgICAgICAgICAgICAgIGNmZ19jc2thX3Bpbm11eF9ycCAgICAgICAgICAgICAgICAgICAgIDsgLy8gY2xvY2sgc2tldyBhZGp1c3QgZm9yIHBpbm11eAord2lyZSBbMzowXSAgICAgICAgICAgICAgICAgICAgIGNmZ19jc2thX3FzcGlfY29fcnAgICAgICAgICAgICAgICAgICAgIDsgLy8gY2xvY2sgc2tldyBhZGp1c3QgZm9yIGdsb2JhbCByZWcKK3dpcmUgWzM6MF0gICAgICAgICAgICAgICAgICAgICBjZmdfY3NrYV9tYmlzdDFfcnAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlIFszOjBdICAgICAgICAgICAgICAgICAgICAgY2ZnX2Nza2FfbWJpc3QyX3JwICAgICAgICAgICAgICAgICAgICAgOword2lyZSBbMzowXSAgICAgICAgICAgICAgICAgICAgIGNmZ19jc2thX21iaXN0M19ycCAgICAgICAgICAgICAgICAgICAgIDsKK3dpcmUgWzM6MF0gICAgICAgICAgICAgICAgICAgICBjZmdfY3NrYV9tYmlzdDRfcnAgICAgICAgICAgICAgICAgICAgICA7CisKK3dpcmUgWzMxOjBdICAgICAgICAgICAgICAgICAgICBmdXNlX21oYXJ0aWRfcnAgICAgICAgICAgICAgICAgICAgICAgICA7IC8vIFJlcGVhdGVyCit3aXJlIFsxNTowXSAgICAgICAgICAgICAgICAgICAgaXJxX2xpbmVzX3JwICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBSZXBlYXRlcgord2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvZnRfaXJxX3JwICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgLy8gUmVwZWF0ZXIKKword2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9jbGtfcmlzY19ycCAgICAgICAgICAgICAgICAgICAgICAgIDsKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfY2xrX3FzcGlfcnAgICAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX2Nsa191YXJ0X3JwICAgICAgICAgICAgICAgICAgICAgICAgOword2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9jbGtfcGlubXV4X3JwICAgICAgICAgICAgICAgICAgICAgIDsKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfY2xrX21iaXN0MV9ycCAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX2Nsa19tYmlzdDJfcnAgICAgICAgICAgICAgICAgICAgICAgOword2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9jbGtfbWJpc3QzX3JwICAgICAgICAgICAgICAgICAgICAgIDsKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfY2xrX21iaXN0NF9ycCAgICAgICAgICAgICAgICAgICAgICA7CisKKy8vIFByb2dhbW1hYmxlIENsb2NrIFNrZXcgaW5zZXJ0ZWQgc2lnbmFscword2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9jbGtfd2lfc2tldyAgICAgICAgICAgICAgICAgICAgICAgIDsgLy8gY2xvY2sgZm9yIHdpc2hib25lIGludGVyY29ubmVjdCB3aXRoIGNsb2NrIHNrZXcKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfY2xrX3Jpc2N2X3NrZXcgICAgICAgICAgICAgICAgICAgICA7IC8vIGNsb2NrIGZvciByaXNjdiB3aXRoIGNsb2NrIHNrZXcKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfY2xrX3VhcnRfc2tldyAgICAgICAgICAgICAgICAgICAgICA7IC8vIGNsb2NrIGZvciB1YXJ0IHdpdGggY2xvY2sgc2tldword2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9jbGtfc3BpX3NrZXcgICAgICAgICAgICAgICAgICAgICAgIDsgLy8gY2xvY2sgZm9yIHNwaSB3aXRoIGNsb2NrIHNrZXcKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfY2xrX2dsYmxfc2tldyAgICAgICAgICAgICAgICAgICAgICA7IC8vIGNsb2NrIGZvciBnbG9iYWwgcmVnIHdpdGggY2xvY2sgc2tldword2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9jbGtfd2hfc2tldyAgICAgICAgICAgICAgICAgICAgICAgIDsgLy8gY2xvY2sgZm9yIGdsb2JhbCByZWcKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfY2xrX21iaXN0X3NrZXcgICAgICAgICAgICAgICAgICAgICA7IC8vIGNsb2NrIGZvciBnbG9iYWwgcmVnCit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX2Nsa19tYmlzdDJfc2tldyAgICAgICAgICAgICAgICAgICAgOyAvLyBjbG9jayBmb3IgZ2xvYmFsIHJlZword2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9jbGtfbWJpc3QzX3NrZXcgICAgICAgICAgICAgICAgICAgIDsgLy8gY2xvY2sgZm9yIGdsb2JhbCByZWcKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfY2xrX21iaXN0NF9za2V3ICAgICAgICAgICAgICAgICAgICA7IC8vIGNsb2NrIGZvciBnbG9iYWwgcmVnCisKKworCit3aXJlIFszMTowXSAgICAgICAgICAgICAgICAgICAgc3BpX2RlYnVnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOword2lyZSBbMzE6MF0gICAgICAgICAgICAgICAgICAgIHBpbm11eF9kZWJ1ZyAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKK3dpcmUgWzYzOjBdICAgICAgICAgICAgICAgICAgICByaXNjdl9kZWJ1ZyAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CisKKy8vIFNGTEFTSCBJL0YKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICBzZmxhc2hfc2NrICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlIFszOjBdICAgICAgICAgICAgICAgICAgICAgc2ZsYXNoX3NzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOword2lyZSBbMzowXSAgICAgICAgICAgICAgICAgICAgIHNmbGFzaF9vZW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKK3dpcmUgWzM6MF0gICAgICAgICAgICAgICAgICAgICBzZmxhc2hfZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlIFszOjBdICAgICAgICAgICAgICAgICAgICAgc2ZsYXNoX2RpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOworCisvLyBTU1JBTSBJL0YKKy8vd2lyZSAgICAgICAgICAgICAgICAgICAgICAgICBzc3JhbV9zY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CisvL3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgc3NyYW1fc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOworLy93aXJlICAgICAgICAgICAgICAgICAgICAgICAgIHNzcmFtX29lbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKKy8vd2lyZSBbMzowXSAgICAgICAgICAgICAgICAgICBzc3JhbV9kbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CisvL3dpcmUgWzM6MF0gICAgICAgICAgICAgICAgICAgc3NyYW1fZGkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOworCisvLyBVU0IgSS9GCit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNiX2RwX28gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOword2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzYl9kbl9vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2Jfb2VuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNiX2RwX2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOword2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzYl9kbl9pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKKworLy8gVUFSVCBJL0YKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB1YXJ0X3R4ZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgdWFydF9yeGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOworCisvLyBJMkNNIEkvRgord2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIGkyY21fY2xrX28gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICBpMmNtX2Nsa19pICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgaTJjbV9jbGtfb2VuICAgICAgICAgICAgICAgICAgICAgICAgICAgOword2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIGkyY21fZGF0YV9vZW4gICAgICAgICAgICAgICAgICAgICAgICAgIDsKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICBpMmNtX2RhdGFfbyAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgaTJjbV9kYXRhX2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgOworCisvLyBTUEkgTUFTVEVSCit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BpbV9zY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOword2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwaW1fc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGltX21pc28gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BpbV9tb3NpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOworCit3aXJlIFs3OjBdICAgICAgICAgICAgICAgICAgICAgc2FyMmRhYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOword2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuYWxvZ19kYWNfb3V0ICAgICAgICAgICAgICAgICAgICAgICAgIDsKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWxzZTFtX21jbGsgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgaF9yZXNldF9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOworCitgaWZuZGVmIFNDUjFfVENNX01FTQorLy8gU1JBTS0wIFBPUlQtMCAtIERNRU0gSS9GCit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JhbTBfY2xrMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBDTEsKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmFtMF9jc2IwICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IC8vIENTIword2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYW0wX3dlYjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgLy8gV0UjCit3aXJlICAgWzg6MF0gICAgICAgICAgICAgICAgICAgc3JhbTBfYWRkcjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBBZGRyZXNzCit3aXJlICAgWzM6MF0gICAgICAgICAgICAgICAgICAgc3JhbTBfd21hc2swICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBXTUFTSyMKK3dpcmUgICBbMzE6MF0gICAgICAgICAgICAgICAgICBzcmFtMF9kaW4wICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IC8vIFdyaXRlIERhdGEKK3dpcmUgICBbMzE6MF0gICAgICAgICAgICAgICAgICBzcmFtMF9kb3V0MCAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IC8vIFJlYWQgRGF0YQorCisvLyBTUkFNLTAgUE9SVC0xLCBJTUVNIEkvRgord2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYW0wX2NsazEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgLy8gQ0xLCit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JhbTBfY3NiMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBDUyMKK3dpcmUgIFs4OjBdICAgICAgICAgICAgICAgICAgICBzcmFtMF9hZGRyMSAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IC8vIEFkZHJlc3MKK3dpcmUgIFszMTowXSAgICAgICAgICAgICAgICAgICBzcmFtMF9kb3V0MSAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IC8vIFJlYWQgRGF0YQorCisvLyBTUkFNLTEgUE9SVC0wIC0gRE1FTSBJL0YKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmFtMV9jbGswICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IC8vIENMSword2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYW0xX2NzYjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgLy8gQ1MjCit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JhbTFfd2ViMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBXRSMKK3dpcmUgICBbODowXSAgICAgICAgICAgICAgICAgICBzcmFtMV9hZGRyMCAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IC8vIEFkZHJlc3MKK3dpcmUgICBbMzowXSAgICAgICAgICAgICAgICAgICBzcmFtMV93bWFzazAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IC8vIFdNQVNLIword2lyZSAgIFszMTowXSAgICAgICAgICAgICAgICAgIHNyYW0xX2RpbjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgLy8gV3JpdGUgRGF0YQord2lyZSAgIFszMTowXSAgICAgICAgICAgICAgICAgIHNyYW0xX2RvdXQwICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgLy8gUmVhZCBEYXRhCisKKy8vIFNSQU0tMSBQT1JULTEsIElNRU0gSS9GCit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JhbTFfY2xrMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBDTEsKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmFtMV9jc2IxICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IC8vIENTIword2lyZSAgWzg6MF0gICAgICAgICAgICAgICAgICAgIHNyYW0xX2FkZHIxICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgLy8gQWRkcmVzcword2lyZSAgWzMxOjBdICAgICAgICAgICAgICAgICAgIHNyYW0xX2RvdXQxICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgLy8gUmVhZCBEYXRhCisKK2BlbmRpZgorCisvLyBTUElNIEkvRgord2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzcGltX3NjayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgLy8gY2xvY2sgb3V0Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NwaW1fc28gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBzZXJpYWwgZGF0YSBvdXQKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICBzc3BpbV9zaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IC8vIHNlcmlhbCBkYXRhIGluCit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NwaW1fc3NuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyAvLyBjc19uCisKKword2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzYl9pbnRyX28gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICBpMmNtX2ludHJfbyAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gIFVBUlQgTWFzdGVyIEkvRgorLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICB1YXJ0bV9yeGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgdWFydG1fdHhkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEJJU1QgSS9GCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXN0X2VuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlzdF9ydW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOword2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpc3RfbG9hZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKKword2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpc3Rfc2RpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXN0X3NoaWZ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlzdF9zZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOworCit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlzdF9kb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOword2lyZSBbMzowXSAgICAgICAgICAgICAgICAgICAgIGJpc3RfZXJyb3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKK3dpcmUgWzM6MF0gICAgICAgICAgICAgICAgICAgICBiaXN0X2NvcnJlY3QgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlIFszOjBdICAgICAgICAgICAgICAgICAgICAgYmlzdF9lcnJvcl9jbnQwICAgICAgICAgICAgICAgICAgICAgICAgOword2lyZSBbMzowXSAgICAgICAgICAgICAgICAgICAgIGJpc3RfZXJyb3JfY250MSAgICAgICAgICAgICAgICAgICAgICAgIDsKK3dpcmUgWzM6MF0gICAgICAgICAgICAgICAgICAgICBiaXN0X2Vycm9yX2NudDIgICAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlIFszOjBdICAgICAgICAgICAgICAgICAgICAgYmlzdF9lcnJvcl9jbnQzICAgICAgICAgICAgICAgICAgICAgICAgOworCisvLyBXaXRoIFJlcGVhdGVyIEJ1ZmZlcgord2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpc3RfZW5fcnAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXN0X3J1bl9ycCAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlzdF9sb2FkX3JwICAgICAgICAgICAgICAgICAgICAgICAgICAgOworCit3aXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlzdF9zZGlfcnAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOword2lyZSAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpc3Rfc2hpZnRfcnAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXN0X3Nkb19ycCAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CisKK3dpcmUgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXN0X2RvbmVfcnAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlIFszOjBdICAgICAgICAgICAgICAgICAgICAgYmlzdF9lcnJvcl9ycCAgICAgICAgICAgICAgICAgICAgICAgICAgOword2lyZSBbMzowXSAgICAgICAgICAgICAgICAgICAgIGJpc3RfY29ycmVjdF9ycCAgICAgICAgICAgICAgICAgICAgICAgIDsKK3dpcmUgWzM6MF0gICAgICAgICAgICAgICAgICAgICBiaXN0X2Vycm9yX2NudDBfcnAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlIFszOjBdICAgICAgICAgICAgICAgICAgICAgYmlzdF9lcnJvcl9jbnQxX3JwICAgICAgICAgICAgICAgICAgICAgOword2lyZSBbMzowXSAgICAgICAgICAgICAgICAgICAgIGJpc3RfZXJyb3JfY250Ml9ycCAgICAgICAgICAgICAgICAgICAgIDsKK3dpcmUgWzM6MF0gICAgICAgICAgICAgICAgICAgICBiaXN0X2Vycm9yX2NudDNfcnAgICAgICAgICAgICAgICAgICAgICA7CisKKy8vIHRvd2FyZHMgbWVtb3J5IE1CSVNUMQorLy8gUE9SVC1BCit3aXJlICAgW0JJU1RfTk9fU1JBTS0xOjBdICAgICAgbWVtX2Nsa19hICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOword2lyZSAgIFtCSVNUMV9BRERSX1dELTE6Ml0gICAgIG1lbTBfYWRkcl9hICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKK3dpcmUgICBbQklTVDFfQUREUl9XRC0xOjJdICAgICBtZW0xX2FkZHJfYSAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlICAgW0JJU1QxX0FERFJfV0QtMToyXSAgICAgbWVtMl9hZGRyX2EgICAgICAgICAgICAgICAgICAgICAgICAgICAgOword2lyZSAgIFtCSVNUMV9BRERSX1dELTE6Ml0gICAgIG1lbTNfYWRkcl9hICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKK3dpcmUgICBbQklTVF9OT19TUkFNLTE6MF0gICAgICBtZW1fY2VuX2EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlICAgW0JJU1RfTk9fU1JBTS0xOjBdICAgICAgbWVtX3dlYl9hICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOword2lyZSBbQklTVF9EQVRBX1dELzgtMTowXSAgICAgIG1lbTBfbWFza19hICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKK3dpcmUgW0JJU1RfREFUQV9XRC84LTE6MF0gICAgICBtZW0xX21hc2tfYSAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlIFtCSVNUX0RBVEFfV0QvOC0xOjBdICAgICAgbWVtMl9tYXNrX2EgICAgICAgICAgICAgICAgICAgICAgICAgICAgOword2lyZSBbQklTVF9EQVRBX1dELzgtMTowXSAgICAgIG1lbTNfbWFza19hICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKK3dpcmUgICBbQklTVF9EQVRBX1dELTE6MF0gICAgICBtZW0wX2Rpbl9hICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlICAgW0JJU1RfREFUQV9XRC0xOjBdICAgICAgbWVtMV9kaW5fYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOword2lyZSAgIFtCSVNUX0RBVEFfV0QtMTowXSAgICAgIG1lbTJfZGluX2EgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKK3dpcmUgICBbQklTVF9EQVRBX1dELTE6MF0gICAgICBtZW0zX2Rpbl9hICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlICAgW0JJU1RfREFUQV9XRC0xOjBdICAgICAgbWVtMF9kb3V0X2EgICAgICAgICAgICAgICAgICAgICAgICAgICAgOword2lyZSAgIFtCSVNUX0RBVEFfV0QtMTowXSAgICAgIG1lbTFfZG91dF9hICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKK3dpcmUgICBbQklTVF9EQVRBX1dELTE6MF0gICAgICBtZW0yX2RvdXRfYSAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlICAgW0JJU1RfREFUQV9XRC0xOjBdICAgICAgbWVtM19kb3V0X2EgICAgICAgICAgICAgICAgICAgICAgICAgICAgOworCisvLyBQT1JULUIKK3dpcmUgW0JJU1RfTk9fU1JBTS0xOjBdICAgICAgICBtZW1fY2xrX2IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlIFtCSVNUX05PX1NSQU0tMTowXSAgICAgICAgbWVtX2Nlbl9iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOword2lyZSBbQklTVDFfQUREUl9XRC0xOjJdICAgICAgIG1lbTBfYWRkcl9iICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKK3dpcmUgW0JJU1QxX0FERFJfV0QtMToyXSAgICAgICBtZW0xX2FkZHJfYiAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cit3aXJlIFtCSVNUMV9BRERSX1dELTE6Ml0gICAgICAgbWVtMl9hZGRyX2IgICAgICAgICAgICAgICAgICAgICAgICAgICAgOword2lyZSBbQklTVDFfQUREUl9XRC0xOjJdICAgICAgIG1lbTNfYWRkcl9iICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKKword2lyZSBbMzowXSAgICAgICAgICAgICAgICAgICAgIHNwaV9jc24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBDbG9jayBTa2V3IEN0cmwKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2Fzc2lnbiBjZmdfY3NrYV93aSAgICAgPSBjZmdfY2xrX2N0cmwxWzM6MF07Cithc3NpZ24gY2ZnX2Nza2Ffd2ggICAgID0gY2ZnX2Nsa19jdHJsMVs3OjRdOworYXNzaWduIGNmZ19jc2thX3Jpc2N2ICA9IGNmZ19jbGtfY3RybDFbMTE6OF07Cithc3NpZ24gY2ZnX2Nza2FfcXNwaSAgICA9IGNmZ19jbGtfY3RybDFbMTU6MTJdOworYXNzaWduIGNmZ19jc2thX3VhcnQgICA9IGNmZ19jbGtfY3RybDFbMTk6MTZdOworYXNzaWduIGNmZ19jc2thX3Bpbm11eCA9IGNmZ19jbGtfY3RybDFbMjM6MjBdOworYXNzaWduIGNmZ19jc2thX3FzcGlfY28gID0gY2ZnX2Nsa19jdHJsMVsyNzoyNF07CisKK2Fzc2lnbiAgY2ZnX2Nza2FfbWJpc3QxICAgPSBjZmdfY2xrX2N0cmwyWzM6MF07Cithc3NpZ24gIGNmZ19jc2thX21iaXN0MiAgID0gY2ZnX2Nsa19jdHJsMls3OjRdOworYXNzaWduICBjZmdfY3NrYV9tYmlzdDMgICA9IGNmZ19jbGtfY3RybDJbMTE6OF07Cithc3NpZ24gIGNmZ19jc2thX21iaXN0NCAgID0gY2ZnX2Nsa19jdHJsMlsxNToxMl07Cithc3NpZ24gIGRjYWNoZV9yZW1hcCAgICAgID0gY2ZnX2Nsa19jdHJsMlsyNzoyNF07Cithc3NpZ24gIGJvb3RfcmVtYXAgICAgICAgID0gY2ZnX2Nsa19jdHJsMlszMToyOF07CisKKy8vYXNzaWduIGxhX2RhdGFfb3V0ICAgID0ge3Jpc2N2X2RlYnVnLHNwaV9kZWJ1ZyxzZHJhbV9kZWJ1Z307Cithc3NpZ24gbGFfZGF0YV9vdXRbMTI3OjBdICAgID0ge3Bpbm11eF9kZWJ1ZyxzcGlfZGVidWcscmlzY3ZfZGVidWd9OworCisvL2Nsa19idWYgdV9idWYxX3diX3JzdG4gICguY2xrX2kod2JkX2ludF9yc3RfbiksLmNsa19vKHdiZF9pbnQxX3JzdF9uKSk7CisvL2Nsa19idWYgdV9idWYyX3diX3JzdG4gICguY2xrX2kod2JkX2ludDFfcnN0X24pLC5jbGtfbyh3YmRfaW50Ml9yc3RfbikpOworLy8KKy8vY2xrX2J1ZiB1X2J1ZjFfd2JjbGsgICAgKC5jbGtfaSh3YmRfY2xrX2ludCksLmNsa19vKHdiZF9jbGtfaW50MSkpOworLy9jbGtfYnVmIHVfYnVmMl93YmNsayAgICAoLmNsa19pKHdiZF9jbGtfaW50MSksLmNsa19vKHdiZF9jbGtfaW50MikpOworCit3Yl9ob3N0IHVfd2JfaG9zdCgKK2BpZmRlZiBVU0VfUE9XRVJfUElOUworICAgICAgICAgIC52Y2NkMSAgICAgICAgICAgICAgKHZjY2QxICAgICAgICAgICAgICAgICAgICAgICAgKSwvLyBVc2VyIGFyZWEgMSAxLjhWIHN1cHBseQorICAgICAgICAgIC52c3NkMSAgICAgICAgICAgICAgKHZzc2QxICAgICAgICAgICAgICAgICAgICAgICAgKSwvLyBVc2VyIGFyZWEgMSBkaWdpdGFsIGdyb3VuZAorYGVuZGlmCisgICAgICAgICAgLnVzZXJfY2xvY2sxICAgICAgICAod2JfY2xrX2kgICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC51c2VyX2Nsb2NrMiAgICAgICAgKHVzZXJfY2xvY2syICAgICAgICAgICAgICAgICAgKSwKKworICAgICAgICAgIC5jcHVfY2xrICAgICAgICAgICAgKGNwdV9jbGsgICAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAucnRjX2NsayAgICAgICAgICAgIChydGNfY2xrICAgICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLnVzYl9jbGsgICAgICAgICAgICAodXNiX2NsayAgICAgICAgICAgICAgICAgICAgICApLAorCisgICAgICAgICAgLndiZF9pbnRfcnN0X24gICAgICAod2JkX2ludF9yc3RfbiAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5jcHVfcnN0X24gICAgICAgICAgKGNwdV9yc3RfbiAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAucXNwaW1fcnN0X24gICAgICAgIChxc3BpbV9yc3RfbiAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLnNzcGltX3JzdF9uICAgICAgICAoc3NwaW1fcnN0X24gICAgICAgICAgICAgICAgICApLCAvLyBzcGkgcmVzZXQKKyAgICAgICAgICAudWFydF9yc3RfbiAgICAgICAgICh1YXJ0X3JzdF9uICAgICAgICAgICAgICAgICAgICksIC8vIHVhcnQgcmVzZXQKKyAgICAgICAgICAuaTJjbV9yc3RfbiAgICAgICAgIChpMmNfcnN0X24gICAgICAgICAgICAgICAgICAgICksIC8vIGkyYyByZXNldAorICAgICAgICAgIC51c2JfcnN0X24gICAgICAgICAgKHVzYl9yc3RfbiAgICAgICAgICAgICAgICAgICAgKSwgLy8gdXNiIHJlc2V0CisgICAgICAgICAgLmJpc3RfcnN0X24gICAgICAgICAoYmlzdF9yc3RfbiAgICAgICAgICAgICAgICAgICApLCAvLyBCSVNUIFJlc2V0ICAKKworICAgIC8vIE1hc3RlciBQb3J0CisgICAgICAgICAgLndibV9yc3RfaSAgICAgICAgICAod2JfcnN0X2kgICAgICAgICAgICAgICAgICAgICApLCAgCisgICAgICAgICAgLndibV9jbGtfaSAgICAgICAgICAod2JfY2xrX2kgICAgICAgICAgICAgICAgICAgICApLCAgCisgICAgICAgICAgLndibV9jeWNfaSAgICAgICAgICAod2JzX2N5Y19pICAgICAgICAgICAgICAgICAgICApLCAgCisgICAgICAgICAgLndibV9zdGJfaSAgICAgICAgICAod2JzX3N0Yl9pICAgICAgICAgICAgICAgICAgICApLCAgCisgICAgICAgICAgLndibV9hZHJfaSAgICAgICAgICAod2JzX2Fkcl9pICAgICAgICAgICAgICAgICAgICApLCAgCisgICAgICAgICAgLndibV93ZV9pICAgICAgICAgICAod2JzX3dlX2kgICAgICAgICAgICAgICAgICAgICApLCAgCisgICAgICAgICAgLndibV9kYXRfaSAgICAgICAgICAod2JzX2RhdF9pICAgICAgICAgICAgICAgICAgICApLCAgCisgICAgICAgICAgLndibV9zZWxfaSAgICAgICAgICAod2JzX3NlbF9pICAgICAgICAgICAgICAgICAgICApLCAgCisgICAgICAgICAgLndibV9kYXRfbyAgICAgICAgICAod2JzX2RhdF9vICAgICAgICAgICAgICAgICAgICApLCAgCisgICAgICAgICAgLndibV9hY2tfbyAgICAgICAgICAod2JzX2Fja19vICAgICAgICAgICAgICAgICAgICApLCAgCisgICAgICAgICAgLndibV9lcnJfbyAgICAgICAgICAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLCAgCisKKyAgICAvLyBDbG9jayBTa2VxIEFkanVzdAorICAgICAgICAgIC53YmRfY2xrX2ludCAgICAgICAgKHdiZF9jbGtfaW50ICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAud2JkX2Nsa193aCAgICAgICAgICh3YmRfY2xrX3doICAgICAgICAgICAgICAgICAgICksICAKKyAgICAgICAgICAuY2ZnX2Nza2Ffd2ggICAgICAgIChjZmdfY3NrYV93aCAgICAgICAgICAgICAgICAgICksCisKKyAgICAvLyBTbGF2ZSBQb3J0CisgICAgICAgICAgLndic19jbGtfb3V0ICAgICAgICAod2JkX2Nsa19pbnQgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC53YnNfY2xrX2kgICAgICAgICAgKHdiZF9jbGtfd2ggICAgICAgICAgICAgICAgICAgKSwgIAorICAgICAgICAgIC53YnNfY3ljX28gICAgICAgICAgKHdiZF9pbnRfY3ljX2kgICAgICAgICAgICAgICAgKSwgIAorICAgICAgICAgIC53YnNfc3RiX28gICAgICAgICAgKHdiZF9pbnRfc3RiX2kgICAgICAgICAgICAgICAgKSwgIAorICAgICAgICAgIC53YnNfYWRyX28gICAgICAgICAgKHdiZF9pbnRfYWRyX2kgICAgICAgICAgICAgICAgKSwgIAorICAgICAgICAgIC53YnNfd2VfbyAgICAgICAgICAgKHdiZF9pbnRfd2VfaSAgICAgICAgICAgICAgICAgKSwgIAorICAgICAgICAgIC53YnNfZGF0X28gICAgICAgICAgKHdiZF9pbnRfZGF0X2kgICAgICAgICAgICAgICAgKSwgIAorICAgICAgICAgIC53YnNfc2VsX28gICAgICAgICAgKHdiZF9pbnRfc2VsX2kgICAgICAgICAgICAgICAgKSwgIAorICAgICAgICAgIC53YnNfZGF0X2kgICAgICAgICAgKHdiZF9pbnRfZGF0X28gICAgICAgICAgICAgICAgKSwgIAorICAgICAgICAgIC53YnNfYWNrX2kgICAgICAgICAgKHdiZF9pbnRfYWNrX28gICAgICAgICAgICAgICAgKSwgIAorICAgICAgICAgIC53YnNfZXJyX2kgICAgICAgICAgKHdiZF9pbnRfZXJyX28gICAgICAgICAgICAgICAgKSwgIAorCisgICAgICAgICAgLmNmZ19jbGtfY3RybDEgICAgICAoY2ZnX2Nsa19jdHJsMSAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5jZmdfY2xrX2N0cmwyICAgICAgKGNmZ19jbGtfY3RybDIgICAgICAgICAgICAgICAgKSwKKworICAgICAgICAgIC5sYV9kYXRhX2luICAgICAgICAgKGxhX2RhdGFfaW5bMTc6MF0gICAgICAgICAgICAgKSwKKworICAgICAgICAgIC51YXJ0bV9yeGQgICAgICAgICAgKHVhcnRtX3J4ZCAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAudWFydG1fdHhkICAgICAgICAgICh1YXJ0bV90eGQgICAgICAgICAgICAgICAgICAgICkKKworCisgICAgKTsKKworCisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIFJJU0MgViBDb3JlIGluc3RhbmNlCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoreWNyMV90b3Bfd2IgdV9yaXNjdl90b3AgKAorYGlmZGVmIFVTRV9QT1dFUl9QSU5TCisgICAgICAgICAgLnZjY2QxICAgICAgICAgICAgICAodmNjZDEgICAgICAgICAgICAgICAgICAgICAgICApLC8vIFVzZXIgYXJlYSAxIDEuOFYgc3VwcGx5CisgICAgICAgICAgLnZzc2QxICAgICAgICAgICAgICAodnNzZDEgICAgICAgICAgICAgICAgICAgICAgICApLC8vIFVzZXIgYXJlYSAxIGRpZ2l0YWwgZ3JvdW5kCitgZW5kaWYKKyAgICAgICAgICAud2JkX2Nsa19pbnQgICAgICAgICh3YmRfY2xrX3Jpc2NfcnAgICAgICAgICAgICAgICksIAorICAgICAgICAgIC5jZmdfY3NrYV9yaXNjdiAgICAgKGNmZ19jc2thX3Jpc2N2X3JwICAgICAgICAgICAgKSwgCisgICAgICAgICAgLndiZF9jbGtfcmlzY3YgICAgICAod2JkX2Nsa19yaXNjdl9za2V3ICAgICAgICAgICApLAorCisgICAgLy8gUmVzZXQKKyAgICAgICAgICAucHdydXBfcnN0X24gICAgICAgICh3YmRfaW50X3JzdF9uICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLnJzdF9uICAgICAgICAgICAgICAod2JkX2ludF9yc3RfbiAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5jcHVfcnN0X24gICAgICAgICAgKGNwdV9yc3RfbiAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAucmlzY3ZfZGVidWcgICAgICAgIChyaXNjdl9kZWJ1ZyAgICAgICAgICAgICAgICAgICksCisKKyAgICAvLyBDbG9jaworICAgICAgICAgIC5jb3JlX2NsayAgICAgICAgICAgKGNwdV9jbGsgICAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAucnRjX2NsayAgICAgICAgICAgIChydGNfY2xrICAgICAgICAgICAgICAgICAgICAgICksCisKKyAgICAvLyBGdXNlcworICAgICAgICAgIC5mdXNlX21oYXJ0aWQgICAgICAgKGZ1c2VfbWhhcnRpZF9ycCAgICAgICAgICAgICAgKSwKKworICAgIC8vIElSUQorICAgICAgICAgIC5pcnFfbGluZXMgICAgICAgICAgKGlycV9saW5lc19ycCAgICAgICAgICAgICAgICAgKSwgCisgICAgICAgICAgLnNvZnRfaXJxICAgICAgICAgICAoc29mdF9pcnFfcnAgICAgICAgICAgICAgICAgICApLCAvLyBUT0RPIC0gSW50ZXJydXB0cworCisgICAgLy8gREZUCisgICAgLy8gICAgLnRlc3RfbW9kZSAgICAgICAgICAoMSdiMCAgICAgICAgICAgICAgICAgICAgICAgICApLCAvLyBNb3ZlZCBpbnNpZGUgSVAKKyAgICAvLyAgICAudGVzdF9yc3RfbiAgICAgICAgICgxJ2IxICAgICAgICAgICAgICAgICAgICAgICAgICksIC8vIE1vdmVkIGluc2lkZSBJUAorCitgaWZuZGVmIFNDUjFfVENNX01FTQorICAgIC8vIFNSQU0tMCBQT1JULTAKKyAgICAgICAgICAuc3JhbTBfY2xrMCAgICAgICAgIChzcmFtMF9jbGswICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLnNyYW0wX2NzYjAgICAgICAgICAoc3JhbTBfY3NiMCAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5zcmFtMF93ZWIwICAgICAgICAgKHNyYW0wX3dlYjAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuc3JhbTBfYWRkcjAgICAgICAgIChzcmFtMF9hZGRyMCAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLnNyYW0wX3dtYXNrMCAgICAgICAoc3JhbTBfd21hc2swICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5zcmFtMF9kaW4wICAgICAgICAgKHNyYW0wX2RpbjAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuc3JhbTBfZG91dDAgICAgICAgIChzcmFtMF9kb3V0MCAgICAgICAgICAgICAgICAgICksCisgICAgCisgICAgLy8gU1JBTS0wIFBPUlQtMAorICAgICAgICAgIC5zcmFtMF9jbGsxICAgICAgICAgKHNyYW0wX2NsazEgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuc3JhbTBfY3NiMSAgICAgICAgIChzcmFtMF9jc2IxICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLnNyYW0wX2FkZHIxICAgICAgICAoc3JhbTBfYWRkcjEgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5zcmFtMF9kb3V0MSAgICAgICAgKHNyYW0wX2RvdXQxICAgICAgICAgICAgICAgICAgKSwKKworICAvLyAgLy8gU1JBTS0xIFBPUlQtMAorICAvLyAgICAgIC5zcmFtMV9jbGswICAgICAgICAgKHNyYW0xX2NsazAgICAgICAgICAgICAgICAgICAgKSwKKyAgLy8gICAgICAuc3JhbTFfY3NiMCAgICAgICAgIChzcmFtMV9jc2IwICAgICAgICAgICAgICAgICAgICksCisgIC8vICAgICAgLnNyYW0xX3dlYjAgICAgICAgICAoc3JhbTFfd2ViMCAgICAgICAgICAgICAgICAgICApLAorICAvLyAgICAgIC5zcmFtMV9hZGRyMCAgICAgICAgKHNyYW0xX2FkZHIwICAgICAgICAgICAgICAgICAgKSwKKyAgLy8gICAgICAuc3JhbTFfd21hc2swICAgICAgIChzcmFtMV93bWFzazAgICAgICAgICAgICAgICAgICksCisgIC8vICAgICAgLnNyYW0xX2RpbjAgICAgICAgICAoc3JhbTFfZGluMCAgICAgICAgICAgICAgICAgICApLAorICAvLyAgICAgIC5zcmFtMV9kb3V0MCAgICAgICAgKHNyYW0xX2RvdXQwICAgICAgICAgICAgICAgICAgKSwKKyAgLy8gIAorICAvLyAgLy8gU1JBTSBQT1JULTAKKyAgLy8gICAgICAuc3JhbTFfY2xrMSAgICAgICAgIChzcmFtMV9jbGsxICAgICAgICAgICAgICAgICAgICksCisgIC8vICAgICAgLnNyYW0xX2NzYjEgICAgICAgICAoc3JhbTFfY3NiMSAgICAgICAgICAgICAgICAgICApLAorICAvLyAgICAgIC5zcmFtMV9hZGRyMSAgICAgICAgKHNyYW0xX2FkZHIxICAgICAgICAgICAgICAgICAgKSwKKyAgLy8gICAgICAuc3JhbTFfZG91dDEgICAgICAgIChzcmFtMV9kb3V0MSAgICAgICAgICAgICAgICAgICksCitgZW5kaWYKKyAgICAKKyAgICAgICAgICAud2JfcnN0X24gICAgICAgICAgICh3YmRfaW50X3JzdF9uICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLndiX2NsayAgICAgICAgICAgICAod2JkX2Nsa19yaXNjdl9za2V3ICAgICAgICAgICApLAorCisgICAgLy8gSW5zdHJ1Y3Rpb24gY2FjaGUgbWVtb3J5IGludGVyZmFjZQorICAgICAgICAgIC53Yl9pY2FjaGVfc3RiX28gICAgKHdiZF9yaXNjdl9pY2FjaGVfc3RiX2kgICAgICAgKSwKKyAgICAgICAgICAud2JfaWNhY2hlX2Fkcl9vICAgICh3YmRfcmlzY3ZfaWNhY2hlX2Fkcl9pICAgICAgICksCisgICAgICAgICAgLndiX2ljYWNoZV93ZV9vICAgICAod2JkX3Jpc2N2X2ljYWNoZV93ZV9pICAgICAgICApLCAKKyAgICAgICAgICAud2JfaWNhY2hlX3NlbF9vICAgICh3YmRfcmlzY3ZfaWNhY2hlX3NlbF9pICAgICAgICksCisgICAgICAgICAgLndiX2ljYWNoZV9ibF9vICAgICAod2JkX3Jpc2N2X2ljYWNoZV9ibF9pICAgICAgICApLAorICAgICAgICAgIC53Yl9pY2FjaGVfYnJ5X28gICAgKHdiZF9yaXNjdl9pY2FjaGVfYnJ5X2kgICAgICAgKSwKKyAgICAgICAgICAud2JfaWNhY2hlX2RhdF9pICAgICh3YmRfcmlzY3ZfaWNhY2hlX2RhdF9vICAgICAgICksCisgICAgICAgICAgLndiX2ljYWNoZV9hY2tfaSAgICAod2JkX3Jpc2N2X2ljYWNoZV9hY2tfbyAgICAgICApLAorICAgICAgICAgIC53Yl9pY2FjaGVfbGFja19pICAgKHdiZF9yaXNjdl9pY2FjaGVfbGFja19vICAgICAgKSwKKyAgICAgICAgICAud2JfaWNhY2hlX2Vycl9pICAgICh3YmRfcmlzY3ZfaWNhY2hlX2Vycl9vICAgICAgICksCisKKyAgICAgICAgICAuaWNhY2hlX21lbV9jbGswICAgIChpY2FjaGVfbWVtX2NsazAgICAgICAgICAgICAgICksIC8vIENMSworICAgICAgICAgIC5pY2FjaGVfbWVtX2NzYjAgICAgKGljYWNoZV9tZW1fY3NiMCAgICAgICAgICAgICAgKSwgLy8gQ1MjCisgICAgICAgICAgLmljYWNoZV9tZW1fd2ViMCAgICAoaWNhY2hlX21lbV93ZWIwICAgICAgICAgICAgICApLCAvLyBXRSMKKyAgICAgICAgICAuaWNhY2hlX21lbV9hZGRyMCAgIChpY2FjaGVfbWVtX2FkZHIwICAgICAgICAgICAgICksIC8vIEFkZHJlc3MKKyAgICAgICAgICAuaWNhY2hlX21lbV93bWFzazAgIChpY2FjaGVfbWVtX3dtYXNrMCAgICAgICAgICAgICksIC8vIFdNQVNLIworICAgICAgICAgIC5pY2FjaGVfbWVtX2RpbjAgICAgKGljYWNoZV9tZW1fZGluMCAgICAgICAgICAgICAgKSwgLy8gV3JpdGUgRGF0YQorLy8gICAgICAgIC5pY2FjaGVfbWVtX2RvdXQwICAgKGljYWNoZV9tZW1fZG91dDAgICAgICAgICAgICAgKSwgLy8gUmVhZCBEYXRhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAuaWNhY2hlX21lbV9jbGsxICAgIChpY2FjaGVfbWVtX2NsazEgICAgICAgICAgICAgICksIC8vIENMSworICAgICAgICAgIC5pY2FjaGVfbWVtX2NzYjEgICAgKGljYWNoZV9tZW1fY3NiMSAgICAgICAgICAgICAgKSwgLy8gQ1MjCisgICAgICAgICAgLmljYWNoZV9tZW1fYWRkcjEgICAoaWNhY2hlX21lbV9hZGRyMSAgICAgICAgICAgICApLCAvLyBBZGRyZXNzCisgICAgICAgICAgLmljYWNoZV9tZW1fZG91dDEgICAoaWNhY2hlX21lbV9kb3V0MSAgICAgICAgICAgICApLCAvLyBSZWFkIERhdGEKKworICAgIC8vIERhdGEgY2FjaGUgbWVtb3J5IGludGVyZmFjZQorICAgICAgICAgIC53Yl9kY2FjaGVfc3RiX28gICAgKHdiZF9yaXNjdl9kY2FjaGVfc3RiX2kgICAgICAgKSwKKyAgICAgICAgICAud2JfZGNhY2hlX2Fkcl9vICAgICh3YmRfcmlzY3ZfZGNhY2hlX2Fkcl9pICAgICAgICksCisgICAgICAgICAgLndiX2RjYWNoZV93ZV9vICAgICAod2JkX3Jpc2N2X2RjYWNoZV93ZV9pICAgICAgICApLCAKKyAgICAgICAgICAud2JfZGNhY2hlX2RhdF9vICAgICh3YmRfcmlzY3ZfZGNhY2hlX2RhdF9pICAgICAgICksCisgICAgICAgICAgLndiX2RjYWNoZV9zZWxfbyAgICAod2JkX3Jpc2N2X2RjYWNoZV9zZWxfaSAgICAgICApLAorICAgICAgICAgIC53Yl9kY2FjaGVfYmxfbyAgICAgKHdiZF9yaXNjdl9kY2FjaGVfYmxfaSAgICAgICAgKSwKKyAgICAgICAgICAud2JfZGNhY2hlX2JyeV9vICAgICh3YmRfcmlzY3ZfZGNhY2hlX2JyeV9pICAgICAgICksCisgICAgICAgICAgLndiX2RjYWNoZV9kYXRfaSAgICAod2JkX3Jpc2N2X2RjYWNoZV9kYXRfbyAgICAgICApLAorICAgICAgICAgIC53Yl9kY2FjaGVfYWNrX2kgICAgKHdiZF9yaXNjdl9kY2FjaGVfYWNrX28gICAgICAgKSwKKyAgICAgICAgICAud2JfZGNhY2hlX2xhY2tfaSAgICh3YmRfcmlzY3ZfZGNhY2hlX2xhY2tfbyAgICAgICksCisgICAgICAgICAgLndiX2RjYWNoZV9lcnJfaSAgICAod2JkX3Jpc2N2X2RjYWNoZV9lcnJfbyAgICAgICApLAorCisgICAgICAgICAgLmRjYWNoZV9tZW1fY2xrMCAgICAoZGNhY2hlX21lbV9jbGswICAgICAgICAgICAgICApLCAvLyBDTEsKKyAgICAgICAgICAuZGNhY2hlX21lbV9jc2IwICAgIChkY2FjaGVfbWVtX2NzYjAgICAgICAgICAgICAgICksIC8vIENTIworICAgICAgICAgIC5kY2FjaGVfbWVtX3dlYjAgICAgKGRjYWNoZV9tZW1fd2ViMCAgICAgICAgICAgICAgKSwgLy8gV0UjCisgICAgICAgICAgLmRjYWNoZV9tZW1fYWRkcjAgICAoZGNhY2hlX21lbV9hZGRyMCAgICAgICAgICAgICApLCAvLyBBZGRyZXNzCisgICAgICAgICAgLmRjYWNoZV9tZW1fd21hc2swICAoZGNhY2hlX21lbV93bWFzazAgICAgICAgICAgICApLCAvLyBXTUFTSyMKKyAgICAgICAgICAuZGNhY2hlX21lbV9kaW4wICAgIChkY2FjaGVfbWVtX2RpbjAgICAgICAgICAgICAgICksIC8vIFdyaXRlIERhdGEKKyAgICAgICAgICAuZGNhY2hlX21lbV9kb3V0MCAgIChkY2FjaGVfbWVtX2RvdXQwICAgICAgICAgICAgICksIC8vIFJlYWQgRGF0YQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgLmRjYWNoZV9tZW1fY2xrMSAgICAoZGNhY2hlX21lbV9jbGsxICAgICAgICAgICAgICApLCAvLyBDTEsKKyAgICAgICAgICAuZGNhY2hlX21lbV9jc2IxICAgIChkY2FjaGVfbWVtX2NzYjEgICAgICAgICAgICAgICksIC8vIENTIworICAgICAgICAgIC5kY2FjaGVfbWVtX2FkZHIxICAgKGRjYWNoZV9tZW1fYWRkcjEgICAgICAgICAgICAgKSwgLy8gQWRkcmVzcworICAgICAgICAgIC5kY2FjaGVfbWVtX2RvdXQxICAgKGRjYWNoZV9tZW1fZG91dDEgICAgICAgICAgICAgKSwgLy8gUmVhZCBEYXRhCisKKworICAgIC8vIERhdGEgbWVtb3J5IGludGVyZmFjZQorICAgICAgICAgIC53YmRfZG1lbV9zdGJfbyAgICAgKHdiZF9yaXNjdl9kbWVtX3N0Yl9pICAgICAgICAgKSwKKyAgICAgICAgICAud2JkX2RtZW1fYWRyX28gICAgICh3YmRfcmlzY3ZfZG1lbV9hZHJfaSAgICAgICAgICksCisgICAgICAgICAgLndiZF9kbWVtX3dlX28gICAgICAod2JkX3Jpc2N2X2RtZW1fd2VfaSAgICAgICAgICApLCAKKyAgICAgICAgICAud2JkX2RtZW1fZGF0X28gICAgICh3YmRfcmlzY3ZfZG1lbV9kYXRfaSAgICAgICAgICksCisgICAgICAgICAgLndiZF9kbWVtX3NlbF9vICAgICAod2JkX3Jpc2N2X2RtZW1fc2VsX2kgICAgICAgICApLAorICAgICAgICAgIC53YmRfZG1lbV9kYXRfaSAgICAgKHdiZF9yaXNjdl9kbWVtX2RhdF9vICAgICAgICAgKSwKKyAgICAgICAgICAud2JkX2RtZW1fYWNrX2kgICAgICh3YmRfcmlzY3ZfZG1lbV9hY2tfbyAgICAgICAgICksCisgICAgICAgICAgLndiZF9kbWVtX2Vycl9pICAgICAod2JkX3Jpc2N2X2RtZW1fZXJyX28gICAgICAgICApIAorKTsKKworYGlmbmRlZiBTQ1IxX1RDTV9NRU0KK3NreTEzMF9zcmFtXzJrYnl0ZV8xcncxcl8zMng1MTJfOCB1X3RzcmFtMF8ya2IoCitgaWZkZWYgVVNFX1BPV0VSX1BJTlMKKyAgICAgICAgICAudmNjZDEgICAgICAgICAgICAgICh2Y2NkMSAgICAgICAgICAgICAgICAgICAgICAgICksLy8gYXJlYSAxIDEuOFYgc3VwcGx5CisgICAgICAgICAgLnZzc2QxICAgICAgICAgICAgICAodnNzZDEgICAgICAgICAgICAgICAgICAgICAgICApLC8vIGFyZWEgMSBkaWdpdGFsIGdyb3VuZAorYGVuZGlmCisvLyBQb3J0IDA6IFJXCisgICAgICAgICAgLmNsazAgICAgICAgICAgICAgICAoc3JhbTBfY2xrMCAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5jc2IwICAgICAgICAgICAgICAgKHNyYW0wX2NzYjAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAud2ViMCAgICAgICAgICAgICAgIChzcmFtMF93ZWIwICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLndtYXNrMCAgICAgICAgICAgICAoc3JhbTBfd21hc2swICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5hZGRyMCAgICAgICAgICAgICAgKHNyYW0wX2FkZHIwICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuZGluMCAgICAgICAgICAgICAgIChzcmFtMF9kaW4wICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLmRvdXQwICAgICAgICAgICAgICAoc3JhbTBfZG91dDAgICAgICAgICAgICAgICAgICApLAorLy8gUG9ydCAxOiBSCisgICAgICAgICAgLmNsazEgICAgICAgICAgICAgICAoc3JhbTBfY2xrMSAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5jc2IxICAgICAgICAgICAgICAgKHNyYW0wX2NzYjEgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuYWRkcjEgICAgICAgICAgICAgIChzcmFtMF9hZGRyMSAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLmRvdXQxICAgICAgICAgICAgICAoc3JhbTBfZG91dDEgICAgICAgICAgICAgICAgICApCisgICk7CisKKy8qKioKK3NreTEzMF9zcmFtXzJrYnl0ZV8xcncxcl8zMng1MTJfOCB1X3RzcmFtMV8ya2IoCitgaWZkZWYgVVNFX1BPV0VSX1BJTlMKKyAgICAgICAgICAudmNjZDEgICAgICAgICAgICAgICh2Y2NkMSAgICAgICAgICAgICAgICAgICAgICAgICksLy8gVXNlciBhcmVhIDEgMS44ViBzdXBwbHkKKyAgICAgICAgICAudnNzZDEgICAgICAgICAgICAgICh2c3NkMSAgICAgICAgICAgICAgICAgICAgICAgICksLy8gVXNlciBhcmVhIDEgZGlnaXRhbCBncm91bmQKK2BlbmRpZgorLy8gUG9ydCAwOiBSVworICAgICAgICAgIC5jbGswICAgICAgICAgICAgICAgKHNyYW0xX2NsazAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuY3NiMCAgICAgICAgICAgICAgIChzcmFtMV9jc2IwICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLndlYjAgICAgICAgICAgICAgICAoc3JhbTFfd2ViMCAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC53bWFzazAgICAgICAgICAgICAgKHNyYW0xX3dtYXNrMCAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuYWRkcjAgICAgICAgICAgICAgIChzcmFtMV9hZGRyMCAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLmRpbjAgICAgICAgICAgICAgICAoc3JhbTFfZGluMCAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5kb3V0MCAgICAgICAgICAgICAgKHNyYW0xX2RvdXQwICAgICAgICAgICAgICAgICAgKSwKKy8vIFBvcnQgMTogUgorICAgICAgICAgIC5jbGsxICAgICAgICAgICAgICAgKHNyYW0xX2NsazEgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuY3NiMSAgICAgICAgICAgICAgIChzcmFtMV9jc2IxICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLmFkZHIxICAgICAgICAgICAgICAoc3JhbTFfYWRkcjEgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5kb3V0MSAgICAgICAgICAgICAgKHNyYW0xX2RvdXQxICAgICAgICAgICAgICAgICAgKQorICApOworKioqLworYGVuZGlmCisKKworc2t5MTMwX3NyYW1fMmtieXRlXzFydzFyXzMyeDUxMl84IHVfaWNhY2hlXzJrYigKK2BpZmRlZiBVU0VfUE9XRVJfUElOUworICAgICAgICAgIC52Y2NkMSAgICAgICAgICAgICAgKHZjY2QxICAgICAgICAgICAgICAgICAgICAgICAgKSwvLyBVc2VyIGFyZWEgMSAxLjhWIHN1cHBseQorICAgICAgICAgIC52c3NkMSAgICAgICAgICAgICAgKHZzc2QxICAgICAgICAgICAgICAgICAgICAgICAgKSwvLyBVc2VyIGFyZWEgMSBkaWdpdGFsIGdyb3VuZAorYGVuZGlmCisvLyBQb3J0IDA6IFJXCisgICAgICAgICAgLmNsazAgICAgICAgICAgICAgICAoaWNhY2hlX21lbV9jbGswICAgICAgICAgICAgICApLAorICAgICAgICAgIC5jc2IwICAgICAgICAgICAgICAgKGljYWNoZV9tZW1fY3NiMCAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAud2ViMCAgICAgICAgICAgICAgIChpY2FjaGVfbWVtX3dlYjAgICAgICAgICAgICAgICksCisgICAgICAgICAgLndtYXNrMCAgICAgICAgICAgICAoaWNhY2hlX21lbV93bWFzazAgICAgICAgICAgICApLAorICAgICAgICAgIC5hZGRyMCAgICAgICAgICAgICAgKGljYWNoZV9tZW1fYWRkcjAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuZGluMCAgICAgICAgICAgICAgIChpY2FjaGVfbWVtX2RpbjAgICAgICAgICAgICAgICksCisgICAgICAgICAgLmRvdXQwICAgICAgICAgICAgICAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAorLy8gUG9ydCAxOiBSCisgICAgICAgICAgLmNsazEgICAgICAgICAgICAgICAoaWNhY2hlX21lbV9jbGsxICAgICAgICAgICAgICApLAorICAgICAgICAgIC5jc2IxICAgICAgICAgICAgICAgKGljYWNoZV9tZW1fY3NiMSAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuYWRkcjEgICAgICAgICAgICAgIChpY2FjaGVfbWVtX2FkZHIxICAgICAgICAgICAgICksCisgICAgICAgICAgLmRvdXQxICAgICAgICAgICAgICAoaWNhY2hlX21lbV9kb3V0MSAgICAgICAgICAgICApCisgICk7CisKK3NreTEzMF9zcmFtXzJrYnl0ZV8xcncxcl8zMng1MTJfOCB1X2RjYWNoZV8ya2IoCitgaWZkZWYgVVNFX1BPV0VSX1BJTlMKKyAgICAgICAgICAudmNjZDEgICAgICAgICAgICAgICh2Y2NkMSAgICAgICAgICAgICAgICAgICAgICAgICksLy8gVXNlciBhcmVhIDEgMS44ViBzdXBwbHkKKyAgICAgICAgICAudnNzZDEgICAgICAgICAgICAgICh2c3NkMSAgICAgICAgICAgICAgICAgICAgICAgICksLy8gVXNlciBhcmVhIDEgZGlnaXRhbCBncm91bmQKK2BlbmRpZgorLy8gUG9ydCAwOiBSVworICAgICAgICAgIC5jbGswICAgICAgICAgICAgICAgKGRjYWNoZV9tZW1fY2xrMCAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuY3NiMCAgICAgICAgICAgICAgIChkY2FjaGVfbWVtX2NzYjAgICAgICAgICAgICAgICksCisgICAgICAgICAgLndlYjAgICAgICAgICAgICAgICAoZGNhY2hlX21lbV93ZWIwICAgICAgICAgICAgICApLAorICAgICAgICAgIC53bWFzazAgICAgICAgICAgICAgKGRjYWNoZV9tZW1fd21hc2swICAgICAgICAgICAgKSwKKyAgICAgICAgICAuYWRkcjAgICAgICAgICAgICAgIChkY2FjaGVfbWVtX2FkZHIwICAgICAgICAgICAgICksCisgICAgICAgICAgLmRpbjAgICAgICAgICAgICAgICAoZGNhY2hlX21lbV9kaW4wICAgICAgICAgICAgICApLAorICAgICAgICAgIC5kb3V0MCAgICAgICAgICAgICAgKGRjYWNoZV9tZW1fZG91dDAgICAgICAgICAgICAgKSwKKy8vIFBvcnQgMTogUgorICAgICAgICAgIC5jbGsxICAgICAgICAgICAgICAgKGRjYWNoZV9tZW1fY2xrMSAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuY3NiMSAgICAgICAgICAgICAgIChkY2FjaGVfbWVtX2NzYjEgICAgICAgICAgICAgICksCisgICAgICAgICAgLmFkZHIxICAgICAgICAgICAgICAoZGNhY2hlX21lbV9hZGRyMSAgICAgICAgICAgICApLAorICAgICAgICAgIC5kb3V0MSAgICAgICAgICAgICAgKGRjYWNoZV9tZW1fZG91dDEgICAgICAgICAgICAgKQorICApOworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogU1BJIE1hc3RlcgorKiBUaGlzIGlzIGltcGxlbWVudGF0aW9uIG9mIGFuIFNQSSBtYXN0ZXIgdGhhdCBpcyBjb250cm9sbGVkIHZpYSBhbiBBWEkgYnVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuIAorKiBJdCBoYXMgRklGT3MgZm9yIHRyYW5zbWl0dGluZyBhbmQgcmVjZWl2aW5nIGRhdGEuIAorKiBJdCBzdXBwb3J0cyBib3RoIHRoZSBub3JtYWwgU1BJIG1vZGUgYW5kIFFQSSBtb2RlIHdpdGggNCBkYXRhIGxpbmVzLgorKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitxc3BpbV90b3AKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgKK2BpZm5kZWYgU1lOVEhFU0lTCisgICAgLldCX1dJRFRIICAoV0JfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCitgZW5kaWYKKykgdV9xc3BpX21hc3RlcgorKAorYGlmZGVmIFVTRV9QT1dFUl9QSU5TCisgICAgICAgICAgLnZjY2QxICAgICAgICAgICAgICAodmNjZDEgICAgICAgICAgICAgICAgICAgICAgICApLC8vIFVzZXIgYXJlYSAxIDEuOFYgc3VwcGx5CisgICAgICAgICAgLnZzc2QxICAgICAgICAgICAgICAodnNzZDEgICAgICAgICAgICAgICAgICAgICAgICApLC8vIFVzZXIgYXJlYSAxIGRpZ2l0YWwgZ3JvdW5kCitgZW5kaWYKKyAgICAgICAgICAubWNsayAgICAgICAgICAgICAgICh3YmRfY2xrX3NwaSAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLnJzdF9uICAgICAgICAgICAgICAocXNwaW1fcnN0X24gICAgICAgICAgICAgICAgICApLAorCisgICAgLy8gQ2xvY2sgU2tldyBBZGp1c3QKKyAgICAgICAgICAuY2ZnX2Nza2Ffc3BfY28gICAgIChjZmdfY3NrYV9xc3BpX2NvX3JwICAgICAgICAgICksCisgICAgICAgICAgLmNmZ19jc2thX3NwaSAgICAgICAoY2ZnX2Nza2FfcXNwaV9ycCAgICAgICAgICAgICApLAorICAgICAgICAgIC53YmRfY2xrX2ludCAgICAgICAgKHdiZF9jbGtfcXNwaV9ycCAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAud2JkX2Nsa19zcGkgICAgICAgICh3YmRfY2xrX3NwaSAgICAgICAgICAgICAgICAgICksCisKKyAgICAgICAgICAud2JkX3N0Yl9pICAgICAgICAgICh3YmRfc3BpbV9zdGJfbyAgICAgICAgICAgICAgICksCisgICAgICAgICAgLndiZF9hZHJfaSAgICAgICAgICAod2JkX3NwaW1fYWRyX28gICAgICAgICAgICAgICApLAorICAgICAgICAgIC53YmRfd2VfaSAgICAgICAgICAgKHdiZF9zcGltX3dlX28gICAgICAgICAgICAgICAgKSwgCisgICAgICAgICAgLndiZF9kYXRfaSAgICAgICAgICAod2JkX3NwaW1fZGF0X28gICAgICAgICAgICAgICApLAorICAgICAgICAgIC53YmRfc2VsX2kgICAgICAgICAgKHdiZF9zcGltX3NlbF9vICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAud2JkX2JsX2kgICAgICAgICAgICh3YmRfc3BpbV9ibF9vICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLndiZF9icnlfaSAgICAgICAgICAod2JkX3NwaW1fYnJ5X28gICAgICAgICAgICAgICApLAorICAgICAgICAgIC53YmRfZGF0X28gICAgICAgICAgKHdiZF9zcGltX2RhdF9pICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAud2JkX2Fja19vICAgICAgICAgICh3YmRfc3BpbV9hY2tfaSAgICAgICAgICAgICAgICksCisgICAgICAgICAgLndiZF9sYWNrX28gICAgICAgICAod2JkX3NwaW1fbGFja19pICAgICAgICAgICAgICApLAorICAgICAgICAgIC53YmRfZXJyX28gICAgICAgICAgKHdiZF9zcGltX2Vycl9pICAgICAgICAgICAgICAgKSwKKworICAgICAgICAgIC5zcGlfZGVidWcgICAgICAgICAgKHNwaV9kZWJ1ZyAgICAgICAgICAgICAgICAgICAgKSwKKworICAgIC8vIFBhZCBJbnRlcmZhY2UKKyAgICAgICAgICAuc3BpX3NkaSAgICAgICAgICAgIChzZmxhc2hfZGkgICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLnNwaV9jbGsgICAgICAgICAgICAoc2ZsYXNoX3NjayAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5zcGlfY3NuICAgICAgICAgICAgKHNwaV9jc24gICAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuc3BpX3NkbyAgICAgICAgICAgIChzZmxhc2hfZG8gICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLnNwaV9vZW4gICAgICAgICAgICAoc2ZsYXNoX29lbiAgICAgICAgICAgICAgICAgICApCisKKyk7CisKKworCit3Yl9pbnRlcmNvbm5lY3QgICMoCisJYGlmbmRlZiBTWU5USEVTSVMKKwkgICAgICAgICAuQ0hfQ0xLX1dEICAgICAgICAgICg4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCisJICAgICAgICAgLkNIX0RBVEFfV0QgICAgICAgICAoMTE2ICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgIGBlbmRpZgorCSkgdV9pbnRlcmNvbiAoCitgaWZkZWYgVVNFX1BPV0VSX1BJTlMKKyAgICAgICAgICAudmNjZDEgICAgICAgICAgICAgICh2Y2NkMSAgICAgICAgICAgICAgICAgICAgICAgICksLy8gVXNlciBhcmVhIDEgMS44ViBzdXBwbHkKKyAgICAgICAgICAudnNzZDEgICAgICAgICAgICAgICh2c3NkMSAgICAgICAgICAgICAgICAgICAgICAgICksLy8gVXNlciBhcmVhIDEgZGlnaXRhbCBncm91bmQKK2BlbmRpZgorCSAgIC5jaF9jbGtfaW4gICAgICAgICAgKHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX2Nsa19pbnQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfY2xrX2ludCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9jbGtfaW50LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX2Nsa19pbnQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfY2xrX2ludCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9jbGtfaW50LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX2Nsa19pbnQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfY2xrX2ludH0gICAgICAgICAgICAgICAgICAgICAgKSwKKwkgICAuY2hfY2xrX291dCAgICAgICAgICh7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9jbGtfbWJpc3Q0X3JwLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX2Nsa19tYmlzdDNfcnAsIAorICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfY2xrX21iaXN0Ml9ycCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIHdiZF9jbGtfbWJpc3QxX3JwLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgd2JkX2Nsa19waW5tdXhfcnAsIAorICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfY2xrX3VhcnRfcnAsIAorICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfY2xrX3FzcGlfcnAsIAorICAgICAgICAgICAgICAgICAgICAgICAgICB3YmRfY2xrX3Jpc2NfcnB9ICAgICAgICAgICAgICAgICAgKSwKKwkgICAuY2hfZGF0YV9pbiAgICAoeworCSAgICAgICAgICAgICAgICAgYmlzdF9lcnJvcl9jbnQzWzM6MF0sCisJCQkgYmlzdF9jb3JyZWN0WzNdLAorCQkJIGJpc3RfZXJyb3JbM10sCisKKwkgICAgICAgICAgICAgICAgIGJpc3RfZXJyb3JfY250MlszOjBdLAorCQkJIGJpc3RfY29ycmVjdFsyXSwKKwkJCSBiaXN0X2Vycm9yWzJdLAorCisJICAgICAgICAgICAgICAgICBiaXN0X2Vycm9yX2NudDFbMzowXSwKKwkJCSBiaXN0X2NvcnJlY3RbMV0sCisJCQkgYmlzdF9lcnJvclsxXSwKKworCSAgICAgICAgICAgICAgICAgYmlzdF9lcnJvcl9jbnQwWzM6MF0sCisJCQkgYmlzdF9jb3JyZWN0WzBdLAorCQkJIGJpc3RfZXJyb3JbMF0sCisJCQkgYmlzdF9kb25lLAorCQkJIGJpc3Rfc2RvLAorCQkJIGJpc3Rfc2hpZnQsCisJCQkgYmlzdF9zZGksCisJCQkgYmlzdF9sb2FkLAorCQkJIGJpc3RfcnVuLAorCQkJIGJpc3RfZW4sCisJCQkgCisKKwkgICAgICAgICAgICAgICAgIHNvZnRfaXJxLAorCQkJIGlycV9saW5lc1sxNTowXSwKKwkJCSBmdXNlX21oYXJ0aWRbMzE6MF0sCisKKwkJICAgICAgICAgY2ZnX2Nza2FfbWJpc3Q0WzM6MF0sCisJCSAgICAgICAgIGNmZ19jc2thX21iaXN0M1szOjBdLAorCQkgICAgICAgICBjZmdfY3NrYV9tYmlzdDJbMzowXSwKKwkJICAgICAgICAgY2ZnX2Nza2FfbWJpc3QxWzM6MF0sCisJCQkgY2ZnX2Nza2FfcXNwaV9jb1szOjBdLAorCQkgICAgICAgICBjZmdfY3NrYV9waW5tdXhbMzowXSwKKwkJCSBjZmdfY3NrYV91YXJ0WzM6MF0sCisJCSAgICAgICAgIGNmZ19jc2thX3FzcGlbMzowXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjZmdfY3NrYV9yaXNjdlszOjBdCisJCQkgfSApLAorCSAgICAuY2hfZGF0YV9vdXQgICAoeworCSAgICAgICAgICAgICAgICAgYmlzdF9lcnJvcl9jbnQzX3JwWzM6MF0sCisJCQkgYmlzdF9jb3JyZWN0X3JwWzNdLAorCQkJIGJpc3RfZXJyb3JfcnBbM10sCisKKwkgICAgICAgICAgICAgICAgIGJpc3RfZXJyb3JfY250Ml9ycFszOjBdLAorCQkJIGJpc3RfY29ycmVjdF9ycFsyXSwKKwkJCSBiaXN0X2Vycm9yX3JwWzJdLAorCisJICAgICAgICAgICAgICAgICBiaXN0X2Vycm9yX2NudDFfcnBbMzowXSwKKwkJCSBiaXN0X2NvcnJlY3RfcnBbMV0sCisJCQkgYmlzdF9lcnJvcl9ycFsxXSwKKworCSAgICAgICAgICAgICAgICAgYmlzdF9lcnJvcl9jbnQwX3JwWzM6MF0sCisJCQkgYmlzdF9jb3JyZWN0X3JwWzBdLAorCQkJIGJpc3RfZXJyb3JfcnBbMF0sCisJCQkgYmlzdF9kb25lX3JwLAorCQkJIGJpc3Rfc2RvX3JwLAorCQkJIGJpc3Rfc2hpZnRfcnAsCisJCQkgYmlzdF9zZGlfcnAsCisJCQkgYmlzdF9sb2FkX3JwLAorCQkJIGJpc3RfcnVuX3JwLAorCQkJIGJpc3RfZW5fcnAsCisKKwkgICAgICAgICAgICAgICAgIHNvZnRfaXJxX3JwLAorCQkJIGlycV9saW5lc19ycFsxNTowXSwKKwkJCSBmdXNlX21oYXJ0aWRfcnBbMzE6MF0sCisKKwkJICAgICAgICAgY2ZnX2Nza2FfbWJpc3Q0X3JwWzM6MF0sCisJCSAgICAgICAgIGNmZ19jc2thX21iaXN0M19ycFszOjBdLAorCQkgICAgICAgICBjZmdfY3NrYV9tYmlzdDJfcnBbMzowXSwKKwkJICAgICAgICAgY2ZnX2Nza2FfbWJpc3QxX3JwWzM6MF0sCisJCQkgY2ZnX2Nza2FfcXNwaV9jb19ycFszOjBdLAorCQkgICAgICAgICBjZmdfY3NrYV9waW5tdXhfcnBbMzowXSwKKwkJCSBjZmdfY3NrYV91YXJ0X3JwWzM6MF0sCisJCSAgICAgICAgIGNmZ19jc2thX3FzcGlfcnBbMzowXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjZmdfY3NrYV9yaXNjdl9ycFszOjBdCisgICAgICAgICAgICAgICAgICAgICAgICAgfSksCisgICAgIC8vIENsb2NrIFNrZXcgYWRqdXN0CisJICAgICAgICAgLndiZF9jbGtfaW50ICAgICAgICAod2JkX2Nsa19pbnQgICAgICAgICAgICAgICAgICApLCAKKwkgICAgICAgICAuY2ZnX2Nza2Ffd2kgICAgICAgIChjZmdfY3NrYV93aSAgICAgICAgICAgICAgICAgICksIAorCSAgICAgICAgIC53YmRfY2xrX3dpICAgICAgICAgKHdiZF9jbGtfd2lfc2tldyAgICAgICAgICAgICAgKSwKKworICAgICAgICAgICAgICAgICAuY2xrX2kgICAgICAgICAgICAgICh3YmRfY2xrX3dpX3NrZXcgICAgICAgICAgICAgICksIAorICAgICAgICAgICAgICAgICAucnN0X24gICAgICAgICAgICAgICh3YmRfaW50X3JzdF9uICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgIC5kY2FjaGVfcmVtYXAgICAgICAgKGRjYWNoZV9yZW1hcCAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICAgLmJvb3RfcmVtYXAgICAgICAgICAoYm9vdF9yZW1hcCAgICAgICAgICAgICAgICAgICApLAorCisgICAgICAgICAvLyBNYXN0ZXIgMCBJbnRlcmZhY2UKKyAgICAgICAgICAubTBfd2JkX2RhdF9pICAgICAgICh3YmRfaW50X2RhdF9pICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLm0wX3diZF9hZHJfaSAgICAgICAod2JkX2ludF9hZHJfaSAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5tMF93YmRfc2VsX2kgICAgICAgKHdiZF9pbnRfc2VsX2kgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAubTBfd2JkX3dlX2kgICAgICAgICh3YmRfaW50X3dlX2kgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLm0wX3diZF9jeWNfaSAgICAgICAod2JkX2ludF9jeWNfaSAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5tMF93YmRfc3RiX2kgICAgICAgKHdiZF9pbnRfc3RiX2kgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAubTBfd2JkX2RhdF9vICAgICAgICh3YmRfaW50X2RhdF9vICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLm0wX3diZF9hY2tfbyAgICAgICAod2JkX2ludF9hY2tfbyAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5tMF93YmRfZXJyX28gICAgICAgKHdiZF9pbnRfZXJyX28gICAgICAgICAgICAgICAgKSwKKyAgICAgICAgIAorICAgICAgICAgLy8gTWFzdGVyIDEgSW50ZXJmYWNlCisgICAgICAgICAgLm0xX3diZF9kYXRfaSAgICAgICAod2JkX3Jpc2N2X2RtZW1fZGF0X2kgICAgICAgICApLAorICAgICAgICAgIC5tMV93YmRfYWRyX2kgICAgICAgKHdiZF9yaXNjdl9kbWVtX2Fkcl9pICAgICAgICAgKSwKKyAgICAgICAgICAubTFfd2JkX3NlbF9pICAgICAgICh3YmRfcmlzY3ZfZG1lbV9zZWxfaSAgICAgICAgICksCisgICAgICAgICAgLm0xX3diZF93ZV9pICAgICAgICAod2JkX3Jpc2N2X2RtZW1fd2VfaSAgICAgICAgICApLAorICAgICAgICAgIC5tMV93YmRfY3ljX2kgICAgICAgKHdiZF9yaXNjdl9kbWVtX3N0Yl9pICAgICAgICAgKSwKKyAgICAgICAgICAubTFfd2JkX3N0Yl9pICAgICAgICh3YmRfcmlzY3ZfZG1lbV9zdGJfaSAgICAgICAgICksCisgICAgICAgICAgLm0xX3diZF9kYXRfbyAgICAgICAod2JkX3Jpc2N2X2RtZW1fZGF0X28gICAgICAgICApLAorICAgICAgICAgIC5tMV93YmRfYWNrX28gICAgICAgKHdiZF9yaXNjdl9kbWVtX2Fja19vICAgICAgICAgKSwKKyAgICAgICAgICAubTFfd2JkX2Vycl9vICAgICAgICh3YmRfcmlzY3ZfZG1lbV9lcnJfbyAgICAgICAgICksCisgICAgICAgICAKKyAgICAgICAgIC8vIE1hc3RlciAyIEludGVyZmFjZQorICAgICAgICAgIC5tMl93YmRfZGF0X2kgICAgICAgKHdiZF9yaXNjdl9kY2FjaGVfZGF0X2kgICAgICAgKSwKKyAgICAgICAgICAubTJfd2JkX2Fkcl9pICAgICAgICh3YmRfcmlzY3ZfZGNhY2hlX2Fkcl9pICAgICAgICksCisgICAgICAgICAgLm0yX3diZF9zZWxfaSAgICAgICAod2JkX3Jpc2N2X2RjYWNoZV9zZWxfaSAgICAgICApLAorICAgICAgICAgIC5tMl93YmRfYmxfaSAgICAgICAgKHdiZF9yaXNjdl9kY2FjaGVfYmxfaSAgICAgICAgKSwKKyAgICAgICAgICAubTJfd2JkX2JyeV9pICAgICAgICh3YmRfcmlzY3ZfZGNhY2hlX2JyeV9pICAgICAgICksCisgICAgICAgICAgLm0yX3diZF93ZV9pICAgICAgICAod2JkX3Jpc2N2X2RjYWNoZV93ZV9pICAgICAgICApLAorICAgICAgICAgIC5tMl93YmRfY3ljX2kgICAgICAgKHdiZF9yaXNjdl9kY2FjaGVfc3RiX2kgICAgICAgKSwKKyAgICAgICAgICAubTJfd2JkX3N0Yl9pICAgICAgICh3YmRfcmlzY3ZfZGNhY2hlX3N0Yl9pICAgICAgICksCisgICAgICAgICAgLm0yX3diZF9kYXRfbyAgICAgICAod2JkX3Jpc2N2X2RjYWNoZV9kYXRfbyAgICAgICApLAorICAgICAgICAgIC5tMl93YmRfYWNrX28gICAgICAgKHdiZF9yaXNjdl9kY2FjaGVfYWNrX28gICAgICAgKSwKKyAgICAgICAgICAubTJfd2JkX2xhY2tfbyAgICAgICh3YmRfcmlzY3ZfZGNhY2hlX2xhY2tfbyAgICAgICksCisgICAgICAgICAgLm0yX3diZF9lcnJfbyAgICAgICAod2JkX3Jpc2N2X2RjYWNoZV9lcnJfbyAgICAgICApLAorCisgICAgICAgICAvLyBNYXN0ZXIgMyBJbnRlcmZhY2UKKyAgICAgICAgICAubTNfd2JkX2Fkcl9pICAgICAgICh3YmRfcmlzY3ZfaWNhY2hlX2Fkcl9pICAgICAgICksCisgICAgICAgICAgLm0zX3diZF9zZWxfaSAgICAgICAod2JkX3Jpc2N2X2ljYWNoZV9zZWxfaSAgICAgICApLAorICAgICAgICAgIC5tM193YmRfYmxfaSAgICAgICAgKHdiZF9yaXNjdl9pY2FjaGVfYmxfaSAgICAgICAgKSwKKyAgICAgICAgICAubTNfd2JkX2JyeV9pICAgICAgICh3YmRfcmlzY3ZfaWNhY2hlX2JyeV9pICAgICAgICksCisgICAgICAgICAgLm0zX3diZF93ZV9pICAgICAgICAod2JkX3Jpc2N2X2ljYWNoZV93ZV9pICAgICAgICApLAorICAgICAgICAgIC5tM193YmRfY3ljX2kgICAgICAgKHdiZF9yaXNjdl9pY2FjaGVfc3RiX2kgICAgICAgKSwKKyAgICAgICAgICAubTNfd2JkX3N0Yl9pICAgICAgICh3YmRfcmlzY3ZfaWNhY2hlX3N0Yl9pICAgICAgICksCisgICAgICAgICAgLm0zX3diZF9kYXRfbyAgICAgICAod2JkX3Jpc2N2X2ljYWNoZV9kYXRfbyAgICAgICApLAorICAgICAgICAgIC5tM193YmRfYWNrX28gICAgICAgKHdiZF9yaXNjdl9pY2FjaGVfYWNrX28gICAgICAgKSwKKyAgICAgICAgICAubTNfd2JkX2xhY2tfbyAgICAgICh3YmRfcmlzY3ZfaWNhY2hlX2xhY2tfbyAgICAgICksCisgICAgICAgICAgLm0zX3diZF9lcnJfbyAgICAgICAod2JkX3Jpc2N2X2ljYWNoZV9lcnJfbyAgICAgICApLAorICAgICAgICAgCisgICAgICAgICAKKyAgICAgICAgIC8vIFNsYXZlIDAgSW50ZXJmYWNlCisgICAgICAgICAvLyAuczBfd2JkX2Vycl9pICAoMSdiMCAgICAgICAgICAgKSwgLSBNb3ZlZCBpbnNpZGUgSVAKKyAgICAgICAgICAuczBfd2JkX2RhdF9pICAgICAgICh3YmRfc3BpbV9kYXRfaSAgICAgICAgICAgICAgICksCisgICAgICAgICAgLnMwX3diZF9hY2tfaSAgICAgICAod2JkX3NwaW1fYWNrX2kgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5zMF93YmRfbGFja19pICAgICAgKHdiZF9zcGltX2xhY2tfaSAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuczBfd2JkX2RhdF9vICAgICAgICh3YmRfc3BpbV9kYXRfbyAgICAgICAgICAgICAgICksCisgICAgICAgICAgLnMwX3diZF9hZHJfbyAgICAgICAod2JkX3NwaW1fYWRyX28gICAgICAgICAgICAgICApLAorICAgICAgICAgIC5zMF93YmRfYnJ5X28gICAgICAgKHdiZF9zcGltX2JyeV9vICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuczBfd2JkX2JsX28gICAgICAgICh3YmRfc3BpbV9ibF9vICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLnMwX3diZF9zZWxfbyAgICAgICAod2JkX3NwaW1fc2VsX28gICAgICAgICAgICAgICApLAorICAgICAgICAgIC5zMF93YmRfd2VfbyAgICAgICAgKHdiZF9zcGltX3dlX28gICAgICAgICAgICAgICAgKSwgIAorICAgICAgICAgIC5zMF93YmRfY3ljX28gICAgICAgKHdiZF9zcGltX2N5Y19vICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuczBfd2JkX3N0Yl9vICAgICAgICh3YmRfc3BpbV9zdGJfbyAgICAgICAgICAgICAgICksCisgICAgICAgICAKKyAgICAgICAgIC8vIFNsYXZlIDEgSW50ZXJmYWNlCisgICAgICAgICAvLyAuczFfd2JkX2Vycl9pICAoMSdiMCAgICAgICAgICAgKSwgLSBNb3ZlZCBpbnNpZGUgSVAKKyAgICAgICAgICAuczFfd2JkX2RhdF9pICAgICAgICh3YmRfdWFydF9kYXRfaSAgICAgICAgICAgICAgICksCisgICAgICAgICAgLnMxX3diZF9hY2tfaSAgICAgICAod2JkX3VhcnRfYWNrX2kgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5zMV93YmRfZGF0X28gICAgICAgKHdiZF91YXJ0X2RhdF9vICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuczFfd2JkX2Fkcl9vICAgICAgICh3YmRfdWFydF9hZHJfbyAgICAgICAgICAgICAgICksCisgICAgICAgICAgLnMxX3diZF9zZWxfbyAgICAgICAod2JkX3VhcnRfc2VsX28gICAgICAgICAgICAgICApLAorICAgICAgICAgIC5zMV93YmRfd2VfbyAgICAgICAgKHdiZF91YXJ0X3dlX28gICAgICAgICAgICAgICAgKSwgIAorICAgICAgICAgIC5zMV93YmRfY3ljX28gICAgICAgKHdiZF91YXJ0X2N5Y19vICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuczFfd2JkX3N0Yl9vICAgICAgICh3YmRfdWFydF9zdGJfbyAgICAgICAgICAgICAgICksCisgICAgICAgICAKKyAgICAgICAgIC8vIFNsYXZlIDIgSW50ZXJmYWNlCisgICAgICAgICAvLyAuczJfd2JkX2Vycl9pICAoMSdiMCAgICAgICAgICAgKSwgLSBNb3ZlZCBpbnNpZGUgSVAKKyAgICAgICAgICAuczJfd2JkX2RhdF9pICAgICAgICh3YmRfZ2xibF9kYXRfaSAgICAgICAgICAgICAgICksCisgICAgICAgICAgLnMyX3diZF9hY2tfaSAgICAgICAod2JkX2dsYmxfYWNrX2kgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5zMl93YmRfZGF0X28gICAgICAgKHdiZF9nbGJsX2RhdF9vICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuczJfd2JkX2Fkcl9vICAgICAgICh3YmRfZ2xibF9hZHJfbyAgICAgICAgICAgICAgICksCisgICAgICAgICAgLnMyX3diZF9zZWxfbyAgICAgICAod2JkX2dsYmxfc2VsX28gICAgICAgICAgICAgICApLAorICAgICAgICAgIC5zMl93YmRfd2VfbyAgICAgICAgKHdiZF9nbGJsX3dlX28gICAgICAgICAgICAgICAgKSwgIAorICAgICAgICAgIC5zMl93YmRfY3ljX28gICAgICAgKHdiZF9nbGJsX2N5Y19vICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuczJfd2JkX3N0Yl9vICAgICAgICh3YmRfZ2xibF9zdGJfbyAgICAgICAgICAgICAgICksCisKKyAgICAgICAgIC8vIFNsYXZlIDMgSW50ZXJmYWNlCisgICAgICAgICAvLyAuczNfd2JkX2Vycl9pICAoMSdiMCAgICAgICAgICApLCAtIE1vdmVkIGluc2lkZSBJUAorICAgICAgICAgIC5zM193YmRfZGF0X2kgICAgICAgKHdiZF9tYmlzdF9kYXRfaSAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuczNfd2JkX2Fja19pICAgICAgICh3YmRfbWJpc3RfYWNrX2kgICAgICAgICAgICAgICksCisgICAgICAgICAgLnMzX3diZF9sYWNrX2kgICAgICAod2JkX21iaXN0X2xhY2tfaSAgICAgICAgICAgICApLAorICAgICAgICAgIC5zM193YmRfZGF0X28gICAgICAgKHdiZF9tYmlzdF9kYXRfbyAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuczNfd2JkX2Fkcl9vICAgICAgICh3YmRfbWJpc3RfYWRyX28gICAgICAgICAgICAgICksCisgICAgICAgICAgLnMzX3diZF9zZWxfbyAgICAgICAod2JkX21iaXN0X3NlbF9vICAgICAgICAgICAgICApLAorICAgICAgICAgIC5zM193YmRfYnJ5X28gICAgICAgKHdiZF9tYmlzdF9icnlfbyAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuczNfd2JkX2JsX28gICAgICAgICh3YmRfbWJpc3RfYmxfbyAgICAgICAgICAgICAgICksCisgICAgICAgICAgLnMzX3diZF93ZV9vICAgICAgICAod2JkX21iaXN0X3dlX28gICAgICAgICAgICAgICApLCAgCisgICAgICAgICAgLnMzX3diZF9jeWNfbyAgICAgICAod2JkX21iaXN0X2N5Y19vICAgICAgICAgICAgICApLAorICAgICAgICAgIC5zM193YmRfc3RiX28gICAgICAgKHdiZF9tYmlzdF9zdGJfbyAgICAgICAgICAgICAgKQorCisJKTsKKworCit1YXJ0X2kyY191c2Jfc3BpX3RvcCAgIHVfdWFydF9pMmNfdXNiX3NwaSAoCitgaWZkZWYgVVNFX1BPV0VSX1BJTlMKKyAgICAgICAgIC52Y2NkMSAgICAgICAgICAgICAgICAgKHZjY2QxICAgICAgICAgICAgICAgICAgICApLC8vIFVzZXIgYXJlYSAxIDEuOFYgc3VwcGx5CisgICAgICAgICAudnNzZDEgICAgICAgICAgICAgICAgICh2c3NkMSAgICAgICAgICAgICAgICAgICAgKSwvLyBVc2VyIGFyZWEgMSBkaWdpdGFsIGdyb3VuZAorYGVuZGlmCisJLndiZF9jbGtfaW50ICAgICAgICAgICAgKHdiZF9jbGtfdWFydF9ycCAgICAgICAgICApLCAKKwkuY2ZnX2Nza2FfdWFydCAgICAgICAgICAoY2ZnX2Nza2FfdWFydF9ycCAgICAgICAgICksIAorCS53YmRfY2xrX3VhcnQgICAgICAgICAgICh3YmRfY2xrX3VhcnRfc2tldyAgICAgICAgKSwKKworICAgICAgICAudWFydF9yc3RuICAgICAgICAgICAgICAodWFydF9yc3RfbiAgICAgICAgICAgICAgICksIC8vIHVhcnQgcmVzZXQKKyAgICAgICAgLmkyY19yc3RuICAgICAgICAgICAgICAgKGkyY19yc3RfbiAgICAgICAgICAgICAgICApLCAvLyBpMmMgcmVzZXQKKyAgICAgICAgLnVzYl9yc3RuICAgICAgICAgICAgICAgKHVzYl9yc3RfbiAgICAgICAgICAgICAgICApLCAvLyBVU0IgcmVzZXQKKyAgICAgICAgLnNwaV9yc3RuICAgICAgICAgICAgICAgKHNzcGltX3JzdF9uICAgICAgICAgICAgICApLCAvLyBTUEkgcmVzZXQKKyAgICAgICAgLmFwcF9jbGsgICAgICAgICAgICAgICAgKHdiZF9jbGtfdWFydF9za2V3ICAgICAgICApLAorCS51c2JfY2xrICAgICAgICAgICAgICAgICh1c2JfY2xrICAgICAgICAgICAgICAgICAgKSwKKworICAgICAgICAvLyBSZWcgQnVzIEludGVyZmFjZSBTaWduYWwKKyAgICAgICAucmVnX2NzICAgICAgICAgICAgICAgICAgKHdiZF91YXJ0X3N0Yl9vICAgICAgICAgICApLAorICAgICAgIC5yZWdfd3IgICAgICAgICAgICAgICAgICAod2JkX3VhcnRfd2VfbyAgICAgICAgICAgICksCisgICAgICAgLnJlZ19hZGRyICAgICAgICAgICAgICAgICh3YmRfdWFydF9hZHJfb1s3OjBdICAgICAgKSwKKyAgICAgICAucmVnX3dkYXRhICAgICAgICAgICAgICAgKHdiZF91YXJ0X2RhdF9vICAgICAgICAgICApLAorICAgICAgIC5yZWdfYmUgICAgICAgICAgICAgICAgICAod2JkX3VhcnRfc2VsX28gICAgICAgICAgICksCisKKyAgICAgICAvLyBPdXRwdXRzCisgICAgICAgLnJlZ19yZGF0YSAgICAgICAgICAgICAgICh3YmRfdWFydF9kYXRfaSAgICAgICAgICAgKSwKKyAgICAgICAucmVnX2FjayAgICAgICAgICAgICAgICAgKHdiZF91YXJ0X2Fja19pICAgICAgICAgICApLAorCisgICAgICAgLy8gUGFkIGludGVyZmFjZQorICAgICAgIC5zY2xfcGFkX2kgICAgICAgICAgICAgICAoaTJjbV9jbGtfaSAgICAgICAgICAgICAgICksCisgICAgICAgLnNjbF9wYWRfbyAgICAgICAgICAgICAgIChpMmNtX2Nsa19vICAgICAgICAgICAgICAgKSwKKyAgICAgICAuc2NsX3BhZF9vZW5fbyAgICAgICAgICAgKGkyY21fY2xrX29lbiAgICAgICAgICAgICApLAorCisgICAgICAgLnNkYV9wYWRfaSAgICAgICAgICAgICAgIChpMmNtX2RhdGFfaSAgICAgICAgICAgICAgKSwKKyAgICAgICAuc2RhX3BhZF9vICAgICAgICAgICAgICAgKGkyY21fZGF0YV9vICAgICAgICAgICAgICApLAorICAgICAgIC5zZGFfcGFkb2VuX28gICAgICAgICAgICAoaTJjbV9kYXRhX29lbiAgICAgICAgICAgICksCisgICAgIAorICAgICAgIC5pMmNtX2ludHJfbyAgICAgICAgICAgICAoaTJjbV9pbnRyX28gICAgICAgICAgICAgICksCisKKyAgICAgICAudWFydF9yeGQgICAgICAgICAgICAgICAgKHVhcnRfcnhkICAgICAgICAgICAgICAgICApLAorICAgICAgIC51YXJ0X3R4ZCAgICAgICAgICAgICAgICAodWFydF90eGQgICAgICAgICAgICAgICAgICksCisKKyAgICAgICAudXNiX2luX2RwICAgICAgICAgICAgICAgKHVzYl9kcF9pICAgICAgICAgICAgICAgICApLAorICAgICAgIC51c2JfaW5fZG4gICAgICAgICAgICAgICAodXNiX2RuX2kgICAgICAgICAgICAgICAgICksCisKKyAgICAgICAudXNiX291dF9kcCAgICAgICAgICAgICAgKHVzYl9kcF9vICAgICAgICAgICAgICAgICApLAorICAgICAgIC51c2Jfb3V0X2RuICAgICAgICAgICAgICAodXNiX2RuX28gICAgICAgICAgICAgICAgICksCisgICAgICAgLnVzYl9vdXRfdHhfb2VuICAgICAgICAgICh1c2Jfb2VuICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAKKyAgICAgICAudXNiX2ludHJfbyAgICAgICAgICAgICAgKHVzYl9pbnRyX28gICAgICAgICAgICAgICApLAorCisgICAgICAvLyBTUElNIE1hc3RlcgorICAgICAgIC5zc3BpbV9zY2sgICAgICAgICAgICAgICAoc3NwaW1fc2NrICAgICAgICAgICAgICAgICksIAorICAgICAgIC5zc3BpbV9zbyAgICAgICAgICAgICAgICAoc3NwaW1fc28gICAgICAgICAgICAgICAgICksICAKKyAgICAgICAuc3NwaW1fc2kgICAgICAgICAgICAgICAgKHNzcGltX3NpICAgICAgICAgICAgICAgICApLCAgCisgICAgICAgLnNzcGltX3NzbiAgICAgICAgICAgICAgIChzc3BpbV9zc24gICAgICAgICAgICAgICAgKSAgCisKKyAgICAgKTsKKworCitwaW5tdXggdV9waW5tdXgoCitgaWZkZWYgVVNFX1BPV0VSX1BJTlMKKyAgICAgICAgIC52Y2NkMSAgICAgICAgICh2Y2NkMSAgICAgICAgICAgICAgICAgKSwvLyBVc2VyIGFyZWEgMSAxLjhWIHN1cHBseQorICAgICAgICAgLnZzc2QxICAgICAgICAgKHZzc2QxICAgICAgICAgICAgICAgICApLC8vIFVzZXIgYXJlYSAxIGRpZ2l0YWwgZ3JvdW5kCitgZW5kaWYKKyAgICAgICAgLy9jbGsgc2tldyBhZGp1c3QKKyAgICAgICAgLmNmZ19jc2thX3Bpbm11eCAgICAgICAgKGNmZ19jc2thX3Bpbm11eF9ycCAgICAgICAgKSwKKyAgICAgICAgLndiZF9jbGtfaW50ICAgICAgICAgICAgKHdiZF9jbGtfcGlubXV4X3JwICAgICAgICAgKSwKKyAgICAgICAgLndiZF9jbGtfcGlubXV4ICAgICAgICAgKHdiZF9jbGtfcGlubXV4X3NrZXcgICAgICAgKSwKKworICAgICAgICAvLyBTeXN0ZW0gU2lnbmFscworICAgICAgICAvLyBJbnB1dHMKKwkubWNsayAgICAgICAgICAgICAgICAgICAod2JkX2Nsa19waW5tdXhfc2tldyAgICAgICApLAorICAgICAgICAuaF9yZXNldF9uICAgICAgICAgICAgICAod2JkX2ludF9yc3RfbiAgICAgICAgICAgICApLAorCisgICAgICAgIC8vIFJlZyBCdXMgSW50ZXJmYWNlIFNpZ25hbAorICAgICAgICAucmVnX2NzICAgICAgICAgICAgICAgICAod2JkX2dsYmxfc3RiX28gICAgICAgICAgICApLAorICAgICAgICAucmVnX3dyICAgICAgICAgICAgICAgICAod2JkX2dsYmxfd2VfbyAgICAgICAgICAgICApLAorICAgICAgICAucmVnX2FkZHIgICAgICAgICAgICAgICAod2JkX2dsYmxfYWRyX28gICAgICAgICAgICApLAorICAgICAgICAucmVnX3dkYXRhICAgICAgICAgICAgICAod2JkX2dsYmxfZGF0X28gICAgICAgICAgICApLAorICAgICAgICAucmVnX2JlICAgICAgICAgICAgICAgICAod2JkX2dsYmxfc2VsX28gICAgICAgICAgICApLAorCisgICAgICAgLy8gT3V0cHV0cworICAgICAgICAucmVnX3JkYXRhICAgICAgICAgICAgICAod2JkX2dsYmxfZGF0X2kgICAgICAgICAgICApLAorICAgICAgICAucmVnX2FjayAgICAgICAgICAgICAgICAod2JkX2dsYmxfYWNrX2kgICAgICAgICAgICApLAorCisKKyAgICAgICAvLyBSaXNjIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgLmZ1c2VfbWhhcnRpZCAgICAgICAgICAgKGZ1c2VfbWhhcnRpZCAgICAgICAgICAgICAgKSwKKyAgICAgICAgLmlycV9saW5lcyAgICAgICAgICAgICAgKGlycV9saW5lcyAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgLnNvZnRfaXJxICAgICAgICAgICAgICAgKHNvZnRfaXJxICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgLnVzZXJfaXJxICAgICAgICAgICAgICAgKHVzZXJfaXJxICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgLnVzYl9pbnRyICAgICAgICAgICAgICAgKHVzYl9pbnRyX28gICAgICAgICAgICAgICAgKSwKKyAgICAgICAgLmkyY21faW50ciAgICAgICAgICAgICAgKGkyY21faW50cl9vICAgICAgICAgICAgICAgKSwKKworICAgICAgIC8vIERpZ2l0YWwgSU8KKyAgICAgICAgLmRpZ2l0YWxfaW9fb3V0ICAgICAgICAgKGlvX291dCAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgLmRpZ2l0YWxfaW9fb2VuICAgICAgICAgKGlvX29lYiAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgLmRpZ2l0YWxfaW9faW4gICAgICAgICAgKGlvX2luICAgICAgICAgICAgICAgICAgICAgKSwKKworICAgICAgIC8vIFNGTEFTSCBJL0YKKyAgICAgICAgLnNmbGFzaF9zY2sgICAgICAgICAgICAgKHNmbGFzaF9zY2sgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgLnNmbGFzaF9zcyAgICAgICAgICAgICAgKHNwaV9jc24gICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgLnNmbGFzaF9vZW4gICAgICAgICAgICAgKHNmbGFzaF9vZW4gICAgICAgICAgICAgICAgKSwKKyAgICAgICAgLnNmbGFzaF9kbyAgICAgICAgICAgICAgKHNmbGFzaF9kbyAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgLnNmbGFzaF9kaSAgICAgICAgICAgICAgKHNmbGFzaF9kaSAgICAgICAgICAgICAgICAgKSwKKworCisgICAgICAgLy8gVVNCIEkvRgorICAgICAgICAudXNiX2RwX28gICAgICAgICAgICAgICAodXNiX2RwX28gICAgICAgICAgICAgICAgICApLAorICAgICAgICAudXNiX2RuX28gICAgICAgICAgICAgICAodXNiX2RuX28gICAgICAgICAgICAgICAgICApLAorICAgICAgICAudXNiX29lbiAgICAgICAgICAgICAgICAodXNiX29lbiAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAudXNiX2RwX2kgICAgICAgICAgICAgICAodXNiX2RwX2kgICAgICAgICAgICAgICAgICApLAorICAgICAgICAudXNiX2RuX2kgICAgICAgICAgICAgICAodXNiX2RuX2kgICAgICAgICAgICAgICAgICApLAorCisgICAgICAgLy8gVUFSVCBJL0YKKyAgICAgICAgLnVhcnRfdHhkICAgICAgICAgICAgICAgKHVhcnRfdHhkICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgLnVhcnRfcnhkICAgICAgICAgICAgICAgKHVhcnRfcnhkICAgICAgICAgICAgICAgICAgKSwKKworICAgICAgIC8vIEkyQ00gSS9GCisgICAgICAgIC5pMmNtX2Nsa19vICAgICAgICAgICAgIChpMmNtX2Nsa19vICAgICAgICAgICAgICAgICksCisgICAgICAgIC5pMmNtX2Nsa19pICAgICAgICAgICAgIChpMmNtX2Nsa19pICAgICAgICAgICAgICAgICksCisgICAgICAgIC5pMmNtX2Nsa19vZW4gICAgICAgICAgIChpMmNtX2Nsa19vZW4gICAgICAgICAgICAgICksCisgICAgICAgIC5pMmNtX2RhdGFfb2VuICAgICAgICAgIChpMmNtX2RhdGFfb2VuICAgICAgICAgICAgICksCisgICAgICAgIC5pMmNtX2RhdGFfbyAgICAgICAgICAgIChpMmNtX2RhdGFfbyAgICAgICAgICAgICAgICksCisgICAgICAgIC5pMmNtX2RhdGFfaSAgICAgICAgICAgIChpMmNtX2RhdGFfaSAgICAgICAgICAgICAgICksCisKKyAgICAgICAvLyBTUEkgTUFTVEVSCisgICAgICAgIC5zcGltX3NjayAgICAgICAgICAgICAgIChzc3BpbV9zY2sgICAgICAgICAgICAgICAgICksCisgICAgICAgIC5zcGltX3NzICAgICAgICAgICAgICAgIChzc3BpbV9zc24gICAgICAgICAgICAgICAgICksCisgICAgICAgIC5zcGltX21pc28gICAgICAgICAgICAgIChzc3BpbV9zbyAgICAgICAgICAgICAgICAgICksCisgICAgICAgIC5zcGltX21vc2kgICAgICAgICAgICAgIChzc3BpbV9zaSAgICAgICAgICAgICAgICAgICksCisKKyAgICAgIC8vIFVBUlQgTUFTVEVSIEkvRgorICAgICAgICAudWFydG1fcnhkICAgICAgICAgICAgICAodWFydG1fcnhkICAgICAgICAgICAgICAgICApLAorICAgICAgICAudWFydG1fdHhkICAgICAgICAgICAgICAodWFydG1fdHhkICAgICAgICAgICAgICAgICApLAorCisKKwkucHVsc2UxbV9tY2xrICAgICAgICAgICAocHVsc2UxbV9tY2xrICAgICAgICAgICAgICApLAorCisJLnBpbm11eF9kZWJ1ZyAgICAgICAgICAgKHBpbm11eF9kZWJ1ZyAgICAgICAgICAgICAgKSwKKworICAgICAgIC8vIEJJU1QgSS9GCisgICAgICAgIC5iaXN0X2VuICAgICAgICAgICAgICAgIChiaXN0X2VuICAgICAgICAgICAgICAgICAgICksCisgICAgICAgIC5iaXN0X3J1biAgICAgICAgICAgICAgIChiaXN0X3J1biAgICAgICAgICAgICAgICAgICksCisgICAgICAgIC5iaXN0X2xvYWQgICAgICAgICAgICAgIChiaXN0X2xvYWQgICAgICAgICAgICAgICAgICksCisgICAgICAgIAorICAgICAgICAuYmlzdF9zZGkgICAgICAgICAgICAgICAoYmlzdF9zZGkgICAgICAgICAgICAgICAgICApLAorICAgICAgICAuYmlzdF9zaGlmdCAgICAgICAgICAgICAoYmlzdF9zaGlmdCAgICAgICAgICAgICAgICApLAorICAgICAgICAuYmlzdF9zZG8gICAgICAgICAgICAgICAoYmlzdF9zZG9fcnAgICAgICAgICAgICAgICApLAorICAgICAgICAKKyAgICAgICAgLmJpc3RfZG9uZSAgICAgICAgICAgICAgKGJpc3RfZG9uZV9ycCAgICAgICAgICAgICAgKSwKKyAgICAgICAgLmJpc3RfZXJyb3IgICAgICAgICAgICAgKGJpc3RfZXJyb3JfcnAgICAgICAgICAgICAgKSwKKyAgICAgICAgLmJpc3RfY29ycmVjdCAgICAgICAgICAgKGJpc3RfY29ycmVjdF9ycCAgICAgICAgICAgKSwKKyAgICAgICAgLmJpc3RfZXJyb3JfY250MCAgICAgICAgKGJpc3RfZXJyb3JfY250MF9ycCAgICAgICAgKSwKKyAgICAgICAgLmJpc3RfZXJyb3JfY250MSAgICAgICAgKGJpc3RfZXJyb3JfY250MV9ycCAgICAgICAgKSwKKyAgICAgICAgLmJpc3RfZXJyb3JfY250MiAgICAgICAgKGJpc3RfZXJyb3JfY250Ml9ycCAgICAgICAgKSwKKyAgICAgICAgLmJpc3RfZXJyb3JfY250MyAgICAgICAgKGJpc3RfZXJyb3JfY250M19ycCAgICAgICAgKQorCisKKyAgICk7IAorLy8tLS0tLS0tLS0tLS0tIE1CSVNUIC0gNTEyeDMyICAgICAgICAgICAgIC0tLS0KKworbWJpc3Rfd3JhcHBlciAgIygKKwlgaWZuZGVmIFNZTlRIRVNJUworCS5CSVNUX05PX1NSQU0gICAgICAgICAgICg0ICAgICAgICAgICAgICAgICAgICAgICksCisJLkJJU1RfQUREUl9XRCAgICAgICAgICAgKEJJU1QxX0FERFJfV0QtMiAgICAgICAgKSwKKwkuQklTVF9EQVRBX1dEICAgICAgICAgICAoQklTVF9EQVRBX1dEICAgICAgICAgICApLAorCS5CSVNUX0FERFJfU1RBUlQgICAgICAgICg5J2gwMDAgICAgICAgICAgICAgICAgICksCisJLkJJU1RfQUREUl9FTkQgICAgICAgICAgKDknaDFGQiAgICAgICAgICAgICAgICAgKSwKKwkuQklTVF9SRVBBSVJfQUREUl9TVEFSVCAoOSdoMUZDICAgICAgICAgICAgICAgICApLAorCS5CSVNUX1JBRF9XRF9JICAgICAgICAgIChCSVNUMV9BRERSX1dELTIgICAgICAgICksCisJLkJJU1RfUkFEX1dEX08gICAgICAgICAgKEJJU1QxX0FERFJfV0QtMiAgICAgICAgKQorICAgICAgICBgZW5kaWYKKyAgICAgKSAKKwkgICAgIHVfbWJpc3QgKAorCitgaWZkZWYgVVNFX1BPV0VSX1BJTlMKKyAgICAgICAgICAudmNjZDEgICAgICAgICAgICAgICh2Y2NkMSAgICAgICAgICAgICAgICAgICAgICAgICksLy8gVXNlciBhcmVhIDEgMS44ViBzdXBwbHkKKyAgICAgICAgICAudnNzZDEgICAgICAgICAgICAgICh2c3NkMSAgICAgICAgICAgICAgICAgICAgICAgICksLy8gVXNlciBhcmVhIDEgZGlnaXRhbCBncm91bmQKK2BlbmRpZgorCisgICAgIC8vIENsb2NrIFNrZXcgYWRqdXN0CisJICAgICAgICAgLndiZF9jbGtfaW50ICAgICAgICAod2JkX2Nsa19tYmlzdDFfcnAgICAgICAgICAgICApLCAKKwkgICAgICAgICAuY2ZnX2Nza2FfbWJpc3QgICAgIChjZmdfY3NrYV9tYmlzdDFfcnAgICAgICAgICAgICksIAorCSAgICAgICAgIC53YmRfY2xrX21iaXN0ICAgICAgKHdiZF9jbGtfbWJpc3Rfc2tldyAgICAgICAgICAgKSwKKworCS8vIFdCIEkvRgorICAgICAgICAgICAgICAgICAgLndiX2NsazJfaSAgICAgICAgICh3YmRfY2xrX21iaXN0X3NrZXcgICksICAKKyAgICAgICAgICAgICAgICAgIC53Yl9jbGtfaSAgICAgICAgICAod2JkX2Nsa19tYmlzdF9za2V3ICApLCAgCisgICAgICAgICAgICAgICAgICAud2Jfc3RiX2kgICAgICAgICAgKHdiZF9tYmlzdF9zdGJfbyksICAKKwkgICAgICAgICAgLndiX2NzX2kgICAgICAgICAgICh3YmRfbWJpc3RfYWRyX29bMTI6MTFdKSwKKyAgICAgICAgICAgICAgICAgIC53Yl9hZHJfaSAgICAgICAgICAod2JkX21iaXN0X2Fkcl9vW0JJU1QxX0FERFJfV0QtMToyXSksICAKKyAgICAgICAgICAgICAgICAgIC53Yl93ZV9pICAgICAgICAgICAod2JkX21iaXN0X3dlX28gKSwgIAorICAgICAgICAgICAgICAgICAgLndiX2RhdF9pICAgICAgICAgICh3YmRfbWJpc3RfZGF0X28pLCAgCisgICAgICAgICAgICAgICAgICAud2Jfc2VsX2kgICAgICAgICAgKHdiZF9tYmlzdF9zZWxfbyksICAKKyAgICAgICAgICAgICAgICAgIC53Yl9ibF9pICAgICAgICAgICAod2JkX21iaXN0X2JsX28pLCAgCisgICAgICAgICAgICAgICAgICAud2JfYnJ5X2kgICAgICAgICAgKHdiZF9tYmlzdF9icnlfbyksICAKKyAgICAgICAgICAgICAgICAgIC53Yl9kYXRfbyAgICAgICAgICAod2JkX21iaXN0X2RhdF9pKSwgIAorICAgICAgICAgICAgICAgICAgLndiX2Fja19vICAgICAgICAgICh3YmRfbWJpc3RfYWNrX2kpLCAgCisgICAgICAgICAgICAgICAgICAud2JfbGFja19vICAgICAgICAgKHdiZF9tYmlzdF9sYWNrX2kpLCAgCisgICAgICAgICAgICAgICAgICAud2JfZXJyX28gICAgICAgICAgKCAgICAgICAgICAgICAgICAgKSwgCisKKwkgICAgICAgICAucnN0X24gICAgICAgICAgICAgIChiaXN0X3JzdF9uICAgICAgICAgICAgICAgICAgICksCisKKwkKKwkgICAgICAgICAuYmlzdF9lbiAgICAgICAgICAgIChiaXN0X2VuX3JwICAgICAgICAgICAgICAgICAgICksCisJICAgICAgICAgLmJpc3RfcnVuICAgICAgICAgICAoYmlzdF9ydW5fcnAgICAgICAgICAgICAgICAgICApLAorCSAgICAgICAgIC5iaXN0X3NoaWZ0ICAgICAgICAgKGJpc3Rfc2hpZnRfcnAgICAgICAgICAgICAgICAgKSwKKwkgICAgICAgICAuYmlzdF9sb2FkICAgICAgICAgIChiaXN0X2xvYWRfcnAgICAgICAgICAgICAgICAgICksCisJICAgICAgICAgLmJpc3Rfc2RpICAgICAgICAgICAoYmlzdF9zZGlfcnAgICAgICAgICAgICAgICAgICApLAorCisJICAgICAgICAgLmJpc3RfZXJyb3JfY250MyAgICAoYmlzdF9lcnJvcl9jbnQzICAgICAgICAgICAgICApLAorCSAgICAgICAgIC5iaXN0X2Vycm9yX2NudDIgICAgKGJpc3RfZXJyb3JfY250MiAgICAgICAgICAgICAgKSwKKwkgICAgICAgICAuYmlzdF9lcnJvcl9jbnQxICAgIChiaXN0X2Vycm9yX2NudDEgICAgICAgICAgICAgICksCisJICAgICAgICAgLmJpc3RfZXJyb3JfY250MCAgICAoYmlzdF9lcnJvcl9jbnQwICAgICAgICAgICAgICApLAorCSAgICAgICAgIC5iaXN0X2NvcnJlY3QgICAgICAgKGJpc3RfY29ycmVjdCAgICAgICAgICAgICAgICAgKSwKKwkgICAgICAgICAuYmlzdF9lcnJvciAgICAgICAgIChiaXN0X2Vycm9yICAgICAgICAgICAgICAgICAgICksCisJICAgICAgICAgLmJpc3RfZG9uZSAgICAgICAgICAoYmlzdF9kb25lICAgICAgICAgICAgICAgICAgICApLAorCSAgICAgICAgIC5iaXN0X3NkbyAgICAgICAgICAgKGJpc3Rfc2RvICAgICAgICAgICAgICAgICAgICAgKSwKKworICAgIC8vIHRvd2FyZHMgbWVtb3J5CisgICAgLy8gUE9SVC1BCisgICAgICAgICAgLm1lbV9jbGtfYSAgICAgICAgICAobWVtX2Nsa19hICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5tZW1fYWRkcl9hMCAgICAgICAgKG1lbTBfYWRkcl9hICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAubWVtX2FkZHJfYTEgICAgICAgIChtZW0xX2FkZHJfYSAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLm1lbV9hZGRyX2EyICAgICAgICAobWVtMl9hZGRyX2EgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5tZW1fYWRkcl9hMyAgICAgICAgKG1lbTNfYWRkcl9hICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAubWVtX2Nlbl9hICAgICAgICAgIChtZW1fY2VuX2EgICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLm1lbV93ZWJfYSAgICAgICAgICAobWVtX3dlYl9hICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5tZW1fbWFza19hMCAgICAgICAgKG1lbTBfbWFza19hICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAubWVtX21hc2tfYTEgICAgICAgIChtZW0xX21hc2tfYSAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLm1lbV9tYXNrX2EyICAgICAgICAobWVtMl9tYXNrX2EgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5tZW1fbWFza19hMyAgICAgICAgKG1lbTNfbWFza19hICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAubWVtX2Rpbl9hMCAgICAgICAgIChtZW0wX2Rpbl9hICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLm1lbV9kaW5fYTEgICAgICAgICAobWVtMV9kaW5fYSAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5tZW1fZGluX2EyICAgICAgICAgKG1lbTJfZGluX2EgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAubWVtX2Rpbl9hMyAgICAgICAgIChtZW0zX2Rpbl9hICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLm1lbV9kb3V0X2EwICAgICAgICAobWVtMF9kb3V0X2EgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5tZW1fZG91dF9hMSAgICAgICAgKG1lbTFfZG91dF9hICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAubWVtX2RvdXRfYTIgICAgICAgIChtZW0yX2RvdXRfYSAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLm1lbV9kb3V0X2EzICAgICAgICAobWVtM19kb3V0X2EgICAgICAgICAgICAgICAgICApLAorICAgIC8vIFBPUlQtQgorICAgICAgICAgIC5tZW1fY2xrX2IgICAgICAgICAgKG1lbV9jbGtfYiAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAubWVtX2Nlbl9iICAgICAgICAgIChtZW1fY2VuX2IgICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLm1lbV9hZGRyX2IwICAgICAgICAobWVtMF9hZGRyX2IgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5tZW1fYWRkcl9iMSAgICAgICAgKG1lbTFfYWRkcl9iICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAubWVtX2FkZHJfYjIgICAgICAgIChtZW0yX2FkZHJfYiAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLm1lbV9hZGRyX2IzICAgICAgICAobWVtM19hZGRyX2IgICAgICAgICAgICAgICAgICApCisKKworKTsKKworc2t5MTMwX3NyYW1fMmtieXRlXzFydzFyXzMyeDUxMl84IHVfc3JhbTBfMmtiKAorYGlmZGVmIFVTRV9QT1dFUl9QSU5TCisgICAgICAgICAgLnZjY2QxICAgICAgICAgICAgICAodmNjZDEgICAgICAgICAgICAgICAgICAgICAgICApLC8vIFVzZXIgYXJlYSAxIDEuOFYgc3VwcGx5CisgICAgICAgICAgLnZzc2QxICAgICAgICAgICAgICAodnNzZDEgICAgICAgICAgICAgICAgICAgICAgICApLC8vIFVzZXIgYXJlYSAxIGRpZ2l0YWwgZ3JvdW5kCitgZW5kaWYKKy8vIFBvcnQgMDogUlcKKyAgICAgICAgICAuY2xrMCAgICAgICAgICAgICAgIChtZW1fY2xrX2FbMF0gICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLmNzYjAgICAgICAgICAgICAgICAobWVtX2Nlbl9hWzBdICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC53ZWIwICAgICAgICAgICAgICAgKG1lbV93ZWJfYVswXSAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAud21hc2swICAgICAgICAgICAgIChtZW0wX21hc2tfYSAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLmFkZHIwICAgICAgICAgICAgICAobWVtMF9hZGRyX2EgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5kaW4wICAgICAgICAgICAgICAgKG1lbTBfZGluX2EgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuZG91dDAgICAgICAgICAgICAgIChtZW0wX2RvdXRfYSAgICAgICAgICAgICAgICAgICksCisvLyBQb3J0IDE6IFIKKyAgICAgICAgICAuY2xrMSAgICAgICAgICAgICAgIChtZW1fY2xrX2JbMF0gICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLmNzYjEgICAgICAgICAgICAgICAobWVtX2Nlbl9iWzBdICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5hZGRyMSAgICAgICAgICAgICAgKG1lbTBfYWRkcl9iICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuZG91dDEgICAgICAgICAgICAgICggICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgKTsKKworc2t5MTMwX3NyYW1fMmtieXRlXzFydzFyXzMyeDUxMl84IHVfc3JhbTFfMmtiKAorYGlmZGVmIFVTRV9QT1dFUl9QSU5TCisgICAgICAgICAgLnZjY2QxICAgICAgICAgICAgICAodmNjZDEgICAgICAgICAgICAgICAgICAgICAgICApLC8vIFVzZXIgYXJlYSAxIDEuOFYgc3VwcGx5CisgICAgICAgICAgLnZzc2QxICAgICAgICAgICAgICAodnNzZDEgICAgICAgICAgICAgICAgICAgICAgICApLC8vIFVzZXIgYXJlYSAxIGRpZ2l0YWwgZ3JvdW5kCitgZW5kaWYKKy8vIFBvcnQgMDogUlcKKyAgICAgICAgICAuY2xrMCAgICAgICAgICAgICAgIChtZW1fY2xrX2FbMV0gICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLmNzYjAgICAgICAgICAgICAgICAobWVtX2Nlbl9hWzFdICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC53ZWIwICAgICAgICAgICAgICAgKG1lbV93ZWJfYVsxXSAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAud21hc2swICAgICAgICAgICAgIChtZW0xX21hc2tfYSAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLmFkZHIwICAgICAgICAgICAgICAobWVtMV9hZGRyX2EgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5kaW4wICAgICAgICAgICAgICAgKG1lbTFfZGluX2EgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuZG91dDAgICAgICAgICAgICAgIChtZW0xX2RvdXRfYSAgICAgICAgICAgICAgICAgICksCisvLyBQb3J0IDE6IFIKKyAgICAgICAgICAuY2xrMSAgICAgICAgICAgICAgIChtZW1fY2xrX2JbMV0gICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLmNzYjEgICAgICAgICAgICAgICAobWVtX2Nlbl9iWzFdICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5hZGRyMSAgICAgICAgICAgICAgKG1lbTFfYWRkcl9iICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuZG91dDEgICAgICAgICAgICAgICggICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgKTsKKworc2t5MTMwX3NyYW1fMmtieXRlXzFydzFyXzMyeDUxMl84IHVfc3JhbTJfMmtiKAorYGlmZGVmIFVTRV9QT1dFUl9QSU5TCisgICAgICAgICAgLnZjY2QxICAgICAgICAgICAgICAodmNjZDEgICAgICAgICAgICAgICAgICAgICAgICApLC8vIFVzZXIgYXJlYSAxIDEuOFYgc3VwcGx5CisgICAgICAgICAgLnZzc2QxICAgICAgICAgICAgICAodnNzZDEgICAgICAgICAgICAgICAgICAgICAgICApLC8vIFVzZXIgYXJlYSAxIGRpZ2l0YWwgZ3JvdW5kCitgZW5kaWYKKy8vIFBvcnQgMDogUlcKKyAgICAgICAgICAuY2xrMCAgICAgICAgICAgICAgIChtZW1fY2xrX2FbMl0gICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLmNzYjAgICAgICAgICAgICAgICAobWVtX2Nlbl9hWzJdICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC53ZWIwICAgICAgICAgICAgICAgKG1lbV93ZWJfYVsyXSAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAud21hc2swICAgICAgICAgICAgIChtZW0yX21hc2tfYSAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLmFkZHIwICAgICAgICAgICAgICAobWVtMl9hZGRyX2EgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5kaW4wICAgICAgICAgICAgICAgKG1lbTJfZGluX2EgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuZG91dDAgICAgICAgICAgICAgIChtZW0yX2RvdXRfYSAgICAgICAgICAgICAgICAgICksCisvLyBQb3J0IDE6IFIKKyAgICAgICAgICAuY2xrMSAgICAgICAgICAgICAgIChtZW1fY2xrX2JbMl0gICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLmNzYjEgICAgICAgICAgICAgICAobWVtX2Nlbl9iWzJdICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5hZGRyMSAgICAgICAgICAgICAgKG1lbTJfYWRkcl9iICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuZG91dDEgICAgICAgICAgICAgICggICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgKTsKKworCitza3kxMzBfc3JhbV8ya2J5dGVfMXJ3MXJfMzJ4NTEyXzggdV9zcmFtM18ya2IoCitgaWZkZWYgVVNFX1BPV0VSX1BJTlMKKyAgICAgICAgICAudmNjZDEgICAgICAgICAgICAgICh2Y2NkMSAgICAgICAgICAgICAgICAgICAgICAgICksLy8gVXNlciBhcmVhIDEgMS44ViBzdXBwbHkKKyAgICAgICAgICAudnNzZDEgICAgICAgICAgICAgICh2c3NkMSAgICAgICAgICAgICAgICAgICAgICAgICksLy8gVXNlciBhcmVhIDEgZGlnaXRhbCBncm91bmQKK2BlbmRpZgorLy8gUG9ydCAwOiBSVworICAgICAgICAgIC5jbGswICAgICAgICAgICAgICAgKG1lbV9jbGtfYVszXSAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuY3NiMCAgICAgICAgICAgICAgIChtZW1fY2VuX2FbM10gICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLndlYjAgICAgICAgICAgICAgICAobWVtX3dlYl9hWzNdICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC53bWFzazAgICAgICAgICAgICAgKG1lbTNfbWFza19hICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuYWRkcjAgICAgICAgICAgICAgIChtZW0zX2FkZHJfYSAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLmRpbjAgICAgICAgICAgICAgICAobWVtM19kaW5fYSAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5kb3V0MCAgICAgICAgICAgICAgKG1lbTNfZG91dF9hICAgICAgICAgICAgICAgICAgKSwKKy8vIFBvcnQgMTogUgorICAgICAgICAgIC5jbGsxICAgICAgICAgICAgICAgKG1lbV9jbGtfYlszXSAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAuY3NiMSAgICAgICAgICAgICAgIChtZW1fY2VuX2JbM10gICAgICAgICAgICAgICAgICksCisgICAgICAgICAgLmFkZHIxICAgICAgICAgICAgICAobWVtM19hZGRyX2IgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgIC5kb3V0MSAgICAgICAgICAgICAgKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICApOworCisKKy8qKioKK3Nhcl9hZGMgIHVfYWRjICgKK2BpZmRlZiBVU0VfUE9XRVJfUElOUworICAgICAgICAudmNjZDEgKHZjY2QxKSwvLyBVc2VyIGFyZWEgMSAxLjhWIHN1cHBseQorICAgICAgICAudnNzZDEgKHZzc2QxKSwvLyBVc2VyIGFyZWEgMSBkaWdpdGFsIGdyb3VuZAorICAgICAgICAudmNjZDIgKHZjY2QxKSwgLy8gKHZjY2QyKSwvLyBVc2VyIGFyZWEgMiAxLjhWIHN1cHBseSAoYW5hbG9nKSAtIERPVE86IE5lZWQgRml4CisgICAgICAgIC52c3NkMiAodnNzZDEpLCAvLyAodnNzZDIpLC8vIFVzZXIgYXJlYSAyIGdyb3VuZCAgICAgIChhbmFsb2cpIC0gRE9UTzogTmVlZCBGaXgKK2BlbmRpZgorCisgICAgCisgICAgICAgIC5jbGsgICAgICAgICAgICh3YmRfY2xrX2FkY19ycCApLC8vIFRoZSBjbG9jayAoZGlnaXRhbCkKKyAgICAgICAgLnJlc2V0X24gICAgICAgKHdiZF9pbnRfcnN0X24gICApLC8vIEFjdGl2ZSBsb3cgcmVzZXQgKGRpZ2l0YWwpCisKKyAgICAvLyBSZWcgQnVzIEludGVyZmFjZSBTaWduYWwKKyAgICAgICAgLnJlZ19jcyAgICAgICAgKHdiZF9hZGNfc3RiX28gICApLAorICAgICAgICAucmVnX3dyICAgICAgICAod2JkX2FkY193ZV9vICAgICksCisgICAgICAgIC5yZWdfYWRkciAgICAgICh3YmRfYWRjX2Fkcl9vWzc6MF0gKSwKKyAgICAgICAgLnJlZ193ZGF0YSAgICAgKHdiZF9hZGNfZGF0X28gICApLAorICAgICAgICAucmVnX2JlICAgICAgICAod2JkX2FkY19zZWxfbyAgICksCisKKyAgICAvLyBPdXRwdXRzCisgICAgICAgIC5yZWdfcmRhdGEgICAgICh3YmRfYWRjX2RhdF9pICAgKSwKKyAgICAgICAgLnJlZ19hY2sgICAgICAgKHdiZF9hZGNfYWNrX2kgICApLAorCisgICAgICAgIC5wdWxzZTFtX21jbGsgIChwdWxzZTFtX21jbGspLAorCisKKwkvLyBEQUMgSS9GCisgICAgICAgIC5zYXIyZGFjICAgICAgICAgKHNhcjJkYWMgICAgICAgKSwgCisgICAgICAgIC8vLmFuYWxvZ19kYWNfb3V0ICAoYW5hbG9nX2RhY19vdXQpICwgIC8vIFRPRE86IE5lZWQgdG8gY29ubmVjdCB0byBEQUMgTy9QCisgICAgICAgIC5hbmFsb2dfZGFjX291dCAgKGFuYWxvZ19pb1s2XSkgLCAKKworICAgICAgICAvLyBBREMgSW5wdXQgCisgICAgICAgIC5hbmFsb2dfZGluKGFuYWxvZ19pb1s1OjBdKSAgICAvLyAoQW5hbG9nKQorCispOworKioqLworCisvKioqKgorKiBUT0RPOiBOZWVkIHRvIHVuY29tbWVudCB0aGUgREFDCitEQUNfOEJJVCB1X2RhYyAoCisgICAgIGBpZmRlZiBVU0VfUE9XRVJfUElOUworICAgICAgICAudmRkKHZjY2QyKSwKKyAgICAgICAgLmduZCh2c3NkMiksCisgICAgYGVuZGlmIAorICAgICAgICAuZDAoc2FyMmRhY1swXSksCisgICAgICAgIC5kMShzYXIyZGFjWzFdKSwKKyAgICAgICAgLmQyKHNhcjJkYWNbMl0pLAorICAgICAgICAuZDMoc2FyMmRhY1szXSksCisgICAgICAgIC5kNChzYXIyZGFjWzRdKSwKKyAgICAgICAgLmQ1KHNhcjJkYWNbNV0pLAorICAgICAgICAuZDYoc2FyMmRhY1s2XSksCisgICAgICAgIC5kNyhzYXIyZGFjWzddKSwKKyAgICAgICAgLmlucDEoYW5hbG9nX2lvWzZdKSwKKyAgICAgICAgLm91dF92KGFuYWxvZ19kYWNfb3V0KQorICAgICk7CisKKyoqLworCitlbmRtb2R1bGUgOiB1c2VyX3Byb2plY3Rfd3JhcHBlcgpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvd2JfaG9zdC9zcmMvd2JfaG9zdC5zdiBiL3Zlcmlsb2cvcnRsL3diX2hvc3Qvc3JjL3diX2hvc3Quc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNmMDAwNQotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL3diX2hvc3Qvc3JjL3diX2hvc3Quc3YKQEAgLTAsMCArMSw1NzQgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSAsIERpbmVzaCBBbm5heXlhICAgICAgICAgICAgICAgICAgICAgICAgICAKKy8vIAorLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBDcmVhdGVkIGJ5IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgV2lzaGJvbmUgaG9zdCBJbnRlcmZhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFlJRml2ZSBjb3JlcyBwcm9qZWN0ICAgICAgICAgICAgICAgLy8vLworLy8vLyAgaHR0cHM6Ly9naXRodWIuY29tL2RpbmVzaGFubmF5eWEveWlmaXZlX3IwLmdpdCAgICAgICAgICAgICAgLy8vLworLy8vLyAgaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2NvcmVzL3lpZml2ZS8gICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgIFRoaXMgYmxvY2sgZG9lcyBhc3luYyBXaXNoYm9uZSBmcm9tIG9uZSBjbG9jayB0byBvdGhlciAgLy8vLworLy8vLyAgICAgIGNsb2NrIGRvbWFpbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVG8gRG86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICBub3RoaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgQXV0aG9yKHMpOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgIC0gRGluZXNoIEFubmF5eWEsIGRpbmVzaGFAb3BlbmNvcmVzLm9yZyAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgUmV2aXNpb24gOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAwLjEgLSAyNXRoIEZlYiAyMDIxLCBEaW5lc2ggQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICBpbml0aWFsIHZlcnNpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAwLjIgLSBOb3YgMTQgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICBSZXNldCBjb25uZWN0aXZpdHkgYnVnIGZpeCBjbGtfY3RsIGluIHVfc2RyYW1jbGsgICAgLy8vLworLy8vLyAgICAgICAgICB1X2NwdWNsayx1X3J0Y2Nsayx1X3VzYmNsayAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAwLjMgLSBOb3YgMTYgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICBXaXNoYm9uZSBvdXQgYXJlIHJlZ2lzdGVyIGZvciBiZXR0ZXIgdGltaW5nICAgICAgICAgLy8vLyAgIAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBDb3B5cmlnaHQgKEMpIDIwMDAgQXV0aG9ycyBhbmQgT1BFTkNPUkVTLk9SRyAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBmaWxlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCB3aXRob3V0ICAgICAgICAgLy8vLworLy8vLyByZXN0cmljdGlvbiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgICAgLy8vLworLy8vLyByZW1vdmVkIGZyb20gdGhlIGZpbGUgYW5kIHRoYXQgYW55IGRlcml2YXRpdmUgd29yayBjb250YWlucyAgLy8vLworLy8vLyB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGFzc29jaWF0ZWQgZGlzY2xhaW1lci4gLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0ICAgLy8vLworLy8vLyBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgLy8vLworLy8vLyBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgLy8vLworLy8vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55ICAgLy8vLworLy8vLyBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgICAgICAgLy8vLworLy8vLyB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkICAgLy8vLworLy8vLyB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSICAgICAgLy8vLworLy8vLyBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgLy8vLworLy8vLyBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAgLy8vLworLy8vLyBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgc291cmNlOyBpZiBub3QsIGRvd25sb2FkIGl0ICAgLy8vLworLy8vLyBmcm9tIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9sZ3BsLnNodG1sICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCittb2R1bGUgd2JfaG9zdCAoCisKK2BpZmRlZiBVU0VfUE9XRVJfUElOUworICAgIGlub3V0IHZjY2QxLAkvLyBVc2VyIGFyZWEgMSAxLjhWIHN1cHBseQorICAgIGlub3V0IHZzc2QxLAkvLyBVc2VyIGFyZWEgMSBkaWdpdGFsIGdyb3VuZAorYGVuZGlmCisgICAgICAgaW5wdXQgbG9naWMgICAgICAgICAgICAgICAgIHVzZXJfY2xvY2sxICAgICAgLAorICAgICAgIGlucHV0IGxvZ2ljICAgICAgICAgICAgICAgICB1c2VyX2Nsb2NrMiAgICAgICwKKworICAgICAgIG91dHB1dCBsb2dpYyAgICAgICAgICAgICAgICBjcHVfY2xrICAgICAgICAgICwKKyAgICAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgcnRjX2NsayAgICAgICAgICAsCisgICAgICAgb3V0cHV0IGxvZ2ljICAgICAgICAgICAgICAgIHVzYl9jbGsgICAgICAgICAgLAorICAgICAgIC8vIEdsb2JhbCBSZXNldCBjb250cm9sCisgICAgICAgb3V0cHV0IGxvZ2ljICAgICAgICAgICAgICAgIHdiZF9pbnRfcnN0X24gICAgLAorICAgICAgIG91dHB1dCBsb2dpYyAgICAgICAgICAgICAgICBjcHVfcnN0X24gICAgICAgICwKKyAgICAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgcXNwaW1fcnN0X24gICAgICAgICwKKyAgICAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgc3NwaW1fcnN0X24gICAgICAsCisgICAgICAgb3V0cHV0IGxvZ2ljICAgICAgICAgICAgICAgIHVhcnRfcnN0X24gICAgICAgLAorICAgICAgIG91dHB1dCBsb2dpYyAgICAgICAgICAgICAgICBpMmNtX3JzdF9uICAgICAgICwKKyAgICAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgdXNiX3JzdF9uICAgICAgICAsCisgICAgICAgb3V0cHV0IGxvZ2ljICAgICAgICAgICAgICAgIGJpc3RfcnN0X24gICAgICAgICwKKworICAgIC8vIE1hc3RlciBQb3J0CisgICAgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgIHdibV9yc3RfaSAgICAgICAgLCAgLy8gUmVndWxhciBSZXNldCBzaWduYWwKKyAgICAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgd2JtX2Nsa19pICAgICAgICAsICAvLyBTeXN0ZW0gY2xvY2sKKyAgICAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgd2JtX2N5Y19pICAgICAgICAsICAvLyBzdHJvYmUvcmVxdWVzdAorICAgICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICB3Ym1fc3RiX2kgICAgICAgICwgIC8vIHN0cm9iZS9yZXF1ZXN0CisgICAgICAgaW5wdXQgICBsb2dpYyBbMzE6MF0gICAgICAgIHdibV9hZHJfaSAgICAgICAgLCAgLy8gYWRkcmVzcworICAgICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICB3Ym1fd2VfaSAgICAgICAgICwgIC8vIHdyaXRlCisgICAgICAgaW5wdXQgICBsb2dpYyBbMzE6MF0gICAgICAgIHdibV9kYXRfaSAgICAgICAgLCAgLy8gZGF0YSBvdXRwdXQKKyAgICAgICBpbnB1dCAgIGxvZ2ljIFszOjBdICAgICAgICAgd2JtX3NlbF9pICAgICAgICAsICAvLyBieXRlIGVuYWJsZQorICAgICAgIG91dHB1dCAgbG9naWMgWzMxOjBdICAgICAgICB3Ym1fZGF0X28gICAgICAgICwgIC8vIGRhdGEgaW5wdXQKKyAgICAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgd2JtX2Fja19vICAgICAgICAsICAvLyBhY2tub3dsZWdlbWVudAorICAgICAgIG91dHB1dCAgbG9naWMgICAgICAgICAgICAgICB3Ym1fZXJyX28gICAgICAgICwgIC8vIGVycm9yCisKKyAgICAvLyBDbG9jayBTa2V3IEFkanVzdAorICAgICAgIGlucHV0ICAgbG9naWMgICAgICAgICAgICAgICB3YmRfY2xrX2ludCAgICAgICwgCisgICAgICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgIHdiZF9jbGtfd2ggICAgICAgLAorICAgICAgIGlucHV0ICAgbG9naWMgWzM6MF0gICAgICAgICBjZmdfY3NrYV93aCAgICAgICwgLy8gY2xvY2sgc2tldyBhZGp1c3QgZm9yIHdlYiBob3N0CisKKyAgICAvLyBTbGF2ZSBQb3J0CisgICAgICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgIHdic19jbGtfb3V0ICAgICAgLCAgLy8gU3lzdGVtIGNsb2NrCisgICAgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgIHdic19jbGtfaSAgICAgICAgLCAgLy8gU3lzdGVtIGNsb2NrCisgICAgICAgb3V0cHV0ICBsb2dpYyAgICAgICAgICAgICAgIHdic19jeWNfbyAgICAgICAgLCAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgd2JzX3N0Yl9vICAgICAgICAsICAvLyBzdHJvYmUvcmVxdWVzdAorICAgICAgIG91dHB1dCAgbG9naWMgWzMxOjBdICAgICAgICB3YnNfYWRyX28gICAgICAgICwgIC8vIGFkZHJlc3MKKyAgICAgICBvdXRwdXQgIGxvZ2ljICAgICAgICAgICAgICAgd2JzX3dlX28gICAgICAgICAsICAvLyB3cml0ZQorICAgICAgIG91dHB1dCAgbG9naWMgWzMxOjBdICAgICAgICB3YnNfZGF0X28gICAgICAgICwgIC8vIGRhdGEgb3V0cHV0CisgICAgICAgb3V0cHV0ICBsb2dpYyBbMzowXSAgICAgICAgIHdic19zZWxfbyAgICAgICAgLCAgLy8gYnl0ZSBlbmFibGUKKyAgICAgICBpbnB1dCAgIGxvZ2ljIFszMTowXSAgICAgICAgd2JzX2RhdF9pICAgICAgICAsICAvLyBkYXRhIGlucHV0CisgICAgICAgaW5wdXQgICBsb2dpYyAgICAgICAgICAgICAgIHdic19hY2tfaSAgICAgICAgLCAgLy8gYWNrbm93bGVnZW1lbnQKKyAgICAgICBpbnB1dCAgIGxvZ2ljICAgICAgICAgICAgICAgd2JzX2Vycl9pICAgICAgICAsICAvLyBlcnJvcgorCisgICAgICAgb3V0cHV0IGxvZ2ljIFszMTowXSAgICAgICAgIGNmZ19jbGtfY3RybDEgICAgLAorICAgICAgIG91dHB1dCBsb2dpYyBbMzE6MF0gICAgICAgICBjZmdfY2xrX2N0cmwyICAgICwKKworICAgICAgIGlucHV0ICBsb2dpYyBbMTc6MF0gICAgICAgICBsYV9kYXRhX2luICAgICAgICwKKworICAgICAgIGlucHV0ICBsb2dpYyAgICAgICAgICAgICAgICB1YXJ0bV9yeGQgICAgICAgICwKKyAgICAgICBvdXRwdXQgbG9naWMgICAgICAgICAgICAgICAgdWFydG1fdHhkICAgICAgICAKKworICAgICk7CisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gbG9jYWwgIGRlYworLy8KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2xvZ2ljICAgICAgICAgICAgICAgd2JtX3JzdF9uOworbG9naWMgICAgICAgICAgICAgICB3YnNfcnN0X247CisKK2xvZ2ljICAgICAgICAgICAgICAgcmVnX3NlbCAgICA7Citsb2dpYyBbMTowXSAgICAgICAgIHN3X2FkZHIgICAgOworbG9naWMgICAgICAgICAgICAgICBzd19yZF9lbiAgIDsKK2xvZ2ljICAgICAgICAgICAgICAgc3dfd3JfZW4gICA7Citsb2dpYyBbMzE6MF0gICAgICAgIHJlZ19yZGF0YSAgOworbG9naWMgWzMxOjBdICAgICAgICByZWdfb3V0ICAgIDsKK2xvZ2ljICAgICAgICAgICAgICAgcmVnX2FjayAgICA7Citsb2dpYyBbNzowXSAgICAgICAgIGNvbmZpZ19yZWcgOyAgICAKK2xvZ2ljIFszMTowXSAgICAgICAgY2xrX2N0cmwxIDsgICAgCitsb2dpYyBbMzE6MF0gICAgICAgIGNsa19jdHJsMiA7ICAgIAorbG9naWMgICAgICAgICAgICAgICBzd193cl9lbl8wOworbG9naWMgICAgICAgICAgICAgICBzd193cl9lbl8xOworbG9naWMgICAgICAgICAgICAgICBzd193cl9lbl8yOworbG9naWMgICAgICAgICAgICAgICBzd193cl9lbl8zOworbG9naWMgWzc6MF0gICAgICAgICBjZmdfYmFua19zZWw7Citsb2dpYyBbMzE6MF0gICAgICAgIHJlZ18wOyAgLy8gU29mdHdhcmVfUmVnXzAKKworbG9naWMgIFsyOjBdICAgICAgICBjZmdfd2JfY2xrX2N0cmw7Citsb2dpYyAgWzM6MF0gICAgICAgIGNmZ19jcHVfY2xrX2N0cmw7Citsb2dpYyAgWzc6MF0gICAgICAgIGNmZ19ydGNfY2xrX2N0cmw7Citsb2dpYyAgWzM6MF0gICAgICAgIGNmZ191c2JfY2xrX2N0cmw7Citsb2dpYyAgWzg6MF0gICAgICAgIGNmZ19nbGJfY3RybDsKKworLy8gdWFydCBNYXN0ZXIgUG9ydAorbG9naWMgICAgICAgICAgICAgICB3Ym1fdWFydF9jeWNfaSAgICAgICAgOyAgLy8gc3Ryb2JlL3JlcXVlc3QKK2xvZ2ljICAgICAgICAgICAgICAgd2JtX3VhcnRfc3RiX2kgICAgICAgIDsgIC8vIHN0cm9iZS9yZXF1ZXN0Citsb2dpYyBbMzE6MF0gICAgICAgIHdibV91YXJ0X2Fkcl9pICAgICAgICA7ICAvLyBhZGRyZXNzCitsb2dpYyAgICAgICAgICAgICAgIHdibV91YXJ0X3dlX2kgICAgICAgICA7ICAvLyB3cml0ZQorbG9naWMgWzMxOjBdICAgICAgICB3Ym1fdWFydF9kYXRfaSAgICAgICAgOyAgLy8gZGF0YSBvdXRwdXQKK2xvZ2ljIFszOjBdICAgICAgICAgd2JtX3VhcnRfc2VsX2kgICAgICAgIDsgIC8vIGJ5dGUgZW5hYmxlCitsb2dpYyBbMzE6MF0gICAgICAgIHdibV91YXJ0X2RhdF9vICAgICAgICA7ICAvLyBkYXRhIGlucHV0Citsb2dpYyAgICAgICAgICAgICAgIHdibV91YXJ0X2Fja19vICAgICAgICA7ICAvLyBhY2tub3dsZWdlbWVudAorbG9naWMgICAgICAgICAgICAgICB3Ym1fdWFydF9lcnJfbyAgICAgICAgOyAgLy8gZXJyb3IKKworLy8gU2VsZWN0ZWQgTWFzdGVyIFBvcnQKK2xvZ2ljICAgICAgICAgICAgICAgd2JfY3ljX2kgICAgICAgICAgICAgIDsgIC8vIHN0cm9iZS9yZXF1ZXN0Citsb2dpYyAgICAgICAgICAgICAgIHdiX3N0Yl9pICAgICAgICAgICAgICA7ICAvLyBzdHJvYmUvcmVxdWVzdAorbG9naWMgWzMxOjBdICAgICAgICB3Yl9hZHJfaSAgICAgICAgICAgICAgOyAgLy8gYWRkcmVzcworbG9naWMgICAgICAgICAgICAgICB3Yl93ZV9pICAgICAgICAgICAgICAgOyAgLy8gd3JpdGUKK2xvZ2ljIFszMTowXSAgICAgICAgd2JfZGF0X2kgICAgICAgICAgICAgIDsgIC8vIGRhdGEgb3V0cHV0Citsb2dpYyBbMzowXSAgICAgICAgIHdiX3NlbF9pICAgICAgICAgICAgICA7ICAvLyBieXRlIGVuYWJsZQorbG9naWMgWzMxOjBdICAgICAgICB3Yl9kYXRfbyAgICAgICAgICAgICAgOyAgLy8gZGF0YSBpbnB1dAorbG9naWMgICAgICAgICAgICAgICB3Yl9hY2tfbyAgICAgICAgICAgICAgOyAgLy8gYWNrbm93bGVnZW1lbnQKK2xvZ2ljICAgICAgICAgICAgICAgd2JfZXJyX28gICAgICAgICAgICAgIDsgIC8vIGVycm9yCitsb2dpYyBbMzE6MF0gICAgICAgIHdiX2Fkcl9pbnQgICAgICAgICAgICA7Citsb2dpYyAgICAgICAgICAgICAgIHdiX3N0Yl9pbnQgICAgICAgICAgICA7Citsb2dpYyBbMzE6MF0gICAgICAgIHdiX2RhdF9pbnQgICAgICAgICAgICA7IC8vIGRhdGEgaW5wdXQKK2xvZ2ljICAgICAgICAgICAgICAgd2JfYWNrX2ludCAgICAgICAgICAgIDsgLy8gYWNrbm93bGVnZW1lbnQKK2xvZ2ljICAgICAgICAgICAgICAgd2JfZXJyX2ludCAgICAgICAgICAgIDsgLy8gZXJyb3IKKworCitjdGVjaF9idWYgdV9idWZfd2JfcnN0ICAgICAgICAoLkEoY2ZnX2dsYl9jdHJsWzBdKSwuWCh3YmRfaW50X3JzdF9uKSk7CitjdGVjaF9idWYgdV9idWZfY3B1X3JzdCAgICAgICAoLkEoY2ZnX2dsYl9jdHJsWzFdKSwuWChjcHVfcnN0X24pKTsKK2N0ZWNoX2J1ZiB1X2J1Zl9xc3BpbV9yc3QgICAgICguQShjZmdfZ2xiX2N0cmxbMl0pLC5YKHFzcGltX3JzdF9uKSk7CitjdGVjaF9idWYgdV9idWZfc3NwaW1fcnN0ICAgICAoLkEoY2ZnX2dsYl9jdHJsWzNdKSwuWChzc3BpbV9yc3RfbikpOworY3RlY2hfYnVmIHVfYnVmX3VhcnRfcnN0ICAgICAgKC5BKGNmZ19nbGJfY3RybFs0XSksLlgodWFydF9yc3RfbikpOworY3RlY2hfYnVmIHVfYnVmX2kyY21fcnN0ICAgICAgKC5BKGNmZ19nbGJfY3RybFs1XSksLlgoaTJjbV9yc3RfbikpOworY3RlY2hfYnVmIHVfYnVmX3VzYl9yc3QgICAgICAgKC5BKGNmZ19nbGJfY3RybFs2XSksLlgodXNiX3JzdF9uKSk7CitjdGVjaF9idWYgdV9idWZfYmlzdF9yc3QgICAgICAoLkEoY2ZnX2dsYl9jdHJsWzddKSwuWChiaXN0X3JzdF9uKSk7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIExvb2sgbGlrZSB3aXNoYm9uZSByZXNldCByZW1vdmVkIGVhcmx5IHRoYW4gdXNlciBQb3dlciB1cCBzZXF1ZW5jZQorLy8gVG8gY29udHJvbCB0aGUgcmVzZXQgcGhhc2UsIHdlIGhhdmUgYWRkZWQgYWRkaXRpb25hbCBjb250cm9sIHRocm91Z2ggbGFbMF0KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2lyZSAgICBhcnN0X24gPSAhd2JtX3JzdF9pICYgbGFfZGF0YV9pblswXTsKK3Jlc2V0X3N5bmMgIHVfd2JtX3JzdCAoCisJICAgICAgLnNjYW5fbW9kZSAgKDEnYjAgICAgICAgICAgICksCisgICAgICAgICAgICAgIC5kY2xrICAgICAgICh3Ym1fY2xrX2kgICAgICApLCAvLyBEZXN0aW5hdGlvbiBjbG9jayBkb21haW4KKwkgICAgICAuYXJzdF9uICAgICAoYXJzdF9uICAgICAgICAgKSwgLy8gYWN0aXZlIGxvdyBhc3luYyByZXNldAorICAgICAgICAgICAgICAuc3JzdF9uICAgICAod2JtX3JzdF9uICAgICAgKQorICAgICAgICAgICk7CisKK3Jlc2V0X3N5bmMgIHVfd2JzX3JzdCAoCisJICAgICAgLnNjYW5fbW9kZSAgKDEnYjAgICAgICAgICAgICksCisgICAgICAgICAgICAgIC5kY2xrICAgICAgICh3YnNfY2xrX2kgICAgICApLCAvLyBEZXN0aW5hdGlvbiBjbG9jayBkb21haW4KKwkgICAgICAuYXJzdF9uICAgICAoYXJzdF9uICAgICAgICAgKSwgLy8gYWN0aXZlIGxvdyBhc3luYyByZXNldAorICAgICAgICAgICAgICAuc3JzdF9uICAgICAod2JzX3JzdF9uICAgICAgKQorICAgICAgICAgICk7CisKKy8vIFVBUlQgTWFzdGVyCit1YXJ0MndiIHVfdWFydDJ3YiAoICAKKyAgICAgICAgLmFyc3RfbiAgICAgICAgICAod2JtX3JzdF9uICAgICAgICAgKSwgLy8gIHN5bmMgcmVzZXQKKyAgICAgICAgLmFwcF9jbGsgICAgICAgICAod2JtX2Nsa19pICAgICAgICAgKSwgLy8gIHN5cyBjbG9jayAgICAKKworCS8vIGNvbmZpZ3VyYXRpb24gY29udHJvbAorICAgICAgIC5jZmdfdHhfZW5hYmxlICAgIChsYV9kYXRhX2luWzFdICAgICApLCAvLyBFbmFibGUgVHJhbnNtaXQgUGF0aAorICAgICAgIC5jZmdfcnhfZW5hYmxlICAgIChsYV9kYXRhX2luWzJdICAgICApLCAvLyBFbmFibGUgUmVjZWl2ZWQgUGF0aAorICAgICAgIC5jZmdfc3RvcF9iaXQgICAgIChsYV9kYXRhX2luWzNdICAgICApLCAvLyAwIC0+IDEgU3RhcnQgLCAxIC0+IDIgU3RvcCBCaXRzCisgICAgICAgLmNmZ19iYXVkXzE2eCAgICAgKGxhX2RhdGFfaW5bMTU6NF0gICksIC8vIDE2eCBCYXVkIGNsb2NrIGdlbmVyYXRpb24KKyAgICAgICAuY2ZnX3ByaV9tb2QgICAgICAobGFfZGF0YV9pblsxNzoxNl0gKSwgLy8gcHJpb3JpdHkgbW9kZSwgMCAtPiBub3AsIDEgLT4gRXZlbiwgMiAtPiBPZGQKKworICAgIC8vIE1hc3RlciBQb3J0CisgICAgICAgLndibV9jeWNfbyAgICAgICAgKHdibV91YXJ0X2N5Y19pICksICAvLyBzdHJvYmUvcmVxdWVzdAorICAgICAgIC53Ym1fc3RiX28gICAgICAgICh3Ym1fdWFydF9zdGJfaSApLCAgLy8gc3Ryb2JlL3JlcXVlc3QKKyAgICAgICAud2JtX2Fkcl9vICAgICAgICAod2JtX3VhcnRfYWRyX2kgKSwgIC8vIGFkZHJlc3MKKyAgICAgICAud2JtX3dlX28gICAgICAgICAod2JtX3VhcnRfd2VfaSAgKSwgIC8vIHdyaXRlCisgICAgICAgLndibV9kYXRfbyAgICAgICAgKHdibV91YXJ0X2RhdF9pICksICAvLyBkYXRhIG91dHB1dAorICAgICAgIC53Ym1fc2VsX28gICAgICAgICh3Ym1fdWFydF9zZWxfaSApLCAgLy8gYnl0ZSBlbmFibGUKKyAgICAgICAud2JtX2RhdF9pICAgICAgICAod2JtX3VhcnRfZGF0X28gKSwgIC8vIGRhdGEgaW5wdXQKKyAgICAgICAud2JtX2Fja19pICAgICAgICAod2JtX3VhcnRfYWNrX28gKSwgIC8vIGFja25vd2xlZ2VtZW50CisgICAgICAgLndibV9lcnJfaSAgICAgICAgKHdibV91YXJ0X2Vycl9vICksICAvLyBlcnJvcgorCisgICAgICAgLy8gU3RhdHVzIGluZm9ybWF0aW9uCisgICAgICAgLmZybV9lcnJvciAgICAgICAgKCksIC8vIGZyYW1pbmcgZXJyb3IKKyAgICAgICAucGFyX2Vycm9yICAgICAgICAoKSwgLy8gcGFyIGVycm9yCisKKyAgICAgICAuYmF1ZF9jbGtfMTZ4ICAgICAoKSwgLy8gMTZ4IEJhdWQgY2xvY2sKKworICAgICAgIC8vIExpbmUgSW50ZXJmYWNlCisgICAgICAgLnJ4ZCAgICAgICAgICAgICAgKHVhcnRtX3J4ZCkgLCAvLyB1YXJ0IHJ4ZAorICAgICAgIC50eGQgICAgICAgICAgICAgICh1YXJ0bV90eGQpICAgLy8gdWFydCB0eGQKKworICAgICApOworCisKKy8vIEFyYml0b3IgdG8gc2VsZWN0IGJldHdlZW4gZXh0ZXJuYWwgd2IgdnMgdWFydCB3Ygord2lyZSBbMTowXSBncm50Oword2JfYXJiIHVfYXJiKAorCS5jbGsgICAgICAod2JtX2Nsa19pKSwgCisJLnJzdG4gICAgICh3Ym1fcnN0X24pLCAKKwkucmVxICAgICAgKHsxJ2IwLHdibV91YXJ0X3N0Yl9pLHdibV9zdGJfaX0pLCAKKwkuZ250ICAgICAgKGdybnQpCisgICAgICAgICk7CisKKy8vIFNlbGVjdCAgdGhlIG1hc3RlciBiYXNlZCBvbiB0aGUgZ3JhbnQKK2Fzc2lnbiB3Yl9jeWNfaSA9IChncm50ID09IDInYjAwKSA/IHdibV9jeWNfaSA6IHdibV91YXJ0X2N5Y19pOyAKK2Fzc2lnbiB3Yl9zdGJfaSA9IChncm50ID09IDInYjAwKSA/IHdibV9zdGJfaSA6IHdibV91YXJ0X3N0Yl9pOyAKK2Fzc2lnbiB3Yl9hZHJfaSA9IChncm50ID09IDInYjAwKSA/IHdibV9hZHJfaSA6IHdibV91YXJ0X2Fkcl9pOyAKK2Fzc2lnbiB3Yl93ZV9pICA9IChncm50ID09IDInYjAwKSA/IHdibV93ZV9pICA6IHdibV91YXJ0X3dlX2k7IAorYXNzaWduIHdiX2RhdF9pID0gKGdybnQgPT0gMidiMDApID8gd2JtX2RhdF9pIDogd2JtX3VhcnRfZGF0X2k7IAorYXNzaWduIHdiX3NlbF9pID0gKGdybnQgPT0gMidiMDApID8gd2JtX3NlbF9pIDogd2JtX3VhcnRfc2VsX2k7IAorCithc3NpZ24gd2JtX2RhdF9vID0gKGdybnQgPT0gMidiMDApID8gd2JfZGF0X28gOiAnaDA7Cithc3NpZ24gd2JtX2Fja19vID0gKGdybnQgPT0gMidiMDApID8gd2JfYWNrX28gOiAnaDA7Cithc3NpZ24gd2JtX2Vycl9vID0gKGdybnQgPT0gMidiMDApID8gd2JfZXJyX28gOiAnaDA7CisKKworYXNzaWduIHdibV91YXJ0X2RhdF9vID0gKGdybnQgPT0gMidiMDEpID8gd2JfZGF0X28gOiAnaDA7Cithc3NpZ24gd2JtX3VhcnRfYWNrX28gPSAoZ3JudCA9PSAyJ2IwMSkgPyB3Yl9hY2tfbyA6ICdoMDsKK2Fzc2lnbiB3Ym1fdWFydF9lcnJfbyA9IChncm50ID09IDInYjAxKSA/IHdiX2Vycl9vIDogJ2gwOworCisKKworCisKKy8vIHdiX2hvc3QgY2xvY2sgc2tldyBjb250cm9sCitjbGtfc2tld19hZGp1c3QgdV9za2V3X3doCisgICAgICAgKAorYGlmZGVmIFVTRV9QT1dFUl9QSU5TCisgICAgICAgICAgICAgICAudmNjZDEgICAgICAodmNjZDEgICAgICAgICAgICAgICAgICAgICAgKSwvLyBVc2VyIGFyZWEgMSAxLjhWIHN1cHBseQorICAgICAgICAgICAgICAgLnZzc2QxICAgICAgKHZzc2QxICAgICAgICAgICAgICAgICAgICAgICksLy8gVXNlciBhcmVhIDEgZGlnaXRhbCBncm91bmQKK2BlbmRpZgorCSAgICAgICAuY2xrX2luICAgICAod2JkX2Nsa19pbnQgICAgICAgICAgICAgICApLCAKKwkgICAgICAgLnNlbCAgICAgICAgKGNmZ19jc2thX3doICAgICAgICAgICAgICAgKSwgCisJICAgICAgIC5jbGtfb3V0ICAgICh3YmRfY2xrX3doICAgICAgICAgICAgICAgICkgCisgICAgICAgKTsKKworCisvLyBUbyByZWR1Y2UgdGhlIGxvYWQvVGltaW5nIFdpc2hib25lIEkvRiwgU3Ryb2JlIGlzIHJlZ2lzdGVyIHRvIGNyZWF0ZQorLy8gbXVsdGktY3ljbGUKK3dpcmUgWzMxOjBdICB3Yl9kYXRfbzEgICA9IChyZWdfc2VsKSA/IHJlZ19yZGF0YSA6IHdiX2RhdF9pbnQ7ICAvLyBkYXRhIGlucHV0Cit3aXJlICAgICAgICAgd2JfYWNrX28xICAgPSAocmVnX3NlbCkgPyByZWdfYWNrICAgOiB3Yl9hY2tfaW50OyAvLyBhY2tub3dsZWdlbWVudAord2lyZSAgICAgICAgIHdiX2Vycl9vMSAgID0gKHJlZ19zZWwpID8gMSdiMCAgICAgIDogd2JfZXJyX2ludDsgIC8vIGVycm9yCisKK2xvZ2ljIHdiX3JlcTsKKy8vIEhvbGQgZml4IGZvciBTVFJPQkUKK3dpcmUgIHdiX3N0Yl9kMSx3Yl9zdGJfZDIsd2Jfc3RiX2QzOworY3RlY2hfZGVsYXlfYnVmIHVfZGVsYXkxX3N0YjAgKC5YKHdiX3N0Yl9kMSksLkEod2Jfc3RiX2kpKTsKK2N0ZWNoX2RlbGF5X2J1ZiB1X2RlbGF5Ml9zdGIxICguWCh3Yl9zdGJfZDIpLC5BKHdiX3N0Yl9kMSkpOworY3RlY2hfZGVsYXlfYnVmIHVfZGVsYXkyX3N0YjIgKC5YKHdiX3N0Yl9kMyksLkEod2Jfc3RiX2QyKSk7CithbHdheXNfZmYgQChuZWdlZGdlIHdibV9yc3RfbiBvciBwb3NlZGdlIHdibV9jbGtfaSkgYmVnaW4KKyAgICBpZiAoIHdibV9yc3RfbiA9PSAxJ2IwICkgYmVnaW4KKyAgICAgICAgd2JfcmVxICAgIDw9ICcwOworCXdiX2RhdF9vIDw9ICcwOworCXdiX2Fja19vIDw9ICcwOworCXdiX2Vycl9vIDw9ICcwOworICAgZW5kIGVsc2UgYmVnaW4KKyAgICAgICB3Yl9yZXEgICA8PSB3Yl9zdGJfZDMgJiYgKCh3Yl9hY2tfbyA9PSAwKSAmJiAod2JfYWNrX28xID09IDApKSA7CisgICAgICAgd2JfYWNrX28gPD0gd2JfYWNrX28xOworICAgICAgIHdiX2Vycl9vIDw9IHdiX2Vycl9vMTsKKyAgICAgICBpZih3Yl9hY2tfbzEpIC8vIEtlZXAgbGFzdCBkYXRhIGluIHRoZSBidXMKKyAgICAgICAgICB3Yl9kYXRfbyA8PSB3Yl9kYXRfbzE7CisgICBlbmQKK2VuZAorCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIExvY2FsIHJlZ2lzdGVyIGRlY2lkZSBiYXNlZCBvbiBhZGRyZXNzWzMxXSA9PSAxCisvLworLy8gTG9jYWxseSB0aGVyZSByZWdpc3RlciBhcmUgZGVmaW5lIHRvIGNvbnRyb2wgdGhlIHJlc2V0IGFuZCBjbG9jayBmb3IgdXNlcgorLy8gYXJlYQorLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gY2FyYXZlbCB1c2VyIHNwYWNlIGlzIDB4MzAwMF8wMDAwIHRvIDB4MzBGRl9GRkZGCisvLyBTbyB3ZSBoYXZlIGFsbG9jYXRlZCAKKy8vIDB4MzA4MF8wMDAwIC0gMHgzMDgwXzAwRkYgLSBBc3NpZ25lZCB0byBXQiBIb3N0IEFkZHJlc3MgU3BhY2UKKy8vIFNpbmNlIFdlIG5lZWQgbW9yZSB0aGFuIDE2TUIgQWRkcmVzcyBzcGFjZSB0byBhY2Nlc3MgU0RSQU0vU1BJIHdlIGhhdmUKKy8vIGFkZGVkIGluZGlyZWN0IE1TQiA4IGJpdCBhZGRyZXNzIHNlbGVjdCBvcHRpb24KKy8vIFNvIEFkZHJlc3Mgd2lsbCBiZSB7QmFua19TZWxbNzowXSwgd2JtX2Fkcl9pWzIzOjB9CisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2Fzc2lnbiByZWdfc2VsICAgICAgID0gd2JfcmVxICYgKHdiX2Fkcl9pWzIzXSA9PSAxJ2IxKTsKKworYXNzaWduIHN3X2FkZHIgICAgICAgPSB3Yl9hZHJfaSBbMzoyXTsKK2Fzc2lnbiBzd19yZF9lbiAgICAgID0gcmVnX3NlbCAmICF3Yl93ZV9pOworYXNzaWduIHN3X3dyX2VuICAgICAgPSByZWdfc2VsICYgd2Jfd2VfaTsKKworYXNzaWduICBzd193cl9lbl8wID0gc3dfd3JfZW4gJiYgKHN3X2FkZHI9PTApOworYXNzaWduICBzd193cl9lbl8xID0gc3dfd3JfZW4gJiYgKHN3X2FkZHI9PTEpOworYXNzaWduICBzd193cl9lbl8yID0gc3dfd3JfZW4gJiYgKHN3X2FkZHI9PTIpOworYXNzaWduICBzd193cl9lbl8zID0gc3dfd3JfZW4gJiYgKHN3X2FkZHI9PTMpOworCithbHdheXMgQCAocG9zZWRnZSB3Ym1fY2xrX2kgb3IgbmVnZWRnZSB3Ym1fcnN0X24pCitiZWdpbiA6IHByZWdfb3V0X1NlcQorICAgaWYgKHdibV9yc3RfbiA9PSAxJ2IwKQorICAgYmVnaW4KKyAgICAgIHJlZ19yZGF0YSAgPD0gJ2gwOworICAgICAgcmVnX2FjayAgICA8PSAxJ2IwOworICAgZW5kCisgICBlbHNlIGlmIChzd19yZF9lbiAmJiAhcmVnX2FjaykgCisgICBiZWdpbgorICAgICAgcmVnX3JkYXRhIDw9IHJlZ19vdXQgOworICAgICAgcmVnX2FjayAgIDw9IDEnYjE7CisgICBlbmQKKyAgIGVsc2UgaWYgKHN3X3dyX2VuICYmICFyZWdfYWNrKSAKKyAgICAgIHJlZ19hY2sgICAgICAgICAgPD0gMSdiMTsKKyAgIGVsc2UKKyAgIGJlZ2luCisgICAgICByZWdfYWNrICAgICAgICA8PSAxJ2IwOworICAgZW5kCitlbmQKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEdsb2JhbCArIENsb2NrIENvbnRyb2wKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2Fzc2lnbiBjZmdfZ2xiX2N0cmwgICAgICAgICA9IHJlZ18wWzg6MF07Cithc3NpZ24gY2ZnX3diX2Nsa19jdHJsICAgICAgPSByZWdfMFsxMTo5XTsKK2Fzc2lnbiBjZmdfcnRjX2Nsa19jdHJsICAgICA9IHJlZ18wWzE5OjEyXTsKK2Fzc2lnbiBjZmdfY3B1X2Nsa19jdHJsICAgICA9IHJlZ18wWzIzOjIwXTsKK2Fzc2lnbiBjZmdfdXNiX2Nsa19jdHJsICAgICA9IHJlZ18wWzMxOjI4XTsKKworCithbHdheXMgQCggKikKK2JlZ2luIAorICByZWdfb3V0IFszMTowXSA9IDgnZDA7CisKKyAgY2FzZSAoc3dfYWRkciBbMTowXSkKKyAgICAyJ2IwMCA6ICAgcmVnX291dCBbMzE6MF0gPSByZWdfMDsKKyAgICAyJ2IwMSA6ICAgcmVnX291dCBbMzE6MF0gPSB7MjQnaDAsY2ZnX2Jhbmtfc2VsIFs3OjBdfTsgICAgIAorICAgIDInYjEwIDogICByZWdfb3V0IFszMTowXSA9IGNmZ19jbGtfY3RybDEgWzMxOjBdOyAgICAKKyAgICAyJ2IxMSA6ICAgcmVnX291dCBbMzE6MF0gPSBjZmdfY2xrX2N0cmwyIFszMTowXTsgICAgIAorICAgIGRlZmF1bHQgOiByZWdfb3V0IFszMTowXSA9ICdoMDsKKyAgZW5kY2FzZQorZW5kCisKKworCitnZW5lcmljX3JlZ2lzdGVyICMoMzIsMCAgKSB1X2dsYl9jdHJsICgKKwkgICAgICAud2UgICAgICAgICAgICAoezMye3N3X3dyX2VuXzB9fSAgICksCQkgCisJICAgICAgLmRhdGFfaW4gICAgICAgKHdiX2RhdF9pWzMxOjBdICAgICksCisJICAgICAgLnJlc2V0X24gICAgICAgKHdibV9yc3RfbiAgICAgICAgICksCisJICAgICAgLmNsayAgICAgICAgICAgKHdibV9jbGtfaSAgICAgICAgICksCisJICAgICAgCisJICAgICAgLy9MaXN0IG9mIE91dHMKKwkgICAgICAuZGF0YV9vdXQgICAgICAocmVnXzBbMzE6MF0pCisgICAgICAgICAgKTsKKworZ2VuZXJpY19yZWdpc3RlciAjKDgsOCdoMTAgKSB1X2Jhbmtfc2VsICgKKwkgICAgICAud2UgICAgICAgICAgICAoezh7c3dfd3JfZW5fMX19ICAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAgICAod2JfZGF0X2lbNzowXSAgICApLAorCSAgICAgIC5yZXNldF9uICAgICAgICh3Ym1fcnN0X24gICAgICAgICApLAorCSAgICAgIC5jbGsgICAgICAgICAgICh3Ym1fY2xrX2kgICAgICAgICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgICAgKGNmZ19iYW5rX3NlbFs3OjBdICkKKyAgICAgICAgICApOworCisKK2dlbmVyaWNfcmVnaXN0ZXIgIygzMiwwICApIHVfY2xrX2N0cmwxICgKKwkgICAgICAud2UgICAgICAgICAgICAoezMye3N3X3dyX2VuXzJ9fSAgICksCQkgCisJICAgICAgLmRhdGFfaW4gICAgICAgKHdiX2RhdF9pWzMxOjBdICAgICksCisJICAgICAgLnJlc2V0X24gICAgICAgKHdibV9yc3RfbiAgICAgICAgICApLAorCSAgICAgIC5jbGsgICAgICAgICAgICh3Ym1fY2xrX2kgICAgICAgICAgKSwKKwkgICAgICAKKwkgICAgICAvL0xpc3Qgb2YgT3V0cworCSAgICAgIC5kYXRhX291dCAgICAgIChjZmdfY2xrX2N0cmwxWzMxOjBdKQorICAgICAgICAgICk7CisKK2dlbmVyaWNfcmVnaXN0ZXIgIygzMiwwICApIHVfY2xrX2N0cmwyICgKKwkgICAgICAud2UgICAgICAgICAgICAoezMye3N3X3dyX2VuXzN9fSAgKSwJCSAKKwkgICAgICAuZGF0YV9pbiAgICAgICAod2JfZGF0X2lbMzE6MF0gICApLAorCSAgICAgIC5yZXNldF9uICAgICAgICh3Ym1fcnN0X24gICAgICAgICApLAorCSAgICAgIC5jbGsgICAgICAgICAgICh3Ym1fY2xrX2kgICAgICAgICApLAorCSAgICAgIAorCSAgICAgIC8vTGlzdCBvZiBPdXRzCisJICAgICAgLmRhdGFfb3V0ICAgICAgKGNmZ19jbGtfY3RybDJbMzE6MF0pCisgICAgICAgICAgKTsKKworCithc3NpZ24gd2Jfc3RiX2ludCA9IHdiX3JlcSAmICFyZWdfc2VsOworCisvLyBTaW5jZSBkZXNpZ24gbmVlZCBtb3JlIHRoYW4gMTZNQiBhZGRyZXNzIHNwYWNlLCB3ZSBoYXZlIGltcGxlbWVudGVkCisvLyBpbmRpcmVjdCBhY2Nlc3MKK2Fzc2lnbiB3Yl9hZHJfaW50ID0ge2NmZ19iYW5rX3NlbFs3OjBdLHdiX2Fkcl9pWzIzOjBdfTsgIAorCithc3luY193YiB1X2FzeW5jX3diKAorLy8gTWFzdGVyIFBvcnQKKyAgICAgICAud2JtX3JzdF9uICAgKHdibV9yc3RfbiAgICAgKSwgIAorICAgICAgIC53Ym1fY2xrX2kgICAod2JtX2Nsa19pICAgICApLCAgCisgICAgICAgLndibV9jeWNfaSAgICh3Yl9jeWNfaSAgICAgICksICAKKyAgICAgICAud2JtX3N0Yl9pICAgKHdiX3N0Yl9pbnQgICAgKSwgIAorICAgICAgIC53Ym1fYWRyX2kgICAod2JfYWRyX2ludCAgICApLCAgCisgICAgICAgLndibV93ZV9pICAgICh3Yl93ZV9pICAgICAgICksICAKKyAgICAgICAud2JtX2RhdF9pICAgKHdiX2RhdF9pICAgICAgKSwgIAorICAgICAgIC53Ym1fc2VsX2kgICAod2Jfc2VsX2kgICAgICApLCAgCisgICAgICAgLndibV9kYXRfbyAgICh3Yl9kYXRfaW50ICAgICksICAKKyAgICAgICAud2JtX2Fja19vICAgKHdiX2Fja19pbnQgICAgKSwgIAorICAgICAgIC53Ym1fZXJyX28gICAod2JfZXJyX2ludCAgICApLCAgCisKKy8vIFNsYXZlIFBvcnQKKyAgICAgICAud2JzX3JzdF9uICAgKHdic19yc3RfbiAgICAgKSwgIAorICAgICAgIC53YnNfY2xrX2kgICAod2JzX2Nsa19pICAgICApLCAgCisgICAgICAgLndic19jeWNfbyAgICh3YnNfY3ljX28gICAgICksICAKKyAgICAgICAud2JzX3N0Yl9vICAgKHdic19zdGJfbyAgICAgKSwgIAorICAgICAgIC53YnNfYWRyX28gICAod2JzX2Fkcl9vICAgICApLCAgCisgICAgICAgLndic193ZV9vICAgICh3YnNfd2VfbyAgICAgICksICAKKyAgICAgICAud2JzX2RhdF9vICAgKHdic19kYXRfbyAgICAgKSwgIAorICAgICAgIC53YnNfc2VsX28gICAod2JzX3NlbF9vICAgICApLCAgCisgICAgICAgLndic19kYXRfaSAgICh3YnNfZGF0X2kgICAgICksICAKKyAgICAgICAud2JzX2Fja19pICAgKHdic19hY2tfaSAgICAgKSwgIAorICAgICAgIC53YnNfZXJyX2kgICAod2JzX2Vycl9pICAgICApCisKKyAgICApOworCisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gR2VuZXJhdGUgSW50ZXJuYWwgV2lzaEJvbmUgQ2xvY2sKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbG9naWMgICAgICAgd2JfY2xrX2RpdjsKK2xvZ2ljICAgICAgIGNmZ193Yl9jbGtfZGl2OworbG9naWMgWzE6MF0gY2ZnX3diX2Nsa19yYXRpbzsKKworYXNzaWduICAgIGNmZ193Yl9jbGtfcmF0aW8gPSAgY2ZnX3diX2Nsa19jdHJsWzE6MF07Cithc3NpZ24gICAgY2ZnX3diX2Nsa19kaXYgICA9ICBjZmdfd2JfY2xrX2N0cmxbMl07CisKKworLy9hc3NpZ24gd2JzX2Nsa19vdXQgID0gKGNmZ193Yl9jbGtfZGl2KSAgPyB3Yl9jbGtfZGl2IDogd2JtX2Nsa19pOworY3RlY2hfbXV4MngxIHVfd2JzX2Nsa19zZWwgKC5BMCAod2JtX2Nsa19pKSwgLkExICh3Yl9jbGtfZGl2KSwgLlMgIChjZmdfd2JfY2xrX2RpdiksIC5YICAod2JzX2Nsa19vdXQpKTsKKworCitjbGtfY3RsICMoMSkgdV93YmNsayAoCisgICAvLyBPdXRwdXRzCisgICAgICAgLmNsa19vICAgICAgICAgKHdiX2Nsa19kaXYgICAgICApLAorICAgLy8gSW5wdXRzCisgICAgICAgLm1jbGsgICAgICAgICAgKHdibV9jbGtfaSAgICAgICApLAorICAgICAgIC5yZXNldF9uICAgICAgICh3Ym1fcnN0X24gICAgICAgICksIAorICAgICAgIC5jbGtfZGl2X3JhdGlvIChjZmdfd2JfY2xrX3JhdGlvICkKKyAgICk7CisKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBHZW5lcmF0ZSBDT1JFIENsb2NrIEdlbmVyYXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2lyZSAgIGNwdV9jbGtfZGl2Oword2lyZSAgIGNwdV9yZWZfY2xrOword2lyZSAgIGNwdV9jbGtfaW50OworCit3aXJlICAgICAgIGNmZ19jcHVfY2xrX3NyY19zZWwgICA9IGNmZ19jcHVfY2xrX2N0cmxbM107Cit3aXJlICAgICAgIGNmZ19jcHVfY2xrX2RpdiAgICAgICA9IGNmZ19jcHVfY2xrX2N0cmxbMl07Cit3aXJlIFsxOjBdIGNmZ19jcHVfY2xrX3JhdGlvICAgICA9IGNmZ19jcHVfY2xrX2N0cmxbMTowXTsKKworLy9hc3NpZ24gY3B1X3JlZl9jbGsgPSAoY2ZnX2NwdV9jbGtfc3JjX3NlbCkgPyB1c2VyX2Nsb2NrMiA6IHVzZXJfY2xvY2sxOworLy9hc3NpZ24gY3B1X2Nsa19pbnQgPSAoY2ZnX2NwdV9jbGtfZGl2KSAgICAgPyBjcHVfY2xrX2RpdiA6IGNwdV9yZWZfY2xrOworCitjdGVjaF9tdXgyeDEgdV9jcHVfcmVmX3NlbCAoLkEwICh1c2VyX2Nsb2NrMSksIC5BMSAodXNlcl9jbG9jazIpLCAuUyAgKGNmZ19jcHVfY2xrX3NyY19zZWwpLCAuWCAgKGNwdV9yZWZfY2xrKSk7CitjdGVjaF9tdXgyeDEgdV9jcHVfY2xrX3NlbCAoLkEwIChjcHVfcmVmX2NsayksIC5BMSAoY3B1X2Nsa19kaXYpLCAuUyAgKGNmZ19jcHVfY2xrX2RpdiksICAgICAuWCAgKGNwdV9jbGtfaW50KSk7CisKK2N0ZWNoX2Nsa19idWYgdV9jbGtidWZfY3B1ICguQSAoY3B1X2Nsa19pbnQpLCAuIFgoY3B1X2NsaykpOworCitjbGtfY3RsICMoMSkgdV9jcHVjbGsgKAorICAgLy8gT3V0cHV0cworICAgICAgIC5jbGtfbyAgICAgICAgIChjcHVfY2xrX2RpdiAgICAgICksCisgICAvLyBJbnB1dHMKKyAgICAgICAubWNsayAgICAgICAgICAoY3B1X3JlZl9jbGsgICAgICApLAorICAgICAgIC5yZXNldF9uICAgICAgICh3Ym1fcnN0X24gICAgICAgICksIAorICAgICAgIC5jbGtfZGl2X3JhdGlvIChjZmdfY3B1X2Nsa19yYXRpbykKKyAgICk7CisKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gR2VuZXJhdGUgUlRDIENsb2NrIEdlbmVyYXRpb24KKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQord2lyZSAgIHJ0Y19jbGtfZGl2Oword2lyZSBbNzowXSBjZmdfcnRjX2Nsa19yYXRpbyAgICAgPSBjZmdfcnRjX2Nsa19jdHJsWzc6MF07CisKKworY3RlY2hfY2xrX2J1ZiB1X2Nsa2J1Zl9ydGMgKC5BIChydGNfY2xrX2RpdiksIC4gWChydGNfY2xrKSk7CisKK2Nsa19jdGwgIyg3KSB1X3J0Y2NsayAoCisgICAvLyBPdXRwdXRzCisgICAgICAgLmNsa19vICAgICAgICAgKHJ0Y19jbGtfZGl2ICAgICAgKSwKKyAgIC8vIElucHV0cworICAgICAgIC5tY2xrICAgICAgICAgICh1c2VyX2Nsb2NrMiAgICAgICksCisgICAgICAgLnJlc2V0X24gICAgICAgKHdibV9yc3RfbiAgICAgICAgKSwgCisgICAgICAgLmNsa19kaXZfcmF0aW8gKGNmZ19ydGNfY2xrX3JhdGlvKQorICAgKTsKKworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEdlbmVyYXRlIFVTQiBDbG9jayBHZW5lcmF0aW9uCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3dpcmUgICB1c2JfY2xrX2RpdjsKK3dpcmUgICB1c2JfcmVmX2NsazsKK3dpcmUgICB1c2JfY2xrX2ludDsKKword2lyZSAgICAgICBjZmdfdXNiX2Nsa19kaXYgICAgICAgPSBjZmdfdXNiX2Nsa19jdHJsWzNdOword2lyZSBbMjowXSBjZmdfdXNiX2Nsa19yYXRpbyAgICAgPSBjZmdfdXNiX2Nsa19jdHJsWzI6MF07CisKK2Fzc2lnbiB1c2JfcmVmX2NsayA9IHVzZXJfY2xvY2syIDsKKy8vYXNzaWduIHVzYl9jbGtfaW50ID0gKGNmZ191c2JfY2xrX2RpdikgICAgID8gdXNiX2Nsa19kaXYgOiB1c2JfcmVmX2NsazsKK2N0ZWNoX211eDJ4MSB1X3VzYl9jbGtfc2VsICguQTAgKHVzYl9yZWZfY2xrKSwgLkExICh1c2JfY2xrX2RpdiksIC5TICAoY2ZnX3VzYl9jbGtfZGl2KSwgLlggICh1c2JfY2xrX2ludCkpOworCisKK2N0ZWNoX2Nsa19idWYgdV9jbGtidWZfdXNiICguQSAodXNiX2Nsa19pbnQpLCAuIFgodXNiX2NsaykpOworCitjbGtfY3RsICMoMikgdV91c2JjbGsgKAorICAgLy8gT3V0cHV0cworICAgICAgIC5jbGtfbyAgICAgICAgICh1c2JfY2xrX2RpdiAgICAgICksCisgICAvLyBJbnB1dHMKKyAgICAgICAubWNsayAgICAgICAgICAodXNiX3JlZl9jbGsgICAgICApLAorICAgICAgIC5yZXNldF9uICAgICAgICh3Ym1fcnN0X24gICAgICAgICksIAorICAgICAgIC5jbGtfZGl2X3JhdGlvIChjZmdfdXNiX2Nsa19yYXRpbykKKyAgICk7CisKK2VuZG1vZHVsZQpkaWZmIC0tZ2l0IGEvdmVyaWxvZy9ydGwvd2JfaW50ZXJjb25uZWN0L3NyYy93Yl9hcmIuc3YgYi92ZXJpbG9nL3J0bC93Yl9pbnRlcmNvbm5lY3Qvc3JjL3diX2FyYi5zdgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWZhYzRhCi0tLSAvZGV2L251bGwKKysrIGIvdmVyaWxvZy9ydGwvd2JfaW50ZXJjb25uZWN0L3NyYy93Yl9hcmIuc3YKQEAgLTAsMCArMSwxNDYgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSAsIERpbmVzaCBBbm5heXlhICAgICAgICAgICAgICAgICAgICAgICAgICAKKy8vIAorLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKy8vIFNQRFgtRmlsZUNvbnRyaWJ1dG9yOiBDcmVhdGVkIGJ5IERpbmVzaCBBbm5heXlhIDxkaW5lc2hhQG9wZW5jb3Jlcy5vcmc+CisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgV2lzaGJvbmUgQXJiaXRvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFlJRml2ZSBjb3JlcyBwcm9qZWN0ICAgICAgICAgICAgICAgLy8vLworLy8vLyAgaHR0cHM6Ly9naXRodWIuY29tL2RpbmVzaGFubmF5eWEveWlmaXZlX3IwLmdpdCAgICAgICAgICAgICAgLy8vLworLy8vLyAgaHR0cDovL3d3dy5vcGVuY29yZXMub3JnL2NvcmVzL3lpZml2ZS8gICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgIFRoaXMgYmxvY2sgaW1wbGVtZW50IHNpbXBsZSByb3VuZCByb2JpbmUgcmVxdWVzdCAgICAgICAgLy8vLworLy8gICAgICAgIGFyYml0b3IgZm9yIHdpc2hib25lIGludGVyZmFjZS4gICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgVG8gRG86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICBub3RoaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgQXV0aG9yKHMpOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgIC0gRGluZXNoIEFubmF5eWEsIGRpbmVzaGFAb3BlbmNvcmVzLm9yZyAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgUmV2aXNpb24gOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAwLjEgLSAxMnRoIEp1bmUgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBDb3B5cmlnaHQgKEMpIDIwMDAgQXV0aG9ycyBhbmQgT1BFTkNPUkVTLk9SRyAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBmaWxlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCB3aXRob3V0ICAgICAgICAgLy8vLworLy8vLyByZXN0cmljdGlvbiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgICAgLy8vLworLy8vLyByZW1vdmVkIGZyb20gdGhlIGZpbGUgYW5kIHRoYXQgYW55IGRlcml2YXRpdmUgd29yayBjb250YWlucyAgLy8vLworLy8vLyB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGFzc29jaWF0ZWQgZGlzY2xhaW1lci4gLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0ICAgLy8vLworLy8vLyBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgLy8vLworLy8vLyBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgLy8vLworLy8vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55ICAgLy8vLworLy8vLyBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBUaGlzIHNvdXJjZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgICAgICAgLy8vLworLy8vLyB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkICAgLy8vLworLy8vLyB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSICAgICAgLy8vLworLy8vLyBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgLy8vLworLy8vLyBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgICAgLy8vLworLy8vLyBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgc291cmNlOyBpZiBub3QsIGRvd25sb2FkIGl0ICAgLy8vLworLy8vLyBmcm9tIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9sZ3BsLnNodG1sICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisKK21vZHVsZSB3Yl9hcmIoY2xrLCByc3RuLCByZXEsIGdudCk7CisKK2lucHV0CQljbGs7CitpbnB1dAkJcnN0bjsKK2lucHV0CVszOjBdCXJlcTsJLy8gUmVxIGlucHV0CitvdXRwdXQJWzE6MF0JZ250OyAJLy8gR3JhbnQgb3V0cHV0CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gUGFyYW1ldGVycworLy8KKworCitwYXJhbWV0ZXIJWzE6MF0KKyAgICAgICAgICAgICAgICBncmFudDAgPSAzJ2gwLAorICAgICAgICAgICAgICAgIGdyYW50MSA9IDMnaDEsCisgICAgICAgICAgICAgICAgZ3JhbnQyID0gMydoMiwKKyAgICAgICAgICAgICAgICBncmFudDMgPSAzJ2gzOworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gTG9jYWwgUmVnaXN0ZXJzIGFuZCBXaXJlcworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCityZWcgWzE6MF0Jc3RhdGUsIG5leHRfc3RhdGU7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyAgTWlzYyBMb2dpYyAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworYXNzaWduCWdudCA9IHN0YXRlOworCithbHdheXNAKHBvc2VkZ2UgY2xrIG9yIG5lZ2VkZ2UgcnN0bikKKwlpZighcnN0bikgICAgICAgc3RhdGUgPD0gZ3JhbnQwOworCWVsc2UJCXN0YXRlIDw9IG5leHRfc3RhdGU7CisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gTmV4dCBTdGF0ZSBMb2dpYyAKKy8vICAgLSBpbXBsZW1lbnRzIHJvdW5kIHJvYmluIGFyYml0cmF0aW9uIGFsZ29yaXRobQorLy8gICAtIHN3aXRjaGVzIGdyYW50IGlmIGN1cnJlbnQgcmVxIGlzIGRyb3BwZWQgb3IgbmV4dCBpcyBhc3NlcnRlZAorLy8gICAtIHBhcmtzIGF0IGxhc3QgZ3JhbnQKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworYWx3YXlzQChzdGF0ZSBvciByZXEgKQorICAgYmVnaW4KKyAgICAgIG5leHRfc3RhdGUgPSBzdGF0ZTsJLy8gRGVmYXVsdCBLZWVwIFN0YXRlCisgICAgICBjYXNlKHN0YXRlKQkJCisgICAgICAgICBncmFudDA6CisgICAgICAJLy8gaWYgdGhpcyByZXEgaXMgZHJvcHBlZCBvciBuZXh0IGlzIGFzc2VydGVkLCBjaGVjayBmb3Igb3RoZXIgcmVxJ3MKKyAgICAgIAlpZighcmVxWzBdICkgYmVnaW4KKyAgICAgIAkJaWYocmVxWzFdKQluZXh0X3N0YXRlID0gZ3JhbnQxOworICAgICAgCQllbHNlIGlmKHJlcVsyXSkJbmV4dF9zdGF0ZSA9IGdyYW50MjsKKyAgICAgIAkJZWxzZSBpZihyZXFbM10pCW5leHRfc3RhdGUgPSBncmFudDM7CisgICAgICAJZW5kCisgICAgICAgICBncmFudDE6CisgICAgICAJLy8gaWYgdGhpcyByZXEgaXMgZHJvcHBlZCBvciBuZXh0IGlzIGFzc2VydGVkLCBjaGVjayBmb3Igb3RoZXIgcmVxJ3MKKyAgICAgIAlpZighcmVxWzFdICkgYmVnaW4KKyAgICAgIAkJaWYocmVxWzJdKQluZXh0X3N0YXRlID0gZ3JhbnQyOworICAgICAgCQlpZihyZXFbM10pCW5leHRfc3RhdGUgPSBncmFudDM7CisgICAgICAJCWVsc2UgaWYocmVxWzBdKQluZXh0X3N0YXRlID0gZ3JhbnQwOworICAgICAgCWVuZAorICAgICAgICAgZ3JhbnQyOgorICAgICAgCS8vIGlmIHRoaXMgcmVxIGlzIGRyb3BwZWQgb3IgbmV4dCBpcyBhc3NlcnRlZCwgY2hlY2sgZm9yIG90aGVyIHJlcSdzCisgICAgICAJaWYoIXJlcVsyXSApIGJlZ2luCisgICAgICAJICAgaWYocmVxWzBdKQkgICAgICAgIG5leHRfc3RhdGUgPSBncmFudDA7CisgICAgICAJICAgZWxzZSBpZihyZXFbMV0pCW5leHRfc3RhdGUgPSBncmFudDE7CisgICAgICAJICAgZWxzZSBpZihyZXFbM10pCW5leHRfc3RhdGUgPSBncmFudDM7CisgICAgICAJZW5kCisgICAgICAgICBncmFudDM6CisgICAgICAJLy8gaWYgdGhpcyByZXEgaXMgZHJvcHBlZCBvciBuZXh0IGlzIGFzc2VydGVkLCBjaGVjayBmb3Igb3RoZXIgcmVxJ3MKKyAgICAgIAlpZighcmVxWzNdICkgYmVnaW4KKyAgICAgIAkgICBpZihyZXFbMF0pCSAgICAgICAgbmV4dF9zdGF0ZSA9IGdyYW50MDsKKyAgICAgIAkgICBlbHNlIGlmKHJlcVsxXSkJbmV4dF9zdGF0ZSA9IGdyYW50MTsKKyAgICAgIAkgICBlbHNlIGlmKHJlcVsyXSkJbmV4dF9zdGF0ZSA9IGdyYW50MjsKKyAgICAgIAllbmQKKyAgICAgIGVuZGNhc2UKKyAgIGVuZAorCitlbmRtb2R1bGUgCisKZGlmZiAtLWdpdCBhL3Zlcmlsb2cvcnRsL3diX2ludGVyY29ubmVjdC9zcmMvd2JfaW50ZXJjb25uZWN0LnN2IGIvdmVyaWxvZy9ydGwvd2JfaW50ZXJjb25uZWN0L3NyYy93Yl9pbnRlcmNvbm5lY3Quc3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWYyMmQ3MgotLS0gL2Rldi9udWxsCisrKyBiL3Zlcmlsb2cvcnRsL3diX2ludGVyY29ubmVjdC9zcmMvd2JfaW50ZXJjb25uZWN0LnN2CkBAIC0wLDAgKzEsNjA5IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMjEgLCBEaW5lc2ggQW5uYXl5YSAgICAgICAgICAgICAgICAgICAgICAgICAgCisvLyAKKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisvLyBTUERYLUZpbGVDb250cmlidXRvcjogQ3JlYXRlZCBieSBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFdpc2hib25lIEludGVyY29ubmVjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBZSUZpdmUgY29yZXMgcHJvamVjdCAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHBzOi8vZ2l0aHViLmNvbS9kaW5lc2hhbm5heXlhL3lpZml2ZV9yMC5naXQgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9jb3Jlcy95aWZpdmUvICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8JMS4gMyBtYXN0ZXJzIGFuZCAzIHNsYXZlcyBzaGFyZSBidXMgV2lzaGJvbmUgY29ubmVjdGlvbiAgIC8vLy8KKy8vLy8JMi4gVGhpcyBibG9jayBpbXBsZW1lbnQgc2ltcGxlIHJvdW5kIHJvYmluZSByZXF1ZXN0ICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFRvIERvOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgbm90aGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIEF1dGhvcihzKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAtIERpbmVzaCBBbm5heXlhLCBkaW5lc2hhQG9wZW5jb3Jlcy5vcmcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gIFJldmlzaW9uIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC4xIC0gMTJ0aCBKdW5lIDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC4yIC0gMTd0aCBKdW5lIDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgU3RhZ2dpbmcgRkYgYWRkZWQgYXQgU2xhdmUgSW50ZXJmYWNlIHRvIGJyZWFrICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgcGF0aCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC4zIC0gMjF0aCBKdW5lIDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgc2xhdmUgcG9ydCAzIGFkZGVkIGZvciB1YXJ0ICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC40IC0gMjV0aCBKdW5lIDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgRXh0ZXJuYWwgTWVtb3J5IE1hcCBjaGFuZ2VkIGFuZCBtYWRlIHNhbWUgYXMgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgaW50ZXJuYWwgbWVtb3J5IG1hcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC40IC0gMjd0aCBKdW5lIDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgdW51c2VkIHRpZSBvZmYgYXQgZGlnaXRhbCBjb3JlIGxldmVsIGJyb3VnaHQgaW5zaWRlIC8vLy8KKy8vLy8gICAgICAgICAgdG8gYXZvaWQgY29yZSBsZXZlbCBwb3dlciBob29rIHVwICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgMC41IC0gMjh0aCBKdW5lIDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgaW50ZXJjaGFuZ2UgdGhlIE1hc3RlciBwb3J0IGZvciBiZXR0ZXIgcGh5c2ljYWwgICAgIC8vLy8KKy8vLy8gICAgICAgICAgcGxhY2VtZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgbTA6IGV4dGVybmFsIGhvc3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgbTE6IHJpc2MgaW1lbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgbTI6IHJpc2MgZG1lbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAwLjYgLSAwNiBOb3YgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgUHVzaCB0aGUgY2xvY2sgc2tldyBsb2dpYyBpbnNpZGUgdGhlIGJsb2NrIGR1ZSB0byAgIC8vLy8KKy8vLy8gICAgICAgICAgZ2xvYmFsIHBvd2VyIGhvb2tpbmcgY2hhbGxhbmdlcyBmb3Igc21hbGwgYmxvY2sgYXQgIC8vLy8KKy8vLy8gICAgICAgICAgdG9wIGxldmVsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAwLjcgLSAwNyBEZWMgMjAyMSwgRGluZXNoIEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICBCdWZmZXIgY2hhbm5lbCBhcmUgYWRkZWQgaW5zaWRlciB3Yl9pbnRlciB0byBzaW1wbHkgIC8vLy8KKy8vLy8gICAgICAgICBnbG9iYWwgcm91dGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAwLjggIC0xMCBEZWMgMjAyMSAsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICB0d28gbW9yZSBzbGF2ZSBwb3J0IGFkZGVkIGZvciBNQklTVCBhbmQgQURDIHBvcnQgICAgIC8vLy8KKy8vLy8gICAgICAgICByZW1vdmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICBNZW1vcnkgcmVtYXAgYWRkZWQgdG8gbW92ZSB0aGUgUklTQyBQcm9ncmFtIG1lbW9yeSAgIC8vLy8KKy8vLy8gICAgICAgICB0byBTUkFNIE1lbW9yeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAwLjkgIC0gMTUgRGVjIDIwMjEsIERpbmVzaCBBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICBDb25zb2xpZGF0ZWQgNCBNQklTVCBwb3J0IGludG8gb25lIDhLQiBQb3J0ICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gQ29weXJpZ2h0IChDKSAyMDAwIEF1dGhvcnMgYW5kIE9QRU5DT1JFUy5PUkcgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgIC8vLy8KKy8vLy8gcmVzdHJpY3Rpb24gcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90ICAgIC8vLy8KKy8vLy8gcmVtb3ZlZCBmcm9tIHRoZSBmaWxlIGFuZCB0aGF0IGFueSBkZXJpdmF0aXZlIHdvcmsgY29udGFpbnMgIC8vLy8KKy8vLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCAgIC8vLy8KKy8vLy8gYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IC8vLy8KKy8vLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSAgIC8vLy8KKy8vLy8gbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gVGhpcyBzb3VyY2UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlICAgICAgIC8vLy8KKy8vLy8gdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCAgIC8vLy8KKy8vLy8gd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAgICAgIC8vLy8KKy8vLy8gUFVSUE9TRS4gIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIC8vLy8KKy8vLy8gZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsICAgIC8vLy8KKy8vLy8gUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvdXJjZTsgaWYgbm90LCBkb3dubG9hZCBpdCAgIC8vLy8KKy8vLy8gZnJvbSBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvbGdwbC5zaHRtbCAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworCisKK21vZHVsZSB3Yl9pbnRlcmNvbm5lY3QgIygKKwlwYXJhbWV0ZXIgQ0hfQ0xLX1dEID0gNywKKwlwYXJhbWV0ZXIgQ0hfREFUQV9XRCA9IDEwMworICAgICAgICApICgKK2BpZmRlZiBVU0VfUE9XRVJfUElOUworICAgICAgICAgaW5wdXQgbG9naWMgICAgICAgICAgICB2Y2NkMSwgICAgLy8gVXNlciBhcmVhIDEgMS44ViBzdXBwbHkKKyAgICAgICAgIGlucHV0IGxvZ2ljICAgICAgICAgICAgdnNzZDEsICAgIC8vIFVzZXIgYXJlYSAxIGRpZ2l0YWwgZ3JvdW5kCitgZW5kaWYKKwkgLy8gQnVzIHJlcGVhdGVycworCSBpbnB1dCBbQ0hfQ0xLX1dELTE6MF0gIGNoX2Nsa19pbiwKKwkgb3V0cHV0IFtDSF9DTEtfV0QtMTowXSBjaF9jbGtfb3V0LAorCSBpbnB1dCBbQ0hfREFUQV9XRC0xOjBdIGNoX2RhdGFfaW4sCisJIG91dHB1dCBbQ0hfREFUQV9XRC0xOjBdY2hfZGF0YV9vdXQsCisKKyAgICAgICAgIC8vIENsb2NrIFNrZXcgQWRqdXN0CisgICAgICAgICBpbnB1dCBsb2dpYyBbMzowXSAgICAgIGNmZ19jc2thX3dpLAorICAgICAgICAgaW5wdXQgbG9naWMgICAgICAgICAgICB3YmRfY2xrX2ludCwKKwkgb3V0cHV0IGxvZ2ljICAgICAgICAgICB3YmRfY2xrX3dpLAorCisKKyAgICAgICAgIGlucHV0IGxvZ2ljCQljbGtfaSwgCisgICAgICAgICBpbnB1dCBsb2dpYyAgICAgICAgICAgIHJzdF9uLAorCisJIGlucHV0IGxvZ2ljICBbMzowXSAgICAgYm9vdF9yZW1hcCwgLy8gV2hlbiByZW1hcCBpcyBlbmFibGVkCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFswXSAtIDB4MDAwMF8wMDAwIC0gMHgwMDAwXzA3RkYgTWFwIHRvIE1CSVNUMQorCQkJCQkgICAgIC8vIFsxXSAtIDB4MDAwMF8wODAwIC0gMHgwMDAwXzBGRkYgTWFwIHRvIE1CSVNUMgorCQkJCQkgICAgIC8vIFsyXSAtIDB4MDAwMF8xMDAwIC0gMHgwMDAwXzE3RkYgTWFwIHRvIE1CSVNUMworCQkJCQkgICAgIC8vIFszXSAtIDB4MDAwMF8xODAwIC0gMHgwMDAwXzFGRkYgTWFwIHRvIE1CSVNUNAorCSBpbnB1dCBsb2dpYyAgWzM6MF0gICAgIGRjYWNoZV9yZW1hcCwgLy8gV2hlbiBkY2FjaGUgcmVtYXAgaXMgZW5hYmxlZCwgCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFswXSAtIDB4MDgwMF8wMDAwIC0gMHgwODAwXzA3RkYgTWFwIHRvIE1CSVNUMQorCQkJCQkgICAgIC8vIFsxXSAtIDB4MDgwMF8wODAwIC0gMHgwODAwXzBGRkYgTWFwIHRvIE1CSVNUMgorCQkJCQkgICAgIC8vIFsyXSAtIDB4MDgwMF8xMDAwIC0gMHgwODAwXzE3RkYgTWFwIHRvIE1CSVNUMworCQkJCQkgICAgIC8vIFszXSAtIDB4MDgwMF8xODAwIC0gMHgwODAwXzFGRkYgTWFwIHRvIE1CSVNUNAorICAgICAgICAgCisgICAgICAgICAvLyBNYXN0ZXIgMCBJbnRlcmZhY2UKKyAgICAgICAgIGlucHV0ICAgbG9naWMJWzMxOjBdCW0wX3diZF9kYXRfaSwKKyAgICAgICAgIGlucHV0ICAgbG9naWMgIFszMTowXQltMF93YmRfYWRyX2ksCisgICAgICAgICBpbnB1dCAgIGxvZ2ljICBbMzowXQltMF93YmRfc2VsX2ksCisgICAgICAgICBpbnB1dCAgIGxvZ2ljICAJbTBfd2JkX3dlX2ksCisgICAgICAgICBpbnB1dCAgIGxvZ2ljICAJbTBfd2JkX2N5Y19pLAorICAgICAgICAgaW5wdXQgICBsb2dpYyAgCW0wX3diZF9zdGJfaSwKKyAgICAgICAgIG91dHB1dCAgbG9naWMJWzMxOjBdCW0wX3diZF9kYXRfbywKKyAgICAgICAgIG91dHB1dCAgbG9naWMJCW0wX3diZF9hY2tfbywKKyAgICAgICAgIG91dHB1dCAgbG9naWMJCW0wX3diZF9sYWNrX28sCisgICAgICAgICBvdXRwdXQgIGxvZ2ljCQltMF93YmRfZXJyX28sCisgICAgICAgICAKKyAgICAgICAgIC8vIE1hc3RlciAxIEludGVyZmFjZQorICAgICAgICAgaW5wdXQJbG9naWMgWzMxOjBdCW0xX3diZF9kYXRfaSwKKyAgICAgICAgIGlucHV0CWxvZ2ljIFszMTowXQltMV93YmRfYWRyX2ksCisgICAgICAgICBpbnB1dAlsb2dpYyBbMzowXQltMV93YmRfc2VsX2ksCisgICAgICAgICBpbnB1dAlsb2dpYyAJICAgICAgICBtMV93YmRfd2VfaSwKKyAgICAgICAgIGlucHV0CWxvZ2ljIAkgICAgICAgIG0xX3diZF9jeWNfaSwKKyAgICAgICAgIGlucHV0CWxvZ2ljIAkgICAgICAgIG0xX3diZF9zdGJfaSwKKyAgICAgICAgIG91dHB1dAlsb2dpYyBbMzE6MF0JbTFfd2JkX2RhdF9vLAorICAgICAgICAgb3V0cHV0CWxvZ2ljIAkgICAgICAgIG0xX3diZF9hY2tfbywKKyAgICAgICAgIG91dHB1dAlsb2dpYyAJICAgICAgICBtMV93YmRfbGFja19vLAorICAgICAgICAgb3V0cHV0CWxvZ2ljIAkgICAgICAgIG0xX3diZF9lcnJfbywKKyAgICAgICAgIAorICAgICAgICAgLy8gTWFzdGVyIDIgSW50ZXJmYWNlCisgICAgICAgICBpbnB1dAlsb2dpYyBbMzE6MF0JbTJfd2JkX2RhdF9pLAorICAgICAgICAgaW5wdXQJbG9naWMgWzMxOjBdCW0yX3diZF9hZHJfaSwKKyAgICAgICAgIGlucHV0CWxvZ2ljIFszOjBdCW0yX3diZF9zZWxfaSwKKyAgICAgICAgIGlucHV0CWxvZ2ljIFs5OjBdCW0yX3diZF9ibF9pLAorICAgICAgICAgaW5wdXQJbG9naWMgICAgCW0yX3diZF9icnlfaSwKKyAgICAgICAgIGlucHV0CWxvZ2ljIAkgICAgICAgIG0yX3diZF93ZV9pLAorICAgICAgICAgaW5wdXQJbG9naWMgCSAgICAgICAgbTJfd2JkX2N5Y19pLAorICAgICAgICAgaW5wdXQJbG9naWMgCSAgICAgICAgbTJfd2JkX3N0Yl9pLAorICAgICAgICAgb3V0cHV0CWxvZ2ljIFszMTowXQltMl93YmRfZGF0X28sCisgICAgICAgICBvdXRwdXQJbG9naWMgCSAgICAgICAgbTJfd2JkX2Fja19vLAorICAgICAgICAgb3V0cHV0CWxvZ2ljIAkgICAgICAgIG0yX3diZF9sYWNrX28sCisgICAgICAgICBvdXRwdXQJbG9naWMgCSAgICAgICAgbTJfd2JkX2Vycl9vLAorICAgICAgICAgCisgICAgICAgICAvLyBNYXN0ZXIgMyBJbnRlcmZhY2UKKyAgICAgICAgIGlucHV0CWxvZ2ljIFszMTowXQltM193YmRfYWRyX2ksCisgICAgICAgICBpbnB1dAlsb2dpYyBbMzowXQltM193YmRfc2VsX2ksCisgICAgICAgICBpbnB1dAlsb2dpYyBbOTowXQltM193YmRfYmxfaSwKKyAgICAgICAgIGlucHV0CWxvZ2ljICAgIAltM193YmRfYnJ5X2ksCisgICAgICAgICBpbnB1dAlsb2dpYyAJICAgICAgICBtM193YmRfd2VfaSwKKyAgICAgICAgIGlucHV0CWxvZ2ljIAkgICAgICAgIG0zX3diZF9jeWNfaSwKKyAgICAgICAgIGlucHV0CWxvZ2ljIAkgICAgICAgIG0zX3diZF9zdGJfaSwKKyAgICAgICAgIG91dHB1dAlsb2dpYyBbMzE6MF0JbTNfd2JkX2RhdF9vLAorICAgICAgICAgb3V0cHV0CWxvZ2ljIAkgICAgICAgIG0zX3diZF9hY2tfbywKKyAgICAgICAgIG91dHB1dAlsb2dpYyAJICAgICAgICBtM193YmRfbGFja19vLAorICAgICAgICAgb3V0cHV0CWxvZ2ljIAkgICAgICAgIG0zX3diZF9lcnJfbywKKyAgICAgICAgIAorICAgICAgICAgLy8gU2xhdmUgMCBJbnRlcmZhY2UKKyAgICAgICAgIGlucHV0CWxvZ2ljIFszMTowXQlzMF93YmRfZGF0X2ksCisgICAgICAgICBpbnB1dAlsb2dpYyAJICAgICAgICBzMF93YmRfYWNrX2ksCisgICAgICAgICBpbnB1dAlsb2dpYyAJICAgICAgICBzMF93YmRfbGFja19pLAorICAgICAgICAgLy9pbnB1dAlsb2dpYyAJczBfd2JkX2Vycl9pLCAtIHVudXNlZAorICAgICAgICAgb3V0cHV0CWxvZ2ljIFszMTowXQlzMF93YmRfZGF0X28sCisgICAgICAgICBvdXRwdXQJbG9naWMgWzMxOjBdCXMwX3diZF9hZHJfbywKKyAgICAgICAgIG91dHB1dAlsb2dpYyBbMzowXQlzMF93YmRfc2VsX28sCisgICAgICAgICBvdXRwdXQJbG9naWMgWzk6MF0JczBfd2JkX2JsX28sCisgICAgICAgICBvdXRwdXQJbG9naWMgCSAgICAgICAgczBfd2JkX2JyeV9vLAorICAgICAgICAgb3V0cHV0CWxvZ2ljIAkgICAgICAgIHMwX3diZF93ZV9vLAorICAgICAgICAgb3V0cHV0CWxvZ2ljIAkgICAgICAgIHMwX3diZF9jeWNfbywKKyAgICAgICAgIG91dHB1dAlsb2dpYyAJICAgICAgICBzMF93YmRfc3RiX28sCisgICAgICAgICAKKyAgICAgICAgIC8vIFNsYXZlIDEgSW50ZXJmYWNlCisgICAgICAgICBpbnB1dAlsb2dpYyBbMzE6MF0JczFfd2JkX2RhdF9pLAorICAgICAgICAgaW5wdXQJbG9naWMgCSAgICAgICAgczFfd2JkX2Fja19pLAorICAgICAgICAgLy8gaW5wdXQJbG9naWMgCXMxX3diZF9lcnJfaSwgLSB1bnVzZWQKKyAgICAgICAgIG91dHB1dAlsb2dpYyBbMzE6MF0JczFfd2JkX2RhdF9vLAorICAgICAgICAgb3V0cHV0CWxvZ2ljIFs3OjBdCXMxX3diZF9hZHJfbywKKyAgICAgICAgIG91dHB1dAlsb2dpYyBbMzowXQlzMV93YmRfc2VsX28sCisgICAgICAgICBvdXRwdXQJbG9naWMgCSAgICAgICAgczFfd2JkX3dlX28sCisgICAgICAgICBvdXRwdXQJbG9naWMgCSAgICAgICAgczFfd2JkX2N5Y19vLAorICAgICAgICAgb3V0cHV0CWxvZ2ljIAkgICAgICAgIHMxX3diZF9zdGJfbywKKyAgICAgICAgIAorICAgICAgICAgLy8gU2xhdmUgMiBJbnRlcmZhY2UKKyAgICAgICAgIGlucHV0CWxvZ2ljIFszMTowXQlzMl93YmRfZGF0X2ksCisgICAgICAgICBpbnB1dAlsb2dpYyAJICAgICAgICBzMl93YmRfYWNrX2ksCisgICAgICAgICAvLyBpbnB1dAlsb2dpYyAJczJfd2JkX2Vycl9pLCAtIHVudXNlZAorICAgICAgICAgb3V0cHV0CWxvZ2ljIFszMTowXQlzMl93YmRfZGF0X28sCisgICAgICAgICBvdXRwdXQJbG9naWMgWzc6MF0JczJfd2JkX2Fkcl9vLCAvLyBnbGJsIHJlZyBuZWVkIG9ubHkgOCBiaXRzCisgICAgICAgICBvdXRwdXQJbG9naWMgWzM6MF0JczJfd2JkX3NlbF9vLAorICAgICAgICAgb3V0cHV0CWxvZ2ljIAkgICAgICAgIHMyX3diZF93ZV9vLAorICAgICAgICAgb3V0cHV0CWxvZ2ljIAkgICAgICAgIHMyX3diZF9jeWNfbywKKyAgICAgICAgIG91dHB1dAlsb2dpYyAJICAgICAgICBzMl93YmRfc3RiX28sCisKKyAgICAgICAgIC8vIFNsYXZlIDMgSW50ZXJmYWNlCisJIC8vIE1CSVNUCisgICAgICAgICBpbnB1dAlsb2dpYyBbMzE6MF0JczNfd2JkX2RhdF9pLAorICAgICAgICAgaW5wdXQJbG9naWMgCSAgICAgICAgczNfd2JkX2Fja19pLAorICAgICAgICAgaW5wdXQJbG9naWMgCSAgICAgICAgczNfd2JkX2xhY2tfaSwKKyAgICAgICAgIC8vIGlucHV0CWxvZ2ljIAlzM193YmRfZXJyX2ksCisgICAgICAgICBvdXRwdXQJbG9naWMgWzMxOjBdCXMzX3diZF9kYXRfbywKKyAgICAgICAgIG91dHB1dAlsb2dpYyBbMTI6MF0JczNfd2JkX2Fkcl9vLCAKKyAgICAgICAgIG91dHB1dAlsb2dpYyBbMzowXSAgIAlzM193YmRfc2VsX28sCisgICAgICAgICBvdXRwdXQJbG9naWMgWzk6MF0gICAJczNfd2JkX2JsX28sCisgICAgICAgICBvdXRwdXQJbG9naWMgICAgCXMzX3diZF9icnlfbywKKyAgICAgICAgIG91dHB1dAlsb2dpYyAJICAgICAgICBzM193YmRfd2VfbywKKyAgICAgICAgIG91dHB1dAlsb2dpYyAJICAgICAgICBzM193YmRfY3ljX28sCisgICAgICAgICBvdXRwdXQJbG9naWMgCSAgICAgICAgczNfd2JkX3N0Yl9vCisJKTsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBUeXBlIGRlZmluZQorLy8KKworcGFyYW1ldGVyIFRBUkdFVF9TUElfTUVNICA9IDQnYjAwMDA7CitwYXJhbWV0ZXIgVEFSR0VUX1NQSV9SRUcgID0gNCdiMDAwMDsKK3BhcmFtZXRlciBUQVJHRVRfVUFSVCAgICAgPSA0J2IwMDAxOworcGFyYW1ldGVyIFRBUkdFVF9QSU5NVVggICA9IDQnYjAwMTA7CitwYXJhbWV0ZXIgVEFSR0VUX01CSVNUICAgID0gNCdiMDAxMTsKKworLy8gV2lzaEJvbmUgV3IgSW50ZXJmYWNlCit0eXBlZGVmIHN0cnVjdCBwYWNrZWQgeyAKKyAgbG9naWMJWzMxOjBdCXdiZF9kYXQ7CisgIGxvZ2ljICBbMzE6MF0Jd2JkX2FkcjsKKyAgbG9naWMgIFszOjBdCXdiZF9zZWw7CisgIGxvZ2ljICBbOTowXQl3YmRfYmw7CisgIGxvZ2ljICAJd2JkX2JyeTsKKyAgbG9naWMgIAl3YmRfd2U7CisgIGxvZ2ljICAJd2JkX2N5YzsKKyAgbG9naWMgIAl3YmRfc3RiOworICBsb2dpYyBbMzowXSAJd2JkX3RpZDsgLy8gdGFyZ2V0IGlkCit9IHR5cGVfd2Jfd3JfaW50ZjsKKworLy8gV2lzaEJvbmUgUmQgSW50ZXJmYWNlCit0eXBlZGVmIHN0cnVjdCBwYWNrZWQgeyAKKyAgbG9naWMJWzMxOjBdCXdiZF9kYXQ7CisgIGxvZ2ljICAJd2JkX2FjazsKKyAgbG9naWMgIAl3YmRfbGFjazsKKyAgbG9naWMgIAl3YmRfZXJyOworfSB0eXBlX3diX3JkX2ludGY7CisKKworLy8gTWFzdGVyIFdyaXRlIEludGVyZmFjZQordHlwZV93Yl93cl9pbnRmICBtMF93Yl93cjsKK3R5cGVfd2Jfd3JfaW50ZiAgbTFfd2Jfd3I7Cit0eXBlX3diX3dyX2ludGYgIG0yX3diX3dyOwordHlwZV93Yl93cl9pbnRmICBtM193Yl93cjsKKworLy8gTWFzdGVyIFJlYWQgSW50ZXJmYWNlCit0eXBlX3diX3JkX2ludGYgIG0wX3diX3JkOwordHlwZV93Yl9yZF9pbnRmICBtMV93Yl9yZDsKK3R5cGVfd2JfcmRfaW50ZiAgbTJfd2JfcmQ7Cit0eXBlX3diX3JkX2ludGYgIG0zX3diX3JkOworCisvLyBTbGF2ZSBXcml0ZSBJbnRlcmZhY2UKK3R5cGVfd2Jfd3JfaW50ZiAgczBfd2Jfd3I7Cit0eXBlX3diX3dyX2ludGYgIHMxX3diX3dyOwordHlwZV93Yl93cl9pbnRmICBzMl93Yl93cjsKK3R5cGVfd2Jfd3JfaW50ZiAgczNfd2Jfd3I7CisKKy8vIFNsYXZlIFJlYWQgSW50ZXJmYWNlCit0eXBlX3diX3JkX2ludGYgIHMwX3diX3JkOwordHlwZV93Yl9yZF9pbnRmICBzMV93Yl9yZDsKK3R5cGVfd2JfcmRfaW50ZiAgczJfd2JfcmQ7Cit0eXBlX3diX3JkX2ludGYgIHMzX3diX3JkOworCisKK3R5cGVfd2Jfd3JfaW50ZiAgbV9idXNfd3I7ICAvLyBNdWx0aXBsZXhlZCBNYXN0ZXIgSS9GCit0eXBlX3diX3JkX2ludGYgIG1fYnVzX3JkOyAgLy8gTXVsdGlwbGV4ZWQgU2xhdmUgSS9GCisKK3R5cGVfd2Jfd3JfaW50ZiAgc19idXNfd3I7ICAvLyBNdWx0aXBsZXhlZCBNYXN0ZXIgSS9GCit0eXBlX3diX3JkX2ludGYgIHNfYnVzX3JkOyAgLy8gTXVsdGlwbGV4ZWQgU2xhdmUgSS9GCisKKy8vIGNoYW5uZWwgcmVwZWF0ZXIKK2Fzc2lnbiBjaF9jbGtfb3V0ICA9IGNoX2Nsa19pbjsKK2Fzc2lnbiBjaF9kYXRhX291dCA9IGNoX2RhdGFfaW47CisKKy8vIFdpc2hib25lIGludGVyY29ubmVjdCBjbG9jayBza2V3IGNvbnRyb2wKK2Nsa19za2V3X2FkanVzdCB1X3NrZXdfd2kKKyAgICAgICAoCitgaWZkZWYgVVNFX1BPV0VSX1BJTlMKKyAgICAgICAgICAgICAgIC52Y2NkMSAgICAgICh2Y2NkMSAgICAgICAgICAgICAgICAgICAgICApLC8vIFVzZXIgYXJlYSAxIDEuOFYgc3VwcGx5CisgICAgICAgICAgICAgICAudnNzZDEgICAgICAodnNzZDEgICAgICAgICAgICAgICAgICAgICAgKSwvLyBVc2VyIGFyZWEgMSBkaWdpdGFsIGdyb3VuZAorYGVuZGlmCisJICAgICAgIC5jbGtfaW4gICAgICh3YmRfY2xrX2ludCAgICAgICAgICAgICAgICAgKSwgCisJICAgICAgIC5zZWwgICAgICAgIChjZmdfY3NrYV93aSAgICAgICAgICAgICAgICAgKSwgCisJICAgICAgIC5jbGtfb3V0ICAgICh3YmRfY2xrX3dpICAgICAgICAgICAgICAgICAgKSAKKyAgICAgICApOworCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEVYVEVSTkFMIE1FTU9SWSBNQVAKKy8vIDB4MDAwMF8wMDAwIHRvIDB4MEZGRl9GRkZGICAtIFFTUEkgTUVNT1JZCisvLyAweDEwMDBfMDAwMCB0byAweDEwMDBfMDBGRiAgLSBRU1BJTSBSRUcKKy8vIDB4MTAwMV8wMDAwIHRvIDB4MTAwMV8wMDNGICAtIFVBUlQKKy8vIDB4MTAwMV8wMDQwIHRvIDB4MTAwMV8wMDdGICAtIEkyQworLy8gMHgxMDAxXzAwODAgdG8gMHgxMDAxXzAwQkYgIC0gVVNCCisvLyAweDEwMDFfMDBDMCB0byAweDEwMDFfMDBGRiAgLSBTU1BJTQorLy8gMHgxMDAyXzAwMDAgdG8gMHgxMDAyXzAwRkYgIC0gUElOTVVYCisvLyAweDEwMDNfMDAwMCB0byAweDEwMDNfMDdGRiAgLSBTUkFNLTAgKDJLQikKKy8vIDB4MTAwM18wODAwIHRvIDB4MTAwM18wRkZGICAtIFNSQU0tMSAoMktCKQorLy8gMHgxMDAzXzEwMDAgdG8gMHgxMDAzXzE3RkYgIC0gU1JBTS0yICgyS0IpCisvLyAweDEwMDNfMTgwMCB0byAweDEwMDNfMUZGRiAgLSBTUkFNLTMgKDJLQikKKy8vIDB4MzA4MF8wMDAwIHRvIDB4MzA4MF8wMEZGICAtIFdCIEhPU1QgKFRoaXMgZGVjb2RpbmcgaGFwcGVucyBhdCB3Yl9ob3N0IGJsb2NrKQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLword2lyZSBbMzowXSBtMF93YmRfdGlkX2kgICAgICAgPSAobTBfd2JkX2Fkcl9pWzMxOjI4XSA9PSA0J2IwMDAwICAgKSA/IFRBUkdFVF9TUElfTUVNIDogICAvLyBTUEkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG0wX3diZF9hZHJfaVszMToxNl0gPT0gMTYnaDEwMDAgICkgPyBUQVJHRVRfU1BJX1JFRyA6ICAgLy8gU1BJIFJFRworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobTBfd2JkX2Fkcl9pWzMxOjE2XSA9PSAxNidoMTAwMSAgKSA/IFRBUkdFVF9VQVJUICAgIDogICAvLyBVQVJUL0kyQy9VU0IvU1BJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtMF93YmRfYWRyX2lbMzE6MTZdID09IDE2J2gxMDAyICApID8gVEFSR0VUX1BJTk1VWCAgOiAgIC8vIFBJTk1VWAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobTBfd2JkX2Fkcl9pWzMxOjE2XSA9PSAxNidoMTAwMyAgKSA/IFRBUkdFVF9NQklTVCAgIDogICAvLyBNQklTVAorCQkJCTQnYjAwMDA7IAorCisvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUklTQyBEYXRhIE1lbW9yeSBNYXAKKy8vIDB4MDAwMF8wMDAwIHRvIDB4MEZGRl9GRkZGICAtIFFTUElNIE1FTU9SWQorLy8gMHgxMDAwXzAwMDAgdG8gMHgxMDAwXzAwRkYgIC0gUVNQSU0gUkVHCisvLyAweDEwMDFfMDAwMCB0byAweDEwMDFfMDAzRiAgLSBVQVJUCisvLyAweDEwMDFfMDA0MCB0byAweDEwMDFfMDA3RiAgLSBJMgorLy8gMHgxMDAxXzAwODAgdG8gMHgxMDAxXzAwQkYgIC0gVVNCCisvLyAweDEwMDFfMDBDMCB0byAweDEwMDFfMDBGRiAgLSBTU1BJTQorLy8gMHgxMDAyXzAwMDAgdG8gMHgxMDAyXzAwRkYgIC0gUElOTVVYCisvLyAweDEwMDNfMDAwMCB0byAweDEwMDNfMDdGRiAgLSBTUkFNLTAgKDJLQikKKy8vIDB4MTAwM18wODAwIHRvIDB4MTAwM18wRkZGICAtIFNSQU0tMSAoMktCKQorLy8gMHgxMDAzXzEwMDAgdG8gMHgxMDAzXzE3RkYgIC0gU1JBTS0yICgyS0IpCisvLyAweDEwMDNfMTgwMCB0byAweDEwMDNfMUZGRiAgLSBTUkFNLTMgKDJLQikKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIAord2lyZSBbMzowXSBtMV93YmRfdGlkX2kgICAgID0gKGJvb3RfcmVtYXBbMF0gJiYgbTFfd2JkX2Fkcl9pWzMxOjExXSA9PSAyMSdoMCkgPyBUQVJHRVRfTUJJU1Q6CisJICAgICAgICAgICAgICAgICAgICAgIChib290X3JlbWFwWzFdICYmIG0xX3diZF9hZHJfaVszMToxMV0gPT0gMjEnaDEpID8gVEFSR0VUX01CSVNUOgorCSAgICAgICAgICAgICAgICAgICAgICAoYm9vdF9yZW1hcFsyXSAmJiBtMV93YmRfYWRyX2lbMzE6MTFdID09IDIxJ2gyKSA/IFRBUkdFVF9NQklTVDoKKwkgICAgICAgICAgICAgICAgICAgICAgKGJvb3RfcmVtYXBbM10gJiYgbTFfd2JkX2Fkcl9pWzMxOjExXSA9PSAyMSdoMykgPyBUQVJHRVRfTUJJU1Q6CisJCQkgICAgICAoZGNhY2hlX3JlbWFwWzBdICYmIG0xX3diZF9hZHJfaVszMToxMV0gPT0gMjEnYjAwMDBfMTAwMF8wMDAwXzAwMDBfMDAwMF8wKSA/IFRBUkdFVF9NQklTVDoKKwkgICAgICAgICAgICAgICAgICAgICAgKGRjYWNoZV9yZW1hcFsxXSAmJiBtMV93YmRfYWRyX2lbMzE6MTFdID09IDIxJ2IwMDAwXzEwMDBfMDAwMF8wMDAwXzAwMDBfMSkgPyBUQVJHRVRfTUJJU1Q6CisJICAgICAgICAgICAgICAgICAgICAgIChkY2FjaGVfcmVtYXBbMl0gJiYgbTFfd2JkX2Fkcl9pWzMxOjExXSA9PSAyMSdiMDAwMF8xMDAwXzAwMDBfMDAwMF8wMDAxXzApID8gVEFSR0VUX01CSVNUOgorCSAgICAgICAgICAgICAgICAgICAgICAoZGNhY2hlX3JlbWFwWzNdICYmIG0xX3diZF9hZHJfaVszMToxMV0gPT0gMjEnYjAwMDBfMTAwMF8wMDAwXzAwMDBfMDAwMV8xKSA/IFRBUkdFVF9NQklTVDoKKwkgICAgICAgICAgICAgICAgICAgICAgKG0xX3diZF9hZHJfaVszMToyOF0gPT0gIDQnYjAwMDAgKSA/IFRBUkdFVF9TUElfTUVNIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtMV93YmRfYWRyX2lbMzE6MTZdID09IDE2J2gxMDAwICkgPyBUQVJHRVRfU1BJX1JFRyA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobTFfd2JkX2Fkcl9pWzMxOjE2XSA9PSAxNidoMTAwMSApID8gVEFSR0VUX1VBUlQgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG0xX3diZF9hZHJfaVszMToxNl0gPT0gMTYnaDEwMDIgKSA/IFRBUkdFVF9QSU5NVVggOiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtMV93YmRfYWRyX2lbMzE6MTZdID09IDE2J2gxMDAzICkgPyBUQVJHRVRfTUJJU1QgOiAKKwkJCSAgICAgIDQnYjAwMDA7IAorCit3aXJlIFszOjBdIG0yX3diZF90aWRfaSAgICAgPSAoYm9vdF9yZW1hcFswXSAmJiBtMl93YmRfYWRyX2lbMzE6MTFdID09IDIxJ2gwKSA/IFRBUkdFVF9NQklTVDoKKwkgICAgICAgICAgICAgICAgICAgICAgKGJvb3RfcmVtYXBbMV0gJiYgbTJfd2JkX2Fkcl9pWzMxOjExXSA9PSAyMSdoMSkgPyBUQVJHRVRfTUJJU1Q6CisJICAgICAgICAgICAgICAgICAgICAgIChib290X3JlbWFwWzJdICYmIG0yX3diZF9hZHJfaVszMToxMV0gPT0gMjEnaDIpID8gVEFSR0VUX01CSVNUOgorCSAgICAgICAgICAgICAgICAgICAgICAoYm9vdF9yZW1hcFszXSAmJiBtMl93YmRfYWRyX2lbMzE6MTFdID09IDIxJ2gzKSA/IFRBUkdFVF9NQklTVDoKKwkJCSAgICAgIChkY2FjaGVfcmVtYXBbMF0gJiYgbTJfd2JkX2Fkcl9pWzMxOjExXSA9PSAyMSdiMDAwMF8xMDAwXzAwMDBfMDAwMF8wMDAwXzApID8gVEFSR0VUX01CSVNUOgorCSAgICAgICAgICAgICAgICAgICAgICAoZGNhY2hlX3JlbWFwWzFdICYmIG0yX3diZF9hZHJfaVszMToxMV0gPT0gMjEnYjAwMDBfMTAwMF8wMDAwXzAwMDBfMDAwMF8xKSA/IFRBUkdFVF9NQklTVDoKKwkgICAgICAgICAgICAgICAgICAgICAgKGRjYWNoZV9yZW1hcFsyXSAmJiBtMl93YmRfYWRyX2lbMzE6MTFdID09IDIxJ2IwMDAwXzEwMDBfMDAwMF8wMDAwXzAwMDFfMCkgPyBUQVJHRVRfTUJJU1Q6CisJICAgICAgICAgICAgICAgICAgICAgIChkY2FjaGVfcmVtYXBbM10gJiYgbTJfd2JkX2Fkcl9pWzMxOjExXSA9PSAyMSdiMDAwMF8xMDAwXzAwMDBfMDAwMF8wMDAxXzEpID8gVEFSR0VUX01CSVNUOgorCSAgICAgICAgICAgICAgICAgICAgICAobTJfd2JkX2Fkcl9pWzMxOjI4XSA9PSAgNCdiMDAwMCApID8gVEFSR0VUX1NQSV9NRU0gOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG0yX3diZF9hZHJfaVszMToxNl0gPT0gMTYnaDEwMDAgKSA/IFRBUkdFVF9TUElfUkVHIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtMl93YmRfYWRyX2lbMzE6MTZdID09IDE2J2gxMDAxICkgPyBUQVJHRVRfVUFSVCA6IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG0yX3diZF9hZHJfaVszMToxNl0gPT0gMTYnaDEwMDIgKSA/IFRBUkdFVF9QSU5NVVggOiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtMl93YmRfYWRyX2lbMzE6MTZdID09IDE2J2gxMDAzICkgPyBUQVJHRVRfTUJJU1QgOiAKKwkJCSAgICAgIDQnYjAwMDA7IAord2lyZSBbMzowXSBtM193YmRfdGlkX2kgICAgID0gKGJvb3RfcmVtYXBbMF0gJiYgbTNfd2JkX2Fkcl9pWzMxOjExXSA9PSAyMSdoMCkgPyBUQVJHRVRfTUJJU1Q6CisJICAgICAgICAgICAgICAgICAgICAgIChib290X3JlbWFwWzFdICYmIG0zX3diZF9hZHJfaVszMToxMV0gPT0gMjEnaDEpID8gVEFSR0VUX01CSVNUOgorCSAgICAgICAgICAgICAgICAgICAgICAoYm9vdF9yZW1hcFsyXSAmJiBtM193YmRfYWRyX2lbMzE6MTFdID09IDIxJ2gyKSA/IFRBUkdFVF9NQklTVDoKKwkgICAgICAgICAgICAgICAgICAgICAgKGJvb3RfcmVtYXBbM10gJiYgbTNfd2JkX2Fkcl9pWzMxOjExXSA9PSAyMSdoMykgPyBUQVJHRVRfTUJJU1Q6CisJCQkgICAgICAoZGNhY2hlX3JlbWFwWzBdICYmIG0zX3diZF9hZHJfaVszMToxMV0gPT0gMjEnYjAwMDBfMTAwMF8wMDAwXzAwMDBfMDAwMF8wKSA/IFRBUkdFVF9NQklTVDoKKwkgICAgICAgICAgICAgICAgICAgICAgKGRjYWNoZV9yZW1hcFsxXSAmJiBtM193YmRfYWRyX2lbMzE6MTFdID09IDIxJ2IwMDAwXzEwMDBfMDAwMF8wMDAwXzAwMDBfMSkgPyBUQVJHRVRfTUJJU1Q6CisJICAgICAgICAgICAgICAgICAgICAgIChkY2FjaGVfcmVtYXBbMl0gJiYgbTNfd2JkX2Fkcl9pWzMxOjExXSA9PSAyMSdiMDAwMF8xMDAwXzAwMDBfMDAwMF8wMDAxXzApID8gVEFSR0VUX01CSVNUOgorCSAgICAgICAgICAgICAgICAgICAgICAoZGNhY2hlX3JlbWFwWzNdICYmIG0zX3diZF9hZHJfaVszMToxMV0gPT0gMjEnYjAwMDBfMTAwMF8wMDAwXzAwMDBfMDAwMV8xKSA/IFRBUkdFVF9NQklTVDoKKwkgICAgICAgICAgICAgICAgICAgICAgKG0zX3diZF9hZHJfaVszMToyOF0gPT0gIDQnYjAwMDAgKSA/IFRBUkdFVF9TUElfTUVNIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtM193YmRfYWRyX2lbMzE6MTZdID09IDE2J2gxMDAwICkgPyBUQVJHRVRfU1BJX1JFRyA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobTNfd2JkX2Fkcl9pWzMxOjE2XSA9PSAxNidoMTAwMSApID8gVEFSR0VUX1VBUlQgOiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtM193YmRfYWRyX2lbMzE6MTZdID09IDE2J2gxMDAyICkgPyBUQVJHRVRfUElOTVVYIDogCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobTNfd2JkX2Fkcl9pWzMxOjE2XSA9PSAxNidoMTAwMyApID8gVEFSR0VUX01CSVNUIDogCisJCQkgICAgICA0J2IwMDAwOyAKKy8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gTWFzdGVyIE1hcHBpbmcKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2Fzc2lnbiBtMF93Yl93ci53YmRfZGF0ID0gbTBfd2JkX2RhdF9pOworYXNzaWduIG0wX3diX3dyLndiZF9hZHIgPSB7bTBfd2JkX2Fkcl9pWzMxOjJdLDInYjAwfTsKK2Fzc2lnbiBtMF93Yl93ci53YmRfc2VsID0gbTBfd2JkX3NlbF9pOworYXNzaWduIG0wX3diX3dyLndiZF9ibCAgPSAnaDE7Cithc3NpZ24gbTBfd2Jfd3Iud2JkX2JyeSA9ICdiMTsKK2Fzc2lnbiBtMF93Yl93ci53YmRfd2UgID0gbTBfd2JkX3dlX2k7Cithc3NpZ24gbTBfd2Jfd3Iud2JkX2N5YyA9IG0wX3diZF9jeWNfaTsKK2Fzc2lnbiBtMF93Yl93ci53YmRfc3RiID0gbTBfd2JkX3N0Yl9pOworYXNzaWduIG0wX3diX3dyLndiZF90aWQgPSBtMF93YmRfdGlkX2k7CisKK2Fzc2lnbiBtMV93Yl93ci53YmRfZGF0ID0gbTFfd2JkX2RhdF9pOworYXNzaWduIG0xX3diX3dyLndiZF9hZHIgPSB7bTFfd2JkX2Fkcl9pWzMxOjJdLDInYjAwfTsKK2Fzc2lnbiBtMV93Yl93ci53YmRfc2VsID0gbTFfd2JkX3NlbF9pOworYXNzaWduIG0xX3diX3dyLndiZF9ibCAgPSAnaDE7Cithc3NpZ24gbTFfd2Jfd3Iud2JkX2JyeSA9ICdiMTsKK2Fzc2lnbiBtMV93Yl93ci53YmRfd2UgID0gbTFfd2JkX3dlX2k7Cithc3NpZ24gbTFfd2Jfd3Iud2JkX2N5YyA9IG0xX3diZF9jeWNfaTsKK2Fzc2lnbiBtMV93Yl93ci53YmRfc3RiID0gbTFfd2JkX3N0Yl9pOworYXNzaWduIG0xX3diX3dyLndiZF90aWQgPSBtMV93YmRfdGlkX2k7CisKK2Fzc2lnbiBtMl93Yl93ci53YmRfZGF0ID0gbTJfd2JkX2RhdF9pOworYXNzaWduIG0yX3diX3dyLndiZF9hZHIgPSB7bTJfd2JkX2Fkcl9pWzMxOjJdLDInYjAwfTsKK2Fzc2lnbiBtMl93Yl93ci53YmRfc2VsID0gbTJfd2JkX3NlbF9pOworYXNzaWduIG0yX3diX3dyLndiZF9ibCAgPSBtMl93YmRfYmxfaTsKK2Fzc2lnbiBtMl93Yl93ci53YmRfYnJ5ID0gbTJfd2JkX2JyeV9pOworYXNzaWduIG0yX3diX3dyLndiZF93ZSAgPSBtMl93YmRfd2VfaTsKK2Fzc2lnbiBtMl93Yl93ci53YmRfY3ljID0gbTJfd2JkX2N5Y19pOworYXNzaWduIG0yX3diX3dyLndiZF9zdGIgPSBtMl93YmRfc3RiX2k7Cithc3NpZ24gbTJfd2Jfd3Iud2JkX3RpZCA9IG0yX3diZF90aWRfaTsKKworYXNzaWduIG0zX3diX3dyLndiZF9kYXQgPSAnaDA7Cithc3NpZ24gbTNfd2Jfd3Iud2JkX2FkciA9IHttM193YmRfYWRyX2lbMzE6Ml0sMidiMDB9OworYXNzaWduIG0zX3diX3dyLndiZF9zZWwgPSBtM193YmRfc2VsX2k7Cithc3NpZ24gbTNfd2Jfd3Iud2JkX2JsICA9IG0zX3diZF9ibF9pOworYXNzaWduIG0zX3diX3dyLndiZF9icnkgPSBtM193YmRfYnJ5X2k7Cithc3NpZ24gbTNfd2Jfd3Iud2JkX3dlICA9IG0zX3diZF93ZV9pOworYXNzaWduIG0zX3diX3dyLndiZF9jeWMgPSBtM193YmRfY3ljX2k7Cithc3NpZ24gbTNfd2Jfd3Iud2JkX3N0YiA9IG0zX3diZF9zdGJfaTsKK2Fzc2lnbiBtM193Yl93ci53YmRfdGlkID0gbTNfd2JkX3RpZF9pOworCithc3NpZ24gbTBfd2JkX2RhdF9vICA9ICBtMF93Yl9yZC53YmRfZGF0OworYXNzaWduIG0wX3diZF9hY2tfbyAgPSAgbTBfd2JfcmQud2JkX2FjazsKK2Fzc2lnbiBtMF93YmRfbGFja19vID0gIG0wX3diX3JkLndiZF9sYWNrOworYXNzaWduIG0wX3diZF9lcnJfbyAgPSAgbTBfd2JfcmQud2JkX2VycjsKKworYXNzaWduIG0xX3diZF9kYXRfbyAgPSAgbTFfd2JfcmQud2JkX2RhdDsKK2Fzc2lnbiBtMV93YmRfYWNrX28gID0gIG0xX3diX3JkLndiZF9hY2s7Cithc3NpZ24gbTFfd2JkX2xhY2tfbyA9ICBtMV93Yl9yZC53YmRfbGFjazsKK2Fzc2lnbiBtMV93YmRfZXJyX28gID0gIG0xX3diX3JkLndiZF9lcnI7CisKK2Fzc2lnbiBtMl93YmRfZGF0X28gID0gIG0yX3diX3JkLndiZF9kYXQ7Cithc3NpZ24gbTJfd2JkX2Fja19vICA9ICBtMl93Yl9yZC53YmRfYWNrOworYXNzaWduIG0yX3diZF9sYWNrX28gPSAgbTJfd2JfcmQud2JkX2xhY2s7Cithc3NpZ24gbTJfd2JkX2Vycl9vICA9ICBtMl93Yl9yZC53YmRfZXJyOworCithc3NpZ24gbTNfd2JkX2RhdF9vICA9ICBtM193Yl9yZC53YmRfZGF0OworYXNzaWduIG0zX3diZF9hY2tfbyAgPSAgbTNfd2JfcmQud2JkX2FjazsKK2Fzc2lnbiBtM193YmRfbGFja19vID0gIG0zX3diX3JkLndiZF9sYWNrOworYXNzaWduIG0zX3diZF9lcnJfbyAgPSAgbTNfd2JfcmQud2JkX2VycjsKKworLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBTbGF2ZSBNYXBwaW5nCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBNYXNrZWQgTm93IGFuZCBhZGRlZCBzdGFnZ2luZyBGRiBub3cKKyBhc3NpZ24gIHMwX3diZF9kYXRfbyA9ICBzMF93Yl93ci53YmRfZGF0IDsKKyBhc3NpZ24gIHMwX3diZF9hZHJfbyA9ICBzMF93Yl93ci53YmRfYWRyIDsKKyBhc3NpZ24gIHMwX3diZF9zZWxfbyA9ICBzMF93Yl93ci53YmRfc2VsIDsKKyBhc3NpZ24gIHMwX3diZF9ibF9vICA9ICBzMF93Yl93ci53YmRfYmwgOworIGFzc2lnbiAgczBfd2JkX2JyeV9vID0gIHMwX3diX3dyLndiZF9icnkgOworIGFzc2lnbiAgczBfd2JkX3dlX28gID0gIHMwX3diX3dyLndiZF93ZSAgOworIGFzc2lnbiAgczBfd2JkX2N5Y19vID0gIHMwX3diX3dyLndiZF9jeWMgOworIGFzc2lnbiAgczBfd2JkX3N0Yl9vID0gIHMwX3diX3dyLndiZF9zdGIgOworICAgICAgICAgICAgICAgICAgICAgIAorIGFzc2lnbiAgczFfd2JkX2RhdF9vID0gIHMxX3diX3dyLndiZF9kYXQgOworIGFzc2lnbiAgczFfd2JkX2Fkcl9vID0gIHMxX3diX3dyLndiZF9hZHJbNzowXSA7CisgYXNzaWduICBzMV93YmRfc2VsX28gPSAgczFfd2Jfd3Iud2JkX3NlbCA7CisgYXNzaWduICBzMV93YmRfd2VfbyAgPSAgczFfd2Jfd3Iud2JkX3dlICA7CisgYXNzaWduICBzMV93YmRfY3ljX28gPSAgczFfd2Jfd3Iud2JkX2N5YyA7CisgYXNzaWduICBzMV93YmRfc3RiX28gPSAgczFfd2Jfd3Iud2JkX3N0YiA7CisgICAgICAgICAgICAgICAgICAgICAgCisgYXNzaWduICBzMl93YmRfZGF0X28gPSAgczJfd2Jfd3Iud2JkX2RhdCA7CisgYXNzaWduICBzMl93YmRfYWRyX28gPSAgczJfd2Jfd3Iud2JkX2Fkcls3OjBdIDsgLy8gR2xvYmFsIFJlZyBOZWVkIDggYml0CisgYXNzaWduICBzMl93YmRfc2VsX28gPSAgczJfd2Jfd3Iud2JkX3NlbCA7CisgYXNzaWduICBzMl93YmRfd2VfbyAgPSAgczJfd2Jfd3Iud2JkX3dlICA7CisgYXNzaWduICBzMl93YmRfY3ljX28gPSAgczJfd2Jfd3Iud2JkX2N5YyA7CisgYXNzaWduICBzMl93YmRfc3RiX28gPSAgczJfd2Jfd3Iud2JkX3N0YiA7CisKKyBhc3NpZ24gIHMzX3diZF9kYXRfbyA9ICBzM193Yl93ci53YmRfZGF0WzMxOjBdIDsKKyBhc3NpZ24gIHMzX3diZF9hZHJfbyA9ICBzM193Yl93ci53YmRfYWRyWzEyOjBdIDsgLy8gTUJJU1QgTmVlZCAxMyBiaXQKKyBhc3NpZ24gIHMzX3diZF9zZWxfbyA9ICBzM193Yl93ci53YmRfc2VsWzM6MF0gOworIGFzc2lnbiAgczNfd2JkX2JsX28gID0gIHMzX3diX3dyLndiZF9ibCA7CisgYXNzaWduICBzM193YmRfYnJ5X28gPSAgczNfd2Jfd3Iud2JkX2JyeSA7CisgYXNzaWduICBzM193YmRfd2VfbyAgPSAgczNfd2Jfd3Iud2JkX3dlICA7CisgYXNzaWduICBzM193YmRfY3ljX28gPSAgczNfd2Jfd3Iud2JkX2N5YyA7CisgYXNzaWduICBzM193YmRfc3RiX28gPSAgczNfd2Jfd3Iud2JkX3N0YiA7CisgCisgCisgYXNzaWduIHMwX3diX3JkLndiZF9kYXQgICA9IHMwX3diZF9kYXRfaSA7CisgYXNzaWduIHMwX3diX3JkLndiZF9hY2sgICA9IHMwX3diZF9hY2tfaSA7CisgYXNzaWduIHMwX3diX3JkLndiZF9sYWNrICA9IHMwX3diZF9sYWNrX2kgOworIGFzc2lnbiBzMF93Yl9yZC53YmRfZXJyICA9IDEnYjA7IC8vIHMwX3diZF9lcnJfaSA7IC0gdW51c2VkCisgCisgYXNzaWduIHMxX3diX3JkLndiZF9kYXQgID0gczFfd2JkX2RhdF9pIDsKKyBhc3NpZ24gczFfd2JfcmQud2JkX2FjayAgPSBzMV93YmRfYWNrX2kgOworIGFzc2lnbiBzMV93Yl9yZC53YmRfbGFjayAgPSBzMV93YmRfYWNrX2kgOworIGFzc2lnbiBzMV93Yl9yZC53YmRfZXJyICA9IDEnYjA7IC8vIHMxX3diZF9lcnJfaSA7IC0gdW51c2VkCisgCisgYXNzaWduIHMyX3diX3JkLndiZF9kYXQgID0gczJfd2JkX2RhdF9pIDsKKyBhc3NpZ24gczJfd2JfcmQud2JkX2FjayAgPSBzMl93YmRfYWNrX2kgOworIGFzc2lnbiBzMl93Yl9yZC53YmRfbGFjayA9IHMyX3diZF9hY2tfaSA7CisgYXNzaWduIHMyX3diX3JkLndiZF9lcnIgID0gMSdiMDsgLy8gczJfd2JkX2Vycl9pIDsgLSB1bnVzZWQKKworIGFzc2lnbiBzM193Yl9yZC53YmRfZGF0ICA9IHMzX3diZF9kYXRfaSA7CisgYXNzaWduIHMzX3diX3JkLndiZF9hY2sgID0gczNfd2JkX2Fja19pIDsKKyBhc3NpZ24gczNfd2JfcmQud2JkX2xhY2sgPSBzM193YmRfbGFja19pIDsKKyBhc3NpZ24gczNfd2JfcmQud2JkX2VyciAgPSAxJ2IwOyAvLyBzM193YmRfZXJyX2kgOyAtIHVudXNlZAorCisvLworLy8gYXJiaXRvciAKKy8vCitsb2dpYyBbMTowXSAgZ250OworCit3Yl9hcmIJdV93Yl9hcmIoCisJLmNsayhjbGtfaSksIAorCS5yc3RuKHJzdF9uKSwKKwkucmVxKHsJbTNfd2JkX3N0Yl9pICYgIW0zX3diZF9sYWNrX28sCisJICAgICAgICBtMl93YmRfc3RiX2kgJiAhbTJfd2JkX2xhY2tfbywKKwkJbTFfd2JkX3N0Yl9pICYgIW0xX3diZF9sYWNrX28sCisJCW0wX3diZF9zdGJfaSAmICFtMF93YmRfbGFja19vfSksCisJLmdudChnbnQpCispOworCisKKy8vIEdlbmVyYXRlIE11bHRpcGxleGVkIE1hc3RlciBJbnRlcmZhY2UgYmFzZWQgb24gZ3JhbnQKK2Fsd2F5c19jb21iIGJlZ2luCisgICAgIGNhc2UoZ250KQorICAgICAgICAzJ2gwOgkgICBtX2J1c193ciA9IG0wX3diX3dyOworICAgICAgICAzJ2gxOgkgICBtX2J1c193ciA9IG0xX3diX3dyOworICAgICAgICAzJ2gyOgkgICBtX2J1c193ciA9IG0yX3diX3dyOworICAgICAgICAzJ2gzOgkgICBtX2J1c193ciA9IG0zX3diX3dyOworICAgICAgICBkZWZhdWx0OiAgIG1fYnVzX3dyID0gbTBfd2Jfd3I7CisgICAgIGVuZGNhc2UJCQkKK2VuZAorCisKKy8vIEdlbmVyYXRlIE11bHRpcGxleGVkIFNsYXZlIEludGVyZmFjZSBiYXNlZCBvbiB0YXJnZXQgSWQKK3dpcmUgWzM6MF0gc193YmRfdGlkID0gIHNfYnVzX3dyLndiZF90aWQ7IC8vIHRvIGZpeCBpdmVyaWxvZyB3YXJuaW5nCithbHdheXNfY29tYiBiZWdpbgorICAgICBjYXNlKHNfd2JkX3RpZCkKKyAgICAgICAgNCdoMDoJICAgc19idXNfcmQgPSBzMF93Yl9yZDsKKyAgICAgICAgNCdoMToJICAgc19idXNfcmQgPSBzMV93Yl9yZDsKKyAgICAgICAgNCdoMjoJICAgc19idXNfcmQgPSBzMl93Yl9yZDsKKyAgICAgICAgNCdoMzoJICAgc19idXNfcmQgPSBzM193Yl9yZDsKKyAgICAgICAgZGVmYXVsdDogICBzX2J1c19yZCA9IHMwX3diX3JkOworICAgICBlbmRjYXNlCQkJCitlbmQKKworCisvLyBDb25uZWN0IE1hc3RlciA9PiBTbGF2ZQorYXNzaWduICBzMF93Yl93ciA9IChzX3diZF90aWQgPT0gMydiMDAwKSA/IHNfYnVzX3dyIDogJ2gwOworYXNzaWduICBzMV93Yl93ciA9IChzX3diZF90aWQgPT0gMydiMDAxKSA/IHNfYnVzX3dyIDogJ2gwOworYXNzaWduICBzMl93Yl93ciA9IChzX3diZF90aWQgPT0gMydiMDEwKSA/IHNfYnVzX3dyIDogJ2gwOworYXNzaWduICBzM193Yl93ciA9IChzX3diZF90aWQgPT0gMydiMDExKSA/IHNfYnVzX3dyIDogJ2gwOworCisvLyBDb25uZWN0IFNsYXZlIHRvIE1hc3RlcgorYXNzaWduICBtMF93Yl9yZCA9IChnbnQgPT0gMidiMDApID8gbV9idXNfcmQgOiAnaDA7Cithc3NpZ24gIG0xX3diX3JkID0gKGdudCA9PSAyJ2IwMSkgPyBtX2J1c19yZCA6ICdoMDsKK2Fzc2lnbiAgbTJfd2JfcmQgPSAoZ250ID09IDInYjEwKSA/IG1fYnVzX3JkIDogJ2gwOworYXNzaWduICBtM193Yl9yZCA9IChnbnQgPT0gMidiMTEpID8gbV9idXNfcmQgOiAnaDA7CisKKworLy8gU3RhZ2dpbmcgRkYgdG8gYnJlYWsgd3JpdGUgYW5kIHJlYWQgdGltaW5nIHBhdGgKK3N5bmNfd2JiIHVfc3luY193YmIoCisgICAgICAgICAuY2xrX2kgICAgICAgICAgICAoY2xrX2kgICAgICAgICAgICAgICApLCAKKyAgICAgICAgIC5yc3RfbiAgICAgICAgICAgIChyc3RfbiAgICAgICAgICAgICAgICksCisgICAgICAgICAvLyBXaXNoQm9uZSBJbnB1dCBtYXN0ZXIgSS9QCisgICAgICAgICAud2JtX2RhdF9pICAgICAgKG1fYnVzX3dyLndiZF9kYXQgICAgKSwKKyAgICAgICAgIC53Ym1fYWRyX2kgICAgICAobV9idXNfd3Iud2JkX2FkciAgICApLAorICAgICAgICAgLndibV9zZWxfaSAgICAgIChtX2J1c193ci53YmRfc2VsICAgICksCisgICAgICAgICAud2JtX2JsX2kgICAgICAgKG1fYnVzX3dyLndiZF9ibCAgICAgKSwKKyAgICAgICAgIC53Ym1fYnJ5X2kgICAgICAobV9idXNfd3Iud2JkX2JyeSAgICApLAorICAgICAgICAgLndibV93ZV9pICAgICAgIChtX2J1c193ci53YmRfd2UgICAgICksCisgICAgICAgICAud2JtX2N5Y19pICAgICAgKG1fYnVzX3dyLndiZF9jeWMgICAgKSwKKyAgICAgICAgIC53Ym1fc3RiX2kgICAgICAobV9idXNfd3Iud2JkX3N0YiAgICApLAorICAgICAgICAgLndibV90aWRfaSAgICAgIChtX2J1c193ci53YmRfdGlkICAgICksCisgICAgICAgICAud2JtX2RhdF9vICAgICAgKG1fYnVzX3JkLndiZF9kYXQgICAgKSwKKyAgICAgICAgIC53Ym1fYWNrX28gICAgICAobV9idXNfcmQud2JkX2FjayAgICApLAorICAgICAgICAgLndibV9sYWNrX28gICAgIChtX2J1c19yZC53YmRfbGFjayAgICksCisgICAgICAgICAud2JtX2Vycl9vICAgICAgKG1fYnVzX3JkLndiZF9lcnIgICAgKSwKKworICAgICAgICAgLy8gU2xhdmUgSW50ZXJmYWNlCisgICAgICAgICAud2JzX2RhdF9pICAgICAgKHNfYnVzX3JkLndiZF9kYXQgICAgKSwKKyAgICAgICAgIC53YnNfYWNrX2kgICAgICAoc19idXNfcmQud2JkX2FjayAgICApLAorICAgICAgICAgLndic19sYWNrX2kgICAgIChzX2J1c19yZC53YmRfbGFjayAgICksCisgICAgICAgICAud2JzX2Vycl9pICAgICAgKHNfYnVzX3JkLndiZF9lcnIgICAgKSwKKyAgICAgICAgIC53YnNfZGF0X28gICAgICAoc19idXNfd3Iud2JkX2RhdCAgICApLAorICAgICAgICAgLndic19hZHJfbyAgICAgIChzX2J1c193ci53YmRfYWRyICAgICksCisgICAgICAgICAud2JzX3NlbF9vICAgICAgKHNfYnVzX3dyLndiZF9zZWwgICAgKSwKKyAgICAgICAgIC53YnNfYmxfbyAgICAgICAoc19idXNfd3Iud2JkX2JsICAgICApLAorICAgICAgICAgLndic19icnlfbyAgICAgIChzX2J1c193ci53YmRfYnJ5ICAgICksCisgICAgICAgICAud2JzX3dlX28gICAgICAgKHNfYnVzX3dyLndiZF93ZSAgICAgKSwKKyAgICAgICAgIC53YnNfY3ljX28gICAgICAoc19idXNfd3Iud2JkX2N5YyAgICApLAorICAgICAgICAgLndic19zdGJfbyAgICAgIChzX2J1c193ci53YmRfc3RiICAgICksCisgICAgICAgICAud2JzX3RpZF9vICAgICAgKHNfYnVzX3dyLndiZF90aWQgICAgKQorCispOworCisKK2VuZG1vZHVsZQorCg==