From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 4437 invoked by alias); 9 May 2017 21:45:42 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Received: (qmail 129089 invoked by uid 89); 9 May 2017 21:45:34 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.8 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,RCVD_IN_DNSWL_NONE,SPF_HELO_PASS autolearn=ham version=3.3.2 spammy=Being, labels, stock, Medium X-HELO: NAM02-CY1-obe.outbound.protection.outlook.com Authentication-Results: gotplt.org; dkim=none (message not signed) header.d=none;gotplt.org; dmarc=none action=none header.from=cavium.com; Message-ID: <1494366305.9224.26.camel@cavium.com> Subject: Re: Ping: [Patch] aarch64: Thunderx specific memcpy and memmove From: Steve Ellcey Reply-To: sellcey@cavium.com To: Siddhesh Poyarekar , Szabolcs Nagy , libc-alpha Cc: nd@arm.com Date: Tue, 09 May 2017 21:45:00 -0000 In-Reply-To: References: <1493663254.29498.11.camel@cavium.com> <5909E2C5.7090603@arm.com> Content-Type: multipart/mixed; boundary="=-0VWlOjOn6l+gJuwNSf3P" Mime-Version: 1.0 X-ClientProxiedBy: BN6PR16CA0004.namprd16.prod.outlook.com (10.172.212.142) To MWHPR07MB3469.namprd07.prod.outlook.com (10.164.192.20) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 22e45ccf-86c6-4113-54c2-08d49724ab2c X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(201703131423075)(201703031133081);SRVR:MWHPR07MB3469; X-Microsoft-Exchange-Diagnostics: 1;MWHPR07MB3469;3:MUSHUr4tBQc32nDve2j1GeEpCJ0qNaIxo3dnX8bQceQSYoarOeKLpXrFgOmb5fTDUlhjPROrqad4TOC2ahGFtDSFnSNUd/3OHmXFz7Uq2c6ZOH1yBjRgayzrY2EB3ly3jZG8CWxfalVwobIbrs856JSCGOktjGxrJ/oZF57HQsQfGR6Pg39daT2QM2H1Ca7aKNU9HvbdoCsJp2ZNqVIIfYnWXeU4Bmf+Vni215cNfmwvs9JDaE99ngbL3LwvzBv/mfjQxhyu28QFnLliAfVB+rqzZMCSYbMSUkrieACEi9ZGIB2W9jYaIqBzdwVA4KF5VPvFNAilVohZnJKXRBOG5g==;25:XuRRhUMN5OhuSyyNuzBaDHx0HZwklkOo0X+zqxEpN1e1cDCR+dgXDOODvqDxGe4G/3j9+/ikIMRXvTsCty0V14d6MY9VJTt3/ckdb2ojjLjj+zKS63502IE7J6U3uEuzcPJQRUaZPvkVryqsPk6Uc5lDOSqEypN1ORf4hEdj2FPG/2QmFwTc5ZLaD0H4IUUpgH0D9yiFJ1uyl5IWtc6dtyFJNrb4qAw4J48XAU685CXeNVvfdO2UfHmwvZtlXKhZjMtMJ6RPEtpFophcpcIlS0dt8Gz7sCPYhChOcHI38eaKTtI8YPIorJ3x/0vv5BnI91C+XOPi/d5VdwShGw0Kh1PH3iTLbGFnPldXd1L8IvVH22kvxBe7LqdJbezmmpr07c6uaUGmj7xWUrdgKVHJR6zIIV6Mb6IVb1DadnRMsas1NgQIsAgatnNsgPJ1o5nCF2Pc9x6wHqSQgdano8b8TKJ1qKKuS1bnzHNauQ0HJF5jSa0NdccermODD+LpicZsG78XSxfyX3EzNCDHuRrvGQ== X-Microsoft-Exchange-Diagnostics: 1;MWHPR07MB3469;31:wP7jegCNJx1g8/5OBiQkX7l3ma0xOPZZ8wcGFSgx9VmxLEO0yyjtdV4z/DGmDm7BtcRAAdxg0y0rTo0u5vZJDf7Po6oLatjoJPEQuT3XanLV1L/EKK4MwwFy7kmm4fLCS8J03NhbDYL7eNjLEysr58E9p3TVQ2StYTSCsUUZQy6rcUm91ymY1UFdbafIjkVkGRXosAZ55fksQ8595Rp9uMybZ4PdgmzJyige2Fy8YAZ2B2ocB/ZAsf66dk790aVub+dEOljRIOqwLMZl1ckZvXfYo2KPBDIPBNp0s6CY+VMXSyvHFE8/vFFCjaq3uvj7;20:ApXfFf74ry3SqiPjQAyDAi2z04+pCBcJHuQ+IKIhVe0XcGDgu8fqW4LppqG37RLvl9X2U+o+VgTJt3RoakWkidcGty8VWj8I6wOo/lplJ0Rga0fvJ/PQZFUkOGIZD8a/RbK5KSKQjpQvrdNODA4OtZWDKhcjSYvNO7dkRUJYIwYHLm28GxAhNJn6pckZ/6PhvCxZyMRK7o9chXrWdV3TS6vLobGiFD0G3SR3mEpbGmSf72J0WmB+8iGqSy3pfVgxLPBvtYtHUpfm8sAkL3q4QVfajawEVMOx79UehEvg6q0CuyrdzoISdWfH9QZm4IlZx6GozuNM/1bqBpIil3af2udUaskSCZ5RhxNWljDk7uNx4CpjR2T3PksakXPoYjCom+KJrLE9tiJvLn5/V19jibYrJYYyE1FU/+1NgufpOK2zBcd9rkvDFCGe0nmBH8u0T+twOY4lvoHwI12jMPnYI+E2/OILD4LuZ82eeSLoNRjAD1Wb0oBa0h60EDpeNpWG X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(102415395)(6040450)(601004)(2401047)(8121501046)(5005006)(10201501046)(3002001)(93006095)(93001095)(6041248)(20161123562025)(20161123560025)(20161123555025)(20161123558100)(20161123564025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(6072148);SRVR:MWHPR07MB3469;BCL:0;PCL:0;RULEID:;SRVR:MWHPR07MB3469; X-Microsoft-Exchange-Diagnostics: 1;MWHPR07MB3469;4:LQyz6ZL0q8PuhbesG5GeWn+me8wnsVTEV0RpFituwQCRvcn6+8ehuCE+S3aiLqAmsBsB696iMlaDtkXfyf7ITs4Q9IM3Sam9U2pbIo/FEcFT2r3Cv5Zg3Yjt59oR7RSl9YjOIEiUwZ/R+0gTzC4z3AzSn/MyVIu6hZoMFXJYuwF89rxPLG0YFCKvy7gLl0ncKMiDCK8glQWvMHIqT4DcE5YXE3k9OV0Hyydc2lxQx+xnCmLbxffaR+OGaGs5EN3REegl+G4KvKMlggBAkq44gizzpnR9iY6bsR1b1jI/qyak7guP8tGM64C0uMWRsgboV5SQZ7yZXZ83YGPEB7NWCTGc+bcUbDtTtaYToHx6mt6zrktP5VFClqIpyJlXv5TV5sGx/Exg3K05u3Arq9c5DQLnHJa+7b5cjUDuO59pHYm814qbIdUX/gHgp/r7CbKJRc1ZNyd+9GLbGjo1avigS0YMPYVG9Q05lMP6Pqz/icUBMzvI9NWc1x+JLAe7Y+xPN6fXmDc8GdpW+3QJLN8Kq7QA/B0kAnlbTMauBCng1e+aMjSLH4rSyG6vZDZdO2wTUKoftOVyF7kSrJ8G+wIgxsN7FR01jnA/WOGb1q6+mm+b2r2DD17JrWRhO0QipsUQrUru2FBiIVqCSvK0XNxAJcDMuZz8gE7RNib54i4POM9JFHZNNdC2pdggi8XD1DxcbeWYeN4Zp/5w66kNiFL5dTobzP4lLj1nE/MlzLugiwRuBu5tzdO8Dsoo1lCBPtIxUmbfaC1gL7sMAKzcIIE47/3CRZy+6GpJPwKU0LSr3GYSn/1O+U2GAHspT/LYKwI5 X-Forefront-PRVS: 0302D4F392 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(6009001)(39400400002)(39450400003)(39850400002)(39410400002)(39840400002)(377424004)(377454003)(24454002)(3450700001)(76176999)(3846002)(43066003)(6116002)(50986999)(8676002)(103116003)(2476003)(50226002)(81166006)(2950100002)(4610100001)(6666003)(512874002)(53416004)(42186005)(229853002)(6506006)(5660300001)(6486002)(33646002)(66066001)(478600001)(38730400002)(6246003)(568964002)(36756003)(53936002)(6512007)(305945005)(25786009)(5890100001)(4326008)(84326002)(189998001)(72206003)(7736002)(2906002);DIR:OUT;SFP:1101;SCL:1;SRVR:MWHPR07MB3469;H:sellcey-dt.caveonetworks.com;FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;MWHPR07MB3469;23:P+Tp2SMw6oh2Dkgd13nrKcCYU3bh9SaDUdDi6ruBc?= =?us-ascii?Q?g8nQfNtSiktghxVFJhSqUYgQy7JBTj4hAQZcsAlVF4F4HlFfmuEEVzWda8K3?= =?us-ascii?Q?KnHilP/hh/0sGPOkNWFxrkrpqMKhNluVnmcJGM4RpkSvckmzLGEKbkmHHl41?= =?us-ascii?Q?tcmDmYilZrUsq5kfMvJv2Ee9J/LeEhALlJV4ZQh5mNJeHklYmoN5elTtiyVE?= =?us-ascii?Q?GUTQ0ybg8FKRpmEeIqyOv7lDUiUueHi3VSDH5F4fHkBMDAX1g3spnlFRALBZ?= =?us-ascii?Q?JbSZW82or9oRfyV9jERBjb90KJTkbjfkknFwj86+STA6g6+wfoib4fWTk00R?= =?us-ascii?Q?5axu9yJ+mi+luNt6qxokr6SzbYnUrWXLmqcqavKLhk548dtVbo17GvlxG6mN?= =?us-ascii?Q?I8bzcS/K1M0+fAyUSOx0Lyd+heK87EnM0uhUV1GFbo+tXt073ITT/a+8xvek?= =?us-ascii?Q?G6TN/ClVd4bcPkJsymh/kNBgmussIDPDEqtf0HNCtI5RXCOgfPR+Xz2mOvYw?= =?us-ascii?Q?5olctp/KNelL0pR/okRt+bNXojuc4K4wI6QJUYowCbNELjCWN+VCCCohnu/b?= =?us-ascii?Q?gQBurCHLCXLdw4LLHoylU09q4VIrGCkkRYQKb+bHAzlv55UqR/Q/4Fx0SAin?= =?us-ascii?Q?fbx5uhAGPxBF5Oci61R7RpeIc/UkF0wBoBMxcVfuIRb8Ugx/2YOnbu/93k3Q?= =?us-ascii?Q?l/pLfZtdDHAiOR/IwUiaxdvu5ZqM/N8A5RoZZ15demSsyGm9owkrnM2ee5ls?= =?us-ascii?Q?CtWyhSF7JFbtQXjjN8vYa7XV0B+5zWhqken14TStkzZVqW2mkMC4GjERcI+e?= =?us-ascii?Q?LH3KGY/VOroIkvYl0YTFX0rYd3TP4+h5wHAMU505856MF8kftyPABbm9JJeB?= =?us-ascii?Q?dpiWgHZP30wA1kZGTYeqTY1Uz4yQCaM3OiLKCfY1AoYm/lq5tOwC7l3Y+PHB?= =?us-ascii?Q?Ss6yJpRjPjozMzvFj4r906YKezvopNbOZlPOh0n05lnLeh3uY6IK0Dr2juZg?= =?us-ascii?Q?p7NFKklJdI+of5eHYHLBZCn4xCgqWBnhVpprqMNrd8wUnmo2C+kLMj26qDBb?= =?us-ascii?Q?vSRSrAM8+s5SAvmxbG0uc5/y6F15n/0K4tR7zql2usNTXPj95st8wSqFRTrP?= =?us-ascii?Q?fxu8wX1o6E5UOVbP+9P4do1VRY2QD1p+10TLGPOwE8TMlUsE/2v348wpQhIV?= =?us-ascii?Q?eDiQ9lIcZIFBQDCWtlOWGQNrRaibQ56Vq6c1Z6mFFE26+c+RYHf5yDJCg=3D?= =?us-ascii?Q?=3D?= X-Microsoft-Exchange-Diagnostics: 1;MWHPR07MB3469;6:HDXAywp2X8oYWH9guCLau4p3kQIaSnHUImpCiyRWEPSA+HM30RQKc3T0BcvZUWlSc6418+cv7fQ5UBS0rNMxT59cVT5mmDH1SWOpPzrzE+Kyb3dpTY+zLMg2Q/EiamCi1xLkOftw4Nqb0e1IZTLdCUWYfklmpeu7h/r1hRZ3lpToFoj2EqL7vcdodOHl5/N2MxMGsmtum837XInX5aAv2Y2LEMx4NslHJKrEi8FsnMT1Ily61Mq/yhyud0aBkpLGV2xniKfDaHny+KX/R0MF4CkpszSqS04fe5mihMb2kGx6OwNXqK5CKf5EMMyGj+GMy8Jwlb/NaYc5NgHuuHIIhzMH5qN7J/sDJ3xoLUMB+9nRt3KlpduAvbtv6km07eXZRDp3c68LZ9P7Dz3dHA8/BM/kQb5Kjxf3rRemONNw634m7yowaH+AEJSlcdZh/a9RKbRQXSV3SiG39fpvU6YXV9K3bQBUAWo/5p8MwSbwdMBfITRXRpBr8hBpOp/XJ1hrTu7XG82yRhnfKKOWS0Y6uQ==;5:M/b9fpVZYBAPxsx+R3/hqYERXXFeeU/RxEU50GBM6C30SpTX+ICqF0J/nBLAtLdjenfLiVnSP5V2+69bc+0KHHsIQp73k/7Uk/mVdXa4/vyrbqC33WVA+I8XEpwOgf6C5MhxBAK3c7XUSrRaBg9NLg==;24:kZM4MRNZEWiFsxfeCeuRTA2MTloL2a6FVoR8NzJTY1eO5WZvBH7ebKxx52EzmbGruoj+yKlWfbGcY31P7L3j8sRWVQ9rb23DHedoVzs44Nc= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;MWHPR07MB3469;7:PhOmHJxvhZJouJaEai7Oz8TH7rqECHEjFQnkYjJnO6PCPXSHNSgB7nIgDAf8W2mOUYx0Ms1G6t2jK5aDwRoCgnxng/+ZL71mKIV4Vhnb/HAoccNbPzInX6Uw/k9oxdh7zg3gky6M1YP+JLwGGMTs/RYlfwhGXDsQCl4nvl+AI8r/1iiu8p7hPYvJUcyLZbKkt9G7ejXtYTxO9uuhioUOV9Zy3JPTJ1dp6V1pxbyMnOOoqt/jyKnXd0gg45yZNCD3+epfCcHEIChHTUOn42/Dz5TgTGFMqzdTP46uFZ2XeGNbhFAoBv33O2aQ+Ey7ohza24j1O/5/WUyn2UjrFuZvMQ== X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 May 2017 21:45:10.1650 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR07MB3469 X-SW-Source: 2017-05/txt/msg00216.txt.bz2 --=-0VWlOjOn6l+gJuwNSf3P Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8bit Content-length: 2615 On Tue, 2017-05-09 at 08:45 +0530, Siddhesh Poyarekar wrote: > On Wednesday 03 May 2017 07:31 PM, Szabolcs Nagy wrote: > > > > if it turns out that a single generic memcpy does not work > > it makes more sense to me to organize the code differently: > > if we expect the generic memcpy to diverge from the thunderx > > one then it's better not to use the same code with ifdefs, but > > keep them separate, so the thunderx variant can be maintained > > independently by whoever cares about thunderx. > If that is the case then I think Steve might be better off posting a > patch with the thunderx implementation being independent of the stock > aarch64 implementation while Wilco does his investigation.  That way > we > don't scramble for a patch late in the 2.26 cycle - there's about a > month and a half left. > > Siddhesh That sounds reasonable to me.  Here is a patch that contains a separate memcpy_thunderx implementation.  I still have some (minor) changes to the generic memcpy.S file.  One change is to use macros for the function names so that the generic multiarch memcpy can include the standard non-multiarch version.  The other is to change a couple of internal labels to external labels.  This change isn't absolutely necessary but it is helpful in the thunderx memcpy where the branches are slightly different and I would like to keep the thunderx memcpy and the generic memcpy as similar as possible so that when a change happens in one or the other it is easy to compare the two versions.  I don't believe using different label types affects the generated code at all and personally, I find named labels easier to read than the internal numbered labels.  Being able to compare the two memcpy's is also why I kept the THUNDERX ifdef in memcpy_thunderx.S even though it is always defined there, so that the intended differences are explicit when comparing the two versions of memcpy. Tested on the top-of-tree sources with no regressions. Steve Ellcey sellcey@cavium.com 2017-05-09  Steve Ellcey   * sysdeps/aarch64/memcpy.S (MEMMOVE, MEMCPY): New macros. (memmove): Use MEMMOVE for name. (memcpy): Use MEMCPY for name.  Change internal labels to external labels. * sysdeps/aarch64/multiarch/Makefile: New file. * sysdeps/aarch64/multiarch/ifunc-impl-list.c: Likewise. * sysdeps/aarch64/multiarch/init-arch.h: Likewise. * sysdeps/aarch64/multiarch/memcpy.c: Likewise. * sysdeps/aarch64/multiarch/memcpy_generic.S: Likewise. * sysdeps/aarch64/multiarch/memcpy_thunderx.S: Likewise. * sysdeps/aarch64/multiarch/memmove.c: Likewise. --=-0VWlOjOn6l+gJuwNSf3P Content-Disposition: attachment; filename="ifunc.patch" Content-Type: text/x-patch; name="ifunc.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 Content-length: 26190 ZGlmZiAtLWdpdCBhL3N5c2RlcHMvYWFyY2g2NC9tZW1jcHkuUyBiL3N5c2Rl cHMvYWFyY2g2NC9tZW1jcHkuUwppbmRleCAyOWFmOGIxLi44OGEzYjkwIDEw MDY0NAotLS0gYS9zeXNkZXBzL2FhcmNoNjQvbWVtY3B5LlMKKysrIGIvc3lz ZGVwcy9hYXJjaDY0L21lbWNweS5TCkBAIC01OSw3ICs1OSwxNCBAQAogICAg T3ZlcmxhcHBpbmcgbGFyZ2UgZm9yd2FyZCBtZW1tb3ZlcyB1c2UgYSBsb29w IHRoYXQgY29waWVzIGJhY2t3YXJkcy4KICovCiAKLUVOVFJZX0FMSUdOICht ZW1tb3ZlLCA2KQorI2lmbmRlZiBNRU1NT1ZFCisjIGRlZmluZSBNRU1NT1ZF IG1lbW1vdmUKKyNlbmRpZgorI2lmbmRlZiBNRU1DUFkKKyMgZGVmaW5lIE1F TUNQWSBtZW1jcHkKKyNlbmRpZgorCitFTlRSWV9BTElHTiAoTUVNTU9WRSwg NikKIAogCURFTE9VU0UgKDApCiAJREVMT1VTRSAoMSkKQEAgLTcxLDkgKzc4 LDkgQEAgRU5UUllfQUxJR04gKG1lbW1vdmUsIDYpCiAJYi5sbwlMKG1vdmVf bG9uZykKIAogCS8qIENvbW1vbiBjYXNlIGZhbGxzIHRocm91Z2ggaW50byBt ZW1jcHkuICAqLwotRU5EIChtZW1tb3ZlKQotbGliY19oaWRkZW5fYnVpbHRp bl9kZWYgKG1lbW1vdmUpCi1FTlRSWSAobWVtY3B5KQorRU5EIChNRU1NT1ZF KQorbGliY19oaWRkZW5fYnVpbHRpbl9kZWYgKE1FTU1PVkUpCitFTlRSWSAo TUVNQ1BZKQogCiAJREVMT1VTRSAoMCkKIAlERUxPVVNFICgxKQpAQCAtMTY5 LDggKzE3Niw4IEBAIEwoY29weV9sb25nKToKIAlsZHAJQ19sLCBDX2gsIFtz cmMsIDQ4XQogCWxkcAlEX2wsIERfaCwgW3NyYywgNjRdIQogCXN1YnMJY291 bnQsIGNvdW50LCAxMjggKyAxNgkvKiBUZXN0IGFuZCByZWFkanVzdCBjb3Vu dC4gICovCi0JYi5scwkyZgotMToKKwliLmxzCUwobGFzdDY0KQorTChsb29w NjQpOgogCXN0cAlBX2wsIEFfaCwgW2RzdCwgMTZdCiAJbGRwCUFfbCwgQV9o LCBbc3JjLCAxNl0KIAlzdHAJQl9sLCBCX2gsIFtkc3QsIDMyXQpAQCAtMTgw LDEyICsxODcsMTIgQEAgTChjb3B5X2xvbmcpOgogCXN0cAlEX2wsIERfaCwg W2RzdCwgNjRdIQogCWxkcAlEX2wsIERfaCwgW3NyYywgNjRdIQogCXN1YnMJ Y291bnQsIGNvdW50LCA2NAotCWIuaGkJMWIKKwliLmhpCUwobG9vcDY0KQog CiAJLyogV3JpdGUgdGhlIGxhc3QgZnVsbCBzZXQgb2YgNjQgYnl0ZXMuICBU aGUgcmVtYWluZGVyIGlzIGF0IG1vc3QgNjQKIAkgICBieXRlcywgc28gaXQg aXMgc2FmZSB0byBhbHdheXMgY29weSA2NCBieXRlcyBmcm9tIHRoZSBlbmQg ZXZlbiBpZgogCSAgIHRoZXJlIGlzIGp1c3QgMSBieXRlIGxlZnQuICAqLwot MjoKK0wobGFzdDY0KToKIAlsZHAJRV9sLCBFX2gsIFtzcmNlbmQsIC02NF0K IAlzdHAJQV9sLCBBX2gsIFtkc3QsIDE2XQogCWxkcAlBX2wsIEFfaCwgW3Ny Y2VuZCwgLTQ4XQpAQCAtMjU2LDUgKzI2Myw1IEBAIEwobW92ZV9sb25nKToK IAlzdHAJQ19sLCBDX2gsIFtkc3Rpbl0KIDM6CXJldAogCi1FTkQgKG1lbWNw eSkKLWxpYmNfaGlkZGVuX2J1aWx0aW5fZGVmIChtZW1jcHkpCitFTkQgKE1F TUNQWSkKK2xpYmNfaGlkZGVuX2J1aWx0aW5fZGVmIChNRU1DUFkpCmRpZmYg LS1naXQgYS9zeXNkZXBzL2FhcmNoNjQvbXVsdGlhcmNoL01ha2VmaWxlIGIv c3lzZGVwcy9hYXJjaDY0L211bHRpYXJjaC9NYWtlZmlsZQppbmRleCBlNjlk ZTI5Li43OGQ1MmM3IDEwMDY0NAotLS0gYS9zeXNkZXBzL2FhcmNoNjQvbXVs dGlhcmNoL01ha2VmaWxlCisrKyBiL3N5c2RlcHMvYWFyY2g2NC9tdWx0aWFy Y2gvTWFrZWZpbGUKQEAgLTAsMCArMSwzIEBACitpZmVxICgkKHN1YmRpciks c3RyaW5nKQorc3lzZGVwX3JvdXRpbmVzICs9IG1lbWNweV9nZW5lcmljIG1l bWNweV90aHVuZGVyeAorZW5kaWYKZGlmZiAtLWdpdCBhL3N5c2RlcHMvYWFy Y2g2NC9tdWx0aWFyY2gvaWZ1bmMtaW1wbC1saXN0LmMgYi9zeXNkZXBzL2Fh cmNoNjQvbXVsdGlhcmNoL2lmdW5jLWltcGwtbGlzdC5jCmluZGV4IGU2OWRl MjkuLmM0ZjIzZGYgMTAwNjQ0Ci0tLSBhL3N5c2RlcHMvYWFyY2g2NC9tdWx0 aWFyY2gvaWZ1bmMtaW1wbC1saXN0LmMKKysrIGIvc3lzZGVwcy9hYXJjaDY0 L211bHRpYXJjaC9pZnVuYy1pbXBsLWxpc3QuYwpAQCAtMCwwICsxLDUxIEBA CisvKiBFbnVtZXJhdGUgYXZhaWxhYmxlIElGVU5DIGltcGxlbWVudGF0aW9u cyBvZiBhIGZ1bmN0aW9uLiAgQUFSQ0g2NCB2ZXJzaW9uLgorICAgQ29weXJp Z2h0IChDKSAyMDE3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgor ICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisK KyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor ICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGlj ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K KworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh bnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2VyIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAg WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExl c3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRoIHRo ZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHNlZQorICAgPGh0dHA6Ly93d3cu Z251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2luY2x1ZGUgPGFzc2VydC5o PgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHdjaGFyLmg+Cisj aW5jbHVkZSA8bGRzb2RlZnMuaD4KKyNpbmNsdWRlIDxpZnVuYy1pbXBsLWxp c3QuaD4KKyNpbmNsdWRlIDxpbml0LWFyY2guaD4KKyNpbmNsdWRlIDxzdGRp by5oPgorCisvKiBNYXhpbXVtIG51bWJlciBvZiBJRlVOQyBpbXBsZW1lbnRh dGlvbnMuICAqLworI2RlZmluZSBNQVhfSUZVTkMJMgorCitzaXplX3QKK19f bGliY19pZnVuY19pbXBsX2xpc3QgKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVj dCBsaWJjX2lmdW5jX2ltcGwgKmFycmF5LAorCQkJc2l6ZV90IG1heCkKK3sK KyAgYXNzZXJ0IChtYXggPj0gTUFYX0lGVU5DKTsKKworICBzaXplX3QgaSA9 IDA7CisKKyAgSU5JVF9BUkNIICgpOworCisgIC8qIFN1cHBvcnQgc3lzZGVw cy9hYXJjaDY0L211bHRpYXJjaC9tZW1jcHkuYyBhbmQgbWVtbW92ZS5jLiAg Ki8KKyAgSUZVTkNfSU1QTCAoaSwgbmFtZSwgbWVtY3B5LAorCSAgICAgIElG VU5DX0lNUExfQUREIChhcnJheSwgaSwgbWVtY3B5LCBJU19USFVOREVSWCAo bWlkciksCisJCQkgICAgICBfX21lbWNweV90aHVuZGVyeCkKKwkgICAgICBJ RlVOQ19JTVBMX0FERCAoYXJyYXksIGksIG1lbWNweSwgMSwgX19tZW1jcHlf Z2VuZXJpYykpCisgIElGVU5DX0lNUEwgKGksIG5hbWUsIG1lbW1vdmUsCisJ ICAgICAgSUZVTkNfSU1QTF9BREQgKGFycmF5LCBpLCBtZW1tb3ZlLCBJU19U SFVOREVSWCAobWlkciksCisJCQkgICAgICBfX21lbW1vdmVfdGh1bmRlcngp CisJICAgICAgSUZVTkNfSU1QTF9BREQgKGFycmF5LCBpLCBtZW1tb3ZlLCAx LCBfX21lbW1vdmVfZ2VuZXJpYykpCisKKyAgcmV0dXJuIGk7Cit9CmRpZmYg LS1naXQgYS9zeXNkZXBzL2FhcmNoNjQvbXVsdGlhcmNoL2luaXQtYXJjaC5o IGIvc3lzZGVwcy9hYXJjaDY0L211bHRpYXJjaC9pbml0LWFyY2guaAppbmRl eCBlNjlkZTI5Li4zYWY0NDJjIDEwMDY0NAotLS0gYS9zeXNkZXBzL2FhcmNo NjQvbXVsdGlhcmNoL2luaXQtYXJjaC5oCisrKyBiL3N5c2RlcHMvYWFyY2g2 NC9tdWx0aWFyY2gvaW5pdC1hcmNoLmgKQEAgLTAsMCArMSwyMyBAQAorLyog RGVmaW5lIElOSVRfQVJDSCBzbyB0aGF0IG1pZHIgaXMgaW5pdGlhbGl6ZWQg YmVmb3JlIHVzZSBieSBJRlVOQ3MuCisgICBUaGlzIGZpbGUgaXMgcGFydCBv ZiB0aGUgR05VIEMgTGlicmFyeS4KKyAgIENvcHlyaWdodCAoQykgMjAxNyBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhlIEdOVSBD IExpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFz IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl aXRoZXIKKyAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05V IEMgTGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1F UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhh dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg UHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJh cnk7IGlmIG5vdCwgc2VlCisgICA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vu c2VzLz4uICAqLworCisjaW5jbHVkZSA8bGRzb2RlZnMuaD4KKworI2RlZmlu ZSBJTklUX0FSQ0goKQkJCQlcCisgIHVpbnQ2NF90IF9fYXR0cmlidXRlX18o KHVudXNlZCkpIG1pZHIgPQlcCisgICAgR0xSTyhkbF9hYXJjaDY0X2NwdV9m ZWF0dXJlcykubWlkcl9lbDE7CmRpZmYgLS1naXQgYS9zeXNkZXBzL2FhcmNo NjQvbXVsdGlhcmNoL21lbWNweS5jIGIvc3lzZGVwcy9hYXJjaDY0L211bHRp YXJjaC9tZW1jcHkuYwppbmRleCBlNjlkZTI5Li45ZjczZWZiIDEwMDY0NAot LS0gYS9zeXNkZXBzL2FhcmNoNjQvbXVsdGlhcmNoL21lbWNweS5jCisrKyBi L3N5c2RlcHMvYWFyY2g2NC9tdWx0aWFyY2gvbWVtY3B5LmMKQEAgLTAsMCAr MSwzOSBAQAorLyogTXVsdGlwbGUgdmVyc2lvbnMgb2YgbWVtY3B5LiBBQVJD SDY0IHZlcnNpb24uCisgICBDb3B5cmlnaHQgKEMpIDIwMTcgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBUaGlzIGZpbGUgaXMgcGFydCBv ZiB0aGUgR05VIEMgTGlicmFyeS4KKworICAgVGhlIEdOVSBDIExpYnJhcnkg aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg TGVzc2VyIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFzIHB1Ymxpc2hl ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAg IHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp b24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgR05VIEMgTGlicmFy eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJ TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUgR05VCisgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm b3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2 ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg ICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IGlmIG5v dCwgc2VlCisgICA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAq LworCisvKiBEZWZpbmUgbXVsdGlwbGUgdmVyc2lvbnMgb25seSBmb3IgdGhl IGRlZmluaXRpb24gaW4gbGliYy4gICovCisKKyNpZiBJU19JTiAobGliYykK Ky8qIFJlZGVmaW5lIG1lbWNweSBzbyB0aGF0IHRoZSBjb21waWxlciB3b24n dCBjb21wbGFpbiBhYm91dCB0aGUgdHlwZQorICAgbWlzbWF0Y2ggd2l0aCB0 aGUgSUZVTkMgc2VsZWN0b3IgaW4gc3Ryb25nX2FsaWFzLCBiZWxvdy4gICov CisjIHVuZGVmIG1lbWNweQorIyBkZWZpbmUgbWVtY3B5IF9fcmVkaXJlY3Rf bWVtY3B5CisjIGluY2x1ZGUgPHN0cmluZy5oPgorIyBpbmNsdWRlIDxpbml0 LWFyY2guaD4KKworZXh0ZXJuIF9fdHlwZW9mIChfX3JlZGlyZWN0X21lbWNw eSkgX19saWJjX21lbWNweTsKKworZXh0ZXJuIF9fdHlwZW9mIChfX3JlZGly ZWN0X21lbWNweSkgX19tZW1jcHlfZ2VuZXJpYyBhdHRyaWJ1dGVfaGlkZGVu OworZXh0ZXJuIF9fdHlwZW9mIChfX3JlZGlyZWN0X21lbWNweSkgX19tZW1j cHlfdGh1bmRlcnggYXR0cmlidXRlX2hpZGRlbjsKKworbGliY19pZnVuYyAo X19saWJjX21lbWNweSwKKyAgICAgICAgICAgIElTX1RIVU5ERVJYIChtaWRy KSA/IF9fbWVtY3B5X3RodW5kZXJ4IDogX19tZW1jcHlfZ2VuZXJpYyk7CisK KyMgdW5kZWYgbWVtY3B5CitzdHJvbmdfYWxpYXMgKF9fbGliY19tZW1jcHks IG1lbWNweSk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL3N5c2RlcHMvYWFyY2g2 NC9tdWx0aWFyY2gvbWVtY3B5X2dlbmVyaWMuUyBiL3N5c2RlcHMvYWFyY2g2 NC9tdWx0aWFyY2gvbWVtY3B5X2dlbmVyaWMuUwppbmRleCBlNjlkZTI5Li4w NDFhNzc5IDEwMDY0NAotLS0gYS9zeXNkZXBzL2FhcmNoNjQvbXVsdGlhcmNo L21lbWNweV9nZW5lcmljLlMKKysrIGIvc3lzZGVwcy9hYXJjaDY0L211bHRp YXJjaC9tZW1jcHlfZ2VuZXJpYy5TCkBAIC0wLDAgKzEsNDIgQEAKKy8qIEEg R2VuZXJpYyBPcHRpbWl6ZWQgbWVtY3B5IGltcGxlbWVudGF0aW9uIGZvciBB QVJDSDY0LgorICAgQ29weXJpZ2h0IChDKSAyMDE3IEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl IEdOVSBDIExpYnJhcnkuCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZy ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor ICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl ciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJz aW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh bnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMg ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1 bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl IEdOVQorICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg Y29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGlj ZW5zZSBhbG9uZyB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHNl ZQorICAgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKwor LyogVGhlIGFjdHVhbCBtZW1jcHkgYW5kIG1lbW1vdmUgY29kZSBpcyBpbiAu Li9tZW1jcHkuUy4gIElmIHdlIGFyZQorICAgYnVpbGRpbmcgbGliYyB0aGlz IGZpbGUgZGVmaW5lcyBfX21lbWNweV9nZW5lcmljIGFuZCBfX21lbW1vdmVf Z2VuZXJpYy4KKyAgIE90aGVyd2lzZSB0aGUgaW5jbHVkZSBvZiAuLi9tZW1j cHkuUyB3aWxsIGRlZmluZSB0aGUgbm9ybWFsIF9fbWVtY3B5CisgICBhbmRf X21lbW1vdmUgZW50cnkgcG9pbnRzLiAgKi8KKworI2luY2x1ZGUgPHN5c2Rl cC5oPgorCisjaWYgSVNfSU4gKGxpYmMpCisKKyMgZGVmaW5lIE1FTUNQWSBf X21lbWNweV9nZW5lcmljCisjIGRlZmluZSBNRU1NT1ZFIF9fbWVtbW92ZV9n ZW5lcmljCisKKy8qIERvIG5vdCBoaWRlIHRoZSBnZW5lcmljIHZlcnNpb25z IG9mIG1lbWNweSBhbmQgbWVtbW92ZSwgd2UgdXNlIHRoZW0KKyAgIGludGVy bmFsbHkuICAqLworIyB1bmRlZiBsaWJjX2hpZGRlbl9idWlsdGluX2RlZgor IyBkZWZpbmUgbGliY19oaWRkZW5fYnVpbHRpbl9kZWYobmFtZSkKKworLyog SXQgZG9lc24ndCBtYWtlIHNlbnNlIHRvIHNlbmQgbGliYy1pbnRlcm5hbCBt ZW1jcHkgY2FsbHMgdGhyb3VnaCBhIFBMVC4gKi8KKwkuZ2xvYmwgX19HSV9t ZW1jcHk7IF9fR0lfbWVtY3B5ID0gX19tZW1jcHlfZ2VuZXJpYworCS5nbG9i bCBfX0dJX21lbW1vdmU7IF9fR0lfbWVtbW92ZSA9IF9fbWVtbW92ZV9nZW5l cmljCisKKyNlbmRpZgorCisjaW5jbHVkZSAiLi4vbWVtY3B5LlMiCmRpZmYg LS1naXQgYS9zeXNkZXBzL2FhcmNoNjQvbXVsdGlhcmNoL21lbWNweV90aHVu ZGVyeC5TIGIvc3lzZGVwcy9hYXJjaDY0L211bHRpYXJjaC9tZW1jcHlfdGh1 bmRlcnguUwppbmRleCBlNjlkZTI5Li41YWM5ZTM0IDEwMDY0NAotLS0gYS9z eXNkZXBzL2FhcmNoNjQvbXVsdGlhcmNoL21lbWNweV90aHVuZGVyeC5TCisr KyBiL3N5c2RlcHMvYWFyY2g2NC9tdWx0aWFyY2gvbWVtY3B5X3RodW5kZXJ4 LlMKQEAgLTAsMCArMSwzMjYgQEAKKy8qIEEgVGh1bmRlcnggT3B0aW1pemVk IG1lbWNweSBpbXBsZW1lbnRhdGlvbiBmb3IgQUFSQ0g2NC4KKyAgIENvcHly aWdodCAoQykgMjAxNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4K KworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnku CisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp YworICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICB2ZXJzaW9uIDIuMSBvZiB0aGUg TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv bi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGVzc2Vy IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKwor ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V IExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSBhbG9uZyB3aXRo IHRoZSBHTlUgQyBMaWJyYXJ5OyBpZiBub3QsIHNlZQorICAgPGh0dHA6Ly93 d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyogVGhlIGFjdHVhbCBj b2RlIGluIHRoaXMgbWVtY3B5IGFuZCBtZW1tb3ZlIHNob3VsZCBiZSBpZGVu dGljYWwgdG8gdGhlCisgICBnZW5lcmljIHZlcnNpb24gZXhjZXB0IGZvciB0 aGUgY29kZSB1bmRlciAnI2lmZGVmIFRIVU5ERVJYJy4gIFRoaXMgaXMKKyAg IHRvIG1ha2UgaXMgZWFzaWVyIHRvIGtlZXAgdGhpcyB2ZXJzaW9uIGFuZCB0 aGUgZ2VuZXJpYyB2ZXJzaW9uIGluIHN5bmMKKyAgIGZvciBjaGFuZ2VzIHRo YXQgYXJlIG5vdCBzcGVjaWZpYyB0byB0aHVuZGVyeC4gICovCisKKyNpbmNs dWRlIDxzeXNkZXAuaD4KKworLyogQXNzdW1wdGlvbnM6CisgKgorICogQVJN djgtYSwgQUFyY2g2NCwgdW5hbGlnbmVkIGFjY2Vzc2VzLgorICoKKyAqLwor CisjZGVmaW5lIGRzdGluCXgwCisjZGVmaW5lIHNyYwl4MQorI2RlZmluZSBj b3VudAl4MgorI2RlZmluZSBkc3QJeDMKKyNkZWZpbmUgc3JjZW5kCXg0Cisj ZGVmaW5lIGRzdGVuZAl4NQorI2RlZmluZSBBX2wJeDYKKyNkZWZpbmUgQV9s dwl3NgorI2RlZmluZSBBX2gJeDcKKyNkZWZpbmUgQV9odwl3NworI2RlZmlu ZSBCX2wJeDgKKyNkZWZpbmUgQl9sdwl3OAorI2RlZmluZSBCX2gJeDkKKyNk ZWZpbmUgQ19sCXgxMAorI2RlZmluZSBDX2gJeDExCisjZGVmaW5lIERfbAl4 MTIKKyNkZWZpbmUgRF9oCXgxMworI2RlZmluZSBFX2wJc3JjCisjZGVmaW5l IEVfaAljb3VudAorI2RlZmluZSBGX2wJc3JjZW5kCisjZGVmaW5lIEZfaAlk c3QKKyNkZWZpbmUgR19sCWNvdW50CisjZGVmaW5lIEdfaAlkc3QKKyNkZWZp bmUgdG1wMQl4MTQKKworLyogQ29waWVzIGFyZSBzcGxpdCBpbnRvIDMgbWFp biBjYXNlczogc21hbGwgY29waWVzIG9mIHVwIHRvIDE2IGJ5dGVzLAorICAg bWVkaXVtIGNvcGllcyBvZiAxNy4uOTYgYnl0ZXMgd2hpY2ggYXJlIGZ1bGx5 IHVucm9sbGVkLiBMYXJnZSBjb3BpZXMKKyAgIG9mIG1vcmUgdGhhbiA5NiBi eXRlcyBhbGlnbiB0aGUgZGVzdGluYXRpb24gYW5kIHVzZSBhbiB1bnJvbGxl ZCBsb29wCisgICBwcm9jZXNzaW5nIDY0IGJ5dGVzIHBlciBpdGVyYXRpb24u CisgICBJbiBvcmRlciB0byBzaGFyZSBjb2RlIHdpdGggbWVtbW92ZSwgc21h bGwgYW5kIG1lZGl1bSBjb3BpZXMgcmVhZCBhbGwKKyAgIGRhdGEgYmVmb3Jl IHdyaXRpbmcsIGFsbG93aW5nIGFueSBraW5kIG9mIG92ZXJsYXAuIFNvIHNt YWxsLCBtZWRpdW0KKyAgIGFuZCBsYXJnZSBiYWNrd2FyZHMgbWVtbW92ZXMg YXJlIGhhbmRsZWQgYnkgZmFsbGluZyB0aHJvdWdoIGludG8gbWVtY3B5Lgor ICAgT3ZlcmxhcHBpbmcgbGFyZ2UgZm9yd2FyZCBtZW1tb3ZlcyB1c2UgYSBs b29wIHRoYXQgY29waWVzIGJhY2t3YXJkcy4KKyovCisKKyNpZm5kZWYgTUVN TU9WRQorIyBkZWZpbmUgTUVNTU9WRSBtZW1tb3ZlCisjZW5kaWYKKyNpZm5k ZWYgTUVNQ1BZCisjIGRlZmluZSBNRU1DUFkgbWVtY3B5CisjZW5kaWYKKwor I2lmIElTX0lOIChsaWJjKQorCisjIHVuZGVmIE1FTUNQWQorIyBkZWZpbmUg TUVNQ1BZIF9fbWVtY3B5X3RodW5kZXJ4CisjIHVuZGVmIE1FTU1PVkUKKyMg ZGVmaW5lIE1FTU1PVkUgX19tZW1tb3ZlX3RodW5kZXJ4CisjIGRlZmluZSBV U0VfVEhVTkRFUlgKKworRU5UUllfQUxJR04gKE1FTU1PVkUsIDYpCisKKwlE RUxPVVNFICgwKQorCURFTE9VU0UgKDEpCisJREVMT1VTRSAoMikKKworCXN1 Ygl0bXAxLCBkc3Rpbiwgc3JjCisJY21wCWNvdW50LCA5NgorCWNjbXAJdG1w MSwgY291bnQsIDIsIGhpCisJYi5sbwlMKG1vdmVfbG9uZykKKworCS8qIENv bW1vbiBjYXNlIGZhbGxzIHRocm91Z2ggaW50byBtZW1jcHkuICAqLworRU5E IChNRU1NT1ZFKQorbGliY19oaWRkZW5fYnVpbHRpbl9kZWYgKE1FTU1PVkUp CitFTlRSWSAoTUVNQ1BZKQorCisJREVMT1VTRSAoMCkKKwlERUxPVVNFICgx KQorCURFTE9VU0UgKDIpCisKKwlwcmZtCVBMREwxS0VFUCwgW3NyY10KKwlh ZGQJc3JjZW5kLCBzcmMsIGNvdW50CisJYWRkCWRzdGVuZCwgZHN0aW4sIGNv dW50CisJY21wCWNvdW50LCAxNgorCWIubHMJTChjb3B5MTYpCisJY21wCWNv dW50LCA5NgorCWIuaGkJTChjb3B5X2xvbmcpCisKKwkvKiBNZWRpdW0gY29w aWVzOiAxNy4uOTYgYnl0ZXMuICAqLworCXN1Ygl0bXAxLCBjb3VudCwgMQor CWxkcAlBX2wsIEFfaCwgW3NyY10KKwl0Ym56CXRtcDEsIDYsIEwoY29weTk2 KQorCWxkcAlEX2wsIERfaCwgW3NyY2VuZCwgLTE2XQorCXRiegl0bXAxLCA1 LCAxZgorCWxkcAlCX2wsIEJfaCwgW3NyYywgMTZdCisJbGRwCUNfbCwgQ19o LCBbc3JjZW5kLCAtMzJdCisJc3RwCUJfbCwgQl9oLCBbZHN0aW4sIDE2XQor CXN0cAlDX2wsIENfaCwgW2RzdGVuZCwgLTMyXQorMToKKwlzdHAJQV9sLCBB X2gsIFtkc3Rpbl0KKwlzdHAJRF9sLCBEX2gsIFtkc3RlbmQsIC0xNl0KKwly ZXQKKworCS5wMmFsaWduIDQKKwkvKiBTbWFsbCBjb3BpZXM6IDAuLjE2IGJ5 dGVzLiAgKi8KK0woY29weTE2KToKKwljbXAJY291bnQsIDgKKwliLmxvCTFm CisJbGRyCUFfbCwgW3NyY10KKwlsZHIJQV9oLCBbc3JjZW5kLCAtOF0KKwlz dHIJQV9sLCBbZHN0aW5dCisJc3RyCUFfaCwgW2RzdGVuZCwgLThdCisJcmV0 CisJLnAyYWxpZ24gNAorMToKKwl0YnoJY291bnQsIDIsIDFmCisJbGRyCUFf bHcsIFtzcmNdCisJbGRyCUFfaHcsIFtzcmNlbmQsIC00XQorCXN0cglBX2x3 LCBbZHN0aW5dCisJc3RyCUFfaHcsIFtkc3RlbmQsIC00XQorCXJldAorCisJ LyogQ29weSAwLi4zIGJ5dGVzLiAgVXNlIGEgYnJhbmNobGVzcyBzZXF1ZW5j ZSB0aGF0IGNvcGllcyB0aGUgc2FtZQorCSAgIGJ5dGUgMyB0aW1lcyBpZiBj b3VudD09MSwgb3IgdGhlIDJuZCBieXRlIHR3aWNlIGlmIGNvdW50PT0yLiAg Ki8KKzE6CisJY2J6CWNvdW50LCAyZgorCWxzcgl0bXAxLCBjb3VudCwgMQor CWxkcmIJQV9sdywgW3NyY10KKwlsZHJiCUFfaHcsIFtzcmNlbmQsIC0xXQor CWxkcmIJQl9sdywgW3NyYywgdG1wMV0KKwlzdHJiCUFfbHcsIFtkc3Rpbl0K KwlzdHJiCUJfbHcsIFtkc3RpbiwgdG1wMV0KKwlzdHJiCUFfaHcsIFtkc3Rl bmQsIC0xXQorMjoJcmV0CisKKwkucDJhbGlnbiA0CisJLyogQ29weSA2NC4u OTYgYnl0ZXMuICBDb3B5IDY0IGJ5dGVzIGZyb20gdGhlIHN0YXJ0IGFuZAor CSAgIDMyIGJ5dGVzIGZyb20gdGhlIGVuZC4gICovCitMKGNvcHk5Nik6CisJ bGRwCUJfbCwgQl9oLCBbc3JjLCAxNl0KKwlsZHAJQ19sLCBDX2gsIFtzcmMs IDMyXQorCWxkcAlEX2wsIERfaCwgW3NyYywgNDhdCisJbGRwCUVfbCwgRV9o LCBbc3JjZW5kLCAtMzJdCisJbGRwCUZfbCwgRl9oLCBbc3JjZW5kLCAtMTZd CisJc3RwCUFfbCwgQV9oLCBbZHN0aW5dCisJc3RwCUJfbCwgQl9oLCBbZHN0 aW4sIDE2XQorCXN0cAlDX2wsIENfaCwgW2RzdGluLCAzMl0KKwlzdHAJRF9s LCBEX2gsIFtkc3RpbiwgNDhdCisJc3RwCUVfbCwgRV9oLCBbZHN0ZW5kLCAt MzJdCisJc3RwCUZfbCwgRl9oLCBbZHN0ZW5kLCAtMTZdCisJcmV0CisKKwkv KiBBbGlnbiBEU1QgdG8gMTYgYnl0ZSBhbGlnbm1lbnQgc28gdGhhdCB3ZSBk b24ndCBjcm9zcyBjYWNoZSBsaW5lCisJICAgYm91bmRhcmllcyBvbiBib3Ro IGxvYWRzIGFuZCBzdG9yZXMuICBUaGVyZSBhcmUgYXQgbGVhc3QgOTYgYnl0 ZXMKKwkgICB0byBjb3B5LCBzbyBjb3B5IDE2IGJ5dGVzIHVuYWxpZ25lZCBh bmQgdGhlbiBhbGlnbi4gIFRoZSBsb29wCisJICAgY29waWVzIDY0IGJ5dGVz IHBlciBpdGVyYXRpb24gYW5kIHByZWZldGNoZXMgb25lIGl0ZXJhdGlvbiBh aGVhZC4gICovCisKKwkucDJhbGlnbiA0CitMKGNvcHlfbG9uZyk6CisKKyMg aWZkZWYgVVNFX1RIVU5ERVJYCisKKwkvKiBPbiB0aHVuZGVyeCwgbGFyZ2Ug bWVtY3B5J3MgYXJlIGhlbHBlZCBieSBzb2Z0d2FyZSBwcmVmZXRjaGluZy4K KwkgICBUaGlzIGxvb3AgaXMgaWRlbnRpY2FsIHRvIHRoZSBvbmUgYmVsb3cg aXQgYnV0IHdpdGggcHJlZmV0Y2hpbmcKKwkgICBpbnN0cnVjdGlvbnMgaW5j bHVkZWQuICBGb3IgbG9vcHMgdGhhdCBhcmUgbGVzcyB0aGFuIDMyNzY4IGJ5 dGVzLAorCSAgIHRoZSBwcmVmZXRjaGluZyBkb2VzIG5vdCBoZWxwIGFuZCBz bG93IHRoZSBjb2RlIGRvd24gc28gd2Ugb25seQorCSAgIHVzZSB0aGUgcHJl ZmV0Y2hpbmcgbG9vcCBmb3IgdGhlIGxhcmdlc3QgbWVtY3B5cy4gICovCisK KwljbXAJY291bnQsICMzMjc2OAorCWIubG8JTChjb3B5X2xvbmdfd2l0aG91 dF9wcmVmZXRjaCkKKwlhbmQJdG1wMSwgZHN0aW4sIDE1CisJYmljCWRzdCwg ZHN0aW4sIDE1CisJbGRwCURfbCwgRF9oLCBbc3JjXQorCXN1YglzcmMsIHNy YywgdG1wMQorCXByZm0JcGxkbDFzdHJtLCBbc3JjLCAzODRdCisJYWRkCWNv dW50LCBjb3VudCwgdG1wMQkvKiBDb3VudCBpcyBub3cgMTYgdG9vIGxhcmdl LiAgKi8KKwlsZHAJQV9sLCBBX2gsIFtzcmMsIDE2XQorCXN0cAlEX2wsIERf aCwgW2RzdGluXQorCWxkcAlCX2wsIEJfaCwgW3NyYywgMzJdCisJbGRwCUNf bCwgQ19oLCBbc3JjLCA0OF0KKwlsZHAJRF9sLCBEX2gsIFtzcmMsIDY0XSEK KwlzdWJzCWNvdW50LCBjb3VudCwgMTI4ICsgMTYJLyogVGVzdCBhbmQgcmVh ZGp1c3QgY291bnQuICAqLworCitMKHByZWZldGNoX2xvb3A2NCk6CisJdGJ6 CXNyYywgIzYsIDFmCisJcHJmbQlwbGRsMXN0cm0sIFtzcmMsIDUxMl0KKzE6 CisJc3RwCUFfbCwgQV9oLCBbZHN0LCAxNl0KKwlsZHAJQV9sLCBBX2gsIFtz cmMsIDE2XQorCXN0cAlCX2wsIEJfaCwgW2RzdCwgMzJdCisJbGRwCUJfbCwg Ql9oLCBbc3JjLCAzMl0KKwlzdHAJQ19sLCBDX2gsIFtkc3QsIDQ4XQorCWxk cAlDX2wsIENfaCwgW3NyYywgNDhdCisJc3RwCURfbCwgRF9oLCBbZHN0LCA2 NF0hCisJbGRwCURfbCwgRF9oLCBbc3JjLCA2NF0hCisJc3Vicwljb3VudCwg Y291bnQsIDY0CisJYi5oaQlMKHByZWZldGNoX2xvb3A2NCkKKwliCUwobGFz dDY0KQorCitMKGNvcHlfbG9uZ193aXRob3V0X3ByZWZldGNoKToKKyMgZW5k aWYKKworCWFuZAl0bXAxLCBkc3RpbiwgMTUKKwliaWMJZHN0LCBkc3Rpbiwg MTUKKwlsZHAJRF9sLCBEX2gsIFtzcmNdCisJc3ViCXNyYywgc3JjLCB0bXAx CisJYWRkCWNvdW50LCBjb3VudCwgdG1wMQkvKiBDb3VudCBpcyBub3cgMTYg dG9vIGxhcmdlLiAgKi8KKwlsZHAJQV9sLCBBX2gsIFtzcmMsIDE2XQorCXN0 cAlEX2wsIERfaCwgW2RzdGluXQorCWxkcAlCX2wsIEJfaCwgW3NyYywgMzJd CisJbGRwCUNfbCwgQ19oLCBbc3JjLCA0OF0KKwlsZHAJRF9sLCBEX2gsIFtz cmMsIDY0XSEKKwlzdWJzCWNvdW50LCBjb3VudCwgMTI4ICsgMTYJLyogVGVz dCBhbmQgcmVhZGp1c3QgY291bnQuICAqLworCWIubHMJTChsYXN0NjQpCitM KGxvb3A2NCk6CisJc3RwCUFfbCwgQV9oLCBbZHN0LCAxNl0KKwlsZHAJQV9s LCBBX2gsIFtzcmMsIDE2XQorCXN0cAlCX2wsIEJfaCwgW2RzdCwgMzJdCisJ bGRwCUJfbCwgQl9oLCBbc3JjLCAzMl0KKwlzdHAJQ19sLCBDX2gsIFtkc3Qs IDQ4XQorCWxkcAlDX2wsIENfaCwgW3NyYywgNDhdCisJc3RwCURfbCwgRF9o LCBbZHN0LCA2NF0hCisJbGRwCURfbCwgRF9oLCBbc3JjLCA2NF0hCisJc3Vi cwljb3VudCwgY291bnQsIDY0CisJYi5oaQlMKGxvb3A2NCkKKworCS8qIFdy aXRlIHRoZSBsYXN0IGZ1bGwgc2V0IG9mIDY0IGJ5dGVzLiAgVGhlIHJlbWFp bmRlciBpcyBhdCBtb3N0IDY0CisJICAgYnl0ZXMsIHNvIGl0IGlzIHNhZmUg dG8gYWx3YXlzIGNvcHkgNjQgYnl0ZXMgZnJvbSB0aGUgZW5kIGV2ZW4gaWYK KwkgICB0aGVyZSBpcyBqdXN0IDEgYnl0ZSBsZWZ0LiAgKi8KK0wobGFzdDY0 KToKKwlsZHAJRV9sLCBFX2gsIFtzcmNlbmQsIC02NF0KKwlzdHAJQV9sLCBB X2gsIFtkc3QsIDE2XQorCWxkcAlBX2wsIEFfaCwgW3NyY2VuZCwgLTQ4XQor CXN0cAlCX2wsIEJfaCwgW2RzdCwgMzJdCisJbGRwCUJfbCwgQl9oLCBbc3Jj ZW5kLCAtMzJdCisJc3RwCUNfbCwgQ19oLCBbZHN0LCA0OF0KKwlsZHAJQ19s LCBDX2gsIFtzcmNlbmQsIC0xNl0KKwlzdHAJRF9sLCBEX2gsIFtkc3QsIDY0 XQorCXN0cAlFX2wsIEVfaCwgW2RzdGVuZCwgLTY0XQorCXN0cAlBX2wsIEFf aCwgW2RzdGVuZCwgLTQ4XQorCXN0cAlCX2wsIEJfaCwgW2RzdGVuZCwgLTMy XQorCXN0cAlDX2wsIENfaCwgW2RzdGVuZCwgLTE2XQorCXJldAorCisJLnAy YWxpZ24gNAorTChtb3ZlX2xvbmcpOgorCWNiegl0bXAxLCAzZgorCisJYWRk CXNyY2VuZCwgc3JjLCBjb3VudAorCWFkZAlkc3RlbmQsIGRzdGluLCBjb3Vu dAorCisJLyogQWxpZ24gZHN0ZW5kIHRvIDE2IGJ5dGUgYWxpZ25tZW50IHNv IHRoYXQgd2UgZG9uJ3QgY3Jvc3MgY2FjaGUgbGluZQorCSAgIGJvdW5kYXJp ZXMgb24gYm90aCBsb2FkcyBhbmQgc3RvcmVzLiAgVGhlcmUgYXJlIGF0IGxl YXN0IDk2IGJ5dGVzCisJICAgdG8gY29weSwgc28gY29weSAxNiBieXRlcyB1 bmFsaWduZWQgYW5kIHRoZW4gYWxpZ24uICBUaGUgbG9vcAorCSAgIGNvcGll cyA2NCBieXRlcyBwZXIgaXRlcmF0aW9uIGFuZCBwcmVmZXRjaGVzIG9uZSBp dGVyYXRpb24gYWhlYWQuICAqLworCisJYW5kCXRtcDEsIGRzdGVuZCwgMTUK KwlsZHAJRF9sLCBEX2gsIFtzcmNlbmQsIC0xNl0KKwlzdWIJc3JjZW5kLCBz cmNlbmQsIHRtcDEKKwlzdWIJY291bnQsIGNvdW50LCB0bXAxCisJbGRwCUFf bCwgQV9oLCBbc3JjZW5kLCAtMTZdCisJc3RwCURfbCwgRF9oLCBbZHN0ZW5k LCAtMTZdCisJbGRwCUJfbCwgQl9oLCBbc3JjZW5kLCAtMzJdCisJbGRwCUNf bCwgQ19oLCBbc3JjZW5kLCAtNDhdCisJbGRwCURfbCwgRF9oLCBbc3JjZW5k LCAtNjRdIQorCXN1Yglkc3RlbmQsIGRzdGVuZCwgdG1wMQorCXN1YnMJY291 bnQsIGNvdW50LCAxMjgKKwliLmxzCTJmCisKKwlub3AKKzE6CisJc3RwCUFf bCwgQV9oLCBbZHN0ZW5kLCAtMTZdCisJbGRwCUFfbCwgQV9oLCBbc3JjZW5k LCAtMTZdCisJc3RwCUJfbCwgQl9oLCBbZHN0ZW5kLCAtMzJdCisJbGRwCUJf bCwgQl9oLCBbc3JjZW5kLCAtMzJdCisJc3RwCUNfbCwgQ19oLCBbZHN0ZW5k LCAtNDhdCisJbGRwCUNfbCwgQ19oLCBbc3JjZW5kLCAtNDhdCisJc3RwCURf bCwgRF9oLCBbZHN0ZW5kLCAtNjRdIQorCWxkcAlEX2wsIERfaCwgW3NyY2Vu ZCwgLTY0XSEKKwlzdWJzCWNvdW50LCBjb3VudCwgNjQKKwliLmhpCTFiCisK KwkvKiBXcml0ZSB0aGUgbGFzdCBmdWxsIHNldCBvZiA2NCBieXRlcy4gIFRo ZSByZW1haW5kZXIgaXMgYXQgbW9zdCA2NAorCSAgIGJ5dGVzLCBzbyBpdCBp cyBzYWZlIHRvIGFsd2F5cyBjb3B5IDY0IGJ5dGVzIGZyb20gdGhlIHN0YXJ0 IGV2ZW4gaWYKKwkgICB0aGVyZSBpcyBqdXN0IDEgYnl0ZSBsZWZ0LiAgKi8K KzI6CisJbGRwCUdfbCwgR19oLCBbc3JjLCA0OF0KKwlzdHAJQV9sLCBBX2gs IFtkc3RlbmQsIC0xNl0KKwlsZHAJQV9sLCBBX2gsIFtzcmMsIDMyXQorCXN0 cAlCX2wsIEJfaCwgW2RzdGVuZCwgLTMyXQorCWxkcAlCX2wsIEJfaCwgW3Ny YywgMTZdCisJc3RwCUNfbCwgQ19oLCBbZHN0ZW5kLCAtNDhdCisJbGRwCUNf bCwgQ19oLCBbc3JjXQorCXN0cAlEX2wsIERfaCwgW2RzdGVuZCwgLTY0XQor CXN0cAlHX2wsIEdfaCwgW2RzdGluLCA0OF0KKwlzdHAJQV9sLCBBX2gsIFtk c3RpbiwgMzJdCisJc3RwCUJfbCwgQl9oLCBbZHN0aW4sIDE2XQorCXN0cAlD X2wsIENfaCwgW2RzdGluXQorMzoJcmV0CisKK0VORCAoTUVNQ1BZKQorbGli Y19oaWRkZW5fYnVpbHRpbl9kZWYgKE1FTUNQWSkKKworI2VuZGlmCmRpZmYg LS1naXQgYS9zeXNkZXBzL2FhcmNoNjQvbXVsdGlhcmNoL21lbW1vdmUuYyBi L3N5c2RlcHMvYWFyY2g2NC9tdWx0aWFyY2gvbWVtbW92ZS5jCmluZGV4IGU2 OWRlMjkuLjM0YzZiMjkgMTAwNjQ0Ci0tLSBhL3N5c2RlcHMvYWFyY2g2NC9t dWx0aWFyY2gvbWVtbW92ZS5jCisrKyBiL3N5c2RlcHMvYWFyY2g2NC9tdWx0 aWFyY2gvbWVtbW92ZS5jCkBAIC0wLDAgKzEsMzkgQEAKKy8qIE11bHRpcGxl IHZlcnNpb25zIG9mIG1lbW1vdmUuIEFBUkNINjQgdmVyc2lvbi4KKyAgIENv cHlyaWdodCAoQykgMjAxNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu Yy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5 LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs aWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhl IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp b24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lU SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3Nl ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisK KyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0 aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCBzZWUKKyAgIDxodHRwOi8v d3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKy8qIERlZmluZSBtdWx0 aXBsZSB2ZXJzaW9ucyBvbmx5IGZvciB0aGUgZGVmaW5pdGlvbiBpbiBsaWJj LiAgKi8KKworI2lmIElTX0lOIChsaWJjKQorLyogUmVkZWZpbmUgbWVtbW92 ZSBzbyB0aGF0IHRoZSBjb21waWxlciB3b24ndCBjb21wbGFpbiBhYm91dCB0 aGUgdHlwZQorICAgbWlzbWF0Y2ggd2l0aCB0aGUgSUZVTkMgc2VsZWN0b3Ig aW4gc3Ryb25nX2FsaWFzLCBiZWxvdy4gICovCisjIHVuZGVmIG1lbW1vdmUK KyMgZGVmaW5lIG1lbW1vdmUgX19yZWRpcmVjdF9tZW1tb3ZlCisjIGluY2x1 ZGUgPHN0cmluZy5oPgorIyBpbmNsdWRlIDxpbml0LWFyY2guaD4KKworZXh0 ZXJuIF9fdHlwZW9mIChfX3JlZGlyZWN0X21lbW1vdmUpIF9fbGliY19tZW1t b3ZlOworCitleHRlcm4gX190eXBlb2YgKF9fcmVkaXJlY3RfbWVtbW92ZSkg X19tZW1tb3ZlX2dlbmVyaWMgYXR0cmlidXRlX2hpZGRlbjsKK2V4dGVybiBf X3R5cGVvZiAoX19yZWRpcmVjdF9tZW1tb3ZlKSBfX21lbW1vdmVfdGh1bmRl cnggYXR0cmlidXRlX2hpZGRlbjsKKworbGliY19pZnVuYyAoX19saWJjX21l bW1vdmUsCisgICAgICAgICAgICBJU19USFVOREVSWCAobWlkcikgPyBfX21l bW1vdmVfdGh1bmRlcnggOiBfX21lbW1vdmVfZ2VuZXJpYyk7CisKKyMgdW5k ZWYgbWVtbW92ZQorc3Ryb25nX2FsaWFzIChfX2xpYmNfbWVtbW92ZSwgbWVt bW92ZSk7CisjZW5kaWYK --=-0VWlOjOn6l+gJuwNSf3P--