From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tiago Vignatti Subject: [PATCH igt v7 1/6] lib: Add gem_userptr and __gem_userptr helpers Date: Tue, 22 Dec 2015 19:36:49 -0200 Message-ID: <1450820214-12509-7-git-send-email-tiago.vignatti@intel.com> References: <1450820214-12509-1-git-send-email-tiago.vignatti@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTP id 19BBB6E3B8 for ; Tue, 22 Dec 2015 13:37:22 -0800 (PST) In-Reply-To: <1450820214-12509-1-git-send-email-tiago.vignatti@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: daniel.thompson@linaro.org, marcheu@google.com, daniel.vetter@ffwll.ch, thellstrom@vmware.com, jglisse@redhat.com, reveman@google.com List-Id: dri-devel@lists.freedesktop.org VGhpcyBwYXRjaCBtb3ZlcyB1c2VycHRyIGRlZmluaXRpb25zIGFuZCBoZWxwZXJzIGltcGxlbWVu dGF0aW9uIHRoYXQgd2VyZQpsb2NhbGx5IGluIGdlbV91c2VycHRyX2JlbmNobWFyayBhbmQgZ2Vt X3VzZXJwdHJfYmxpdHMgdG8gdGhlIGxpYnJhcnksIHNvIG90aGVyCnRlc3RzIGNhbiBtYWtlIHVz ZSBvZiB0aGVtIGFzIHdlbGwuIFRoZXJlJ3Mgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzLgoKdjI6IGFk ZGVkIF9fIGZ1bmN0aW9uIHRvIGRpZmZlcmVudGlhdGUgd2hlbiBlcnJvcnMgd2FudCB0byBiZSBo YW5kbGVkIGJhY2sgaW4KdGhlIGNhbGxlcjsgYnJpbmcgZ2VtX3VzZXJwdHJfc3luYyBiYWNrIHRv IGdlbV91c2VycHRyX2JsaXRzOyBhZGRlZCBndGtkb2MuCgpTaWduZWQtb2ZmLWJ5OiBUaWFnbyBW aWduYXR0aSA8dGlhZ28udmlnbmF0dGlAaW50ZWwuY29tPgotLS0KIGJlbmNobWFya3MvZ2VtX3Vz ZXJwdHJfYmVuY2htYXJrLmMgfCAgNTUgKysrLS0tLS0tLS0tLS0tLS0tLS0KIGxpYi9pb2N0bF93 cmFwcGVycy5jICAgICAgICAgICAgICAgfCAgNDEgKysrKysrKysrKysrKysrCiBsaWIvaW9jdGxf d3JhcHBlcnMuaCAgICAgICAgICAgICAgIHwgIDEzICsrKysrCiB0ZXN0cy9nZW1fdXNlcnB0cl9i bGl0cy5jICAgICAgICAgIHwgMTA0ICsrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KIDQgZmlsZXMgY2hhbmdlZCwgODYgaW5zZXJ0aW9ucygrKSwgMTI3IGRlbGV0aW9ucygtKQoK ZGlmZiAtLWdpdCBhL2JlbmNobWFya3MvZ2VtX3VzZXJwdHJfYmVuY2htYXJrLmMgYi9iZW5jaG1h cmtzL2dlbV91c2VycHRyX2JlbmNobWFyay5jCmluZGV4IDFlYWU3ZmYuLmY3NzE2ZGYgMTAwNjQ0 Ci0tLSBhL2JlbmNobWFya3MvZ2VtX3VzZXJwdHJfYmVuY2htYXJrLmMKKysrIGIvYmVuY2htYXJr cy9nZW1fdXNlcnB0cl9iZW5jaG1hcmsuYwpAQCAtNTgsMTcgKzU4LDYgQEAKICAgI2RlZmluZSBQ QUdFX1NJWkUgNDA5NgogI2VuZGlmCiAKLSNkZWZpbmUgTE9DQUxfSTkxNV9HRU1fVVNFUlBUUiAg ICAgICAweDMzCi0jZGVmaW5lIExPQ0FMX0lPQ1RMX0k5MTVfR0VNX1VTRVJQVFIgRFJNX0lPV1Ig KERSTV9DT01NQU5EX0JBU0UgKyBMT0NBTF9JOTE1X0dFTV9VU0VSUFRSLCBzdHJ1Y3QgbG9jYWxf aTkxNV9nZW1fdXNlcnB0cikKLXN0cnVjdCBsb2NhbF9pOTE1X2dlbV91c2VycHRyIHsKLQl1aW50 NjRfdCB1c2VyX3B0cjsKLQl1aW50NjRfdCB1c2VyX3NpemU7Ci0JdWludDMyX3QgZmxhZ3M7Ci0j ZGVmaW5lIExPQ0FMX0k5MTVfVVNFUlBUUl9SRUFEX09OTFkgKDE8PDApCi0jZGVmaW5lIExPQ0FM X0k5MTVfVVNFUlBUUl9VTlNZTkNIUk9OSVpFRCAoMTw8MzEpCi0JdWludDMyX3QgaGFuZGxlOwot fTsKLQogc3RhdGljIHVpbnQzMl90IHVzZXJwdHJfZmxhZ3MgPSBMT0NBTF9JOTE1X1VTRVJQVFJf VU5TWU5DSFJPTklaRUQ7CiAKICNkZWZpbmUgQk9fU0laRSAoNjU1MzYpCkBAIC04MywzMCArNzIs NiBAQCBzdGF0aWMgdm9pZCBnZW1fdXNlcnB0cl90ZXN0X3N5bmNocm9uaXplZCh2b2lkKQogCXVz ZXJwdHJfZmxhZ3MgPSAwOwogfQogCi1zdGF0aWMgaW50IGdlbV91c2VycHRyKGludCBmZCwgdm9p ZCAqcHRyLCBpbnQgc2l6ZSwgaW50IHJlYWRfb25seSwgdWludDMyX3QgKmhhbmRsZSkKLXsKLQlz dHJ1Y3QgbG9jYWxfaTkxNV9nZW1fdXNlcnB0ciB1c2VycHRyOwotCWludCByZXQ7Ci0KLQl1c2Vy cHRyLnVzZXJfcHRyID0gKHVpbnRwdHJfdClwdHI7Ci0JdXNlcnB0ci51c2VyX3NpemUgPSBzaXpl OwotCXVzZXJwdHIuZmxhZ3MgPSB1c2VycHRyX2ZsYWdzOwotCWlmIChyZWFkX29ubHkpCi0JCXVz ZXJwdHIuZmxhZ3MgfD0gTE9DQUxfSTkxNV9VU0VSUFRSX1JFQURfT05MWTsKLQotCXJldCA9IGRy bUlvY3RsKGZkLCBMT0NBTF9JT0NUTF9JOTE1X0dFTV9VU0VSUFRSLCAmdXNlcnB0cik7Ci0JaWYg KHJldCkKLQkJcmV0ID0gZXJybm87Ci0JaWd0X3NraXBfb25fZihyZXQgPT0gRU5PREVWICYmCi0J CSAgICAgICh1c2VycHRyX2ZsYWdzICYgTE9DQUxfSTkxNV9VU0VSUFRSX1VOU1lOQ0hST05JWkVE KSA9PSAwICYmCi0JCSAgICAgICFyZWFkX29ubHksCi0JCSAgICAgICJTa2lwcGluZywgc3luY2hy b25pemVkIG1hcHBpbmdzIHdpdGggbm8ga2VybmVsIENPTkZJR19NTVVfTk9USUZJRVI/Iik7Ci0J aWYgKHJldCA9PSAwKQotCQkqaGFuZGxlID0gdXNlcnB0ci5oYW5kbGU7Ci0KLQlyZXR1cm4gcmV0 OwotfQotCiBzdGF0aWMgdm9pZCAqKmhhbmRsZV9wdHJfbWFwOwogc3RhdGljIHVuc2lnbmVkIGlu dCBudW1faGFuZGxlX3B0cl9tYXA7CiAKQEAgLTE0NCw4ICsxMDksNyBAQCBzdGF0aWMgdWludDMy X3QgY3JlYXRlX3VzZXJwdHJfYm8oaW50IGZkLCBpbnQgc2l6ZSkKIAlyZXQgPSBwb3NpeF9tZW1h bGlnbigmcHRyLCBQQUdFX1NJWkUsIHNpemUpOwogCWlndF9hc3NlcnQocmV0ID09IDApOwogCi0J cmV0ID0gZ2VtX3VzZXJwdHIoZmQsICh1aW50MzJfdCAqKXB0ciwgc2l6ZSwgMCwgJmhhbmRsZSk7 Ci0JaWd0X2Fzc2VydChyZXQgPT0gMCk7CisJZ2VtX3VzZXJwdHIoZmQsICh1aW50MzJfdCAqKXB0 ciwgc2l6ZSwgMCwgdXNlcnB0cl9mbGFncywgJmhhbmRsZSk7CiAJYWRkX2hhbmRsZV9wdHIoaGFu ZGxlLCBwdHIpOwogCiAJcmV0dXJuIGhhbmRsZTsKQEAgLTE2Nyw3ICsxMzEsNyBAQCBzdGF0aWMg aW50IGhhc191c2VycHRyKGludCBmZCkKIAlhc3NlcnQocG9zaXhfbWVtYWxpZ24oJnB0ciwgUEFH RV9TSVpFLCBQQUdFX1NJWkUpID09IDApOwogCW9sZGZsYWdzID0gdXNlcnB0cl9mbGFnczsKIAln ZW1fdXNlcnB0cl90ZXN0X3Vuc3luY2hyb25pemVkKCk7Ci0JcmV0ID0gZ2VtX3VzZXJwdHIoZmQs IHB0ciwgUEFHRV9TSVpFLCAwLCAmaGFuZGxlKTsKKwlyZXQgPSBfX2dlbV91c2VycHRyKGZkLCBw dHIsIFBBR0VfU0laRSwgMCwgdXNlcnB0cl9mbGFncywgJmhhbmRsZSk7CiAJdXNlcnB0cl9mbGFn cyA9IG9sZGZsYWdzOwogCWlmIChyZXQgIT0gMCkgewogCQlmcmVlKHB0cik7CkBAIC0zNzksOSAr MzQzLDcgQEAgc3RhdGljIHZvaWQgdGVzdF9pbXBhY3Rfb3ZlcmxhcChpbnQgZmQsIGNvbnN0IGNo YXIgKnByZWZpeCkKIAogCQkJZm9yIChpID0gMCwgcCA9IGJsb2NrOyBpIDwgbnJfYm9zW3N1YnRl c3RdOwogCQkJICAgICBpKyssIHAgKz0gUEFHRV9TSVpFKQotCQkJCXJldCA9IGdlbV91c2VycHRy KGZkLCAodWludDMyX3QgKilwLCBCT19TSVpFLCAwLAotCQkJCQkJICAmaGFuZGxlc1tpXSk7Ci0J CQkJaWd0X2Fzc2VydChyZXQgPT0gMCk7CisJCQkJZ2VtX3VzZXJwdHIoZmQsICh1aW50MzJfdCAq KXAsIEJPX1NJWkUsIDAsIHVzZXJwdHJfZmxhZ3MsICZoYW5kbGVzW2ldKTsKIAkJfQogCiAJCWlm IChucl9ib3Nbc3VidGVzdF0gPiAwKQpAQCAtNDI3LDcgKzM4OSw2IEBAIHN0YXRpYyB2b2lkIHRl c3Rfc2luZ2xlKGludCBmZCkKIAljaGFyICpwdHIsICpib19wdHI7CiAJdWludDMyX3QgaGFuZGxl ID0gMDsKIAl1bnNpZ25lZCBsb25nIGl0ZXIgPSAwOwotCWludCByZXQ7CiAJdW5zaWduZWQgbG9u ZyBtYXBfc2l6ZSA9IEJPX1NJWkUgKyBQQUdFX1NJWkUgLSAxOwogCiAJcHRyID0gbW1hcChOVUxM LCBtYXBfc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwKQEAgLTQzOSw4ICs0MDAsNyBAQCBz dGF0aWMgdm9pZCB0ZXN0X3NpbmdsZShpbnQgZmQpCiAJc3RhcnRfdGVzdCh0ZXN0X2R1cmF0aW9u X3NlYyk7CiAKIAl3aGlsZSAocnVuX3Rlc3QpIHsKLQkJcmV0ID0gZ2VtX3VzZXJwdHIoZmQsIGJv X3B0ciwgQk9fU0laRSwgMCwgJmhhbmRsZSk7Ci0JCWFzc2VydChyZXQgPT0gMCk7CisJCWdlbV91 c2VycHRyKGZkLCBib19wdHIsIEJPX1NJWkUsIDAsIHVzZXJwdHJfZmxhZ3MsICZoYW5kbGUpOwog CQlnZW1fY2xvc2UoZmQsIGhhbmRsZSk7CiAJCWl0ZXIrKzsKIAl9CkBAIC00NTYsNyArNDE2LDYg QEAgc3RhdGljIHZvaWQgdGVzdF9tdWx0aXBsZShpbnQgZmQsIHVuc2lnbmVkIGludCBiYXRjaCwg aW50IHJhbmRvbSkKIAl1aW50MzJfdCBoYW5kbGVzWzEwMDAwXTsKIAlpbnQgbWFwWzEwMDAwXTsK IAl1bnNpZ25lZCBsb25nIGl0ZXIgPSAwOwotCWludCByZXQ7CiAJaW50IGk7CiAJdW5zaWduZWQg bG9uZyBtYXBfc2l6ZSA9IGJhdGNoICogQk9fU0laRSArIFBBR0VfU0laRSAtIDE7CiAKQEAgLTQ3 OCwxMCArNDM3LDggQEAgc3RhdGljIHZvaWQgdGVzdF9tdWx0aXBsZShpbnQgZmQsIHVuc2lnbmVk IGludCBiYXRjaCwgaW50IHJhbmRvbSkKIAkJaWYgKHJhbmRvbSkKIAkJCWlndF9wZXJtdXRlX2Fy cmF5KG1hcCwgYmF0Y2gsIGlndF9leGNoYW5nZV9pbnQpOwogCQlmb3IgKGkgPSAwOyBpIDwgYmF0 Y2g7IGkrKykgewotCQkJcmV0ID0gZ2VtX3VzZXJwdHIoZmQsIGJvX3B0ciArIG1hcFtpXSAqIEJP X1NJWkUsCi0JCQkJCQlCT19TSVpFLAotCQkJCQkJMCwgJmhhbmRsZXNbaV0pOwotCQkJYXNzZXJ0 KHJldCA9PSAwKTsKKwkJCWdlbV91c2VycHRyKGZkLCBib19wdHIgKyBtYXBbaV0gKiBCT19TSVpF LCBCT19TSVpFLAorCQkJCQkJMCwgdXNlcnB0cl9mbGFncywgJmhhbmRsZXNbaV0pOwogCQl9CiAJ CWlmIChyYW5kb20pCiAJCQlpZ3RfcGVybXV0ZV9hcnJheShtYXAsIGJhdGNoLCBpZ3RfZXhjaGFu Z2VfaW50KTsKZGlmZiAtLWdpdCBhL2xpYi9pb2N0bF93cmFwcGVycy5jIGIvbGliL2lvY3RsX3dy YXBwZXJzLmMKaW5kZXggZTM0OGYyNi4uNmNhZDhhMiAxMDA2NDQKLS0tIGEvbGliL2lvY3RsX3dy YXBwZXJzLmMKKysrIGIvbGliL2lvY3RsX3dyYXBwZXJzLmMKQEAgLTg3MSw2ICs4NzEsNDcgQEAg dm9pZCBnZW1fY29udGV4dF9yZXF1aXJlX2Jhbl9wZXJpb2QoaW50IGZkKQogCWlndF9yZXF1aXJl KGhhc19iYW5fcGVyaW9kKTsKIH0KIAoraW50IF9fZ2VtX3VzZXJwdHIoaW50IGZkLCB2b2lkICpw dHIsIGludCBzaXplLCBpbnQgcmVhZF9vbmx5LCB1aW50MzJfdCBmbGFncywgdWludDMyX3QgKmhh bmRsZSkKK3sKKwlzdHJ1Y3QgbG9jYWxfaTkxNV9nZW1fdXNlcnB0ciB1c2VycHRyOworCWludCBy ZXQ7CisKKwltZW1zZXQoJnVzZXJwdHIsIDAsIHNpemVvZih1c2VycHRyKSk7CisJdXNlcnB0ci51 c2VyX3B0ciA9ICh1aW50cHRyX3QpcHRyOworCXVzZXJwdHIudXNlcl9zaXplID0gc2l6ZTsKKwl1 c2VycHRyLmZsYWdzID0gZmxhZ3M7CisJaWYgKHJlYWRfb25seSkKKwkJdXNlcnB0ci5mbGFncyB8 PSBMT0NBTF9JOTE1X1VTRVJQVFJfUkVBRF9PTkxZOworCisJcmV0ID0gZHJtSW9jdGwoZmQsIExP Q0FMX0lPQ1RMX0k5MTVfR0VNX1VTRVJQVFIsICZ1c2VycHRyKTsKKwlpZiAocmV0KQorCQlyZXQg PSBlcnJubzsKKwlpZ3Rfc2tpcF9vbl9mKHJldCA9PSBFTk9ERVYgJiYKKwkJCShmbGFncyAmIExP Q0FMX0k5MTVfVVNFUlBUUl9VTlNZTkNIUk9OSVpFRCkgPT0gMCAmJgorCQkJIXJlYWRfb25seSwK KwkJCSJTa2lwcGluZywgc3luY2hyb25pemVkIG1hcHBpbmdzIHdpdGggbm8ga2VybmVsIENPTkZJ R19NTVVfTk9USUZJRVI/Iik7CisJaWYgKHJldCA9PSAwKQorCQkqaGFuZGxlID0gdXNlcnB0ci5o YW5kbGU7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGdlbV91c2VycHRyOgorICogQGZk OiBvcGVuIGk5MTUgZHJtIGZpbGUgZGVzY3JpcHRvcgorICogQHB0cjogdXNlcnB0ciBwb2ludGVy IHRvIGJlIHBhc3NlZAorICogQHNpemU6IGRlc2lyZWQgc2l6ZSBvZiB0aGUgYnVmZmVyCisgKiBA cmVhZF9vbmx5OiBzcGVjaWZ5IHdoZXRoZXIgdXNlcnB0ciBpcyBvcGVuZWQgcmVhZCBvbmx5Cisg KiBAZmxhZ3M6IG90aGVyIHVzZXJwdHIgZmxhZ3MKKyAqIEBoYW5kbGU6IHJldHVybmVkIGhhbmRs ZSBmb3IgdGhlIG9iamVjdAorICoKKyAqIFJldHVybnMgdXNlcnB0ciBoYW5kbGUgZm9yIHRoZSBH RU0gb2JqZWN0LgorICovCit2b2lkIGdlbV91c2VycHRyKGludCBmZCwgdm9pZCAqcHRyLCBpbnQg c2l6ZSwgaW50IHJlYWRfb25seSwgdWludDMyX3QgZmxhZ3MsIHVpbnQzMl90ICpoYW5kbGUpCit7 CisJaWd0X2Fzc2VydF9lcShfX2dlbV91c2VycHRyKGZkLCBwdHIsIHNpemUsIHJlYWRfb25seSwg ZmxhZ3MsIGhhbmRsZSksIDApOworfQorCiAvKioKICAqIGdlbV9zd19maW5pc2g6CiAgKiBAZmQ6 IG9wZW4gaTkxNSBkcm0gZmlsZSBkZXNjcmlwdG9yCmRpZmYgLS1naXQgYS9saWIvaW9jdGxfd3Jh cHBlcnMuaCBiL2xpYi9pb2N0bF93cmFwcGVycy5oCmluZGV4IGZlMmY2ODcuLmJiOGE4NTggMTAw NjQ0Ci0tLSBhL2xpYi9pb2N0bF93cmFwcGVycy5oCisrKyBiL2xpYi9pb2N0bF93cmFwcGVycy5o CkBAIC0xMTIsNiArMTEyLDE5IEBAIHZvaWQgZ2VtX2NvbnRleHRfcmVxdWlyZV9wYXJhbShpbnQg ZmQsIHVpbnQ2NF90IHBhcmFtKTsKIHZvaWQgZ2VtX2NvbnRleHRfZ2V0X3BhcmFtKGludCBmZCwg c3RydWN0IGxvY2FsX2k5MTVfZ2VtX2NvbnRleHRfcGFyYW0gKnApOwogdm9pZCBnZW1fY29udGV4 dF9zZXRfcGFyYW0oaW50IGZkLCBzdHJ1Y3QgbG9jYWxfaTkxNV9nZW1fY29udGV4dF9wYXJhbSAq cCk7CiAKKyNkZWZpbmUgTE9DQUxfSTkxNV9HRU1fVVNFUlBUUiAgICAgICAweDMzCisjZGVmaW5l IExPQ0FMX0lPQ1RMX0k5MTVfR0VNX1VTRVJQVFIgRFJNX0lPV1IgKERSTV9DT01NQU5EX0JBU0Ug KyBMT0NBTF9JOTE1X0dFTV9VU0VSUFRSLCBzdHJ1Y3QgbG9jYWxfaTkxNV9nZW1fdXNlcnB0cikK K3N0cnVjdCBsb2NhbF9pOTE1X2dlbV91c2VycHRyIHsKKyAgdWludDY0X3QgdXNlcl9wdHI7Cisg IHVpbnQ2NF90IHVzZXJfc2l6ZTsKKyAgdWludDMyX3QgZmxhZ3M7CisjZGVmaW5lIExPQ0FMX0k5 MTVfVVNFUlBUUl9SRUFEX09OTFkgKDE8PDApCisjZGVmaW5lIExPQ0FMX0k5MTVfVVNFUlBUUl9V TlNZTkNIUk9OSVpFRCAoMTw8MzEpCisgIHVpbnQzMl90IGhhbmRsZTsKK307Cit2b2lkIGdlbV91 c2VycHRyKGludCBmZCwgdm9pZCAqcHRyLCBpbnQgc2l6ZSwgaW50IHJlYWRfb25seSwgdWludDMy X3QgZmxhZ3MsIHVpbnQzMl90ICpoYW5kbGUpOworaW50IF9fZ2VtX3VzZXJwdHIoaW50IGZkLCB2 b2lkICpwdHIsIGludCBzaXplLCBpbnQgcmVhZF9vbmx5LCB1aW50MzJfdCBmbGFncywgdWludDMy X3QgKmhhbmRsZSk7CisKIHZvaWQgZ2VtX3N3X2ZpbmlzaChpbnQgZmQsIHVpbnQzMl90IGhhbmRs ZSk7CiAKIGJvb2wgZ2VtX2JvX2J1c3koaW50IGZkLCB1aW50MzJfdCBoYW5kbGUpOwpkaWZmIC0t Z2l0IGEvdGVzdHMvZ2VtX3VzZXJwdHJfYmxpdHMuYyBiL3Rlc3RzL2dlbV91c2VycHRyX2JsaXRz LmMKaW5kZXggNmQzODI2MC4uOTVkN2NhMiAxMDA2NDQKLS0tIGEvdGVzdHMvZ2VtX3VzZXJwdHJf YmxpdHMuYworKysgYi90ZXN0cy9nZW1fdXNlcnB0cl9ibGl0cy5jCkBAIC02MSwxNyArNjEsNiBA QAogI2RlZmluZSBQQUdFX1NJWkUgNDA5NgogI2VuZGlmCiAKLSNkZWZpbmUgTE9DQUxfSTkxNV9H RU1fVVNFUlBUUiAgICAgICAweDMzCi0jZGVmaW5lIExPQ0FMX0lPQ1RMX0k5MTVfR0VNX1VTRVJQ VFIgRFJNX0lPV1IgKERSTV9DT01NQU5EX0JBU0UgKyBMT0NBTF9JOTE1X0dFTV9VU0VSUFRSLCBz dHJ1Y3QgbG9jYWxfaTkxNV9nZW1fdXNlcnB0cikKLXN0cnVjdCBsb2NhbF9pOTE1X2dlbV91c2Vy cHRyIHsKLQl1aW50NjRfdCB1c2VyX3B0cjsKLQl1aW50NjRfdCB1c2VyX3NpemU7Ci0JdWludDMy X3QgZmxhZ3M7Ci0jZGVmaW5lIExPQ0FMX0k5MTVfVVNFUlBUUl9SRUFEX09OTFkgKDE8PDApCi0j ZGVmaW5lIExPQ0FMX0k5MTVfVVNFUlBUUl9VTlNZTkNIUk9OSVpFRCAoMTw8MzEpCi0JdWludDMy X3QgaGFuZGxlOwotfTsKLQogc3RhdGljIHVpbnQzMl90IHVzZXJwdHJfZmxhZ3MgPSBMT0NBTF9J OTE1X1VTRVJQVFJfVU5TWU5DSFJPTklaRUQ7CiAKICNkZWZpbmUgV0lEVEggNTEyCkBAIC04OSwz MiArNzgsNiBAQCBzdGF0aWMgdm9pZCBnZW1fdXNlcnB0cl90ZXN0X3N5bmNocm9uaXplZCh2b2lk KQogCXVzZXJwdHJfZmxhZ3MgPSAwOwogfQogCi1zdGF0aWMgaW50IGdlbV91c2VycHRyKGludCBm ZCwgdm9pZCAqcHRyLCBpbnQgc2l6ZSwgaW50IHJlYWRfb25seSwgdWludDMyX3QgKmhhbmRsZSkK LXsKLQlzdHJ1Y3QgbG9jYWxfaTkxNV9nZW1fdXNlcnB0ciB1c2VycHRyOwotCWludCByZXQ7Ci0K LQltZW1zZXQoJnVzZXJwdHIsIDAsIHNpemVvZih1c2VycHRyKSk7Ci0JdXNlcnB0ci51c2VyX3B0 ciA9ICh1aW50cHRyX3QpcHRyOwotCXVzZXJwdHIudXNlcl9zaXplID0gc2l6ZTsKLQl1c2VycHRy LmZsYWdzID0gdXNlcnB0cl9mbGFnczsKLQlpZiAocmVhZF9vbmx5KQotCQl1c2VycHRyLmZsYWdz IHw9IExPQ0FMX0k5MTVfVVNFUlBUUl9SRUFEX09OTFk7Ci0KLQlyZXQgPSBkcm1Jb2N0bChmZCwg TE9DQUxfSU9DVExfSTkxNV9HRU1fVVNFUlBUUiwgJnVzZXJwdHIpOwotCWlmIChyZXQpCi0JCXJl dCA9IGVycm5vOwotCWlndF9za2lwX29uX2YocmV0ID09IEVOT0RFViAmJgotCQkgICAgICAodXNl cnB0cl9mbGFncyAmIExPQ0FMX0k5MTVfVVNFUlBUUl9VTlNZTkNIUk9OSVpFRCkgPT0gMCAmJgot CQkgICAgICAhcmVhZF9vbmx5LAotCQkgICAgICAiU2tpcHBpbmcsIHN5bmNocm9uaXplZCBtYXBw aW5ncyB3aXRoIG5vIGtlcm5lbCBDT05GSUdfTU1VX05PVElGSUVSPyIpOwotCWlmIChyZXQgPT0g MCkKLQkJKmhhbmRsZSA9IHVzZXJwdHIuaGFuZGxlOwotCi0JcmV0dXJuIHJldDsKLX0KLQotCiBz dGF0aWMgdm9pZCBnZW1fdXNlcnB0cl9zeW5jKGludCBmZCwgdWludDMyX3QgaGFuZGxlKQogewog CWdlbV9zZXRfZG9tYWluKGZkLCBoYW5kbGUsIEk5MTVfR0VNX0RPTUFJTl9DUFUsIEk5MTVfR0VN X0RPTUFJTl9DUFUpOwpAQCAtMjg5LDEwICsyNTIsOSBAQCBzdGF0aWMgdWludDMyX3QKIGNyZWF0 ZV91c2VycHRyKGludCBmZCwgdWludDMyX3QgdmFsLCB1aW50MzJfdCAqcHRyKQogewogCXVpbnQz Ml90IGhhbmRsZTsKLQlpbnQgaSwgcmV0OworCWludCBpOwogCi0JcmV0ID0gZ2VtX3VzZXJwdHIo ZmQsIHB0ciwgc2l6ZW9mKGxpbmVhciksIDAsICZoYW5kbGUpOwotCWlndF9hc3NlcnRfZXEocmV0 LCAwKTsKKwlnZW1fdXNlcnB0cihmZCwgcHRyLCBzaXplb2YobGluZWFyKSwgMCwgdXNlcnB0cl9m bGFncywgJmhhbmRsZSk7CiAJaWd0X2Fzc2VydChoYW5kbGUgIT0gMCk7CiAKIAkvKiBGaWxsIHRo ZSBCTyB3aXRoIGR3b3JkcyBzdGFydGluZyBhdCB2YWwgKi8KQEAgLTM2Myw3ICszMjUsNiBAQCBz dGF0aWMgdWludDMyX3QgY3JlYXRlX3VzZXJwdHJfYm8oaW50IGZkLCB1aW50NjRfdCBzaXplKQog ewogCXZvaWQgKnB0cjsKIAl1aW50MzJfdCBoYW5kbGU7Ci0JaW50IHJldDsKIAogCXB0ciA9IG1t YXAoTlVMTCwgc2l6ZSwKIAkJICAgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwKQEAgLTM3MSw4ICsz MzIsNyBAQCBzdGF0aWMgdWludDMyX3QgY3JlYXRlX3VzZXJwdHJfYm8oaW50IGZkLCB1aW50NjRf dCBzaXplKQogCQkgICAtMSwgMCk7CiAJaWd0X2Fzc2VydChwdHIgIT0gTUFQX0ZBSUxFRCk7CiAK LQlyZXQgPSBnZW1fdXNlcnB0cihmZCwgKHVpbnQzMl90ICopcHRyLCBzaXplLCAwLCAmaGFuZGxl KTsKLQlpZ3RfYXNzZXJ0X2VxKHJldCwgMCk7CisJZ2VtX3VzZXJwdHIoZmQsICh1aW50MzJfdCAq KXB0ciwgc2l6ZSwgMCwgdXNlcnB0cl9mbGFncywgJmhhbmRsZSk7CiAJYWRkX2hhbmRsZV9wdHIo aGFuZGxlLCBwdHIsIHNpemUpOwogCiAJcmV0dXJuIGhhbmRsZTsKQEAgLTQ1MCw3ICs0MTAsNyBA QCBzdGF0aWMgaW50IGhhc191c2VycHRyKGludCBmZCkKIAlpZ3RfYXNzZXJ0KHBvc2l4X21lbWFs aWduKCZwdHIsIFBBR0VfU0laRSwgUEFHRV9TSVpFKSA9PSAwKTsKIAlvbGRmbGFncyA9IHVzZXJw dHJfZmxhZ3M7CiAJZ2VtX3VzZXJwdHJfdGVzdF91bnN5bmNocm9uaXplZCgpOwotCXJldCA9IGdl bV91c2VycHRyKGZkLCBwdHIsIFBBR0VfU0laRSwgMCwgJmhhbmRsZSk7CisJcmV0ID0gX19nZW1f dXNlcnB0cihmZCwgcHRyLCBQQUdFX1NJWkUsIDAsIHVzZXJwdHJfZmxhZ3MsICZoYW5kbGUpOwog CXVzZXJwdHJfZmxhZ3MgPSBvbGRmbGFnczsKIAlpZiAocmV0ICE9IDApIHsKIAkJZnJlZShwdHIp OwpAQCAtNTA5LDcgKzQ2OSw3IEBAIHN0YXRpYyBpbnQgdGVzdF9hY2Nlc3NfY29udHJvbChpbnQg ZmQpCiAKIAkJaWd0X2Fzc2VydChwb3NpeF9tZW1hbGlnbigmcHRyLCBQQUdFX1NJWkUsIFBBR0Vf U0laRSkgPT0gMCk7CiAKLQkJcmV0ID0gZ2VtX3VzZXJwdHIoZmQsIHB0ciwgUEFHRV9TSVpFLCAw LCAmaGFuZGxlKTsKKwkJcmV0ID0gX19nZW1fdXNlcnB0cihmZCwgcHRyLCBQQUdFX1NJWkUsIDAs IHVzZXJwdHJfZmxhZ3MsICZoYW5kbGUpOwogCQlpZiAocmV0ID09IDApCiAJCQlnZW1fY2xvc2Uo ZmQsIGhhbmRsZSk7CiAJCWZyZWUocHRyKTsKQEAgLTUyNCwxMSArNDg0LDkgQEAgc3RhdGljIGlu dCB0ZXN0X2FjY2Vzc19jb250cm9sKGludCBmZCkKIHN0YXRpYyBpbnQgdGVzdF9pbnZhbGlkX251 bGxfcG9pbnRlcihpbnQgZmQpCiB7CiAJdWludDMyX3QgaGFuZGxlOwotCWludCByZXQ7CiAKIAkv KiBOVUxMIHBvaW50ZXIuICovCi0JcmV0ID0gZ2VtX3VzZXJwdHIoZmQsIE5VTEwsIFBBR0VfU0la RSwgMCwgJmhhbmRsZSk7Ci0JaWd0X2Fzc2VydF9lcShyZXQsIDApOworCWdlbV91c2VycHRyKGZk LCBOVUxMLCBQQUdFX1NJWkUsIDAsIHVzZXJwdHJfZmxhZ3MsICZoYW5kbGUpOwogCiAJY29weShm ZCwgaGFuZGxlLCBoYW5kbGUsIH4wKTsgLyogUVFRIFByZWNpc2UgZXJybm8/ICovCiAJZ2VtX2Ns b3NlKGZkLCBoYW5kbGUpOwpAQCAtNTQwLDcgKzQ5OCw2IEBAIHN0YXRpYyBpbnQgdGVzdF9pbnZh bGlkX2d0dF9tYXBwaW5nKGludCBmZCkKIHsKIAl1aW50MzJfdCBoYW5kbGUsIGhhbmRsZTI7CiAJ dm9pZCAqcHRyOwotCWludCByZXQ7CiAKIAkvKiBHVFQgbWFwcGluZyAqLwogCWhhbmRsZSA9IGNy ZWF0ZV9ibyhmZCwgMCk7CkBAIC01NTAsOCArNTA3LDcgQEAgc3RhdGljIGludCB0ZXN0X2ludmFs aWRfZ3R0X21hcHBpbmcoaW50IGZkKQogCWlndF9hc3NlcnQoKCh1bnNpZ25lZCBsb25nKXB0ciAm IChQQUdFX1NJWkUgLSAxKSkgPT0gMCk7CiAJaWd0X2Fzc2VydCgoc2l6ZW9mKGxpbmVhcikgJiAo UEFHRV9TSVpFIC0gMSkpID09IDApOwogCi0JcmV0ID0gZ2VtX3VzZXJwdHIoZmQsIHB0ciwgc2l6 ZW9mKGxpbmVhciksIDAsICZoYW5kbGUyKTsKLQlpZ3RfYXNzZXJ0X2VxKHJldCwgMCk7CisJZ2Vt X3VzZXJwdHIoZmQsIHB0ciwgc2l6ZW9mKGxpbmVhciksIDAsIHVzZXJwdHJfZmxhZ3MsICZoYW5k bGUyKTsKIAljb3B5KGZkLCBoYW5kbGUyLCBoYW5kbGUyLCB+MCk7IC8qIFFRUSBQcmVjaXNlIGVy cm5vPyAqLwogCWdlbV9jbG9zZShmZCwgaGFuZGxlMik7CiAKQEAgLTU5NCw4ICs1NTAsNyBAQCBz dGF0aWMgdm9pZCB0ZXN0X2ZvcmtlZF9hY2Nlc3MoaW50IGZkKQogI2lmZGVmIE1BRFZfRE9OVEZP UksKIAlyZXQgfD0gbWFkdmlzZShwdHIxLCBzaXplb2YobGluZWFyKSwgTUFEVl9ET05URk9SSyk7 CiAjZW5kaWYKLQlyZXQgfD0gZ2VtX3VzZXJwdHIoZmQsIHB0cjEsIHNpemVvZihsaW5lYXIpLCAw LCAmaGFuZGxlMSk7Ci0JaWd0X2Fzc2VydF9lcShyZXQsIDApOworCWdlbV91c2VycHRyKGZkLCBw dHIxLCBzaXplb2YobGluZWFyKSwgMCwgdXNlcnB0cl9mbGFncywgJmhhbmRsZTEpOwogCWlndF9h c3NlcnQocHRyMSk7CiAJaWd0X2Fzc2VydChoYW5kbGUxKTsKIApAQCAtNjAzLDggKzU1OCw3IEBA IHN0YXRpYyB2b2lkIHRlc3RfZm9ya2VkX2FjY2VzcyhpbnQgZmQpCiAjaWZkZWYgTUFEVl9ET05U Rk9SSwogCXJldCB8PSBtYWR2aXNlKHB0cjIsIHNpemVvZihsaW5lYXIpLCBNQURWX0RPTlRGT1JL KTsKICNlbmRpZgotCXJldCB8PSBnZW1fdXNlcnB0cihmZCwgcHRyMiwgc2l6ZW9mKGxpbmVhciks IDAsICZoYW5kbGUyKTsKLQlpZ3RfYXNzZXJ0X2VxKHJldCwgMCk7CisJZ2VtX3VzZXJwdHIoZmQs IHB0cjIsIHNpemVvZihsaW5lYXIpLCAwLCB1c2VycHRyX2ZsYWdzLCAmaGFuZGxlMik7CiAJaWd0 X2Fzc2VydChwdHIyKTsKIAlpZ3RfYXNzZXJ0KGhhbmRsZTIpOwogCkBAIC02NTEsOCArNjA1LDcg QEAgc3RhdGljIGludCB0ZXN0X2ZvcmJpZGRlbl9vcHMoaW50IGZkKQogCiAJaWd0X2Fzc2VydChw b3NpeF9tZW1hbGlnbigmcHRyLCBQQUdFX1NJWkUsIFBBR0VfU0laRSkgPT0gMCk7CiAKLQlyZXQg PSBnZW1fdXNlcnB0cihmZCwgcHRyLCBQQUdFX1NJWkUsIDAsICZoYW5kbGUpOwotCWlndF9hc3Nl cnRfZXEocmV0LCAwKTsKKwlnZW1fdXNlcnB0cihmZCwgcHRyLCBQQUdFX1NJWkUsIDAsIHVzZXJw dHJfZmxhZ3MsICZoYW5kbGUpOwogCiAJLyogcHJlYWQvcHdyaXRlIGFyZSBub3QgYWx3YXlzIGZv cmJpZGRlbiwgYnV0IHdoZW4gdGhleQogCSAqIGFyZSB0aGV5IHNob3VsZCBmYWlsIHdpdGggRUlO VkFMLgpAQCAtODM5LDE5ICs3OTIsMTkgQEAgc3RhdGljIGludCB0ZXN0X3VzYWdlX3Jlc3RyaWN0 aW9ucyhpbnQgZmQpCiAJaWd0X2Fzc2VydChwb3NpeF9tZW1hbGlnbigmcHRyLCBQQUdFX1NJWkUs IFBBR0VfU0laRSAqIDIpID09IDApOwogCiAJLyogQWRkcmVzcyBub3QgYWxpZ25lZC4gKi8KLQly ZXQgPSBnZW1fdXNlcnB0cihmZCwgKGNoYXIgKilwdHIgKyAxLCBQQUdFX1NJWkUsIDAsICZoYW5k bGUpOworCXJldCA9IF9fZ2VtX3VzZXJwdHIoZmQsIChjaGFyICopcHRyICsgMSwgUEFHRV9TSVpF LCAwLCB1c2VycHRyX2ZsYWdzLCAmaGFuZGxlKTsKIAlpZ3RfYXNzZXJ0X25lcShyZXQsIDApOwog CiAJLyogU2l6ZSBub3Qgcm91bmRlZCB0byBwYWdlIHNpemUuICovCi0JcmV0ID0gZ2VtX3VzZXJw dHIoZmQsIHB0ciwgUEFHRV9TSVpFIC0gMSwgMCwgJmhhbmRsZSk7CisJcmV0ID0gX19nZW1fdXNl cnB0cihmZCwgcHRyLCBQQUdFX1NJWkUgLSAxLCAwLCB1c2VycHRyX2ZsYWdzLCAmaGFuZGxlKTsK IAlpZ3RfYXNzZXJ0X25lcShyZXQsIDApOwogCiAJLyogQm90aCB3cm9uZy4gKi8KLQlyZXQgPSBn ZW1fdXNlcnB0cihmZCwgKGNoYXIgKilwdHIgKyAxLCBQQUdFX1NJWkUgLSAxLCAwLCAmaGFuZGxl KTsKKwlyZXQgPSBfX2dlbV91c2VycHRyKGZkLCAoY2hhciAqKXB0ciArIDEsIFBBR0VfU0laRSAt IDEsIDAsIHVzZXJwdHJfZmxhZ3MsICZoYW5kbGUpOwogCWlndF9hc3NlcnRfbmVxKHJldCwgMCk7 CiAKIAkvKiBSZWFkLW9ubHkgbm90IHN1cHBvcnRlZC4gKi8KLQlyZXQgPSBnZW1fdXNlcnB0cihm ZCwgKGNoYXIgKilwdHIsIFBBR0VfU0laRSwgMSwgJmhhbmRsZSk7CisJcmV0ID0gX19nZW1fdXNl cnB0cihmZCwgKGNoYXIgKilwdHIsIFBBR0VfU0laRSwgMSwgdXNlcnB0cl9mbGFncywgJmhhbmRs ZSk7CiAJaWd0X2Fzc2VydF9uZXEocmV0LCAwKTsKIAogCWZyZWUocHRyKTsKQEAgLTg3Myw3ICs4 MjYsNyBAQCBzdGF0aWMgaW50IHRlc3RfY3JlYXRlX2Rlc3Ryb3koaW50IGZkLCBpbnQgdGltZSkK IAkJZm9yIChuID0gMDsgbiA8IDEwMDA7IG4rKykgewogCQkJaWd0X2Fzc2VydChwb3NpeF9tZW1h bGlnbigmcHRyLCBQQUdFX1NJWkUsIFBBR0VfU0laRSkgPT0gMCk7CiAKLQkJCWRvX29yX2RpZShn ZW1fdXNlcnB0cihmZCwgcHRyLCBQQUdFX1NJWkUsIDAsICZoYW5kbGUpKTsKKwkJCWRvX29yX2Rp ZShfX2dlbV91c2VycHRyKGZkLCBwdHIsIFBBR0VfU0laRSwgMCwgdXNlcnB0cl9mbGFncywgJmhh bmRsZSkpOwogCiAJCQlnZW1fY2xvc2UoZmQsIGhhbmRsZSk7CiAJCQlmcmVlKHB0cik7CkBAIC0x MDY1LDQxICsxMDE4LDQwIEBAIHN0YXRpYyB2b2lkIHRlc3Rfb3ZlcmxhcChpbnQgZmQsIGludCBl eHBlY3RlZCkKIAogCWlndF9hc3NlcnQocG9zaXhfbWVtYWxpZ24oKHZvaWQgKikmcHRyLCBQQUdF X1NJWkUsIFBBR0VfU0laRSAqIDMpID09IDApOwogCi0JcmV0ID0gZ2VtX3VzZXJwdHIoZmQsIHB0 ciArIFBBR0VfU0laRSwgUEFHRV9TSVpFLCAwLCAmaGFuZGxlKTsKLQlpZ3RfYXNzZXJ0X2VxKHJl dCwgMCk7CisJZ2VtX3VzZXJwdHIoZmQsIHB0ciArIFBBR0VfU0laRSwgUEFHRV9TSVpFLCAwLCB1 c2VycHRyX2ZsYWdzLCAmaGFuZGxlKTsKIAogCS8qIGJlZm9yZSwgbm8gb3ZlcmxhcCAqLwotCXJl dCA9IGdlbV91c2VycHRyKGZkLCBwdHIsIFBBR0VfU0laRSwgMCwgJmhhbmRsZTIpOworCXJldCA9 IF9fZ2VtX3VzZXJwdHIoZmQsIHB0ciwgUEFHRV9TSVpFLCAwLCB1c2VycHRyX2ZsYWdzLCAmaGFu ZGxlMik7CiAJaWYgKHJldCA9PSAwKQogCQlnZW1fY2xvc2UoZmQsIGhhbmRsZTIpOwogCWlndF9h c3NlcnRfZXEocmV0LCAwKTsKIAogCS8qIGFmdGVyLCBubyBvdmVybGFwICovCi0JcmV0ID0gZ2Vt X3VzZXJwdHIoZmQsIHB0ciArIFBBR0VfU0laRSAqIDIsIFBBR0VfU0laRSwgMCwgJmhhbmRsZTIp OworCXJldCA9IF9fZ2VtX3VzZXJwdHIoZmQsIHB0ciArIFBBR0VfU0laRSAqIDIsIFBBR0VfU0la RSwgMCwgdXNlcnB0cl9mbGFncywgJmhhbmRsZTIpOwogCWlmIChyZXQgPT0gMCkKIAkJZ2VtX2Ns b3NlKGZkLCBoYW5kbGUyKTsKIAlpZ3RfYXNzZXJ0X2VxKHJldCwgMCk7CiAKIAkvKiBleGFjdGx5 IG92ZXJsYXBwaW5nICovCi0JcmV0ID0gZ2VtX3VzZXJwdHIoZmQsIHB0ciArIFBBR0VfU0laRSwg UEFHRV9TSVpFLCAwLCAmaGFuZGxlMik7CisJcmV0ID0gX19nZW1fdXNlcnB0cihmZCwgcHRyICsg UEFHRV9TSVpFLCBQQUdFX1NJWkUsIDAsIHVzZXJwdHJfZmxhZ3MsICZoYW5kbGUyKTsKIAlpZiAo cmV0ID09IDApCiAJCWdlbV9jbG9zZShmZCwgaGFuZGxlMik7CiAJaWd0X2Fzc2VydChyZXQgPT0g MCB8fCByZXQgPT0gZXhwZWN0ZWQpOwogCiAJLyogc3RhcnQgb3ZlcmxhcHMgKi8KLQlyZXQgPSBn ZW1fdXNlcnB0cihmZCwgcHRyLCBQQUdFX1NJWkUgKiAyLCAwLCAmaGFuZGxlMik7CisJcmV0ID0g X19nZW1fdXNlcnB0cihmZCwgcHRyLCBQQUdFX1NJWkUgKiAyLCAwLCB1c2VycHRyX2ZsYWdzLCAm aGFuZGxlMik7CiAJaWYgKHJldCA9PSAwKQogCQlnZW1fY2xvc2UoZmQsIGhhbmRsZTIpOwogCWln dF9hc3NlcnQocmV0ID09IDAgfHwgcmV0ID09IGV4cGVjdGVkKTsKIAogCS8qIGVuZCBvdmVybGFw cyAqLwotCXJldCA9IGdlbV91c2VycHRyKGZkLCBwdHIgKyBQQUdFX1NJWkUsIFBBR0VfU0laRSAq IDIsIDAsICZoYW5kbGUyKTsKKwlyZXQgPSBfX2dlbV91c2VycHRyKGZkLCBwdHIgKyBQQUdFX1NJ WkUsIFBBR0VfU0laRSAqIDIsIDAsIHVzZXJwdHJfZmxhZ3MsICZoYW5kbGUyKTsKIAlpZiAocmV0 ID09IDApCiAJCWdlbV9jbG9zZShmZCwgaGFuZGxlMik7CiAJaWd0X2Fzc2VydChyZXQgPT0gMCB8 fCByZXQgPT0gZXhwZWN0ZWQpOwogCiAJLyogc3Vic3VtZXMgKi8KLQlyZXQgPSBnZW1fdXNlcnB0 cihmZCwgcHRyLCBQQUdFX1NJWkUgKiAzLCAwLCAmaGFuZGxlMik7CisJcmV0ID0gX19nZW1fdXNl cnB0cihmZCwgcHRyLCBQQUdFX1NJWkUgKiAzLCAwLCB1c2VycHRyX2ZsYWdzLCAmaGFuZGxlMik7 CiAJaWYgKHJldCA9PSAwKQogCQlnZW1fY2xvc2UoZmQsIGhhbmRsZTIpOwogCWlndF9hc3NlcnQo cmV0ID09IDAgfHwgcmV0ID09IGV4cGVjdGVkKTsKQEAgLTExMjQsOCArMTA3Niw3IEBAIHN0YXRp YyB2b2lkIHRlc3RfdW5tYXAoaW50IGZkLCBpbnQgZXhwZWN0ZWQpCiAJYm9fcHRyID0gKGNoYXIg KilBTElHTigodW5zaWduZWQgbG9uZylwdHIsIFBBR0VfU0laRSk7CiAKIAlmb3IgKGkgPSAwOyBp IDwgbnVtX29iajsgaSsrLCBib19wdHIgKz0gc2l6ZW9mKGxpbmVhcikpIHsKLQkJcmV0ID0gZ2Vt X3VzZXJwdHIoZmQsIGJvX3B0ciwgc2l6ZW9mKGxpbmVhciksIDAsICZib1tpXSk7Ci0JCWlndF9h c3NlcnRfZXEocmV0LCAwKTsKKwkJZ2VtX3VzZXJwdHIoZmQsIGJvX3B0ciwgc2l6ZW9mKGxpbmVh ciksIDAsIHVzZXJwdHJfZmxhZ3MsICZib1tpXSk7CiAJfQogCiAJYm9bbnVtX29ial0gPSBjcmVh dGVfYm8oZmQsIDApOwpAQCAtMTE1OSw4ICsxMTEwLDcgQEAgc3RhdGljIHZvaWQgdGVzdF91bm1h cF9hZnRlcl9jbG9zZShpbnQgZmQpCiAJYm9fcHRyID0gKGNoYXIgKilBTElHTigodW5zaWduZWQg bG9uZylwdHIsIFBBR0VfU0laRSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbnVtX29iajsgaSsrLCBi b19wdHIgKz0gc2l6ZW9mKGxpbmVhcikpIHsKLQkJcmV0ID0gZ2VtX3VzZXJwdHIoZmQsIGJvX3B0 ciwgc2l6ZW9mKGxpbmVhciksIDAsICZib1tpXSk7Ci0JCWlndF9hc3NlcnRfZXEocmV0LCAwKTsK KwkJZ2VtX3VzZXJwdHIoZmQsIGJvX3B0ciwgc2l6ZW9mKGxpbmVhciksIDAsIHVzZXJwdHJfZmxh Z3MsICZib1tpXSk7CiAJfQogCiAJYm9bbnVtX29ial0gPSBjcmVhdGVfYm8oZmQsIDApOwpAQCAt MTIzMCw4ICsxMTgwLDcgQEAgc3RhdGljIHZvaWQgdGVzdF9zdHJlc3NfbW0oaW50IGZkKQogCWln dF9hc3NlcnRfZXEocmV0LCAwKTsKIAogCXdoaWxlIChsb29wcy0tKSB7Ci0JCXJldCA9IGdlbV91 c2VycHRyKGZkLCBwdHIsIFBBR0VfU0laRSwgMCwgJmhhbmRsZSk7Ci0JCWlndF9hc3NlcnRfZXEo cmV0LCAwKTsKKwkJZ2VtX3VzZXJwdHIoZmQsIHB0ciwgUEFHRV9TSVpFLCAwLCB1c2VycHRyX2Zs YWdzLCAmaGFuZGxlKTsKIAogCQlnZW1fY2xvc2UoZmQsIGhhbmRsZSk7CiAJfQpAQCAtMTI2NSw4 ICsxMjE0LDcgQEAgc3RhdGljIHZvaWQgKm1tX3VzZXJwdHJfY2xvc2VfdGhyZWFkKHZvaWQgKmRh dGEpCiAJd2hpbGUgKCF0LT5zdG9wKSB7CiAJCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZ0LT5tdXRl eCk7CiAJCWZvciAoaW50IGkgPSAwOyBpIDwgbnVtX2hhbmRsZXM7IGkrKykKLQkJCWlndF9hc3Nl cnRfZXEoZ2VtX3VzZXJwdHIodC0+ZmQsIHQtPnB0ciwgUEFHRV9TSVpFLCAwLCAmaGFuZGxlW2ld KSwKLQkJCQkgICAgICAwKTsKKwkJCWdlbV91c2VycHRyKHQtPmZkLCB0LT5wdHIsIFBBR0VfU0la RSwgMCwgdXNlcnB0cl9mbGFncywgJmhhbmRsZVtpXSk7CiAJCWZvciAoaW50IGkgPSAwOyBpIDwg bnVtX2hhbmRsZXM7IGkrKykKIAkJCWdlbV9jbG9zZSh0LT5mZCwgaGFuZGxlW2ldKTsKIAkJcHRo cmVhZF9tdXRleF9sb2NrKCZ0LT5tdXRleCk7Ci0tIAoyLjEuNAoKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmkt ZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcv bWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK