From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm1-x343.google.com (mail-wm1-x343.google.com [IPv6:2a00:1450:4864:20::343]) by gabe.freedesktop.org (Postfix) with ESMTPS id 924CB898A4 for ; Fri, 10 May 2019 14:45:48 +0000 (UTC) Received: by mail-wm1-x343.google.com with SMTP id m20so6625857wmg.1 for ; Fri, 10 May 2019 07:45:48 -0700 (PDT) From: Tomeu Vizoso Date: Fri, 10 May 2019 16:44:55 +0200 Message-Id: <20190510144458.20113-3-tomeu.vizoso@collabora.com> In-Reply-To: <20190510144458.20113-1-tomeu.vizoso@collabora.com> References: <20190510144458.20113-1-tomeu.vizoso@collabora.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t 3/6] lib/panfrost: Add panfrost helpers List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: Development mailing list for IGT GPU Tools Cc: Petri Latvala , Tomeu Vizoso List-ID: SSBhbHNvIG5lZWRlZCB0byBjb3B5IHR3byBoZWFkZXJzIGZyb20gTWVzYSBzbyB3ZSBoYXZlIHRo ZSBzdHJ1Y3QKZGVmaW5pdGlvbnMgaW52b2x2ZWQgaW4gYSB0cml2aWFsIGNsZWFyIGpvYi4gVGhl c2UgaGVhZGVycyB3ZXJlCnVuY2hhbmdlZC4KClNpZ25lZC1vZmYtYnk6IFRvbWV1IFZpem9zbyA8 dG9tZXUudml6b3NvQGNvbGxhYm9yYS5jb20+CkFja2VkLWJ5OiBQZXRyaSBMYXR2YWxhIDxwZXRy aS5sYXR2YWxhQGludGVsLmNvbT4KLS0tCiBsaWIvaWd0X3BhbmZyb3N0LmMgIHwgIDI0NCArKysr KysrCiBsaWIvaWd0X3BhbmZyb3N0LmggIHwgICA2MCArKwogbGliL21lc29uLmJ1aWxkICAgICB8 ICAgIDEgKwogbGliL3BhbmZyb3N0LWpvYi5oICB8IDE1MTYgKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKwogbGliL3BhbmZyb3N0LW1pc2MuaCB8ICAgNDcgKysKIDUg ZmlsZXMgY2hhbmdlZCwgMTg2OCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGli L2lndF9wYW5mcm9zdC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL2lndF9wYW5mcm9zdC5oCiBj cmVhdGUgbW9kZSAxMDA2NDQgbGliL3BhbmZyb3N0LWpvYi5oCiBjcmVhdGUgbW9kZSAxMDA2NDQg bGliL3BhbmZyb3N0LW1pc2MuaAoKZGlmZiAtLWdpdCBhL2xpYi9pZ3RfcGFuZnJvc3QuYyBiL2xp Yi9pZ3RfcGFuZnJvc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAu LjEwNDZjODI2MDU1MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9pZ3RfcGFuZnJvc3QuYwpAQCAt MCwwICsxLDI0NCBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDE2IEJyb2FkY29tCisgKiBDb3B5 cmlnaHQgwqkgMjAxOSBDb2xsYWJvcmEsIEx0ZC4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVi eSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICog Y29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMg KHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVz dHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8g dXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNl LAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBw ZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1 YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5 cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5l eHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJz dGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FS RSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBS RVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJS QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFV VEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFH RVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJB Q1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09O TkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisg KiBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUg PHN0cmluZy5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5j bHVkZSA8c3lzL21tYW4uaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMv c3RhdC5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisKKyNp bmNsdWRlICJkcm10ZXN0LmgiCisjaW5jbHVkZSAiaWd0X2F1eC5oIgorI2luY2x1ZGUgImlndF9j b3JlLmgiCisjaW5jbHVkZSAiaWd0X3BhbmZyb3N0LmgiCisjaW5jbHVkZSAiaW9jdGxfd3JhcHBl cnMuaCIKKyNpbmNsdWRlICJpbnRlbF9yZWcuaCIKKyNpbmNsdWRlICJpbnRlbF9jaGlwc2V0Lmgi CisjaW5jbHVkZSAicGFuZnJvc3RfZHJtLmgiCisjaW5jbHVkZSAicGFuZnJvc3Qtam9iLmgiCisK Ky8qKgorICogU0VDVElPTjppZ3RfcGFuZnJvc3QKKyAqIEBzaG9ydF9kZXNjcmlwdGlvbjogUEFO RlJPU1Qgc3VwcG9ydCBsaWJyYXJ5CisgKiBAdGl0bGU6IFBBTkZST1NUCisgKiBAaW5jbHVkZTog aWd0LmgKKyAqCisgKiBUaGlzIGxpYnJhcnkgcHJvdmlkZXMgdmFyaW91cyBhdXhpbGlhcnkgaGVs cGVyIGZ1bmN0aW9ucyBmb3Igd3JpdGluZyBQQU5GUk9TVAorICogdGVzdHMuCisgKi8KKworc3Ry dWN0IHBhbmZyb3N0X2JvICoKK2lndF9wYW5mcm9zdF9nZW1fbmV3KGludCBmZCwgc2l6ZV90IHNp emUpCit7CisgICAgICAgIHN0cnVjdCBwYW5mcm9zdF9ibyAqYm8gPSBjYWxsb2MoMSwgc2l6ZW9m KCpibykpOworCisgICAgICAgIHN0cnVjdCBkcm1fcGFuZnJvc3RfY3JlYXRlX2JvIGNyZWF0ZV9i byA9IHsKKyAgICAgICAgICAgICAgICAuc2l6ZSA9IHNpemUsCisgICAgICAgIH07CisKKyAgICAg ICAgZG9faW9jdGwoZmQsIERSTV9JT0NUTF9QQU5GUk9TVF9DUkVBVEVfQk8sICZjcmVhdGVfYm8p OworCisgICAgICAgIGJvLT5oYW5kbGUgPSBjcmVhdGVfYm8uaGFuZGxlOworICAgICAgICBiby0+ b2Zmc2V0ID0gY3JlYXRlX2JvLm9mZnNldDsKKyAgICAgICAgYm8tPnNpemUgPSBzaXplOworICAg ICAgICByZXR1cm4gYm87Cit9CisKK3ZvaWQKK2lndF9wYW5mcm9zdF9mcmVlX2JvKGludCBmZCwg c3RydWN0IHBhbmZyb3N0X2JvICpibykKK3sKKyAgICAgICAgaWYgKGJvLT5tYXApCisgICAgICAg ICAgICAgICAgbXVubWFwKGJvLT5tYXAsIGJvLT5zaXplKTsKKyAgICAgICAgZ2VtX2Nsb3NlKGZk LCBiby0+aGFuZGxlKTsKKyAgICAgICAgZnJlZShibyk7Cit9CisKK3VpbnQzMl90CitpZ3RfcGFu ZnJvc3RfZ2V0X2JvX29mZnNldChpbnQgZmQsIHVpbnQzMl90IGhhbmRsZSkKK3sKKyAgICAgICAg c3RydWN0IGRybV9wYW5mcm9zdF9nZXRfYm9fb2Zmc2V0IGdldCA9IHsKKyAgICAgICAgICAgICAg ICAuaGFuZGxlID0gaGFuZGxlLAorICAgICAgICB9OworCisgICAgICAgIGRvX2lvY3RsKGZkLCBE Uk1fSU9DVExfUEFORlJPU1RfR0VUX0JPX09GRlNFVCwgJmdldCk7CisKKyAgICAgICAgcmV0dXJu IGdldC5vZmZzZXQ7Cit9CisKK3VpbnQzMl90CitpZ3RfcGFuZnJvc3RfZ2V0X3BhcmFtKGludCBm ZCwgaW50IHBhcmFtKQoreworICAgICAgICBzdHJ1Y3QgZHJtX3BhbmZyb3N0X2dldF9wYXJhbSBn ZXQgPSB7CisgICAgICAgICAgICAgICAgLnBhcmFtID0gcGFyYW0sCisgICAgICAgIH07CisKKyAg ICAgICAgZG9faW9jdGwoZmQsIERSTV9JT0NUTF9QQU5GUk9TVF9HRVRfUEFSQU0sICZnZXQpOwor CisgICAgICAgIHJldHVybiBnZXQudmFsdWU7Cit9CisKK3ZvaWQgKgoraWd0X3BhbmZyb3N0X21t YXBfYm8oaW50IGZkLCB1aW50MzJfdCBoYW5kbGUsIHVpbnQzMl90IHNpemUsIHVuc2lnbmVkIHBy b3QpCit7CisgICAgICAgIHN0cnVjdCBkcm1fcGFuZnJvc3RfbW1hcF9ibyBtbWFwX2JvID0gewor ICAgICAgICAgICAgICAgIC5oYW5kbGUgPSBoYW5kbGUsCisgICAgICAgIH07CisgICAgICAgIHZv aWQgKnB0cjsKKworICAgICAgICBtbWFwX2JvLmhhbmRsZSA9IGhhbmRsZTsKKyAgICAgICAgZG9f aW9jdGwoZmQsIERSTV9JT0NUTF9QQU5GUk9TVF9NTUFQX0JPLCAmbW1hcF9ibyk7CisKKyAgICAg ICAgcHRyID0gbW1hcCgwLCBzaXplLCBwcm90LCBNQVBfU0hBUkVELCBmZCwgbW1hcF9iby5vZmZz ZXQpOworICAgICAgICBpZiAocHRyID09IE1BUF9GQUlMRUQpCisgICAgICAgICAgICAgICAgcmV0 dXJuIE5VTEw7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gcHRyOworfQor Cit2b2lkIGlndF9wYW5mcm9zdF9ib19tbWFwKGludCBmZCwgc3RydWN0IHBhbmZyb3N0X2JvICpi bykKK3sKKyAgICAgICAgYm8tPm1hcCA9IGlndF9wYW5mcm9zdF9tbWFwX2JvKGZkLCBiby0+aGFu ZGxlLCBiby0+c2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9UX1JF QUQgfCBQUk9UX1dSSVRFKTsKKyAgICAgICAgaWd0X2Fzc2VydChiby0+bWFwKTsKK30KKworLyog VE9ETzogTWFrZSB0aGlzIG1vcmUgZ2VuZXJpYyBzbyBpdCB3b3JrcyBvbiBHUFVzIG90aGVyIHRo YW4gVDc2MCAqLworc3RydWN0IHBhbmZyb3N0X3N1Ym1pdCAqaWd0X3BhbmZyb3N0X3RyaXZpYWxf am9iKGludCBmZCwgYm9vbCBkb19jcmFzaCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCB1aW50MzJf dCBjb2xvcikKK3sKKyAgICAgICAgc3RydWN0IHBhbmZyb3N0X3N1Ym1pdCAqc3VibWl0OworICAg ICAgICBzdHJ1Y3QgbWFsaV9qb2JfZGVzY3JpcHRvcl9oZWFkZXIgaGVhZGVyID0geworICAgICAg ICAgICAgICAgIC5qb2JfdHlwZSA9IEpPQl9UWVBFX0ZSQUdNRU5ULAorICAgICAgICAgICAgICAg IC5qb2JfaW5kZXggPSAxLAorI2lmZGVmIF9fTFA2NF9fCisgICAgICAgICAgICAgICAgLmpvYl9k ZXNjcmlwdG9yX3NpemUgPSAxLAorI2VuZGlmCisgICAgICAgIH07CisgICAgICAgIHN0cnVjdCBt YWxpX3BheWxvYWRfZnJhZ21lbnQgcGF5bG9hZCA9IHsKKyAgICAgICAgICAgICAgICAubWluX3Rp bGVfY29vcmQgPSBNQUxJX0NPT1JESU5BVEVfVE9fVElMRV9NSU4oMCwgMCksCisgICAgICAgICAg ICAgICAgLm1heF90aWxlX2Nvb3JkID0gTUFMSV9DT09SRElOQVRFX1RPX1RJTEVfTUFYKEFMSUdO KHdpZHRoLCAxNiksIGhlaWdodCksCisgICAgICAgIH07CisgICAgICAgIHN0cnVjdCBiaWZyb3N0 X2ZyYW1lYnVmZmVyIGZyYW1lYnVmZmVyID0geworICAgICAgICAgICAgLnVuazAgPSAweDAsCisg ICAgICAgICAgICAudW5rbm93bjEgPSAweDAsCisgICAgICAgICAgICAudGlsZXJfbWV0YSA9IDB4 ZmYwMDAwMDAwMCwKKyAgICAgICAgICAgIC53aWR0aDEgPSBNQUxJX1BPU0lUSVZFKEFMSUdOKHdp ZHRoLCAxNikpLAorICAgICAgICAgICAgLmhlaWdodDEgPSBNQUxJX1BPU0lUSVZFKGhlaWdodCks CisgICAgICAgICAgICAud2lkdGgyID0gTUFMSV9QT1NJVElWRShBTElHTih3aWR0aCwgMTYpKSwK KyAgICAgICAgICAgIC5oZWlnaHQyID0gTUFMSV9QT1NJVElWRShoZWlnaHQpLAorICAgICAgICAg ICAgLnVuazEgPSAweDEwODAsCisgICAgICAgICAgICAudW5rMiA9IDB4MCwKKyAgICAgICAgICAg IC5ydF9jb3VudF8xID0gTUFMSV9QT1NJVElWRSgxKSwKKyAgICAgICAgICAgIC5ydF9jb3VudF8y ID0gMSwKKyAgICAgICAgICAgIC51bmszID0gMHgxMDAsCisgICAgICAgICAgICAuY2xlYXJfc3Rl bmNpbCA9IDB4MCwKKyAgICAgICAgICAgIC5jbGVhcl9kZXB0aCA9IDAuMDAwMDAwLAorICAgICAg ICAgICAgLnVua25vd24yID0gMHgxZiwKKyAgICAgICAgfTsKKyAgICAgICAgc3RydWN0IG1hbGlf cnRfZm9ybWF0IGZtdCA9IHsKKyAgICAgICAgICAgICAgICAudW5rMSA9IDB4NDAwMDAwMCwKKyAg ICAgICAgICAgICAgICAudW5rMiA9IDB4MSwKKyAgICAgICAgICAgICAgICAubnJfY2hhbm5lbHMg PSBNQUxJX1BPU0lUSVZFKDQpLAorICAgICAgICAgICAgICAgIC5mbGFncyA9IGRvX2NyYXNoID8g MHg0NDQgfCAoMSA8PCA4KSA6IDB4NDQ0LAorICAgICAgICAgICAgICAgIC5zd2l6emxlID0gTUFM SV9DSEFOTkVMX0JMVUUgfCAoTUFMSV9DSEFOTkVMX0dSRUVOIDw8IDMpIHwgKE1BTElfQ0hBTk5F TF9SRUQgPDwgNikgfCAoTUFMSV9DSEFOTkVMX09ORSA8PCA5KSwKKyAgICAgICAgICAgICAgICAu dW5rNCA9IDB4OCwKKyAgICAgICAgfTsKKyAgICAgICAgc3RydWN0IGJpZnJvc3RfcmVuZGVyX3Rh cmdldCBydHMgPSB7CisgICAgICAgICAgICAgICAgLmZvcm1hdCA9IGZtdCwKKyAgICAgICAgICAg ICAgICAuY2h1bmtub3duID0geworICAgICAgICAgICAgICAgICAgICAudW5rID0gMHgwLAorICAg ICAgICAgICAgICAgICAgICAucG9pbnRlciA9IDB4MCwKKyAgICAgICAgICAgICAgICB9LAorICAg ICAgICAgICAgICAgIC5mcmFtZWJ1ZmZlcl9zdHJpZGUgPSBBTElHTih3aWR0aCwgMTYpICogNCAv IDE2LAorICAgICAgICAgICAgICAgIC5jbGVhcl9jb2xvcl8xID0gY29sb3IsCisgICAgICAgICAg ICAgICAgLmNsZWFyX2NvbG9yXzIgPSBjb2xvciwKKyAgICAgICAgICAgICAgICAuY2xlYXJfY29s b3JfMyA9IGNvbG9yLAorICAgICAgICAgICAgICAgIC5jbGVhcl9jb2xvcl80ID0gY29sb3IsCisg ICAgICAgIH07CisgICAgICAgIHVpbnQzMl90ICpib3M7CisKKyAgICAgICAgc3VibWl0ID0gbWFs bG9jKHNpemVvZigqc3VibWl0KSk7CisKKyAgICAgICAgc3VibWl0LT5mYm8gPSBpZ3RfcGFuZnJv c3RfZ2VtX25ldyhmZCwgQUxJR04od2lkdGgsIDE2KSAqIGhlaWdodCAqIDQpOworICAgICAgICBy dHMuZnJhbWVidWZmZXIgPSBzdWJtaXQtPmZiby0+b2Zmc2V0OworCisgICAgICAgIHN1Ym1pdC0+ dGlsZXJfaGVhcF9ibyA9IGlndF9wYW5mcm9zdF9nZW1fbmV3KGZkLCAzMjc2OCAqIDQwOTYpOwor ICAgICAgICBmcmFtZWJ1ZmZlci50aWxlcl9oZWFwX3N0YXJ0ID0gc3VibWl0LT50aWxlcl9oZWFw X2JvLT5vZmZzZXQ7CisgICAgICAgIGZyYW1lYnVmZmVyLnRpbGVyX2hlYXBfZW5kID0gc3VibWl0 LT50aWxlcl9oZWFwX2JvLT5vZmZzZXQgKyAzMjc2OCAqIDQwOTY7CisKKyAgICAgICAgc3VibWl0 LT50aWxlcl9zY3JhdGNoX2JvID0gaWd0X3BhbmZyb3N0X2dlbV9uZXcoZmQsIDEyOCAqIDEyOCAq IDQwOTYpOworICAgICAgICBmcmFtZWJ1ZmZlci50aWxlcl9zY3JhdGNoX3N0YXJ0ID0gc3VibWl0 LT50aWxlcl9zY3JhdGNoX2JvLT5vZmZzZXQ7CisgICAgICAgIGZyYW1lYnVmZmVyLnRpbGVyX3Nj cmF0Y2hfbWlkZGxlID0gc3VibWl0LT50aWxlcl9zY3JhdGNoX2JvLT5vZmZzZXQgKyAweGYwMDAw OworCisgICAgICAgIHN1Ym1pdC0+c2NyYXRjaHBhZF9ibyA9IGlndF9wYW5mcm9zdF9nZW1fbmV3 KGZkLCA2NCAqIDQwOTYpOworICAgICAgICBmcmFtZWJ1ZmZlci5zY3JhdGNocGFkID0gc3VibWl0 LT5zY3JhdGNocGFkX2JvLT5vZmZzZXQ7CisKKyAgICAgICAgc3VibWl0LT5mYl9ibyA9IGlndF9w YW5mcm9zdF9nZW1fbmV3KGZkLCBzaXplb2YoZnJhbWVidWZmZXIpICsgc2l6ZW9mKHN0cnVjdCBi aWZyb3N0X3JlbmRlcl90YXJnZXQpKTsKKyAgICAgICAgaWd0X3BhbmZyb3N0X2JvX21tYXAoZmQs IHN1Ym1pdC0+ZmJfYm8pOworICAgICAgICBtZW1jcHkoc3VibWl0LT5mYl9iby0+bWFwLCAmZnJh bWVidWZmZXIsIHNpemVvZihmcmFtZWJ1ZmZlcikpOworICAgICAgICBtZW1jcHkoc3VibWl0LT5m Yl9iby0+bWFwICsgc2l6ZW9mKGZyYW1lYnVmZmVyKSwgJnJ0cywgc2l6ZW9mKHN0cnVjdCBiaWZy b3N0X3JlbmRlcl90YXJnZXQpKTsKKyAgICAgICAgcGF5bG9hZC5mcmFtZWJ1ZmZlciA9IHN1Ym1p dC0+ZmJfYm8tPm9mZnNldCB8IE1BTElfTUZCRDsKKworICAgICAgICBzdWJtaXQtPnN1Ym1pdF9i byA9IGlndF9wYW5mcm9zdF9nZW1fbmV3KGZkLCBzaXplb2YoaGVhZGVyKSArIHNpemVvZihwYXls b2FkKSk7CisgICAgICAgIGlndF9wYW5mcm9zdF9ib19tbWFwKGZkLCBzdWJtaXQtPnN1Ym1pdF9i byk7CisKKyAgICAgICAgbWVtY3B5KHN1Ym1pdC0+c3VibWl0X2JvLT5tYXAsICZoZWFkZXIsIHNp emVvZihoZWFkZXIpKTsKKyAgICAgICAgbWVtY3B5KHN1Ym1pdC0+c3VibWl0X2JvLT5tYXAgKyBz aXplb2YoaGVhZGVyKSwgJnBheWxvYWQsIHNpemVvZihwYXlsb2FkKSk7CisKKyAgICAgICAgc3Vi bWl0LT5hcmdzID0gbWFsbG9jKHNpemVvZigqc3VibWl0LT5hcmdzKSk7CisgICAgICAgIG1lbXNl dChzdWJtaXQtPmFyZ3MsIDAsIHNpemVvZigqc3VibWl0LT5hcmdzKSk7CisgICAgICAgIHN1Ym1p dC0+YXJncy0+amMgPSBzdWJtaXQtPnN1Ym1pdF9iby0+b2Zmc2V0OworICAgICAgICBzdWJtaXQt PmFyZ3MtPnJlcXVpcmVtZW50cyA9IFBBTkZST1NUX0pEX1JFUV9GUzsKKworICAgICAgICBib3Mg PSBtYWxsb2Moc2l6ZW9mKCpib3MpICogNik7CisgICAgICAgIGJvc1swXSA9IHN1Ym1pdC0+ZmJv LT5oYW5kbGU7CisgICAgICAgIGJvc1sxXSA9IHN1Ym1pdC0+dGlsZXJfaGVhcF9iby0+aGFuZGxl OworICAgICAgICBib3NbMl0gPSBzdWJtaXQtPnRpbGVyX3NjcmF0Y2hfYm8tPmhhbmRsZTsKKyAg ICAgICAgYm9zWzNdID0gc3VibWl0LT5zY3JhdGNocGFkX2JvLT5oYW5kbGU7CisgICAgICAgIGJv c1s0XSA9IHN1Ym1pdC0+ZmJfYm8tPmhhbmRsZTsKKyAgICAgICAgYm9zWzVdID0gc3VibWl0LT5z dWJtaXRfYm8tPmhhbmRsZTsKKworICAgICAgICBzdWJtaXQtPmFyZ3MtPmJvX2hhbmRsZXMgPSB0 b191c2VyX3BvaW50ZXIoYm9zKTsKKyAgICAgICAgc3VibWl0LT5hcmdzLT5ib19oYW5kbGVfY291 bnQgPSA2OworCisgICAgICAgIGlndF9hc3NlcnRfZXEoZHJtU3luY29iakNyZWF0ZShmZCwgRFJN X1NZTkNPQkpfQ1JFQVRFX1NJR05BTEVELCAmc3VibWl0LT5hcmdzLT5vdXRfc3luYyksIDApOwor CisgICAgICAgIHJldHVybiBzdWJtaXQ7Cit9CisKK3ZvaWQgaWd0X3BhbmZyb3N0X2ZyZWVfam9i KGludCBmZCwgc3RydWN0IHBhbmZyb3N0X3N1Ym1pdCAqc3VibWl0KQoreworICAgICAgICBmcmVl KGZyb21fdXNlcl9wb2ludGVyKHN1Ym1pdC0+YXJncy0+Ym9faGFuZGxlcykpOworICAgICAgICBp Z3RfcGFuZnJvc3RfZnJlZV9ibyhmZCwgc3VibWl0LT5zdWJtaXRfYm8pOworICAgICAgICBpZ3Rf cGFuZnJvc3RfZnJlZV9ibyhmZCwgc3VibWl0LT5mYl9ibyk7CisgICAgICAgIGlndF9wYW5mcm9z dF9mcmVlX2JvKGZkLCBzdWJtaXQtPnNjcmF0Y2hwYWRfYm8pOworICAgICAgICBpZ3RfcGFuZnJv c3RfZnJlZV9ibyhmZCwgc3VibWl0LT50aWxlcl9zY3JhdGNoX2JvKTsKKyAgICAgICAgaWd0X3Bh bmZyb3N0X2ZyZWVfYm8oZmQsIHN1Ym1pdC0+dGlsZXJfaGVhcF9ibyk7CisgICAgICAgIGlndF9w YW5mcm9zdF9mcmVlX2JvKGZkLCBzdWJtaXQtPmZibyk7CisgICAgICAgIGZyZWUoc3VibWl0LT5h cmdzKTsKKyAgICAgICAgZnJlZShzdWJtaXQpOworfQpkaWZmIC0tZ2l0IGEvbGliL2lndF9wYW5m cm9zdC5oIGIvbGliL2lndF9wYW5mcm9zdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwMC4uYTMzMzI3ZTM5NzM2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2lndF9wYW5m cm9zdC5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxNiBCcm9hZGNv bQorICogQ29weXJpZ2h0IMKpIDIwMTkgQ29sbGFib3JhLCBMdGQuCisgKgorICogUGVybWlzc2lv biBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWlu aW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0 aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3 aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUg cmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwg c3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0 byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRv IGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUg YWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVk aW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3Bp ZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBU SEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkg S0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBU TyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwK KyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENM QUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9O IE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9G IE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBE RUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICovCisKKyNpZm5kZWYgSUdUX1BBTkZST1NU X0gKKyNkZWZpbmUgSUdUX1BBTkZST1NUX0gKKworI2luY2x1ZGUgInBhbmZyb3N0X2RybS5oIgor CitzdHJ1Y3QgcGFuZnJvc3RfYm8geworCWludCBoYW5kbGU7CisJdWludDMyX3Qgb2Zmc2V0Owor CXVpbnQzMl90IHNpemU7CisJdm9pZCAqbWFwOworfTsKKworc3RydWN0IHBhbmZyb3N0X3N1Ym1p dCB7CisJc3RydWN0IGRybV9wYW5mcm9zdF9zdWJtaXQgKmFyZ3M7CisJc3RydWN0IHBhbmZyb3N0 X2JvICpzdWJtaXRfYm87CisJc3RydWN0IHBhbmZyb3N0X2JvICpmYl9ibzsKKwlzdHJ1Y3QgcGFu ZnJvc3RfYm8gKnNjcmF0Y2hwYWRfYm87CisJc3RydWN0IHBhbmZyb3N0X2JvICp0aWxlcl9zY3Jh dGNoX2JvOworCXN0cnVjdCBwYW5mcm9zdF9ibyAqdGlsZXJfaGVhcF9ibzsKKwlzdHJ1Y3QgcGFu ZnJvc3RfYm8gKmZibzsKK307CisKK3N0cnVjdCBwYW5mcm9zdF9ibyAqaWd0X3BhbmZyb3N0X2dl bV9uZXcoaW50IGZkLCBzaXplX3Qgc2l6ZSk7Cit2b2lkIGlndF9wYW5mcm9zdF9mcmVlX2JvKGlu dCBmZCwgc3RydWN0IHBhbmZyb3N0X2JvICpibyk7CisKK3N0cnVjdCBwYW5mcm9zdF9zdWJtaXQg KmlndF9wYW5mcm9zdF90cml2aWFsX2pvYihpbnQgZmQsIGJvb2wgZG9fY3Jhc2gsIGludCB3aWR0 aCwgaW50IGhlaWdodCwgdWludDMyX3QgY29sb3IpOwordm9pZCBpZ3RfcGFuZnJvc3RfZnJlZV9q b2IoaW50IGZkLCBzdHJ1Y3QgcGFuZnJvc3Rfc3VibWl0ICpzdWJtaXQpOworCisvKiBJT0NUTCB3 cmFwcGVycyAqLwordWludDMyX3QgaWd0X3BhbmZyb3N0X2dldF9ib19vZmZzZXQoaW50IGZkLCB1 aW50MzJfdCBoYW5kbGUpOwordWludDMyX3QgaWd0X3BhbmZyb3N0X2dldF9wYXJhbShpbnQgZmQs IGludCBwYXJhbSk7Cit2b2lkICppZ3RfcGFuZnJvc3RfbW1hcF9ibyhpbnQgZmQsIHVpbnQzMl90 IGhhbmRsZSwgdWludDMyX3Qgc2l6ZSwgdW5zaWduZWQgcHJvdCk7CisKK3ZvaWQgaWd0X3BhbmZy b3N0X2JvX21tYXAoaW50IGZkLCBzdHJ1Y3QgcGFuZnJvc3RfYm8gKmJvKTsKKworI2VuZGlmIC8q IElHVF9QQU5GUk9TVF9IICovCmRpZmYgLS1naXQgYS9saWIvbWVzb24uYnVpbGQgYi9saWIvbWVz b24uYnVpbGQKaW5kZXggNzg2ZTdhMjY0Zjk3Li44MDczNjg2ODY3ZDQgMTAwNjQ0Ci0tLSBhL2xp Yi9tZXNvbi5idWlsZAorKysgYi9saWIvbWVzb24uYnVpbGQKQEAgLTUyLDYgKzUyLDcgQEAgbGli X3NvdXJjZXMgPSBbCiAJJ2lndF9kdW1teWxvYWQuYycsCiAJJ3V3aWxkbWF0L3V3aWxkbWF0LmMn LAogCSdpZ3Rfa21vZC5jJywKKwknaWd0X3BhbmZyb3N0LmMnLAogCSdpZ3RfdjNkLmMnLAogCSdp Z3RfdmM0LmMnLAogCSdpZ3RfcHNyLmMnLApkaWZmIC0tZ2l0IGEvbGliL3BhbmZyb3N0LWpvYi5o IGIvbGliL3BhbmZyb3N0LWpvYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwMC4uODVlZjAyZDA0ZTA3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3BhbmZyb3N0LWpvYi5o CkBAIC0wLDAgKzEsMTUxNiBAQAorLyoKKyAqIMKpIENvcHlyaWdodCAyMDE3LTIwMTggQWx5c3Nh IFJvc2VuendlaWcKKyAqIMKpIENvcHlyaWdodCAyMDE3LTIwMTggQ29ubm9yIEFiYm90dAorICog wqkgQ29weXJpZ2h0IDIwMTctMjAxOCBMeXVkZSBQYXVsCisgKgorICogUGVybWlzc2lvbiBpcyBo ZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEK KyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZp bGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0 IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRz IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGlj ZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJt aXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNv LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUg Y29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRo ZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Ig c3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09G VFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwg RVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUg V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRI RSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBE QU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENP TlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElO IENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5H UyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworCisjaWZuZGVmIF9fUEFORlJPU1RfSk9C X0hfXworI2RlZmluZSBfX1BBTkZST1NUX0pPQl9IX18KKworI2luY2x1ZGUgPHN0ZGludC5oPgor I2luY2x1ZGUgPHBhbmZyb3N0LW1pc2MuaD4KKworI2RlZmluZSBNQUxJX1NIT1JUX1BUUl9CSVRT IChzaXplb2YodWludHB0cl90KSo4KQorCisjZGVmaW5lIE1BTElfRkJEX0hJRVJBUkNIWV9XRUlH SFRTIDgKKworI2RlZmluZSBNQUxJX1BBWUxPQURfU0laRSAyNTYKKwordHlwZWRlZiB1MzIgbWFs aV9qZF9jb3JlX3JlcTsKKworZW51bSBtYWxpX2pvYl90eXBlIHsKKyAgICAgICAgSk9CX05PVF9T VEFSVEVECT0gMCwKKyAgICAgICAgSk9CX1RZUEVfTlVMTCA9IDEsCisgICAgICAgIEpPQl9UWVBF X1NFVF9WQUxVRSA9IDIsCisgICAgICAgIEpPQl9UWVBFX0NBQ0hFX0ZMVVNIID0gMywKKyAgICAg ICAgSk9CX1RZUEVfQ09NUFVURSA9IDQsCisgICAgICAgIEpPQl9UWVBFX1ZFUlRFWCA9IDUsCisg ICAgICAgIEpPQl9UWVBFX0dFT01FVFJZID0gNiwKKyAgICAgICAgSk9CX1RZUEVfVElMRVIgPSA3 LAorICAgICAgICBKT0JfVFlQRV9GVVNFRCA9IDgsCisgICAgICAgIEpPQl9UWVBFX0ZSQUdNRU5U ID0gOSwKK307CisKK2VudW0gbWFsaV9kcmF3X21vZGUgeworICAgICAgICBNQUxJX0RSQVdfTk9O RSAgICAgID0gMHgwLAorICAgICAgICBNQUxJX1BPSU5UUyAgICAgICAgID0gMHgxLAorICAgICAg ICBNQUxJX0xJTkVTICAgICAgICAgID0gMHgyLAorICAgICAgICBNQUxJX0xJTkVfU1RSSVAgICAg ID0gMHg0LAorICAgICAgICBNQUxJX0xJTkVfTE9PUCAgICAgID0gMHg2LAorICAgICAgICBNQUxJ X1RSSUFOR0xFUyAgICAgID0gMHg4LAorICAgICAgICBNQUxJX1RSSUFOR0xFX1NUUklQID0gMHhB LAorICAgICAgICBNQUxJX1RSSUFOR0xFX0ZBTiAgID0gMHhDLAorICAgICAgICBNQUxJX1BPTFlH T04gICAgICAgID0gMHhELAorICAgICAgICBNQUxJX1FVQURTICAgICAgICAgID0gMHhFLAorICAg ICAgICBNQUxJX1FVQURfU1RSSVAgICAgID0gMHhGLAorCisgICAgICAgIC8qIEFsbCBvdGhlciBt b2RlcyBpbnZhbGlkICovCit9OworCisvKiBBcHBsaWVzIHRvIHRpbGVyX2dsX2VuYWJsZXMgKi8K KworCisjZGVmaW5lIE1BTElfT0NDTFVTSU9OX1FVRVJZICAgICgxIDw8IDMpCisjZGVmaW5lIE1B TElfT0NDTFVTSU9OX1BSRUNJU0UgICgxIDw8IDQpCisKKyNkZWZpbmUgTUFMSV9GUk9OVF9GQUNF KHYpICAgICAgKHYgPDwgNSkKKyNkZWZpbmUgTUFMSV9DQ1cgKDApCisjZGVmaW5lIE1BTElfQ1cg ICgxKQorCisjZGVmaW5lIE1BTElfQ1VMTF9GQUNFX0ZST05UICAgICgxIDw8IDYpCisjZGVmaW5l IE1BTElfQ1VMTF9GQUNFX0JBQ0sgICAgICgxIDw8IDcpCisKKy8qIFRPRE86IE1pZ2h0IHRoaXMg YWN0dWFsbHkgYmUgYSBmaW5lciBiaXRmaWVsZD8gKi8KKyNkZWZpbmUgTUFMSV9ERVBUSF9TVEVO Q0lMX0VOQUJMRSAweDY0MDAKKworI2RlZmluZSBEU19FTkFCTEUoZmllbGQpIFwKKwkoZmllbGQg PT0gTUFMSV9ERVBUSF9TVEVOQ0lMX0VOQUJMRSkgXAorCT8gIk1BTElfREVQVEhfU1RFTkNJTF9F TkFCTEUiIFwKKwk6IChmaWVsZCA9PSAwKSA/ICIwIiBcCisJOiAiMCAvKiBYWFg6IFVua25vd24s IGNoZWNrIGhleGR1bXAgKi8iCisKKy8qIFVzZWQgaW4gc3RlbmNpbCBhbmQgZGVwdGggdGVzdHMg Ki8KKworZW51bSBtYWxpX2Z1bmMgeworICAgICAgICBNQUxJX0ZVTkNfTkVWRVIgICAgPSAwLAor ICAgICAgICBNQUxJX0ZVTkNfTEVTUyAgICAgPSAxLAorICAgICAgICBNQUxJX0ZVTkNfRVFVQUwg ICAgPSAyLAorICAgICAgICBNQUxJX0ZVTkNfTEVRVUFMICAgPSAzLAorICAgICAgICBNQUxJX0ZV TkNfR1JFQVRFUiAgPSA0LAorICAgICAgICBNQUxJX0ZVTkNfTk9URVFVQUwgPSA1LAorICAgICAg ICBNQUxJX0ZVTkNfR0VRVUFMICAgPSA2LAorICAgICAgICBNQUxJX0ZVTkNfQUxXQVlTICAgPSA3 Cit9OworCisvKiBTYW1lIE9wZW5HTCwgYnV0IG1peGVkIHVwLiBXaHk/IEJlY2F1c2UgZm9yZ2V0 IG1lLCB0aGF0J3Mgd2h5ISAqLworCitlbnVtIG1hbGlfYWx0X2Z1bmMgeworICAgICAgICBNQUxJ X0FMVF9GVU5DX05FVkVSICAgID0gMCwKKyAgICAgICAgTUFMSV9BTFRfRlVOQ19HUkVBVEVSICA9 IDEsCisgICAgICAgIE1BTElfQUxUX0ZVTkNfRVFVQUwgICAgPSAyLAorICAgICAgICBNQUxJX0FM VF9GVU5DX0dFUVVBTCAgID0gMywKKyAgICAgICAgTUFMSV9BTFRfRlVOQ19MRVNTICAgICA9IDQs CisgICAgICAgIE1BTElfQUxUX0ZVTkNfTk9URVFVQUwgPSA1LAorICAgICAgICBNQUxJX0FMVF9G VU5DX0xFUVVBTCAgID0gNiwKKyAgICAgICAgTUFMSV9BTFRfRlVOQ19BTFdBWVMgICA9IDcKK307 CisKKy8qIEZsYWdzIGFwcGx5IHRvIHVua25vd24yXzM/ICovCisKKyNkZWZpbmUgTUFMSV9IQVNf TVNBQQkJKDEgPDwgMCkKKyNkZWZpbmUgTUFMSV9DQU5fRElTQ0FSRCAJKDEgPDwgNSkKKworLyog QXBwbGllcyBvbiBTRkJEIHN5c3RlbXMsIHNwZWNpZnlpbmcgdGhhdCBwcm9ncmFtbWFibGUgYmxl bmRpbmcgaXMgaW4gdXNlICovCisjZGVmaW5lIE1BTElfSEFTX0JMRU5EX1NIQURFUiAJKDEgPDwg NikKKworLyogZnVuYyBpcyBtYWxpX2Z1bmMgKi8KKyNkZWZpbmUgTUFMSV9ERVBUSF9GVU5DKGZ1 bmMpCSAgIChmdW5jIDw8IDgpCisjZGVmaW5lIE1BTElfR0VUX0RFUFRIX0ZVTkMoZmxhZ3MpICgo ZmxhZ3MgPj4gOCkgJiAweDcpCisjZGVmaW5lIE1BTElfREVQVEhfRlVOQ19NQVNLCSAgIE1BTElf REVQVEhfRlVOQygweDcpCisKKyNkZWZpbmUgTUFMSV9ERVBUSF9URVNUCQkoMSA8PCAxMSkKKwor LyogTmV4dCBmbGFncyB0byB1bmtub3duMl80ICovCisjZGVmaW5lIE1BTElfU1RFTkNJTF9URVNU ICAgICAgCSgxIDw8IDApCisKKy8qIFdoYXQ/ISAqLworI2RlZmluZSBNQUxJX1NBTVBMRV9BTFBI QV9UT19DT1ZFUkFHRV9OT19CTEVORF9TSEFERVIgKDEgPDwgMSkKKworI2RlZmluZSBNQUxJX05P X0RJVEhFUgkJKDEgPDwgOSkKKyNkZWZpbmUgTUFMSV9ERVBUSF9SQU5HRV9BCSgxIDw8IDEyKQor I2RlZmluZSBNQUxJX0RFUFRIX1JBTkdFX0IJKDEgPDwgMTMpCisjZGVmaW5lIE1BTElfTk9fTVNB QQkJKDEgPDwgMTQpCisKKy8qIFN0ZW5jaWwgdGVzdCBzdGF0ZSBpcyBhbGwgZW5jb2RlZCBpbiBh IHNpbmdsZSB1MzIsIGp1c3Qgd2l0aCBhIGxvdCBvZgorICogZW51bXMuLi4gKi8KKworZW51bSBt YWxpX3N0ZW5jaWxfb3AgeworICAgICAgICBNQUxJX1NURU5DSUxfS0VFUCAJPSAwLAorICAgICAg ICBNQUxJX1NURU5DSUxfUkVQTEFDRSAJPSAxLAorICAgICAgICBNQUxJX1NURU5DSUxfWkVSTyAJ PSAyLAorICAgICAgICBNQUxJX1NURU5DSUxfSU5WRVJUIAk9IDMsCisgICAgICAgIE1BTElfU1RF TkNJTF9JTkNSX1dSQVAgCT0gNCwKKyAgICAgICAgTUFMSV9TVEVOQ0lMX0RFQ1JfV1JBUCAJPSA1 LAorICAgICAgICBNQUxJX1NURU5DSUxfSU5DUiAJPSA2LAorICAgICAgICBNQUxJX1NURU5DSUxf REVDUiAJPSA3Cit9OworCitzdHJ1Y3QgbWFsaV9zdGVuY2lsX3Rlc3QgeworICAgICAgICB1bnNp Z25lZCByZWYgIAkJCTogODsKKyAgICAgICAgdW5zaWduZWQgbWFzayAJCQk6IDg7CisgICAgICAg IGVudW0gbWFsaV9mdW5jIGZ1bmMgCQk6IDM7CisgICAgICAgIGVudW0gbWFsaV9zdGVuY2lsX29w IHNmYWlsIAk6IDM7CisgICAgICAgIGVudW0gbWFsaV9zdGVuY2lsX29wIGRwZmFpbCAJOiAzOwor ICAgICAgICBlbnVtIG1hbGlfc3RlbmNpbF9vcCBkcHBhc3MgCTogMzsKKyAgICAgICAgdW5zaWdu ZWQgemVybwkJCTogNDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qIEJsZW5kaW5n IGlzIGEgbWVzcywgc2luY2UgYW55dGhpbmcgZmFuY3kgdHJpZ2dlcnMgYSBibGVuZCBzaGFkZXIs IGFuZAorICogLXRob3NlLSBhcmUgbm90IHVuZGVyc3Rvb2Qgd2hhdHNvdmVyIHlldCAqLworCisj ZGVmaW5lIE1BTElfTUFTS19SICgxIDw8IDApCisjZGVmaW5lIE1BTElfTUFTS19HICgxIDw8IDEp CisjZGVmaW5lIE1BTElfTUFTS19CICgxIDw8IDIpCisjZGVmaW5lIE1BTElfTUFTS19BICgxIDw8 IDMpCisKK2VudW0gbWFsaV9ub25kb21pbmFudF9tb2RlIHsKKyAgICAgICAgTUFMSV9CTEVORF9O T05fTUlSUk9SID0gMCwKKyAgICAgICAgTUFMSV9CTEVORF9OT05fWkVSTyA9IDEKK307CisKK2Vu dW0gbWFsaV9kb21pbmFudF9ibGVuZCB7CisgICAgICAgIE1BTElfQkxFTkRfRE9NX1NPVVJDRSA9 IDAsCisgICAgICAgIE1BTElfQkxFTkRfRE9NX0RFU1RJTkFUSU9OICA9IDEKK307CisKK2VudW0g bWFsaV9kb21pbmFudF9mYWN0b3IgeworICAgICAgICBNQUxJX0RPTUlOQU5UX1VOSzAgPSAwLAor ICAgICAgICBNQUxJX0RPTUlOQU5UX1pFUk8gPSAxLAorICAgICAgICBNQUxJX0RPTUlOQU5UX1NS Q19DT0xPUiA9IDIsCisgICAgICAgIE1BTElfRE9NSU5BTlRfRFNUX0NPTE9SID0gMywKKyAgICAg ICAgTUFMSV9ET01JTkFOVF9VTks0ID0gNCwKKyAgICAgICAgTUFMSV9ET01JTkFOVF9TUkNfQUxQ SEEgPSA1LAorICAgICAgICBNQUxJX0RPTUlOQU5UX0RTVF9BTFBIQSA9IDYsCisgICAgICAgIE1B TElfRE9NSU5BTlRfQ09OU1RBTlQgPSA3LAorfTsKKworZW51bSBtYWxpX2JsZW5kX21vZGlmaWVy IHsKKyAgICAgICAgTUFMSV9CTEVORF9NT0RfVU5LMCA9IDAsCisgICAgICAgIE1BTElfQkxFTkRf TU9EX05PUk1BTCA9IDEsCisgICAgICAgIE1BTElfQkxFTkRfTU9EX1NPVVJDRV9PTkUgPSAyLAor ICAgICAgICBNQUxJX0JMRU5EX01PRF9ERVNUX09ORSA9IDMsCit9OworCitzdHJ1Y3QgbWFsaV9i bGVuZF9tb2RlIHsKKyAgICAgICAgZW51bSBtYWxpX2JsZW5kX21vZGlmaWVyIGNsaXBfbW9kaWZp ZXIgOiAyOworICAgICAgICB1bnNpZ25lZCB1bnVzZWRfMCA6IDE7CisgICAgICAgIHVuc2lnbmVk IG5lZ2F0ZV9zb3VyY2UgOiAxOworCisgICAgICAgIGVudW0gbWFsaV9kb21pbmFudF9ibGVuZCBk b21pbmFudCA6IDE7CisKKyAgICAgICAgZW51bSBtYWxpX25vbmRvbWluYW50X21vZGUgbm9uZG9t aW5hbnRfbW9kZSA6IDE7CisKKyAgICAgICAgdW5zaWduZWQgdW51c2VkXzEgOiAxOworCisgICAg ICAgIHVuc2lnbmVkIG5lZ2F0ZV9kZXN0IDogMTsKKworICAgICAgICBlbnVtIG1hbGlfZG9taW5h bnRfZmFjdG9yIGRvbWluYW50X2ZhY3RvciA6IDM7CisgICAgICAgIHVuc2lnbmVkIGNvbXBsZW1l bnRfZG9taW5hbnQgOiAxOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IG1h bGlfYmxlbmRfZXF1YXRpb24geworICAgICAgICAvKiBPZiB0eXBlIG1hbGlfYmxlbmRfbW9kZSAq LworICAgICAgICB1bnNpZ25lZCByZ2JfbW9kZSA6IDEyOworICAgICAgICB1bnNpZ25lZCBhbHBo YV9tb2RlIDogMTI7CisKKyAgICAgICAgdW5zaWduZWQgemVybzEgOiA0OworCisgICAgICAgIC8q IENvcnJlc3BvbmRzIHRvIE1BTElfTUFTS18qIGFib3ZlIGFuZCBnbENvbG9yTWFzayBhcmd1bWVu dHMgKi8KKworICAgICAgICB1bnNpZ25lZCBjb2xvcl9tYXNrIDogNDsKKworICAgICAgICAvKiBB dHRhY2hlZCBjb25zdGFudCBmb3IgQ09OU1RBTlRfQUxQSEEsIGV0YyAqLworCisjaWZuZGVmIEJJ RlJPU1QKKyAgICAgICAgZmxvYXQgY29uc3RhbnQ7CisjZW5kaWYKK30gX19hdHRyaWJ1dGVfXygo cGFja2VkKSk7CisKKy8qIFVzZWQgd2l0aCBjaGFubmVsIHN3aXp6bGluZyAqLworZW51bSBtYWxp X2NoYW5uZWwgeworCU1BTElfQ0hBTk5FTF9SRUQgPSAwLAorCU1BTElfQ0hBTk5FTF9HUkVFTiA9 IDEsCisJTUFMSV9DSEFOTkVMX0JMVUUgPSAyLAorCU1BTElfQ0hBTk5FTF9BTFBIQSA9IDMsCisJ TUFMSV9DSEFOTkVMX1pFUk8gPSA0LAorCU1BTElfQ0hBTk5FTF9PTkUgPSA1LAorCU1BTElfQ0hB Tk5FTF9SRVNFUlZFRF8wID0gNiwKKwlNQUxJX0NIQU5ORUxfUkVTRVJWRURfMSA9IDcsCit9Owor CitzdHJ1Y3QgbWFsaV9jaGFubmVsX3N3aXp6bGUgeworCWVudW0gbWFsaV9jaGFubmVsIHIgOiAz OworCWVudW0gbWFsaV9jaGFubmVsIGcgOiAzOworCWVudW0gbWFsaV9jaGFubmVsIGIgOiAzOwor CWVudW0gbWFsaV9jaGFubmVsIGEgOiAzOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwor LyogQ29tcHJlc3NlZCBwZXItcGl4ZWwgZm9ybWF0cy4gRWFjaCBvZiB0aGVzZSBmb3JtYXRzIGV4 cGFuZHMgdG8gb25lIHRvIGZvdXIKKyAqIGZsb2F0aW5nLXBvaW50IG9yIGludGVnZXIgbnVtYmVy cywgYXMgZGVmaW5lZCBieSB0aGUgT3BlbkdMIHNwZWNpZmljYXRpb24uCisgKiBUaGVyZSBhcmUg dmFyaW91cyBwbGFjZXMgaW4gT3BlbkdMIHdoZXJlIHRoZSB1c2VyIGNhbiBzcGVjaWZ5IGEgY29t cHJlc3NlZAorICogZm9ybWF0IGluIG1lbW9yeSwgd2hpY2ggYWxsIHVzZSB0aGUgc2FtZSA4LWJp dCBlbnVtIGluIHRoZSB2YXJpb3VzCisgKiBkZXNjcmlwdG9ycywgYWx0aG91Z2ggZGlmZmVyZW50 IGhhcmR3YXJlIHVuaXRzIHN1cHBvcnQgZGlmZmVyZW50IGZvcm1hdHMuCisgKi8KKworLyogVGhl IHRvcCAzIGJpdHMgc3BlY2lmeSBob3cgdGhlIGJpdHMgb2YgZWFjaCBjb21wb25lbnQgYXJlIGlu dGVycHJldGVkLiAqLworCisvKiBlLmcuIFIxMUZfRzExRl9CMTBGICovCisjZGVmaW5lIE1BTElf Rk9STUFUX1NQRUNJQUwgKDIgPDwgNSkKKworLyogc2lnbmVkIG5vcm1hbGl6ZWQsIGUuZy4gUkdC QThfU05PUk0gKi8KKyNkZWZpbmUgTUFMSV9GT1JNQVRfU05PUk0gKDMgPDwgNSkKKworLyogZS5n LiBSR0JBOFVJICovCisjZGVmaW5lIE1BTElfRk9STUFUX1VJTlQgKDQgPDwgNSkKKworLyogZS5n LiBSR0JBOCBhbmQgUkdCQTMyRiAqLworI2RlZmluZSBNQUxJX0ZPUk1BVF9VTk9STSAoNSA8PCA1 KQorCisvKiBlLmcuIFJHQkE4SSBhbmQgUkdCQTE2RiAqLworI2RlZmluZSBNQUxJX0ZPUk1BVF9T SU5UICg2IDw8IDUpCisKKy8qIFRoZXNlIGZvcm1hdHMgc2VlbSB0byBsYXJnZWx5IGR1cGxpY2F0 ZSB0aGUgb3RoZXJzLiBUaGV5J3JlIHVzZWQgYXQgbGVhc3QKKyAqIGZvciBCaWZyb3N0IGZyYW1l YnVmZmVyIG91dHB1dC4KKyAqLworI2RlZmluZSBNQUxJX0ZPUk1BVF9TUEVDSUFMMiAoNyA8PCA1 KQorCisvKiBJZiB0aGUgaGlnaCAzIGJpdHMgYXJlIDMgdG8gNiB0aGVzZSB0d28gYml0cyBzYXkg aG93IG1hbnkgY29tcG9uZW50cworICogdGhlcmUgYXJlLgorICovCisjZGVmaW5lIE1BTElfTlJf Q0hBTk5FTFMobikgKChuIC0gMSkgPDwgMykKKworLyogSWYgdGhlIGhpZ2ggMyBiaXRzIGFyZSAz IHRvIDYsIHRoZW4gdGhlIGxvdyAzIGJpdHMgc2F5IGhvdyBiaWcgZWFjaAorICogY29tcG9uZW50 IGlzLCBleGNlcHQgdGhlIHNwZWNpYWwgTUFMSV9DSEFOTkVMX0ZMT0FUIHdoaWNoIG92ZXJyaWRl cyB3aGF0IHRoZQorICogYml0cyBtZWFuLgorICovCisKKyNkZWZpbmUgTUFMSV9DSEFOTkVMXzQg MgorCisjZGVmaW5lIE1BTElfQ0hBTk5FTF84IDMKKworI2RlZmluZSBNQUxJX0NIQU5ORUxfMTYg NAorCisjZGVmaW5lIE1BTElfQ0hBTk5FTF8zMiA1CisKKy8qIEZvciBNQUxJX0ZPUk1BVF9TSU5U IGl0IG1lYW5zIGEgaGFsZi1mbG9hdCAoZS5nLiBSRzE2RikuIEZvcgorICogTUFMSV9GT1JNQVRf VU5PUk0sIGl0IG1lYW5zIGEgMzItYml0IGZsb2F0LgorICovCisjZGVmaW5lIE1BTElfQ0hBTk5F TF9GTE9BVCA3CisKK2VudW0gbWFsaV9mb3JtYXQgeworCU1BTElfUkdCNTY1ICAgICAgICAgPSBN QUxJX0ZPUk1BVF9TUEVDSUFMIHwgMHgwLAorCU1BTElfUkdCNV9BMV9VTk9STSAgPSBNQUxJX0ZP Uk1BVF9TUEVDSUFMIHwgMHgyLAorCU1BTElfUkdCMTBfQTJfVU5PUk0gPSBNQUxJX0ZPUk1BVF9T UEVDSUFMIHwgMHgzLAorCU1BTElfUkdCMTBfQTJfU05PUk0gPSBNQUxJX0ZPUk1BVF9TUEVDSUFM IHwgMHg1LAorCU1BTElfUkdCMTBfQTJVSSAgICAgPSBNQUxJX0ZPUk1BVF9TUEVDSUFMIHwgMHg3 LAorCU1BTElfUkdCMTBfQTJJICAgICAgPSBNQUxJX0ZPUk1BVF9TUEVDSUFMIHwgMHg5LAorCisJ LyogWVVWIGZvcm1hdHMgKi8KKwlNQUxJX05WMTIgICAgICAgICAgID0gTUFMSV9GT1JNQVRfU1BF Q0lBTCB8IDB4YywKKworCU1BTElfWjMyX1VOT1JNICAgICAgPSBNQUxJX0ZPUk1BVF9TUEVDSUFM IHwgMHhELAorCU1BTElfUjMyX0ZJWEVEICAgICAgPSBNQUxJX0ZPUk1BVF9TUEVDSUFMIHwgMHgx MSwKKwlNQUxJX1JHMzJfRklYRUQgICAgID0gTUFMSV9GT1JNQVRfU1BFQ0lBTCB8IDB4MTIsCisJ TUFMSV9SR0IzMl9GSVhFRCAgICA9IE1BTElfRk9STUFUX1NQRUNJQUwgfCAweDEzLAorCU1BTElf UkdCQTMyX0ZJWEVEICAgPSBNQUxJX0ZPUk1BVF9TUEVDSUFMIHwgMHgxNCwKKwlNQUxJX1IxMUZf RzExRl9CMTBGID0gTUFMSV9GT1JNQVRfU1BFQ0lBTCB8IDB4MTksCisJLyogT25seSB1c2VkIGZv ciB2YXJ5aW5ncywgdG8gaW5kaWNhdGUgdGhlIHRyYW5zZm9ybWVkIGdsX1Bvc2l0aW9uICovCisJ TUFMSV9WQVJZSU5HX1BPUyAgICA9IE1BTElfRk9STUFUX1NQRUNJQUwgfCAweDFlLAorCS8qIE9u bHkgdXNlZCBmb3IgdmFyeWluZ3MsIHRvIGluZGljYXRlIHRoYXQgdGhlIHdyaXRlIHNob3VsZCBi ZQorCSAqIGRpc2NhcmRlZC4KKwkgKi8KKwlNQUxJX1ZBUllJTkdfRElTQ0FSRCA9IE1BTElfRk9S TUFUX1NQRUNJQUwgfCAweDFmLAorCisJTUFMSV9SOF9TTk9STSAgICAgPSBNQUxJX0ZPUk1BVF9T Tk9STSB8IE1BTElfTlJfQ0hBTk5FTFMoMSkgfCBNQUxJX0NIQU5ORUxfOCwKKwlNQUxJX1IxNl9T Tk9STSAgICA9IE1BTElfRk9STUFUX1NOT1JNIHwgTUFMSV9OUl9DSEFOTkVMUygxKSB8IE1BTElf Q0hBTk5FTF8xNiwKKwlNQUxJX1IzMl9TTk9STSAgICA9IE1BTElfRk9STUFUX1NOT1JNIHwgTUFM SV9OUl9DSEFOTkVMUygxKSB8IE1BTElfQ0hBTk5FTF8zMiwKKwlNQUxJX1JHOF9TTk9STSAgICA9 IE1BTElfRk9STUFUX1NOT1JNIHwgTUFMSV9OUl9DSEFOTkVMUygyKSB8IE1BTElfQ0hBTk5FTF84 LAorCU1BTElfUkcxNl9TTk9STSAgID0gTUFMSV9GT1JNQVRfU05PUk0gfCBNQUxJX05SX0NIQU5O RUxTKDIpIHwgTUFMSV9DSEFOTkVMXzE2LAorCU1BTElfUkczMl9TTk9STSAgID0gTUFMSV9GT1JN QVRfU05PUk0gfCBNQUxJX05SX0NIQU5ORUxTKDIpIHwgTUFMSV9DSEFOTkVMXzMyLAorCU1BTElf UkdCOF9TTk9STSAgID0gTUFMSV9GT1JNQVRfU05PUk0gfCBNQUxJX05SX0NIQU5ORUxTKDMpIHwg TUFMSV9DSEFOTkVMXzgsCisJTUFMSV9SR0IxNl9TTk9STSAgPSBNQUxJX0ZPUk1BVF9TTk9STSB8 IE1BTElfTlJfQ0hBTk5FTFMoMykgfCBNQUxJX0NIQU5ORUxfMTYsCisJTUFMSV9SR0IzMl9TTk9S TSAgPSBNQUxJX0ZPUk1BVF9TTk9STSB8IE1BTElfTlJfQ0hBTk5FTFMoMykgfCBNQUxJX0NIQU5O RUxfMzIsCisJTUFMSV9SR0JBOF9TTk9STSAgPSBNQUxJX0ZPUk1BVF9TTk9STSB8IE1BTElfTlJf Q0hBTk5FTFMoNCkgfCBNQUxJX0NIQU5ORUxfOCwKKwlNQUxJX1JHQkExNl9TTk9STSA9IE1BTElf Rk9STUFUX1NOT1JNIHwgTUFMSV9OUl9DSEFOTkVMUyg0KSB8IE1BTElfQ0hBTk5FTF8xNiwKKwlN QUxJX1JHQkEzMl9TTk9STSA9IE1BTElfRk9STUFUX1NOT1JNIHwgTUFMSV9OUl9DSEFOTkVMUyg0 KSB8IE1BTElfQ0hBTk5FTF8zMiwKKworCU1BTElfUjhVSSAgICAgPSBNQUxJX0ZPUk1BVF9VSU5U IHwgTUFMSV9OUl9DSEFOTkVMUygxKSB8IE1BTElfQ0hBTk5FTF84LAorCU1BTElfUjE2VUkgICAg PSBNQUxJX0ZPUk1BVF9VSU5UIHwgTUFMSV9OUl9DSEFOTkVMUygxKSB8IE1BTElfQ0hBTk5FTF8x NiwKKwlNQUxJX1IzMlVJICAgID0gTUFMSV9GT1JNQVRfVUlOVCB8IE1BTElfTlJfQ0hBTk5FTFMo MSkgfCBNQUxJX0NIQU5ORUxfMzIsCisJTUFMSV9SRzhVSSAgICA9IE1BTElfRk9STUFUX1VJTlQg fCBNQUxJX05SX0NIQU5ORUxTKDIpIHwgTUFMSV9DSEFOTkVMXzgsCisJTUFMSV9SRzE2VUkgICA9 IE1BTElfRk9STUFUX1VJTlQgfCBNQUxJX05SX0NIQU5ORUxTKDIpIHwgTUFMSV9DSEFOTkVMXzE2 LAorCU1BTElfUkczMlVJICAgPSBNQUxJX0ZPUk1BVF9VSU5UIHwgTUFMSV9OUl9DSEFOTkVMUygy KSB8IE1BTElfQ0hBTk5FTF8zMiwKKwlNQUxJX1JHQjhVSSAgID0gTUFMSV9GT1JNQVRfVUlOVCB8 IE1BTElfTlJfQ0hBTk5FTFMoMykgfCBNQUxJX0NIQU5ORUxfOCwKKwlNQUxJX1JHQjE2VUkgID0g TUFMSV9GT1JNQVRfVUlOVCB8IE1BTElfTlJfQ0hBTk5FTFMoMykgfCBNQUxJX0NIQU5ORUxfMTYs CisJTUFMSV9SR0IzMlVJICA9IE1BTElfRk9STUFUX1VJTlQgfCBNQUxJX05SX0NIQU5ORUxTKDMp IHwgTUFMSV9DSEFOTkVMXzMyLAorCU1BTElfUkdCQThVSSAgPSBNQUxJX0ZPUk1BVF9VSU5UIHwg TUFMSV9OUl9DSEFOTkVMUyg0KSB8IE1BTElfQ0hBTk5FTF84LAorCU1BTElfUkdCQTE2VUkgPSBN QUxJX0ZPUk1BVF9VSU5UIHwgTUFMSV9OUl9DSEFOTkVMUyg0KSB8IE1BTElfQ0hBTk5FTF8xNiwK KwlNQUxJX1JHQkEzMlVJID0gTUFMSV9GT1JNQVRfVUlOVCB8IE1BTElfTlJfQ0hBTk5FTFMoNCkg fCBNQUxJX0NIQU5ORUxfMzIsCisKKwlNQUxJX1I4X1VOT1JNID0gTUFMSV9GT1JNQVRfVU5PUk0g fCBNQUxJX05SX0NIQU5ORUxTKDEpIHwgTUFMSV9DSEFOTkVMXzgsCisJTUFMSV9SMTZfVU5PUk0g PSBNQUxJX0ZPUk1BVF9VTk9STSB8IE1BTElfTlJfQ0hBTk5FTFMoMSkgfCBNQUxJX0NIQU5ORUxf MTYsCisJTUFMSV9SMzJfVU5PUk0gPSBNQUxJX0ZPUk1BVF9VTk9STSB8IE1BTElfTlJfQ0hBTk5F TFMoMSkgfCBNQUxJX0NIQU5ORUxfMzIsCisJTUFMSV9SMzJGID0gTUFMSV9GT1JNQVRfVU5PUk0g fCBNQUxJX05SX0NIQU5ORUxTKDEpIHwgTUFMSV9DSEFOTkVMX0ZMT0FULAorCU1BTElfUkc4X1VO T1JNICAgID0gTUFMSV9GT1JNQVRfVU5PUk0gfCBNQUxJX05SX0NIQU5ORUxTKDIpIHwgTUFMSV9D SEFOTkVMXzgsCisJTUFMSV9SRzE2X1VOT1JNICAgPSBNQUxJX0ZPUk1BVF9VTk9STSB8IE1BTElf TlJfQ0hBTk5FTFMoMikgfCBNQUxJX0NIQU5ORUxfMTYsCisJTUFMSV9SRzMyX1VOT1JNICAgPSBN QUxJX0ZPUk1BVF9VTk9STSB8IE1BTElfTlJfQ0hBTk5FTFMoMikgfCBNQUxJX0NIQU5ORUxfMzIs CisJTUFMSV9SRzMyRiA9IE1BTElfRk9STUFUX1VOT1JNIHwgTUFMSV9OUl9DSEFOTkVMUygyKSB8 IE1BTElfQ0hBTk5FTF9GTE9BVCwKKwlNQUxJX1JHQjhfVU5PUk0gICA9IE1BTElfRk9STUFUX1VO T1JNIHwgTUFMSV9OUl9DSEFOTkVMUygzKSB8IE1BTElfQ0hBTk5FTF84LAorCU1BTElfUkdCMTZf VU5PUk0gID0gTUFMSV9GT1JNQVRfVU5PUk0gfCBNQUxJX05SX0NIQU5ORUxTKDMpIHwgTUFMSV9D SEFOTkVMXzE2LAorCU1BTElfUkdCMzJfVU5PUk0gID0gTUFMSV9GT1JNQVRfVU5PUk0gfCBNQUxJ X05SX0NIQU5ORUxTKDMpIHwgTUFMSV9DSEFOTkVMXzMyLAorCU1BTElfUkdCMzJGID0gTUFMSV9G T1JNQVRfVU5PUk0gfCBNQUxJX05SX0NIQU5ORUxTKDMpIHwgTUFMSV9DSEFOTkVMX0ZMT0FULAor CU1BTElfUkdCQTRfVU5PUk0gID0gTUFMSV9GT1JNQVRfVU5PUk0gfCBNQUxJX05SX0NIQU5ORUxT KDQpIHwgTUFMSV9DSEFOTkVMXzQsCisJTUFMSV9SR0JBOF9VTk9STSAgPSBNQUxJX0ZPUk1BVF9V Tk9STSB8IE1BTElfTlJfQ0hBTk5FTFMoNCkgfCBNQUxJX0NIQU5ORUxfOCwKKwlNQUxJX1JHQkEx Nl9VTk9STSA9IE1BTElfRk9STUFUX1VOT1JNIHwgTUFMSV9OUl9DSEFOTkVMUyg0KSB8IE1BTElf Q0hBTk5FTF8xNiwKKwlNQUxJX1JHQkEzMl9VTk9STSA9IE1BTElfRk9STUFUX1VOT1JNIHwgTUFM SV9OUl9DSEFOTkVMUyg0KSB8IE1BTElfQ0hBTk5FTF8zMiwKKwlNQUxJX1JHQkEzMkYgPSBNQUxJ X0ZPUk1BVF9VTk9STSB8IE1BTElfTlJfQ0hBTk5FTFMoNCkgfCBNQUxJX0NIQU5ORUxfRkxPQVQs CisKKwlNQUxJX1I4SSAgICAgPSBNQUxJX0ZPUk1BVF9TSU5UIHwgTUFMSV9OUl9DSEFOTkVMUygx KSB8IE1BTElfQ0hBTk5FTF84LAorCU1BTElfUjE2SSAgICA9IE1BTElfRk9STUFUX1NJTlQgfCBN QUxJX05SX0NIQU5ORUxTKDEpIHwgTUFMSV9DSEFOTkVMXzE2LAorCU1BTElfUjMySSAgICA9IE1B TElfRk9STUFUX1NJTlQgfCBNQUxJX05SX0NIQU5ORUxTKDEpIHwgTUFMSV9DSEFOTkVMXzMyLAor CU1BTElfUjE2RiAgICA9IE1BTElfRk9STUFUX1NJTlQgfCBNQUxJX05SX0NIQU5ORUxTKDEpIHwg TUFMSV9DSEFOTkVMX0ZMT0FULAorCU1BTElfUkc4SSAgICA9IE1BTElfRk9STUFUX1NJTlQgfCBN QUxJX05SX0NIQU5ORUxTKDIpIHwgTUFMSV9DSEFOTkVMXzgsCisJTUFMSV9SRzE2SSAgID0gTUFM SV9GT1JNQVRfU0lOVCB8IE1BTElfTlJfQ0hBTk5FTFMoMikgfCBNQUxJX0NIQU5ORUxfMTYsCisJ TUFMSV9SRzMySSAgID0gTUFMSV9GT1JNQVRfU0lOVCB8IE1BTElfTlJfQ0hBTk5FTFMoMikgfCBN QUxJX0NIQU5ORUxfMzIsCisJTUFMSV9SRzE2RiAgID0gTUFMSV9GT1JNQVRfU0lOVCB8IE1BTElf TlJfQ0hBTk5FTFMoMikgfCBNQUxJX0NIQU5ORUxfRkxPQVQsCisJTUFMSV9SR0I4SSAgID0gTUFM SV9GT1JNQVRfU0lOVCB8IE1BTElfTlJfQ0hBTk5FTFMoMykgfCBNQUxJX0NIQU5ORUxfOCwKKwlN QUxJX1JHQjE2SSAgPSBNQUxJX0ZPUk1BVF9TSU5UIHwgTUFMSV9OUl9DSEFOTkVMUygzKSB8IE1B TElfQ0hBTk5FTF8xNiwKKwlNQUxJX1JHQjMySSAgPSBNQUxJX0ZPUk1BVF9TSU5UIHwgTUFMSV9O Ul9DSEFOTkVMUygzKSB8IE1BTElfQ0hBTk5FTF8zMiwKKwlNQUxJX1JHQjE2RiAgPSBNQUxJX0ZP Uk1BVF9TSU5UIHwgTUFMSV9OUl9DSEFOTkVMUygzKSB8IE1BTElfQ0hBTk5FTF9GTE9BVCwKKwlN QUxJX1JHQkE4SSAgPSBNQUxJX0ZPUk1BVF9TSU5UIHwgTUFMSV9OUl9DSEFOTkVMUyg0KSB8IE1B TElfQ0hBTk5FTF84LAorCU1BTElfUkdCQTE2SSA9IE1BTElfRk9STUFUX1NJTlQgfCBNQUxJX05S X0NIQU5ORUxTKDQpIHwgTUFMSV9DSEFOTkVMXzE2LAorCU1BTElfUkdCQTMySSA9IE1BTElfRk9S TUFUX1NJTlQgfCBNQUxJX05SX0NIQU5ORUxTKDQpIHwgTUFMSV9DSEFOTkVMXzMyLAorCU1BTElf UkdCQTE2RiA9IE1BTElfRk9STUFUX1NJTlQgfCBNQUxJX05SX0NIQU5ORUxTKDQpIHwgTUFMSV9D SEFOTkVMX0ZMT0FULAorCisJTUFMSV9SR0JBNCAgICAgID0gTUFMSV9GT1JNQVRfU1BFQ0lBTDIg fCAweDgsCisJTUFMSV9SR0JBOF8yICAgID0gTUFMSV9GT1JNQVRfU1BFQ0lBTDIgfCAweGQsCisJ TUFMSV9SR0IxMF9BMl8yID0gTUFMSV9GT1JNQVRfU1BFQ0lBTDIgfCAweGUsCit9OworCisKKy8q IEFscGhhIGNvdmVyYWdlIGlzIGVuY29kZWQgYXMgNC1iaXRzIChmcm9tIGEgY2xhbXBmKSwgd2l0 aCBpbnZlcnNpb24KKyAqIGxpdGVyYWxseSBwZXJmb3JtaW5nIGEgYml0d2lzZSBpbnZlcnQuIFRo aXMgZnVuY3Rpb24gcHJvZHVjZXMgc2xpZ2h0bHkgd3JvbmcKKyAqIHJlc3VsdHMgYW5kIEknbSBu b3Qgc3VyZSB3aHk7IHNvbWUgcm91bmRpbmcgaXNzdWUgSSBzdXBwb3NlLi4uICovCisKKyNkZWZp bmUgTUFMSV9BTFBIQV9DT1ZFUkFHRShjbGFtcGYpICgodWludDE2X3QpIChpbnQpIChjbGFtcGYg KiAxNS4wZikpCisjZGVmaW5lIE1BTElfR0VUX0FMUEhBX0NPVkVSQUdFKG5pYmJsZSkgKChmbG9h dCkgbmliYmxlIC8gMTUuMGYpCisKKy8qIEFwcGxpZXMgdG8gdW5rbm93bjEgKi8KKyNkZWZpbmUg TUFMSV9OT19BTFBIQV9UT19DT1ZFUkFHRSAoMSA8PCAxMCkKKworc3RydWN0IG1hbGlfYmxlbmRf bWV0YSB7CisjaWZuZGVmIEJJRlJPU1QKKyAgICAgICAgLyogQmFzZSB2YWx1ZSBvZiAweDIwMC4K KyAgICAgICAgICogT1Igd2l0aCAweDEgZm9yIGJsZW5kaW5nIChhbnl0aGluZyBvdGhlciB0aGFu IFJFUExBQ0UpLgorICAgICAgICAgKiBPUiB3aXRoIDB4MiBmb3IgcHJvZ3JhbW1hYmxlIGJsZW5k aW5nCisgICAgICAgICAqLworCisgICAgICAgIHU2NCB1bmsxOworCisgICAgICAgIC8qIEZvciBw cm9ncmFtbWFibGUgYmxlbmRpbmcsIHRoZXNlIHR1cm4gaW50byB0aGUgYmxlbmRfc2hhZGVyIGFk ZHJlc3MgKi8KKyAgICAgICAgc3RydWN0IG1hbGlfYmxlbmRfZXF1YXRpb24gYmxlbmRfZXF1YXRp b25fMTsKKworICAgICAgICB1NjQgemVybzI7CisgICAgICAgIHN0cnVjdCBtYWxpX2JsZW5kX2Vx dWF0aW9uIGJsZW5kX2VxdWF0aW9uXzI7CisjZWxzZQorICAgICAgICB1MzIgdW5rMTsgLy8gPSAw eDIwMAorICAgICAgICBzdHJ1Y3QgbWFsaV9ibGVuZF9lcXVhdGlvbiBibGVuZF9lcXVhdGlvbjsK KyAgICAgICAgLyoKKyAgICAgICAgICogLSAweDE5IG5vcm1hbGx5CisgICAgICAgICAqIC0gMHgz IHdoZW4gdGhpcyBzbG90IGlzIHVudXNlZCAoZXZlcnl0aGluZyBlbHNlIGlzIDAgZXhjZXB0IHRo ZSBpbmRleCkKKyAgICAgICAgICogLSAweDExIHdoZW4gdGhpcyBpcyB0aGUgZm91cnRoIHNsb3Qg KGFuZCBpdCdzIHVzZWQpCisrCSAqIC0gMCB3aGVuIHRoZXJlIGlzIGEgYmxlbmQgc2hhZGVyCisg ICAgICAgICAqLworICAgICAgICB1MTYgdW5rMjsKKyAgICAgICAgLyogaW5jcmVtZW50cyBmcm9t IDAgdG8gMyAqLworICAgICAgICB1MTYgaW5kZXg7CisKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJ CQkvKiBTbyBmYXIsIEkndmUgb25seSBzZWVuOgorCQkJICogLSBSMDAxIGZvciAxLWNvbXBvbmVu dCBmb3JtYXRzCisJCQkgKiAtIFJHMDEgZm9yIDItY29tcG9uZW50IGZvcm1hdHMKKwkJCSAqIC0g UkdCMSBmb3IgMy1jb21wb25lbnQgZm9ybWF0cworCQkJICogLSBSR0JBIGZvciA0LWNvbXBvbmVu dCBmb3JtYXRzCisJCQkgKi8KKwkJCXUzMiBzd2l6emxlIDogMTI7CisJCQllbnVtIG1hbGlfZm9y bWF0IGZvcm1hdCA6IDg7CisKKwkJCS8qIFR5cGUgb2YgdGhlIHNoYWRlciBvdXRwdXQgdmFyaWFi bGUuIE5vdGUsIHRoaXMgY2FuCisJCQkgKiBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgZm9ybWF0Lgor CQkJICoKKwkJCSAqIDA6IGYxNiAobWVkaXVtcCBmbG9hdCkKKwkJCSAqIDE6IGYzMiAoaGlnaHAg ZmxvYXQpCisJCQkgKiAyOiBpMzIgKGhpZ2hwIGludCkKKwkJCSAqIDM6IHUzMiAoaGlnaHAgdWlu dCkKKwkJCSAqIDQ6IGkxNiAobWVkaXVtcCBpbnQpCisJCQkgKiA1OiB1MTYgKG1lZGl1bXAgdWlu dCkKKwkJCSAqLworCQkJdTMyIHNoYWRlcl90eXBlIDogMzsKKwkJCXUzMiB6ZXJvIDogOTsKKwkJ fTsKKworCQkvKiBPbmx5IHRoZSBsb3cgMzIgYml0cyBvZiB0aGUgYmxlbmQgc2hhZGVyIGFyZSBz dG9yZWQsIHRoZQorCQkgKiBoaWdoIDMyIGJpdHMgYXJlIGltcGxpY2l0bHkgdGhlIHNhbWUgYXMg dGhlIG9yaWdpbmFsIHNoYWRlci4KKwkJICogQWNjb3JkaW5nIHRvIHRoZSBrZXJuZWwgZHJpdmVy LCB0aGUgcHJvZ3JhbSBjb3VudGVyIGZvcgorCQkgKiBzaGFkZXJzIGlzIGFjdHVhbGx5IG9ubHkg MjQgYml0cywgc28gc2hhZGVycyBjYW5ub3QgY3Jvc3MKKwkJICogdGhlIDJeMjQtYnl0ZSBib3Vu ZGFyeSwgYW5kIG5laXRoZXIgY2FuIHRoZSBibGVuZCBzaGFkZXIuCisJCSAqIFRoZSBibG9iIGhh bmRsZXMgdGhpcyBieSBhbGxvY2F0aW5nIGEgMl4yNCBieXRlIHBvb2wgZm9yCisJCSAqIHNoYWRl cnMsIGFuZCBtYWtpbmcgc3VyZSB0aGF0IGFueSBibGVuZCBzaGFkZXJzIGFyZSBzdG9yZWQKKwkJ ICogaW4gdGhlIHNhbWUgcG9vbCBhcyB0aGUgb3JpZ2luYWwgc2hhZGVyLiBUaGUga2VybmVsIHdp bGwKKwkJICogbWFrZSBzdXJlIHRoaXMgYWxsb2NhdGlvbiBpcyBhbGlnbmVkIHRvIDJeMjQgYnl0 ZXMuCisJCSAqLworCQl1MzIgYmxlbmRfc2hhZGVyOworCX07CisjZW5kaWYKK30gX19hdHRyaWJ1 dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBtYWxpX3NoYWRlcl9tZXRhIHsKKyAgICAgICAgbWFs aV9wdHIgc2hhZGVyOworICAgICAgICB1MTYgdGV4dHVyZV9jb3VudDsKKyAgICAgICAgdTE2IHNh bXBsZXJfY291bnQ7CisgICAgICAgIHUxNiBhdHRyaWJ1dGVfY291bnQ7CisgICAgICAgIHUxNiB2 YXJ5aW5nX2NvdW50OworCisgICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgICAgICBzdHJ1Y3Qg eworICAgICAgICAgICAgICAgICAgICAgICAgdTMyIHVuaWZvcm1fYnVmZmVyX2NvdW50IDogNDsK KyAgICAgICAgICAgICAgICAgICAgICAgIHUzMiB1bmsxIDogMjg7IC8vID0gMHg4MDAwMDAgZm9y IHZlcnRleCwgMHg5NTgwMjAgZm9yIHRpbGVyCisgICAgICAgICAgICAgICAgfSBiaWZyb3N0MTsK KyAgICAgICAgICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgICAgICAgICAgICAgLyogMHgy MDAgZXhjZXB0IE1BTElfTk9fQUxQSEFfVE9fQ09WRVJBR0UuIE15c3RlcmlvdXMgMQorICAgICAg ICAgICAgICAgICAgICAgICAgICogb3RoZXIgdGltZXMuIFdobyBrbm93cyByZWFsbHk/ICovCisg ICAgICAgICAgICAgICAgICAgICAgICB1MTYgdW5rbm93bjE7CisKKyAgICAgICAgICAgICAgICAg ICAgICAgIC8qIFdob2xlIG51bWJlciBvZiB1bmlmb3JtIHJlZ2lzdGVycyB1c2VkLCB0aW1lcyB0 d287CisgICAgICAgICAgICAgICAgICAgICAgICAgKiB3aG9sZSBudW1iZXIgb2Ygd29yayByZWdp c3RlcnMgdXNlZCAobm8gc2NhbGUpLgorICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAg ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCB3b3JrX2NvdW50IDogNTsKKyAgICAgICAgICAg ICAgICAgICAgICAgIHVuc2lnbmVkIHVuaWZvcm1fY291bnQgOiA1OworICAgICAgICAgICAgICAg ICAgICAgICAgdW5zaWduZWQgdW5rbm93bjIgOiA2OworICAgICAgICAgICAgICAgIH0gbWlkZ2Fy ZDE7CisgICAgICAgIH07CisKKyAgICAgICAgLyogT24gYmlmcm9zdDogRXhhY3RseSB0aGUgc2Ft ZSBhcyBnbFBvbHlnb25PZmZzZXQoKSBmb3IgYm90aC4KKyAgICAgICAgICogT24gbWlkZ2FyZDog RGVwdGggZmFjdG9yIGlzIGV4YWN0bHkgYXMgcGFzc2VkIHRvIGdsUG9seWdvbk9mZnNldC4KKyAg ICAgICAgICogRGVwdGggdW5pdHMgaXMgZXF1YWwgdG8gdGhlIHZhbHVlIHBhc3NlZCB0byBnbERl cHRPaGZmc2V0ICsgMS4wZgorICAgICAgICAgKiAodXNlIE1BTElfTkVHQVRJVkUpCisgICAgICAg ICAqLworICAgICAgICBmbG9hdCBkZXB0aF91bml0czsKKyAgICAgICAgZmxvYXQgZGVwdGhfZmFj dG9yOworCisgICAgICAgIHUzMiB1bmtub3duMl8yOworCisgICAgICAgIHUxNiBhbHBoYV9jb3Zl cmFnZTsKKyAgICAgICAgdTE2IHVua25vd24yXzM7CisKKyAgICAgICAgdTggc3RlbmNpbF9tYXNr X2Zyb250OworICAgICAgICB1OCBzdGVuY2lsX21hc2tfYmFjazsKKyAgICAgICAgdTE2IHVua25v d24yXzQ7CisKKyAgICAgICAgc3RydWN0IG1hbGlfc3RlbmNpbF90ZXN0IHN0ZW5jaWxfZnJvbnQ7 CisgICAgICAgIHN0cnVjdCBtYWxpX3N0ZW5jaWxfdGVzdCBzdGVuY2lsX2JhY2s7CisKKyAgICAg ICAgdW5pb24geworICAgICAgICAgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICAgICAgICAg ICAgICB1MzIgdW5rMyA6IDc7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBPbiBCaWZyb3N0 LCBzb21lIHN5c3RlbSB2YWx1ZXMgYXJlIHByZWxvYWRlZCBpbgorICAgICAgICAgICAgICAgICAg ICAgICAgICogcmVnaXN0ZXJzIFI1NS1SNjIgYnkgdGhlIHRocmVhZCBkaXNwYXRjaGVyIHByaW9y IHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgKiB0aGUgc3RhcnQgb2Ygc2hhZGVyIGV4ZWN1 dGlvbi4gVGhpcyBpcyBhIGJpdGZpZWxkCisgICAgICAgICAgICAgICAgICAgICAgICAgKiB3aXRo IG9uZSBlbnRyeSBmb3IgZWFjaCByZWdpc3RlciBzYXlpbmcgd2hpY2gKKyAgICAgICAgICAgICAg ICAgICAgICAgICAqIHJlZ2lzdGVycyBuZWVkIHRvIGJlIHByZWxvYWRlZC4gUmlnaHQgbm93LCB0 aGUga25vd24KKyAgICAgICAgICAgICAgICAgICAgICAgICAqIHZhbHVlcyBhcmU6CisgICAgICAg ICAgICAgICAgICAgICAgICAgKgorICAgICAgICAgICAgICAgICAgICAgICAgICogVmVydGV4L2Nv bXB1dGU6CisgICAgICAgICAgICAgICAgICAgICAgICAgKiAtIFI1NSA6IGdsX0xvY2FsSW52b2Nh dGlvbklELnh5CisgICAgICAgICAgICAgICAgICAgICAgICAgKiAtIFI1NiA6IGdsX0xvY2FsSW52 b2NhdGlvbklELnogKyB1bmtub3duIGluIGhpZ2ggMTYgYml0cworICAgICAgICAgICAgICAgICAg ICAgICAgICogLSBSNTcgOiBnbF9Xb3JrR3JvdXBJRC54CisgICAgICAgICAgICAgICAgICAgICAg ICAgKiAtIFI1OCA6IGdsX1dvcmtHcm91cElELnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAq IC0gUjU5IDogZ2xfV29ya0dyb3VwSUQuegorICAgICAgICAgICAgICAgICAgICAgICAgICogLSBS NjAgOiBnbF9HbG9iYWxJbnZvY2F0aW9uSUQueAorICAgICAgICAgICAgICAgICAgICAgICAgICog LSBSNjEgOiBnbF9HbG9iYWxJbnZvY2F0aW9uSUQueS9nbF9WZXJ0ZXhJRCAod2l0aG91dCBiYXNl KQorICAgICAgICAgICAgICAgICAgICAgICAgICogLSBSNjIgOiBnbF9HbG9iYWxJbnZvY2F0aW9u SUQuei9nbF9JbnN0YW5jZUlEICh3aXRob3V0IGJhc2UpCisgICAgICAgICAgICAgICAgICAgICAg ICAgKgorICAgICAgICAgICAgICAgICAgICAgICAgICogRnJhZ21lbnQ6CisgICAgICAgICAgICAg ICAgICAgICAgICAgKiAtIFI1NSA6IHVua25vd24sIG5ldmVyIHNlZW4gKGJ1dCB0aGUgYml0IGZv ciB0aGlzIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIGFsd2F5cyBzZXQ/KQorICAg ICAgICAgICAgICAgICAgICAgICAgICogLSBSNTYgOiB1bmtub3duIChiaXQgYWx3YXlzIHVuc2V0 KQorICAgICAgICAgICAgICAgICAgICAgICAgICogLSBSNTcgOiBnbF9QcmltaXRpdmVJRAorICAg ICAgICAgICAgICAgICAgICAgICAgICogLSBSNTggOiBnbF9Gcm9udEZhY2luZyBpbiBsb3cgYml0 LCBwb3RlbnRpYWxseSBvdGhlciBzdHVmZgorICAgICAgICAgICAgICAgICAgICAgICAgICogLSBS NTkgOiB1MTYgZnJhZ21lbnQgY29vcmRpbmF0ZXMgKHVzZWQgdG8gY29tcHV0ZQorICAgICAgICAg ICAgICAgICAgICAgICAgICogICBnbF9GcmFnQ29vcmQueHksIHRvZ2V0aGVyIHdpdGggc2FtcGxl IHBvc2l0aW9ucykKKyAgICAgICAgICAgICAgICAgICAgICAgICAqIC0gUjYwIDogZ2xfU2FtcGxl TWFzayAodXNlZCBpbiBlcGlsb2csIHNvIHByZXR0eQorICAgICAgICAgICAgICAgICAgICAgICAg ICogICBtdWNoIGFsd2F5cyB1c2VkLCBidXQgdGhlIGJpdCBpcyBhbHdheXMgMCAtLSBpcworICAg ICAgICAgICAgICAgICAgICAgICAgICogICB0aGlzIGp1c3QgYWx3YXlzIHB1c2hlZD8pCisgICAg ICAgICAgICAgICAgICAgICAgICAgKiAtIFI2MSA6IGdsX1NhbXBsZU1hc2tJbiBhbmQgZ2xfU2Ft cGxlSUQsIHVzZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAqICAgdmFyeWluZyBpbnRl cnBvbGF0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICogLSBSNjIgOiB1bmtub3duIChi aXQgYWx3YXlzIHVuc2V0KS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAg ICAgICAgICAgICAgICAgdTMyIHByZWxvYWRfcmVncyA6IDg7CisgICAgICAgICAgICAgICAgICAg ICAgICAvKiBJbiB1bml0cyBvZiA4IGJ5dGVzIG9yIDY0IGJpdHMsIHNpbmNlIHRoZQorICAgICAg ICAgICAgICAgICAgICAgICAgICogdW5pZm9ybS9jb25zdCBwb3J0IGxvYWRzIDY0IGJpdHMgYXQg YSB0aW1lLgorICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAg ICAgICB1MzIgdW5pZm9ybV9jb3VudCA6IDc7CisgICAgICAgICAgICAgICAgICAgICAgICB1MzIg dW5rNCA6IDEwOyAvLyA9IDIKKyAgICAgICAgICAgICAgICB9IGJpZnJvc3QyOworICAgICAgICAg ICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICAgICAgICAgICAgICB1MzIgdW5rbm93bjJfNzsK KyAgICAgICAgICAgICAgICB9IG1pZGdhcmQyOworICAgICAgICB9OworCisgICAgICAgIC8qIHpl cm8gb24gYmlmcm9zdCAqLworICAgICAgICB1MzIgdW5rbm93bjJfODsKKworICAgICAgICAvKiBC bGVuZGluZyBpbmZvcm1hdGlvbiBmb3IgdGhlIG9sZGVyIG5vbi1NUlQgTWlkZ2FyZCBIVy4gQ2hl Y2sgZm9yCisgICAgICAgICAqIE1BTElfSEFTX0JMRU5EX1NIQURFUiB0byBkZWNpZGUgaG93IHRv IGludGVycHJldC4KKyAgICAgICAgICovCisKKyAgICAgICAgdW5pb24geworICAgICAgICAgICAg ICAgIG1hbGlfcHRyIGJsZW5kX3NoYWRlcjsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgbWFsaV9i bGVuZF9lcXVhdGlvbiBibGVuZF9lcXVhdGlvbjsKKyAgICAgICAgfTsKKworICAgICAgICAvKiBU aGVyZSBjYW4gYmUgdXAgdG8gNCBibGVuZF9tZXRhJ3MuIE5vbmUgb2YgdGhlbSBhcmUgcmVxdWly ZWQgZm9yCisgICAgICAgICAqIHZlcnRleCBzaGFkZXJzIG9yIHRoZSBub24tTVJUIGNhc2UgZm9y IE1pZGdhcmQgKHNvIHRoZSBibG9iIGRvZXNuJ3QKKyAgICAgICAgICogYWxsb2NhdGUgYW55IHNw YWNlKS4KKyAgICAgICAgICovCisgICAgICAgIHN0cnVjdCBtYWxpX2JsZW5kX21ldGEgYmxlbmRf bWV0YVtdOworCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKiBUaGlzIG9ubHkgY29u Y2VybnMgaGFyZHdhcmUgam9icyAqLworCisvKiBQb3NzaWJsZSB2YWx1ZXMgZm9yIGpvYl9kZXNj cmlwdG9yX3NpemUgKi8KKworI2RlZmluZSBNQUxJX0pPQl8zMiAwCisjZGVmaW5lIE1BTElfSk9C XzY0IDEKKworc3RydWN0IG1hbGlfam9iX2Rlc2NyaXB0b3JfaGVhZGVyIHsKKyAgICAgICAgdTMy IGV4Y2VwdGlvbl9zdGF0dXM7CisgICAgICAgIHUzMiBmaXJzdF9pbmNvbXBsZXRlX3Rhc2s7Cisg ICAgICAgIHU2NCBmYXVsdF9wb2ludGVyOworICAgICAgICB1OCBqb2JfZGVzY3JpcHRvcl9zaXpl IDogMTsKKyAgICAgICAgZW51bSBtYWxpX2pvYl90eXBlIGpvYl90eXBlIDogNzsKKyAgICAgICAg dTggam9iX2JhcnJpZXIgOiAxOworICAgICAgICB1OCB1bmtub3duX2ZsYWdzIDogNzsKKyAgICAg ICAgdTE2IGpvYl9pbmRleDsKKyAgICAgICAgdTE2IGpvYl9kZXBlbmRlbmN5X2luZGV4XzE7Cisg ICAgICAgIHUxNiBqb2JfZGVwZW5kZW5jeV9pbmRleF8yOworCisgICAgICAgIHVuaW9uIHsKKyAg ICAgICAgICAgICAgICB1NjQgbmV4dF9qb2JfNjQ7CisgICAgICAgICAgICAgICAgdTMyIG5leHRf am9iXzMyOworICAgICAgICB9OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0 IG1hbGlfcGF5bG9hZF9zZXRfdmFsdWUgeworICAgICAgICB1NjQgb3V0OworICAgICAgICB1NjQg dW5rbm93bjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qIFNwZWNpYWwgYXR0cmli dXRlcyBoYXZlIGEgZml4ZWQgaW5kZXggKi8KKyNkZWZpbmUgTUFMSV9TUEVDSUFMX0FUVFJJQlVU RV9CQVNFIDE2CisjZGVmaW5lIE1BTElfVkVSVEVYX0lEICAgKE1BTElfU1BFQ0lBTF9BVFRSSUJV VEVfQkFTRSArIDApCisjZGVmaW5lIE1BTElfSU5TVEFOQ0VfSUQgKE1BTElfU1BFQ0lBTF9BVFRS SUJVVEVfQkFTRSArIDEpCisKKy8qCisgKiBNYWxpIEF0dHJpYnV0ZXMKKyAqCisgKiBUaGlzIHN0 cnVjdHVyZSBsZXRzIHRoZSBhdHRyaWJ1dGUgdW5pdCBjb21wdXRlIHRoZSBhZGRyZXNzIG9mIGFu IGF0dHJpYnV0ZQorICogZ2l2ZW4gdGhlIHZlcnRleCBhbmQgaW5zdGFuY2UgSUQuIFVuZm9ydHVu YXRlbHksIHRoZSB3YXkgdGhpcyB3b3JrcyBpcworICogcmF0aGVyIGNvbXBsaWNhdGVkIHdoZW4g aW5zdGFuY2luZyBpcyBlbmFibGVkLgorICoKKyAqIFRvIGV4cGxhaW4gdGhpcywgZmlyc3Qgd2Ug bmVlZCB0byBleHBsYWluIGhvdyBjb21wdXRlIGFuZCB2ZXJ0ZXggdGhyZWFkcyBhcmUKKyAqIGRp c3BhdGNoZWQuIFRoaXMgaXMgYSBndWVzcyAoYWx0aG91Z2ggYSBwcmV0dHkgZmlybSBndWVzcyEp IHNpbmNlIHRoZQorICogZGV0YWlscyBhcmUgbW9zdGx5IGhpZGRlbiBmcm9tIHRoZSBkcml2ZXIs IGV4Y2VwdCBmb3IgYXR0cmlidXRlIGluc3RhbmNpbmcuCisgKiBXaGVuIGEgcXVhZCBpcyBkaXNw YXRjaGVkLCBpdCByZWNlaXZlcyBhIHNpbmdsZSwgbGluZWFyIGluZGV4LiBIb3dldmVyLCB3ZQor ICogbmVlZCB0byB0cmFuc2xhdGUgdGhhdCBpbmRleCBpbnRvIGEgKHZlcnRleCBpZCwgaW5zdGFu Y2UgaWQpIHBhaXIsIG9yIGEKKyAqIChsb2NhbCBpZCB4LCBsb2NhbCBpZCB5LCBsb2NhbCBpZCB6 KSB0cmlwbGUgZm9yIGNvbXB1dGUgc2hhZGVycyAoYWx0aG91Z2gKKyAqIHZlcnRleCBzaGFkZXJz IGFuZCBjb21wdXRlIHNoYWRlcnMgYXJlIGhhbmRsZWQgYWxtb3N0IGlkZW50aWNhbGx5KS4KKyAq IEZvY3VzaW5nIG9uIHZlcnRleCBzaGFkZXJzLCBvbmUgb3B0aW9uIHdvdWxkIGJlIHRvIGRvOgor ICoKKyAqIHZlcnRleF9pZCA9IGxpbmVhcl9pZCAlIG51bV92ZXJ0aWNlcworICogaW5zdGFuY2Vf aWQgPSBsaW5lYXJfaWQgLyBudW1fdmVydGljZXMKKyAqCisgKiBidXQgdGhpcyBpbnZvbHZlcyBh IGNvc3RseSBkaXZpc2lvbiBhbmQgbW9kdWx1cyBieSBhbiBhcmJpdHJhcnkgbnVtYmVyLgorICog SW5zdGVhZCwgd2UgY291bGQgcGFkIG51bV92ZXJ0aWNlcy4gV2UgZGlzcGF0Y2ggcGFkZGVkX251 bV92ZXJ0aWNlcyAqCisgKiBudW1faW5zdGFuY2VzIHRocmVhZHMgaW5zdGVhZCBvZiBudW1fdmVy dGljZXMgKiBudW1faW5zdGFuY2VzLCB3aGljaCByZXN1bHRzCisgKiBpbiBzb21lICJleHRyYSIg dGhyZWFkcyB3aXRoIHZlcnRleF9pZCA+PSBudW1fdmVydGljZXMsIHdoaWNoIHdlIGhhdmUgdG8K KyAqIGRpc2NhcmQuICBUaGUgbW9yZSB3ZSBwYWQgbnVtX3ZlcnRpY2VzLCB0aGUgbW9yZSAid2Fz dGVkIiB0aHJlYWRzIHdlCisgKiBkaXNwYXRjaCwgYnV0IHRoZSBkaXZpc2lvbiBpcyBwb3RlbnRp YWxseSBlYXNpZXIuCisgKgorICogT25lIHN0cmFpZ2h0Zm9yd2FyZCBjaG9pY2UgaXMgdG8gcGFk IG51bV92ZXJ0aWNlcyB0byB0aGUgbmV4dCBwb3dlciBvZiB0d28sCisgKiB3aGljaCBtZWFucyB0 aGF0IHRoZSBkaXZpc2lvbiBhbmQgbW9kdWx1cyBhcmUganVzdCBzaW1wbGUgYml0IHNoaWZ0cyBh bmQKKyAqIG1hc2tpbmcuIEJ1dCB0aGUgYWN0dWFsIGFsZ29yaXRobSBpcyBhIGJpdCBtb3JlIGNv bXBsaWNhdGVkLiBUaGUgdGhyZWFkCisgKiBkaXNwYXRjaGVyIGhhcyBzcGVjaWFsIHN1cHBvcnQg Zm9yIGRpdmlkaW5nIGJ5IDMsIDUsIDcsIGFuZCA5LCBpbiBhZGRpdGlvbgorICogdG8gZGl2aWRp bmcgYnkgYSBwb3dlciBvZiB0d28uIFRoaXMgaXMgcG9zc2libHkgdXNpbmcgdGhlIHRlY2huaXF1 ZQorICogZGVzY3JpYmVkIGluIHBhdGVudCBVUzIwMTcwMDEwODYyQTEuIEFzIGEgcmVzdWx0LCBw YWRkZWRfbnVtX3ZlcnRpY2VzIGNhbiBiZQorICogMSwgMywgNSwgNywgb3IgOSB0aW1lcyBhIHBv d2VyIG9mIHR3by4gVGhpcyByZXN1bHRzIGluIGxlc3Mgd2FzdGVkIHRocmVhZHMsCisgKiBzaW5j ZSB3ZSBuZWVkIGxlc3MgcGFkZGluZy4KKyAqCisgKiBwYWRkZWRfbnVtX3ZlcnRpY2VzIGlzIHBp Y2tlZCBieSB0aGUgaGFyZHdhcmUuIFRoZSBkcml2ZXIganVzdCBzcGVjaWZpZXMgdGhlCisgKiBh Y3R1YWwgbnVtYmVyIG9mIHZlcnRpY2VzLiBBdCBsZWFzdCBmb3IgTWFsaSBHNzEsIHRoZSBmaXJz dCBmZXcgY2FzZXMgYXJlCisgKiBnaXZlbiBieToKKyAqCisgKiBudW1fdmVydGljZXMJfCBwYWRk ZWRfbnVtX3ZlcnRpY2VzCisgKiAzCQl8IDQKKyAqIDQtNwkJfCA4CisgKiA4LTExCQl8IDEyICgz ICogNCkKKyAqIDEyLTE1CXwgMTYKKyAqIDE2LTE5CXwgMjAgKDUgKiA0KQorICoKKyAqIE5vdGUg dGhhdCBwYWRkZWRfbnVtX3ZlcnRpY2VzIGlzIGEgbXVsdGlwbGUgb2YgZm91ciAocHJlc3VtYWJs eSBiZWNhdXNlCisgKiB0aHJlYWRzIGFyZSBkaXNwYXRjaGVkIGluIGdyb3VwcyBvZiA0KS4gQWxz bywgcGFkZGVkX251bV92ZXJ0aWNlcyBpcyBhbHdheXMKKyAqIGF0IGxlYXN0IG9uZSBtb3JlIHRo YW4gbnVtX3ZlcnRpY2VzLCB3aGljaCBzZWVtcyBsaWtlIGEgcXVpcmsgb2YgdGhlCisgKiBoYXJk d2FyZS4gRm9yIGxhcmdlciBudW1fdmVydGljZXMsIHRoZSBoYXJkd2FyZSB1c2VzIHRoZSBmb2xs b3dpbmcKKyAqIGFsZ29yaXRobTogdXNpbmcgdGhlIGJpbmFyeSByZXByZXNlbnRhdGlvbiBvZiBu dW1fdmVydGljZXMsIHdlIGxvb2sgYXQgdGhlCisgKiBtb3N0IHNpZ25pZmljYW50IHNldCBiaXQg YXMgd2VsbCBhcyB0aGUgZm9sbG93aW5nIDMgYml0cy4gTGV0IG4gYmUgdGhlCisgKiBudW1iZXIg b2YgYml0cyBhZnRlciB0aG9zZSA0IGJpdHMuIFRoZW4gd2Ugc2V0IHBhZGRlZF9udW1fdmVydGlj ZXMgYWNjb3JkaW5nCisgKiB0byB0aGUgZm9sbG93aW5nIHRhYmxlOgorICoKKyAqIGhpZ2ggYml0 cwl8IHBhZGRlZF9udW1fdmVydGljZXMKKyAqIDEwMDAJCXwgOSAqIDJebgorICogMTAwMQkJfCA1 ICogMl4obisxKQorICogMTAxeAkJfCAzICogMl4obisyKQorICogMTEweAkJfCA3ICogMl4obisx KQorICogMTExeAkJfCAyXihuKzQpCisgKgorICogRm9yIGV4YW1wbGUsIGlmIG51bV92ZXJ0aWNl cyA9IDcwIGlzIHBhc3NlZCB0byBnbERyYXcoKSwgaXRzIGJpbmFyeQorICogcmVwcmVzZW50YXRp b24gaXMgMTAwMDExMCwgc28gbiA9IDMgYW5kIHRoZSBoaWdoIGJpdHMgYXJlIDEwMDAsIGFuZAor ICogdGhlcmVmb3JlIHBhZGRlZF9udW1fdmVydGljZXMgPSA5ICogMl4zID0gNzIuCisgKgorICog VGhlIGF0dHJpYnV0ZSB1bml0IHdvcmtzIGluIHRlcm1zIG9mIHRoZSBvcmlnaW5hbCBsaW5lYXJf aWQuIGlmCisgKiBudW1faW5zdGFuY2VzID0gMSwgdGhlbiB0aGV5IGFyZSB0aGUgc2FtZSwgYW5k IGV2ZXJ5dGhpbmcgaXMgc2ltcGxlLgorICogSG93ZXZlciwgd2l0aCBpbnN0YW5jaW5nIHRoaW5n cyBnZXQgbW9yZSBjb21wbGljYXRlZC4gVGhlcmUgYXJlIGZvdXIKKyAqIHBvc3NpYmxlIG1vZGVz LCB0d28gb2YgdGhlbSB3ZSBjYW4gZ3JvdXAgdG9nZXRoZXI6CisgKgorICogMS4gVXNlIHRoZSBs aW5lYXJfaWQgZGlyZWN0bHkuIE9ubHkgdXNlZCB3aGVuIHRoZXJlIGlzIG5vIGluc3RhbmNpbmcu CisgKgorICogMi4gVXNlIHRoZSBsaW5lYXJfaWQgbW9kdWxvIGEgY29uc3RhbnQuIFRoaXMgaXMg dXNlZCBmb3IgcGVyLXZlcnRleAorICogYXR0cmlidXRlcyB3aXRoIGluc3RhbmNpbmcgZW5hYmxl ZCBieSBtYWtpbmcgdGhlIGNvbnN0YW50IGVxdWFsCisgKiBwYWRkZWRfbnVtX3ZlcnRpY2VzLiBC ZWNhdXNlIHRoZSBtb2R1bHVzIGlzIGFsd2F5cyBwYWRkZWRfbnVtX3ZlcnRpY2VzLCB0aGlzCisg KiBtb2RlIG9ubHkgc3VwcG9ydHMgYSBtb2R1bHVzIHRoYXQgaXMgYSBwb3dlciBvZiAyIHRpbWVz IDEsIDMsIDUsIDcsIG9yIDkuCisgKiBUaGUgc2hpZnQgZmllbGQgc3BlY2lmaWVzIHRoZSBwb3dl ciBvZiB0d28sIHdoaWxlIHRoZSBleHRyYV9mbGFncyBmaWVsZAorICogc3BlY2lmaWVzIHRoZSBv ZGQgbnVtYmVyLiBJZiBzaGlmdCA9IG4gYW5kIGV4dHJhX2ZsYWdzID0gbSwgdGhlbiB0aGUgbW9k dWx1cworICogaXMgKDJtICsgMSkgKiAyXm4uIEFzIGFuIGV4YW1wbGUsIGlmIG51bV92ZXJ0aWNl cyA9IDcwLCB0aGVuIGFzIGNvbXB1dGVkCisgKiBhYm92ZSwgcGFkZGVkX251bV92ZXJ0aWNlcyA9 IDkgKiAyXjMsIHNvIHdlIHNob3VsZCBzZXQgZXh0cmFfZmxhZ3MgPSA0IGFuZAorICogc2hpZnQg PSAzLiBOb3RlIHRoYXQgd2UgbXVzdCBleGFjdGx5IGZvbGxvdyB0aGUgaGFyZHdhcmUgYWxnb3Jp dGhtIHVzZWQgdG8KKyAqIGdldCBwYWRkZWRfbnVtX3ZlcnRpY2VzIGluIG9yZGVyIHRvIGNvcnJl Y3RseSBpbXBsZW1lbnQgcGVyLXZlcnRleAorICogYXR0cmlidXRlcy4KKyAqCisgKiAzLiBEaXZp ZGUgdGhlIGxpbmVhcl9pZCBieSBhIGNvbnN0YW50LiBJbiBvcmRlciB0byBjb3JyZWN0bHkgaW1w bGVtZW50CisgKiBpbnN0YW5jZSBkaXZpc29ycywgd2UgaGF2ZSB0byBkaXZpZGUgbGluZWFyX2lk IGJ5IHBhZGRlZF9udW1fdmVydGljZXMgdGltZXMKKyAqIHRvIHVzZXItc3BlY2lmaWVkIGRpdmlz b3IuIFNvIGZpcnN0IHdlIGNvbXB1dGUgcGFkZGVkX251bV92ZXJ0aWNlcywgYWdhaW4KKyAqIGZv bGxvd2luZyB0aGUgZXhhY3Qgc2FtZSBhbGdvcml0aG0gdGhhdCB0aGUgaGFyZHdhcmUgdXNlcywg dGhlbiBtdWx0aXBseSBpdAorICogYnkgdGhlIEdMLWxldmVsIGRpdmlzb3IgdG8gZ2V0IHRoZSBo YXJkd2FyZS1sZXZlbCBkaXZpc29yLiBUaGlzIGNhc2UgaXMKKyAqIGZ1cnRoZXIgZGl2aWRlZCBp bnRvIHR3byBtb3JlIGNhc2VzLiBJZiB0aGUgaGFyZHdhcmUtbGV2ZWwgZGl2aXNvciBpcyBhCisg KiBwb3dlciBvZiB0d28sIHRoZW4gd2UganVzdCBuZWVkIHRvIHNoaWZ0LiBUaGUgc2hpZnQgYW1v dW50IGlzIHNwZWNpZmllZCBieQorICogdGhlIHNoaWZ0IGZpZWxkLCBzbyB0aGF0IHRoZSBoYXJk d2FyZS1sZXZlbCBkaXZpc29yIGlzIGp1c3QgMl5zaGlmdC4KKyAqCisgKiBJZiBpdCBpc24ndCBh IHBvd2VyIG9mIHR3bywgdGhlbiB3ZSBoYXZlIHRvIGRpdmlkZSBieSBhbiBhcmJpdHJhcnkgaW50 ZWdlci4KKyAqIEZvciB0aGF0LCB3ZSB1c2UgdGhlIHdlbGwta25vd24gdGVjaG5pcXVlIG9mIG11 bHRpcGx5aW5nIGJ5IGFuIGFwcHJveGltYXRpb24KKyAqIG9mIHRoZSBpbnZlcnNlLiBUaGUgZHJp dmVyIG11c3QgY29tcHV0ZSB0aGUgbWFnaWMgbXVsdGlwbGllciBhbmQgc2hpZnQKKyAqIGFtb3Vu dCwgYW5kIHRoZW4gdGhlIGhhcmR3YXJlIGRvZXMgdGhlIG11bHRpcGxpY2F0aW9uIGFuZCBzaGlm dC4gVGhlCisgKiBoYXJkd2FyZSBhbmQgZHJpdmVyIGFsc28gdXNlIHRoZSAicm91bmQtZG93biIg b3B0aW1pemF0aW9uIGFzIGRlc2NyaWJlZCBpbgorICogaHR0cDovL3JpZGljdWxvdXNmaXNoLmNv bS9maWxlcy9mYXN0ZXJfdW5zaWduZWRfZGl2aXNpb25fYnlfY29uc3RhbnRzLnBkZi4KKyAqIFRo ZSBoYXJkd2FyZSBmdXJ0aGVyIGFzc3VtZXMgdGhlIG11bHRpcGxpZXIgaXMgYmV0d2VlbiAyXjMx IGFuZCAyXjMyLCBzbyB0aGUKKyAqIGhpZ2ggYml0IGlzIGltcGxpY2l0bHkgc2V0IHRvIDEgZXZl biB0aG91Z2ggaXQgaXMgc2V0IHRvIDAgYnkgdGhlIGRyaXZlciAtLQorICogcHJlc3VtYWJseSB0 aGlzIHNpbXBsaWZpZXMgdGhlIGhhcmR3YXJlIG11bHRpcGxpZXIgYSBsaXR0bGUuIFRoZSBoYXJk d2FyZQorICogZmlyc3QgbXVsdGlwbGllcyBsaW5lYXJfaWQgYnkgdGhlIG11bHRpcGxpZXIgYW5k IHRha2VzIHRoZSBoaWdoIDMyIGJpdHMsCisgKiB0aGVuIGFwcGxpZXMgdGhlIHJvdW5kLWRvd24g Y29ycmVjdGlvbiBpZiBleHRyYV9mbGFncyA9IDEsIHRoZW4gZmluYWxseQorICogc2hpZnRzIHJp Z2h0IGJ5IHRoZSBzaGlmdCBmaWVsZC4KKyAqCisgKiBUaGVyZSBhcmUgc29tZSBkaWZmZXJlbmNl cyBiZXR3ZWVuIHJpZGljdWxvdXNmaXNoJ3MgYWxnb3JpdGhtIGFuZCB0aGUgTWFsaQorICogaGFy ZHdhcmUgYWxnb3JpdGhtLCB3aGljaCBtZWFucyB0aGF0IHRoZSByZWZlcmVuY2UgY29kZSBmcm9t IHJpZGljdWxvdXNmaXNoCisgKiBkb2Vzbid0IGFsd2F5cyBwcm9kdWNlIHRoZSByaWdodCBjb25z dGFudHMuIE1hbGkgZG9lcyBub3QgdXNlIHRoZSBwcmUtc2hpZnQKKyAqIG9wdGltaXphdGlvbiwg c2luY2UgdGhhdCB3b3VsZCBtYWtlIGEgaGFyZHdhcmUgaW1wbGVtZW50YXRpb24gc2xvd2VyIChp dAorICogd291bGQgaGF2ZSB0byBhbHdheXMgZG8gdGhlIHByZS1zaGlmdCwgbXVsdGlwbHksIGFu ZCBwb3N0LXNoaWZ0IG9wZXJhdGlvbnMpLgorICogSXQgYWxzbyBmb3JjZXMgdGhlIG11bHRwbGll ciB0byBiZSBhdCBsZWFzdCAyXjMxLCB3aGljaCBtZWFucyB0aGF0IHRoZQorICogZXhwb25lbnQg aXMgZW50aXJlbHkgZml4ZWQsIHNvIHRoZXJlIGlzIG5vIHRyaWFsLWFuZC1lcnJvci4gQWx0b2dl dGhlciwKKyAqIGdpdmVuIHRoZSBkaXZpc29yIGQsIHRoZSBhbGdvcml0aG0gdGhlIGRyaXZlciBt dXN0IGZvbGxvdyBpczoKKyAqCisgKiAxLiBTZXQgc2hpZnQgPSBmbG9vcihsb2cyKGQpKS4KKyAq IDIuIENvbXB1dGUgbSA9IGNlaWwoMl4oc2hpZnQgKyAzMikgLyBkKSBhbmQgZSA9IDJeKHNoaWZ0 ICsgMzIpICUgZC4KKyAqIDMuIElmIGUgPD0gMl5zaGlmdCwgdGhlbiB3ZSBuZWVkIHRvIHVzZSB0 aGUgcm91bmQtZG93biBhbGdvcml0aG0uIFNldAorICogbWFnaWNfZGl2aXNvciA9IG0gLSAxIGFu ZCBleHRyYV9mbGFncyA9IDEuCisgKiA0LiBPdGhlcndpc2UsIHNldCBtYWdpY19kaXZpc29yID0g bSBhbmQgZXh0cmFfZmxhZ3MgPSAwLgorICovCisKK2VudW0gbWFsaV9hdHRyX21vZGUgeworCU1B TElfQVRUUl9VTlVTRUQgPSAwLAorCU1BTElfQVRUUl9MSU5FQVIgPSAxLAorCU1BTElfQVRUUl9Q T1RfRElWSURFID0gMiwKKwlNQUxJX0FUVFJfTU9EVUxPID0gMywKKwlNQUxJX0FUVFJfTlBPVF9E SVZJREUgPSA0LAorfTsKKwordW5pb24gbWFsaV9hdHRyIHsKKwkvKiBUaGlzIGlzIHVzZWQgZm9y IGFjdHVhbCBhdHRyaWJ1dGVzLiAqLworCXN0cnVjdCB7CisJCS8qIFRoZSBib3R0b20gMyBiaXRz IGFyZSB0aGUgbW9kZSAqLworCQltYWxpX3B0ciBlbGVtZW50cyA6IDY0IC0gODsKKwkJdTMyIHNo aWZ0IDogNTsKKwkJdTMyIGV4dHJhX2ZsYWdzIDogMzsKKwkJdTMyIHN0cmlkZTsKKwkJdTMyIHNp emU7CisJfTsKKwkvKiBUaGUgZW50cnkgYWZ0ZXIgYW4gTlBPVF9ESVZJREUgZW50cnkgaGFzIHRo aXMgZm9ybWF0LiBJdCBzdG9yZXMKKwkgKiBleHRyYSBpbmZvcm1hdGlvbiB0aGF0IHdvdWxkbid0 IGZpdCBpbiBhIG5vcm1hbCBlbnRyeS4KKwkgKi8KKwlzdHJ1Y3QgeworCQl1MzIgdW5rOyAvKiA9 IDB4MjAgKi8KKwkJdTMyIG1hZ2ljX2Rpdmlzb3I7CisJCXUzMiB6ZXJvOworCQkvKiBUaGlzIGlz IHRoZSBvcmlnaW5hbCwgR0wtbGV2ZWwgZGl2aXNvci4gKi8KKwkJdTMyIGRpdmlzb3I7CisJfTsK K30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBtYWxpX2F0dHJfbWV0YSB7Cisg ICAgICAgIC8qIFZlcnRleCBidWZmZXIgaW5kZXggKi8KKyAgICAgICAgdTggaW5kZXg7CisKKyAg ICAgICAgdW5zaWduZWQgdW5rbm93bjEgOiAyOworICAgICAgICB1bnNpZ25lZCBzd2l6emxlIDog MTI7CisgICAgICAgIGVudW0gbWFsaV9mb3JtYXQgZm9ybWF0IDogODsKKworICAgICAgICAvKiBB bHdheXMgb2JzZXJ2ZWQgdG8gYmUgemVybyBhdCB0aGUgbW9tZW50ICovCisgICAgICAgIHVuc2ln bmVkIHVua25vd24zIDogMjsKKworICAgICAgICAvKiBXaGVuIHBhY2tpbmcgbXVsdGlwbGUgYXR0 cmlidXRlcyBpbiBhIGJ1ZmZlciwgb2Zmc2V0IGFkZHJlc3NlcyBieSB0aGlzIHZhbHVlICovCisg ICAgICAgIHVpbnQzMl90IHNyY19vZmZzZXQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwor CitlbnVtIG1hbGlfZmJkX3R5cGUgeworICAgICAgICBNQUxJX1NGQkQgPSAwLAorICAgICAgICBN QUxJX01GQkQgPSAxLAorfTsKKworI2RlZmluZSBGQkRfVFlQRSAoMSkKKyNkZWZpbmUgRkJEX01B U0sgKH4weDNmKQorCitzdHJ1Y3QgbWFsaV91bmlmb3JtX2J1ZmZlcl9tZXRhIHsKKyAgICAgICAg LyogVGhpcyBpcyBhY3R1YWxseSB0aGUgc2l6ZSBtaW51cyAxIChNQUxJX1BPU0lUSVZFKSwgaW4g dW5pdHMgb2YgMTYKKyAgICAgICAgICogYnl0ZXMuIFRoaXMgZ2l2ZXMgYSBtYXhpbXVtIG9mIDJe MTQgYnl0ZXMsIHdoaWNoIGp1c3Qgc28gaGFwcGVucyB0bworICAgICAgICAgKiBiZSB0aGUgR0wg bWluaW11bS1tYXhpbXVtIGZvciBHTF9NQVhfVU5JRk9STV9CTE9DS19TSVpFLgorICAgICAgICAg Ki8KKyAgICAgICAgdTY0IHNpemUgOiAxMDsKKworICAgICAgICAvKiBUaGlzIGlzIG1pc3Npbmcg dGhlIGJvdHRvbSAyIGJpdHMgYW5kIHRvcCA4IGJpdHMuIFRoZSB0b3AgOCBiaXRzCisgICAgICAg ICAqIHNob3VsZCBiZSAwIGZvciB1c2Vyc3BhY2UgcG9pbnRlcnMsIGFjY29yZGluZyB0bworICAg ICAgICAgKiBodHRwczovL2x3bi5uZXQvQXJ0aWNsZXMvNzE4ODk1Ly4gQnkgcmV1c2luZyB0aGVz ZSBiaXRzLCB3ZSBjYW4gbWFrZQorICAgICAgICAgKiBlYWNoIGVudHJ5IGluIHRoZSB0YWJsZSBv bmx5IDY0IGJpdHMuCisgICAgICAgICAqLworICAgICAgICBtYWxpX3B0ciBwdHIgOiA2NCAtIDEw OworfTsKKworLyogT24gQmlmcm9zdCwgdGhlc2UgZmllbGRzIGFyZSB0aGUgc2FtZSBiZXR3ZWVu IHRoZSB2ZXJ0ZXggYW5kIHRpbGVyIHBheWxvYWRzLgorICogVGhleSBhbHNvIHNlZW0gdG8gYmUg dGhlIHNhbWUgYmV0d2VlbiBCaWZyb3N0IGFuZCBNaWRnYXJkLiBUaGV5J3JlIHNoYXJlZCBpbgor ICogZnVzZWQgcGF5bG9hZHMuCisgKi8KKworLyogQXBwbGllcyB0byB1bmtub3duX2RyYXcgKi8K KworI2RlZmluZSBNQUxJX0RSQVdfSU5ERVhFRF9VSU5UOCAgKDB4MTApCisjZGVmaW5lIE1BTElf RFJBV19JTkRFWEVEX1VJTlQxNiAoMHgyMCkKKyNkZWZpbmUgTUFMSV9EUkFXX0lOREVYRURfVUlO VDMyICgweDMwKQorI2RlZmluZSBNQUxJX0RSQVdfVkFSWUlOR19TSVpFICAgKDB4MTAwKQorI2Rl ZmluZSBNQUxJX0RSQVdfUFJJTUlUSVZFX1JFU1RBUlRfRklYRURfSU5ERVggKDB4MTAwMDApCisK K3N0cnVjdCBtYWxpX3ZlcnRleF90aWxlcl9wcmVmaXggeworICAgICAgICAvKiBUaGlzIGlzIGEg ZHluYW1pYyBiaXRmaWVsZCBjb250YWluaW5nIHRoZSBmb2xsb3dpbmcgdGhpbmdzIGluIHRoaXMg b3JkZXI6CisgICAgICAgICAqCisgICAgICAgICAqIC0gZ2xfV29ya0dyb3VwU2l6ZS54CisgICAg ICAgICAqIC0gZ2xfV29ya0dyb3VwU2l6ZS55CisgICAgICAgICAqIC0gZ2xfV29ya0dyb3VwU2l6 ZS56CisgICAgICAgICAqIC0gZ2xfTnVtV29ya0dyb3Vwcy54CisgICAgICAgICAqIC0gZ2xfTnVt V29ya0dyb3Vwcy55CisgICAgICAgICAqIC0gZ2xfTnVtV29ya0dyb3Vwcy56CisgICAgICAgICAq CisgICAgICAgICAqIFRoZSBudW1iZXIgb2YgYml0cyBhbGxvY2F0ZWQgZm9yIGVhY2ggbnVtYmVy IGlzIGJhc2VkIG9uIHRoZSAqX3NoaWZ0CisgICAgICAgICAqIGZpZWxkcyBiZWxvdy4gRm9yIGV4 YW1wbGUsIHdvcmtncm91cHNfeV9zaGlmdCBnaXZlcyB0aGUgYml0IHRoYXQKKyAgICAgICAgICog Z2xfTnVtV29ya0dyb3Vwcy55IHN0YXJ0cyBhdCwgYW5kIHdvcmtncm91cHNfel9zaGlmdCBnaXZl cyB0aGUgYml0CisgICAgICAgICAqIHRoYXQgZ2xfTnVtV29ya0dyb3Vwcy56IHN0YXJ0cyBhdCAo YW5kIHRoZXJlZm9yZSBvbmUgYWZ0ZXIgdGhlIGJpdAorICAgICAgICAgKiB0aGF0IGdsX051bVdv cmtHcm91cHMueSBlbmRzIGF0KS4gVGhlIGFjdHVhbCB2YWx1ZSBmb3IgZWFjaCBnbF8qCisgICAg ICAgICAqIHZhbHVlIGlzIG9uZSBtb3JlIHRoYW4gdGhlIHN0b3JlZCB2YWx1ZSwgc2luY2UgaWYg YW55IG9mIHRoZSB2YWx1ZXMKKyAgICAgICAgICogYXJlIHplcm8sIHRoZW4gdGhlcmUgd291bGQg YmUgbm8gaW52b2NhdGlvbnMgKGFuZCBoZW5jZSBubyBqb2IpLiBJZgorICAgICAgICAgKiB0aGVy ZSB3ZXJlIDAgYml0cyBhbGxvY2F0ZWQgdG8gYSBnaXZlbiBmaWVsZCwgdGhlbiBpdCBtdXN0IGJl IHplcm8sCisgICAgICAgICAqIGFuZCBoZW5jZSB0aGUgcmVhbCB2YWx1ZSBpcyBvbmUuCisgICAg ICAgICAqCisgICAgICAgICAqIFZlcnRleCBqb2JzIHJldXNlIHRoZSBzYW1lIGpvYiBkaXNwYXRj aCBtZWNoYW5pc20gYXMgY29tcHV0ZSBqb2JzLAorICAgICAgICAgKiBlZmZlY3RpdmVseSBkb2lu ZyBnbERpc3BhdGNoQ29tcHV0ZSgxLCB2ZXJ0ZXhfY291bnQsIGluc3RhbmNlX2NvdW50KQorICAg ICAgICAgKiB3aGVyZSB2ZXJ0ZXggY291bnQgaXMgdGhlIG51bWJlciBvZiB2ZXJ0aWNlcy4KKyAg ICAgICAgICovCisgICAgICAgIHUzMiBpbnZvY2F0aW9uX2NvdW50OworCisgICAgICAgIHUzMiBz aXplX3lfc2hpZnQgOiA1OworICAgICAgICB1MzIgc2l6ZV96X3NoaWZ0IDogNTsKKyAgICAgICAg dTMyIHdvcmtncm91cHNfeF9zaGlmdCA6IDY7CisgICAgICAgIHUzMiB3b3JrZ3JvdXBzX3lfc2hp ZnQgOiA2OworICAgICAgICB1MzIgd29ya2dyb3Vwc196X3NoaWZ0IDogNjsKKyAgICAgICAgLyog VGhpcyBpcyBtYXgod29ya2dyb3Vwc194X3NoaWZ0LCAyKSBpbiBhbGwgdGhlIGNhc2VzIEkndmUg c2Vlbi4gKi8KKyAgICAgICAgdTMyIHdvcmtncm91cHNfeF9zaGlmdF8yIDogNDsKKworICAgICAg ICB1MzIgZHJhd19tb2RlIDogNDsKKyAgICAgICAgdTMyIHVua25vd25fZHJhdyA6IDIyOworCisg ICAgICAgIC8qIFRoaXMgaXMgdGhlIHRoZSBzYW1lIGFzIHdvcmtncm91cHNfeF9zaGlmdF8yIGlu IGNvbXB1dGUgc2hhZGVycywgYnV0CisgICAgICAgICAqIGFsd2F5cyA1IGZvciB2ZXJ0ZXggam9i cyBhbmQgNiBmb3IgdGlsZXIgam9icy4gSSBzdXNwZWN0IHRoaXMgaGFzCisgICAgICAgICAqIHNv bWV0aGluZyB0byBkbyB3aXRoIGhvdyBtYW55IHF1YWRzIGdldCBwdXQgaW4gdGhlIHNhbWUgZXhl Y3V0aW9uCisgICAgICAgICAqIGVuZ2luZSwgd2hpY2ggaXMgYSBiYWxhbmNlICh5b3UgZG9uJ3Qg d2FudCB0byBzdGFydmUgdGhlIGVuZ2luZSwgYnV0CisgICAgICAgICAqIHlvdSBhbHNvIHdhbnQg dG8gZGlzdHJpYnV0ZSB3b3JrIGV2ZW5seSkuCisgICAgICAgICAqLworICAgICAgICB1MzIgd29y a2dyb3Vwc194X3NoaWZ0XzMgOiA2OworCisKKyAgICAgICAgLyogTmVnYXRpdmUgb2YgZHJhd19z dGFydCBmb3IgVElMRVIgam9icyBmcm9tIHdoYXQgSSd2ZSBzZWVuICovCisgICAgICAgIGludDMy X3QgbmVnYXRpdmVfc3RhcnQ7CisgICAgICAgIHUzMiB6ZXJvMTsKKworICAgICAgICAvKiBMaWtl IG1hbnkgb3RoZXIgc3RyaWN0bHkgbm9uemVybyBxdWFudGl0aWVzLCBpbmRleF9jb3VudCBpcwor ICAgICAgICAgKiBzdWJ0cmFjdGVkIGJ5IG9uZS4gRm9yIGFuIGluZGV4ZWQgY3ViZSwgdGhpcyBp cyBlcXVhbCB0byAzNSA9IDYKKyAgICAgICAgICogZmFjZXMgKiAyIHRyaWFuZ2xlcy9wZXIgZmFj ZSAqIDMgdmVydGljZXMvcGVyIHRyaWFuZ2xlIC0gMS4gVGhhdCBpcywKKyAgICAgICAgICogZm9y IGFuIGluZGV4ZWQgZHJhdywgaW5kZXhfY291bnQgaXMgdGhlIG51bWJlciBvZiBhY3R1YWwgdmVy dGljZXMKKyAgICAgICAgICogcmVuZGVyZWQgd2hlcmVhcyBpbnZvY2F0aW9uX2NvdW50IGlzIHRo ZSBudW1iZXIgb2YgdW5pcXVlIHZlcnRpY2VzCisgICAgICAgICAqIHJlbmRlcmVkICh0aGUgbnVt YmVyIG9mIHRpbWVzIHRoZSB2ZXJ0ZXggc2hhZGVyIG11c3QgYmUgaW52b2tlZCkuCisgICAgICAg ICAqIEZvciBub24taW5kZXhlZCBkcmF3cywgdGhpcyBpcyBqdXN0IGVxdWFsIHRvIGludm9jYXRp b25fY291bnQuICovCisKKyAgICAgICAgdTMyIGluZGV4X2NvdW50OworCisgICAgICAgIC8qIE5v IGhpZGRlbiBzdHJ1Y3R1cmU7IGxpdGVyYWxseSBqdXN0IGEgcG9pbnRlciB0byBhbiBhcnJheSBv ZiB1aW50CisgICAgICAgICAqIGluZGljZXMgKHdpZHRoIGRlcGVuZHMgb24gZmxhZ3MpLiBUaGFu a3MsIGd1eXMsIGZvciBub3QgbWFraW5nIG15CisgICAgICAgICAqIGxpZmUgaW5zYW5lIGZvciBv bmNlISBOVUxMIGZvciBub24taW5kZXhlZCBkcmF3cy4gKi8KKworICAgICAgICB1aW50cHRyX3Qg aW5kaWNlczsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qIFBvaW50IHNpemUgLyBs aW5lIHdpZHRoIGNhbiBlaXRoZXIgYmUgc3BlY2lmaWVkIGFzIGEgMzItYml0IGZsb2F0IChmb3IK KyAqIGNvbnN0YW50IHNpemUpIG9yIGFzIGEgW21hY2hpbmUgd29yZCBzaXplXS1iaXQgR1BVIHBv aW50ZXIgKGZvciB2YXJ5aW5nIHNpemUpLiBJZiBhIHBvaW50ZXIKKyAqIGlzIHNlbGVjdGVkLCBi eSBzZXR0aW5nIHRoZSBhcHByb3ByaWF0ZSBNQUxJX0RSQVdfVkFSWUlOR19TSVpFIGJpdCBpbiB0 aGUgdGlsZXIKKyAqIHBheWxvYWQsIHRoZSBjb250ZW50cyBvZiB2YXJ5aW5nX3BvaW50ZXIgd2ls bCBiZSBpbnRlcHJldGVkIGFzIGFuIGFycmF5IG9mCisgKiBmcDE2IHNpemVzLCBvbmUgZm9yIGVh Y2ggdmVydGV4LiBnbF9Qb2ludFNpemUgaXMgdGhlcmVmb3JlIGltcGxlbWVudGVkIGJ5CisgKiBj cmVhdGluZyBhIHNwZWNpYWwgTUFMSV9SMTZGIHZhcnlpbmcgd3JpdGluZyB0byB2YXJ5aW5nX3Bv aW50ZXIuICovCisKK3VuaW9uIG1pZGdhcmRfcHJpbWl0aXZlX3NpemUgeworICAgICAgICBmbG9h dCBjb25zdGFudDsKKyAgICAgICAgdWludHB0cl90IHBvaW50ZXI7Cit9OworCitzdHJ1Y3QgYmlm cm9zdF92ZXJ0ZXhfb25seSB7CisgICAgICAgIHUzMiB1bmsyOyAvKiA9MHgyICovCisKKyAgICAg ICAgdTMyIHplcm8wOworCisgICAgICAgIHU2NCB6ZXJvMTsKK30gX19hdHRyaWJ1dGVfXygocGFj a2VkKSk7CisKK3N0cnVjdCBiaWZyb3N0X3RpbGVyX2hlYXBfbWV0YSB7CisgICAgICAgIHUzMiB6 ZXJvOworICAgICAgICB1MzIgaGVhcF9zaXplOworICAgICAgICAvKiBub3RlOiB0aGVzZSBhcmUg anVzdCBndWVzc2VzISAqLworICAgICAgICBtYWxpX3B0ciB0aWxlcl9oZWFwX3N0YXJ0OworICAg ICAgICBtYWxpX3B0ciB0aWxlcl9oZWFwX2ZyZWU7CisgICAgICAgIG1hbGlfcHRyIHRpbGVyX2hl YXBfZW5kOworCisgICAgICAgIC8qIGhpZXJhcmNoeSB3ZWlnaHRzPyBidXQgdGhleSdyZSBzdGls bCAwIGFmdGVyIHRoZSBqb2IgaGFzIHJ1bi4uLiAqLworICAgICAgICB1MzIgemVyb3NbMTJdOwor fSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGJpZnJvc3RfdGlsZXJfbWV0YSB7 CisgICAgICAgIHU2NCB6ZXJvMDsKKyAgICAgICAgdTMyIHVuazsgLy8gPSAweGYwCisgICAgICAg IHUxNiB3aWR0aDsKKyAgICAgICAgdTE2IGhlaWdodDsKKyAgICAgICAgdTY0IHplcm8xOworICAg ICAgICBtYWxpX3B0ciB0aWxlcl9oZWFwX21ldGE7CisgICAgICAgIC8qIFRPRE8gd2hhdCBpcyB0 aGlzIHVzZWQgZm9yPyAqLworICAgICAgICB1NjQgemVyb3NbMjBdOworfSBfX2F0dHJpYnV0ZV9f KChwYWNrZWQpKTsKKworc3RydWN0IGJpZnJvc3RfdGlsZXJfb25seSB7CisgICAgICAgIC8qIDB4 MjAgKi8KKyAgICAgICAgdW5pb24gbWlkZ2FyZF9wcmltaXRpdmVfc2l6ZSBwcmltaXRpdmVfc2l6 ZTsKKworICAgICAgICBtYWxpX3B0ciB0aWxlcl9tZXRhOworCisgICAgICAgIHU2NCB6ZXJvMSwg emVybzIsIHplcm8zLCB6ZXJvNCwgemVybzUsIHplcm82OworCisgICAgICAgIHUzMiBnbF9lbmFi bGVzOworICAgICAgICB1MzIgemVybzc7CisgICAgICAgIHU2NCB6ZXJvODsKK30gX19hdHRyaWJ1 dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBiaWZyb3N0X3NjcmF0Y2hwYWQgeworICAgICAgICB1 MzIgemVybzsKKyAgICAgICAgdTMyIGZsYWdzOyAvLyA9IDB4MWYKKyAgICAgICAgLyogVGhpcyBp cyBhIHBvaW50ZXIgdG8gYSBDUFUtaW5hY2Nlc3NpYmxlIGJ1ZmZlciwgMTYgcGFnZXMsIGFsbG9j YXRlZAorICAgICAgICAgKiBkdXJpbmcgc3RhcnR1cC4gSXQgc2VlbXMgdG8gc2VydmUgdGhlIHNh bWUgcHVycG9zZSBhcyB0aGUKKyAgICAgICAgICogZ3B1X3NjcmF0Y2hwYWQgaW4gdGhlIFNGQkQg Zm9yIE1pZGdhcmQsIGFsdGhvdWdoIGl0J3Mgc2xpZ2h0bHkKKyAgICAgICAgICogbGFyZ2VyLgor ICAgICAgICAgKi8KKyAgICAgICAgbWFsaV9wdHIgZ3B1X3NjcmF0Y2hwYWQ7Cit9IF9fYXR0cmli dXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgbWFsaV92ZXJ0ZXhfdGlsZXJfcG9zdGZpeCB7Cisg ICAgICAgIC8qIFplcm8gZm9yIHZlcnRleCBqb2JzLiBQb2ludGVyIHRvIHRoZSBwb3NpdGlvbiAo Z2xfUG9zaXRpb24pIHZhcnlpbmcKKyAgICAgICAgICogb3V0cHV0IGZyb20gdGhlIHZlcnRleCBz aGFkZXIgZm9yIHRpbGVyIGpvYnMuCisgICAgICAgICAqLworCisgICAgICAgIHVpbnRwdHJfdCBw b3NpdGlvbl92YXJ5aW5nOworCisgICAgICAgIC8qIEFuIGFycmF5IG9mIG1hbGlfdW5pZm9ybV9i dWZmZXJfbWV0YSdzLiBUaGUgc2l6ZSBpcyBnaXZlbiBieSB0aGUKKyAgICAgICAgICogc2hhZGVy X21ldGEuCisgICAgICAgICAqLworICAgICAgICB1aW50cHRyX3QgdW5pZm9ybV9idWZmZXJzOwor CisgICAgICAgIC8qIFRoaXMgaXMgYSBwb2ludGVyIHRvIGFuIGFycmF5IG9mIHBvaW50ZXJzIHRv IHRoZSB0ZXh0dXJlCisgICAgICAgICAqIGRlc2NyaXB0b3JzLCBudW1iZXIgb2YgcG9pbnRlcnMg Ym91bmRlZCBieSBudW1iZXIgb2YgdGV4dHVyZXMuIFRoZQorICAgICAgICAgKiBpbmRpcmVjdGlv biBpcyBuZWVkZWQgdG8gYWNjb21vZGF0ZSB2YXJ5aW5nIG51bWJlcnMgYW5kIHNpemVzIG9mCisg ICAgICAgICAqIHRleHR1cmUgZGVzY3JpcHRvcnMgKi8KKyAgICAgICAgdWludHB0cl90IHRleHR1 cmVfdHJhbXBvbGluZTsKKworICAgICAgICAvKiBGb3IgT3BlbkdMLCBmcm9tIHdoYXQgSSd2ZSBz ZWVuLCB0aGlzIGlzIGludGltYXRlbHkgY29ubmVjdGVkIHRvCisgICAgICAgICAqIHRleHR1cmVf bWV0YS4gY3dhYmJvdHQgc2F5cyB0aGlzIGlzIG5vdCB0aGUgY2FzZSB1bmRlciBWdWxrYW4sIGhl bmNlCisgICAgICAgICAqIHdoeSB0aGlzIGZpZWxkIGlzIHNlcGVyYXRlIChNaWRnYXJkIGlzIFZ1 bGthbiBjYXBhYmxlKS4gUG9pbnRlciB0bworICAgICAgICAgKiBhcnJheSBvZiBzYW1wbGVyIGRl c2NyaXB0b3JzICh3aGljaCBhcmUgdW5pZm9ybSBpbiBzaXplKSAqLworICAgICAgICB1aW50cHRy X3Qgc2FtcGxlcl9kZXNjcmlwdG9yOworCisgICAgICAgIHVpbnRwdHJfdCB1bmlmb3JtczsKKyAg ICAgICAgdTggZmxhZ3MgOiA0OworICAgICAgICB1aW50cHRyX3QgX3NoYWRlcl91cHBlciA6IE1B TElfU0hPUlRfUFRSX0JJVFMgLSA0OyAvKiBzdHJ1Y3Qgc2hhZGVyX21ldGEgKi8KKyAgICAgICAg dWludHB0cl90IGF0dHJpYnV0ZXM7IC8qIHN0cnVjdCBhdHRyaWJ1dGVfYnVmZmVyW10gKi8KKyAg ICAgICAgdWludHB0cl90IGF0dHJpYnV0ZV9tZXRhOyAvKiBhdHRyaWJ1dGVfbWV0YVtdICovCisg ICAgICAgIHVpbnRwdHJfdCB2YXJ5aW5nczsgLyogc3RydWN0IGF0dHIgKi8KKyAgICAgICAgdWlu dHB0cl90IHZhcnlpbmdfbWV0YTsgLyogcG9pbnRlciAqLworICAgICAgICB1aW50cHRyX3Qgdmll d3BvcnQ7CisgICAgICAgIHVpbnRwdHJfdCBvY2NsdXNpb25fY291bnRlcjsgLyogQSBzaW5nbGUg Yml0IGFzIGZhciBhcyBJIGNhbiB0ZWxsICovCisKKyAgICAgICAgLyogTm90ZTogb24gQmlmcm9z dCwgdGhpcyBpc24ndCBhY3R1YWxseSB0aGUgRkJELiBJdCBwb2ludHMgdG8KKyAgICAgICAgICog Ymlmcm9zdF9zY3JhdGNocGFkIGluc3RlYWQuIEhvd2V2ZXIsIGl0IGRvZXMgcG9pbnQgdG8gdGhl IHNhbWUgdGhpbmcKKyAgICAgICAgICogaW4gdmVydGV4IGFuZCB0aWxlciBqb2JzLgorICAgICAg ICAgKi8KKyAgICAgICAgbWFsaV9wdHIgZnJhbWVidWZmZXI7CisKKyNpZmRlZiBfX0xQNjRfXwor I2lmZGVmIEJJRlJPU1QKKyAgICAgICAgLyogbW9zdCBsaWtlbHkgcGFkZGluZyB0byBtYWtlIHRo aXMgYSBtdWx0aXBsZSBvZiA2NCBieXRlcyAqLworICAgICAgICB1NjQgemVybzc7CisjZW5kaWYK KyNlbmRpZgorfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IG1pZGdhcmRfcGF5 bG9hZF92ZXJ0ZXhfdGlsZXIgeworI2lmbmRlZiBfX0xQNjRfXworICAgICAgICB1bmlvbiBtaWRn YXJkX3ByaW1pdGl2ZV9zaXplIHByaW1pdGl2ZV9zaXplOworI2VuZGlmCisKKyAgICAgICAgc3Ry dWN0IG1hbGlfdmVydGV4X3RpbGVyX3ByZWZpeCBwcmVmaXg7CisKKyNpZm5kZWYgX19MUDY0X18K KyAgICAgICAgdTMyIHplcm8zOworI2VuZGlmCisKKyAgICAgICAgdTMyIGdsX2VuYWJsZXM7IC8v IDB4NQorCisgICAgICAgIC8qIE9mZnNldCBmb3IgZmlyc3QgdmVydGV4IGluIGJ1ZmZlciAqLwor ICAgICAgICB1MzIgZHJhd19zdGFydDsKKworCXVpbnRwdHJfdCB6ZXJvNTsKKworICAgICAgICBz dHJ1Y3QgbWFsaV92ZXJ0ZXhfdGlsZXJfcG9zdGZpeCBwb3N0Zml4OworCisjaWZkZWYgX19MUDY0 X18KKyAgICAgICAgdW5pb24gbWlkZ2FyZF9wcmltaXRpdmVfc2l6ZSBwcmltaXRpdmVfc2l6ZTsK KyNlbmRpZgorfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGJpZnJvc3RfcGF5 bG9hZF92ZXJ0ZXggeworICAgICAgICBzdHJ1Y3QgbWFsaV92ZXJ0ZXhfdGlsZXJfcHJlZml4IHBy ZWZpeDsKKyAgICAgICAgc3RydWN0IGJpZnJvc3RfdmVydGV4X29ubHkgdmVydGV4OworICAgICAg ICBzdHJ1Y3QgbWFsaV92ZXJ0ZXhfdGlsZXJfcG9zdGZpeCBwb3N0Zml4OworfSBfX2F0dHJpYnV0 ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGJpZnJvc3RfcGF5bG9hZF90aWxlciB7CisgICAgICAg IHN0cnVjdCBtYWxpX3ZlcnRleF90aWxlcl9wcmVmaXggcHJlZml4OworICAgICAgICBzdHJ1Y3Qg Ymlmcm9zdF90aWxlcl9vbmx5IHRpbGVyOworICAgICAgICBzdHJ1Y3QgbWFsaV92ZXJ0ZXhfdGls ZXJfcG9zdGZpeCBwb3N0Zml4OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0 IGJpZnJvc3RfcGF5bG9hZF9mdXNlZCB7CisgICAgICAgIHN0cnVjdCBtYWxpX3ZlcnRleF90aWxl cl9wcmVmaXggcHJlZml4OworICAgICAgICBzdHJ1Y3QgYmlmcm9zdF90aWxlcl9vbmx5IHRpbGVy OworICAgICAgICBzdHJ1Y3QgbWFsaV92ZXJ0ZXhfdGlsZXJfcG9zdGZpeCB0aWxlcl9wb3N0Zml4 OworICAgICAgICBzdHJ1Y3QgYmlmcm9zdF92ZXJ0ZXhfb25seSB2ZXJ0ZXg7CisgICAgICAgIHN0 cnVjdCBtYWxpX3ZlcnRleF90aWxlcl9wb3N0Zml4IHZlcnRleF9wb3N0Zml4OworfSBfX2F0dHJp YnV0ZV9fKChwYWNrZWQpKTsKKworLyogUG9pbnRlZCB0byBmcm9tIHRleHR1cmVfdHJhbXBvbGlu ZSwgbW9zdGx5IHVua25vd24gc3RpbGwsIGhhdmVuJ3QKKyAqIG1hbmFnZWQgdG8gcmVwbGF5IHN1 Y2Nlc3NmdWxseSAqLworCisvKiBQdXJwb3NlZnVsIG9mZi1ieS1vbmUgaW4gd2lkdGgsIGhlaWdo dCBmaWVsZHMuIEZvciBleGFtcGxlLCBhICg2NCwgNjQpCisgKiB0ZXh0dXJlIGlzIHN0b3JlZCBh cyAoNjMsIDYzKSBpbiB0aGVzZSBmaWVsZHMuIFRoaXMgYWRqdXN0cyBmb3IgdGhhdC4KKyAqIFRo ZXJlJ3MgYW4gaWRlbnRpY2FsIHBhdHRlcm4gaW4gdGhlIGZyYW1lYnVmZmVyIGRlc2NyaXB0b3Iu IEV2ZW4gdmVydGV4CisgKiBjb3VudCBmaWVsZHMgd29yayB0aGlzIHdheSwgaGVuY2UgdGhlIGdl bmVyaWMgbmFtZSAtLSBpbnRlZ3JhbCBmaWVsZHMgdGhhdAorICogYXJlIHN0cmljdGx5IHBvc2l0 aXZlIGdlbmVyYWxseSBuZWVkIHRoaXMgYWRqdXN0bWVudC4gKi8KKworI2RlZmluZSBNQUxJX1BP U0lUSVZFKGRpbSkgKGRpbSAtIDEpCisKKy8qIE9wcG9zaXRlIG9mIE1BTElfUE9TSVRJVkUsIGZv dW5kIGluIHRoZSBkZXB0aF91bml0cyBmaWVsZCAqLworCisjZGVmaW5lIE1BTElfTkVHQVRJVkUo ZGltKSAoZGltICsgMSkKKworLyogVXNlZCB3aXRoIHdyYXBwaW5nLiBJbmNvbXBsZXRlICh0aGlz IGlzIGEgNC1iaXQgZmllbGQuLi4pICovCisKK2VudW0gbWFsaV93cmFwX21vZGUgeworICAgICAg ICBNQUxJX1dSQVBfUkVQRUFUID0gMHg4LAorICAgICAgICBNQUxJX1dSQVBfQ0xBTVBfVE9fRURH RSA9IDB4OSwKKyAgICAgICAgTUFMSV9XUkFQX0NMQU1QX1RPX0JPUkRFUiA9IDB4QiwKKyAgICAg ICAgTUFMSV9XUkFQX01JUlJPUkVEX1JFUEVBVCA9IDB4QworfTsKKworLyogODE5Mng4MTkyICov CisjZGVmaW5lIE1BWF9NSVBfTEVWRUxTICgxMykKKworLyogQ3ViZW1hcCBibG9hdHMgZXZlcnl0 aGluZyB1cCAqLworI2RlZmluZSBNQVhfRkFDRVMgKDYpCisKKy8qIENvcnJlc3BvbmRzIHRvIHRo ZSB0eXBlIHBhc3NlZCB0byBnbFRleEltYWdlMkQgYW5kIHNvIGZvcnRoICovCisKK3N0cnVjdCBt YWxpX3RleHR1cmVfZm9ybWF0IHsKKyAgICAgICAgdW5zaWduZWQgc3dpenpsZSA6IDEyOworICAg ICAgICBlbnVtIG1hbGlfZm9ybWF0IGZvcm1hdCA6IDg7CisKKyAgICAgICAgdW5zaWduZWQgdXNh Z2UxIDogMzsKKyAgICAgICAgdW5zaWduZWQgaXNfbm90X2N1YmVtYXAgOiAxOworICAgICAgICB1 bnNpZ25lZCB1c2FnZTIgOiA4OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0 IG1hbGlfdGV4dHVyZV9kZXNjcmlwdG9yIHsKKyAgICAgICAgdWludDE2X3Qgd2lkdGg7CisgICAg ICAgIHVpbnQxNl90IGhlaWdodDsKKyAgICAgICAgdWludDE2X3QgZGVwdGg7CisKKyAgICAgICAg dWludDE2X3QgdW5rbm93bjE7CisKKyAgICAgICAgc3RydWN0IG1hbGlfdGV4dHVyZV9mb3JtYXQg Zm9ybWF0OworCisgICAgICAgIHVpbnQxNl90IHVua25vd24zOworCisgICAgICAgIC8qIE9uZSBm b3Igbm9uLW1pcG1hcHBlZCwgemVybyBmb3IgbWlwbWFwcGVkICovCisgICAgICAgIHVpbnQ4X3Qg dW5rbm93bjNBOworCisgICAgICAgIC8qIFplcm8gZm9yIG5vbi1taXBtYXBwZWQsIChudW1iZXIg b2YgbGV2ZWxzIC0gMSkgZm9yIG1pcG1hcHBlZCAqLworICAgICAgICB1aW50OF90IG5yX21pcG1h cF9sZXZlbHM7CisKKyAgICAgICAgLyogU3dpenpsaW5nIGlzIGEgc2luZ2xlIDMyLWJpdCB3b3Jk LCBicm9rZW4gdXAgaGVyZSBmb3IgY29udmVuaWVuY2UuCisgICAgICAgICAqIEhlcmUsIHN3aXp6 bGluZyByZWZlcnMgdG8gdGhlIEVTIDMuMCB0ZXh0dXJlIHBhcmFtZXRlcnMgZm9yIGNoYW5uZWwK KyAgICAgICAgICogbGV2ZWwgc3dpenpsaW5nLCBub3QgdGhlIGludGVybmFsIHBpeGVsLWxldmVs IHN3aXp6bGluZyB3aGljaCBpcworICAgICAgICAgKiBiZWxvdyBPcGVuR0wncyByZWFjaCAqLwor CisgICAgICAgIHVuc2lnbmVkIHN3aXp6bGUgOiAxMjsKKyAgICAgICAgdW5zaWduZWQgc3dpenps ZV96ZXJvICAgICAgIDogMjA7CisKKyAgICAgICAgdWludDMyX3QgdW5rbm93bjU7CisgICAgICAg IHVpbnQzMl90IHVua25vd242OworICAgICAgICB1aW50MzJfdCB1bmtub3duNzsKKworICAgICAg ICBtYWxpX3B0ciBzd2l6emxlZF9iaXRtYXBzW01BWF9NSVBfTEVWRUxTICogTUFYX0ZBQ0VTXTsK K30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qIFVzZWQgYXMgcGFydCBvZiBmaWx0ZXJf bW9kZSAqLworCisjZGVmaW5lIE1BTElfTElORUFSIDAKKyNkZWZpbmUgTUFMSV9ORUFSRVNUIDEK KyNkZWZpbmUgTUFMSV9NSVBfTElORUFSICgweDE4KQorCisvKiBVc2VkIHRvIGNvbnN0cnVjdCBs b3cgYml0cyBvZiBmaWx0ZXJfbW9kZSAqLworCisjZGVmaW5lIE1BTElfVEVYX01BRyhtb2RlKSAo KChtb2RlKSAmIDEpIDw8IDApCisjZGVmaW5lIE1BTElfVEVYX01JTihtb2RlKSAoKChtb2RlKSAm IDEpIDw8IDEpCisKKyNkZWZpbmUgTUFMSV9URVhfTUFHX01BU0sgKDEpCisjZGVmaW5lIE1BTElf VEVYX01JTl9NQVNLICgyKQorCisjZGVmaW5lIE1BTElfRklMVEVSX05BTUUoZmlsdGVyKSAoZmls dGVyID8gIk1BTElfTkVBUkVTVCIgOiAiTUFMSV9MSU5FQVIiKQorCisvKiBVc2VkIGZvciBsb2Qg ZW5jb2RpbmcuIFRoYW5rcyBAdXJqYW1hbiBmb3IgcG9pbnRpbmcgb3V0IHRoZXNlIHJvdXRpbmVz IGNhbgorICogYmUgY2xlYW5lZCB1cCBhIGxvdC4gKi8KKworI2RlZmluZSBERUNPREVfRklYRURf MTYoeCkgKChmbG9hdCkgKHggLyAyNTYuMCkpCisKK3N0YXRpYyBpbmxpbmUgdWludDE2X3QKK0ZJ WEVEXzE2KGZsb2F0IHgpCit7CisgICAgICAgIC8qIENsYW1wIGlucHV0cywgYWNjb3VudGluZyBm b3IgZmxvYXQgZXJyb3IgKi8KKyAgICAgICAgZmxvYXQgbWF4X2xvZCA9ICgzMi4wIC0gKDEuMCAv IDUxMi4wKSk7CisKKyAgICAgICAgeCA9ICgoeCA+IG1heF9sb2QpID8gbWF4X2xvZCA6ICgoeCA8 IDAuMCkgPyAwLjAgOiB4KSk7CisKKyAgICAgICAgcmV0dXJuIChpbnQpICh4ICogMjU2LjApOwor fQorCitzdHJ1Y3QgbWFsaV9zYW1wbGVyX2Rlc2NyaXB0b3IgeworICAgICAgICB1aW50MzJfdCBm aWx0ZXJfbW9kZTsKKworICAgICAgICAvKiBGaXhlZCBwb2ludC4gVXBwZXIgOC1iaXRzIGlzIGJl Zm9yZSB0aGUgZGVjaW1hbCBwb2ludCwgYWx0aG91Z2ggaXQKKyAgICAgICAgICogY2FwcyBbMC0z MV0uIExvd2VyIDgtYml0cyBpcyBhZnRlciB0aGUgZGVjaW1hbCBwb2ludDogaW50KHJvdW5kKHgg KgorICAgICAgICAgKiAyNTYpKSAqLworCisgICAgICAgIHVpbnQxNl90IG1pbl9sb2Q7CisgICAg ICAgIHVpbnQxNl90IG1heF9sb2Q7CisKKyAgICAgICAgLyogQWxsIG9uZSB3b3JkIGluIHJlYWxp dHksIGJ1dCBwYWNrZWQgYSBiaXQgKi8KKworICAgICAgICBlbnVtIG1hbGlfd3JhcF9tb2RlIHdy YXBfcyA6IDQ7CisgICAgICAgIGVudW0gbWFsaV93cmFwX21vZGUgd3JhcF90IDogNDsKKyAgICAg ICAgZW51bSBtYWxpX3dyYXBfbW9kZSB3cmFwX3IgOiA0OworICAgICAgICBlbnVtIG1hbGlfYWx0 X2Z1bmMgY29tcGFyZV9mdW5jIDogMzsKKworICAgICAgICAvKiBBIHNpbmdsZSBzZXQgYml0IG9m IHVua25vd24sIGhhISAqLworICAgICAgICB1bnNpZ25lZCB1bmtub3duMiA6IDE7CisKKyAgICAg ICAgdW5zaWduZWQgemVybyA6IDE2OworCisgICAgICAgIHVpbnQzMl90IHplcm8yOworICAgICAg ICBmbG9hdCBib3JkZXJfY29sb3JbNF07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisv KiBUT0RPOiBXaGF0IGFyZSB0aGUgZmxvYXRzPyBBcHBhcmVudGx5IGFsd2F5cyB7IC1pbmYsIC1p bmYsIGluZiwgaW5mIH0sCisgKiB1bmxlc3MgdGhlIHNjaXNzb3IgdGVzdCBpcyBlbmFibGVkLgor ICoKKyAqIHZpZXdwb3J0MC92aWV3cG9ydDEgZm9ybSB0aGUgYXJndW1lbnRzIHRvIGdsVmlld3Bv cnQuIHZpZXdwb3J0MSBpcyBtb2RpZmllZAorICogYnkgTUFMSV9QT1NJVElWRTsgdmlld3BvcnQw IGlzIGFzLWlzLgorICovCisKK3N0cnVjdCBtYWxpX3ZpZXdwb3J0IHsKKyAgICAgICAgLyogWFkg Y2xpcHBpbmcgcGxhbmVzICovCisgICAgICAgIGZsb2F0IGNsaXBfbWlueDsKKyAgICAgICAgZmxv YXQgY2xpcF9taW55OworICAgICAgICBmbG9hdCBjbGlwX21heHg7CisgICAgICAgIGZsb2F0IGNs aXBfbWF4eTsKKworICAgICAgICAvKiBEZXB0aCBjbGlwcGluZyBwbGFuZXMgKi8KKyAgICAgICAg ZmxvYXQgY2xpcF9taW56OworICAgICAgICBmbG9hdCBjbGlwX21heHo7CisKKyAgICAgICAgdTE2 IHZpZXdwb3J0MFsyXTsKKyAgICAgICAgdTE2IHZpZXdwb3J0MVsyXTsKK30gX19hdHRyaWJ1dGVf XygocGFja2VkKSk7CisKKy8qIFRPRE86IFZhcnlpbmcgbWV0YSBpcyBzeW1tZXRyaWNhbCB3aXRo IGF0dHJfbWV0YSwgYnV0IHRoZXJlIGlzIHNvbWUKKyAqIHdlaXJkbmVzcyBhc3NvY2lhdGVkLiBG aWd1cmUgaXQgb3V0LiAqLworCitzdHJ1Y3QgbWFsaV91bmtub3duNiB7CisgICAgICAgIHU2NCB1 bmtub3duMDsKKyAgICAgICAgdTY0IHVua25vd24xOworfTsKKworLyogRnJvbSBwcmVzZW50YXRp b25zLCAxNngxNiB0aWxlcyBleHRlcm5hbGx5LiBVc2Ugc2hpZnQgZm9yIGZhc3QgY29tcHV0YXRp b24KKyAqIG9mIHRpbGUgbnVtYmVycy4gKi8KKworI2RlZmluZSBNQUxJX1RJTEVfU0hJRlQgNAor I2RlZmluZSBNQUxJX1RJTEVfTEVOR1RIICgxIDw8IE1BTElfVElMRV9TSElGVCkKKworLyogVGls ZSBjb29yZGluYXRlcyBhcmUgc3RvcmVkIGFzIGEgY29tcGFjdCB1MzIsIGFzIG9ubHkgMTIgYml0 cyBhcmUgbmVlZGVkIHRvCisgKiBlYWNoIGNvbXBvbmVudC4gTm90aWNlIHRoYXQgdGhpcyBwcm92 aWRlcyBhIHRoZW9yZXRpY2FsIHVwcGVyIGJvdW5kIG9mICgxIDw8CisgKiAxMikgPSA0MDk2IHRp bGVzIGluIGVhY2ggZGlyZWN0aW9uLCBhZGRyZXNzaW5nIGEgbWF4aW11bSBmcmFtZWJ1ZmZlciBv ZiBzaXplCisgKiA2NTUzNng2NTUzNi4gTXVsdGlwbHlpbmcgdGhhdCB0b2dldGhlciwgdGltZXMg YW5vdGhlciBmb3VyIGdpdmVuIHRoYXQgTWFsaQorICogZnJhbWVidWZmZXJzIGFyZSAzMi1iaXQg QVJHQjg4ODgsIG1lYW5zIHRoYXQgdGhpcyB1cHBlciBib3VuZCB3b3VsZCB0YWtlIDE2CisgKiBn aWdhYnl0ZXMgb2YgUkFNIGp1c3QgdG8gc3RvcmUgdGhlIHVuY29tcHJlc3NlZCBmcmFtZWJ1ZmZl ciBpdHNlbGYsIGxldAorICogYWxvbmUgcmVuZGVyaW5nIGluIHJlYWwtdGltZSB0byBzdWNoIGEg YnVmZmVyLgorICoKKyAqIE5pY2Ugam9iLCBndXlzLiovCisKKy8qIEZyb20gbWFsaV9rYmFzZV8x MDk2OV93b3JrYXJvdW5kLmMgKi8KKyNkZWZpbmUgTUFMSV9YX0NPT1JEX01BU0sgMHgwMDAwMEZG RgorI2RlZmluZSBNQUxJX1lfQ09PUkRfTUFTSyAweDBGRkYwMDAwCisKKy8qIEV4dHJhY3QgcGFy dHMgb2YgYSB0aWxlIGNvb3JkaW5hdGUgKi8KKworI2RlZmluZSBNQUxJX1RJTEVfQ09PUkRfWChj b29yZCkgKChjb29yZCkgJiBNQUxJX1hfQ09PUkRfTUFTSykKKyNkZWZpbmUgTUFMSV9USUxFX0NP T1JEX1koY29vcmQpICgoKGNvb3JkKSAmIE1BTElfWV9DT09SRF9NQVNLKSA+PiAxNikKKyNkZWZp bmUgTUFMSV9USUxFX0NPT1JEX0ZMQUdTKGNvb3JkKSAoKGNvb3JkKSAmIH4oTUFMSV9YX0NPT1JE X01BU0sgfCBNQUxJX1lfQ09PUkRfTUFTSykpCisKKy8qIE5vIGtub3duIGZsYWdzIHlldCwgYnV0 IGp1c3QgaW4gY2FzZS4uLj8gKi8KKworI2RlZmluZSBNQUxJX1RJTEVfTk9fRkxBRyAoMCkKKwor LyogSGVscGVycyB0byBnZW5lcmF0ZSB0aWxlIGNvb3JkaW5hdGVzIGJhc2VkIG9uIHRoZSBib3Vu ZGFyeSBjb29yZGluYXRlcyBpbgorICogc2NyZWVuIHNwYWNlLiBTbywgd2l0aCB0aGUgYm91bmRz ICgwLCAwKSB0byAoMTI4LCAxMjgpIGZvciB0aGUgc2NyZWVuLCB0aGVzZQorICogZnVuY3Rpb25z IHdvdWxkIGNvbnZlcnQgaXQgdG8gdGhlIGJvdW5kaW5nIHRpbGVzICgwLCAwKSB0byAoNywgNyku CisgKiBJbnRlbnRpb25hbCAib2ZmLWJ5LW9uZSI7IGZpbmRpbmcgdGhlIHRpbGUgbnVtYmVyIGlz IGEgZm9ybSBvZiBmZW5jZXBvc3QKKyAqIHByb2JsZW0uICovCisKKyNkZWZpbmUgTUFMSV9NQUtF X1RJTEVfQ09PUkRTKFgsIFkpICgoWCkgfCAoKFkpIDw8IDE2KSkKKyNkZWZpbmUgTUFMSV9CT1VO RF9UT19USUxFKEIsIGJpYXMpICgoQiAtIGJpYXMpID4+IE1BTElfVElMRV9TSElGVCkKKyNkZWZp bmUgTUFMSV9DT09SRElOQVRFX1RPX1RJTEUoVywgSCwgYmlhcykgTUFMSV9NQUtFX1RJTEVfQ09P UkRTKE1BTElfQk9VTkRfVE9fVElMRShXLCBiaWFzKSwgTUFMSV9CT1VORF9UT19USUxFKEgsIGJp YXMpKQorI2RlZmluZSBNQUxJX0NPT1JESU5BVEVfVE9fVElMRV9NSU4oVywgSCkgTUFMSV9DT09S RElOQVRFX1RPX1RJTEUoVywgSCwgMCkKKyNkZWZpbmUgTUFMSV9DT09SRElOQVRFX1RPX1RJTEVf TUFYKFcsIEgpIE1BTElfQ09PUkRJTkFURV9UT19USUxFKFcsIEgsIDEpCisKK3N0cnVjdCBtYWxp X3BheWxvYWRfZnJhZ21lbnQgeworICAgICAgICB1MzIgbWluX3RpbGVfY29vcmQ7CisgICAgICAg IHUzMiBtYXhfdGlsZV9jb29yZDsKKyAgICAgICAgbWFsaV9wdHIgZnJhbWVidWZmZXI7Cit9IF9f YXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKiAoU2luZ2xlPykgRnJhbWVidWZmZXIgRGVzY3Jp cHRvciAqLworCisvKiBGbGFncyBhcHBseSB0byBmb3JtYXQuIFdpdGgganVzdCBNU0FBX0EgYW5k IE1TQUFfQiwgdGhlIGZyYW1lYnVmZmVyIGlzCisgKiBjb25maWd1cmVkIGZvciA0eC4gV2l0aCBN U0FBXzgsIGl0IGlzIGNvbmZpZ3VyZWQgZm9yIDh4LiAqLworCisjZGVmaW5lIE1BTElfRlJBTUVC VUZGRVJfTVNBQV84ICgxIDw8IDMpCisjZGVmaW5lIE1BTElfRlJBTUVCVUZGRVJfTVNBQV9BICgx IDw8IDQpCisjZGVmaW5lIE1BTElfRlJBTUVCVUZGRVJfTVNBQV9CICgxIDw8IDIzKQorCisvKiBG YXN0L3Nsb3cgYmFzZWQgb24gd2hldGhlciBhbGwgdGhyZWUgYnVmZmVycyBhcmUgY2xlYXJlZCBh dCBvbmNlICovCisKKyNkZWZpbmUgTUFMSV9DTEVBUl9GQVNUICAgICAgICAgKDEgPDwgMTgpCisj ZGVmaW5lIE1BTElfQ0xFQVJfU0xPVyAgICAgICAgICgxIDw8IDI4KQorI2RlZmluZSBNQUxJX0NM RUFSX1NMT1dfU1RFTkNJTCAoMSA8PCAzMSkKKworc3RydWN0IG1hbGlfc2luZ2xlX2ZyYW1lYnVm ZmVyIHsKKyAgICAgICAgdTMyIHVua25vd24xOworICAgICAgICB1MzIgdW5rbm93bjI7CisgICAg ICAgIHU2NCB1bmtub3duX2FkZHJlc3NfMDsKKyAgICAgICAgdTY0IHplcm8xOworICAgICAgICB1 NjQgemVybzA7CisKKyAgICAgICAgLyogRXhhY3QgZm9ybWF0IGlzIGlyb25pY2FsbHkgbm90IGtu b3duLCBzaW5jZSBFR0wgaXMgZmlubmlja3kgd2l0aCB0aGUKKyAgICAgICAgICogYmxvYi4gTVNB QSwgY29sb3Vyc3BhY2UsIGV0YyBhcmUgY29uZmlndXJlZCBoZXJlLiAqLworCisgICAgICAgIHUz MiBmb3JtYXQ7CisKKyAgICAgICAgdTMyIGNsZWFyX2ZsYWdzOworICAgICAgICB1MzIgemVybzI7 CisKKyAgICAgICAgLyogUHVycG9zZWZ1bCBvZmYtYnktb25lIGluIHRoZXNlIGZpZWxkcyBzaG91 bGQgYmUgYWNjb3VudGVkIGZvciBieSB0aGUKKyAgICAgICAgICogTUFMSV9ESU1FTlNJT04gbWFj cm8gKi8KKworICAgICAgICB1MTYgd2lkdGg7CisgICAgICAgIHUxNiBoZWlnaHQ7CisKKyAgICAg ICAgdTMyIHplcm8zWzhdOworCisgICAgICAgIC8qIEJ5IGRlZmF1bHQsIHRoZSBmcmFtZWJ1ZmZl ciBpcyB1cHNpZGUgZG93biBmcm9tIE9wZW5HTCdzCisgICAgICAgICAqIHBlcnNwZWN0aXZlLiBT ZXQgZnJhbWVidWZmZXIgdG8gdGhlIGVuZCBhbmQgbmVnYXRlIHRoZSBzdHJpZGUgdG8KKyAgICAg ICAgICogZmxpcCBpbiB0aGUgWSBkaXJlY3Rpb24gKi8KKworICAgICAgICBtYWxpX3B0ciBmcmFt ZWJ1ZmZlcjsKKyAgICAgICAgaW50MzJfdCBzdHJpZGU7CisKKyAgICAgICAgdTMyIHplcm80Owor CisgICAgICAgIC8qIERlcHRoIGFuZCBzdGVuY2lsIGJ1ZmZlcnMgYXJlIGludGVybGVhdmVkLCBp dCBhcHBlYXJzLCBhcyB0aGV5IGFyZQorICAgICAgICAgKiBzZXQgdG8gdGhlIHNhbWUgYWRkcmVz cyBpbiBjYXB0dXJlcy4gQm90aCBmaWVsZHMgc2V0IHRvIHplcm8gaWYgdGhlCisgICAgICAgICAq IGJ1ZmZlciBpcyBub3QgYmVpbmcgY2xlYXJlZC4gRGVwZW5kaW5nIG9uIEdMX0VOQUJMRSBtYWdp YywgeW91IG1pZ2h0CisgICAgICAgICAqIGdldCBhIHplcm8gZW5hYmxlIGRlc3BpdGUgdGhlIGJ1 ZmZlciBiZWluZyBwcmVzZW50OyB0aGF0IHN0aWxsIGlzCisgICAgICAgICAqIGRpc2FibGVkLiAq LworCisgICAgICAgIG1hbGlfcHRyIGRlcHRoX2J1ZmZlcjsgLy8gbm90IFNBTUVfVkEKKyAgICAg ICAgdTY0IGRlcHRoX2J1ZmZlcl9lbmFibGU7CisKKyAgICAgICAgbWFsaV9wdHIgc3RlbmNpbF9i dWZmZXI7IC8vIG5vdCBTQU1FX1ZBCisgICAgICAgIHU2NCBzdGVuY2lsX2J1ZmZlcl9lbmFibGU7 CisKKyAgICAgICAgdTMyIGNsZWFyX2NvbG9yXzE7IC8vIFJHQkE4ODg4IGZyb20gZ2xDbGVhciwg YWN0dWFsbHkgdXNlZCBieSBoYXJkd2FyZQorICAgICAgICB1MzIgY2xlYXJfY29sb3JfMjsgLy8g YWx3YXlzIGVxdWFsLCBidXQgdW5jbGVhciBmdW5jdGlvbj8KKyAgICAgICAgdTMyIGNsZWFyX2Nv bG9yXzM7IC8vIGFsd2F5cyBlcXVhbCwgYnV0IHVuY2xlYXIgZnVuY3Rpb24/CisgICAgICAgIHUz MiBjbGVhcl9jb2xvcl80OyAvLyBhbHdheXMgZXF1YWwsIGJ1dCB1bmNsZWFyIGZ1bmN0aW9uPwor CisgICAgICAgIC8qIFNldCB0byB6ZXJvIGlmIG5vdCBjbGVhcmVkICovCisKKyAgICAgICAgZmxv YXQgY2xlYXJfZGVwdGhfMTsgLy8gZmxvYXQzMiwgZGl0dG8KKyAgICAgICAgZmxvYXQgY2xlYXJf ZGVwdGhfMjsgLy8gZmxvYXQzMiwgZGl0dG8KKyAgICAgICAgZmxvYXQgY2xlYXJfZGVwdGhfMzsg Ly8gZmxvYXQzMiwgZGl0dG8KKyAgICAgICAgZmxvYXQgY2xlYXJfZGVwdGhfNDsgLy8gZmxvYXQz MiwgZGl0dG8KKworICAgICAgICB1MzIgY2xlYXJfc3RlbmNpbDsgLy8gRXhhY3RseSBhcyBpdCBh cHBlYXJzIGluIE9wZW5HTAorCisgICAgICAgIHUzMiB6ZXJvNls3XTsKKworICAgICAgICAvKiBW ZXJ5IHdlaXJkIGZvcm1hdCwgc2VlIGdlbmVyYXRpb24gY29kZSBpbiB0cmFuc19idWlsZGVyLmMg Ki8KKyAgICAgICAgdTMyIHJlc29sdXRpb25fY2hlY2s7CisKKyAgICAgICAgdTMyIHRpbGVyX2Zs YWdzOworCisgICAgICAgIHU2NCB1bmtub3duX2FkZHJlc3NfMTsgLyogUG9pbnRpbmcgdG93YXJk cy4uLiBhIHplcm8gYnVmZmVyPyAqLworICAgICAgICB1NjQgdW5rbm93bl9hZGRyZXNzXzI7CisK KyAgICAgICAgLyogU2VlIG1hbGlfa2Jhc2VfcmVwbGF5LmMgKi8KKyAgICAgICAgdTY0IHRpbGVy X2hlYXBfZnJlZTsKKyAgICAgICAgdTY0IHRpbGVyX2hlYXBfZW5kOworCisgICAgICAgIC8qIE1v cmUgYmVsb3cgdGhpcywgbWF5YmUgKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8q IEZvcm1hdCBiaXRzIGZvciB0aGUgcmVuZGVyIHRhcmdldCBmbGFncyAqLworCisjZGVmaW5lIE1B TElfTUZCRF9GT1JNQVRfQUZCQyAJICAoMSA8PCA1KQorI2RlZmluZSBNQUxJX01GQkRfRk9STUFU X01TQUEgCSAgKDEgPDwgNykKKworc3RydWN0IG1hbGlfcnRfZm9ybWF0IHsKKyAgICAgICAgdW5z aWduZWQgdW5rMSA6IDMyOworICAgICAgICB1bnNpZ25lZCB1bmsyIDogMzsKKworICAgICAgICB1 bnNpZ25lZCBucl9jaGFubmVscyA6IDI7IC8qIE1BTElfUE9TSVRJVkUgKi8KKworICAgICAgICB1 bnNpZ25lZCBmbGFncyA6IDExOworCisgICAgICAgIHVuc2lnbmVkIHN3aXp6bGUgOiAxMjsKKwor ICAgICAgICB1bnNpZ25lZCB1bms0IDogNDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisK K3N0cnVjdCBiaWZyb3N0X3JlbmRlcl90YXJnZXQgeworICAgICAgICBzdHJ1Y3QgbWFsaV9ydF9m b3JtYXQgZm9ybWF0OworCisgICAgICAgIHU2NCB6ZXJvMTsKKworICAgICAgICB1bmlvbiB7Cisg ICAgICAgICAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFN0dWZm IHJlbGF0ZWQgdG8gQVJNIEZyYW1lYnVmZmVyIENvbXByZXNzaW9uLiBXaGVuIEFGQkMgaXMgZW5h YmxlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAqIHRoZXJlIGlzIGFuIGV4dHJhIG1ldGFk YXRhIGJ1ZmZlciB0aGF0IGNvbnRhaW5zIDE2IGJ5dGVzIHBlciB0aWxlLgorICAgICAgICAgICAg ICAgICAgICAgICAgICogVGhlIGZyYW1lYnVmZmVyIG5lZWRzIHRvIGJlIHRoZSBzYW1lIHNpemUg YXMgYmVmb3JlLCBzaW5jZSB3ZSBkb24ndAorICAgICAgICAgICAgICAgICAgICAgICAgICoga25v dyBhaGVhZCBvZiB0aW1lIGhvdyBtdWNoIHNwYWNlIGl0IHdpbGwgdGFrZSB1cC4gVGhlCisgICAg ICAgICAgICAgICAgICAgICAgICAgKiBmcmFtZWJ1ZmZlcl9zdHJpZGUgaXMgc2V0IHRvIDAsIHNp bmNlIHRoZSBkYXRhIGlzbid0IHN0b3JlZCBsaW5lYXJseQorICAgICAgICAgICAgICAgICAgICAg ICAgICogYW55bW9yZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgICAgICAgICAg ICAgICAgICAgICAgICBtYWxpX3B0ciBtZXRhZGF0YTsKKyAgICAgICAgICAgICAgICAgICAgICAg IHUzMiBzdHJpZGU7IC8vIHN0cmlkZSBpbiB1bml0cyBvZiB0aWxlcworICAgICAgICAgICAgICAg ICAgICAgICAgdTMyIHVuazsgLy8gPSAweDIwMDAwCisgICAgICAgICAgICAgICAgfSBhZmJjOwor CisgICAgICAgICAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEhl Y2sgaWYgSSBrbm93ICovCisgICAgICAgICAgICAgICAgICAgICAgICB1NjQgdW5rOworICAgICAg ICAgICAgICAgICAgICAgICAgbWFsaV9wdHIgcG9pbnRlcjsKKyAgICAgICAgICAgICAgICB9IGNo dW5rbm93bjsKKyAgICAgICAgfTsKKworICAgICAgICBtYWxpX3B0ciBmcmFtZWJ1ZmZlcjsKKwor ICAgICAgICB1MzIgemVybzIgOiA0OworICAgICAgICB1MzIgZnJhbWVidWZmZXJfc3RyaWRlIDog Mjg7IC8vIGluIHVuaXRzIG9mIGJ5dGVzCisgICAgICAgIHUzMiB6ZXJvMzsKKworICAgICAgICB1 MzIgY2xlYXJfY29sb3JfMTsgLy8gUkdCQTg4ODggZnJvbSBnbENsZWFyLCBhY3R1YWxseSB1c2Vk IGJ5IGhhcmR3YXJlCisgICAgICAgIHUzMiBjbGVhcl9jb2xvcl8yOyAvLyBhbHdheXMgZXF1YWws IGJ1dCB1bmNsZWFyIGZ1bmN0aW9uPworICAgICAgICB1MzIgY2xlYXJfY29sb3JfMzsgLy8gYWx3 YXlzIGVxdWFsLCBidXQgdW5jbGVhciBmdW5jdGlvbj8KKyAgICAgICAgdTMyIGNsZWFyX2NvbG9y XzQ7IC8vIGFsd2F5cyBlcXVhbCwgYnV0IHVuY2xlYXIgZnVuY3Rpb24/Cit9IF9fYXR0cmlidXRl X18oKHBhY2tlZCkpOworCisvKiBBbiBvcHRpb25hbCBwYXJ0IG9mIGJpZnJvc3RfZnJhbWVidWZm ZXIuIEl0IGNvbWVzIGJldHdlZW4gdGhlIG1haW4gc3RydWN0dXJlCisgKiBhbmQgdGhlIGFycmF5 IG9mIHJlbmRlciB0YXJnZXRzLiBJdCBtdXN0IGJlIGluY2x1ZGVkIGlmIGFueSBvZiB0aGVzZSBh cmUKKyAqIGVuYWJsZWQ6CisgKgorICogLSBUcmFuc2FjdGlvbiBFbGltaW5hdGlvbgorICogLSBE ZXB0aC9zdGVuY2lsCisgKiAtIFRPRE86IEFueXRoaW5nIGVsc2U/CisgKi8KKworLyogRmxhZ3Mg ZmllbGQ6IG5vdGUsIHRoZXNlIGFyZSBndWVzc2VzICovCisKKyNkZWZpbmUgTUFMSV9FWFRSQV9Q UkVTRU5UICAgICAgKDB4NDAwKQorI2RlZmluZSBNQUxJX0VYVFJBX0FGQkMgICAgICAgICAoMHgy MCkKKyNkZWZpbmUgTUFMSV9FWFRSQV9BRkJDX1pTICAgICAgKDB4MTApCisjZGVmaW5lIE1BTElf RVhUUkFfWlMgICAgICAgICAgICgweDQpCisKK3N0cnVjdCBiaWZyb3N0X2ZiX2V4dHJhIHsKKyAg ICAgICAgbWFsaV9wdHIgY2hlY2tzdW07CisgICAgICAgIC8qIEVhY2ggdGlsZSBoYXMgYW4gOCBi eXRlIGNoZWNrc3VtLCBzbyB0aGUgc3RyaWRlIGlzICJ3aWR0aCBpbiB0aWxlcyAqIDgiICovCisg ICAgICAgIHUzMiBjaGVja3N1bV9zdHJpZGU7CisKKyAgICAgICAgdTMyIGZsYWdzOworCisgICAg ICAgIHVuaW9uIHsKKyAgICAgICAgICAgICAgICAvKiBOb3RlOiBBRkJDIGlzIG9ubHkgYWxsb3dl ZCBmb3IgMjQvOCBjb21iaW5lZCBkZXB0aC9zdGVuY2lsLiAqLworICAgICAgICAgICAgICAgIHN0 cnVjdCB7CisgICAgICAgICAgICAgICAgICAgICAgICBtYWxpX3B0ciBkZXB0aF9zdGVuY2lsX2Fm YmNfbWV0YWRhdGE7CisgICAgICAgICAgICAgICAgICAgICAgICB1MzIgZGVwdGhfc3RlbmNpbF9h ZmJjX3N0cmlkZTsgLy8gaW4gdW5pdHMgb2YgdGlsZXMKKyAgICAgICAgICAgICAgICAgICAgICAg IHUzMiB6ZXJvMTsKKworICAgICAgICAgICAgICAgICAgICAgICAgbWFsaV9wdHIgZGVwdGhfc3Rl bmNpbDsKKworICAgICAgICAgICAgICAgICAgICAgICAgdTY0IHBhZGRpbmc7CisgICAgICAgICAg ICAgICAgfSBkc19hZmJjOworCisgICAgICAgICAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAg ICAgICAgICAgICAgIC8qIERlcHRoIGJlY29tZXMgZGVwdGgvc3RlbmNpbCBpbiBjYXNlIG9mIGNv bWJpbmVkIEQvUyAqLworICAgICAgICAgICAgICAgICAgICAgICAgbWFsaV9wdHIgZGVwdGg7Cisg ICAgICAgICAgICAgICAgICAgICAgICB1MzIgZGVwdGhfc3RyaWRlX3plcm8gOiA0OworICAgICAg ICAgICAgICAgICAgICAgICAgdTMyIGRlcHRoX3N0cmlkZSA6IDI4OworICAgICAgICAgICAgICAg ICAgICAgICAgdTMyIHplcm8xOworCisgICAgICAgICAgICAgICAgICAgICAgICBtYWxpX3B0ciBz dGVuY2lsOworICAgICAgICAgICAgICAgICAgICAgICAgdTMyIHN0ZW5jaWxfc3RyaWRlX3plcm8g OiA0OworICAgICAgICAgICAgICAgICAgICAgICAgdTMyIHN0ZW5jaWxfc3RyaWRlIDogMjg7Cisg ICAgICAgICAgICAgICAgICAgICAgICB1MzIgemVybzI7CisgICAgICAgICAgICAgICAgfSBkc19s aW5lYXI7CisgICAgICAgIH07CisKKworICAgICAgICB1NjQgemVybzMsIHplcm80OworfSBfX2F0 dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyogZmxhZ3MgZm9yIHVuazMgKi8KKworLyogRW5hYmxl cyB3cml0aW5nIGRlcHRoIHJlc3VsdHMgYmFjayB0byBtYWluIG1lbW9yeSAocmF0aGVyIHRoYW4g a2VlcGluZyB0aGVtCisgKiBvbi1jaGlwIGluIHRoZSB0aWxlIGJ1ZmZlciBhbmQgdGhlbiBkaXNj YXJkaW5nKSAqLworCisjZGVmaW5lIE1BTElfTUZCRF9ERVBUSF9XUklURSAoMSA8PCAxMCkKKwor LyogVGhlIE1GQkQgY29udGFpbnMgdGhlIGV4dHJhIGJpZnJvc3RfZmJfZXh0cmEgc2VjdGlvbiAq LworCisjZGVmaW5lIE1BTElfTUZCRF9FWFRSQSAoMSA8PCAxMykKKworc3RydWN0IGJpZnJvc3Rf ZnJhbWVidWZmZXIgeworICAgICAgICB1MzIgdW5rMDsgLy8gPSAweDEwCisKKyAgICAgICAgdTMy IHVua25vd24yOyAvLyA9IDB4MWYsIHNhbWUgYXMgU0ZCRAorICAgICAgICBtYWxpX3B0ciBzY3Jh dGNocGFkOworCisgICAgICAgIC8qIDB4MTAgKi8KKyAgICAgICAgbWFsaV9wdHIgc2FtcGxlX2xv Y2F0aW9uczsKKyAgICAgICAgbWFsaV9wdHIgdW5rbm93bjE7CisgICAgICAgIC8qIDB4MjAgKi8K KyAgICAgICAgdTE2IHdpZHRoMSwgaGVpZ2h0MTsKKyAgICAgICAgdTMyIHplcm8zOworICAgICAg ICB1MTYgd2lkdGgyLCBoZWlnaHQyOworICAgICAgICB1MzIgdW5rMSA6IDE5OyAvLyA9IDB4MDEw MDAKKyAgICAgICAgdTMyIHJ0X2NvdW50XzEgOiAyOyAvLyBvZmYtYnktb25lICh1c2UgTUFMSV9Q T1NJVElWRSkKKyAgICAgICAgdTMyIHVuazIgOiAzOyAvLyA9IDAKKyAgICAgICAgdTMyIHJ0X2Nv dW50XzIgOiAzOyAvLyBubyBvZmYtYnktb25lCisgICAgICAgIHUzMiB6ZXJvNCA6IDU7CisgICAg ICAgIC8qIDB4MzAgKi8KKyAgICAgICAgdTMyIGNsZWFyX3N0ZW5jaWwgOiA4OworICAgICAgICB1 MzIgdW5rMyA6IDI0OyAvLyA9IDB4MTAwCisgICAgICAgIGZsb2F0IGNsZWFyX2RlcHRoOworICAg ICAgICBtYWxpX3B0ciB0aWxlcl9tZXRhOworICAgICAgICAvKiAweDQwICovCisKKyAgICAgICAg LyogTm90ZTogdGhlc2UgYXJlIGd1ZXNzZXMhICovCisgICAgICAgIG1hbGlfcHRyIHRpbGVyX3Nj cmF0Y2hfc3RhcnQ7CisgICAgICAgIG1hbGlfcHRyIHRpbGVyX3NjcmF0Y2hfbWlkZGxlOworCisg ICAgICAgIC8qIFRoZXNlIGFyZSBub3QsIHNpbmNlIHdlIHNlZSBzeW1tZXRyeSB3aXRoIHJlcGxh eSBqb2JzIHdoaWNoIG5hbWUgdGhlc2UgZXhwbGljaXRseSAqLworICAgICAgICBtYWxpX3B0ciB0 aWxlcl9oZWFwX3N0YXJ0OworICAgICAgICBtYWxpX3B0ciB0aWxlcl9oZWFwX2VuZDsKKyAgICAg ICAgCisgICAgICAgIHU2NCB6ZXJvOSwgemVybzEwLCB6ZXJvMTEsIHplcm8xMjsKKworICAgICAg ICAvKiBvcHRpb25hbDogc3RydWN0IGJpZnJvc3RfZmJfZXh0cmEgZXh0cmEgKi8KKyAgICAgICAg Lyogc3RydWN0IGJpZnJvc3RfcmVuZGVyX3RhcmdldCBydHNbXSAqLworfSBfX2F0dHJpYnV0ZV9f KChwYWNrZWQpKTsKKworI2VuZGlmIC8qIF9fUEFORlJPU1RfSk9CX0hfXyAqLwpkaWZmIC0tZ2l0 IGEvbGliL3BhbmZyb3N0LW1pc2MuaCBiL2xpYi9wYW5mcm9zdC1taXNjLmgKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi44MjM2M2Q4NzMwYmYKLS0tIC9kZXYvbnVsbAor KysgYi9saWIvcGFuZnJvc3QtbWlzYy5oCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiDCqSBDb3B5 cmlnaHQgMjAxNy0yMDE4IFRoZSBQYW5mcm9zdCBDb21tdW5pdHkKKyAqCisgKiBQZXJtaXNzaW9u IGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5p bmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRp b24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdp dGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSBy aWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBz dWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRv IHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8g ZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBh Ym92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRp bmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGll cyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRI RSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBL SU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRP IFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAor ICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xB SU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04g T0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0Yg T1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERF QUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisKKyNpZm5kZWYgX19QQU5GUk9T VF9NSVNDX0hfXworI2RlZmluZSBfX1BBTkZST1NUX01JU0NfSF9fCisKKyNpbmNsdWRlIDxpbnR0 eXBlcy5oPgorCit0eXBlZGVmIHVpbnQ4X3QgIHU4OwordHlwZWRlZiB1aW50MTZfdCB1MTY7Cit0 eXBlZGVmIHVpbnQzMl90IHUzMjsKK3R5cGVkZWYgdWludDY0X3QgdTY0OworCit0eXBlZGVmIGlu dDhfdCAgczg7Cit0eXBlZGVmIGludDE2X3QgczE2OwordHlwZWRlZiBpbnQzMl90IHMzMjsKK3R5 cGVkZWYgaW50NjRfdCBzNjQ7CisKK3R5cGVkZWYgdWludDY0X3QgbWFsaV9wdHI7CisKKyNkZWZp bmUgTUFMSV9QVFJfRk1UICIweCUiIFBSSXg2NAorCisvKiBGSVhNRTogcHV0IHRoaXMgc29tZXdo ZXJlIG1vcmUgZml0dGluZyAqLworI2RlZmluZSBNQUxJX01FTV9NQVBfVFJBQ0tJTkdfSEFORExF ICgzdWxsIDw8IDEyKQorCisjZW5kaWYKLS0gCjIuMjAuMQoKX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KaWd0LWRldiBtYWlsaW5nIGxpc3QKaWd0LWRldkBs aXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1h bi9saXN0aW5mby9pZ3QtZGV2