bin/142384: [patch] sync fsck_msdosfs(8) with OpenBSD

Pedro F. Giffuni giffunip at tutopia.com
Fri Jan 15 21:40:03 UTC 2010


The following reply was made to PR bin/142384; it has been noted by GNATS.

From: "Pedro F. Giffuni" <giffunip at tutopia.com>
To: bug-followup at FreeBSD.org
Cc:  
Subject: Re: bin/142384: [patch] sync fsck_msdosfs(8) with OpenBSD
Date: Fri, 15 Jan 2010 13:35:59 -0800 (PST)

 --0-1059020741-1263591359=:76287
 Content-Type: text/plain; charset=us-ascii
 
 In addition to the NetBSD fixes, this patch renames the fields in
 the bootblock struct in preparation for a header unification patch
 based on the msdosfs headers.
 
 At least I am sure we are not ruining filesystems:
 
 mogwai# fsck -t msdosfs /dev/da0s1
 ** /dev/da0s1                     
 ** Phase 1 - Read and Compare FATs
 ** Phase 2 - Check Cluster Chains 
 ** Phase 3 - Checking Directories 
 ** Phase 4 - Checking for Lost Files
 2310 files, 2306176 free (576544 clusters)
 
 
 
       
 --0-1059020741-1263591359=:76287
 Content-Type: application/octet-stream; name=patch-fsck_msdosfs
 Content-Transfer-Encoding: base64
 Content-Disposition: attachment; filename=patch-fsck_msdosfs
 
 ZGlmZiAtcnUgZnNja19tc2Rvc2ZzLm9yaWcvYm9vdC5jIGZzY2tfbXNkb3Nm
 cy9ib290LmMKLS0tIGZzY2tfbXNkb3Nmcy5vcmlnL2Jvb3QuYwkyMDEwLTAx
 LTA2IDExOjA3OjI0LjAwMDAwMDAwMCArMDAwMAorKysgZnNja19tc2Rvc2Zz
 L2Jvb3QuYwkyMDEwLTAxLTE1IDE2OjIyOjA3LjAwMDAwMDAwMCArMDAwMApA
 QCAtMTAsMTMgKzEwLDYgQEAKICAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
 aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
 CiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
 aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAgKiAgICBkb2N1bWVu
 dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
 aGUgZGlzdHJpYnV0aW9uLgotICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVy
 aWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3
 YXJlCi0gKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3ds
 ZWRnZW1lbnQ6Ci0gKglUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUg
 ZGV2ZWxvcGVkIGJ5IE1hcnRpbiBIdXNlbWFubgotICoJYW5kIFdvbGZnYW5n
 IFNvbGZyYW5rLgotICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5p
 dmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAq
 ICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
 cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBz
 cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAgKgogICogVEhJ
 UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SUyBgYEFTIElT
 JycgQU5EIEFOWSBFWFBSRVNTIE9SCiAgKiBJTVBMSUVEIFdBUlJBTlRJRVMs
 IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
 QVJSQU5USUVTCkBAIC00MCw3ICszMyw2IEBACiAKICNpbmNsdWRlIDxzdGRs
 aWIuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxjdHlwZS5o
 PgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAK
 QEAgLTQ4LDE2ICs0MCwxNSBAQAogI2luY2x1ZGUgImZzdXRpbC5oIgogCiBp
 bnQKLXJlYWRib290KGRvc2ZzLCBib290KQotCWludCBkb3NmczsKLQlzdHJ1
 Y3QgYm9vdGJsb2NrICpib290OworcmVhZGJvb3QoaW50IGRvc2ZzLCBzdHJ1
 Y3QgYm9vdGJsb2NrICpib290KQogewogCXVfY2hhciBibG9ja1tET1NCT09U
 QkxPQ0tTSVpFXTsKIAl1X2NoYXIgZnNpbmZvWzIgKiBET1NCT09UQkxPQ0tT
 SVpFXTsKIAl1X2NoYXIgYmFja3VwW0RPU0JPT1RCTE9DS1NJWkVdOwogCWlu
 dCByZXQgPSBGU09LOworCWludCBpOwogCQotCWlmIChyZWFkKGRvc2ZzLCBi
 bG9jaywgc2l6ZW9mIGJsb2NrKSA8IHNpemVvZiBibG9jaykgeworCWlmICgo
 c2l6ZV90KXJlYWQoZG9zZnMsIGJsb2NrLCBzaXplb2YgYmxvY2spICE9IHNp
 emVvZiBibG9jaykgewogCQlwZXJyb3IoImNvdWxkIG5vdCByZWFkIGJvb3Qg
 YmxvY2siKTsKIAkJcmV0dXJuIEZTRkFUQUw7CiAJfQpAQCAtNzEsMjIgKzYy
 LDIyIEBACiAJYm9vdC0+VmFsaWRGYXQgPSAtMTsKIAogCS8qIGRlY29kZSBi
 aW9zIHBhcmFtZXRlciBibG9jayAqLwotCWJvb3QtPkJ5dGVzUGVyU2VjID0g
 YmxvY2tbMTFdICsgKGJsb2NrWzEyXSA8PCA4KTsKLQlib290LT5TZWNQZXJD
 bHVzdCA9IGJsb2NrWzEzXTsKLQlib290LT5SZXNTZWN0b3JzID0gYmxvY2tb
 MTRdICsgKGJsb2NrWzE1XSA8PCA4KTsKLQlib290LT5GQVRzID0gYmxvY2tb
 MTZdOwotCWJvb3QtPlJvb3REaXJFbnRzID0gYmxvY2tbMTddICsgKGJsb2Nr
 WzE4XSA8PCA4KTsKLQlib290LT5TZWN0b3JzID0gYmxvY2tbMTldICsgKGJs
 b2NrWzIwXSA8PCA4KTsKLQlib290LT5NZWRpYSA9IGJsb2NrWzIxXTsKLQli
 b290LT5GQVRzbWFsbCA9IGJsb2NrWzIyXSArIChibG9ja1syM10gPDwgOCk7
 CisJYm9vdC0+YnBiQnl0ZXNQZXJTZWMgPSBibG9ja1sxMV0gKyAoYmxvY2tb
 MTJdIDw8IDgpOworCWJvb3QtPmJwYlNlY1BlckNsdXN0ID0gYmxvY2tbMTNd
 OworCWJvb3QtPmJwYlJlc1NlY3RvcnMgPSBibG9ja1sxNF0gKyAoYmxvY2tb
 MTVdIDw8IDgpOworCWJvb3QtPmJwYkZBVHMgPSBibG9ja1sxNl07CisJYm9v
 dC0+YnBiUm9vdERpckVudHMgPSBibG9ja1sxN10gKyAoYmxvY2tbMThdIDw8
 IDgpOworCWJvb3QtPmJwYlNlY3RvcnMgPSBibG9ja1sxOV0gKyAoYmxvY2tb
 MjBdIDw8IDgpOworCWJvb3QtPmJwYk1lZGlhID0gYmxvY2tbMjFdOworCWJv
 b3QtPmJwYkZBVHNtYWxsID0gYmxvY2tbMjJdICsgKGJsb2NrWzIzXSA8PCA4
 KTsKIAlib290LT5TZWNQZXJUcmFjayA9IGJsb2NrWzI0XSArIChibG9ja1sy
 NV0gPDwgOCk7Ci0JYm9vdC0+SGVhZHMgPSBibG9ja1syNl0gKyAoYmxvY2tb
 MjddIDw8IDgpOwotCWJvb3QtPkhpZGRlblNlY3MgPSBibG9ja1syOF0gKyAo
 YmxvY2tbMjldIDw8IDgpICsgKGJsb2NrWzMwXSA8PCAxNikgKyAoYmxvY2tb
 MzFdIDw8IDI0KTsKLQlib290LT5IdWdlU2VjdG9ycyA9IGJsb2NrWzMyXSAr
 IChibG9ja1szM10gPDwgOCkgKyAoYmxvY2tbMzRdIDw8IDE2KSArIChibG9j
 a1szNV0gPDwgMjQpOworCWJvb3QtPmJwYkhlYWRzID0gYmxvY2tbMjZdICsg
 KGJsb2NrWzI3XSA8PCA4KTsKKwlib290LT5icGJIaWRkZW5TZWNzID0gYmxv
 Y2tbMjhdICsgKGJsb2NrWzI5XSA8PCA4KSArIChibG9ja1szMF0gPDwgMTYp
 ICsgKGJsb2NrWzMxXSA8PCAyNCk7CisJYm9vdC0+YnBiSHVnZVNlY3RvcnMg
 PSBibG9ja1szMl0gKyAoYmxvY2tbMzNdIDw8IDgpICsgKGJsb2NrWzM0XSA8
 PCAxNikgKyAoYmxvY2tbMzVdIDw8IDI0KTsKIAotCWJvb3QtPkZBVHNlY3Mg
 PSBib290LT5GQVRzbWFsbDsKKwlib290LT5GQVRzZWNzID0gYm9vdC0+YnBi
 RkFUc21hbGw7CiAKLQlpZiAoIWJvb3QtPlJvb3REaXJFbnRzKQorCWlmICgh
 Ym9vdC0+YnBiUm9vdERpckVudHMpCiAJCWJvb3QtPmZsYWdzIHw9IEZBVDMy
 OwogCWlmIChib290LT5mbGFncyAmIEZBVDMyKSB7CiAJCWJvb3QtPkZBVHNl
 Y3MgPSBibG9ja1szNl0gKyAoYmxvY2tbMzddIDw8IDgpCkBAIC0xMDEsMTMg
 KzkyLDEzIEBACiAJCQkgICAgICAgYmxvY2tbNDNdLCBibG9ja1s0Ml0pOwog
 CQkJcmV0dXJuIEZTRkFUQUw7CiAJCX0KLQkJYm9vdC0+Um9vdENsID0gYmxv
 Y2tbNDRdICsgKGJsb2NrWzQ1XSA8PCA4KQorCQlib290LT5icGJSb290Q2x1
 c3QgPSBibG9ja1s0NF0gKyAoYmxvY2tbNDVdIDw8IDgpCiAJCQkgICAgICAg
 KyAoYmxvY2tbNDZdIDw8IDE2KSArIChibG9ja1s0N10gPDwgMjQpOwotCQli
 b290LT5GU0luZm8gPSBibG9ja1s0OF0gKyAoYmxvY2tbNDldIDw8IDgpOwot
 CQlib290LT5CYWNrdXAgPSBibG9ja1s1MF0gKyAoYmxvY2tbNTFdIDw8IDgp
 OworCQlib290LT5icGJGU0luZm8gPSBibG9ja1s0OF0gKyAoYmxvY2tbNDld
 IDw8IDgpOworCQlib290LT5icGJCYWNrdXAgPSBibG9ja1s1MF0gKyAoYmxv
 Y2tbNTFdIDw8IDgpOwogCi0JCWlmIChsc2Vlayhkb3NmcywgYm9vdC0+RlNJ
 bmZvICogYm9vdC0+Qnl0ZXNQZXJTZWMsIFNFRUtfU0VUKQotCQkgICAgIT0g
 Ym9vdC0+RlNJbmZvICogYm9vdC0+Qnl0ZXNQZXJTZWMKKwkJaWYgKGxzZWVr
 KGRvc2ZzLCBib290LT5icGJGU0luZm8gKiBib290LT5icGJCeXRlc1BlclNl
 YywgU0VFS19TRVQpCisJCSAgICAhPSBib290LT5icGJGU0luZm8gKiBib290
 LT5icGJCeXRlc1BlclNlYwogCQkgICAgfHwgcmVhZChkb3NmcywgZnNpbmZv
 LCBzaXplb2YgZnNpbmZvKQogCQkgICAgIT0gc2l6ZW9mIGZzaW5mbykgewog
 CQkJcGVycm9yKCJjb3VsZCBub3QgcmVhZCBmc2luZm8gYmxvY2siKTsKQEAg
 LTEzMywxOCArMTI0LDE4IEBACiAJCQkJZnNpbmZvWzB4M2ZjXSA9IGZzaW5m
 b1sweDNmZF0gPSAwOwogCQkJCWZzaW5mb1sweDNmZV0gPSAweDU1OwogCQkJ
 CWZzaW5mb1sweDNmZl0gPSAweGFhOwotCQkJCWlmIChsc2Vlayhkb3Nmcywg
 Ym9vdC0+RlNJbmZvICogYm9vdC0+Qnl0ZXNQZXJTZWMsIFNFRUtfU0VUKQot
 CQkJCSAgICAhPSBib290LT5GU0luZm8gKiBib290LT5CeXRlc1BlclNlYwor
 CQkJCWlmIChsc2Vlayhkb3NmcywgYm9vdC0+YnBiRlNJbmZvICogYm9vdC0+
 YnBiQnl0ZXNQZXJTZWMsIFNFRUtfU0VUKQorCQkJCSAgICAhPSBib290LT5i
 cGJGU0luZm8gKiBib290LT5icGJCeXRlc1BlclNlYwogCQkJCSAgICB8fCB3
 cml0ZShkb3NmcywgZnNpbmZvLCBzaXplb2YgZnNpbmZvKQogCQkJCSAgICAh
 PSBzaXplb2YgZnNpbmZvKSB7Ci0JCQkJCXBlcnJvcigiVW5hYmxlIHRvIHdy
 aXRlIEZTSW5mbyIpOworCQkJCQlwZXJyb3IoIlVuYWJsZSB0byB3cml0ZSBi
 cGJGU0luZm8iKTsKIAkJCQkJcmV0dXJuIEZTRkFUQUw7CiAJCQkJfQogCQkJ
 CXJldCA9IEZTQk9PVE1PRDsKIAkJCX0gZWxzZQotCQkJCWJvb3QtPkZTSW5m
 byA9IDA7CisJCQkJYm9vdC0+YnBiRlNJbmZvID0gMDsKIAkJfQotCQlpZiAo
 Ym9vdC0+RlNJbmZvKSB7CisJCWlmIChib290LT5icGJGU0luZm8pIHsKIAkJ
 CWJvb3QtPkZTRnJlZSA9IGZzaW5mb1sweDFlOF0gKyAoZnNpbmZvWzB4MWU5
 XSA8PCA4KQogCQkJCSAgICAgICArIChmc2luZm9bMHgxZWFdIDw8IDE2KQog
 CQkJCSAgICAgICArIChmc2luZm9bMHgxZWJdIDw8IDI0KTsKQEAgLTE1Myw0
 NCArMTQ0LDU0IEBACiAJCQkJICAgICAgICsgKGZzaW5mb1sweDFlZl0gPDwg
 MjQpOwogCQl9CiAKLQkJaWYgKGxzZWVrKGRvc2ZzLCBib290LT5CYWNrdXAg
 KiBib290LT5CeXRlc1BlclNlYywgU0VFS19TRVQpCi0JCSAgICAhPSBib290
 LT5CYWNrdXAgKiBib290LT5CeXRlc1BlclNlYworCQlpZiAobHNlZWsoZG9z
 ZnMsIGJvb3QtPmJwYkJhY2t1cCAqIGJvb3QtPmJwYkJ5dGVzUGVyU2VjLCBT
 RUVLX1NFVCkKKwkJICAgICE9IGJvb3QtPmJwYkJhY2t1cCAqIGJvb3QtPmJw
 YkJ5dGVzUGVyU2VjCiAJCSAgICB8fCByZWFkKGRvc2ZzLCBiYWNrdXAsIHNp
 emVvZiBiYWNrdXApICE9IHNpemVvZiAgYmFja3VwKSB7CiAJCQlwZXJyb3Io
 ImNvdWxkIG5vdCByZWFkIGJhY2t1cCBib290YmxvY2siKTsKIAkJCXJldHVy
 biBGU0ZBVEFMOwogCQl9CiAJCWJhY2t1cFs2NV0gPSBibG9ja1s2NV07CQkJ
 CS8qIFhYWCAqLwogCQlpZiAobWVtY21wKGJsb2NrICsgMTEsIGJhY2t1cCAr
 IDExLCA3OSkpIHsKLQkJCS8qIENvcnJlY3Q/CQkJCQlYWFggKi8KLQkJCXBm
 YXRhbCgiYmFja3VwIGRvZXNuJ3QgY29tcGFyZSB0byBwcmltYXJ5IGJvb3Ri
 bG9jayIpOwotCQkJaWYgKGFsd2F5c25vKQotCQkJCXBmYXRhbCgiXG4iKTsK
 LQkJCWVsc2UKLQkJCQlyZXR1cm4gRlNGQVRBTDsKKwkJCS8qCisJCQkgKiBY
 WFggV2UgcmVxdWlyZSBhIHJlZmVyZW5jZSB0aGF0IGV4cGxhaW5zCisJCQkg
 KiB0aGF0IHRoZXNlIGJ5dGVzIG5lZWQgdG8gbWF0Y2gsIG9yIHNob3VsZAor
 CQkJICogZHJvcCB0aGUgY2hlY2suICBnZHRATmV0QlNEIGhhcyBvYnNlcnZl
 ZAorCQkJICogZmlsZXN5c3RlbXMgdGhhdCB3b3JrIGZpbmUgdW5kZXIgV2lu
 ZG93cyBYUAorCQkJICogYW5kIE5ldEJTRCB0aGF0IGRvIG5vdCBtYXRjaCwg
 c28gdGhlCisJCQkgKiByZXF1aXJlbWVudCBpcyBzdXNwZWN0LiAgRm9yIG5v
 dywganVzdAorCQkJICogcHJpbnQgb3V0IHVzZWZ1bCBpbmZvcm1hdGlvbiBh
 bmQgY29udGludWUuCisJCQkgKi8KKwkJCXBmYXRhbCgiYmFja3VwIChibG9j
 ayAlZCkgbWlzbWF0Y2ggd2l0aCBwcmltYXJ5IGJvb3RibG9jazpcbiIsCisJ
 CQkgICAgICAgIGJvb3QtPmJwYkJhY2t1cCk7CisJCQlmb3IgKGkgPSAxMTsg
 aSA8IDExICsgOTA7IGkrKykgeworCQkJCWlmIChibG9ja1tpXSAhPSBiYWNr
 dXBbaV0pCisJCQkJCXBmYXRhbCgiXHRpPSVkXHRwcmltYXJ5IDB4JTAyeFx0
 YmFja3VwIDB4JTAyeFxuIiwKKwkJCQkJICAgICAgIGksIGJsb2NrW2ldLCBi
 YWNrdXBbaV0pOworCQkJfQogCQl9Ci0JCS8qIENoZWNrIGJhY2t1cCBGU0lu
 Zm8/CQkJCQlYWFggKi8KKwkJLyogQ2hlY2sgYmFja3VwIGJwYkZTSW5mbz8J
 CQkJCVhYWCAqLwogCX0KIAotCWJvb3QtPkNsdXN0ZXJPZmZzZXQgPSAoYm9v
 dC0+Um9vdERpckVudHMgKiAzMiArIGJvb3QtPkJ5dGVzUGVyU2VjIC0gMSkK
 LQkgICAgLyBib290LT5CeXRlc1BlclNlYwotCSAgICArIGJvb3QtPlJlc1Nl
 Y3RvcnMKLQkgICAgKyBib290LT5GQVRzICogYm9vdC0+RkFUc2VjcwotCSAg
 ICAtIENMVVNUX0ZJUlNUICogYm9vdC0+U2VjUGVyQ2x1c3Q7CisJYm9vdC0+
 Q2x1c3Rlck9mZnNldCA9IChib290LT5icGJSb290RGlyRW50cyAqIDMyICsg
 Ym9vdC0+YnBiQnl0ZXNQZXJTZWMgLSAxKQorCSAgICAvIGJvb3QtPmJwYkJ5
 dGVzUGVyU2VjCisJICAgICsgYm9vdC0+YnBiUmVzU2VjdG9ycworCSAgICAr
 IGJvb3QtPmJwYkZBVHMgKiBib290LT5GQVRzZWNzCisJICAgIC0gQ0xVU1Rf
 RklSU1QgKiBib290LT5icGJTZWNQZXJDbHVzdDsKIAotCWlmIChib290LT5C
 eXRlc1BlclNlYyAlIERPU0JPT1RCTE9DS1NJWkUgIT0gMCkgewotCQlwZmF0
 YWwoIkludmFsaWQgc2VjdG9yIHNpemU6ICV1IiwgYm9vdC0+Qnl0ZXNQZXJT
 ZWMpOworCWlmIChib290LT5icGJCeXRlc1BlclNlYyAlIERPU0JPT1RCTE9D
 S1NJWkUgIT0gMCkgeworCQlwZmF0YWwoIkludmFsaWQgc2VjdG9yIHNpemU6
 ICV1IiwgYm9vdC0+YnBiQnl0ZXNQZXJTZWMpOwogCQlyZXR1cm4gRlNGQVRB
 TDsKIAl9Ci0JaWYgKGJvb3QtPlNlY1BlckNsdXN0ID09IDApIHsKLQkJcGZh
 dGFsKCJJbnZhbGlkIGNsdXN0ZXIgc2l6ZTogJXUiLCBib290LT5TZWNQZXJD
 bHVzdCk7CisJaWYgKGJvb3QtPmJwYlNlY1BlckNsdXN0ID09IDApIHsKKwkJ
 cGZhdGFsKCJJbnZhbGlkIGNsdXN0ZXIgc2l6ZTogJXUiLCBib290LT5icGJT
 ZWNQZXJDbHVzdCk7CiAJCXJldHVybiBGU0ZBVEFMOwogCX0KLQlpZiAoYm9v
 dC0+U2VjdG9ycykgewotCQlib290LT5IdWdlU2VjdG9ycyA9IDA7Ci0JCWJv
 b3QtPk51bVNlY3RvcnMgPSBib290LT5TZWN0b3JzOworCWlmIChib290LT5i
 cGJTZWN0b3JzKSB7CisJCWJvb3QtPmJwYkh1Z2VTZWN0b3JzID0gMDsKKwkJ
 Ym9vdC0+TnVtU2VjdG9ycyA9IGJvb3QtPmJwYlNlY3RvcnM7CiAJfSBlbHNl
 Ci0JCWJvb3QtPk51bVNlY3RvcnMgPSBib290LT5IdWdlU2VjdG9yczsKLQli
 b290LT5OdW1DbHVzdGVycyA9IChib290LT5OdW1TZWN0b3JzIC0gYm9vdC0+
 Q2x1c3Rlck9mZnNldCkgLyBib290LT5TZWNQZXJDbHVzdDsKKwkJYm9vdC0+
 TnVtU2VjdG9ycyA9IGJvb3QtPmJwYkh1Z2VTZWN0b3JzOworCWJvb3QtPk51
 bUNsdXN0ZXJzID0gKGJvb3QtPk51bVNlY3RvcnMgLSBib290LT5DbHVzdGVy
 T2Zmc2V0KSAvIGJvb3QtPmJwYlNlY1BlckNsdXN0OwogCiAJaWYgKGJvb3Qt
 PmZsYWdzJkZBVDMyKQogCQlib290LT5DbHVzdE1hc2sgPSBDTFVTVDMyX01B
 U0s7CkBAIC0yMDYsMTMgKzIwNywxMyBAQAogCiAJc3dpdGNoIChib290LT5D
 bHVzdE1hc2spIHsKIAljYXNlIENMVVNUMzJfTUFTSzoKLQkJYm9vdC0+TnVt
 RmF0RW50cmllcyA9IChib290LT5GQVRzZWNzICogYm9vdC0+Qnl0ZXNQZXJT
 ZWMpIC8gNDsKKwkJYm9vdC0+TnVtRmF0RW50cmllcyA9IChib290LT5GQVRz
 ZWNzICogYm9vdC0+YnBiQnl0ZXNQZXJTZWMpIC8gNDsKIAkJYnJlYWs7CiAJ
 Y2FzZSBDTFVTVDE2X01BU0s6Ci0JCWJvb3QtPk51bUZhdEVudHJpZXMgPSAo
 Ym9vdC0+RkFUc2VjcyAqIGJvb3QtPkJ5dGVzUGVyU2VjKSAvIDI7CisJCWJv
 b3QtPk51bUZhdEVudHJpZXMgPSAoYm9vdC0+RkFUc2VjcyAqIGJvb3QtPmJw
 YkJ5dGVzUGVyU2VjKSAvIDI7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWJv
 b3QtPk51bUZhdEVudHJpZXMgPSAoYm9vdC0+RkFUc2VjcyAqIGJvb3QtPkJ5
 dGVzUGVyU2VjICogMikgLyAzOworCQlib290LT5OdW1GYXRFbnRyaWVzID0g
 KGJvb3QtPkZBVHNlY3MgKiBib290LT5icGJCeXRlc1BlclNlYyAqIDIpIC8g
 MzsKIAkJYnJlYWs7CiAJfQogCkBAIC0yMjEsNyArMjIyLDcgQEAKIAkJICAg
 ICAgIGJvb3QtPk51bUNsdXN0ZXJzLCBib290LT5GQVRzZWNzKTsKIAkJcmV0
 dXJuIEZTRkFUQUw7CiAJfQotCWJvb3QtPkNsdXN0ZXJTaXplID0gYm9vdC0+
 Qnl0ZXNQZXJTZWMgKiBib290LT5TZWNQZXJDbHVzdDsKKwlib290LT5DbHVz
 dGVyU2l6ZSA9IGJvb3QtPmJwYkJ5dGVzUGVyU2VjICogYm9vdC0+YnBiU2Vj
 UGVyQ2x1c3Q7CiAKIAlib290LT5OdW1GaWxlcyA9IDE7CiAJYm9vdC0+TnVt
 RnJlZSA9IDA7CkBAIC0yMzAsMTQgKzIzMSwxMiBAQAogfQogCiBpbnQKLXdy
 aXRlZnNpbmZvKGRvc2ZzLCBib290KQotCWludCBkb3NmczsKLQlzdHJ1Y3Qg
 Ym9vdGJsb2NrICpib290Oword3JpdGVmc2luZm8oaW50IGRvc2ZzLCBzdHJ1
 Y3QgYm9vdGJsb2NrICpib290KQogewogCXVfY2hhciBmc2luZm9bMiAqIERP
 U0JPT1RCTE9DS1NJWkVdOwogCi0JaWYgKGxzZWVrKGRvc2ZzLCBib290LT5G
 U0luZm8gKiBib290LT5CeXRlc1BlclNlYywgU0VFS19TRVQpCi0JICAgICE9
 IGJvb3QtPkZTSW5mbyAqIGJvb3QtPkJ5dGVzUGVyU2VjCisJaWYgKGxzZWVr
 KGRvc2ZzLCBib290LT5icGJGU0luZm8gKiBib290LT5icGJCeXRlc1BlclNl
 YywgU0VFS19TRVQpCisJICAgICE9IGJvb3QtPmJwYkZTSW5mbyAqIGJvb3Qt
 PmJwYkJ5dGVzUGVyU2VjCiAJICAgIHx8IHJlYWQoZG9zZnMsIGZzaW5mbywg
 c2l6ZW9mIGZzaW5mbykgIT0gc2l6ZW9mIGZzaW5mbykgewogCQlwZXJyb3Io
 ImNvdWxkIG5vdCByZWFkIGZzaW5mbyBibG9jayIpOwogCQlyZXR1cm4gRlNG
 QVRBTDsKQEAgLTI1MCwxMSArMjQ5LDExIEBACiAJZnNpbmZvWzB4MWVkXSA9
 ICh1X2NoYXIpKGJvb3QtPkZTTmV4dCA+PiA4KTsKIAlmc2luZm9bMHgxZWVd
 ID0gKHVfY2hhcikoYm9vdC0+RlNOZXh0ID4+IDE2KTsKIAlmc2luZm9bMHgx
 ZWZdID0gKHVfY2hhcikoYm9vdC0+RlNOZXh0ID4+IDI0KTsKLQlpZiAobHNl
 ZWsoZG9zZnMsIGJvb3QtPkZTSW5mbyAqIGJvb3QtPkJ5dGVzUGVyU2VjLCBT
 RUVLX1NFVCkKLQkgICAgIT0gYm9vdC0+RlNJbmZvICogYm9vdC0+Qnl0ZXNQ
 ZXJTZWMKKwlpZiAobHNlZWsoZG9zZnMsIGJvb3QtPmJwYkZTSW5mbyAqIGJv
 b3QtPmJwYkJ5dGVzUGVyU2VjLCBTRUVLX1NFVCkKKwkgICAgIT0gYm9vdC0+
 YnBiRlNJbmZvICogYm9vdC0+YnBiQnl0ZXNQZXJTZWMKIAkgICAgfHwgd3Jp
 dGUoZG9zZnMsIGZzaW5mbywgc2l6ZW9mIGZzaW5mbykKIAkgICAgIT0gc2l6
 ZW9mIGZzaW5mbykgewotCQlwZXJyb3IoIlVuYWJsZSB0byB3cml0ZSBGU0lu
 Zm8iKTsKKwkJcGVycm9yKCJVbmFibGUgdG8gd3JpdGUgYnBiRlNJbmZvIik7
 CiAJCXJldHVybiBGU0ZBVEFMOwogCX0KIAkvKgpkaWZmIC1ydSBmc2NrX21z
 ZG9zZnMub3JpZy9jaGVjay5jIGZzY2tfbXNkb3Nmcy9jaGVjay5jCi0tLSBm
 c2NrX21zZG9zZnMub3JpZy9jaGVjay5jCTIwMTAtMDEtMDYgMTE6MDc6MjQu
 MDAwMDAwMDAwICswMDAwCisrKyBmc2NrX21zZG9zZnMvY2hlY2suYwkyMDEw
 LTAxLTE1IDE2OjE3OjUyLjAwMDAwMDAwMCArMDAwMApAQCAtMTAsMTMgKzEw
 LDYgQEAKICAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
 dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAgKiAgICBub3Rp
 Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
 IGRpc2NsYWltZXIgaW4gdGhlCiAgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
 ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
 aW9uLgotICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9u
 aW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCi0gKiAgICBt
 dXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0g
 KglUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5
 IE1hcnRpbiBIdXNlbWFubgotICoJYW5kIFdvbGZnYW5nIFNvbGZyYW5rLgot
 ICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3Ig
 dGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1
 c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
 b20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlv
 ciB3cml0dGVuIHBlcm1pc3Npb24uCiAgKgogICogVEhJUyBTT0ZUV0FSRSBJ
 UyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SUyBgYEFTIElTJycgQU5EIEFOWSBF
 WFBSRVNTIE9SCiAgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
 QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCkBA
 IC00MCw3ICszMyw2IEBACiAKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNs
 dWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxjdHlwZS5oPgogI2luY2x1ZGUg
 PHN0ZGlvLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjaW5jbHVkZSA8ZmNu
 dGwuaD4KQEAgLTU0LDcgKzQ2LDggQEAKIAlpbnQgZG9zZnM7CiAJc3RydWN0
 IGJvb3RibG9jayBib290OwogCXN0cnVjdCBmYXRFbnRyeSAqZmF0ID0gTlVM
 TDsKLQlpbnQgaSwgZmluaXNoX2Rvc2RpcnNlY3Rpb249MDsKKwlpbnQgZmlu
 aXNoX2Rvc2RpcnNlY3Rpb249MDsKKwl1X2ludCBpOwogCWludCBtb2QgPSAw
 OwogCWludCByZXQgPSA4OwogCkBAIC0xMDUsNyArOTgsNyBAQAogCX0KIAog
 CWlmIChib290LlZhbGlkRmF0IDwgMCkKLQkJZm9yIChpID0gMTsgaSA8IChp
 bnQpYm9vdC5GQVRzOyBpKyspIHsKKwkJZm9yIChpID0gMTsgaSA8IChpbnQp
 Ym9vdC5icGJGQVRzOyBpKyspIHsKIAkJCXN0cnVjdCBmYXRFbnRyeSAqY3Vy
 cmVudEZhdDsKIAogCQkJbW9kIHw9IHJlYWRmYXQoZG9zZnMsICZib290LCBp
 LCAmY3VycmVudEZhdCk7CmRpZmYgLXJ1IGZzY2tfbXNkb3Nmcy5vcmlnL2Rp
 ci5jIGZzY2tfbXNkb3Nmcy9kaXIuYwotLS0gZnNja19tc2Rvc2ZzLm9yaWcv
 ZGlyLmMJMjAxMC0wMS0wNiAxMTowNzoyNC4wMDAwMDAwMDAgKzAwMDAKKysr
 IGZzY2tfbXNkb3Nmcy9kaXIuYwkyMDEwLTAxLTE1IDE2OjIyOjAwLjAwMDAw
 MDAwMCArMDAwMApAQCAtMTIsMTMgKzEyLDYgQEAKICAqIDIuIFJlZGlzdHJp
 YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
 dmUgY29weXJpZ2h0CiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
 aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAg
 KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
 dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gQWxsIGFkdmVy
 dGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBv
 ZiB0aGlzIHNvZnR3YXJlCi0gKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxv
 d2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0gKglUaGlzIHByb2R1Y3QgaW5jbHVk
 ZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IE1hcnRpbiBIdXNlbWFubgotICoJ
 YW5kIFdvbGZnYW5nIFNvbGZyYW5rLgotICogNC4gTmVpdGhlciB0aGUgbmFt
 ZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250
 cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
 bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICog
 ICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
 CiAgKgogICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVU
 SE9SUyBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCiAgKiBJTVBMSUVE
 IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
 SEUgSU1QTElFRCBXQVJSQU5USUVTCkBAIC00NCw3ICszNyw2IEBACiAjaW5j
 bHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVk
 ZSA8Y3R5cGUuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHVu
 aXN0ZC5oPgogI2luY2x1ZGUgPHRpbWUuaD4KIApAQCAtMjI3LDI2ICsyMTks
 MzggQEAKIAljbF90IGNsOwogCWludCByZXQgPSBGU09LOwogCi0JYjEgPSBi
 b290LT5Sb290RGlyRW50cyAqIDMyOwotCWIyID0gYm9vdC0+U2VjUGVyQ2x1
 c3QgKiBib290LT5CeXRlc1BlclNlYzsKKwliMSA9IGJvb3QtPmJwYlJvb3RE
 aXJFbnRzICogMzI7CisJYjIgPSBib290LT5icGJTZWNQZXJDbHVzdCAqIGJv
 b3QtPmJwYkJ5dGVzUGVyU2VjOwogCi0JaWYgKCEoYnVmZmVyID0gbWFsbG9j
 KGIxID4gYjIgPyBiMSA6IGIyKSkKLQkgICAgfHwgIShkZWxidWYgPSBtYWxs
 b2MoYjIpKQotCSAgICB8fCAhKHJvb3REaXIgPSBuZXdEb3NEaXJFbnRyeSgp
 KSkgewotCQlwZXJyb3IoIk5vIHNwYWNlIGZvciBkaXJlY3RvcnkiKTsKKwlp
 ZiAoKGJ1ZmZlciA9IG1hbGxvYyggYjEgPiBiMiA/IGIxIDogYjIpKSA9PSBO
 VUxMKSB7CisJCXBlcnJvcigiTm8gc3BhY2UgZm9yIGRpcmVjdG9yeSBidWZm
 ZXIiKTsKIAkJcmV0dXJuIEZTRkFUQUw7CiAJfQorCisJaWYgKChkZWxidWYg
 PSBtYWxsb2MoYjIpKSA9PSBOVUxMKSB7CisJCWZyZWUoYnVmZmVyKTsKKwkJ
 cGVycm9yKCJObyBzcGFjZSBmb3IgZGlyZWN0b3J5IGRlbGJ1ZiIpOworCQly
 ZXR1cm4gRlNGQVRBTDsKKwl9CisKKwlpZiAoKHJvb3REaXIgPSBuZXdEb3NE
 aXJFbnRyeSgpKSA9PSBOVUxMKSB7CisJCWZyZWUoYnVmZmVyKTsKKwkJZnJl
 ZShkZWxidWYpOworCQlwZXJyb3IoIk5vIHNwYWNlIGZvciBkaXJlY3Rvcnkg
 ZW50cnkiKTsKKwkJcmV0dXJuIEZTRkFUQUw7CisJfQorCiAJbWVtc2V0KHJv
 b3REaXIsIDAsIHNpemVvZiAqcm9vdERpcik7CiAJaWYgKGJvb3QtPmZsYWdz
 ICYgRkFUMzIpIHsKLQkJaWYgKGJvb3QtPlJvb3RDbCA8IENMVVNUX0ZJUlNU
 IHx8IGJvb3QtPlJvb3RDbCA+PSBib290LT5OdW1DbHVzdGVycykgeworCQlp
 ZiAoYm9vdC0+YnBiUm9vdENsdXN0IDwgQ0xVU1RfRklSU1QgfHwgYm9vdC0+
 YnBiUm9vdENsdXN0ID49IGJvb3QtPk51bUNsdXN0ZXJzKSB7CiAJCQlwZmF0
 YWwoIlJvb3QgZGlyZWN0b3J5IHN0YXJ0cyB3aXRoIGNsdXN0ZXIgb3V0IG9m
 IHJhbmdlKCV1KSIsCi0JCQkgICAgICAgYm9vdC0+Um9vdENsKTsKKwkJCSAg
 ICAgICBib290LT5icGJSb290Q2x1c3QpOwogCQkJcmV0dXJuIEZTRkFUQUw7
 CiAJCX0KLQkJY2wgPSBmYXRbYm9vdC0+Um9vdENsXS5uZXh0OworCQljbCA9
 IGZhdFtib290LT5icGJSb290Q2x1c3RdLm5leHQ7CiAJCWlmIChjbCA8IENM
 VVNUX0ZJUlNUCiAJCSAgICB8fCAoY2wgPj0gQ0xVU1RfUlNSVkQgJiYgY2w8
 IENMVVNUX0VPRlMpCi0JCSAgICB8fCBmYXRbYm9vdC0+Um9vdENsXS5oZWFk
 ICE9IGJvb3QtPlJvb3RDbCkgeworCQkgICAgfHwgZmF0W2Jvb3QtPmJwYlJv
 b3RDbHVzdF0uaGVhZCAhPSBib290LT5icGJSb290Q2x1c3QpIHsKIAkJCWlm
 IChjbCA9PSBDTFVTVF9GUkVFKQogCQkJCXB3YXJuKCJSb290IGRpcmVjdG9y
 eSBzdGFydHMgd2l0aCBmcmVlIGNsdXN0ZXJcbiIpOwogCQkJZWxzZSBpZiAo
 Y2wgPj0gQ0xVU1RfUlNSVkQpCkBAIC0yNTcsMTQgKzI2MSwxNCBAQAogCQkJ
 CXJldHVybiBGU0ZBVEFMOwogCQkJfQogCQkJaWYgKGFzaygxLCAiRml4Iikp
 IHsKLQkJCQlmYXRbYm9vdC0+Um9vdENsXS5uZXh0ID0gQ0xVU1RfRlJFRTsK
 KwkJCQlmYXRbYm9vdC0+YnBiUm9vdENsdXN0XS5uZXh0ID0gQ0xVU1RfRlJF
 RTsKIAkJCQlyZXQgPSBGU0ZBVE1PRDsKIAkJCX0gZWxzZQogCQkJCXJldCA9
 IEZTRkFUQUw7CiAJCX0KIAotCQlmYXRbYm9vdC0+Um9vdENsXS5mbGFncyB8
 PSBGQVRfVVNFRDsKLQkJcm9vdERpci0+aGVhZCA9IGJvb3QtPlJvb3RDbDsK
 KwkJZmF0W2Jvb3QtPmJwYlJvb3RDbHVzdF0uZmxhZ3MgfD0gRkFUX1VTRUQ7
 CisJCXJvb3REaXItPmhlYWQgPSBib290LT5icGJSb290Q2x1c3Q7CiAJfQog
 CiAJcmV0dXJuIHJldDsKQEAgLTMwOSw3ICszMTMsNyBAQAogewogCXVfY2hh
 ciAqcywgKmU7CiAJb2ZmX3Qgb2ZmOwotCWludCBjbHN6ID0gYm9vdC0+U2Vj
 UGVyQ2x1c3QgKiBib290LT5CeXRlc1BlclNlYzsKKwlpbnQgY2xzeiA9IGJv
 b3QtPmJwYlNlY1BlckNsdXN0ICogYm9vdC0+YnBiQnl0ZXNQZXJTZWM7CiAK
 IAlzID0gZGVsYnVmICsgc3RhcnRvZmY7CiAJZSA9IGRlbGJ1ZiArIGNsc3o7
 CkBAIC0zMTksOCArMzIzLDggQEAKIAkJCQlicmVhazsKIAkJCWUgPSBkZWxi
 dWYgKyBlbmRvZmY7CiAJCX0KLQkJb2ZmID0gc3RhcnRjbCAqIGJvb3QtPlNl
 Y1BlckNsdXN0ICsgYm9vdC0+Q2x1c3Rlck9mZnNldDsKLQkJb2ZmICo9IGJv
 b3QtPkJ5dGVzUGVyU2VjOworCQlvZmYgPSBzdGFydGNsICogYm9vdC0+YnBi
 U2VjUGVyQ2x1c3QgKyBib290LT5DbHVzdGVyT2Zmc2V0OworCQlvZmYgKj0g
 Ym9vdC0+YnBiQnl0ZXNQZXJTZWM7CiAJCWlmIChsc2VlayhmLCBvZmYsIFNF
 RUtfU0VUKSAhPSBvZmYKIAkJICAgIHx8IHJlYWQoZiwgZGVsYnVmLCBjbHN6
 KSAhPSBjbHN6KSB7CiAJCQlwZXJyb3IoIlVuYWJsZSB0byByZWFkIGRpcmVj
 dG9yeSIpOwpAQCAtMzY3LDcgKzM3MSw4IEBACiAJCQkJcmV0dXJuIEZTRkFU
 QUw7CiAJCQlzdGFydCA9IGJ1ZmZlcjsKIAkJfQotCQlpZiAoZW5kY2wgPT0g
 Y3VyY2wpCisJCS8qIHN0YXJ0Y2wgaXMgPCBDTFVTVF9GSVJTVCBmb3IgIWZh
 dDMyIHJvb3QgKi8KKwkJaWYgKChlbmRjbCA9PSBjdXJjbCkgfHwgKHN0YXJ0
 Y2wgPCBDTFVTVF9GSVJTVCkpCiAJCQlmb3IgKDsgc3RhcnQgPCBlbmQ7IHN0
 YXJ0ICs9IDMyKQogCQkJCSpzdGFydCA9IFNMT1RfREVMRVRFRDsKIAkJcmV0
 dXJuIEZTRElSTU9EOwpAQCAtMzg1LDcgKzM5MCw3IEBACiAJLyoKIAkgKiBD
 aGVjayBzaXplIG9uIG9yZGluYXJ5IGZpbGVzCiAJICovCi0JaW50MzJfdCBw
 aHlzaWNhbFNpemU7CisJdV9pbnQzMl90IHBoeXNpY2FsU2l6ZTsKIAogCWlm
 IChkaXItPmhlYWQgPT0gQ0xVU1RfRlJFRSkKIAkJcGh5c2ljYWxTaXplID0g
 MDsKQEAgLTQ1NiwxNCArNDYxLDE0IEBACiAJdmFsbGZuID0gaW52bGZuID0g
 ZW1wdHkgPSBOVUxMOwogCWRvIHsKIAkJaWYgKCEoYm9vdC0+ZmxhZ3MgJiBG
 QVQzMikgJiYgIWRpci0+cGFyZW50KSB7Ci0JCQlsYXN0ID0gYm9vdC0+Um9v
 dERpckVudHMgKiAzMjsKLQkJCW9mZiA9IGJvb3QtPlJlc1NlY3RvcnMgKyBi
 b290LT5GQVRzICogYm9vdC0+RkFUc2VjczsKKwkJCWxhc3QgPSBib290LT5i
 cGJSb290RGlyRW50cyAqIDMyOworCQkJb2ZmID0gYm9vdC0+YnBiUmVzU2Vj
 dG9ycyArIGJvb3QtPmJwYkZBVHMgKiBib290LT5GQVRzZWNzOwogCQl9IGVs
 c2UgewotCQkJbGFzdCA9IGJvb3QtPlNlY1BlckNsdXN0ICogYm9vdC0+Qnl0
 ZXNQZXJTZWM7Ci0JCQlvZmYgPSBjbCAqIGJvb3QtPlNlY1BlckNsdXN0ICsg
 Ym9vdC0+Q2x1c3Rlck9mZnNldDsKKwkJCWxhc3QgPSBib290LT5icGJTZWNQ
 ZXJDbHVzdCAqIGJvb3QtPmJwYkJ5dGVzUGVyU2VjOworCQkJb2ZmID0gY2wg
 KiBib290LT5icGJTZWNQZXJDbHVzdCArIGJvb3QtPkNsdXN0ZXJPZmZzZXQ7
 CiAJCX0KIAotCQlvZmYgKj0gYm9vdC0+Qnl0ZXNQZXJTZWM7CisJCW9mZiAq
 PSBib290LT5icGJCeXRlc1BlclNlYzsKIAkJaWYgKGxzZWVrKGYsIG9mZiwg
 U0VFS19TRVQpICE9IG9mZgogCQkgICAgfHwgcmVhZChmLCBidWZmZXIsIGxh
 c3QpICE9IGxhc3QpIHsKIAkJCXBlcnJvcigiVW5hYmxlIHRvIHJlYWQgZGly
 ZWN0b3J5Iik7CkBAIC02NDQsNyArNjQ5LDggQEAKIAkJCQlkaXJlbnQuaGVh
 ZCB8PSAocFsyMF0gPDwgMTYpIHwgKHBbMjFdIDw8IDI0KTsKIAkJCWRpcmVu
 dC5zaXplID0gcFsyOF0gfCAocFsyOV0gPDwgOCkgfCAocFszMF0gPDwgMTYp
 IHwgKHBbMzFdIDw8IDI0KTsKIAkJCWlmICh2YWxsZm4pIHsKLQkJCQlzdHJj
 cHkoZGlyZW50LmxuYW1lLCBsb25nTmFtZSk7CisJCQkJc3RybGNweShkaXJl
 bnQubG5hbWUsIGxvbmdOYW1lLAorCQkJCSAgICBzaXplb2YoZGlyZW50Lmxu
 YW1lKSk7CiAJCQkJbG9uZ05hbWVbMF0gPSAnXDAnOwogCQkJCXNob3J0U3Vt
 ID0gLTE7CiAJCQl9CkBAIC04MzIsNiArODM4LDEwIEBACiAJCQl9CiAJCQli
 b290LT5OdW1GaWxlcysrOwogCQl9CisKKwkJaWYgKCEoYm9vdC0+ZmxhZ3Mg
 JiBGQVQzMikgJiYgIWRpci0+cGFyZW50KQorCQkJYnJlYWs7CisKIAkJaWYg
 KG1vZCAmIFRISVNNT0QpIHsKIAkJCWxhc3QgKj0gMzI7CiAJCQlpZiAobHNl
 ZWsoZiwgb2ZmLCBTRUVLX1NFVCkgIT0gb2ZmCkBAIC04NDcsNiArODU3LDE5
 IEBACiAJCQkJaW52bGZuID8gaW52bGZuIDogdmFsbGZuLCBwLAogCQkJCWlu
 dmxmbiA/IGludmNsIDogdmFsY2wsIC0xLCAwLAogCQkJCWZ1bGxwYXRoKGRp
 ciksIDEpOworCisJLyogVGhlIHJvb3QgZGlyZWN0b3J5IG9mIG5vbiBmYXQz
 MiBmaWxlc3lzdGVtcyBpcyBpbiBhIHNwZWNpYWwKKwkgKiBhcmVhIGFuZCBt
 YXkgaGF2ZSBiZWVuIG1vZGlmaWVkIGFib3ZlIHdpdGhvdXQgYmVpbmcgd3Jp
 dHRlbiBvdXQuCisJICovCisJaWYgKChtb2QgJiBGU0RJUk1PRCkgJiYgIShi
 b290LT5mbGFncyAmIEZBVDMyKSAmJiAhZGlyLT5wYXJlbnQpIHsKKwkJbGFz
 dCAqPSAzMjsKKwkJaWYgKGxzZWVrKGYsIG9mZiwgU0VFS19TRVQpICE9IG9m
 ZgorCQkgICAgfHwgd3JpdGUoZiwgYnVmZmVyLCBsYXN0KSAhPSBsYXN0KSB7
 CisJCQlwZXJyb3IoIlVuYWJsZSB0byB3cml0ZSBkaXJlY3RvcnkiKTsKKwkJ
 CXJldHVybiBGU0ZBVEFMOworCQl9CisJCW1vZCAmPSB+VEhJU01PRDsKKwl9
 CiAJcmV0dXJuIG1vZCAmIH5USElTTU9EOwogfQogCkBAIC05MzQsOSArOTU3
 LDkgQEAKIAkJCXJldHVybiBGU0VSUk9SOwogCQl9CiAJCWxmb2ZmID0gbGZj
 bCAqIGJvb3QtPkNsdXN0ZXJTaXplCi0JCSAgICArIGJvb3QtPkNsdXN0ZXJP
 ZmZzZXQgKiBib290LT5CeXRlc1BlclNlYzsKKwkJICAgICsgYm9vdC0+Q2x1
 c3Rlck9mZnNldCAqIGJvb3QtPmJwYkJ5dGVzUGVyU2VjOwogCQlpZiAobHNl
 ZWsoZG9zZnMsIGxmb2ZmLCBTRUVLX1NFVCkgIT0gbGZvZmYKLQkJICAgIHx8
 IHJlYWQoZG9zZnMsIGxmYnVmLCBib290LT5DbHVzdGVyU2l6ZSkgIT0gYm9v
 dC0+Q2x1c3RlclNpemUpIHsKKwkJICAgIHx8IChzaXplX3QpcmVhZChkb3Nm
 cywgbGZidWYsIGJvb3QtPkNsdXN0ZXJTaXplKSAhPSBib290LT5DbHVzdGVy
 U2l6ZSkgewogCQkJcGVycm9yKCJjb3VsZCBub3QgcmVhZCBMT1NULkRJUiIp
 OwogCQkJcmV0dXJuIEZTRkFUQUw7CiAJCX0KQEAgLTk2Niw3ICs5ODksNyBA
 QAogCXBbMzFdID0gKHVfY2hhcikoZC5zaXplID4+IDI0KTsKIAlmYXRbaGVh
 ZF0uZmxhZ3MgfD0gRkFUX1VTRUQ7CiAJaWYgKGxzZWVrKGRvc2ZzLCBsZm9m
 ZiwgU0VFS19TRVQpICE9IGxmb2ZmCi0JICAgIHx8IHdyaXRlKGRvc2ZzLCBs
 ZmJ1ZiwgYm9vdC0+Q2x1c3RlclNpemUpICE9IGJvb3QtPkNsdXN0ZXJTaXpl
 KSB7CisJICAgIHx8IChzaXplX3Qpd3JpdGUoZG9zZnMsIGxmYnVmLCBib290
 LT5DbHVzdGVyU2l6ZSkgIT0gYm9vdC0+Q2x1c3RlclNpemUpIHsKIAkJcGVy
 cm9yKCJjb3VsZCBub3Qgd3JpdGUgTE9TVC5ESVIiKTsKIAkJcmV0dXJuIEZT
 RkFUQUw7CiAJfQpkaWZmIC1ydSBmc2NrX21zZG9zZnMub3JpZy9kb3Nmcy5o
 IGZzY2tfbXNkb3Nmcy9kb3Nmcy5oCi0tLSBmc2NrX21zZG9zZnMub3JpZy9k
 b3Nmcy5oCTIwMTAtMDEtMDYgMTE6MDc6MjQuMDAwMDAwMDAwICswMDAwCisr
 KyBmc2NrX21zZG9zZnMvZG9zZnMuaAkyMDEwLTAxLTE1IDE2OjIxOjQ2LjAw
 MDAwMDAwMCArMDAwMApAQCAtMTIsMTMgKzEyLDYgQEAKICAqIDIuIFJlZGlz
 dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
 YWJvdmUgY29weXJpZ2h0CiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
 b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
 CiAgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
 cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gQWxsIGFk
 dmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVz
 ZSBvZiB0aGlzIHNvZnR3YXJlCi0gKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZv
 bGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0gKglUaGlzIHByb2R1Y3QgaW5j
 bHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IE1hcnRpbiBIdXNlbWFubgot
 ICoJYW5kIFdvbGZnYW5nIFNvbGZyYW5rLgotICogNC4gTmVpdGhlciB0aGUg
 bmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBj
 b250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
 cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQot
 ICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
 b24uCiAgKgogICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
 QVVUSE9SUyBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCiAgKiBJTVBM
 SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
 LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCkBAIC00NiwyMSArMzksMjEgQEAK
 ICAqIEZBVCBib290IGJsb2NrLgogICovCiBzdHJ1Y3QgYm9vdGJsb2NrIHsK
 LQl1X2ludAlCeXRlc1BlclNlYzsJCS8qIGJ5dGVzIHBlciBzZWN0b3IgKi8K
 LQl1X2ludAlTZWNQZXJDbHVzdDsJCS8qIHNlY3RvcnMgcGVyIGNsdXN0ZXIg
 Ki8KLQl1X2ludAlSZXNTZWN0b3JzOwkJLyogbnVtYmVyIG9mIHJlc2VydmVk
 IHNlY3RvcnMgKi8KLQl1X2ludAlGQVRzOwkJCS8qIG51bWJlciBvZiBGQVRz
 ICovCi0JdV9pbnQJUm9vdERpckVudHM7CQkvKiBudW1iZXIgb2Ygcm9vdCBk
 aXJlY3RvcnkgZW50cmllcyAqLwotCXVfaW50CU1lZGlhOwkJCS8qIG1lZGlh
 IGRlc2NyaXB0b3IgKi8KLQl1X2ludAlGQVRzbWFsbDsJCS8qIG51bWJlciBv
 ZiBzZWN0b3JzIHBlciBGQVQgKi8KKwl1X2ludAlicGJCeXRlc1BlclNlYzsJ
 CS8qIGJ5dGVzIHBlciBzZWN0b3IgKi8KKwl1X2ludAlicGJTZWNQZXJDbHVz
 dDsJCS8qIHNlY3RvcnMgcGVyIGNsdXN0ZXIgKi8KKwl1X2ludAlicGJSZXNT
 ZWN0b3JzOwkJLyogbnVtYmVyIG9mIHJlc2VydmVkIHNlY3RvcnMgKi8KKwl1
 X2ludAlicGJGQVRzOwkJLyogbnVtYmVyIG9mIGJwYkZBVHMgKi8KKwl1X2lu
 dAlicGJSb290RGlyRW50czsJCS8qIG51bWJlciBvZiByb290IGRpcmVjdG9y
 eSBlbnRyaWVzICovCisJdV9pbnQzMl90IGJwYlNlY3RvcnM7CQkvKiB0b3Rh
 bCBudW1iZXIgb2Ygc2VjdG9ycyAqLworCXVfaW50CWJwYk1lZGlhOwkJLyog
 bWVkaWEgZGVzY3JpcHRvciAqLworCXVfaW50CWJwYkZBVHNtYWxsOwkJLyog
 bnVtYmVyIG9mIHNlY3RvcnMgcGVyIEZBVCAqLwogCXVfaW50CVNlY1BlclRy
 YWNrOwkJLyogc2VjdG9ycyBwZXIgdHJhY2sgKi8KLQl1X2ludAlIZWFkczsJ
 CQkvKiBudW1iZXIgb2YgaGVhZHMgKi8KLQl1X2ludDMyX3QgU2VjdG9yczsJ
 CS8qIHRvdGFsIG51bWJlciBvZiBzZWN0b3JzICovCi0JdV9pbnQzMl90IEhp
 ZGRlblNlY3M7CQkvKiAjIG9mIGhpZGRlbiBzZWN0b3JzICovCi0JdV9pbnQz
 Ml90IEh1Z2VTZWN0b3JzOwkJLyogIyBvZiBzZWN0b3JzIGlmIGJwYlNlY3Rv
 cnMgPT0gMCAqLwotCXVfaW50CUZTSW5mbzsJCQkvKiBGU0luZm8gc2VjdG9y
 ICovCi0JdV9pbnQJQmFja3VwOwkJCS8qIEJhY2t1cCBvZiBCb290YmxvY2tz
 ICovCi0JY2xfdAlSb290Q2w7CQkJLyogU3RhcnQgb2YgUm9vdCBEaXJlY3Rv
 cnkgKi8KKwl1X2ludAlicGJIZWFkczsJCS8qIG51bWJlciBvZiBoZWFkcyAq
 LworCXVfaW50MzJfdCBicGJIaWRkZW5TZWNzOwkvKiAjIG9mIGhpZGRlbiBz
 ZWN0b3JzICovCisJdV9pbnQzMl90IGJwYkh1Z2VTZWN0b3JzOwkvKiAjIG9m
 IHNlY3RvcnMgaWYgYnBiYnBiU2VjdG9ycyA9PSAwICovCisJY2xfdAlicGJS
 b290Q2x1c3Q7CQkvKiBTdGFydCBvZiBSb290IERpcmVjdG9yeSAqLworCXVf
 aW50CWJwYkZTSW5mbzsJCS8qIEZTSW5mbyBzZWN0b3IgKi8KKwl1X2ludAli
 cGJCYWNrdXA7CQkvKiBCYWNrdXAgb2YgQm9vdGJsb2NrcyAqLwogCWNsX3QJ
 RlNGcmVlOwkJCS8qIE51bWJlciBvZiBmcmVlIGNsdXN0ZXJzIGFjYy4gRlNJ
 bmZvICovCiAJY2xfdAlGU05leHQ7CQkJLyogTmV4dCBmcmVlIGNsdXN0ZXIg
 YWNjLiBGU0luZm8gKi8KIApkaWZmIC1ydSBmc2NrX21zZG9zZnMub3JpZy9l
 eHQuaCBmc2NrX21zZG9zZnMvZXh0LmgKLS0tIGZzY2tfbXNkb3Nmcy5vcmln
 L2V4dC5oCTIwMTAtMDEtMDYgMTE6MDc6MjQuMDAwMDAwMDAwICswMDAwCisr
 KyBmc2NrX21zZG9zZnMvZXh0LmgJMjAxMC0wMS0xNSAxNjoxMDowNi4wMDAw
 MDAwMDAgKzAwMDAKQEAgLTEwLDEzICsxMCw2IEBACiAgKiAyLiBSZWRpc3Ry
 aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
 b3ZlIGNvcHlyaWdodAogICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
 ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQog
 ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
 b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIEFsbCBhZHZl
 cnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ug
 b2YgdGhpcyBzb2Z0d2FyZQotICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xs
 b3dpbmcgYWNrbm93bGVkZ2VtZW50OgotICoJVGhpcyBwcm9kdWN0IGluY2x1
 ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSBNYXJ0aW4gSHVzZW1hbm4KLSAq
 CWFuZCBXb2xmZ2FuZyBTb2xmcmFuay4KLSAqIDQuIE5laXRoZXIgdGhlIG5h
 bWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29u
 dHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
 b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAq
 ICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
 LgogICoKICAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFV
 VEhPUlMgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgogICogSU1QTElF
 RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
 VEhFIElNUExJRUQgV0FSUkFOVElFUwpAQCAtNzcsMTIgKzcwLDEyIEBACiAj
 ZGVmaW5lCUZTRElSTU9ECTIJCS8qIFNvbWUgZGlyZWN0b3J5IHdhcyBtb2Rp
 ZmllZCAqLwogI2RlZmluZQlGU0ZBVE1PRAk0CQkvKiBUaGUgRkFUIHdhcyBt
 b2RpZmllZCAqLwogI2RlZmluZQlGU0VSUk9SCQk4CQkvKiBTb21lIHVucmVj
 b3ZlcmVkIGVycm9yIHJlbWFpbnMgKi8KLSNkZWZpbmUJRlNGQVRBTAkJMTYJ
 CS8qIFNvbWUgdW5yZWNvdmVyYWJsZSBlcnJvciBvY2N1cmVkICovCisjZGVm
 aW5lCUZTRkFUQUwJCTE2CQkvKiBTb21lIHVucmVjb3ZlcmFibGUgZXJyb3Ig
 b2NjdXJyZWQgKi8KICNkZWZpbmUgRlNESVJUWQkJMzIJCS8qIEZpbGUgc3lz
 dGVtIGlzIGRpcnR5ICovCiAjZGVmaW5lIEZTRklYRkFUCTY0CQkvKiBGaXgg
 ZmlsZSBzeXN0ZW0gRkFUICovCiAKIC8qCi0gKiByZWFkIGEgYm9vdCBibG9j
 ayBpbiBhIG1hY2hpbmUgaW5kZXBlbmRlbmQgZmFzaGlvbiBhbmQgdHJhbnNs
 YXRlCisgKiByZWFkIGEgYm9vdCBibG9jayBpbiBhIG1hY2hpbmUgaW5kZXBl
 bmRlbnQgZmFzaGlvbiBhbmQgdHJhbnNsYXRlCiAgKiBpdCBpbnRvIG91ciBz
 dHJ1Y3QgYm9vdGJsb2NrLgogICovCiBpbnQgcmVhZGJvb3QoaW50LCBzdHJ1
 Y3QgYm9vdGJsb2NrICopOwpAQCAtOTYsMTMgKzg5LDEzIEBACiAgKiBSZWFk
 IG9uZSBvZiB0aGUgRkFUIGNvcGllcyBhbmQgcmV0dXJuIGEgcG9pbnRlciB0
 byB0aGUgbmV3CiAgKiBhbGxvY2F0ZWQgYXJyYXkgaG9sZGluZyBvdXIgZGVz
 Y3JpcHRpb24gb2YgaXQuCiAgKi8KLWludCByZWFkZmF0KGludCwgc3RydWN0
 IGJvb3RibG9jayAqLCBpbnQsIHN0cnVjdCBmYXRFbnRyeSAqKik7CitpbnQg
 cmVhZGZhdChpbnQsIHN0cnVjdCBib290YmxvY2sgKiwgdV9pbnQsIHN0cnVj
 dCBmYXRFbnRyeSAqKik7CiAKIC8qCiAgKiBDaGVjayB0d28gRkFUIGNvcGll
 cyBmb3IgY29uc2lzdGVuY3kgYW5kIG1lcmdlIGNoYW5nZXMgaW50byB0aGUK
 LSAqIGZpcnN0IGlmIG5lY2Nlc3NhcnkuCisgKiBmaXJzdCBpZiBuZWNlc3Nh
 cnkuCiAgKi8KLWludCBjb21wYXJlZmF0KHN0cnVjdCBib290YmxvY2sgKiwg
 c3RydWN0IGZhdEVudHJ5ICosIHN0cnVjdCBmYXRFbnRyeSAqLCBpbnQpOwor
 aW50IGNvbXBhcmVmYXQoc3RydWN0IGJvb3RibG9jayAqLCBzdHJ1Y3QgZmF0
 RW50cnkgKiwgc3RydWN0IGZhdEVudHJ5ICosIHVfaW50KTsKIAogLyoKICAq
 IENoZWNrIGEgRkFUCmRpZmYgLXJ1IGZzY2tfbXNkb3Nmcy5vcmlnL2ZhdC5j
 IGZzY2tfbXNkb3Nmcy9mYXQuYwotLS0gZnNja19tc2Rvc2ZzLm9yaWcvZmF0
 LmMJMjAxMC0wMS0wNiAxMTowNzoyNC4wMDAwMDAwMDAgKzAwMDAKKysrIGZz
 Y2tfbXNkb3Nmcy9mYXQuYwkyMDEwLTAxLTE1IDE2OjIxOjU1LjAwMDAwMDAw
 MCArMDAwMApAQCAtMTAsMTMgKzEwLDYgQEAKICAqIDIuIFJlZGlzdHJpYnV0
 aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
 Y29weXJpZ2h0CiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
 b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAgKiAg
 ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
 ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gQWxsIGFkdmVydGlz
 aW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0
 aGlzIHNvZnR3YXJlCi0gKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2lu
 ZyBhY2tub3dsZWRnZW1lbnQ6Ci0gKglUaGlzIHByb2R1Y3QgaW5jbHVkZXMg
 c29mdHdhcmUgZGV2ZWxvcGVkIGJ5IE1hcnRpbiBIdXNlbWFubgotICoJYW5k
 IFdvbGZnYW5nIFNvbGZyYW5rLgotICogNC4gTmVpdGhlciB0aGUgbmFtZSBv
 ZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmli
 dXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
 ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAg
 d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCiAg
 KgogICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9S
 UyBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCiAgKiBJTVBMSUVEIFdB
 UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
 SU1QTElFRCBXQVJSQU5USUVTCkBAIC00NywxMCArNDAsMTAgQEAKICNpbmNs
 dWRlICJleHQuaCIKICNpbmNsdWRlICJmc3V0aWwuaCIKIAotc3RhdGljIGlu
 dCBjaGVja2NsbnVtKHN0cnVjdCBib290YmxvY2sgKiwgaW50LCBjbF90LCBj
 bF90ICopOwotc3RhdGljIGludCBjbHVzdGRpZmZlcihjbF90LCBjbF90ICos
 IGNsX3QgKiwgaW50KTsKK3N0YXRpYyBpbnQgY2hlY2tjbG51bShzdHJ1Y3Qg
 Ym9vdGJsb2NrICosIHVfaW50LCBjbF90LCBjbF90ICopOworc3RhdGljIGlu
 dCBjbHVzdGRpZmZlcihjbF90LCBjbF90ICosIGNsX3QgKiwgdV9pbnQpOwog
 c3RhdGljIGludCB0cnljbGVhcihzdHJ1Y3QgYm9vdGJsb2NrICosIHN0cnVj
 dCBmYXRFbnRyeSAqLCBjbF90LCBjbF90ICopOwotc3RhdGljIGludCBfcmVh
 ZGZhdChpbnQsIHN0cnVjdCBib290YmxvY2sgKiwgaW50LCB1X2NoYXIgKiop
 Oworc3RhdGljIGludCBfcmVhZGZhdChpbnQsIHN0cnVjdCBib290YmxvY2sg
 KiwgdV9pbnQsIHVfY2hhciAqKik7CiAKIC8qLQogICogVGhlIGZpcnN0IDIg
 RkFUIGVudHJpZXMgY29udGFpbiBwc2V1ZG8tY2x1c3RlciBudW1iZXJzIHdp
 dGggdGhlIGZvbGxvd2luZwpAQCAtODAsMTAgKzczLDEwIEBACiAJaWYgKGJv
 b3QtPkNsdXN0TWFzayAhPSBDTFVTVDE2X01BU0sgJiYgYm9vdC0+Q2x1c3RN
 YXNrICE9IENMVVNUMzJfTUFTSykKIAkJcmV0dXJuIDA7CiAKLQlvZmYgPSBi
 b290LT5SZXNTZWN0b3JzOwotCW9mZiAqPSBib290LT5CeXRlc1BlclNlYzsK
 KwlvZmYgPSBib290LT5icGJSZXNTZWN0b3JzOworCW9mZiAqPSBib290LT5i
 cGJCeXRlc1BlclNlYzsKIAotCWJ1ZmZlciA9IG1hbGxvYyhib290LT5CeXRl
 c1BlclNlYyk7CisJYnVmZmVyID0gbWFsbG9jKGJvb3QtPmJwYkJ5dGVzUGVy
 U2VjKTsKIAlpZiAoYnVmZmVyID09IE5VTEwpIHsKIAkJcGVycm9yKCJObyBz
 cGFjZSBmb3IgRkFUIik7CiAJCXJldHVybiAxOwpAQCAtOTQsNyArODcsNyBA
 QAogCQlnb3RvIGVycjsKIAl9CiAKLQlpZiAocmVhZChmcywgYnVmZmVyLCBi
 b290LT5CeXRlc1BlclNlYykgIT0gYm9vdC0+Qnl0ZXNQZXJTZWMpIHsKKwlp
 ZiAocmVhZChmcywgYnVmZmVyLCBib290LT5icGJCeXRlc1BlclNlYykgIT0g
 Ym9vdC0+YnBiQnl0ZXNQZXJTZWMpIHsKIAkJcGVycm9yKCJVbmFibGUgdG8g
 cmVhZCBGQVQiKTsKIAkJZ290byBlcnI7CiAJfQpAQCAtMTAzLDcgKzk2LDcg
 QEAKIAkgKiBJZiB3ZSBkb24ndCB1bmRlcnN0YW5kIHRoZSBGQVQsIHRoZW4g
 dGhlIGZpbGUgc3lzdGVtIG11c3QgYmUKIAkgKiBhc3N1bWVkIHRvIGJlIHVu
 Y2xlYW4uCiAJICovCi0JaWYgKGJ1ZmZlclswXSAhPSBib290LT5NZWRpYSB8
 fCBidWZmZXJbMV0gIT0gMHhmZikKKwlpZiAoYnVmZmVyWzBdICE9IGJvb3Qt
 PmJwYk1lZGlhIHx8IGJ1ZmZlclsxXSAhPSAweGZmKQogCQlnb3RvIGVycjsK
 IAlpZiAoYm9vdC0+Q2x1c3RNYXNrID09IENMVVNUMTZfTUFTSykgewogCQlp
 ZiAoKGJ1ZmZlclsyXSAmIDB4ZjgpICE9IDB4ZjggfHwgKGJ1ZmZlclszXSAm
 IDB4M2YpICE9IDB4M2YpCkBAIC0xMzUsNyArMTI4LDcgQEAKICAqIENoZWNr
 IGEgY2x1c3RlciBudW1iZXIgZm9yIHZhbGlkIHZhbHVlCiAgKi8KIHN0YXRp
 YyBpbnQKLWNoZWNrY2xudW0oc3RydWN0IGJvb3RibG9jayAqYm9vdCwgaW50
 IGZhdCwgY2xfdCBjbCwgY2xfdCAqbmV4dCkKK2NoZWNrY2xudW0oc3RydWN0
 IGJvb3RibG9jayAqYm9vdCwgdV9pbnQgZmF0LCBjbF90IGNsLCBjbF90ICpu
 ZXh0KQogewogCWlmICgqbmV4dCA+PSAoQ0xVU1RfUlNSVkQmYm9vdC0+Q2x1
 c3RNYXNrKSkKIAkJKm5leHQgfD0gfmJvb3QtPkNsdXN0TWFzazsKQEAgLTE2
 NiwyNiArMTU5LDI2IEBACiAgKiBSZWFkIGEgRkFUIGZyb20gZGlzay4gUmV0
 dXJucyAxIGlmIHN1Y2Nlc3NmdWwsIDAgb3RoZXJ3aXNlLgogICovCiBzdGF0
 aWMgaW50Ci1fcmVhZGZhdChpbnQgZnMsIHN0cnVjdCBib290YmxvY2sgKmJv
 b3QsIGludCBubywgdV9jaGFyICoqYnVmZmVyKQorX3JlYWRmYXQoaW50IGZz
 LCBzdHJ1Y3QgYm9vdGJsb2NrICpib290LCB1X2ludCBubywgdV9jaGFyICoq
 YnVmZmVyKQogewogCW9mZl90IG9mZjsKIAotCSpidWZmZXIgPSBtYWxsb2Mo
 Ym9vdC0+RkFUc2VjcyAqIGJvb3QtPkJ5dGVzUGVyU2VjKTsKKwkqYnVmZmVy
 ID0gbWFsbG9jKGJvb3QtPkZBVHNlY3MgKiBib290LT5icGJCeXRlc1BlclNl
 Yyk7CiAJaWYgKCpidWZmZXIgPT0gTlVMTCkgewogCQlwZXJyb3IoIk5vIHNw
 YWNlIGZvciBGQVQiKTsKIAkJcmV0dXJuIDA7CiAJfQogCi0Jb2ZmID0gYm9v
 dC0+UmVzU2VjdG9ycyArIG5vICogYm9vdC0+RkFUc2VjczsKLQlvZmYgKj0g
 Ym9vdC0+Qnl0ZXNQZXJTZWM7CisJb2ZmID0gYm9vdC0+YnBiUmVzU2VjdG9y
 cyArIG5vICogYm9vdC0+RkFUc2VjczsKKwlvZmYgKj0gYm9vdC0+YnBiQnl0
 ZXNQZXJTZWM7CiAKIAlpZiAobHNlZWsoZnMsIG9mZiwgU0VFS19TRVQpICE9
 IG9mZikgewogCQlwZXJyb3IoIlVuYWJsZSB0byByZWFkIEZBVCIpOwogCQln
 b3RvIGVycjsKIAl9CiAKLQlpZiAocmVhZChmcywgKmJ1ZmZlciwgYm9vdC0+
 RkFUc2VjcyAqIGJvb3QtPkJ5dGVzUGVyU2VjKQotCSAgICAhPSBib290LT5G
 QVRzZWNzICogYm9vdC0+Qnl0ZXNQZXJTZWMpIHsKKwlpZiAoKHNpemVfdCly
 ZWFkKGZzLCAqYnVmZmVyLCBib290LT5GQVRzZWNzICogYm9vdC0+YnBiQnl0
 ZXNQZXJTZWMpCisJICAgICE9IGJvb3QtPkZBVHNlY3MgKiBib290LT5icGJC
 eXRlc1BlclNlYykgewogCQlwZXJyb3IoIlVuYWJsZSB0byByZWFkIEZBVCIp
 OwogCQlnb3RvIGVycjsKIAl9CkBAIC0yMDEsMjYgKzE5NCwyOCBAQAogICog
 UmVhZCBhIEZBVCBhbmQgZGVjb2RlIGl0IGludG8gaW50ZXJuYWwgZm9ybWF0
 CiAgKi8KIGludAotcmVhZGZhdChpbnQgZnMsIHN0cnVjdCBib290YmxvY2sg
 KmJvb3QsIGludCBubywgc3RydWN0IGZhdEVudHJ5ICoqZnApCityZWFkZmF0
 KGludCBmcywgc3RydWN0IGJvb3RibG9jayAqYm9vdCwgdV9pbnQgbm8sIHN0
 cnVjdCBmYXRFbnRyeSAqKmZwKQogewogCXN0cnVjdCBmYXRFbnRyeSAqZmF0
 OwogCXVfY2hhciAqYnVmZmVyLCAqcDsKIAljbF90IGNsOwogCWludCByZXQg
 PSBGU09LOworCXNpemVfdCBsZW47CiAKIAlib290LT5OdW1GcmVlID0gYm9v
 dC0+TnVtQmFkID0gMDsKIAogCWlmICghX3JlYWRmYXQoZnMsIGJvb3QsIG5v
 LCAmYnVmZmVyKSkKIAkJcmV0dXJuIEZTRkFUQUw7CiAJCQotCWZhdCA9IGNh
 bGxvYyhib290LT5OdW1DbHVzdGVycywgc2l6ZW9mKHN0cnVjdCBmYXRFbnRy
 eSkpOworCWZhdCA9IG1hbGxvYyhsZW4gPSBib290LT5OdW1DbHVzdGVycyAq
 IHNpemVvZihzdHJ1Y3QgZmF0RW50cnkpKTsKIAlpZiAoZmF0ID09IE5VTEwp
 IHsKIAkJcGVycm9yKCJObyBzcGFjZSBmb3IgRkFUIik7CiAJCWZyZWUoYnVm
 ZmVyKTsKIAkJcmV0dXJuIEZTRkFUQUw7CiAJfQorCSh2b2lkKW1lbXNldChm
 YXQsIDAsIGxlbik7CiAKLQlpZiAoYnVmZmVyWzBdICE9IGJvb3QtPk1lZGlh
 CisJaWYgKGJ1ZmZlclswXSAhPSBib290LT5icGJNZWRpYQogCSAgICB8fCBi
 dWZmZXJbMV0gIT0gMHhmZiB8fCBidWZmZXJbMl0gIT0gMHhmZgogCSAgICB8
 fCAoYm9vdC0+Q2x1c3RNYXNrID09IENMVVNUMTZfTUFTSyAmJiBidWZmZXJb
 M10gIT0gMHhmZikKIAkgICAgfHwgKGJvb3QtPkNsdXN0TWFzayA9PSBDTFVT
 VDMyX01BU0sKQEAgLTIzNCw3ICsyMjksNyBAQAogCQkgKiBmaWxlIHN5c3Rl
 bSBpcyBkaXJ0eSBpZiBpdCBkb2Vzbid0IHJlYm9vdCBjbGVhbmx5LgogCQkg
 KiBDaGVjayB0aGlzIHNwZWNpYWwgY29uZGl0aW9uIGJlZm9yZSBlcnJvcnJp
 bmcgb3V0LgogCQkgKi8KLQkJaWYgKGJ1ZmZlclswXSA9PSBib290LT5NZWRp
 YSAmJiBidWZmZXJbMV0gPT0gMHhmZgorCQlpZiAoYnVmZmVyWzBdID09IGJv
 b3QtPmJwYk1lZGlhICYmIGJ1ZmZlclsxXSA9PSAweGZmCiAJCSAgICAmJiBi
 dWZmZXJbMl0gPT0gMHhmZgogCQkgICAgJiYgKChib290LT5DbHVzdE1hc2sg
 PT0gQ0xVU1QxNl9NQVNLICYmIGJ1ZmZlclszXSA9PSAweDdmKQogCQkJfHwg
 KGJvb3QtPkNsdXN0TWFzayA9PSBDTFVTVDMyX01BU0sKQEAgLTMxMSw3ICsz
 MDYsMTEgQEAKIAl9CiAKIAlmcmVlKGJ1ZmZlcik7Ci0JKmZwID0gZmF0Owor
 CWlmIChyZXQgJiBGU0ZBVEFMKSB7CisJCWZyZWUoZmF0KTsKKwkJKmZwID0g
 TlVMTDsKKwl9IGVsc2UKKwkJKmZwID0gZmF0OwogCXJldHVybiByZXQ7CiB9
 CiAKQEAgLTMzMSw3ICszMzAsNyBAQAogfQogCiBzdGF0aWMgaW50Ci1jbHVz
 dGRpZmZlcihjbF90IGNsLCBjbF90ICpjcDEsIGNsX3QgKmNwMiwgaW50IGZh
 dG51bSkKK2NsdXN0ZGlmZmVyKGNsX3QgY2wsIGNsX3QgKmNwMSwgY2xfdCAq
 Y3AyLCB1X2ludCBmYXRudW0pCiB7CiAJaWYgKCpjcDEgPT0gQ0xVU1RfRlJF
 RSB8fCAqY3AxID49IENMVVNUX1JTUlZEKSB7CiAJCWlmICgqY3AyID09IENM
 VVNUX0ZSRUUgfHwgKmNwMiA+PSBDTFVTVF9SU1JWRCkgewpAQCAtMzQ2LDEz
 ICszNDUsMTMgQEAKIAkJCQl9CiAJCQkJcmV0dXJuIEZTRkFUQUw7CiAJCQl9
 Ci0JCQlwd2FybigiQ2x1c3RlciAldSBpcyBtYXJrZWQgJXMgaW4gRkFUIDAs
 ICVzIGluIEZBVCAlZFxuIiwKKwkJCXB3YXJuKCJDbHVzdGVyICV1IGlzIG1h
 cmtlZCAlcyBpbiBGQVQgMCwgJXMgaW4gRkFUICV1XG4iLAogCQkJICAgICAg
 Y2wsIHJzcnZkY2x0eXBlKCpjcDEpLCByc3J2ZGNsdHlwZSgqY3AyKSwgZmF0
 bnVtKTsKIAkJCWlmIChhc2soMCwgIlVzZSBGQVQgMCdzIGVudHJ5IikpIHsK
 IAkJCQkqY3AyID0gKmNwMTsKIAkJCQlyZXR1cm4gRlNGQVRNT0Q7CiAJCQl9
 Ci0JCQlpZiAoYXNrKDAsICJVc2UgRkFUICVkJ3MgZW50cnkiLCBmYXRudW0p
 KSB7CisJCQlpZiAoYXNrKDAsICJVc2UgRkFUICV1J3MgZW50cnkiLCBmYXRu
 dW0pKSB7CiAJCQkJKmNwMSA9ICpjcDI7CiAJCQkJcmV0dXJuIEZTRkFUTU9E
 OwogCQkJfQpAQCAtMzYwLDcgKzM1OSw3IEBACiAJCX0KIAkJcHdhcm4oIkNs
 dXN0ZXIgJXUgaXMgbWFya2VkICVzIGluIEZBVCAwLCBidXQgY29udGludWVz
 IHdpdGggY2x1c3RlciAldSBpbiBGQVQgJWRcbiIsCiAJCSAgICAgIGNsLCBy
 c3J2ZGNsdHlwZSgqY3AxKSwgKmNwMiwgZmF0bnVtKTsKLQkJaWYgKGFzaygw
 LCAiVXNlIGNvbnRpbnVhdGlvbiBmcm9tIEZBVCAlZCIsIGZhdG51bSkpIHsK
 KwkJaWYgKGFzaygwLCAiVXNlIGNvbnRpbnVhdGlvbiBmcm9tIEZBVCAldSIs
 IGZhdG51bSkpIHsKIAkJCSpjcDEgPSAqY3AyOwogCQkJcmV0dXJuIEZTRkFU
 TU9EOwogCQl9CkBAIC0zNzEsNyArMzcwLDcgQEAKIAkJcmV0dXJuIEZTRkFU
 QUw7CiAJfQogCWlmICgqY3AyID09IENMVVNUX0ZSRUUgfHwgKmNwMiA+PSBD
 TFVTVF9SU1JWRCkgewotCQlwd2FybigiQ2x1c3RlciAldSBjb250aW51ZXMg
 d2l0aCBjbHVzdGVyICV1IGluIEZBVCAwLCBidXQgaXMgbWFya2VkICVzIGlu
 IEZBVCAlZFxuIiwKKwkJcHdhcm4oIkNsdXN0ZXIgJXUgY29udGludWVzIHdp
 dGggY2x1c3RlciAldSBpbiBGQVQgMCwgYnV0IGlzIG1hcmtlZCAlcyBpbiBG
 QVQgJXVcbiIsCiAJCSAgICAgIGNsLCAqY3AxLCByc3J2ZGNsdHlwZSgqY3Ay
 KSwgZmF0bnVtKTsKIAkJaWYgKGFzaygwLCAiVXNlIGNvbnRpbnVhdGlvbiBm
 cm9tIEZBVCAwIikpIHsKIAkJCSpjcDIgPSAqY3AxOwpAQCAtMzgzLDEzICsz
 ODIsMTMgQEAKIAkJfQogCQlyZXR1cm4gRlNFUlJPUjsKIAl9Ci0JcHdhcm4o
 IkNsdXN0ZXIgJXUgY29udGludWVzIHdpdGggY2x1c3RlciAldSBpbiBGQVQg
 MCwgYnV0IHdpdGggY2x1c3RlciAldSBpbiBGQVQgJWRcbiIsCisJcHdhcm4o
 IkNsdXN0ZXIgJXUgY29udGludWVzIHdpdGggY2x1c3RlciAldSBpbiBGQVQg
 MCwgYnV0IHdpdGggY2x1c3RlciAldSBpbiBGQVQgJXVcbiIsCiAJICAgICAg
 Y2wsICpjcDEsICpjcDIsIGZhdG51bSk7CiAJaWYgKGFzaygwLCAiVXNlIGNv
 bnRpbnVhdGlvbiBmcm9tIEZBVCAwIikpIHsKIAkJKmNwMiA9ICpjcDE7CiAJ
 CXJldHVybiBGU0ZBVE1PRDsKIAl9Ci0JaWYgKGFzaygwLCAiVXNlIGNvbnRp
 bnVhdGlvbiBmcm9tIEZBVCAlZCIsIGZhdG51bSkpIHsKKwlpZiAoYXNrKDAs
 ICJVc2UgY29udGludWF0aW9uIGZyb20gRkFUICV1IiwgZmF0bnVtKSkgewog
 CQkqY3AxID0gKmNwMjsKIAkJcmV0dXJuIEZTRkFUTU9EOwogCX0KQEAgLTQw
 MSw4ICs0MDAsOCBAQAogICogaW50byB0aGUgZmlyc3Qgb25lLgogICovCiBp
 bnQKLWNvbXBhcmVmYXQoc3RydWN0IGJvb3RibG9jayAqYm9vdCwgc3RydWN0
 IGZhdEVudHJ5ICpmaXJzdCwgCi0gICAgc3RydWN0IGZhdEVudHJ5ICpzZWNv
 bmQsIGludCBmYXRudW0pCitjb21wYXJlZmF0KHN0cnVjdCBib290YmxvY2sg
 KmJvb3QsIHN0cnVjdCBmYXRFbnRyeSAqZmlyc3QsCisgICAgc3RydWN0IGZh
 dEVudHJ5ICpzZWNvbmQsIHVfaW50IGZhdG51bSkKIHsKIAljbF90IGNsOwog
 CWludCByZXQgPSBGU09LOwpAQCAtNTQyLDEyICs1NDEsMTIgQEAKIHsKIAl1
 X2NoYXIgKmJ1ZmZlciwgKnA7CiAJY2xfdCBjbDsKLQlpbnQgaTsKLQl1X2lu
 dDMyX3QgZmF0c3o7CisJdV9pbnQgaTsKKwlzaXplX3QgZmF0c3o7CiAJb2Zm
 X3Qgb2ZmOwogCWludCByZXQgPSBGU09LOwogCi0JYnVmZmVyID0gbWFsbG9j
 KGZhdHN6ID0gYm9vdC0+RkFUc2VjcyAqIGJvb3QtPkJ5dGVzUGVyU2VjKTsK
 KwlidWZmZXIgPSBtYWxsb2MoZmF0c3ogPSBib290LT5GQVRzZWNzICogYm9v
 dC0+YnBiQnl0ZXNQZXJTZWMpOwogCWlmIChidWZmZXIgPT0gTlVMTCkgewog
 CQlwZXJyb3IoIk5vIHNwYWNlIGZvciBGQVQiKTsKIAkJcmV0dXJuIEZTRkFU
 QUw7CkBAIC01NTYsNyArNTU1LDcgQEAKIAlib290LT5OdW1GcmVlID0gMDsK
 IAlwID0gYnVmZmVyOwogCWlmIChjb3JyZWN0X2ZhdCkgewotCQkqcCsrID0g
 KHVfY2hhcilib290LT5NZWRpYTsKKwkJKnArKyA9ICh1X2NoYXIpYm9vdC0+
 YnBiTWVkaWE7CiAJCSpwKysgPSAweGZmOwogCQkqcCsrID0gMHhmZjsKIAkJ
 c3dpdGNoIChib290LT5DbHVzdE1hc2spIHsKQEAgLTYyOSwxMSArNjI4LDEx
 IEBACiAJCQlicmVhazsKIAkJfQogCX0KLQlmb3IgKGkgPSAwOyBpIDwgYm9v
 dC0+RkFUczsgaSsrKSB7Ci0JCW9mZiA9IGJvb3QtPlJlc1NlY3RvcnMgKyBp
 ICogYm9vdC0+RkFUc2VjczsKLQkJb2ZmICo9IGJvb3QtPkJ5dGVzUGVyU2Vj
 OworCWZvciAoaSA9IDA7IGkgPCBib290LT5icGJGQVRzOyBpKyspIHsKKwkJ
 b2ZmID0gYm9vdC0+YnBiUmVzU2VjdG9ycyArIGkgKiBib290LT5GQVRzZWNz
 OworCQlvZmYgKj0gYm9vdC0+YnBiQnl0ZXNQZXJTZWM7CiAJCWlmIChsc2Vl
 ayhmcywgb2ZmLCBTRUVLX1NFVCkgIT0gb2ZmCi0JCSAgICB8fCB3cml0ZShm
 cywgYnVmZmVyLCBmYXRzeikgIT0gZmF0c3opIHsKKwkJICAgIHx8IChzaXpl
 X3Qpd3JpdGUoZnMsIGJ1ZmZlciwgZmF0c3opICE9IGZhdHN6KSB7CiAJCQlw
 ZXJyb3IoIlVuYWJsZSB0byB3cml0ZSBGQVQiKTsKIAkJCXJldCA9IEZTRkFU
 QUw7IC8qIFJldHVybiBpbW1lZGlhdGVseT8JCVhYWCAqLwogCQl9CkBAIC02
 NzMsNyArNjcyLDcgQEAKIAl9CiAJZmluaXNobGYoKTsKIAotCWlmIChib290
 LT5GU0luZm8pIHsKKwlpZiAoYm9vdC0+YnBiRlNJbmZvKSB7CiAJCXJldCA9
 IDA7CiAJCWlmIChib290LT5GU0ZyZWUgIT0gYm9vdC0+TnVtRnJlZSkgewog
 CQkJcHdhcm4oIkZyZWUgc3BhY2UgaW4gRlNJbmZvIGJsb2NrICglZCkgbm90
 IGNvcnJlY3QgKCVkKVxuIiwKQEAgLTY4MywxNyArNjgyLDYgQEAKIAkJCQly
 ZXQgPSAxOwogCQkJfQogCQl9Ci0JCWlmIChib290LT5OdW1GcmVlICYmIGZh
 dFtib290LT5GU05leHRdLm5leHQgIT0gQ0xVU1RfRlJFRSkgewotCQkJcHdh
 cm4oIk5leHQgZnJlZSBjbHVzdGVyIGluIEZTSW5mbyBibG9jayAoJXUpIG5v
 dCBmcmVlXG4iLAotCQkJICAgICAgYm9vdC0+RlNOZXh0KTsKLQkJCWlmIChh
 c2soMSwgIkZpeCIpKQotCQkJCWZvciAoaGVhZCA9IENMVVNUX0ZJUlNUOyBo
 ZWFkIDwgYm9vdC0+TnVtQ2x1c3RlcnM7IGhlYWQrKykKLQkJCQkJaWYgKGZh
 dFtoZWFkXS5uZXh0ID09IENMVVNUX0ZSRUUpIHsKLQkJCQkJCWJvb3QtPkZT
 TmV4dCA9IGhlYWQ7Ci0JCQkJCQlyZXQgPSAxOwotCQkJCQkJYnJlYWs7Ci0J
 CQkJCX0KLQkJfQogCQlpZiAocmV0KQogCQkJbW9kIHw9IHdyaXRlZnNpbmZv
 KGRvc2ZzLCBib290KTsKIAl9CmRpZmYgLXJ1IGZzY2tfbXNkb3Nmcy5vcmln
 L2ZzY2tfbXNkb3Nmcy44IGZzY2tfbXNkb3Nmcy9mc2NrX21zZG9zZnMuOAot
 LS0gZnNja19tc2Rvc2ZzLm9yaWcvZnNja19tc2Rvc2ZzLjgJMjAxMC0wMS0w
 NiAxMTowNzoyNC4wMDAwMDAwMDAgKzAwMDAKKysrIGZzY2tfbXNkb3Nmcy9m
 c2NrX21zZG9zZnMuOAkyMDEwLTAxLTE0IDIzOjExOjQyLjAwMDAwMDAwMCAr
 MDAwMApAQCAtMTEsMTMgKzExLDYgQEAKIC5cIiAyLiBSZWRpc3RyaWJ1dGlv
 bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
 cHlyaWdodAogLlwiICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
 bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKIC5cIiAg
 ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
 ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotLlwiIDMuIEFsbCBhZHZlcnRp
 c2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2Yg
 dGhpcyBzb2Z0d2FyZQotLlwiICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93
 aW5nIGFja25vd2xlZGdlbWVudDoKLS5cIglUaGlzIHByb2R1Y3QgaW5jbHVk
 ZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IE1hcnRpbiBIdXNlbWFubgotLlwi
 CWFuZCBXb2xmZ2FuZyBTb2xmcmFuay4KLS5cIiA0LiBOZWl0aGVyIHRoZSBu
 YW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNv
 bnRyaWJ1dG9ycwotLlwiICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
 cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQot
 LlwiICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
 aW9uLgogLlwiCiAuXCIgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
 SEUgQVVUSE9SUyBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCiAuXCIg
 SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
 RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwpkaWZmIC1ydSBmc2NrX21z
 ZG9zZnMub3JpZy9tYWluLmMgZnNja19tc2Rvc2ZzL21haW4uYwotLS0gZnNj
 a19tc2Rvc2ZzLm9yaWcvbWFpbi5jCTIwMTAtMDEtMDYgMTE6MDc6MjQuMDAw
 MDAwMDAwICswMDAwCisrKyBmc2NrX21zZG9zZnMvbWFpbi5jCTIwMTAtMDEt
 MTQgMjM6MTE6NDIuMDAwMDAwMDAwICswMDAwCkBAIC0xMCwxMyArMTAsNiBA
 QAogICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
 cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAqICAgIG5vdGljZSwg
 dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
 Y2xhaW1lciBpbiB0aGUKICAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
 aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
 Ci0gKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcg
 ZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLSAqICAgIG11c3Qg
 ZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLSAqCVRo
 aXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgTWFy
 dGluIEh1c2VtYW5uCi0gKglhbmQgV29sZmdhbmcgU29sZnJhbmsuCi0gKiA0
 LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUg
 bmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQg
 dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0
 aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
 aXR0ZW4gcGVybWlzc2lvbi4KICAqCiAgKiBUSElTIFNPRlRXQVJFIElTIFBS
 T1ZJREVEIEJZIFRIRSBBVVRIT1JTIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJF
 U1MgT1IKICAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
 Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKQEAgLTQw
 LDcgKzMzLDYgQEAKIAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUg
 PHN0cmluZy5oPgotI2luY2x1ZGUgPGN0eXBlLmg+CiAjaW5jbHVkZSA8c3Rk
 aW8uaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KICNpbmNsdWRlIDxlcnJuby5o
 Pgo=
 
 --0-1059020741-1263591359=:76287--


More information about the freebsd-bugs mailing list