From mboxrd@z Thu Jan 1 00:00:00 1970 Delivery-date: Tue, 23 Mar 2021 08:53:11 +0100 Received: from metis.ext.pengutronix.de ([2001:67c:670:201:290:27ff:fe1d:cc33]) by lore.white.stw.pengutronix.de with esmtp (Exim 4.92) (envelope-from ) id 1lObqh-0004sU-9E for lore@lore.pengutronix.de; Tue, 23 Mar 2021 08:53:11 +0100 Received: from desiato.infradead.org ([2001:8b0:10b:1:d65d:64ff:fe57:4e05]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lObqa-0000HN-2f for lore@pengutronix.de; Tue, 23 Mar 2021 08:53:11 +0100 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=desiato.20200630; h=Sender:Content-Transfer-Encoding :Content-Type:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To:Message-Id:Date: Subject:Cc:To:From:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=LTMC+itR8TrEZg1w39e8eirI4YVJqcr1l1j4o7+yJM4=; b=oVKRl/ITDcxR08WaeBm22QNx3 xVeE4M86On6S6++IdhaqH4xHSvhO7rTM2k7iRnhvxbIW+g71dGsCUbHXbgxDzKLE9P5kl6f56Tc8a AjHChf8U2JKLWxe8keXMrpdEvdmEtd0n+SeMD1GC4cgclgtFqni9LsW9sQZH9ZkNs7ZC6QRAX9iWA QImm3aByfq0w937vw2/dYWU2ck/RMELsep4x8V/Od48Oxm38DOaW9DNG1l1+gULrgUmULnw7YLuE2 FLLuLiM9zjz6wZDZcx7Ovv9qRA4kk9sPnU1G4ievvM4JMK2ZXpPaXTURKrnC7HAgCIk5v9uV2mwlB AxO9KCxdg==; Received: from localhost ([::1] helo=desiato.infradead.org) by desiato.infradead.org with esmtp (Exim 4.94 #2 (Red Hat Linux)) id 1lObot-00EDwD-9L; Tue, 23 Mar 2021 07:51:19 +0000 Received: from metis.ext.pengutronix.de ([2001:67c:670:201:290:27ff:fe1d:cc33]) by desiato.infradead.org with esmtps (Exim 4.94 #2 (Red Hat Linux)) id 1lOboV-00EDrC-QF for barebox@lists.infradead.org; Tue, 23 Mar 2021 07:51:05 +0000 Received: from dude.hi.pengutronix.de ([2001:67c:670:100:1d::7]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lOboN-0008Fy-AB; Tue, 23 Mar 2021 08:50:47 +0100 Received: from afa by dude.hi.pengutronix.de with local (Exim 4.92) (envelope-from ) id 1lOboN-0007Ab-2G; Tue, 23 Mar 2021 08:50:47 +0100 From: Ahmad Fatoum To: barebox@lists.infradead.org Cc: jbe@pengutronix.de, Ahmad Fatoum Date: Tue, 23 Mar 2021 08:50:34 +0100 Message-Id: <20210323075035.26816-2-a.fatoum@pengutronix.de> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20210323075035.26816-1-a.fatoum@pengutronix.de> References: <20210323075035.26816-1-a.fatoum@pengutronix.de> MIME-Version: 1.0 X-BeenThere: barebox@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list 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" X-SA-Exim-Connect-IP: 2001:8b0:10b:1:d65d:64ff:fe57:4e05 X-SA-Exim-Mail-From: barebox-bounces+lore=pengutronix.de@lists.infradead.org X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on metis.ext.pengutronix.de X-Spam-Level: X-Spam-Status: No, score=-3.3 required=4.0 tests=AWL,BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_NONE,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.2 Subject: [PATCH 2/3] x86: drop legacy (PC BIOS) boot in favor of EFI X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on metis.ext.pengutronix.de) VGhlIDE2LWJpdCBwb3J0IGhhcyBleHBlcmllbmNlZCBiaXRyb3QgYW5kIGZhaWxlZCB0byBjb21w aWxlIHdpdGggbW9yZQpyZWNlbnQgbGlua2VycyBmb3IgYXQgbGVhc3QgYSB5ZWFyLiBGaXhpbmcg dGhlIGxpbmtlciBlcnJvciBpcyBpbnN1ZmZpY2llbnQKdG8gcmVzdG9yZSBhIGJhcmVib3ggdGhh dCBjYW4gYm9vdCB0byBzaGVsbC4gVGhpcyBjb250aW51ZWQgYnJlYWthZ2UgbGlrZWx5Cm1lYW5z IHRoYXQgdGhlcmUgYXJlIG5vIHVzZXJzIGludGVyZXN0ZWQgaW4gdXBkYXRpbmcuIEFzIG5ldyB4 ODYgcHJvamVjdHMKc2hvdWxkIGJlIHVzaW5nIE1BQ0hfRUZJX0dFTkVSSUMgYW55d2F5LCByZXRp cmUgc3VwcG9ydCBmb3IgMTYtYml0IGxlZ2FjeQpib290IChNQUNIX1g4Nl9HRU5FUklDKS4KCkFj a2VkLWJ5OiBKdWVyZ2VuIEJvcmxlaXMgPGpiZUBwZW5ndXRyb25peC5kZT4KU2lnbmVkLW9mZi1i eTogQWhtYWQgRmF0b3VtIDxhLmZhdG91bUBwZW5ndXRyb25peC5kZT4KLS0tCiBEb2N1bWVudGF0 aW9uL2JvYXJkcy94ODYucnN0ICAgICAgICAgICAgICAgICAgfCAxNTMgLS0tLS0KIE1ha2VmaWxl ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyOSArLQogYXJjaC94ODYv S2NvbmZpZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDYzICstCiBhcmNoL3g4Ni9N YWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMzIgKy0KIGFyY2gveDg2L2Jp b3MvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMyAtCiBhcmNoL3g4Ni9iaW9z L2Jpb3NfZGlzay5TICAgICAgICAgICAgICAgICAgICAgfCAgNTcgLS0KIGFyY2gveDg2L2Jpb3Mv bWVtb3J5MTYuUyAgICAgICAgICAgICAgICAgICAgICB8ICA1NCAtLQogYXJjaC94ODYvYmlvcy90 cmF2ZWxlci5TICAgICAgICAgICAgICAgICAgICAgIHwgMTY2IC0tLS0tLQogYXJjaC94ODYvYm9h cmRzL3g4Nl9nZW5lcmljL01ha2VmaWxlICAgICAgICAgIHwgICA0IC0KIGFyY2gveDg2L2JvYXJk cy94ODZfZ2VuZXJpYy9kaXNrX2Jpb3NfZHJpdmUuYyB8ICAzMyAtLQogYXJjaC94ODYvYm9hcmRz L3g4Nl9nZW5lcmljL2Vudi9iaW4vYm9vdCAgICAgIHwgIDM3IC0tCiBhcmNoL3g4Ni9ib2FyZHMv eDg2X2dlbmVyaWMvZW52L2Jpbi9pbml0ICAgICAgfCAgMTUgLQogYXJjaC94ODYvYm9hcmRzL3g4 Nl9nZW5lcmljL2Vudi9jb25maWcgICAgICAgIHwgIDMxIC0KIGFyY2gveDg2L2JvYXJkcy94ODZf Z2VuZXJpYy9lbnZzZWN0b3IuaCAgICAgICB8ICAyNCAtCiBhcmNoL3g4Ni9ib2FyZHMveDg2X2dl bmVyaWMvZ2VuZXJpY19wYy5jICAgICAgfCAgMTggLQogLi4uL2JvYXJkcy94ODZfZ2VuZXJpYy9p bnRmX3BsYXRmb3JtX2lkZS5jICAgIHwgIDgwIC0tLQogYXJjaC94ODYvYm9hcmRzL3g4Nl9nZW5l cmljL3NlcmlhbF9uczE2NTUwLmMgIHwgIDM1IC0tCiBhcmNoL3g4Ni9ib290L0tjb25maWcgICAg ICAgICAgICAgICAgICAgICAgICAgfCAgMjAgLQogYXJjaC94ODYvYm9vdC9NYWtlZmlsZSAgICAg ICAgICAgICAgICAgICAgICAgIHwgIDEzIC0KIGFyY2gveDg2L2Jvb3QvYTIwLmMgICAgICAgICAg ICAgICAgICAgICAgICAgICB8IDE2NiAtLS0tLS0KIGFyY2gveDg2L2Jvb3QvYmlvc2NhbGwuUyAg ICAgICAgICAgICAgICAgICAgICB8ICA5MCAtLS0KIGFyY2gveDg2L2Jvb3QvYm9vdC5oICAgICAg ICAgICAgICAgICAgICAgICAgICB8IDE4OSAtLS0tLS0KIGFyY2gveDg2L2Jvb3QvYm9vdF9oZGlz ay5TICAgICAgICAgICAgICAgICAgICB8IDE3MCAtLS0tLS0KIGFyY2gveDg2L2Jvb3QvYm9vdF9t YWluLlMgICAgICAgICAgICAgICAgICAgICB8ICAzOSAtLQogYXJjaC94ODYvYm9vdC9tYWluX2Vu dHJ5LmMgICAgICAgICAgICAgICAgICAgIHwgIDI0IC0KIGFyY2gveDg2L2Jvb3QvcG1qdW1wLlMg ICAgICAgICAgICAgICAgICAgICAgICB8ICA4MiAtLS0KIGFyY2gveDg2L2Jvb3QvcHJlcGFyZV91 Ym9vdC5jICAgICAgICAgICAgICAgICB8ICA4MCAtLS0KIGFyY2gveDg2L2Jvb3QvcmVncy5jICAg ICAgICAgICAgICAgICAgICAgICAgICB8ICAyOSAtCiBhcmNoL3g4Ni9ib290L3R0eS5jICAgICAg ICAgICAgICAgICAgICAgICAgICAgfCAgNDEgLS0KIGFyY2gveDg2L2NvbmZpZ3MvZ2VuZXJpY19k ZWZjb25maWcgICAgICAgICAgICB8ICAyNiAtCiBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNsaWIu aCAgICAgICAgICAgICAgICAgfCAgMTMgLQogYXJjaC94ODYvbGliLy5naXRpZ25vcmUgICAgICAg ICAgICAgICAgICAgICAgIHwgICAxIC0KIGFyY2gveDg2L2xpYi9NYWtlZmlsZSAgICAgICAgICAg ICAgICAgICAgICAgICB8ICAgOSAtCiBhcmNoL3g4Ni9saWIvYXNtLW9mZnNldHMuYyAgICAgICAg ICAgICAgICAgICAgfCAgIDYgLQogYXJjaC94ODYvbGliL2JhcmVib3gubGRzLlMgICAgICAgICAg ICAgICAgICAgIHwgMTYxIC0tLS0tLQogYXJjaC94ODYvbGliL2dkdC5jICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHwgIDM4IC0tCiBhcmNoL3g4Ni9saWIvbGludXhfc3RhcnQuUyAgICAgICAg ICAgICAgICAgICAgfCAgNTUgLS0KIGFyY2gveDg2L2xpYi9tZW1vcnkuYyAgICAgICAgICAgICAg ICAgICAgICAgICB8ICA0OSAtLQogYXJjaC94ODYvbWFjaC1pMzg2L0tjb25maWcgICAgICAgICAg ICAgICAgICAgIHwgIDEzIC0KIGFyY2gveDg2L21hY2gtaTM4Ni9NYWtlZmlsZSAgICAgICAgICAg ICAgICAgICB8ICAgMiAtCiBhcmNoL3g4Ni9tYWNoLWkzODYvaW5jbHVkZS9tYWNoL2JhcmVib3gu bGRzLmggfCAgODIgLS0tCiBhcmNoL3g4Ni9tYWNoLWkzODYvcGl0X3RpbWVyLmMgICAgICAgICAg ICAgICAgfCAgNTMgLS0KIGNvbW1hbmRzL0tjb25maWcgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB8ICAyMCAtCiBjb21tYW5kcy9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfCAgIDEgLQogY29tbWFuZHMvbGludXgxNi5jICAgICAgICAgICAgICAgICAgICAgICAgICAg IHwgMzMxIC0tLS0tLS0tLS0tCiBjb21tb24vcGFydGl0aW9ucy5jICAgICAgICAgICAgICAgICAg ICAgICAgICAgfCAgIDIgLQogY29tbW9uL3BhcnRpdGlvbnMvZG9zLmMgICAgICAgICAgICAgICAg ICAgICAgIHwgIDI5IC0KIGRyaXZlcnMvYXRhL0tjb25maWcgICAgICAgICAgICAgICAgICAgICAg ICAgICB8ICAgOSAtCiBkcml2ZXJzL2F0YS9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAg ICAgfCAgIDEgLQogZHJpdmVycy9hdGEvZGlza19iaW9zX2RyaXZlLmMgICAgICAgICAgICAgICAg IHwgMzAyIC0tLS0tLS0tLS0KIHNjcmlwdHMvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB8ICAgMSAtCiBzY3JpcHRzL3NldHVwbWJyLy5naXRpZ25vcmUgICAgICAgICAgICAg ICAgICAgfCAgIDEgLQogc2NyaXB0cy9zZXR1cG1ici9NYWtlZmlsZSAgICAgICAgICAgICAgICAg ICAgIHwgICAzIC0KIHNjcmlwdHMvc2V0dXBtYnIvYXJjaC5oICAgICAgICAgICAgICAgICAgICAg ICB8ICA1NSAtLQogc2NyaXB0cy9zZXR1cG1ici9zZXR1cG1ici5jICAgICAgICAgICAgICAgICAg IHwgNTQ1IC0tLS0tLS0tLS0tLS0tLS0tLQogNTUgZmlsZXMgY2hhbmdlZCwgMTMgaW5zZXJ0aW9u cygrKSwgMzU3MiBkZWxldGlvbnMoLSkKIGRlbGV0ZSBtb2RlIDEwMDY0NCBEb2N1bWVudGF0aW9u L2JvYXJkcy94ODYucnN0CiBkZWxldGUgbW9kZSAxMDA2NDQgYXJjaC94ODYvYmlvcy9NYWtlZmls ZQogZGVsZXRlIG1vZGUgMTAwNjQ0IGFyY2gveDg2L2Jpb3MvYmlvc19kaXNrLlMKIGRlbGV0ZSBt b2RlIDEwMDY0NCBhcmNoL3g4Ni9iaW9zL21lbW9yeTE2LlMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBh cmNoL3g4Ni9iaW9zL3RyYXZlbGVyLlMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBhcmNoL3g4Ni9ib2Fy ZHMveDg2X2dlbmVyaWMvTWFrZWZpbGUKIGRlbGV0ZSBtb2RlIDEwMDY0NCBhcmNoL3g4Ni9ib2Fy ZHMveDg2X2dlbmVyaWMvZGlza19iaW9zX2RyaXZlLmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBhcmNo L3g4Ni9ib2FyZHMveDg2X2dlbmVyaWMvZW52L2Jpbi9ib290CiBkZWxldGUgbW9kZSAxMDA2NDQg YXJjaC94ODYvYm9hcmRzL3g4Nl9nZW5lcmljL2Vudi9iaW4vaW5pdAogZGVsZXRlIG1vZGUgMTAw NjQ0IGFyY2gveDg2L2JvYXJkcy94ODZfZ2VuZXJpYy9lbnYvY29uZmlnCiBkZWxldGUgbW9kZSAx MDA2NDQgYXJjaC94ODYvYm9hcmRzL3g4Nl9nZW5lcmljL2VudnNlY3Rvci5oCiBkZWxldGUgbW9k ZSAxMDA2NDQgYXJjaC94ODYvYm9hcmRzL3g4Nl9nZW5lcmljL2dlbmVyaWNfcGMuYwogZGVsZXRl IG1vZGUgMTAwNjQ0IGFyY2gveDg2L2JvYXJkcy94ODZfZ2VuZXJpYy9pbnRmX3BsYXRmb3JtX2lk ZS5jCiBkZWxldGUgbW9kZSAxMDA2NDQgYXJjaC94ODYvYm9hcmRzL3g4Nl9nZW5lcmljL3Nlcmlh bF9uczE2NTUwLmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBhcmNoL3g4Ni9ib290L0tjb25maWcKIGRl bGV0ZSBtb2RlIDEwMDY0NCBhcmNoL3g4Ni9ib290L01ha2VmaWxlCiBkZWxldGUgbW9kZSAxMDA2 NDQgYXJjaC94ODYvYm9vdC9hMjAuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IGFyY2gveDg2L2Jvb3Qv Ymlvc2NhbGwuUwogZGVsZXRlIG1vZGUgMTAwNjQ0IGFyY2gveDg2L2Jvb3QvYm9vdC5oCiBkZWxl dGUgbW9kZSAxMDA2NDQgYXJjaC94ODYvYm9vdC9ib290X2hkaXNrLlMKIGRlbGV0ZSBtb2RlIDEw MDY0NCBhcmNoL3g4Ni9ib290L2Jvb3RfbWFpbi5TCiBkZWxldGUgbW9kZSAxMDA2NDQgYXJjaC94 ODYvYm9vdC9tYWluX2VudHJ5LmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBhcmNoL3g4Ni9ib290L3Bt anVtcC5TCiBkZWxldGUgbW9kZSAxMDA2NDQgYXJjaC94ODYvYm9vdC9wcmVwYXJlX3Vib290LmMK IGRlbGV0ZSBtb2RlIDEwMDY0NCBhcmNoL3g4Ni9ib290L3JlZ3MuYwogZGVsZXRlIG1vZGUgMTAw NjQ0IGFyY2gveDg2L2Jvb3QvdHR5LmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBhcmNoL3g4Ni9jb25m aWdzL2dlbmVyaWNfZGVmY29uZmlnCiBkZWxldGUgbW9kZSAxMDA2NDQgYXJjaC94ODYvaW5jbHVk ZS9hc20vc3lzbGliLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBhcmNoL3g4Ni9saWIvLmdpdGlnbm9y ZQogZGVsZXRlIG1vZGUgMTAwNjQ0IGFyY2gveDg2L2xpYi9iYXJlYm94Lmxkcy5TCiBkZWxldGUg bW9kZSAxMDA2NDQgYXJjaC94ODYvbGliL2dkdC5jCiBkZWxldGUgbW9kZSAxMDA2NDQgYXJjaC94 ODYvbGliL2xpbnV4X3N0YXJ0LlMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBhcmNoL3g4Ni9saWIvbWVt b3J5LmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBhcmNoL3g4Ni9tYWNoLWkzODYvS2NvbmZpZwogZGVs ZXRlIG1vZGUgMTAwNjQ0IGFyY2gveDg2L21hY2gtaTM4Ni9NYWtlZmlsZQogZGVsZXRlIG1vZGUg MTAwNjQ0IGFyY2gveDg2L21hY2gtaTM4Ni9pbmNsdWRlL21hY2gvYmFyZWJveC5sZHMuaAogZGVs ZXRlIG1vZGUgMTAwNjQ0IGFyY2gveDg2L21hY2gtaTM4Ni9waXRfdGltZXIuYwogZGVsZXRlIG1v ZGUgMTAwNjQ0IGNvbW1hbmRzL2xpbnV4MTYuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv YXRhL2Rpc2tfYmlvc19kcml2ZS5jCiBkZWxldGUgbW9kZSAxMDA2NDQgc2NyaXB0cy9zZXR1cG1i ci8uZ2l0aWdub3JlCiBkZWxldGUgbW9kZSAxMDA2NDQgc2NyaXB0cy9zZXR1cG1ici9NYWtlZmls ZQogZGVsZXRlIG1vZGUgMTAwNjQ0IHNjcmlwdHMvc2V0dXBtYnIvYXJjaC5oCiBkZWxldGUgbW9k ZSAxMDA2NDQgc2NyaXB0cy9zZXR1cG1ici9zZXR1cG1ici5jCgpkaWZmIC0tZ2l0IGEvRG9jdW1l bnRhdGlvbi9ib2FyZHMveDg2LnJzdCBiL0RvY3VtZW50YXRpb24vYm9hcmRzL3g4Ni5yc3QKZGVs ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwZDVhNjRiOWQ0NS4uMDAwMDAwMDAwMDAwCi0t LSBhL0RvY3VtZW50YXRpb24vYm9hcmRzL3g4Ni5yc3QKKysrIC9kZXYvbnVsbApAQCAtMSwxNTMg KzAsMCBAQAoteDg2Ci09PT0KLQotLi4gbm90ZTo6Ci0gICBUaGlzIGlzIGFib3V0IGxlZ2FjeSB4 ODYgUEMgYm9vdCwgd2hpY2ggaXMgbm90IGFzIHdlbGwgc3VwcG9ydGVkIGFzIGJvb3RpbmcKLSAg IHVuZGVyIFVFRkkuIFJlZmVyIHRvIDpkb2M6YGJvYXJkcy9lZmkucnN0YCBmb3IgZG9jdW1lbnRh dGlvbiBvbiB0aGUgYmFyZWJveAotICAgRUZJIHN1cHBvcnQuCi0KLUZlYXR1cmVzCi0tLS0tLS0t LQotCi1iYXJlYm94IGNhbiBhY3QgYXMgYSBib290bG9hZGVyIGZvciBQQyBiYXNlZCBzeXN0ZW1z LiBJbiB0aGlzIGNhc2UgYSBzcGVjaWFsCi1iaW5hcnkgbGF5b3V0IHdpbGwgYmUgY3JlYXRlZCB0 byBiZSBhYmxlIHRvIHN0b3JlIGl0IG9uIHNvbWUgbWVkaWEgdGhlIFBDCi1CSU9TIGNhbiBib290 IGZyb20uIEl0IGNhbiBib290IExpbnV4IGtlcm5lbHMgc3RvcmVkIGFsc28gb24gdGhlIHNhbWUg Ym9vdAotbWVkaWEgYW5kIGJlIGNvbmZpZ3VyZWQgYXQgcnVudGltZSwgd2l0aCB0aGUgcG9zc2li aWxpdHkgdG8gc3RvcmUgdGhlIGNoYW5nZWQKLWNvbmZpZ3VyYXRpb24gb24gdGhlIGJvb3QgbWVk aWEuCi0KLVJlc3RyaWN0aW9ucwotLS0tLS0tLS0tLS0tCi0KLUR1ZSB0byBzb21lIEJJT1MgYW5k IGJhcmVib3ggcmVzdHJpY3Rpb25zIHRoZSBib290IG1lZGlhIG11c3QgYmUKLXByZXBhcmVkIGlu IHNvbWUgc3BlY2lhbCB3YXk6Ci0KLSAgKiBiYXJlYm94IG11c3QgYmUgc3RvcmVkIGluIHRoZSBN QlIgKE1hc3RlciBCb290IFJlY29yZCkgb2YgdGhlIGJvb3QKLSAgICBtZWRpYS4gQ3VycmVudGx5 IGl0cyBub3QgcG9zc2libGUgdG8gc3RvcmUgYW5kIGJvb3QgaXQgaW4gb25lIG9mCi0gICAgdGhl IHBhcnRpdGlvbiBzZWN0b3JzIHRvIHVzZSBpdCBhcyBhIHNlY29uZCBzdGFnZSBsb2FkZXIpLiBU aGlzIGlzCi0gICAgbm8gZXRlcm5hbCByZXN0cmljdGlvbi4gSXQgb25seSBuZWVkcyBmdXJ0aGVy IGVmZm9ydCB0byBhZGQgdGhpcwotICAgIGZlYXR1cmUuCi0gICogYmFyZWJveCBjdXJyZW50bHkg Y2Fubm90IHJ1biBhIGNoYWluZWQgYm9vdCBsb2FkZXIuIEFsc28sIHRoaXMgaXMKLSAgICBubyBl eHRlcm5hbCByZXN0cmljdGlvbiwgb25seSBmdXJ0aGVyIGVmZm9ydCBuZWVkZWQuCi0gICogYmFy ZWJveCBjb21lcyB3aXRoIGxpbWl0ZWQgZmlsZXN5c3RlbSBzdXBwb3J0LiBUaGVyZSBpcyBjdXJy ZW50bHkKLSAgICBubyBzdXBwb3J0IGZvciB0aGUgbW9zdCBjb21tb24gYW5kIHBvcHVsYXIgZmls ZXN5c3RlbXMgdXNlZCBpbiB0aGUKLSAgICBcKk5JWCB3b3JsZC4gVGhpcyByZXN0cmljdHMgbG9j YXRpb25zIHdoZXJlIHRvIHN0b3JlIGEga2VybmVsIGFuZAotICAgIG90aGVyIHJ1bnRpbWUgaW5m b3JtYXRpb24KLSAgKiBiYXJlYm94IG11c3QgYmUgc3RvcmVkIHRvIHRoZSBmaXJzdCBuIHNlY3Rv cnMgb2YgdGhlIGJvb3QgbWVkaWEuCi0gICAgVG8gZW5zdXJlIHRoaXMgZG9lcyBub3QgY29sbGlk ZSB3aXRoIHBhcnRpdGlvbnMgb24gdGhlIGJvb3QgbWVkaWEsCi0gICAgdGhlIGZpcnN0IHBhcnRp dGlvbiBtdXN0IHN0YXJ0IGF0IGEgc2VjdG9yIGJlaGluZCB0aGUgb25lcyBiYXJlYm94Ci0gICAg b2NjdXBpZXMuCi0gICogYmFyZWJveCBoYW5kbGVzIGl0cyBydW50aW1lIGNvbmZpZ3VyYXRpb24g aW4gYSBzcGVjaWFsIHdheTogSXQKLSAgICBzdG9yZXMgaXQgaW4gYSBiaW5hcnkgd2F5IGludG8g c29tZSByZXNlcnZlZCBzZWN0b3JzICgicGVyc2lzdGFudAotICAgIHN0b3JhZ2UiKS4KLQotQm9v dCBQcmVwYXJhdGlvbnMKLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVRvIHN0b3JlIHRoZSBiYXJlYm94 IGltYWdlIHRvIGEgYm9vdCBtZWRpYSwgaXQgY29tZXMgd2l0aCB0aGUgdG9vbAotc2V0dXBtYnIg aW4gdGhlIGRpcmVjdG9yeSAgc2NyaXB0cy9zZXR1cG1ici8gLiBUbyBiZSBhYmxlIHRvIHVzZSBp dCBvbgotdGhlIGJvb3QgbWVkaWEgb2YgeW91ciBjaG9pY2UsIHNvbWUgcHJlcGFyYXRpb25zIGFy ZSByZXF1aXJlZC4KLQotS2VlcCBTZWN0b3JzIGZyZWUKLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUJ1 aWxkIHRoZSBiYXJlYm94IGltYWdlIGFuZCBjaGVjayBpdHMgc2l6ZS4gQXQgbGVhc3QgdGhpcyBh bW91bnQgb2YKLXNlY3RvcnMgbXVzdCBiZSBrZXB0IGZyZWUgYWZ0ZXIgdGhlIE1CUiBwcmlvciB0 aGUgZmlyc3QgcGFydGl0aW9uLiBEbyB0aGlzCi1zaW1wbGUgY2FsdWxhdGlvbjoKLQotLi4gY29k ZS1ibG9jazo6IG5vbmUKLQotICBzZWN0b3JzID0gKHNpemUgb2YgYmFyZWJveCBpbWFnZSArIDUx MSkgLyA1MTIKLQotVG8gYmUgYWJsZSB0byBzdG9yZSB0aGUgcnVudGltZSBjb25maWd1cmF0aW9u LCBmdXJ0aGVyIGZyZWUgc2VjdG9ycyBhcmUKLXJlcXVpcmVkLiBJdHMgdXAgdG8geW91IGFuZCB5 b3VyIHJlcXVpcmVtZW50cywgaG93IGxhcmdlIHRoaXMgcGVyc2lzdGFudAotc3RvcmFnZSBtdXN0 IGJlLiBJZiB5b3UgbmVlZCAxNiBraUIgZm9yIHRoaXMgcHVycG9zZSwgeW91IG5lZWQgdG8ga2Vl cAotYWRkaXRpb25hbCAzMiBzZWN0b3JzIGZyZWUuCi0KLUZvciB0aGlzIGV4YW1wbGUgd2UgYXJl IHJlc2VydmluZyAzMDAgc2VjdG9ycyBmb3IgdGhlIGJhcmVib3ggaW1hZ2UgYW5kCi1hZGRpdGlv bmFseSAzMiBzZWN0b3JzIGZvciB0aGUgcGVyc2lzdGFudCBzdG9yYWdlLiBTbywgdGhlIGZpcnN0 IHBhcnRpdGlvbiBvbgotdGhlIGJvb3QgbWVkaWEgbXVzdCBzdGFydCBhdCBzZWN0b3IgMzMzIG9y IGxhdGVyLgotCi1SdW4gdGhlICBmZGlzayB0b29sIHRvIHNldHVwIHN1Y2ggYSBwYXJ0aXRpb24g dGFibGU6Ci0KLS4uIGNvZGUtYmxvY2s6OiBub25lCi0KLSAgW2piQGhvc3Rdfj4gZmRpc2sgL2Rl di9zZGEKLSAgQ29tbWFuZCAobSBmb3IgaGVscCk6IHAKLSAgCi0gIERpc2sgL2Rldi9zZGE6IDIw LjcgTUIsIDIxMjY4MDcwNCBieXRlcwotICAxNiBoZWFkcywgNjMgc2VjdG9ycy90cmFjaywgNDA2 IGN5bGluZGVycwotICBVbml0cyA9IGN5bGluZGVycyBvZiAxMDA4ICogNTEyID0gNTE2MDk2IGJ5 dGVzCi0gIAotICBEZXZpY2UgQm9vdCAgICAgIFN0YXJ0ICAgICAgICAgRW5kICAgICAgQmxvY2tz ICAgSWQgIFN5c3RlbQotCi1DaGFuZ2UgdGhlIHVzZWQgdW5pdHMgdG8gIHNlY3RvcnMgZm9yIGVh c2llciBoYW5kbGluZy4KLQotLi4gY29kZS1ibG9jazo6IG5vbmUKLQotICBDb21tYW5kIChtIGZv ciBoZWxwKTogdQotICBDaGFuZ2luZyBkaXNwbGF5L2VudHJ5IHVuaXRzIHRvIHNlY3RvcnMKLSAg Ci0gIENvbW1hbmQgKG0gZm9yIGhlbHApOiBwCi0KLSAgRGlzayAvZGV2L3NkYTogMjAuNyBNQiwg MjEyNjgwNzA0IGJ5dGVzCi0gIDE2IGhlYWRzLCA2MyBzZWN0b3JzL3RyYWNrLCA0MDYgY3lsaW5k ZXJzLCB0b3RhbCA0MDkyNDggc2VjdG9ycwotICBVbml0cyA9IHNlY3RvcnMgb2YgMSAqIDUxMiA9 IDUxMiBieXRlcwotICAKLSAgRGV2aWNlIEJvb3QgICAgICBTdGFydCAgICAgICAgIEVuZCAgICAg IEJsb2NrcyAgIElkICBTeXN0ZW0KLQotTm93IGl0cyBwb3NzaWJsZSB0byBjcmVhdGUgdGhlIGZp cnN0IHBhcnRpdGlvbiB3aXRoIHRoZSByZXF1aXJlZCBvZmZzZXQ6Ci0KLS4uIGNvZGUtYmxvY2s6 OiBub25lCi0KLSAgQ29tbWFuZCAobSBmb3IgaGVscCk6IG4KLSAgQ29tbWFuZCBhY3Rpb24KLSAg ICAgZSAgIGV4dGVuZGVkCi0gICAgIHAgICBwcmltYXJ5IHBhcnRpdGlvbiAoMS00KQotICBwCi0g IFBhcnRpdGlvbiBudW1iZXIgKDEtNCk6IDEKLSAgRmlyc3Qgc2VjdG9yICg2My00MDkyNDcsIGRl ZmF1bHQgNjMpOiAzMzMKLSAgTGFzdCBzZWN0b3Igb3IgK3NpemUgb3IgK3NpemVNIG9yICtzaXpl SyAoMzMzLTQwOTI0NywgZGVmYXVsdCA0MDkyNDcpOiArMThNCi0gIENvbW1hbmQgKG0gZm9yIGhl bHApOiBwCi0gIAotICBEaXNrIC9kZXYvc2RhOiAyMC43IE1CLCAyMTI2ODA3MDQgYnl0ZXMKLSAg MTYgaGVhZHMsIDYzIHNlY3RvcnMvdHJhY2ssIDQwNiBjeWxpbmRlcnMsIHRvdGFsIDQwOTI0OCBz ZWN0b3JzCi0gIFVuaXRzID0gc2VjdG9ycyBvZiAxICogNTEyID0gNTEyIGJ5dGVzCi0gIAotICAg ICAgICAgIERldmljZSBCb290ICAgICAgU3RhcnQgICAgICAgICBFbmQgICAgICBCbG9ja3MgICBJ ZCAgU3lzdGVtCi0gIC9kZXYvc2RhICAgICAgICAgICAgICAgICAgIDMzMyAgICAgICAzNTQ4OSAg ICAgICAxNzU3OCsgIDgzICBMaW51eAotCi1UaGF0J3MgYWxsLiBEbyB3aGF0ZXZlciBpcyByZXF1 aXJlZCBub3cgd2l0aCB0aGUgbmV3IHBhcnRpdGlvbiAoZm9ybWF0dGluZwotYW5kIHBvcHVsYXRp bmcgdGhlIHJvb3QgZmlsZXN5c3RlbSBmb3IgZXhhbXBsZSkgdG8gbWFrZSBpdCB1c2VmdWwuCi0K LUluIHRoZSBuZXh0IHN0ZXAsIGJhcmVib3ggZ2V0cyBpbnN0YWxsZWQgdG8gdGhpcyBib290IG1l ZGlhOjoKLQotICBbamJAaG9zdF1+PiBzY3JpcHRzL3NldHVwbWJyL3NldHVwbWJyIC1zIDMyIC1t IC4vYmFyZWJveCAtZCAvZGV2L3NkYQotCi1UaGlzIGNvbW1hbmQgd3JpdGVzIHRoZSBiYXJlYm94 IGltYWdlIGZpbGUgJy4vYmFyZWJveCcgb250byB0aGUgZGV2aWNlCi0gL2Rldi9zZGEuCi0KLVRo ZSAgLXMgb3B0aW9uIHdpbGwga2VlcCB0aGUgcGVyc2lzdGFudCBzdG9yYWdlIHNlY3RvcnMgZnJl ZSBhbmQgdW50b3VjaGVkCi1hbmQgc2V0IGZsYWdzIGluIHRoZSBNQlIgdG8gZm9yd2FyZCBpdHMg ZXhpc3RhbmNlLCBzaXplIGFuZCBsb2NhdGlvbiB0bwotYmFyZWJveCBhdCBydW50aW1lLiAgc2V0 dXBtYnIgYWxzbyBkb2VzIG5vdCBjaGFuZ2UgdGhlIHBhcnRpdGlvbiB0YWJsZS4KLQotVGhlIGJh cmVib3ggaW1hZ2UgZ2V0cyBzdG9yZWQgb24gdGhlIGJvb3QgbWVkaWEgbGlrZSB0aGlzOjoKLQot ICBzZWN0b3IgMCAgIDEgICAgICAgICAgICAgMzMgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAzMzMKLSAgICAgICAgIHwtLS18LS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0gfn5+IC0t LS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLQotICAgICAgICBNQlIgICAgcGVyc2lzdGFudCAgICAg ICAgICAgICAgYmFyZWJveCAgICAgICAgICAgICAgICAgZmlyc3QKLSAgICAgICAgICAgICAgICBz dG9yYWdlICAgICAgICAgICAgICAgbWFpbiBpbWFnZSAgICAgICAgICAgICAgcGFydGl0aW9uCi0K LUlmIHRoZSAgLXMgb3B0aW9uIGlzIG9taXR0ZWQsIHRoZSAicGVyc2lzdGFudCBzdG9yYWdlIiBw YXJ0IHNpbXBseSBkb2VzCi1ub3QgZXhpc3Q6Ci0KLS4uIGNvZGUtYmxvY2s6OiBub25lCi0KLSAg c2VjdG9yIDAgICAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzMzCi0gICAgICAgICB8 LS0tfC0tLS0tLS0tLS0tLS0tLSB+fn4gLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tCi0gICAg ICAgIE1CUiAgICAgICAgICAgICAgIGJhcmVib3ggICAgICAgICAgICAgICAgIGZpcnN0Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgbWFpbiBpbWFnZSAgICAgICAgICAgICAgcGFydGl0aW9uCi0K LSoqTk9URToqKiB0aGUgYGBzZXR1cG1icmBgIHRvb2wgaXMgYWxzbyB3b3JraW5nIG9uIHJlYWwg aW1hZ2UgZmlsZSB0aGFuIG9uIGRldmljZQotbm9kZXMgb25seS4gU28sIHRoZXJlIGlzIG5vIHJl c3RyaWN0aW9uIHdoYXQga2luZCBvZiBmaWxlIHdpbGwgYmUKLW1vZGlmaWVkLgotCmRpZmYgLS1n aXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCmluZGV4IDliMDBhY2Y1NGM2Zi4uNDU5Y2VlMTY3Y2Q1 IDEwMDY0NAotLS0gYS9NYWtlZmlsZQorKysgYi9NYWtlZmlsZQpAQCAtODkwLDMzICs4OTAsNiBA QCBxdWlldF9jbWRfYmFyZWJveF9ta2ltYWdlID0gTUtJTUFHRSAkQAogYmFyZWJveC51aW1hZ2U6 ICQoS0JVSUxEX0JJTkFSWSkgRk9SQ0UKIAkkKGNhbGwgaWZfY2hhbmdlZCxiYXJlYm94X21raW1h Z2UpCiAKLWlmZGVmIENPTkZJR19YODYKLWJhcmVib3guUyBiYXJlYm94LnM6IGJhcmVib3gKLWlm ZGVmIENPTkZJR19YODZfSERCT09UCi0JQGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iID4gYmFyZWJveC5TCi0JQGVjaG8gIiAqIE1CUiBjb250 ZW50IiA+PiBiYXJlYm94LlMKLQkkKFEpJChPQkpEVU1QKSAtaiAuYm9vdHNlY3RvciAtbWk4MDg2 IC1kIGJhcmVib3ggPj4gYmFyZWJveC5TCi0JQGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iID4+IGJhcmVib3guUwotCUBlY2hvICIgKiBCb290 IGxvYWRlciBjb250ZW50IiA+PiBiYXJlYm94LlMKLQkkKFEpJChPQkpEVU1QKSAtaiAuYm9vdHN0 cmFwcGluZyAtbWk4MDg2IC1kIGJhcmVib3ggPj4gYmFyZWJveC5TCi1lbmRpZgotCUBlY2hvICIt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+PiBiYXJl Ym94LlMKLQlAZWNobyAiICogUmVndWxhciBUZXh0IGNvbnRlbnQiID4+IGJhcmVib3guUwotCSQo USkkKE9CSkRVTVApIC1qIC50ZXh0IC1kIGJhcmVib3ggPj4gYmFyZWJveC5TCi0JQGVjaG8gIi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iID4+IGJhcmVi b3guUwotCUBlY2hvICIgKiBSZWd1bGFyIERhdGEgY29udGVudCIgPj4gYmFyZWJveC5TCi0JJChR KSQoT0JKRFVNUCkgLWogLmRhdGEgLWQgYmFyZWJveCA+PiBiYXJlYm94LlMKLQlAZWNobyAiLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj4gYmFyZWJv eC5TCi0JQGVjaG8gIiAqIENvbW1hbmRzIGNvbnRlbnQiID4+IGJhcmVib3guUwotCSQoUSkkKE9C SkRVTVApIC1qIC5iYXJlYm94X2NtZCAtZCBiYXJlYm94ID4+IGJhcmVib3guUwotCUBlY2hvICIt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+PiBiYXJl Ym94LlMKLQlAZWNobyAiICogSW5pdCBDYWxscyBjb250ZW50IiA+PiBiYXJlYm94LlMKLQkkKFEp JChPQkpEVU1QKSAtaiAuYmFyZWJveF9pbml0Y2FsbHMgLWQgYmFyZWJveCA+PiBiYXJlYm94LlMK LWVsc2UKLWJhcmVib3guUyBiYXJlYm94LnM6IGJhcmVib3ggRk9SQ0UKLQkkKGNhbGwgaWZfY2hh bmdlZCxkaXNhc20pCi1lbmRpZgotCiAjIGJhcmVib3ggaW1hZ2UKIGJhcmVib3g6ICQoQkFSRUJP WF9MRFMpICQoQkFSRUJPWF9PQkpTKSAkKGthbGxzeW1zLm8pIEZPUkNFCiAJJChjYWxsIGlmX2No YW5nZWRfcnVsZSxiYXJlYm94X18pCkBAIC0xMTE4LDcgKzEwOTEsNyBAQCBlbmRpZiAjIENPTkZJ R19NT0RVTEVTCiAjIERpcmVjdG9yaWVzICYgZmlsZXMgcmVtb3ZlZCB3aXRoICdtYWtlIGNsZWFu JwogQ0xFQU5fRElSUyAgKz0gJChNT0RWRVJESVIpCiBDTEVBTl9GSUxFUyArPQliYXJlYm94IFN5 c3RlbS5tYXAgaW5jbHVkZS9nZW5lcmF0ZWQvYmFyZWJveF9kZWZhdWx0X2Vudi5oIFwKLSAgICAg ICAgICAgICAgICAudG1wX3ZlcnNpb24gLnRtcF9iYXJlYm94KiBiYXJlYm94LmJpbiBiYXJlYm94 Lm1hcCBiYXJlYm94LlMgXAorICAgICAgICAgICAgICAgIC50bXBfdmVyc2lvbiAudG1wX2JhcmVi b3gqIGJhcmVib3guYmluIGJhcmVib3gubWFwIFwKIAkJLnRtcF9rYWxsc3ltcyogYmFyZWJveC5s ZHIgY29tcGlsZV9jb21tYW5kcy5qc29uIFwKIAkJc2NyaXB0cy9iYXJlYm94ZW52LXRhcmdldCBi YXJlYm94LWZsYXNoLWltYWdlIFwKIAkJYmFyZWJveC5zcmVjIGJhcmVib3guczVwIGJhcmVib3gu dWJsIGJhcmVib3guenlucSBcCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9LY29uZmlnIGIvYXJjaC94 ODYvS2NvbmZpZwppbmRleCBlOTQyYzc5Y2JkNDkuLjMxMWMzZDFhOGVjNSAxMDA2NDQKLS0tIGEv YXJjaC94ODYvS2NvbmZpZworKysgYi9hcmNoL3g4Ni9LY29uZmlnCkBAIC05LDE3ICs5LDcgQEAg Y29uZmlnIFg4NgogCiBjb25maWcgQVJDSF9URVhUX0JBU0UKIAloZXgKLQlkZWZhdWx0IDB4MDAw MDdjMDAgaWYgTUFDSF9YODZfR0VORVJJQwotCWRlZmF1bHQgMHgwIGlmIE1BQ0hfRUZJX0dFTkVS SUMKLQotY29uZmlnIEJPQVJEX0xJTktFUl9TQ1JJUFQKLQlib29sCi0JZGVmYXVsdCBuCi0KLWNv bmZpZyBHRU5FUklDX0xJTktFUl9TQ1JJUFQKLQlib29sCi0JZGVmYXVsdCB5Ci0JZGVwZW5kcyBv biAhQk9BUkRfTElOS0VSX1NDUklQVAorCWRlZmF1bHQgMHgwCiAKIG1lbnUgIkFSQ0ggc3BlY2lm aWMgc2V0dGluZ3MiCiAKQEAgLTQ1LDUxICszNSwxOCBAQCBjb25maWcgWDg2XzY0CiAKIGVuZG1l bnUKIAotY29uZmlnIFg4Nl9CT09UTE9BREVSCi0JYm9vbAotCXNlbGVjdCBYODZfMzIKLQlzZWxl Y3QgSEFTX01PRFVMRVMKLQlzZWxlY3QgSEFWRV9DT05GSUdVUkFCTEVfTUVNT1JZX0xBWU9VVAot CXNlbGVjdCBIQVZFX0NPTkZJR1VSQUJMRV9URVhUX0JBU0UKLQotY2hvaWNlCi0JcHJvbXB0ICJT ZWxlY3QgeW91ciBib2FyZCIKLQotY29uZmlnIE1BQ0hfWDg2X0dFTkVSSUMKLQlib29sICJHZW5l cmljIHg4NiIKLQlzZWxlY3QgWDg2X0JPT1RMT0FERVIKLQlkZXBlbmRzIG9uICFYODZfRUZJIAot CWhlbHAKLQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgYmFyZWJveCB0byBiZSB5b3VyIEJJT1Mg YmFzZWQgYm9vdGxvYWRlcgotCiBjb25maWcgTUFDSF9FRklfR0VORVJJQwotCWJvb2wgIkdlbmVy aWMgRUZJIgotCWRlcGVuZHMgb24gWDg2X0VGSSAKKwlkZWZfYm9vbCB5CisJZGVwZW5kcyBvbiBY ODZfRUZJCiAJc2VsZWN0IEhBU19ERUJVR19MTAogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91 IHdhbnQgYmFyZWJveCB0byBiZSB5b3VyIEVGSSBiYXNlZCBib290bG9hZGVyCiAKLWVuZGNob2lj ZQotCi1jaG9pY2UKLQlwcm9tcHQgIkJyaW5nIHVwIHR5cGUiCiAKLQljb25maWcgWDg2X0VGSQot CQlib29sICJFRkkiCi0JCXNlbGVjdCBFRklfQk9PVFVQCi0JCXNlbGVjdCBFRklfR1VJRAotCQlz ZWxlY3QgRUZJX0RFVklDRVBBVEgKLQkJc2VsZWN0IFBSSU5URl9VVUlECi0JCXNlbGVjdCBDTE9D S1NPVVJDRV9FRklfWDg2Ci0KLQljb25maWcgWDg2X0JJT1NfQlJJTkdVUAotCQlib29sICIxNiBi aXQgQklPUyIKLQkJaGVscAotCQkgIEJhcmVib3ggd2lsbCBhY3QgYXMgYSBCSU9TIGJhc2VkIGJv b3Rsb2FkZXIuIFRoaXMgaW5jbHVkZXMKLQkJICBzb21lIDE2IGJpdCByZWFsIG1vZGUgY29kZSBh bmQgc29tZSByZXN0cmljdGlvbnMgZXZlcnlvbmUga25vd3MKLQkJICBmcm9tIEJJT1MgYmFzZWQg c3lzdGVtcy4KLQotZW5kY2hvaWNlCi0KLXNvdXJjZSAiYXJjaC94ODYvYm9vdC9LY29uZmlnIgot c291cmNlICJhcmNoL3g4Ni9tYWNoLWkzODYvS2NvbmZpZyIKK2NvbmZpZyBYODZfRUZJCisJZGVm X2Jvb2wgeQorCXNlbGVjdCBFRklfQk9PVFVQCisJc2VsZWN0IEVGSV9HVUlECisJc2VsZWN0IEVG SV9ERVZJQ0VQQVRICisJc2VsZWN0IFBSSU5URl9VVUlECisJc2VsZWN0IENMT0NLU09VUkNFX0VG SV9YODYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L01ha2VmaWxlIGIvYXJjaC94ODYvTWFrZWZpbGUK aW5kZXggNjFlNTFhYmM3MTExLi5mZDg3MWNhMjE0MTkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L01h a2VmaWxlCisrKyBiL2FyY2gveDg2L01ha2VmaWxlCkBAIC0xLDEyICsxLDkgQEAKLUtCVUlMRF9E RUZDT05GSUcgOj0gZ2VuZXJpY19kZWZjb25maWcKK0tCVUlMRF9ERUZDT05GSUcgOj0gZWZpX2Rl ZmNvbmZpZwogCiBLQlVJTERfQ1BQRkxBR1MgKz0gLURfX1g4Nl9fCiAKLWJvYXJkLSQoQ09ORklH X01BQ0hfWDg2X0dFTkVSSUMpIDo9IHg4Nl9nZW5lcmljCi0KIFRFWFRfQkFTRSA9ICQoQ09ORklH X1RFWFRfQkFTRSkKIAotaWZlcSAoJChDT05GSUdfWDg2X0VGSSkseSkKIG1hY2hpbmUteSA6PSBl ZmkKIEtCVUlMRF9DRkxBR1MgKz0gLWZwaWMgLWZzaG9ydC13Y2hhciAtbW5vLXNzZSAtbW5vLW1t eAogaWZlcSAoJChDT05GSUdfWDg2XzMyKSx5KQpAQCAtMTQsMTMgKzExLDYgQEAgaWZlcSAoJChD T05GSUdfWDg2XzMyKSx5KQogZWxzZQogCVRBUkdFVCA9IGVmaS1hcHAteDg2XzY0CiBlbmRpZgot ZWxzZQotS0JVSUxEX0NQUEZMQUdTICs9IC1mbm8tc3RyaWN0LWFsaWFzaW5nCi1LQlVJTERfQ1BQ RkxBR1MgKz0gLW1hcmNoPWkzODYgLURURVhUX0JBU0U9JChURVhUX0JBU0UpIFwKLQktZm5vLXVu d2luZC10YWJsZXMgLWZuby1hc3luY2hyb25vdXMtdW53aW5kLXRhYmxlcwotCi1tYWNoaW5lLXkg Oj0gaTM4NgotZW5kaWYKIAogaWZlcSAoJChDT05GSUdfWDg2XzMyKSx5KQogCVVUU19NQUNISU5F IDo9IGkzODYKQEAgLTQ4LDI1ICszOCwxNyBAQCBtYWNoZGlycyA6PSAkKHBhdHN1YnN0ICUsYXJj aC94ODYvbWFjaC0lLywkKG1hY2hpbmUteSkpCiAKIEtCVUlMRF9DUFBGTEFHUyArPSAkKHBhdHN1 YnN0ICUsLUkkKHNyY3RyZWUpLyVpbmNsdWRlLCQobWFjaGRpcnMpKQogCi1pZm5lcSAoJChib2Fy ZC15KSwpCi1CT0FSRCAgOj0gYXJjaC94ODYvYm9hcmRzLyQoYm9hcmQteSkvCi1lbHNlCi1CT0FS RCAgOj0KLWVuZGlmCi0KIGlmbmVxICgkKG1hY2hpbmUteSksKQogTUFDSCAgOj0gYXJjaC94ODYv bWFjaC0kKG1hY2hpbmUteSkvCiBlbHNlCiBNQUNIICA6PQogZW5kaWYKIAotY29tbW9uLXkgKz0g JChCT0FSRCkgJChNQUNIKQorY29tbW9uLXkgKz0gJChNQUNIKQogY29tbW9uLXkgKz0gYXJjaC94 ODYvbGliLwotY29tbW9uLSQoQ09ORklHX1g4Nl9CSU9TX0JSSU5HVVApICs9IGFyY2gveDg2L2Jp b3MvCiAKICMgYXJjaC94ODYvY3B1LwogCi1pZmVxICgkKENPTkZJR19YODZfRUZJKSx5KQogbGRz LSQoQ09ORklHX1g4Nl8zMikgICA6PSBhcmNoL3g4Ni9tYWNoLWVmaS9lbGZfaWEzMl9lZmkubGRz CiBsZHMtJChDT05GSUdfWDg2XzY0KSAgIDo9IGFyY2gveDg2L21hY2gtZWZpL2VsZl94ODZfNjRf ZWZpLmxkcwogCkBAIC05MiwxNiArNzQsNiBAQCBiYXJlYm94LmVmaTogJChLQlVJTERfQklOQVJZ KSBGT1JDRQogCiBLQlVJTERfSU1BR0UgOj0gYmFyZWJveC5lZmkKIAotZWxzZQotY29tbW9uLXkg Kz0gYXJjaC94ODYvYm9vdC8KLQotbGRzLSQoQ09ORklHX0dFTkVSSUNfTElOS0VSX1NDUklQVCkg ICA6PSBhcmNoL3g4Ni9saWIvYmFyZWJveC5sZHMKLWxkcy0kKENPTkZJR19CT0FSRF9MSU5LRVJf U0NSSVBUKSAgICAgOj0gJChCT0FSRCkvYmFyZWJveC5sZHMKLQotZW5kaWYKLQogS0JVSUxEX0xE RkxBR1MgKz0gLW0gZWxmXyQoVVRTX01BQ0hJTkUpCiAKIENMRUFOX0ZJTEVTICs9ICQobGRzLXkp Ci1DTEVBTl9GSUxFUyAgICArPSBhcmNoL3g4Ni9saWIvYmFyZWJveC5sZHMgYmFyZWJveC5tYXAg YmFyZWJveC5TCi0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jpb3MvTWFrZWZpbGUgYi9hcmNoL3g4 Ni9iaW9zL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MTRlZTQyYTRh NzQuLjAwMDAwMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9iaW9zL01ha2VmaWxlCisrKyAvZGV2L251 bGwKQEAgLTEsMyArMCwwIEBACi1vYmoteSArPSBtZW1vcnkxNi5vCi1vYmoteSArPSB0cmF2ZWxl ci5vCi1vYmoteSArPSBiaW9zX2Rpc2subwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYmlvcy9iaW9z X2Rpc2suUyBiL2FyY2gveDg2L2Jpb3MvYmlvc19kaXNrLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IGMyYTgyNGVkNmViNC4uMDAwMDAwMDAwMDAwCi0tLSBhL2FyY2gveDg2L2Jpb3Mv Ymlvc19kaXNrLlMKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0vKiBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqLwotLyogU1BEWC1GaWxlQ29weXJpZ2h0 VGV4dDogMjAwOSBKdWVyZ2VuIEJlaXNlcnQsIFBlbmd1dHJvbml4ICovCi0vKiBTUERYLUZpbGVD b3B5cmlnaHRUZXh0OiAxOTk5LTIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICov Ci0KLS8qIE1vc3RseSBzdG9sZW4gZnJvbSB0aGUgR1JVQjIgcHJvamVjdCAqLwotCi0vKioKLSAq IEBmaWxlCi0gKiBAYnJpZWYgRG8gQklPUyBjYWxscyB0byBsb2FkIG9yIHNhdmUgZGF0YSBmcm9t IGRpc2tzCi0gKgotICogQG5vdGUgVGhlc2UgZnVuY3Rpb25zIGFyZSBydW5uaW5nIGluIGZsYXQg YW5kIHJlYWwgbW9kZS4gRHVlIHRvIHNvbWUKLSAqIG90aGVyIHJlc3RyaWN0aW9ucyB0aGVzZSBy b3V0aW5lcyBtdXN0IHJ1bm5pbmcgZnJvbSBhbiBhZGRyZXNzCi0gKiBzcGFjZSBiZWxvdyAweDEw MDAwCi0gKi8KLQotLyoKLSAqICAgaW50IGJpb3NfZGlza19yd19pbnQxM19leHRlbnNpb25zIChp bnQgYWgsIGludCBkcml2ZSwgdm9pZCAqZGFwKQotICoKLSAqICAgQ2FsbCBJQk0vTVMgSU5UMTMg RXh0ZW5zaW9ucyAoaW50IDEzICVhaD1BSCkgZm9yIERSSVZFLiBEQVAKLSAqICAgaXMgcGFzc2Vk IGZvciBkaXNrIGFkZHJlc3MgcGFja2V0LiBJZiBhbiBlcnJvciBvY2N1cnMsIHJldHVybgotICog ICBub24temVybywgb3RoZXJ3aXNlIHplcm8uCi0gKi8KLQkuc2VjdGlvbiAuYm9vdC50ZXh0LmJp b3NfZGlza19yd19pbnQxM19leHRlbnNpb25zLCAiYXgiCi0JLmNvZGUzMgotCS5nbG9ibCBiaW9z X2Rpc2tfcndfaW50MTNfZXh0ZW5zaW9ucwotCS50eXBlIGJpb3NfZGlza19yd19pbnQxM19leHRl bnNpb25zLCBAZnVuY3Rpb24KLQotCS5leHRlcm4gcHJvdF90b19yZWFsCi0JLmV4dGVybiByZWFs X3RvX3Byb3QKLQotYmlvc19kaXNrX3J3X2ludDEzX2V4dGVuc2lvbnM6Ci0JcHVzaGwgJWVicAot CXB1c2hsICVlc2kKLQotCS8qIGNvbXB1dGUgdGhlIGFkZHJlc3Mgb2YgZGlza19hZGRyZXNzX3Bh Y2tldCAqLwotCW1vdncgJWN4LCAlc2kKLQl4b3J3ICVjeCwgJWN4Ci0Jc2hybCAkNCwgJWVjeAkv KiBzYXZlIHRoZSBzZWdtZW50IHRvIGN4ICovCi0KLQltb3ZiICVhbCwgJWRoCi0JY2FsbCBwcm90 X3RvX3JlYWwJLyogZW50ZXIgcmVhbCBtb2RlIHJpZ2h0IG5vdyAqLwotCi0JLmNvZGUxNgotCW1v dmIgJWRoLCAlYWgKLQltb3Z3ICVjeCwgJWRzCi0JaW50ICQweDEzCQkvKiBkbyB0aGUgb3BlcmF0 aW9uICovCi0JbW92YiAlYWgsICVkbAkJLyogc2F2ZSByZXR1cm4gdmFsdWUgKi8KLQkvKiBiYWNr IHRvIHByb3RlY3RlZCBtb2RlICovCi0JREFUQTMyIGNhbGwgcmVhbF90b19wcm90Ci0KLQkuY29k ZTMyCi0JbW92YiAlZGwsICVhbAkvKiByZXR1cm4gdmFsdWUgaW4gJWVheCAqLwotCi0JcG9wbCAl ZXNpCi0JcG9wbCAlZWJwCi0KLQlyZXQKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jpb3MvbWVtb3J5 MTYuUyBiL2FyY2gveDg2L2Jpb3MvbWVtb3J5MTYuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggZTRhZWYyZjI1NmVhLi4wMDAwMDAwMDAwMDAKLS0tIGEvYXJjaC94ODYvYmlvcy9tZW1v cnkxNi5TCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLyogU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi8KLS8qIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6 IDIwMDkgSnVlcmdlbiBCZWlzZXJ0LCBQZW5ndXRyb25peCAqLwotCi0vKiBUaGlzIGNvZGUgd2Fz IGluc3BpcmVkIGJ5IHRoZSBHUlVCMiBwcm9qZWN0LiAqLwotCi0vKioKLSAqIEBmaWxlCi0gKiBA YnJpZWYgUXVlcnkgdGhlIG1lbW9yeSBsYXlvdXQgaW5mb3JtYXRpb24gZnJvbSB0aGUgQklPUwot ICoKLSAqIE5vdGU6IFRoaXMgZnVuY3Rpb24gaXMgcnVubmluZyBpbiBmbGF0IGFuZCByZWFsIG1v ZGUuIER1ZSB0byBzb21lCi0gKiBvdGhlciByZXN0cmljdGlvbnMgaXQgbXVzdCBydW5uaW5nIGZy b20gYW4gYWRkcmVzcyBzcGFjZSBiZWxvdyAweDEwMDAwCi0gKi8KLQotLyoqCi0gKiBAZm4gdW5z aWduZWQgc2hvcnQgYmlvc19nZXRfbWVtc2l6ZSh2b2lkKQotICogQGJyaWVmIERvZXMgYSBCSU9T IGNhbGwgIklOVCAxNUgsIEFIPTg4SCIgdG8gZ2V0IGV4dGVuZGVkIG1lbW9yeSBzaXplCi0gKiBA cmV0dXJuIEV4dGVuZGVkIG1lbW9yeSBzaXplIGluIEtCCi0gKgotICogQG5vdGUgVGhpcyBjYWxs IGlzIGxpbWl0ZWQgdG8gNjQgTWlCLiBTbywgaWYgdGhlIHN5c3RlbSBwcm92aWRlcyBtb3JlIHRo YW4KLSAqIDY0IE1pQiBvZiBtZW1vcnksIHN0aWxsIDY0IE1pQiBhcmUgcmVwb3J0ZWQuCi0gKgot ICovCi0KLQotCS5zZWN0aW9uIC5ib290LnRleHQuYmlvc19nZXRfbWVtc2l6ZSwgImF4IgotCS5j b2RlMzIKLQkuZ2xvYmwgYmlvc19nZXRfbWVtc2l6ZQotCS50eXBlIGJpb3NfZ2V0X21lbXNpemUs IEBmdW5jdGlvbgotCi0JLmV4dGVybiBwcm90X3RvX3JlYWwKLQotYmlvc19nZXRfbWVtc2l6ZToK LQotCXB1c2hsICVlYnAKLQotCWNhbGwgcHJvdF90b19yZWFsCS8qIGVudGVyIHJlYWwgbW9kZSAq LwotCS5jb2RlMTYKLQotCW1vdmIgJDB4ODgsICVhaAotCWludCAkMHgxNQotCi0JbW92dyAlYXgs ICVkeAotCi0JREFUQTMyCWNhbGwgcmVhbF90b19wcm90Ci0KLQkuY29kZTMyCi0KLQltb3Z3ICVk eCwgJWF4Ci0KLQlwb3BsICVlYnAKLQlyZXQKLQotCS5zaXplIGJpb3NfZ2V0X21lbXNpemUsIC4t Ymlvc19nZXRfbWVtc2l6ZQotCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9iaW9zL3RyYXZlbGVyLlMg Yi9hcmNoL3g4Ni9iaW9zL3RyYXZlbGVyLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDFjMTFjOWRjNzQ3ZC4uMDAwMDAwMDAwMDAwCi0tLSBhL2FyY2gveDg2L2Jpb3MvdHJhdmVsZXIu UworKysgL2Rldi9udWxsCkBAIC0xLDE2NiArMCwwIEBACi0vKiBTUERYLUxpY2Vuc2UtSWRlbnRp ZmllcjogR1BMLTIuMC1vci1sYXRlciAqLwotLyogU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAw OSBKdWVyZ2VuIEJlaXNlcnQsIFBlbmd1dHJvbml4ICovCi0KLS8qIE1vc3RseSBzdG9sZW4gZnJv bSB0aGUgR1JVQjIgcHJvamVjdCAqLwotCi0vKioKLSAqIEBmaWxlCi0gKiBAYnJpZWYgU3dpdGNo IGZyb20gdGhlIGZsYXQgbW9kZSB3b3JsZCBpbnRvIHRoZSByZWFsIG1vZGUgd29ybGQgYW5kIHZp Y2UgdmVyc2EKLSAqCi0gKiBOb3RlOiBUaGVzZSBmdW5jdGlvbnMgYXJlICpjYWxsZWQqIGFuZCBy ZXR1cm4gaW4gYSBkaWZmZXJlbnQgb3BlcmF0aW5nIG1vZGUKLSAqLwotCi0vKioKLSAqIEBmbiB2 b2lkIHJlYWxfdG9fcHJvdCh2b2lkKQotICogQGJyaWVmIFN3aXRjaCBmcm9tIHRlbXAuIHJlYWwg bW9kZSBiYWNrIHRvIGZsYXQgbW9kZQotICoKLSAqIENhbGxlZCBmcm9tIGEgMzIgYml0IGZsYXQg bW9kZSBzZWdtZW50IGFuZCByZXR1cm5zIGludG8gYSAxNiBiaXQgc2VnbWVudAotICovCi0KLS8q KgotICogQGZuIHZvaWQgcHJvdF90b19yZWFsKHZvaWQpCi0gKiBAYnJpZWYgU3dpdGNoIGZyb20g ZmxhdCBtb2RlIHRvIHJlYWwgbW9kZQotICoKLSAqIENhbGxlZCBmcm9tIGEgMTYgYml0IHJlYWwg bW9kZSBzZWdtZW50IGFuZCByZXR1cm5zIGludG8gYSAzMiBiaXQgc2VnbWVudAotICovCi0KLSNp bmNsdWRlIDxhc20vbW9kZXMuaD4KLQotCS5maWxlICJ3YWxreXJpZS5TIgotCi0vKiBrZWVwIHRo ZSBjdXJyZW50IGZsYXQgbW9kZSBzdGFjayBwb2ludGVyLCB3aGlsZSBwbGF5aW5nIGluIHJlYWwg bW9kZSAqLwotCS5zZWN0aW9uIC5ib290LmRhdGEucHJvdHN0YWNrCi0JLmNvZGUzMgotcHJvdHN0 YWNrOiAubG9uZyA0Ci0vKiB0ZW1wLiBzdG9yZSAqLwotcmV0dXJuX2FkZHI6IC5sb25nIDQKLQot Ci0JLnNlY3Rpb24gLmJvb3QudGV4dC5yZWFsX3RvX3Byb3QsICJheCIKLQkuY29kZTE2Ci0JLmds b2JsCXJlYWxfdG9fcHJvdAotCS50eXBlCXJlYWxfdG9fcHJvdCwgQGZ1bmN0aW9uCi0KLS8qIE5v dGU6IFRoaXMgcm91dGluZSBzaG91bGQgbm90IGNoYW5nZSBhbnkgb3RoZXIgc3RhbmRhcmQgcmVn aXN0ZXJzIHRoYW4gZWF4ICovCi1yZWFsX3RvX3Byb3Q6Ci0JLyoKLQkgKiBBbHdheXMgZGlzYWJs ZSB0aGUgaW50ZXJydXB0cywgd2hlbiByZXR1cm5pbmcgdG8gZmxhdCBtb2RlCi0JICovCi0JY2xp Ci0KLQkvKiB0dXJuIG9uIHByb3RlY3RlZCBtb2RlICovCi0JbW92bCAlY3IwLCAlZWF4Ci0Jb3Js ICQweDAwMDAwMDAxLCAlZWF4Ci0JbW92bCAlZWF4LCAlY3IwCi0KLQkvKiBqdW1wIHRvIHJlbG9j YXRpb24sIGZsdXNoIHByZWZldGNoIHF1ZXVlLCBhbmQgcmVsb2FkICVjcyAqLwotCURBVEEzMiBs am1wICRfX0JPT1RfQ1MsICRyZXR1cm5fdG9fZmxhdG1vZGUKLQkuc2l6ZSByZWFsX3RvX3Byb3Qs IC4tcmVhbF90b19wcm90Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0JLnNlY3Rpb24gLmJvb3Qu dGV4dC5yZXR1cm5fdG9fZmxhdG1vZGUsICJheCIKLQkudHlwZSByZXR1cm5fdG9fZmxhdG1vZGUs IEBmdW5jdGlvbgotCS5jb2RlMzIKLQotcmV0dXJuX3RvX2ZsYXRtb2RlOgotCS8qIHJlbG9hZCBv dGhlciBzZWdtZW50IHJlZ2lzdGVycyAqLwotCW1vdncgJF9fQk9PVF9EUywgJWF4Ci0JbW92dyAl YXgsICVkcwotCW1vdncgJWF4LCAlZXMKLQltb3Z3ICVheCwgJWZzCi0JbW92dyAlYXgsICVncwot CW1vdncgJWF4LCAlc3MKLQotCS8qIG1vdmUgdGhlIHJldHVybiBhZGRyZXNzIGZyb20gdGhlIHJl YWwgbW9kZSB0byB0aGUgZmxhdCBtb2RlIHN0YWNrICovCi0JbW92bCAoJWVzcCksICVlYXgKLQlt b3ZsICVlYXgsIHJldHVybl9hZGRyCi0KLQkvKiBzZXR1cCBhZ2FpbiB0aGUgZmxhdCBtb2RlIHN0 YWNrICovCi0JbW92bCBwcm90c3RhY2ssICVlYXgKLQltb3ZsICVlYXgsICVlc3AKLQltb3ZsICVl YXgsICVlYnAKLQotCW1vdmwgcmV0dXJuX2FkZHIsICVlYXgKLQltb3ZsICVlYXgsICglZXNwKQot Ci0JLyogZmxhZyB3ZSByZXR1cm5lZCBoYXBweSBoZXJlICovCi0JeG9ybCAlZWF4LCAlZWF4Ci0J cmV0Ci0JLnNpemUgcmV0dXJuX3RvX2ZsYXRtb2RlLCAuLXJldHVybl90b19mbGF0bW9kZQotCi0v KiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyogTm90ZTogVGhpcyByb3V0aW5lIHNob3VsZCBub3Qg Y2hhbmdlIGFueSBvdGhlciBzdGFuZGFyZCByZWdpc3RlcnMgdGhhbiBlYXggKi8KLQotCS5zZWN0 aW9uIC5ib290LnRleHQucHJvdF90b19yZWFsLCAiYXgiCi0JLmdsb2JsIHByb3RfdG9fcmVhbAot CS50eXBlIHByb3RfdG9fcmVhbCwgQGZ1bmN0aW9uCi0JLmV4dGVybiBib290X3N0YWNrCi0JLmNv ZGUzMgotCi1wcm90X3RvX3JlYWw6Ci0JLyogc2F2ZSB0aGUgcHJvdGVjdGVkIG1vZGUgc3RhY2sg Ki8KLQltb3ZsICVlc3AsICVlYXgKLQltb3ZsICVlYXgsIHByb3RzdGFjawotCi0JLyogcHJlcGFy ZSB0aGUgcmVhbCBtb2RlIHN0YWNrICovCi0JLyogLSBhZGRyZXNzIHRvIGNhbGwgdG8gdGhlIHRv cCBvZiB0aGlzIHN0YWNrICovCi0JbW92bCAoJWVzcCksICVlYXgKLQltb3ZsICVlYXgsIGJvb3Rf c3RhY2sgLSA0Ci0KLQkvKiAtIHRoZSBzdGFjayBpdHNlbGYgKi8KLQltb3ZsICRib290X3N0YWNr IC0gNCwgJWVheAotCW1vdmwgJWVheCwgJWVzcAotCW1vdmwgJWVheCwgJWVicAotCi0JLyogcHJl cGFyZSBzZWdtZW50cyBsaW1pdHMgdG8gMTYgYml0ICovCi0JbW92dyAkX19SRUFMX0RTLCAlYXgK LQltb3Z3ICVheCwgJWRzCi0JbW92dyAlYXgsICVlcwotCW1vdncgJWF4LCAlZnMKLQltb3Z3ICVh eCwgJWdzCi0JbW92dyAlYXgsICVzcwotCi0JLyogYXQgbGFzdCwgYWxzbyBsaW1pdCB0aGUgY29k ZSBzZWdtZW50IHRvIDE2IGJpdCAqLwotCWxqbXAgJF9fUkVBTF9DUywgJHJldHVybl90b19yZWFs bW9kZQotCS5zaXplIHByb3RfdG9fcmVhbCwgLi1wcm90X3RvX3JlYWwKLQotLyogLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0gKi8KLQotCS5zZWN0aW9uIC5ib290LnRleHQucmV0dXJuX3RvX3JlYWxtb2RlLCAiYXgi Ci0JLmdsb2JsIHJldHVybl90b19yZWFsbW9kZQotCS50eXBlIHJldHVybl90b19yZWFsbW9kZSwg QGZ1bmN0aW9uCi0JLmNvZGUxNgotCi1yZXR1cm5fdG9fcmVhbG1vZGU6Ci0JLyogZGlzYWJsZSBw cm90ZWN0ZWQgbW9kZSAqLwotCW1vdmwgJWNyMCwgJWVheAotCWFuZGwgJCh+MHgwMDAwMDAwMSks ICVlYXgKLQltb3ZsICVlYXgsICVjcjAKLQotCS8qCi0JICogYWxsIHRoZSBwcm90ZWN0ZWQgbW9k ZSBzZXR0aW5ncyBhcmUgc3RpbGwgY2FjaGVkIGluIHRoZSBDUFUuCi0JICogUmVmcmVzaCB0aGVt IGJ5IHJlLWxvYWRpbmcgYWxsIHJlZ2lzdGVycyBpbiByZWFsbW9kZQotCSAqIFN0YXJ0IHdpdGgg dGhlIENTLCBjb250aW51ZSB3aXRoIHRoZSBkYXRhIHJlZ2lzdGVycwotCSAqLwotCWxqbXAgJDAs ICRlbnRlcl9yZWFsbW9kZQotCi1lbnRlcl9yZWFsbW9kZToKLQl4b3JsICVlYXgsICVlYXgKLQlt b3Z3ICVheCwgJWRzCi0JbW92dyAlYXgsICVlcwotCW1vdncgJWF4LCAlZnMKLQltb3Z3ICVheCwg JWdzCi0JbW92dyAlYXgsICVzcwotCS8qCi0JICogYmFjayBpbiBwbGFpbiByZWFsIG1vZGUgbm93 LCB3ZSBjYW4gcGxheSBhZ2FpbiB3aXRoIHRoZSBCSU9TCi0JICovCi0KLQkvKiByZXN0b3JlIGlu dGVycnVwdHMgKi8KLQlzdGkKLQotCS8qIHJldHVybiBvbiByZWFsbW9kZSBzdGFjayEgKi8KLQlE QVRBMzIgcmV0Ci0KLQkuc2l6ZSByZXR1cm5fdG9fcmVhbG1vZGUsIC4tcmV0dXJuX3RvX3JlYWxt b2RlCi0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2JvYXJkcy94ODZfZ2VuZXJpYy9NYWtlZmlsZSBi L2FyY2gveDg2L2JvYXJkcy94ODZfZ2VuZXJpYy9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggZmNhNzA3ZGQ4YjI5Li4wMDAwMDAwMDAwMDAKLS0tIGEvYXJjaC94ODYvYm9h cmRzL3g4Nl9nZW5lcmljL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi1v YmoteSArPSBnZW5lcmljX3BjLm8KLW9iai0kKENPTkZJR19ESVNLX0lOVEZfUExBVEZPUk1fSURF KSArPSBpbnRmX3BsYXRmb3JtX2lkZS5vCi1vYmotJChDT05GSUdfRElTS19CSU9TKSArPSBkaXNr X2Jpb3NfZHJpdmUubwotb2JqLSQoQ09ORklHX0RSSVZFUl9TRVJJQUxfTlMxNjU1MCkgKz0gc2Vy aWFsX25zMTY1NTAubwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9hcmRzL3g4Nl9nZW5lcmljL2Rp c2tfYmlvc19kcml2ZS5jIGIvYXJjaC94ODYvYm9hcmRzL3g4Nl9nZW5lcmljL2Rpc2tfYmlvc19k cml2ZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOGU5YWU4NTIzMmEuLjAwMDAw MDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9ib2FyZHMveDg2X2dlbmVyaWMvZGlza19iaW9zX2RyaXZl LmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRp ZmllcjogR1BMLTIuMC1vci1sYXRlcgotLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAwOSBK dWVyZ2VuIEJlaXNlcnQsIFBlbmd1dHJvbml4Ci0KLS8qKgotICogQGZpbGUKLSAqIEBicmllZiBH ZW5lcmljIFBDIHN1cHBvcnQgZm9yIHRoZSBCSU9TIGRpc2sgaW50ZXJmYWNlCi0gKi8KLQotI2lu Y2x1ZGUgPGNvbW1vbi5oPgotI2luY2x1ZGUgPGRyaXZlci5oPgotI2luY2x1ZGUgPGluaXQuaD4K LSNpbmNsdWRlIDxsaW51eC9lcnIuaD4KLSNpbmNsdWRlICJlbnZzZWN0b3IuaCIKLQotc3RhdGlj IGludCBiaW9zX2Rpc2tfaW5pdCh2b2lkKQotewotCXN0cnVjdCBjZGV2ICpjZGV2OwotCi0JYWRk X2dlbmVyaWNfZGV2aWNlKCJiaW9zZHJpdmUiLCBERVZJQ0VfSURfRFlOQU1JQywgTlVMTCwgMCwg MCwKLQkJCSAgIElPUkVTT1VSQ0VfTUVNLCBOVUxMKTsKLQotCWlmIChwZXJzX2Vudl9zaXplICE9 IFBBVENIX0FSRUFfUEVSU19TSVpFX1VOVVNFRCkgewotCQljZGV2ID0gZGV2ZnNfYWRkX3BhcnRp dGlvbigiYmlvc2Rpc2swIiwKLQkJCQlwZXJzX2Vudl9zdG9yYWdlICogNTEyLAotCQkJCSh1bnNp Z25lZClwZXJzX2Vudl9zaXplICogNTEyLAotCQkJCURFVkZTX1BBUlRJVElPTl9GSVhFRCwgImVu djAiKTsKLQkJcHJpbnRmKCJQYXJ0aXRpb246ICVsZFxuIiwgSVNfRVJSKGNkZXYpID8gUFRSX0VS UihjZGV2KSA6IDApOwotCX0gZWxzZQotCQlwcmludGYoIk5vIHBlcnNpc3RlbnQgc3RvcmFnZSBk ZWZpbmVkXG4iKTsKLQotCXJldHVybiAwOwotfQotZGV2aWNlX2luaXRjYWxsKGJpb3NfZGlza19p bml0KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2JvYXJkcy94ODZfZ2VuZXJpYy9lbnYvYmluL2Jv b3QgYi9hcmNoL3g4Ni9ib2FyZHMveDg2X2dlbmVyaWMvZW52L2Jpbi9ib290CmRlbGV0ZWQgZmls ZSBtb2RlIDEwMDY0NAppbmRleCBmY2ZmZmUzMTk0MjQuLjAwMDAwMDAwMDAwMAotLS0gYS9hcmNo L3g4Ni9ib2FyZHMveDg2X2dlbmVyaWMvZW52L2Jpbi9ib290CisrKyAvZGV2L251bGwKQEAgLTEs MzcgKzAsMCBAQAotIyEvYmluL3NoCi0KLS4gL2Vudi9jb25maWcKLQotaWYgWyB4JDEgPSB4ZGlz ayBdOyB0aGVuCi0Jcm9vdD1kaXNrCi0Ja2VybmVsPWRpc2sKLWZpCi0KLWlmIFsgeCQxID0geG5l dCBdOyB0aGVuCi0Jcm9vdD1uZXQKLQlrZXJuZWw9bmV0Ci1maQotCi1pZiBbIHgkaXAgPSB4ZGhj cCBdOyB0aGVuCi0JYm9vdGFyZ3M9IiRib290YXJncyBpcD1kaGNwIgotZWxzZQotCWJvb3Rhcmdz PSIkYm9vdGFyZ3MgaXA9JGV0aDAuaXBhZGRyOiRldGgwLnNlcnZlcmlwOiRldGgwLmdhdGV3YXk6 JGV0aDAubmV0bWFzazo6OiIKLWZpCi0KLWlmIFsgeCRyb290ID0geGRpc2sgXTsgdGhlbgotCWJv b3RhcmdzPSIkYm9vdGFyZ3Mgcm9vdD0kcm9vdHBhcnRfZGlzayByb290ZnN0eXBlPSRyb290cGFy dF9mcyBydyIKLWVsc2UKLQlib290YXJncz0iJGJvb3RhcmdzIHJvb3Q9L2Rldi9uZnMgbmZzcm9v dD0kZXRoMC5zZXJ2ZXJpcDokbmZzcm9vdCx2Myx0Y3AgcnciCi1maQotCi1pZiBbICRrZXJuZWwg PSBuZXQgXTsgdGhlbgotCWlmIFsgeCRpcCA9IHhkaGNwIF07IHRoZW4KLQkJZGhjcAotCWZpCi0J dGZ0cCAkdWltYWdlIHVJbWFnZSB8fCBleGl0IDEKLQlib290bSB1SW1hZ2UKLWVsc2UKLQlib290 YXJncz0iQk9PVF9JTUFHRT0ka2VybmVsX2RldmljZSBhdXRvICRib290YXJncyIKLQlsaW51eDE2 ICRrZXJuZWxfZGV2aWNlCi1maQotCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib2FyZHMveDg2X2dl bmVyaWMvZW52L2Jpbi9pbml0IGIvYXJjaC94ODYvYm9hcmRzL3g4Nl9nZW5lcmljL2Vudi9iaW4v aW5pdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjkyNGE0NDQ5YThkLi4wMDAwMDAw MDAwMDAKLS0tIGEvYXJjaC94ODYvYm9hcmRzL3g4Nl9nZW5lcmljL2Vudi9iaW4vaW5pdAorKysg L2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLSMhL2Jpbi9zaAotCi1QQVRIPS9lbnYvYmluCi1l eHBvcnQgUEFUSAotCi0uIC9lbnYvY29uZmlnCi0KLWVjaG8KLWVjaG8gLW4gIkhpdCBhbnkga2V5 IHRvIHN0b3AgYXV0b2Jvb3Q6ICIKLXRpbWVvdXQgLWEgJGF1dG9ib290X3RpbWVvdXQKLWlmIFsg JD8gIT0gMCBdOyB0aGVuCi0gICAgICAgIGV4aXQKLWZpCi0KLWJvb3QKZGlmZiAtLWdpdCBhL2Fy Y2gveDg2L2JvYXJkcy94ODZfZ2VuZXJpYy9lbnYvY29uZmlnIGIvYXJjaC94ODYvYm9hcmRzL3g4 Nl9nZW5lcmljL2Vudi9jb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkNTdh YWQ3MTY5YS4uMDAwMDAwMDAwMDAwCi0tLSBhL2FyY2gveDg2L2JvYXJkcy94ODZfZ2VuZXJpYy9l bnYvY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotIwotIyBiYXNpYyBjb25m aWcKLSMKLSMgYm9vdCBzb3VyY2U6ICdkaXNrJyBvciAnbmV0Jwota2VybmVsPWRpc2sKLXJvb3Q9 ZGlzawotCi0jIGRhdGEgZm9yIHRoZSBORlMgY2FzZQotbmZzcm9vdD0iL3BhdGgvdG8vbmZzX3Jv b3QiCi0KLSMgZGF0YSBmb3IgdGhlIGRpc2sgY2FzZQota2VybmVsX2RldmljZT0vZGV2L2Jpb3Nk aXNrMC4xCi1yb290cGFydF9kaXNrPS9kZXYvc2RhMQotcm9vdHBhcnRfZnM9ZXh0MgotCi1iYXVk cmF0ZT0xMTUyMDAKLXNlcmlhbD10dHlTMAotCi0jIHVzZSBVQVJUIGZvciBjb25zb2xlCi1ib290 YXJncz0iY29uc29sZT0kc2VyaWFsLCRiYXVkcmF0ZSIKLQotYXV0b2Jvb3RfdGltZW91dD0zCi0K LSMgdXNlICdkaGNwJyB0byBkbyBkaGNwIGluIHVib290IGFuZCBpbiBrZXJuZWwKLSMgIGlwPWRo Y3AKLSMgb3Igc2V0IHlvdXIgbmV0d29ya2luZyBwYXJhbWV0ZXJzIGhlcmUKLSMgIGV0aDAuaXBh ZGRyPTE5Mi4xNjguMy4xMQotIyAgZXRoMC5uZXRtYXNrPTI1NS4yNTUuMjU1LjAKLSMgIGV0aDAu Z2F0ZXdheT1hLmIuYy5kCi0jICBldGgwLnNlcnZlcmlwPTE5Mi4xNjguMy4xMAotIyAgZXRoMC5l dGhhZGRyPWFhLmJiLmNjLmRkLmVlLmZmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib2FyZHMveDg2 X2dlbmVyaWMvZW52c2VjdG9yLmggYi9hcmNoL3g4Ni9ib2FyZHMveDg2X2dlbmVyaWMvZW52c2Vj dG9yLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3YTZkMmEyMWZmMi4uMDAwMDAw MDAwMDAwCi0tLSBhL2FyY2gveDg2L2JvYXJkcy94ODZfZ2VuZXJpYy9lbnZzZWN0b3IuaAorKysg L2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBH UEwtMi4wLW9yLWxhdGVyICovCi0KLS8qKgotICogQGZpbGUKLSAqIEBicmllZiB4ODYgR2VuZXJp YyBQQyBjb21tb24gZGVmaW5pdGlvbnMKLSAqLwotI2lmbmRlZiBfX1g4Nl9FTlZTRUNUT1JfSAot I2RlZmluZSBfX0VOVlNFQ1RPUl9ICi0KLS8qCi0gKiBUaGVzZSBkYXRhcyBhcmUgZnJvbSB0aGUg TUJSLCBjcmVhdGVkIGJ5IHRoZSBsaW5rZXIgYW5kIGZpbGxlZCBieSB0aGUKLSAqIHNldHVwIHRv b2wgd2hpbGUgaW5zdGFsbGluZyBiYXJlYm94IG9uIHRoZSBkaXNrIGRyaXZlCi0gKi8KLWV4dGVy biB1aW50NjRfdCBwZXJzX2Vudl9zdG9yYWdlOwotZXh0ZXJuIHVpbnQxNl90IHBlcnNfZW52X3Np emU7Ci1leHRlcm4gdWludDhfdCBwZXJzX2Vudl9kcml2ZTsKLQotLyoqCi0gKiBQZXJzaXN0ZW50 IGVudmlyb25tZW50ICJub3QgdXNlZCIgbWFya2VyLgotICogTm90ZTogTXVzdCBiZSBpbiBhY2Nv cmRhbmNlIHRvIHRoZSB2YWx1ZSB0aGUgdG9vbCAic2V0dXBfbWJyIiB3cml0ZXMuCi0gKi8KLSNk ZWZpbmUgUEFUQ0hfQVJFQV9QRVJTX1NJWkVfVU5VU0VEIDB4MDAwCi0KLSNlbmRpZgpkaWZmIC0t Z2l0IGEvYXJjaC94ODYvYm9hcmRzL3g4Nl9nZW5lcmljL2dlbmVyaWNfcGMuYyBiL2FyY2gveDg2 L2JvYXJkcy94ODZfZ2VuZXJpYy9nZW5lcmljX3BjLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDJmMWRiN2FjYTE4ZC4uMDAwMDAwMDAwMDAwCi0tLSBhL2FyY2gveDg2L2JvYXJkcy94 ODZfZ2VuZXJpYy9nZW5lcmljX3BjLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi0v LyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlcgotLy8gU1BEWC1GaWxl Q29weXJpZ2h0VGV4dDogMjAwOSBKdWVyZ2VuIEJlaXNlcnQsIFBlbmd1dHJvbml4Ci0KLSNpbmNs dWRlIDxjb21tb24uaD4KLSNpbmNsdWRlIDx0eXBlcy5oPgotI2luY2x1ZGUgPGRyaXZlci5oPgot I2luY2x1ZGUgPGluaXQuaD4KLSNpbmNsdWRlIDxhc20vc3lzbGliLmg+Ci0jaW5jbHVkZSA8bGlu dXgvZXJyLmg+Ci0KLXN0YXRpYyBpbnQgZGV2aWNlc19pbml0KHZvaWQpCi17Ci0JLyogZXh0ZW5k ZWQgbWVtb3J5IG9ubHkgKi8KLQlhZGRfbWVtX2RldmljZSgicmFtMCIsIDB4MCwgYmlvc19nZXRf bWVtc2l6ZSgpIDw8IDEwLAotCQkgICAgICAgSU9SRVNPVVJDRV9NRU1fV1JJVEVBQkxFKTsKLQly ZXR1cm4gMDsKLX0KLWRldmljZV9pbml0Y2FsbChkZXZpY2VzX2luaXQpOwpkaWZmIC0tZ2l0IGEv YXJjaC94ODYvYm9hcmRzL3g4Nl9nZW5lcmljL2ludGZfcGxhdGZvcm1faWRlLmMgYi9hcmNoL3g4 Ni9ib2FyZHMveDg2X2dlbmVyaWMvaW50Zl9wbGF0Zm9ybV9pZGUuYwpkZWxldGVkIGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMGRiMDMxNDg0ZmIxLi4wMDAwMDAwMDAwMDAKLS0tIGEvYXJjaC94ODYv Ym9hcmRzL3g4Nl9nZW5lcmljL2ludGZfcGxhdGZvcm1faWRlLmMKKysrIC9kZXYvbnVsbApAQCAt MSw4MCArMCwwIEBACi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRl cgotLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAxNCBKdWVyZ2VuIEJlaXNlcnQsIFBlbmd1 dHJvbml4Ci0vLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDE0IE1pY2hlbCBTdGFtLCBGdWdy byBJbnRlcnNpdGUKLQotLyoqCi0gKiBAZmlsZQotICogQGJyaWVmIEdlbmVyaWMgUEMgc3VwcG9y dCBmb3IgdGhlIElERSBwbGF0Zm9ybSBkcml2ZXIKLSAqLwotCi0jaW5jbHVkZSA8Y29tbW9uLmg+ Ci0jaW5jbHVkZSA8ZHJpdmVyLmg+Ci0jaW5jbHVkZSA8aW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4 L2Vyci5oPgotI2luY2x1ZGUgPHBsYXRmb3JtX2RhdGEvaWRlLmg+Ci0jaW5jbHVkZSAiZW52c2Vj dG9yLmgiCi0KLXN0YXRpYyBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyBpZGVfcGxhdCA9IHsKLQkuaW9w b3J0X3NoaWZ0ID0gMCwKLQkuZGF0YWlmX2JlID0gMCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVz b3VyY2UgcHJpbWFyeV9pZGVfcmVzb3VyY2VzW10gPSB7Ci0JewotCQkubmFtZSA9ICJiYXNlIiwK LQkJLnN0YXJ0ID0gMHgxZjAsCi0JCS5lbmQgPSAgMHgxZjcsCi0JCS5mbGFncyA9IElPUkVTT1VS Q0VfSU8KLQl9LAotCXsKLQkJLm5hbWUgPSAiYWx0IiwKLQkJLnN0YXJ0ID0gMHgzZjYsCi0JCS5l bmQgPSAgMHgzZjcsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfSU8KLQl9Ci19OwotCi1zdGF0aWMg c3RydWN0IHJlc291cmNlIHNlY29uZGFyeV9pZGVfcmVzb3VyY2VzW10gPSB7Ci0JewotCQkubmFt ZSA9ICJiYXNlIiwKLQkJLnN0YXJ0ID0gMHgxNzAsCi0JCS5lbmQgPSAgMHgxNzcsCi0JCS5mbGFn cyA9IElPUkVTT1VSQ0VfSU8KLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBkZXZpY2VfZCBwcmlt YXJ5X2lkZV9kZXZpY2UgPSB7Ci0JLm5hbWUgPSAiaWRlX2ludGYiLAotCS5pZCA9IDAsCi0JLnBs YXRmb3JtX2RhdGEgPSAmaWRlX3BsYXQsCi0JLnJlc291cmNlID0gcHJpbWFyeV9pZGVfcmVzb3Vy Y2VzLAotCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShwcmltYXJ5X2lkZV9yZXNvdXJjZXMp LAotfTsKLQotc3RhdGljIHN0cnVjdCBkZXZpY2VfZCBzZWNvbmRhcnlfaWRlX2RldmljZSA9IHsK LQkubmFtZSA9ICJpZGVfaW50ZiIsCi0JLmlkID0gMSwKLQkucGxhdGZvcm1fZGF0YSA9ICZpZGVf cGxhdCwKLQkucmVzb3VyY2UgPSBzZWNvbmRhcnlfaWRlX3Jlc291cmNlcywKLQkubnVtX3Jlc291 cmNlcyA9IEFSUkFZX1NJWkUoc2Vjb25kYXJ5X2lkZV9yZXNvdXJjZXMpLAotfTsKLQotc3RhdGlj IGludCBwbGF0Zm9ybV9pZGVfaW5pdCh2b2lkKQotewotCXN0cnVjdCBjZGV2ICpjZGV2OwotCi0J cGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZwcmltYXJ5X2lkZV9kZXZpY2UpOwotCXBsYXRmb3Jt X2RldmljZV9yZWdpc3Rlcigmc2Vjb25kYXJ5X2lkZV9kZXZpY2UpOwotCi0JaWYgKHBlcnNfZW52 X3NpemUgIT0gUEFUQ0hfQVJFQV9QRVJTX1NJWkVfVU5VU0VEKSB7Ci0JCWNkZXYgPSBkZXZmc19h ZGRfcGFydGl0aW9uKCJhdGEwIiwKLQkJCQlwZXJzX2Vudl9zdG9yYWdlICogNTEyLAotCQkJCSh1 bnNpZ25lZClwZXJzX2Vudl9zaXplICogNTEyLAotCQkJCURFVkZTX1BBUlRJVElPTl9GSVhFRCwg ImVudjAiKTsKLQkJcHJpbnRmKCJQYXJ0aXRpb246ICVsZFxuIiwgSVNfRVJSKGNkZXYpID8gUFRS X0VSUihjZGV2KSA6IDApOwotCX0gZWxzZQotCQlwcmludGYoIk5vIHBlcnNpc3RlbnQgc3RvcmFn ZSBkZWZpbmVkXG4iKTsKLQotCXJldHVybiAwOwotfQotZGV2aWNlX2luaXRjYWxsKHBsYXRmb3Jt X2lkZV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2JvYXJkcy94ODZfZ2VuZXJpYy9zZXJp YWxfbnMxNjU1MC5jIGIvYXJjaC94ODYvYm9hcmRzL3g4Nl9nZW5lcmljL3NlcmlhbF9uczE2NTUw LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxNTliYzM5ZmI3Ni4uMDAwMDAwMDAw MDAwCi0tLSBhL2FyY2gveDg2L2JvYXJkcy94ODZfZ2VuZXJpYy9zZXJpYWxfbnMxNjU1MC5jCisr KyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IEdQTC0yLjAtb3ItbGF0ZXIKLS8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMDkgSnVlcmdl biBCZWlzZXJ0LCBQZW5ndXRyb25peAotLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAwOSBN aWNoZWwgU3RhbSwgRnVncm8gSW50ZXJzaXRlCi0KLS8qKgotICogQGZpbGUKLSAqIEBicmllZiBH ZW5lcmljIFBDIHN1cHBvcnQgdG8gbGV0IGJhcmVib3ggYWN0aW5nIGFzIGEgYm9vdCBsb2FkZXIK LSAqLwotCi0jaW5jbHVkZSA8Y29tbW9uLmg+Ci0jaW5jbHVkZSA8dHlwZXMuaD4KLSNpbmNsdWRl IDxkcml2ZXIuaD4KLSNpbmNsdWRlIDxpbml0Lmg+Ci0jaW5jbHVkZSA8YXNtL3N5c2xpYi5oPgot I2luY2x1ZGUgPHBsYXRmb3JtX2RhdGEvc2VyaWFsLW5zMTY1NTAuaD4KLSNpbmNsdWRlIDxsaW51 eC9lcnIuaD4KLQotc3RhdGljIHN0cnVjdCBOUzE2NTUwX3BsYXQgc2VyaWFsX3BsYXQgPSB7Ci0J LmNsb2NrID0gMTg0MzIwMCwKLX07Ci0KLXN0YXRpYyBpbnQgcGNfY29uc29sZV9pbml0KHZvaWQp Ci17Ci0JYmFyZWJveF9zZXRfbW9kZWwoIlg4NiBnZW5lcmljIGJhcmVib3giKTsKLQliYXJlYm94 X3NldF9ob3N0bmFtZSgieDg2Iik7Ci0KLQkvKiBSZWdpc3RlciB0aGUgc2VyaWFsIHBvcnQgKi8K LQlhZGRfbnMxNjU1MF9kZXZpY2UoREVWSUNFX0lEX0RZTkFNSUMsIDB4M2Y4LCA4LCBJT1JFU09V UkNFX0lPLAotCQkJICAgJnNlcmlhbF9wbGF0KTsKLQlhZGRfbnMxNjU1MF9kZXZpY2UoREVWSUNF X0lEX0RZTkFNSUMsIDB4MmY4LCA4LCBJT1JFU09VUkNFX0lPLAotCQkJICAgJnNlcmlhbF9wbGF0 KTsKLQotCXJldHVybiAwOwotfQotY29uc29sZV9pbml0Y2FsbChwY19jb25zb2xlX2luaXQpOwpk aWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9LY29uZmlnIGIvYXJjaC94ODYvYm9vdC9LY29uZmln CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZGJhMDBkNTkxNjEuLjAwMDAwMDAwMDAw MAotLS0gYS9hcmNoL3g4Ni9ib290L0tjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCww IEBACi1pZiBYODZfQklPU19CUklOR1VQCi0KLW1lbnUgIkJJT1MgYm9vdCBzb3VyY2UiCi0KLWNv bmZpZyBYODZfSERCT09UCi0JYm9vbCAiSEQgYm9vdCIKLQloZWxwCi0JICBBZGQgY29kZSB0byBi b290IGZyb20gaGFyZGRpc2sKLQotY29uZmlnIFg4Nl9WRVNBCi0JYm9vbAotCWRlZmF1bHQgeSBp ZiBYODZfR0VORVJJQ19IQVNfVklERU8KLQotY29uZmlnIFg4Nl9WR0EKLQlib29sCi0JZGVmYXVs dCB5IGlmIFg4Nl9HRU5FUklDX0hBU19WSURFTwotCi1lbmRtZW51Ci0KLWVuZGlmCmRpZmYgLS1n aXQgYS9hcmNoL3g4Ni9ib290L01ha2VmaWxlIGIvYXJjaC94ODYvYm9vdC9NYWtlZmlsZQpkZWxl dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGE1MjBhMmE4NGQ0Li4wMDAwMDAwMDAwMDAKLS0t IGEvYXJjaC94ODYvYm9vdC9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAK LQotS0JVSUxEX0NQUEZMQUdTICs9IC1EX19JMzg2X18gLWZuby1zdHJpY3QtYWxpYXNpbmcgLW0z MiAtZyAtT3MgLW1hcmNoPWkzODYgXAotCS1tcmVncGFybT0zIC1mbm8tc3RyaWN0LWFsaWFzaW5n IC1mb21pdC1mcmFtZS1wb2ludGVyIC1mZnJlZXN0YW5kaW5nIFwKLQktZm5vLXRvcGxldmVsLXJl b3JkZXIgLWZuby11bml0LWF0LWEtdGltZSAtZm5vLXN0YWNrLXByb3RlY3RvciBcCi0JLW1wcmVm ZXJyZWQtc3RhY2stYm91bmRhcnk9MgotCi1vYmotJChDT05GSUdfWDg2X0hEQk9PVCkJKz0gYm9v dF9tYWluLm8gYm9vdF9oZGlzay5vCi0KLW9iai0kKENPTkZJR19YODZfQklPU19CUklOR1VQKQkr PSBwcmVwYXJlX3Vib290Lm8gYTIwLm8gYmlvc2NhbGwubyByZWdzLm8gdHR5Lm8gcG1qdW1wLm8g bWFpbl9lbnRyeS5vCi0KLW9iai0kKENPTkZJR19YODZfVkVTQSkgKz0gY29uc29sZV92ZXNhLm8K LW9iai0kKENPTkZJR19YODZfVkdBKSArPSBjb25zb2xlX3ZnYS5vCi1vYmotJChDT05GSUdfWDg2 X1NFUklBTCkgKz0gY29uc29sZV9zZXJpYWwubwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9h MjAuYyBiL2FyY2gveDg2L2Jvb3QvYTIwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IGY1MDFmZWVlZGRjMi4uMDAwMDAwMDAwMDAwCi0tLSBhL2FyY2gveDg2L2Jvb3QvYTIwLmMKKysr IC9kZXYvbnVsbApAQCAtMSwxNjYgKzAsMCBAQAotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IEdQTC0yLjAtb25seQotLy8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMTk5MSwxOTkyIExpbnVz IFRvcnZhbGRzCi0vLyBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDA3LTIwMDggclBhdGgsIElu Yy4KLS8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMDkgSW50ZWwgQ29ycG9yYXRpb24KLQot LyogQXV0aG9yOiBILiBQZXRlciBBbnZpbiBhbmQgb3RoZXJzICovCi0KLS8qCi0gKiBFbmFibGUg QTIwIGdhdGUgKHJldHVybiAtMSBvbiBmYWlsdXJlKQotICovCi0KLSNpbmNsdWRlIDxhc20vc2Vn bWVudC5oPgotI2luY2x1ZGUgPGlvLmg+Ci0jaW5jbHVkZSAiYm9vdC5oIgotCi0jZGVmaW5lIE1B WF84MDQyX0xPT1BTCTEwMDAwMAotI2RlZmluZSBNQVhfODA0Ml9GRgkzMgotCi0vKiBiZSBhd2Fy ZSBvZjogKi8KLVRISVNfSVNfUkVBTE1PREVfQ09ERQotCi1zdGF0aWMgaW50IF9fYm9vdGNvZGUg ZW1wdHlfODA0Mih2b2lkKQotewotCXU4IHN0YXR1czsKLQlpbnQgbG9vcHMgPSBNQVhfODA0Ml9M T09QUzsKLQlpbnQgZmZzICAgPSBNQVhfODA0Ml9GRjsKLQotCXdoaWxlIChsb29wcy0tKSB7Ci0J CWlvX2RlbGF5KCk7Ci0KLQkJc3RhdHVzID0gaW5iKDB4NjQpOwotCQlpZiAoc3RhdHVzID09IDB4 ZmYpIHsKLQkJCS8qIEZGIGlzIGEgcGxhdXNpYmxlLCBidXQgdmVyeSB1bmxpa2VseSBzdGF0dXMg Ki8KLQkJCWlmICghLS1mZnMpCi0JCQkJcmV0dXJuIC0xOyAvKiBBc3N1bWUgbm8gS0JDIHByZXNl bnQgKi8KLQkJfQotCQlpZiAoc3RhdHVzICYgMSkgewotCQkJLyogUmVhZCBhbmQgZGlzY2FyZCBp bnB1dCBkYXRhICovCi0JCQlpb19kZWxheSgpOwotCQkJKHZvaWQpaW5iKDB4NjApOwotCQl9IGVs c2UgaWYgKCEoc3RhdHVzICYgMikpIHsKLQkJCS8qIEJ1ZmZlcnMgZW1wdHksIGZpbmlzaGVkISAq LwotCQkJcmV0dXJuIDA7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gLTE7Ci19Ci0KLS8qIFJldHVybnMg bm9uemVybyBpZiB0aGUgQTIwIGxpbmUgaXMgZW5hYmxlZC4gIFRoZSBtZW1vcnkgYWRkcmVzcwot ICAgdXNlZCBhcyBhIHRlc3QgaXMgdGhlIGludCAkMHg4MCB2ZWN0b3IsIHdoaWNoIHNob3VsZCBi ZSBzYWZlLiAqLwotCi0jZGVmaW5lIEEyMF9URVNUX0FERFIJKDQqMHg4MCkKLSNkZWZpbmUgQTIw X1RFU1RfU0hPUlQgIDMyCi0jZGVmaW5lIEEyMF9URVNUX0xPTkcJMjA5NzE1MgkvKiAyXjIxICov Ci0KLXN0YXRpYyBpbnQgX19ib290Y29kZSBhMjBfdGVzdChpbnQgbG9vcHMpCi17Ci0JaW50IG9r ID0gMDsKLQlpbnQgc2F2ZWQsIGN0cjsKLQotCXNldF9mcygweDAwMDApOwotCXNldF9ncygweGZm ZmYpOwotCi0Jc2F2ZWQgPSBjdHIgPSByZGZzMzIoQTIwX1RFU1RfQUREUik7Ci0KLQl3aGlsZSAo bG9vcHMtLSkgewotCQl3cmZzMzIoKytjdHIsIEEyMF9URVNUX0FERFIpOwotCQlpb19kZWxheSgp OwkvKiBTZXJpYWxpemUgYW5kIG1ha2UgZGVsYXkgY29uc3RhbnQgKi8KLQkJb2sgPSByZGdzMzIo QTIwX1RFU1RfQUREUisweDEwKSBeIGN0cjsKLQkJaWYgKG9rKQotCQkJYnJlYWs7Ci0JfQotCi0J d3JmczMyKHNhdmVkLCBBMjBfVEVTVF9BRERSKTsKLQlyZXR1cm4gb2s7Ci19Ci0KLS8qIFF1aWNr IHRlc3QgdG8gc2VlIGlmIEEyMCBpcyBhbHJlYWR5IGVuYWJsZWQgKi8KLXN0YXRpYyBpbnQgX19i b290Y29kZSBhMjBfdGVzdF9zaG9ydCh2b2lkKQotewotCXJldHVybiBhMjBfdGVzdChBMjBfVEVT VF9TSE9SVCk7Ci19Ci0KLS8qIExvbmdlciB0ZXN0IHRoYXQgYWN0dWFsbHkgd2FpdHMgZm9yIEEy MCB0byBjb21lIG9uIGxpbmU7IHRoaXMKLSAgIGlzIHVzZWZ1bCB3aGVuIGRlYWxpbmcgd2l0aCB0 aGUgS0JDIG9yIG90aGVyIHNsb3cgZXh0ZXJuYWwgY2lyY3VpdHJ5LiAqLwotc3RhdGljIGludCBf X2Jvb3Rjb2RlIGEyMF90ZXN0X2xvbmcodm9pZCkKLXsKLQlyZXR1cm4gYTIwX3Rlc3QoQTIwX1RF U1RfTE9ORyk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fYm9vdGNvZGUgZW5hYmxlX2EyMF9iaW9zKHZv aWQpCi17Ci0Jc3RydWN0IGJpb3NyZWdzIGlyZWc7Ci0KLQlpbml0cmVncygmaXJlZyk7Ci0JaXJl Zy5heCA9IDB4MjQwMTsKLQlpbnRjYWxsKDB4MTUsICZpcmVnLCBOVUxMKTsKLX0KLQotc3RhdGlj IHZvaWQgX19ib290Y29kZSBlbmFibGVfYTIwX2tiYyh2b2lkKQotewotCWVtcHR5XzgwNDIoKTsK LQotCW91dGIoMHhkMSwgMHg2NCk7CS8qIENvbW1hbmQgd3JpdGUgKi8KLQllbXB0eV84MDQyKCk7 Ci0KLQlvdXRiKDB4ZGYsIDB4NjApOwkvKiBBMjAgb24gKi8KLQllbXB0eV84MDQyKCk7Ci0KLQlv dXRiKDB4ZmYsIDB4NjQpOwkvKiBOdWxsIGNvbW1hbmQsIGJ1dCBVSENJIHdhbnRzIGl0ICovCi0J ZW1wdHlfODA0MigpOwotfQotCi1zdGF0aWMgdm9pZCBfX2Jvb3Rjb2RlIGVuYWJsZV9hMjBfZmFz dCh2b2lkKQotewotCXU4IHBvcnRfYTsKLQotCXBvcnRfYSA9IGluYigweDkyKTsJLyogQ29uZmln dXJhdGlvbiBwb3J0IEEgKi8KLQlwb3J0X2EgfD0gIDB4MDI7CS8qIEVuYWJsZSBBMjAgKi8KLQlw b3J0X2EgJj0gfjB4MDE7CS8qIERvIG5vdCByZXNldCBtYWNoaW5lICovCi0Jb3V0Yihwb3J0X2Es IDB4OTIpOwotfQotCi0vKgotICogQWN0dWFsIHJvdXRpbmUgdG8gZW5hYmxlIEEyMDsgcmV0dXJu IDAgb24gb2ssIC0xIG9uIGZhaWx1cmUKLSAqLwotCi0jZGVmaW5lIEEyMF9FTkFCTEVfTE9PUFMg MjU1CS8qIE51bWJlciBvZiB0aW1lcyB0byB0cnkgKi8KLQotaW50IF9fYm9vdGNvZGUgZW5hYmxl X2EyMCh2b2lkKQotewotICAgICAgIGludCBsb29wcyA9IEEyMF9FTkFCTEVfTE9PUFM7Ci0gICAg ICAgaW50IGtiY19lcnI7Ci0KLSAgICAgICB3aGlsZSAobG9vcHMtLSkgewotCSAgICAgICAvKiBG aXJzdCwgY2hlY2sgdG8gc2VlIGlmIEEyMCBpcyBhbHJlYWR5IGVuYWJsZWQKLQkJICAobGVnYWN5 IGZyZWUsIGV0Yy4pICovCi0JICAgICAgIGlmIChhMjBfdGVzdF9zaG9ydCgpKQotCQkgICAgICAg cmV0dXJuIDA7Ci0KLQkgICAgICAgLyogTmV4dCwgdHJ5IHRoZSBCSU9TIChJTlQgMHgxNSwgQVg9 MHgyNDAxKSAqLwotCSAgICAgICBlbmFibGVfYTIwX2Jpb3MoKTsKLQkgICAgICAgaWYgKGEyMF90 ZXN0X3Nob3J0KCkpCi0JCSAgICAgICByZXR1cm4gMDsKLQotCSAgICAgICAvKiBUcnkgZW5hYmxp bmcgQTIwIHRocm91Z2ggdGhlIGtleWJvYXJkIGNvbnRyb2xsZXIgKi8KLQkgICAgICAga2JjX2Vy ciA9IGVtcHR5XzgwNDIoKTsKLQotCSAgICAgICBpZiAoYTIwX3Rlc3Rfc2hvcnQoKSkKLQkJICAg ICAgIHJldHVybiAwOyAvKiBCSU9TIHdvcmtlZCwgYnV0IHdpdGggZGVsYXllZCByZWFjdGlvbiAq LwotCi0JICAgICAgIGlmICgha2JjX2VycikgewotCQkgICAgICAgZW5hYmxlX2EyMF9rYmMoKTsK LQkJICAgICAgIGlmIChhMjBfdGVzdF9sb25nKCkpCi0JCQkgICAgICAgcmV0dXJuIDA7Ci0JICAg ICAgIH0KLQotCSAgICAgICAvKiBGaW5hbGx5LCB0cnkgZW5hYmxpbmcgdGhlICJmYXN0IEEyMCBn YXRlIiAqLwotCSAgICAgICBlbmFibGVfYTIwX2Zhc3QoKTsKLQkgICAgICAgaWYgKGEyMF90ZXN0 X2xvbmcoKSkKLQkJICAgICAgIHJldHVybiAwOwotICAgICAgIH0KLQotICAgICAgIHJldHVybiAt MTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3QvYmlvc2NhbGwuUyBiL2FyY2gveDg2L2Jv b3QvYmlvc2NhbGwuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmNkYTFlYjQwYTQ5 Li4wMDAwMDAwMDAwMDAKLS0tIGEvYXJjaC94ODYvYm9vdC9iaW9zY2FsbC5TCisrKyAvZGV2L251 bGwKQEAgLTEsOTAgKzAsMCBAQAotLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAt b3ItbGF0ZXIgKi8KLS8qIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMDkgSW50ZWwgQ29ycG9y YXRpb24gKi8KLQotLyogQXV0aG9yOiBILiBQZXRlciBBbnZpbiAqLwotCi0vKgotICogIkdsb3Zl IGJveCIgZm9yIEJJT1MgY2FsbHMuICBBdm9pZHMgdGhlIGNvbnN0YW50IHByb2JsZW1zIHdpdGgg QklPU2VzCi0gKiB0b3VjaGluZyByZWdpc3RlcnMgdGhleSBzaG91bGRuJ3QgYmUuCi0gKi8KLQot CS5maWxlCSJiaW9zY2FsbC5TIgotCS5jb2RlMTYKLQkuc2VjdGlvbiAuYm9vdC50ZXh0LmludGNh bGwsICJheCIKLQotCS5nbG9ibAlpbnRjYWxsCi0JLnR5cGUJaW50Y2FsbCwgQGZ1bmN0aW9uCi1p bnRjYWxsOgotCS8qIFNlbGYtbW9kaWZ5IHRoZSBJTlQgaW5zdHJ1Y3Rpb24uICBVZ2x5LCBidXQg d29ya3MuICovCi0JY21wYgklYWwsIDNmCi0JamUJMWYKLQltb3ZiCSVhbCwgM2YKLQlqbXAJMWYJ CS8qIFN5bmNocm9uaXplIHBpcGVsaW5lICovCi0xOgotCS8qIFNhdmUgc3RhdGUgKi8KLQlwdXNo ZmwKLQlwdXNodwklZnMKLQlwdXNodwklZ3MKLQlwdXNoYWwKLQotCS8qIENvcHkgaW5wdXQgc3Rh dGUgdG8gc3RhY2sgZnJhbWUgKi8KLQlzdWJ3CSQ0NCwgJXNwCi0JbW92dwklZHgsICVzaQotCW1v dncJJXNwLCAlZGkKLQltb3Z3CSQxMSwgJWN4Ci0JcmVwOyBtb3ZzZAotCi0JLyogUG9wIGZ1bGwg c3RhdGUgZnJvbSB0aGUgc3RhY2sgKi8KLQlwb3BhbAotCXBvcHcJJWdzCi0JcG9wdwklZnMKLQlw b3B3CSVlcwotCXBvcHcJJWRzCi0JcG9wZmwKLQotCS8qIEFjdHVhbCBJTlQgKi8KLQkuYnl0ZQkw eGNkCQkvKiBJTlQgb3Bjb2RlICovCi0zOgkuYnl0ZQkwCi0KLQkvKiBQdXNoIGZ1bGwgc3RhdGUg dG8gdGhlIHN0YWNrICovCi0JcHVzaGZsCi0JcHVzaHcJJWRzCi0JcHVzaHcJJWVzCi0JcHVzaHcJ JWZzCi0JcHVzaHcJJWdzCi0JcHVzaGFsCi0KLQkvKiBSZS1lc3RhYmxpc2ggQyBlbnZpcm9ubWVu dCBpbnZhcmlhbnRzICovCi0JY2xkCi0JbW92endsCSVzcCwgJWVzcAotCW1vdncJJWNzLCAlYXgK LQltb3Z3CSVheCwgJWRzCi0JbW92dwklYXgsICVlcwotCi0JLyogQ29weSBvdXRwdXQgc3RhdGUg ZnJvbSBzdGFjayBmcmFtZSAqLwotCW1vdncJNjgoJWVzcCksICVkaQkvKiBPcmlnaW5hbCAlY3gg PT0gM3JkIGFyZ3VtZW50ICovCi0JYW5kdwklZGksICVkaQotCWp6CTRmCi0JbW92dwklc3AsICVz aQotCW1vdncJJDExLCAlY3gKLQlyZXA7IG1vdnNkCi00OglhZGR3CSQ0NCwgJXNwCi0KLQkvKiBS ZXN0b3JlIHN0YXRlIGFuZCByZXR1cm4gKi8KLQlwb3BhbAotCXBvcHcJJWdzCi0JcG9wdwklZnMK LQlwb3BmbAotCXJldGwKLQkuc2l6ZQlpbnRjYWxsLCAuLWludGNhbGwKLQotLyogLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tICovCi0JLmNvZGUxNgotCS5zZWN0aW9uIC5ib290LnRleHQuZGllLCAiYXgiCi0KLQku Z2xvYmwJZGllCi0JLnR5cGUJZGllLCBAZnVuY3Rpb24KLWRpZToKLSAgICAgICAgaGx0Ci0gICAg ICAgIGptcCAgICAgZGllCi0JLnNpemUJZGllLCAuLWRpZQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYv Ym9vdC9ib290LmggYi9hcmNoL3g4Ni9ib290L2Jvb3QuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggNTQ0ODNjNDZjNjk3Li4wMDAwMDAwMDAwMDAKLS0tIGEvYXJjaC94ODYvYm9vdC9i b290LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxODkgKzAsMCBAQAotLyogU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IEdQTC0yLjAtb25seSAqLwotLyogU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMTk5 MSwxOTkyIExpbnVzIFRvcnZhbGRzICovCi0vKiBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDA3 IHJQYXRoLCBJbmMuICovCi0vKiBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDA5IEludGVsIENv cnBvcmF0aW9uICovCi0KLS8qIEF1dGhvcjogSC4gUGV0ZXIgQW52aW4gYW5kIG90aGVycyAqLwot Ci0vKioKLSAqIEBmaWxlCi0gKiBAYnJpZWYgTWFpbiBkZWNsYXJhdGlvbnMgZm9yIHRoZSByZWFs IG1vZGUgY29kZQotICovCi0KLSNpZm5kZWYgQk9PVF9CT09UX0gKLSNkZWZpbmUgQk9PVF9CT09U X0gKLQotI2RlZmluZSBTVEFDS19TSVpFCTUxMgkvKiBNaW5pbXVtIG51bWJlciBvZiBieXRlcyBm b3Igc3RhY2sgKi8KLQotLyoqIENhcnJ5IGZsYWcgKi8KLSNkZWZpbmUgWDg2X0VGTEFHU19DRgkw eDAwMDAwMDAxCi0KLS8qKiBQRSBmbGFnICovCi0jZGVmaW5lIFg4Nl9DUjBfUEUgICAgICAweDAw MDAwMDAxCi0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0KLSNpbmNsdWRlIDx0eXBlcy5oPgotCi0v KiB3ZSBhcmUgc3RpbGwgaW4gcmVhbCBtb2RlIGhlcmUhICovCi0jZGVmaW5lIFRISVNfSVNfUkVB TE1PREVfQ09ERSBhc20oIi5jb2RlMTZnY2MiKTsKLQotc3RydWN0IGJpb3NyZWdzIHsKLQl1bmlv biB7Ci0JCXN0cnVjdCB7Ci0JCQl1aW50MzJfdCBlZGk7Ci0JCQl1aW50MzJfdCBlc2k7Ci0JCQl1 aW50MzJfdCBlYnA7Ci0JCQl1aW50MzJfdCBfZXNwOwotCQkJdWludDMyX3QgZWJ4OwotCQkJdWlu dDMyX3QgZWR4OwotCQkJdWludDMyX3QgZWN4OwotCQkJdWludDMyX3QgZWF4OwotCQkJdWludDMy X3QgX2ZzZ3M7Ci0JCQl1aW50MzJfdCBfZHNlczsKLQkJCXVpbnQzMl90IGVmbGFnczsKLQkJfTsK LQkJc3RydWN0IHsKLQkJCXVpbnQxNl90IGRpLCBoZGk7Ci0JCQl1aW50MTZfdCBzaSwgaHNpOwot CQkJdWludDE2X3QgYnAsIGhicDsKLQkJCXVpbnQxNl90IF9zcCwgX2hzcDsKLQkJCXVpbnQxNl90 IGJ4LCBoYng7Ci0JCQl1aW50MTZfdCBkeCwgaGR4OwotCQkJdWludDE2X3QgY3gsIGhjeDsKLQkJ CXVpbnQxNl90IGF4LCBoYXg7Ci0JCQl1aW50MTZfdCBncywgZnM7Ci0JCQl1aW50MTZfdCBlcywg ZHM7Ci0JCQl1aW50MTZfdCBmbGFncywgaGZsYWdzOwotCQl9OwotCQlzdHJ1Y3QgewotCQkJdWlu dDhfdCBkaWwsIGRpaCwgZWRpMiwgZWRpMzsKLQkJCXVpbnQ4X3Qgc2lsLCBzaWgsIGVzaTIsIGVz aTM7Ci0JCQl1aW50OF90IGJwbCwgYnBoLCBlYnAyLCBlYnAzOwotCQkJdWludDhfdCBfc3BsLCBf c3BoLCBfZXNwMiwgX2VzcDM7Ci0JCQl1aW50OF90IGJsLCBiaCwgZWJ4MiwgZWJ4MzsKLQkJCXVp bnQ4X3QgZGwsIGRoLCBlZHgyLCBlZHgzOwotCQkJdWludDhfdCBjbCwgY2gsIGVjeDIsIGVjeDM7 Ci0JCQl1aW50OF90IGFsLCBhaCwgZWF4MiwgZWF4MzsKLQkJfTsKLQl9OwotfTsKLQotLyogZnVu Y3Rpb25zIGluIHRoZSByZWFsbW9kZSBwYXJ0ICovCi1leHRlcm4gaW50IGVuYWJsZV9hMjAodm9p ZCk7Ci1leHRlcm4gdm9pZCBpbml0cmVncyhzdHJ1Y3QgYmlvc3JlZ3MgKnJlZ3MpOwotZXh0ZXJu IHZvaWQgaW50Y2FsbCh1aW50OF90IGludF9ubywgY29uc3Qgc3RydWN0IGJpb3NyZWdzICppcmVn LCBzdHJ1Y3QgYmlvc3JlZ3MgKm9yZWcpOwotZXh0ZXJuIHZvaWQgYm9vdF9wdXRzKGNoYXIqKTsK LWV4dGVybiB2b2lkIF9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSkgZGllKHZvaWQpOwotZXh0ZXJu IHZvaWQgX19hdHRyaWJ1dGVfXygobm9yZXR1cm4pKSBwcm90ZWN0ZWRfbW9kZV9qdW1wKHZvaWQp OwotCi1zdHJ1Y3QgZ2R0X3B0ciB7Ci0JdWludDE2X3QgbGVuOwotCXVpbnQzMl90IHB0cjsKLX0g X19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci0KLS8qIFRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCB0 byByZWZlcmVuY2UgZGF0YSBpbiBvdGhlciBzZWdtZW50cy4gKi8KLQotc3RhdGljIGlubGluZSB1 aW50MTZfdCBkcyh2b2lkKQotewotCXVpbnQxNl90IHNlZzsKLQlhc20oIm1vdncgJSVkcywlMCIg OiAiPXJtIiAoc2VnKSk7Ci0JcmV0dXJuIHNlZzsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNl dF9mcyh1aW50MTZfdCBzZWcpCi17Ci0JYXNtIHZvbGF0aWxlKCJtb3Z3ICUwLCUlZnMiIDogOiAi cm0iIChzZWcpKTsKLX0KLQotc3RhdGljIGlubGluZSB1aW50MTZfdCBmcyh2b2lkKQotewotCXVp bnQxNl90IHNlZzsKLQlhc20gdm9sYXRpbGUoIm1vdncgJSVmcywlMCIgOiAiPXJtIiAoc2VnKSk7 Ci0JcmV0dXJuIHNlZzsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNldF9ncyh1aW50MTZfdCBz ZWcpCi17Ci0JYXNtIHZvbGF0aWxlKCJtb3Z3ICUwLCUlZ3MiIDogOiAicm0iIChzZWcpKTsKLX0K LQotc3RhdGljIGlubGluZSB1aW50MTZfdCBncyh2b2lkKQotewotCXVpbnQxNl90IHNlZzsKLQlh c20gdm9sYXRpbGUoIm1vdncgJSVncywlMCIgOiAiPXJtIiAoc2VnKSk7Ci0JcmV0dXJuIHNlZzsK LX0KLQotdHlwZWRlZiB1bnNpZ25lZCBpbnQgYWRkcl90OwotCi1zdGF0aWMgaW5saW5lIHVpbnQ4 X3QgcmRmczgoYWRkcl90IGFkZHIpCi17Ci0JdWludDhfdCB2OwotCWFzbSB2b2xhdGlsZSgibW92 YiAlJWZzOiUxLCUwIiA6ICI9cSIgKHYpIDogIm0iICgqKHVpbnQ4X3QgKilhZGRyKSk7Ci0JcmV0 dXJuIHY7Ci19Ci1zdGF0aWMgaW5saW5lIHVpbnQxNl90IHJkZnMxNihhZGRyX3QgYWRkcikKLXsK LQl1aW50MTZfdCB2OwotCWFzbSB2b2xhdGlsZSgibW92dyAlJWZzOiUxLCUwIiA6ICI9ciIgKHYp IDogIm0iICgqKHVpbnQxNl90ICopYWRkcikpOwotCXJldHVybiB2OwotfQotc3RhdGljIGlubGlu ZSB1aW50MzJfdCByZGZzMzIoYWRkcl90IGFkZHIpCi17Ci0JdWludDMyX3QgdjsKLQlhc20gdm9s YXRpbGUoIm1vdmwgJSVmczolMSwlMCIgOiAiPXIiICh2KSA6ICJtIiAoKih1aW50MzJfdCAqKWFk ZHIpKTsKLQlyZXR1cm4gdjsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHdyZnM4KHVpbnQ4X3Qg diwgYWRkcl90IGFkZHIpCi17Ci0JYXNtIHZvbGF0aWxlKCJtb3ZiICUxLCUlZnM6JTAiIDogIitt IiAoKih1aW50OF90ICopYWRkcikgOiAicWkiICh2KSk7Ci19Ci1zdGF0aWMgaW5saW5lIHZvaWQg d3JmczE2KHVpbnQxNl90IHYsIGFkZHJfdCBhZGRyKQotewotCWFzbSB2b2xhdGlsZSgibW92dyAl MSwlJWZzOiUwIiA6ICIrbSIgKCoodWludDE2X3QgKilhZGRyKSA6ICJyaSIgKHYpKTsKLX0KLXN0 YXRpYyBpbmxpbmUgdm9pZCB3cmZzMzIodWludDMyX3QgdiwgYWRkcl90IGFkZHIpCi17Ci0JYXNt IHZvbGF0aWxlKCJtb3ZsICUxLCUlZnM6JTAiIDogIittIiAoKih1aW50MzJfdCAqKWFkZHIpIDog InJpIiAodikpOwotfQotCi1zdGF0aWMgaW5saW5lIHVpbnQ4X3QgcmRnczgoYWRkcl90IGFkZHIp Ci17Ci0JdWludDhfdCB2OwotCWFzbSB2b2xhdGlsZSgibW92YiAlJWdzOiUxLCUwIiA6ICI9cSIg KHYpIDogIm0iICgqKHVpbnQ4X3QgKilhZGRyKSk7Ci0JcmV0dXJuIHY7Ci19Ci1zdGF0aWMgaW5s aW5lIHVpbnQxNl90IHJkZ3MxNihhZGRyX3QgYWRkcikKLXsKLQl1aW50MTZfdCB2OwotCWFzbSB2 b2xhdGlsZSgibW92dyAlJWdzOiUxLCUwIiA6ICI9ciIgKHYpIDogIm0iICgqKHVpbnQxNl90ICop YWRkcikpOwotCXJldHVybiB2OwotfQotc3RhdGljIGlubGluZSB1aW50MzJfdCByZGdzMzIoYWRk cl90IGFkZHIpCi17Ci0JdWludDMyX3QgdjsKLQlhc20gdm9sYXRpbGUoIm1vdmwgJSVnczolMSwl MCIgOiAiPXIiICh2KSA6ICJtIiAoKih1aW50MzJfdCAqKWFkZHIpKTsKLQlyZXR1cm4gdjsKLX0K LQotc3RhdGljIGlubGluZSB2b2lkIHdyZ3M4KHVpbnQ4X3QgdiwgYWRkcl90IGFkZHIpCi17Ci0J YXNtIHZvbGF0aWxlKCJtb3ZiICUxLCUlZ3M6JTAiIDogIittIiAoKih1aW50OF90ICopYWRkcikg OiAicWkiICh2KSk7Ci19Ci1zdGF0aWMgaW5saW5lIHZvaWQgd3JnczE2KHVpbnQxNl90IHYsIGFk ZHJfdCBhZGRyKQotewotCWFzbSB2b2xhdGlsZSgibW92dyAlMSwlJWdzOiUwIiA6ICIrbSIgKCoo dWludDE2X3QgKilhZGRyKSA6ICJyaSIgKHYpKTsKLX0KLXN0YXRpYyBpbmxpbmUgdm9pZCB3cmdz MzIodWludDMyX3QgdiwgYWRkcl90IGFkZHIpCi17Ci0JYXNtIHZvbGF0aWxlKCJtb3ZsICUxLCUl Z3M6JTAiIDogIittIiAoKih1aW50MzJfdCAqKWFkZHIpIDogInJpIiAodikpOwotfQotCi0vKiog dXNlIHRoZSBidWlsdCBpbiBtZW1zZXQgZnVuY3Rpb24gZm9yIHRoZSByZWFsIG1vZGUgY29kZSAq LwotI2RlZmluZSBtZW1zZXQoZCxjLGwpIF9fYnVpbHRpbl9tZW1zZXQoZCxjLGwpCi0KLSNlbmRp ZiAvKiBfX0FTU0VNQkxZX18gKi8KLQotI2VuZGlmIC8qIEJPT1RfQk9PVF9IICovCmRpZmYgLS1n aXQgYS9hcmNoL3g4Ni9ib290L2Jvb3RfaGRpc2suUyBiL2FyY2gveDg2L2Jvb3QvYm9vdF9oZGlz ay5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Zjk4MTk3NTEyYTAuLjAwMDAwMDAw MDAwMAotLS0gYS9hcmNoL3g4Ni9ib290L2Jvb3RfaGRpc2suUworKysgL2Rldi9udWxsCkBAIC0x LDE3MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEp1ZXJnZW4gQmVpc2VydCwg UGVuZ3V0cm9uaXgKLSAqCi0gKiBUaGlzIGNvZGUgd2FzIGluc3BpcmVkIGJ5IHRoZSBHUlVCMiBw cm9qZWN0LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgotICogdGhlIExpY2Vuc2Us IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9n cmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4KLSAqCi0gKgotICovCi0KLS8qKgotICogQGZpbGUKLSAqIEBicmllZiBMb2FkaW5n IHRoZSBiYXJlYm94IGltYWdlIGZyb20gYSBkaXNrIGRyaXZlIGluIExCQSBtb2RlCi0gKi8KLQot LyoqCi0gKiBAZm4gdm9pZCByZWFsX3N0YXJ0KHZvaWQpCi0gKiBAYnJpZWYgQSB2ZXJ5IHNpbXBs ZSBhbmQgc21hbGwgbG9hZGVyIHRvIGZldGNoIGFsbCByZXF1aXJlZCBzZWN0b3JzCi0gKiBmcm9t IHRoZSBib290IG1lZGlhLgotICovCi0KLQotCS5maWxlICJib290X2hkaXNrLlMiCi0JLmNvZGUx NgotCi0JLyoKLQkgKiBUaGVzZSBzeW1ib2xzIGFyZSBnZW5lcmF0ZWQgYnkgdGhlIGxpbmtlciwg YmVjYXVzZSB0aGV5IG5lZWQgYQotCSAqIHNwZWNpYWwgbGF5b3V0LiBUaGlzIGxheW91dCBpcyBu ZWVkZWQgdG8gYmUgYWJsZSB0byBzZXR1cCB0aGlzCi0JICogYm9vdGxvYWRlciBieSBwYXRjaGlu ZyB0aGUgYmluYXJ5IHdoZW4gaXQgZ2V0cyBzdG9yZWQgaW50byB0aGUKLQkgKiBtYXN0ZXIgYm9v dCByZWNvcmQuCi0JICovCi0JLmV4dGVybiBpbmRpcmVjdF9zZWN0b3JfbGJhCi0JLmV4dGVybiBi b290X3N0YWNrCi0JLmV4dGVybiBzdGFydF9wcmVfdWJvb3QKLQkuZXh0ZXJuIGJvb3RfZGlzawot CS5zZWN0aW9uIC5ib290X2NvZGUsICJheCIKLQotCS5nbG9ibCByZWFsX3N0YXJ0Ci0JLnR5cGUg cmVhbF9zdGFydCwgQGZ1bmN0aW9uCi0KLXJlYWxfc3RhcnQ6Ci0KLQl4b3J3ICVheCwgJWF4CS8q IHNldCB1cCAlZHMgYW5kICVzcyBhcyBvZmZzZXQgZnJvbSAwICovCi0JbW92dyAlYXgsICVkcwot CW1vdncgJWF4LCAlc3MKLQotCS8qIHNldCB1cCB0aGUgUkVBTCBzdGFjayAqLwotCW1vdncgJGJv b3Rfc3RhY2ssICVzcAotCi0Jc3RpCQkvKiB3ZSdyZSBzYWZlIGFnYWluICovCi0KLQkvKiBzYXZl IGRyaXZlIHJlZmVyZW5jZSBmaXJzdCB0aGluZyEgKi8KLQltb3ZiICVkbCwgYm9vdF9kaXNrCi0J cHVzaHcgJWR4Ci0KLQltb3Z3ICRub3RpZmljYXRpb25fc3RyaW5nLCAlc2kKLQljYWxsIG91dHB1 dF9tZXNzYWdlCi0KLQkvKgotCSAqIFRoaXMgYm9vdCBjb2RlIG9ubHkgc3VwcG9ydHMgTEJBLiBX ZSBmYWlsIGhlcmUsIGlmIHRoZSBCSU9TCi0JICogZG9lcyBub3Qgc3VwcG9ydCBMQkEgZm9yIHRo ZSBoYXJkZGlzawotCSAqLwotCi0JLyogY2hlY2sgaWYgTEJBIGlzIHN1cHBvcnRlZCAqLwotCW1v dmIgJDB4NDEsICVhaAotCW1vdncgJDB4NTVhYSwgJWJ4Ci0JaW50ICQweDEzCi0KLQkvKgotCSAq ICAlZGwgbWF5IGhhdmUgYmVlbiBjbG9iYmVyZWQgYnkgSU5UIDEzLCBBSD00MUguCi0JICogIFRo aXMgaGFwcGVucywgZm9yIGV4YW1wbGUsIHdpdGggQVNUIEJJT1MgMS4wNC4KLQkgKi8KLQlwb3B3 ICVkeAotCXB1c2h3ICVkeAotCi0JLyogc3RvcCBpZiBubyBMQkEgc3VwcG9ydCAqLwotCWpjIG5v X2xiYQotCWNtcHcgJDB4YWE1NSwgJWJ4Ci0Jam5lIG5vX2xiYQotCWFuZHcgJDEsICVjeAotCWp6 IG5vX2xiYQotCi1sYmFfbW9kZToKLQkvKgotCSAqIExvYWQgdGhlIGluZGlyZWN0IHNlY3Rvci4g SXRzIGNvbnRlbnQgaXMgcmVhZHkgZm9yIHVzZSwKLQkgKiBwcm92aWRlZCBieSB0aGUgaW5zdGFs bGVyCi0JICovCi0JbW92dyAkaW5kaXJlY3Rfc2VjdG9yX2xiYSwgJXNpCi0JbW92YiAkMHg0Miwg JWFoCi0JaW50ICQweDEzCi0JamMgbm9fbGJhCS8qIGVycm9yPyBUaGVuIGRpZSAqLwotCi0JLyoK LQkgKiBOb3cgbG9vcCB0aHJvdWdoIGFsbCB2YWxpZCBlbnRyaWVzIGluIHRoZSBpbmRpcmVjdCBz ZWN0b3IKLQkgKi8KLQltb3Z3ICRpbmRpcmVjdF9hcmVhLCAlc2kKLQotbG9hZF9sb29wOgotCS8q Ci0JICogU3RvcCBpZiB0aGlzICJEaXNrIEFkZHJlc3MgUGFja2V0IFN0cnVjdHVyZSIgaXMgaW52 YWxpZAotCSAqIFdlIGNhbGwgaXQgaW52YWxpZCwgaWYgdGhlIHNpemUgbWVtYmVyIGlzIHplcm8u IElmIGl0IGlzIGludmFsaWQKLQkgKiB3ZSBhcmUgb3B0aW1pc3RpYyBhbmQgY2FsbGluZyB0aGUg bG9hZGVkIGltYWdlCi0JICovCi0JbW92dyAoJXNpKSwgJWF4Ci0JY21wdyAkMHgwMDAwLCAlYXgK LQlqZSBzdGFydF9tYWluCi0KLQkvKgotCSAqIExvYWQgdGhpcyBlbnRyeQotCSAqLwotCW1vdmIg JDB4NDIsICVhaAotCWludCAkMHgxMwotCWpjIG5vX2xiYQotCi0JYWRkdyAoJXNpKSwgJXNpCS8q IG5leHQgZW50cnkgKi8KLQljbXB3ICRpbmRpcmVjdF9hcmVhICsgNTEyLCAlc2kKLQlqbmUgbG9h ZF9sb29wCi0JLyoKLQkgKiBmYWxsIHRocm91Z2ggdG8gc3RhcnQgdS1ib290LgotCSAqLwotc3Rh cnRfbWFpbjoKLQltb3Z3ICRqbXBfc3RyaW5nLCAlc2kKLQljYWxsIG91dHB1dF9tZXNzYWdlCi0J am1wIHN0YXJ0X3ByZV91Ym9vdAotLyoKLSAqIGRpZSBpZiB0aGVyZSBpcyBubyBMQkEgc3VwcG9y dAotICovCi1ub19sYmE6CW1vdncgJGNoc19zdHJpbmcsICVzaQotCWNhbGwgb3V0cHV0X21lc3Nh Z2UKLQlobHQKLQotLyoKLSAqIG1lc3NhZ2U6IHdyaXRlIHRoZSBzdHJpbmcgcG9pbnRlZCB0byBi eSAlc2kKLSAqCi0gKiAgIFdBUk5JTkc6IHRyYXNoZXMgJXNpLCAlYXgsIGFuZCAlYngKLSAqLwot Ci0vKgotICogVXNlIEJJT1MgImludCAxMEggRnVuY3Rpb24gMEVoIiB0byB3cml0ZSBjaGFyYWN0 ZXIgaW4gdGVsZXR5cGUgbW9kZQotICoJJWFoID0gMHhlCSVhbCA9IGNoYXJhY3RlcgotICoJJWJo ID0gcGFnZQklYmwgPSBmb3JlZ3JvdW5kIGNvbG9yIChncmFwaGljcyBtb2RlcykKLSAqLwotCi0x OgotCW1vdncJJDB4MDAwMSwgJWJ4Ci0JbW92YgkkMHhlLCAlYWgKLQlpbnQJJDB4MTAJCS8qIGRp c3BsYXkgdGhpcyBjaGFyICovCi0KLW91dHB1dF9tZXNzYWdlOgotCWxvZHNiCi0JY21wYgkkMCwg JWFsCi0Jam5lCTFiCS8qIGlmIG5vdCBlbmQgb2Ygc3RyaW5nLCBuZXh0IGNoYXIgKi8KLQlyZXQK LQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0JLnNlY3Rpb24gLmJvb3RfZGF0YQotCi1ub3RpZmlj YXRpb25fc3RyaW5nOgkuYXNjaXogIkJBUkVCT1ggIgotY2hzX3N0cmluZzoJLmFzY2l6ICJDSFMg Igotam1wX3N0cmluZzoJLmFzY2l6ICJKTVAgIgotCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290 L2Jvb3RfbWFpbi5TIGIvYXJjaC94ODYvYm9vdC9ib290X21haW4uUwpkZWxldGVkIGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggNjMyYjNmNGZmYTZmLi4wMDAwMDAwMDAwMDAKLS0tIGEvYXJjaC94ODYv Ym9vdC9ib290X21haW4uUworKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLS8qIFNQRFgt TGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovCi0vKiBTUERYLUZpbGVDb3B5 cmlnaHRUZXh0OiBKdWVyZ2VuIEJlaXNlcnQsIFBlbmd1dHJvbml4ICovCi0KLS8qIFRoaXMgY29k ZSB3YXMgaW5zcGlyZWQgYnkgdGhlIEdSVUIyIHByb2plY3QuICovCi0KLS8qKgotICogQGZpbGUK LSAqIEBicmllZiBDb21tb24gYm9vdCBzZWN0b3IgbWFpbiByb3V0aW5lIHRvIGJlIGVudGVyZWQg YnkgdGhlIEJJT1MKLSAqLwotLyoqCi0gKiBAZm4gdm9pZCBfc3RhcnQodm9pZCkKLSAqCi0gKiBA YnJpZWYgRml4IHNlZ21lbnQ6b2Zmc2V0IHNldHRpbmdzIG9mIHNvbWUgYnVnZ3kgQklPU3MKLSAq LwotCi0KLQkuZmlsZSAiYm9vdF9tYWluLlMiCi0JLmNvZGUxNgotCi0JLmV4dGVybiByZWFsX3N0 YXJ0Ci0KLQkuc2VjdGlvbiAuYm9vdF9zdGFydCwgImF4IgotCS50eXBlIF9zdGFydCwgQGZ1bmN0 aW9uCi0KLQkvKgotCSAqIFRoZSBCSU9TIGxvYWRzIHRoaXMgY29kZSB0byBhZGRyZXNzIDB4MDAw MDdjMDAuCi0JICogVGhlIGNvZGUgc2hvdWxkIGJlIGNhbGxlZCB3aXRoIENTOklQIDA6MHg3YzAw IChob3BlZnVsbHkpLgotCSAqLwotCS5nbG9ibCBfc3RhcnQKLV9zdGFydDoKLQljbGkJCS8qIHdl J3JlIG5vdCBzYWZlIGhlcmUhICovCi0JLyoKLQkgKiBJdCBzZWVtcyB0aGVyZSBhcmUgaW1wbGVt ZW50YXRpb25zIGluIHRoZSB3aWxkIHdoaWNoIGNhbGwgdGhpcwotCSAqIGNvZGUgd2l0aCBDUzpJ UCAweDA3QzA6MDAwMCBpbnN0ZWFkLiBXZSBmaXggaXQgaW1tZWRpYXRlbHkuCi0JICovCi0JbGpt cCAkMCwgJHJlYWxfc3RhcnQKLQotCS5zaXplIF9zdGFydCwgLi1fc3RhcnQKLQpkaWZmIC0tZ2l0 IGEvYXJjaC94ODYvYm9vdC9tYWluX2VudHJ5LmMgYi9hcmNoL3g4Ni9ib290L21haW5fZW50cnku YwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjM3YWEzOGZjYTIwLi4wMDAwMDAwMDAw MDAKLS0tIGEvYXJjaC94ODYvYm9vdC9tYWluX2VudHJ5LmMKKysrIC9kZXYvbnVsbApAQCAtMSwy NCArMCwwIEBACi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlcgot Ly8gU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAwOSBKdWVyZ2VuIEJlaXNlcnQsIFBlbmd1dHJv bml4Ci0KLS8qKgotICogQGZpbGUKLSAqIEBicmllZiBTdGFydCBvZiB0aGUgMzIgYml0IGZsYXQg bW9kZQotICovCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxhc20vc2VjdGlvbnMu aD4KLQotZXh0ZXJuIHZvaWQgeDg2X3N0YXJ0X2JhcmVib3godm9pZCk7Ci0KLS8qKgotICogQ2Fs bGVkIHBsYWlubHkgZnJvbSBhc3NlbWJsZXIgdGhhdCBzd2l0Y2hlcyBmcm9tIHJlYWwgdG8gZmxh dCBtb2RlCi0gKgotICogQG5vdGUgVGhlIEMgZW52aXJvbm1lbnQgaXNuJ3QgaW5pdGlhbGl6ZWQg eWV0Ci0gKi8KLXZvaWQgdWJvb3RfZW50cnkodm9pZCkKLXsKLQkvKiBjbGVhciB0aGUgQlNTIGZp cnN0ICovCi0JbWVtc2V0KF9fYnNzX3N0YXJ0LCAweDAwLCBfX2Jzc19zdG9wIC0gX19ic3Nfc3Rh cnQpOwotCXg4Nl9zdGFydF9iYXJlYm94KCk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290 L3BtanVtcC5TIGIvYXJjaC94ODYvYm9vdC9wbWp1bXAuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggNGRkMTg4MWU2NWJiLi4wMDAwMDAwMDAwMDAKLS0tIGEvYXJjaC94ODYvYm9vdC9w bWp1bXAuUworKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi8KLS8qIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDE5 OTEsMTk5MiBMaW51cyBUb3J2YWxkcyAqLwotLyogU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAw NyByUGF0aCwgSW5jLiAqLwotCi0vKioKLSAqIEBmaWxlCi0gKiBAYnJpZWYgVGhlIGFjdHVhbCB0 cmFuc2l0aW9uIGludG8gcHJvdGVjdGVkIG1vZGUKLSAqCi0gKiBOb3RlOiBUaGlzIGZ1bmN0aW9u IGlzIHJ1bm5pbmcgaW4gZmxhdCBhbmQgcmVhbCBtb2RlLiBEdWUgdG8gc29tZQotICogb3RoZXIg cmVzdHJpY3Rpb25zIGl0IG11c3QgcnVubmluZyBmcm9tIGFuIGFkZHJlc3Mgc3BhY2UgYmVsb3cg MHgxMDAwMAotICovCi0KLS8qKgotICogQGZuIHZvaWQgcHJvdGVjdGVkX21vZGVfanVtcCh2b2lk KQotICogQGJyaWVmIFN3aXRjaGVzIHRoZSBmaXJzdCB0aW1lIGZyb20gcmVhbCBtb2RlIHRvIGZs YXQgbW9kZQotICovCi0KLSNpbmNsdWRlIDxhc20vbW9kZXMuaD4KLSNpbmNsdWRlICJib290Lmgi Ci0KLQkuZmlsZSAicG1qdW1wLlMiCi0JLmNvZGUxNgotCS5zZWN0aW9uIC5ib290LnRleHQucHJv dGVjdGVkX21vZGVfanVtcCwgImF4IgotCi0JLmdsb2JsCXByb3RlY3RlZF9tb2RlX2p1bXAKLQku dHlwZQlwcm90ZWN0ZWRfbW9kZV9qdW1wLCBAZnVuY3Rpb24KLQotcHJvdGVjdGVkX21vZGVfanVt cDoKLQlqbXAgMWYJCQkvKiBTaG9ydCBqdW1wIHRvIHNlcmlhbGl6ZSBvbiAzODYvNDg2ICovCi0x OgotCi0JbW92dyAkX19CT09UX0RTLCAlY3gKLQltb3Z3ICRfX0JPT1RfVFNTLCAlZGkKLQotCW1v dmwgJWNyMCwgJWVkeAotCW9yYiAkWDg2X0NSMF9QRSwgJWRsCS8qIGVuYWJsZSBwcm90ZWN0ZWQg bW9kZSAqLwotCW1vdmwgJWVkeCwgJWNyMAotCi0JLyogVHJhbnNpdGlvbiB0byAzMi1iaXQgZmxh dCBtb2RlICovCi0JZGF0YTMyICBsam1wICRfX0JPT1RfQ1MsICRpbl9wbTMyCi0JLnNpemUgcHJv dGVjdGVkX21vZGVfanVtcCwgLi1wcm90ZWN0ZWRfbW9kZV9qdW1wCi0KLS8qIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSAqLwotCi0JLnNlY3Rpb24gIi50ZXh0LmluX3BtMzIiLCJheCIKLQkuY29kZTMyCi0KLQku ZXh0ZXJuIHVib290X2VudHJ5Ci0JLmV4dGVybiBfX2Jzc19zdG9wCi0KLQkudHlwZQlpbl9wbTMy LCBAZnVuY3Rpb24KLWluX3BtMzI6Ci0JIyBTZXQgdXAgZGF0YSBzZWdtZW50cyBmb3IgZmxhdCAz Mi1iaXQgbW9kZQotCW1vdmwgJWVjeCwgJWRzCi0JbW92bCAlZWN4LCAlZXMKLQltb3ZsICVlY3gs ICVmcwotCW1vdmwgJWVjeCwgJWdzCi0JbW92bCAlZWN4LCAlc3MKLS8qCi0gKiBPdXIgZmxhdCBt b2RlIGNvZGUgdXNlcyBpdHMgb3duIHN0YWNrIGFyZWEgYmVoaW5kIHRoZSBic3MuIFdpdGggdGhp cyB3ZQotICogYXJlIHN0aWxsIGFibGUgdG8gcmV0dXJuIHRvIHJlYWwgbW9kZSB0ZW1wb3JhcmVs eQotICovCi0JbW92bCAkX19ic3Nfc3RvcCArIDMyNzY4LCAlZXNwCi0KLQkjIFNldCB1cCBUUiB0 byBtYWtlIEludGVsIFZUIGhhcHB5Ci0JbHRyICVkaQotCi0JIyBDbGVhciByZWdpc3RlcnMgdG8g YWxsb3cgZm9yIGZ1dHVyZSBleHRlbnNpb25zIHRvIHRoZQotCSMgMzItYml0IGJvb3QgcHJvdG9j b2wKLQl4b3JsICVlY3gsICVlY3gKLQl4b3JsICVlZHgsICVlZHgKLQl4b3JsICVlYngsICVlYngK LQl4b3JsICVlYnAsICVlYnAKLQl4b3JsICVlZGksICVlZGkKLQotCSMgU2V0IHVwIExEVFIgdG8g bWFrZSBJbnRlbCBWVCBoYXBweQotCWxsZHQgJWN4Ci0KLQlqbXAgdWJvb3RfZW50cnkKLQotCS5z aXplIGluX3BtMzIsIC4taW5fcG0zMgotCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L3ByZXBh cmVfdWJvb3QuYyBiL2FyY2gveDg2L2Jvb3QvcHJlcGFyZV91Ym9vdC5jCmRlbGV0ZWQgZmlsZSBt b2RlIDEwMDY0NAppbmRleCA5Y2FjNTk0YTQ2MzMuLjAwMDAwMDAwMDAwMAotLS0gYS9hcmNoL3g4 Ni9ib290L3ByZXBhcmVfdWJvb3QuYworKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLS8v IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKLS8vIFNQRFgtRmlsZUNvcHly aWdodFRleHQ6IDE5OTEsMTk5MiBMaW51cyBUb3J2YWxkcwotLy8gU1BEWC1GaWxlQ29weXJpZ2h0 VGV4dDogMjAwNyByUGF0aCwgSW5jLgotCi0vKgotICogUHJlcGFyZSB0aGUgbWFjaGluZSBmb3Ig dHJhbnNpdGlvbiB0byBwcm90ZWN0ZWQgbW9kZS4KLSAqLwotI2luY2x1ZGUgPGFzbS9zZWdtZW50 Lmg+Ci0jaW5jbHVkZSA8YXNtL21vZGVzLmg+Ci0jaW5jbHVkZSA8aW8uaD4KLSNpbmNsdWRlICJi b290LmgiCi0KLS8qIGJlIGF3YXJlIG9mOiAqLwotVEhJU19JU19SRUFMTU9ERV9DT0RFCi0KLS8q Ci0gKiBXaGlsZSB3ZSBhcmUgaW4gZmxhdCBtb2RlLCB3ZSBjYW4ndCBoYW5kbGUgaW50ZXJydXB0 cy4gQnV0IHdlIGNhbid0Ci0gKiBzd2l0Y2ggdGhlbSBvZmYgZm9yIGV2ZXIgaW4gdGhlIFBJQywg YmVjYXVzZSB3ZSBuZWVkIHRoZW0gYWdhaW4gd2hpbGUKLSAqIGVudGVyaW5nIHJlYWwgbW9kZSBj b2RlIGFnYWluIGFuZCBhZ2Fpbi4uLi4KLSAqLwotc3RhdGljIHZvaWQgX19ib290Y29kZSByZWFs bW9kZV9zd2l0Y2hfaG9vayh2b2lkKQotewotCWFzbSB2b2xhdGlsZSgiY2xpIik7Ci0Jb3V0Yigw eDgwLCAweDcwKTsgLyogRGlzYWJsZSBOTUkgKi8KLQlpb19kZWxheSgpOwotfQotCi0vKgotICog UmVzZXQgSUdOTkUjIGlmIGFzc2VydGVkIGluIHRoZSBGUFUuCi0gKi8KLXN0YXRpYyB2b2lkIF9f Ym9vdGNvZGUgcmVzZXRfY29wcm9jZXNzb3Iodm9pZCkKLXsKLQlvdXRiKDAsIDB4ZjApOwotCWlv X2RlbGF5KCk7Ci0Jb3V0YigwLCAweGYxKTsKLQlpb19kZWxheSgpOwotfQotCi0vKioKLSAqIFNl dHVwIGFuZCByZWdpc3RlciB0aGUgZ2xvYmFsIGRlc2NyaXB0b3IgdGFibGUgKEdEVCkKLSAqCi0g KiBAbm90ZSBUaGlzIGlzIGZvciB0aGUgZmlyc3QgdGltZSBvbmx5Ci0gKi8KLXN0YXRpYyB2b2lk IF9fYm9vdGNvZGUgc2V0dXBfZ2R0KHZvaWQpCi17Ci0JLyogWGVuIEhWTSBpbmNvcnJlY3RseSBz dG9yZXMgYSBwb2ludGVyIHRvIHRoZSBnZHRfcHRyLCBpbnN0ZWFkCi0JICAgb2YgdGhlIGdkdF9w dHIgY29udGVudHMuICBUaHVzLCBtYWtlIGl0IHN0YXRpYyBzbyBpdCB3aWxsCi0JICAgc3RheSBp biBtZW1vcnksIGF0IGxlYXN0IGxvbmcgZW5vdWdoIHRoYXQgd2Ugc3dpdGNoIHRvIHRoZQotCSAg IHByb3BlciBrZXJuZWwgR0RULiAqLwotCXN0YXRpYyBzdHJ1Y3QgZ2R0X3B0ciBfX2Jvb3RkYXRh IGdkdF9wdHI7Ci0KLQlnZHRfcHRyLmxlbiA9IGdkdF9zaXplIC0gMTsKLQlnZHRfcHRyLnB0ciA9 ICh1aW50MzJfdCkmZ2R0ICsgKGRzKCkgPDwgNCk7Ci0KLQlhc20gdm9sYXRpbGUoImxnZHRsICUw IiA6IDogIm0iIChnZHRfcHRyKSk7Ci19Ci0KLXN0YXRpYyBjaGFyIGEyMF9tZXNzYWdlW10gX19i b290ZGF0YSA9ICJBMjAgZ2F0ZSBub3QgcmVzcG9uZGluZywgdW5hYmxlIHRvIGJvb3QuLi5cbiI7 Ci0KLS8qCi0gKiBBY3R1YWwgaW52b2NhdGlvbiBzZXF1ZW5jZQotICovCi12b2lkIF9fYm9vdGNv ZGUgc3RhcnRfcHJlX3Vib290KHZvaWQpCi17Ci0JLyogSG9vayBiZWZvcmUgbGVhdmluZyByZWFs IG1vZGUsIGFsc28gZGlzYWJsZXMgaW50ZXJydXB0cyAqLwotCXJlYWxtb2RlX3N3aXRjaF9ob29r KCk7Ci0KLQkvKiBFbmFibGUgdGhlIEEyMCBnYXRlICovCi0JaWYgKGVuYWJsZV9hMjAoKSkgewot CQlib290X3B1dHMoYTIwX21lc3NhZ2UpOwotCQlkaWUoKTsKLQl9Ci0KLQkvKiBSZXNldCBjb3By b2Nlc3NvciAoSUdOTkUjKSAqLwotCXJlc2V0X2NvcHJvY2Vzc29yKCk7Ci0KLQlzZXR1cF9nZHQo KTsKLQkvKiBBY3R1YWwgdHJhbnNpdGlvbiB0byBwcm90ZWN0ZWQgbW9kZS4uLiAqLwotCXByb3Rl Y3RlZF9tb2RlX2p1bXAoKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3QvcmVncy5jIGIv YXJjaC94ODYvYm9vdC9yZWdzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxOGI2 NjIxNzViMy4uMDAwMDAwMDAwMDAwCi0tLSBhL2FyY2gveDg2L2Jvb3QvcmVncy5jCisrKyAvZGV2 L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0y LjAtb3ItbGF0ZXIKLS8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMDkgSW50ZWwgQ29ycG9y YXRpb24KLQotLyogQXV0aG9yOiBILiBQZXRlciBBbnZpbiAqLwotCi0vKioKLSAqIEBmaWxlCi0g KiBAYnJpZWYgU2ltcGxlIGhlbHBlciBmdW5jdGlvbiBmb3IgaW5pdGlhbGl6aW5nIGEgcmVnaXN0 ZXIgc2V0LgotICoKLSAqIE5vdGUgdGhhdCB0aGlzIHNldHMgRUZMQUdTX0NGIGluIHRoZSBpbnB1 dCByZWdpc3RlciBzZXQ7IHRoaXMKLSAqIG1ha2VzIGl0IGVhc2llciB0byBjYXRjaCBmdW5jdGlv bnMgd2hpY2ggZG8gbm90aGluZyBidXQgZG9uJ3QKLSAqIGV4cGxpY2l0bHkgc2V0IENGLgotICov Ci0KLSNpbmNsdWRlIDxhc20vc2VnbWVudC5oPgotI2luY2x1ZGUgImJvb3QuaCIKLQotLyogYmUg YXdhcmUgb2Y6ICovCi1USElTX0lTX1JFQUxNT0RFX0NPREUKLQotdm9pZCBfX2Jvb3Rjb2RlIGlu aXRyZWdzKHN0cnVjdCBiaW9zcmVncyAqcmVnKQotewotCW1lbXNldChyZWcsIDAsIHNpemVvZiAq cmVnKTsKLQlyZWctPmVmbGFncyB8PSBYODZfRUZMQUdTX0NGOwotCXJlZy0+ZHMgPSBkcygpOwot CXJlZy0+ZXMgPSBkcygpOwotCXJlZy0+ZnMgPSBmcygpOwotCXJlZy0+Z3MgPSBncygpOwotfQpk aWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC90dHkuYyBiL2FyY2gveDg2L2Jvb3QvdHR5LmMKZGVs ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyMDE5N2M2NzcwMS4uMDAwMDAwMDAwMDAwCi0t LSBhL2FyY2gveDg2L2Jvb3QvdHR5LmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0v LyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5Ci0vLyBTUERYLUZpbGVDb3B5 cmlnaHRUZXh0OiAxOTkxLDE5OTIgTGludXMgVG9ydmFsZHMKLS8vIFNQRFgtRmlsZUNvcHlyaWdo dFRleHQ6IDIwMDcgclBhdGgsIEluYy4KLS8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMDkg SW50ZWwgQ29ycG9yYXRpb24KLQotLyogQXV0aG9yOiBILiBQZXRlciBBbnZpbiBhbmQgb3RoZXJz ICovCi0KLS8qKgotICogQGZpbGUKLSAqIEBicmllZiBWZXJ5IHNpbXBsZSBzY3JlZW4gSS9PIGZv ciB0aGUgaW5pdGlhbGl6YXRpb24gc3RhZ2UKLSAqCi0gKiBAdG9kbyBQcm9iYWJseSBzaG91bGQg YWRkIHZlcnkgc2ltcGxlIHNlcmlhbCBJL08/Ci0gKiBAYXR0ZW50aW9uIFRoaXMgaXMgcmVhbCBt b2RlIGNvZGUhCi0gKi8KLQotI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+Ci0jaW5jbHVkZSAiYm9v dC5oIgotCi0vKiBiZSBhd2FyZSBvZjogKi8KLVRISVNfSVNfUkVBTE1PREVfQ09ERQotCi1zdGF0 aWMgdm9pZCBfX2Jvb3Rjb2RlIHB1dGNoYXIoaW50IGNoKQotewotCXN0cnVjdCBiaW9zcmVncyBp cmVnOwotCi0JaWYgKGNoID09ICdcbicpCi0JCXB1dGNoYXIoJ1xyJyk7CS8qIFxuIC0+IFxyXG4g Ki8KLQotCWluaXRyZWdzKCZpcmVnKTsKLQlpcmVnLmJ4ID0gMHgwMDA3OwotCWlyZWcuY3ggPSAw eDAwMDE7Ci0JaXJlZy5haCA9IDB4MGU7Ci0JaXJlZy5hbCA9IGNoOwotCWludGNhbGwoMHgxMCwg JmlyZWcsIE5VTEwpOwotfQotCi12b2lkIF9fYm9vdGNvZGUgYm9vdF9wdXRzKGNoYXIgKnN0cikK LXsKLQl3aGlsZSAoKnN0cikKLQkJcHV0Y2hhcigqc3RyKyspOwotfQpkaWZmIC0tZ2l0IGEvYXJj aC94ODYvY29uZmlncy9nZW5lcmljX2RlZmNvbmZpZyBiL2FyY2gveDg2L2NvbmZpZ3MvZ2VuZXJp Y19kZWZjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2MjAyODAxMzZiYi4u MDAwMDAwMDAwMDAwCi0tLSBhL2FyY2gveDg2L2NvbmZpZ3MvZ2VuZXJpY19kZWZjb25maWcKKysr IC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi1DT05GSUdfWDg2X0JJT1NfQlJJTkdVUD15Ci1D T05GSUdfWDg2X0hEQk9PVD15Ci1DT05GSUdfU1RBQ0tfU0laRT0weDcwMDAKLUNPTkZJR19FWFBF UklNRU5UQUw9eQotQ09ORklHX0dMT0I9eQotQ09ORklHX0NNRExJTkVfRURJVElORz15Ci1DT05G SUdfQVVUT19DT01QTEVURT15Ci1DT05GSUdfUEFSVElUSU9OPXkKLUNPTkZJR19ERUZBVUxUX0VO VklST05NRU5UX1BBVEg9ImFyY2gveDg2L2JvYXJkcy94ODZfZ2VuZXJpYy9lbnYiCi1DT05GSUdf TE9OR0hFTFA9eQotQ09ORklHX0NNRF9NRU1JTkZPPXkKLSMgQ09ORklHX0NNRF9CT09UTSBpcyBu b3Qgc2V0Ci1DT05GSUdfQ01EX0dPPXkKLUNPTkZJR19DTURfUkVTRVQ9eQotQ09ORklHX0NNRF9F WFBPUlQ9eQotQ09ORklHX0NNRF9MT0FERU5WPXkKLUNPTkZJR19DTURfUFJJTlRFTlY9eQotQ09O RklHX0NNRF9TQVZFRU5WPXkKLSMgQ09ORklHX0NNRF9GQUxTRSBpcyBub3Qgc2V0Ci1DT05GSUdf Q01EX1NMRUVQPXkKLSMgQ09ORklHX0NNRF9UUlVFIGlzIG5vdCBzZXQKLUNPTkZJR19DTURfRURJ VD15Ci1DT05GSUdfQ01EX1JFQURMSU5FPXkKLUNPTkZJR19DTURfVElNRU9VVD15Ci1DT05GSUdf RFJJVkVSX1NFUklBTF9OUzE2NTUwPXkKLSMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CmRpZmYgLS1n aXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNsaWIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNt L3N5c2xpYi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZTA4Y2ZkNDRlNDcuLjAw MDAwMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNsaWIuaAorKysgL2Rldi9u dWxsCkBAIC0xLDEzICswLDAgQEAKLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4w LW9yLWxhdGVyICovCi0vKiBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDA5IEp1ZXJnZW4gQmVp c2VydCwgUGVuZ3V0cm9uaXggKi8KLQotI2lmZGVmIENPTkZJR19YODZfQklPU19CUklOR1VQCi0K LWV4dGVybiBpbnQgYmlvc19kaXNrX3J3X2ludDEzX2V4dGVuc2lvbnMoaW50LCBpbnQsIHZvaWQq KSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSk7Ci1leHRlcm4gdWludDE2X3QgYmlvc19nZXRf bWVtc2l6ZSh2b2lkKTsKLQotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfQ01EX0xJTlVYMTYKLWV4 dGVybiB2b2lkIGJpb3Nfc3RhcnRfbGludXgodW5zaWduZWQpIF9fYXR0cmlidXRlX18oKHJlZ3Bh cm0oMSkpKTsKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbGliLy5naXRpZ25vcmUgYi9h cmNoL3g4Ni9saWIvLmdpdGlnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDEx NjU3ODhjOWFiLi4wMDAwMDAwMDAwMDAKLS0tIGEvYXJjaC94ODYvbGliLy5naXRpZ25vcmUKKysr IC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1iYXJlYm94LmxkcwpkaWZmIC0tZ2l0IGEvYXJjaC94 ODYvbGliL01ha2VmaWxlIGIvYXJjaC94ODYvbGliL01ha2VmaWxlCmluZGV4IDZhOGZhN2MwZmYz ZS4uMzYwYWViZjU2OTM2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9saWIvTWFrZWZpbGUKKysrIGIv YXJjaC94ODYvbGliL01ha2VmaWxlCkBAIC0xLDExICsxLDIgQEAKLWV4dHJhLSQoQ09ORklHX0dF TkVSSUNfTElOS0VSX1NDUklQVCkgKz0gYmFyZWJveC5sZHMKLWlmbmVxICgkKENPTkZJR19YODZf RUZJKSx5KQotb2JqLXkgKz0gbWVtb3J5Lm8KLW9iai15ICs9IGdkdC5vCi1lbmRpZgotCiBvYmot JChDT05GSUdfWDg2XzMyKSArPSBzZXRqbXBfMzIubwogb2JqLSQoQ09ORklHX1g4Nl82NCkgKz0g c2V0am1wXzY0Lm8KLQotIyBuZWVkZWQsIHdoZW4gcnVubmluZyB2aWEgYSAxNiBiaXQgQklPUwot b2JqLSQoQ09ORklHX0NNRF9MSU5VWDE2KSArPSBsaW51eF9zdGFydC5vCmRpZmYgLS1naXQgYS9h cmNoL3g4Ni9saWIvYXNtLW9mZnNldHMuYyBiL2FyY2gveDg2L2xpYi9hc20tb2Zmc2V0cy5jCmlu ZGV4IDBmOWM0N2VhYTllZC4uMjJmMzgyYjcxZTdiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9saWIv YXNtLW9mZnNldHMuYworKysgYi9hcmNoL3g4Ni9saWIvYXNtLW9mZnNldHMuYwpAQCAtNiwxMyAr Niw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9rYnVpbGQuaD4KIAotI2lmZGVmIENPTkZJR19FRklf Qk9PVFVQCiBpbnQgbWFpbih2b2lkKQogewogCXJldHVybiAwOwogfQotI2Vsc2UKLXZvaWQgY29t bW9uKHZvaWQpCi17Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2xpYi9iYXJlYm94 Lmxkcy5TIGIvYXJjaC94ODYvbGliL2JhcmVib3gubGRzLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IGIyNGM0ODA3YjU5ZC4uMDAwMDAwMDAwMDAwCi0tLSBhL2FyY2gveDg2L2xpYi9i YXJlYm94Lmxkcy5TCisrKyAvZGV2L251bGwKQEAgLTEsMTYxICswLDAgQEAKLS8qIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovCi0KLSN1bmRlZiBpMzg2Ci0jaW5j bHVkZSA8YXNtLWdlbmVyaWMvYmFyZWJveC5sZHMuaD4KLQotT1VUUFVUX0ZPUk1BVCgiZWxmMzIt aTM4NiIsICJlbGYzMi1pMzg2IiwgImVsZjMyLWkzODYiKQotT1VUUFVUX0FSQ0goaTM4NikKLUVO VFJZKF9zdGFydCkKLQotTUVNT1JZCi17Ci0JbWJyKHJ3eCk6IE9SSUdJTiA9IFRFWFRfQkFTRSwg TEVOR1RIID0gMiAqIFNFQ1RPUl9TSVpFCi0JYmFyZWJveCAocnd4KSA6IE9SSUdJTiA9IFRFWFRf QkFTRSArIFNFQ1RPUl9TSVpFLCBMRU5HVEggPSAoMjU2ICogMTAyNCAqIDEwMjQpCi19Ci0KLVNF Q1RJT05TCi17Ci0jaWZkZWYgQ09ORklHX1g4Nl9IREJPT1QKLQotCS5yYW1sYXlvdXQgOiB7Ci0J CWJvb3Rfc3RhY2sgPSBJTkRJUkVDVF9BUkVBOwotCQlpbmRpcmVjdF9hcmVhID0gSU5ESVJFQ1Rf QVJFQTsKLQl9Ci0JLyogZGVzY3JpYmluZyB0aGUgbWFpbiBib290IHNlY3RvciAqLwotCS5ib290 c2VjdG9yIDogQVQgKDApIHsKLQkJKiguYm9vdF9zdGFydCkKLQotCQkuID0gMHgwMGI7Ci0JCS8q Ci0JCSAqIE1heWJlIGxhdGVyIG9uIG9jY3VwaWVkIGJ5IGEgIkJJT1MgcGFyYW1ldGVyIGJsb2Nr Ii4gU28sCi0JCSAqIGtlZXAgaXQgZnJlZSBmcm9tIGNvZGUuCi0JCSAqIC0gQnl0ZXNQZXJTZWN0 b3IgZHdAMHgwMDBCCi0JCSAqIC0gU2VjdG9yc1BlckNsdXN0ZXIgZGJAMHgwMDBECi0JCSAqIC0g UmVzZXJ2ZWRTZWN0b3JzIGR3QDB4MDAwRQotCQkgKiAtIEZhdENvcGllcyBkYkAweDAwMTAKLQkJ ICogLSBSb290RGlyRW50cmllcyBkd0AweDAwMTEKLQkJICogLSBOdW1TZWN0b3JzIGR3QDB4MDAx MwotCQkgKiAtIE1lZGlhVHlwZSBkYkAweDAwMTUKLQkJICogLSBTZWN0b3JzUGVyRkFUIGR3QDB4 MDAxNgotCQkgKiAtIFNlY3RvcnNQZXJUcmFjayBkd0AweDAwMTgKLQkJICogLSBOdW1iZXJPZkhl YWRzIGR3QDB4MDAxQQotCQkgKiAtIEhpZGRlblNlY3RvcnMgZGRAMHgwMDFDCi0JCSAqIC0gU2Vj dG9yc0JpZyBkZEAweDAwMjAKLQkJICovCi0JCUxPTkcoMCk7Ci0KLQkJLiA9IDB4MDI0OwotCQkq KC5ib290X2NvZGUpCi0JCSooLmJvb3RfZGF0YSkKLQotCQkvKgotCQkgKiBlbWJlZCBvbmUgIkRp c2sgQWRkcmVzcyBQYWNrZXQgU3RydWN0dXJlIiBpbnRvIHRoZSBib290IHNlY3RvcgotCQkgKiBU aGlzIERBUFMgcG9pbnRzIHRvIHRoZSAnaW5kaXJlY3QnIHNlY3RvciB0byBnaXZlIHRoZSBib290 IGNvZGUKLQkJICogYW4gaWRlYSB3aGF0IGFuZCB3aGVyZSB0byBsb2FkLiBJdHMgY29udGVudCBt dXN0IGJlIGFkYXB0ZWQKLQkJICogdG8gdGhlIHN5c3RlbSBpdCBzaG91bGQgcnVuIG9uLCBzbywg dGhpcyBzdHJ1Y3R1cmUgbXVzdCBiZQotCQkgKiBsb2NhdGVkIGF0IGEgd2VsbCBrbm93biBvZmZz ZXQuCi0JCSAqLwotCQkuID0gUEFUQ0hfQVJFQTsKLQkJaW5kaXJlY3Rfc2VjdG9yX2xiYSA9IC47 Ci0JCVNIT1JUKDB4MDAxMCk7CQkvKiBzaXplIG9mIHRoaXMgc3RydWN0dXJlICovCi0JCVNIT1JU KDB4MDAwMSk7CQkvKiBvbmUgc2VjdG9yICovCi0JCVNIT1JUKGluZGlyZWN0X2FyZWEpOwkvKiB3 aGVyZSB0byBzdG9yZTogb2Zmc2V0ICovCi0JCVNIT1JUKDB4MDAwMCk7CQkvKiB3aGVyZSB0byBz dG9yZTogc2VnbWVudCAqLwotCQkvKiB0aGUgZm9sbG93aW5nIHZhbHVlcyBhcmUgZmlsbGVkIGJ5 IHRoZSBpbnN0YWxsZXIgKi8KLQkJTE9ORygweDAwMDAwMDAwKTsJLyogTEJBIHN0YXJ0IGxvd2Vy ICovCi0JCUxPTkcoMHgwMDAwMDAwMCk7CS8qIExCQSBzdGFydCB1cHBlciAqLwotCi0JCS8qIGJv b3QgZGlzayBudW1iZXIgdXNlZCBieSB1cHBlciBsYXllcnMgKi8KLQkJLiA9IFBBVENIX0FSRUEg KyBQQVRDSF9BUkVBX0JPT1RfREVWOwotCQlib290X2Rpc2sgPSAuOwotCQlCWVRFKDB4MDApOwkJ LyogYm9vdCBkaXNrIG51bWJlciAocHJvdmlkZWQgYnkgdGhlIEJJT1MpCi0KLQkJLyogaW5mb3Jt YXRpb24gYWJvdXQgdGhlIHBlcnNpc3RlbnQgZW52aXJvbm1lbnQgc3RvcmFnZSAqLwotCQkuID0g UEFUQ0hfQVJFQSArIFBBVENIX0FSRUFfUEVSU19TVEFSVDsKLQkJcGVyc19lbnZfc3RvcmFnZSA9 IC47Ci0JCUxPTkcoMHgwMDAwMDAwMCk7CS8qIExCQSBzdGFydCBsb3dlciAqLwotCQlMT05HKDB4 MDAwMDAwMDApOwkvKiBMQkEgc3RhcnQgdXBwZXIgKi8KLQotCQkuID0gUEFUQ0hfQVJFQSArIFBB VENIX0FSRUFfUEVSU19TSVpFOwotCQlwZXJzX2Vudl9zaXplID0gLjsKLQkJU0hPUlQoUEFUQ0hf QVJFQV9QRVJTX1NJWkVfVU5VU0VEKTsJLyogc2l6ZSBvZiB0aGlzIGFyZWEgaW4gc2VjdG9ycyAq LwotCi0JCS4gPSBQQVRDSF9BUkVBICsgUEFUQ0hfQVJFQV9QRVJTX0RSSVZFOwotCQlwZXJzX2Vu dl9kcml2ZSA9IC47Ci0JCUJZVEUoMHgwMCk7CQkvKiB1c2VkIGRyaXZlICovCi0KLQkJLyogcGFy dGl0aW9uIHRhYmxlIGFyZWEgKGZpeGVkIGxvY2F0aW9uKSAqLwotCQkuID0gT0ZGU0VUX09GX1BB UlRJVElPTl9UQUJMRTsKLQkJLyogY3JlYXRlIGFuIGVtcHR5IG9uZSAqLwotCQlMT05HKDB4MDAw MDAwMDApOyBMT05HKDB4MDAwMDAwMDApOyBMT05HKDB4MDAwMDAwMDApOyBMT05HKDB4MDAwMDAw MDApOwotCQlMT05HKDB4MDAwMDAwMDApOyBMT05HKDB4MDAwMDAwMDApOyBMT05HKDB4MDAwMDAw MDApOyBMT05HKDB4MDAwMDAwMDApOwotCQlMT05HKDB4MDAwMDAwMDApOyBMT05HKDB4MDAwMDAw MDApOyBMT05HKDB4MDAwMDAwMDApOyBMT05HKDB4MDAwMDAwMDApOwotCQlMT05HKDB4MDAwMDAw MDApOyBMT05HKDB4MDAwMDAwMDApOyBMT05HKDB4MDAwMDAwMDApOyBMT05HKDB4MDAwMDAwMDAp OwotCi0JCS8qIGJvb3Qgc2VjdG9yIHNpZ25hdHVyZSAqLwotCQkuID0gT0ZGU0VUX09GX1NJR05B VFVSRTsKLQkJQllURSgweDU1KTsKLQkJQllURSgweEFBKTsKLQkJLyogZW5kIG9mIHRoZSBmaXJz dCBzZWN0b3IgKi8KLQotCQkvKgotCQkgKiBUaGUgaW5kaXJlY3Qgc2VjdG9yIHN0YXJ0cyBoZXJl Ci0JCSAqLwotCQkuID0gU0VDVE9SX1NJWkU7Ci0JCUJZVEUoTUFSS19EQVBTX0lOVkFMSUQpOwkv KiBtYXJrIHRoZSBmaXJzdCBlbnRyeSBpbnZhbGlkICovCi0JCUJZVEUoMHgwMCk7Ci0JCS4gPSBT RUNUT1JfU0laRSArIDQ5NjsKLQkJQllURShNQVJLX0RBUFNfSU5WQUxJRCk7CS8qIG1hcmsgdGhl IGxhc3QgZW50cnkgaW52YWxpZCAqLwotCQlCWVRFKDB4MDApOwotCQkuID0gU0VDVE9SX1NJWkUg KyA1MDg7Ci0JCUxPTkcoMHgwMDAwMDAwMCk7CS8qIExCQSBzdGFydCB1cHBlciAqLwotCX0gPiBt YnIKLQotCS8qIHNvbWUgcmVhbCBtb2RlIGJvb3RzdHJhcHBpbmcgKi8KLQkuYm9vdHN0cmFwcGlu ZyA6IEFUICggTE9BREFERFIoLmJvb3RzZWN0b3IpICsgU0laRU9GKC5ib290c2VjdG9yKSApIHsK LQkJKiguYm9vdC5oZWFkKQotCQkqKC5ib290LnRleHQqKQotCQkqKC5ib290LnJvZGF0YSopCi0J CSooLmJvb3QuZGF0YSopCi0JCS4gPSBBTElHTig0KTsKLQkJUk9fREFUQV9TRUNUSU9OCi0JfSA+ IGJhcmVib3gKLSNlbmRpZgotCi0JLyogdGhlIG1haW4gYmFyZWJveCBwYXJ0ICgzMiBiaXQpICov Ci0JLnRleHQgOiBBVCAoIExPQURBRERSKC5ib290c3RyYXBwaW5nKSArIFNJWkVPRiguYm9vdHN0 cmFwcGluZykgKSB7Ci0JCS8qIGRvIG5vdCBhbGlnbiBoZXJlISBJdCBtYXkgZmFpbHMgd2l0aCB0 aGUgTE9BREFERFIhICovCi0JCV9zdGV4dCA9IC47Ci0JCV90ZXh0ID0gLjsKLQkJKigudGV4dF9l bnRyeSopCi0JCV9fYmFyZV9pbml0X3N0YXJ0ID0gLjsKLQkJKigudGV4dF9iYXJlX2luaXQqKQot CQlfX2JhcmVfaW5pdF9lbmQgPSAuOwotCQkqKC50ZXh0KikKLQkJLiA9IEFMSUdOKDQpOwotCQkq KC5yb2RhdGEqKQotCQkuID0gQUxJR04oNCk7Ci0JCV9ldGV4dCA9IC47CQkJLyogRW5kIG9mIHRl eHQgYW5kIHJvZGF0YSBzZWN0aW9uICovCi0JfSA+IGJhcmVib3gKLQlCQVJFQk9YX0JBUkVfSU5J VF9TSVpFCi0KLQlfc2RhdGEgPSAuOwotCS5kYXRhIDogQVQgKCBMT0FEQUREUigudGV4dCkgKyBT SVpFT0YoLnRleHQpICkgewotCQkqKC5kYXRhKikKLQkJLiA9IEFMSUdOKDQpOwotCX0gPiBiYXJl Ym94Ci0KLQkuZ290IDogQVQgKCBMT0FEQUREUiguZGF0YSkgKyBTSVpFT0YgKC5kYXRhKSApIHsK LQkJKiguZ290KikKLQkJLiA9IEFMSUdOKDQpOwotCX0gPiBiYXJlYm94Ci0KLQlfZWRhdGEgPSAu OwotCS5ic3MgOiB7Ci0JCV9fYnNzX3N0YXJ0ID0gLjsKLQkJKiguYnNzKik7Ci0JCSooIENPTU1P TiApCi0JCV9fYnNzX3N0b3AgPSAuOwotCQlfZW5kID0gLjsKLQl9ID4gYmFyZWJveAotfQpkaWZm IC0tZ2l0IGEvYXJjaC94ODYvbGliL2dkdC5jIGIvYXJjaC94ODYvbGliL2dkdC5jCmRlbGV0ZWQg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Y2QxNjIyYjZiNjMuLjAwMDAwMDAwMDAwMAotLS0gYS9h cmNoL3g4Ni9saWIvZ2R0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0vLyBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlcgotLy8gU1BEWC1GaWxlQ29weXJp Z2h0VGV4dDogMjAwOSBKdWVyZ2VuIEJlaXNlcnQsIFBlbmd1dHJvbml4Ci0KLS8qKgotICogQGZp bGUKLSAqIEBicmllZiBEZWZpbml0aW9uIG9mIHRoZSBHbG9iYWwgRGVzY3JpcHRvciBUYWJsZQot ICovCi0KLSNpbmNsdWRlIDx0eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9tb2Rlcy5oPgotI2luY2x1 ZGUgPGFzbS9zZWdtZW50Lmg+Ci0KLS8qKgotICogVGhlICdHbG9iYWwgRGVzY3JpcHRvciBUYWJs ZScgdXNlZCBpbiBiYXJlYm94Ci0gKgotICogTm90ZTogVGhpcyB0YWJsZSBtdXN0IHJlYWNoYWJs ZSBieSByZWFsIGFuZCBmbGF0IG1vZGUgY29kZQotICovCi11aW50NjRfdCBnZHRbXSBfX2F0dHJp YnV0ZV9fKChhbGlnbmVkKDE2KSkpIF9fYm9vdGRhdGEgPSB7Ci0JLyogQ1M6IGNvZGUsIHJlYWQv ZXhlY3V0ZSwgNCBHQiwgYmFzZSAwICovCi0JW0dEVF9FTlRSWV9CT09UX0NTXSA9IEdEVF9FTlRS WSgweGMwOWIsIDAsIDB4ZmZmZmYpLAotCS8qIERTOiBkYXRhLCByZWFkL3dyaXRlLCA0IEdCLCBi YXNlIDAgKi8KLQlbR0RUX0VOVFJZX0JPT1RfRFNdID0gR0RUX0VOVFJZKDB4YzA5MywgMCwgMHhm ZmZmZiksCi0JLyogQ1M6IGZvciByZWFsIG1vZGUgY2FsbHMgKi8KLQlbR0RUX0VOVFJZX1JFQUxf Q1NdID0gR0RUX0VOVFJZKDB4MDA5RSwgMCwgMHgwZmZmZiksCi0JLyogRFM6IGZvciByZWFsIG1v ZGUgY2FsbHMgKi8KLQlbR0RUX0VOVFJZX1JFQUxfRFNdID0gR0RUX0VOVFJZKDB4MDA5MiwgMCwg MHgwZmZmZiksCi0JLyogVFNTOiAzMi1iaXQgdHNzLCAxMDQgYnl0ZXMsIGJhc2UgNDA5NiAqLwot CS8qIFdlIG9ubHkgaGF2ZSBhIFRTUyBoZXJlIHRvIGtlZXAgSW50ZWwgVlQgaGFwcHk7Ci0JICAg d2UgZG9uJ3QgYWN0dWFsbHkgdXNlIGl0IGZvciBhbnl0aGluZy4gKi8KLQlbR0RUX0VOVFJZX0JP T1RfVFNTXSA9IEdEVF9FTlRSWSgweDAwODksIDQwOTYsIDEwMyksCi19OwotCi0vKioKLSAqIFNp emUgb2YgdGhlIEdEVCBtdXN0IGJlIGtub3duIHRvIGxvYWQgaXQKLSAqCi0gKiBOb3RlOiBUaGlz IHZhcmliYWxlIG11c3QgcmVhY2hhYmxlIGJ5IHJlYWwgYW5kIGZsYXQgbW9kZSBjb2RlCi0gKi8K LXVuc2lnbmVkIGdkdF9zaXplIF9fYm9vdGRhdGEgPSBzaXplb2YoZ2R0KTsKZGlmZiAtLWdpdCBh L2FyY2gveDg2L2xpYi9saW51eF9zdGFydC5TIGIvYXJjaC94ODYvbGliL2xpbnV4X3N0YXJ0LlMK ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3YmUzN2ZlZDRhOS4uMDAwMDAwMDAwMDAw Ci0tLSBhL2FyY2gveDg2L2xpYi9saW51eF9zdGFydC5TCisrKyAvZGV2L251bGwKQEAgLTEsNTUg KzAsMCBAQAotLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi8K LS8qIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMDkgSnVlcmdlbiBCZWlzZXJ0LCBQZW5ndXRy b25peCAqLwotLyogU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMTk5OS0yMDA4IEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbiwgSW5jLiAqLwotCi0vKiBNb3N0bHkgc3RvbGVuIGZyb20gdGhlIEdSVUIy IHByb2plY3QgKi8KLQotLyoqCi0gKiBAZmlsZQotICogQGJyaWVmIFN0YXJ0IHRoZSBMaW51eCBy ZWFsIG1vZGUgc2V0dXAgY29kZQotICoKLSAqIE5vdGU6IFRoZXNlIGZ1bmN0aW9ucyBhcmUgcnVu bmluZyBpbiBmbGF0IGFuZCByZWFsIG1vZGUuIER1ZSB0byBzb21lCi0gKiBvdGhlciByZXN0cmlj dGlvbnMgdGhlc2Ugcm91dGluZXMgbXVzdCBydW5uaW5nIGZyb20gYW4gYWRkcmVzcwotICogc3Bh Y2UgYmVsb3cgMHgxMDAwMAotICovCi0KLS8qCi0gKiAgIHZvaWQgYmlvc19zdGFydF9saW51eCh1 bnNpZ25lZCBzZWdtZW50KQotICoKLSAqLwotCi0JLnNlY3Rpb24gLmJvb3QudGV4dC5iaW9zX3N0 YXJ0X2xpbnV4LCAiYXgiCi0JLmNvZGUzMgotCS5nbG9ibCBiaW9zX3N0YXJ0X2xpbnV4Ci0JLnR5 cGUgYmlvc19zdGFydF9saW51eCwgQGZ1bmN0aW9uCi0KLQkuZXh0ZXJuIHByb3RfdG9fcmVhbAot Ci1iaW9zX3N0YXJ0X2xpbnV4OgotCS8qICdwcm90X3RvX3JlYWwnIGVhdHMgb3VyIGVheCBjb250 ZW50ICovCi0JbW92bCAlZWF4LCAlZWJ4Ci0JYWRkbCAkMHgyMCwgJWVheAotCW1vdncgJWF4LCBz ZXR1cF9zZWcKLQotCWNhbGwgcHJvdF90b19yZWFsCi0KLQkuY29kZTE2Ci0KLQljbGkKLQkvKiBh bGwgc2VnbWVudCByZWdpc3RlcnMgYXJlIHVzaW5nIHRoZSBzYW1lIHNlZ21lbnQgKi8KLQltb3Z3 ICVieCwgJXNzCi0JbW92dyAlYngsICVkcwotCW1vdncgJWJ4LCAlZXMKLQltb3Z3ICVieCwgJWZz Ci0JbW92dyAlYngsICVncwotCi0JLyogc3RhY2sgZm9yIHRoZSBzZXR1cCBjb2RlIChlbmQgb2Yg aGVhcCkgKi8KLQltb3Z3ICQweDkwMDAsICVzcAotCi0JLyogZG8gYW4gJ2xqbXAnIGFuZCBuZXZl ciByZXR1cm4gKi8KLQkuYnl0ZQkweGVhCi0JLndvcmQJMAotc2V0dXBfc2VnOgotCS53b3JkCTAK LQotCS5jb2RlMzIKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2xpYi9tZW1vcnkuYyBiL2FyY2gveDg2 L2xpYi9tZW1vcnkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjRmYmJiOTMwMGU1 Li4wMDAwMDAwMDAwMDAKLS0tIGEvYXJjaC94ODYvbGliL21lbW9yeS5jCisrKyAvZGV2L251bGwK QEAgLTEsNDkgKzAsMCBAQAotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3It bGF0ZXIKLS8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMDkgSnVlcmdlbiBCZWlzZXJ0LCBQ ZW5ndXRyb25peAotCi0vKiBUaGlzIGNvZGUgd2FzIGluc3BpcmVkIGJ5IHRoZSBHUlVCMiBwcm9q ZWN0LiAqLwotCi0vKioKLSAqIEBmaWxlCi0gKiBAYnJpZWYgTWVtb3J5IG1hbmFnZW1lbnQKLSAq LwotCi0jaW5jbHVkZSA8Y29tbW9uLmg+Ci0jaW5jbHVkZSA8aW5pdC5oPgotI2luY2x1ZGUgPHN0 ZGlvLmg+Ci0jaW5jbHVkZSA8bWVtb3J5Lmg+Ci0jaW5jbHVkZSA8YXNtL3N5c2xpYi5oPgotI2lu Y2x1ZGUgPGFzbS1nZW5lcmljL21lbW9yeV9sYXlvdXQuaD4KLQotLyoqCi0gKiBIYW5kbGluZyBv ZiBmcmVlIG1lbW9yeQotICoKLSAqIFRvcGljczoKLSAqIC0gYXJlYXMgdXNlZCBieSBCSU9TIGNv ZGUKLSAqIC0gVGhlIDB4YTAwMDAuLi4gMHhmZmZmZiBob2xlCi0gKiAtIG1lbW9yeSBhYm92ZSAw eDEwMDAwMAotICovCi0KLWludCB4ODZfc3RhcnRfYmFyZWJveCh2b2lkKQotewotI2lmZGVmIENP TkZJR19NRU1PUllfTEFZT1VUX0RFRkFVTFQKLQl1bnNpZ25lZCBsb25nIG1lbW9yeV9zaXplOwot Ci0JbWVtb3J5X3NpemUgPSBiaW9zX2dldF9tZW1zaXplKCk7Ci0JbWVtb3J5X3NpemUgPDw9IDEw OwkvKiBCSU9TIHJlcG9ydHMgaW4ga2lCICovCi0KLQkvKgotCSAqIFdlIGRvIG5vdCB3YW50IHRv IGNvbmZsaWN0IHdpdGggdGhlIGtlcm5lbC4gU28sIHdlIGtlZXAgdGhlCi0JICogYXJlYSBmcm9t IDB4MTAwMDAwIC4uLiAweEZGRkZGRiBmcmVlIGZyb20gdXNhZ2UKLQkgKi8KLQlpZiAobWVtb3J5 X3NpemUgPj0gKDE1ICogMTAyNCAqIDEwMjQgKyBNQUxMT0NfU0laRSkpCi0JCW1lbV9tYWxsb2Nf aW5pdCgodm9pZCopKDE2ICogMTAyNCAqIDEwMjQpLAotCQkJCSh2b2lkKikoMTYgKiAxMDI0ICog MTAyNCArIE1BTExPQ19TSVpFIC0gMSkpOwotCWVsc2UKLQkJcmV0dXJuIC0xOwotI2Vsc2UKLQlt ZW1fbWFsbG9jX2luaXQoKHZvaWQgKilNQUxMT0NfQkFTRSwKLQkJCSh2b2lkICopKE1BTExPQ19C QVNFICsgTUFMTE9DX1NJWkUgLSAxKSk7Ci0jZW5kaWYKLQlzdGFydF9iYXJlYm94KCk7Ci19CmRp ZmYgLS1naXQgYS9hcmNoL3g4Ni9tYWNoLWkzODYvS2NvbmZpZyBiL2FyY2gveDg2L21hY2gtaTM4 Ni9LY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZDBiZmI0NzU5NDcuLjAw MDAwMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9tYWNoLWkzODYvS2NvbmZpZworKysgL2Rldi9udWxs CkBAIC0xLDEzICswLDAgQEAKLQotbWVudSAiQm9hcmQgc3BlY2lmaWMgc2V0dGluZ3MiCi0KLWlm IFg4Nl9CT09UTE9BREVSCi0KLWNvbmZpZyBYODZfR0VORVJJQ19IQVNfVklERU8KLQlib29sICJ2 aWRlbyBzdXBwb3J0IgotCWhlbHAKLQkgIFNheSBZIGhlcmUgaWYgdGhlIHRhcmdldCBzdXBwb3J0 cyBhIHZpZGVvIG91dHB1dAotCi1lbmRpZgotCi1lbmRtZW51CmRpZmYgLS1naXQgYS9hcmNoL3g4 Ni9tYWNoLWkzODYvTWFrZWZpbGUgYi9hcmNoL3g4Ni9tYWNoLWkzODYvTWFrZWZpbGUKZGVsZXRl ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyNWI0ODExYzU3NS4uMDAwMDAwMDAwMDAwCi0tLSBh L2FyY2gveDg2L21hY2gtaTM4Ni9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBA QAotIyByZWZlcmVuY2UgY2xvY2tzb3VyY2UKLW9iai15ICs9IHBpdF90aW1lci5vCmRpZmYgLS1n aXQgYS9hcmNoL3g4Ni9tYWNoLWkzODYvaW5jbHVkZS9tYWNoL2JhcmVib3gubGRzLmggYi9hcmNo L3g4Ni9tYWNoLWkzODYvaW5jbHVkZS9tYWNoL2JhcmVib3gubGRzLmgKZGVsZXRlZCBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDUwZjE3MzQwZTQwYS4uMDAwMDAwMDAwMDAwCi0tLSBhL2FyY2gveDg2 L21hY2gtaTM4Ni9pbmNsdWRlL21hY2gvYmFyZWJveC5sZHMuaAorKysgL2Rldi9udWxsCkBAIC0x LDgyICswLDAgQEAKLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVy ICovCi0vKiBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDA5IEp1ZXJnZW4gQmVpc2VydCwgUGVu Z3V0cm9uaXggKi8KLQotLyoqCi0gKiBAZmlsZQotICogQGJyaWVmIEFkYXB0IGxpbmtlciBzY3Jp cHQgY29udGVudCBpbiBhY2NvcmRhbmNlIHRvIEtjb25maWcgc2V0dGluZ3MKLSAqLwotCi0vKioK LSAqIEFyZWEgaW4gdGhlIE1CUiBvZiB0aGUgYmFyZWJveCBiYXNpYyBib290IGNvZGUuIFRoaXMg b2Zmc2V0IG11c3QgYmUgaW4KLSAqIGFjY29yZGFuY2UgdG8gdGhlICdpbmRpcmVjdF9zZWN0b3Jf bGJhJyBsYWJlbC4KLSAqLwotI2RlZmluZSBQQVRDSF9BUkVBIDQwMAotCi0vKioKLSAqIE9mZnNl dCB3aGVyZSB0byBzdG9yZSB0aGUgYm9vdCBkcml2ZSBudW1iZXIgKEJJT1MgbnVtYmVyLCAxIGJ5 dGUpCi0gKi8KLSNkZWZpbmUgUEFUQ0hfQVJFQV9CT09UX0RFViAxNgotCi0vKioKLSAqIE9mZnNl dCB3aGVyZSB0byBzdG9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcGVyc2lzdGVudCBlbnZpcm9u bWVudCBzdG9yYWdlCi0gKiBJdCBwb2ludHMgdG8gYW4gTEJBIG51bWJlciAoOCBieXRlcykgYW5k IGRlZmluZXMgdGhlIGZpcnN0IHNlY3RvciBvZiB0aGlzCi0gKiBzdG9yYWdlIG9uIGRpc2suCi0g Ki8KLSNkZWZpbmUgUEFUQ0hfQVJFQV9QRVJTX1NUQVJUIDIwCi0KLS8qKgotICogT2Zmc2V0IHdo ZXJlIHRvIHN0b3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwZXJzaXN0ZW50IGVudmlyb25tZW50 IHN0b3JhZ2UKLSAqIEl0IHBvaW50cyB0byBhIHNob3J0IG51bWJlciAoMiBieXRlcykgYW5kIGRl ZmluZXMgdGhlIHNlY3RvciBjb3VudCBvZiB0aGlzCi0gKiBzdG9yYWdlIG9uIGRpc2suCi0gKi8K LSNkZWZpbmUgUEFUQ0hfQVJFQV9QRVJTX1NJWkUgMjgKLQotLyoqCi0gKiBPZmZzZXQgd2hlcmUg dG8gc3RvcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBlcnNpc3RlbnQgZW52aXJvbm1lbnQgc3Rv cmFnZQotICogZHJpdmUgbnVtYmVyIChCSU9TIG51bWJlciwgMSBieXRlKQotICovCi0jZGVmaW5l IFBBVENIX0FSRUFfUEVSU19EUklWRSAzMAotCi0vKioKLSAqIE1hcmsgdGhlIHBlcnNpc3RlbnQg ZW52aXJvbm1lbnQgYXMgbm90IHVzZWQKLSAqLwotI2RlZmluZSBQQVRDSF9BUkVBX1BFUlNfU0la RV9VTlVTRUQgMHgwMDAKLQotLyoqCi0gKiBNYXJrIGEgREFQUyBhcyB1bnVzZWQvaW52YWxpZAot ICovCi0jZGVmaW5lIE1BUktfREFQU19JTlZBTElEIDB4MDAwMAotCi0vKioKLSAqIE9mZnNldCBv ZiB0aGUgcGFydGl0aW9uIHRhYmxlIGluIGFuIE1CUgotICovCi0jZGVmaW5lIE9GRlNFVF9PRl9Q QVJUSVRJT05fVEFCTEUgNDQ2Ci0KLS8qKgotICogT2Zmc2V0IG9mIHRoZSBzaWduYXR1cmUgaW4g YW4gTUJSCi0gKi8KLSNkZWZpbmUgT0ZGU0VUX09GX1NJR05BVFVSRSA1MTAKLQotLyoqCi0gKiBB cmVhIHdoZXJlIHRvIHN0b3JlIGluZGlyZWN0IHNlY3RvciB0byBsb29wIHRocm91Z2guIEtlZXAg dGhpcyB2YWx1ZQotICogaW4gYWNjb3JkYW5jZSB0byB0aGUgJ2luZGlyZWN0X2FyZWEnIGxhYmVs LiBOb3RlOiAuCi0gKgotICogQGF0dGVudGlvbiBUaGVzZSBhZGRyZXNzZXMgYXJlIHJlYWwgbW9k ZSBvbmVzIChzZWc6b2Zmc2V0KQotICovCi0jZGVmaW5lIElORElSRUNUX0FSRUEgMHg3QTAwCi0j ZGVmaW5lIElORElSRUNUX1NFR01FTlQgMHgwMDAwCi0KLS8qKgotICogQXJlYSB3aGVyZSB0byBs b2FkIHNlY3RvcnMgZnJvbSBkaXNrIHRvLiBUaGV5IHNob3VsZCBzdGFydCBhZnRlciB0aGUKLSAq IE1CUiBhcmVhIGFuZCBtdXN0IGJlIGluIGFjY29yZGFuY2UgdG8gdGhlIG9mZnNldCBvZiB0aGUg Jy5ib290c3RyYXBwaW5nJwotICogc2VjdGlvbiBpbiB0aGUgbGlua2VyIGZpbGUuCi0gKgotICog QGF0dGVudGlvbiBUaGUgYWRkcmVzcyBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNTEyLgotICovCi0j ZGVmaW5lIExPQURfQVJFQSAweDdlMDAKLSNkZWZpbmUgTE9BRF9TRUdNRU5UIDB4MDAwMAotCi0v KioKLSAqIFNpemUgb2Ygb25lIHNlY3Rvci4KLSAqLwotI2RlZmluZSBTRUNUT1JfU0laRSA1MTIK ZGlmZiAtLWdpdCBhL2FyY2gveDg2L21hY2gtaTM4Ni9waXRfdGltZXIuYyBiL2FyY2gveDg2L21h Y2gtaTM4Ni9waXRfdGltZXIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDJkYTNi NjBkNDhiLi4wMDAwMDAwMDAwMDAKLS0tIGEvYXJjaC94ODYvbWFjaC1pMzg2L3BpdF90aW1lci5j CisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEdQTC0yLjAtb3ItbGF0ZXIKLS8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMDkgSnVl cmdlbiBCZWlzZXJ0LCBQZW5ndXRyb25peCAqLwotCi0vKioKLSAqIEBmaWxlCi0gKiBAYnJpZWYg Q2xvY2tzb3VyY2UgYmFzZWQgb24gdGhlICdQcm9ncmFtbWFibGUgSW50ZXJ2YWwgVGltZXInIFBJ VCAoODI1MykKLSAqCi0gKiBUaGlzIHRpbWVyIHNob3VsZCBiZSBhdmFpbGFibGUgb24gYWxtb3N0 IGFsbCBQQ3MuIEl0IGFsc28gc2hvdWxkIGJlIHJ1bgotICogYXQgYSBmaXhlZCBmcmVxdWVuY3kg KDExOTMxODEuODE4MSBIeikgYW5kIG5vdCBtb2RpZmllZCB0byB1c2UgYW5vdGhlcgotICogcmVs b2FkIHZhbHVlIHRoYW4gMHhGRkZGLiBTbywgaXQgYWx3YXlzIGNvdW50cyBmcm9tIDB4ZmZmZiBk b3duIHRvIDAuCi0gKgotICogQG5vdGU6IFdlIGNhbid0IHJlcHJvZ3JhbSB0aGUgUElULCBpdCB3 aWxsIGJlIHN0aWxsIHVzZWQgYnkgdGhlIEJJT1MuIFRoaXMKLSAqIGNsb2Nrc291cmNlIGRyaXZl ciBkb2VzIG5vdCB0b3VjaCBhbnkgUElUIHNldHRpbmdzLgotICovCi0KLSNpbmNsdWRlIDxpbml0 Lmg+Ci0jaW5jbHVkZSA8Y2xvY2suaD4KLSNpbmNsdWRlIDxpby5oPgotCi0vKiogYmFzZSBhZGRy ZXNzIG9mIHRoZSBQSVQgaW4gYSBzdGFuZGFyZCBQQyAqLwotI2RlZmluZSBQSVQgMHg0MAotCi1z dGF0aWMgdWludDY0X3QgcGl0X2Nsb2Nrc291cmNlX3JlYWQodm9pZCkKLXsKLQl1aW50MTZfdCB2 YWwxLCB2YWwyOwotCi0Jb3V0YigweDAwLCBQSVQgKyAzKTsJLyogbGF0Y2ggY291bnRlciAwICov Ci0Jb3V0YigweDAwLCAweDgwKTsKLQotCXZhbDEgPSBpbmIoUElUKTsKLQlvdXRiKDB4MDAsIDB4 ODApOwotCi0JdmFsMiA9IGluYihQSVQpOwotCXZhbDIgPDw9IDg7Ci0KLQkvKiBub3RlOiBpdHMg YSBkb3duIGNvdW50ZXIgKi8KLQlyZXR1cm4gMHhGRkZGVSAtICh2YWwxIHwgdmFsMik7Ci19Ci0K LXN0YXRpYyBzdHJ1Y3QgY2xvY2tzb3VyY2UgY3MgPSB7Ci0JLnJlYWQJPSBwaXRfY2xvY2tzb3Vy Y2VfcmVhZCwKLQkubWFzawk9IENMT0NLU09VUkNFX01BU0soMTYpLAotCS5zaGlmdAk9IDEwLAot fTsKLQotc3RhdGljIGludCBjbG9ja3NvdXJjZV9pbml0ICh2b2lkKQotewotCWNzLm11bHQgPSBj bG9ja3NvdXJjZV9oejJtdWx0KDExOTMxODIsIGNzLnNoaWZ0KTsKLQotCXJldHVybiBpbml0X2Ns b2NrKCZjcyk7Ci19Ci0KLWNvcmVfaW5pdGNhbGwoY2xvY2tzb3VyY2VfaW5pdCk7CmRpZmYgLS1n aXQgYS9jb21tYW5kcy9LY29uZmlnIGIvY29tbWFuZHMvS2NvbmZpZwppbmRleCA2ZDg0Yzk1NmU1 NzYuLjc2N2EyMGVkMjRjNCAxMDA2NDQKLS0tIGEvY29tbWFuZHMvS2NvbmZpZworKysgYi9jb21t YW5kcy9LY29uZmlnCkBAIC0zODAsMjYgKzM4MCw2IEBAIGNvbmZpZyBDTURfQk9PVFoKIAogCSAg VXNhZ2U6IGJvb3R6IEZJTEUKIAotY29uZmlnIENNRF9MSU5VWDE2Ci0JdHJpc3RhdGUKLQlkZXBl bmRzIG9uIFg4NiAmJiAhWDg2X0VGSQotCWRlZmF1bHQgeSBpZiBYODYKLQlwcm9tcHQgImxpbnV4 MTYiCi0JaGVscAotCSAgVXNhZ2U6IGxpbnV4MTYgWy12IFZFU0FNT0RFXSBGSUxFCi0KLQkgIExv YWQga2VybmVsIGZyb20gRklMRSBhbmQgYm9vdCBvbiB4ODYgaW4gcmVhbC1tb2RlLgotCi0JICBP bmx5IGtlcm5lbCBpbWFnZXMgaW4gYnpJbWFnZSBmb3JtYXQgYXJlIHN1cHBvcnRlZCBieSBub3cu Ci0KLQkgIEZvciB0aGUgdmlkZW8gbW9kZSByZWZlciB0aGUgTGludXgga2VybmVsIGRvY3VtZW50 YXRpb24KLQkgICdEb2N1bWVudGF0aW9uL2ZiL3Zlc2FmYi50eHQnIGZvciBjb3JyZWN0IFZFU0Eg bW9kZSBudW1iZXJzLiBVc2UgJ2FzaycKLQkgIGluc3RlYWQgb2YgYSBudW1iZXIgdG8gbWFrZSBM aW51eCBwcm9tcHQgZm9yIG9wdGlvbnMuCi0KLQkgIE9wdGlvbnM6Ci0JICAtdiBWRVNBTU9ERSAg IHNldCBWRVNBTU9ERQotCi0KIGNvbmZpZyBDTURfR08KIAl0cmlzdGF0ZQogCXByb21wdCAiZ28i CmRpZmYgLS1naXQgYS9jb21tYW5kcy9NYWtlZmlsZSBiL2NvbW1hbmRzL01ha2VmaWxlCmluZGV4 IGNkZjE0YTVlMWQ4ZC4uNDQ3MzQ5ZmQxNTdkIDEwMDY0NAotLS0gYS9jb21tYW5kcy9NYWtlZmls ZQorKysgYi9jb21tYW5kcy9NYWtlZmlsZQpAQCAtMyw3ICszLDYgQEAgb2JqLSQoQ09ORklHX0NN RF9ESUdFU1QpCSs9IGRpZ2VzdC5vCiBvYmotJChDT05GSUdfQ09NUElMRV9IQVNIKQkrPSBoYXNo c3VtLm8KIG9iai0kKENPTkZJR19DTURfQk9PVE0pCQkrPSBib290bS5vCiBvYmotJChDT05GSUdf Q01EX1VJTUFHRSkJKz0gdWltYWdlLm8KLW9iai0kKENPTkZJR19DTURfTElOVVgxNikJKz0gbGlu dXgxNi5vCiBvYmotJChDT05GSUdfQ01EX0xPQURCKQkJKz0gbG9hZGIubwogb2JqLSQoQ09ORklH X0NNRF9MT0FEWSkJCSs9IGxvYWR4eS5vCiBvYmotJChDT05GSUdfQ01EX0xPQURTKQkJKz0gbG9h ZHMubwpkaWZmIC0tZ2l0IGEvY29tbWFuZHMvbGludXgxNi5jIGIvY29tbWFuZHMvbGludXgxNi5j CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3M2U0MDJkODc3NDEuLjAwMDAwMDAwMDAw MAotLS0gYS9jb21tYW5kcy9saW51eDE2LmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMzEgKzAsMCBA QAotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIKLS8vIFNQRFgt RmlsZUNvcHlyaWdodFRleHQ6IMKpIDIwMDkgSnVlcmdlbiBCZWlzZXJ0LCBQZW5ndXRyb25peAot Ci0vKgotICogSW4gcGFydHMgZnJvbSB0aGUgR1JVQjIgcHJvamVjdDoKLSAqCi0gKiAgR1JVQiAg LS0gIEdSYW5kIFVuaWZpZWQgQm9vdGxvYWRlcgotICogIENvcHlyaWdodCAoQykgMTk5OSwyMDAw LDIwMDEsMjAwMiwyMDAzLDIwMDQsMjAwNSwyMDA3LDIwMDggIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbiwgSW5jLgotICovCi0KLSNpbmNsdWRlIDxjb21tb24uaD4KLSNpbmNsdWRlIDxjb21tYW5k Lmg+Ci0jaW5jbHVkZSA8ZW52aXJvbm1lbnQuaD4KLSNpbmNsdWRlIDxmcy5oPgotI2luY2x1ZGUg PGVycm5vLmg+Ci0jaW5jbHVkZSA8bGliZmlsZS5oPgotI2luY2x1ZGUgPGdldG9wdC5oPgotI2lu Y2x1ZGUgPG1hbGxvYy5oPgotI2luY2x1ZGUgPGJvb3QuaD4KLSNpbmNsdWRlIDxhc20vc3lzbGli Lmg+Ci0KLS8qKiBGSVhNRSAqLwotI2RlZmluZSBMSU5VWF9NQUdJQ19TSUdOQVRVUkUgICAgICAg MHg1MzcyNjQ0OCAgICAgIC8qICJIZHJTIiAqLwotCi0vKiogRklYTUUgKi8KLSNkZWZpbmUgTElO VVhfRkxBR19CSUdfS0VSTkVMICAgICAgIDB4MQotCi0vKiogRklYTUUgKi8KLSNkZWZpbmUgTElO VVhfQk9PVF9MT0FERVJfVFlQRSAgICAgIDB4NzIKLQotLyoqIEZJWE1FICovCi0jZGVmaW5lIExJ TlVYX0RFRkFVTFRfU0VUVVBfU0VDVFMJNAotCi0vKiogRklYTUUgKi8KLSNkZWZpbmUgTElOVVhf TUFYX1NFVFVQX1NFQ1RTCQk2NAotCi0vKiogRklYTUUgKi8KLSNkZWZpbmUgTElOVVhfT0xEX1JF QUxfTU9ERV9TRUdNVAkweDkwMDAKLQotLyoqIEZJWE1FICovCi0jZGVmaW5lIExJTlVYX09MRF9S RUFMX01PREVfQUREUgkoTElOVVhfT0xEX1JFQUxfTU9ERV9TRUdNVCA8PCA0KQotCi0vKiogRklY TUUgKi8KLSNkZWZpbmUgTElOVVhfSEVBUF9FTkRfT0ZGU0VUCQkoTElOVVhfT0xEX1JFQUxfTU9E RV9TRUdNVCAtIDB4MjAwKQotCi0vKiogRklYTUUgKi8KLSNkZWZpbmUgTElOVVhfRkxBR19DQU5f VVNFX0hFQVAJCTB4ODAKLQotLyoqIERlZmluZSBrZXJuZWwgY29tbWFuZCBsaW5lcydzIHN0YXJ0 IG9mZnNldCBpbiB0aGUgc2V0dXAgc2VnbWVudCAqLwotI2RlZmluZSBMSU5VWF9DTF9PRkZTRVQJ CQkweDkwMDAKLQotLyoqIERlZmluZSBrZXJuZWwgY29tbWFuZCBsaW5lcydzIGVuZCBvZmZzZXQg Ki8KLSNkZWZpbmUgTElOVVhfQ0xfRU5EX09GRlNFVAkJMHg5MEZGCi0KLS8qKiBGSVhNRSAqLwot I2RlZmluZSBMSU5VWF9DTF9NQUdJQwkJCTB4QTMzRgotCi0vKiogRklYTUUgKi8KLSNkZWZpbmUg TElOVVhfU0VUVVBfTU9WRV9TSVpFCQkweDkxMDAKLQotLyoqIFNlY3RvciBzaXplICovCi0jZGVm aW5lIERJU0tfU0VDVE9SX0JJVFMJCTkKLSNkZWZpbmUgRElTS19TRUNUT1JfU0laRQkJMHgyMDAK LQotLyoqIFdoZXJlIHRvIGxvYWQgYSBiekltYWdlICovCi0jZGVmaW5lIExJTlVYX0JaSU1BR0Vf QUREUgkJMHgxMDAwMDAKLQotc3RydWN0IGxpbnV4X2tlcm5lbF9oZWFkZXIgewotCS8qIGZpcnN0 IHNlY3RvciBvZiB0aGUgaW1hZ2UgKi8KLQl1aW50OF90IGNvZGUxWzB4MDAyMF07Ci0JdWludDE2 X3QgY2xfbWFnaWM7CQkvKio8IE1hZ2ljIG51bWJlciAweEEzM0YgKi8KLQl1aW50MTZfdCBjbF9v ZmZzZXQ7CQkvKio8IFRoZSBvZmZzZXQgb2YgY29tbWFuZCBsaW5lICovCi0JdWludDhfdCBjb2Rl MlsweDAxRjEgLSAweDAwMjAgLSAyIC0gMl07Ci0JdWludDhfdCBzZXR1cF9zZWN0czsJCS8qKjwg VGhlIHNpemUgb2YgdGhlIHNldHVwIGluIHNlY3RvcnMgKi8KLQl1aW50MTZfdCByb290X2ZsYWdz OwkJLyoqPCBJZiB0aGUgcm9vdCBpcyBtb3VudGVkIHJlYWRvbmx5ICovCi0JdWludDE2X3Qgc3lz c2l6ZTsJCS8qKjwgb2Jzb2xldGUgKi8KLQl1aW50MTZfdCBzd2FwX2RldjsJCS8qKjwgb2Jzb2xl dGUgKi8KLQl1aW50MTZfdCByYW1fc2l6ZTsJCS8qKjwgb2Jzb2xldGUgKi8KLQl1aW50MTZfdCB2 aWRfbW9kZTsJCS8qKjwgVmlkZW8gbW9kZSBjb250cm9sICovCi0JdWludDE2X3Qgcm9vdF9kZXY7 CQkvKio8IERlZmF1bHQgcm9vdCBkZXZpY2UgbnVtYmVyICovCi0JdWludDE2X3QgYm9vdF9mbGFn OwkJLyoqPCAweEFBNTUgbWFnaWMgbnVtYmVyICovCi0KLQkvKiBzZWNvbmQgc2VjdG9yIG9mIHRo ZSBpbWFnZSAqLwotCXVpbnQxNl90IGp1bXA7CQkJLyoqPCBKdW1wIGluc3RydWN0aW9uICh0aGlz IGlzIGNvZGUhKSAqLwotCXVpbnQzMl90IGhlYWRlcjsJCS8qKjwgTWFnaWMgc2lnbmF0dXJlICJI ZHJTIiAqLwotCXVpbnQxNl90IHZlcnNpb247CQkvKio8IEJvb3QgcHJvdG9jb2wgdmVyc2lvbiBz dXBwb3J0ZWQgKi8KLQl1aW50MzJfdCByZWFsbW9kZV9zd3RjaDsJLyoqPCBCb290IGxvYWRlciBo b29rICovCi0JdWludDE2X3Qgc3RhcnRfc3lzOwkJLyoqPCBUaGUgbG9hZC1sb3cgc2VnbWVudCAo b2Jzb2xldGUpICovCi0JdWludDE2X3Qga2VybmVsX3ZlcnNpb247CS8qKjwgUG9pbnRzIHRvIGtl cm5lbCB2ZXJzaW9uIHN0cmluZyAqLwotCXVpbnQ4X3QgdHlwZV9vZl9sb2FkZXI7CQkvKio8IEJv b3QgbG9hZGVyIGlkZW50aWZpZXIgKi8KLSNkZWZpbmUgTElOVVhfTE9BREVSX0lEX0xJTE8JCTB4 MAotI2RlZmluZSBMSU5VWF9MT0FERVJfSURfTE9BRExJTgkJMHgxCi0jZGVmaW5lIExJTlVYX0xP QURFUl9JRF9CT09UU0VDVAkweDIKLSNkZWZpbmUgTElOVVhfTE9BREVSX0lEX1NZU0xJTlVYCTB4 MwotI2RlZmluZSBMSU5VWF9MT0FERVJfSURfRVRIRVJCT09UCTB4NAotI2RlZmluZSBMSU5VWF9M T0FERVJfSURfRUxJTE8JCTB4NQotI2RlZmluZSBMSU5VWF9MT0FERVJfSURfR1JVQgkJMHg3Ci0j ZGVmaW5lIExJTlVYX0xPQURFUl9JRF9VQk9PVAkJMHg4Ci0jZGVmaW5lIExJTlVYX0xPQURFUl9J RF9YRU4JCTB4OQotI2RlZmluZSBMSU5VWF9MT0FERVJfSURfR1VKSU4JCTB4YQotI2RlZmluZSBM SU5VWF9MT0FERVJfSURfUUVNVQkJMHhiCi0JdWludDhfdCBsb2FkZmxhZ3M7CQkvKio8IEJvb3Qg cHJvdG9jb2wgb3B0aW9uIGZsYWdzICovCi0JdWludDE2X3Qgc2V0dXBfbW92ZV9zaXplOwkvKio8 IE1vdmUgdG8gaGlnaCBtZW1vcnkgc2l6ZSAqLwotCXVpbnQzMl90IGNvZGUzMl9zdGFydDsJCS8q KjwgQm9vdCBsb2FkZXIgaG9vayAqLwotCXVpbnQzMl90IHJhbWRpc2tfaW1hZ2U7CQkvKio8IGlu aXRyZCBsb2FkIGFkZHJlc3MgKi8KLQl1aW50MzJfdCByYW1kaXNrX3NpemU7CQkvKio8IGluaXRy ZCBzaXplICovCi0JdWludDMyX3QgYm9vdHNlY3Rfa2x1ZGdlOwkvKio8IG9ic29sZXRlICovCi0J dWludDE2X3QgaGVhcF9lbmRfcHRyOwkJLyoqPCBGcmVlIG1lbW9yeSBhZnRlciBzZXR1cCBlbmQg Ki8KLQl1aW50OF90IGV4dF9sb2FkZXJfdmVyOwkJLyoqPCBib290IGxvYWRlcidzIGV4dGVuc2lv biBvZiB0aGUgdmVyc2lvbiBudW1iZXIgKi8KLQl1aW50OF90IGV4dF9sb2FkZXJfdHlwZTsJLyoq PCBib290IGxvYWRlcidzIGV4dGVuc2lvbiBvZiBpdHMgdHlwZSAqLwotCWNoYXIgKmNtZF9saW5l X3B0cjsJCS8qKjwgUG9pbnRzIHRvIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lICovCi0JdWludDMy X3QgaW5pdHJkX2FkZHJfbWF4OwkvKio8IEhpZ2hlc3QgYWRkcmVzcyBmb3IgaW5pdHJkICovCi0j aWYgMAotCS8qIGZvciB0aGUgcmVjb3JkcyBvbmx5LiBUaGVzZSBtZW1iZXJzIGFyZSBkZWZpbmVk IGluCi0JICogbW9yZSByZWNlbnQgTGludXgga2VybmVscwotCSAqLwotCXVpbnQzMl90IGtlcm5l bF9hbGlnbm1lbnQ7CS8qKjwgQWxpZ25tZW50IHVuaXQgcmVxdWlyZWQgYnkgdGhlIGtlcm5lbCAq LwotCXVpbnQ4X3QgcmVsb2NhdGFibGVfa2VybmVsOwkvKiogKi8KLQl1aW50OF90IG1pbl9hbGln bm1lbnQ7CQkvKiogKi8KLQl1aW50MzJfdCBjbWRsaW5lX3NpemU7CQkvKiogKi8KLQl1aW50MzJf dCBoYXJkd2FyZV9zdWJhcmNoOwkvKiogKi8KLQl1aW50NjRfdCBoYXJkd2FyZV9zdWJhcmNoX2Rh dGE7CS8qKiAqLwotCXVpbnQzMl90IHBheWxvYWRfb2Zmc2V0OwkvKiogKi8KLQl1aW50MzJfdCBw YXlsb2FkX2xlbmd0aDsJLyoqICovCi0JdWludDY0X3Qgc2V0dXBfZGF0YTsJCS8qKiAqLwotCXVp bnQ2NF90IHByZWZfYWRkcmVzczsJCS8qKiAqLwotCXVpbnQzMl90IGluaXRfc2l6ZTsJCS8qKiAq LwotI2VuZGlmCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyogVGhpcyBpcyAtMS4g S2VlcCB0aGlzIHZhbHVlIGluIHN5bmMgd2l0aCB0aGUga2VybmVsICovCi0jZGVmaW5lIE5PUk1B TF9WR0EJMHhmZmZmCQkvKiA4MHgyNSBtb2RlICovCi0jZGVmaW5lIEFTS19WR0EJCTB4ZmZmZAkJ LyogYXNrIGZvciBpdCBhdCBib290dXAgKi8KLQotLyoqCi0gKiBMb2FkIGFuIHg4NiBMaW51eCBr ZXJuZWwgYnpJbWFnZSBhbmQgc3RhcnQgaXQKLSAqIEBwYXJhbSBhcmdjIHBhcmFtZXRlciBjb3Vu dAotICogQHBhcmFtIGFyZ3YgbGlzdCBvZiBwYXJhbWV0ZXIKLSAqCi0gKiBMb2FkcyBhbiB4ODYg YnpJbWFnZSwgY2hlY2tzIGZvciBpdHMgaW50ZWdyaXR5LCBzdG9yZXMgdGhlIHR3byBwYXJ0cwot ICogKHNldHVwID0gJ3JlYWwgbW9kZSBjb2RlJyBhbmQga2VybmVsID0gJ3Byb3RlY3RlZCBtb2Rl IGNvZGUnKSB0byB0aGVpcgotICogZGVmYXVsdCBsb2NhdGlvbnMsIHN3aXRjaGVzIGJhY2sgdG8g cmVhbCBtb2RlIGFuZCBydW5zIHRoZSBzZXR1cCBjb2RlLgotICovCi1zdGF0aWMgaW50IGRvX2xp bnV4MTYoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLXsKLQlzdHJ1Y3QgbGludXhfa2VybmVsX2hl YWRlciAqbGggPSBOVUxMOwotCWludCByYywgb3B0OwotCXVuc2lnbmVkIHNldHVwX3NlY3RzOwot CXVuc2lnbmVkIHJlYWxfbW9kZV9zaXplOwotCWludCB2aWRfbW9kZSA9IE5PUk1BTF9WR0E7Ci0J c2l6ZV90IGltYWdlX3NpemU7Ci0JY29uc3QgY2hhciAqY21kbGluZSA9IGxpbnV4X2Jvb3Rhcmdz X2dldCgpOwotCWNvbnN0IGNoYXIgKmtlcm5lbF9maWxlOwotCi0Jd2hpbGUoKG9wdCA9IGdldG9w dChhcmdjLCBhcmd2LCAidjoiKSkgPiAwKSB7Ci0JCXN3aXRjaChvcHQpIHsKLQkJY2FzZSAndic6 Ci0JCQl2aWRfbW9kZSA9IHNpbXBsZV9zdHJ0b3VsKG9wdGFyZywgTlVMTCwgMCk7Ci0JCQlpZiAo dmlkX21vZGUgPT0gMCkgewotCQkJCWlmICghc3RyY21wKG9wdGFyZywgImFzayIpKQotCQkJCQl2 aWRfbW9kZSA9IEFTS19WR0E7Ci0JCQkJZWxzZSB7Ci0JCQkJCXByaW50ZigiVW5rbm93biB2aWRl byBtb2RlOiAlc1xuIiwgb3B0YXJnKTsKLQkJCQkJcmV0dXJuIDE7Ci0JCQkJfQotCQkJfQotCQkJ YnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gQ09NTUFORF9FUlJPUl9VU0FHRTsKLQkJfQot CX0KLQotCWlmIChvcHRpbmQgPT0gYXJnYykgewotCQlwcmludGYoIk5vIGtlcm5lbCBmaWxlbmFt ZSBnaXZlblxuIik7Ci0JCXJldHVybiAxOwotCX0KLQlrZXJuZWxfZmlsZSA9IGFyZ3Zbb3B0aW5k XTsKLQotCWxoID0gcmVhZF9maWxlKGtlcm5lbF9maWxlLCAmaW1hZ2Vfc2l6ZSk7Ci0JaWYgKGxo ID09IE5VTEwpIHsKLQkJcHJpbnRmKCJDYW5ub3QgcmVhZCBmaWxlICclcydcbiIsIGFyZ3ZbMV0p OwotCQlyZXR1cm4gMTsKLQl9Ci0KLQlpZiAobGgtPmJvb3RfZmxhZyAhPSAweGFhNTUpIHsKLQkJ cHJpbnRmKCJGaWxlICclcycgaGFzIGludmFsaWQgbWFnaWMgbnVtYmVyXG4iLCBhcmd2WzFdKTsK LQkJcmMgPSAxOwotCQlnb3RvIG9uX2Vycm9yOwotCX0KLQotCWlmIChsaC0+c2V0dXBfc2VjdHMg PiBMSU5VWF9NQVhfU0VUVVBfU0VDVFMpIHsKLQkJcHJpbnRmKCJGaWxlICclcycgY29udGFpbnMg dG9vIG1hbnkgc2V0dXAgc2VjdG9yc1xuIiwgYXJndlsxXSk7Ci0JCXJjID0gMTsKLQkJZ290byBv bl9lcnJvcjsKLQl9Ci0KLQlzZXR1cF9zZWN0cyA9IGxoLT5zZXR1cF9zZWN0czsKLQotCXByaW50 ZigiRm91bmQgYSAlZC4lZCBpbWFnZSBoZWFkZXJcbiIsIGxoLT52ZXJzaW9uID4+IDgsIGxoLT52 ZXJzaW9uICYgMHhGRik7Ci0KLQlpZiAobGgtPmhlYWRlciA9PSBMSU5VWF9NQUdJQ19TSUdOQVRV UkUgJiYgbGgtPnZlcnNpb24gPj0gMHgwMjAwKSB7Ci0JCS8qIGtlcm5lbCBpcyByZWNlbnQgZW5v dWdoICovCi0JCTsKLQkJaWYgKCEobGgtPmxvYWRmbGFncyAmIExJTlVYX0ZMQUdfQklHX0tFUk5F TCkpIHsKLQkJCXByaW50ZigiQ2Fubm90IGxvYWQgYSBjbGFzc2ljIHpJbWFnZS4gVXNlIGEgYnpJ bWFnZSBpbnN0ZWFkXG4iKTsKLQkJCWdvdG8gb25fZXJyb3I7Ci0JCX0KLQkJbGgtPnR5cGVfb2Zf bG9hZGVyID0gTElOVVhfQk9PVF9MT0FERVJfVFlQRTsJLyogVE9ETyAqLwotCi0JCWlmIChsaC0+ dmVyc2lvbiA+PSAweDAyMDEpIHsKLQkJCWxoLT5oZWFwX2VuZF9wdHIgPSBMSU5VWF9IRUFQX0VO RF9PRkZTRVQ7Ci0JCQlsaC0+bG9hZGZsYWdzIHw9IExJTlVYX0ZMQUdfQ0FOX1VTRV9IRUFQOwot CQl9Ci0KLQkJaWYgKGxoLT52ZXJzaW9uID49IDB4MDIwMikKLQkJCWxoLT5jbWRfbGluZV9wdHIg PSAodm9pZCopKExJTlVYX09MRF9SRUFMX01PREVfQUREUiArIExJTlVYX0NMX09GRlNFVCk7CS8q IEZJWE1FICovCi0JCWVsc2UgewotCQkJbGgtPmNsX21hZ2ljID0gTElOVVhfQ0xfTUFHSUM7Ci0J CQlsaC0+Y2xfb2Zmc2V0ID0gTElOVVhfQ0xfT0ZGU0VUOwotCQkJbGgtPnNldHVwX21vdmVfc2l6 ZSA9IExJTlVYX1NFVFVQX01PVkVfU0laRTsKLQkJfQotCX0gZWxzZSB7Ci0JCXByaW50ZigiS2Vy bmVsIHRvbyBvbGQgdG8gaGFuZGxlXG4iKTsKLQkJcmMgPSAxOwotCQlnb3RvIG9uX2Vycm9yOwot CX0KLQotCWlmIChzdHJsZW4oY21kbGluZSkgPj0gKExJTlVYX0NMX0VORF9PRkZTRVQgLSAgTElO VVhfQ0xfT0ZGU0VUKSkgewotCQlwcmludGYoIktlcm5lbCBjb21tYW5kIGxpbmUgZXhjZWVkcyB0 aGUgYXZhaWxhYmxlIHNwYWNlXG4iKTsKLQkJcmMgPSAxOwotCQlnb3RvIG9uX2Vycm9yOwotCX0K LQotCS8qCi0JICogVGhlIGtlcm5lbCBkb2VzIG5vdCBjaGVjayBmb3IgdGhlICJ2Z2E9PHZhbD4i IGtlcm5lbCBjb21tYW5kIGxpbmUKLQkgKiBwYXJhbWV0ZXIgYW55bW9yZS4gSXQgZXhwZWN0cyB0 aGlzIGtpbmQgb2YgaW5mb3JtYXRpb24gaW4gdGhlCi0JICogYm9vdCBwYXJhbWV0ZXJzIGluc3Rl YWQuCi0JICovCi0JaWYgKHZpZF9tb2RlICE9IE5PUk1BTF9WR0EpCi0JCWxoLT52aWRfbW9kZSA9 IHZpZF9tb2RlOwotCi0JLyogSWYgU0VUVVBfU0VDVFMgaXMgbm90IHNldCwgc2V0IGl0IHRvIHRo ZSBkZWZhdWx0LiAgKi8KLQlpZiAoc2V0dXBfc2VjdHMgPT0gMCkgewotCQlwcmludGYoIkZpeGlu ZyBzZXR1cCBzZWN0b3IgY291bnRcbiIpOwotCQlzZXR1cF9zZWN0cyA9IExJTlVYX0RFRkFVTFRf U0VUVVBfU0VDVFM7Ci0JfQotCi0JaWYgKHNldHVwX3NlY3RzID49IDE1KSB7Ci0JCXZvaWQgKnNy YyA9IGxoOwotCQlpZiAobGgtPmtlcm5lbF92ZXJzaW9uICE9IDApCi0JCQlwcmludGYoIktlcm5l bCB2ZXJzaW9uOiAnJXMnXG4iLAotCQkJICAgICAgIChjaGFyICopc3JjICsgbGgtPmtlcm5lbF92 ZXJzaW9uICsgRElTS19TRUNUT1JfU0laRSk7Ci0JfQotCi0JLyoKLQkgKiBTaXplIG9mIHRoZSBy ZWFsIG1vZGUgcGFydCB0byBoYW5kbGUgaW4gYSBzZXBhcmF0ZSB3YXkKLQkgKi8KLQlyZWFsX21v ZGVfc2l6ZSA9IChzZXR1cF9zZWN0cyA8PCBESVNLX1NFQ1RPUl9CSVRTKSArIERJU0tfU0VDVE9S X1NJWkU7Ci0KLQkvKgotCSAqICAgICAgICAgICAgICAgIHJlYWwgbW9kZSBzcGFjZSAgICAgICAg ICAgICAgICAgICAgIGhvbGUgICAgICAgICAgICBleHRlbmRlZCBtZW1vcnkKLQkgKiB8LS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT58LS0tLS0tLS0tLS0+fC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT4KLQkgKiAwICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAweGEwMDAwICAgICAweDEwMDAwMAotCSAqICA8LTEtfC0t LS0tLS0tLS0yLS0tLS0tLS0tLS0+PC0zLSAgIHwKLQkgKiAgICAweDdlMDAgICAgICAgICAgICAg ICAgICAgICAgICAweDkwMDAwCi0JICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwt NC0tfC01LS0+ICAgICAgICAgICAgICAgICAgIHwtLS0tLS0tLS02LS0tLS0tLS0tLS0tLT4KLQkg KgotCSAqIDEpIHJlYWwgbW9kZSBzdGFjawotCSAqIDIpIGJhcmVib3ggY29kZQotCSAqIDMpIGZs YXQgbW9kZSBzdGFjawotCSAqIDQpIHJlYWxtb2RlIHN0YWNrIHdoZW4gc3RhcnRpbmcgYSBMaW51 eCBrZXJuZWwKLQkgKiA1KSBLZXJuZWwncyByZWFsIG1vZGUgc2V0dXAgY29kZQotCSAqIDYpIGNv bXByZXNzZWQga2VybmVsIGltYWdlCi0JICovCi0JLyoKLQkgKiBQYXJ0cyBvZiB0aGUgaW1hZ2Ug d2Uga25vdzoKLQkgKiAtIHJlYWwgbW9kZSBwYXJ0Ci0JICogLSBrZXJuZWwgcGF5bG9hZAotCSAq LwotCS8qCi0JICogTk9URTogVGhpcyBwYXJ0IGlzIGRhbmdlcm91cywgYXMgaXQgY29waWVzIHNv bWUgaW1hZ2UgY29udGVudCB0bwotCSAqIHZhcmlvdXMgbG9jYXRpb25zIGluIHRoZSBtYWluIG1l bW9yeS4gVGhpcyBjb3VsZCBvdmVyd3JpdGUgaW1wb3J0YW50Ci0JICogZGF0YSBvZiB0aGUgcnVu bmluZyBiYXJlYm94IChob3BlZnVsbHkgbm90KQotCSAqLwotCS8qIGNvcHkgdGhlIHJlYWwgbW9k ZSBwYXJ0IG9mIHRoZSBpbWFnZSB0byB0aGUgOXRoIHNlZ21lbnQgKi8KLQltZW1jcHkoKHZvaWQq KUxJTlVYX09MRF9SRUFMX01PREVfQUREUiwgbGgsIExJTlVYX1NFVFVQX01PVkVfU0laRSk7Ci0K LQkvKiBUT0RPIGFkZCAnQk9PVF9JTUFHRT08ZmlsZT4nIGFuZCAnYXV0bycgaWYgbm8gdXNlciBp bnRlcnZlbnRpb24gd2FzIGRvbmUgKGluIGZyb250IG9mIGFsbCBvdGhlciBwYXJhbXMpICovCi0J LyogY29weSBhbHNvIHRoZSBjb21tYW5kIGxpbmUgaW50byB0aGlzIGFyZWEgKi8KLQltZW1jcHko KHZvaWQqKShMSU5VWF9PTERfUkVBTF9NT0RFX0FERFIgKyBMSU5VWF9DTF9PRkZTRVQpLCBjbWRs aW5lLCBzdHJsZW4oY21kbGluZSkgKyAxKTsKLQlwcmludGYoIlVzaW5nIGtlcm5lbCBjb21tYW5k IGxpbmU6ICclcydcbiIsIGNtZGxpbmUpOwotCi0JLyogY29weSB0aGUgY29tcHJlc3NlZCBpbWFn ZSBwYXJ0IHRvIGl0cyBmaW5hbCBhZGRyZXNzIHRoZSBzZXR1cCBjb2RlIGV4cGVjdHMgaXQKLQkg KiBOb3RlOiBUaGUgcHJvdGVjdGVkIG1vZGUgcGFydCBzdGFydHMgYXQgb2Zmc2V0IChzZXR1cF9z ZWN0cyArIDEpICogNTEyCi0JICovCi0JbWVtY3B5KCh2b2lkKilMSU5VWF9CWklNQUdFX0FERFIs ICgodm9pZCopbGgpICsgcmVhbF9tb2RlX3NpemUsIGltYWdlX3NpemUgLSByZWFsX21vZGVfc2l6 ZSk7Ci0KLQkvKgotCSAqIHN3aXRjaCBiYWNrIHRvIHJlYWwgbW9kZSBub3cgYW5kIHN0YXJ0IHRo ZSByZWFsIG1vZGUgcGFydCBvZiB0aGUKLQkgKiBpbWFnZSBhdCBhZGRyZXNzICIoTElOVVhfT0xE X1JFQUxfTU9ERV9BRERSID4+IDQpICsgMHgyMDoweDAwMDAiCi0JICogd2hpY2ggbWVhbnMgIjB4 OTAyMDoweDAwMCIgLT4gMHg5MDIwMAotCSAqLwotCWJpb3Nfc3RhcnRfbGludXgoTElOVVhfT0xE X1JFQUxfTU9ERV9TRUdNVCk7CS8qIGRvZXMgbm90IHJldHVybiAqLwotCi1vbl9lcnJvcjoKLQlp ZiAobGggIT0gTlVMTCkKLQkJZnJlZShsaCk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLUJBUkVCT1hf Q01EX0hFTFBfU1RBUlQobGludXgxNikKLUJBUkVCT1hfQ01EX0hFTFBfVEVYVCgiTG9hZCBrZXJu ZWwgZnJvbSBGSUxFIGFuZCBib290IG9uIHg4NiBpbiByZWFsLW1vZGUuIikKLUJBUkVCT1hfQ01E X0hFTFBfVEVYVCgiIikKLUJBUkVCT1hfQ01EX0hFTFBfVEVYVCgiT25seSBrZXJuZWwgaW1hZ2Vz IGluIGJ6SW1hZ2UgZm9ybWF0IGFyZSBzdXBwb3J0ZWQgYnkgbm93LiIpCi1CQVJFQk9YX0NNRF9I RUxQX1RFWFQoIiIpCi1CQVJFQk9YX0NNRF9IRUxQX1RFWFQoIkZvciB0aGUgdmlkZW8gbW9kZSBy ZWZlciB0aGUgTGludXgga2VybmVsIGRvY3VtZW50YXRpb24iKQotQkFSRUJPWF9DTURfSEVMUF9U RVhUKCInRG9jdW1lbnRhdGlvbi9mYi92ZXNhZmIudHh0JyBmb3IgY29ycmVjdCBWRVNBIG1vZGUg bnVtYmVycy4gVXNlICdhc2snIikKLUJBUkVCT1hfQ01EX0hFTFBfVEVYVCgiaW5zdGVhZCBvZiBh IG51bWJlciB0byBtYWtlIExpbnV4IGZvciBvcHRpb25zLi4iKQotQkFSRUJPWF9DTURfSEVMUF9U RVhUKCIiKQotQkFSRUJPWF9DTURfSEVMUF9URVhUKCJPcHRpb25zOiIpCi1CQVJFQk9YX0NNRF9I RUxQX09QVCAoIi12IFZFU0FNT0RFIiwgICAic2V0IFZFU0FNT0RFIikKLUJBUkVCT1hfQ01EX0hF TFBfRU5ECi0KLUJBUkVCT1hfQ01EX1NUQVJUKGxpbnV4MTYpCi0JLmNtZAkJPSBkb19saW51eDE2 LAotCUJBUkVCT1hfQ01EX0RFU0MoImJvb3QgYSBsaW51eCBrZXJuZWwgb24geDg2IHZpYSByZWFs LW1vZGUgY29kZSIpCi0JQkFSRUJPWF9DTURfT1BUUygiWy12IFZFU0FNT0RFXSBGSUxFIikKLQlC QVJFQk9YX0NNRF9HUk9VUChDTURfR1JQX0JPT1QpCi0JQkFSRUJPWF9DTURfSEVMUChjbWRfbGlu dXgxNl9oZWxwKQotQkFSRUJPWF9DTURfRU5ECmRpZmYgLS1naXQgYS9jb21tb24vcGFydGl0aW9u cy5jIGIvY29tbW9uL3BhcnRpdGlvbnMuYwppbmRleCAxMGNlNTNhNmExMjUuLjFjMWQwZGE5OWE4 YSAxMDA2NDQKLS0tIGEvY29tbW9uL3BhcnRpdGlvbnMuYworKysgYi9jb21tb24vcGFydGl0aW9u cy5jCkBAIC02LDggKzYsNiBAQAogLyoqCiAgKiBAZmlsZQogICogQGJyaWVmIEdlbmVyaWMgc3Vw cG9ydCBmb3IgcGFydGl0aW9uIHRhYmxlcyBvbiBkaXNrIGxpa2UgbWVkaWEKLSAqCi0gKiBAdG9k byBSZWxpYWJsZSBzaXplIGRldGVjdGlvbiBmb3IgQklPUyBiYXNlZCBkaXNrcyAob24geDg2IG9u bHkpCiAgKi8KICNpbmNsdWRlIDxjb21tb24uaD4KICNpbmNsdWRlIDxtYWxsb2MuaD4KZGlmZiAt LWdpdCBhL2NvbW1vbi9wYXJ0aXRpb25zL2Rvcy5jIGIvY29tbW9uL3BhcnRpdGlvbnMvZG9zLmMK aW5kZXggNDg4YzI5MzZmNzE1Li44ZGYwZDVlYjgxNmEgMTAwNjQ0Ci0tLSBhL2NvbW1vbi9wYXJ0 aXRpb25zL2Rvcy5jCisrKyBiL2NvbW1vbi9wYXJ0aXRpb25zL2Rvcy5jCkBAIC0zNywzMSArMzcs NiBAQCBzdGF0aWMgaW5saW5lIGludCBpc19leHRlbmRlZF9wYXJ0aXRpb24oc3RydWN0IHBhcnRp dGlvbiAqcCkKIAkJcC0+ZG9zX3BhcnRpdGlvbl90eXBlID09IExJTlVYX0VYVEVOREVEX1BBUlRJ VElPTik7CiB9CiAKLS8qKgotICogR3Vlc3MgdGhlIHNpemUgb2YgdGhlIGRpc2ssIGJhc2VkIG9u IHRoZSBwYXJ0aXRpb24gdGFibGUgZW50cmllcwotICogQHBhcmFtIGRldiBkZXZpY2UgdG8gY3Jl YXRlIHBhcnRpdGlvbnMgZm9yCi0gKiBAcGFyYW0gdGFibGUgcGFydGl0aW9uIHRhYmxlCi0gKiBA cmV0dXJuIHNlY3RvciBjb3VudAotICovCi1zdGF0aWMgdWludDY0X3QgZGlza19ndWVzc19zaXpl KHN0cnVjdCBkZXZpY2VfZCAqZGV2LAotCQlzdHJ1Y3QgcGFydGl0aW9uX2VudHJ5ICp0YWJsZSkK LXsKLQl1aW50NjRfdCBzaXplID0gMDsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCA0OyBp KyspIHsKLQkJaWYgKGdldF91bmFsaWduZWRfbGUzMigmdGFibGVbaV0ucGFydGl0aW9uX3N0YXJ0 KSAhPSAwKSB7Ci0JCQl1aW50NjRfdCBwYXJ0X2VuZCA9IGdldF91bmFsaWduZWRfbGUzMigmdGFi bGVbaV0ucGFydGl0aW9uX3N0YXJ0KSArCi0JCQkJZ2V0X3VuYWxpZ25lZF9sZTMyKCZ0YWJsZVtp XS5wYXJ0aXRpb25fc2l6ZSk7Ci0KLQkJCWlmIChzaXplIDwgcGFydF9lbmQpCi0JCQkJc2l6ZSA9 IHBhcnRfZW5kOwotCQl9Ci0JfQotCi0JcmV0dXJuIHNpemU7Ci19Ci0KIHN0YXRpYyB2b2lkICpy ZWFkX21icihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpibGspCiB7CiAJdm9pZCAqYnVmID0gZG1hX2Fs bG9jKFNFQ1RPUl9TSVpFKTsKQEAgLTIxMCwxMCArMTg1LDYgQEAgc3RhdGljIHZvaWQgZG9zX3Bh cnRpdGlvbih2b2lkICpidWYsIHN0cnVjdCBibG9ja19kZXZpY2UgKmJsaywKIAogCXRhYmxlID0g KHN0cnVjdCBwYXJ0aXRpb25fZW50cnkgKikmYnVmZmVyWzQ0Nl07CiAKLQkvKiB2YWxpZCBmb3Ig eDg2IEJJT1MgYmFzZWQgZGlza3Mgb25seSAqLwotCWlmIChJU19FTkFCTEVEKENPTkZJR19ESVNL X0JJT1MpICYmIGJsay0+bnVtX2Jsb2NrcyA9PSAwKQotCQlibGstPm51bV9ibG9ja3MgPSBkaXNr X2d1ZXNzX3NpemUoYmxrLT5kZXYsIHRhYmxlKTsKLQogCWZvciAoaSA9IDA7IGkgPCA0OyBpKysp IHsKIAkJcGVudHJ5LmZpcnN0X3NlYyA9IGdldF91bmFsaWduZWRfbGUzMigmdGFibGVbaV0ucGFy dGl0aW9uX3N0YXJ0KTsKIAkJcGVudHJ5LnNpemUgPSBnZXRfdW5hbGlnbmVkX2xlMzIoJnRhYmxl W2ldLnBhcnRpdGlvbl9zaXplKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL0tjb25maWcgYi9k cml2ZXJzL2F0YS9LY29uZmlnCmluZGV4IGMwZjBhM2RiZTNmMy4uNTBkM2JhN2YzYTlmIDEwMDY0 NAotLS0gYS9kcml2ZXJzL2F0YS9LY29uZmlnCisrKyBiL2RyaXZlcnMvYXRhL0tjb25maWcKQEAg LTIwLDE1ICsyMCw2IEBAIHNvdXJjZSAiZHJpdmVycy9ibG9jay9LY29uZmlnIgogCiBjb21tZW50 ICJkcml2ZSB0eXBlcyIKIAotY29uZmlnIERJU0tfQklPUwotCWJvb2wgIkJJT1MgYmFzZWQiCi0J ZGVwZW5kcyBvbiBYODZfQklPU19CUklOR1VQCi0JaGVscAotCSAgR2FpbiBkaXNrIGRyaXZlIGFj Y2VzcyB2aWEgaW50MTMgY2FsbHMgdG8gdGhlIHN0YW5kYXJkIFBDLUJJT1MuCi0JICBUaGUgYWR2 YW50YWdlIG9mIHRoaXMgZHJpdmVyIGlzLCBpdCBzdGlsbCB1c2VzIHVzZXIncyBkZWZpbmVkIGJv b3QKLQkgIG1lZGlhIHRvIHdvcmsgb24uIERpc2FkdmFudGFnZSBpczogRHVlIHRvIGl0cyAxNiBi aXQgbmF0dXJlIGl0IGlzCi0JICBzbG93LgotCiBjb25maWcgRElTS19BVEEKIAlib29sICJBVEEg dHlwZSBkcml2ZXMiCiAJaGVscApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvTWFrZWZpbGUgYi9k cml2ZXJzL2F0YS9NYWtlZmlsZQppbmRleCA2YjgzYWUyZWY1NDIuLmQzZjVhMGI1N2VlMSAxMDA2 NDQKLS0tIGEvZHJpdmVycy9hdGEvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9hdGEvTWFrZWZpbGUK QEAgLTEsNiArMSw1IEBACiAjIGRyaXZlIHR5cGVzCiAKLW9iai0kKENPTkZJR19ESVNLX0JJT1Mp ICs9IGRpc2tfYmlvc19kcml2ZS5vCiBvYmotJChDT05GSUdfRElTS19JREVfU0ZGKSArPSBpZGUt c2ZmLm8KIG9iai0kKENPTkZJR19ESVNLX0FUQSkgKz0gZGlza19hdGFfZHJpdmUubwogb2JqLSQo Q09ORklHX0RJU0tfQUhDSSkgKz0gYWhjaS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9kaXNr X2Jpb3NfZHJpdmUuYyBiL2RyaXZlcnMvYXRhL2Rpc2tfYmlvc19kcml2ZS5jCmRlbGV0ZWQgZmls ZSBtb2RlIDEwMDY0NAppbmRleCA4ZjUyMmVlYmE2NWIuLjAwMDAwMDAwMDAwMAotLS0gYS9kcml2 ZXJzL2F0YS9kaXNrX2Jpb3NfZHJpdmUuYworKysgL2Rldi9udWxsCkBAIC0xLDMwMiArMCwwIEBA Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5Li4uMjAxMSBKdWVyZ2VuIEJlaXNlcnQsIFBlbmd1 dHJvbml4Ci0gKgotICogTW9zdGx5IHN0b2xlbiBmcm9tIHRoZSBHUlVCMiBwcm9qZWN0Ci0gKiAg Q29weXJpZ2h0IChDKSAxOTk5LDIwMDAsMjAwMSwyMDAyLDIwMDMsMjAwNCwyMDA1LDIwMDYsMjAw NywyMDA4ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSAqCi0gKiBUaGlzIHByb2dy YW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBt b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl ciB2ZXJzaW9uIDIgb2YKLSAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs YXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICoKLSAqLwotCi0v KioKLSAqIEBmaWxlCi0gKiBAYnJpZWYgTWVkaWEgY29tbXVuaWNhdGlvbiBsYXllciB0aHJvdWdo IHRoZSBzdGFuZGFyZCAxNiBiaXQgUEMtQklPUwotICoKLSAqIFRoaXMgY29tbXVuaWNhdGlvbiBk cml2ZXIgZG9lcyBhbGwgYWNjZXNzZXMgdG8gdGhlIGJvb3QgbWVkaXVtIHZpYSAxNiBiaXQKLSAq IHJlYWwgbW9kZSBjYWxscyBpbnRvIHRoZSBzdGFuZGFyZCBCSU9TLiBEdWUgdG8gdGhpcyBtZXRo b2QsIGl0cyBwb3NzaWJsZQotICogdG8gdXNlIGFsbCB0aGUgbWVkaWFzIHRvIGJvb3QgZnJvbSB0 aGF0IGFyZSBzdXBwb3J0ZWQgYnkgdGhlIEJJT1MuIFRoaXMKLSAqIGFsc28gaW5jbHVkZXMgZW11 bGF0ZWQgb25seSBtZWRpYXMuCi0gKgotICogVG8gYmUgYWJsZSB0byBjYWxsIHRoZSByZWFsIG1v ZGUgQklPUywgdGhpcyBkcml2ZXIgbXVzdCBzd2l0Y2ggYmFjayB0bwotICogcmVhbCBtb2RlIGZv ciBlYWNoIGFjY2Vzcy4gVGhpcyB3aWxsIHNsb3cgZG93biB0aGUgYWNjZXNzIGEgbGl0dGxlIGJp dCwgYnV0Ci0gKiB3ZSBhcmUgYSBib290IGxvYWRlciBoZXJlLCBub3QgYW4gb3BlcmF0aW5nIHN5 c3RlbS4uLgotICoKLSAqIE5vdGU6IFdlIG5lZWQgc2NyYXRjaCBtZW1vcnkgZm9yIHRoZSBCSU9T IGNvbW11bmljYXRpb24sIGJlY2F1c2UgdGhlIEJJT1MKLSAqIGNhbiBvbmx5IGhhbmRsZSBtZW1v cnkgYmVsb3cgMHhBMDAwMC4gU28gd2UgbXVzdCBjb3B5IGFsbCBkYXRhIGJldHdlZW4KLSAqIHRo ZSBmbGF0IG1vZGUgYnVmZmVycyBhbmQgcmVhbG1vZGUgYnVmZmVycy4KLSAqCi0gKiBOb3RlOiBU aGlzIGRyaXZlciBtYWtlcyBubyBzZW5zZSBvbiBvdGhlciBhcmNoaXRlY3R1cmVzIHRoYW4geDg2 LgotICoKLSAqIE5vdGU6IFRoaXMgZHJpdmVyIGRvZXMgb25seSBzdXBwb3J0IExCQSBhZGRyZXNz aW5nLiBDdXJyZW50bHkgbm8gQ0hTIQotICovCi0KLSNpbmNsdWRlIDxjb21tb24uaD4KLSNpbmNs dWRlIDxpbml0Lmg+Ci0jaW5jbHVkZSA8YXNtL3N5c2xpYi5oPgotI2luY2x1ZGUgPGVycm5vLmg+ Ci0jaW5jbHVkZSA8YmxvY2suaD4KLSNpbmNsdWRlIDxkaXNrcy5oPgotI2luY2x1ZGUgPG1hbGxv Yy5oPgotCi0vKioKLSAqIFNlY3RvciBjb3VudCBoYW5kbGVkIGluIG9uZSBjb3VudAotICoKLSAq IEB0b2RvIDEyNyBhcmUgYWx3YXlzIHBvc3NpYmxlLCBzb21lIEJJT1MgbWFudWZhY3R1cmVyIHN1 cHBvcnRzIHVwIHRvIDI1NS4KLSAqIElzIGl0J3Mgd29ydGggdG8gZGV0ZWN0IFBob2VuaWMncyBy ZXN0cmljdGlvbj8KLSAqLwotI2RlZmluZSBTRUNUT1JTX0FUX09OQ0UgNjQKLQotLyoqIENvbW1h bmQgdG8gcmVhZCBzZWN0b3JzIGZyb20gbWVkaWEgKi8KLSNkZWZpbmUgQklPU19SRUFEX0NNRCAw Ci0KLS8qKiBDb21tYW5kIHRvIHdyaXRlIHNlY3RvcnMgdG8gbWVkaWEgKi8KLSNkZWZpbmUgQklP U19XUlRfQ01EIDEKLQotLyoqCi0gKiAiRGlzayBBZGRyZXNzIFBhY2tldCBTdHJ1Y3R1cmUiIHRv IGJlIHVzZWQgd2hlbiBjYWxsaW5nCi0gKiBCSU9TJ3MgaW50MTMsIGZ1bmN0aW9uIDB4NDIvMHg0 MwotICovCi1zdHJ1Y3QgREFQUwotewotCXVpbnQ4X3Qgc2l6ZTsJCS8qKjwgYWx3YXlzICcxNicg Ki8KLQl1aW50OF90IHJlczE7CQkvKio8IGFsd2F5cyAnMCcgKi8KLQlpbnQ4X3QgY291bnQ7CQkv Kio8IG51bWJlciBvZiBzZWN0b3JzIDAuLi4xMjcgKi8KLQl1aW50OF90IHJlczI7CQkvKio8IGFs d2F5cyAnMCcgKi8KLQl1aW50MTZfdCBvZmZzZXQ7CS8qKjwgYnVmZmVyIGFkZHJlc3M6IG9mZnNl dCAqLwotCXVpbnQxNl90IHNlZ21lbnQ7CS8qKjwgYnVmZmVyIGFkZHJlc3M6IHNlZ21lbnQgKi8K LQl1aW50NjRfdCBsYmE7CQkvKio8IExCQSBvZiB0aGUgc3RhcnQgc2VjdG9yICovCi19IF9fYXR0 cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoqCi0gKiBDb2xsZWN0aW9uIG9mIGRhdGEgd2UgbmVl ZCB0byBrbm93IGFib3V0IHRoZSBjb25uZWN0ZWQgZHJpdmUKLSAqLwotc3RydWN0IG1lZGlhX2Fj Y2VzcyB7Ci0Jc3RydWN0IGJsb2NrX2RldmljZSBibGs7IC8qKjwgdGhlIG1haW4gZGV2aWNlICov Ci0JaW50IGRyaXZlX25vOwkvKio8IGRyaXZlIG51bWJlciB1c2VkIGJ5IHRoZSBCSU9TICovCi0J aW50IGlzX2Nkcm9tOwkvKio8IGRyaXZlIGlzIGEgQ0RST00gZS5nLiBubyB3cml0ZSBzdXBwb3J0 ICovCi19OwotCi0jZGVmaW5lIHRvX21lZGlhX2FjY2Vzcyh4KSBjb250YWluZXJfb2YoKHgpLCBz dHJ1Y3QgbWVkaWFfYWNjZXNzLCBibGspCi0KLS8qKgotICogU2NyYXRjaCBtZW1vcnkgZm9yIEJJ T1MgY29tbXVuaWNhdGlvbiB0byBoYW5kbGUgZGF0YSBpbiBjaHVua3Mgb2YgMzIga2lCCi0gKgot ICogTm90ZTogVGhpcyB2YXJpYWJsZSBpcyBsb2NhdGVkIGluIHRoZSAuYnNzIHNlZ21lbnQsIGFz c3VtaW5nIGl0IGlzIGxvY2F0ZWQKLSAqIGJlbG93IDB4QTAwMDAuIElmIG5vdCwgdGhlIEJJT1Mg aXMgbm90IGFibGUgdG8gcmVhZCBvciBzdG9yZSBhbnkgZGF0YQotICogZnJvbS90byBpdC4gVGhl IHZhcmlhYmxlIG11c3QgYWxzbyBhbGlnbmVkIHRvIGEgMTYgYnl0ZSBib3VuZGFyeSB0byBlYXNp ZnkKLSAqIGxpbmVhciB0byBzZWdtZW50Om9mZnNldCBhZGRyZXNzIGNvbnZlcnNpb24uCi0gKi8K LXN0YXRpYyB1aW50OF90IHNjcmF0Y2hfYnVmZmVyW1NFQ1RPUlNfQVRfT05DRSAqIFNFQ1RPUl9T SVpFXSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDE2KSkpOwotCi0vKioKLSAqIENvbW11bmljYXRp b24gYnVmZmVyIGZvciB0aGUgMTYgYml0IGludDEzIEJJT1MgY2FsbAotICoKLSAqIE5vdGU6IFRo aXMgdmFyaWFibGUgaXMgbG9jYXRlZCBpbiB0aGUgLmJzcyBzZWdtZW50LCBhc3N1bWluZyBpdCBp cyBsb2NhdGVkCi0gKiBiZWxvdyAweEEwMDAwLiBJZiBub3QsIHRoZSBCSU9TIGlzIG5vdCBhYmxl IHRvIHJlYWQgb3Igc3RvcmUgYW55IGRhdGEKLSAqIGZyb20vdG8gaXQuIFRoZSB2YXJpYWJsZSBt dXN0IGFsc28gYWxpZ25lZCB0byBhIDE2IGJ5dGUgYm91bmRhcnkgdG8gZWFzaWZ5Ci0gKiBsaW5l YXIgdG8gc2VnbWVudDpvZmZzZXQgY29udmVyc2lvbi4KLSAqLwotc3RhdGljIHN0cnVjdCBEQVBT IGJpb3NfZGFwcyBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDE2KSkpOwotCi0vKioKLSAqIEBwYXJh bSBtZWRpYSBvdXIgZGF0YSB3ZSBuZWVkIHRvIGRvIHRoZSBhY2Nlc3MKLSAqIEBwYXJhbSBjbWQg Q29tbWFuZCB0byBmb3J3YXJkIHRvIHRoZSBCSU9TCi0gKiBAcGFyYW0gc2VjdG9yX3N0YXJ0IExC QSBvZiB0aGUgc3RhcnQgc2VjdG9yCi0gKiBAcGFyYW0gc2VjdG9yX2NvdW50IFNlY3RvciBjb3Vu dAotICogQHBhcmFtIGJ1ZmZlciBCdWZmZXIgdG8gcmVhZCBmcm9tIG9yIHdyaXRlIHRvIChpbiB0 aGUgbG93IG1lbW9yeSBhcmVhKQotICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIGFueXRoaW5nIGVs c2Ugb24gZmFpbHVyZQotICovCi1zdGF0aWMgaW50IGJpb3NkaXNrX2Jpb3NfY2FsbChzdHJ1Y3Qg bWVkaWFfYWNjZXNzICptZWRpYSwgaW50IGNtZCwgc2VjdG9yX3Qgc2VjdG9yX3N0YXJ0LCBibGtj bnRfdCBzZWN0b3JfY291bnQsIHZvaWQgKmJ1ZmZlcikKLXsKLQlpbnQgcmM7Ci0KLQkvKiBwcmVw YXJlIHRoZSBEQVBTIGZvciB0aGUgaW50MTMgY2FsbCAqLwotCWJpb3NfZGFwcy5zaXplID0gc2l6 ZW9mKHN0cnVjdCBEQVBTKTsKLQliaW9zX2RhcHMucmVzMSA9IDA7Ci0JYmlvc19kYXBzLmNvdW50 ID0gc2VjdG9yX2NvdW50OwkvKiBhbHdheXMgbGVzcyB0aGFuIDEyOCEgKi8KLQliaW9zX2RhcHMu cmVzMiA9IDA7Ci0JYmlvc19kYXBzLnNlZ21lbnQgPSAodW5zaWduZWQgbG9uZylidWZmZXIgPj4g NDsKLQliaW9zX2RhcHMub2Zmc2V0ID0gKHVuc2lnbmVkIGxvbmcpYnVmZmVyIC0gKHVuc2lnbmVk IGxvbmcpKGJpb3NfZGFwcy5zZWdtZW50IDw8IDQpOwotCWJpb3NfZGFwcy5sYmEgPSBzZWN0b3Jf c3RhcnQ7Ci0KLQlpZiAoY21kID09IEJJT1NfUkVBRF9DTUQpCi0JCXJjID0gYmlvc19kaXNrX3J3 X2ludDEzX2V4dGVuc2lvbnMoMHg0MiwgbWVkaWEtPmRyaXZlX25vLCAmYmlvc19kYXBzKTsKLQll bHNlIGlmIChjbWQgPT0gQklPU19XUlRfQ01EKQotCQlyYyA9IGJpb3NfZGlza19yd19pbnQxM19l eHRlbnNpb25zKDB4NDMsIG1lZGlhLT5kcml2ZV9ubywgJmJpb3NfZGFwcyk7Ci0JZWxzZQotCQly ZXR1cm4gLTE7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLS8qKgotICogUmVhZCBhIGNodW5rIG9mIHNl Y3RvcnMgZnJvbSBtZWRpYQotICogQHBhcmFtIGJsayBBbGwgaW5mbyBhYm91dCB0aGUgYmxvY2sg ZGV2aWNlIHdlIG5lZWQKLSAqIEBwYXJhbSBidWZmZXIgQnVmZmVyIHRvIHJlYWQgaW50bwotICog QHBhcmFtIGJsb2NrIFNlY3RvcidzIExCQSBudW1iZXIgdG8gc3RhcnQgcmVhZCBmcm9tCi0gKiBA cGFyYW0gbnVtX2Jsb2NrcyBTZWN0b3IgY291bnQgdG8gcmVhZAotICogQHJldHVybiAwIG9uIHN1 Y2Nlc3MsIGFueXRoaW5nIGVsc2Ugb24gZmFpbHVyZQotICoKLSAqIFRoaXMgcm91dGluZSBleHBl Y3RzIHRoZSBidWZmZXIgaGFzIHRoZSBjb3JyZWN0IHNpemUgdG8gc3RvcmUgYWxsIGRhdGEhCi0g KgotICogQG5vdGUgRHVlIHRvICdibG9jaycgaXMgb2YgdHlwZSAnaW50JyBvbmx5IHNtYWxsIGRp c2tzIGNhbiBiZSBoYW5kbGVkIQotICovCi1zdGF0aWMgaW50IGJpb3NkaXNrX3JlYWQoc3RydWN0 IGJsb2NrX2RldmljZSAqYmxrLCB2b2lkICpidWZmZXIsIHNlY3Rvcl90IGJsb2NrLAotCQkJCWJs a2NudF90IG51bV9ibG9ja3MpCi17Ci0JaW50IHJjOwotCXNlY3Rvcl90IHNlY3Rvcl9zdGFydCA9 IGJsb2NrOwotCWJsa2NudF90IHNlY3Rvcl9jb3VudCA9IG51bV9ibG9ja3M7Ci0Jc3RydWN0IG1l ZGlhX2FjY2VzcyAqbWVkaWEgPSB0b19tZWRpYV9hY2Nlc3MoYmxrKTsKLQotCXdoaWxlIChzZWN0 b3JfY291bnQgPj0gU0VDVE9SU19BVF9PTkNFKSB7Ci0JCXJjID0gYmlvc2Rpc2tfYmlvc19jYWxs KG1lZGlhLCBCSU9TX1JFQURfQ01ELCBzZWN0b3Jfc3RhcnQsIFNFQ1RPUlNfQVRfT05DRSwgc2Ny YXRjaF9idWZmZXIpOwotCQlpZiAocmMgIT0gMCkKLQkJCXJldHVybiByYzsKLQkJX19idWlsdGlu X21lbWNweShidWZmZXIsIHNjcmF0Y2hfYnVmZmVyLCBzaXplb2Yoc2NyYXRjaF9idWZmZXIpKTsK LQkJYnVmZmVyICs9IHNpemVvZihzY3JhdGNoX2J1ZmZlcik7Ci0JCXNlY3Rvcl9zdGFydCArPSBT RUNUT1JTX0FUX09OQ0U7Ci0JCXNlY3Rvcl9jb3VudCAtPSBTRUNUT1JTX0FUX09OQ0U7Ci0JfTsK LQotCS8qIEFyZSBzZWN0b3JzIHN0aWxsIHJlbWFpbmluZz8gKi8KLQlpZiAoc2VjdG9yX2NvdW50 KSB7Ci0JCXJjID0gYmlvc2Rpc2tfYmlvc19jYWxsKG1lZGlhLCBCSU9TX1JFQURfQ01ELCBzZWN0 b3Jfc3RhcnQsIHNlY3Rvcl9jb3VudCwgc2NyYXRjaF9idWZmZXIpOwotCQlfX2J1aWx0aW5fbWVt Y3B5KGJ1ZmZlciwgc2NyYXRjaF9idWZmZXIsIHNlY3Rvcl9jb3VudCAqIFNFQ1RPUl9TSVpFKTsK LQl9IGVsc2UKLQkJcmMgPSAwOwotCi0JcmV0dXJuIHJjOwotfQotCi0vKioKLSAqIFdyaXRlIGEg Y2h1bmsgb2Ygc2VjdG9ycyB0byBtZWRpYQotICogQHBhcmFtIGJsayBBbGwgaW5mbyBhYm91dCB0 aGUgYmxvY2sgZGV2aWNlIHdlIG5lZWQKLSAqIEBwYXJhbSBidWZmZXIgQnVmZmVyIHRvIHdyaXRl IGZyb20KLSAqIEBwYXJhbSBibG9jayBTZWN0b3IncyBMQkEgbnVtYmVyIHRvIHN0YXJ0IHdyaXRl IHRvCi0gKiBAcGFyYW0gbnVtX2Jsb2NrcyBTZWN0b3IgY291bnQgdG8gd3JpdGUKLSAqIEByZXR1 cm4gMCBvbiBzdWNjZXNzLCBhbnl0aGluZyBlbHNlIG9uIGZhaWx1cmUKLSAqCi0gKiBUaGlzIHJv dXRpbmUgZXhwZWN0cyB0aGUgYnVmZmVyIGhhcyB0aGUgY29ycmVjdCBzaXplIHRvIHJlYWQgYWxs IGRhdGEhCi0gKgotICogQG5vdGUgRHVlIHRvICdibG9jaycgaXMgb2YgdHlwZSAnaW50JyBvbmx5 IHNtYWxsIGRpc2tzIGNhbiBiZSBoYW5kbGVkIQotICovCi1zdGF0aWMgaW50IF9fbWF5YmVfdW51 c2VkIGJpb3NkaXNrX3dyaXRlKHN0cnVjdCBibG9ja19kZXZpY2UgKmJsaywKLQkJCQljb25zdCB2 b2lkICpidWZmZXIsIHNlY3Rvcl90IGJsb2NrLCBibGtjbnRfdCBudW1fYmxvY2tzKQotewotCWlu dCByYzsKLQlzZWN0b3JfdCBzZWN0b3Jfc3RhcnQgPSBibG9jazsKLQlibGtjbnRfdCBzZWN0b3Jf Y291bnQgPSBudW1fYmxvY2tzOwotCXN0cnVjdCBtZWRpYV9hY2Nlc3MgKm1lZGlhID0gdG9fbWVk aWFfYWNjZXNzKGJsayk7Ci0KLQl3aGlsZSAoc2VjdG9yX2NvdW50ID49IFNFQ1RPUlNfQVRfT05D RSkgewotCQlfX2J1aWx0aW5fbWVtY3B5KHNjcmF0Y2hfYnVmZmVyLCBidWZmZXIsIHNpemVvZihz Y3JhdGNoX2J1ZmZlcikpOwotCQlyYyA9IGJpb3NkaXNrX2Jpb3NfY2FsbChtZWRpYSwgQklPU19X UlRfQ01ELCBzZWN0b3Jfc3RhcnQsIFNFQ1RPUlNfQVRfT05DRSwgc2NyYXRjaF9idWZmZXIpOwot CQlpZiAocmMgIT0gMCkKLQkJCXJldHVybiByYzsKLQkJYnVmZmVyICs9IHNpemVvZihzY3JhdGNo X2J1ZmZlcik7Ci0JCXNlY3Rvcl9zdGFydCArPSBTRUNUT1JTX0FUX09OQ0U7Ci0JCXNlY3Rvcl9j b3VudCAtPSBTRUNUT1JTX0FUX09OQ0U7Ci0JfTsKLQotCS8qIEFyZSBzZWN0b3JzIHN0aWxsIHJl bWFpbmluZz8gKi8KLQlpZiAoc2VjdG9yX2NvdW50KSB7Ci0JCV9fYnVpbHRpbl9tZW1jcHkoc2Ny YXRjaF9idWZmZXIsIGJ1ZmZlciwgc2VjdG9yX2NvdW50ICogU0VDVE9SX1NJWkUpOwotCQlyYyA9 IGJpb3NkaXNrX2Jpb3NfY2FsbChtZWRpYSwgQklPU19XUlRfQ01ELCBzZWN0b3Jfc3RhcnQsIHNl Y3Rvcl9jb3VudCwgc2NyYXRjaF9idWZmZXIpOwotCX0gZWxzZQotCQlyYyA9IDA7Ci0KLQlyZXR1 cm4gcmM7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wcyBiaW9zX2F0YSA9IHsK LQkucmVhZCA9IGJpb3NkaXNrX3JlYWQsCi0jaWZkZWYgQ09ORklHX0JMT0NLX1dSSVRFCi0JLndy aXRlID0gYmlvc2Rpc2tfd3JpdGUsCi0jZW5kaWYKLX07Ci0KLS8qKgotICogUHJvYmUgZm9yIGNv bm5lY3RlZCBkcml2ZXMgYW5kIHJlZ2lzdGVyIHRoZW0KLSAqCi0gKiBEZXRlY3RpbmcgaWYgYSBk cml2ZSBpcyBwcmVzZW50IGlzIGRvbmUgYnkgc2ltcGx5IHJlYWRpbmcgaXRzIE1CUi4KLSAqCi0g KiBGSVhNRTogUmVsYXRpb24gYmV0d2VlbiBCSU9TIGRpc2sgbnVtYmVyaW5nIHNjaGVtZSBhbmQg b3VyIHJlcHJlc2VudGF0aW9uCi0gKiBoZXJlIGluIGJhcmVib3ggKGFuZCBsYXRlciBvbiBpbiB0 aGUgbGludXgga2VybmVsKQotICovCi1zdGF0aWMgaW50IGJpb3NkaXNrX3Byb2JlKHN0cnVjdCBk ZXZpY2VfZCAqZGV2KQotewotCWludCBkcml2ZSwgcmM7Ci0Jc3RydWN0IG1lZGlhX2FjY2VzcyBt ZWRpYSwgKm07Ci0KLQlmb3IgKGRyaXZlID0gMHg4MDsgZHJpdmUgPCAweDkwOyBkcml2ZSsrKSB7 Ci0JCW1lZGlhLmRyaXZlX25vID0gZHJpdmU7Ci0JCW1lZGlhLmlzX2Nkcm9tID0gMDsJLyogZG9u J3Qga25vdyB5ZXQgKi8KLQkJcmMgPSBiaW9zZGlza19iaW9zX2NhbGwoJm1lZGlhLCBCSU9TX1JF QURfQ01ELCAwLCAxLCBzY3JhdGNoX2J1ZmZlcik7Ci0JCWlmIChyYyAhPSAwKQotCQkJY29udGlu dWU7Ci0KLQkJcHJpbnRmKCJCSU9TZHJpdmUgJWQgc2VlbXMgdmFsaWQuIFJlZ2lzdGVyaW5nLi4u XG4iLCBtZWRpYS5kcml2ZV9ubyk7Ci0KLQkJbSA9IHh6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtZWRp YV9hY2Nlc3MpKTsKLQotCQltLT5ibGsuZGV2ID0gZGV2OwotCQltLT5ibGsub3BzID0gJmJpb3Nf YXRhOwotCQkvKgotCQkgKiBrZWVwIHRoZSAnYmxrLm51bV9ibG9ja3MnIG1lbWJlciAwLCBhcyB3 ZSBkb24ndCBrbm93Ci0JCSAqIHRoZSBzaXplIG9mIHRoaXMgZGlzayB5ZXQhCi0JCSAqLwotCQly YyA9IGNkZXZfZmluZF9mcmVlX2luZGV4KCJkaXNrIik7Ci0JCWlmIChyYyA8IDApCi0JCQlwcl9l cnIoIkNhbm5vdCBmaW5kIGEgZnJlZSBudW1iZXIgZm9yIHRoZSBkaXNrIG5vZGVcbiIpOwotCQlt LT5ibGsuY2Rldi5uYW1lID0gYmFzcHJpbnRmKCJkaXNrJWQiLCByYyk7Ci0JCW0tPmJsay5ibG9j a2JpdHMgPSBTRUNUT1JfU0hJRlQ7Ci0KLQkJcmMgPSBibG9ja2RldmljZV9yZWdpc3RlcigmbS0+ YmxrKTsKLQkJaWYgKHJjICE9IDApIHsKLQkJCWRldl9lcnIoZGV2LCAiQ2Fubm90IHJlZ2lzdGVy IEJJT1Nkcml2ZSAlZFxuIiwKLQkJCQkJCW1lZGlhLmRyaXZlX25vKTsKLQkJCWZyZWUobSk7Ci0J CQlyZXR1cm4gcmM7Ci0JCX0KLQotCQkvKiBjcmVhdGUgcGFydGl0aW9ucyBvbiBkZW1hbmQgKi8K LQkJcmMgPSBwYXJzZV9wYXJ0aXRpb25fdGFibGUoJm0tPmJsayk7Ci0JCWlmIChyYyAhPSAwKQot CQkJZGV2X3dhcm4oZGV2LCAiTm8gcGFydGl0aW9uIHRhYmxlIGZvdW5kXG4iKTsKLQl9Ci0KLQly ZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBkcml2ZXJfZCBiaW9zZGlza19kcml2ZXIgPSB7 Ci0gICAgICAgIC5uYW1lICAgPSAiYmlvc2RyaXZlIiwKLSAgICAgICAgLnByb2JlICA9IGJpb3Nk aXNrX3Byb2JlLAotfTsKLQotc3RhdGljIGludCBiaW9zZGlza19pbml0KHZvaWQpCi17Ci0JLyog c2FuaXR5ICovCi0JaWYgKHNjcmF0Y2hfYnVmZmVyID4gKHVpbnQ4X3QqKTB4OUZGRkYpIHsKLQkJ cHJpbnRmKCJCSU9TIGRyaXZlcjogU2NyYXRjaCBtZW1vcnkgbm90IGluIHJlYWwgbW9kZSBhcmVh LiBDYW5ub3QgY29udGludWUhXG4iKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCWlmICgmYmlvc19k YXBzID4gKHN0cnVjdCBEQVBTKikweDlGRkZGKSB7Ci0JCXByaW50ZigiQklPUyBkcml2ZXI6IERB UFMgbWVtb3J5IG5vdCBpbiByZWFsIG1vZGUgYXJlYS4gQ2Fubm90IGNvbnRpbnVlIVxuIik7Ci0J CXJldHVybiAtRUlPOwotCX0KLQotCXBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYmlvc2Rpc2tf ZHJpdmVyKTsKLQlyZXR1cm4gMDsKLX0KLQotZGV2aWNlX2luaXRjYWxsKGJpb3NkaXNrX2luaXQp OwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9NYWtlZmlsZSBiL3NjcmlwdHMvTWFrZWZpbGUKaW5kZXgg NzQ0ZjRkZDBlN2U2Li45YzUzMDllZTg4ZTkgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvTWFrZWZpbGUK KysrIGIvc2NyaXB0cy9NYWtlZmlsZQpAQCAtNDIsNyArNDIsNiBAQCB1c2VyY2NmbGFncyArPSAt SSAkKHNyY3RyZWUpLyQoc3JjKS9pbmNsdWRlCiAKIHN1YmRpci15CQkJKz0gbW9kCiBzdWJkaXIt eQkJCSs9IGlteAotc3ViZGlyLSQoQ09ORklHX1g4NikJCSs9IHNldHVwbWJyCiBzdWJkaXItJChD T05GSUdfRFRDKQkJKz0gZHRjCiBzdWJkaXItJChDT05GSUdfQVJDSF9URUdSQSkJKz0gdGVncmEK IApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9zZXR1cG1ici8uZ2l0aWdub3JlIGIvc2NyaXB0cy9zZXR1 cG1ici8uZ2l0aWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNzMwMWY5MTEx NjguLjAwMDAwMDAwMDAwMAotLS0gYS9zY3JpcHRzL3NldHVwbWJyLy5naXRpZ25vcmUKKysrIC9k ZXYvbnVsbApAQCAtMSArMCwwIEBACi1zZXR1cG1icgpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9zZXR1 cG1ici9NYWtlZmlsZSBiL3NjcmlwdHMvc2V0dXBtYnIvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDZlMzNkMTUzNjI1OC4uMDAwMDAwMDAwMDAwCi0tLSBhL3NjcmlwdHMv c2V0dXBtYnIvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLUhPU1RfRVhU UkFDRkxBR1M9LUkkKHNyY3RyZWUpCi0KLWhvc3Rwcm9ncy1hbHdheXMteSArPSBzZXR1cG1icgpk aWZmIC0tZ2l0IGEvc2NyaXB0cy9zZXR1cG1ici9hcmNoLmggYi9zY3JpcHRzL3NldHVwbWJyL2Fy Y2guaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTcyMGRmZTk1ZWY1Li4wMDAwMDAw MDAwMDAKLS0tIGEvc2NyaXB0cy9zZXR1cG1ici9hcmNoLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1 NSArMCwwIEBACi0KLS8qIHdlIG5lZWQgdGhlIG9uZSBmcm9tIHRoZSBob3N0ICovCi0jaW5jbHVk ZSA8ZW5kaWFuLmg+Ci0jaW5jbHVkZSA8c3RkaW50Lmg+Ci0KLS8qIEJ5dGUtb3JkZXJzLiAgKi8K LSNkZWZpbmUgc3dhcDE2KHgpCVwKLSh7IFwKLSAgIHVpbnQxNl90IF94ID0gKHgpOyBcCi0gICAo dWludDE2X3QpICgoX3ggPDwgOCkgfCAoX3ggPj4gOCkpOyBcCi19KQotCi0jZGVmaW5lIHN3YXAz Mih4KQlcCi0oeyBcCi0gICB1aW50MzJfdCBfeCA9ICh4KTsgXAotICAgKHVpbnQzMl90KSAoKF94 IDw8IDI0KSBcCi0gICAgICAgICAgICAgICAgICAgIHwgKChfeCAmICh1aW50MzJfdCkgMHhGRjAw VUwpIDw8IDgpIFwKLSAgICAgICAgICAgICAgICAgICAgfCAoKF94ICYgKHVpbnQzMl90KSAweEZG MDAwMFVMKSA+PiA4KSBcCi0gICAgICAgICAgICAgICAgICAgIHwgKF94ID4+IDI0KSk7IFwKLX0p Ci0KLSNkZWZpbmUgc3dhcDY0KHgpCVwKLSh7IFwKLSAgIHVpbnQ2NF90IF94ID0gKHgpOyBcCi0g ICAodWludDY0X3QpICgoX3ggPDwgNTYpIFwKLSAgICAgICAgICAgICAgICAgICAgfCAoKF94ICYg KHVpbnQ2NF90KSAweEZGMDBVTEwpIDw8IDQwKSBcCi0gICAgICAgICAgICAgICAgICAgIHwgKChf eCAmICh1aW50NjRfdCkgMHhGRjAwMDBVTEwpIDw8IDI0KSBcCi0gICAgICAgICAgICAgICAgICAg IHwgKChfeCAmICh1aW50NjRfdCkgMHhGRjAwMDAwMFVMTCkgPDwgOCkgXAotICAgICAgICAgICAg ICAgICAgICB8ICgoX3ggJiAodWludDY0X3QpIDB4RkYwMDAwMDAwMFVMTCkgPj4gOCkgXAotICAg ICAgICAgICAgICAgICAgICB8ICgoX3ggJiAodWludDY0X3QpIDB4RkYwMDAwMDAwMDAwVUxMKSA+ PiAyNCkgXAotICAgICAgICAgICAgICAgICAgICB8ICgoX3ggJiAodWludDY0X3QpIDB4RkYwMDAw MDAwMDAwMDBVTEwpID4+IDQwKSBcCi0gICAgICAgICAgICAgICAgICAgIHwgKF94ID4+IDU2KSk7 IFwKLX0pCi0KLSNpZiBfX0JZVEVfT1JERVIgPT0gX19CSUdfRU5ESUFOCi0KLS8qIE91ciB0YXJn ZXQgaXMgYSBpYTMyIG1hY2hpbmUsIGFsd2F5cyBsaXR0bGUgZW5kaWFuICovCi0KLSMgZGVmaW5l IGhvc3QydGFyZ2V0XzE2KHgpCXN3YXAxNih4KQotIyBkZWZpbmUgaG9zdDJ0YXJnZXRfMzIoeCkJ c3dhcDMyKHgpCi0jIGRlZmluZSBob3N0MnRhcmdldF82NCh4KQlzd2FwNjQoeCkKLSMgZGVmaW5l IHRhcmdldDJob3N0XzE2KHgpCXN3YXAxNih4KQotIyBkZWZpbmUgdGFyZ2V0Mmhvc3RfMzIoeCkJ c3dhcDMyKHgpCi0jIGRlZmluZSB0YXJnZXQyaG9zdF82NCh4KQlzd2FwNjQoeCkKLQotI2Vsc2UK LQotIyBkZWZpbmUgaG9zdDJ0YXJnZXRfMTYoeCkJKHgpCi0jIGRlZmluZSBob3N0MnRhcmdldF8z Mih4KQkoeCkKLSMgZGVmaW5lIGhvc3QydGFyZ2V0XzY0KHgpCSh4KQotIyBkZWZpbmUgdGFyZ2V0 Mmhvc3RfMTYoeCkJKHgpCi0jIGRlZmluZSB0YXJnZXQyaG9zdF8zMih4KQkoeCkKLSMgZGVmaW5l IHRhcmdldDJob3N0XzY0KHgpCSh4KQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL3NjcmlwdHMvc2V0 dXBtYnIvc2V0dXBtYnIuYyBiL3NjcmlwdHMvc2V0dXBtYnIvc2V0dXBtYnIuYwpkZWxldGVkIGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMzhhZjU1MDgwOTA3Li4wMDAwMDAwMDAwMDAKLS0tIGEvc2Ny aXB0cy9zZXR1cG1ici9zZXR1cG1ici5jCisrKyAvZGV2L251bGwKQEAgLTEsNTQ1ICswLDAgQEAK LS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyCi0vLyBTUERYLUZp bGVDb3B5cmlnaHRUZXh0OiAyMDA5IEp1ZXJnZW4gQmVpc2VydCwgUGVuZ3V0cm9uaXgKLQotLyoq Ci0gKiBAZmlsZQotICogQGJyaWVmIFdyaXRlIHRoZSBiYXJlYm94IGJpbmFyeSB0byB0aGUgTUJS IGFuZCB0aGUgZm9sbG93aW5nIGRpc2sgc2VjdG9ycwotICoKLSAqIEFsc28gcGF0Y2ggZGVkaWNh dGVkIGxvY2F0aW9ucyBpbiB0aGUgaW1hZ2UgdG8gbWFrZSBpdCB3b3JrIGF0IHJ1bnRpbWUKLSAq Ci0gKiBDdXJyZW50IHJlc3RyaWN0aW9ucyBhcmU6Ci0gKiAtIG9ubHkgaW5zdGFsbHMgaW50byBN QlIgYW5kIHRoZSBzZWN0b3JzIGFmdGVyIGl0Ci0gKiAtIHRlc3RlZCBvbmx5IHdpdGggUUVNVQot ICogLSBhbmQgbWF5YmUgc29tZSBvdGhlcnMKLSAqLwotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNp bmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdGRpbnQuaD4KLSNpbmNsdWRlIDxzeXMvbW1h bi5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jaW5j bHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8ZmNudGwuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4K LSNpbmNsdWRlIDxhc3NlcnQuaD4KLQotLyogaW5jbHVkZSB0aGUgaW5mbyBmcm9tIHRoaXMgYmFy ZWJveCByZWxlYXNlICovCi0jaW5jbHVkZSAiLi4vLi4vaW5jbHVkZS9nZW5lcmF0ZWQvdXRzcmVs ZWFzZS5oIgotI2luY2x1ZGUgIi4uLy4uL2FyY2gveDg2L21hY2gtaTM4Ni9pbmNsdWRlL21hY2gv YmFyZWJveC5sZHMuaCIKLQotLyoqIGRlZmluZSB0byBkaXNhYmxlIGludGVncml0eSB0ZXN0cyBh bmQgZGVidWcgbWVzc2FnZXMgKi8KLSNkZWZpbmUgTkRFQlVHCi0KLS8qIHNvbWUgaW5mb3MgYWJv dXQgb3VyIHRhcmdldCBhcmNoaXRlY3R1cmUgKi8KLSNpbmNsdWRlICJhcmNoLmgiCi0KLS8qKgot ICogIkRpc2sgQWRkcmVzcyBQYWNrZXQgU3RydWN0dXJlIiB0byBiZSB1c2VkIHdoZW4gY2FsbGlu ZyBpbnQxMywKLSAqIGZ1bmN0aW9uIDB4NDIKLSAqCi0gKiBAbm90ZSBBbGwgZW50cmllcyBhcmUg aW4gdGFyZ2V0IGVuZGlhbmVzcwotICovCi1zdHJ1Y3QgREFQUwotewotCXVpbnQ4X3Qgc2l6ZTsJ CS8qKjwgc2l6ZSBvZiB0aGlzIGRhdGEgc2V0LCAwIG1hcmtzIGl0IGFzIGludmFsaWQgKi8KLQl1 aW50OF90IHJlczE7CQkvKio8IGFsd2F5cyAwICovCi0JaW50OF90IGNvdW50OwkJLyoqPCBudW1i ZXIgb2Ygc2VjdG9ycyAwLi4uMTI3IHRvIGhhbmRsZSAqLwotCXVpbnQ4X3QgcmVzMjsJCS8qKjwg YWx3YXlzIDAgKi8KLQl1aW50MTZfdCBvZmZzZXQ7CS8qKjwgc3RvcmUgYWRkcmVzczogb2Zmc2V0 ICovCi0JdWludDE2X3Qgc2VnbWVudDsJLyoqPCBzdG9yZSBhZGRyZXNzOiBzZWdtZW50ICovCi0J dWludDY0X3QgbGJhOwkJLyoqPCBzdGFydCBzZWN0b3IgbnVtYmVyIGluIExCQSAqLwotfSBfX2F0 dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qKgotICogRGVzY3JpcHRpb24gb2Ygb25lIHBhcnRp dGlvbiB0YWJsZSBlbnRyeSAoRCpTIHR5cGUpCi0gKgotICogQG5vdGUgQWxsIGVudHJpZXMgYXJl IGluIHRhcmdldCBlbmRpYW5lc3MKLSAqLwotc3RydWN0IHBhcnRpdGlvbl9lbnRyeSB7Ci0JdWlu dDhfdCBib290X2luZGljYXRvcjsKLQl1aW50OF90IGNoc19iZWdpblszXTsKLQl1aW50OF90IHR5 cGU7Ci0JdWludDhfdCBjaHNfZW5kWzNdOwotCXVpbnQzMl90IHBhcnRpdGlvbl9zdGFydDsJLyog TEUgKi8KLQl1aW50MzJfdCBwYXJ0aXRpb25fc2l6ZTsJLyogTEUgKi8KLX0gX19hdHRyaWJ1dGVf XyAoKHBhY2tlZCkpOwotCi0jaWZuZGVmIE5ERUJVRwotc3RhdGljIHZvaWQgZGVidWdvdXQoY29u c3Qgc3RydWN0IERBUFMgKmVudHJ5LCBpbnQgc3VwcmVzc19lbnRyeSkKLXsKLQlpZiAoc3VwcmVz c19lbnRyeSkKLQkJcHJpbnRmKCJEQVBTIGVudHJ5OiAiKTsKLQllbHNlCi0JCXByaW50ZigiREFQ UyBlbnRyeSAlIDN1OiAiLCAoKHVuc2lnbmVkKWVudHJ5ICYgKCBTRUNUT1JfU0laRSAtIDEpKSAv IHNpemVvZihzdHJ1Y3QgREFQUykpOwotCi0JcHJpbnRmKCJTaXplOiAlIDJ1LCBDb3VudDogJSAz ZCwgT2Zmc2V0OiAweCUwNGhYLCBTZWdtZW50OiAweCUwNGhYLCBMQkE6ICVsbHVcbiIsCi0JCWVu dHJ5LT5zaXplLCBlbnRyeS0+Y291bnQsCi0JCXRhcmdldDJob3N0XzE2KGVudHJ5LT5vZmZzZXQp LCB0YXJnZXQyaG9zdF8xNihlbnRyeS0+c2VnbWVudCksCi0JCXRhcmdldDJob3N0XzY0KGVudHJ5 LT5sYmEpKTsKLX0KLSNlbHNlCi0jIGRlZmluZSBkZWJ1Z291dCh4LHkpIChfX0FTU0VSVF9WT0lE X0NBU1QoMCkpCi0jZW5kaWYKLQotLyoqCi0gKiBGaWxsICpvbmUqIERBUFMKLSAqIEBwYXJhbSBz ZWN0b3IgVGhlIERBUFMgdG8gZmlsbAotICogQHBhcmFtIGNvdW50IFNlY3RvciBjb3VudAotICog QHBhcmFtIG9mZnNldCBSZWFsbW9kZSBvZmZzZXQgaW4gdGhlIHNlZ21lbnQKLSAqIEBwYXJhbSBz ZWdtZW50IFJlYWwgbW9kZSBzZWdtZW50Ci0gKiBAcGFyYW0gbGJhIExCQSBvZiB0aGUgZmlyc3Qg c2VjdG9yIHRvIHJlYWQKLSAqIEByZXR1cm4gMCBvbiBzdWNjZXNzCi0gKi8KLXN0YXRpYyBpbnQg ZmlsbF9kYXBzKHN0cnVjdCBEQVBTICpzZWN0b3IsIHVuc2lnbmVkIGNvdW50LCB1bnNpZ25lZCBv ZmZzZXQsIHVuc2lnbmVkIHNlZ21lbnQsIHVpbnQ2NF90IGxiYSkKLXsKLQlhc3NlcnQoc2VjdG9y ICE9IE5VTEwpOwotCWFzc2VydChjb3VudCA8IDEyOCk7Ci0JYXNzZXJ0KG9mZnNldCA8IDB4MTAw MDApOwotCWFzc2VydChzZWdtZW50IDwgMHgxMDAwMCk7Ci0KLQlzZWN0b3ItPnNpemUgPSBzaXpl b2Yoc3RydWN0IERBUFMpOwotCXNlY3Rvci0+cmVzMSA9IDA7Ci0Jc2VjdG9yLT5jb3VudCA9IChp bnQ4X3QpY291bnQ7Ci0Jc2VjdG9yLT5yZXMyID0gMDsKLQlzZWN0b3ItPm9mZnNldCA9IGhvc3Qy dGFyZ2V0XzE2KG9mZnNldCk7Ci0Jc2VjdG9yLT5zZWdtZW50ID0gaG9zdDJ0YXJnZXRfMTYoc2Vn bWVudCk7Ci0Jc2VjdG9yLT5sYmEgPSBob3N0MnRhcmdldF82NChsYmEpOwotCi0JcmV0dXJuIDA7 Ci19Ci0KLS8qKgotICogTWFyayBhIERBUFMgaW52YWxpZCB0byBsZXQgdGhlIGJvb3QgbG9hZGVy IGNvZGUgc3RvcCBhdCB0aGlzIGVudHJ5LgotICogQHBhcmFtIHNlY3RvciBUaGUgREFQUyB0byBi ZSBtYXJrZWQgYXMgaW52YWxpZAotICoKLSAqIE1hcmtpbmcgYXMgaW52YWxpZCBtdXN0IGJlIGRv bmUgaW4gYWNjb3JkYW5jZSB0byB0aGUgZGV0ZWN0aW9uIG1ldGhvZAotICogdGhlIGFzc2VtYmxl ciByb3V0aW5lIGluIHRoZSBib290IGxvYWRlciB1c2VzOgotICogVGhlIGN1cnJlbnQgY29kZSB0 ZXN0cyBmb3IgemVybyBpbiB0aGUgZmlyc3QgdHdvIGJ5dGVzIG9mIHRoZSBEQVBTLgotICovCi1z dGF0aWMgdm9pZCBpbnZhbGlkYXRlX2RhcHMoc3RydWN0IERBUFMgKnNlY3RvcikKLXsKLQlzZWN0 b3ItPnNpemUgPSBNQVJLX0RBUFNfSU5WQUxJRDsKLQlzZWN0b3ItPnJlczEgPSAwOwotfQotCi0v KioKLSAqIENyZWF0ZSB0aGUgaW5kaXJlY3Qgc2VjdG9yIHdpdGggdGhlIERBUFMgZW50cmllcwot ICogQHBhcmFtIGRhcHNfdGFibGUgV2hlcmUgdG8gc3RvcmUgdGhlIGVudHJpZXMKLSAqIEBwYXJh bSBzaXplIFNpemUgb2YgdGhlIHdob2xlIGltYWdlIGluIGJ5dGVzCi0gKiBAcGFyYW0gcGVyc19z ZWN0b3JfY291bnQgQ291bnQgb2Ygc2VjdG9ycyB0byBza2lwIGFmdGVyIE1CUiBmb3IgdGhlIHBl cnNpc3RlbnQgZW52aXJvbm1lbnQgc3RvcmFnZQotICogQHJldHVybiAwIG9uIHN1Y2Nlc3MKLSAq Ci0gKiBUaGlzIHJvdXRpbmUgY2FsY3VsYXRlcyB0aGUgREFQUyBlbnRyaWVzIGZvciB0aGUgY2Fz ZSB0aGUgd2hvbGUKLSAqIGJhcmVib3ggaW1hZ2VzIGZpdHMgaW50byB0aGUgTUJSIGl0c2VsZiBh bmQgdGhlIHNlY3RvcnMgYWZ0ZXIgaXQuCi0gKiBUaGlzIG1lYW5zIHRoZSBzdGFydCBvZiB0aGUg Zmlyc3QgcGFydGl0aW9uIG11c3Qga2VlcCBlbm91Z2ggc2VjdG9ycwotICogdW51c2VkLgotICog SXQgYWxzbyBza2lwcyAncGVyc19zZWN0b3JfY291bnQnIHNlY3RvcnMgYWZ0ZXIgdGhlIE1CUiBm b3Igc3BlY2lhbAotICogdXNhZ2UgaWYgZ2l2ZW4uCi0gKi8KLXN0YXRpYyBpbnQgYmFyZWJveF9s aW5lYXJfaW1hZ2Uoc3RydWN0IERBUFMgKmRhcHNfdGFibGUsIG9mZl90IHNpemUsIGxvbmcgcGVy c19zZWN0b3JfY291bnQpCi17Ci0JdW5zaWduZWQgb2Zmc2V0ID0gTE9BRF9BUkVBLCBuZXh0X29m ZnNldDsKLQl1bnNpZ25lZCBzZWdtZW50ID0gTE9BRF9TRUdNRU5UOwotCXVuc2lnbmVkIGNodW5r X3NpemUsIGkgPSAwOwotCXVpbnQ2NF90IGxiYSA9IDIgKyBwZXJzX3NlY3Rvcl9jb3VudDsKLQlp bnQgcmM7Ci0KLQkvKgotCSAqIFdlIGNhbiBsb2FkIHVwIHRvIDEyNyBzZWN0b3JzIGluIG9uZSBj aHVuay4gV2hhdCBhIGJhZCBudW1iZXIuLi4KLQkgKiBTbywgd2Ugd2lsbCBsb2FkIGluIGNodW5r cyBvZiAzMiBraUIuCi0JICovCi0KLQkvKiBhdCBydW50aW1lIHR3byBzZWN0b3JzIGZyb20gdGhl IGltYWdlIGFyZSBhbHJlYWR5IGxvYWRlZDogTUJSIGFuZCBpbmRpcmVjdCAqLwotCXNpemUgLT0g MiAqIFNFQ1RPUl9TSVpFOwotCS8qIGFuZCBub3cgcm91bmQgdXAgdG8gbXVsdGlwbGUgb2Ygc2Vj dG9yIHNpemUgKi8KLQlzaXplID0gKHNpemUgKyBTRUNUT1JfU0laRSAtIDEpICYgfihTRUNUT1Jf U0laRSAtIDEpOwotCi0JLyoKLQkgKiBUaGUgbGFyZ2VzdCBpbWFnZSB3ZSBjYW4gbG9hZCB3aXRo IHRoaXMgbWV0aG9kIGlzOgotCSAqIChTRUNUT1JfU0laRSAvIHNpemVvZihEQVBTKSAtIDEpICog MzIga2lCCi0JICogRm9yIGEgNTEyIGJ5dGUgc2VjdG9yIGFuZCBhIDE2IGJ5dGUgREFQUzoKLQkg KiAoNTEyIC8gMTYgLSAxKSAqIDMyIGtpQiA9IDk5MiBraUIKLQkgKiBOb3RlOiAnLSAxJyB0byBj b25zaWRlciBvbmUgZW50cnkgaXMgcmVxdWlyZWQgdG8gcGFkIHRvIGEgMzIga2lCIGJvdW5kYXJ5 Ci0JICovCi0KLQlpZiAoc2l6ZSA+PSAoU0VDVE9SX1NJWkUgLyBzaXplb2Yoc3RydWN0IERBUFMp IC0gMSkgKiAzMiAqIDEwMjQpIHsKLQkJZnByaW50ZihzdGRlcnIsICJJbWFnZSB0b28gbGFyZ2Ug dG8gYm9vdC4gTWF4IHNpemUgaXMgJXp1IGtpQiwgaW1hZ2Ugc2l6ZSBpcyAlbHUga2lCXG4iLAot CQkJKFNFQ1RPUl9TSVpFIC8gc2l6ZW9mKHN0cnVjdCBEQVBTKSAtIDEpICogMzIsIHNpemUgLyAx MDI0KTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCWlmIChzaXplID4gMzIgKiAxMDI0KSB7Ci0JCS8q IGZpcnN0IGZpbGwgdXAgdW50aWwgdGhlIG5leHQgMzIgayBib3VuZGFyeSAqLwotCQluZXh0X29m ZnNldCA9IChvZmZzZXQgKyAzMiAqIDEwMjQgLTEpICYgfjB4N2ZmZjsKLQkJY2h1bmtfc2l6ZSA9 IG5leHRfb2Zmc2V0IC0gb2Zmc2V0OwotCQlpZiAoY2h1bmtfc2l6ZSAmIChTRUNUT1JfU0laRS0x KSkgewotCQkJZnByaW50ZihzdGRlcnIsICJVbmFibGUgdG8gcGFkIGZyb20gJVggdG8gJVggaW4g bXVsdGlwbGUgb2Ygc2VjdG9yc1xuIiwgb2Zmc2V0LCBuZXh0X29mZnNldCk7Ci0JCQlyZXR1cm4g LTE7Ci0JCX0KLQotCQlyYyA9IGZpbGxfZGFwcygmZGFwc190YWJsZVtpXSwgY2h1bmtfc2l6ZSAv IFNFQ1RPUl9TSVpFLCBvZmZzZXQsIHNlZ21lbnQsIGxiYSk7Ci0JCWlmIChyYyAhPSAwKQotCQkJ cmV0dXJuIC0xOwotCQlkZWJ1Z291dCgmZGFwc190YWJsZVtpXSwgMCk7Ci0KLQkJLyogY2FsY3Vs YXRlIHZhbHVlcyB0byBlbnRlciB0aGUgbG9vcCBmb3IgdGhlIG90aGVyIGVudHJpZXMgKi8KLQkJ c2l6ZSAtPSBjaHVua19zaXplOwotCQlpKys7Ci0JCWxiYSArPSBjaHVua19zaXplIC8gU0VDVE9S X1NJWkU7Ci0JCW9mZnNldCArPSBjaHVua19zaXplOwotCQlpZiAob2Zmc2V0ID49IDB4MTAwMDAp IHsKLQkJCXNlZ21lbnQgKz0gNDA5NjsKLQkJCW9mZnNldCA9IDA7Ci0JCX0KLQotCQkvKgotCQkg KiBOb3cgbG9hZCB0aGUgcmVtYWluaW5nIGltYWdlIHBhcnQgaW4gMzIga2lCIGNodW5rcwotCQkg Ki8KLQkJd2hpbGUgKHNpemUpIHsKLQkJCWlmIChzaXplID49IDMyICogMTAyNCApIHsKLQkJCQlp ZiAoaSA+PSAoU0VDVE9SX1NJWkUgLyBzaXplb2Yoc3RydWN0IERBUFMpKSkgewotCQkJCQlmcHJp bnRmKHN0ZGVyciwgIkludGVybmFsIHRvb2wgZXJyb3I6IFRvbyBtYW55IERBUFMgZW50cmllcyFc biIpOwotCQkJCQlyZXR1cm4gLTE7Ci0JCQkJfQotCQkJCXJjID0gZmlsbF9kYXBzKCZkYXBzX3Rh YmxlW2ldLCA2NCwgb2Zmc2V0LCBzZWdtZW50LCBsYmEpOwotCQkJCWlmIChyYyAhPSAwKQotCQkJ CQlyZXR1cm4gLTE7Ci0JCQkJZGVidWdvdXQoJmRhcHNfdGFibGVbaV0sIDApOwotCi0JCQkJc2l6 ZSAtPSAzMiAqIDEwMjQ7Ci0JCQkJbGJhICs9IDY0OwotCQkJCW9mZnNldCArPSAzMiAqIDEwMjQ7 Ci0JCQkJaWYgKG9mZnNldCA+PSAweDEwMDAwKSB7Ci0JCQkJCXNlZ21lbnQgKz0gNDA5NjsKLQkJ CQkJb2Zmc2V0ID0gMDsKLQkJCQl9Ci0JCQkJaSsrOwotCQkJfSBlbHNlIHsKLQkJCQlpZiAoaSA+ PSAoU0VDVE9SX1NJWkUgLyBzaXplb2Yoc3RydWN0IERBUFMpKSkgewotCQkJCQlmcHJpbnRmKHN0 ZGVyciwgIkludGVybmFsIHRvb2wgZXJyb3I6IFRvbyBtYW55IERBUFMgZW50cmllcyFcbiIpOwot CQkJCQlyZXR1cm4gLTE7Ci0JCQkJfQotCQkJCXJjID0gZmlsbF9kYXBzKCZkYXBzX3RhYmxlW2ld LCBzaXplIC8gU0VDVE9SX1NJWkUsIG9mZnNldCwgc2VnbWVudCwgbGJhKTsKLQkJCQlpZiAocmMg IT0gMCkKLQkJCQkJcmV0dXJuIC0xOwotCQkJCWRlYnVnb3V0KCZkYXBzX3RhYmxlW2ldLCAwKTsK LQkJCQlzaXplID0gMDsJLyogZmluaXNoZWQgKi8KLQkJCQlpKys7Ci0JCQl9Ci0JCX07Ci0JfSBl bHNlIHsKLQkJLyogbGVzcyB0aGFuIDMyIGtpQi4gVmVyeSBzbWFsbCBpbWFnZS4uLiAqLwotCQly YyA9IGZpbGxfZGFwcygmZGFwc190YWJsZVtpXSwgc2l6ZSAvIFNFQ1RPUl9TSVpFLCBvZmZzZXQs IHNlZ21lbnQsIGxiYSk7Ci0JCWlmIChyYyAhPSAwKQotCQkJcmV0dXJuIC0xOwotCQlkZWJ1Z291 dCgmZGFwc190YWJsZVtpXSwgMCk7Ci0JCWkrKzsKLQl9Ci0KLQkvKgotCSAqIERvIG5vdCBtYXJr IGFuIGVudHJ5IGFzIGludmFsaWQgaWYgdGhlIGJ1ZmZlciBpcyBmdWxsLiBUaGUKLQkgKiBib290 IGNvZGUgc3RvcHMgaWYgYWxsIGVudHJpZXMgb2YgYSBidWZmZXIgYXJlIHJlYWQuCi0JICovCi0J aWYgKGkgPj0gKFNFQ1RPUl9TSVpFIC8gc2l6ZW9mKHN0cnVjdCBEQVBTKSkpCi0JCXJldHVybiAw OwotCi0JLyogbWFyayB0aGUgbGFzdCBEQVBTIGludmFsaWQgKi8KLQlpbnZhbGlkYXRlX2RhcHMo JmRhcHNfdGFibGVbaV0pOwotCWRlYnVnb3V0KCZkYXBzX3RhYmxlW2ldLCAwKTsKLQotCXJldHVy biAwOwotfQotCi0vKioKLSAqIERvIHNvbWUgc2ltcGxlIHNhbml0eSBjaGVja3MgaWYgdGhpcyBz ZWN0b3IgY291bGQgYmUgYW4gTUJSCi0gKiBAcGFyYW0gc2VjdG9yIFNlY3RvciB3aXRoIGRhdGEg dG8gY2hlY2sKLSAqIEBwYXJhbSBzaXplIFNpemUgb2YgdGhlIGJ1ZmZlcgotICogQHJldHVybiAw IGlmIHN1Y2Nlc3NmdWxsCi0gKi8KLXN0YXRpYyBpbnQgY2hlY2tfZm9yX3ZhbGlkX21icihjb25z dCB1aW50OF90ICpzZWN0b3IsIG9mZl90IHNpemUpCi17Ci0JaWYgKHNpemUgPCBTRUNUT1JfU0la RSkgewotCQlmcHJpbnRmKHN0ZGVyciwgIk1CUiB0b28gc21hbGwgdG8gYmUgdmFsaWRcbiIpOwot CQlyZXR1cm4gLTE7Ci0JfQotCi0JaWYgKChzZWN0b3JbT0ZGU0VUX09GX1NJR05BVFVSRV0gIT0g MHg1NSkgfHwKLQkJKHNlY3RvcltPRkZTRVRfT0ZfU0lHTkFUVVJFICsgMV0gIT0gMHhBQSkpIHsK LQkJZnByaW50ZihzdGRlcnIsICJObyBNQlIgc2lnbmF0dXJlIGZvdW5kXG4iKTsKLQkJcmV0dXJu IC0xOwotCX0KLQotCS8qIEZJWE1FOiB0cnkgdG8gY2hlY2sgaWYgdGhlcmUgaXMgYSB2YWxpZCBw YXJ0aXRpb24gdGFibGUgKi8KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBDaGVjayBzcGFjZSBi ZXR3ZWVuIHN0YXJ0IG9mIHRoZSBpbWFnZSBhbmQgdGhlIHN0YXJ0IG9mIHRoZSBmaXJzdCBwYXJ0 aXRpb24KLSAqIEBwYXJhbSBoZF9pbWFnZSBIRCBpbWFnZSB0byBleGFtaW5lCi0gKiBAcGFyYW0g c2l6ZSBTaXplIG9mIHRoZSBiYXJlYm94IGltYWdlCi0gKiBAcmV0dXJuIDAgb24gc3VjY2Vzcywg LTEgaWYgdGhlIGJhcmVib3ggaW1hZ2UgaXMgdG9vIGxhcmdlCi0gKi8KLXN0YXRpYyBpbnQgY2hl Y2tfZm9yX3NwYWNlKGNvbnN0IHZvaWQgKmhkX2ltYWdlLCBvZmZfdCBzaXplKQotewotCXN0cnVj dCBwYXJ0aXRpb25fZW50cnkgKnBhcnRpdGlvbjsKLQl1aW50OF90ICptYnJfZGlza19zZWN0b3Ig PSAodWludDhfdCopaGRfaW1hZ2U7Ci0Jb2ZmX3Qgc3BhcmVfc2VjdG9yX2NvdW50OwotCi0JYXNz ZXJ0KGhkX2ltYWdlICE9IE5VTEwpOwotCWFzc2VydChzaXplID4gMCk7Ci0KLQlpZiAoY2hlY2tf Zm9yX3ZhbGlkX21icihoZF9pbWFnZSwgc2l6ZSkgIT0gMCkKLQkJcmV0dXJuIC0xOwotCi0JLyog d2hlcmUgdG8gcmVhZCAqLwotCXBhcnRpdGlvbiA9IChzdHJ1Y3QgcGFydGl0aW9uX2VudHJ5Kikg Jm1icl9kaXNrX3NlY3RvcltPRkZTRVRfT0ZfUEFSVElUSU9OX1RBQkxFXTsKLQotCS8qIFRPRE8g ZGVzY3JpYmVzIHRoZSBmaXJzdCBlbnRyeSBhbHdheXMgdGhlIGZpcnN0IHBhcnRpdGlvbj8gKi8K LQlzcGFyZV9zZWN0b3JfY291bnQgPSB0YXJnZXQyaG9zdF8zMihwYXJ0aXRpb24tPnBhcnRpdGlv bl9zdGFydCk7Ci0KLSNpZmRlZiBERUJVRwotCXByaW50ZigiRGVidWc6IFJlcXVpcmVkIGZyZWUg c2VjdG9ycyBmb3IgYmFyZWJveCBwcmlvciBmaXJzdCBwYXJ0aXRpb246ICVsdSwgaGQgaW1hZ2Ug cHJvdmlkZXM6ICVsdVxuIiwKLQkJKHNpemUgKyBTRUNUT1JfU0laRSAtIDEpIC8gU0VDVE9SX1NJ WkUsIHNwYXJlX3NlY3Rvcl9jb3VudCk7Ci0jZW5kaWYKLQlzcGFyZV9zZWN0b3JfY291bnQgKj0g U0VDVE9SX1NJWkU7Ci0JaWYgKHNwYXJlX3NlY3Rvcl9jb3VudCA8IHNpemUpIHsKLQkJZnByaW50 ZihzdGRlcnIsICJOb3QgZW5vdWdoIHNwYWNlIGFmdGVyIE1CUiB0byBzdG9yZSBiYXJlYm94XG4i KTsKLQkJZnByaW50ZihzdGRlcnIsICJNb3ZlIGJlZ2luIG9mIHRoZSBmaXJzdCBwYXJ0aXRpb24g YmV5b25kIHNlY3RvciAlbHVcbiIsIChzaXplICsgU0VDVE9SX1NJWkUgLSAxKSAvIFNFQ1RPUl9T SVpFKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKioKLSAqIFNldHVw IHRoZSBwZXJzaXN0ZW50IGVudmlyb25tZW50IHN0b3JhZ2UgaW5mb3JtYXRpb24KLSAqIEBwYXJh bSBwYXRjaF9hcmVhIFdoZXJlIHRvIHBhdGNoCi0gKiBAcGFyYW0gcGVyc19zZWN0b3Jfc3RhcnQg U3RhcnQgc2VjdG9yIG9mIHRoZSBwZXJzaXN0ZW50IGVudmlyb25tZW50IHN0b3JhZ2UKLSAqIEBw YXJhbSBwZXJzX3NlY3Rvcl9jb3VudCBDb3VudCBvZiBzZWN0b3JzIGZvciB0aGUgcGVyc2lzdGVu dCBlbnZpcm9ubWVudCBzdG9yYWdlCi0gKiBAcmV0dXJuIDAgb24gc3VjY2VzcwotICovCi1zdGF0 aWMgaW50IHN0b3JlX3BlcnNfZW52X2luZm8odm9pZCAqcGF0Y2hfYXJlYSwgdWludDY0X3QgcGVy c19zZWN0b3Jfc3RhcnQsIGxvbmcgcGVyc19zZWN0b3JfY291bnQpCi17Ci0JdWludDY0X3QgKnN0 YXJ0X2xiYSA9ICh1aW50NjRfdCopKHBhdGNoX2FyZWEgKyBQQVRDSF9BUkVBX1BFUlNfU1RBUlQp OwotCXVpbnQxNl90ICpjb3VudF9sYmEgPSAodWludDE2X3QqKShwYXRjaF9hcmVhICsgUEFUQ0hf QVJFQV9QRVJTX1NJWkUpOwotCi0JYXNzZXJ0KHBhdGNoX2FyZWEgIT0gTlVMTCk7Ci0JYXNzZXJ0 KHBlcnNfc2VjdG9yX2NvdW50ID49IDApOwotCi0JaWYgKHBlcnNfc2VjdG9yX2NvdW50ID09IDAp IHsKLQkJKmNvdW50X2xiYSA9IGhvc3QydGFyZ2V0XzE2KFBBVENIX0FSRUFfUEVSU19TSVpFX1VO VVNFRCk7Ci0JCXJldHVybiAwOwotCX0KLQotCSpzdGFydF9sYmEgPSBob3N0MnRhcmdldF82NChw ZXJzX3NlY3Rvcl9zdGFydCk7Ci0JKmNvdW50X2xiYSA9IGhvc3QydGFyZ2V0XzE2KHBlcnNfc2Vj dG9yX2NvdW50KTsKLQotCXJldHVybiAwOwotfQotCi0vKioKLSAqIFByZXBhcmUgdGhlIE1CUiBh bmQgaW5kaXJlY3Qgc2VjdG9yIGZvciBydW50aW1lCi0gKiBAcGFyYW0gZmRfYmFyZWJveCBiYXJl Ym94IGltYWdlIHRvIHVzZQotICogQHBhcmFtIGZkX2hkIEhhcmQgZGlzayBpbWFnZSB0byBwcmVw YXJlCi0gKiBAcGFyYW0gcGVyc19zZWN0b3JfY291bnQgQ291bnQgb2Ygc2VjdG9ycyB0byBza2lw IGFmdGVyIE1CUiBmb3IgdGhlIHBlcnNpc3RlbnQgZW52aXJvbm1lbnQgc3RvcmFnZQotICogQHJl dHVybiAwIG9uIHN1Y2Nlc3MKLSAqCi0gKiBUaGlzIHJvdXRpbmUgZXhwZWN0cyBhIHByZXBhcmVk IGhhcmQgZGlzayBpbWFnZSBmaWxlIHdpdGggYSBwYXJ0aXRpb24gdGFibGUKLSAqIGluIGl0cyBm aXJzdCBzZWN0b3IuIFRoaXMgbWV0aG9kIG9ubHkgaXMgY3VycmVudGx5IHN1cHBvcnRlZC4KLSAq Lwotc3RhdGljIGludCBiYXJlYm94X292ZXJsYXlfbWJyKGludCBmZF9iYXJlYm94LCBpbnQgZmRf aGQsIGxvbmcgcGVyc19zZWN0b3JfY291bnQpCi17Ci0JY29uc3Qgdm9pZCAqYmFyZWJveF9pbWFn ZTsKLQl2b2lkICpoZF9pbWFnZTsKLQlpbnQgcmM7Ci0Jc3RydWN0IHN0YXQgc2I7Ci0Jc3RydWN0 IERBUFMgKmVtYmVkOwkvKiBwYXJ0IG9mIHRoZSBNQlIgKi8KLQlzdHJ1Y3QgREFQUyAqaW5kaXJl Y3Q7CS8qIHNlY3RvciB3aXRoIGluZGlyZWN0IERBUFMgKi8KLQlvZmZfdCByZXF1aXJlZF9zaXpl OwotCi0JaWYgKGZzdGF0KGZkX2JhcmVib3gsICZzYikgPT0gLTEpIHsKLQkJcGVycm9yKCJmc3Rh dCIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JLyogdGhlIGJhcmVib3ggaW1hZ2Ugd29uJ3QgYmUg dG91Y2hlZCAqLwotCWJhcmVib3hfaW1hZ2UgPSBtbWFwKE5VTEwsIHNiLnN0X3NpemUsICBQUk9U X1JFQUQsIE1BUF9TSEFSRUQsIGZkX2JhcmVib3gsIDApOwotCWlmIChiYXJlYm94X2ltYWdlID09 IE1BUF9GQUlMRUQpIHsKLQkJcGVycm9yKCJtbWFwIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQly YyA9IGNoZWNrX2Zvcl92YWxpZF9tYnIoYmFyZWJveF9pbWFnZSwgc2Iuc3Rfc2l6ZSk7Ci0JaWYg KHJjICE9IDApIHsKLQkJZnByaW50ZihzdGRlcnIsICJiYXJlYm94IGltYWdlIHNlZW1zIG5vdCB2 YWxpZDogQmFkIE1CUiBzaWduYXR1cmVcbiIpOwotCQlnb3RvIG9uX2Vycm9yX2hkOwotCX0KLQot CS8qCi0JICogdGhlIHBlcnNpc3RlbnQgZW52aXJvbm1lbnQgc3RvcmFnZSBpcyBpbiBmcm9udCBv ZiB0aGUgbWFpbgotCSAqIGJhcmVib3ggaW1hZ2UuIFRvIGhhbmRsZSBib3RoLCB3ZSBuZWVkIG1v cmUgc3BhY2UgaW4gZnJvbnQgb2YgdGhlCi0JICogdGhlIGZpcnN0IHBhcnRpdGlvbi4KLQkgKi8K LQlyZXF1aXJlZF9zaXplID0gc2Iuc3Rfc2l6ZSArIHBlcnNfc2VjdG9yX2NvdW50ICogU0VDVE9S X1NJWkU7Ci0KLQkvKiB0aGUgaGQgaW1hZ2Ugd2lsbCBiZSBtb2RpZmllZCAqLwotCWhkX2ltYWdl ID0gbW1hcChOVUxMLCByZXF1aXJlZF9zaXplLCAgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwKLQkJ CQkJTUFQX1NIQVJFRCwgZmRfaGQsIDApOwotCWlmIChoZF9pbWFnZSA9PSBNQVBfRkFJTEVEKSB7 Ci0JCXBlcnJvcigibW1hcCIpOwotCQlyYyA9IC0xOwotCQlnb3RvIG9uX2Vycm9yX2hkOwotCX0K LQotCS8qIGNoZWNrIGZvciBzcGFjZSAqLwotCXJjID0gY2hlY2tfZm9yX3NwYWNlKGhkX2ltYWdl LCByZXF1aXJlZF9zaXplKTsKLQlpZiAocmMgIT0gMCkKLQkJZ290byBvbl9lcnJvcl9zcGFjZTsK LQotCS8qIGVtYmVkIGJhcmVib3gncyBib290IGNvZGUgaW50byB0aGUgZGlzayBkcml2ZSBpbWFn ZSAqLwotCW1lbWNweShoZF9pbWFnZSwgYmFyZWJveF9pbWFnZSwgT0ZGU0VUX09GX1BBUlRJVElP Tl9UQUJMRSk7Ci0KLQkvKgotCSAqIGVtYmVkIHRoZSBiYXJlYm94IG1haW4gaW1hZ2UgaW50byB0 aGUgZGlzayBkcml2ZSBpbWFnZSwKLQkgKiBidXQga2VlcCB0aGUgcGVyc2lzdGVudCBlbnZpcm9u bWVudCBzdG9yYWdlIHVudG91Y2hlZAotCSAqIChpZiBkZWZpbmVkKSwgZS5nLiBzdG9yZSB0aGUg bWFpbiBpbWFnZSBiZWhpbmQgdGhpcyBzcGVjaWFsIGFyZWEuCi0JICovCi0JbWVtY3B5KGhkX2lt YWdlICsgKChwZXJzX3NlY3Rvcl9jb3VudCArIDEpICogU0VDVE9SX1NJWkUpLAotCQkJYmFyZWJv eF9pbWFnZSArIFNFQ1RPUl9TSVpFLCBzYi5zdF9zaXplIC0gU0VDVE9SX1NJWkUpOwotCi0JLyog bm93LCBwcmVwYXJlIHRoaXMgaGFyZCBkaXNrIGltYWdlIGZvciBCSU9TIGJhc2VkIGJvb3Rpbmcg Ki8KLQllbWJlZCA9IGhkX2ltYWdlICsgUEFUQ0hfQVJFQTsKLQlpbmRpcmVjdCA9IGhkX2ltYWdl ICsgKChwZXJzX3NlY3Rvcl9jb3VudCArIDEpICogU0VDVE9SX1NJWkUpOwotCi0JLyoKLQkgKiBG aWxsIHRoZSBlbWJlZGRlZCBEQVBTIHRvIGxldCB0aGUgYmFzaWMgYm9vdCBjb2RlIGZpbmQgdGhl Ci0JICogaW5kaXJlY3Qgc2VjdG9yIGF0IHJ1bnRpbWUKLQkgKi8KLSNpZmRlZiBERUJVRwotCXBy aW50ZigiRGVidWc6IEZpbGwgaW4gZW1iZWRkZWQgREFQU1xuIik7Ci0jZW5kaWYKLQlyYyA9IGZp bGxfZGFwcyhlbWJlZCwgMSwgSU5ESVJFQ1RfQVJFQSwgSU5ESVJFQ1RfU0VHTUVOVCwKLQkJCQkx ICsgcGVyc19zZWN0b3JfY291bnQpOwotCWlmIChyYyAhPSAwKQotCQlnb3RvIG9uX2Vycm9yX3Nw YWNlOwotCWRlYnVnb3V0KGVtYmVkLCAxKTsKLQotI2lmZGVmIERFQlVHCi0JcHJpbnRmKCJEZWJ1 ZzogRmlsbCBpbiBpbmRpcmVjdCBzZWN0b3JcbiIpOwotI2VuZGlmCi0JLyoKLQkgKiBmaWxsIHRo ZSBpbmRpcmVjdCBzZWN0b3Igd2l0aCB0aGUgcmVtYWluaW5nIERBUFMgdG8gbG9hZCB0aGUKLQkg KiB3aG9sZSBiYXJlYm94IGltYWdlIGF0IHJ1bnRpbWUKLQkgKi8KLQlyYyA9IGJhcmVib3hfbGlu ZWFyX2ltYWdlKGluZGlyZWN0LCBzYi5zdF9zaXplLCBwZXJzX3NlY3Rvcl9jb3VudCk7Ci0JaWYg KHJjICE9IDApCi0JCWdvdG8gb25fZXJyb3Jfc3BhY2U7Ci0KLQkvKgotCSAqIFRPRE86IFJlcGxh Y2UgdGhlIGZpeGVkIExCQSBzdGFydGluZyBudW1iZXIgYnkgYSBjYWxjdWxhdGVkIG9uZSwKLQkg KiB0byBzdXBwb3J0IGJhcmVib3ggYXMgYSBjaGFpbmVkIGxvYWRlciBpbiBhIGRpZmZlcmVudCBz dGFydAotCSAqIHNlY3RvciB0aGFuIHRoZSBNQlIKLQkgKi8KLQlyYyA9IHN0b3JlX3BlcnNfZW52 X2luZm8oZW1iZWQsIDEsIHBlcnNfc2VjdG9yX2NvdW50KTsKLQlpZiAocmMgIT0gMCkKLQkJZ290 byBvbl9lcnJvcl9zcGFjZTsKLQotb25fZXJyb3Jfc3BhY2U6Ci0JbXVubWFwKGhkX2ltYWdlLCBy ZXF1aXJlZF9zaXplKTsKLQotb25fZXJyb3JfaGQ6Ci0JbXVubWFwKCh2b2lkKiliYXJlYm94X2lt YWdlLCBzYi5zdF9zaXplKTsKLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIHZvaWQgcHJpbnRf dXNhZ2UoY29uc3QgY2hhciAqcG5hbWUpCi17Ci0JcHJpbnRmKCIlczogUHJlcGFyaW5nIGEgaGFy ZCBkaXNrIGltYWdlIGZvciBib290IHdpdGggYmFyZWJveCBvbiB4ODYuXG4iLCBwbmFtZSk7Ci0J cHJpbnRmKCJVc2FnZSBpc1xuICVzIFtvcHRpb25zXSAtbSA8YmFyZWJveCBpbWFnZT4gLWQgPGhk IGltYWdlPlxuIiwgcG5hbWUpOwotCXByaW50ZigiIFtvcHRpb25zXSBhcmU6XG4gLXMgPGNvdW50 PiBzZWN0b3IgY291bnQgb2YgdGhlIHBlcnNpc3RlbnQgZW52aXJvbm1lbnQgc3RvcmFnZVxuIik7 Ci0JcHJpbnRmKCIgPGJhcmVib3ggaW1hZ2U+IGJhcmVib3gncyBib290IGltYWdlIGZpbGVcbiIp OwotCXByaW50ZigiIDxoZCBpbWFnZT4gSEQgaW1hZ2UgdG8gc3RvcmUgdGhlIGJhcmVib3ggaW1h Z2VcbiIpOwotCXByaW50ZigiIElmIG5vICctcyA8eD4nIHdhcyBnaXZlbiwgYmFyZWJveCBvY2N1 cGllcyBzZWN0b3JzIDAgdG8gbiwgZWxzZSBzZWN0b3IgMCBhbmQgeCsxIHRvIG5cbiIpOwotfQot Ci1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQotewotCWludCByYyA9IDAsIGM7Ci0J Y2hhciAqYmFyZWJveF9pbWFnZV9maWxlbmFtZSA9IE5VTEwsICpoZF9pbWFnZV9maWxlbmFtZSA9 IE5VTEw7Ci0JaW50IGZkX2JhcmVib3hfaW1hZ2UgPSAwLCBmZF9oZF9pbWFnZSA9IDA7Ci0JbG9u ZyBiYXJlYm94X3BlcnNfc2l6ZSA9IC0xOwotCi0JaWYgKGFyZ2MgPT0gMSkgewotCQlwcmludF91 c2FnZShhcmd2WzBdKTsKLQkJZXhpdCgwKTsKLQl9Ci0KLQkvKiBoYW5kbGUgY29tbWFuZCBsaW5l IG9wdGlvbnMgZmlyc3QgKi8KLQl3aGlsZSAoMSkgewotCQljID0gZ2V0b3B0KGFyZ2MsIGFyZ3Ys ICJtOmQ6czpodiIpOwotCQlpZiAoYyA9PSAtMSkKLQkJCWJyZWFrOwotCi0JCXN3aXRjaCAoYykg ewotCQljYXNlICdzJzoKLQkJCWJhcmVib3hfcGVyc19zaXplID0gc3RydG9sKG9wdGFyZywgTlVM TCwgMCk7Ci0JCQlicmVhazsKLQkJY2FzZSAnbSc6Ci0JCQliYXJlYm94X2ltYWdlX2ZpbGVuYW1l ID0gc3RyZHVwKG9wdGFyZyk7Ci0JCQlicmVhazsKLQkJY2FzZSAnZCc6Ci0JCQloZF9pbWFnZV9m aWxlbmFtZSA9IHN0cmR1cChvcHRhcmcpOwotCQkJYnJlYWs7Ci0JCWNhc2UgJ2gnOgotCQkJcHJp bnRfdXNhZ2UoYXJndlswXSk7Ci0JCQlyYyA9IDA7Ci0JCQlnb3RvIG9uX2Vycm9yOwotCQljYXNl ICd2JzoKLQkJCXByaW50Zigic2V0dXBtYnIgZm9yIHUtYm9vdC12JXNcbiIsIFVUU19SRUxFQVNF KTsKLQkJCXByaW50ZigiU2VuZCBidWcgcmVwb3J0cyB0byAnYmFyZWJveEBsaXN0cy5pbmZyYWRl YWQub3JnJ1xuIik7Ci0JCQlyYyA9IDA7Ci0JCQlnb3RvIG9uX2Vycm9yOwotCQl9Ci0JfQotCi0J aWYgKGJhcmVib3hfaW1hZ2VfZmlsZW5hbWUgPT0gTlVMTCkgewotCQlwcmludF91c2FnZShhcmd2 WzBdKTsKLQkJcmMgPSAtMTsKLQkJZ290byBvbl9lcnJvcjsKLQl9Ci0KLQlmZF9iYXJlYm94X2lt YWdlID0gb3BlbihiYXJlYm94X2ltYWdlX2ZpbGVuYW1lLCBPX1JET05MWSk7Ci0JaWYgKGZkX2Jh cmVib3hfaW1hZ2UgPT0gLTEpIHsKLQkJZnByaW50ZihzdGRlcnIsICJDYW5ub3Qgb3BlbiAnJXMn IGZvciByZWFkaW5nXG4iLAotCQkJCWJhcmVib3hfaW1hZ2VfZmlsZW5hbWUpOwotCQlyYyA9IC0x OwotCQlnb3RvIG9uX2Vycm9yOwotCX0KLQotCWZkX2hkX2ltYWdlID0gb3BlbihoZF9pbWFnZV9m aWxlbmFtZSwgT19SRFdSKTsKLQlpZiAoZmRfaGRfaW1hZ2UgPT0gLTEpIHsKLQkJZnByaW50Zihz dGRlcnIsICJDYW5ub3Qgb3BlbiAnJXMnXG4iLCBoZF9pbWFnZV9maWxlbmFtZSk7Ci0JCXJjID0g LTE7Ci0JCWdvdG8gb25fZXJyb3I7Ci0JfQotCi0JaWYgKGJhcmVib3hfcGVyc19zaXplIDwgMCkK LQkJYmFyZWJveF9wZXJzX3NpemUgPSAwOwotCi0JcmMgPSBiYXJlYm94X292ZXJsYXlfbWJyKGZk X2JhcmVib3hfaW1hZ2UsIGZkX2hkX2ltYWdlLCBiYXJlYm94X3BlcnNfc2l6ZSk7Ci0KLW9uX2Vy cm9yOgotCWlmIChmZF9iYXJlYm94X2ltYWdlICE9IC0xKQotCQljbG9zZShmZF9iYXJlYm94X2lt YWdlKTsKLQlpZiAoZmRfaGRfaW1hZ2UgIT0gLTEpCi0JCWNsb3NlKGZkX2hkX2ltYWdlKTsKLQot CWlmIChiYXJlYm94X2ltYWdlX2ZpbGVuYW1lICE9IE5VTEwpCi0JCWZyZWUoYmFyZWJveF9pbWFn ZV9maWxlbmFtZSk7Ci0JaWYgKGhkX2ltYWdlX2ZpbGVuYW1lICE9IE5VTEwpCi0JCWZyZWUoaGRf aW1hZ2VfZmlsZW5hbWUpOwotCi0JcmV0dXJuIHJjOwotfQotLSAKMi4yOS4yCgoKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KYmFyZWJveCBtYWlsaW5nIGxp c3QKYmFyZWJveEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3Jn L21haWxtYW4vbGlzdGluZm8vYmFyZWJveAo=