ZGlmZiAtLWdpdCBhL0FOTk9VTkNFIGIvQU5OT1VOQ0UKaW5kZXggMjBiMGUzNS4uM2E0YWZjYyAxMDA2NDQKLS0tIGEvQU5OT1VOQ0UKKysrIGIvQU5OT1VOQ0UKQEAgLTEsMTYgKzEsMTMgQEAKLVRoaXMgaXMgcmVsZWFzZSA5NzA2MTYgb2YgV2luZSwgdGhlIE1TIFdpbmRvd3MgZW11bGF0b3IuICBUaGlzIGlzIHN0aWxsIGEKK1RoaXMgaXMgcmVsZWFzZSA5NzA2Mjkgb2YgV2luZSwgdGhlIE1TIFdpbmRvd3MgZW11bGF0b3IuICBUaGlzIGlzIHN0aWxsIGEKIGRldmVsb3BlcidzIG9ubHkgcmVsZWFzZS4gIFRoZXJlIGFyZSBtYW55IGJ1Z3MgYW5kIG1hbnkgdW5pbXBsZW1lbnRlZCBBUEkKIGZlYXR1cmVzLiAgTW9zdCBhcHBsaWNhdGlvbnMgc3RpbGwgZG8gbm90IHdvcmsgY29ycmVjdGx5LgogCiBQYXRjaGVzIHNob3VsZCBiZSBzdWJtaXR0ZWQgdG8gImp1bGxpYXJkQGxyYy5lcGZsLmNoIi4gIFBsZWFzZSBkb24ndAogZm9yZ2V0IHRvIGluY2x1ZGUgYSBDaGFuZ2VMb2cgZW50cnkuCiAKLVdIQVQnUyBORVcgd2l0aCBXaW5lLTk3MDYxNjogKHNlZSBDaGFuZ2VMb2cgZm9yIGRldGFpbHMpCi0JLSBNb3JlIGltcHJvdmVtZW50cyB0byBtdWx0aW1lZGlhIGNvZGUuCi0JLSBOZXcgZm9udCBtYXBwZXIuCi0JLSBJY29uIHRpdGxlcy4KLQktIFByaW50IHNwb29saW5nLgotCS0gRGlyZWN0IEkvTyBwb3J0cyBhY2Nlc3MuCitXSEFUJ1MgTkVXIHdpdGggV2luZS05NzA2Mjk6IChzZWUgQ2hhbmdlTG9nIGZvciBkZXRhaWxzKQorCS0gU3RhcnQgb2YgQ09NRExHMzIgaW1wbGVtZW50YXRpb24uCisJLSBSZWxheSBkZWJ1Z2dpbmcga25vd3MgYWJvdXQgc3RyaW5ncy4KIAktIExvdHMgb2YgYnVnIGZpeGVzLgogCiBTZWUgdGhlIFJFQURNRSBmaWxlIGluIHRoZSBkaXN0cmlidXRpb24gZm9yIGluc3RhbGxhdGlvbiBpbnN0cnVjdGlvbnMuCkBAIC0xOSwxMCArMTYsMTAgQEAKIHRoZSByZWxlYXNlIGlzIGF2YWlsYWJsZSBhdCB0aGUgZnRwIHNpdGVzLiAgVGhlIHNvdXJjZXMgd2lsbCBiZSBhdmFpbGFibGUKIGZyb20gdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6CiAKLSAgZnRwOi8vc3Vuc2l0ZS51bmMuZWR1L3B1Yi9MaW51eC9BTFBIQS93aW5lL2RldmVsb3BtZW50L1dpbmUtOTcwNjE2LnRhci5negotICBmdHA6Ly90c3gtMTEubWl0LmVkdS9wdWIvbGludXgvQUxQSEEvV2luZS9kZXZlbG9wbWVudC9XaW5lLTk3MDYxNi50YXIuZ3oKLSAgZnRwOi8vZnRwLmluZm9tYWdpYy5jb20vcHViL21pcnJvcnMvbGludXgvd2luZS9kZXZlbG9wbWVudC9XaW5lLTk3MDYxNi50YXIuZ3oKLSAgZnRwOi8vZnRwLnByb2dzb2MudXRzLmVkdS5hdS9wdWIvV2luZS9kZXZlbG9wbWVudC9XaW5lLTk3MDYxNi50YXIuZ3oKKyAgZnRwOi8vc3Vuc2l0ZS51bmMuZWR1L3B1Yi9MaW51eC9BTFBIQS93aW5lL2RldmVsb3BtZW50L1dpbmUtOTcwNjI5LnRhci5negorICBmdHA6Ly90c3gtMTEubWl0LmVkdS9wdWIvbGludXgvQUxQSEEvV2luZS9kZXZlbG9wbWVudC9XaW5lLTk3MDYyOS50YXIuZ3oKKyAgZnRwOi8vZnRwLmluZm9tYWdpYy5jb20vcHViL21pcnJvcnMvbGludXgvd2luZS9kZXZlbG9wbWVudC9XaW5lLTk3MDYyOS50YXIuZ3oKKyAgZnRwOi8vZnRwLnByb2dzb2MudXRzLmVkdS5hdS9wdWIvV2luZS9kZXZlbG9wbWVudC9XaW5lLTk3MDYyOS50YXIuZ3oKIAogSXQgc2hvdWxkIGFsc28gYmUgYXZhaWxhYmxlIGZyb20gYW55IHNpdGUgdGhhdCBtaXJyb3JzIHRzeC0xMSBvciBzdW5zaXRlLgogCmRpZmYgLS1naXQgYS9CVUdTIGIvQlVHUwppbmRleCBmNzA2YWM2Li40NzNlODdlIDEwMDY0NAotLS0gYS9CVUdTCisrKyBiL0JVR1MKQEAgLTExLDcgKzExLDcgQEAKIAogICogVHJ1ZVR5cGUsIC5GT04gcmFzdGVyaXplci4KIAotICogTm8gdGhyZWFkL3Byb2Nlc3Mva2VybmVsLW9iamVjdCBzdXBwb3J0IGluIFdpbjMyIGNvZGUuIAorICogTm8gdGhyZWFkL3Byb2Nlc3Mgc2NoZWR1bGluZyBzdXBwb3J0IGluIFdpbjMyIGNvZGUuIAogCiAgKiBWZXJ5IGFscGhhIHByaW50aW5nIGNvZGUuIFtqb2huQGRpdmlzaW9uLmNvLnVrXQogCkBAIC0yMCwyMyArMjAsMTkgQEAKICAqIE5vIE1TIFZpZGVvIHN1cHBvcnQgKHBlcmhhcHMgaW50ZXJmYWNlIHdpdGggeGFuaW0sIGRvbid0IGhvbGQKICAgIHlvdXIgYnJlYXRoIGZvciB0aGlzIG9uZSkuCiAKLSAqIE5vIENPTURMRzMyIHN1cHBvcnQuIChOZWVkZWQgYmFkbHksIHRoZSBXaW5kb3dzOTUgY29tZGxnMzIuZGxsCi0gICBkb2Vzbid0IHdvcmsgd2l0aCBXSU5FLikKKyAqIENPTURMRzMyIHN1cHBvcnQgbm90IGNvbXBsZXRlIHlldC4KIAogICogTm8gQ09NTUNUUkwvQ09NQ1RMMzIgc3VwcG9ydC4KIAotICogTm8gaWNvbiB0aXRsZXMuCi0JLSBXaW5kb3dzIHVzZXMgYSBzcGVjaWFsIHdpbmRvdyBjbGFzcyB0byBkaXNwbGF5IGljb24gdGl0bGVzLgotCSAgSGFuZGxlcyB0byB0aGVzZSB0aXRsZSB3aW5kb3dzIGFyZSBzdG9yZWQgaW4gdGhlIGljb24gd2luZG93Ci0JICBwcm9wZXJ0aWVzLgotCiAgKiBObyBtYW51YWwgcGFnZXMgZGVzY3JpYmluZyB0aGUgdmFyaW91cyBXaW5kb3dzIGNhbGxzLgogCS0gWW91IGNhbiBmaW5kIGluZm9ybWF0aW9uIGFib3V0IG1vc3Qgb2YgdGhlIFdpbjMyIEFQSSBjYWxscwogICAgICAgICAgIG9uIHRoZSB3d3cubWljcm9zb2Z0LmNvbSAoZ28gdG8gJ3NlYXJjaCcpLgogCiBNaXNjZWxsYW5lb3VzOgogCi0gKiBOZXcgZm9udCBtYXBwaW5nIHNjaGVtZSBjYW4gYmUgaW1wcm92ZWQuCisgKiBUZXh0IGFsaWdubWVudCBwcm9ibGVtcyBpbiBXb3JkIGFuZCBXcml0ZSAodmFyaWFibGUgcGl0Y2ggZm9udHMpLgorCisgKiBGb250IG1hcHBlciB3ZWlnaHRzCiAKICAqICJDdXJzb3IgWFhYWCBoYXMgbW9yZSB0aGFuIDEgYnBwISIKIApkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCmluZGV4IGY4YjhiOTYuLjUwZmEyZmUgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEsNCArMSw3MyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGh1IEp1biAyNiAwMjoxNDowMyAxOTk3ICBTbGF2ZW4gUmV6aWMgIDxlc2VydGVAY3MudHUtYmVybGluLmRlPgorCisJKiBbTWFrZWZpbGUuaW5dCisJTmV3IHRhcmdldCBpbnN0YWxsX2luY2x1ZGVzLgorCisJKiBbcmMvcGFyc2VyLmhdIFtyYy9wYXJzZXIueV0gW3JjL3dpbmVyYy5jXQorCVNvbWUgYnVnIGZpeGVzLgorCitXZWQgSnVuIDI1IDE0OjQzOjQxIDE5OTcgIFZpY3RvciBTY2huZWlkZXIgPHZpc2NobmVAaWJtLm5ldD4KKworCSogW2NvbnRyb2xzL2VkaXQuY10KKwlGaXhlZCBXTV9HRVRURVhUIHJldHVybiB2YWx1ZS4KKworVHVlIEp1biAyNCAyMzo0NjowNCAxOTk3ICBNaWNoaWVsIHZhbiBMb29uIDxtZnZsQHhzNGFsbC5ubD4KKworCSogW211bHRpbWVkaWEvKi5jXSBbaW5jbHVkZS9tbXN5c3RlbS5oXQorCUFkZGVkIG1vcmUgY2FsbGJhY2sgY29kZSwgaW5jbHVkaW5nIChJIGhvcGUpIGZ1bmN0aW9uIGNhbGxiYWNrLgorCUNoYW5nZWQgc29tZSBsaW5lYXIgcG9pbnRlcnMgaW50byBzZWdtZW50ZWQuCisKKwkqIFttdWx0aW1lZGlhL2F1ZGlvLmNdCisJUmVtb3ZlZCBzb21lIGJ1Z3MuCisKK1NhdCBKdW4gMjggMTE6Mzc6NTYgMTk5NyAgTWFyY3VzIE1laXNzbmVyIDxtc21laXNzbkBjaXAuaW5mb3JtYXRpay51bmktZXJsYW5nZW4uZGU+CisKKwkqIFtpZjE2MzIvY29tbWRsZy5zcGVjXVtpZjE2MzIvY29tZGxnMzIuc3BlY11bbWlzYy9jb21tZGxnLmNdCisJICBbaW5jbHVkZS9jb21tZGxnLmhdCisJSW1wbGVtZW50ZWQgcGFydHMgb2YgY29tZGxnMzI6IEdldE9wZW5GaWxlTmFtZTMyKiwKKwlHZXRTYXZlRmlsZU5hbWUzMiosIEdldEZpbGVUaXRsZTMyKiB1c2luZyB0aGUgMTYgYml0IGVxdWl2YWxlbnRzLgorCisJKiBbd2luZG93cy9ldmVudC5jXQorCUVWRU5UX1F1ZXJ5Wk9yZGVyOiBjaGVjayBmb3IgY2hpbGRyZW4gIT1OVUxMIChoYXBwZW5zIHdoZW4KKwl1c2luZyAtbWFuYWdlZCkuCisKKwkqIFtCVUdTXVtERVZFTE9QRVItSElOVFNdCisJVXBkYXRlZC4KKworCSogW29iamVjdHMvdGV4dC5jXQorCUFkZGVkIEdldFRleHRDaGFyc2V0Li4uIChzdHViIG1vc3RseSkuCisKK1NhdCBKdW4gMjEgMDg6NDc6NTggMTk5NyAgUGhpbGlwcGUgRGUgTXV5dGVyICA8cGhkbUBpbmZvLnVjbC5hYy5iZT4KKworCSogW2lmMTYzMi9rZXJuZWwuc3BlY10gW2lmMTYzMi9nZGkuc3BlY10gW2luY2x1ZGUvd2luZG93cy5oXQorCSAgW2xvYWRlci9yZXNvdXJjZS5jXSBbZ3JhcGhpY3MveDExZHJ2L3hmb250LmNdCisJU2V0UmVzb3VyY2VIYW5kbGVyICYgUmVtb3ZlRm9udFJlc291cmNlIHByb3RvdHlwZXMgZml4ZWQuCisKKwkqIFtpZjE2MzIvcmVsYXkuY10gW2lmMTYzMi9rZXJuZWwuc3BlY10gW2lmMTYzMi91c2VyLnNwZWNdCisJICBbaWYxNjMyL29sZXN2ci5zcGVjXSBbaWYxNjMyL2NvbW1kbGcuc3BlY10gW2lmMTYzMi9kZGVtbC5zcGVjXQorCSAgW2lmMTYzMi9nZGkuc3BlY10gW2lmMTYzMi9semV4cGFuZC5zcGVjXSBbaWYxNjMyL3NoZWxsLnNwZWNdCisJICBbaW5jbHVkZS93aW5kb3dzLmhdIFttZW1vcnkvc3RyaW5nLmNdIFt0b29scy9idWlsZC5jXQorCU5ldyB0eXBlIG9mIHBhcmFtZXRlciBhbGxvd2VkIGluIC5zcGVjIGZpbGVzIDogc3RyLCBwcmludGVkCisJYXMgYSBzdHJpbmcgd2l0aCAtZGVidWdtc2cgK3JlbGF5LiAuc3BlYyBmaWxlcyB1cGRhdGVkLgorCisJKiBbb2JqZWN0cy9kYy5jXQorCUluIERDX1NldHVwR0NGb3JQZW4sIGNhbGwgQmxhY2tQaXhlbE9mU2NyZWVuLCBub3QgQmxhY2tQaXhlbC4KKwlMaWtld2lzZSBmb3IgV2hpdGVQaXhlbC4KKworCSogW29iamVjdHMvZ2Rpb2JqLmNdIFtncmFwaGljcy94MTFkcnYvYnJ1c2guY10KKwlVc2UgQlNfSEFUQ0hFRCB3aXRoIGFuIGFkZGVkIGVudHJ5IGluIEhhdGNoQnJ1c2hlcyBmb3IgRGtHcmF5QnJ1c2gsCisgCWluc3RlYWQgb2YgQlNfU09MSUQuCisKK0ZyaSBNYXkgMzAgMTc6NTg6MDAgMTk5NyAgQ2hyaXMgRmFoZXJ0eSA8Y2hyaXNmQGFtZXJpY2EuY29tPgorCisJKiBbd2luZG93cy9rZXlib2FyZC5jXQorCUFkZGVkIHZrZXkgdG8gc2NhbmNvZGUgdHJhbnNsYXRpb24gdGFibGUuCisJVGhpcyB3YXMgcHJpbWFyaWx5IHRvIGZpeCBDaXRyaXggV2luRnJhbWUgY2xpZW50IHdoaWNoCisJYWx3YXlzIG5lZWRzIHNjYW5jb2RlcyBpbiBXTV9LRVlET1dOLgorCVRlc3RlZCB3aXRoIEV4Y2VlZCA1LjEuMC4xICYgWEZyZWU4NiAzLjEuMi4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogU2F0IEp1biAxNCAxMzowNToyMyAxOTk3ICBBbmRyZWFzIE1vaHIgPDEwMC4zMDkzNkBnZXJtYW55Lm5ldD4KIAogCSogW2luY2x1ZGUvbW1zeXN0ZW0uaF0KZGlmZiAtLWdpdCBhL0RFVkVMT1BFUlMtSElOVFMgYi9ERVZFTE9QRVJTLUhJTlRTCmluZGV4IDE0YjQ3ZTEuLjdmNjhiYTQgMTAwNjQ0Ci0tLSBhL0RFVkVMT1BFUlMtSElOVFMKKysrIGIvREVWRUxPUEVSUy1ISU5UUwpAQCAtMjQzLDkgKzI0MywxMiBAQAogTU9SRSBJTkZPCiA9PT09PT09PT0KIAotMS4gaHR0cDovL3d3dy5zb25pYy5uZXQvfnVuZG9jL2Jvb2tzdG9yZS5odG1sCisxLiBUaGVyZSBpcyBhIEZSRUUgb25saW5lIHZlcnNpb24gb2YgdGhlIE1TRE4gbGlicmFyeSAoaW5jbHVkaW5nCisgICBkb2N1bWVudGF0aW9uIGZvciB0aGUgV2luMzIgQVBJKSBvbiBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vbXNkbi8KIAotMi4gSW4gMTk5MyBEci4gRG9iYnMgSm91cm5hbCBwdWJsaXNoZWQgYSBjb2x1bW4gY2FsbGVkICJVbmRvY3VtZW50ZWQgQ29ybmVyIi4KKzIuIGh0dHA6Ly93d3cuc29uaWMubmV0L351bmRvYy9ib29rc3RvcmUuaHRtbAogCi0zLiBZb3UgbWlnaHQgd2FudCB0byBjaGVjayBvdXQgQllURSBmcm9tIERlY2VtYmVyIDE5ODMgYXMgd2VsbCA6LSkKKzMuIEluIDE5OTMgRHIuIERvYmJzIEpvdXJuYWwgcHVibGlzaGVkIGEgY29sdW1uIGNhbGxlZCAiVW5kb2N1bWVudGVkIENvcm5lciIuCisKKzQuIFlvdSBtaWdodCB3YW50IHRvIGNoZWNrIG91dCBCWVRFIGZyb20gRGVjZW1iZXIgMTk4MyBhcyB3ZWxsIDotKQogCmRpZmYgLS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCmluZGV4IDAzOWM3NDEuLmM2MmViNTQgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlLmluCisrKyBiL01ha2VmaWxlLmluCkBAIC0yMyw2ICsyMyw3IEBACiBBUiAgICAgICAgPSBhciByYwogUkFOTElCICAgID0gQFJBTkxJQkAKIFJNICAgICAgICA9IHJtIC1mCitNS0RJUiAgICAgPSBta2RpcgogU1VCTUFLRSAgID0gJChNQUtFKSAnQ0M9JChDQyknICdDRkxBR1M9JChDRkxBR1MpJyAnT1BUSU9OUz0kKE9QVElPTlMpJwogQFNFVF9NQUtFQAogCkBAIC0zNyw2ICszOCw3IEBACiBsaWJkaXIgICAgICAgICAgPSBAbGliZGlyQAogbWFuZGlyICAgICAgICAgID0gQG1hbmRpckAvbWFuMQogbWFuZXh0ICAgICAgICAgID0gLjEKK2luY2x1ZGVkaXIgICAgICA9IEBpbmNsdWRlZGlyQC93aW5lCiAKICMgTWFpbiB0YXJnZXQgdG8gYnVpbGQKIApAQCAtMTE4LDE1ICsxMjAsMTkgQEAKIAkkKEFSKSAkQCAkKENPTU1PTk9CSlMpICQoTElCT0JKUykKIAkkKFJBTkxJQikgJEAKIAotaW5zdGFsbF9saWJ3aW5lLmE6IGR1bW15CitpbnN0YWxsX2xpYndpbmUuYTogaW5zdGFsbF9pbmNsdWRlcwogCSQoSU5TVEFMTF9EQVRBKSBsaWJ3aW5lLmEgJChsaWJkaXIpCiAKIGxpYndpbmUuc28uMS4wOiAkKENPTU1PTlNVQkRJUlMpICQoTElCU1VCRElSUykgZHVtbXkKIAkkKENDKSAtc2hhcmVkIC1XbCwtc29uYW1lLGxpYndpbmUuc28gLW8kQCAkKENPTU1PTk9CSlMpICQoTElCT0JKUykgJChMRE9QVElPTlMpICQoWF9MSUJTKSAkKFhQTV9MSUIpICQoWExJQikgJChMRExJQlMpCiAKLWluc3RhbGxfbGlid2luZS5zby4xLjA6IGR1bW15CitpbnN0YWxsX2xpYndpbmUuc28uMS4wOiBpbnN0YWxsX2luY2x1ZGVzCiAJJChJTlNUQUxMX0RBVEEpIGxpYndpbmUuc28uMS4wICQobGliZGlyKQogCitpbnN0YWxsX2luY2x1ZGVzOiBkdW1teQorCWlmIFsgLWQgJChpbmNsdWRlZGlyKSBdOyB0aGVuIDogOyBlbHNlICQoTUtESVIpICQoaW5jbHVkZWRpcik7IGZpIAorCWNkIGluY2x1ZGU7ICQoSU5TVEFMTF9EQVRBKSB3aW5kb3dzLmggd2ludHlwZXMuaCAkKGluY2x1ZGVkaXIpCisKICQoQUxMU1VCRElSUyk6IGR1bW15CiAJQGNkICRAOyAkKFNVQk1BS0UpCiAKQEAgLTE0Myw5ICsxNDksOCBAQAogCiBjbGVhbjoKIAlmb3IgaSBpbiAkKEFMTFNVQkRJUlMpOyBkbyAoY2QgJCRpOyAkKE1BS0UpIGNsZWFuKSB8fCBleGl0IDE7IGRvbmUKLQkkKFJNKSAqLm8gXCMqXCMgKn4gKi5iYWsgKi5vcmlnICoucmVqICouZmxjCisJZm9yIGkgaW4gLiBpbmNsdWRlIGRvY3VtZW50YXRpb247IGRvIChjZCAkJGk7ICQoUk0pICoubyBcIypcIyAqfiAqLmJhayAqLm9yaWcgKi5yZWogKi5mbGMpOyBkb25lCiAJJChSTSkgd2luZSB3aW5lLnN5bSBsaWJ3aW5lLmEgbGlid2luZS5zby4xLjAgVEFHUwotCShjZCBpbmNsdWRlOyAkKFJNKSAqLm8gXCMqXCMgKn4gKi5iYWsgKi5vcmlnICoucmVqICouZmxjKQogCiBkaXN0Y2xlYW46IGNsZWFuCiAJJChSTSkgY29uZmlnLiogTWFrZS5ydWxlcyBpbmNsdWRlL2NvbmZpZy5oCmRpZmYgLS1naXQgYS9jb250cm9scy9lZGl0LmMgYi9jb250cm9scy9lZGl0LmMKaW5kZXggZjU1N2I2Mi4uNzA3YmM2OSAxMDA2NDQKLS0tIGEvY29udHJvbHMvZWRpdC5jCisrKyBiL2NvbnRyb2xzL2VkaXQuYwpAQCAtMzA3OCw5ICszMDc4LDkgQEAKIAogCWlmIChjb3VudCA+IGxlbikgewogCQlsc3RyY3B5MzJBKHRleHQsIGVzLT50ZXh0KTsKLQkJcmV0dXJuIGxlbiArIDE7CisJCXJldHVybiBsZW47CiAJfSBlbHNlCi0JCXJldHVybiAwOworCQlyZXR1cm4gLTE7CiB9CiAKIApkaWZmIC0tZ2l0IGEvY29udHJvbHMvbGlzdGJveC5jIGIvY29udHJvbHMvbGlzdGJveC5jCmluZGV4IDUxNmZiMjQuLjcxZjU2YmUgMTAwNjQ0Ci0tLSBhL2NvbnRyb2xzL2xpc3Rib3guYworKysgYi9jb250cm9scy9saXN0Ym94LmMKQEAgLTE3MzEsOSArMTczMSwxMiBAQAogICAgIGlmIChMSVNUQk9YX1RpbWVyICE9IExCX1RJTUVSX05PTkUpCiAgICAgICAgIEtpbGxTeXN0ZW1UaW1lcjMyKCB3bmQtPmh3bmRTZWxmLCBMQl9USU1FUl9JRCApOwogICAgIExJU1RCT1hfVGltZXIgPSBMQl9USU1FUl9OT05FOwotICAgIGlmIChHZXRDYXB0dXJlMzIoKSA9PSB3bmQtPmh3bmRTZWxmKSBSZWxlYXNlQ2FwdHVyZSgpOwotICAgIGlmIChkZXNjci0+c3R5bGUgJiBMQlNfTk9USUZZKQotICAgICAgICBTRU5EX05PVElGSUNBVElPTiggd25kLCBkZXNjciwgTEJOX1NFTENIQU5HRSApOworICAgIGlmIChHZXRDYXB0dXJlMzIoKSA9PSB3bmQtPmh3bmRTZWxmKQorICAgIHsKKyAgICAgICAgUmVsZWFzZUNhcHR1cmUoKTsKKyAgICAgICAgaWYgKGRlc2NyLT5zdHlsZSAmIExCU19OT1RJRlkpCisgICAgICAgICAgICBTRU5EX05PVElGSUNBVElPTiggd25kLCBkZXNjciwgTEJOX1NFTENIQU5HRSApOworICAgIH0KICAgICByZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZG9jdW1lbnRhdGlvbi9mb250cyBiL2RvY3VtZW50YXRpb24vZm9udHMKaW5kZXggMzIzNzYxMy4uMDBlZjczOCAxMDA2NDQKLS0tIGEvZG9jdW1lbnRhdGlvbi9mb250cworKysgYi9kb2N1bWVudGF0aW9uL2ZvbnRzCkBAIC00LDggKzQsOCBAQAogCiBJZiB5b3UgaGF2ZSBhY2Nlc3MgdG8gV2luZG93cyBpbnN0YWxsYXRpb24geW91IHNob3VsZCB1c2UgCiBmbnQyYmRmIHV0aWxpdHkgKGZvdW5kIGluIHRoZSAndG9vbHMpJyBkaXJlY3RvcnkgdG8gY29udmVydAotYml0bWFwIGZvbnRzIChTWVNURU0uRk9OLCBTU0VSSUZFLkZPTiwgYW5kIFNFUklGRS5GT04pIGludG8gCi10aGUgZm9ybWF0IHRoYXQgWCBXaW5kb3cgU3lzdGVtIGNhbiByZWNvZ25pemUuCitiaXRtYXAgZm9udHMgKFZHQVNZUy5GT04sIFNTRVJJRkUuRk9OLCBhbmQgU0VSSUZFLkZPTikgaW50byAKK3RoZSBmb3JtYXQgdGhhdCBYIFdpbmRvdyBTeXN0ZW0gY2FuIHJlY29nbml6ZS4gCiAKIFN0ZXAgMS4gRXh0cmFjdCBiaXRtYXAgZm9udHMgd2l0aCAnZm50MmJkZicuCiAKQEAgLTE0LDE0ICsxNCwyNSBAQAogCiBTdGVwIDMuIENvcHkgLnBjZiBmaWxlcyB0byB0aGUgZm9udCBzZXJ2ZXIgZGlyZWN0b3J5IHdoaWNoCiAJaXMgdXN1YWxseSAvdXNyL2xpYi9YMTEvZm9udHMvbWlzYyAoeW91IHdpbGwgcHJvYmFibHkgCi0gICAgICAgIG5lZWQgc3VwZXJ1c2VyIHByaXZpbGVnZXMpLgorICAgICAgICBuZWVkIHN1cGVydXNlciBwcml2aWxlZ2VzKS4gSWYgeW91IHdhbnQgdG8gY3JlYXRlIGEgbmV3CisJZm9udCBkaXJlY3RvcnkgeW91IHdpbGwgbmVlZCB0byBhZGQgaXQgdG8gdGhlIGZvbnQgcGF0aC4KIAogU3RlcCA0LiBSdW4gJ21rZm9udGRpcicgZm9yIHRoZSBkaXJlY3RvcnkgeW91IGNvcGllZCBmb250cyB0by4KIAlJZiB5b3UgYXJlIGFscmVhZHkgaW4gWCB5b3Ugc2hvdWxkIHJ1biAneHNldCBmcCByZWhhc2gnIAogICAgICAgICB0byBtYWtlIFggc2VydmVyIGF3YXJlIG9mIHRoZSBuZXcgZm9udHMuCiAKK1N0ZXAgNS4gRWRpdCB3aW5lLmNvbmYgZmlsZSB0byByZW1vdmUgYWxpYXNlcyBmb3IgdGhlIGZvbnRzIAorCXlvdSd2ZSBqdXN0IGluc3RhbGxlZC4KKwogV2luZSBjYW4gZ2V0IGJ5IHdpdGhvdXQgdGhlc2UgZm9udHMgYnV0ICd0aGUgbG9vayBhbmQgZmVlbCcKLXdpbGwgYmUgcXVpdGUgZGlmZmVyZW50LiAKK3dpbGwgYmUgcXVpdGUgZGlmZmVyZW50LiBBbHNvLCBzb21lIGFwcGxpY2F0aW9ucyB0cnkgdG8gbG9hZAordGhlaXIgY3VzdG9tIGZvbnRzIG9uIHRoZSBmbHkgKFdpbldvcmQgNi4wKSBhbmQgc2luY2UgV2luZSBkb2VzCitub3QgaW1wbGVtZW50IHRoaXMgeWV0IGl0IGluc3RlYWQgcHJpbnRzIG91dCBzb21ldGhpbmcgbGlrZTsKKworU1RVQjogQWRkRm9udFJlc291cmNlKCBzb21lZmlsZS5GT04gKQorCitZb3UgY2FuIGNvbnZlcnQgdGhpcyBmaWxlIHRvby4gTm90ZSB0aGF0IC5GT04gZmlsZSBtYXkgbm90IGhvbGQgCithbnkgYml0bWFwIGZvbnRzIGFuZCBmbnQyYmRmIHdpbGwgZmFpbCBpZiB0aGlzIGlzIHRoZSBjYXNlLgogCiBXaGF0IHRvIGRvIHdpdGggVHJ1ZVR5cGUgZm9udHM/IFRoZXJlIGFyZSBzZXZlcmFsIGNvbW1lcmNpYWwKIGZvbnQgdG9vbHMgdGhhdCBjYW4gY29udmVydCB0aGVtIHRvIHRoZSBUeXBlMSBmb3JtYXQgYnV0IHRoZSAKQEAgLTg3LDcgKzk4LDkgQEAKIGluIHRoZSBmb250cy5kaXIuICBUaGVyZWZvcmUgV0lORSB1c2VzIHRoZSBmb2xsb3dpbmcgZW50cnkgdG8gZGV0ZXJtaW5lIAogd2hpY2ggZm9udCB0byBjaGVjayBmaXJzdC4KIAotRGVmYXVsdCA9IC4uLgorRXhhbXBsZToKKworRGVmYXVsdCA9IC1hZG9iZS10aW1lcy0KIAogQ29tbWVudHM6CiAgICAgSXQgaXMgYmV0dGVyIHRvIGhhdmUgYSBzY2FsYWJsZSBmb250IGZhbWlseSAoYm9sZHMgYW5kIGl0YWxpY3MgaW5jbHVkZWQpIApkaWZmIC0tZ2l0IGEvZ3JhcGhpY3MveDExZHJ2L2JydXNoLmMgYi9ncmFwaGljcy94MTFkcnYvYnJ1c2guYwppbmRleCA2MmJjNDFmLi4xZmU4OGRhIDEwMDY0NAotLS0gYS9ncmFwaGljcy94MTFkcnYvYnJ1c2guYworKysgYi9ncmFwaGljcy94MTFkcnYvYnJ1c2guYwpAQCAtMTIsMTQgKzEyLDE1IEBACiAjaW5jbHVkZSAic3RkZGVidWcuaCIKICNpbmNsdWRlICJkZWJ1Zy5oIgogCi1zdGF0aWMgY29uc3QgY2hhciBIYXRjaEJydXNoZXNbTkJfSEFUQ0hfU1RZTEVTXVs4XSA9CitzdGF0aWMgY29uc3QgY2hhciBIYXRjaEJydXNoZXNbTkJfSEFUQ0hfU1RZTEVTICsgMV1bOF0gPQogewogICAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LCAvKiBIU19IT1JJWk9OVEFMICovCiAgICAgeyAweDA4LCAweDA4LCAweDA4LCAweDA4LCAweDA4LCAweDA4LCAweDA4LCAweDA4IH0sIC8qIEhTX1ZFUlRJQ0FMICAgKi8KICAgICB7IDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAgfSwgLyogSFNfRkRJQUdPTkFMICAqLwogICAgIHsgMHg4MCwgMHg0MCwgMHgyMCwgMHgxMCwgMHgwOCwgMHgwNCwgMHgwMiwgMHgwMSB9LCAvKiBIU19CRElBR09OQUwgICovCiAgICAgeyAweDA4LCAweDA4LCAweDA4LCAweGZmLCAweDA4LCAweDA4LCAweDA4LCAweDA4IH0sIC8qIEhTX0NST1NTICAgICAgKi8KLSAgICB7IDB4ODEsIDB4NDIsIDB4MjQsIDB4MTgsIDB4MTgsIDB4MjQsIDB4NDIsIDB4ODEgfSAgLyogSFNfRElBR0NST1NTICAqLworICAgIHsgMHg4MSwgMHg0MiwgMHgyNCwgMHgxOCwgMHgxOCwgMHgyNCwgMHg0MiwgMHg4MSB9LCAvKiBIU19ESUFHQ1JPU1MgICovCisgICAgeyAweGVlLCAweGJiLCAweGVlLCAweGJiLCAweGVlLCAweGJiLCAweGVlLCAweGJiIH0gIC8qIEhhY2sgZm9yIERLR1JBWSAqLwogfTsKIAogICAvKiBMZXZlbHMgb2YgZWFjaCBwcmltYXJ5IGZvciBkaXRoZXJpbmcgKi8KZGlmZiAtLWdpdCBhL2dyYXBoaWNzL3gxMWRydi90ZXh0LmMgYi9ncmFwaGljcy94MTFkcnYvdGV4dC5jCmluZGV4IGNjNzI0OWQuLjBiOTBkNjIgMTAwNjQ0Ci0tLSBhL2dyYXBoaWNzL3gxMWRydi90ZXh0LmMKKysrIGIvZ3JhcGhpY3MveDExZHJ2L3RleHQuYwpAQCAtMTA3LDIwICsxMDcsMTcgQEAKIAogICAgICAgLyogQ29tcHV0ZSB0ZXh0IHN0YXJ0aW5nIHBvc2l0aW9uICovCiAKLSAgICBYVGV4dEV4dGVudHMoIGZvbnQsIHN0ciwgY291bnQsICZkaXIsICZhc2NlbnQsICZkZXNjZW50LCAmaW5mbyApOwotCi0gICAgaWYgKGxwRHgpIC8qIGhhdmUgZXhwbGljaXQgY2hhcmFjdGVyIGNlbGwgeCBvZmZzZXRzICovCisgICAgaWYgKGxwRHgpIC8qIGhhdmUgZXhwbGljaXQgY2hhcmFjdGVyIGNlbGwgeCBvZmZzZXRzIGluIGxvZ2ljYWwgY29vcmRpbmF0ZXMgKi8KICAgICB7Ci0JLyogc3VtIGxwRHggYXJyYXkgYW5kIGFkZCB0aGUgd2lkdGggb2YgbGFzdCBjaGFyYWN0ZXIgKi8KLQotICAgICAgICBpbmZvLndpZHRoID0gWFRleHRXaWR0aCggZm9udCwgc3RyICsgY291bnQgLSAxLCAxKSArIGRjLT53LmNoYXJFeHRyYTsKLSAgICAgICAgaWYgKHN0cltjb3VudC0xXSA9PSBkZkJyZWFrQ2hhcikKLSAgICAgICAgICAgIGluZm8ud2lkdGggKz0gZGMtPncuYnJlYWtFeHRyYTsKLQotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgaW5mby53aWR0aCArPSBscER4W2ldOworCWludCBleHRyYSA9IGRjLT53bmRFeHRYIC8gMjsKKyAgICAgICAgZm9yIChpID0gaW5mby53aWR0aCA9IDA7IGkgPCBjb3VudDsgaSsrKSBpbmZvLndpZHRoICs9IGxwRHhbaV07CisJaW5mby53aWR0aCA9IChpbmZvLndpZHRoICogZGMtPnZwb3J0RXh0WCArIGV4dHJhICkgLyBkYy0+d25kRXh0WDsKICAgICB9CiAgICAgZWxzZQotICAgICAgIGluZm8ud2lkdGggKz0gY291bnQqZGMtPncuY2hhckV4dHJhICsgZGMtPncuYnJlYWtFeHRyYSpkYy0+dy5icmVha0NvdW50OworICAgIHsKKwlYVGV4dEV4dGVudHMoIGZvbnQsIHN0ciwgY291bnQsICZkaXIsICZhc2NlbnQsICZkZXNjZW50LCAmaW5mbyApOworICAgICAgICBpbmZvLndpZHRoICs9IGNvdW50KmRjLT53LmNoYXJFeHRyYSArIGRjLT53LmJyZWFrRXh0cmEqZGMtPncuYnJlYWtDb3VudDsKKyAgICB9CiAKICAgICBzd2l0Y2goIGRjLT53LnRleHRBbGlnbiAmIChUQV9MRUZUIHwgVEFfUklHSFQgfCBUQV9DRU5URVIpICkKICAgICB7CkBAIC0yMDAsMzIgKzE5Nyw1MCBAQAogCiAgICAgICAgIHBpdGVtID0gaXRlbXMgPSB4bWFsbG9jKCBjb3VudCAqIHNpemVvZihYVGV4dEl0ZW0pICk7CiAgICAgICAgIGRlbHRhID0gaSA9IDA7Ci0gICAgICAgIHdoaWxlIChpIDwgY291bnQpCi0gICAgICAgIHsKLQkgICAgLyogaW5pdGlhbGl6ZSB0ZXh0IGl0ZW0gd2l0aCBhY2N1bXVsYXRlZCBkZWx0YSAqLworCWlmKCBscER4ICkgLyogZXhwbGljaXQgY2hhcmFjdGVyIHdpZHRocyAqLworCXsKKwkgICAgaW50IGV4dHJhID0gZGMtPnduZEV4dFggLyAyOwogCi0gICAgICAgICAgICBwaXRlbS0+Y2hhcnMgID0gKGNoYXIgKilzdHIgKyBpOwotCSAgICBwaXRlbS0+ZGVsdGEgID0gZGVsdGE7IAotICAgICAgICAgICAgcGl0ZW0tPm5jaGFycyA9IDA7Ci0gICAgICAgICAgICBwaXRlbS0+Zm9udCAgID0gTm9uZTsKLSAgICAgICAgICAgIGRlbHRhID0gMDsKKwkgICAgd2hpbGUgKGkgPCBjb3VudCkKKwkgICAgeworCQkvKiBpbml0aWFsaXplIHRleHQgaXRlbSB3aXRoIGFjY3VtdWxhdGVkIGRlbHRhICovCiAKLQkgICAgLyogc3R1ZmYgY2hhcmFjdGVycyBpbnRvIHRoZSBzYW1lIFhUZXh0SXRlbSB1bnRpbCBuZXcgZGVsdGEgCi0JICAgICAqIGJlY29tZXMgIG5vbi16ZXJvICovCisJCXBpdGVtLT5jaGFycyAgPSAoY2hhciAqKXN0ciArIGk7CisJCXBpdGVtLT5kZWx0YSAgPSBkZWx0YTsKKwkJcGl0ZW0tPm5jaGFycyA9IDA7CisJCXBpdGVtLT5mb250ICAgPSBOb25lOworCQlkZWx0YSA9IDA7CiAKLQkgICAgZG8KKwkJLyogYWRkIGNoYXJhY3RlcnMgIHRvIHRoZSBzYW1lIFhUZXh0SXRlbSB1bnRpbCBuZXcgZGVsdGEKKwkJICogYmVjb21lcyAgbm9uLXplcm8gKi8KKworCQlkbworCQl7CisJCSAgICBkZWx0YSArPSAobHBEeFtpXSAqIGRjLT52cG9ydEV4dFggKyBleHRyYSkgLyBkYy0+d25kRXh0WAorCQkJCQkgICAgLSBYVGV4dFdpZHRoKCBmb250LCBzdHIgKyBpLCAxKTsKKwkJICAgIHBpdGVtLT5uY2hhcnMrKzsKKwkJfSB3aGlsZSAoKCsraSA8IGNvdW50KSAmJiAhZGVsdGEpOworCQlwaXRlbSsrOworCSAgIH0KKwl9CisJZWxzZSAvKiBjaGFyRXh0cmEgb3IgYnJlYWtFeHRyYSAqLworCXsKKyAgICAgICAgICAgIHdoaWxlIChpIDwgY291bnQpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGxwRHgpIGRlbHRhICs9IGxwRHhbaV0gLSBYVGV4dFdpZHRoKCBmb250LCBzdHIgKyBpLCAxKTsKLSAgICAgICAgICAgICAgICBlbHNlCisJCXBpdGVtLT5jaGFycyAgPSAoY2hhciAqKXN0ciArIGk7CisJCXBpdGVtLT5kZWx0YSAgPSBkZWx0YTsKKwkJcGl0ZW0tPm5jaGFycyA9IDA7CisJCXBpdGVtLT5mb250ICAgPSBOb25lOworCQlkZWx0YSA9IDA7CisKKwkJZG8KICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIGRlbHRhICs9IGRjLT53LmNoYXJFeHRyYTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0cltpXSA9PSAoY2hhcilkZkJyZWFrQ2hhcikKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlbHRhICs9IGRjLT53LmJyZWFrRXh0cmE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHBpdGVtLT5uY2hhcnMrKzsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0cltpXSA9PSAoY2hhcilkZkJyZWFrQ2hhcikgZGVsdGEgKz0gZGMtPncuYnJlYWtFeHRyYTsKKwkJICAgIHBpdGVtLT5uY2hhcnMrKzsKKyAgICAgICAgICAgICAgICB9IHdoaWxlICgoKytpIDwgY291bnQpICYmICFkZWx0YSk7CisJCXBpdGVtKys7CiAgICAgICAgICAgICB9IAotCSAgICB3aGlsZSAoKCsraSA8IGNvdW50KSAmJiAhZGVsdGEpOwotICAgICAgICAgICAgcGl0ZW0rKzsKICAgICAgICAgfQogCiAgICAgICAgIFhEcmF3VGV4dCggZGlzcGxheSwgZGMtPnUueC5kcmF3YWJsZSwgZGMtPnUueC5nYywKZGlmZiAtLWdpdCBhL2dyYXBoaWNzL3gxMWRydi94Zm9udC5jIGIvZ3JhcGhpY3MveDExZHJ2L3hmb250LmMKaW5kZXggNjBhYTgyZi4uZjEyZDg5ZiAxMDA2NDQKLS0tIGEvZ3JhcGhpY3MveDExZHJ2L3hmb250LmMKKysrIGIvZ3JhcGhpY3MveDExZHJ2L3hmb250LmMKQEAgLTYwNiw2ICs2MDYsNyBAQAogCiAgICAgcFRNLT50bUNoYXJTZXQgPSBwZGYtPmRmQ2hhclNldDsKICAgICBwVE0tPnRtUGl0Y2hBbmRGYW1pbHkgPSBwZGYtPmRmUGl0Y2hBbmRGYW1pbHk7CisKICAgICBwVE0tPnRtRGlnaXRpemVkQXNwZWN0WCA9IHBkZi0+ZGZIb3JpelJlczsKICAgICBwVE0tPnRtRGlnaXRpemVkQXNwZWN0WSA9IHBkZi0+ZGZWZXJ0UmVzOwogfQpAQCAtMTE0NywxMCArMTE0OCwxMCBAQAogCiAJaWYoICFmciApIC8qIGFkZCBuZXcgZmFtaWx5ICovCiAJewotCSAgIGlmKCBuX2ZmKysgPiBNQVhfRk9OVF9GQU1JTElFUyApIGJyZWFrOwotCisJICAgaWYoIG5fZmYgPj0gTUFYX0ZPTlRfRkFNSUxJRVMgKSBicmVhazsKIAkgICBpZiggIUxGRF9Jbml0Rm9udEluZm8oIGZpLCBscHN0cikgKSBjb250aW51ZTsKIAorCSAgIG5fZmYrKzsKIAkgICBmciA9IChmb250UmVzb3VyY2UqKSBIZWFwQWxsb2MoU3lzdGVtSGVhcCwgMCwgc2l6ZW9mKGZvbnRSZXNvdXJjZSkpOyAKIAkgICBtZW1zZXQoZnIsIDAsIHNpemVvZihmb250UmVzb3VyY2UpKTsKIAkgICBmci0+cmVzb3VyY2UgPSAoY2hhciopIEhlYXBBbGxvYyhTeXN0ZW1IZWFwLCAwLCBqICsgMSApOwpAQCAtMTMxOCw4ICsxMzE5LDExIEBACiAKICAgIHBmbS0+ZmxhZ3MgPSAwOwogCi0gICBpZiggcGxmLT5sZkNoYXJTZXQgIT0gREVGQVVMVF9DSEFSU0VUICYmCi0gICAgICAgcGxmLT5sZkNoYXJTZXQgIT0gcGZpLT5kZi5kZkNoYXJTZXQgKSBwZW5hbHR5ICs9IDB4MjAwOworICAgaWYoIHBsZi0+bGZDaGFyU2V0ID09IERFRkFVTFRfQ0hBUlNFVCApCisgICB7CisgICAgICAgaWYoIChwZmktPmRmLmRmQ2hhclNldCE9IEFOU0lfQ0hBUlNFVCkgJiYgKHBmaS0+ZGYuZGZDaGFyU2V0IT1ERUZBVUxUX0NIQVJTRVQpICkgcGVuYWx0eSArPSAweDIwMDsKKyAgIH0KKyAgIGVsc2UgaWYgKHBsZi0+bGZDaGFyU2V0ICE9IHBmaS0+ZGYuZGZDaGFyU2V0KSBwZW5hbHR5ICs9IDB4MjAwOwogCiAgICAvKiBUTVBGX0ZJWEVEX1BJVENIIG1lYW5zIGV4YWN0bHkgdGhlIG9wcG9zaXRlICovCiAKQEAgLTE5MzcsNyArMTk0MSw3IEBACiAJCSAgICBjcyA9ICZ4ZnMtPnBlcl9jaGFyWyhpIC0geGZzLT5taW5fY2hhcl9vcl9ieXRlMildOyAKIAkJICAgIGlmIChDSV9OT05FWElTVENIQVIoY3MpKSBjcyA9IGRlZjsgCiAgIAkJfSBlbHNlIGNzID0gZGVmOwotCQkqYnVmZmVyKysgPSBNQVgoIGNzLT53aWR0aCwgMCApOworCQkqYnVmZmVyKysgPSBNQVgoY3MtPndpZHRoLCAwICk7CiAJICAgIH0KIAl9CiAJcmV0dXJuIFRSVUU7CkBAIC0xOTkzLDkgKzE5OTcsMTQgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIFJlbW92ZUZvbnRSZXNvdXJjZTE2ICAgIChHREkuMTM2KQogICovCi1CT09MMTYgUmVtb3ZlRm9udFJlc291cmNlMTYoIExQQ1NUUiBzdHIgKQorQk9PTDE2IFJlbW92ZUZvbnRSZXNvdXJjZTE2KCBTRUdQVFIgc3RyICkKIHsKLSAgICByZXR1cm4gUmVtb3ZlRm9udFJlc291cmNlMzJBKCBzdHIgKTsKKyAgICBpZiAoSElXT1JEKHN0cikpCisgICAgICAgIGZwcmludGYoIHN0ZG5pbXAsICJTVFVCOiBSZW1vdmVGb250UmVzb3VyY2UoJyVzJylcbiIsCisJCShjaGFyICopUFRSX1NFR19UT19MSU4oIHN0cikgKTsKKyAgICBlbHNlCisgICAgICAgIGZwcmludGYoIHN0ZG5pbXAsICJTVFVCOiBSZW1vdmVGb250UmVzb3VyY2UoJTA0eClcbiIsIExPV09SRChzdHIpICk7CisgICAgcmV0dXJuIFRSVUU7CiB9CiAKIApkaWZmIC0tZ2l0IGEvaWYxNjMyL2FkdmFwaTMyLnNwZWMgYi9pZjE2MzIvYWR2YXBpMzIuc3BlYwppbmRleCA0YTg4NjQxLi43OTIwOTk1IDEwMDY0NAotLS0gYS9pZjE2MzIvYWR2YXBpMzIuc3BlYworKysgYi9pZjE2MzIvYWR2YXBpMzIuc3BlYwpAQCAtMTIsNyArMTIsNyBAQAogMDAwNyBzdHViIEFkZEFjZQogMDAwOCBzdHViIEFkZEF1ZGl0QWNjZXNzQWNlCiAwMDA5IHN0dWIgQWRqdXN0VG9rZW5Hcm91cHMKLTAwMTAgc3R1YiBBZGp1c3RUb2tlblByaXZpbGVnZXMKKzAwMTAgc3RkY2FsbCBBZGp1c3RUb2tlblByaXZpbGVnZXMobG9uZyBsb25nIHB0ciBsb25nIHB0ciBwdHIpIEFkanVzdFRva2VuUHJpdmlsZWdlcwogMDAxMSBzdGRjYWxsIEFsbG9jYXRlQW5kSW5pdGlhbGl6ZVNpZChwdHIgbG9uZyBsb25nIGxvbmcgbG9uZyBsb25nIGxvbmcgbG9uZyBsb25nIGxvbmcgcHRyKSBBbGxvY2F0ZUFuZEluaXRpYWxpemVTaWQKIDAwMTIgc3RkY2FsbCBBbGxvY2F0ZUxvY2FsbHlVbmlxdWVJZChwdHIpIEFsbG9jYXRlTG9jYWxseVVuaXF1ZUlkCiAwMDEzIHN0dWIgQXJlQWxsQWNjZXNzZXNHcmFudGVkCkBAIC05NCw3ICs5NCw3IEBACiAwMDg5IHN0dWIgTG9va3VwUHJpdmlsZWdlRGlzcGxheU5hbWVXCiAwMDkwIHN0dWIgTG9va3VwUHJpdmlsZWdlTmFtZUEKIDAwOTEgc3R1YiBMb29rdXBQcml2aWxlZ2VOYW1lVwotMDA5MiBzdHViIExvb2t1cFByaXZpbGVnZVZhbHVlQQorMDA5MiBzdGRjYWxsIExvb2t1cFByaXZpbGVnZVZhbHVlQShwdHIgcHRyIHB0cikgTG9va3VwUHJpdmlsZWdlVmFsdWUzMkEKIDAwOTMgc3R1YiBMb29rdXBQcml2aWxlZ2VWYWx1ZVcKIDAwOTQgc3R1YiBNYWtlQWJzb2x1dGVTRAogMDA5NSBzdHViIE1ha2VTZWxmUmVsYXRpdmVTRApkaWZmIC0tZ2l0IGEvaWYxNjMyL2J1aWx0aW4uYyBiL2lmMTYzMi9idWlsdGluLmMKaW5kZXggMjg4ZTM2My4uMTY3NTY4NyAxMDA2NDQKLS0tIGEvaWYxNjMyL2J1aWx0aW4uYworKysgYi9pZjE2MzIvYnVpbHRpbi5jCkBAIC0xNDgsNyArMTQ4LDcgQEAKICAgICAvKiBXaW4zMiBETExzICovCiAgICAgeyAmQURWQVBJMzJfRGVzY3JpcHRvciwgMCB9LAogICAgIHsgJkNPTUNUTDMyX0Rlc2NyaXB0b3IsIERMTF9GTEFHX05PVF9VU0VEIH0sCi0gICAgeyAmQ09NRExHMzJfRGVzY3JpcHRvciwgRExMX0ZMQUdfTk9UX1VTRUQgfSwKKyAgICB7ICZDT01ETEczMl9EZXNjcmlwdG9yLCAwIH0sCiAgICAgeyAmQ1JURExMX0Rlc2NyaXB0b3IsICAgMCB9LAogICAgIHsgJk9MRTMyX0Rlc2NyaXB0b3IsICAgIERMTF9GTEFHX05PVF9VU0VEIH0sCiAgICAgeyAmR0RJMzJfRGVzY3JpcHRvciwgICAgMCB9LApkaWZmIC0tZ2l0IGEvaWYxNjMyL2NvbWRsZzMyLnNwZWMgYi9pZjE2MzIvY29tZGxnMzIuc3BlYwppbmRleCBiNmZhMDAyLi5hNDJlMWExIDEwMDY0NAotLS0gYS9pZjE2MzIvY29tZGxnMzIuc3BlYworKysgYi9pZjE2MzIvY29tZGxnMzIuc3BlYwpAQCAtNywxNSArNywxNSBAQAogMDAwMiBzdHViIENob29zZUNvbG9yVwogMDAwMyBzdHViIENob29zZUZvbnRBCiAwMDA0IHN0dWIgQ2hvb3NlRm9udFcKLTAwMDUgc3R1YiBDb21tRGxnRXh0ZW5kZWRFcnJvcgorMDAwNSBzdGRjYWxsIENvbW1EbGdFeHRlbmRlZEVycm9yKCkgQ29tbURsZ0V4dGVuZGVkRXJyb3IKIDAwMDYgc3R1YiBGaW5kVGV4dEEKIDAwMDcgc3R1YiBGaW5kVGV4dFcKLTAwMDggc3R1YiBHZXRGaWxlVGl0bGVBCi0wMDA5IHN0dWIgR2V0RmlsZVRpdGxlVwotMDAxMCBzdHViIEdldE9wZW5GaWxlTmFtZUEKLTAwMTEgc3R1YiBHZXRPcGVuRmlsZU5hbWVXCi0wMDEyIHN0dWIgR2V0U2F2ZUZpbGVOYW1lQQotMDAxMyBzdHViIEdldFNhdmVGaWxlTmFtZVcKKzAwMDggc3RkY2FsbCBHZXRGaWxlVGl0bGVBKHB0ciBwdHIgbG9uZykgR2V0RmlsZVRpdGxlMzJBCiswMDA5IHN0ZGNhbGwgR2V0RmlsZVRpdGxlVyhwdHIgcHRyIGxvbmcpIEdldEZpbGVUaXRsZTMyVworMDAxMCBzdGRjYWxsIEdldE9wZW5GaWxlTmFtZUEocHRyKSBHZXRPcGVuRmlsZU5hbWUzMkEKKzAwMTEgc3RkY2FsbCBHZXRPcGVuRmlsZU5hbWVXKHB0cikgR2V0T3BlbkZpbGVOYW1lMzJXCiswMDEyIHN0ZGNhbGwgR2V0U2F2ZUZpbGVOYW1lQShwdHIpIEdldFNhdmVGaWxlTmFtZTMyQQorMDAxMyBzdGRjYWxsIEdldFNhdmVGaWxlTmFtZVcocHRyKSBHZXRTYXZlRmlsZU5hbWUzMkEKIDAwMTQgc3R1YiBMb2FkQWx0ZXJCaXRtYXAKIDAwMTUgc3R1YiBQYWdlU2V0dXBEbGdBCiAwMDE2IHN0dWIgUGFnZVNldHVwRGxnVwpkaWZmIC0tZ2l0IGEvaWYxNjMyL2NvbW1kbGcuc3BlYyBiL2lmMTYzMi9jb21tZGxnLnNwZWMKaW5kZXggNWViNjE4MS4uMWE3MDVlYSAxMDA2NDQKLS0tIGEvaWYxNjMyL2NvbW1kbGcuc3BlYworKysgYi9pZjE2MzIvY29tbWRsZy5zcGVjCkBAIC0xLDggKzEsOCBAQAogbmFtZQljb21tZGxnCiB0eXBlCXdpbjE2CiAKLTEgICBwYXNjYWwxNiBHZXRPcGVuRmlsZU5hbWUoc2VncHRyKSBHZXRPcGVuRmlsZU5hbWUKLTIgICBwYXNjYWwxNiBHZXRTYXZlRmlsZU5hbWUoc2VncHRyKSBHZXRTYXZlRmlsZU5hbWUKKzEgICBwYXNjYWwxNiBHZXRPcGVuRmlsZU5hbWUoc2VncHRyKSBHZXRPcGVuRmlsZU5hbWUxNgorMiAgIHBhc2NhbDE2IEdldFNhdmVGaWxlTmFtZShzZWdwdHIpIEdldFNhdmVGaWxlTmFtZTE2CiA1ICAgcGFzY2FsMTYgQ2hvb3NlQ29sb3IocHRyKSBDaG9vc2VDb2xvcgogNiAgIHBhc2NhbCAgIEZpbGVPcGVuRGxnUHJvYyh3b3JkIHdvcmQgd29yZCBsb25nKSBGaWxlT3BlbkRsZ1Byb2MKIDcgICBwYXNjYWwgICBGaWxlU2F2ZURsZ1Byb2Mod29yZCB3b3JkIHdvcmQgbG9uZykgRmlsZVNhdmVEbGdQcm9jCkBAIC0yMiw3ICsyMiw3IEBACiAjMjMgIHBhc2NhbCAgRURJVElOVEVHRVJPTkxZIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQogIzI1ICBwYXNjYWwgIFdBTlRBUlJPV1MgZXhwb3J0ZWQsIHNoYXJlZCBkYXRhCiAyNiAgcGFzY2FsICAgQ29tbURsZ0V4dGVuZGVkRXJyb3IoKSBDb21tRGxnRXh0ZW5kZWRFcnJvcgotMjcgIHBhc2NhbDE2IEdldEZpbGVUaXRsZShwdHIgcHRyIHdvcmQpIEdldEZpbGVUaXRsZQorMjcgIHBhc2NhbDE2IEdldEZpbGVUaXRsZShzdHIgcHRyIHdvcmQpIEdldEZpbGVUaXRsZTE2CiAjMjggIHBhc2NhbCAgV0VQIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQogIzI5ICBwYXNjYWwgIERXTEJTVUJDTEFTUyBleHBvcnRlZCwgc2hhcmVkIGRhdGEKICMzMCAgcGFzY2FsICBEV1VQQVJST1dIQUNLIGV4cG9ydGVkLCBzaGFyZWQgZGF0YQpkaWZmIC0tZ2l0IGEvaWYxNjMyL2NydGRsbC5zcGVjIGIvaWYxNjMyL2NydGRsbC5zcGVjCmluZGV4IDdlNDNjZTkuLjQyYTg4MDUgMTAwNjQ0Ci0tLSBhL2lmMTYzMi9jcnRkbGwuc3BlYworKysgYi9pZjE2MzIvY3J0ZGxsLnNwZWMKQEAgLTQzMSw3ICs0MzEsNyBAQAogNDI2IHN0dWIgbG9uZ2ptcAogNDI3IGNkZWNsIG1hbGxvYyhwdHIpIENSVERMTF9tYWxsb2MKIDQyOCBzdHViIG1ibGVuCi00Mjkgc3R1YiBtYnN0b3djcworNDI5IGNkZWNsIG1ic3Rvd2NzKHB0ciBwdHIgbG9uZykgQ1JURExMX21ic3Rvd2NzCiA0MzAgY2RlY2wgbWJ0b3djKGxvbmcpIENSVERMTF9tYnRvd2MKIDQzMSBjZGVjbCBtZW1jaHIocHRyIGxvbmcgbG9uZykgbWVtY2hyCiA0MzIgY2RlY2wgbWVtY21wKHB0ciBwdHIgbG9uZykgbWVtY21wCmRpZmYgLS1naXQgYS9pZjE2MzIvZGRlbWwuc3BlYyBiL2lmMTYzMi9kZGVtbC5zcGVjCmluZGV4IDEyYzE0MjAuLjhkYTcyOWMgMTAwNjQ0Ci0tLSBhL2lmMTYzMi9kZGVtbC5zcGVjCisrKyBiL2lmMTYzMi9kZGVtbC5zcGVjCkBAIC0yMCw5ICsyMCw5IEBACiAxOCBzdHViIERkZVVuYWNjZXNzRGF0YSAjKHdvcmQpIERkZVVuYWNjZXNzRGF0YQogMTkgc3R1YiBEZGVGcmVlRGF0YUhhbmRsZSAjKHdvcmQpIERkZUZyZWVEYXRhSGFuZGxlCiAyMCBzdHViIERkZUdldExhc3RFcnJvciAjKGxvbmcpIERkZUdldExhc3RFcnJvcgotMjEgc3R1YiBEZGVDcmVhdGVTdHJpbmdIYW5kbGUgIyhsb25nIHB0ciB3b3JkKSBEZGVDcmVhdGVTdHJpbmdIYW5kbGUKKzIxIHN0dWIgRGRlQ3JlYXRlU3RyaW5nSGFuZGxlICMobG9uZyBzdHIgd29yZCkgRGRlQ3JlYXRlU3RyaW5nSGFuZGxlCiAyMiBzdHViIERkZUZyZWVTdHJpbmdIYW5kbGUgIyhsb25nIHdvcmQpIERkZUZyZWVTdHJpbmdIYW5kbGUKLTIzIHN0dWIgICBEZGVRdWVyeVN0cmluZyAjKGxvbmcgd29yZCBwdHIgbG9uZyB3b3JkKSBEZGVRdWVyeVN0cmluZworMjMgc3R1YiBEZGVRdWVyeVN0cmluZyAjKGxvbmcgd29yZCBwdHIgbG9uZyB3b3JkKSBEZGVRdWVyeVN0cmluZwogMjQgc3R1YiBEZGVLZWVwU3RyaW5nSGFuZGxlICMobG9uZyB3b3JkKSBEZGVLZWVwU3RyaW5nSGFuZGxlCiAKIDI2IHN0dWIgRGRlRW5hYmxlQ2FsbGJhY2sgIyhsb25nIHdvcmQgd29yZCkgRGRlRW5hYmxlQ2FsbGJhY2sKZGlmZiAtLWdpdCBhL2lmMTYzMi9kdW1teS5jIGIvaWYxNjMyL2R1bW15LmMKaW5kZXggY2IwNzU4ZS4uYWJjNzkyZSAxMDA2NDQKLS0tIGEvaWYxNjMyL2R1bW15LmMKKysrIGIvaWYxNjMyL2R1bW15LmMKQEAgLTQ0LDMgKzQ0LDQgQEAKIGxvbmcgc3R1Yl9VU0VSXzkyMCh2b2lkKSB7IGZwcmludGYoc3RkZXJyLCAiV2FybmluZzogVVNFUl85MjA6IHVuaW1wbGVtZW50ZWQgc3R1YlxuIik7IHJldHVybiAwOyB9CiBsb25nIHN0dWJfVVNFUl85MjIodm9pZCkgeyBmcHJpbnRmKHN0ZGVyciwgIldhcm5pbmc6IFVTRVJfOTIyOiB1bmltcGxlbWVudGVkIHN0dWJcbiIpOyByZXR1cm4gMDsgfQogbG9uZyBzdHViX1VTRVJfOTIzKHZvaWQpIHsgZnByaW50ZihzdGRlcnIsICJXYXJuaW5nOiBVU0VSXzkyMzogdW5pbXBsZW1lbnRlZCBzdHViXG4iKTsgcmV0dXJuIDA7IH0KK2xvbmcgc3R1Yl9LRVJORUxfNzAwKHZvaWQpIHsgZnByaW50ZihzdGRlcnIsICJXYXJuaW5nOiBLRVJORUxfNzAwOiB1bmltcGxlbWVudGVkIHN0dWJcbiIpOyByZXR1cm4gMTsgfQpkaWZmIC0tZ2l0IGEvaWYxNjMyL2dkaS5zcGVjIGIvaWYxNjMyL2dkaS5zcGVjCmluZGV4IDRkYjM3ZDAuLmYxZWYyYmQgMTAwNjQ0Ci0tLSBhL2lmMTYzMi9nZGkuc3BlYworKysgYi9pZjE2MzIvZ2RpLnNwZWMKQEAgLTYzLDcgKzYzLDcgQEAKIDU0ICBwYXNjYWwxNiBDcmVhdGVFbGxpcHRpY1JnbihzX3dvcmQgc193b3JkIHNfd29yZCBzX3dvcmQpIENyZWF0ZUVsbGlwdGljUmduMTYKIDU1ICBwYXNjYWwxNiBDcmVhdGVFbGxpcHRpY1JnbkluZGlyZWN0KHB0cikgQ3JlYXRlRWxsaXB0aWNSZ25JbmRpcmVjdDE2CiA1NiAgcGFzY2FsMTYgQ3JlYXRlRm9udChzX3dvcmQgc193b3JkIHNfd29yZCBzX3dvcmQgc193b3JkIHdvcmQgd29yZCB3b3JkCi0gICAgICAgICAgICAgICAgICAgICAgICB3b3JkIHdvcmQgd29yZCB3b3JkIHdvcmQgcHRyKSBDcmVhdGVGb250MTYKKyAgICAgICAgICAgICAgICAgICAgICAgIHdvcmQgd29yZCB3b3JkIHdvcmQgd29yZCBzdHIpIENyZWF0ZUZvbnQxNgogNTcgIHBhc2NhbDE2IENyZWF0ZUZvbnRJbmRpcmVjdChwdHIpIENyZWF0ZUZvbnRJbmRpcmVjdDE2CiA1OCAgcGFzY2FsMTYgQ3JlYXRlSGF0Y2hCcnVzaCh3b3JkIGxvbmcpIENyZWF0ZUhhdGNoQnJ1c2gxNgogNjAgIHBhc2NhbDE2IENyZWF0ZVBhdHRlcm5CcnVzaCh3b3JkKSBDcmVhdGVQYXR0ZXJuQnJ1c2gxNgpAQCAtNzYsNyArNzYsNyBAQAogNjcgIHBhc2NhbDE2IERQdG9MUCh3b3JkIHB0ciBzX3dvcmQpIERQdG9MUDE2CiA2OCAgcGFzY2FsMTYgRGVsZXRlREMod29yZCkgRGVsZXRlREMxNgogNjkgIHBhc2NhbDE2IERlbGV0ZU9iamVjdCh3b3JkKSBEZWxldGVPYmplY3QxNgotNzAgIHBhc2NhbDE2IEVudW1Gb250cyh3b3JkIHB0ciBzZWdwdHIgbG9uZykgVEhVTktfRW51bUZvbnRzMTYKKzcwICBwYXNjYWwxNiBFbnVtRm9udHMod29yZCBzdHIgc2VncHRyIGxvbmcpIFRIVU5LX0VudW1Gb250czE2CiA3MSAgcGFzY2FsMTYgRW51bU9iamVjdHMod29yZCB3b3JkIHNlZ3B0ciBsb25nKSBUSFVOS19FbnVtT2JqZWN0czE2CiA3MiAgcGFzY2FsMTYgRXF1YWxSZ24od29yZCB3b3JkKSBFcXVhbFJnbjE2CiA3MyAgcGFzY2FsMTYgRXhjbHVkZVZpc1JlY3Qod29yZCBzX3dvcmQgc193b3JkIHNfd29yZCBzX3dvcmQpIEV4Y2x1ZGVWaXNSZWN0CkBAIC0xMTUsMjggKzExNSwyOCBAQAogMTA1IHBhc2NhbDE2IFNlbGVjdFZpc1Jnbih3b3JkIHdvcmQpIFNlbGVjdFZpc1JnbgogMTA2IHBhc2NhbCBTZXRCaXRtYXBCaXRzKHdvcmQgbG9uZyBwdHIpIFNldEJpdG1hcEJpdHMxNgogMTE3IHBhc2NhbCBTZXREQ09yZyh3b3JkIHNfd29yZCBzX3dvcmQpIFNldERDT3JnCi0xMTkgcGFzY2FsMTYgQWRkRm9udFJlc291cmNlKHB0cikgQWRkRm9udFJlc291cmNlMTYKKzExOSBwYXNjYWwxNiBBZGRGb250UmVzb3VyY2Uoc3RyKSBBZGRGb250UmVzb3VyY2UxNgogIzEyMSBwYXNjYWwgRGVhdGgKICMxMjIgcGFzY2FsIFJlU3VyUmVjdGlvbgogMTIzIHBhc2NhbDE2IFBsYXlNZXRhRmlsZSh3b3JkIHdvcmQpIFBsYXlNZXRhRmlsZTE2Ci0xMjQgcGFzY2FsMTYgR2V0TWV0YUZpbGUocHRyKSBHZXRNZXRhRmlsZTE2Ci0xMjUgcGFzY2FsMTYgQ3JlYXRlTWV0YUZpbGUocHRyKSBDcmVhdGVNZXRhRmlsZTE2CisxMjQgcGFzY2FsMTYgR2V0TWV0YUZpbGUoc3RyKSBHZXRNZXRhRmlsZTE2CisxMjUgcGFzY2FsMTYgQ3JlYXRlTWV0YUZpbGUoc3RyKSBDcmVhdGVNZXRhRmlsZTE2CiAxMjYgcGFzY2FsMTYgQ2xvc2VNZXRhRmlsZSh3b3JkKSBDbG9zZU1ldGFGaWxlMTYKIDEyNyBwYXNjYWwxNiBEZWxldGVNZXRhRmlsZSh3b3JkKSBEZWxldGVNZXRhRmlsZTE2CiAxMjggcGFzY2FsMTYgTXVsRGl2KHNfd29yZCBzX3dvcmQgc193b3JkKSBNdWxEaXYxNgogMTI5IHBhc2NhbDE2IFNhdmVWaXNSZ24od29yZCkgU2F2ZVZpc1JnbgogMTMwIHBhc2NhbDE2IFJlc3RvcmVWaXNSZ24od29yZCkgUmVzdG9yZVZpc1JnbgogMTMxIHBhc2NhbDE2IElucXVpcmVWaXNSZ24od29yZCkgSW5xdWlyZVZpc1JnbgotMTMyIHBhc2NhbDE2IFNldEVudmlyb25tZW50KHB0ciBwdHIgd29yZCkgU2V0RW52aXJvbm1lbnQKLTEzMyBwYXNjYWwxNiBHZXRFbnZpcm9ubWVudChwdHIgcHRyIHdvcmQpIEdldEVudmlyb25tZW50CisxMzIgcGFzY2FsMTYgU2V0RW52aXJvbm1lbnQoc3RyIHN0ciB3b3JkKSBTZXRFbnZpcm9ubWVudAorMTMzIHBhc2NhbDE2IEdldEVudmlyb25tZW50KHN0ciBzdHIgd29yZCkgR2V0RW52aXJvbm1lbnQKIDEzNCBwYXNjYWwxNiBHZXRSZ25Cb3god29yZCBwdHIpIEdldFJnbkJveDE2CiAjMTM1IHBhc2NhbCBTY2FuTHIKLTEzNiBwYXNjYWwxNiBSZW1vdmVGb250UmVzb3VyY2UocHRyKSBSZW1vdmVGb250UmVzb3VyY2UxNgorMTM2IHBhc2NhbDE2IFJlbW92ZUZvbnRSZXNvdXJjZShzZWdwdHIpIFJlbW92ZUZvbnRSZXNvdXJjZTE2CiAxNDggcGFzY2FsIFNldEJydXNoT3JnKHdvcmQgc193b3JkIHNfd29yZCkgU2V0QnJ1c2hPcmcKIDE0OSBwYXNjYWwgR2V0QnJ1c2hPcmcod29yZCkgR2V0QnJ1c2hPcmcKIDE1MCBwYXNjYWwxNiBVbnJlYWxpemVPYmplY3Qod29yZCkgVW5yZWFsaXplT2JqZWN0MTYKLTE1MSBwYXNjYWwxNiBDb3B5TWV0YUZpbGUod29yZCBwdHIpIENvcHlNZXRhRmlsZTE2Ci0xNTMgcGFzY2FsMTYgQ3JlYXRlSUMocHRyIHB0ciBwdHIgcHRyKSBDcmVhdGVJQzE2CisxNTEgcGFzY2FsMTYgQ29weU1ldGFGaWxlKHdvcmQgc3RyKSBDb3B5TWV0YUZpbGUxNgorMTUzIHBhc2NhbDE2IENyZWF0ZUlDKHN0ciBzdHIgc3RyIHB0cikgQ3JlYXRlSUMxNgogMTU0IHBhc2NhbCAgIEdldE5lYXJlc3RDb2xvcih3b3JkIGxvbmcpIEdldE5lYXJlc3RDb2xvcjE2CiAxNTUgc3R1YiBRdWVyeUFib3J0CiAxNTYgcGFzY2FsMTYgQ3JlYXRlRGlzY2FyZGFibGVCaXRtYXAod29yZCB3b3JkIHdvcmQpIENyZWF0ZURpc2NhcmRhYmxlQml0bWFwMTYKQEAgLTIxOSw3ICsyMTksNyBAQAogMzA3IHBhc2NhbDE2IEdldENoYXJBQkNXaWR0aHMod29yZCB3b3JkIHdvcmQgcHRyKSBHZXRDaGFyQUJDV2lkdGhzMTYKIDMwOCBzdHViIEdldE91dExpbmVUZXh0TWV0cmljcwogMzA5IHBhc2NhbCAgIEdldEdseXBoT3V0bGluZSh3b3JkIHdvcmQgd29yZCBwdHIgbG9uZyBwdHIgcHRyKSBHZXRHbHlwaE91dGxpbmUxNgotMzEwIHBhc2NhbDE2IENyZWF0ZVNjYWxhYmxlRm9udFJlc291cmNlKHdvcmQgcHRyIHB0ciBwdHIpIENyZWF0ZVNjYWxhYmxlRm9udFJlc291cmNlMTYKKzMxMCBwYXNjYWwxNiBDcmVhdGVTY2FsYWJsZUZvbnRSZXNvdXJjZSh3b3JkIHN0ciBzdHIgc3RyKSBDcmVhdGVTY2FsYWJsZUZvbnRSZXNvdXJjZTE2CiAzMTEgc3R1YiBHZXRGb250RGF0YQogMzEyIHN0dWIgQ29udmVydE91dExpbmVGb250RmlsZQogMzEzIHBhc2NhbDE2IEdldFJhc3Rlcml6ZXJDYXBzKHB0ciB3b3JkKSBHZXRSYXN0ZXJpemVyQ2FwczE2CkBAIC0yMjcsNyArMjI3LDcgQEAKIDMxNSBzdHViIEVuZ2luZVJlYWxpemVGb250RXh0CiAzMTYgc3R1YiBFbmdpbmVHZXRDaGFyV2lkdGhTdHIKIDMxNyBzdHViIEVuZ2luZUdldEdseXBoQm1wRXh0Ci0zMzAgcGFzY2FsMTYgRW51bUZvbnRGYW1pbGllcyh3b3JkIHB0ciBzZWdwdHIgbG9uZykgVEhVTktfRW51bUZvbnRGYW1pbGllczE2CiszMzAgcGFzY2FsMTYgRW51bUZvbnRGYW1pbGllcyh3b3JkIHN0ciBzZWdwdHIgbG9uZykgVEhVTktfRW51bUZvbnRGYW1pbGllczE2CiAzMzIgcGFzY2FsMTYgR2V0S2VybmluZ1BhaXJzKHdvcmQgd29yZCBwdHIpIEdldEtlcm5pbmdQYWlyczE2CiAzNDUgcGFzY2FsMTYgR2V0VGV4dEFsaWduKHdvcmQpIEdldFRleHRBbGlnbjE2CiAzNDYgcGFzY2FsMTYgU2V0VGV4dEFsaWduKHdvcmQgd29yZCkgU2V0VGV4dEFsaWduMTYKQEAgLTM4MCw3ICszODAsNyBAQAogNjA5IHN0dWIgR0RJRnJlZVJlc291cmNlcwogNjEwIHN0dWIgR0RJU2lnbmFsUHJvYzMyCiA2MTEgc3R1YiBHZXRSYW5kb21SZ24KLTYxMiBzdHViIEdldFRleHRDaGFyU2V0Cis2MTIgcGFzY2FsMTYgR2V0VGV4dENoYXJzZXQod29yZCkgR2V0VGV4dENoYXJzZXQxNgogNjEzIHBhc2NhbDE2IEVudW1Gb250RmFtaWxpZXNFeCh3b3JkIHB0ciBzZWdwdHIgbG9uZyBsb25nKSBUSFVOS19FbnVtRm9udEZhbWlsaWVzRXgxNgogNjE0IHN0dWIgQWRkTHBrVG9HREkKIDYxNSBzdHViIEdldENoYXJhY3RlclBsYWNlbWVudApkaWZmIC0tZ2l0IGEvaWYxNjMyL2dkaTMyLnNwZWMgYi9pZjE2MzIvZ2RpMzIuc3BlYwppbmRleCA3ZTYxMzFlLi41Y2Y4OTBhIDEwMDY0NAotLS0gYS9pZjE2MzIvZ2RpMzIuc3BlYworKysgYi9pZjE2MzIvZ2RpMzIuc3BlYwpAQCAtMTM0LDcgKzEzNCw3IEBACiAwMTI2IHN0dWIgR2RpRGVsZXRlTG9jYWxEQwogMDEyNyBzdHViIEdkaURlbGV0ZUxvY2FsT2JqZWN0CiAwMTI4IHN0dWIgR2RpRmx1c2gKLTAxMjkgc3R1YiBHZGlHZXRCYXRjaExpbWl0CiswMTI5IHJldHVybiBHZGlHZXRCYXRjaExpbWl0IDAgMQogMDEzMCBzdHViIEdkaUdldExvY2FsQnJ1c2gKIDAxMzEgc3R1YiBHZGlHZXRMb2NhbERDCiAwMTMyIHN0dWIgR2RpR2V0TG9jYWxGb250CkBAIC0xOTMsNyArMTkzLDcgQEAKIDAxODUgc3R1YiBHZXRHbHlwaE91dGxpbmUKIDAxODYgc3RkY2FsbCBHZXRHbHlwaE91dGxpbmVBKGxvbmcgbG9uZyBsb25nIHB0ciBsb25nIHB0ciBwdHIpIEdldEdseXBoT3V0bGluZTMyQQogMDE4NyBzdGRjYWxsIEdldEdseXBoT3V0bGluZVcobG9uZyBsb25nIGxvbmcgcHRyIGxvbmcgcHRyIHB0cikgR2V0R2x5cGhPdXRsaW5lMzJXCi0wMTg4IHN0dWIgR2V0R3JhcGhpY3NNb2RlCiswMTg4IHJldHVybiBHZXRHcmFwaGljc01vZGUgNCAxIAkjIGp1c3QgcmV0dXJuIDEKIDAxODkgc3R1YiBHZXRJQ01Qcm9maWxlQQogMDE5MCBzdHViIEdldElDTVByb2ZpbGVXCiAwMTkxIHN0dWIgR2V0S2VybmluZ1BhaXJzCkBAIC0yMzEsNyArMjMxLDcgQEAKIDAyMjMgc3RkY2FsbCBHZXRTeXN0ZW1QYWxldHRlVXNlKCkgR2V0U3lzdGVtUGFsZXR0ZVVzZTMyCiAwMjI0IHN0ZGNhbGwgR2V0VGV4dEFsaWduKGxvbmcpIEdldFRleHRBbGlnbjMyCiAwMjI1IHN0ZGNhbGwgR2V0VGV4dENoYXJhY3RlckV4dHJhKGxvbmcpIEdldFRleHRDaGFyYWN0ZXJFeHRyYTMyCi0wMjI2IHN0dWIgR2V0VGV4dENoYXJzZXQKKzAyMjYgc3RkY2FsbCBHZXRUZXh0Q2hhcnNldChsb25nKSBHZXRUZXh0Q2hhcnNldDMyCiAwMjI3IHN0ZGNhbGwgR2V0VGV4dENvbG9yKGxvbmcpIEdldFRleHRDb2xvcjMyCiAwMjI4IHN0ZGNhbGwgR2V0VGV4dEV4dGVudEV4UG9pbnRBKGxvbmcgcHRyIGxvbmcgbG9uZyBwdHIgcHRyIHB0cikgR2V0VGV4dEV4dGVudEV4UG9pbnQzMkEKIDAyMjkgc3RkY2FsbCBHZXRUZXh0RXh0ZW50RXhQb2ludFcobG9uZyBwdHIgbG9uZyBsb25nIHB0ciBwdHIgcHRyKSBHZXRUZXh0RXh0ZW50RXhQb2ludDMyVwpAQCAtMjQ5LDcgKzI0OSw3IEBACiAwMjQxIHN0dWIgR2V0V2luTWV0YUZpbGVCaXRzCiAwMjQyIHN0ZGNhbGwgR2V0V2luZG93RXh0RXgobG9uZyBwdHIpIEdldFdpbmRvd0V4dEV4MzIKIDAyNDMgc3RkY2FsbCBHZXRXaW5kb3dPcmdFeChsb25nIHB0cikgR2V0V2luZG93T3JnRXgzMgotMDI0NCBzdHViIEdldFdvcmxkVHJhbnNmb3JtCiswMjQ0IHJldHVybiBHZXRXb3JsZFRyYW5zZm9ybSA4IDAKIDAyNDUgc3RkY2FsbCBJbnRlcnNlY3RDbGlwUmVjdChsb25nIGxvbmcgbG9uZyBsb25nIGxvbmcpIEludGVyc2VjdENsaXBSZWN0MzIKIDAyNDYgc3RkY2FsbCBJbnZlcnRSZ24obG9uZyBsb25nKSBJbnZlcnRSZ24zMgogMDI0NyBzdGRjYWxsIExQdG9EUChsb25nIHB0ciBsb25nKSBMUHRvRFAzMgpAQCAtMzIzLDcgKzMyMyw3IEBACiAwMzE0IHN0dWIgU2V0RGV2aWNlR2FtbWFSYW1wCiAwMzE1IHN0dWIgU2V0RW5oTWV0YUZpbGVCaXRzCiAwMzE2IHN0dWIgU2V0Rm9udEVudW1lcmF0aW9uCi0wMzE3IHN0dWIgU2V0R3JhcGhpY3NNb2RlCiswMzE3IHJldHVybiBTZXRHcmFwaGljc01vZGUgOCAxCiAwMzE4IHN0dWIgU2V0SUNNTW9kZQogMDMxOSBzdHViIFNldElDTVByb2ZpbGVBCiAwMzIwIHN0dWIgU2V0SUNNUHJvZmlsZVcKZGlmZiAtLWdpdCBhL2lmMTYzMi9rZXJuZWwuc3BlYyBiL2lmMTYzMi9rZXJuZWwuc3BlYwppbmRleCBhZjM3NjFjLi42YzRjOWE5IDEwMDY0NAotLS0gYS9pZjE2MzIva2VybmVsLnNwZWMKKysrIGIvaWYxNjMyL2tlcm5lbC5zcGVjCkBAIC00MSw3ICs0MSw3IEBACiAzOCAgcGFzY2FsICAgU2V0VGFza1NpZ25hbFByb2Mod29yZCBzZWdwdHIpIFNldFRhc2tTaWduYWxQcm9jCiA0MSAgcmV0dXJuIEVuYWJsZURvcyAwIDAKIDQyICByZXR1cm4gRGlzYWJsZURvcyAwIDAKLTQ1ICBwYXNjYWwxNiBMb2FkTW9kdWxlKHB0ciBwdHIpIExvYWRNb2R1bGUxNgorNDUgIHBhc2NhbDE2IExvYWRNb2R1bGUoc3RyIHB0cikgTG9hZE1vZHVsZTE2CiA0NiAgcGFzY2FsMTYgRnJlZU1vZHVsZSh3b3JkKSBGcmVlTW9kdWxlMTYKIDQ3ICBwYXNjYWwxNiBHZXRNb2R1bGVIYW5kbGUoc2VncHRyKSBXSU4xNl9HZXRNb2R1bGVIYW5kbGUKIDQ4ICBwYXNjYWwxNiBHZXRNb2R1bGVVc2FnZSh3b3JkKSBHZXRNb2R1bGVVc2FnZQpAQCAtNTMsOSArNTMsOSBAQAogNTQgIHBhc2NhbDE2IEdldEluc3RhbmNlRGF0YSh3b3JkIHdvcmQgd29yZCkgR2V0SW5zdGFuY2VEYXRhCiA1NSAgcGFzY2FsMTYgQ2F0Y2gocHRyKSBDYXRjaCAKIDU2ICBwYXNjYWwxNiBUaHJvdyhwdHIgd29yZCkgVGhyb3cKLTU3ICBwYXNjYWwxNiBHZXRQcm9maWxlSW50KHB0ciBwdHIgc193b3JkKSBHZXRQcm9maWxlSW50MTYKLTU4ICBwYXNjYWwxNiBHZXRQcm9maWxlU3RyaW5nKHB0ciBwdHIgcHRyIHB0ciB3b3JkKSBHZXRQcm9maWxlU3RyaW5nMTYKLTU5ICBwYXNjYWwxNiBXcml0ZVByb2ZpbGVTdHJpbmcocHRyIHB0ciBwdHIpIFdyaXRlUHJvZmlsZVN0cmluZzE2Cis1NyAgcGFzY2FsMTYgR2V0UHJvZmlsZUludChzdHIgc3RyIHNfd29yZCkgR2V0UHJvZmlsZUludDE2Cis1OCAgcGFzY2FsMTYgR2V0UHJvZmlsZVN0cmluZyhzdHIgc3RyIHN0ciBwdHIgd29yZCkgR2V0UHJvZmlsZVN0cmluZzE2Cis1OSAgcGFzY2FsMTYgV3JpdGVQcm9maWxlU3RyaW5nKHN0ciBzdHIgc3RyKSBXcml0ZVByb2ZpbGVTdHJpbmcxNgogNjAgIHBhc2NhbDE2IEZpbmRSZXNvdXJjZSh3b3JkIHNlZ3B0ciBzZWdwdHIpIEZpbmRSZXNvdXJjZTE2CiA2MSAgcGFzY2FsMTYgTG9hZFJlc291cmNlKHdvcmQgd29yZCkgTG9hZFJlc291cmNlMTYKIDYyICBwYXNjYWwgTG9ja1Jlc291cmNlKHdvcmQpIFdJTjE2X0xvY2tSZXNvdXJjZTE2CkBAIC02MywxNCArNjMsMTQgQEAKIDY0ICBwYXNjYWwxNiBBY2Nlc3NSZXNvdXJjZSh3b3JkIHdvcmQpIEFjY2Vzc1Jlc291cmNlMTYKIDY1ICBwYXNjYWwgU2l6ZW9mUmVzb3VyY2Uod29yZCB3b3JkKSBTaXplb2ZSZXNvdXJjZTE2CiA2NiAgcGFzY2FsMTYgQWxsb2NSZXNvdXJjZSh3b3JkIHdvcmQgbG9uZykgQWxsb2NSZXNvdXJjZTE2Ci02NyAgcGFzY2FsIFNldFJlc291cmNlSGFuZGxlcih3b3JkIHB0ciBwdHIpIFNldFJlc291cmNlSGFuZGxlcgorNjcgIHBhc2NhbCBTZXRSZXNvdXJjZUhhbmRsZXIod29yZCBzZWdwdHIgcHRyKSBTZXRSZXNvdXJjZUhhbmRsZXIKIDY4ICBwYXNjYWwxNiBJbml0QXRvbVRhYmxlKHdvcmQpIEluaXRBdG9tVGFibGUxNgogNjkgIHBhc2NhbDE2IEZpbmRBdG9tKHNlZ3B0cikgRmluZEF0b20xNgogNzAgIHBhc2NhbDE2IEFkZEF0b20oc2VncHRyKSBBZGRBdG9tMTYKIDcxICBwYXNjYWwxNiBEZWxldGVBdG9tKHdvcmQpIERlbGV0ZUF0b20xNgogNzIgIHBhc2NhbDE2IEdldEF0b21OYW1lKHdvcmQgcHRyIHdvcmQpIEdldEF0b21OYW1lMTYKIDczICBwYXNjYWwxNiBHZXRBdG9tSGFuZGxlKHdvcmQpIEdldEF0b21IYW5kbGUKLTc0ICBwYXNjYWwxNiBPcGVuRmlsZShwdHIgcHRyIHdvcmQpIE9wZW5GaWxlMTYKKzc0ICBwYXNjYWwxNiBPcGVuRmlsZShzdHIgcHRyIHdvcmQpIE9wZW5GaWxlMTYKIDc1ICBzdHViIE9wZW5QYXRoTmFtZQogNzYgIHN0dWIgRGVsZXRlUGF0aE5hbWUKIDc3IHN0dWIgS0VSTkVMXzc3CQkjUkVTRVJWRUQxCkBAIC03OSwyMSArNzksMjEgQEAKICM4MCBSRVNFUlZFRDQKIDgxICBwYXNjYWwxNiBfbGNsb3NlKHdvcmQpIF9sY2xvc2UxNgogODIgIHBhc2NhbDE2IF9scmVhZCh3b3JkIHNlZ3B0ciB3b3JkKSBXSU4xNl9scmVhZAotODMgIHBhc2NhbDE2IF9sY3JlYXQocHRyIHdvcmQpIF9sY3JlYXQxNgorODMgIHBhc2NhbDE2IF9sY3JlYXQoc3RyIHdvcmQpIF9sY3JlYXQxNgogODQgIHBhc2NhbCAgIF9sbHNlZWsod29yZCBsb25nIHdvcmQpIF9sbHNlZWsxNgotODUgIHBhc2NhbDE2IF9sb3BlbihwdHIgd29yZCkgX2xvcGVuMTYKKzg1ICBwYXNjYWwxNiBfbG9wZW4oc3RyIHdvcmQpIF9sb3BlbjE2CiA4NiAgcGFzY2FsMTYgX2x3cml0ZSh3b3JkIHB0ciB3b3JkKSBfbHdyaXRlMTYKLTg3ICBwYXNjYWwxNiBSRVNFUlZFRDUocHRyIHB0cikgbHN0cmNtcDE2Ci04OCAgcGFzY2FsICAgbHN0cmNweShzZWdwdHIgc2VncHRyKSBsc3RyY3B5MTYKLTg5ICBwYXNjYWwgICBsc3RyY2F0KHNlZ3B0ciBzZWdwdHIpIGxzdHJjYXQxNgotOTAgIHBhc2NhbDE2IGxzdHJsZW4ocHRyKSBsc3RybGVuMTYKKzg3ICBwYXNjYWwxNiBSRVNFUlZFRDUoc3RyIHN0cikgbHN0cmNtcDE2Cis4OCAgcGFzY2FsICAgbHN0cmNweShzZWdwdHIgc3RyKSBsc3RyY3B5MTYKKzg5ICBwYXNjYWwgICBsc3RyY2F0KHNlZ3B0ciBzdHIpIGxzdHJjYXQxNgorOTAgIHBhc2NhbDE2IGxzdHJsZW4oc3RyKSBsc3RybGVuMTYKIDkxICByZWdpc3RlciBJbml0VGFzaygpIEluaXRUYXNrCiA5MiAgcGFzY2FsICAgR2V0VGVtcERyaXZlKGJ5dGUpIFdJTjE2X0dldFRlbXBEcml2ZQogOTMgIHBhc2NhbDE2IEdldENvZGVIYW5kbGUoc2VncHRyKSBHZXRDb2RlSGFuZGxlCiA5NCAgc3R1YiBEZWZpbmVIYW5kbGVUYWJsZQotOTUgIHBhc2NhbDE2IExvYWRMaWJyYXJ5KHB0cikgTG9hZExpYnJhcnkxNgorOTUgIHBhc2NhbDE2IExvYWRMaWJyYXJ5KHN0cikgTG9hZExpYnJhcnkxNgogOTYgIHBhc2NhbDE2IEZyZWVMaWJyYXJ5KHdvcmQpIEZyZWVMaWJyYXJ5MTYKLTk3ICBwYXNjYWwxNiBHZXRUZW1wRmlsZU5hbWUoYnl0ZSBwdHIgd29yZCBwdHIpIEdldFRlbXBGaWxlTmFtZTE2Cis5NyAgcGFzY2FsMTYgR2V0VGVtcEZpbGVOYW1lKGJ5dGUgc3RyIHdvcmQgcHRyKSBHZXRUZW1wRmlsZU5hbWUxNgogOTggIHJldHVybiBHZXRMYXN0RGlza0NoYW5nZSAwIDAKIDk5ICBzdHViIEdldExQRXJyTW9kZQogMTAwIHJldHVybiBWYWxpZGF0ZUNvZGVTZWdtZW50cyAwIDAKQEAgLTExMSw3ICsxMTEsNyBAQAogMTEyIHBhc2NhbDE2IEdsb2JhbFVuV2lyZSh3b3JkKSBHbG9iYWxVbldpcmUxNgogMTEzIGVxdWF0ZSBfX0FIU0hJRlQgMwogMTE0IGVxdWF0ZSBfX0FISU5DUiA4Ci0xMTUgcGFzY2FsMTYgT3V0cHV0RGVidWdTdHJpbmcocHRyKSBPdXRwdXREZWJ1Z1N0cmluZzE2CisxMTUgcGFzY2FsMTYgT3V0cHV0RGVidWdTdHJpbmcoc3RyKSBPdXRwdXREZWJ1Z1N0cmluZzE2CiAxMTYgc3R1YiBJbml0TGliCiAxMTcgcGFzY2FsMTYgT2xkWWllbGQoKSBPbGRZaWVsZAogMTE4IHJlZ2lzdGVyIEdldFRhc2tRdWV1ZURTKCkgR2V0VGFza1F1ZXVlRFMKQEAgLTEyMywxMCArMTIzLDEwIEBACiAxMjQgcmV0dXJuIEVuYWJsZUtlcm5lbCAwIDAKIDEyNSByZXR1cm4gRGlzYWJsZUtlcm5lbCAwIDAKIDEyNiBzdHViIE1lbW9yeUZyZWVkCi0xMjcgcGFzY2FsMTYgR2V0UHJpdmF0ZVByb2ZpbGVJbnQocHRyIHB0ciBzX3dvcmQgcHRyKSBHZXRQcml2YXRlUHJvZmlsZUludDE2Ci0xMjggcGFzY2FsMTYgR2V0UHJpdmF0ZVByb2ZpbGVTdHJpbmcocHRyIHB0ciBwdHIgcHRyIHdvcmQgcHRyKQorMTI3IHBhc2NhbDE2IEdldFByaXZhdGVQcm9maWxlSW50KHN0ciBzdHIgc193b3JkIHN0cikgR2V0UHJpdmF0ZVByb2ZpbGVJbnQxNgorMTI4IHBhc2NhbDE2IEdldFByaXZhdGVQcm9maWxlU3RyaW5nKHN0ciBzdHIgc3RyIHB0ciB3b3JkIHN0cikKICAgICAgICAgICAgICBHZXRQcml2YXRlUHJvZmlsZVN0cmluZzE2Ci0xMjkgcGFzY2FsMTYgV3JpdGVQcml2YXRlUHJvZmlsZVN0cmluZyhwdHIgcHRyIHB0ciBwdHIpCisxMjkgcGFzY2FsMTYgV3JpdGVQcml2YXRlUHJvZmlsZVN0cmluZyhzdHIgc3RyIHN0ciBzdHIpCiAgICAgICAgICAgICAgV3JpdGVQcml2YXRlUHJvZmlsZVN0cmluZzE2CiAxMzAgcGFzY2FsIEZpbGVDRFIocHRyKSBGaWxlQ0RSCiAxMzEgcGFzY2FsIEdldERPU0Vudmlyb25tZW50KCkgR2V0RE9TRW52aXJvbm1lbnQKQEAgLTEzNSw3ICsxMzUsNyBAQAogMTM0IHBhc2NhbDE2IEdldFdpbmRvd3NEaXJlY3RvcnkocHRyIHdvcmQpIEdldFdpbmRvd3NEaXJlY3RvcnkxNgogMTM1IHBhc2NhbDE2IEdldFN5c3RlbURpcmVjdG9yeShwdHIgd29yZCkgR2V0U3lzdGVtRGlyZWN0b3J5MTYKIDEzNiBwYXNjYWwxNiBHZXREcml2ZVR5cGUoYnl0ZSkgR2V0RHJpdmVUeXBlMTYKLTEzNyBwYXNjYWwxNiBGYXRhbEFwcEV4aXQod29yZCBwdHIpIEZhdGFsQXBwRXhpdDE2CisxMzcgcGFzY2FsMTYgRmF0YWxBcHBFeGl0KHdvcmQgc3RyKSBGYXRhbEFwcEV4aXQxNgogMTM4IHBhc2NhbCBHZXRIZWFwU3BhY2VzKHdvcmQpIEdldEhlYXBTcGFjZXMKIDEzOSBzdHViIERvU2lnbmFsCiAxNDAgcGFzY2FsMTYgU2V0U2lnSGFuZGxlcihzZWdwdHIgcHRyIHB0ciB3b3JkIHdvcmQpIFNldFNpZ0hhbmRsZXIKQEAgLTE2Myw3ICsxNjMsNyBAQAogMTYzIHBhc2NhbDE2IEdsb2JhbExSVU9sZGVzdCh3b3JkKSBHbG9iYWxMUlVPbGRlc3QKIDE2NCBwYXNjYWwxNiBHbG9iYWxMUlVOZXdlc3Qod29yZCkgR2xvYmFsTFJVTmV3ZXN0CiAxNjUgcmV0dXJuIEEyMFByb2MgMiAwCi0xNjYgcGFzY2FsMTYgV2luRXhlYyhwdHIgd29yZCkgV2luRXhlYzE2CisxNjYgcGFzY2FsMTYgV2luRXhlYyhzdHIgd29yZCkgV2luRXhlYzE2CiAxNjcgcGFzY2FsMTYgR2V0RXhwV2luVmVyKHdvcmQpIEdldEV4cFdpblZlcgogMTY4IHBhc2NhbDE2IERpcmVjdFJlc0FsbG9jKHdvcmQgd29yZCB3b3JkKSBEaXJlY3RSZXNBbGxvYwogMTY5IHBhc2NhbCBHZXRGcmVlU3BhY2Uod29yZCkgR2V0RnJlZVNwYWNlMTYKQEAgLTI2OCw4ICsyNjgsOCBAQAogMzQ5IHBhc2NhbCAgIF9ocmVhZCh3b3JkIHNlZ3B0ciBsb25nKSBXSU4xNl9ocmVhZAogMzUwIHBhc2NhbCAgIF9od3JpdGUod29yZCBwdHIgbG9uZykgX2h3cml0ZTE2CiAjMzUxIEJVTk5ZXzM1MQotMzUyIHBhc2NhbCAgIGxzdHJjYXRuKHNlZ3B0ciBzZWdwdHIgd29yZCkgbHN0cmNhdG4xNgotMzUzIHBhc2NhbCAgIGxzdHJjcHluKHNlZ3B0ciBzZWdwdHIgd29yZCkgbHN0cmNweW4xNgorMzUyIHBhc2NhbCAgIGxzdHJjYXRuKHNlZ3B0ciBzdHIgd29yZCkgbHN0cmNhdG4xNgorMzUzIHBhc2NhbCAgIGxzdHJjcHluKHNlZ3B0ciBzdHIgd29yZCkgbHN0cmNweW4xNgogMzU0IHBhc2NhbCAgIEdldEFwcENvbXBhdEZsYWdzKHdvcmQpIEdldEFwcENvbXBhdEZsYWdzMTYKIDM1NSBwYXNjYWwxNiBHZXRXaW5EZWJ1Z0luZm8ocHRyIHdvcmQpIEdldFdpbkRlYnVnSW5mbwogMzU2IHBhc2NhbDE2IFNldFdpbkRlYnVnSW5mbyhwdHIpIFNldFdpbkRlYnVnSW5mbwpAQCAtMzExLDYgKzMxMSw3IEBACiA0NzIgc3R1YiBLRVJORUxfNDcyCiA0NzMgc3R1YiBLRVJORUxfNDczCiA0ODIgc3R1YiBLRVJORUxfNDgyCis0ODUgc3R1YiBLRVJORUxfNDg1CiA0OTEgc3R1YiBSZWdpc3RlclNlcnZpY2VQcm9jZXNzCiA1MDAgc3R1YiBLRVJORUxfNTAwCiA1MDIgc3R1YiBLRVJORUxfNTAyCkBAIC0zMzgsNCArMzM5LDQgQEAKIDYzMCBzdHViIEtFUk5FTF82MzAKIDYzMSBzdHViIEZVTkMwMDQJIyBzaGVsbCBob29rCiA2NTEgc3R1YiBLRVJORUxfNjUxCi03MDAgcmV0dXJuIEtFUk5FTF83MDAgMCAxCis3MDAgcGFzY2FsIEtFUk5FTF83MDAoKSBzdHViX0tFUk5FTF83MDAKZGlmZiAtLWdpdCBhL2lmMTYzMi9semV4cGFuZC5zcGVjIGIvaWYxNjMyL2x6ZXhwYW5kLnNwZWMKaW5kZXggYTEyYzdlMi4uMTM0MzQ3YyAxMDA2NDQKLS0tIGEvaWYxNjMyL2x6ZXhwYW5kLnNwZWMKKysrIGIvaWYxNjMyL2x6ZXhwYW5kLnNwZWMKQEAgLTIsNyArMiw3IEBACiB0eXBlCXdpbjE2CiAKIDEgIHBhc2NhbCAgIExaQ29weSh3b3JkIHdvcmQpIExaQ29weTE2Ci0yICBwYXNjYWwxNiBMWk9wZW5GaWxlKHB0ciBwdHIgd29yZCkgTFpPcGVuRmlsZTE2CisyICBwYXNjYWwxNiBMWk9wZW5GaWxlKHN0ciBwdHIgd29yZCkgTFpPcGVuRmlsZTE2CiAzICBwYXNjYWwxNiBMWkluaXQod29yZCkgTFpJbml0MTYKIDQgIHBhc2NhbCAgIExaU2Vlayh3b3JkIGxvbmcgd29yZCkgTFpTZWVrMTYKIDUgIHBhc2NhbDE2IExaUmVhZCh3b3JkIHB0ciB3b3JkKSBMWlJlYWQxNgpAQCAtMTAsNiArMTAsNiBAQAogNyAgcGFzY2FsMTYgTFpTdGFydCgpIExaU3RhcnQxNgogOCAgcGFzY2FsICAgQ29weUxaRmlsZSh3b3JkIHdvcmQpIENvcHlMWkZpbGUxNgogOSAgcGFzY2FsMTYgTFpEb25lKCkgTFpEb25lCi0xMCBwYXNjYWwxNiBHZXRFeHBhbmRlZE5hbWUocHRyIHB0cikgR2V0RXhwYW5kZWROYW1lMTYKKzEwIHBhc2NhbDE2IEdldEV4cGFuZGVkTmFtZShzdHIgcHRyKSBHZXRFeHBhbmRlZE5hbWUxNgogIzExIFdFUAogIzEyIF9fX0VYUE9SVEVEU1RVQiAKZGlmZiAtLWdpdCBhL2lmMTYzMi9vbGVzdnIuc3BlYyBiL2lmMTYzMi9vbGVzdnIuc3BlYwppbmRleCA5MjJkYTU0Li4zZWFjOTc3IDEwMDY0NAotLS0gYS9pZjE2MzIvb2xlc3ZyLnNwZWMKKysrIGIvaWYxNjMyL29sZXN2ci5zcGVjCkBAIC0yLDExICsyLDExIEBACiB0eXBlCXdpbjE2CiAKICMxIFdFUAotMiAgcGFzY2FsIE9sZVJlZ2lzdGVyU2VydmVyKHB0ciBwdHIgcHRyIHdvcmQgd29yZCkgT2xlUmVnaXN0ZXJTZXJ2ZXIKKzIgIHBhc2NhbCBPbGVSZWdpc3RlclNlcnZlcihzdHIgcHRyIHB0ciB3b3JkIHdvcmQpIE9sZVJlZ2lzdGVyU2VydmVyCiAzICBwYXNjYWwgT2xlUmV2b2tlU2VydmVyKGxvbmcpIE9sZVJldm9rZVNlcnZlcgogNCAgcGFzY2FsIE9sZUJsb2NrU2VydmVyKGxvbmcpIE9sZUJsb2NrU2VydmVyCiA1ICBwYXNjYWwgT2xlVW5ibG9ja1NlcnZlcihsb25nIHB0cikgT2xlVW5ibG9ja1NlcnZlcgotNiAgcGFzY2FsIE9sZVJlZ2lzdGVyU2VydmVyRG9jKGxvbmcgcHRyIHB0ciBwdHIpIE9sZVJlZ2lzdGVyU2VydmVyRG9jCis2ICBwYXNjYWwgT2xlUmVnaXN0ZXJTZXJ2ZXJEb2MobG9uZyBzdHIgcHRyIHB0cikgT2xlUmVnaXN0ZXJTZXJ2ZXJEb2MKIDcgIHBhc2NhbCBPbGVSZXZva2VTZXJ2ZXJEb2MobG9uZykgT2xlUmV2b2tlU2VydmVyRG9jCiA4IHN0dWIgT0xFUkVOQU1FU0VSVkVSRE9DCiA5IHN0dWIgT0xFUkVWRVJUU0VSVkVSRE9DCmRpZmYgLS1naXQgYS9pZjE2MzIvcmVsYXkuYyBiL2lmMTYzMi9yZWxheS5jCmluZGV4IDdmNDc4ZjEuLjY0MmYwZTcgMTAwNjQ0Ci0tLSBhL2lmMTYzMi9yZWxheS5jCisrKyBiL2lmMTYzMi9yZWxheS5jCkBAIC04Miw2ICs4Miw3IEBACiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSAnbCc6CiAgICAgICAgIGNhc2UgJ3AnOgorICAgICAgICBjYXNlICd0JzoKICAgICAgICAgICAgIGFyZ3MxNiArPSA0OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTEwMCw2ICsxMDEsMTQgQEAKICAgICAgICAgICAgIGFyZ3MxNiAtPSA0OwogICAgICAgICAgICAgcHJpbnRmKCAiMHglMDh4IiwgKihpbnQgKilhcmdzMTYgKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICd0JzoKKyAgICAgICAgICAgIGFyZ3MxNiAtPSA0OworICAgICAgICAgICAgaWYgKEhJV09SRCgqKGludCAqKWFyZ3MxNikpCisgICAgICAgICAgICAgICAgcHJpbnRmKCAiMHglMDh4IFwiJXNcIiIsICooaW50ICopYXJnczE2LAorICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKilQVFJfU0VHX1RPX0xJTigqKGludCAqKWFyZ3MxNikgKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwcmludGYoICIweCUwOHgiLCAqKGludCAqKWFyZ3MxNiApOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgJ3AnOgogICAgICAgICAgICAgYXJnczE2IC09IDQ7CiAgICAgICAgICAgICBwcmludGYoICIlMDR4OiUwNHgiLCAqKFdPUkQgKikoYXJnczE2KzIpLCAqKFdPUkQgKilhcmdzMTYgKTsKQEAgLTM4Niw2ICszOTUsNyBAQAogCURXT1JECWFyZ2NvbnZtYXNrID0gd2luX3N0YWNrWzFdOwogCUZBUlBST0MzMglwcm9jMzIgPSAoRkFSUFJPQzMyKXdpbl9zdGFja1syXTsKIAlEV09SRAkqYXJncyxyZXQ7CisgICAgICAgIFNUQUNLMTZGUkFNRSBzdGYxNjsKIAlpbnQJaTsKIAogCWZwcmludGYoc3RkZXJyLCJDYWxsUHJvYzMyVyglbGQsJWxkLCVwLGFyZ3NbIixucm9mYXJncyxhcmdjb252bWFzayxwcm9jMzIpOwpAQCAtNDE5LDYgKzQyOSwxNiBAQAogCQlyZXQgPSAwOwogCQlicmVhazsKIAl9CisJLyogUE9QIG5yb2ZhcmdzIERXT1JEIGFyZ3VtZW50cyBhbmQgMyBEV09SRCBwYXJhbWV0ZXJzICovCisJLyogRklYTUU6IHRoaXMgaXMgYSBCQUQgaGFjaywgYnV0IEkgZG9uJ3Qgc2VlIGFueSBvdGhlciB3YXkgdG8KKwkgKiBwb3AgYSB2YXJpYWJsZSBudW1iZXIgb2YgYXJndW1lbnRzLiAgLU1NCisJICogVGhlIC0yIGluIHRoZSBzaXplIGlzIGZvciBub3QgY29weWluZyBXT1JEIGFyZ3NbMF0gKHdoaWNoIHdvdWxkCisJICogb3ZlcndyaXRlIHRoZSB0b3AgV09SRCBvbiB0aGUgcmV0dXJuIHN0YWNrKQorCSAqLworCW1lbWNweSgmc3RmMTYsQ1VSUkVOVF9TVEFDSzE2LHNpemVvZihzdGYxNiktMik7CisJSUYxNjMyX1NhdmVkMTZfc3AgKz0gKDMrbnJvZmFyZ3MpKnNpemVvZihEV09SRCk7CisJbWVtY3B5KENVUlJFTlRfU1RBQ0sxNiwmc3RmMTYsc2l6ZW9mKHN0ZjE2KS0yKTsKKwogCWZwcmludGYoc3RkZXJyLCJyZXR1cm5zICUwOGx4XG4iLHJldCk7CiAJZnJlZShhcmdzKTsKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvaWYxNjMyL3NoZWxsLnNwZWMgYi9pZjE2MzIvc2hlbGwuc3BlYwppbmRleCA3NGU5ZWYzLi4wMGVjMjBlIDEwMDY0NAotLS0gYS9pZjE2MzIvc2hlbGwuc3BlYworKysgYi9pZjE2MzIvc2hlbGwuc3BlYwpAQCAtMSwyMiArMSwyMiBAQAogbmFtZQlzaGVsbAogdHlwZQl3aW4xNgogCi0gIDEgcGFzY2FsICAgUmVnT3BlbktleShsb25nIHB0ciBwdHIpIFJlZ09wZW5LZXkxNgotICAyIHBhc2NhbCAgIFJlZ0NyZWF0ZUtleShsb25nIHB0ciBwdHIpIFJlZ0NyZWF0ZUtleTE2CisgIDEgcGFzY2FsICAgUmVnT3BlbktleShsb25nIHN0ciBwdHIpIFJlZ09wZW5LZXkxNgorICAyIHBhc2NhbCAgIFJlZ0NyZWF0ZUtleShsb25nIHN0ciBwdHIpIFJlZ0NyZWF0ZUtleTE2CiAgIDMgcGFzY2FsICAgUmVnQ2xvc2VLZXkobG9uZykgUmVnQ2xvc2VLZXkKLSAgNCBwYXNjYWwgICBSZWdEZWxldGVLZXkobG9uZyBwdHIpIFJlZ0RlbGV0ZUtleTE2Ci0gIDUgcGFzY2FsICAgUmVnU2V0VmFsdWUobG9uZyBwdHIgbG9uZyBwdHIgbG9uZykgUmVnU2V0VmFsdWUxNgotICA2IHBhc2NhbCAgIFJlZ1F1ZXJ5VmFsdWUobG9uZyBwdHIgcHRyIHB0cikgUmVnUXVlcnlWYWx1ZTE2CisgIDQgcGFzY2FsICAgUmVnRGVsZXRlS2V5KGxvbmcgc3RyKSBSZWdEZWxldGVLZXkxNgorICA1IHBhc2NhbCAgIFJlZ1NldFZhbHVlKGxvbmcgc3RyIGxvbmcgc3RyIGxvbmcpIFJlZ1NldFZhbHVlMTYKKyAgNiBwYXNjYWwgICBSZWdRdWVyeVZhbHVlKGxvbmcgc3RyIHB0ciBwdHIpIFJlZ1F1ZXJ5VmFsdWUxNgogICA3IHBhc2NhbCAgIFJlZ0VudW1LZXkobG9uZyBsb25nIHB0ciBsb25nKSBSZWdFbnVtS2V5MTYKICAgOSBwYXNjYWwxNiBEcmFnQWNjZXB0RmlsZXMod29yZCB3b3JkKSBEcmFnQWNjZXB0RmlsZXMKICAxMSBwYXNjYWwxNiBEcmFnUXVlcnlGaWxlKHdvcmQgc193b3JkIHB0ciBzX3dvcmQpIERyYWdRdWVyeUZpbGUKICAxMiBwYXNjYWwxNiBEcmFnRmluaXNoKHdvcmQpIERyYWdGaW5pc2gKICAxMyBwYXNjYWwxNiBEcmFnUXVlcnlQb2ludCh3b3JkIHB0cikgRHJhZ1F1ZXJ5UG9pbnQKLSAyMCBwYXNjYWwxNiBTaGVsbEV4ZWN1dGUod29yZCBwdHIgcHRyIHB0ciBwdHIgc193b3JkKSBTaGVsbEV4ZWN1dGUxNgotIDIxIHBhc2NhbDE2IEZpbmRFeGVjdXRhYmxlKHB0ciBwdHIgcHRyKSBGaW5kRXhlY3V0YWJsZTE2CisgMjAgcGFzY2FsMTYgU2hlbGxFeGVjdXRlKHdvcmQgc3RyIHN0ciBzdHIgc3RyIHNfd29yZCkgU2hlbGxFeGVjdXRlMTYKKyAyMSBwYXNjYWwxNiBGaW5kRXhlY3V0YWJsZShzdHIgc3RyIHB0cikgRmluZEV4ZWN1dGFibGUxNgogIDIyIHBhc2NhbDE2IFNoZWxsQWJvdXQod29yZCBwdHIgcHRyIHdvcmQpIFNoZWxsQWJvdXQxNgogIDMzIHBhc2NhbDE2IEFib3V0RGxnUHJvYyh3b3JkIHdvcmQgd29yZCBsb25nKSBBYm91dERsZ1Byb2MxNgotIDM0IHBhc2NhbDE2IEV4dHJhY3RJY29uKHdvcmQgcHRyIHNfd29yZCkgRXh0cmFjdEljb24xNgorIDM0IHBhc2NhbDE2IEV4dHJhY3RJY29uKHdvcmQgc3RyIHNfd29yZCkgRXh0cmFjdEljb24xNgogIDM2IHBhc2NhbDE2IEV4dHJhY3RBc3NvY2lhdGVkSWNvbih3b3JkIHB0ciBwdHIpIEV4dHJhY3RBc3NvY2lhdGVkSWNvbgogIDM3IHBhc2NhbCAgIERvRW52aXJvbm1lbnRTdWJzdChwdHIgd29yZCkgRG9FbnZpcm9ubWVudFN1YnN0CiAgMzggcGFzY2FsICAgRmluZEVudmlyb25tZW50U3RyaW5nKHB0cikgRmluZEVudmlyb25tZW50U3RyaW5nCmRpZmYgLS1naXQgYS9pZjE2MzIvdXNlci5zcGVjIGIvaWYxNjMyL3VzZXIuc3BlYwppbmRleCBmZTBjNGY3Li4yOTc3ZjRhIDEwMDY0NAotLS0gYS9pZjE2MzIvdXNlci5zcGVjCisrKyBiL2lmMTYzMi91c2VyLnNwZWMKQEAgLTIsNyArMiw3IEBACiB0eXBlCXdpbjE2CiBoZWFwCTY1NTIwCiAKLTEgICBwYXNjYWwxNiBNZXNzYWdlQm94KHdvcmQgcHRyIHB0ciB3b3JkKSBNZXNzYWdlQm94MTYKKzEgICBwYXNjYWwxNiBNZXNzYWdlQm94KHdvcmQgc3RyIHN0ciB3b3JkKSBNZXNzYWdlQm94MTYKIDIgICBzdHViIE9sZEV4aXRXaW5kb3dzCiAzICAgc3R1YiBFbmFibGVPRU1MYXllcgogNCAgIHN0dWIgRGlzYWJsZU9FTUxheWVyCkBAIC00MCw3ICs0MCw3IEBACiAzOCAgcGFzY2FsMTYgR2V0V2luZG93VGV4dExlbmd0aCh3b3JkKSBHZXRXaW5kb3dUZXh0TGVuZ3RoMTYKIDM5ICBwYXNjYWwxNiBCZWdpblBhaW50KHdvcmQgcHRyKSBCZWdpblBhaW50MTYKIDQwICBwYXNjYWwxNiBFbmRQYWludCh3b3JkIHB0cikgRW5kUGFpbnQxNgotNDEgIHBhc2NhbDE2IENyZWF0ZVdpbmRvdyhwdHIgcHRyIGxvbmcgc193b3JkIHNfd29yZCBzX3dvcmQgc193b3JkCis0MSAgcGFzY2FsMTYgQ3JlYXRlV2luZG93KHN0ciBzdHIgbG9uZyBzX3dvcmQgc193b3JkIHNfd29yZCBzX3dvcmQKIAkgICAgICAgICAgICAgICAgICB3b3JkIHdvcmQgd29yZCBzZWdwdHIpIENyZWF0ZVdpbmRvdzE2CiA0MiAgcGFzY2FsMTYgU2hvd1dpbmRvdyh3b3JkIHdvcmQpIFNob3dXaW5kb3cxNgogNDMgIHBhc2NhbDE2IENsb3NlV2luZG93KHdvcmQpIENsb3NlV2luZG93MTYKQEAgLTUwLDcgKzUwLDcgQEAKIDQ3ICBwYXNjYWwxNiBJc1dpbmRvdyh3b3JkKSBJc1dpbmRvdzE2CiA0OCAgcGFzY2FsMTYgSXNDaGlsZCh3b3JkIHdvcmQpIElzQ2hpbGQxNgogNDkgIHBhc2NhbDE2IElzV2luZG93VmlzaWJsZSh3b3JkKSBJc1dpbmRvd1Zpc2libGUxNgotNTAgIHBhc2NhbDE2IEZpbmRXaW5kb3coc2VncHRyIHB0cikgRmluZFdpbmRvdzE2Cis1MCAgcGFzY2FsMTYgRmluZFdpbmRvdyhzZWdwdHIgc3RyKSBGaW5kV2luZG93MTYKICM1MSBCRUFSNTEKIDUyICBwYXNjYWwxNiBBbnlQb3B1cCgpIEFueVBvcHVwMTYKIDUzICBwYXNjYWwxNiBEZXN0cm95V2luZG93KHdvcmQpIERlc3Ryb3lXaW5kb3cxNgpAQCAtMTcwLDcgKzE3MCw3IEBACiAxNjggcGFzY2FsMTYgU2V0Q2FyZXRCbGlua1RpbWUod29yZCkgU2V0Q2FyZXRCbGlua1RpbWUxNgogMTY5IHBhc2NhbDE2IEdldENhcmV0QmxpbmtUaW1lKCkgR2V0Q2FyZXRCbGlua1RpbWUxNgogMTcwIHBhc2NhbDE2IEFycmFuZ2VJY29uaWNXaW5kb3dzKHdvcmQpIEFycmFuZ2VJY29uaWNXaW5kb3dzMTYKLTE3MSBwYXNjYWwxNiBXaW5IZWxwKHdvcmQgcHRyIHdvcmQgbG9uZykgV2luSGVscDE2CisxNzEgcGFzY2FsMTYgV2luSGVscCh3b3JkIHN0ciB3b3JkIGxvbmcpIFdpbkhlbHAxNgogMTcyIHBhc2NhbDE2IFN3aXRjaFRvVGhpc1dpbmRvdyh3b3JkIHdvcmQpIFN3aXRjaFRvVGhpc1dpbmRvdzE2CiAxNzMgcGFzY2FsMTYgTG9hZEN1cnNvcih3b3JkIHNlZ3B0cikgTG9hZEN1cnNvcjE2CiAxNzQgcGFzY2FsMTYgTG9hZEljb24od29yZCBzZWdwdHIpIExvYWRJY29uMTYKQEAgLTIwMCw3ICsyMDAsNyBAQAogMTk3IHBhc2NhbCAgIEdldFRhYmJlZFRleHRFeHRlbnQod29yZCBwdHIgd29yZCB3b3JkIHB0cikgR2V0VGFiYmVkVGV4dEV4dGVudDE2CiAxOTggcGFzY2FsMTYgQ2FzY2FkZUNoaWxkV2luZG93cyh3b3JkIHdvcmQpIENhc2NhZGVDaGlsZFdpbmRvd3MKIDE5OSBwYXNjYWwxNiBUaWxlQ2hpbGRXaW5kb3dzKHdvcmQgd29yZCkgVGlsZUNoaWxkV2luZG93cwotMjAwIHBhc2NhbDE2IE9wZW5Db21tKHB0ciB3b3JkIHdvcmQpIE9wZW5Db21tCisyMDAgcGFzY2FsMTYgT3BlbkNvbW0oc3RyIHdvcmQgd29yZCkgT3BlbkNvbW0KIDIwMSBwYXNjYWwxNiBTZXRDb21tU3RhdGUocHRyKSBTZXRDb21tU3RhdGUxNgogMjAyIHBhc2NhbDE2IEdldENvbW1TdGF0ZSh3b3JkIHB0cikgR2V0Q29tbVN0YXRlMTYKIDIwMyBwYXNjYWwxNiBHZXRDb21tRXJyb3Iod29yZCBwdHIpIEdldENvbW1FcnJvcgpAQCAtMjU0LDcgKzI1NCw3IEBACiAyNDkgcGFzY2FsMTYgR2V0QXN5bmNLZXlTdGF0ZSh3b3JkKSBHZXRBc3luY0tleVN0YXRlMTYKIDI1MCBwYXNjYWwxNiBHZXRNZW51U3RhdGUod29yZCB3b3JkIHdvcmQpIEdldE1lbnVTdGF0ZTE2CiAyNTEgcGFzY2FsICAgU2VuZERyaXZlck1lc3NhZ2Uod29yZCB3b3JkIGxvbmcgbG9uZykgU2VuZERyaXZlck1lc3NhZ2UKLTI1MiBwYXNjYWwxNiBPcGVuRHJpdmVyKHB0ciBwdHIgbG9uZykgT3BlbkRyaXZlcgorMjUyIHBhc2NhbDE2IE9wZW5Ecml2ZXIoc3RyIHN0ciBsb25nKSBPcGVuRHJpdmVyCiAyNTMgcGFzY2FsICAgQ2xvc2VEcml2ZXIod29yZCBsb25nIGxvbmcpIENsb3NlRHJpdmVyCiAyNTQgcGFzY2FsMTYgR2V0RHJpdmVyTW9kdWxlSGFuZGxlKHdvcmQpIEdldERyaXZlck1vZHVsZUhhbmRsZQogMjU1IHBhc2NhbCAgIERlZkRyaXZlclByb2MobG9uZyB3b3JkIHdvcmQgbG9uZyBsb25nKSBEZWZEcml2ZXJQcm9jCkBAIC0zNzcsMTUgKzM3NywxNSBAQAogNDI3IHBhc2NhbDE2IEZpbmRXaW5kb3dFeCh3b3JkIHdvcmQgc2VncHRyIHB0cikgRmluZFdpbmRvd0V4MTYKIDQyOCBzdHViIFRpbGVXaW5kb3dzCiA0Mjkgc3R1YiBDYXNjYWRlV2luZG93cwotNDMwIHBhc2NhbDE2IGxzdHJjbXAocHRyIHB0cikgbHN0cmNtcDE2Cis0MzAgcGFzY2FsMTYgbHN0cmNtcChzdHIgc3RyKSBsc3RyY21wMTYKIDQzMSBwYXNjYWwgICBBbnNpVXBwZXIoc2VncHRyKSBBbnNpVXBwZXIxNgogNDMyIHBhc2NhbCAgIEFuc2lMb3dlcihzZWdwdHIpIEFuc2lMb3dlcjE2CiA0MzMgcGFzY2FsMTYgSXNDaGFyQWxwaGEoYnl0ZSkgSXNDaGFyQWxwaGExNgogNDM0IHBhc2NhbDE2IElzQ2hhckFscGhhbnVtZXJpYyhieXRlKSBJc0NoYXJBbHBoYW51bWVyaWMxNgogNDM1IHBhc2NhbDE2IElzQ2hhclVwcGVyKGJ5dGUpIElzQ2hhclVwcGVyMTYKIDQzNiBwYXNjYWwxNiBJc0NoYXJMb3dlcihieXRlKSBJc0NoYXJMb3dlcjE2Ci00MzcgcGFzY2FsMTYgQW5zaVVwcGVyQnVmZihwdHIgd29yZCkgQW5zaVVwcGVyQnVmZjE2Ci00MzggcGFzY2FsMTYgQW5zaUxvd2VyQnVmZihwdHIgd29yZCkgQW5zaUxvd2VyQnVmZjE2Cis0MzcgcGFzY2FsMTYgQW5zaVVwcGVyQnVmZihzdHIgd29yZCkgQW5zaVVwcGVyQnVmZjE2Cis0MzggcGFzY2FsMTYgQW5zaUxvd2VyQnVmZihzdHIgd29yZCkgQW5zaUxvd2VyQnVmZjE2CiA0NDEgc3R1YiBJbnNlcnRNZW51SXRlbQogNDQzIHN0dWIgR2V0TWVudUl0ZW1JbmZvCiA0NDUgcGFzY2FsICAgRGVmRnJhbWVQcm9jKHdvcmQgd29yZCB3b3JkIHdvcmQgbG9uZykgRGVmRnJhbWVQcm9jMTYKQEAgLTM5NSw3ICszOTUsNyBAQAogNDQ5IHN0dWIgRHJhd1N0YXRlCiA0NTAgc3R1YiBDcmVhdGVJY29uRnJvbVJlc291cmNlRXgKIDQ1MSBwYXNjYWwxNiBUcmFuc2xhdGVNRElTeXNBY2NlbCh3b3JkIHB0cikgVHJhbnNsYXRlTURJU3lzQWNjZWwxNgotNDUyIHBhc2NhbDE2IENyZWF0ZVdpbmRvd0V4KGxvbmcgcHRyIHB0ciBsb25nIHNfd29yZCBzX3dvcmQgc193b3JkIHNfd29yZAorNDUyIHBhc2NhbDE2IENyZWF0ZVdpbmRvd0V4KGxvbmcgc3RyIHN0ciBsb25nIHNfd29yZCBzX3dvcmQgc193b3JkIHNfd29yZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmQgd29yZCB3b3JkIHNlZ3B0cikgQ3JlYXRlV2luZG93RXgxNgogNDU0IHBhc2NhbDE2IEFkanVzdFdpbmRvd1JlY3RFeChwdHIgbG9uZyB3b3JkIGxvbmcpIEFkanVzdFdpbmRvd1JlY3RFeDE2CiA0NTUgcGFzY2FsMTYgR2V0SWNvbklEKHdvcmQgbG9uZykgR2V0SWNvbklECkBAIC00MTEsNyArNDExLDcgQEAKIDQ2NSBwYXNjYWwxNiBEcmFnRGV0ZWN0KHdvcmQgbG9uZykgRHJhZ0RldGVjdDE2CiA0NjYgcGFzY2FsMTYgRHJhd0ZvY3VzUmVjdCh3b3JkIHB0cikgRHJhd0ZvY3VzUmVjdDE2CiA0NzAgc3R1YiBTdHJpbmdGdW5jCi00NzEgcGFzY2FsMTYgbHN0cmNtcGkocHRyIHB0cikgbHN0cmNtcGkxNgorNDcxIHBhc2NhbDE2IGxzdHJjbXBpKHN0ciBzdHIpIGxzdHJjbXBpMTYKIDQ3MiBwYXNjYWwgICBBbnNpTmV4dChzZWdwdHIpIEFuc2lOZXh0MTYKIDQ3MyBwYXNjYWwgICBBbnNpUHJldihzZWdwdHIgc2VncHRyKSBBbnNpUHJldjE2CiA0NzUgcGFzY2FsMTYgU2V0U2Nyb2xsSW5mbyh3b3JkIHNfd29yZCBwdHIgd29yZCkgU2V0U2Nyb2xsSW5mbzE2CmRpZmYgLS1naXQgYS9pZjE2MzIvdXNlcjMyLnNwZWMgYi9pZjE2MzIvdXNlcjMyLnNwZWMKaW5kZXggZmY3ZGQxYS4uMDI1NmNiMCAxMDA2NDQKLS0tIGEvaWYxNjMyL3VzZXIzMi5zcGVjCisrKyBiL2lmMTYzMi91c2VyMzIuc3BlYwpAQCAtMTQwLDcgKzE0MCw3IEBACiAwMTMzIHN0ZGNhbGwgRGVzdHJveU1lbnUobG9uZykgRGVzdHJveU1lbnUzMgogMDEzNCBzdGRjYWxsIERlc3Ryb3lXaW5kb3cobG9uZykgRGVzdHJveVdpbmRvdzMyCiAwMTM1IHN0ZGNhbGwgRGlhbG9nQm94SW5kaXJlY3RQYXJhbUEobG9uZyBwdHIgbG9uZyBwdHIgbG9uZykgRGlhbG9nQm94SW5kaXJlY3RQYXJhbTMyQQotMDEzNiBzdHViIERpYWxvZ0JveEluZGlyZWN0UGFyYW1Bb3JXCiswMTM2IHN0ZGNhbGwgRGlhbG9nQm94SW5kaXJlY3RQYXJhbUFvclcobG9uZyBwdHIgbG9uZyBwdHIgbG9uZykgRGlhbG9nQm94SW5kaXJlY3RQYXJhbTMyQQogMDEzNyBzdGRjYWxsIERpYWxvZ0JveEluZGlyZWN0UGFyYW1XKGxvbmcgcHRyIGxvbmcgcHRyIGxvbmcpIERpYWxvZ0JveEluZGlyZWN0UGFyYW0zMlcKIDAxMzggc3RkY2FsbCBEaWFsb2dCb3hQYXJhbUEobG9uZyBwdHIgbG9uZyBwdHIgbG9uZykgRGlhbG9nQm94UGFyYW0zMkEKIDAxMzkgc3RkY2FsbCBEaWFsb2dCb3hQYXJhbVcobG9uZyBwdHIgbG9uZyBwdHIgbG9uZykgRGlhbG9nQm94UGFyYW0zMlcKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29tbWRsZy5oIGIvaW5jbHVkZS9jb21tZGxnLmgKaW5kZXggNGU4NTU2MS4uNjFhYzA2ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jb21tZGxnLmgKKysrIGIvaW5jbHVkZS9jb21tZGxnLmgKQEAgLTQzLDYgKzQzLDkgQEAKICNkZWZpbmUgT0ZOX05PUkVBRE9OTFlSRVRVUk4gICAgICAgICAweDAwMDA4MDAwCiAjZGVmaW5lIE9GTl9OT1RFU1RGSUxFQ1JFQVRFICAgICAgICAgMHgwMDAxMDAwMAogCisjZGVmaW5lIE9GTl9VTklDT0RFCQkgICAgIDB4NDAwMDAwMDAJLyp0byBkaWZmZXIgYmV0d2VlbiAzMlcvQSBob29rKi8KKyNkZWZpbmUgT0ZOX1dJTkUzMgkJICAgICAweDgwMDAwMDAwCS8qIGNvbWRsZzMyICovCisKICNkZWZpbmUgT0ZOX1NIQVJFRkFMTFRIUk9VR0ggICAgIDIKICNkZWZpbmUgT0ZOX1NIQVJFTk9XQVJOICAgICAgICAgIDEKICNkZWZpbmUgT0ZOX1NIQVJFV0FSTiAgICAgICAgICAgIDAKQEAgLTY4LDkgKzcxLDU2IEBACiAJTFBBUkFNIAkJbEN1c3REYXRhOwogICAgICAgICBXTkRQUk9DMTYgICAgICAgbHBmbkhvb2s7CiAJU0VHUFRSIAkJbHBUZW1wbGF0ZU5hbWU7Ci0JfSAgIE9QRU5GSUxFTkFNRTsKLXR5cGVkZWYgT1BFTkZJTEVOQU1FICogTFBPUEVORklMRU5BTUU7Cit9ICAgT1BFTkZJTEVOQU1FMTYsKkxQT1BFTkZJTEVOQU1FMTY7CiAKK3R5cGVkZWYgc3RydWN0IHsKKwlEV09SRAkJbFN0cnVjdFNpemU7CisJSFdORDMyCQlod25kT3duZXI7CisJSElOU1RBTkNFMzIJaEluc3RhbmNlOworCUxQQ1NUUgkJbHBzdHJGaWx0ZXI7CisJTFBTVFIJCWxwc3RyQ3VzdG9tRmlsdGVyOworCURXT1JECQluTWF4Q3VzdEZpbHRlcjsKKwlEV09SRAkJbkZpbHRlckluZGV4OworCUxQU1RSCQlscHN0ckZpbGU7CisJRFdPUkQJCW5NYXhGaWxlOworCUxQU1RSCQlscHN0ckZpbGVUaXRsZTsKKwlEV09SRAkJbk1heEZpbGVUaXRsZTsKKwlMUENTVFIJCWxwc3RySW5pdGlhbERpcjsKKwlMUENTVFIJCWxwc3RyVGl0bGU7CisJRFdPUkQJCUZsYWdzOworCVdPUkQJCW5GaWxlT2Zmc2V0OworCVdPUkQJCW5GaWxlRXh0ZW5zaW9uOworCUxQQ1NUUgkJbHBzdHJEZWZFeHQ7CisJTFBBUkFNCQlsQ3VzdERhdGE7CisJV05EUFJPQzMyCWxwZm5Ib29rOworCUxQQ1NUUgkJbHBUZW1wbGF0ZU5hbWU7Cit9IE9QRU5GSUxFTkFNRTMyQSwqTFBPUEVORklMRU5BTUUzMkE7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlEV09SRAkJbFN0cnVjdFNpemU7CisJSFdORDMyCQlod25kT3duZXI7CisJSElOU1RBTkNFMzIJaEluc3RhbmNlOworCUxQQ1dTVFIJCWxwc3RyRmlsdGVyOworCUxQV1NUUgkJbHBzdHJDdXN0b21GaWx0ZXI7CisJRFdPUkQJCW5NYXhDdXN0RmlsdGVyOworCURXT1JECQluRmlsdGVySW5kZXg7CisJTFBXU1RSCQlscHN0ckZpbGU7CisJRFdPUkQJCW5NYXhGaWxlOworCUxQV1NUUgkJbHBzdHJGaWxlVGl0bGU7CisJRFdPUkQJCW5NYXhGaWxlVGl0bGU7CisJTFBDV1NUUgkJbHBzdHJJbml0aWFsRGlyOworCUxQQ1dTVFIJCWxwc3RyVGl0bGU7CisJRFdPUkQJCUZsYWdzOworCVdPUkQJCW5GaWxlT2Zmc2V0OworCVdPUkQJCW5GaWxlRXh0ZW5zaW9uOworCUxQQ1dTVFIJCWxwc3RyRGVmRXh0OworCUxQQVJBTQkJbEN1c3REYXRhOworCVdORFBST0MzMglscGZuSG9vazsKKwlMUENXU1RSCQlscFRlbXBsYXRlTmFtZTsKK30gT1BFTkZJTEVOQU1FMzJXLCpMUE9QRU5GSUxFTkFNRTMyVzsKKworREVDTF9XSU5FTElCX1RZUEVfQVcoT1BFTkZJTEVOQU1FKTsKK0RFQ0xfV0lORUxJQl9UWVBFX0FXKExQT1BFTkZJTEVOQU1FKTsKIAogdHlwZWRlZiBzdHJ1Y3QgewogCURXT1JECQlsU3RydWN0U2l6ZTsKQEAgLTgyLDcgKzEzMiw3IEBACiAJTFBBUkFNCQlsQ3VzdERhdGE7CiAgICAgICAgIFdORFBST0MxNiAgICAgICBscGZuSG9vazsKIAlTRUdQVFIgCQlscFRlbXBsYXRlTmFtZTsKLQl9IENIT09TRUNPTE9SOworfSBDSE9PU0VDT0xPUjsKIHR5cGVkZWYgQ0hPT1NFQ09MT1IgKkxQQ0hPT1NFQ09MT1I7CiAKICNkZWZpbmUgQ0NfUkdCSU5JVCAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKQEAgLTI3OCw5ICszMjgsMTggQEAKIEJPT0wxNiAgQ2hvb3NlQ29sb3IoTFBDSE9PU0VDT0xPUiBscENoQ29sKTsKIERXT1JEIENvbW1EbGdFeHRlbmRlZEVycm9yKHZvaWQpOwogSFdORDE2IEZpbmRUZXh0KCBTRUdQVFIgZmluZCk7Ci1zaG9ydCBHZXRGaWxlVGl0bGUoTFBDU1RSIGxwRmlsZSwgTFBTVFIgbHBUaXRsZSwgVUlOVDE2IGNiQnVmKTsKLUJPT0wxNiAgR2V0T3BlbkZpbGVOYW1lKFNFR1BUUiBvZm4pOwotQk9PTDE2ICBHZXRTYXZlRmlsZU5hbWUoU0VHUFRSIG9mbik7CitJTlQxNiBHZXRGaWxlVGl0bGUxNihMUENTVFIgbHBGaWxlLCBMUFNUUiBscFRpdGxlLCBVSU5UMTYgY2JCdWYpOworSU5UMTYgR2V0RmlsZVRpdGxlMzJBKExQQ1NUUiBscEZpbGUsIExQU1RSIGxwVGl0bGUsIFVJTlQzMiBjYkJ1Zik7CitJTlQxNiBHZXRGaWxlVGl0bGUzMlcoTFBDV1NUUiBscEZpbGUsIExQV1NUUiBscFRpdGxlLCBVSU5UMzIgY2JCdWYpOworI2RlZmluZSBHZXRGaWxlVGl0bGUgV0lORUxJQl9OQU1FX0FXKEdldEZpbGVUaXRsZSkKK0JPT0wxNiAgR2V0T3BlbkZpbGVOYW1lMTYoU0VHUFRSIG9mbik7CitCT09MMzIgIEdldE9wZW5GaWxlTmFtZTMyQShMUE9QRU5GSUxFTkFNRTMyQSBvZm4pOworQk9PTDMyICBHZXRPcGVuRmlsZU5hbWUzMlcoTFBPUEVORklMRU5BTUUzMlcgb2ZuKTsKKyNkZWZpbmUgR2V0T3BlbkZpbGVOYW1lIFdJTkVMSUJfTkFNRV9BVyhHZXRPcGVuRmlsZU5hbWUpCitCT09MMTYgIEdldFNhdmVGaWxlTmFtZTE2KFNFR1BUUiBvZm4pOworQk9PTDMyICBHZXRTYXZlRmlsZU5hbWUzMkEoTFBPUEVORklMRU5BTUUzMkEgb2ZuKTsKK0JPT0wzMiAgR2V0U2F2ZUZpbGVOYW1lMzJXKExQT1BFTkZJTEVOQU1FMzJXIG9mbik7CisjZGVmaW5lIEdldFNhdmVGaWxlTmFtZSBXSU5FTElCX05BTUVfQVcoR2V0U2F2ZUZpbGVOYW1lKQogQk9PTDE2ICBQcmludERsZyggU0VHUFRSIHByaW50KTsKIEhXTkQxNiBSZXBsYWNlVGV4dCggU0VHUFRSIGZpbmQpOwogQk9PTDE2ICBDaG9vc2VGb250KExQQ0hPT1NFRk9OVCBscENoRm9udCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL21tc3lzdGVtLmggYi9pbmNsdWRlL21tc3lzdGVtLmgKaW5kZXggMjljYjhlYS4uMjk0MWI0YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tbXN5c3RlbS5oCisrKyBiL2luY2x1ZGUvbW1zeXN0ZW0uaApAQCAtMTcxLDcgKzE3MSw4IEBACiAgICAgRFdPUkQgICAgICAgZHdVc2VyOyAgICAgICAgICAgICAgICAgLyogZm9yIGNsaWVudCdzIHVzZSAqLwogICAgIERXT1JEICAgICAgIGR3RmxhZ3M7ICAgICAgICAgICAgICAgIC8qIGFzc29ydGVkIGZsYWdzIChzZWUgZGVmaW5lcykgKi8KICAgICBEV09SRCAgICAgICBkd0xvb3BzOyAgICAgICAgICAgICAgICAvKiBsb29wIGNvbnRyb2wgY291bnRlciAqLwotICAgIHN0cnVjdCB3YXZlaGRyX3RhZyAqbHBOZXh0OyAgICAgICAgIC8qIHJlc2VydmVkIGZvciBkcml2ZXIgKi8KKy8qICAgIHN0cnVjdCB3YXZlaGRyX3RhZyAqbHBOZXh0OyovICAgICAgICAgCisgICAgU0VHUFRSICAgICAgbHAxNk5leHQ7ICAgICAgICAgICAgICAgLyogcmVzZXJ2ZWQgZm9yIGRyaXZlciAqLwogICAgIERXT1JEICAgICAgIHJlc2VydmVkOyAgICAgICAgICAgICAgIC8qIHJlc2VydmVkIGZvciBkcml2ZXIgKi8KIH0gV0FWRUhEUiwgKkxQV0FWRUhEUjsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS93aW5kb3dzLmggYi9pbmNsdWRlL3dpbmRvd3MuaAppbmRleCBkYzNhNDk0Li5mZTAwOTg0IDEwMDY0NAotLS0gYS9pbmNsdWRlL3dpbmRvd3MuaAorKysgYi9pbmNsdWRlL3dpbmRvd3MuaApAQCAtNTEyMiw3ICs1MTIyLDcgQEAKIFdPUkQgICAgICAgU2V0SG9va0ZsYWdzKEhEQzE2LFdPUkQpOwogSE1FVEFGSUxFMTYgU2V0TWV0YUZpbGVCaXRzKEhHTE9CQUwxNik7CiBWT0lEICAgICAgIFNldFByaW9yaXR5KEhUQVNLMTYsSU5UMTYpOwotRkFSUFJPQzE2ICBTZXRSZXNvdXJjZUhhbmRsZXIoSElOU1RBTkNFMTYsTFBTVFIsRkFSUFJPQzE2KTsKK0ZBUlBST0MxNiAgU2V0UmVzb3VyY2VIYW5kbGVyKEhJTlNUQU5DRTE2LFNFR1BUUixGQVJQUk9DMTYpOwogV09SRCAgICAgICBTZXRTZWxlY3RvckJhc2UoV09SRCxEV09SRCk7CiBXT1JEICAgICAgIFNldFNlbGVjdG9yTGltaXQoV09SRCxEV09SRCk7CiBMT05HICAgICAgIFNldFN3YXBBcmVhU2l6ZShXT1JEKTsKQEAgLTY5NDksNyArNjk0OSw3IEBACiBCT09MMzIgICAgIFJlbW92ZURpcmVjdG9yeTMyQShMUENTVFIpOwogQk9PTDMyICAgICBSZW1vdmVEaXJlY3RvcnkzMlcoTFBDV1NUUik7CiAjZGVmaW5lICAgIFJlbW92ZURpcmVjdG9yeSBXSU5FTElCX05BTUVfQVcoUmVtb3ZlRGlyZWN0b3J5KQotQk9PTDE2ICAgICBSZW1vdmVGb250UmVzb3VyY2UxNihMUENTVFIpOworQk9PTDE2ICAgICBSZW1vdmVGb250UmVzb3VyY2UxNihTRUdQVFIpOwogQk9PTDMyICAgICBSZW1vdmVGb250UmVzb3VyY2UzMkEoTFBDU1RSKTsKIEJPT0wzMiAgICAgUmVtb3ZlRm9udFJlc291cmNlMzJXKExQQ1dTVFIpOwogI2RlZmluZSAgICBSZW1vdmVGb250UmVzb3VyY2UgV0lORUxJQl9OQU1FX0FXKFJlbW92ZUZvbnRSZXNvdXJjZSkKQEAgLTc0MTMsMTEgKzc0MTMsMTEgQEAKIEJPT0wzMiAgICAgV3JpdGVQcm9maWxlU3RyaW5nMzJBKExQQ1NUUixMUENTVFIsTFBDU1RSKTsKIEJPT0wzMiAgICAgV3JpdGVQcm9maWxlU3RyaW5nMzJXKExQQ1dTVFIsTFBDV1NUUixMUENXU1RSKTsKICNkZWZpbmUgICAgV3JpdGVQcm9maWxlU3RyaW5nIFdJTkVMSUJfTkFNRV9BVyhXcml0ZVByb2ZpbGVTdHJpbmcpCi1TRUdQVFIgICAgIGxzdHJjYXQxNihTRUdQVFIsU0VHUFRSKTsKK1NFR1BUUiAgICAgbHN0cmNhdDE2KFNFR1BUUixMUENTVFIpOwogTFBTVFIgICAgICBsc3RyY2F0MzJBKExQU1RSLExQQ1NUUik7CiBMUFdTVFIgICAgIGxzdHJjYXQzMlcoTFBXU1RSLExQQ1dTVFIpOwogI2RlZmluZSAgICBsc3RyY2F0IFdJTkVMSUJfTkFNRV9BVyhsc3RyY2F0KQotU0VHUFRSICAgICBsc3RyY2F0bjE2KFNFR1BUUixTRUdQVFIsSU5UMTYpOworU0VHUFRSICAgICBsc3RyY2F0bjE2KFNFR1BUUixMUENTVFIsSU5UMTYpOwogTFBTVFIgICAgICBsc3RyY2F0bjMyQShMUFNUUixMUENTVFIsSU5UMzIpOwogTFBXU1RSICAgICBsc3RyY2F0bjMyVyhMUFdTVFIsTFBDV1NUUixJTlQzMik7CiAjZGVmaW5lICAgIGxzdHJjYXRuIFdJTkVMSUJfTkFNRV9BVyhsc3RyY2F0bikKQEAgLTc0MjksMTEgKzc0MjksMTEgQEAKIElOVDMyICAgICAgbHN0cmNtcGkzMkEoTFBDU1RSLExQQ1NUUik7CiBJTlQzMiAgICAgIGxzdHJjbXBpMzJXKExQQ1dTVFIsTFBDV1NUUik7CiAjZGVmaW5lICAgIGxzdHJjbXBpIFdJTkVMSUJfTkFNRV9BVyhsc3RyY21waSkKLVNFR1BUUiAgICAgbHN0cmNweTE2KFNFR1BUUixTRUdQVFIpOworU0VHUFRSICAgICBsc3RyY3B5MTYoU0VHUFRSLExQQ1NUUik7CiBMUFNUUiAgICAgIGxzdHJjcHkzMkEoTFBTVFIsTFBDU1RSKTsKIExQV1NUUiAgICAgbHN0cmNweTMyVyhMUFdTVFIsTFBDV1NUUik7CiAjZGVmaW5lICAgIGxzdHJjcHkgV0lORUxJQl9OQU1FX0FXKGxzdHJjcHkpCi1TRUdQVFIgICAgIGxzdHJjcHluMTYoU0VHUFRSLFNFR1BUUixJTlQxNik7CitTRUdQVFIgICAgIGxzdHJjcHluMTYoU0VHUFRSLExQQ1NUUixJTlQxNik7CiBMUFNUUiAgICAgIGxzdHJjcHluMzJBKExQU1RSLExQQ1NUUixJTlQzMik7CiBMUFdTVFIgICAgIGxzdHJjcHluMzJXKExQV1NUUixMUENXU1RSLElOVDMyKTsKICNkZWZpbmUgICAgbHN0cmNweW4gV0lORUxJQl9OQU1FX0FXKGxzdHJjcHluKQpkaWZmIC0tZ2l0IGEvbG9hZGVyL3Jlc291cmNlLmMgYi9sb2FkZXIvcmVzb3VyY2UuYwppbmRleCAzN2RjOWMxLi5hNTY5ODUwIDEwMDY0NAotLS0gYS9sb2FkZXIvcmVzb3VyY2UuYworKysgYi9sb2FkZXIvcmVzb3VyY2UuYwpAQCAtNzQ4LDEyICs3NDgsMTQgQEAKICAqCVNldFJlc291cmNlSGFuZGxlcgkoS0VSTkVMLjQzKQogICovCiBGQVJQUk9DMTYKLVNldFJlc291cmNlSGFuZGxlcihISU5TVEFOQ0UxNiBpbnN0YW5jZSxMUFNUUiBzLEZBUlBST0MxNiBmYXJwcm9jKQorU2V0UmVzb3VyY2VIYW5kbGVyKEhJTlNUQU5DRTE2IGluc3RhbmNlLFNFR1BUUiBzLEZBUlBST0MxNiBmYXJwcm9jKQogewogICAgIGlmIChISVdPUkQocykpCi0JZnByaW50ZihzdGRlcnIsIlNldFJlc291cmNlSGFuZGxlciglMDR4LCVzLCVwKSwgZW1wdHkgU1RVQiFcbiIsaW5zdGFuY2UscyxmYXJwcm9jKTsKKwlmcHJpbnRmKHN0ZGVyciwiU2V0UmVzb3VyY2VIYW5kbGVyKCUwNHgsJXMsJXApLCBlbXB0eSBTVFVCIVxuIiwKKwkJaW5zdGFuY2UsKGNoYXIqKVBUUl9TRUdfVE9fTElOKHMpLGZhcnByb2MpOwogICAgIGVsc2UKLQlmcHJpbnRmKHN0ZGVyciwiU2V0UmVzb3VyY2VIYW5kbGVyKCUwNHgsMHglMDR4LCVwKSwgZW1wdHkgU1RVQiFcbiIsaW5zdGFuY2UsTE9XT1JEKHMpLGZhcnByb2MpOworCWZwcmludGYoc3RkZXJyLCJTZXRSZXNvdXJjZUhhbmRsZXIoJTA0eCwweCUwNHgsJXApLCBlbXB0eSBTVFVCIVxuIiwKKwkJaW5zdGFuY2UsTE9XT1JEKHMpLGZhcnByb2MpOwogICAgIHJldHVybiBOVUxMOwogfQogCmRpZmYgLS1naXQgYS9tZW1vcnkvc3RyaW5nLmMgYi9tZW1vcnkvc3RyaW5nLmMKaW5kZXggNGRmMGQwMC4uMDViZWFlMSAxMDA2NDQKLS0tIGEvbWVtb3J5L3N0cmluZy5jCisrKyBiL21lbW9yeS9zdHJpbmcuYwpAQCAtNjQsOSArNjQsOSBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgbHN0cmNhdDE2ICAgKEtFUk5FTC44OSkKICAqLwotU0VHUFRSIGxzdHJjYXQxNiggU0VHUFRSIGRzdCwgU0VHUFRSIHNyYyApCitTRUdQVFIgbHN0cmNhdDE2KCBTRUdQVFIgZHN0LCBMUENTVFIgc3JjICkKIHsKLSAgICBsc3RyY2F0MzJBKCAoTFBTVFIpUFRSX1NFR19UT19MSU4oZHN0KSwgKExQQ1NUUilQVFJfU0VHX1RPX0xJTihzcmMpICk7CisgICAgbHN0cmNhdDMyQSggKExQU1RSKVBUUl9TRUdfVE9fTElOKGRzdCksIHNyYyApOwogICAgIHJldHVybiBkc3Q7CiB9CiAKQEAgLTk4LDkgKzk4LDkgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIGxzdHJjYXRuMTYgICAoS0VSTkVMLjM1MikKICAqLwotU0VHUFRSIGxzdHJjYXRuMTYoIFNFR1BUUiBkc3QsIFNFR1BUUiBzcmMsIElOVDE2IG4gKQorU0VHUFRSIGxzdHJjYXRuMTYoIFNFR1BUUiBkc3QsIExQQ1NUUiBzcmMsIElOVDE2IG4gKQogewotICAgIGxzdHJjYXRuMzJBKCAoTFBTVFIpUFRSX1NFR19UT19MSU4oZHN0KSwgKExQQ1NUUilQVFJfU0VHX1RPX0xJTihzcmMpLCBuICk7CisgICAgbHN0cmNhdG4zMkEoIChMUFNUUilQVFJfU0VHX1RPX0xJTihkc3QpLCBzcmMsIG4gKTsKICAgICByZXR1cm4gZHN0OwogfQogCkBAIC0yMTIsOSArMjEyLDkgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIGxzdHJjcHkxNiAgIChLRVJORUwuODgpCiAgKi8KLVNFR1BUUiBsc3RyY3B5MTYoIFNFR1BUUiBkc3QsIFNFR1BUUiBzcmMgKQorU0VHUFRSIGxzdHJjcHkxNiggU0VHUFRSIGRzdCwgTFBDU1RSIHNyYyApCiB7Ci0gICAgbHN0cmNweTMyQSggKExQU1RSKVBUUl9TRUdfVE9fTElOKGRzdCksIChMUENTVFIpUFRSX1NFR19UT19MSU4oc3JjKSApOworICAgIGxzdHJjcHkzMkEoIChMUFNUUilQVFJfU0VHX1RPX0xJTihkc3QpLCBzcmMgKTsKICAgICByZXR1cm4gZHN0OwogfQogCkBAIC0yNDYsOSArMjQ2LDkgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgIGxzdHJjcHluMTYgICAoS0VSTkVMLjM1MykKICAqLwotU0VHUFRSIGxzdHJjcHluMTYoIFNFR1BUUiBkc3QsIFNFR1BUUiBzcmMsIElOVDE2IG4gKQorU0VHUFRSIGxzdHJjcHluMTYoIFNFR1BUUiBkc3QsIExQQ1NUUiBzcmMsIElOVDE2IG4gKQogewotICAgIGxzdHJjcHluMzJBKCAoTFBTVFIpUFRSX1NFR19UT19MSU4oZHN0KSwgKExQQ1NUUilQVFJfU0VHX1RPX0xJTihzcmMpLCBuICk7CisgICAgbHN0cmNweW4zMkEoIChMUFNUUilQVFJfU0VHX1RPX0xJTihkc3QpLCBzcmMsIG4gKTsKICAgICByZXR1cm4gZHN0OwogfQogCmRpZmYgLS1naXQgYS9taXNjL2NvbW0uYyBiL21pc2MvY29tbS5jCmluZGV4IDk1NzIwNzAuLmRmNWI3YzQgMTAwNjQ0Ci0tLSBhL21pc2MvY29tbS5jCisrKyBiL21pc2MvY29tbS5jCkBAIC0yMiwxMCArMjIsOSBAQAogI2luY2x1ZGUgPGN0eXBlLmg+CiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNpZiBkZWZpbmVkKF9fTmV0QlNEX18pIHx8IGRlZmluZWQoX19GcmVlQlNEX18pCi0jaW5jbHVkZSA8c3lzL2lvY3RsLmg+Ci0jZWxzZQotI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgPHN5cy9maWxpby5oPgogI2VuZGlmCisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAKICNpbmNsdWRlICJ3aW5kb3dzLmgiCkBAIC0zNiw2ICszNSwxMCBAQAogI2luY2x1ZGUgImRlYnVnLmgiCiAjaW5jbHVkZSAiaGFuZGxlMzIuaCIKIAorI2lmbmRlZiBUSU9DSU5RCisjZGVmaW5lCVRJT0NJTlEgRklPTlJFQUQKKyNlbmRpZgorCiAvKgogICogW1JFUl0gVGhlc2UgYXJlIGdsb2JhbHMgYXJlIHdyb25nLiAgVGhleSBzaG91bGQgYmUgaW4gRG9zRGV2aWNlU3RydWN0CiAgKiBvbiBhIHBlciBwb3J0IGJhc2lzLgpkaWZmIC0tZ2l0IGEvbWlzYy9jb21tZGxnLmMgYi9taXNjL2NvbW1kbGcuYwppbmRleCAyZjA1M2RhLi40YTRhZjBiIDEwMDY0NAotLS0gYS9taXNjL2NvbW1kbGcuYworKysgYi9taXNjL2NvbW1kbGcuYwpAQCAtNTYsNDQgKzU2LDcxIEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBHZXRPcGVuRmlsZU5hbWUgICAoQ09NTURMRy4xKQogICovCi1CT09MMTYgR2V0T3BlbkZpbGVOYW1lKCBTRUdQVFIgb2ZuICkKK0JPT0wxNiBHZXRPcGVuRmlsZU5hbWUxNiggU0VHUFRSIG9mbiApCiB7CiAgICAgSElOU1RBTkNFMTYgaEluc3Q7Ci0gICAgSEFORExFMTYgaERsZ1RtcGwgPSAwLCBoUmVzSW5mbzsKKyAgICBIQU5ETEUzMiBoRGxnVG1wbCA9IDAsIGhSZXNJbmZvOwogICAgIEJPT0wzMiBiUmV0ID0gRkFMU0UsIHdpbjMyRm9ybWF0ID0gRkFMU0U7CiAgICAgSFdORDMyIGh3bmREaWFsb2c7Ci0gICAgTFBPUEVORklMRU5BTUUgbHBvZm4gPSAoTFBPUEVORklMRU5BTUUpUFRSX1NFR19UT19MSU4ob2ZuKTsKKyAgICBMUE9QRU5GSUxFTkFNRTE2IGxwb2ZuID0gKExQT1BFTkZJTEVOQU1FMTYpUFRSX1NFR19UT19MSU4ob2ZuKTsKICAgICBMUENWT0lEIHRlbXBsYXRlOwogCiAgICAgaWYgKCFscG9mbiB8fCAhRmlsZURsZ19Jbml0KCkpIHJldHVybiBGQUxTRTsKIAotICAgIGlmIChscG9mbi0+RmxhZ3MgJiBPRk5fRU5BQkxFVEVNUExBVEVIQU5ETEUpCi0gICAgewotICAgICAgICBpZiAoISh0ZW1wbGF0ZSA9IExvY2tSZXNvdXJjZTE2KCBscG9mbi0+aEluc3RhbmNlICkpKQotICAgICAgICB7Ci0gICAgICAgICAgICBDb21tRGxnTGFzdEVycm9yID0gQ0RFUlJfTE9BRFJFU0ZBSUxVUkU7Ci0gICAgICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAobHBvZm4tPkZsYWdzICYgT0ZOX0VOQUJMRVRFTVBMQVRFKQotICAgIHsKLSAgICAgICAgaWYgKCEoaFJlc0luZm8gPSBGaW5kUmVzb3VyY2UxNihscG9mbi0+aEluc3RhbmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxwb2ZuLT5scFRlbXBsYXRlTmFtZSwgUlRfRElBTE9HKSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENvbW1EbGdMYXN0RXJyb3IgPSBDREVSUl9GSU5EUkVTRkFJTFVSRTsKLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIShoRGxnVG1wbCA9IExvYWRSZXNvdXJjZTE2KCBscG9mbi0+aEluc3RhbmNlLCBoUmVzSW5mbyApKSB8fAotICAgICAgICAgICAgISh0ZW1wbGF0ZSA9IExvY2tSZXNvdXJjZTE2KCBoRGxnVG1wbCApKSkKLSAgICAgICAgewotICAgICAgICAgICAgQ29tbURsZ0xhc3RFcnJvciA9IENERVJSX0xPQURSRVNGQUlMVVJFOwotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHRlbXBsYXRlID0gU1lTUkVTX0dldFJlc1B0ciggU1lTUkVTX0RJQUxPR19PUEVOX0ZJTEUgKTsKLSAgICAgICAgd2luMzJGb3JtYXQgPSBUUlVFOworICAgIGlmIChscG9mbi0+RmxhZ3MgJiBPRk5fV0lORTMyKSB7CisJICAgIGlmIChscG9mbi0+RmxhZ3MgJiBPRk5fRU5BQkxFVEVNUExBVEVIQU5ETEUpCisJICAgIHsKKwkJaWYgKCEodGVtcGxhdGUgPSBMb2NrUmVzb3VyY2UzMiggbHBvZm4tPmhJbnN0YW5jZSApKSkKKwkJeworCQkgICAgQ29tbURsZ0xhc3RFcnJvciA9IENERVJSX0xPQURSRVNGQUlMVVJFOworCQkgICAgcmV0dXJuIEZBTFNFOworCQl9CisJICAgIH0KKwkgICAgZWxzZSBpZiAobHBvZm4tPkZsYWdzICYgT0ZOX0VOQUJMRVRFTVBMQVRFKQorCSAgICB7CisJCWlmICghKGhSZXNJbmZvID0gRmluZFJlc291cmNlMzJBKGxwb2ZuLT5oSW5zdGFuY2UsCisJCQkJCQlQVFJfU0VHX1RPX0xJTihscG9mbi0+bHBUZW1wbGF0ZU5hbWUpLCAoTFBTVFIpUlRfRElBTE9HKSkpCisJCXsKKwkJICAgIENvbW1EbGdMYXN0RXJyb3IgPSBDREVSUl9GSU5EUkVTRkFJTFVSRTsKKwkJICAgIHJldHVybiBGQUxTRTsKKwkJfQorCQlpZiAoIShoRGxnVG1wbCA9IExvYWRSZXNvdXJjZTMyKCBscG9mbi0+aEluc3RhbmNlLCBoUmVzSW5mbyApKSB8fAorCQkgICAgISh0ZW1wbGF0ZSA9IExvY2tSZXNvdXJjZTMyKCBoRGxnVG1wbCApKSkKKwkJeworCQkgICAgQ29tbURsZ0xhc3RFcnJvciA9IENERVJSX0xPQURSRVNGQUlMVVJFOworCQkgICAgcmV0dXJuIEZBTFNFOworCQl9CisJICAgIH0gZWxzZSB7CisJCXRlbXBsYXRlID0gU1lTUkVTX0dldFJlc1B0ciggU1lTUkVTX0RJQUxPR19PUEVOX0ZJTEUgKTsKKwkgICAgfQorCSAgICB3aW4zMkZvcm1hdCA9IFRSVUU7CisgICAgfSBlbHNlIHsKKwkgICAgaWYgKGxwb2ZuLT5GbGFncyAmIE9GTl9FTkFCTEVURU1QTEFURUhBTkRMRSkKKwkgICAgeworCQlpZiAoISh0ZW1wbGF0ZSA9IExvY2tSZXNvdXJjZTE2KCBscG9mbi0+aEluc3RhbmNlICkpKQorCQl7CisJCSAgICBDb21tRGxnTGFzdEVycm9yID0gQ0RFUlJfTE9BRFJFU0ZBSUxVUkU7CisJCSAgICByZXR1cm4gRkFMU0U7CisJCX0KKwkgICAgfQorCSAgICBlbHNlIGlmIChscG9mbi0+RmxhZ3MgJiBPRk5fRU5BQkxFVEVNUExBVEUpCisJICAgIHsKKwkJaWYgKCEoaFJlc0luZm8gPSBGaW5kUmVzb3VyY2UxNihscG9mbi0+aEluc3RhbmNlLAorCQkJCQkJbHBvZm4tPmxwVGVtcGxhdGVOYW1lLCBSVF9ESUFMT0cpKSkKKwkJeworCQkgICAgQ29tbURsZ0xhc3RFcnJvciA9IENERVJSX0ZJTkRSRVNGQUlMVVJFOworCQkgICAgcmV0dXJuIEZBTFNFOworCQl9CisJCWlmICghKGhEbGdUbXBsID0gTG9hZFJlc291cmNlMTYoIGxwb2ZuLT5oSW5zdGFuY2UsIGhSZXNJbmZvICkpIHx8CisJCSAgICAhKHRlbXBsYXRlID0gTG9ja1Jlc291cmNlMTYoIGhEbGdUbXBsICkpKQorCQl7CisJCSAgICBDb21tRGxnTGFzdEVycm9yID0gQ0RFUlJfTE9BRFJFU0ZBSUxVUkU7CisJCSAgICByZXR1cm4gRkFMU0U7CisJCX0KKwkgICAgfSBlbHNlIHsKKwkJdGVtcGxhdGUgPSBTWVNSRVNfR2V0UmVzUHRyKCBTWVNSRVNfRElBTE9HX09QRU5fRklMRSApOworCQl3aW4zMkZvcm1hdCA9IFRSVUU7CisJICAgIH0KICAgICB9CiAKICAgICBoSW5zdCA9IFdJTl9HZXRXaW5kb3dJbnN0YW5jZSggbHBvZm4tPmh3bmRPd25lciApOwpAQCAtMTAzLDcgKzEzMCwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mbiwgV0lOX1BST0NfMTYgKTsKICAgICBpZiAoaHduZERpYWxvZykgYlJldCA9IERJQUxPR19Eb0RpYWxvZ0JveCggaHduZERpYWxvZywgbHBvZm4tPmh3bmRPd25lciApOwogCi0gICAgaWYgKGhEbGdUbXBsKSBGcmVlUmVzb3VyY2UxNiggaERsZ1RtcGwgKTsKKyAgICBpZiAoaERsZ1RtcGwpIHsKKwkgICAgaWYgKGxwb2ZuLT5GbGFncyAmIE9GTl9XSU5FMzIpCisJCSAgICBGcmVlUmVzb3VyY2UzMiggaERsZ1RtcGwgKTsKKwkgICAgZWxzZQorCQkgICAgRnJlZVJlc291cmNlMTYoIGhEbGdUbXBsICk7CisgICAgfQogCiAgICAgZHByaW50Zl9jb21tZGxnKHN0ZGRlYiwiR2V0T3BlbkZpbGVOYW1lIC8vIHJldHVybiBscHN0ckZpbGU9JyVzJyAhXG4iLCAKICAgICAgICAgICAgKExQU1RSKVBUUl9TRUdfVE9fTElOKGxwb2ZuLT5scHN0ckZpbGUpKTsKQEAgLTExNCw0NSArMTQ2LDc0IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBHZXRTYXZlRmlsZU5hbWUgICAoQ09NTURMRy4yKQogICovCi1CT09MMTYgR2V0U2F2ZUZpbGVOYW1lKCBTRUdQVFIgb2ZuKQorQk9PTDE2IEdldFNhdmVGaWxlTmFtZTE2KCBTRUdQVFIgb2ZuKQogewogICAgIEhJTlNUQU5DRTE2IGhJbnN0OwotICAgIEhBTkRMRTE2IGhEbGdUbXBsID0gMDsKKyAgICBIQU5ETEUzMiBoRGxnVG1wbCA9IDA7CiAgICAgQk9PTDMyIGJSZXQgPSBGQUxTRSwgd2luMzJGb3JtYXQgPSBGQUxTRTsKLSAgICBMUE9QRU5GSUxFTkFNRSBscG9mbiA9IChMUE9QRU5GSUxFTkFNRSlQVFJfU0VHX1RPX0xJTihvZm4pOworICAgIExQT1BFTkZJTEVOQU1FMTYgbHBvZm4gPSAoTFBPUEVORklMRU5BTUUxNilQVFJfU0VHX1RPX0xJTihvZm4pOwogICAgIExQQ1ZPSUQgdGVtcGxhdGU7CiAgICAgSFdORDMyIGh3bmREaWFsb2c7CiAKICAgICBpZiAoIWxwb2ZuIHx8ICFGaWxlRGxnX0luaXQoKSkgcmV0dXJuIEZBTFNFOwogCi0gICAgaWYgKGxwb2ZuLT5GbGFncyAmIE9GTl9FTkFCTEVURU1QTEFURUhBTkRMRSkKLSAgICB7Ci0gICAgICAgIGlmICghKHRlbXBsYXRlID0gTG9ja1Jlc291cmNlMTYoIGxwb2ZuLT5oSW5zdGFuY2UgKSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENvbW1EbGdMYXN0RXJyb3IgPSBDREVSUl9MT0FEUkVTRkFJTFVSRTsKLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmIChscG9mbi0+RmxhZ3MgJiBPRk5fRU5BQkxFVEVNUExBVEUpCi0gICAgewotICAgICAgICBIQU5ETEUxNiBoUmVzSW5mbzsKLSAgICAgICAgaWYgKCEoaFJlc0luZm8gPSBGaW5kUmVzb3VyY2UxNihscG9mbi0+aEluc3RhbmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxwb2ZuLT5scFRlbXBsYXRlTmFtZSwgUlRfRElBTE9HKSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENvbW1EbGdMYXN0RXJyb3IgPSBDREVSUl9GSU5EUkVTRkFJTFVSRTsKLSAgICAgICAgICAgIHJldHVybiBGQUxTRTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIShoRGxnVG1wbCA9IExvYWRSZXNvdXJjZTE2KCBscG9mbi0+aEluc3RhbmNlLCBoUmVzSW5mbyApKSB8fAotICAgICAgICAgICAgISh0ZW1wbGF0ZSA9IExvY2tSZXNvdXJjZTE2KCBoRGxnVG1wbCApKSkKLSAgICAgICAgewotICAgICAgICAgICAgQ29tbURsZ0xhc3RFcnJvciA9IENERVJSX0xPQURSRVNGQUlMVVJFOwotICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHRlbXBsYXRlID0gU1lTUkVTX0dldFJlc1B0ciggU1lTUkVTX0RJQUxPR19TQVZFX0ZJTEUgKTsKLSAgICAgICAgd2luMzJGb3JtYXQgPSBUUlVFOworICAgIGlmIChscG9mbi0+RmxhZ3MgJiBPRk5fV0lORTMyKSB7CisJICAgIGlmIChscG9mbi0+RmxhZ3MgJiBPRk5fRU5BQkxFVEVNUExBVEVIQU5ETEUpCisJICAgIHsKKwkJaWYgKCEodGVtcGxhdGUgPSBMb2NrUmVzb3VyY2UzMiggbHBvZm4tPmhJbnN0YW5jZSApKSkKKwkJeworCQkgICAgQ29tbURsZ0xhc3RFcnJvciA9IENERVJSX0xPQURSRVNGQUlMVVJFOworCQkgICAgcmV0dXJuIEZBTFNFOworCQl9CisJICAgIH0KKwkgICAgZWxzZSBpZiAobHBvZm4tPkZsYWdzICYgT0ZOX0VOQUJMRVRFTVBMQVRFKQorCSAgICB7CisJCUhBTkRMRTMyIGhSZXNJbmZvOworCQlpZiAoIShoUmVzSW5mbyA9IEZpbmRSZXNvdXJjZTMyQShscG9mbi0+aEluc3RhbmNlLAorCQkJCQkJIFBUUl9TRUdfVE9fTElOKGxwb2ZuLT5scFRlbXBsYXRlTmFtZSksIChMUFNUUilSVF9ESUFMT0cpKSkKKwkJeworCQkgICAgQ29tbURsZ0xhc3RFcnJvciA9IENERVJSX0ZJTkRSRVNGQUlMVVJFOworCQkgICAgcmV0dXJuIEZBTFNFOworCQl9CisJCWlmICghKGhEbGdUbXBsID0gTG9hZFJlc291cmNlMzIobHBvZm4tPmhJbnN0YW5jZSxoUmVzSW5mbykpIHx8CisJCSAgICAhKHRlbXBsYXRlID0gTG9ja1Jlc291cmNlMzIoaERsZ1RtcGwpKSkKKwkJeworCQkgICAgQ29tbURsZ0xhc3RFcnJvciA9IENERVJSX0xPQURSRVNGQUlMVVJFOworCQkgICAgcmV0dXJuIEZBTFNFOworCQl9CisJCXdpbjMyRm9ybWF0PSBUUlVFOworCSAgICB9IGVsc2UgeworCQl0ZW1wbGF0ZSA9IFNZU1JFU19HZXRSZXNQdHIoIFNZU1JFU19ESUFMT0dfU0FWRV9GSUxFICk7CisJCXdpbjMyRm9ybWF0ID0gVFJVRTsKKwkgICAgfQorICAgIH0gZWxzZSB7CisJICAgIGlmIChscG9mbi0+RmxhZ3MgJiBPRk5fRU5BQkxFVEVNUExBVEVIQU5ETEUpCisJICAgIHsKKwkJaWYgKCEodGVtcGxhdGUgPSBMb2NrUmVzb3VyY2UxNiggbHBvZm4tPmhJbnN0YW5jZSApKSkKKwkJeworCQkgICAgQ29tbURsZ0xhc3RFcnJvciA9IENERVJSX0xPQURSRVNGQUlMVVJFOworCQkgICAgcmV0dXJuIEZBTFNFOworCQl9CisJICAgIH0KKwkgICAgZWxzZSBpZiAobHBvZm4tPkZsYWdzICYgT0ZOX0VOQUJMRVRFTVBMQVRFKQorCSAgICB7CisJCUhBTkRMRTE2IGhSZXNJbmZvOworCQlpZiAoIShoUmVzSW5mbyA9IEZpbmRSZXNvdXJjZTE2KGxwb2ZuLT5oSW5zdGFuY2UsCisJCQkJCQlscG9mbi0+bHBUZW1wbGF0ZU5hbWUsIFJUX0RJQUxPRykpKQorCQl7CisJCSAgICBDb21tRGxnTGFzdEVycm9yID0gQ0RFUlJfRklORFJFU0ZBSUxVUkU7CisJCSAgICByZXR1cm4gRkFMU0U7CisJCX0KKwkJaWYgKCEoaERsZ1RtcGwgPSBMb2FkUmVzb3VyY2UxNiggbHBvZm4tPmhJbnN0YW5jZSwgaFJlc0luZm8gKSkgfHwKKwkJICAgICEodGVtcGxhdGUgPSBMb2NrUmVzb3VyY2UxNiggaERsZ1RtcGwgKSkpCisJCXsKKwkJICAgIENvbW1EbGdMYXN0RXJyb3IgPSBDREVSUl9MT0FEUkVTRkFJTFVSRTsKKwkJICAgIHJldHVybiBGQUxTRTsKKwkJfQorCX0gZWxzZSB7CisJCXRlbXBsYXRlID0gU1lTUkVTX0dldFJlc1B0ciggU1lTUkVTX0RJQUxPR19TQVZFX0ZJTEUgKTsKKwkJd2luMzJGb3JtYXQgPSBUUlVFOworCX0KICAgICB9CiAKICAgICBoSW5zdCA9IFdJTl9HZXRXaW5kb3dJbnN0YW5jZSggbHBvZm4tPmh3bmRPd25lciApOwpAQCAtMTYzLDcgKzIyNCwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mbiwgV0lOX1BST0NfMTYgKTsKICAgICBpZiAoaHduZERpYWxvZykgYlJldCA9IERJQUxPR19Eb0RpYWxvZ0JveCggaHduZERpYWxvZywgbHBvZm4tPmh3bmRPd25lciApOwogCi0gICAgaWYgKGhEbGdUbXBsKSBGcmVlUmVzb3VyY2UxNiggaERsZ1RtcGwgKTsKKyAgICBpZiAoaERsZ1RtcGwpIHsKKwkgICAgaWYgKGxwb2ZuLT5GbGFncyAmIE9GTl9XSU5FMzIpCisJCSAgICBGcmVlUmVzb3VyY2UzMiggaERsZ1RtcGwgKTsKKwkgICAgZWxzZQorCQkgICAgRnJlZVJlc291cmNlMTYoIGhEbGdUbXBsICk7CisgICAgfQogCiAgICAgZHByaW50Zl9jb21tZGxnKHN0ZGRlYiwgIkdldFNhdmVGaWxlTmFtZSAvLyByZXR1cm4gbHBzdHJGaWxlPSclcycgIVxuIiwgCiAgICAgICAgICAgICAoTFBTVFIpUFRSX1NFR19UT19MSU4obHBvZm4tPmxwc3RyRmlsZSkpOwpAQCAtMzQyLDcgKzQwOCw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRURMR19Ib29rQ2FsbENoayAgICAgICAgICAgICBbaW50ZXJuYWxdCiAgKi8KLXN0YXRpYyBpbnQgRklMRURMR19Ib29rQ2FsbENoayhMUE9QRU5GSUxFTkFNRSBscG9mbikKK3N0YXRpYyBpbnQgRklMRURMR19Ib29rQ2FsbENoayhMUE9QRU5GSUxFTkFNRTE2IGxwb2ZuKQogewogIGlmIChscG9mbikKICAgaWYgKGxwb2ZuLT5GbGFncyAmIE9GTl9FTkFCTEVIT09LKQpAQCAtMzUxLDYgKzQxNywyNSBAQAogIHJldHVybiAwOyAgIAogfSAKIAorc3RhdGljIEJPT0wzMiBGSUxFRExHX0NhbGxXaW5kb3dQcm9jKExQT1BFTkZJTEVOQU1FMTYgbHBvZm4sSFdORDMyIGh3bmQsCisJVUlOVDMyIHdNc2csV1BBUkFNMzIgd1BhcmFtLExQQVJBTSBsUGFyYW0KKykgeworCWlmICghKGxwb2ZuLT5GbGFncyAmIE9GTl9XSU5FMzIpKQorCQlyZXR1cm4gKEJPT0wzMilDYWxsV2luZG93UHJvYzE2KAorCQkJbHBvZm4tPmxwZm5Ib29rLGh3bmQsKFVJTlQxNil3TXNnLChXUEFSQU0xNil3UGFyYW0sbFBhcmFtCisJCSk7CisJLyogfE9GTl9XSU5FMzIgKi8KKwlpZiAobHBvZm4tPkZsYWdzICYgT0ZOX1VOSUNPREUpCisJCXJldHVybiAoQk9PTDMyKUNhbGxXaW5kb3dQcm9jMzJXKAorCQkJKFdORFBST0MzMilscG9mbi0+bHBmbkhvb2ssaHduZCx3TXNnLHdQYXJhbSxsUGFyYW0KKwkJKTsKKwkvKiAhIHxPRk5fVU5JQ09ERSAqLworCXJldHVybiAoQk9PTDMyKUNhbGxXaW5kb3dQcm9jMzJBKAorCQkoV05EUFJPQzMyKWxwb2ZuLT5scGZuSG9vayxod25kLHdNc2csd1BhcmFtLGxQYXJhbQorCSk7CisKK30KKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEVETEdfV01Jbml0RGlhbG9nICAgICAgICAgICAgW2ludGVybmFsXQogICovCkBAIC0zNTgsMTEgKzQ0MywxMSBAQAogc3RhdGljIExPTkcgRklMRURMR19XTUluaXREaWFsb2coSFdORDE2IGhXbmQsIFdQQVJBTTE2IHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkgCiB7CiAgIGludCBpLCBuOwotICBMUE9QRU5GSUxFTkFNRSBscG9mbjsKKyAgTFBPUEVORklMRU5BTUUxNiBscG9mbjsKICAgY2hhciB0bXBzdHJbNTEyXTsKICAgTFBTVFIgcHN0cjsKICAgU2V0V2luZG93TG9uZzMyQShoV25kLCBEV0xfVVNFUiwgbFBhcmFtKTsKLSAgbHBvZm4gPSAoTFBPUEVORklMRU5BTUUpUFRSX1NFR19UT19MSU4obFBhcmFtKTsKKyAgbHBvZm4gPSAoTFBPUEVORklMRU5BTUUxNilQVFJfU0VHX1RPX0xJTihsUGFyYW0pOwogICBpZiAobHBvZm4tPmxwc3RyVGl0bGUpIFNldFdpbmRvd1RleHQxNiggaFduZCwgbHBvZm4tPmxwc3RyVGl0bGUgKTsKICAgLyogcmVhZCBjdXN0b20gZmlsdGVyIGluZm9ybWF0aW9uICovCiAgIGlmIChscG9mbi0+bHBzdHJDdXN0b21GaWx0ZXIpCkBAIC00MzMsOCArNTE4LDcgQEAKICAgaWYgKGxwb2ZuLT5GbGFncyAmIE9GTl9ISURFUkVBRE9OTFkpCiAgICAgU2hvd1dpbmRvdzMyKEdldERsZ0l0ZW0zMihoV25kLCBjaHgxKSwgU1dfSElERSk7IAogICBpZiAoRklMRURMR19Ib29rQ2FsbENoayhscG9mbikpCi0gICAgIHJldHVybiAoQk9PTDE2KUNhbGxXaW5kb3dQcm9jMTYobHBvZm4tPmxwZm5Ib29rLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoV25kLCAgV01fSU5JVERJQUxPRywgd1BhcmFtLCBsUGFyYW0gKTsKKyAgICAgcmV0dXJuIChCT09MMTYpRklMRURMR19DYWxsV2luZG93UHJvYyhscG9mbixoV25kLFdNX0lOSVRESUFMT0csd1BhcmFtLGxQYXJhbSApOwogICBlbHNlICAKICAgICAgcmV0dXJuIFRSVUU7CiB9CkBAIC00NDUsOCArNTI5LDggQEAKIHN0YXRpYyBMUkVTVUxUIEZJTEVETEdfV01Db21tYW5kKEhXTkQxNiBoV25kLCBXUEFSQU0xNiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pIAogewogICBMT05HIGxSZXQ7Ci0gIExQT1BFTkZJTEVOQU1FIGxwb2ZuOwotICBPUEVORklMRU5BTUUgb2ZuMjsKKyAgTFBPUEVORklMRU5BTUUxNiBscG9mbjsKKyAgT1BFTkZJTEVOQU1FMTYgb2ZuMjsKICAgY2hhciB0bXBzdHJbNTEyXSwgdG1wc3RyMls1MTJdOwogICBMUFNUUiBwc3RyLCBwc3RyMjsKICAgVUlOVDE2IGNvbnRyb2wsbm90aWZpY2F0aW9uOwpAQCAtNDU1LDcgKzUzOSw3IEBACiAgIGNvbnRyb2wgPSB3UGFyYW07CiAgIG5vdGlmaWNhdGlvbiA9IEhJV09SRChsUGFyYW0pOwogICAgIAotICBscG9mbiA9IChMUE9QRU5GSUxFTkFNRSlQVFJfU0VHX1RPX0xJTihHZXRXaW5kb3dMb25nMzJBKGhXbmQsIERXTF9VU0VSKSk7CisgIGxwb2ZuID0gKExQT1BFTkZJTEVOQU1FMTYpUFRSX1NFR19UT19MSU4oR2V0V2luZG93TG9uZzMyQShoV25kLCBEV0xfVVNFUikpOwogICBzd2l0Y2ggKGNvbnRyb2wpCiAgICAgewogICAgIGNhc2UgbHN0MTogLyogZmlsZSBsaXN0ICovCkBAIC00NzIsNyArNTU2LDcgQEAKICAgICAgICAgICBTRUdQVFJfRlJFRShwc3RyKTsKICAgICAgIH0KICAgICAgIGlmIChGSUxFRExHX0hvb2tDYWxsQ2hrKGxwb2ZuKSkKLSAgICAgICBDYWxsV2luZG93UHJvYzE2KGxwb2ZuLT5scGZuSG9vaywgaFduZCwKKyAgICAgICBGSUxFRExHX0NhbGxXaW5kb3dQcm9jKGxwb2ZuLGhXbmQsCiAgICAgICAgICAgICAgICAgICBSZWdpc3RlcldpbmRvd01lc3NhZ2UzMkEoIExCU0VMQ0hTVFJJTkcgKSwKICAgICAgICAgICAgICAgICAgIGNvbnRyb2wsIE1BS0VMT05HKGxSZXQsQ0RfTEJTRUxDSEFOR0UpKTsgICAgICAgCiAgICAgICAvKiBGSVhNRTogZm9yIE9GTl9BTExPV01VTFRJU0VMRUNUIHdlIG5lZWQgQ0RfTEJTRUxTVUIsIENEX1NFTEFERCwgQ0RfTEJTRUxOT0lURU1TICovICAgICAgICAgICAgICAgICAgCkBAIC02MTAsNyArNjk0LDcgQEAKIAl9CiAgICAgICBpZiAoRklMRURMR19Ib29rQ2FsbENoayhscG9mbikpCiAgICAgICB7Ci0gICAgICAgbFJldD0gKEJPT0wxNilDYWxsV2luZG93UHJvYzE2KGxwb2ZuLT5scGZuSG9vaywKKyAgICAgICBsUmV0PSAoQk9PTDE2KUZJTEVETEdfQ2FsbFdpbmRvd1Byb2MobHBvZm4sCiAgICAgICAgICAgICAgICBoV25kLCBSZWdpc3RlcldpbmRvd01lc3NhZ2UzMkEoIEZJTEVPS1NUUklORyApLCAwLCBsUGFyYW0gKTsKICAgICAgICBpZiAobFJldCkgICAgICAgCiAgICAgICAgewpAQCAtNjM2LDEyICs3MjAsMTIgQEAKICAqLwogTFJFU1VMVCBGaWxlT3BlbkRsZ1Byb2MoSFdORDE2IGhXbmQsIFVJTlQxNiB3TXNnLCBXUEFSQU0xNiB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCiB7ICAKLSBMUE9QRU5GSUxFTkFNRSBscG9mbiA9IChMUE9QRU5GSUxFTkFNRSlQVFJfU0VHX1RPX0xJTihHZXRXaW5kb3dMb25nMzJBKGhXbmQsIERXTF9VU0VSKSk7CisgTFBPUEVORklMRU5BTUUxNiBscG9mbiA9IChMUE9QRU5GSUxFTkFNRTE2KVBUUl9TRUdfVE9fTElOKEdldFdpbmRvd0xvbmczMkEoaFduZCwgRFdMX1VTRVIpKTsKICAKICBpZiAod01zZyE9V01fSU5JVERJQUxPRykKICAgaWYgKEZJTEVETEdfSG9va0NhbGxDaGsobHBvZm4pKQogICB7Ci0gICBMUkVTVUxUICBsUmV0PShCT09MMTYpQ2FsbFdpbmRvd1Byb2MxNihscG9mbi0+bHBmbkhvb2ssIGhXbmQsIHdNc2csIHdQYXJhbSwgbFBhcmFtKTsKKyAgIExSRVNVTFQgIGxSZXQ9KEJPT0wxNilGSUxFRExHX0NhbGxXaW5kb3dQcm9jKGxwb2ZuLGhXbmQsd01zZyx3UGFyYW0sbFBhcmFtKTsKICAgIGlmIChsUmV0KSAgIAogICAgIHJldHVybiBsUmV0OyAgICAgICAgIC8qIGVsc2UgY29udGludWUgbWVzc2FnZSBwcm9jZXNzaW5nICovCiAgIH0gICAgICAgICAgICAgCkBAIC02NzksMTIgKzc2MywxMiBAQAogICovCiBMUkVTVUxUIEZpbGVTYXZlRGxnUHJvYyhIV05EMTYgaFduZCwgVUlOVDE2IHdNc2csIFdQQVJBTTE2IHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKIHsKLSBMUE9QRU5GSUxFTkFNRSBscG9mbiA9IChMUE9QRU5GSUxFTkFNRSlQVFJfU0VHX1RPX0xJTihHZXRXaW5kb3dMb25nMzJBKGhXbmQsIERXTF9VU0VSKSk7CisgTFBPUEVORklMRU5BTUUxNiBscG9mbiA9IChMUE9QRU5GSUxFTkFNRTE2KVBUUl9TRUdfVE9fTElOKEdldFdpbmRvd0xvbmczMkEoaFduZCwgRFdMX1VTRVIpKTsKICAKICBpZiAod01zZyE9V01fSU5JVERJQUxPRykKICAgaWYgKEZJTEVETEdfSG9va0NhbGxDaGsobHBvZm4pKQogICB7Ci0gICBMUkVTVUxUICBsUmV0PShCT09MMTYpQ2FsbFdpbmRvd1Byb2MxNihscG9mbi0+bHBmbkhvb2ssIGhXbmQsIHdNc2csIHdQYXJhbSwgbFBhcmFtKTsKKyAgIExSRVNVTFQgIGxSZXQ9KEJPT0wxNilGSUxFRExHX0NhbGxXaW5kb3dQcm9jKGxwb2ZuLGhXbmQsd01zZyx3UGFyYW0sbFBhcmFtKTsKICAgIGlmIChsUmV0KSAgIAogICAgIHJldHVybiBsUmV0OyAgICAgICAgIC8qIGVsc2UgY29udGludWUgbWVzc2FnZSBwcm9jZXNzaW5nICovCiAgIH0gICAgICAgICAgICAgCkBAIC0xMDg5LDExICsxMTczLDEwIEBACiAgIHJldHVybiBDb21tRGxnTGFzdEVycm9yOwogfQogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgIEdldEZpbGVUaXRsZSAgIChDT01NRExHLjI3KQorICogICAgICAgICAgIEdldEZpbGVUaXRsZUEgICAoQ09NRExHMzIuOCkKICAqLwotc2hvcnQgR2V0RmlsZVRpdGxlKExQQ1NUUiBscEZpbGUsIExQU1RSIGxwVGl0bGUsIFVJTlQxNiBjYkJ1ZikKK3Nob3J0IEdldEZpbGVUaXRsZTMyQShMUENTVFIgbHBGaWxlLCBMUFNUUiBscFRpdGxlLCBVSU5UMzIgY2JCdWYpCiB7CiAgICAgaW50IGksIGxlbjsKICAgICBkcHJpbnRmX2NvbW1kbGcoc3RkZGViLCJHZXRGaWxlVGl0bGUoJXAgJXAgJWQpOyBcbiIsIGxwRmlsZSwgbHBUaXRsZSwgY2JCdWYpOwpAQCAtMTEyNCw2ICsxMjA3LDMwIEBACiB9CiAKIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgR2V0RmlsZVRpdGxlQSAgIChDT01ETEczMi44KQorICovCitzaG9ydCBHZXRGaWxlVGl0bGUzMlcoTFBDV1NUUiBscEZpbGUsIExQV1NUUiBscFRpdGxlLCBVSU5UMzIgY2JCdWYpCit7CisJTFBTVFIgZmlsZSA9IEhFQVBfc3RyZHVwV3RvQShHZXRQcm9jZXNzSGVhcCgpLDAsbHBGaWxlKTsKKwlMUFNUUiB0aXRsZSA9IEhlYXBBbGxvYyhHZXRQcm9jZXNzSGVhcCgpLDAsY2JCdWYpOworCXNob3J0CXJldDsKKworCXJldCA9IEdldEZpbGVUaXRsZTMyQShmaWxlLHRpdGxlLGNiQnVmKTsKKworCWxzdHJjcHluQXRvVyhscFRpdGxlLHRpdGxlLGNiQnVmKTsKKwlIZWFwRnJlZShHZXRQcm9jZXNzSGVhcCgpLDAsZmlsZSk7CisJSGVhcEZyZWUoR2V0UHJvY2Vzc0hlYXAoKSwwLHRpdGxlKTsKKwlyZXR1cm4gcmV0OworfQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgR2V0RmlsZVRpdGxlICAgKENPTU1ETEcuMjcpCisgKi8KK3Nob3J0IEdldEZpbGVUaXRsZTE2KExQQ1NUUiBscEZpbGUsIExQU1RSIGxwVGl0bGUsIFVJTlQxNiBjYkJ1ZikgeworICAgIHJldHVybiBHZXRGaWxlVGl0bGUzMkEobHBGaWxlLGxwVGl0bGUsY2JCdWYpOworfQorCisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDaG9vc2UgQ29sb3IgRGlhbG9nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTI4NzMsMyArMjk4MCwxODMgQEAKICAgICB9CiAgIHJldHVybiBGQUxTRTsKIH0KKworCisjZGVmaW5lIEdFVF9YWFhfRklMRU5BTUUoeHh4KSAJCQkJCQlcCitCT09MMzIgeHh4IyMzMkEoIExQT1BFTkZJTEVOQU1FMzJBIG9mbiApCQkJCVwKK3sJCQkJCQkJCQlcCisJQk9PTDE2IHJldDsJCQkJCQkJXAorCUxQT1BFTkZJTEVOQU1FMTYgb2ZuMTYgPSBTRUdQVFJfQUxMT0Moc2l6ZW9mKE9QRU5GSUxFTkFNRTE2KSk7CVwKKwkJCQkJCQkJCVwKKwltZW1zZXQob2ZuMTYsJ1wwJyxzaXplb2YoKm9mbjE2KSk7CQkJCVwKKwlvZm4xNi0+bFN0cnVjdFNpemUgPSBzaXplb2YoKm9mbjE2KTsJCQkJXAorCW9mbjE2LT5od25kT3duZXIgPSBvZm4tPmh3bmRPd25lcjsJCQkJXAorCW9mbjE2LT5oSW5zdGFuY2UgPSBvZm4tPmhJbnN0YW5jZTsJCQkJXAorCWlmIChvZm4tPmxwc3RyRmlsdGVyKSB7CQkJCQkJXAorCQlMUFNUUglzLHg7CQkJCQkJXAorCQkJCQkJCQkJXAorCQkvKiBmaWx0ZXIgaXMgYSBsaXN0Li4uICB0aXRsZVwwZXh0XDAuLi4uLi5cMFwwICovCVwKKwkJcyA9IChMUFNUUilvZm4tPmxwc3RyRmlsdGVyOwkJCQlcCisJCXdoaWxlICgqcykJCQkJCQlcCisJCQlzID0gcytzdHJsZW4ocykrMTsJCQkJXAorCQlzKys7CQkJCQkJCVwKKwkJeCA9IChMUFNUUilTRUdQVFJfQUxMT0Mocy1vZm4tPmxwc3RyRmlsdGVyKTsJCVwKKwkJbWVtY3B5KHgsb2ZuLT5scHN0ckZpbHRlcixzLW9mbi0+bHBzdHJGaWx0ZXIpOwkJXAorCQlvZm4xNi0+bHBzdHJGaWx0ZXIgPSBTRUdQVFJfR0VUKHgpOwkJCVwKKwl9CQkJCQkJCQlcCisJaWYgKG9mbi0+bHBzdHJDdXN0b21GaWx0ZXIpIHsJCQkJCVwKKwkJTFBTVFIJcyx4OwkJCQkJCVwKKwkJCQkJCQkJCVwKKwkJLyogZmlsdGVyIGlzIGEgbGlzdC4uLiAgdGl0bGVcMGV4dFwwLi4uLi4uXDBcMCAqLwlcCisJCXMgPSAoTFBTVFIpb2ZuLT5scHN0ckN1c3RvbUZpbHRlcjsJCQlcCisJCXdoaWxlICgqcykJCQkJCQlcCisJCQlzID0gcytzdHJsZW4ocykrMTsJCQkJXAorCQl4ID0gU0VHUFRSX0FMTE9DKHMtb2ZuLT5scHN0ckN1c3RvbUZpbHRlcik7CQlcCisJCXMrKzsJCQkJCQkJXAorCQltZW1jcHkoeCxvZm4tPmxwc3RyQ3VzdG9tRmlsdGVyLHMtb2ZuLT5scHN0ckN1c3RvbUZpbHRlcik7XAorCQlvZm4xNi0+bHBzdHJDdXN0b21GaWx0ZXIgPSBTRUdQVFJfR0VUKHgpOwkJXAorCX0JCQkJCQkJCVwKKwlvZm4xNi0+bk1heEN1c3RGaWx0ZXIgPSBvZm4tPm5NYXhDdXN0RmlsdGVyOwkJCVwKKwlvZm4xNi0+bkZpbHRlckluZGV4ID0gb2ZuLT5uRmlsdGVySW5kZXg7CQkJXAorCW9mbjE2LT5scHN0ckZpbGUgPSBTRUdQVFJfR0VUKFNFR1BUUl9BTExPQyhvZm4tPm5NYXhGaWxlKSk7CVwKKwlvZm4xNi0+bk1heEZpbGUgPSBvZm4tPm5NYXhGaWxlOwkJCQlcCisJaWYgKG9mbi0+bHBzdHJGaWxlVGl0bGUpCQkJCQlcCisJCW9mbjE2LT5scHN0ckZpbGVUaXRsZT0gU0VHUFRSX0dFVChTRUdQVFJfU1RSRFVQKG9mbi0+bHBzdHJGaWxlVGl0bGUpKTtcCisJb2ZuMTYtPm5NYXhGaWxlVGl0bGUgPSBvZm4tPm5NYXhGaWxlVGl0bGU7CQkJXAorCWlmIChvZm4tPmxwc3RySW5pdGlhbERpcikJCQkJCVwKKwkJb2ZuMTYtPmxwc3RySW5pdGlhbERpciA9IFNFR1BUUl9HRVQoU0VHUFRSX1NUUkRVUChvZm4tPmxwc3RySW5pdGlhbERpcikpO1wKKwlpZiAob2ZuLT5scHN0clRpdGxlKQkJCQkJCVwKKwkJb2ZuMTYtPmxwc3RyVGl0bGUgPSBTRUdQVFJfR0VUKFNFR1BUUl9TVFJEVVAob2ZuLT5scHN0clRpdGxlKSk7XAorCW9mbjE2LT5GbGFncyA9IG9mbi0+RmxhZ3N8T0ZOX1dJTkUzMjsJCQkJXAorCW9mbjE2LT5uRmlsZU9mZnNldCA9IG9mbi0+bkZpbGVPZmZzZXQ7CQkJCVwKKwlvZm4xNi0+bkZpbGVFeHRlbnNpb24gPSBvZm4tPm5GaWxlRXh0ZW5zaW9uOwkJCVwKKwlpZiAob2ZuLT5scHN0ckRlZkV4dCkJCQkJCQlcCisJCW9mbjE2LT5scHN0ckRlZkV4dCA9IFNFR1BUUl9HRVQoU0VHUFRSX1NUUkRVUChvZm4tPmxwc3RyRGVmRXh0KSk7XAorCW9mbjE2LT5sQ3VzdERhdGEgPSBvZm4tPmxDdXN0RGF0YTsJCQkJXAorCW9mbjE2LT5scGZuSG9vayA9IChXTkRQUk9DMTYpb2ZuLT5scGZuSG9vazsJCQlcCisJCQkJCQkJCQlcCisJaWYgKG9mbi0+bHBUZW1wbGF0ZU5hbWUpCQkJCQlcCisJCW9mbjE2LT5scFRlbXBsYXRlTmFtZSA9IFNFR1BUUl9HRVQoU0VHUFRSX1NUUkRVUChvZm4tPmxwVGVtcGxhdGVOYW1lKSk7XAorCQkJCQkJCQkJXAorCXJldCA9IHh4eCMjMTYoU0VHUFRSX0dFVChvZm4xNikpOwkJCQlcCisJCQkJCQkJCQlcCisJaWYgKG9mbjE2LT5scHN0ckZpbHRlcikJCQkJCQlcCisJCVNFR1BUUl9GUkVFKFBUUl9TRUdfVE9fTElOKG9mbjE2LT5scHN0ckZpbHRlcikpOwlcCisJaWYgKG9mbjE2LT5scFRlbXBsYXRlTmFtZSkJCQkJCVwKKwkJU0VHUFRSX0ZSRUUoUFRSX1NFR19UT19MSU4ob2ZuMTYtPmxwVGVtcGxhdGVOYW1lKSk7CVwKKwlpZiAob2ZuMTYtPmxwc3RyRGVmRXh0KQkJCQkJCVwKKwkJU0VHUFRSX0ZSRUUoUFRSX1NFR19UT19MSU4ob2ZuMTYtPmxwc3RyRGVmRXh0KSk7CVwKKwlpZiAob2ZuMTYtPmxwc3RyVGl0bGUpCQkJCQkJXAorCQlTRUdQVFJfRlJFRShQVFJfU0VHX1RPX0xJTihvZm4xNi0+bHBzdHJUaXRsZSkpOwkJXAorCWlmIChvZm4xNi0+bHBzdHJJbml0aWFsRGlyKQkJCQkJXAorCQlTRUdQVFJfRlJFRShQVFJfU0VHX1RPX0xJTihvZm4xNi0+bHBzdHJJbml0aWFsRGlyKSk7CVwKKwlpZiAob2ZuMTYtPmxwc3RyQ3VzdG9tRmlsdGVyKQkJCQkJXAorCQlTRUdQVFJfRlJFRShQVFJfU0VHX1RPX0xJTihvZm4xNi0+bHBzdHJDdXN0b21GaWx0ZXIpKTsJXAorCQkJCQkJCQkJXAorCXN0cmNweShvZm4tPmxwc3RyRmlsZSxQVFJfU0VHX1RPX0xJTihvZm4xNi0+bHBzdHJGaWxlKSk7CVwKKwlTRUdQVFJfRlJFRShQVFJfU0VHX1RPX0xJTihvZm4xNi0+bHBzdHJGaWxlKSk7CQkJXAorCQkJCQkJCQkJXAorCWlmIChvZm4xNi0+bHBzdHJGaWxlVGl0bGUpCQkJCQlcCisJCVNFR1BUUl9GUkVFKFBUUl9TRUdfVE9fTElOKG9mbjE2LT5scHN0ckZpbGVUaXRsZSkpOwlcCisJU0VHUFRSX0ZSRUUob2ZuMTYpOwkJCQkJCVwKKwlyZXR1cm4gcmV0OwkJCQkJCQlcCit9CQkJCQkJCQkJXAorCQkJCQkJCQkJXAorQk9PTDMyIHh4eCMjMzJXKCBMUE9QRU5GSUxFTkFNRTMyVyBvZm4gKQkJCQlcCit7CQkJCQkJCQkJXAorCUJPT0wxNiByZXQ7CQkJCQkJCVwKKwlMUE9QRU5GSUxFTkFNRTE2IG9mbjE2ID0gU0VHUFRSX0FMTE9DKHNpemVvZihPUEVORklMRU5BTUUxNikpOwlcCisJCQkJCQkJCQlcCisJbWVtc2V0KG9mbjE2LCdcMCcsc2l6ZW9mKCpvZm4xNikpOwkJCQlcCisJb2ZuMTYtPmxTdHJ1Y3RTaXplID0gc2l6ZW9mKCpvZm4xNik7CQkJCVwKKwlvZm4xNi0+aHduZE93bmVyID0gb2ZuLT5od25kT3duZXI7CQkJCVwKKwlvZm4xNi0+aEluc3RhbmNlID0gb2ZuLT5oSW5zdGFuY2U7CQkJCVwKKwlpZiAob2ZuLT5scHN0ckZpbHRlcikgewkJCQkJCVwKKwkJTFBXU1RSCXM7CQkJCQkJXAorCQlMUFNUUgl4LHk7CQkJCQkJXAorCQlpbnQJbjsJCQkJCQlcCisJCQkJCQkJCQlcCisJCS8qIGZpbHRlciBpcyBhIGxpc3QuLi4gIHRpdGxlXDBleHRcMC4uLi4uLlwwXDAgKi8JXAorCQlzID0gKExQV1NUUilvZm4tPmxwc3RyRmlsdGVyOwkJCQlcCisJCXdoaWxlICgqcykJCQkJCQlcCisJCQlzID0gcytsc3RybGVuMzJXKHMpKzE7CQkJCVwKKwkJcysrOwkJCQkJCQlcCisJCW4gPSBzIC0gb2ZuLT5scHN0ckZpbHRlcjsgLyogYWxyZWFkeSBkaXZpZGVzIGJ5IDIuIHB0ciBtYWdpYyAqL1wKKwkJeCA9IHkgPSAoTFBTVFIpU0VHUFRSX0FMTE9DKG4pOwkJCVwKKwkJcyA9IChMUFdTVFIpb2ZuLT5scHN0ckZpbHRlcjsJCQkJXAorCQl3aGlsZSAoKnMpIHsJCQkJCQlcCisJCQlsc3RyY3B5V3RvQSh4LHMpOwkJCQlcCisJCQl4Kz1sc3RybGVuMzJBKHgpKzE7CQkJCVwKKwkJCXMrPWxzdHJsZW4zMlcocykrMTsJCQkJXAorCQl9CQkJCQkJCVwKKwkJKng9MDsJCQkJCQkJXAorCQlvZm4xNi0+bHBzdHJGaWx0ZXIgPSBTRUdQVFJfR0VUKHkpOwkJCVwKKwl9CQkJCQkJCQlcCisJaWYgKG9mbi0+bHBzdHJDdXN0b21GaWx0ZXIpIHsJCQkJCVwKKwkJTFBXU1RSCXM7CQkJCQkJXAorCQlMUFNUUgl4LHk7CQkJCQkJXAorCQlpbnQJbjsJCQkJCQlcCisJCQkJCQkJCQlcCisJCS8qIGZpbHRlciBpcyBhIGxpc3QuLi4gIHRpdGxlXDBleHRcMC4uLi4uLlwwXDAgKi8JXAorCQlzID0gKExQV1NUUilvZm4tPmxwc3RyQ3VzdG9tRmlsdGVyOwkJCVwKKwkJd2hpbGUgKCpzKQkJCQkJCVwKKwkJCXMgPSBzK2xzdHJsZW4zMlcocykrMTsJCQkJXAorCQlzKys7CQkJCQkJCVwKKwkJbiA9IHMgLSBvZm4tPmxwc3RyQ3VzdG9tRmlsdGVyOwkJCQlcCisJCXggPSB5ID0gKExQU1RSKVNFR1BUUl9BTExPQyhuKTsJCQkJXAorCQlzID0gKExQV1NUUilvZm4tPmxwc3RyQ3VzdG9tRmlsdGVyOwkJCVwKKwkJd2hpbGUgKCpzKSB7CQkJCQkJXAorCQkJbHN0cmNweVd0b0EoeCxzKTsJCQkJXAorCQkJeCs9bHN0cmxlbjMyQSh4KSsxOwkJCQlcCisJCQlzKz1sc3RybGVuMzJXKHMpKzE7CQkJCVwKKwkJfQkJCQkJCQlcCisJCSp4PTA7CQkJCQkJCVwKKwkJb2ZuMTYtPmxwc3RyQ3VzdG9tRmlsdGVyID0gU0VHUFRSX0dFVCh5KTsJCVwKKwl9CQkJCQkJCQlcCisJb2ZuMTYtPm5NYXhDdXN0RmlsdGVyID0gb2ZuLT5uTWF4Q3VzdEZpbHRlcjsJCQlcCisJb2ZuMTYtPm5GaWx0ZXJJbmRleCA9IG9mbi0+bkZpbHRlckluZGV4OwkJCVwKKwlvZm4xNi0+bHBzdHJGaWxlID0gU0VHUFRSX0dFVChTRUdQVFJfQUxMT0Mob2ZuLT5uTWF4RmlsZSkpOwlcCisJb2ZuMTYtPm5NYXhGaWxlID0gb2ZuLT5uTWF4RmlsZTsJCQkJXAorCWlmIChvZm4tPmxwc3RyRmlsZVRpdGxlKQkJCQkJXAorCQlvZm4xNi0+bHBzdHJGaWxlVGl0bGU9IFNFR1BUUl9HRVQoU0VHUFRSX1NUUkRVUF9XdG9BKG9mbi0+bHBzdHJGaWxlVGl0bGUpKTtcCisJb2ZuMTYtPm5NYXhGaWxlVGl0bGUgPSBvZm4tPm5NYXhGaWxlVGl0bGU7CQkJXAorCWlmIChvZm4tPmxwc3RySW5pdGlhbERpcikJCQkJCVwKKwkJb2ZuMTYtPmxwc3RySW5pdGlhbERpciA9IFNFR1BUUl9HRVQoU0VHUFRSX1NUUkRVUF9XdG9BKG9mbi0+bHBzdHJJbml0aWFsRGlyKSk7XAorCWlmIChvZm4tPmxwc3RyVGl0bGUpCQkJCQkJXAorCQlvZm4xNi0+bHBzdHJUaXRsZSA9IFNFR1BUUl9HRVQoU0VHUFRSX1NUUkRVUF9XdG9BKG9mbi0+bHBzdHJUaXRsZSkpO1wKKwlvZm4xNi0+RmxhZ3MgPSBvZm4tPkZsYWdzfE9GTl9XSU5FMzJ8T0ZOX1VOSUNPREU7CQlcCisJb2ZuMTYtPm5GaWxlT2Zmc2V0ID0gb2ZuLT5uRmlsZU9mZnNldDsJCQkJXAorCW9mbjE2LT5uRmlsZUV4dGVuc2lvbiA9IG9mbi0+bkZpbGVFeHRlbnNpb247CQkJXAorCWlmIChvZm4tPmxwc3RyRGVmRXh0KQkJCQkJCVwKKwkJb2ZuMTYtPmxwc3RyRGVmRXh0ID0gU0VHUFRSX0dFVChTRUdQVFJfU1RSRFVQX1d0b0Eob2ZuLT5scHN0ckRlZkV4dCkpO1wKKwlvZm4xNi0+bEN1c3REYXRhID0gb2ZuLT5sQ3VzdERhdGE7CQkJCVwKKwlvZm4xNi0+bHBmbkhvb2sgPSAoV05EUFJPQzE2KW9mbi0+bHBmbkhvb2s7CQkJXAorCWlmIChvZm4tPmxwVGVtcGxhdGVOYW1lKSB7CQkJCQlcCisJCW9mbjE2LT5scFRlbXBsYXRlTmFtZSA9IFNFR1BUUl9HRVQoU0VHUFRSX1NUUkRVUF9XdG9BKG9mbi0+bHBUZW1wbGF0ZU5hbWUpKTtcCisJfQkJCQkJCQkJXAorCXJldCA9IHh4eCMjMTYoU0VHUFRSX0dFVChvZm4xNikpOwkJCQlcCisJCQkJCQkJCQlcCisJaWYgKG9mbjE2LT5scHN0ckZpbHRlcikJCQkJCQlcCisJCVNFR1BUUl9GUkVFKFBUUl9TRUdfVE9fTElOKG9mbjE2LT5scHN0ckZpbHRlcikpOwlcCisJaWYgKG9mbjE2LT5scFRlbXBsYXRlTmFtZSkJCQkJCVwKKwkJU0VHUFRSX0ZSRUUoUFRSX1NFR19UT19MSU4ob2ZuMTYtPmxwVGVtcGxhdGVOYW1lKSk7CVwKKwlpZiAob2ZuMTYtPmxwc3RyRGVmRXh0KQkJCQkJCVwKKwkJU0VHUFRSX0ZSRUUoUFRSX1NFR19UT19MSU4ob2ZuMTYtPmxwc3RyRGVmRXh0KSk7CVwKKwlpZiAob2ZuMTYtPmxwc3RyVGl0bGUpCQkJCQkJXAorCQlTRUdQVFJfRlJFRShQVFJfU0VHX1RPX0xJTihvZm4xNi0+bHBzdHJUaXRsZSkpOwkJXAorCWlmIChvZm4xNi0+bHBzdHJJbml0aWFsRGlyKQkJCQkJXAorCQlTRUdQVFJfRlJFRShQVFJfU0VHX1RPX0xJTihvZm4xNi0+bHBzdHJJbml0aWFsRGlyKSk7CVwKKwlpZiAob2ZuMTYtPmxwc3RyQ3VzdG9tRmlsdGVyKQkJCQkJXAorCQlTRUdQVFJfRlJFRShQVFJfU0VHX1RPX0xJTihvZm4xNi0+bHBzdHJDdXN0b21GaWx0ZXIpKTsJXAorCQkJCQkJCQkJXAorCWxzdHJjcHlBdG9XKG9mbi0+bHBzdHJGaWxlLFBUUl9TRUdfVE9fTElOKG9mbjE2LT5scHN0ckZpbGUpKTsJXAorCVNFR1BUUl9GUkVFKFBUUl9TRUdfVE9fTElOKG9mbjE2LT5scHN0ckZpbGUpKTsJCQlcCisJCQkJCQkJCQlcCisJaWYgKG9mbjE2LT5scHN0ckZpbGVUaXRsZSkJCQkJCVwKKwkJU0VHUFRSX0ZSRUUoUFRSX1NFR19UT19MSU4ob2ZuMTYtPmxwc3RyRmlsZVRpdGxlKSk7CVwKKwlTRUdQVFJfRlJFRShvZm4xNik7CQkJCQkJXAorCXJldHVybiByZXQ7CQkJCQkJCVwKK30KKworR0VUX1hYWF9GSUxFTkFNRShHZXRPcGVuRmlsZU5hbWUpCitHRVRfWFhYX0ZJTEVOQU1FKEdldFNhdmVGaWxlTmFtZSkKZGlmZiAtLWdpdCBhL21pc2MvY3J0ZGxsLmMgYi9taXNjL2NydGRsbC5jCmluZGV4IDYwZDNhZWIuLjAwMTVkOTIgMTAwNjQ0Ci0tLSBhL21pc2MvY3J0ZGxsLmMKKysrIGIvbWlzYy9jcnRkbGwuYwpAQCAtOTEzLDYgKzkxMywxOSBAQAogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgIG1ic3Rvd2NzICAgICAgICAgICAoQ1JURExMLjQyOSkKKyAqIEZJWE1FOiBjaGVjayBtdWx0aWJ5dGUgc3VwcG9ydAorICovCitJTlQzMgorQ1JURExMX21ic3Rvd2NzKExQV1NUUiBhLExQU1RSIGIsSU5UMzIgbnIpIHsKKwlpbnQJaTsKKwlmb3IgKGk9MDsoaTxucikgJiYgYltpXTtpKyspIHsKKwkJYVtpXSA9IChXQ0hBUiliW2ldOworCX0KKwlyZXR1cm4gaTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgICAgICAgICBtYnRvd2MgICAgICAgICAgIChDUlRETEwuNDMwKQogICogRklYTUU6IGNoZWNrIG11bHRpYnl0ZSBzdXBwb3J0CiAgKi8KZGlmZiAtLWdpdCBhL21pc2MvcHJpbnRkcnYuYyBiL21pc2MvcHJpbnRkcnYuYwppbmRleCA5NTgzYzM4Li5kZjBiYjk2IDEwMDY0NAotLS0gYS9taXNjL3ByaW50ZHJ2LmMKKysrIGIvbWlzYy9wcmludGRydi5jCkBAIC00MCw4ICs0MCwxNiBAQAogRHJ2R2V0UHJpbnRlckRhdGEoTFBTVFIgbHBQcmludGVyLCBMUFNUUiBscFByb2ZpbGUsIExQRFdPUkQgbHBUeXBlLAogICAgICAgICAgICAgICAgICAgTFBCWVRFIGxwUHJpbnRlckRhdGEsIGludCBjYkRhdGEsIExQRFdPUkQgbHBOZWVkZWQpCiB7Ci0gICAgZnByaW50ZihzdGRlcnIsIkluIERydkdldFByaW50ZXJEYXRhIHByaW50ZXIgJXAgcHJvZmlsZSAlcCBscFR5cGUgJXAgXG4iLAotICAgICAgICAgICBscFByaW50ZXIsIGxwUHJvZmlsZSwgbHBUeXBlKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwiSW4gRHJ2R2V0UHJpbnRlckRhdGEgIik7CisgICAgaWYgKEhJV09SRChscFByaW50ZXIpKQorCSAgICBmcHJpbnRmKHN0ZGVyciwicHJpbnRlciAlcyAiLGxwUHJpbnRlcik7CisgICAgZWxzZQorCSAgICBmcHJpbnRmKHN0ZGVyciwicHJpbnRlciAlcCAiLGxwUHJpbnRlcik7CisgICAgaWYgKEhJV09SRChscFByb2ZpbGUpKQorCSAgICBmcHJpbnRmKHN0ZGVyciwicHJvZmlsZSAlcyAiLGxwUHJvZmlsZSk7CisgICAgZWxzZQorCSAgICBmcHJpbnRmKHN0ZGVyciwicHJvZmlsZSAlcCAiLGxwUHJvZmlsZSk7CisgICAgZnByaW50ZihzdGRlcnIsImxwVHlwZSAlcFxuIixscFR5cGUpOwogICAgIHJldHVybiAwOwogfQogCkBAIC01MSw4ICs1OSwxNiBAQAogRHJ2U2V0UHJpbnRlckRhdGEoTFBTVFIgbHBQcmludGVyLCBMUFNUUiBscFByb2ZpbGUsIExQRFdPUkQgbHBUeXBlLAogICAgICAgICAgICAgICAgICAgTFBCWVRFIGxwUHJpbnRlckRhdGEsIERXT1JEIGR3U2l6ZSkKIHsKLSAgICBmcHJpbnRmKHN0ZGVyciwiSW4gRHJ2U2V0UHJpbnRlckRhdGEgcHJpbnRlciAlcCBwcm9maWxlICVwIGxwVHlwZSAlcCBcbiIsCi0gICAgICAgICAgIGxwUHJpbnRlciwgbHBQcm9maWxlLCBscFR5cGUpOworICAgIGZwcmludGYoc3RkZXJyLCJJbiBEcnZTZXRQcmludGVyRGF0YSAiKTsKKyAgICBpZiAoSElXT1JEKGxwUHJpbnRlcikpCisJICAgIGZwcmludGYoc3RkZXJyLCJwcmludGVyICVzICIsbHBQcmludGVyKTsKKyAgICBlbHNlCisJICAgIGZwcmludGYoc3RkZXJyLCJwcmludGVyICVwICIsbHBQcmludGVyKTsKKyAgICBpZiAoSElXT1JEKGxwUHJvZmlsZSkpCisJICAgIGZwcmludGYoc3RkZXJyLCJwcm9maWxlICVzICIsbHBQcm9maWxlKTsKKyAgICBlbHNlCisJICAgIGZwcmludGYoc3RkZXJyLCJwcm9maWxlICVwICIsbHBQcm9maWxlKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwibHBUeXBlICVwXG4iLGxwVHlwZSk7CiAgICAgcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL211bHRpbWVkaWEvYXVkaW8uYyBiL211bHRpbWVkaWEvYXVkaW8uYwppbmRleCA1MTczMjVmLi4wMzk1MjFlIDEwMDY0NAotLS0gYS9tdWx0aW1lZGlhL2F1ZGlvLmMKKysrIGIvbXVsdGltZWRpYS9hdWRpby5jCkBAIC00Nyw3ICs0Nyw3IEBACiAJV0FWRU9QRU5ERVNDICAgICAgICB3YXZlRGVzYzsKIAlXT1JEICAgICAgICAgICAgICAgIHdGbGFnczsKIAlQQ01XQVZFRk9STUFUCSAgICBGb3JtYXQ7Ci0JTFBXQVZFSERSIAkgICAgbHBRdWV1ZUhkcjsKKwlTRUdQVFIgIAkgICAgbHAxNlF1ZXVlSGRyOyAgLyogU2VnbWVudGVkIExQV0FWRUhEUiAqLwogCURXT1JECQkgICAgZHdUb3RhbFBsYXllZDsKIAl9IExJTlVYX1dBVkVPVVQ7CiAKQEAgLTU4LDcgKzU4LDcgQEAKIAlXQVZFT1BFTkRFU0MgICAgICAgIHdhdmVEZXNjOwogCVdPUkQgICAgICAgICAgICAgICAgd0ZsYWdzOwogCVBDTVdBVkVGT1JNQVQgICAgICAgRm9ybWF0OwotCUxQV0FWRUhEUiAgICAgICAgICAgbHBRdWV1ZUhkcjsKKwlTRUdQVFIgICAgICAgICAgICAgIGxwMTZRdWV1ZUhkcjsgIC8qIFNlZ21lbnRlZCBMUFdBVkVIRFIgKi8KIAlEV09SRCAgICAgICAgICAgICAgIGR3VG90YWxSZWNvcmRlZDsKIAl9IExJTlVYX1dBVkVJTjsKIApAQCAtMjk2LDYgKzI5Niw3IEBACiAJICAgICAgICBkd1JldCA9IHdvZE1lc3NhZ2Uod0RldklELCBXT0RNX0NMT1NFLCAwLCAwTCwgMEwpOwogCSAgICAgICAgaWYgKGR3UmV0ICE9IE1NU1lTRVJSX05PRVJST1IpIHJldHVybiBNQ0lFUlJfSU5URVJOQUw7CiAJICAgICAgICBkd1JldCA9IHdpZE1lc3NhZ2Uod0RldklELCBXSURNX09QRU4sIDAsIChEV09SRClscERlc2MsIENBTExCQUNLX05VTEwpOworCQlNQ0lXYXZEZXZbd0RldklEXS5mSW5wdXQgPSBUUlVFOwogCX0KIAllbHNlIGlmIChNQ0lXYXZEZXZbd0RldklEXS5mSW5wdXQpIHsKIC8qIEZJWE1FIHRoaXMgaXMganVzdCBhIGhhY2sgV0luRGV2IHNob3VsZCBiZSBoaWRkZW4gaGVyZSAqLwpAQCAtMzA0LDYgKzMwNSw3IEBACiAJICAgICAgICBkd1JldCA9IHdpZE1lc3NhZ2Uod0RldklELCBXSURNX0NMT1NFLCAwLCAwTCwgMEwpOwogCSAgICAgICAgaWYgKGR3UmV0ICE9IE1NU1lTRVJSX05PRVJST1IpIHJldHVybiBNQ0lFUlJfSU5URVJOQUw7CiAJICAgICAgICBkd1JldCA9IHdvZE1lc3NhZ2Uod0RldklELCBXT0RNX09QRU4sIDAsIChEV09SRClscERlc2MsIENBTExCQUNLX05VTEwpOworCQlNQ0lXYXZEZXZbd0RldklEXS5mSW5wdXQgPSBGQUxTRTsKIAl9CiAKIAlVU0VSX0hFQVBfRlJFRShoRGVzYyk7CkBAIC0zNDcsNyArMzQ5LDcgQEAKIAlIR0xPQkFMMTYJCWhEYXRhOwogCUhMT0NBTDE2CQloV2F2ZUhkcjsKIAlMUFdBVkVIRFIJCWxwV2F2ZUhkcjsKLQlMUFdBVkVIRFIJCWxwMTZXYXZlSGRyOworCVNFR1BUUiAgCQlscDE2V2F2ZUhkcjsKIAlEV09SRAkJCWR3UmV0OwogCiAJZHByaW50Zl9tY2l3YXZlKHN0ZGRlYiwKQEAgLTM5OCwxMCArNDAwLDEwIEBACiAJbHBXYXZlSGRyLT5kd0ZsYWdzID0gMEw7CiAJbHBXYXZlSGRyLT5kd0xvb3BzID0gMEw7CiAJaFdhdmVIZHIgPSBVU0VSX0hFQVBfQUxMT0Moc2l6ZW9mKFdBVkVIRFIpKTsKLQlscDE2V2F2ZUhkciA9IChMUFdBVkVIRFIpIFVTRVJfSEVBUF9TRUdfQUREUihoV2F2ZUhkcik7CisJbHAxNldhdmVIZHIgPSBVU0VSX0hFQVBfU0VHX0FERFIoaFdhdmVIZHIpOwogCW1lbWNweShQVFJfU0VHX1RPX0xJTihscDE2V2F2ZUhkciksIGxwV2F2ZUhkciwgc2l6ZW9mKFdBVkVIRFIpKTsKIAlscFdhdmVIZHIgPSBQVFJfU0VHX1RPX0xJTihscDE2V2F2ZUhkcik7Ci0JZHdSZXQgPSB3b2RNZXNzYWdlKHdEZXZJRCwgV09ETV9QUkVQQVJFLCAwLCAoRFdPUkQpbHAxNldhdmVIZHIsIHNpemVvZihXQVZFSERSKSk7CisJZHdSZXQgPSB3b2RNZXNzYWdlKHdEZXZJRCwgV09ETV9QUkVQQVJFLCAwLCBscDE2V2F2ZUhkciwgc2l6ZW9mKFdBVkVIRFIpKTsKIAl3aGlsZShUUlVFKSB7CiAJCWNvdW50ID0gbW1pb1JlYWQoTUNJV2F2RGV2W3dEZXZJRF0uaEZpbGUsIAogCQkJUFRSX1NFR19UT19MSU4obHBXYXZlSGRyLT5scERhdGEpLCBidWZzaXplKTsKQEAgLTQxMSw5ICs0MTMsOSBAQAogLyoJCWxwV2F2ZUhkci0+ZHdCeXRlc1JlY29yZGVkID0gY291bnQ7ICovCiAJCWRwcmludGZfbWNpd2F2ZShzdGRkZWIsIldBVkVfbWNpUGxheSAvLyBiZWZvcmUgV09ETV9XUklURSBscFdhdmVIZHI9JXAgZHdCdWZmZXJMZW5ndGg9JWx1IGR3Qnl0ZXNSZWNvcmRlZD0lbHVcbiIsCiAJCQkJbHBXYXZlSGRyLCBscFdhdmVIZHItPmR3QnVmZmVyTGVuZ3RoLCBscFdhdmVIZHItPmR3Qnl0ZXNSZWNvcmRlZCk7Ci0JCWR3UmV0ID0gd29kTWVzc2FnZSh3RGV2SUQsIFdPRE1fV1JJVEUsIDAsIChEV09SRClscDE2V2F2ZUhkciwgc2l6ZW9mKFdBVkVIRFIpKTsKKwkJZHdSZXQgPSB3b2RNZXNzYWdlKHdEZXZJRCwgV09ETV9XUklURSwgMCwgbHAxNldhdmVIZHIsIHNpemVvZihXQVZFSERSKSk7CiAJCX0KLQlkd1JldCA9IHdvZE1lc3NhZ2Uod0RldklELCBXT0RNX1VOUFJFUEFSRSwgMCwgKERXT1JEKWxwMTZXYXZlSGRyLCBzaXplb2YoV0FWRUhEUikpOworCWR3UmV0ID0gd29kTWVzc2FnZSh3RGV2SUQsIFdPRE1fVU5QUkVQQVJFLCAwLCBscDE2V2F2ZUhkciwgc2l6ZW9mKFdBVkVIRFIpKTsKIAlpZiAobHBXYXZlSGRyLT5scERhdGEgIT0gTlVMTCkgewogCQlHbG9iYWxVbmxvY2sxNihoRGF0YSk7CiAJCUdsb2JhbEZyZWUxNihoRGF0YSk7CkBAIC00MzksNyArNDQxLDcgQEAKIAlIR0xPQkFMMTYJCWhEYXRhOwogCUhMT0NBTDE2CQloV2F2ZUhkcjsKIAlMUFdBVkVIRFIJCWxwV2F2ZUhkcjsKLQlMUFdBVkVIRFIJCWxwMTZXYXZlSGRyOworCVNFR1BUUiAgIAkJbHAxNldhdmVIZHI7CiAJRFdPUkQJCQlkd1JldDsKIAogCWRwcmludGZfbWNpd2F2ZShzdGRkZWIsCkBAIC00NzQsNyArNDc2LDcgQEAKIAlscFdhdmVIZHItPmR3RmxhZ3MgPSAwTDsKIAlscFdhdmVIZHItPmR3TG9vcHMgPSAwTDsKIAloV2F2ZUhkciA9IFVTRVJfSEVBUF9BTExPQyhzaXplb2YoV0FWRUhEUikpOwotCWxwMTZXYXZlSGRyID0gKExQV0FWRUhEUikgVVNFUl9IRUFQX1NFR19BRERSKGhXYXZlSGRyKTsKKwlscDE2V2F2ZUhkciA9IFVTRVJfSEVBUF9TRUdfQUREUihoV2F2ZUhkcik7CiAJbWVtY3B5KFBUUl9TRUdfVE9fTElOKGxwMTZXYXZlSGRyKSwgbHBXYXZlSGRyLCBzaXplb2YoV0FWRUhEUikpOwogCWxwV2F2ZUhkciA9IFBUUl9TRUdfVE9fTElOKGxwMTZXYXZlSGRyKTsKIAlkd1JldCA9IHdpZE1lc3NhZ2Uod0RldklELCBXSURNX1BSRVBBUkUsIDAsIChEV09SRClscDE2V2F2ZUhkciwgc2l6ZW9mKFdBVkVIRFIpKTsKQEAgLTkyNiw3ICs5MjgsNyBAQAogCQkJZHByaW50Zl9tY2l3YXZlKHN0ZGRlYiwJIkxpbnV4ICd3b2RPcGVuJyAvLyBDQUxMQkFDS19GVU5DVElPTiAhXG4iKTsKIAkJCWJyZWFrOwogCQl9Ci0JV091dERldlt3RGV2SURdLmxwUXVldWVIZHIgPSBOVUxMOworCVdPdXREZXZbd0RldklEXS5scDE2UXVldWVIZHIgPSBOVUxMOwogCVdPdXREZXZbd0RldklEXS51bml4ZGV2ID0gYXVkaW87CiAJV091dERldlt3RGV2SURdLmR3VG90YWxQbGF5ZWQgPSAwOwogCVdPdXREZXZbd0RldklEXS5idWZzaXplID0gYWJ1Zl9zaXplOwpAQCAtOTg2LDEwICs5ODgsMTQgQEAKIAkJZHByaW50Zl9tY2l3YXZlKHN0ZGRlYiwiTGludXggJ3dvZENsb3NlJyAvLyBjYW4ndCBjbG9zZSAhXG4iKTsKIAkJcmV0dXJuIE1NU1lTRVJSX05PVEVOQUJMRUQ7CiAJCX0KKwlpZiAoV091dERldlt3RGV2SURdLmxwMTZRdWV1ZUhkciAhPSBOVUxMKSB7CisJICAgICAgICBkcHJpbnRmX21jaXdhdmUoc3RkZGViLCJsaW51eCAnd29kY2xvc2UnIC8vIHN0aWxsIGJ1ZmZlcnMgb3BlbiAhXG4iKTsKKwkJcmV0dXJuIFdBVkVSUl9TVElMTFBMQVlJTkc7CisJfQogCWNsb3NlKFdPdXREZXZbd0RldklEXS51bml4ZGV2KTsKIAlXT3V0RGV2W3dEZXZJRF0udW5peGRldiA9IDA7CiAJV091dERldlt3RGV2SURdLmJ1ZnNpemUgPSAwOwotCVdPdXREZXZbd0RldklEXS5scFF1ZXVlSGRyID0gTlVMTDsKKwlXT3V0RGV2W3dEZXZJRF0ubHAxNlF1ZXVlSGRyID0gTlVMTDsKIAlpZiAoV0FWRV9Ob3RpZnlDbGllbnQod0RldklELCBXT01fQ0xPU0UsIDBMLCAwTCkgIT0gTU1TWVNFUlJfTk9FUlJPUikgewogCQlkcHJpbnRmX21jaXdhdmUoc3RkZGViLCJMaW51eCAnd29kQ2xvc2UnIC8vIGNhbid0IG5vdGlmeSBjbGllbnQgIVxuIik7CiAJCXJldHVybiBNTVNZU0VSUl9JTlZBTFBBUkFNOwpAQCAtMTAwMCwxMSArMTAwNiwxMSBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIAkJCQl3b2RXcml0ZQkJCVtpbnRlcm5hbF0KICovCi1zdGF0aWMgRFdPUkQgd29kV3JpdGUoV09SRCB3RGV2SUQsIERXT1JEIGxwV0gsIERXT1JEIGR3U2l6ZSkKK3N0YXRpYyBEV09SRCB3b2RXcml0ZShXT1JEIHdEZXZJRCwgU0VHUFRSIGxwMTZXYXZlSGRyLCBEV09SRCBkd1NpemUpCiB7CiAJaW50CQljb3VudDsKIAlMUFNUUgkgICAgICAgIGxwRGF0YTsKLQlMUFdBVkVIRFIgICAgICAgbHBXYXZlSGRyID0gKExQV0FWRUhEUilQVFJfU0VHX1RPX0xJTihscFdIKTsKKwlMUFdBVkVIRFIgICAgICAgbHBXYXZlSGRyID0gKExQV0FWRUhEUilQVFJfU0VHX1RPX0xJTihscDE2V2F2ZUhkcik7CiAKIAlkcHJpbnRmX21jaXdhdmUoc3RkZGViLCJ3b2RXcml0ZSgldSwgJXAsICUwOGxYKTtcbiIsIHdEZXZJRCwgbHBXYXZlSGRyLCBkd1NpemUpOwogCWlmIChXT3V0RGV2W3dEZXZJRF0udW5peGRldiA9PSAwKSB7CkBAIC0xMDMxLDcgKzEwMzcsNyBAQAogCVdPdXREZXZbd0RldklEXS5kd1RvdGFsUGxheWVkICs9IGNvdW50OwogCWxwV2F2ZUhkci0+ZHdGbGFncyAmPSB+V0hEUl9JTlFVRVVFOwogCWxwV2F2ZUhkci0+ZHdGbGFncyB8PSBXSERSX0RPTkU7Ci0JaWYgKFdBVkVfTm90aWZ5Q2xpZW50KHdEZXZJRCwgV09NX0RPTkUsIGxwV0gsIDApICE9IE1NU1lTRVJSX05PRVJST1IpIHsKKwlpZiAoV0FWRV9Ob3RpZnlDbGllbnQod0RldklELCBXT01fRE9ORSwgbHAxNldhdmVIZHIsIGNvdW50KSAhPSBNTVNZU0VSUl9OT0VSUk9SKSB7CiAJCWRwcmludGZfbWNpd2F2ZShzdGRkZWIsIkxpbnV4ICd3b2RXcml0ZScgLy8gY2FuJ3Qgbm90aWZ5IGNsaWVudCAhXG4iKTsKIAkJcmV0dXJuIE1NU1lTRVJSX0lOVkFMUEFSQU07CiAJCX0KQEAgLTEwNDEsMTQgKzEwNDcsMTkgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAJCQkJd29kUHJlcGFyZQkJCVtpbnRlcm5hbF0KICovCi1zdGF0aWMgRFdPUkQgd29kUHJlcGFyZShXT1JEIHdEZXZJRCwgTFBXQVZFSERSIGxwV2F2ZUhkciwgRFdPUkQgZHdTaXplKQorc3RhdGljIERXT1JEIHdvZFByZXBhcmUoV09SRCB3RGV2SUQsIFNFR1BUUiBscDE2V2F2ZUhkciwgRFdPUkQgZHdTaXplKQogeworICAgICAgICBMUFdBVkVIRFIgbHBXYXZlSGRyOworCiAJZHByaW50Zl9tY2l3YXZlKHN0ZGRlYiwKLQkJIndvZFByZXBhcmUoJXUsICVwLCAlMDhsWCk7XG4iLCB3RGV2SUQsIGxwV2F2ZUhkciwgZHdTaXplKTsKKwkJIndvZFByZXBhcmUoJXUsICVwLCAlMDhsWCk7XG4iLCB3RGV2SUQsICh2b2lkICopbHAxNldhdmVIZHIsIGR3U2l6ZSk7CiAJaWYgKFdPdXREZXZbd0RldklEXS51bml4ZGV2ID09IDApIHsKIAkJZHByaW50Zl9tY2l3YXZlKHN0ZGRlYiwiTGludXggJ3dvZFByZXBhcmUnIC8vIGNhbid0IHByZXBhcmUgIVxuIik7CiAJCXJldHVybiBNTVNZU0VSUl9OT1RFTkFCTEVEOwogCQl9CisKKwlscFdhdmVIZHIgPSBQVFJfU0VHX1RPX0xJTihscDE2V2F2ZUhkcik7CisKIAkvKiB0aGUgQ09PTCB3YXZlZWRpdG9yIGZlZWxzIG11Y2ggYmV0dGVyIHdpdGhvdXQgdGhpcyBjaGVjay4uLiAKIAkgKiBzb21lb25lIHBsZWFzZSBoYXZlIGEgbG9vayBhdCBhdmFpbGFibGUgZG9jdW1lbnRhdGlvbgogCWlmIChXT3V0RGV2W3dEZXZJRF0ubHBRdWV1ZUhkciAhPSBOVUxMKSB7CkBAIC0xMDU3LDcgKzEwNjgsNyBAQAogCX0KIAkqLwogCVdPdXREZXZbd0RldklEXS5kd1RvdGFsUGxheWVkID0gMDsKLQlXT3V0RGV2W3dEZXZJRF0ubHBRdWV1ZUhkciA9IGxwV2F2ZUhkcjsKKwlXT3V0RGV2W3dEZXZJRF0ubHAxNlF1ZXVlSGRyID0gbHAxNldhdmVIZHI7CiAJaWYgKGxwV2F2ZUhkci0+ZHdGbGFncyAmIFdIRFJfSU5RVUVVRSkgcmV0dXJuIFdBVkVSUl9TVElMTFBMQVlJTkc7CiAJbHBXYXZlSGRyLT5kd0ZsYWdzIHw9IFdIRFJfUFJFUEFSRUQ7CiAJbHBXYXZlSGRyLT5kd0ZsYWdzICY9IH5XSERSX0RPTkU7CkBAIC0xMDc1LDYgKzEwODYsMTMgQEAKIAkJZHByaW50Zl9tY2l3YXZlKHN0ZGRlYiwiTGludXggJ3dvZFVucHJlcGFyZScgLy8gY2FuJ3QgdW5wcmVwYXJlICFcbiIpOwogCQlyZXR1cm4gTU1TWVNFUlJfTk9URU5BQkxFRDsKIAkJfQorCQorCWxwV2F2ZUhkci0+ZHdGbGFncyAmPSB+V0hEUl9QUkVQQVJFRDsKKwlscFdhdmVIZHItPmR3RmxhZ3MgJj0gfldIRFJfSU5RVUVVRTsKKwlscFdhdmVIZHItPmR3RmxhZ3MgfD0gV0hEUl9ET05FOworCVdPdXREZXZbd0RldklEXS5scDE2UXVldWVIZHIgPSBOVUxMOworCWRwcmludGZfbWNpd2F2ZShzdGRkZWIsCisJCSJMaW51eCAnd29kVW5wcmVwYXJlJyAvLyBhbGwgaGVhZGVycyB1bnByZXBhcmVkICFcbiIpOwogCXJldHVybiBNTVNZU0VSUl9OT0VSUk9SOwogfQogCkBAIC0xMTIzLDYgKzExNDEsMTYgQEAKIAkJcmV0dXJuIE1NU1lTRVJSX05PVEVOQUJMRUQ7CiAJCX0KIAlpZiAobHBUaW1lID09IE5VTEwpCXJldHVybiBNTVNZU0VSUl9JTlZBTFBBUkFNOworCWRwcmludGZfbWNpd2F2ZShzdGRkZWIsIndvZEdldFBvc2l0aW9uIC8vIHdUeXBlPSUwNFggIVxuIiwgCisJCQlscFRpbWUtPndUeXBlKTsKKwlkcHJpbnRmX21jaXdhdmUoc3RkZGViLCJ3b2RHZXRQb3NpdGlvbiAvLyB3Qml0c1BlclNhbXBsZT0ldVxuIiwKKwkJCVdPdXREZXZbd0RldklEXS5Gb3JtYXQud0JpdHNQZXJTYW1wbGUpOyAKKwlkcHJpbnRmX21jaXdhdmUoc3RkZGViLCJ3b2RHZXRQb3NpdGlvbiAvLyBuU2FtcGxlc1BlclNlYz0lbHVcbiIsCisJCQlXT3V0RGV2W3dEZXZJRF0uRm9ybWF0LndmLm5TYW1wbGVzUGVyU2VjKTsgCisJZHByaW50Zl9tY2l3YXZlKHN0ZGRlYiwid29kR2V0UG9zaXRpb24gLy8gbkNoYW5uZWxzPSV1XG4iLAorCQkJV091dERldlt3RGV2SURdLkZvcm1hdC53Zi5uQ2hhbm5lbHMpOyAKKwlkcHJpbnRmX21jaXdhdmUoc3RkZGViLCJ3b2RHZXRQb3NpdGlvbiAvLyBuQXZnQnl0ZXNQZXJTZWM9JWx1XG4iLAorCQkJV091dERldlt3RGV2SURdLkZvcm1hdC53Zi5uQXZnQnl0ZXNQZXJTZWMpOyAKIAlzd2l0Y2gobHBUaW1lLT53VHlwZSkgewogCQljYXNlIFRJTUVfQllURVM6CiAJCQlscFRpbWUtPnUuY2IgPSBXT3V0RGV2W3dEZXZJRF0uZHdUb3RhbFBsYXllZDsKQEAgLTEyMzIsMTUgKzEyNjAsMTUgQEAKIAkJY2FzZSBXT0RNX1dSSVRFOgogCQkJcmV0dXJuIHdvZFdyaXRlKHdEZXZJRCwgZHdQYXJhbTEsIGR3UGFyYW0yKTsKIAkJY2FzZSBXT0RNX1BBVVNFOgotCQkJcmV0dXJuIDBMOworCQkJcmV0dXJuIE1NU1lTRVJSX05PVFNVUFBPUlRFRDsKIAkgICAgICAgIGNhc2UgV09ETV9TVE9QOgotCQkJcmV0dXJuIDBMOworCQkJcmV0dXJuIE1NU1lTRVJSX05PVFNVUFBPUlRFRDsKIAkJY2FzZSBXT0RNX0dFVFBPUzoKIAkJCXJldHVybiB3b2RHZXRQb3NpdGlvbih3RGV2SUQsIChMUE1NVElNRSlQVFJfU0VHX1RPX0xJTihkd1BhcmFtMSksIGR3UGFyYW0yKTsKIAkJY2FzZSBXT0RNX0JSRUFLTE9PUDoKLQkJCXJldHVybiAwTDsKKwkJCXJldHVybiBNTVNZU0VSUl9OT1RTVVBQT1JURUQ7CiAJCWNhc2UgV09ETV9QUkVQQVJFOgotCQkJcmV0dXJuIHdvZFByZXBhcmUod0RldklELCAoTFBXQVZFSERSKVBUUl9TRUdfVE9fTElOKGR3UGFyYW0xKSwgZHdQYXJhbTIpOworCQkJcmV0dXJuIHdvZFByZXBhcmUod0RldklELCBkd1BhcmFtMSwgZHdQYXJhbTIpOwogCQljYXNlIFdPRE1fVU5QUkVQQVJFOgogCQkJcmV0dXJuIHdvZFVucHJlcGFyZSh3RGV2SUQsIChMUFdBVkVIRFIpUFRSX1NFR19UT19MSU4oZHdQYXJhbTEpLCBkd1BhcmFtMik7CiAJCWNhc2UgV09ETV9HRVRERVZDQVBTOgpAQCAtMTM4OSw3ICsxNDE3LDcgQEAKIAkJCWRwcmludGZfbWNpd2F2ZShzdGRkZWIsCSJMaW51eCAnd2lkT3BlbicgLy8gQ0FMTEJBQ0tfRlVOQ1RJT04gIVxuIik7CiAJCQlicmVhazsKIAkJfQotCVdJbkRldlt3RGV2SURdLmxwUXVldWVIZHIgPSBOVUxMOworCVdJbkRldlt3RGV2SURdLmxwMTZRdWV1ZUhkciA9IE5VTEw7CiAJV0luRGV2W3dEZXZJRF0udW5peGRldiA9IGF1ZGlvOwogCVdJbkRldlt3RGV2SURdLmJ1ZnNpemUgPSBhYnVmX3NpemU7CiAJV0luRGV2W3dEZXZJRF0uZHdUb3RhbFJlY29yZGVkID0gMDsKQEAgLTE0NDIsNiArMTQ3MCwxMCBAQAogCQlkcHJpbnRmX21jaXdhdmUoc3RkZGViLCJMaW51eCAnd2lkQ2xvc2UnIC8vIGNhbid0IGNsb3NlICFcbiIpOwogCQlyZXR1cm4gTU1TWVNFUlJfTk9URU5BQkxFRDsKIAkJfQorCWlmIChXSW5EZXZbd0RldklEXS5scDE2UXVldWVIZHIgIT0gTlVMTCkgeworCSAgICAgICAgZHByaW50Zl9tY2l3YXZlKHN0ZGRlYiwibGludXggJ3dpZGNsb3NlJyAvLyBzdGlsbCBidWZmZXJzIG9wZW4gIVxuIik7CisJCXJldHVybiBXQVZFUlJfU1RJTExQTEFZSU5HOworCX0KIAljbG9zZShXSW5EZXZbd0RldklEXS51bml4ZGV2KTsKIAlXSW5EZXZbd0RldklEXS51bml4ZGV2ID0gMDsKIAlXSW5EZXZbd0RldklEXS5idWZzaXplID0gMDsKQEAgLTE0NTUsMTAgKzE0ODcsMTIgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAJCQkJd2lkQWRkQnVmZmVyCQlbaW50ZXJuYWxdCiAqLwotc3RhdGljIERXT1JEIHdpZEFkZEJ1ZmZlcihXT1JEIHdEZXZJRCwgTFBXQVZFSERSIGxwV2F2ZUhkciwgRFdPUkQgZHdTaXplKQorc3RhdGljIERXT1JEIHdpZEFkZEJ1ZmZlcihXT1JEIHdEZXZJRCwgU0VHUFRSIGxwMTZXYXZlSGRyLCBEV09SRCBkd1NpemUpCiB7CiAJaW50CQkJY291bnQJPSAxOwogCUxQV0FWRUhEUiAJbHBXSUhkcjsKKwlMUFdBVkVIRFIgICAgICAgbHBXYXZlSGRyID0gKExQV0FWRUhEUilQVFJfU0VHX1RPX0xJTihscDE2V2F2ZUhkcik7CisKIAlkcHJpbnRmX21jaXdhdmUoc3RkZGViLAogCQkid2lkQWRkQnVmZmVyKCV1LCAlcCwgJTA4bFgpO1xuIiwgd0RldklELCBscFdhdmVIZHIsIGR3U2l6ZSk7CiAJaWYgKFdJbkRldlt3RGV2SURdLnVuaXhkZXYgPT0gMCkgewpAQCAtMTQ3NywxOSArMTUxMSwxOSBAQAogCWxwV2F2ZUhkci0+ZHdGbGFncyB8PSBXSERSX0lOUVVFVUU7CiAJbHBXYXZlSGRyLT5kd0ZsYWdzICY9IH5XSERSX0RPTkU7CiAJbHBXYXZlSGRyLT5kd0J5dGVzUmVjb3JkZWQgPSAwOwotCWlmIChXSW5EZXZbd0RldklEXS5scFF1ZXVlSGRyID09IE5VTEwpIHsKKwlpZiAoV0luRGV2W3dEZXZJRF0ubHAxNlF1ZXVlSGRyID09IE5VTEwpIHsKIAkJLyogYmVnaW4gdGhlIHF1ZXVlIHdpdGggYSBmaXJzdCBoZWFkZXIgLi4uICovCi0JCVdJbkRldlt3RGV2SURdLmxwUXVldWVIZHIgPSBscFdhdmVIZHI7CisJCVdJbkRldlt3RGV2SURdLmxwMTZRdWV1ZUhkciA9IGxwMTZXYXZlSGRyOwogCQlXSW5EZXZbd0RldklEXS5kd1RvdGFsUmVjb3JkZWQgPSAwOwogCQl9CiAJZWxzZSB7CiAJCS8qIGFkZGVkIHRvIHRoZSBxdWV1ZSwgZXhjZXB0IGlmIGl0J3MgdGhlIG9uZSBqdXN0IHByZXBhcmVkIC4uLiAqLwotCQlscFdJSGRyID0gV0luRGV2W3dEZXZJRF0ubHBRdWV1ZUhkcjsKLQkJd2hpbGUgKGxwV0lIZHItPmxwTmV4dCAhPSBOVUxMKSB7Ci0JCQlscFdJSGRyID0gbHBXSUhkci0+bHBOZXh0OworCQlscFdJSGRyID0gKExQV0FWRUhEUilQVFJfU0VHX1RPX0xJTihXSW5EZXZbd0RldklEXS5scDE2UXVldWVIZHIpOworCQl3aGlsZSAobHBXSUhkci0+bHAxNk5leHQgIT0gTlVMTCkgeworCQkJbHBXSUhkciA9IChMUFdBVkVIRFIpUFRSX1NFR19UT19MSU4obHBXSUhkci0+bHAxNk5leHQpOwogCQkJY291bnQrKzsKIAkJCX0KLQkJbHBXSUhkci0+bHBOZXh0ID0gbHBXYXZlSGRyOworCQlscFdJSGRyLT5scDE2TmV4dCA9IGxwMTZXYXZlSGRyOwogCQljb3VudCsrOwogCQl9CiAJZHByaW50Zl9tY2l3YXZlKHN0ZGRlYiwKQEAgLTE1MDgsNyArMTU0Miw3IEBACiAJCWRwcmludGZfbWNpd2F2ZShzdGRkZWIsIkxpbnV4ICd3aWRQcmVwYXJlJyAvLyBjYW4ndCBwcmVwYXJlICFcbiIpOwogCQlyZXR1cm4gTU1TWVNFUlJfTk9URU5BQkxFRDsKIAkJfQotCWlmIChXSW5EZXZbd0RldklEXS5scFF1ZXVlSGRyICE9IE5VTEwpIHsKKwlpZiAoV0luRGV2W3dEZXZJRF0ubHAxNlF1ZXVlSGRyICE9IE5VTEwpIHsKIAkJZHByaW50Zl9tY2l3YXZlKHN0ZGRlYiwiTGludXggJ3dpZFByZXBhcmUnIC8vIGFscmVhZHkgcHJlcGFyZSAhXG4iKTsKIAkJcmV0dXJuIFdBVkVSUl9CQURGT1JNQVQ7CiAJCX0KQEAgLTE1MzUsNyArMTU2OSw3IEBACiAJbHBXYXZlSGRyLT5kd0ZsYWdzICY9IH5XSERSX1BSRVBBUkVEOwogCWxwV2F2ZUhkci0+ZHdGbGFncyAmPSB+V0hEUl9JTlFVRVVFOwogCWxwV2F2ZUhkci0+ZHdGbGFncyB8PSBXSERSX0RPTkU7Ci0JV0luRGV2W3dEZXZJRF0ubHBRdWV1ZUhkciA9IE5VTEw7CisJV0luRGV2W3dEZXZJRF0ubHAxNlF1ZXVlSGRyID0gTlVMTDsKIAlkcHJpbnRmX21jaXdhdmUoc3RkZGViLAogCQkiTGludXggJ3dpZFVucHJlcGFyZScgLy8gYWxsIGhlYWRlcnMgdW5wcmVwYXJlZCAhXG4iKTsKIAlyZXR1cm4gTU1TWVNFUlJfTk9FUlJPUjsKQEAgLTE1NDcsNDAgKzE1ODEsNDUgQEAKIHN0YXRpYyBEV09SRCB3aWRTdGFydChXT1JEIHdEZXZJRCkKIHsKIAlpbnQJCQljb3VudAk9IDE7CisJaW50ICAgICAgICAgICAgIGJ5dGVzUmVhZDsKIAlMUFdBVkVIRFIgCWxwV0lIZHI7CisJU0VHUFRSICAgICAgICAgIGxwMTZXYXZlSGRyOworCiAJZHByaW50Zl9tY2l3YXZlKHN0ZGRlYiwid2lkU3RhcnQoJXUpO1xuIiwgd0RldklEKTsKIAlpZiAoV0luRGV2W3dEZXZJRF0udW5peGRldiA9PSAwKSB7CiAJCWRwcmludGZfbWNpd2F2ZShzdGRkZWIsCSJMaW51eCAnd2lkU3RhcnQnIC8vIGNhbid0IHN0YXJ0IHJlY29yZGluZyAhXG4iKTsKIAkJcmV0dXJuIE1NU1lTRVJSX05PVEVOQUJMRUQ7CiAJCX0KLQlpZiAoV0luRGV2W3dEZXZJRF0ubHBRdWV1ZUhkciA9PSBOVUxMIHx8IAotCQlXSW5EZXZbd0RldklEXS5scFF1ZXVlSGRyLT5scERhdGEgPT0gTlVMTCkgeworCisJbHAxNldhdmVIZHIgPSBXSW5EZXZbd0RldklEXS5scDE2UXVldWVIZHI7CisJZHByaW50Zl9tY2l3YXZlKHN0ZGRlYiwiTGludXggJ3dpZHN0YXJ0Jy8vIGxwMTZXYXZlSGRyID0gJTA4bHhcbiIsKERXT1JEKWxwMTZXYXZlSGRyKTsKKwlpZiAobHAxNldhdmVIZHIgPT0gTlVMTCB8fCAKKwkJKChMUFdBVkVIRFIpUFRSX1NFR19UT19MSU4obHAxNldhdmVIZHIpKS0+bHBEYXRhID09IE5VTEwpIHsKIAkJZHByaW50Zl9tY2l3YXZlKHN0ZGRlYiwiTGludXggJ3dpZFN0YXJ0JyAvLyBuZXZlciBiZWVuIHByZXBhcmVkICFcbiIpOwogCQlyZXR1cm4gV0FWRVJSX1VOUFJFUEFSRUQ7CiAJCX0KLQlscFdJSGRyID0gV0luRGV2W3dEZXZJRF0ubHBRdWV1ZUhkcjsKLQl3aGlsZShscFdJSGRyICE9IE5VTEwpIHsKKworCXdoaWxlKGxwMTZXYXZlSGRyICE9IE5VTEwpIHsKKwkgICAgICAgIGxwV0lIZHIgPSAoTFBXQVZFSERSKVBUUl9TRUdfVE9fTElOKGxwMTZXYXZlSGRyKTsKIAkJbHBXSUhkci0+ZHdCdWZmZXJMZW5ndGggJj0gMHhGRkZGOwogCQlkcHJpbnRmX21jaXdhdmUoc3RkZGViLAogCQkJIndpZFN0YXJ0IC8vIHJlY29yZGluZyBidWYjJXU9JXAgc2l6ZT0lbHUgXG4iLAogCQkJY291bnQsIGxwV0lIZHItPmxwRGF0YSwgbHBXSUhkci0+ZHdCdWZmZXJMZW5ndGgpOwogCQlmZmx1c2goc3RkZGViKTsKLQkJcmVhZCAoV0luRGV2W3dEZXZJRF0udW5peGRldiwgCisJCWJ5dGVzUmVhZCA9IHJlYWQgKFdJbkRldlt3RGV2SURdLnVuaXhkZXYsIAogCQkJUFRSX1NFR19UT19MSU4obHBXSUhkci0+bHBEYXRhKSwKIAkJCWxwV0lIZHItPmR3QnVmZmVyTGVuZ3RoKTsKLQkJbHBXSUhkci0+ZHdCeXRlc1JlY29yZGVkID0gbHBXSUhkci0+ZHdCdWZmZXJMZW5ndGg7CisJCWxwV0lIZHItPmR3Qnl0ZXNSZWNvcmRlZCA9IGJ5dGVzUmVhZDsKIAkJV0luRGV2W3dEZXZJRF0uZHdUb3RhbFJlY29yZGVkICs9IGxwV0lIZHItPmR3Qnl0ZXNSZWNvcmRlZDsKIAkJbHBXSUhkci0+ZHdGbGFncyAmPSB+V0hEUl9JTlFVRVVFOwogCQlscFdJSGRyLT5kd0ZsYWdzIHw9IFdIRFJfRE9ORTsKIAotLyogRklYTUUgaGVyZSBzaG91bGQgYmUgYSBzZWdtZW50ZWQgYWRkcmVzcyBpbiBzdGVhZCBvZiBscFdJSGRyICovCi0KLQkJaWYgKFdBVkVfTm90aWZ5Q2xpZW50KHdEZXZJRCwgV0lNX0RBVEEsIChEV09SRClscFdJSGRyLCAwTCkgIT0gCisJCWlmIChXQVZFX05vdGlmeUNsaWVudCh3RGV2SUQsIFdJTV9EQVRBLCAoRFdPUkQpbHAxNldhdmVIZHIsIGxwV0lIZHItPmR3Qnl0ZXNSZWNvcmRlZCkgIT0gCiAJCQlNTVNZU0VSUl9OT0VSUk9SKSB7CiAJCQlkcHJpbnRmX21jaXdhdmUoc3RkZGViLAkiTGludXggJ3dpZFN0YXJ0JyAvLyBjYW4ndCBub3RpZnkgY2xpZW50ICFcbiIpOwogCQkJcmV0dXJuIE1NU1lTRVJSX0lOVkFMUEFSQU07CiAJCQl9Ci0JCWxwV0lIZHIgPSBscFdJSGRyLT5scE5leHQ7CisJCWxwMTZXYXZlSGRyID0gbHBXSUhkci0+bHAxNk5leHQgOwogCQljb3VudCsrOwogCQl9CiAJZHByaW50Zl9tY2l3YXZlKHN0ZGRlYiwid2lkU3RhcnQgLy8gZW5kIG9mIHJlY29yZGluZyAhXG4iKTsKQEAgLTE2OTcsNyArMTczNiw3IEBACiAJCWNhc2UgV0lETV9DTE9TRToKIAkJCXJldHVybiB3aWRDbG9zZSh3RGV2SUQpOwogCQljYXNlIFdJRE1fQUREQlVGRkVSOgotCQkJcmV0dXJuIHdpZEFkZEJ1ZmZlcih3RGV2SUQsIChMUFdBVkVIRFIpUFRSX1NFR19UT19MSU4oZHdQYXJhbTEpLCBkd1BhcmFtMik7CisJCQlyZXR1cm4gd2lkQWRkQnVmZmVyKHdEZXZJRCwgZHdQYXJhbTEsIGR3UGFyYW0yKTsKIAkJY2FzZSBXSURNX1BSRVBBUkU6CiAJCQlyZXR1cm4gd2lkUHJlcGFyZSh3RGV2SUQsIChMUFdBVkVIRFIpUFRSX1NFR19UT19MSU4oZHdQYXJhbTEpLCBkd1BhcmFtMik7CiAJCWNhc2UgV0lETV9VTlBSRVBBUkU6CmRpZmYgLS1naXQgYS9tdWx0aW1lZGlhL21jaWFuaW0uYyBiL211bHRpbWVkaWEvbWNpYW5pbS5jCmluZGV4IDZhYjVkZGYuLjU5YTlmNDYgMTAwNjQ0Ci0tLSBhL211bHRpbWVkaWEvbWNpYW5pbS5jCisrKyBiL211bHRpbWVkaWEvbWNpYW5pbS5jCkBAIC05Miw2ICs5Miw5IEBACiAJQW5pbURldlt3RGV2SURdLmR3VG90YWxMZW4gPSAwOwogCUFuaW1EZXZbd0RldklEXS5scGR3VHJhY2tMZW4gPSBOVUxMOwogCUFuaW1EZXZbd0RldklEXS5scGR3VHJhY2tQb3MgPSBOVUxMOworLyoKKyAgIE1vdmVkIHRvIG1tc3lzdGVtLmMgbWNpT3BlbiByb3V0aW5lIAorCiAJaWYgKGR3RmxhZ3MgJiBNQ0lfTk9USUZZKSB7CiAJCWRwcmludGZfbWNpYW5pbShzdGRkZWIsCiAJCQkiQU5JTV9tY2lPcGVuIC8vIE1DSV9OT1RJRllfU1VDQ0VTU0ZVTCAlMDhsWCAhXG4iLCAKQEAgLTk5LDYgKzEwMiw3IEBACiAJCW1jaURyaXZlck5vdGlmeSgoSFdORDE2KUxPV09SRChscFBhcm1zLT5kd0NhbGxiYWNrKSwgCiAJCQlBbmltRGV2W3dEZXZJRF0ud05vdGlmeURldmljZUlELCBNQ0lfTk9USUZZX1NVQ0NFU1NGVUwpOwogCQl9CisqLwogIAlyZXR1cm4gMDsKICNlbHNlCiAJcmV0dXJuIE1DSUVSUl9IQVJEV0FSRTsKZGlmZiAtLWdpdCBhL211bHRpbWVkaWEvbWNpY2RhLmMgYi9tdWx0aW1lZGlhL21jaWNkYS5jCmluZGV4IDQyMTM5MzMuLmJmZGUwY2MgMTAwNjQ0Ci0tLSBhL211bHRpbWVkaWEvbWNpY2RhLmMKKysrIGIvbXVsdGltZWRpYS9tY2ljZGEuYwpAQCAtMjcwLDYgKzI3MCwxMCBAQAogCQlkcHJpbnRmX2NkYXVkaW8oc3RkZGViLCJDREFVRElPX21jaU9wZW4gLy8gZXJyb3IgcmVhZGluZyBUcmFja3NJbmZvICFcbiIpOwogLyoJCXJldHVybiBNQ0lFUlJfSU5URVJOQUw7ICovCiAJCX0KKworLyoKKyAgIE1vdmVkIHRvIG1tc3lzdGVtLmMgbWNpT3BlbiByb3V0aW5lCisKIAlpZiAoZHdGbGFncyAmIE1DSV9OT1RJRlkpIHsKICAgICAgICAgCWRwcmludGZfY2RhdWRpbyhzdGRkZWIsCiAJCQkiQ0RBVURJT19tY2lPcGVuIC8vIE1DSV9OT1RJRllfU1VDQ0VTU0ZVTCAlMDhsWCAhXG4iLCAKQEAgLTI3Nyw2ICsyODEsNyBAQAogCQltY2lEcml2ZXJOb3RpZnkoKEhXTkQxNilMT1dPUkQobHBQYXJtcy0+ZHdDYWxsYmFjayksIAogCQkJQ0RBRGV2W3dEZXZJRF0ud05vdGlmeURldmljZUlELCBNQ0lfTk9USUZZX1NVQ0NFU1NGVUwpOwogCQl9CisqLwogIAlyZXR1cm4gMDsKICNlbHNlCiAJcmV0dXJuIE1DSUVSUl9IQVJEV0FSRTsKZGlmZiAtLWdpdCBhL211bHRpbWVkaWEvbWNpc3RyaW5nLmMgYi9tdWx0aW1lZGlhL21jaXN0cmluZy5jCmluZGV4IGJlNmM3MDYuLjM2ZDMzODkgMTAwNjQ0Ci0tLSBhL211bHRpbWVkaWEvbWNpc3RyaW5nLmMKKysrIGIvbXVsdGltZWRpYS9tY2lzdHJpbmcuYwpAQCAtNiw2ICs2LDExIEBACiAvKiBGSVhNRTogc3BlY2lhbCBjb21tYW5kcyBvZiBkZXZpY2UgZHJpdmVycyBzaG91bGQgYmUgaGFuZGxlZCBieSB0aG9zZSBkcml2ZXJzCiAgKi8KIAorLyogRklYTUU6IHRoaXMgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCBhbGxvdyBjb21tYW5kcyBsaWtlCisgKiBjYXBhYmlsaXR5IDxmaWxlbmFtZT4gY2FuIHBsYXkKKyAqIHdoaWNoIGlzIGFsbG93ZWQgYnkgdGhlIE1DSSBzdGFuZGFyZC4KKyAqLworCiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KQEAgLTU3LDcgKzYyLDggQEAKIC8qIHN0YW5kYXJkIGZ1bmN0aW9ucGFyYW1ldGVycyBmb3IgYWxsIGZ1bmN0aW9ucyAqLwogI2RlZmluZSBfTUNJU1RSX1BST1RPXyBcCiAJV09SRCB3RGV2SUQsV09SRCB1RGV2VHlwLExQU1RSIGxwc3RyUmV0dXJuU3RyaW5nLFVJTlQxNiB1UmV0dXJuTGVuZ3RoLFwKLQlMUENTVFIgZGV2LExQU1RSICprZXl3b3JkcyxVSU5UMTYgbnJvZmtleXdvcmRzLERXT1JEIGR3RmxhZ3MKKwlMUENTVFIgZGV2LExQU1RSICprZXl3b3JkcyxVSU5UMTYgbnJvZmtleXdvcmRzLERXT1JEIGR3RmxhZ3MsXAorICAgICAgICBIV05EMTYgaHduZENhbGxiYWNrCiAKIC8qIGNvcHkgc3RyaW5nIHRvIHJldHVybiBwb2ludGVyIGluY2x1ZGluZyBuZWNlc3NhcnkgY2hlY2tzIAogICogZm9yIHVzZSBpbiBtY2lTZW5kU3RyaW5nKCkKQEAgLTM0MCw3ICszNDYsNyBAQAogCX0KIAlHZXREcnYod0RldklEKS0+d1R5cGUJCT0gdURldlR5cDsKIAlHZXREcnYod0RldklEKS0+d0RldmljZUlECT0gMDsgIC8qIEZJWE1FPyBmb3IgbXVsdGlwbGUgZGV2aWNlcyAqLwotCXBVLT5vcGVuUGFyYW1zLmR3Q2FsbGJhY2sJPSAwOworCXBVLT5vcGVuUGFyYW1zLmR3Q2FsbGJhY2sJPSBod25kQ2FsbGJhY2sgOwogCXBVLT5vcGVuUGFyYW1zLndEZXZpY2VJRAk9IHdEZXZJRDsKIAlwVS0+b3ZseW9wZW5QYXJhbXMuZHdTdHlsZQk9IDA7IAogCXBVLT5hbmltb3BlblBhcmFtcy5kd1N0eWxlCT0gMDsgCkBAIC01NDMsNyArNTQ5LDcgQEAKIAlNQ0lfU1RBVFVTX1BBUk1TCSpzdGF0dXNQYXJhbXMgPSBTRUdQVFJfTkVXKE1DSV9TVEFUVVNfUEFSTVMpOwogCWludAkJCXR5cGUgPSAwLGkscmVzLHRpbWVmOwogCi0Jc3RhdHVzUGFyYW1zLT5kd0NhbGxiYWNrID0gMDsKKwlzdGF0dXNQYXJhbXMtPmR3Q2FsbGJhY2sgPSBod25kQ2FsbGJhY2s7CiAJZHdGbGFncwl8PSBNQ0lfU1RBVFVTX0lURU07CiAJcmVzID0gX01DSVNUUl9kZXRlcm1pbmVfdGltZWZvcm1hdChkZXYsd0RldklELHVEZXZUeXAsJnRpbWVmKTsKIAlpZiAocmVzKSByZXR1cm4gcmVzOwpAQCAtNjcyLDcgKzY3OCw3IEBACiAgICAgICAgIHVuaW9uIFUgKnBVID0gU0VHUFRSX05FVyh1bmlvbiBVKTsKIAlpbnQJaSxyZXM7CiAKLQlwVS0+c2V0UGFyYW1zLmR3Q2FsbGJhY2sgPSAwOworCXBVLT5zZXRQYXJhbXMuZHdDYWxsYmFjayA9IGh3bmRDYWxsYmFjazsKIAlpID0gMDsKIAl3aGlsZSAoaTxucm9ma2V5d29yZHMpIHsKIAkJRkxBRzIoImRvb3IiLCJvcGVuIixNQ0lfU0VUX0RPT1JfT1BFTik7CkBAIC05MzEsNyArOTM3LDcgQEAKIAlNQ0lfR0VUREVWQ0FQU19QQVJNUyAqZ2RjUGFyYW1zID0gU0VHUFRSX05FVyhNQ0lfR0VUREVWQ0FQU19QQVJNUyk7CiAJaW50CXR5cGU9MCxpLHJlczsKIAotCWdkY1BhcmFtcy0+ZHdDYWxsYmFjayA9IDA7CisJZ2RjUGFyYW1zLT5kd0NhbGxiYWNrID0gaHduZENhbGxiYWNrOwogCWlmICghbnJvZmtleXdvcmRzKQogCQlyZXR1cm4gTUNJRVJSX01JU1NJTkdfU1RSSU5HX0FSR1VNRU5UOwogCS8qIHdlbGwgLCB0aGF0cyBkZWZhdWx0ICovCkBAIC05OTUsNyArMTAwMSw3IEBACiB7CiAgICAgTUNJX0dFTkVSSUNfUEFSTVMgKmdlblBhcmFtcyA9IFNFR1BUUl9ORVcoTUNJX0dFTkVSSUNfUEFSTVMpOwogICAgIGludAlyZXM7Ci0gICAgZ2VuUGFyYW1zLT5kd0NhbGxiYWNrID0gMDsKKyAgICBnZW5QYXJhbXMtPmR3Q2FsbGJhY2sgPSBod25kQ2FsbGJhY2s7CiAgICAgX01DSV9DQUxMX0RSSVZFUiggTUNJX1JFU1VNRSwgU0VHUFRSX0dFVChnZW5QYXJhbXMpICk7CiAgICAgcmV0dXJuIHJlczsKIH0KQEAgLTEwMDYsNyArMTAxMiw3IEBACiB7CiAgICAgTUNJX0dFTkVSSUNfUEFSTVMgKmdlblBhcmFtcyA9IFNFR1BUUl9ORVcoTUNJX0dFTkVSSUNfUEFSTVMpOwogICAgIGludCByZXM7Ci0gICAgZ2VuUGFyYW1zLT5kd0NhbGxiYWNrID0gMDsKKyAgICBnZW5QYXJhbXMtPmR3Q2FsbGJhY2sgPSBod25kQ2FsbGJhY2s7CiAgICAgX01DSV9DQUxMX0RSSVZFUiggTUNJX1BBVVNFLCBTRUdQVFJfR0VUKGdlblBhcmFtcykgKTsKICAgICByZXR1cm4gcmVzOwogfQpAQCAtMTAxNyw3ICsxMDIzLDcgQEAKIHsKICAgICBNQ0lfR0VORVJJQ19QQVJNUyAqZ2VuUGFyYW1zID0gU0VHUFRSX05FVyhNQ0lfR0VORVJJQ19QQVJNUyk7CiAgICAgaW50IHJlczsKLSAgICBnZW5QYXJhbXMtPmR3Q2FsbGJhY2sgPSAwOworICAgIGdlblBhcmFtcy0+ZHdDYWxsYmFjayA9IGh3bmRDYWxsYmFjazsKICAgICBfTUNJX0NBTExfRFJJVkVSKCBNQ0lfU1RPUCwgU0VHUFRSX0dFVChnZW5QYXJhbXMpICk7CiAgICAgcmV0dXJuIHJlczsKIH0KQEAgLTEwNjAsNyArMTA2Niw3IEBACiAJCW5yYXJncz0xOwogCQlicmVhazsKIAl9Ci0JcmVjb3JkUGFyYW1zLT5kd0NhbGxiYWNrID0gMDsKKwlyZWNvcmRQYXJhbXMtPmR3Q2FsbGJhY2sgPSBod25kQ2FsbGJhY2s7CiAJaSA9IDA7CiAJd2hpbGUgKGk8bnJvZmtleXdvcmRzKSB7CiAJCWlmICghc3RyY21wKGtleXdvcmRzW2ldLCJ0byIpICYmIChpKzE8bnJvZmtleXdvcmRzKSkgewpAQCAtMTE0OSw3ICsxMTU1LDcgQEAKIAkJbnJhcmdzPTE7CiAJCWJyZWFrOwogCX0KLQlwVS0+cGxheVBhcmFtcy5kd0NhbGxiYWNrPTA7CisJcFUtPnBsYXlQYXJhbXMuZHdDYWxsYmFjaz1od25kQ2FsbGJhY2s7CiAJaT0wOwogCXdoaWxlIChpPG5yb2ZrZXl3b3JkcykgewogCQlpZiAoIXN0cmNtcChrZXl3b3Jkc1tpXSwidG8iKSAmJiAoaSsxPG5yb2ZrZXl3b3JkcykpIHsKQEAgLTEyNDYsNyArMTI1Miw3IEBACiAJCW5yYXJncz0xOwogCQlicmVhazsKIAl9Ci0Jc2Vla1BhcmFtcy0+ZHdDYWxsYmFjaz0wOworCXNlZWtQYXJhbXMtPmR3Q2FsbGJhY2s9aHduZENhbGxiYWNrOwogCWk9MDsKIAl3aGlsZSAoaTxucm9ma2V5d29yZHMpIHsKIAkJaWYgKAkhU1RSQ01QKGtleXdvcmRzW2ldLCJ0byIpICYmIChpKzE8bnJvZmtleXdvcmRzKSkgewpAQCAtMjE1Nyw4ICsyMTYzLDcgQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAJCWlmICghU1RSQ01QKGtleXdvcmRzW2ldLCJub3RpZnkiKSkgewotCQkJLyogaG93IHNob3VsZCB3ZSBjYWxsYmFjaz8gIEkgZG9uJ3Qga25vdy4gKi8KLQkJCS8qZHdGbGFncyB8PSBNQ0lfTk9USUZZOyovCisJCSAgICAgICAgZHdGbGFncyB8PSBNQ0lfTk9USUZZOwogCQkJbWVtY3B5KGtleXdvcmRzK2ksa2V5d29yZHMrKGkrMSksKG5yb2ZrZXl3b3Jkcy1pLTEpKnNpemVvZihjaGFyICopKTsKIAkJCW5yb2ZrZXl3b3Jkcy0tOwogCQkJY29udGludWU7CkBAIC0yMTgxLDcgKzIxODYsNyBAQAogCQkJaWYgKCFNTVNZU1RFTV9EZXZJRFZhbGlkKHdEZXZJRCkpIHsKIAkJCQlkcHJpbnRmX21jaShzdGRkZWIsIF9fRklMRV9fIjptY2lTZW5kU3RyaW5nOk1BWE1DSURSSVZFUlMgcmVhY2hlZCFcbiIpOwogCQkJCWZyZWUoa2V5d29yZHMpO2ZyZWUoY21kKTsKLQkJCQlyZXR1cm4gTUNJRVJSX0lOVEVSTkFMOworCQkJCXJldHVybiBNQ0lFUlJfSU5WQUxJRF9ERVZJQ0VfTkFNRTsKIAkJCX0KIAkJfQogCQl1RGV2VHlwPUdldERydih3RGV2SUQpLT53VHlwZTsKQEAgLTIxOTIsNyArMjE5Nyw3IEBACiAgCQkJcmVzPU1DSVNUUl9jbWR0YWJsZVtpXS5mdW4oCiAgCQkJCXdEZXZJRCx1RGV2VHlwLGxwc3RyUmV0dXJuU3RyaW5nLAogIAkJCQl1UmV0dXJuTGVuZ3RoLGRldiwoTFBTVFIqKWtleXdvcmRzLG5yb2ZrZXl3b3JkcywKLSAJCQkJZHdGbGFncworIAkJCQlkd0ZsYWdzLGh3bmRDYWxsYmFjawogIAkJCSk7CiAgCQkJYnJlYWs7CiAgCQl9CmRpZmYgLS1naXQgYS9tdWx0aW1lZGlhL21pZGkuYyBiL211bHRpbWVkaWEvbWlkaS5jCmluZGV4IDQ3MDZhNDUuLjczODRmOGQgMTAwNjQ0Ci0tLSBhL211bHRpbWVkaWEvbWlkaS5jCisrKyBiL211bHRpbWVkaWEvbWlkaS5jCkBAIC05MSwxNCArOTEsNDIgQEAKIHN0YXRpYyBEV09SRCBNSURJX05vdGlmeUNsaWVudChVSU5UMTYgd0RldklELCBXT1JEIHdNc2csIAogCQkJCURXT1JEIGR3UGFyYW0xLCBEV09SRCBkd1BhcmFtMikKIHsKKwlkcHJpbnRmX21pZGkoc3RkZGViLCJNSURJX05vdGlmeUNsaWVudCAvLyB3RGV2SUQgPSAlMDRYIHdNc2cgPSAlZCBkd1Bhcm0xID0gJTA0bFggZHdQYXJhbTIgPSAlMDRsWFxuIix3RGV2SUQsIHdNc2csIGR3UGFyYW0xLCBkd1BhcmFtMik7CisKICNpZiBkZWZpbmVkKGxpbnV4KSB8fCBkZWZpbmVkKF9fRnJlZUJTRF9fKQorCisJc3dpdGNoICh3TXNnKSB7CisJY2FzZSBNT01fT1BFTjoKKwljYXNlIE1PTV9DTE9TRToKKwljYXNlIE1PTV9ET05FOgorCSAgaWYgKHdEZXZJRCA+IE1BWF9NSURJT1VURFJWKSByZXR1cm4gTUNJRVJSX0lOVEVSTkFMOworCSAgCisJICBpZiAoTWlkaU91dERldlt3RGV2SURdLndGbGFncyAhPSBEQ0JfTlVMTCAmJiAhRHJpdmVyQ2FsbGJhY2soCisJCU1pZGlPdXREZXZbd0RldklEXS5taWRpRGVzYy5kd0NhbGxiYWNrLCAKKwkJTWlkaU91dERldlt3RGV2SURdLndGbGFncywgCisJCU1pZGlPdXREZXZbd0RldklEXS5taWRpRGVzYy5oTWlkaSwgCisgICAgICAgICAgICAgICAgd01zZywgCisJCU1pZGlPdXREZXZbd0RldklEXS5taWRpRGVzYy5kd0luc3RhbmNlLCAKKyAgICAgICAgICAgICAgICBkd1BhcmFtMSwgCisgICAgICAgICAgICAgICAgZHdQYXJhbTIpKSB7CisJICAgIGRwcmludGZfbWlkaShzdGRkZWIsIk1JRElfTm90aWZ5Q2xpZW50IC8vIGNhbid0IG5vdGlmeSBjbGllbnQgIVxuIik7CisJICAgIHJldHVybiBNTVNZU0VSUl9OT0VSUk9SOworCSAgfQorCSAgYnJlYWs7CisKKwljYXNlIE1JTV9PUEVOOgorCWNhc2UgTUlNX0NMT1NFOgorCSAgaWYgKHdEZXZJRCA+IE1BWF9NSURJSU5EUlYpIHJldHVybiBNQ0lFUlJfSU5URVJOQUw7CisJICAKIAlpZiAoTWlkaUluRGV2W3dEZXZJRF0ud0ZsYWdzICE9IERDQl9OVUxMICYmICFEcml2ZXJDYWxsYmFjaygKIAkJTWlkaUluRGV2W3dEZXZJRF0ubWlkaURlc2MuZHdDYWxsYmFjaywgTWlkaUluRGV2W3dEZXZJRF0ud0ZsYWdzLCAKIAkJTWlkaUluRGV2W3dEZXZJRF0ubWlkaURlc2MuaE1pZGksIHdNc2csIAogCQlNaWRpSW5EZXZbd0RldklEXS5taWRpRGVzYy5kd0luc3RhbmNlLCBkd1BhcmFtMSwgZHdQYXJhbTIpKSB7Ci0JCWRwcmludGZfbWlkaShzdGRkZWIsICJNSURJX05vdGlmeUNsaWVudCAvLyBjYW4ndCBub3RpZnkgY2xpZW50ICFcbiIpOworCSAgICBkcHJpbnRmX21jaXdhdmUoc3RkZGViLCJNSURJX05vdGlmeUNsaWVudCAvLyBjYW4ndCBub3RpZnkgY2xpZW50ICFcbiIpOwogCQlyZXR1cm4gTU1TWVNFUlJfTk9FUlJPUjsKIAkJfQorCSAgYnJlYWs7CisJfQogICAgICAgICByZXR1cm4gMDsKICNlbHNlCiAJcmV0dXJuIE1NU1lTRVJSX05PVEVOQUJMRUQ7CkBAIC0yOTMsNiArMzIxLDcgQEAKIAkJTUNJTWlkaURldlt3RGV2SURdLmZTaGFyZWFibGUgPSBkd0ZsYWdzICYgTUNJX09QRU5fU0hBUkVBQkxFOwogCQlNQ0lNaWRpRGV2W3dEZXZJRF0uaE1pZGlIZHIgPSBVU0VSX0hFQVBfQUxMT0Moc2l6ZW9mKE1JRElIRFIpKTsKIAkJfQorCiAJZHByaW50Zl9taWRpKHN0ZGRlYiwgIk1JRElfbWNpT3BlbiAvLyB3RGV2SUQ9JTA0WFxuIiwgd0RldklEKTsKIC8qCWxwUGFybXMtPndEZXZpY2VJRCA9IHdEZXZJRDsqLwogCWRwcmludGZfbWlkaShzdGRkZWIsICJNSURJX21jaU9wZW4gLy8gbHBQYXJtcy0+d0RldklEPSUwNFhcbiIsIGxwUGFybXMtPndEZXZpY2VJRCk7CkBAIC0zNTIsMTUgKzM4MSwxNiBAQAogCQkJCShMUFNUUikmY2tNYWluUklGRi5ja2lkLCAoTFBTVFIpJmNrTWFpblJJRkYuZmNjVHlwZSwKIAkJCQlja01haW5SSUZGLmNrc2l6ZSk7CiAJCX0KKwogCWR3UmV0ID0gbW9kTWVzc2FnZSh3RGV2SUQsIE1PRE1fT1BFTiwgMCwgKERXT1JEKSZNaWRpRGVzYywgQ0FMTEJBQ0tfTlVMTCk7Ci0vKglkd1JldCA9IG1pZE1lc3NhZ2Uod0RldklELCBNSURNX09QRU4sIDAsIChEV09SRCkmTWlkaURlc2MsIENBTExCQUNLX05VTEwpOyAqLworLyoJZHdSZXQgPSBtaWRNZXNzYWdlKHdEZXZJRCwgTUlETV9PUEVOLCAwLCAoRFdPUkQpJk1pZGlEZXNjLCBDQUxMQkFDS19OVUxMKTsqLworCiAJcmV0dXJuIDA7CiAjZWxzZQogCXJldHVybiBNTVNZU0VSUl9OT1RFTkFCTEVEOwogI2VuZGlmCiB9CiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIAkJCQlNSURJX21jaVN0b3AJCQlbaW50ZXJuYWxdCiAqLwpAQCAtODY4LDcgKzg5OCwxMiBAQAogc3RhdGljIERXT1JEIG1pZEdldERldkNhcHMoV09SRCB3RGV2SUQsIExQTUlESUlOQ0FQUyBscENhcHMsIERXT1JEIGR3U2l6ZSkKIHsKIAlkcHJpbnRmX21pZGkoc3RkZGViLCAibWlkR2V0RGV2Q2FwcyglMDRYLCAlcCwgJTA4bFgpO1xuIiwgd0RldklELCBscENhcHMsIGR3U2l6ZSk7Ci0JcmV0dXJuIE1NU1lTRVJSX05PVEVOQUJMRUQ7CisJbHBDYXBzLT53TWlkID0gMHgwMEZGOyAJICAgICAgICAvKiBNYW51ZmFjIElEICovCisJbHBDYXBzLT53UGlkID0gMHgwMDAxOyAJICAgICAgICAvKiBQcm9kdWN0IElEICovCisJbHBDYXBzLT52RHJpdmVyVmVyc2lvbiA9IDB4MDAxOyAvKiBQcm9kdWN0IFZlcnNpb24gKi8KKwlzdHJjcHkobHBDYXBzLT5zelBuYW1lLCAiTGludXggTUlESUlOIERyaXZlciIpOworCisJcmV0dXJuIE1NU1lTRVJSX05PRVJST1I7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTA1MSw3ICsxMDg2LDIxIEBACiBzdGF0aWMgRFdPUkQgbW9kR2V0RGV2Q2FwcyhXT1JEIHdEZXZJRCwgTFBNSURJT1VUQ0FQUyBscENhcHMsIERXT1JEIGR3U2l6ZSkKIHsKIAlkcHJpbnRmX21pZGkoc3RkZGViLCAibW9kR2V0RGV2Q2FwcyglMDRYLCAlcCwgJTA4bFgpO1xuIiwgd0RldklELCBscENhcHMsIGR3U2l6ZSk7Ci0JcmV0dXJuIE1NU1lTRVJSX05PVEVOQUJMRUQ7CisJbHBDYXBzLT53TWlkID0gMHgwMEZGOyAJLyogTWFudWZhYyBJRCAqLworCWxwQ2Fwcy0+d1BpZCA9IDB4MDAwMTsgCS8qIFByb2R1Y3QgSUQgKi8KKwlscENhcHMtPnZEcml2ZXJWZXJzaW9uID0gMHgwMDE7IC8qIFByb2R1Y3QgVmVyc2lvbiAqLworCXN0cmNweShscENhcHMtPnN6UG5hbWUsICJMaW51eCBNSURJT1VUIERyaXZlciB2ZXJzaW9uIDAuMDEiKTsKKy8qIEZJWE1FCisgICBWYWx1ZXMgYXJlIHRoZSBzYW1lIGFzIEkgZ2V0IHdpdGggQm9ybGFuZCBUQyA0LjUKKyovCisKKwlscENhcHMtPndUZWNobm9sb2d5ID0gTU9EX0ZNU1lOVEg7CisJbHBDYXBzLT53Vm9pY2VzICAgICA9IDE0OyAgICAgICAvKiBtYWtlIGl0IGlvY3RsICovCisJbHBDYXBzLT53Tm90ZXMgICAgICA9IDE0OyAgICAgICAvKiBtYWtlIGl0IGlvY3RsICovCisJbHBDYXBzLT5kd1N1cHBvcnQgICA9IE1JRElDQVBTX1ZPTFVNRXxNSURJQ0FQU19MUlZPTFVNRTsKKwlkcHJpbnRmX21pZGkoc3RkZGViLCJMaW51eCBtb2RHZXREZXZDYXBzIC8vIHRlY2huID0gJWQgdm9pY2VzPSVkIG5vdGVzID0gJWQgc3VwcG9ydCA9ICVsZFxuIixscENhcHMtPndUZWNobm9sb2d5LGxwQ2Fwcy0+d1ZvaWNlcyxscENhcHMtPndOb3RlcyxscENhcHMtPmR3U3VwcG9ydCk7CisKKwlyZXR1cm4gTU1TWVNFUlJfTk9FUlJPUjsKIH0KIAogCmRpZmYgLS1naXQgYS9tdWx0aW1lZGlhL21tc3lzdGVtLmMgYi9tdWx0aW1lZGlhL21tc3lzdGVtLmMKaW5kZXggZThkMDk0YS4uNDJlYWNlOSAxMDA2NDQKLS0tIGEvbXVsdGltZWRpYS9tbXN5c3RlbS5jCisrKyBiL211bHRpbWVkaWEvbW1zeXN0ZW0uYwpAQCAtMTIsNiArMTIsNyBAQAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KICNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KICNpbmNsdWRlICJ3aW5kb3dzLmgiCiAjaW5jbHVkZSAid2luLmgiCkBAIC0yODAsMjAgKzI4MSwxOSBAQAogCQkJZHByaW50Zl9tbXN5cyhzdGRkZWIsICJEcml2ZXJDYWxsYmFjaygpIC8vIENBTExCQUNLX05VTEwgIVxuIik7CiAJCQlicmVhazsKIAkJY2FzZSBEQ0JfV0lORE9XOgotCQkJZHByaW50Zl9tbXN5cyhzdGRkZWIsICJEcml2ZXJDYWxsYmFjaygpIC8vIENBTExCQUNLX1dJTkRPVyA9ICUwNGxYIVxuIixkd0NhbGxCYWNrKTsKKwkJCWRwcmludGZfbW1zeXMoc3RkZGViLCAiRHJpdmVyQ2FsbGJhY2soKSAvLyBDQUxMQkFDS19XSU5ET1cgPSAlMDRsWCBoYW5kbGUgPSAlMDRYIVxuIixkd0NhbGxCYWNrLGhEZXYpOwogCQkJaWYgKCFJc1dpbmRvdzMyKGR3Q2FsbEJhY2spKSByZXR1cm4gRkFMU0U7Ci0JCQlkcHJpbnRmX21tc3lzKHN0ZGRlYiwgIkRyaXZlckNhbGxiYWNrKCkgLy8gRGV2aWNlIEhhbmRsZSA9ICUwNFhcbiIsIGhEZXYpOwogCQkJbHBEZXNjID0gKExQV0FWRU9QRU5ERVNDKSBVU0VSX0hFQVBfTElOX0FERFIoaERldik7CiAJCQlpZiAobHBEZXNjID09IE5VTEwpIHJldHVybiBGQUxTRTsKIAotCQkJZHByaW50Zl9tbXN5cyhzdGRkZWIsICJEcml2ZXJDYWxsYmFjaygpIC8vIEJlZm9yZSBQb3N0TWVzc2FnZTE2XG4iKTsKIAkJCVBvc3RNZXNzYWdlMTYoKEhXTkQxNilkd0NhbGxCYWNrLCB3TXNnLCBoRGV2LCBkd1BhcmFtMSk7CiAJCQlicmVhazsKIAkJY2FzZSBEQ0JfVEFTSzoKIAkJCWRwcmludGZfbW1zeXMoc3RkZGViLCAiRHJpdmVyQ2FsbGJhY2soKSAvLyBDQUxMQkFDS19UQVNLICFcbiIpOwotCQkJYnJlYWs7CisJCQlyZXR1cm4gRkFMU0U7CiAJCWNhc2UgRENCX0ZVTkNUSU9OOgogCQkJZHByaW50Zl9tbXN5cyhzdGRkZWIsICJEcml2ZXJDYWxsYmFjaygpIC8vIENBTExCQUNLX0ZVTkNUSU9OICFcbiIpOworCQkJQ2FsbFRvMTZfd29yZF93d2xsbCgoRkFSUFJPQzE2KWR3Q2FsbEJhY2ssaERldix3TXNnLGR3VXNlcixkd1BhcmFtMSxkd1BhcmFtMik7CiAJCQlicmVhazsKIAkJfQogCXJldHVybiBUUlVFOwpAQCAtNzE1LDcgKzcxNSw3IEBACiAJCQl1RGV2VHlwID0gTE9XT1JEKChEV09SRClscFBhcm1zLT5scHN0ckRldmljZVR5cGUpOwogIAkJCUdldE9wZW5EcnYod0RldklEKS0+bHBzdHJEZXZpY2VUeXBlPWxwUGFybXMtPmxwc3RyRGV2aWNlVHlwZTsKIAkJfSBlbHNlIHsKLQkJCWlmIChscFBhcm1zLT5scHN0ckRldmljZVR5cGUgPT0gTlVMTCkgcmV0dXJuIE1DSUVSUl9JTlRFUk5BTDsKKwkJCWlmIChscFBhcm1zLT5scHN0ckRldmljZVR5cGUgPT0gKFNFR1BUUilOVUxMKSByZXR1cm4gTUNJRVJSX0lOVEVSTkFMOwogCQkJZHByaW50Zl9tbXN5cyhzdGRkZWIsICJNQ0lfT1BFTiAvLyBEZXY9JyVzJyAhXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIqKVBUUl9TRUdfVE9fTElOKGxwUGFybXMtPmxwc3RyRGV2aWNlVHlwZSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgR2V0T3BlbkRydih3RGV2SUQpLT5scHN0ckRldmljZVR5cGUgPSBTRUdQVFJfR0VUKApAQCAtNzcwLDExICs3NzAsMTQgQEAKIAkgIHJldHVybiBNQ0lFUlJfSU5WQUxJRF9ERVZJQ0VfTkFNRTsKICAgICAgICAgfQogCisKKwlpZiAoZHdQYXJhbSZNQ0lfTk9USUZZKQorCSAgbWNpRHJpdmVyTm90aWZ5KGxwUGFybXMtPmR3Q2FsbGJhY2ssd0RldklELAorCQkJICAoZHdyZXQ9PTA/TUNJX05PVElGWV9TVUNDRVNTRlVMOk1DSV9OT1RJRllfRkFJTFVSRSkpOworCiAJLyogb25seSBoYW5kbGVkIGRldmljZXMgZmFsbCB0aHJvdWdoICovCiAJZHByaW50Zl9tbXN5cyhzdGRkZWIsICJNQ0lfT1BFTiAvLyB3RGV2SUQgPSAlMDRYIHdEZXZpY2VJRCA9ICVkIGR3cmV0ID0gJWxkXG4iLHdEZXZJRCwgbHBQYXJtcy0+d0RldmljZUlELCBkd3JldCk7CiAJcmV0dXJuIGR3cmV0OwotCi0vKglyZXR1cm4gTUNJRVJSX0lOVEVSTkFMOyAqLwogfQogCiAKQEAgLTgxMSw2ICs4MTQsMTEgQEAKIAkJCWR3UmV0ID0gTUNJRVJSX0RFVklDRV9OT1RfSU5TVEFMTEVEOwogCQl9CiAJR2V0RHJ2KHdEZXZJRCktPndUeXBlID0gMDsKKworCWlmIChkd1BhcmFtJk1DSV9OT1RJRlkpCisJICBtY2lEcml2ZXJOb3RpZnkobHBQYXJtcy0+ZHdDYWxsYmFjayx3RGV2SUQsCisJCQkgIChkd1JldD09MD9NQ0lfTk9USUZZX1NVQ0NFU1NGVUw6TUNJX05PVElGWV9GQUlMVVJFKSk7CisKIAlkcHJpbnRmX21tc3lzKHN0ZGRlYiwgIm1jaUNsb3NlKCkgLy8gcmV0dXJucyAlbGRcbiIsZHdSZXQpOwogCXJldHVybiBkd1JldDsKIH0KQEAgLTEwNDYsNyArMTA1NCw3IEBACiBVSU5UMTYgbWlkaU91dEdldERldkNhcHMoVUlOVDE2IHVEZXZpY2VJRCwgTUlESU9VVENBUFMgKiBscENhcHMsIFVJTlQxNiB1U2l6ZSkKIHsKIAlkcHJpbnRmX21tc3lzKHN0ZGRlYiwgIm1pZGlPdXRHZXREZXZDYXBzXG4iKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gbW9kTWVzc2FnZSh1RGV2aWNlSUQsTU9ETV9HRVRERVZDQVBTLDAsKERXT1JEKWxwQ2Fwcyx1U2l6ZSk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMTMwNyw3ICsxMzE1LDcgQEAKICAgICBMUE1JRElJTkNBUFMgbHBDYXBzLCBVSU5UMTYgdVNpemUpCiB7CiAJZHByaW50Zl9tbXN5cyhzdGRkZWIsICJtaWRpSW5HZXREZXZDYXBzXG4iKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gbWlkTWVzc2FnZSh1RGV2aWNlSUQsTUlETV9HRVRERVZDQVBTLDAsKERXT1JEKWxwQ2Fwcyx1U2l6ZSk7OwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTE1OTIsNiArMTYwMCw3IEBACiAJbHBEZXNjLT5scEZvcm1hdCA9IGxwRm9ybWF0OyAgLyogc2hvdWxkIHRoZSBzdHJ1Y3QgYmUgY29waWVkIGlzbyBwb2ludGVyPyAqLwogCWxwRGVzYy0+ZHdDYWxsQmFjayA9IGR3Q2FsbGJhY2s7CiAJbHBEZXNjLT5kd0luc3RhbmNlID0gZHdJbnN0YW5jZTsKKwlpZiAodURldmljZUlEID49IE1BWFdBVkVEUklWRVJTKSB1RGV2aWNlSUQgPSAwOwogCXdoaWxlKHVEZXZpY2VJRCA8IE1BWFdBVkVEUklWRVJTKSB7CiAJCWR3UmV0ID0gd29kTWVzc2FnZSh1RGV2aWNlSUQsIFdPRE1fT1BFTiwgCiAJCQlscERlc2MtPmR3SW5zdGFuY2UsIChEV09SRClscDE2RGVzYywgZHdGbGFncyk7CkBAIC0xODk5LDcgKzE5MDgsNyBAQAogCWxwRGVzYy0+dURldmljZUlEID0gdURldmljZUlEOwogCWlmIChkd0ZsYWdzICYgV0FWRV9GT1JNQVRfUVVFUlkpIHsKIAkJZHByaW50Zl9tbXN5cyhzdGRkZWIsICJ3YXZlSW5PcGVuCS8vIEVuZCBvZiBXQVZFX0ZPUk1BVF9RVUVSWSAhXG4iKTsKLQkJd2F2ZUluQ2xvc2UoaFdhdmVJbik7CisJCWR3UmV0ID0gd2F2ZUluQ2xvc2UoaFdhdmVJbik7CiAJCX0KIAlyZXR1cm4gZHdSZXQ7CiB9CkBAIC0xOTM0LDcgKzE5NDMsNyBAQAogCWlmIChscERlc2MgPT0gTlVMTCkgcmV0dXJuIE1NU1lTRVJSX0lOVkFMSEFORExFOwogCWlmIChscFdhdmVJbkhkciA9PSBOVUxMKSByZXR1cm4gTU1TWVNFUlJfSU5WQUxIQU5ETEU7CiAJbHAzMldhdmVJbkhkciA9IFBUUl9TRUdfVE9fTElOKGxwV2F2ZUluSGRyKTsKLQlscDMyV2F2ZUluSGRyLT5scE5leHQgPSBOVUxMOworCWxwMzJXYXZlSW5IZHItPmxwMTZOZXh0ID0gKFNFR1BUUilOVUxMOwogICAgIGxwMzJXYXZlSW5IZHItPmR3Qnl0ZXNSZWNvcmRlZCA9IDA7CiAJZHByaW50Zl9tbXN5cyhzdGRkZWIsICJ3YXZlSW5QcmVwYXJlSGVhZGVyIC8vIGxwRGF0YT0lcCBzaXplPSVsdSBcbiIsIAogCQlscDMyV2F2ZUluSGRyLT5scERhdGEsIGxwMzJXYXZlSW5IZHItPmR3QnVmZmVyTGVuZ3RoKTsKQEAgLTE5NjAsNyArMTk2OSw3IEBACiAJbHAzMldhdmVJbkhkciA9IFBUUl9TRUdfVE9fTElOKGxwV2F2ZUluSGRyKTsKIAlVU0VSX0hFQVBfRlJFRShISVdPUkQoKERXT1JEKWxwMzJXYXZlSW5IZHItPmxwRGF0YSkpOwogCWxwMzJXYXZlSW5IZHItPmxwRGF0YSA9IE5VTEw7Ci0JbHAzMldhdmVJbkhkci0+bHBOZXh0ID0gTlVMTDsKKwlscDMyV2F2ZUluSGRyLT5scDE2TmV4dCA9IChTRUdQVFIpTlVMTDsKIAlyZXR1cm4gd2lkTWVzc2FnZShscERlc2MtPnVEZXZpY2VJRCwgV0lETV9VTlBSRVBBUkUsIGxwRGVzYy0+ZHdJbnN0YW5jZSwgCiAJCQkJCQkJKERXT1JEKWxwV2F2ZUluSGRyLCB1U2l6ZSk7CiB9CkBAIC0xOTgwLDcgKzE5ODksNyBAQAogCWlmIChscERlc2MgPT0gTlVMTCkgcmV0dXJuIE1NU1lTRVJSX0lOVkFMSEFORExFOwogCWlmIChscFdhdmVJbkhkciA9PSBOVUxMKSByZXR1cm4gTU1TWVNFUlJfSU5WQUxIQU5ETEU7CiAJbHAzMldhdmVJbkhkciA9IFBUUl9TRUdfVE9fTElOKGxwV2F2ZUluSGRyKTsKLQlscDMyV2F2ZUluSGRyLT5scE5leHQgPSBOVUxMOworCWxwMzJXYXZlSW5IZHItPmxwMTZOZXh0ID0gKFNFR1BUUilOVUxMOwogICAgIGxwMzJXYXZlSW5IZHItPmR3Qnl0ZXNSZWNvcmRlZCA9IDA7CiAJZHByaW50Zl9tbXN5cyhzdGRkZWIsICJ3YXZlSW5BZGRCdWZmZXIgLy8gbHBEYXRhPSVwIHNpemU9JWx1IFxuIiwgCiAJCWxwMzJXYXZlSW5IZHItPmxwRGF0YSwgbHAzMldhdmVJbkhkci0+ZHdCdWZmZXJMZW5ndGgpOwpkaWZmIC0tZ2l0IGEvb2JqZWN0cy9kYy5jIGIvb2JqZWN0cy9kYy5jCmluZGV4IDRmMjVjOTAuLjAyMTBmYzMgMTAwNjQ0Ci0tLSBhL29iamVjdHMvZGMuYworKysgYi9vYmplY3RzL2RjLmMKQEAgLTMwNSwxMSArMzA1LDExIEBACiAgICAgc3dpdGNoIChkYy0+dy5ST1Btb2RlKQogICAgIHsKICAgICBjYXNlIFIyX0JMQUNLIDoKLQl2YWwuZm9yZWdyb3VuZCA9IEJsYWNrUGl4ZWwoZGlzcGxheSwgRGVmYXVsdFNjcmVlbihkaXNwbGF5KSk7CisJdmFsLmZvcmVncm91bmQgPSBCbGFja1BpeGVsT2ZTY3JlZW4oIHNjcmVlbiApOwogCXZhbC5mdW5jdGlvbiA9IEdYY29weTsKIAlicmVhazsKICAgICBjYXNlIFIyX1dISVRFIDoKLQl2YWwuZm9yZWdyb3VuZCA9IFdoaXRlUGl4ZWwoZGlzcGxheSwgRGVmYXVsdFNjcmVlbihkaXNwbGF5KSk7CisJdmFsLmZvcmVncm91bmQgPSBXaGl0ZVBpeGVsT2ZTY3JlZW4oIHNjcmVlbiApOwogCXZhbC5mdW5jdGlvbiA9IEdYY29weTsKIAlicmVhazsKICAgICBjYXNlIFIyX1hPUlBFTiA6CkBAIC0zMTcsOCArMzE3LDggQEAKIAkvKiBJdCBpcyB2ZXJ5IHVubGlrZWx5IHNvbWVvbmUgd2FudHMgdG8gWE9SIHdpdGggMCAqLwogCS8qIFRoaXMgZml4ZXMgdGhlIHJ1YmJlci1kcmF3aW5ncyBpbiBwYWludGJydXNoICovCiAJaWYgKHZhbC5mb3JlZ3JvdW5kID09IDApCi0JICAgIHZhbC5mb3JlZ3JvdW5kID0gQmxhY2tQaXhlbChkaXNwbGF5LCBEZWZhdWx0U2NyZWVuKGRpc3BsYXkpKQotCQkJICAgIF4gV2hpdGVQaXhlbChkaXNwbGF5LCBEZWZhdWx0U2NyZWVuKGRpc3BsYXkpKTsKKwkgICAgdmFsLmZvcmVncm91bmQgPSBCbGFja1BpeGVsT2ZTY3JlZW4oIHNjcmVlbiApCisJCQkgICAgXiBXaGl0ZVBpeGVsT2ZTY3JlZW4oIHNjcmVlbiApOwogCXZhbC5mdW5jdGlvbiA9IEdYeG9yOwogCWJyZWFrOwogICAgIGRlZmF1bHQgOgpkaWZmIC0tZ2l0IGEvb2JqZWN0cy9mb250LmMgYi9vYmplY3RzL2ZvbnQuYwppbmRleCBlNzljNmI2Li43NWRjZjYzIDEwMDY0NAotLS0gYS9vYmplY3RzL2ZvbnQuYworKysgYi9vYmplY3RzL2ZvbnQuYwpAQCAtNzk3LDYgKzc5Nyw3IEBACiAgICAgSXRhbGljID0gJSAzaVx0IExhc3RDaGFyID0gJTAzaVx0XHQgTWF4Q2hhcldpZHRoID0gJWkKICAgICBVbmRlckxpbmVkID0gJTAxaVx0IERlZmF1bHRDaGFyID0gJTAzaVx0IE92ZXJoYW5nID0gJWkKICAgICBTdHJ1Y2tPdXQgPSAlMDFpXHQgQnJlYWtDaGFyID0gJTAzaVx0IENoYXJTZXQgPSAlaQorICAgIFBpdGNoQW5kRmFtaWx5ID0gJTAyeAogICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgSW50ZXJuYWxMZWFkaW5nID0gJWkKICAgICBBc2NlbnQgPSAlaQpAQCAtODA2LDYgKzgwNyw3IEBACiAgICAgbWV0cmljcy0+dG1JdGFsaWMsIG1ldHJpY3MtPnRtTGFzdENoYXIsIG1ldHJpY3MtPnRtTWF4Q2hhcldpZHRoLAogICAgIG1ldHJpY3MtPnRtVW5kZXJsaW5lZCwgbWV0cmljcy0+dG1EZWZhdWx0Q2hhciwgbWV0cmljcy0+dG1PdmVyaGFuZywKICAgICBtZXRyaWNzLT50bVN0cnVja091dCwgbWV0cmljcy0+dG1CcmVha0NoYXIsIG1ldHJpY3MtPnRtQ2hhclNldCwKKyAgICBtZXRyaWNzLT50bVBpdGNoQW5kRmFtaWx5LAogICAgIG1ldHJpY3MtPnRtSW50ZXJuYWxMZWFkaW5nLAogICAgIG1ldHJpY3MtPnRtQXNjZW50LAogICAgIG1ldHJpY3MtPnRtRGVzY2VudCwKQEAgLTg1MiwxMSArODU0LDExIEBACiAJICAgIEhlYXBGcmVlKFN5c3RlbUhlYXAsIDAsIG9idWYzMik7CiAJfQogICAgIH0KLSAgICBlbHNlCisgICAgZWxzZSAvKiBoYXBwZW5zIHF1aXRlIG9mdGVuIHRvIHdhcnJhbnQgYSBzcGVjaWFsIHRyZWF0bWVudCAqLwogICAgIHsKIAlJTlQzMiBjaFdpZHRoOwogCXJldFZhbCA9IEdldENoYXJXaWR0aDMyQShoZGMsIGZpcnN0Q2hhciwgbGFzdENoYXIsICZjaFdpZHRoICk7Ci0JKmJ1ZmZlciA9IGNoV2lkdGg7CisgICAgICAgKmJ1ZmZlciA9IGNoV2lkdGg7CiAgICAgfQogICAgIHJldHVybiByZXRWYWw7CiB9CkBAIC04NjgsNiArODcwLDcgQEAKIEJPT0wzMiBHZXRDaGFyV2lkdGgzMkEoIEhEQzMyIGhkYywgVUlOVDMyIGZpcnN0Q2hhciwgVUlOVDMyIGxhc3RDaGFyLAogICAgICAgICAgICAgICAgICAgICAgICAgTFBJTlQzMiBidWZmZXIgKQogeworICAgIFVJTlQzMiBpLCBleHRyYTsKICAgICBEQyAqIGRjID0gKERDICopIEdESV9HZXRPYmpQdHIoIGhkYywgRENfTUFHSUMgKTsKICAgICBpZiAoIWRjKQogICAgIHsKQEAgLTg3OSw2ICs4ODIsMTIgQEAKICAgICAgICAgIWRjLT5mdW5jcy0+cEdldENoYXJXaWR0aCggZGMsIGZpcnN0Q2hhciwgbGFzdENoYXIsIGJ1ZmZlcikpCiAgICAgICAgIHJldHVybiBGQUxTRTsKIAorICAgIC8qIGNvbnZlcnQgZGV2aWNlIHVuaXRzIHRvIGxvZ2ljYWwgKi8KKworICAgIGV4dHJhID0gZGMtPnZwb3J0RXh0WCA+PiAxOworICAgIGZvciggaSA9IGZpcnN0Q2hhcjsgaSA8PSBsYXN0Q2hhcjsgaSsrLCBidWZmZXIrKyApCisgICAgICAgICAqYnVmZmVyID0gKCpidWZmZXIgKiBkYy0+d25kRXh0WCArIGV4dHJhKSAvIGRjLT52cG9ydEV4dFg7CisKICAgICByZXR1cm4gVFJVRTsKIH0KIApkaWZmIC0tZ2l0IGEvb2JqZWN0cy9nZGlvYmouYyBiL29iamVjdHMvZ2Rpb2JqLmMKaW5kZXggNTJjOGJkNS4uODEzZmE2ZiAxMDA2NDQKLS0tIGEvb2JqZWN0cy9nZGlvYmouYworKysgYi9vYmplY3RzL2dkaW9iai5jCkBAIC0zNywxOSArMzcsMjMgQEAKIHN0YXRpYyBCUlVTSE9CSiBMdEdyYXlCcnVzaCA9CiB7CiAgICAgeyAwLCBCUlVTSF9NQUdJQywgMSB9LCAgICAgICAgICAgICAvKiBoZWFkZXIgKi8KKy8qIEZJWE1FIDogdGhpcyBzaG91bGQgcGVyaGFwcyBiZSBCU19IQVRDSEVELCBhdCBsZWFzdCBmb3IgMSBiaXRwZXJwaXhlbCAqLwogICAgIHsgQlNfU09MSUQsIFJHQigxOTIsMTkyLDE5MiksIDAgfSAgLyogbG9nYnJ1c2ggKi8KIH07CiAKIHN0YXRpYyBCUlVTSE9CSiBHcmF5QnJ1c2ggPQogewogICAgIHsgMCwgQlJVU0hfTUFHSUMsIDEgfSwgICAgICAgICAgICAgLyogaGVhZGVyICovCisvKiBGSVhNRSA6IHRoaXMgc2hvdWxkIHBlcmhhcHMgYmUgQlNfSEFUQ0hFRCwgYXQgbGVhc3QgZm9yIDEgYml0cGVycGl4ZWwgKi8KICAgICB7IEJTX1NPTElELCBSR0IoMTI4LDEyOCwxMjgpLCAwIH0gIC8qIGxvZ2JydXNoICovCiB9OwogCiBzdGF0aWMgQlJVU0hPQkogRGtHcmF5QnJ1c2ggPQogewogICAgIHsgMCwgQlJVU0hfTUFHSUMsIDEgfSwgICAgICAgICAgLyogaGVhZGVyICovCi0gICAgeyBCU19TT0xJRCwgUkdCKDY0LDY0LDY0KSwgMCB9ICAvKiBsb2dicnVzaCAqLworLyogVGhpcyBpcyBCU19IQVRDSEVELCBmb3IgMSBiaXRwZXJwaXhlbC4gVGhpcyBtYWtlcyB0aGUgc3ByYXkgd29yayBpbiBwYnJ1c2ggKi8KKy8qIE5CX0hBVENIX1NUWUxFUyBpcyBhbiBpbmRleCBpbnRvIEhhdGNoQnJ1c2hlcyAqLworICAgIHsgQlNfSEFUQ0hFRCwgUkdCKDAsMCwwKSwgTkJfSEFUQ0hfU1RZTEVTIH0gIC8qIGxvZ2JydXNoICovCiB9OwogCiBzdGF0aWMgQlJVU0hPQkogQmxhY2tCcnVzaCA9CkBAIC0xMDYsNyArMTEwLDcgQEAKIHN0YXRpYyBGT05UT0JKIFN5c3RlbUZvbnQgPQogewogICAgIHsgMCwgRk9OVF9NQUdJQywgMSB9LAotICAgIHsgMTIsIDAsIDAsIDAsIEZXX0JPTEQsIEZBTFNFLCBGQUxTRSwgRkFMU0UsIEFOU0lfQ0hBUlNFVCwKKyAgICB7IDE2LCAwLCAwLCAwLCBGV19CT0xELCBGQUxTRSwgRkFMU0UsIEZBTFNFLCBBTlNJX0NIQVJTRVQsCiAgICAgICAwLCAwLCBERUZBVUxUX1FVQUxJVFksIFZBUklBQkxFX1BJVENIIHwgRkZfU1dJU1MsICJTeXN0ZW0iIH0KIH07CiAKZGlmZiAtLWdpdCBhL29iamVjdHMvdGV4dC5jIGIvb2JqZWN0cy90ZXh0LmMKaW5kZXggY2U3NTcyYi4uMTc2ZGRkNiAxMDA2NDQKLS0tIGEvb2JqZWN0cy90ZXh0LmMKKysrIGIvb2JqZWN0cy90ZXh0LmMKQEAgLTYwMSwzICs2MDEsMTUgQEAKICAgICBIZWFwRnJlZSggR2V0UHJvY2Vzc0hlYXAoKSwgMCwgcCApOwogICAgIHJldHVybiByZXQ7CiB9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgIEdldFRleHRDaGFyc2V0ICAgIChVU0VSMzIuMjI2KSAoVVNFUi42MTIpCisgKi8KK0lOVDMyIEdldFRleHRDaGFyc2V0MzIoSERDMzIgaGRjKSB7CisgICAgZnByaW50ZihzdGRuaW1wLCJHZXRUZXh0Q2hhcnNldCgweCV4KVxuIixoZGMpOworICAgIHJldHVybiBERUZBVUxUX0NIQVJTRVQ7IC8qIEZJWE1FICovCit9CisKK0lOVDE2IEdldFRleHRDaGFyc2V0MTYoSERDMTYgaGRjKSB7CisgICAgcmV0dXJuIEdldFRleHRDaGFyc2V0MzIoaGRjKTsKK30KZGlmZiAtLWdpdCBhL3Byb2dyYW1zL3dpbmhlbHAvQ2hhbmdlTG9nIGIvcHJvZ3JhbXMvd2luaGVscC9DaGFuZ2VMb2cKaW5kZXggMzg0NWFlMy4uNjM0ODRhZiAxMDA2NDQKLS0tIGEvcHJvZ3JhbXMvd2luaGVscC9DaGFuZ2VMb2cKKysrIGIvcHJvZ3JhbXMvd2luaGVscC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4IEBACitUdWUgSnVuICAzIDA3OjQ3OjQyIDE5OTcgIE1hcmNlbCBCYXVyIDxtYmF1ckBnMjYuZXRoei5jaAorCisJKiBbVmEucmNdIChuZXcpCisJQWRkZWQgVmFsbGFkZXIgKFJ1bWFudHNjaCBMYWRpbikgbGFuZ3VhZ2Ugc3VwcG9ydC4KKwogV2VkIEZlYiAxMiAwMDo1ODozNyAxOTk3ICBFbGtlciBDYXZpbmEgPGVsa2VyQG1haWwuYXNpYW5ldC5pdD4KIAogCSogW0l0LnJjXSAobmV3KQpkaWZmIC0tZ2l0IGEvcHJvZ3JhbXMvd2luaGVscC9NYWtlZmlsZS5pbiBiL3Byb2dyYW1zL3dpbmhlbHAvTWFrZWZpbGUuaW4KaW5kZXggOWE5ZWRmZC4uMGU1ZWExNiAxMDA2NDQKLS0tIGEvcHJvZ3JhbXMvd2luaGVscC9NYWtlZmlsZS5pbgorKysgYi9wcm9ncmFtcy93aW5oZWxwL01ha2VmaWxlLmluCkBAIC03LDcgKzcsNyBAQAogQUxMX0xJQlMgID0gJChXSU5FTElCKSAkKFhfTElCUykgJChYUE1fTElCKSAkKFhMSUIpICQoTERMSUJTKQogUkNGTEFHUyAgID0gLXczMgogCi1MQU5HVUFHRVMgICA9IEVuIERlIEZyIEZpIEtvIEh1IEl0CitMQU5HVUFHRVMgICA9IEVuIERlIEZyIEZpIEtvIEh1IEl0IFZhCiAKICMgSW5zdGFsbGF0aW9uIGluZm9zCiAKZGlmZiAtLWdpdCBhL3Byb2dyYW1zL3dpbmhlbHAvVmEucmMgYi9wcm9ncmFtcy93aW5oZWxwL1ZhLnJjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyZDA0MjQKLS0tIC9kZXYvbnVsbAorKysgYi9wcm9ncmFtcy93aW5oZWxwL1ZhLnJjCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBIZWxwIFZpZXdlcgorICogCisgKiBDb3B5cmlnaHQgMTk5NiBVbHJpY2ggU2NobWlkCisgKgorICogUnVtYW50c2NoIExhZGluIChWYWxsYWRlcikgYnkgbWJhdXJAZzI2LmV0aHouY2gKKyAqCisgKi8KKworLyogVGhpcyBmaWxlIGlzIG5vdCB5ZXQgY29tcGxldGUgISEgKi8KKworI2RlZmluZSBMQU5HVUFHRV9JRCAgICAgICAgICAgICAgICAgIFJsCisjZGVmaW5lIExBTkdVQUdFX05VTUJFUiAgICAgICAgICAgICAgQworCisvKiBNZW51ICovCisKKyNkZWZpbmUgTUVOVV9GSUxFICAgICAgICAgICAgICAgICAgICAiJkRhdG90ZWNhIgorI2RlZmluZSBNRU5VX0ZJTEVfT1BFTiAgICAgICAgICAgICAgICImUml2aXIiCisjZGVmaW5lIE1FTlVfRklMRV9QUklOVCAgICAgICAgICAgICAgIiZTdGFtcGFyIHRlbWEiCisjZGVmaW5lIE1FTlVfRklMRV9QUklOVEVSX1NFVFVQICAgICAgIiZJbnN0YWxsYXppdW4gZGFsIHN0YW1wYWRlci4uLiIKKyNkZWZpbmUgTUVOVV9GSUxFX0VYSVQgICAgICAgICAgICAgICAiJkZpbmlyIgorCisjZGVmaW5lIE1FTlVfRURJVCAgICAgICAgICAgICAgICAgICAgIiZMYXZ1cmFyIgorI2RlZmluZSBNRU5VX0VESVRfQ09QWV9ESUFMT0cgICAgICAgICImQ2FwY2hhciIKKyNkZWZpbmUgTUVOVV9FRElUX0FOTk9UQVRFICAgICAgICAgICAiJkFubm90YXppdW4uLi4iCisKKyNkZWZpbmUgTUVOVV9CT09LTUFSSyAgICAgICAgICAgICAgICAiJk1hcmNhIgorI2RlZmluZSBNRU5VX0JPT0tNQVJLX0RFRklORSAgICAgICAgICImRGVmaW5pci4uLiIKKworI2RlZmluZSBNRU5VX0hFTFAgICAgICAgICAgICAgICAgICAgICImQWf8ZCIKKyNkZWZpbmUgTUVOVV9IRUxQX09OX0hFTFAgICAgICAgICAgICAiJkRvdXZyYXIgbCdhZ/xkIgorI2RlZmluZSBNRU5VX0hFTFBfT05fVE9QICAgICAgICAgICAgICJBZPxuYSBkYSZ2YW50IgorI2RlZmluZSBNRU5VX0hFTFBfSU5GTyAgICAgICAgICAgICAgICJJJm5mdW9ybWF6aXVucyIKKyNkZWZpbmUgTUVOVV9IRUxQX0FCT1VUX1dJTkUgICAgICAgICAiRGF2YXJ0ICZXSU5FIgorCisvKiBTdHJpbmdzICovCisKKyNkZWZpbmUgU1RSSU5HX1dJTkVfSEVMUCAgICAgICAgICAgICAiV0lORSBhZ/xkIgorI2RlZmluZSBTVFJJTkdfRVJST1IgICAgICAgICAgICAgICAgICJTQkFHTCIKKyNkZWZpbmUgU1RSSU5HX1dBUk5JTkcgICAgICAgICAgICAgICAiQVRURU5aSVVOIgorI2RlZmluZSBTVFJJTkdfSU5GTyAgICAgICAgICAgICAgICAgICJJTkZVT1JNQVpJVU4iCisjZGVmaW5lIFNUUklOR19OT1RfSU1QTEVNRU5URUQgICAgICAgIk5hIGltcGxlbWVudGEiCisjZGVmaW5lIFNUUklOR19ITFBGSUxFX0VSUk9SX3MgICAgICAgIlNiYWdsIGN1biBsZWdlciBsYSBkYXRvdGVjYSBkJ2Fn/GQgYCVzJyIKKyNkZWZpbmUgU1RSSU5HX0NPTlRFTlRTICAgICAgICAgICAgICAiJkN1bnRnbvwiCisjZGVmaW5lIFNUUklOR19TRUFSQ0ggICAgICAgICAgICAgICAgIiZUc2NoZXJjaGFyIgorI2RlZmluZSBTVFJJTkdfQkFDSyAgICAgICAgICAgICAgICAgICImSW5hdm8iCisjZGVmaW5lIFNUUklOR19ISVNUT1JZICAgICAgICAgICAgICAgIiZGaW4gcXVhIgorI2RlZmluZSBTVFJJTkdfQUxMX0ZJTEVTICAgICAgICAgICAgICJUdW90IGxhcyBkYXRvdGVjYXMgKCouKikiCisjZGVmaW5lIFNUUklOR19IRUxQX0ZJTEVTX0hMUCAgICAgICAgIkRhdG90ZWNhcyBkJ2Fn/GQgKCouaGxwKSIKKworI2luY2x1ZGUgIlh4LnJjIgpkaWZmIC0tZ2l0IGEvcHJvZ3JhbXMvd2luaGVscC93aW5oZWxwLmMgYi9wcm9ncmFtcy93aW5oZWxwL3dpbmhlbHAuYwppbmRleCA4YzMzOGUzLi44YjUzMDU1IDEwMDY0NAotLS0gYS9wcm9ncmFtcy93aW5oZWxwL3dpbmhlbHAuYworKysgYi9wcm9ncmFtcy93aW5oZWxwL3dpbmhlbHAuYwpAQCAtMjEsNiArMjEsNyBAQAogVk9JRCBMSUJXSU5FX1JlZ2lzdGVyX0l0KHZvaWQpOwogVk9JRCBMSUJXSU5FX1JlZ2lzdGVyX0tvKHZvaWQpOwogVk9JRCBMSUJXSU5FX1JlZ2lzdGVyX0h1KHZvaWQpOworVk9JRCBMSUJXSU5FX1JlZ2lzdGVyX1ZhKHZvaWQpOwogCiBzdGF0aWMgQk9PTCAgICBXSU5IRUxQX1JlZ2lzdGVyV2luQ2xhc3NlcygpOwogc3RhdGljIExSRVNVTFQgV0lOSEVMUF9NYWluV25kUHJvYyhIV05ELCBVSU5ULCBXUEFSQU0sIExQQVJBTSk7CkBAIC02Miw2ICs2Myw3IEBACiAgIExJQldJTkVfUmVnaXN0ZXJfSXQoKTsKICAgTElCV0lORV9SZWdpc3Rlcl9LbygpOwogICBMSUJXSU5FX1JlZ2lzdGVyX0h1KCk7CisgIExJQldJTkVfUmVnaXN0ZXJfVmEoKTsKICNlbmRpZgogCiAgIEdsb2JhbHMuaEluc3RhbmNlID0gaEluc3RhbmNlOwpkaWZmIC0tZ2l0IGEvcmMvcGFyc2VyLmggYi9yYy9wYXJzZXIuaAppbmRleCBjMGQyZDI3Li5jYjM0NWFlIDEwMDY0NAotLS0gYS9yYy9wYXJzZXIuaAorKysgYi9yYy9wYXJzZXIuaApAQCAtNjcsNyArNjcsOCBAQAogZ2VuX3JlcyogZGlhbG9nX2NhcHRpb24oY2hhciosZ2VuX3JlcyopOwogZ2VuX3JlcyogZGlhbG9nX2ZvbnQoc2hvcnQsY2hhciosZ2VuX3JlcyopOwogZ2VuX3JlcyogZGlhbG9nX2NsYXNzKGNoYXIqLGdlbl9yZXMqKTsKLWdlbl9yZXMqIGRpYWxvZ19tZW51KGNoYXIqLGdlbl9yZXMqKTsKK2dlbl9yZXMqIGRpYWxvZ19tZW51X2lkKHNob3J0LGdlbl9yZXMqKTsKK2dlbl9yZXMqIGRpYWxvZ19tZW51X3N0cihjaGFyKixnZW5fcmVzKik7CiBnZW5fcmVzKiBjcmVhdGVfY29udHJvbF9kZXNjKGludCxpbnQsaW50LGludCxpbnQscmNfc3R5bGUqKTsKIGdlbl9yZXMqIGxhYmVsX2NvbnRyb2xfZGVzYyhjaGFyKixnZW5fcmVzKik7CiBnZW5fcmVzKiBjcmVhdGVfZ2VuZXJpY19jb250cm9sKGNoYXIqLGludCxjaGFyKixyY19zdHlsZSosaW50LGludCxpbnQsaW50KTsKZGlmZiAtLWdpdCBhL3JjL3BhcnNlci55IGIvcmMvcGFyc2VyLnkKaW5kZXggYmJmMzhmYS4uY2FlOGExYSAxMDA2NDQKLS0tIGEvcmMvcGFyc2VyLnkKKysrIGIvcmMvcGFyc2VyLnkKQEAgLTcyLDcgKzcyLDcgQEAKICAgICAgICAgICAgICAgICA7CiAKIC8qIGhhdmUgdG8gdXNlIHRCRUdJTiBiZWNhdXNlIEJFR0lOIGlzIHByZWRlZmluZWQgKi8KLWFjY2VsZXJhdG9yczoJQUNDRUxFUkFUT1JTICB0QkVHSU4gIGV2ZW50cyB0RU5EIHskJD0kMzskJC0+dHlwZT1hY2M7fQorYWNjZWxlcmF0b3JzOglBQ0NFTEVSQVRPUlMgbG9hZF9hbmRfbWVtb3B0aW9uIHRCRUdJTiAgZXZlbnRzIHRFTkQgeyQkPSQ0OyQkLT50eXBlPWFjYzt9CiAvKiB0aGUgZXZlbnRzIGFyZSBjb2xsZWN0ZWQgaW4gYSBnZW5fcmVzLCBhcyB0aGUgYWNjZWxlcmF0b3IgcmVzb3VyY2UgaXMganVzdAogICAgYW4gYXJyYXkgb2YgZXZlbnRzICovCiBldmVudHM6CQl7JCQ9bmV3X3JlcygpO30KQEAgLTExMyw3ICsxMTMsOSBAQAogCQl8IENMQVNTIHRTVFJJTkcgZGxnX2F0dHJpYnV0ZXMKIAkJICB7JCQ9ZGlhbG9nX2NsYXNzKCQyLCQzKTt9CiAJCXwgTUVOVSB0U1RSSU5HIGRsZ19hdHRyaWJ1dGVzCi0JCSAgeyQkPWRpYWxvZ19tZW51KCQyLCQzKTt9CisJCSAgeyQkPWRpYWxvZ19tZW51X3N0cigkMiwkMyk7fQorCQl8IE1FTlUgTlVNQkVSIGRsZ19hdHRyaWJ1dGVzCisJCSAgeyQkPWRpYWxvZ19tZW51X2lkKCQyLCQzKTt9CiAKIC8qIHRoZSBjb250cm9scyBhcmUgY29sbGVjdGVkIGludG8gYSBnZW5fcmVzLCBhbmQgZmluYWxseSB0aGUgZGlhbG9nIGhlYWRlciAKICAgIGlzIHB1dCBhdCB0aGUgYmVnaW5uaW5nICovCmRpZmYgLS1naXQgYS9yYy93aW5lcmMuYyBiL3JjL3dpbmVyYy5jCmluZGV4IDlkYmNmOTAuLjY2ZjdlZmUgMTAwNjQ0Ci0tLSBhL3JjL3dpbmVyYy5jCisrKyBiL3JjL3dpbmVyYy5jCkBAIC0zNTQsNyArMzU0LDE2IEBACiAJcmV0dXJuIGluc2VydF9zdHJpbmcoYXR0cixjYXAsZGlhbG9nX2dldF9jbGFzcyhhdHRyKSwwKTsKIH0KIAotZ2VuX3JlcyogZGlhbG9nX21lbnUoY2hhciogY2FwLCBnZW5fcmVzKmF0dHIpCitnZW5fcmVzKiBkaWFsb2dfbWVudV9pZChzaG9ydCBuciwgZ2VuX3JlcyphdHRyKQoreworCWNoYXIgY19uclsyXTsKKwlpbnQgb2Zmcz1kaWFsb2dfZ2V0X21lbnUoYXR0cik7CisJYXR0ci0+cmVzW29mZnNdID0gMHhmZjsKKwlpZiAod2luMzIpIGF0dHItPnJlc1tvZmZzKzFdID0gMHhmZjsKKwlwdXRfV09SRChjX25yLG5yKTsKKwlyZXR1cm4gaW5zZXJ0X2J5dGVzKGF0dHIsY19ucixvZmZzKyh3aW4zMj8yOjEpLDIpOworfQorZ2VuX3JlcyogZGlhbG9nX21lbnVfc3RyKGNoYXIqIGNhcCwgZ2VuX3JlcyphdHRyKQogewogCXJldHVybiBpbnNlcnRfc3RyaW5nKGF0dHIsY2FwLGRpYWxvZ19nZXRfbWVudShhdHRyKSwwKTsKIH0KQEAgLTQxNSwxMCArNDI0LDEyIEBACiBnZW5fcmVzKiBjcmVhdGVfZ2VuZXJpY19jb250cm9sKGNoYXIqIGxhYmVsLGludCBpZCxjaGFyKiBjbGFzcywKIAlyY19zdHlsZSpzdHlsZSxpbnQgeCxpbnQgeSxpbnQgY3gsaW50IGN5KQogewlnZW5fcmVzKiByZXQ9bmV3X3JlcygpOworCWludCBzPVdTX1ZJU0lCTEV8V1NfQ0hJTEQ7IC8qZGVmYXVsdCBzdHlsZXMgZm9yIGFueSBjb250cm9sKi8KKwlpZihzdHlsZSlzPShzfHN0eWxlLT5vcikmc3R5bGUtPmFuZDsKIAlpZih3aW4zMikKIAl7CiAJCVdPUkQgY2w7Ci0JCXB1dF9EV09SRChyZXQtPnJlcyswLHN0eWxlLT5vcik7CisJCXB1dF9EV09SRChyZXQtPnJlcyswLHMpOwogCQkvKiBGSVhNRSAqLwogCQkvKiBwdXRfRFdPUkQocmV0LT5yZXMrNCxleHN0eWxlLT5vcik7ICovCiAJCXB1dF9XT1JEKHJldC0+cmVzKzgseCk7CkBAIC00MzAsMTIgKzQ0MSwxMiBAQAogCQlyZXQ9aW5zZXJ0X3N0cmluZyhyZXQsbGFiZWwsMjAsMCk7CiAJCS8qIGlzIGl0IGEgcHJlZGVmaW5lZCBjbGFzcz8gKi8KIAkJY2w9MDsKLQkJaWYoIXN0cmNtcChjbGFzcywiQlVUVE9OIikpY2w9Q1RfQlVUVE9OOwotCQlpZighc3RyY21wKGNsYXNzLCJFRElUIikpY2w9Q1RfRURJVDsKLQkJaWYoIXN0cmNtcChjbGFzcywiU1RBVElDIikpY2w9Q1RfU1RBVElDOwotCQlpZighc3RyY21wKGNsYXNzLCJMSVNUQk9YIikpY2w9Q1RfTElTVEJPWDsKLQkJaWYoIXN0cmNtcChjbGFzcywiU0NST0xMQkFSIikpY2w9Q1RfU0NST0xMQkFSOwotCQlpZighc3RyY21wKGNsYXNzLCJDT01CT0JPWCIpKWNsPUNUX0NPTUJPQk9YOworCQlpZighc3RyY2FzZWNtcChjbGFzcywiQlVUVE9OIikpY2w9Q1RfQlVUVE9OOworCQlpZighc3RyY2FzZWNtcChjbGFzcywiRURJVCIpKWNsPUNUX0VESVQ7CisJCWlmKCFzdHJjYXNlY21wKGNsYXNzLCJTVEFUSUMiKSljbD1DVF9TVEFUSUM7CisJCWlmKCFzdHJjYXNlY21wKGNsYXNzLCJMSVNUQk9YIikpY2w9Q1RfTElTVEJPWDsKKwkJaWYoIXN0cmNhc2VjbXAoY2xhc3MsIlNDUk9MTEJBUiIpKWNsPUNUX1NDUk9MTEJBUjsKKwkJaWYoIXN0cmNhc2VjbXAoY2xhc3MsIkNPTUJPQk9YIikpY2w9Q1RfQ09NQk9CT1g7CiAJCWlmKGNsKSB7CiAJCQljaGFyIGZmZmZbMl09ezB4ZmYsIDB4ZmZ9OwogCQkJcmV0PWluc2VydF9ieXRlcyhyZXQsZmZmZiwxOCwyKTsKQEAgLTQ1MSwxNyArNDYyLDE3IEBACiAJCXB1dF9XT1JEKHJldC0+cmVzKzQsY3gpOwogCQlwdXRfV09SRChyZXQtPnJlcys2LGN5KTsKIAkJcHV0X1dPUkQocmV0LT5yZXMrOCxpZCk7Ci0JCXB1dF9EV09SRChyZXQtPnJlcysxMCxzdHlsZS0+b3IpOworCQlwdXRfRFdPUkQocmV0LT5yZXMrMTAscyk7CiAJCXJldC0+c2l6ZT0xNzsKIAkJcmV0PWluc2VydF9zdHJpbmcocmV0LGxhYmVsLDE1LDApOwogCQkvKiBpcyBpdCBhIHByZWRlZmluZWQgY2xhc3M/ICovCiAJCWNsPTA7Ci0JCWlmKCFzdHJjbXAoY2xhc3MsIkJVVFRPTiIpKWNsPUNUX0JVVFRPTjsKLQkJaWYoIXN0cmNtcChjbGFzcywiRURJVCIpKWNsPUNUX0VESVQ7Ci0JCWlmKCFzdHJjbXAoY2xhc3MsIlNUQVRJQyIpKWNsPUNUX1NUQVRJQzsKLQkJaWYoIXN0cmNtcChjbGFzcywiTElTVEJPWCIpKWNsPUNUX0xJU1RCT1g7Ci0JCWlmKCFzdHJjbXAoY2xhc3MsIlNDUk9MTEJBUiIpKWNsPUNUX1NDUk9MTEJBUjsKLQkJaWYoIXN0cmNtcChjbGFzcywiQ09NQk9CT1giKSljbD1DVF9DT01CT0JPWDsKKwkJaWYoIXN0cmNhc2VjbXAoY2xhc3MsIkJVVFRPTiIpKWNsPUNUX0JVVFRPTjsKKwkJaWYoIXN0cmNhc2VjbXAoY2xhc3MsIkVESVQiKSljbD1DVF9FRElUOworCQlpZighc3RyY2FzZWNtcChjbGFzcywiU1RBVElDIikpY2w9Q1RfU1RBVElDOworCQlpZighc3RyY2FzZWNtcChjbGFzcywiTElTVEJPWCIpKWNsPUNUX0xJU1RCT1g7CisJCWlmKCFzdHJjYXNlY21wKGNsYXNzLCJTQ1JPTExCQVIiKSljbD1DVF9TQ1JPTExCQVI7CisJCWlmKCFzdHJjYXNlY21wKGNsYXNzLCJDT01CT0JPWCIpKWNsPUNUX0NPTUJPQk9YOwogCQlpZihjbClyZXQtPnJlc1sxNF09Y2w7CiAJCWVsc2UgcmV0PWluc2VydF9zdHJpbmcocmV0LGNsYXNzLDE0LDApOwogCX0KQEAgLTU4Myw3ICs1OTQsMTEgQEAKIAlnZW5fcmVzICpyZXM7CiAJc3RydWN0IHN0YXQgc3Q7CiAJaW50IGY9b3BlbihuYW1lLE9fUkRPTkxZKTsKLQlpZighZilwZXJyb3IobmFtZSk7CisJaWYoZjwwKQorCXsKKwkgIHBlcnJvcihuYW1lKTsKKwkgIGV4aXQoMSk7CisJfQogCWZzdGF0KGYsJnN0KTsKIAlyZXM9bmV3X3JlcygpOwogCXdoaWxlKHJlcy0+c3BhY2U8c3Quc3Rfc2l6ZSlyZXM9Z3JvdyhyZXMpOwpAQCAtNjU2LDcgKzY3MSw5IEBACiAgIHdoaWxlKCplbG0gJiYgKCplbG0pLT5ncm91cDxncm91cCkgZWxtPSYoKmVsbSktPm5leHQ7CiAgIGlmKCEqZWxtIHx8ICgqZWxtKS0+Z3JvdXAhPWdyb3VwKQogICB7CisgICAgaW50IGk7CiAgICAgc3RyX3RibF9lbG0qIG5ldz14bWFsbG9jKHNpemVvZihzdHJfdGJsX2VsbSkpOworICAgIGZvcihpPTA7IGk8MTY7IGkrKykgbmV3LT5zdHJpbmdzW2ldID0gTlVMTDsKICAgICBuZXctPmdyb3VwPWdyb3VwOwogICAgIG5ldy0+bmV4dD0qZWxtOwogICAgICplbG09bmV3OwpkaWZmIC0tZ2l0IGEvdG9vbHMvYnVpbGQtc3BlYy50eHQgYi90b29scy9idWlsZC1zcGVjLnR4dAppbmRleCBjYjc4ZjAxLi40Yzk4MGE1IDEwMDY0NAotLS0gYS90b29scy9idWlsZC1zcGVjLnR4dAorKysgYi90b29scy9idWlsZC1zcGVjLnR4dApAQCAtNjIsMTIgKzYyLDEzIEBACiAtICJ3b3JkIgogLSAibG9uZyIKIC0gInB0ciIgKGxpbmVhciBwb2ludGVyKQorLSAic3RyIiAobGluZWFyIHBvaW50ZXIgdG8gYSBzdHJpbmcpCiAtICJzX2J5dGUiIChzaWduZWQgYnl0ZSkKIC0gInNfd29yZCIgKHNpZ25lZCB3b3JkKQogLSAic19sb25nIiAoc2lnbmVkIGxvbmcpCiAtICJzZWdwdHIiIChzZWdtZW50ZWQgcG9pbnRlcikuCiAKLU9ubHkgInB0ciIgYW5kICJsb25nIiBhcmUgdmFsaWQgZm9yIFdpbjMyIGZ1bmN0aW9ucy4KK09ubHkgInB0ciIsICJzdHIiIGFuZCAibG9uZyIgYXJlIHZhbGlkIGZvciBXaW4zMiBmdW5jdGlvbnMuCiAKICJIQU5ETEVSTkFNRSIgaXMgdGhlIG5hbWUgb2YgdGhlIGFjdHVhbCBXaW5lIGZ1bmN0aW9uIHRoYXQgd2lsbAogcHJvY2VzcyB0aGUgcmVxdWVzdCBpbiAzMi1iaXQgbW9kZS4KZGlmZiAtLWdpdCBhL3Rvb2xzL2J1aWxkLmMgYi90b29scy9idWlsZC5jCmluZGV4IDUzZTY3ODAuLmMzODc4NWYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2J1aWxkLmMKKysrIGIvdG9vbHMvYnVpbGQuYwpAQCAtMzcwLDYgKzM3MCw4IEBACiAgICAgICAgICAgICBvZHAtPnUuZnVuYy5hcmdfdHlwZXNbaV0gPSAnbCc7CiAgICAgICAgIGVsc2UgaWYgKCFzdHJjbXAodG9rZW4sICJwdHIiKSkKICAgICAgICAgICAgIG9kcC0+dS5mdW5jLmFyZ190eXBlc1tpXSA9ICdwJzsKKwllbHNlIGlmICghc3RyY21wKHRva2VuLCAic3RyIikpCisJICAgIG9kcC0+dS5mdW5jLmFyZ190eXBlc1tpXSA9ICd0JzsKICAgICAgICAgZWxzZQogICAgICAgICB7CiAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVkOiBVbmtub3duIHZhcmlhYmxlIHR5cGUgJyVzJ1xuIiwgTGluZSwgdG9rZW4pOwpAQCAtMTQ0Miw2ICsxNDQ0LDcgQEAKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgJ3AnOiAgLyogcHRyICovCisgICAgICAgIGNhc2UgJ3QnOiAgLyogc3RyaW5nICovCiAgICAgICAgICAgICAvKiBHZXQgdGhlIHNlbGVjdG9yICovCiAgICAgICAgICAgICBmcHJpbnRmKCBvdXRmaWxlLCAiXHRtb3Z3ICVkKCUlZWJwKSwlJWF4XG4iLCBwb3MxNiArIDIgKTsKICAgICAgICAgICAgIC8qIEdldCB0aGUgc2VsZWN0b3IgYmFzZSAqLwpAQCAtMTU3NCw3ICsxNTc3LDcgQEAKICAqIEJ1aWxkIGEgMTYtYml0LXRvLVdpbmUgY2FsbGJhY2sgZnVuY3Rpb24uIFRoZSBzeW50YXggb2YgdGhlIGZ1bmN0aW9uCiAgKiBwcm9maWxlIGlzOiB0eXBlX3h4eHh4LCB3aGVyZSAndHlwZScgaXMgb25lIG9mICdyZWdzJywgJ3dvcmQnIG9yCiAgKiAnbG9uZycgYW5kIGVhY2ggJ3gnIGlzIGFuIGFyZ3VtZW50ICgndyc9d29yZCwgJ3MnPXNpZ25lZCB3b3JkLAotICogJ2wnPWxvbmcsICdwJz1wb2ludGVyKS4KKyAqICdsJz1sb25nLCAncCc9cG9pbnRlciwgJ3QnPXN0cmluZykuCiAgKiBGb3IgcmVnaXN0ZXIgZnVuY3Rpb25zLCB0aGUgYXJndW1lbnRzIGFyZSBpZ25vcmVkLCBidXQgdGhleSBhcmUgc3RpbGwKICAqIHJlbW92ZWQgZnJvbSB0aGUgc3RhY2sgdXBvbiByZXR1cm4uCiAgKgpAQCAtMTczNiw2ICsxNzM5LDcgQEAKICAgICAgICAgICAgICAgICBhcmdzaXplICs9IDI7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlICdwJzoKKyAgICAgICAgICAgIGNhc2UgJ3QnOgogICAgICAgICAgICAgY2FzZSAnbCc6CiAgICAgICAgICAgICAgICAgYXJnc2l6ZSArPSA0OwogICAgICAgICAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvd2luMzIvbmV3Zm5zLmMgYi93aW4zMi9uZXdmbnMuYwppbmRleCAxYmM5YTk4Li5iNTNhNTAzIDEwMDY0NAotLS0gYS93aW4zMi9uZXdmbnMuYworKysgYi93aW4zMi9uZXdmbnMuYwpAQCAtMjYsMTAgKzI2LDEwIEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgkJRGlzYWJsZVRocmVhZExpYnJhcnlDYWxscyAoS0VSTkVMMzIuNzQpCisgKiBEb24ndCBjYWxsIERsbEVudHJ5UG9pbnQgZm9yIERMTF9USFJFQURfe0FUVEFDSCxERVRBQ0h9IGlmIHNldC4KICAqLwogQk9PTDMyCiBEaXNhYmxlVGhyZWFkTGlicmFyeUNhbGxzKEhNT0RVTEUzMiBoTW9kdWxlKSB7Ci0JLyogRklYTUU6IHN0dWIgZm9yIG5vdyAqLwogICAgIGZwcmludGYoc3RkbmltcCwgIkRpc2FibGVUaHJlYWRMaWJyYXJ5Q2FsbHMgU3R1YiBjYWxsZWQhXG4iKTsKICAgICByZXR1cm4gVFJVRTsKIH0KZGlmZiAtLWdpdCBhL3dpbmRvd3MvZGNlLmMgYi93aW5kb3dzL2RjZS5jCmluZGV4IGQyNTlmZTAuLjkyNjIyYjEgMTAwNjQ0Ci0tLSBhL3dpbmRvd3MvZGNlLmMKKysrIGIvd2luZG93cy9kY2UuYwpAQCAtNDYxLDI3ICs0NjEsMjUgQEAKICAgICB9CiAKICAgICBpZiggZmxhZ3MgJiBEQ1hfTk9DTElQQ0hJTERSRU4gKQotICAgICAgeworICAgIHsKICAgICAgICAgZmxhZ3MgfD0gRENYX0NBQ0hFOwogICAgICAgICBmbGFncyAmPSB+KERDWF9QQVJFTlRDTElQIHwgRENYX0NMSVBDSElMRFJFTik7Ci0gICAgICB9Ci0KLSAgICBpZiAoaHduZCA9PSBHZXREZXNrdG9wV2luZG93MzIoKSB8fCAhKHduZFB0ci0+ZHdTdHlsZSAmIFdTX0NISUxEKSkKLSAgICAgICAgZmxhZ3MgJj0gfkRDWF9QQVJFTlRDTElQOworICAgIH0KIAogICAgIGlmIChmbGFncyAmIERDWF9XSU5ET1cpIGZsYWdzID0gKGZsYWdzICYgfkRDWF9DTElQQ0hJTERSRU4pIHwgRENYX0NBQ0hFOwogCi0gICAgaWYoIGZsYWdzICYgRENYX1BBUkVOVENMSVAgKQotICAgICAgeworICAgIGlmICghKHduZFB0ci0+ZHdTdHlsZSAmIFdTX0NISUxEKSB8fCAhd25kUHRyLT5wYXJlbnQgKSBmbGFncyAmPSB+RENYX1BBUkVOVENMSVA7CisgICAgZWxzZSBpZiggZmxhZ3MgJiBEQ1hfUEFSRU5UQ0xJUCApCisgICAgewogICAgICAgICBmbGFncyB8PSBEQ1hfQ0FDSEU7CiAgICAgICAgIGlmKCAhKGZsYWdzICYgKERDWF9DTElQU0lCTElOR1MgfCBEQ1hfQ0xJUENISUxEUkVOKSkgKQogICAgICAgICAgIGlmKCAod25kUHRyLT5kd1N0eWxlICYgV1NfVklTSUJMRSkgJiYgKHduZFB0ci0+cGFyZW50LT5kd1N0eWxlICYgV1NfVklTSUJMRSkgKQotICAgICAgICAgICAgeworICAgICAgICAgIHsKICAgICAgICAgICAgICAgZmxhZ3MgJj0gfkRDWF9DTElQQ0hJTERSRU47CiAgICAgICAgICAgICAgIGlmKCB3bmRQdHItPnBhcmVudC0+ZHdTdHlsZSAmIFdTX0NMSVBTSUJMSU5HUyApCi0gICAgICAgICAgICAgICAgZmxhZ3MgfD0gRENYX0NMSVBTSUJMSU5HUzsKLSAgICAgICAgICAgIH0KLSAgICAgIH0KKyAgICAgICAgICAgICAgICAgIGZsYWdzIHw9IERDWF9DTElQU0lCTElOR1M7CisgICAgICAgICAgfQorICAgIH0KIAogICAgIGlmIChmbGFncyAmIERDWF9DQUNIRSkKICAgICB7CkBAIC00OTQsMTcgKzQ5MiwxNyBAQAogICAgIHsKICAgICAgICAgZGNlID0gKHduZFB0ci0+Y2xhc3MtPnN0eWxlICYgQ1NfT1dOREMpP3duZFB0ci0+ZGNlOnduZFB0ci0+Y2xhc3MtPmRjZTsKIAlpZiggZGNlLT5od25kQ3VycmVudCA9PSBod25kICkKLQkgIHsKKwl7CiAJICAgIGRwcmludGZfZGMoc3RkZGViLCJcdHNraXBwaW5nIGhWaXNSZ24gdXBkYXRlXG4iKTsKIAkgICAgbmVlZF91cGRhdGUgPSBGQUxTRTsKLQkgIH0KKwl9CiAKIAlpZiggaHJnbkNsaXAgJiYgZGNlLT5oQ2xpcFJnbiAmJiAhKGRjZS0+RENYZmxhZ3MgJiBEQ1hfS0VFUENMSVBSR04pKQotCSAgeworCXsKIAkgICAgZnByaW50ZihzdGRuaW1wLCJHZXREQ0V4OiBoQ2xpcFJnbiBjb2xsaXNpb24hXG4iKTsKICAgICAgICAgICAgIERlbGV0ZU9iamVjdDMyKCBkY2UtPmhDbGlwUmduICk7IAogCSAgICBuZWVkX3VwZGF0ZSA9IFRSVUU7Ci0JICB9CisJfQogICAgIH0KIAogICAgIGRjeF9mbGFncyA9IGZsYWdzICYgKCBEQ1hfQ0xJUFNJQkxJTkdTIHwgRENYX0NMSVBDSElMRFJFTiB8IERDWF9DQUNIRSB8IERDWF9XSU5ET1cgfCBEQ1hfV0lORE9XUEFJTlQpOwpAQCAtNTYxLDcgKzU1OSw3IEBACiAgICAgfQogICAgIGVsc2UgaHJnblZpc2libGUgPSBDcmVhdGVSZWN0UmduMzIoIDAsIDAsIDAsIDAgKTsKIAotICAgIGlmICgoZmxhZ3MgJiBEQ1hfSU5URVJTRUNUUkdOKSB8fCAoZmxhZ3MgJiBEQ1hfRVhDTFVERVJHTikpCisgICAgaWYoIGZsYWdzICYgKERDWF9FWENMVURFUkdOIHwgRENYX0lOVEVSU0VDVFJHTikgKQogICAgIHsKIAlkY2UtPkRDWGZsYWdzIHw9IGZsYWdzICYgKERDWF9LRUVQQ0xJUFJHTiB8IERDWF9JTlRFUlNFQ1RSR04gfCBEQ1hfRVhDTFVERVJHTik7CiAJZGNlLT5oQ2xpcFJnbiA9IGhyZ25DbGlwOwpkaWZmIC0tZ2l0IGEvd2luZG93cy9ldmVudC5jIGIvd2luZG93cy9ldmVudC5jCmluZGV4IGMwM2M5OGMuLjQyYzhmMzQgMTAwNjQ0Ci0tLSBhL3dpbmRvd3MvZXZlbnQuYworKysgYi93aW5kb3dzL2V2ZW50LmMKQEAgLTQ1MSw3ICs0NTEsNyBAQAogCiAgICAgcGFyZW50ID0gX19nZXRfY29tbW9uX2FuY2VzdG9yKCBwV25kWi0+d2luZG93LCBwV25kLT53aW5kb3csCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjaGlsZHJlbiwgJnRvdGFsICk7Ci0gICAgaWYoIHBhcmVudCApCisgICAgaWYoIHBhcmVudCAmJiBjaGlsZHJlbiApCiAgICAgewogICAgICAgICB3ID0gX19nZXRfdG9wX2RlY29yYXRpb24oIHBXbmRDaGVjay0+d2luZG93LCBwYXJlbnQgKTsKICAgICAgICAgaWYoIHcgIT0gY2hpbGRyZW5bdG90YWwgLSAxXSApCmRpZmYgLS1naXQgYS93aW5kb3dzL2tleWJvYXJkLmMgYi93aW5kb3dzL2tleWJvYXJkLmMKaW5kZXggZDFhNmIxMS4uYzE5NjVjYSAxMDA2NDQKLS0tIGEvd2luZG93cy9rZXlib2FyZC5jCisrKyBiL3dpbmRvd3Mva2V5Ym9hcmQuYwpAQCAtMTA1LDYgKzEwNSw0NCBAQAogICAgIFZLX01FTlUsIFZLX01FTlUsIFZLX01FTlUsIFZLX01FTlUgICAgICAgICAgICAgICAgICAgICAgICAgLyogRkZFNyAqLwogfTsKIAorLyoKKyAqIFRhYmxlIGZvciB2a2V5IHRvIHNjYW5jb2RlIHRyYW5zbGF0aW9uIC0gNS8yOS85NyBjaHJpc2ZAYW1lcmljYS5jb20gCisgKi8KK3N0YXRpYyBCWVRFIHZrZXkyc2NvZGVbNTEyXSA9IHsKKyAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLCAweDBlLDB4MGYsMHgwMCwweDAwLDB4MDAsMHgxYywweDAwLDB4MDAsCisgIDB4MmEsMHgxZCwweDM4LDB4MDAsMHgzYSwweDAwLDB4MDAsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLAorICAweDM5LDB4NDksMHg1MSwweDRmLDB4NDcsMHg0YiwweDQ4LDB4NGQsIDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDUyLDB4NTMsMHgwMCwKKyAgMHgwYiwweDAyLDB4MDMsMHgwNCwweDA1LDB4MDYsMHgwNywweDA4LCAweDA5LDB4MGEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisgIDB4MDAsMHgxZSwweDMwLDB4MmUsMHgyMCwweDEyLDB4MjEsMHgyMiwgMHgyMywweDE3LDB4MjQsMHgyNSwweDI2LDB4MzIsMHgzMSwweDE4LAorICAweDE5LDB4MTAsMHgxMywweDFmLDB4MTQsMHgxNiwweDJmLDB4MTEsIDB4MmQsMHgxNSwweDJjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKyAgMHgwYiwweDAyLDB4MDMsMHgwNCwweDA1LDB4MDYsMHgwNywweDA4LCAweDA5LDB4MGEsMHgzNywweDRlLDB4MDAsMHg0YSwweDM0LDB4MDAsCisgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorICAweDAwLDB4NDYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKyAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLCAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsIDB4MDAsMHgwMCwweDI5LDB4MGMsMHgwZCwweDFhLDB4MWIsMHgyYiwKKyAgMHgyNywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLCAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgyOCwweDMzLDB4MzQsMHgzNSwweDRjLAorICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKyAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLCAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisvKiAyNTYgKi8KKyAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLCAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxYywweDAwLDB4MDAsCisgIDB4MDAsMHgxZCwweDM4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorICAweDAwLDB4NDksMHg1MSwweDRmLDB4NDcsMHg0YiwweDQ4LDB4NGQsIDB4NTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDUyLDB4NTMsMHgwMCwKKyAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLCAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKyAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLCAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzUsCisgIDB4M2IsMHgzYywweDNkLDB4M2UsMHgzZiwweDQwLDB4NDEsMHg0MiwgMHg0MywweDQ0LDB4NTcsMHg1OCwweDAwLDB4MDAsMHgwMCwweDAwLAorICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKyAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLCAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKyAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLCAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKyAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLCAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCit9OwogCiBzdGF0aWMgV09SRCBFVkVOVF9ldmVudF90b192a2V5KCBYS2V5RXZlbnQgKmUpCiB7CkBAIC0zNjcsNyArNDA1LDcgQEAKICAgIGlmICh2a2V5KQogICAgewogICAgIGtleWxwLmxwMS5jb3VudCA9IDE7Ci0gICAga2V5bHAubHAxLmNvZGUgPSBMT0JZVEUoZXZlbnQtPmtleWNvZGUpIC0gODsKKyAgICBrZXlscC5scDEuY29kZSA9IHZrZXkyc2NvZGVbdmtleV07IC8qIDUvMjkvOTcgY2hyaXNmQGFtZXJpY2EuY29tICovCiAgICAga2V5bHAubHAxLmV4dGVuZGVkID0gKHZrZXkgJiAweDEwMCA/IDEgOiAwKTsKICAgICBrZXlscC5scDEud2luX2ludGVybmFsID0gMDsgLyogdGhpcyBoYXMgc29tZXRoaW5nIHRvIGRvIHdpdGggZGlhbG9ncywgCiAJCQkJKiBkb24ndCByZW1lbWJlciB3aGVyZSBJIHJlYWQgaXQgLSBBSyAqLwpkaWZmIC0tZ2l0IGEvd2luZG93cy9tZXNzYWdlLmMgYi93aW5kb3dzL21lc3NhZ2UuYwppbmRleCA1YjcwZWUyLi4wYzIyYjhhIDEwMDY0NAotLS0gYS93aW5kb3dzL21lc3NhZ2UuYworKysgYi93aW5kb3dzL21lc3NhZ2UuYwpAQCAtMTAxMiw4ICsxMDEyLDkgQEAKIAogICAgIGlmIChod25kID09IEhXTkRfQlJPQURDQVNUKQogICAgIHsKKyAgICAgICAgaWYgKCEobGlzdCA9IFdJTl9CdWlsZFdpbkFycmF5KCBXSU5fR2V0RGVza3RvcCgpLCAwLCBOVUxMICkpKQorICAgICAgICAgICAgcmV0dXJuIFRSVUU7CiAgICAgICAgIGRwcmludGZfbXNnKHN0ZGRlYiwiU2VuZE1lc3NhZ2UgLy8gSFdORF9CUk9BRENBU1QgIVxuIik7Ci0gICAgICAgIGxpc3QgPSBXSU5fQnVpbGRXaW5BcnJheSggV0lOX0dldERlc2t0b3AoKSwgMCwgTlVMTCApOwogICAgICAgICBmb3IgKHBwV25kID0gbGlzdDsgKnBwV25kOyBwcFduZCsrKQogICAgICAgICB7CiAgICAgICAgICAgICB3bmRQdHIgPSAqcHBXbmQ7CkBAIC0xMDIzLDkgKzEwMjQsOSBAQAogICAgICAgICAgICAgICAgIGRwcmludGZfbXNnKHN0ZGRlYiwiQlJPQURDQVNUIE1lc3NhZ2UgdG8gaFduZD0lMDR4IG09JTA0WCB3PSUwNGxYIGw9JTA4bFggIVxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3bmRQdHItPmh3bmRTZWxmLCBtc2csIChEV09SRCl3UGFyYW0sIGxQYXJhbSk7CiAgICAgICAgICAgICAgICAgU2VuZE1lc3NhZ2UxNiggd25kUHRyLT5od25kU2VsZiwgbXNnLCB3UGFyYW0sIGxQYXJhbSApOwotCSAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLQlIZWFwRnJlZSggU3lzdGVtSGVhcCwgMCwgbGlzdCApOworICAgICAgICBIZWFwRnJlZSggU3lzdGVtSGVhcCwgMCwgbGlzdCApOwogICAgICAgICBkcHJpbnRmX21zZyhzdGRkZWIsIlNlbmRNZXNzYWdlIC8vIEVuZCBvZiBIV05EX0JST0FEQ0FTVCAhXG4iKTsKICAgICAgICAgcmV0dXJuIFRSVUU7CiAgICAgfQpAQCAtMTA5OSw3ICsxMTAwLDggQEAKIAogICAgIGlmIChod25kID09IEhXTkRfQlJPQURDQVNUKQogICAgIHsKLSAgICAgICAgbGlzdCA9IFdJTl9CdWlsZFdpbkFycmF5KCBXSU5fR2V0RGVza3RvcCgpLCAwLCBOVUxMICk7CisgICAgICAgIGlmICghKGxpc3QgPSBXSU5fQnVpbGRXaW5BcnJheSggV0lOX0dldERlc2t0b3AoKSwgMCwgTlVMTCApKSkKKyAgICAgICAgICAgIHJldHVybiBUUlVFOwogICAgICAgICBmb3IgKHBwV25kID0gbGlzdDsgKnBwV25kOyBwcFduZCsrKQogICAgICAgICB7CiAgICAgICAgICAgICB3bmRQdHIgPSAqcHBXbmQ7CkBAIC0xMTQ4LDcgKzExNTAsOCBAQAogCiAgICAgaWYgKGh3bmQgPT0gSFdORF9CUk9BRENBU1QpCiAgICAgewotICAgICAgICBsaXN0ID0gV0lOX0J1aWxkV2luQXJyYXkoIFdJTl9HZXREZXNrdG9wKCksIDAsIE5VTEwgKTsKKyAgICAgICAgaWYgKCEobGlzdCA9IFdJTl9CdWlsZFdpbkFycmF5KCBXSU5fR2V0RGVza3RvcCgpLCAwLCBOVUxMICkpKQorICAgICAgICAgICAgcmV0dXJuIFRSVUU7CiAgICAgICAgIGZvciAocHBXbmQgPSBsaXN0OyAqcHBXbmQ7IHBwV25kKyspCiAgICAgICAgIHsKICAgICAgICAgICAgIHduZFB0ciA9ICpwcFduZDsKZGlmZiAtLWdpdCBhL3dpbmUuaW5pIGIvd2luZS5pbmkKaW5kZXggMWVmZjc5My4uYWY4ZjNjYSAxMDA2NDQKLS0tIGEvd2luZS5pbmkKKysrIGIvd2luZS5pbmkKQEAgLTQ4LDExICs0OCwxMSBAQAogQWxsb2NTeXN0ZW1Db2xvcnM9MTAwCiAKIFtmb250c10KLTsgc2VlIGRvY3VtZW50YXRpb24vZm9udHMKLTtBbGlhczAgPSBTeXN0ZW0sIC0taW50ZXJuYXRpb25hbC0KLTtBbGlhczEgPSBNUyBTYW5zIFNlcmlmLCAtYWRvYmUtaGVsdmV0aWNhLQotO0FsaWFzMiA9IEFyaWFsLCAtYWRvYmUtaGVsdmV0aWNhLSwgc3Vic3QKLTtBbGlhczMgPSBUaW1lcyBOZXcgUm9tYW4sIC1hZG9iZS10aW1lcy0sIHN1YnN0Cis7UmVhZCBkb2N1bWVudGF0aW9uL2ZvbnRzIGJlZm9yZSBjaGFuZ2luZyB0aGlzCitBbGlhczAgPSBNUyBTYW5zIFNlcmlmLCAtYWRvYmUtaGVsdmV0aWNhLQorO0FsaWFzMSA9IEFyaWFsLCAtYWRvYmUtaGVsdmV0aWNhLSwgc3Vic3QKKztBbGlhczIgPSBUaW1lcyBOZXcgUm9tYW4sIC1hZG9iZS10aW1lcy0sIHN1YnN0CitEZWZhdWx0ID0gLWFkb2JlLXRpbWVzLQogCiBbc2VyaWFscG9ydHNdCiBDb20xPS9kZXYvY3VhMAo=