From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: [PATCH v2 5/9] gcov: add new interface and 3.4 and 4.7 format support Date: Mon, 10 Oct 2016 10:40:34 +0100 Message-ID: <1476092438-24895-6-git-send-email-wei.liu2@citrix.com> References: <1476092438-24895-1-git-send-email-wei.liu2@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1btX4e-0005dE-BN for xen-devel@lists.xenproject.org; Mon, 10 Oct 2016 09:40:44 +0000 In-Reply-To: <1476092438-24895-1-git-send-email-wei.liu2@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Xen-devel Cc: Stefano Stabellini , Wei Liu , George Dunlap , Andrew Cooper , Ian Jackson , Tim Deegan , philippe.gabriel@citrix.com, Jan Beulich List-Id: xen-devel@lists.xenproject.org QSBuZXcgc3lzY3RsIGludGVyZmFjZSBmb3IgcGFzc2luZyBnY292IGRhdGEgYmFjayB0byB1c2Vy c3BhY2UuIFRoZSBuZXcKaW50ZXJmYWNlIHVzZXMgYSBjdXN0b21pc2VkIHJlY29yZCBmaWxlIGZv cm1hdC4gVGhlIG5ldyBzeXNjdGwgcmV1c2VzCm9yaWdpbmFsIHN5c2N0bCBudW1iZXIgYnV0IHJl bmFtZXMgdGhlIG9wIHRvIGdjb3Zfb3AuCgpCb3RoIGdjYyAzLjQgYW5kIDQuNyBmb3JtYXQgYXJl IHN1cHBvcnRlZC4gVGhlIGNvZGUgaXMgcmV3cml0dGVuIHNvIHRoYXQKYSBuZXcgZm9ybWF0IGNh biBiZSBlYXNpbHkgYWRkZWQgaW4gdGhlIGZ1dHVyZS4gIFZlcnNpb24gc3BlY2lmaWMgY29kZQpp cyBncm91cGVkIGludG8gZGlmZmVyZW50IGZpbGVzLiBUaGUgZm9ybWF0IG9uZSBuZWVkcyB0byB1 c2UgY2FuIGJlCnBpY2tlZCB2aWEgS2NvbmZpZy4gVGhlIGRlZmF1bHQgZm9ybWF0IGlzIDQuNyBm b3JtYXQuCgpVc2Vyc3BhY2UgcHJvZ3JhbXMgdG8gaGFuZGxlIGV4dHJhY3RlZCBkYXRhIHdpbGwg Y29tZSBpbiBhIGxhdGVyIHBhdGNoLgoKU2lnbmVkLW9mZi1ieTogV2VpIExpdSA8d2VpLmxpdTJA Y2l0cml4LmNvbT4KLS0tCnYyOgoxLiBVc2UgdGFiIGluIEtjb25maWcgYW5kIGluZGVudCBoZWxw IHRleHQgcHJvcGVybHkuCjIuIEJ1bXAgWEVOX1NZU0NUTF9JTlRFUkZBQ0VfVkVSU0lPTi4KMy4g Rml4IGNvc21ldGljIGlzc3Vlcy4KCkNjOiBBbmRyZXcgQ29vcGVyIDxhbmRyZXcuY29vcGVyM0Bj aXRyaXguY29tPgpDYzogR2VvcmdlIER1bmxhcCA8R2VvcmdlLkR1bmxhcEBldS5jaXRyaXguY29t PgpDYzogSWFuIEphY2tzb24gPGlhbi5qYWNrc29uQGV1LmNpdHJpeC5jb20+CkNjOiBKYW4gQmV1 bGljaCA8amJldWxpY2hAc3VzZS5jb20+CkNjOiBLb25yYWQgUnplc3p1dGVrIFdpbGsgPGtvbnJh ZC53aWxrQG9yYWNsZS5jb20+CkNjOiBTdGVmYW5vIFN0YWJlbGxpbmkgPHNzdGFiZWxsaW5pQGtl cm5lbC5vcmc+CkNjOiBUaW0gRGVlZ2FuIDx0aW1AeGVuLm9yZz4KQ2M6IFdlaSBMaXUgPHdlaS5s aXUyQGNpdHJpeC5jb20+Ci0tLQogeGVuL0tjb25maWcuZGVidWcgICAgICAgICAgIHwgIDI0ICsr LQogeGVuL2NvbW1vbi9nY292L01ha2VmaWxlICAgIHwgICAzICsKIHhlbi9jb21tb24vZ2Nvdi9n Y2NfM180LmMgICB8IDM2MyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKwogeGVuL2NvbW1vbi9nY292L2djY180XzcuYyAgIHwgMjAxICsrKysrKysrKysrKysrKysr KysrKysrKwogeGVuL2NvbW1vbi9nY292L2djb3YuYyAgICAgIHwgMjU3ICsrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysKIHhlbi9jb21tb24vZ2Nvdi9nY292LmggICAgICB8ICAzNiArKysr KwogeGVuL2NvbW1vbi9nY292L2djb3ZfYmFzZS5jIHwgIDY0ICsrKysrKysrCiB4ZW4vY29tbW9u L3N5c2N0bC5jICAgICAgICAgfCAgIDggKwogeGVuL2luY2x1ZGUvcHVibGljL3N5c2N0bC5oIHwg IDM5ICsrKystCiB4ZW4vaW5jbHVkZS94ZW4vZ2Nvdi5oICAgICAgfCAgIDkgKysKIDEwIGZpbGVz IGNoYW5nZWQsIDk5NyBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUg MTAwNjQ0IHhlbi9jb21tb24vZ2Nvdi9nY2NfM180LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCB4ZW4v Y29tbW9uL2djb3YvZ2NjXzRfNy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgeGVuL2NvbW1vbi9nY292 L2djb3YuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHhlbi9jb21tb24vZ2Nvdi9nY292LmgKIGNyZWF0 ZSBtb2RlIDEwMDY0NCB4ZW4vY29tbW9uL2djb3YvZ2Nvdl9iYXNlLmMKIGNyZWF0ZSBtb2RlIDEw MDY0NCB4ZW4vaW5jbHVkZS94ZW4vZ2Nvdi5oCgpkaWZmIC0tZ2l0IGEveGVuL0tjb25maWcuZGVi dWcgYi94ZW4vS2NvbmZpZy5kZWJ1ZwppbmRleCBlZjg2M2RjLi5jNjVlNTQzIDEwMDY0NAotLS0g YS94ZW4vS2NvbmZpZy5kZWJ1ZworKysgYi94ZW4vS2NvbmZpZy5kZWJ1ZwpAQCAtMzAsMTYgKzMw LDMwIEBAIGNvbmZpZyBGUkFNRV9QT0lOVEVSCiAKIGNvbmZpZyBHQ09WCiAJYm9vbCAiR2NvdiBT dXBwb3J0IgotCWRlcGVuZHMgb24gQlJPS0VOCiAJLS0taGVscC0tLQogCSAgRW5hYmxlIGdjb3Yg KGEgdGVzdCBjb3ZlcmFnZSBwcm9ncmFtIGluIEdDQykgc3VwcG9ydC4KIAotCSAgQ3VycmVudGx5 IHRoZSBkYXRhIHN0cnVjdHVyZSBhbmQgaHlwZXJjYWxsIGludGVyZmFjZSBhcmUgdGllZAotCSAg dG8gR0NDIDMuNCBnY292IGZvcm1hdC4gWW91IG5lZWQgdG8gaGF2ZSBhIHZlcnNpb24gb2YgR0ND Ci0JICB0aGF0IGlzIGNvbXBhdGlibGUgd2l0aCB0aGF0IGZvcm1hdCB0byBtYWtlIGdjb3Ygd29y ay4KLQogCSAgSWYgdW5zdXJlLCBzYXkgTiBoZXJlLgogCitjaG9pY2UKKwlwcm9tcHQgIlNwZWNp ZnkgR2NvdiBmb3JtYXQiCisJZGVwZW5kcyBvbiBHQ09WCisJZGVmYXVsdCBHQ09WX0ZPUk1BVF80 XzcKKwktLS1oZWxwLS0tCisJICBUaGUgZ2NvdiBmb3JtYXQgaXMgZGV0ZXJtaW5lZCBieSBnY2Mg dmVyc2lvbi4KKworY29uZmlnIEdDT1ZfRk9STUFUXzRfNworCWJvb2wgIkdDQyA0LjcgZm9ybWF0 IgorCS0tLWhlbHAtLS0KKwkgIFNlbGVjdCB0aGlzIG9wdGlvbiB0byB1c2UgdGhlIGZvcm1hdCBz cGVjaWZpZWQgaW4gR0NDIDQuNy4KKworY29uZmlnIEdDT1ZfRk9STUFUXzNfNAorCWJvb2wgIkdD QyAzLjQgZm9ybWF0IgorCS0tLWhlbHAtLS0KKwkgIFNlbGVjdCB0aGlzIG9wdGlvbiB0byB1c2Ug dGhlIGZvcm1hdCBzcGVjaWZpZWQgaW4gR0NDIDMuNC4KKworZW5kY2hvaWNlCisKIGNvbmZpZyBM T0NLX1BST0ZJTEUKIAlib29sICJMb2NrIFByb2ZpbGluZyIKIAktLS1oZWxwLS0tCmRpZmYgLS1n aXQgYS94ZW4vY29tbW9uL2djb3YvTWFrZWZpbGUgYi94ZW4vY29tbW9uL2djb3YvTWFrZWZpbGUK aW5kZXggZTY5ZGUyOS4uMDNhYzFlNSAxMDA2NDQKLS0tIGEveGVuL2NvbW1vbi9nY292L01ha2Vm aWxlCisrKyBiL3hlbi9jb21tb24vZ2Nvdi9NYWtlZmlsZQpAQCAtMCwwICsxLDMgQEAKK29iai15 ICs9IGdjb3ZfYmFzZS5vIGdjb3Yubworb2JqLSQoQ09ORklHX0dDT1ZfRk9STUFUXzNfNCkgKz0g Z2NjXzNfNC5vCitvYmotJChDT05GSUdfR0NPVl9GT1JNQVRfNF83KSArPSBnY2NfNF83Lm8KZGlm ZiAtLWdpdCBhL3hlbi9jb21tb24vZ2Nvdi9nY2NfM180LmMgYi94ZW4vY29tbW9uL2djb3YvZ2Nj XzNfNC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiNjJiM2YKLS0tIC9k ZXYvbnVsbAorKysgYi94ZW4vY29tbW9uL2djb3YvZ2NjXzNfNC5jCkBAIC0wLDAgKzEsMzYzIEBA CisvKgorICogIFRoaXMgY29kZSBwcm92aWRlcyBmdW5jdGlvbnMgdG8gaGFuZGxlIGdjYydzIHBy b2ZpbGluZyBkYXRhIGZvcm1hdAorICogIGludHJvZHVjZWQgd2l0aCBnY2MgMy40LiBGdXR1cmUg dmVyc2lvbnMgb2YgZ2NjIG1heSBjaGFuZ2UgdGhlIGdjb3YKKyAqICBmb3JtYXQgKGFzIGhhcHBl bmVkIGJlZm9yZSksIHNvIGFsbCBmb3JtYXQtc3BlY2lmaWMgaW5mb3JtYXRpb24gbmVlZHMKKyAq ICB0byBiZSBrZXB0IG1vZHVsYXIgYW5kIGVhc2lseSBleGNoYW5nZWFibGUuCisgKgorICogIFRo aXMgZmlsZSBpcyBiYXNlZCBvbiBnY2MtaW50ZXJuYWwgZGVmaW5pdGlvbnMuIEZ1bmN0aW9ucyBh bmQgZGF0YQorICogIHN0cnVjdHVyZXMgYXJlIGRlZmluZWQgdG8gYmUgY29tcGF0aWJsZSB3aXRo IGdjYyBjb3VudGVycGFydHMuCisgKiAgRm9yIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcsIHJlZmVy IHRvIGdjYyBzb3VyY2U6IGdjYy9nY292LWlvLmguCisgKgorICogICAgQ29weXJpZ2h0IElCTSBD b3JwLiAyMDA5CisgKiAgICBBdXRob3Iocyk6IFBldGVyIE9iZXJwYXJsZWl0ZXIgPG9iZXJwYXJA bGludXgudm5ldC5pYm0uY29tPgorICoKKyAqICAgIFVzZXMgZ2NjLWludGVybmFsIGRhdGEgZGVm aW5pdGlvbnMuCisgKgorICogIEltcG9ydGVkIGZyb20gTGludXggYW5kIG1vZGlmaWVkIGZvciBY ZW4gYnkKKyAqICAgIFdlaSBMaXUgPHdlaS5saXUyQGNpdHJpeC5jb20+CisgKi8KKworCisjaW5j bHVkZSA8eGVuL2xpYi5oPgorCisjaW5jbHVkZSAiZ2Nvdi5oIgorCisjZGVmaW5lIEdDT1ZfQ09V TlRFUlMgNQorCitzdGF0aWMgc3RydWN0IGdjb3ZfaW5mbyAqZ2Nvdl9pbmZvX2hlYWQ7CisKKy8q KgorICogc3RydWN0IGdjb3ZfZm5faW5mbyAtIHByb2ZpbGluZyBtZXRhIGRhdGEgcGVyIGZ1bmN0 aW9uCisgKiBAaWRlbnQ6IG9iamVjdCBmaWxlLXVuaXF1ZSBmdW5jdGlvbiBpZGVudGlmaWVyCisg KiBAY2hlY2tzdW06IGZ1bmN0aW9uIGNoZWNrc3VtCisgKiBAbl9jdHJzOiBudW1iZXIgb2YgdmFs dWVzIHBlciBjb3VudGVyIHR5cGUgYmVsb25naW5nIHRvIHRoaXMgZnVuY3Rpb24KKyAqCisgKiBU aGlzIGRhdGEgaXMgZ2VuZXJhdGVkIGJ5IGdjYyBkdXJpbmcgY29tcGlsYXRpb24gYW5kIGRvZXNu J3QgY2hhbmdlCisgKiBhdCBydW4tdGltZS4KKyAqLworc3RydWN0IGdjb3ZfZm5faW5mbworewor ICAgIHVuc2lnbmVkIGludCBpZGVudDsKKyAgICB1bnNpZ25lZCBpbnQgY2hlY2tzdW07CisgICAg dW5zaWduZWQgaW50IG5fY3Ryc1swXTsKK307CisKKy8qKgorICogc3RydWN0IGdjb3ZfY3RyX2lu Zm8gLSBwcm9maWxpbmcgZGF0YSBwZXIgY291bnRlciB0eXBlCisgKiBAbnVtOiBudW1iZXIgb2Yg Y291bnRlciB2YWx1ZXMgZm9yIHRoaXMgdHlwZQorICogQHZhbHVlczogYXJyYXkgb2YgY291bnRl ciB2YWx1ZXMgZm9yIHRoaXMgdHlwZQorICogQG1lcmdlOiBtZXJnZSBmdW5jdGlvbiBmb3IgY291 bnRlciB2YWx1ZXMgb2YgdGhpcyB0eXBlICh1bnVzZWQpCisgKgorICogVGhpcyBkYXRhIGlzIGdl bmVyYXRlZCBieSBnY2MgZHVyaW5nIGNvbXBpbGF0aW9uIGFuZCBkb2Vzbid0IGNoYW5nZQorICog YXQgcnVuLXRpbWUgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIHRoZSB2YWx1ZXMgYXJyYXkuCisgKi8K K3N0cnVjdCBnY292X2N0cl9pbmZvCit7CisgICAgdW5zaWduZWQgaW50IG51bTsKKyAgICBnY292 X3R5cGUgKnZhbHVlczsKKyAgICB2b2lkICgqbWVyZ2UpKGdjb3ZfdHlwZSAqLCB1bnNpZ25lZCBp bnQpOworfTsKKworLyoqCisgKiBzdHJ1Y3QgZ2Nvdl9pbmZvIC0gcHJvZmlsaW5nIGRhdGEgcGVy IG9iamVjdCBmaWxlCisgKiBAdmVyc2lvbjogZ2NvdiB2ZXJzaW9uIG1hZ2ljIGluZGljYXRpbmcg dGhlIGdjYyB2ZXJzaW9uIHVzZWQgZm9yIGNvbXBpbGF0aW9uCisgKiBAbmV4dDogbGlzdCBoZWFk IGZvciBhIHNpbmdseS1saW5rZWQgbGlzdAorICogQHN0YW1wOiB0aW1lIHN0YW1wCisgKiBAZmls ZW5hbWU6IG5hbWUgb2YgdGhlIGFzc29jaWF0ZWQgZ2NvdiBkYXRhIGZpbGUKKyAqIEBuX2Z1bmN0 aW9uczogbnVtYmVyIG9mIGluc3RydW1lbnRlZCBmdW5jdGlvbnMKKyAqIEBmdW5jdGlvbnM6IGZ1 bmN0aW9uIGRhdGEKKyAqIEBjdHJfbWFzazogbWFzayBzcGVjaWZ5aW5nIHdoaWNoIGNvdW50ZXIg dHlwZXMgYXJlIGFjdGl2ZQorICogQGNvdW50czogY291bnRlciBkYXRhIHBlciBjb3VudGVyIHR5 cGUKKyAqCisgKiBUaGlzIGRhdGEgaXMgZ2VuZXJhdGVkIGJ5IGdjYyBkdXJpbmcgY29tcGlsYXRp b24gYW5kIGRvZXNuJ3QgY2hhbmdlCisgKiBhdCBydW4tdGltZSB3aXRoIHRoZSBleGNlcHRpb24g b2YgdGhlIG5leHQgcG9pbnRlci4KKyAqLworc3RydWN0IGdjb3ZfaW5mbworeworICAgIHVuc2ln bmVkIGludCAgICAgICAgICAgICAgdmVyc2lvbjsKKyAgICBzdHJ1Y3QgZ2Nvdl9pbmZvICAgICAg ICAgICpuZXh0OworICAgIHVuc2lnbmVkIGludCAgICAgICAgICAgICAgc3RhbXA7CisgICAgY29u c3QgY2hhciAgICAgICAgICAgICAgICAqZmlsZW5hbWU7CisgICAgdW5zaWduZWQgaW50ICAgICAg ICAgICAgICBuX2Z1bmN0aW9uczsKKyAgICBjb25zdCBzdHJ1Y3QgZ2Nvdl9mbl9pbmZvICpmdW5j dGlvbnM7CisgICAgdW5zaWduZWQgaW50ICAgICAgICAgICAgICBjdHJfbWFzazsKKyAgICBzdHJ1 Y3QgZ2Nvdl9jdHJfaW5mbyAgICAgIGNvdW50c1swXTsKK307CisKKy8qKgorICogc3RydWN0IHR5 cGVfaW5mbyAtIGl0ZXJhdG9yIGhlbHBlciBhcnJheQorICogQGN0cl90eXBlOiBjb3VudGVyIHR5 cGUKKyAqIEBvZmZzZXQ6IGluZGV4IG9mIHRoZSBmaXJzdCB2YWx1ZSBvZiB0aGUgY3VycmVudCBm dW5jdGlvbiBmb3IgdGhpcyB0eXBlCisgKgorICogVGhpcyBhcnJheSBpcyBuZWVkZWQgdG8gY29u dmVydCB0aGUgaW4tbWVtb3J5IGRhdGEgZm9ybWF0IGludG8gdGhlIGluLWZpbGUKKyAqIGRhdGEg Zm9ybWF0OgorICoKKyAqIEluLW1lbW9yeToKKyAqICAgZm9yIGVhY2ggY291bnRlciB0eXBlCisg KiAgICAgZm9yIGVhY2ggZnVuY3Rpb24KKyAqICAgICAgIHZhbHVlcworICoKKyAqIEluLWZpbGU6 CisgKiAgIGZvciBlYWNoIGZ1bmN0aW9uCisgKiAgICAgZm9yIGVhY2ggY291bnRlciB0eXBlCisg KiAgICAgICB2YWx1ZXMKKyAqCisgKiBTZWUgZ2NjIHNvdXJjZSBnY2MvZ2Nvdi1pby5oIGZvciBt b3JlIGluZm9ybWF0aW9uIG9uIGRhdGEgb3JnYW5pemF0aW9uLgorICovCitzdHJ1Y3QgdHlwZV9p bmZvIHsKKyAgICBpbnQgY3RyX3R5cGU7CisgICAgdW5zaWduZWQgaW50IG9mZnNldDsKK307CisK Ky8qKgorICogc3RydWN0IGdjb3ZfaXRlcmF0b3IgLSBzcGVjaWZpZXMgY3VycmVudCBmaWxlIHBv c2l0aW9uIGluIGxvZ2ljYWwgcmVjb3JkcworICogQGluZm86IGFzc29jaWF0ZWQgcHJvZmlsaW5n IGRhdGEKKyAqIEByZWNvcmQ6IHJlY29yZCB0eXBlCisgKiBAZnVuY3Rpb246IGZ1bmN0aW9uIG51 bWJlcgorICogQHR5cGU6IGNvdW50ZXIgdHlwZQorICogQGNvdW50OiBpbmRleCBpbnRvIHZhbHVl cyBhcnJheQorICogQG51bV90eXBlczogbnVtYmVyIG9mIGNvdW50ZXIgdHlwZXMKKyAqIEB0eXBl X2luZm86IGhlbHBlciBhcnJheSB0byBnZXQgdmFsdWVzLWFycmF5IG9mZnNldCBmb3IgY3VycmVu dCBmdW5jdGlvbgorICovCitzdHJ1Y3QgZ2Nvdl9pdGVyYXRvciB7CisgICAgY29uc3Qgc3RydWN0 IGdjb3ZfaW5mbyAqaW5mbzsKKworICAgIGludCByZWNvcmQ7CisgICAgdW5zaWduZWQgaW50IGZ1 bmN0aW9uOworICAgIHVuc2lnbmVkIGludCB0eXBlOworICAgIHVuc2lnbmVkIGludCBjb3VudDsK KworICAgIGludCBudW1fdHlwZXM7CisgICAgc3RydWN0IHR5cGVfaW5mbyB0eXBlX2luZm9bR0NP Vl9DT1VOVEVSU107Cit9OworCisvKiBNYXBwaW5nIG9mIGxvZ2ljYWwgcmVjb3JkIG51bWJlciB0 byBhY3R1YWwgZmlsZSBjb250ZW50LiAqLworI2RlZmluZSBSRUNPUkRfRklMRV9NQUdJQyAgICAg ICAwCisjZGVmaW5lIFJFQ09SRF9HQ09WX1ZFUlNJT04gICAgIDEKKyNkZWZpbmUgUkVDT1JEX1RJ TUVfU1RBTVAgICAgICAgMgorI2RlZmluZSBSRUNPUkRfRlVOQ1RJT05fVEFHICAgICAzCisjZGVm aW5lIFJFQ09SRF9GVU5DVE9OX1RBR19MRU4gIDQKKyNkZWZpbmUgUkVDT1JEX0ZVTkNUSU9OX0lE RU5UICAgNQorI2RlZmluZSBSRUNPUkRfRlVOQ1RJT05fQ0hFQ0sgICA2CisjZGVmaW5lIFJFQ09S RF9DT1VOVF9UQUcgICAgICAgIDcKKyNkZWZpbmUgUkVDT1JEX0NPVU5UX0xFTiAgICAgICAgOAor I2RlZmluZSBSRUNPUkRfQ09VTlQgICAgICAgICAgICA5CisKK3N0YXRpYyBpbnQgY291bnRlcl9h Y3RpdmUoY29uc3Qgc3RydWN0IGdjb3ZfaW5mbyAqaW5mbywgdW5zaWduZWQgaW50IHR5cGUpCit7 CisgICAgcmV0dXJuICgxIDw8IHR5cGUpICYgaW5mby0+Y3RyX21hc2s7Cit9CisKK3N0YXRpYyB1 bnNpZ25lZCBpbnQgbnVtX2NvdW50ZXJfYWN0aXZlKGNvbnN0IHN0cnVjdCBnY292X2luZm8gKmlu Zm8pCit7CisgICAgdW5zaWduZWQgaW50IGk7CisgICAgdW5zaWduZWQgaW50IHJlc3VsdCA9IDA7 CisKKyAgICBmb3IgKCBpID0gMDsgaSA8IEdDT1ZfQ09VTlRFUlM7IGkrKyApCisgICAgICAgIGlm ICggY291bnRlcl9hY3RpdmUoaW5mbywgaSkgKQorICAgICAgICAgICAgcmVzdWx0Kys7CisKKyAg ICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIGdjb3ZfaW5mb19saW5rKHN0cnVjdCBnY292X2lu Zm8gKmluZm8pCit7CisgICAgaW5mby0+bmV4dCA9IGdjb3ZfaW5mb19oZWFkOworICAgIGdjb3Zf aW5mb19oZWFkID0gaW5mbzsKK30KKworc3RydWN0IGdjb3ZfaW5mbyAqZ2Nvdl9pbmZvX25leHQo Y29uc3Qgc3RydWN0IGdjb3ZfaW5mbyAqaW5mbykKK3sKKyAgICBpZiAoICFpbmZvICkKKyAgICAg ICAgcmV0dXJuIGdjb3ZfaW5mb19oZWFkOworCisgICAgcmV0dXJuIGluZm8tPm5leHQ7Cit9CisK K2NvbnN0IGNoYXIgKmdjb3ZfaW5mb19maWxlbmFtZShjb25zdCBzdHJ1Y3QgZ2Nvdl9pbmZvICpp bmZvKQoreworICAgIHJldHVybiBpbmZvLT5maWxlbmFtZTsKK30KKwordm9pZCBnY292X2luZm9f cmVzZXQoc3RydWN0IGdjb3ZfaW5mbyAqaW5mbykKK3sKKyAgICB1bnNpZ25lZCBpbnQgYWN0aXZl ID0gbnVtX2NvdW50ZXJfYWN0aXZlKGluZm8pOworICAgIHVuc2lnbmVkIGludCBpOworCisgICAg Zm9yICggaSA9IDA7IGkgPCBhY3RpdmU7IGkrKyApCisgICAgICAgIG1lbXNldChpbmZvLT5jb3Vu dHNbaV0udmFsdWVzLCAwLAorICAgICAgICAgICAgICAgaW5mby0+Y291bnRzW2ldLm51bSAqIHNp emVvZihnY292X3R5cGUpKTsKK30KKworc3RhdGljIHNpemVfdCBnZXRfZm5fc2l6ZShjb25zdCBz dHJ1Y3QgZ2Nvdl9pbmZvICppbmZvKQoreworICAgIHNpemVfdCBzaXplOworCisgICAgc2l6ZSA9 IHNpemVvZihzdHJ1Y3QgZ2Nvdl9mbl9pbmZvKSArIG51bV9jb3VudGVyX2FjdGl2ZShpbmZvKSAq CisgICAgICAgIHNpemVvZih1bnNpZ25lZCBpbnQpOworICAgIGlmICggX19hbGlnbm9mX18oc3Ry dWN0IGdjb3ZfZm5faW5mbykgPiBzaXplb2YodW5zaWduZWQgaW50KSApCisgICAgICAgIHNpemUg PSBST1VORFVQKHNpemUsIF9fYWxpZ25vZl9fKHN0cnVjdCBnY292X2ZuX2luZm8pKTsKKyAgICBy ZXR1cm4gc2l6ZTsKK30KKworc3RhdGljIHN0cnVjdCBnY292X2ZuX2luZm8gKmdldF9mbl9pbmZv KGNvbnN0IHN0cnVjdCBnY292X2luZm8gKmluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZuKQoreworICAgIHJldHVybiAoc3RydWN0IGdj b3ZfZm5faW5mbyAqKQorICAgICAgICAoKGNoYXIgKikgaW5mby0+ZnVuY3Rpb25zICsgZm4gKiBn ZXRfZm5fc2l6ZShpbmZvKSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZ2Nvdl9mbl9pbmZvICpnZXRf ZnVuYyhzdHJ1Y3QgZ2Nvdl9pdGVyYXRvciAqaXRlcikKK3sKKyAgICByZXR1cm4gZ2V0X2ZuX2lu Zm8oaXRlci0+aW5mbywgaXRlci0+ZnVuY3Rpb24pOworfQorCitzdGF0aWMgc3RydWN0IHR5cGVf aW5mbyAqZ2V0X3R5cGUoc3RydWN0IGdjb3ZfaXRlcmF0b3IgKml0ZXIpCit7CisgICAgcmV0dXJu ICZpdGVyLT50eXBlX2luZm9baXRlci0+dHlwZV07Cit9CisKKy8qKgorICogZ2Nvdl9pdGVyX25l eHQgLSBhZHZhbmNlIGZpbGUgaXRlcmF0b3IgdG8gbmV4dCBsb2dpY2FsIHJlY29yZAorICogQGl0 ZXI6IGZpbGUgaXRlcmF0b3IKKyAqCisgKiBSZXR1cm4gemVybyBpZiBuZXcgcG9zaXRpb24gaXMg dmFsaWQsIG5vbi16ZXJvIGlmIGl0ZXJhdG9yIGhhcyByZWFjaGVkIGVuZC4KKyAqLworc3RhdGlj IGludCBnY292X2l0ZXJfbmV4dChzdHJ1Y3QgZ2Nvdl9pdGVyYXRvciAqaXRlcikKK3sKKyAgICBz d2l0Y2ggKCBpdGVyLT5yZWNvcmQgKQorICAgIHsKKyAgICBjYXNlIFJFQ09SRF9GSUxFX01BR0lD OgorICAgIGNhc2UgUkVDT1JEX0dDT1ZfVkVSU0lPTjoKKyAgICBjYXNlIFJFQ09SRF9GVU5DVElP Tl9UQUc6CisgICAgY2FzZSBSRUNPUkRfRlVOQ1RPTl9UQUdfTEVOOgorICAgIGNhc2UgUkVDT1JE X0ZVTkNUSU9OX0lERU5UOgorICAgIGNhc2UgUkVDT1JEX0NPVU5UX1RBRzoKKyAgICAgICAgLyog QWR2YW5jZSB0byBuZXh0IHJlY29yZCAqLworICAgICAgICBpdGVyLT5yZWNvcmQrKzsKKyAgICAg ICAgYnJlYWs7CisgICAgY2FzZSBSRUNPUkRfQ09VTlQ6CisgICAgICAgIC8qIEFkdmFuY2UgdG8g bmV4dCBjb3VudCAqLworICAgICAgICBpdGVyLT5jb3VudCsrOworICAgICAgICAvKiBmYWxsIHRo cm91Z2ggKi8KKyAgICBjYXNlIFJFQ09SRF9DT1VOVF9MRU46CisgICAgICAgIGlmICggaXRlci0+ Y291bnQgPCBnZXRfZnVuYyhpdGVyKS0+bl9jdHJzW2l0ZXItPnR5cGVdICkKKyAgICAgICAgewor ICAgICAgICAgICAgaXRlci0+cmVjb3JkID0gOTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg ICB9CisgICAgICAgIC8qIEFkdmFuY2UgdG8gbmV4dCBjb3VudGVyIHR5cGUgKi8KKyAgICAgICAg Z2V0X3R5cGUoaXRlciktPm9mZnNldCArPSBpdGVyLT5jb3VudDsKKyAgICAgICAgaXRlci0+Y291 bnQgPSAwOworICAgICAgICBpdGVyLT50eXBlKys7CisgICAgICAgIC8qIGZhbGwgdGhyb3VnaCAq LworICAgIGNhc2UgUkVDT1JEX0ZVTkNUSU9OX0NIRUNLOgorICAgICAgICBpZiAoIGl0ZXItPnR5 cGUgPCBpdGVyLT5udW1fdHlwZXMgKQorICAgICAgICB7CisgICAgICAgICAgICBpdGVyLT5yZWNv cmQgPSA3OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgLyogQWR2YW5j ZSB0byBuZXh0IGZ1bmN0aW9uICovCisgICAgICAgIGl0ZXItPnR5cGUgPSAwOworICAgICAgICBp dGVyLT5mdW5jdGlvbisrOworICAgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KKyAgICBjYXNlIFJF Q09SRF9USU1FX1NUQU1QOgorICAgICAgICBpZiAoIGl0ZXItPmZ1bmN0aW9uIDwgaXRlci0+aW5m by0+bl9mdW5jdGlvbnMgKQorICAgICAgICAgICAgaXRlci0+cmVjb3JkID0gMzsKKyAgICAgICAg ZWxzZQorICAgICAgICAgICAgaXRlci0+cmVjb3JkID0gLTE7CisgICAgICAgIGJyZWFrOworICAg IH0KKyAgICAvKiBDaGVjayBmb3IgRU9GLiAqLworICAgIGlmICggaXRlci0+cmVjb3JkID09IC0x ICkKKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gMDsK K30KKworLyoqCisgKiBnY292X2l0ZXJfd3JpdGUgLSB3cml0ZSBkYXRhIHRvIGJ1ZmZlcgorICog QGl0ZXI6IGZpbGUgaXRlcmF0b3IKKyAqIEBidWY6IGJ1ZmZlciB0byB3cml0ZSB0bywgaWYgaXQg aXMgTlVMTCwgbm90aGluZyBpcyB3cml0dGVuCisgKiBAcG9zOiBwb3NpdGlvbiBpbnNpZGUgYnVm ZmVyIHRvIHN0YXJ0IHdyaXRpbmcKKyAqCisgKiBSZXR1cm4gbnVtYmVyIG9mIGJ5dGVzIHdyaXR0 ZW4gaW50byBidWZmZXIuCisgKi8KK3N0YXRpYyBzaXplX3QgZ2Nvdl9pdGVyX3dyaXRlKHN0cnVj dCBnY292X2l0ZXJhdG9yICppdGVyLCBjaGFyICpidWYsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzaXplX3QgcG9zKQoreworICAgIHNpemVfdCByZXQgPSAwOworCisgICAgc3dpdGNo ICggaXRlci0+cmVjb3JkICkKKyAgICB7CisgICAgY2FzZSBSRUNPUkRfRklMRV9NQUdJQzoKKyAg ICAgICAgcmV0ID0gZ2Nvdl9zdG9yZV91MzIoYnVmLCBwb3MsIEdDT1ZfREFUQV9NQUdJQyk7Cisg ICAgICAgIGJyZWFrOworICAgIGNhc2UgUkVDT1JEX0dDT1ZfVkVSU0lPTjoKKyAgICAgICAgcmV0 ID0gZ2Nvdl9zdG9yZV91MzIoYnVmLCBwb3MsIGl0ZXItPmluZm8tPnZlcnNpb24pOworICAgICAg ICBicmVhazsKKyAgICBjYXNlIFJFQ09SRF9USU1FX1NUQU1QOgorICAgICAgICByZXQgPSBnY292 X3N0b3JlX3UzMihidWYsIHBvcywgaXRlci0+aW5mby0+c3RhbXApOworICAgICAgICBicmVhazsK KyAgICBjYXNlIFJFQ09SRF9GVU5DVElPTl9UQUc6CisgICAgICAgIHJldCA9IGdjb3Zfc3RvcmVf dTMyKGJ1ZiwgcG9zLCBHQ09WX1RBR19GVU5DVElPTik7CisgICAgICAgIGJyZWFrOworICAgIGNh c2UgUkVDT1JEX0ZVTkNUT05fVEFHX0xFTjoKKyAgICAgICAgcmV0ID0gZ2Nvdl9zdG9yZV91MzIo YnVmLCBwb3MsIDIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFJFQ09SRF9GVU5DVElPTl9J REVOVDoKKyAgICAgICAgcmV0ID0gZ2Nvdl9zdG9yZV91MzIoYnVmLCBwb3MsIGdldF9mdW5jKGl0 ZXIpLT5pZGVudCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUkVDT1JEX0ZVTkNUSU9OX0NI RUNLOgorICAgICAgICByZXQgPSBnY292X3N0b3JlX3UzMihidWYsIHBvcywgZ2V0X2Z1bmMoaXRl ciktPmNoZWNrc3VtKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBSRUNPUkRfQ09VTlRfVEFH OgorICAgICAgICByZXQgPSBnY292X3N0b3JlX3UzMihidWYsIHBvcywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgR0NPVl9UQUdfRk9SX0NPVU5URVIoZ2V0X3R5cGUoaXRlciktPmN0cl90 eXBlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUkVDT1JEX0NPVU5UX0xFTjoKKyAgICAg ICAgcmV0ID0gZ2Nvdl9zdG9yZV91MzIoYnVmLCBwb3MsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGdldF9mdW5jKGl0ZXIpLT5uX2N0cnNbaXRlci0+dHlwZV0gKiAyKTsKKyAgICAgICAg YnJlYWs7CisgICAgY2FzZSBSRUNPUkRfQ09VTlQ6CisgICAgICAgIHJldCA9IGdjb3Zfc3RvcmVf dTY0KGJ1ZiwgcG9zLCBpdGVyLT5pbmZvLT5jb3VudHNbaXRlci0+dHlwZV0uCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHZhbHVlc1tpdGVyLT5jb3VudCArIGdldF90eXBlKGl0ZXIpLT5v ZmZzZXRdKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHJldDsKK30KKwor LyogSWYgYnVmZmVyIGlzIE5VTEwsIG5vIGRhdGEgaXMgd3JpdHRlbi4gKi8KK3NpemVfdCBnY292 X2luZm9fdG9fZ2NkYShjaGFyICpidWZmZXIsIGNvbnN0IHN0cnVjdCBnY292X2luZm8gKmluZm8p Cit7CisgICAgc3RydWN0IGdjb3ZfaXRlcmF0b3IgaXRlciA9IHsgLmluZm8gPSBpbmZvIH07Cisg ICAgdW5zaWduZWQgaW50IGk7CisgICAgc2l6ZV90IHBvcyA9IDA7CisKKyAgICBmb3IgKCBpID0g MDsgaSA8IEdDT1ZfQ09VTlRFUlM7IGkrKyApCisgICAgeworICAgICAgICBpZiAoIGNvdW50ZXJf YWN0aXZlKGluZm8sIGkpICkKKyAgICAgICAgeworICAgICAgICAgICAgaXRlci50eXBlX2luZm9b aXRlci5udW1fdHlwZXNdLmN0cl90eXBlID0gaTsKKyAgICAgICAgICAgIGl0ZXIudHlwZV9pbmZv W2l0ZXIubnVtX3R5cGVzXS5vZmZzZXQgPSAwOworICAgICAgICAgICAgaXRlci5udW1fdHlwZXMr KzsKKyAgICAgICAgfQorICAgIH0KKworICAgIGRvIHsKKyAgICAgICAgcG9zICs9IGdjb3ZfaXRl cl93cml0ZSgmaXRlciwgYnVmZmVyLCBwb3MpOworICAgIH0gd2hpbGUgKCBnY292X2l0ZXJfbmV4 dCgmaXRlcikgPT0gMCApOworCisgICAgcmV0dXJuIHBvczsKK30KKworLyoKKyAqIExvY2FsIHZh cmlhYmxlczoKKyAqIG1vZGU6IEMKKyAqIGMtZmlsZS1zdHlsZTogIkJTRCIKKyAqIGMtYmFzaWMt b2Zmc2V0OiA0CisgKiB0YWItd2lkdGg6IDQKKyAqIGluZGVudC10YWJzLW1vZGU6IG5pbAorICog RW5kOgorICovCmRpZmYgLS1naXQgYS94ZW4vY29tbW9uL2djb3YvZ2NjXzRfNy5jIGIveGVuL2Nv bW1vbi9nY292L2djY180XzcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4w OTA2MzYwCi0tLSAvZGV2L251bGwKKysrIGIveGVuL2NvbW1vbi9nY292L2djY180XzcuYwpAQCAt MCwwICsxLDIwMSBAQAorLyoKKyAqICBUaGlzIGNvZGUgcHJvdmlkZXMgZnVuY3Rpb25zIHRvIGhh bmRsZSBnY2MncyBwcm9maWxpbmcgZGF0YSBmb3JtYXQKKyAqICBpbnRyb2R1Y2VkIHdpdGggZ2Nj IDQuNy4KKyAqCisgKiAgVGhpcyBmaWxlIGlzIGJhc2VkIGhlYXZpbHkgb24gZ2NjXzNfNC5jIGZp bGUuCisgKgorICogIEZvciBhIGJldHRlciB1bmRlcnN0YW5kaW5nLCByZWZlciB0byBnY2Mgc291 cmNlOgorICogIGdjYy9nY292LWlvLmgKKyAqICBsaWJnY2MvbGliZ2Nvdi5jCisgKgorICogIFVz ZXMgZ2NjLWludGVybmFsIGRhdGEgZGVmaW5pdGlvbnMuCisgKgorICogIEltcG9ydGVkIGZyb20g TGludXggYW5kIG1vZGlmaWVkIGZvciBYZW4gYnkKKyAqICAgIFdlaSBMaXUgPHdlaS5saXUyQGNp dHJpeC5jb20+CisgKi8KKworI2luY2x1ZGUgPHhlbi9zdHJpbmcuaD4KKworI2luY2x1ZGUgImdj b3YuaCIKKworI2lmIChfX0dOVUNfXyA+IDUpIHx8IChfX0dOVUNfXyA9PSA1ICYmIF9fR05VQ19N SU5PUl9fID49IDEpCisjZGVmaW5lIEdDT1ZfQ09VTlRFUlMgICAgICAgICAgICAgICAgICAgMTAK KyNlbGlmIF9fR05VQ19fID09IDQgJiYgX19HTlVDX01JTk9SX18gPj0gOQorI2RlZmluZSBHQ09W X0NPVU5URVJTICAgICAgICAgICAgICAgICAgIDkKKyNlbHNlCisjZGVmaW5lIEdDT1ZfQ09VTlRF UlMgICAgICAgICAgICAgICAgICAgOAorI2VuZGlmCisKKyNkZWZpbmUgR0NPVl9UQUdfRlVOQ1RJ T05fTEVOR1RIICAgICAgICAzCisKK3N0YXRpYyBzdHJ1Y3QgZ2Nvdl9pbmZvICpnY292X2luZm9f aGVhZDsKKworLyoqCisgKiBzdHJ1Y3QgZ2Nvdl9jdHJfaW5mbyAtIGluZm9ybWF0aW9uIGFib3V0 IGNvdW50ZXJzIGZvciBhIHNpbmdsZSBmdW5jdGlvbgorICogQG51bTogbnVtYmVyIG9mIGNvdW50 ZXIgdmFsdWVzIGZvciB0aGlzIHR5cGUKKyAqIEB2YWx1ZXM6IGFycmF5IG9mIGNvdW50ZXIgdmFs dWVzIGZvciB0aGlzIHR5cGUKKyAqCisgKiBUaGlzIGRhdGEgaXMgZ2VuZXJhdGVkIGJ5IGdjYyBk dXJpbmcgY29tcGlsYXRpb24gYW5kIGRvZXNuJ3QgY2hhbmdlCisgKiBhdCBydW4tdGltZSB3aXRo IHRoZSBleGNlcHRpb24gb2YgdGhlIHZhbHVlcyBhcnJheS4KKyAqLworc3RydWN0IGdjb3ZfY3Ry X2luZm8geworICAgIHVuc2lnbmVkIGludCBudW07CisgICAgZ2Nvdl90eXBlICp2YWx1ZXM7Cit9 OworCisvKioKKyAqIHN0cnVjdCBnY292X2ZuX2luZm8gLSBwcm9maWxpbmcgbWV0YSBkYXRhIHBl ciBmdW5jdGlvbgorICogQGtleTogY29tZGF0IGtleQorICogQGlkZW50OiB1bmlxdWUgaWRlbnQg b2YgZnVuY3Rpb24KKyAqIEBsaW5lbm9fY2hlY2tzdW06IGZ1bmN0aW9uIGxpbmVvX2NoZWNrc3Vt CisgKiBAY2ZnX2NoZWNrc3VtOiBmdW5jdGlvbiBjZmcgY2hlY2tzdW0KKyAqIEBjdHJzOiBpbnN0 cnVtZW50ZWQgY291bnRlcnMKKyAqCisgKiBUaGlzIGRhdGEgaXMgZ2VuZXJhdGVkIGJ5IGdjYyBk dXJpbmcgY29tcGlsYXRpb24gYW5kIGRvZXNuJ3QgY2hhbmdlCisgKiBhdCBydW4tdGltZS4KKyAq CisgKiBJbmZvcm1hdGlvbiBhYm91dCBhIHNpbmdsZSBmdW5jdGlvbi4gIFRoaXMgdXNlcyB0aGUg dHJhaWxpbmcgYXJyYXkKKyAqIGlkaW9tLiBUaGUgbnVtYmVyIG9mIGNvdW50ZXJzIGlzIGRldGVy bWluZWQgZnJvbSB0aGUgbWVyZ2UgcG9pbnRlcgorICogYXJyYXkgaW4gZ2Nvdl9pbmZvLiAgVGhl IGtleSBpcyB1c2VkIHRvIGRldGVjdCB3aGljaCBvZiBhIHNldCBvZgorICogY29tZGF0IGZ1bmN0 aW9ucyB3YXMgc2VsZWN0ZWQgLS0gaXQgcG9pbnRzIHRvIHRoZSBnY292X2luZm8gb2JqZWN0Cisg KiBvZiB0aGUgb2JqZWN0IGZpbGUgY29udGFpbmluZyB0aGUgc2VsZWN0ZWQgY29tZGF0IGZ1bmN0 aW9uLgorICovCitzdHJ1Y3QgZ2Nvdl9mbl9pbmZvIHsKKyAgICBjb25zdCBzdHJ1Y3QgZ2Nvdl9p bmZvICprZXk7CisgICAgdW5zaWduZWQgaW50IGlkZW50OworICAgIHVuc2lnbmVkIGludCBsaW5l bm9fY2hlY2tzdW07CisgICAgdW5zaWduZWQgaW50IGNmZ19jaGVja3N1bTsKKyAgICBzdHJ1Y3Qg Z2Nvdl9jdHJfaW5mbyBjdHJzWzBdOworfTsKKworLyoqCisgKiBzdHJ1Y3QgZ2Nvdl9pbmZvIC0g cHJvZmlsaW5nIGRhdGEgcGVyIG9iamVjdCBmaWxlCisgKiBAdmVyc2lvbjogZ2NvdiB2ZXJzaW9u IG1hZ2ljIGluZGljYXRpbmcgdGhlIGdjYyB2ZXJzaW9uIHVzZWQgZm9yIGNvbXBpbGF0aW9uCisg KiBAbmV4dDogbGlzdCBoZWFkIGZvciBhIHNpbmdseS1saW5rZWQgbGlzdAorICogQHN0YW1wOiB1 bmlxdWlmeWluZyB0aW1lIHN0YW1wCisgKiBAZmlsZW5hbWU6IG5hbWUgb2YgdGhlIGFzc29jaWF0 ZWQgZ2NvdiBkYXRhIGZpbGUKKyAqIEBtZXJnZTogbWVyZ2UgZnVuY3Rpb25zIChudWxsIGZvciB1 bnVzZWQgY291bnRlciB0eXBlKQorICogQG5fZnVuY3Rpb25zOiBudW1iZXIgb2YgaW5zdHJ1bWVu dGVkIGZ1bmN0aW9ucworICogQGZ1bmN0aW9uczogcG9pbnRlciB0byBwb2ludGVycyB0byBmdW5j dGlvbiBpbmZvcm1hdGlvbgorICoKKyAqIFRoaXMgZGF0YSBpcyBnZW5lcmF0ZWQgYnkgZ2NjIGR1 cmluZyBjb21waWxhdGlvbiBhbmQgZG9lc24ndCBjaGFuZ2UKKyAqIGF0IHJ1bi10aW1lIHdpdGgg dGhlIGV4Y2VwdGlvbiBvZiB0aGUgbmV4dCBwb2ludGVyLgorICovCitzdHJ1Y3QgZ2Nvdl9pbmZv IHsKKyAgICB1bnNpZ25lZCBpbnQgdmVyc2lvbjsKKyAgICBzdHJ1Y3QgZ2Nvdl9pbmZvICpuZXh0 OworICAgIHVuc2lnbmVkIGludCBzdGFtcDsKKyAgICBjb25zdCBjaGFyICpmaWxlbmFtZTsKKyAg ICB2b2lkICgqbWVyZ2VbR0NPVl9DT1VOVEVSU10pKGdjb3ZfdHlwZSAqLCB1bnNpZ25lZCBpbnQp OworICAgIHVuc2lnbmVkIGludCBuX2Z1bmN0aW9uczsKKyAgICBzdHJ1Y3QgZ2Nvdl9mbl9pbmZv ICoqZnVuY3Rpb25zOworfTsKKworc3RhdGljIGludCBjb3VudGVyX2FjdGl2ZShjb25zdCBzdHJ1 Y3QgZ2Nvdl9pbmZvICppbmZvLCB1bnNpZ25lZCBpbnQgdHlwZSkKK3sKKyAgICByZXR1cm4gaW5m by0+bWVyZ2VbdHlwZV0gPyAxIDogMDsKK30KKwordm9pZCBnY292X2luZm9fbGluayhzdHJ1Y3Qg Z2Nvdl9pbmZvICppbmZvKQoreworICAgIGluZm8tPm5leHQgPSBnY292X2luZm9faGVhZDsKKyAg ICBnY292X2luZm9faGVhZCA9IGluZm87Cit9CisKK3N0cnVjdCBnY292X2luZm8gKmdjb3ZfaW5m b19uZXh0KGNvbnN0IHN0cnVjdCBnY292X2luZm8gKmluZm8pCit7CisgICAgaWYgKCAhaW5mbyAp CisgICAgICAgIHJldHVybiBnY292X2luZm9faGVhZDsKKyAgICByZXR1cm4gaW5mby0+bmV4dDsK K30KKwordm9pZCBnY292X2luZm9fcmVzZXQoc3RydWN0IGdjb3ZfaW5mbyAqaW5mbykKK3sKKyAg ICBzdHJ1Y3QgZ2Nvdl9jdHJfaW5mbyAqY2lfcHRyOworICAgIHVuc2lnbmVkIGludCBmaV9pZHg7 CisgICAgdW5zaWduZWQgaW50IGN0X2lkeDsKKworICAgIGZvciAoIGZpX2lkeCA9IDA7IGZpX2lk eCA8IGluZm8tPm5fZnVuY3Rpb25zOyBmaV9pZHgrKyApCisgICAgeworICAgICAgICBjaV9wdHIg PSBpbmZvLT5mdW5jdGlvbnNbZmlfaWR4XS0+Y3RyczsKKworICAgICAgICBmb3IgKCBjdF9pZHgg PSAwOyBjdF9pZHggPCBHQ09WX0NPVU5URVJTOyBjdF9pZHgrKyApCisgICAgICAgIHsKKyAgICAg ICAgICAgIGlmICggIWNvdW50ZXJfYWN0aXZlKGluZm8sIGN0X2lkeCkgKQorICAgICAgICAgICAg ICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBtZW1zZXQoY2lfcHRyLT52YWx1ZXMsIDAsIHNp emVvZihnY292X3R5cGUpICogY2lfcHRyLT5udW0pOworICAgICAgICAgICAgY2lfcHRyKys7Cisg ICAgICAgIH0KKyAgICB9Cit9CisKK2NvbnN0IGNoYXIgKmdjb3ZfaW5mb19maWxlbmFtZShjb25z dCBzdHJ1Y3QgZ2Nvdl9pbmZvICppbmZvKQoreworICAgIHJldHVybiBpbmZvLT5maWxlbmFtZTsK K30KKworCisvKioKKyAqIGdjb3ZfaW5mb190b19nY2RhIC0gY29udmVydCBwcm9maWxpbmcgZGF0 YSBzZXQgdG8gZ2NkYSBmaWxlIGZvcm1hdAorICogQGJ1ZmZlcjogdGhlIGJ1ZmZlciB0byBzdG9y ZSBmaWxlIGRhdGEgb3IgJU5VTEwgaWYgbm8gZGF0YSBzaG91bGQgYmUgc3RvcmVkCisgKiBAaW5m bzogcHJvZmlsaW5nIGRhdGEgc2V0IHRvIGJlIGNvbnZlcnRlZAorICoKKyAqIFJldHVybnMgdGhl IG51bWJlciBvZiBieXRlcyB0aGF0IHdlcmUvd291bGQgaGF2ZSBiZWVuIHN0b3JlZCBpbnRvIHRo ZSBidWZmZXIuCisgKi8KK3NpemVfdCBnY292X2luZm9fdG9fZ2NkYShjaGFyICpidWZmZXIsIGNv bnN0IHN0cnVjdCBnY292X2luZm8gKmluZm8pCit7CisgICAgc3RydWN0IGdjb3ZfZm5faW5mbyAq ZmlfcHRyOworICAgIHN0cnVjdCBnY292X2N0cl9pbmZvICpjaV9wdHI7CisgICAgdW5zaWduZWQg aW50IGZpX2lkeDsKKyAgICB1bnNpZ25lZCBpbnQgY3RfaWR4OworICAgIHVuc2lnbmVkIGludCBj dl9pZHg7CisgICAgc2l6ZV90IHBvcyA9IDA7CisKKyAgICAvKiBGaWxlIGhlYWRlci4gKi8KKyAg ICBwb3MgKz0gZ2Nvdl9zdG9yZV91MzIoYnVmZmVyLCBwb3MsIEdDT1ZfREFUQV9NQUdJQyk7Cisg ICAgcG9zICs9IGdjb3Zfc3RvcmVfdTMyKGJ1ZmZlciwgcG9zLCBpbmZvLT52ZXJzaW9uKTsKKyAg ICBwb3MgKz0gZ2Nvdl9zdG9yZV91MzIoYnVmZmVyLCBwb3MsIGluZm8tPnN0YW1wKTsKKworICAg IGZvciAoIGZpX2lkeCA9IDA7IGZpX2lkeCA8IGluZm8tPm5fZnVuY3Rpb25zOyBmaV9pZHgrKyAp CisgICAgeworICAgICAgICBmaV9wdHIgPSBpbmZvLT5mdW5jdGlvbnNbZmlfaWR4XTsKKworICAg ICAgICAvKiBGdW5jdGlvbiByZWNvcmQuICovCisgICAgICAgIHBvcyArPSBnY292X3N0b3JlX3Uz MihidWZmZXIsIHBvcywgR0NPVl9UQUdfRlVOQ1RJT04pOworICAgICAgICBwb3MgKz0gZ2Nvdl9z dG9yZV91MzIoYnVmZmVyLCBwb3MsIEdDT1ZfVEFHX0ZVTkNUSU9OX0xFTkdUSCk7CisgICAgICAg IHBvcyArPSBnY292X3N0b3JlX3UzMihidWZmZXIsIHBvcywgZmlfcHRyLT5pZGVudCk7CisgICAg ICAgIHBvcyArPSBnY292X3N0b3JlX3UzMihidWZmZXIsIHBvcywgZmlfcHRyLT5saW5lbm9fY2hl Y2tzdW0pOworICAgICAgICBwb3MgKz0gZ2Nvdl9zdG9yZV91MzIoYnVmZmVyLCBwb3MsIGZpX3B0 ci0+Y2ZnX2NoZWNrc3VtKTsKKworICAgICAgICBjaV9wdHIgPSBmaV9wdHItPmN0cnM7CisKKyAg ICAgICAgZm9yICggY3RfaWR4ID0gMDsgY3RfaWR4IDwgR0NPVl9DT1VOVEVSUzsgY3RfaWR4Kysg KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoISBjb3VudGVyX2FjdGl2ZShpbmZvLCBjdF9p ZHgpICkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgLyogQ291bnRl ciByZWNvcmQuICovCisgICAgICAgICAgICBwb3MgKz0gZ2Nvdl9zdG9yZV91MzIoYnVmZmVyLCBw b3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0NPVl9UQUdfRk9SX0NPVU5U RVIoY3RfaWR4KSk7CisgICAgICAgICAgICBwb3MgKz0gZ2Nvdl9zdG9yZV91MzIoYnVmZmVyLCBw b3MsIGNpX3B0ci0+bnVtICogMik7CisKKyAgICAgICAgICAgIGZvciAoIGN2X2lkeCA9IDA7IGN2 X2lkeCA8IGNpX3B0ci0+bnVtOyBjdl9pZHgrKyApCisgICAgICAgICAgICAgICAgcG9zICs9IGdj b3Zfc3RvcmVfdTY0KGJ1ZmZlciwgcG9zLCBjaV9wdHItPnZhbHVlc1tjdl9pZHhdKTsKKworICAg ICAgICAgICAgY2lfcHRyKys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcG9zOwor fQorCisvKgorICogTG9jYWwgdmFyaWFibGVzOgorICogbW9kZTogQworICogYy1maWxlLXN0eWxl OiAiQlNEIgorICogYy1iYXNpYy1vZmZzZXQ6IDQKKyAqIHRhYi13aWR0aDogNAorICogaW5kZW50 LXRhYnMtbW9kZTogbmlsCisgKiBFbmQ6CisgKi8KZGlmZiAtLWdpdCBhL3hlbi9jb21tb24vZ2Nv di9nY292LmMgYi94ZW4vY29tbW9uL2djb3YvZ2Nvdi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLjg4ZGYzNmMKLS0tIC9kZXYvbnVsbAorKysgYi94ZW4vY29tbW9uL2djb3Yv Z2Nvdi5jCkBAIC0wLDAgKzEsMjU3IEBACisvKgorICogIFRoaXMgY29kZSBtYWludGFpbnMgYSBs aXN0IG9mIGFjdGl2ZSBwcm9maWxpbmcgZGF0YSBzdHJ1Y3R1cmVzLgorICoKKyAqICAgIENvcHly aWdodCBJQk0gQ29ycC4gMjAwOQorICogICAgQXV0aG9yKHMpOiBQZXRlciBPYmVycGFybGVpdGVy IDxvYmVycGFyQGxpbnV4LnZuZXQuaWJtLmNvbT4KKyAqCisgKiAgICBVc2VzIGdjYy1pbnRlcm5h bCBkYXRhIGRlZmluaXRpb25zLgorICogICAgQmFzZWQgb24gdGhlIGdjb3Yta2VybmVsIHBhdGNo IGJ5OgorICogICAgICAgSHViZXJ0dXMgRnJhbmtlIDxmcmFua2VoQHVzLmlibS5jb20+CisgKiAg ICAgICBOaWdlbCBIaW5kcyA8bmhpbmRzQHVzLmlibS5jb20+CisgKiAgICAgICBSYWphbiBSYXZp bmRyYW4gPHJhamFuY3JAdXMuaWJtLmNvbT4KKyAqICAgICAgIFBldGVyIE9iZXJwYXJsZWl0ZXIg PG9iZXJwYXJAbGludXgudm5ldC5pYm0uY29tPgorICogICAgICAgUGF1bCBMYXJzb24KKyAqCisg KiAgTW9kaWZpZWQgZm9yIFhlbiBieToKKyAqICAgIFdlaSBMaXUgPHdlaS5saXUyQGNpdHJpeC5j b20+CisgKi8KKworI2luY2x1ZGUgPHhlbi9lcnJuby5oPgorI2luY2x1ZGUgPHhlbi9ndWVzdF9h Y2Nlc3MuaD4KKyNpbmNsdWRlIDx4ZW4vdHlwZXMuaD4KKworI2luY2x1ZGUgPHB1YmxpYy9zeXNj dGwuaD4KKworI2luY2x1ZGUgImdjb3YuaCIKKworLyoqCisgKiBnY292X3N0b3JlX3UzMiAtIHN0 b3JlIDMyIGJpdCBudW1iZXIgaW4gZ2NvdiBmb3JtYXQgdG8gYnVmZmVyCisgKiBAYnVmZmVyOiB0 YXJnZXQgYnVmZmVyIG9yIE5VTEwKKyAqIEBvZmY6IG9mZnNldCBpbnRvIHRoZSBidWZmZXIKKyAq IEB2OiB2YWx1ZSB0byBiZSBzdG9yZWQKKyAqCisgKiBOdW1iZXIgZm9ybWF0IGRlZmluZWQgYnkg Z2NjOiBudW1iZXJzIGFyZSByZWNvcmRlZCBpbiB0aGUgMzIgYml0CisgKiB1bnNpZ25lZCBiaW5h cnkgZm9ybSBvZiB0aGUgZW5kaWFubmVzcyBvZiB0aGUgbWFjaGluZSBnZW5lcmF0aW5nIHRoZQor ICogZmlsZS4gUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHN0b3JlZC4gSWYgQGJ1ZmZlciBp cyAlTlVMTCwgZG9lc24ndAorICogc3RvcmUgYW55dGhpbmcuCisgKi8KK3NpemVfdCBnY292X3N0 b3JlX3UzMih2b2lkICpidWZmZXIsIHNpemVfdCBvZmYsIHUzMiB2KQoreworICAgIHUzMiAqZGF0 YTsKKworICAgIGlmICggYnVmZmVyICkKKyAgICB7CisgICAgICAgIGRhdGEgPSBidWZmZXIgKyBv ZmY7CisgICAgICAgICpkYXRhID0gdjsKKyAgICB9CisKKyAgICByZXR1cm4gc2l6ZW9mKCpkYXRh KTsKK30KKworLyoqCisgKiBnY292X3N0b3JlX3U2NCAtIHN0b3JlIDY0IGJpdCBudW1iZXIgaW4g Z2NvdiBmb3JtYXQgdG8gYnVmZmVyCisgKiBAYnVmZmVyOiB0YXJnZXQgYnVmZmVyIG9yIE5VTEwK KyAqIEBvZmY6IG9mZnNldCBpbnRvIHRoZSBidWZmZXIKKyAqIEB2OiB2YWx1ZSB0byBiZSBzdG9y ZWQKKyAqCisgKiBOdW1iZXIgZm9ybWF0IGRlZmluZWQgYnkgZ2NjOiBudW1iZXJzIGFyZSByZWNv cmRlZCBpbiB0aGUgMzIgYml0CisgKiB1bnNpZ25lZCBiaW5hcnkgZm9ybSBvZiB0aGUgZW5kaWFu bmVzcyBvZiB0aGUgbWFjaGluZSBnZW5lcmF0aW5nIHRoZQorICogZmlsZS4gNjQgYml0IG51bWJl cnMgYXJlIHN0b3JlZCBhcyB0d28gMzIgYml0IG51bWJlcnMsIHRoZSBsb3cgcGFydAorICogZmly c3QuIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBzdG9yZWQuIElmIEBidWZmZXIgaXMgJU5V TEwsIGRvZXNuJ3Qgc3RvcmUKKyAqIGFueXRoaW5nLgorICovCitzaXplX3QgZ2Nvdl9zdG9yZV91 NjQodm9pZCAqYnVmZmVyLCBzaXplX3Qgb2ZmLCB1NjQgdikKK3sKKyAgICB1MzIgKmRhdGE7CisK KyAgICBpZiAoIGJ1ZmZlciApCisgICAgeworICAgICAgICBkYXRhID0gYnVmZmVyICsgb2ZmOwor CisgICAgICAgIGRhdGFbMF0gPSAodiAmIDB4ZmZmZmZmZmZVTCk7CisgICAgICAgIGRhdGFbMV0g PSAodiA+PiAzMik7CisgICAgfQorCisgICAgcmV0dXJuIHNpemVvZigqZGF0YSkgKiAyOworfQor CitzdGF0aWMgc2l6ZV90IGdjb3ZfaW5mb19wYXlsb2FkX3NpemUoY29uc3Qgc3RydWN0IGdjb3Zf aW5mbyAqaW5mbykKK3sKKyAgICByZXR1cm4gZ2Nvdl9pbmZvX3RvX2djZGEoTlVMTCwgaW5mbyk7 Cit9CisKK3N0YXRpYyBpbnQgZ2Nvdl9pbmZvX2R1bXBfcGF5bG9hZChjb25zdCBzdHJ1Y3QgZ2Nv dl9pbmZvICppbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhFTl9HVUVT VF9IQU5ETEVfUEFSQU0oY2hhcikgYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHVpbnQzMl90ICpvZmYpCit7CisgICAgY2hhciAqYnVmOworICAgIHVpbnQzMl90IGJ1 Zl9zaXplOworICAgIGludCByZXQ7CisKKyAgICAvKgorICAgICAqIEFsbG9jYXRlIGEgYnVmZmVy IGFuZCBkdW1wIHBheWxvYWQgdGhlcmUuIFRoaXMgaGVscHMgdXMgdG8gbm90CisgICAgICogaGF2 ZSBjb3B5X3RvX2d1ZXN0IGluIG90aGVyIGZ1bmN0aW9ucyBhbmQgcmV0YWluIHRoZWlyIHNpbXBs ZQorICAgICAqIHNlbWFudGljcy4KKyAgICAgKi8KKworICAgIGJ1Zl9zaXplID0gZ2Nvdl9pbmZv X3BheWxvYWRfc2l6ZShpbmZvKTsKKyAgICBidWYgPSB4bWFsbG9jX2FycmF5KGNoYXIsIGJ1Zl9z aXplKTsKKworICAgIGlmICggIWJ1ZiApCisgICAgeworICAgICAgICByZXQgPSAtRU5PTUVNOwor ICAgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyAgICBnY292X2luZm9fdG9fZ2NkYShidWYsIGlu Zm8pOworCisgICAgaWYgKCBjb3B5X3RvX2d1ZXN0X29mZnNldChidWZmZXIsICpvZmYsIGJ1Ziwg YnVmX3NpemUpICkKKyAgICB7CisgICAgICAgIHJldCA9IC1FRkFVTFQ7CisgICAgICAgIGdvdG8g b3V0OworICAgIH0KKyAgICAqb2ZmICs9IGJ1Zl9zaXplOworCisgICAgcmV0ID0gMDsKKyBvdXQ6 CisgICAgeGZyZWUoYnVmKTsKKyAgICByZXR1cm4gcmV0OworCit9CisKK3N0YXRpYyB1aW50MzJf dCBnY292X2dldF9zaXplKHZvaWQpCit7CisgICAgdWludDMyX3QgdG90YWxfc2l6ZTsKKyAgICBz dHJ1Y3QgZ2Nvdl9pbmZvICppbmZvID0gTlVMTDsKKworICAgIC8qIE1hZ2ljIG51bWJlciBYQ09W ICovCisgICAgdG90YWxfc2l6ZSA9IHNpemVvZih1aW50MzJfdCk7CisKKyAgICB3aGlsZSAoIChp bmZvID0gZ2Nvdl9pbmZvX25leHQoaW5mbykpICkKKyAgICB7CisgICAgICAgIC8qIEZpbGUgbmFt ZSBsZW5ndGgsIGluY2x1ZGluZyB0cmFpbGluZyBcMCAqLworICAgICAgICB0b3RhbF9zaXplICs9 IHN0cmxlbihnY292X2luZm9fZmlsZW5hbWUoaW5mbykpICsgMTsKKworICAgICAgICAvKiBQYXls b2FkIHNpemUgZmllbGQgKi8KKyAgICAgICAgdG90YWxfc2l6ZSArPSBzaXplb2YodWludDMyX3Qp OworCisgICAgICAgIC8qIFBheWxvYWQgaXRzZWxmICovCisgICAgICAgIHRvdGFsX3NpemUgKz0g Z2Nvdl9pbmZvX3BheWxvYWRfc2l6ZShpbmZvKTsKKyAgICB9CisKKyAgICByZXR1cm4gdG90YWxf c2l6ZTsKK30KKworc3RhdGljIHZvaWQgZ2Nvdl9yZXNldF9hbGxfY291bnRlcnModm9pZCkKK3sK KyAgICBzdHJ1Y3QgZ2Nvdl9pbmZvICppbmZvID0gTlVMTDsKKworICAgIHdoaWxlICggKGluZm8g PSBnY292X2luZm9fbmV4dChpbmZvKSkgKQorICAgICAgICBnY292X2luZm9fcmVzZXQoaW5mbyk7 Cit9CisKK3N0YXRpYyBpbnQgZ2Nvdl9kdW1wX29uZV9yZWNvcmQoY29uc3Qgc3RydWN0IGdjb3Zf aW5mbyAqaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWEVOX0dVRVNUX0hB TkRMRV9QQVJBTShjaGFyKSBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHVpbnQzMl90ICpvZmYpCit7CisgICAgdWludDMyX3QgcGF5bG9hZF9zaXplOworICAgIHVpbnQz Ml90IGxlbjsKKworICAgIC8qIEZpbGUgbmFtZSwgaW5jbHVkaW5nIHRyYWlsaW5nIFwwICovCisg ICAgbGVuID0gc3RybGVuKGdjb3ZfaW5mb19maWxlbmFtZShpbmZvKSkgKyAxOworICAgIGlmICgg Y29weV90b19ndWVzdF9vZmZzZXQoYnVmZmVyLCAqb2ZmLCBnY292X2luZm9fZmlsZW5hbWUoaW5m byksIGxlbikgKQorICAgICAgICByZXR1cm4gLUVGQVVMVDsKKyAgICAqb2ZmICs9IGxlbjsKKwor ICAgIHBheWxvYWRfc2l6ZSA9IGdjb3ZfaW5mb19wYXlsb2FkX3NpemUoaW5mbyk7CisgICAgLyog UGF5bG9hZCBzaXplICovCisgICAgaWYgKCBjb3B5X3RvX2d1ZXN0X29mZnNldChidWZmZXIsICpv ZmYsIChjaGFyKikmcGF5bG9hZF9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c2l6ZW9mKHVpbnQzMl90KSkgKQorICAgICAgICByZXR1cm4gLUVGQVVMVDsKKyAgICAqb2ZmICs9 IHNpemVvZih1aW50MzJfdCk7CisKKyAgICAvKiBQYXlsb2FkIGl0c2VsZiAqLworICAgIHJldHVy biBnY292X2luZm9fZHVtcF9wYXlsb2FkKGluZm8sIGJ1ZmZlciwgb2ZmKTsKK30KKworc3RhdGlj IGludCBnY292X2R1bXBfYWxsKFhFTl9HVUVTVF9IQU5ETEVfUEFSQU0oY2hhcikgYnVmZmVyLAor ICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICpidWZmZXJfc2l6ZSkKK3sKKyAgICB1 aW50MzJfdCBvZmY7CisgICAgdWludDMyX3QgbWFnaWMgPSBYRU5fR0NPVl9GT1JNQVRfTUFHSUM7 CisgICAgc3RydWN0IGdjb3ZfaW5mbyAqaW5mbyA9IE5VTEw7CisgICAgaW50IHJldDsKKworICAg IGlmICggKmJ1ZmZlcl9zaXplIDwgZ2Nvdl9nZXRfc2l6ZSgpICkKKyAgICB7CisgICAgICAgIHJl dCA9IC1FTk9CVUZTOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyAgICBvZmYgPSAwOwor CisgICAgLyogTWFnaWMgbnVtYmVyICovCisgICAgaWYgKCBjb3B5X3RvX2d1ZXN0X29mZnNldChi dWZmZXIsIG9mZiwgKGNoYXIgKikmbWFnaWMsIHNpemVvZihtYWdpYykpICkKKyAgICB7CisgICAg ICAgIHJldCA9IC1FRkFVTFQ7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKyAgICBvZmYgKz0g c2l6ZW9mKG1hZ2ljKTsKKworICAgIHdoaWxlICggKGluZm8gPSBnY292X2luZm9fbmV4dChpbmZv KSkgKQorICAgIHsKKyAgICAgICAgcmV0ID0gZ2Nvdl9kdW1wX29uZV9yZWNvcmQoaW5mbywgYnVm ZmVyLCAmb2ZmKTsKKyAgICAgICAgaWYgKCByZXQgKQorICAgICAgICAgICAgZ290byBvdXQ7Cisg ICAgfQorCisgICAgKmJ1ZmZlcl9zaXplID0gb2ZmOworCisgICAgcmV0ID0gMDsKKyBvdXQ6Cisg ICAgcmV0dXJuIHJldDsKK30KKworaW50IHN5c2N0bF9nY292X29wKHhlbl9zeXNjdGxfZ2Nvdl9v cF90ICpvcCkKK3sKKyAgICBpbnQgcmV0OworCisgICAgc3dpdGNoICggb3AtPmNtZCApCisgICAg eworICAgIGNhc2UgWEVOX1NZU0NUTF9HQ09WX2dldF9zaXplOgorICAgICAgICBvcC0+c2l6ZSA9 IGdjb3ZfZ2V0X3NpemUoKTsKKyAgICAgICAgcmV0ID0gMDsKKyAgICAgICAgYnJlYWs7CisgICAg Y2FzZSBYRU5fU1lTQ1RMX0dDT1ZfcmVhZDoKKyAgICB7CisgICAgICAgIFhFTl9HVUVTVF9IQU5E TEVfUEFSQU0oY2hhcikgYnVmOworICAgICAgICB1aW50MzJfdCBzaXplID0gb3AtPnNpemU7CisK KyAgICAgICAgYnVmID0gZ3Vlc3RfaGFuZGxlX2Nhc3Qob3AtPmJ1ZmZlciwgY2hhcik7CisKKyAg ICAgICAgcmV0ID0gZ2Nvdl9kdW1wX2FsbChidWYsICZzaXplKTsKKyAgICAgICAgb3AtPnNpemUg PSBzaXplOworCisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFhFTl9TWVNDVExfR0NP Vl9yZXNldDoKKyAgICAgICAgZ2Nvdl9yZXNldF9hbGxfY291bnRlcnMoKTsKKyAgICAgICAgcmV0 ID0gMDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0ID0gLUVJTlZB TDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHJldDsKK30KKworLyoKKyAq IExvY2FsIHZhcmlhYmxlczoKKyAqIG1vZGU6IEMKKyAqIGMtZmlsZS1zdHlsZTogIkJTRCIKKyAq IGMtYmFzaWMtb2Zmc2V0OiA0CisgKiB0YWItd2lkdGg6IDQKKyAqIGluZGVudC10YWJzLW1vZGU6 IG5pbAorICogRW5kOgorICovCmRpZmYgLS1naXQgYS94ZW4vY29tbW9uL2djb3YvZ2Nvdi5oIGIv eGVuL2NvbW1vbi9nY292L2djb3YuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw Li45YTI5NzYzCi0tLSAvZGV2L251bGwKKysrIGIveGVuL2NvbW1vbi9nY292L2djb3YuaApAQCAt MCwwICsxLDM2IEBACisjaWZuZGVmIF9HQ09WX0hfCisjZGVmaW5lIF9HQ09WX0hfCisKKyNpbmNs dWRlIDx4ZW4vZ3Vlc3RfYWNjZXNzLmg+CisjaW5jbHVkZSA8eGVuL3R5cGVzLmg+CisKKy8qCisg KiBQcm9maWxpbmcgZGF0YSB0eXBlcyB1c2VkIGZvciBnY2MgMy40IGFuZCBhYm92ZSAtIHRoZXNl IGFyZSBkZWZpbmVkIGJ5CisgKiBnY2MgYW5kIG5lZWQgdG8gYmUga2VwdCBhcyBjbG9zZSB0byB0 aGUgb3JpZ2luYWwgZGVmaW5pdGlvbiBhcyBwb3NzaWJsZSB0bworICogcmVtYWluIGNvbXBhdGli bGUuCisgKi8KKyNkZWZpbmUgR0NPVl9EQVRBX01BR0lDICAgICAgICAgKCh1bnNpZ25lZCBpbnQp IDB4Njc2MzY0NjEpCisjZGVmaW5lIEdDT1ZfVEFHX0ZVTkNUSU9OICAgICAgICgodW5zaWduZWQg aW50KSAweDAxMDAwMDAwKQorI2RlZmluZSBHQ09WX1RBR19DT1VOVEVSX0JBU0UgICAoKHVuc2ln bmVkIGludCkgMHgwMWExMDAwMCkKKyNkZWZpbmUgR0NPVl9UQUdfRk9SX0NPVU5URVIoY291bnQp CQkJCVwKKwlfVEFHX0NPVU5URVJfQkFTRSArICgodW5zaWduZWQgaW50KSAoY291bnQpIDw8IDE3 KSkKKworI2lmIEJJVFNfUEVSX0xPTkcgPj0gNjQKK3R5cGVkZWYgbG9uZyBnY292X3R5cGU7Cisj ZWxzZQordHlwZWRlZiBsb25nIGxvbmcgZ2Nvdl90eXBlOworI2VuZGlmCisKKy8qIE9wYXF1ZSBn Y292X2luZm8gLS0gdGllZCB0byBzcGVjaWZpYyBnY2MgZ2NvdiBmb3JtYXRzICovCitzdHJ1Y3Qg Z2Nvdl9pbmZvOworCit2b2lkIGdjb3ZfaW5mb19saW5rKHN0cnVjdCBnY292X2luZm8gKmluZm8p Oworc3RydWN0IGdjb3ZfaW5mbyAqZ2Nvdl9pbmZvX25leHQoY29uc3Qgc3RydWN0IGdjb3ZfaW5m byAqaW5mbyk7Cit2b2lkIGdjb3ZfaW5mb19yZXNldChzdHJ1Y3QgZ2Nvdl9pbmZvICppbmZvKTsK K2NvbnN0IGNoYXIgKmdjb3ZfaW5mb19maWxlbmFtZShjb25zdCBzdHJ1Y3QgZ2Nvdl9pbmZvICpp bmZvKTsKK3NpemVfdCBnY292X2luZm9fdG9fZ2NkYShjaGFyICpidWZmZXIsIGNvbnN0IHN0cnVj dCBnY292X2luZm8gKmluZm8pOworCitzaXplX3QgZ2Nvdl9zdG9yZV91MzIodm9pZCAqYnVmZmVy LCBzaXplX3Qgb2ZmLCB1MzIgdik7CitzaXplX3QgZ2Nvdl9zdG9yZV91NjQodm9pZCAqYnVmZmVy LCBzaXplX3Qgb2ZmLCB1NjQgdik7CisKKyNlbmRpZgkvKiBfR0NPVl9IXyAqLwpkaWZmIC0tZ2l0 IGEveGVuL2NvbW1vbi9nY292L2djb3ZfYmFzZS5jIGIveGVuL2NvbW1vbi9nY292L2djb3ZfYmFz ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0NmExYjkKLS0tIC9kZXYv bnVsbAorKysgYi94ZW4vY29tbW9uL2djb3YvZ2Nvdl9iYXNlLmMKQEAgLTAsMCArMSw2NCBAQAor LyoKKyAqIENvbW1vbiBjb2RlIGFjcm9zcyBnY292IGltcGxlbWVudGF0aW9ucworICoKKyAqIENv cHlyaWdodCBDaXRyaXggU3lzdGVtcyBSJkQgVUsKKyAqIEF1dGhvcihzKTogV2VpIExpdSA8d2Vp LmxpdTJAY2l0cml4LmNvbT4KKyAqCisgKiAgICBVc2VzIGdjYy1pbnRlcm5hbCBkYXRhIGRlZmlu aXRpb25zLgorICogICAgQmFzZWQgb24gdGhlIGdjb3Yta2VybmVsIHBhdGNoIGJ5OgorICogICAg ICAgSHViZXJ0dXMgRnJhbmtlIDxmcmFua2VoQHVzLmlibS5jb20+CisgKiAgICAgICBOaWdlbCBI aW5kcyA8bmhpbmRzQHVzLmlibS5jb20+CisgKiAgICAgICBSYWphbiBSYXZpbmRyYW4gPHJhamFu Y3JAdXMuaWJtLmNvbT4KKyAqICAgICAgIFBldGVyIE9iZXJwYXJsZWl0ZXIgPG9iZXJwYXJAbGlu dXgudm5ldC5pYm0uY29tPgorICogICAgICAgUGF1bCBMYXJzb24KKyAqLworCisjaW5jbHVkZSAi Z2Nvdi5oIgorCisvKgorICogX19nY292X2luaXQgaXMgY2FsbGVkIGJ5IGdjYy1nZW5lcmF0ZWQg Y29uc3RydWN0b3IgY29kZSBmb3IgZWFjaCBvYmplY3QKKyAqIGZpbGUgY29tcGlsZWQgd2l0aCAt ZnByb2ZpbGUtYXJjcy4KKyAqCisgKiBBbHRob3VnaCB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBv bmx5IGR1cmluZyBpbml0aWFsaXphdGlvbiBpcyBjYWxsZWQgZnJvbQorICogYSAudGV4dCBzZWN0 aW9uIHdoaWNoIGlzIHN0aWxsIHByZXNlbnQgYWZ0ZXIgaW5pdGlhbGl6YXRpb24gc28gbm90IGRl Y2xhcmUKKyAqIGFzIF9faW5pdC4KKyAqLwordm9pZCBfX2djb3ZfaW5pdChzdHJ1Y3QgZ2Nvdl9p bmZvICppbmZvKQoreworICAgIC8qIExpbmsgYWxsIGdjb3YgaW5mbyB0b2dldGhlci4gKi8KKyAg ICBnY292X2luZm9fbGluayhpbmZvKTsKK30KKworLyoKKyAqIFRoZXNlIGZ1bmN0aW9ucyBtYXkg YmUgcmVmZXJlbmNlZCBieSBnY2MtZ2VuZXJhdGVkIHByb2ZpbGluZyBjb2RlIGJ1dCBzZXJ2ZQor ICogbm8gZnVuY3Rpb24gZm9yIFhlbi4KKyAqLwordm9pZCBfX2djb3ZfZmx1c2godm9pZCkKK3sK KyAgICAvKiBVbnVzZWQuICovCit9CisKK3ZvaWQgX19nY292X21lcmdlX2FkZChnY292X3R5cGUg KmNvdW50ZXJzLCB1bnNpZ25lZCBpbnQgbl9jb3VudGVycykKK3sKKyAgICAvKiBVbnVzZWQuICov Cit9CisKK3ZvaWQgX19nY292X21lcmdlX3NpbmdsZShnY292X3R5cGUgKmNvdW50ZXJzLCB1bnNp Z25lZCBpbnQgbl9jb3VudGVycykKK3sKKyAgICAvKiBVbnVzZWQuICovCit9CisKK3ZvaWQgX19n Y292X21lcmdlX2RlbHRhKGdjb3ZfdHlwZSAqY291bnRlcnMsIHVuc2lnbmVkIGludCBuX2NvdW50 ZXJzKQoreworICAgIC8qIFVudXNlZC4gKi8KK30KKworLyoKKyAqIExvY2FsIHZhcmlhYmxlczoK KyAqIG1vZGU6IEMKKyAqIGMtZmlsZS1zdHlsZTogIkJTRCIKKyAqIGMtYmFzaWMtb2Zmc2V0OiA0 CisgKiB0YWItd2lkdGg6IDQKKyAqIGluZGVudC10YWJzLW1vZGU6IG5pbAorICogRW5kOgorICov CmRpZmYgLS1naXQgYS94ZW4vY29tbW9uL3N5c2N0bC5jIGIveGVuL2NvbW1vbi9zeXNjdGwuYwpp bmRleCAyY2FjNDUxLi4wM2NjYTVjIDEwMDY0NAotLS0gYS94ZW4vY29tbW9uL3N5c2N0bC5jCisr KyBiL3hlbi9jb21tb24vc3lzY3RsLmMKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlIDx4c20v eHNtLmg+CiAjaW5jbHVkZSA8eGVuL3Btc3RhdC5oPgogI2luY2x1ZGUgPHhlbi9saXZlcGF0Y2gu aD4KKyNpbmNsdWRlIDx4ZW4vZ2Nvdi5oPgogCiBsb25nIGRvX3N5c2N0bChYRU5fR1VFU1RfSEFO RExFX1BBUkFNKHhlbl9zeXNjdGxfdCkgdV9zeXNjdGwpCiB7CkBAIC0zOTUsNiArMzk2LDEzIEBA IGxvbmcgZG9fc3lzY3RsKFhFTl9HVUVTVF9IQU5ETEVfUEFSQU0oeGVuX3N5c2N0bF90KSB1X3N5 c2N0bCkKICAgICB9CiAgICAgYnJlYWs7CiAKKyNpZmRlZiBDT05GSUdfR0NPVgorICAgIGNhc2Ug WEVOX1NZU0NUTF9nY292X29wOgorICAgICAgICByZXQgPSBzeXNjdGxfZ2Nvdl9vcCgmb3AtPnUu Z2Nvdl9vcCk7CisgICAgICAgIGNvcHliYWNrID0gMTsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYK KwogI2lmZGVmIENPTkZJR19IQVNfUENJCiAgICAgY2FzZSBYRU5fU1lTQ1RMX3BjaXRvcG9pbmZv OgogICAgIHsKZGlmZiAtLWdpdCBhL3hlbi9pbmNsdWRlL3B1YmxpYy9zeXNjdGwuaCBiL3hlbi9p bmNsdWRlL3B1YmxpYy9zeXNjdGwuaAppbmRleCBhOTM5ZmE5Li4yOGFjNTZjIDEwMDY0NAotLS0g YS94ZW4vaW5jbHVkZS9wdWJsaWMvc3lzY3RsLmgKKysrIGIveGVuL2luY2x1ZGUvcHVibGljL3N5 c2N0bC5oCkBAIC0zNiw3ICszNiw3IEBACiAjaW5jbHVkZSAicGh5c2Rldi5oIgogI2luY2x1ZGUg InRtZW0uaCIKIAotI2RlZmluZSBYRU5fU1lTQ1RMX0lOVEVSRkFDRV9WRVJTSU9OIDB4MDAwMDAw MEUKKyNkZWZpbmUgWEVOX1NZU0NUTF9JTlRFUkZBQ0VfVkVSU0lPTiAweDAwMDAwMDBGCiAKIC8q CiAgKiBSZWFkIGNvbnNvbGUgY29udGVudCBmcm9tIFhlbiBidWZmZXIgcmluZy4KQEAgLTY2NSw2 ICs2NjUsNDAgQEAgc3RydWN0IHhlbl9zeXNjdGxfc2NoZWR1bGVyX29wIHsKIHR5cGVkZWYgc3Ry dWN0IHhlbl9zeXNjdGxfc2NoZWR1bGVyX29wIHhlbl9zeXNjdGxfc2NoZWR1bGVyX29wX3Q7CiBE RUZJTkVfWEVOX0dVRVNUX0hBTkRMRSh4ZW5fc3lzY3RsX3NjaGVkdWxlcl9vcF90KTsKIAorLyoK KyAqIE91dHB1dCBmb3JtYXQgb2YgZ2NvdiBkYXRhOgorICoKKyAqIFhFTl9HQ09WX0ZPUk1BVF9N QUdJQyBYRU5fR0NPVl9SRUNPUkQgLi4uIFhFTl9HQ09WX1JFQ09SRAorICoKKyAqIFRoYXQgaXMs IG9uZSBtYWdpYyBudW1iZXIgZm9sbG93ZWQgYnkgMCBvciBtb3JlIHJlY29yZC4KKyAqCisgKiBU aGUgbWFnaWMgbnVtYmVyIGlzIHN0b3JlZCBhcyBhbiB1aW50MzJfdCBmaWVsZC4KKyAqCisgKiBU aGUgcmVjb3JkIGlzIHBhY2tlZCBhbmQgdmFyaWFibGUgaW4gbGVuZ3RoLiBJdCBoYXMgdGhlIGZv cm06CisgKgorICogIGZpbGVuYW1lOiBhIE5VTEwgdGVybWluYXRlZCBwYXRoIG5hbWUgZXh0cmFj dGVkIGZyb20gZ2NvdiwgdXNlZCB0bworICogICAgICAgICAgICBjcmVhdGUgdGhlIG5hbWUgb2Yg Z2NkYSBmaWxlLgorICogIHNpemU6ICAgICBhIHVpbnQzMl90IGZpZWxkIGluZGljYXRpbmcgdGhl IHNpemUgb2YgdGhlIHBheWxvYWQsIHRoZQorICogICAgICAgICAgICB1bml0IGlzIGJ5dGUuCisg KiAgcGF5bG9hZDogIHRoZSBhY3R1YWwgcGF5bG9hZCwgbGVuZ3RoIGlzIGBzaXplJyBieXRlcy4K KyAqCisgKiBVc2Vyc3BhY2UgdG9vbCB3aWxsIHNwbGl0IHRoZSByZWNvcmQgdG8gZGlmZmVyZW50 IGZpbGVzLgorICovCisKKyNkZWZpbmUgWEVOX0dDT1ZfRk9STUFUX01BR0lDICAgIDB4NTg0MzRm NTYgLyogWENPViAqLworCisjZGVmaW5lIFhFTl9TWVNDVExfR0NPVl9nZXRfc2l6ZSAwIC8qIEdl dCB0b3RhbCBzaXplIG9mIG91dHB1dCBkYXRhICovCisjZGVmaW5lIFhFTl9TWVNDVExfR0NPVl9y ZWFkICAgICAxIC8qIFJlYWQgb3V0cHV0IGRhdGEgKi8KKyNkZWZpbmUgWEVOX1NZU0NUTF9HQ09W X3Jlc2V0ICAgIDIgLyogUmVzZXQgYWxsIGNvdW50ZXJzICovCisKK3N0cnVjdCB4ZW5fc3lzY3Rs X2djb3Zfb3AgeworICAgIHVpbnQzMl90IGNtZDsKKyAgICB1aW50MzJfdCBzaXplOyAvKiBJTi9P VVQ6IHNpemUgb2YgdGhlIGJ1ZmZlciAgKi8KKyAgICBYRU5fR1VFU1RfSEFORExFXzY0KGNoYXIp IGJ1ZmZlcjsgLyogT1VUICovCit9OwordHlwZWRlZiBzdHJ1Y3QgeGVuX3N5c2N0bF9nY292X29w IHhlbl9zeXNjdGxfZ2Nvdl9vcF90OworREVGSU5FX1hFTl9HVUVTVF9IQU5ETEUoeGVuX3N5c2N0 bF9nY292X29wX3QpOworCiAjZGVmaW5lIFhFTl9TWVNDVExfUFNSX0NNVF9nZXRfdG90YWxfcm1p ZCAgICAgICAgICAgIDAKICNkZWZpbmUgWEVOX1NZU0NUTF9QU1JfQ01UX2dldF9sM191cHNjYWxp bmdfZmFjdG9yICAgMQogLyogVGhlIEwzIGNhY2hlIHNpemUgaXMgcmV0dXJuZWQgaW4gS0IgdW5p dCAqLwpAQCAtMTA3Myw3ICsxMTA3LDcgQEAgc3RydWN0IHhlbl9zeXNjdGwgewogI2RlZmluZSBY RU5fU1lTQ1RMX251bWFpbmZvICAgICAgICAgICAgICAgICAgICAgIDE3CiAjZGVmaW5lIFhFTl9T WVNDVExfY3B1cG9vbF9vcCAgICAgICAgICAgICAgICAgICAgMTgKICNkZWZpbmUgWEVOX1NZU0NU TF9zY2hlZHVsZXJfb3AgICAgICAgICAgICAgICAgICAxOQotLyogI2RlZmluZSBYRU5fU1lTQ1RM X2NvdmVyYWdlX29wICAgICAgICAgICAgICAgICAgIDIwICovCisjZGVmaW5lIFhFTl9TWVNDVExf Z2Nvdl9vcCAgICAgICAgICAgICAgICAgICAgICAgMjAKICNkZWZpbmUgWEVOX1NZU0NUTF9wc3Jf Y210X29wICAgICAgICAgICAgICAgICAgICAyMQogI2RlZmluZSBYRU5fU1lTQ1RMX3BjaXRvcG9p bmZvICAgICAgICAgICAgICAgICAgIDIyCiAjZGVmaW5lIFhFTl9TWVNDVExfcHNyX2NhdF9vcCAg ICAgICAgICAgICAgICAgICAgMjMKQEAgLTExMDIsNiArMTEzNiw3IEBAIHN0cnVjdCB4ZW5fc3lz Y3RsIHsKICAgICAgICAgc3RydWN0IHhlbl9zeXNjdGxfbG9ja3Byb2Zfb3AgICAgICAgbG9ja3By b2Zfb3A7CiAgICAgICAgIHN0cnVjdCB4ZW5fc3lzY3RsX2NwdXBvb2xfb3AgICAgICAgIGNwdXBv b2xfb3A7CiAgICAgICAgIHN0cnVjdCB4ZW5fc3lzY3RsX3NjaGVkdWxlcl9vcCAgICAgIHNjaGVk dWxlcl9vcDsKKyAgICAgICAgc3RydWN0IHhlbl9zeXNjdGxfZ2Nvdl9vcCAgICAgICAgICAgZ2Nv dl9vcDsKICAgICAgICAgc3RydWN0IHhlbl9zeXNjdGxfcHNyX2NtdF9vcCAgICAgICAgcHNyX2Nt dF9vcDsKICAgICAgICAgc3RydWN0IHhlbl9zeXNjdGxfcHNyX2NhdF9vcCAgICAgICAgcHNyX2Nh dF9vcDsKICAgICAgICAgc3RydWN0IHhlbl9zeXNjdGxfdG1lbV9vcCAgICAgICAgICAgdG1lbV9v cDsKZGlmZiAtLWdpdCBhL3hlbi9pbmNsdWRlL3hlbi9nY292LmggYi94ZW4vaW5jbHVkZS94ZW4v Z2Nvdi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiNWQ5MTQKLS0tIC9k ZXYvbnVsbAorKysgYi94ZW4vaW5jbHVkZS94ZW4vZ2Nvdi5oCkBAIC0wLDAgKzEsOSBAQAorI2lm bmRlZiBfWEVOX0dDT1ZfSAorI2RlZmluZSBfWEVOX0dDT1ZfSAorCisjaWZkZWYgQ09ORklHX0dD T1YKKyNpbmNsdWRlIDxwdWJsaWMvc3lzY3RsLmg+CitpbnQgc3lzY3RsX2djb3Zfb3AoeGVuX3N5 c2N0bF9nY292X29wX3QgKm9wKTsKKyNlbmRpZgorCisjZW5kaWYJLyogX1hFTl9HQ09WX0ggKi8K LS0gCjIuMS40CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczov L2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==