Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 30 Sep 2013 06:43:02 +0900
From:      Takuya ASADA <syuu@dokukino.com>
To:        hiren panchasara <hiren.panchasara@gmail.com>
Cc:        "freebsd-net@freebsd.org" <freebsd-net@freebsd.org>, Adrian Chadd <adrian@freebsd.org>
Subject:   Re: Adding Flow Director sysctls to ixgbe(4) (was: netmap: traffic distribution)
Message-ID:  <CALG4x-Xf27oEOA9K5j%2BRRndFe1VbDowpTti8a8qwu1mRaB4BkQ@mail.gmail.com>
In-Reply-To: <CALCpEUHoVJgmYptMp6Q%2BY%2BDgbxgujN8e7TcANUi1De_fnkOZ_w@mail.gmail.com>
References:  <CALCpEUHcpoJoo_gqjyDzosE1bJ_J=o3uqUuyYJA8dWZdjMrNTA@mail.gmail.com> <CAJ-VmompkSY-tU2SysaEf6p1uJPmcMeXKJ6_EZ_DJiYTQXbUzw@mail.gmail.com> <CALG4x-XowXNze82jvFX84X0=d7MRucpJbUeExug9y7XsaZXkSw@mail.gmail.com> <CALCpEUHoVJgmYptMp6Q%2BY%2BDgbxgujN8e7TcANUi1De_fnkOZ_w@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
--047d7b10c96501056a04e78c9de7
Content-Type: text/plain; charset=UTF-8

Hi,

I just implemented device specific ioctl with device specific configuration
tool.
It still doesn't support some important features such as:
 - FDIR enable / disable via sysctl or tunable params
 - ATR enable / disable via sysctl or tunable params
 - IPv6 support on signature filter
 - signature filter list
 - support perfect filter
But, at least it can configure signature filter manually.

Usage is as follows:
Usage: ixgbetool <ifname> [operation]
add_sig_filter <proto> <src_ip> <src_port> <dst_ip> <dst_port> <que_index>
 del_sig_filter <proto> <src_ip> <src_port> <dst_ip> <dst_port>


2013/9/28 hiren panchasara <hiren.panchasara@gmail.com>

>
>
>
> On Fri, Sep 27, 2013 at 1:58 AM, Takuya ASADA <syuu@dokukino.com> wrote:
>
>> 2013/9/27 Adrian Chadd <adrian@freebsd.org>
>>
>>> On 27 September 2013 00:43, hiren panchasara <hiren.panchasara@gmail.com
>>> > wrote:
>>>
>>>
>>>> Takuya,
>>>>
>>>> I see a lot of responses/comments on proposed changes. Was anything
>>>> decided
>>>> at the end of it? As far as I can tell, its still not committed to the
>>>> tree.
>>>>
>>>
>>> I'd rather see an ioctl API for that chipset and then have a separate
>>> tool program it for now.
>>>
>>
>> Ah, like cxgbetool and cxgbe? (it has device specific tool and ioctls)
>> http://svnweb.freebsd.org/base/head/tools/tools/cxgbetool/
>>
>
> Something like this for ixgbe would be nice to start with, imo.
>
> Cheers,
> Hiren
>
>> http://svnweb.freebsd.org/base/head/sys/dev/cxgb/
>>
>>
>>> So, how bout we hack that up? :)
>>>
>>
>>  Sound's interesting ;-)
>> Could you tell me more detail about your idea?
>>
>>
>

--047d7b10c96501056a04e78c9de7
Content-Type: application/octet-stream; name="ixgbetool-v001.diff"
Content-Disposition: attachment; filename="ixgbetool-v001.diff"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_hm6s7nuw0

