From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dmta1001.nifty.com (mta-snd01011.nifty.com [106.153.227.43]) by sourceware.org (Postfix) with ESMTPS id 6D8FB3858D1E for ; Sun, 31 Dec 2023 06:57:14 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 6D8FB3858D1E Authentication-Results: sourceware.org; dmarc=fail (p=none dis=none) header.from=nifty.ne.jp Authentication-Results: sourceware.org; spf=fail smtp.mailfrom=nifty.ne.jp ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 6D8FB3858D1E Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=106.153.227.43 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1704005838; cv=none; b=FfCoZT6SoJ0BmEx7avS+TU8chz2YYAcjgcTDeI8LOLJ5WILpBjj6RhTbksbaX2So24/Wod+jfJHK6Hxh9HWW8ZN2ABwy2X51ViZlSKzXd5/LrKrQFF4fIqaSVoXJK0V8WY5m6GuneFR7Yocfp9p+PpQcxW7fWH4gQ720spv+nm0= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1704005838; c=relaxed/simple; bh=tFfpuF7lqigKNXtV8QbqaqBkgGhO+QkALjjK1WjLLOY=; h=Date:From:To:Subject:Message-Id:Mime-Version; b=vyGTVz0/8wRI8qKI9Ho4GfrPgZPfvF3QtdRkLZZ+bWTfEemwyOV34oHanJamjk0dqtQEkaYBBfWufORj5UKrpzyXnz+xOW01L2dgzssUFCP86ASkqkm/TEt+5H/5XVRvziJJHmnEP1EJY5twbHtTVIfJEtu3xgiDz0D0w6VB7LM= ARC-Authentication-Results: i=1; server2.sourceware.org Received: from HP-Z230 by dmta1001.nifty.com with ESMTP id <20231231065712071.UOCG.124194.HP-Z230@nifty.com> for ; Sun, 31 Dec 2023 15:57:12 +0900 Date: Sun, 31 Dec 2023 15:57:12 +0900 From: Takashi Yano To: cygwin@cygwin.com Subject: Re: std::runtime_error on std::locale("") Message-Id: <20231231155712.918066b5bbad233fca2c08a2@nifty.ne.jp> In-Reply-To: <20230927195039.e62f7482898ab5615cc1605b@nifty.ne.jp> References: <20230922011204.bb166498090e6cbe163349f3@nifty.ne.jp> <87o7huzos2.fsf@Otto.invalid> <20230923172359.d854a5a98afbc44beaf50c78@nifty.ne.jp> <20230927195039.e62f7482898ab5615cc1605b@nifty.ne.jp> X-Mailer: Sylpheed 3.7.0 (GTK+ 2.24.30; i686-pc-mingw32) Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="Multipart=_Sun__31_Dec_2023_15_57_12_+0900_78LTqiKq6qcPKu_f" X-Spam-Status: No, score=-4.7 required=5.0 tests=BAYES_00,KAM_DMARC_STATUS,NICE_REPLY_A,RCVD_IN_DNSWL_NONE,SPF_HELO_PASS,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: This is a multi-part message in MIME format. --Multipart=_Sun__31_Dec_2023_15_57_12_+0900_78LTqiKq6qcPKu_f Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit On Wed, 27 Sep 2023 19:50:39 +0900 Takashi Yano via Cygwin wrote: > Hi Achim, > > On Sat, 23 Sep 2023 17:23:59 +0900 > Takashi Yano via Cygwin wrote: > > On Fri, 22 Sep 2023 08:48:45 +0200 > > ASSI wrote: > > > Takashi Yano via Cygwin writes: > > > > I wonder why the following code throws std::runtime_error > > > > even though the LC_ALL is set to valid locale other than "C". > > > > This does not occur only when LC_ALL is set to "C". > > > > > > This functionality is currently only supported for Glibc targets in > > > libstdc++. I seem to remember that I've looked into this some time ago, > > > but there didn't seem to be an easy way of enabling it for Cygwin at > > > that time. > > > > Thanks for the answer. > > > > It might not be an easy way, but I tried to enabling the locale > > feature for libstdc++. > > > > Please try: > > > > 1) Run cygport gcc prep > > 2) Remove libstdc++-v3/config/locale/generic > > 3) Copy libstdc++-v3/config/locale/gnu to libstdc++-v3/config/locale/generic > > 4) Apply patches attached to the working source directory. > > 5) Run cygport gcc compile > > > > I also tried to automate above steps in gcc.cygport. > > > > Further, I tested and confirmed that a few test cases works as expected. > > > > What do you think of this idea? > > I have a new revised draft patch. The patch attached is against > the HEAD of upstream gcc repository. However, it can be applied > to 11.4.0 as well if s/c++11/c++98/g. > > This is not a last-minute job like last time, but a full rework. > > Any advice or comment would be appreciated. Some bugs have been fixed. Please review v3 patch attached. -- Takashi Yano --Multipart=_Sun__31_Dec_2023_15_57_12_+0900_78LTqiKq6qcPKu_f Content-Type: application/octet-stream; name="v3-0001-libstdc-Implement-most-of-locale-features-for-new.patch" Content-Disposition: attachment; filename="v3-0001-libstdc-Implement-most-of-locale-features-for-new.patch" Content-Transfer-Encoding: base64 RnJvbSA2ZjRkOTM3YTc3ZDQ4YTQ3ZTc4Mjc3YjcxZWQwOWIzMTQ3N2Y2MGM2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUYWthc2hpIFlhbm8gPHRha2FzaGkueWFub0BuaWZ0eS5uZS5q cD4KRGF0ZTogRnJpLCAyNCBOb3YgMjAyMyAwMDozNDo0OCArMDkwMApTdWJqZWN0OiBbUEFUQ0gg djNdIGxpYnN0ZGMrKzogSW1wbGVtZW50IG1vc3Qgb2YgbG9jYWxlIGZlYXR1cmVzIGZvciBuZXds aWIuCgpQcmV2aW91c2x5LCBsb2NhbGUgaW1wbGVtZW50YXRpb24gZm9yIG5ld2xpYiBzdXBwb3J0 cyBvbmx5ICJDIiBsb2NhbGUuCldpdGggdGhpcyBwYXRjaCwgdGhlIGxvY2FsZSBpbXBsZW1lbnRh dGlvbiBmb3IgbmV3bGliIGhhcyBiZWVuIG11Y2gKaW1wcm92ZWQgdXNpbmcgbmV3bGliIGZ1bmN0 aW9uYWxpdHkgY3VycmVudGx5IHN1cHBvcnRlZCBzbyB0aGF0IG1vc3QKb2YgbG9jYWxlIGZlYXR1 cmVzIGNhbiBiZSB1c2VkLiBUaGUgbW9zdCBvZiB0aGUgY29kZXMgYXJlIGJhc2VkIG9uCnRoZSBp bXBsZW1lbnRhdGlvbiBmb3IgdGhlIEdOVSBsaWJjLgotLS0KIGdjYy9jb25maWcvaTM4Ni9jeWd3 aW4uaCAgICAgICAgICAgICAgICAgICAgICB8ICAgMiArCiBsaWJnY2MvY29uZmlnL2kzODYvdC1j eWd3aW4gICAgICAgICAgICAgICAgICAgfCAgIDIgKy0KIGxpYnN0ZGMrKy12My9NYWtlZmlsZS5p biAgICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBsaWJzdGRjKystdjMvYWNpbmNsdWRlLm00 ICAgICAgICAgICAgICAgICAgICAgfCAgMzkgKy0KIC4uLi9jb25maWcvbG9jYWxlL2RyYWdvbmZs eS9jX2xvY2FsZS5jYyAgICAgICB8ICAgMSArCiAuLi4vY29uZmlnL2xvY2FsZS9nZW5lcmljL2Nf bG9jYWxlLmNjICAgICAgICAgfCAgIDEgKwogbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ251 L2NfbG9jYWxlLmNjICAgIHwgICAxICsKIC4uLi9sb2NhbGUvaWVlZV8xMDAzLjEtMjAwMS9jX2xv Y2FsZS5jYyAgICAgICB8ICAgMiArCiAuLi4vY29uZmlnL2xvY2FsZS9uZXdsaWIvYysrbG9jYWxl X2ludGVybmFsLmggfCAgOTUgKysKIGxpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL25ld2xpYi9j X2xvY2FsZS5jYyB8IDQwMiArKysrKysrKwogbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvbmV3 bGliL2NfbG9jYWxlLmggIHwgMTAwICsrCiAuLi4vY29uZmlnL2xvY2FsZS9uZXdsaWIvY29kZWN2 dF9tZW1iZXJzLmNjICAgfCAyODggKysrKysrCiAuLi4vY29uZmlnL2xvY2FsZS9uZXdsaWIvY29s bGF0ZV9tZW1iZXJzLmNjICAgfCAgNzQgKysKIC4uLi9jb25maWcvbG9jYWxlL25ld2xpYi9jdHlw ZV9tZW1iZXJzLmNjICAgICB8ICA2MCArLQogLi4uL2NvbmZpZy9sb2NhbGUvbmV3bGliL21lc3Nh Z2VzX21lbWJlcnMuY2MgIHwgMTc4ICsrKysKIC4uLi9jb25maWcvbG9jYWxlL25ld2xpYi9tZXNz YWdlc19tZW1iZXJzLmggICB8IDE0OCArKysKIC4uLi9jb25maWcvbG9jYWxlL25ld2xpYi9tb25l dGFyeV9tZW1iZXJzLmNjICB8IDk0MiArKysrKysrKysrKysrKysrKysKIC4uLi9jb25maWcvbG9j YWxlL25ld2xpYi9udW1lcmljX21lbWJlcnMuY2MgICB8IDI3MyArKysrKwogLi4uL2NvbmZpZy9s b2NhbGUvbmV3bGliL3RpbWVfbWVtYmVycy5jYyAgICAgIHwgMzgxICsrKysrKysKIC4uLi9jb25m aWcvbG9jYWxlL25ld2xpYi90aW1lX21lbWJlcnMuaCAgICAgICB8ICA5MCArKwogLi4uL2NvbmZp Zy9vcy9uZXdsaWIvY3R5cGVfY29uZmlndXJlX2NoYXIuY2MgIHwgIDMyICstCiBsaWJzdGRjKyst djMvY29uZmlndXJlICAgICAgICAgICAgICAgICAgICAgICAgfCAgNjYgKy0KIC4uLi9pbmNsdWRl L2JpdHMvbG9jYWxlX2ZhY2V0c19ub25pby50Y2MgICAgICB8ICAgMSArCiBsaWJzdGRjKystdjMv c3JjL01ha2VmaWxlLmluICAgICAgICAgICAgICAgICAgfCAgIDMgKy0KIGxpYnN0ZGMrKy12My9z cmMvYysrOTgvbG9jYWxlX2luaXQuY2MgICAgICAgICB8ICAgMyArLQogMjUgZmlsZXMgY2hhbmdl ZCwgMzExMSBpbnNlcnRpb25zKCspLCA3NCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9uZXdsaWIvYysrbG9jYWxlX2ludGVybmFsLmgK IGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9uZXdsaWIvY19s b2NhbGUuY2MKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9u ZXdsaWIvY19sb2NhbGUuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcv bG9jYWxlL25ld2xpYi9jb2RlY3Z0X21lbWJlcnMuY2MKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJz dGRjKystdjMvY29uZmlnL2xvY2FsZS9uZXdsaWIvY29sbGF0ZV9tZW1iZXJzLmNjCiBjcmVhdGUg bW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvbmV3bGliL21lc3NhZ2VzX21l bWJlcnMuY2MKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9u ZXdsaWIvbWVzc2FnZXNfbWVtYmVycy5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYz L2NvbmZpZy9sb2NhbGUvbmV3bGliL21vbmV0YXJ5X21lbWJlcnMuY2MKIGNyZWF0ZSBtb2RlIDEw MDY0NCBsaWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9uZXdsaWIvbnVtZXJpY19tZW1iZXJzLmNj CiBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvbmV3bGliL3Rp bWVfbWVtYmVycy5jYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMrKy12My9jb25maWcvbG9j YWxlL25ld2xpYi90aW1lX21lbWJlcnMuaAoKZGlmZiAtLWdpdCBhL2djYy9jb25maWcvaTM4Ni9j eWd3aW4uaCBiL2djYy9jb25maWcvaTM4Ni9jeWd3aW4uaAppbmRleCBiMmM0NWFiNWY2Ny4uZDg5 NmQ1Mjc3NDcgMTAwNjQ0Ci0tLSBhL2djYy9jb25maWcvaTM4Ni9jeWd3aW4uaAorKysgYi9nY2Mv Y29uZmlnL2kzODYvY3lnd2luLmgKQEAgLTg1LDYgKzg1LDggQEAgYWxvbmcgd2l0aCBHQ0M7IHNl ZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKICNkZWZpbmUgTElCX1NQRUMgIlwKICAg JXtwZzotbGdtb259IFwKICAgJXtwdGhyZWFkOiB9IFwKKyAgLWxpbnRsIFwKKyAgLWxpY29udiBc CiAgIC1sY3lnd2luIFwKICAgJXttd2luZG93czotbGdkaTMyIC1sY29tZGxnMzJ9IFwKICAgJXtm dnRhYmxlLXZlcmlmeT1wcmVpbml0Oi1sdnR2IC1scHNhcGk7IFwKZGlmZiAtLWdpdCBhL2xpYmdj Yy9jb25maWcvaTM4Ni90LWN5Z3dpbiBiL2xpYmdjYy9jb25maWcvaTM4Ni90LWN5Z3dpbgppbmRl eCBmODVlYzI0MjIwZS4uNDRkNWUxYjI0MjUgMTAwNjQ0Ci0tLSBhL2xpYmdjYy9jb25maWcvaTM4 Ni90LWN5Z3dpbgorKysgYi9saWJnY2MvY29uZmlnL2kzODYvdC1jeWd3aW4KQEAgLTUsNyArNSw3 IEBAIExJQkdDQzJfSU5DTFVERVMgKz0gLUkkKHNyY2RpcikvLi4vd2luc3VwL2luY2x1ZGUgXAog CS1JJChzcmNkaXIpLy4uL3dpbnN1cC9jeWd3aW4vaW5jbHVkZQogCiAjIEN5Z3dpbi1zcGVjaWZp YyBwYXJ0cyBvZiBMSUJfU1BFQwotU0hMSUJfTEMgPSAtbGN5Z3dpbiAtbGFkdmFwaTMyIC1sc2hl bGwzMiAtbHVzZXIzMiAtbGtlcm5lbDMyCitTSExJQl9MQyA9IC1saW50bCAtbGljb252IC1sY3ln d2luIC1sYWR2YXBpMzIgLWxzaGVsbDMyIC1sdXNlcjMyIC1sa2VybmVsMzIKIAogIyBXZSBoYXZl IGFscmVhZHkgaW5jbHVkZWQgb25lIG9mIHRoZSB0LXtkdzIsc2psan0tZWggZnJhZ21lbnRzIGZv ciBFSF9NT0RFTAogU0hMSUJfRUhfRVhURU5TSU9OID0gJChzdWJzdCAtZHcyLCwtJChFSF9NT0RF TCkpCmRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvTWFrZWZpbGUuaW4gYi9saWJzdGRjKystdjMv TWFrZWZpbGUuaW4KaW5kZXggNTAwYzBkNzUyODIuLmMwNWQyMGUyNTY4IDEwMDY0NAotLS0gYS9s aWJzdGRjKystdjMvTWFrZWZpbGUuaW4KKysrIGIvbGlic3RkYysrLXYzL01ha2VmaWxlLmluCkBA IC0yNDQsNiArMjQ0LDcgQEAgRVJST1JfQ09OU1RBTlRTX1NSQ0RJUiA9IEBFUlJPUl9DT05TVEFO VFNfU1JDRElSQAogRVhFRVhUID0gQEVYRUVYVEAKIEVYVFJBX0NGTEFHUyA9IEBFWFRSQV9DRkxB R1NACiBFWFRSQV9DWFhfRkxBR1MgPSBARVhUUkFfQ1hYX0ZMQUdTQAorRVhUUkFfTElCUyA9IEBF WFRSQV9MSUJTQAogRkdSRVAgPSBARkdSRVBACiBGT1JNQVRfRklMRSA9IEBGT1JNQVRfRklMRUAK IEZSRUVTVEFORElOR19GTEFHUyA9IEBGUkVFU1RBTkRJTkdfRkxBR1NACmRpZmYgLS1naXQgYS9s aWJzdGRjKystdjMvYWNpbmNsdWRlLm00IGIvbGlic3RkYysrLXYzL2FjaW5jbHVkZS5tNAppbmRl eCA3Yzg0MzIwNGQ3MC4uM2NmOTI3NDY3NGUgMTAwNjQ0Ci0tLSBhL2xpYnN0ZGMrKy12My9hY2lu Y2x1ZGUubTQKKysrIGIvbGlic3RkYysrLXYzL2FjaW5jbHVkZS5tNApAQCAtMjQzNCw3ICsyNDM0 LDcgQEAgQUNfREVGVU4oW0dMSUJDWFhfRU5BQkxFX0NMT0NBTEVdLCBbCiAgICAgICBkcmFnb25m bHkqIHwgZnJlZWJzZCopCiAJZW5hYmxlX2Nsb2NhbGVfZmxhZz1kcmFnb25mbHkKIAk7OwotICAg ICAgb3BlbmJzZCopCisgICAgICBvcGVuYnNkKiB8IGN5Z3dpbiopCiAJZW5hYmxlX2Nsb2NhbGVf ZmxhZz1uZXdsaWIKIAk7OwogICAgICAgKikKQEAgLTI0NDYsNiArMjQ0NiwxMCBAQCBBQ19ERUZV TihbR0xJQkNYWF9FTkFCTEVfQ0xPQ0FMRV0sIFsKIAk7OwogICAgIGVzYWMKICAgZmkKKyAgY2Fz ZSAke3RhcmdldF9vc30gaW4gY3lnd2luKikKKyAgICBFWFRSQV9MSUJTPSItbGludGwiCisgICAg OzsKKyAgZXNhYwogCiAgICMgU2FuaXR5IGNoZWNrIG1vZGVsLCBhbmQgdGVzdCBmb3Igc3BlY2lh bCBmdW5jdGlvbmFsaXR5LgogICBpZiB0ZXN0ICRlbmFibGVfY2xvY2FsZV9mbGFnID0gZ251OyB0 aGVuCkBAIC0yNjEwLDE5ICsyNjE0LDMwIEBAIEFDX0RFRlVOKFtHTElCQ1hYX0VOQUJMRV9DTE9D QUxFXSwgWwogICAgICAgOzsKICAgICBuZXdsaWIpCiAgICAgICBBQ19NU0dfUkVTVUxUKG5ld2xp YikKKyAgICAgIEFDX0NIRUNLX0hFQURFUlMobGliaW50bC5oLCBhY19oYXNfbGliaW50bF9oPXll cywgYWNfaGFzX2xpYmludGxfaD1ubykKKyAgICAgIEFDX0NIRUNLX0hFQURFUlMoaWNvbnYuaCwg YWNfaGFzX2ljb252X2g9eWVzLCBhY19oYXNfaWNvbnZfaD1ubykKIAotICAgICAgQ0xPQ0FMRV9I PWNvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5oCi0gICAgICBDTE9DQUxFX0NDPWNvbmZp Zy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5jYwotICAgICAgQ0NPREVDVlRfQ0M9Y29uZmlnL2xv Y2FsZS9nZW5lcmljL2NvZGVjdnRfbWVtYmVycy5jYwotICAgICAgQ0NPTExBVEVfQ0M9Y29uZmln L2xvY2FsZS9nZW5lcmljL2NvbGxhdGVfbWVtYmVycy5jYworICAgICAgQ0xPQ0FMRV9IPWNvbmZp Zy9sb2NhbGUvbmV3bGliL2NfbG9jYWxlLmgKKyAgICAgIENMT0NBTEVfQ0M9Y29uZmlnL2xvY2Fs ZS9uZXdsaWIvY19sb2NhbGUuY2MKKyAgICAgIENDT0RFQ1ZUX0NDPWNvbmZpZy9sb2NhbGUvbmV3 bGliL2NvZGVjdnRfbWVtYmVycy5jYworICAgICAgQ0NPTExBVEVfQ0M9Y29uZmlnL2xvY2FsZS9u ZXdsaWIvY29sbGF0ZV9tZW1iZXJzLmNjCiAgICAgICBDQ1RZUEVfQ0M9Y29uZmlnL2xvY2FsZS9u ZXdsaWIvY3R5cGVfbWVtYmVycy5jYwotICAgICAgQ01FU1NBR0VTX0g9Y29uZmlnL2xvY2FsZS9n ZW5lcmljL21lc3NhZ2VzX21lbWJlcnMuaAotICAgICAgQ01FU1NBR0VTX0NDPWNvbmZpZy9sb2Nh bGUvZ2VuZXJpYy9tZXNzYWdlc19tZW1iZXJzLmNjCi0gICAgICBDTU9ORVlfQ0M9Y29uZmlnL2xv Y2FsZS9nZW5lcmljL21vbmV0YXJ5X21lbWJlcnMuY2MKLSAgICAgIENOVU1FUklDX0NDPWNvbmZp Zy9sb2NhbGUvZ2VuZXJpYy9udW1lcmljX21lbWJlcnMuY2MKLSAgICAgIENUSU1FX0g9Y29uZmln L2xvY2FsZS9nZW5lcmljL3RpbWVfbWVtYmVycy5oCi0gICAgICBDVElNRV9DQz1jb25maWcvbG9j YWxlL2dlbmVyaWMvdGltZV9tZW1iZXJzLmNjCi0gICAgICBDTE9DQUxFX0lOVEVSTkFMX0g9Y29u ZmlnL2xvY2FsZS9nZW5lcmljL2MrK2xvY2FsZV9pbnRlcm5hbC5oCisgICAgICBpZiB0ZXN0ICRh Y19oYXNfbGliaW50bF9oID0geWVzOyB0aGVuCisJQ01FU1NBR0VTX0g9Y29uZmlnL2xvY2FsZS9u ZXdsaWIvbWVzc2FnZXNfbWVtYmVycy5oCisJQ01FU1NBR0VTX0NDPWNvbmZpZy9sb2NhbGUvbmV3 bGliL21lc3NhZ2VzX21lbWJlcnMuY2MKKyAgICAgIGVsc2UKKwlDTUVTU0FHRVNfSD1jb25maWcv bG9jYWxlL2dlbmVyaWMvbWVzc2FnZXNfbWVtYmVycy5oCisJQ01FU1NBR0VTX0NDPWNvbmZpZy9s b2NhbGUvZ2VuZXJpYy9tZXNzYWdlc19tZW1iZXJzLmNjCisgICAgICBmaQorICAgICAgQ01PTkVZ X0NDPWNvbmZpZy9sb2NhbGUvbmV3bGliL21vbmV0YXJ5X21lbWJlcnMuY2MKKyAgICAgIGlmIHRl c3QgJGFjX2hhc19pY29udl9oID0geWVzOyB0aGVuCisJQ05VTUVSSUNfQ0M9Y29uZmlnL2xvY2Fs ZS9uZXdsaWIvbnVtZXJpY19tZW1iZXJzLmNjCisgICAgICBlbHNlCisJQ05VTUVSSUNfQ0M9Y29u ZmlnL2xvY2FsZS9nZW5lcmljL251bWVyaWNfbWVtYmVycy5jYworICAgICAgZmkKKyAgICAgIENU SU1FX0g9Y29uZmlnL2xvY2FsZS9uZXdsaWIvdGltZV9tZW1iZXJzLmgKKyAgICAgIENUSU1FX0ND PWNvbmZpZy9sb2NhbGUvbmV3bGliL3RpbWVfbWVtYmVycy5jYworICAgICAgQ0xPQ0FMRV9JTlRF Uk5BTF9IPWNvbmZpZy9sb2NhbGUvbmV3bGliL2MrK2xvY2FsZV9pbnRlcm5hbC5oCiAgICAgICA7 OwogICBlc2FjCiAKZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2RyYWdv bmZseS9jX2xvY2FsZS5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2RyYWdvbmZseS9j X2xvY2FsZS5jYwppbmRleCBmMDI2ZTE3ZDVhMC4uMGUxMDE4OGYyMjAgMTAwNjQ0Ci0tLSBhL2xp YnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2RyYWdvbmZseS9jX2xvY2FsZS5jYworKysgYi9saWJz dGRjKystdjMvY29uZmlnL2xvY2FsZS9kcmFnb25mbHkvY19sb2NhbGUuY2MKQEAgLTE4OCw2ICsx ODgsNyBAQCBuYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKIF9HTElC Q1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCiAKICAgY29uc3QgY2hhciogY29uc3QqIGNvbnN0 IGxvY2FsZTo6X1NfY2F0ZWdvcmllcyA9IF9fZ251X2N4eDo6Y2F0ZWdvcnlfbmFtZXM7CisgIGNv bnN0IF9fdHlwZW9mKHNldGxvY2FsZSkgKl9fc2V0bG9jYWxlID0gc2V0bG9jYWxlOwogCiBfR0xJ QkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KIH0gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9s aWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9nZW5lcmljL2NfbG9jYWxlLmNjIGIvbGlic3RkYysr LXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5jYwppbmRleCA4ODQ5ZDc4ZmRmYS4u MjdhMjQ2OTIxZTYgMTAwNjQ0Ci0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dlbmVy aWMvY19sb2NhbGUuY2MKKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvZ2VuZXJpYy9j X2xvY2FsZS5jYwpAQCAtMjg0LDYgKzI4NCw3IEBAIG5hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklT SUJJTElUWShkZWZhdWx0KQogX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KIAogICBj b25zdCBjaGFyKiBjb25zdCogY29uc3QgbG9jYWxlOjpfU19jYXRlZ29yaWVzID0gX19nbnVfY3h4 OjpjYXRlZ29yeV9uYW1lczsKKyAgY29uc3QgX190eXBlb2Yoc2V0bG9jYWxlKSAqX19zZXRsb2Nh bGUgPSBzZXRsb2NhbGU7CiAKIF9HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgogfSAvLyBu YW1lc3BhY2UKZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dudS9jX2xv Y2FsZS5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2dudS9jX2xvY2FsZS5jYwppbmRl eCA1ZGRiZGUxZTZjYy4uNTUyNzFiNjE2MWIgMTAwNjQ0Ci0tLSBhL2xpYnN0ZGMrKy12My9jb25m aWcvbG9jYWxlL2dudS9jX2xvY2FsZS5jYworKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2Fs ZS9nbnUvY19sb2NhbGUuY2MKQEAgLTI4Myw2ICsyODMsNyBAQCBuYW1lc3BhY2Ugc3RkIF9HTElC Q1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9O CiAKICAgY29uc3QgY2hhciogY29uc3QqIGNvbnN0IGxvY2FsZTo6X1NfY2F0ZWdvcmllcyA9IF9f Z251X2N4eDo6Y2F0ZWdvcnlfbmFtZXM7CisgIGNvbnN0IF9fdHlwZW9mKHNldGxvY2FsZSkgKl9f c2V0bG9jYWxlID0gc2V0bG9jYWxlOwogCiBfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04K IH0gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9p ZWVlXzEwMDMuMS0yMDAxL2NfbG9jYWxlLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUv aWVlZV8xMDAzLjEtMjAwMS9jX2xvY2FsZS5jYwppbmRleCBjOTExODNlMmY4Yy4uMjg3MjM0YThj NjcgMTAwNjQ0Ci0tLSBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL2llZWVfMTAwMy4xLTIw MDEvY19sb2NhbGUuY2MKKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvaWVlZV8xMDAz LjEtMjAwMS9jX2xvY2FsZS5jYwpAQCAtMTAzLDUgKzEwMyw3IEBAIG5hbWVzcGFjZSBzdGQgX0dM SUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQogICAgICAgX01fbmVnX2Zvcm1hdCA9IG1vbmV5X2Jh c2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKICAgICB9CiAjZW5kaWYKKworICBjb25zdCBfX3R5cGVv ZihzZXRsb2NhbGUpICpfX3NldGxvY2FsZSA9IHNldGxvY2FsZTsKIH0gIC8vIG5hbWVzcGFjZSBz dGQKIApkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvbmV3bGliL2MrK2xv Y2FsZV9pbnRlcm5hbC5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvbmV3bGliL2MrK2xv Y2FsZV9pbnRlcm5hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4z NTFkNDU2NmIzYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxl L25ld2xpYi9jKytsb2NhbGVfaW50ZXJuYWwuaApAQCAtMCwwICsxLDk1IEBACisvLyBMb2NhbGUg aW50ZXJuYWwgaW1wbGVtZW50YXRpb24gaGVhZGVyIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdo dCAoQykgMjAwMi0yMDIzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRo aXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5 IGlzIGZyZWUKKy8vIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k aWZ5IGl0IHVuZGVyIHRoZQorLy8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0 aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24u CisKKy8vIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLAorLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVy c2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3Jp YmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4x LCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91 IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgYW5kCisvLyBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9u IGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQg Q09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3 dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKy8qKiBAZmlsZSBiaXRzL2MrK2xvY2FsZV9pbnRlcm5h bC5oCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQgYnkgb3Ro ZXIgbGlicmFyeSBoZWFkZXJzLgorICogIERvIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3Rs eS4gQGhlYWRlcm5hbWV7bG9jYWxlfQorICovCisKKy8vIFdyaXR0ZW4gYnkgSmFrdWIgSmVsaW5l ayA8amFrdWJAcmVkaGF0LmNvbT4KKy8vIE1vZGlmaWVkIGJ5IFRha2FzaGkgWWFubyA8dGFrYXNo aS55YW5vQG5pZnR5Lm5lLmpwPgorCisjaW5jbHVkZSA8Yml0cy9jKytjb25maWcuaD4KKyNpbmNs dWRlIDxjbG9jYWxlPgorI2luY2x1ZGUgPGNzdGRsaWI+CisjaW5jbHVkZSA8Y3N0cmluZz4KKyNp bmNsdWRlIDxjc3RkZGVmPgorI2luY2x1ZGUgPGxhbmdpbmZvLmg+CisKKyNpbmNsdWRlIDx2ZWN0 b3I+CisjaW5jbHVkZSA8c3RyaW5nLmg+CS8vIDo6c3RyZHVwCisKKyNpbmNsdWRlIDxleHQvY29u Y3VycmVuY2UuaD4KKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQp Cit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgIHN0cnVjdCBDYXRhbG9n X2luZm8KKyAgeworICAgIENhdGFsb2dfaW5mbyhtZXNzYWdlc19iYXNlOjpjYXRhbG9nIF9faWQs IGNvbnN0IGNoYXIqIF9fZG9tYWluLAorCQkgbG9jYWxlIF9fbG9jKQorICAgICAgOiBfTV9pZChf X2lkKSwgX01fZG9tYWluKHN0cmR1cChfX2RvbWFpbikpLCBfTV9sb2NhbGUoX19sb2MpCisgICAg eyB9CisKKyAgICB+Q2F0YWxvZ19pbmZvKCkKKyAgICB7IGZyZWUoX01fZG9tYWluKTsgfQorCisg ICAgbWVzc2FnZXNfYmFzZTo6Y2F0YWxvZyBfTV9pZDsKKyAgICBjaGFyKiBfTV9kb21haW47Cisg ICAgbG9jYWxlIF9NX2xvY2FsZTsKKworICBwcml2YXRlOgorICAgIENhdGFsb2dfaW5mbyhjb25z dCBDYXRhbG9nX2luZm8mKTsKKworICAgIENhdGFsb2dfaW5mbyYKKyAgICBvcGVyYXRvcj0oY29u c3QgQ2F0YWxvZ19pbmZvJik7CisgIH07CisKKyAgY2xhc3MgQ2F0YWxvZ3MKKyAgeworICBwdWJs aWM6CisgICAgQ2F0YWxvZ3MoKSA6IF9NX2NhdGFsb2dfY291bnRlcigwKSB7IH0KKyAgICB+Q2F0 YWxvZ3MoKTsKKworICAgIG1lc3NhZ2VzX2Jhc2U6OmNhdGFsb2cKKyAgICBfTV9hZGQoY29uc3Qg Y2hhciogX19kb21haW4sIGxvY2FsZSBfX2wpOworCisgICAgdm9pZAorICAgIF9NX2VyYXNlKG1l c3NhZ2VzX2Jhc2U6OmNhdGFsb2cgX19jKTsKKworICAgIGNvbnN0IENhdGFsb2dfaW5mbyoKKyAg ICBfTV9nZXQobWVzc2FnZXNfYmFzZTo6Y2F0YWxvZyBfX2MpIGNvbnN0OworCisgIHByaXZhdGU6 CisgICAgbXV0YWJsZSBfX2dudV9jeHg6Ol9fbXV0ZXggX01fbXV0ZXg7CisgICAgbWVzc2FnZXNf YmFzZTo6Y2F0YWxvZyBfTV9jYXRhbG9nX2NvdW50ZXI7CisgICAgdmVjdG9yPENhdGFsb2dfaW5m byo+IF9NX2luZm9zOworICB9OworCisgIENhdGFsb2dzJgorICBnZXRfY2F0YWxvZ3MoKTsKKwor X0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0 IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvbmV3bGliL2NfbG9jYWxlLmNjIGIvbGlic3Rk YysrLXYzL2NvbmZpZy9sb2NhbGUvbmV3bGliL2NfbG9jYWxlLmNjCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5iMTgxOTk5YTJkMQotLS0gL2Rldi9udWxsCisrKyBiL2xp YnN0ZGMrKy12My9jb25maWcvbG9jYWxlL25ld2xpYi9jX2xvY2FsZS5jYwpAQCAtMCwwICsxLDQw MiBAQAorLy8gV3JhcHBlciBmb3IgdW5kZXJseWluZyBDLWxhbmd1YWdlIGxvY2FsaXphdGlvbiAt Ki0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAyMyBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBD KysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlv bikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJD SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl CisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBV bmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9u YWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBF eGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0Mg UnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNl ZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJ ZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLworLy8g SVNPIEMrKyAxNDg4MjogMjIuOCAgU3RhbmRhcmQgbG9jYWxlIGNhdGVnb3JpZXMuCisvLworCisv LyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorLy8gTW9kaWZp ZWQgYnkgVGFrYXNoaSBZYW5vIDx0YWthc2hpLnlhbm9AbmlmdHkubmUuanA+CisKKyNkZWZpbmUg X0dOVV9TT1VSQ0UgMQorI2luY2x1ZGUgPGNzdGRpbz4KKyNpbmNsdWRlIDxsb2NhbGU+CisjaW5j bHVkZSA8c3RkZXhjZXB0PgorI2luY2x1ZGUgPGxpbWl0cz4KKyNpbmNsdWRlIDxhbGdvcml0aG0+ CisjaW5jbHVkZSA8bGFuZ2luZm8uaD4KKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRlcm5h bC5oPgorCisjaW5jbHVkZSA8YmFja3dhcmQvYXV0b19wdHIuaD4KKworI2lmIF9fUE9TSVhfVklT SUJMRSA8IDIwMDgwOQorc3RydWN0IF9fbG9jYWxlX3Q7Cit0eXBlZGVmIHN0cnVjdCBfX2xvY2Fs ZV90ICpsb2NhbGVfdDsKKworI2RlZmluZSBMQ19BTExfTUFTSwkJKDEgPDwgTENfQUxMKQorI2Rl ZmluZSBMQ19DT0xMQVRFX01BU0sJCSgxIDw8IExDX0NPTExBVEUpCisjZGVmaW5lIExDX0NUWVBF X01BU0sJCSgxIDw8IExDX0NUWVBFKQorI2RlZmluZSBMQ19NT05FVEFSWV9NQVNLCSgxIDw8IExD X01PTkVUQVJZKQorI2RlZmluZSBMQ19OVU1FUklDX01BU0sJCSgxIDw8IExDX05VTUVSSUMpCisj ZGVmaW5lIExDX1RJTUVfTUFTSwkJKDEgPDwgTENfVElNRSkKKyNkZWZpbmUgTENfTUVTU0FHRVNf TUFTSwkoMSA8PCBMQ19NRVNTQUdFUykKKworZXh0ZXJuICJDIiBsb2NhbGVfdCBuZXdsb2NhbGUo aW50LCBjb25zdCBjaGFyICosIGxvY2FsZV90KTsKK2V4dGVybiAiQyIgdm9pZCBmcmVlbG9jYWxl KGxvY2FsZV90KTsKK2V4dGVybiAiQyIgbG9jYWxlX3QgZHVwbG9jYWxlKGxvY2FsZV90KTsKK2V4 dGVybiAiQyIgbG9jYWxlX3QgdXNlbG9jYWxlKGxvY2FsZV90KTsKKyNlbmRpZiAvKiBfX1BPU0lY X1ZJU0lCTEUgPCAyMDA4MDkgKi8KKworLyogTmV3bGliIGNvbnN0YW50ICovCisjZGVmaW5lIEVO Q09ESU5HX0xFTiAzMQorI2RlZmluZSBDQVRFR09SWV9MRU4gMTEKKyNkZWZpbmUgTlVNX0NBVEVH T1JJRVMgNgorI2RlZmluZSB4c3RyKHMpIHN0cihzKQorI2RlZmluZSBzdHIocykgI3MKKyNkZWZp bmUgRk1UX0xPQ0FMRSAiJSIgeHN0cihDQVRFR09SWV9MRU4pICJbXj1dPSUiIHhzdHIoRU5DT0RJ TkdfTEVOKSAiW147XSIKKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1 bHQpCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgorCisgIHRlbXBsYXRlPD4K KyAgICB2b2lkCisgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciogX19zLCBmbG9hdCYgX192 LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCisJCSAgIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xv YykgdGhyb3coKQorICAgIHsKKyAgICAgIGNoYXIqIF9fc2FuaXR5OworICAgICAgX192ID0gc3Ry dG9mX2woX19zLCAmX19zYW5pdHksIF9fY2xvYyk7CisKKyAgICAgIC8vIF9HTElCQ1hYX1JFU09M VkVfTElCX0RFRkVDVFMKKyAgICAgIC8vIDIzLiBOdW1fZ2V0IG92ZXJmbG93IHJlc3VsdC4KKyAg ICAgIGlmIChfX3Nhbml0eSA9PSBfX3MgfHwgKl9fc2FuaXR5ICE9ICdcMCcpCisJeworCSAgX192 ID0gMC4wZjsKKwkgIF9fZXJyID0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisJfQorICAgICAgZWxzZSBp ZiAoX192ID09IG51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSkKKwl7CisJICBfX3Yg PSBudW1lcmljX2xpbWl0czxmbG9hdD46Om1heCgpOworCSAgX19lcnIgPSBpb3NfYmFzZTo6ZmFp bGJpdDsKKwl9CisgICAgICBlbHNlIGlmIChfX3YgPT0gLW51bWVyaWNfbGltaXRzPGZsb2F0Pjo6 aW5maW5pdHkoKSkKKwl7CisJICBfX3YgPSAtbnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKTsK KwkgIF9fZXJyID0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisJfQorICAgIH0KKworICB0ZW1wbGF0ZTw+ CisgICAgdm9pZAorICAgIF9fY29udmVydF90b192KGNvbnN0IGNoYXIqIF9fcywgZG91YmxlJiBf X3YsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKKwkJICAgY29uc3QgX19jX2xvY2FsZSYgX19j bG9jKSB0aHJvdygpCisgICAgeworICAgICAgY2hhciogX19zYW5pdHk7CisgICAgICBfX3YgPSBz dHJ0b2RfbChfX3MsICZfX3Nhbml0eSwgX19jbG9jKTsKKworICAgICAgLy8gX0dMSUJDWFhfUkVT T0xWRV9MSUJfREVGRUNUUworICAgICAgLy8gMjMuIE51bV9nZXQgb3ZlcmZsb3cgcmVzdWx0Lgor ICAgICAgaWYgKF9fc2FuaXR5ID09IF9fcyB8fCAqX19zYW5pdHkgIT0gJ1wwJykKKwl7CisJICBf X3YgPSAwLjA7CisJICBfX2VyciA9IGlvc19iYXNlOjpmYWlsYml0OworCX0KKyAgICAgIGVsc2Ug aWYgKF9fdiA9PSBudW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpKQorCXsKKwkgIF9f diA9IG51bWVyaWNfbGltaXRzPGRvdWJsZT46Om1heCgpOworCSAgX19lcnIgPSBpb3NfYmFzZTo6 ZmFpbGJpdDsKKwl9CisgICAgICBlbHNlIGlmIChfX3YgPT0gLW51bWVyaWNfbGltaXRzPGRvdWJs ZT46OmluZmluaXR5KCkpCisJeworCSAgX192ID0gLW51bWVyaWNfbGltaXRzPGRvdWJsZT46Om1h eCgpOworCSAgX19lcnIgPSBpb3NfYmFzZTo6ZmFpbGJpdDsKKwl9CisgICAgfQorCisgIHRlbXBs YXRlPD4KKyAgICB2b2lkCisgICAgX19jb252ZXJ0X3RvX3YoY29uc3QgY2hhciogX19zLCBsb25n IGRvdWJsZSYgX192LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCisJCSAgIGNvbnN0IF9fY19s b2NhbGUmIF9fY2xvYykgdGhyb3coKQorICAgIHsKKyAgICAgIGNoYXIqIF9fc2FuaXR5OworICAg ICAgX192ID0gc3RydG9sZF9sKF9fcywgJl9fc2FuaXR5LCBfX2Nsb2MpOworCisgICAgICAvLyBf R0xJQkNYWF9SRVNPTFZFX0xJQl9ERUZFQ1RTCisgICAgICAvLyAyMy4gTnVtX2dldCBvdmVyZmxv dyByZXN1bHQuCisgICAgICBpZiAoX19zYW5pdHkgPT0gX19zIHx8ICpfX3Nhbml0eSAhPSAnXDAn KQorCXsKKwkgIF9fdiA9IDAuMGw7CisJICBfX2VyciA9IGlvc19iYXNlOjpmYWlsYml0OworCX0K KyAgICAgIGVsc2UgaWYgKF9fdiA9PSBudW1lcmljX2xpbWl0czxsb25nIGRvdWJsZT46OmluZmlu aXR5KCkpCisJeworCSAgX192ID0gbnVtZXJpY19saW1pdHM8bG9uZyBkb3VibGU+OjptYXgoKTsK KwkgIF9fZXJyID0gaW9zX2Jhc2U6OmZhaWxiaXQ7CisJfQorICAgICAgZWxzZSBpZiAoX192ID09 IC1udW1lcmljX2xpbWl0czxsb25nIGRvdWJsZT46OmluZmluaXR5KCkpCisJeworCSAgX192ID0g LW51bWVyaWNfbGltaXRzPGxvbmcgZG91YmxlPjo6bWF4KCk7CisJICBfX2VyciA9IGlvc19iYXNl OjpmYWlsYml0OworCX0KKyAgICB9CisKKyAgdm9pZAorICBsb2NhbGU6OmZhY2V0OjpfU19jcmVh dGVfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsCisJCQkJICAg IF9fY19sb2NhbGUgX19vbGQpCisgIHsKKyAgICBfX2Nsb2MgPSBuZXdsb2NhbGUoMSA8PCBMQ19B TEwsIF9fcywgX19vbGQpOworICAgIGlmIChfX2Nsb2MpCisgICAgICByZXR1cm47CisKKyAgICAv KiBOZXdsaWIgZG9lcyBub3Qgc3VwcG9ydCBsb2NhbGUgc3RyaWcgc3VjaCBhcworICAgICAgICJM Q19DVFlQRT1lbl9VUy5VVEY4O0xDX05VTUVSSUM9ZGVfREUuVVRGODsuLi4iICovCisgICAgY29u c3QgY2hhciAqX19wID0gX19zOworICAgIF9fY2xvYyA9IF9fb2xkOworICAgIGNoYXIgX19jYXRb Q0FURUdPUllfTEVOICsgMV0sIF9fbG9jW0VOQ09ESU5HX0xFTiArIDFdOworICAgIHdoaWxlICgy ID09IHNzY2FuZihfX3AsIEZNVF9MT0NBTEUsIF9fY2F0LCBfX2xvYykpCisgICAgICB7CisJc3Ry dWN0IHtjb25zdCBjaGFyICpfX2NhdDsgaW50IF9fbWFzazt9IF9fdGJsW05VTV9DQVRFR09SSUVT ICsgMV0gPQorCSAgeworCSAgICAgIHsiTENfQ1RZUEUiLCBMQ19DVFlQRV9NQVNLfSwKKwkgICAg ICB7IkxDX05VTUVSSUMiLCBMQ19OVU1FUklDX01BU0t9LAorCSAgICAgIHsiTENfVElNRSIsIExD X1RJTUVfTUFTS30sCisJICAgICAgeyJMQ19DT0xMQVRFIiwgTENfQ09MTEFURV9NQVNLfSwKKwkg ICAgICB7IkxDX01PTkVUQVJZIiwgTENfTU9ORVRBUllfTUFTS30sCisJICAgICAgeyJMQ19NRVNT QUdFUyIsIExDX01FU1NBR0VTX01BU0t9LAorCSAgICAgIHtOVUxMLCAwfQorCSAgfTsKKwlmb3Ig KGludCBfX2kgPSAwOyBfX3RibFtfX2ldLl9fY2F0OyBfX2krKykKKwkgIGlmIChzdHJjbXAoX190 YmxbX19pXS5fX2NhdCwgX19jYXQpID09IDApCisJICAgIHsKKwkgICAgICBfX2Nsb2MgPSBuZXds b2NhbGUoX190YmxbX19pXS5fX21hc2ssIF9fbG9jLCBfX2Nsb2MpOworCSAgICAgIGJyZWFrOwor CSAgICB9CisJaWYgKCFfX2Nsb2MpCisJICBicmVhazsKKwlpZiAoKF9fcCA9IHN0cmNocihfX3As ICc7JykpID09IE5VTEwpCisJICBicmVhazsKKwlfX3ArKzsKKyAgICAgIH0KKyAgICBpZiAoIV9f Y2xvYykKKyAgICAgIHsKKwkvLyBUaGlzIG5hbWVkIGxvY2FsZSBpcyBub3Qgc3VwcG9ydGVkIGJ5 IHRoZSB1bmRlcmx5aW5nIE9TLgorCV9fdGhyb3dfcnVudGltZV9lcnJvcihfX04oImxvY2FsZTo6 ZmFjZXQ6Ol9TX2NyZWF0ZV9jX2xvY2FsZSAiCisJCQkJICAibmFtZSBub3QgdmFsaWQiKSk7Cisg ICAgICB9CisgIH0KKworICB2b2lkCisgIGxvY2FsZTo6ZmFjZXQ6Ol9TX2Rlc3Ryb3lfY19sb2Nh bGUoX19jX2xvY2FsZSYgX19jbG9jKQorICB7CisgICAgaWYgKF9fY2xvYyAmJiBfU19nZXRfY19s b2NhbGUoKSAhPSBfX2Nsb2MpCisgICAgICBmcmVlbG9jYWxlKF9fY2xvYyk7CisgIH0KKworICBf X2NfbG9jYWxlCisgIGxvY2FsZTo6ZmFjZXQ6Ol9TX2Nsb25lX2NfbG9jYWxlKF9fY19sb2NhbGUm IF9fY2xvYykgdGhyb3coKQorICB7IHJldHVybiBkdXBsb2NhbGUoX19jbG9jKTsgfQorCisgIF9f Y19sb2NhbGUKKyAgbG9jYWxlOjpmYWNldDo6X1NfbGNfY3R5cGVfY19sb2NhbGUoX19jX2xvY2Fs ZSBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcykKKyAgeworICAgIF9fY19sb2NhbGUgX19kdXAgPSBk dXBsb2NhbGUoX19jbG9jKTsKKyAgICBpZiAoX19kdXAgPT0gX19jX2xvY2FsZSgwKSkKKyAgICAg IF9fdGhyb3dfcnVudGltZV9lcnJvcihfX04oImxvY2FsZTo6ZmFjZXQ6Ol9TX2xjX2N0eXBlX2Nf bG9jYWxlICIKKwkJCQkiZHVwbG9jYWxlIGVycm9yIikpOworICAgIF9fY19sb2NhbGUgX19jaGFu Z2VkID0gbmV3bG9jYWxlKExDX0NUWVBFX01BU0ssIF9fcywgX19kdXApOworICAgIGlmIChfX2No YW5nZWQgPT0gX19jX2xvY2FsZSgwKSkKKyAgICAgIHsKKwkvKiBOZXdsaWIgZG9lcyBub3Qgc3Vw cG9ydCBsb2NhbGUgc3RyaWcgc3VjaCBhcworCSAgICJMQ19DVFlQRT1lbl9VUy5VVEY4O0xDX05V TUVSSUM9ZGVfREUuVVRGODsuLi4iICovCisJY29uc3QgY2hhciAqX19wID0gX19zOworCWNoYXIg X19jYXRbQ0FURUdPUllfTEVOICsgMV0sIF9fbG9jW0VOQ09ESU5HX0xFTiArIDFdOworCXdoaWxl ICgyID09IHNzY2FuZihfX3AsIEZNVF9MT0NBTEUsIF9fY2F0LCBfX2xvYykpCisJICB7CisJICAg IGlmIChzdHJjbXAoIkxDX0NUWVBFIiwgX19jYXQpID09IDApCisJICAgICAgeworCQlfX2NoYW5n ZWQgPSBuZXdsb2NhbGUoTENfQ1RZUEVfTUFTSywgX19sb2MsIF9fZHVwKTsKKwkJYnJlYWs7CisJ ICAgICAgfQorCSAgICBpZiAoKF9fcCA9IHN0cmNocihfX3AsICc7JykpID09IE5VTEwpCisJICAg ICAgYnJlYWs7CisJICAgIF9fcCsrOworCSAgfQorICAgICAgfQorICAgIGlmIChfX2NoYW5nZWQg PT0gX19jX2xvY2FsZSgwKSkKKyAgICAgIHsKKwlmcmVlbG9jYWxlKF9fZHVwKTsKKwlfX3Rocm93 X3J1bnRpbWVfZXJyb3IoX19OKCJsb2NhbGU6OmZhY2V0OjpfU19sY19jdHlwZV9jX2xvY2FsZSAi CisJCQkJICAibmV3bG9jYWxlIGVycm9yIikpOworICAgICAgfQorICAgIHJldHVybiBfX2NoYW5n ZWQ7CisgIH0KKworICBzdHJ1Y3QgX0NhdGFsb2dJZENvbXAKKyAgeworICAgIGJvb2wKKyAgICBv cGVyYXRvcigpKG1lc3NhZ2VzX2Jhc2U6OmNhdGFsb2cgX19jYXQsIGNvbnN0IENhdGFsb2dfaW5m byogX19pbmZvKSBjb25zdAorICAgIHsgcmV0dXJuIF9fY2F0IDwgX19pbmZvLT5fTV9pZDsgfQor CisgICAgYm9vbAorICAgIG9wZXJhdG9yKCkoY29uc3QgQ2F0YWxvZ19pbmZvKiBfX2luZm8sIG1l c3NhZ2VzX2Jhc2U6OmNhdGFsb2cgX19jYXQpIGNvbnN0CisgICAgeyByZXR1cm4gX19pbmZvLT5f TV9pZCA8IF9fY2F0OyB9CisgIH07CisKKyAgQ2F0YWxvZ3M6On5DYXRhbG9ncygpCisgIHsKKyAg ICBmb3IgKHZlY3RvcjxDYXRhbG9nX2luZm8qPjo6aXRlcmF0b3IgX19pdCA9IF9NX2luZm9zLmJl Z2luKCk7CisJIF9faXQgIT0gX01faW5mb3MuZW5kKCk7ICsrX19pdCkKKyAgICAgIGRlbGV0ZSAq X19pdDsKKyAgfQorCisgIG1lc3NhZ2VzX2Jhc2U6OmNhdGFsb2cKKyAgQ2F0YWxvZ3M6Ol9NX2Fk ZChjb25zdCBjaGFyKiBfX2RvbWFpbiwgbG9jYWxlIF9fbCkKKyAgeworICAgIF9fZ251X2N4eDo6 X19zY29wZWRfbG9jayBsb2NrKF9NX211dGV4KTsKKworICAgIC8vIFRoZSBjb3VudGVyIGlzIG5v dCBsaWtlbHkgdG8gcm9sbCB1bmxlc3MgY2F0YWxvZ3Mga2VlcCBvbiBiZWluZworICAgIC8vIG9w ZW5lZC9jbG9zZWQgd2hpY2ggaXMgY29uc2lkZXIgYXMgYW4gYXBwbGljYXRpb24gbWlzdGFrZSBm b3IgdGhlCisgICAgLy8gbW9tZW50LgorICAgIGlmIChfTV9jYXRhbG9nX2NvdW50ZXIgPT0gbnVt ZXJpY19saW1pdHM8bWVzc2FnZXNfYmFzZTo6Y2F0YWxvZz46Om1heCgpKQorICAgICAgcmV0dXJu IC0xOworCisgICAgYXV0b19wdHI8Q2F0YWxvZ19pbmZvPiBpbmZvKG5ldyBDYXRhbG9nX2luZm8o X01fY2F0YWxvZ19jb3VudGVyKyssCisJCQkJCQkgX19kb21haW4sIF9fbCkpOworCisgICAgLy8g Q2hlY2sgaWYgd2UgbWFuYWdlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGRvbWFpbi4KKyAgICBp ZiAoIWluZm8tPl9NX2RvbWFpbikKKyAgICAgIHJldHVybiAtMTsKKworICAgIF9NX2luZm9zLnB1 c2hfYmFjayhpbmZvLmdldCgpKTsKKyAgICByZXR1cm4gaW5mby5yZWxlYXNlKCktPl9NX2lkOwor ICB9CisKKyAgdm9pZAorICBDYXRhbG9nczo6X01fZXJhc2UobWVzc2FnZXNfYmFzZTo6Y2F0YWxv ZyBfX2MpCisgIHsKKyAgICBfX2dudV9jeHg6Ol9fc2NvcGVkX2xvY2sgbG9jayhfTV9tdXRleCk7 CisKKyAgICB2ZWN0b3I8Q2F0YWxvZ19pbmZvKj46Oml0ZXJhdG9yIF9fcmVzID0KKyAgICAgIGxv d2VyX2JvdW5kKF9NX2luZm9zLmJlZ2luKCksIF9NX2luZm9zLmVuZCgpLCBfX2MsIF9DYXRhbG9n SWRDb21wKCkpOworICAgIGlmIChfX3JlcyA9PSBfTV9pbmZvcy5lbmQoKSB8fCAoKl9fcmVzKS0+ X01faWQgIT0gX19jKQorICAgICAgcmV0dXJuOworCisgICAgZGVsZXRlICpfX3JlczsKKyAgICBf TV9pbmZvcy5lcmFzZShfX3Jlcyk7CisKKyAgICAvLyBKdXN0IGluIGNhc2UgY2xvc2VkIGNhdGFs b2cgd2FzIHRoZSBsYXN0IG9wZW4uCisgICAgaWYgKF9fYyA9PSBfTV9jYXRhbG9nX2NvdW50ZXIg LSAxKQorICAgICAgLS1fTV9jYXRhbG9nX2NvdW50ZXI7CisgIH0KKworICBjb25zdCBDYXRhbG9n X2luZm8qCisgIENhdGFsb2dzOjpfTV9nZXQobWVzc2FnZXNfYmFzZTo6Y2F0YWxvZyBfX2MpIGNv bnN0CisgIHsKKyAgICBfX2dudV9jeHg6Ol9fc2NvcGVkX2xvY2sgbG9jayhfTV9tdXRleCk7CisK KyAgICB2ZWN0b3I8Q2F0YWxvZ19pbmZvKj46OmNvbnN0X2l0ZXJhdG9yIF9fcmVzID0KKyAgICAg IGxvd2VyX2JvdW5kKF9NX2luZm9zLmJlZ2luKCksIF9NX2luZm9zLmVuZCgpLCBfX2MsIF9DYXRh bG9nSWRDb21wKCkpOworCisgICAgaWYgKF9fcmVzICE9IF9NX2luZm9zLmVuZCgpICYmICgqX19y ZXMpLT5fTV9pZCA9PSBfX2MpCisgICAgICByZXR1cm4gKl9fcmVzOworCisgICAgcmV0dXJuIDA7 CisgIH0KKworICBDYXRhbG9ncyYKKyAgZ2V0X2NhdGFsb2dzKCkKKyAgeworICAgIHN0YXRpYyBD YXRhbG9ncyBfX2NhdGFsb2dzOworICAgIHJldHVybiBfX2NhdGFsb2dzOworICB9CisKK19HTElC Q1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2UKKworbmFtZXNwYWNlIF9f Z251X2N4eCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1bHQpCit7CitfR0xJQkNYWF9CRUdJTl9O QU1FU1BBQ0VfVkVSU0lPTgorCisgIGNvbnN0IGNoYXIqIGNvbnN0IGNhdGVnb3J5X25hbWVzW05V TV9DQVRFR09SSUVTXSA9CisgICAgeworICAgICAgIkxDX0NUWVBFIiwKKyAgICAgICJMQ19OVU1F UklDIiwKKyAgICAgICJMQ19USU1FIiwKKyAgICAgICJMQ19DT0xMQVRFIiwKKyAgICAgICJMQ19N T05FVEFSWSIsCisgICAgICAiTENfTUVTU0FHRVMiLAorICAgIH07CisKK19HTElCQ1hYX0VORF9O QU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2UKKworc3RhdGljIGNoYXIgKgorX19zZXRs b2NhbGVfZm9yX25ld2xpYihpbnQgX19jYXRlZ29yeSwgY29uc3QgY2hhciAqX19sb2NhbGUpCit7 CisgIGNoYXIgKl9fcmV0OworICBpZiAoKF9fcmV0ID0gc2V0bG9jYWxlKF9fY2F0ZWdvcnksIF9f bG9jYWxlKSkgPT0gTlVMTAorICAgICAgJiYgX19jYXRlZ29yeSA9PSBMQ19BTEwpCisgICAgewor ICAgICAgLyogTmV3bGliIGRvZXMgbm90IHN1cHBvcnQgbG9jYWxlIHN0cmlnIHN1Y2ggYXMKKwkg IkxDX0NUWVBFPWVuX1VTLlVURjg7TENfTlVNRVJJQz1kZV9ERS5VVEY4Oy4uLiIgKi8KKyAgICAg IGNoYXIgX19idWZbTlVNX0NBVEVHT1JJRVNdW0VOQ09ESU5HX0xFTiArIDFdOworICAgICAgY29u c3QgY2hhciAqX19wID0gX19sb2NhbGU7CisgICAgICBjaGFyIF9fY2F0W0NBVEVHT1JZX0xFTiAr IDFdLCBfX2xvY1tFTkNPRElOR19MRU4gKyAxXTsKKyAgICAgIHdoaWxlICgyID09IHNzY2FuZihf X3AsIEZNVF9MT0NBTEUsIF9fY2F0LCBfX2xvYykpCisJeworCSAgY29uc3QgY2hhciAqX190Ymxb TlVNX0NBVEVHT1JJRVNdID0KKwkgICAgeworCSAgICAgICJMQ19DT0xMQVRFIiwKKwkgICAgICAi TENfQ1RZUEUiLAorCSAgICAgICJMQ19NT05FVEFSWSIsCisJICAgICAgIkxDX05VTUVSSUMiLAor CSAgICAgICJMQ19USU1FIiwKKwkgICAgICAiTENfTUVTU0FHRVMiCisJICAgIH07CisJICBmb3Ig KGludCBfX2kgPSAwOyBfX2kgPCBOVU1fQ0FURUdPUklFUzsgX19pKyspCisJICAgIGlmIChzdHJj bXAoX190YmxbX19pXSwgX19jYXQpID09IDApCisJICAgICAgeworCQlzdHJuY3B5KF9fYnVmW19f aV0sIF9fbG9jLCBzaXplb2YoX19idWZbX19pXSkpOworCQlfX2J1ZltfX2ldW0VOQ09ESU5HX0xF Tl0gPSAnXDAnOworCQlicmVhazsKKwkgICAgICB9CisJICBpZiAoKF9fcCA9IHN0cmNocihfX3As ICc7JykpID09IE5VTEwpCisJICAgIGJyZWFrOworCSAgX19wICsrOworCX0KKyAgICAgIGNoYXIg X19uZXdsb2NbKEVOQ09ESU5HX0xFTiArIDEpICogTlVNX0NBVEVHT1JJRVNdOworICAgICAgc3By aW50ZihfX25ld2xvYywgIiVzLyVzLyVzLyVzLyVzLyVzIiwKKwkgICAgICBfX2J1ZlswXSwgX19i dWZbMV0sIF9fYnVmWzJdLCBfX2J1ZlszXSwgX19idWZbNF0sIF9fYnVmWzVdKTsKKyAgICAgIF9f cmV0ID0gc2V0bG9jYWxlKF9fY2F0ZWdvcnksIF9fbmV3bG9jKTsKKworICAgIH0KKyAgcmV0dXJu IF9fcmV0OworfQorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkK K3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgY29uc3QgY2hhciogY29u c3QqIGNvbnN0IGxvY2FsZTo6X1NfY2F0ZWdvcmllcyA9IF9fZ251X2N4eDo6Y2F0ZWdvcnlfbmFt ZXM7CisgIGNvbnN0IF9fdHlwZW9mKHNldGxvY2FsZSkgKl9fc2V0bG9jYWxlID0gX19zZXRsb2Nh bGVfZm9yX25ld2xpYjsKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5h bWVzcGFjZQorCisvLyBYWFggR0xJQkNYWF9BQkkgRGVwcmVjYXRlZAorI2lmZGVmIF9HTElCQ1hY X0xPTkdfRE9VQkxFX0NPTVBBVAorI2RlZmluZSBfR0xJQkNYWF9MREJMX0NPTVBBVChkYmwsIGxk YmwpIFwKKyAgZXh0ZXJuICJDIiB2b2lkIGxkYmwgKHZvaWQpIF9fYXR0cmlidXRlX18gKChhbGlh cyAoI2RibCkpKQorX0dMSUJDWFhfTERCTF9DT01QQVQoX1pTdDE0X19jb252ZXJ0X3RvX3ZJZEV2 UEtjUlRfUlN0MTJfSW9zX0lvc3RhdGVSS1BpLCBfWlN0MTRfX2NvbnZlcnRfdG9fdkllRXZQS2NS VF9SU3QxMl9Jb3NfSW9zdGF0ZVJLUGkpOworI2VuZGlmIC8vIF9HTElCQ1hYX0xPTkdfRE9VQkxF X0NPTVBBVApkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvbmV3bGliL2Nf bG9jYWxlLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9uZXdsaWIvY19sb2NhbGUuaApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYzE4OWFiYzg3MmIKLS0tIC9k ZXYvbnVsbAorKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9uZXdsaWIvY19sb2NhbGUu aApAQCAtMCwwICsxLDEwMCBAQAorLy8gV3JhcHBlciBmb3IgdW5kZXJseWluZyBDLWxhbmd1YWdl IGxvY2FsaXphdGlvbiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAyMyBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBv ZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUK Ky8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQg YnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9y IChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJh cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8v IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh bnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk ZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBn cmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1 bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5 IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNl aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBj b3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMg cHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSBy ZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNl cy8+LgorCisvKiogQGZpbGUgYml0cy9jKytsb2NhbGUuaAorICogIFRoaXMgaXMgYW4gaW50ZXJu YWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBE byBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuIEBoZWFkZXJuYW1le2xvY2FsZX0KKyAq LworCisvLworLy8gSVNPIEMrKyAxNDg4MjogMjIuOCAgU3RhbmRhcmQgbG9jYWxlIGNhdGVnb3Jp ZXMuCisvLworCisvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29t PgorLy8gTW9kaWZpZWQgYnkgVGFrYXNoaSBZYW5vIDx0YWthc2hpLnlhbm9AbmlmdHkubmUuanA+ CisKKyNpZm5kZWYgX0dMSUJDWFhfQ1hYX0xPQ0FMRV9ICisjZGVmaW5lIF9HTElCQ1hYX0NYWF9M T0NBTEVfSCAxCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2luY2x1ZGUgPGNsb2Nh bGU+CisKKyNpZiBfX1BPU0lYX1ZJU0lCTEUgPCAyMDA4MDkKK3N0cnVjdCBfX2xvY2FsZV90Owor dHlwZWRlZiBzdHJ1Y3QgX19sb2NhbGVfdCAqbG9jYWxlX3Q7CisKKyNkZWZpbmUgTENfQUxMX01B U0sJCSgxIDw8IExDX0FMTCkKKyNkZWZpbmUgTENfQ09MTEFURV9NQVNLCQkoMSA8PCBMQ19DT0xM QVRFKQorI2RlZmluZSBMQ19DVFlQRV9NQVNLCQkoMSA8PCBMQ19DVFlQRSkKKyNkZWZpbmUgTENf TU9ORVRBUllfTUFTSwkoMSA8PCBMQ19NT05FVEFSWSkKKyNkZWZpbmUgTENfTlVNRVJJQ19NQVNL CQkoMSA8PCBMQ19OVU1FUklDKQorI2RlZmluZSBMQ19USU1FX01BU0sJCSgxIDw8IExDX1RJTUUp CisjZGVmaW5lIExDX01FU1NBR0VTX01BU0sJKDEgPDwgTENfTUVTU0FHRVMpCisKK2V4dGVybiAi QyIgbG9jYWxlX3QgbmV3bG9jYWxlKGludCwgY29uc3QgY2hhciAqLCBsb2NhbGVfdCk7CitleHRl cm4gIkMiIHZvaWQgZnJlZWxvY2FsZShsb2NhbGVfdCk7CitleHRlcm4gIkMiIGxvY2FsZV90IGR1 cGxvY2FsZShsb2NhbGVfdCk7CitleHRlcm4gIkMiIGxvY2FsZV90IHVzZWxvY2FsZShsb2NhbGVf dCk7CisjZW5kaWYgLyogX19QT1NJWF9WSVNJQkxFIDwgMjAwODA5ICovCisKKyNkZWZpbmUgX0dM SUJDWFhfTlVNX0NBVEVHT1JJRVMgMAorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJ VFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgdHlw ZWRlZiBsb2NhbGVfdCBfX2NfbG9jYWxlOworCisgIC8vIENvbnZlcnQgbnVtZXJpYyB2YWx1ZSBv ZiB0eXBlIGRvdWJsZSBhbmQgbG9uZyBkb3VibGUgdG8gc3RyaW5nIGFuZAorICAvLyByZXR1cm4g bGVuZ3RoIG9mIHN0cmluZy4gIElmIHZzbnByaW50ZiBpcyBhdmFpbGFibGUgdXNlIGl0LCBvdGhl cndpc2UKKyAgLy8gZmFsbCBiYWNrIHRvIHRoZSB1bnNhZmUgdnNwcmludGYgd2hpY2gsIGluIGdl bmVyYWwsIGNhbiBiZSBkYW5nZXJvdXMKKyAgLy8gYW5kIHNob3VsZCBiZSBhdm9pZGVkLgorICBp bmxpbmUgaW50CisgIF9fY29udmVydF9mcm9tX3YoY29uc3QgX19jX2xvY2FsZSYgX19jbG9jIF9f YXR0cmlidXRlX18gKChfX3VudXNlZF9fKSksCisJCSAgIGNoYXIqIF9fb3V0LAorCQkgICBjb25z dCBpbnQgX19zaXplIF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSksCisJCSAgIGNvbnN0IGNo YXIqIF9fZm10LCAuLi4pCisgIHsKKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gdXNlbG9jYWxlKF9f Y2xvYyk7CisKKyAgICBfX2J1aWx0aW5fdmFfbGlzdCBfX2FyZ3M7CisgICAgX19idWlsdGluX3Zh X3N0YXJ0KF9fYXJncywgX19mbXQpOworCisjaWYgX0dMSUJDWFhfVVNFX0M5OV9TVERJTworICAg IGNvbnN0IGludCBfX3JldCA9IF9fYnVpbHRpbl92c25wcmludGYoX19vdXQsIF9fc2l6ZSwgX19m bXQsIF9fYXJncyk7CisjZWxzZQorICAgIGNvbnN0IGludCBfX3JldCA9IF9fYnVpbHRpbl92c3By aW50ZihfX291dCwgX19mbXQsIF9fYXJncyk7CisjZW5kaWYKKworICAgIF9fYnVpbHRpbl92YV9l bmQoX19hcmdzKTsKKworICAgIHVzZWxvY2FsZShfX29sZCk7CisgICAgcmV0dXJuIF9fcmV0Owor ICB9CisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1lc3BhY2UKKwor I2VuZGlmCmRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9uZXdsaWIvY29k ZWN2dF9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvbmV3bGliL2NvZGVj dnRfbWVtYmVycy5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZTQ4 MzU0MmNlYjQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9u ZXdsaWIvY29kZWN2dF9tZW1iZXJzLmNjCkBAIC0wLDAgKzEsMjg4IEBACisvLyBzdGQ6OmNvZGVj dnQgaW1wbGVtZW50YXRpb24gZGV0YWlscywgbmV3bGliIHZlcnNpb24gLSotIEMrKyAtKi0KKwor Ly8gQ29weXJpZ2h0IChDKSAyMDAyLTIwMjMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu CisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBU aGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0 ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3 IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNz aW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJz aW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u LgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFy eSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENP UFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8v IDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8KKy8vIElTTyBDKysgMTQ4ODI6 IDIyLjIuMS41IC0gVGVtcGxhdGUgY2xhc3MgY29kZWN2dAorLy8KKworLy8gV3JpdHRlbiBieSBC ZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVkaGF0LmNvbT4KKy8vIE1vZGlmaWVkIGJ5IFRha2FzaGkg WWFubyA8dGFrYXNoaS55YW5vQG5pZnR5Lm5lLmpwPgorCisjaW5jbHVkZSA8bG9jYWxlPgorI2lu Y2x1ZGUgPGNzdGRsaWI+ICAvLyBGb3IgTUJfQ1VSX01BWAorI2luY2x1ZGUgPGNsaW1pdHM+ICAv LyBGb3IgTUJfTEVOX01BWAorI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisK K25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhf QkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICAvLyBTcGVjaWFsaXphdGlvbnMuCisjaWZkZWYg X0dMSUJDWFhfVVNFX1dDSEFSX1QKKyAgY29kZWN2dF9iYXNlOjpyZXN1bHQKKyAgY29kZWN2dDx3 Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OjoKKyAgZG9fb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUs IGNvbnN0IGludGVybl90eXBlKiBfX2Zyb20sCisJIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21f ZW5kLCBjb25zdCBpbnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAorCSBleHRlcm5fdHlwZSogX190 bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAorCSBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29u c3QKKyAgeworICAgIHJlc3VsdCBfX3JldCA9IG9rOworICAgIHN0YXRlX3R5cGUgX190bXBfc3Rh dGUoX19zdGF0ZSk7CisKKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gdXNlbG9jYWxlKF9NX2NfbG9j YWxlX2NvZGVjdnQpOworCisgICAgLy8gd2NzbnJ0b21icyBpcyAqdmVyeSogZmFzdCBidXQgc3Rv cHMgaWYgZW5jb3VudGVycyBOVUwgY2hhcmFjdGVyczoKKyAgICAvLyBpbiBjYXNlIHdlIGZhbGwg YmFjayB0byB3Y3J0b21iIGFuZCB0aGVuIGNvbnRpbnVlLCBpbiBhIGxvb3AuCisgICAgLy8gTkI6 IHdjc25ydG9tYnMgaXMgYSBHTlUgZXh0ZW5zaW9uCisgICAgZm9yIChfX2Zyb21fbmV4dCA9IF9f ZnJvbSwgX190b19uZXh0ID0gX190bzsKKwkgX19mcm9tX25leHQgPCBfX2Zyb21fZW5kICYmIF9f dG9fbmV4dCA8IF9fdG9fZW5kCisJICYmIF9fcmV0ID09IG9rOykKKyAgICAgIHsKKwljb25zdCBp bnRlcm5fdHlwZSogX19mcm9tX2NodW5rX2VuZCA9IHdtZW1jaHIoX19mcm9tX25leHQsIEwnXDAn LAorCQkJCQkJICAgICAgX19mcm9tX2VuZCAtIF9fZnJvbV9uZXh0KTsKKwlpZiAoIV9fZnJvbV9j aHVua19lbmQpCisJICBfX2Zyb21fY2h1bmtfZW5kID0gX19mcm9tX2VuZDsKKworCV9fZnJvbSA9 IF9fZnJvbV9uZXh0OworCWNvbnN0IHNpemVfdCBfX2NvbnYgPSB3Y3NucnRvbWJzKF9fdG9fbmV4 dCwgJl9fZnJvbV9uZXh0LAorCQkJCQkgX19mcm9tX2NodW5rX2VuZCAtIF9fZnJvbV9uZXh0LAor CQkJCQkgX190b19lbmQgLSBfX3RvX25leHQsICZfX3N0YXRlKTsKKwlpZiAoX19jb252ID09IHN0 YXRpY19jYXN0PHNpemVfdD4oLTEpKQorCSAgeworCSAgICAvLyBJbiBjYXNlIG9mIGVycm9yLCBp biBvcmRlciB0byBzdG9wIGF0IHRoZSBleGFjdCBwbGFjZSB3ZQorCSAgICAvLyBoYXZlIHRvIHN0 YXJ0IGFnYWluIGZyb20gdGhlIGJlZ2lubmluZyB3aXRoIGEgc2VyaWVzIG9mCisJICAgIC8vIHdj cnRvbWIuCisJICAgIGZvciAoOyBfX2Zyb20gPCBfX2Zyb21fbmV4dDsgKytfX2Zyb20pCisJICAg ICAgX190b19uZXh0ICs9IHdjcnRvbWIoX190b19uZXh0LCAqX19mcm9tLCAmX190bXBfc3RhdGUp OworCSAgICBfX3N0YXRlID0gX190bXBfc3RhdGU7CisJICAgIF9fcmV0ID0gZXJyb3I7CisJICB9 CisJZWxzZSBpZiAoX19mcm9tX25leHQgJiYgX19mcm9tX25leHQgPCBfX2Zyb21fY2h1bmtfZW5k KQorCSAgeworCSAgICBfX3RvX25leHQgKz0gX19jb252OworCSAgICBfX3JldCA9IHBhcnRpYWw7 CisJICB9CisJZWxzZQorCSAgeworCSAgICBfX2Zyb21fbmV4dCA9IF9fZnJvbV9jaHVua19lbmQ7 CisJICAgIF9fdG9fbmV4dCArPSBfX2NvbnY7CisJICB9CisKKwlpZiAoX19mcm9tX25leHQgPCBf X2Zyb21fZW5kICYmIF9fcmV0ID09IG9rKQorCSAgeworCSAgICBleHRlcm5fdHlwZSBfX2J1ZltN Ql9MRU5fTUFYXTsKKwkgICAgX190bXBfc3RhdGUgPSBfX3N0YXRlOworCSAgICBjb25zdCBzaXpl X3QgX19jb252MiA9IHdjcnRvbWIoX19idWYsICpfX2Zyb21fbmV4dCwgJl9fdG1wX3N0YXRlKTsK KwkgICAgaWYgKF9fY29udjIgPiBzdGF0aWNfY2FzdDxzaXplX3Q+KF9fdG9fZW5kIC0gX190b19u ZXh0KSkKKwkgICAgICBfX3JldCA9IHBhcnRpYWw7CisJICAgIGVsc2UKKwkgICAgICB7CisJCW1l bWNweShfX3RvX25leHQsIF9fYnVmLCBfX2NvbnYyKTsKKwkJX19zdGF0ZSA9IF9fdG1wX3N0YXRl OworCQlfX3RvX25leHQgKz0gX19jb252MjsKKwkJKytfX2Zyb21fbmV4dDsKKwkgICAgICB9CisJ ICB9CisgICAgICB9CisKKyAgICB1c2Vsb2NhbGUoX19vbGQpOworCisgICAgcmV0dXJuIF9fcmV0 OworICB9CisKKyAgY29kZWN2dF9iYXNlOjpyZXN1bHQKKyAgY29kZWN2dDx3Y2hhcl90LCBjaGFy LCBtYnN0YXRlX3Q+OjoKKyAgZG9faW4oc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJu X3R5cGUqIF9fZnJvbSwKKwljb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgZXh0 ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKKwlpbnRlcm5fdHlwZSogX190bywgaW50ZXJuX3R5cGUq IF9fdG9fZW5kLAorCWludGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdAorICB7CisgICAgcmVz dWx0IF9fcmV0ID0gb2s7CisgICAgc3RhdGVfdHlwZSBfX3RtcF9zdGF0ZShfX3N0YXRlKTsKKwor ICAgIF9fY19sb2NhbGUgX19vbGQgPSB1c2Vsb2NhbGUoX01fY19sb2NhbGVfY29kZWN2dCk7CisK KyAgICAvLyBtYnNucnRvd2NzIGlzICp2ZXJ5KiBmYXN0IGJ1dCBzdG9wcyBpZiBlbmNvdW50ZXJz IE5VTCBjaGFyYWN0ZXJzOgorICAgIC8vIGluIGNhc2Ugd2Ugc3RvcmUgYSBMJ1wwJyBhbmQgdGhl biBjb250aW51ZSwgaW4gYSBsb29wLgorICAgIC8vIE5COiBtYnNucnRvd2NzIGlzIGEgR05VIGV4 dGVuc2lvbgorICAgIGZvciAoX19mcm9tX25leHQgPSBfX2Zyb20sIF9fdG9fbmV4dCA9IF9fdG87 CisJIF9fZnJvbV9uZXh0IDwgX19mcm9tX2VuZCAmJiBfX3RvX25leHQgPCBfX3RvX2VuZAorCSAm JiBfX3JldCA9PSBvazspCisgICAgICB7CisJY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9jaHVu a19lbmQ7CisJX19mcm9tX2NodW5rX2VuZCA9IHN0YXRpY19jYXN0PGNvbnN0IGV4dGVybl90eXBl Kj4obWVtY2hyKF9fZnJvbV9uZXh0LCAnXDAnLAorCQkJCQkJCQkgIF9fZnJvbV9lbmQKKwkJCQkJ CQkJICAtIF9fZnJvbV9uZXh0KSk7CisJaWYgKCFfX2Zyb21fY2h1bmtfZW5kKQorCSAgX19mcm9t X2NodW5rX2VuZCA9IF9fZnJvbV9lbmQ7CisKKwlfX2Zyb20gPSBfX2Zyb21fbmV4dDsKKwlzaXpl X3QgX19jb252ID0gbWJzbnJ0b3djcyhfX3RvX25leHQsICZfX2Zyb21fbmV4dCwKKwkJCQkgICBf X2Zyb21fY2h1bmtfZW5kIC0gX19mcm9tX25leHQsCisJCQkJICAgX190b19lbmQgLSBfX3RvX25l eHQsICZfX3N0YXRlKTsKKwlpZiAoX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpKQor CSAgeworCSAgICAvLyBJbiBjYXNlIG9mIGVycm9yLCBpbiBvcmRlciB0byBzdG9wIGF0IHRoZSBl eGFjdCBwbGFjZSB3ZQorCSAgICAvLyBoYXZlIHRvIHN0YXJ0IGFnYWluIGZyb20gdGhlIGJlZ2lu bmluZyB3aXRoIGEgc2VyaWVzIG9mCisJICAgIC8vIG1icnRvd2MuCisJICAgIGZvciAoOzsgKytf X3RvX25leHQsIF9fZnJvbSArPSBfX2NvbnYpCisJICAgICAgeworCQlfX2NvbnYgPSBtYnJ0b3dj KF9fdG9fbmV4dCwgX19mcm9tLCBfX2Zyb21fZW5kIC0gX19mcm9tLAorCQkJCSAmX190bXBfc3Rh dGUpOworCQlpZiAoX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTEpCisJCSAgICB8fCBf X2NvbnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMikpCisJCSAgYnJlYWs7CisJICAgICAgfQor CSAgICBfX2Zyb21fbmV4dCA9IF9fZnJvbTsKKwkgICAgX19zdGF0ZSA9IF9fdG1wX3N0YXRlOwor CSAgICBfX3JldCA9IGVycm9yOworCSAgfQorCWVsc2UgaWYgKF9fZnJvbV9uZXh0ICYmIF9fZnJv bV9uZXh0IDwgX19mcm9tX2NodW5rX2VuZCkKKwkgIHsKKwkgICAgLy8gSXQgaXMgdW5jbGVhciB3 aGF0IHRvIHJldHVybiBpbiB0aGlzIGNhc2UgKHNlZSBEUiAzODIpLgorCSAgICBfX3RvX25leHQg Kz0gX19jb252OworCSAgICBfX3JldCA9IHBhcnRpYWw7CisJICB9CisJZWxzZQorCSAgeworCSAg ICBfX2Zyb21fbmV4dCA9IF9fZnJvbV9jaHVua19lbmQ7CisJICAgIF9fdG9fbmV4dCArPSBfX2Nv bnY7CisJICB9CisKKwlpZiAoX19mcm9tX25leHQgPCBfX2Zyb21fZW5kICYmIF9fcmV0ID09IG9r KQorCSAgeworCSAgICBpZiAoX190b19uZXh0IDwgX190b19lbmQpCisJICAgICAgeworCQkvLyBY WFggUHJvYmFibHkgd3JvbmcgZm9yIHN0YXRlZnVsIGVuY29kaW5ncworCQlfX3RtcF9zdGF0ZSA9 IF9fc3RhdGU7CisJCSsrX19mcm9tX25leHQ7CisJCSpfX3RvX25leHQrKyA9IEwnXDAnOworCSAg ICAgIH0KKwkgICAgZWxzZQorCSAgICAgIF9fcmV0ID0gcGFydGlhbDsKKwkgIH0KKyAgICAgIH0K KworICAgIHVzZWxvY2FsZShfX29sZCk7CisKKyAgICByZXR1cm4gX19yZXQ7CisgIH0KKworICBp bnQKKyAgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OjoKKyAgZG9fZW5jb2Rpbmco KSBjb25zdCB0aHJvdygpCisgIHsKKyAgICAvLyBYWFggVGhpcyBpbXBsZW1lbnRhdGlvbiBhc3N1 bWVzIHRoYXQgdGhlIGVuY29kaW5nIGlzCisgICAgLy8gc3RhdGVsZXNzIGFuZCBpcyBlaXRoZXIg c2luZ2xlLWJ5dGUgb3IgdmFyaWFibGUtd2lkdGguCisgICAgaW50IF9fcmV0ID0gMDsKKyAgICBf X2NfbG9jYWxlIF9fb2xkID0gdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2NvZGVjdnQpOworICAgIGlm IChNQl9DVVJfTUFYID09IDEpCisgICAgICBfX3JldCA9IDE7CisgICAgdXNlbG9jYWxlKF9fb2xk KTsKKyAgICByZXR1cm4gX19yZXQ7CisgIH0KKworICBpbnQKKyAgY29kZWN2dDx3Y2hhcl90LCBj aGFyLCBtYnN0YXRlX3Q+OjoKKyAgZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCkKKyAgewor ICAgIF9fY19sb2NhbGUgX19vbGQgPSB1c2Vsb2NhbGUoX01fY19sb2NhbGVfY29kZWN2dCk7Cisg ICAgLy8gWFhYIFByb2JhYmx5IHdyb25nIGZvciBzdGF0ZWZ1bCBlbmNvZGluZ3MuCisgICAgaW50 IF9fcmV0ID0gTUJfQ1VSX01BWDsKKyAgICB1c2Vsb2NhbGUoX19vbGQpOworICAgIHJldHVybiBf X3JldDsKKyAgfQorCisgIGludAorICBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD46 OgorICBkb19sZW5ndGgoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9f ZnJvbSwKKwkgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0 CisgIHsKKyAgICBpbnQgX19yZXQgPSAwOworICAgIHN0YXRlX3R5cGUgX190bXBfc3RhdGUoX19z dGF0ZSk7CisKKyAgICBfX2NfbG9jYWxlIF9fb2xkID0gdXNlbG9jYWxlKF9NX2NfbG9jYWxlX2Nv ZGVjdnQpOworCisgICAgLy8gbWJzbnJ0b3djcyBpcyAqdmVyeSogZmFzdCBidXQgc3RvcHMgaWYg ZW5jb3VudGVycyBOVUwgY2hhcmFjdGVyczoKKyAgICAvLyBpbiBjYXNlIHdlIGFkdmFuY2UgcGFz dCBpdCBhbmQgdGhlbiBjb250aW51ZSwgaW4gYSBsb29wLgorICAgIC8vIE5COiBtYnNucnRvd2Nz IGlzIGEgR05VIGV4dGVuc2lvbgorCisgICAgLy8gQSBkdW1teSBpbnRlcm5hbCBidWZmZXIgaXMg bmVlZGVkIGluIG9yZGVyIGZvciBtYnNucnRvY3dzIHRvIGNvbnNpZGVyCisgICAgLy8gaXRzIGZv dXJ0aCBwYXJhbWV0ZXIgKGl0IHdvdWxkbid0IHdpdGggTlVMTCBhcyBmaXJzdCBwYXJhbWV0ZXIp LgorICAgIHdjaGFyX3QqIF9fdG8gPSBzdGF0aWNfY2FzdDx3Y2hhcl90Kj4oX19idWlsdGluX2Fs bG9jYShzaXplb2Yod2NoYXJfdCkKKwkJCQkJCQkgICAqIF9fbWF4KSk7CisgICAgd2hpbGUgKF9f ZnJvbSA8IF9fZW5kICYmIF9fbWF4KQorICAgICAgeworCWNvbnN0IGV4dGVybl90eXBlKiBfX2Zy b21fY2h1bmtfZW5kOworCV9fZnJvbV9jaHVua19lbmQgPSBzdGF0aWNfY2FzdDxjb25zdCBleHRl cm5fdHlwZSo+KG1lbWNocihfX2Zyb20sICdcMCcsCisJCQkJCQkJCSAgX19lbmQKKwkJCQkJCQkJ ICAtIF9fZnJvbSkpOworCWlmICghX19mcm9tX2NodW5rX2VuZCkKKwkgIF9fZnJvbV9jaHVua19l bmQgPSBfX2VuZDsKKworCWNvbnN0IGV4dGVybl90eXBlKiBfX3RtcF9mcm9tID0gX19mcm9tOwor CXNpemVfdCBfX2NvbnYgPSBtYnNucnRvd2NzKF9fdG8sICZfX2Zyb20sCisJCQkJICAgX19mcm9t X2NodW5rX2VuZCAtIF9fZnJvbSwKKwkJCQkgICBfX21heCwgJl9fc3RhdGUpOworCWlmIChfX2Nv bnYgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSkpCisJICB7CisJICAgIC8vIEluIGNhc2Ugb2Yg ZXJyb3IsIGluIG9yZGVyIHRvIHN0b3AgYXQgdGhlIGV4YWN0IHBsYWNlIHdlCisJICAgIC8vIGhh dmUgdG8gc3RhcnQgYWdhaW4gZnJvbSB0aGUgYmVnaW5uaW5nIHdpdGggYSBzZXJpZXMgb2YKKwkg ICAgLy8gbWJydG93Yy4KKwkgICAgZm9yIChfX2Zyb20gPSBfX3RtcF9mcm9tOzsgX19mcm9tICs9 IF9fY29udikKKwkgICAgICB7CisJCV9fY29udiA9IG1icnRvd2MoMCwgX19mcm9tLCBfX2VuZCAt IF9fZnJvbSwKKwkJCQkgJl9fdG1wX3N0YXRlKTsKKwkJaWYgKF9fY29udiA9PSBzdGF0aWNfY2Fz dDxzaXplX3Q+KC0xKQorCQkgICAgfHwgX19jb252ID09IHN0YXRpY19jYXN0PHNpemVfdD4oLTIp KQorCQkgIGJyZWFrOworCSAgICAgIH0KKwkgICAgX19zdGF0ZSA9IF9fdG1wX3N0YXRlOworCSAg ICBfX3JldCArPSBfX2Zyb20gLSBfX3RtcF9mcm9tOworCSAgICBicmVhazsKKwkgIH0KKwlpZiAo IV9fZnJvbSkKKwkgIF9fZnJvbSA9IF9fZnJvbV9jaHVua19lbmQ7CisKKwlfX3JldCArPSBfX2Zy b20gLSBfX3RtcF9mcm9tOworCV9fbWF4IC09IF9fY29udjsKKworCWlmIChfX2Zyb20gPCBfX2Vu ZCAmJiBfX21heCkKKwkgIHsKKwkgICAgLy8gWFhYIFByb2JhYmx5IHdyb25nIGZvciBzdGF0ZWZ1 bCBlbmNvZGluZ3MKKwkgICAgX190bXBfc3RhdGUgPSBfX3N0YXRlOworCSAgICArK19fZnJvbTsK KwkgICAgKytfX3JldDsKKwkgICAgLS1fX21heDsKKwkgIH0KKyAgICAgIH0KKworICAgIHVzZWxv Y2FsZShfX29sZCk7CisKKyAgICByZXR1cm4gX19yZXQ7CisgIH0KKyNlbmRpZgorCitfR0xJQkNY WF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9saWJz dGRjKystdjMvY29uZmlnL2xvY2FsZS9uZXdsaWIvY29sbGF0ZV9tZW1iZXJzLmNjIGIvbGlic3Rk YysrLXYzL2NvbmZpZy9sb2NhbGUvbmV3bGliL2NvbGxhdGVfbWVtYmVycy5jYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNzRhNjQ2MTQzYmUKLS0tIC9kZXYvbnVsbAor KysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9uZXdsaWIvY29sbGF0ZV9tZW1iZXJzLmNj CkBAIC0wLDAgKzEsNzQgQEAKKy8vIHN0ZDo6Y29sbGF0ZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxz LCBuZXdsaWIgdmVyc2lvbiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAy MyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFy dCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBz b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0 aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNo ZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMs IG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxp YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK Ky8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y ZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFy ZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0ND IFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVk IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSBy ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8g YSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRo aXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElN RSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNl bnNlcy8+LgorCisvLworLy8gSVNPIEMrKyAxNDg4MjogMjIuMi40LjEuMiAgY29sbGF0ZSB2aXJ0 dWFsIGZ1bmN0aW9ucworLy8KKworLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pA cmVkaGF0LmNvbT4KKy8vIE1vZGlmaWVkIGJ5IFRha2FzaGkgWWFubyA8dGFrYXNoaS55YW5vQG5p ZnR5Lm5lLmpwPgorCisjaW5jbHVkZSA8bG9jYWxlPgorI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxl X2ludGVybmFsLmg+CisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0 KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworICAvLyBUaGVzZSBhcmUg YmFzaWNhbGx5IGV4dGVuc2lvbnMgdG8gY2hhcl90cmFpdHMsIGFuZCBwZXJoYXBzIHNob3VsZAor ICAvLyBiZSBwdXQgdGhlcmUgaW5zdGVhZCBvZiBoZXJlLgorICB0ZW1wbGF0ZTw+CisgICAgaW50 CisgICAgY29sbGF0ZTxjaGFyPjo6X01fY29tcGFyZShjb25zdCBjaGFyKiBfX29uZSwKKwkJCSAg ICAgIGNvbnN0IGNoYXIqIF9fdHdvKSBjb25zdCB0aHJvdygpCisgICAgeworICAgICAgaW50IF9f Y21wID0gc3RyY29sbF9sKF9fb25lLCBfX3R3bywgX01fY19sb2NhbGVfY29sbGF0ZSk7CisgICAg ICByZXR1cm4gKF9fY21wID4+ICg4ICogc2l6ZW9mIChpbnQpIC0gMikpIHwgKF9fY21wICE9IDAp OworICAgIH0KKworICB0ZW1wbGF0ZTw+CisgICAgc2l6ZV90CisgICAgY29sbGF0ZTxjaGFyPjo6 X01fdHJhbnNmb3JtKGNoYXIqIF9fdG8sIGNvbnN0IGNoYXIqIF9fZnJvbSwKKwkJCQlzaXplX3Qg X19uKSBjb25zdCB0aHJvdygpCisgICAgeyByZXR1cm4gc3RyeGZybV9sKF9fdG8sIF9fZnJvbSwg X19uLCBfTV9jX2xvY2FsZV9jb2xsYXRlKTsgfQorCisjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFS X1QKKyAgdGVtcGxhdGU8PgorICAgIGludAorICAgIGNvbGxhdGU8d2NoYXJfdD46Ol9NX2NvbXBh cmUoY29uc3Qgd2NoYXJfdCogX19vbmUsCisJCQkJIGNvbnN0IHdjaGFyX3QqIF9fdHdvKSBjb25z dCB0aHJvdygpCisgICAgeworICAgICAgaW50IF9fY21wID0gd2NzY29sbF9sKF9fb25lLCBfX3R3 bywgX01fY19sb2NhbGVfY29sbGF0ZSk7CisgICAgICByZXR1cm4gKF9fY21wID4+ICg4ICogc2l6 ZW9mIChpbnQpIC0gMikpIHwgKF9fY21wICE9IDApOworICAgIH0KKworICB0ZW1wbGF0ZTw+Cisg ICAgc2l6ZV90CisgICAgY29sbGF0ZTx3Y2hhcl90Pjo6X01fdHJhbnNmb3JtKHdjaGFyX3QqIF9f dG8sIGNvbnN0IHdjaGFyX3QqIF9fZnJvbSwKKwkJCQkgICBzaXplX3QgX19uKSBjb25zdCB0aHJv dygpCisgICAgeyByZXR1cm4gd2NzeGZybV9sKF9fdG8sIF9fZnJvbSwgX19uLCBfTV9jX2xvY2Fs ZV9jb2xsYXRlKTsgfQorI2VuZGlmCisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgor fSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL25l d2xpYi9jdHlwZV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvbmV3bGli L2N0eXBlX21lbWJlcnMuY2MKaW5kZXggZWU3ZTdhNzllZmUuLjBlMGVmZTQ3Y2MxIDEwMDY0NAot LS0gYS9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9uZXdsaWIvY3R5cGVfbWVtYmVycy5jYwor KysgYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9uZXdsaWIvY3R5cGVfbWVtYmVycy5jYwpA QCAtNTgsMzcgKzU4LDM3IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCiAgICAg c3dpdGNoIChfX20pCiAgICAgICB7CiAgICAgICBjYXNlIHNwYWNlOgotCV9fcmV0ID0gd2N0eXBl KCJzcGFjZSIpOworCV9fcmV0ID0gd2N0eXBlX2woInNwYWNlIiwgX01fY19sb2NhbGVfY3R5cGUp OwogCWJyZWFrOwogICAgICAgY2FzZSBwcmludDoKLQlfX3JldCA9IHdjdHlwZSgicHJpbnQiKTsK KwlfX3JldCA9IHdjdHlwZV9sKCJwcmludCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKIAlicmVhazsK ICAgICAgIGNhc2UgY250cmw6Ci0JX19yZXQgPSB3Y3R5cGUoImNudHJsIik7CisJX19yZXQgPSB3 Y3R5cGVfbCgiY250cmwiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CiAJYnJlYWs7CiAgICAgICBjYXNl IHVwcGVyOgotCV9fcmV0ID0gd2N0eXBlKCJ1cHBlciIpOworCV9fcmV0ID0gd2N0eXBlX2woInVw cGVyIiwgX01fY19sb2NhbGVfY3R5cGUpOwogCWJyZWFrOwogICAgICAgY2FzZSBsb3dlcjoKLQlf X3JldCA9IHdjdHlwZSgibG93ZXIiKTsKKwlfX3JldCA9IHdjdHlwZV9sKCJsb3dlciIsIF9NX2Nf bG9jYWxlX2N0eXBlKTsKIAlicmVhazsKICAgICAgIGNhc2UgYWxwaGE6Ci0JX19yZXQgPSB3Y3R5 cGUoImFscGhhIik7CisJX19yZXQgPSB3Y3R5cGVfbCgiYWxwaGEiLCBfTV9jX2xvY2FsZV9jdHlw ZSk7CiAJYnJlYWs7CiAgICAgICBjYXNlIGRpZ2l0OgotCV9fcmV0ID0gd2N0eXBlKCJkaWdpdCIp OworCV9fcmV0ID0gd2N0eXBlX2woImRpZ2l0IiwgX01fY19sb2NhbGVfY3R5cGUpOwogCWJyZWFr OwogICAgICAgY2FzZSBwdW5jdDoKLQlfX3JldCA9IHdjdHlwZSgicHVuY3QiKTsKKwlfX3JldCA9 IHdjdHlwZV9sKCJwdW5jdCIsIF9NX2NfbG9jYWxlX2N0eXBlKTsKIAlicmVhazsKICAgICAgIGNh c2UgeGRpZ2l0OgotCV9fcmV0ID0gd2N0eXBlKCJ4ZGlnaXQiKTsKKwlfX3JldCA9IHdjdHlwZV9s KCJ4ZGlnaXQiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CiAJYnJlYWs7CiAgICAgICBjYXNlIGFsbnVt OgotCV9fcmV0ID0gd2N0eXBlKCJhbG51bSIpOworCV9fcmV0ID0gd2N0eXBlX2woImFsbnVtIiwg X01fY19sb2NhbGVfY3R5cGUpOwogCWJyZWFrOwogICAgICAgY2FzZSBncmFwaDoKLQlfX3JldCA9 IHdjdHlwZSgiZ3JhcGgiKTsKKwlfX3JldCA9IHdjdHlwZV9sKCJncmFwaCIsIF9NX2NfbG9jYWxl X2N0eXBlKTsKIAlicmVhazsKICAgICAgIGRlZmF1bHQ6CiAJLy8gRGlmZmVyZW50IGZyb20gdGhl IGdlbmVyaWMgdmVyc2lvbiwgeGRpZ2l0IGFuZCBwcmludCBpbgpAQCAtMTAwLDI1ICsxMDAsMjUg QEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KIAkvLyBlcXVhbCB0byBfWCBvciBf QiwgdGhlIHR3byBjYXNlcyBhcmUgc3BlY2lmaWNhbGx5IGhhbmRsZWQKIAkvLyBoZXJlLgogCWlm IChfX20gJiB4ZGlnaXQpCi0JICBfX3JldCA9IHdjdHlwZSgieGRpZ2l0Iik7CisJICBfX3JldCA9 IHdjdHlwZV9sKCJ4ZGlnaXQiLCBfTV9jX2xvY2FsZV9jdHlwZSk7CiAJZWxzZSBpZiAoX19tICYg cHJpbnQpCi0JICBfX3JldCA9IHdjdHlwZSgicHJpbnQiKTsKKwkgIF9fcmV0ID0gd2N0eXBlX2wo InByaW50IiwgX01fY19sb2NhbGVfY3R5cGUpOwogCWVsc2UKIAkgIF9fcmV0ID0gX193bWFza190 eXBlKCk7CiAgICAgICB9CiAgICAgcmV0dXJuIF9fcmV0OwotICB9OworICB9CiAKICAgd2NoYXJf dAogICBjdHlwZTx3Y2hhcl90Pjo6ZG9fdG91cHBlcih3Y2hhcl90IF9fYykgY29uc3QKLSAgeyBy ZXR1cm4gdG93dXBwZXIoX19jKTsgfQorICB7IHJldHVybiB0b3d1cHBlcl9sKF9fYywgX01fY19s b2NhbGVfY3R5cGUpOyB9CiAKICAgY29uc3Qgd2NoYXJfdCoKICAgY3R5cGU8d2NoYXJfdD46OmRv X3RvdXBwZXIod2NoYXJfdCogX19sbywgY29uc3Qgd2NoYXJfdCogX19oaSkgY29uc3QKICAgewog ICAgIHdoaWxlIChfX2xvIDwgX19oaSkKICAgICAgIHsKLSAgICAgICAgKl9fbG8gPSB0b3d1cHBl cigqX19sbyk7CisJKl9fbG8gPSB0b3d1cHBlcl9sKCpfX2xvLCBfTV9jX2xvY2FsZV9jdHlwZSk7 CiAgICAgICAgICsrX19sbzsKICAgICAgIH0KICAgICByZXR1cm4gX19oaTsKQEAgLTEyNiwxNCAr MTI2LDE0IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCiAKICAgd2NoYXJfdAog ICBjdHlwZTx3Y2hhcl90Pjo6ZG9fdG9sb3dlcih3Y2hhcl90IF9fYykgY29uc3QKLSAgeyByZXR1 cm4gdG93bG93ZXIoX19jKTsgfQorICB7IHJldHVybiB0b3dsb3dlcl9sKF9fYywgX01fY19sb2Nh bGVfY3R5cGUpOyB9CiAKICAgY29uc3Qgd2NoYXJfdCoKICAgY3R5cGU8d2NoYXJfdD46OmRvX3Rv bG93ZXIod2NoYXJfdCogX19sbywgY29uc3Qgd2NoYXJfdCogX19oaSkgY29uc3QKICAgewogICAg IHdoaWxlIChfX2xvIDwgX19oaSkKICAgICAgIHsKLSAgICAgICAgKl9fbG8gPSB0b3dsb3dlcigq X19sbyk7CisJKl9fbG8gPSB0b3dsb3dlcl9sKCpfX2xvLCBfTV9jX2xvY2FsZV9jdHlwZSk7CiAg ICAgICAgICsrX19sbzsKICAgICAgIH0KICAgICByZXR1cm4gX19oaTsKQEAgLTE0NCwxMSArMTQ0 LDEwIEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCiAgIGRvX2lzKG1hc2sgX19t LCB3Y2hhcl90IF9fYykgY29uc3QKICAgewogICAgIGJvb2wgX19yZXQgPSBmYWxzZTsKLSAgICAv LyBOZXdsaWIgQyBsaWJyYXJ5IGhhcyBhIGNvbXBhY3QgZW5jb2RpbmcgdGhhdCB1c2VzIDggYml0 cyBvbmx5LgogICAgIGNvbnN0IHNpemVfdCBfX2JpdG1hc2tzaXplID0gNzsKICAgICBmb3IgKHNp emVfdCBfX2JpdGN1ciA9IDA7IF9fYml0Y3VyIDw9IF9fYml0bWFza3NpemU7ICsrX19iaXRjdXIp CiAgICAgICBpZiAoX19tICYgX01fYml0W19fYml0Y3VyXQotCSAgJiYgaXN3Y3R5cGUoX19jLCBf TV93bWFza1tfX2JpdGN1cl0pKQorCSAgJiYgaXN3Y3R5cGVfbChfX2MsIF9NX3dtYXNrW19fYml0 Y3VyXSwgX01fY19sb2NhbGVfY3R5cGUpKQogCXsKIAkgIF9fcmV0ID0gdHJ1ZTsKIAkgIGJyZWFr OwpAQCAtMTYyLDExICsxNjEsMTAgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04K ICAgewogICAgIGZvciAoOyBfX2xvIDwgX19oaTsgKytfX3ZlYywgKytfX2xvKQogICAgICAgewot CS8vIE5ld2xpYiBDIGxpYnJhcnkgaGFzIGEgY29tcGFjdCBlbmNvZGluZyB0aGF0IHVzZXMgOCBi aXRzIG9ubHkuCiAJY29uc3Qgc2l6ZV90IF9fYml0bWFza3NpemUgPSA3OwogCW1hc2sgX19tID0g MDsKIAlmb3IgKHNpemVfdCBfX2JpdGN1ciA9IDA7IF9fYml0Y3VyIDw9IF9fYml0bWFza3NpemU7 ICsrX19iaXRjdXIpCi0JICBpZiAoaXN3Y3R5cGUoKl9fbG8sIF9NX3dtYXNrW19fYml0Y3VyXSkp CisJICBpZiAoaXN3Y3R5cGVfbCgqX19sbywgX01fd21hc2tbX19iaXRjdXJdLCBfTV9jX2xvY2Fs ZV9jdHlwZSkpCiAJICAgIF9fbSB8PSBfTV9iaXRbX19iaXRjdXJdOwogCSpfX3ZlYyA9IF9fbTsK ICAgICAgIH0KQEAgLTIxNSw3ICsyMTMsOSBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVS U0lPTgogICB7CiAgICAgaWYgKF9fd2MgPj0gMCAmJiBfX3djIDwgMTI4ICYmIF9NX25hcnJvd19v aykKICAgICAgIHJldHVybiBfTV9uYXJyb3dbX193Y107CisgICAgX19jX2xvY2FsZSBfX29sZCA9 IHVzZWxvY2FsZShfTV9jX2xvY2FsZV9jdHlwZSk7CiAgICAgY29uc3QgaW50IF9fYyA9IHdjdG9i KF9fd2MpOworICAgIHVzZWxvY2FsZShfX29sZCk7CiAgICAgcmV0dXJuIChfX2MgPT0gRU9GID8g X19kZmF1bHQgOiBzdGF0aWNfY2FzdDxjaGFyPihfX2MpKTsKICAgfQogCkBAIC0yMjQsNiArMjI0 LDcgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KICAgZG9fbmFycm93KGNvbnN0 IHdjaGFyX3QqIF9fbG8sIGNvbnN0IHdjaGFyX3QqIF9faGksIGNoYXIgX19kZmF1bHQsCiAJICAg IGNoYXIqIF9fZGVzdCkgY29uc3QKICAgeworICAgIF9fY19sb2NhbGUgX19vbGQgPSB1c2Vsb2Nh bGUoX01fY19sb2NhbGVfY3R5cGUpOwogICAgIGlmIChfTV9uYXJyb3dfb2spCiAgICAgICB3aGls ZSAoX19sbyA8IF9faGkpCiAJewpAQCAtMjQ1LDEyICsyNDYsMTQgQEAgX0dMSUJDWFhfQkVHSU5f TkFNRVNQQUNFX1ZFUlNJT04KIAkgICsrX19sbzsKIAkgICsrX19kZXN0OwogCX0KKyAgICB1c2Vs b2NhbGUoX19vbGQpOwogICAgIHJldHVybiBfX2hpOwogICB9CiAKICAgdm9pZAogICBjdHlwZTx3 Y2hhcl90Pjo6X01faW5pdGlhbGl6ZV9jdHlwZSgpIHRocm93KCkKICAgeworICAgIF9fY19sb2Nh bGUgX19vbGQgPSB1c2Vsb2NhbGUoX01fY19sb2NhbGVfY3R5cGUpOwogICAgIHdpbnRfdCBfX2k7 CiAgICAgZm9yIChfX2kgPSAwOyBfX2kgPCAxMjg7ICsrX19pKQogICAgICAgewpAQCAtMjY0LDE1 ICsyNjcsMTYgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KICAgICAgIF9NX25h cnJvd19vayA9IHRydWU7CiAgICAgZWxzZQogICAgICAgX01fbmFycm93X29rID0gZmFsc2U7Ci0g ICAgZm9yIChzaXplX3QgX19pID0gMDsKLQkgX19pIDwgc2l6ZW9mKF9NX3dpZGVuKSAvIHNpemVv Zih3aW50X3QpOyArK19faSkKLSAgICAgIF9NX3dpZGVuW19faV0gPSBidG93YyhfX2kpOworICAg IGZvciAoc2l6ZV90IF9faiA9IDA7CisJIF9faiA8IHNpemVvZihfTV93aWRlbikgLyBzaXplb2Yo d2ludF90KTsgKytfX2opCisgICAgICBfTV93aWRlbltfX2pdID0gYnRvd2MoX19qKTsKIAotICAg IGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8PSA3OyArK19faSkKKyAgICBmb3IgKHNpemVfdCBf X2sgPSAwOyBfX2sgPD0gNzsgKytfX2spCiAgICAgICB7Ci0JX01fYml0W19faV0gPSBzdGF0aWNf Y2FzdDxtYXNrPigxIDw8IF9faSk7Ci0JX01fd21hc2tbX19pXSA9IF9NX2NvbnZlcnRfdG9fd21h c2soX01fYml0W19faV0pOworCV9NX2JpdFtfX2tdID0gc3RhdGljX2Nhc3Q8bWFzaz4oMSA8PCBf X2spOworCV9NX3dtYXNrW19fa10gPSBfTV9jb252ZXJ0X3RvX3dtYXNrKF9NX2JpdFtfX2tdKTsK ICAgICAgIH0KKyAgICB1c2Vsb2NhbGUoX19vbGQpOwogICB9CiAjZW5kaWYgLy8gIF9HTElCQ1hY X1VTRV9XQ0hBUl9UCiAKZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL25l d2xpYi9tZXNzYWdlc19tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvbmV3 bGliL21lc3NhZ2VzX21lbWJlcnMuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAuLjQ2MzUzM2EyNmEyCi0tLSAvZGV2L251bGwKKysrIGIvbGlic3RkYysrLXYzL2NvbmZp Zy9sb2NhbGUvbmV3bGliL21lc3NhZ2VzX21lbWJlcnMuY2MKQEAgLTAsMCArMSwxNzggQEAKKy8v IHN0ZDo6bWVzc2FnZXMgaW1wbGVtZW50YXRpb24gZGV0YWlscywgbmV3bGliIHZlcnNpb24gLSot IEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMjMgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysr IExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24p CisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQor Ly8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5k ZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFs CisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhj ZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1 bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUg dGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYg bm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLy8KKy8vIElT TyBDKysgMTQ4ODI6IDIyLjIuNy4xLjIgIG1lc3NhZ2VzIHZpcnR1YWwgZnVuY3Rpb25zCisvLwor CisvLyBXcml0dGVuIGJ5IEJlbmphbWluIEtvc25payA8YmtvekByZWRoYXQuY29tPgorLy8gTW9k aWZpZWQgYnkgVGFrYXNoaSBZYW5vIDx0YWthc2hpLnlhbm9AbmlmdHkubmUuanA+CisKKyNpbmNs dWRlIDxsb2NhbGU+CisjaW5jbHVkZSA8Yml0cy9jKytsb2NhbGVfaW50ZXJuYWwuaD4KKworI2lu Y2x1ZGUgPGNzdGRsaWI+CS8vIHN0ZDo6ZnJlZQorI2luY2x1ZGUgPHN0cmluZy5oPgkvLyA6OnN0 cmR1cAorCituYW1lc3BhY2UKK3sKKyAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworICBjb25zdCBj aGFyKgorICBnZXRfZ2xpYmNfbXNnKF9fY19sb2NhbGUgX19sb2NhbGVfbWVzc2FnZXMgX19hdHRy aWJ1dGVfXygodW51c2VkKSksCisJCWNvbnN0IGNoYXIqIF9fbmFtZV9tZXNzYWdlcyBfX2F0dHJp YnV0ZV9fKCh1bnVzZWQpKSwKKwkJY29uc3QgY2hhciogX19kb21haW5uYW1lLAorCQljb25zdCBj aGFyKiBfX2RmYXVsdCkKKyAgeworICAgIGlmIChjaGFyKiBfX3NhdiA9IHN0cmR1cChzZXRsb2Nh bGUoTENfQUxMLCAwKSkpCisgICAgICB7CisJc2V0bG9jYWxlKExDX0FMTCwgX19uYW1lX21lc3Nh Z2VzKTsKKwljb25zdCBjaGFyKiBfX21zZyA9IGRnZXR0ZXh0KF9fZG9tYWlubmFtZSwgX19kZmF1 bHQpOworCXNldGxvY2FsZShMQ19BTEwsIF9fc2F2KTsKKwlmcmVlKF9fc2F2KTsKKwlyZXR1cm4g X19tc2c7CisgICAgICB9CisgICAgcmV0dXJuIF9fZGZhdWx0OworICB9Cit9CisKK25hbWVzcGFj ZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFN RVNQQUNFX1ZFUlNJT04KKworICAvLyBTcGVjaWFsaXphdGlvbnMuCisgIHRlbXBsYXRlPD4KKyAg ICB0eXBlbmFtZSBtZXNzYWdlczxjaGFyPjo6Y2F0YWxvZworICAgIG1lc3NhZ2VzPGNoYXI+Ojpk b19vcGVuKGNvbnN0IGJhc2ljX3N0cmluZzxjaGFyPiYgX19zLAorCQkJICAgIGNvbnN0IGxvY2Fs ZSYgX19sKSBjb25zdAorICAgIHsKKyAgICAgIHR5cGVkZWYgY29kZWN2dDxjaGFyLCBjaGFyLCBt YnN0YXRlX3Q+IF9fY29kZWN2dF90OworICAgICAgY29uc3QgX19jb2RlY3Z0X3QmIF9fY29kZWN2 dCA9IHVzZV9mYWNldDxfX2NvZGVjdnRfdD4oX19sKTsKKworICAgICAgYmluZF90ZXh0ZG9tYWlu X2NvZGVzZXQoX19zLmNfc3RyKCksCisJICBubF9sYW5naW5mb19sKENPREVTRVQsIF9fY29kZWN2 dC5fTV9jX2xvY2FsZV9jb2RlY3Z0KSk7CisgICAgICByZXR1cm4gZ2V0X2NhdGFsb2dzKCkuX01f YWRkKF9fcy5jX3N0cigpLCBfX2wpOworICAgIH0KKworICB0ZW1wbGF0ZTw+CisgICAgdm9pZAor ICAgIG1lc3NhZ2VzPGNoYXI+Ojpkb19jbG9zZShjYXRhbG9nIF9fYykgY29uc3QKKyAgICB7IGdl dF9jYXRhbG9ncygpLl9NX2VyYXNlKF9fYyk7IH0KKworICB0ZW1wbGF0ZTw+CisgICAgc3RyaW5n CisgICAgbWVzc2FnZXM8Y2hhcj46OmRvX2dldChjYXRhbG9nIF9fYywgaW50LCBpbnQsCisJCQkg ICBjb25zdCBzdHJpbmcmIF9fZGZhdWx0KSBjb25zdAorICAgIHsKKyAgICAgIGlmIChfX2MgPCAw IHx8IF9fZGZhdWx0LmVtcHR5KCkpCisJcmV0dXJuIF9fZGZhdWx0OworCisgICAgICBjb25zdCBD YXRhbG9nX2luZm8qIF9fY2F0X2luZm8gPSBnZXRfY2F0YWxvZ3MoKS5fTV9nZXQoX19jKTsKKwor ICAgICAgaWYgKCFfX2NhdF9pbmZvKQorCXJldHVybiBfX2RmYXVsdDsKKworICAgICAgcmV0dXJu IGdldF9nbGliY19tc2coX01fY19sb2NhbGVfbWVzc2FnZXMsIF9NX25hbWVfbWVzc2FnZXMsCisJ CQkgICBfX2NhdF9pbmZvLT5fTV9kb21haW4sCisJCQkgICBfX2RmYXVsdC5jX3N0cigpKTsKKyAg ICB9CisKKyNpZmRlZiBfR0xJQkNYWF9VU0VfV0NIQVJfVAorICB0ZW1wbGF0ZTw+CisgICAgdHlw ZW5hbWUgbWVzc2FnZXM8d2NoYXJfdD46OmNhdGFsb2cKKyAgICBtZXNzYWdlczx3Y2hhcl90Pjo6 ZG9fb3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mIF9fcywKKwkJCSAgICAgICBjb25zdCBs b2NhbGUmIF9fbCkgY29uc3QKKyAgICB7CisgICAgICB0eXBlZGVmIGNvZGVjdnQ8d2NoYXJfdCwg Y2hhciwgbWJzdGF0ZV90PiBfX2NvZGVjdnRfdDsKKyAgICAgIGNvbnN0IF9fY29kZWN2dF90JiBf X2NvZGVjdnQgPSB1c2VfZmFjZXQ8X19jb2RlY3Z0X3Q+KF9fbCk7CisKKyAgICAgIGJpbmRfdGV4 dGRvbWFpbl9jb2Rlc2V0KF9fcy5jX3N0cigpLAorCSAgbmxfbGFuZ2luZm9fbChDT0RFU0VULCBf X2NvZGVjdnQuX01fY19sb2NhbGVfY29kZWN2dCkpOworCisgICAgICByZXR1cm4gZ2V0X2NhdGFs b2dzKCkuX01fYWRkKF9fcy5jX3N0cigpLCBfX2wpOworICAgIH0KKworICB0ZW1wbGF0ZTw+Cisg ICAgdm9pZAorICAgIG1lc3NhZ2VzPHdjaGFyX3Q+Ojpkb19jbG9zZShjYXRhbG9nIF9fYykgY29u c3QKKyAgICB7IGdldF9jYXRhbG9ncygpLl9NX2VyYXNlKF9fYyk7IH0KKworICB0ZW1wbGF0ZTw+ CisgICAgd3N0cmluZworICAgIG1lc3NhZ2VzPHdjaGFyX3Q+Ojpkb19nZXQoY2F0YWxvZyBfX2Ms IGludCwgaW50LAorCQkJICAgICAgY29uc3Qgd3N0cmluZyYgX193ZGZhdWx0KSBjb25zdAorICAg IHsKKyAgICAgIGlmIChfX2MgPCAwIHx8IF9fd2RmYXVsdC5lbXB0eSgpKQorCXJldHVybiBfX3dk ZmF1bHQ7CisKKyAgICAgIGNvbnN0IENhdGFsb2dfaW5mbyogX19jYXRfaW5mbyA9IGdldF9jYXRh bG9ncygpLl9NX2dldChfX2MpOworCisgICAgICBpZiAoIV9fY2F0X2luZm8pCisJcmV0dXJuIF9f d2RmYXVsdDsKKworICAgICAgdHlwZWRlZiBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVf dD4gX19jb2RlY3Z0X3Q7CisgICAgICBjb25zdCBfX2NvZGVjdnRfdCYgX19jb252ID0KKwl1c2Vf ZmFjZXQ8X19jb2RlY3Z0X3Q+KF9fY2F0X2luZm8tPl9NX2xvY2FsZSk7CisKKyAgICAgIGNvbnN0 IGNoYXIqIF9fdHJhbnNsYXRpb247CisgICAgICBtYnN0YXRlX3QgX19zdGF0ZTsKKyAgICAgIF9f YnVpbHRpbl9tZW1zZXQoJl9fc3RhdGUsIDAsIHNpemVvZihtYnN0YXRlX3QpKTsKKyAgICAgIHsK Kwljb25zdCB3Y2hhcl90KiBfX3dkZmF1bHRfbmV4dDsKKwlzaXplX3QgX19tYl9zaXplID0gX193 ZGZhdWx0LnNpemUoKSAqIF9fY29udi5tYXhfbGVuZ3RoKCk7CisJY2hhciogX19kZmF1bHQgPQor CSAgc3RhdGljX2Nhc3Q8Y2hhcio+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKGNoYXIpICogKF9f bWJfc2l6ZSArIDEpKSk7CisJY2hhciogX19kZmF1bHRfbmV4dDsKKwlfX2NvbnYub3V0KF9fc3Rh dGUsCisJCSAgIF9fd2RmYXVsdC5kYXRhKCksIF9fd2RmYXVsdC5kYXRhKCkgKyBfX3dkZmF1bHQu c2l6ZSgpLAorCQkgICBfX3dkZmF1bHRfbmV4dCwKKwkJICAgX19kZmF1bHQsIF9fZGZhdWx0ICsg X19tYl9zaXplLCBfX2RmYXVsdF9uZXh0KTsKKworCS8vIE1ha2Ugc3VyZSBzdHJpbmcgcGFzc2Vk IHRvIGRnZXR0ZXh0IGlzIFwwIHRlcm1pbmF0ZWQuCisJKl9fZGZhdWx0X25leHQgPSAnXDAnOwor CV9fdHJhbnNsYXRpb24gPSBnZXRfZ2xpYmNfbXNnKF9NX2NfbG9jYWxlX21lc3NhZ2VzLCBfTV9u YW1lX21lc3NhZ2VzLAorCQkJCSAgICAgIF9fY2F0X2luZm8tPl9NX2RvbWFpbiwgX19kZmF1bHQp OworCisJLy8gSWYgd2UgZW5kIHVwIGdldHRpbmcgZGVmYXVsdCB2YWx1ZSBiYWNrIHdlIGNhbiBz aW1wbHkgcmV0dXJuIG9yaWdpbmFsCisJLy8gZGVmYXVsdCB2YWx1ZS4KKwlpZiAoX190cmFuc2xh dGlvbiA9PSBfX2RmYXVsdCkKKwkgIHJldHVybiBfX3dkZmF1bHQ7CisgICAgICB9CisKKyAgICAg IF9fYnVpbHRpbl9tZW1zZXQoJl9fc3RhdGUsIDAsIHNpemVvZihtYnN0YXRlX3QpKTsKKyAgICAg IHNpemVfdCBfX3NpemUgPSBfX2J1aWx0aW5fc3RybGVuKF9fdHJhbnNsYXRpb24pOworICAgICAg Y29uc3QgY2hhciogX190cmFuc2xhdGlvbl9uZXh0OworICAgICAgd2NoYXJfdCogX193dHJhbnNs YXRpb24gPQorCXN0YXRpY19jYXN0PHdjaGFyX3QqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZih3 Y2hhcl90KSAqIChfX3NpemUgKyAxKSkpOworICAgICAgd2NoYXJfdCogX193dHJhbnNsYXRpb25f bmV4dDsKKyAgICAgIF9fY29udi5pbihfX3N0YXRlLCBfX3RyYW5zbGF0aW9uLCBfX3RyYW5zbGF0 aW9uICsgX19zaXplLAorCQlfX3RyYW5zbGF0aW9uX25leHQsCisJCV9fd3RyYW5zbGF0aW9uLCBf X3d0cmFuc2xhdGlvbiArIF9fc2l6ZSwKKwkJX193dHJhbnNsYXRpb25fbmV4dCk7CisgICAgICBy ZXR1cm4gd3N0cmluZyhfX3d0cmFuc2xhdGlvbiwgX193dHJhbnNsYXRpb25fbmV4dCk7CisgICAg fQorI2VuZGlmCisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1lc3Bh Y2UKZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL25ld2xpYi9tZXNzYWdl c19tZW1iZXJzLmggYi9saWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9uZXdsaWIvbWVzc2FnZXNf bWVtYmVycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42NGI2NmQ5 YTdmYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL25ld2xp Yi9tZXNzYWdlc19tZW1iZXJzLmgKQEAgLTAsMCArMSwxNDggQEAKKy8vIHN0ZDo6bWVzc2FnZXMg aW1wbGVtZW50YXRpb24gZGV0YWlscywgbmV3bGliIHZlcnNpb24gLSotIEMrKyAtKi0KKworLy8g Q29weXJpZ2h0IChDKSAyMDAxLTIwMjMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisv LworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlz IGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIg dmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9m IEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9u cyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9u CisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgor CisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBF eGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJ TkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxo dHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGJpdHMvbWVzc2FnZXNf bWVtYmVycy5oCisgKiAgVGhpcyBpcyBhbiBpbnRlcm5hbCBoZWFkZXIgZmlsZSwgaW5jbHVkZWQg Ynkgb3RoZXIgbGlicmFyeSBoZWFkZXJzLgorICogIERvIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBk aXJlY3RseS4gQGhlYWRlcm5hbWV7bG9jYWxlfQorICovCisKKy8vCisvLyBJU08gQysrIDE0ODgy OiAyMi4yLjcuMS4yICBtZXNzYWdlcyBmdW5jdGlvbnMKKy8vCisKKy8vIFdyaXR0ZW4gYnkgQmVu amFtaW4gS29zbmlrIDxia296QHJlZGhhdC5jb20+CisvLyBNb2RpZmllZCBieSBUYWthc2hpIFlh bm8gPHRha2FzaGkueWFub0BuaWZ0eS5uZS5qcD4KKworI2luY2x1ZGUgPGxpYmludGwuaD4KKyNp bmNsdWRlIDxjYXNzZXJ0PgorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVm YXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgLy8gTm9uLXZp cnR1YWwgbWVtYmVyIGZ1bmN0aW9ucy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAg IG1lc3NhZ2VzPF9DaGFyVD46Om1lc3NhZ2VzKHNpemVfdCBfX3JlZnMpCisgICAgOiBmYWNldChf X3JlZnMpLCBfTV9jX2xvY2FsZV9tZXNzYWdlcyhfU19nZXRfY19sb2NhbGUoKSksCisgICAgICBf TV9uYW1lX21lc3NhZ2VzKF9TX2dldF9jX25hbWUoKSkKKyAgICB7IH0KKworICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQ+CisgICAgbWVzc2FnZXM8X0NoYXJUPjo6bWVzc2FnZXMoX19jX2xvY2Fs ZSBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywKKwkJCSAgICAgICBzaXplX3QgX19yZWZzKQorICAg IDogZmFjZXQoX19yZWZzKSwgX01fY19sb2NhbGVfbWVzc2FnZXMoMCksIF9NX25hbWVfbWVzc2Fn ZXMoMCkKKyAgICB7CisgICAgICBpZiAoX19idWlsdGluX3N0cmNtcChfX3MsIF9TX2dldF9jX25h bWUoKSkgIT0gMCkKKwl7CisJICBjb25zdCBzaXplX3QgX19sZW4gPSBfX2J1aWx0aW5fc3RybGVu KF9fcykgKyAxOworCSAgY2hhciogX190bXAgPSBuZXcgY2hhcltfX2xlbl07CisJICBfX2J1aWx0 aW5fbWVtY3B5KF9fdG1wLCBfX3MsIF9fbGVuKTsKKwkgIF9NX25hbWVfbWVzc2FnZXMgPSBfX3Rt cDsKKwl9CisgICAgICBlbHNlCisJX01fbmFtZV9tZXNzYWdlcyA9IF9TX2dldF9jX25hbWUoKTsK KworICAgICAgLy8gTGFzdCB0byBhdm9pZCBsZWFraW5nIG1lbW9yeSBpZiBuZXcgdGhyb3dzLgor ICAgICAgX01fY19sb2NhbGVfbWVzc2FnZXMgPSBfU19jbG9uZV9jX2xvY2FsZShfX2Nsb2MpOwor ICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgdHlwZW5hbWUgbWVzc2Fn ZXM8X0NoYXJUPjo6Y2F0YWxvZworICAgIG1lc3NhZ2VzPF9DaGFyVD46Om9wZW4oY29uc3QgYmFz aWNfc3RyaW5nPGNoYXI+JiBfX3MsIGNvbnN0IGxvY2FsZSYgX19sb2MsCisJCQkgICBjb25zdCBj aGFyKiBfX2RpcikgY29uc3QKKyAgICB7CisgICAgICBiaW5kdGV4dGRvbWFpbihfX3MuY19zdHIo KSwgX19kaXIpOworICAgICAgcmV0dXJuIHRoaXMtPmRvX29wZW4oX19zLCBfX2xvYyk7CisgICAg fQorCisgIC8vIFZpcnR1YWwgbWVtYmVyIGZ1bmN0aW9ucy4KKyAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJUPgorICAgIG1lc3NhZ2VzPF9DaGFyVD46On5tZXNzYWdlcygpCisgICAgeworICAgICAg aWYgKF9NX25hbWVfbWVzc2FnZXMgIT0gX1NfZ2V0X2NfbmFtZSgpKQorCWRlbGV0ZSBbXSBfTV9u YW1lX21lc3NhZ2VzOworICAgICAgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV9tZXNz YWdlcyk7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICB0eXBlbmFt ZSBtZXNzYWdlczxfQ2hhclQ+OjpjYXRhbG9nCisgICAgbWVzc2FnZXM8X0NoYXJUPjo6ZG9fb3Bl bihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mIF9fcywKKwkJCSAgICAgIGNvbnN0IGxvY2FsZSYp IGNvbnN0CisgICAgeworICAgICAgLy8gTm8gZXJyb3IgY2hlY2tpbmcgaXMgZG9uZSwgYXNzdW1l IHRoZSBjYXRhbG9nIGV4aXN0cyBhbmQgY2FuCisgICAgICAvLyBiZSB1c2VkLgorICAgICAgdGV4 dGRvbWFpbihfX3MuY19zdHIoKSk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJUPgorICAgIHZvaWQKKyAgICBtZXNzYWdlczxfQ2hhclQ+Ojpkb19j bG9zZShjYXRhbG9nKSBjb25zdAorICAgIHsgfQorCisgIC8vIG1lc3NhZ2VzX2J5bmFtZQorICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgbWVzc2FnZXNfYnluYW1lPF9DaGFyVD46Om1l c3NhZ2VzX2J5bmFtZShjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMpCisgICAgOiBtZXNz YWdlczxfQ2hhclQ+KF9fcmVmcykKKyAgICB7CisgICAgICBhc3NlcnQodGhpcy0+X01fbmFtZV9t ZXNzYWdlcyA9PSBsb2NhbGU6OmZhY2V0OjpfU19nZXRfY19uYW1lKCkpOworICAgICAgaWYgKF9f YnVpbHRpbl9zdHJjbXAoX19zLCB0aGlzLT5fTV9uYW1lX21lc3NhZ2VzKSAhPSAwKQorCXsKKwkg IGNvbnN0IHNpemVfdCBfX2xlbiA9IF9fYnVpbHRpbl9zdHJsZW4oX19zKSArIDE7CisJICBjaGFy KiBfX3RtcCA9IG5ldyBjaGFyW19fbGVuXTsKKwkgIF9fYnVpbHRpbl9tZW1jcHkoX190bXAsIF9f cywgX19sZW4pOworCSAgdGhpcy0+X01fbmFtZV9tZXNzYWdlcyA9IF9fdG1wOworCX0KKworICAg ICAgaWYgKF9fYnVpbHRpbl9zdHJjbXAoX19zLCAiQyIpICE9IDAKKwkgICYmIF9fYnVpbHRpbl9z dHJjbXAoX19zLCAiUE9TSVgiKSAhPSAwKQorCXsKKwkgIHRoaXMtPl9TX2Rlc3Ryb3lfY19sb2Nh bGUodGhpcy0+X01fY19sb2NhbGVfbWVzc2FnZXMpOworCSAgdGhpcy0+X1NfY3JlYXRlX2NfbG9j YWxlKHRoaXMtPl9NX2NfbG9jYWxlX21lc3NhZ2VzLCBfX3MpOworCX0KKyAgICB9CisKKyAgIC8v U3BlY2lhbGl6YXRpb25zLgorICB0ZW1wbGF0ZTw+CisgICAgdHlwZW5hbWUgbWVzc2FnZXM8Y2hh cj46OmNhdGFsb2cKKyAgICBtZXNzYWdlczxjaGFyPjo6ZG9fb3Blbihjb25zdCBiYXNpY19zdHJp bmc8Y2hhcj4mLAorCQkJICAgIGNvbnN0IGxvY2FsZSYpIGNvbnN0OworCisgIHRlbXBsYXRlPD4K KyAgICB2b2lkCisgICAgbWVzc2FnZXM8Y2hhcj46OmRvX2Nsb3NlKGNhdGFsb2cpIGNvbnN0Owor CisjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKyAgdGVtcGxhdGU8PgorICAgIHR5cGVuYW1l IG1lc3NhZ2VzPHdjaGFyX3Q+OjpjYXRhbG9nCisgICAgbWVzc2FnZXM8d2NoYXJfdD46OmRvX29w ZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+JiwKKwkJCSAgICAgICBjb25zdCBsb2NhbGUmKSBj b25zdDsKKworICB0ZW1wbGF0ZTw+CisgICAgdm9pZAorICAgIG1lc3NhZ2VzPHdjaGFyX3Q+Ojpk b19jbG9zZShjYXRhbG9nKSBjb25zdDsKKyNlbmRpZgorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNF X1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmln L2xvY2FsZS9uZXdsaWIvbW9uZXRhcnlfbWVtYmVycy5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcv bG9jYWxlL25ld2xpYi9tb25ldGFyeV9tZW1iZXJzLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwLi45YWNkMWEzOWYyNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnN0ZGMr Ky12My9jb25maWcvbG9jYWxlL25ld2xpYi9tb25ldGFyeV9tZW1iZXJzLmNjCkBAIC0wLDAgKzEs OTQyIEBACisvLyBzdGQ6Om1vbmV5cHVuY3QgaW1wbGVtZW50YXRpb24gZGV0YWlscywgbmV3bGli IHZlcnNpb24gLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMjMgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl IEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0 ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo ZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQg eW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQg V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv ZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls cy4KKworLy8gVW5kZXIgU2VjdGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRl ZCBhZGRpdGlvbmFsCisvLyBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1l IExpYnJhcnkgRXhjZXB0aW9uLCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg YSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBv ZiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dy YW07CisvLyBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVj dGl2ZWx5LiAgSWYgbm90LCBzZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4K KworLy8KKy8vIElTTyBDKysgMTQ4ODI6IDIyLjIuNi4zLjIgIG1vbmV5cHVuY3QgdmlydHVhbCBm dW5jdGlvbnMKKy8vCisKKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJlZGhh dC5jb20+CisvLyBNb2RpZmllZCBieSBUYWthc2hpIFlhbm8gPHRha2FzaGkueWFub0BuaWZ0eS5u ZS5qcD4KKworI2luY2x1ZGUgPGxvY2FsZT4KKyNpbmNsdWRlIDxiaXRzL2MrK2xvY2FsZV9pbnRl cm5hbC5oPgorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sK K19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKy8vIFRoaXMgZmlsZSBtaWdodCBi ZSBjb21waWxlZCB0d2ljZSwgYnV0IHdlIG9ubHkgd2FudCB0byBkZWZpbmUgdGhlIG1lbWJlcnMK Ky8vIG9mIG1vbmV5X2Jhc2Ugb25jZS4KKyNpZiAhIF9HTElCQ1hYX1VTRV9DWFgxMV9BQkkKKwor ICAvLyBDb25zdHJ1Y3QgYW5kIHJldHVybiB2YWxpZCBwYXR0ZXJuIGNvbnNpc3Rpbmcgb2Ygc29t ZSBjb21iaW5hdGlvbiBvZjoKKyAgLy8gc3BhY2Ugbm9uZSBzeW1ib2wgc2lnbiB2YWx1ZQorICBt b25leV9iYXNlOjpwYXR0ZXJuCisgIG1vbmV5X2Jhc2U6Ol9TX2NvbnN0cnVjdF9wYXR0ZXJuKGNo YXIgX19wcmVjZWRlcywgY2hhciBfX3NwYWNlLAorCQkJCSAgIGNoYXIgX19wb3NuKSB0aHJvdygp CisgIHsKKyAgICBwYXR0ZXJuIF9fcmV0OworCisgICAgLy8gVGhpcyBpbnNhbmVseSBjb21wbGlj YXRlZCByb3V0aW5lIGF0dGVtcHRzIHRvIGNvbnN0cnVjdCBhIHZhbGlkCisgICAgLy8gcGF0dGVy biBmb3IgdXNlIHdpdGggbW9ueWVwdW5jdC4gQSBjb3VwbGUgb2YgaW52YXJpYW50czoKKworICAg IC8vIGlmIChfX3ByZWNlZGVzKSBzeW1ib2wgLT4gdmFsdWUKKyAgICAvLyBlbHNlIHZhbHVlIC0+ IHN5bWJvbAorCisgICAgLy8gaWYgKF9fc3BhY2UpIHNwYWNlCisgICAgLy8gZWxzZSBub25lCisK KyAgICAvLyBub25lID09IG5ldmVyIGZpcnN0CisgICAgLy8gc3BhY2UgbmV2ZXIgZmlyc3Qgb3Ig bGFzdAorCisgICAgLy8gQW55IGVsZWdhbnQgaW1wbGVtZW50YXRpb25zIG9mIHRoaXMgYXJlIHdl bGNvbWUuCisgICAgc3dpdGNoIChfX3Bvc24pCisgICAgICB7CisgICAgICBjYXNlIDA6CisgICAg ICBjYXNlIDE6CisJLy8gMSBUaGUgc2lnbiBwcmVjZWRlcyB0aGUgdmFsdWUgYW5kIHN5bWJvbC4K KwlfX3JldC5maWVsZFswXSA9IHNpZ247CisJaWYgKF9fc3BhY2UpCisJICB7CisJICAgIC8vIFBh dHRlcm4gc3RhcnRzIHdpdGggc2lnbi4KKwkgICAgaWYgKF9fcHJlY2VkZXMpCisJICAgICAgewor CQlfX3JldC5maWVsZFsxXSA9IHN5bWJvbDsKKwkJX19yZXQuZmllbGRbM10gPSB2YWx1ZTsKKwkg ICAgICB9CisJICAgIGVsc2UKKwkgICAgICB7CisJCV9fcmV0LmZpZWxkWzFdID0gdmFsdWU7CisJ CV9fcmV0LmZpZWxkWzNdID0gc3ltYm9sOworCSAgICAgIH0KKwkgICAgX19yZXQuZmllbGRbMl0g PSBzcGFjZTsKKwkgIH0KKwllbHNlCisJICB7CisJICAgIC8vIFBhdHRlcm4gc3RhcnRzIHdpdGgg c2lnbiBhbmQgZW5kcyB3aXRoIG5vbmUuCisJICAgIGlmIChfX3ByZWNlZGVzKQorCSAgICAgIHsK KwkJX19yZXQuZmllbGRbMV0gPSBzeW1ib2w7CisJCV9fcmV0LmZpZWxkWzJdID0gdmFsdWU7CisJ ICAgICAgfQorCSAgICBlbHNlCisJICAgICAgeworCQlfX3JldC5maWVsZFsxXSA9IHZhbHVlOwor CQlfX3JldC5maWVsZFsyXSA9IHN5bWJvbDsKKwkgICAgICB9CisJICAgIF9fcmV0LmZpZWxkWzNd ID0gbm9uZTsKKwkgIH0KKwlicmVhazsKKyAgICAgIGNhc2UgMjoKKwkvLyAyIFRoZSBzaWduIGZv bGxvd3MgdGhlIHZhbHVlIGFuZCBzeW1ib2wuCisJaWYgKF9fc3BhY2UpCisJICB7CisJICAgIC8v IFBhdHRlcm4gZWl0aGVyIGVuZHMgd2l0aCBzaWduLgorCSAgICBpZiAoX19wcmVjZWRlcykKKwkg ICAgICB7CisJCV9fcmV0LmZpZWxkWzBdID0gc3ltYm9sOworCQlfX3JldC5maWVsZFsyXSA9IHZh bHVlOworCSAgICAgIH0KKwkgICAgZWxzZQorCSAgICAgIHsKKwkJX19yZXQuZmllbGRbMF0gPSB2 YWx1ZTsKKwkJX19yZXQuZmllbGRbMl0gPSBzeW1ib2w7CisJICAgICAgfQorCSAgICBfX3JldC5m aWVsZFsxXSA9IHNwYWNlOworCSAgICBfX3JldC5maWVsZFszXSA9IHNpZ247CisJICB9CisJZWxz ZQorCSAgeworCSAgICAvLyBQYXR0ZXJuIGVuZHMgd2l0aCBzaWduIHRoZW4gbm9uZS4KKwkgICAg aWYgKF9fcHJlY2VkZXMpCisJICAgICAgeworCQlfX3JldC5maWVsZFswXSA9IHN5bWJvbDsKKwkJ X19yZXQuZmllbGRbMV0gPSB2YWx1ZTsKKwkgICAgICB9CisJICAgIGVsc2UKKwkgICAgICB7CisJ CV9fcmV0LmZpZWxkWzBdID0gdmFsdWU7CisJCV9fcmV0LmZpZWxkWzFdID0gc3ltYm9sOworCSAg ICAgIH0KKwkgICAgX19yZXQuZmllbGRbMl0gPSBzaWduOworCSAgICBfX3JldC5maWVsZFszXSA9 IG5vbmU7CisJICB9CisJYnJlYWs7CisgICAgICBjYXNlIDM6CisJLy8gMyBUaGUgc2lnbiBpbW1l ZGlhdGVseSBwcmVjZWRlcyB0aGUgc3ltYm9sLgorCWlmIChfX3ByZWNlZGVzKQorCSAgeworCSAg ICBfX3JldC5maWVsZFswXSA9IHNpZ247CisJICAgIF9fcmV0LmZpZWxkWzFdID0gc3ltYm9sOwor CSAgICBpZiAoX19zcGFjZSkKKwkgICAgICB7CisJCV9fcmV0LmZpZWxkWzJdID0gc3BhY2U7CisJ CV9fcmV0LmZpZWxkWzNdID0gdmFsdWU7CisJICAgICAgfQorCSAgICBlbHNlCisJICAgICAgewor CQlfX3JldC5maWVsZFsyXSA9IHZhbHVlOworCQlfX3JldC5maWVsZFszXSA9IG5vbmU7CisJICAg ICAgfQorCSAgfQorCWVsc2UKKwkgIHsKKwkgICAgX19yZXQuZmllbGRbMF0gPSB2YWx1ZTsKKwkg ICAgaWYgKF9fc3BhY2UpCisJICAgICAgeworCQlfX3JldC5maWVsZFsxXSA9IHNwYWNlOworCQlf X3JldC5maWVsZFsyXSA9IHNpZ247CisJCV9fcmV0LmZpZWxkWzNdID0gc3ltYm9sOworCSAgICAg IH0KKwkgICAgZWxzZQorCSAgICAgIHsKKwkJX19yZXQuZmllbGRbMV0gPSBzaWduOworCQlfX3Jl dC5maWVsZFsyXSA9IHN5bWJvbDsKKwkJX19yZXQuZmllbGRbM10gPSBub25lOworCSAgICAgIH0K KwkgIH0KKwlicmVhazsKKyAgICAgIGNhc2UgNDoKKwkvLyA0IFRoZSBzaWduIGltbWVkaWF0ZWx5 IGZvbGxvd3MgdGhlIHN5bWJvbC4KKwlpZiAoX19wcmVjZWRlcykKKwkgIHsKKwkgICAgX19yZXQu ZmllbGRbMF0gPSBzeW1ib2w7CisJICAgIF9fcmV0LmZpZWxkWzFdID0gc2lnbjsKKwkgICAgaWYg KF9fc3BhY2UpCisJICAgICAgeworCQlfX3JldC5maWVsZFsyXSA9IHNwYWNlOworCQlfX3JldC5m aWVsZFszXSA9IHZhbHVlOworCSAgICAgIH0KKwkgICAgZWxzZQorCSAgICAgIHsKKwkJX19yZXQu ZmllbGRbMl0gPSB2YWx1ZTsKKwkJX19yZXQuZmllbGRbM10gPSBub25lOworCSAgICAgIH0KKwkg IH0KKwllbHNlCisJICB7CisJICAgIF9fcmV0LmZpZWxkWzBdID0gdmFsdWU7CisJICAgIGlmIChf X3NwYWNlKQorCSAgICAgIHsKKwkJX19yZXQuZmllbGRbMV0gPSBzcGFjZTsKKwkJX19yZXQuZmll bGRbMl0gPSBzeW1ib2w7CisJCV9fcmV0LmZpZWxkWzNdID0gc2lnbjsKKwkgICAgICB9CisJICAg IGVsc2UKKwkgICAgICB7CisJCV9fcmV0LmZpZWxkWzFdID0gc3ltYm9sOworCQlfX3JldC5maWVs ZFsyXSA9IHNpZ247CisJCV9fcmV0LmZpZWxkWzNdID0gbm9uZTsKKwkgICAgICB9CisJICB9CisJ YnJlYWs7CisgICAgICBkZWZhdWx0OgorCV9fcmV0ID0gcGF0dGVybigpOworICAgICAgfQorICAg IHJldHVybiBfX3JldDsKKyAgfQorI2VuZGlmCisKKyAgZXh0ZXJuIGNoYXIgX19uYXJyb3dfbXVs dGlieXRlX2NoYXJzKGNvbnN0IGNoYXIqIHMsIGxvY2FsZV90IGNsb2MpOworCisgIHRlbXBsYXRl PD4KKyAgICB2b2lkCisgICAgbW9uZXlwdW5jdDxjaGFyLCB0cnVlPjo6X01faW5pdGlhbGl6ZV9t b25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLAorCQkJCQkJICAgICBjb25zdCBjaGFyKikKKyAg ICB7CisgICAgICBpZiAoIV9NX2RhdGEpCisJX01fZGF0YSA9IG5ldyBfX21vbmV5cHVuY3RfY2Fj aGU8Y2hhciwgdHJ1ZT47CisKKyAgICAgIGlmICghX19jbG9jKQorCXsKKwkgIC8vICJDIiBsb2Nh bGUKKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSAnLic7CisJICBfTV9kYXRhLT5fTV90 aG91c2FuZHNfc2VwID0gJywnOworCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKwkgIF9N X2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSAwOworCSAgX01fZGF0YS0+X01fdXNlX2dyb3VwaW5n ID0gZmFsc2U7CisJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9ICIiOworCSAgX01fZGF0YS0+ X01fY3Vycl9zeW1ib2xfc2l6ZSA9IDA7CisJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0g IiI7CisJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSAwOworCSAgX01fZGF0YS0+ X01fbmVnYXRpdmVfc2lnbiA9ICIiOworCSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXpl ID0gMDsKKwkgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gMDsKKwkgIF9NX2RhdGEtPl9NX3Bv c19mb3JtYXQgPSBtb25leV9iYXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisJICBfTV9kYXRhLT5f TV9uZWdfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworCisJICBmb3Ig KHNpemVfdCBfX2kgPSAwOyBfX2kgPCBtb25leV9iYXNlOjpfU19lbmQ7ICsrX19pKQorCSAgICBf TV9kYXRhLT5fTV9hdG9tc1tfX2ldID0gbW9uZXlfYmFzZTo6X1NfYXRvbXNbX19pXTsKKwl9Cisg ICAgICBlbHNlCisJeworCSAgLy8gTmFtZWQgbG9jYWxlLgorCSAgX01fZGF0YS0+X01fZGVjaW1h bF9wb2ludCA9CisJICAgICoobmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfTU9OX0RFQ0lNQUxf UE9JTlQsIF9fY2xvYykpOworCSAgY29uc3QgY2hhciogdGhvdXNhbmRzX3NlcCA9CisJICAgIG5s X2xhbmdpbmZvX2woX05MX01PTkVUQVJZX01PTl9USE9VU0FORFNfU0VQLCBfX2Nsb2MpOworCSAg aWYgKHRob3VzYW5kc19zZXBbMF0gIT0gJ1wwJyAmJiB0aG91c2FuZHNfc2VwWzFdICE9ICdcMCcp CisJICAgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBfX25hcnJvd19tdWx0aWJ5dGVfY2hh cnModGhvdXNhbmRzX3NlcCwKKwkJCQkJCQkJIF9fY2xvYyk7CisJICBlbHNlCisJICAgIF9NX2Rh dGEtPl9NX3Rob3VzYW5kc19zZXAgPSAqdGhvdXNhbmRzX3NlcDsKKworCSAgLy8gQ2hlY2sgZm9y IE5VTEwsIHdoaWNoIGltcGxpZXMgbm8gZnJhY3Rpb25hbCBkaWdpdHMuCisJICBpZiAoX01fZGF0 YS0+X01fZGVjaW1hbF9wb2ludCA9PSAnXDAnKQorCSAgICB7CisJICAgICAgLy8gTGlrZSBpbiAi QyIgbG9jYWxlLgorCSAgICAgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gMDsKKwkgICAgICBf TV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gJy4nOworCSAgICB9CisJICBlbHNlCisJICAgIF9N X2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0KKwkgICAgICAqKG5sX2xhbmdpbmZvX2woX05MX01PTkVU QVJZX0lOVF9GUkFDX0RJR0lUUywgX19jbG9jKSk7CisKKwkgIGNvbnN0IGNoYXIqIF9fY2dyb3Vw ID0KKwkgICAgbmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfTU9OX0dST1VQSU5HLCBfX2Nsb2Mp OworCSAgY29uc3QgY2hhciogX19jcG9zc2lnbiA9CisJICAgIG5sX2xhbmdpbmZvX2woX05MX01P TkVUQVJZX1BPU0lUSVZFX1NJR04sIF9fY2xvYyk7CisJICBjb25zdCBjaGFyKiBfX2NuZWdzaWdu ID0KKwkgICAgbmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfTkVHQVRJVkVfU0lHTiwgX19jbG9j KTsKKwkgIC8vIF9JbnRsID09IHRydWUKKwkgIGNvbnN0IGNoYXIqIF9fY2N1cnIgPQorCSAgICBu bF9sYW5naW5mb19sKF9OTF9NT05FVEFSWV9JTlRfQ1VSUl9TWU1CT0wsIF9fY2xvYyk7CisKKwkg IGNoYXIqIF9fZ3JvdXAgPSAwOworCSAgY2hhciogX19wcyA9IDA7CisJICBjaGFyKiBfX25zID0g MDsKKwkgIGNvbnN0IGNoYXIgX19ucG9zbiA9IDA7CisJICAgIC8qICoobmxfbGFuZ2luZm9fbChf TkxfTU9ORVRBUllfSU5UX05fU0lHTl9QT1NOLCBfX2Nsb2MpKTsgKi8KKwkgIF9fdHJ5CisJICAg IHsKKwkgICAgICBzaXplX3QgX19sZW47CisKKwkgICAgICAvLyBDaGVjayBmb3IgTlVMTCwgd2hp Y2ggaW1wbGllcyBubyBncm91cGluZy4KKwkgICAgICBpZiAoX01fZGF0YS0+X01fdGhvdXNhbmRz X3NlcCA9PSAnXDAnKQorCQl7CisJCSAgLy8gTGlrZSBpbiAiQyIgbG9jYWxlLgorCQkgIF9NX2Rh dGEtPl9NX2dyb3VwaW5nID0gIiI7CisJCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IDA7 CisJCSAgX01fZGF0YS0+X01fdXNlX2dyb3VwaW5nID0gZmFsc2U7CisJCSAgX01fZGF0YS0+X01f dGhvdXNhbmRzX3NlcCA9ICcsJzsKKwkJfQorCSAgICAgIGVsc2UKKwkJeworCQkgIF9fbGVuID0g c3RybGVuKF9fY2dyb3VwKTsKKwkJICBpZiAoX19sZW4pCisJCSAgICB7CisJCSAgICAgIF9fZ3Jv dXAgPSBuZXcgY2hhcltfX2xlbiArIDFdOworCQkgICAgICBtZW1jcHkoX19ncm91cCwgX19jZ3Jv dXAsIF9fbGVuICsgMSk7CisJCSAgICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gX19ncm91cDsK KwkJICAgIH0KKwkJICBlbHNlCisJCSAgICB7CisJCSAgICAgIF9NX2RhdGEtPl9NX2dyb3VwaW5n ID0gIiI7CisJCSAgICAgIF9NX2RhdGEtPl9NX3VzZV9ncm91cGluZyA9IGZhbHNlOworCQkgICAg fQorCQkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSBfX2xlbjsKKwkJfQorCisJICAgICAg X19sZW4gPSBzdHJsZW4oX19jcG9zc2lnbik7CisJICAgICAgaWYgKF9fbGVuKQorCQl7CisJCSAg X19wcyA9IG5ldyBjaGFyW19fbGVuICsgMV07CisJCSAgbWVtY3B5KF9fcHMsIF9fY3Bvc3NpZ24s IF9fbGVuICsgMSk7CisJCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IF9fcHM7CisJCX0K KwkgICAgICBlbHNlCisJCV9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSAiIjsKKwkgICAgICBf TV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSBfX2xlbjsKKworCSAgICAgIGlmICghX19u cG9zbikKKwkJeworCQkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSAiKCkiOworCQkgIF9N X2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IDI7CisJCX0KKwkgICAgICBlbHNlCisJCXsK KwkJICBfX2xlbiA9IHN0cmxlbihfX2NuZWdzaWduKTsKKwkJICBpZiAoX19sZW4pCisJCSAgICB7 CisJCSAgICAgIF9fbnMgPSBuZXcgY2hhcltfX2xlbiArIDFdOworCQkgICAgICBtZW1jcHkoX19u cywgX19jbmVnc2lnbiwgX19sZW4gKyAxKTsKKwkJICAgICAgX01fZGF0YS0+X01fbmVnYXRpdmVf c2lnbiA9IF9fbnM7CisJCSAgICB9CisJCSAgZWxzZQorCQkgICAgX01fZGF0YS0+X01fbmVnYXRp dmVfc2lnbiA9ICIiOworCQkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IF9fbGVu OworCQl9CisKKwkgICAgICBfX2xlbiA9IHN0cmxlbihfX2NjdXJyKTsKKwkgICAgICBpZiAoX19s ZW4pCisJCXsKKwkJICBjaGFyKiBfX2N1cnIgPSBuZXcgY2hhcltfX2xlbiArIDFdOworCQkgIG1l bWNweShfX2N1cnIsIF9fY2N1cnIsIF9fbGVuICsgMSk7CisJCSAgX01fZGF0YS0+X01fY3Vycl9z eW1ib2wgPSBfX2N1cnI7CisJCX0KKwkgICAgICBlbHNlCisJCV9NX2RhdGEtPl9NX2N1cnJfc3lt Ym9sID0gIiI7CisJICAgICAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IF9fbGVuOwor CSAgICB9CisJICBfX2NhdGNoKC4uLikKKwkgICAgeworCSAgICAgIGRlbGV0ZSBfTV9kYXRhOwor CSAgICAgIF9NX2RhdGEgPSAwOworCSAgICAgIGRlbGV0ZSBbXSBfX2dyb3VwOworCSAgICAgIGRl bGV0ZSBbXSBfX3BzOworCSAgICAgIGRlbGV0ZSBbXSBfX25zOworCSAgICAgIF9fdGhyb3dfZXhj ZXB0aW9uX2FnYWluOworCSAgICB9CisKKwkgIGNoYXIgX19wcHJlY2VkZXMgPQorCSAgICAqKG5s X2xhbmdpbmZvX2woX05MX01PTkVUQVJZX0lOVF9QX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKwkg IGNoYXIgX19wc3BhY2UgPQorCSAgICAqKG5sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZX0lOVF9Q X1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7CisJICBjaGFyIF9fcHBvc24gPQorCSAgICAqKG5sX2xh bmdpbmZvX2woX05MX01PTkVUQVJZX0lOVF9QX1NJR05fUE9TTiwgX19jbG9jKSk7CisJICBfTV9k YXRhLT5fTV9wb3NfZm9ybWF0ID0gX1NfY29uc3RydWN0X3BhdHRlcm4oX19wcHJlY2VkZXMsIF9f cHNwYWNlLAorCQkJCQkJCV9fcHBvc24pOworCSAgY2hhciBfX25wcmVjZWRlcyA9CisJICAgICoo bmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfSU5UX05fQ1NfUFJFQ0VERVMsIF9fY2xvYykpOwor CSAgY2hhciBfX25zcGFjZSA9CisJICAgICoobmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfSU5U X05fU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBf U19jb25zdHJ1Y3RfcGF0dGVybihfX25wcmVjZWRlcywgX19uc3BhY2UsCisJCQkJCQkJX19ucG9z bik7CisJfQorICAgIH0KKworICB0ZW1wbGF0ZTw+CisgICAgdm9pZAorICAgIG1vbmV5cHVuY3Q8 Y2hhciwgZmFsc2U+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2Ms CisJCQkJCQkgICAgICBjb25zdCBjaGFyKikKKyAgICB7CisgICAgICBpZiAoIV9NX2RhdGEpCisJ X01fZGF0YSA9IG5ldyBfX21vbmV5cHVuY3RfY2FjaGU8Y2hhciwgZmFsc2U+OworCisgICAgICBp ZiAoIV9fY2xvYykKKwl7CisJICAvLyAiQyIgbG9jYWxlCisJICBfTV9kYXRhLT5fTV9kZWNpbWFs X3BvaW50ID0gJy4nOworCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9ICcsJzsKKwkgIF9N X2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CisJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0g MDsKKwkgIF9NX2RhdGEtPl9NX3VzZV9ncm91cGluZyA9IGZhbHNlOworCSAgX01fZGF0YS0+X01f Y3Vycl9zeW1ib2wgPSAiIjsKKwkgIF9NX2RhdGEtPl9NX2N1cnJfc3ltYm9sX3NpemUgPSAwOwor CSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9ICIiOworCSAgX01fZGF0YS0+X01fcG9zaXRp dmVfc2lnbl9zaXplID0gMDsKKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSAiIjsKKwkg IF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IDA7CisJICBfTV9kYXRhLT5fTV9mcmFj X2RpZ2l0cyA9IDA7CisJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0ID0gbW9uZXlfYmFzZTo6X1Nf ZGVmYXVsdF9wYXR0ZXJuOworCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6 Ol9TX2RlZmF1bHRfcGF0dGVybjsKKworCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgbW9u ZXlfYmFzZTo6X1NfZW5kOyArK19faSkKKwkgICAgX01fZGF0YS0+X01fYXRvbXNbX19pXSA9IG1v bmV5X2Jhc2U6Ol9TX2F0b21zW19faV07CisJfQorICAgICAgZWxzZQorCXsKKwkgIC8vIE5hbWVk IGxvY2FsZS4KKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPQorCSAgICAqKG5sX2xhbmdp bmZvX2woX05MX01PTkVUQVJZX01PTl9ERUNJTUFMX1BPSU5ULCBfX2Nsb2MpKTsKKwkgIF9NX2Rh dGEtPl9NX3Rob3VzYW5kc19zZXAgPQorCSAgICAqKG5sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZ X01PTl9USE9VU0FORFNfU0VQLCBfX2Nsb2MpKTsKKworCSAgLy8gQ2hlY2sgZm9yIE5VTEwsIHdo aWNoIGltcGxpZXMgbm8gZnJhY3Rpb25hbCBkaWdpdHMuCisJICBpZiAoX01fZGF0YS0+X01fZGVj aW1hbF9wb2ludCA9PSAnXDAnKQorCSAgICB7CisJICAgICAgLy8gTGlrZSBpbiAiQyIgbG9jYWxl LgorCSAgICAgIF9NX2RhdGEtPl9NX2ZyYWNfZGlnaXRzID0gMDsKKwkgICAgICBfTV9kYXRhLT5f TV9kZWNpbWFsX3BvaW50ID0gJy4nOworCSAgICB9CisJICBlbHNlCisJICAgIF9NX2RhdGEtPl9N X2ZyYWNfZGlnaXRzID0KKwkgICAgICAqKG5sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZX0ZSQUNf RElHSVRTLCBfX2Nsb2MpKTsKKworCSAgY29uc3QgY2hhciogX19jZ3JvdXAgPQorCSAgICBubF9s YW5naW5mb19sKF9OTF9NT05FVEFSWV9NT05fR1JPVVBJTkcsIF9fY2xvYyk7CisJICBjb25zdCBj aGFyKiBfX2Nwb3NzaWduID0KKwkgICAgbmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfUE9TSVRJ VkVfU0lHTiwgX19jbG9jKTsKKwkgIGNvbnN0IGNoYXIqIF9fY25lZ3NpZ24gPQorCSAgICBubF9s YW5naW5mb19sKF9OTF9NT05FVEFSWV9ORUdBVElWRV9TSUdOLCBfX2Nsb2MpOworCSAgLy8gX0lu dGwgPT0gZmFsc2UKKwkgIGNvbnN0IGNoYXIqIF9fY2N1cnIgPQorCSAgICBubF9sYW5naW5mb19s KF9OTF9NT05FVEFSWV9DVVJSRU5DWV9TWU1CT0wsIF9fY2xvYyk7CisKKwkgIGNoYXIqIF9fZ3Jv dXAgPSAwOworCSAgY2hhciogX19wcyA9IDA7CisJICBjaGFyKiBfX25zID0gMDsKKwkgIGNvbnN0 IGNoYXIgX19ucG9zbiA9IDE7CisJICAgIC8qICoobmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllf Tl9TSUdOX1BPU04sIF9fY2xvYykpOyAqLworCSAgX190cnkKKwkgICAgeworCSAgICAgIHNpemVf dCBfX2xlbjsKKworCSAgICAgIC8vIENoZWNrIGZvciBOVUxMLCB3aGljaCBpbXBsaWVzIG5vIGdy b3VwaW5nLgorCSAgICAgIGlmIChfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID09ICdcMCcpCisJ CXsKKwkJICAvLyBMaWtlIGluICJDIiBsb2NhbGUuCisJCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcg PSAiIjsKKwkJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKwkJICBfTV9kYXRhLT5f TV91c2VfZ3JvdXBpbmcgPSBmYWxzZTsKKwkJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0g JywnOworCQl9CisJICAgICAgZWxzZQorCQl7CisJCSAgX19sZW4gPSBzdHJsZW4oX19jZ3JvdXAp OworCQkgIGlmIChfX2xlbikKKwkJICAgIHsKKwkJICAgICAgX19ncm91cCA9IG5ldyBjaGFyW19f bGVuICsgMV07CisJCSAgICAgIG1lbWNweShfX2dyb3VwLCBfX2Nncm91cCwgX19sZW4gKyAxKTsK KwkJICAgICAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSBfX2dyb3VwOworCQkgICAgfQorCQkgIGVs c2UKKwkJICAgIHsKKwkJICAgICAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKwkJICAgICAg X01fZGF0YS0+X01fdXNlX2dyb3VwaW5nID0gZmFsc2U7CisJCSAgICB9CisJCSAgX01fZGF0YS0+ X01fZ3JvdXBpbmdfc2l6ZSA9IF9fbGVuOworCQl9CisKKwkgICAgICBfX2xlbiA9IHN0cmxlbihf X2Nwb3NzaWduKTsKKwkgICAgICBpZiAoX19sZW4pCisJCXsKKwkJICBfX3BzID0gbmV3IGNoYXJb X19sZW4gKyAxXTsKKwkJICBtZW1jcHkoX19wcywgX19jcG9zc2lnbiwgX19sZW4gKyAxKTsKKwkJ ICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gX19wczsKKwkJfQorCSAgICAgIGVsc2UKKwkJ X01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9ICIiOworCSAgICAgIF9NX2RhdGEtPl9NX3Bvc2l0 aXZlX3NpZ25fc2l6ZSA9IF9fbGVuOworCisJICAgICAgaWYgKCFfX25wb3NuKQorCQl7CisJCSAg X01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9ICIoKSI7CisJCSAgX01fZGF0YS0+X01fbmVnYXRp dmVfc2lnbl9zaXplID0gMjsKKwkJfQorCSAgICAgIGVsc2UKKwkJeworCQkgIF9fbGVuID0gc3Ry bGVuKF9fY25lZ3NpZ24pOworCQkgIGlmIChfX2xlbikKKwkJICAgIHsKKwkJICAgICAgX19ucyA9 IG5ldyBjaGFyW19fbGVuICsgMV07CisJCSAgICAgIG1lbWNweShfX25zLCBfX2NuZWdzaWduLCBf X2xlbiArIDEpOworCQkgICAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gX19uczsKKwkJ ICAgIH0KKwkJICBlbHNlCisJCSAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduID0gIiI7CisJ CSAgX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplID0gX19sZW47CisJCX0KKworCSAgICAg IF9fbGVuID0gc3RybGVuKF9fY2N1cnIpOworCSAgICAgIGlmIChfX2xlbikKKwkJeworCQkgIGNo YXIqIF9fY3VyciA9IG5ldyBjaGFyW19fbGVuICsgMV07CisJCSAgbWVtY3B5KF9fY3VyciwgX19j Y3VyciwgX19sZW4gKyAxKTsKKwkJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IF9fY3VycjsK KwkJfQorCSAgICAgIGVsc2UKKwkJX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSAiIjsKKwkgICAg ICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gX19sZW47CisJICAgIH0KKwkgIF9fY2F0 Y2goLi4uKQorCSAgICB7CisJICAgICAgZGVsZXRlIF9NX2RhdGE7CisJICAgICAgX01fZGF0YSA9 IDA7CisJICAgICAgZGVsZXRlIFtdIF9fZ3JvdXA7CisJICAgICAgZGVsZXRlIFtdIF9fcHM7CisJ ICAgICAgZGVsZXRlIFtdIF9fbnM7CisJICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47CisJ ICAgIH0KKworCSAgY2hhciBfX3BwcmVjZWRlcyA9CisJICAgICoobmxfbGFuZ2luZm9fbChfTkxf TU9ORVRBUllfUF9DU19QUkVDRURFUywgX19jbG9jKSk7CisJICBjaGFyIF9fcHNwYWNlID0KKwkg ICAgKihubF9sYW5naW5mb19sKF9OTF9NT05FVEFSWV9QX1NFUF9CWV9TUEFDRSwgX19jbG9jKSk7 CisJICBjaGFyIF9fcHBvc24gPSAqKG5sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZX1BfU0lHTl9Q T1NOLCBfX2Nsb2MpKTsKKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQgPSBfU19jb25zdHJ1Y3Rf cGF0dGVybihfX3BwcmVjZWRlcywgX19wc3BhY2UsCisJCQkJCQkJX19wcG9zbik7CisJICBjaGFy IF9fbnByZWNlZGVzID0KKwkgICAgKihubF9sYW5naW5mb19sKF9OTF9NT05FVEFSWV9OX0NTX1BS RUNFREVTLCBfX2Nsb2MpKTsKKwkgIGNoYXIgX19uc3BhY2UgPQorCSAgICAqKG5sX2xhbmdpbmZv X2woX05MX01PTkVUQVJZX05fU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsKKwkgIF9NX2RhdGEtPl9N X25lZ19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX25wcmVjZWRlcywgX19uc3BhY2Us CisJCQkJCQkJX19ucG9zbik7CisJfQorICAgIH0KKworICB0ZW1wbGF0ZTw+CisgICAgbW9uZXlw dW5jdDxjaGFyLCB0cnVlPjo6fm1vbmV5cHVuY3QoKQorICAgIHsKKyAgICAgIGlmIChfTV9kYXRh LT5fTV9ncm91cGluZ19zaXplKQorCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9ncm91cGluZzsKKyAg ICAgIGlmIChfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUpCisJZGVsZXRlIFtdIF9NX2Rh dGEtPl9NX3Bvc2l0aXZlX3NpZ247CisgICAgICBpZiAoX01fZGF0YS0+X01fbmVnYXRpdmVfc2ln bl9zaXplCisJICAmJiBzdHJjbXAoX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiwgIigpIikgIT0g MCkKKwlkZWxldGUgW10gX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbjsKKyAgICAgIGlmIChfTV9k YXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplKQorCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9jdXJyX3N5 bWJvbDsKKyAgICAgIGRlbGV0ZSBfTV9kYXRhOworICAgIH0KKworICB0ZW1wbGF0ZTw+CisgICAg bW9uZXlwdW5jdDxjaGFyLCBmYWxzZT46On5tb25leXB1bmN0KCkKKyAgICB7CisgICAgICBpZiAo X01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSkKKwlkZWxldGUgW10gX01fZGF0YS0+X01fZ3JvdXBp bmc7CisgICAgICBpZiAoX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbl9zaXplKQorCWRlbGV0ZSBb XSBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduOworICAgICAgaWYgKF9NX2RhdGEtPl9NX25lZ2F0 aXZlX3NpZ25fc2l6ZQorCSAgJiYgc3RyY21wKF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24sICIo KSIpICE9IDApCisJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ247CisgICAgICBp ZiAoX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSkKKwlkZWxldGUgW10gX01fZGF0YS0+X01f Y3Vycl9zeW1ib2w7CisgICAgICBkZWxldGUgX01fZGF0YTsKKyAgICB9CisKKyNpZmRlZiBfR0xJ QkNYWF9VU0VfV0NIQVJfVAorICB0ZW1wbGF0ZTw+CisgICAgdm9pZAorICAgIG1vbmV5cHVuY3Q8 d2NoYXJfdCwgdHJ1ZT46Ol9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlIF9fY2xv YywKKwkJCQkJCQljb25zdCBjaGFyKikKKyAgICB7CisgICAgICBpZiAoIV9NX2RhdGEpCisJX01f ZGF0YSA9IG5ldyBfX21vbmV5cHVuY3RfY2FjaGU8d2NoYXJfdCwgdHJ1ZT47CisKKyAgICAgIGlm ICghX19jbG9jKQorCXsKKwkgIC8vICJDIiBsb2NhbGUKKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxf cG9pbnQgPSBMJy4nOworCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9IEwnLCc7CisJICBf TV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9 IDA7CisJICBfTV9kYXRhLT5fTV91c2VfZ3JvdXBpbmcgPSBmYWxzZTsKKwkgIF9NX2RhdGEtPl9N X2N1cnJfc3ltYm9sID0gTCIiOworCSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2xfc2l6ZSA9IDA7 CisJICBfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gTCIiOworCSAgX01fZGF0YS0+X01fcG9z aXRpdmVfc2lnbl9zaXplID0gMDsKKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBMIiI7 CisJICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPSAwOworCSAgX01fZGF0YS0+X01f ZnJhY19kaWdpdHMgPSAwOworCSAgX01fZGF0YS0+X01fcG9zX2Zvcm1hdCA9IG1vbmV5X2Jhc2U6 Ol9TX2RlZmF1bHRfcGF0dGVybjsKKwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBtb25leV9i YXNlOjpfU19kZWZhdWx0X3BhdHRlcm47CisKKwkgIC8vIFVzZSBjdHlwZTo6d2lkZW4gY29kZSB3 aXRob3V0IHRoZSBmYWNldC4uLgorCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgbW9uZXlf YmFzZTo6X1NfZW5kOyArK19faSkKKwkgICAgX01fZGF0YS0+X01fYXRvbXNbX19pXSA9CisJICAg ICAgc3RhdGljX2Nhc3Q8d2NoYXJfdD4obW9uZXlfYmFzZTo6X1NfYXRvbXNbX19pXSk7CisJfQor ICAgICAgZWxzZQorCXsKKwkgIC8vIE5hbWVkIGxvY2FsZS4KKwkgIF9fY19sb2NhbGUgX19vbGQg PSB1c2Vsb2NhbGUoX19jbG9jKTsKKworCSAgdW5pb24geyBjaGFyICpfX3M7IHdjaGFyX3QgKl9f dzsgfSBfX3U7CisJICBfX3UuX19zID0gbmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfV01PTl9E RUNJTUFMX1BPSU5ULCBfX2Nsb2MpOworCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2ludCA9ICpf X3UuX193OworCisJICBfX3UuX19zID0gbmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfV01PTl9U SE9VU0FORFNfU0VQLCBfX2Nsb2MpOworCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9ICpf X3UuX193OworCisJICAvLyBDaGVjayBmb3IgTlVMTCwgd2hpY2ggaW1wbGllcyBubyBmcmFjdGlv bmFsIGRpZ2l0cy4KKwkgIGlmIChfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID09IEwnXDAnKQor CSAgICB7CisJICAgICAgLy8gTGlrZSBpbiAiQyIgbG9jYWxlLgorCSAgICAgIF9NX2RhdGEtPl9N X2ZyYWNfZGlnaXRzID0gMDsKKwkgICAgICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gTCcu JzsKKwkgICAgfQorCSAgZWxzZQorCSAgICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9CisJICAg ICAgKihubF9sYW5naW5mb19sKF9OTF9NT05FVEFSWV9JTlRfRlJBQ19ESUdJVFMsIF9fY2xvYykp OworCisJICBjb25zdCBjaGFyKiBfX2Nncm91cCA9CisJICAgIG5sX2xhbmdpbmZvX2woX05MX01P TkVUQVJZX01PTl9HUk9VUElORywgX19jbG9jKTsKKwkgIGNvbnN0IGNoYXIqIF9fY3Bvc3NpZ24g PQorCSAgICBubF9sYW5naW5mb19sKF9OTF9NT05FVEFSWV9QT1NJVElWRV9TSUdOLCBfX2Nsb2Mp OworCSAgY29uc3QgY2hhciogX19jbmVnc2lnbiA9CisJICAgIG5sX2xhbmdpbmZvX2woX05MX01P TkVUQVJZX05FR0FUSVZFX1NJR04sIF9fY2xvYyk7CisJICBjb25zdCBjaGFyKiBfX2NjdXJyID0K KwkgICAgbmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfSU5UX0NVUlJfU1lNQk9MLCBfX2Nsb2Mp OworCisJICBjaGFyKiBfX2dyb3VwID0gMDsKKwkgIHdjaGFyX3QqIF9fd2NzX3BzID0gMDsKKwkg IHdjaGFyX3QqIF9fd2NzX25zID0gMDsKKwkgIGNvbnN0IGNoYXIgX19ucG9zbiA9IDA7CisJICAg IC8qICoobmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfSU5UX05fU0lHTl9QT1NOLCBfX2Nsb2Mp KTsgKi8KKwkgIF9fdHJ5CisJICAgIHsKKwkgICAgICBzaXplX3QgX19sZW47CisKKwkgICAgICAv LyBDaGVjayBmb3IgTlVMTCwgd2hpY2ggaW1wbGllcyBubyBncm91cGluZy4KKwkgICAgICBpZiAo X01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9PSBMJ1wwJykKKwkJeworCQkgIC8vIExpa2UgaW4g IkMiIGxvY2FsZS4KKwkJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworCQkgIF9NX2RhdGEt Pl9NX2dyb3VwaW5nX3NpemUgPSAwOworCQkgIF9NX2RhdGEtPl9NX3VzZV9ncm91cGluZyA9IGZh bHNlOworCQkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBMJywnOworCQl9CisJICAgICAg ZWxzZQorCQl7CisJCSAgX19sZW4gPSBzdHJsZW4oX19jZ3JvdXApOworCQkgIGlmIChfX2xlbikK KwkJICAgIHsKKwkJICAgICAgX19ncm91cCA9IG5ldyBjaGFyW19fbGVuICsgMV07CisJCSAgICAg IG1lbWNweShfX2dyb3VwLCBfX2Nncm91cCwgX19sZW4gKyAxKTsKKwkJICAgICAgX01fZGF0YS0+ X01fZ3JvdXBpbmcgPSBfX2dyb3VwOworCQkgICAgfQorCQkgIGVsc2UKKwkJICAgIHsKKwkJICAg ICAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKwkJICAgICAgX01fZGF0YS0+X01fdXNlX2dy b3VwaW5nID0gZmFsc2U7CisJCSAgICB9CisJCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9 IF9fbGVuOworCQl9CisKKwkgICAgICBtYnN0YXRlX3QgX19zdGF0ZTsKKwkgICAgICBfX2xlbiA9 IHN0cmxlbihfX2Nwb3NzaWduKTsKKwkgICAgICBpZiAoX19sZW4pCisJCXsKKwkJICBtZW1zZXQo Jl9fc3RhdGUsIDAsIHNpemVvZihtYnN0YXRlX3QpKTsKKwkJICBfX3djc19wcyA9IG5ldyB3Y2hh cl90W19fbGVuICsgMV07CisJCSAgbWJzcnRvd2NzKF9fd2NzX3BzLCAmX19jcG9zc2lnbiwgX19s ZW4gKyAxLCAmX19zdGF0ZSk7CisJCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9IF9fd2Nz X3BzOworCQl9CisJICAgICAgZWxzZQorCQlfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduID0gTCIi OworCSAgICAgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9CisJCXdjc2xlbihfTV9k YXRhLT5fTV9wb3NpdGl2ZV9zaWduKTsKKworCSAgICAgIF9fbGVuID0gc3RybGVuKF9fY25lZ3Np Z24pOworCSAgICAgIGlmICghX19ucG9zbikKKwkJX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9 IEwiKCkiOworCSAgICAgIGVsc2UgaWYgKF9fbGVuKQorCQl7CisJCSAgbWVtc2V0KCZfX3N0YXRl LCAwLCBzaXplb2YobWJzdGF0ZV90KSk7CisJCSAgX193Y3NfbnMgPSBuZXcgd2NoYXJfdFtfX2xl biArIDFdOworCQkgIG1ic3J0b3djcyhfX3djc19ucywgJl9fY25lZ3NpZ24sIF9fbGVuICsgMSwg Jl9fc3RhdGUpOworCQkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBfX3djc19uczsKKwkJ fQorCSAgICAgIGVsc2UKKwkJX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiIjsKKwkgICAg ICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPQorCQl3Y3NsZW4oX01fZGF0YS0+X01f bmVnYXRpdmVfc2lnbik7CisKKwkgICAgICAvLyBfSW50bCA9PSB0cnVlLgorCSAgICAgIF9fbGVu ID0gc3RybGVuKF9fY2N1cnIpOworCSAgICAgIGlmIChfX2xlbikKKwkJeworCQkgIG1lbXNldCgm X19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOworCQkgIHdjaGFyX3QqIF9fd2NzID0gbmV3 IHdjaGFyX3RbX19sZW4gKyAxXTsKKwkJICBtYnNydG93Y3MoX193Y3MsICZfX2NjdXJyLCBfX2xl biArIDEsICZfX3N0YXRlKTsKKwkJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IF9fd2NzOwor CQl9CisJICAgICAgZWxzZQorCQlfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IEwiIjsKKwkgICAg ICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gd2NzbGVuKF9NX2RhdGEtPl9NX2N1cnJf c3ltYm9sKTsKKwkgICAgfQorCSAgX19jYXRjaCguLi4pCisJICAgIHsKKwkgICAgICBkZWxldGUg X01fZGF0YTsKKwkgICAgICBfTV9kYXRhID0gMDsKKwkgICAgICBkZWxldGUgW10gX19ncm91cDsK KwkgICAgICBkZWxldGUgW10gX193Y3NfcHM7CisJICAgICAgZGVsZXRlIFtdIF9fd2NzX25zOwor CSAgICAgIHVzZWxvY2FsZShfX29sZCk7CisJICAgICAgX190aHJvd19leGNlcHRpb25fYWdhaW47 CisJICAgIH0KKworCSAgY2hhciBfX3BwcmVjZWRlcyA9CisJICAgICoobmxfbGFuZ2luZm9fbChf TkxfTU9ORVRBUllfSU5UX1BfQ1NfUFJFQ0VERVMsIF9fY2xvYykpOworCSAgY2hhciBfX3BzcGFj ZSA9CisJICAgICoobmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfSU5UX1BfU0VQX0JZX1NQQUNF LCBfX2Nsb2MpKTsKKwkgIGNoYXIgX19wcG9zbiA9CisJICAgICoobmxfbGFuZ2luZm9fbChfTkxf TU9ORVRBUllfSU5UX1BfU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKwkgIF9NX2RhdGEtPl9NX3Bvc19m b3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX3BwcmVjZWRlcywgX19wc3BhY2UsCisJCQkJ CQkJX19wcG9zbik7CisJICBjaGFyIF9fbnByZWNlZGVzID0KKwkgICAgKihubF9sYW5naW5mb19s KF9OTF9NT05FVEFSWV9JTlRfTl9DU19QUkVDRURFUywgX19jbG9jKSk7CisJICBjaGFyIF9fbnNw YWNlID0KKwkgICAgKihubF9sYW5naW5mb19sKF9OTF9NT05FVEFSWV9JTlRfTl9TRVBfQllfU1BB Q0UsIF9fY2xvYykpOworCSAgX01fZGF0YS0+X01fbmVnX2Zvcm1hdCA9IF9TX2NvbnN0cnVjdF9w YXR0ZXJuKF9fbnByZWNlZGVzLCBfX25zcGFjZSwKKwkJCQkJCQlfX25wb3NuKTsKKworCSAgdXNl bG9jYWxlKF9fb2xkKTsKKwl9CisgICAgfQorCisgIHRlbXBsYXRlPD4KKyAgdm9pZAorICBtb25l eXB1bmN0PHdjaGFyX3QsIGZhbHNlPjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2Nh bGUgX19jbG9jLAorCQkJCQkJICAgICAgIGNvbnN0IGNoYXIqKQorICB7CisgICAgaWYgKCFfTV9k YXRhKQorICAgICAgX01fZGF0YSA9IG5ldyBfX21vbmV5cHVuY3RfY2FjaGU8d2NoYXJfdCwgZmFs c2U+OworCisgICAgaWYgKCFfX2Nsb2MpCisJeworCSAgLy8gIkMiIGxvY2FsZQorCSAgX01fZGF0 YS0+X01fZGVjaW1hbF9wb2ludCA9IEwnLic7CisJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2Vw ID0gTCcsJzsKKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0gIiI7CisJICBfTV9kYXRhLT5fTV9n cm91cGluZ19zaXplID0gMDsKKwkgIF9NX2RhdGEtPl9NX3VzZV9ncm91cGluZyA9IGZhbHNlOwor CSAgX01fZGF0YS0+X01fY3Vycl9zeW1ib2wgPSBMIiI7CisJICBfTV9kYXRhLT5fTV9jdXJyX3N5 bWJvbF9zaXplID0gMDsKKwkgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ24gPSBMIiI7CisJICBf TV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduX3NpemUgPSAwOworCSAgX01fZGF0YS0+X01fbmVnYXRp dmVfc2lnbiA9IEwiIjsKKwkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ25fc2l6ZSA9IDA7CisJ ICBfTV9kYXRhLT5fTV9mcmFjX2RpZ2l0cyA9IDA7CisJICBfTV9kYXRhLT5fTV9wb3NfZm9ybWF0 ID0gbW9uZXlfYmFzZTo6X1NfZGVmYXVsdF9wYXR0ZXJuOworCSAgX01fZGF0YS0+X01fbmVnX2Zv cm1hdCA9IG1vbmV5X2Jhc2U6Ol9TX2RlZmF1bHRfcGF0dGVybjsKKworCSAgLy8gVXNlIGN0eXBl Ojp3aWRlbiBjb2RlIHdpdGhvdXQgdGhlIGZhY2V0Li4uCisJICBmb3IgKHNpemVfdCBfX2kgPSAw OyBfX2kgPCBtb25leV9iYXNlOjpfU19lbmQ7ICsrX19pKQorCSAgICBfTV9kYXRhLT5fTV9hdG9t c1tfX2ldID0KKwkgICAgICBzdGF0aWNfY2FzdDx3Y2hhcl90Pihtb25leV9iYXNlOjpfU19hdG9t c1tfX2ldKTsKKwl9CisgICAgICBlbHNlCisJeworCSAgLy8gTmFtZWQgbG9jYWxlLgorCSAgX19j X2xvY2FsZSBfX29sZCA9IHVzZWxvY2FsZShfX2Nsb2MpOworCisJICB1bmlvbiB7IGNoYXIgKl9f czsgd2NoYXJfdCAqX193OyB9IF9fdTsKKwkgIF9fdS5fX3MgPSBubF9sYW5naW5mb19sKF9OTF9N T05FVEFSWV9XTU9OX0RFQ0lNQUxfUE9JTlQsIF9fY2xvYyk7CisJICBfTV9kYXRhLT5fTV9kZWNp bWFsX3BvaW50ID0gKl9fdS5fX3c7CisKKwkgIF9fdS5fX3MgPSBubF9sYW5naW5mb19sKF9OTF9N T05FVEFSWV9XTU9OX1RIT1VTQU5EU19TRVAsIF9fY2xvYyk7CisJICBfTV9kYXRhLT5fTV90aG91 c2FuZHNfc2VwID0gKl9fdS5fX3c7CisKKwkgIC8vIENoZWNrIGZvciBOVUxMLCB3aGljaCBpbXBs aWVzIG5vIGZyYWN0aW9uYWwgZGlnaXRzLgorCSAgaWYgKF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9p bnQgPT0gTCdcMCcpCisJICAgIHsKKwkgICAgICAvLyBMaWtlIGluICJDIiBsb2NhbGUuCisJICAg ICAgX01fZGF0YS0+X01fZnJhY19kaWdpdHMgPSAwOworCSAgICAgIF9NX2RhdGEtPl9NX2RlY2lt YWxfcG9pbnQgPSBMJy4nOworCSAgICB9CisJICBlbHNlCisJICAgIF9NX2RhdGEtPl9NX2ZyYWNf ZGlnaXRzID0KKwkgICAgICAqKG5sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZX0ZSQUNfRElHSVRT LCBfX2Nsb2MpKTsKKworCSAgY29uc3QgY2hhciogX19jZ3JvdXAgPQorCSAgICBubF9sYW5naW5m b19sKF9OTF9NT05FVEFSWV9NT05fR1JPVVBJTkcsIF9fY2xvYyk7CisJICBjb25zdCBjaGFyKiBf X2Nwb3NzaWduID0KKwkgICAgbmxfbGFuZ2luZm9fbChfTkxfTU9ORVRBUllfUE9TSVRJVkVfU0lH TiwgX19jbG9jKTsKKwkgIGNvbnN0IGNoYXIqIF9fY25lZ3NpZ24gPQorCSAgICBubF9sYW5naW5m b19sKF9OTF9NT05FVEFSWV9ORUdBVElWRV9TSUdOLCBfX2Nsb2MpOworCSAgY29uc3QgY2hhciog X19jY3VyciA9CisJICAgIG5sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZX0NVUlJFTkNZX1NZTUJP TCwgX19jbG9jKTsKKworCSAgY2hhciogX19ncm91cCA9IDA7CisJICB3Y2hhcl90KiBfX3djc19w cyA9IDA7CisJICB3Y2hhcl90KiBfX3djc19ucyA9IDA7CisJICBjb25zdCBjaGFyIF9fbnBvc24g PSAxOworCSAgICAvKiAqKG5sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZX05fU0lHTl9QT1NOLCBf X2Nsb2MpKTsgKi8KKwkgIF9fdHJ5CisJICAgIHsKKwkgICAgICBzaXplX3QgX19sZW47CisKKwkg ICAgICAvLyBDaGVjayBmb3IgTlVMTCwgd2hpY2ggaW1wbGllcyBubyBncm91cGluZy4KKwkgICAg ICBpZiAoX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9PSBMJ1wwJykKKwkJeworCQkgIC8vIExp a2UgaW4gIkMiIGxvY2FsZS4KKwkJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworCQkgIF9N X2RhdGEtPl9NX2dyb3VwaW5nX3NpemUgPSAwOworCQkgIF9NX2RhdGEtPl9NX3VzZV9ncm91cGlu ZyA9IGZhbHNlOworCQkgIF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPSBMJywnOworCQl9CisJ ICAgICAgZWxzZQorCQl7CisJCSAgX19sZW4gPSBzdHJsZW4oX19jZ3JvdXApOworCQkgIGlmIChf X2xlbikKKwkJICAgIHsKKwkJICAgICAgX19ncm91cCA9IG5ldyBjaGFyW19fbGVuICsgMV07CisJ CSAgICAgIG1lbWNweShfX2dyb3VwLCBfX2Nncm91cCwgX19sZW4gKyAxKTsKKwkJICAgICAgX01f ZGF0YS0+X01fZ3JvdXBpbmcgPSBfX2dyb3VwOworCQkgICAgfQorCQkgIGVsc2UKKwkJICAgIHsK KwkJICAgICAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKwkJICAgICAgX01fZGF0YS0+X01f dXNlX2dyb3VwaW5nID0gZmFsc2U7CisJCSAgICB9CisJCSAgX01fZGF0YS0+X01fZ3JvdXBpbmdf c2l6ZSA9IF9fbGVuOworCQl9CisKKwkgICAgICBtYnN0YXRlX3QgX19zdGF0ZTsKKwkgICAgICBf X2xlbiA9IHN0cmxlbihfX2Nwb3NzaWduKTsKKwkgICAgICBpZiAoX19sZW4pCisJCXsKKwkJICBt ZW1zZXQoJl9fc3RhdGUsIDAsIHNpemVvZihtYnN0YXRlX3QpKTsKKwkJICBfX3djc19wcyA9IG5l dyB3Y2hhcl90W19fbGVuICsgMV07CisJCSAgbWJzcnRvd2NzKF9fd2NzX3BzLCAmX19jcG9zc2ln biwgX19sZW4gKyAxLCAmX19zdGF0ZSk7CisJCSAgX01fZGF0YS0+X01fcG9zaXRpdmVfc2lnbiA9 IF9fd2NzX3BzOworCQl9CisJICAgICAgZWxzZQorCQlfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWdu ID0gTCIiOworCSAgICAgIF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSA9CisJCXdjc2xl bihfTV9kYXRhLT5fTV9wb3NpdGl2ZV9zaWduKTsKKworCSAgICAgIF9fbGVuID0gc3RybGVuKF9f Y25lZ3NpZ24pOworCSAgICAgIGlmICghX19ucG9zbikKKwkJX01fZGF0YS0+X01fbmVnYXRpdmVf c2lnbiA9IEwiKCkiOworCSAgICAgIGVsc2UgaWYgKF9fbGVuKQorCQl7CisJCSAgbWVtc2V0KCZf X3N0YXRlLCAwLCBzaXplb2YobWJzdGF0ZV90KSk7CisJCSAgX193Y3NfbnMgPSBuZXcgd2NoYXJf dFtfX2xlbiArIDFdOworCQkgIG1ic3J0b3djcyhfX3djc19ucywgJl9fY25lZ3NpZ24sIF9fbGVu ICsgMSwgJl9fc3RhdGUpOworCQkgIF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ24gPSBfX3djc19u czsKKwkJfQorCSAgICAgIGVsc2UKKwkJX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiA9IEwiIjsK KwkgICAgICBfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3NpemUgPQorCQl3Y3NsZW4oX01fZGF0 YS0+X01fbmVnYXRpdmVfc2lnbik7CisKKwkgICAgICAvLyBfSW50bCA9PSB0cnVlLgorCSAgICAg IF9fbGVuID0gc3RybGVuKF9fY2N1cnIpOworCSAgICAgIGlmIChfX2xlbikKKwkJeworCQkgIG1l bXNldCgmX19zdGF0ZSwgMCwgc2l6ZW9mKG1ic3RhdGVfdCkpOworCQkgIHdjaGFyX3QqIF9fd2Nz ID0gbmV3IHdjaGFyX3RbX19sZW4gKyAxXTsKKwkJICBtYnNydG93Y3MoX193Y3MsICZfX2NjdXJy LCBfX2xlbiArIDEsICZfX3N0YXRlKTsKKwkJICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IF9f d2NzOworCQl9CisJICAgICAgZWxzZQorCQlfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbCA9IEwiIjsK KwkgICAgICBfTV9kYXRhLT5fTV9jdXJyX3N5bWJvbF9zaXplID0gd2NzbGVuKF9NX2RhdGEtPl9N X2N1cnJfc3ltYm9sKTsKKwkgICAgfQorCSAgX19jYXRjaCguLi4pCisJICAgIHsKKwkgICAgICBk ZWxldGUgX01fZGF0YTsKKwkgICAgICBfTV9kYXRhID0gMDsKKwkgICAgICBkZWxldGUgW10gX19n cm91cDsKKwkgICAgICBkZWxldGUgW10gX193Y3NfcHM7CisJICAgICAgZGVsZXRlIFtdIF9fd2Nz X25zOworCSAgICAgIHVzZWxvY2FsZShfX29sZCk7CisJICAgICAgX190aHJvd19leGNlcHRpb25f YWdhaW47CisJICAgIH0KKworCSAgY2hhciBfX3BwcmVjZWRlcyA9CisJICAgICoobmxfbGFuZ2lu Zm9fbChfTkxfTU9ORVRBUllfUF9DU19QUkVDRURFUywgX19jbG9jKSk7CisJICBjaGFyIF9fcHNw YWNlID0KKwkgICAgKihubF9sYW5naW5mb19sKF9OTF9NT05FVEFSWV9QX1NFUF9CWV9TUEFDRSwg X19jbG9jKSk7CisJICBjaGFyIF9fcHBvc24gPQorCSAgICAqKG5sX2xhbmdpbmZvX2woX05MX01P TkVUQVJZX1BfU0lHTl9QT1NOLCBfX2Nsb2MpKTsKKwkgIF9NX2RhdGEtPl9NX3Bvc19mb3JtYXQg PSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX3BwcmVjZWRlcywgX19wc3BhY2UsCisJCQkJCQkJX19w cG9zbik7CisJICBjaGFyIF9fbnByZWNlZGVzID0KKwkgICAgKihubF9sYW5naW5mb19sKF9OTF9N T05FVEFSWV9OX0NTX1BSRUNFREVTLCBfX2Nsb2MpKTsKKwkgIGNoYXIgX19uc3BhY2UgPQorCSAg ICAqKG5sX2xhbmdpbmZvX2woX05MX01PTkVUQVJZX05fU0VQX0JZX1NQQUNFLCBfX2Nsb2MpKTsK KwkgIF9NX2RhdGEtPl9NX25lZ19mb3JtYXQgPSBfU19jb25zdHJ1Y3RfcGF0dGVybihfX25wcmVj ZWRlcywgX19uc3BhY2UsCisJCQkJCQkJX19ucG9zbik7CisKKwkgIHVzZWxvY2FsZShfX29sZCk7 CisJfQorICAgIH0KKworICB0ZW1wbGF0ZTw+CisgICAgbW9uZXlwdW5jdDx3Y2hhcl90LCB0cnVl Pjo6fm1vbmV5cHVuY3QoKQorICAgIHsKKyAgICAgIGlmIChfTV9kYXRhLT5fTV9ncm91cGluZ19z aXplKQorCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9ncm91cGluZzsKKyAgICAgIGlmIChfTV9kYXRh LT5fTV9wb3NpdGl2ZV9zaWduX3NpemUpCisJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX3Bvc2l0aXZl X3NpZ247CisgICAgICBpZiAoX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbl9zaXplCisJICAmJiB3 Y3NjbXAoX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbiwgTCIoKSIpICE9IDApCisJZGVsZXRlIFtd IF9NX2RhdGEtPl9NX25lZ2F0aXZlX3NpZ247CisgICAgICBpZiAoX01fZGF0YS0+X01fY3Vycl9z eW1ib2xfc2l6ZSkKKwlkZWxldGUgW10gX01fZGF0YS0+X01fY3Vycl9zeW1ib2w7CisgICAgICBk ZWxldGUgX01fZGF0YTsKKyAgICB9CisKKyAgdGVtcGxhdGU8PgorICAgIG1vbmV5cHVuY3Q8d2No YXJfdCwgZmFsc2U+Ojp+bW9uZXlwdW5jdCgpCisgICAgeworICAgICAgaWYgKF9NX2RhdGEtPl9N X2dyb3VwaW5nX3NpemUpCisJZGVsZXRlIFtdIF9NX2RhdGEtPl9NX2dyb3VwaW5nOworICAgICAg aWYgKF9NX2RhdGEtPl9NX3Bvc2l0aXZlX3NpZ25fc2l6ZSkKKwlkZWxldGUgW10gX01fZGF0YS0+ X01fcG9zaXRpdmVfc2lnbjsKKyAgICAgIGlmIChfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduX3Np emUKKwkgICYmIHdjc2NtcChfTV9kYXRhLT5fTV9uZWdhdGl2ZV9zaWduLCBMIigpIikgIT0gMCkK KwlkZWxldGUgW10gX01fZGF0YS0+X01fbmVnYXRpdmVfc2lnbjsKKyAgICAgIGlmIChfTV9kYXRh LT5fTV9jdXJyX3N5bWJvbF9zaXplKQorCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9jdXJyX3N5bWJv bDsKKyAgICAgIGRlbGV0ZSBfTV9kYXRhOworICAgIH0KKyNlbmRpZgorCitfR0xJQkNYWF9FTkRf TkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9saWJzdGRjKyst djMvY29uZmlnL2xvY2FsZS9uZXdsaWIvbnVtZXJpY19tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYz L2NvbmZpZy9sb2NhbGUvbmV3bGliL251bWVyaWNfbWVtYmVycy5jYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uY2JkM2MzYjlmNzMKLS0tIC9kZXYvbnVsbAorKysgYi9s aWJzdGRjKystdjMvY29uZmlnL2xvY2FsZS9uZXdsaWIvbnVtZXJpY19tZW1iZXJzLmNjCkBAIC0w LDAgKzEsMjczIEBACisvLyBzdGQ6Om51bXB1bmN0IGltcGxlbWVudGF0aW9uIGRldGFpbHMsIG5l d2xpYiB2ZXJzaW9uIC0qLSBDKysgLSotCisKKy8vIENvcHlyaWdodCAoQykgMjAwMS0yMDIzIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorLy8KKy8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9m IHRoZSBHTlUgSVNPIEMrKyBMaWJyYXJ5LiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUKKy8vIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQor Ly8gdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi eSB0aGUKKy8vIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3Ig KGF0IHlvdXIgb3B0aW9uKQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisKKy8vIFRoaXMgbGlicmFy eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorLy8g YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YKKy8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUKKy8vIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCisKKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdy YW50ZWQgYWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVu dGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2Vp dmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNv cHkgb2YgdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBw cm9ncmFtOworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJl c3BlY3RpdmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2Vz Lz4uCisKKy8vCisvLyBJU08gQysrIDE0ODgyOiAyMi4yLjMuMS4yICBudW1wdW5jdCB2aXJ0dWFs IGZ1bmN0aW9ucworLy8KKworLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJrb3pAcmVk aGF0LmNvbT4KKy8vIE1vZGlmaWVkIGJ5IFRha2FzaGkgWWFubyA8dGFrYXNoaS55YW5vQG5pZnR5 Lm5lLmpwPgorCisjaW5jbHVkZSA8bG9jYWxlPgorI2luY2x1ZGUgPGJpdHMvYysrbG9jYWxlX2lu dGVybmFsLmg+CisjaW5jbHVkZSA8aWNvbnYuaD4KKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9W SVNJQklMSVRZKGRlZmF1bHQpCit7CitfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgor CisgIGV4dGVybiBjaGFyIF9fbmFycm93X211bHRpYnl0ZV9jaGFycyhjb25zdCBjaGFyKiBzLCBs b2NhbGVfdCBjbG9jKTsKKworLy8gVGhpcyBmaWxlIG1pZ2h0IGJlIGNvbXBpbGVkIHR3aWNlLCBi dXQgd2Ugb25seSB3YW50IHRvIGRlZmluZSB0aGlzIG9uY2UuCisjaWYgISBfR0xJQkNYWF9VU0Vf Q1hYMTFfQUJJCisgIGNoYXIKKyAgX19uYXJyb3dfbXVsdGlieXRlX2NoYXJzKGNvbnN0IGNoYXIq IHMsIGxvY2FsZV90IGNsb2MpCisgIHsKKyAgICBjb25zdCBjaGFyKiBjb2Rlc2V0ID0gbmxfbGFu Z2luZm9fbChDT0RFU0VULCBjbG9jKTsKKyAgICBpZiAoIXN0cmNtcChjb2Rlc2V0LCAiVVRGLTgi KSkKKyAgICAgIHsKKwkvLyBvcHRpbWl6ZSBmb3Igc29tZSBrbm93biBjYXNlcworCWlmICghc3Ry Y21wKHMsICJcdTIwMkYiKSkgLy8gTkFSUk9XIE5PLUJSRUFLIFNQQUNFCisJICByZXR1cm4gJyAn OworCWlmICghc3RyY21wKHMsICJcdTIwMTkiKSkgLy8gUklHSFQgU0lOR0xFIFFVT1RBVElPTiBN QVJLCisJICByZXR1cm4gJ1wnJzsKKwlpZiAoIXN0cmNtcChzLCAiXHUwNjZDIikpIC8vIEFSQUJJ QyBUSE9VU0FORFMgU0VQQVJBVE9SCisJICByZXR1cm4gJ1wnJzsKKyAgICAgIH0KKworICAgIGlj b252X3QgY2QgPSBpY29udl9vcGVuKCJBU0NJSS8vVFJBTlNMSVQiLCBjb2Rlc2V0KTsKKyAgICBp ZiAoY2QgIT0gKGljb252X3QpLTEpCisgICAgICB7CisJY2hhciBjMTsKKwlzaXplX3QgaW5ieXRl c2xlZnQgPSBzdHJsZW4ocyk7CisJc2l6ZV90IG91dGJ5dGVzbGVmdCA9IDE7CisJY2hhciogaW5i dWYgPSBjb25zdF9jYXN0PGNoYXIqPihzKTsKKwljaGFyKiBvdXRidWYgPSAmYzE7CisJc2l6ZV90 IG4gPSBpY29udihjZCwgJmluYnVmLCAmaW5ieXRlc2xlZnQsICZvdXRidWYsICZvdXRieXRlc2xl ZnQpOworCWljb252X2Nsb3NlKGNkKTsKKwlpZiAobiAhPSAoc2l6ZV90KS0xKQorCSAgeworCSAg ICBjZCA9IGljb252X29wZW4oY29kZXNldCwgIkFTQ0lJIik7CisJICAgIGlmIChjZCAhPSAoaWNv bnZfdCktMSkKKwkgICAgICB7CisJCWNoYXIgYzI7CisJCWluYnVmID0gJmMxOworCQlpbmJ5dGVz bGVmdCA9IDE7CisJCW91dGJ1ZiA9ICZjMjsKKwkJb3V0Ynl0ZXNsZWZ0ID0gMTsKKwkJbiA9IGlj b252KGNkLCAmaW5idWYsICZpbmJ5dGVzbGVmdCwgJm91dGJ1ZiwgJm91dGJ5dGVzbGVmdCk7CisJ CWljb252X2Nsb3NlKGNkKTsKKwkJaWYgKG4gIT0gKHNpemVfdCktMSkKKwkJICByZXR1cm4gYzI7 CisJICAgICAgfQorCSAgfQorICAgICAgfQorICAgIHJldHVybiAnXDAnOworICB9CisjZW5kaWYK KworICB0ZW1wbGF0ZTw+CisgICAgdm9pZAorICAgIG51bXB1bmN0PGNoYXI+OjpfTV9pbml0aWFs aXplX251bXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKQorICAgIHsKKyAgICAgIGlmICghX01fZGF0 YSkKKwlfTV9kYXRhID0gbmV3IF9fbnVtcHVuY3RfY2FjaGU8Y2hhcj47CisKKyAgICAgIGlmICgh X19jbG9jKQorCXsKKwkgIC8vICJDIiBsb2NhbGUKKwkgIF9NX2RhdGEtPl9NX2dyb3VwaW5nID0g IiI7CisJICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKwkgIF9NX2RhdGEtPl9NX3Vz ZV9ncm91cGluZyA9IGZhbHNlOworCisJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50ID0gJy4n OworCSAgX01fZGF0YS0+X01fdGhvdXNhbmRzX3NlcCA9ICcsJzsKKworCSAgZm9yIChzaXplX3Qg X19pID0gMDsgX19pIDwgX19udW1fYmFzZTo6X1Nfb2VuZDsgKytfX2kpCisJICAgIF9NX2RhdGEt Pl9NX2F0b21zX291dFtfX2ldID0gX19udW1fYmFzZTo6X1NfYXRvbXNfb3V0W19faV07CisKKwkg IGZvciAoc2l6ZV90IF9faiA9IDA7IF9faiA8IF9fbnVtX2Jhc2U6Ol9TX2llbmQ7ICsrX19qKQor CSAgICBfTV9kYXRhLT5fTV9hdG9tc19pbltfX2pdID0gX19udW1fYmFzZTo6X1NfYXRvbXNfaW5b X19qXTsKKwl9CisgICAgICBlbHNlCisJeworCSAgLy8gTmFtZWQgbG9jYWxlLgorCSAgX19jX2xv Y2FsZSBfX29sZCA9IHVzZWxvY2FsZShfX2Nsb2MpOworCSAgdW5pb24geyBjaGFyICpfX3M7IHdj aGFyX3QgKl9fdzsgfSBfX3U7CisJICBfX3UuX19zID0gbmxfbGFuZ2luZm9fbChfTkxfTlVNRVJJ Q19ERUNJTUFMX1BPSU5UX1dDLCBfX2Nsb2MpOworCSAgX01fZGF0YS0+X01fZGVjaW1hbF9wb2lu dCA9IHdjdG9iKCpfX3UuX193KTsKKworCSAgX191Ll9fcyA9IG5sX2xhbmdpbmZvX2woX05MX05V TUVSSUNfVEhPVVNBTkRTX1NFUF9XQywgX19jbG9jKTsKKwkgIF9NX2RhdGEtPl9NX3Rob3VzYW5k c19zZXAgPSB3Y3RvYigqX191Ll9fdyk7CisJICB1c2Vsb2NhbGUoX19vbGQpOworCisJICAvLyBD aGVjayBmb3IgTlVMTCwgd2hpY2ggaW1wbGllcyBubyBncm91cGluZy4KKwkgIGlmIChfTV9kYXRh LT5fTV90aG91c2FuZHNfc2VwID09ICdcMCcpCisJICAgIHsKKwkgICAgICAvLyBMaWtlIGluICJD IiBsb2NhbGUuCisJICAgICAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKwkgICAgICBfTV9k YXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKwkgICAgICBfTV9kYXRhLT5fTV91c2VfZ3JvdXBp bmcgPSBmYWxzZTsKKwkgICAgICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0gJywnOworCSAg ICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICBjb25zdCBjaGFyKiBfX3NyYyA9IG5sX2xhbmdp bmZvX2woX05MX05VTUVSSUNfR1JPVVBJTkcsIF9fY2xvYyk7CisJICAgICAgY29uc3Qgc2l6ZV90 IF9fbGVuID0gc3RybGVuKF9fc3JjKTsKKwkgICAgICBpZiAoX19sZW4pCisJCXsKKwkJICBfX3Ry eQorCQkgICAgeworCQkgICAgICBjaGFyKiBfX2RzdCA9IG5ldyBjaGFyW19fbGVuICsgMV07CisJ CSAgICAgIG1lbWNweShfX2RzdCwgX19zcmMsIF9fbGVuICsgMSk7CisJCSAgICAgIF9NX2RhdGEt Pl9NX2dyb3VwaW5nID0gX19kc3Q7CisJCSAgICB9CisJCSAgX19jYXRjaCguLi4pCisJCSAgICB7 CisJCSAgICAgIGRlbGV0ZSBfTV9kYXRhOworCQkgICAgICBfTV9kYXRhID0gMDsKKwkJICAgICAg X190aHJvd19leGNlcHRpb25fYWdhaW47CisJCSAgICB9CisJCX0KKwkgICAgICBlbHNlCisJCXsK KwkJICBfTV9kYXRhLT5fTV9ncm91cGluZyA9ICIiOworCQkgIF9NX2RhdGEtPl9NX3VzZV9ncm91 cGluZyA9IGZhbHNlOworCQl9CisJICAgICAgX01fZGF0YS0+X01fZ3JvdXBpbmdfc2l6ZSA9IF9f bGVuOworCSAgICB9CisJfQorCisgICAgICAvLyBOQjogVGhlcmUgaXMgbm8gd2F5IHRvIGV4dGFj dCB0aGlzIGluZm8gZnJvbSBwb3NpeCBsb2NhbGVzLgorICAgICAgLy8gX01fdHJ1ZW5hbWUgPSBu bF9sYW5naW5mb19sKFlFU1NUUiwgX19jbG9jKTsKKyAgICAgIF9NX2RhdGEtPl9NX3RydWVuYW1l ID0gInRydWUiOworICAgICAgX01fZGF0YS0+X01fdHJ1ZW5hbWVfc2l6ZSA9IDQ7CisgICAgICAv LyBfTV9mYWxzZW5hbWUgPSBubF9sYW5naW5mb19sKE5PU1RSLCBfX2Nsb2MpOworICAgICAgX01f ZGF0YS0+X01fZmFsc2VuYW1lID0gImZhbHNlIjsKKyAgICAgIF9NX2RhdGEtPl9NX2ZhbHNlbmFt ZV9zaXplID0gNTsKKyAgICB9CisKKyAgdGVtcGxhdGU8PgorICAgIG51bXB1bmN0PGNoYXI+Ojp+ bnVtcHVuY3QoKQorICAgIHsKKyAgICAgIGlmIChfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplKQor CWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9ncm91cGluZzsKKyAgICAgIGRlbGV0ZSBfTV9kYXRhOwor ICAgIH0KKworI2lmZGVmIF9HTElCQ1hYX1VTRV9XQ0hBUl9UCisgIHRlbXBsYXRlPD4KKyAgICB2 b2lkCisgICAgbnVtcHVuY3Q8d2NoYXJfdD46Ol9NX2luaXRpYWxpemVfbnVtcHVuY3QoX19jX2xv Y2FsZSBfX2Nsb2MpCisgICAgeworICAgICAgaWYgKCFfTV9kYXRhKQorCV9NX2RhdGEgPSBuZXcg X19udW1wdW5jdF9jYWNoZTx3Y2hhcl90PjsKKworICAgICAgaWYgKCFfX2Nsb2MpCisJeworCSAg Ly8gIkMiIGxvY2FsZQorCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKwkgIF9NX2RhdGEt Pl9NX2dyb3VwaW5nX3NpemUgPSAwOworCSAgX01fZGF0YS0+X01fdXNlX2dyb3VwaW5nID0gZmFs c2U7CisKKwkgIF9NX2RhdGEtPl9NX2RlY2ltYWxfcG9pbnQgPSBMJy4nOworCSAgX01fZGF0YS0+ X01fdGhvdXNhbmRzX3NlcCA9IEwnLCc7CisKKwkgIC8vIFVzZSBjdHlwZTo6d2lkZW4gY29kZSB3 aXRob3V0IHRoZSBmYWNldC4uLgorCSAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19udW1f YmFzZTo6X1Nfb2VuZDsgKytfX2kpCisJICAgIF9NX2RhdGEtPl9NX2F0b21zX291dFtfX2ldID0K KwkgICAgICBzdGF0aWNfY2FzdDx3Y2hhcl90PihfX251bV9iYXNlOjpfU19hdG9tc19vdXRbX19p XSk7CisKKwkgIGZvciAoc2l6ZV90IF9faiA9IDA7IF9faiA8IF9fbnVtX2Jhc2U6Ol9TX2llbmQ7 ICsrX19qKQorCSAgICBfTV9kYXRhLT5fTV9hdG9tc19pbltfX2pdID0KKwkgICAgICBzdGF0aWNf Y2FzdDx3Y2hhcl90PihfX251bV9iYXNlOjpfU19hdG9tc19pbltfX2pdKTsKKwl9CisgICAgICBl bHNlCisJeworCSAgLy8gTmFtZWQgbG9jYWxlLgorCSAgLy8gTkI6IEluIHRoZSBHTlUgbW9kZWwg d2NoYXJfdCBpcyBhbHdheXMgMzIgYml0IHdpZGUuCisJICB1bmlvbiB7IGNoYXIgKl9fczsgd2No YXJfdCAqX193OyB9IF9fdTsKKwkgIF9fdS5fX3MgPSBubF9sYW5naW5mb19sKF9OTF9OVU1FUklD X0RFQ0lNQUxfUE9JTlRfV0MsIF9fY2xvYyk7CisJICBfTV9kYXRhLT5fTV9kZWNpbWFsX3BvaW50 ID0gKl9fdS5fX3c7CisKKwkgIF9fdS5fX3MgPSBubF9sYW5naW5mb19sKF9OTF9OVU1FUklDX1RI T1VTQU5EU19TRVBfV0MsIF9fY2xvYyk7CisJICBfTV9kYXRhLT5fTV90aG91c2FuZHNfc2VwID0g Kl9fdS5fX3c7CisKKwkgIC8vIENoZWNrIGZvciBOVUxMLCB3aGljaCBpbXBsaWVzIG5vIGdyb3Vw aW5nLgorCSAgaWYgKF9NX2RhdGEtPl9NX3Rob3VzYW5kc19zZXAgPT0gTCdcMCcpCisJICAgIHsK KwkgICAgICAvLyBMaWtlIGluICJDIiBsb2NhbGUuCisJICAgICAgX01fZGF0YS0+X01fZ3JvdXBp bmcgPSAiIjsKKwkgICAgICBfTV9kYXRhLT5fTV9ncm91cGluZ19zaXplID0gMDsKKwkgICAgICBf TV9kYXRhLT5fTV91c2VfZ3JvdXBpbmcgPSBmYWxzZTsKKwkgICAgICBfTV9kYXRhLT5fTV90aG91 c2FuZHNfc2VwID0gTCcsJzsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgY29uc3Qg Y2hhciogX19zcmMgPSBubF9sYW5naW5mb19sKF9OTF9OVU1FUklDX0dST1VQSU5HLCBfX2Nsb2Mp OworCSAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IHN0cmxlbihfX3NyYyk7CisJICAgICAgaWYg KF9fbGVuKQorCQl7CisJCSAgX190cnkKKwkJICAgIHsKKwkJICAgICAgY2hhciogX19kc3QgPSBu ZXcgY2hhcltfX2xlbiArIDFdOworCQkgICAgICBtZW1jcHkoX19kc3QsIF9fc3JjLCBfX2xlbiAr IDEpOworCQkgICAgICBfTV9kYXRhLT5fTV9ncm91cGluZyA9IF9fZHN0OworCQkgICAgfQorCQkg IF9fY2F0Y2goLi4uKQorCQkgICAgeworCQkgICAgICBkZWxldGUgX01fZGF0YTsKKwkJICAgICAg X01fZGF0YSA9IDA7CisJCSAgICAgIF9fdGhyb3dfZXhjZXB0aW9uX2FnYWluOworCQkgICAgfQor CQl9CisJICAgICAgZWxzZQorCQl7CisJCSAgX01fZGF0YS0+X01fZ3JvdXBpbmcgPSAiIjsKKwkJ ICBfTV9kYXRhLT5fTV91c2VfZ3JvdXBpbmcgPSBmYWxzZTsKKwkJfQorCSAgICAgIF9NX2RhdGEt Pl9NX2dyb3VwaW5nX3NpemUgPSBfX2xlbjsKKwkgICAgfQorCX0KKworICAgICAgLy8gTkI6IFRo ZXJlIGlzIG5vIHdheSB0byBleHRhY3QgdGhpcyBpbmZvIGZyb20gcG9zaXggbG9jYWxlcy4KKyAg ICAgIC8vIF9NX3RydWVuYW1lID0gbmxfbGFuZ2luZm9fbChZRVNTVFIsIF9fY2xvYyk7CisgICAg ICBfTV9kYXRhLT5fTV90cnVlbmFtZSA9IEwidHJ1ZSI7CisgICAgICBfTV9kYXRhLT5fTV90cnVl bmFtZV9zaXplID0gNDsKKyAgICAgIC8vIF9NX2ZhbHNlbmFtZSA9IG5sX2xhbmdpbmZvX2woTk9T VFIsIF9fY2xvYyk7CisgICAgICBfTV9kYXRhLT5fTV9mYWxzZW5hbWUgPSBMImZhbHNlIjsKKyAg ICAgIF9NX2RhdGEtPl9NX2ZhbHNlbmFtZV9zaXplID0gNTsKKyAgICB9CisKKyAgdGVtcGxhdGU8 PgorICAgIG51bXB1bmN0PHdjaGFyX3Q+Ojp+bnVtcHVuY3QoKQorICAgIHsKKyAgICAgIGlmIChf TV9kYXRhLT5fTV9ncm91cGluZ19zaXplKQorCWRlbGV0ZSBbXSBfTV9kYXRhLT5fTV9ncm91cGlu ZzsKKyAgICAgIGRlbGV0ZSBfTV9kYXRhOworICAgIH0KKyNlbmRpZgorCitfR0xJQkNYWF9FTkRf TkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9saWJzdGRjKyst djMvY29uZmlnL2xvY2FsZS9uZXdsaWIvdGltZV9tZW1iZXJzLmNjIGIvbGlic3RkYysrLXYzL2Nv bmZpZy9sb2NhbGUvbmV3bGliL3RpbWVfbWVtYmVycy5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMC4uMTkwZWY0ODBlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzdGRj KystdjMvY29uZmlnL2xvY2FsZS9uZXdsaWIvdGltZV9tZW1iZXJzLmNjCkBAIC0wLDAgKzEsMzgx IEBACisvLyBzdGQ6OnRpbWVfZ2V0LCBzdGQ6OnRpbWVfcHV0IGltcGxlbWVudGF0aW9uLCBuZXds aWIgdmVyc2lvbiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAyMyBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0 aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8v IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg dGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChh dCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkg aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1 dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5 IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh aWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFu dGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRp bWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl ZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5 IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJv Z3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNw ZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+ LgorCisvLworLy8gSVNPIEMrKyAxNDg4MjogMjIuMi41LjEuMiAtIHRpbWVfZ2V0IHZpcnR1YWwg ZnVuY3Rpb25zCisvLyBJU08gQysrIDE0ODgyOiAyMi4yLjUuMy4yIC0gdGltZV9wdXQgdmlydHVh bCBmdW5jdGlvbnMKKy8vCisKKy8vIFdyaXR0ZW4gYnkgQmVuamFtaW4gS29zbmlrIDxia296QHJl ZGhhdC5jb20+CisvLyBNb2RpZmllZCBieSBUYWthc2hpIFlhbm8gPHRha2FzaGkueWFub0BuaWZ0 eS5uZS5qcD4KKworI2RlZmluZSBfR05VX1NPVVJDRSAxCisjaW5jbHVkZSA8bG9jYWxlPgorI2lu Y2x1ZGUgPGJpdHMvYysrbG9jYWxlX2ludGVybmFsLmg+CisKK25hbWVzcGFjZSBzdGQgX0dMSUJD WFhfVklTSUJJTElUWShkZWZhdWx0KQoreworX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJ T04KKworICB0ZW1wbGF0ZTw+CisgICAgdm9pZAorICAgIF9fdGltZXB1bmN0PGNoYXI+OjoKKyAg ICBfTV9wdXQoY2hhciogX19zLCBzaXplX3QgX19tYXhsZW4sIGNvbnN0IGNoYXIqIF9fZm9ybWF0 LAorCSAgIGNvbnN0IHRtKiBfX3RtKSBjb25zdCB0aHJvdygpCisgICAgeworICAgICAgY29uc3Qg c2l6ZV90IF9fbGVuID0gc3RyZnRpbWVfbChfX3MsIF9fbWF4bGVuLCBfX2Zvcm1hdCwgX190bSwK KwkJCQkJX01fY19sb2NhbGVfdGltZXB1bmN0KTsKKyAgICAgIC8vIE1ha2Ugc3VyZSBfX3MgaXMg bnVsbCB0ZXJtaW5hdGVkLgorICAgICAgaWYgKF9fbGVuID09IDApCisJX19zWzBdID0gJ1wwJzsK KyAgICB9CisKKyAgdGVtcGxhdGU8PgorICAgIHZvaWQKKyAgICBfX3RpbWVwdW5jdDxjaGFyPjo6 X01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpCisgICAgeworICAgICAg aWYgKCFfTV9kYXRhKQorCV9NX2RhdGEgPSBuZXcgX190aW1lcHVuY3RfY2FjaGU8Y2hhcj47CisK KyAgICAgIGlmICghX19jbG9jKQorCXsKKwkgIC8vICJDIiBsb2NhbGUKKwkgIF9NX2NfbG9jYWxl X3RpbWVwdW5jdCA9IF9TX2dldF9jX2xvY2FsZSgpOworCisJICBfTV9kYXRhLT5fTV9kYXRlX2Zv cm1hdCA9ICIlbS8lZC8leSI7CisJICBfTV9kYXRhLT5fTV9kYXRlX2VyYV9mb3JtYXQgPSAiJW0v JWQvJXkiOworCSAgX01fZGF0YS0+X01fdGltZV9mb3JtYXQgPSAiJUg6JU06JVMiOworCSAgX01f ZGF0YS0+X01fdGltZV9lcmFfZm9ybWF0ID0gIiVIOiVNOiVTIjsKKwkgIF9NX2RhdGEtPl9NX2Rh dGVfdGltZV9mb3JtYXQgPSAiIjsKKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9lcmFfZm9ybWF0 ID0gIiI7CisJICBfTV9kYXRhLT5fTV9hbSA9ICJBTSI7CisJICBfTV9kYXRhLT5fTV9wbSA9ICJQ TSI7CisJICBfTV9kYXRhLT5fTV9hbV9wbV9mb3JtYXQgPSAiJUk6JU06JVMgJXAiOworCisJICAv LyBEYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuZGF5LgorCSAgX01fZGF0YS0+X01f ZGF5MSA9ICJTdW5kYXkiOworCSAgX01fZGF0YS0+X01fZGF5MiA9ICJNb25kYXkiOworCSAgX01f ZGF0YS0+X01fZGF5MyA9ICJUdWVzZGF5IjsKKwkgIF9NX2RhdGEtPl9NX2RheTQgPSAiV2VkbmVz ZGF5IjsKKwkgIF9NX2RhdGEtPl9NX2RheTUgPSAiVGh1cnNkYXkiOworCSAgX01fZGF0YS0+X01f ZGF5NiA9ICJGcmlkYXkiOworCSAgX01fZGF0YS0+X01fZGF5NyA9ICJTYXR1cmRheSI7CisKKwkg IC8vIEFiYnJldmlhdGVkIGRheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW4uCisJICBf TV9kYXRhLT5fTV9hZGF5MSA9ICJTdW4iOworCSAgX01fZGF0YS0+X01fYWRheTIgPSAiTW9uIjsK KwkgIF9NX2RhdGEtPl9NX2FkYXkzID0gIlR1ZSI7CisJICBfTV9kYXRhLT5fTV9hZGF5NCA9ICJX ZWQiOworCSAgX01fZGF0YS0+X01fYWRheTUgPSAiVGh1IjsKKwkgIF9NX2RhdGEtPl9NX2FkYXk2 ID0gIkZyaSI7CisJICBfTV9kYXRhLT5fTV9hZGF5NyA9ICJTYXQiOworCisJICAvLyBNb250aCBu YW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW51YXJ5LgorCSAgX01fZGF0YS0+X01fbW9udGgw MSA9ICJKYW51YXJ5IjsKKwkgIF9NX2RhdGEtPl9NX21vbnRoMDIgPSAiRmVicnVhcnkiOworCSAg X01fZGF0YS0+X01fbW9udGgwMyA9ICJNYXJjaCI7CisJICBfTV9kYXRhLT5fTV9tb250aDA0ID0g IkFwcmlsIjsKKwkgIF9NX2RhdGEtPl9NX21vbnRoMDUgPSAiTWF5IjsKKwkgIF9NX2RhdGEtPl9N X21vbnRoMDYgPSAiSnVuZSI7CisJICBfTV9kYXRhLT5fTV9tb250aDA3ID0gIkp1bHkiOworCSAg X01fZGF0YS0+X01fbW9udGgwOCA9ICJBdWd1c3QiOworCSAgX01fZGF0YS0+X01fbW9udGgwOSA9 ICJTZXB0ZW1iZXIiOworCSAgX01fZGF0YS0+X01fbW9udGgxMCA9ICJPY3RvYmVyIjsKKwkgIF9N X2RhdGEtPl9NX21vbnRoMTEgPSAiTm92ZW1iZXIiOworCSAgX01fZGF0YS0+X01fbW9udGgxMiA9 ICJEZWNlbWJlciI7CisKKwkgIC8vIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzLCBzdGFydGluZyB3 aXRoICJDIidzIEphbi4KKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAxID0gIkphbiI7CisJICBfTV9k YXRhLT5fTV9hbW9udGgwMiA9ICJGZWIiOworCSAgX01fZGF0YS0+X01fYW1vbnRoMDMgPSAiTWFy IjsKKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA0ID0gIkFwciI7CisJICBfTV9kYXRhLT5fTV9hbW9u dGgwNSA9ICJNYXkiOworCSAgX01fZGF0YS0+X01fYW1vbnRoMDYgPSAiSnVuIjsKKwkgIF9NX2Rh dGEtPl9NX2Ftb250aDA3ID0gIkp1bCI7CisJICBfTV9kYXRhLT5fTV9hbW9udGgwOCA9ICJBdWci OworCSAgX01fZGF0YS0+X01fYW1vbnRoMDkgPSAiU2VwIjsKKwkgIF9NX2RhdGEtPl9NX2Ftb250 aDEwID0gIk9jdCI7CisJICBfTV9kYXRhLT5fTV9hbW9udGgxMSA9ICJOb3YiOworCSAgX01fZGF0 YS0+X01fYW1vbnRoMTIgPSAiRGVjIjsKKwl9CisgICAgICBlbHNlCisJeworCSAgX01fY19sb2Nh bGVfdGltZXB1bmN0ID0gX1NfY2xvbmVfY19sb2NhbGUoX19jbG9jKTsKKwkgIF9fY2xvYyA9IF9N X2NfbG9jYWxlX3RpbWVwdW5jdDsKKworCSAgX01fZGF0YS0+X01fZGF0ZV9mb3JtYXQgPSBubF9s YW5naW5mb19sKERfRk1ULCBfX2Nsb2MpOworCSAgX01fZGF0YS0+X01fZGF0ZV9lcmFfZm9ybWF0 ID0gbmxfbGFuZ2luZm9fbChFUkFfRF9GTVQsIF9fY2xvYyk7CisJICBfTV9kYXRhLT5fTV90aW1l X2Zvcm1hdCA9IG5sX2xhbmdpbmZvX2woVF9GTVQsIF9fY2xvYyk7CisJICBfTV9kYXRhLT5fTV90 aW1lX2VyYV9mb3JtYXQgPSBubF9sYW5naW5mb19sKEVSQV9UX0ZNVCwgX19jbG9jKTsKKwkgIF9N X2RhdGEtPl9NX2RhdGVfdGltZV9mb3JtYXQgPSBubF9sYW5naW5mb19sKERfVF9GTVQsIF9fY2xv Yyk7CisJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZXJhX2Zvcm1hdCA9IG5sX2xhbmdpbmZvX2wo RVJBX0RfVF9GTVQsIF9fY2xvYyk7CisJICBfTV9kYXRhLT5fTV9hbSA9IG5sX2xhbmdpbmZvX2wo QU1fU1RSLCBfX2Nsb2MpOworCSAgX01fZGF0YS0+X01fcG0gPSBubF9sYW5naW5mb19sKFBNX1NU UiwgX19jbG9jKTsKKwkgIF9NX2RhdGEtPl9NX2FtX3BtX2Zvcm1hdCA9IG5sX2xhbmdpbmZvX2wo VF9GTVRfQU1QTSwgX19jbG9jKTsKKworCSAgLy8gRGF5IG5hbWVzLCBzdGFydGluZyB3aXRoICJD IidzIFN1bmRheS4KKwkgIF9NX2RhdGEtPl9NX2RheTEgPSBubF9sYW5naW5mb19sKERBWV8xLCBf X2Nsb2MpOworCSAgX01fZGF0YS0+X01fZGF5MiA9IG5sX2xhbmdpbmZvX2woREFZXzIsIF9fY2xv Yyk7CisJICBfTV9kYXRhLT5fTV9kYXkzID0gbmxfbGFuZ2luZm9fbChEQVlfMywgX19jbG9jKTsK KwkgIF9NX2RhdGEtPl9NX2RheTQgPSBubF9sYW5naW5mb19sKERBWV80LCBfX2Nsb2MpOworCSAg X01fZGF0YS0+X01fZGF5NSA9IG5sX2xhbmdpbmZvX2woREFZXzUsIF9fY2xvYyk7CisJICBfTV9k YXRhLT5fTV9kYXk2ID0gbmxfbGFuZ2luZm9fbChEQVlfNiwgX19jbG9jKTsKKwkgIF9NX2RhdGEt Pl9NX2RheTcgPSBubF9sYW5naW5mb19sKERBWV83LCBfX2Nsb2MpOworCisJICAvLyBBYmJyZXZp YXRlZCBkYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuLgorCSAgX01fZGF0YS0+X01f YWRheTEgPSBubF9sYW5naW5mb19sKEFCREFZXzEsIF9fY2xvYyk7CisJICBfTV9kYXRhLT5fTV9h ZGF5MiA9IG5sX2xhbmdpbmZvX2woQUJEQVlfMiwgX19jbG9jKTsKKwkgIF9NX2RhdGEtPl9NX2Fk YXkzID0gbmxfbGFuZ2luZm9fbChBQkRBWV8zLCBfX2Nsb2MpOworCSAgX01fZGF0YS0+X01fYWRh eTQgPSBubF9sYW5naW5mb19sKEFCREFZXzQsIF9fY2xvYyk7CisJICBfTV9kYXRhLT5fTV9hZGF5 NSA9IG5sX2xhbmdpbmZvX2woQUJEQVlfNSwgX19jbG9jKTsKKwkgIF9NX2RhdGEtPl9NX2FkYXk2 ID0gbmxfbGFuZ2luZm9fbChBQkRBWV82LCBfX2Nsb2MpOworCSAgX01fZGF0YS0+X01fYWRheTcg PSBubF9sYW5naW5mb19sKEFCREFZXzcsIF9fY2xvYyk7CisKKwkgIC8vIE1vbnRoIG5hbWVzLCBz dGFydGluZyB3aXRoICJDIidzIEphbnVhcnkuCisJICBfTV9kYXRhLT5fTV9tb250aDAxID0gbmxf bGFuZ2luZm9fbChNT05fMSwgX19jbG9jKTsKKwkgIF9NX2RhdGEtPl9NX21vbnRoMDIgPSBubF9s YW5naW5mb19sKE1PTl8yLCBfX2Nsb2MpOworCSAgX01fZGF0YS0+X01fbW9udGgwMyA9IG5sX2xh bmdpbmZvX2woTU9OXzMsIF9fY2xvYyk7CisJICBfTV9kYXRhLT5fTV9tb250aDA0ID0gbmxfbGFu Z2luZm9fbChNT05fNCwgX19jbG9jKTsKKwkgIF9NX2RhdGEtPl9NX21vbnRoMDUgPSBubF9sYW5n aW5mb19sKE1PTl81LCBfX2Nsb2MpOworCSAgX01fZGF0YS0+X01fbW9udGgwNiA9IG5sX2xhbmdp bmZvX2woTU9OXzYsIF9fY2xvYyk7CisJICBfTV9kYXRhLT5fTV9tb250aDA3ID0gbmxfbGFuZ2lu Zm9fbChNT05fNywgX19jbG9jKTsKKwkgIF9NX2RhdGEtPl9NX21vbnRoMDggPSBubF9sYW5naW5m b19sKE1PTl84LCBfX2Nsb2MpOworCSAgX01fZGF0YS0+X01fbW9udGgwOSA9IG5sX2xhbmdpbmZv X2woTU9OXzksIF9fY2xvYyk7CisJICBfTV9kYXRhLT5fTV9tb250aDEwID0gbmxfbGFuZ2luZm9f bChNT05fMTAsIF9fY2xvYyk7CisJICBfTV9kYXRhLT5fTV9tb250aDExID0gbmxfbGFuZ2luZm9f bChNT05fMTEsIF9fY2xvYyk7CisJICBfTV9kYXRhLT5fTV9tb250aDEyID0gbmxfbGFuZ2luZm9f bChNT05fMTIsIF9fY2xvYyk7CisKKwkgIC8vIEFiYnJldmlhdGVkIG1vbnRoIG5hbWVzLCBzdGFy dGluZyB3aXRoICJDIidzIEphbi4KKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAxID0gbmxfbGFuZ2lu Zm9fbChBQk1PTl8xLCBfX2Nsb2MpOworCSAgX01fZGF0YS0+X01fYW1vbnRoMDIgPSBubF9sYW5n aW5mb19sKEFCTU9OXzIsIF9fY2xvYyk7CisJICBfTV9kYXRhLT5fTV9hbW9udGgwMyA9IG5sX2xh bmdpbmZvX2woQUJNT05fMywgX19jbG9jKTsKKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA0ID0gbmxf bGFuZ2luZm9fbChBQk1PTl80LCBfX2Nsb2MpOworCSAgX01fZGF0YS0+X01fYW1vbnRoMDUgPSBu bF9sYW5naW5mb19sKEFCTU9OXzUsIF9fY2xvYyk7CisJICBfTV9kYXRhLT5fTV9hbW9udGgwNiA9 IG5sX2xhbmdpbmZvX2woQUJNT05fNiwgX19jbG9jKTsKKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA3 ID0gbmxfbGFuZ2luZm9fbChBQk1PTl83LCBfX2Nsb2MpOworCSAgX01fZGF0YS0+X01fYW1vbnRo MDggPSBubF9sYW5naW5mb19sKEFCTU9OXzgsIF9fY2xvYyk7CisJICBfTV9kYXRhLT5fTV9hbW9u dGgwOSA9IG5sX2xhbmdpbmZvX2woQUJNT05fOSwgX19jbG9jKTsKKwkgIF9NX2RhdGEtPl9NX2Ft b250aDEwID0gbmxfbGFuZ2luZm9fbChBQk1PTl8xMCwgX19jbG9jKTsKKwkgIF9NX2RhdGEtPl9N X2Ftb250aDExID0gbmxfbGFuZ2luZm9fbChBQk1PTl8xMSwgX19jbG9jKTsKKwkgIF9NX2RhdGEt Pl9NX2Ftb250aDEyID0gbmxfbGFuZ2luZm9fbChBQk1PTl8xMiwgX19jbG9jKTsKKwl9CisgICAg fQorCisjaWZkZWYgX0dMSUJDWFhfVVNFX1dDSEFSX1QKKyAgdGVtcGxhdGU8PgorICAgIHZvaWQK KyAgICBfX3RpbWVwdW5jdDx3Y2hhcl90Pjo6CisgICAgX01fcHV0KHdjaGFyX3QqIF9fcywgc2l6 ZV90IF9fbWF4bGVuLCBjb25zdCB3Y2hhcl90KiBfX2Zvcm1hdCwKKwkgICBjb25zdCB0bSogX190 bSkgY29uc3QgdGhyb3coKQorICAgIHsKKyAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IHdjc2Z0 aW1lX2woX19zLCBfX21heGxlbiwgX19mb3JtYXQsIF9fdG0sCisJCQkJCV9NX2NfbG9jYWxlX3Rp bWVwdW5jdCk7CisgICAgICAvLyBNYWtlIHN1cmUgX19zIGlzIG51bGwgdGVybWluYXRlZC4KKyAg ICAgIGlmIChfX2xlbiA9PSAwKQorCV9fc1swXSA9IEwnXDAnOworICAgIH0KKworICB0ZW1wbGF0 ZTw+CisgICAgdm9pZAorICAgIF9fdGltZXB1bmN0PHdjaGFyX3Q+OjpfTV9pbml0aWFsaXplX3Rp bWVwdW5jdChfX2NfbG9jYWxlIF9fY2xvYykKKyAgICB7CisgICAgICBpZiAoIV9NX2RhdGEpCisJ X01fZGF0YSA9IG5ldyBfX3RpbWVwdW5jdF9jYWNoZTx3Y2hhcl90PjsKKworICAgICAgaWYgKCFf X2Nsb2MpCisJeworCSAgLy8gIkMiIGxvY2FsZQorCSAgX01fY19sb2NhbGVfdGltZXB1bmN0ID0g X1NfZ2V0X2NfbG9jYWxlKCk7CisKKwkgIF9NX2RhdGEtPl9NX2RhdGVfZm9ybWF0ID0gTCIlbS8l ZC8leSI7CisJICBfTV9kYXRhLT5fTV9kYXRlX2VyYV9mb3JtYXQgPSBMIiVtLyVkLyV5IjsKKwkg IF9NX2RhdGEtPl9NX3RpbWVfZm9ybWF0ID0gTCIlSDolTTolUyI7CisJICBfTV9kYXRhLT5fTV90 aW1lX2VyYV9mb3JtYXQgPSBMIiVIOiVNOiVTIjsKKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9m b3JtYXQgPSBMIiI7CisJICBfTV9kYXRhLT5fTV9kYXRlX3RpbWVfZXJhX2Zvcm1hdCA9IEwiIjsK KwkgIF9NX2RhdGEtPl9NX2FtID0gTCJBTSI7CisJICBfTV9kYXRhLT5fTV9wbSA9IEwiUE0iOwor CSAgX01fZGF0YS0+X01fYW1fcG1fZm9ybWF0ID0gTCIlSTolTTolUyAlcCI7CisKKwkgIC8vIERh eSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW5kYXkuCisJICBfTV9kYXRhLT5fTV9kYXkx ID0gTCJTdW5kYXkiOworCSAgX01fZGF0YS0+X01fZGF5MiA9IEwiTW9uZGF5IjsKKwkgIF9NX2Rh dGEtPl9NX2RheTMgPSBMIlR1ZXNkYXkiOworCSAgX01fZGF0YS0+X01fZGF5NCA9IEwiV2VkbmVz ZGF5IjsKKwkgIF9NX2RhdGEtPl9NX2RheTUgPSBMIlRodXJzZGF5IjsKKwkgIF9NX2RhdGEtPl9N X2RheTYgPSBMIkZyaWRheSI7CisJICBfTV9kYXRhLT5fTV9kYXk3ID0gTCJTYXR1cmRheSI7CisK KwkgIC8vIEFiYnJldmlhdGVkIGRheSBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBTdW4uCisJ ICBfTV9kYXRhLT5fTV9hZGF5MSA9IEwiU3VuIjsKKwkgIF9NX2RhdGEtPl9NX2FkYXkyID0gTCJN b24iOworCSAgX01fZGF0YS0+X01fYWRheTMgPSBMIlR1ZSI7CisJICBfTV9kYXRhLT5fTV9hZGF5 NCA9IEwiV2VkIjsKKwkgIF9NX2RhdGEtPl9NX2FkYXk1ID0gTCJUaHUiOworCSAgX01fZGF0YS0+ X01fYWRheTYgPSBMIkZyaSI7CisJICBfTV9kYXRhLT5fTV9hZGF5NyA9IEwiU2F0IjsKKworCSAg Ly8gTW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFudWFyeS4KKwkgIF9NX2RhdGEt Pl9NX21vbnRoMDEgPSBMIkphbnVhcnkiOworCSAgX01fZGF0YS0+X01fbW9udGgwMiA9IEwiRmVi cnVhcnkiOworCSAgX01fZGF0YS0+X01fbW9udGgwMyA9IEwiTWFyY2giOworCSAgX01fZGF0YS0+ X01fbW9udGgwNCA9IEwiQXByaWwiOworCSAgX01fZGF0YS0+X01fbW9udGgwNSA9IEwiTWF5IjsK KwkgIF9NX2RhdGEtPl9NX21vbnRoMDYgPSBMIkp1bmUiOworCSAgX01fZGF0YS0+X01fbW9udGgw NyA9IEwiSnVseSI7CisJICBfTV9kYXRhLT5fTV9tb250aDA4ID0gTCJBdWd1c3QiOworCSAgX01f ZGF0YS0+X01fbW9udGgwOSA9IEwiU2VwdGVtYmVyIjsKKwkgIF9NX2RhdGEtPl9NX21vbnRoMTAg PSBMIk9jdG9iZXIiOworCSAgX01fZGF0YS0+X01fbW9udGgxMSA9IEwiTm92ZW1iZXIiOworCSAg X01fZGF0YS0+X01fbW9udGgxMiA9IEwiRGVjZW1iZXIiOworCisJICAvLyBBYmJyZXZpYXRlZCBt b250aCBuYW1lcywgc3RhcnRpbmcgd2l0aCAiQyIncyBKYW4uCisJICBfTV9kYXRhLT5fTV9hbW9u dGgwMSA9IEwiSmFuIjsKKwkgIF9NX2RhdGEtPl9NX2Ftb250aDAyID0gTCJGZWIiOworCSAgX01f ZGF0YS0+X01fYW1vbnRoMDMgPSBMIk1hciI7CisJICBfTV9kYXRhLT5fTV9hbW9udGgwNCA9IEwi QXByIjsKKwkgIF9NX2RhdGEtPl9NX2Ftb250aDA1ID0gTCJNYXkiOworCSAgX01fZGF0YS0+X01f YW1vbnRoMDYgPSBMIkp1biI7CisJICBfTV9kYXRhLT5fTV9hbW9udGgwNyA9IEwiSnVsIjsKKwkg IF9NX2RhdGEtPl9NX2Ftb250aDA4ID0gTCJBdWciOworCSAgX01fZGF0YS0+X01fYW1vbnRoMDkg PSBMIlNlcCI7CisJICBfTV9kYXRhLT5fTV9hbW9udGgxMCA9IEwiT2N0IjsKKwkgIF9NX2RhdGEt Pl9NX2Ftb250aDExID0gTCJOb3YiOworCSAgX01fZGF0YS0+X01fYW1vbnRoMTIgPSBMIkRlYyI7 CisJfQorICAgICAgZWxzZQorCXsKKwkgIF9NX2NfbG9jYWxlX3RpbWVwdW5jdCA9IF9TX2Nsb25l X2NfbG9jYWxlKF9fY2xvYyk7CisJICBfX2Nsb2MgPSBfTV9jX2xvY2FsZV90aW1lcHVuY3Q7CisK KwkgIHVuaW9uIHsgY2hhciAqX19zOyB3Y2hhcl90ICpfX3c7IH0gX191OworCisJICBfX3UuX19z ID0gbmxfbGFuZ2luZm9fbChfTkxfVElNRV9XRF9GTVQsIF9fY2xvYyk7CisJICBfTV9kYXRhLT5f TV9kYXRlX2Zvcm1hdCA9IF9fdS5fX3c7CisJICBfX3UuX19zID0gbmxfbGFuZ2luZm9fbChfTkxf VElNRV9XRVJBX0RfRk1ULCBfX2Nsb2MpOworCSAgX01fZGF0YS0+X01fZGF0ZV9lcmFfZm9ybWF0 ID0gX191Ll9fdzsKKwkgIF9fdS5fX3MgPSBubF9sYW5naW5mb19sKF9OTF9USU1FX1dUX0ZNVCwg X19jbG9jKTsKKwkgIF9NX2RhdGEtPl9NX3RpbWVfZm9ybWF0ID0gX191Ll9fdzsKKwkgIF9fdS5f X3MgPSBubF9sYW5naW5mb19sKF9OTF9USU1FX1dFUkFfVF9GTVQsIF9fY2xvYyk7CisJICBfTV9k YXRhLT5fTV90aW1lX2VyYV9mb3JtYXQgPSBfX3UuX193OworCSAgX191Ll9fcyA9IG5sX2xhbmdp bmZvX2woX05MX1RJTUVfV0RfVF9GTVQsIF9fY2xvYyk7CisJICBfTV9kYXRhLT5fTV9kYXRlX3Rp bWVfZm9ybWF0ID0gX191Ll9fdzsKKwkgIF9fdS5fX3MgPSBubF9sYW5naW5mb19sKF9OTF9USU1F X1dFUkFfRF9UX0ZNVCwgX19jbG9jKTsKKwkgIF9NX2RhdGEtPl9NX2RhdGVfdGltZV9lcmFfZm9y bWF0ID0gX191Ll9fdzsKKwkgIF9fdS5fX3MgPSBubF9sYW5naW5mb19sKF9OTF9USU1FX1dBTV9T VFIsIF9fY2xvYyk7CisJICBfTV9kYXRhLT5fTV9hbSA9IF9fdS5fX3c7CisJICBfX3UuX19zID0g bmxfbGFuZ2luZm9fbChfTkxfVElNRV9XUE1fU1RSLCBfX2Nsb2MpOworCSAgX01fZGF0YS0+X01f cG0gPSBfX3UuX193OworCSAgX191Ll9fcyA9IG5sX2xhbmdpbmZvX2woX05MX1RJTUVfV1RfRk1U X0FNUE0sIF9fY2xvYyk7CisJICBfTV9kYXRhLT5fTV9hbV9wbV9mb3JtYXQgPSBfX3UuX193Owor CisJICAvLyBEYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuZGF5LgorCSAgX191Ll9f cyA9IG5sX2xhbmdpbmZvX2woX05MX1RJTUVfV1dFRUtEQVlfMSwgX19jbG9jKTsKKwkgIF9NX2Rh dGEtPl9NX2RheTEgPSBfX3UuX193OworCSAgX191Ll9fcyA9IG5sX2xhbmdpbmZvX2woX05MX1RJ TUVfV1dFRUtEQVlfMiwgX19jbG9jKTsKKwkgIF9NX2RhdGEtPl9NX2RheTIgPSBfX3UuX193Owor CSAgX191Ll9fcyA9IG5sX2xhbmdpbmZvX2woX05MX1RJTUVfV1dFRUtEQVlfMywgX19jbG9jKTsK KwkgIF9NX2RhdGEtPl9NX2RheTMgPSBfX3UuX193OworCSAgX191Ll9fcyA9IG5sX2xhbmdpbmZv X2woX05MX1RJTUVfV1dFRUtEQVlfNCwgX19jbG9jKTsKKwkgIF9NX2RhdGEtPl9NX2RheTQgPSBf X3UuX193OworCSAgX191Ll9fcyA9IG5sX2xhbmdpbmZvX2woX05MX1RJTUVfV1dFRUtEQVlfNSwg X19jbG9jKTsKKwkgIF9NX2RhdGEtPl9NX2RheTUgPSBfX3UuX193OworCSAgX191Ll9fcyA9IG5s X2xhbmdpbmZvX2woX05MX1RJTUVfV1dFRUtEQVlfNiwgX19jbG9jKTsKKwkgIF9NX2RhdGEtPl9N X2RheTYgPSBfX3UuX193OworCSAgX191Ll9fcyA9IG5sX2xhbmdpbmZvX2woX05MX1RJTUVfV1dF RUtEQVlfNywgX19jbG9jKTsKKwkgIF9NX2RhdGEtPl9NX2RheTcgPSBfX3UuX193OworCisJICAv LyBBYmJyZXZpYXRlZCBkYXkgbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgU3VuLgorCSAgX191 Ll9fcyA9IG5sX2xhbmdpbmZvX2woX05MX1RJTUVfV1dEQVlfMSwgX19jbG9jKTsKKwkgIF9NX2Rh dGEtPl9NX2FkYXkxID0gX191Ll9fdzsKKwkgIF9fdS5fX3MgPSBubF9sYW5naW5mb19sKF9OTF9U SU1FX1dXREFZXzIsIF9fY2xvYyk7CisJICBfTV9kYXRhLT5fTV9hZGF5MiA9IF9fdS5fX3c7CisJ ICBfX3UuX19zID0gbmxfbGFuZ2luZm9fbChfTkxfVElNRV9XV0RBWV8zLCBfX2Nsb2MpOworCSAg X01fZGF0YS0+X01fYWRheTMgPSBfX3UuX193OworCSAgX191Ll9fcyA9IG5sX2xhbmdpbmZvX2wo X05MX1RJTUVfV1dEQVlfNCwgX19jbG9jKTsKKwkgIF9NX2RhdGEtPl9NX2FkYXk0ID0gX191Ll9f dzsKKwkgIF9fdS5fX3MgPSBubF9sYW5naW5mb19sKF9OTF9USU1FX1dXREFZXzUsIF9fY2xvYyk7 CisJICBfTV9kYXRhLT5fTV9hZGF5NSA9IF9fdS5fX3c7CisJICBfX3UuX19zID0gbmxfbGFuZ2lu Zm9fbChfTkxfVElNRV9XV0RBWV82LCBfX2Nsb2MpOworCSAgX01fZGF0YS0+X01fYWRheTYgPSBf X3UuX193OworCSAgX191Ll9fcyA9IG5sX2xhbmdpbmZvX2woX05MX1RJTUVfV1dEQVlfNywgX19j bG9jKTsKKwkgIF9NX2RhdGEtPl9NX2FkYXk3ID0gX191Ll9fdzsKKworCSAgLy8gTW9udGggbmFt ZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFudWFyeS4KKwkgIF9fdS5fX3MgPSBubF9sYW5naW5m b19sKF9OTF9USU1FX1dNT05USF8xLCBfX2Nsb2MpOworCSAgX01fZGF0YS0+X01fbW9udGgwMSA9 IF9fdS5fX3c7CisJICBfX3UuX19zID0gbmxfbGFuZ2luZm9fbChfTkxfVElNRV9XTU9OVEhfMiwg X19jbG9jKTsKKwkgIF9NX2RhdGEtPl9NX21vbnRoMDIgPSBfX3UuX193OworCSAgX191Ll9fcyA9 IG5sX2xhbmdpbmZvX2woX05MX1RJTUVfV01PTlRIXzMsIF9fY2xvYyk7CisJICBfTV9kYXRhLT5f TV9tb250aDAzID0gX191Ll9fdzsKKwkgIF9fdS5fX3MgPSBubF9sYW5naW5mb19sKF9OTF9USU1F X1dNT05USF80LCBfX2Nsb2MpOworCSAgX01fZGF0YS0+X01fbW9udGgwNCA9IF9fdS5fX3c7CisJ ICBfX3UuX19zID0gbmxfbGFuZ2luZm9fbChfTkxfVElNRV9XTU9OVEhfNSwgX19jbG9jKTsKKwkg IF9NX2RhdGEtPl9NX21vbnRoMDUgPSBfX3UuX193OworCSAgX191Ll9fcyA9IG5sX2xhbmdpbmZv X2woX05MX1RJTUVfV01PTlRIXzYsIF9fY2xvYyk7CisJICBfTV9kYXRhLT5fTV9tb250aDA2ID0g X191Ll9fdzsKKwkgIF9fdS5fX3MgPSBubF9sYW5naW5mb19sKF9OTF9USU1FX1dNT05USF83LCBf X2Nsb2MpOworCSAgX01fZGF0YS0+X01fbW9udGgwNyA9IF9fdS5fX3c7CisJICBfX3UuX19zID0g bmxfbGFuZ2luZm9fbChfTkxfVElNRV9XTU9OVEhfOCwgX19jbG9jKTsKKwkgIF9NX2RhdGEtPl9N X21vbnRoMDggPSBfX3UuX193OworCSAgX191Ll9fcyA9IG5sX2xhbmdpbmZvX2woX05MX1RJTUVf V01PTlRIXzksIF9fY2xvYyk7CisJICBfTV9kYXRhLT5fTV9tb250aDA5ID0gX191Ll9fdzsKKwkg IF9fdS5fX3MgPSBubF9sYW5naW5mb19sKF9OTF9USU1FX1dNT05USF8xMCwgX19jbG9jKTsKKwkg IF9NX2RhdGEtPl9NX21vbnRoMTAgPSBfX3UuX193OworCSAgX191Ll9fcyA9IG5sX2xhbmdpbmZv X2woX05MX1RJTUVfV01PTlRIXzExLCBfX2Nsb2MpOworCSAgX01fZGF0YS0+X01fbW9udGgxMSA9 IF9fdS5fX3c7CisJICBfX3UuX19zID0gbmxfbGFuZ2luZm9fbChfTkxfVElNRV9XTU9OVEhfMTIs IF9fY2xvYyk7CisJICBfTV9kYXRhLT5fTV9tb250aDEyID0gX191Ll9fdzsKKworCSAgLy8gQWJi cmV2aWF0ZWQgbW9udGggbmFtZXMsIHN0YXJ0aW5nIHdpdGggIkMiJ3MgSmFuLgorCSAgX191Ll9f cyA9IG5sX2xhbmdpbmZvX2woX05MX1RJTUVfV01PTl8xLCBfX2Nsb2MpOworCSAgX01fZGF0YS0+ X01fYW1vbnRoMDEgPSBfX3UuX193OworCSAgX191Ll9fcyA9IG5sX2xhbmdpbmZvX2woX05MX1RJ TUVfV01PTl8yLCBfX2Nsb2MpOworCSAgX01fZGF0YS0+X01fYW1vbnRoMDIgPSBfX3UuX193Owor CSAgX191Ll9fcyA9IG5sX2xhbmdpbmZvX2woX05MX1RJTUVfV01PTl8zLCBfX2Nsb2MpOworCSAg X01fZGF0YS0+X01fYW1vbnRoMDMgPSBfX3UuX193OworCSAgX191Ll9fcyA9IG5sX2xhbmdpbmZv X2woX05MX1RJTUVfV01PTl80LCBfX2Nsb2MpOworCSAgX01fZGF0YS0+X01fYW1vbnRoMDQgPSBf X3UuX193OworCSAgX191Ll9fcyA9IG5sX2xhbmdpbmZvX2woX05MX1RJTUVfV01PTl81LCBfX2Ns b2MpOworCSAgX01fZGF0YS0+X01fYW1vbnRoMDUgPSBfX3UuX193OworCSAgX191Ll9fcyA9IG5s X2xhbmdpbmZvX2woX05MX1RJTUVfV01PTl82LCBfX2Nsb2MpOworCSAgX01fZGF0YS0+X01fYW1v bnRoMDYgPSBfX3UuX193OworCSAgX191Ll9fcyA9IG5sX2xhbmdpbmZvX2woX05MX1RJTUVfV01P Tl83LCBfX2Nsb2MpOworCSAgX01fZGF0YS0+X01fYW1vbnRoMDcgPSBfX3UuX193OworCSAgX191 Ll9fcyA9IG5sX2xhbmdpbmZvX2woX05MX1RJTUVfV01PTl84LCBfX2Nsb2MpOworCSAgX01fZGF0 YS0+X01fYW1vbnRoMDggPSBfX3UuX193OworCSAgX191Ll9fcyA9IG5sX2xhbmdpbmZvX2woX05M X1RJTUVfV01PTl85LCBfX2Nsb2MpOworCSAgX01fZGF0YS0+X01fYW1vbnRoMDkgPSBfX3UuX193 OworCSAgX191Ll9fcyA9IG5sX2xhbmdpbmZvX2woX05MX1RJTUVfV01PTl8xMCwgX19jbG9jKTsK KwkgIF9NX2RhdGEtPl9NX2Ftb250aDEwID0gX191Ll9fdzsKKwkgIF9fdS5fX3MgPSBubF9sYW5n aW5mb19sKF9OTF9USU1FX1dNT05fMTEsIF9fY2xvYyk7CisJICBfTV9kYXRhLT5fTV9hbW9udGgx MSA9IF9fdS5fX3c7CisJICBfX3UuX19zID0gbmxfbGFuZ2luZm9fbChfTkxfVElNRV9XTU9OXzEy LCBfX2Nsb2MpOworCSAgX01fZGF0YS0+X01fYW1vbnRoMTIgPSBfX3UuX193OworCX0KKyAgICB9 CisjZW5kaWYKKworX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCit9IC8vIG5hbWVzcGFj ZQpkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvbmV3bGliL3RpbWVfbWVt YmVycy5oIGIvbGlic3RkYysrLXYzL2NvbmZpZy9sb2NhbGUvbmV3bGliL3RpbWVfbWVtYmVycy5o Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5iMGM3YzI5YmZkZQotLS0g L2Rldi9udWxsCisrKyBiL2xpYnN0ZGMrKy12My9jb25maWcvbG9jYWxlL25ld2xpYi90aW1lX21l bWJlcnMuaApAQCAtMCwwICsxLDkwIEBACisvLyBzdGQ6OnRpbWVfZ2V0LCBzdGQ6OnRpbWVfcHV0 IGltcGxlbWVudGF0aW9uLCBuZXdsaWIgdmVyc2lvbiAtKi0gQysrIC0qLQorCisvLyBDb3B5cmln aHQgKEMpIDIwMDEtMjAyMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBU aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFy eSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v ZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp dGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9u LgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2YgR1BMIHZl cnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8vIHBlcm1pc3Npb25zIGRlc2Ny aWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMu MSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlv dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlv biBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5k IENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93 d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgYml0cy90aW1lX21lbWJlcnMuaAor ICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIGxp YnJhcnkgaGVhZGVycy4KKyAqICBEbyBub3QgYXR0ZW1wdCB0byB1c2UgaXQgZGlyZWN0bHkuIEBo ZWFkZXJuYW1le2xvY2FsZX0KKyAqLworCisvLworLy8gSVNPIEMrKyAxNDg4MjogMjIuMi41LjEu MiAtIHRpbWVfZ2V0IGZ1bmN0aW9ucworLy8gSVNPIEMrKyAxNDg4MjogMjIuMi41LjMuMiAtIHRp bWVfcHV0IGZ1bmN0aW9ucworLy8KKworLy8gV3JpdHRlbiBieSBCZW5qYW1pbiBLb3NuaWsgPGJr b3pAcmVkaGF0LmNvbT4KKy8vIE1vZGlmaWVkIGJ5IFRha2FzaGkgWWFubyA8dGFrYXNoaS55YW5v QG5pZnR5Lm5lLmpwPgorCituYW1lc3BhY2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVs dCkKK3sKK19HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCisKKyAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJUPgorICAgIF9fdGltZXB1bmN0PF9DaGFyVD46Ol9fdGltZXB1bmN0KHNpemVf dCBfX3JlZnMpCisgICAgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKDApLCBfTV9jX2xvY2FsZV90 aW1lcHVuY3QoMCksCisgICAgICBfTV9uYW1lX3RpbWVwdW5jdChfU19nZXRfY19uYW1lKCkpCisg ICAgeyBfTV9pbml0aWFsaXplX3RpbWVwdW5jdCgpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJUPgorICAgIF9fdGltZXB1bmN0PF9DaGFyVD46Ol9fdGltZXB1bmN0KF9fY2FjaGVfdHlw ZSogX19jYWNoZSwgc2l6ZV90IF9fcmVmcykKKyAgICA6IGZhY2V0KF9fcmVmcyksIF9NX2RhdGEo X19jYWNoZSksIF9NX2NfbG9jYWxlX3RpbWVwdW5jdCgwKSwKKyAgICAgIF9NX25hbWVfdGltZXB1 bmN0KF9TX2dldF9jX25hbWUoKSkKKyAgICB7IF9NX2luaXRpYWxpemVfdGltZXB1bmN0KCk7IH0K KworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgX190aW1lcHVuY3Q8X0NoYXJUPjo6 X190aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywKKwkJCQkgICAg IHNpemVfdCBfX3JlZnMpCisgICAgOiBmYWNldChfX3JlZnMpLCBfTV9kYXRhKDApLCBfTV9jX2xv Y2FsZV90aW1lcHVuY3QoMCksCisgICAgICBfTV9uYW1lX3RpbWVwdW5jdCgwKQorICAgIHsKKyAg ICAgIGlmIChfX2J1aWx0aW5fc3RyY21wKF9fcywgX1NfZ2V0X2NfbmFtZSgpKSAhPSAwKQorCXsK KwkgIGNvbnN0IHNpemVfdCBfX2xlbiA9IF9fYnVpbHRpbl9zdHJsZW4oX19zKSArIDE7CisJICBj aGFyKiBfX3RtcCA9IG5ldyBjaGFyW19fbGVuXTsKKwkgIF9fYnVpbHRpbl9tZW1jcHkoX190bXAs IF9fcywgX19sZW4pOworCSAgX01fbmFtZV90aW1lcHVuY3QgPSBfX3RtcDsKKwl9CisgICAgICBl bHNlCisJX01fbmFtZV90aW1lcHVuY3QgPSBfU19nZXRfY19uYW1lKCk7CisKKyAgICAgIF9fdHJ5 CisJeyBfTV9pbml0aWFsaXplX3RpbWVwdW5jdChfX2Nsb2MpOyB9CisgICAgICBfX2NhdGNoKC4u LikKKwl7CisJICBpZiAoX01fbmFtZV90aW1lcHVuY3QgIT0gX1NfZ2V0X2NfbmFtZSgpKQorCSAg ICBkZWxldGUgW10gX01fbmFtZV90aW1lcHVuY3Q7CisJICBfX3Rocm93X2V4Y2VwdGlvbl9hZ2Fp bjsKKwl9CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICBfX3RpbWVw dW5jdDxfQ2hhclQ+Ojp+X190aW1lcHVuY3QoKQorICAgIHsKKyAgICAgIGlmIChfTV9uYW1lX3Rp bWVwdW5jdCAhPSBfU19nZXRfY19uYW1lKCkpCisJZGVsZXRlIFtdIF9NX25hbWVfdGltZXB1bmN0 OworICAgICAgZGVsZXRlIF9NX2RhdGE7CisgICAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2Nf bG9jYWxlX3RpbWVwdW5jdCk7CisgICAgfQorCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJ T04KK30gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvY29uZmlnL29zL25l d2xpYi9jdHlwZV9jb25maWd1cmVfY2hhci5jYyBiL2xpYnN0ZGMrKy12My9jb25maWcvb3MvbmV3 bGliL2N0eXBlX2NvbmZpZ3VyZV9jaGFyLmNjCmluZGV4IDJmMzcyN2U1MzA5Li5jZmFiNDEzZGQ3 OCAxMDA2NDQKLS0tIGEvbGlic3RkYysrLXYzL2NvbmZpZy9vcy9uZXdsaWIvY3R5cGVfY29uZmln dXJlX2NoYXIuY2MKKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZy9vcy9uZXdsaWIvY3R5cGVfY29u ZmlndXJlX2NoYXIuY2MKQEAgLTQyLDQyICs0MiwzOSBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BB Q0VfVkVSU0lPTgogICBjdHlwZTxjaGFyPjo6Y2xhc3NpY190YWJsZSgpIHRocm93KCkKICAgeyBy ZXR1cm4gX2N0eXBlXyArIDE7IH0KIAotICBjdHlwZTxjaGFyPjo6Y3R5cGUoX19jX2xvY2FsZSwg Y29uc3QgbWFzayogX190YWJsZSwgYm9vbCBfX2RlbCwKKyAgY3R5cGU8Y2hhcj46OmN0eXBlKF9f Y19sb2NhbGUgX19jbG9jLCBjb25zdCBtYXNrKiBfX3RhYmxlLCBib29sIF9fZGVsLAogCQkgICAg IHNpemVfdCBfX3JlZnMpCi0gIDogZmFjZXQoX19yZWZzKSwgX01fZGVsKF9fdGFibGUgIT0gMCAm JiBfX2RlbCksCisgIDogZmFjZXQoX19yZWZzKSwgX01fY19sb2NhbGVfY3R5cGUoX1NfY2xvbmVf Y19sb2NhbGUoX19jbG9jKSksCisgIF9NX2RlbChfX3RhYmxlICE9IDAgJiYgX19kZWwpLAogICBf TV90b3VwcGVyKE5VTEwpLCBfTV90b2xvd2VyKE5VTEwpLAotICBfTV90YWJsZShfX3RhYmxlID8g X190YWJsZSA6IGNsYXNzaWNfdGFibGUoKSkKKyAgX01fdGFibGUoX190YWJsZSA/IF9fdGFibGUg OiBjbGFzc2ljX3RhYmxlKCkpLAorICBfTV93aWRlbl9vaygwKSwgX01fbmFycm93X29rKDApCiAg IHsKICAgICBtZW1zZXQoX01fd2lkZW4sIDAsIHNpemVvZihfTV93aWRlbikpOwotICAgIF9NX3dp ZGVuX29rID0gMDsKICAgICBtZW1zZXQoX01fbmFycm93LCAwLCBzaXplb2YoX01fbmFycm93KSk7 Ci0gICAgX01fbmFycm93X29rID0gMDsKICAgfQogCiAgIGN0eXBlPGNoYXI+OjpjdHlwZShjb25z dCBtYXNrKiBfX3RhYmxlLCBib29sIF9fZGVsLCBzaXplX3QgX19yZWZzKQotICA6IGZhY2V0KF9f cmVmcyksIF9NX2RlbChfX3RhYmxlICE9IDAgJiYgX19kZWwpLAorICA6IGZhY2V0KF9fcmVmcyks IF9NX2NfbG9jYWxlX2N0eXBlKF9TX2dldF9jX2xvY2FsZSgpKSwKKyAgX01fZGVsKF9fdGFibGUg IT0gMCAmJiBfX2RlbCksCiAgIF9NX3RvdXBwZXIoTlVMTCksIF9NX3RvbG93ZXIoTlVMTCksCi0g IF9NX3RhYmxlKF9fdGFibGUgPyBfX3RhYmxlIDogY2xhc3NpY190YWJsZSgpKQorICBfTV90YWJs ZShfX3RhYmxlID8gX190YWJsZSA6IGNsYXNzaWNfdGFibGUoKSksCisgIF9NX3dpZGVuX29rKDAp LCBfTV9uYXJyb3dfb2soMCkKICAgewogICAgIG1lbXNldChfTV93aWRlbiwgMCwgc2l6ZW9mKF9N X3dpZGVuKSk7Ci0gICAgX01fd2lkZW5fb2sgPSAwOwogICAgIG1lbXNldChfTV9uYXJyb3csIDAs IHNpemVvZihfTV9uYXJyb3cpKTsKLSAgICBfTV9uYXJyb3dfb2sgPSAwOwogICB9CiAKICAgY2hh cgogICBjdHlwZTxjaGFyPjo6ZG9fdG91cHBlcihjaGFyIF9fYykgY29uc3QKLSAgewotICAgIGlu dCBfX3ggPSBfX2M7Ci0gICAgcmV0dXJuICh0aGlzLT5pcyhjdHlwZV9iYXNlOjpsb3dlciwgX19j KSA/IChfX3ggLSAnYScgKyAnQScpIDogX194KTsKLSAgfQorICB7IHJldHVybiA6OnRvdXBwZXIo KGludCkgX19jKTsgfQogCiAgIGNvbnN0IGNoYXIqCiAgIGN0eXBlPGNoYXI+Ojpkb190b3VwcGVy KGNoYXIqIF9fbG93LCBjb25zdCBjaGFyKiBfX2hpZ2gpIGNvbnN0CiAgIHsKICAgICB3aGlsZSAo X19sb3cgPCBfX2hpZ2gpCiAgICAgICB7Ci0JKl9fbG93ID0gdGhpcy0+ZG9fdG91cHBlcigqX19s b3cpOworCSpfX2xvdyA9IDo6dG91cHBlcigoaW50KSAqX19sb3cpOwogCSsrX19sb3c7CiAgICAg ICB9CiAgICAgcmV0dXJuIF9faGlnaDsKQEAgLTg1LDE3ICs4MiwxNCBAQCBfR0xJQkNYWF9CRUdJ Tl9OQU1FU1BBQ0VfVkVSU0lPTgogCiAgIGNoYXIKICAgY3R5cGU8Y2hhcj46OmRvX3RvbG93ZXIo Y2hhciBfX2MpIGNvbnN0Ci0gIHsKLSAgICBpbnQgX194ID0gX19jOwotICAgIHJldHVybiAodGhp cy0+aXMoY3R5cGVfYmFzZTo6dXBwZXIsIF9fYykgPyAoX194IC0gJ0EnICsgJ2EnKSA6IF9feCk7 Ci0gIH0KKyAgeyByZXR1cm4gOjp0b2xvd2VyKChpbnQpIF9fYyk7IH0KIAogICBjb25zdCBjaGFy KgogICBjdHlwZTxjaGFyPjo6ZG9fdG9sb3dlcihjaGFyKiBfX2xvdywgY29uc3QgY2hhciogX19o aWdoKSBjb25zdAogICB7CiAgICAgd2hpbGUgKF9fbG93IDwgX19oaWdoKQogICAgICAgewotCSpf X2xvdyA9IHRoaXMtPmRvX3RvbG93ZXIoKl9fbG93KTsKKwkqX19sb3cgPSA6OnRvbG93ZXIoKGlu dCkgKl9fbG93KTsKIAkrK19fbG93OwogICAgICAgfQogICAgIHJldHVybiBfX2hpZ2g7CmRpZmYg LS1naXQgYS9saWJzdGRjKystdjMvY29uZmlndXJlIGIvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQpp bmRleCA1Mzg4MmMzZjZiNi4uNjk2MTNmM2E2Y2EgMTAwNzU1Ci0tLSBhL2xpYnN0ZGMrKy12My9j b25maWd1cmUKKysrIGIvbGlic3RkYysrLXYzL2NvbmZpZ3VyZQpAQCAtNzIzLDYgKzcyMyw3IEBA IENYWEZJTFQKIExUTElCSUNPTlYKIExJQklDT05WCiBPUFRfTERGTEFHUworRVhUUkFfTElCUwog U0VDVElPTl9MREZMQUdTCiBHTElCQ1hYX0xJQlMKIEVOQUJMRV9WVEFCTEVfVkVSSUZZX0ZBTFNF CkBAIC0xNjUxNCw3ICsxNjUxNSw3IEBAIGZpCiAgICAgICBkcmFnb25mbHkqIHwgZnJlZWJzZCop CiAJZW5hYmxlX2Nsb2NhbGVfZmxhZz1kcmFnb25mbHkKIAk7OwotICAgICAgb3BlbmJzZCopCisg ICAgICBvcGVuYnNkKiB8IGN5Z3dpbiopCiAJZW5hYmxlX2Nsb2NhbGVfZmxhZz1uZXdsaWIKIAk7 OwogICAgICAgKikKQEAgLTE2NTI2LDYgKzE2NTI3LDEwIEBAIGZpCiAJOzsKICAgICBlc2FjCiAg IGZpCisgIGNhc2UgJHt0YXJnZXRfb3N9IGluIGN5Z3dpbiopCisgICAgRVhUUkFfTElCUz0iLWxp bnRsIgorICAgIDs7CisgIGVzYWMKIAogICAjIFNhbml0eSBjaGVjayBtb2RlbCwgYW5kIHRlc3Qg Zm9yIHNwZWNpYWwgZnVuY3Rpb25hbGl0eS4KICAgaWYgdGVzdCAkZW5hYmxlX2Nsb2NhbGVfZmxh ZyA9IGdudTsgdGhlbgpAQCAtMTY3ODUsMTkgKzE2NzkwLDU2IEBAICRhc19lY2hvICJJRUVFIDEw MDMuMSIgPiY2OyB9CiAgICAgbmV3bGliKQogICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNf bGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5ld2xpYiIgPiY1CiAkYXNfZWNobyAibmV3bGliIiA+ JjY7IH0KKyAgICAgIGZvciBhY19oZWFkZXIgaW4gbGliaW50bC5oCitkbyA6CisgIGFjX2ZuX2Nf Y2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJsaWJpbnRsLmgiICJhY19jdl9oZWFkZXJf bGliaW50bF9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRl cl9saWJpbnRsX2giID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YK KyNkZWZpbmUgSEFWRV9MSUJJTlRMX0ggMQorX0FDRU9GCisgYWNfaGFzX2xpYmludGxfaD15ZXMK K2Vsc2UKKyAgYWNfaGFzX2xpYmludGxfaD1ubworZmkKIAotICAgICAgQ0xPQ0FMRV9IPWNvbmZp Zy9sb2NhbGUvZ2VuZXJpYy9jX2xvY2FsZS5oCi0gICAgICBDTE9DQUxFX0NDPWNvbmZpZy9sb2Nh bGUvZ2VuZXJpYy9jX2xvY2FsZS5jYwotICAgICAgQ0NPREVDVlRfQ0M9Y29uZmlnL2xvY2FsZS9n ZW5lcmljL2NvZGVjdnRfbWVtYmVycy5jYwotICAgICAgQ0NPTExBVEVfQ0M9Y29uZmlnL2xvY2Fs ZS9nZW5lcmljL2NvbGxhdGVfbWVtYmVycy5jYworZG9uZQorCisgICAgICBmb3IgYWNfaGVhZGVy IGluIGljb252LmgKK2RvIDoKKyAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVO TyIgImljb252LmgiICJhY19jdl9oZWFkZXJfaWNvbnZfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0 IgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfaWNvbnZfaCIgPSB4eWVzOyB0aGVuIDoKKyAgY2F0 ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0lDT05WX0ggMQorX0FDRU9GCisg YWNfaGFzX2ljb252X2g9eWVzCitlbHNlCisgIGFjX2hhc19pY29udl9oPW5vCitmaQorCitkb25l CisKKworICAgICAgQ0xPQ0FMRV9IPWNvbmZpZy9sb2NhbGUvbmV3bGliL2NfbG9jYWxlLmgKKyAg ICAgIENMT0NBTEVfQ0M9Y29uZmlnL2xvY2FsZS9uZXdsaWIvY19sb2NhbGUuY2MKKyAgICAgIEND T0RFQ1ZUX0NDPWNvbmZpZy9sb2NhbGUvbmV3bGliL2NvZGVjdnRfbWVtYmVycy5jYworICAgICAg Q0NPTExBVEVfQ0M9Y29uZmlnL2xvY2FsZS9uZXdsaWIvY29sbGF0ZV9tZW1iZXJzLmNjCiAgICAg ICBDQ1RZUEVfQ0M9Y29uZmlnL2xvY2FsZS9uZXdsaWIvY3R5cGVfbWVtYmVycy5jYwotICAgICAg Q01FU1NBR0VTX0g9Y29uZmlnL2xvY2FsZS9nZW5lcmljL21lc3NhZ2VzX21lbWJlcnMuaAotICAg ICAgQ01FU1NBR0VTX0NDPWNvbmZpZy9sb2NhbGUvZ2VuZXJpYy9tZXNzYWdlc19tZW1iZXJzLmNj Ci0gICAgICBDTU9ORVlfQ0M9Y29uZmlnL2xvY2FsZS9nZW5lcmljL21vbmV0YXJ5X21lbWJlcnMu Y2MKLSAgICAgIENOVU1FUklDX0NDPWNvbmZpZy9sb2NhbGUvZ2VuZXJpYy9udW1lcmljX21lbWJl cnMuY2MKLSAgICAgIENUSU1FX0g9Y29uZmlnL2xvY2FsZS9nZW5lcmljL3RpbWVfbWVtYmVycy5o Ci0gICAgICBDVElNRV9DQz1jb25maWcvbG9jYWxlL2dlbmVyaWMvdGltZV9tZW1iZXJzLmNjCi0g ICAgICBDTE9DQUxFX0lOVEVSTkFMX0g9Y29uZmlnL2xvY2FsZS9nZW5lcmljL2MrK2xvY2FsZV9p bnRlcm5hbC5oCisgICAgICBpZiB0ZXN0ICRhY19oYXNfbGliaW50bF9oID0geWVzOyB0aGVuCisJ Q01FU1NBR0VTX0g9Y29uZmlnL2xvY2FsZS9uZXdsaWIvbWVzc2FnZXNfbWVtYmVycy5oCisJQ01F U1NBR0VTX0NDPWNvbmZpZy9sb2NhbGUvbmV3bGliL21lc3NhZ2VzX21lbWJlcnMuY2MKKyAgICAg IGVsc2UKKwlDTUVTU0FHRVNfSD1jb25maWcvbG9jYWxlL2dlbmVyaWMvbWVzc2FnZXNfbWVtYmVy cy5oCisJQ01FU1NBR0VTX0NDPWNvbmZpZy9sb2NhbGUvZ2VuZXJpYy9tZXNzYWdlc19tZW1iZXJz LmNjCisgICAgICBmaQorICAgICAgQ01PTkVZX0NDPWNvbmZpZy9sb2NhbGUvbmV3bGliL21vbmV0 YXJ5X21lbWJlcnMuY2MKKyAgICAgIGlmIHRlc3QgJGFjX2hhc19pY29udl9oID0geWVzOyB0aGVu CisJQ05VTUVSSUNfQ0M9Y29uZmlnL2xvY2FsZS9uZXdsaWIvbnVtZXJpY19tZW1iZXJzLmNjCisg ICAgICBlbHNlCisJQ05VTUVSSUNfQ0M9Y29uZmlnL2xvY2FsZS9nZW5lcmljL251bWVyaWNfbWVt YmVycy5jYworICAgICAgZmkKKyAgICAgIENUSU1FX0g9Y29uZmlnL2xvY2FsZS9uZXdsaWIvdGlt ZV9tZW1iZXJzLmgKKyAgICAgIENUSU1FX0NDPWNvbmZpZy9sb2NhbGUvbmV3bGliL3RpbWVfbWVt YmVycy5jYworICAgICAgQ0xPQ0FMRV9JTlRFUk5BTF9IPWNvbmZpZy9sb2NhbGUvbmV3bGliL2Mr K2xvY2FsZV9pbnRlcm5hbC5oCiAgICAgICA7OwogICBlc2FjCiAKZGlmZiAtLWdpdCBhL2xpYnN0 ZGMrKy12My9pbmNsdWRlL2JpdHMvbG9jYWxlX2ZhY2V0c19ub25pby50Y2MgYi9saWJzdGRjKyst djMvaW5jbHVkZS9iaXRzL2xvY2FsZV9mYWNldHNfbm9uaW8udGNjCmluZGV4IGIxOWY0NDI1MzAw Li44N2U3ZmFmNWFiOCAxMDA2NDQKLS0tIGEvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9sb2Nh bGVfZmFjZXRzX25vbmlvLnRjYworKysgYi9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2xvY2Fs ZV9mYWNldHNfbm9uaW8udGNjCkBAIC03OTUsNiArNzk1LDcgQEAgX0dMSUJDWFhfRU5EX05BTUVT UEFDRV9MREJMX09SX0NYWDExCiAJCSAgICB9CiAJCSAgYnJlYWs7CiAJCWNhc2UgJ0knOgorCQlj YXNlICdsJzogLy8gZm9yIG5ld2xpYgogCQkgIC8vIEhvdXIgWzAxLCAxMl0uIFt0bV9ob3VyXQog CQkgIF9fYmVnID0gX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX21lbSwgMSwgMTIsIDIs CiAJCQkJCSBfX2lvLCBfX3RtcGVycik7CmRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvc3JjL01h a2VmaWxlLmluIGIvbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5pbgppbmRleCBmNDJkOTU3YWYz Ni4uODU3YzVlZWExY2EgMTAwNjQ0Ci0tLSBhL2xpYnN0ZGMrKy12My9zcmMvTWFrZWZpbGUuaW4K KysrIGIvbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5pbgpAQCAtMzA3LDYgKzMwNyw3IEBAIEVS Uk9SX0NPTlNUQU5UU19TUkNESVIgPSBARVJST1JfQ09OU1RBTlRTX1NSQ0RJUkAKIEVYRUVYVCA9 IEBFWEVFWFRACiBFWFRSQV9DRkxBR1MgPSBARVhUUkFfQ0ZMQUdTQAogRVhUUkFfQ1hYX0ZMQUdT ID0gQEVYVFJBX0NYWF9GTEFHU0AKK0VYVFJBX0xJQlMgPSBARVhUUkFfTElCU0AKIEZHUkVQID0g QEZHUkVQQAogRk9STUFUX0ZJTEUgPSBARk9STUFUX0ZJTEVACiBGUkVFU1RBTkRJTkdfRkxBR1Mg PSBARlJFRVNUQU5ESU5HX0ZMQUdTQApAQCAtNTYxLDcgKzU2Miw3IEBAIGxpYnN0ZGNfX19sYV9E RVBFTkRFTkNJRVMgPSBcCiAJJCh0b3BfYnVpbGRkaXIpL3NyYy9jKysyMC9saWJjKysyMGNvbnZl bmllbmNlLmxhCiAKIGxpYnN0ZGNfX19sYV9MREZMQUdTID0gXAotCS12ZXJzaW9uLWluZm8gJChs aWJ0b29sX1ZFUlNJT04pICR7dmVyc2lvbl9hcmd9IC1sbQorCS12ZXJzaW9uLWluZm8gJChsaWJ0 b29sX1ZFUlNJT04pICR7dmVyc2lvbl9hcmd9IC1sbSAkKEVYVFJBX0xJQlMpCiAKIGxpYnN0ZGNf X19sYV9MSU5LID0gJChDWFhMSU5LKSAkKGxpYnN0ZGNfX19sYV9MREZMQUdTKSAkKGx0X2hvc3Rf ZmxhZ3MpCiBAR0xJQkNYWF9MREJMX0FMVDEyOF9DT01QQVRfRkFMU0VAQEdMSUJDWFhfTERCTF9D T01QQVRfVFJVRUBMVENYWENPTVBJTEU2NCA9ICQoTFRDWFhDT01QSUxFKQpkaWZmIC0tZ2l0IGEv bGlic3RkYysrLXYzL3NyYy9jKys5OC9sb2NhbGVfaW5pdC5jYyBiL2xpYnN0ZGMrKy12My9zcmMv YysrOTgvbG9jYWxlX2luaXQuY2MKaW5kZXggY2ZjMjJlYWY1YTQuLjU4MmE4MTZkYTY1IDEwMDY0 NAotLS0gYS9saWJzdGRjKystdjMvc3JjL2MrKzk4L2xvY2FsZV9pbml0LmNjCisrKyBiL2xpYnN0 ZGMrKy12My9zcmMvYysrOTgvbG9jYWxlX2luaXQuY2MKQEAgLTMwMCw4ICszMDAsOSBAQCBfR0xJ QkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgogCV9fb3RoZXIuX01faW1wbC0+X01fYWRkX3Jl ZmVyZW5jZSgpOwogICAgICAgX1NfZ2xvYmFsID0gX19vdGhlci5fTV9pbXBsOwogICAgICAgY29u c3Qgc3RyaW5nIF9fb3RoZXJfbmFtZSA9IF9fb3RoZXIubmFtZSgpOworICAgICAgZXh0ZXJuIGNv bnN0IF9fdHlwZW9mKHNldGxvY2FsZSkgKl9fc2V0bG9jYWxlOwogICAgICAgaWYgKF9fb3RoZXJf bmFtZSAhPSAiKiIpCi0Jc2V0bG9jYWxlKExDX0FMTCwgX19vdGhlcl9uYW1lLmNfc3RyKCkpOwor CV9fc2V0bG9jYWxlKExDX0FMTCwgX19vdGhlcl9uYW1lLmNfc3RyKCkpOwogICAgIH0KIAogICAg IC8vIFJlZmVyZW5jZSBjb3VudCBzYW5pdHkgY2hlY2s6IG9uZSByZWZlcmVuY2UgcmVtb3ZlZCBm b3IgdGhlCi0tIAoyLjM5LjAKCg== --Multipart=_Sun__31_Dec_2023_15_57_12_+0900_78LTqiKq6qcPKu_f--