From mboxrd@z Thu Jan 1 00:00:00 1970 From: vijay.kilari@gmail.com Subject: [RFC PATCH v3 08/24] NUMA: x86: Move numa code and make it generic Date: Tue, 18 Jul 2017 17:11:30 +0530 Message-ID: <1500378106-2620-9-git-send-email-vijay.kilari@gmail.com> References: <1500378106-2620-1-git-send-email-vijay.kilari@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1500378106-2620-1-git-send-email-vijay.kilari@gmail.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xen.org Cc: kevin.tian@intel.com, sstabellini@kernel.org, wei.liu2@citrix.com, George.Dunlap@eu.citrix.com, andrew.cooper3@citrix.com, dario.faggioli@citrix.com, ian.jackson@eu.citrix.com, tim@xen.org, julien.grall@arm.com, jbeulich@suse.com, Vijaya Kumar K List-Id: xen-devel@lists.xenproject.org RnJvbTogVmlqYXlhIEt1bWFyIEsgPFZpamF5YS5LdW1hckBjYXZpdW0uY29tPgoKTW92ZSBjb2Rl IGZyb20geGVuL2FyY2gveDg2L251bWEuYyB0byB4ZW4vY29tbW9uL251bWEuYwpzbyB0aGF0IGl0 IGNhbiBiZSB1c2VkIGJ5IG90aGVyIGFyY2hzLgoKVGhlIGZvbGxvd2luZyBjaGFuZ2VzIGFyZSBk b25lOgotIEZldyBnZW5lcmljIHN0YXRpYyBmdW5jdGlvbnMgaW4geDg2L251bWEuYyBpcyBtYWRl CiAgbm9uLXN0YXRpYyBjb21tb24vbnVtYS5jCi0gVGhlIGdlbmVyaWMgY29udGVudHMgb2YgaGVh ZGVyIGZpbGUgYXNtLXg4Ni9udW1hLmgKICBhcmUgbW92ZWQgdG8geGVuL251bWEuaC4KLSBUaGUg aGVhZGVyIGZpbGUgaW5jbHVkZXMgYXJlIHJlb3JkZXJlZCBhbmQgZXh0ZXJucyBhcmUKICBkcm9w cGVkLgotIE1vdmVkIGFjcGlfbnVtYSBmcm9tIGFzbS14ODYvYWNwaS5oIHRvIHhlbi9hY3BpLmgK LSBDb2Rpbmcgc3R5bGUgb2YgY29kZSBtb3ZlZCB0byBjb21tb20vbnVtYS5jIGlzIGNoYW5nZWQK ICB0byBYZW4gc3R5bGUuCi0gbnVtYV9hZGRfY3B1KCkgYW5kIG51bWFfc2V0X25vZGUoKSBhbmQg bW92ZWQgdG8gaGVhZGVyCiAgZmlsZSBhbmQgYWRkZWQgaW5saW5lIGZ1bmN0aW9uIGluIGNhc2Ug b2YgQ09ORklHX05VTUEKICBpcyBub3QgZW5hYmxlZCBiZWNhdXNlIHRoZXNlIGZ1bmN0aW9ucyBh cmUgY2FsbGVkIGZyb20KICBnZW5lcmljIGNvZGUgd2l0aCBvdXQgYW55IGNvbmZpZyBjaGVjay4K CkFsc28gdGhlIG5vZGVfb25saW5lX21hcCBpcyBkZWZpbmVkIGluIHg4Ni9udW1hLmMgZm9yIHg4 NgphbmQgYXJtL3NtcGJvb3QuYyBmb3IgQVJNLiBGb3IgeDg2IGl0IGlzIG1vdmVkIHRvIHg4Ni9z bXBib290LmMKSWYgbW92ZWQgdG8gY29tbW9uIGNvZGUgdGhlIGNvbXBpbGF0aW9uIGZhaWxzIGJl Y2F1c2UKY29tbW9uL251bWEuYyBpcyBjb21waWxlZCBvbmx5IHdoZW4gTlVNQSBpcyBlbmFibGVk LgoKU2lnbmVkLW9mZi1ieTogVmlqYXlhIEt1bWFyIEsgPFZpamF5YS5LdW1hckBjYXZpdW0uY29t PgotLS0KdjM6IC0gTW92ZWQgYWNwaV9udW1hIHZhcmlhYmxlCiAgICAtIGFjcGlfc2V0dXBfbm9k ZSBkZWNsYXJhdGlvbiBtb3ZlIGlzIHJldmVydGVkLgogICAgLSBEcm9wcGVkIGV4dGVybiBpbiBo ZWFkZXIgZmlsZQogICAgLSBBZGRlZCBpbmxpbmUgZGVjbGFyYXRpb24gZm9yIG51bWFfYWRkX2Nw dSgpIGFuZAogICAgICBudW1hX3NldF9ub2RlKCkgZnVuY3Rpb24gYmFzZWQgb24gQ09ORklHX05V TUEKICAgIC0gTW92ZWQgbnVtYV9pbml0bWVtX2luaXQoKSB0byBjb21tb24gY29kZQogICAgLSBN b3ZlZCBjb21tb24gY29kZSBmcm9tIGFzbS14ODYvbnVtYS5oIHRvIHhlbi9udW1hLmgKICAgIC0g TW92ZWQgbm9kZV9vbmxpbmVfbWFwIGZyb20gbnVtYS5jIHRvIHNtcGJvb3QuYwotLS0KIHhlbi9h cmNoL3g4Ni9udW1hLmMgICAgICAgICB8IDQ1OSArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQogeGVuL2FyY2gveDg2L3NtcGJvb3QuYyAgICAgIHwgICAxICsKIHhlbi9j b21tb24vTWFrZWZpbGUgICAgICAgICB8ICAgMSArCiB4ZW4vY29tbW9uL251bWEuYyAgICAgICAg ICAgfCA0ODcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIHhl bi9pbmNsdWRlL2FzbS14ODYvYWNwaS5oICB8ICAgMSAtCiB4ZW4vaW5jbHVkZS9hc20teDg2L251 bWEuaCAgfCAgNTYgLS0tLS0KIHhlbi9pbmNsdWRlL2FzbS14ODYvc2V0dXAuaCB8ICAgMSAtCiB4 ZW4vaW5jbHVkZS94ZW4vbnVtYS5oICAgICAgfCAgNjQgKysrKysrCiA4IGZpbGVzIGNoYW5nZWQs IDU2MSBpbnNlcnRpb25zKCspLCA1MDkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEveGVuL2Fy Y2gveDg2L251bWEuYyBiL3hlbi9hcmNoL3g4Ni9udW1hLmMKaW5kZXggNDRjMmUwOC4uNjU0NTMw YiAxMDA2NDQKLS0tIGEveGVuL2FyY2gveDg2L251bWEuYworKysgYi94ZW4vYXJjaC94ODYvbnVt YS5jCkBAIC0xMCwzMjMgKzEwLDE3IEBACiAjaW5jbHVkZSA8eGVuL2N0eXBlLmg+CiAjaW5jbHVk ZSA8eGVuL25vZGVtYXNrLmg+CiAjaW5jbHVkZSA8eGVuL251bWEuaD4KLSNpbmNsdWRlIDx4ZW4v a2V5aGFuZGxlci5oPgogI2luY2x1ZGUgPHhlbi90aW1lLmg+CiAjaW5jbHVkZSA8eGVuL3NtcC5o PgogI2luY2x1ZGUgPHhlbi9wZm4uaD4KICNpbmNsdWRlIDxhc20vYWNwaS5oPgotI2luY2x1ZGUg PHhlbi9zY2hlZC5oPgotI2luY2x1ZGUgPHhlbi9zb2Z0aXJxLmg+Ci0KLXN0YXRpYyBpbnQgbnVt YV9zZXR1cChjaGFyICpzKTsKLWN1c3RvbV9wYXJhbSgibnVtYSIsIG51bWFfc2V0dXApOwotCi1z dHJ1Y3Qgbm9kZV9kYXRhIG5vZGVfZGF0YVtNQVhfTlVNTk9ERVNdOwotCi0vKiBNYXBwaW5nIGZy b20gcGR4IHRvIG5vZGUgaWQgKi8KLXVuc2lnbmVkIGludCBtZW1ub2RlX3NoaWZ0OwogCiAvKgot ICogSW4gY2FzZSBvZiBudW1hIGluaXQgZmFpbHVyZSBvciBudW1hIG9mZiwKLSAqIG1lbW5vZGVf c2hpZnQgaXMgaW5pdGlhbGl6ZWQgdG8gQklUU19QRVJfTE9ORyAtIDEuIEhlbmNlIGFsbG9jYXRl Ci0gKiBtZW1ub2RlbWFwW10gb2YgQklUU19QRVJfTE9ORy4KLSAqLwotc3RhdGljIHR5cGVvZigq bWVtbm9kZW1hcCkgX21lbW5vZGVtYXBbQklUU19QRVJfTE9OR107Ci11bnNpZ25lZCBsb25nIG1l bW5vZGVtYXBzaXplOwotdWludDhfdCAqbWVtbm9kZW1hcDsKLQotbm9kZWlkX3QgX19yZWFkX21v c3RseSBjcHVfdG9fbm9kZVtOUl9DUFVTXSA9IHsKLSAgICBbMCAuLi4gTlJfQ1BVUy0xXSA9IE5V TUFfTk9fTk9ERQotfTsKLS8qCiAgKiBLZWVwIEJJT1MncyBDUFUybm9kZSBpbmZvcm1hdGlvbiwg c2hvdWxkIG5vdCBiZSB1c2VkIGZvciBtZW1vcnkgYWxsb2NhaW9uCiAgKi8KIG5vZGVpZF90IGFw aWNpZF90b19ub2RlW01BWF9MT0NBTF9BUElDXSA9IHsKICAgICBbMCAuLi4gTUFYX0xPQ0FMX0FQ SUMtMV0gPSBOVU1BX05PX05PREUKIH07Ci1jcHVtYXNrX3QgX19yZWFkX21vc3RseSBub2RlX3Rv X2NwdW1hc2tbTUFYX05VTU5PREVTXTsKLQotbm9kZW1hc2tfdCBfX3JlYWRfbW9zdGx5IG5vZGVf b25saW5lX21hcCA9IHsgeyBbMF0gPSAxVUwgfSB9OwotCi1ib29sIG51bWFfb2ZmOwotczggYWNw aV9udW1hID0gMDsKLQotaW50IHNyYXRfZGlzYWJsZWQodm9pZCkKLXsKLSAgICByZXR1cm4gbnVt YV9vZmYgfHwgYWNwaV9udW1hIDwgMDsKLX0KLQotLyoKLSAqIEdpdmVuIGEgc2hpZnQgdmFsdWUs IHRyeSB0byBwb3B1bGF0ZSBtZW1ub2RlbWFwW10KLSAqIFJldHVybnMgOgotICogMCBpZiBPSwot ICogLUVOT1NQQyBpZiBtZW1ub2RtYXBbXSB0b28gc21hbGwgKG9yIHNoaWZ0IHRvbyBzbWFsbCkK LSAqIC1FSU5WQUwgaWYgbm9kZSBvdmVybGFwIG9yIGxvc3QgcmFtIChzaGlmdCB0b28gYmlnKQot ICovCi1zdGF0aWMgaW50IF9faW5pdCBwb3B1bGF0ZV9tZW1ub2RlbWFwKGNvbnN0IHN0cnVjdCBu b2RlICpub2RlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu ZWQgaW50IG51bW5vZGVzLCB1bnNpZ25lZCBpbnQgc2hpZnQsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG5vZGVpZF90ICpub2RlaWRzKQotewotICAgIHVuc2lnbmVkIGxv bmcgc3BkeCwgZXBkeDsKLSAgICBpbnQgaSwgcmVzID0gLUVJTlZBTDsKLQotICAgIG1lbXNldCht ZW1ub2RlbWFwLCBOVU1BX05PX05PREUsIG1lbW5vZGVtYXBzaXplICogc2l6ZW9mKCptZW1ub2Rl bWFwKSk7Ci0gICAgZm9yICggaSA9IDA7IGkgPCBudW1ub2RlczsgaSsrICkKLSAgICB7Ci0gICAg ICAgIHNwZHggPSBwYWRkcl90b19wZHgobm9kZXNbaV0uc3RhcnQpOwotICAgICAgICBlcGR4ID0g cGFkZHJfdG9fcGR4KG5vZGVzW2ldLmVuZCAtIDEpICsgMTsKLSAgICAgICAgaWYgKCBzcGR4ID49 IGVwZHggKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmICggKGVwZHggPj4gc2hp ZnQpID49IG1lbW5vZGVtYXBzaXplICkKLSAgICAgICAgICAgIHJldHVybiAtRU5PU1BDOwotICAg ICAgICBkbyB7Ci0gICAgICAgICAgICBpZiAoIG1lbW5vZGVtYXBbc3BkeCA+PiBzaGlmdF0gIT0g TlVNQV9OT19OT0RFICkKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKLQotICAgICAg ICAgICAgaWYgKCAhbm9kZWlkcyApCi0gICAgICAgICAgICAgICAgbWVtbm9kZW1hcFtzcGR4ID4+ IHNoaWZ0XSA9IGk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbWVtbm9kZW1h cFtzcGR4ID4+IHNoaWZ0XSA9IG5vZGVpZHNbaV07Ci0KLSAgICAgICAgICAgIHNwZHggKz0gKDFV TCA8PCBzaGlmdCk7Ci0gICAgICAgIH0gd2hpbGUgKCBzcGR4IDwgZXBkeCApOwotICAgICAgICBy ZXMgPSAwOwotICAgIH0KLQotICAgIHJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0 IGFsbG9jYXRlX2NhY2hlYWxpZ25lZF9tZW1ub2RlbWFwKHZvaWQpCi17Ci0gICAgdW5zaWduZWQg bG9uZyBzaXplID0gUEZOX1VQKG1lbW5vZGVtYXBzaXplICogc2l6ZW9mKCptZW1ub2RlbWFwKSk7 Ci0gICAgdW5zaWduZWQgbG9uZyBtZm4gPSBhbGxvY19ib290X3BhZ2VzKHNpemUsIDEpOwotCi0g ICAgaWYgKCAhbWZuICkKLSAgICB7Ci0gICAgICAgIHByaW50ayhLRVJOX0VSUgotICAgICAgICAg ICAgICAgIk5VTUE6IFVuYWJsZSB0byBhbGxvY2F0ZSBNZW1vcnkgdG8gTm9kZSBoYXNoIG1hcFxu Iik7Ci0gICAgICAgIG1lbW5vZGVtYXBzaXplID0gMDsKLSAgICAgICAgcmV0dXJuIC1FTk9NRU07 Ci0gICAgfQotCi0gICAgbWVtbm9kZW1hcCA9IG1mbl90b192aXJ0KG1mbik7Ci0gICAgbWZuIDw8 PSBQQUdFX1NISUZUOwotICAgIHNpemUgPDw9IFBBR0VfU0hJRlQ7Ci0gICAgcHJpbnRrKEtFUk5f REVCVUcgIk5VTUE6IEFsbG9jYXRlZCBtZW1ub2RlbWFwIGZyb20gJWx4IC0gJWx4XG4iLAotICAg ICAgICAgICBtZm4sIG1mbiArIHNpemUpOwotICAgIG1lbW5vZGVtYXBzaXplID0gc2l6ZSAvIHNp emVvZigqbWVtbm9kZW1hcCk7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotLyoKLSAqIFRoZSBMU0Ig b2YgYWxsIHN0YXJ0IGFuZCBlbmQgYWRkcmVzc2VzIGluIHRoZSBub2RlIG1hcCBpcyB0aGUgdmFs dWUgb2YgdGhlCi0gKiBtYXhpbXVtIHBvc3NpYmxlIHNoaWZ0LgotICovCi1zdGF0aWMgdW5zaWdu ZWQgaW50IF9faW5pdCBleHRyYWN0X2xzYl9mcm9tX25vZGVzKGNvbnN0IHN0cnVjdCBub2RlICpu b2RlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dW5zaWduZWQgaW50IG51bW5vZGVzKQotewotICAgIHVuc2lnbmVkIGludCBpLCBub2Rlc191c2Vk ID0gMDsKLSAgICB1bnNpZ25lZCBsb25nIHNwZHgsIGVwZHg7Ci0gICAgdW5zaWduZWQgbG9uZyBi aXRmaWVsZCA9IDAsIG1lbXRvcCA9IDA7Ci0KLSAgICBmb3IgKCBpID0gMDsgaSA8IG51bW5vZGVz OyBpKysgKQotICAgIHsKLSAgICAgICAgc3BkeCA9IHBhZGRyX3RvX3BkeChub2Rlc1tpXS5zdGFy dCk7Ci0gICAgICAgIGVwZHggPSBwYWRkcl90b19wZHgobm9kZXNbaV0uZW5kIC0gMSkgKyAxOwot ICAgICAgICBpZiAoIHNwZHggPj0gZXBkeCApCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAg ICAgYml0ZmllbGQgfD0gc3BkeDsKLSAgICAgICAgbm9kZXNfdXNlZCsrOwotICAgICAgICBpZiAo IGVwZHggPiBtZW10b3AgKQotICAgICAgICAgICAgbWVtdG9wID0gZXBkeDsKLSAgICB9Ci0gICAg aWYgKCBub2Rlc191c2VkIDw9IDEgKQotICAgICAgICBpID0gQklUU19QRVJfTE9ORyAtIDE7Ci0g ICAgZWxzZQotICAgICAgICBpID0gZmluZF9maXJzdF9iaXQoJmJpdGZpZWxkLCBzaXplb2YodW5z aWduZWQgbG9uZykgKiA4KTsKLSAgICBtZW1ub2RlbWFwc2l6ZSA9IChtZW10b3AgPj4gaSkgKyAx OwotCi0gICAgcmV0dXJuIGk7Ci19Ci0KLWludCBfX2luaXQgY29tcHV0ZV9tZW1ub2RlX3NoaWZ0 KHN0cnVjdCBub2RlICpub2RlcywgdW5zaWduZWQgaW50IG51bW5vZGVzLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbm9kZWlkX3QgKm5vZGVpZHMpCi17Ci0gICAgaW50IHJldDsK LQotICAgIG1lbW5vZGVfc2hpZnQgPSBleHRyYWN0X2xzYl9mcm9tX25vZGVzKG5vZGVzLCBudW1u b2Rlcyk7Ci0KLSAgICBpZiAoIG1lbW5vZGVtYXBzaXplIDw9IEFSUkFZX1NJWkUoX21lbW5vZGVt YXApICkKLSAgICAgICAgbWVtbm9kZW1hcCA9IF9tZW1ub2RlbWFwOwotICAgIGVsc2UgaWYgKCBh bGxvY2F0ZV9jYWNoZWFsaWduZWRfbWVtbm9kZW1hcCgpICkKLSAgICAgICAgcmV0dXJuIC1FTk9N RU07Ci0KLSAgICBwcmludGsoS0VSTl9ERUJVRyAiTlVNQTogVXNpbmcgJXUgZm9yIHRoZSBoYXNo IHNoaWZ0LlxuIiwgbWVtbm9kZV9zaGlmdCk7Ci0KLSAgICByZXQgPSBwb3B1bGF0ZV9tZW1ub2Rl bWFwKG5vZGVzLCBudW1ub2RlcywgbWVtbm9kZV9zaGlmdCwgbm9kZWlkcyk7Ci0gICAgaWYgKCBy ZXQgKQotICAgIHsKLSAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiWW91ciBtZW1vcnkgaXMgbm90 IGFsaWduZWQgeW91IG5lZWQgdG8gIgotICAgICAgICAgICAgICAgInJlYnVpbGQgeW91ciBoeXBl cnZpc29yIHdpdGggYSBiaWdnZXIgTk9ERU1BUFNJWkUgIgotICAgICAgICAgICAgICAgInNoaWZ0 PSV1XG4iLCBtZW1ub2RlX3NoaWZ0KTsKLSAgICAgICAgcmV0dXJuIHJldDsKLSAgICB9Ci0KLSAg ICByZXR1cm4gMDsKLX0KLS8qIGluaXRpYWxpemUgTk9ERV9EQVRBIGdpdmVuIG5vZGVpZCBhbmQg c3RhcnQvZW5kICovCi12b2lkIF9faW5pdCBzZXR1cF9ub2RlX2Jvb3RtZW0obm9kZWlkX3Qgbm9k ZWlkLCBwYWRkcl90IHN0YXJ0LCBwYWRkcl90IGVuZCkKLXsKLSAgICB1bnNpZ25lZCBsb25nIHN0 YXJ0X3BmbiwgZW5kX3BmbjsKLQotICAgIHN0YXJ0X3BmbiA9IHBhZGRyX3RvX3BmbihzdGFydCk7 Ci0gICAgZW5kX3BmbiA9IHBhZGRyX3RvX3BmbihlbmQpOwotCi0gICAgTk9ERV9EQVRBKG5vZGVp ZCktPm5vZGVfc3RhcnRfcGZuID0gc3RhcnRfcGZuOwotICAgIE5PREVfREFUQShub2RlaWQpLT5u b2RlX3NwYW5uZWRfcGFnZXMgPSBlbmRfcGZuIC0gc3RhcnRfcGZuOwotCi0gICAgbm9kZV9zZXRf b25saW5lKG5vZGVpZCk7Ci19Ci0KLXZvaWQgX19pbml0IG51bWFfaW5pdF9hcnJheSh2b2lkKQot ewotICAgIGludCByciwgaTsKLQotICAgIC8qIFRoZXJlIGFyZSB1bmZvcnR1bmF0ZWx5IHNvbWUg cG9vcmx5IGRlc2lnbmVkIG1haW5ib2FyZHMgYXJvdW5kCi0gICAgICAgdGhhdCBvbmx5IGNvbm5l Y3QgbWVtb3J5IHRvIGEgc2luZ2xlIENQVS4gVGhpcyBicmVha3MgdGhlIDE6MSBjcHUtPm5vZGUK LSAgICAgICBtYXBwaW5nLiBUbyBhdm9pZCB0aGlzIGZpbGwgaW4gdGhlIG1hcHBpbmcgZm9yIGFs bCBwb3NzaWJsZQotICAgICAgIENQVXMsIGFzIHRoZSBudW1iZXIgb2YgQ1BVcyBpcyBub3Qga25v d24geWV0LgotICAgICAgIFdlIHJvdW5kIHJvYmluIHRoZSBleGlzdGluZyBub2Rlcy4gKi8KLSAg ICByciA9IGZpcnN0X25vZGUobm9kZV9vbmxpbmVfbWFwKTsKLSAgICBmb3IgKCBpID0gMDsgaSA8 IG5yX2NwdV9pZHM7IGkrKyApCi0gICAgewotICAgICAgICBpZiAoIGNwdV90b19ub2RlW2ldICE9 IE5VTUFfTk9fTk9ERSApCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgbnVtYV9zZXRf bm9kZShpLCBycik7Ci0gICAgICAgIHJyID0gbmV4dF9ub2RlKHJyLCBub2RlX29ubGluZV9tYXAp OwotICAgICAgICBpZiAoIHJyID09IE1BWF9OVU1OT0RFUyApCi0gICAgICAgICAgICByciA9IGZp cnN0X25vZGUobm9kZV9vbmxpbmVfbWFwKTsKLSAgICB9Ci19Ci0KLSNpZmRlZiBDT05GSUdfTlVN QV9FTVUKLXN0YXRpYyB1bnNpZ25lZCBpbnQgX19pbml0ZGF0YSBudW1hX2Zha2U7Ci0KLS8qIE51 bWEgZW11bGF0aW9uICovCi1zdGF0aWMgaW50IF9faW5pdCBudW1hX2VtdWxhdGlvbih1aW50NjRf dCBzdGFydF9wZm4sIHVpbnQ2NF90IGVuZF9wZm4pCi17Ci0gICAgdW5zaWduZWQgaW50IGk7Ci0g ICAgc3RydWN0IG5vZGUgbm9kZXNbTUFYX05VTU5PREVTXTsKLSAgICB1aW50NjRfdCBzeiA9ICgo ZW5kX3BmbiAtIHN0YXJ0X3BmbikgPDwgUEFHRV9TSElGVCkgLyBudW1hX2Zha2U7Ci0KLSAgICAv KiBLbHVkZ2UgbmVlZGVkIGZvciB0aGUgaGFzaCBmdW5jdGlvbiAqLwotICAgIGlmICggaHdlaWdo dDY0KHN6KSA+IDEgKQotICAgIHsKLSAgICAgICAgdWludDY0X3QgeCA9IDE7Ci0KLSAgICAgICAg d2hpbGUgKCAoeCA8PCAxKSA8IHN6ICkKLSAgICAgICAgICAgIHggPDw9IDE7Ci0gICAgICAgIGlm ICggeCA8IHN6IC8gMiApCi0gICAgICAgICAgICBwcmludGsoS0VSTl9FUlIKLSAgICAgICAgICAg ICAgICAgICAiTnVtYSBlbXVsYXRpb24gdW5iYWxhbmNlZC4gQ29tcGxhaW4gdG8gbWFpbnRhaW5l clxuIik7Ci0gICAgICAgIHN6ID0geDsKLSAgICB9Ci0KLSAgICBtZW1zZXQoJm5vZGVzLDAsc2l6 ZW9mKG5vZGVzKSk7Ci0gICAgZm9yICggaSA9IDA7IGkgPCBudW1hX2Zha2U7IGkrKyApCi0gICAg ewotICAgICAgICBub2Rlc1tpXS5zdGFydCA9IHBmbl90b19wYWRkcihzdGFydF9wZm4pICsgaSAq IHN6OwotICAgICAgICBpZiAoIGkgPT0gbnVtYV9mYWtlIC0gMSApCi0gICAgICAgICAgICBzeiA9 IHBmbl90b19wYWRkcihlbmRfcGZuKSAtIG5vZGVzW2ldLnN0YXJ0OwotICAgICAgICBub2Rlc1tp XS5lbmQgPSBub2Rlc1tpXS5zdGFydCArIHN6OwotICAgICAgICBwcmludGsoS0VSTl9JTkZPCi0g ICAgICAgICAgICAgICAiRmFraW5nIG5vZGUgJWQgYXQgJSJQUkl4NjQiLSUiUFJJeDY0IiAoJSJQ Ukl1NjQiTUIpXG4iLAotICAgICAgICAgICAgICAgaSwgbm9kZXNbaV0uc3RhcnQsIG5vZGVzW2ld LmVuZCwKLSAgICAgICAgICAgICAgIChub2Rlc1tpXS5lbmQgLSBub2Rlc1tpXS5zdGFydCkgPj4g MjApOwotICAgICAgICBub2RlX3NldF9vbmxpbmUoaSk7Ci0gICAgfQotICAgIGlmICggY29tcHV0 ZV9tZW1ub2RlX3NoaWZ0KG5vZGVzLCBudW1hX2Zha2UsIE5VTEwpICkKLSAgICB7Ci0gICAgICAg IG1lbW5vZGVfc2hpZnQgPSAwOwotICAgICAgICBwcmludGsoS0VSTl9FUlIgIk5vIE5VTUEgaGFz aCBmdW5jdGlvbiBmb3VuZC4gRW11bGF0aW9uIGRpc2FibGVkLlxuIik7Ci0gICAgICAgIHJldHVy biAtMTsKLSAgICB9Ci0gICAgZm9yX2VhY2hfb25saW5lX25vZGUgKCBpICkKLSAgICAgICAgc2V0 dXBfbm9kZV9ib290bWVtKGksIG5vZGVzW2ldLnN0YXJ0LCBub2Rlc1tpXS5lbmQpOwotICAgIG51 bWFfaW5pdF9hcnJheSgpOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQotdm9pZCBfX2lu aXQgbnVtYV9pbml0bWVtX2luaXQodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxv bmcgZW5kX3BmbikKLXsKLSAgICBpbnQgaTsKLQotI2lmZGVmIENPTkZJR19OVU1BX0VNVQotICAg IGlmICggbnVtYV9mYWtlICYmICFudW1hX2VtdWxhdGlvbihzdGFydF9wZm4sIGVuZF9wZm4pICkK LSAgICAgICAgcmV0dXJuOwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfQUNQSV9OVU1BCi0gICAg aWYgKCAhbnVtYV9vZmYgJiYKLSAgICAgICAgICFudW1hX3NjYW5fbm9kZXMocGZuX3RvX3BhZGRy KHN0YXJ0X3BmbiksIHBmbl90b19wYWRkcihlbmRfcGZuKSkgKQotICAgICAgICByZXR1cm47Ci0j ZW5kaWYKLQotICAgIHByaW50ayhLRVJOX0lORk8gIiVzXG4iLAotICAgICAgICAgICBudW1hX29m ZiA/ICJOVU1BIHR1cm5lZCBvZmYiIDogIk5vIE5VTUEgY29uZmlndXJhdGlvbiBmb3VuZCIpOwot Ci0gICAgcHJpbnRrKEtFUk5fSU5GTyAiRmFraW5nIGEgbm9kZSBhdCAlMDE2IlBSSXg2NCItJTAx NiJQUkl4NjQiXG4iLAotICAgICAgICAgICBwZm5fdG9fcGFkZHIoc3RhcnRfcGZuKSwgcGZuX3Rv X3BhZGRyKGVuZF9wZm4pKTsKLSAgICAvKiBzZXR1cCBkdW1teSBub2RlIGNvdmVyaW5nIGFsbCBt ZW1vcnkgKi8KLSAgICBtZW1ub2RlX3NoaWZ0ID0gQklUU19QRVJfTE9ORyAtIDE7Ci0gICAgbWVt bm9kZW1hcCA9IF9tZW1ub2RlbWFwOwotICAgIG5vZGVzX2NsZWFyKG5vZGVfb25saW5lX21hcCk7 Ci0gICAgbm9kZV9zZXRfb25saW5lKDApOwotICAgIGZvciAoIGkgPSAwOyBpIDwgbnJfY3B1X2lk czsgaSsrICkKLSAgICAgICAgbnVtYV9zZXRfbm9kZShpLCAwKTsKLSAgICBjcHVtYXNrX2NvcHko Jm5vZGVfdG9fY3B1bWFza1swXSwgY3B1bWFza19vZigwKSk7Ci0gICAgc2V0dXBfbm9kZV9ib290 bWVtKDAsIHBmbl90b19wYWRkcihzdGFydF9wZm4pLCBwZm5fdG9fcGFkZHIoZW5kX3BmbikpOwot fQotCi12b2lkIG51bWFfYWRkX2NwdShpbnQgY3B1KQotewotICAgIGNwdW1hc2tfc2V0X2NwdShj cHUsICZub2RlX3RvX2NwdW1hc2tbY3B1X3RvX25vZGUoY3B1KV0pOwotfQotCi12b2lkIG51bWFf c2V0X25vZGUoaW50IGNwdSwgbm9kZWlkX3Qgbm9kZSkKLXsKLSAgICBjcHVfdG9fbm9kZVtjcHVd ID0gbm9kZTsKLX0KLQotLyogW251bWE9b2ZmXSAqLwotc3RhdGljIGludCBfX2luaXQgbnVtYV9z ZXR1cChjaGFyICpvcHQpCi17Ci0gICAgaWYgKCAhc3RybmNtcChvcHQsICJvZmYiLCAzKSApCi0g ICAgICAgIG51bWFfb2ZmID0gdHJ1ZTsKLSAgICBpZiAoICFzdHJuY21wKG9wdCwgIm9uIiwgMikg KQotICAgICAgICBudW1hX29mZiA9IGZhbHNlOwotI2lmZGVmIENPTkZJR19OVU1BX0VNVQotICAg IGlmICggIXN0cm5jbXAob3B0LCAiZmFrZT0iLCA1KSApCi0gICAgewotICAgICAgICBudW1hX29m ZiA9IGZhbHNlOwotICAgICAgICBudW1hX2Zha2UgPSBzaW1wbGVfc3RydG91bChvcHQgKyA1LCBO VUxMLCAwKTsKLSAgICAgICAgaWYgKCBudW1hX2Zha2UgPj0gTUFYX05VTU5PREVTICkKLSAgICAg ICAgICAgIG51bWFfZmFrZSA9IE1BWF9OVU1OT0RFUzsKLSAgICB9Ci0jZW5kaWYKLSNpZmRlZiBD T05GSUdfQUNQSV9OVU1BCi0gICAgaWYgKCAhc3RybmNtcChvcHQsIm5vYWNwaSIsIDYpICkKLSAg ICB7Ci0gICAgICAgIG51bWFfb2ZmID0gZmFsc2U7Ci0gICAgICAgIGFjcGlfbnVtYSA9IC0xOwot ICAgIH0KLSNlbmRpZgotCi0gICAgcmV0dXJuIDE7Ci19CiAKIC8qCiAgKiBTZXR1cCBlYXJseSBj cHVfdG9fbm9kZS4KQEAgLTM3OCwxNDggKzcyLDExIEBAIHVuc2lnbmVkIGludCBfX2luaXQgYXJj aF9nZXRfZG1hX2JpdHNpemUodm9pZCkKICAgICAgICAgICAgICAgICAgKyBQQUdFX1NISUZULCAz Mik7CiB9CiAKLXN0YXRpYyB2b2lkIGR1bXBfbnVtYSh1bnNpZ25lZCBjaGFyIGtleSkKLXsKLSAg ICBzX3RpbWVfdCBub3cgPSBOT1coKTsKLSAgICB1bnNpZ25lZCBpbnQgaSwgaiwgbjsKLSAgICBp bnQgZXJyOwotICAgIHN0cnVjdCBkb21haW4gKmQ7Ci0gICAgc3RydWN0IHBhZ2VfaW5mbyAqcGFn ZTsKLSAgICB1bnNpZ25lZCBpbnQgcGFnZV9udW1fbm9kZVtNQVhfTlVNTk9ERVNdOwotICAgIGNv bnN0IHN0cnVjdCB2bnVtYV9pbmZvICp2bnVtYTsKLQotICAgIHByaW50aygiJyVjJyBwcmVzc2Vk IC0+IGR1bXBpbmcgbnVtYSBpbmZvIChub3ctMHglWDolMDhYKVxuIiwga2V5LAotICAgICAgICAg ICAodWludDMyX3QpKG5vdyA+PiAzMiksICh1aW50MzJfdClub3cpOwotCi0gICAgZm9yX2VhY2hf b25saW5lX25vZGUgKCBpICkKLSAgICB7Ci0gICAgICAgIHBhZGRyX3QgcGEgPSBwZm5fdG9fcGFk ZHIobm9kZV9zdGFydF9wZm4oaSkgKyAxKTsKLQotICAgICAgICBwcmludGsoIk5PREUldSBzdGFy dC0+JWx1IHNpemUtPiVsdSBmcmVlLT4lbHVcbiIsCi0gICAgICAgICAgICAgICBpLCBub2RlX3N0 YXJ0X3BmbihpKSwgbm9kZV9zcGFubmVkX3BhZ2VzKGkpLAotICAgICAgICAgICAgICAgYXZhaWxf bm9kZV9oZWFwX3BhZ2VzKGkpKTsKLSAgICAgICAgLyogc2FuaXR5IGNoZWNrIHBoeXNfdG9fbmlk KCkgKi8KLSAgICAgICAgaWYgKCBwaHlzX3RvX25pZChwYSkgIT0gaSApCi0gICAgICAgICAgICBw cmludGsoInBoeXNfdG9fbmlkKCUiUFJJcGFkZHIiKSAtPiAlZCBzaG91bGQgYmUgJXVcbiIsCi0g ICAgICAgICAgICAgICAgICAgcGEsIHBoeXNfdG9fbmlkKHBhKSwgaSk7Ci0gICAgfQotCi0gICAg aiA9IGNwdW1hc2tfZmlyc3QoJmNwdV9vbmxpbmVfbWFwKTsKLSAgICBuID0gMDsKLSAgICBmb3Jf ZWFjaF9vbmxpbmVfY3B1ICggaSApCi0gICAgewotICAgICAgICBpZiAoIGkgIT0gaiArIG4gfHwg Y3B1X3RvX25vZGVbal0gIT0gY3B1X3RvX25vZGVbaV0gKQotICAgICAgICB7Ci0gICAgICAgICAg ICBpZiAoIG4gPiAxICkKLSAgICAgICAgICAgICAgICBwcmludGsoIkNQVSV1Li4uJXUgLT4gTk9E RSVkXG4iLCBqLCBqICsgbiAtIDEsIGNwdV90b19ub2RlW2pdKTsKLSAgICAgICAgICAgIGVsc2UK LSAgICAgICAgICAgICAgICBwcmludGsoIkNQVSV1IC0+IE5PREUlZFxuIiwgaiwgY3B1X3RvX25v ZGVbal0pOwotICAgICAgICAgICAgaiA9IGk7Ci0gICAgICAgICAgICBuID0gMTsKLSAgICAgICAg fQotICAgICAgICBlbHNlCi0gICAgICAgICAgICArK247Ci0gICAgfQotICAgIGlmICggbiA+IDEg KQotICAgICAgICBwcmludGsoIkNQVSV1Li4uJXUgLT4gTk9ERSVkXG4iLCBqLCBqICsgbiAtIDEs IGNwdV90b19ub2RlW2pdKTsKLSAgICBlbHNlCi0gICAgICAgIHByaW50aygiQ1BVJXUgLT4gTk9E RSVkXG4iLCBqLCBjcHVfdG9fbm9kZVtqXSk7Ci0KLSAgICByY3VfcmVhZF9sb2NrKCZkb21saXN0 X3JlYWRfbG9jayk7Ci0KLSAgICBwcmludGsoIk1lbW9yeSBsb2NhdGlvbiBvZiBlYWNoIGRvbWFp bjpcbiIpOwotICAgIGZvcl9lYWNoX2RvbWFpbiAoIGQgKQotICAgIHsKLSAgICAgICAgcHJvY2Vz c19wZW5kaW5nX3NvZnRpcnFzKCk7Ci0KLSAgICAgICAgcHJpbnRrKCJEb21haW4gJXUgKHRvdGFs OiAldSk6XG4iLCBkLT5kb21haW5faWQsIGQtPnRvdF9wYWdlcyk7Ci0KLSAgICAgICAgZm9yX2Vh Y2hfb25saW5lX25vZGUgKCBpICkKLSAgICAgICAgICAgIHBhZ2VfbnVtX25vZGVbaV0gPSAwOwot Ci0gICAgICAgIHNwaW5fbG9jaygmZC0+cGFnZV9hbGxvY19sb2NrKTsKLSAgICAgICAgcGFnZV9s aXN0X2Zvcl9lYWNoKHBhZ2UsICZkLT5wYWdlX2xpc3QpCi0gICAgICAgIHsKLSAgICAgICAgICAg IGkgPSBwaHlzX3RvX25pZCgocGFkZHJfdClwYWdlX3RvX21mbihwYWdlKSA8PCBQQUdFX1NISUZU KTsKLSAgICAgICAgICAgIHBhZ2VfbnVtX25vZGVbaV0rKzsKLSAgICAgICAgfQotICAgICAgICBz cGluX3VubG9jaygmZC0+cGFnZV9hbGxvY19sb2NrKTsKLQotICAgICAgICBmb3JfZWFjaF9vbmxp bmVfbm9kZSAoIGkgKQotICAgICAgICAgICAgcHJpbnRrKCIgICAgTm9kZSAldTogJXVcbiIsIGks IHBhZ2VfbnVtX25vZGVbaV0pOwotCi0gICAgICAgIGlmICggIXJlYWRfdHJ5bG9jaygmZC0+dm51 bWFfcndsb2NrKSApCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAoICFkLT52 bnVtYSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJlYWRfdW5sb2NrKCZkLT52bnVtYV9yd2xv Y2spOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICB2bnVtYSA9 IGQtPnZudW1hOwotICAgICAgICBwcmludGsoIiAgICAgJXUgdm5vZGVzLCAldSB2Y3B1cywgZ3Vl c3QgcGh5c2ljYWwgbGF5b3V0OlxuIiwKLSAgICAgICAgICAgICAgIHZudW1hLT5ucl92bm9kZXMs IGQtPm1heF92Y3B1cyk7Ci0gICAgICAgIGZvciAoIGkgPSAwOyBpIDwgdm51bWEtPm5yX3Zub2Rl czsgaSsrICkKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgaW50IHN0YXJ0X2NwdSA9 IH4wVTsKLQotICAgICAgICAgICAgZXJyID0gc25wcmludGYoa2V5aGFuZGxlcl9zY3JhdGNoLCAx MiwgIiUzdSIsCi0gICAgICAgICAgICAgICAgICAgIHZudW1hLT52bm9kZV90b19wbm9kZVtpXSk7 Ci0gICAgICAgICAgICBpZiAoIGVyciA8IDAgfHwgdm51bWEtPnZub2RlX3RvX3Bub2RlW2ldID09 IE5VTUFfTk9fTk9ERSApCi0gICAgICAgICAgICAgICAgc3RybGNweShrZXloYW5kbGVyX3NjcmF0 Y2gsICI/Pz8iLCBzaXplb2Yoa2V5aGFuZGxlcl9zY3JhdGNoKSk7Ci0KLSAgICAgICAgICAgIHBy aW50aygiICAgICAgICUzdTogcG5vZGUgJXMsIiwgaSwga2V5aGFuZGxlcl9zY3JhdGNoKTsKLQot ICAgICAgICAgICAgcHJpbnRrKCIgdmNwdXMgIik7Ci0KLSAgICAgICAgICAgIGZvciAoIGogPSAw OyBqIDwgZC0+bWF4X3ZjcHVzOyBqKysgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg IGlmICggIShqICYgMHgzZikgKQotICAgICAgICAgICAgICAgICAgICBwcm9jZXNzX3BlbmRpbmdf c29mdGlycXMoKTsKLQotICAgICAgICAgICAgICAgIGlmICggdm51bWEtPnZjcHVfdG9fdm5vZGVb al0gPT0gaSApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAoIHN0 YXJ0X2NwdSA9PSB+MFUgKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg ICAgICAgICBwcmludGsoIiVkIiwgaik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGFydF9j cHUgPSBqOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgICAgIGVsc2UgaWYgKCBzdGFydF9jcHUgIT0gfjBVICkKLSAgICAgICAgICAgICAgICB7 Ci0gICAgICAgICAgICAgICAgICAgIGlmICggaiAtIDEgIT0gc3RhcnRfY3B1ICkKLSAgICAgICAg ICAgICAgICAgICAgICAgIHByaW50aygiLSVkICIsIGogLSAxKTsKLSAgICAgICAgICAgICAgICAg ICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCIgIik7Ci0gICAgICAgICAg ICAgICAgICAgIHN0YXJ0X2NwdSA9IH4wVTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg ICB9Ci0KLSAgICAgICAgICAgIGlmICggc3RhcnRfY3B1ICE9IH4wVSAgJiYgc3RhcnRfY3B1ICE9 IGogLSAxICkKLSAgICAgICAgICAgICAgICBwcmludGsoIi0lZCIsIGogLSAxKTsKLQotICAgICAg ICAgICAgcHJpbnRrKCJcbiIpOwotCi0gICAgICAgICAgICBmb3IgKCBqID0gMDsgaiA8IHZudW1h LT5ucl92bWVtcmFuZ2VzOyBqKysgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlm ICggdm51bWEtPnZtZW1yYW5nZVtqXS5uaWQgPT0gaSApCi0gICAgICAgICAgICAgICAgICAgIHBy aW50aygiICAgICAgICAgICAlMDE2IlBSSXg2NCIgLSAlMDE2IlBSSXg2NCJcbiIsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICB2bnVtYS0+dm1lbXJhbmdlW2pdLnN0YXJ0LAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgdm51bWEtPnZtZW1yYW5nZVtqXS5lbmQpOwotICAgICAgICAgICAg fQotICAgICAgICB9Ci0KLSAgICAgICAgcmVhZF91bmxvY2soJmQtPnZudW1hX3J3bG9jayk7Ci0g ICAgfQotCi0gICAgcmN1X3JlYWRfdW5sb2NrKCZkb21saXN0X3JlYWRfbG9jayk7Ci19Ci0KLXN0 YXRpYyBpbnQgX19pbml0IHJlZ2lzdGVyX251bWFfdHJpZ2dlcih2b2lkKQotewotICAgIHJlZ2lz dGVyX2tleWhhbmRsZXIoJ3UnLCBkdW1wX251bWEsICJkdW1wIE5VTUEgaW5mbyIsIDEpOwotICAg IHJldHVybiAwOwotfQotX19pbml0Y2FsbChyZWdpc3Rlcl9udW1hX3RyaWdnZXIpOwotCisvKgor ICogTG9jYWwgdmFyaWFibGVzOgorICogbW9kZTogQworICogYy1maWxlLXN0eWxlOiAiQlNEIgor ICogYy1iYXNpYy1vZmZzZXQ6IDQKKyAqIGluZGVudC10YWJzLW1vZGU6IG5pbAorICogRW5kOgor ICovCmRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvc21wYm9vdC5jIGIveGVuL2FyY2gveDg2L3Nt cGJvb3QuYwppbmRleCA3OGFmMGQyLi4xNjhjOWQ0IDEwMDY0NAotLS0gYS94ZW4vYXJjaC94ODYv c21wYm9vdC5jCisrKyBiL3hlbi9hcmNoL3g4Ni9zbXBib290LmMKQEAgLTU4LDYgKzU4LDcgQEAg REVGSU5FX1BFUl9DUFVfUkVBRF9NT1NUTFkoY3B1bWFza192YXJfdCwgY3B1X2NvcmVfbWFzayk7 CiBERUZJTkVfUEVSX0NQVV9SRUFEX01PU1RMWShjcHVtYXNrX3Zhcl90LCBzY3JhdGNoX2NwdW1h c2spOwogc3RhdGljIGNwdW1hc2tfdCBzY3JhdGNoX2NwdTBtYXNrOwogCitub2RlbWFza190IF9f cmVhZF9tb3N0bHkgbm9kZV9vbmxpbmVfbWFwID0geyB7IFswXSA9IDFVTCB9IH07CiBjcHVtYXNr X3QgY3B1X29ubGluZV9tYXAgX19yZWFkX21vc3RseTsKIEVYUE9SVF9TWU1CT0woY3B1X29ubGlu ZV9tYXApOwogCmRpZmYgLS1naXQgYS94ZW4vY29tbW9uL01ha2VmaWxlIGIveGVuL2NvbW1vbi9N YWtlZmlsZQppbmRleCAyNmM1YTY0Li5jOGZkYWY3IDEwMDY0NAotLS0gYS94ZW4vY29tbW9uL01h a2VmaWxlCisrKyBiL3hlbi9jb21tb24vTWFrZWZpbGUKQEAgLTY0LDYgKzY0LDcgQEAgb2JqLXkg Kz0gd2FpdC5vCiBvYmotYmluLXkgKz0gd2FybmluZy5pbml0Lm8KIG9iai0kKENPTkZJR19YRU5P UFJPRikgKz0geGVub3Byb2Yubwogb2JqLXkgKz0geG1hbGxvY190bHNmLm8KK29iai0kKENPTkZJ R19OVU1BKSArPSBudW1hLm8KIAogb2JqLWJpbi0kKENPTkZJR19YODYpICs9ICQoZm9yZWFjaCBu LGRlY29tcHJlc3MgYnVuemlwMiB1bnh6IHVubHptYSB1bmx6byB1bmx6NCBlYXJseWNwaW8sJChu KS5pbml0Lm8pCiAKZGlmZiAtLWdpdCBhL3hlbi9jb21tb24vbnVtYS5jIGIveGVuL2NvbW1vbi9u dW1hLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM4MWYxYgotLS0gL2Rl di9udWxsCisrKyBiL3hlbi9jb21tb24vbnVtYS5jCkBAIC0wLDAgKzEsNDg3IEBACisvKgorICog Q29tbW9uIE5VTUEgaGFuZGxpbmcgZnVuY3Rpb25zIGZvciB4ODYgYW5kIGFybS4KKyAqIE9yaWdp bmFsIGNvZGUgZXh0cmFjdGVkIGZyb20gYXJjaC94ODYvbnVtYS5jCisgKgorICogVGhpcyBwcm9n cmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljCisgKiBMaWNlbnNlLCB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRl ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUK KyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBJZiBub3QsIHNlZSA8aHR0cDov L3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2luY2x1ZGUgPHhlbi9pbml0Lmg+Cisj aW5jbHVkZSA8eGVuL2N0eXBlLmg+CisjaW5jbHVkZSA8eGVuL3NjaGVkLmg+CisjaW5jbHVkZSA8 eGVuL25vZGVtYXNrLmg+CisjaW5jbHVkZSA8eGVuL251bWEuaD4KKyNpbmNsdWRlIDx4ZW4va2V5 aGFuZGxlci5oPgorI2luY2x1ZGUgPHhlbi90aW1lLmg+CisjaW5jbHVkZSA8eGVuL3NtcC5oPgor I2luY2x1ZGUgPHhlbi9wZm4uaD4KKyNpbmNsdWRlIDx4ZW4vbW0uaD4KKyNpbmNsdWRlIDx4ZW4v c29mdGlycS5oPgorI2luY2x1ZGUgPHhlbi9zdHJpbmcuaD4KKyNpbmNsdWRlIDxhc20vYWNwaS5o PgorCitzdGF0aWMgaW50IG51bWFfc2V0dXAoY2hhciAqcyk7CitjdXN0b21fcGFyYW0oIm51bWEi LCBudW1hX3NldHVwKTsKKworc3RydWN0IG5vZGVfZGF0YSBub2RlX2RhdGFbTUFYX05VTU5PREVT XTsKKworLyogTWFwcGluZyBmcm9tIHBkeCB0byBub2RlIGlkICovCit1bnNpZ25lZCBpbnQgbWVt bm9kZV9zaGlmdDsKKworLyoKKyAqIEluIGNhc2Ugb2YgbnVtYSBpbml0IGZhaWx1cmUgb3IgbnVt YSBvZmYsCisgKiBtZW1ub2RlX3NoaWZ0IGlzIGluaXRpYWxpemVkIHRvIEJJVFNfUEVSX0xPTkcg LSAxLiBIZW5jZSBhbGxvY2F0ZQorICogbWVtbm9kZW1hcFtdIG9mIEJJVFNfUEVSX0xPTkcuCisg Ki8KK3N0YXRpYyB0eXBlb2YoKm1lbW5vZGVtYXApIF9tZW1ub2RlbWFwW0JJVFNfUEVSX0xPTkdd OwordW5zaWduZWQgbG9uZyBtZW1ub2RlbWFwc2l6ZTsKK3VpbnQ4X3QgKm1lbW5vZGVtYXA7CisK K25vZGVpZF90IF9fcmVhZF9tb3N0bHkgY3B1X3RvX25vZGVbTlJfQ1BVU10gPSB7CisgICAgWzAg Li4uIE5SX0NQVVMtMV0gPSBOVU1BX05PX05PREUKK307CisKK2NwdW1hc2tfdCBfX3JlYWRfbW9z dGx5IG5vZGVfdG9fY3B1bWFza1tNQVhfTlVNTk9ERVNdOworCitib29sIG51bWFfb2ZmOworczgg YWNwaV9udW1hID0gMDsKKworaW50IHNyYXRfZGlzYWJsZWQodm9pZCkKK3sKKyAgICByZXR1cm4g bnVtYV9vZmYgfHwgYWNwaV9udW1hIDwgMDsKK30KKworLyoKKyAqIEdpdmVuIGEgc2hpZnQgdmFs dWUsIHRyeSB0byBwb3B1bGF0ZSBtZW1ub2RlbWFwW10KKyAqIFJldHVybnMgOgorICogMCBpZiBP SworICogLUVOT1NQQyBpZiBtZW1ub2RtYXBbXSB0b28gc21hbGwgKG9yIHNoaWZ0IHRvbyBzbWFs bCkKKyAqIC1FSU5WQUwgaWYgbm9kZSBvdmVybGFwIG9yIGxvc3QgcmFtIChzaGlmdCB0b28gYmln KQorICovCitzdGF0aWMgaW50IF9faW5pdCBwb3B1bGF0ZV9tZW1ub2RlbWFwKGNvbnN0IHN0cnVj dCBub2RlICpub2RlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z aWduZWQgaW50IG51bW5vZGVzLCB1bnNpZ25lZCBpbnQgc2hpZnQsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG5vZGVpZF90ICpub2RlaWRzKQoreworICAgIHVuc2lnbmVk IGxvbmcgc3BkeCwgZXBkeDsKKyAgICBpbnQgaSwgcmVzID0gLUVJTlZBTDsKKworICAgIG1lbXNl dChtZW1ub2RlbWFwLCBOVU1BX05PX05PREUsIG1lbW5vZGVtYXBzaXplICogc2l6ZW9mKCptZW1u b2RlbWFwKSk7CisgICAgZm9yICggaSA9IDA7IGkgPCBudW1ub2RlczsgaSsrICkKKyAgICB7Cisg ICAgICAgIHNwZHggPSBwYWRkcl90b19wZHgobm9kZXNbaV0uc3RhcnQpOworICAgICAgICBlcGR4 ID0gcGFkZHJfdG9fcGR4KG5vZGVzW2ldLmVuZCAtIDEpICsgMTsKKyAgICAgICAgaWYgKCBzcGR4 ID49IGVwZHggKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmICggKGVwZHggPj4g c2hpZnQpID49IG1lbW5vZGVtYXBzaXplICkKKyAgICAgICAgICAgIHJldHVybiAtRU5PU1BDOwor ICAgICAgICBkbyB7CisgICAgICAgICAgICBpZiAoIG1lbW5vZGVtYXBbc3BkeCA+PiBzaGlmdF0g IT0gTlVNQV9OT19OT0RFICkKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKworICAg ICAgICAgICAgaWYgKCAhbm9kZWlkcyApCisgICAgICAgICAgICAgICAgbWVtbm9kZW1hcFtzcGR4 ID4+IHNoaWZ0XSA9IGk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbWVtbm9k ZW1hcFtzcGR4ID4+IHNoaWZ0XSA9IG5vZGVpZHNbaV07CisKKyAgICAgICAgICAgIHNwZHggKz0g KDFVTCA8PCBzaGlmdCk7CisgICAgICAgIH0gd2hpbGUgKCBzcGR4IDwgZXBkeCApOworICAgICAg ICByZXMgPSAwOworICAgIH0KKworICAgIHJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgX19p bml0IGFsbG9jYXRlX2NhY2hlYWxpZ25lZF9tZW1ub2RlbWFwKHZvaWQpCit7CisgICAgdW5zaWdu ZWQgbG9uZyBzaXplID0gUEZOX1VQKG1lbW5vZGVtYXBzaXplICogc2l6ZW9mKCptZW1ub2RlbWFw KSk7CisgICAgdW5zaWduZWQgbG9uZyBtZm4gPSBhbGxvY19ib290X3BhZ2VzKHNpemUsIDEpOwor CisgICAgaWYgKCAhbWZuICkKKyAgICB7CisgICAgICAgIHByaW50ayhLRVJOX0VSUgorICAgICAg ICAgICAgICAgIk5VTUE6IFVuYWJsZSB0byBhbGxvY2F0ZSBNZW1vcnkgdG8gTm9kZSBoYXNoIG1h cFxuIik7CisgICAgICAgIG1lbW5vZGVtYXBzaXplID0gMDsKKyAgICAgICAgcmV0dXJuIC1FTk9N RU07CisgICAgfQorCisgICAgbWVtbm9kZW1hcCA9IG1mbl90b192aXJ0KG1mbik7CisgICAgbWZu IDw8PSBQQUdFX1NISUZUOworICAgIHNpemUgPDw9IFBBR0VfU0hJRlQ7CisgICAgcHJpbnRrKEtF Uk5fREVCVUcgIk5VTUE6IEFsbG9jYXRlZCBtZW1ub2RlbWFwIGZyb20gJWx4IC0gJWx4XG4iLAor ICAgICAgICAgICBtZm4sIG1mbiArIHNpemUpOworICAgIG1lbW5vZGVtYXBzaXplID0gc2l6ZSAv IHNpemVvZigqbWVtbm9kZW1hcCk7CisKKyAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIFRoZSBM U0Igb2YgYWxsIHN0YXJ0IGFuZCBlbmQgYWRkcmVzc2VzIGluIHRoZSBub2RlIG1hcCBpcyB0aGUg dmFsdWUgb2YgdGhlCisgKiBtYXhpbXVtIHBvc3NpYmxlIHNoaWZ0LgorICovCitzdGF0aWMgdW5z aWduZWQgaW50IF9faW5pdCBleHRyYWN0X2xzYl9mcm9tX25vZGVzKGNvbnN0IHN0cnVjdCBub2Rl ICpub2RlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdW5zaWduZWQgaW50IG51bW5vZGVzKQoreworICAgIHVuc2lnbmVkIGludCBpLCBub2Rlc191 c2VkID0gMDsKKyAgICB1bnNpZ25lZCBsb25nIHNwZHgsIGVwZHg7CisgICAgdW5zaWduZWQgbG9u ZyBiaXRmaWVsZCA9IDAsIG1lbXRvcCA9IDA7CisKKyAgICBmb3IgKCBpID0gMDsgaSA8IG51bW5v ZGVzOyBpKysgKQorICAgIHsKKyAgICAgICAgc3BkeCA9IHBhZGRyX3RvX3BkeChub2Rlc1tpXS5z dGFydCk7CisgICAgICAgIGVwZHggPSBwYWRkcl90b19wZHgobm9kZXNbaV0uZW5kIC0gMSkgKyAx OworICAgICAgICBpZiAoIHNwZHggPj0gZXBkeCApCisgICAgICAgICAgICBjb250aW51ZTsKKyAg ICAgICAgYml0ZmllbGQgfD0gc3BkeDsKKyAgICAgICAgbm9kZXNfdXNlZCsrOworICAgICAgICBp ZiAoIGVwZHggPiBtZW10b3AgKQorICAgICAgICAgICAgbWVtdG9wID0gZXBkeDsKKyAgICB9Cisg ICAgaWYgKCBub2Rlc191c2VkIDw9IDEgKQorICAgICAgICBpID0gQklUU19QRVJfTE9ORyAtIDE7 CisgICAgZWxzZQorICAgICAgICBpID0gZmluZF9maXJzdF9iaXQoJmJpdGZpZWxkLCBzaXplb2Yo dW5zaWduZWQgbG9uZykgKiA4KTsKKyAgICBtZW1ub2RlbWFwc2l6ZSA9IChtZW10b3AgPj4gaSkg KyAxOworCisgICAgcmV0dXJuIGk7Cit9CisKK2ludCBfX2luaXQgY29tcHV0ZV9tZW1ub2RlX3No aWZ0KHN0cnVjdCBub2RlICpub2RlcywgdW5zaWduZWQgaW50IG51bW5vZGVzLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbm9kZWlkX3QgKm5vZGVpZHMpCit7CisgICAgaW50IHJl dDsKKworICAgIG1lbW5vZGVfc2hpZnQgPSBleHRyYWN0X2xzYl9mcm9tX25vZGVzKG5vZGVzLCBu dW1ub2Rlcyk7CisKKyAgICBpZiAoIG1lbW5vZGVtYXBzaXplIDw9IEFSUkFZX1NJWkUoX21lbW5v ZGVtYXApICkKKyAgICAgICAgbWVtbm9kZW1hcCA9IF9tZW1ub2RlbWFwOworICAgIGVsc2UgaWYg KCBhbGxvY2F0ZV9jYWNoZWFsaWduZWRfbWVtbm9kZW1hcCgpICkKKyAgICAgICAgcmV0dXJuIC1F Tk9NRU07CisKKyAgICBwcmludGsoS0VSTl9ERUJVRyAiTlVNQTogVXNpbmcgJXUgZm9yIHRoZSBo YXNoIHNoaWZ0LlxuIiwgbWVtbm9kZV9zaGlmdCk7CisKKyAgICByZXQgPSBwb3B1bGF0ZV9tZW1u b2RlbWFwKG5vZGVzLCBudW1ub2RlcywgbWVtbm9kZV9zaGlmdCwgbm9kZWlkcyk7CisgICAgaWYg KCByZXQgKQorICAgIHsKKyAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiWW91ciBtZW1vcnkgaXMg bm90IGFsaWduZWQgeW91IG5lZWQgdG8gIgorICAgICAgICAgICAgICAgInJlYnVpbGQgeW91ciBo eXBlcnZpc29yIHdpdGggYSBiaWdnZXIgTk9ERU1BUFNJWkUgIgorICAgICAgICAgICAgICAgInNo aWZ0PSV1XG4iLCBtZW1ub2RlX3NoaWZ0KTsKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisK KyAgICByZXR1cm4gMDsKK30KKy8qIGluaXRpYWxpemUgTk9ERV9EQVRBIGdpdmVuIG5vZGVpZCBh bmQgc3RhcnQvZW5kICovCit2b2lkIF9faW5pdCBzZXR1cF9ub2RlX2Jvb3RtZW0obm9kZWlkX3Qg bm9kZWlkLCBwYWRkcl90IHN0YXJ0LCBwYWRkcl90IGVuZCkKK3sKKyAgICB1bnNpZ25lZCBsb25n IHN0YXJ0X3BmbiwgZW5kX3BmbjsKKworICAgIHN0YXJ0X3BmbiA9IHBhZGRyX3RvX3BmbihzdGFy dCk7CisgICAgZW5kX3BmbiA9IHBhZGRyX3RvX3BmbihlbmQpOworCisgICAgTk9ERV9EQVRBKG5v ZGVpZCktPm5vZGVfc3RhcnRfcGZuID0gc3RhcnRfcGZuOworICAgIE5PREVfREFUQShub2RlaWQp LT5ub2RlX3NwYW5uZWRfcGFnZXMgPSBlbmRfcGZuIC0gc3RhcnRfcGZuOworCisgICAgbm9kZV9z ZXRfb25saW5lKG5vZGVpZCk7Cit9CisKK3ZvaWQgX19pbml0IG51bWFfaW5pdF9hcnJheSh2b2lk KQoreworICAgIGludCByciwgaTsKKworICAgIC8qIFRoZXJlIGFyZSB1bmZvcnR1bmF0ZWx5IHNv bWUgcG9vcmx5IGRlc2lnbmVkIG1haW5ib2FyZHMgYXJvdW5kCisgICAgICAgdGhhdCBvbmx5IGNv bm5lY3QgbWVtb3J5IHRvIGEgc2luZ2xlIENQVS4gVGhpcyBicmVha3MgdGhlIDE6MSBjcHUtPm5v ZGUKKyAgICAgICBtYXBwaW5nLiBUbyBhdm9pZCB0aGlzIGZpbGwgaW4gdGhlIG1hcHBpbmcgZm9y IGFsbCBwb3NzaWJsZQorICAgICAgIENQVXMsIGFzIHRoZSBudW1iZXIgb2YgQ1BVcyBpcyBub3Qg a25vd24geWV0LgorICAgICAgIFdlIHJvdW5kIHJvYmluIHRoZSBleGlzdGluZyBub2Rlcy4gKi8K KyAgICByciA9IGZpcnN0X25vZGUobm9kZV9vbmxpbmVfbWFwKTsKKyAgICBmb3IgKCBpID0gMDsg aSA8IG5yX2NwdV9pZHM7IGkrKyApCisgICAgeworICAgICAgICBpZiAoIGNwdV90b19ub2RlW2ld ICE9IE5VTUFfTk9fTk9ERSApCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgbnVtYV9z ZXRfbm9kZShpLCBycik7CisgICAgICAgIHJyID0gbmV4dF9ub2RlKHJyLCBub2RlX29ubGluZV9t YXApOworICAgICAgICBpZiAoIHJyID09IE1BWF9OVU1OT0RFUyApCisgICAgICAgICAgICByciA9 IGZpcnN0X25vZGUobm9kZV9vbmxpbmVfbWFwKTsKKyAgICB9Cit9CisKKyNpZmRlZiBDT05GSUdf TlVNQV9FTVUKK3N0YXRpYyB1bnNpZ25lZCBpbnQgX19pbml0ZGF0YSBudW1hX2Zha2U7CisKKy8q IE51bWEgZW11bGF0aW9uICovCitzdGF0aWMgaW50IF9faW5pdCBudW1hX2VtdWxhdGlvbih1aW50 NjRfdCBzdGFydF9wZm4sIHVpbnQ2NF90IGVuZF9wZm4pCit7CisgICAgdW5zaWduZWQgaW50IGk7 CisgICAgc3RydWN0IG5vZGUgbm9kZXNbTUFYX05VTU5PREVTXTsKKyAgICB1aW50NjRfdCBzeiA9 ICgoZW5kX3BmbiAtIHN0YXJ0X3BmbikgPDwgUEFHRV9TSElGVCkgLyBudW1hX2Zha2U7CisKKyAg ICAvKiBLbHVkZ2UgbmVlZGVkIGZvciB0aGUgaGFzaCBmdW5jdGlvbiAqLworICAgIGlmICggaHdl aWdodDY0KHN6KSA+IDEgKQorICAgIHsKKyAgICAgICAgdWludDY0X3QgeCA9IDE7CisKKyAgICAg ICAgd2hpbGUgKCAoeCA8PCAxKSA8IHN6ICkKKyAgICAgICAgICAgIHggPDw9IDE7CisgICAgICAg IGlmICggeCA8IHN6IC8gMiApCisgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIKKyAgICAgICAg ICAgICAgICAgICAiTnVtYSBlbXVsYXRpb24gdW5iYWxhbmNlZC4gQ29tcGxhaW4gdG8gbWFpbnRh aW5lclxuIik7CisgICAgICAgIHN6ID0geDsKKyAgICB9CisKKyAgICBtZW1zZXQoJm5vZGVzLDAs c2l6ZW9mKG5vZGVzKSk7CisgICAgZm9yICggaSA9IDA7IGkgPCBudW1hX2Zha2U7IGkrKyApCisg ICAgeworICAgICAgICBub2Rlc1tpXS5zdGFydCA9IHBmbl90b19wYWRkcihzdGFydF9wZm4pICsg aSAqIHN6OworICAgICAgICBpZiAoIGkgPT0gbnVtYV9mYWtlIC0gMSApCisgICAgICAgICAgICBz eiA9IHBmbl90b19wYWRkcihlbmRfcGZuKSAtIG5vZGVzW2ldLnN0YXJ0OworICAgICAgICBub2Rl c1tpXS5lbmQgPSBub2Rlc1tpXS5zdGFydCArIHN6OworICAgICAgICBwcmludGsoS0VSTl9JTkZP CisgICAgICAgICAgICAgICAiRmFraW5nIG5vZGUgJWQgYXQgJSJQUkl4NjQiLSUiUFJJeDY0IiAo JSJQUkl1NjQiTUIpXG4iLAorICAgICAgICAgICAgICAgaSwgbm9kZXNbaV0uc3RhcnQsIG5vZGVz W2ldLmVuZCwKKyAgICAgICAgICAgICAgIChub2Rlc1tpXS5lbmQgLSBub2Rlc1tpXS5zdGFydCkg Pj4gMjApOworICAgICAgICBub2RlX3NldF9vbmxpbmUoaSk7CisgICAgfQorICAgIGlmICggY29t cHV0ZV9tZW1ub2RlX3NoaWZ0KG5vZGVzLCBudW1hX2Zha2UsIE5VTEwpICkKKyAgICB7CisgICAg ICAgIG1lbW5vZGVfc2hpZnQgPSAwOworICAgICAgICBwcmludGsoS0VSTl9FUlIgIk5vIE5VTUEg aGFzaCBmdW5jdGlvbiBmb3VuZC4gRW11bGF0aW9uIGRpc2FibGVkLlxuIik7CisgICAgICAgIHJl dHVybiAtMTsKKyAgICB9CisgICAgZm9yX2VhY2hfb25saW5lX25vZGUgKCBpICkKKyAgICAgICAg c2V0dXBfbm9kZV9ib290bWVtKGksIG5vZGVzW2ldLnN0YXJ0LCBub2Rlc1tpXS5lbmQpOworICAg IG51bWFfaW5pdF9hcnJheSgpOworCisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYKKwordm9pZCBf X2luaXQgbnVtYV9pbml0bWVtX2luaXQodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVk IGxvbmcgZW5kX3BmbikKK3sKKyAgICBpbnQgaTsKKworI2lmZGVmIENPTkZJR19OVU1BX0VNVQor ICAgIGlmICggbnVtYV9mYWtlICYmICFudW1hX2VtdWxhdGlvbihzdGFydF9wZm4sIGVuZF9wZm4p ICkKKyAgICAgICAgcmV0dXJuOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQUNQSV9OVU1BCisg ICAgaWYgKCAhbnVtYV9vZmYgJiYKKyAgICAgICAgICFudW1hX3NjYW5fbm9kZXMocGZuX3RvX3Bh ZGRyKHN0YXJ0X3BmbiksIHBmbl90b19wYWRkcihlbmRfcGZuKSkgKQorICAgICAgICByZXR1cm47 CisjZW5kaWYKKworICAgIHByaW50ayhLRVJOX0lORk8gIiVzXG4iLAorICAgICAgICAgICBudW1h X29mZiA/ICJOVU1BIHR1cm5lZCBvZmYiIDogIk5vIE5VTUEgY29uZmlndXJhdGlvbiBmb3VuZCIp OworCisgICAgcHJpbnRrKEtFUk5fSU5GTyAiRmFraW5nIGEgbm9kZSBhdCAlMDE2IlBSSXg2NCIt JTAxNiJQUkl4NjQiXG4iLAorICAgICAgICAgICBwZm5fdG9fcGFkZHIoc3RhcnRfcGZuKSwgcGZu X3RvX3BhZGRyKGVuZF9wZm4pKTsKKyAgICAvKiBzZXR1cCBkdW1teSBub2RlIGNvdmVyaW5nIGFs bCBtZW1vcnkgKi8KKyAgICBtZW1ub2RlX3NoaWZ0ID0gQklUU19QRVJfTE9ORyAtIDE7CisgICAg bWVtbm9kZW1hcCA9IF9tZW1ub2RlbWFwOworICAgIG5vZGVzX2NsZWFyKG5vZGVfb25saW5lX21h cCk7CisgICAgbm9kZV9zZXRfb25saW5lKDApOworICAgIGZvciAoIGkgPSAwOyBpIDwgbnJfY3B1 X2lkczsgaSsrICkKKyAgICAgICAgbnVtYV9zZXRfbm9kZShpLCAwKTsKKyAgICBjcHVtYXNrX2Nv cHkoJm5vZGVfdG9fY3B1bWFza1swXSwgY3B1bWFza19vZigwKSk7CisgICAgc2V0dXBfbm9kZV9i b290bWVtKDAsIHBmbl90b19wYWRkcihzdGFydF9wZm4pLCBwZm5fdG9fcGFkZHIoZW5kX3Bmbikp OworfQorCit2b2lkIG51bWFfYWRkX2NwdShpbnQgY3B1KQoreworICAgIGNwdW1hc2tfc2V0X2Nw dShjcHUsICZub2RlX3RvX2NwdW1hc2tbY3B1X3RvX25vZGUoY3B1KV0pOworfQorCit2b2lkIG51 bWFfc2V0X25vZGUoaW50IGNwdSwgbm9kZWlkX3Qgbm9kZSkKK3sKKyAgICBjcHVfdG9fbm9kZVtj cHVdID0gbm9kZTsKK30KKworLyogW251bWE9b2ZmXSAqLworc3RhdGljIGludCBfX2luaXQgbnVt YV9zZXR1cChjaGFyICpvcHQpCit7CisgICAgaWYgKCAhc3RybmNtcChvcHQsICJvZmYiLCAzKSAp CisgICAgICAgIG51bWFfb2ZmID0gdHJ1ZTsKKyAgICBpZiAoICFzdHJuY21wKG9wdCwgIm9uIiwg MikgKQorICAgICAgICBudW1hX29mZiA9IGZhbHNlOworI2lmZGVmIENPTkZJR19OVU1BX0VNVQor ICAgIGlmICggIXN0cm5jbXAob3B0LCAiZmFrZT0iLCA1KSApCisgICAgeworICAgICAgICBudW1h X29mZiA9IGZhbHNlOworICAgICAgICBudW1hX2Zha2UgPSBzaW1wbGVfc3RydG91bChvcHQgKyA1 LCBOVUxMLCAwKTsKKyAgICAgICAgaWYgKCBudW1hX2Zha2UgPj0gTUFYX05VTU5PREVTICkKKyAg ICAgICAgICAgIG51bWFfZmFrZSA9IE1BWF9OVU1OT0RFUzsKKyAgICB9CisjZW5kaWYKKyNpZmRl ZiBDT05GSUdfQUNQSV9OVU1BCisgICAgaWYgKCAhc3RybmNtcChvcHQsIm5vYWNwaSIsIDYpICkK KyAgICB7CisgICAgICAgIG51bWFfb2ZmID0gZmFsc2U7CisgICAgICAgIGFjcGlfbnVtYSA9IC0x OworICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIGR1bXBf bnVtYSh1bnNpZ25lZCBjaGFyIGtleSkKK3sKKyAgICBzX3RpbWVfdCBub3cgPSBOT1coKTsKKyAg ICB1bnNpZ25lZCBpbnQgaSwgaiwgbjsKKyAgICBpbnQgZXJyOworICAgIHN0cnVjdCBkb21haW4g KmQ7CisgICAgc3RydWN0IHBhZ2VfaW5mbyAqcGFnZTsKKyAgICB1bnNpZ25lZCBpbnQgcGFnZV9u dW1fbm9kZVtNQVhfTlVNTk9ERVNdOworICAgIGNvbnN0IHN0cnVjdCB2bnVtYV9pbmZvICp2bnVt YTsKKworICAgIHByaW50aygiJyVjJyBwcmVzc2VkIC0+IGR1bXBpbmcgbnVtYSBpbmZvIChub3ct MHglWDolMDhYKVxuIiwga2V5LAorICAgICAgICAgICAodWludDMyX3QpKG5vdyA+PiAzMiksICh1 aW50MzJfdClub3cpOworCisgICAgZm9yX2VhY2hfb25saW5lX25vZGUgKCBpICkKKyAgICB7Cisg ICAgICAgIHBhZGRyX3QgcGEgPSBwZm5fdG9fcGFkZHIobm9kZV9zdGFydF9wZm4oaSkgKyAxKTsK KworICAgICAgICBwcmludGsoIk5PREUldSBzdGFydC0+JWx1IHNpemUtPiVsdSBmcmVlLT4lbHVc biIsCisgICAgICAgICAgICAgICBpLCBub2RlX3N0YXJ0X3BmbihpKSwgbm9kZV9zcGFubmVkX3Bh Z2VzKGkpLAorICAgICAgICAgICAgICAgYXZhaWxfbm9kZV9oZWFwX3BhZ2VzKGkpKTsKKyAgICAg ICAgLyogc2FuaXR5IGNoZWNrIHBoeXNfdG9fbmlkKCkgKi8KKyAgICAgICAgaWYgKCBwaHlzX3Rv X25pZChwYSkgIT0gaSApCisgICAgICAgICAgICBwcmludGsoInBoeXNfdG9fbmlkKCUiUFJJcGFk ZHIiKSAtPiAlZCBzaG91bGQgYmUgJXVcbiIsCisgICAgICAgICAgICAgICAgICAgcGEsIHBoeXNf dG9fbmlkKHBhKSwgaSk7CisgICAgfQorCisgICAgaiA9IGNwdW1hc2tfZmlyc3QoJmNwdV9vbmxp bmVfbWFwKTsKKyAgICBuID0gMDsKKyAgICBmb3JfZWFjaF9vbmxpbmVfY3B1ICggaSApCisgICAg eworICAgICAgICBpZiAoIGkgIT0gaiArIG4gfHwgY3B1X3RvX25vZGVbal0gIT0gY3B1X3RvX25v ZGVbaV0gKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIG4gPiAxICkKKyAgICAgICAgICAg ICAgICBwcmludGsoIkNQVSV1Li4uJXUgLT4gTk9ERSVkXG4iLCBqLCBqICsgbiAtIDEsIGNwdV90 b19ub2RlW2pdKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwcmludGsoIkNQ VSV1IC0+IE5PREUlZFxuIiwgaiwgY3B1X3RvX25vZGVbal0pOworICAgICAgICAgICAgaiA9IGk7 CisgICAgICAgICAgICBuID0gMTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAg ICArK247CisgICAgfQorICAgIGlmICggbiA+IDEgKQorICAgICAgICBwcmludGsoIkNQVSV1Li4u JXUgLT4gTk9ERSVkXG4iLCBqLCBqICsgbiAtIDEsIGNwdV90b19ub2RlW2pdKTsKKyAgICBlbHNl CisgICAgICAgIHByaW50aygiQ1BVJXUgLT4gTk9ERSVkXG4iLCBqLCBjcHVfdG9fbm9kZVtqXSk7 CisKKyAgICByY3VfcmVhZF9sb2NrKCZkb21saXN0X3JlYWRfbG9jayk7CisKKyAgICBwcmludGso Ik1lbW9yeSBsb2NhdGlvbiBvZiBlYWNoIGRvbWFpbjpcbiIpOworICAgIGZvcl9lYWNoX2RvbWFp biAoIGQgKQorICAgIHsKKyAgICAgICAgcHJvY2Vzc19wZW5kaW5nX3NvZnRpcnFzKCk7CisKKyAg ICAgICAgcHJpbnRrKCJEb21haW4gJXUgKHRvdGFsOiAldSk6XG4iLCBkLT5kb21haW5faWQsIGQt PnRvdF9wYWdlcyk7CisKKyAgICAgICAgZm9yX2VhY2hfb25saW5lX25vZGUgKCBpICkKKyAgICAg ICAgICAgIHBhZ2VfbnVtX25vZGVbaV0gPSAwOworCisgICAgICAgIHNwaW5fbG9jaygmZC0+cGFn ZV9hbGxvY19sb2NrKTsKKyAgICAgICAgcGFnZV9saXN0X2Zvcl9lYWNoKHBhZ2UsICZkLT5wYWdl X2xpc3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIGkgPSBwaHlzX3RvX25pZCgocGFkZHJfdClw YWdlX3RvX21mbihwYWdlKSA8PCBQQUdFX1NISUZUKTsKKyAgICAgICAgICAgIHBhZ2VfbnVtX25v ZGVbaV0rKzsKKyAgICAgICAgfQorICAgICAgICBzcGluX3VubG9jaygmZC0+cGFnZV9hbGxvY19s b2NrKTsKKworICAgICAgICBmb3JfZWFjaF9vbmxpbmVfbm9kZSAoIGkgKQorICAgICAgICAgICAg cHJpbnRrKCIgICAgTm9kZSAldTogJXVcbiIsIGksIHBhZ2VfbnVtX25vZGVbaV0pOworCisgICAg ICAgIGlmICggIXJlYWRfdHJ5bG9jaygmZC0+dm51bWFfcndsb2NrKSApCisgICAgICAgICAgICBj b250aW51ZTsKKworICAgICAgICBpZiAoICFkLT52bnVtYSApCisgICAgICAgIHsKKyAgICAgICAg ICAgIHJlYWRfdW5sb2NrKCZkLT52bnVtYV9yd2xvY2spOworICAgICAgICAgICAgY29udGludWU7 CisgICAgICAgIH0KKworICAgICAgICB2bnVtYSA9IGQtPnZudW1hOworICAgICAgICBwcmludGso IiAgICAgJXUgdm5vZGVzLCAldSB2Y3B1cywgZ3Vlc3QgcGh5c2ljYWwgbGF5b3V0OlxuIiwKKyAg ICAgICAgICAgICAgIHZudW1hLT5ucl92bm9kZXMsIGQtPm1heF92Y3B1cyk7CisgICAgICAgIGZv ciAoIGkgPSAwOyBpIDwgdm51bWEtPm5yX3Zub2RlczsgaSsrICkKKyAgICAgICAgeworICAgICAg ICAgICAgdW5zaWduZWQgaW50IHN0YXJ0X2NwdSA9IH4wVTsKKworICAgICAgICAgICAgZXJyID0g c25wcmludGYoa2V5aGFuZGxlcl9zY3JhdGNoLCAxMiwgIiUzdSIsCisgICAgICAgICAgICAgICAg ICAgIHZudW1hLT52bm9kZV90b19wbm9kZVtpXSk7CisgICAgICAgICAgICBpZiAoIGVyciA8IDAg fHwgdm51bWEtPnZub2RlX3RvX3Bub2RlW2ldID09IE5VTUFfTk9fTk9ERSApCisgICAgICAgICAg ICAgICAgc3RybGNweShrZXloYW5kbGVyX3NjcmF0Y2gsICI/Pz8iLCBzaXplb2Yoa2V5aGFuZGxl cl9zY3JhdGNoKSk7CisKKyAgICAgICAgICAgIHByaW50aygiICAgICAgICUzdTogcG5vZGUgJXMs IiwgaSwga2V5aGFuZGxlcl9zY3JhdGNoKTsKKworICAgICAgICAgICAgcHJpbnRrKCIgdmNwdXMg Iik7CisKKyAgICAgICAgICAgIGZvciAoIGogPSAwOyBqIDwgZC0+bWF4X3ZjcHVzOyBqKysgKQor ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICggIShqICYgMHgzZikgKQorICAgICAg ICAgICAgICAgICAgICBwcm9jZXNzX3BlbmRpbmdfc29mdGlycXMoKTsKKworICAgICAgICAgICAg ICAgIGlmICggdm51bWEtPnZjcHVfdG9fdm5vZGVbal0gPT0gaSApCisgICAgICAgICAgICAgICAg eworICAgICAgICAgICAgICAgICAgICBpZiAoIHN0YXJ0X2NwdSA9PSB+MFUgKQorICAgICAgICAg ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoIiVkIiwgaik7Cisg ICAgICAgICAgICAgICAgICAgICAgICBzdGFydF9jcHUgPSBqOworICAgICAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKCBzdGFydF9j cHUgIT0gfjBVICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmICgg aiAtIDEgIT0gc3RhcnRfY3B1ICkKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiLSVk ICIsIGogLSAxKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg ICAgICAgcHJpbnRrKCIgIik7CisgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2NwdSA9IH4wVTsK KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICggc3Rh cnRfY3B1ICE9IH4wVSAgJiYgc3RhcnRfY3B1ICE9IGogLSAxICkKKyAgICAgICAgICAgICAgICBw cmludGsoIi0lZCIsIGogLSAxKTsKKworICAgICAgICAgICAgcHJpbnRrKCJcbiIpOworCisgICAg ICAgICAgICBmb3IgKCBqID0gMDsgaiA8IHZudW1hLT5ucl92bWVtcmFuZ2VzOyBqKysgKQorICAg ICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICggdm51bWEtPnZtZW1yYW5nZVtqXS5uaWQg PT0gaSApCisgICAgICAgICAgICAgICAgICAgIHByaW50aygiICAgICAgICAgICAlMDE2IlBSSXg2 NCIgLSAlMDE2IlBSSXg2NCJcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB2bnVtYS0+ dm1lbXJhbmdlW2pdLnN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdm51bWEtPnZt ZW1yYW5nZVtqXS5lbmQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmVh ZF91bmxvY2soJmQtPnZudW1hX3J3bG9jayk7CisgICAgfQorCisgICAgcmN1X3JlYWRfdW5sb2Nr KCZkb21saXN0X3JlYWRfbG9jayk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHJlZ2lzdGVyX251 bWFfdHJpZ2dlcih2b2lkKQoreworICAgIHJlZ2lzdGVyX2tleWhhbmRsZXIoJ3UnLCBkdW1wX251 bWEsICJkdW1wIE5VTUEgaW5mbyIsIDEpOworICAgIHJldHVybiAwOworfQorX19pbml0Y2FsbChy ZWdpc3Rlcl9udW1hX3RyaWdnZXIpOworCisvKgorICogTG9jYWwgdmFyaWFibGVzOgorICogbW9k ZTogQworICogYy1maWxlLXN0eWxlOiAiQlNEIgorICogYy1iYXNpYy1vZmZzZXQ6IDQKKyAqIGlu ZGVudC10YWJzLW1vZGU6IG5pbAorICogRW5kOgorICovCmRpZmYgLS1naXQgYS94ZW4vaW5jbHVk ZS9hc20teDg2L2FjcGkuaCBiL3hlbi9pbmNsdWRlL2FzbS14ODYvYWNwaS5oCmluZGV4IDIyMGMy ZDcuLmE2NWM4NWYgMTAwNjQ0Ci0tLSBhL3hlbi9pbmNsdWRlL2FzbS14ODYvYWNwaS5oCisrKyBi L3hlbi9pbmNsdWRlL2FzbS14ODYvYWNwaS5oCkBAIC0xMDMsNyArMTAzLDYgQEAgZXh0ZXJuIHZv aWQgYWNwaV9yZXNlcnZlX2Jvb3RtZW0odm9pZCk7CiAKICNkZWZpbmUgQVJDSF9IQVNfUE9XRVJf SU5JVAkxCiAKLWV4dGVybiBzOCBhY3BpX251bWE7CiBleHRlcm4gaW50IG51bWFfc2Nhbl9ub2Rl cyhwYWRkcl90IHN0YXJ0LCBwYWRkcl90IGVuZCk7CiAKICNpZmRlZiBDT05GSUdfQUNQSV9TTEVF UApkaWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9udW1hLmggYi94ZW4vaW5jbHVkZS9h c20teDg2L251bWEuaAppbmRleCBhY2Y1MDljLi40MWJiM2VmIDEwMDY0NAotLS0gYS94ZW4vaW5j bHVkZS9hc20teDg2L251bWEuaAorKysgYi94ZW4vaW5jbHVkZS9hc20teDg2L251bWEuaApAQCAt Myw3NiArMywyMCBAQAogCiAjaW5jbHVkZSA8eGVuL2NwdW1hc2suaD4KIAotI2RlZmluZSBNQVhf TlVNTk9ERVMgICAgTlJfTk9ERVMKLSNkZWZpbmUgTlJfTk9ERV9NRU1CTEtTIChNQVhfTlVNTk9E RVMgKiAyKQotCiB0eXBlZGVmIHVpbnQ4X3Qgbm9kZWlkX3Q7CiAKIGV4dGVybiBpbnQgc3JhdF9y ZXY7CiAKLWV4dGVybiBub2RlaWRfdCAgICAgIGNwdV90b19ub2RlW05SX0NQVVNdOwotZXh0ZXJu IGNwdW1hc2tfdCAgICAgbm9kZV90b19jcHVtYXNrW107Ci0KLSNkZWZpbmUgY3B1X3RvX25vZGUo Y3B1KSAgICAgICAgIChjcHVfdG9fbm9kZVtjcHVdKQotI2RlZmluZSBwYXJlbnRfbm9kZShub2Rl KSAgICAgICAgKG5vZGUpCi0jZGVmaW5lIG5vZGVfdG9fZmlyc3RfY3B1KG5vZGUpICAoX19mZnMo bm9kZV90b19jcHVtYXNrW25vZGVdKSkKLSNkZWZpbmUgbm9kZV90b19jcHVtYXNrKG5vZGUpICAg IChub2RlX3RvX2NwdW1hc2tbbm9kZV0pCi0KLXN0cnVjdCBub2RlIHsKLSAgICBwYWRkcl90IHN0 YXJ0OwotICAgIHBhZGRyX3QgZW5kOwotfTsKLQotZXh0ZXJuIGludCBjb21wdXRlX21lbW5vZGVf c2hpZnQoc3RydWN0IG5vZGUgKm5vZGVzLCB1bnNpZ25lZCBpbnQgbnVtbm9kZXMsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlaWRfdCAqbm9kZWlkcyk7CiBleHRlcm4gbm9k ZWlkX3QgcHhtX3RvX25vZGUodW5zaWduZWQgaW50IHB4bSk7CiAKICNkZWZpbmUgWk9ORV9BTElH TiAoMVVMIDw8IChNQVhfT1JERVIrUEFHRV9TSElGVCkpCiAKLWV4dGVybiB2b2lkIG51bWFfYWRk X2NwdShpbnQgY3B1KTsKLWV4dGVybiB2b2lkIG51bWFfaW5pdF9hcnJheSh2b2lkKTsKLWV4dGVy biBib29sIG51bWFfb2ZmOwotCi0KLWV4dGVybiBpbnQgc3JhdF9kaXNhYmxlZCh2b2lkKTsKLWV4 dGVybiB2b2lkIG51bWFfc2V0X25vZGUoaW50IGNwdSwgbm9kZWlkX3Qgbm9kZSk7CiBleHRlcm4g bm9kZWlkX3QgYWNwaV9zZXR1cF9ub2RlKHVuc2lnbmVkIGludCBweG0pOwogZXh0ZXJuIHZvaWQg c3JhdF9kZXRlY3Rfbm9kZShpbnQgY3B1KTsKIAotZXh0ZXJuIHZvaWQgc2V0dXBfbm9kZV9ib290 bWVtKG5vZGVpZF90IG5vZGVpZCwgcGFkZHJfdCBzdGFydCwgcGFkZHJfdCBlbmQpOwogZXh0ZXJu IG5vZGVpZF90IGFwaWNpZF90b19ub2RlW107CiBleHRlcm4gdm9pZCBpbml0X2NwdV90b19ub2Rl KHZvaWQpOwogCi0vKiBTaW1wbGUgcGVyZmVjdCBoYXNoIHRvIG1hcCBwZHggdG8gbm9kZSBudW1i ZXJzICovCi1leHRlcm4gdW5zaWduZWQgaW50IG1lbW5vZGVfc2hpZnQ7Ci1leHRlcm4gdW5zaWdu ZWQgbG9uZyBtZW1ub2RlbWFwc2l6ZTsKLWV4dGVybiB1aW50OF90ICptZW1ub2RlbWFwOwotCi1z dHJ1Y3Qgbm9kZV9kYXRhIHsKLSAgICB1bnNpZ25lZCBsb25nIG5vZGVfc3RhcnRfcGZuOwotICAg IHVuc2lnbmVkIGxvbmcgbm9kZV9zcGFubmVkX3BhZ2VzOwotfTsKLQotZXh0ZXJuIHN0cnVjdCBu b2RlX2RhdGEgbm9kZV9kYXRhW107Ci0KLXN0YXRpYyBpbmxpbmUgX19hdHRyaWJ1dGVfcHVyZV9f IG5vZGVpZF90IHBoeXNfdG9fbmlkKHBhZGRyX3QgYWRkcikKLXsKLSAgIG5vZGVpZF90IG5pZDsK LQotICAgQVNTRVJUKChwYWRkcl90b19wZHgoYWRkcikgPj4gbWVtbm9kZV9zaGlmdCkgPCBtZW1u b2RlbWFwc2l6ZSk7Ci0gICBuaWQgPSBtZW1ub2RlbWFwW3BhZGRyX3RvX3BkeChhZGRyKSA+PiBt ZW1ub2RlX3NoaWZ0XTsKLSAgIEFTU0VSVChuaWQgPD0gTUFYX05VTU5PREVTIHx8ICFub2RlX2Rh dGFbbmlkXS5ub2RlX3N0YXJ0X3Bmbik7Ci0KLSAgIHJldHVybiBuaWQ7Ci19Ci0KLSNkZWZpbmUg Tk9ERV9EQVRBKG5pZCkgICAgICAgICAgKCYobm9kZV9kYXRhW25pZF0pKQotCi0jZGVmaW5lIG5v ZGVfc3RhcnRfcGZuKG5pZCkgICAgIE5PREVfREFUQShuaWQpLT5ub2RlX3N0YXJ0X3BmbgotI2Rl ZmluZSBub2RlX3NwYW5uZWRfcGFnZXMobmlkKSBOT0RFX0RBVEEobmlkKS0+bm9kZV9zcGFubmVk X3BhZ2VzCi0jZGVmaW5lIG5vZGVfZW5kX3BmbihuaWQpICAgICAgIE5PREVfREFUQShuaWQpLT5u b2RlX3N0YXJ0X3BmbiArIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5PREVf REFUQShuaWQpLT5ub2RlX3NwYW5uZWRfcGFnZXMKLQogZXh0ZXJuIGludCB2YWxpZF9udW1hX3Jh bmdlKHBhZGRyX3Qgc3RhcnQsIHBhZGRyX3QgZW5kLCBub2RlaWRfdCBub2RlKTsKIAogdm9pZCBz cmF0X3BhcnNlX3JlZ2lvbnMocGFkZHJfdCBhZGRyKTsKZGlmZiAtLWdpdCBhL3hlbi9pbmNsdWRl L2FzbS14ODYvc2V0dXAuaCBiL3hlbi9pbmNsdWRlL2FzbS14ODYvc2V0dXAuaAppbmRleCBjNWIz ZDRlLi5jZmQ4M2Q2IDEwMDY0NAotLS0gYS94ZW4vaW5jbHVkZS9hc20teDg2L3NldHVwLmgKKysr IGIveGVuL2luY2x1ZGUvYXNtLXg4Ni9zZXR1cC5oCkBAIC0yNiw3ICsyNiw2IEBAIGludCB0cmFu c21ldGFfaW5pdF9jcHUodm9pZCk7CiAKIHZvaWQgc2V0X25yX2NwdV9pZHModW5zaWduZWQgaW50 IG1heF9jcHVzKTsKIAotdm9pZCBudW1hX2luaXRtZW1faW5pdCh1bnNpZ25lZCBsb25nIHN0YXJ0 X3BmbiwgdW5zaWduZWQgbG9uZyBlbmRfcGZuKTsKIHZvaWQgYXJjaF9pbml0X21lbW9yeSh2b2lk KTsKIHZvaWQgc3ViYXJjaF9pbml0X21lbW9yeSh2b2lkKTsKIApkaWZmIC0tZ2l0IGEveGVuL2lu Y2x1ZGUveGVuL251bWEuaCBiL3hlbi9pbmNsdWRlL3hlbi9udW1hLmgKaW5kZXggM2JiNGFmYy4u YzZiYmJkZiAxMDA2NDQKLS0tIGEveGVuL2luY2x1ZGUveGVuL251bWEuaAorKysgYi94ZW4vaW5j bHVkZS94ZW4vbnVtYS5oCkBAIC0xLDExICsxLDc1IEBACiAjaWZuZGVmIF9YRU5fTlVNQV9ICiAj ZGVmaW5lIF9YRU5fTlVNQV9ICiAKKyNpbmNsdWRlIDx4ZW4vY3B1bWFzay5oPgorI2luY2x1ZGUg PHhlbi9tbS5oPgogI2luY2x1ZGUgPGFzbS9udW1hLmg+CiAKICNkZWZpbmUgTlVNQV9OT19OT0RF ICAgICAweEZGCiAjZGVmaW5lIE5VTUFfTk9fRElTVEFOQ0UgMHhGRgogCisjZGVmaW5lIE1BWF9O VU1OT0RFUyAgICBOUl9OT0RFUworI2RlZmluZSBOUl9OT0RFX01FTUJMS1MgKE1BWF9OVU1OT0RF UyAqIDIpCisKK3N0cnVjdCBub2RlIHsKKyAgICBwYWRkcl90IHN0YXJ0OworICAgIHBhZGRyX3Qg ZW5kOworfTsKKworZXh0ZXJuIG5vZGVpZF90ICAgICAgY3B1X3RvX25vZGVbTlJfQ1BVU107Citl eHRlcm4gY3B1bWFza190ICAgICBub2RlX3RvX2NwdW1hc2tbXTsKKy8qIFNpbXBsZSBwZXJmZWN0 IGhhc2ggdG8gbWFwIHBkeCB0byBub2RlIG51bWJlcnMgKi8KK2V4dGVybiB1bnNpZ25lZCBpbnQg bWVtbm9kZV9zaGlmdDsKK2V4dGVybiB1bnNpZ25lZCBsb25nIG1lbW5vZGVtYXBzaXplOworZXh0 ZXJuIHVpbnQ4X3QgKm1lbW5vZGVtYXA7CitleHRlcm4gYm9vbCBudW1hX29mZjsKK2V4dGVybiBz OCBhY3BpX251bWE7CisKK3ZvaWQgbnVtYV9pbml0bWVtX2luaXQodW5zaWduZWQgbG9uZyBzdGFy dF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3Bmbik7CitpbnQgY29tcHV0ZV9tZW1ub2RlX3NoaWZ0 KHN0cnVjdCBub2RlICpub2RlcywgdW5zaWduZWQgaW50IG51bW5vZGVzLAorICAgICAgICAgICAg ICAgICAgICAgICAgICBub2RlaWRfdCAqbm9kZWlkcyk7CitpbnQgc3JhdF9kaXNhYmxlZCh2b2lk KTsKK3ZvaWQgbnVtYV9pbml0X2FycmF5KHZvaWQpOwordm9pZCBzZXR1cF9ub2RlX2Jvb3RtZW0o bm9kZWlkX3Qgbm9kZWlkLCBwYWRkcl90IHN0YXJ0LCBwYWRkcl90IGVuZCk7CisKKyNpZmRlZiBD T05GSUdfTlVNQQorI2RlZmluZSBjcHVfdG9fbm9kZShjcHUpICAgICAgICAgKGNwdV90b19ub2Rl W2NwdV0pCisjZGVmaW5lIHBhcmVudF9ub2RlKG5vZGUpICAgICAgICAobm9kZSkKKyNkZWZpbmUg bm9kZV90b19maXJzdF9jcHUobm9kZSkgIChfX2Zmcyhub2RlX3RvX2NwdW1hc2tbbm9kZV0pKQor I2RlZmluZSBub2RlX3RvX2NwdW1hc2sobm9kZSkgICAgKG5vZGVfdG9fY3B1bWFza1tub2RlXSkK Kworc3RydWN0IG5vZGVfZGF0YSB7CisgICAgdW5zaWduZWQgbG9uZyBub2RlX3N0YXJ0X3BmbjsK KyAgICB1bnNpZ25lZCBsb25nIG5vZGVfc3Bhbm5lZF9wYWdlczsKK307CisKK2V4dGVybiBzdHJ1 Y3Qgbm9kZV9kYXRhIG5vZGVfZGF0YVtdOworCitzdGF0aWMgaW5saW5lIF9fYXR0cmlidXRlX3B1 cmVfXyBub2RlaWRfdCBwaHlzX3RvX25pZChwYWRkcl90IGFkZHIpCit7CisgICBub2RlaWRfdCBu aWQ7CisKKyAgIEFTU0VSVCgocGFkZHJfdG9fcGR4KGFkZHIpID4+IG1lbW5vZGVfc2hpZnQpIDwg bWVtbm9kZW1hcHNpemUpOworICAgbmlkID0gbWVtbm9kZW1hcFtwYWRkcl90b19wZHgoYWRkcikg Pj4gbWVtbm9kZV9zaGlmdF07CisgICBBU1NFUlQobmlkIDw9IE1BWF9OVU1OT0RFUyB8fCAhbm9k ZV9kYXRhW25pZF0ubm9kZV9zdGFydF9wZm4pOworCisgICByZXR1cm4gbmlkOworfQorCisjZGVm aW5lIE5PREVfREFUQShuaWQpICAgICAgICAgICgmKG5vZGVfZGF0YVtuaWRdKSkKKworI2RlZmlu ZSBub2RlX3N0YXJ0X3BmbihuaWQpICAgICBOT0RFX0RBVEEobmlkKS0+bm9kZV9zdGFydF9wZm4K KyNkZWZpbmUgbm9kZV9zcGFubmVkX3BhZ2VzKG5pZCkgTk9ERV9EQVRBKG5pZCktPm5vZGVfc3Bh bm5lZF9wYWdlcworI2RlZmluZSBub2RlX2VuZF9wZm4obmlkKSAgICAgICBOT0RFX0RBVEEobmlk KS0+bm9kZV9zdGFydF9wZm4gKyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBO T0RFX0RBVEEobmlkKS0+bm9kZV9zcGFubmVkX3BhZ2VzCisKK3ZvaWQgbnVtYV9hZGRfY3B1KGlu dCBjcHUpOwordm9pZCBudW1hX3NldF9ub2RlKGludCBjcHUsIG5vZGVpZF90IG5vZGUpOworI2Vs c2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBudW1hX2FkZF9jcHUoaW50IGNwdSkgeyB9CitzdGF0aWMg aW5saW5lIHZvaWQgbnVtYV9zZXRfbm9kZShpbnQgY3B1LCBub2RlaWRfdCBub2RlKSB7IH0KKyNl bmRpZgorCiAjZGVmaW5lIHZjcHVfdG9fbm9kZSh2KSAoY3B1X3RvX25vZGUoKHYpLT5wcm9jZXNz b3IpKQogCiAjZGVmaW5lIGRvbWFpbl90b19ub2RlKGQpIFwKLS0gCjIuNy40CgoKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcg bGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcveGVuLWRl dmVsCg==