From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from metis.ext.pengutronix.de ([2001:6f8:1178:4:290:27ff:fe1d:cc33]) by merlin.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1WXdv3-0000wL-Dk for barebox@lists.infradead.org; Tue, 08 Apr 2014 21:51:04 +0000 From: Marc Kleine-Budde Date: Tue, 8 Apr 2014 23:50:42 +0200 Message-Id: <1396993842-31482-1-git-send-email-mkl@pengutronix.de> In-Reply-To: <53446E09.4080208@pengutronix.de> References: <53446E09.4080208@pengutronix.de> MIME-Version: 1.0 List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "barebox" Errors-To: barebox-bounces+u.kleine-koenig=pengutronix.de@lists.infradead.org Subject: [PATCH] 2048: port to barebox To: barebox@lists.infradead.org U2lnbmVkLW9mZi1ieTogTWFyYyBLbGVpbmUtQnVkZGUgPG1rbEBwZW5ndXRyb25peC5kZT4KLS0t CiBjb21tb24vMjA0OC8yMDQ4LmMgICAgfCAzNTcgKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysKIGNvbW1vbi8yMDQ4L0xJQ0VOU0UgICB8ICAyMSArKysK IGNvbW1vbi8yMDQ4L01ha2VmaWxlICB8ICAgMSArCiBjb21tb24vMjA0OC9SRUFETUUubWQgfCAg MzIgKysrKysKIGNvbW1vbi9NYWtlZmlsZSAgICAgICB8ICAgMSArCiA1IGZpbGVzIGNoYW5nZWQs IDQxMiBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29tbW9uLzIwNDgvMjA0OC5j CiBjcmVhdGUgbW9kZSAxMDA2NDQgY29tbW9uLzIwNDgvTElDRU5TRQogY3JlYXRlIG1vZGUgMTAw NjQ0IGNvbW1vbi8yMDQ4L01ha2VmaWxlCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29tbW9uLzIwNDgv UkVBRE1FLm1kCgpkaWZmIC0tZ2l0IGEvY29tbW9uLzIwNDgvMjA0OC5jIGIvY29tbW9uLzIwNDgv MjA0OC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlOTk3MGUKLS0tIC9k ZXYvbnVsbAorKysgYi9jb21tb24vMjA0OC8yMDQ4LmMKQEAgLTAsMCArMSwzNTcgQEAKKy8qCisg PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQorIE5hbWUgICAgICAgIDogMjA0OC5jCisgQXV0aG9yICAgICAg OiBNYXVyaXRzIHZhbiBkZXIgU2NoZWUKKyBEZXNjcmlwdGlvbiA6IENvbnNvbGUgdmVyc2lvbiBv ZiB0aGUgZ2FtZSAiMjA0OCIgZm9yIEdOVS9MaW51eAorID09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAq LworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8cmVhZGtleS5oPgorI2luY2x1ZGUg PGNvbW1hbmQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2RlZmluZSBTSVpFIDQKK3N0YXRp YyB1aW50MzJfdCBzY29yZTsKKworc3RhdGljIHZvaWQgZ2V0Q29sb3IodWludDE2X3QgdmFsdWUs IGNoYXIgKmNvbG9yLCBzaXplX3QgbGVuZ3RoKSB7CisjaWYgMAorCXVpbnQ4X3QgYmxhY2t3aGl0 ZVtdID0gezIzMiwyNTUsMjM0LDI1NSwyMzYsMjU1LDIzOCwyNTUsMjQwLDI1NSwyNDIsMjU1LDI0 NCwyNTUsMjQ2LDAsMjQ4LDAsMjQ5LDAsMjUwLDAsMjUxLDAsMjUyLDAsMjUzLDAsMjU0LDAsMjU1 LDB9OworCXVpbnQ4X3QgYmx1ZXJlZFtdID0gezIzNSwyNTUsNjMsMjU1LDU3LDI1NSw5MywyNTUs MTI5LDI1NSwxNjUsMjU1LDIwMSwyNTUsMjAwLDI1NSwxOTksMjU1LDE5OCwyNTUsMTk3LDI1NSwx OTYsMjU1LDE5NiwyNTUsMTk2LDI1NSwxOTYsMjU1LDE5NiwyNTV9OworI2VuZGlmCisJdWludDhf dCBvcmlnaW5hbFtdID0gezgsMjU1LDEsMjU1LDIsMjU1LDMsMjU1LDQsMjU1LDUsMjU1LDYsMjU1 LDcsMjU1LDksMCwxMCwwLDExLDAsMTIsMCwxMywwLDE0LDAsMjU1LDAsMjU1LDB9OworCXVpbnQ4 X3QgKnNjaGVtZSA9IG9yaWdpbmFsOworCXVpbnQ4X3QgKmJhY2tncm91bmQgPSBzY2hlbWUrMDsK Kwl1aW50OF90ICpmb3JlZ3JvdW5kID0gc2NoZW1lKzE7CisJaWYgKHZhbHVlID4gMCkgd2hpbGUg KHZhbHVlID4+PSAxKSB7CisJCWlmIChiYWNrZ3JvdW5kKzI8c2NoZW1lK3NpemVvZihvcmlnaW5h bCkpIHsKKwkJCWJhY2tncm91bmQrPTI7CisJCQlmb3JlZ3JvdW5kKz0yOworCQl9CisJfQorCXNu cHJpbnRmKGNvbG9yLGxlbmd0aCwiXDAzM1szODs1OyVkOzQ4OzU7JWRtIiwqZm9yZWdyb3VuZCwq YmFja2dyb3VuZCk7Cit9CisKK3N0YXRpYyB2b2lkIGRyYXdCb2FyZCh1aW50MTZfdCBib2FyZFtT SVpFXVtTSVpFXSkgeworCWludDhfdCB4LHk7CisJY2hhciBjb2xvcls0MF0sIHJlc2V0W10gPSAi XDAzM1ttIjsKKwlwcmludGYoIlwwMzNbSCIpOworCisJcHJpbnRmKCIyMDQ4LmMgJTE3ZCBwdHNc blxuIixzY29yZSk7CisKKwlmb3IgKHk9MDt5PFNJWkU7eSsrKSB7CisJCWZvciAoeD0wO3g8U0la RTt4KyspIHsKKwkJCWdldENvbG9yKGJvYXJkW3hdW3ldLGNvbG9yLDQwKTsKKwkJCXByaW50Zigi JXMiLGNvbG9yKTsKKwkJCXByaW50ZigiICAgICAgICIpOworCQkJcHJpbnRmKCIlcyIscmVzZXQp OworCQl9CisJCXByaW50ZigiXG4iKTsKKwkJZm9yICh4PTA7eDxTSVpFO3grKykgeworCQkJZ2V0 Q29sb3IoYm9hcmRbeF1beV0sY29sb3IsNDApOworCQkJcHJpbnRmKCIlcyIsY29sb3IpOworCQkJ aWYgKGJvYXJkW3hdW3ldIT0wKSB7CisJCQkJY2hhciBzWzhdOworCQkJCWludDhfdCB0OworCQkJ CXNucHJpbnRmKHMsOCwiJXUiLGJvYXJkW3hdW3ldKTsKKwkJCQl0ID0gNy1zdHJsZW4ocyk7CisJ CQkJcHJpbnRmKCIlKnMlcyUqcyIsdC10LzIsIiIscyx0LzIsIiIpOworCQkJfSBlbHNlIHsKKwkJ CQlwcmludGYoIiAgIMK3ICAgIik7CisJCQl9CisJCQlwcmludGYoIiVzIixyZXNldCk7CisJCX0K KwkJcHJpbnRmKCJcbiIpOworCQlmb3IgKHg9MDt4PFNJWkU7eCsrKSB7CisJCQlnZXRDb2xvcihi b2FyZFt4XVt5XSxjb2xvciw0MCk7CisJCQlwcmludGYoIiVzIixjb2xvcik7CisJCQlwcmludGYo IiAgICAgICAiKTsKKwkJCXByaW50ZigiJXMiLHJlc2V0KTsKKwkJfQorCQlwcmludGYoIlxuIik7 CisJfQorCXByaW50ZigiXG4iKTsKKwlwcmludGYoIiAgICAgICAg4oaQLOKGkSzihpIs4oaTIG9y IHEgICAgICAgIFxuIik7CisJcHJpbnRmKCJcMDMzW0EiKTsKK30KKworc3RhdGljIGludDhfdCBm aW5kVGFyZ2V0KHVpbnQxNl90IGFycmF5W1NJWkVdLGludDhfdCB4LGludDhfdCBzdG9wKSB7CisJ aW50OF90IHQ7CisJLy8gaWYgdGhlIHBvc2l0aW9uIGlzIGFscmVhZHkgb24gdGhlIGZpcnN0LCBk b24ndCBldmFsdWF0ZQorCWlmICh4PT0wKSB7CisJCXJldHVybiB4OworCX0KKwlmb3IodD14LTE7 dD49MDt0LS0pIHsKKwkJaWYgKGFycmF5W3RdIT0wKSB7CisJCQlpZiAoYXJyYXlbdF0hPWFycmF5 W3hdKSB7CisJCQkJLy8gbWVyZ2UgaXMgbm90IHBvc3NpYmxlLCB0YWtlIG5leHQgcG9zaXRpb24K KwkJCQlyZXR1cm4gdCsxOworCQkJfQorCQkJcmV0dXJuIHQ7CisJCX0gZWxzZSB7CisJCQkvLyB3 ZSBzaG91bGQgbm90IHNsaWRlIGZ1cnRoZXIsIHJldHVybiB0aGlzIG9uZQorCQkJaWYgKHQ9PXN0 b3ApIHsKKwkJCQlyZXR1cm4gdDsKKwkJCX0KKwkJfQorCX0KKwkvLyB3ZSBkaWQgbm90IGZpbmQg YQorCXJldHVybiB4OworfQorCitzdGF0aWMgYm9vbCBzbGlkZUFycmF5KHVpbnQxNl90IGFycmF5 W1NJWkVdKSB7CisJYm9vbCBzdWNjZXNzID0gZmFsc2U7CisJaW50OF90IHgsdCxzdG9wPTA7CisK Kwlmb3IgKHg9MDt4PFNJWkU7eCsrKSB7CisJCWlmIChhcnJheVt4XSE9MCkgeworCQkJdCA9IGZp bmRUYXJnZXQoYXJyYXkseCxzdG9wKTsKKwkJCS8vIGlmIHRhcmdldCBpcyBub3Qgb3JpZ2luYWwg cG9zaXRpb24sIHRoZW4gbW92ZSBvciBtZXJnZQorCQkJaWYgKHQhPXgpIHsKKwkJCQkvLyBpZiB0 YXJnZXQgaXMgbm90IHplcm8sIHNldCBzdG9wIHRvIGF2b2lkIGRvdWJsZSBtZXJnZQorCQkJCWlm IChhcnJheVt0XSE9MCkgeworCQkJCQlzY29yZSs9YXJyYXlbdF0rYXJyYXlbeF07CisJCQkJCXN0 b3AgPSB0KzE7CisJCQkJfQorCQkJCWFycmF5W3RdKz1hcnJheVt4XTsKKwkJCQlhcnJheVt4XT0w OworCQkJCXN1Y2Nlc3MgPSB0cnVlOworCQkJfQorCQl9CisJfQorCXJldHVybiBzdWNjZXNzOwor fQorCitzdGF0aWMgdm9pZCByb3RhdGVCb2FyZCh1aW50MTZfdCBib2FyZFtTSVpFXVtTSVpFXSkg eworCWludDhfdCBpLGosbj1TSVpFOworCXVpbnQxNl90IHRtcDsKKwlmb3IgKGk9MDsgaTxuLzI7 IGkrKyl7CisJCWZvciAoaj1pOyBqPG4taS0xOyBqKyspeworCQkJdG1wID0gYm9hcmRbaV1bal07 CisJCQlib2FyZFtpXVtqXSA9IGJvYXJkW2pdW24taS0xXTsKKwkJCWJvYXJkW2pdW24taS0xXSA9 IGJvYXJkW24taS0xXVtuLWotMV07CisJCQlib2FyZFtuLWktMV1bbi1qLTFdID0gYm9hcmRbbi1q LTFdW2ldOworCQkJYm9hcmRbbi1qLTFdW2ldID0gdG1wOworCQl9CisJfQorfQorCitzdGF0aWMg Ym9vbCBtb3ZlVXAodWludDE2X3QgYm9hcmRbU0laRV1bU0laRV0pIHsKKwlib29sIHN1Y2Nlc3Mg PSBmYWxzZTsKKwlpbnQ4X3QgeDsKKwlmb3IgKHg9MDt4PFNJWkU7eCsrKSB7CisJCXN1Y2Nlc3Mg fD0gc2xpZGVBcnJheShib2FyZFt4XSk7CisJfQorCXJldHVybiBzdWNjZXNzOworfQorCitzdGF0 aWMgYm9vbCBtb3ZlTGVmdCh1aW50MTZfdCBib2FyZFtTSVpFXVtTSVpFXSkgeworCWJvb2wgc3Vj Y2VzczsKKwlyb3RhdGVCb2FyZChib2FyZCk7CisJc3VjY2VzcyA9IG1vdmVVcChib2FyZCk7CisJ cm90YXRlQm9hcmQoYm9hcmQpOworCXJvdGF0ZUJvYXJkKGJvYXJkKTsKKwlyb3RhdGVCb2FyZChi b2FyZCk7CisJcmV0dXJuIHN1Y2Nlc3M7Cit9CisKK3N0YXRpYyBib29sIG1vdmVEb3duKHVpbnQx Nl90IGJvYXJkW1NJWkVdW1NJWkVdKSB7CisJYm9vbCBzdWNjZXNzOworCXJvdGF0ZUJvYXJkKGJv YXJkKTsKKwlyb3RhdGVCb2FyZChib2FyZCk7CisJc3VjY2VzcyA9IG1vdmVVcChib2FyZCk7CisJ cm90YXRlQm9hcmQoYm9hcmQpOworCXJvdGF0ZUJvYXJkKGJvYXJkKTsKKwlyZXR1cm4gc3VjY2Vz czsKK30KKworc3RhdGljIGJvb2wgbW92ZVJpZ2h0KHVpbnQxNl90IGJvYXJkW1NJWkVdW1NJWkVd KSB7CisJYm9vbCBzdWNjZXNzOworCXJvdGF0ZUJvYXJkKGJvYXJkKTsKKwlyb3RhdGVCb2FyZChi b2FyZCk7CisJcm90YXRlQm9hcmQoYm9hcmQpOworCXN1Y2Nlc3MgPSBtb3ZlVXAoYm9hcmQpOwor CXJvdGF0ZUJvYXJkKGJvYXJkKTsKKwlyZXR1cm4gc3VjY2VzczsKK30KKworc3RhdGljIGJvb2wg ZmluZFBhaXJEb3duKHVpbnQxNl90IGJvYXJkW1NJWkVdW1NJWkVdKSB7CisJYm9vbCBzdWNjZXNz ID0gZmFsc2U7CisJaW50OF90IHgseTsKKwlmb3IgKHg9MDt4PFNJWkU7eCsrKSB7CisJCWZvciAo eT0wO3k8U0laRS0xO3krKykgeworCQkJaWYgKGJvYXJkW3hdW3ldPT1ib2FyZFt4XVt5KzFdKSBy ZXR1cm4gdHJ1ZTsKKwkJfQorCX0KKwlyZXR1cm4gc3VjY2VzczsKK30KKworc3RhdGljIGludDE2 X3QgY291bnRFbXB0eSh1aW50MTZfdCBib2FyZFtTSVpFXVtTSVpFXSkgeworCWludDhfdCB4LHk7 CisJaW50MTZfdCBjb3VudD0wOworCWZvciAoeD0wO3g8U0laRTt4KyspIHsKKwkJZm9yICh5PTA7 eTxTSVpFO3krKykgeworCQkJaWYgKGJvYXJkW3hdW3ldPT0wKSB7CisJCQkJY291bnQrKzsKKwkJ CX0KKwkJfQorCX0KKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBib29sIGdhbWVFbmRlZCh1 aW50MTZfdCBib2FyZFtTSVpFXVtTSVpFXSkgeworCWJvb2wgZW5kZWQgPSB0cnVlOworCWlmIChj b3VudEVtcHR5KGJvYXJkKT4wKSByZXR1cm4gZmFsc2U7CisJaWYgKGZpbmRQYWlyRG93bihib2Fy ZCkpIHJldHVybiBmYWxzZTsKKwlyb3RhdGVCb2FyZChib2FyZCk7CisJaWYgKGZpbmRQYWlyRG93 bihib2FyZCkpIGVuZGVkID0gZmFsc2U7CisJcm90YXRlQm9hcmQoYm9hcmQpOworCXJvdGF0ZUJv YXJkKGJvYXJkKTsKKwlyb3RhdGVCb2FyZChib2FyZCk7CisJcmV0dXJuIGVuZGVkOworfQorCitz dGF0aWMgdm9pZCBhZGRSYW5kb20odWludDE2X3QgYm9hcmRbU0laRV1bU0laRV0pIHsKKwlpbnQ4 X3QgeCx5OworCWludDE2X3QgcixsZW49MDsKKwl1aW50MTZfdCBuLGxpc3RbU0laRSpTSVpFXVsy XTsKKworCWZvciAoeD0wO3g8U0laRTt4KyspIHsKKwkJZm9yICh5PTA7eTxTSVpFO3krKykgewor CQkJaWYgKGJvYXJkW3hdW3ldPT0wKSB7CisJCQkJbGlzdFtsZW5dWzBdPXg7CisJCQkJbGlzdFts ZW5dWzFdPXk7CisJCQkJbGVuKys7CisJCQl9CisJCX0KKwl9CisKKwlpZiAobGVuPjApIHsKKwkJ ciA9IHJhbmQoKSVsZW47CisJCXggPSBsaXN0W3JdWzBdOworCQl5ID0gbGlzdFtyXVsxXTsKKwkJ biA9ICgocmFuZCgpJTEwKS85KzEpKjI7CisJCWJvYXJkW3hdW3ldPW47CisJfQorfQorCitzdGF0 aWMgaW50IHRlc3Qodm9pZCkgeworCXVpbnQxNl90IGFycmF5W1NJWkVdOworCXVpbnQxNl90IGRh dGFbXSA9IHsKKwkJMCwwLDAsMiwJMiwwLDAsMCwKKwkJMCwwLDIsMiwJNCwwLDAsMCwKKwkJMCwy LDAsMiwJNCwwLDAsMCwKKwkJMiwwLDAsMiwJNCwwLDAsMCwKKwkJMiwwLDIsMCwJNCwwLDAsMCwK KwkJMiwyLDIsMCwJNCwyLDAsMCwKKwkJMiwwLDIsMiwJNCwyLDAsMCwKKwkJMiwyLDAsMiwJNCwy LDAsMCwKKwkJMiwyLDIsMiwJNCw0LDAsMCwKKwkJNCw0LDIsMiwJOCw0LDAsMCwKKwkJMiwyLDQs NCwJNCw4LDAsMCwKKwkJOCwwLDIsMiwJOCw0LDAsMCwKKwkJNCwwLDIsMiwJNCw0LDAsMAorCX07 CisJdWludDE2X3QgKmluLCpvdXQ7CisJdWludDE2X3QgdCx0ZXN0czsKKwl1aW50OF90IGk7CisJ Ym9vbCBzdWNjZXNzID0gdHJ1ZTsKKworCXRlc3RzID0gKHNpemVvZihkYXRhKS9zaXplb2YoZGF0 YVswXSkpLygyKlNJWkUpOworCWZvciAodD0wO3Q8dGVzdHM7dCsrKSB7CisJCWluID0gZGF0YSt0 KjIqU0laRTsKKwkJb3V0ID0gaW4gKyBTSVpFOworCQlmb3IgKGk9MDtpPFNJWkU7aSsrKSB7CisJ CQlhcnJheVtpXSA9IGluW2ldOworCQl9CisJCXNsaWRlQXJyYXkoYXJyYXkpOworCQlmb3IgKGk9 MDtpPFNJWkU7aSsrKSB7CisJCQlpZiAoYXJyYXlbaV0gIT0gb3V0W2ldKSB7CisJCQkJc3VjY2Vz cyA9IGZhbHNlOworCQkJfQorCQl9CisJCWlmIChzdWNjZXNzPT1mYWxzZSkgeworCQkJZm9yIChp PTA7aTxTSVpFO2krKykgeworCQkJCXByaW50ZigiJWQgIixpbltpXSk7CisJCQl9CisJCQlwcmlu dGYoIj0+ICIpOworCQkJZm9yIChpPTA7aTxTSVpFO2krKykgeworCQkJCXByaW50ZigiJWQgIixh cnJheVtpXSk7CisJCQl9CisJCQlwcmludGYoImV4cGVjdGVkICIpOworCQkJZm9yIChpPTA7aTxT SVpFO2krKykgeworCQkJCXByaW50ZigiJWQgIixpbltpXSk7CisJCQl9CisJCQlwcmludGYoIj0+ ICIpOworCQkJZm9yIChpPTA7aTxTSVpFO2krKykgeworCQkJCXByaW50ZigiJWQgIixvdXRbaV0p OworCQkJfQorCQkJcHJpbnRmKCJcbiIpOworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKHN1Y2Nl c3MpIHsKKwkJcHJpbnRmKCJBbGwgJXUgdGVzdHMgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5XG4iLHRl c3RzKTsKKwl9CisJcmV0dXJuICFzdWNjZXNzOworfQorCitzdGF0aWMgaW50IGRvXzIwNDgoaW50 IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkgeworCXVpbnQxNl90IGJvYXJkW1NJWkVdW1NJWkVdOworCWNo YXIgYzsKKwlib29sIHN1Y2Nlc3M7CisKKwlpZiAoYXJnYyA9PSAyICYmIHN0cmNtcChhcmd2WzFd LCJ0ZXN0Iik9PTApIHsKKwkJcmV0dXJuIHRlc3QoKTsKKwl9CisKKwlwcmludGYoIlwwMzNbPzI1 bFwwMzNbMkpcMDMzW0giKTsKKworCW1lbXNldChib2FyZCwwLHNpemVvZihib2FyZCkpOworCWFk ZFJhbmRvbShib2FyZCk7CisJYWRkUmFuZG9tKGJvYXJkKTsKKwlkcmF3Qm9hcmQoYm9hcmQpOwor CXdoaWxlICh0cnVlKSB7CisJCWM9cmVhZF9rZXkoKTsKKwkJc3dpdGNoKGMpIHsKKwkJCWNhc2Ug QkJfS0VZX0xFRlQ6CS8vIGxlZnQgYXJyb3cKKwkJCQlzdWNjZXNzID0gbW92ZUxlZnQoYm9hcmQp OyAgYnJlYWs7CisJCQljYXNlIEJCX0tFWV9SSUdIVDoJLy8gcmlnaHQgYXJyb3cKKwkJCQlzdWNj ZXNzID0gbW92ZVJpZ2h0KGJvYXJkKTsgYnJlYWs7CisJCQljYXNlIEJCX0tFWV9VUDoJLy8gdXAg YXJyb3cKKwkJCQlzdWNjZXNzID0gbW92ZVVwKGJvYXJkKTsgICAgYnJlYWs7CisJCQljYXNlIEJC X0tFWV9ET1dOOgkvLyBkb3duIGFycm93CisJCQkJc3VjY2VzcyA9IG1vdmVEb3duKGJvYXJkKTsg IGJyZWFrOworCQkJZGVmYXVsdDogc3VjY2VzcyA9IGZhbHNlOworCQl9CisJCWlmIChzdWNjZXNz KSB7CisJCQlkcmF3Qm9hcmQoYm9hcmQpOworCQkJdWRlbGF5KDE1MDAwMCk7CisJCQlhZGRSYW5k b20oYm9hcmQpOworCQkJZHJhd0JvYXJkKGJvYXJkKTsKKwkJCWlmIChnYW1lRW5kZWQoYm9hcmQp KSB7CisJCQkJcHJpbnRmKCIgICAgICAgICBHQU1FIE9WRVIgICAgICAgICAgXG4iKTsKKwkJCQli cmVhazsKKwkJCX0KKwkJfQorCQlpZiAoYz09J3EnKSB7CisJCQlwcmludGYoIiAgICAgICAgICAg IFFVSVQgICAgICAgICAgICBcbiIpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlwcmludGYoIlww MzNbPzI1aCIpOworCisJcmV0dXJuIDA7Cit9CisKK0JBUkVCT1hfQ01EX0hFTFBfU1RBUlQoMjA0 OCkKK0JBUkVCT1hfQ01EX0hFTFBfVVNBR0UoIjIwNDhcbiIpCitCQVJFQk9YX0NNRF9IRUxQX1NI T1JUKCJUaGUgMjA0OCBnYW1lXG4iKQorQkFSRUJPWF9DTURfSEVMUF9FTkQKKworQkFSRUJPWF9D TURfU1RBUlQoMjA0OCkKKwkuY21kCQk9IGRvXzIwNDgsCisJLnVzYWdlCQk9ICJVc2FnZTogMjA0 OCIsCisJQkFSRUJPWF9DTURfSEVMUChjbWRfMjA0OF9oZWxwKQorQkFSRUJPWF9DTURfRU5ECmRp ZmYgLS1naXQgYS9jb21tb24vMjA0OC9MSUNFTlNFIGIvY29tbW9uLzIwNDgvTElDRU5TRQpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGM1YzE1Ci0tLSAvZGV2L251bGwKKysr IGIvY29tbW9uLzIwNDgvTElDRU5TRQpAQCAtMCwwICsxLDIxIEBACitUaGUgTUlUIExpY2Vuc2Ug KE1JVCkKKworQ29weXJpZ2h0IChjKSAyMDE0IE1hdXJpdHMgdmFuIGRlciBTY2hlZQorCitQZXJt aXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBv YnRhaW5pbmcgYSBjb3B5CitvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50 YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAoraW4gdGhlIFNvZnR3YXJlIHdp dGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0 cwordG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJs aWNlbnNlLCBhbmQvb3Igc2VsbAorY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1p dCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCitmdXJuaXNoZWQgdG8gZG8gc28sIHN1 YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0 IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBh bGwKK2NvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKK1RI RSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBL SU5ELCBFWFBSRVNTIE9SCitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRI RSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorQVVU SE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdF UyBPUiBPVEhFUgorTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwg VE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKK09VVCBPRiBPUiBJTiBDT05ORUNUSU9O IFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCitT T0ZUV0FSRS4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9jb21tb24v MjA0OC9NYWtlZmlsZSBiL2NvbW1vbi8yMDQ4L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAuLmFlZmQ5YzMKLS0tIC9kZXYvbnVsbAorKysgYi9jb21tb24vMjA0OC9N YWtlZmlsZQpAQCAtMCwwICsxIEBACitvYmoteSArPSAyMDQ4Lm8KZGlmZiAtLWdpdCBhL2NvbW1v bi8yMDQ4L1JFQURNRS5tZCBiL2NvbW1vbi8yMDQ4L1JFQURNRS5tZApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi42MWYyYjBmCi0tLSAvZGV2L251bGwKKysrIGIvY29tbW9uLzIw NDgvUkVBRE1FLm1kCkBAIC0wLDAgKzEsMzIgQEAKKzIwNDguYworPT09PT09CisKKyFbc2NyZWVu c2hvdF0oaHR0cDovL3d3dy5sZWFzZXdlYmxhYnMuY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDE0 LzAzLzIwNDgxLnBuZykKKworQ29uc29sZSB2ZXJzaW9uIG9mIHRoZSBnYW1lICIyMDQ4IiBmb3Ig R05VL0xpbnV4CisKKyMjIyBHYW1lcGxheQorCitZb3UgY2FuIG1vdmUgdGhlIHRpbGVzIGluIGZv dXIgZGlyZWN0aW9ucyB1c2luZyB0aGUgYXJyb3cga2V5czogdXAsIGRvd24sIGxlZnQsIGFuZCBy aWdodC4gQWxsIG51bWJlcnMgb24gdGhlIGJvYXJkIHdpbGwgc2xpZGUgaW50byB0aGF0IGRpcmVj dGlvbiB1bnRpbCB0aGV5IGhpdCB0aGUgd2FsbCBhbmQgaWYgdGhleSBidW1wIGludG8gZWFjaCBv dGhlciB0aGVuIHR3byBudW1iZXJzIHdpbGwgYmUgY29tYmluZWQgaW50byBvbmUgaWYgdGhleSBo YXZlIHRoZSBzYW1lIHZhbHVlLiBFYWNoIG51bWJlciB3aWxsIG9ubHkgYmUgY29tYmluZWQgb25j ZSBwZXIgbW92ZS4gRXZlcnkgbW92ZSBhIG5ldyBudW1iZXIgMiBvciA0IGFwcGVhcnMuIElmIHlv dSBoYXZlIGEgMjA0OCBvbiB0aGUgYm9hcmQgeW91IGhhdmUgd29uLCBidXQgeW91IGxvc2Ugb25j ZSB0aGUgYm9hcmQgaXMgZnVsbCBhbmQgeW91IGNhbm5vdCBtYWtlIGEgbW92ZS4gCisKKyMjIyBS ZXF1aXJlbWVudHMKKworLSBDIGNvbXBpbGVyCistIEdOVS9MaW51eAorCisjIyMgSW5zdGFsbGF0 aW9uCisKK2BgYAord2dldCBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbWV2ZHNj aGVlLzIwNDguYy9tYXN0ZXIvMjA0OC5jCitnY2MgLW8gMjA0OCAyMDQ4LmMKKy4vMjA0OAorYGBg CisKKyMjIyBDb250cmlidXRpbmcKKworQ29udHJpYnV0aW9ucyBhcmUgdmVyeSB3ZWxjb21lLiBB bHdheXMgcnVuIHRoZSB0ZXN0cyBiZWZvcmUgY29tbWl0dGluZyB1c2luZzoKKworYGBgCiskIC4v MjA0OCB0ZXN0CitBbGwgMTMgdGVzdHMgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5CitgYGAKZGlmZiAt LWdpdCBhL2NvbW1vbi9NYWtlZmlsZSBiL2NvbW1vbi9NYWtlZmlsZQppbmRleCAyMDQyNDFjLi5i NDBhMDc4IDEwMDY0NAotLS0gYS9jb21tb24vTWFrZWZpbGUKKysrIGIvY29tbW9uL01ha2VmaWxl CkBAIC00NCw2ICs0NCw3IEBAIG9iai0kKENPTkZJR19TSEVMTF9IVVNIKQkrPSBodXNoLm8KIG9i ai0kKENPTkZJR19TSEVMTF9TSU1QTEUpCSs9IHBhcnNlci5vCiBvYmotJChDT05GSUdfVUlNQUdF KQkJKz0gaW1hZ2UubyB1aW1hZ2Uubwogb2JqLSQoQ09ORklHX01FTlVUUkVFKSArPSBtZW51dHJl ZS5vCitvYmoteQkJCQkrPSAyMDQ4LwogCiBxdWlldF9jbWRfcHdkX2ggPSBQV0RIICAgICRACiBp ZmRlZiBDT05GSUdfUEFTU1dPUkQKLS0gCjEuOS4wLjI3OS5nZGM5ZTNlYgoKCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmJhcmVib3ggbWFpbGluZyBsaXN0 CmJhcmVib3hAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2JhcmVib3gK