From mboxrd@z Thu Jan 1 00:00:00 1970 From: Joshua Perrett Subject: [PATCH] libxl: made vm mac address assignment deterministic Date: Wed, 29 Aug 2018 16:34:28 +0000 Message-ID: <20180829163428.9086-1-jperrett256@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1fv3Sc-0004rE-BZ for xen-devel@lists.xenproject.org; Wed, 29 Aug 2018 16:36:50 +0000 Received: by mail-ed1-x542.google.com with SMTP id f38-v6so4408034edd.8 for ; Wed, 29 Aug 2018 09:36:48 -0700 (PDT) List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org Cc: Wei Liu , Ian Jackson , Joshua Perrett List-Id: xen-devel@lists.xenproject.org VXNlcyBNRDUgb24gdGhlIGhvc3QgbWFjIGFkZHJlc3MsIHZtIG5hbWUgYW5kIHZpZiBpbmRleCB0 byBnZW5lcmF0ZSB0aGUgbGFzdCB0aHJlZQpieXRlcyBvZiB0aGUgdm0gbWFjIGFkZHJlc3MgKGZv ciBlYWNoIHZtKS4KSXQgdXNlcyB0aGUgdmlmIGluZGV4IHRvIGFjY291bnQgZm9yIG11bHRpcGxl IHZpZnMuCk1ENSBjb2RlIGlzIG9yaWdpbmFsbHkgZnJvbSB0aGUgcHVibGljIGRvbWFpbiAod3Jp dHRlbiBieSBDb2xpbiBQbHVtYiBpbiAxOTkzKSwgZmlsZXMKZm91bmQgaW4geGVuL3Rvb2xzL2Js a3RhcDIvZHJpdmVycy8uCgpSZXBvcnRlZC1ieTogR2VvcmdlIER1bmxhcCA8Z2VvcmdlLmR1bmxh cEBjaXRyaXguY29tPgpTaWduZWQtb2ZmLWJ5OiBKb3NodWEgUGVycmV0dCA8anBlcnJldHQyNTZA Z21haWwuY29tPgotLS0KIHRvb2xzL2xpYnhsL01ha2VmaWxlICAgIHwgICAyICstCiB0b29scy9s aWJ4bC9saWJ4bF9uaWMuYyB8ICA1OSArKysrKysrKystLQogdG9vbHMvbGlieGwvbWQ1LmMgICAg ICAgfCAyNjYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr CiB0b29scy9saWJ4bC9tZDUuaCAgICAgICB8ICAyNiArKysrKwogNCBmaWxlcyBjaGFuZ2VkLCAz NDYgaW5zZXJ0aW9ucygrKSwgNyBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0b29s cy9saWJ4bC9tZDUuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHRvb2xzL2xpYnhsL21kNS5oCgpkaWZm IC0tZ2l0IGEvdG9vbHMvbGlieGwvTWFrZWZpbGUgYi90b29scy9saWJ4bC9NYWtlZmlsZQppbmRl eCA2ZGEzNDJlZDYxLi42ZTdkYjExMzY3IDEwMDY0NAotLS0gYS90b29scy9saWJ4bC9NYWtlZmls ZQorKysgYi90b29scy9saWJ4bC9NYWtlZmlsZQpAQCAtMTQyLDcgKzE0Miw3IEBAIExJQlhMX09C SlMgPSBmbGV4YXJyYXkubyBsaWJ4bC5vIGxpYnhsX2NyZWF0ZS5vIGxpYnhsX2RtLm8gbGlieGxf cGNpLm8gXAogCQkJbGlieGxfOXBmcy5vIGxpYnhsX2RvbWFpbi5vIGxpYnhsX3ZkaXNwbC5vIFwK IAkJCWxpYnhsX3B2Y2FsbHMubyBsaWJ4bF92c25kLm8gbGlieGxfdmtiLm8gJChMSUJYTF9PQkpT LXkpCiBMSUJYTF9PQkpTICs9IGxpYnhsX2dlbmlkLm8KLUxJQlhMX09CSlMgKz0gX2xpYnhsX3R5 cGVzLm8gbGlieGxfZmxhc2subyBfbGlieGxfdHlwZXNfaW50ZXJuYWwubworTElCWExfT0JKUyAr PSBfbGlieGxfdHlwZXMubyBsaWJ4bF9mbGFzay5vIF9saWJ4bF90eXBlc19pbnRlcm5hbC5vIG1k NS5vCiAKIExJQlhMX1RFU1RTICs9IHRpbWVkZXJlZwogTElCWExfVEVTVFNfUFJPR1MgPSAkKExJ QlhMX1RFU1RTKSBmZGRlcmVncmFjZQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGlieGwvbGlieGxfbmlj LmMgYi90b29scy9saWJ4bC9saWJ4bF9uaWMuYwppbmRleCAwMWI3MTFiODRlLi4zN2RlNWZmYjA0 IDEwMDY0NAotLS0gYS90b29scy9saWJ4bC9saWJ4bF9uaWMuYworKysgYi90b29scy9saWJ4bC9s aWJ4bF9uaWMuYwpAQCAtMTcsNiArMTcsMTYgQEAKIAogI2luY2x1ZGUgImxpYnhsX2ludGVybmFs LmgiCiAKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgIm1kNS5oIgorCisjaW5jbHVk ZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8aWZhZGRycy5oPgorI2luY2x1ZGUgPHN5cy9zb2Nr ZXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9wYWNrZXQuaD4KKyNpbmNsdWRlIDxuZXQvZXRoZXJu ZXQuaD4KKwogaW50IGxpYnhsX21hY190b19kZXZpY2VfbmljKGxpYnhsX2N0eCAqY3R4LCB1aW50 MzJfdCBkb21pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICptYWMs IGxpYnhsX2RldmljZV9uaWMgKm5pYykKIHsKQEAgLTUzLDggKzYzLDM2IEBAIGludCBsaWJ4bF9t YWNfdG9fZGV2aWNlX25pYyhsaWJ4bF9jdHggKmN0eCwgdWludDMyX3QgZG9taWQsCiAgICAgcmV0 dXJuIHJjOwogfQogCitzdGF0aWMgaW50IGxpYnhsX19nZXRfaG9zdF9tYWModW5zaWduZWQgY2hh ciAqYnVmKQoreworICAgIGludCBzdWNjZXNzID0gLTE7CisgICAgc3RydWN0IGlmYWRkcnMgKmlm YWNlX2xpc3Q7CisgICAgaWYgKGdldGlmYWRkcnMoJmlmYWNlX2xpc3QpID09IDApIHsKKyAgICAg ICAgZm9yIChzdHJ1Y3QgaWZhZGRycyAqaWZhY2UgPSBpZmFjZV9saXN0OworICAgICAgICAgICAg aWZhY2UgIT0gTlVMTDsgaWZhY2UgPSBpZmFjZS0+aWZhX25leHQpIHsKKyAgICAgICAgICAgIGlm IChpZmFjZS0+aWZhX2FkZHIgJiYgaWZhY2UtPmlmYV9hZGRyLT5zYV9mYW1pbHkgPT0gQUZfUEFD S0VUKSB7CisgICAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyX2xsICpzID0gKHN0cnVjdCBz b2NrYWRkcl9sbCAqKWlmYWNlLT5pZmFfYWRkcjsKKyAgICAgICAgICAgICAgICBpZiAocy0+c2xs X2hhbGVuID09IDYpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2 OyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZltpXSA9IHMtPnNsbF9hZGRyW2ld OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmKGJ1ZlswXSB8 fCBidWZbMV0gfHwgYnVmWzJdIHx8IGJ1ZlszXSB8fCBidWZbNF0gfHwgYnVmWzVdKSB7CisgICAg ICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAg IGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgfQorICAgICAgICB9CisgICAgICAgIGZyZWVpZmFkZHJzKGlmYWNlX2xpc3QpOworICAg IH0gZWxzZSB7CisgICAgICAgIHBlcnJvcigiRVJST1I6IGdldGlmYWRkcnNcbiIpOworICAgIH0K KyAgICByZXR1cm4gc3VjY2VzczsKK30KKwogc3RhdGljIGludCBsaWJ4bF9fZGV2aWNlX25pY19z ZXRkZWZhdWx0KGxpYnhsX19nYyAqZ2MsIHVpbnQzMl90IGRvbWlkLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV9uaWMgKm5pYywgYm9vbCBob3Rw bHVnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2Rldmlj ZV9uaWMgKm5pYywgY29uc3QgY2hhciAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBpbnQgbmljX2luZGV4LCBib29sIGhvdHBsdWcpCiB7CiAgICAg aW50IHJjOwogCkBAIC02NSwxMSArMTAzLDIwIEBAIHN0YXRpYyBpbnQgbGlieGxfX2RldmljZV9u aWNfc2V0ZGVmYXVsdChsaWJ4bF9fZ2MgKmdjLCB1aW50MzJfdCBkb21pZCwKICAgICAgICAgaWYg KCFuaWMtPm1vZGVsKSByZXR1cm4gRVJST1JfTk9NRU07CiAgICAgfQogICAgIGlmIChsaWJ4bF9f bWFjX2lzX2RlZmF1bHQoJm5pYy0+bWFjKSkgewotICAgICAgICBjb25zdCB1aW50OF90ICpyOwot ICAgICAgICBsaWJ4bF91dWlkIHV1aWQ7CisgICAgICAgIHVpbnQ4X3QgclsxNl07CisKKyAgICAg ICAgdWludDhfdCBob3N0bWFjWzZdID0gezB9OworCisgICAgICAgIGlmKGxpYnhsX19nZXRfaG9z dF9tYWMoaG9zdG1hYykpIHsKKyAgICAgICAgICAgIHBlcnJvcigiV0FSTklORzogZmFpbGVkIHRv IGdldCBob3N0IG1hYyBhZGRyZXNzXG4iKTsKKyAgICAgICAgfQogCi0gICAgICAgIGxpYnhsX3V1 aWRfZ2VuZXJhdGUoJnV1aWQpOwotICAgICAgICByID0gbGlieGxfdXVpZF9ieXRlYXJyYXkoJnV1 aWQpOworICAgICAgICBNRDVfQ1RYIGN0eDsKKyAgICAgICAgTUQ1SW5pdCgmY3R4KTsKKyAgICAg ICAgTUQ1VXBkYXRlKCZjdHgsIGhvc3RtYWMsIHNpemVvZihob3N0bWFjKSk7CisgICAgICAgIE1E NVVwZGF0ZSgmY3R4LCAodWludDhfdCAqKSBuYW1lLCBzdHJsZW4obmFtZSkpOworICAgICAgICBN RDVVcGRhdGUoJmN0eCwgKHVpbnQ4X3QgKikgJm5pY19pbmRleCwgc2l6ZW9mKG5pY19pbmRleCkp OworICAgICAgICBNRDVGaW5hbChyLCAmY3R4KTsKIAogICAgICAgICBuaWMtPm1hY1swXSA9IDB4 MDA7CiAgICAgICAgIG5pYy0+bWFjWzFdID0gMHgxNjsKQEAgLTQ3OCw3ICs1MjUsNyBAQCBpbnQg bGlieGxfX2RldmljZV9uaWNfc2V0X2RldmlkcyhsaWJ4bF9fZ2MgKmdjLCBsaWJ4bF9kb21haW5f Y29uZmlnICpkX2NvbmZpZywKICAgICAgICAgICogYnV0IHFlbXUgbmVlZHMgdGhlIG5pYyBpbmZv cm1hdGlvbiB0byBiZSBjb21wbGV0ZS4KICAgICAgICAgICovCiAgICAgICAgIHJldCA9IGxpYnhs X19kZXZpY2VfbmljX3NldGRlZmF1bHQoZ2MsIGRvbWlkLCAmZF9jb25maWctPm5pY3NbaV0sCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UpOworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRfY29uZmlnLT5jX2luZm8ubmFt ZSwgaSwgZmFsc2UpOwogICAgICAgICBpZiAocmV0KSB7CiAgICAgICAgICAgICBMT0dEKEVSUk9S LCBkb21pZCwgIlVuYWJsZSB0byBzZXQgbmljIGRlZmF1bHRzIGZvciBuaWMgJWQiLCBpKTsKICAg ICAgICAgICAgIGdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvdG9vbHMvbGlieGwvbWQ1LmMgYi90b29s cy9saWJ4bC9tZDUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi44OGVh MTM5MzhhCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvbGlieGwvbWQ1LmMKQEAgLTAsMCArMSwy NjYgQEAKKy8qIHN0YXJ0IC0gcHVibGljIGRvbWFpbiBNRDUgaW1wbGVtZW50YXRpb24gKi8KKy8q CisgKiBUaGlzIGNvZGUgaW1wbGVtZW50cyB0aGUgTUQ1IG1lc3NhZ2UtZGlnZXN0IGFsZ29yaXRo bS4KKyAqIFRoZSBhbGdvcml0aG0gaXMgZHVlIHRvIFJvbiBSaXZlc3QuICBUaGlzIGNvZGUgd2Fz CisgKiB3cml0dGVuIGJ5IENvbGluIFBsdW1iIGluIDE5OTMsIG5vIGNvcHlyaWdodCBpcyBjbGFp bWVkLgorICogVGhpcyBjb2RlIGlzIGluIHRoZSBwdWJsaWMgZG9tYWluOyBkbyB3aXRoIGl0IHdo YXQgeW91IHdpc2guCisgKgorICogRXF1aXZhbGVudCBjb2RlIGlzIGF2YWlsYWJsZSBmcm9tIFJT QSBEYXRhIFNlY3VyaXR5LCBJbmMuCisgKiBUaGlzIGNvZGUgaGFzIGJlZW4gdGVzdGVkIGFnYWlu c3QgdGhhdCwgYW5kIGlzIGVxdWl2YWxlbnQsCisgKiBleGNlcHQgdGhhdCB5b3UgZG9uJ3QgbmVl ZCB0byBpbmNsdWRlIHR3byBwYWdlcyBvZiBsZWdhbGVzZQorICogd2l0aCBldmVyeSBjb3B5Lgor ICoKKyAqIFRvIGNvbXB1dGUgdGhlIG1lc3NhZ2UgZGlnZXN0IG9mIGEgY2h1bmsgb2YgYnl0ZXMs IGRlY2xhcmUgYW4KKyAqIE1ENUNvbnRleHQgc3RydWN0dXJlLCBwYXNzIGl0IHRvIE1ENUluaXQs IGNhbGwgTUQ1VXBkYXRlIGFzCisgKiBuZWVkZWQgb24gYnVmZmVycyBmdWxsIG9mIGJ5dGVzLCBh bmQgdGhlbiBjYWxsIE1ENUZpbmFsLCB3aGljaAorICogd2lsbCBmaWxsIGEgc3VwcGxpZWQgMTYt Ynl0ZSBhcnJheSB3aXRoIHRoZSBkaWdlc3QuCisgKi8KKworI2luY2x1ZGUgPHN0cmluZy5oPgor I2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgIm1kNS5oIgorCitzdGF0aWMgdm9pZCBNRDVU cmFuc2Zvcm0odWludDMyX3QgYnVmWzRdLCB1aW50MzJfdCBjb25zdCBpblsxNl0pOworCisKKy8q KgorICogbWQ1X3N1bSAtIE1ENSBoYXNoIGZvciBhIGRhdGEgYmxvY2sKKyAqIEBhZGRyOiBQb2lu dGVycyB0byB0aGUgZGF0YSBhcmVhCisgKiBAbGVuOiBMZW5ndGhzIG9mIHRoZSBkYXRhIGJsb2Nr CisgKiBAbWFjOiBCdWZmZXIgZm9yIHRoZSBoYXNoCisgKi8KK3ZvaWQgbWQ1X3N1bShjb25zdCB1 aW50OF90ICphZGRyLCBjb25zdCBzaXplX3QgbGVuLCB1aW50OF90ICptYWMpCit7CisgICAgICAg IE1ENV9DVFggY3R4OworCisgICAgICAgIE1ENUluaXQoJmN0eCk7CisgICAgICAgIE1ENVVwZGF0 ZSgmY3R4LCBhZGRyLCBsZW4pOworICAgICAgICBNRDVGaW5hbChtYWMsICZjdHgpOworfQorCisK KyNpZm5kZWYgV09SRFNfQklHRU5ESUFOCisjZGVmaW5lIGJ5dGVSZXZlcnNlKGJ1ZiwgbGVuKSAg IC8qIE5vdGhpbmcgKi8KKyNlbHNlCisvKgorICogTm90ZTogdGhpcyBjb2RlIGlzIGhhcm1sZXNz IG9uIGxpdHRsZS1lbmRpYW4gbWFjaGluZXMuCisgKi8KK3N0YXRpYyB2b2lkIGJ5dGVSZXZlcnNl KHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgbG9uZ3MpCit7CisgICAgdWludDMyX3QgdDsK KyAgICBkbyB7CisgICAgICAgIHQgPSAodWludDMyX3QpICgodW5zaWduZWQpIGJ1ZlszXSA8PCA4 IHwgYnVmWzJdKSA8PCAxNiB8CisgICAgICAgICAgICAoKHVuc2lnbmVkKSBidWZbMV0gPDwgOCB8 IGJ1ZlswXSk7CisgICAgICAgICoodWludDMyX3QgKikgYnVmID0gdDsKKyAgICAgICAgYnVmICs9 IDQ7CisgICAgfSB3aGlsZSAoLS1sb25ncyk7Cit9CisjZW5kaWYKKworLyoKKyAqIFN0YXJ0IE1E NSBhY2N1bXVsYXRpb24uICBTZXQgYml0IGNvdW50IHRvIDAgYW5kIGJ1ZmZlciB0byBteXN0ZXJp b3VzCisgKiBpbml0aWFsaXphdGlvbiBjb25zdGFudHMuCisgKi8KK3ZvaWQgTUQ1SW5pdChzdHJ1 Y3QgTUQ1Q29udGV4dCAqY3R4KQoreworICAgIGN0eC0+YnVmWzBdID0gMHg2NzQ1MjMwMTsKKyAg ICBjdHgtPmJ1ZlsxXSA9IDB4ZWZjZGFiODk7CisgICAgY3R4LT5idWZbMl0gPSAweDk4YmFkY2Zl OworICAgIGN0eC0+YnVmWzNdID0gMHgxMDMyNTQ3NjsKKworICAgIGN0eC0+Yml0c1swXSA9IDA7 CisgICAgY3R4LT5iaXRzWzFdID0gMDsKK30KKworLyoKKyAqIFVwZGF0ZSBjb250ZXh0IHRvIHJl ZmxlY3QgdGhlIGNvbmNhdGVuYXRpb24gb2YgYW5vdGhlciBidWZmZXIgZnVsbAorICogb2YgYnl0 ZXMuCisgKi8KK3ZvaWQgTUQ1VXBkYXRlKHN0cnVjdCBNRDVDb250ZXh0ICpjdHgsIHVuc2lnbmVk IGNoYXIgY29uc3QgKmJ1ZiwgdW5zaWduZWQgbGVuKQoreworICAgIHVpbnQzMl90IHQ7CisKKyAg ICAvKiBVcGRhdGUgYml0Y291bnQgKi8KKworICAgIHQgPSBjdHgtPmJpdHNbMF07CisgICAgaWYg KChjdHgtPmJpdHNbMF0gPSB0ICsgKCh1aW50MzJfdCkgbGVuIDw8IDMpKSA8IHQpCisgICAgICAg IGN0eC0+Yml0c1sxXSsrOyAgICAgICAgIC8qIENhcnJ5IGZyb20gbG93IHRvIGhpZ2ggKi8KKyAg ICBjdHgtPmJpdHNbMV0gKz0gbGVuID4+IDI5OworCisgICAgdCA9ICh0ID4+IDMpICYgMHgzZjsg ICAgICAgIC8qIEJ5dGVzIGFscmVhZHkgaW4gc2hzSW5mby0+ZGF0YSAqLworCisgICAgLyogSGFu ZGxlIGFueSBsZWFkaW5nIG9kZC1zaXplZCBjaHVua3MgKi8KKworICAgIGlmICh0KSB7CisgICAg ICAgIHVuc2lnbmVkIGNoYXIgKnAgPSAodW5zaWduZWQgY2hhciAqKSBjdHgtPmluICsgdDsKKwor ICAgICAgICB0ID0gNjQgLSB0OworICAgICAgICBpZiAobGVuIDwgdCkgeworICAgICAgICAgICAg bWVtY3B5KHAsIGJ1ZiwgbGVuKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg ICAgICBtZW1jcHkocCwgYnVmLCB0KTsKKyAgICAgICAgYnl0ZVJldmVyc2UoY3R4LT5pbiwgMTYp OworICAgICAgICBNRDVUcmFuc2Zvcm0oY3R4LT5idWYsICh1aW50MzJfdCAqKSBjdHgtPmluKTsK KyAgICAgICAgYnVmICs9IHQ7CisgICAgICAgIGxlbiAtPSB0OworICAgIH0KKyAgICAvKiBQcm9j ZXNzIGRhdGEgaW4gNjQtYnl0ZSBjaHVua3MgKi8KKworICAgIHdoaWxlIChsZW4gPj0gNjQpIHsK KyAgICAgICAgbWVtY3B5KGN0eC0+aW4sIGJ1ZiwgNjQpOworICAgICAgICBieXRlUmV2ZXJzZShj dHgtPmluLCAxNik7CisgICAgICAgIE1ENVRyYW5zZm9ybShjdHgtPmJ1ZiwgKHVpbnQzMl90ICop IGN0eC0+aW4pOworICAgICAgICBidWYgKz0gNjQ7CisgICAgICAgIGxlbiAtPSA2NDsKKyAgICB9 CisKKyAgICAvKiBIYW5kbGUgYW55IHJlbWFpbmluZyBieXRlcyBvZiBkYXRhLiAqLworCisgICAg bWVtY3B5KGN0eC0+aW4sIGJ1ZiwgbGVuKTsKK30KKworLyoKKyAqIEZpbmFsIHdyYXB1cCAtIHBh ZCB0byA2NC1ieXRlIGJvdW5kYXJ5IHdpdGggdGhlIGJpdCBwYXR0ZXJuCisgKiAxIDAqICg2NC1i aXQgY291bnQgb2YgYml0cyBwcm9jZXNzZWQsIE1TQi1maXJzdCkKKyAqLwordm9pZCBNRDVGaW5h bCh1bnNpZ25lZCBjaGFyIGRpZ2VzdFsxNl0sIHN0cnVjdCBNRDVDb250ZXh0ICpjdHgpCit7Cisg ICAgdW5zaWduZWQgY291bnQ7CisgICAgdW5zaWduZWQgY2hhciAqcDsKKworICAgIC8qIENvbXB1 dGUgbnVtYmVyIG9mIGJ5dGVzIG1vZCA2NCAqLworICAgIGNvdW50ID0gKGN0eC0+Yml0c1swXSA+ PiAzKSAmIDB4M0Y7CisKKyAgICAvKiBTZXQgdGhlIGZpcnN0IGNoYXIgb2YgcGFkZGluZyB0byAw eDgwLiAgVGhpcyBpcyBzYWZlIHNpbmNlIHRoZXJlIGlzCisgICAgICAgYWx3YXlzIGF0IGxlYXN0 IG9uZSBieXRlIGZyZWUgKi8KKyAgICBwID0gY3R4LT5pbiArIGNvdW50OworICAgICpwKysgPSAw eDgwOworCisgICAgLyogQnl0ZXMgb2YgcGFkZGluZyBuZWVkZWQgdG8gbWFrZSA2NCBieXRlcyAq LworICAgIGNvdW50ID0gNjQgLSAxIC0gY291bnQ7CisKKyAgICAvKiBQYWQgb3V0IHRvIDU2IG1v ZCA2NCAqLworICAgIGlmIChjb3VudCA8IDgpIHsKKyAgICAgICAgLyogVHdvIGxvdHMgb2YgcGFk ZGluZzogIFBhZCB0aGUgZmlyc3QgYmxvY2sgdG8gNjQgYnl0ZXMgKi8KKyAgICAgICAgbWVtc2V0 KHAsIDAsIGNvdW50KTsKKyAgICAgICAgYnl0ZVJldmVyc2UoY3R4LT5pbiwgMTYpOworICAgICAg ICBNRDVUcmFuc2Zvcm0oY3R4LT5idWYsICh1aW50MzJfdCAqKSBjdHgtPmluKTsKKworICAgICAg ICAvKiBOb3cgZmlsbCB0aGUgbmV4dCBibG9jayB3aXRoIDU2IGJ5dGVzICovCisgICAgICAgIG1l bXNldChjdHgtPmluLCAwLCA1Nik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLyogUGFkIGJsb2Nr IHRvIDU2IGJ5dGVzICovCisgICAgICAgIG1lbXNldChwLCAwLCBjb3VudCAtIDgpOworICAgIH0K KyAgICBieXRlUmV2ZXJzZShjdHgtPmluLCAxNCk7CisKKyAgICAvKiBBcHBlbmQgbGVuZ3RoIGlu IGJpdHMgYW5kIHRyYW5zZm9ybSAqLworICAgICgodWludDMyX3QgKikgY3R4LT5pbilbMTRdID0g Y3R4LT5iaXRzWzBdOworICAgICgodWludDMyX3QgKikgY3R4LT5pbilbMTVdID0gY3R4LT5iaXRz WzFdOworCisgICAgTUQ1VHJhbnNmb3JtKGN0eC0+YnVmLCAodWludDMyX3QgKikgY3R4LT5pbik7 CisgICAgYnl0ZVJldmVyc2UoKHVuc2lnbmVkIGNoYXIgKikgY3R4LT5idWYsIDQpOworICAgIG1l bWNweShkaWdlc3QsIGN0eC0+YnVmLCAxNik7CisgICAgbWVtc2V0KGN0eCwgMCwgc2l6ZW9mKCpj dHgpKTsgICAgIC8qIEluIGNhc2UgaXQncyBzZW5zaXRpdmUgKi8KK30KKworLyogVGhlIGZvdXIg Y29yZSBmdW5jdGlvbnMgLSBGMSBpcyBvcHRpbWl6ZWQgc29tZXdoYXQgKi8KKworLyogI2RlZmlu ZSBGMSh4LCB5LCB6KSAoeCAmIHkgfCB+eCAmIHopICovCisjZGVmaW5lIEYxKHgsIHksIHopICh6 IF4gKHggJiAoeSBeIHopKSkKKyNkZWZpbmUgRjIoeCwgeSwgeikgRjEoeiwgeCwgeSkKKyNkZWZp bmUgRjMoeCwgeSwgeikgKHggXiB5IF4geikKKyNkZWZpbmUgRjQoeCwgeSwgeikgKHkgXiAoeCB8 IH56KSkKKworLyogVGhpcyBpcyB0aGUgY2VudHJhbCBzdGVwIGluIHRoZSBNRDUgYWxnb3JpdGht LiAqLworI2RlZmluZSBNRDVTVEVQKGYsIHcsIHgsIHksIHosIGRhdGEsIHMpIFwKKyAgICAgICAg KCB3ICs9IGYoeCwgeSwgeikgKyBkYXRhLCAgdyA9IHc8PHMgfCB3Pj4oMzItcyksICB3ICs9IHgg KQorCisvKgorICogVGhlIGNvcmUgb2YgdGhlIE1ENSBhbGdvcml0aG0sIHRoaXMgYWx0ZXJzIGFu IGV4aXN0aW5nIE1ENSBoYXNoIHRvCisgKiByZWZsZWN0IHRoZSBhZGRpdGlvbiBvZiAxNiBsb25n d29yZHMgb2YgbmV3IGRhdGEuICBNRDVVcGRhdGUgYmxvY2tzCisgKiB0aGUgZGF0YSBhbmQgY29u dmVydHMgYnl0ZXMgaW50byBsb25nd29yZHMgZm9yIHRoaXMgcm91dGluZS4KKyAqLworc3RhdGlj IHZvaWQgTUQ1VHJhbnNmb3JtKHVpbnQzMl90IGJ1Zls0XSwgdWludDMyX3QgY29uc3QgaW5bMTZd KQoreworICAgIHJlZ2lzdGVyIHVpbnQzMl90IGEsIGIsIGMsIGQ7CisKKyAgICBhID0gYnVmWzBd OworICAgIGIgPSBidWZbMV07CisgICAgYyA9IGJ1ZlsyXTsKKyAgICBkID0gYnVmWzNdOworCisg ICAgTUQ1U1RFUChGMSwgYSwgYiwgYywgZCwgaW5bMF0gKyAweGQ3NmFhNDc4LCA3KTsKKyAgICBN RDVTVEVQKEYxLCBkLCBhLCBiLCBjLCBpblsxXSArIDB4ZThjN2I3NTYsIDEyKTsKKyAgICBNRDVT VEVQKEYxLCBjLCBkLCBhLCBiLCBpblsyXSArIDB4MjQyMDcwZGIsIDE3KTsKKyAgICBNRDVTVEVQ KEYxLCBiLCBjLCBkLCBhLCBpblszXSArIDB4YzFiZGNlZWUsIDIyKTsKKyAgICBNRDVTVEVQKEYx LCBhLCBiLCBjLCBkLCBpbls0XSArIDB4ZjU3YzBmYWYsIDcpOworICAgIE1ENVNURVAoRjEsIGQs IGEsIGIsIGMsIGluWzVdICsgMHg0Nzg3YzYyYSwgMTIpOworICAgIE1ENVNURVAoRjEsIGMsIGQs IGEsIGIsIGluWzZdICsgMHhhODMwNDYxMywgMTcpOworICAgIE1ENVNURVAoRjEsIGIsIGMsIGQs IGEsIGluWzddICsgMHhmZDQ2OTUwMSwgMjIpOworICAgIE1ENVNURVAoRjEsIGEsIGIsIGMsIGQs IGluWzhdICsgMHg2OTgwOThkOCwgNyk7CisgICAgTUQ1U1RFUChGMSwgZCwgYSwgYiwgYywgaW5b OV0gKyAweDhiNDRmN2FmLCAxMik7CisgICAgTUQ1U1RFUChGMSwgYywgZCwgYSwgYiwgaW5bMTBd ICsgMHhmZmZmNWJiMSwgMTcpOworICAgIE1ENVNURVAoRjEsIGIsIGMsIGQsIGEsIGluWzExXSAr IDB4ODk1Y2Q3YmUsIDIyKTsKKyAgICBNRDVTVEVQKEYxLCBhLCBiLCBjLCBkLCBpblsxMl0gKyAw eDZiOTAxMTIyLCA3KTsKKyAgICBNRDVTVEVQKEYxLCBkLCBhLCBiLCBjLCBpblsxM10gKyAweGZk OTg3MTkzLCAxMik7CisgICAgTUQ1U1RFUChGMSwgYywgZCwgYSwgYiwgaW5bMTRdICsgMHhhNjc5 NDM4ZSwgMTcpOworICAgIE1ENVNURVAoRjEsIGIsIGMsIGQsIGEsIGluWzE1XSArIDB4NDliNDA4 MjEsIDIyKTsKKworICAgIE1ENVNURVAoRjIsIGEsIGIsIGMsIGQsIGluWzFdICsgMHhmNjFlMjU2 MiwgNSk7CisgICAgTUQ1U1RFUChGMiwgZCwgYSwgYiwgYywgaW5bNl0gKyAweGMwNDBiMzQwLCA5 KTsKKyAgICBNRDVTVEVQKEYyLCBjLCBkLCBhLCBiLCBpblsxMV0gKyAweDI2NWU1YTUxLCAxNCk7 CisgICAgTUQ1U1RFUChGMiwgYiwgYywgZCwgYSwgaW5bMF0gKyAweGU5YjZjN2FhLCAyMCk7Cisg ICAgTUQ1U1RFUChGMiwgYSwgYiwgYywgZCwgaW5bNV0gKyAweGQ2MmYxMDVkLCA1KTsKKyAgICBN RDVTVEVQKEYyLCBkLCBhLCBiLCBjLCBpblsxMF0gKyAweDAyNDQxNDUzLCA5KTsKKyAgICBNRDVT VEVQKEYyLCBjLCBkLCBhLCBiLCBpblsxNV0gKyAweGQ4YTFlNjgxLCAxNCk7CisgICAgTUQ1U1RF UChGMiwgYiwgYywgZCwgYSwgaW5bNF0gKyAweGU3ZDNmYmM4LCAyMCk7CisgICAgTUQ1U1RFUChG MiwgYSwgYiwgYywgZCwgaW5bOV0gKyAweDIxZTFjZGU2LCA1KTsKKyAgICBNRDVTVEVQKEYyLCBk LCBhLCBiLCBjLCBpblsxNF0gKyAweGMzMzcwN2Q2LCA5KTsKKyAgICBNRDVTVEVQKEYyLCBjLCBk LCBhLCBiLCBpblszXSArIDB4ZjRkNTBkODcsIDE0KTsKKyAgICBNRDVTVEVQKEYyLCBiLCBjLCBk LCBhLCBpbls4XSArIDB4NDU1YTE0ZWQsIDIwKTsKKyAgICBNRDVTVEVQKEYyLCBhLCBiLCBjLCBk LCBpblsxM10gKyAweGE5ZTNlOTA1LCA1KTsKKyAgICBNRDVTVEVQKEYyLCBkLCBhLCBiLCBjLCBp blsyXSArIDB4ZmNlZmEzZjgsIDkpOworICAgIE1ENVNURVAoRjIsIGMsIGQsIGEsIGIsIGluWzdd ICsgMHg2NzZmMDJkOSwgMTQpOworICAgIE1ENVNURVAoRjIsIGIsIGMsIGQsIGEsIGluWzEyXSAr IDB4OGQyYTRjOGEsIDIwKTsKKworICAgIE1ENVNURVAoRjMsIGEsIGIsIGMsIGQsIGluWzVdICsg MHhmZmZhMzk0MiwgNCk7CisgICAgTUQ1U1RFUChGMywgZCwgYSwgYiwgYywgaW5bOF0gKyAweDg3 NzFmNjgxLCAxMSk7CisgICAgTUQ1U1RFUChGMywgYywgZCwgYSwgYiwgaW5bMTFdICsgMHg2ZDlk NjEyMiwgMTYpOworICAgIE1ENVNURVAoRjMsIGIsIGMsIGQsIGEsIGluWzE0XSArIDB4ZmRlNTM4 MGMsIDIzKTsKKyAgICBNRDVTVEVQKEYzLCBhLCBiLCBjLCBkLCBpblsxXSArIDB4YTRiZWVhNDQs IDQpOworICAgIE1ENVNURVAoRjMsIGQsIGEsIGIsIGMsIGluWzRdICsgMHg0YmRlY2ZhOSwgMTEp OworICAgIE1ENVNURVAoRjMsIGMsIGQsIGEsIGIsIGluWzddICsgMHhmNmJiNGI2MCwgMTYpOwor ICAgIE1ENVNURVAoRjMsIGIsIGMsIGQsIGEsIGluWzEwXSArIDB4YmViZmJjNzAsIDIzKTsKKyAg ICBNRDVTVEVQKEYzLCBhLCBiLCBjLCBkLCBpblsxM10gKyAweDI4OWI3ZWM2LCA0KTsKKyAgICBN RDVTVEVQKEYzLCBkLCBhLCBiLCBjLCBpblswXSArIDB4ZWFhMTI3ZmEsIDExKTsKKyAgICBNRDVT VEVQKEYzLCBjLCBkLCBhLCBiLCBpblszXSArIDB4ZDRlZjMwODUsIDE2KTsKKyAgICBNRDVTVEVQ KEYzLCBiLCBjLCBkLCBhLCBpbls2XSArIDB4MDQ4ODFkMDUsIDIzKTsKKyAgICBNRDVTVEVQKEYz LCBhLCBiLCBjLCBkLCBpbls5XSArIDB4ZDlkNGQwMzksIDQpOworICAgIE1ENVNURVAoRjMsIGQs IGEsIGIsIGMsIGluWzEyXSArIDB4ZTZkYjk5ZTUsIDExKTsKKyAgICBNRDVTVEVQKEYzLCBjLCBk LCBhLCBiLCBpblsxNV0gKyAweDFmYTI3Y2Y4LCAxNik7CisgICAgTUQ1U1RFUChGMywgYiwgYywg ZCwgYSwgaW5bMl0gKyAweGM0YWM1NjY1LCAyMyk7CisKKyAgICBNRDVTVEVQKEY0LCBhLCBiLCBj LCBkLCBpblswXSArIDB4ZjQyOTIyNDQsIDYpOworICAgIE1ENVNURVAoRjQsIGQsIGEsIGIsIGMs IGluWzddICsgMHg0MzJhZmY5NywgMTApOworICAgIE1ENVNURVAoRjQsIGMsIGQsIGEsIGIsIGlu WzE0XSArIDB4YWI5NDIzYTcsIDE1KTsKKyAgICBNRDVTVEVQKEY0LCBiLCBjLCBkLCBhLCBpbls1 XSArIDB4ZmM5M2EwMzksIDIxKTsKKyAgICBNRDVTVEVQKEY0LCBhLCBiLCBjLCBkLCBpblsxMl0g KyAweDY1NWI1OWMzLCA2KTsKKyAgICBNRDVTVEVQKEY0LCBkLCBhLCBiLCBjLCBpblszXSArIDB4 OGYwY2NjOTIsIDEwKTsKKyAgICBNRDVTVEVQKEY0LCBjLCBkLCBhLCBiLCBpblsxMF0gKyAweGZm ZWZmNDdkLCAxNSk7CisgICAgTUQ1U1RFUChGNCwgYiwgYywgZCwgYSwgaW5bMV0gKyAweDg1ODQ1 ZGQxLCAyMSk7CisgICAgTUQ1U1RFUChGNCwgYSwgYiwgYywgZCwgaW5bOF0gKyAweDZmYTg3ZTRm LCA2KTsKKyAgICBNRDVTVEVQKEY0LCBkLCBhLCBiLCBjLCBpblsxNV0gKyAweGZlMmNlNmUwLCAx MCk7CisgICAgTUQ1U1RFUChGNCwgYywgZCwgYSwgYiwgaW5bNl0gKyAweGEzMDE0MzE0LCAxNSk7 CisgICAgTUQ1U1RFUChGNCwgYiwgYywgZCwgYSwgaW5bMTNdICsgMHg0ZTA4MTFhMSwgMjEpOwor ICAgIE1ENVNURVAoRjQsIGEsIGIsIGMsIGQsIGluWzRdICsgMHhmNzUzN2U4MiwgNik7CisgICAg TUQ1U1RFUChGNCwgZCwgYSwgYiwgYywgaW5bMTFdICsgMHhiZDNhZjIzNSwgMTApOworICAgIE1E NVNURVAoRjQsIGMsIGQsIGEsIGIsIGluWzJdICsgMHgyYWQ3ZDJiYiwgMTUpOworICAgIE1ENVNU RVAoRjQsIGIsIGMsIGQsIGEsIGluWzldICsgMHhlYjg2ZDM5MSwgMjEpOworCisgICAgYnVmWzBd ICs9IGE7CisgICAgYnVmWzFdICs9IGI7CisgICAgYnVmWzJdICs9IGM7CisgICAgYnVmWzNdICs9 IGQ7Cit9CmRpZmYgLS1naXQgYS90b29scy9saWJ4bC9tZDUuaCBiL3Rvb2xzL2xpYnhsL21kNS5o Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjA5YzI3ZTI5NjgKLS0tIC9k ZXYvbnVsbAorKysgYi90b29scy9saWJ4bC9tZDUuaApAQCAtMCwwICsxLDI2IEBACisjaWZuZGVm IE1ENV9ICisjZGVmaW5lIE1ENV9ICisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxz dGRkZWYuaD4KKworLyoqCisgKiBtZDVfc3VtIC0gTUQ1IGhhc2ggZm9yIGEgZGF0YSBibG9jawor ICogQGFkZHI6IFBvaW50ZXJzIHRvIHRoZSBkYXRhIGFyZWEKKyAqIEBsZW46IExlbmd0aHMgb2Yg dGhlIGRhdGEgYmxvY2sKKyAqIEBtYWM6IEJ1ZmZlciBmb3IgdGhlIGhhc2gKKyAqLwordm9pZCBt ZDVfc3VtKGNvbnN0IHVpbnQ4X3QgKmFkZHIsIGNvbnN0IHNpemVfdCBsZW4sIHVpbnQ4X3QgKm1h Yyk7CisKKworc3RydWN0IE1ENUNvbnRleHQgeworICAgICAgICB1aW50MzJfdCBidWZbNF07Cisg ICAgICAgIHVpbnQzMl90IGJpdHNbMl07CisgICAgICAgIHVpbnQ4X3QgaW5bNjRdOworfTsKK3R5 cGVkZWYgc3RydWN0IE1ENUNvbnRleHQgTUQ1X0NUWDsKK3ZvaWQgTUQ1SW5pdChzdHJ1Y3QgTUQ1 Q29udGV4dCAqY29udGV4dCk7Cit2b2lkIE1ENVVwZGF0ZShzdHJ1Y3QgTUQ1Q29udGV4dCAqY29u dGV4dCwgdW5zaWduZWQgY2hhciBjb25zdCAqYnVmLCB1bnNpZ25lZCBsZW4pOwordm9pZCBNRDVG aW5hbCh1bnNpZ25lZCBjaGFyIGRpZ2VzdFsxNl0sIHN0cnVjdCBNRDVDb250ZXh0ICpjb250ZXh0 KTsKKworI2VuZGlmCi0tIAoyLjExLjAKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54 ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGlu Zm8veGVuLWRldmVs