From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jordan Niethe Date: Mon, 08 May 2023 07:23:32 +0000 Subject: [RFC PATCH v1 5/5] KVM: PPC: Add support for nested PAPR guests Message-Id: <20230508072332.2937883-6-jpn@linux.vnet.ibm.com> List-Id: References: <20230508072332.2937883-1-jpn@linux.vnet.ibm.com> In-Reply-To: <20230508072332.2937883-1-jpn@linux.vnet.ibm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="macroman" Content-Transfer-Encoding: base64 To: linuxppc-dev@lists.ozlabs.org Cc: Jordan Niethe , mikey@neuling.org, sbhat@linux.ibm.com, kautuk.consul.1980@gmail.com, npiggin@gmail.com, kvm-ppc@vger.kernel.org, vaibhav@linux.ibm.com QSBzZXJpZXMgb2YgaGNhbGxzIGhhdmUgYmVlbiBhZGRlZCB0byB0aGUgUEFQUiB3aGljaCBhbGxv dyBhIHJlZ3VsYXIKZ3Vlc3QgcGFydGl0aW9uIHRvIGNyZWF0ZSBhbmQgbWFuYWdlIGd1ZXN0IHBh cnRpdGlvbnMgb2YgaXRzIG93bi4gQWRkCnN1cHBvcnQgdG8gS1ZNIHRvIHV0aWxpemUgdGhlc2Ug aGNhbGxzIHRvIGVuYWJsZSBydW5uaW5nIG5lc3RlZCBndWVzdHMuCgpPdmVydmlldyBvZiB0aGUg bmV3IGhjYWxsIHVzYWdlOgoKLSBMMSBhbmQgTDAgbmVnb3RpYXRlIGNhcGFiaWxpdGllcyB3aXRo CiAgSF9HVUVTVF97RyxTfUVUX0NBUEFCSUxJVElFUygpCgotIEwxIHJlcXVlc3RzIHRoZSBMMCBj cmVhdGUgYSBMMiB3aXRoCiAgSF9HVUVTVF9DUkVBVEUoKSBhbmQgcmVjZWl2ZXMgYSBoYW5kbGUg dG8gdXNlIGluIGZ1dHVyZSBoY2FsbHMKCi0gTDEgcmVxdWVzdHMgdGhlIEwwIGNyZWF0ZSBhIEwy IHZDUFUgd2l0aAogIEhfR1VFU1RfQ1JFQVRFX1ZDUFUoKQoKLSBMMSBzZXRzIHVwIHRoZSBMMiB1 c2luZyBIX0dVRVNUX1NFVCBhbmQgdGhlCiAgSF9HVUVTVF9WQ1BVX1JVTiBpbnB1dCBidWZmZXIK Ci0gTDEgcmVxdWVzdHMgdGhlIEwwIHJ1bnMgdGhlIEwyIHZDUFUgdXNpbmcgSF9HVUVTVF9WQ1BV X1JVTigpCgotIEwyIHJldHVybnMgdG8gTDEgd2l0aCBhbiBleGl0IHJlYXNvbiBhbmQgTDEgcmVh ZHMgdGhlCiAgSF9HVUVTVF9WQ1BVX1JVTiBvdXRwdXQgYnVmZmVyIHBvcHVsYXRlZCBieSB0aGUg TDAKCi0gTDEgaGFuZGxlcyB0aGUgZXhpdCB1c2luZyBIX0dFVF9TVEFURSBpZiBuZWNlc3NhcnkK Ci0gTDEgcmVydW5zIEwyIHZDUFUgd2l0aCBIX0dVRVNUX1ZDUFVfUlVOCgotIEwxIGZyZWVzIHRo ZSBMMiBpbiB0aGUgTDAgd2l0aCBIX0dVRVNUX0RFTEVURSgpCgpTdXBwb3J0IGZvciB0aGUgbmV3 IEFQSSBpcyBkZXRlcm1pbmVkIGJ5IHRyeWluZwpIX0dVRVNUX0dFVF9DQVBBQklMSVRJRVMuIE9u IGEgc3VjY2Vzc2Z1bCByZXR1cm4sIHRoZSBuZXcgQVBJIHdpbGwgdGhlbgpiZSB1c2VkLgoKVXNl IHRoZSB2Y3B1IHJlZ2lzdGVyIHN0YXRlIHNldHRlcnMgZm9yIHRyYWNraW5nIG1vZGlmaWVkIGd1 ZXN0IHN0YXRlCmVsZW1lbnRzIGFuZCBjb3B5IHRoZSB0aHJlYWQgd2lkZSB2YWx1ZXMgaW50byB0 aGUgSF9HVUVTVF9WQ1BVX1JVTiBpbnB1dApidWZmZXIgaW1tZWRpYXRlbHkgYmVmb3JlIHJ1bm5p bmcgYSBMMi4gVGhlIGd1ZXN0IHdpZGUKZWxlbWVudHMgY2FuIG5vdCBiZSBhZGRlZCB0byB0aGUg aW5wdXQgYnVmZmVyIHNvIHNlbmQgdGhlbSB3aXRoIGEKc2VwZXJhdGUgSF9HVUVTVF9TRVQgY2Fs bCBpZiBuZWNlc3NhcnkuCgpNYWtlIHRoZSB2Y3B1IHJlZ2lzdGVyIGdldHRlciBsb2FkIHRoZSBj b3JyZXNwb25kaW5nIHZhbHVlIGZyb20gdGhlIHJlYWwKaG9zdCB3aXRoIEhfR1VFU1RfR0VULiBU byBhdm9pZCB1bm5lY2Vzc2FyaWx5IGNhbGxpbmcgSF9HVUVTVF9HRVQsIHRyYWNrCndoaWNoIHZh bHVlcyBoYXZlIGFscmVhZHkgYmVlbiBsb2FkZWQgYmV0d2VlbiBIX0dVRVNUX1ZDUFVfUlVOIGNh bGxzLiBJZgphbiBlbGVtZW50IGlzIHByZXNlbnQgaW4gdGhlIEhfR1VFU1RfVkNQVV9SVU4gb3V0 cHV0IGJ1ZmZlciBpdCBhbHNvIGRvZXMKbm90IG5lZWQgdG8gYmUgbG9hZGVkIGFnYWluLgoKVGhl cmUgaXMgZXhpc3Rpbmcgc3VwcG9ydCBmb3IgcnVubmluZyBuZXN0ZWQgZ3Vlc3RzIG9uIEtWTQp3 aXRoIHBvd2VybnYuIEhvd2V2ZXIgdGhlIGludGVyZmFjZSB1c2VkIGZvciB0aGlzIGlzIG5vdCBz dXBwb3J0ZWQgYnkKb3RoZXIgUEFQUiBob3N0cy4gVGhpcyBleGlzdGluZyBBUEkgaXMgc3RpbGwg c3VwcG9ydGVkLgoKU2lnbmVkLW9mZi1ieTogSm9yZGFuIE5pZXRoZSA8anBuQGxpbnV4LnZuZXQu aWJtLmNvbT4KLS0tCiBEb2N1bWVudGF0aW9uL3Bvd2VycGMvaW5kZXgucnN0ICAgICAgICAgICAg ICAgfCAgIDEgKwogRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2t2bS1uZXN0ZWQucnN0ICAgICAgICAg IHwgNjM2ICsrKysrKysrKysrKwogYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2d1ZXN0LXN0YXRl LWJ1ZmZlci5oIHwgMTUwICsrLQogYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2h2Y2FsbC5oICAg ICAgICAgICAgIHwgIDMwICsKIGFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYm9vazNzLmgg ICAgICAgICB8IDEyMiArKy0KIGFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYm9vazNzXzY0 LmggICAgICB8ICAgNiArCiBhcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCAgICAg ICAgICAgfCAgMjEgKwogYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9wcGMuaCAgICAgICAg ICAgIHwgIDY0ICstCiBhcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGxwYXJfd3JhcHBlcnMuaCAg ICAgfCAxOTggKysrKwogYXJjaC9wb3dlcnBjL2t2bS9NYWtlZmlsZSAgICAgICAgICAgICAgICAg ICAgIHwgICAxICsKIGFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMgICAgICAgICAgICAgICAg ICB8IDExOCArKy0KIGFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmggICAgICAgICAgICAgICAg ICB8ICA3NSArLQogYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfbmVzdGVkLmMgICAgICAgICAg IHwgIDM0ICstCiBhcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9wYXByLmMgICAgICAgICAgICAg fCA5NDcgKysrKysrKysrKysrKysrKysrCiBhcmNoL3Bvd2VycGMva3ZtL2VtdWxhdGVfbG9hZHN0 b3JlLmMgICAgICAgICAgfCAgIDQgKy0KIDE1IGZpbGVzIGNoYW5nZWQsIDIzMTQgaW5zZXJ0aW9u cygrKSwgOTMgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgRG9jdW1lbnRhdGlvbi9w b3dlcnBjL2t2bS1uZXN0ZWQucnN0CiBjcmVhdGUgbW9kZSAxMDA2NDQgYXJjaC9wb3dlcnBjL2t2 bS9ib29rM3NfaHZfcGFwci5jCgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2lu ZGV4LnJzdCBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9pbmRleC5yc3QKaW5kZXggODVlODBlMzAx NjBiLi41YTE1ZGM2Mzg5YWIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9pbmRl eC5yc3QKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2luZGV4LnJzdApAQCAtMjUsNiArMjUs NyBAQCBwb3dlcnBjCiAgICAgaXNhLXZlcnNpb25zCiAgICAga2FzbHItYm9va2UzMgogICAgIG1w YzUyeHgKKyAgICBrdm0tbmVzdGVkCiAgICAgcGFwcl9oY2FsbHMKICAgICBwY2lfaW92X3Jlc291 cmNlX29uX3Bvd2VybnYKICAgICBwbXUtZWJiCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bv d2VycGMva3ZtLW5lc3RlZC5yc3QgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMva3ZtLW5lc3RlZC5y c3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi45NDJmNDIyZDYxYTkK LS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMva3ZtLW5lc3RlZC5yc3QK QEAgLTAsMCArMSw2MzYgQEAKKy4uIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisK Kz09PT09PT09PT09PT09PT09PQorTmVzdGVkIEtWTSBvbiBQT1dFUgorPT09PT09PT09PT09PT09 PT09CisKK0ludHJvZHVjdGlvbgorPT09PT09CisKK1RoaXMgZG9jdW1lbnQgZXhwbGFpbnMgaG93 IGEgZ3Vlc3Qgb3BlcmF0aW5nIHN5c3RlbSBjYW4gYWN0IGFzIGEKK2h5cGVydmlzb3IgYW5kIHJ1 biBuZXN0ZWQgZ3Vlc3RzIHRocm91Z2ggdGhlIHVzZSBvZiBoeXBlcmNhbGxzLCBpZiB0aGUKK2h5 cGVydmlzb3IgaGFzIGltcGxlbWVudGVkIHRoZW0uIFRoZSB0ZXJtcyBMMCwgTDEsIGFuZCBMMiBh cmUgdXNlZCB0bworcmVmZXIgdG8gZGlmZmVyZW50IHNvZnR3YXJlIGVudGl0aWVzLiBMMCBpcyB0 aGUgaHlwZXJ2aXNvciBtb2RlIGVudGl0eQordGhhdCB3b3VsZCBub3JtYWxseSBiZSBjYWxsZWQg dGhlICJob3N0IiBvciAiaHlwZXJ2aXNvciIuIEwxIGlzIGEKK2d1ZXN0IHZpcnR1YWwgbWFjaGlu ZSB0aGF0IGlzIGRpcmVjdGx5IHJ1biB1bmRlciBMMCBhbmQgaXMgaW5pdGlhdGVkCithbmQgY29u dHJvbGxlZCBieSBMMC4gTDIgaXMgYSBndWVzdCB2aXJ0dWFsIG1hY2hpbmUgdGhhdCBpcyBpbml0 aWF0ZWQKK2FuZCBjb250cm9sbGVkIGJ5IEwxIGFjdGluZyBhcyBhIGh5cGVydmlzb3IuCisKK0V4 aXN0aW5nIEFQSQorPT09PT09CisKK0xpbnV4L0tWTSBoYXMgaGFkIHN1cHBvcnQgZm9yIE5lc3Rp bmcgYXMgYW4gTDAgb3IgTDEgc2luY2UgMjAxOAorCitUaGUgTDAgY29kZSB3YXMgYWRkZWQ6Ogor CisgICBjb21taXQgOGUzZjVmYzEwNDVkYzQ5ZmQxNzViOTc4YzU0NTdmNWY1MWU3YTJjZQorICAg QXV0aG9yOiBQYXVsIE1hY2tlcnJhcyA8cGF1bHVzQG96bGFicy5vcmc+CisgICBEYXRlOiAgIE1v biBPY3QgOCAxNjozMTowMyAyMDE4ICsxMTAwCisgICBLVk06IFBQQzogQm9vazNTIEhWOiBGcmFt ZXdvcmsgYW5kIGhjYWxsIHN0dWJzIGZvciBuZXN0ZWQgdmlydHVhbGl6YXRpb24KKworVGhlIEwx IGNvZGUgd2FzIGFkZGVkOjoKKworICAgY29tbWl0IDM2MGNhZTMxMzcwMmNkZDBiOTBmODJjMjYx YTgzMDJmZWNlZjAzMGEKKyAgIEF1dGhvcjogUGF1bCBNYWNrZXJyYXMgPHBhdWx1c0BvemxhYnMu b3JnPgorICAgRGF0ZTogICBNb24gT2N0IDggMTY6MzE6MDQgMjAxOCArMTEwMAorICAgS1ZNOiBQ UEM6IEJvb2szUyBIVjogTmVzdGVkIGd1ZXN0IGVudHJ5IHZpYSBoeXBlcmNhbGwKKworVGhpcyBB UEkgd29ya3MgcHJpbWFyaWx5IHVzaW5nIGEgc2luZ2xlIGhjYWxsIGhfZW50ZXJfbmVzdGVkKCku IFRoaXMKK2NhbGwgbWFkZSBieSB0aGUgTDEgdG8gdGVsbCB0aGUgTDAgdG8gc3RhcnQgYW4gTDIg dkNQVSB3aXRoIHRoZSBnaXZlbgorc3RhdGUuIFRoZSBMMCB0aGVuIHN0YXJ0cyB0aGlzIEwyIGFu ZCBydW5zIHVudGlsIGFuIEwyIGV4aXQgY29uZGl0aW9uCitpcyByZWFjaGVkLiBPbmNlIHRoZSBM MiBleGl0cywgdGhlIHN0YXRlIG9mIHRoZSBMMiBpcyBnaXZlbiBiYWNrIHRvCit0aGUgTDEgYnkg dGhlIEwwLiBUaGUgZnVsbCBMMiB2Q1BVIHN0YXRlIGlzIGFsd2F5cyB0cmFuc2ZlcnJlZCBmcm9t CithbmQgdG8gTDEgd2hlbiB0aGUgTDIgaXMgcnVuLiBUaGUgTDAgZG9lc24ndCBrZWVwIGFueSBz dGF0ZSBvbiB0aGUgTDIKK3ZDUFUgKGV4Y2VwdCBpbiB0aGUgc2hvcnQgc2VxdWVuY2UgaW4gdGhl IEwwIG9uIEwxIC0+IEwyIGVudHJ5IGFuZCBMMgorLT4gTDEgZXhpdCkuCisKK1RoZSBvbmx5IHN0 YXRlIGtlcHQgYnkgdGhlIEwwIGlzIHRoZSBwYXJ0aXRpb24gdGFibGUuIFRoZSBMMSByZWdpc3Rl cnMKK2l0J3MgcGFydGl0aW9uIHRhYmxlIHVzaW5nIHRoZSBoX3NldF9wYXJ0aXRpb25fdGFibGUo KSBoY2FsbC4gQWxsCitvdGhlciBzdGF0ZSBoZWxkIGJ5IHRoZSBMMCBhYm91dCB0aGUgTDJzIGlz IGNhY2hlZCBzdGF0ZSAoc3VjaCBhcworc2hhZG93IHBhZ2UgdGFibGVzKS4KKworVGhlIEwxIG1h eSBydW4gYW55IEwyIG9yIHZDUFUgd2l0aG91dCBmaXJzdCBpbmZvcm1pbmcgdGhlIEwwLiBJdAor c2ltcGx5IHN0YXJ0cyB0aGUgdkNQVSB1c2luZyBoX2VudGVyX25lc3RlZCgpLiBUaGUgY3JlYXRp b24gb2YgTDJzIGFuZAordkNQVXMgaXMgZG9uZSBpbXBsaWNpdGx5IHdoZW5ldmVyIGhfZW50ZXJf bmVzdGVkKCkgaXMgY2FsbGVkLgorCitJbiB0aGlzIGRvY3VtZW50LCB3ZSBjYWxsIHRoaXMgZXhp c3RpbmcgQVBJIHRoZSB2MSBBUEkuCisKK05ldyBQQVBSIEFQSQorPT09PT09PSsKK1RoZSBuZXcg UEFQUiBBUEkgY2hhbmdlcyBmcm9tIHRoZSB2MSBBUEkgc3VjaCB0aGF0IHRoZSBjcmVhdGluZyBM MiBhbmQKK2Fzc29jaWF0ZWQgdkNQVXMgaXMgZXhwbGljaXQuIEluIHRoaXMgZG9jdW1lbnQsIHdl IGNhbGwgdGhpcyB0aGUgdjIKK0FQSS4KKworaF9lbnRlcl9uZXN0ZWQoKSBpcyByZXBsYWNlZCB3 aXRoIEhfR1VFU1RfVkNQVV9SVU4oKS4gIEJlZm9yZSB0aGlzIGNhbgorYmUgY2FsbGVkIHRoZSBM MSBtdXN0IGV4cGxpY2l0bHkgY3JlYXRlIHRoZSBMMiB1c2luZyBoX2d1ZXN0X2NyZWF0ZSgpCith bmQgYW55IGFzc29jaWF0ZWQgdkNQVXMoKSBjcmVhdGVkIHdpdGggaF9ndWVzdF9jcmVhdGVfdkNQ VSgpLiBHZXR0aW5nCithbmQgc2V0dGluZyB2Q1BVIHN0YXRlIGNhbiBhbHNvIGJlIHBlcmZvcm1l ZCB1c2luZyBoX2d1ZXN0X3tnfHN9ZXQKK2hjYWxsLgorCitUaGUgYmFzaWMgZXhlY3V0aW9uIGZs b3cgaXMgZm9yIGFuIEwxIHRvIGNyZWF0ZSBhbiBMMiwgcnVuIGl0LCBhbmQKK2RlbGV0ZSBpdCBp czoKKworLSBMMSBhbmQgTDAgbmVnb3RpYXRlIGNhcGFiaWxpdGllcyB3aXRoIEhfR1VFU1Rfe0cs U31FVF9DQVBBQklMSVRJRVMoKQorICAobm9ybWFsbHkgYXQgTDEgYm9vdCB0aW1lKS4KKworLSBM MSByZXF1ZXN0cyB0aGUgTDAgY3JlYXRlIGFuIEwyIHdpdGggSF9HVUVTVF9DUkVBVEUoKSBhbmQg cmVjZWl2ZXMgYSB0b2tlbgorCistIEwxIHJlcXVlc3RzIHRoZSBMMCBjcmVhdGUgYW4gTDIgdkNQ VSB3aXRoIEhfR1VFU1RfQ1JFQVRFX1ZDUFUoKQorCistIEwxIGFuZCBMMCBjb21tdW5pY2F0ZSB0 aGUgdkNQVSBzdGF0ZSB1c2luZyB0aGUgSF9HVUVTVF97RyxTfUVUKCkgaGNhbGwKKworLSBMMSBy ZXF1ZXN0cyB0aGUgTDAgcnVucyB0aGUgdkNQVSBydW5uaW5nIEhfR1VFU1RfVkNQVV9SVU4oKSBo Y2FsbAorCistIEwxIGRlbGV0ZXMgTDIgd2l0aCBIX0dVRVNUX0RFTEVURSgpCisKK01vcmUgZGV0 YWlscyBvZiB0aGUgaW5kaXZpZHVhbCBoY2FsbHMgZm9sbG93czoKKworSENBTEwgRGV0YWlscwor PT09PT09KworVGhpcyBkb2N1bWVudGF0aW9uIGlzIHByb3ZpZGVkIHRvIGdpdmUgYW4gb3ZlcmFs bCB1bmRlcnN0YXRpbmcgb2YgdGhlCitBUEkuIEl0IGRvZXNuJ3QgYWltIHRvIHByb3ZpZGUgYWxs IHRoZSBkZXRhaWxzIHJlcXVpcmVkIHRvIGltcGxlbWVudAorYW4gTDEgb3IgTDAuIExhdGVzdCB2 ZXJzaW9uIG9mIFBBUFIgY2FuIGJlIHJlZmVycmVkIGZvciBtb3JlIGRldGFpbHMuCisKK0FsbCB0 aGVzZSBIQ0FMTHMgYXJlIG1hZGUgYnkgdGhlIEwxIHRvIHRoZSBMMC4KKworSF9HVUVTVF9HRVRf Q0FQQUJJTElUSUVTKCkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgaXMgY2Fs bGVkIHRvIGdldCB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBMMCBuZXN0ZWQKK2h5cGVydmlzb3Iu IFRoaXMgaW5jbHVkZXMgY2FwYWJpbGl0aWVzIHN1Y2ggdGhlIENQVSB2ZXJzaW9ucyAoZWcKK1BP V0VSOSwgUE9XRVIxMCkgdGhhdCBhcmUgc3VwcG9ydGVkIGFzIEwyczo6CisKKyAgSF9HVUVTVF9H RVRfQ0FQQUJJTElUSUVTKHVpbnQ2NCBmbGFncykKKworICBQYXJhbWV0ZXJzOgorICAgIElucHV0 OgorICAgICAgZmxhZ3M6IFJlc2VydmVkCisgICAgT3V0cHV0OgorICAgICAgUjM6IFJldHVybiBj b2RlCisgICAgICBSNDogSHlwZXJ2aXNvciBTdXBwb3J0ZWQgQ2FwYWJpbGl0aWVzIGJpdG1hcCAx CisKK0hfR1VFU1RfU0VUX0NBUEFCSUxJVElFUygpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorCitUaGlzIGlzIGNhbGxlZCB0byBpbmZvcm0gdGhlIEwwIG9mIHRoZSBjYXBhYmlsaXRpZXMg b2YgdGhlIEwxCitoeXBlcnZpc29yLiBUaGUgc2V0IG9mIGZsYWdzIHBhc3NlZCBoZXJlIGFyZSB0 aGUgc2FtZSBhcworSF9HVUVTVF9HRVRfQ0FQQUJJTElUSUVTKCkKKworVHlwaWNhbGx5LCBHRVQg d2lsbCBiZSBjYWxsZWQgZmlyc3QgYW5kIHRoZW4gU0VUIHdpbGwgYmUgY2FsbGVkIHdpdGggYQor c3Vic2V0IG9mIHRoZSBmbGFncyByZXR1cm5lZCBmcm9tIEdFVC4gVGhpcyBwcm9jZXNzIGFsbG93 cyB0aGUgTDAgYW5kCitMMSB0byBuZWdvdGlhdGUgYW4gYWdyZWVkIHNldCBvZiBjYXBhYmlsaXRp ZXM6OgorCisgIEhfR1VFU1RfU0VUX0NBUEFCSUxJVElFUyh1aW50NjQgZmxhZ3MsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICB1aW50NjQgY2FwYWJpbGl0aWVzQml0bWFwMSkKKyAgUGFyYW1l dGVyczoKKyAgICBJbnB1dDoKKyAgICAgIGZsYWdzOiBSZXNlcnZlZAorICAgICAgY2FwYWJpbGl0 aWVzQml0bWFwMTogT25seSBjYXBhYmlsaXRpZXMgYWR2ZXJ0aXNlZCB0aHJvdWdoCisgICAgICAg ICAgICAgICAgICAgICAgICAgICBIX0dVRVNUX0dFVF9DQVBBQklMSVRJRVMKKyAgICBPdXRwdXQ6 CisgICAgICBSMzogUmV0dXJuIGNvZGUKKyAgICAgIFI0OiBJZiBSMyA9IEhfUDI6IFRoZSBudW1i ZXIgb2YgaW52YWxpZCBiaXRtYXBzCisgICAgICBSNTogSWYgUjMgPSBIX1AyOiBUaGUgaW5kZXgg b2YgZmlyc3QgaW52YWxpZCBiaXRtYXAKKworSF9HVUVTVF9DUkVBVEUoKQorLS0tLS0tLS0tLS0t LS0tLQorCitUaGlzIGlzIGNhbGxlZCB0byBjcmVhdGUgYW4gTDIuIEEgdW5pcXVlIElEIG9mIHRo ZSBMMiBjcmVhdGVkCisoc2ltaWxhciB0byBhbiBMUElEKSBpcyByZXR1cm5lZCwgd2hpY2ggY2Fu IGJlIHVzZWQgb24gc3Vic2VxdWVudCBIQ0FMTHMgdG8KK2lkZW50aWZ5IHRoZSBMMjo6CisKKyAg SF9HVUVTVF9DUkVBVEUodWludDY0IGZsYWdzLAorICAgICAgICAgICAgICAgICB1aW50NjQgY29u dGludWVUb2tlbik7CisgIFBhcmFtZXRlcnM6CisgICAgSW5wdXQ6CisgICAgICBmbGFnczogUmVz ZXJ2ZWQKKyAgICAgIGNvbnRpbnVlVG9rZW46IEluaXRpYWwgY2FsbCBzZXQgdG8gLTEuIFN1YnNl cXVlbnQgY2FsbHMsCisgICAgICAgICAgICAgICAgICAgICBhZnRlciBIX0J1c3kgb3IgSF9Mb25n QnVzeU9yZGVyIGhhcyBiZWVuCisgICAgICAgICAgICAgICAgICAgICByZXR1cm5lZCwgdmFsdWUg dGhhdCB3YXMgcmV0dXJuZWQgaW4gUjQuCisgICAgT3V0cHV0OgorICAgICAgUjM6IFJldHVybiBj b2RlLiBOb3RhYmxlOgorICAgICAgICBIX05vdF9Fbm91Z2hfUmVzb3VyY2VzOiBVbmFibGUgdG8g Y3JlYXRlIEd1ZXN0IFZDUFUgZHVlIHRvIG5vdAorICAgICAgICBlbm91Z2ggSHlwZXJ2aXNvciBt ZW1vcnkuIFNlZSBIX0dVRVNUX0NSRUFURV9HRVRfU1RBVEUoZmxhZ3MgKyAgICAgICAgdGFrZU93 bmVyc2hpcE9mVmNwdVN0YXRlKQorICAgICAgUjQ6IElmIFIzID0gSF9CdXN5IG9yX0hfTG9uZ0J1 c3lPcmRlciAtPiBjb250aW51ZVRva2VuCisKK0hfR1VFU1RfQ1JFQVRFX1ZDUFUoKQorLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgaXMgY2FsbGVkIHRvIGNyZWF0ZSBhIHZDUFUgYXNzb2Np YXRlZCB3aXRoIGFuIEwyLiBUaGUgTDIgaWQKKyhyZXR1cm5lZCBmcm9tIEhfR1VFU1RfQ1JFQVRF KCkpIHNob3VsZCBiZSBwYXNzZWQgaXQuIEFsc28gcGFzc2VkIGluCitpcyBhIHVuaXF1ZSAoZm9y IHRoaXMgTDIpIHZDUFVpZC4gVGhpcyB2Q1BVaWQgaXMgYWxsb2NhdGVkIGJ5IHRoZQorTDE6Ogor CisgIEhfR1VFU1RfQ1JFQVRFX1ZDUFUodWludDY0IGZsYWdzLAorICAgICAgICAgICAgICAgICAg ICAgIHVpbnQ2NCBndWVzdElkLAorICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NCB2Y3B1SWQp OworICBQYXJhbWV0ZXJzOgorICAgIElucHV0OgorICAgICAgZmxhZ3M6IFJlc2VydmVkCisgICAg ICBndWVzdElkOiBJRCBvYnRhaW5lZCBmcm9tIEhfR1VFU1RfQ1JFQVRFCisgICAgICB2Y3B1SWQ6 IElEIG9mIHRoZSB2Q1BVIHRvIGJlIGNyZWF0ZWQuIFRoaXMgbXVzdCBiZSB3aXRoaW4gdGhlCisg ICAgICAgICAgICAgIHJhbmdlIG9mIDAgdG8gMjA0NworICAgIE91dHB1dDoKKyAgICAgIFIzOiBS ZXR1cm4gY29kZS4gTm90YWJsZToKKyAgICAgICAgSF9Ob3RfRW5vdWdoX1Jlc291cmNlczogVW5h YmxlIHRvIGNyZWF0ZSBHdWVzdCBWQ1BVIGR1ZSB0byBub3QKKyAgICAgICAgZW5vdWdoIEh5cGVy dmlzb3IgbWVtb3J5LiBTZWUgSF9HVUVTVF9DUkVBVEVfR0VUX1NUQVRFKGZsYWdzICsgICAgICAg IHRha2VPd25lcnNoaXBPZlZjcHVTdGF0ZSkKKworSF9HVUVTVF9HRVRfU1RBVEUoKQorLS0tLS0t LS0tLS0tLS0tLS0tLQorCitUaGlzIGlzIGNhbGxlZCB0byBnZXQgc3RhdGUgYXNzb2NpYXRlZCB3 aXRoIGFuIEwyIChHdWVzdC13aWRlIG9yIHZDUFUgc3BlY2lmaWMpLgorVGhpcyBpbmZvIGlzIHBh c3NlZCB2aWEgdGhlIEd1ZXN0IFN0YXRlIEJ1ZmZlciAoR1NCKSwgYSBzdGFuZGFyZCBmb3JtYXQg YXMKK2V4cGxhaW5lZCBsYXRlciBpbiB0aGlzIGRvYywgbmVjZXNzYXJ5IGRldGFpbHMgYmVsb3c6 CisKK1RoaXMgY2FuIHNldCBlaXRoZXIgTDIgd2lkZSBvciB2Y3B1IHNwZWNpZmljIGluZm9ybWF0 aW9uLiBFeGFtcGxlcyBvZgorTDIgd2lkZSBpcyB0aGUgdGltZWJhc2Ugb2Zmc2V0IG9yIHByb2Nl c3Mgc2NvcGVkIHBhZ2UgdGFibGUKK2luZm8uIEV4YW1wbGVzIG9mIHZDUFUgd2lkZSBhcmUgR1BS cyBvciBWU1JzLiBBIGJpdCBpbiB0aGUgZmxhZ3MKK3BhcmFtZXRlciBzcGVjaWZpZXMgaWYgdGhp cyBjYWxsIGlzIEwyIHdpZGUgb3IgdkNQVSBzcGVjaWZpYyBhbmQgdGhlCitJRHMgaW4gdGhlIEdT QiBtdXN0IG1hdGNoIHRoaXMuCisKK1RoZSBMMSBwcm92aWRlcyBhIHBvaW50ZXIgdG8gdGhlIEdT QiBhcyBhIHBhcmFtZXRlciB0byB0aGlzIGNhbGwuIEFsc28KK3Byb3ZpZGVkIGlzIHRoZSBMMiBh bmQgdkNQVSBJRHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdGF0ZSB0byBzZXQuCisKK1RoZSBMMSB3 cml0ZXMgb25seSB0aGUgSURzIGFuZCBzaXplcyBpbiB0aGUgR1NCLiAgTDAgd3JpdGVzIHRoZQor YXNzb2NpYXRlZCB2YWx1ZXMgZm9yIGVhY2ggSUQgaW4gdGhlIEdTQjo6CisKKyAgSF9HVUVTVF9H RVRfU1RBVEUodWludDY0IGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0 IGd1ZXN0SWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjQgdmNwdUlkLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0IGRhdGFCdWZmZXIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICB1aW50NjQgZGF0YUJ1ZmZlclNpemVJbkJ5dGVzKTsKKyAgUGFyYW1ldGVy czoKKyAgICBJbnB1dDoKKyAgICAgIGZsYWdzOgorICAgICAgICAgQml0IDA6IGdldEd1ZXN0V2lk ZVN0YXRlOiBSZXF1ZXN0IHN0YXRlIG9mIHRoZSBHdWVzdCBpbnN0ZWFkCisgICAgICAgICAgIG9m IGFuIGluZGl2aWR1YWwgVkNQVS4KKyAgICAgICAgIEJpdCAxOiB0YWtlT3duZXJzaGlwT2ZWY3B1 U3RhdGUgSW5kaWNhdGUgdGhlIEwxIGlzIHRha2luZworICAgICAgICAgICBvdmVyIG93bmVyc2hp cCBvZiB0aGUgVkNQVSBzdGF0ZSBhbmQgdGhhdCB0aGUgTDAgY2FuIGZyZWUKKyAgICAgICAgICAg dGhlIHN0b3JhZ2UgaG9sZGluZyB0aGUgc3RhdGUuIFRoZSBWQ1BVIHN0YXRlIHdpbGwgbmVlZCB0 bworICAgICAgICAgICBiZSByZXR1cm5lZCB0byB0aGUgSHlwZXJ2aXNvciB2aWEgSF9HVUVTVF9T RVRfU1RBVEUgcHJpb3IKKyAgICAgICAgICAgdG8gSF9HVUVTVF9SVU5fVkNQVSBiZWluZyBjYWxs ZWQgZm9yIHRoaXMgVkNQVS4gVGhlIGRhdGEKKyAgICAgICAgICAgcmV0dXJuZWQgaW4gdGhlIGRh dGFCdWZmZXIgaXMgaW4gYSBIeXBlcnZpc29yIGludGVybmFsCisgICAgICAgICAgIGZvcm1hdC4K KyAgICAgICAgIEJpdHMgMi02MzogUmVzZXJ2ZWQKKyAgICAgIGd1ZXN0SWQ6IElEIG9idGFpbmVk IGZyb20gSF9HVUVTVF9DUkVBVEUKKyAgICAgIHZjcHVJZDogSUQgb2YgdGhlIHZDUFUgcGFzcyB0 byBIX0dVRVNUX0NSRUFURV9WQ1BVCisgICAgICBkYXRhQnVmZmVyOiBBIEwxIHJlYWwgYWRkcmVz cyBvZiB0aGUgR1NCLgorICAgICAgICBJZiB0YWtlT3duZXJzaGlwT2ZWY3B1U3RhdGUsIHNpemUg bXVzdCBiZSBhdCBsZWFzdCB0aGUgc2l6ZQorICAgICAgICByZXR1cm5lZCBieSBJRD0weDAwMDEK KyAgICAgIGRhdGFCdWZmZXJTaXplSW5CeXRlczogU2l6ZSBvZiBkYXRhQnVmZmVyCisgICAgT3V0 cHV0OgorICAgICAgUjM6IFJldHVybiBjb2RlCisgICAgICBSNDogSWYgUjMgPSBIX0ludmFsaWRf RWxlbWVudF9JZDogVGhlIGFycmF5IGluZGV4IG9mIHRoZSBiYWQKKyAgICAgICAgICAgIGVsZW1l bnQgSUQuCisgICAgICAgICAgSWYgUjMgPSBIX0ludmFsaWRfRWxlbWVudF9TaXplOiBUaGUgYXJy YXkgaW5kZXggb2YgdGhlIGJhZAorICAgICAgICAgICAgIGVsZW1lbnQgc2l6ZS4KKyAgICAgICAg ICBJZiBSMyA9IEhfSW52YWxpZF9FbGVtZW50X1ZhbHVlOiBUaGUgYXJyYXkgaW5kZXggb2YgdGhl IGJhZAorICAgICAgICAgICAgIGVsZW1lbnQgdmFsdWUuCisKK0hfR1VFU1RfU0VUX1NUQVRFKCkK Ky0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBpcyBjYWxsZWQgdG8gc2V0IEwyIHdpZGUgb3Ig dkNQVSBzcGVjaWZpYyBMMiBzdGF0ZS4gVGhpcyBpbmZvIGlzCitwYXNzZWQgdmlhIHRoZSBHdWVz dCBTdGF0ZSBCdWZmZXIgKEdTQiksIG5lY2Vzc2FyeSBkZXRhaWxzIGJlbG93OgorCitUaGlzIGNh biBzZXQgZWl0aGVyIEwyIHdpZGUgb3IgdmNwdSBzcGVjaWZpYyBpbmZvcm1hdGlvbi4gRXhhbXBs ZXMgb2YKK0wyIHdpZGUgaXMgdGhlIHRpbWViYXNlIG9mZnNldCBvciBwcm9jZXNzIHNjb3BlZCBw YWdlIHRhYmxlCitpbmZvLiBFeGFtcGxlcyBvZiB2Q1BVIHdpZGUgYXJlIEdQUnMgb3IgVlNScy4g QSBiaXQgaW4gdGhlIGZsYWdzCitwYXJhbWV0ZXIgc3BlY2lmaWVzIGlmIHRoaXMgY2FsbCBpcyBM MiB3aWRlIG9yIHZDUFUgc3BlY2lmaWMgYW5kIHRoZQorSURzIGluIHRoZSBHU0IgbXVzdCBtYXRj aCB0aGlzLgorCitUaGUgTDEgcHJvdmlkZXMgYSBwb2ludGVyIHRvIHRoZSBHU0IgYXMgYSBwYXJh bWV0ZXIgdG8gdGhpcyBjYWxsLiBBbHNvCitwcm92aWRlZCBpcyB0aGUgTDIgYW5kIHZDUFUgSURz IGFzc29jaWF0ZWQgd2l0aCB0aGUgc3RhdGUgdG8gc2V0LgorCitUaGUgTDEgd3JpdGVzIGFsbCB2 YWx1ZXMgaW4gdGhlIEdTQiBhbmQgdGhlIEwwIG9ubHkgcmVhZHMgdGhlIEdTQiBmb3IKK3RoaXMg Y2FsbDo6CisKKyAgSF9HVUVTVF9TRVRfU1RBVEUodWludDY0IGZsYWdzLAorICAgICAgICAgICAg ICAgICAgICB1aW50NjQgZ3Vlc3RJZCwKKyAgICAgICAgICAgICAgICAgICAgdWludDY0IHZjcHVJ ZCwKKyAgICAgICAgICAgICAgICAgICAgdWludDY0IGRhdGFCdWZmZXIsCisgICAgICAgICAgICAg ICAgICAgIHVpbnQ2NCBkYXRhQnVmZmVyU2l6ZUluQnl0ZXMpOworICBQYXJhbWV0ZXJzOgorICAg IElucHV0OgorICAgICAgZmxhZ3M6CisgICAgICAgICBCaXQgMDogZ2V0R3Vlc3RXaWRlU3RhdGU6 IFJlcXVlc3Qgc3RhdGUgb2YgdGhlIEd1ZXN0IGluc3RlYWQKKyAgICAgICAgICAgb2YgYW4gaW5k aXZpZHVhbCBWQ1BVLgorICAgICAgICAgQml0IDE6IHJldHVybk93bmVyc2hpcE9mVmNwdVN0YXRl IFJldHVybiBHdWVzdCBWQ1BVIHN0YXRlLiBTZWUKKyAgICAgICAgICAgR0VUX1NUQVRFIHRha2VP d25lcnNoaXBPZlZjcHVTdGF0ZQorICAgICAgICAgQml0cyAyLTYzOiBSZXNlcnZlZAorICAgICAg Z3Vlc3RJZDogSUQgb2J0YWluZWQgZnJvbSBIX0dVRVNUX0NSRUFURQorICAgICAgdmNwdUlkOiBJ RCBvZiB0aGUgdkNQVSBwYXNzIHRvIEhfR1VFU1RfQ1JFQVRFX1ZDUFUKKyAgICAgIGRhdGFCdWZm ZXI6IEEgTDEgcmVhbCBhZGRyZXNzIG9mIHRoZSBHU0IuCisgICAgICAgIElmIHRha2VPd25lcnNo aXBPZlZjcHVTdGF0ZSwgc2l6ZSBtdXN0IGJlIGF0IGxlYXN0IHRoZSBzaXplCisgICAgICAgIHJl dHVybmVkIGJ5IElEPTB4MDAwMQorICAgICAgZGF0YUJ1ZmZlclNpemVJbkJ5dGVzOiBTaXplIG9m IGRhdGFCdWZmZXIKKyAgICBPdXRwdXQ6CisgICAgICBSMzogUmV0dXJuIGNvZGUKKyAgICAgIFI0 OiBJZiBSMyA9IEhfSW52YWxpZF9FbGVtZW50X0lkOiBUaGUgYXJyYXkgaW5kZXggb2YgdGhlIGJh ZAorICAgICAgICAgICAgZWxlbWVudCBJRC4KKyAgICAgICAgICBJZiBSMyA9IEhfSW52YWxpZF9F bGVtZW50X1NpemU6IFRoZSBhcnJheSBpbmRleCBvZiB0aGUgYmFkCisgICAgICAgICAgICAgZWxl bWVudCBzaXplLgorICAgICAgICAgIElmIFIzID0gSF9JbnZhbGlkX0VsZW1lbnRfVmFsdWU6IFRo ZSBhcnJheSBpbmRleCBvZiB0aGUgYmFkCisgICAgICAgICAgICAgZWxlbWVudCB2YWx1ZS4KKwor SF9HVUVTVF9SVU5fVkNQVSgpCistLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBpcyBjYWxsZWQg dG8gcnVuIGFuIEwyIHZDUFUuIFRoZSBMMiBhbmQgdkNQVSBJRHMgYXJlIHBhc3NlZCBpbiBhcwor cGFyYW1ldGVycy4gVGhlIHZDUFUgcnVuIHdpdGggdGhlIHN0YXRlIHNldCBwcmV2aW91c2x5IHVz aW5nCitIX0dVRVNUX1NFVF9TVEFURSgpLiBXaGVuIHRoZSBMMiBleGl0cywgdGhlIEwxIHdpbGwg cmVzdW1lIGZyb20gdGhpcworaGNhbGwuCisKK1RoaXMgaGNhbGwgYWxzbyBoYXMgYXNzb2NpYXRl ZCBpbnB1dCBhbmQgb3V0cHV0IEdTQnMuIFVubGlrZQorSF9HVUVTVF97UyxHfUVUX1NUQVRFKCks IHRoZXNlIEdTQiBwb2ludGVycyBhcmUgbm90IHBhc3NlZCBpbiBhcworcGFyYW1ldGVycyB0byB0 aGUgaGNhbGwgKFRoaXMgd2FzIGRvbmUgaW4gdGhlIGludGVyZXN0IG9mCitwZXJmb3JtYW5jZSku IFRoZSBsb2NhdGlvbnMgb2YgdGhlc2UgR1NCcyBtdXN0IGJlIHByZXJlZ2lzdGVyZWQgdXNpbmcK K3RoZSBIX0dVRVNUX1NFVF9TVEFURSgpIGNhbGwgd2l0aCBJRCAweDBjMDAgYW5kIDB4MGMwMSAo c2VlIHRhYmxlCitiZWxvdykuCisKK1RoZSBpbnB1dCBHU0IgbWF5IGNvbnRhaW4gb25seSBWQ1BV IHdpZGUgZWxlbWVudHMgdG8gYmUgc2V0LiBUaGlzIEdTQgorbWF5IGFsc28gY29udGFpbiB6ZXJv IGVsZW1lbnRzIChpZSAwIGluIHRoZSBmaXJzdCA0IGJ5dGVzIG9mIHRoZSBHU0IpCitpZiBub3Ro aW5nIG5lZWRzIHRvIGJlIHNldC4KKworT24gZXhpdCBmcm9tIHRoZSBoY2FsbCwgdGhlIG91dHB1 dCBidWZmZXIgaXMgZmlsbGVkIHdpdGggZWxlbWVudHMKK2RldGVybWluZWQgYnkgdGhlIEwwLiBU aGUgcmVhc29uIGZvciB0aGUgZXhpdCBpcyBjb250YWluZWQgaW4gR1BSNCAoaWUKK05JUCBpcyBw dXQgaW4gR1BSNCkuICBUaGUgZWxlbWVudHMgcmV0dXJuZWQgZGVwZW5kIG9uIHRoZSBleGl0Cit0 eXBlLiBGb3IgZXhhbXBsZSwgaWYgdGhlIGV4aXQgcmVhc29uIGlzIHRoZSBMMiBkb2luZyBhIGhj YWxsIChHUFI0ICsweGMwMCksIHRoZW4gR1BSMy0xMiBhcmUgcHJvdmlkZWQgaW4gdGhlIG91dHB1 dCBHU0IgYXMgdGhpcyBpcyB0aGUKK3N0YXRlIGxpa2VseSBuZWVkZWQgdG8gc2VydmljZSB0aGUg aGNhbGwuIElmIGFkZGl0aW9uYWwgc3RhdGUgaXMKK25lZWRlZCwgSF9HVUVTVF9HRVRfU1RBVEUo KSBtYXkgYmUgY2FsbGVkIGJ5IHRoZSBMMS4KKworVG8gc3ludGhlc2l6ZSBpbnRlcnJ1cHRzIGlu IHRoZSBMMiwgd2hlbiBjYWxsaW5nIEhfR1VFU1RfUlVOX1ZDUFUoKQordGhlIEwxIG1heSBzZXQg YSBmbGFnIChhcyBhIGhjYWxsIHBhcmFtZXRlcikgYW5kIHRoZSBMMCB3aWxsCitzeW50aGVzaXpl IHRoZSBpbnRlcnJ1cHQgaW4gdGhlIEwyLiBBbHRlcm5hdGl2ZWx5LCB0aGUgTDEgbWF5CitzeW50 aGVzaXplIHRoZSBpbnRlcnJ1cHQgaXRzZWxmIHVzaW5nIEhfR1VFU1RfU0VUX1NUQVRFKCkgb3Ig dGhlCitIX0dVRVNUX1JVTl9WQ1BVKCkgaW5wdXQgR1NCIHRvIHNldCB0aGUgc3RhdGUgYXBwcm9w cmlhdGVseTo6CisKKyAgSF9HVUVTVF9SVU5fVkNQVSh1aW50NjQgZmxhZ3MsCisgICAgICAgICAg ICAgICAgICAgdWludDY0IGd1ZXN0SWQsCisgICAgICAgICAgICAgICAgICAgdWludDY0IHZjcHVJ ZCwKKyAgICAgICAgICAgICAgICAgICB1aW50NjQgZGF0YUJ1ZmZlciwKKyAgICAgICAgICAgICAg ICAgICB1aW50NjQgZGF0YUJ1ZmZlclNpemVJbkJ5dGVzKTsKKyAgUGFyYW1ldGVyczoKKyAgICBJ bnB1dDoKKyAgICAgIGZsYWdzOgorICAgICAgICAgQml0IDA6IGdlbmVyYXRlRXh0ZXJuYWxJbnRl cnJ1cHQ6IEdlbmVyYXRlIGFuIGV4dGVybmFsIGludGVycnVwdAorICAgICAgICAgQml0IDE6IGdl bmVyYXRlUHJpdmlsZWdlZERvb3JiZWxsOiBHZW5lcmF0ZSBhIFByaXZpbGVnZWQgRG9vcmJlbGwK KyAgICAgICAgIEJpdCAyOiBzZW5kVG9TeXN0ZW1SZXNldOKAnTogR2VuZXJhdGUgYSBTeXN0ZW0g UmVzZXQgSW50ZXJydXB0CisgICAgICAgICBCaXRzIDMtNjM6IFJlc2VydmVkCisgICAgICBndWVz dElkOiBJRCBvYnRhaW5lZCBmcm9tIEhfR1VFU1RfQ1JFQVRFCisgICAgICB2Y3B1SWQ6IElEIG9m IHRoZSB2Q1BVIHBhc3MgdG8gSF9HVUVTVF9DUkVBVEVfVkNQVQorICAgIE91dHB1dDoKKyAgICAg IFIzOiBSZXR1cm4gY29kZQorICAgICAgUjQ6IElmIFIzID0gSF9TdWNjZXNzOiBUaGUgcmVhc29u IEwxIFZDUFUgZXhpdGVkIChpZS4gTklBKQorICAgICAgICAgICAgMHgwMDA6IFRoZSBWQ1BVIHN0 b3BwZWQgcnVubmluZyBmb3IgYW4gdW5zcGVjaWZpZWQgcmVhc29uLiBBbgorICAgICAgICAgICAg ICBleGFtcGxlIG9mIHRoaXMgaXMgdGhlIEh5cGVydmlzb3Igc3RvcHBpbmcgYSBWQ1BVIHJ1bm5p bmcKKyAgICAgICAgICAgICAgZHVlIHRvIGFuIG91dHN0YW5kaW5nIGludGVycnVwdCBmb3IgdGhl IEhvc3QgUGFydGl0aW9uLgorICAgICAgICAgICAgMHg5ODA6IEhERUMKKyAgICAgICAgICAgIDB4 QzAwOiBIQ0FMTAorICAgICAgICAgICAgMHhFMDA6IEhEU0kKKyAgICAgICAgICAgIDB4RTIwOiBI SVNJCisgICAgICAgICAgICAweEU0MDogSEVBCisgICAgICAgICAgICAweEY4MDogSFYgRmFjIFVu YXZhaWwKKyAgICAgICAgICBJZiBSMyA9IEhfSW52YWxpZF9FbGVtZW50X0lkLCBIX0ludmFsaWRf RWxlbWVudF9TaXplLCBvcgorICAgICAgICAgICAgSF9JbnZhbGlkX0VsZW1lbnRfVmFsdWU6IFI0 IGlzIG9mZnNldCBvZiB0aGUgaW52YWxpZCBlbGVtZW50CisgICAgICAgICAgICBpbiB0aGUgaW5w dXQgYnVmZmVyLgorCitIX0dVRVNUX0RFTEVURSgpCistLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMg aXMgY2FsbGVkIHRvIGRlbGV0ZSBhbiBMMi4gQWxsIGFzc29jaWF0ZWQgdkNQVXMgYXJlIGFsc28K K2RlbGV0ZWQuIE5vIHNwZWNpZmljIHZDUFUgZGVsZXRlIGNhbGwgaXMgcHJvdmlkZWQuCisKK0Eg ZmxhZyBtYXkgYmUgcHJvdmlkZWQgdG8gZGVsZXRlIGFsbCBndWVzdHMuIFRoaXMgaXMgdXNlZCB0 byByZXNldCB0aGUKK0wwIGluIHRoZSBjYXNlIG9mIGtkdW1wL2tleGVjOjoKKworICBIX0dVRVNU X0RFTEVURSh1aW50NjQgZmxhZ3MsCisgICAgICAgICAgICAgICAgIHVpbnQ2NCBndWVzdElkKQor ICBQYXJhbWV0ZXJzOgorICAgIElucHV0OgorICAgICAgZmxhZ3M6CisgICAgICAgICBCaXQgMDog ZGVsZXRlQWxsR3Vlc3RzOiBkZWxldGVzIGFsbCBndWVzdHMKKyAgICAgICAgIEJpdHMgMS02Mzog UmVzZXJ2ZWQKKyAgICAgIGd1ZXN0SWQ6IElEIG9idGFpbmVkIGZyb20gSF9HVUVTVF9DUkVBVEUK KyAgICBPdXRwdXQ6CisgICAgICBSMzogUmV0dXJuIGNvZGUKKworR3Vlc3QgU3RhdGUgQnVmZmVy Cis9PT09PT09PT0KKworVGhlIEd1ZXN0IFN0YXRlIEJ1ZmZlciAoR1NCKSBpcyB0aGUgbWFpbiBt ZXRob2Qgb2YgY29tbXVuaWNhdGluZyBzdGF0ZQorYWJvdXQgdGhlIEwyIGJldHdlZW4gdGhlIEwx IGFuZCBMMCB2aWEgSF9HVUVTVF97RyxTfUVUKCkgYW5kCitIX0dVRVNUX1ZDUFVfUlVOKCkgY2Fs bHMuCisKK1N0YXRlIG1heSBiZSBhc3NvY2lhdGVkIHdpdGggYSB3aG9sZSBMMiAoZWcgdGltZWJh c2Ugb2Zmc2V0KSBvciBhCitzcGVjaWZpYyBMMiB2Q1BVIChlZy4gR1BSIHN0YXRlKS4gT25seSBM MiBWQ1BVIHN0YXRlIG1heWJlIGJlIHNldCBieQorSF9HVUVTVF9WQ1BVX1JVTigpLiAKKworQWxs IGRhdGEgaW4gdGhlIEdTQiBpcyBiaWcgZW5kaWFuIChhcyBpcyBzdGFuZGFyZCBpbiBQQVBSKQor CitUaGUgR3Vlc3Qgc3RhdGUgYnVmZmVyIGhhcyBhIGhlYWRlciB3aGljaCBnaXZlcyB0aGUgbnVt YmVyIG9mCitlbGVtZW50cywgZm9sbG93ZWQgYnkgdGhlIEdTQiBlbGVtZW50cyB0aGVtc2VsdmVz LgorCitHU0IgaGVhZGVyOgorCisrLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICBPZmZzZXQgIHwgIFNpemUgICAgfCAg UHVycG9zZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICBCeXRlcyAgIHwg IEJ5dGVzICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cisr PT09PT0rPT09PT0rPT09PT09PT09PT09PT09PT09PT09PSsKK3wgICAgMCAgICAgfCAgICA0ICAg ICB8ICBOdW1iZXIgb2YgZWxlbWVudHMgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0t LS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSsKK3wgICAgNCAgICAgfCAgICAgICAgICB8ICBHdWVzdCBzdGF0ZSBidWZmZXIgZWxlbWVudHMg ICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworR1NCIGVsZW1lbnQ6CisKKystLS0tLS0tLS0t Ky0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsK K3wgIE9mZnNldCAgfCAgU2l6ZSAgICB8ICBQdXJwb3NlICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHwKK3wgIEJ5dGVzICAgfCAgQnl0ZXMgICB8ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHwKKys9PT09PSs9PT09PSs9PT09PT09PT09PT09PT09PT09 PT09KworfCAgICAwICAgICB8ICAgIDIgICAgIHwgIElEICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCAgICAyICAgICB8ICAgIDIgICAgIHwgIFNp emUgb2YgVmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0rLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCAg ICA0ICAgICB8IEFzIGFib3ZlIHwgIFZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgfAorKy0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKworCitUaGUgSUQgaW4gdGhlIEdTQiBlbGVtZW50IHNwZWNpZmll cyB3aGF0IGlzIHRvIGJlIHNldC4gVGhpcyBpbmNsdWRlcworYXJjaHRlY3RlZCBzdGF0ZSBsaWtl IEdQUnMsIFZTUnMsIFNQUnMsIHBsdXMgYWxzbyBzb21lIG1ldGEgZGF0YSBhYm91dAordGhlIHBh cnRpdGlvbiBsaWtlIHRoZSB0aW1lYmFzZSBvZmZzZXQgYW5kIHBhcnRpdGlvbiBzY29wZWQgcGFn ZQordGFibGUgaW5mb3JtYXRpb24uCisKKystLS0tLS0tLSstLS0tLS0tKy0tLS0rLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgICBJRCAgIHwgU2l6ZSAgfCBS VyB8IFRocmVhZCB8IERldGFpbHMgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAg IHwgQnl0ZXMgfCAgICB8IEd1ZXN0ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHwKK3wgICAgICAgIHwgICAgICAgfCAgICB8IFNjb3BlICB8ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHwKKys9PT09Kz09PT0rPT0rPT09PSs9PT09PT09PT09PT09PT09PSsKK3wg MHgwMDAwIHwgICAgICAgfCBSVyB8ICAgVEcgICB8IE5PUCBlbGVtZW50ICAgICAgICAgICAgICAg ICAgICAgIHwKKystLS0tLS0tLSstLS0tLS0tKy0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgMHgwMDAxIHwgMHgwOCAgfCBSICB8ICAgRyAgICB8IFNp emUgb2YgTDAgdkNQVSBzdGF0ZS4gU2VlOiAgICAgIHwKK3wgICAgICAgIHwgICAgICAgfCAgICB8 ICAgICAgICB8IEhfR1VFU1RfR0VUX1NUQVRFOiAgICAgICAgICAgICAgIHwKK3wgICAgICAgIHwg ICAgICAgfCAgICB8ICAgICAgICB8IGZsYWdzID0gdGFrZU93bmVyc2hpcE9mVmNwdVN0YXRlIHwK KystLS0tLS0tLSstLS0tLS0tKy0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSsKK3wgMHgwMDAyIHwgMHgwOCAgfCBSICB8ICAgRyAgICB8IFNpemUgUnVuIHZD UFUgb3V0IGJ1ZmZlciAgICAgICAgIHwKKystLS0tLS0tLSstLS0tLS0tKy0tLS0rLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgMHgwMDAzIHwgMHgwNCAgfCBS VyB8ICAgRyAgICB8IExvZ2ljYWwgUFZSICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0t LSstLS0tLS0tKy0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSsKK3wgMHgwMDA0IHwgMHgwOCAgfCBSVyB8ICAgRyAgICB8IFRCIE9mZnNldCAoTDEgcmVsYXRp dmUpICAgICAgICAgIHwKKystLS0tLS0tLSstLS0tLS0tKy0tLS0rLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgMHgwMDA1IHwgMHgxOCAgfCBSVyB8ICAgRyAg ICB8UGFydGl0aW9uIHNjb3BlZCBwYWdlIHRibCBpbmZvOiAgIHwKK3wgICAgICAgIHwgICAgICAg fCAgICB8ICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAg ICAgIHwgICAgICAgfCAgICB8ICAgICAgICB8LSAweDAwIEFkZHIgcGFydCBzY29wZSB0YWJsZSAg ICAgIHwKK3wgICAgICAgIHwgICAgICAgfCAgICB8ICAgICAgICB8LSAweDA4IE51bSBhZGRyIGJp dHMgICAgICAgICAgICAgIHwKK3wgICAgICAgIHwgICAgICAgfCAgICB8ICAgICAgICB8LSAweDEw IFNpemUgcm9vdCBkaXIgICAgICAgICAgICAgIHwKKystLS0tLS0tLSstLS0tLS0tKy0tLS0rLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgMHgwMDA2IHwgMHgx MCAgfCBSVyB8ICAgRyAgICB8UHJvY2VzcyBUYWJsZSBJbmZvcm1hdGlvbjogICAgICAgIHwKK3wg ICAgICAgIHwgICAgICAgfCAgICB8ICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHwKK3wgICAgICAgIHwgICAgICAgfCAgICB8ICAgICAgICB8LSAweDAgQWRkciBwcm9j IHNjb3BlIHRhYmxlICAgICAgIHwKK3wgICAgICAgIHwgICAgICAgfCAgICB8ICAgICAgICB8LSAw eDggVGFibGUgc2l6ZS4gICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLSstLS0tLS0tKy0tLS0r LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgMHgwMDA3LXwg ICAgICAgfCAgICB8ICAgICAgICB8IFJlc2VydmVkICAgICAgICAgICAgICAgICAgICAgICAgIHwK K3wgMHgwQkZGIHwgICAgICAgfCAgICB8ICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHwKKystLS0tLS0tLSstLS0tLS0tKy0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgMHgwQzAwIHwgMHgxMCAgfCBSVyB8ICAgVCAgICB8 UnVuIHZDUFUgSW5wdXQgQnVmZmVyOiAgICAgICAgICAgIHwKK3wgICAgICAgIHwgICAgICAgfCAg ICB8ICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAg IHwgICAgICAgfCAgICB8ICAgICAgICB8LSAweDAgQWRkciBvZiBidWZmZXIgICAgICAgICAgICAg IHwKK3wgICAgICAgIHwgICAgICAgfCAgICB8ICAgICAgICB8LSAweDggQnVmZmVyIFNpemUuICAg ICAgICAgICAgICAgIHwKKystLS0tLS0tLSstLS0tLS0tKy0tLS0rLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgMHgwQzAxIHwgMHgxMCAgfCBSVyB8ICAgVCAg ICB8UnVuIHZDUFUgT3V0cHV0IEJ1ZmZlcjogICAgICAgICAgIHwKK3wgICAgICAgIHwgICAgICAg fCAgICB8ICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAg ICAgIHwgICAgICAgfCAgICB8ICAgICAgICB8LSAweDAgQWRkciBvZiBidWZmZXIgICAgICAgICAg ICAgIHwKK3wgICAgICAgIHwgICAgICAgfCAgICB8ICAgICAgICB8LSAweDggQnVmZmVyIFNpemUu ICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLSstLS0tLS0tKy0tLS0rLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgMHgwQzAyIHwgMHgwOCAgfCBSVyB8ICAg VCAgICB8IHZDUFUgVlBBIEFkZHJlc3MgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLSstLS0t LS0tKy0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wg MHgwQzAzLXwgICAgICAgfCAgICB8ICAgICAgICB8IFJlc2VydmVkICAgICAgICAgICAgICAgICAg ICAgICAgIHwKK3wgMHgwRkZGIHwgICAgICAgfCAgICB8ICAgICAgICB8ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLSstLS0tLS0tKy0tLS0rLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgMHgxMDAwLXwgMHgwOCAgfCBSVyB8 ICAgVCAgICB8IEdQUiAwLTMxICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMHgxMDFGIHwg ICAgICAgfCAgICB8ICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwK KystLS0tLS0tLSstLS0tLS0tKy0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSsKK3wgMHgxMDIwIHwgIDB4MDggfCBUICB8ICAgVCAgICB8IEhERUMgZXhwaXJ5 IFRCICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLSstLS0tLS0tKy0tLS0rLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgMHgxMDIxIHwgMHgwOCAgfCBS VyB8ICAgVCAgICB8IE5JQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0t LSstLS0tLS0tKy0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSsKK3wgMHgxMDIyIHwgMHgwOCAgfCBSVyB8ICAgVCAgICB8IE1TUiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHwKKystLS0tLS0tLSstLS0tLS0tKy0tLS0rLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgMHgxMDIzIHwgMHgwOCAgfCBSVyB8ICAgVCAg ICB8IExSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLSstLS0tLS0t Ky0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgMHgx MDI0IHwgMHgwOCAgfCBSVyB8ICAgVCAgICB8IFhFUiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHwKKystLS0tLS0tLSstLS0tLS0tKy0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSsKK3wgMHgxMDI1IHwgMHgwOCAgfCBSVyB8ICAgVCAgICB8IENUUiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLSstLS0tLS0tKy0tLS0rLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgMHgxMDI2IHwgMHgw OCAgfCBSVyB8ICAgVCAgICB8IENGQVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyst LS0tLS0tLSstLS0tLS0tKy0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSsKK3wgMHgxMDI3IHwgMHgwOCAgfCBSVyB8ICAgVCAgICB8IFNSUjAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLSstLS0tLS0tKy0tLS0rLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgMHgxMDI4IHwgMHgwOCAgfCBSVyB8 ICAgVCAgICB8IFNSUjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLSst LS0tLS0tKy0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsK K3wgMHgxMDI5IHwgMHgwOCAgfCBSVyB8ICAgVCAgICB8IERBUiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHwKKystLS0tLS0tLSstLS0tLS0tKy0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgMHgxMDJBIHwgMHgwOCAgfCBSVyB8ICAgVCAgICB8 IERFQyBleHBpcnkgVEIgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLSstLS0tLS0tKy0t LS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgMHgxMDJC IHwgMHgwOCAgfCBSVyB8ICAgVCAgICB8IFZUQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHwKKystLS0tLS0tLSstLS0tLS0tKy0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSsKK3wgMHgxMDJDIHwgMHgwOCAgfCBSVyB8ICAgVCAgICB8IExQQ1IgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLSstLS0tLS0tKy0tLS0rLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgMHgxMDJEIHwgMHgwOCAg fCBSVyB8ICAgVCAgICB8IEhGU0NSICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0t LS0tLSstLS0tLS0tKy0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSsKK3wgMHgxMDJFIHwgMHgwOCAgfCBSVyB8ICAgVCAgICB8IEZTQ1IgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLSstLS0tLS0tKy0tLS0rLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgMHgxMDJGIHwgMHgwOCAgfCBSVyB8ICAg VCAgICB8IEZQU0NSICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLSstLS0t LS0tKy0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wg MHgxMDMwIHwgMHgwOCAgfCBSVyB8ICAgVCAgICB8IERBV1IwICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHwKKystLS0tLS0tLSstLS0tLS0tKy0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgMHgxMDMxIHwgMHgwOCAgfCBSVyB8ICAgVCAgICB8IERB V1IxICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLSstLS0tLS0tKy0tLS0r LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgMHgxMDMyIHwg MHgwOCAgfCBSVyB8ICAgVCAgICB8IENJQUJSICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwK KystLS0tLS0tLSstLS0tLS0tKy0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSsKK3wgMHgxMDMzIHwgMHgwOCAgfCBSVyB8ICAgVCAgICB8IFBVUlIgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLSstLS0tLS0tKy0tLS0rLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgMHgxMDM0IHwgMHgwOCAgfCBS VyB8ICAgVCAgICB8IFNQVVJSICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0t LSstLS0tLS0tKy0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSsKK3wgMHgxMDM1IHwgMHgwOCAgfCBSVyB8ICAgVCAgICB8IElDICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHwKKystLS0tLS0tLSstLS0tLS0tKy0tLS0rLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgMHgxMDM2LXwgMHgwOCAgfCBSVyB8ICAgVCAg ICB8IFNQUkcgMC0zICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMHgxMDM5IHwgICAgICAg fCAgICB8ICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0t LS0tLSstLS0tLS0tKy0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSsKK3wgMHgxMDNBIHwgMHgwOCAgfCBXICB8ICAgVCAgICB8IFBQUiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLSstLS0tLS0tKy0tLS0rLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgMHgxMDNCIHwgMHgwOCAgfCBSVyB8ICAg VCAgICB8IE1NQ1IgMC0zICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMHgxMDNFIHwgICAg ICAgfCAgICB8ICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyst LS0tLS0tLSstLS0tLS0tKy0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSsKK3wgMHgxMDNGIHwgMHgwOCAgfCBSVyB8ICAgVCAgICB8IE1NQ1JBICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLSstLS0tLS0tKy0tLS0rLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgMHgxMDQwIHwgMHgwOCAgfCBSVyB8 ICAgVCAgICB8IFNJRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLSst LS0tLS0tKy0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsK K3wgMHgxMDQxIHwgMHgwOCAgfCBSVyB8ICAgVCAgICB8IFNJRVIgMiAgICAgICAgICAgICAgICAg ICAgICAgICAgIHwKKystLS0tLS0tLSstLS0tLS0tKy0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgMHgxMDQyIHwgMHgwOCAgfCBSVyB8ICAgVCAgICB8 IFNJRVIgMyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLSstLS0tLS0tKy0t LS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgMHgxMDQz IHwgMHgwOCAgfCBSVyB8ICAgVCAgICB8IEJFU0NSICAgICAgICAgICAgICAgICAgICAgICAgICAg IHwKKystLS0tLS0tLSstLS0tLS0tKy0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSsKK3wgMHgxMDQ0IHwgMHgwOCAgfCBSVyB8ICAgVCAgICB8IEVCQkhSICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLSstLS0tLS0tKy0tLS0rLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgMHgxMDQ1IHwgMHgwOCAg fCBSVyB8ICAgVCAgICB8IEVCQlJSICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0t LS0tLSstLS0tLS0tKy0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSsKK3wgMHgxMDQ2IHwgMHgwOCAgfCBSVyB8ICAgVCAgICB8IEFNUiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLSstLS0tLS0tKy0tLS0rLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgMHgxMDQ3IHwgMHgwOCAgfCBSVyB8ICAg VCAgICB8IElBTVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLSstLS0t LS0tKy0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wg MHgxMDQ4IHwgMHgwOCAgfCBSVyB8ICAgVCAgICB8IEFNT1IgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHwKKystLS0tLS0tLSstLS0tLS0tKy0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgMHgxMDQ5IHwgMHgwOCAgfCBSVyB8ICAgVCAgICB8IFVB TU9SICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLSstLS0tLS0tKy0tLS0r LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgMHgxMDRBIHwg MHgwOCAgfCBSVyB8ICAgVCAgICB8IFNEQVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwK KystLS0tLS0tLSstLS0tLS0tKy0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSsKK3wgMHgxMDRCIHwgMHgwOCAgfCBSVyB8ICAgVCAgICB8IFNJQVIgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLSstLS0tLS0tKy0tLS0rLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgMHgxMDRDIHwgMHgwOCAgfCBS VyB8ICAgVCAgICB8IERTQ1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0t LSstLS0tLS0tKy0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSsKK3wgMHgxMDREIHwgMHgwOCAgfCBSVyB8ICAgVCAgICB8IFRBUiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHwKKystLS0tLS0tLSstLS0tLS0tKy0tLS0rLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgMHgxMDRFIHwgMHgwOCAgfCBSVyB8ICAgVCAg ICB8IERFWENSICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLSstLS0tLS0t Ky0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgMHgx MDRGIHwgMHgwOCAgfCBSVyB8ICAgVCAgICB8IEhERVhDUiAgICAgICAgICAgICAgICAgICAgICAg ICAgIHwKKystLS0tLS0tLSstLS0tLS0tKy0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSsKK3wgMHgxMDUwIHwgMHgwOCAgfCBSVyB8ICAgVCAgICB8IEhBU0hL RVlSICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLSstLS0tLS0tKy0tLS0rLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgMHgxMDUxIHwgMHgw OCAgfCBSVyB8ICAgVCAgICB8IEhBU0hQS0VZUiAgICAgICAgICAgICAgICAgICAgICAgIHwKKyst LS0tLS0tLSstLS0tLS0tKy0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSsKK3wgMHgxMDUyIHwgMHgwOCAgfCBSVyB8ICAgVCAgICB8IENUUkwgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLSstLS0tLS0tKy0tLS0rLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgMHgxMDUzLXwgICAgICAgfCAgICB8 ICAgICAgICB8IFJlc2VydmVkICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMHgxRkZGIHwg ICAgICAgfCAgICB8ICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwK KystLS0tLS0tLSstLS0tLS0tKy0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSsKK3wgMHgyMDAwIHwgMHgwNCAgfCBSVyB8ICAgVCAgICB8IENSICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLSstLS0tLS0tKy0tLS0rLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgMHgyMDAxIHwgMHgwNCAgfCBS VyB8ICAgVCAgICB8IFBJRFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0t LSstLS0tLS0tKy0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSsKK3wgMHgyMDAyIHwgMHgwNCAgfCBSVyB8ICAgVCAgICB8IERTSVNSICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHwKKystLS0tLS0tLSstLS0tLS0tKy0tLS0rLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgMHgyMDAzIHwgMHgwNCAgfCBSVyB8ICAgVCAg ICB8IFZTQ1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLSstLS0tLS0t Ky0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgMHgy MDA0IHwgMHgwNCAgfCBSVyB8ICAgVCAgICB8IFZSU0FWRSAgICAgICAgICAgICAgICAgICAgICAg ICAgIHwKKystLS0tLS0tLSstLS0tLS0tKy0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSsKK3wgMHgyMDA1IHwgMHgwNCAgfCBSVyB8ICAgVCAgICB8IERBV1JY MCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLSstLS0tLS0tKy0tLS0rLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgMHgyMDA2IHwgMHgw NCAgfCBSVyB8ICAgVCAgICB8IERBV1JYMSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyst LS0tLS0tLSstLS0tLS0tKy0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSsKK3wgMHgyMDA3LXwgMHgwNCAgfCBSVyB8ICAgVCAgICB8IFBNQyAxLTYgICAgICAg ICAgICAgICAgICAgICAgICAgIHwKK3wgMHgyMDBjIHwgICAgICAgfCAgICB8ICAgICAgICB8ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLSstLS0tLS0tKy0tLS0r LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgMHgyMDBEIHwg MHgwNCAgfCBSVyB8ICAgVCAgICB8IFdPUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwK KystLS0tLS0tLSstLS0tLS0tKy0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSsKK3wgMHgyMDBFIHwgMHgwNCAgfCBSVyB8ICAgVCAgICB8IFBTUEIgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLSstLS0tLS0tKy0tLS0rLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgMHgyMDBGLXwgICAgICAgfCAg ICB8ICAgICAgICB8IFJlc2VydmVkICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMHgyRkZG IHwgICAgICAgfCAgICB8ICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHwKKystLS0tLS0tLSstLS0tLS0tKy0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSsKK3wgMHgzMDAwLXwgMHgxMCAgfCBSVyB8ICAgVCAgICB8IFZTUiAwLTYz ICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMHgzMDNGIHwgICAgICAgfCAgICB8ICAgICAg ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLSstLS0tLS0t Ky0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgMHgz MDQwLXwgICAgICAgfCAgICB8ICAgICAgICB8IFJlc2VydmVkICAgICAgICAgICAgICAgICAgICAg ICAgIHwKK3wgMHhFRkZGIHwgICAgICAgfCAgICB8ICAgICAgICB8ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLSstLS0tLS0tKy0tLS0rLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgMHhGMDAwIHwgMHgwOCAgfCBSICB8ICAg VCAgICB8IEhEQVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLSstLS0t LS0tKy0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wg MHhGMDAxIHwgMHgwNCAgfCBSICB8ICAgVCAgICB8IEhEU0lTUiAgICAgICAgICAgICAgICAgICAg ICAgICAgIHwKKystLS0tLS0tLSstLS0tLS0tKy0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgMHhGMDAyIHwgMHgwNCAgfCBSICB8ICAgVCAgICB8IEhF SVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLSstLS0tLS0tKy0tLS0r LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgMHhGMDAzIHwg MHgwOCAgfCBSICB8ICAgVCAgICB8IEFTRFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwK KystLS0tLS0tLSstLS0tLS0tKy0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSsKKworCitNaXNjZWxsYW5lb3VzIGluZm8KKz09PT09PT09PQorCitTdGF0ZSBu b3QgaW4gcHRyZWdzL2h2cmVncworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSW4gdGhl IHYxIEFQSSwgc29tZSBzdGF0ZSBpcyBub3QgaW4gdGhlIHB0cmVncy9odnN0YXRlLiBUaGlzIGlu Y2x1ZGVzCit0aGUgdmVjdG9yIHJlZ2lzdGVyIGFuZCBzb21lIFNQUnMuIEZvciB0aGUgTDEgdG8g c2V0IHRoaXMgc3RhdGUgZm9yCit0aGUgTDIsIHRoZSBMMSBsb2FkcyB1cCB0aGVzZSBoYXJkd2Fy ZSByZWdpc3RlcnMgYmVmb3JlIHRoZQoraF9lbnRlcl9uZXN0ZWQoKSBjYWxsIGFuZCB0aGUgTDAg ZW5zdXJlcyB0aGV5IGVuZCB1cCBhcyB0aGUgTDIgc3RhdGUKKyhieSBub3QgdG91Y2hpbmcgdGhl bSkuCisKK1RoZSB2MiBBUEkgcmVtb3ZlcyB0aGlzIGFuZCBleHBsaWNpdGx5IHNldHMgdGhpcyBz dGF0ZSB2aWEgdGhlIEdTQi4KKworTDEgSW1wbGVtZW50YXRpb24gZGV0YWlsczogQ2FjaGluZyBz dGF0ZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJbiB0aGUg djEgQVBJLCBhbGwgc3RhdGUgaXMgc2VudCBmcm9tIHRoZSBMMSB0byB0aGUgTDAgYW5kIHZpY2Ug dmVyc2EKK29uIGV2ZXJ5IGhfZW50ZXJfbmVzdGVkKCkgaGNhbGwuIElmIHRoZSBMMCBpcyBub3Qg Y3VycmVudGx5IHJ1bm5pbmcKK2FueSBMMnMsIHRoZSBMMCBoYXMgbm8gc3RhdGUgaW5mb3JtYXRp b24gYWJvdXQgdGhlbS4gVGhlIG9ubHkKK2V4Y2VwdGlvbiB0byB0aGlzIGlzIHRoZSBsb2NhdGlv biBvZiB0aGUgcGFydGl0aW9uIHRhYmxlLCByZWdpc3RlcmVkCit2aWEgaF9zZXRfcGFydGl0aW9u X3RhYmxlKCkuCisKK1RoZSB2MiBBUEkgY2hhbmdlcyB0aGlzIHNvIHRoYXQgdGhlIEwwIHJldGFp bnMgdGhlIEwyIHN0YXRlIGV2ZW4gd2hlbgoraXQncyB2Q1BVcyBhcmUgbm8gbG9uZ2VyIHJ1bm5p bmcuIFRoaXMgbWVhbnMgdGhhdCB0aGUgTDEgb25seSBuZWVkcyB0bworY29tbXVuaWNhdGUgd2l0 aCB0aGUgTDAgYWJvdXQgTDIgc3RhdGUgd2hlbiBpdCBuZWVkcyB0byBtb2RpZnkgdGhlIEwyCitz dGF0ZSwgb3Igd2hlbiBpdCdzIHZhbHVlIGlzIG91dCBvZiBkYXRlLiBUaGlzIHByb3ZpZGVzIGFu IG9wcG9ydHVuaXR5Citmb3IgcGVyZm9ybWFuY2Ugb3B0aW1pc2F0aW9uLgorCitXaGVuIGEgdkNQ VSBleGl0cyBmcm9tIGEgSF9HVUVTVF9SVU5fVkNQVSgpIGNhbGwsIHRoZSBMMSBpbnRlcm5hbGx5 CittYXJrcyBhbGwgTDIgc3RhdGUgYXMgaW52YWxpZC4gVGhpcyBtZWFucyB0aGF0IGlmIHRoZSBM MSB3YW50cyB0byBrbm93Cit0aGUgTDIgc3RhdGUgKHNheSB2aWEgYSBrdm1fZ2V0X29uZV9yZWco KSBjYWxsKSwgaXQgbmVlZHMgY2FsbAorSF9HVUVTVF9HRVRfU1RBVEUoKSB0byBnZXQgdGhhdCBz dGF0ZS4gT25jZSBpdCdzIHJlYWQsIGl0J3MgbWFya2VkIGFzCit2YWxpZCBpbiBMMSB1bnRpbCB0 aGUgTDIgaXMgcnVuIGFnYWluLgorCitBbHNvLCB3aGVuIGFuIEwxIG1vZGlmaWVzIEwyIHZjcHUg c3RhdGUsIGl0IGRvZXNuJ3QgbmVlZCB0byB3cml0ZSBpdAordG8gdGhlIEwwIHVudGlsIHRoYXQg TDIgdmNwdSBydW5zIGFnYWluLiBIZW5jZSB3aGVuIHRoZSBMMSB1cGRhdGVzCitzdGF0ZSAoc2F5 IHZpYSBhIGt2bV9zZXRfb25lX3JlZygpIGNhbGwpLCBpdCB3cml0ZXMgdG8gYW4gaW50ZXJuYWwg TDEKK2NvcHkgYW5kIG9ubHkgZmx1c2hlcyB0aGlzIGNvcHkgdG8gdGhlIEwwIHdoZW4gdGhlIEwy IHJ1bnMgYWdhaW4gdmlhCit0aGUgSF9HVUVTVF9WQ1BVX1JVTigpIGlucHV0IGJ1ZmZlci4KKwor VGhpcyBsYXp5IHVwZGF0aW5nIG9mIHN0YXRlIGJ5IHRoZSBMMSBhdm9pZHMgdW5uZWNlc3NhcnkK K0hfR1VFU1Rfe0d8U31FVF9TVEFURSgpIGNhbGxzLgorCisKZGlmZiAtLWdpdCBhL2FyY2gvcG93 ZXJwYy9pbmNsdWRlL2FzbS9ndWVzdC1zdGF0ZS1idWZmZXIuaCBiL2FyY2gvcG93ZXJwYy9pbmNs dWRlL2FzbS9ndWVzdC1zdGF0ZS1idWZmZXIuaAppbmRleCAzMzI2NjkzMDJhMGIuLjBhYzFlNDM3 NDYzMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2d1ZXN0LXN0YXRlLWJ1 ZmZlci5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ndWVzdC1zdGF0ZS1idWZmZXIu aApAQCAtNSw2ICs1LDcgQEAKICNpZm5kZWYgX0FTTV9QT1dFUlBDX0dVRVNUX1NUQVRFX0JVRkZF Ul9ICiAjZGVmaW5lIF9BU01fUE9XRVJQQ19HVUVTVF9TVEFURV9CVUZGRVJfSAogCisjaW5jbHVk ZSAiYXNtL2h2Y2FsbC5oIgogI2luY2x1ZGUgPGxpbnV4L2dmcC5oPgogI2luY2x1ZGUgPGxpbnV4 L2JpdG1hcC5oPgogI2luY2x1ZGUgPGFzbS9wbHBhcl93cmFwcGVycy5oPgpAQCAtMTQsMTYgKzE1 LDE2IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjZGVmaW5lIEdTSURfQkxBTksJCQkweDAwMDAK IAotI2RlZmluZSBHU0lEX0hPU1RfU1RBVEVfU0laRQkJMHgwMDAxIC8qIFNpemUgb2YgSHlwZXJ2 aXNvciBJbnRlcm5hbCBGb3JtYXQgVkNQVSBzdGF0ZSAqLwotI2RlZmluZSBHU0lEX1JVTl9PVVRQ VVRfTUlOX1NJWkUJMHgwMDAyIC8qIE1pbmltdW0gc2l6ZSBvZiB0aGUgUnVuIFZDUFUgb3V0cHV0 IGJ1ZmZlciAqLwotI2RlZmluZSBHU0lEX0xPR0lDQUxfUFZSCQkweDAwMDMgLyogTG9naWNhbCBQ VlIgKi8KLSNkZWZpbmUgR1NJRF9UQl9PRkZTRVQJCQkweDAwMDQgLyogVGltZWJhc2UgT2Zmc2V0 ICovCi0jZGVmaW5lIEdTSURfUEFSVElUSU9OX1RBQkxFCQkweDAwMDUgLyogUGFydGl0aW9uIFNj b3BlZCBQYWdlIFRhYmxlICovCi0jZGVmaW5lIEdTSURfUFJPQ0VTU19UQUJMRQkJMHgwMDA2IC8q IFByb2Nlc3MgVGFibGUgKi8KKyNkZWZpbmUgR1NJRF9IT1NUX1NUQVRFX1NJWkUJCTB4MDAwMQor I2RlZmluZSBHU0lEX1JVTl9PVVRQVVRfTUlOX1NJWkUJMHgwMDAyCisjZGVmaW5lIEdTSURfTE9H SUNBTF9QVlIJCTB4MDAwMworI2RlZmluZSBHU0lEX1RCX09GRlNFVAkJCTB4MDAwNAorI2RlZmlu ZSBHU0lEX1BBUlRJVElPTl9UQUJMRQkJMHgwMDA1CisjZGVmaW5lIEdTSURfUFJPQ0VTU19UQUJM RQkJMHgwMDA2CiAKLSNkZWZpbmUgR1NJRF9SVU5fSU5QVVQJCQkweDBDMDAgLyogUnVuIFZDUFUg SW5wdXQgQnVmZmVyICovCi0jZGVmaW5lIEdTSURfUlVOX09VVFBVVAkJCTB4MEMwMSAvKiBSdW4g VkNQVSBPdXQgQnVmZmVyICovCi0jZGVmaW5lIEdTSURfVlBBCQkJMHgwQzAyIC8qIEhSQSB0byBH dWVzdCBWQ1BVIFZQQSAqLworI2RlZmluZSBHU0lEX1JVTl9JTlBVVAkJCTB4MEMwMAorI2RlZmlu ZSBHU0lEX1JVTl9PVVRQVVQJCQkweDBDMDEKKyNkZWZpbmUgR1NJRF9WUEEJCQkweDBDMDIKIAog I2RlZmluZSBHU0lEX0dQUjAJMHgxMDAwCiAjZGVmaW5lIEdTSURfR1BSMQkweDEwMDEKQEAgLTk5 OCw0ICs5OTksMTM1IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBnc21fcmVzZXQoc3RydWN0IGdzX21z ZyAqZ3NtKQogCWdzYm1femVybygmZ3NtLT5iaXRtYXApOwogfQogCisvKioKKyAqIGdzYl9yZWN2 IC0gcmVxdWVzdCBhbGwgZWxlbWVudHMgaW4gdGhlIGJ1ZmZlciBoYXZlIHRoZWlyIHZhbHVlIHVw ZGF0ZWQuCisgKiBAZ3NiOiBndWVzdCBzdGF0ZSBidWZmZXIKKyAqIEBmbGFnczogZ3Vlc3Qgd2lk ZSBvciB0aHJlYWQgd2lkZQorICoKKyAqIFBlcmZvcm1zIHRoZSBIX0dVRVNUX0dFVF9TVEFURSBo Y2FsbCBmb3IgdGhlIGd1ZXN0IHN0YXRlIGJ1ZmZlci4KKyAqIEFmdGVyIHJldHVybmluZyBmcm9t IHRoZSBoY2FsbCB0aGUgZ3Vlc3Qgc3RhdGUgZWxlbWVudHMgdGhhdCB3ZXJlCisgKiBwcmVzZW50 IGluIHRoZSBidWZmZXIgd2lsbCBoYXZlIHVwZGF0ZWQgdmFsdWVzIGZyb20gdGhlIGh5cGVydmlz b3IuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGdzYl9yZWN2KHN0cnVjdCBnc19idWZmICpnc2Is IHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJdW5zaWduZWQgbG9uZyBoZmxhZ3MgPSAwOworCXVu c2lnbmVkIGxvbmcgaTsKKwlpbnQgcmM7CisKKwlpZiAoZmxhZ3MgJiBHU19GTEFHU19XSURFKQor CQloZmxhZ3MgfD0gSF9HVUVTVF9GTEFHU19XSURFOworCisJcmMgPSBwbHBhcl9ndWVzdF9nZXRf c3RhdGUoaGZsYWdzLCBnc2ItPmd1ZXN0X2lkLCBnc2ItPnZjcHVfaWQsCisJCQkJICAgX19wYShn c2ItPmhkciksIGdzYi0+Y2FwYWNpdHksICZpKTsKKwlyZXR1cm4gcmM7Cit9CisKKy8qKgorICog Z3NiX3JlY2VpdmVfZGF0YSAtIGZsZXhpYmx5IHVwZGF0ZSB2YWx1ZXMgZnJvbSBhIGd1ZXN0IHN0 YXRlIGJ1ZmZlcgorICogQGdzYjogZ3Vlc3Qgc3RhdGUgYnVmZmVyCisgKiBAZ3NtOiBndWVzdCBz dGF0ZSBtZXNzYWdlCisgKgorICogUmVxdWVzdHMgdXBkYXRlZCB2YWx1ZXMgZm9yIHRoZSBndWVz dCBzdGF0ZSB2YWx1ZXMgaW5jbHVkZWQgaW4gdGhlIGd1ZXN0CisgKiBzdGF0ZSBtZXNzYWdlLiBU aGUgZ3Vlc3Qgc3RhdGUgbWVzc2FnZSB3aWxsIHRoZW4gZGVzZXJpYWxpemUgdGhlIGd1ZXN0IHN0 YXRlCisgKiBidWZmZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGdzYl9yZWNlaXZlX2RhdGEo c3RydWN0IGdzX2J1ZmYgKmdzYiwgc3RydWN0IGdzX21zZyAqZ3NtKQoreworCWludCByYzsKKwor CXJjID0gZ3NtX2ZpbGxfaW5mbyhnc20sIGdzYik7CisJaWYgKHJjIDwgMCkKKwkJcmV0dXJuIHJj OworCisJcmMgPSBnc2JfcmVjdihnc2IsIGdzbS0+ZmxhZ3MpOworCWlmIChyYyA8IDApCisJCXJl dHVybiByYzsKKworCXJjID0gZ3NtX3JlZnJlc2hfaW5mbyhnc20sIGdzYik7CisJaWYgKHJjIDwg MCkKKwkJcmV0dXJuIHJjOworCXJldHVybiAwOworfQorCisvKioKKyAqIGdzYl9yZWN2IC0gcmVj ZWl2ZSBhIHNpbmdsZSBndWVzdCBzdGF0ZSBJRAorICogQGdzYjogZ3Vlc3Qgc3RhdGUgYnVmZmVy CisgKiBAZ3NtOiBndWVzdCBzdGF0ZSBtZXNzYWdlCisgKiBAaWRlbjogZ3Vlc3Qgc3RhdGUgaWRl bnRpdHkKKyAqLworc3RhdGljIGlubGluZSBpbnQgZ3NiX3JlY2VpdmVfZGF0dW0oc3RydWN0IGdz X2J1ZmYgKmdzYiwgc3RydWN0IGdzX21zZyAqZ3NtLAorCQkJCSAgICB1MTYgaWRlbikKK3sKKwlp bnQgcmM7CisKKwlnc21faW5jbHVkZShnc20sIGlkZW4pOworCXJjID0gZ3NiX3JlY2VpdmVfZGF0 YShnc2IsIGdzbSk7CisJaWYgKHJjIDwgMCkKKwkJcmV0dXJuIHJjOworCWdzbV9yZXNldChnc20p OworCXJldHVybiAwOworfQorCisvKioKKyAqIGdzYl9zZW5kIC0gc2VuZCBhbGwgZWxlbWVudHMg aW4gdGhlIGJ1ZmZlciB0byB0aGUgaHlwZXJ2aXNvci4KKyAqIEBnc2I6IGd1ZXN0IHN0YXRlIGJ1 ZmZlcgorICogQGZsYWdzOiBndWVzdCB3aWRlIG9yIHRocmVhZCB3aWRlCisgKgorICogUGVyZm9y bXMgdGhlIEhfR1VFU1RfU0VUX1NUQVRFIGhjYWxsIGZvciB0aGUgZ3Vlc3Qgc3RhdGUgYnVmZmVy LgorICovCitzdGF0aWMgaW5saW5lIGludCBnc2Jfc2VuZChzdHJ1Y3QgZ3NfYnVmZiAqZ3NiLCB1 bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXVuc2lnbmVkIGxvbmcgaGZsYWdzID0gMDsKKwl1bnNp Z25lZCBsb25nIGk7CisJaW50IHJjOworCisJaWYgKGdzYl9uZWxlbXMoZ3NiKSA9IDApCisJCXJl dHVybiAwOworCisJaWYgKGZsYWdzICYgR1NfRkxBR1NfV0lERSkKKwkJaGZsYWdzIHw9IEhfR1VF U1RfRkxBR1NfV0lERTsKKworCXJjID0gcGxwYXJfZ3Vlc3Rfc2V0X3N0YXRlKGhmbGFncywgZ3Ni LT5ndWVzdF9pZCwgZ3NiLT52Y3B1X2lkLAorCQkJCSAgIF9fcGEoZ3NiLT5oZHIpLCBnc2ItPmNh cGFjaXR5LCAmaSk7CisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIGdzYl9zZW5kX2RhdGEgLSBm bGV4aWJseSBzZW5kIHZhbHVlcyBmcm9tIGEgZ3Vlc3Qgc3RhdGUgYnVmZmVyCisgKiBAZ3NiOiBn dWVzdCBzdGF0ZSBidWZmZXIKKyAqIEBnc206IGd1ZXN0IHN0YXRlIG1lc3NhZ2UKKyAqCisgKiBT ZW5kcyB0aGUgZ3Vlc3Qgc3RhdGUgdmFsdWVzIGluY2x1ZGVkIGluIHRoZSBndWVzdCBzdGF0ZSBt ZXNzYWdlLgorICovCitzdGF0aWMgaW5saW5lIGludCBnc2Jfc2VuZF9kYXRhKHN0cnVjdCBnc19i dWZmICpnc2IsIHN0cnVjdCBnc19tc2cgKmdzbSkKK3sKKwlpbnQgcmM7CisKKwlyYyA9IGdzbV9m aWxsX2luZm8oZ3NtLCBnc2IpOworCWlmIChyYyA8IDApCisJCXJldHVybiByYzsKKwlyYyA9IGdz Yl9zZW5kKGdzYiwgZ3NtLT5mbGFncyk7CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qKgorICogZ3Ni X3JlY3YgLSBzZW5kIGEgc2luZ2xlIGd1ZXN0IHN0YXRlIElECisgKiBAZ3NiOiBndWVzdCBzdGF0 ZSBidWZmZXIKKyAqIEBnc206IGd1ZXN0IHN0YXRlIG1lc3NhZ2UKKyAqIEBpZGVuOiBndWVzdCBz dGF0ZSBpZGVudGl0eQorICovCitzdGF0aWMgaW5saW5lIGludCBnc2Jfc2VuZF9kYXR1bShzdHJ1 Y3QgZ3NfYnVmZiAqZ3NiLCBzdHJ1Y3QgZ3NfbXNnICpnc20sCisJCQkJIHUxNiBpZGVuKQorewor CWludCByYzsKKworCWdzbV9pbmNsdWRlKGdzbSwgaWRlbik7CisJcmMgPSBnc2Jfc2VuZF9kYXRh KGdzYiwgZ3NtKTsKKwlpZiAocmMgPCAwKQorCQlyZXR1cm4gcmM7CisJZ3NtX3Jlc2V0KGdzbSk7 CisJcmV0dXJuIDA7Cit9CisKICNlbmRpZiAvKiBfQVNNX1BPV0VSUENfR1VFU1RfU1RBVEVfQlVG RkVSX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9odmNhbGwuaCBi L2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9odmNhbGwuaAppbmRleCBjMDk5NzgwMzg1ZGQuLmRk Yjk5ZTk4MjkxNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2h2Y2FsbC5o CisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9odmNhbGwuaApAQCAtMTAwLDYgKzEwMCwx OCBAQAogI2RlZmluZSBIX0NPUF9IVwktNzQKICNkZWZpbmUgSF9TVEFURQkJLTc1CiAjZGVmaW5l IEhfSU5fVVNFCS03NworCisjZGVmaW5lIEhfSU5WQUxJRF9FTEVNRU5UX0lECQkJLTc5CisjZGVm aW5lIEhfSU5WQUxJRF9FTEVNRU5UX1NJWkUJCQktODAKKyNkZWZpbmUgSF9JTlZBTElEX0VMRU1F TlRfVkFMVUUJCQktODEKKyNkZWZpbmUgSF9JTlBVVF9CVUZGRVJfTk9UX0RFRklORUQJCS04Mgor I2RlZmluZSBIX0lOUFVUX0JVRkZFUl9UT09fU01BTEwJCS04MworI2RlZmluZSBIX09VVFBVVF9C VUZGRVJfTk9UX0RFRklORUQJCS04NAorI2RlZmluZSBIX09VVFBVVF9CVUZGRVJfVE9PX1NNQUxM CQktODUKKyNkZWZpbmUgSF9QQVJUSVRJT05fUEFHRV9UQUJMRV9OT1RfREVGSU5FRAktODYKKyNk ZWZpbmUgSF9HVUVTVF9WQ1BVX1NUQVRFX05PVF9IVl9PV05FRAkJLTg3CisKKwogI2RlZmluZSBI X1VOU1VQUE9SVEVEX0ZMQUdfU1RBUlQJLTI1NgogI2RlZmluZSBIX1VOU1VQUE9SVEVEX0ZMQUdf RU5ECQktNTExCiAjZGVmaW5lIEhfTVVMVElfVEhSRUFEU19BQ1RJVkUJLTkwMDUKQEAgLTM4MSw2 ICszOTMsMTUgQEAKICNkZWZpbmUgSF9FTlRFUl9ORVNURUQJCTB4RjgwNAogI2RlZmluZSBIX1RM Ql9JTlZBTElEQVRFCTB4RjgwOAogI2RlZmluZSBIX0NPUFlfVE9GUk9NX0dVRVNUCTB4RjgwQwor I2RlZmluZSBIX0dVRVNUX0dFVF9DQVBBQklMSVRJRVMgMHg0NjAKKyNkZWZpbmUgSF9HVUVTVF9T RVRfQ0FQQUJJTElUSUVTIDB4NDY0CisjZGVmaW5lIEhfR1VFU1RfQ1JFQVRFCQkweDQ3MAorI2Rl ZmluZSBIX0dVRVNUX0NSRUFURV9WQ1BVCTB4NDc0CisjZGVmaW5lIEhfR1VFU1RfR0VUX1NUQVRF CTB4NDc4CisjZGVmaW5lIEhfR1VFU1RfU0VUX1NUQVRFCTB4NDdDCisjZGVmaW5lIEhfR1VFU1Rf UlVOX1ZDUFUJMHg0ODAKKyNkZWZpbmUgSF9HVUVTVF9DT1BZX01FTU9SWQkweDQ4NAorI2RlZmlu ZSBIX0dVRVNUX0RFTEVURQkJMHg0ODgKIAogLyogRmxhZ3MgZm9yIEhfU1ZNX1BBR0VfSU4gKi8K ICNkZWZpbmUgSF9QQUdFX0lOX1NIQVJFRCAgICAgICAgMHgxCkBAIC00NjcsNiArNDg4LDE1IEBA CiAjZGVmaW5lIEhfUlBUSV9QQUdFXzFHCTB4MDgKICNkZWZpbmUgSF9SUFRJX1BBR0VfQUxMICgt MVVMKQogCisvKiBGbGFncyBmb3IgSF9HVUVTVF97UyxHfV9TVEFURSAqLworI2RlZmluZSBIX0dV RVNUX0ZMQUdTX1dJREUgICAgICgxVUw8PCg2My0wKSkKKworLyogRmxhZyB2YWx1ZXMgdXNlZCBm b3IgSF97UyxHfVNFVF9HVUVTVF9DQVBBQklMSVRJRVMgKi8KKyNkZWZpbmUgSF9HVUVTVF9DQVBf Q09QWV9NRU0JKDFVTDw8KDYzLTApKQorI2RlZmluZSBIX0dVRVNUX0NBUF9QT1dFUjkJKDFVTDw8 KDYzLTEpKQorI2RlZmluZSBIX0dVRVNUX0NBUF9QT1dFUjEwCSgxVUw8PCg2My0yKSkKKyNkZWZp bmUgSF9HVUVTVF9DQVBfQklUTUFQMgkoMVVMPDwoNjMtNjMpKQorCiAjaWZuZGVmIF9fQVNTRU1C TFlfXwogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJw Yy9pbmNsdWRlL2FzbS9rdm1fYm9vazNzLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3Zt X2Jvb2szcy5oCmluZGV4IDc3NjUzYzViMzU2Yi4uNjVhZDM0YzEzYWEwIDEwMDY0NAotLS0gYS9h cmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2Jvb2szcy5oCisrKyBiL2FyY2gvcG93ZXJwYy9p bmNsdWRlL2FzbS9rdm1fYm9vazNzLmgKQEAgLTEyLDYgKzEyLDcgQEAKICNpbmNsdWRlIDxsaW51 eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2t2bV9ob3N0Lmg+CiAjaW5jbHVkZSA8YXNtL2t2 bV9ib29rM3NfYXNtLmg+CisjaW5jbHVkZSA8YXNtL2d1ZXN0LXN0YXRlLWJ1ZmZlci5oPgogCiBz dHJ1Y3Qga3ZtcHBjX2JhdCB7CiAJdTY0IHJhdzsKQEAgLTMxNiw2ICszMTcsNTcgQEAgbG9uZyBp bnQga3ZtaHZfbmVzdGVkX3BhZ2VfZmF1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAogdm9p ZCBrdm1wcGNfZ2l2ZXVwX2ZhYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVsb25nIGZhYyk7CiAK KworI2lmZGVmIENPTkZJR19LVk1fQk9PSzNTX0hWX1BPU1NJQkxFCisKK2V4dGVybiBib29sIF9f a3ZtaHZfb25fcGFwcjsKKworc3RhdGljIGlubGluZSBib29sIGt2bWh2X29uX3BhcHIodm9pZCkK K3sKKwlyZXR1cm4gX19rdm1odl9vbl9wYXByOworfQorCisjZWxzZQorCitzdGF0aWMgaW5saW5l IGJvb2wga3ZtaHZfb25fcGFwcih2b2lkKQoreworCXJldHVybiBmYWxzZTsKK30KKworI2VuZGlm CisKK2ludCBfX2t2bWh2X3BhcHJfcmVsb2FkX3B0cmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUs IHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK2ludCBfX2t2bWh2X3BhcHJfbWFya19kaXJ0eV9wdHJl Z3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitpbnQgX19r dm1odl9wYXByX21hcmtfZGlydHkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgaWRlbik7Citp bnQgX19rdm1odl9wYXByX2NhY2hlZF9yZWxvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYg aWRlbik7CisKK3N0YXRpYyBpbmxpbmUgaW50IGt2bWh2X3BhcHJfcmVsb2FkX3B0cmVncyhzdHJ1 Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWlmIChrdm1odl9v bl9wYXByKCkpCisJCXJldHVybiBfX2t2bWh2X3BhcHJfcmVsb2FkX3B0cmVncyh2Y3B1LCByZWdz KTsKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbmxpbmUgaW50IGt2bWh2X3BhcHJfbWFya19kaXJ0 eV9wdHJlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sK KwlpZiAoa3ZtaHZfb25fcGFwcigpKQorCQlyZXR1cm4gX19rdm1odl9wYXByX21hcmtfZGlydHlf cHRyZWdzKHZjcHUsIHJlZ3MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBr dm1odl9wYXByX21hcmtfZGlydHkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgaWRlbikKK3sK KwlpZiAoa3ZtaHZfb25fcGFwcigpKQorCQlyZXR1cm4gX19rdm1odl9wYXByX21hcmtfZGlydHko dmNwdSwgaWRlbik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGt2bWh2X3Bh cHJfY2FjaGVkX3JlbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiBpZGVuKQoreworCWlm IChrdm1odl9vbl9wYXByKCkpCisJCXJldHVybiBfX2t2bWh2X3BhcHJfY2FjaGVkX3JlbG9hZCh2 Y3B1LCBpZGVuKTsKKwlyZXR1cm4gMDsKK30KKwogZXh0ZXJuIGludCBrdm1faXJxX2J5cGFzczsK IAogc3RhdGljIGlubGluZSBzdHJ1Y3Qga3ZtcHBjX3ZjcHVfYm9vazNzICp0b19ib29rM3Moc3Ry dWN0IGt2bV92Y3B1ICp2Y3B1KQpAQCAtMzM1LDcwICszODcsODQgQEAgc3RhdGljIGlubGluZSBz dHJ1Y3Qga3ZtcHBjX3ZjcHVfYm9vazNzICp0b19ib29rM3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1 KQogc3RhdGljIGlubGluZSB2b2lkIGt2bXBwY19zZXRfZ3ByKHN0cnVjdCBrdm1fdmNwdSAqdmNw dSwgaW50IG51bSwgdWxvbmcgdmFsKQogewogCXZjcHUtPmFyY2gucmVncy5ncHJbbnVtXSA9IHZh bDsKKwlrdm1odl9wYXByX21hcmtfZGlydHkodmNwdSwgR1NJRF9HUFIwICsgbnVtKTsKIH0KIAog c3RhdGljIGlubGluZSB1bG9uZyBrdm1wcGNfZ2V0X2dwcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUs IGludCBudW0pCiB7CisJa3ZtaHZfcGFwcl9jYWNoZWRfcmVsb2FkKHZjcHUsIEdTSURfR1BSMCAr IG51bSk7CiAJcmV0dXJuIHZjcHUtPmFyY2gucmVncy5ncHJbbnVtXTsKIH0KIAogc3RhdGljIGlu bGluZSB2b2lkIGt2bXBwY19zZXRfY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgdmFsKQog ewogCXZjcHUtPmFyY2gucmVncy5jY3IgPSB2YWw7CisJa3ZtaHZfcGFwcl9tYXJrX2RpcnR5KHZj cHUsIEdTSURfQ1IpOwogfQogCiBzdGF0aWMgaW5saW5lIHUzMiBrdm1wcGNfZ2V0X2NyKHN0cnVj dCBrdm1fdmNwdSAqdmNwdSkKIHsKKwlrdm1odl9wYXByX2NhY2hlZF9yZWxvYWQodmNwdSwgR1NJ RF9DUik7CiAJcmV0dXJuIHZjcHUtPmFyY2gucmVncy5jY3I7CiB9CiAKIHN0YXRpYyBpbmxpbmUg dm9pZCBrdm1wcGNfc2V0X3hlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVsb25nIHZhbCkKIHsK IAl2Y3B1LT5hcmNoLnJlZ3MueGVyID0gdmFsOworCWt2bWh2X3BhcHJfbWFya19kaXJ0eSh2Y3B1 LCBHU0lEX1hFUik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdWxvbmcga3ZtcHBjX2dldF94ZXIoc3Ry dWN0IGt2bV92Y3B1ICp2Y3B1KQogeworCWt2bWh2X3BhcHJfY2FjaGVkX3JlbG9hZCh2Y3B1LCBH U0lEX1hFUik7CiAJcmV0dXJuIHZjcHUtPmFyY2gucmVncy54ZXI7CiB9CiAKIHN0YXRpYyBpbmxp bmUgdm9pZCBrdm1wcGNfc2V0X2N0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVsb25nIHZhbCkK IHsKIAl2Y3B1LT5hcmNoLnJlZ3MuY3RyID0gdmFsOworCWt2bWh2X3BhcHJfbWFya19kaXJ0eSh2 Y3B1LCBHU0lEX0NUUik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdWxvbmcga3ZtcHBjX2dldF9jdHIo c3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogeworCWt2bWh2X3BhcHJfY2FjaGVkX3JlbG9hZCh2Y3B1 LCBHU0lEX0NUUik7CiAJcmV0dXJuIHZjcHUtPmFyY2gucmVncy5jdHI7CiB9CiAKIHN0YXRpYyBp bmxpbmUgdm9pZCBrdm1wcGNfc2V0X2xyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdWxvbmcgdmFs KQogewogCXZjcHUtPmFyY2gucmVncy5saW5rID0gdmFsOworCWt2bWh2X3BhcHJfbWFya19kaXJ0 eSh2Y3B1LCBHU0lEX0xSKTsKIH0KIAogc3RhdGljIGlubGluZSB1bG9uZyBrdm1wcGNfZ2V0X2xy KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKKwlrdm1odl9wYXByX2NhY2hlZF9yZWxvYWQodmNw dSwgR1NJRF9MUik7CiAJcmV0dXJuIHZjcHUtPmFyY2gucmVncy5saW5rOwogfQogCiBzdGF0aWMg aW5saW5lIHZvaWQga3ZtcHBjX3NldF9wYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVsb25nIHZh bCkKIHsKIAl2Y3B1LT5hcmNoLnJlZ3MubmlwID0gdmFsOworCWt2bWh2X3BhcHJfbWFya19kaXJ0 eSh2Y3B1LCBHU0lEX05JQSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdWxvbmcga3ZtcHBjX2dldF9w YyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CisJa3ZtaHZfcGFwcl9jYWNoZWRfcmVsb2FkKHZj cHUsIEdTSURfTklBKTsKIAlyZXR1cm4gdmNwdS0+YXJjaC5yZWdzLm5pcDsKIH0KIAogc3RhdGlj IGlubGluZSB2b2lkIGt2bXBwY19zZXRfcGlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHZh bCkKIHsKIAl2Y3B1LT5hcmNoLnBpZCA9IHZhbDsKKwlrdm1odl9wYXByX21hcmtfZGlydHkodmNw dSwgR1NJRF9QSURSKTsKIH0KIAogc3RhdGljIGlubGluZSB1MzIga3ZtcHBjX2dldF9waWQoc3Ry dWN0IGt2bV92Y3B1ICp2Y3B1KQogeworCWt2bWh2X3BhcHJfY2FjaGVkX3JlbG9hZCh2Y3B1LCBH U0lEX1BJRFIpOwogCXJldHVybiB2Y3B1LT5hcmNoLnBpZDsKIH0KIApAQCAtNDE1LDEwOSArNDgx LDEyNyBAQCBzdGF0aWMgaW5saW5lIHVsb25nIGt2bXBwY19nZXRfZmF1bHRfZGFyKHN0cnVjdCBr dm1fdmNwdSAqdmNwdSkKIAogc3RhdGljIGlubGluZSB1NjQga3ZtcHBjX2dldF9mcHIoc3RydWN0 IGt2bV92Y3B1ICp2Y3B1LCBpbnQgaSkKIHsKKwlrdm1odl9wYXByX2NhY2hlZF9yZWxvYWQodmNw dSwgR1NJRF9WU1JTMCArIGkpOwogCXJldHVybiB2Y3B1LT5hcmNoLmZwLmZwcltpXVtUU19GUFJP RkZTRVRdOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQga3ZtcHBjX3NldF9mcHIoc3RydWN0IGt2 bV92Y3B1ICp2Y3B1LCBpbnQgaSwgdTY0IHZhbCkKIHsKIAl2Y3B1LT5hcmNoLmZwLmZwcltpXVtU U19GUFJPRkZTRVRdID0gdmFsOworCWt2bWh2X3BhcHJfbWFya19kaXJ0eSh2Y3B1LCBHU0lEX1ZT UlMwICsgaSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdTY0IGt2bXBwY19nZXRfZnBzY3Ioc3RydWN0 IGt2bV92Y3B1ICp2Y3B1KQogeworCWt2bWh2X3BhcHJfY2FjaGVkX3JlbG9hZCh2Y3B1LCBHU0lE X0ZQU0NSKTsKIAlyZXR1cm4gdmNwdS0+YXJjaC5mcC5mcHNjcjsKIH0KIAogc3RhdGljIGlubGlu ZSB2b2lkIGt2bXBwY19zZXRfZnBzY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmFsKQog ewogCXZjcHUtPmFyY2guZnAuZnBzY3IgPSB2YWw7CisJa3ZtaHZfcGFwcl9tYXJrX2RpcnR5KHZj cHUsIEdTSURfRlBTQ1IpOwogfQogCiAKIHN0YXRpYyBpbmxpbmUgdTY0IGt2bXBwY19nZXRfdnN4 X2ZwcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBpLCBpbnQgaikKIHsKKwlrdm1odl9wYXBy X2NhY2hlZF9yZWxvYWQodmNwdSwgR1NJRF9WU1JTMCArIGkpOwogCXJldHVybiB2Y3B1LT5hcmNo LmZwLmZwcltpXVtqXTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGt2bXBwY19zZXRfdnN4X2Zw cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBpLCBpbnQgaiwgdTY0IHZhbCkKIHsKIAl2Y3B1 LT5hcmNoLmZwLmZwcltpXVtqXSA9IHZhbDsKKwlrdm1odl9wYXByX21hcmtfZGlydHkodmNwdSwg R1NJRF9WU1JTMCArIGkpOwogfQogCiBzdGF0aWMgaW5saW5lIHZlY3RvcjEyOCBrdm1wcGNfZ2V0 X3ZzeF92cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBpKQogeworCWt2bWh2X3BhcHJfY2Fj aGVkX3JlbG9hZCh2Y3B1LCBHU0lEX1ZTUlMzMiArIGkpOwogCXJldHVybiB2Y3B1LT5hcmNoLnZy LnZyW2ldOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQga3ZtcHBjX3NldF92c3hfdnIoc3RydWN0 IGt2bV92Y3B1ICp2Y3B1LCBpbnQgaSwgdmVjdG9yMTI4IHZhbCkKIHsKIAl2Y3B1LT5hcmNoLnZy LnZyW2ldID0gdmFsOworCWt2bWh2X3BhcHJfbWFya19kaXJ0eSh2Y3B1LCBHU0lEX1ZTUlMzMiAr IGkpOwogfQogCiBzdGF0aWMgaW5saW5lIHUzMiBrdm1wcGNfZ2V0X3ZzY3Ioc3RydWN0IGt2bV92 Y3B1ICp2Y3B1KQogeworCWt2bWh2X3BhcHJfY2FjaGVkX3JlbG9hZCh2Y3B1LCBHU0lEX1ZTQ1Ip OwogCXJldHVybiB2Y3B1LT5hcmNoLnZyLnZzY3IudVszXTsKIH0KIAogc3RhdGljIGlubGluZSB2 b2lkIGt2bXBwY19zZXRfdnNjcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB2YWwpCiB7CiAJ dmNwdS0+YXJjaC52ci52c2NyLnVbM10gPSB2YWw7CisJa3ZtaHZfcGFwcl9tYXJrX2RpcnR5KHZj cHUsIEdTSURfVlNDUik7CiB9CiAKLSNkZWZpbmUgQk9PSzNTX1dSQVBQRVJfU0VUKHJlZywgc2l6 ZSkJCQkJCVwKKyNkZWZpbmUgQk9PSzNTX1dSQVBQRVJfU0VUKHJlZywgc2l6ZSwgaWRlbikJCQkJ XAogc3RhdGljIGlubGluZSB2b2lkIGt2bXBwY19zZXRfIyNyZWcoc3RydWN0IGt2bV92Y3B1ICp2 Y3B1LCB1IyNzaXplIHZhbCkJXAogewkJCQkJCQkJCVwKIAkJCQkJCQkJCVwKIAl2Y3B1LT5hcmNo LnJlZyA9IHZhbDsJCQkJCQlcCisJa3ZtaHZfcGFwcl9tYXJrX2RpcnR5KHZjcHUsIGlkZW4pOwkJ CQlcCiB9CiAKLSNkZWZpbmUgQk9PSzNTX1dSQVBQRVJfR0VUKHJlZywgc2l6ZSkJCQkJCVwKKyNk ZWZpbmUgQk9PSzNTX1dSQVBQRVJfR0VUKHJlZywgc2l6ZSwgaWRlbikJCQkJXAogc3RhdGljIGlu bGluZSB1IyNzaXplIGt2bXBwY19nZXRfIyNyZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQkJXAog ewkJCQkJCQkJCVwKKwlrdm1odl9wYXByX2NhY2hlZF9yZWxvYWQodmNwdSwgaWRlbik7CQkJCVwK IAlyZXR1cm4gdmNwdS0+YXJjaC5yZWc7CQkJCQkJXAogfQogCi0jZGVmaW5lIEJPT0szU19XUkFQ UEVSKHJlZywgc2l6ZSkJCQkJCVwKLQlCT09LM1NfV1JBUFBFUl9TRVQocmVnLCBzaXplKQkJCQkJ XAotCUJPT0szU19XUkFQUEVSX0dFVChyZWcsIHNpemUpCQkJCQlcCisjZGVmaW5lIEJPT0szU19X UkFQUEVSKHJlZywgc2l6ZSwgaWRlbikJCQkJCVwKKwlCT09LM1NfV1JBUFBFUl9TRVQocmVnLCBz aXplLCBpZGVuKQkJCQlcCisJQk9PSzNTX1dSQVBQRVJfR0VUKHJlZywgc2l6ZSwgaWRlbikJCQkJ XAogCi1CT09LM1NfV1JBUFBFUih0YXIsIDY0KQotQk9PSzNTX1dSQVBQRVIoZWJiaHIsIDY0KQot Qk9PSzNTX1dSQVBQRVIoZWJicnIsIDY0KQotQk9PSzNTX1dSQVBQRVIoYmVzY3IsIDY0KQotQk9P SzNTX1dSQVBQRVIoaWMsIDY0KQotQk9PSzNTX1dSQVBQRVIodnJzYXZlLCA2NCkKK0JPT0szU19X UkFQUEVSKHRhciwgNjQsIEdTSURfVEFSKQorQk9PSzNTX1dSQVBQRVIoZWJiaHIsIDY0LCBHU0lE X0VCQkhSKQorQk9PSzNTX1dSQVBQRVIoZWJicnIsIDY0LCBHU0lEX0VCQlJSKQorQk9PSzNTX1dS QVBQRVIoYmVzY3IsIDY0LCBHU0lEX0JFU0NSKQorQk9PSzNTX1dSQVBQRVIoaWMsIDY0LCBHU0lE X0lDKQorQk9PSzNTX1dSQVBQRVIodnJzYXZlLCA2NCwgR1NJRF9WUlNBVkUpCiAKIAotI2RlZmlu ZSBWQ09SRV9XUkFQUEVSX1NFVChyZWcsIHNpemUpCQkJCQlcCisjZGVmaW5lIFZDT1JFX1dSQVBQ RVJfU0VUKHJlZywgc2l6ZSwgaWRlbikJCQkJXAogc3RhdGljIGlubGluZSB2b2lkIGt2bXBwY19z ZXRfIyNyZWcgIyNfaHYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1IyNzaXplIHZhbCkJXAogewkJ CQkJCQkJCVwKIAl2Y3B1LT5hcmNoLnZjb3JlLT5yZWcgPSB2YWw7CQkJCQlcCisJa3ZtaHZfcGFw cl9tYXJrX2RpcnR5KHZjcHUsIGlkZW4pOwkJCQlcCiB9CiAKLSNkZWZpbmUgVkNPUkVfV1JBUFBF Ul9HRVQocmVnLCBzaXplKQkJCQkJXAorI2RlZmluZSBWQ09SRV9XUkFQUEVSX0dFVChyZWcsIHNp emUsIGlkZW4pCQkJCVwKIHN0YXRpYyBpbmxpbmUgdSMjc2l6ZSBrdm1wcGNfZ2V0XyMjcmVnICMj X2h2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkJXAogewkJCQkJCQkJCVwKKwlrdm1odl9wYXByX2Nh Y2hlZF9yZWxvYWQodmNwdSwgaWRlbik7CQkJCVwKIAlyZXR1cm4gdmNwdS0+YXJjaC52Y29yZS0+ cmVnOwkJCQkJXAogfQogCi0jZGVmaW5lIFZDT1JFX1dSQVBQRVIocmVnLCBzaXplKQkJCQkJXAot CVZDT1JFX1dSQVBQRVJfU0VUKHJlZywgc2l6ZSkJCQkJCVwKLQlWQ09SRV9XUkFQUEVSX0dFVChy ZWcsIHNpemUpCQkJCQlcCisjZGVmaW5lIFZDT1JFX1dSQVBQRVIocmVnLCBzaXplLCBpZGVuKQkJ CQkJXAorCVZDT1JFX1dSQVBQRVJfU0VUKHJlZywgc2l6ZSwgaWRlbikJCQkJXAorCVZDT1JFX1dS QVBQRVJfR0VUKHJlZywgc2l6ZSwgaWRlbikJCQkJXAogCiAKLVZDT1JFX1dSQVBQRVIodnRiLCA2 NCkKLVZDT1JFX1dSQVBQRVIodGJfb2Zmc2V0LCA2NCkKLVZDT1JFX1dSQVBQRVIobHBjciwgNjQp CitWQ09SRV9XUkFQUEVSKHZ0YiwgNjQsIEdTSURfVlRCKQorVkNPUkVfV1JBUFBFUih0Yl9vZmZz ZXQsIDY0LCBHU0lEX1RCX09GRlNFVCkKK1ZDT1JFX1dSQVBQRVIobHBjciwgNjQsIEdTSURfTFBD UikKIAogc3RhdGljIGlubGluZSB1NjQga3ZtcHBjX2dldF9kZWNfZXhwaXJlcyhzdHJ1Y3Qga3Zt X3ZjcHUgKnZjcHUpCiB7CisJa3ZtaHZfcGFwcl9jYWNoZWRfcmVsb2FkKHZjcHUsIEdTSURfVEJf T0ZGU0VUKTsKKwlrdm1odl9wYXByX2NhY2hlZF9yZWxvYWQodmNwdSwgR1NJRF9ERUNfRVhQSVJZ X1RCKTsKIAlyZXR1cm4gdmNwdS0+YXJjaC5kZWNfZXhwaXJlczsKIH0KIAogc3RhdGljIGlubGlu ZSB2b2lkIGt2bXBwY19zZXRfZGVjX2V4cGlyZXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQg dmFsKQogewogCXZjcHUtPmFyY2guZGVjX2V4cGlyZXMgPSB2YWw7CisJa3ZtaHZfcGFwcl9jYWNo ZWRfcmVsb2FkKHZjcHUsIEdTSURfVEJfT0ZGU0VUKTsKKwlrdm1odl9wYXByX21hcmtfZGlydHko dmNwdSwgR1NJRF9ERUNfRVhQSVJZX1RCKTsKIH0KIAogLyogRXhwaXJ5IHRpbWUgb2YgdmNwdSBE RUMgcmVsYXRpdmUgdG8gaG9zdCBUQiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1 ZGUvYXNtL2t2bV9ib29rM3NfNjQuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYm9v azNzXzY0LmgKaW5kZXggZDQ5MDY1YWYwOGU5Li42ODllMTQyODQxMjcgMTAwNjQ0Ci0tLSBhL2Fy Y2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYm9vazNzXzY0LmgKKysrIGIvYXJjaC9wb3dlcnBj L2luY2x1ZGUvYXNtL2t2bV9ib29rM3NfNjQuaApAQCAtNjc3LDYgKzY3NywxMiBAQCBzdGF0aWMg aW5saW5lIHB0ZV90ICpmaW5kX2t2bV9ob3N0X3B0ZShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVk IGxvbmcgbW11X3NlcSwKIGV4dGVybiBwdGVfdCAqZmluZF9rdm1fbmVzdGVkX2d1ZXN0X3B0ZShz dHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgbHBpZCwKIAkJCQkJdW5zaWduZWQgbG9uZyBl YSwgdW5zaWduZWQgKmhzaGlmdCk7CiAKK2ludCBrdm1odl9wYXByX3ZjcHVfY3JlYXRlKHN0cnVj dCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bWh2X3BhcHJfaG9zdCAqbmVzdGVkX3N0YXRlKTsK K3ZvaWQga3ZtaHZfcGFwcl92Y3B1X2ZyZWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qg a3ZtaHZfcGFwcl9ob3N0ICpuZXN0ZWRfc3RhdGUpOworaW50IGt2bWh2X3BhcHJfZmx1c2hfdmNw dShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB0aW1lX2xpbWl0KTsKK2ludCBrdm1odl9wYXBy X3NldF9wdGJsX2VudHJ5KHU2NCBscGlkLCB1NjQgZHcwLCB1NjQgZHcxKTsKK2ludCBrdm1odl9w YXByX3BhcnNlX291dHB1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOworCiAjZW5kaWYgLyogQ09O RklHX0tWTV9CT09LM1NfSFZfUE9TU0lCTEUgKi8KIAogI2VuZGlmIC8qIF9fQVNNX0tWTV9CT09L M1NfNjRfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2hv c3QuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCmluZGV4IDk1OWY1NjZh NDU1Yy4uMjZiMjUyZmUwZDRlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20v a3ZtX2hvc3QuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2hvc3QuaApAQCAt MjUsNiArMjUsNyBAQAogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAjaW5jbHVkZSA8YXNt L2h2Y2FsbC5oPgogI2luY2x1ZGUgPGFzbS9tY2UuaD4KKyNpbmNsdWRlIDxhc20vZ3Vlc3Qtc3Rh dGUtYnVmZmVyLmg+CiAKICNkZWZpbmUgX19LVk1fSEFWRV9BUkNIX1ZDUFVfREVCVUdGUwogCkBA IC01MDksNiArNTEwLDIzIEBAIHVuaW9uIHhpdmVfdG1hX3cwMSB7CiAJX19iZTY0IHcwMTsKIH07 CiAKKyAvKiBOZXN0ZWQgUEFQUiBob3N0IEhfR1VFU1RfUlVOX1ZDUFUgY29uZmlndXJhdGlvbiAq Lworc3RydWN0IGt2bWh2X3BhcHJfY29uZmlnIHsKKwlzdHJ1Y3QgZ3NfYnVmZl9pbmZvIHZjcHVf cnVuX291dHB1dF9jZmc7CisJc3RydWN0IGdzX2J1ZmZfaW5mbyB2Y3B1X3J1bl9pbnB1dF9jZmc7 CisJdTY0IHZjcHVfcnVuX291dHB1dF9zaXplOworfTsKKworIC8qIE5lc3RlZCBQQVBSIGhvc3Qg c3RhdGUgKi8KK3N0cnVjdCBrdm1odl9wYXByX2hvc3QgeworCXN0cnVjdCBrdm1odl9wYXByX2Nv bmZpZyBjZmc7CisJc3RydWN0IGdzX2J1ZmYgKnZjcHVfcnVuX291dHB1dDsKKwlzdHJ1Y3QgZ3Nf YnVmZiAqdmNwdV9ydW5faW5wdXQ7CisJc3RydWN0IGdzX21zZyAqdmNwdV9tZXNzYWdlOworCXN0 cnVjdCBnc19tc2cgKnZjb3JlX21lc3NhZ2U7CisJc3RydWN0IGdzX2JpdG1hcCB2YWxpZHM7Cit9 OworCiBzdHJ1Y3Qga3ZtX3ZjcHVfYXJjaCB7CiAJdWxvbmcgaG9zdF9zdGFjazsKIAl1MzIgaG9z dF9waWQ7CkBAIC01NzUsNiArNTkzLDcgQEAgc3RydWN0IGt2bV92Y3B1X2FyY2ggewogCXVsb25n IGRzY3I7CiAJdWxvbmcgYW1yOwogCXVsb25nIHVhbW9yOworCXVsb25nIGFtb3I7CiAJdWxvbmcg aWFtcjsKIAl1MzIgY3RybDsKIAl1MzIgZGFicng7CkBAIC04MjksNiArODQ4LDggQEAgc3RydWN0 IGt2bV92Y3B1X2FyY2ggewogCXU2NCBuZXN0ZWRfaGZzY3I7CS8qIEhGU0NSIHRoYXQgdGhlIEwx IHJlcXVlc3RlZCBmb3IgdGhlIG5lc3RlZCBndWVzdCAqLwogCXUzMiBuZXN0ZWRfdmNwdV9pZDsK IAlncGFfdCBuZXN0ZWRfaW9fZ3ByOworCS8qIEZvciBuZXN0ZWQgQVBJdjIgZ3Vlc3RzKi8KKwlz dHJ1Y3Qga3ZtaHZfcGFwcl9ob3N0IHBhcHJfaG9zdDsKICNlbmRpZgogCiAjaWZkZWYgQ09ORklH X0tWTV9CT09LM1NfSFZfRVhJVF9USU1JTkcKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNs dWRlL2FzbS9rdm1fcHBjLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX3BwYy5oCmlu ZGV4IDU2NTZkMDkzODNmYy4uMGFmMzRjZGE0ZGE5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMv aW5jbHVkZS9hc20va3ZtX3BwYy5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1f cHBjLmgKQEAgLTU4OSw2ICs1ODksMzUgQEAgc3RhdGljIGlubGluZSBib29sIGt2bWh2X29uX3Bz ZXJpZXModm9pZCkKIHsKIAlyZXR1cm4gZmFsc2U7CiB9CisKKyNlbmRpZgorCisjaWZuZGVmIENP TkZJR19QUENfQk9PSzNTCisKK3N0YXRpYyBpbmxpbmUgYm9vbCBrdm1odl9vbl9wYXByKHZvaWQp Cit7CisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgaW5saW5lIGludCBrdm1odl9wYXByX3Jl bG9hZF9wdHJlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgcHRfcmVncyAqcmVncykK K3sKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbmxpbmUgaW50IGt2bWh2X3BhcHJfbWFya19kaXJ0 eV9wdHJlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sK KwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQga3ZtaHZfcGFwcl9tYXJrX2RpcnR5 KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2IGlkZW4pCit7CisJcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyBpbmxpbmUgaW50IGt2bWh2X3BhcHJfY2FjaGVkX3JlbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUg KnZjcHUsIHUxNiBpZGVuKQoreworCXJldHVybiAwOworfQorCiAjZW5kaWYKIAogI2lmZGVmIENP TkZJR19LVk1fWElDUwpAQCAtOTMxLDMxICs5NjAsMzMgQEAgc3RhdGljIGlubGluZSB2b2lkIGt2 bXBwY19zZXRfIyNyZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1IyNzaXplIHZhbCkJXAogCSAg ICAgICB2Y3B1LT5hcmNoLnNoYXJlZC0+cmVnID0gY3B1X3RvX2xlIyNzaXplKHZhbCk7CQlcCiB9 CQkJCQkJCQkJXAogCi0jZGVmaW5lIFNIQVJFRF9DQUNIRV9XUkFQUEVSX0dFVChyZWcsIHNpemUp CQkJCVwKKyNkZWZpbmUgU0hBUkVEX0NBQ0hFX1dSQVBQRVJfR0VUKHJlZywgc2l6ZSwgaWRlbikJ CQlcCiBzdGF0aWMgaW5saW5lIHUjI3NpemUga3ZtcHBjX2dldF8jI3JlZyhzdHJ1Y3Qga3ZtX3Zj cHUgKnZjcHUpCQlcCiB7CQkJCQkJCQkJXAorCWt2bWh2X3BhcHJfY2FjaGVkX3JlbG9hZCh2Y3B1 LCBpZGVuKTsJCQkJXAogCWlmIChrdm1wcGNfc2hhcmVkX2JpZ19lbmRpYW4odmNwdSkpCQkJCVwK IAkgICAgICAgcmV0dXJuIGJlIyNzaXplIyNfdG9fY3B1KHZjcHUtPmFyY2guc2hhcmVkLT5yZWcp OwlcCiAJZWxzZQkJCQkJCQkJXAogCSAgICAgICByZXR1cm4gbGUjI3NpemUjI190b19jcHUodmNw dS0+YXJjaC5zaGFyZWQtPnJlZyk7CVwKIH0JCQkJCQkJCQlcCiAKLSNkZWZpbmUgU0hBUkVEX0NB Q0hFX1dSQVBQRVJfU0VUKHJlZywgc2l6ZSkJCQkJXAorI2RlZmluZSBTSEFSRURfQ0FDSEVfV1JB UFBFUl9TRVQocmVnLCBzaXplLCBpZGVuKQkJCVwKIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1wcGNf c2V0XyMjcmVnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdSMjc2l6ZSB2YWwpCVwKIHsJCQkJCQkJ CQlcCiAJaWYgKGt2bXBwY19zaGFyZWRfYmlnX2VuZGlhbih2Y3B1KSkJCQkJXAogCSAgICAgICB2 Y3B1LT5hcmNoLnNoYXJlZC0+cmVnID0gY3B1X3RvX2JlIyNzaXplKHZhbCk7CQlcCiAJZWxzZQkJ CQkJCQkJXAogCSAgICAgICB2Y3B1LT5hcmNoLnNoYXJlZC0+cmVnID0gY3B1X3RvX2xlIyNzaXpl KHZhbCk7CQlcCisJa3ZtaHZfcGFwcl9tYXJrX2RpcnR5KHZjcHUsIGlkZW4pOwkJCQlcCiB9CQkJ CQkJCQkJXAogCiAjZGVmaW5lIFNIQVJFRF9XUkFQUEVSKHJlZywgc2l6ZSkJCQkJCVwKIAlTSEFS RURfV1JBUFBFUl9HRVQocmVnLCBzaXplKQkJCQkJXAogCVNIQVJFRF9XUkFQUEVSX1NFVChyZWcs IHNpemUpCQkJCQlcCiAKLSNkZWZpbmUgU0hBUkVEX0NBQ0hFX1dSQVBQRVIocmVnLCBzaXplKQkJ CQkJXAotCVNIQVJFRF9DQUNIRV9XUkFQUEVSX0dFVChyZWcsIHNpemUpCQkJCVwKLQlTSEFSRURf Q0FDSEVfV1JBUFBFUl9TRVQocmVnLCBzaXplKQkJCQlcCisjZGVmaW5lIFNIQVJFRF9DQUNIRV9X UkFQUEVSKHJlZywgc2l6ZSwgaWRlbikJCQkJXAorCVNIQVJFRF9DQUNIRV9XUkFQUEVSX0dFVChy ZWcsIHNpemUsIGlkZW4pCQkJXAorCVNIQVJFRF9DQUNIRV9XUkFQUEVSX1NFVChyZWcsIHNpemUs IGlkZW4pCQkJXAogCiAjZGVmaW5lIFNQUk5HX1dSQVBQRVIocmVnLCBib29rZWh2X3NwcikJCQkJ CVwKIAlTUFJOR19XUkFQUEVSX0dFVChyZWcsIGJvb2tlaHZfc3ByKQkJCQlcCkBAIC05NzQsMjkg KzEwMDUsMzAgQEAgc3RhdGljIGlubGluZSB2b2lkIGt2bXBwY19zZXRfIyNyZWcoc3RydWN0IGt2 bV92Y3B1ICp2Y3B1LCB1IyNzaXplIHZhbCkJXAogI2RlZmluZSBTSEFSRURfU1BSTkdfV1JBUFBF UihyZWcsIHNpemUsIGJvb2tlaHZfc3ByKQkJCVwKIAlTSEFSRURfV1JBUFBFUihyZWcsIHNpemUp CQkJCQlcCiAKLSNkZWZpbmUgU0hBUkVEX1NQUk5HX0NBQ0hFX1dSQVBQRVIocmVnLCBzaXplLCBi b29rZWh2X3NwcikJCVwKLQlTSEFSRURfQ0FDSEVfV1JBUFBFUihyZWcsIHNpemUpCQkJCQlcCisj ZGVmaW5lIFNIQVJFRF9TUFJOR19DQUNIRV9XUkFQUEVSKHJlZywgc2l6ZSwgYm9va2Vodl9zcHIs IGlkZW4pCVwKKwlTSEFSRURfQ0FDSEVfV1JBUFBFUihyZWcsIHNpemUsIGlkZW4pCQkJCVwKIAog I2VuZGlmCiAKIFNIQVJFRF9XUkFQUEVSKGNyaXRpY2FsLCA2NCkKLVNIQVJFRF9TUFJOR19DQUNI RV9XUkFQUEVSKHNwcmcwLCA2NCwgU1BSTl9HU1BSRzApCi1TSEFSRURfU1BSTkdfQ0FDSEVfV1JB UFBFUihzcHJnMSwgNjQsIFNQUk5fR1NQUkcxKQotU0hBUkVEX1NQUk5HX0NBQ0hFX1dSQVBQRVIo c3ByZzIsIDY0LCBTUFJOX0dTUFJHMikKLVNIQVJFRF9TUFJOR19DQUNIRV9XUkFQUEVSKHNwcmcz LCA2NCwgU1BSTl9HU1BSRzMpCi1TSEFSRURfU1BSTkdfQ0FDSEVfV1JBUFBFUihzcnIwLCA2NCwg U1BSTl9HU1JSMCkKLVNIQVJFRF9TUFJOR19DQUNIRV9XUkFQUEVSKHNycjEsIDY0LCBTUFJOX0dT UlIxKQotU0hBUkVEX1NQUk5HX0NBQ0hFX1dSQVBQRVIoZGFyLCA2NCwgU1BSTl9HREVBUikKK1NI QVJFRF9TUFJOR19DQUNIRV9XUkFQUEVSKHNwcmcwLCA2NCwgU1BSTl9HU1BSRzAsIEdTSURfU1BS RzApCitTSEFSRURfU1BSTkdfQ0FDSEVfV1JBUFBFUihzcHJnMSwgNjQsIFNQUk5fR1NQUkcxLCBH U0lEX1NQUkcxKQorU0hBUkVEX1NQUk5HX0NBQ0hFX1dSQVBQRVIoc3ByZzIsIDY0LCBTUFJOX0dT UFJHMiwgR1NJRF9TUFJHMikKK1NIQVJFRF9TUFJOR19DQUNIRV9XUkFQUEVSKHNwcmczLCA2NCwg U1BSTl9HU1BSRzMsIEdTSURfU1BSRzMpCitTSEFSRURfU1BSTkdfQ0FDSEVfV1JBUFBFUihzcnIw LCA2NCwgU1BSTl9HU1JSMCwgR1NJRF9TUlIwKQorU0hBUkVEX1NQUk5HX0NBQ0hFX1dSQVBQRVIo c3JyMSwgNjQsIFNQUk5fR1NSUjEsIEdTSURfU1JSMSkKK1NIQVJFRF9TUFJOR19DQUNIRV9XUkFQ UEVSKGRhciwgNjQsIFNQUk5fR0RFQVIsIEdTSURfREFSKQogU0hBUkVEX1NQUk5HX1dSQVBQRVIo ZXNyLCA2NCwgU1BSTl9HRVNSKQotU0hBUkVEX0NBQ0hFX1dSQVBQRVJfR0VUKG1zciwgNjQpCitT SEFSRURfQ0FDSEVfV1JBUFBFUl9HRVQobXNyLCA2NCwgR1NJRF9NU1IpCiBzdGF0aWMgaW5saW5l IHZvaWQga3ZtcHBjX3NldF9tc3JfZmFzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2YWwp CiB7CiAJaWYgKGt2bXBwY19zaGFyZWRfYmlnX2VuZGlhbih2Y3B1KSkKIAkgICAgICAgdmNwdS0+ YXJjaC5zaGFyZWQtPm1zciA9IGNwdV90b19iZTY0KHZhbCk7CiAJZWxzZQogCSAgICAgICB2Y3B1 LT5hcmNoLnNoYXJlZC0+bXNyID0gY3B1X3RvX2xlNjQodmFsKTsKKwlrdm1odl9wYXByX21hcmtf ZGlydHkodmNwdSwgR1NJRF9NU1IpOwogfQotU0hBUkVEX0NBQ0hFX1dSQVBQRVIoZHNpc3IsIDMy KQorU0hBUkVEX0NBQ0hFX1dSQVBQRVIoZHNpc3IsIDMyLCBHU0lEX0RTSVNSKQogU0hBUkVEX1dS QVBQRVIoaW50X3BlbmRpbmcsIDMyKQogU0hBUkVEX1dSQVBQRVIoc3ByZzQsIDY0KQogU0hBUkVE X1dSQVBQRVIoc3ByZzUsIDY0KQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNt L3BscGFyX3dyYXBwZXJzLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGxwYXJfd3JhcHBl cnMuaAppbmRleCA4MjM5YzBhZjVlYjIuLmI0OGY5MDg4NDUyMiAxMDA2NDQKLS0tIGEvYXJjaC9w b3dlcnBjL2luY2x1ZGUvYXNtL3BscGFyX3dyYXBwZXJzLmgKKysrIGIvYXJjaC9wb3dlcnBjL2lu Y2x1ZGUvYXNtL3BscGFyX3dyYXBwZXJzLmgKQEAgLTYsNiArNiw3IEBACiAKICNpbmNsdWRlIDxs aW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9pcnFmbGFncy5oPgorI2luY2x1ZGUgPGxp bnV4L2RlbGF5Lmg+CiAKICNpbmNsdWRlIDxhc20vaHZjYWxsLmg+CiAjaW5jbHVkZSA8YXNtL3Bh Y2EuaD4KQEAgLTM0Miw2ICszNDMsMjAzIEBAIHN0YXRpYyBpbmxpbmUgbG9uZyBwbHBhcl9nZXRf Y3B1X2NoYXJhY3RlcmlzdGljcyhzdHJ1Y3QgaF9jcHVfY2hhcl9yZXN1bHQgKnApCiAJcmV0dXJu IHJjOwogfQogCitzdGF0aWMgaW5saW5lIGxvbmcgcGxwYXJfZ3Vlc3RfY3JlYXRlKHVuc2lnbmVk IGxvbmcgZmxhZ3MsIHVuc2lnbmVkIGxvbmcgKmd1ZXN0X2lkKQoreworCXVuc2lnbmVkIGxvbmcg cmV0YnVmW1BMUEFSX0hDQUxMX0JVRlNJWkVdOworCXVuc2lnbmVkIGxvbmcgdG9rZW47CisJbG9u ZyByYzsKKworCXRva2VuID0gLTFVTDsKKwl3aGlsZSAodHJ1ZSkgeworCQlyYyA9IHBscGFyX2hj YWxsKEhfR1VFU1RfQ1JFQVRFLCByZXRidWYsIGZsYWdzLCB0b2tlbik7CisJCWlmIChyYyA9IEhf U1VDQ0VTUykgeworCQkJKmd1ZXN0X2lkID0gcmV0YnVmWzBdOworCQkJYnJlYWs7CisJCX0KKwor CQlpZiAocmMgPSBIX0JVU1kpIHsKKwkJCXRva2VuID0gcmV0YnVmWzBdOworCQkJY3B1X3JlbGF4 KCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChIX0lTX0xPTkdfQlVTWShyYykpIHsKKwkJ CXRva2VuID0gcmV0YnVmWzBdOworCQkJbWRlbGF5KGdldF9sb25nYnVzeV9tc2VjcyhyYykpOwor CQkJY29udGludWU7CisJCX0KKworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0 YXRpYyBpbmxpbmUgbG9uZyBwbHBhcl9ndWVzdF9jcmVhdGVfdmNwdSh1bnNpZ25lZCBsb25nIGZs YWdzLAorCQkJCQkgICB1bnNpZ25lZCBsb25nIGd1ZXN0X2lkLAorCQkJCQkgICB1bnNpZ25lZCBs b25nIHZjcHVfaWQpCit7CisJbG9uZyByYzsKKworCXdoaWxlICh0cnVlKSB7CisJCXJjID0gcGxw YXJfaGNhbGxfbm9yZXRzKEhfR1VFU1RfQ1JFQVRFX1ZDUFUsIDAsIGd1ZXN0X2lkLCB2Y3B1X2lk KTsKKworCQlpZiAocmMgPSBIX0JVU1kpIHsKKwkJCWNwdV9yZWxheCgpOworCQkJY29udGludWU7 CisJCX0KKworCQlpZiAoSF9JU19MT05HX0JVU1kocmMpKSB7CisJCQltZGVsYXkoZ2V0X2xvbmdi dXN5X21zZWNzKHJjKSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWJyZWFrOworCX0KKworCXJl dHVybiByYzsKK30KKworc3RhdGljIGlubGluZSBsb25nIHBscGFyX2d1ZXN0X3NldF9zdGF0ZSh1 bnNpZ25lZCBsb25nIGZsYWdzLAorCQkJCQkgdW5zaWduZWQgbG9uZyBndWVzdF9pZCwKKwkJCQkJ IHVuc2lnbmVkIGxvbmcgdmNwdV9pZCwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgZGF0YV9idWZmZXIs CisJCQkJCSB1bnNpZ25lZCBsb25nIGRhdGFfc2l6ZSwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgKmZh aWxlZF9pbmRleCkKK3sKKwl1bnNpZ25lZCBsb25nIHJldGJ1ZltQTFBBUl9IQ0FMTF9CVUZTSVpF XTsKKwlsb25nIHJjOworCisJd2hpbGUgKHRydWUpIHsKKwkJcmMgPSBwbHBhcl9oY2FsbChIX0dV RVNUX1NFVF9TVEFURSwgcmV0YnVmLCBmbGFncywgZ3Vlc3RfaWQsCisJCQkJIHZjcHVfaWQsIGRh dGFfYnVmZmVyLCBkYXRhX3NpemUpOworCisJCWlmIChyYyA9IEhfQlVTWSkgeworCQkJY3B1X3Jl bGF4KCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChIX0lTX0xPTkdfQlVTWShyYykpIHsK KwkJCW1kZWxheShnZXRfbG9uZ2J1c3lfbXNlY3MocmMpKTsKKwkJCWNvbnRpbnVlOworCQl9CisK KwkJaWYgKHJjID0gSF9JTlZBTElEX0VMRU1FTlRfSUQpCisJCQkqZmFpbGVkX2luZGV4ID0gcmV0 YnVmWzBdOworCQllbHNlIGlmIChyYyA9IEhfSU5WQUxJRF9FTEVNRU5UX1NJWkUpCisJCQkqZmFp bGVkX2luZGV4ID0gcmV0YnVmWzBdOworCQllbHNlIGlmIChyYyA9IEhfSU5WQUxJRF9FTEVNRU5U X1ZBTFVFKQorCQkJKmZhaWxlZF9pbmRleCA9IHJldGJ1ZlswXTsKKworCQlicmVhazsKKwl9CisK KwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbmxpbmUgbG9uZyBwbHBhcl9ndWVzdF9nZXRfc3Rh dGUodW5zaWduZWQgbG9uZyBmbGFncywKKwkJCQkJIHVuc2lnbmVkIGxvbmcgZ3Vlc3RfaWQsCisJ CQkJCSB1bnNpZ25lZCBsb25nIHZjcHVfaWQsCisJCQkJCSB1bnNpZ25lZCBsb25nIGRhdGFfYnVm ZmVyLAorCQkJCQkgdW5zaWduZWQgbG9uZyBkYXRhX3NpemUsCisJCQkJCSB1bnNpZ25lZCBsb25n ICpmYWlsZWRfaW5kZXgpCit7CisJdW5zaWduZWQgbG9uZyByZXRidWZbUExQQVJfSENBTExfQlVG U0laRV07CisJbG9uZyByYzsKKworCXdoaWxlICh0cnVlKSB7CisJCXJjID0gcGxwYXJfaGNhbGwo SF9HVUVTVF9HRVRfU1RBVEUsIHJldGJ1ZiwgZmxhZ3MsIGd1ZXN0X2lkLAorCQkJCSB2Y3B1X2lk LCBkYXRhX2J1ZmZlciwgZGF0YV9zaXplKTsKKworCQlpZiAocmMgPSBIX0JVU1kpIHsKKwkJCWNw dV9yZWxheCgpOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoSF9JU19MT05HX0JVU1kocmMp KSB7CisJCQltZGVsYXkoZ2V0X2xvbmdidXN5X21zZWNzKHJjKSk7CisJCQljb250aW51ZTsKKwkJ fQorCisJCWlmIChyYyA9IEhfSU5WQUxJRF9FTEVNRU5UX0lEKQorCQkJKmZhaWxlZF9pbmRleCA9 IHJldGJ1ZlswXTsKKwkJZWxzZSBpZiAocmMgPSBIX0lOVkFMSURfRUxFTUVOVF9TSVpFKQorCQkJ KmZhaWxlZF9pbmRleCA9IHJldGJ1ZlswXTsKKwkJZWxzZSBpZiAocmMgPSBIX0lOVkFMSURfRUxF TUVOVF9WQUxVRSkKKwkJCSpmYWlsZWRfaW5kZXggPSByZXRidWZbMF07CisKKwkJYnJlYWs7CisJ fQorCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW5saW5lIGxvbmcgcGxwYXJfZ3Vlc3RfcnVu X3ZjcHUodW5zaWduZWQgbG9uZyBmbGFncywgdW5zaWduZWQgbG9uZyBndWVzdF9pZCwKKwkJCQkJ dW5zaWduZWQgbG9uZyB2Y3B1X2lkLCBpbnQgKnRyYXAsCisJCQkJCXVuc2lnbmVkIGxvbmcgKmZh aWxlZF9pbmRleCkKK3sKKwl1bnNpZ25lZCBsb25nIHJldGJ1ZltQTFBBUl9IQ0FMTF9CVUZTSVpF XTsKKwlsb25nIHJjOworCisJcmMgPSBwbHBhcl9oY2FsbChIX0dVRVNUX1JVTl9WQ1BVLCByZXRi dWYsIGZsYWdzLCBndWVzdF9pZCwgdmNwdV9pZCk7CisJaWYgKHJjID0gSF9TVUNDRVNTKQorCQkq dHJhcCA9IHJldGJ1ZlswXTsKKwllbHNlIGlmIChyYyA9IEhfSU5WQUxJRF9FTEVNRU5UX0lEKQor CQkqZmFpbGVkX2luZGV4ID0gcmV0YnVmWzBdOworCWVsc2UgaWYgKHJjID0gSF9JTlZBTElEX0VM RU1FTlRfU0laRSkKKwkJKmZhaWxlZF9pbmRleCA9IHJldGJ1ZlswXTsKKwllbHNlIGlmIChyYyA9 IEhfSU5WQUxJRF9FTEVNRU5UX1ZBTFVFKQorCQkqZmFpbGVkX2luZGV4ID0gcmV0YnVmWzBdOwor CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW5saW5lIGxvbmcgcGxwYXJfZ3Vlc3RfZGVsZXRl KHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHU2NCBndWVzdF9pZCkKK3sKKwlsb25nIHJjOworCisJd2hp bGUgKHRydWUpIHsKKwkJcmMgPSBwbHBhcl9oY2FsbF9ub3JldHMoSF9HVUVTVF9ERUxFVEUsIGZs YWdzLCBndWVzdF9pZCk7CisJCWlmIChyYyA9IEhfQlVTWSkgeworCQkJY3B1X3JlbGF4KCk7CisJ CQljb250aW51ZTsKKwkJfQorCisJCWlmIChIX0lTX0xPTkdfQlVTWShyYykpIHsKKwkJCW1kZWxh eShnZXRfbG9uZ2J1c3lfbXNlY3MocmMpKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJYnJlYWs7 CisJfQorCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW5saW5lIGxvbmcgcGxwYXJfZ3Vlc3Rf c2V0X2NhcGFiaWxpdGllcyh1bnNpZ25lZCBsb25nIGZsYWdzLAorCQkJCQkJdW5zaWduZWQgbG9u ZyBjYXBhYmlsaXRpZXMpCit7CisJdW5zaWduZWQgbG9uZyByZXRidWZbUExQQVJfSENBTExfQlVG U0laRV07CisJbG9uZyByYzsKKworCXJjID0gcGxwYXJfaGNhbGwoSF9HVUVTVF9TRVRfQ0FQQUJJ TElUSUVTLCByZXRidWYsIGZsYWdzLCBjYXBhYmlsaXRpZXMpOworCisJcmV0dXJuIHJjOworfQor CitzdGF0aWMgaW5saW5lIGxvbmcgcGxwYXJfZ3Vlc3RfZ2V0X2NhcGFiaWxpdGllcyh1bnNpZ25l ZCBsb25nIGZsYWdzLAorCQkJCQkJdW5zaWduZWQgbG9uZyAqY2FwYWJpbGl0aWVzKQoreworCXVu c2lnbmVkIGxvbmcgcmV0YnVmW1BMUEFSX0hDQUxMX0JVRlNJWkVdOworCWxvbmcgcmM7CisKKwly YyA9IHBscGFyX2hjYWxsKEhfR1VFU1RfR0VUX0NBUEFCSUxJVElFUywgcmV0YnVmLCBmbGFncyk7 CisJaWYgKHJjID0gSF9TVUNDRVNTKQorCQkqY2FwYWJpbGl0aWVzID0gcmV0YnVmWzBdOworCisJ cmV0dXJuIHJjOworfQorCiAvKgogICogV3JhcHBlciB0byBIX1JQVF9JTlZBTElEQVRFIGhjYWxs IHRoYXQgaGFuZGxlcyByZXR1cm4gdmFsdWVzIGFwcHJvcHJpYXRlbHkKICAqCmRpZmYgLS1naXQg YS9hcmNoL3Bvd2VycGMva3ZtL01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL2t2bS9NYWtlZmlsZQpp bmRleCA1MzE5ZDg4OWIxODQuLjNkMmNhOWIxNjkzMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBj L2t2bS9NYWtlZmlsZQorKysgYi9hcmNoL3Bvd2VycGMva3ZtL01ha2VmaWxlCkBAIC04Nyw2ICs4 Nyw3IEBAIGt2bS1ib29rM3NfNjQtYnVpbHRpbi1vYmpzLSQoQ09ORklHX0tWTV9CT09LM1NfNjRf SEFORExFUikgKz0gXAogCWJvb2szc19odl9yYXMubyBcCiAJYm9vazNzX2h2X2J1aWx0aW4ubyBc CiAJYm9vazNzX2h2X3A5X3BlcmYubyBcCisJYm9vazNzX2h2X3BhcHIubyBcCiAJJChrdm0tYm9v azNzXzY0LWJ1aWx0aW4tdG0tb2Jqcy15KSBcCiAJJChrdm0tYm9vazNzXzY0LWJ1aWx0aW4teGlj cy1vYmpzLXkpCiBlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYu YyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMKaW5kZXggMmUwMWNjYjk3ZWQ2Li4xYjAw YTgxNWZiYjkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMKKysrIGIv YXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYwpAQCAtMjkwNiwxNCArMjkwNiwyMSBAQCBzdGF0 aWMgaW50IGt2bXBwY19jb3JlX3ZjcHVfY3JlYXRlX2h2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkK IAl2Y3B1LT5hcmNoLnNoYXJlZF9iaWdfZW5kaWFuID0gZmFsc2U7CiAjZW5kaWYKICNlbmRpZgot CWt2bXBwY19zZXRfbW1jcl9odih2Y3B1LCAwLCBNTUNSMF9GQyk7CiAKKwlpZiAoa3ZtaHZfb25f cGFwcigpKSB7CisJCWVyciA9IGt2bWh2X3BhcHJfdmNwdV9jcmVhdGUodmNwdSwgJnZjcHUtPmFy Y2gucGFwcl9ob3N0KTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCX0KKworCWt2 bXBwY19zZXRfbW1jcl9odih2Y3B1LCAwLCBNTUNSMF9GQyk7CiAJaWYgKGNwdV9oYXNfZmVhdHVy ZShDUFVfRlRSX0FSQ0hfMzEpKSB7CiAJCWt2bXBwY19zZXRfbW1jcl9odih2Y3B1LCAwLCBrdm1w cGNfZ2V0X21tY3JfaHYodmNwdSwgMCkgfCBNTUNSMF9QTUNDRVhUKTsKIAkJa3ZtcHBjX3NldF9t bWNyYV9odih2Y3B1LCBNTUNSQV9CSFJCX0RJU0FCTEUpOwogCX0KIAogCWt2bXBwY19zZXRfY3Ry bF9odih2Y3B1LCBDVFJMX1JVTkxBVENIKTsKKwlrdm1wcGNfc2V0X2Ftb3JfaHYodmNwdSwgfjAp OwogCS8qIGRlZmF1bHQgdG8gaG9zdCBQVlIsIHNpbmNlIHdlIGNhbid0IHNwb29mIGl0ICovCiAJ a3ZtcHBjX3NldF9wdnJfaHYodmNwdSwgbWZzcHIoU1BSTl9QVlIpKTsKIAlzcGluX2xvY2tfaW5p dCgmdmNwdS0+YXJjaC52cGFfdXBkYXRlX2xvY2spOwpAQCAtMjk4Nyw2ICsyOTk0LDggQEAgc3Rh dGljIGludCBrdm1wcGNfY29yZV92Y3B1X2NyZWF0ZV9odihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUp CiAJCQlrdm0tPmFyY2gudmNvcmVzW2NvcmVdID0gdmNvcmU7CiAJCQlrdm0tPmFyY2gub25saW5l X3Zjb3JlcysrOwogCQkJbXV0ZXhfdW5sb2NrKCZrdm0tPmFyY2gubW11X3NldHVwX2xvY2spOwor CQkJaWYgKGt2bWh2X29uX3BhcHIoKSkKKwkJCQlrdm1wcGNfc2V0X2xwY3JfaHYodmNwdSwgdmNw dS0+YXJjaC52Y29yZS0+bHBjcik7CiAJCX0KIAl9CiAJbXV0ZXhfdW5sb2NrKCZrdm0tPmxvY2sp OwpAQCAtMzA1OSw2ICszMDY4LDggQEAgc3RhdGljIHZvaWQga3ZtcHBjX2NvcmVfdmNwdV9mcmVl X2h2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAl1bnBpbl92cGEodmNwdS0+a3ZtLCAmdmNwdS0+ YXJjaC5zbGJfc2hhZG93KTsKIAl1bnBpbl92cGEodmNwdS0+a3ZtLCAmdmNwdS0+YXJjaC52cGEp OwogCXNwaW5fdW5sb2NrKCZ2Y3B1LT5hcmNoLnZwYV91cGRhdGVfbG9jayk7CisJaWYgKGt2bWh2 X29uX3BhcHIoKSkKKwkJa3ZtaHZfcGFwcl92Y3B1X2ZyZWUodmNwdSwgJnZjcHUtPmFyY2gucGFw cl9ob3N0KTsKIH0KIAogc3RhdGljIGludCBrdm1wcGNfY29yZV9jaGVja19yZXF1ZXN0c19odihz dHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCkBAIC00MDIzLDYgKzQwMzQsNTAgQEAgc3RhdGljIHZvaWQg dmNwdV92cGFfaW5jcmVtZW50X2Rpc3BhdGNoKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAl9CiB9 CiAKK3N0YXRpYyBpbnQga3ZtaHZfdmNwdV9lbnRyeV9wYXByKHN0cnVjdCBrdm1fdmNwdSAqdmNw dSwgdTY0IHRpbWVfbGltaXQsIHVuc2lnbmVkIGxvbmcgbHBjciwgdTY0ICp0YikKK3sKKwlzdHJ1 Y3Qga3ZtaHZfcGFwcl9ob3N0ICpwaDsKKwl1bnNpZ25lZCBsb25nIG1zciwgaTsKKwlpbnQgdHJh cDsKKwlsb25nIHJjOworCisJcGggPSAmdmNwdS0+YXJjaC5wYXByX2hvc3Q7CisKKwltc3IgPSBt Zm1zcigpOworCWt2bXBwY19tc3JfaGFyZF9kaXNhYmxlX3NldF9mYWNpbGl0aWVzKHZjcHUsIG1z cik7CisJaWYgKGxhenlfaXJxX3BlbmRpbmcoKSkKKwkJcmV0dXJuIDA7CisKKwlrdm1odl9wYXBy X2ZsdXNoX3ZjcHUodmNwdSwgdGltZV9saW1pdCk7CisKKwlhY2N1bXVsYXRlX3RpbWUodmNwdSwg JnZjcHUtPmFyY2guaW5fZ3Vlc3QpOworCXJjID0gcGxwYXJfZ3Vlc3RfcnVuX3ZjcHUoMCwgdmNw dS0+a3ZtLT5hcmNoLmxwaWQsIHZjcHUtPnZjcHVfaWQsCisJCQkJICAmdHJhcCwgJmkpOworCisJ aWYgKHJjICE9IEhfU1VDQ0VTUykgeworCQlwcl9lcnIoIktWTSBHdWVzdCBSdW4gVkNQVSBoY2Fs bCBmYWlsZWRcbiIpOworCQlpZiAocmMgPSBIX0lOVkFMSURfRUxFTUVOVF9JRCkKKwkJCXByX2Vy cigiS1ZNOiBHdWVzdCBSdW4gVkNQVSBpbnZhbGlkIGVsZW1lbnQgaWQgYXQgJWxkXG4iLCBpKTsK KwkJZWxzZSBpZiAocmMgPSBIX0lOVkFMSURfRUxFTUVOVF9TSVpFKQorCQkJcHJfZXJyKCJLVk06 IEd1ZXN0IFJ1biBWQ1BVIGludmFsaWQgZWxlbWVudCBzaXplIGF0ICVsZFxuIiwgaSk7CisJCWVs c2UgaWYgKHJjID0gSF9JTlZBTElEX0VMRU1FTlRfVkFMVUUpCisJCQlwcl9lcnIoIktWTTogR3Vl c3QgUnVuIFZDUFUgaW52YWxpZCBlbGVtZW50IHZhbHVlIGF0ICVsZFxuIiwgaSk7CisJCXJldHVy biAwOworCX0KKwlhY2N1bXVsYXRlX3RpbWUodmNwdSwgJnZjcHUtPmFyY2guZ3Vlc3RfZXhpdCk7 CisKKwkqdGIgPSBtZnRiKCk7CisJZ3NtX3Jlc2V0KHBoLT52Y3B1X21lc3NhZ2UpOworCWdzbV9y ZXNldChwaC0+dmNvcmVfbWVzc2FnZSk7CisJZ3NibV96ZXJvKCZwaC0+dmFsaWRzKTsKKworCWt2 bWh2X3BhcHJfcGFyc2Vfb3V0cHV0KHZjcHUpOworCisJdGltZXJfcmVhcm1faG9zdF9kZWMoKnRi KTsKKworCXJldHVybiB0cmFwOworfQorCiAvKiBjYWxsIG91ciBoeXBlcnZpc29yIHRvIGxvYWQg dXAgSFYgcmVncyBhbmQgZ28gKi8KIHN0YXRpYyBpbnQga3ZtaHZfdmNwdV9lbnRyeV9wOV9uZXN0 ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdGltZV9saW1pdCwgdW5zaWduZWQgbG9uZyBs cGNyLCB1NjQgKnRiKQogewpAQCAtNDE0MCw3ICs0MTk1LDEwIEBAIHN0YXRpYyBpbnQga3ZtaHZf cDlfZ3Vlc3RfZW50cnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdGltZV9saW1pdCwKIAl2 Y3B1X3ZwYV9pbmNyZW1lbnRfZGlzcGF0Y2godmNwdSk7CiAKIAlpZiAoa3ZtaHZfb25fcHNlcmll cygpKSB7Ci0JCXRyYXAgPSBrdm1odl92Y3B1X2VudHJ5X3A5X25lc3RlZCh2Y3B1LCB0aW1lX2xp bWl0LCBscGNyLCB0Yik7CisJCWlmICgha3ZtaHZfb25fcGFwcigpKQorCQkJdHJhcCA9IGt2bWh2 X3ZjcHVfZW50cnlfcDlfbmVzdGVkKHZjcHUsIHRpbWVfbGltaXQsIGxwY3IsIHRiKTsKKwkJZWxz ZQorCQkJdHJhcCA9IGt2bWh2X3ZjcHVfZW50cnlfcGFwcih2Y3B1LCB0aW1lX2xpbWl0LCBscGNy LCB0Yik7CiAKIAkJLyogSF9DRURFIGhhcyB0byBiZSBoYW5kbGVkIG5vdywgbm90IGxhdGVyICov CiAJCWlmICh0cmFwID0gQk9PSzNTX0lOVEVSUlVQVF9TWVNDQUxMICYmICFuZXN0ZWQgJiYKQEAg LTUxMDAsNiArNTE1OCw3IEBAIHN0YXRpYyB2b2lkIGt2bXBwY19jb3JlX2NvbW1pdF9tZW1vcnlf cmVnaW9uX2h2KHN0cnVjdCBrdm0gKmt2bSwKICAqLwogdm9pZCBrdm1wcGNfdXBkYXRlX2xwY3Io c3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGxwY3IsIHVuc2lnbmVkIGxvbmcgbWFzaykK IHsKKwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7CiAJbG9uZyBpbnQgaTsKIAl1MzIgY29yZXNfZG9u ZSA9IDA7CiAKQEAgLTUxMjAsNiArNTE3OSwxMiBAQCB2b2lkIGt2bXBwY191cGRhdGVfbHBjcihz dHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgbHBjciwgdW5zaWduZWQgbG9uZyBtYXNrKQog CQlpZiAoKytjb3Jlc19kb25lID49IGt2bS0+YXJjaC5vbmxpbmVfdmNvcmVzKQogCQkJYnJlYWs7 CiAJfQorCisJaWYgKGt2bWh2X29uX3BhcHIoKSkgeworCQlrdm1fZm9yX2VhY2hfdmNwdShpLCB2 Y3B1LCBrdm0pIHsKKwkJCWt2bXBwY19zZXRfbHBjcl9odih2Y3B1LCB2Y3B1LT5hcmNoLnZjb3Jl LT5scGNyKTsKKwkJfQorCX0KIH0KIAogdm9pZCBrdm1wcGNfc2V0dXBfcGFydGl0aW9uX3RhYmxl KHN0cnVjdCBrdm0gKmt2bSkKQEAgLTUzODYsMTUgKzU0NTEsNDMgQEAgc3RhdGljIGludCBrdm1w cGNfY29yZV9pbml0X3ZtX2h2KHN0cnVjdCBrdm0gKmt2bSkKIAogCS8qIEFsbG9jYXRlIHRoZSBn dWVzdCdzIGxvZ2ljYWwgcGFydGl0aW9uIElEICovCiAKLQlscGlkID0ga3ZtcHBjX2FsbG9jX2xw aWQoKTsKLQlpZiAoKGxvbmcpbHBpZCA8IDApCi0JCXJldHVybiAtRU5PTUVNOwotCWt2bS0+YXJj aC5scGlkID0gbHBpZDsKKwlpZiAoIWt2bWh2X29uX3BhcHIoKSkgeworCQlscGlkID0ga3ZtcHBj X2FsbG9jX2xwaWQoKTsKKwkJaWYgKChsb25nKWxwaWQgPCAwKQorCQkJcmV0dXJuIC1FTk9NRU07 CisJCWt2bS0+YXJjaC5scGlkID0gbHBpZDsKKwl9CiAKIAlrdm1wcGNfYWxsb2NfaG9zdF9ybV9v cHMoKTsKIAogCWt2bWh2X3ZtX25lc3RlZF9pbml0KGt2bSk7CiAKKwlpZiAoa3ZtaHZfb25fcGFw cigpKSB7CisJCWxvbmcgcmM7CisJCXVuc2lnbmVkIGxvbmcgZ3Vlc3RfaWQ7CisKKwkJcmMgPSBw bHBhcl9ndWVzdF9jcmVhdGUoMCwgJmd1ZXN0X2lkKTsKKworCQlpZiAocmMgIT0gSF9TVUNDRVNT KQorCQkJcHJfZXJyKCJLVk06IENyZWF0ZSBHdWVzdCBoY2FsbCBmYWlsZWQsIHJjPSVsZFxuIiwg cmMpOworCisJCXN3aXRjaCAocmMpIHsKKwkJY2FzZSBIX1BBUkFNRVRFUjoKKwkJY2FzZSBIX0ZV TkNUSU9OOgorCQljYXNlIEhfU1RBVEU6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJY2FzZSBIX05P VF9FTk9VR0hfUkVTT1VSQ0VTOgorCQljYXNlIEhfQUJPUlRFRDoKKwkJCXJldHVybiAtRU5PTUVN OworCQljYXNlIEhfQVVUSE9SSVRZOgorCQkJcmV0dXJuIC1FUEVSTTsKKwkJY2FzZSBIX05PVF9B VkFJTEFCTEU6CisJCQlyZXR1cm4gLUVCVVNZOworCQl9CisJCWt2bS0+YXJjaC5scGlkID0gZ3Vl c3RfaWQ7CisJfQorCisKIAkvKgogCSAqIFNpbmNlIHdlIGRvbid0IGZsdXNoIHRoZSBUTEIgd2hl biB0ZWFyaW5nIGRvd24gYSBWTSwKIAkgKiBhbmQgdGhpcyBscGlkIG1pZ2h0IGhhdmUgcHJldmlv dXNseSBiZWVuIHVzZWQsCkBAIC01NDY0LDcgKzU1NTcsMTAgQEAgc3RhdGljIGludCBrdm1wcGNf Y29yZV9pbml0X3ZtX2h2KHN0cnVjdCBrdm0gKmt2bSkKIAkJCWxwY3IgfD0gTFBDUl9IQUlMOwog CQlyZXQgPSBrdm1wcGNfaW5pdF92bV9yYWRpeChrdm0pOwogCQlpZiAocmV0KSB7Ci0JCQlrdm1w cGNfZnJlZV9scGlkKGt2bS0+YXJjaC5scGlkKTsKKwkJCWlmIChrdm1odl9vbl9wYXByKCkpCisJ CQkJcGxwYXJfZ3Vlc3RfZGVsZXRlKDAsIGt2bS0+YXJjaC5scGlkKTsKKwkJCWVsc2UKKwkJCQlr dm1wcGNfZnJlZV9scGlkKGt2bS0+YXJjaC5scGlkKTsKIAkJCXJldHVybiByZXQ7CiAJCX0KIAkJ a3ZtcHBjX3NldHVwX3BhcnRpdGlvbl90YWJsZShrdm0pOwpAQCAtNTU1NCwxMCArNTY1MCwxNCBA QCBzdGF0aWMgdm9pZCBrdm1wcGNfY29yZV9kZXN0cm95X3ZtX2h2KHN0cnVjdCBrdm0gKmt2bSkK IAkJa3ZtLT5hcmNoLnByb2Nlc3NfdGFibGUgPSAwOwogCQlpZiAoa3ZtLT5hcmNoLnNlY3VyZV9n dWVzdCkKIAkJCXV2X3N2bV90ZXJtaW5hdGUoa3ZtLT5hcmNoLmxwaWQpOwotCQlrdm1odl9zZXRf cHRibF9lbnRyeShrdm0tPmFyY2gubHBpZCwgMCwgMCk7CisJCWlmICgha3ZtaHZfb25fcGFwcigp KQorCQkJa3ZtaHZfc2V0X3B0YmxfZW50cnkoa3ZtLT5hcmNoLmxwaWQsIDAsIDApOwogCX0KIAot CWt2bXBwY19mcmVlX2xwaWQoa3ZtLT5hcmNoLmxwaWQpOworCWlmIChrdm1odl9vbl9wYXByKCkp CisJCXBscGFyX2d1ZXN0X2RlbGV0ZSgwLCBrdm0tPmFyY2gubHBpZCk7CisJZWxzZQorCQlrdm1w cGNfZnJlZV9scGlkKGt2bS0+YXJjaC5scGlkKTsKIAogCWt2bXBwY19mcmVlX3BpbWFwKGt2bSk7 CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5oIGIvYXJjaC9wb3dl cnBjL2t2bS9ib29rM3NfaHYuaAppbmRleCA3YTcwMDUxODlhYjEuLjk0YTY5ZjEwNWY3YyAxMDA2 NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuaAorKysgYi9hcmNoL3Bvd2VycGMv a3ZtL2Jvb2szc19odi5oCkBAIC0zLDYgKzMsOCBAQAogLyoKICAqIFByaXZpbGVnZWQgKG5vbi1o eXBlcnZpc29yKSBob3N0IHJlZ2lzdGVycyB0byBzYXZlLgogICovCisjaW5jbHVkZSAiYXNtL2d1 ZXN0LXN0YXRlLWJ1ZmZlci5oIgorCiBzdHJ1Y3QgcDlfaG9zdF9vc19zcHJzIHsKIAl1bnNpZ25l ZCBsb25nIGlhbXI7CiAJdW5zaWduZWQgbG9uZyBhbXI7CkBAIC01MSw2MSArNTMsNjYgQEAgdm9p ZCBhY2N1bXVsYXRlX3RpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtaHZfdGJf YWNjdW11bGF0b3IgKm5leHQpOwogI2RlZmluZSBlbmRfdGltaW5nKHZjcHUpIGRvIHt9IHdoaWxl ICgwKQogI2VuZGlmCiAKLSNkZWZpbmUgSFZfV1JBUFBFUl9TRVQocmVnLCBzaXplKQkJCQkJXAor I2RlZmluZSBIVl9XUkFQUEVSX1NFVChyZWcsIHNpemUsIGlkZW4pCQkJCQlcCiBzdGF0aWMgaW5s aW5lIHZvaWQga3ZtcHBjX3NldF8jI3JlZyAjI19odihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUj I3NpemUgdmFsKQlcCiB7CQkJCQkJCQkJXAogCXZjcHUtPmFyY2gucmVnID0gdmFsOwkJCQkJCVwK Kwlrdm1odl9wYXByX21hcmtfZGlydHkodmNwdSwgaWRlbik7CQkJCVwKIH0KIAotI2RlZmluZSBI Vl9XUkFQUEVSX0dFVChyZWcsIHNpemUpCQkJCQlcCisjZGVmaW5lIEhWX1dSQVBQRVJfR0VUKHJl Zywgc2l6ZSwgaWRlbikJCQkJCVwKIHN0YXRpYyBpbmxpbmUgdSMjc2l6ZSBrdm1wcGNfZ2V0XyMj cmVnICMjX2h2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkJXAogewkJCQkJCQkJCVwKKwlrdm1odl9w YXByX2NhY2hlZF9yZWxvYWQodmNwdSwgaWRlbik7CQkJCVwKIAlyZXR1cm4gdmNwdS0+YXJjaC5y ZWc7CQkJCQkJXAogfQogCi0jZGVmaW5lIEhWX1dSQVBQRVIocmVnLCBzaXplKQkJCQkJCVwKLQlI Vl9XUkFQUEVSX1NFVChyZWcsIHNpemUpCQkJCQlcCi0JSFZfV1JBUFBFUl9HRVQocmVnLCBzaXpl KQkJCQkJXAorI2RlZmluZSBIVl9XUkFQUEVSKHJlZywgc2l6ZSwgaWRlbikJCQkJCVwKKwlIVl9X UkFQUEVSX1NFVChyZWcsIHNpemUsIGlkZW4pCQkJCQlcCisJSFZfV1JBUFBFUl9HRVQocmVnLCBz aXplLCBpZGVuKQkJCQkJXAogCi0jZGVmaW5lIEhWX0FSUkFZX1dSQVBQRVJfU0VUKHJlZywgc2l6 ZSkJCQkJCVwKKyNkZWZpbmUgSFZfQVJSQVlfV1JBUFBFUl9TRVQocmVnLCBzaXplLCBpZGVuKQkJ CQlcCiBzdGF0aWMgaW5saW5lIHZvaWQga3ZtcHBjX3NldF8jI3JlZyAjI19odihzdHJ1Y3Qga3Zt X3ZjcHUgKnZjcHUsIGludCBpLCB1IyNzaXplIHZhbCkJXAogewkJCQkJCQkJCVwKIAl2Y3B1LT5h cmNoLnJlZ1tpXSA9IHZhbDsJCQkJCVwKKwlrdm1odl9wYXByX21hcmtfZGlydHkodmNwdSwgaWRl biArIGkpOwkJCQlcCiB9CiAKLSNkZWZpbmUgSFZfQVJSQVlfV1JBUFBFUl9HRVQocmVnLCBzaXpl KQkJCQkJXAorI2RlZmluZSBIVl9BUlJBWV9XUkFQUEVSX0dFVChyZWcsIHNpemUsIGlkZW4pCQkJ CVwKIHN0YXRpYyBpbmxpbmUgdSMjc2l6ZSBrdm1wcGNfZ2V0XyMjcmVnICMjX2h2KHN0cnVjdCBr dm1fdmNwdSAqdmNwdSwgaW50IGkpCVwKIHsJCQkJCQkJCQlcCisJa3ZtaHZfcGFwcl9jYWNoZWRf cmVsb2FkKHZjcHUsIGlkZW4gKyBpKTsJCQlcCiAJcmV0dXJuIHZjcHUtPmFyY2gucmVnW2ldOwkJ CQkJXAogfQogCi0jZGVmaW5lIEhWX0FSUkFZX1dSQVBQRVIocmVnLCBzaXplKQkJCQkJXAotCUhW X0FSUkFZX1dSQVBQRVJfU0VUKHJlZywgc2l6ZSkJCQkJCVwKLQlIVl9BUlJBWV9XUkFQUEVSX0dF VChyZWcsIHNpemUpCQkJCQlcCisjZGVmaW5lIEhWX0FSUkFZX1dSQVBQRVIocmVnLCBzaXplLCBp ZGVuKQkJCQlcCisJSFZfQVJSQVlfV1JBUFBFUl9TRVQocmVnLCBzaXplLCBpZGVuKQkJCQlcCisJ SFZfQVJSQVlfV1JBUFBFUl9HRVQocmVnLCBzaXplLCBpZGVuKQkJCQlcCiAKLUhWX1dSQVBQRVIo bW1jcmEsIDY0KQotSFZfV1JBUFBFUihoZnNjciwgNjQpCi1IVl9XUkFQUEVSKGZzY3IsIDY0KQot SFZfV1JBUFBFUihkc2NyLCA2NCkKLUhWX1dSQVBQRVIocHVyciwgNjQpCi1IVl9XUkFQUEVSKHNw dXJyLCA2NCkKLUhWX1dSQVBQRVIoYW1yLCA2NCkKLUhWX1dSQVBQRVIodWFtb3IsIDY0KQotSFZf V1JBUFBFUihzaWFyLCA2NCkKLUhWX1dSQVBQRVIoc2RhciwgNjQpCi1IVl9XUkFQUEVSKGlhbXIs IDY0KQotSFZfV1JBUFBFUihkYXdyMCwgNjQpCi1IVl9XUkFQUEVSKGRhd3IxLCA2NCkKLUhWX1dS QVBQRVIoZGF3cngwLCA2NCkKLUhWX1dSQVBQRVIoZGF3cngxLCA2NCkKLUhWX1dSQVBQRVIoY2lh YnIsIDY0KQotSFZfV1JBUFBFUih3b3J0LCA2NCkKLUhWX1dSQVBQRVIocHByLCA2NCkKLUhWX1dS QVBQRVIoY3RybCwgNjQpCitIVl9XUkFQUEVSKG1tY3JhLCA2NCwgR1NJRF9NTUNSQSkKK0hWX1dS QVBQRVIoaGZzY3IsIDY0LCBHU0lEX0hGU0NSKQorSFZfV1JBUFBFUihmc2NyLCA2NCwgR1NJRF9G U0NSKQorSFZfV1JBUFBFUihkc2NyLCA2NCwgR1NJRF9EU0NSKQorSFZfV1JBUFBFUihwdXJyLCA2 NCwgR1NJRF9QVVJSKQorSFZfV1JBUFBFUihzcHVyciwgNjQsIEdTSURfU1BVUlIpCitIVl9XUkFQ UEVSKGFtciwgNjQsIEdTSURfQU1SKQorSFZfV1JBUFBFUih1YW1vciwgNjQsIEdTSURfVUFNT1Ip CitIVl9XUkFQUEVSKHNpYXIsIDY0LCBHU0lEX1NJQVIpCitIVl9XUkFQUEVSKHNkYXIsIDY0LCBH U0lEX1NEQVIpCitIVl9XUkFQUEVSKGlhbXIsIDY0LCBHU0lEX0lBTVIpCitIVl9XUkFQUEVSKGRh d3IwLCA2NCwgR1NJRF9EQVdSMCkKK0hWX1dSQVBQRVIoZGF3cjEsIDY0LCBHU0lEX0RBV1IxKQor SFZfV1JBUFBFUihkYXdyeDAsIDY0LCBHU0lEX0RBV1JYMCkKK0hWX1dSQVBQRVIoZGF3cngxLCA2 NCwgR1NJRF9EQVdSWDEpCitIVl9XUkFQUEVSKGNpYWJyLCA2NCwgR1NJRF9DSUFCUikKK0hWX1dS QVBQRVIod29ydCwgNjQsIEdTSURfV09SVCkKK0hWX1dSQVBQRVIocHByLCA2NCwgR1NJRF9QUFIp CitIVl9XUkFQUEVSKGN0cmwsIDY0LCBHU0lEX0NUUkwpOworSFZfV1JBUFBFUihhbW9yLCA2NCwg R1NJRF9BTU9SKQogCi1IVl9BUlJBWV9XUkFQUEVSKG1tY3IsIDY0KQotSFZfQVJSQVlfV1JBUFBF UihzaWVyLCA2NCkKLUhWX0FSUkFZX1dSQVBQRVIocG1jLCAzMikKK0hWX0FSUkFZX1dSQVBQRVIo bW1jciwgNjQsIEdTSURfTU1DUjApCitIVl9BUlJBWV9XUkFQUEVSKHNpZXIsIDY0LCBHU0lEX1NJ RVIpCitIVl9BUlJBWV9XUkFQUEVSKHBtYywgMzIsIEdTSURfUE1DMSkKIAotSFZfV1JBUFBFUihw dnIsIDMyKQotSFZfV1JBUFBFUihwc3BiLCAzMikKK0hWX1dSQVBQRVIocHZyLCAzMiwgR1NJRF9M T0dJQ0FMX1BWUikKK0hWX1dSQVBQRVIocHNwYiwgMzIsIEdTSURfUFNQQikKZGlmZiAtLWdpdCBh L2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jIGIvYXJjaC9wb3dlcnBjL2t2bS9i b29rM3NfaHZfbmVzdGVkLmMKaW5kZXggNWE2NGExMzQxZTZmLi43NzM2ZWMxODI3OGMgMTAwNjQ0 Ci0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jCisrKyBiL2FyY2gvcG93 ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jCkBAIC00MjgsMTAgKzQyOCwxMiBAQCBsb25nIGt2 bWh2X2VudGVyX25lc3RlZF9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJcmV0dXJuIHZj cHUtPmFyY2gudHJhcDsKIH0KIAorc3RhdGljIHVuc2lnbmVkIGxvbmcgbmVzdGVkX2NhcGFiaWxp dGllczsKKwogbG9uZyBrdm1odl9uZXN0ZWRfaW5pdCh2b2lkKQogewogCWxvbmcgaW50IHB0Yl9v cmRlcjsKLQl1bnNpZ25lZCBsb25nIHB0Y3I7CisJdW5zaWduZWQgbG9uZyBwdGNyLCBob3N0X2Nh cGFiaWxpdGllczsKIAlsb25nIHJjOwogCiAJaWYgKCFrdm1odl9vbl9wc2VyaWVzKCkpCkBAIC00 MzksNiArNDQxLDIzIEBAIGxvbmcga3ZtaHZfbmVzdGVkX2luaXQodm9pZCkKIAlpZiAoIXJhZGl4 X2VuYWJsZWQoKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKKwlyYyA9IHBscGFyX2d1ZXN0X2dldF9j YXBhYmlsaXRpZXMoMCwgJmhvc3RfY2FwYWJpbGl0aWVzKTsKKwlpZiAocmMgPSBIX1NVQ0NFU1Mp IHsKKwkJdW5zaWduZWQgbG9uZyBjYXBhYmlsaXRpZXM7CisKKwkJY2FwYWJpbGl0aWVzID0gSF9H VUVTVF9DQVBfUE9XRVI5IHwgSF9HVUVTVF9DQVBfUE9XRVIxMDsKKworCQluZXN0ZWRfY2FwYWJp bGl0aWVzID0gY2FwYWJpbGl0aWVzICYgaG9zdF9jYXBhYmlsaXRpZXM7CisJCXJjID0gcGxwYXJf Z3Vlc3Rfc2V0X2NhcGFiaWxpdGllcygwLCBuZXN0ZWRfY2FwYWJpbGl0aWVzKTsKKwkJaWYgKHJj ICE9IEhfU1VDQ0VTUykgeworCQkJcHJfZXJyKCJrdm0taHY6IENvdWxkIG5vdCBzZXQgcGFyZW50 IGh5cGVydmlzb3IgY2FwYWJpbGl0aWVzIChyYz0lbGQpXG4iLCByYyk7CisJCQlyZXR1cm4gLUVO T0RFVjsKKwkJfQorCisJCV9fa3ZtaHZfb25fcGFwciA9IHRydWU7CisJCXJldHVybiAwOworCX0K KwogCS8qIFBhcnRpdGlvbiB0YWJsZSBlbnRyeSBpcyAxPDw0IGJ5dGVzIGluIHNpemUsIGhlbmNl IHRoZSA0LiAqLwogCXB0Yl9vcmRlciA9IEtWTV9NQVhfTkVTVEVEX0dVRVNUU19TSElGVCArIDQ7 CiAJLyogTWluaW11bSBwYXJ0aXRpb24gdGFibGUgc2l6ZSBpcyAxPDwxMiBieXRlcyAqLwpAQCAt NTA3LDEwICs1MjYsMTUgQEAgdm9pZCBrdm1odl9zZXRfcHRibF9lbnRyeSh1bnNpZ25lZCBpbnQg bHBpZCwgdTY0IGR3MCwgdTY0IGR3MSkKIAkJcmV0dXJuOwogCX0KIAotCXBzZXJpZXNfcGFydGl0 aW9uX3RiW2xwaWRdLnBhdGIwID0gY3B1X3RvX2JlNjQoZHcwKTsKLQlwc2VyaWVzX3BhcnRpdGlv bl90YltscGlkXS5wYXRiMSA9IGNwdV90b19iZTY0KGR3MSk7Ci0JLyogTDAgd2lsbCBkbyB0aGUg bmVjZXNzYXJ5IGJhcnJpZXJzICovCi0Ja3ZtaHZfZmx1c2hfbHBpZChscGlkKTsKKwlpZiAoIWt2 bWh2X29uX3BhcHIoKSkgeworCQlwc2VyaWVzX3BhcnRpdGlvbl90YltscGlkXS5wYXRiMCA9IGNw dV90b19iZTY0KGR3MCk7CisJCXBzZXJpZXNfcGFydGl0aW9uX3RiW2xwaWRdLnBhdGIxID0gY3B1 X3RvX2JlNjQoZHcxKTsKKwkJLyogTDAgd2lsbCBkbyB0aGUgbmVjZXNzYXJ5IGJhcnJpZXJzICov CisJCWt2bWh2X2ZsdXNoX2xwaWQobHBpZCk7CisJfQorCisJaWYgKGt2bWh2X29uX3BhcHIoKSkK KwkJa3ZtaHZfcGFwcl9zZXRfcHRibF9lbnRyeShscGlkLCBkdzAsIGR3MSk7CiB9CiAKIHN0YXRp YyB2b2lkIGt2bWh2X3NldF9uZXN0ZWRfcHRibChzdHJ1Y3Qga3ZtX25lc3RlZF9ndWVzdCAqZ3Ap CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9wYXByLmMgYi9hcmNoL3Bv d2VycGMva3ZtL2Jvb2szc19odl9wYXByLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAwLi5kMDU2OWU3ODRkY2QKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMv a3ZtL2Jvb2szc19odl9wYXByLmMKQEAgLTAsMCArMSw5NDcgQEAKKy8vIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKKy8qCisgKiBDb3B5cmlnaHQgMjAyMyBKb3JkYW4gTmll dGhlLCBJQk0gQ29ycC4gPGpuaWV0aGU1QGdtYWlsLmNvbT4KKyAqCisgKiBBdXRob3JzOgorICog ICAgSm9yZGFuIE5pZXRoZSA8am5pZXRoZTVAZ21haWwuY29tPgorICoKKyAqIERlc2NyaXB0aW9u OiBLVk0gZnVuY3Rpb25zIHNwZWNpZmljIHRvIHJ1bm5pbmcgb24gQm9vayAzUworICogcHJvY2Vz c29ycyBhcyBhIFBBUFIgZ3Vlc3QuCisgKgorICovCisKKyNpbmNsdWRlICJsaW51eC9ibGstbXEu aCIKKyNpbmNsdWRlICJsaW51eC9jb25zb2xlLmgiCisjaW5jbHVkZSAibGludXgvZ2ZwX3R5cGVz LmgiCisjaW5jbHVkZSAibGludXgvc2lnbmFsLmgiCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+ CisjaW5jbHVkZSA8bGludXgva3ZtX2hvc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9wZ3RhYmxlLmg+ CisKKyNpbmNsdWRlIDxhc20va3ZtX3BwYy5oPgorI2luY2x1ZGUgPGFzbS9rdm1fYm9vazNzLmg+ CisjaW5jbHVkZSA8YXNtL2h2Y2FsbC5oPgorI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CisjaW5j bHVkZSA8YXNtL3JlZy5oPgorI2luY2x1ZGUgPGFzbS9wbHBhcl93cmFwcGVycy5oPgorI2luY2x1 ZGUgPGFzbS9ndWVzdC1zdGF0ZS1idWZmZXIuaD4KKyNpbmNsdWRlICJ0cmFjZV9odi5oIgorCiti b29sIF9fa3ZtaHZfb25fcGFwciBfX3JlYWRfbW9zdGx5OworRVhQT1JUX1NZTUJPTF9HUEwoX19r dm1odl9vbl9wYXByKTsKKworCitzdGF0aWMgc2l6ZV90IGdzX21zZ19vcHNfa3ZtaHZfcGFwcl9j b25maWdfZ2V0X3NpemUoc3RydWN0IGdzX21zZyAqZ3NtKQoreworCXUxNiBpZHNbXSA9IHsKKwkJ R1NJRF9SVU5fT1VUUFVUX01JTl9TSVpFLAorCQlHU0lEX1JVTl9JTlBVVCwKKwkJR1NJRF9SVU5f T1VUUFVULAorCisJfTsKKwlzaXplX3Qgc2l6ZSA9IDA7CisKKwlmb3IgKGludCBpID0gMDsgaSA8 IEFSUkFZX1NJWkUoaWRzKTsgaSsrKQorCQlzaXplICs9IGdzZV90b3RhbF9zaXplKGdzaWRfc2l6 ZShpZHNbaV0pKTsKKwlyZXR1cm4gc2l6ZTsKK30KKworc3RhdGljIGludCBnc19tc2dfb3BzX2t2 bWh2X3BhcHJfY29uZmlnX2ZpbGxfaW5mbyhzdHJ1Y3QgZ3NfYnVmZiAqZ3NiLAorCQkJCQkJICBz dHJ1Y3QgZ3NfbXNnICpnc20pCit7CisJc3RydWN0IGt2bWh2X3BhcHJfY29uZmlnICpjZmc7CisJ aW50IHJjOworCisJY2ZnID0gZ3NtLT5kYXRhOworCisJaWYgKGdzbV9pbmNsdWRlcyhnc20sIEdT SURfUlVOX09VVFBVVF9NSU5fU0laRSkpIHsKKwkJcmMgPSBnc2VfcHV0KGdzYiwgR1NJRF9SVU5f T1VUUFVUX01JTl9TSVpFLAorCQkJICAgICBjZmctPnZjcHVfcnVuX291dHB1dF9zaXplKTsKKwkJ aWYgKHJjIDwgMCkKKwkJCXJldHVybiByYzsKKwl9CisKKwlpZiAoZ3NtX2luY2x1ZGVzKGdzbSwg R1NJRF9SVU5fSU5QVVQpKSB7CisJCXJjID0gZ3NlX3B1dChnc2IsIEdTSURfUlVOX0lOUFVULCBj ZmctPnZjcHVfcnVuX2lucHV0X2NmZyk7CisJCWlmIChyYyA8IDApCisJCQlyZXR1cm4gcmM7CisJ fQorCisJaWYgKGdzbV9pbmNsdWRlcyhnc20sIEdTSURfUlVOX09VVFBVVCkpIHsKKwkJZ3NlX3B1 dChnc2IsIEdTSURfUlVOX09VVFBVVCwgY2ZnLT52Y3B1X3J1bl9vdXRwdXRfY2ZnKTsKKwkJaWYg KHJjIDwgMCkKKwkJCXJldHVybiByYzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlu dCBnc19tc2dfb3BzX2t2bWh2X3BhcHJfY29uZmlnX3JlZnJlc2hfaW5mbyhzdHJ1Y3QgZ3NfbXNn ICpnc20sCisJCQkJCQkgICAgIHN0cnVjdCBnc19idWZmICpnc2IpCit7CisJc3RydWN0IGt2bWh2 X3BhcHJfY29uZmlnICpjZmc7CisJc3RydWN0IGdzX3BhcnNlciBnc3AgPSB7IDAgfTsKKwlzdHJ1 Y3QgZ3NfZWxlbSAqZ3NlOworCWludCByYzsKKworCWNmZyA9IGdzbS0+ZGF0YTsKKworCXJjID0g Z3NlX3BhcnNlKCZnc3AsIGdzYik7CisJaWYgKHJjIDwgMCkKKwkJcmV0dXJuIHJjOworCisJZ3Nl ID0gZ3NwX2xvb2t1cCgmZ3NwLCBHU0lEX1JVTl9PVVRQVVRfTUlOX1NJWkUpOworCWlmIChnc2Up CisJCWdzZV9nZXQoZ3NlLCAmY2ZnLT52Y3B1X3J1bl9vdXRwdXRfc2l6ZSk7CisJcmV0dXJuIDA7 Cit9CisKK3N0cnVjdCBnc19tc2dfb3BzIGNvbmZpZ19tc2dfb3BzID0geworCS5nZXRfc2l6ZSA9 IGdzX21zZ19vcHNfa3ZtaHZfcGFwcl9jb25maWdfZ2V0X3NpemUsCisJLmZpbGxfaW5mbyA9IGdz X21zZ19vcHNfa3ZtaHZfcGFwcl9jb25maWdfZmlsbF9pbmZvLAorCS5yZWZyZXNoX2luZm8gPSBn c19tc2dfb3BzX2t2bWh2X3BhcHJfY29uZmlnX3JlZnJlc2hfaW5mbywKK307CisKK3N0YXRpYyBz aXplX3QgZ3NfbXNnX29wc192Y3B1X2dldF9zaXplKHN0cnVjdCBnc19tc2cgKmdzbSkKK3sKKwlz dHJ1Y3QgZ3NfYml0bWFwIGdzYm0gPSB7IDAgfTsKKwlzaXplX3Qgc2l6ZSA9IDA7CisJdTE2IGlk ZW47CisKKwlnc2JtX2ZpbGwoJmdzYm0pOworCWdzYm1fZm9yX2VhY2goJmdzYm0sIGlkZW4pIHsK KwkJc3dpdGNoIChpZGVuKSB7CisJCWNhc2UgR1NJRF9IT1NUX1NUQVRFX1NJWkU6CisJCWNhc2Ug R1NJRF9SVU5fT1VUUFVUX01JTl9TSVpFOgorCQljYXNlIEdTSURfUEFSVElUSU9OX1RBQkxFOgor CQljYXNlIEdTSURfUFJPQ0VTU19UQUJMRToKKwkJY2FzZSBHU0lEX1JVTl9JTlBVVDoKKwkJY2Fz ZSBHU0lEX1JVTl9PVVRQVVQ6CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXNpemUgKz0gZ3Nl X3RvdGFsX3NpemUoZ3NpZF9zaXplKGlkZW4pKTsKKwkJfQorCX0KKwlyZXR1cm4gc2l6ZTsKK30K Kworc3RhdGljIGludCBnc19tc2dfb3BzX3ZjcHVfZmlsbF9pbmZvKHN0cnVjdCBnc19idWZmICpn c2IsIHN0cnVjdCBnc19tc2cgKmdzbSkKK3sKKwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7CisJdmVj dG9yMTI4IHY7CisJaW50IHJjLCBpOworCXUxNiBpZGVuOworCisJdmNwdSA9IGdzbS0+ZGF0YTsK KworCWdzbV9mb3JfZWFjaChnc20sIGlkZW4pCisJeworCQlyYyA9IDA7CisKKwkJaWYgKChnc20t PmZsYWdzICYgR1NfRkxBR1NfV0lERSkgISsJCSAgICAoZ3NpZF9mbGFncyhpZGVuKSAmIEdTX0ZM QUdTX1dJREUpKQorCQkJY29udGludWU7CisKKwkJc3dpdGNoIChpZGVuKSB7CisJCWNhc2UgR1NJ RF9EU0NSOgorCQkJcmMgPSBnc2VfcHV0KGdzYiwgaWRlbiwgdmNwdS0+YXJjaC5kc2NyKTsKKwkJ CWJyZWFrOworCQljYXNlIEdTSURfTU1DUkE6CisJCQlyYyA9IGdzZV9wdXQoZ3NiLCBpZGVuLCB2 Y3B1LT5hcmNoLm1tY3JhKTsKKwkJCWJyZWFrOworCQljYXNlIEdTSURfSEZTQ1I6CisJCQlyYyA9 IGdzZV9wdXQoZ3NiLCBpZGVuLCB2Y3B1LT5hcmNoLmhmc2NyKTsKKwkJCWJyZWFrOworCQljYXNl IEdTSURfUFVSUjoKKwkJCXJjID0gZ3NlX3B1dChnc2IsIGlkZW4sIHZjcHUtPmFyY2gucHVycik7 CisJCQlicmVhazsKKwkJY2FzZSBHU0lEX1NQVVJSOgorCQkJcmMgPSBnc2VfcHV0KGdzYiwgaWRl biwgdmNwdS0+YXJjaC5zcHVycik7CisJCQlicmVhazsKKwkJY2FzZSBHU0lEX0FNUjoKKwkJCXJj ID0gZ3NlX3B1dChnc2IsIGlkZW4sIHZjcHUtPmFyY2guYW1yKTsKKwkJCWJyZWFrOworCQljYXNl IEdTSURfVUFNT1I6CisJCQlyYyA9IGdzZV9wdXQoZ3NiLCBpZGVuLCB2Y3B1LT5hcmNoLnVhbW9y KTsKKwkJCWJyZWFrOworCQljYXNlIEdTSURfU0lBUjoKKwkJCXJjID0gZ3NlX3B1dChnc2IsIGlk ZW4sIHZjcHUtPmFyY2guc2lhcik7CisJCQlicmVhazsKKwkJY2FzZSBHU0lEX1NEQVI6CisJCQly YyA9IGdzZV9wdXQoZ3NiLCBpZGVuLCB2Y3B1LT5hcmNoLnNkYXIpOworCQkJYnJlYWs7CisJCWNh c2UgR1NJRF9JQU1SOgorCQkJcmMgPSBnc2VfcHV0KGdzYiwgaWRlbiwgdmNwdS0+YXJjaC5pYW1y KTsKKwkJCWJyZWFrOworCQljYXNlIEdTSURfREFXUjA6CisJCQlyYyA9IGdzZV9wdXQoZ3NiLCBp ZGVuLCB2Y3B1LT5hcmNoLmRhd3IwKTsKKwkJCWJyZWFrOworCQljYXNlIEdTSURfREFXUjE6CisJ CQlyYyA9IGdzZV9wdXQoZ3NiLCBpZGVuLCB2Y3B1LT5hcmNoLmRhd3IxKTsKKwkJCWJyZWFrOwor CQljYXNlIEdTSURfREFXUlgwOgorCQkJcmMgPSBnc2VfcHV0KGdzYiwgaWRlbiwgdmNwdS0+YXJj aC5kYXdyeDApOworCQkJYnJlYWs7CisJCWNhc2UgR1NJRF9EQVdSWDE6CisJCQlyYyA9IGdzZV9w dXQoZ3NiLCBpZGVuLCB2Y3B1LT5hcmNoLmRhd3J4MSk7CisJCQlicmVhazsKKwkJY2FzZSBHU0lE X0NJQUJSOgorCQkJcmMgPSBnc2VfcHV0KGdzYiwgaWRlbiwgdmNwdS0+YXJjaC5jaWFicik7CisJ CQlicmVhazsKKwkJY2FzZSBHU0lEX1dPUlQ6CisJCQlyYyA9IGdzZV9wdXQoZ3NiLCBpZGVuLCB2 Y3B1LT5hcmNoLndvcnQpOworCQkJYnJlYWs7CisJCWNhc2UgR1NJRF9QUFI6CisJCQlyYyA9IGdz ZV9wdXQoZ3NiLCBpZGVuLCB2Y3B1LT5hcmNoLnBwcik7CisJCQlicmVhazsKKwkJY2FzZSBHU0lE X1BTUEI6CisJCQlyYyA9IGdzZV9wdXQoZ3NiLCBpZGVuLCB2Y3B1LT5hcmNoLnBzcGIpOworCQkJ YnJlYWs7CisJCWNhc2UgR1NJRF9UQVI6CisJCQlyYyA9IGdzZV9wdXQoZ3NiLCBpZGVuLCB2Y3B1 LT5hcmNoLnRhcik7CisJCQlicmVhazsKKwkJY2FzZSBHU0lEX0ZTQ1I6CisJCQlyYyA9IGdzZV9w dXQoZ3NiLCBpZGVuLCB2Y3B1LT5hcmNoLmZzY3IpOworCQkJYnJlYWs7CisJCWNhc2UgR1NJRF9F QkJIUjoKKwkJCXJjID0gZ3NlX3B1dChnc2IsIGlkZW4sIHZjcHUtPmFyY2guZWJiaHIpOworCQkJ YnJlYWs7CisJCWNhc2UgR1NJRF9FQkJSUjoKKwkJCXJjID0gZ3NlX3B1dChnc2IsIGlkZW4sIHZj cHUtPmFyY2guZWJicnIpOworCQkJYnJlYWs7CisJCWNhc2UgR1NJRF9CRVNDUjoKKwkJCXJjID0g Z3NlX3B1dChnc2IsIGlkZW4sIHZjcHUtPmFyY2guYmVzY3IpOworCQkJYnJlYWs7CisJCWNhc2Ug R1NJRF9JQzoKKwkJCXJjID0gZ3NlX3B1dChnc2IsIGlkZW4sIHZjcHUtPmFyY2guaWMpOworCQkJ YnJlYWs7CisJCWNhc2UgR1NJRF9DVFJMOgorCQkJcmMgPSBnc2VfcHV0KGdzYiwgaWRlbiwgdmNw dS0+YXJjaC5jdHJsKTsKKwkJCWJyZWFrOworCQljYXNlIEdTSURfUElEUjoKKwkJCXJjID0gZ3Nl X3B1dChnc2IsIGlkZW4sIHZjcHUtPmFyY2gucGlkKTsKKwkJCWJyZWFrOworCQljYXNlIEdTSURf QU1PUjoKKwkJCXJjID0gZ3NlX3B1dChnc2IsIGlkZW4sIHZjcHUtPmFyY2guYW1vcik7CisJCQli cmVhazsKKwkJY2FzZSBHU0lEX1ZSU0FWRToKKwkJCXJjID0gZ3NlX3B1dChnc2IsIGlkZW4sIHZj cHUtPmFyY2gudnJzYXZlKTsKKwkJCWJyZWFrOworCQljYXNlIEdTSURfTU1DUjAgLi4uIEdTSURf TU1DUjM6CisJCQlpID0gaWRlbiAtIEdTSURfTU1DUjA7CisJCQlyYyA9IGdzZV9wdXQoZ3NiLCBp ZGVuLCB2Y3B1LT5hcmNoLm1tY3JbaV0pOworCQkJYnJlYWs7CisJCWNhc2UgR1NJRF9TSUVSIC4u LiBHU0lEX1NJRVIzOgorCQkJaSA9IGlkZW4gLSBHU0lEX1NJRVI7CisJCQlyYyA9IGdzZV9wdXQo Z3NiLCBpZGVuLCB2Y3B1LT5hcmNoLnNpZXJbaV0pOworCQkJYnJlYWs7CisJCWNhc2UgR1NJRF9Q TUMxIC4uLiBHU0lEX1BNQzY6CisJCQlpID0gaWRlbiAtIEdTSURfUE1DMTsKKwkJCXJjID0gZ3Nl X3B1dChnc2IsIGlkZW4sIHZjcHUtPmFyY2gucG1jW2ldKTsKKwkJCWJyZWFrOworCQljYXNlIEdT SURfR1BSMCAuLi4gR1NJRF9HUFIzMToKKwkJCWkgPSBpZGVuIC0gR1NJRF9HUFIwOworCQkJcmMg PSBnc2VfcHV0KGdzYiwgaWRlbiwgdmNwdS0+YXJjaC5yZWdzLmdwcltpXSk7CisJCQlicmVhazsK KwkJY2FzZSBHU0lEX0NSOgorCQkJcmMgPSBnc2VfcHV0KGdzYiwgaWRlbiwgdmNwdS0+YXJjaC5y ZWdzLmNjcik7CisJCQlicmVhazsKKwkJY2FzZSBHU0lEX1hFUjoKKwkJCXJjID0gZ3NlX3B1dChn c2IsIGlkZW4sIHZjcHUtPmFyY2gucmVncy54ZXIpOworCQkJYnJlYWs7CisJCWNhc2UgR1NJRF9D VFI6CisJCQlyYyA9IGdzZV9wdXQoZ3NiLCBpZGVuLCB2Y3B1LT5hcmNoLnJlZ3MuY3RyKTsKKwkJ CWJyZWFrOworCQljYXNlIEdTSURfTFI6CisJCQlyYyA9IGdzZV9wdXQoZ3NiLCBpZGVuLCB2Y3B1 LT5hcmNoLnJlZ3MubGluayk7CisJCQlicmVhazsKKwkJY2FzZSBHU0lEX05JQToKKwkJCXJjID0g Z3NlX3B1dChnc2IsIGlkZW4sIHZjcHUtPmFyY2gucmVncy5uaXApOworCQkJYnJlYWs7CisJCWNh c2UgR1NJRF9TUlIwOgorCQkJcmMgPSBnc2VfcHV0KGdzYiwgaWRlbiwgdmNwdS0+YXJjaC5zaHJl Z3Muc3JyMCk7CisJCQlicmVhazsKKwkJY2FzZSBHU0lEX1NSUjE6CisJCQlyYyA9IGdzZV9wdXQo Z3NiLCBpZGVuLCB2Y3B1LT5hcmNoLnNocmVncy5zcnIxKTsKKwkJCWJyZWFrOworCQljYXNlIEdT SURfU1BSRzA6CisJCQlyYyA9IGdzZV9wdXQoZ3NiLCBpZGVuLCB2Y3B1LT5hcmNoLnNocmVncy5z cHJnMCk7CisJCQlicmVhazsKKwkJY2FzZSBHU0lEX1NQUkcxOgorCQkJcmMgPSBnc2VfcHV0KGdz YiwgaWRlbiwgdmNwdS0+YXJjaC5zaHJlZ3Muc3ByZzEpOworCQkJYnJlYWs7CisJCWNhc2UgR1NJ RF9TUFJHMjoKKwkJCXJjID0gZ3NlX3B1dChnc2IsIGlkZW4sIHZjcHUtPmFyY2guc2hyZWdzLnNw cmcyKTsKKwkJCWJyZWFrOworCQljYXNlIEdTSURfU1BSRzM6CisJCQlyYyA9IGdzZV9wdXQoZ3Ni LCBpZGVuLCB2Y3B1LT5hcmNoLnNocmVncy5zcHJnMyk7CisJCQlicmVhazsKKwkJY2FzZSBHU0lE X0RBUjoKKwkJCXJjID0gZ3NlX3B1dChnc2IsIGlkZW4sIHZjcHUtPmFyY2guc2hyZWdzLmRhcik7 CisJCQlicmVhazsKKwkJY2FzZSBHU0lEX0RTSVNSOgorCQkJcmMgPSBnc2VfcHV0KGdzYiwgaWRl biwgdmNwdS0+YXJjaC5zaHJlZ3MuZHNpc3IpOworCQkJYnJlYWs7CisJCWNhc2UgR1NJRF9NU1I6 CisJCQlyYyA9IGdzZV9wdXQoZ3NiLCBpZGVuLCB2Y3B1LT5hcmNoLnNocmVncy5tc3IpOworCQkJ YnJlYWs7CisJCWNhc2UgR1NJRF9WVEI6CisJCQlyYyA9IGdzZV9wdXQoZ3NiLCBpZGVuLCB2Y3B1 LT5hcmNoLnZjb3JlLT52dGIpOworCQkJYnJlYWs7CisJCWNhc2UgR1NJRF9MUENSOgorCQkJcmMg PSBnc2VfcHV0KGdzYiwgaWRlbiwgdmNwdS0+YXJjaC52Y29yZS0+bHBjcik7CisJCQlicmVhazsK KwkJY2FzZSBHU0lEX1RCX09GRlNFVDoKKwkJCXJjID0gZ3NlX3B1dChnc2IsIGlkZW4sIHZjcHUt PmFyY2gudmNvcmUtPnRiX29mZnNldCk7CisJCQlicmVhazsKKwkJY2FzZSBHU0lEX0xPR0lDQUxf UFZSOgorCQkJcmMgPSBnc2VfcHV0KGdzYiwgaWRlbiwgdmNwdS0+YXJjaC5wdnIpOworCQkJYnJl YWs7CisJCWNhc2UgR1NJRF9GUFNDUjoKKwkJCXJjID0gZ3NlX3B1dChnc2IsIGlkZW4sIHZjcHUt PmFyY2guZnAuZnBzY3IpOworCQkJYnJlYWs7CisJCWNhc2UgR1NJRF9WU1JTMCAuLi4gR1NJRF9W U1JTMzE6CisJCQlpID0gaWRlbiAtIEdTSURfVlNSUzA7CisJCQltZW1jcHkoJnYsICZ2Y3B1LT5h cmNoLmZwLmZwcltpXSwKKwkJCSAgICAgICBzaXplb2YodmNwdS0+YXJjaC5mcC5mcHJbaV0pKTsK KwkJCXJjID0gZ3NlX3B1dChnc2IsIGlkZW4sIHYpOworCQkJYnJlYWs7CisjaWZkZWYgQ09ORklH X1ZTWAorCQljYXNlIEdTSURfVlNDUjoKKwkJCXJjID0gZ3NlX3B1dChnc2IsIGlkZW4sIHZjcHUt PmFyY2gudnIudnNjci51WzNdKTsKKwkJCWJyZWFrOworCQljYXNlIEdTSURfVlNSUzMyIC4uLiBH U0lEX1ZTUlM2MzoKKwkJCWkgPSBpZGVuIC0gR1NJRF9WU1JTMzI7CisJCQlyYyA9IGdzZV9wdXQo Z3NiLCBpZGVuLCB2Y3B1LT5hcmNoLnZyLnZyW2ldKTsKKwkJCWJyZWFrOworI2VuZGlmCisJCWNh c2UgR1NJRF9ERUNfRVhQSVJZX1RCOgorCQkJdTY0IGR3OworCisJCQlkdyA9IHZjcHUtPmFyY2gu ZGVjX2V4cGlyZXMgLQorCQkJICAgICB2Y3B1LT5hcmNoLnZjb3JlLT50Yl9vZmZzZXQ7CisJCQly YyA9IGdzZV9wdXQoZ3NiLCBpZGVuLCBkdyk7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChyYyA8 IDApCisJCQlyZXR1cm4gcmM7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ3Nf bXNnX29wc192Y3B1X3JlZnJlc2hfaW5mbyhzdHJ1Y3QgZ3NfbXNnICpnc20sIHN0cnVjdCBnc19i dWZmICpnc2IpCit7CisJc3RydWN0IGdzX3BhcnNlciBnc3AgPSB7IDAgfTsKKwlzdHJ1Y3Qga3Zt aHZfcGFwcl9ob3N0ICpwaDsKKwlzdHJ1Y3QgZ3NfYml0bWFwICp2YWxpZHM7CisJc3RydWN0IGt2 bV92Y3B1ICp2Y3B1OworCXN0cnVjdCBnc19lbGVtICpnc2U7CisJdmVjdG9yMTI4IHY7CisJaW50 IHJjLCBpOworCXUxNiBpZGVuOworCisJdmNwdSA9IGdzbS0+ZGF0YTsKKworCXJjID0gZ3NlX3Bh cnNlKCZnc3AsIGdzYik7CisJaWYgKHJjIDwgMCkKKwkJcmV0dXJuIHJjOworCisJcGggPSAmdmNw dS0+YXJjaC5wYXByX2hvc3Q7CisJdmFsaWRzID0gJnBoLT52YWxpZHM7CisKKwlnc3BfZm9yX2Vh Y2goJmdzcCwgaWRlbiwgZ3NlKQorCXsKKwkJc3dpdGNoIChpZGVuKSB7CisJCWNhc2UgR1NJRF9E U0NSOgorCQkJZ3NlX2dldChnc2UsICZ2Y3B1LT5hcmNoLmRzY3IpOworCQkJYnJlYWs7CisJCWNh c2UgR1NJRF9NTUNSQToKKwkJCWdzZV9nZXQoZ3NlLCAmdmNwdS0+YXJjaC5tbWNyYSk7CisJCQli cmVhazsKKwkJY2FzZSBHU0lEX0hGU0NSOgorCQkJZ3NlX2dldChnc2UsICZ2Y3B1LT5hcmNoLmhm c2NyKTsKKwkJCWJyZWFrOworCQljYXNlIEdTSURfUFVSUjoKKwkJCWdzZV9nZXQoZ3NlLCAmdmNw dS0+YXJjaC5wdXJyKTsKKwkJCWJyZWFrOworCQljYXNlIEdTSURfU1BVUlI6CisJCQlnc2VfZ2V0 KGdzZSwgJnZjcHUtPmFyY2guc3B1cnIpOworCQkJYnJlYWs7CisJCWNhc2UgR1NJRF9BTVI6CisJ CQlnc2VfZ2V0KGdzZSwgJnZjcHUtPmFyY2guYW1yKTsKKwkJCWJyZWFrOworCQljYXNlIEdTSURf VUFNT1I6CisJCQlnc2VfZ2V0KGdzZSwgJnZjcHUtPmFyY2gudWFtb3IpOworCQkJYnJlYWs7CisJ CWNhc2UgR1NJRF9TSUFSOgorCQkJZ3NlX2dldChnc2UsICZ2Y3B1LT5hcmNoLnNpYXIpOworCQkJ YnJlYWs7CisJCWNhc2UgR1NJRF9TREFSOgorCQkJZ3NlX2dldChnc2UsICZ2Y3B1LT5hcmNoLnNk YXIpOworCQkJYnJlYWs7CisJCWNhc2UgR1NJRF9JQU1SOgorCQkJZ3NlX2dldChnc2UsICZ2Y3B1 LT5hcmNoLmlhbXIpOworCQkJYnJlYWs7CisJCWNhc2UgR1NJRF9EQVdSMDoKKwkJCWdzZV9nZXQo Z3NlLCAmdmNwdS0+YXJjaC5kYXdyMCk7CisJCQlicmVhazsKKwkJY2FzZSBHU0lEX0RBV1IxOgor CQkJZ3NlX2dldChnc2UsICZ2Y3B1LT5hcmNoLmRhd3IxKTsKKwkJCWJyZWFrOworCQljYXNlIEdT SURfREFXUlgwOgorCQkJZ3NlX2dldChnc2UsICZ2Y3B1LT5hcmNoLmRhd3J4MCk7CisJCQlicmVh azsKKwkJY2FzZSBHU0lEX0RBV1JYMToKKwkJCWdzZV9nZXQoZ3NlLCAmdmNwdS0+YXJjaC5kYXdy eDEpOworCQkJYnJlYWs7CisJCWNhc2UgR1NJRF9DSUFCUjoKKwkJCWdzZV9nZXQoZ3NlLCAmdmNw dS0+YXJjaC5jaWFicik7CisJCQlicmVhazsKKwkJY2FzZSBHU0lEX1dPUlQ6CisJCQlnc2VfZ2V0 KGdzZSwgJnZjcHUtPmFyY2gud29ydCk7CisJCQlicmVhazsKKwkJY2FzZSBHU0lEX1BQUjoKKwkJ CWdzZV9nZXQoZ3NlLCAmdmNwdS0+YXJjaC5wcHIpOworCQkJYnJlYWs7CisJCWNhc2UgR1NJRF9Q U1BCOgorCQkJZ3NlX2dldChnc2UsICZ2Y3B1LT5hcmNoLnBzcGIpOworCQkJYnJlYWs7CisJCWNh c2UgR1NJRF9UQVI6CisJCQlnc2VfZ2V0KGdzZSwgJnZjcHUtPmFyY2gudGFyKTsKKwkJCWJyZWFr OworCQljYXNlIEdTSURfRlNDUjoKKwkJCWdzZV9nZXQoZ3NlLCAmdmNwdS0+YXJjaC5mc2NyKTsK KwkJCWJyZWFrOworCQljYXNlIEdTSURfRUJCSFI6CisJCQlnc2VfZ2V0KGdzZSwgJnZjcHUtPmFy Y2guZWJiaHIpOworCQkJYnJlYWs7CisJCWNhc2UgR1NJRF9FQkJSUjoKKwkJCWdzZV9nZXQoZ3Nl LCAmdmNwdS0+YXJjaC5lYmJycik7CisJCQlicmVhazsKKwkJY2FzZSBHU0lEX0JFU0NSOgorCQkJ Z3NlX2dldChnc2UsICZ2Y3B1LT5hcmNoLmJlc2NyKTsKKwkJCWJyZWFrOworCQljYXNlIEdTSURf SUM6CisJCQlnc2VfZ2V0KGdzZSwgJnZjcHUtPmFyY2guaWMpOworCQkJYnJlYWs7CisJCWNhc2Ug R1NJRF9DVFJMOgorCQkJZ3NlX2dldChnc2UsICZ2Y3B1LT5hcmNoLmN0cmwpOworCQkJYnJlYWs7 CisJCWNhc2UgR1NJRF9QSURSOgorCQkJZ3NlX2dldChnc2UsICZ2Y3B1LT5hcmNoLnBpZCk7CisJ CQlicmVhazsKKwkJY2FzZSBHU0lEX0FNT1I6CisJCQlnc2VfZ2V0KGdzZSwgJnZjcHUtPmFyY2gu YW1vcik7CisJCQlicmVhazsKKwkJY2FzZSBHU0lEX1ZSU0FWRToKKwkJCWdzZV9nZXQoZ3NlLCAm dmNwdS0+YXJjaC52cnNhdmUpOworCQkJYnJlYWs7CisJCWNhc2UgR1NJRF9NTUNSMCAuLi4gR1NJ RF9NTUNSMzoKKwkJCWkgPSBpZGVuIC0gR1NJRF9NTUNSMDsKKwkJCWdzZV9nZXQoZ3NlLCAmdmNw dS0+YXJjaC5tbWNyW2ldKTsKKwkJCWJyZWFrOworCQljYXNlIEdTSURfU0lFUiAuLi4gR1NJRF9T SUVSMzoKKwkJCWkgPSBpZGVuIC0gR1NJRF9TSUVSOworCQkJZ3NlX2dldChnc2UsICZ2Y3B1LT5h cmNoLnNpZXJbaV0pOworCQkJYnJlYWs7CisJCWNhc2UgR1NJRF9QTUMxIC4uLiBHU0lEX1BNQzY6 CisJCQlpID0gaWRlbiAtIEdTSURfUE1DMTsKKwkJCWdzZV9nZXQoZ3NlLCAmdmNwdS0+YXJjaC5w bWNbaV0pOworCQkJYnJlYWs7CisJCWNhc2UgR1NJRF9HUFIwIC4uLiBHU0lEX0dQUjMxOgorCQkJ aSA9IGlkZW4gLSBHU0lEX0dQUjA7CisJCQlnc2VfZ2V0KGdzZSwgJnZjcHUtPmFyY2gucmVncy5n cHJbaV0pOworCQkJYnJlYWs7CisJCWNhc2UgR1NJRF9DUjoKKwkJCWdzZV9nZXQoZ3NlLCAmdmNw dS0+YXJjaC5yZWdzLmNjcik7CisJCQlicmVhazsKKwkJY2FzZSBHU0lEX1hFUjoKKwkJCWdzZV9n ZXQoZ3NlLCAmdmNwdS0+YXJjaC5yZWdzLnhlcik7CisJCQlicmVhazsKKwkJY2FzZSBHU0lEX0NU UjoKKwkJCWdzZV9nZXQoZ3NlLCAmdmNwdS0+YXJjaC5yZWdzLmN0cik7CisJCQlicmVhazsKKwkJ Y2FzZSBHU0lEX0xSOgorCQkJZ3NlX2dldChnc2UsICZ2Y3B1LT5hcmNoLnJlZ3MubGluayk7CisJ CQlicmVhazsKKwkJY2FzZSBHU0lEX05JQToKKwkJCWdzZV9nZXQoZ3NlLCAmdmNwdS0+YXJjaC5y ZWdzLm5pcCk7CisJCQlicmVhazsKKwkJY2FzZSBHU0lEX1NSUjA6CisJCQlnc2VfZ2V0KGdzZSwg JnZjcHUtPmFyY2guc2hyZWdzLnNycjApOworCQkJYnJlYWs7CisJCWNhc2UgR1NJRF9TUlIxOgor CQkJZ3NlX2dldChnc2UsICZ2Y3B1LT5hcmNoLnNocmVncy5zcnIxKTsKKwkJCWJyZWFrOworCQlj YXNlIEdTSURfU1BSRzA6CisJCQlnc2VfZ2V0KGdzZSwgJnZjcHUtPmFyY2guc2hyZWdzLnNwcmcw KTsKKwkJCWJyZWFrOworCQljYXNlIEdTSURfU1BSRzE6CisJCQlnc2VfZ2V0KGdzZSwgJnZjcHUt PmFyY2guc2hyZWdzLnNwcmcxKTsKKwkJCWJyZWFrOworCQljYXNlIEdTSURfU1BSRzI6CisJCQln c2VfZ2V0KGdzZSwgJnZjcHUtPmFyY2guc2hyZWdzLnNwcmcyKTsKKwkJCWJyZWFrOworCQljYXNl IEdTSURfU1BSRzM6CisJCQlnc2VfZ2V0KGdzZSwgJnZjcHUtPmFyY2guc2hyZWdzLnNwcmczKTsK KwkJCWJyZWFrOworCQljYXNlIEdTSURfREFSOgorCQkJZ3NlX2dldChnc2UsICZ2Y3B1LT5hcmNo LnNocmVncy5kYXIpOworCQkJYnJlYWs7CisJCWNhc2UgR1NJRF9EU0lTUjoKKwkJCWdzZV9nZXQo Z3NlLCAmdmNwdS0+YXJjaC5zaHJlZ3MuZHNpc3IpOworCQkJYnJlYWs7CisJCWNhc2UgR1NJRF9N U1I6CisJCQlnc2VfZ2V0KGdzZSwgJnZjcHUtPmFyY2guc2hyZWdzLm1zcik7CisJCQlicmVhazsK KwkJY2FzZSBHU0lEX1ZUQjoKKwkJCWdzZV9nZXQoZ3NlLCAmdmNwdS0+YXJjaC52Y29yZS0+dnRi KTsKKwkJCWJyZWFrOworCQljYXNlIEdTSURfTFBDUjoKKwkJCWdzZV9nZXQoZ3NlLCAmdmNwdS0+ YXJjaC52Y29yZS0+bHBjcik7CisJCQlicmVhazsKKwkJY2FzZSBHU0lEX1RCX09GRlNFVDoKKwkJ CWdzZV9nZXQoZ3NlLCAmdmNwdS0+YXJjaC52Y29yZS0+dGJfb2Zmc2V0KTsKKwkJCWJyZWFrOwor CQljYXNlIEdTSURfTE9HSUNBTF9QVlI6CisJCQlnc2VfZ2V0KGdzZSwgJnZjcHUtPmFyY2gucHZy KTsKKwkJCWJyZWFrOworCQljYXNlIEdTSURfRlBTQ1I6CisJCQlnc2VfZ2V0KGdzZSwgJnZjcHUt PmFyY2guZnAuZnBzY3IpOworCQkJYnJlYWs7CisJCWNhc2UgR1NJRF9WU1JTMCAuLi4gR1NJRF9W U1JTMzE6CisJCQlnc2VfZ2V0KGdzZSwgJnYpOworCQkJaSA9IGlkZW4gLSBHU0lEX1ZTUlMwOwor CQkJbWVtY3B5KCZ2Y3B1LT5hcmNoLmZwLmZwcltpXSwgJnYsCisJCQkgICAgICAgc2l6ZW9mKHZj cHUtPmFyY2guZnAuZnByW2ldKSk7CisJCQlicmVhazsKKyNpZmRlZiBDT05GSUdfVlNYCisJCWNh c2UgR1NJRF9WU0NSOgorCQkJZ3NlX2dldChnc2UsICZ2Y3B1LT5hcmNoLnZyLnZzY3IudVszXSk7 CisJCQlicmVhazsKKwkJY2FzZSBHU0lEX1ZTUlMzMiAuLi4gR1NJRF9WU1JTNjM6CisJCQlpID0g aWRlbiAtIEdTSURfVlNSUzMyOworCQkJZ3NlX2dldChnc2UsICZ2Y3B1LT5hcmNoLnZyLnZyW2ld KTsKKwkJCWJyZWFrOworI2VuZGlmCisJCWNhc2UgR1NJRF9IREFSOgorCQkJZ3NlX2dldChnc2Us ICZ2Y3B1LT5hcmNoLmZhdWx0X2Rhcik7CisJCQlicmVhazsKKwkJY2FzZSBHU0lEX0hEU0lTUjoK KwkJCWdzZV9nZXQoZ3NlLCAmdmNwdS0+YXJjaC5mYXVsdF9kc2lzcik7CisJCQlicmVhazsKKwkJ Y2FzZSBHU0lEX0FTRFI6CisJCQlnc2VfZ2V0KGdzZSwgJnZjcHUtPmFyY2guZmF1bHRfZ3BhKTsK KwkJCWJyZWFrOworCQljYXNlIEdTSURfSEVJUjoKKwkJCXUzMiBpbnN0OworCisJCQlnc2VfZ2V0 KGdzZSwgJmluc3QpOworCQkJdmNwdS0+YXJjaC5lbXVsX2luc3QgPSBpbnN0OworCQkJYnJlYWs7 CisJCWNhc2UgR1NJRF9ERUNfRVhQSVJZX1RCOgorCQkJdTY0IGR3OworCisJCQlnc2VfZ2V0KGdz ZSwgJmR3KTsKKwkJCXZjcHUtPmFyY2guZGVjX2V4cGlyZXMgKwkJCQlkdyArIHZjcHUtPmFyY2gu dmNvcmUtPnRiX29mZnNldDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJY29udGludWU7CisJ CX0KKwkJZ3NibV9zZXQodmFsaWRzLCBpZGVuKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3Ry dWN0IGdzX21zZ19vcHMgdmNwdV9tZXNzYWdlX29wcyA9IHsKKwkuZ2V0X3NpemUgPSBnc19tc2df b3BzX3ZjcHVfZ2V0X3NpemUsCisJLmZpbGxfaW5mbyA9IGdzX21zZ19vcHNfdmNwdV9maWxsX2lu Zm8sCisJLnJlZnJlc2hfaW5mbyA9IGdzX21zZ19vcHNfdmNwdV9yZWZyZXNoX2luZm8sCit9Owor CitzdGF0aWMgaW50IGt2bWh2X3BhcHJfaG9zdF9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1 LAorCQkJCSAgc3RydWN0IGt2bWh2X3BhcHJfaG9zdCAqcGgpCit7CisJc3RydWN0IGt2bWh2X3Bh cHJfY29uZmlnICpjZmc7CisJc3RydWN0IGdzX2J1ZmYgKmdzYiwgKnZjcHVfcnVuX291dHB1dCwg KnZjcHVfcnVuX2lucHV0OworCXVuc2lnbmVkIGxvbmcgZ3Vlc3RfaWQsIHZjcHVfaWQ7CisJc3Ry dWN0IGdzX21zZyAqZ3NtLCAqdmNwdV9tZXNzYWdlLCAqdmNvcmVfbWVzc2FnZTsKKwlpbnQgcmM7 CisKKwljZmcgPSAmcGgtPmNmZzsKKwlndWVzdF9pZCA9IHZjcHUtPmt2bS0+YXJjaC5scGlkOwor CXZjcHVfaWQgPSB2Y3B1LT52Y3B1X2lkOworCisJZ3NtID0gZ3NtX25ldygmY29uZmlnX21zZ19v cHMsIGNmZywgR1NfRkxBR1NfV0lERSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFnc20pIHsKKwkJcmMg PSAtRU5PTUVNOworCQlnb3RvIGVycjsKKwl9CisKKwlnc2IgPSBnc2JfbmV3KGdzbV9zaXplKGdz bSksIGd1ZXN0X2lkLCB2Y3B1X2lkLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWdzYikgeworCQlyYyA9 IC1FTk9NRU07CisJCWdvdG8gZnJlZV9nc207CisJfQorCisJcmMgPSBnc2JfcmVjZWl2ZV9kYXR1 bShnc2IsIGdzbSwgR1NJRF9SVU5fT1VUUFVUX01JTl9TSVpFKTsKKwlpZiAocmMgPCAwKSB7CisJ CXByX2VycigiS1ZNLVBBUFI6IGNvdWxkbid0IGdldCB2Y3B1IHJ1biBvdXRwdXQgYnVmZmVyIG1p bmltdW0gc2l6ZVxuIik7CisJCWdvdG8gZnJlZV9nc2I7CisJfQorCisJdmNwdV9ydW5fb3V0cHV0 ID0gZ3NiX25ldyhjZmctPnZjcHVfcnVuX291dHB1dF9zaXplLCBndWVzdF9pZCwgdmNwdV9pZCwg R0ZQX0tFUk5FTCk7CisJaWYgKCF2Y3B1X3J1bl9vdXRwdXQpIHsKKwkJcmMgPSAtRU5PTUVNOwor CQlnb3RvIGZyZWVfZ3NiOworCX0KKworCWNmZy0+dmNwdV9ydW5fb3V0cHV0X2NmZy5hZGRyZXNz ID0gZ3NiX3BhZGRyZXNzKHZjcHVfcnVuX291dHB1dCk7CisJY2ZnLT52Y3B1X3J1bl9vdXRwdXRf Y2ZnLnNpemUgPSBnc2JfY2FwYWNpdHkodmNwdV9ydW5fb3V0cHV0KTsKKwlwaC0+dmNwdV9ydW5f b3V0cHV0ID0gdmNwdV9ydW5fb3V0cHV0OworCisJZ3NtLT5mbGFncyA9IDA7CisJcmMgPSBnc2Jf c2VuZF9kYXR1bShnc2IsIGdzbSwgR1NJRF9SVU5fT1VUUFVUKTsKKwlpZiAocmMgPCAwKSB7CisJ CXByX2VycigiS1ZNLVBBUFI6IGNvdWxkbid0IHNldCB2Y3B1IHJ1biBvdXRwdXQgYnVmZmVyXG4i KTsKKwkJZ290byBmcmVlX2dzX291dDsKKwl9CisKKwl2Y3B1X21lc3NhZ2UgPSBnc21fbmV3KCZ2 Y3B1X21lc3NhZ2Vfb3BzLCB2Y3B1LCAwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXZjcHVfbWVzc2Fn ZSkgeworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gZnJlZV9nc19vdXQ7CisJfQorCWdzbV9pbmNs dWRlX2FsbCh2Y3B1X21lc3NhZ2UpOworCisJcGgtPnZjcHVfbWVzc2FnZSA9IHZjcHVfbWVzc2Fn ZTsKKworCXZjcHVfcnVuX2lucHV0ID0gZ3NiX25ldyhnc21fc2l6ZSh2Y3B1X21lc3NhZ2UpLCBn dWVzdF9pZCwgdmNwdV9pZCwgR0ZQX0tFUk5FTCk7CisJaWYgKCF2Y3B1X3J1bl9pbnB1dCkgewor CQlyYyA9IC1FTk9NRU07CisJCWdvdG8gZnJlZV92Y3B1X21lc3NhZ2U7CisJfQorCisJcGgtPnZj cHVfcnVuX2lucHV0ID0gdmNwdV9ydW5faW5wdXQ7CisJY2ZnLT52Y3B1X3J1bl9pbnB1dF9jZmcu YWRkcmVzcyA9IGdzYl9wYWRkcmVzcyh2Y3B1X3J1bl9pbnB1dCk7CisJY2ZnLT52Y3B1X3J1bl9p bnB1dF9jZmcuc2l6ZSA9IGdzYl9jYXBhY2l0eSh2Y3B1X3J1bl9pbnB1dCk7CisJcmMgPSBnc2Jf c2VuZF9kYXR1bShnc2IsIGdzbSwgR1NJRF9SVU5fSU5QVVQpOworCWlmIChyYyA8IDApIHsKKwkJ cHJfZXJyKCJLVk0tUEFQUjogY291bGRuJ3Qgc2V0IHZjcHUgcnVuIGlucHV0IGJ1ZmZlclxuIik7 CisJCWdvdG8gZnJlZV92Y3B1X3J1bl9pbnB1dDsKKwl9CisKKwl2Y29yZV9tZXNzYWdlICsJCWdz bV9uZXcoJnZjcHVfbWVzc2FnZV9vcHMsIHZjcHUsIEdTX0ZMQUdTX1dJREUsIEdGUF9LRVJORUwp OworCWlmICghdmNvcmVfbWVzc2FnZSkgeworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gZnJlZV92 Y3B1X3J1bl9pbnB1dDsKKwl9CisKKwlnc21faW5jbHVkZV9hbGwodmNvcmVfbWVzc2FnZSk7CisJ cGgtPnZjb3JlX21lc3NhZ2UgPSB2Y29yZV9tZXNzYWdlOworCisJZ3NibV9maWxsKCZwaC0+dmFs aWRzKTsKKwlnc21fZnJlZShnc20pOworCWdzYl9mcmVlKGdzYik7CisJcmV0dXJuIDA7CisKK2Zy ZWVfdmNwdV9ydW5faW5wdXQ6CisJZ3NiX2ZyZWUodmNwdV9ydW5faW5wdXQpOworZnJlZV92Y3B1 X21lc3NhZ2U6CisJZ3NtX2ZyZWUodmNwdV9tZXNzYWdlKTsKK2ZyZWVfZ3Nfb3V0OgorCWdzYl9m cmVlKHZjcHVfcnVuX291dHB1dCk7CitmcmVlX2dzYjoKKwlnc2JfZnJlZShnc2IpOworZnJlZV9n c206CisJZ3NtX2ZyZWUoZ3NtKTsKK2VycjoKKwlyZXR1cm4gcmM7Cit9CisKKy8qKgorICogX19r dm1odl9wYXByX21hcmtfZGlydHkoKSAtIG1hcmsgYSBHdWVzdCBTdGF0ZSBJRCB0byBiZSBzZW50 IHRvIHRoZSBob3N0CisgKiBAdmNwdTogdmNwdQorICogQGlkZW46IGd1ZXN0IHN0YXRlIElECisg KgorICogTWFyayBhIGd1ZXN0IHN0YXRlIElEIGFzIGhhdmluZyBiZWVuIGNoYW5nZWQgYnkgdGhl IEwxIGhvc3QgYW5kIHRodXMKKyAqIHRoZSBuZXcgdmFsdWUgbXVzdCBiZSBzZW50IHRvIHRoZSBM MCBoeXBlcnZpc29yLiBTZWUga3ZtaHZfcGFwcl9mbHVzaF92Y3B1KCkKKyAqLworaW50IF9fa3Zt aHZfcGFwcl9tYXJrX2RpcnR5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2IGlkZW4pCit7CisJ c3RydWN0IGt2bWh2X3BhcHJfaG9zdCAqcGg7CisJc3RydWN0IGdzX2JpdG1hcCAqdmFsaWRzOwor CXN0cnVjdCBnc19tc2cgKmdzbTsKKworCWlmICghaWRlbikKKwkJcmV0dXJuIDA7CisKKwlwaCA9 ICZ2Y3B1LT5hcmNoLnBhcHJfaG9zdDsKKwl2YWxpZHMgPSAmcGgtPnZhbGlkczsKKwlnc20gPSBw aC0+dmNwdV9tZXNzYWdlOworCWdzbV9pbmNsdWRlKGdzbSwgaWRlbik7CisJZ3NtID0gcGgtPnZj b3JlX21lc3NhZ2U7CisJZ3NtX2luY2x1ZGUoZ3NtLCBpZGVuKTsKKwlnc2JtX3NldCh2YWxpZHMs IGlkZW4pOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoX19rdm1odl9wYXByX21h cmtfZGlydHkpOworCisvKioKKyAqIF9fa3ZtaHZfcGFwcl9jYWNoZWRfcmVsb2FkKCkgLSByZWxv YWQgYSBHdWVzdCBTdGF0ZSBJRCBmcm9tIHRoZSBob3N0CisgKiBAdmNwdTogdmNwdQorICogQGlk ZW46IGd1ZXN0IHN0YXRlIElECisgKgorICogUmVsb2FkIHRoZSB2YWx1ZSBmb3IgdGhlIGd1ZXN0 IHN0YXRlIElEIGZyb20gdGhlIEwwIGhvc3QgaW50byB0aGUgTDEgaG9zdC4KKyAqIFRoaXMgaXMg Y2FjaGVkIHNvIHRoYXQgZ29pbmcgb3V0IHRvIHRoZSBMMCBob3N0IG9ubHkgaGFwcGVucyBpZiBu ZWNjZXNzYXJ5LgorICovCitpbnQgX19rdm1odl9wYXByX2NhY2hlZF9yZWxvYWQoc3RydWN0IGt2 bV92Y3B1ICp2Y3B1LCB1MTYgaWRlbikKK3sKKwlzdHJ1Y3Qga3ZtaHZfcGFwcl9ob3N0ICpwaDsK KwlzdHJ1Y3QgZ3NfYml0bWFwICp2YWxpZHM7CisJc3RydWN0IGdzX2J1ZmYgKmdzYjsKKwlzdHJ1 Y3QgZ3NfbXNnIGdzbTsKKwlpbnQgcmM7CisKKwlpZiAoIWlkZW4pCisJCXJldHVybiAwOworCisJ cGggPSAmdmNwdS0+YXJjaC5wYXByX2hvc3Q7CisJdmFsaWRzID0gJnBoLT52YWxpZHM7CisJaWYg KGdzYm1fdGVzdCh2YWxpZHMsIGlkZW4pKQorCQlyZXR1cm4gMDsKKworCWdzYiA9IHBoLT52Y3B1 X3J1bl9pbnB1dDsKKwlnc21faW5pdCgmZ3NtLCAmdmNwdV9tZXNzYWdlX29wcywgdmNwdSwgZ3Np ZF9mbGFncyhpZGVuKSk7CisJcmMgPSBnc2JfcmVjZWl2ZV9kYXR1bShnc2IsICZnc20sIGlkZW4p OworCWlmIChyYyA8IDApIHsKKwkJcHJfZXJyKCJLVk0tUEFQUjogY291bGRuJ3QgZ2V0IEdTSUQ6 IDB4JXhcbiIsIGlkZW4pOworCQlyZXR1cm4gcmM7CisJfQorCXJldHVybiAwOworfQorRVhQT1JU X1NZTUJPTF9HUEwoX19rdm1odl9wYXByX2NhY2hlZF9yZWxvYWQpOworCisvKioKKyAqIGt2bWh2 X3BhcHJfZmx1c2hfdmNwdSgpIC0gc2VuZCBtb2RpZmllZCBHdWVzdCBTdGF0ZSBJRHMgdG8gdGhl IGhvc3QKKyAqIEB2Y3B1OiB2Y3B1CisgKiBAdGltZV9saW1pdDogaGRlYyBleHBpcnkgdGIKKyAq CisgKiBTZW5kIHRoZSB2YWx1ZXMgbWFya2VkIGJ5IF9fa3ZtaHZfcGFwcl9tYXJrX2RpcnR5KCkg dG8gdGhlIEwwIGhvc3QuIFRocmVhZAorICogd2lkZSB2YWx1ZXMgYXJlIGNvcGllZCB0byB0aGUg SF9HVUVTVF9SVU5fVkNQVSBpbnB1dCBidWZmZXIuIEd1ZXN0IHdpZGUKKyAqIHZhbHVlcyBuZWVk IHRvIGJlIHNlbnQgd2l0aCBIX0dVRVNUX1NFVCBmaXJzdC4KKyAqCisgKiBUaGUgaGRlYyB0YiBv ZmZzZXQgaXMgYWx3YXlzIHNlbnQgdG8gTDAgaG9zdC4KKyAqLworaW50IGt2bWh2X3BhcHJfZmx1 c2hfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB0aW1lX2xpbWl0KQoreworCXN0cnVj dCBrdm1odl9wYXByX2hvc3QgKnBoOworCXN0cnVjdCBnc19idWZmICpnc2I7CisJc3RydWN0IGdz X21zZyAqZ3NtOworCWludCByYzsKKworCXBoID0gJnZjcHUtPmFyY2gucGFwcl9ob3N0OworCWdz YiA9IHBoLT52Y3B1X3J1bl9pbnB1dDsKKwlnc20gPSBwaC0+dmNvcmVfbWVzc2FnZTsKKwlyYyA9 IGdzYl9zZW5kX2RhdGEoZ3NiLCBnc20pOworCWlmIChyYyA8IDApIHsKKwkJcHJfZXJyKCJLVk0t UEFQUjogY291bGRuJ3Qgc2V0IGd1ZXN0IHdpZGUgZWxlbWVudHNcbiIpOworCQlyZXR1cm4gcmM7 CisJfQorCisJZ3NtID0gcGgtPnZjcHVfbWVzc2FnZTsKKwlyYyA9IGdzbV9maWxsX2luZm8oZ3Nt LCBnc2IpOworCWlmIChyYyA8IDApIHsKKwkJcHJfZXJyKCJLVk0tUEFQUjogY291bGRuJ3QgZmls bCB2Y3B1IHJ1biBpbnB1dCBidWZmZXJcbiIpOworCQlyZXR1cm4gcmM7CisJfQorCisJcmMgPSBn c2VfcHV0KGdzYiwgR1NJRF9IREVDX0VYUElSWV9UQiwgdGltZV9saW1pdCk7CisJaWYgKHJjIDwg MCkKKwkJcmV0dXJuIHJjOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoa3ZtaHZf cGFwcl9mbHVzaF92Y3B1KTsKKworCisvKioKKyAqIGt2bWh2X3BhcHJfc2V0X3B0YmxfZW50cnko KSAtIHNlbmQgcGFydGl0aW9uIGFuZCBwcm9jZXNzIHRhYmxlIHN0YXRlIHRvIEwwIGhvc3QKKyAq IEBscGlkOiBndWVzdCBpZAorICogQGR3MDogcGFydGl0aW9uIHRhYmxlIGRvdWJsZSB3b3JkCisg KiBAZHcxOiBwcm9jZXNzIHRhYmxlIGRvdWJsZSB3b3JkCisgKi8KK2ludCBrdm1odl9wYXByX3Nl dF9wdGJsX2VudHJ5KHU2NCBscGlkLCB1NjQgZHcwLCB1NjQgZHcxKQoreworCXN0cnVjdCBnc19w YXJ0X3RhYmxlIHBhdGJsOworCXN0cnVjdCBnc19wcm9jX3RhYmxlIHBydGJsOworCXN0cnVjdCBn c19idWZmICpnc2I7CisJc2l6ZV90IHNpemU7CisJaW50IHJjOworCisJc2l6ZSA9IGdzZV90b3Rh bF9zaXplKGdzaWRfc2l6ZShHU0lEX1BBUlRJVElPTl9UQUJMRSkpICsKKwkgICAgICAgZ3NlX3Rv dGFsX3NpemUoZ3NpZF9zaXplKEdTSURfUFJPQ0VTU19UQUJMRSkpICsKKwkgICAgICAgc2l6ZW9m KHN0cnVjdCBnc19oZWFkZXIpOworCWdzYiA9IGdzYl9uZXcoc2l6ZSwgbHBpZCwgMCwgR0ZQX0tF Uk5FTCk7CisJaWYgKCFnc2IpCisJCXJldHVybiAtRU5PTUVNOworCisJcGF0YmwuYWRkcmVzcyA9 IGR3MCAmIFJQREJfTUFTSzsKKwlwYXRibC5lYV9iaXRzID0gKCgoKGR3MCAmIFJUUzFfTUFTSykg Pj4gKFJUUzFfU0hJRlQgLSAzKSkgfAorCQkJICAoKGR3MCAmIFJUUzJfTUFTSykgPj4gUlRTMl9T SElGVCkpICsKKwkJCSAzMSk7CisJcGF0YmwuZ3BkX3NpemUgPSAxdWwgPDwgKChkdzAgJiBSUERT X01BU0spICsgMyk7CisJcmMgPSBnc2VfcHV0KGdzYiwgR1NJRF9QQVJUSVRJT05fVEFCTEUsIHBh dGJsKTsKKwlpZiAocmMgPCAwKQorCQlnb3RvIGZyZWVfZ3NiOworCisJcHJ0YmwuYWRkcmVzcyA9 IGR3MSAmIFBSVEJfTUFTSzsKKwlwcnRibC5ncGRfc2l6ZSA9IDF1bCA8PCAoKGR3MSAmIFBSVFNf TUFTSykgKyAxMik7CisJcmMgPSBnc2VfcHV0KGdzYiwgR1NJRF9QUk9DRVNTX1RBQkxFLCBwcnRi bCk7CisJaWYgKHJjIDwgMCkKKwkJZ290byBmcmVlX2dzYjsKKworCXJjID0gZ3NiX3NlbmQoZ3Ni LCBHU19GTEFHU19XSURFKTsKKwlpZiAocmMgPCAwKSB7CisJCXByX2VycigiS1ZNLVBBUFI6IGNv dWxkbid0IHNldCB0aGUgUEFURVxuIik7CisJCWdvdG8gZnJlZV9nc2I7CisJfQorCisJZ3NiX2Zy ZWUoZ3NiKTsKKwlyZXR1cm4gMDsKKworZnJlZV9nc2I6CisJZ3NiX2ZyZWUoZ3NiKTsKKwlyZXR1 cm4gcmM7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChrdm1odl9wYXByX3NldF9wdGJsX2VudHJ5KTsK KworLyoqCisgKiBrdm1odl9wYXByX3BhcnNlX291dHB1dCgpIC0gcmVjZWl2ZSB2YWx1ZXMgZnJv bSBIX0dVRVNUX1JVTl9WQ1BVIG91dHB1dAorICogQHZjcHU6IHZjcHUKKyAqCisgKiBQYXJzZSB0 aGUgb3V0cHV0IGJ1ZmZlciBmcm9tIEhfR1VFU1RfUlVOX1ZDUFUgdG8gdXBkYXRlIHZjcHUuCisg Ki8KK2ludCBrdm1odl9wYXByX3BhcnNlX291dHB1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7 CisJc3RydWN0IGt2bWh2X3BhcHJfaG9zdCAqcGg7CisJc3RydWN0IGdzX2J1ZmYgKmdzYjsKKwlz dHJ1Y3QgZ3NfbXNnIGdzbTsKKworCXBoID0gJnZjcHUtPmFyY2gucGFwcl9ob3N0OworCWdzYiA9 IHBoLT52Y3B1X3J1bl9vdXRwdXQ7CisKKwl2Y3B1LT5hcmNoLmZhdWx0X2RhciA9IDA7CisJdmNw dS0+YXJjaC5mYXVsdF9kc2lzciA9IDA7CisJdmNwdS0+YXJjaC5mYXVsdF9ncGEgPSAwOworCXZj cHUtPmFyY2guZW11bF9pbnN0ID0gMDsKKworCWdzbV9pbml0KCZnc20sICZ2Y3B1X21lc3NhZ2Vf b3BzLCB2Y3B1LCAwKTsKKwlnc21fcmVmcmVzaF9pbmZvKCZnc20sIGdzYik7CisKKwlyZXR1cm4g MDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGt2bWh2X3BhcHJfcGFyc2Vfb3V0cHV0KTsKKworc3Rh dGljIHZvaWQga3ZtaHZfcGFwcl9ob3N0X2ZyZWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQkJ CSBzdHJ1Y3Qga3ZtaHZfcGFwcl9ob3N0ICpwaCkKK3sKKwlnc21fZnJlZShwaC0+dmNwdV9tZXNz YWdlKTsKKwlnc21fZnJlZShwaC0+dmNvcmVfbWVzc2FnZSk7CisJZ3NiX2ZyZWUocGgtPnZjcHVf cnVuX2lucHV0KTsKKwlnc2JfZnJlZShwaC0+dmNwdV9ydW5fb3V0cHV0KTsKK30KKworaW50IF9f a3ZtaHZfcGFwcl9yZWxvYWRfcHRyZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHB0 X3JlZ3MgKnJlZ3MpCit7CisJaW50IHJjOworCisJZm9yIChpbnQgaSA9IDA7IGkgPCAzMjsgaSsr KSB7CisJCXJjID0ga3ZtaHZfcGFwcl9jYWNoZWRfcmVsb2FkKHZjcHUsIEdTSURfR1BSMCArIGkp OworCQlpZiAocmMgPCAwKQorCQkJcmV0dXJuIHJjOworCX0KKworCXJjID0ga3ZtaHZfcGFwcl9j YWNoZWRfcmVsb2FkKHZjcHUsIEdTSURfQ1IpOworCWlmIChyYyA8IDApCisJCXJldHVybiByYzsK KwlyYyA9IGt2bWh2X3BhcHJfY2FjaGVkX3JlbG9hZCh2Y3B1LCBHU0lEX1hFUik7CisJaWYgKHJj IDwgMCkKKwkJcmV0dXJuIHJjOworCXJjID0ga3ZtaHZfcGFwcl9jYWNoZWRfcmVsb2FkKHZjcHUs IEdTSURfQ1RSKTsKKwlpZiAocmMgPCAwKQorCQlyZXR1cm4gcmM7CisJcmMgPSBrdm1odl9wYXBy X2NhY2hlZF9yZWxvYWQodmNwdSwgR1NJRF9MUik7CisJaWYgKHJjIDwgMCkKKwkJcmV0dXJuIHJj OworCXJjID0ga3ZtaHZfcGFwcl9jYWNoZWRfcmVsb2FkKHZjcHUsIEdTSURfTklBKTsKKwlpZiAo cmMgPCAwKQorCQlyZXR1cm4gcmM7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BM KF9fa3ZtaHZfcGFwcl9yZWxvYWRfcHRyZWdzKTsKKworaW50IF9fa3ZtaHZfcGFwcl9tYXJrX2Rp cnR5X3B0cmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQor eworCWZvciAoaW50IGkgPSAwOyBpIDwgMzI7IGkrKykKKwkJa3ZtaHZfcGFwcl9tYXJrX2RpcnR5 KHZjcHUsIEdTSURfR1BSMCArIGkpOworCisJa3ZtaHZfcGFwcl9tYXJrX2RpcnR5KHZjcHUsIEdT SURfQ1IpOworCWt2bWh2X3BhcHJfbWFya19kaXJ0eSh2Y3B1LCBHU0lEX1hFUik7CisJa3ZtaHZf cGFwcl9tYXJrX2RpcnR5KHZjcHUsIEdTSURfQ1RSKTsKKwlrdm1odl9wYXByX21hcmtfZGlydHko dmNwdSwgR1NJRF9MUik7CisJa3ZtaHZfcGFwcl9tYXJrX2RpcnR5KHZjcHUsIEdTSURfTklBKTsK KworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoX19rdm1odl9wYXByX21hcmtfZGly dHlfcHRyZWdzKTsKKworLyoqCisgKiBrdm1odl9wYXByX3ZjcHVfY3JlYXRlKCkgLSBjcmVhdGUg bmVzdGVkIHZjcHUgZm9yIHRoZSBQQVBSIEFQSQorICogQHZjcHU6IHZjcHUKKyAqIEBwaDogUEFQ UiBuZXN0ZWQgaG9zdCBzdGF0ZQorICoKKyAqIFBhcnNlIHRoZSBvdXRwdXQgYnVmZmVyIGZyb20g SF9HVUVTVF9SVU5fVkNQVSB0byB1cGRhdGUgdmNwdS4KKyAqLworaW50IGt2bWh2X3BhcHJfdmNw dV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQkJICAgc3RydWN0IGt2bWh2X3BhcHJf aG9zdCAqcGgpCit7CisJbG9uZyByYzsKKworCXJjID0gcGxwYXJfZ3Vlc3RfY3JlYXRlX3ZjcHUo MCwgdmNwdS0+a3ZtLT5hcmNoLmxwaWQsIHZjcHUtPnZjcHVfaWQpOworCisJaWYgKHJjICE9IEhf U1VDQ0VTUykgeworCQlwcl9lcnIoIktWTTogQ3JlYXRlIEd1ZXN0IHZjcHUgaGNhbGwgZmFpbGVk LCByYz0lbGRcbiIsIHJjKTsKKwkJc3dpdGNoIChyYykgeworCQljYXNlIEhfTk9UX0VOT1VHSF9S RVNPVVJDRVM6CisJCWNhc2UgSF9BQk9SVEVEOgorCQkJcmV0dXJuIC1FTk9NRU07CisJCWNhc2Ug SF9BVVRIT1JJVFk6CisJCQlyZXR1cm4gLUVQRVJNOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1F SU5WQUw7CisJCX0KKwl9CisKKwlyYyA9IGt2bWh2X3BhcHJfaG9zdF9jcmVhdGUodmNwdSwgcGgp OworCisJcmV0dXJuIHJjOworfQorRVhQT1JUX1NZTUJPTF9HUEwoa3ZtaHZfcGFwcl92Y3B1X2Ny ZWF0ZSk7CisKKy8qKgorICoga3ZtaHZfcGFwcl92Y3B1X2ZyZWUoKSAtIGZyZWUgdGhlIFBBUFIg aG9zdCBzdGF0ZQorICogQHZjcHU6IHZjcHUKKyAqIEBwaDogUEFQUiBuZXN0ZWQgaG9zdCBzdGF0 ZQorICovCit2b2lkIGt2bWh2X3BhcHJfdmNwdV9mcmVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwK KwkJCSAgc3RydWN0IGt2bWh2X3BhcHJfaG9zdCAqcGgpCit7CisJa3ZtaHZfcGFwcl9ob3N0X2Zy ZWUodmNwdSwgcGgpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoa3ZtaHZfcGFwcl92Y3B1X2ZyZWUp OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9lbXVsYXRlX2xvYWRzdG9yZS5jIGIvYXJj aC9wb3dlcnBjL2t2bS9lbXVsYXRlX2xvYWRzdG9yZS5jCmluZGV4IDY0NThlZGUyOGI2NS4uMmM0 MGE2OTNjZDc3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtL2VtdWxhdGVfbG9hZHN0b3Jl LmMKKysrIGIvYXJjaC9wb3dlcnBjL2t2bS9lbXVsYXRlX2xvYWRzdG9yZS5jCkBAIC05Miw3ICs5 Miw4IEBAIGludCBrdm1wcGNfZW11bGF0ZV9sb2Fkc3RvcmUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1 KQogCXZjcHUtPmFyY2gubW1pb19ob3N0X3N3YWJiZWQgPSAwOwogCiAJZW11bGF0ZWQgPSBFTVVM QVRFX0ZBSUw7Ci0JdmNwdS0+YXJjaC5yZWdzLm1zciA9IHZjcHUtPmFyY2guc2hhcmVkLT5tc3I7 CisJdmNwdS0+YXJjaC5yZWdzLm1zciA9IGt2bXBwY19nZXRfbXNyKHZjcHUpOworCWt2bWh2X3Bh cHJfcmVsb2FkX3B0cmVncyh2Y3B1LCAmdmNwdS0+YXJjaC5yZWdzKTsKIAlpZiAoYW5hbHlzZV9p bnN0cigmb3AsICZ2Y3B1LT5hcmNoLnJlZ3MsIHBwY19pbnN0KGluc3QpKSA9IDApIHsKIAkJaW50 IHR5cGUgPSBvcC50eXBlICYgSU5TVFJfVFlQRV9NQVNLOwogCQlpbnQgc2l6ZSA9IEdFVFNJWkUo b3AudHlwZSk7CkBAIC0zNTYsNiArMzU3LDcgQEAgaW50IGt2bXBwY19lbXVsYXRlX2xvYWRzdG9y ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJCX0KIAl9CiAKKwlrdm1odl9wYXByX21hcmtfZGly dHlfcHRyZWdzKHZjcHUsICZ2Y3B1LT5hcmNoLnJlZ3MpOwogCXRyYWNlX2t2bV9wcGNfaW5zdHIo aW5zdCwga3ZtcHBjX2dldF9wYyh2Y3B1KSwgZW11bGF0ZWQpOwogCiAJLyogQWR2YW5jZSBwYXN0 IGVtdWxhdGVkIGluc3RydWN0aW9uLiAqLwotLSAKMi4zMS4xCg==