ZGlmZiAtLWdpdCBhL3N5cy9kZXYvaXhnYmUvaXhnYmUuYyBiL3N5cy9kZXYvaXhnYmUvaXhnYmUu
YwppbmRleCBiNjVkZjcyLi5iZWIzMzY2IDEwMDY0NAotLS0gYS9zeXMvZGV2L2l4Z2JlL2l4Z2Jl
LmMKKysrIGIvc3lzL2Rldi9peGdiZS9peGdiZS5jCkBAIC0zNSw3ICszNSw5IEBACiAKICNpbmNs
dWRlICJvcHRfaW5ldC5oIgogI2luY2x1ZGUgIm9wdF9pbmV0Ni5oIgorIAogI2luY2x1ZGUgIml4
Z2JlLmgiCisjaW5jbHVkZSAiaXhnYmVfaW9jdGwuaCIKIAogLyoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogIFNl
dCB0aGlzIHRvIG9uZSB0byBkaXNwbGF5IGRlYnVnIHN0YXRpc3RpY3MKQEAgLTIwMCw3ICsyMDIs
OSBAQCBzdGF0aWMgdm9pZAlpeGdiZV9oYW5kbGVfbXNmKHZvaWQgKiwgaW50KTsKIHN0YXRpYyB2
b2lkCWl4Z2JlX2hhbmRsZV9tb2Qodm9pZCAqLCBpbnQpOwogCiAjaWZkZWYgSVhHQkVfRkRJUgor
I2lmZGVmIElYR0JFX0ZESVJfQVRSCiBzdGF0aWMgdm9pZAlpeGdiZV9hdHIoc3RydWN0IHR4X3Jp
bmcgKiwgc3RydWN0IG1idWYgKik7CisjZW5kaWYKIHN0YXRpYyB2b2lkCWl4Z2JlX3JlaW5pdF9m
ZGlyKHZvaWQgKiwgaW50KTsKICNlbmRpZgogCkBAIC0yMjQsNiArMjI4LDE5IEBAIHN0YXRpYyBk
cml2ZXJfdCBpeGdiZV9kcml2ZXIgPSB7CiAJIml4IiwgaXhnYmVfbWV0aG9kcywgc2l6ZW9mKHN0
cnVjdCBhZGFwdGVyKSwKIH07CiAKK3N0YXRpYyBkX2lvY3RsX3QgaXhnYmVfZXh0ZW5zaW9uX2lv
Y3RsOworc3RhdGljIGRfb3Blbl90IGl4Z2JlX2V4dGVuc2lvbl9vcGVuOworc3RhdGljIGRfY2xv
c2VfdCBpeGdiZV9leHRlbnNpb25fY2xvc2U7CisKK3N0YXRpYyBzdHJ1Y3QgY2RldnN3IGl4Z2Jl
X2NkZXZzdyA9IHsKKyAgICAgICAuZF92ZXJzaW9uID0gICAgRF9WRVJTSU9OLAorICAgICAgIC5k
X2ZsYWdzID0gICAgICAwLAorICAgICAgIC5kX29wZW4gPSAgICAgICBpeGdiZV9leHRlbnNpb25f
b3BlbiwKKyAgICAgICAuZF9jbG9zZSA9ICAgICAgaXhnYmVfZXh0ZW5zaW9uX2Nsb3NlLAorICAg
ICAgIC5kX2lvY3RsID0gICAgICBpeGdiZV9leHRlbnNpb25faW9jdGwsCisgICAgICAgLmRfbmFt
ZSA9ICAgICAgICJpeGdiZSIsCit9OworCiBkZXZjbGFzc190IGl4Z2JlX2RldmNsYXNzOwogRFJJ
VkVSX01PRFVMRShpeGdiZSwgcGNpLCBpeGdiZV9kcml2ZXIsIGl4Z2JlX2RldmNsYXNzLCAwLCAw
KTsKIApAQCAtMzE3LDYgKzMzNCw3IEBAIHN0YXRpYyBib29sIGl4Z2JlX3JzY19lbmFibGUgPSBG
QUxTRTsKIHN0YXRpYyBpbnQgaXhnYmVfdG90YWxfcG9ydHM7CiAKICNpZmRlZiBJWEdCRV9GRElS
CisjaWZkZWYgSVhHQkVfRkRJUl9BVFIKIC8qCiAqKiBGb3IgRmxvdyBEaXJlY3RvcjogdGhpcyBp
cyB0aGUKICoqIG51bWJlciBvZiBUWCBwYWNrZXRzIHdlIHNhbXBsZQpAQCAtMzI3LDYgKzM0NSw3
IEBAIHN0YXRpYyBpbnQgaXhnYmVfdG90YWxfcG9ydHM7CiAqKiBzZXR0aW5nIHRoaXMgdG8gMC4K
ICovCiBzdGF0aWMgaW50IGF0cl9zYW1wbGVfcmF0ZSA9IDIwOworI2VuZGlmCiAvKiAKICoqIEZs
b3cgRGlyZWN0b3IgYWN0dWFsbHkgJ3N0ZWFscycKICoqIHBhcnQgb2YgdGhlIHBhY2tldCBidWZm
ZXIgYXMgaXRzCkBAIC00MDEsNiArNDIwLDIwIEBAIGl4Z2JlX3Byb2JlKGRldmljZV90IGRldikK
IAlyZXR1cm4gKEVOWElPKTsKIH0KIAorc3RhdGljIGludAoraXhnYmVfbWFrZWRldihzdHJ1Y3Qg
YWRhcHRlciAqYWRhcHRlcikKK3sKKwlhZGFwdGVyLT5jZGV2ID0gbWFrZV9kZXYoJml4Z2JlX2Nk
ZXZzdywgYWRhcHRlci0+aWZwLT5pZl9kdW5pdCwKKwkgICAgVUlEX1JPT1QsIEdJRF9XSEVFTCwg
MDYwMCwgIiVzIiwgaWZfbmFtZShhZGFwdGVyLT5pZnApKTsKKwkKKwlpZiAoYWRhcHRlci0+Y2Rl
diA9PSBOVUxMKQorCQlyZXR1cm4gKEVOT01FTSk7CisKKwlhZGFwdGVyLT5jZGV2LT5zaV9kcnYx
ID0gKHZvaWQgKilhZGFwdGVyOworCQorCXJldHVybiAoMCk7Cit9CisKIC8qKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioK
ICAqICBEZXZpY2UgaW5pdGlhbGl6YXRpb24gcm91dGluZQogICoKQEAgLTYwNCw2ICs2MzcsMTEg
QEAgaXhnYmVfYXR0YWNoKGRldmljZV90IGRldikKICNpZmRlZiBERVZfTkVUTUFQCiAJaXhnYmVf
bmV0bWFwX2F0dGFjaChhZGFwdGVyKTsKICNlbmRpZiAvKiBERVZfTkVUTUFQICovCisKKwllcnJv
ciA9IGl4Z2JlX21ha2VkZXYoYWRhcHRlcik7CisJaWYgKGVycm9yKQorCQlnb3RvIGVycl9sYXRl
OworCiAJSU5JVF9ERUJVR09VVCgiaXhnYmVfYXR0YWNoOiBlbmQiKTsKIAlyZXR1cm4gKDApOwog
ZXJyX2xhdGU6CkBAIC0xODEyLDcgKzE4NTAsNyBAQCByZXRyeToKIAkJcmV0dXJuIChlcnJvcik7
CiAJfQogCi0jaWZkZWYgSVhHQkVfRkRJUgorI2lmZGVmIElYR0JFX0ZESVJfQVRSCiAJLyogRG8g
dGhlIGZsb3cgZGlyZWN0b3IgbWFnaWMgKi8KIAlpZiAoKHR4ci0+YXRyX3NhbXBsZSkgJiYgKCFh
ZGFwdGVyLT5mZGlyX3JlaW5pdCkpIHsKIAkJKyt0eHItPmF0cl9jb3VudDsKQEAgLTMwNTksNyAr
MzA5Nyw3IEBAIGl4Z2JlX3NldHVwX3RyYW5zbWl0X3Jpbmcoc3RydWN0IHR4X3JpbmcgKnR4cikK
IAkJdHhidWYtPmVvcCA9IE5VTEw7CiAgICAgICAgIH0KIAotI2lmZGVmIElYR0JFX0ZESVIKKyNp
ZmRlZiBJWEdCRV9GRElSX0FUUgogCS8qIFNldCB0aGUgcmF0ZSBhdCB3aGljaCB3ZSBzYW1wbGUg
cGFja2V0cyAqLwogCWlmIChhZGFwdGVyLT5ody5tYWMudHlwZSAhPSBpeGdiZV9tYWNfODI1OThF
QikKIAkJdHhyLT5hdHJfc2FtcGxlID0gYXRyX3NhbXBsZV9yYXRlOwpAQCAtMzQ3OSw3ICszNTE3
LDcgQEAgaXhnYmVfdHNvX3NldHVwKHN0cnVjdCB0eF9yaW5nICp0eHIsIHN0cnVjdCBtYnVmICpt
cCwKIAlyZXR1cm4gKDApOwogfQogCi0jaWZkZWYgSVhHQkVfRkRJUgorI2lmZGVmIElYR0JFX0ZE
SVJfQVRSCiAvKgogKiogVGhpcyByb3V0aW5lIHBhcnNlcyBwYWNrZXQgaGVhZGVycyBzbyB0aGF0
IEZsb3cKICoqIERpcmVjdG9yIGNhbiBtYWtlIGEgaGFzaGVkIGZpbHRlciB0YWJsZSBlbnRyeSAK
QEAgLTUyNzAsMTMgKzUzMDgsMzMgQEAgaXhnYmVfdXBkYXRlX3N0YXRzX2NvdW50ZXJzKHN0cnVj
dCBhZGFwdGVyICphZGFwdGVyKQogCWFkYXB0ZXItPnN0YXRzLnhlYyArPSBJWEdCRV9SRUFEX1JF
RyhodywgSVhHQkVfWEVDKTsKIAlhZGFwdGVyLT5zdGF0cy5mY2NyYyArPSBJWEdCRV9SRUFEX1JF
RyhodywgSVhHQkVfRkNDUkMpOwogCWFkYXB0ZXItPnN0YXRzLmZjbGFzdCArPSBJWEdCRV9SRUFE
X1JFRyhodywgSVhHQkVfRkNMQVNUKTsKLQkvKiBPbmx5IHJlYWQgRkNPRSBvbiA4MjU5OSAqLwor
CS8qIE9ubHkgcmVhZCBGQ09FL0ZESVIgb24gODI1OTkgKi8KIAlpZiAoaHctPm1hYy50eXBlICE9
IGl4Z2JlX21hY184MjU5OEVCKSB7CiAJCWFkYXB0ZXItPnN0YXRzLmZjb2VycGRjICs9IElYR0JF
X1JFQURfUkVHKGh3LCBJWEdCRV9GQ09FUlBEQyk7CiAJCWFkYXB0ZXItPnN0YXRzLmZjb2VwcmMg
Kz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0ZDT0VQUkMpOwogCQlhZGFwdGVyLT5zdGF0cy5m
Y29lcHRjICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9GQ09FUFRDKTsKIAkJYWRhcHRlci0+
c3RhdHMuZmNvZWR3cmMgKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0ZDT0VEV1JDKTsKIAkJ
YWRhcHRlci0+c3RhdHMuZmNvZWR3dGMgKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0ZDT0VE
V1RDKTsKKwkJYWRhcHRlci0+c3RhdHMuZmRpcmZyZWVfZnJlZSA9CisJCQkoSVhHQkVfUkVBRF9S
RUcoaHcsIElYR0JFX0ZESVJGUkVFKSAmIElYR0JFX0ZESVJGUkVFX0ZSRUVfTUFTSykKKwkJCT4+
IElYR0JFX0ZESVJGUkVFX0ZSRUVfU0hJRlQ7CisJCWFkYXB0ZXItPnN0YXRzLmZkaXJmcmVlX2Nv
bGwgPQorCQkJKElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9GRElSRlJFRSkgJiBJWEdCRV9GRElS
RlJFRV9DT0xMX01BU0spCisJCQk+PiBJWEdCRV9GRElSRlJFRV9DT0xMX1NISUZUOworCQlhZGFw
dGVyLT5zdGF0cy5mZGlydXN0YXRfYWRkICs9CisJCQkoSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JF
X0ZESVJVU1RBVCkgJiBJWEdCRV9GRElSVVNUQVRfQUREX01BU0spCisJCQk+PiBJWEdCRV9GRElS
VVNUQVRfQUREX1NISUZUOworCQlhZGFwdGVyLT5zdGF0cy5mZGlydXN0YXRfcmVtb3ZlICs9CisJ
CQkoSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0ZESVJVU1RBVCkgJiBJWEdCRV9GRElSVVNUQVRf
UkVNT1ZFX01BU0spCisJCQk+PiBJWEdCRV9GRElSVVNUQVRfUkVNT1ZFX1NISUZUOworCQlhZGFw
dGVyLT5zdGF0cy5mZGlyZnN0YXRfZmFkZCArPQorCQkJKElYR0JFX1JFQURfUkVHKGh3LCBJWEdC
RV9GRElSRlNUQVQpICYgSVhHQkVfRkRJUkZTVEFUX0ZBRERfTUFTSykKKwkJCT4+IElYR0JFX0ZE
SVJGU1RBVF9GQUREX1NISUZUOworCQlhZGFwdGVyLT5zdGF0cy5mZGlyZnN0YXRfZnJlbW92ZSAr
PQorCQkJKElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9GRElSRlNUQVQpICYgSVhHQkVfRkRJUkZT
VEFUX0ZSRU1PVkVfTUFTSykKKwkJCT4+IElYR0JFX0ZESVJGU1RBVF9GUkVNT1ZFX1NISUZUOwor
CQlhZGFwdGVyLT5zdGF0cy5mZGlybWF0Y2ggKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0ZE
SVJNQVRDSCk7CisJCWFkYXB0ZXItPnN0YXRzLmZkaXJtaXNzICs9IElYR0JFX1JFQURfUkVHKGh3
LCBJWEdCRV9GRElSTUlTUyk7CiAJfQogCiAJLyogRmlsbCBvdXQgdGhlIE9TIHN0YXRpc3RpY3Mg
c3RydWN0dXJlICovCkBAIC01NjQyLDYgKzU3MDAsMzIgQEAgaXhnYmVfYWRkX2h3X3N0YXRzKHN0
cnVjdCBhZGFwdGVyICphZGFwdGVyKQogCVNZU0NUTF9BRERfVVFVQUQoY3R4LCBzdGF0X2xpc3Qs
IE9JRF9BVVRPLCAidHhfZnJhbWVzXzEwMjRfMTUyMiIsCiAJCQlDVExGTEFHX1JELCAmc3RhdHMt
PnB0YzE1MjIsCiAJCQkiMTAyNC0xNTIyIGJ5dGUgZnJhbWVzIHRyYW5zbWl0dGVkIik7CisKKwkv
KiBmZGlyIHN0YXRzICovCisJU1lTQ1RMX0FERF9VUVVBRChjdHgsIHN0YXRfbGlzdCwgT0lEX0FV
VE8sICJmZGlyZnJlZV9mcmVlIiwKKwkJQ1RMRkxBR19SRCwgJnN0YXRzLT5mZGlyZnJlZV9mcmVl
LAorCQkiIik7CisJU1lTQ1RMX0FERF9VUVVBRChjdHgsIHN0YXRfbGlzdCwgT0lEX0FVVE8sICJm
ZGlyZnJlZV9jb2xsIiwKKwkJQ1RMRkxBR19SRCwgJnN0YXRzLT5mZGlyZnJlZV9jb2xsLAorCQki
Iik7CisJU1lTQ1RMX0FERF9VUVVBRChjdHgsIHN0YXRfbGlzdCwgT0lEX0FVVE8sICJmZGlydXN0
YXRfYWRkIiwKKwkJQ1RMRkxBR19SRCwgJnN0YXRzLT5mZGlydXN0YXRfYWRkLAorCQkiIik7CisJ
U1lTQ1RMX0FERF9VUVVBRChjdHgsIHN0YXRfbGlzdCwgT0lEX0FVVE8sICJmZGlydXN0YXRfcmVt
b3ZlIiwKKwkJQ1RMRkxBR19SRCwgJnN0YXRzLT5mZGlydXN0YXRfcmVtb3ZlLAorCQkiIik7CisJ
U1lTQ1RMX0FERF9VUVVBRChjdHgsIHN0YXRfbGlzdCwgT0lEX0FVVE8sICJmZGlyZnN0YXRfZmFk
ZCIsCisJCUNUTEZMQUdfUkQsICZzdGF0cy0+ZmRpcmZzdGF0X2ZhZGQsCisJCSIiKTsKKwlTWVND
VExfQUREX1VRVUFEKGN0eCwgc3RhdF9saXN0LCBPSURfQVVUTywgImZkaXJmc3RhdF9mcmVtb3Zl
IiwKKwkJQ1RMRkxBR19SRCwgJnN0YXRzLT5mZGlyZnN0YXRfZnJlbW92ZSwKKwkJIiIpOworCVNZ
U0NUTF9BRERfVVFVQUQoY3R4LCBzdGF0X2xpc3QsIE9JRF9BVVRPLCAiZmRpcm1hdGNoIiwKKwkJ
Q1RMRkxBR19SRCwgJnN0YXRzLT5mZGlybWF0Y2gsCisJCSIiKTsKKwlTWVNDVExfQUREX1VRVUFE
KGN0eCwgc3RhdF9saXN0LCBPSURfQVVUTywgImZkaXJtaXNzIiwKKwkJQ1RMRkxBR19SRCwgJnN0
YXRzLT5mZGlybWlzcywKKwkJIiIpOwogfQogCiAvKgpAQCAtNTgwMywzICs1ODg3LDgzIEBAIGl4
Z2JlX2Rpc2FibGVfcnhfZHJvcChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKICAgICAgICAgCUlY
R0JFX1dSSVRFX1JFRyhodywgSVhHQkVfU1JSQ1RMKGkpLCBzcnJjdGwpOwogCX0KIH0KKworc3Rh
dGljIGludAoraXhnYmVfZXh0ZW5zaW9uX29wZW4oc3RydWN0IGNkZXYgKmRldiwgaW50IGZsYWdz
LCBpbnQgZm1wLCBzdHJ1Y3QgdGhyZWFkICp0ZCkKK3sKKyAgICAgICByZXR1cm4gKDApOworfQor
CitzdGF0aWMgaW50CitpeGdiZV9leHRlbnNpb25fY2xvc2Uoc3RydWN0IGNkZXYgKmRldiwgaW50
IGZsYWdzLCBpbnQgZm10LCBzdHJ1Y3QgdGhyZWFkICp0ZCkKK3sKKyAgICAgICByZXR1cm4gKDAp
OworfQorCitzdGF0aWMgaW50CitpeGdiZV9leHRlbnNpb25faW9jdGwoc3RydWN0IGNkZXYgKmRl
diwgdW5zaWduZWQgbG9uZyBjbWQsIGNhZGRyX3QgZGF0YSwKKyAgICBpbnQgZmZsYWcsIHN0cnVj
dCB0aHJlYWQgKnRkKQoreworCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gKHN0cnVjdCBhZGFw
dGVyICopZGV2LT5zaV9kcnYxOworCisJaWYgKHByaXZfY2hlY2sodGQsIFBSSVZfRFJJVkVSKSkg
eworCQlyZXR1cm4gKEVQRVJNKTsKKwl9CisJCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIElYR0JF
X0FERF9TSUdGSUxURVI6IHsKKwkJc3RydWN0IGl4X2ZpbHRlciAqZmlsdGVyID0gKHN0cnVjdCBp
eF9maWx0ZXIgKilkYXRhOworCQl1bmlvbiBpeGdiZV9hdHJfaGFzaF9kd29yZCBpbnB1dCA9IHsu
ZHdvcmQgPSAwfTsKKwkJdW5pb24gaXhnYmVfYXRyX2hhc2hfZHdvcmQgY29tbW9uID0gey5kd29y
ZCA9IDB9OworCisJCXN3aXRjaCAoZmlsdGVyLT5wcm90bykgeworCQljYXNlIElYR0JFX0ZJTFRF
Ul9QUk9UT19UQ1BWNDoKKwkJCWlucHV0LmZvcm1hdHRlZC5mbG93X3R5cGUgXj0gSVhHQkVfQVRS
X0ZMT1dfVFlQRV9UQ1BWNDsKKwkJCWJyZWFrOworCQljYXNlIElYR0JFX0ZJTFRFUl9QUk9UT19V
RFBWNDoKKwkJCWlucHV0LmZvcm1hdHRlZC5mbG93X3R5cGUgXj0gSVhHQkVfQVRSX0ZMT1dfVFlQ
RV9VRFBWNDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIChFSU5WQUwpOworCQl9
CisJCWNvbW1vbi5wb3J0LnNyYyBePSBodG9ucyhmaWx0ZXItPnNyY19wb3J0KTsKKwkJY29tbW9u
LnBvcnQuZHN0IF49IGh0b25zKGZpbHRlci0+ZHN0X3BvcnQpOworCQljb21tb24uZmxleF9ieXRl
cyBePSBodG9ucyhFVEhFUlRZUEVfSVApOworCQljb21tb24uaXAgXj0gZmlsdGVyLT5zcmNfaXAu
c19hZGRyIF4gZmlsdGVyLT5kc3RfaXAuc19hZGRyOworCisJCWl4Z2JlX2ZkaXJfYWRkX3NpZ25h
dHVyZV9maWx0ZXJfODI1OTkoJmFkYXB0ZXItPmh3LAorCQkJaW5wdXQsIGNvbW1vbiwgZmlsdGVy
LT5xdWVfaW5kZXgpOworCQlicmVhazsKKwl9CisJY2FzZSBJWEdCRV9DTFJfU0lHRklMVEVSOiB7
CisJCXN0cnVjdCBpeF9maWx0ZXIgKmZpbHRlciA9IChzdHJ1Y3QgaXhfZmlsdGVyICopZGF0YTsK
KwkJdW5pb24gaXhnYmVfYXRyX2hhc2hfZHdvcmQgaW5wdXQgPSB7LmR3b3JkID0gMH07CisJCXVu
aW9uIGl4Z2JlX2F0cl9oYXNoX2R3b3JkIGNvbW1vbiA9IHsuZHdvcmQgPSAwfTsKKworCQlzd2l0
Y2ggKGZpbHRlci0+cHJvdG8pIHsKKwkJY2FzZSBJWEdCRV9GSUxURVJfUFJPVE9fVENQVjQ6CisJ
CQlpbnB1dC5mb3JtYXR0ZWQuZmxvd190eXBlIF49IElYR0JFX0FUUl9GTE9XX1RZUEVfVENQVjQ7
CisJCQlicmVhazsKKwkJY2FzZSBJWEdCRV9GSUxURVJfUFJPVE9fVURQVjQ6CisJCQlpbnB1dC5m
b3JtYXR0ZWQuZmxvd190eXBlIF49IElYR0JFX0FUUl9GTE9XX1RZUEVfVURQVjQ7CisJCQlicmVh
azsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAoRUlOVkFMKTsKKwkJfQorCQljb21tb24ucG9ydC5z
cmMgXj0gaHRvbnMoZmlsdGVyLT5zcmNfcG9ydCk7CisJCWNvbW1vbi5wb3J0LmRzdCBePSBodG9u
cyhmaWx0ZXItPmRzdF9wb3J0KTsKKwkJY29tbW9uLmZsZXhfYnl0ZXMgXj0gaHRvbnMoRVRIRVJU
WVBFX0lQKTsKKwkJY29tbW9uLmlwIF49IGZpbHRlci0+c3JjX2lwLnNfYWRkciBeIGZpbHRlci0+
ZHN0X2lwLnNfYWRkcjsKKworCQlpeGdiZV9mZGlyX2VyYXNlX3NpZ25hdHVyZV9maWx0ZXJfODI1
OTkoJmFkYXB0ZXItPmh3LAorCQkJaW5wdXQsIGNvbW1vbik7CisJCWJyZWFrOworCX0KKwlkZWZh
dWx0OgorCQlyZXR1cm4gKEVPUE5PVFNVUFApOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gKDAp
OworfQorCmRpZmYgLS1naXQgYS9zeXMvZGV2L2l4Z2JlL2l4Z2JlLmggYi9zeXMvZGV2L2l4Z2Jl
L2l4Z2JlLmgKaW5kZXggNzdiNzJlZC4uNDljNDFmMiAxMDA2NDQKLS0tIGEvc3lzL2Rldi9peGdi
ZS9peGdiZS5oCisrKyBiL3N5cy9kZXYvaXhnYmUvaXhnYmUuaApAQCAtODgsNiArODgsOCBAQAog
I2luY2x1ZGUgPHN5cy9wY3B1Lmg+CiAjaW5jbHVkZSA8c3lzL3NtcC5oPgogI2luY2x1ZGUgPG1h
Y2hpbmUvc21wLmg+CisjaW5jbHVkZSA8c3lzL2NvbmYuaD4KKyNpbmNsdWRlIDxzeXMvcHJpdi5o
PgogCiAjaW5jbHVkZSAiaXhnYmVfYXBpLmgiCiAKQEAgLTQ2OCw2ICs0NzAsOCBAQCBzdHJ1Y3Qg
YWRhcHRlciB7CiAJdW5zaWduZWQgbG9uZwkJbGlua19pcnE7CiAKIAlzdHJ1Y3QgaXhnYmVfaHdf
c3RhdHMgCXN0YXRzOworCisJc3RydWN0IGNkZXYJCSpjZGV2OwogfTsKIAogCmRpZmYgLS1naXQg
YS9zeXMvZGV2L2l4Z2JlL2l4Z2JlXzgyNTk5LmMgYi9zeXMvZGV2L2l4Z2JlL2l4Z2JlXzgyNTk5
LmMKaW5kZXggM2NjOGNkNy4uNzJlYTVlYSAxMDA2NDQKLS0tIGEvc3lzL2Rldi9peGdiZS9peGdi
ZV84MjU5OS5jCisrKyBiL3N5cy9kZXYvaXhnYmUvaXhnYmVfODI1OTkuYwpAQCAtMTQ4Miw3ICsx
NDgyLDggQEAgczMyIGl4Z2JlX2luaXRfZmRpcl9zaWduYXR1cmVfODI1OTkoc3RydWN0IGl4Z2Jl
X2h3ICpodywgdTMyIGZkaXJjdHJsKQogCSAqICBTZXQgdGhlIG1heGltdW0gbGVuZ3RoIHBlciBo
YXNoIGJ1Y2tldCB0byAweEEgZmlsdGVycwogCSAqICBTZW5kIGludGVycnVwdCB3aGVuIDY0IGZp
bHRlcnMgYXJlIGxlZnQKIAkgKi8KLQlmZGlyY3RybCB8PSAoMHg2IDw8IElYR0JFX0ZESVJDVFJM
X0ZMRVhfU0hJRlQpIHwKKwlmZGlyY3RybCB8PSBJWEdCRV9GRElSQ1RSTF9SRVBPUlRfU1RBVFVT
IHwKKyAJCSAgICAoMHg2IDw8IElYR0JFX0ZESVJDVFJMX0ZMRVhfU0hJRlQpIHwKIAkJICAgICgw
eEEgPDwgSVhHQkVfRkRJUkNUUkxfTUFYX0xFTkdUSF9TSElGVCkgfAogCQkgICAgKDQgPDwgSVhH
QkVfRkRJUkNUUkxfRlVMTF9USFJFU0hfU0hJRlQpOwogCkBAIC0xNjY3LDYgKzE2NjgsNTYgQEAg
czMyIGl4Z2JlX2ZkaXJfYWRkX3NpZ25hdHVyZV9maWx0ZXJfODI1OTkoc3RydWN0IGl4Z2JlX2h3
ICpodywKIAlyZXR1cm4gSVhHQkVfU1VDQ0VTUzsKIH0KIAorLyoqCisgKiAgaXhnYmVfZmRpcl9l
cmFzZV9zaWduYXR1cmVfZmlsdGVyXzgyNTk5IC0gQWRkcyBhIHNpZ25hdHVyZSBoYXNoIGZpbHRl
cgorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqICBAc3RyZWFtOiBp
bnB1dCBiaXRzdHJlYW0KKyAqICBAcXVldWU6IHF1ZXVlIGluZGV4IHRvIGRpcmVjdCB0cmFmZmlj
IHRvCisgKiovCitzMzIgaXhnYmVfZmRpcl9lcmFzZV9zaWduYXR1cmVfZmlsdGVyXzgyNTk5KHN0
cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1bmlvbiBpeGdiZV9hdHJfaGFzaF9kd29yZCBpbnB1dCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuaW9uIGl4Z2JlX2F0cl9oYXNoX2R3b3JkIGNvbW1v
bikKK3sKKwl1NjQgIGZkaXJoYXNoY21kOworCXUzMiAgZmRpcmNtZDsKKworCURFQlVHRlVOQygi
aXhnYmVfZmRpcl9jbGVhcl9zaWduYXR1cmVfZmlsdGVyXzgyNTk5Iik7CisKKwkvKgorCSAqIEdl
dCB0aGUgZmxvd190eXBlIGluIG9yZGVyIHRvIHByb2dyYW0gRkRJUkNNRCBwcm9wZXJseQorCSAq
IGxvd2VzdCAyIGJpdHMgYXJlIEZESVJDTUQuTDRUWVBFLCB0aGlyZCBsb3dlc3QgYml0IGlzIEZE
SVJDTUQuSVBWNgorCSAqLworCXN3aXRjaCAoaW5wdXQuZm9ybWF0dGVkLmZsb3dfdHlwZSkgewor
CWNhc2UgSVhHQkVfQVRSX0ZMT1dfVFlQRV9UQ1BWNDoKKwljYXNlIElYR0JFX0FUUl9GTE9XX1RZ
UEVfVURQVjQ6CisJY2FzZSBJWEdCRV9BVFJfRkxPV19UWVBFX1NDVFBWNDoKKwljYXNlIElYR0JF
X0FUUl9GTE9XX1RZUEVfVENQVjY6CisJY2FzZSBJWEdCRV9BVFJfRkxPV19UWVBFX1VEUFY2Ogor
CWNhc2UgSVhHQkVfQVRSX0ZMT1dfVFlQRV9TQ1RQVjY6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJ
CURFQlVHT1VUKCIgRXJyb3Igb24gZmxvdyB0eXBlIGlucHV0XG4iKTsKKwkJcmV0dXJuIElYR0JF
X0VSUl9DT05GSUc7CisJfQorCisJLyogY29uZmlndXJlIEZESVJDTUQgcmVnaXN0ZXIgKi8KKwlm
ZGlyY21kID0gSVhHQkVfRkRJUkNNRF9DTURfUkVNT1ZFX0ZMT1cgfCAKKwkgICAgICAgICAgSVhH
QkVfRkRJUkNNRF9MQVNUIHwgSVhHQkVfRkRJUkNNRF9RVUVVRV9FTjsKKwlmZGlyY21kIHw9IGlu
cHV0LmZvcm1hdHRlZC5mbG93X3R5cGUgPDwgSVhHQkVfRkRJUkNNRF9GTE9XX1RZUEVfU0hJRlQ7
CisKKwkvKgorCSAqIFRoZSBsb3dlciAzMi1iaXRzIG9mIGZkaXJoYXNoY21kIGlzIGZvciBGRElS
SEFTSCwgdGhlIHVwcGVyIDMyLWJpdHMKKwkgKiBpcyBmb3IgRkRJUkNNRC4gIFRoZW4gZG8gYSA2
NC1iaXQgcmVnaXN0ZXIgd3JpdGUgZnJvbSBGRElSSEFTSC4KKwkgKi8KKwlmZGlyaGFzaGNtZCA9
ICh1NjQpZmRpcmNtZCA8PCAzMjsKKwlmZGlyaGFzaGNtZCB8PSBpeGdiZV9hdHJfY29tcHV0ZV9z
aWdfaGFzaF84MjU5OShpbnB1dCwgY29tbW9uKTsKKwlJWEdCRV9XUklURV9SRUc2NChodywgSVhH
QkVfRkRJUkhBU0gsIGZkaXJoYXNoY21kKTsKKworCURFQlVHT1VUMSgiVHggaGFzaD0leFxuIiwg
KHUzMilmZGlyaGFzaGNtZCk7CisKKwlyZXR1cm4gSVhHQkVfU1VDQ0VTUzsKK30KKwogI2RlZmlu
ZSBJWEdCRV9DT01QVVRFX0JLVF9IQVNIX0lURVJBVElPTihfbikgXAogZG8geyBcCiAJdTMyIG4g
PSAoX24pOyBcCmRpZmYgLS1naXQgYS9zeXMvZGV2L2l4Z2JlL2l4Z2JlX2FwaS5oIGIvc3lzL2Rl
di9peGdiZS9peGdiZV9hcGkuaAppbmRleCA5MTAyM2FlLi43N2M2NDI3IDEwMDY0NAotLS0gYS9z
eXMvZGV2L2l4Z2JlL2l4Z2JlX2FwaS5oCisrKyBiL3N5cy9kZXYvaXhnYmUvaXhnYmVfYXBpLmgK
QEAgLTE0NCw2ICsxNDQsOSBAQCBzMzIgaXhnYmVfZmRpcl9hZGRfc2lnbmF0dXJlX2ZpbHRlcl84
MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LAogCQkJCQkgIHVuaW9uIGl4Z2JlX2F0cl9oYXNoX2R3
b3JkIGlucHV0LAogCQkJCQkgIHVuaW9uIGl4Z2JlX2F0cl9oYXNoX2R3b3JkIGNvbW1vbiwKIAkJ
CQkJICB1OCBxdWV1ZSk7CitzMzIgaXhnYmVfZmRpcl9lcmFzZV9zaWduYXR1cmVfZmlsdGVyXzgy
NTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bmlvbiBpeGdiZV9hdHJfaGFzaF9kd29yZCBpbnB1dCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaW9uIGl4Z2JlX2F0cl9oYXNoX2R3b3Jk
IGNvbW1vbik7CiBzMzIgaXhnYmVfZmRpcl9zZXRfaW5wdXRfbWFza184MjU5OShzdHJ1Y3QgaXhn
YmVfaHcgKmh3LAogCQkJCSAgICB1bmlvbiBpeGdiZV9hdHJfaW5wdXQgKmlucHV0X21hc2spOwog
czMyIGl4Z2JlX2ZkaXJfd3JpdGVfcGVyZmVjdF9maWx0ZXJfODI1OTkoc3RydWN0IGl4Z2JlX2h3
ICpodywKZGlmZiAtLWdpdCBhL3N5cy9kZXYvaXhnYmUvaXhnYmVfaW9jdGwuaCBiL3N5cy9kZXYv
aXhnYmUvaXhnYmVfaW9jdGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5m
NzExM2QzCi0tLSAvZGV2L251bGwKKysrIGIvc3lzL2Rldi9peGdiZS9peGdiZV9pb2N0bC5oCkBA
IC0wLDAgKzEsNTggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitDb3B5cmlnaHQgKGMpIDIwMTMg
VGFrdXlhIEFTQURBCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUgbWV0OgorCisgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKyAyLiBOZWl0aGVyIHRoZSBuYW1l
IG9mIHRoZSBDaGVsc2lvIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICAgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKK0FORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKK0xJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKK0NPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CitTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKK0lOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCitDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCiskRnJlZUJTRCQKKwor
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fSVhHQkVJT0NUTF9IX18KKyNkZWZpbmUg
X19JWEdCRUlPQ1RMX0hfXworCitlbnVtIHsKKwlJWF9BRERfU0lHRklMVEVSID0gMHgwLAorCUlY
X0NMUl9TSUdGSUxURVIKK307CisKK2VudW0geworCUlYR0JFX0ZJTFRFUl9QUk9UT19UQ1BWNCwK
KwlJWEdCRV9GSUxURVJfUFJPVE9fVURQVjQKK307CisKK3N0cnVjdCBpeF9maWx0ZXIgeworCWlu
dCBwcm90bzsKKwlzdHJ1Y3QgaW5fYWRkciBzcmNfaXA7CisJaW50IHNyY19wb3J0OworCXN0cnVj
dCBpbl9hZGRyIGRzdF9pcDsKKwlpbnQgZHN0X3BvcnQ7CisJaW50IHF1ZV9pbmRleDsKK307CisK
KyNkZWZpbmUgSVhHQkVfQUREX1NJR0ZJTFRFUglfSU9XKCdpJywgSVhfQUREX1NJR0ZJTFRFUiwg
c3RydWN0IGl4X2ZpbHRlcikKKyNkZWZpbmUgSVhHQkVfQ0xSX1NJR0ZJTFRFUglfSU9XKCdpJywg
SVhfQ0xSX1NJR0ZJTFRFUiwgc3RydWN0IGl4X2ZpbHRlcikKKworI2VuZGlmCisKZGlmZiAtLWdp
dCBhL3N5cy9kZXYvaXhnYmUvaXhnYmVfdHlwZS5oIGIvc3lzL2Rldi9peGdiZS9peGdiZV90eXBl
LmgKaW5kZXggNDlmNWJjMC4uYzVmMjliYiAxMDA2NDQKLS0tIGEvc3lzL2Rldi9peGdiZS9peGdi
ZV90eXBlLmgKKysrIGIvc3lzL2Rldi9peGdiZS9peGdiZV90eXBlLmgKQEAgLTI5OTcsNiArMjk5
Nyw4IEBAIHN0cnVjdCBpeGdiZV9od19zdGF0cyB7CiAJdTY0IHFidGNbMTZdOwogCXU2NCBxcHJk
Y1sxNl07CiAJdTY0IHB4b24yb2ZmY1s4XTsKKwl1NjQgZmRpcmZyZWVfZnJlZTsKKwl1NjQgZmRp
cmZyZWVfY29sbDsKIAl1NjQgZmRpcnVzdGF0X2FkZDsKIAl1NjQgZmRpcnVzdGF0X3JlbW92ZTsK
IAl1NjQgZmRpcmZzdGF0X2ZhZGQ7CmRpZmYgLS1naXQgYS90b29scy90b29scy9peGdiZXRvb2wv
TWFrZWZpbGUgYi90b29scy90b29scy9peGdiZXRvb2wvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uMDY5NWU5MwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Rv
b2xzL2l4Z2JldG9vbC9NYWtlZmlsZQpAQCAtMCwwICsxLDkgQEAKKyMgJEZyZWVCU0QkCisKK1BS
T0c9CWl4Z2JldG9vbAorU1JDUz0JaXhnYmV0b29sLmMKK05PX01BTj0KK0NGTEFHUys9IC1JJHsu
Q1VSRElSfS8uLi8uLi8uLi9zeXMvZGV2L2l4Z2JlIC1JLgorQklORElSPz0gL3Vzci9zYmluCisK
Ky5pbmNsdWRlIDxic2QucHJvZy5taz4KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rvb2xzL2l4Z2JldG9v
bC9peGdiZXRvb2wuYyBiL3Rvb2xzL3Rvb2xzL2l4Z2JldG9vbC9peGdiZXRvb2wuYwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTkxMWE1Ci0tLSAvZGV2L251bGwKKysrIGIv
dG9vbHMvdG9vbHMvaXhnYmV0b29sL2l4Z2JldG9vbC5jCkBAIC0wLDAgKzEsMTc0IEBACisvKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioKKworQ29weXJpZ2h0IChjKSAyMDEzLCBUYWt1eWEgQVNBREEuCitBbGwg
cmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisgMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQgbm90aWNlLAorICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisKKyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorCisgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgQ2hlbHNpbyBDb3Jwb3JhdGlv
biBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgICAgdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UyAiQVMgSVMiCitBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFCitMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCitDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCitJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKK0FSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCitQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSA8c3lzL2Nk
ZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2lu
Y2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4K
KyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDx1bmlz
dGQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Cisj
aW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2luY2x1ZGUg
PHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgPGl4Z2JlX2lvY3RsLmg+CisKK3N0YXRpYyB2b2lkCit1
c2FnZSh2b2lkKQoreworCWZwcmludGYoc3RkZXJyLCAiVXNhZ2U6IGl4Z2JldG9vbCA8aWZuYW1l
PiBbb3BlcmF0aW9uXVxuIik7CisJZnByaW50ZihzdGRlcnIsICJcdGFkZF9zaWdfZmlsdGVyIDxw
cm90bz4gPHNyY19pcD4gPHNyY19wb3J0PiA8ZHN0X2lwPiA8ZHN0X3BvcnQ+IDxxdWVfaW5kZXg+
XG4iKTsKKwlmcHJpbnRmKHN0ZGVyciwgIlx0ZGVsX3NpZ19maWx0ZXIgPHByb3RvPiA8c3JjX2lw
PiA8c3JjX3BvcnQ+IDxkc3RfaXA+IDxkc3RfcG9ydD5cbiIpOworfQorCitzdGF0aWMgaW50Citk
b2l0KGNvbnN0IGNoYXIgKmlmZl9uYW1lLCB1bnNpZ25lZCBsb25nIGNtZCwgdm9pZCAqZGF0YSkK
K3sKKwlpbnQgZmQgPSAwOworCWludCBlcnI7CisJY2hhciBidWZbNjRdOworCisJc25wcmludGYo
YnVmLCA2NCwgIi9kZXYvJXMiLCBpZmZfbmFtZSk7CisJaWYgKChmZCA9IG9wZW4oYnVmLCBPX1JE
V1IpKSA8IDApCisJCXJldHVybiAtMTsKKwkKKwllcnIgPSBpb2N0bChmZCwgY21kLCBkYXRhKSA8
IDAgPyAtMSA6IDA7CisJY2xvc2UoZmQpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQg
CithZGRfc2lnX2ZpbHRlcihpbnQgYXJnYywgY2hhciAqYXJndltdLCBjaGFyICppZm5hbWUpCit7
CisJc3RydWN0IGl4X2ZpbHRlciBmaWx0ZXI7CisJaW50IGVycm9yOworCisJaWYgKGFyZ2MgIT0g
OSkgCisJCXJldHVybiAtMTsKKworCWlmICghc3RyY21wKGFyZ3ZbM10sICJ0Y3B2NCIpKQorCQlm
aWx0ZXIucHJvdG8gPSBJWEdCRV9GSUxURVJfUFJPVE9fVENQVjQ7CisJZWxzZSBpZiAoIXN0cmNt
cChhcmd2WzNdLCAidWRwdjQiKSkKKwkJZmlsdGVyLnByb3RvID0gSVhHQkVfRklMVEVSX1BST1RP
X1VEUFY0OworCWVsc2UKKwkJcmV0dXJuIC0xOworCWVycm9yID0gaW5ldF9hdG9uKGFyZ3ZbNF0s
ICZmaWx0ZXIuc3JjX2lwKTsKKwlpZiAoZXJyb3IgIT0gMSkKKwkJcmV0dXJuIGVycm9yOworCWVy
cm5vID0gMDsKKwlmaWx0ZXIuc3JjX3BvcnQgPSBzdHJ0b2woYXJndls1XSwgTlVMTCwgMCk7CisJ
aWYgKGVycm5vKQorCQlyZXR1cm4gZXJybm87CisJZXJyb3IgPSBpbmV0X2F0b24oYXJndls2XSwg
JmZpbHRlci5kc3RfaXApOworCWlmIChlcnJvciAhPSAxKQorCQlyZXR1cm4gZXJyb3I7CisJZXJy
bm8gPSAwOworCWZpbHRlci5kc3RfcG9ydCA9IHN0cnRvbChhcmd2WzddLCBOVUxMLCAwKTsKKwlp
ZiAoZXJybm8pCisJCXJldHVybiBlcnJubzsKKwllcnJubyA9IDA7CisJZmlsdGVyLnF1ZV9pbmRl
eCA9IHN0cnRvbChhcmd2WzhdLCBOVUxMLCAwKTsKKwlpZiAoZXJybm8pCisJCXJldHVybiBlcnJu
bzsKKworCWVycm9yID0gZG9pdChpZm5hbWUsIElYR0JFX0FERF9TSUdGSUxURVIsICh2b2lkICop
JmZpbHRlcik7CisJaWYgKGVycm9yKQorCQlwZXJyb3IoImlvY3RsIik7CisJcmV0dXJuIDA7Cit9
CisKK3N0YXRpYyBpbnQgCitkZWxfc2lnX2ZpbHRlcihpbnQgYXJnYywgY2hhciAqYXJndltdLCBj
aGFyICppZm5hbWUpCit7CisJc3RydWN0IGl4X2ZpbHRlciBmaWx0ZXI7CisJaW50IGVycm9yOwor
CisJaWYgKGFyZ2MgIT0gOCkgCisJCXJldHVybiAtMTsKKworCWlmICghc3RyY21wKGFyZ3ZbM10s
ICJ0Y3B2NCIpKQorCQlmaWx0ZXIucHJvdG8gPSBJWEdCRV9GSUxURVJfUFJPVE9fVENQVjQ7CisJ
ZWxzZSBpZiAoIXN0cmNtcChhcmd2WzNdLCAidWRwdjQiKSkKKwkJZmlsdGVyLnByb3RvID0gSVhH
QkVfRklMVEVSX1BST1RPX1VEUFY0OworCWVsc2UKKwkJcmV0dXJuIC0xOworCWVycm9yID0gaW5l
dF9hdG9uKGFyZ3ZbNF0sICZmaWx0ZXIuc3JjX2lwKTsKKwlpZiAoZXJyb3IgIT0gMSkKKwkJcmV0
dXJuIGVycm9yOworCWVycm5vID0gMDsKKwlmaWx0ZXIuc3JjX3BvcnQgPSBzdHJ0b2woYXJndls1
XSwgTlVMTCwgMCk7CisJaWYgKGVycm5vKQorCQlyZXR1cm4gZXJybm87CisJZXJyb3IgPSBpbmV0
X2F0b24oYXJndls2XSwgJmZpbHRlci5kc3RfaXApOworCWlmIChlcnJvciAhPSAxKQorCQlyZXR1
cm4gZXJyb3I7CisJZXJybm8gPSAwOworCWZpbHRlci5kc3RfcG9ydCA9IHN0cnRvbChhcmd2Wzdd
LCBOVUxMLCAwKTsKKwlpZiAoZXJybm8pCisJCXJldHVybiBlcnJubzsKKworCWVycm9yID0gZG9p
dChpZm5hbWUsIElYR0JFX0NMUl9TSUdGSUxURVIsICh2b2lkICopJmZpbHRlcik7CisJaWYgKGVy
cm9yKQorCQlwZXJyb3IoImlvY3RsIik7CisJcmV0dXJuIDA7Cit9CisKK2ludCAKK21haW4oaW50
IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlpbnQgcmV0OworCWNoYXIgKmlmbmFtZTsKKworCWlm
IChhcmdjIDwgMykgeworCQl1c2FnZSgpOworCQlleGl0KDEpOworCX0KKwlpZm5hbWUgPSBhcmd2
WzFdOworCWlmICghc3RyY21wKGFyZ3ZbMl0sICJhZGRfc2lnX2ZpbHRlciIpKQorCQlyZXQgPSBh
ZGRfc2lnX2ZpbHRlcihhcmdjLCBhcmd2LCBpZm5hbWUpOworCWVsc2UgaWYgKCFzdHJjbXAoYXJn
dlsyXSwgImRlbF9zaWdfZmlsdGVyIikpCisJCXJldCA9IGRlbF9zaWdfZmlsdGVyKGFyZ2MsIGFy
Z3YsIGlmbmFtZSk7CisJZWxzZSAKKwkJcmV0ID0gLTE7CisKKwlpZiAocmV0KQorCQl1c2FnZSgp
OworCisJcmV0dXJuIChyZXQpOworfQorCg==
--047d7b10c96501056a04e78c9de7--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CALG4x-Xf27oEOA9K5j%2BRRndFe1VbDowpTti8a8qwu1mRaB4BkQ>