ZGlmZiAtLWdpdCBhL0RvYy9saWIvbGliLnRleCBiL0RvYy9saWIvbGliLnRleAppbmRleCA3NTUwMjNkLi41ZmFlZWRjIDEwMDY0NAotLS0gYS9Eb2MvbGliL2xpYi50ZXgKKysrIGIvRG9jL2xpYi9saWIudGV4CkBAIC0xMTIsNiArMTEyLDcgQEAKIFxpbnB1dHtsaWJ0ZXh0d3JhcH0KIFxpbnB1dHtsaWJjb2RlY3N9CiBcaW5wdXR7bGlidW5pY29kZWRhdGF9CitcaW5wdXR7bGlic3RyaW5ncHJlcH0KIAogXGlucHV0e2xpYm1pc2N9ICAgICAgICAgICAgICAgICAlIE1pc2NlbGxhbmVvdXMgU2VydmljZXMKIFxpbnB1dHtsaWJweWRvY30KZGlmZiAtLWdpdCBhL0RvYy9saWIvbGliY29kZWNzLnRleCBiL0RvYy9saWIvbGliY29kZWNzLnRleAppbmRleCBjYWFhYWY0Li4zODU4NmVmIDEwMDY0NAotLS0gYS9Eb2MvbGliL2xpYmNvZGVjcy50ZXgKKysrIGIvRG9jL2xpYi9saWJjb2RlY3MudGV4CkBAIC01LDcgKzUsNyBAQAogXG1vZHVsZXN5bm9wc2lze0VuY29kZSBhbmQgZGVjb2RlIGRhdGEgYW5kIHN0cmVhbXMufQogXG1vZHVsZWF1dGhvcntNYXJjLUFuZHJlIExlbWJ1cmd9e21hbEBsZW1idXJnLmNvbX0KIFxzZWN0aW9uYXV0aG9ye01hcmMtQW5kcmUgTGVtYnVyZ317bWFsQGxlbWJ1cmcuY29tfQotCitcc2VjdGlvbmF1dGhvcntNYXJ0aW4gdi4gTFwib3dpc317bWFydGluQHYubG9ld2lzLmRlfQogCiBcaW5kZXh7VW5pY29kZX0KIFxpbmRleHtDb2RlY3N9CkBAIC04MDksNiArODA5LDExIEBACiAgICAgICAgICB7Ynl0ZSBzdHJpbmd9CiAgICAgICAgICB7Q29udmVydCBvcGVyYW5kIHRvIGhleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9uLCB3aXRoIHR3byBkaWdpdHMgcGVyIGJ5dGV9CiAKK1xsaW5laXZ7aWRuYX0KKyAgICAgICAgIHt9CisgICAgICAgICB7VW5pY29kZSBzdHJpbmd9CisgICAgICAgICB7SW1wbGVtZW50cyBccmZjezM0OTB9LiBcdmVyc2lvbmFkZGVkezIuM30uIFNlZSBhbHNvIFxtb2R1bGV7ZW5jb2RpbmdzLmlkbmF9fQorCiBcbGluZWl2e21iY3N9CiAgICAgICAgICB7ZGJjc30KICAgICAgICAgIHtVbmljb2RlIHN0cmluZ30KQEAgLTgxOSw2ICs4MjQsMTEgQEAKICAgICAgICAgIHtVbmljb2RlIHN0cmluZ30KICAgICAgICAgIHtFbmNvZGluZyBvZiBQYWxtT1MgMy41fQogCitcbGluZWl2e3B1bnljb2RlfQorICAgICAgICAge30KKyAgICAgICAgIHtVbmljb2RlIHN0cmluZ30KKyAgICAgICAgIHtJbXBsZW1lbnRzIFxyZmN7MzQ5Mn0uIFx2ZXJzaW9uYWRkZWR7Mi4zfX0KKwogXGxpbmVpdntxdW9wcmlfY29kZWN9CiAgICAgICAgICB7cXVvcHJpLCBxdW90ZWQtcHJpbnRhYmxlLCBxdW90ZWRwcmludGFibGV9CiAgICAgICAgICB7Ynl0ZSBzdHJpbmd9CkBAIC04NjUsMyArODc1LDYzIEBACiAgICAgICAgICB7Q29tcHJlc3MgdGhlIG9wZXJhbmQgdXNpbmcgZ3ppcH0KIAogXGVuZHt0YWJsZWl2fQorCitcc3Vic2VjdGlvbntcbW9kdWxle2VuY29kaW5ncy5pZG5hfSAtLS0KKyAgICAgICAgICAgIEludGVybmF0aW9uYWxpemVkIERvbWFpbiBOYW1lcyBpbiBBcHBsaWNhdGlvbnN9CisKK1xkZWNsYXJlbW9kdWxle3N0YW5kYXJkfXtlbmNvZGluZ3MuaWRuYX0KK1xtb2R1bGVzeW5vcHNpc3tJbnRlcm5hdGlvbmFsaXplZCBEb21haW4gTmFtZXMgaW1wbGVtZW50YXRpb259CitcbW9kdWxlYXV0aG9ye01hcnRpbiB2LiBMXCJvd2lzfQorCitUaGlzIG1vZHVsZSBpbXBsZW1lbnRzIFxyZmN7MzQ5MH0gKEludGVybmF0aW9uYWxpemVkIERvbWFpbiBOYW1lcyBpbgorQXBwbGljYXRpb25zKSBhbmQgXHJmY3szNDkyfSAoTmFtZXByZXA6IEEgU3RyaW5ncHJlcCBQcm9maWxlIGZvcgorSW50ZXJuYXRpb25hbGl6ZWQgRG9tYWluIE5hbWVzIChJRE4pKS4gSXQgYnVpbGRzIHVwb24gdGhlCitcY29kZXtwdW55Y29kZX0gZW5jb2RpbmcgYW5kIFxtb2R1bGV7c3RyaW5ncHJlcH0uIFx2ZXJzaW9uYWRkZWR7Mi4zfQorCitUaGVzZSBSRkNzIHRvZ2V0aGVyIGRlZmluZSBhIHByb3RvY29sIHRvIHN1cHBvcnQgbm9uLUFTQ0lJIGNoYXJhY3RlcnMKK2luIGRvbWFpbiBuYW1lcy4gQSBkb21haW4gbmFtZSBjb250YWluaW5nIG5vbi1BU0NJSSBjaGFyYWN0ZXJzIChzdWNoCithcyBgYHd3dy5BbGxpYW5jZWZyYW5cLGNhaXNlLm51JycpIGlzIGNvbnZlcnRlZCBpbnRvIGFuCitBU0NJSS1jb21wYXRpYmxlIGVuY29kaW5nIChBQ0UsIHN1Y2ggYXMKK2Bgd3d3LnhuLS1hbGxpYW5jZWZyYW5haXNlLW5wYi5udScnKS4gVGhlIEFDRSBmb3JtIG9mIHRoZSBkb21haW4gbmFtZQoraXMgdGhlbiB1c2VkIGluIGFsbCBwbGFjZXMgd2hlcmUgYXJiaXRyYXJ5IGNoYXJhY3RlcnMgYXJlIG5vdCBhbGxvd2VkCitieSB0aGUgcHJvdG9jb2wsIHN1Y2ggYXMgRE5TIHF1ZXJpZXMsIEhUVFAgXGNvZGV7SG9zdDp9IGZpZWxkcywgYW5kIHNvCitvbi4gVGhpcyBjb252ZXJzaW9uIGlzIGNhcnJpZWQgb3V0IGluIHRoZSBhcHBsaWNhdGlvbjsgaWYgcG9zc2libGUKK2ludmlzaWJsZSB0byB0aGUgdXNlcjogVGhlIGFwcGxpY2F0aW9uIHNob3VsZCB0cmFuc3BhcmVudGx5IGNvbnZlcnQKK1VuaWNvZGUgZG9tYWluIGxhYmVscyB0byBJRE5BIG9uIHRoZSB3aXJlLCBhbmQgY29udmVydCBiYWNrIEFDRSBsYWJlbHMKK3RvIFVuaWNvZGUgYmVmb3JlIHByZXNlbnRpbmcgdGhlbSB0byB0aGUgdXNlci4KKworUHl0aG9uIHN1cHBvcnRzIHRoaXMgY29udmVyc2lvbiBpbiBzZXZlcmFsIHdheXM6IFRoZSBcY29kZXtpZG5hfSBjb2RlYworYWxsb3dzIHRvIGNvbnZlcnQgYmV0d2VlbiBVbmljb2RlIGFuZCB0aGUgQUNFLiBGdXJ0aGVybW9yZSwgdGhlCitcbW9kdWxle3NvY2tldH0gbW9kdWxlIHRyYW5zcGFyZW50bHkgY29udmVydHMgVW5pY29kZSBob3N0IG5hbWVzIHRvCitBQ0UsIHNvIHRoYXQgYXBwbGljYXRpb25zIG5lZWQgbm90IGJlIGNvbmNlcm5lZCBhYm91dCBjb252ZXJ0aW5nIGhvc3QKK25hbWVzIHRoZW1zZWx2ZXMgd2hlbiB0aGV5IHBhc3MgdGhlbSB0byB0aGUgc29ja2V0IG1vZHVsZS4gT24gdG9wIG9mCit0aGF0LCBtb2R1bGVzIHRoYXQgaGF2ZSBob3N0IG5hbWVzIGFzIGZ1bmN0aW9uIHBhcmFtZXRlcnMsIHN1Y2ggYXMKK1xtb2R1bGV7aHR0cGxpYn0gYW5kIFxtb2R1bGV7ZnRwbGlifSwgYWNjZXB0IFVuaWNvZGUgaG9zdCBuYW1lcworKFxtb2R1bGV7aHR0cGxpYn0gdGhlbiBhbHNvIHRyYW5zcGFyZW50bHkgc2VuZHMgYW4gSUROQSBob3N0bmFtZSBpbgordGhlIFxjb2Rle0hvc3Q6fSBmaWVsZCBpZiBpdCBzZW5kcyB0aGF0IGZpZWxkIGF0IGFsbCkuIAorCitXaGVuIHJlY2VpdmluZyBob3N0IG5hbWVzIGZyb20gdGhlIHdpcmUgKHN1Y2ggYXMgaW4gcmV2ZXJzZSBuYW1lCitsb29rdXApLCBubyBhdXRvbWF0aWMgY29udmVyc2lvbiB0byBVbmljb2RlIGlzIHBlcmZvcm1lZDogQXBwbGljYXRpb25zCit3aXNoaW5nIHRvIHByZXNlbnQgc3VjaCBob3N0IG5hbWVzIHRvIHRoZSB1c2VyIHNob3VsZCBkZWNvZGUgdGhlbSB0bworVW5pY29kZS4KKworVGhlIG1vZHVsZSBcbW9kdWxle2VuY29kaW5ncy5pZG5hfSBhbHNvIGltcGxlbWVudHMgdGhlIG5hbWVwcmVwCitwcm9jZWR1cmUsIHdoaWNoIHBlcmZvcm1zIGNlcnRhaW4gbm9ybWFsaXphdGlvbnMgb24gaG9zdCBuYW1lcywgdG8KK2FjaGlldmUgY2FzZS1pbnNlbnNpdGl2aXR5IG9mIGludGVybmF0aW9uYWwgZG9tYWluIG5hbWVzLCBhbmQgdG8gdW5pZnkKK3NpbWlsYXIgY2hhcmFjdGVycy4gVGhlIG5hbWVwcmVwIGZ1bmN0aW9ucyBjYW4gYmUgdXNlZCBkaXJlY3RseSBpZgorZGVzaXJlZC4KKworXGJlZ2lue2Z1bmNkZXNjfXtuYW1lcHJlcH17bGFiZWx9CitSZXR1cm4gdGhlIG5hbWVwcmVwcGVkIHZlcnNpb24gb2YgXHZhcntsYWJlbH0uIFRoZSBpbXBsZW1lbnRhdGlvbgorY3VycmVudGx5IGFzc3VtZXMgcXVlcnkgc3RyaW5ncywgc28gXGNvZGV7QWxsb3dVbmFzc2lnbmVkfSBpcwordHJ1ZS4KK1xlbmR7ZnVuY2Rlc2N9CisKK1xiZWdpbntmdW5jZGVzY317VG9BU0NDSUl9e2xhYmVsfQorQ29udmVydCBhIGxhYmVsIHRvIEFTQ0lJLCBhcyBzcGVjaWZpZWQgaW4gXHJmY3szNDkwfS4KK1xjb2Rle1VzZVNURDNBU0NJSVJ1bGVzfSBpcyBhc3N1bWVkIHRvIGJlIGZhbHNlLgorXGVuZHtmdW5jZGVzY30KKworXGJlZ2lue2Z1bmNkZXNjfXtUb1VuaWNvZGV9e2xhYmVsfQorQ29udmVydCBhIGxhYmVsIHRvIFVuaWNvZGUsIGFzIHNwZWNpZmllZCBpbiBccmZjezM0OTB9LgorXGVuZHtmdW5jZGVzY30KZGlmZiAtLWdpdCBhL0RvYy9saWIvbGlic3RyaW5ncHJlcC50ZXggYi9Eb2MvbGliL2xpYnN0cmluZ3ByZXAudGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0OTJkMDIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2MvbGliL2xpYnN0cmluZ3ByZXAudGV4CkBAIC0wLDAgKzEsMTM0IEBACitcc2VjdGlvbntcbW9kdWxle3N0cmluZ3ByZXB9IC0tLQorICAgICAgICAgSW50ZXJuZXQgU3RyaW5nIFByZXBhcmF0aW9ufQorCitcZGVjbGFyZW1vZHVsZXtzdGFuZGFyZH17c3RyaW5ncHJlcH0KK1xtb2R1bGVzeW5vcHNpc3tTdHJpbmcgcHJlcGFyYXRpb24sIGFzIHBlciBSRkMgMzQ1M30KK1xtb2R1bGVhdXRob3J7TWFydGluIHYuIExcIm93aXN9e21hcnRpbkB2LmxvZXdpcy5kZX0KK1xzZWN0aW9uYXV0aG9ye01hcnRpbiB2LiBMXCJvd2lzfXttYXJ0aW5Adi5sb2V3aXMuZGV9CisKK1doZW4gaWRlbnRpZnlpbmcgdGhpbmdzIChzdWNoIGFzIGhvc3QgbmFtZXMpIGluIHRoZSBpbnRlcm5ldCwgaXQgaXMKK29mdGVuIG5lY2Vzc2FyeSB0byBjb21wYXJlIHN1Y2ggaWRlbnRpZmljYXRpb25zIGZvcgorYGBlcXVhbGl0eScnLiBFeGFjdGx5IGhvdyB0aGlzIGNvbXBhcmlzb24gaXMgZXhlY3V0ZWQgbWF5IGRlcGVuZCBvbgordGhlIGFwcGxpY2F0aW9uIGRvbWFpbiwgZS5nLiB3aGV0aGVyIGl0IHNob3VsZCBiZSBjYXNlLWluc2Vuc2l0aXZlIG9yCitub3QuIEl0IG1heSBiZSBhbHNvIG5lY2Vzc2FyeSB0byByZXN0cmljdCB0aGUgcG9zc2libGUKK2lkZW50aWZpY2F0aW9ucywgdG8gYWxsb3cgb25seSBpZGVudGlmaWNhdGlvbnMgY29uc2lzdGluZyBvZgorYGBwcmludGFibGUnJyBjaGFyYWN0ZXJzLgorCitccmZjezM0NTR9IGRlZmluZXMgYSBwcm9jZWR1cmUgZm9yIGBgcHJlcGFyaW5nJycgVW5pY29kZSBzdHJpbmdzIGluCitpbnRlcm5ldCBwcm90b2NvbHMuIEJlZm9yZSBwYXNzaW5nIHN0cmluZ3Mgb250byB0aGUgd2lyZSwgdGhleSBhcmUKK3Byb2Nlc3NlZCB3aXRoIHRoZSBwcmVwYXJhdGlvbiBwcm9jZWR1cmUsIGFmdGVyIHdoaWNoIHRoZXkgaGF2ZSBhCitjZXJ0YWluIG5vcm1hbGl6ZWQgZm9ybS4gVGhlIFJGQyBkZWZpbmVzIGEgc2V0IG9mIHRhYmxlcywgd2hpY2ggY2FuIGJlCitjb21iaW5lZCBpbnRvIHByb2ZpbGVzLiBFYWNoIHByb2ZpbGUgbXVzdCBkZWZpbmUgd2hpY2ggdGFibGVzIGl0IHVzZXMsCithbmQgd2hhdCBvdGhlciBvcHRpb25hbCBwYXJ0cyBvZiB0aGUgXGNvZGV7c3RyaW5ncHJlcH0gcHJvY2VkdXJlIGFyZQorcGFydCBvZiB0aGUgcHJvZmlsZS4gT25lIGV4YW1wbGUgb2YgYSBcY29kZXtzdHJpbmdwcmVwfSBwcm9maWxlIGlzCitcY29kZXtuYW1lcHJlcH0sIHdoaWNoIGlzIHVzZWQgZm9yIGludGVybmF0aW9uYWxpemVkIGRvbWFpbiBuYW1lcy4KKworVGhlIG1vZHVsZSBcbW9kdWxle3N0cmluZ3ByZXB9IG9ubHkgZXhwb3NlcyB0aGUgdGFibGVzIGZyb20gUkZDCiszNDU0LiBBcyB0aGVzZSB0YWJsZXMgd291bGQgYmUgdmVyeSBsYXJnZSB0byByZXByZXNlbnQgdGhlbSBhcworZGljdGlvbmFyaWVzIG9yIGxpc3RzLCB0aGUgbW9kdWxlIHVzZXMgdGhlIFVuaWNvZGUgY2hhcmFjdGVyIGRhdGFiYXNlCitpbnRlcm5hbGx5LiBUaGUgbW9kdWxlIHNvdXJjZSBjb2RlIGl0c2VsZiB3YXMgZ2VuZXJhdGVkIHVzaW5nIHRoZQorXGNvZGV7bWtzdHJpbmdwcmVwLnB5fSB1dGlsaXR5LgorCitBcyBhIHJlc3VsdCwgdGhlc2UgdGFibGVzIGFyZSBleHBvc2VkIGFzIGZ1bmN0aW9ucywgbm90IGFzIGRhdGEKK3N0cnVjdHVyZXMuIFRoZXJlIGFyZSB0d28ga2luZHMgb2YgdGFibGVzIGluIHRoZSBSRkM6IHNldHMgYW5kCittYXBwaW5ncy4gRm9yIGEgc2V0LCBcbW9kdWxle3N0cmluZ3ByZXB9IHByb3ZpZGVzIHRoZSBgYGNoYXJhY3RlcmlzdGljCitmdW5jdGlvbicnLCBpLmUuIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRydWUgaWYgdGhlIHBhcmFtZXRlciBpcyBwYXJ0CitvZiB0aGUgc2V0LiBGb3IgbWFwcGluZ3MsIGl0IHByb3ZpZGVzIHRoZSBtYXBwaW5nIGZ1bmN0aW9uOiBnaXZlbiB0aGUKK2tleSwgaXQgcmV0dXJucyB0aGUgYXNzb2NpYXRlZCB2YWx1ZS4gQmVsb3cgaXMgYSBsaXN0IG9mIGFsbCBmdW5jdGlvbnMKK2F2YWlsYWJsZSBpbiB0aGUgbW9kdWxlLgorCitcYmVnaW57ZnVuY2Rlc2N9e2luX3RhYmxlX2ExfXtjb2RlfQorRGV0ZXJtaW5lIHdoZXRoZXIgXHZhcntjb2RlfSBpcyBpbiB0YWJsZXtBLjF9IChVbmFzc2lnbmVkIGNvZGUgcG9pbnRzCitpbiBVbmljb2RlIDMuMikuCitcZW5ke2Z1bmNkZXNjfQorCitcYmVnaW57ZnVuY2Rlc2N9e2luX3RhYmxlX2IxfXtjb2RlfQorRGV0ZXJtaW5lIHdoZXRoZXIgXHZhcntjb2RlfSBpcyBpbiB0YWJsZXtCLjF9IChDb21tb25seSBtYXBwZWQgdG8KK25vdGhpbmcpLgorXGVuZHtmdW5jZGVzY30KKworXGJlZ2lue2Z1bmNkZXNjfXttYXBfdGFibGVfYjJ9e2NvZGV9CitSZXR1cm4gdGhlIG1hcHBlZCB2YWx1ZSBmb3IgXHZhcntjb2RlfSBhY2NvcmRpbmcgdG8gdGFibGV7Qi4yfSAKKyhNYXBwaW5nIGZvciBjYXNlLWZvbGRpbmcgdXNlZCB3aXRoIE5GS0MpLgorXGVuZHtmdW5jZGVzY30KKworXGJlZ2lue2Z1bmNkZXNjfXttYXBfdGFibGVfYjN9e2NvZGV9CitSZXR1cm4gdGhlIG1hcHBlZCB2YWx1ZSBmb3IgXHZhcntjb2RlfSBhY2NvcmRpbmcgdG8gdGFibGV7Qi4zfSAKKyhNYXBwaW5nIGZvciBjYXNlLWZvbGRpbmcgdXNlZCB3aXRoIG5vIG5vcm1hbGl6YXRpb24pLgorXGVuZHtmdW5jZGVzY30KKworXGJlZ2lue2Z1bmNkZXNjfXtpbl90YWJsZV9jMTF9e2NvZGV9CitEZXRlcm1pbmUgd2hldGhlciBcdmFye2NvZGV9IGlzIGluIHRhYmxle0MuMS4xfSAKKyhBU0NJSSBzcGFjZSBjaGFyYWN0ZXJzKS4KK1xlbmR7ZnVuY2Rlc2N9CisKK1xiZWdpbntmdW5jZGVzY317aW5fdGFibGVfYzEyfXtjb2RlfQorRGV0ZXJtaW5lIHdoZXRoZXIgXHZhcntjb2RlfSBpcyBpbiB0YWJsZXtDLjEuMn0gCisoTm9uLUFTQ0lJIHNwYWNlIGNoYXJhY3RlcnMpLgorXGVuZHtmdW5jZGVzY30KKworXGJlZ2lue2Z1bmNkZXNjfXtpbl90YWJsZV9jMTFfYzEyfXtjb2RlfQorRGV0ZXJtaW5lIHdoZXRoZXIgXHZhcntjb2RlfSBpcyBpbiB0YWJsZXtDLjF9IAorKFNwYWNlIGNoYXJhY3RlcnMsIHVuaW9uIG9mIEMuMS4xIGFuZCBDLjEuMikuCitcZW5ke2Z1bmNkZXNjfQorCitcYmVnaW57ZnVuY2Rlc2N9e2luX3RhYmxlX2MyMX17Y29kZX0KK0RldGVybWluZSB3aGV0aGVyIFx2YXJ7Y29kZX0gaXMgaW4gdGFibGV7Qy4yLjF9IAorKEFTQ0lJIGNvbnRyb2wgY2hhcmFjdGVycykuCitcZW5ke2Z1bmNkZXNjfQorCitcYmVnaW57ZnVuY2Rlc2N9e2luX3RhYmxlX2MyMn17Y29kZX0KK0RldGVybWluZSB3aGV0aGVyIFx2YXJ7Y29kZX0gaXMgaW4gdGFibGV7Qy4yLjJ9IAorKE5vbi1BU0NJSSBjb250cm9sIGNoYXJhY3RlcnMpLgorXGVuZHtmdW5jZGVzY30KKworXGJlZ2lue2Z1bmNkZXNjfXtpbl90YWJsZV9jMjFfYzIyfXtjb2RlfQorRGV0ZXJtaW5lIHdoZXRoZXIgXHZhcntjb2RlfSBpcyBpbiB0YWJsZXtDLjJ9IAorKENvbnRyb2wgY2hhcmFjdGVycywgdW5pb24gb2YgQy4yLjEgYW5kIEMuMi4yKS4KK1xlbmR7ZnVuY2Rlc2N9CisKK1xiZWdpbntmdW5jZGVzY317aW5fdGFibGVfYzN9e2NvZGV9CitEZXRlcm1pbmUgd2hldGhlciBcdmFye2NvZGV9IGlzIGluIHRhYmxle0MuM30gCisoUHJpdmF0ZSB1c2UpLgorXGVuZHtmdW5jZGVzY30KKworXGJlZ2lue2Z1bmNkZXNjfXtpbl90YWJsZV9jNH17Y29kZX0KK0RldGVybWluZSB3aGV0aGVyIFx2YXJ7Y29kZX0gaXMgaW4gdGFibGV7Qy40fSAKKyhOb24tY2hhcmFjdGVyIGNvZGUgcG9pbnRzKS4KK1xlbmR7ZnVuY2Rlc2N9CisKK1xiZWdpbntmdW5jZGVzY317aW5fdGFibGVfYzV9e2NvZGV9CitEZXRlcm1pbmUgd2hldGhlciBcdmFye2NvZGV9IGlzIGluIHRhYmxle0MuNX0gCisoU3Vycm9nYXRlIGNvZGVzKS4KK1xlbmR7ZnVuY2Rlc2N9CisKK1xiZWdpbntmdW5jZGVzY317aW5fdGFibGVfYzZ9e2NvZGV9CitEZXRlcm1pbmUgd2hldGhlciBcdmFye2NvZGV9IGlzIGluIHRhYmxle0MuNn0gCisoSW5hcHByb3ByaWF0ZSBmb3IgcGxhaW4gdGV4dCkuCitcZW5ke2Z1bmNkZXNjfQorCitcYmVnaW57ZnVuY2Rlc2N9e2luX3RhYmxlX2M3fXtjb2RlfQorRGV0ZXJtaW5lIHdoZXRoZXIgXHZhcntjb2RlfSBpcyBpbiB0YWJsZXtDLjd9IAorKEluYXBwcm9wcmlhdGUgZm9yIGNhbm9uaWNhbCByZXByZXNlbnRhdGlvbikuCitcZW5ke2Z1bmNkZXNjfQorCitcYmVnaW57ZnVuY2Rlc2N9e2luX3RhYmxlX2M4fXtjb2RlfQorRGV0ZXJtaW5lIHdoZXRoZXIgXHZhcntjb2RlfSBpcyBpbiB0YWJsZXtDLjh9IAorKENoYW5nZSBkaXNwbGF5IHByb3BlcnRpZXMgb3IgYXJlIGRlcHJlY2F0ZWQpLgorXGVuZHtmdW5jZGVzY30KKworXGJlZ2lue2Z1bmNkZXNjfXtpbl90YWJsZV9jOX17Y29kZX0KK0RldGVybWluZSB3aGV0aGVyIFx2YXJ7Y29kZX0gaXMgaW4gdGFibGV7Qy45fSAKKyhUYWdnaW5nIGNoYXJhY3RlcnMpLgorXGVuZHtmdW5jZGVzY30KKworXGJlZ2lue2Z1bmNkZXNjfXtpbl90YWJsZV9kMX17Y29kZX0KK0RldGVybWluZSB3aGV0aGVyIFx2YXJ7Y29kZX0gaXMgaW4gdGFibGV7RC4xfSAKKyhDaGFyYWN0ZXJzIHdpdGggYmlkaXJlY3Rpb25hbCBwcm9wZXJ0eSBgYFInJyBvciBgYEFMJycpLgorXGVuZHtmdW5jZGVzY30KKworXGJlZ2lue2Z1bmNkZXNjfXtpbl90YWJsZV9kMn17Y29kZX0KK0RldGVybWluZSB3aGV0aGVyIFx2YXJ7Y29kZX0gaXMgaW4gdGFibGV7RC4yfSAKKyhDaGFyYWN0ZXJzIHdpdGggYmlkaXJlY3Rpb25hbCBwcm9wZXJ0eSBgYEwnJykuCitcZW5ke2Z1bmNkZXNjfQorCmRpZmYgLS1naXQgYS9Eb2Mvd2hhdHNuZXcvd2hhdHNuZXcyMy50ZXggYi9Eb2Mvd2hhdHNuZXcvd2hhdHNuZXcyMy50ZXgKaW5kZXggZDcwYTg0OS4uMzg2NjliMiAxMDA2NDQKLS0tIGEvRG9jL3doYXRzbmV3L3doYXRzbmV3MjMudGV4CisrKyBiL0RvYy93aGF0c25ldy93aGF0c25ldzIzLnRleApAQCAtMTc5MSw2ICsxNzkxLDI3IEBACiAKIEFueSBicmVha2FnZSBjYXVzZWQgYnkgdGhpcyBjaGFuZ2Ugc2hvdWxkIGJlIHJlcG9ydGVkIGFzIGEgYnVnLgogCitcaXRlbSBTdXBwb3J0IGZvciBpbnRlcm5hdGlvbmFsaXplZCBkb21haW4gbmFtZXMgKFJGQ3MgMzQ1NCwgMzQ5MCwKKzM0OTEsIGFuZCAzNDkyKSBoYXMgYmVlbiBhZGRlZC4gVGhlIGBgaWRuYScnIGVuY29kaW5nIGNhbiBiZSB1c2VkCit0byBjb252ZXJ0IGJldHdlZW4gYSBVbmljb2RlIGRvbWFpbiBuYW1lIGFuZCB0aGUgQVNDSUktY29tcGF0aWJsZQorZW5jb2RpbmcgKEFDRSkuCisKK1xiZWdpbnt2ZXJiYXRpbX0KKz4+PiB1Ind3dy5BbGxpYW5jZWZyYW5cLGNhaXNlLm51Ii5lbmNvZGUoImlkbmEiKQorJ3d3dy54bi0tYWxsaWFuY2VmcmFuYWlzZS1ucGIubnUnCitcZW5ke3ZlcmJhdGltfQorCitJbiBhZGRpdGlvbiwgdGhlIFxtb2R1bGV7c29ja2V0fSBoYXMgYmVlbiBleHRlbmRlZCB0byB0cmFuc3BhcmVudGx5Citjb252ZXJ0IFVuaWNvZGUgaG9zdG5hbWVzIHRvIHRoZSBBQ0UgYmVmb3JlIHBhc3NpbmcgdGhlbSB0byB0aGUgQworbGlicmFyeS4gSW4gdHVybiwgbW9kdWxlcyB0aGF0IHBhc3MgaG9zdG5hbWVzIGBgdGhyb3VnaCcnIChzdWNoIGFzCitcbW9kdWxle2h0dHBsaWJ9LCBcbW9kdWxle2Z0cGxpYn0pIGFsc28gc3VwcG9ydCBVbmljb2RlIGhvc3QgbmFtZXMKKyhodHRwbGliIGFsc28gc2VuZHMgQUNFIEhvc3Q6IGhlYWRlcnMpLiBcbW9kdWxle3VybGxpYn0gc3VwcG9ydHMKK1VuaWNvZGUgVVJMcyB3aXRoIG5vbi1BU0NJSSBob3N0IG5hbWVzIGFzIGxvbmcgYXMgdGhlIFxjb2Rle3BhdGh9IHBhcnQKK29mIHRoZSBVUkwgaXMgQVNDSUkgb25seS4KKworVG8gaW1wbGVtZW50IHRoaXMgY2hhbmdlLCB0aGUgbW9kdWxlIFxtb2R1bGV7c3RyaW5ncHJlcH0sIHRoZSB0b29sCitcY29kZXtta3N0cmluZ3ByZXB9IGFuZCB0aGUgXGNvZGV7cHVueWNvZGV9IGVuY29kaW5nIGhhdmUgYmVlbiBhZGRlZC4KKwogXGVuZHtpdGVtaXplfQogCiAKZGlmZiAtLWdpdCBhL0xpYi9lbmNvZGluZ3MvaWRuYS5weSBiL0xpYi9lbmNvZGluZ3MvaWRuYS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTRkMDRlCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2VuY29kaW5ncy9pZG5hLnB5CkBAIC0wLDAgKzEsMTg3IEBACisjIFRoaXMgbW9kdWxlIGltcGxlbWVudHMgdGhlIFJGQ3MgMzQ5MCAoSUROQSkgYW5kIDM0OTEgKE5hbWVwcmVwKQorCitpbXBvcnQgc3RyaW5ncHJlcCwgdW5pY29kZWRhdGEsIHJlLCBjb2RlY3MKKworIyBJRE5BIHNlY3Rpb24gMy4xCitkb3RzID0gcmUuY29tcGlsZSh1IltcdTAwMkVcdTMwMDJcdUZGMEVcdUZGNjFdIikKKworIyBJRE5BIHNlY3Rpb24gNQorYWNlX3ByZWZpeCA9ICJ4bi0tIgordWFjZV9wcmVmaXggPSB1bmljb2RlKGFjZV9wcmVmaXgsICJhc2NpaSIpCisKKyMgVGhpcyBhc3N1bWVzIHF1ZXJ5IHN0cmluZ3MsIHNvIEFsbG93VW5hc3NpZ25lZCBpcyB0cnVlCitkZWYgbmFtZXByZXAobGFiZWwpOgorICAgICMgTWFwCisgICAgbmV3bGFiZWwgPSBbXQorICAgIGZvciBjIGluIGxhYmVsOgorICAgICAgICBpZiBzdHJpbmdwcmVwLmluX3RhYmxlX2IxKGMpOgorICAgICAgICAgICAgIyBNYXAgdG8gbm90aGluZworICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgbmV3bGFiZWwuYXBwZW5kKHN0cmluZ3ByZXAubWFwX3RhYmxlX2IyKGMpKQorICAgIGxhYmVsID0gdSIiLmpvaW4obmV3bGFiZWwpCisgICAgCisgICAgIyBOb3JtYWxpemUKKyAgICBsYWJlbCA9IHVuaWNvZGVkYXRhLm5vcm1hbGl6ZSgiTkZLQyIsIGxhYmVsKQorICAgIAorICAgICMgUHJvaGliaXQKKyAgICBmb3IgYyBpbiBsYWJlbDoKKyAgICAgICAgaWYgc3RyaW5ncHJlcC5pbl90YWJsZV9jMTIoYykgb3IgXAorICAgICAgICAgICBzdHJpbmdwcmVwLmluX3RhYmxlX2MyMihjKSBvciBcCisgICAgICAgICAgIHN0cmluZ3ByZXAuaW5fdGFibGVfYzMoYykgb3IgXAorICAgICAgICAgICBzdHJpbmdwcmVwLmluX3RhYmxlX2M0KGMpIG9yIFwKKyAgICAgICAgICAgc3RyaW5ncHJlcC5pbl90YWJsZV9jNShjKSBvciBcCisgICAgICAgICAgIHN0cmluZ3ByZXAuaW5fdGFibGVfYzYoYykgb3IgXAorICAgICAgICAgICBzdHJpbmdwcmVwLmluX3RhYmxlX2M3KGMpIG9yIFwKKyAgICAgICAgICAgc3RyaW5ncHJlcC5pbl90YWJsZV9jOChjKSBvciBcCisgICAgICAgICAgIHN0cmluZ3ByZXAuaW5fdGFibGVfYzkoYyk6CisgICAgICAgICAgICByYWlzZSBVbmljb2RlRXJyb3IsICJJbnZhbGlkIGNoYXJhY3RlciAlcyIgJSByZXByKGMpCisKKyAgICAjIENoZWNrIGJpZGkKKyAgICBSYW5kQUwgPSBtYXAoc3RyaW5ncHJlcC5pbl90YWJsZV9kMSwgbGFiZWwpCisgICAgZm9yIGMgaW4gUmFuZEFMOgorICAgICAgICBpZiBjOgorICAgICAgICAgICAgIyBUaGVyZSBpcyBhIFJhbmRBTCBjaGFyIGluIHRoZSBzdHJpbmcuIE11c3QgcGVyZm9ybSBmdXJ0aGVyCisgICAgICAgICAgICAjIHRlc3RzOgorICAgICAgICAgICAgIyAxKSBUaGUgY2hhcmFjdGVycyBpbiBzZWN0aW9uIDUuOCBNVVNUIGJlIHByb2hpYml0ZWQuCisgICAgICAgICAgICAjIFRoaXMgaXMgdGFibGUgQy44LCB3aGljaCB3YXMgYWxyZWFkeSBjaGVja2VkCisgICAgICAgICAgICAjIDIpIElmIGEgc3RyaW5nIGNvbnRhaW5zIGFueSBSYW5kQUxDYXQgY2hhcmFjdGVyLCB0aGUgc3RyaW5nCisgICAgICAgICAgICAjIE1VU1QgTk9UIGNvbnRhaW4gYW55IExDYXQgY2hhcmFjdGVyLgorICAgICAgICAgICAgaWYgZmlsdGVyKHN0cmluZ3ByZXAuaW5fdGFibGVfZDIsIGxhYmVsKToKKyAgICAgICAgICAgICAgICByYWlzZSBVbmljb2RlRXJyb3IsICJWaW9sYXRpb24gb2YgQklESSByZXF1aXJlbWVudCAyIgorCisgICAgICAgICAgICAjIDMpIElmIGEgc3RyaW5nIGNvbnRhaW5zIGFueSBSYW5kQUxDYXQgY2hhcmFjdGVyLCBhCisgICAgICAgICAgICAjIFJhbmRBTENhdCBjaGFyYWN0ZXIgTVVTVCBiZSB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZQorICAgICAgICAgICAgIyBzdHJpbmcsIGFuZCBhIFJhbmRBTENhdCBjaGFyYWN0ZXIgTVVTVCBiZSB0aGUgbGFzdAorICAgICAgICAgICAgIyBjaGFyYWN0ZXIgb2YgdGhlIHN0cmluZy4KKyAgICAgICAgICAgIGlmIG5vdCBSYW5kQUxbMF0gb3Igbm90IFJhbmRBTFstMV06CisgICAgICAgICAgICAgICAgcmFpc2UgVW5pY29kZUVycm9yLCAiVmlvbGF0aW9uIG9mIEJJREkgcmVxdWlyZW1lbnQgMyIKKworICAgIHJldHVybiBsYWJlbAorCitkZWYgVG9BU0NJSShsYWJlbCk6CisgICAgdHJ5OgorICAgICAgICAjIFN0ZXAgMTogdHJ5IEFTQ0lJCisgICAgICAgIGxhYmVsID0gbGFiZWwuZW5jb2RlKCJhc2NpaSIpCisgICAgZXhjZXB0IFVuaWNvZGVFcnJvcjoKKyAgICAgICAgcGFzcworICAgIGVsc2U6CisgICAgICAgICMgU2tpcCB0byBzdGVwIDM6IFVzZVNURDNBU0NJSVJ1bGVzIGlzIGZhbHNlLCBzbworICAgICAgICAjIFNraXAgdG8gc3RlcCA4LgorICAgICAgICBpZiAwIDwgbGVuKGxhYmVsKSA8IDY0OgorICAgICAgICAgICAgcmV0dXJuIGxhYmVsCisgICAgICAgIHJhaXNlIFVuaWNvZGVFcnJvciwgImxhYmVsIHRvbyBsb25nIgorCisgICAgIyBTdGVwIDI6IG5hbWVwcmVwCisgICAgbGFiZWwgPSBuYW1lcHJlcChsYWJlbCkKKworICAgICMgU3RlcCAzOiBVc2VTVEQzQVNDSUlSdWxlcyBpcyBmYWxzZQorICAgICMgU3RlcCA0OiB0cnkgQVNDSUkKKyAgICB0cnk6CisgICAgICAgIGxhYmVsID0gbGFiZWwuZW5jb2RlKCJhc2NpaSIpCisgICAgZXhjZXB0IFVuaWNvZGVFcnJvcjoKKyAgICAgICAgcGFzcworICAgIGVsc2U6CisgICAgICAgICMgU2tpcCB0byBzdGVwIDguCisgICAgICAgIGlmIDAgPCBsZW4obGFiZWwpIDwgNjQ6CisgICAgICAgICAgICByZXR1cm4gbGFiZWwKKyAgICAgICAgcmFpc2UgVW5pY29kZUVycm9yLCAibGFiZWwgdG9vIGxvbmciCisKKyAgICAjIFN0ZXAgNTogQ2hlY2sgQUNFIHByZWZpeAorICAgIGlmIGxhYmVsLnN0YXJ0c3dpdGgodWFjZV9wcmVmaXgpOgorICAgICAgICByYWlzZSBVbmljb2RlRXJyb3IsICJMYWJlbCBzdGFydHMgd2l0aCBBQ0UgcHJlZml4IgorCisgICAgIyBTdGVwIDY6IEVuY29kZSB3aXRoIFBVTllDT0RFCisgICAgbGFiZWwgPSBsYWJlbC5lbmNvZGUoInB1bnljb2RlIikKKworICAgICMgU3RlcCA3OiBQcmVwZW5kIEFDRSBwcmVmaXgKKyAgICBsYWJlbCA9IGFjZV9wcmVmaXggKyBsYWJlbAorCisgICAgIyBTdGVwIDg6IENoZWNrIHNpemUKKyAgICBpZiAwIDwgbGVuKGxhYmVsKSA8IDY0OgorICAgICAgICByZXR1cm4gbGFiZWwKKyAgICByYWlzZSBVbmljb2RlRXJyb3IsICJsYWJlbCB0b28gbG9uZyIKKworZGVmIFRvVW5pY29kZShsYWJlbCk6CisgICAgIyBTdGVwIDE6IENoZWNrIGZvciBBU0NJSQorICAgIGlmIGlzaW5zdGFuY2UobGFiZWwsIHN0cik6CisgICAgICAgIHB1cmVfYXNjaWkgPSBUcnVlCisgICAgZWxzZToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbGFiZWwgPSBsYWJlbC5lbmNvZGUoImFzY2lpIikKKyAgICAgICAgICAgIHB1cmVfYXNjaWkgPSBUcnVlCisgICAgICAgIGV4Y2VwdCBVbmljb2RlRXJyb3I6CisgICAgICAgICAgICBwdXJlX2FzY2lpID0gRmFsc2UKKyAgICBpZiBub3QgcHVyZV9hc2NpaToKKyAgICAgICAgIyBTdGVwIDI6IFBlcmZvcm0gbmFtZXByZXAKKyAgICAgICAgbGFiZWwgPSBuYW1lcHJlcChsYWJlbCkKKyAgICAgICAgIyBJdCBkb2Vzbid0IHNheSB0aGlzLCBidXQgYXBwYXJlbnRseSwgaXQgc2hvdWxkIGJlIEFTQ0lJIG5vdworICAgICAgICB0cnk6CisgICAgICAgICAgICBsYWJlbCA9IGxhYmVsLmVuY29kZSgiYXNjaWkiKQorICAgICAgICBleGNlcHQgVW5pY29kZUVycm9yOgorICAgICAgICAgICAgcmFpc2UgVW5pY29kZUVycm9yLCAiSW52YWxpZCBjaGFyYWN0ZXIgaW4gSUROIGxhYmVsIgorICAgICMgU3RlcCAzOiBDaGVjayBmb3IgQUNFIHByZWZpeAorICAgIGlmIG5vdCBsYWJlbC5zdGFydHN3aXRoKGFjZV9wcmVmaXgpOgorICAgICAgICByZXR1cm4gdW5pY29kZShsYWJlbCwgImFzY2lpIikKKworICAgICMgU3RlcCA0OiBSZW1vdmUgQUNFIHByZWZpeAorICAgIGxhYmVsMSA9IGxhYmVsW2xlbihhY2VfcHJlZml4KTpdCisKKyAgICAjIFN0ZXAgNTogRGVjb2RlIHVzaW5nIFBVTllDT0RFCisgICAgcmVzdWx0ID0gbGFiZWwxLmRlY29kZSgicHVueWNvZGUiKQorCisgICAgIyBTdGVwIDY6IEFwcGx5IFRvQVNDSUkKKyAgICBsYWJlbDIgPSBUb0FTQ0lJKHJlc3VsdCkKKworICAgICMgU3RlcCA3OiBDb21wYXJlIHRoZSByZXN1bHQgb2Ygc3RlcCA2IHdpdGggdGhlIG9uZSBvZiBzdGVwIDMKKyAgICAjIGxhYmVsMiB3aWxsIGFscmVhZHkgYmUgaW4gbG93ZXIgY2FzZS4KKyAgICBpZiBsYWJlbC5sb3dlcigpICE9IGxhYmVsMjoKKyAgICAgICAgcmFpc2UgVW5pY29kZUVycm9yLCAoIklETkEgZG9lcyBub3Qgcm91bmQtdHJpcCIsIGxhYmVsLCBsYWJlbDIpCisKKyAgICAjIFN0ZXAgODogcmV0dXJuIHRoZSByZXN1bHQgb2Ygc3RlcCA1CisgICAgcmV0dXJuIHJlc3VsdAorICAgICAgICAKKyMjIyBDb2RlYyBBUElzCisKK2NsYXNzIENvZGVjKGNvZGVjcy5Db2RlYyk6CisgICAgZGVmIGVuY29kZShzZWxmLGlucHV0LGVycm9ycz0nc3RyaWN0Jyk6CisKKyAgICAgICAgaWYgZXJyb3JzICE9ICdzdHJpY3QnOgorICAgICAgICAgICAgIyBJRE5BIGlzIHF1aXRlIGNsZWFyIHRoYXQgaW1wbGVtZW50YXRpb25zIG11c3QgYmUgc3RyaWN0CisgICAgICAgICAgICByYWlzZSBVbmljb2RlRXJyb3IsICJ1bnN1cHBvcnRlZCBlcnJvciBoYW5kbGluZyAiK2Vycm9ycworCisgICAgICAgIHJlc3VsdCA9IFtdCisgICAgICAgIGZvciBsYWJlbCBpbiBkb3RzLnNwbGl0KGlucHV0KToKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoVG9BU0NJSShsYWJlbCkpCisgICAgICAgICMgSm9pbiB3aXRoIFUrMDAyRQorICAgICAgICByZXR1cm4gIi4iLmpvaW4ocmVzdWx0KSwgbGVuKGlucHV0KQorCisgICAgZGVmIGRlY29kZShzZWxmLGlucHV0LGVycm9ycz0nc3RyaWN0Jyk6CisgICAgICAgIAorICAgICAgICBpZiBlcnJvcnMgIT0gJ3N0cmljdCc6CisgICAgICAgICAgICByYWlzZSBVbmljb2RlRXJyb3IsICJVbnN1cHBvcnRlZCBlcnJvciBoYW5kbGluZyAiK2Vycm9ycworCisgICAgICAgICMgSUROQSBhbGxvd3MgZGVjb2RpbmcgdG8gb3BlcmF0ZSBvbiBVbmljb2RlIHN0cmluZ3MsIHRvby4KKyAgICAgICAgaWYgaXNpbnN0YW5jZShpbnB1dCwgdW5pY29kZSk6CisgICAgICAgICAgICBsYWJlbHMgPSBkb3RzLnNwbGl0KGlucHV0KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBNdXN0IGJlIEFTQ0lJIHN0cmluZworICAgICAgICAgICAgdW5pY29kZShpbnB1dCwgImFzY2lpIikKKyAgICAgICAgICAgIGxhYmVscyA9IGlucHV0LnNwbGl0KCIuIikKKworICAgICAgICByZXN1bHQgPSBbXQorICAgICAgICBmb3IgbGFiZWwgaW4gbGFiZWxzOgorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChUb1VuaWNvZGUobGFiZWwpKQorCisgICAgICAgIHJldHVybiB1Ii4iLmpvaW4ocmVzdWx0KSwgbGVuKGlucHV0KQorCitjbGFzcyBTdHJlYW1Xcml0ZXIoQ29kZWMsY29kZWNzLlN0cmVhbVdyaXRlcik6CisgICAgcGFzcworCitjbGFzcyBTdHJlYW1SZWFkZXIoQ29kZWMsY29kZWNzLlN0cmVhbVJlYWRlcik6CisgICAgcGFzcworCisjIyMgZW5jb2RpbmdzIG1vZHVsZSBBUEkKKworZGVmIGdldHJlZ2VudHJ5KCk6CisKKyAgICByZXR1cm4gKENvZGVjKCkuZW5jb2RlLENvZGVjKCkuZGVjb2RlLFN0cmVhbVJlYWRlcixTdHJlYW1Xcml0ZXIpCmRpZmYgLS1naXQgYS9MaWIvZW5jb2RpbmdzL3B1bnljb2RlLnB5IGIvTGliL2VuY29kaW5ncy9wdW55Y29kZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lN2YyZDQ1Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL2VuY29kaW5ncy9wdW55Y29kZS5weQpAQCAtMCwwICsxLDIyMiBAQAorIyAtKi0gY29kaW5nOiBpc28tODg1OS0xIC0qLQorIiIiIENvZGVjIGZvciB0aGUgUHVuaWNvZGUgZW5jb2RpbmcsIGFzIHNwZWNpZmllZCBpbiBSRkMgMzQ5MgorCitXcml0dGVuIGJ5IE1hcnRpbiB2LiBM9ndpcy4KKyIiIgorCitpbXBvcnQgY29kZWNzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBFbmNvZGluZyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2RlZiBzZWdyZWdhdGUoc3RyKToKKyAgICAiIiIzLjEgQmFzaWMgY29kZSBwb2ludCBzZWdyZWdhdGlvbiIiIiAKKyAgICBiYXNlID0gW10KKyAgICBleHRlbmRlZCA9IHt9CisgICAgZm9yIGMgaW4gc3RyOgorICAgICAgICBpZiBvcmQoYykgPCAxMjg6CisgICAgICAgICAgICBiYXNlLmFwcGVuZChjKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZXh0ZW5kZWRbY10gPSAxCisgICAgZXh0ZW5kZWQgPSBleHRlbmRlZC5rZXlzKCkKKyAgICBleHRlbmRlZC5zb3J0KCkKKyAgICByZXR1cm4gIiIuam9pbihiYXNlKS5lbmNvZGUoImFzY2lpIiksZXh0ZW5kZWQKKworZGVmIHNlbGVjdGl2ZV9sZW4oc3RyLCBtYXgpOgorICAgICIiIlJldHVybiB0aGUgbGVuZ3RoIG9mIHN0ciwgY29uc2lkZXJpbmcgb25seSBjaGFyYWN0ZXJzIGJlbG93IG1heC4iIiIKKyAgICByZXMgPSAwCisgICAgZm9yIGMgaW4gc3RyOgorICAgICAgICBpZiBvcmQoYykgPCBtYXg6CisgICAgICAgICAgICByZXMgKz0gMQorICAgIHJldHVybiByZXMKKworZGVmIHNlbGVjdGl2ZV9maW5kKHN0ciwgY2hhciwgaW5kZXgsIHBvcyk6CisgICAgIiIiUmV0dXJuIGEgcGFpciAoaW5kZXgsIHBvcyksIGluZGljYXRpbmcgdGhlIG5leHQgb2NjdXJyZW5jZSBvZgorICAgIGNoYXIgaW4gc3RyLiBpbmRleCBpcyB0aGUgcG9zaXRpb24gb2YgdGhlIGNoYXJhY3RlciBjb25zaWRlcmluZworICAgIG9ubHkgb3JkaW5hbHMgdXAgdG8gYW5kIGluY2x1ZGluZyBjaGFyLCBhbmQgcG9zIGlzIHRoZSBwb3NpdGlvbiBpbgorICAgIHRoZSBmdWxsIHN0cmluZy4gaW5kZXgvcG9zIGlzIHRoZSBzdGFydGluZyBwb3NpdGlvbiBpbiB0aGUgZnVsbAorICAgIHN0cmluZy4iIiIKKworICAgIGwgPSBsZW4oc3RyKQorICAgIHdoaWxlIDE6CisgICAgICAgIHBvcyArPSAxCisgICAgICAgIGlmIHBvcyA9PSBsOgorICAgICAgICAgICAgcmV0dXJuICgtMSwgLTEpCisgICAgICAgIGMgPSBzdHJbcG9zXQorICAgICAgICBpZiBjID09IGNoYXI6CisgICAgICAgICAgICByZXR1cm4gaW5kZXgrMSwgcG9zCisgICAgICAgIGVsaWYgYyA8IGNoYXI6CisgICAgICAgICAgICBpbmRleCArPSAxCisKK2RlZiBpbnNlcnRpb25fdW5zb3J0KHN0ciwgZXh0ZW5kZWQpOgorICAgICIiIjMuMiBJbnNlcnRpb24gdW5zb3J0IGNvZGluZyIiIgorICAgIG9sZGNoYXIgPSAweDgwCisgICAgcmVzdWx0ID0gW10KKyAgICBvbGRpbmRleCA9IC0xCisgICAgZm9yIGMgaW4gZXh0ZW5kZWQ6CisgICAgICAgIGluZGV4ID0gcG9zID0gLTEKKyAgICAgICAgY2hhciA9IG9yZChjKQorICAgICAgICBjdXJsZW4gPSBzZWxlY3RpdmVfbGVuKHN0ciwgY2hhcikKKyAgICAgICAgZGVsdGEgPSAoY3VybGVuKzEpICogKGNoYXIgLSBvbGRjaGFyKQorICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgaW5kZXgscG9zID0gc2VsZWN0aXZlX2ZpbmQoc3RyLGMsaW5kZXgscG9zKQorICAgICAgICAgICAgaWYgaW5kZXggPT0gLTE6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGRlbHRhICs9IGluZGV4IC0gb2xkaW5kZXgKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoZGVsdGEtMSkKKyAgICAgICAgICAgIG9sZGluZGV4ID0gaW5kZXgKKyAgICAgICAgICAgIGRlbHRhID0gMAorICAgICAgICBvbGRjaGFyID0gY2hhcgorICAgICAgICAgICAgCisgICAgcmV0dXJuIHJlc3VsdAorCitkZWYgVChqLCBiaWFzKToKKyAgICAjIFB1bnljb2RlIHBhcmFtZXRlcnM6IHRtaW4gPSAxLCB0bWF4ID0gMjYsIGJhc2UgPSAzNgorICAgIHJlcyA9IDM2ICogKGogKyAxKSAtIGJpYXMKKyAgICBpZiByZXMgPCAxOiByZXR1cm4gMQorICAgIGlmIHJlcyA+IDI2OiByZXR1cm4gMjYKKyAgICByZXR1cm4gcmVzCisKK2RpZ2l0cyA9ICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkiCitkZWYgZ2VuZXJhdGVfZ2VuZXJhbGl6ZWRfaW50ZWdlcihOLCBiaWFzKToKKyAgICAiIiIzLjMgR2VuZXJhbGl6ZWQgdmFyaWFibGUtbGVuZ3RoIGludGVnZXJzIiIiCisgICAgcmVzdWx0ID0gW10KKyAgICBqID0gMAorICAgIHdoaWxlIDE6CisgICAgICAgIHQgPSBUKGosIGJpYXMpCisgICAgICAgIGlmIE4gPCB0OgorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChkaWdpdHNbTl0pCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0CisgICAgICAgIHJlc3VsdC5hcHBlbmQoZGlnaXRzW3QgKyAoKE4gLSB0KSAlICgzNiAtIHQpKV0pCisgICAgICAgIE4gPSAoTiAtIHQpIC8vICgzNiAtIHQpCisgICAgICAgIGogKz0gMQorCitkZWYgYWRhcHQoZGVsdGEsIGZpcnN0LCBudW1jaGFycyk6CisgICAgaWYgZmlyc3Q6CisgICAgICAgIGRlbHRhIC8vPSA3MDAKKyAgICBlbHNlOgorICAgICAgICBkZWx0YSAvLz0gMgorICAgIGRlbHRhICs9IGRlbHRhIC8vIG51bWNoYXJzCisgICAgIyAoKGJhc2UgLSB0bWluKSAqIHRtYXgpIC8vIDIgPT0gNDU1CisgICAgZGl2aXNpb25zID0gMAorICAgIHdoaWxlIGRlbHRhID4gNDU1OgorICAgICAgICBkZWx0YSA9IGRlbHRhIC8vIDM1ICMgYmFzZSAtIHRtaW4KKyAgICAgICAgZGl2aXNpb25zICs9IDM2CisgICAgYmlhcyA9IGRpdmlzaW9ucyArICgzNiAqIGRlbHRhIC8vIChkZWx0YSArIDM4KSkKKyAgICByZXR1cm4gYmlhcworICAgIAorCitkZWYgZ2VuZXJhdGVfaW50ZWdlcnMoYmFzZWxlbiwgZGVsdGFzKToKKyAgICAiIiIzLjQgQmlhcyBhZGFwdGF0aW9uIiIiCisgICAgIyBQdW55Y29kZSBwYXJhbWV0ZXJzOiBpbml0aWFsIGJpYXMgPSA3MiwgZGFtcCA9IDcwMCwgc2tldyA9IDM4CisgICAgcmVzdWx0ID0gW10KKyAgICBiaWFzID0gNzIKKyAgICBmb3IgcG9pbnRzLCBkZWx0YSBpbiBlbnVtZXJhdGUoZGVsdGFzKToKKyAgICAgICAgcyA9IGdlbmVyYXRlX2dlbmVyYWxpemVkX2ludGVnZXIoZGVsdGEsIGJpYXMpCisgICAgICAgIHJlc3VsdC5leHRlbmQocykKKyAgICAgICAgYmlhcyA9IGFkYXB0KGRlbHRhLCBwb2ludHM9PTAsIGJhc2VsZW4rcG9pbnRzKzEpCisgICAgcmV0dXJuICIiLmpvaW4ocmVzdWx0KQorCitkZWYgcHVueWNvZGVfZW5jb2RlKHRleHQpOgorICAgIGJhc2UsIGV4dGVuZGVkID0gc2VncmVnYXRlKHRleHQpCisgICAgYmFzZSA9IGJhc2UuZW5jb2RlKCJhc2NpaSIpCisgICAgZGVsdGFzID0gaW5zZXJ0aW9uX3Vuc29ydCh0ZXh0LCBleHRlbmRlZCkKKyAgICBleHRlbmRlZCA9IGdlbmVyYXRlX2ludGVnZXJzKGxlbihiYXNlKSwgZGVsdGFzKQorICAgIGlmIGJhc2U6CisgICAgICAgIHJldHVybiBiYXNlICsgIi0iICsgZXh0ZW5kZWQKKyAgICByZXR1cm4gZXh0ZW5kZWQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIERlY29kaW5nICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworZGVmIGRlY29kZV9nZW5lcmFsaXplZF9udW1iZXIoZXh0ZW5kZWQsIGV4dHBvcywgYmlhcywgZXJyb3JzKToKKyAgICAiIiIzLjMgR2VuZXJhbGl6ZWQgdmFyaWFibGUtbGVuZ3RoIGludGVnZXJzIiIiCisgICAgcmVzdWx0ID0gMAorICAgIHcgPSAxCisgICAgaiA9IDAKKyAgICB3aGlsZSAxOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBjaGFyID0gb3JkKGV4dGVuZGVkW2V4dHBvc10pCisgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgorICAgICAgICAgICAgaWYgZXJyb3JzID09ICJzdHJpY3QiOgorICAgICAgICAgICAgICAgIHJhaXNlIFVuaWNvZGVFcnJvciwgImluY29tcGxldGUgcHVuaWNvZGUgc3RyaW5nIgorICAgICAgICAgICAgcmV0dXJuIGV4dHBvcyArIDEsIE5vbmUKKyAgICAgICAgZXh0cG9zICs9IDEKKyAgICAgICAgaWYgMHg0MSA8PSBjaGFyIDw9IDB4NUE6ICMgQS1aCisgICAgICAgICAgICBkaWdpdCA9IGNoYXIgLSAweDQxCisgICAgICAgIGVsaWYgMHgzMCA8PSBjaGFyIDw9IDB4Mzk6CisgICAgICAgICAgICBkaWdpdCA9IGNoYXIgLSAyMiAjIDB4MzAtMjYKKyAgICAgICAgZWxpZiBlcnJvcnMgPT0gInN0cmljdCI6CisgICAgICAgICAgICByYWlzZSBVbmljb2RlRXJyb3IoIkludmFsaWQgZXh0ZW5kZWQgY29kZSBwb2ludCAnJXMnIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgZXh0ZW5kZWRbZXh0cG9zXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBleHRwb3MsIE5vbmUKKyAgICAgICAgdCA9IFQoaiwgYmlhcykKKyAgICAgICAgcmVzdWx0ICs9IGRpZ2l0ICogdworICAgICAgICBpZiBkaWdpdCA8IHQ6CisgICAgICAgICAgICByZXR1cm4gZXh0cG9zLCByZXN1bHQKKyAgICAgICAgdyA9IHcgKiAoMzYgLSB0KQorICAgICAgICBqICs9IDEKKyAgICAgICAgCisKK2RlZiBpbnNlcnRpb25fc29ydChiYXNlLCBleHRlbmRlZCwgZXJyb3JzKToKKyAgICAiIiIzLjIgSW5zZXJ0aW9uIHVuc29ydCBjb2RpbmciIiIKKyAgICBjaGFyID0gMHg4MAorICAgIHBvcyA9IC0xCisgICAgYmlhcyA9IDcyCisgICAgZXh0cG9zID0gMAorICAgIHdoaWxlIGV4dHBvcyA8IGxlbihleHRlbmRlZCk6CisgICAgICAgIG5ld3BvcywgZGVsdGEgPSBkZWNvZGVfZ2VuZXJhbGl6ZWRfbnVtYmVyKGV4dGVuZGVkLCBleHRwb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpYXMsIGVycm9ycykKKyAgICAgICAgaWYgZGVsdGEgaXMgTm9uZToKKyAgICAgICAgICAgICMgVGhlcmUgd2FzIGFuIGVycm9yIGluIGRlY29kaW5nLiBXZSBjYW4ndCBjb250aW51ZSBiZWNhdXNlCisgICAgICAgICAgICAjIHN5bmNocm9uaXphdGlvbiBpcyBsb3N0LgorICAgICAgICAgICAgcmV0dXJuIGJhc2UKKyAgICAgICAgcG9zICs9IGRlbHRhKzEKKyAgICAgICAgY2hhciArPSBwb3MgLy8gKGxlbihiYXNlKSArIDEpCisgICAgICAgIGlmIGNoYXIgPiAweDEwRkZGRjoKKyAgICAgICAgICAgIGlmIGVycm9ycyA9PSAic3RyaWN0IjoKKyAgICAgICAgICAgICAgICByYWlzZSBVbmljb2RlRXJyb3IsICgiSW52YWxpZCBjaGFyYWN0ZXIgVSsleCIgJSBjaGFyKQorICAgICAgICAgICAgY2hhciA9IG9yZCgnPycpCisgICAgICAgIHBvcyA9IHBvcyAlIChsZW4oYmFzZSkgKyAxKQorICAgICAgICBiYXNlID0gYmFzZVs6cG9zXSArIHVuaWNocihjaGFyKSArIGJhc2VbcG9zOl0KKyAgICAgICAgYmlhcyA9IGFkYXB0KGRlbHRhLCAoZXh0cG9zID09IDApLCBsZW4oYmFzZSkpCisgICAgICAgIGV4dHBvcyA9IG5ld3BvcworICAgIHJldHVybiBiYXNlCisKK2RlZiBwdW55Y29kZV9kZWNvZGUodGV4dCwgZXJyb3JzKToKKyAgICBwb3MgPSB0ZXh0LnJmaW5kKCItIikKKyAgICBpZiBwb3MgPT0gLTE6CisgICAgICAgIGJhc2UgPSAiIgorICAgICAgICBleHRlbmRlZCA9IHRleHQKKyAgICBlbHNlOgorICAgICAgICBiYXNlID0gdGV4dFs6cG9zXQorICAgICAgICBleHRlbmRlZCA9IHRleHRbcG9zKzE6XQorICAgIGJhc2UgPSB1bmljb2RlKGJhc2UsICJhc2NpaSIsIGVycm9ycykKKyAgICBleHRlbmRlZCA9IGV4dGVuZGVkLnVwcGVyKCkKKyAgICByZXR1cm4gaW5zZXJ0aW9uX3NvcnQoYmFzZSwgZXh0ZW5kZWQsIGVycm9ycykKKyAgICAgICAgCisjIyMgQ29kZWMgQVBJcworCitjbGFzcyBDb2RlYyhjb2RlY3MuQ29kZWMpOgorICAgIGRlZiBlbmNvZGUoc2VsZixpbnB1dCxlcnJvcnM9J3N0cmljdCcpOgorCisgICAgICAgIHJlcyA9IHB1bnljb2RlX2VuY29kZShpbnB1dCkKKyAgICAgICAgcmV0dXJuIHJlcywgbGVuKGlucHV0KQorCisgICAgZGVmIGRlY29kZShzZWxmLGlucHV0LGVycm9ycz0nc3RyaWN0Jyk6CisKKyAgICAgICAgaWYgZXJyb3JzIG5vdCBpbiAoJ3N0cmljdCcsICdyZXBsYWNlJywgJ2lnbm9yZScpOgorICAgICAgICAgICAgcmFpc2UgVW5pY29kZUVycm9yLCAiVW5zdXBwb3J0ZWQgZXJyb3IgaGFuZGxpbmcgIitlcnJvcnMKKyAgICAgICAgcmVzID0gcHVueWNvZGVfZGVjb2RlKGlucHV0LCBlcnJvcnMpCisgICAgICAgIHJldHVybiByZXMsIGxlbihpbnB1dCkKKworY2xhc3MgU3RyZWFtV3JpdGVyKENvZGVjLGNvZGVjcy5TdHJlYW1Xcml0ZXIpOgorICAgIHBhc3MKKworY2xhc3MgU3RyZWFtUmVhZGVyKENvZGVjLGNvZGVjcy5TdHJlYW1SZWFkZXIpOgorICAgIHBhc3MKKworIyMjIGVuY29kaW5ncyBtb2R1bGUgQVBJCisKK2RlZiBnZXRyZWdlbnRyeSgpOgorCisgICAgcmV0dXJuIChDb2RlYygpLmVuY29kZSxDb2RlYygpLmRlY29kZSxTdHJlYW1SZWFkZXIsU3RyZWFtV3JpdGVyKQpkaWZmIC0tZ2l0IGEvTGliL2h0dHBsaWIucHkgYi9MaWIvaHR0cGxpYi5weQppbmRleCBjYTIxNWE0Li5jYWY2Y2NkIDEwMDY0NAotLS0gYS9MaWIvaHR0cGxpYi5weQorKysgYi9MaWIvaHR0cGxpYi5weQpAQCAtNjU1LDExICs2NTUsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgbmlsLCBuZXRsb2MsIG5pbCwgbmlsLCBuaWwgPSB1cmxzcGxpdCh1cmwpCiAKICAgICAgICAgICAgICAgICBpZiBuZXRsb2M6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYucHV0aGVhZGVyKCdIb3N0JywgbmV0bG9jKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnB1dGhlYWRlcignSG9zdCcsIG5ldGxvYy5lbmNvZGUoImlkbmEiKSkKICAgICAgICAgICAgICAgICBlbGlmIHNlbGYucG9ydCA9PSBIVFRQX1BPUlQ6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYucHV0aGVhZGVyKCdIb3N0Jywgc2VsZi5ob3N0KQorICAgICAgICAgICAgICAgICAgICBzZWxmLnB1dGhlYWRlcignSG9zdCcsIHNlbGYuaG9zdC5lbmNvZGUoImlkbmEiKSkKICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBzZWxmLnB1dGhlYWRlcignSG9zdCcsICIlczolcyIgJSAoc2VsZi5ob3N0LCBzZWxmLnBvcnQpKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnB1dGhlYWRlcignSG9zdCcsICIlczolcyIgJSAoc2VsZi5ob3N0LmVuY29kZSgiaWRuYSIpLCBzZWxmLnBvcnQpKQogCiAgICAgICAgICAgICAjIG5vdGU6IHdlIGFyZSBhc3N1bWluZyB0aGF0IGNsaWVudHMgd2lsbCBub3QgYXR0ZW1wdCB0byBzZXQgdGhlc2UKICAgICAgICAgICAgICMgICAgICAgaGVhZGVycyBzaW5jZSAqdGhpcyogbGlicmFyeSBtdXN0IGRlYWwgd2l0aCB0aGUKZGlmZiAtLWdpdCBhL0xpYi9zdHJpbmdwcmVwLnB5IGIvTGliL3N0cmluZ3ByZXAucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM1YjA5OAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9zdHJpbmdwcmVwLnB5CkBAIC0wLDAgKzEsMjczIEBACisjIFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQgYnkgbWtzdHJpbmdwcmVwLnB5LiBETyBOT1QgRURJVC4KKyIiIkxpYnJhcnkgdGhhdCBleHBvc2VzIHZhcmlvdXMgdGFibGVzIGZvdW5kIGluIHRoZSBTdHJpbmdQcmVwIFJGQyAzNDU0LgorCitUaGVyZSBhcmUgdHdvIGtpbmRzIG9mIHRhYmxlczogc2V0cywgZm9yIHdoaWNoIGEgbWVtYmVyIHRlc3QgaXMgcHJvdmlkZWQsCithbmQgbWFwcGluZ3MsIGZvciB3aGljaCBhIG1hcHBpbmcgZnVuY3Rpb24gaXMgcHJvdmlkZWQuCisiIiIKKworaW1wb3J0IHVuaWNvZGVkYXRhLCBzZXRzCisKK2Fzc2VydCB1bmljb2RlZGF0YS51bmlkYXRhX3ZlcnNpb24gPT0gJzMuMi4wJworCitkZWYgaW5fdGFibGVfYTEoY29kZSk6CisgICAgaWYgdW5pY29kZWRhdGEuY2F0ZWdvcnkoY29kZSkgIT0gJ0NuJzogcmV0dXJuIEZhbHNlCisgICAgYyA9IG9yZChjb2RlKQorICAgIGlmIDB4RkREMCA8PSBjIDwgMHhGREYwOiByZXR1cm4gRmFsc2UKKyAgICByZXR1cm4gKGMgJiAweEZGRkYpIG5vdCBpbiAoMHhGRkZFLCAweEZGRkYpCisKKworYjFfc2V0ID0gc2V0cy5TZXQoWzE3MywgODQ3LCA2MTUwLCA2MTU1LCA2MTU2LCA2MTU3LCA4MjAzLCA4MjA0LCA4MjA1LCA4Mjg4LCA2NTI3OV0gKyByYW5nZSg2NTAyNCw2NTA0MCkpCitkZWYgaW5fdGFibGVfYjEoY29kZSk6CisgICAgcmV0dXJuIG9yZChjb2RlKSBpbiBiMV9zZXQKKworCitiM19leGNlcHRpb25zID0geworMHhiNTp1J1x1MDNiYycsIDB4ZGY6dSdzcycsIDB4MTMwOnUnaVx1MDMwNycsIDB4MTQ5OnUnXHUwMmJjbicsCisweDE3Zjp1J3MnLCAweDFmMDp1J2pcdTAzMGMnLCAweDM0NTp1J1x1MDNiOScsIDB4MzdhOnUnIFx1MDNiOScsCisweDM5MDp1J1x1MDNiOVx1MDMwOFx1MDMwMScsIDB4M2IwOnUnXHUwM2M1XHUwMzA4XHUwMzAxJywgMHgzYzI6dSdcdTAzYzMnLCAweDNkMDp1J1x1MDNiMicsCisweDNkMTp1J1x1MDNiOCcsIDB4M2QyOnUnXHUwM2M1JywgMHgzZDM6dSdcdTAzY2QnLCAweDNkNDp1J1x1MDNjYicsCisweDNkNTp1J1x1MDNjNicsIDB4M2Q2OnUnXHUwM2MwJywgMHgzZjA6dSdcdTAzYmEnLCAweDNmMTp1J1x1MDNjMScsCisweDNmMjp1J1x1MDNjMycsIDB4M2Y1OnUnXHUwM2I1JywgMHg1ODc6dSdcdTA1NjVcdTA1ODInLCAweDFlOTY6dSdoXHUwMzMxJywKKzB4MWU5Nzp1J3RcdTAzMDgnLCAweDFlOTg6dSd3XHUwMzBhJywgMHgxZTk5OnUneVx1MDMwYScsIDB4MWU5YTp1J2FcdTAyYmUnLAorMHgxZTliOnUnXHUxZTYxJywgMHgxZjUwOnUnXHUwM2M1XHUwMzEzJywgMHgxZjUyOnUnXHUwM2M1XHUwMzEzXHUwMzAwJywgMHgxZjU0OnUnXHUwM2M1XHUwMzEzXHUwMzAxJywKKzB4MWY1Njp1J1x1MDNjNVx1MDMxM1x1MDM0MicsIDB4MWY4MDp1J1x1MWYwMFx1MDNiOScsIDB4MWY4MTp1J1x1MWYwMVx1MDNiOScsIDB4MWY4Mjp1J1x1MWYwMlx1MDNiOScsCisweDFmODM6dSdcdTFmMDNcdTAzYjknLCAweDFmODQ6dSdcdTFmMDRcdTAzYjknLCAweDFmODU6dSdcdTFmMDVcdTAzYjknLCAweDFmODY6dSdcdTFmMDZcdTAzYjknLAorMHgxZjg3OnUnXHUxZjA3XHUwM2I5JywgMHgxZjg4OnUnXHUxZjAwXHUwM2I5JywgMHgxZjg5OnUnXHUxZjAxXHUwM2I5JywgMHgxZjhhOnUnXHUxZjAyXHUwM2I5JywKKzB4MWY4Yjp1J1x1MWYwM1x1MDNiOScsIDB4MWY4Yzp1J1x1MWYwNFx1MDNiOScsIDB4MWY4ZDp1J1x1MWYwNVx1MDNiOScsIDB4MWY4ZTp1J1x1MWYwNlx1MDNiOScsCisweDFmOGY6dSdcdTFmMDdcdTAzYjknLCAweDFmOTA6dSdcdTFmMjBcdTAzYjknLCAweDFmOTE6dSdcdTFmMjFcdTAzYjknLCAweDFmOTI6dSdcdTFmMjJcdTAzYjknLAorMHgxZjkzOnUnXHUxZjIzXHUwM2I5JywgMHgxZjk0OnUnXHUxZjI0XHUwM2I5JywgMHgxZjk1OnUnXHUxZjI1XHUwM2I5JywgMHgxZjk2OnUnXHUxZjI2XHUwM2I5JywKKzB4MWY5Nzp1J1x1MWYyN1x1MDNiOScsIDB4MWY5ODp1J1x1MWYyMFx1MDNiOScsIDB4MWY5OTp1J1x1MWYyMVx1MDNiOScsIDB4MWY5YTp1J1x1MWYyMlx1MDNiOScsCisweDFmOWI6dSdcdTFmMjNcdTAzYjknLCAweDFmOWM6dSdcdTFmMjRcdTAzYjknLCAweDFmOWQ6dSdcdTFmMjVcdTAzYjknLCAweDFmOWU6dSdcdTFmMjZcdTAzYjknLAorMHgxZjlmOnUnXHUxZjI3XHUwM2I5JywgMHgxZmEwOnUnXHUxZjYwXHUwM2I5JywgMHgxZmExOnUnXHUxZjYxXHUwM2I5JywgMHgxZmEyOnUnXHUxZjYyXHUwM2I5JywKKzB4MWZhMzp1J1x1MWY2M1x1MDNiOScsIDB4MWZhNDp1J1x1MWY2NFx1MDNiOScsIDB4MWZhNTp1J1x1MWY2NVx1MDNiOScsIDB4MWZhNjp1J1x1MWY2Nlx1MDNiOScsCisweDFmYTc6dSdcdTFmNjdcdTAzYjknLCAweDFmYTg6dSdcdTFmNjBcdTAzYjknLCAweDFmYTk6dSdcdTFmNjFcdTAzYjknLCAweDFmYWE6dSdcdTFmNjJcdTAzYjknLAorMHgxZmFiOnUnXHUxZjYzXHUwM2I5JywgMHgxZmFjOnUnXHUxZjY0XHUwM2I5JywgMHgxZmFkOnUnXHUxZjY1XHUwM2I5JywgMHgxZmFlOnUnXHUxZjY2XHUwM2I5JywKKzB4MWZhZjp1J1x1MWY2N1x1MDNiOScsIDB4MWZiMjp1J1x1MWY3MFx1MDNiOScsIDB4MWZiMzp1J1x1MDNiMVx1MDNiOScsIDB4MWZiNDp1J1x1MDNhY1x1MDNiOScsCisweDFmYjY6dSdcdTAzYjFcdTAzNDInLCAweDFmYjc6dSdcdTAzYjFcdTAzNDJcdTAzYjknLCAweDFmYmM6dSdcdTAzYjFcdTAzYjknLCAweDFmYmU6dSdcdTAzYjknLAorMHgxZmMyOnUnXHUxZjc0XHUwM2I5JywgMHgxZmMzOnUnXHUwM2I3XHUwM2I5JywgMHgxZmM0OnUnXHUwM2FlXHUwM2I5JywgMHgxZmM2OnUnXHUwM2I3XHUwMzQyJywKKzB4MWZjNzp1J1x1MDNiN1x1MDM0Mlx1MDNiOScsIDB4MWZjYzp1J1x1MDNiN1x1MDNiOScsIDB4MWZkMjp1J1x1MDNiOVx1MDMwOFx1MDMwMCcsIDB4MWZkMzp1J1x1MDNiOVx1MDMwOFx1MDMwMScsCisweDFmZDY6dSdcdTAzYjlcdTAzNDInLCAweDFmZDc6dSdcdTAzYjlcdTAzMDhcdTAzNDInLCAweDFmZTI6dSdcdTAzYzVcdTAzMDhcdTAzMDAnLCAweDFmZTM6dSdcdTAzYzVcdTAzMDhcdTAzMDEnLAorMHgxZmU0OnUnXHUwM2MxXHUwMzEzJywgMHgxZmU2OnUnXHUwM2M1XHUwMzQyJywgMHgxZmU3OnUnXHUwM2M1XHUwMzA4XHUwMzQyJywgMHgxZmYyOnUnXHUxZjdjXHUwM2I5JywKKzB4MWZmMzp1J1x1MDNjOVx1MDNiOScsIDB4MWZmNDp1J1x1MDNjZVx1MDNiOScsIDB4MWZmNjp1J1x1MDNjOVx1MDM0MicsIDB4MWZmNzp1J1x1MDNjOVx1MDM0Mlx1MDNiOScsCisweDFmZmM6dSdcdTAzYzlcdTAzYjknLCAweDIwYTg6dSdycycsIDB4MjEwMjp1J2MnLCAweDIxMDM6dSdceGIwYycsCisweDIxMDc6dSdcdTAyNWInLCAweDIxMDk6dSdceGIwZicsIDB4MjEwYjp1J2gnLCAweDIxMGM6dSdoJywKKzB4MjEwZDp1J2gnLCAweDIxMTA6dSdpJywgMHgyMTExOnUnaScsIDB4MjExMjp1J2wnLAorMHgyMTE1OnUnbicsIDB4MjExNjp1J25vJywgMHgyMTE5OnUncCcsIDB4MjExYTp1J3EnLAorMHgyMTFiOnUncicsIDB4MjExYzp1J3InLCAweDIxMWQ6dSdyJywgMHgyMTIwOnUnc20nLAorMHgyMTIxOnUndGVsJywgMHgyMTIyOnUndG0nLCAweDIxMjQ6dSd6JywgMHgyMTI4OnUneicsCisweDIxMmM6dSdiJywgMHgyMTJkOnUnYycsIDB4MjEzMDp1J2UnLCAweDIxMzE6dSdmJywKKzB4MjEzMzp1J20nLCAweDIxM2U6dSdcdTAzYjMnLCAweDIxM2Y6dSdcdTAzYzAnLCAweDIxNDU6dSdkJywKKzB4MzM3MTp1J2hwYScsIDB4MzM3Mzp1J2F1JywgMHgzMzc1OnUnb3YnLCAweDMzODA6dSdwYScsCisweDMzODE6dSduYScsIDB4MzM4Mjp1J1x1MDNiY2EnLCAweDMzODM6dSdtYScsIDB4MzM4NDp1J2thJywKKzB4MzM4NTp1J2tiJywgMHgzMzg2OnUnbWInLCAweDMzODc6dSdnYicsIDB4MzM4YTp1J3BmJywKKzB4MzM4Yjp1J25mJywgMHgzMzhjOnUnXHUwM2JjZicsIDB4MzM5MDp1J2h6JywgMHgzMzkxOnUna2h6JywKKzB4MzM5Mjp1J21oeicsIDB4MzM5Mzp1J2doeicsIDB4MzM5NDp1J3RoeicsIDB4MzNhOTp1J3BhJywKKzB4MzNhYTp1J2twYScsIDB4MzNhYjp1J21wYScsIDB4MzNhYzp1J2dwYScsIDB4MzNiNDp1J3B2JywKKzB4MzNiNTp1J252JywgMHgzM2I2OnUnXHUwM2JjdicsIDB4MzNiNzp1J212JywgMHgzM2I4OnUna3YnLAorMHgzM2I5OnUnbXYnLCAweDMzYmE6dSdwdycsIDB4MzNiYjp1J253JywgMHgzM2JjOnUnXHUwM2JjdycsCisweDMzYmQ6dSdtdycsIDB4MzNiZTp1J2t3JywgMHgzM2JmOnUnbXcnLCAweDMzYzA6dSdrXHUwM2M5JywKKzB4MzNjMTp1J21cdTAzYzknLCAweDMzYzM6dSdicScsIDB4MzNjNjp1J2NcdTIyMTVrZycsIDB4MzNjNzp1J2NvLicsCisweDMzYzg6dSdkYicsIDB4MzNjOTp1J2d5JywgMHgzM2NiOnUnaHAnLCAweDMzY2Q6dSdraycsCisweDMzY2U6dSdrbScsIDB4MzNkNzp1J3BoJywgMHgzM2Q5OnUncHBtJywgMHgzM2RhOnUncHInLAorMHgzM2RjOnUnc3YnLCAweDMzZGQ6dSd3YicsIDB4ZmIwMDp1J2ZmJywgMHhmYjAxOnUnZmknLAorMHhmYjAyOnUnZmwnLCAweGZiMDM6dSdmZmknLCAweGZiMDQ6dSdmZmwnLCAweGZiMDU6dSdzdCcsCisweGZiMDY6dSdzdCcsIDB4ZmIxMzp1J1x1MDU3NFx1MDU3NicsIDB4ZmIxNDp1J1x1MDU3NFx1MDU2NScsIDB4ZmIxNTp1J1x1MDU3NFx1MDU2YicsCisweGZiMTY6dSdcdTA1N2VcdTA1NzYnLCAweGZiMTc6dSdcdTA1NzRcdTA1NmQnLCAweDFkNDAwOnUnYScsIDB4MWQ0MDE6dSdiJywKKzB4MWQ0MDI6dSdjJywgMHgxZDQwMzp1J2QnLCAweDFkNDA0OnUnZScsIDB4MWQ0MDU6dSdmJywKKzB4MWQ0MDY6dSdnJywgMHgxZDQwNzp1J2gnLCAweDFkNDA4OnUnaScsIDB4MWQ0MDk6dSdqJywKKzB4MWQ0MGE6dSdrJywgMHgxZDQwYjp1J2wnLCAweDFkNDBjOnUnbScsIDB4MWQ0MGQ6dSduJywKKzB4MWQ0MGU6dSdvJywgMHgxZDQwZjp1J3AnLCAweDFkNDEwOnUncScsIDB4MWQ0MTE6dSdyJywKKzB4MWQ0MTI6dSdzJywgMHgxZDQxMzp1J3QnLCAweDFkNDE0OnUndScsIDB4MWQ0MTU6dSd2JywKKzB4MWQ0MTY6dSd3JywgMHgxZDQxNzp1J3gnLCAweDFkNDE4OnUneScsIDB4MWQ0MTk6dSd6JywKKzB4MWQ0MzQ6dSdhJywgMHgxZDQzNTp1J2InLCAweDFkNDM2OnUnYycsIDB4MWQ0Mzc6dSdkJywKKzB4MWQ0Mzg6dSdlJywgMHgxZDQzOTp1J2YnLCAweDFkNDNhOnUnZycsIDB4MWQ0M2I6dSdoJywKKzB4MWQ0M2M6dSdpJywgMHgxZDQzZDp1J2onLCAweDFkNDNlOnUnaycsIDB4MWQ0M2Y6dSdsJywKKzB4MWQ0NDA6dSdtJywgMHgxZDQ0MTp1J24nLCAweDFkNDQyOnUnbycsIDB4MWQ0NDM6dSdwJywKKzB4MWQ0NDQ6dSdxJywgMHgxZDQ0NTp1J3InLCAweDFkNDQ2OnUncycsIDB4MWQ0NDc6dSd0JywKKzB4MWQ0NDg6dSd1JywgMHgxZDQ0OTp1J3YnLCAweDFkNDRhOnUndycsIDB4MWQ0NGI6dSd4JywKKzB4MWQ0NGM6dSd5JywgMHgxZDQ0ZDp1J3onLCAweDFkNDY4OnUnYScsIDB4MWQ0Njk6dSdiJywKKzB4MWQ0NmE6dSdjJywgMHgxZDQ2Yjp1J2QnLCAweDFkNDZjOnUnZScsIDB4MWQ0NmQ6dSdmJywKKzB4MWQ0NmU6dSdnJywgMHgxZDQ2Zjp1J2gnLCAweDFkNDcwOnUnaScsIDB4MWQ0NzE6dSdqJywKKzB4MWQ0NzI6dSdrJywgMHgxZDQ3Mzp1J2wnLCAweDFkNDc0OnUnbScsIDB4MWQ0NzU6dSduJywKKzB4MWQ0NzY6dSdvJywgMHgxZDQ3Nzp1J3AnLCAweDFkNDc4OnUncScsIDB4MWQ0Nzk6dSdyJywKKzB4MWQ0N2E6dSdzJywgMHgxZDQ3Yjp1J3QnLCAweDFkNDdjOnUndScsIDB4MWQ0N2Q6dSd2JywKKzB4MWQ0N2U6dSd3JywgMHgxZDQ3Zjp1J3gnLCAweDFkNDgwOnUneScsIDB4MWQ0ODE6dSd6JywKKzB4MWQ0OWM6dSdhJywgMHgxZDQ5ZTp1J2MnLCAweDFkNDlmOnUnZCcsIDB4MWQ0YTI6dSdnJywKKzB4MWQ0YTU6dSdqJywgMHgxZDRhNjp1J2snLCAweDFkNGE5OnUnbicsIDB4MWQ0YWE6dSdvJywKKzB4MWQ0YWI6dSdwJywgMHgxZDRhYzp1J3EnLCAweDFkNGFlOnUncycsIDB4MWQ0YWY6dSd0JywKKzB4MWQ0YjA6dSd1JywgMHgxZDRiMTp1J3YnLCAweDFkNGIyOnUndycsIDB4MWQ0YjM6dSd4JywKKzB4MWQ0YjQ6dSd5JywgMHgxZDRiNTp1J3onLCAweDFkNGQwOnUnYScsIDB4MWQ0ZDE6dSdiJywKKzB4MWQ0ZDI6dSdjJywgMHgxZDRkMzp1J2QnLCAweDFkNGQ0OnUnZScsIDB4MWQ0ZDU6dSdmJywKKzB4MWQ0ZDY6dSdnJywgMHgxZDRkNzp1J2gnLCAweDFkNGQ4OnUnaScsIDB4MWQ0ZDk6dSdqJywKKzB4MWQ0ZGE6dSdrJywgMHgxZDRkYjp1J2wnLCAweDFkNGRjOnUnbScsIDB4MWQ0ZGQ6dSduJywKKzB4MWQ0ZGU6dSdvJywgMHgxZDRkZjp1J3AnLCAweDFkNGUwOnUncScsIDB4MWQ0ZTE6dSdyJywKKzB4MWQ0ZTI6dSdzJywgMHgxZDRlMzp1J3QnLCAweDFkNGU0OnUndScsIDB4MWQ0ZTU6dSd2JywKKzB4MWQ0ZTY6dSd3JywgMHgxZDRlNzp1J3gnLCAweDFkNGU4OnUneScsIDB4MWQ0ZTk6dSd6JywKKzB4MWQ1MDQ6dSdhJywgMHgxZDUwNTp1J2InLCAweDFkNTA3OnUnZCcsIDB4MWQ1MDg6dSdlJywKKzB4MWQ1MDk6dSdmJywgMHgxZDUwYTp1J2cnLCAweDFkNTBkOnUnaicsIDB4MWQ1MGU6dSdrJywKKzB4MWQ1MGY6dSdsJywgMHgxZDUxMDp1J20nLCAweDFkNTExOnUnbicsIDB4MWQ1MTI6dSdvJywKKzB4MWQ1MTM6dSdwJywgMHgxZDUxNDp1J3EnLCAweDFkNTE2OnUncycsIDB4MWQ1MTc6dSd0JywKKzB4MWQ1MTg6dSd1JywgMHgxZDUxOTp1J3YnLCAweDFkNTFhOnUndycsIDB4MWQ1MWI6dSd4JywKKzB4MWQ1MWM6dSd5JywgMHgxZDUzODp1J2EnLCAweDFkNTM5OnUnYicsIDB4MWQ1M2I6dSdkJywKKzB4MWQ1M2M6dSdlJywgMHgxZDUzZDp1J2YnLCAweDFkNTNlOnUnZycsIDB4MWQ1NDA6dSdpJywKKzB4MWQ1NDE6dSdqJywgMHgxZDU0Mjp1J2snLCAweDFkNTQzOnUnbCcsIDB4MWQ1NDQ6dSdtJywKKzB4MWQ1NDY6dSdvJywgMHgxZDU0YTp1J3MnLCAweDFkNTRiOnUndCcsIDB4MWQ1NGM6dSd1JywKKzB4MWQ1NGQ6dSd2JywgMHgxZDU0ZTp1J3cnLCAweDFkNTRmOnUneCcsIDB4MWQ1NTA6dSd5JywKKzB4MWQ1NmM6dSdhJywgMHgxZDU2ZDp1J2InLCAweDFkNTZlOnUnYycsIDB4MWQ1NmY6dSdkJywKKzB4MWQ1NzA6dSdlJywgMHgxZDU3MTp1J2YnLCAweDFkNTcyOnUnZycsIDB4MWQ1NzM6dSdoJywKKzB4MWQ1NzQ6dSdpJywgMHgxZDU3NTp1J2onLCAweDFkNTc2OnUnaycsIDB4MWQ1Nzc6dSdsJywKKzB4MWQ1Nzg6dSdtJywgMHgxZDU3OTp1J24nLCAweDFkNTdhOnUnbycsIDB4MWQ1N2I6dSdwJywKKzB4MWQ1N2M6dSdxJywgMHgxZDU3ZDp1J3InLCAweDFkNTdlOnUncycsIDB4MWQ1N2Y6dSd0JywKKzB4MWQ1ODA6dSd1JywgMHgxZDU4MTp1J3YnLCAweDFkNTgyOnUndycsIDB4MWQ1ODM6dSd4JywKKzB4MWQ1ODQ6dSd5JywgMHgxZDU4NTp1J3onLCAweDFkNWEwOnUnYScsIDB4MWQ1YTE6dSdiJywKKzB4MWQ1YTI6dSdjJywgMHgxZDVhMzp1J2QnLCAweDFkNWE0OnUnZScsIDB4MWQ1YTU6dSdmJywKKzB4MWQ1YTY6dSdnJywgMHgxZDVhNzp1J2gnLCAweDFkNWE4OnUnaScsIDB4MWQ1YTk6dSdqJywKKzB4MWQ1YWE6dSdrJywgMHgxZDVhYjp1J2wnLCAweDFkNWFjOnUnbScsIDB4MWQ1YWQ6dSduJywKKzB4MWQ1YWU6dSdvJywgMHgxZDVhZjp1J3AnLCAweDFkNWIwOnUncScsIDB4MWQ1YjE6dSdyJywKKzB4MWQ1YjI6dSdzJywgMHgxZDViMzp1J3QnLCAweDFkNWI0OnUndScsIDB4MWQ1YjU6dSd2JywKKzB4MWQ1YjY6dSd3JywgMHgxZDViNzp1J3gnLCAweDFkNWI4OnUneScsIDB4MWQ1Yjk6dSd6JywKKzB4MWQ1ZDQ6dSdhJywgMHgxZDVkNTp1J2InLCAweDFkNWQ2OnUnYycsIDB4MWQ1ZDc6dSdkJywKKzB4MWQ1ZDg6dSdlJywgMHgxZDVkOTp1J2YnLCAweDFkNWRhOnUnZycsIDB4MWQ1ZGI6dSdoJywKKzB4MWQ1ZGM6dSdpJywgMHgxZDVkZDp1J2onLCAweDFkNWRlOnUnaycsIDB4MWQ1ZGY6dSdsJywKKzB4MWQ1ZTA6dSdtJywgMHgxZDVlMTp1J24nLCAweDFkNWUyOnUnbycsIDB4MWQ1ZTM6dSdwJywKKzB4MWQ1ZTQ6dSdxJywgMHgxZDVlNTp1J3InLCAweDFkNWU2OnUncycsIDB4MWQ1ZTc6dSd0JywKKzB4MWQ1ZTg6dSd1JywgMHgxZDVlOTp1J3YnLCAweDFkNWVhOnUndycsIDB4MWQ1ZWI6dSd4JywKKzB4MWQ1ZWM6dSd5JywgMHgxZDVlZDp1J3onLCAweDFkNjA4OnUnYScsIDB4MWQ2MDk6dSdiJywKKzB4MWQ2MGE6dSdjJywgMHgxZDYwYjp1J2QnLCAweDFkNjBjOnUnZScsIDB4MWQ2MGQ6dSdmJywKKzB4MWQ2MGU6dSdnJywgMHgxZDYwZjp1J2gnLCAweDFkNjEwOnUnaScsIDB4MWQ2MTE6dSdqJywKKzB4MWQ2MTI6dSdrJywgMHgxZDYxMzp1J2wnLCAweDFkNjE0OnUnbScsIDB4MWQ2MTU6dSduJywKKzB4MWQ2MTY6dSdvJywgMHgxZDYxNzp1J3AnLCAweDFkNjE4OnUncScsIDB4MWQ2MTk6dSdyJywKKzB4MWQ2MWE6dSdzJywgMHgxZDYxYjp1J3QnLCAweDFkNjFjOnUndScsIDB4MWQ2MWQ6dSd2JywKKzB4MWQ2MWU6dSd3JywgMHgxZDYxZjp1J3gnLCAweDFkNjIwOnUneScsIDB4MWQ2MjE6dSd6JywKKzB4MWQ2M2M6dSdhJywgMHgxZDYzZDp1J2InLCAweDFkNjNlOnUnYycsIDB4MWQ2M2Y6dSdkJywKKzB4MWQ2NDA6dSdlJywgMHgxZDY0MTp1J2YnLCAweDFkNjQyOnUnZycsIDB4MWQ2NDM6dSdoJywKKzB4MWQ2NDQ6dSdpJywgMHgxZDY0NTp1J2onLCAweDFkNjQ2OnUnaycsIDB4MWQ2NDc6dSdsJywKKzB4MWQ2NDg6dSdtJywgMHgxZDY0OTp1J24nLCAweDFkNjRhOnUnbycsIDB4MWQ2NGI6dSdwJywKKzB4MWQ2NGM6dSdxJywgMHgxZDY0ZDp1J3InLCAweDFkNjRlOnUncycsIDB4MWQ2NGY6dSd0JywKKzB4MWQ2NTA6dSd1JywgMHgxZDY1MTp1J3YnLCAweDFkNjUyOnUndycsIDB4MWQ2NTM6dSd4JywKKzB4MWQ2NTQ6dSd5JywgMHgxZDY1NTp1J3onLCAweDFkNjcwOnUnYScsIDB4MWQ2NzE6dSdiJywKKzB4MWQ2NzI6dSdjJywgMHgxZDY3Mzp1J2QnLCAweDFkNjc0OnUnZScsIDB4MWQ2NzU6dSdmJywKKzB4MWQ2NzY6dSdnJywgMHgxZDY3Nzp1J2gnLCAweDFkNjc4OnUnaScsIDB4MWQ2Nzk6dSdqJywKKzB4MWQ2N2E6dSdrJywgMHgxZDY3Yjp1J2wnLCAweDFkNjdjOnUnbScsIDB4MWQ2N2Q6dSduJywKKzB4MWQ2N2U6dSdvJywgMHgxZDY3Zjp1J3AnLCAweDFkNjgwOnUncScsIDB4MWQ2ODE6dSdyJywKKzB4MWQ2ODI6dSdzJywgMHgxZDY4Mzp1J3QnLCAweDFkNjg0OnUndScsIDB4MWQ2ODU6dSd2JywKKzB4MWQ2ODY6dSd3JywgMHgxZDY4Nzp1J3gnLCAweDFkNjg4OnUneScsIDB4MWQ2ODk6dSd6JywKKzB4MWQ2YTg6dSdcdTAzYjEnLCAweDFkNmE5OnUnXHUwM2IyJywgMHgxZDZhYTp1J1x1MDNiMycsIDB4MWQ2YWI6dSdcdTAzYjQnLAorMHgxZDZhYzp1J1x1MDNiNScsIDB4MWQ2YWQ6dSdcdTAzYjYnLCAweDFkNmFlOnUnXHUwM2I3JywgMHgxZDZhZjp1J1x1MDNiOCcsCisweDFkNmIwOnUnXHUwM2I5JywgMHgxZDZiMTp1J1x1MDNiYScsIDB4MWQ2YjI6dSdcdTAzYmInLCAweDFkNmIzOnUnXHUwM2JjJywKKzB4MWQ2YjQ6dSdcdTAzYmQnLCAweDFkNmI1OnUnXHUwM2JlJywgMHgxZDZiNjp1J1x1MDNiZicsIDB4MWQ2Yjc6dSdcdTAzYzAnLAorMHgxZDZiODp1J1x1MDNjMScsIDB4MWQ2Yjk6dSdcdTAzYjgnLCAweDFkNmJhOnUnXHUwM2MzJywgMHgxZDZiYjp1J1x1MDNjNCcsCisweDFkNmJjOnUnXHUwM2M1JywgMHgxZDZiZDp1J1x1MDNjNicsIDB4MWQ2YmU6dSdcdTAzYzcnLCAweDFkNmJmOnUnXHUwM2M4JywKKzB4MWQ2YzA6dSdcdTAzYzknLCAweDFkNmQzOnUnXHUwM2MzJywgMHgxZDZlMjp1J1x1MDNiMScsIDB4MWQ2ZTM6dSdcdTAzYjInLAorMHgxZDZlNDp1J1x1MDNiMycsIDB4MWQ2ZTU6dSdcdTAzYjQnLCAweDFkNmU2OnUnXHUwM2I1JywgMHgxZDZlNzp1J1x1MDNiNicsCisweDFkNmU4OnUnXHUwM2I3JywgMHgxZDZlOTp1J1x1MDNiOCcsIDB4MWQ2ZWE6dSdcdTAzYjknLCAweDFkNmViOnUnXHUwM2JhJywKKzB4MWQ2ZWM6dSdcdTAzYmInLCAweDFkNmVkOnUnXHUwM2JjJywgMHgxZDZlZTp1J1x1MDNiZCcsIDB4MWQ2ZWY6dSdcdTAzYmUnLAorMHgxZDZmMDp1J1x1MDNiZicsIDB4MWQ2ZjE6dSdcdTAzYzAnLCAweDFkNmYyOnUnXHUwM2MxJywgMHgxZDZmMzp1J1x1MDNiOCcsCisweDFkNmY0OnUnXHUwM2MzJywgMHgxZDZmNTp1J1x1MDNjNCcsIDB4MWQ2ZjY6dSdcdTAzYzUnLCAweDFkNmY3OnUnXHUwM2M2JywKKzB4MWQ2Zjg6dSdcdTAzYzcnLCAweDFkNmY5OnUnXHUwM2M4JywgMHgxZDZmYTp1J1x1MDNjOScsIDB4MWQ3MGQ6dSdcdTAzYzMnLAorMHgxZDcxYzp1J1x1MDNiMScsIDB4MWQ3MWQ6dSdcdTAzYjInLCAweDFkNzFlOnUnXHUwM2IzJywgMHgxZDcxZjp1J1x1MDNiNCcsCisweDFkNzIwOnUnXHUwM2I1JywgMHgxZDcyMTp1J1x1MDNiNicsIDB4MWQ3MjI6dSdcdTAzYjcnLCAweDFkNzIzOnUnXHUwM2I4JywKKzB4MWQ3MjQ6dSdcdTAzYjknLCAweDFkNzI1OnUnXHUwM2JhJywgMHgxZDcyNjp1J1x1MDNiYicsIDB4MWQ3Mjc6dSdcdTAzYmMnLAorMHgxZDcyODp1J1x1MDNiZCcsIDB4MWQ3Mjk6dSdcdTAzYmUnLCAweDFkNzJhOnUnXHUwM2JmJywgMHgxZDcyYjp1J1x1MDNjMCcsCisweDFkNzJjOnUnXHUwM2MxJywgMHgxZDcyZDp1J1x1MDNiOCcsIDB4MWQ3MmU6dSdcdTAzYzMnLCAweDFkNzJmOnUnXHUwM2M0JywKKzB4MWQ3MzA6dSdcdTAzYzUnLCAweDFkNzMxOnUnXHUwM2M2JywgMHgxZDczMjp1J1x1MDNjNycsIDB4MWQ3MzM6dSdcdTAzYzgnLAorMHgxZDczNDp1J1x1MDNjOScsIDB4MWQ3NDc6dSdcdTAzYzMnLCAweDFkNzU2OnUnXHUwM2IxJywgMHgxZDc1Nzp1J1x1MDNiMicsCisweDFkNzU4OnUnXHUwM2IzJywgMHgxZDc1OTp1J1x1MDNiNCcsIDB4MWQ3NWE6dSdcdTAzYjUnLCAweDFkNzViOnUnXHUwM2I2JywKKzB4MWQ3NWM6dSdcdTAzYjcnLCAweDFkNzVkOnUnXHUwM2I4JywgMHgxZDc1ZTp1J1x1MDNiOScsIDB4MWQ3NWY6dSdcdTAzYmEnLAorMHgxZDc2MDp1J1x1MDNiYicsIDB4MWQ3NjE6dSdcdTAzYmMnLCAweDFkNzYyOnUnXHUwM2JkJywgMHgxZDc2Mzp1J1x1MDNiZScsCisweDFkNzY0OnUnXHUwM2JmJywgMHgxZDc2NTp1J1x1MDNjMCcsIDB4MWQ3NjY6dSdcdTAzYzEnLCAweDFkNzY3OnUnXHUwM2I4JywKKzB4MWQ3Njg6dSdcdTAzYzMnLCAweDFkNzY5OnUnXHUwM2M0JywgMHgxZDc2YTp1J1x1MDNjNScsIDB4MWQ3NmI6dSdcdTAzYzYnLAorMHgxZDc2Yzp1J1x1MDNjNycsIDB4MWQ3NmQ6dSdcdTAzYzgnLCAweDFkNzZlOnUnXHUwM2M5JywgMHgxZDc4MTp1J1x1MDNjMycsCisweDFkNzkwOnUnXHUwM2IxJywgMHgxZDc5MTp1J1x1MDNiMicsIDB4MWQ3OTI6dSdcdTAzYjMnLCAweDFkNzkzOnUnXHUwM2I0JywKKzB4MWQ3OTQ6dSdcdTAzYjUnLCAweDFkNzk1OnUnXHUwM2I2JywgMHgxZDc5Njp1J1x1MDNiNycsIDB4MWQ3OTc6dSdcdTAzYjgnLAorMHgxZDc5ODp1J1x1MDNiOScsIDB4MWQ3OTk6dSdcdTAzYmEnLCAweDFkNzlhOnUnXHUwM2JiJywgMHgxZDc5Yjp1J1x1MDNiYycsCisweDFkNzljOnUnXHUwM2JkJywgMHgxZDc5ZDp1J1x1MDNiZScsIDB4MWQ3OWU6dSdcdTAzYmYnLCAweDFkNzlmOnUnXHUwM2MwJywKKzB4MWQ3YTA6dSdcdTAzYzEnLCAweDFkN2ExOnUnXHUwM2I4JywgMHgxZDdhMjp1J1x1MDNjMycsIDB4MWQ3YTM6dSdcdTAzYzQnLAorMHgxZDdhNDp1J1x1MDNjNScsIDB4MWQ3YTU6dSdcdTAzYzYnLCAweDFkN2E2OnUnXHUwM2M3JywgMHgxZDdhNzp1J1x1MDNjOCcsCisweDFkN2E4OnUnXHUwM2M5JywgMHgxZDdiYjp1J1x1MDNjMycsIH0KKworZGVmIG1hcF90YWJsZV9iMyhjb2RlKToKKyAgICByID0gYjNfZXhjZXB0aW9ucy5nZXQob3JkKGNvZGUpKQorICAgIGlmIHIgaXMgbm90IE5vbmU6IHJldHVybiByCisgICAgcmV0dXJuIGNvZGUubG93ZXIoKQorCisKK2RlZiBtYXBfdGFibGVfYjIoYSk6CisgICAgYWwgPSBtYXBfdGFibGVfYjMoYSkKKyAgICBiID0gdW5pY29kZWRhdGEubm9ybWFsaXplKCJORktDIiwgYWwpCisgICAgYmwgPSB1IiIuam9pbihbbWFwX3RhYmxlX2IzKGNoKSBmb3IgY2ggaW4gYl0pCisgICAgYyA9IHVuaWNvZGVkYXRhLm5vcm1hbGl6ZSgiTkZLQyIsIGJsKQorICAgIGlmIGIgIT0gYzoKKyAgICAgICAgcmV0dXJuIGMKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gYWwKKworCitkZWYgaW5fdGFibGVfYzExKGNvZGUpOgorICAgIHJldHVybiBjb2RlID09IHUiICIKKworCitkZWYgaW5fdGFibGVfYzEyKGNvZGUpOgorICAgIHJldHVybiB1bmljb2RlZGF0YS5jYXRlZ29yeShjb2RlKSA9PSAiWnMiIGFuZCBjb2RlICE9IHUiICIKKworZGVmIGluX3RhYmxlX2MxMV9jMTIoY29kZSk6CisgICAgcmV0dXJuIHVuaWNvZGVkYXRhLmNhdGVnb3J5KGNvZGUpID09ICJacyIKKworCitkZWYgaW5fdGFibGVfYzIxKGNvZGUpOgorICAgIHJldHVybiBvcmQoY29kZSkgPCAxMjggYW5kIHVuaWNvZGVkYXRhLmNhdGVnb3J5KGNvZGUpID09ICJDYyIKKworYzIyX3NwZWNpYWxzID0gc2V0cy5TZXQoWzE3NTcsIDE4MDcsIDYxNTgsIDgyMDQsIDgyMDUsIDgyMzIsIDgyMzMsIDY1Mjc5XSArIHJhbmdlKDgyODgsODI5MikgKyByYW5nZSg4Mjk4LDgzMDQpICsgcmFuZ2UoNjU1MjksNjU1MzMpICsgcmFuZ2UoMTE5MTU1LDExOTE2MykpCitkZWYgaW5fdGFibGVfYzIyKGNvZGUpOgorICAgIGMgPSBvcmQoY29kZSkKKyAgICBpZiBjIDwgMTI4OiByZXR1cm4gRmFsc2UKKyAgICBpZiB1bmljb2RlZGF0YS5jYXRlZ29yeShjb2RlKSA9PSAiQ2MiOiByZXR1cm4gVHJ1ZQorICAgIHJldHVybiBjIGluIGMyMl9zcGVjaWFscworCitkZWYgaW5fdGFibGVfYzIxX2MyMihjb2RlKToKKyAgICByZXR1cm4gdW5pY29kZWRhdGEuY2F0ZWdvcnkoY29kZSkgPT0gIkNjIiBvciBcCisgICAgICAgICAgIG9yZChjb2RlKSBpbiBjMjJfc3BlY2lhbHMKKworCitkZWYgaW5fdGFibGVfYzMoY29kZSk6CisgICAgcmV0dXJuIHVuaWNvZGVkYXRhLmNhdGVnb3J5KGNvZGUpID09ICJDbyIKKworCitkZWYgaW5fdGFibGVfYzQoY29kZSk6CisgICAgYyA9IG9yZChjb2RlKQorICAgIGlmIGMgPCAweEZERDA6IHJldHVybiBGYWxzZQorICAgIGlmIGMgPCAweEZERjA6IHJldHVybiBUcnVlCisgICAgcmV0dXJuIChvcmQoY29kZSkgJiAweEZGRkYpIGluICgweEZGRkUsIDB4RkZGRikKKworCitkZWYgaW5fdGFibGVfYzUoY29kZSk6CisgICAgcmV0dXJuIHVuaWNvZGVkYXRhLmNhdGVnb3J5KGNvZGUpID09ICJDcyIKKworCitjNl9zZXQgPSBzZXRzLlNldChyYW5nZSg2NTUyOSw2NTUzNCkpCitkZWYgaW5fdGFibGVfYzYoY29kZSk6CisgICAgcmV0dXJuIG9yZChjb2RlKSBpbiBjNl9zZXQKKworCitjN19zZXQgPSBzZXRzLlNldChyYW5nZSgxMjI3MiwxMjI4NCkpCitkZWYgaW5fdGFibGVfYzcoY29kZSk6CisgICAgcmV0dXJuIG9yZChjb2RlKSBpbiBjN19zZXQKKworCitjOF9zZXQgPSBzZXRzLlNldChbODMyLCA4MzMsIDgyMDYsIDgyMDddICsgcmFuZ2UoODIzNCw4MjM5KSArIHJhbmdlKDgyOTgsODMwNCkpCitkZWYgaW5fdGFibGVfYzgoY29kZSk6CisgICAgcmV0dXJuIG9yZChjb2RlKSBpbiBjOF9zZXQKKworCitjOV9zZXQgPSBzZXRzLlNldChbOTE3NTA1XSArIHJhbmdlKDkxNzUzNiw5MTc2MzIpKQorZGVmIGluX3RhYmxlX2M5KGNvZGUpOgorICAgIHJldHVybiBvcmQoY29kZSkgaW4gYzlfc2V0CisKKworZGVmIGluX3RhYmxlX2QxKGNvZGUpOgorICAgIHJldHVybiB1bmljb2RlZGF0YS5iaWRpcmVjdGlvbmFsKGNvZGUpIGluICgiUiIsIkFMIikKKworCitkZWYgaW5fdGFibGVfZDIoY29kZSk6CisgICAgcmV0dXJuIHVuaWNvZGVkYXRhLmJpZGlyZWN0aW9uYWwoY29kZSkgPT0gIkwiCisKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY29kZWNzLnB5IGIvTGliL3Rlc3QvdGVzdF9jb2RlY3MucHkKaW5kZXggOWE0ZjM1Zi4uNzY5YTQwZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jb2RlY3MucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jb2RlY3MucHkKQEAgLTM2LDExICszNiwzMDcgQEAKICAgICAgICAgIyBQeXRob24gdXNlZCB0byBjcmFzaCBvbiB0aGlzIGF0IGV4aXQgYmVjYXVzZSBvZiBhIHJlZmNvdW50CiAgICAgICAgICMgYnVnIGluIF9jb2RlY3Ntb2R1bGUuYwogCisjIEZyb20gUkZDIDM0OTIKK3B1bnljb2RlX3Rlc3RjYXNlcyA9IFsKKyAgICAjIEEgQXJhYmljIChFZ3lwdGlhbik6CisgICAgKHUiXHUwNjQ0XHUwNjRBXHUwNjQ3XHUwNjQ1XHUwNjI3XHUwNjI4XHUwNjJBXHUwNjQzXHUwNjQ0IgorICAgICB1Ilx1MDY0NVx1MDY0OFx1MDYzNFx1MDYzOVx1MDYzMVx1MDYyOFx1MDY0QVx1MDYxRiIsCisgICAgICJlZ2JwZGFqNmJ1NGJ4ZmdlaGZ2d3huIiksCisgICAgIyBCIENoaW5lc2UgKHNpbXBsaWZpZWQpOgorICAgICh1Ilx1NEVENlx1NEVFQ1x1NEUzQVx1NEVDMFx1NEU0OFx1NEUwRFx1OEJGNFx1NEUyRFx1NjU4NyIsCisgICAgICJpaHF3Y3JiNGN2OGE4ZHFnMDU2cHFqeWUiKSwKKyAgICAjIEMgQ2hpbmVzZSAodHJhZGl0aW9uYWwpOgorICAgICh1Ilx1NEVENlx1NTAxMVx1NzIzMlx1NEVDMFx1OUVCRFx1NEUwRFx1OEFBQVx1NEUyRFx1NjU4NyIsCisgICAgICJpaHF3Y3R2emM5MWY2NTlkcnNzM3g4Ym8weWIiKSwKKyAgICAjIEQgQ3plY2g6IFBybzxjY2Fyb24+cHJvc3Q8ZWNhcm9uPm5lbWx1djxpYWN1dGU+PGNjYXJvbj5lc2t5CisgICAgKHUiXHUwMDUwXHUwMDcyXHUwMDZGXHUwMTBEXHUwMDcwXHUwMDcyXHUwMDZGXHUwMDczXHUwMDc0IgorICAgICB1Ilx1MDExQlx1MDA2RVx1MDA2NVx1MDA2RFx1MDA2Q1x1MDA3NVx1MDA3Nlx1MDBFRFx1MDEwRCIKKyAgICAgdSJcdTAwNjVcdTAwNzNcdTAwNkJcdTAwNzkiLAorICAgICAiUHJvcHJvc3RuZW1sdXZlc2t5LXV5YjI0ZG1hNDFhIiksCisgICAgIyBFIEhlYnJldzoKKyAgICAodSJcdTA1RENcdTA1REVcdTA1RDRcdTA1RDRcdTA1RERcdTA1RTRcdTA1RTlcdTA1RDVcdTA1RDgiCisgICAgIHUiXHUwNURDXHUwNUQwXHUwNURFXHUwNUQzXHUwNUQxXHUwNUU4XHUwNUQ5XHUwNUREXHUwNUUyIgorICAgICB1Ilx1MDVEMVx1MDVFOFx1MDVEOVx1MDVFQSIsCisgICAgICI0ZGJjYWdkYWh5bWJ4ZWtoZWg2ZTBhN2ZlaTBiIiksCisgICAgIyBGIEhpbmRpIChEZXZhbmFnYXJpKToKKyAgICAodSJcdTA5MkZcdTA5MzlcdTA5MzJcdTA5NEJcdTA5MTdcdTA5MzlcdTA5M0ZcdTA5MjhcdTA5NEQiCisgICAgdSJcdTA5MjZcdTA5NDBcdTA5MTVcdTA5NERcdTA5MkZcdTA5NEJcdTA5MDJcdTA5MjhcdTA5MzkiCisgICAgdSJcdTA5NDBcdTA5MDJcdTA5MkNcdTA5NEJcdTA5MzJcdTA5MzhcdTA5MTVcdTA5MjRcdTA5NDciCisgICAgdSJcdTA5MzlcdTA5NDhcdTA5MDIiLAorICAgICJpMWJhYTdlY2k5Z2xyZDliMmFlMWJqMGhmY2dnNml5YWY4bzBhMWRpZzBjZCIpLAorCisgICAgIyhHKSBKYXBhbmVzZSAoa2FuamkgYW5kIGhpcmFnYW5hKToKKyAgICAodSJcdTMwNkFcdTMwNUNcdTMwN0ZcdTMwOTNcdTMwNkFcdTY1RTVcdTY3MkNcdThBOUVcdTMwOTIiCisgICAgdSJcdThBNzFcdTMwNTdcdTMwNjZcdTMwNEZcdTMwOENcdTMwNkFcdTMwNDRcdTMwNkVcdTMwNEIiLAorICAgICAibjhqb2s1YXk1ZHphYmQ1YnltOWYwY201Njg1cnJqZXRyNnBkeGEiKSwKKworICAgICMgKEgpIEtvcmVhbiAoSGFuZ3VsIHN5bGxhYmxlcyk6CisgICAgKHUiXHVDMTM4XHVBQ0M0XHVDNzU4XHVCQUE4XHVCNEUwXHVDMEFDXHVCNzhDXHVCNEU0XHVDNzc0IgorICAgICB1Ilx1RDU1Q1x1QUQ2RFx1QzVCNFx1Qjk3Q1x1Qzc3NFx1RDU3NFx1RDU1Q1x1QjJFNFx1QkE3NCIKKyAgICAgdSJcdUM1QkNcdUI5QzhcdUIwOThcdUM4OEJcdUM3NDRcdUFFNEMiLAorICAgICAiOTg5YW9tc3ZpNWU4M2RiMWQyYTM1NWN2MWUwdmFrMWR3cnY5M2Q1eGJoMTVhMGR0MzBhNWoiCisgICAgICJwc2Q4NzljY202ZmVhOThjIiksCisKKyAgICAjIChJKSBSdXNzaWFuIChDeXJpbGxpYyk6CisgICAgKHUiXHUwNDNGXHUwNDNFXHUwNDQ3XHUwNDM1XHUwNDNDXHUwNDQzXHUwNDM2XHUwNDM1XHUwNDNFIgorICAgICB1Ilx1MDQzRFx1MDQzOFx1MDQzRFx1MDQzNVx1MDQzM1x1MDQzRVx1MDQzMlx1MDQzRVx1MDQ0MCIKKyAgICAgdSJcdTA0NEZcdTA0NDJcdTA0M0ZcdTA0M0VcdTA0NDBcdTA0NDNcdTA0NDFcdTA0NDFcdTA0M0EiCisgICAgIHUiXHUwNDM4IiwKKyAgICAgImIxYWJmYWFlcGRybm5iZ2VmYmFEb3Rjd2F0bXEyZzRsIiksCisKKyAgICAjIChKKSBTcGFuaXNoOiBQb3JxdTxlYWN1dGU+bm9wdWVkZW5zaW1wbGVtZW50ZWhhYmxhcmVuRXNwYTxudGlsZGU+b2wKKyAgICAodSJcdTAwNTBcdTAwNkZcdTAwNzJcdTAwNzFcdTAwNzVcdTAwRTlcdTAwNkVcdTAwNkZcdTAwNzAiCisgICAgIHUiXHUwMDc1XHUwMDY1XHUwMDY0XHUwMDY1XHUwMDZFXHUwMDczXHUwMDY5XHUwMDZEXHUwMDcwIgorICAgICB1Ilx1MDA2Q1x1MDA2NVx1MDA2RFx1MDA2NVx1MDA2RVx1MDA3NFx1MDA2NVx1MDA2OFx1MDA2MSIKKyAgICAgdSJcdTAwNjJcdTAwNkNcdTAwNjFcdTAwNzJcdTAwNjVcdTAwNkVcdTAwNDVcdTAwNzNcdTAwNzAiCisgICAgIHUiXHUwMDYxXHUwMEYxXHUwMDZGXHUwMDZDIiwKKyAgICAgIlBvcnF1bm9wdWVkZW5zaW1wbGVtZW50ZWhhYmxhcmVuRXNwYW9sLWZtZDU2YSIpLAorCisgICAgIyAoSykgVmlldG5hbWVzZToKKyAgICAjICBUPGFkb3RiZWxvdz5pc2FvaDxvZG90YmVsb3c+a2g8b2NpcmM+bmd0aDxlY2lyY2hvb2thYm92ZT5jaFwKKyAgICAjICAgPGlob29rYWJvdmU+bjxvYWN1dGU+aXRpPGVjaXJjYWN1dGU+bmdWaTxlY2lyY2RvdGJlbG93PnQKKyAgICAodSJcdTAwNTRcdTFFQTFcdTAwNjlcdTAwNzNcdTAwNjFcdTAwNkZcdTAwNjhcdTFFQ0RcdTAwNkIiCisgICAgIHUiXHUwMDY4XHUwMEY0XHUwMDZFXHUwMDY3XHUwMDc0XHUwMDY4XHUxRUMzXHUwMDYzXHUwMDY4IgorICAgICB1Ilx1MUVDOVx1MDA2RVx1MDBGM1x1MDA2OVx1MDA3NFx1MDA2OVx1MUVCRlx1MDA2RVx1MDA2NyIKKyAgICAgdSJcdTAwNTZcdTAwNjlcdTFFQzdcdTAwNzQiLAorICAgICAiVGlzYW9oa2huZ3RoY2huaXRpbmdWaXQta2pjcjgyNjhxeXhhZmQyZjFiOWciKSwKKworCisgICAgIyhMKSAzPG5lbj5CPGd1bWk+PGtpbnBhY2hpPjxzZW5zZWk+CisgICAgKHUiXHUwMDMzXHU1RTc0XHUwMDQyXHU3RDQ0XHU5MUQxXHU1MTZCXHU1MTQ4XHU3NTFGIiwKKyAgICAgIjNCLXd3NGM1ZTE4MGU1NzVhNjVsc3kyYiIpLAorICAgIAorICAgICMgKE0pIDxhbXVybz48bmFtaWU+LXdpdGgtU1VQRVItTU9OS0VZUworICAgICh1Ilx1NUI4OVx1NUJBNFx1NTk0OFx1N0Y4RVx1NjA3NVx1MDAyRFx1MDA3N1x1MDA2OVx1MDA3NCIKKyAgICAgdSJcdTAwNjhcdTAwMkRcdTAwNTNcdTAwNTVcdTAwNTBcdTAwNDVcdTAwNTJcdTAwMkRcdTAwNEQiCisgICAgIHUiXHUwMDRGXHUwMDRFXHUwMDRCXHUwMDQ1XHUwMDU5XHUwMDUzIiwKKyAgICAgIi13aXRoLVNVUEVSLU1PTktFWVMtcGM1OGFnODBhOHFhaTAwZzduOW4iKSwKKworICAgICMgKE4pIEhlbGxvLUFub3RoZXItV2F5LTxzb3Jlem9yZT48bm8+PGJhc2hvPgorICAgICh1Ilx1MDA0OFx1MDA2NVx1MDA2Q1x1MDA2Q1x1MDA2Rlx1MDAyRFx1MDA0MVx1MDA2RVx1MDA2RiIKKyAgICAgdSJcdTAwNzRcdTAwNjhcdTAwNjVcdTAwNzJcdTAwMkRcdTAwNTdcdTAwNjFcdTAwNzlcdTAwMkQiCisgICAgIHUiXHUzMDVEXHUzMDhDXHUzMDVFXHUzMDhDXHUzMDZFXHU1ODM0XHU2MjQwIiwKKyAgICAgIkhlbGxvLUFub3RoZXItV2F5LS1mYzRxdWEwNWF1d2IzNjc0dmZyMGIiKSwKKworICAgICMgKE8pIDxoaXRvdHN1Pjx5YW5lPjxubz48c2hpdGE+MgorICAgICh1Ilx1MzA3Mlx1MzA2OFx1MzA2NFx1NUM0Qlx1NjgzOVx1MzA2RVx1NEUwQlx1MDAzMiIsCisgICAgICIyLXU5dGx6cjk3NTZidDN1YzB2IiksCisKKyAgICAjIChQKSBNYWppPGRlPktvaTxzdXJ1PjU8YnlvdT48bWFlPgorICAgICh1Ilx1MDA0RFx1MDA2MVx1MDA2QVx1MDA2OVx1MzA2N1x1MDA0Qlx1MDA2Rlx1MDA2OVx1MzA1OSIKKyAgICAgdSJcdTMwOEJcdTAwMzVcdTc5RDJcdTUyNEQiLAorICAgICAiTWFqaUtvaTUtNzgzZ3VlNnF6MDc1YXptNWUiKSwKKworICAgICAjIChRKSA8cGFmaWk+ZGU8cnVuYmE+CisgICAgKHUiXHUzMEQxXHUzMEQ1XHUzMEEzXHUzMEZDXHUwMDY0XHUwMDY1XHUzMEVCXHUzMEYzXHUzMEQwIiwKKyAgICAgImRlLWpnNGF2aGJ5MW5vYzBkIiksCisKKyAgICAjIChSKSA8c29ubz48c3VwaWlkbz48ZGU+CisgICAgKHUiXHUzMDVEXHUzMDZFXHUzMEI5XHUzMEQ0XHUzMEZDXHUzMEM5XHUzMDY3IiwKKyAgICAgImQ5anVhdTQxYXdjemN6cCIpLAorCisgICAgIyAoUykgLT4gJDEuMDAgPC0KKyAgICAodSJcdTAwMkRcdTAwM0VcdTAwMjBcdTAwMjRcdTAwMzFcdTAwMkVcdTAwMzBcdTAwMzBcdTAwMjAiCisgICAgIHUiXHUwMDNDXHUwMDJEIiwKKyAgICAgIi0+ICQxLjAwIDwtLSIpCisgICAgXQorCitmb3IgaSBpbiBwdW55Y29kZV90ZXN0Y2FzZXM6CisgICAgaWYgbGVuKGkpIT0yOgorICAgICAgICBwcmludCByZXByKGkpCisKK2NsYXNzIFB1bnljb2RlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfZW5jb2RlKHNlbGYpOgorICAgICAgICBmb3IgdW5pLCBwdW55IGluIHB1bnljb2RlX3Rlc3RjYXNlczoKKyAgICAgICAgICAgICMgTmVlZCB0byBjb252ZXJ0IGJvdGggc3RyaW5ncyB0byBsb3dlciBjYXNlLCBzaW5jZQorICAgICAgICAgICAgIyBzb21lIG9mIHRoZSBleHRlbmRlZCBlbmNvZGluZ3MgdXNlIHVwcGVyIGNhc2UsIGJ1dCBvdXIKKyAgICAgICAgICAgICMgY29kZSBwcm9kdWNlcyBvbmx5IGxvd2VyIGNhc2UuIENvbnZlcnRpbmcganVzdCBwdW55IHRvCisgICAgICAgICAgICAjIGxvd2VyIGlzIGFsc28gaW5zdWZmaWNpZW50LCBzaW5jZSBzb21lIG9mIHRoZSBpbnB1dCBjaGFyYWN0ZXJzCisgICAgICAgICAgICAjIGFyZSB1cHBlciBjYXNlLgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModW5pLmVuY29kZSgicHVueWNvZGUiKS5sb3dlcigpLCBwdW55Lmxvd2VyKCkpCisKKyAgICBkZWYgdGVzdF9kZWNvZGUoc2VsZik6CisgICAgICAgIGZvciB1bmksIHB1bnkgaW4gcHVueWNvZGVfdGVzdGNhc2VzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHModW5pLCBwdW55LmRlY29kZSgicHVueWNvZGUiKSkKKworIyBGcm9tIGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9saWJpZG4vZHJhZnQtam9zZWZzc29uLWlkbi10ZXN0LXZlY3RvcnMuaHRtbAorbmFtZXByZXBfdGVzdHMgPSBbCisgICAgIyAzLjEgTWFwIHRvIG5vdGhpbmcuCisgICAgKCdmb29ceGMyXHhhZFx4Y2RceDhmXHhlMVx4YTBceDg2XHhlMVx4YTBceDhiYmFyJworICAgICAnXHhlMlx4ODBceDhiXHhlMlx4ODFceGEwYmF6XHhlZlx4YjhceDgwXHhlZlx4YjhceDg4XHhlZicKKyAgICAgJ1x4YjhceDhmXHhlZlx4YmJceGJmJywKKyAgICAgJ2Zvb2JhcmJheicpLAorICAgICMgMy4yIENhc2UgZm9sZGluZyBBU0NJSSBVKzAwNDMgVSswMDQxIFUrMDA0NiBVKzAwNDUuCisgICAgKCdDQUZFJywKKyAgICAgJ2NhZmUnKSwKKyAgICAjIDMuMyBDYXNlIGZvbGRpbmcgOGJpdCBVKzAwREYgKGdlcm1hbiBzaGFycCBzKS4KKyAgICAjIFRoZSBvcmlnaW5hbCB0ZXN0IGNhc2UgaXMgYm9ndXM7IGl0IHNheXMgXHhjM1x4ZGYKKyAgICAoJ1x4YzNceDlmJywKKyAgICAgJ3NzJyksCisgICAgIyAzLjQgQ2FzZSBmb2xkaW5nIFUrMDEzMCAodHVya2lzaCBjYXBpdGFsIEkgd2l0aCBkb3QpLgorICAgICgnXHhjNFx4YjAnLAorICAgICAnaVx4Y2NceDg3JyksCisgICAgIyAzLjUgQ2FzZSBmb2xkaW5nIG11bHRpYnl0ZSBVKzAxNDMgVSswMzdBLgorICAgICgnXHhjNVx4ODNceGNkXHhiYScsCisgICAgICdceGM1XHg4NCBceGNlXHhiOScpLAorICAgICMgMy42IENhc2UgZm9sZGluZyBVKzIxMjEgVSszM0M2IFUrMUQ3QkIuCisgICAgIyBYWFg6IHNraXAgdGhpcyBhcyBpdCBmYWlscyBpbiBVQ1MtMiBtb2RlCisgICAgIygnXHhlMlx4ODRceGExXHhlM1x4OGZceDg2XHhmMFx4OWRceDllXHhiYicsCisgICAgIyAndGVsY1x4ZTJceDg4XHg5NWtnXHhjZlx4ODMnKSwKKyAgICAoTm9uZSwgTm9uZSksCisgICAgIyAzLjcgTm9ybWFsaXphdGlvbiBvZiBVKzAwNmEgVSswMzBjIFUrMDBBMCBVKzAwQUEuCisgICAgKCdqXHhjY1x4OGNceGMyXHhhMFx4YzJceGFhJywKKyAgICAgJ1x4YzdceGIwIGEnKSwKKyAgICAjIDMuOCBDYXNlIGZvbGRpbmcgVSsxRkI3IGFuZCBub3JtYWxpemF0aW9uLgorICAgICgnXHhlMVx4YmVceGI3JywKKyAgICAgJ1x4ZTFceGJlXHhiNlx4Y2VceGI5JyksCisgICAgIyAzLjkgU2VsZi1yZXZlcnRpbmcgY2FzZSBmb2xkaW5nIFUrMDFGMCBhbmQgbm9ybWFsaXphdGlvbi4KKyAgICAjIFRoZSBvcmlnaW5hbCB0ZXN0IGNhc2UgaXMgYm9ndXMsIGl0IHNheXMgYFx4YzdceGYwJworICAgICgnXHhjN1x4YjAnLAorICAgICAnXHhjN1x4YjAnKSwKKyAgICAjIDMuMTAgU2VsZi1yZXZlcnRpbmcgY2FzZSBmb2xkaW5nIFUrMDM5MCBhbmQgbm9ybWFsaXphdGlvbi4KKyAgICAoJ1x4Y2VceDkwJywKKyAgICAgJ1x4Y2VceDkwJyksCisgICAgIyAzLjExIFNlbGYtcmV2ZXJ0aW5nIGNhc2UgZm9sZGluZyBVKzAzQjAgYW5kIG5vcm1hbGl6YXRpb24uCisgICAgKCdceGNlXHhiMCcsCisgICAgICdceGNlXHhiMCcpLAorICAgICMgMy4xMiBTZWxmLXJldmVydGluZyBjYXNlIGZvbGRpbmcgVSsxRTk2IGFuZCBub3JtYWxpemF0aW9uLgorICAgICgnXHhlMVx4YmFceDk2JywKKyAgICAgJ1x4ZTFceGJhXHg5NicpLAorICAgICMgMy4xMyBTZWxmLXJldmVydGluZyBjYXNlIGZvbGRpbmcgVSsxRjU2IGFuZCBub3JtYWxpemF0aW9uLgorICAgICgnXHhlMVx4YmRceDk2JywKKyAgICAgJ1x4ZTFceGJkXHg5NicpLAorICAgICMgMy4xNCBBU0NJSSBzcGFjZSBjaGFyYWN0ZXIgVSswMDIwLgorICAgICgnICcsCisgICAgICcgJyksCisgICAgIyAzLjE1IE5vbi1BU0NJSSA4Yml0IHNwYWNlIGNoYXJhY3RlciBVKzAwQTAuCisgICAgKCdceGMyXHhhMCcsCisgICAgICcgJyksCisgICAgIyAzLjE2IE5vbi1BU0NJSSBtdWx0aWJ5dGUgc3BhY2UgY2hhcmFjdGVyIFUrMTY4MC4KKyAgICAoJ1x4ZTFceDlhXHg4MCcsCisgICAgIE5vbmUpLAorICAgICMgMy4xNyBOb24tQVNDSUkgbXVsdGlieXRlIHNwYWNlIGNoYXJhY3RlciBVKzIwMDAuCisgICAgKCdceGUyXHg4MFx4ODAnLAorICAgICAnICcpLAorICAgICMgMy4xOCBaZXJvIFdpZHRoIFNwYWNlIFUrMjAwYi4KKyAgICAoJ1x4ZTJceDgwXHg4YicsCisgICAgICcnKSwKKyAgICAjIDMuMTkgTm9uLUFTQ0lJIG11bHRpYnl0ZSBzcGFjZSBjaGFyYWN0ZXIgVSszMDAwLgorICAgICgnXHhlM1x4ODBceDgwJywKKyAgICAgJyAnKSwKKyAgICAjIDMuMjAgQVNDSUkgY29udHJvbCBjaGFyYWN0ZXJzIFUrMDAxMCBVKzAwN0YuCisgICAgKCdceDEwXHg3ZicsCisgICAgICdceDEwXHg3ZicpLAorICAgICMgMy4yMSBOb24tQVNDSUkgOGJpdCBjb250cm9sIGNoYXJhY3RlciBVKzAwODUuCisgICAgKCdceGMyXHg4NScsCisgICAgIE5vbmUpLAorICAgICMgMy4yMiBOb24tQVNDSUkgbXVsdGlieXRlIGNvbnRyb2wgY2hhcmFjdGVyIFUrMTgwRS4KKyAgICAoJ1x4ZTFceGEwXHg4ZScsCisgICAgIE5vbmUpLAorICAgICMgMy4yMyBaZXJvIFdpZHRoIE5vLUJyZWFrIFNwYWNlIFUrRkVGRi4KKyAgICAoJ1x4ZWZceGJiXHhiZicsCisgICAgICcnKSwKKyAgICAjIDMuMjQgTm9uLUFTQ0lJIGNvbnRyb2wgY2hhcmFjdGVyIFUrMUQxNzUuCisgICAgKCdceGYwXHg5ZFx4ODVceGI1JywKKyAgICAgTm9uZSksCisgICAgIyAzLjI1IFBsYW5lIDAgcHJpdmF0ZSB1c2UgY2hhcmFjdGVyIFUrRjEyMy4KKyAgICAoJ1x4ZWZceDg0XHhhMycsCisgICAgIE5vbmUpLAorICAgICMgMy4yNiBQbGFuZSAxNSBwcml2YXRlIHVzZSBjaGFyYWN0ZXIgVStGMTIzNC4KKyAgICAoJ1x4ZjNceGIxXHg4OFx4YjQnLAorICAgICBOb25lKSwKKyAgICAjIDMuMjcgUGxhbmUgMTYgcHJpdmF0ZSB1c2UgY2hhcmFjdGVyIFUrMTBGMjM0LgorICAgICgnXHhmNFx4OGZceDg4XHhiNCcsCisgICAgIE5vbmUpLAorICAgICMgMy4yOCBOb24tY2hhcmFjdGVyIGNvZGUgcG9pbnQgVSs4RkZGRS4KKyAgICAoJ1x4ZjJceDhmXHhiZlx4YmUnLAorICAgICBOb25lKSwKKyAgICAjIDMuMjkgTm9uLWNoYXJhY3RlciBjb2RlIHBvaW50IFUrMTBGRkZGLgorICAgICgnXHhmNFx4OGZceGJmXHhiZicsCisgICAgIE5vbmUpLAorICAgICMgMy4zMCBTdXJyb2dhdGUgY29kZSBVK0RGNDIuCisgICAgKCdceGVkXHhiZFx4ODInLAorICAgICBOb25lKSwKKyAgICAjIDMuMzEgTm9uLXBsYWluIHRleHQgY2hhcmFjdGVyIFUrRkZGRC4KKyAgICAoJ1x4ZWZceGJmXHhiZCcsCisgICAgIE5vbmUpLAorICAgICMgMy4zMiBJZGVvZ3JhcGhpYyBkZXNjcmlwdGlvbiBjaGFyYWN0ZXIgVSsyRkY1LgorICAgICgnXHhlMlx4YmZceGI1JywKKyAgICAgTm9uZSksCisgICAgIyAzLjMzIERpc3BsYXkgcHJvcGVydHkgY2hhcmFjdGVyIFUrMDM0MS4KKyAgICAoJ1x4Y2RceDgxJywgCisgICAgICdceGNjXHg4MScpLAorICAgICMgMy4zNCBMZWZ0LXRvLXJpZ2h0IG1hcmsgVSsyMDBFLgorICAgICgnXHhlMlx4ODBceDhlJywKKyAgICAgTm9uZSksCisgICAgIyAzLjM1IERlcHJlY2F0ZWQgVSsyMDJBLgorICAgICgnXHhlMlx4ODBceGFhJywKKyAgICAgTm9uZSksCisgICAgIyAzLjM2IExhbmd1YWdlIHRhZ2dpbmcgY2hhcmFjdGVyIFUrRTAwMDEuCisgICAgKCdceGYzXHhhMFx4ODBceDgxJywKKyAgICAgTm9uZSksCisgICAgIyAzLjM3IExhbmd1YWdlIHRhZ2dpbmcgY2hhcmFjdGVyIFUrRTAwNDIuCisgICAgKCdceGYzXHhhMFx4ODFceDgyJywKKyAgICAgTm9uZSksCisgICAgIyAzLjM4IEJpZGk6IFJhbmRBTENhdCBjaGFyYWN0ZXIgVSswNUJFIGFuZCBMQ2F0IGNoYXJhY3RlcnMuCisgICAgKCdmb29ceGQ2XHhiZWJhcicsCisgICAgIE5vbmUpLAorICAgICMgMy4zOSBCaWRpOiBSYW5kQUxDYXQgY2hhcmFjdGVyIFUrRkQ1MCBhbmQgTENhdCBjaGFyYWN0ZXJzLgorICAgICgnZm9vXHhlZlx4YjVceDkwYmFyJywKKyAgICAgTm9uZSksCisgICAgIyAzLjQwIEJpZGk6IFJhbmRBTENhdCBjaGFyYWN0ZXIgVStGQjM4IGFuZCBMQ2F0IGNoYXJhY3RlcnMuCisgICAgKCdmb29ceGVmXHhiOVx4YjZiYXInLAorICAgICAnZm9vIFx4ZDlceDhlYmFyJyksCisgICAgIyAzLjQxIEJpZGk6IFJhbmRBTENhdCB3aXRob3V0IHRyYWlsaW5nIFJhbmRBTENhdCBVKzA2MjcgVSswMDMxLgorICAgICgnXHhkOFx4YTcxJywKKyAgICAgTm9uZSksCisgICAgIyAzLjQyIEJpZGk6IFJhbmRBTENhdCBjaGFyYWN0ZXIgVSswNjI3IFUrMDAzMSBVKzA2MjguCisgICAgKCdceGQ4XHhhNzFceGQ4XHhhOCcsCisgICAgICdceGQ4XHhhNzFceGQ4XHhhOCcpLAorICAgICMgMy40MyBVbmFzc2lnbmVkIGNvZGUgcG9pbnQgVStFMDAwMi4KKyAgICAoJ1x4ZjNceGEwXHg4MFx4ODInLAorICAgICBOb25lKSwKKyAgICAjIDMuNDQgTGFyZ2VyIHRlc3QgKHNocmlua2luZykuCisgICAgIyBPcmlnaW5hbCB0ZXN0IGNhc2UgcmVhZHMgXHhjM1x4ZGYKKyAgICAoJ1hceGMyXHhhZFx4YzNceDlmXHhjNFx4YjBceGUyXHg4NFx4YTFqXHhjY1x4OGNceGMyXHhhMFx4YzInCisgICAgICdceGFhXHhjZVx4YjBceGUyXHg4MFx4ODAnLAorICAgICAneHNzaVx4Y2NceDg3dGVsXHhjN1x4YjAgYVx4Y2VceGIwICcpLAorICAgICMgMy40NSBMYXJnZXIgdGVzdCAoZXhwYW5kaW5nKS4KKyAgICAjIE9yaWdpbmFsIHRlc3QgY2FzZSByZWFkcyBceGMzXHg5ZgorICAgICgnWFx4YzNceDlmXHhlM1x4OGNceDk2XHhjNFx4YjBceGUyXHg4NFx4YTFceGUyXHg5Mlx4OWZceGUzXHg4YycKKyAgICAgJ1x4ODAnLAorICAgICAneHNzXHhlM1x4ODJceGFkXHhlM1x4ODNceGFkXHhlM1x4ODNceGExXHhlM1x4ODNceGJjXHhlMycKKyAgICAgJ1x4ODNceDg4XHhlM1x4ODNceGFiaVx4Y2NceDg3dGVsXHgyOGRceDI5XHhlM1x4ODInCisgICAgICdceGEyXHhlM1x4ODNceDkxXHhlM1x4ODNceGJjXHhlM1x4ODNceDg4JykKKyAgICBdCisKKworY2xhc3MgTmFtZXByZXBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9uYW1lcHJlcChzZWxmKToKKyAgICAgICAgZnJvbSBlbmNvZGluZ3MuaWRuYSBpbXBvcnQgbmFtZXByZXAKKyAgICAgICAgZm9yIHBvcywgKG9yaWcsIHByZXBwZWQpIGluIGVudW1lcmF0ZShuYW1lcHJlcF90ZXN0cyk6CisgICAgICAgICAgICBpZiBvcmlnIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgIyBTa2lwcGVkCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICMgVGhlIFVuaWNvZGUgc3RyaW5ncyBhcmUgZ2l2ZW4gaW4gVVRGLTgKKyAgICAgICAgICAgIG9yaWcgPSB1bmljb2RlKG9yaWcsICJ1dGYtOCIpCisgICAgICAgICAgICBpZiBwcmVwcGVkIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgIyBJbnB1dCBjb250YWlucyBwcm9oaWJpdGVkIGNoYXJhY3RlcnMKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRXJyb3IsIG5hbWVwcmVwLCBvcmlnKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwcmVwcGVkID0gdW5pY29kZShwcmVwcGVkLCAidXRmLTgiKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobmFtZXByZXAob3JpZyksIHByZXBwZWQpCisgICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbixlOgorICAgICAgICAgICAgICAgICAgICByYWlzZSB0ZXN0X3N1cHBvcnQuVGVzdEZhaWxlZCgiVGVzdCAzLiVkOiAlcyIgJSAocG9zKzEsIHN0cihlKSkpCisKIGRlZiB0ZXN0X21haW4oKToKICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCiAgICAgc3VpdGUuYWRkVGVzdCh1bml0dGVzdC5tYWtlU3VpdGUoVVRGMTZUZXN0KSkKICAgICBzdWl0ZS5hZGRUZXN0KHVuaXR0ZXN0Lm1ha2VTdWl0ZShFc2NhcGVEZWNvZGVUZXN0KSkKICAgICBzdWl0ZS5hZGRUZXN0KHVuaXR0ZXN0Lm1ha2VTdWl0ZShSZWNvZGluZ1Rlc3QpKQorICAgIHN1aXRlLmFkZFRlc3QodW5pdHRlc3QubWFrZVN1aXRlKFB1bnljb2RlVGVzdCkpCisgICAgc3VpdGUuYWRkVGVzdCh1bml0dGVzdC5tYWtlU3VpdGUoTmFtZXByZXBUZXN0KSkKICAgICB0ZXN0X3N1cHBvcnQucnVuX3N1aXRlKHN1aXRlKQogCiAKZGlmZiAtLWdpdCBhL01pc2MvTkVXUyBiL01pc2MvTkVXUwppbmRleCAzYTE5YTIwLi4wN2E5YmM2IDEwMDY0NAotLS0gYS9NaXNjL05FV1MKKysrIGIvTWlzYy9ORVdTCkBAIC0xMTgsNiArMTE4LDExIEBACiBMaWJyYXJ5CiAtLS0tLS0tCiAKKy0gU3VwcG9ydCBmb3IgaW50ZXJuYXRpb25hbGl6ZWQgZG9tYWluIG5hbWVzIGhhcyBiZWVuIGFkZGVkIHRocm91Z2gKKyAgdGhlICdpZG5hJyBhbmQgJ3B1bnljb2RlJyBlbmNvZGluZ3MsIHRoZSAnc3RyaW5ncHJlcCcgbW9kdWxlLCB0aGUKKyAgJ21rc3RyaW5ncHJlcCcgdG9vbCwgYW5kIGVuaGFuY2VtZW50cyB0byB0aGUgc29ja2V0IGFuZCBodHRwbGliCisgIG1vZHVsZXMuCisKIC0gaHRtbGVudGl0eWRlZnMgaGFzIHR3byBuZXcgZGljdGlvbmFyaWVzOiBuYW1lMmNvZGVwb2ludCBtYXBzCiAgIEhUTUwgZW50aXR5IG5hbWVzIHRvIFVuaWNvZGUgY29kZXBvaW50cyAoYXMgaW50ZWdlcnMpLgogICBjb2RlcG9pbnQybmFtZSBpcyB0aGUgcmV2ZXJzZSBtYXBwaW5nLiBTZWUgU0YgcGF0Y2ggIzcyMjAxNy4KZGlmZiAtLWdpdCBhL01vZHVsZXMvc29ja2V0bW9kdWxlLmMgYi9Nb2R1bGVzL3NvY2tldG1vZHVsZS5jCmluZGV4IDlkOGQ2MTQuLmJhNjRjYjggMTAwNjQ0Ci0tLSBhL01vZHVsZXMvc29ja2V0bW9kdWxlLmMKKysrIGIvTW9kdWxlcy9zb2NrZXRtb2R1bGUuYwpAQCAtODc0LDcgKzg3NCw4IEBACiAJCQkJYXJncy0+b2JfdHlwZS0+dHBfbmFtZSk7CiAJCQlyZXR1cm4gMDsKIAkJfQotCQlpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInNpOmdldHNvY2thZGRyYXJnIiwgJmhvc3QsICZwb3J0KSkKKwkJaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJldGk6Z2V0c29ja2FkZHJhcmciLCAKKwkJCQkgICAgICAiaWRuYSIsICZob3N0LCAmcG9ydCkpCiAJCQlyZXR1cm4gMDsKIAkJaWYgKHNldGlwYWRkcihob3N0LCAoc3RydWN0IHNvY2thZGRyICopYWRkciwgc2l6ZW9mKCphZGRyKSwgIEFGX0lORVQpIDwgMCkKIAkJCXJldHVybiAwOwpAQCAtODkzLDcgKzg5NCw4IEBACiAJCWludCBwb3J0LCBmbG93aW5mbywgc2NvcGVfaWQ7CiAgCQlhZGRyID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYqKSYocy0+c29ja19hZGRyKS5pbjY7CiAJCWZsb3dpbmZvID0gc2NvcGVfaWQgPSAwOwotCQlpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInNpfGlpIiwgJmhvc3QsICZwb3J0LCAmZmxvd2luZm8sCisJCWlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiZXRpfGlpIiwgCisJCQkJICAgICAgImlkbmEiLCAmaG9zdCwgJnBvcnQsICZmbG93aW5mbywKIAkJCQkgICAgICAmc2NvcGVfaWQpKSB7CiAJCQlyZXR1cm4gMDsKIAkJfQpAQCAtMjc4Miw2ICsyNzg0LDcgQEAKIHsKIAlzdHJ1Y3QgYWRkcmluZm8gaGludHMsICpyZXM7CiAJc3RydWN0IGFkZHJpbmZvICpyZXMwID0gTlVMTDsKKwlQeU9iamVjdCAqaG9iaiA9IE5VTEw7CiAJUHlPYmplY3QgKnBvYmogPSAoUHlPYmplY3QgKilOVUxMOwogCWNoYXIgcGJ1ZlszMF07CiAJY2hhciAqaHB0ciwgKnBwdHI7CkBAIC0yNzg5LDEyICsyNzkyLDI3IEBACiAJaW50IGVycm9yOwogCVB5T2JqZWN0ICphbGwgPSAoUHlPYmplY3QgKilOVUxMOwogCVB5T2JqZWN0ICpzaW5nbGUgPSAoUHlPYmplY3QgKilOVUxMOworCVB5T2JqZWN0ICppZG5hID0gTlVMTDsKIAogCWZhbWlseSA9IHNvY2t0eXBlID0gcHJvdG9jb2wgPSBmbGFncyA9IDA7CiAJZmFtaWx5ID0gQUZfVU5TUEVDOwotCWlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiek98aWlpaTpnZXRhZGRyaW5mbyIsCi0JICAgICZocHRyLCAmcG9iaiwgJmZhbWlseSwgJnNvY2t0eXBlLAotCQkJJnByb3RvY29sLCAmZmxhZ3MpKSB7CisJaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPT3xpaWlpOmdldGFkZHJpbmZvIiwKKwkJCSAgICAgICZob2JqLCAmcG9iaiwgJmZhbWlseSwgJnNvY2t0eXBlLAorCQkJICAgICAgJnByb3RvY29sLCAmZmxhZ3MpKSB7CisJCXJldHVybiBOVUxMOworCX0KKwlpZiAoaG9iaiA9PSBQeV9Ob25lKSB7CisJCWhwdHIgPSBOVUxMOworCX0gZWxzZSBpZiAoUHlVbmljb2RlX0NoZWNrKGhvYmopKSB7CisJCWlkbmEgPSBQeU9iamVjdF9DYWxsTWV0aG9kKGhvYmosICJlbmNvZGUiLCAicyIsICJpZG5hIik7CisJCWlmICghaWRuYSkKKwkJCXJldHVybiBOVUxMOworCQlocHRyID0gUHlTdHJpbmdfQXNTdHJpbmcoaWRuYSk7CisJfSBlbHNlIGlmIChQeVN0cmluZ19DaGVjayhob2JqKSkgeworCQlocHRyID0gUHlTdHJpbmdfQXNTdHJpbmcoaG9iaik7CisJfSBlbHNlIHsKKwkJUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgCisJCQkJImdldGFkZHJpbmZvKCkgYXJndW1lbnQgMSBtdXN0IGJlIHN0cmluZyBvciBOb25lIik7CiAJCXJldHVybiBOVUxMOwogCX0KIAlpZiAoUHlJbnRfQ2hlY2socG9iaikpIHsKQEAgLTI4MzgsMTIgKzI4NTYsMTQgQEAKIAkJCWdvdG8gZXJyOwogCQlQeV9YREVDUkVGKHNpbmdsZSk7CiAJfQorCVB5X1hERUNSRUYoaWRuYSk7CiAJaWYgKHJlczApCiAJCWZyZWVhZGRyaW5mbyhyZXMwKTsKIAlyZXR1cm4gYWxsOwogIGVycjoKIAlQeV9YREVDUkVGKHNpbmdsZSk7CiAJUHlfWERFQ1JFRihhbGwpOworCVB5X1hERUNSRUYoaWRuYSk7CiAJaWYgKHJlczApCiAJCWZyZWVhZGRyaW5mbyhyZXMwKTsKIAlyZXR1cm4gKFB5T2JqZWN0ICopTlVMTDsKZGlmZiAtLWdpdCBhL1Rvb2xzL3VuaWNvZGUvbWtzdHJpbmdwcmVwLnB5IGIvVG9vbHMvdW5pY29kZS9ta3N0cmluZ3ByZXAucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWRkMWUwNAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL3VuaWNvZGUvbWtzdHJpbmdwcmVwLnB5CkBAIC0wLDAgKzEsNDMzIEBACitpbXBvcnQgcmUsIHVuaWNvZGVkYXRhLCBzeXMsIHNldHMKK2Zyb20gc2V0cyBpbXBvcnQgU2V0CisKK2lmIHN5cy5tYXh1bmljb2RlID09IDY1NTM1OgorICAgIHJhaXNlIFJ1bnRpbWVFcnJvciwgIm5lZWQgVUNTLTQgUHl0aG9uIgorCitkZWYgZ2VuX2NhdGVnb3J5KGNhdHMpOgorICAgIGZvciBpIGluIHJhbmdlKDAsIDB4MTEwMDAwKToKKyAgICAgICAgaWYgdW5pY29kZWRhdGEuY2F0ZWdvcnkodW5pY2hyKGkpKSBpbiBjYXRzOgorICAgICAgICAgICAgeWllbGQoaSkKKworZGVmIGdlbl9iaWRpcmVjdGlvbmFsKGNhdHMpOgorICAgIGZvciBpIGluIHJhbmdlKDAsIDB4MTEwMDAwKToKKyAgICAgICAgaWYgdW5pY29kZWRhdGEuYmlkaXJlY3Rpb25hbCh1bmljaHIoaSkpIGluIGNhdHM6CisgICAgICAgICAgICB5aWVsZChpKQorCitkZWYgY29tcGFjdF9zZXQobCk6CisgICAgc2luZ2xlID0gW10KKyAgICB0dXBsZSA9IFtdCisgICAgcHJldiA9IE5vbmUKKyAgICBzcGFuID0gMAorICAgIGZvciBlIGluIGw6CisgICAgICAgIGlmIHByZXYgaXMgTm9uZToKKyAgICAgICAgICAgIHByZXYgPSBlCisgICAgICAgICAgICBzcGFuID0gMAorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgaWYgcHJlditzcGFuKzEgIT0gZToKKyAgICAgICAgICAgIGlmIHNwYW4gPiAyOgorICAgICAgICAgICAgICAgIHR1cGxlLmFwcGVuZCgocHJldixwcmV2K3NwYW4rMSkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKHByZXYsIHByZXYrc3BhbisxKToKKyAgICAgICAgICAgICAgICAgICAgc2luZ2xlLmFwcGVuZChpKQorICAgICAgICAgICAgcHJldiA9IGUKKyAgICAgICAgICAgIHNwYW4gPSAwCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzcGFuICs9IDEKKyAgICBpZiBzcGFuOgorICAgICAgICB0dXBsZS5hcHBlbmQoKHByZXYscHJlditzcGFuKzEpKQorICAgIGVsc2U6CisgICAgICAgIHNpbmdsZS5hcHBlbmQocHJldikKKyAgICB0dXBsZSA9ICIgKyAiLmpvaW4oWyJyYW5nZSglZCwlZCkiICUgdCBmb3IgdCBpbiB0dXBsZV0pCisgICAgaWYgbm90IHNpbmdsZToKKyAgICAgICAgcmV0dXJuICJzZXRzLlNldCglcykiICUgdHVwbGUKKyAgICBpZiBub3QgdHVwbGU6CisgICAgICAgIHJldHVybiAic2V0cy5TZXQoJXMpIiAlIHJlcHIoc2luZ2xlKQorICAgIHJldHVybiAic2V0cy5TZXQoJXMgKyAlcykiICUgKHJlcHIoc2luZ2xlKSx0dXBsZSkKKworIyMjIyMjIyMjIyMjIyMgUmVhZCB0aGUgdGFibGVzIGluIHRoZSBSRkMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworZGF0YSA9IG9wZW4oInJmYzM0NTQudHh0IikucmVhZGxpbmVzKCkKKwordGFibGVzID0gW10KK2N1cm5hbWUgPSBOb25lCitmb3IgbCBpbiBkYXRhOgorICAgIGwgPSBsLnN0cmlwKCkKKyAgICBpZiBub3QgbDoKKyAgICAgICAgY29udGludWUKKyAgICAjIFNraXAgUkZDIHBhZ2UgYnJlYWtzCisgICAgaWYgbC5zdGFydHN3aXRoKCJIb2ZmbWFuICYgQmxhbmNoZXQiKSBvclwKKyAgICAgICBsLnN0YXJ0c3dpdGgoIlJGQyAzNDU0Iik6CisgICAgICAgIGNvbnRpbnVlCisgICAgIyBGaW5kIHN0YXJ0L2VuZCBsaW5lcworICAgIG0gPSByZS5tYXRjaCgiLS0tLS0gKFN0YXJ0fEVuZCkgVGFibGUgKFtBLVpdKC5bMC05XSkrKSAtLS0tLSIsIGwpCisgICAgaWYgbToKKyAgICAgICAgaWYgbS5ncm91cCgxKSA9PSAiU3RhcnQiOgorICAgICAgICAgICAgaWYgY3VybmFtZToKKyAgICAgICAgICAgICAgICByYWlzZSAiRG91YmxlIFN0YXJ0IiwoY3VybmFtZSwgbCkKKyAgICAgICAgICAgIGN1cm5hbWUgPSBtLmdyb3VwKDIpCisgICAgICAgICAgICB0YWJsZSA9IHt9CisgICAgICAgICAgICB0YWJsZXMuYXBwZW5kKChjdXJuYW1lLCB0YWJsZSkpCisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgbm90IGN1cm5hbWU6CisgICAgICAgICAgICAgICAgcmFpc2UgIkVuZCB3aXRob3V0IHN0YXJ0IiwgbAorICAgICAgICAgICAgY3VybmFtZSA9IE5vbmUKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgaWYgbm90IGN1cm5hbWU6CisgICAgICAgIGNvbnRpbnVlCisgICAgIyBOb3cgd2UgYXJlIGluIGEgdGFibGUKKyAgICBmaWVsZHMgPSBsLnNwbGl0KCI7IikKKyAgICBpZiBsZW4oZmllbGRzKSA+IDE6CisgICAgICAgICMgRHJvcCBjb21tZW50IGZpZWxkCisgICAgICAgIGZpZWxkcyA9IGZpZWxkc1s6LTFdCisgICAgaWYgbGVuKGZpZWxkcykgPT0gMToKKyAgICAgICAgZmllbGRzID0gZmllbGRzWzBdLnNwbGl0KCItIikKKyAgICAgICAgaWYgbGVuKGZpZWxkcykgPiAxOgorICAgICAgICAgICAgIyByYW5nZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHN0YXJ0LCBlbmQgPSBmaWVsZHMKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIHJhaXNlICJVbnBhY2tpbmcgcHJvYmxlbSIsIGwKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHN0YXJ0ID0gZW5kID0gZmllbGRzWzBdCisgICAgICAgIHN0YXJ0ID0gaW50KHN0YXJ0LCAxNikKKyAgICAgICAgZW5kID0gaW50KGVuZCwgMTYpCisgICAgICAgIGZvciBpIGluIHJhbmdlKHN0YXJ0LCBlbmQrMSk6CisgICAgICAgICAgICB0YWJsZVtpXSA9IGkKKyAgICBlbHNlOgorICAgICAgICBjb2RlLCB2YWx1ZSA9IGZpZWxkcworICAgICAgICB2YWx1ZSA9IHZhbHVlLnN0cmlwKCkKKyAgICAgICAgaWYgdmFsdWU6CisgICAgICAgICAgICB2YWx1ZSA9IFtpbnQodiwgMTYpIGZvciB2IGluIHZhbHVlLnNwbGl0KCIgIildCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIHRhYmxlIEIuMQorICAgICAgICAgICAgdmFsdWUgPSBOb25lCisgICAgICAgIHRhYmxlW2ludChjb2RlLCAxNildID0gdmFsdWUKKworIyMjIyMjIyMjIyMgR2VuZXJhdGUgY29tcGFjdCBQeXRob24gdmVyc2lvbnMgb2YgdGhlIHRhYmxlcyAjIyMjIyMjIyMjIyMjCisKK3ByaW50ICIiIiMgVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBieSBta3N0cmluZ3ByZXAucHkuIERPIE5PVCBFRElULgorXCJcIlwiTGlicmFyeSB0aGF0IGV4cG9zZXMgdmFyaW91cyB0YWJsZXMgZm91bmQgaW4gdGhlIFN0cmluZ1ByZXAgUkZDIDM0NTQuCisKK1RoZXJlIGFyZSB0d28ga2luZHMgb2YgdGFibGVzOiBzZXRzLCBmb3Igd2hpY2ggYSBtZW1iZXIgdGVzdCBpcyBwcm92aWRlZCwKK2FuZCBtYXBwaW5ncywgZm9yIHdoaWNoIGEgbWFwcGluZyBmdW5jdGlvbiBpcyBwcm92aWRlZC4KK1wiXCJcIgorCitpbXBvcnQgdW5pY29kZWRhdGEsIHNldHMKKyIiIgorCitwcmludCAiYXNzZXJ0IHVuaWNvZGVkYXRhLnVuaWRhdGFfdmVyc2lvbiA9PSAlcyIgJSByZXByKHVuaWNvZGVkYXRhLnVuaWRhdGFfdmVyc2lvbikKKworIyBBLjEgaXMgdGhlIHRhYmxlIG9mIHVuYXNzaWduZWQgY2hhcmFjdGVycworIyBYWFggUGxhbmUgMTUgUFVBIGlzIGxpc3RlZCBhcyB1bmFzc2lnbmVkIGluIFB5dGhvbi4KK25hbWUsIHRhYmxlID0gdGFibGVzWzBdCitkZWwgdGFibGVzWzBdCithc3NlcnQgbmFtZSA9PSAiQS4xIgordGFibGUgPSBTZXQodGFibGUua2V5cygpKQorQ24gPSBTZXQoZ2VuX2NhdGVnb3J5KFsiQ24iXSkpCisKKyMgRkREMC4uRkRFRiBhcmUgcHJvY2VzcyBpbnRlcm5hbCBjb2RlcworQ24gLT0gU2V0KHJhbmdlKDB4RkREMCwgMHhGREYwKSkKKyMgbm90IGEgY2hhcmFjdGVyCitDbiAtPSBTZXQocmFuZ2UoMHhGRkZFLCAweDExMDAwMCwgMHgxMDAwMCkpCitDbiAtPSBTZXQocmFuZ2UoMHhGRkZGLCAweDExMDAwMCwgMHgxMDAwMCkpCisKKyMgYXNzZXJ0IHRhYmxlID09IENuCisKK3ByaW50ICIiIgorZGVmIGluX3RhYmxlX2ExKGNvZGUpOgorICAgIGlmIHVuaWNvZGVkYXRhLmNhdGVnb3J5KGNvZGUpICE9ICdDbic6IHJldHVybiBGYWxzZQorICAgIGMgPSBvcmQoY29kZSkKKyAgICBpZiAweEZERDAgPD0gYyA8IDB4RkRGMDogcmV0dXJuIEZhbHNlCisgICAgcmV0dXJuIChjICYgMHhGRkZGKSBub3QgaW4gKDB4RkZGRSwgMHhGRkZGKQorIiIiCisKKyMgQi4xIGNhbm5vdCBlYXNpbHkgYmUgZGVyaXZlZAorbmFtZSwgdGFibGUgPSB0YWJsZXNbMF0KK2RlbCB0YWJsZXNbMF0KK2Fzc2VydCBuYW1lID09ICJCLjEiCit0YWJsZSA9IHRhYmxlLmtleXMoKQordGFibGUuc29ydCgpCitwcmludCAiIiIKK2IxX3NldCA9ICIiIiArIGNvbXBhY3Rfc2V0KHRhYmxlKSArICIiIgorZGVmIGluX3RhYmxlX2IxKGNvZGUpOgorICAgIHJldHVybiBvcmQoY29kZSkgaW4gYjFfc2V0CisiIiIKKworIyBCLjIgYW5kIEIuMyBpcyBjYXNlIGZvbGRpbmcuCisjIEl0IHRha2VzIENhc2VGb2xkaW5nLnR4dCBpbnRvIGFjY291bnQsIHdoaWNoIGlzCisjIG5vdCBhdmFpbGFibGUgaW4gdGhlIFB5dGhvbiBkYXRhYmFzZS4gU2luY2UKKyMgQi4yIGlzIGRlcml2ZWQgZnJvbSBCLjMsIHdlIHByb2Nlc3MgQi4zIGZpcnN0LgorIyBCLjMgc3VwcG9zZWRseSAqaXMqIENhc2VGb2xkaW5nLTMuMi4wLnR4dC4KKworbmFtZSwgdGFibGVfYjIgPSB0YWJsZXNbMF0KK2RlbCB0YWJsZXNbMF0KK2Fzc2VydCBuYW1lID09ICJCLjIiCisKK25hbWUsIHRhYmxlX2IzID0gdGFibGVzWzBdCitkZWwgdGFibGVzWzBdCithc3NlcnQgbmFtZSA9PSAiQi4zIgorCisjIEIuMyBpcyBtb3N0bHkgUHl0aG9uJ3MgLmxvd2VyLCBleGNlcHQgZm9yIGEgbnVtYmVyCisjIG9mIHNwZWNpYWwgY2FzZXMsIGUuZy4gY29uc2lkZXJpbmcgY2Fub25pY2FsIGZvcm1zLgorCitiM19leGNlcHRpb25zID0ge30KKworZm9yIGssdiBpbiB0YWJsZV9iMi5pdGVtcygpOgorICAgIGlmIG1hcChvcmQsIHVuaWNocihrKS5sb3dlcigpKSAhPSB2OgorICAgICAgICBiM19leGNlcHRpb25zW2tdID0gdSIiLmpvaW4obWFwKHVuaWNocix2KSkKKworYjMgPSBiM19leGNlcHRpb25zLml0ZW1zKCkKK2IzLnNvcnQoKQorCitwcmludCAiIiIKK2IzX2V4Y2VwdGlvbnMgPSB7IiIiCitmb3IgaSwoayx2KSBpbiBlbnVtZXJhdGUoYjMpOgorICAgIHByaW50ICIweCV4OiVzLCIgJSAoaywgcmVwcih2KSksCisgICAgaWYgaSAlIDQgPT0gMzoKKyAgICAgICAgcHJpbnQKK3ByaW50ICJ9IgorCitwcmludCAiIiIKK2RlZiBtYXBfdGFibGVfYjMoY29kZSk6CisgICAgciA9IGIzX2V4Y2VwdGlvbnMuZ2V0KG9yZChjb2RlKSkKKyAgICBpZiByIGlzIG5vdCBOb25lOiByZXR1cm4gcgorICAgIHJldHVybiBjb2RlLmxvd2VyKCkKKyIiIgorCitkZWYgbWFwX3RhYmxlX2IzKGNvZGUpOgorICAgIHIgPSBiM19leGNlcHRpb25zLmdldChvcmQoY29kZSkpCisgICAgaWYgciBpcyBub3QgTm9uZTogcmV0dXJuIHIKKyAgICByZXR1cm4gY29kZS5sb3dlcigpCisKKyMgQi4yIGlzIGNhc2UgZm9sZGluZyBmb3IgTkZLQy4gVGhpcyBpcyB0aGUgc2FtZSBhcyBCLjMsCisjIGV4Y2VwdCB3aGVyZSBOb3JtYWxpemVXaXRoS0MoRm9sZChhKSkgIT0KKyMgTm9ybWFsaXplV2l0aEtDKEZvbGQoTm9ybWFsaXplV2l0aEtDKEZvbGQoYSkpKSkKKworZGVmIG1hcF90YWJsZV9iMihhKToKKyAgICBhbCA9IG1hcF90YWJsZV9iMyhhKQorICAgIGIgPSB1bmljb2RlZGF0YS5ub3JtYWxpemUoIk5GS0MiLCBhbCkKKyAgICBibCA9IHUiIi5qb2luKFttYXBfdGFibGVfYjMoY2gpIGZvciBjaCBpbiBiXSkKKyAgICBjID0gdW5pY29kZWRhdGEubm9ybWFsaXplKCJORktDIiwgYmwpCisgICAgaWYgYiAhPSBjOgorICAgICAgICByZXR1cm4gYworICAgIGVsc2U6CisgICAgICAgIHJldHVybiBhbAorCitzcGVjaWFscyA9IHt9Citmb3Igayx2IGluIHRhYmxlX2IyLml0ZW1zKCk6CisgICAgaWYgbWFwKG9yZCwgbWFwX3RhYmxlX2IyKHVuaWNocihrKSkpICE9IHY6CisgICAgICAgIHNwZWNpYWxzW2tdID0gdgorCisjIEIuMyBzaG91bGQgbm90IGFkZCBhbnkgYWRkaXRpb25hbCBzcGVjaWFsIGNhc2VzCithc3NlcnQgc3BlY2lhbHMgPT0ge30KKworcHJpbnQgIiIiCitkZWYgbWFwX3RhYmxlX2IyKGEpOgorICAgIGFsID0gbWFwX3RhYmxlX2IzKGEpCisgICAgYiA9IHVuaWNvZGVkYXRhLm5vcm1hbGl6ZSgiTkZLQyIsIGFsKQorICAgIGJsID0gdSIiLmpvaW4oW21hcF90YWJsZV9iMyhjaCkgZm9yIGNoIGluIGJdKQorICAgIGMgPSB1bmljb2RlZGF0YS5ub3JtYWxpemUoIk5GS0MiLCBibCkKKyAgICBpZiBiICE9IGM6CisgICAgICAgIHJldHVybiBjCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIGFsCisiIiIKKworIyBDLjEuMSBpcyBhIHRhYmxlIHdpdGggYSBzaW5nbGUgY2hhcmFjdGVyCituYW1lLCB0YWJsZSA9IHRhYmxlc1swXQorZGVsIHRhYmxlc1swXQorYXNzZXJ0IG5hbWUgPT0gIkMuMS4xIgorYXNzZXJ0IHRhYmxlID09IHsweDIwOjB4MjB9CisKK3ByaW50ICIiIgorZGVmIGluX3RhYmxlX2MxMShjb2RlKToKKyAgICByZXR1cm4gY29kZSA9PSB1IiAiCisiIiIKKworIyBDLjEuMiBpcyB0aGUgcmVzdCBvZiBhbGwgc3BhY2UgY2hhcmFjdGVycworbmFtZSwgdGFibGUgPSB0YWJsZXNbMF0KK2RlbCB0YWJsZXNbMF0KK2Fzc2VydCBuYW1lID09ICJDLjEuMiIKKworIyB0YWJsZSA9IFNldCh0YWJsZS5rZXlzKCkpCisjIFpzID0gU2V0KGdlbl9jYXRlZ29yeShbIlpzIl0pKSAtIFNldChbMHgyMF0pCisjIGFzc2VydCBacyA9PSB0YWJsZQorCitwcmludCAiIiIKK2RlZiBpbl90YWJsZV9jMTIoY29kZSk6CisgICAgcmV0dXJuIHVuaWNvZGVkYXRhLmNhdGVnb3J5KGNvZGUpID09ICJacyIgYW5kIGNvZGUgIT0gdSIgIgorCitkZWYgaW5fdGFibGVfYzExX2MxMihjb2RlKToKKyAgICByZXR1cm4gdW5pY29kZWRhdGEuY2F0ZWdvcnkoY29kZSkgPT0gIlpzIgorIiIiCisKKyMgQy4yLjEgQVNDSUkgY29udHJvbCBjaGFyYWN0ZXJzCituYW1lLCB0YWJsZV9jMjEgPSB0YWJsZXNbMF0KK2RlbCB0YWJsZXNbMF0KK2Fzc2VydCBuYW1lID09ICJDLjIuMSIKKworQ2MgPSBTZXQoZ2VuX2NhdGVnb3J5KFsiQ2MiXSkpCitDY19hc2NpaSA9IENjICYgU2V0KHJhbmdlKDEyOCkpCit0YWJsZV9jMjEgPSBTZXQodGFibGVfYzIxLmtleXMoKSkKK2Fzc2VydCBDY19hc2NpaSA9PSB0YWJsZV9jMjEKKworcHJpbnQgIiIiCitkZWYgaW5fdGFibGVfYzIxKGNvZGUpOgorICAgIHJldHVybiBvcmQoY29kZSkgPCAxMjggYW5kIHVuaWNvZGVkYXRhLmNhdGVnb3J5KGNvZGUpID09ICJDYyIKKyIiIgorCisjIEMuMi4yIE5vbi1BU0NJSSBjb250cm9sIGNoYXJhY3RlcnMuIEl0IGFsc28gaW5jbHVkZXMKKyMgYSBudW1iZXIgb2YgY2hhcmFjdGVycyBpbiBjYXRlZ29yeSBDZi4KK25hbWUsIHRhYmxlX2MyMiA9IHRhYmxlc1swXQorZGVsIHRhYmxlc1swXQorYXNzZXJ0IG5hbWUgPT0gIkMuMi4yIgorCitDY19ub25hc2NpaSA9IENjIC0gQ2NfYXNjaWkKK3RhYmxlX2MyMiA9IFNldCh0YWJsZV9jMjIua2V5cygpKQorYXNzZXJ0IGxlbihDY19ub25hc2NpaSAtIHRhYmxlX2MyMikgPT0gMAorCitzcGVjaWFscyA9IGxpc3QodGFibGVfYzIyIC0gQ2Nfbm9uYXNjaWkpCitzcGVjaWFscy5zb3J0KCkKKworcHJpbnQgIiIiYzIyX3NwZWNpYWxzID0gIiIiICsgY29tcGFjdF9zZXQoc3BlY2lhbHMpICsgIiIiCitkZWYgaW5fdGFibGVfYzIyKGNvZGUpOgorICAgIGMgPSBvcmQoY29kZSkKKyAgICBpZiBjIDwgMTI4OiByZXR1cm4gRmFsc2UKKyAgICBpZiB1bmljb2RlZGF0YS5jYXRlZ29yeShjb2RlKSA9PSAiQ2MiOiByZXR1cm4gVHJ1ZQorICAgIHJldHVybiBjIGluIGMyMl9zcGVjaWFscworCitkZWYgaW5fdGFibGVfYzIxX2MyMihjb2RlKToKKyAgICByZXR1cm4gdW5pY29kZWRhdGEuY2F0ZWdvcnkoY29kZSkgPT0gIkNjIiBvciBcXAorICAgICAgICAgICBvcmQoY29kZSkgaW4gYzIyX3NwZWNpYWxzCisiIiIKKworIyBDLjMgUHJpdmF0ZSB1c2UKK25hbWUsIHRhYmxlID0gdGFibGVzWzBdCitkZWwgdGFibGVzWzBdCithc3NlcnQgbmFtZSA9PSAiQy4zIgorCitDbyA9IFNldChnZW5fY2F0ZWdvcnkoWyJDbyJdKSkKK2Fzc2VydCBTZXQodGFibGUua2V5cygpKSA9PSBDbworCitwcmludCAiIiIKK2RlZiBpbl90YWJsZV9jMyhjb2RlKToKKyAgICByZXR1cm4gdW5pY29kZWRhdGEuY2F0ZWdvcnkoY29kZSkgPT0gIkNvIgorIiIiCisKKyMgQy40IE5vbi1jaGFyYWN0ZXIgY29kZSBwb2ludHMsIHhGRkZFLCB4RkZGRgorIyBwbHVzIHByb2Nlc3MgaW50ZXJuYWwgY29kZXMKK25hbWUsIHRhYmxlID0gdGFibGVzWzBdCitkZWwgdGFibGVzWzBdCithc3NlcnQgbmFtZSA9PSAiQy40IgorCitub25jaGFyID0gU2V0KHJhbmdlKDB4RkREMCwweEZERjApICsKKyAgICAgICAgICAgICAgcmFuZ2UoMHhGRkZFLDB4MTEwMDAwLDB4MTAwMDApICsKKyAgICAgICAgICAgICAgcmFuZ2UoMHhGRkZGLDB4MTEwMDAwLDB4MTAwMDApKQordGFibGUgPSBTZXQodGFibGUua2V5cygpKQorYXNzZXJ0IHRhYmxlID09IG5vbmNoYXIKKworcHJpbnQgIiIiCitkZWYgaW5fdGFibGVfYzQoY29kZSk6CisgICAgYyA9IG9yZChjb2RlKQorICAgIGlmIGMgPCAweEZERDA6IHJldHVybiBGYWxzZQorICAgIGlmIGMgPCAweEZERjA6IHJldHVybiBUcnVlCisgICAgcmV0dXJuIChvcmQoY29kZSkgJiAweEZGRkYpIGluICgweEZGRkUsIDB4RkZGRikKKyIiIgorCisjIEMuNSBTdXJyb2dhdGUgY29kZXMKK25hbWUsIHRhYmxlID0gdGFibGVzWzBdCitkZWwgdGFibGVzWzBdCithc3NlcnQgbmFtZSA9PSAiQy41IgorCitDcyA9IFNldChnZW5fY2F0ZWdvcnkoWyJDcyJdKSkKK2Fzc2VydCBTZXQodGFibGUua2V5cygpKSA9PSBDcworCitwcmludCAiIiIKK2RlZiBpbl90YWJsZV9jNShjb2RlKToKKyAgICByZXR1cm4gdW5pY29kZWRhdGEuY2F0ZWdvcnkoY29kZSkgPT0gIkNzIgorIiIiCisKKyMgQy42IEluYXBwcm9wcmlhdGUgZm9yIHBsYWluIHRleHQKK25hbWUsIHRhYmxlID0gdGFibGVzWzBdCitkZWwgdGFibGVzWzBdCithc3NlcnQgbmFtZSA9PSAiQy42IgorCit0YWJsZSA9IHRhYmxlLmtleXMoKQordGFibGUuc29ydCgpCisKK3ByaW50ICIiIgorYzZfc2V0ID0gIiIiICsgY29tcGFjdF9zZXQodGFibGUpICsgIiIiCitkZWYgaW5fdGFibGVfYzYoY29kZSk6CisgICAgcmV0dXJuIG9yZChjb2RlKSBpbiBjNl9zZXQKKyIiIgorCisjIEMuNyBJbmFwcHJvcHJpYXRlIGZvciBjYW5vbmljYWwgcmVwcmVzZW50YXRpb24KK25hbWUsIHRhYmxlID0gdGFibGVzWzBdCitkZWwgdGFibGVzWzBdCithc3NlcnQgbmFtZSA9PSAiQy43IgorCit0YWJsZSA9IHRhYmxlLmtleXMoKQordGFibGUuc29ydCgpCisKK3ByaW50ICIiIgorYzdfc2V0ID0gIiIiICsgY29tcGFjdF9zZXQodGFibGUpICsgIiIiCitkZWYgaW5fdGFibGVfYzcoY29kZSk6CisgICAgcmV0dXJuIG9yZChjb2RlKSBpbiBjN19zZXQKKyIiIgorCisjIEMuOCBDaGFuZ2UgZGlzcGxheSBwcm9wZXJ0aWVzIG9yIGFyZSBkZXByZWNhdGVkCituYW1lLCB0YWJsZSA9IHRhYmxlc1swXQorZGVsIHRhYmxlc1swXQorYXNzZXJ0IG5hbWUgPT0gIkMuOCIKKwordGFibGUgPSB0YWJsZS5rZXlzKCkKK3RhYmxlLnNvcnQoKQorCitwcmludCAiIiIKK2M4X3NldCA9ICIiIiArIGNvbXBhY3Rfc2V0KHRhYmxlKSArICIiIgorZGVmIGluX3RhYmxlX2M4KGNvZGUpOgorICAgIHJldHVybiBvcmQoY29kZSkgaW4gYzhfc2V0CisiIiIKKworIyBDLjkgVGFnZ2luZyBjaGFyYWN0ZXJzCituYW1lLCB0YWJsZSA9IHRhYmxlc1swXQorZGVsIHRhYmxlc1swXQorYXNzZXJ0IG5hbWUgPT0gIkMuOSIKKwordGFibGUgPSB0YWJsZS5rZXlzKCkKK3RhYmxlLnNvcnQoKQorCitwcmludCAiIiIKK2M5X3NldCA9ICIiIiArIGNvbXBhY3Rfc2V0KHRhYmxlKSArICIiIgorZGVmIGluX3RhYmxlX2M5KGNvZGUpOgorICAgIHJldHVybiBvcmQoY29kZSkgaW4gYzlfc2V0CisiIiIKKworIyBELjEgQ2hhcmFjdGVycyB3aXRoIGJpZGlyZWN0aW9uYWwgcHJvcGVydHkgIlIiIG9yICJBTCIKK25hbWUsIHRhYmxlID0gdGFibGVzWzBdCitkZWwgdGFibGVzWzBdCithc3NlcnQgbmFtZSA9PSAiRC4xIgorCitSYW5kQUwgPSBTZXQoZ2VuX2JpZGlyZWN0aW9uYWwoWyJSIiwiQUwiXSkpCithc3NlcnQgU2V0KHRhYmxlLmtleXMoKSkgPT0gUmFuZEFMCisKK3ByaW50ICIiIgorZGVmIGluX3RhYmxlX2QxKGNvZGUpOgorICAgIHJldHVybiB1bmljb2RlZGF0YS5iaWRpcmVjdGlvbmFsKGNvZGUpIGluICgiUiIsIkFMIikKKyIiIgorCisjIEQuMiBDaGFyYWN0ZXJzIHdpdGggYmlkaXJlY3Rpb25hbCBwcm9wZXJ0eSAiTCIKK25hbWUsIHRhYmxlID0gdGFibGVzWzBdCitkZWwgdGFibGVzWzBdCithc3NlcnQgbmFtZSA9PSAiRC4yIgorCitMID0gU2V0KGdlbl9iaWRpcmVjdGlvbmFsKFsiTCJdKSkKK2Fzc2VydCBTZXQodGFibGUua2V5cygpKSA9PSBMCisKK3ByaW50ICIiIgorZGVmIGluX3RhYmxlX2QyKGNvZGUpOgorICAgIHJldHVybiB1bmljb2RlZGF0YS5iaWRpcmVjdGlvbmFsKGNvZGUpID09ICJMIgorIiIiCisK