Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pIyRo-0006sT-E0 for pgsql-hackers@arkaria.postgresql.org; Fri, 20 Jan 2023 20:57:17 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1pIyRm-0002aB-FJ for pgsql-hackers@arkaria.postgresql.org; Fri, 20 Jan 2023 20:57:14 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pIyPI-0004KI-B1 for pgsql-hackers@lists.postgresql.org; Fri, 20 Jan 2023 20:54:40 +0000 Received: from mail-pj1-x102b.google.com ([2607:f8b0:4864:20::102b]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1pIyPC-0007pN-BY for pgsql-hackers@postgresql.org; Fri, 20 Jan 2023 20:54:39 +0000 Received: by mail-pj1-x102b.google.com with SMTP id v6-20020a17090ad58600b00229eec90a7fso2369393pju.0 for ; Fri, 20 Jan 2023 12:54:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=j-davis-com.20210112.gappssmtp.com; s=20210112; h=mime-version:user-agent:references:in-reply-to:date:cc:to:from :subject:message-id:from:to:cc:subject:date:message-id:reply-to; bh=y3kC1Cg40acByRZAkAXBivAme5D3IjA+dGrkN7b1h48=; b=KgD5kGX1i8e+6AxFUuFtXUHg5d/JYi4OL9FBmluhvlMAQehsifE/LY8RDmW1JX4IPD rj6tgjNSupAdjHVYy1z+adN0z9EOCLIFGOZAKtHe9cOjicI6QzHILJyF8M4ZJrwoTdvH yy1fjD17yUy97q8SoMKcLcA1Sj8qUW7i9v+rM91oQmvE82bQWrJngApHoxsiFaOpZ2oe XThuVQR7PFo3I+QldHsLY8pTjPMNT0pBQeFWP8LnIp/RsqAwy5gxysTuu55lcxNnSzxX hcWwLDVg/bVSuYTMoybFk2F9FaHis5xoTJgBeLLHbJpXIOSEArZEJecBo8LNtdDTUNYX amog== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=mime-version:user-agent:references:in-reply-to:date:cc:to:from :subject:message-id:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=y3kC1Cg40acByRZAkAXBivAme5D3IjA+dGrkN7b1h48=; b=g7Hd7p4zgsQ/e4x7geBOYttPSHZzO5InPtcAWoHQW6vSptAlDmj5cO8wAxpz/7v//l Ud8Ub+g3t8jGkMK9EMtucodU8eLbC/YX2qjlLB1AOygfc2EAH9+dMQJQTx4Mwq+M6O8a 8MiqeSAXKD039Kkr/wOrTjJ2qVYdXrTOBVi0WwB25R14Psv1zczR954u/0R1PYPM6GpI hDIcB2Z2s2HmFuKnCyePsJltN+nM3tPUtWw/nCX5QQKei/5DGHozaqlri7E37odk7AW6 VE0ldsykkNvTC6lSrko3tvzm5iK4gd63YVS5fkfVAH6xq2a6ilc51dLnib+AcH8l5nJm 9QRw== X-Gm-Message-State: AFqh2kqz4thogTNTBebtgef5DKKMGRN0Unb0VaxbPATxwJfuzTTQc9Lw ILD5FK06zZ72UWtDSwB43U2BAQ== X-Google-Smtp-Source: AMrXdXvI9WgqCXvXm5o4lu+0D3btRu/6bqODqqoyJ1bNxogzq3nTzk3zCkBFL6QfMI8TvpqjUI6wtA== X-Received: by 2002:a05:6a20:3d02:b0:b8:70a9:140 with SMTP id y2-20020a056a203d0200b000b870a90140mr22987671pzi.9.1674248070555; Fri, 20 Jan 2023 12:54:30 -0800 (PST) Received: from jeff-laptop.lan (c-73-231-146-4.hsd1.ca.comcast.net. [73.231.146.4]) by smtp.gmail.com with ESMTPSA id o13-20020a63e34d000000b004a3510effa5sm22721678pgj.65.2023.01.20.12.54.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 20 Jan 2023 12:54:29 -0800 (PST) Message-ID: <6f4a8c01a5cb1edf3a07d204c371fbddaef252f9.camel@j-davis.com> Subject: Re: Collation version tracking for macOS From: Jeff Davis To: Thomas Munro , Joe Conway Cc: Peter Eisentraut , Jeremy Schneider , Peter Geoghegan , "Nasby, Jim" , Tom Lane , pgsql-hackers Date: Fri, 20 Jan 2023 12:54:28 -0800 In-Reply-To: References: <398aabd1-ad95-ba2d-d70a-dd5d90bf6e07@enterprisedb.com> <606bd2baa6d65b38fee6eb23bba40c5da210255b.camel@j-davis.com> <9f8e9b5a3352478d4cf7d6c0a5dd7e82496be4b6.camel@j-davis.com> <346f836208a39009c1998ed5a41c7f1a0be36911.camel@j-davis.com> <776e9ddb-a0e6-3f29-9368-a194be30d1a6@joeconway.com> Content-Type: multipart/mixed; boundary="=-u4oNhfj6zIVO/ZOtTH+g" User-Agent: Evolution 3.44.4-0ubuntu1 MIME-Version: 1.0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=-u4oNhfj6zIVO/ZOtTH+g Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, 2023-01-19 at 00:11 -0800, Jeff Davis wrote: > Attached are a new set of patches, including a major enhancement: the > icu_multilib contrib module. Attached rebased v8. [ It looks like my email client truncated the last email somehow, in case someone was wondering why it just stopped. ] The big change is the introduction of the icu_multilib contrib module which provides a lot of the functionality requested in this thread: * icu version stability, which allows you to "lock down" ICU to a specific major and minor version (or major version only) * multi-lib ICU, which (if a GUC is set) will enable the "search by collversion" behavior. Some doubts were raised about the wisdom of this approach, but it's the only multi-lib solution we have without doing some significant catalog work. I rendered the HTML docs for icu_multilib and attached to this email to make it easier to view. icu_multilib assumes that the various ICU library versions are already available in a single location, most likely installed with a package manager. That location can be the same as the built-in ICU, or a different location. Ideally, packagers would start to offer a few "stable" versions of ICU that would be available for a long time, but it will take a while for that to happen. So for now, it's up to the user to figure out how to get the right versions of ICU on their system and keep them there. Automated tests of icu_multilib are a problem unless the one running the tests is willing to compile the right versions of ICU (like I did). But I at least have automated tests for the hooks by using the test module test_collator_lib_hooks. The v7 patches in this thread are dependent on the pure refactoring patches in this CF entry: https://commitfest.postgresql.org/41/3935/ =20 https://postgr.es/m/052a5ed874d110be2f3ae28752e363306b10966d.camel@j-davis.= com The requested functionality _not_ offered by icu_multilib is tying a specific collation to a specific ICU version. A few variants were proposed, the latest is to tie a collation to the library file itself through the provider. That needs to be done with proper catalog support in core. But I believe the work I've done here has made a lot of progress in that direction, and also shows the versatility of the new hook to solve at least some problems. --=20 Jeff Davis PostgreSQL Contributor Team - AWS --=-u4oNhfj6zIVO/ZOtTH+g Content-Type: application/xhtml+xml; name="icu-multilib.html" Content-Disposition: attachment; filename="icu-multilib.html" Content-Transfer-Encoding: base64 PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cjwh RE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8v RU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwu ZHRkIj48aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+PGhlYWQ+PG1l dGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9 VVRGLTgiIC8+PHRpdGxlPkYuMTkuwqBpY3VfbXVsdGlsaWI8L3RpdGxlPjxsaW5rIHJlbD0ic3R5 bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Imh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3Jn L21lZGlhL2Nzcy9kb2NzLWNvbXBsZXRlLmNzcyIgLz48bGluayByZXY9Im1hZGUiIGhyZWY9InBn c3FsLWRvY3NAbGlzdHMucG9zdGdyZXNxbC5vcmciIC8+PG1ldGEgbmFtZT0iZ2VuZXJhdG9yIiBj b250ZW50PSJEb2NCb29rIFhTTCBTdHlsZXNoZWV0cyBWc25hcHNob3QiIC8+PGxpbmsgcmVsPSJw cmV2IiBocmVmPSJoc3RvcmUuaHRtbCIgdGl0bGU9IkYuMTguwqBoc3RvcmUiIC8+PGxpbmsgcmVs PSJuZXh0IiBocmVmPSJpbnRhZ2cuaHRtbCIgdGl0bGU9IkYuMjAuwqBpbnRhZ2ciIC8+PC9oZWFk Pjxib2R5IGlkPSJkb2NDb250ZW50IiBjbGFzcz0iY29udGFpbmVyLWZsdWlkIGNvbC0xMCI+PGRp diBjbGFzcz0ibmF2aGVhZGVyIj48dGFibGUgd2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRp b24gaGVhZGVyIj48dHI+PHRoIGNvbHNwYW49IjUiIGFsaWduPSJjZW50ZXIiPkYuMTkuwqBpY3Vf bXVsdGlsaWI8L3RoPjwvdHI+PHRyPjx0ZCB3aWR0aD0iMTAlIiBhbGlnbj0ibGVmdCI+PGEgYWNj ZXNza2V5PSJwIiBocmVmPSJoc3RvcmUuaHRtbCIgdGl0bGU9IkYuMTguwqBoc3RvcmUiPlByZXY8 L2E+wqA8L3RkPjx0ZCB3aWR0aD0iMTAlIiBhbGlnbj0ibGVmdCI+PGEgYWNjZXNza2V5PSJ1IiBo cmVmPSJjb250cmliLmh0bWwiIHRpdGxlPSJBcHBlbmRpeMKgRi7CoEFkZGl0aW9uYWwgU3VwcGxp ZWQgTW9kdWxlcyI+VXA8L2E+PC90ZD48dGggd2lkdGg9IjYwJSIgYWxpZ249ImNlbnRlciI+QXBw ZW5kaXjCoEYuwqBBZGRpdGlvbmFsIFN1cHBsaWVkIE1vZHVsZXM8L3RoPjx0ZCB3aWR0aD0iMTAl IiBhbGlnbj0icmlnaHQiPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9 IlBvc3RncmVTUUwgMTZkZXZlbCBEb2N1bWVudGF0aW9uIj5Ib21lPC9hPjwvdGQ+PHRkIHdpZHRo PSIxMCUiIGFsaWduPSJyaWdodCI+wqA8YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImludGFnZy5odG1s IiB0aXRsZT0iRi4yMC7CoGludGFnZyI+TmV4dDwvYT48L3RkPjwvdHI+PC90YWJsZT48aHIgLz48 L2Rpdj48ZGl2IGNsYXNzPSJzZWN0MSIgaWQ9IklDVS1NVUxUSUxJQiI+PGRpdiBjbGFzcz0idGl0 bGVwYWdlIj48ZGl2PjxkaXY+PGgyIGNsYXNzPSJ0aXRsZSIgc3R5bGU9ImNsZWFyOiBib3RoIj5G LjE5LsKgaWN1X211bHRpbGliPC9oMj48L2Rpdj48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJ0b2Mi PjxkbCBjbGFzcz0idG9jIj48ZHQ+PHNwYW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSJpY3UtbXVs dGlsaWIuaHRtbCNJQ1UtTVVMVElMSUItVkVSU0lPTi1TVEFCSUxJVFkiPkYuMTkuMS4gSUNVIFZl cnNpb24gU3RhYmlsaXR5PC9hPjwvc3Bhbj48L2R0PjxkdD48c3BhbiBjbGFzcz0ic2VjdDIiPjxh IGhyZWY9ImljdS1tdWx0aWxpYi5odG1sI0lDVS1NVUxUSS1WRVJTSU9OIj5GLjE5LjIuIE11bHRp cGxlIElDVSBWZXJzaW9uIFN1cHBvcnQ8L2E+PC9zcGFuPjwvZHQ+PGR0PjxzcGFuIGNsYXNzPSJz ZWN0MiI+PGEgaHJlZj0iaWN1LW11bHRpbGliLmh0bWwjSUNVLU1VTFRJTElCLUNPTkZJR1VSQVRJ T04tUEFSQU1FVEVSUyI+Ri4xOS4zLiBDb25maWd1cmF0aW9uIFBhcmFtZXRlcnM8L2E+PC9zcGFu PjwvZHQ+PGR0PjxzcGFuIGNsYXNzPSJzZWN0MiI+PGEgaHJlZj0iaWN1LW11bHRpbGliLmh0bWwj aWQtMS4xMS43LjI4LjEwIj5GLjE5LjQuIEZ1bmN0aW9uczwvYT48L3NwYW4+PC9kdD48ZHQ+PHNw YW4gY2xhc3M9InNlY3QyIj48YSBocmVmPSJpY3UtbXVsdGlsaWIuaHRtbCNJQ1UtTVVMVElMSUIt RVhBTVBMRVMiPkYuMTkuNS4gRXhhbXBsZXM8L2E+PC9zcGFuPjwvZHQ+PGR0PjxzcGFuIGNsYXNz PSJzZWN0MiI+PGEgaHJlZj0iaWN1LW11bHRpbGliLmh0bWwjSUNVLU1VTFRJTElCLUFVVEhPUiI+ Ri4xOS42LiBBdXRob3JzPC9hPjwvc3Bhbj48L2R0PjwvZGw+PC9kaXY+PGEgaWQ9ImlkLTEuMTEu Ny4yOC4yIiBjbGFzcz0iaW5kZXh0ZXJtIj48L2E+PHA+CiAgVGhlIDxjb2RlIGNsYXNzPSJmaWxl bmFtZSI+aWN1X211bHRpbGliPC9jb2RlPiBtb2R1bGUgcHJvdmlkZXMgY29udHJvbCBvdmVyIHRo ZQogIHZlcnNpb24gKG9yIHZlcnNpb25zKSBvZiB0aGUgSUNVIHByb3ZpZGVyIGxpYnJhcnkgdXNl ZCBieQogIDxzcGFuIGNsYXNzPSJwcm9kdWN0bmFtZSI+UG9zdGdyZVNRTDwvc3Bhbj4sIHdoaWNo IGNhbiBiZSBkaWZmZXJlbnQgZnJvbSB0aGUKICB2ZXJzaW9uIG9mIElDVSB3aXRoIHdoaWNoIGl0 IHdhcyBidWlsdC4KIDwvcD48cD4KICBDb2xsYXRpb25zIGFyZSBhIHByb2R1Y3Qgb2YgbmF0dXJh bCBsYW5ndWFnZSwgYW5kIG5hdHVyYWwgbGFuZ3VhZ2UgZXZvbHZlcwogIG92ZXIgdGltZTsgYnV0 IDxzcGFuIGNsYXNzPSJwcm9kdWN0bmFtZSI+UG9zdGdyZVNRTDwvc3Bhbj4gZGVwZW5kcyBvbiBz dGFibGUKICBvcmRlcmluZyBmb3Igc3RydWN0dXJlcyBzdWNoIGFzIGluZGV4ZXMuIE5ld2VyIHZl cnNpb25zIG9mIElDVSB1cGRhdGUgdGhlCiAgcHJvdmlkZWQgY29sbGF0b3JzIHRvIGFkYXB0IHRv IGNoYW5nZXMgaW4gbmF0dXJhbCBsYW5ndWFnZSwgc28gaXQncwogIGltcG9ydGFudCB0byBjb250 cm9sIHdoZW4gYW5kIGhvdyB0aG9zZSBuZXcgdmVyc2lvbnMgb2YgSUNVIGFyZSB1c2VkIHRvCiAg cHJldmVudCBwcm9ibGVtcyBzdWNoIGFzIGluZGV4IGNvcnJ1cHRpb24uCiA8L3A+PHA+CiAgVGhp cyBtb2R1bGUgYXNzdW1lcyB0aGF0IHRoZSBuZWNlc3NhcnkgdmVyc2lvbnMgb2YgSUNVIGFyZSBh bHJlYWR5CiAgYXZhaWxhYmxlLCBzdWNoIGFzIHRocm91Z2ggdGhlIG9wZXJhdGluZyBzeXN0ZW0n cyBwYWNrYWdlIG1hbmFnZXI7IGFuZAogIGFscmVhZHkgcHJvcGVybHkgaW5zdGFsbGVkIGluIGEg c2luZ2xlIGxvY2F0aW9uIGFjY2Vzc2libGUgdG8KICA8c3BhbiBjbGFzcz0icHJvZHVjdG5hbWUi PlBvc3RncmVTUUw8L3NwYW4+LiBUaGUgY29uZmlncmF0aW9uIHZhcmlhYmxlCiAgPGNvZGUgY2xh c3M9ImxpdGVyYWwiPmljdV9tdWx0aWxpYi5saWJyYXJ5X3BhdGg8L2NvZGU+IHNob3VsZCBiZSBz ZXQgdG8gdGhlIGxvY2F0aW9uCiAgd2hlcmUgdGhlc2UgSUNVIGxpYnJhcnkgdmVyc2lvbnMgYXJl IGluc3RhbGxlZC4KIDwvcD48cD4KICA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPmljdV9tdWx0aWxp YjwvY29kZT4gbXVzdCBiZSBsb2FkZWQgdmlhCiAgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPnNoYXJl ZF9wcmVsb2FkX2xpYnJhcmllczwvY29kZT4uCiAgPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj5pY3Vf bXVsdGlsaWI8L2NvZGU+IGlnbm9yZXMgYW55IElDVSBsaWJyYXJ5IHdpdGggYSBtYWpvcgogIHZl cnNpb24gZ3JlYXRlciB0aGFuIHRoYXQgd2l0aCB3aGljaCA8c3BhbiBjbGFzcz0icHJvZHVjdG5h bWUiPlBvc3RncmVTUUw8L3NwYW4+CiAgd2FzIGJ1aWx0LgogPC9wPjxkaXYgY2xhc3M9InNlY3Qy IiBpZD0iSUNVLU1VTFRJTElCLVZFUlNJT04tU1RBQklMSVRZIj48ZGl2IGNsYXNzPSJ0aXRsZXBh Z2UiPjxkaXY+PGRpdj48aDMgY2xhc3M9InRpdGxlIj5GLjE5LjEuwqBJQ1UgVmVyc2lvbiBTdGFi aWxpdHk8L2gzPjwvZGl2PjwvZGl2PjwvZGl2PjxwPgogICBUaGUgc2ltcGxlc3Qgd2F5IHRvIHVz ZSA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPmljdV9tdWx0aWxpYjwvY29kZT4gaXMgdG8gZm9yY2Ug SUNVCiAgIHZlcnNpb24gc3RhYmlsaXR5LiBWZXJzaW9uIHN0YWJpbGl0eSBtZWFucyB0aGF0CiAg IDxzcGFuIGNsYXNzPSJwcm9kdWN0bmFtZSI+UG9zdGdyZVNRTDwvc3Bhbj4gd2lsbCB1c2UgdGhl IHNhbWUgdmVyc2lvbiBvZiBJQ1UgZm9yCiAgIGFsbCBjb2xsYXRpb25zLCBldmVuIGlmIHRoZSBv cGVyYXRpbmcgc3lzdGVtIG9yCiAgIDxzcGFuIGNsYXNzPSJwcm9kdWN0bmFtZSI+UG9zdGdyZVNR TDwvc3Bhbj4gaXRzZWxmIGlzIHVwZ3JhZGVkIG9yIG1vdmVkLiBUaGUKICAgc3RhYmxlIHZlcnNp b24gbWF5IG9yIG1heSBub3QgYmUgdGhlIHNhbWUgYXMgdGhhdCB3aXRoIHdoaWNoCiAgIDxzcGFu IGNsYXNzPSJwcm9kdWN0bmFtZSI+UG9zdGdyZVNRTDwvc3Bhbj4gd2FzIGJ1aWx0LgogIDwvcD48 cD4KICAgVmVyc2lvbiBzdGFiaWxpdHkgbWF5IGJlIGJhc2VkIG9uIGJvdGggdGhlIG1ham9yIGFu ZCBtaW5vciB2ZXJzaW9uIG9mIElDVSwKICAgc3VjaCBhcyA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+ NjguMjwvY29kZT47IG9yIG9uIHRoZSBtYWpvciB2ZXJzaW9uIGFsb25lLCBzdWNoIGFzCiAgIDxj b2RlIGNsYXNzPSJsaXRlcmFsIj42ODwvY29kZT4uIFNwZWNpZnlpbmcgYm90aCB0aGUgbWFqb3Ig YW5kIG1pbm9yIHZlcnNpb25zIG1vcmUKICAgY2xvc2VseSBjb250cm9scyBleGFjdGx5IHdoaWNo IElDVSBsaWJyYXJ5IGlzIGxvYWRlZCwgYnV0IGFwcGx5aW5nIG1pbm9yCiAgIHZlcnNpb24gdXBn cmFkZXMgb2YgdGhlIElDVSBsaWJyYXJ5IG1heSBpbnRlcmZlcmUgd2l0aCBub3JtYWwKICAgb3Bl cmF0aW9uLiBTcGVjaWZ5aW5nIHRoZSBtYWpvciB2ZXJzaW9uIGFsb25lIG1ha2VzIGFwcGx5aW5n IElDVSBtaW5vcgogICB2ZXJzaW9uIHVwZGF0ZXMgc2ltcGxlciwgYnV0IGNhcnJpZXMgYSByaXNr IG9mIHN1YnRsZSBkaWZmZXJlbmNlcyBpbgogICBjb2xsYXRpb24gb3JkZXIgaWYgdGhlIGxpYnJh cnkgaXMgdXBkYXRlZC4KICA8L3A+PHA+CiAgIFRvIGNvbmZpZ3VyZSBmb3IgdmVyc2lvbiBzdGFi aWxpdHksIGZpcnN0IG1ha2Ugc3VyZSB0aGF0CiAgIDxjb2RlIGNsYXNzPSJ2YXJuYW1lIj5pY3Vf bXVsdGlsaWIubGlicmFyeV9wYXRoPC9jb2RlPiBpcyBzZXQgY29ycmVjdGx5LCB3aGljaCB5b3UK ICAgY2FuIG9ic2VydmUgYnkgZXhlY3V0aW5nIHRoZQogICA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+ aWN1X211bHRpbGliLmxpYnJhcnlfdmVyc2lvbnMoKTwvY29kZT4gZnVuY3Rpb24uIFRoZW4gc2V0 CiAgIDxjb2RlIGNsYXNzPSJ2YXJuYW1lIj5pY3VfbXVsdGlsaWIuZGVmYXVsdF9pY3VfdmVyc2lv bjwvY29kZT4gdG8gdGhlIHN0YWJsZSB2ZXJzaW9uLAogICBhbmQgc2V0IDxjb2RlIGNsYXNzPSJ2 YXJuYW1lIj5pY3VfbXVsdGlsaWIuc2VhcmNoX2J5X2NvbGxhdG9yX3ZlcnNpb248L2NvZGU+IHRv CiAgIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5mYWxzZTwvY29kZT4uIFRoZXNlIGNvbmZpZ3VyYXRp b24gdmFyaWFibGVzIHNob3VsZCBiZSBzZXQgaW4KICAgPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj5w b3N0Z3Jlc3FsLmNvbmY8L2NvZGU+IHRvIGVuc3VyZSB0aGF0IHRoZSBzdGFibGUgdmVyc2lvbiBv ZgogICBJQ1UgaXMgdXNlZCBjb25zaXN0ZW50bHkuCiAgPC9wPjxkaXYgY2xhc3M9Im5vdGUiPjxo MyBjbGFzcz0idGl0bGUiPk5vdGU8L2gzPjxwPgogICAgRW5zdXJlIHRoYXQgdGhlIHN0YWJsZSB2 ZXJzaW9uIG9mIHRoZSBJQ1UgbGlicmFyeSBpcyBhbHdheXMgYXZhaWxhYmxlLAogICAgaW5jbHVk aW5nIG9uIGFsbCByZXBsaWNhcyBhbmQgdGhyb3VnaCBvcGVyYXRpbmcgc3lzdGVtIGFuZAogICAg PHNwYW4gY2xhc3M9InByb2R1Y3RuYW1lIj5Qb3N0Z3JlU1FMPC9zcGFuPiB1cGdyYWRlcy4KICAg PC9wPjxwPgogICAgU2ltaWxhcmx5LCBrZWVwIHRoZSBzZXR0aW5ncyBpbiA8Y29kZSBjbGFzcz0i ZmlsZW5hbWUiPnBvc3RncmVzcWwuY29uZjwvY29kZT4sIGFuZAogICAga2VlcCB0aGVtIGNvbnNp c3RlbnQgYWNyb3NzIHJlcGxpY2FzIGFuZCB1cGdyYWRlcy4KICAgPC9wPjwvZGl2PjxwPgogICBG b3IgYmVzdCByZXN1bHRzLCBzdGFiaWxpemUgdGhlIElDVSB2ZXJzaW9uIGltbWVkaWF0ZWx5IGFm dGVyCiAgIDxjb2RlIGNsYXNzPSJjb21tYW5kIj5pbml0ZGI8L2NvZGU+IGlzIHJ1biwgdG8gZW5z dXJlIHRoYXQgaW5pdGlhbCBjb2xsYXRpb25zIGFyZQogICBsb2FkZWQgZnJvbSB0aGUgc3RhYmls aXplZCB2ZXJzaW9uIG9mIHRoZSBJQ1UgbGlicmFyeS4gVG8gZG8gdGhpcywgdXNlIHRoZQogICBv cHRpb24gPGEgY2xhc3M9InhyZWYiIGhyZWY9ImFwcC1pbml0ZGIuaHRtbCNBUFAtSU5JVERCLU9Q VElPTi1OTy1JTVBPUlQtQ09MTEFUSU9OUyI+PGNvZGUgY2xhc3M9Im9wdGlvbiI+LS1uby1pbXBv cnQtY29sbGF0aW9uczwvY29kZT48L2E+IGZvcgogICA8Y29kZSBjbGFzcz0iY29tbWFuZCI+aW5p dGRiPC9jb2RlPiwgaW1wb3J0IHRoZSBjb2xsYXRpb25zIG1hbnVhbGx5LCBhbmQgdGhlbiByZWZy ZXNoCiAgIHRoZSB2ZXJzaW9ucyBmb3IgdGhlIGRlZmF1bHQgY29sbGF0aW9ucy4gRm9yIGluc3Rh bmNlOgogIDwvcD48cHJlIGNsYXNzPSJwcm9ncmFtbGlzdGluZyI+CiQgaW5pdGRiIC0tbm8taW1w b3J0LWNvbGxhdGlvbnMgLUQgZGF0YSAtLWxvY2FsZS1wcm92aWRlcj1pY3UgLS1pY3UtbG9jYWxl PSJlbl9VUyIgLS1sb2NhbGU9ImVuX1VTLlVURi04IgokIGNhdCAtICZndDsmZ3Q7IGRhdGEvcG9z dGdyZXNxbC5jb25mCnNoYXJlZF9wcmVsb2FkX2xpYnJhcmllcyA9ICdpY3VfbXVsdGlsaWInCmlj dV9tdWx0aWxpYi5saWJyYXJ5X3BhdGggPSAnL3BhdGgvdG8vaWN1L2xpYicKaWN1X211bHRpbGli LmRlZmF1bHRfaWN1X3ZlcnNpb24gPSAnNjUuMScKaWN1X211bHRpbGliLnNlYXJjaF9ieV9jb2xs YXRvcl92ZXJzaW9uID0gZmFsc2UKaWN1X211bHRpbGliLmluY2x1ZGVfYnVpbHRpbiA9IGZhbHNl Cl5ECiQgcGdfY3RsIC1EIGRhdGEgLWwgbG9nZmlsZSBzdGFydAokIHBzcWwgdGVtcGxhdGUxCldB Uk5JTkc6ICBpY3VfbXVsdGlsaWI6IGNvbGxhdG9yIHZlcnNpb24gbWlzbWF0Y2ggZGV0ZWN0ZWQg Zm9yIGxvY2FsZSAiZW5fVVMiCkRFVEFJTDogIElDVSA2NS4xIHByb3ZpZGVzIGNvbGxhdG9yIHZl cnNpb24gIjE1My45NyIgZm9yIGxvY2FsZSAiZW5fVVMiOyBleHBlY3RlZCB2ZXJzaW9uICIxNTMu MTEyIi4KV0FSTklORzogIGljdV9tdWx0aWxpYjogY29sbGF0b3IgdmVyc2lvbiBtaXNtYXRjaCBk ZXRlY3RlZCBmb3IgbG9jYWxlICJlbl9VUyIKREVUQUlMOiAgSUNVIDY1LjEgcHJvdmlkZXMgY29s bGF0b3IgdmVyc2lvbiAiMTUzLjk3IiBmb3IgbG9jYWxlICJlbl9VUyI7IGV4cGVjdGVkIHZlcnNp b24gIjE1My4xMTIiLgpXQVJOSU5HOiAgZGF0YWJhc2UgInRlbXBsYXRlMSIgaGFzIGEgY29sbGF0 aW9uIHZlcnNpb24gbWlzbWF0Y2gKREVUQUlMOiAgVGhlIGRhdGFiYXNlIHdhcyBjcmVhdGVkIHVz aW5nIGNvbGxhdGlvbiB2ZXJzaW9uIDE1My4xMTIsIGJ1dCB0aGUgb3BlcmF0aW5nIHN5c3RlbSBw cm92aWRlcyB2ZXJzaW9uIDE1My45Ny4KSElOVDogIFJlYnVpbGQgYWxsIG9iamVjdHMgaW4gdGhp cyBkYXRhYmFzZSB0aGF0IHVzZSB0aGUgZGVmYXVsdCBjb2xsYXRpb24gYW5kIHJ1biBBTFRFUiBE QVRBQkFTRSB0ZW1wbGF0ZTEgUkVGUkVTSCBDT0xMQVRJT04gVkVSU0lPTiwgb3IgYnVpbGQgUG9z dGdyZVNRTCB3aXRoIHRoZSByaWdodCBsaWJyYXJ5IHZlcnNpb24uCj0jIEFMVEVSIERBVEFCQVNF IHRlbXBsYXRlMSBSRUZSRVNIIENPTExBVElPTiBWRVJTSU9OOwpOT1RJQ0U6ICBjaGFuZ2luZyB2 ZXJzaW9uIGZyb20gMTUzLjExMiB0byAxNTMuOTcKQUxURVIgREFUQUJBU0UKPSMgU0VMRUNUIHBn X2ltcG9ydF9zeXN0ZW1fY29sbGF0aW9ucygncGdfY2F0YWxvZycpOwogcGdfaW1wb3J0X3N5c3Rl bV9jb2xsYXRpb25zCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAg ICAgICAgICAgICA3OTIKKDEgcm93KQoKPSMgXHEKJCBwc3FsIHBvc3RncmVzCldBUk5JTkc6ICBp Y3VfbXVsdGlsaWI6IGNvbGxhdG9yIHZlcnNpb24gbWlzbWF0Y2ggZGV0ZWN0ZWQgZm9yIGxvY2Fs ZSAiZW5fVVMiCkRFVEFJTDogIElDVSA2NS4xIHByb3ZpZGVzIGNvbGxhdG9yIHZlcnNpb24gIjE1 My45NyIgZm9yIGxvY2FsZSAiZW5fVVMiOyBleHBlY3RlZCB2ZXJzaW9uICIxNTMuMTEyIi4KV0FS TklORzogIGljdV9tdWx0aWxpYjogY29sbGF0b3IgdmVyc2lvbiBtaXNtYXRjaCBkZXRlY3RlZCBm b3IgbG9jYWxlICJlbl9VUyIKREVUQUlMOiAgSUNVIDY1LjEgcHJvdmlkZXMgY29sbGF0b3IgdmVy c2lvbiAiMTUzLjk3IiBmb3IgbG9jYWxlICJlbl9VUyI7IGV4cGVjdGVkIHZlcnNpb24gIjE1My4x MTIiLgpXQVJOSU5HOiAgZGF0YWJhc2UgInBvc3RncmVzIiBoYXMgYSBjb2xsYXRpb24gdmVyc2lv biBtaXNtYXRjaApERVRBSUw6ICBUaGUgZGF0YWJhc2Ugd2FzIGNyZWF0ZWQgdXNpbmcgY29sbGF0 aW9uIHZlcnNpb24gMTUzLjExMiwgYnV0IHRoZSBvcGVyYXRpbmcgc3lzdGVtIHByb3ZpZGVzIHZl cnNpb24gMTUzLjk3LgpISU5UOiAgUmVidWlsZCBhbGwgb2JqZWN0cyBpbiB0aGlzIGRhdGFiYXNl IHRoYXQgdXNlIHRoZSBkZWZhdWx0IGNvbGxhdGlvbiBhbmQgcnVuIEFMVEVSIERBVEFCQVNFIHBv c3RncmVzIFJFRlJFU0ggQ09MTEFUSU9OIFZFUlNJT04sIG9yIGJ1aWxkIFBvc3RncmVTUUwgd2l0 aCB0aGUgcmlnaHQgbGlicmFyeSB2ZXJzaW9uLgo9IyBBTFRFUiBEQVRBQkFTRSBwb3N0Z3JlcyBS RUZSRVNIIENPTExBVElPTiBWRVJTSU9OOwpOT1RJQ0U6ICBjaGFuZ2luZyB2ZXJzaW9uIGZyb20g MTUzLjExMiB0byAxNTMuOTcKQUxURVIgREFUQUJBU0UKPSMgU0VMRUNUIHBnX2ltcG9ydF9zeXN0 ZW1fY29sbGF0aW9ucygncGdfY2F0YWxvZycpOwogcGdfaW1wb3J0X3N5c3RlbV9jb2xsYXRpb25z Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgICAgICAgICAgICA3 OTIKKDEgcm93KQoKPSMgXHEKJAo8L3ByZT48cD4KICAgVGhlIHJlc3VsdCB3aWxsIGJlIGEgc3lz dGVtIGJhc2VkIG9uIElDVSB2ZXJzaW9uIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj42NS4xPC9jb2Rl PiwgYW5kCiAgIDxzcGFuIGNsYXNzPSJwcm9kdWN0bmFtZSI+UG9zdGdyZVNRTDwvc3Bhbj4gd2ls bCB1c2UgdGhhdCB2ZXJzaW9uIG9mIElDVSBmb3IgYWxsCiAgIGNvbGxhdGlvbnMgdGhhdCB1c2Ug dGhlIElDVSBwcm92aWRlci4KICA8L3A+PC9kaXY+PGRpdiBjbGFzcz0ic2VjdDIiIGlkPSJJQ1Ut TVVMVEktVkVSU0lPTiI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNz PSJ0aXRsZSI+Ri4xOS4yLsKgTXVsdGlwbGUgSUNVIFZlcnNpb24gU3VwcG9ydDwvaDM+PC9kaXY+ PC9kaXY+PC9kaXY+PHA+CiAgIFN1cHBvcnQgZm9yIG11bHRpcGxlIElDVSBsaWJyYXJ5IHZlcnNp b25zIGluIHRoZSBzYW1lIGRhdGFiYXNlIGFsbG93cyB0aGUKICAgc3lzdGVtIHRvIGFkYXB0IHRv IGNoYW5nZXMgaW4gbmF0dXJhbCBsYW5ndWFnZSBvdmVyIHRpbWUuIEFzIHRoZXNlIGNoYW5nZXMK ICAgYXJlIGludHJvZHVjZWQgaW4gbmV3IHZlcnNpb25zIG9mIElDVSwgdGhvc2UgbmV3IHZlcnNp b25zIGNhbiBiZSBicm91Z2h0CiAgIGludG8gPHNwYW4gY2xhc3M9InByb2R1Y3RuYW1lIj5Qb3N0 Z3JlU1FMPC9zcGFuPiBpbmNyZW1lbnRhbGx5IHdpdGhvdXQKICAgaW50ZXJmZXJpbmcgd2l0aCBl eGlzdGluZyBkYXRhIChvciBzdHJ1Y3R1cmVzIGxpa2UgaW5kZXhlcykuCiAgPC9wPjxkaXYgY2xh c3M9InNlY3QzIiBpZD0iaWQtMS4xMS43LjI4LjguMyI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48 ZGl2PjxkaXY+PGg0IGNsYXNzPSJ0aXRsZSI+Ri4xOS4yLjEuwqBTZWFyY2ggYnkgQ29sbGF0b3Ig VmVyc2lvbjwvaDQ+PC9kaXY+PC9kaXY+PC9kaXY+PHA+CiAgICBDb2xsYXRvcnMgcHJvdmlkZWQg YnkgSUNVIGFsc28gaGF2ZSBhIHZlcnNpb24gd2hpY2ggaXMgZGlzdGluY3QgZnJvbSB0aGUKICAg IHZlcnNpb24gb2YgSUNVLiBGb3IgaW5zdGFuY2UsIGluIElDVSB2ZXJzaW9uIDxjb2RlIGNsYXNz PSJsaXRlcmFsIj43MC4xPC9jb2RlPiwgdGhlCiAgICBjb2xsYXRvciBmb3IgdGhlIDxjb2RlIGNs YXNzPSJsaXRlcmFsIj5lbl9VUzwvY29kZT4gbG9jYWxlIGhhcyB2ZXJzaW9uCiAgICA8Y29kZSBj bGFzcz0ibGl0ZXJhbCI+MTUzLjExMjwvY29kZT4uIEEgY29sbGF0b3IgZm9yIGEgZ2l2ZW4gbG9j YWxlIG1heSBvciBtYXkgbm90CiAgICBiZSBhc3NpZ25lZCBhIG5ldyB2ZXJzaW9uIHdoZW4gdGhl IElDVSBsaWJyYXJ5IHZlcnNpb24gaXMgdXBkYXRlZC4KICAgPC9wPjxwPgogICAgV2hlbiBhIGNv bGxhdGlvbiBpcyBjcmVhdGVkLCA8c3BhbiBjbGFzcz0icHJvZHVjdG5hbWUiPlBvc3RncmVTUUw8 L3NwYW4+IG9idGFpbnMKICAgIHRoZSB2ZXJzaW9uIG9mIHRoZSBjb2xsYXRvciBmcm9tIHRoZSBJ Q1UgbGlicmFyeSBhbmQgcmVjb3JkcyBpdCBpbiB0aGUKICAgIGNhdGFsb2cuIFRoaXMgcmVjb3Jk ZWQgdmVyc2lvbiBjYW4gYmUgdXBkYXRlZCB1c2luZyA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+QUxU RVIKICAgIENPTExBVElPTiAuLi4gUkVGUkVTSCBWRVJTSU9OPC9jb2RlPjsgb3IgPGNvZGUgY2xh c3M9ImxpdGVyYWwiPkFMVEVSIERBVEFCQVNFCiAgICAuLi4gUkVGUkVTSCBDT0xMQVRJT04gVkVS U0lPTjwvY29kZT4gaWYgaXQncyB0aGUgZGF0YWJhc2UncyBkZWZhdWx0CiAgICBjb2xsYXRpb24u IFRoZXNlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5BTFRFUjwvY29kZT4gY29tbWFuZHMgb2J0YWlu IHRoZSBuZXcgY29sbGF0b3IKICAgIHZlcnNpb24gZnJvbSB0aGUgSUNVIGxpYnJhcnkgaWRlbnRp ZmllZCBieQogICAgPGNvZGUgY2xhc3M9InZhcm5hbWUiPmljdV9tdWx0aWxpYi5kZWZhdWx0X2lj dV92ZXJzaW9uPC9jb2RlPiBpZiBzZXQ7IG90aGVyd2lzZSB0aGV5CiAgICBvYnRhaW4gdGhlIG5l dyBjb2xsYXRvciB2ZXJzaW9uIGZyb20gdGhlIGJ1aWx0LWluIElDVSBsaWJyYXJ5LgogICA8L3A+ PHA+CiAgICBTZXQgPGNvZGUgY2xhc3M9InZhcm5hbWUiPmljdV9tdWx0aWxpYi5zZWFyY2hfYnlf Y29sbGF0b3JfdmVyc2lvbjwvY29kZT4gdG8KICAgIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj50cnVl PC9jb2RlPiB0byBlbmFibGUgPGNvZGUgY2xhc3M9ImZpbGVuYW1lIj5pY3VfbXVsdGlsaWI8L2Nv ZGU+IHRvCiAgICBzZWFyY2ggKGluIGRlc2NlbmRpbmcgb3JkZXIgb2YgSUNVIG1ham9yIHZlcnNp b24pIGFtb25nIHRoZQogICAgYXZhaWxhYmxlIGxpYnJhcmllcyB0byBmaW5kIHRoZSBmaXJzdCBv bmUgdGhhdCBwcm92aWRlcyBhIGNvbGxhdG9yIHdpdGggYQogICAgdmVyc2lvbiB0aGF0IG1hdGNo ZXMgdGhlIG9uZSByZWNvcmRlZCBpbiB0aGUgY2F0YWxvZy4KICAgPC9wPjxwPgogICAgRm9yIGV4 YW1wbGUsIElDVSB2ZXJzaW9ucyA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+NjIuMjwvY29kZT4gYW5k CiAgICA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+NjMuMjwvY29kZT4gYm90aCBwcm92aWRlIGNvbGxh dG9yIHZlcnNpb24KICAgIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj4xNTMuODg8L2NvZGU+IGZvciB0 aGUgbG9jYWxlIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5lbl9VUzwvY29kZT47IHdoaWxlCiAgICBJ Q1UgdmVyc2lvbiA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+NjQuMjwvY29kZT4gcHJvdmlkZXMgY29s bGF0b3IgdmVyc2lvbgogICAgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPjE1My45NzwvY29kZT4gZm9y IHRoZSBzYW1lIGxvY2FsZS4gU2VhcmNoaW5nIGZvciBhbiBJQ1UKICAgIGxpYnJhcnkgZm9yIGEg Y29sbGF0aW9uIHdpdGggYSByZWNvcmRlZCB2ZXJzaW9uIG9mCiAgICA8Y29kZSBjbGFzcz0ibGl0 ZXJhbCI+MTUzLjg4PC9jb2RlPiB3aWxsIGZpbmQgdGhlIElDVSBsaWJyYXJ5IHdpdGggdmVyc2lv bgogICAgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPjYzLjI8L2NvZGU+LCBiZWNhdXNlIHRoYXQncyB0 aGUgSUNVIGxpYnJhcnkgd2l0aCB0aGUgaGlnaGVzdAogICAgbWFqb3IgdmVyc2lvbiAoPGNvZGUg Y2xhc3M9ImxpdGVyYWwiPjYzPC9jb2RlPikgdGhhdCBwcm92aWRlcyBjb2xsYXRvciB2ZXJzaW9u CiAgICA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+MTUzLjg4PC9jb2RlPi4gVGhlIGZ1bmN0aW9uCiAg ICA8Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmljdV9tdWx0aWxpYi5jb2xsYXRvcl92ZXJzaW9uX3Nl YXJjaDwvY29kZT4gc2ltdWxhdGVzIHRoaXMKICAgIHNlYXJjaCBmb3IgdGhlIGdpdmVuIGxvY2Fs ZSBhbmQgdmVyc2lvbjoKICAgPC9wPjxwcmUgY2xhc3M9InByb2dyYW1saXN0aW5nIj4KU0VMRUNU ICogRlJPTSBpY3VfbXVsdGlsaWIuY29sbGF0b3JfdmVyc2lvbl9zZWFyY2goJ2VuX1VTJywgJzE1 My44OCcpOwogaWN1X3ZlcnNpb24gfCB1Y2FfdmVyc2lvbiB8IGNvbGxhdG9yX3ZlcnNpb24KLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQogNjMuMiAgICAgICAg fCAxMS4wICAgICAgICB8IDE1My44OAooMSByb3cpCgo8L3ByZT48ZGl2IGNsYXNzPSJub3RlIj48 aDMgY2xhc3M9InRpdGxlIj5Ob3RlPC9oMz48cD4KICAgICBTZWFyY2hpbmcgYnkgY29sbGF0b3Ig dmVyc2lvbiByZWxpZXMgb24gdGhlIGFzc3VtcHRpb24gdGhhdCBjb2xsYXRvcnMKICAgICB3aXRo IHRoZSBzYW1lIHZlcnNpb24gYmVoYXZlIGlkZW50aWNhbGx5IHJlZ2FyZGxlc3Mgb2Ygd2hpY2gg SUNVIGxpYnJhcnkKICAgICBwcm92aWRlcyBpdC4gVGhlIGFkbWluaXN0cmF0b3IgbXVzdCB3ZWln aCB0aGUgcmlza3Mgb2YgdGhpcyBhc3N1bXB0aW9uCiAgICAgYWdhaW5zdCB0aGUgY29udmVuaWVu Y2Ugd2hlbiBtYW5hZ2luZyBtdWx0aXBsZSBtYWpvciB2ZXJzaW9ucyBvZiBJQ1UuCiAgICA8L3A+ PC9kaXY+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0ic2VjdDIiIGlkPSJJQ1UtTVVMVElMSUItQ09O RklHVVJBVElPTi1QQVJBTUVURVJTIj48ZGl2IGNsYXNzPSJ0aXRsZXBhZ2UiPjxkaXY+PGRpdj48 aDMgY2xhc3M9InRpdGxlIj5GLjE5LjMuwqBDb25maWd1cmF0aW9uIFBhcmFtZXRlcnM8L2gzPjwv ZGl2PjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9InZhcmlhYmxlbGlzdCI+PGRsIGNsYXNzPSJ2YXJp YWJsZWxpc3QiPjxkdD48c3BhbiBjbGFzcz0idGVybSI+CiAgICAgPGNvZGUgY2xhc3M9InZhcm5h bWUiPmljdV9tdWx0aWxpYi5saWJyYXJ5X3BhdGg8L2NvZGU+ICg8Y29kZSBjbGFzcz0idHlwZSI+ c3RyaW5nPC9jb2RlPikKICAgICA8YSBpZD0iaWQtMS4xMS43LjI4LjkuMi4xLjEuMyIgY2xhc3M9 ImluZGV4dGVybSI+PC9hPgogICAgPC9zcGFuPjwvZHQ+PGRkPjxwPgogICAgICBUaGUgZmlsZXN5 c3RlbSBwYXRoIGluIHdoaWNoIHRvIHNlYXJjaCBmb3IgSUNVIGxpYnJhcmllcy4gTXVzdCBiZSBz ZXQKICAgICAgZm9yIDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+aWN1X211bHRpbGliPC9jb2RlPiB0 byBiZSB1c2VmdWwuIE11bHRpcGxlIG1ham9yCiAgICAgIHZlcnNpb25zIG9mIElDVSBtYXkgYmUg cHJlc2VudDsgYnV0IGZvciBlYWNoIG1ham9yIHZlcnNpb24sIG9ubHkgYQogICAgICBzaW5nbGUg bWlub3IgdmVyc2lvbiBjYW4gYmUgcHJlc2VudC4KICAgICA8L3A+PC9kZD48ZHQ+PHNwYW4gY2xh c3M9InRlcm0iPgogICAgIDxjb2RlIGNsYXNzPSJ2YXJuYW1lIj5pY3VfbXVsdGlsaWIudmVyc2lv bl9taXNtYXRjaF9sb2dfbGV2ZWw8L2NvZGU+ICg8Y29kZSBjbGFzcz0idHlwZSI+c3RyaW5nPC9j b2RlPikKICAgICA8YSBpZD0iaWQtMS4xMS43LjI4LjkuMi4yLjEuMyIgY2xhc3M9ImluZGV4dGVy bSI+PC9hPgogICAgPC9zcGFuPjwvZHQ+PGRkPjxwPgogICAgICBBIHZlcnNpb24gbWlzbWF0Y2gg aGFwcGVucyB3aGVuIHRoZSB2ZXJzaW9uIG9mIGEgY29sbGF0b3IgcHJvdmlkZWQgYnkKICAgICAg dGhlIElDVSBsaWJyYXJ5IGlzIGRpZmZlcmVudCB0aGFuIHRoZW4gY29sbGF0b3IgdmVyc2lvbiBy ZWNvcmRlZCB3aGVuCiAgICAgIHRoZSBjb2xsYXRpb24gd2FzIGNyZWF0ZWQgKG9yIGxhc3QgcmVm cmVzaGVkKS4KICAgICA8L3A+PHA+CiAgICAgIFdoZW4gYSB2ZXJzaW9uIG1pc21hdGNoIGlzIGRl dGVjdGVkLCBhIGxvZyBtZXNzYWdlIGlzIGVtaXR0ZWQgYXQgdGhpcwogICAgICBsZXZlbC4gPGNv ZGUgY2xhc3M9ImxpdGVyYWwiPldBUk5JTkc8L2NvZGU+IGlzIHRoZSBkZWZhdWx0LiBJZiB0aGUg bGV2ZWwgaXMgc2V0IHRvCiAgICAgIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5FUlJPUjwvY29kZT4s IGl0IG1heSBpbnRlcmZlcmUgd2l0aCBub3JtYWwgb3BlcmF0aW9uLgogICAgIDwvcD48L2RkPjxk dD48c3BhbiBjbGFzcz0idGVybSI+CiAgICAgPGNvZGUgY2xhc3M9InZhcm5hbWUiPmljdV9tdWx0 aWxpYi5saWJyYXJ5X3NlYXJjaF9sb2dfbGV2ZWw8L2NvZGU+ICg8Y29kZSBjbGFzcz0idHlwZSI+ c3RyaW5nPC9jb2RlPikKICAgICA8YSBpZD0iaWQtMS4xMS43LjI4LjkuMi4zLjEuMyIgY2xhc3M9 ImluZGV4dGVybSI+PC9hPgogICAgPC9zcGFuPjwvZHQ+PGRkPjxwPgogICAgICA8Y29kZSBjbGFz cz0iZmlsZW5hbWUiPmljdV9tdWx0aWxpYjwvY29kZT4gZW1pdHMgbWVzc2FnZXMgYXQgdGhpcyBs ZXZlbCB3aGlsZQogICAgICBkZXRlcm1pbmluZyB3aGljaCBJQ1UgbGlicmFyeSB0byBjaG9vc2Uu IFRoZSBkZWZhdWx0IGlzCiAgICAgIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj5ERUJVRzE8L2NvZGU+ LiBUaGlzIHNldHRpbmcgaXMgdXNlZnVsIHRvIGRpYWdub3NlIHByb2JsZW1zCiAgICAgIHdoZW4g YSBzdWl0YWJsZSBJQ1UgbGlicmFyeSBpcyBub3QgZm91bmQuCiAgICAgPC9wPjwvZGQ+PGR0Pjxz cGFuIGNsYXNzPSJ0ZXJtIj4KICAgICA8Y29kZSBjbGFzcz0idmFybmFtZSI+aWN1X211bHRpbGli LmRlZmF1bHRfaWN1X3ZlcnNpb248L2NvZGU+ICg8Y29kZSBjbGFzcz0idHlwZSI+c3RyaW5nPC9j b2RlPikKICAgICA8YSBpZD0iaWQtMS4xMS43LjI4LjkuMi40LjEuMyIgY2xhc3M9ImluZGV4dGVy bSI+PC9hPgogICAgPC9zcGFuPjwvZHQ+PGRkPjxwPgogICAgICBJZGVudGlmaWVzIHRoZSB2ZXJz aW9uIG9mIHRoZSBJQ1UgbGlicmFyeSB0byBjaG9vc2U7IG9yLCBpZiA8Y29kZSBjbGFzcz0idmFy bmFtZSI+aWN1X211bHRpbGliLnNlYXJjaF9ieV9jb2xsYXRvcl92ZXJzaW9uPC9jb2RlPiBpcyA8 Y29kZSBjbGFzcz0ibGl0ZXJhbCI+dHJ1ZTwvY29kZT4sIHRoZSBJQ1UgbGlicmFyeSB0byBjaG9v c2UgaWYgbm8gaWRlbnRpY2FsIG1hdGNoIHRvIHRoZSBjb2xsYXRvciB2ZXJzaW9uIGlzIGZvdW5k LiBUaGUgZGVmYXVsdCBpcyB0aGUgZW1wdHkgc3RyaW5nLCBtZWFuaW5nIHRvIHVzZSB0aGUgYnVp bHQtaW4gSUNVIGxpYnJhcnkuCiAgICAgPC9wPjxwPgogICAgICBWYWxpZCB2YWx1ZXMgYXJlIGVp dGhlciBvZiB0aGUgZm9ybSA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+bWFqb3IubWlub3I8L2NvZGU+ IHN1Y2gKICAgICAgYXMgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPjcwLjE8L2NvZGU+OyBvciBhIG1h am9yIHZlcnNpb24gbnVtYmVyIGFsb25lLCBzdWNoIGFzCiAgICAgIDxjb2RlIGNsYXNzPSJsaXRl cmFsIj43MDwvY29kZT4uCiAgICAgPC9wPjwvZGQ+PGR0PjxzcGFuIGNsYXNzPSJ0ZXJtIj4KICAg ICA8Y29kZSBjbGFzcz0idmFybmFtZSI+aWN1X211bHRpbGliLmluY2x1ZGVfYnVpbHRpbjwvY29k ZT4gKDxjb2RlIGNsYXNzPSJ0eXBlIj5zdHJpbmc8L2NvZGU+KQogICAgIDxhIGlkPSJpZC0xLjEx LjcuMjguOS4yLjUuMS4zIiBjbGFzcz0iaW5kZXh0ZXJtIj48L2E+CiAgICA8L3NwYW4+PC9kdD48 ZGQ+PHA+CiAgICAgIERldGVybWluZXMgd2hldGhlciB0aGUgYnVpbHQtaW4gdmVyc2lvbiBvZiBJ Q1UgaXMgaW5jbHVkZWQgd2hlbgogICAgICBzZWFyY2hpbmcgZm9yIGEgc3VpdGFibGUgSUNVIGxp YnJhcnkuIFRoZSBkZWZhdWx0IGlzCiAgICAgIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj50cnVlPC9j b2RlPi4KICAgICA8L3A+PHA+CiAgICAgIEV2ZW4gaWYgc2V0IHRvIDxjb2RlIGNsYXNzPSJsaXRl cmFsIj5mYWxzZTwvY29kZT4sIHRoZSBidWlsdC1pbiBJQ1UgbGlicmFyeSBtYXkgYmUKICAgICAg dXNlZCBpZiBubyBvdGhlciBzdWl0YWJsZSBJQ1UgbGlicmFyeSBpcyBpZGVudGlmaWVkIGFuZAog ICAgICA8Y29kZSBjbGFzcz0idmFybmFtZSI+aWN1X211bHRpbGliLmRlZmF1bHRfaWN1X3ZlcnNp b248L2NvZGU+IGlzIHNldCB0byB0aGUgZW1wdHkKICAgICAgc3RyaW5nLgogICAgIDwvcD48L2Rk PjxkdD48c3BhbiBjbGFzcz0idGVybSI+CiAgICAgPGNvZGUgY2xhc3M9InZhcm5hbWUiPmljdV9t dWx0aWxpYi5zZWFyY2hfYnlfY29sbGF0b3JfdmVyc2lvbjwvY29kZT4gKDxjb2RlIGNsYXNzPSJ0 eXBlIj5zdHJpbmc8L2NvZGU+KQogICAgIDxhIGlkPSJpZC0xLjExLjcuMjguOS4yLjYuMS4zIiBj bGFzcz0iaW5kZXh0ZXJtIj48L2E+CiAgICA8L3NwYW4+PC9kdD48ZGQ+PHA+CiAgICAgIENhdXNl cyA8Y29kZSBjbGFzcz0iZmlsZW5hbWUiPmljdV9tdWx0aWxpYjwvY29kZT4gdG8gaWRlbnRpZnkg dGhlIElDVSBsaWJyYXJ5CiAgICAgIHdpdGggdGhlIGhpZ2hlc3QgbWFqb3IgdmVyc2lvbiB0aGF0 IG9mZmVycyB0aGUgcmVxdWlyZWQgY29sbGF0b3Igd2l0aCBhbgogICAgICBleGFjdGx5LW1hdGNo aW5nIGNvbGxhdG9yIHZlcnNpb24uIFRoZSBkZWZhdWx0IGlzIDxjb2RlIGNsYXNzPSJsaXRlcmFs Ij5mYWxzZTwvY29kZT4uCiAgICAgPC9wPjxwPgogICAgICBXaGVuIHNldCB0byA8Y29kZSBjbGFz cz0ibGl0ZXJhbCI+dHJ1ZTwvY29kZT4sIDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+aWN1X211bHRp bGliPC9jb2RlPgogICAgICByZWxpZXMgb24gZXF1YWwgY29sbGF0b3IgdmVyc2lvbnMgdG8gcHJv ZHVjZSBpZGVudGljYWwgY29sbGF0aW9uIG9yZGVyLgogICAgIDwvcD48cD4KICAgICAgSWYgbm8g SUNVIGxpYnJhcnkgaXMgZm91bmQgd2l0aCBhbiBleGFjdGx5LW1hdGNoaW5nIGNvbGxhdG9yIHZl cnNpb24sCiAgICAgIDxjb2RlIGNsYXNzPSJmaWxlbmFtZSI+aWN1X211bHRpbGliPC9jb2RlPiB3 aWxsIGZhbGwgYmFjayB0byB0aGUKICAgICAgPGNvZGUgY2xhc3M9InZhcm5hbWUiPmljdV9tdWx0 aWxpYi5kZWZhdWx0X2ljdV92ZXJzaW9uPC9jb2RlPjsgb3IgaWYgbm90IHNldCwgdG8KICAgICAg dGhlIGJ1aWx0LWluIElDVSBsaWJyYXJ5LgogICAgIDwvcD48L2RkPjwvZGw+PC9kaXY+PC9kaXY+ PGRpdiBjbGFzcz0ic2VjdDIiIGlkPSJpZC0xLjExLjcuMjguMTAiPjxkaXYgY2xhc3M9InRpdGxl cGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPkYuMTkuNC7CoEZ1bmN0aW9uczwvaDM+ PC9kaXY+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0idGFibGUiIGlkPSJJQ1UtTVVMVElMSUItRlVO Q1RJT05TIj48cCBjbGFzcz0idGl0bGUiPjxzdHJvbmc+VGFibGXCoEYuOS7CoDxjb2RlIGNsYXNz PSJmaWxlbmFtZSI+aWN1X211bHRpbGliPC9jb2RlPiBGdW5jdGlvbnM8L3N0cm9uZz48L3A+PGRp diBjbGFzcz0idGFibGUtY29udGVudHMiPjx0YWJsZSBjbGFzcz0idGFibGUiIHN1bW1hcnk9Imlj dV9tdWx0aWxpYiBGdW5jdGlvbnMiIGJvcmRlcj0iMSI+PGNvbGdyb3VwPjxjb2wgLz48L2NvbGdy b3VwPjx0aGVhZD48dHI+PHRoIGNsYXNzPSJmdW5jX3RhYmxlX2VudHJ5Ij48cCBjbGFzcz0iZnVu Y19zaWduYXR1cmUiPgogICAgICAgRnVuY3Rpb24KICAgICAgPC9wPgogICAgICA8cD4KICAgICAg IERlc2NyaXB0aW9uCiAgICAgIDwvcD48L3RoPjwvdHI+PC90aGVhZD48dGJvZHk+PHRyPjx0ZCBj bGFzcz0iZnVuY190YWJsZV9lbnRyeSI+PHAgY2xhc3M9ImZ1bmNfc2lnbmF0dXJlIj4KICAgICAg IDxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+aWN1X211bHRpbGliLmxpYnJhcnlfdmVyc2lvbnM8L2Nv ZGU+ICgpCiAgICAgICDihpIgPGNvZGUgY2xhc3M9InJldHVybnZhbHVlIj5zZXRvZiByZWNvcmQ8 L2NvZGU+CiAgICAgICAoIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5pY3VfdmVyc2lvbjwv Y29kZT48L2VtPiA8Y29kZSBjbGFzcz0idHlwZSI+dGV4dDwvY29kZT4sCiAgICAgICA8ZW0gY2xh c3M9InBhcmFtZXRlciI+PGNvZGU+dW5pY29kZV92ZXJzaW9uPC9jb2RlPjwvZW0+IDxjb2RlIGNs YXNzPSJ0eXBlIj50ZXh0PC9jb2RlPiwKICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29k ZT5jbGRyX3ZlcnNpb248L2NvZGU+PC9lbT4gPGNvZGUgY2xhc3M9InR5cGUiPnRleHQ8L2NvZGU+ LAogICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmxpYmljdWkxOG5fbmFtZTwvY29k ZT48L2VtPiA8Y29kZSBjbGFzcz0idHlwZSI+dGV4dDwvY29kZT4sCiAgICAgICA8ZW0gY2xhc3M9 InBhcmFtZXRlciI+PGNvZGU+bGliaWN1dWNfbmFtZTwvY29kZT48L2VtPiA8Y29kZSBjbGFzcz0i dHlwZSI+dGV4dDwvY29kZT4pCiAgICAgIDwvcD4KICAgICAgPHA+CiAgICAgICBSZXR1cm5zIGRl dGFpbHMgZm9yIGVhY2ggYXZhaWxhYmxlIElDVSBsaWJyYXJ5IGZvdW5kIGluCiAgICAgICA8Y29k ZSBjbGFzcz0idmFybmFtZSI+aWN1X211bHRpbGliLmxpYnJhcnlfcGF0aDwvY29kZT4uIEFsc28g aW5jbHVkZXMgdGhlCiAgICAgICBidWlsdC1pbiBJQ1UgbGlicmFyeSBpdiA8Y29kZSBjbGFzcz0i dmFybmFtZSI+aWN1X211bHRpbGliLmluY2x1ZGVfYnVpbHRpbjwvY29kZT4KICAgICAgIGlzIDxj b2RlIGNsYXNzPSJsaXRlcmFsIj50cnVlPC9jb2RlPi4KICAgICAgPC9wPjwvdGQ+PC90cj48dHI+ PHRkIGNsYXNzPSJmdW5jX3RhYmxlX2VudHJ5Ij48cCBjbGFzcz0iZnVuY19zaWduYXR1cmUiPgog ICAgICAgPGNvZGUgY2xhc3M9ImZ1bmN0aW9uIj5pY3VfbXVsdGlsaWIubGlicmFyeV9jb2xsYXRv cnM8L2NvZGU+ICggPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPm1ham9yX3ZlcnNpb248L2Nv ZGU+PC9lbT4gPGNvZGUgY2xhc3M9InR5cGUiPnRleHQ8L2NvZGU+IDxjb2RlIGNsYXNzPSJsaXRl cmFsIj5ERUZBVUxUPC9jb2RlPiA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+bnVsbDwvY29kZT4gKQog ICAgICAg4oaSIDxjb2RlIGNsYXNzPSJyZXR1cm52YWx1ZSI+c2V0b2YgcmVjb3JkPC9jb2RlPgog ICAgICAgKCA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bG9jYWxlPC9jb2RlPjwvZW0+IDxj b2RlIGNsYXNzPSJ0eXBlIj50ZXh0PC9jb2RlPiwKICAgICAgIDxlbSBjbGFzcz0icGFyYW1ldGVy Ij48Y29kZT5pY3VfdmVyc2lvbjwvY29kZT48L2VtPiA8Y29kZSBjbGFzcz0idHlwZSI+dGV4dDwv Y29kZT4sCiAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dWNhX3ZlcnNpb248L2Nv ZGU+PC9lbT4gPGNvZGUgY2xhc3M9InR5cGUiPnRleHQ8L2NvZGU+LAogICAgICAgPGVtIGNsYXNz PSJwYXJhbWV0ZXIiPjxjb2RlPmNvbGxhdG9yX3ZlcnNpb248L2NvZGU+PC9lbT4gPGNvZGUgY2xh c3M9InR5cGUiPnRleHQ8L2NvZGU+ICkKICAgICAgPC9wPgogICAgICA8cD4KICAgICAgIFJldHVy bnMgZGV0YWlscyBmb3IgYWxsIGF2YWlsYWJsZSBjb2xsYXRvcnMgcHJvdmlkZWQgYnkgdGhlIElD VSBsaWJyYXJ5CiAgICAgICB3aXRoIHRoZSBnaXZlbiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNv ZGU+bWFqb3JfdmVyc2lvbjwvY29kZT48L2VtPjsgb3IgYnkgdGhlIGJ1aWx0LWluCiAgICAgICBJ Q1UgbGlicmFyeSBpZiA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bWFqb3JfdmVyc2lvbjwv Y29kZT48L2VtPiBpcwogICAgICAgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPm51bGw8L2NvZGU+Lgog ICAgICA8L3A+PC90ZD48L3RyPjx0cj48dGQgY2xhc3M9ImZ1bmNfdGFibGVfZW50cnkiPjxwIGNs YXNzPSJmdW5jX3NpZ25hdHVyZSI+CiAgICAgICA8Y29kZSBjbGFzcz0iZnVuY3Rpb24iPmljdV9t dWx0aWxpYi5jb2xsYXRvcl92ZXJzaW9uX3NlYXJjaDwvY29kZT4gKCA8ZW0gY2xhc3M9InBhcmFt ZXRlciI+PGNvZGU+bG9jYWxlPC9jb2RlPjwvZW0+IDxjb2RlIGNsYXNzPSJ0eXBlIj50ZXh0PC9j b2RlPiwgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPnJlcXVlc3RlZF92ZXJzaW9uPC9jb2Rl PjwvZW0+IDxjb2RlIGNsYXNzPSJ0eXBlIj50ZXh0PC9jb2RlPiA8Y29kZSBjbGFzcz0ibGl0ZXJh bCI+REVGQVVMVDwvY29kZT4gPGNvZGUgY2xhc3M9ImxpdGVyYWwiPm51bGw8L2NvZGU+LCA8ZW0g Y2xhc3M9InBhcmFtZXRlciI+PGNvZGU+bG9nX29rPC9jb2RlPjwvZW0+IDxjb2RlIGNsYXNzPSJ0 eXBlIj5ib29sZWFuPC9jb2RlPiA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+REVGQVVMVDwvY29kZT4g PGNvZGUgY2xhc3M9ImxpdGVyYWwiPmZhbHNlPC9jb2RlPiApCiAgICAgICDihpIgPGNvZGUgY2xh c3M9InJldHVybnZhbHVlIj5yZWNvcmQ8L2NvZGU+CiAgICAgICAoIDxlbSBjbGFzcz0icGFyYW1l dGVyIj48Y29kZT5pY3VfdmVyc2lvbjwvY29kZT48L2VtPiA8Y29kZSBjbGFzcz0idHlwZSI+dGV4 dDwvY29kZT4sCiAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+dWNhX3ZlcnNpb248 L2NvZGU+PC9lbT4gPGNvZGUgY2xhc3M9InR5cGUiPnRleHQ8L2NvZGU+LAogICAgICAgPGVtIGNs YXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmNvbGxhdG9yX3ZlcnNpb248L2NvZGU+PC9lbT4gPGNvZGUg Y2xhc3M9InR5cGUiPnRleHQ8L2NvZGU+ICkKICAgICAgPC9wPgogICAgICA8cD4KICAgICAgIFBl cmZvcm1zIGEgc2VhcmNoIGZvciB0aGUgYXBwcm9wcmlhdGUgSUNVIGxpYnJhcnkgZ2l2ZW4gdGhl IGxvY2FsZSBuYW1lCiAgICAgICBhbmQgcmVxdWVzdGVkIGNvbGxhdG9yIHZlcnNpb24sIGFuZCBy ZXR1cm5zIGRldGFpbHMgYWJvdXQgdGhlIElDVQogICAgICAgbGlicmFyeS4KICAgICAgPC9wPgog ICAgICA8cD4KICAgICAgIElmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5yZXF1ZXN0ZWRf dmVyc2lvbjwvY29kZT48L2VtPiBpcyA8Y29kZSBjbGFzcz0ibGl0ZXJhbCI+bnVsbDwvY29kZT4s CiAgICAgICBpdCB3aWxsIHJldHVybiB0aGUgSUNVIGxpYnJhcnkgaWRlbnRpZmllZCBieQogICAg ICAgPGNvZGUgY2xhc3M9InZhcm5hbWUiPmljdV9tdWx0aWxpYi5kZWZhdWx0X2ljdV92ZXJzaW9u PC9jb2RlPiBpZiBzZXQgdG8KICAgICAgIDxjb2RlIGNsYXNzPSJsaXRlcmFsIj50cnVlPC9jb2Rl Pjsgb3RoZXJ3aXNlIHRoZSBidWlsdC1pbiBJQ1UgbGlicmFyeS4KICAgICAgPC9wPgogICAgICA8 cD4KICAgICAgIElmIDxlbSBjbGFzcz0icGFyYW1ldGVyIj48Y29kZT5sb2dfb2s8L2NvZGU+PC9l bT4gaXMgPGNvZGUgY2xhc3M9ImxpdGVyYWwiPnRydWU8L2NvZGU+LCB0aGUgc2VhcmNoCiAgICAg ICBtYXkgZW1pdCBsb2cgbWVzc2FnZXMgYXQgdGhlIGxldmVsCiAgICAgICA8Y29kZSBjbGFzcz0i dmFybmFtZSI+aWN1X211bHRpbGliLmxpYnJhcnlfc2VhcmNoX2xvZ19sZXZlbDwvY29kZT4sIHdo aWNoIG1heSBiZQogICAgICAgdXNlZnVsIGZvciBkaWFnbm9zaW5nIG1pc2NvbmZpZ3VyYXRpb24u CiAgICAgIDwvcD48L3RkPjwvdHI+PHRyPjx0ZCBjbGFzcz0iZnVuY190YWJsZV9lbnRyeSI+PHAg Y2xhc3M9ImZ1bmNfc2lnbmF0dXJlIj4KICAgICAgIDxjb2RlIGNsYXNzPSJmdW5jdGlvbiI+aWN1 X211bHRpbGliLmNvbGxhdG9yX3ZlcnNpb25zPC9jb2RlPiAoIDxlbSBjbGFzcz0icGFyYW1ldGVy Ij48Y29kZT5sb2NhbGU8L2NvZGU+PC9lbT4gPGNvZGUgY2xhc3M9InR5cGUiPnRleHQ8L2NvZGU+ ICkKICAgICAgIOKGkiA8Y29kZSBjbGFzcz0icmV0dXJudmFsdWUiPnNldG9mIHJlY29yZDwvY29k ZT4KICAgICAgICggPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxjb2RlPmljdV92ZXJzaW9uPC9jb2Rl PjwvZW0+IDxjb2RlIGNsYXNzPSJ0eXBlIj50ZXh0PC9jb2RlPiwKICAgICAgIDxlbSBjbGFzcz0i cGFyYW1ldGVyIj48Y29kZT51Y2FfdmVyc2lvbjwvY29kZT48L2VtPiA8Y29kZSBjbGFzcz0idHlw ZSI+dGV4dDwvY29kZT4sCiAgICAgICA8ZW0gY2xhc3M9InBhcmFtZXRlciI+PGNvZGU+Y29sbGF0 b3JfdmVyc2lvbjwvY29kZT48L2VtPiA8Y29kZSBjbGFzcz0idHlwZSI+dGV4dDwvY29kZT4gKQog ICAgICA8L3A+CiAgICAgIDxwPgogICAgICAgUmV0dXJucyBkZXRhaWxzIGFib3V0IGF2YWlsYWJs ZSBjb2xsYXRvcnMgZm9yIHRoZSBnaXZlbgogICAgICAgPGVtIGNsYXNzPSJwYXJhbWV0ZXIiPjxj b2RlPmxvY2FsZTwvY29kZT48L2VtPiBmcm9tIGFsbCBhdmFpbGFibGUgSUNVIGxpYnJhcmllcy4K ICAgICAgPC9wPjwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+PC9kaXY+PC9kaXY+PGJyIGNsYXNz PSJ0YWJsZS1icmVhayIgLz48L2Rpdj48ZGl2IGNsYXNzPSJzZWN0MiIgaWQ9IklDVS1NVUxUSUxJ Qi1FWEFNUExFUyI+PGRpdiBjbGFzcz0idGl0bGVwYWdlIj48ZGl2PjxkaXY+PGgzIGNsYXNzPSJ0 aXRsZSI+Ri4xOS41LsKgRXhhbXBsZXM8L2gzPjwvZGl2PjwvZGl2PjwvZGl2PjxwcmUgY2xhc3M9 InNjcmVlbiI+ClNFTEVDVCBpY3VfdmVyc2lvbiwgdW5pY29kZV92ZXJzaW9uLCBjbGRyX3ZlcnNp b24gRlJPTSBpY3VfbXVsdGlsaWIubGlicmFyeV92ZXJzaW9ucygpIExJTUlUIDM7CiBpY3VfdmVy c2lvbiB8IHVuaWNvZGVfdmVyc2lvbiB8IGNsZHJfdmVyc2lvbgotLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tCiA3MC4xICAgICAgICB8IDE0LjAgICAgICAgICAg ICB8IDQwLjAKIDY5LjEgICAgICAgIHwgMTMuMCAgICAgICAgICAgIHwgMzkuMAogNjguMiAgICAg ICAgfCAxMy4wICAgICAgICAgICAgfCAzOC4xCigzIHJvd3MpCjwvcHJlPjxwcmUgY2xhc3M9InNj cmVlbiI+ClNFTEVDVCAqIEZST00gaWN1X211bHRpbGliLmNvbGxhdG9yX3ZlcnNpb25zKCdlbl9V UycpIFdIRVJFIGljdV92ZXJzaW9uIEJFVFdFRU4gJzYwLjAnIGFuZCAnNjUuMCc7CiBpY3VfdmVy c2lvbiB8IHVjYV92ZXJzaW9uIHwgY29sbGF0b3JfdmVyc2lvbgotLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tCiA2NC4yICAgICAgICB8IDEyLjEgICAgICAgIHwg MTUzLjk3CiA2My4yICAgICAgICB8IDExLjAgICAgICAgIHwgMTUzLjg4CiA2Mi4yICAgICAgICB8 IDExLjAgICAgICAgIHwgMTUzLjg4CiA2MS4yICAgICAgICB8IDEwLjAgICAgICAgIHwgMTUzLjgw CiA2MC4zICAgICAgICB8IDEwLjAgICAgICAgIHwgMTUzLjgwCig1IHJvd3MpCjwvcHJlPjxwcmUg Y2xhc3M9InNjcmVlbiI+ClNFTEVDVCAqIEZST00gaWN1X211bHRpbGliLmNvbGxhdG9yX3ZlcnNp b25fc2VhcmNoKCdlbl9VUycsICcxNTMuOTcnKTsKIGljdV92ZXJzaW9uIHwgdWNhX3ZlcnNpb24g fCBjb2xsYXRvcl92ZXJzaW9uCi0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tLS0KIDY1LjEgICAgICAgIHwgMTIuMSAgICAgICAgfCAxNTMuOTcKKDEgcm93KQo8L3By ZT48L2Rpdj48ZGl2IGNsYXNzPSJzZWN0MiIgaWQ9IklDVS1NVUxUSUxJQi1BVVRIT1IiPjxkaXYg Y2xhc3M9InRpdGxlcGFnZSI+PGRpdj48ZGl2PjxoMyBjbGFzcz0idGl0bGUiPkYuMTkuNi7CoEF1 dGhvcnM8L2gzPjwvZGl2PjwvZGl2PjwvZGl2PjxwPgogICBKZWZmIERhdmlzIDxjb2RlIGNsYXNz PSJlbWFpbCI+Jmx0OzxhIGNsYXNzPSJlbWFpbCIgaHJlZj0ibWFpbHRvOmpkYXZpc0Bwb3N0Z3Jl c3FsLm9yZyI+amRhdmlzQHBvc3RncmVzcWwub3JnPC9hPiZndDs8L2NvZGU+LCBUaG9tYXMgTXVu cm8gPGNvZGUgY2xhc3M9ImVtYWlsIj4mbHQ7PGEgY2xhc3M9ImVtYWlsIiBocmVmPSJtYWlsdG86 dG11bnJvQHBvc3RncmVzcWwub3JnIj50bXVucm9AcG9zdGdyZXNxbC5vcmc8L2E+Jmd0OzwvY29k ZT4KICA8L3A+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0ibmF2Zm9vdGVyIj48aHIgLz48dGFibGUg d2lkdGg9IjEwMCUiIHN1bW1hcnk9Ik5hdmlnYXRpb24gZm9vdGVyIj48dHI+PHRkIHdpZHRoPSI0 MCUiIGFsaWduPSJsZWZ0Ij48YSBhY2Nlc3NrZXk9InAiIGhyZWY9ImhzdG9yZS5odG1sIiB0aXRs ZT0iRi4xOC7CoGhzdG9yZSI+UHJldjwvYT7CoDwvdGQ+PHRkIHdpZHRoPSIyMCUiIGFsaWduPSJj ZW50ZXIiPjxhIGFjY2Vzc2tleT0idSIgaHJlZj0iY29udHJpYi5odG1sIiB0aXRsZT0iQXBwZW5k aXjCoEYuwqBBZGRpdGlvbmFsIFN1cHBsaWVkIE1vZHVsZXMiPlVwPC9hPjwvdGQ+PHRkIHdpZHRo PSI0MCUiIGFsaWduPSJyaWdodCI+wqA8YSBhY2Nlc3NrZXk9Im4iIGhyZWY9ImludGFnZy5odG1s IiB0aXRsZT0iRi4yMC7CoGludGFnZyI+TmV4dDwvYT48L3RkPjwvdHI+PHRyPjx0ZCB3aWR0aD0i NDAlIiBhbGlnbj0ibGVmdCIgdmFsaWduPSJ0b3AiPkYuMTguwqBoc3RvcmXCoDwvdGQ+PHRkIHdp ZHRoPSIyMCUiIGFsaWduPSJjZW50ZXIiPjxhIGFjY2Vzc2tleT0iaCIgaHJlZj0iaW5kZXguaHRt bCIgdGl0bGU9IlBvc3RncmVTUUwgMTZkZXZlbCBEb2N1bWVudGF0aW9uIj5Ib21lPC9hPjwvdGQ+ PHRkIHdpZHRoPSI0MCUiIGFsaWduPSJyaWdodCIgdmFsaWduPSJ0b3AiPsKgRi4yMC7CoGludGFn ZzwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PjwvYm9keT48L2h0bWw+ --=-u4oNhfj6zIVO/ZOtTH+g Content-Disposition: attachment; filename*0=v8-0004-icu_multilib-contrib-extension-for-managing-ICU-l.pat; filename*1=ch Content-Type: text/x-patch; name="v8-0004-icu_multilib-contrib-extension-for-managing-ICU-l.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSAxZjMwNTQxOWMzNTBhNmYwZGI4MjQ1Y2RjNDYzMGM0OTQyYTJlMWE5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWZmIERhdmlzIDxqZWZmQGotZGF2aXMuY29tPgpEYXRlOiBT YXQsIDE0IEphbiAyMDIzIDEyOjE3OjA1IC0wODAwClN1YmplY3Q6IFtQQVRDSCB2OCA0LzRdIGlj dV9tdWx0aWxpYjogY29udHJpYiBleHRlbnNpb24gZm9yIG1hbmFnaW5nIElDVQogbGlicmFyaWVz LgoKVGhlIGljdV9tdWx0aWxpYiBtb2R1bGUgcHJvdmlkZXMgY29udHJvbCBvdmVyIHRoZSB2ZXJz aW9uIChvcgp2ZXJzaW9ucykgb2YgdGhlIElDVSBwcm92aWRlciBsaWJyYXJ5IHVzZWQgYnkgUG9z dGdyZVNRTCwgd2hpY2ggY2FuIGJlCmRpZmZlcmVudCBmcm9tIHRoZSB2ZXJzaW9uIG9mIElDVSB3 aXRoIHdoaWNoIGl0IHdhcyBidWlsdC4KCkNvbnRyb2wgb3ZlciB0aGUgc3BlY2lmaWMgSUNVIGxp YnJhcnkgaXMgaW1wb3J0YW50LCBiZWNhdXNlIGFueQpkaWZmZXJlbmNlcyBpbiBjb2xsYXRpb24g bWF5IHJlc3VsdCBpbiBjb3JydXB0IGluZGV4ZXMsIGFuZCBwb3NzaWJseQpvdGhlciBwcm9ibGVt cy4KClRoZSBwcmltYXJ5IHVzZSBjYXNlIGlzIHRoZSBhYmlsaXR5IHRvIHN0YWJpbGl6ZSB0aGUg SUNVIHZlcnNpb24KKCJsb2NrIiBpdCB0byBhIHNwZWNpZmljIHZlcnNpb24pLCBldmVuIGlmIHRo ZSBidWlsdC1pbiBJQ1UgbGlicmFyeQpjaGFuZ2VzLiBJdCBjYW4gYmUgImxvY2tlZCIgdG8gYSBz cGVjaWZpYyBtYWpvciBhbmQgbWlub3IgdmVyc2lvbiAodGhlCnNhZmVzdCBvcHRpb24pOyBvciB0 byBhIG1ham9yIHZlcnNpb24gb25seSwgZW5hYmxpbmcgbm9uLWRpc3J1cHRpdmUKbWlub3IgdmVy c2lvbiB1cGRhdGVzIG9mIElDVSAoYWxiZWl0IHdpdGggc29tZSByaXNrIG9mIHN1YnRsZQpkaWZm ZXJlbmNlcyBpbiBjb2xsYXRpb24gYmVoYXZpb3IpLgoKSWYgZW5hYmxlZCwgaWN1X211bHRpbGli IGFsc28gcHJvdmlkZXMgc3VwcG9ydCBmb3IgbXVsdGlwbGUgSUNVCmxpYnJhcmllcyBieSB1c2lu ZyAic2VhcmNoIGJ5IGNvbGxhdG9yIHZlcnNpb24iIGxvZ2ljLiBUaGlzIGxvZ2ljCmFzc3VtZXMg dGhhdCBpZGVudGljYWwgY29sbGF0b3IgdmVyc2lvbnMgKGFzIHByb3ZpZGVkIGJ5IElDVSkgbWVh bgppZGVudGljYWwgYmVoYXZpb3IsIHdoaWNoIGFsc28gY2FycmllcyBzb21lIHJpc2suCgpBdXRo b3I6IEplZmYgRGF2aXMsIFRob21hcyBNdW5ybwotLS0KIGNvbnRyaWIvTWFrZWZpbGUgICAgICAg ICAgICAgICAgICAgICAgICAgICB8ICAgNiArCiBjb250cmliL2ljdV9tdWx0aWxpYi9NYWtlZmls ZSAgICAgICAgICAgICAgfCAgMjEgKwogY29udHJpYi9pY3VfbXVsdGlsaWIvaWN1X211bHRpbGli LS0xLjAuc3FsIHwgIDQzICsKIGNvbnRyaWIvaWN1X211bHRpbGliL2ljdV9tdWx0aWxpYi5jICAg ICAgICB8IDg4MCArKysrKysrKysrKysrKysrKysrKysKIGNvbnRyaWIvaWN1X211bHRpbGliL2lj dV9tdWx0aWxpYi5jb250cm9sICB8ICAgNyArCiBjb250cmliL2ljdV9tdWx0aWxpYi9tZXNvbi5i dWlsZCAgICAgICAgICAgfCAgMjQgKwogY29udHJpYi9tZXNvbi5idWlsZCAgICAgICAgICAgICAg ICAgICAgICAgIHwgICAzICsKIGRvYy9zcmMvc2dtbC9jb250cmliLnNnbWwgICAgICAgICAgICAg ICAgICB8ICAgMSArCiBkb2Mvc3JjL3NnbWwvZmlsZWxpc3Quc2dtbCAgICAgICAgICAgICAgICAg fCAgIDEgKwogZG9jL3NyYy9zZ21sL2ljdS1tdWx0aWxpYi5zZ21sICAgICAgICAgICAgIHwgNDk2 ICsrKysrKysrKysrKwogMTAgZmlsZXMgY2hhbmdlZCwgMTQ4MiBpbnNlcnRpb25zKCspCiBjcmVh dGUgbW9kZSAxMDA2NDQgY29udHJpYi9pY3VfbXVsdGlsaWIvTWFrZWZpbGUKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBjb250cmliL2ljdV9tdWx0aWxpYi9pY3VfbXVsdGlsaWItLTEuMC5zcWwKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBjb250cmliL2ljdV9tdWx0aWxpYi9pY3VfbXVsdGlsaWIuYwogY3JlYXRl IG1vZGUgMTAwNjQ0IGNvbnRyaWIvaWN1X211bHRpbGliL2ljdV9tdWx0aWxpYi5jb250cm9sCiBj cmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9pY3VfbXVsdGlsaWIvbWVzb24uYnVpbGQKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkb2Mvc3JjL3NnbWwvaWN1LW11bHRpbGliLnNnbWwKCmRpZmYgLS1naXQg YS9jb250cmliL01ha2VmaWxlIGIvY29udHJpYi9NYWtlZmlsZQppbmRleCBiYmYyMjA0MDdiLi4w NjQ0N2Q5MzQ2IDEwMDY0NAotLS0gYS9jb250cmliL01ha2VmaWxlCisrKyBiL2NvbnRyaWIvTWFr ZWZpbGUKQEAgLTY1LDYgKzY1LDEyIEBAIGVsc2UKIEFMV0FZU19TVUJESVJTICs9IHV1aWQtb3Nz cAogZW5kaWYKIAoraWZlcSAoJCh3aXRoX2ljdSkseWVzKQorU1VCRElSUyArPSBpY3VfbXVsdGls aWIKK2Vsc2UKK0FMV0FZU19TVUJESVJTICs9IGljdV9tdWx0aWxpYgorZW5kaWYKKwogaWZlcSAo JCh3aXRoX2xpYnhtbCkseWVzKQogU1VCRElSUyArPSB4bWwyCiBlbHNlCmRpZmYgLS1naXQgYS9j b250cmliL2ljdV9tdWx0aWxpYi9NYWtlZmlsZSBiL2NvbnRyaWIvaWN1X211bHRpbGliL01ha2Vm aWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjQ4MjMwMDdhYmUKLS0t IC9kZXYvbnVsbAorKysgYi9jb250cmliL2ljdV9tdWx0aWxpYi9NYWtlZmlsZQpAQCAtMCwwICsx LDIxIEBACisjIGNvbnRyaWIvaWN1X211bHRpbGliL01ha2VmaWxlCisKK01PRFVMRV9iaWcgPSBp Y3VfbXVsdGlsaWIKK09CSlMgPSBcCisJJChXSU4zMlJFUykgXAorCWljdV9tdWx0aWxpYi5vCisK K0VYVEVOU0lPTiA9IGljdV9tdWx0aWxpYgorREFUQSA9IGljdV9tdWx0aWxpYi0tMS4wLnNxbAor UEdGSUxFREVTQyA9ICJpY3VfbXVsdGlsaWIgLS0gc3VwcG9ydCBtdWx0aXBsZSBJQ1UgbGlicmFy eSB2ZXJzaW9ucyIKKworaWZkZWYgVVNFX1BHWFMKK1BHX0NPTkZJRyA9IHBnX2NvbmZpZworUEdY UyA6PSAkKHNoZWxsICQoUEdfQ09ORklHKSAtLXBneHMpCitpbmNsdWRlICQoUEdYUykKK2Vsc2UK K3N1YmRpciA9IGNvbnRyaWIvaWN1X211bHRpbGliCit0b3BfYnVpbGRkaXIgPSAuLi8uLgoraW5j bHVkZSAkKHRvcF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmdsb2JhbAoraW5jbHVkZSAkKHRvcF9z cmNkaXIpL2NvbnRyaWIvY29udHJpYi1nbG9iYWwubWsKK2VuZGlmCmRpZmYgLS1naXQgYS9jb250 cmliL2ljdV9tdWx0aWxpYi9pY3VfbXVsdGlsaWItLTEuMC5zcWwgYi9jb250cmliL2ljdV9tdWx0 aWxpYi9pY3VfbXVsdGlsaWItLTEuMC5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMC4uNjc1MTI0MmJiNAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvaWN1X211bHRp bGliL2ljdV9tdWx0aWxpYi0tMS4wLnNxbApAQCAtMCwwICsxLDQzIEBACisvKiBjb250cmliL2lj dV9tdWx0aWxpYi9pY3VfbXVsdGlsaWItLTEuMC5zcWwgKi8KKworLS0gY29tcGxhaW4gaWYgc2Ny aXB0IGlzIHNvdXJjZWQgaW4gcHNxbCwgcmF0aGVyIHRoYW4gdmlhIENSRUFURSBFWFRFTlNJT04K K1xlY2hvIFVzZSAiQ1JFQVRFIEVYVEVOU0lPTiBpY3VfbXVsdGlsaWIiIHRvIGxvYWQgdGhpcyBm aWxlLiBccXVpdAorCitDUkVBVEUgRlVOQ1RJT04gbGlicmFyeV92ZXJzaW9ucygKKyAgICBpY3Vf dmVyc2lvbiBPVVQgVEVYVCwKKyAgICB1bmljb2RlX3ZlcnNpb24gT1VUIFRFWFQsCisgICAgY2xk cl92ZXJzaW9uIE9VVCBURVhULAorICAgIGxpYmljdWkxOG5fbmFtZSBPVVQgVEVYVCwKKyAgICBs aWJpY3V1Y19uYW1lIE9VVCBURVhUCisgICkKKyAgUkVUVVJOUyBTRVRPRiBSRUNPUkQgTEFOR1VB R0UgQworICBBUyAnTU9EVUxFX1BBVEhOQU1FJywgJ2xpYnJhcnlfdmVyc2lvbnMnOworCitDUkVB VEUgRlVOQ1RJT04gbGlicmFyeV9jb2xsYXRvcnMoCisgICAgbWFqb3JfdmVyc2lvbiBJTiBURVhU IERFRkFVTFQgTlVMTCwKKyAgICBsb2NhbGUgT1VUIFRFWFQsCisgICAgaWN1X3ZlcnNpb24gT1VU IFRFWFQsCisgICAgdWNhX3ZlcnNpb24gT1VUIFRFWFQsCisgICAgY29sbGF0b3JfdmVyc2lvbiBP VVQgVEVYVAorICApCisgIFJFVFVSTlMgU0VUT0YgUkVDT1JEIExBTkdVQUdFIEMKKyAgQVMgJ01P RFVMRV9QQVRITkFNRScsICdsaWJyYXJ5X2NvbGxhdG9ycyc7CisKK0NSRUFURSBGVU5DVElPTiBj b2xsYXRvcl92ZXJzaW9uX3NlYXJjaCAoCisgICAgbG9jYWxlIElOIFRFWFQsCisgICAgcmVxdWVz dGVkX3ZlcnNpb24gSU4gVEVYVCBERUZBVUxUIE5VTEwsCisgICAgbG9nX29rIElOIEJPT0xFQU4g REVGQVVMVCBGQUxTRSwKKyAgICBpY3VfdmVyc2lvbiBPVVQgVEVYVCwKKyAgICB1Y2FfdmVyc2lv biBPVVQgVEVYVCwKKyAgICBjb2xsYXRvcl92ZXJzaW9uIE9VVCBURVhUKQorICBSRVRVUk5TIFJF Q09SRCBMQU5HVUFHRSBDCisgIEFTICdNT0RVTEVfUEFUSE5BTUUnLCAnY29sbGF0b3JfdmVyc2lv bl9zZWFyY2gnOworCitDUkVBVEUgRlVOQ1RJT04gY29sbGF0b3JfdmVyc2lvbnMgKAorICAgIGxv Y2FsZSBJTiBURVhULAorICAgIGljdV92ZXJzaW9uIE9VVCBURVhULAorICAgIHVjYV92ZXJzaW9u IE9VVCBURVhULAorICAgIGNvbGxhdG9yX3ZlcnNpb24gT1VUIFRFWFQKKyAgKQorICBSRVRVUk5T IFNFVE9GIFJFQ09SRCBMQU5HVUFHRSBDCisgIEFTICdNT0RVTEVfUEFUSE5BTUUnLCAnY29sbGF0 b3JfdmVyc2lvbnMnOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9pY3VfbXVsdGlsaWIvaWN1X211bHRp bGliLmMgYi9jb250cmliL2ljdV9tdWx0aWxpYi9pY3VfbXVsdGlsaWIuYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4yZmRlMmE4NWQ1Ci0tLSAvZGV2L251bGwKKysrIGIv Y29udHJpYi9pY3VfbXVsdGlsaWIvaWN1X211bHRpbGliLmMKQEAgLTAsMCArMSw4ODAgQEAKKwor I2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlIDxkbGZjbi5oPgorI2luY2x1ZGUgPGxp bWl0cy5oPgorCisjaW5jbHVkZSAiY29tbW9uL3N0cmluZy5oIgorI2luY2x1ZGUgImZtZ3IuaCIK KyNpbmNsdWRlICJmdW5jYXBpLmgiCisjaW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAi bm9kZXMvZXhlY25vZGVzLmgiCisjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNsdWRl ICJ1dGlscy9ndWMuaCIKKyNpbmNsdWRlICJ1dGlscy9wZ19sb2NhbGVfaW50ZXJuYWwuaCIKKwor I2lmbmRlZiBVU0VfSUNVCisjZXJyb3IgIklDVSBzdXBwb3J0IGlzIHJlcXVpcmVkIHRvIGJ1aWxk IGljdV9tdWx0aWxpYiIKKyNlbmRpZgorCisvKgorICogV2UgZG9uJ3Qgd2FudCB0byBjYWxsIGlu dG8gZGxvcGVuJ2QgSUNVIGxpYnJhcmllcyB0aGF0IGFyZSBuZXdlciB0aGFuIHRoZQorICogb25l IHdlIHdlcmUgY29tcGlsZWQgYW5kIGxpbmtlZCBhZ2FpbnN0LCBqdXN0IGluIGNhc2UgdGhlcmUg aXMgYW4KKyAqIGluY29tcGF0aWJsZSBBUEkgY2hhbmdlLgorICovCisjZGVmaW5lIFBHX01BWF9J Q1VfTUFKT1IgVV9JQ1VfVkVSU0lPTl9NQUpPUl9OVU0KKworLyoKKyAqIFRoZSBvbGRlc3QgSUNV IHJlbGVhc2Ugd2UncmUgbGlrZWx5IHRvIGVuY291bnRlciwgYW5kIHRoYXQgaGFzIGFsbCB0aGUK KyAqIGZ1bmNpdG9ucyByZXF1aXJlZC4KKyAqLworI2RlZmluZSBQR19NSU5fSUNVX01BSk9SIDUw CisKKy8qCisgKiBFbm91Z2ggdG8gaG9sZCBlbnRyaWVzIGZvciBtaW5pbXVtIHRvIG1heGltdW0g c3VwcG9ydGVkIElDVSB2ZXJzaW9ucywgYW5kCisgKiBhbHNvIHRoZSBidWlsdGluIElDVSAoaWYg aWN1X211bHRpbGliLmluY2x1ZGVfYnVpbHRpbl9pY3UgaXMgc2V0KS4KKyAqLworI2RlZmluZSBJ Q1VfTElCX1RBQkxFU0laRSAoUEdfTUFYX0lDVV9NQUpPUiAtIFBHX01JTl9JQ1VfTUFKT1IgKyAy KQorCit0eXBlZGVmIHN0cnVjdCBpY3VfdmVyc2lvbgoreworCWludCBtYWpvcjsKKwlpbnQgbWlu b3I7Cit9IGljdV92ZXJzaW9uOworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNvbmZpZ19lbnVtX2Vu dHJ5IGxvZ19sZXZlbF9vcHRpb25zW10gPSB7CisJeyJkZWJ1ZzUiLCBERUJVRzUsIGZhbHNlfSwK Kwl7ImRlYnVnNCIsIERFQlVHNCwgZmFsc2V9LAorCXsiZGVidWczIiwgREVCVUczLCBmYWxzZX0s CisJeyJkZWJ1ZzIiLCBERUJVRzIsIGZhbHNlfSwKKwl7ImRlYnVnMSIsIERFQlVHMSwgZmFsc2V9 LAorCXsiZGVidWciLCBERUJVRzIsIHRydWV9LAorCXsibG9nIiwgTE9HLCBmYWxzZX0sCisJeyJp bmZvIiwgSU5GTywgdHJ1ZX0sCisJeyJub3RpY2UiLCBOT1RJQ0UsIGZhbHNlfSwKKwl7Indhcm5p bmciLCBXQVJOSU5HLCBmYWxzZX0sCisJeyJlcnJvciIsIEVSUk9SLCBmYWxzZX0sCisJe05VTEws IDAsIGZhbHNlfQorfTsKKworUEdfTU9EVUxFX01BR0lDOworCitzdGF0aWMgZ2V0X2ljdV9saWJy YXJ5X2hvb2tfdHlwZSBwcmV2X2ljdV9saWJyYXJ5X2hvb2sgPSBOVUxMOworCitzdGF0aWMgcGdf aWN1X2xpYnJhcnkgKmljdV9saWJyYXJ5X3RhYmxlW0lDVV9MSUJfVEFCTEVTSVpFXSA9IHt9Owor CitzdGF0aWMgY2hhciAqaWN1X2xpYnJhcnlfcGF0aCA9ICIiOworc3RhdGljIGNoYXIgKmRlZmF1 bHRfaWN1X3ZlcnNpb24gPSAiIjsKK3N0YXRpYyBpY3VfdmVyc2lvbiBkZWZhdWx0X3ZlcnNpb24g PSB7IC5tYWpvciA9IC0xLCAubWlub3IgPSAtMSB9Oworc3RhdGljIGJvb2wgc2VhcmNoX2J5X2Nv bGxhdG9yX3ZlcnNpb24gPSBmYWxzZTsKK3N0YXRpYyBib29sIGluY2x1ZGVfYnVpbHRpbiA9IHRy dWU7CitzdGF0aWMgaW50IHZlcnNpb25fbWlzbWF0Y2hfbG9nX2xldmVsID0gV0FSTklORzsKK3N0 YXRpYyBpbnQgbGlicmFyeV9zZWFyY2hfbG9nX2xldmVsID0gREVCVUcxOworCitzdGF0aWMgdm9p ZCBpbml0aWFsaXplX2d1Y3NfMSh2b2lkKTsKK3N0YXRpYyB2b2lkIGluaXRpYWxpemVfZ3Vjc18y KHZvaWQpOworc3RhdGljIHBnX2ljdV9saWJyYXJ5ICppY3VfbXVsdGlsaWJfaG9vayhPaWQgY29s bGlkLCBjb25zdCBjaGFyICpsb2NhbGUsCisJCQkJCQkJCQkJIGNvbnN0IGNoYXIgKnZlcnNpb24p Oworc3RhdGljIHBnX2ljdV9saWJyYXJ5ICppY3VfbXVsdGlsaWJfc2VhcmNoKE9pZCBjb2xsaWQs IGNvbnN0IGNoYXIgKmxvY2FsZSwKKwkJCQkJCQkJCQkgICBjb25zdCBjaGFyICp2ZXJzaW9uLAor CQkJCQkJCQkJCSAgIGJvb2wgbG9nT2spOworc3RhdGljIHZvaWQgbG9hZF9hbGxfbGlicmFyaWVz KHZvaWQpOworc3RhdGljIHBnX2ljdV9saWJyYXJ5ICpsb2FkX2ljdV9saWJyYXJ5KGludCBtYWpv cik7CitzdGF0aWMgcGdfaWN1X2xpYnJhcnkgKmdldF9pY3VfYnlfbWFqb3JfdmVyc2lvbihpbnQg bWFqb3IpOworc3RhdGljIHZvaWQgZ2V0X2xpYnJhcnlfdmVyc2lvbihjb25zdCBwZ19pY3VfbGli cmFyeSAqbGliLCBpbnQgKm1ham9yLAorCQkJCQkJCQlpbnQgKm1pbm9yKTsKKworc3RhdGljIGJv b2wgY2hlY2tfc3RyaW5nX3ZlcnNpb24oY2hhciAqKm5ld3ZhbCwgdm9pZCAqKmV4dHJhLCBHdWNT b3VyY2Ugc291cmNlKTsKK3N0YXRpYyB2b2lkIGFzc2lnbl9kZWZhdWx0X3ZlcnNpb24oY29uc3Qg Y2hhciAqbmV3dmFsLCB2b2lkICpleHRyYSk7CisKK3ZvaWQKK19QR19pbml0KCkKK3sKKwkvKlRP RE86IGVycm9yIG1lc3NhZ2VzICovCisJaWYgKCFwcm9jZXNzX3NoYXJlZF9wcmVsb2FkX2xpYnJh cmllc19pbl9wcm9ncmVzcykKKwkJZWxvZyhFUlJPUiwgImljdV9tdWx0aWxpYiBtdXN0IGJlIGxv YWRlZCBieSBzaGFyZWRfcHJlbG9hZF9saWJyYXJpZXMiKTsKKworCXByZXZfaWN1X2xpYnJhcnlf aG9vayA9IGdldF9pY3VfbGlicmFyeV9ob29rOworCWdldF9pY3VfbGlicmFyeV9ob29rID0gaWN1 X211bHRpbGliX2hvb2s7CisKKwlpbml0aWFsaXplX2d1Y3NfMSgpOworCWxvYWRfYWxsX2xpYnJh cmllcygpOworCWluaXRpYWxpemVfZ3Vjc18yKCk7Cit9CisKKy8qIGluaXRpYWxpemUgR1VDcyBi ZWZvcmUgbG9hZGluZyBJQ1UgbGlicmFyaWVzICovCitzdGF0aWMgdm9pZAoraW5pdGlhbGl6ZV9n dWNzXzEoKQoreworCS8qCisJICogVGhlIGxpYnJhcnkgc2VhcmNoIHBhdGggaXMgaW5pdGlhbGl6 ZWQgb25jZSBwZXIgc2VydmVyIHN0YXJ0IGFuZCBub3QKKwkgKiBjaGFuZ2FibGUgLS0gdGhpcyBr ZWVwcyB0aGUgbWVtb3J5IHVzYWdlIGluIFRvcE1lbW9yeUNvbnRleHQgYm91bmRlZC4KKwkgKi8K KwlEZWZpbmVDdXN0b21TdHJpbmdWYXJpYWJsZSgiaWN1X211bHRpbGliLmxpYnJhcnlfcGF0aCIs CisJCQkJCQkJICAgIkZpbGVzeXN0ZW0gcGF0aCB3aGVyZSBJQ1UgbGlicmFyaWVzIGFyZSBpbnN0 YWxsZWQuIiwKKwkJCQkJCQkgICBOVUxMLAorCQkJCQkJCSAgICZpY3VfbGlicmFyeV9wYXRoLAor CQkJCQkJCSAgICIiLAorCQkJCQkJCSAgIFBHQ19QT1NUTUFTVEVSLAorCQkJCQkJCSAgIDAsIE5V TEwsIE5VTEwsIE5VTEwpOworCURlZmluZUN1c3RvbUVudW1WYXJpYWJsZSgiaWN1X211bHRpbGli LnZlcnNpb25fbWlzbWF0Y2hfbG9nX2xldmVsIiwKKwkJCQkJCQkgIkxldmVsIG9mIGxvZyBtZXNz YWdlIHdoZW4gYSBjb2xsYXRvciB2ZXJzaW9uIG1pc21hdGNoIGlzIGRldGVjdGVkLiIsCisJCQkJ CQkJIE5VTEwsCisJCQkJCQkJICZ2ZXJzaW9uX21pc21hdGNoX2xvZ19sZXZlbCwKKwkJCQkJCQkg V0FSTklORywKKwkJCQkJCQkgbG9nX2xldmVsX29wdGlvbnMsCisJCQkJCQkJIFBHQ19TVVNFVCwK KwkJCQkJCQkgMCwgTlVMTCwgTlVMTCwgTlVMTCk7CisJRGVmaW5lQ3VzdG9tRW51bVZhcmlhYmxl KCJpY3VfbXVsdGlsaWIubGlicmFyeV9zZWFyY2hfbG9nX2xldmVsIiwKKwkJCQkJCQkgIkxldmVs IG9mIGxvZyBtZXNzYWdlcyByZWxhdGVkIHRvIHNlYXJjaGluZyBmb3IgYW4gSUNVIGxpYnJhcnku IiwKKwkJCQkJCQkgTlVMTCwKKwkJCQkJCQkgJmxpYnJhcnlfc2VhcmNoX2xvZ19sZXZlbCwKKwkJ CQkJCQkgREVCVUcxLAorCQkJCQkJCSBsb2dfbGV2ZWxfb3B0aW9ucywKKwkJCQkJCQkgUEdDX1NV U0VULAorCQkJCQkJCSAwLCBOVUxMLCBOVUxMLCBOVUxMKTsKK30KKworLyogaW5pdGlhbGl6ZSBH VUNzIGFmdGVyIGxvYWRpbmcgSUNVIGxpYnJhcmllcyAqLworc3RhdGljIHZvaWQKK2luaXRpYWxp emVfZ3Vjc18yKCkKK3sKKwlEZWZpbmVDdXN0b21TdHJpbmdWYXJpYWJsZSgiaWN1X211bHRpbGli LmRlZmF1bHRfaWN1X3ZlcnNpb24iLAorCQkJCQkJCSAgICJUaGUgdmVyc2lvbiBvZiB0aGUgZGVm YXVsdCBJQ1UgbGlicmFyeS4iLAorCQkJCQkJCSAgICJDYW4gYmUgc3BlY2lmaWVkIHdpdGggbWFq b3IgYW5kIG1pbm9yIHZlcnNpb25zLCBvciBtYWpvciB2ZXJzaW9uIG9ubHkuIiwKKwkJCQkJCQkg ICAmZGVmYXVsdF9pY3VfdmVyc2lvbiwKKwkJCQkJCQkgICAiIiwKKwkJCQkJCQkgICBQR0NfU1VT RVQsCisJCQkJCQkJICAgMCwgY2hlY2tfc3RyaW5nX3ZlcnNpb24sIGFzc2lnbl9kZWZhdWx0X3Zl cnNpb24sIE5VTEwpOworCURlZmluZUN1c3RvbUJvb2xWYXJpYWJsZSgiaWN1X211bHRpbGliLmlu Y2x1ZGVfYnVpbHRpbiIsCisJCQkJCQkJICJJbmNsdWRlIGJ1aWx0LWluIElDVSBsaWJyYXJ5IHdo ZW4gbGlzdGluZyBvciBzZWFyY2hpbmcgbGlicmFyaWVzLiIsCisJCQkJCQkJIE5VTEwsCisJCQkJ CQkJICZpbmNsdWRlX2J1aWx0aW4sCisJCQkJCQkJIHRydWUsCisJCQkJCQkJIFBHQ19TVVNFVCwK KwkJCQkJCQkgMCwgTlVMTCwgTlVMTCwgTlVMTCk7CisJRGVmaW5lQ3VzdG9tQm9vbFZhcmlhYmxl KCJpY3VfbXVsdGlsaWIuc2VhcmNoX2J5X2NvbGxhdG9yX3ZlcnNpb24iLAorCQkJCQkJCSAiRW5h YmxlIHNlYXJjaGluZyBmb3IgdGhlIElDVSBsaWJyYXJ5IGJhc2VkIG9uIHRoZSBjb2xsYXRvciB2 ZXJzaW9uLiIsCisJCQkJCQkJIE5VTEwsCisJCQkJCQkJICZzZWFyY2hfYnlfY29sbGF0b3JfdmVy c2lvbiwKKwkJCQkJCQkgZmFsc2UsCisJCQkJCQkJIFBHQ19TVVNFVCwKKwkJCQkJCQkgMCwgTlVM TCwgTlVMTCwgTlVMTCk7Cit9CisKK3N0YXRpYyBib29sCitwYXJzZV9pY3VfdmVyc2lvbihjb25z dCBjaGFyICp2ZXJzaW9uLCBpY3VfdmVyc2lvbiAqb3V0X3ZlcnNpb24pCit7CisJc2l6ZV90CWlu cHV0X2xlbiA9IHN0cmxlbih2ZXJzaW9uKTsKKwlpbnQJCXBhcnNlX2xlbjsKKwlpbnQJCXBhcnNl X21ham9yOworCWludAkJcGFyc2VfbWlub3I7CisKKwlpZiAoc3NjYW5mKHZlcnNpb24sICIlZC4l ZCVuIiwKKwkJCSAgICZwYXJzZV9tYWpvciwgJnBhcnNlX21pbm9yLCAmcGFyc2VfbGVuKSA9PSAy ICYmCisJCWlucHV0X2xlbiA9PSBwYXJzZV9sZW4pCisJeworCQlvdXRfdmVyc2lvbi0+bWFqb3Ig PSBwYXJzZV9tYWpvcjsKKwkJb3V0X3ZlcnNpb24tPm1pbm9yID0gcGFyc2VfbWlub3I7CisJCXJl dHVybiB0cnVlOworCX0KKwllbHNlIGlmIChzc2NhbmYodmVyc2lvbiwgIiVkJW4iLCAmcGFyc2Vf bWFqb3IsICZwYXJzZV9sZW4pID09IDEgJiYKKwkJCSBpbnB1dF9sZW4gPT0gcGFyc2VfbGVuKQor CXsKKwkJb3V0X3ZlcnNpb24tPm1ham9yID0gcGFyc2VfbWFqb3I7CisJCW91dF92ZXJzaW9uLT5t aW5vciA9IC0xOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0 YXRpYyBib29sCitjaGVja19zdHJpbmdfdmVyc2lvbihjaGFyICoqbmV3dmFsLCB2b2lkICoqZXh0 cmEsIEd1Y1NvdXJjZSBzb3VyY2UpCit7CisJcGdfaWN1X2xpYnJhcnkJKmxpYjsKKwlpY3VfdmVy c2lvbgkJKm15ZXh0cmE7CisJaWN1X3ZlcnNpb24JCSBwYXJzZWRfdmVyc2lvbjsKKworCWlmICgq bmV3dmFsID09IE5VTEwgfHwgKm5ld3ZhbFswXSA9PSAnXDAnKQorCQlyZXR1cm4gdHJ1ZTsKKwor CWlmICghcGFyc2VfaWN1X3ZlcnNpb24oKm5ld3ZhbCwgJnBhcnNlZF92ZXJzaW9uKSkKKwl7CisJ CUdVQ19jaGVja19lcnJtc2coImVycm9yIHBhcnNpbmcgSUNVIHZlcnNpb24gXCIlc1wiIiwgKm5l d3ZhbCk7CisJCUdVQ19jaGVja19lcnJoaW50KCJUaGUgSUNVIHZlcnNpb24gc2hvdWxkIGJlIGVp dGhlciBpbiB0aGUgZm9ybSBcIm1ham9yLm1pbm9yXCIsICIKKwkJCQkJCSAgIm9yIGp1c3QgYmUg YSBwbGFpbiBtYWpvciB2ZXJzaW9uIG51bWJlci4iKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwor CWlmIChwYXJzZWRfdmVyc2lvbi5tYWpvciA8IFBHX01JTl9JQ1VfTUFKT1IgfHwKKwkJcGFyc2Vk X3ZlcnNpb24ubWFqb3IgPiBQR19NQVhfSUNVX01BSk9SKQorCXsKKwkJR1VDX2NoZWNrX2Vycm1z ZygibWFqb3IgdmVyc2lvbiAlZCBpcyBvdXQgb2YgcmFuZ2UiLAorCQkJCQkJIHBhcnNlZF92ZXJz aW9uLm1ham9yKTsKKwkJR1VDX2NoZWNrX2VycmhpbnQoIklDVSBtYWpvciB2ZXJzaW9uIG11c3Qg YmUgYmV0d2VlbiAlZCBhbmQgJWQuIiwKKwkJCQkJCSAgUEdfTUlOX0lDVV9NQUpPUiwgUEdfTUFY X0lDVV9NQUpPUik7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlsaWIgPSBnZXRfaWN1X2J5X21h am9yX3ZlcnNpb24ocGFyc2VkX3ZlcnNpb24ubWFqb3IpOworCWlmICghbGliKQorCXsKKwkJR1VD X2NoZWNrX2Vycm1zZygiSUNVIGxpYnJhcnkgd2l0aCBtYWpvciB2ZXJzaW9uICVkIG5vdCBmb3Vu ZCIsCisJCQkJCQkgcGFyc2VkX3ZlcnNpb24ubWFqb3IpOworCQlyZXR1cm4gZmFsc2U7CisJfQor CisJaWYgKHBhcnNlZF92ZXJzaW9uLm1pbm9yICE9IC0xICYmIGxpYi0+bWlub3JfdmVyc2lvbiAh PSBwYXJzZWRfdmVyc2lvbi5taW5vcikKKwl7CisJCUdVQ19jaGVja19lcnJtc2coIklDVSBsaWJy YXJ5IHdpdGggbWFqb3IgdmVyc2lvbiAlZCBoYXMgbWlub3IgdmVyc2lvbiAlZDsgIgorCQkJCQkJ ICJleHBlY3RlZCBtaW5vciB2ZXJzaW9uICVkIiwKKwkJCQkJCSBsaWItPm1ham9yX3ZlcnNpb24s IGxpYi0+bWlub3JfdmVyc2lvbiwKKwkJCQkJCSBwYXJzZWRfdmVyc2lvbi5taW5vcik7CisJCXJl dHVybiBmYWxzZTsKKwl9CisKKwlteWV4dHJhID0gZ3VjX21hbGxvYyhFUlJPUiwgc2l6ZW9mKGlj dV92ZXJzaW9uKSk7CisJKm15ZXh0cmEgPSBwYXJzZWRfdmVyc2lvbjsKKwkqZXh0cmEgPSBteWV4 dHJhOworCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lkCithc3NpZ25fZGVmYXVsdF92 ZXJzaW9uKGNvbnN0IGNoYXIgKm5ld3ZhbCwgdm9pZCAqZXh0cmEpCit7CisJaWN1X3ZlcnNpb24g Km15ZXh0cmEgPSAoaWN1X3ZlcnNpb24gKikgZXh0cmE7CisKKwlpZiAobXlleHRyYSA9PSBOVUxM KQorCQlyZXR1cm47CisKKwlkZWZhdWx0X3ZlcnNpb24gPSAqbXlleHRyYTsKK30KKworc3RhdGlj IHZvaWQKK2xvYWRfYWxsX2xpYnJhcmllcygpCit7CisJcGdfaWN1X2xpYnJhcnkgKmJ1aWx0aW4g PSBnZXRfYnVpbHRpbl9pY3VfbGlicmFyeSgpOworCisJaWN1X2xpYnJhcnlfdGFibGVbSUNVX0xJ Ql9UQUJMRVNJWkUgLSAxXSA9IGJ1aWx0aW47CisKKwllcmVwb3J0KExPRywgKGVycm1zZygiaWN1 X211bHRpbGliOiByZXRyaWV2ZWQgYnVpbHQtaW4gSUNVIHZlcnNpb24gJWQuJWQiLAorCQkJCQkJ IGJ1aWx0aW4tPm1ham9yX3ZlcnNpb24sIGJ1aWx0aW4tPm1pbm9yX3ZlcnNpb24pKSk7CisKKwlm b3IgKGludCBtYWpvciA9IFBHX01BWF9JQ1VfTUFKT1I7IG1ham9yID49IFBHX01JTl9JQ1VfTUFK T1I7IG1ham9yLS0pCisJCWljdV9saWJyYXJ5X3RhYmxlW21ham9yIC0gUEdfTUlOX0lDVV9NQUpP Ul0gPSBsb2FkX2ljdV9saWJyYXJ5KG1ham9yKTsKK30KKworc3RhdGljIHBnX2ljdV9saWJyYXJ5 ICoKK2dldF9pY3VfYnlfbWFqb3JfdmVyc2lvbihpbnQgbWFqb3IpCit7CisJcGdfaWN1X2xpYnJh cnkgKmxpYjsKKwlpZiAobWFqb3IgPCBQR19NSU5fSUNVX01BSk9SIHx8IG1ham9yID4gUEdfTUFY X0lDVV9NQUpPUikKKwkJZXJlcG9ydChFUlJPUiwgKGVycm1zZygibWFqb3IgdmVyc2lvbiAlZCBp cyBvdXQgb2YgcmFuZ2UiLCBtYWpvcikpKTsKKworCWxpYiA9IGljdV9saWJyYXJ5X3RhYmxlW21h am9yIC0gUEdfTUlOX0lDVV9NQUpPUl07CisJcmV0dXJuIGxpYjsKK30KKworc3RhdGljIHZvaWQK K2dldF9saWJyYXJ5X3ZlcnNpb24oY29uc3QgcGdfaWN1X2xpYnJhcnkgKmxpYiwgaW50ICptYWpv ciwgaW50ICptaW5vcikKK3sKKwlVVmVyc2lvbkluZm8gdmVyc2lvbl9pbmZvOworCWxpYi0+Z2V0 SUNVVmVyc2lvbih2ZXJzaW9uX2luZm8pOworCSptYWpvciA9IHZlcnNpb25faW5mb1swXTsKKwkq bWlub3IgPSB2ZXJzaW9uX2luZm9bMV07CisJcmV0dXJuOworfQorCisvKgorICogRmlsbCBpbiBv dXRfdmVyc2lvbiAod2hpY2ggbXVzdCBoYXZlIFVfTUFYX1ZFUlNJT05fU1RSSU5HX0xFTkdUSCBi eXRlcworICogYXZhaWxhYmxlKSB3aXRoIHRoZSBjb2xsYXRvciB2ZXJzaW9uIG9mIHRoZSBnaXZl biBsb2NhbGUgaW4gdGhlIGdpdmVuCisgKiBsaWJyYXJ5LiBSZXR1cm4gZmFsc2UgaWYgdGhlIGNv bGxhdG9yIGlzIG5vdCBmb3VuZC4KKyAqLworc3RhdGljIGJvb2wKK2xpYl9jb2xsYXRvcl92ZXJz aW9uKHBnX2ljdV9saWJyYXJ5ICpsaWIsIGNvbnN0IGNoYXIgKmxvY2FsZSwKKwkJCQkJIGNoYXIg Km91dF92ZXJzaW9uKQoreworCVVDb2xsYXRvcgkJKmNvbGxhdG9yOworCVVWZXJzaW9uSW5mbwkg dmVyc2lvbl9pbmZvOworCVVFcnJvckNvZGUJCSBzdGF0dXM7CisKKwlzdGF0dXMgPSBVX1pFUk9f RVJST1I7CisJY29sbGF0b3IgPSBsaWItPm9wZW5Db2xsYXRvcihsb2NhbGUsICZzdGF0dXMpOwor CisJaWYgKCFjb2xsYXRvcikKKwkJcmV0dXJuIGZhbHNlOworCisJbGliLT5nZXRDb2xsYXRvclZl cnNpb24oY29sbGF0b3IsIHZlcnNpb25faW5mbyk7CisJbGliLT52ZXJzaW9uVG9TdHJpbmcodmVy c2lvbl9pbmZvLCBvdXRfdmVyc2lvbik7CisJbGliLT5jbG9zZUNvbGxhdG9yKGNvbGxhdG9yKTsK KworCXJldHVybiB0cnVlOworfQorCisvKgorICogRmluZCB0aGUgcmlnaHQgSUNVIGxpYnJhcnkg Zm9yIHRoZSBnaXZlbiBsb2NhbGUgYW5kIHZlcnNpb24uIFRoZSByZXN1bHRpbmcKKyAqIGxpYnJh cnkgbWF5IG9yIG1heSBub3QgcHJvdmlkZSBhIGNvbGxhdG9yIHdpdGggYW4gZXhhY3RseS1tYXRj aGluZworICogdmVyc2lvbi4KKyAqCisgKiBJZiBzZWFyY2hfYnlfY29sbGF0b3JfdmVyc2lvbiBp cyBzZXQsIHNjYW4gdGhlIHRhYmxlIChmaXJzdCB0aGUgYnVpbHQtaW4KKyAqIElDVSBsaWJyYXJ5 LCB0aGVuIGRlc2NlbmRpbmcgb3JkZXIgb2YgbWFqb3IgdmVyc2lvbnMpIHRvIGZpbmQgdGhlIGZp cnN0CisgKiBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgYSBjb2xsYXRvciBvZiB0aGUgZ2l2ZW4gbG9j YWxlIHdpdGggYSBtYXRjaGluZworICogdmVyc2lvbi4KKyAqCisgKiBJZiBubyBleGFjdGx5IG1h dGNoaW5nIHZlcnNpb24gaXMgZm91bmQsIGFuZCBkZWZhdWx0X21ham9yX3ZlcnNpb24gaXMgc2V0 LAorICogcmV0dXJuIHRoZSBkZWZhdWx0IGxpYnJhcnkuCisgKgorICogT3RoZXJ3aXNlIGZhbGwg YmFjayB0byB0aGUgYnVpbHQtaW4gbGlicmFyeS4KKyAqLworc3RhdGljIHBnX2ljdV9saWJyYXJ5 ICoKK2ljdV9tdWx0aWxpYl9ob29rKE9pZCBjb2xsaWQsIGNvbnN0IGNoYXIgKmxvY2FsZSwKKwkJ CQkgIGNvbnN0IGNoYXIgKnJlcXVlc3RlZF92ZXJzaW9uKQoreworCXJldHVybiBpY3VfbXVsdGls aWJfc2VhcmNoKGNvbGxpZCwgbG9jYWxlLCByZXF1ZXN0ZWRfdmVyc2lvbiwgdHJ1ZSk7Cit9CisK Ky8qCisgKgorICovCitzdGF0aWMgcGdfaWN1X2xpYnJhcnkgKgoraWN1X211bHRpbGliX3NlYXJj aChPaWQgY29sbGlkLCBjb25zdCBjaGFyICpsb2NhbGUsCisJCQkJCWNvbnN0IGNoYXIgKnJlcXVl c3RlZF92ZXJzaW9uLCBib29sIGxvZ09rKQoreworCWNoYXIJCQkgYWN0dWFsX3ZlcnNpb25bVV9N QVhfVkVSU0lPTl9TVFJJTkdfTEVOR1RIXTsKKwlwZ19pY3VfbGlicmFyeQkqZm91bmRfbGliID0g TlVMTDsKKworCS8qCisJICogSWYgYW5vdGhlciBob29rIHdhcyBzZXQgZmlyc3QsIGRlZmVyIHRv IHRoYXQgdW5sZXNzIGl0IHJldHVybnMgTlVMTCBvcgorCSAqIGEgbGlicmFyeSB0aGF0IGRvZXNu J3QgY29udGFpbiB0aGUgZ2l2ZW4gY29sbGF0b3IgYXQgYWxsLiBUaGlzIG1heQorCSAqIHJlc3Vs dCBpbiBhIG1pc21hdGNoaW5nIGNvbGxhdG9yIHZlcnNpb24sIGJ1dCB3ZSBkb24ndCB3YW50IHRv CisJICogc3BlY3VsYXRlIGFib3V0IHdoYXQncyBiZXR0ZXIgb3Igd29yc2UgaW4gdGhlIHByZXNl bmNlIG9mIG90aGVyIGhvb2tzLgorCSAqLworCWlmIChwcmV2X2ljdV9saWJyYXJ5X2hvb2spCisJ eworCQlwZ19pY3VfbGlicmFyeSAqdG1wX2xpYjsKKwkJdG1wX2xpYiA9IHByZXZfaWN1X2xpYnJh cnlfaG9vayhjb2xsaWQsIGxvY2FsZSwgcmVxdWVzdGVkX3ZlcnNpb24pOworCQlpZiAodG1wX2xp YiAmJiBsaWJfY29sbGF0b3JfdmVyc2lvbih0bXBfbGliLCBsb2NhbGUsIGFjdHVhbF92ZXJzaW9u KSkKKwkJCWZvdW5kX2xpYiA9IHRtcF9saWI7CisJfQorCisJaWYgKCFmb3VuZF9saWIgJiYgc2Vh cmNoX2J5X2NvbGxhdG9yX3ZlcnNpb24gJiYgcmVxdWVzdGVkX3ZlcnNpb24gIT0gTlVMTCkKKwl7 CisJCS8qCisJCSAqIFNlYXJjaCBmcm9tIG5ld2VzdCBsaWJyYXJ5IHRvIG9sZGVzdCBmb3IgYSBt YXRjaGluZyB2ZXJzaW9uIG9mIHRoZQorCQkgKiBjb2xsYXRvciB3aXRoIHRoZSBnaXZlbiBuYW1l LgorCQkgKi8KKwkJZm9yIChpbnQgaSA9IElDVV9MSUJfVEFCTEVTSVpFIC0gMTsgaSA+PSAwOyBp LS0pCisJCXsKKwkJCWNoYXIJCQkgdG1wX3ZlcnNpb25bVV9NQVhfVkVSU0lPTl9TVFJJTkdfTEVO R1RIXTsKKwkJCXBnX2ljdV9saWJyYXJ5CSp0bXBfbGliID0gaWN1X2xpYnJhcnlfdGFibGVbaV07 CisKKwkJCWlmICh0bXBfbGliID09IE5VTEwpCisJCQkJY29udGludWU7CisKKwkJCWlmICghaW5j bHVkZV9idWlsdGluICYmIGkgPT0gSUNVX0xJQl9UQUJMRVNJWkUgLSAxKQorCQkJCWNvbnRpbnVl OworCisJCQlpZiAobGliX2NvbGxhdG9yX3ZlcnNpb24odG1wX2xpYiwgbG9jYWxlLCB0bXBfdmVy c2lvbikgJiYKKwkJCQlzdHJjbXAocmVxdWVzdGVkX3ZlcnNpb24sIHRtcF92ZXJzaW9uKSA9PSAw KQorCQkJeworCQkJCXN0cmNweShhY3R1YWxfdmVyc2lvbiwgdG1wX3ZlcnNpb24pOworCQkJCWZv dW5kX2xpYiA9IHRtcF9saWI7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoIWZv dW5kX2xpYiAmJiBkZWZhdWx0X3ZlcnNpb24ubWFqb3IgIT0gLTEpCisJeworCQlwZ19pY3VfbGli cmFyeSAqdG1wX2xpYjsKKwkJdG1wX2xpYiA9IGdldF9pY3VfYnlfbWFqb3JfdmVyc2lvbihkZWZh dWx0X3ZlcnNpb24ubWFqb3IpOworCQlpZiAoIXRtcF9saWIpCisJCQllcmVwb3J0KEVSUk9SLAor CQkJCQkoZXJybXNnKCJpY3VfbXVsdGlsaWI6IGRlZmF1bHQgbWFqb3IgdmVyc2lvbiAlZCBub3Qg Zm91bmQiLAorCQkJCQkJCWRlZmF1bHRfdmVyc2lvbi5tYWpvcikpKTsKKwkJaWYgKGxpYl9jb2xs YXRvcl92ZXJzaW9uKHRtcF9saWIsIGxvY2FsZSwgYWN0dWFsX3ZlcnNpb24pKQorCQkJZm91bmRf bGliID0gdG1wX2xpYjsKKwkJZWxzZSBpZiAobG9nT2spCisJCQllcmVwb3J0KGxpYnJhcnlfc2Vh cmNoX2xvZ19sZXZlbCwKKwkJCQkJKGVycm1zZygiaWN1X211bHRpbGliOiBmb3VuZCBkZWZhdWx0 IElDVSAlZC4lZCwgYnV0IGNvbGxhdG9yIFwiJXNcIiBub3QgZm91bmQiLAorCQkJCQkJCXRtcF9s aWItPm1ham9yX3ZlcnNpb24sIHRtcF9saWItPm1pbm9yX3ZlcnNpb24sIGxvY2FsZSkpKTsKKwl9 CisKKwlpZiAoIWZvdW5kX2xpYiAmJiBpbmNsdWRlX2J1aWx0aW4pCisJeworCQlwZ19pY3VfbGli cmFyeSAqdG1wX2xpYjsKKwkJdG1wX2xpYiA9IGljdV9saWJyYXJ5X3RhYmxlW0lDVV9MSUJfVEFC TEVTSVpFIC0gMV07CisJCWlmIChsaWJfY29sbGF0b3JfdmVyc2lvbih0bXBfbGliLCBsb2NhbGUs IGFjdHVhbF92ZXJzaW9uKSkKKwkJCWZvdW5kX2xpYiA9IHRtcF9saWI7CisJCWVsc2UgaWYgKGxv Z09rKQorCQkJZXJlcG9ydChsaWJyYXJ5X3NlYXJjaF9sb2dfbGV2ZWwsCisJCQkJCShlcnJtc2co ImljdV9tdWx0aWxpYjogZm91bmQgYnVpbHQtaW4gSUNVICVkLiVkLCBidXQgY29sbGF0b3IgXCIl c1wiIG5vdCBmb3VuZCIsCisJCQkJCQkJdG1wX2xpYi0+bWFqb3JfdmVyc2lvbiwgdG1wX2xpYi0+ bWlub3JfdmVyc2lvbiwgbG9jYWxlKSkpOworCX0KKworCS8qIGlmIG5vdCBmb3VuZCwgZmFsbCBi YWNrIHRvIGJ1aWx0LWluIG9yIG90aGVyIGhvb2sgKi8KKwlpZiAoIWZvdW5kX2xpYikKKwkJcmV0 dXJuIE5VTEw7CisKKwlpZiAobG9nT2spCisJCWVyZXBvcnQobGlicmFyeV9zZWFyY2hfbG9nX2xl dmVsLAorCQkJCShlcnJtc2coImljdV9tdWx0aWxpYjogZm91bmQgSUNVIHZlcnNpb24gJWQuJWQg cHJvdmlkaW5nIGNvbGxhdG9yIHZlcnNpb24gXCIlc1wiIGZvciBsb2NhbGUgXCIlc1wiIiwKKwkJ CQkJCWZvdW5kX2xpYi0+bWFqb3JfdmVyc2lvbiwgZm91bmRfbGliLT5taW5vcl92ZXJzaW9uLAor CQkJCQkJYWN0dWFsX3ZlcnNpb24sIGxvY2FsZSkpKTsKKworCS8qCisJICogVGhpcyBpcyBzb21l d2hhdCByZWR1bmRhbnQgd2l0aCBhIHNpbWlsYXIgd2FybmluZyBpbiBwZ19sb2NhbGUuYywgYnV0 CisJICogaXQgcHJvdmlkZXMgZGV0YWlscyBhYm91dCB0aGUgbG9jYWxlIG5hbWUgYW5kIElDVSB2 ZXJzaW9uLCB3aGljaCBpcworCSAqIGhlbHBmdWwgd2hlbiBtdWx0aXBsZSBJQ1UgbGlicmFyaWVz IGFyZSBpbiB1c2UuCisJICovCisJaWYgKHJlcXVlc3RlZF92ZXJzaW9uICYmIGxvZ09rICYmCisJ CXN0cmNtcChyZXF1ZXN0ZWRfdmVyc2lvbiwgYWN0dWFsX3ZlcnNpb24pICE9IDApCisJeworCQll cmVwb3J0KHZlcnNpb25fbWlzbWF0Y2hfbG9nX2xldmVsLAorCQkJCShlcnJtc2coImljdV9tdWx0 aWxpYjogY29sbGF0b3IgdmVyc2lvbiBtaXNtYXRjaCBkZXRlY3RlZCBmb3IgbG9jYWxlIFwiJXNc IiIsCisJCQkJCQlsb2NhbGUpLAorCQkJCSBlcnJkZXRhaWwoIklDVSAlZC4lZCBwcm92aWRlcyBj b2xsYXRvciB2ZXJzaW9uIFwiJXNcIiBmb3IgbG9jYWxlIFwiJXNcIjsgZXhwZWN0ZWQgdmVyc2lv biBcIiVzXCIuIiwKKwkJCQkJCSAgIGZvdW5kX2xpYi0+bWFqb3JfdmVyc2lvbiwgZm91bmRfbGli LT5taW5vcl92ZXJzaW9uLAorCQkJCQkJICAgYWN0dWFsX3ZlcnNpb24sIGxvY2FsZSwgcmVxdWVz dGVkX3ZlcnNpb24pKSk7CisJfQorCisJcmV0dXJuIGZvdW5kX2xpYjsKK30KKworUEdfRlVOQ1RJ T05fSU5GT19WMShsaWJyYXJ5X3ZlcnNpb25zKTsKK0RhdHVtCitsaWJyYXJ5X3ZlcnNpb25zKFBH X0ZVTkNUSU9OX0FSR1MpCit7CisjZGVmaW5lIExJQlJBUllfVkVSU0lPTlNfQ09MUyA1CisJUmV0 dXJuU2V0SW5mbyAqcnNpbmZvID0gKFJldHVyblNldEluZm8gKikgZmNpbmZvLT5yZXN1bHRpbmZv OworCURhdHVtICAgICAgICAgICB2YWx1ZXNbTElCUkFSWV9WRVJTSU9OU19DT0xTXTsKKwlib29s ICAgICAgICAgICAgbnVsbHNbTElCUkFSWV9WRVJTSU9OU19DT0xTXTsKKworCUluaXRNYXRlcmlh bGl6ZWRTUkYoZmNpbmZvLCAwKTsKKworCWZvciAoaW50IGkgPSBJQ1VfTElCX1RBQkxFU0laRSAt IDE7IGkgPj0gMDsgaS0tKQorCXsKKwkJVUVycm9yQ29kZSAgICAgIHN0YXR1czsKKwkJVVZlcnNp b25JbmZvIHZlcnNpb25faW5mbzsKKwkJY2hhciAgICAgICAgICAgIHZlcnNpb25fc3RyaW5nW1Vf TUFYX1ZFUlNJT05fU1RSSU5HX0xFTkdUSF07CisJCXBnX2ljdV9saWJyYXJ5CSpsaWIgPSBpY3Vf bGlicmFyeV90YWJsZVtpXTsKKworCQlpZiAobGliID09IE5VTEwpCisJCQljb250aW51ZTsKKwor CQlpZiAoIWluY2x1ZGVfYnVpbHRpbiAmJiBpID09IElDVV9MSUJfVEFCTEVTSVpFIC0gMSkKKwkJ CWNvbnRpbnVlOworCisJCWxpYi0+Z2V0SUNVVmVyc2lvbih2ZXJzaW9uX2luZm8pOworCQlsaWIt PnZlcnNpb25Ub1N0cmluZyh2ZXJzaW9uX2luZm8sIHZlcnNpb25fc3RyaW5nKTsKKwkJdmFsdWVz WzBdID0gUG9pbnRlckdldERhdHVtKGNzdHJpbmdfdG9fdGV4dCh2ZXJzaW9uX3N0cmluZykpOwor CQludWxsc1swXSA9IGZhbHNlOworCisJCWxpYi0+Z2V0VW5pY29kZVZlcnNpb24odmVyc2lvbl9p bmZvKTsKKwkJbGliLT52ZXJzaW9uVG9TdHJpbmcodmVyc2lvbl9pbmZvLCB2ZXJzaW9uX3N0cmlu Zyk7CisJCXZhbHVlc1sxXSA9IFBvaW50ZXJHZXREYXR1bShjc3RyaW5nX3RvX3RleHQodmVyc2lv bl9zdHJpbmcpKTsKKwkJbnVsbHNbMV0gPSBmYWxzZTsKKwkJc3RhdHVzID0gVV9aRVJPX0VSUk9S OworCQlsaWItPmdldENMRFJWZXJzaW9uKHZlcnNpb25faW5mbywgJnN0YXR1cyk7CisJCWlmIChV X1NVQ0NFU1Moc3RhdHVzKSkKKwkJeworCQkJbGliLT52ZXJzaW9uVG9TdHJpbmcodmVyc2lvbl9p bmZvLCB2ZXJzaW9uX3N0cmluZyk7CisJCQl2YWx1ZXNbMl0gPSBQb2ludGVyR2V0RGF0dW0oY3N0 cmluZ190b190ZXh0KHZlcnNpb25fc3RyaW5nKSk7CisJCQludWxsc1syXSA9IGZhbHNlOworCQl9 CisJCWVsc2UKKwkJeworCQkJbnVsbHNbMl0gPSB0cnVlOworCQl9CisKKwkJdmFsdWVzWzNdID0g UG9pbnRlckdldERhdHVtKGNzdHJpbmdfdG9fdGV4dChsaWItPmxpYmljdWkxOG5fbmFtZSkpOwor CQludWxsc1szXSA9IGZhbHNlOworCisJCXZhbHVlc1s0XSA9IFBvaW50ZXJHZXREYXR1bShjc3Ry aW5nX3RvX3RleHQobGliLT5saWJpY3V1Y19uYW1lKSk7CisJCW51bGxzWzRdID0gZmFsc2U7CisK KwkJdHVwbGVzdG9yZV9wdXR2YWx1ZXMocnNpbmZvLT5zZXRSZXN1bHQsIHJzaW5mby0+c2V0RGVz YywgdmFsdWVzLCBudWxscyk7CisJfQorCisJcmV0dXJuIChEYXR1bSkgMDsKK30KKworI2RlZmlu ZSBDT0xMQVRPUl9ERVRBSUxfQ09MUyAzCitzdGF0aWMgdm9pZAorbWFrZV9jb2xsYXRvcl9kZXRh aWxfcmVjb3JkKHBnX2ljdV9saWJyYXJ5ICpsaWIsIGNvbnN0IGNoYXIgKmxvY2FsZSwKKwkJCQkJ CQlEYXR1bSAqdmFsdWVzLCBib29sICpudWxscykKK3sKKwlVRXJyb3JDb2RlCQkgc3RhdHVzOwor CVVDb2xsYXRvcgkJKmNvbGxhdG9yOworCVVWZXJzaW9uSW5mbwkgdmVyc2lvbl9pbmZvOworCWNo YXIJCQkgdmVyc2lvbl9zdHJpbmdbVV9NQVhfVkVSU0lPTl9TVFJJTkdfTEVOR1RIXTsKKworCXN0 YXR1cyA9IFVfWkVST19FUlJPUjsKKwljb2xsYXRvciA9IGxpYi0+b3BlbkNvbGxhdG9yKGxvY2Fs ZSwgJnN0YXR1cyk7CisKKwlsaWItPmdldElDVVZlcnNpb24odmVyc2lvbl9pbmZvKTsKKwlsaWIt PnZlcnNpb25Ub1N0cmluZyh2ZXJzaW9uX2luZm8sIHZlcnNpb25fc3RyaW5nKTsKKwl2YWx1ZXNb MF0gPSBQb2ludGVyR2V0RGF0dW0oY3N0cmluZ190b190ZXh0KHZlcnNpb25fc3RyaW5nKSk7CisJ bnVsbHNbMF0gPSBmYWxzZTsKKworCWlmIChjb2xsYXRvcikKKwl7CisJCWxpYi0+Z2V0VUNBVmVy c2lvbihjb2xsYXRvciwgdmVyc2lvbl9pbmZvKTsKKwkJbGliLT52ZXJzaW9uVG9TdHJpbmcodmVy c2lvbl9pbmZvLCB2ZXJzaW9uX3N0cmluZyk7CisJCXZhbHVlc1sxXSA9IFBvaW50ZXJHZXREYXR1 bShjc3RyaW5nX3RvX3RleHQodmVyc2lvbl9zdHJpbmcpKTsKKwkJbnVsbHNbMV0gPSBmYWxzZTsK Kwl9CisJZWxzZQorCQludWxsc1sxXSA9IHRydWU7CisKKwlpZiAoY29sbGF0b3IpCisJeworCQls aWItPmdldENvbGxhdG9yVmVyc2lvbihjb2xsYXRvciwgdmVyc2lvbl9pbmZvKTsKKwkJbGliLT52 ZXJzaW9uVG9TdHJpbmcodmVyc2lvbl9pbmZvLCB2ZXJzaW9uX3N0cmluZyk7CisJCXZhbHVlc1sy XSA9IFBvaW50ZXJHZXREYXR1bShjc3RyaW5nX3RvX3RleHQodmVyc2lvbl9zdHJpbmcpKTsKKwkJ bnVsbHNbMl0gPSBmYWxzZTsKKwl9CisJZWxzZQorCQludWxsc1syXSA9IHRydWU7CisKKwlpZiAo Y29sbGF0b3IpCisJCWxpYi0+Y2xvc2VDb2xsYXRvcihjb2xsYXRvcik7CisKKwlyZXR1cm47Cit9 CisKK1BHX0ZVTkNUSU9OX0lORk9fVjEobGlicmFyeV9jb2xsYXRvcnMpOworRGF0dW0KK2xpYnJh cnlfY29sbGF0b3JzKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisjZGVmaW5lIExJQlJBUllfQ09MTEFU T1JTX0NPTFMgKENPTExBVE9SX0RFVEFJTF9DT0xTICsgMSkKKwlwZ19pY3VfbGlicmFyeQkqbGli ICA9IE5VTEw7CisJUmV0dXJuU2V0SW5mbwkqcnNpbmZvID0gKFJldHVyblNldEluZm8gKikgZmNp bmZvLT5yZXN1bHRpbmZvOworCURhdHVtCQkJIHZhbHVlc1tMSUJSQVJZX0NPTExBVE9SU19DT0xT XTsKKwlib29sCQkJIG51bGxzW0xJQlJBUllfQ09MTEFUT1JTX0NPTFNdOworCisJaWYgKFBHX0FS R0lTTlVMTCgwKSkKKwl7CisJCWxpYiA9IGljdV9saWJyYXJ5X3RhYmxlW0lDVV9MSUJfVEFCTEVT SVpFIC0gMV07CisJfQorCWVsc2UKKwl7CisJCWNoYXIgKm1ham9yX3N0ciA9IHRleHRfdG9fY3N0 cmluZyhQR19HRVRBUkdfVEVYVF9QUCgwKSk7CisJCWludCBtYWpvciA9IGF0b2kobWFqb3Jfc3Ry KTsgLyogVE9ETz8gKi8KKworCQlpZiAobWFqb3IgPCBQR19NSU5fSUNVX01BSk9SIHx8IG1ham9y ID4gUEdfTUFYX0lDVV9NQUpPUikKKwkJCWVyZXBvcnQoRVJST1IsIChlcnJtc2coImljdV9tdWx0 aWxpYjogbWFqb3IgdmVyc2lvbiAlZCBpcyBvdXQgb2YgcmFuZ2UiLCBtYWpvcikpKTsKKwkJbGli ID0gZ2V0X2ljdV9ieV9tYWpvcl92ZXJzaW9uKG1ham9yKTsKKwkJaWYgKCFsaWIpCisJCQllcmVw b3J0KEVSUk9SLCAoZXJybXNnKCJpY3VfbXVsdGlsaWI6IG1ham9yIHZlcnNpb24gJWQgbm90IGZv dW5kIiwgbWFqb3IpKSk7CisJfQorCisJSW5pdE1hdGVyaWFsaXplZFNSRihmY2luZm8sIDApOwor CisJZm9yIChpbnQgaSA9IC0xOyBpIDwgbGliLT5jb3VudEF2YWlsYWJsZSgpOyBpKyspCisJewor CQljb25zdCBjaGFyCSpuYW1lOworCQljb25zdCBjaGFyCSpsb2NhbGU7CisJCVVFcnJvckNvZGUJ IHN0YXR1czsKKwkJY2hhcgkJIGxhbmd0YWdbVUxPQ19GVUxMTkFNRV9DQVBBQ0lUWV07CisKKwkJ aWYgKGkgPT0gLTEpCisJCQluYW1lID0gIiI7CQkvKiBJQ1Ugcm9vdCBsb2NhbGUgKi8KKwkJZWxz ZQorCQkJbmFtZSA9IGxpYi0+Z2V0QXZhaWxhYmxlKGkpOworCisJCXN0YXR1cyA9IFVfWkVST19F UlJPUjsKKwkJbGliLT50b0xhbmd1YWdlVGFnKG5hbWUsIGxhbmd0YWcsIHNpemVvZihsYW5ndGFn KSwgdHJ1ZSwgJnN0YXR1cyk7CisKKwkJaWYgKFVfRkFJTFVSRShzdGF0dXMpKQorCQkJY29udGlu dWU7CisKKwkJbG9jYWxlID0gVV9JQ1VfVkVSU0lPTl9NQUpPUl9OVU0gPj0gNTQgPyBsYW5ndGFn IDogbmFtZTsKKworCQlpZiAoIXBnX2lzX2FzY2lpKGxhbmd0YWcpIHx8ICFwZ19pc19hc2NpaShs b2NhbGUpKQorCQkJY29udGludWU7CisKKwkJdmFsdWVzWzBdID0gUG9pbnRlckdldERhdHVtKGNz dHJpbmdfdG9fdGV4dChsb2NhbGUpKTsKKwkJbnVsbHNbMF0gPSBmYWxzZTsKKworCQltYWtlX2Nv bGxhdG9yX2RldGFpbF9yZWNvcmQobGliLCBsb2NhbGUsIHZhbHVlcyArIDEsIG51bGxzICsgMSk7 CisJCXR1cGxlc3RvcmVfcHV0dmFsdWVzKHJzaW5mby0+c2V0UmVzdWx0LCByc2luZm8tPnNldERl c2MsIHZhbHVlcywgbnVsbHMpOworCX0KKworCXJldHVybiAoRGF0dW0pIDA7Cit9CisKK1BHX0ZV TkNUSU9OX0lORk9fVjEoY29sbGF0b3JfdmVyc2lvbl9zZWFyY2gpOworRGF0dW0KK2NvbGxhdG9y X3ZlcnNpb25fc2VhcmNoKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisjZGVmaW5lIENPTExBVE9SX1ZF UlNJT05fU0VBUkNIX0NPTFMgQ09MTEFUT1JfREVUQUlMX0NPTFMKKwljb25zdCBjaGFyCQkqbG9j YWxlOworCWNvbnN0IGNoYXIJCSpyZXF1ZXN0ZWRfdmVyc2lvbiA9IE5VTEw7CisJYm9vbAkJCSBs b2dPazsKKwlwZ19pY3VfbGlicmFyeQkqbGliOworCWludAkJCQkgbWFqb3IsIG1pbm9yOworCVR1 cGxlRGVzYwkJIHR1cGRlc2M7CisJSGVhcFR1cGxlCQkgdHVwbGU7CisJRGF0dW0JCQkgdmFsdWVz W0NPTExBVE9SX1ZFUlNJT05fU0VBUkNIX0NPTFNdOworCWJvb2wJCQkgbnVsbHNbQ09MTEFUT1Jf VkVSU0lPTl9TRUFSQ0hfQ09MU107CisKKwkvKiBCdWlsZCBhIHR1cGxlIGRlc2NyaXB0b3IgZm9y IG91ciByZXN1bHQgdHlwZSAqLworCWlmIChnZXRfY2FsbF9yZXN1bHRfdHlwZShmY2luZm8sIE5V TEwsICZ0dXBkZXNjKSAhPSBUWVBFRlVOQ19DT01QT1NJVEUpCisJCWVsb2coRVJST1IsICJyZXR1 cm4gdHlwZSBtdXN0IGJlIGEgcm93IHR5cGUiKTsKKworCWlmIChQR19BUkdJU05VTEwoMCkpCisJ CWVyZXBvcnQoRVJST1IsIChlcnJtc2coImxvY2FsZSBhcmd1bWVudCBtdXN0IGJlIG5vbi1OVUxM IikpKTsKKwlpZiAoUEdfQVJHSVNOVUxMKDIpKQorCQllcmVwb3J0KEVSUk9SLCAoZXJybXNnKCJs b2dfb2sgYXJndW1lbnQgbXVzdCBiZSBub24tTlVMTCIpKSk7CisKKwlsb2NhbGUgPSB0ZXh0X3Rv X2NzdHJpbmcoUEdfR0VUQVJHX1RFWFRfUFAoMCkpOworCWlmICghUEdfQVJHSVNOVUxMKDEpKQor CQlyZXF1ZXN0ZWRfdmVyc2lvbiA9IHRleHRfdG9fY3N0cmluZyhQR19HRVRBUkdfVEVYVF9QUCgx KSk7CisJbG9nT2sgPSBQR19HRVRBUkdfQk9PTCgyKTsKKworCWxpYiA9IGljdV9tdWx0aWxpYl9z ZWFyY2goSW52YWxpZE9pZCwgbG9jYWxlLCByZXF1ZXN0ZWRfdmVyc2lvbiwgbG9nT2spOworCWdl dF9saWJyYXJ5X3ZlcnNpb24obGliLCAmbWFqb3IsICZtaW5vcik7CisKKwltYWtlX2NvbGxhdG9y X2RldGFpbF9yZWNvcmQobGliLCBsb2NhbGUsIHZhbHVlcywgbnVsbHMpOworCisJdHVwbGUgPSBo ZWFwX2Zvcm1fdHVwbGUodHVwZGVzYywgdmFsdWVzLCBudWxscyk7CisKKwlQR19SRVRVUk5fREFU VU0oSGVhcFR1cGxlR2V0RGF0dW0odHVwbGUpKTsKK30KKworUEdfRlVOQ1RJT05fSU5GT19WMShj b2xsYXRvcl92ZXJzaW9ucyk7CitEYXR1bQorY29sbGF0b3JfdmVyc2lvbnMoUEdfRlVOQ1RJT05f QVJHUykKK3sKKyNkZWZpbmUgQ09MTEFUT1JfVkVSU0lPTlNfQ09MUyBDT0xMQVRPUl9ERVRBSUxf Q09MUworCWNvbnN0IGNoYXIgKmxvY2FsZTsKKwlSZXR1cm5TZXRJbmZvICpyc2luZm8gPSAoUmV0 dXJuU2V0SW5mbyAqKSBmY2luZm8tPnJlc3VsdGluZm87CisJRGF0dW0gICAgICAgICAgIHZhbHVl c1tDT0xMQVRPUl9WRVJTSU9OU19DT0xTXTsKKwlib29sICAgICAgICAgICAgbnVsbHNbQ09MTEFU T1JfVkVSU0lPTlNfQ09MU107CisKKwlpZiAoUEdfQVJHSVNOVUxMKDApKQorCQllcmVwb3J0KEVS Uk9SLCAoZXJybXNnKCJsb2NhbGUgYXJndW1lbnQgbXVzdCBiZSBub24tTlVMTCIpKSk7CisJbG9j YWxlID0gdGV4dF90b19jc3RyaW5nKFBHX0dFVEFSR19URVhUX1BQKDApKTsKKworCUluaXRNYXRl cmlhbGl6ZWRTUkYoZmNpbmZvLCAwKTsKKworCWZvciAoaW50IGkgPSBJQ1VfTElCX1RBQkxFU0la RSAtIDE7IGkgPj0gMDsgaS0tKQorCXsKKwkJcGdfaWN1X2xpYnJhcnkJKmxpYiA9IGljdV9saWJy YXJ5X3RhYmxlW2ldOworCisJCWlmIChsaWIgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCisJCWlm ICghaW5jbHVkZV9idWlsdGluICYmIGkgPT0gSUNVX0xJQl9UQUJMRVNJWkUgLSAxKQorCQkJY29u dGludWU7CisKKwkJbWFrZV9jb2xsYXRvcl9kZXRhaWxfcmVjb3JkKGxpYiwgbG9jYWxlLCB2YWx1 ZXMsIG51bGxzKTsKKworCQl0dXBsZXN0b3JlX3B1dHZhbHVlcyhyc2luZm8tPnNldFJlc3VsdCwg cnNpbmZvLT5zZXREZXNjLCB2YWx1ZXMsIG51bGxzKTsKKwl9CisKKwlyZXR1cm4gKERhdHVtKSAw OworfQorCitzdGF0aWMgdm9pZAorbWFrZV9pY3VfbGlicmFyeV9uYW1lcyhpbnQgbWFqb3IsIGNo YXIgKipsaWJpY3VpMThuLCBjaGFyICoqbGliaWN1dWMpCit7CisJY2hhciBsaWJpY3VpMThuX3Rt cFtNQVhQR1BBVEhdOworCWNoYXIgbGliaWN1dWNfdG1wW01BWFBHUEFUSF07CisKKwkvKgorCSAq IFNlZQorCSAqIGh0dHBzOi8vdW5pY29kZS1vcmcuZ2l0aHViLmlvL2ljdS91c2VyZ3VpZGUvaWN1 NGMvcGFja2FnaW5nLmh0bWwjaWN1LXZlcnNpb25zCisJICogZm9yIGNvbnZlbnRpb25zIG9uIGxp YnJhcnkgbmFtaW5nIG9uIFBPU0lYIGFuZCBXaW5kb3dzIHN5c3RlbXMuICBBcHBsZQorCSAqIGlz bid0IG1lbnRpb25lZCBidXQgdmFyaWVzIGluIHRoZSB1c3VhbCB3YXkuCisJICoKKwkgKiBGb3Jt YXQgMSBpcyBleHBlY3RlZCB0byBiZSBhIG1ham9yIHZlcnNpb24tb25seSBzeW1saW5rIHBvaW50 aW5nIHRvIGEKKwkgKiBzcGVjaWZpYyBtaW5vciB2ZXJzaW9uIChvciBvbiBXaW5kb3dzIGl0IG1h eSBiZSB0aGUgYWN0dWFsIGxpYnJhcnkpLgorCSAqIEZvcm1hdCAyIGlzIGV4cGVjdGVkIHRvIGJl IGFuIGFjdHVhbCBsaWJyYXJ5LgorCSAqLworI2lmZGVmIFdJTjMyCisjZGVmaW5lIElDVV9MSUJS QVJZX05BTUVfRk9STUFUMSAiJXMlc2ljdSVzJWQiIERMU1VGRklYCisjZWxpZiBkZWZpbmVkKF9f ZGFyd2luX18pCisjZGVmaW5lIElDVV9MSUJSQVJZX05BTUVfRk9STUFUMSAiJXMlc2xpYmljdSVz LiVkIiBETFNVRkZJWAorI2Vsc2UKKyNkZWZpbmUgSUNVX0xJQlJBUllfTkFNRV9GT1JNQVQxICIl cyVzbGliaWN1JXMiIERMU1VGRklYICIuJWQiCisjZW5kaWYKKworI2lmZGVmIFdJTjMyCisjZGVm aW5lIFBBVEhfU0VQQVJBVE9SICJcXCIKKyNkZWZpbmUgSUNVX0kxOE4gImluIgorI2RlZmluZSBJ Q1VfVUMgInVjIgorI2Vsc2UKKyNkZWZpbmUgUEFUSF9TRVBBUkFUT1IgIi8iCisjZGVmaW5lIElD VV9JMThOICJpMThuIgorI2RlZmluZSBJQ1VfVUMgInVjIgorI2VuZGlmCisKKwlzbnByaW50Zihs aWJpY3VpMThuX3RtcCwKKwkJCSBNQVhQR1BBVEgsCisJCQkgSUNVX0xJQlJBUllfTkFNRV9GT1JN QVQxLAorCQkJIGljdV9saWJyYXJ5X3BhdGgsIGljdV9saWJyYXJ5X3BhdGhbMF0gPyBQQVRIX1NF UEFSQVRPUiA6ICIiLAorCQkJICJpMThuIiwgbWFqb3IpOworCXNucHJpbnRmKGxpYmljdXVjX3Rt cCwKKwkJCSBNQVhQR1BBVEgsCisJCQkgSUNVX0xJQlJBUllfTkFNRV9GT1JNQVQxLAorCQkJIGlj dV9saWJyYXJ5X3BhdGgsIGljdV9saWJyYXJ5X3BhdGhbMF0gPyBQQVRIX1NFUEFSQVRPUiA6ICIi LAorCQkJICJ1YyIsIG1ham9yKTsKKworCSpsaWJpY3VpMThuID0gcHN0cmR1cChsaWJpY3VpMThu X3RtcCk7CisJKmxpYmljdXVjID0gcHN0cmR1cChsaWJpY3V1Y190bXApOworfQorCisjZGVmaW5l IE1BWF9TWU1CT0xfTEVOIDEyOAorc3RhdGljIHZvaWQgKgorbG9hZF9pY3VfZnVuY3Rpb24odm9p ZCAqaGFuZGxlLCBjb25zdCBjaGFyICpmdW5jdGlvbiwgaW50IG1ham9yKQoreworCWNoYXIgICAg IGZ1bmN0aW9uX3dpdGhfdmVyc2lvbltNQVhfU1lNQk9MX0xFTl07CisJaW50CQkgcmV0OworCXZv aWQgICAgKnJlc3VsdDsKKworCS8qCisJICogVHJ5IHRvIGxvb2sgdXAgdGhlIHN5bWJvbCB3aXRo IHRoZSBsaWJyYXJ5IG1ham9yIHZlcnNpb24gYXMgYSBzdWZmaXguCisJICovCisJcmV0ID0gc25w cmludGYoZnVuY3Rpb25fd2l0aF92ZXJzaW9uLCBzaXplb2YoZnVuY3Rpb25fd2l0aF92ZXJzaW9u KSwKKwkJCQkgICAiJXNfJWQiLCBmdW5jdGlvbiwgbWFqb3IpOworCWlmIChyZXQgPj0gc2l6ZW9m KGZ1bmN0aW9uX3dpdGhfdmVyc2lvbikpCisJCWVsb2coRVJST1IsICJpY3VfbXVsdGlsaWI6IGNh bm5vdCBjb25zdHJ1Y3Qgc3ltYm9sIG5hbWUiKTsKKwlyZXN1bHQgPSBkbHN5bShoYW5kbGUsIGZ1 bmN0aW9uX3dpdGhfdmVyc2lvbik7CisKKwkvKgorCSAqIExpYnJhcnkgbWF5IGhhdmUgYmVlbiBj b25maWd1cmVkIHdpdGggLS1kaXNhYmxlLXJlbmFtaW5nLCB0cnkgd2l0aG91dAorCSAqIG1ham9y IHZlcnNpb24gc3VmZml4LgorCSAqLworCWlmIChyZXN1bHQgPT0gTlVMTCkKKwkJcmVzdWx0ID0g ZGxzeW0oaGFuZGxlLCBmdW5jdGlvbik7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisjZGVmaW5l IExPQURfRlVOQyhERVNULCBMSUJIQU5ETEUsIExJQk5BTUUsIEZOQU1FKQlcCisJZG8gewkJCQkJ CQkJCQlcCisJCURFU1QgPSBsb2FkX2ljdV9mdW5jdGlvbigoTElCSEFORExFKSwgKEZOQU1FKSwg bWFqb3IpOwlcCisJCWlmIChERVNUID09IE5VTEwpCQkJCQkJXAorCQl7CQkJCQkJCQkJCVwKKwkJ CWVyZXBvcnQoV0FSTklORywJCQkJCVwKKwkJCQkJKGVycm1zZygiaWN1X211bHRpbGliOiBjb3Vs ZCBub3QgZmluZCBzeW1ib2wgXCIlc1wiIGluIGxpYnJhcnkgXCIlc1wiIiwJXAorCQkJCQkJCShG TkFNRSksIChMSUJOQU1FKSkpKTsJXAorCQkJZ290byBlcnI7CQkJCQkJCVwKKwkJfQkJCQkJCQkJ CQlcCisJfSB3aGlsZSgwKQorCisjZGVmaW5lIExPQURfRlVOQ19JMThOKERFU1QsIEZOQU1FKSBc CisJTE9BRF9GVU5DKERFU1QsIGxpYmljdWkxOG5faGFuZGxlLCBsaWJpY3VpMThuLCBGTkFNRSkK KyNkZWZpbmUgTE9BRF9GVU5DX1VDKERFU1QsIEZOQU1FKSBcCisJTE9BRF9GVU5DKERFU1QsIGxp YmljdXVjX2hhbmRsZSwgbGliaWN1dWMsIEZOQU1FKQorCitzdGF0aWMgcGdfaWN1X2xpYnJhcnkg KgorbG9hZF9pY3VfbGlicmFyeShpbnQgbWFqb3IpCit7CisJVVZlcnNpb25JbmZvCSB2ZXJzaW9u X2luZm87CisJcGdfaWN1X2xpYnJhcnkJKmxpYjsKKwljaGFyCQkJKmxpYmljdWkxOG47CisJY2hh cgkJCSpsaWJpY3V1YzsKKwl2b2lkCQkJKmxpYmljdWkxOG5faGFuZGxlID0gTlVMTDsKKwl2b2lk CQkJKmxpYmljdXVjX2hhbmRsZSAgID0gTlVMTDsKKworCW1ha2VfaWN1X2xpYnJhcnlfbmFtZXMo bWFqb3IsICZsaWJpY3VpMThuLCAmbGliaWN1dWMpOworCisJbGliID0gTWVtb3J5Q29udGV4dEFs bG9jWmVybyhUb3BNZW1vcnlDb250ZXh0LCBzaXplb2YocGdfaWN1X2xpYnJhcnkpKTsKKworCWxp YmljdWkxOG5faGFuZGxlID0gZGxvcGVuKGxpYmljdWkxOG4sIFJUTERfTk9XIHwgUlRMRF9MT0NB TCk7CisJaWYgKCFsaWJpY3VpMThuX2hhbmRsZSkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBMb2Fk IHRoZSBjb21tb24gbGlicmFyeS4gKi8KKwlsaWJpY3V1Y19oYW5kbGUgPSBkbG9wZW4obGliaWN1 dWMsIFJUTERfTk9XIHwgUlRMRF9MT0NBTCk7CisJaWYgKCFsaWJpY3VpMThuX2hhbmRsZSkKKwl7 CisJCWVsb2coV0FSTklORywgImZvdW5kIElDVSBsaWJyYXJ5IFwiJXNcIiBidXQgbm90IGNvbXBh bmlvbiBsaWJyYXJ5IFwiJXNcIiIsCisJCQkgbGliaWN1aTE4biwgbGliaWN1dWMpOworCQlkbGNs b3NlKGxpYmljdWkxOG5faGFuZGxlKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyoKKwkgKiBX ZSBvbmx5IGFsbG9jYXRlIHRoZSBwZ19pY3VfbGlicmFyeSBvYmplY3QgYWZ0ZXIgc3VjY2Vzc2Z1 bGx5CisJICogb3BlbmluZyB0aGUgbGlicmFyaWVzIHRvIG1pbmltaXplIHRoZSB3b3JrIGRvbmUg aW4gdGhlIEVOT0VOVCBjYXNlLAorCSAqIHdoZW4gcHJvYmluZyBhIHJhbmdlIG9mIHZlcnNpb25z LiAgVGhhdCBtZWFucyB3ZSBtaWdodCBuZWVkIHRvCisJICogY2xlYW4gdXAgb24gYWxsb2NhdGlv biBmYWlsdXJlLgorCSAqLworCWxpYiA9IE1lbW9yeUNvbnRleHRBbGxvY0V4dGVuZGVkKFRvcE1l bW9yeUNvbnRleHQsIHNpemVvZigqbGliKSwKKwkJCQkJCQkJCSBNQ1hUX0FMTE9DX05PX09PTSk7 CisJbGliLT5saWJpY3VpMThuX25hbWUgPSBNZW1vcnlDb250ZXh0QWxsb2NFeHRlbmRlZCgKKwkJ VG9wTWVtb3J5Q29udGV4dCwgc3RybGVuKGxpYmljdWkxOG4pICsgMSwgTUNYVF9BTExPQ19OT19P T00pOworCWxpYi0+bGliaWN1dWNfbmFtZSA9IE1lbW9yeUNvbnRleHRBbGxvY0V4dGVuZGVkKAor CQlUb3BNZW1vcnlDb250ZXh0LCBzdHJsZW4obGliaWN1dWMpICsgMSwgTUNYVF9BTExPQ19OT19P T00pOworCisJaWYgKCFsaWIgfHwgIWxpYi0+bGliaWN1aTE4bl9uYW1lIHx8ICFsaWItPmxpYmlj dXVjX25hbWUpCisJeworCQlkbGNsb3NlKGxpYmljdWkxOG5faGFuZGxlKTsKKwkJZGxjbG9zZShs aWJpY3V1Y19oYW5kbGUpOworCQllbG9nKEVSUk9SLCAib3V0IG9mIG1lbW9yeSIpOworCX0KKwor CXN0cmNweShsaWItPmxpYmljdWkxOG5fbmFtZSwgbGliaWN1aTE4bik7CisJc3RyY3B5KGxpYi0+ bGliaWN1dWNfbmFtZSwgbGliaWN1dWMpOworCisJcGZyZWUobGliaWN1aTE4bik7CisJcGZyZWUo bGliaWN1dWMpOworCisJLyogdHJ5IHRvIGZpbmQgYWxsIHRoZSBzeW1ib2xzIHdlIG5lZWQgZnJv bSB0aGUgaTE4biBsaWJyYXJ5ICovCisJTE9BRF9GVU5DX0kxOE4obGliLT5nZXRJQ1VWZXJzaW9u LCAidV9nZXRWZXJzaW9uIik7CisJTE9BRF9GVU5DX0kxOE4obGliLT5nZXRVbmljb2RlVmVyc2lv biwgInVfZ2V0VW5pY29kZVZlcnNpb24iKTsKKwlMT0FEX0ZVTkNfSTE4TihsaWItPmdldENMRFJW ZXJzaW9uLCAidWxvY2RhdGFfZ2V0Q0xEUlZlcnNpb24iKTsKKwlMT0FEX0ZVTkNfSTE4TihsaWIt Pm9wZW5Db2xsYXRvciwgInVjb2xfb3BlbiIpOworCUxPQURfRlVOQ19JMThOKGxpYi0+Y2xvc2VD b2xsYXRvciwgInVjb2xfY2xvc2UiKTsKKwlMT0FEX0ZVTkNfSTE4TihsaWItPmdldENvbGxhdG9y VmVyc2lvbiwgInVjb2xfZ2V0VmVyc2lvbiIpOworCUxPQURfRlVOQ19JMThOKGxpYi0+Z2V0VUNB VmVyc2lvbiwgInVjb2xfZ2V0VUNBVmVyc2lvbiIpOworCUxPQURfRlVOQ19JMThOKGxpYi0+dmVy c2lvblRvU3RyaW5nLCAidV92ZXJzaW9uVG9TdHJpbmciKTsKKwlMT0FEX0ZVTkNfSTE4TihsaWIt PnN0cmNvbGwsICJ1Y29sX3N0cmNvbGwiKTsKKwlMT0FEX0ZVTkNfSTE4TihsaWItPnN0cmNvbGxV VEY4LCAidWNvbF9zdHJjb2xsVVRGOCIpOworCUxPQURfRlVOQ19JMThOKGxpYi0+Z2V0U29ydEtl eSwgInVjb2xfZ2V0U29ydEtleSIpOworCUxPQURfRlVOQ19JMThOKGxpYi0+bmV4dFNvcnRLZXlQ YXJ0LCAidWNvbF9uZXh0U29ydEtleVBhcnQiKTsKKwlMT0FEX0ZVTkNfSTE4TihsaWItPnNldFVU RjgsICJ1aXRlcl9zZXRVVEY4Iik7CisJTE9BRF9GVU5DX0kxOE4obGliLT5lcnJvck5hbWUsICJ1 X2Vycm9yTmFtZSIpOworCUxPQURfRlVOQ19JMThOKGxpYi0+c2V0QXR0cmlidXRlLCAidWNvbF9z ZXRBdHRyaWJ1dGUiKTsKKworCS8qIHRyeSB0byBmaW5kIGFsbCB0aGUgc3ltYm9scyB3ZSBuZWVk IGZyb20gdGhlIHVjIGxpYnJhcnkgKi8KKwlMT0FEX0ZVTkNfVUMobGliLT5zdHJUb1VwcGVyLCAi dV9zdHJUb1VwcGVyIik7CisJTE9BRF9GVU5DX1VDKGxpYi0+c3RyVG9Mb3dlciwgInVfc3RyVG9M b3dlciIpOworCUxPQURfRlVOQ19VQyhsaWItPnN0clRvVGl0bGUsICJ1X3N0clRvVGl0bGUiKTsK KwlMT0FEX0ZVTkNfVUMobGliLT5vcGVuQ29udmVydGVyLCAidWNudl9vcGVuIik7CisJTE9BRF9G VU5DX1VDKGxpYi0+Y2xvc2VDb252ZXJ0ZXIsICJ1Y252X2Nsb3NlIik7CisJTE9BRF9GVU5DX1VD KGxpYi0+ZnJvbVVDaGFycywgInVjbnZfZnJvbVVDaGFycyIpOworCUxPQURfRlVOQ19VQyhsaWIt PnRvVUNoYXJzLCAidWNudl90b1VDaGFycyIpOworCUxPQURfRlVOQ19VQyhsaWItPnRvTGFuZ3Vh Z2VUYWcsICJ1bG9jX3RvTGFuZ3VhZ2VUYWciKTsKKwlMT0FEX0ZVTkNfVUMobGliLT5nZXREaXNw bGF5TmFtZSwgInVsb2NfZ2V0RGlzcGxheU5hbWUiKTsKKwlMT0FEX0ZVTkNfVUMobGliLT5jb3Vu dEF2YWlsYWJsZSwgInVsb2NfY291bnRBdmFpbGFibGUiKTsKKwlMT0FEX0ZVTkNfVUMobGliLT5n ZXRBdmFpbGFibGUsICJ1bG9jX2dldEF2YWlsYWJsZSIpOworCisJbGliLT5nZXRJQ1VWZXJzaW9u KHZlcnNpb25faW5mbyk7CisJbGliLT5tYWpvcl92ZXJzaW9uID0gdmVyc2lvbl9pbmZvWzBdOwor CWxpYi0+bWlub3JfdmVyc2lvbiA9IHZlcnNpb25faW5mb1sxXTsKKworCWlmIChsaWItPm1ham9y X3ZlcnNpb24gIT0gbWFqb3IpCisJCWVyZXBvcnQodmVyc2lvbl9taXNtYXRjaF9sb2dfbGV2ZWws CisJCQkJKGVycm1zZygibG9hZGVkIGxpYnJhcnkgZm9yIG1ham9yIHZlcnNpb24gJWQsIGJ1dCBs aWJyYXJ5IHJlcG9ydHMgbWFqb3IgdmVyc2lvbiAlZCIsCisJCQkJCQltYWpvciwgbGliLT5tYWpv cl92ZXJzaW9uKSkpOworCisJZXJlcG9ydChMT0csIChlcnJtc2coImljdV9tdWx0aWxpYjogbG9h ZGVkIElDVSB2ZXJzaW9uICVkLiVkIiwKKwkJCQkJCSBsaWItPm1ham9yX3ZlcnNpb24sIGxpYi0+ bWlub3JfdmVyc2lvbikpKTsKKworCXJldHVybiBsaWI7CisKK2VycjoKKwlkbGNsb3NlKGxpYmlj dWkxOG5faGFuZGxlKTsKKwlkbGNsb3NlKGxpYmljdXVjX2hhbmRsZSk7CisJcGZyZWUobGliLT5s aWJpY3VpMThuX25hbWUpOworCXBmcmVlKGxpYi0+bGliaWN1dWNfbmFtZSk7CisJcGZyZWUobGli KTsKKwlyZXR1cm4gTlVMTDsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvaWN1X211bHRpbGliL2lj dV9tdWx0aWxpYi5jb250cm9sIGIvY29udHJpYi9pY3VfbXVsdGlsaWIvaWN1X211bHRpbGliLmNv bnRyb2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uOGYyYzU0Njc4MQot LS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvaWN1X211bHRpbGliL2ljdV9tdWx0aWxpYi5jb250 cm9sCkBAIC0wLDAgKzEsNyBAQAorIyBpY3VfbXVsdGxpYiBleHRlbnNpb24KK2NvbW1lbnQgPSAn c3VwcG9ydCBtdWx0aXBsZSBJQ1UgbGlicmFyeSB2ZXJzaW9ucycKK2RlZmF1bHRfdmVyc2lvbiA9 ICcxLjAnCittb2R1bGVfcGF0aG5hbWUgPSAnJGxpYmRpci9pY3VfbXVsdGlsaWInCityZWxvY2F0 YWJsZSA9IGZhbHNlCitzY2hlbWEgPSBpY3VfbXVsdGlsaWIKK3RydXN0ZWQgPSB0cnVlCmRpZmYg LS1naXQgYS9jb250cmliL2ljdV9tdWx0aWxpYi9tZXNvbi5idWlsZCBiL2NvbnRyaWIvaWN1X211 bHRpbGliL21lc29uLmJ1aWxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAu LmYyZWE0MDg4ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2ljdV9tdWx0aWxpYi9tZXNv bi5idWlsZApAQCAtMCwwICsxLDI0IEBACisjIENvcHlyaWdodCAoYykgMjAyMi0yMDIzLCBQb3N0 Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCitpY3VfbXVsdGlsaWJfc291cmNlcyA9 IGZpbGVzKAorICAnaWN1X211bHRpbGliLmMnLAorKQorCitpZiBob3N0X3N5c3RlbSA9PSAnd2lu ZG93cycKKyAgaWN1X211bHRpbGliX3NvdXJjZXMgKz0gcmNfbGliX2dlbi5wcm9jZXNzKHdpbjMy dmVyX3JjLCBleHRyYV9hcmdzOiBbCisgICAgJy0tTkFNRScsICdpY3VfbXVsdGlsaWInLAorICAg ICctLUZJTEVERVNDJywgJ2ljdV9tdWx0aWxpYiAtLSBzdXBwb3J0IG11bHRpcGxlIElDVSBsaWJy YXJ5IHZlcnNpb25zJyxdKQorZW5kaWYKKworaWN1X211bHRpbGliID0gc2hhcmVkX21vZHVsZSgn aWN1X211bHRpbGliJywKKyAgaWN1X211bHRpbGliX3NvdXJjZXMsCisgIGt3YXJnczogY29udHJp Yl9tb2RfYXJncywKKykKK2NvbnRyaWJfdGFyZ2V0cyArPSBpY3VfbXVsdGlsaWIKKworaW5zdGFs bF9kYXRhKAorICAnaWN1X211bHRpbGliLmNvbnRyb2wnLAorICAnaWN1X211bHRpbGliLS0xLjAu c3FsJywKKyAga3dhcmdzOiBjb250cmliX2RhdGFfYXJncywKKykKKwpkaWZmIC0tZ2l0IGEvY29u dHJpYi9tZXNvbi5idWlsZCBiL2NvbnRyaWIvbWVzb24uYnVpbGQKaW5kZXggYmQ0YTU3YzQzYy4u MDNmNzIxNDdjZiAxMDA2NDQKLS0tIGEvY29udHJpYi9tZXNvbi5idWlsZAorKysgYi9jb250cmli L21lc29uLmJ1aWxkCkBAIC0yOCw2ICsyOCw5IEBAIHN1YmRpcignZnV6enlzdHJtYXRjaCcpCiBz dWJkaXIoJ2hzdG9yZScpCiBzdWJkaXIoJ2hzdG9yZV9wbHBlcmwnKQogc3ViZGlyKCdoc3RvcmVf cGxweXRob24nKQoraWYgaWN1LmZvdW5kKCkKKyAgIHN1YmRpcignaWN1X211bHRpbGliJykKK2Vu ZGlmCiBzdWJkaXIoJ2ludGFnZycpCiBzdWJkaXIoJ2ludGFycmF5JykKIHN1YmRpcignaXNuJykK ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9jb250cmliLnNnbWwgYi9kb2Mvc3JjL3NnbWwvY29u dHJpYi5zZ21sCmluZGV4IDRlN2I4N2E0MmYuLjQ2OWExNzQ2YjkgMTAwNjQ0Ci0tLSBhL2RvYy9z cmMvc2dtbC9jb250cmliLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2NvbnRyaWIuc2dtbApAQCAt MTEzLDYgKzExMyw3IEBAIENSRUFURSBFWFRFTlNJT04gPHJlcGxhY2VhYmxlPm1vZHVsZV9uYW1l PC9yZXBsYWNlYWJsZT47CiAgJmZpbGUtZmR3OwogICZmdXp6eXN0cm1hdGNoOwogICZoc3RvcmU7 CisgJmljdS1tdWx0aWxpYjsKICAmaW50YWdnOwogICZpbnRhcnJheTsKICAmaXNuOwpkaWZmIC0t Z2l0IGEvZG9jL3NyYy9zZ21sL2ZpbGVsaXN0LnNnbWwgYi9kb2Mvc3JjL3NnbWwvZmlsZWxpc3Qu c2dtbAppbmRleCAwZDZiZTlhMmZhLi4wOTFjZTBhNjBiIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3Nn bWwvZmlsZWxpc3Quc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvZmlsZWxpc3Quc2dtbApAQCAtMTMx LDYgKzEzMSw3IEBACiA8IUVOVElUWSBmaWxlLWZkdyAgICAgICAgU1lTVEVNICJmaWxlLWZkdy5z Z21sIj4KIDwhRU5USVRZIGZ1enp5c3RybWF0Y2ggICBTWVNURU0gImZ1enp5c3RybWF0Y2guc2dt bCI+CiA8IUVOVElUWSBoc3RvcmUgICAgICAgICAgU1lTVEVNICJoc3RvcmUuc2dtbCI+Cis8IUVO VElUWSBpY3UtbXVsdGlsaWIgICAgU1lTVEVNICJpY3UtbXVsdGlsaWIuc2dtbCI+CiA8IUVOVElU WSBpbnRhZ2cgICAgICAgICAgU1lTVEVNICJpbnRhZ2cuc2dtbCI+CiA8IUVOVElUWSBpbnRhcnJh eSAgICAgICAgU1lTVEVNICJpbnRhcnJheS5zZ21sIj4KIDwhRU5USVRZIGlzbiAgICAgICAgICAg ICBTWVNURU0gImlzbi5zZ21sIj4KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9pY3UtbXVsdGls aWIuc2dtbCBiL2RvYy9zcmMvc2dtbC9pY3UtbXVsdGlsaWIuc2dtbApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwLi44Mzg4NzJjODgwCi0tLSAvZGV2L251bGwKKysrIGIvZG9j L3NyYy9zZ21sL2ljdS1tdWx0aWxpYi5zZ21sCkBAIC0wLDAgKzEsNDk2IEBACis8IS0tIGRvYy9z cmMvc2dtbC9pY3UtbXVsdGlsaWIuc2dtbCAtLT4KKworPHNlY3QxIGlkPSJpY3UtbXVsdGlsaWIi IHhyZWZsYWJlbD0iaWN1X211bHRpbGliIj4KKyA8dGl0bGU+aWN1X211bHRpbGliPC90aXRsZT4K KworIDxpbmRleHRlcm0gem9uZT0iaWN1LW11bHRpbGliIj4KKyAgPHByaW1hcnk+aWN1X211bHRp bGliPC9wcmltYXJ5PgorIDwvaW5kZXh0ZXJtPgorCisgPHBhcmE+CisgIFRoZSA8ZmlsZW5hbWU+ aWN1X211bHRpbGliPC9maWxlbmFtZT4gbW9kdWxlIHByb3ZpZGVzIGNvbnRyb2wgb3ZlciB0aGUK KyAgdmVyc2lvbiAob3IgdmVyc2lvbnMpIG9mIHRoZSBJQ1UgcHJvdmlkZXIgbGlicmFyeSB1c2Vk IGJ5CisgIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4sIHdoaWNoIGNhbiBi ZSBkaWZmZXJlbnQgZnJvbSB0aGUKKyAgdmVyc2lvbiBvZiBJQ1Ugd2l0aCB3aGljaCBpdCB3YXMg YnVpbHQuCisgPC9wYXJhPgorCisgPHBhcmE+CisgIENvbGxhdGlvbnMgYXJlIGEgcHJvZHVjdCBv ZiBuYXR1cmFsIGxhbmd1YWdlLCBhbmQgbmF0dXJhbCBsYW5ndWFnZSBldm9sdmVzCisgIG92ZXIg dGltZTsgYnV0IDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gZGVwZW5kcyBv biBzdGFibGUKKyAgb3JkZXJpbmcgZm9yIHN0cnVjdHVyZXMgc3VjaCBhcyBpbmRleGVzLiBOZXdl ciB2ZXJzaW9ucyBvZiBJQ1UgdXBkYXRlIHRoZQorICBwcm92aWRlZCBjb2xsYXRvcnMgdG8gYWRh cHQgdG8gY2hhbmdlcyBpbiBuYXR1cmFsIGxhbmd1YWdlLCBzbyBpdCdzCisgIGltcG9ydGFudCB0 byBjb250cm9sIHdoZW4gYW5kIGhvdyB0aG9zZSBuZXcgdmVyc2lvbnMgb2YgSUNVIGFyZSB1c2Vk IHRvCisgIHByZXZlbnQgcHJvYmxlbXMgc3VjaCBhcyBpbmRleCBjb3JydXB0aW9uLgorIDwvcGFy YT4KKworIDxwYXJhPgorICBUaGlzIG1vZHVsZSBhc3N1bWVzIHRoYXQgdGhlIG5lY2Vzc2FyeSB2 ZXJzaW9ucyBvZiBJQ1UgYXJlIGFscmVhZHkKKyAgYXZhaWxhYmxlLCBzdWNoIGFzIHRocm91Z2gg dGhlIG9wZXJhdGluZyBzeXN0ZW0ncyBwYWNrYWdlIG1hbmFnZXI7IGFuZAorICBhbHJlYWR5IHBy b3Blcmx5IGluc3RhbGxlZCBpbiBhIHNpbmdsZSBsb2NhdGlvbiBhY2Nlc3NpYmxlIHRvCisgIDxw cm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4uIFRoZSBjb25maWdyYXRpb24gdmFy aWFibGUKKyAgPGxpdGVyYWw+aWN1X211bHRpbGliLmxpYnJhcnlfcGF0aDwvbGl0ZXJhbD4gc2hv dWxkIGJlIHNldCB0byB0aGUgbG9jYXRpb24KKyAgd2hlcmUgdGhlc2UgSUNVIGxpYnJhcnkgdmVy c2lvbnMgYXJlIGluc3RhbGxlZC4KKyA8L3BhcmE+CisKKyA8cGFyYT4KKyAgPGZpbGVuYW1lPmlj dV9tdWx0aWxpYjwvZmlsZW5hbWU+IG11c3QgYmUgbG9hZGVkIHZpYQorICA8bGl0ZXJhbD5zaGFy ZWRfcHJlbG9hZF9saWJyYXJpZXM8L2xpdGVyYWw+LgorICA8ZmlsZW5hbWU+aWN1X211bHRpbGli PC9maWxlbmFtZT4gaWdub3JlcyBhbnkgSUNVIGxpYnJhcnkgd2l0aCBhIG1ham9yCisgIHZlcnNp b24gZ3JlYXRlciB0aGFuIHRoYXQgd2l0aCB3aGljaCA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwv cHJvZHVjdG5hbWU+CisgIHdhcyBidWlsdC4KKyA8L3BhcmE+CisKKyA8c2VjdDIgaWQ9ImljdS1t dWx0aWxpYi12ZXJzaW9uLXN0YWJpbGl0eSI+CisgIDx0aXRsZT5JQ1UgVmVyc2lvbiBTdGFiaWxp dHk8L3RpdGxlPgorCisgIDxwYXJhPgorICAgVGhlIHNpbXBsZXN0IHdheSB0byB1c2UgPGZpbGVu YW1lPmljdV9tdWx0aWxpYjwvZmlsZW5hbWU+IGlzIHRvIGZvcmNlIElDVQorICAgdmVyc2lvbiBz dGFiaWxpdHkuIFZlcnNpb24gc3RhYmlsaXR5IG1lYW5zIHRoYXQKKyAgIDxwcm9kdWN0bmFtZT5Q b3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gd2lsbCB1c2UgdGhlIHNhbWUgdmVyc2lvbiBvZiBJQ1Ug Zm9yCisgICBhbGwgY29sbGF0aW9ucywgZXZlbiBpZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSBvcgor ICAgPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiBpdHNlbGYgaXMgdXBncmFk ZWQgb3IgbW92ZWQuIFRoZQorICAgc3RhYmxlIHZlcnNpb24gbWF5IG9yIG1heSBub3QgYmUgdGhl IHNhbWUgYXMgdGhhdCB3aXRoIHdoaWNoCisgICA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJv ZHVjdG5hbWU+IHdhcyBidWlsdC4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgVmVyc2lvbiBz dGFiaWxpdHkgbWF5IGJlIGJhc2VkIG9uIGJvdGggdGhlIG1ham9yIGFuZCBtaW5vciB2ZXJzaW9u IG9mIElDVSwKKyAgIHN1Y2ggYXMgPGxpdGVyYWw+NjguMjwvbGl0ZXJhbD47IG9yIG9uIHRoZSBt YWpvciB2ZXJzaW9uIGFsb25lLCBzdWNoIGFzCisgICA8bGl0ZXJhbD42ODwvbGl0ZXJhbD4uIFNw ZWNpZnlpbmcgYm90aCB0aGUgbWFqb3IgYW5kIG1pbm9yIHZlcnNpb25zIG1vcmUKKyAgIGNsb3Nl bHkgY29udHJvbHMgZXhhY3RseSB3aGljaCBJQ1UgbGlicmFyeSBpcyBsb2FkZWQsIGJ1dCBhcHBs eWluZyBtaW5vcgorICAgdmVyc2lvbiB1cGdyYWRlcyBvZiB0aGUgSUNVIGxpYnJhcnkgbWF5IGlu dGVyZmVyZSB3aXRoIG5vcm1hbAorICAgb3BlcmF0aW9uLiBTcGVjaWZ5aW5nIHRoZSBtYWpvciB2 ZXJzaW9uIGFsb25lIG1ha2VzIGFwcGx5aW5nIElDVSBtaW5vcgorICAgdmVyc2lvbiB1cGRhdGVz IHNpbXBsZXIsIGJ1dCBjYXJyaWVzIGEgcmlzayBvZiBzdWJ0bGUgZGlmZmVyZW5jZXMgaW4KKyAg IGNvbGxhdGlvbiBvcmRlciBpZiB0aGUgbGlicmFyeSBpcyB1cGRhdGVkLgorICA8L3BhcmE+CisK KyAgPHBhcmE+CisgICBUbyBjb25maWd1cmUgZm9yIHZlcnNpb24gc3RhYmlsaXR5LCBmaXJzdCBt YWtlIHN1cmUgdGhhdAorICAgPHZhcm5hbWU+aWN1X211bHRpbGliLmxpYnJhcnlfcGF0aDwvdmFy bmFtZT4gaXMgc2V0IGNvcnJlY3RseSwgd2hpY2ggeW91CisgICBjYW4gb2JzZXJ2ZSBieSBleGVj dXRpbmcgdGhlCisgICA8bGl0ZXJhbD5pY3VfbXVsdGlsaWIubGlicmFyeV92ZXJzaW9ucygpPC9s aXRlcmFsPiBmdW5jdGlvbi4gVGhlbiBzZXQKKyAgIDx2YXJuYW1lPmljdV9tdWx0aWxpYi5kZWZh dWx0X2ljdV92ZXJzaW9uPC92YXJuYW1lPiB0byB0aGUgc3RhYmxlIHZlcnNpb24sCisgICBhbmQg c2V0IDx2YXJuYW1lPmljdV9tdWx0aWxpYi5zZWFyY2hfYnlfY29sbGF0b3JfdmVyc2lvbjwvdmFy bmFtZT4gdG8KKyAgIDxsaXRlcmFsPmZhbHNlPC9saXRlcmFsPi4gVGhlc2UgY29uZmlndXJhdGlv biB2YXJpYWJsZXMgc2hvdWxkIGJlIHNldCBpbgorICAgPGZpbGVuYW1lPnBvc3RncmVzcWwuY29u ZjwvZmlsZW5hbWU+IHRvIGVuc3VyZSB0aGF0IHRoZSBzdGFibGUgdmVyc2lvbiBvZgorICAgSUNV IGlzIHVzZWQgY29uc2lzdGVudGx5LgorICA8L3BhcmE+CisKKyAgPG5vdGU+CisgICA8cGFyYT4K KyAgICBFbnN1cmUgdGhhdCB0aGUgc3RhYmxlIHZlcnNpb24gb2YgdGhlIElDVSBsaWJyYXJ5IGlz IGFsd2F5cyBhdmFpbGFibGUsCisgICAgaW5jbHVkaW5nIG9uIGFsbCByZXBsaWNhcyBhbmQgdGhy b3VnaCBvcGVyYXRpbmcgc3lzdGVtIGFuZAorICAgIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9w cm9kdWN0bmFtZT4gdXBncmFkZXMuCisgICA8L3BhcmE+CisgICA8cGFyYT4KKyAgICBTaW1pbGFy bHksIGtlZXAgdGhlIHNldHRpbmdzIGluIDxmaWxlbmFtZT5wb3N0Z3Jlc3FsLmNvbmY8L2ZpbGVu YW1lPiwgYW5kCisgICAga2VlcCB0aGVtIGNvbnNpc3RlbnQgYWNyb3NzIHJlcGxpY2FzIGFuZCB1 cGdyYWRlcy4KKyAgIDwvcGFyYT4KKyAgPC9ub3RlPgorCisgIDxwYXJhPgorICAgRm9yIGJlc3Qg cmVzdWx0cywgc3RhYmlsaXplIHRoZSBJQ1UgdmVyc2lvbiBpbW1lZGlhdGVseSBhZnRlcgorICAg PGNvbW1hbmQ+aW5pdGRiPC9jb21tYW5kPiBpcyBydW4sIHRvIGVuc3VyZSB0aGF0IGluaXRpYWwg Y29sbGF0aW9ucyBhcmUKKyAgIGxvYWRlZCBmcm9tIHRoZSBzdGFiaWxpemVkIHZlcnNpb24gb2Yg dGhlIElDVSBsaWJyYXJ5LiBUbyBkbyB0aGlzLCB1c2UgdGhlCisgICBvcHRpb24gPHhyZWYgbGlu a2VuZD0iYXBwLWluaXRkYi1vcHRpb24tbm8taW1wb3J0LWNvbGxhdGlvbnMiLz4gZm9yCisgICA8 Y29tbWFuZD5pbml0ZGI8L2NvbW1hbmQ+LCBpbXBvcnQgdGhlIGNvbGxhdGlvbnMgbWFudWFsbHks IGFuZCB0aGVuIHJlZnJlc2gKKyAgIHRoZSB2ZXJzaW9ucyBmb3IgdGhlIGRlZmF1bHQgY29sbGF0 aW9ucy4gRm9yIGluc3RhbmNlOgorICA8L3BhcmE+CisKKzxwcm9ncmFtbGlzdGluZz4KKyQgaW5p dGRiIC0tbm8taW1wb3J0LWNvbGxhdGlvbnMgLUQgZGF0YSAtLWxvY2FsZS1wcm92aWRlcj1pY3Ug LS1pY3UtbG9jYWxlPSJlbl9VUyIgLS1sb2NhbGU9ImVuX1VTLlVURi04IgorJCBjYXQgLSA+PiBk YXRhL3Bvc3RncmVzcWwuY29uZgorc2hhcmVkX3ByZWxvYWRfbGlicmFyaWVzID0gJ2ljdV9tdWx0 aWxpYicKK2ljdV9tdWx0aWxpYi5saWJyYXJ5X3BhdGggPSAnL3BhdGgvdG8vaWN1L2xpYicKK2lj dV9tdWx0aWxpYi5kZWZhdWx0X2ljdV92ZXJzaW9uID0gJzY1LjEnCitpY3VfbXVsdGlsaWIuc2Vh cmNoX2J5X2NvbGxhdG9yX3ZlcnNpb24gPSBmYWxzZQoraWN1X211bHRpbGliLmluY2x1ZGVfYnVp bHRpbiA9IGZhbHNlCiteRAorJCBwZ19jdGwgLUQgZGF0YSAtbCBsb2dmaWxlIHN0YXJ0CiskIHBz cWwgdGVtcGxhdGUxCitXQVJOSU5HOiAgaWN1X211bHRpbGliOiBjb2xsYXRvciB2ZXJzaW9uIG1p c21hdGNoIGRldGVjdGVkIGZvciBsb2NhbGUgImVuX1VTIgorREVUQUlMOiAgSUNVIDY1LjEgcHJv dmlkZXMgY29sbGF0b3IgdmVyc2lvbiAiMTUzLjk3IiBmb3IgbG9jYWxlICJlbl9VUyI7IGV4cGVj dGVkIHZlcnNpb24gIjE1My4xMTIiLgorV0FSTklORzogIGljdV9tdWx0aWxpYjogY29sbGF0b3Ig dmVyc2lvbiBtaXNtYXRjaCBkZXRlY3RlZCBmb3IgbG9jYWxlICJlbl9VUyIKK0RFVEFJTDogIElD VSA2NS4xIHByb3ZpZGVzIGNvbGxhdG9yIHZlcnNpb24gIjE1My45NyIgZm9yIGxvY2FsZSAiZW5f VVMiOyBleHBlY3RlZCB2ZXJzaW9uICIxNTMuMTEyIi4KK1dBUk5JTkc6ICBkYXRhYmFzZSAidGVt cGxhdGUxIiBoYXMgYSBjb2xsYXRpb24gdmVyc2lvbiBtaXNtYXRjaAorREVUQUlMOiAgVGhlIGRh dGFiYXNlIHdhcyBjcmVhdGVkIHVzaW5nIGNvbGxhdGlvbiB2ZXJzaW9uIDE1My4xMTIsIGJ1dCB0 aGUgb3BlcmF0aW5nIHN5c3RlbSBwcm92aWRlcyB2ZXJzaW9uIDE1My45Ny4KK0hJTlQ6ICBSZWJ1 aWxkIGFsbCBvYmplY3RzIGluIHRoaXMgZGF0YWJhc2UgdGhhdCB1c2UgdGhlIGRlZmF1bHQgY29s bGF0aW9uIGFuZCBydW4gQUxURVIgREFUQUJBU0UgdGVtcGxhdGUxIFJFRlJFU0ggQ09MTEFUSU9O IFZFUlNJT04sIG9yIGJ1aWxkIFBvc3RncmVTUUwgd2l0aCB0aGUgcmlnaHQgbGlicmFyeSB2ZXJz aW9uLgorPSMgQUxURVIgREFUQUJBU0UgdGVtcGxhdGUxIFJFRlJFU0ggQ09MTEFUSU9OIFZFUlNJ T047CitOT1RJQ0U6ICBjaGFuZ2luZyB2ZXJzaW9uIGZyb20gMTUzLjExMiB0byAxNTMuOTcKK0FM VEVSIERBVEFCQVNFCis9IyBTRUxFQ1QgcGdfaW1wb3J0X3N5c3RlbV9jb2xsYXRpb25zKCdwZ19j YXRhbG9nJyk7CisgcGdfaW1wb3J0X3N5c3RlbV9jb2xsYXRpb25zCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgICAgIDc5MgorKDEgcm93KQorCis9 IyBccQorJCBwc3FsIHBvc3RncmVzCitXQVJOSU5HOiAgaWN1X211bHRpbGliOiBjb2xsYXRvciB2 ZXJzaW9uIG1pc21hdGNoIGRldGVjdGVkIGZvciBsb2NhbGUgImVuX1VTIgorREVUQUlMOiAgSUNV IDY1LjEgcHJvdmlkZXMgY29sbGF0b3IgdmVyc2lvbiAiMTUzLjk3IiBmb3IgbG9jYWxlICJlbl9V UyI7IGV4cGVjdGVkIHZlcnNpb24gIjE1My4xMTIiLgorV0FSTklORzogIGljdV9tdWx0aWxpYjog Y29sbGF0b3IgdmVyc2lvbiBtaXNtYXRjaCBkZXRlY3RlZCBmb3IgbG9jYWxlICJlbl9VUyIKK0RF VEFJTDogIElDVSA2NS4xIHByb3ZpZGVzIGNvbGxhdG9yIHZlcnNpb24gIjE1My45NyIgZm9yIGxv Y2FsZSAiZW5fVVMiOyBleHBlY3RlZCB2ZXJzaW9uICIxNTMuMTEyIi4KK1dBUk5JTkc6ICBkYXRh YmFzZSAicG9zdGdyZXMiIGhhcyBhIGNvbGxhdGlvbiB2ZXJzaW9uIG1pc21hdGNoCitERVRBSUw6 ICBUaGUgZGF0YWJhc2Ugd2FzIGNyZWF0ZWQgdXNpbmcgY29sbGF0aW9uIHZlcnNpb24gMTUzLjEx MiwgYnV0IHRoZSBvcGVyYXRpbmcgc3lzdGVtIHByb3ZpZGVzIHZlcnNpb24gMTUzLjk3LgorSElO VDogIFJlYnVpbGQgYWxsIG9iamVjdHMgaW4gdGhpcyBkYXRhYmFzZSB0aGF0IHVzZSB0aGUgZGVm YXVsdCBjb2xsYXRpb24gYW5kIHJ1biBBTFRFUiBEQVRBQkFTRSBwb3N0Z3JlcyBSRUZSRVNIIENP TExBVElPTiBWRVJTSU9OLCBvciBidWlsZCBQb3N0Z3JlU1FMIHdpdGggdGhlIHJpZ2h0IGxpYnJh cnkgdmVyc2lvbi4KKz0jIEFMVEVSIERBVEFCQVNFIHBvc3RncmVzIFJFRlJFU0ggQ09MTEFUSU9O IFZFUlNJT047CitOT1RJQ0U6ICBjaGFuZ2luZyB2ZXJzaW9uIGZyb20gMTUzLjExMiB0byAxNTMu OTcKK0FMVEVSIERBVEFCQVNFCis9IyBTRUxFQ1QgcGdfaW1wb3J0X3N5c3RlbV9jb2xsYXRpb25z KCdwZ19jYXRhbG9nJyk7CisgcGdfaW1wb3J0X3N5c3RlbV9jb2xsYXRpb25zCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgICAgIDc5MgorKDEgcm93 KQorCis9IyBccQorJAorPC9wcm9ncmFtbGlzdGluZz4KKworICA8cGFyYT4KKyAgIFRoZSByZXN1 bHQgd2lsbCBiZSBhIHN5c3RlbSBiYXNlZCBvbiBJQ1UgdmVyc2lvbiA8bGl0ZXJhbD42NS4xPC9s aXRlcmFsPiwgYW5kCisgICA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IHdp bGwgdXNlIHRoYXQgdmVyc2lvbiBvZiBJQ1UgZm9yIGFsbAorICAgY29sbGF0aW9ucyB0aGF0IHVz ZSB0aGUgSUNVIHByb3ZpZGVyLgorICA8L3BhcmE+CisgPC9zZWN0Mj4KKworIDxzZWN0MiBpZD0i aWN1LW11bHRpLXZlcnNpb24iPgorICA8dGl0bGU+TXVsdGlwbGUgSUNVIFZlcnNpb24gU3VwcG9y dDwvdGl0bGU+CisgIDxwYXJhPgorICAgU3VwcG9ydCBmb3IgbXVsdGlwbGUgSUNVIGxpYnJhcnkg dmVyc2lvbnMgaW4gdGhlIHNhbWUgZGF0YWJhc2UgYWxsb3dzIHRoZQorICAgc3lzdGVtIHRvIGFk YXB0IHRvIGNoYW5nZXMgaW4gbmF0dXJhbCBsYW5ndWFnZSBvdmVyIHRpbWUuIEFzIHRoZXNlIGNo YW5nZXMKKyAgIGFyZSBpbnRyb2R1Y2VkIGluIG5ldyB2ZXJzaW9ucyBvZiBJQ1UsIHRob3NlIG5l dyB2ZXJzaW9ucyBjYW4gYmUgYnJvdWdodAorICAgaW50byA8cHJvZHVjdG5hbWU+UG9zdGdyZVNR TDwvcHJvZHVjdG5hbWU+IGluY3JlbWVudGFsbHkgd2l0aG91dAorICAgaW50ZXJmZXJpbmcgd2l0 aCBleGlzdGluZyBkYXRhIChvciBzdHJ1Y3R1cmVzIGxpa2UgaW5kZXhlcykuCisgIDwvcGFyYT4K KyAgPHNlY3QzPgorICAgPHRpdGxlPlNlYXJjaCBieSBDb2xsYXRvciBWZXJzaW9uPC90aXRsZT4K KworICAgPHBhcmE+CisgICAgQ29sbGF0b3JzIHByb3ZpZGVkIGJ5IElDVSBhbHNvIGhhdmUgYSB2 ZXJzaW9uIHdoaWNoIGlzIGRpc3RpbmN0IGZyb20gdGhlCisgICAgdmVyc2lvbiBvZiBJQ1UuIEZv ciBpbnN0YW5jZSwgaW4gSUNVIHZlcnNpb24gPGxpdGVyYWw+NzAuMTwvbGl0ZXJhbD4sIHRoZQor ICAgIGNvbGxhdG9yIGZvciB0aGUgPGxpdGVyYWw+ZW5fVVM8L2xpdGVyYWw+IGxvY2FsZSBoYXMg dmVyc2lvbgorICAgIDxsaXRlcmFsPjE1My4xMTI8L2xpdGVyYWw+LiBBIGNvbGxhdG9yIGZvciBh IGdpdmVuIGxvY2FsZSBtYXkgb3IgbWF5IG5vdAorICAgIGJlIGFzc2lnbmVkIGEgbmV3IHZlcnNp b24gd2hlbiB0aGUgSUNVIGxpYnJhcnkgdmVyc2lvbiBpcyB1cGRhdGVkLgorICAgPC9wYXJhPgor CisgICA8cGFyYT4KKyAgICBXaGVuIGEgY29sbGF0aW9uIGlzIGNyZWF0ZWQsIDxwcm9kdWN0bmFt ZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4gb2J0YWlucworICAgIHRoZSB2ZXJzaW9uIG9mIHRo ZSBjb2xsYXRvciBmcm9tIHRoZSBJQ1UgbGlicmFyeSBhbmQgcmVjb3JkcyBpdCBpbiB0aGUKKyAg ICBjYXRhbG9nLiBUaGlzIHJlY29yZGVkIHZlcnNpb24gY2FuIGJlIHVwZGF0ZWQgdXNpbmcgPGxp dGVyYWw+QUxURVIKKyAgICBDT0xMQVRJT04gLi4uIFJFRlJFU0ggVkVSU0lPTjwvbGl0ZXJhbD47 IG9yIDxsaXRlcmFsPkFMVEVSIERBVEFCQVNFCisgICAgLi4uIFJFRlJFU0ggQ09MTEFUSU9OIFZF UlNJT048L2xpdGVyYWw+IGlmIGl0J3MgdGhlIGRhdGFiYXNlJ3MgZGVmYXVsdAorICAgIGNvbGxh dGlvbi4gVGhlc2UgPGxpdGVyYWw+QUxURVI8L2xpdGVyYWw+IGNvbW1hbmRzIG9idGFpbiB0aGUg bmV3IGNvbGxhdG9yCisgICAgdmVyc2lvbiBmcm9tIHRoZSBJQ1UgbGlicmFyeSBpZGVudGlmaWVk IGJ5CisgICAgPHZhcm5hbWU+aWN1X211bHRpbGliLmRlZmF1bHRfaWN1X3ZlcnNpb248L3Zhcm5h bWU+IGlmIHNldDsgb3RoZXJ3aXNlIHRoZXkKKyAgICBvYnRhaW4gdGhlIG5ldyBjb2xsYXRvciB2 ZXJzaW9uIGZyb20gdGhlIGJ1aWx0LWluIElDVSBsaWJyYXJ5LgorICAgPC9wYXJhPgorCisgICA8 cGFyYT4KKyAgICBTZXQgPHZhcm5hbWU+aWN1X211bHRpbGliLnNlYXJjaF9ieV9jb2xsYXRvcl92 ZXJzaW9uPC92YXJuYW1lPiB0bworICAgIDxsaXRlcmFsPnRydWU8L2xpdGVyYWw+IHRvIGVuYWJs ZSA8ZmlsZW5hbWU+aWN1X211bHRpbGliPC9maWxlbmFtZT4gdG8KKyAgICBzZWFyY2ggKGluIGRl c2NlbmRpbmcgb3JkZXIgb2YgSUNVIG1ham9yIHZlcnNpb24pIGFtb25nIHRoZQorICAgIGF2YWls YWJsZSBsaWJyYXJpZXMgdG8gZmluZCB0aGUgZmlyc3Qgb25lIHRoYXQgcHJvdmlkZXMgYSBjb2xs YXRvciB3aXRoIGEKKyAgICB2ZXJzaW9uIHRoYXQgbWF0Y2hlcyB0aGUgb25lIHJlY29yZGVkIGlu IHRoZSBjYXRhbG9nLgorICAgPC9wYXJhPgorCisgICA8cGFyYT4KKyAgICBGb3IgZXhhbXBsZSwg SUNVIHZlcnNpb25zIDxsaXRlcmFsPjYyLjI8L2xpdGVyYWw+IGFuZAorICAgIDxsaXRlcmFsPjYz LjI8L2xpdGVyYWw+IGJvdGggcHJvdmlkZSBjb2xsYXRvciB2ZXJzaW9uCisgICAgPGxpdGVyYWw+ MTUzLjg4PC9saXRlcmFsPiBmb3IgdGhlIGxvY2FsZSA8bGl0ZXJhbD5lbl9VUzwvbGl0ZXJhbD47 IHdoaWxlCisgICAgSUNVIHZlcnNpb24gPGxpdGVyYWw+NjQuMjwvbGl0ZXJhbD4gcHJvdmlkZXMg Y29sbGF0b3IgdmVyc2lvbgorICAgIDxsaXRlcmFsPjE1My45NzwvbGl0ZXJhbD4gZm9yIHRoZSBz YW1lIGxvY2FsZS4gU2VhcmNoaW5nIGZvciBhbiBJQ1UKKyAgICBsaWJyYXJ5IGZvciBhIGNvbGxh dGlvbiB3aXRoIGEgcmVjb3JkZWQgdmVyc2lvbiBvZgorICAgIDxsaXRlcmFsPjE1My44ODwvbGl0 ZXJhbD4gd2lsbCBmaW5kIHRoZSBJQ1UgbGlicmFyeSB3aXRoIHZlcnNpb24KKyAgICA8bGl0ZXJh bD42My4yPC9saXRlcmFsPiwgYmVjYXVzZSB0aGF0J3MgdGhlIElDVSBsaWJyYXJ5IHdpdGggdGhl IGhpZ2hlc3QKKyAgICBtYWpvciB2ZXJzaW9uICg8bGl0ZXJhbD42MzwvbGl0ZXJhbD4pIHRoYXQg cHJvdmlkZXMgY29sbGF0b3IgdmVyc2lvbgorICAgIDxsaXRlcmFsPjE1My44ODwvbGl0ZXJhbD4u IFRoZSBmdW5jdGlvbgorICAgIDxmdW5jdGlvbj5pY3VfbXVsdGlsaWIuY29sbGF0b3JfdmVyc2lv bl9zZWFyY2g8L2Z1bmN0aW9uPiBzaW11bGF0ZXMgdGhpcworICAgIHNlYXJjaCBmb3IgdGhlIGdp dmVuIGxvY2FsZSBhbmQgdmVyc2lvbjoKKyAgIDwvcGFyYT4KKzxwcm9ncmFtbGlzdGluZz4KK1NF TEVDVCAqIEZST00gaWN1X211bHRpbGliLmNvbGxhdG9yX3ZlcnNpb25fc2VhcmNoKCdlbl9VUycs ICcxNTMuODgnKTsKKyBpY3VfdmVyc2lvbiB8IHVjYV92ZXJzaW9uIHwgY29sbGF0b3JfdmVyc2lv bgorLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQorIDYzLjIg ICAgICAgIHwgMTEuMCAgICAgICAgfCAxNTMuODgKKygxIHJvdykKKworPC9wcm9ncmFtbGlzdGlu Zz4KKworICAgPG5vdGU+CisgICAgPHBhcmE+CisgICAgIFNlYXJjaGluZyBieSBjb2xsYXRvciB2 ZXJzaW9uIHJlbGllcyBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IGNvbGxhdG9ycworICAgICB3aXRo IHRoZSBzYW1lIHZlcnNpb24gYmVoYXZlIGlkZW50aWNhbGx5IHJlZ2FyZGxlc3Mgb2Ygd2hpY2gg SUNVIGxpYnJhcnkKKyAgICAgcHJvdmlkZXMgaXQuIFRoZSBhZG1pbmlzdHJhdG9yIG11c3Qgd2Vp Z2ggdGhlIHJpc2tzIG9mIHRoaXMgYXNzdW1wdGlvbgorICAgICBhZ2FpbnN0IHRoZSBjb252ZW5p ZW5jZSB3aGVuIG1hbmFnaW5nIG11bHRpcGxlIG1ham9yIHZlcnNpb25zIG9mIElDVS4KKyAgICA8 L3BhcmE+CisgICA8L25vdGU+CisgIDwvc2VjdDM+CisgPC9zZWN0Mj4KKworIDxzZWN0MiBpZD0i aWN1LW11bHRpbGliLWNvbmZpZ3VyYXRpb24tcGFyYW1ldGVycyI+CisgIDx0aXRsZT5Db25maWd1 cmF0aW9uIFBhcmFtZXRlcnM8L3RpdGxlPgorCisgIDx2YXJpYWJsZWxpc3Q+CisgICA8dmFybGlz dGVudHJ5PgorICAgIDx0ZXJtPgorICAgICA8dmFybmFtZT5pY3VfbXVsdGlsaWIubGlicmFyeV9w YXRoPC92YXJuYW1lPiAoPHR5cGU+c3RyaW5nPC90eXBlPikKKyAgICAgPGluZGV4dGVybT4KKyAg ICAgIDxwcmltYXJ5Pjx2YXJuYW1lPmljdV9tdWx0aWxpYi5saWJyYXJ5X3BhdGg8L3Zhcm5hbWU+ IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyPC9wcmltYXJ5PgorICAgICA8L2luZGV4dGVybT4KKyAg ICA8L3Rlcm0+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIFRoZSBmaWxlc3lz dGVtIHBhdGggaW4gd2hpY2ggdG8gc2VhcmNoIGZvciBJQ1UgbGlicmFyaWVzLiBNdXN0IGJlIHNl dAorICAgICAgZm9yIDxmaWxlbmFtZT5pY3VfbXVsdGlsaWI8L2ZpbGVuYW1lPiB0byBiZSB1c2Vm dWwuIE11bHRpcGxlIG1ham9yCisgICAgICB2ZXJzaW9ucyBvZiBJQ1UgbWF5IGJlIHByZXNlbnQ7 IGJ1dCBmb3IgZWFjaCBtYWpvciB2ZXJzaW9uLCBvbmx5IGEKKyAgICAgIHNpbmdsZSBtaW5vciB2 ZXJzaW9uIGNhbiBiZSBwcmVzZW50LgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAg IDwvdmFybGlzdGVudHJ5PgorCisgICA8dmFybGlzdGVudHJ5PgorICAgIDx0ZXJtPgorICAgICA8 dmFybmFtZT5pY3VfbXVsdGlsaWIudmVyc2lvbl9taXNtYXRjaF9sb2dfbGV2ZWw8L3Zhcm5hbWU+ ICg8dHlwZT5zdHJpbmc8L3R5cGU+KQorICAgICA8aW5kZXh0ZXJtPgorICAgICAgPHByaW1hcnk+ PHZhcm5hbWU+aWN1X211bHRpbGliLnZlcnNpb25fbWlzbWF0Y2hfbG9nX2xldmVsPC92YXJuYW1l PiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgPC9pbmRleHRlcm0+Cisg ICAgPC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBBIHZlcnNpb24g bWlzbWF0Y2ggaGFwcGVucyB3aGVuIHRoZSB2ZXJzaW9uIG9mIGEgY29sbGF0b3IgcHJvdmlkZWQg YnkKKyAgICAgIHRoZSBJQ1UgbGlicmFyeSBpcyBkaWZmZXJlbnQgdGhhbiB0aGVuIGNvbGxhdG9y IHZlcnNpb24gcmVjb3JkZWQgd2hlbgorICAgICAgdGhlIGNvbGxhdGlvbiB3YXMgY3JlYXRlZCAo b3IgbGFzdCByZWZyZXNoZWQpLgorICAgICA8L3BhcmE+CisgICAgIDxwYXJhPgorICAgICAgV2hl biBhIHZlcnNpb24gbWlzbWF0Y2ggaXMgZGV0ZWN0ZWQsIGEgbG9nIG1lc3NhZ2UgaXMgZW1pdHRl ZCBhdCB0aGlzCisgICAgICBsZXZlbC4gPGxpdGVyYWw+V0FSTklORzwvbGl0ZXJhbD4gaXMgdGhl IGRlZmF1bHQuIElmIHRoZSBsZXZlbCBpcyBzZXQgdG8KKyAgICAgIDxsaXRlcmFsPkVSUk9SPC9s aXRlcmFsPiwgaXQgbWF5IGludGVyZmVyZSB3aXRoIG5vcm1hbCBvcGVyYXRpb24uCisgICAgIDwv cGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgIDx2YXJsaXN0 ZW50cnk+CisgICAgPHRlcm0+CisgICAgIDx2YXJuYW1lPmljdV9tdWx0aWxpYi5saWJyYXJ5X3Nl YXJjaF9sb2dfbGV2ZWw8L3Zhcm5hbWU+ICg8dHlwZT5zdHJpbmc8L3R5cGU+KQorICAgICA8aW5k ZXh0ZXJtPgorICAgICAgPHByaW1hcnk+PHZhcm5hbWU+aWN1X211bHRpbGliLmxpYnJhcnlfc2Vh cmNoX2xvZ19sZXZlbDwvdmFybmFtZT4gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXI8L3ByaW1hcnk+ CisgICAgIDwvaW5kZXh0ZXJtPgorICAgIDwvdGVybT4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxw YXJhPgorICAgICAgPGZpbGVuYW1lPmljdV9tdWx0aWxpYjwvZmlsZW5hbWU+IGVtaXRzIG1lc3Nh Z2VzIGF0IHRoaXMgbGV2ZWwgd2hpbGUKKyAgICAgIGRldGVybWluaW5nIHdoaWNoIElDVSBsaWJy YXJ5IHRvIGNob29zZS4gVGhlIGRlZmF1bHQgaXMKKyAgICAgIDxsaXRlcmFsPkRFQlVHMTwvbGl0 ZXJhbD4uIFRoaXMgc2V0dGluZyBpcyB1c2VmdWwgdG8gZGlhZ25vc2UgcHJvYmxlbXMKKyAgICAg IHdoZW4gYSBzdWl0YWJsZSBJQ1UgbGlicmFyeSBpcyBub3QgZm91bmQuCisgICAgIDwvcGFyYT4K KyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgIDx2YXJsaXN0ZW50cnk+ CisgICAgPHRlcm0+CisgICAgIDx2YXJuYW1lPmljdV9tdWx0aWxpYi5kZWZhdWx0X2ljdV92ZXJz aW9uPC92YXJuYW1lPiAoPHR5cGU+c3RyaW5nPC90eXBlPikKKyAgICAgPGluZGV4dGVybT4KKyAg ICAgIDxwcmltYXJ5Pjx2YXJuYW1lPmljdV9tdWx0aWxpYi5kZWZhdWx0X2ljdV92ZXJzaW9uPC92 YXJuYW1lPiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgPC9pbmRleHRl cm0+CisgICAgPC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBJZGVu dGlmaWVzIHRoZSB2ZXJzaW9uIG9mIHRoZSBJQ1UgbGlicmFyeSB0byBjaG9vc2U7IG9yLCBpZiA8 dmFybmFtZT5pY3VfbXVsdGlsaWIuc2VhcmNoX2J5X2NvbGxhdG9yX3ZlcnNpb248L3Zhcm5hbWU+ IGlzIDxsaXRlcmFsPnRydWU8L2xpdGVyYWw+LCB0aGUgSUNVIGxpYnJhcnkgdG8gY2hvb3NlIGlm IG5vIGlkZW50aWNhbCBtYXRjaCB0byB0aGUgY29sbGF0b3IgdmVyc2lvbiBpcyBmb3VuZC4gVGhl IGRlZmF1bHQgaXMgdGhlIGVtcHR5IHN0cmluZywgbWVhbmluZyB0byB1c2UgdGhlIGJ1aWx0LWlu IElDVSBsaWJyYXJ5LgorICAgICA8L3BhcmE+CisgICAgIDxwYXJhPgorICAgICAgVmFsaWQgdmFs dWVzIGFyZSBlaXRoZXIgb2YgdGhlIGZvcm0gPGxpdGVyYWw+bWFqb3IubWlub3I8L2xpdGVyYWw+ IHN1Y2gKKyAgICAgIGFzIDxsaXRlcmFsPjcwLjE8L2xpdGVyYWw+OyBvciBhIG1ham9yIHZlcnNp b24gbnVtYmVyIGFsb25lLCBzdWNoIGFzCisgICAgICA8bGl0ZXJhbD43MDwvbGl0ZXJhbD4uCisg ICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgIDx2 YXJsaXN0ZW50cnk+CisgICAgPHRlcm0+CisgICAgIDx2YXJuYW1lPmljdV9tdWx0aWxpYi5pbmNs dWRlX2J1aWx0aW48L3Zhcm5hbWU+ICg8dHlwZT5zdHJpbmc8L3R5cGU+KQorICAgICA8aW5kZXh0 ZXJtPgorICAgICAgPHByaW1hcnk+PHZhcm5hbWU+aWN1X211bHRpbGliLmluY2x1ZGVfYnVpbHRp bjwvdmFybmFtZT4gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXI8L3ByaW1hcnk+CisgICAgIDwvaW5k ZXh0ZXJtPgorICAgIDwvdGVybT4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAg RGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBidWlsdC1pbiB2ZXJzaW9uIG9mIElDVSBpcyBpbmNsdWRl ZCB3aGVuCisgICAgICBzZWFyY2hpbmcgZm9yIGEgc3VpdGFibGUgSUNVIGxpYnJhcnkuIFRoZSBk ZWZhdWx0IGlzCisgICAgICA8bGl0ZXJhbD50cnVlPC9saXRlcmFsPi4KKyAgICAgPC9wYXJhPgor ICAgICA8cGFyYT4KKyAgICAgIEV2ZW4gaWYgc2V0IHRvIDxsaXRlcmFsPmZhbHNlPC9saXRlcmFs PiwgdGhlIGJ1aWx0LWluIElDVSBsaWJyYXJ5IG1heSBiZQorICAgICAgdXNlZCBpZiBubyBvdGhl ciBzdWl0YWJsZSBJQ1UgbGlicmFyeSBpcyBpZGVudGlmaWVkIGFuZAorICAgICAgPHZhcm5hbWU+ aWN1X211bHRpbGliLmRlZmF1bHRfaWN1X3ZlcnNpb248L3Zhcm5hbWU+IGlzIHNldCB0byB0aGUg ZW1wdHkKKyAgICAgIHN0cmluZy4KKyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8 L3Zhcmxpc3RlbnRyeT4KKworICAgPHZhcmxpc3RlbnRyeT4KKyAgICA8dGVybT4KKyAgICAgPHZh cm5hbWU+aWN1X211bHRpbGliLnNlYXJjaF9ieV9jb2xsYXRvcl92ZXJzaW9uPC92YXJuYW1lPiAo PHR5cGU+c3RyaW5nPC90eXBlPikKKyAgICAgPGluZGV4dGVybT4KKyAgICAgIDxwcmltYXJ5Pjx2 YXJuYW1lPmljdV9tdWx0aWxpYi5zZWFyY2hfYnlfY29sbGF0b3JfdmVyc2lvbjwvdmFybmFtZT4g Y29uZmlndXJhdGlvbiBwYXJhbWV0ZXI8L3ByaW1hcnk+CisgICAgIDwvaW5kZXh0ZXJtPgorICAg IDwvdGVybT4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgQ2F1c2VzIDxmaWxl bmFtZT5pY3VfbXVsdGlsaWI8L2ZpbGVuYW1lPiB0byBpZGVudGlmeSB0aGUgSUNVIGxpYnJhcnkK KyAgICAgIHdpdGggdGhlIGhpZ2hlc3QgbWFqb3IgdmVyc2lvbiB0aGF0IG9mZmVycyB0aGUgcmVx dWlyZWQgY29sbGF0b3Igd2l0aCBhbgorICAgICAgZXhhY3RseS1tYXRjaGluZyBjb2xsYXRvciB2 ZXJzaW9uLiBUaGUgZGVmYXVsdCBpcyA8bGl0ZXJhbD5mYWxzZTwvbGl0ZXJhbD4uCisgICAgIDwv cGFyYT4KKyAgICAgPHBhcmE+CisgICAgICBXaGVuIHNldCB0byA8bGl0ZXJhbD50cnVlPC9saXRl cmFsPiwgPGZpbGVuYW1lPmljdV9tdWx0aWxpYjwvZmlsZW5hbWU+CisgICAgICByZWxpZXMgb24g ZXF1YWwgY29sbGF0b3IgdmVyc2lvbnMgdG8gcHJvZHVjZSBpZGVudGljYWwgY29sbGF0aW9uIG9y ZGVyLgorICAgICA8L3BhcmE+CisgICAgIDxwYXJhPgorICAgICAgSWYgbm8gSUNVIGxpYnJhcnkg aXMgZm91bmQgd2l0aCBhbiBleGFjdGx5LW1hdGNoaW5nIGNvbGxhdG9yIHZlcnNpb24sCisgICAg ICA8ZmlsZW5hbWU+aWN1X211bHRpbGliPC9maWxlbmFtZT4gd2lsbCBmYWxsIGJhY2sgdG8gdGhl CisgICAgICA8dmFybmFtZT5pY3VfbXVsdGlsaWIuZGVmYXVsdF9pY3VfdmVyc2lvbjwvdmFybmFt ZT47IG9yIGlmIG5vdCBzZXQsIHRvCisgICAgICB0aGUgYnVpbHQtaW4gSUNVIGxpYnJhcnkuCisg ICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisgIDwvdmFy aWFibGVsaXN0PgorIDwvc2VjdDI+CisKKyA8c2VjdDI+CisgIDx0aXRsZT5GdW5jdGlvbnM8L3Rp dGxlPgorCisgIDx0YWJsZSBpZD0iaWN1LW11bHRpbGliLWZ1bmN0aW9ucyI+CisgICA8dGl0bGU+ PGZpbGVuYW1lPmljdV9tdWx0aWxpYjwvZmlsZW5hbWU+IEZ1bmN0aW9uczwvdGl0bGU+CisgICA8 dGdyb3VwIGNvbHM9IjEiPgorICAgIDx0aGVhZD4KKyAgICAgPHJvdz4KKyAgICAgIDxlbnRyeSBy b2xlPSJmdW5jX3RhYmxlX2VudHJ5Ij48cGFyYSByb2xlPSJmdW5jX3NpZ25hdHVyZSI+CisgICAg ICAgRnVuY3Rpb24KKyAgICAgIDwvcGFyYT4KKyAgICAgIDxwYXJhPgorICAgICAgIERlc2NyaXB0 aW9uCisgICAgICA8L3BhcmE+PC9lbnRyeT4KKyAgICAgPC9yb3c+CisgICAgPC90aGVhZD4KKwor ICAgIDx0Ym9keT4KKyAgICAgPHJvdz4KKyAgICAgIDxlbnRyeSByb2xlPSJmdW5jX3RhYmxlX2Vu dHJ5Ij48cGFyYSByb2xlPSJmdW5jX3NpZ25hdHVyZSI+CisgICAgICAgPGZ1bmN0aW9uPmljdV9t dWx0aWxpYi5saWJyYXJ5X3ZlcnNpb25zPC9mdW5jdGlvbj4gKCkKKyAgICAgICA8cmV0dXJudmFs dWU+c2V0b2YgcmVjb3JkPC9yZXR1cm52YWx1ZT4KKyAgICAgICAoIDxwYXJhbWV0ZXI+aWN1X3Zl cnNpb248L3BhcmFtZXRlcj4gPHR5cGU+dGV4dDwvdHlwZT4sCisgICAgICAgPHBhcmFtZXRlcj51 bmljb2RlX3ZlcnNpb248L3BhcmFtZXRlcj4gPHR5cGU+dGV4dDwvdHlwZT4sCisgICAgICAgPHBh cmFtZXRlcj5jbGRyX3ZlcnNpb248L3BhcmFtZXRlcj4gPHR5cGU+dGV4dDwvdHlwZT4sCisgICAg ICAgPHBhcmFtZXRlcj5saWJpY3VpMThuX25hbWU8L3BhcmFtZXRlcj4gPHR5cGU+dGV4dDwvdHlw ZT4sCisgICAgICAgPHBhcmFtZXRlcj5saWJpY3V1Y19uYW1lPC9wYXJhbWV0ZXI+IDx0eXBlPnRl eHQ8L3R5cGU+KQorICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgUmV0dXJucyBk ZXRhaWxzIGZvciBlYWNoIGF2YWlsYWJsZSBJQ1UgbGlicmFyeSBmb3VuZCBpbgorICAgICAgIDx2 YXJuYW1lPmljdV9tdWx0aWxpYi5saWJyYXJ5X3BhdGg8L3Zhcm5hbWU+LiBBbHNvIGluY2x1ZGVz IHRoZQorICAgICAgIGJ1aWx0LWluIElDVSBsaWJyYXJ5IGl2IDx2YXJuYW1lPmljdV9tdWx0aWxp Yi5pbmNsdWRlX2J1aWx0aW48L3Zhcm5hbWU+CisgICAgICAgaXMgPGxpdGVyYWw+dHJ1ZTwvbGl0 ZXJhbD4uCisgICAgICA8L3BhcmE+PC9lbnRyeT4KKyAgICAgPC9yb3c+CisgICAgIDxyb3c+Cisg ICAgICA8ZW50cnkgcm9sZT0iZnVuY190YWJsZV9lbnRyeSI+PHBhcmEgcm9sZT0iZnVuY19zaWdu YXR1cmUiPgorICAgICAgIDxmdW5jdGlvbj5pY3VfbXVsdGlsaWIubGlicmFyeV9jb2xsYXRvcnM8 L2Z1bmN0aW9uPiAoIDxwYXJhbWV0ZXI+bWFqb3JfdmVyc2lvbjwvcGFyYW1ldGVyPiA8dHlwZT50 ZXh0PC90eXBlPiA8bGl0ZXJhbD5ERUZBVUxUPC9saXRlcmFsPiA8bGl0ZXJhbD5udWxsPC9saXRl cmFsPiApCisgICAgICAgPHJldHVybnZhbHVlPnNldG9mIHJlY29yZDwvcmV0dXJudmFsdWU+Cisg ICAgICAgKCA8cGFyYW1ldGVyPmxvY2FsZTwvcGFyYW1ldGVyPiA8dHlwZT50ZXh0PC90eXBlPiwK KyAgICAgICA8cGFyYW1ldGVyPmljdV92ZXJzaW9uPC9wYXJhbWV0ZXI+IDx0eXBlPnRleHQ8L3R5 cGU+LAorICAgICAgIDxwYXJhbWV0ZXI+dWNhX3ZlcnNpb248L3BhcmFtZXRlcj4gPHR5cGU+dGV4 dDwvdHlwZT4sCisgICAgICAgPHBhcmFtZXRlcj5jb2xsYXRvcl92ZXJzaW9uPC9wYXJhbWV0ZXI+ IDx0eXBlPnRleHQ8L3R5cGU+ICkKKyAgICAgIDwvcGFyYT4KKyAgICAgIDxwYXJhPgorICAgICAg IFJldHVybnMgZGV0YWlscyBmb3IgYWxsIGF2YWlsYWJsZSBjb2xsYXRvcnMgcHJvdmlkZWQgYnkg dGhlIElDVSBsaWJyYXJ5CisgICAgICAgd2l0aCB0aGUgZ2l2ZW4gPHBhcmFtZXRlcj5tYWpvcl92 ZXJzaW9uPC9wYXJhbWV0ZXI+OyBvciBieSB0aGUgYnVpbHQtaW4KKyAgICAgICBJQ1UgbGlicmFy eSBpZiA8cGFyYW1ldGVyPm1ham9yX3ZlcnNpb248L3BhcmFtZXRlcj4gaXMKKyAgICAgICA8bGl0 ZXJhbD5udWxsPC9saXRlcmFsPi4KKyAgICAgIDwvcGFyYT48L2VudHJ5PgorICAgICA8L3Jvdz4K KyAgICAgPHJvdz4KKyAgICAgIDxlbnRyeSByb2xlPSJmdW5jX3RhYmxlX2VudHJ5Ij48cGFyYSBy b2xlPSJmdW5jX3NpZ25hdHVyZSI+CisgICAgICAgPGZ1bmN0aW9uPmljdV9tdWx0aWxpYi5jb2xs YXRvcl92ZXJzaW9uX3NlYXJjaDwvZnVuY3Rpb24+ICggPHBhcmFtZXRlcj5sb2NhbGU8L3BhcmFt ZXRlcj4gPHR5cGU+dGV4dDwvdHlwZT4sIDxwYXJhbWV0ZXI+cmVxdWVzdGVkX3ZlcnNpb248L3Bh cmFtZXRlcj4gPHR5cGU+dGV4dDwvdHlwZT4gPGxpdGVyYWw+REVGQVVMVDwvbGl0ZXJhbD4gPGxp dGVyYWw+bnVsbDwvbGl0ZXJhbD4sIDxwYXJhbWV0ZXI+bG9nX29rPC9wYXJhbWV0ZXI+IDx0eXBl PmJvb2xlYW48L3R5cGU+IDxsaXRlcmFsPkRFRkFVTFQ8L2xpdGVyYWw+IDxsaXRlcmFsPmZhbHNl PC9saXRlcmFsPiApCisgICAgICAgPHJldHVybnZhbHVlPnJlY29yZDwvcmV0dXJudmFsdWU+Cisg ICAgICAgKCA8cGFyYW1ldGVyPmljdV92ZXJzaW9uPC9wYXJhbWV0ZXI+IDx0eXBlPnRleHQ8L3R5 cGU+LAorICAgICAgIDxwYXJhbWV0ZXI+dWNhX3ZlcnNpb248L3BhcmFtZXRlcj4gPHR5cGU+dGV4 dDwvdHlwZT4sCisgICAgICAgPHBhcmFtZXRlcj5jb2xsYXRvcl92ZXJzaW9uPC9wYXJhbWV0ZXI+ IDx0eXBlPnRleHQ8L3R5cGU+ICkKKyAgICAgIDwvcGFyYT4KKyAgICAgIDxwYXJhPgorICAgICAg IFBlcmZvcm1zIGEgc2VhcmNoIGZvciB0aGUgYXBwcm9wcmlhdGUgSUNVIGxpYnJhcnkgZ2l2ZW4g dGhlIGxvY2FsZSBuYW1lCisgICAgICAgYW5kIHJlcXVlc3RlZCBjb2xsYXRvciB2ZXJzaW9uLCBh bmQgcmV0dXJucyBkZXRhaWxzIGFib3V0IHRoZSBJQ1UKKyAgICAgICBsaWJyYXJ5LgorICAgICAg PC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgSWYgPHBhcmFtZXRlcj5yZXF1ZXN0ZWRfdmVy c2lvbjwvcGFyYW1ldGVyPiBpcyA8bGl0ZXJhbD5udWxsPC9saXRlcmFsPiwKKyAgICAgICBpdCB3 aWxsIHJldHVybiB0aGUgSUNVIGxpYnJhcnkgaWRlbnRpZmllZCBieQorICAgICAgIDx2YXJuYW1l PmljdV9tdWx0aWxpYi5kZWZhdWx0X2ljdV92ZXJzaW9uPC92YXJuYW1lPiBpZiBzZXQgdG8KKyAg ICAgICA8bGl0ZXJhbD50cnVlPC9saXRlcmFsPjsgb3RoZXJ3aXNlIHRoZSBidWlsdC1pbiBJQ1Ug bGlicmFyeS4KKyAgICAgIDwvcGFyYT4KKyAgICAgIDxwYXJhPgorICAgICAgIElmIDxwYXJhbWV0 ZXI+bG9nX29rPC9wYXJhbWV0ZXI+IGlzIDxsaXRlcmFsPnRydWU8L2xpdGVyYWw+LCB0aGUgc2Vh cmNoCisgICAgICAgbWF5IGVtaXQgbG9nIG1lc3NhZ2VzIGF0IHRoZSBsZXZlbAorICAgICAgIDx2 YXJuYW1lPmljdV9tdWx0aWxpYi5saWJyYXJ5X3NlYXJjaF9sb2dfbGV2ZWw8L3Zhcm5hbWU+LCB3 aGljaCBtYXkgYmUKKyAgICAgICB1c2VmdWwgZm9yIGRpYWdub3NpbmcgbWlzY29uZmlndXJhdGlv bi4KKyAgICAgIDwvcGFyYT48L2VudHJ5PgorICAgICA8L3Jvdz4KKyAgICAgPHJvdz4KKyAgICAg IDxlbnRyeSByb2xlPSJmdW5jX3RhYmxlX2VudHJ5Ij48cGFyYSByb2xlPSJmdW5jX3NpZ25hdHVy ZSI+CisgICAgICAgPGZ1bmN0aW9uPmljdV9tdWx0aWxpYi5jb2xsYXRvcl92ZXJzaW9uczwvZnVu Y3Rpb24+ICggPHBhcmFtZXRlcj5sb2NhbGU8L3BhcmFtZXRlcj4gPHR5cGU+dGV4dDwvdHlwZT4g KQorICAgICAgIDxyZXR1cm52YWx1ZT5zZXRvZiByZWNvcmQ8L3JldHVybnZhbHVlPgorICAgICAg ICggPHBhcmFtZXRlcj5pY3VfdmVyc2lvbjwvcGFyYW1ldGVyPiA8dHlwZT50ZXh0PC90eXBlPiwK KyAgICAgICA8cGFyYW1ldGVyPnVjYV92ZXJzaW9uPC9wYXJhbWV0ZXI+IDx0eXBlPnRleHQ8L3R5 cGU+LAorICAgICAgIDxwYXJhbWV0ZXI+Y29sbGF0b3JfdmVyc2lvbjwvcGFyYW1ldGVyPiA8dHlw ZT50ZXh0PC90eXBlPiApCisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICBSZXR1 cm5zIGRldGFpbHMgYWJvdXQgYXZhaWxhYmxlIGNvbGxhdG9ycyBmb3IgdGhlIGdpdmVuCisgICAg ICAgPHBhcmFtZXRlcj5sb2NhbGU8L3BhcmFtZXRlcj4gZnJvbSBhbGwgYXZhaWxhYmxlIElDVSBs aWJyYXJpZXMuCisgICAgICA8L3BhcmE+PC9lbnRyeT4KKyAgICAgPC9yb3c+CisgICAgPC90Ym9k eT4KKyAgIDwvdGdyb3VwPgorICA8L3RhYmxlPgorIDwvc2VjdDI+CisKKyA8c2VjdDIgaWQ9Imlj dS1tdWx0aWxpYi1leGFtcGxlcyI+CisgIDx0aXRsZT5FeGFtcGxlczwvdGl0bGU+CisKKzxzY3Jl ZW4+CitTRUxFQ1QgaWN1X3ZlcnNpb24sIHVuaWNvZGVfdmVyc2lvbiwgY2xkcl92ZXJzaW9uIEZS T00gaWN1X211bHRpbGliLmxpYnJhcnlfdmVyc2lvbnMoKSBMSU1JVCAzOworIGljdV92ZXJzaW9u IHwgdW5pY29kZV92ZXJzaW9uIHwgY2xkcl92ZXJzaW9uCistLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tCisgNzAuMSAgICAgICAgfCAxNC4wICAgICAgICAgICAg fCA0MC4wCisgNjkuMSAgICAgICAgfCAxMy4wICAgICAgICAgICAgfCAzOS4wCisgNjguMiAgICAg ICAgfCAxMy4wICAgICAgICAgICAgfCAzOC4xCisoMyByb3dzKQorPC9zY3JlZW4+CisKKzxzY3Jl ZW4+CitTRUxFQ1QgKiBGUk9NIGljdV9tdWx0aWxpYi5jb2xsYXRvcl92ZXJzaW9ucygnZW5fVVMn KSBXSEVSRSBpY3VfdmVyc2lvbiBCRVRXRUVOICc2MC4wJyBhbmQgJzY1LjAnOworIGljdV92ZXJz aW9uIHwgdWNhX3ZlcnNpb24gfCBjb2xsYXRvcl92ZXJzaW9uCistLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tCisgNjQuMiAgICAgICAgfCAxMi4xICAgICAgICB8 IDE1My45NworIDYzLjIgICAgICAgIHwgMTEuMCAgICAgICAgfCAxNTMuODgKKyA2Mi4yICAgICAg ICB8IDExLjAgICAgICAgIHwgMTUzLjg4CisgNjEuMiAgICAgICAgfCAxMC4wICAgICAgICB8IDE1 My44MAorIDYwLjMgICAgICAgIHwgMTAuMCAgICAgICAgfCAxNTMuODAKKyg1IHJvd3MpCis8L3Nj cmVlbj4KKworPHNjcmVlbj4KK1NFTEVDVCAqIEZST00gaWN1X211bHRpbGliLmNvbGxhdG9yX3Zl cnNpb25fc2VhcmNoKCdlbl9VUycsICcxNTMuOTcnKTsKKyBpY3VfdmVyc2lvbiB8IHVjYV92ZXJz aW9uIHwgY29sbGF0b3JfdmVyc2lvbgorLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0tLQorIDY1LjEgICAgICAgIHwgMTIuMSAgICAgICAgfCAxNTMuOTcKKygxIHJv dykKKzwvc2NyZWVuPgorCisgPC9zZWN0Mj4KKworIDxzZWN0MiBpZD0iaWN1LW11bHRpbGliLWF1 dGhvciI+CisgIDx0aXRsZT5BdXRob3JzPC90aXRsZT4KKworICA8cGFyYT4KKyAgIEplZmYgRGF2 aXMgPGVtYWlsPmpkYXZpc0Bwb3N0Z3Jlc3FsLm9yZzwvZW1haWw+LCBUaG9tYXMgTXVucm8gPGVt YWlsPnRtdW5yb0Bwb3N0Z3Jlc3FsLm9yZzwvZW1haWw+CisgIDwvcGFyYT4KKyA8L3NlY3QyPgor Cis8L3NlY3QxPgotLSAKMi4zNC4xCgo= --=-u4oNhfj6zIVO/ZOtTH+g Content-Disposition: attachment; filename="v8-0003-Add-initdb-option-no-import-collations.patch" Content-Type: text/x-patch; name="v8-0003-Add-initdb-option-no-import-collations.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSA5NjZjZGMyOTMwOTk2NWMzZGM1YTU2MDhjMzhjMzZmYWViOWNiYjc3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWZmIERhdmlzIDxqZWZmQGotZGF2aXMuY29tPgpEYXRlOiBX ZWQsIDE4IEphbiAyMDIzIDEyOjMyOjU2IC0wODAwClN1YmplY3Q6IFtQQVRDSCB2OCAzLzRdIEFk ZCBpbml0ZGIgb3B0aW9uIC0tbm8taW1wb3J0LWNvbGxhdGlvbnMuCgpJbiBwcmVwYXJhdGlvbiBm b3IgdGhlIGljdV9tdWx0aWxpYiBjb250cmliIG1vZHVsZSwgd2hpY2ggYWxsb3dzCmdyZWF0ZXIg Y29udHJvbCBvdmVyIGhvdyBJQ1UgY29sbGF0aW9ucyBhbmQgaG93IGRpZmZlcmVudCBJQ1UgbGli cmFyeQp2ZXJzaW9ucyBhcmUgbWFuYWdlZCBhbmQgdXNlZC4KCkJ5IG5vdCBjcmVhdGluZyB0aGUg Y29sbGF0aW9ucyBkdXJpbmcgaW5pdGRiIHRpbWUsIHRoZSB1c2VyIHdpbGwgYmUKYWJsZSB0byBy dW4gcGdfaW1wb3J0X3N5c3RlbV9jb2xsYXRpb25zKCkgdGhlbXNlbHZlcyB1c2luZyBhIHNwZWNp ZmljCnZlcnNpb24gb2YgSUNVLgotLS0KIGRvYy9zcmMvc2dtbC9yZWYvaW5pdGRiLnNnbWwgfCAx MSArKysrKysrKysrKwogc3JjL2Jpbi9pbml0ZGIvaW5pdGRiLmMgICAgICB8IDEwICsrKysrKysr Ky0KIDIgZmlsZXMgY2hhbmdlZCwgMjAgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQoKZGlm ZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvaW5pdGRiLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVm L2luaXRkYi5zZ21sCmluZGV4IDViMmJkYWMxMDEuLjVhMmRhODI5ZmIgMTAwNjQ0Ci0tLSBhL2Rv Yy9zcmMvc2dtbC9yZWYvaW5pdGRiLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9pbml0ZGIu c2dtbApAQCAtMzA1LDYgKzMwNSwxNyBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KICAgICAg IDwvbGlzdGl0ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5PgogCisgICAgIDx2YXJsaXN0ZW50cnkg aWQ9ImFwcC1pbml0ZGItb3B0aW9uLW5vLWltcG9ydC1jb2xsYXRpb25zIj4KKyAgICAgIDx0ZXJt PjxvcHRpb24+LS1uby1pbXBvcnQtY29sbGF0aW9uczwvb3B0aW9uPjwvdGVybT4KKyAgICAgIDxs aXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgUHJldmVudHMgPGNvbW1hbmQ+aW5pdGRi PC9jb21tYW5kPiBmcm9tIGltcG9ydGluZyBjb2xsYXRpb25zIGZyb20gdGhlCisgICAgICAgIHN5 c3RlbS4gVGhpcyBjYW4gYmUgdXNlZCB0byBtb3JlIGNhcmVmdWxseSBjb250cm9sIHdoaWNoIGNv bGxhdGlvbnMKKyAgICAgICAgYXJlIGluaXRpYWxseSBsb2FkZWQgaW4gZWFjaCBkYXRhYmFzZS4K KyAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4K KwogICAgICA8dmFybGlzdGVudHJ5IGlkPSJhcHAtaW5pdGRiLW9wdGlvbi1uby1zeW5jIj4KICAg ICAgIDx0ZXJtPjxvcHRpb24+LU48L29wdGlvbj48L3Rlcm0+CiAgICAgICA8dGVybT48b3B0aW9u Pi0tbm8tc3luYzwvb3B0aW9uPjwvdGVybT4KZGlmZiAtLWdpdCBhL3NyYy9iaW4vaW5pdGRiL2lu aXRkYi5jIGIvc3JjL2Jpbi9pbml0ZGIvaW5pdGRiLmMKaW5kZXggN2E1OGMzM2FjZS4uYWNhZWIw MDA4NiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9pbml0ZGIvaW5pdGRiLmMKKysrIGIvc3JjL2Jpbi9p bml0ZGIvaW5pdGRiLmMKQEAgLTEzNSw2ICsxMzUsNyBAQCBzdGF0aWMgY2hhciAqbGNfdGltZSA9 IE5VTEw7CiBzdGF0aWMgY2hhciAqbGNfbWVzc2FnZXMgPSBOVUxMOwogc3RhdGljIGNoYXIgbG9j YWxlX3Byb3ZpZGVyID0gQ09MTFBST1ZJREVSX0xJQkM7CiBzdGF0aWMgY2hhciAqaWN1X2xvY2Fs ZSA9IE5VTEw7CitzdGF0aWMgYm9vbCBpbXBvcnRfc3lzdGVtX2NvbGxhdGlvbnMgPSB0cnVlOwog c3RhdGljIGNvbnN0IGNoYXIgKmRlZmF1bHRfdGV4dF9zZWFyY2hfY29uZmlnID0gTlVMTDsKIHN0 YXRpYyBjaGFyICp1c2VybmFtZSA9IE5VTEw7CiBzdGF0aWMgYm9vbCBwd3Byb21wdCA9IGZhbHNl OwpAQCAtMTQ5MSw3ICsxNDkyLDggQEAgc2V0dXBfY29sbGF0aW9uKEZJTEUgKmNtZGZkKQogCQkJ CSAgQk9PVFNUUkFQX1NVUEVSVVNFUklELCBDT0xMUFJPVklERVJfTElCQywgUEdfVVRGOCk7CiAK IAkvKiBOb3cgaW1wb3J0IGFsbCBjb2xsYXRpb25zIHdlIGNhbiBmaW5kIGluIHRoZSBvcGVyYXRp bmcgc3lzdGVtICovCi0JUEdfQ01EX1BVVFMoIlNFTEVDVCBwZ19pbXBvcnRfc3lzdGVtX2NvbGxh dGlvbnMoJ3BnX2NhdGFsb2cnKTtcblxuIik7CisJaWYgKGltcG9ydF9zeXN0ZW1fY29sbGF0aW9u cykKKwkJUEdfQ01EX1BVVFMoIlNFTEVDVCBwZ19pbXBvcnRfc3lzdGVtX2NvbGxhdGlvbnMoJ3Bn X2NhdGFsb2cnKTtcblxuIik7CiB9CiAKIC8qCkBAIC0yMTE2LDYgKzIxMTgsOCBAQCB1c2FnZShj b25zdCBjaGFyICpwcm9nbmFtZSkKIAlwcmludGYoXygiICAgICAgLS1uby1sb2NhbGUgICAgICAg ICAgIGVxdWl2YWxlbnQgdG8gLS1sb2NhbGU9Q1xuIikpOwogCXByaW50ZihfKCIgICAgICAtLWxv Y2FsZS1wcm92aWRlcj17bGliY3xpY3V9XG4iCiAJCQkgIiAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzZXQgZGVmYXVsdCBsb2NhbGUgcHJvdmlkZXIgZm9yIG5ldyBkYXRhYmFzZXNcbiIpKTsK KwlwcmludGYoXygiICAgICAgLS1uby1pbXBvcnQtY29sbGF0aW9uc1xuIgorCQkJICIgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZG8gbm90IGltcG9ydCBjb2xsYXRpb25zIGZyb20gdGhlIHN5 c3RlbSIpKTsKIAlwcmludGYoXygiICAgICAgLS1wd2ZpbGU9RklMRSAgICAgICAgIHJlYWQgcGFz c3dvcmQgZm9yIHRoZSBuZXcgc3VwZXJ1c2VyIGZyb20gZmlsZVxuIikpOwogCXByaW50ZihfKCIg IC1ULCAtLXRleHQtc2VhcmNoLWNvbmZpZz1DRkdcbiIKIAkJCSAiICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGRlZmF1bHQgdGV4dCBzZWFyY2ggY29uZmlndXJhdGlvblxuIikpOwpAQCAtMjc2 Nyw2ICsyNzcxLDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQl7ImRpc2NhcmQt Y2FjaGVzIiwgbm9fYXJndW1lbnQsIE5VTEwsIDE0fSwKIAkJeyJsb2NhbGUtcHJvdmlkZXIiLCBy ZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgMTV9LAogCQl7ImljdS1sb2NhbGUiLCByZXF1aXJlZF9h cmd1bWVudCwgTlVMTCwgMTZ9LAorCQl7Im5vLWltcG9ydC1jb2xsYXRpb25zIiwgbm9fYXJndW1l bnQsIE5VTEwsIDE3fSwKIAkJe05VTEwsIDAsIE5VTEwsIDB9CiAJfTsKIApAQCAtMjkyNCw2ICsy OTI5LDkgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQkJY2FzZSAxNjoKIAkJCQlp Y3VfbG9jYWxlID0gcGdfc3RyZHVwKG9wdGFyZyk7CiAJCQkJYnJlYWs7CisJCQljYXNlIDE3Ogor CQkJCWltcG9ydF9zeXN0ZW1fY29sbGF0aW9ucyA9IGZhbHNlOworCQkJCWJyZWFrOwogCQkJZGVm YXVsdDoKIAkJCQkvKiBnZXRvcHRfbG9uZyBhbHJlYWR5IGVtaXR0ZWQgYSBjb21wbGFpbnQgKi8K IAkJCQlwZ19sb2dfZXJyb3JfaGludCgiVHJ5IFwiJXMgLS1oZWxwXCIgZm9yIG1vcmUgaW5mb3Jt YXRpb24uIiwgcHJvZ25hbWUpOwotLSAKMi4zNC4xCgo= --=-u4oNhfj6zIVO/ZOtTH+g Content-Disposition: attachment; filename="v8-0002-Add-test-module-for-icu-collation-provider-hook.patch" Content-Type: text/x-patch; name="v8-0002-Add-test-module-for-icu-collation-provider-hook.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSA1NDA1NTlmODEwNDk0M2VhZWE5YTY1N2VjZjE2MzI2YjMxZTdlNTQ1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWZmIERhdmlzIDxqZWZmQGotZGF2aXMuY29tPgpEYXRlOiBX ZWQsIDIxIERlYyAyMDIyIDE5OjUwOjEwIC0wODAwClN1YmplY3Q6IFtQQVRDSCB2OCAyLzRdIEFk ZCB0ZXN0IG1vZHVsZSBmb3IgaWN1IGNvbGxhdGlvbiBwcm92aWRlciBob29rLgoKLS0tCiBzcmMv dGVzdC9tb2R1bGVzL01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL3Rl c3QvbW9kdWxlcy9tZXNvbi5idWlsZCAgICAgICAgICAgICAgICAgIHwgICAxICsKIC4uLi9tb2R1 bGVzL3Rlc3RfY29sbGF0b3JfbGliX2hvb2tzL01ha2VmaWxlICB8ICAyNCArKwogLi4uL3Rlc3Rf Y29sbGF0b3JfbGliX2hvb2tzL21lc29uLmJ1aWxkICAgICAgIHwgIDM3ICsrKwogLi4uL3Rlc3Rf Y29sbGF0b3JfbGliX2hvb2tzL3QvMDAxX2ljdS5wbCAgICAgIHwgMTUzICsrKysrKysrKysrKwog Li4uL3Rlc3RfY29sbGF0b3JfbGliX2hvb2tzLmMgICAgICAgICAgICAgICAgIHwgIDQzICsrKysK IC4uLi90ZXN0X2NvbGxhdG9yX2xpYl9ob29rcy5jb250cm9sICAgICAgICAgICB8ICAgNCArCiAu Li4vdGVzdF9jb2xsYXRvcl9saWJfaG9va3MuaCAgICAgICAgICAgICAgICAgfCAgMjggKysrCiAu Li4vdGVzdF9jb2xsYXRvcl9saWJfaG9va3MvdGVzdF9pY3VfaG9vay5jICAgfCAyMjggKysrKysr KysrKysrKysrKysrCiA5IGZpbGVzIGNoYW5nZWQsIDUxOSBpbnNlcnRpb25zKCspCiBjcmVhdGUg bW9kZSAxMDA2NDQgc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2NvbGxhdG9yX2xpYl9ob29rcy9NYWtl ZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9jb2xsYXRvcl9s aWJfaG9va3MvbWVzb24uYnVpbGQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVz L3Rlc3RfY29sbGF0b3JfbGliX2hvb2tzL3QvMDAxX2ljdS5wbAogY3JlYXRlIG1vZGUgMTAwNjQ0 IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9jb2xsYXRvcl9saWJfaG9va3MvdGVzdF9jb2xsYXRvcl9s aWJfaG9va3MuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9jb2xs YXRvcl9saWJfaG9va3MvdGVzdF9jb2xsYXRvcl9saWJfaG9va3MuY29udHJvbAogY3JlYXRlIG1v ZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9jb2xsYXRvcl9saWJfaG9va3MvdGVzdF9j b2xsYXRvcl9saWJfaG9va3MuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMv dGVzdF9jb2xsYXRvcl9saWJfaG9va3MvdGVzdF9pY3VfaG9vay5jCgpkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvbW9kdWxlcy9NYWtlZmlsZSBiL3NyYy90ZXN0L21vZHVsZXMvTWFrZWZpbGUKaW5kZXgg YzYyOWNiZTM4My4uOGE5MGIyMDZhMSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy9NYWtl ZmlsZQorKysgYi9zcmMvdGVzdC9tb2R1bGVzL01ha2VmaWxlCkBAIC0xNSw2ICsxNSw3IEBAIFNV QkRJUlMgPSBcCiAJCSAgc25hcHNob3RfdG9vX29sZCBcCiAJCSAgc3BnaXN0X25hbWVfb3BzIFwK IAkJICB0ZXN0X2Jsb29tZmlsdGVyIFwKKwkJICB0ZXN0X2NvbGxhdG9yX2xpYl9ob29rcyBcCiAJ CSAgdGVzdF9jb3B5X2NhbGxiYWNrcyBcCiAJCSAgdGVzdF9jdXN0b21fcm1ncnMgXAogCQkgIHRl c3RfZGRsX2RlcGFyc2UgXApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9tZXNvbi5idWls ZCBiL3NyYy90ZXN0L21vZHVsZXMvbWVzb24uYnVpbGQKaW5kZXggMWJhYTZiNTU4ZC4uYTU5Y2M5 YTg5ZiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy9tZXNvbi5idWlsZAorKysgYi9zcmMv dGVzdC9tb2R1bGVzL21lc29uLmJ1aWxkCkBAIC0xMSw2ICsxMSw3IEBAIHN1YmRpcignc25hcHNo b3RfdG9vX29sZCcpCiBzdWJkaXIoJ3NwZ2lzdF9uYW1lX29wcycpCiBzdWJkaXIoJ3NzbF9wYXNz cGhyYXNlX2NhbGxiYWNrJykKIHN1YmRpcigndGVzdF9ibG9vbWZpbHRlcicpCitzdWJkaXIoJ3Rl c3RfY29sbGF0b3JfbGliX2hvb2tzJykKIHN1YmRpcigndGVzdF9jb3B5X2NhbGxiYWNrcycpCiBz dWJkaXIoJ3Rlc3RfY3VzdG9tX3JtZ3JzJykKIHN1YmRpcigndGVzdF9kZGxfZGVwYXJzZScpCmRp ZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY29sbGF0b3JfbGliX2hvb2tzL01ha2Vm aWxlIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2NvbGxhdG9yX2xpYl9ob29rcy9NYWtlZmlsZQpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5iNDRjOGY1OTE0Ci0tLSAvZGV2 L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2NvbGxhdG9yX2xpYl9ob29rcy9NYWtl ZmlsZQpAQCAtMCwwICsxLDI0IEBACisjIHNyYy90ZXN0L21vZHVsZXMvdGVzdF9jb2xsYXRvcl9s aWJfaG9va3MvTWFrZWZpbGUKKworTU9EVUxFX2JpZyA9IHRlc3RfY29sbGF0b3JfbGliX2hvb2tz CitPQkpTID0gXAorCSQoV0lOMzJSRVMpIFwKKwl0ZXN0X2NvbGxhdG9yX2xpYl9ob29rcy5vIHRl c3RfaWN1X2hvb2subworUEdGSUxFREVTQyA9ICJ0ZXN0X2NvbGxhdG9yX2xpYl9ob29rcyAtIHRl c3QgY29sbGF0b3IgcHJvdmlkZXIgbGlicmFyeSBob29rcyIKKworRVhURU5TSU9OID0gdGVzdF9j b2xsYXRvcl9saWJfaG9va3MKKworVEFQX1RFU1RTID0gMQorCitpZmRlZiBVU0VfUEdYUworUEdf Q09ORklHID0gcGdfY29uZmlnCitQR1hTIDo9ICQoc2hlbGwgJChQR19DT05GSUcpIC0tcGd4cykK K2luY2x1ZGUgJChQR1hTKQorZWxzZQorc3ViZGlyID0gc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2Nv bGxhdG9yX2xpYl9ob29rcwordG9wX2J1aWxkZGlyID0gLi4vLi4vLi4vLi4KK2luY2x1ZGUgJCh0 b3BfYnVpbGRkaXIpL3NyYy9NYWtlZmlsZS5nbG9iYWwKK2luY2x1ZGUgJCh0b3Bfc3JjZGlyKS9j b250cmliL2NvbnRyaWItZ2xvYmFsLm1rCitlbmRpZgorCitleHBvcnQgd2l0aF9pY3UKZGlmZiAt LWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9jb2xsYXRvcl9saWJfaG9va3MvbWVzb24uYnVp bGQgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY29sbGF0b3JfbGliX2hvb2tzL21lc29uLmJ1aWxk Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjAxOTBhODU2ZTAKLS0tIC9k ZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY29sbGF0b3JfbGliX2hvb2tzL21l c29uLmJ1aWxkCkBAIC0wLDAgKzEsMzcgQEAKKyMgRklYTUU6IHByZXZlbnQgaW5zdGFsbCBkdXJp bmcgbWFpbiBpbnN0YWxsLCBidXQgbm90IGR1cmluZyB0ZXN0IDovCisKK3Rlc3RfY29sbGF0b3Jf bGliX2hvb2tzX3NvdXJjZXMgPSBmaWxlcygKKyAgJ3Rlc3RfY29sbGF0b3JfbGliX2hvb2tzLmMn LAorICAndGVzdF9pY3VfaG9vay5jJywKKykKKworaWYgaG9zdF9zeXN0ZW0gPT0gJ3dpbmRvd3Mn CisgIHRlc3RfY29sbGF0b3JfbGliX2hvb2tzX3NvdXJjZXMgKz0gcmNfbGliX2dlbi5wcm9jZXNz KHdpbjMydmVyX3JjLCBleHRyYV9hcmdzOiBbCisgICAgJy0tTkFNRScsICd0ZXN0X2NvbGxhdG9y X2xpYl9ob29rcycsCisgICAgJy0tRklMRURFU0MnLCAndGVzdF9jb2xsYXRvcl9saWJfaG9va3Mg LSB0ZXN0IGNvbGxhdGlvbiBwcm92aWRlciBsaWJyYXJ5IGhvb2tzJyxdKQorZW5kaWYKKwordGVz dF9jb2xsYXRvcl9saWJfaG9va3MgPSBzaGFyZWRfbW9kdWxlKCd0ZXN0X2NvbGxhdG9yX2xpYl9o b29rcycsCisgIHRlc3RfY29sbGF0b3JfbGliX2hvb2tzX3NvdXJjZXMsCisgIGt3YXJnczogcGdf bW9kX2FyZ3MsCispCit0ZXN0cHJlcF90YXJnZXRzICs9IHRlc3RfY29sbGF0b3JfbGliX2hvb2tz CisKK2luc3RhbGxfZGF0YSgKKyAgJ3Rlc3RfY29sbGF0b3JfbGliX2hvb2tzLmNvbnRyb2wnLAor ICBrd2FyZ3M6IGNvbnRyaWJfZGF0YV9hcmdzLAorKQorCit0ZXN0cyArPSB7CisgICduYW1lJzog J3Rlc3RfY29sbGF0b3JfbGliX2hvb2tzJywKKyAgJ3NkJzogbWVzb24uY3VycmVudF9zb3VyY2Vf ZGlyKCksCisgICdiZCc6IG1lc29uLmN1cnJlbnRfYnVpbGRfZGlyKCksCisgICd0YXAnOiB7Cisg ICAgJ3Rlc3RzJzogWworICAgICAgJ3QvMDAxX2ljdS5wbCcsCisgICAgXSwKKyAgICAnZW52Jzog eworICAgICAgJ3dpdGhfaWN1JzogaWN1LmZvdW5kKCkgPyAneWVzJyA6ICdubycsCisgICAgfSwK KyAgfSwKK30KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9jb2xsYXRvcl9saWJf aG9va3MvdC8wMDFfaWN1LnBsIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2NvbGxhdG9yX2xpYl9o b29rcy90LzAwMV9pY3UucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4u ZDNiNTcyOTUyNwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9jb2xs YXRvcl9saWJfaG9va3MvdC8wMDFfaWN1LnBsCkBAIC0wLDAgKzEsMTUzIEBACisjIENvcHlyaWdo dCAoYykgMjAyMS0yMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCit1 c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOworCit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rl cjsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKK3VzZSBUZXN0OjpNb3JlOworCitpZiAo JEVOVnt3aXRoX2ljdX0gbmUgJ3llcycpCit7CisJcGxhbiBza2lwX2FsbCA9PiAnSUNVIG5vdCBz dXBwb3J0ZWQgYnkgdGhpcyBidWlsZCc7Cit9CisKK215ICRub2RlID0gUG9zdGdyZVNRTDo6VGVz dDo6Q2x1c3Rlci0+bmV3KCdtYWluJyk7CisKKyRub2RlLT5pbml0OworJG5vZGUtPmFwcGVuZF9j b25mKAorCSdwb3N0Z3Jlc3FsLmNvbmYnLCBxeworc2hhcmVkX3ByZWxvYWRfbGlicmFyaWVzID0g J3Rlc3RfY29sbGF0b3JfbGliX2hvb2tzJworfSk7Ciskbm9kZS0+c3RhcnQ7CisKKyRub2RlLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywKKwlxe0NSRUFURSBEQVRBQkFTRSBkYmljdSBMT0NBTEVfUFJP VklERVIgaWN1IExPQ0FMRSAnQycgSUNVX0xPQ0FMRSAnREVTQycgRU5DT0RJTkcgJ1VURjgnIFRF TVBMQVRFIHRlbXBsYXRlMH0KKyk7CisKKyMgc2V0dXAKKyRub2RlLT5zYWZlX3BzcWwoJ2RiaWN1 JywKKwlxcVtDUkVBVEUgQ09MTEFUSU9OIHRlc3RfYXNjIChQUk9WSURFUj1pY3UsIExPQ0FMRT0n QVNDJyldKTsKKyRub2RlLT5zYWZlX3BzcWwoJ2RiaWN1JywKKwlxcVtDUkVBVEUgQ09MTEFUSU9O IHRlc3RfZGVzYyAoUFJPVklERVI9aWN1LCBMT0NBTEU9J0RFU0MnKV0pOworCiskbm9kZS0+c2Fm ZV9wc3FsKCdkYmljdScsIHFxW0NSRUFURSBUQUJMRSBzdHJpbmdzKHQgdGV4dCldKTsKKyRub2Rl LT5zYWZlX3BzcWwoJ2RiaWN1JywKKwlxcVtJTlNFUlQgSU5UTyBzdHJpbmdzIFZBTFVFUyAoJ2FC Y0QnKSwgKCdmR2hJJyksICgnd1h5WicpXSk7CisKKyMgY2hlY2sgdmVyc2lvbnMKKworbXkgJHZl cnNpb25fZGIgPQorICAkbm9kZS0+c2FmZV9wc3FsKCdkYmljdScsCisJICBxcVtTRUxFQ1QgZGF0 Y29sbHZlcnNpb24gRlJPTSBwZ19kYXRhYmFzZSBXSEVSRSBkYXRuYW1lPSdkYmljdSddKTsKK2lz KCR2ZXJzaW9uX2RiLCAnMi43MicsCisJJ2RhdGFiYXNlICJkYmljdSIgaGFzIGNvcnJlY3QgdmVy c2lvbiAyLjcyJworKTsKKworbXkgJHZlcnNpb25fYXNjID0KKyAgJG5vZGUtPnNhZmVfcHNxbCgn ZGJpY3UnLAorCSAgcXFbU0VMRUNUIGNvbGx2ZXJzaW9uIEZST00gcGdfY29sbGF0aW9uIFdIRVJF IGNvbGxuYW1lPSd0ZXN0X2FzYyddKTsKK2lzKCR2ZXJzaW9uX2FzYywgJzIuNzInLAorCSdjb2xs YXRpb24gInRlc3RfYXNjIiBoYXMgY29ycmVjdCB2ZXJzaW9uIDIuNzInCispOworCitteSAkdmVy c2lvbl9kZXNjID0KKyAgJG5vZGUtPnNhZmVfcHNxbCgnZGJpY3UnLAorCSAgcXFbU0VMRUNUIGNv bGx2ZXJzaW9uIEZST00gcGdfY29sbGF0aW9uIFdIRVJFIGNvbGxuYW1lPSd0ZXN0X2Rlc2MnXSk7 CitpcygkdmVyc2lvbl9kZXNjLCAnMi43MicsCisJJ2NvbGxhdGlvbiAidGVzdF9kZXNjIiBoYXMg Y29ycmVjdCB2ZXJzaW9uIDIuNzInCispOworCitteSAkcmVzX3NvcnRfZXhwZWN0ZWQgPSAiYUJj RAorZkdoSQord1h5WiI7CisKK215ICRyZXNfcmV2ZXJzZXNvcnRfZXhwZWN0ZWQgPSAid1h5Wgor ZkdoSQorYUJjRCI7CisKKyMgdGVzdCBjb21wYXJpc29uCisKK215ICRjb21wYXJpc29uID0KKyAg JG5vZGUtPnNhZmVfcHNxbCgnZGJpY3UnLAorCSAgcXFbU0VMRUNUICdhQmNEJyBDT0xMQVRFIHRl c3RfYXNjIDwgJ3dYeVonIENPTExBVEUgdGVzdF9hc2NdKTsKK2lzKCRjb21wYXJpc29uLCAndCcs CisJJ2NvcnJlY3QgY29tcGFyaXNvbicKKyk7CisKKyMgdGVzdCByZXZlcnNlIGNvbXBhcmlzb24g KGRhdGFiYXNlKQorCitteSAkZGJjb21wYXJpc29uX3JldmVyc2UgPQorICAkbm9kZS0+c2FmZV9w c3FsKCdkYmljdScsIHFxW1NFTEVDVCAnYUJjRCcgPCAnd1h5WiddKTsKK2lzKCRkYmNvbXBhcmlz b25fcmV2ZXJzZSwgJ2YnLAorCSdjb3JyZWN0IHJldmVyc2UgY29tcGFyaXNvbiAoZGF0YWJhc2Up JworKTsKKworIyB0ZXN0IHJldmVyc2UgY29tcGFyaXNvbgorCitteSAkY29tcGFyaXNvbl9yZXZl cnNlID0KKyAgJG5vZGUtPnNhZmVfcHNxbCgnZGJpY3UnLAorCSAgcXFbU0VMRUNUICdhQmNEJyBD T0xMQVRFIHRlc3RfZGVzYyA8ICd3WHlaJyBDT0xMQVRFIHRlc3RfZGVzY10pOworaXMoJGNvbXBh cmlzb25fcmV2ZXJzZSwgJ2YnLAorCSdjb3JyZWN0IHJldmVyc2UgY29tcGFyaXNvbicKKyk7CisK KyMgdGVzdCBhc2Mgc29ydAorCitteSAkcmVzX3NvcnQgPQorICAkbm9kZS0+c2FmZV9wc3FsKCdk YmljdScsCisJICBxcVtTRUxFQ1QgdCBGUk9NIHN0cmluZ3MgT1JERVIgQlkgdCBDT0xMQVRFIHRl c3RfYXNjXSk7CitpcygkcmVzX3NvcnQsICRyZXNfc29ydF9leHBlY3RlZCwKKwknY29ycmVjdCBh c2NlbmRpbmcgc29ydCcKKyk7CisKKyMgdGVzdCBkZXNjIHNvcnQKKworbXkgJHJlc19kYl9yZXZl cnNlc29ydCA9CisgICRub2RlLT5zYWZlX3BzcWwoJ2RiaWN1JywKKwkgIHFxW1NFTEVDVCB0IEZS T00gc3RyaW5ncyBPUkRFUiBCWSB0XSk7CitpcygkcmVzX2RiX3JldmVyc2Vzb3J0LCAkcmVzX3Jl dmVyc2Vzb3J0X2V4cGVjdGVkLAorCSdjb3JyZWN0IGRlc2NlbmRpbmcgc29ydCAoZGF0YWJhc2Up JworKTsKKworIyB0ZXN0IGRlc2Mgc29ydAorCitteSAkcmVzX3JldmVyc2Vzb3J0ID0KKyAgJG5v ZGUtPnNhZmVfcHNxbCgnZGJpY3UnLAorCSAgcXFbU0VMRUNUIHQgRlJPTSBzdHJpbmdzIE9SREVS IEJZIHQgQ09MTEFURSB0ZXN0X2Rlc2NdKTsKK2lzKCRyZXNfcmV2ZXJzZXNvcnQsICRyZXNfcmV2 ZXJzZXNvcnRfZXhwZWN0ZWQsCisJJ2NvcnJlY3QgZGVzY2VuZGluZyBzb3J0JworKTsKKworIyB0 ZXN0IGxvd2VyL3VwcGVyCisKK215ICR0Y2FzZSA9CisgICRub2RlLT5zYWZlX3BzcWwoJ2RiaWN1 JywKKwkgIHFxW1NFTEVDVCBsb3dlcignYUJjRGZnSGl3WHlaJyBjb2xsYXRlIHRlc3RfYXNjKSwK KyAgICAgICAgICAgICAgICB1cHBlcignYUJjRGZnSGl3WHlaJyBjb2xsYXRlIHRlc3RfYXNjKV0p OworaXMoJHRjYXNlLCAnYWJjZGZnaGl3eHl6fEFCQ0RGR0hJV1hZWicsCisJJ2NvcnJlY3QgbG93 ZXJjYXNlIGFuZCB1cHBlcmNhc2UnCispOworCisjIHRlc3QgcmV2ZXJzZSBsb3dlci91cHBlciAo ZGF0YWJhc2UpCisKK215ICR0Y2FzZV9kYl9yZXZlcnNlID0KKyAgJG5vZGUtPnNhZmVfcHNxbCgn ZGJpY3UnLAorCSAgcXFbU0VMRUNUIGxvd2VyKCdhQmNEZmdIaXdYeVonKSwKKyAgICAgICAgICAg ICAgICB1cHBlcignYUJjRGZnSGl3WHlaJyldKTsKK2lzKCR0Y2FzZV9kYl9yZXZlcnNlLCAnQUJD REZHSElXWFlafGFiY2RmZ2hpd3h5eicsCisJJ2NvcnJlY3QgcmV2ZXJzZSBsb3dlcmNhc2UgYW5k IHVwcGVyY2FzZSAoZGF0YWJhc2UpJworKTsKKworIyB0ZXN0IHJldmVyc2UgbG93ZXIvdXBwZXIK KworbXkgJHRjYXNlX3JldmVyc2UgPQorICAkbm9kZS0+c2FmZV9wc3FsKCdkYmljdScsCisJICBx cVtTRUxFQ1QgbG93ZXIoJ2FCY0RmZ0hpd1h5WicgY29sbGF0ZSB0ZXN0X2Rlc2MpLAorICAgICAg ICAgICAgICAgIHVwcGVyKCdhQmNEZmdIaXdYeVonIGNvbGxhdGUgdGVzdF9kZXNjKV0pOworaXMo JHRjYXNlX3JldmVyc2UsICdBQkNERkdISVdYWVp8YWJjZGZnaGl3eHl6JywKKwknY29ycmVjdCBy ZXZlcnNlIGxvd2VyY2FzZSBhbmQgdXBwZXJjYXNlJworKTsKKworJG5vZGUtPnN0b3A7Citkb25l X3Rlc3RpbmcoKTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9jb2xsYXRvcl9s aWJfaG9va3MvdGVzdF9jb2xsYXRvcl9saWJfaG9va3MuYyBiL3NyYy90ZXN0L21vZHVsZXMvdGVz dF9jb2xsYXRvcl9saWJfaG9va3MvdGVzdF9jb2xsYXRvcl9saWJfaG9va3MuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi40NWE4NDliNTJkCi0tLSAvZGV2L251bGwKKysr IGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2NvbGxhdG9yX2xpYl9ob29rcy90ZXN0X2NvbGxhdG9y X2xpYl9ob29rcy5jCkBAIC0wLDAgKzEsNDMgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisg KiB0ZXN0X2NvbGxhdG9yX2xpYl9ob29rcy5jCisgKgkJQ29kZSBmb3IgdGVzdGluZyBjb2xsYXRp b24gcHJvdmlkZXIgbGlicmFyeSBob29rcworICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykg MTk5Ni0yMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlv bnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlm b3JuaWEKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJCXNyYy90ZXN0L21vZHVsZXMvdGVzdF9j b2xsYXRvcl9saWJfaG9va3MvdGVzdF9jb2xsYXRvcl9saWJfaG9va3MuYworICoKKyAqIFRlc3Qg aW1wbGVtZW50YXRpb24gb2YgaWN1LWxpa2UgY29sbGF0aW9uIHByb3ZpZGVyLgorICoKKyAqIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAqLworCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUg ImZtZ3IuaCIKKyNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKworI2luY2x1ZGUgInRlc3RfY29sbGF0 b3JfbGliX2hvb2tzLmgiCisKKyNpZmRlZiBVU0VfSUNVCitzdGF0aWMgZ2V0X2ljdV9saWJyYXJ5 X2hvb2tfdHlwZSBwcmV2X2dldF9pY3VfbGlicmFyeV9ob29rID0gTlVMTDsKKyNlbmRpZgorCitQ R19NT0RVTEVfTUFHSUM7CisKKy8qCisgKiBNb2R1bGUgbG9hZCBjYWxsYmFjaworICovCit2b2lk CitfUEdfaW5pdCh2b2lkKQoreworCWlmICghcHJvY2Vzc19zaGFyZWRfcHJlbG9hZF9saWJyYXJp ZXNfaW5fcHJvZ3Jlc3MpCisJCWVyZXBvcnQoRVJST1IsIChlcnJtc2coInRlc3RfY29sbGF0b3Jf bGliX2hvb2tzIG11c3QgYmUgbG9hZGVkIHZpYSBzaGFyZWRfcHJlbG9hZF9saWJyYXJpZXMiKSkp OworCisjaWZkZWYgVVNFX0lDVQorCXByZXZfZ2V0X2ljdV9saWJyYXJ5X2hvb2sgPSBnZXRfaWN1 X2xpYnJhcnlfaG9vazsKKwlnZXRfaWN1X2xpYnJhcnlfaG9vayA9IHRlc3RfZ2V0X2ljdV9saWJy YXJ5OworI2VuZGlmCit9CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY29sbGF0 b3JfbGliX2hvb2tzL3Rlc3RfY29sbGF0b3JfbGliX2hvb2tzLmNvbnRyb2wgYi9zcmMvdGVzdC9t b2R1bGVzL3Rlc3RfY29sbGF0b3JfbGliX2hvb2tzL3Rlc3RfY29sbGF0b3JfbGliX2hvb2tzLmNv bnRyb2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uYTBiOGUwMzFhNAot LS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9jb2xsYXRvcl9saWJfaG9v a3MvdGVzdF9jb2xsYXRvcl9saWJfaG9va3MuY29udHJvbApAQCAtMCwwICsxLDQgQEAKK2NvbW1l bnQgPSAnVGVzdCBjb2RlIGZvciBjb2xsYXRpb24gcHJvdmlkZXIgbGlicmFyeSBob29rcycKK2Rl ZmF1bHRfdmVyc2lvbiA9ICcxLjAnCittb2R1bGVfcGF0aG5hbWUgPSAnJGxpYmRpci90ZXN0X2Nv bGxhdGlvbl9saWJfaG9va3MnCisKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9j b2xsYXRvcl9saWJfaG9va3MvdGVzdF9jb2xsYXRvcl9saWJfaG9va3MuaCBiL3NyYy90ZXN0L21v ZHVsZXMvdGVzdF9jb2xsYXRvcl9saWJfaG9va3MvdGVzdF9jb2xsYXRvcl9saWJfaG9va3MuaApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5jM2E5ZmY0NWUyCi0tLSAvZGV2 L251bGwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2NvbGxhdG9yX2xpYl9ob29rcy90ZXN0 X2NvbGxhdG9yX2xpYl9ob29rcy5oCkBAIC0wLDAgKzEsMjggQEAKKy8qLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAqCisgKiB0ZXN0X2NvbGxhdG9yX2xpYl9ob29rcy5oCisgKgkJRGVmaW5pdGlvbnMgZm9y IGNvbGxhdGlvbiBsaWJyYXJ5IGhvb2tzLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNS0yMDIy LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqIElERU5USUZJQ0FU SU9OCisgKgkJc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2NvbGxhdG9yX2xpYl9ob29rcy90ZXN0X2Nv bGxhdG9yX2xpYl9ob29rcy5oCisgKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpZm5k ZWYgVEVTVF9DT0xMQVRPUl9MSUJfSE9PS1NfSAorI2RlZmluZSBURVNUX0NPTExBVE9SX0xJQl9I T09LU19ICisKKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAidXRpbHMvbWVtdXRp bHMuaCIKKyNpbmNsdWRlICJ1dGlscy9wZ19sb2NhbGUuaCIKKyNpbmNsdWRlICJ1dGlscy9wZ19s b2NhbGVfaW50ZXJuYWwuaCIKKworI2lmZGVmIFVTRV9JQ1UKK2V4dGVybiBwZ19pY3VfbGlicmFy eSAqdGVzdF9nZXRfaWN1X2xpYnJhcnkoT2lkIGNvbGxpZCwgY29uc3QgY2hhciAqbG9jYWxlLAor CQkJCQkJCQkJCQljb25zdCBjaGFyICp2ZXJzaW9uKTsKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAt LWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9jb2xsYXRvcl9saWJfaG9va3MvdGVzdF9pY3Vf aG9vay5jIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2NvbGxhdG9yX2xpYl9ob29rcy90ZXN0X2lj dV9ob29rLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNDIzZmYzMGI1 YgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9jb2xsYXRvcl9saWJf aG9va3MvdGVzdF9pY3VfaG9vay5jCkBAIC0wLDAgKzEsMjI4IEBACisvKi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgKgorICogdGVzdF9pY3VfaG9vay5jCisgKgkJQ29kZSBmb3IgdGVzdGluZyBjb2xsYXRp b24gcHJvdmlkZXIgaWN1IGhvb2suCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2 LTIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBD b3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5p YQorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkJc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2NvbGxh dG9yX2xpYl9ob29rcy90ZXN0X2ljdV9ob29rLmMKKyAqCisgKiBJbXBsZW1lbnRzIGEgY3VzdG9t IGljdS1saWtlIGNvbGxhdGlvbiBwcm92aWRlciBsaWJyYXJ5IGZvciB0ZXN0aW5nIHRoZQorICog aG9va3MuIEl0IGFjY2VwdHMgYW55IGNvbGxhdG9yIG5hbWUgcmVxdWVzdGVkLiBBbGwgYmVoYXZl IGV4YWN0bHkgbGlrZSB0aGUKKyAqICJlbl9VUyIgbG9jYWxlLCBleGNlcHQgZm9yIHRoZSBsb2Nh bGUgbmFtZWQgIkRFU0MiLCB3aGljaCByZXZlcnNlcyB0aGUgc29ydAorICogb3JkZXIgYW5kIHJl dmVyc2VzIHVwcGVyY2FzZS9sb3dlcmNhc2UgYmVoYXZpb3IuCisgKgorICogVGhlIHZlcnNpb24g aXMgYWx3YXlzIHJlcG9ydGVkIGFzIDIuNzIsIHNvIGxvYWRpbmcgaXQgd2lsbCBjYXVzZSBhIHZl cnNpb24KKyAqIG1pc21hdGNoIHdhcm5pbmcuCisgKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICov CisKKyNpbmNsdWRlICJ0ZXN0X2NvbGxhdG9yX2xpYl9ob29rcy5oIgorCisjaWZkZWYgVVNFX0lD VQorCisjaW5jbHVkZSA8dW5pY29kZS91Y252Lmg+CisjaW5jbHVkZSA8dW5pY29kZS91bG9jZGF0 YS5oPgorI2luY2x1ZGUgPHVuaWNvZGUvdXN0cmluZy5oPgorCisjZGVmaW5lIFRFU1RfTE9DQUxF ICJlbl9VUyIKKwordHlwZWRlZiBzdHJ1Y3QgVGVzdFVDb2xsYXRvciB7CisJVUNvbGxhdG9yCSp1 Y29sOworCWJvb2wJCSByZXZlcnNlOworfSBUZXN0VUNvbGxhdG9yOworCitzdGF0aWMgcGdfaWN1 X2xpYnJhcnkgKnRlc3RfaWN1X2xpYnJhcnkgPSBOVUxMOworc3RhdGljIGNvbnN0IFVWZXJzaW9u SW5mbyB0ZXN0X2ljdV92ZXJzaW9uID0geyAyLCA3MiB9OworCitzdGF0aWMgYm9vbAorbG9jYWxl X2lzX3JldmVyc2UoY29uc3QgY2hhciAqbG9jYWxlKQoreworCWlmIChzdHJjbXAobG9jYWxlLCAi REVTQyIpID09IDApCisJCXJldHVybiB0cnVlOworCWVsc2UKKwkJcmV0dXJuIGZhbHNlOworfQor CitzdGF0aWMgVUNvbGxhdG9yICoKK3Rlc3Rfb3BlbkNvbGxhdG9yKGNvbnN0IGNoYXIgKmxvYywg VUVycm9yQ29kZSAqc3RhdHVzKQoreworCVRlc3RVQ29sbGF0b3IgKnRlc3Rjb2wgPSBNZW1vcnlD b250ZXh0QWxsb2MoVG9wTWVtb3J5Q29udGV4dCwgc2l6ZW9mKFRlc3RVQ29sbGF0b3IpKTsKKwlV Q29sbGF0b3IgKnVjb2wgPSB1Y29sX29wZW4oVEVTVF9MT0NBTEUsIHN0YXR1cyk7CisJdGVzdGNv bC0+dWNvbCA9IHVjb2w7CisJdGVzdGNvbC0+cmV2ZXJzZSA9IGxvY2FsZV9pc19yZXZlcnNlKGxv Yyk7CisJcmV0dXJuIChVQ29sbGF0b3IgKil0ZXN0Y29sOworfQorCitzdGF0aWMgdm9pZAordGVz dF9jbG9zZUNvbGxhdG9yKFVDb2xsYXRvciAqY29sbCkKK3sKKwlUZXN0VUNvbGxhdG9yICp0ZXN0 Y29sID0gKFRlc3RVQ29sbGF0b3IgKikgY29sbDsKKwl1Y29sX2Nsb3NlKHRlc3Rjb2wtPnVjb2wp OworCXBmcmVlKHRlc3Rjb2wpOworfQorCitzdGF0aWMgdm9pZAordGVzdF9zZXRBdHRyaWJ1dGUo VUNvbGxhdG9yICpjb2xsLCBVQ29sQXR0cmlidXRlIGF0dHIsCisJCQkJICBVQ29sQXR0cmlidXRl VmFsdWUgdmFsdWUsIFVFcnJvckNvZGUgKnN0YXR1cykKK3sKKwlUZXN0VUNvbGxhdG9yICp0ZXN0 Y29sID0gKFRlc3RVQ29sbGF0b3IgKikgY29sbDsKKwl1Y29sX3NldEF0dHJpYnV0ZSh0ZXN0Y29s LT51Y29sLCBhdHRyLCB2YWx1ZSwgc3RhdHVzKTsKK30KKworc3RhdGljIHZvaWQKK3Rlc3RfZ2V0 Q29sbGF0b3JWZXJzaW9uKGNvbnN0IFVDb2xsYXRvciAqY29sbCwgVVZlcnNpb25JbmZvIGluZm8p Cit7CisJbWVtY3B5KGluZm8sIHRlc3RfaWN1X3ZlcnNpb24sIHNpemVvZihVVmVyc2lvbkluZm8p KTsKK30KKworc3RhdGljIFVDb2xsYXRpb25SZXN1bHQKK3Rlc3Rfc3RyY29sbChjb25zdCBVQ29s bGF0b3IgKmNvbGwsIGNvbnN0IFVDaGFyICpzb3VyY2UsIGludDMyX3Qgc291cmNlTGVuZ3RoLAor CQkJIGNvbnN0IFVDaGFyICp0YXJnZXQsIGludDMyX3QgdGFyZ2V0TGVuZ3RoKQoreworCVRlc3RV Q29sbGF0b3IgKnRlc3Rjb2wgPSAoVGVzdFVDb2xsYXRvciAqKSBjb2xsOworCVVDb2xsYXRpb25S ZXN1bHQgcmV0ID0gdWNvbF9zdHJjb2xsKHRlc3Rjb2wtPnVjb2wsIHNvdXJjZSwgc291cmNlTGVu Z3RoLAorCQkJCQkJCQkJCXRhcmdldCwgdGFyZ2V0TGVuZ3RoKTsKKwlpZiAodGVzdGNvbC0+cmV2 ZXJzZSkKKwkJcmV0dXJuIC1yZXQ7CisJZWxzZQorCQlyZXR1cm4gcmV0OworfQorCitzdGF0aWMg VUNvbGxhdGlvblJlc3VsdAordGVzdF9zdHJjb2xsVVRGOChjb25zdCBVQ29sbGF0b3IgKmNvbGws IGNvbnN0IGNoYXIgKnNvdXJjZSwKKwkJCQkgaW50MzJfdCBzb3VyY2VMZW5ndGgsIGNvbnN0IGNo YXIgKnRhcmdldCwKKwkJCQkgaW50MzJfdCB0YXJnZXRMZW5ndGgsIFVFcnJvckNvZGUgKnN0YXR1 cykKK3sKKwlUZXN0VUNvbGxhdG9yICp0ZXN0Y29sID0gKFRlc3RVQ29sbGF0b3IgKikgY29sbDsK KwlVQ29sbGF0aW9uUmVzdWx0IHJldCA9IHVjb2xfc3RyY29sbFVURjgodGVzdGNvbC0+dWNvbCwg c291cmNlLAorCQkJCQkJCQkJCQlzb3VyY2VMZW5ndGgsIHRhcmdldCwKKwkJCQkJCQkJCQkJdGFy Z2V0TGVuZ3RoLCBzdGF0dXMpOworCWlmICh0ZXN0Y29sLT5yZXZlcnNlKQorCQlyZXR1cm4gLXJl dDsKKwllbHNlCisJCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQzMl90Cit0ZXN0X2dldFNv cnRLZXkoY29uc3QgVUNvbGxhdG9yICpjb2xsLCBjb25zdCBVQ2hhciAqc291cmNlLAorCQkJCWlu dDMyX3Qgc291cmNlTGVuZ3RoLCB1aW50OF90ICpyZXN1bHQsIGludDMyX3QgcmVzdWx0TGVuZ3Ro KQoreworCVRlc3RVQ29sbGF0b3IgKnRlc3Rjb2wgPSAoVGVzdFVDb2xsYXRvciAqKSBjb2xsOwor CWludDMyX3QgcmV0ID0gdWNvbF9nZXRTb3J0S2V5KHRlc3Rjb2wtPnVjb2wsIHNvdXJjZSwgc291 cmNlTGVuZ3RoLAorCQkJCQkJCQkgIHJlc3VsdCwgcmVzdWx0TGVuZ3RoKTsKKwlzaXplX3QgcmVz dWx0X3NpemUgPSByZXQgKyAxOworCisJaWYgKHJlc3VsdExlbmd0aCA+PSByZXN1bHRfc2l6ZSkK Kwl7CisJCXJlc3VsdFtyZXN1bHRMZW5ndGhdID0gJ1wwJzsKKworCQlpZiAodGVzdGNvbC0+cmV2 ZXJzZSkKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgcmVzdWx0X3NpemU7IGkrKykKKwkJCQkqKCh1 bnNpZ25lZCBjaGFyICopIHJlc3VsdCArIGkpIF49ICh1bnNpZ25lZCBjaGFyKSAweGZmOworCX0K KworCXJldHVybiByZXN1bHRfc2l6ZTsKK30KKworc3RhdGljIGludDMyX3QKK3Rlc3RfbmV4dFNv cnRLZXlQYXJ0KGNvbnN0IFVDb2xsYXRvciAqY29sbCwgVUNoYXJJdGVyYXRvciAqaXRlciwKKwkJ CQkJIHVpbnQzMl90IHN0YXRlWzJdLCB1aW50OF90ICpkZXN0LCBpbnQzMl90IGNvdW50LAorCQkJ CQkgVUVycm9yQ29kZSAqc3RhdHVzKQoreworCVRlc3RVQ29sbGF0b3IgKnRlc3Rjb2wgPSAoVGVz dFVDb2xsYXRvciAqKSBjb2xsOworCWludDMyX3QgcmV0ID0gdWNvbF9uZXh0U29ydEtleVBhcnQo dGVzdGNvbC0+dWNvbCwgaXRlciwgc3RhdGUsIGRlc3QsCisJCQkJCQkJCQkgICBjb3VudCwgc3Rh dHVzKTsKKworCWlmICh0ZXN0Y29sLT5yZXZlcnNlKQorCQlmb3IgKGludCBpID0gMDsgaSA8IHJl dDsgaSsrKQorCQkJKigodW5zaWduZWQgY2hhciAqKSBkZXN0ICsgaSkgXj0gKHVuc2lnbmVkIGNo YXIpIDB4ZmY7CisKKwkvKgorCSAqIFRoZSBmb2xsb3dpbmcgaXMgbm90IGNvcnJlY3QgZm9yIGNh c2VzIHdoZXJlIHdlIGZpbmlzaCBwcmVjaXNlbHkgb24gdGhlCisJICogYm91bmRhcnkgKGkuZS4g Y291bnQgaXMgZXhhY3RseSBlbm91Z2gpLiBUbyBmaXggdGhpcyB3ZSdkIG5lZWQgdG8gdHJhY2sK KwkgKiBhZGRpdGlvbmFsIHN0YXRlIGFjcm9zcyBjYWxscywgd2hpY2ggZG9lc24ndCBzZWVtIHdv cnRoIGl0IGZvciBhIHRlc3QKKwkgKiBjYXNlLgorCSAqLworCWlmIChjb3VudCA+PSByZXQgJiYg cmV0ID4gMCkKKwl7CisJCWlmICh0ZXN0Y29sLT5yZXZlcnNlKQorCQkJZGVzdFtyZXRdID0gMHhm ZjsKKwkJZWxzZQorCQkJZGVzdFtyZXRdID0gJ1wwJzsKKwkJcmV0dXJuIHJldCArIDE7CisJfQor CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludDMyX3QKK3Rlc3Rfc3RyVG9VcHBlcihVQ2hh ciAqZGVzdCwgaW50MzJfdCBkZXN0Q2FwYWNpdHksIGNvbnN0IFVDaGFyICpzcmMsCisJCQkJaW50 MzJfdCBzcmNMZW5ndGgsIGNvbnN0IGNoYXIgKmxvY2FsZSwgVUVycm9yQ29kZSAqcEVycm9yQ29k ZSkKK3sKKwlpZiAobG9jYWxlX2lzX3JldmVyc2UobG9jYWxlKSkKKwkJcmV0dXJuIHVfc3RyVG9M b3dlcihkZXN0LCBkZXN0Q2FwYWNpdHksIHNyYywgc3JjTGVuZ3RoLAorCQkJCQkJCVRFU1RfTE9D QUxFLCBwRXJyb3JDb2RlKTsKKwllbHNlCisJCXJldHVybiB1X3N0clRvVXBwZXIoZGVzdCwgZGVz dENhcGFjaXR5LCBzcmMsIHNyY0xlbmd0aCwKKwkJCQkJCQlURVNUX0xPQ0FMRSwgcEVycm9yQ29k ZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90Cit0ZXN0X3N0clRvTG93ZXIoVUNoYXIgKmRlc3QsIGlu dDMyX3QgZGVzdENhcGFjaXR5LCBjb25zdCBVQ2hhciAqc3JjLAorCQkJCWludDMyX3Qgc3JjTGVu Z3RoLCBjb25zdCBjaGFyICpsb2NhbGUsIFVFcnJvckNvZGUgKnBFcnJvckNvZGUpCit7CisJaWYg KGxvY2FsZV9pc19yZXZlcnNlKGxvY2FsZSkpCisJCXJldHVybiB1X3N0clRvVXBwZXIoZGVzdCwg ZGVzdENhcGFjaXR5LCBzcmMsIHNyY0xlbmd0aCwKKwkJCQkJCQlURVNUX0xPQ0FMRSwgcEVycm9y Q29kZSk7CisJZWxzZQorCQlyZXR1cm4gdV9zdHJUb0xvd2VyKGRlc3QsIGRlc3RDYXBhY2l0eSwg c3JjLCBzcmNMZW5ndGgsCisJCQkJCQkJVEVTVF9MT0NBTEUsIHBFcnJvckNvZGUpOworfQorCitw Z19pY3VfbGlicmFyeSAqCit0ZXN0X2dldF9pY3VfbGlicmFyeShPaWQgY29sbGlkLCBjb25zdCBj aGFyICpsb2NhbGUsIGNvbnN0IGNoYXIgKnZlcnNpb24pCit7CisJcGdfaWN1X2xpYnJhcnkgKmxp YjsKKworCWlmICh0ZXN0X2ljdV9saWJyYXJ5ICE9IE5VTEwpCisJCXJldHVybiB0ZXN0X2ljdV9s aWJyYXJ5OworCisJZXJlcG9ydChMT0csIChlcnJtc2coImxvYWRpbmcgY3VzdG9tIElDVSBwcm92 aWRlciBmb3IgdGVzdF9jb2xsYXRvcl9saWJfaG9va3MiKSkpOworCisJbGliID0gTWVtb3J5Q29u dGV4dEFsbG9jKFRvcE1lbW9yeUNvbnRleHQsIHNpemVvZihwZ19pY3VfbGlicmFyeSkpOworCWxp Yi0+Z2V0SUNVVmVyc2lvbiA9IHVfZ2V0VmVyc2lvbjsKKwlsaWItPmdldFVuaWNvZGVWZXJzaW9u ID0gdV9nZXRVbmljb2RlVmVyc2lvbjsKKwlsaWItPmdldENMRFJWZXJzaW9uID0gdWxvY2RhdGFf Z2V0Q0xEUlZlcnNpb247CisJbGliLT5vcGVuQ29sbGF0b3IgPSB0ZXN0X29wZW5Db2xsYXRvcjsK KwlsaWItPmNsb3NlQ29sbGF0b3IgPSB0ZXN0X2Nsb3NlQ29sbGF0b3I7CisJbGliLT5nZXRDb2xs YXRvclZlcnNpb24gPSB0ZXN0X2dldENvbGxhdG9yVmVyc2lvbjsKKwlsaWItPmdldFVDQVZlcnNp b24gPSB1Y29sX2dldFVDQVZlcnNpb247CisJbGliLT52ZXJzaW9uVG9TdHJpbmcgPSB1X3ZlcnNp b25Ub1N0cmluZzsKKwlsaWItPnN0cmNvbGwgPSB0ZXN0X3N0cmNvbGw7CisJbGliLT5zdHJjb2xs VVRGOCA9IHRlc3Rfc3RyY29sbFVURjg7CisJbGliLT5nZXRTb3J0S2V5ID0gdGVzdF9nZXRTb3J0 S2V5OworCWxpYi0+bmV4dFNvcnRLZXlQYXJ0ID0gdGVzdF9uZXh0U29ydEtleVBhcnQ7CisJbGli LT5zZXRVVEY4ID0gdWl0ZXJfc2V0VVRGODsKKwlsaWItPmVycm9yTmFtZSA9IHVfZXJyb3JOYW1l OworCWxpYi0+c3RyVG9VcHBlciA9IHRlc3Rfc3RyVG9VcHBlcjsKKwlsaWItPnN0clRvTG93ZXIg PSB0ZXN0X3N0clRvTG93ZXI7CisJbGliLT5zdHJUb1RpdGxlID0gdV9zdHJUb1RpdGxlOworCWxp Yi0+c2V0QXR0cmlidXRlID0gdGVzdF9zZXRBdHRyaWJ1dGU7CisJbGliLT5vcGVuQ29udmVydGVy ID0gdWNudl9vcGVuOworCWxpYi0+Y2xvc2VDb252ZXJ0ZXIgPSB1Y252X2Nsb3NlOworCWxpYi0+ ZnJvbVVDaGFycyA9IHVjbnZfZnJvbVVDaGFyczsKKwlsaWItPnRvVUNoYXJzID0gdWNudl90b1VD aGFyczsKKwlsaWItPnRvTGFuZ3VhZ2VUYWcgPSB1bG9jX3RvTGFuZ3VhZ2VUYWc7CisJbGliLT5n ZXREaXNwbGF5TmFtZSA9IHVsb2NfZ2V0RGlzcGxheU5hbWU7CisJbGliLT5jb3VudEF2YWlsYWJs ZSA9IHVsb2NfY291bnRBdmFpbGFibGU7CisJbGliLT5nZXRBdmFpbGFibGUgPSB1bG9jX2dldEF2 YWlsYWJsZTsKKworCXRlc3RfaWN1X2xpYnJhcnkgPSBsaWI7CisJcmV0dXJuIGxpYjsKK30KKwor I2VuZGlmCQkJCS8qIFVTRV9JQ1UgKi8KLS0gCjIuMzQuMQoK --=-u4oNhfj6zIVO/ZOtTH+g Content-Disposition: attachment; filename*0=v8-0001-Support-multiple-ICU-collation-provider-libraries.pat; filename*1=ch Content-Type: text/x-patch; name="v8-0001-Support-multiple-ICU-collation-provider-libraries.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSA3NmMzZDgyNGFkNzc3ZjI1OWVhMzdjNWViMmY2NDU0OTk5ZDhmYjQ4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWZmIERhdmlzIDxqZWZmQGotZGF2aXMuY29tPgpEYXRlOiBX ZWQsIDcgRGVjIDIwMjIgMTE6MDc6MzEgLTA4MDAKU3ViamVjdDogW1BBVENIIHY4IDEvNF0gU3Vw cG9ydCBtdWx0aXBsZSBJQ1UgY29sbGF0aW9uIHByb3ZpZGVyIGxpYnJhcmllcy4KCkludHJvZHVj ZSBzdHJ1Y3R1cmUgcGdfaWN1X2xpYnJhcnksIHdoaWNoIGhvbGRzIHBvaW50ZXJzIHRvIGVhY2gK cmVxdWlyZWQgSUNVIG1ldGhvZCwgYW5kIHN0b3JlIHRoaXMgYXMgcGFydCBvZiBwZ19sb2NhbGVf dC4gRWFjaCBjYWxsCnRvIGFuIElDVSBmdW5jdGlvbiBpbnN0ZWFkIGdvZXMgdGhyb3VnaCB0aGlz IHN0cnVjdHVyZSwgc28gdGhhdCBpdCBjYW4KbW9yZSBlYXNpbHkgYmUgcmVwbGFjZWQgYnkgYSBu b24tYnVpbHRpbiBJQ1UgbGlicmFyeS4KCk9mZmVyIGEgaG9vayB0byBhbGxvdyBhbiBleHRlbnNp b24gdG8gY29udHJvbCB3aGljaCBJQ1UgbGlicmFyeSBpcwpsb2FkZWQgZm9yIGEgZ2l2ZW4gbG9j YWxlIGFuZCB2ZXJzaW9uLgoKQXV0aG9yOiBUaG9tYXMgTXVucm8sIEplZmYgRGF2aXMKLS0tCiBz cmMvYmFja2VuZC9jb21tYW5kcy9jb2xsYXRpb25jbWRzLmMgICB8ICAxNyArLQogc3JjL2JhY2tl bmQvdXRpbHMvYWR0L2Zvcm1hdHRpbmcuYyAgICAgfCAgNjcgKysrKy0tCiBzcmMvYmFja2VuZC91 dGlscy9hZHQvcGdfbG9jYWxlLmMgICAgICB8IDMxNiArKysrKysrKysrKysrKysrKystLS0tLS0t CiBzcmMvaW5jbHVkZS91dGlscy9wZ19sb2NhbGVfaW50ZXJuYWwuaCB8IDEyNCArKysrKysrKyst CiA0IGZpbGVzIGNoYW5nZWQsIDQxNCBpbnNlcnRpb25zKCspLCAxMTAgZGVsZXRpb25zKC0pCgpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29sbGF0aW9uY21kcy5jIGIvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvY29sbGF0aW9uY21kcy5jCmluZGV4IGQ4NzhiZTJmYjguLjIxN2MxM2Yw NjYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvbGxhdGlvbmNtZHMuYworKysg Yi9zcmMvYmFja2VuZC9jb21tYW5kcy9jb2xsYXRpb25jbWRzLmMKQEAgLTU2NiwxMyArNTY2LDE0 IEBAIGdldF9pY3VfbGFuZ3VhZ2VfdGFnKGNvbnN0IGNoYXIgKmxvY2FsZW5hbWUpCiB7CiAJY2hh cgkJYnVmW1VMT0NfRlVMTE5BTUVfQ0FQQUNJVFldOwogCVVFcnJvckNvZGUJc3RhdHVzOworCXBn X2ljdV9saWJyYXJ5ICppY3VsaWIgPSBnZXRfZGVmYXVsdF9pY3VfbGlicmFyeSgpOwogCiAJc3Rh dHVzID0gVV9aRVJPX0VSUk9SOwotCXVsb2NfdG9MYW5ndWFnZVRhZyhsb2NhbGVuYW1lLCBidWYs IHNpemVvZihidWYpLCB0cnVlLCAmc3RhdHVzKTsKKwlpY3VsaWItPnRvTGFuZ3VhZ2VUYWcobG9j YWxlbmFtZSwgYnVmLCBzaXplb2YoYnVmKSwgdHJ1ZSwgJnN0YXR1cyk7CiAJaWYgKFVfRkFJTFVS RShzdGF0dXMpKQogCQllcmVwb3J0KEVSUk9SLAogCQkJCShlcnJtc2coImNvdWxkIG5vdCBjb252 ZXJ0IGxvY2FsZSBuYW1lIFwiJXNcIiB0byBsYW5ndWFnZSB0YWc6ICVzIiwKLQkJCQkJCWxvY2Fs ZW5hbWUsIHVfZXJyb3JOYW1lKHN0YXR1cykpKSk7CisJCQkJCQlsb2NhbGVuYW1lLCBpY3VsaWIt PmVycm9yTmFtZShzdGF0dXMpKSkpOwogCiAJcmV0dXJuIHBzdHJkdXAoYnVmKTsKIH0KQEAgLTU5 MSwxMSArNTkyLDEyIEBAIGdldF9pY3VfbG9jYWxlX2NvbW1lbnQoY29uc3QgY2hhciAqbG9jYWxl bmFtZSkKIAlpbnQzMgkJbGVuX3VjaGFyOwogCWludDMyCQlpOwogCWNoYXIJICAgKnJlc3VsdDsK KwlwZ19pY3VfbGlicmFyeSAqaWN1bGliID0gZ2V0X2RlZmF1bHRfaWN1X2xpYnJhcnkoKTsKIAog CXN0YXR1cyA9IFVfWkVST19FUlJPUjsKLQlsZW5fdWNoYXIgPSB1bG9jX2dldERpc3BsYXlOYW1l KGxvY2FsZW5hbWUsICJlbiIsCi0JCQkJCQkJCQlkaXNwbGF5bmFtZSwgbGVuZ3Rob2YoZGlzcGxh eW5hbWUpLAotCQkJCQkJCQkJJnN0YXR1cyk7CisJbGVuX3VjaGFyID0gaWN1bGliLT5nZXREaXNw bGF5TmFtZShsb2NhbGVuYW1lLCAiZW4iLAorCQkJCQkJCQkJICAgZGlzcGxheW5hbWUsIGxlbmd0 aG9mKGRpc3BsYXluYW1lKSwKKwkJCQkJCQkJCSAgICZzdGF0dXMpOwogCWlmIChVX0ZBSUxVUkUo c3RhdHVzKSkKIAkJcmV0dXJuIE5VTEw7CQkJLyogbm8gZ29vZCByZWFzb24gdG8gcmFpc2UgYW4g ZXJyb3IgKi8KIApAQCAtOTIxLDEyICs5MjMsMTMgQEAgcGdfaW1wb3J0X3N5c3RlbV9jb2xsYXRp b25zKFBHX0ZVTkNUSU9OX0FSR1MpCiAjaWZkZWYgVVNFX0lDVQogCXsKIAkJaW50CQkJaTsKKwkJ cGdfaWN1X2xpYnJhcnkgKmljdWxpYiA9IGdldF9kZWZhdWx0X2ljdV9saWJyYXJ5KCk7CiAKIAkJ LyoKIAkJICogU3RhcnQgdGhlIGxvb3AgYXQgLTEgdG8gc25lYWsgaW4gdGhlIHJvb3QgbG9jYWxl IHdpdGhvdXQgdG9vIG11Y2gKIAkJICogY29kZSBkdXBsaWNhdGlvbi4KIAkJICovCi0JCWZvciAo aSA9IC0xOyBpIDwgdWxvY19jb3VudEF2YWlsYWJsZSgpOyBpKyspCisJCWZvciAoaSA9IC0xOyBp IDwgaWN1bGliLT5jb3VudEF2YWlsYWJsZSgpOyBpKyspCiAJCXsKIAkJCWNvbnN0IGNoYXIgKm5h bWU7CiAJCQljaGFyCSAgICpsYW5ndGFnOwpAQCAtOTM3LDcgKzk0MCw3IEBAIHBnX2ltcG9ydF9z eXN0ZW1fY29sbGF0aW9ucyhQR19GVU5DVElPTl9BUkdTKQogCQkJaWYgKGkgPT0gLTEpCiAJCQkJ bmFtZSA9ICIiOwkJLyogSUNVIHJvb3QgbG9jYWxlICovCiAJCQllbHNlCi0JCQkJbmFtZSA9IHVs b2NfZ2V0QXZhaWxhYmxlKGkpOworCQkJCW5hbWUgPSBpY3VsaWItPmdldEF2YWlsYWJsZShpKTsK IAogCQkJbGFuZ3RhZyA9IGdldF9pY3VfbGFuZ3VhZ2VfdGFnKG5hbWUpOwogCQkJaWN1bG9jc3Ry ID0gVV9JQ1VfVkVSU0lPTl9NQUpPUl9OVU0gPj0gNTQgPyBsYW5ndGFnIDogbmFtZTsKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9mb3JtYXR0aW5nLmMgYi9zcmMvYmFja2VuZC91 dGlscy9hZHQvZm9ybWF0dGluZy5jCmluZGV4IGY0NWUyMDQzYTEuLjBhNjgzY2Q4MTYgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9mb3JtYXR0aW5nLmMKKysrIGIvc3JjL2JhY2tl bmQvdXRpbHMvYWR0L2Zvcm1hdHRpbmcuYwpAQCAtMTU2Niw2ICsxNTY2LDExIEBAIHR5cGVkZWYg aW50MzJfdCAoKklDVV9Db252ZXJ0X0Z1bmMpIChVQ2hhciAqZGVzdCwgaW50MzJfdCBkZXN0Q2Fw YWNpdHksCiAJCQkJCQkJCQkgY29uc3QgVUNoYXIgKnNyYywgaW50MzJfdCBzcmNMZW5ndGgsCiAJ CQkJCQkJCQkgY29uc3QgY2hhciAqbG9jYWxlLAogCQkJCQkJCQkJIFVFcnJvckNvZGUgKnBFcnJv ckNvZGUpOwordHlwZWRlZiBpbnQzMl90ICgqSUNVX0NvbnZlcnRfQklfRnVuYykgKFVDaGFyICpk ZXN0LCBpbnQzMl90IGRlc3RDYXBhY2l0eSwKKwkJCQkJCQkJCQljb25zdCBVQ2hhciAqc3JjLCBp bnQzMl90IHNyY0xlbmd0aCwKKwkJCQkJCQkJCQlVQnJlYWtJdGVyYXRvciAqYmksCisJCQkJCQkJ CQkJY29uc3QgY2hhciAqbG9jYWxlLAorCQkJCQkJCQkJCVVFcnJvckNvZGUgKnBFcnJvckNvZGUp OwogCiBzdGF0aWMgaW50MzJfdAogaWN1X2NvbnZlcnRfY2FzZShJQ1VfQ29udmVydF9GdW5jIGZ1 bmMsIHBnX2xvY2FsZV90IG15bG9jYWxlLApAQCAtMTU3Myw2ICsxNTc4LDcgQEAgaWN1X2NvbnZl cnRfY2FzZShJQ1VfQ29udmVydF9GdW5jIGZ1bmMsIHBnX2xvY2FsZV90IG15bG9jYWxlLAogewog CVVFcnJvckNvZGUJc3RhdHVzOwogCWludDMyX3QJCWxlbl9kZXN0OworCXBnX2ljdV9saWJyYXJ5 ICppY3VsaWIgPSBQR19JQ1VfTElCKG15bG9jYWxlKTsKIAogCWxlbl9kZXN0ID0gbGVuX3NvdXJj ZTsJCS8qIHRyeSBmaXJzdCB3aXRoIHNhbWUgbGVuZ3RoICovCiAJKmJ1ZmZfZGVzdCA9IHBhbGxv YyhsZW5fZGVzdCAqIHNpemVvZigqKmJ1ZmZfZGVzdCkpOwpAQCAtMTU5MCwxOCArMTU5Niw0MiBA QCBpY3VfY29udmVydF9jYXNlKElDVV9Db252ZXJ0X0Z1bmMgZnVuYywgcGdfbG9jYWxlX3QgbXls b2NhbGUsCiAJfQogCWlmIChVX0ZBSUxVUkUoc3RhdHVzKSkKIAkJZXJlcG9ydChFUlJPUiwKLQkJ CQkoZXJybXNnKCJjYXNlIGNvbnZlcnNpb24gZmFpbGVkOiAlcyIsIHVfZXJyb3JOYW1lKHN0YXR1 cykpKSk7CisJCQkJKGVycm1zZygiY2FzZSBjb252ZXJzaW9uIGZhaWxlZDogJXMiLAorCQkJCQkJ aWN1bGliLT5lcnJvck5hbWUoc3RhdHVzKSkpKTsKIAlyZXR1cm4gbGVuX2Rlc3Q7CiB9CiAKKy8q CisgKiBMaWtlIGljdV9jb252ZXJ0X2Nhc2UsIGJ1dCBmdW5jIHRha2VzIGEgYnJlYWsgaXRlcmF0 b3IgKHdoaWNoIHdlIGRvbid0CisgKiBtYWtlIHVzZSBvZikuCisgKi8KIHN0YXRpYyBpbnQzMl90 Ci11X3N0clRvVGl0bGVfZGVmYXVsdF9CSShVQ2hhciAqZGVzdCwgaW50MzJfdCBkZXN0Q2FwYWNp dHksCi0JCQkJCQljb25zdCBVQ2hhciAqc3JjLCBpbnQzMl90IHNyY0xlbmd0aCwKLQkJCQkJCWNv bnN0IGNoYXIgKmxvY2FsZSwKLQkJCQkJCVVFcnJvckNvZGUgKnBFcnJvckNvZGUpCitpY3VfY29u dmVydF9jYXNlX2JpKElDVV9Db252ZXJ0X0JJX0Z1bmMgZnVuYywgcGdfbG9jYWxlX3QgbXlsb2Nh bGUsCisJCQkJCVVDaGFyICoqYnVmZl9kZXN0LCBVQ2hhciAqYnVmZl9zb3VyY2UsIGludDMyX3Qg bGVuX3NvdXJjZSkKIHsKLQlyZXR1cm4gdV9zdHJUb1RpdGxlKGRlc3QsIGRlc3RDYXBhY2l0eSwg c3JjLCBzcmNMZW5ndGgsCi0JCQkJCQlOVUxMLCBsb2NhbGUsIHBFcnJvckNvZGUpOworCVVFcnJv ckNvZGUJc3RhdHVzOworCWludDMyX3QJCWxlbl9kZXN0OworCXBnX2ljdV9saWJyYXJ5ICppY3Vs aWIgPSBQR19JQ1VfTElCKG15bG9jYWxlKTsKKworCWxlbl9kZXN0ID0gbGVuX3NvdXJjZTsJCS8q IHRyeSBmaXJzdCB3aXRoIHNhbWUgbGVuZ3RoICovCisJKmJ1ZmZfZGVzdCA9IHBhbGxvYyhsZW5f ZGVzdCAqIHNpemVvZigqKmJ1ZmZfZGVzdCkpOworCXN0YXR1cyA9IFVfWkVST19FUlJPUjsKKwls ZW5fZGVzdCA9IGZ1bmMoKmJ1ZmZfZGVzdCwgbGVuX2Rlc3QsIGJ1ZmZfc291cmNlLCBsZW5fc291 cmNlLCBOVUxMLAorCQkJCQlteWxvY2FsZS0+Y3R5cGUsICZzdGF0dXMpOworCWlmIChzdGF0dXMg PT0gVV9CVUZGRVJfT1ZFUkZMT1dfRVJST1IpCisJeworCQkvKiB0cnkgYWdhaW4gd2l0aCBhZGp1 c3RlZCBsZW5ndGggKi8KKwkJcGZyZWUoKmJ1ZmZfZGVzdCk7CisJCSpidWZmX2Rlc3QgPSBwYWxs b2MobGVuX2Rlc3QgKiBzaXplb2YoKipidWZmX2Rlc3QpKTsKKwkJc3RhdHVzID0gVV9aRVJPX0VS Uk9SOworCQlsZW5fZGVzdCA9IGZ1bmMoKmJ1ZmZfZGVzdCwgbGVuX2Rlc3QsIGJ1ZmZfc291cmNl LCBsZW5fc291cmNlLCBOVUxMLAorCQkJCQkJbXlsb2NhbGUtPmN0eXBlLCAmc3RhdHVzKTsKKwl9 CisJaWYgKFVfRkFJTFVSRShzdGF0dXMpKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJtc2co ImNhc2UgY29udmVyc2lvbiBmYWlsZWQ6ICVzIiwKKwkJCQkJCWljdWxpYi0+ZXJyb3JOYW1lKHN0 YXR1cykpKSk7CisJcmV0dXJuIGxlbl9kZXN0OwogfQogCiAjZW5kaWYJCQkJCQkJLyogVVNFX0lD VSAqLwpAQCAtMTY2NywxMSArMTY5NywxMiBAQCBzdHJfdG9sb3dlcihjb25zdCBjaGFyICpidWZm LCBzaXplX3QgbmJ5dGVzLCBPaWQgY29sbGlkKQogCQkJaW50MzJfdAkJbGVuX2NvbnY7CiAJCQlV Q2hhcgkgICAqYnVmZl91Y2hhcjsKIAkJCVVDaGFyCSAgICpidWZmX2NvbnY7CisJCQlwZ19pY3Vf bGlicmFyeSAqaWN1bGliID0gUEdfSUNVX0xJQihteWxvY2FsZSk7CiAKLQkJCWxlbl91Y2hhciA9 IGljdV90b191Y2hhcigmYnVmZl91Y2hhciwgYnVmZiwgbmJ5dGVzKTsKLQkJCWxlbl9jb252ID0g aWN1X2NvbnZlcnRfY2FzZSh1X3N0clRvTG93ZXIsIG15bG9jYWxlLAorCQkJbGVuX3VjaGFyID0g aWN1X3RvX3VjaGFyKGljdWxpYiwgJmJ1ZmZfdWNoYXIsIGJ1ZmYsIG5ieXRlcyk7CisJCQlsZW5f Y29udiA9IGljdV9jb252ZXJ0X2Nhc2UoaWN1bGliLT5zdHJUb0xvd2VyLCBteWxvY2FsZSwKIAkJ CQkJCQkJCQkmYnVmZl9jb252LCBidWZmX3VjaGFyLCBsZW5fdWNoYXIpOwotCQkJaWN1X2Zyb21f dWNoYXIoJnJlc3VsdCwgYnVmZl9jb252LCBsZW5fY29udik7CisJCQlpY3VfZnJvbV91Y2hhcihp Y3VsaWIsICZyZXN1bHQsIGJ1ZmZfY29udiwgbGVuX2NvbnYpOwogCQkJcGZyZWUoYnVmZl91Y2hh cik7CiAJCQlwZnJlZShidWZmX2NvbnYpOwogCQl9CkBAIC0xNzg5LDExICsxODIwLDEyIEBAIHN0 cl90b3VwcGVyKGNvbnN0IGNoYXIgKmJ1ZmYsIHNpemVfdCBuYnl0ZXMsIE9pZCBjb2xsaWQpCiAJ CQkJCQlsZW5fY29udjsKIAkJCVVDaGFyCSAgICpidWZmX3VjaGFyOwogCQkJVUNoYXIJICAgKmJ1 ZmZfY29udjsKKwkJCXBnX2ljdV9saWJyYXJ5ICppY3VsaWIgPSBQR19JQ1VfTElCKG15bG9jYWxl KTsKIAotCQkJbGVuX3VjaGFyID0gaWN1X3RvX3VjaGFyKCZidWZmX3VjaGFyLCBidWZmLCBuYnl0 ZXMpOwotCQkJbGVuX2NvbnYgPSBpY3VfY29udmVydF9jYXNlKHVfc3RyVG9VcHBlciwgbXlsb2Nh bGUsCisJCQlsZW5fdWNoYXIgPSBpY3VfdG9fdWNoYXIoaWN1bGliLCAmYnVmZl91Y2hhciwgYnVm ZiwgbmJ5dGVzKTsKKwkJCWxlbl9jb252ID0gaWN1X2NvbnZlcnRfY2FzZShpY3VsaWItPnN0clRv VXBwZXIsIG15bG9jYWxlLAogCQkJCQkJCQkJCSZidWZmX2NvbnYsIGJ1ZmZfdWNoYXIsIGxlbl91 Y2hhcik7Ci0JCQlpY3VfZnJvbV91Y2hhcigmcmVzdWx0LCBidWZmX2NvbnYsIGxlbl9jb252KTsK KwkJCWljdV9mcm9tX3VjaGFyKGljdWxpYiwgJnJlc3VsdCwgYnVmZl9jb252LCBsZW5fY29udik7 CiAJCQlwZnJlZShidWZmX3VjaGFyKTsKIAkJCXBmcmVlKGJ1ZmZfY29udik7CiAJCX0KQEAgLTE5 MTIsMTEgKzE5NDQsMTIgQEAgc3RyX2luaXRjYXAoY29uc3QgY2hhciAqYnVmZiwgc2l6ZV90IG5i eXRlcywgT2lkIGNvbGxpZCkKIAkJCQkJCWxlbl9jb252OwogCQkJVUNoYXIJICAgKmJ1ZmZfdWNo YXI7CiAJCQlVQ2hhcgkgICAqYnVmZl9jb252OworCQkJcGdfaWN1X2xpYnJhcnkgKmljdWxpYiA9 IFBHX0lDVV9MSUIobXlsb2NhbGUpOwogCi0JCQlsZW5fdWNoYXIgPSBpY3VfdG9fdWNoYXIoJmJ1 ZmZfdWNoYXIsIGJ1ZmYsIG5ieXRlcyk7Ci0JCQlsZW5fY29udiA9IGljdV9jb252ZXJ0X2Nhc2Uo dV9zdHJUb1RpdGxlX2RlZmF1bHRfQkksIG15bG9jYWxlLAotCQkJCQkJCQkJCSZidWZmX2NvbnYs IGJ1ZmZfdWNoYXIsIGxlbl91Y2hhcik7Ci0JCQlpY3VfZnJvbV91Y2hhcigmcmVzdWx0LCBidWZm X2NvbnYsIGxlbl9jb252KTsKKwkJCWxlbl91Y2hhciA9IGljdV90b191Y2hhcihpY3VsaWIsICZi dWZmX3VjaGFyLCBidWZmLCBuYnl0ZXMpOworCQkJbGVuX2NvbnYgPSBpY3VfY29udmVydF9jYXNl X2JpKGljdWxpYi0+c3RyVG9UaXRsZSwgbXlsb2NhbGUsCisJCQkJCQkJCQkJICAgJmJ1ZmZfY29u diwgYnVmZl91Y2hhciwgbGVuX3VjaGFyKTsKKwkJCWljdV9mcm9tX3VjaGFyKGljdWxpYiwgJnJl c3VsdCwgYnVmZl9jb252LCBsZW5fY29udik7CiAJCQlwZnJlZShidWZmX3VjaGFyKTsKIAkJCXBm cmVlKGJ1ZmZfY29udik7CiAJCX0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9w Z19sb2NhbGUuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGUuYwppbmRleCBkM2Nh M2M1MDExLi4xMGIxNzljYjQ4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdf bG9jYWxlLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZS5jCkBAIC03MCw2 ICs3MCw4IEBACiAKICNpZmRlZiBVU0VfSUNVCiAjaW5jbHVkZSA8dW5pY29kZS91Y252Lmg+Cisj aW5jbHVkZSA8dW5pY29kZS91bG9jZGF0YS5oPgorI2luY2x1ZGUgPHVuaWNvZGUvdXN0cmluZy5o PgogI2VuZGlmCiAKICNpZmRlZiBfX0dMSUJDX18KQEAgLTExMCw2ICsxMTIsNDEgQEAgY2hhcgkg ICAqbG9jYWxpemVkX2Z1bGxfZGF5c1s3ICsgMV07CiBjaGFyCSAgICpsb2NhbGl6ZWRfYWJicmV2 X21vbnRoc1sxMiArIDFdOwogY2hhcgkgICAqbG9jYWxpemVkX2Z1bGxfbW9udGhzWzEyICsgMV07 CiAKKy8qCisgKiBUaGUgcHJlY2lzZSB2ZXJzaW9uIG9mIGEgY29sbGF0aW9uIHByb3ZpZGVyIGxp YnJhcnkgaXMgaW1wb3J0YW50LCBiZWNhdXNlCisgKiBzdWJ0bGUgY2hhbmdlcyBpbiBjb2xsYXRp b24gYmV0d2VlbiBsaWJyYXJ5IHZlcnNpb25zIGNhbiBjb3JydXB0CisgKiBpbmRleGVzLiBUaGlz IGhvb2sgYWxsb3dzIGNvbnRyb2wgb3ZlciBob3cgY29sbGF0aW9uIHByb3ZpZGVyIGxpYnJhcmll cyBhcmUKKyAqIGxvYWRlZC4KKyAqCisgKiBJZiB0aGUgaG9vayBpcyBub3Qgc2V0LCBvciBpZiBp dCByZXR1cm5zIE5VTEwsIFBvc3RncmVzIGNvbnN0cnVjdHMgdGhlCisgKiBwZ19pY3VfbGlicmFy eSBzdHJ1Y3R1cmUgZnJvbSB0aGUgc3ltYm9scyBQb3N0Z3JlcyBpcyBsaW5rZWQgd2l0aCBhdCBi dWlsZAorICogdGltZS4KKyAqCisgKiBJZiB0aGUgaG9vayBpcyBzZXQsIGl0IGNhbiBpbnN0ZWFk IGNvbnN0cnVjdCB0aGUgcGdfaWN1X2xpYnJhcnkgc3RydWN0dXJlCisgKiB1c2luZyBjdXN0b20g bG9naWMuIE9yZGluYXJpbHksIHRoaXMgY3VzdG9tIGxvZ2ljIHdvdWxkIGludm9sdmUgZmluZGlu ZyBhCisgKiBzcGVjaWZpYyBrbm93biB2ZXJzaW9uIG9mIHRoZSBjb2xsYXRpb24gcHJvdmlkZXIg bGlicmFyeSwgYW5kIGR5bmFtaWNhbGx5CisgKiBsb2FkaW5nIHRoZSBuZWNlc3Nhcnkgc3ltYm9s cy4gSWYgdGhlIGNvbGxhdGlvbiB2ZXJzaW9uIG9idGFpbmVkIGZyb20gdGhlCisgKiBsaWJyYXJ5 IGRvZXMgbm90IG1hdGNoIHRoZSBjb2xsYXRpb24gdmVyc2lvbiByZWNvcmRlZCBpbiB0aGUgY2F0 YWxvZywKKyAqIFBvc3RncmVzIHdpbGwgaXNzdWUgYSBXQVJOSU5HLgorICoKKyAqIFRoZSByZXR1 cm5lZCBzdHJ1Y3R1cmUgbXVzdCBiZSBhbGxvY2F0ZWQgaW4gVG9wTWVtb3J5Q29udGV4dCwgYW5k IHRoZQorICogYXNzb2NpYXRlZCBzeW1ib2xzIG11c3QgcmVtYWluIHZhbGlkIHBlcm1hbmVudGx5 LiBJdCdzIGV4cGVjdGVkIHRoYXQgdGhlCisgKiBob29rIHdpbGwgbWFpbnRhaW4gYSBzbWFsbCBm aW5pdGUgbGlzdCBvZiBsaWJyYXJpZXMgYW5kIHJldHVybiBhIHBvaW50ZXIgdG8KKyAqIHRoZSBh cHByb3ByYWl0ZSBvbmUsIHNvIHRoYXQgcmVzb3VyY2UgdXNlIHJlbWFpbnMgYm91bmRlZC4KKyAq CisgKiBYWFg6IEZvciBub3csIHRoZSBvbmx5IGluZm9ybWF0aW9uIHRoZSBob29rIGhhcyBhY2Nl c3MgdG8gaXMgdGhlIElDVSBsb2NhbGUKKyAqIG5hbWUsIGFuZCB0aGUgY29sbGF0aW9uIHZlcnNp b24gYXMgcmVjb3JkZWQgaW4gdGhlIGNhdGFsb2cuIFdlIHNob3VsZAorICogY29uc2lkZXIgd2hh dCBvdGhlciBpbmZvcm1hdGlvbiBjYW4gYmUgcHJvdmlkZWQgdG8gYWxsb3cgZm9yIGdyZWF0ZXIK KyAqIGNvbnRyb2wgb3ZlciB3aGljaCBsaWJyYXJ5IGlzIGxvYWRlZC4KKyAqLworI2lmZGVmIFVT RV9JQ1UKK2dldF9pY3VfbGlicmFyeV9ob29rX3R5cGUgZ2V0X2ljdV9saWJyYXJ5X2hvb2sgPSBO VUxMOworI2VuZGlmCisKKyNpZmRlZiBVU0VfSUNVCitzdGF0aWMgcGdfaWN1X2xpYnJhcnkgKmJ1 aWx0aW5faWN1X2xpYnJhcnkgPSBOVUxMOworI2VuZGlmCisKIC8qIGluZGljYXRlcyB3aGV0aGVy IGxvY2FsZSBpbmZvcm1hdGlvbiBjYWNoZSBpcyB2YWxpZCAqLwogc3RhdGljIGJvb2wgQ3VycmVu dExvY2FsZUNvbnZWYWxpZCA9IGZhbHNlOwogc3RhdGljIGJvb2wgQ3VycmVudExDVGltZVZhbGlk ID0gZmFsc2U7CkBAIC0xMzYsOCArMTczLDEyIEBAIHN0YXRpYyBjaGFyICpJc29Mb2NhbGVOYW1l KGNvbnN0IGNoYXIgKik7CiAgKiBEYXRhYmFzZSBkZWZhdWx0IGxvY2FsZS4KICAqLwogc3RhdGlj IHBnX2xvY2FsZV90IGRlZmF1bHRfbG9jYWxlID0gTlVMTDsKKyNpZmRlZiBVU0VfSUNVCitzdGF0 aWMgcGdfaWN1X2xpYnJhcnkgKmRlZmF1bHRfaWN1ID0gTlVMTDsKKyNlbmRpZgogCiAjaWZkZWYg VVNFX0lDVQorCiAvKgogICogQ29udmVydGVyIG9iamVjdCBmb3IgY29udmVydGluZyBiZXR3ZWVu IElDVSdzIFVDaGFyIHN0cmluZ3MgYW5kIEMgc3RyaW5ncwogICogaW4gZGF0YWJhc2UgZW5jb2Rp bmcuICBTaW5jZSB0aGUgZGF0YWJhc2UgZW5jb2RpbmcgZG9lc24ndCBjaGFuZ2UsIHdlIG9ubHkK QEAgLTE0NSwxMyArMTg2LDE3IEBAIHN0YXRpYyBwZ19sb2NhbGVfdCBkZWZhdWx0X2xvY2FsZSA9 IE5VTEw7CiAgKi8KIHN0YXRpYyBVQ29udmVydGVyICppY3VfY29udmVydGVyID0gTlVMTDsKIAot c3RhdGljIHZvaWQgaW5pdF9pY3VfY29udmVydGVyKHZvaWQpOwotc3RhdGljIHNpemVfdCB1Y2hh cl9sZW5ndGgoVUNvbnZlcnRlciAqY29udmVydGVyLAorc3RhdGljIHZvaWQgaW5pdF9pY3VfY29u dmVydGVyKHBnX2ljdV9saWJyYXJ5ICppY3VsaWIpOworc3RhdGljIHNpemVfdCB1Y2hhcl9sZW5n dGgocGdfaWN1X2xpYnJhcnkgKmljdWxpYiwKKwkJCQkJCSAgIFVDb252ZXJ0ZXIgKmNvbnZlcnRl ciwKIAkJCQkJCSAgIGNvbnN0IGNoYXIgKnN0ciwgc2l6ZV90IGxlbik7Ci1zdGF0aWMgaW50MzJf dCB1Y2hhcl9jb252ZXJ0KFVDb252ZXJ0ZXIgKmNvbnZlcnRlciwKK3N0YXRpYyBpbnQzMl90IHVj aGFyX2NvbnZlcnQocGdfaWN1X2xpYnJhcnkgKmljdWxpYiwKKwkJCQkJCQkgVUNvbnZlcnRlciAq Y29udmVydGVyLAogCQkJCQkJCSBVQ2hhciAqZGVzdCwgaW50MzJfdCBkZXN0bGVuLAogCQkJCQkJ CSBjb25zdCBjaGFyICpzdHIsIHNpemVfdCBzcmNsZW4pOwotc3RhdGljIHZvaWQgaWN1X3NldF9j b2xsYXRpb25fYXR0cmlidXRlcyhVQ29sbGF0b3IgKmNvbGxhdG9yLCBjb25zdCBjaGFyICpsb2Mp Oworc3RhdGljIHZvaWQgaWN1X3NldF9jb2xsYXRpb25fYXR0cmlidXRlcyhwZ19pY3VfbGlicmFy eSAqaWN1bGliLAorCQkJCQkJCQkJCSBVQ29sbGF0b3IgKmNvbGxhdG9yLAorCQkJCQkJCQkJCSBj b25zdCBjaGFyICpsb2MpOwogI2VuZGlmCiAKIC8qCkBAIC0xNDU4LDYgKzE1MDMsODUgQEAgcmVw b3J0X25ld2xvY2FsZV9mYWlsdXJlKGNvbnN0IGNoYXIgKmxvY2FsZW5hbWUpCiB9CiAjZW5kaWYJ CQkJCQkJLyogSEFWRV9MT0NBTEVfVCAqLwogCisjaWZkZWYgVVNFX0lDVQorcGdfaWN1X2xpYnJh cnkgKgorZ2V0X2J1aWx0aW5faWN1X2xpYnJhcnkoKQoreworCVVWZXJzaW9uSW5mbyB2ZXJzaW9u X2luZm87CisJcGdfaWN1X2xpYnJhcnkgKmxpYjsKKworCWlmIChidWlsdGluX2ljdV9saWJyYXJ5 ICE9IE5VTEwpCisJCXJldHVybiBidWlsdGluX2ljdV9saWJyYXJ5OworCisJLyoKKwkgKiBUaGVz ZSBhc3NpZ25tZW50cyB3aWxsIGZhaWwgdG8gY29tcGlsZSBpZiBhbiBpbmNvbXBhdGlibGUgQVBJ IGNoYW5nZSBpcworCSAqIG1hZGUgdG8gc29tZSBmdXR1cmUgdmVyc2lvbiBvZiBJQ1UsIGF0IHdo aWNoIHBvaW50IHdlIG1pZ2h0IG5lZWQgdG8KKwkgKiBjb25zaWRlciBzcGVjaWFsIHRyZWF0bWVu dCBmb3IgZGlmZmVyZW50IG1ham9yIHZlcnNpb24gcmFuZ2VzLCB3aXRoCisJICogaW50ZXJtZWRp YXRlIHRyYW1wb2xpbmUgZnVuY3Rpb25zLgorCSAqLworCWxpYiA9IE1lbW9yeUNvbnRleHRBbGxv Y1plcm8oVG9wTWVtb3J5Q29udGV4dCwgc2l6ZW9mKHBnX2ljdV9saWJyYXJ5KSk7CisJbGliLT5n ZXRJQ1VWZXJzaW9uID0gdV9nZXRWZXJzaW9uOworCWxpYi0+Z2V0VW5pY29kZVZlcnNpb24gPSB1 X2dldFVuaWNvZGVWZXJzaW9uOworCWxpYi0+Z2V0Q0xEUlZlcnNpb24gPSB1bG9jZGF0YV9nZXRD TERSVmVyc2lvbjsKKwlsaWItPm9wZW5Db2xsYXRvciA9IHVjb2xfb3BlbjsKKwlsaWItPmNsb3Nl Q29sbGF0b3IgPSB1Y29sX2Nsb3NlOworCWxpYi0+Z2V0Q29sbGF0b3JWZXJzaW9uID0gdWNvbF9n ZXRWZXJzaW9uOworCWxpYi0+Z2V0VUNBVmVyc2lvbiA9IHVjb2xfZ2V0VUNBVmVyc2lvbjsKKwls aWItPnZlcnNpb25Ub1N0cmluZyA9IHVfdmVyc2lvblRvU3RyaW5nOworCWxpYi0+c3RyY29sbCA9 IHVjb2xfc3RyY29sbDsKKwlsaWItPnN0cmNvbGxVVEY4ID0gdWNvbF9zdHJjb2xsVVRGODsKKwls aWItPmdldFNvcnRLZXkgPSB1Y29sX2dldFNvcnRLZXk7CisJbGliLT5uZXh0U29ydEtleVBhcnQg PSB1Y29sX25leHRTb3J0S2V5UGFydDsKKwlsaWItPnNldFVURjggPSB1aXRlcl9zZXRVVEY4Owor CWxpYi0+ZXJyb3JOYW1lID0gdV9lcnJvck5hbWU7CisJbGliLT5zdHJUb1VwcGVyID0gdV9zdHJU b1VwcGVyOworCWxpYi0+c3RyVG9Mb3dlciA9IHVfc3RyVG9Mb3dlcjsKKwlsaWItPnN0clRvVGl0 bGUgPSB1X3N0clRvVGl0bGU7CisJbGliLT5zZXRBdHRyaWJ1dGUgPSB1Y29sX3NldEF0dHJpYnV0 ZTsKKwlsaWItPm9wZW5Db252ZXJ0ZXIgPSB1Y252X29wZW47CisJbGliLT5jbG9zZUNvbnZlcnRl ciA9IHVjbnZfY2xvc2U7CisJbGliLT5mcm9tVUNoYXJzID0gdWNudl9mcm9tVUNoYXJzOworCWxp Yi0+dG9VQ2hhcnMgPSB1Y252X3RvVUNoYXJzOworCWxpYi0+dG9MYW5ndWFnZVRhZyA9IHVsb2Nf dG9MYW5ndWFnZVRhZzsKKwlsaWItPmdldERpc3BsYXlOYW1lID0gdWxvY19nZXREaXNwbGF5TmFt ZTsKKwlsaWItPmNvdW50QXZhaWxhYmxlID0gdWxvY19jb3VudEF2YWlsYWJsZTsKKwlsaWItPmdl dEF2YWlsYWJsZSA9IHVsb2NfZ2V0QXZhaWxhYmxlOworCisJbGliLT5nZXRJQ1VWZXJzaW9uKHZl cnNpb25faW5mbyk7CisJbGliLT5tYWpvcl92ZXJzaW9uID0gdmVyc2lvbl9pbmZvWzBdOworCWxp Yi0+bWlub3JfdmVyc2lvbiA9IHZlcnNpb25faW5mb1sxXTsKKwlsaWItPmxpYmljdWkxOG5fbmFt ZSA9ICI8YnVpbHRpbj4iOworCWxpYi0+bGliaWN1dWNfbmFtZSA9ICI8YnVpbHRpbj4iOworCisJ LyoKKwkgKiBBbHNvIGFzc2VydCB0aGUgc2l6ZSBvZiBhIGNvdXBsZSBvZiB0eXBlcyB1c2VkIGFz IG91dHB1dCBidWZmZXJzLCBhcyBhCisJICogY2FuYXJ5IHRvIHRlbGwgdXMgdG8gYWRkIGV4dHJh IHBhZGRpbmcgaW4gdGhlICh1bmxpa2VseSkgZXZlbnQgdGhhdCBhCisJICogbGF0ZXIgcmVsZWFz ZSBtYWtlcyB0aGVzZSB2YWx1ZXMgc21hbGxlci4KKwkgKi8KKwlTdGF0aWNBc3NlcnRTdG10KFVf TUFYX1ZFUlNJT05fU1RSSU5HX0xFTkdUSCA9PSAyMCwKKwkJCQkJICJ1X3ZlcnNpb25Ub1N0cmlu ZyBvdXRwdXQgYnVmZmVyIHNpemUgY2hhbmdlZCBpbmNvbXBhdGlibHkiKTsKKwlTdGF0aWNBc3Nl cnRTdG10KFVfTUFYX1ZFUlNJT05fTEVOR1RIID09IDQsCisJCQkJCSAidWNvbF9nZXRWZXJzaW9u IG91dHB1dCBidWZmZXIgc2l6ZSBjaGFuZ2VkIGluY29tcGF0aWJseSIpOworCisJYnVpbHRpbl9p Y3VfbGlicmFyeSA9IGxpYjsKKwlyZXR1cm4gbGliOworfQorCitzdGF0aWMgcGdfaWN1X2xpYnJh cnkgKgorZ2V0X2ljdV9saWJyYXJ5KE9pZCBjb2xsaWQsIGNvbnN0IGNoYXIgKmxvY2FsZSwgY29u c3QgY2hhciAqdmVyc2lvbikKK3sKKwlwZ19pY3VfbGlicmFyeSAqbGliID0gTlVMTDsKKworCWlm IChnZXRfaWN1X2xpYnJhcnlfaG9vayAhPSBOVUxMKQorCQlsaWIgPSBnZXRfaWN1X2xpYnJhcnlf aG9vayhjb2xsaWQsIGxvY2FsZSwgdmVyc2lvbik7CisKKwlpZiAoIWxpYikKKwkJbGliID0gZ2V0 X2J1aWx0aW5faWN1X2xpYnJhcnkoKTsKKworCXJldHVybiBsaWI7Cit9CisKKyNlbmRpZgogCiAv KgogICogQ29uc3RydWN0IGEgbmV3IHBnX2xvY2FsZV90IG9iamVjdC4KQEAgLTE0NzcsOCArMTYw MSw4IEBAIHJlcG9ydF9uZXdsb2NhbGVfZmFpbHVyZShjb25zdCBjaGFyICpsb2NhbGVuYW1lKQog ICogZWZmZWN0aXZlbHkgcGVybWFuZW50LgogICovCiBzdGF0aWMgcGdfbG9jYWxlX3QKLXBnX25l d2xvY2FsZShjaGFyIHByb3ZpZGVyLCBib29sIGRldGVybWluaXN0aWMsIGNvbnN0IGNoYXIgKmNv bGxhdGUsCi0JCQkgY29uc3QgY2hhciAqY3R5cGUsIGNvbnN0IGNoYXIgKnZlcnNpb24pCitwZ19u ZXdsb2NhbGUoT2lkIGNvbGxpZCwgY2hhciBwcm92aWRlciwgYm9vbCBkZXRlcm1pbmlzdGljLAor CQkJIGNvbnN0IGNoYXIgKmNvbGxhdGUsIGNvbnN0IGNoYXIgKmN0eXBlLCBjb25zdCBjaGFyICp2 ZXJzaW9uKQogewogCXBnX2xvY2FsZV90IHJlc3VsdCA9IE1lbW9yeUNvbnRleHRBbGxvYyhUb3BN ZW1vcnlDb250ZXh0LAogCQkJCQkJCQkJCQlzaXplb2Yoc3RydWN0IHBnX2xvY2FsZV9zdHJ1Y3Qp KTsKQEAgLTE1NTQsMjAgKzE2NzgsMjQgQEAgcGdfbmV3bG9jYWxlKGNoYXIgcHJvdmlkZXIsIGJv b2wgZGV0ZXJtaW5pc3RpYywgY29uc3QgY2hhciAqY29sbGF0ZSwKIAl7CiAJCVVDb2xsYXRvciAg KmNvbGxhdG9yOwogCQlVRXJyb3JDb2RlCXN0YXR1czsKKwkJcGdfaWN1X2xpYnJhcnkgKmljdWxp YiA9IGdldF9pY3VfbGlicmFyeShjb2xsaWQsIGNvbGxhdGUsIHZlcnNpb24pOworCisJCUFzc2Vy dChzdHJjbXAoY29sbGF0ZSwgY3R5cGUpID09IDApOwogCiAJCS8qIGNvbGxhdG9yIG1heSBiZSBs ZWFrZWQgaWYgd2UgZW5jb3VudGVyIGFuIGVycm9yICovCiAKIAkJc3RhdHVzID0gVV9aRVJPX0VS Uk9SOwotCQljb2xsYXRvciA9IHVjb2xfb3Blbihjb2xsYXRlLCAmc3RhdHVzKTsKKwkJY29sbGF0 b3IgPSBpY3VsaWItPm9wZW5Db2xsYXRvcihjb2xsYXRlLCAmc3RhdHVzKTsKIAkJaWYgKFVfRkFJ TFVSRShzdGF0dXMpKQogCQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJKGVycm1zZygiY291bGQgbm90 IG9wZW4gY29sbGF0b3IgZm9yIGxvY2FsZSBcIiVzXCI6ICVzIiwKLQkJCQkJCQljb2xsYXRlLCB1 X2Vycm9yTmFtZShzdGF0dXMpKSkpOworCQkJCQkJCWNvbGxhdGUsIGljdWxpYi0+ZXJyb3JOYW1l KHN0YXR1cykpKSk7CiAKIAkJaWYgKFVfSUNVX1ZFUlNJT05fTUFKT1JfTlVNIDwgNTQpCi0JCQlp Y3Vfc2V0X2NvbGxhdGlvbl9hdHRyaWJ1dGVzKGNvbGxhdG9yLCBjb2xsYXRlKTsKKwkJCWljdV9z ZXRfY29sbGF0aW9uX2F0dHJpYnV0ZXMoaWN1bGliLCBjb2xsYXRvciwgY29sbGF0ZSk7CiAKIAkJ cmVzdWx0LT5pbmZvLmljdS51Y29sID0gY29sbGF0b3I7CisJCXJlc3VsdC0+aW5mby5pY3UubGli ID0gaWN1bGliOwogCX0KICNlbmRpZgogCWVsc2UKQEAgLTE1ODksNiArMTcxNywxNCBAQCBwZ19s b2NhbGVfZGV0ZXJtaW5pc3RpYyhwZ19sb2NhbGVfdCBsb2NhbGUpCiAJCXJldHVybiBsb2NhbGUt PmRldGVybWluaXN0aWM7CiB9CiAKKyNpZmRlZiBVU0VfSUNVCitwZ19pY3VfbGlicmFyeSAqCitn ZXRfZGVmYXVsdF9pY3VfbGlicmFyeSgpCit7CisJcmV0dXJuIGRlZmF1bHRfaWN1OworfQorI2Vu ZGlmCisKIC8qCiAgKiBJbml0aWFsaXplIGRlZmF1bHQgZGF0YWJhc2UgbG9jYWxlLgogICovCkBA IC0xNTk2LDYgKzE3MzIsMTAgQEAgdm9pZAogaW5pdF9kZWZhdWx0X2xvY2FsZShjaGFyIHByb3Zp ZGVyLCBjb25zdCBjaGFyICpjb2xsYXRlLCBjb25zdCBjaGFyICpjdHlwZSwKIAkJCQkJY29uc3Qg Y2hhciAqaWN1bG9jYWxlLCBjb25zdCBjaGFyICp2ZXJzaW9uKQogeworI2lmZGVmIFVTRV9JQ1UK KwlkZWZhdWx0X2ljdSA9IGdldF9pY3VfbGlicmFyeShERUZBVUxUX0NPTExBVElPTl9PSUQsIGlj dWxvY2FsZSwgdmVyc2lvbik7CisjZW5kaWYKKwogCS8qCiAJICogRm9yIHRoZSBwdXJwb3NlcyBv ZiBwZ19sb2NhbGVfdCwgaWYgdGhlIHByb3ZpZGVyIGlzIElDVSwgd2UgdXNlCiAJICogaWN1bG9j YWxlIGZvciBib3RoIGNvbGxhdGUgYW5kIGN0eXBlLgpAQCAtMTYxMyw3ICsxNzUzLDggQEAgaW5p dF9kZWZhdWx0X2xvY2FsZShjaGFyIHByb3ZpZGVyLCBjb25zdCBjaGFyICpjb2xsYXRlLCBjb25z dCBjaGFyICpjdHlwZSwKIAkgKiBsb2NhbGVzIGN1cnJlbnRseSBkb24ndCBzdXBwb3J0IHBhdHRl cm4gbWF0Y2hpbmcsIHdoaWNoIHdvdWxkIGJyZWFrIGEKIAkgKiBsb3Qgb2YgdGhpbmdzIGlmIGFw cGxpZWQgZ2xvYmFsbHkuCiAJICovCi0JZGVmYXVsdF9sb2NhbGUgPSBwZ19uZXdsb2NhbGUocHJv dmlkZXIsIHRydWUsIGNvbGxhdGUsIGN0eXBlLCB2ZXJzaW9uKTsKKwlkZWZhdWx0X2xvY2FsZSA9 IHBnX25ld2xvY2FsZShERUZBVUxUX0NPTExBVElPTl9PSUQsIHByb3ZpZGVyLCB0cnVlLAorCQkJ CQkJCQkgIGNvbGxhdGUsIGN0eXBlLCB2ZXJzaW9uKTsKIH0KIAogLyoKQEAgLTE2OTksNyArMTg0 MCw3IEBAIHBnX25ld2xvY2FsZV9mcm9tX2NvbGxhdGlvbihPaWQgY29sbGlkKQogCQkJLyogc2hv dWxkbid0IGhhcHBlbiAqLwogCQkJZWxvZyhFUlJPUiwgInVuc3VwcG9ydGVkIGNvbGxwcm92aWRl cjogJWMiLCBjb2xsZm9ybS0+Y29sbHByb3ZpZGVyKTsKIAotCQlsb2NhbGUgPSBwZ19uZXdsb2Nh bGUoY29sbGZvcm0tPmNvbGxwcm92aWRlciwKKwkJbG9jYWxlID0gcGdfbmV3bG9jYWxlKGNvbGxp ZCwgY29sbGZvcm0tPmNvbGxwcm92aWRlciwKIAkJCQkJCQkgIGNvbGxmb3JtLT5jb2xsaXNkZXRl cm1pbmlzdGljLAogCQkJCQkJCSAgY29sbGF0ZSwgY3R5cGUsIGNvbGx2ZXJzaW9uc3RyKTsKIApA QCAtMTc1OSwxNyArMTkwMCwxOSBAQCBnZXRfY29sbGF0aW9uX2FjdHVhbF92ZXJzaW9uKGNoYXIg Y29sbHByb3ZpZGVyLCBjb25zdCBjaGFyICpjb2xsY29sbGF0ZSkKIAkJVUVycm9yQ29kZQlzdGF0 dXM7CiAJCVVWZXJzaW9uSW5mbyB2ZXJzaW9uaW5mbzsKIAkJY2hhcgkJYnVmW1VfTUFYX1ZFUlNJ T05fU1RSSU5HX0xFTkdUSF07CisJCXBnX2ljdV9saWJyYXJ5CSppY3VsaWIgPSBnZXRfaWN1X2xp YnJhcnkoSW52YWxpZE9pZCwgY29sbGNvbGxhdGUsCisJCQkJCQkJCQkJCQkgIE5VTEwpOwogCiAJ CXN0YXR1cyA9IFVfWkVST19FUlJPUjsKLQkJY29sbGF0b3IgPSB1Y29sX29wZW4oY29sbGNvbGxh dGUsICZzdGF0dXMpOworCQljb2xsYXRvciA9IGljdWxpYi0+b3BlbkNvbGxhdG9yKGNvbGxjb2xs YXRlLCAmc3RhdHVzKTsKIAkJaWYgKFVfRkFJTFVSRShzdGF0dXMpKQogCQkJZXJlcG9ydChFUlJP UiwKIAkJCQkJKGVycm1zZygiY291bGQgbm90IG9wZW4gY29sbGF0b3IgZm9yIGxvY2FsZSBcIiVz XCI6ICVzIiwKLQkJCQkJCQljb2xsY29sbGF0ZSwgdV9lcnJvck5hbWUoc3RhdHVzKSkpKTsKLQkJ dWNvbF9nZXRWZXJzaW9uKGNvbGxhdG9yLCB2ZXJzaW9uaW5mbyk7Ci0JCXVjb2xfY2xvc2UoY29s bGF0b3IpOworCQkJCQkJCWNvbGxjb2xsYXRlLCBpY3VsaWItPmVycm9yTmFtZShzdGF0dXMpKSkp OworCQlpY3VsaWItPmdldENvbGxhdG9yVmVyc2lvbihjb2xsYXRvciwgdmVyc2lvbmluZm8pOwor CQlpY3VsaWItPmNsb3NlQ29sbGF0b3IoY29sbGF0b3IpOwogCi0JCXVfdmVyc2lvblRvU3RyaW5n KHZlcnNpb25pbmZvLCBidWYpOworCQlpY3VsaWItPnZlcnNpb25Ub1N0cmluZyh2ZXJzaW9uaW5m bywgYnVmKTsKIAkJY29sbHZlcnNpb24gPSBwc3RyZHVwKGJ1Zik7CiAJfQogCWVsc2UKQEAgLTIw MjEsMTYgKzIxNjQsMTcgQEAgcGdfc3RybmNvbGxfaWN1X25vX3V0ZjgoY29uc3QgY2hhciAqYXJn MSwgc2l6ZV90IGxlbjEsCiAJVUNoYXIJKnVjaGFyMSwKIAkJCSp1Y2hhcjI7CiAJaW50CQkgcmVz dWx0OworCXBnX2ljdV9saWJyYXJ5ICppY3VsaWIgPSBQR19JQ1VfTElCKGxvY2FsZSk7CiAKIAlB c3NlcnQobG9jYWxlLT5wcm92aWRlciA9PSBDT0xMUFJPVklERVJfSUNVKTsKICNpZmRlZiBIQVZF X1VDT0xfU1RSQ09MTFVURjgKIAlBc3NlcnQoR2V0RGF0YWJhc2VFbmNvZGluZygpICE9IFBHX1VU RjgpOwogI2VuZGlmCiAKLQlpbml0X2ljdV9jb252ZXJ0ZXIoKTsKKwlpbml0X2ljdV9jb252ZXJ0 ZXIoaWN1bGliKTsKIAotCXVsZW4xID0gdWNoYXJfbGVuZ3RoKGljdV9jb252ZXJ0ZXIsIGFyZzEs IGxlbjEpOwotCXVsZW4yID0gdWNoYXJfbGVuZ3RoKGljdV9jb252ZXJ0ZXIsIGFyZzIsIGxlbjIp OworCXVsZW4xID0gdWNoYXJfbGVuZ3RoKGljdWxpYiwgaWN1X2NvbnZlcnRlciwgYXJnMSwgbGVu MSk7CisJdWxlbjIgPSB1Y2hhcl9sZW5ndGgoaWN1bGliLCBpY3VfY29udmVydGVyLCBhcmcyLCBs ZW4yKTsKIAogCWJ1ZnNpemUxID0gKHVsZW4xICsgMSkgKiBzaXplb2YoVUNoYXIpOwogCWJ1ZnNp emUyID0gKHVsZW4yICsgMSkgKiBzaXplb2YoVUNoYXIpOwpAQCAtMjA0MSwxMiArMjE4NSwxMiBA QCBwZ19zdHJuY29sbF9pY3Vfbm9fdXRmOChjb25zdCBjaGFyICphcmcxLCBzaXplX3QgbGVuMSwK IAl1Y2hhcjEgPSAoVUNoYXIgKikgYnVmOwogCXVjaGFyMiA9IChVQ2hhciAqKSAoYnVmICsgYnVm c2l6ZTEpOwogCi0JdWxlbjEgPSB1Y2hhcl9jb252ZXJ0KGljdV9jb252ZXJ0ZXIsIHVjaGFyMSwg dWxlbjEgKyAxLCBhcmcxLCBsZW4xKTsKLQl1bGVuMiA9IHVjaGFyX2NvbnZlcnQoaWN1X2NvbnZl cnRlciwgdWNoYXIyLCB1bGVuMiArIDEsIGFyZzIsIGxlbjIpOworCXVsZW4xID0gdWNoYXJfY29u dmVydChpY3VsaWIsIGljdV9jb252ZXJ0ZXIsIHVjaGFyMSwgdWxlbjEgKyAxLCBhcmcxLCBsZW4x KTsKKwl1bGVuMiA9IHVjaGFyX2NvbnZlcnQoaWN1bGliLCBpY3VfY29udmVydGVyLCB1Y2hhcjIs IHVsZW4yICsgMSwgYXJnMiwgbGVuMik7CiAKLQlyZXN1bHQgPSB1Y29sX3N0cmNvbGwobG9jYWxl LT5pbmZvLmljdS51Y29sLAotCQkJCQkJICB1Y2hhcjEsIHVsZW4xLAotCQkJCQkJICB1Y2hhcjIs IHVsZW4yKTsKKwlyZXN1bHQgPSBpY3VsaWItPnN0cmNvbGwobG9jYWxlLT5pbmZvLmljdS51Y29s LAorCQkJCQkJCSB1Y2hhcjEsIHVsZW4xLAorCQkJCQkJCSB1Y2hhcjIsIHVsZW4yKTsKIAogCWlm IChidWYgIT0gc2J1ZikKIAkJcGZyZWUoYnVmKTsKQEAgLTIwNjcsNiArMjIxMSw3IEBAIHBnX3N0 cm5jb2xsX2ljdShjb25zdCBjaGFyICphcmcxLCBzaXplX3QgbGVuMSwgY29uc3QgY2hhciAqYXJn Miwgc2l6ZV90IGxlbjIsCiAJCQkJcGdfbG9jYWxlX3QgbG9jYWxlKQogewogCWludCByZXN1bHQ7 CisJcGdfaWN1X2xpYnJhcnkgKmljdWxpYiA9IFBHX0lDVV9MSUIobG9jYWxlKTsKIAogCUFzc2Vy dChsb2NhbGUtPnByb3ZpZGVyID09IENPTExQUk9WSURFUl9JQ1UpOwogCkBAIC0yMDc2LDEzICsy MjIxLDE0IEBAIHBnX3N0cm5jb2xsX2ljdShjb25zdCBjaGFyICphcmcxLCBzaXplX3QgbGVuMSwg Y29uc3QgY2hhciAqYXJnMiwgc2l6ZV90IGxlbjIsCiAJCVVFcnJvckNvZGUJc3RhdHVzOwogCiAJ CXN0YXR1cyA9IFVfWkVST19FUlJPUjsKLQkJcmVzdWx0ID0gdWNvbF9zdHJjb2xsVVRGOChsb2Nh bGUtPmluZm8uaWN1LnVjb2wsCi0JCQkJCQkJCSAgYXJnMSwgbGVuMSwKLQkJCQkJCQkJICBhcmcy LCBsZW4yLAotCQkJCQkJCQkgICZzdGF0dXMpOworCQlyZXN1bHQgPSBpY3VsaWItPnN0cmNvbGxV VEY4KGxvY2FsZS0+aW5mby5pY3UudWNvbCwKKwkJCQkJCQkJCSBhcmcxLCBsZW4xLAorCQkJCQkJ CQkJIGFyZzIsIGxlbjIsCisJCQkJCQkJCQkgJnN0YXR1cyk7CiAJCWlmIChVX0ZBSUxVUkUoc3Rh dHVzKSkKIAkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCShlcnJtc2coImNvbGxhdGlvbiBmYWlsZWQ6 ICVzIiwgdV9lcnJvck5hbWUoc3RhdHVzKSkpKTsKKwkJCQkJKGVycm1zZygiY29sbGF0aW9uIGZh aWxlZDogJXMiLAorCQkJCQkJCWljdWxpYi0+ZXJyb3JOYW1lKHN0YXR1cykpKSk7CiAJfQogCWVs c2UKICNlbmRpZgpAQCAtMjI0MiwxMiArMjM4OCwxMyBAQCBwZ19zdHJueGZybV9pY3UoY2hhciAq ZGVzdCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3Qgc3JjbGVuLCBzaXplX3QgZGVzdHNpemUsCiAJ aW50MzJfdAkgdWxlbjsKIAlzaXplX3QgICB1Y2hhcl9ic2l6ZTsKIAlTaXplCSByZXN1bHRfYnNp emU7CisJcGdfaWN1X2xpYnJhcnkgKmljdWxpYiA9IFBHX0lDVV9MSUIobG9jYWxlKTsKIAogCUFz c2VydChsb2NhbGUtPnByb3ZpZGVyID09IENPTExQUk9WSURFUl9JQ1UpOwogCi0JaW5pdF9pY3Vf Y29udmVydGVyKCk7CisJaW5pdF9pY3VfY29udmVydGVyKGljdWxpYik7CiAKLQl1bGVuID0gdWNo YXJfbGVuZ3RoKGljdV9jb252ZXJ0ZXIsIHNyYywgc3JjbGVuKTsKKwl1bGVuID0gdWNoYXJfbGVu Z3RoKGljdWxpYiwgaWN1X2NvbnZlcnRlciwgc3JjLCBzcmNsZW4pOwogCiAJdWNoYXJfYnNpemUg PSAodWxlbiArIDEpICogc2l6ZW9mKFVDaGFyKTsKIApAQCAtMjI1NiwxMSArMjQwMywxMSBAQCBw Z19zdHJueGZybV9pY3UoY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3Qgc3JjbGVu LCBzaXplX3QgZGVzdHNpemUsCiAKIAl1Y2hhciA9IChVQ2hhciAqKSBidWY7CiAKLQl1bGVuID0g dWNoYXJfY29udmVydChpY3VfY29udmVydGVyLCB1Y2hhciwgdWxlbiArIDEsIHNyYywgc3JjbGVu KTsKKwl1bGVuID0gdWNoYXJfY29udmVydChpY3VsaWIsIGljdV9jb252ZXJ0ZXIsIHVjaGFyLCB1 bGVuICsgMSwgc3JjLCBzcmNsZW4pOwogCi0JcmVzdWx0X2JzaXplID0gdWNvbF9nZXRTb3J0S2V5 KGxvY2FsZS0+aW5mby5pY3UudWNvbCwKLQkJCQkJCQkJICAgdWNoYXIsIHVsZW4sCi0JCQkJCQkJ CSAgICh1aW50OF90ICopIGRlc3QsIGRlc3RzaXplKTsKKwlyZXN1bHRfYnNpemUgPSBpY3VsaWIt PmdldFNvcnRLZXkobG9jYWxlLT5pbmZvLmljdS51Y29sLAorCQkJCQkJCQkJICB1Y2hhciwgdWxl biwKKwkJCQkJCQkJCSAgKHVpbnQ4X3QgKikgZGVzdCwgZGVzdHNpemUpOwogCiAJaWYgKGJ1ZiAh PSBzYnVmKQogCQlwZnJlZShidWYpOwpAQCAtMjI4OSwxMyArMjQzNiwxNCBAQCBwZ19zdHJueGZy bV9wcmVmaXhfaWN1X25vX3V0ZjgoY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3Qg c3JjbGVuLAogCVVDaGFyCQkJKnVjaGFyID0gTlVMTDsKIAlzaXplX3QJCQkgdWNoYXJfYnNpemU7 CiAJU2l6ZQkJCSByZXN1bHRfYnNpemU7CisJcGdfaWN1X2xpYnJhcnkJKmljdWxpYiA9IFBHX0lD VV9MSUIobG9jYWxlKTsKIAogCUFzc2VydChsb2NhbGUtPnByb3ZpZGVyID09IENPTExQUk9WSURF Ul9JQ1UpOwogCUFzc2VydChHZXREYXRhYmFzZUVuY29kaW5nKCkgIT0gUEdfVVRGOCk7CiAKLQlp bml0X2ljdV9jb252ZXJ0ZXIoKTsKKwlpbml0X2ljdV9jb252ZXJ0ZXIoaWN1bGliKTsKIAotCXVs ZW4gPSB1Y2hhcl9sZW5ndGgoaWN1X2NvbnZlcnRlciwgc3JjLCBzcmNsZW4pOworCXVsZW4gPSB1 Y2hhcl9sZW5ndGgoaWN1bGliLCBpY3VfY29udmVydGVyLCBzcmMsIHNyY2xlbik7CiAKIAl1Y2hh cl9ic2l6ZSA9ICh1bGVuICsgMSkgKiBzaXplb2YoVUNoYXIpOwogCkBAIC0yMzA0LDIxICsyNDUy LDE5IEBAIHBnX3N0cm54ZnJtX3ByZWZpeF9pY3Vfbm9fdXRmOChjaGFyICpkZXN0LCBjb25zdCBj aGFyICpzcmMsIHNpemVfdCBzcmNsZW4sCiAKIAl1Y2hhciA9IChVQ2hhciAqKSBidWY7CiAKLQl1 bGVuID0gdWNoYXJfY29udmVydChpY3VfY29udmVydGVyLCB1Y2hhciwgdWxlbiArIDEsIHNyYywg c3JjbGVuKTsKKwl1bGVuID0gdWNoYXJfY29udmVydChpY3VsaWIsIGljdV9jb252ZXJ0ZXIsIHVj aGFyLCB1bGVuICsgMSwgc3JjLCBzcmNsZW4pOwogCiAJdWl0ZXJfc2V0U3RyaW5nKCZpdGVyLCB1 Y2hhciwgdWxlbik7CiAJc3RhdGVbMF0gPSBzdGF0ZVsxXSA9IDA7CS8qIHdvbid0IG5lZWQgdGhh dCBhZ2FpbiAqLwogCXN0YXR1cyA9IFVfWkVST19FUlJPUjsKLQlyZXN1bHRfYnNpemUgPSB1Y29s X25leHRTb3J0S2V5UGFydChsb2NhbGUtPmluZm8uaWN1LnVjb2wsCi0JCQkJCQkJCQkJJml0ZXIs Ci0JCQkJCQkJCQkJc3RhdGUsCi0JCQkJCQkJCQkJKHVpbnQ4X3QgKikgZGVzdCwKLQkJCQkJCQkJ CQlkZXN0c2l6ZSwKLQkJCQkJCQkJCQkmc3RhdHVzKTsKKwlyZXN1bHRfYnNpemUgPSBpY3VsaWIt Pm5leHRTb3J0S2V5UGFydCgKKwkJbG9jYWxlLT5pbmZvLmljdS51Y29sLCAmaXRlciwgc3RhdGUs CisJCSh1aW50OF90ICopIGRlc3QsIGRlc3RzaXplLCAmc3RhdHVzKTsKKwogCWlmIChVX0ZBSUxV UkUoc3RhdHVzKSkKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJybXNnKCJzb3J0IGtleSBnZW5l cmF0aW9uIGZhaWxlZDogJXMiLAotCQkJCQkJdV9lcnJvck5hbWUoc3RhdHVzKSkpKTsKKwkJCQkJ CWljdWxpYi0+ZXJyb3JOYW1lKHN0YXR1cykpKSk7CiAKIAlyZXR1cm4gcmVzdWx0X2JzaXplOwog fQpAQCAtMjMyNyw2ICsyNDczLDcgQEAgc3RhdGljIHNpemVfdAogcGdfc3Rybnhmcm1fcHJlZml4 X2ljdShjaGFyICpkZXN0LCBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBzcmNsZW4sCiAJCQkJCSAg IHNpemVfdCBkZXN0c2l6ZSwgcGdfbG9jYWxlX3QgbG9jYWxlKQogeworCXBnX2ljdV9saWJyYXJ5 ICppY3VsaWIgPSBQR19JQ1VfTElCKGxvY2FsZSk7CiAJc2l6ZV90IHJlc3VsdDsKIAogCUFzc2Vy dChsb2NhbGUtPnByb3ZpZGVyID09IENPTExQUk9WSURFUl9JQ1UpOwpAQCAtMjMzNywxOSArMjQ4 NCwxNyBAQCBwZ19zdHJueGZybV9wcmVmaXhfaWN1KGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNy Yywgc2l6ZV90IHNyY2xlbiwKIAkJdWludDMyX3QJc3RhdGVbMl07CiAJCVVFcnJvckNvZGUJc3Rh dHVzOwogCi0JCXVpdGVyX3NldFVURjgoJml0ZXIsIHNyYywgc3JjbGVuKTsKKwkJaWN1bGliLT5z ZXRVVEY4KCZpdGVyLCBzcmMsIHNyY2xlbik7CiAJCXN0YXRlWzBdID0gc3RhdGVbMV0gPSAwOwkv KiB3b24ndCBuZWVkIHRoYXQgYWdhaW4gKi8KIAkJc3RhdHVzID0gVV9aRVJPX0VSUk9SOwotCQly ZXN1bHQgPSB1Y29sX25leHRTb3J0S2V5UGFydChsb2NhbGUtPmluZm8uaWN1LnVjb2wsCi0JCQkJ CQkJCQkgICZpdGVyLAotCQkJCQkJCQkJICBzdGF0ZSwKLQkJCQkJCQkJCSAgKHVpbnQ4X3QgKikg ZGVzdCwKLQkJCQkJCQkJCSAgZGVzdHNpemUsCi0JCQkJCQkJCQkgICZzdGF0dXMpOworCQlyZXN1 bHQgPSBpY3VsaWItPm5leHRTb3J0S2V5UGFydCgKKwkJCWxvY2FsZS0+aW5mby5pY3UudWNvbCwg Jml0ZXIsIHN0YXRlLAorCQkJKHVpbnQ4X3QgKikgZGVzdCwgZGVzdHNpemUsICZzdGF0dXMpOwor CiAJCWlmIChVX0ZBSUxVUkUoc3RhdHVzKSkKIAkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCShlcnJt c2coInNvcnQga2V5IGdlbmVyYXRpb24gZmFpbGVkOiAlcyIsCi0JCQkJCQkJdV9lcnJvck5hbWUo c3RhdHVzKSkpKTsKKwkJCQkJCQlpY3VsaWItPmVycm9yTmFtZShzdGF0dXMpKSkpOwogCX0KIAll bHNlCiAJCXJlc3VsdCA9IHBnX3N0cm54ZnJtX3ByZWZpeF9pY3Vfbm9fdXRmOChkZXN0LCBzcmMs IHNyY2xlbiwgZGVzdHNpemUsCkBAIC0yNTQ2LDcgKzI2OTEsNyBAQCBwZ19zdHJueGZybV9wcmVm aXgoY2hhciAqZGVzdCwgc2l6ZV90IGRlc3RzaXplLCBjb25zdCBjaGFyICpzcmMsCiAKICNpZmRl ZiBVU0VfSUNVCiBzdGF0aWMgdm9pZAotaW5pdF9pY3VfY29udmVydGVyKHZvaWQpCitpbml0X2lj dV9jb252ZXJ0ZXIocGdfaWN1X2xpYnJhcnkgKmljdWxpYikKIHsKIAljb25zdCBjaGFyICppY3Vf ZW5jb2RpbmdfbmFtZTsKIAlVRXJyb3JDb2RlCXN0YXR1czsKQEAgLTI1NjMsMTEgKzI3MDgsMTEg QEAgaW5pdF9pY3VfY29udmVydGVyKHZvaWQpCiAJCQkJCQlwZ19lbmNvZGluZ190b19jaGFyKEdl dERhdGFiYXNlRW5jb2RpbmcoKSkpKSk7CiAKIAlzdGF0dXMgPSBVX1pFUk9fRVJST1I7Ci0JY29u diA9IHVjbnZfb3BlbihpY3VfZW5jb2RpbmdfbmFtZSwgJnN0YXR1cyk7CisJY29udiA9IGljdWxp Yi0+b3BlbkNvbnZlcnRlcihpY3VfZW5jb2RpbmdfbmFtZSwgJnN0YXR1cyk7CiAJaWYgKFVfRkFJ TFVSRShzdGF0dXMpKQogCQllcmVwb3J0KEVSUk9SLAogCQkJCShlcnJtc2coImNvdWxkIG5vdCBv cGVuIElDVSBjb252ZXJ0ZXIgZm9yIGVuY29kaW5nIFwiJXNcIjogJXMiLAotCQkJCQkJaWN1X2Vu Y29kaW5nX25hbWUsIHVfZXJyb3JOYW1lKHN0YXR1cykpKSk7CisJCQkJCQlpY3VfZW5jb2Rpbmdf bmFtZSwgaWN1bGliLT5lcnJvck5hbWUoc3RhdHVzKSkpKTsKIAogCWljdV9jb252ZXJ0ZXIgPSBj b252OwogfQpAQCAtMjU3NiwxNCArMjcyMSwxNSBAQCBpbml0X2ljdV9jb252ZXJ0ZXIodm9pZCkK ICAqIEZpbmQgbGVuZ3RoLCBpbiBVQ2hhcnMsIG9mIGdpdmVuIHN0cmluZyBpZiBjb252ZXJ0ZWQg dG8gVUNoYXIgc3RyaW5nLgogICovCiBzdGF0aWMgc2l6ZV90Ci11Y2hhcl9sZW5ndGgoVUNvbnZl cnRlciAqY29udmVydGVyLCBjb25zdCBjaGFyICpzdHIsIHNpemVfdCBsZW4pCit1Y2hhcl9sZW5n dGgocGdfaWN1X2xpYnJhcnkgKmljdWxpYiwgVUNvbnZlcnRlciAqY29udmVydGVyLCBjb25zdCBj aGFyICpzdHIsIHNpemVfdCBsZW4pCiB7CiAJVUVycm9yQ29kZQlzdGF0dXMgPSBVX1pFUk9fRVJS T1I7CiAJaW50MzJfdAkJdWxlbjsKLQl1bGVuID0gdWNudl90b1VDaGFycyhjb252ZXJ0ZXIsIE5V TEwsIDAsIHN0ciwgbGVuLCAmc3RhdHVzKTsKKwl1bGVuID0gaWN1bGliLT50b1VDaGFycyhjb252 ZXJ0ZXIsIE5VTEwsIDAsIHN0ciwgbGVuLCAmc3RhdHVzKTsKIAlpZiAoVV9GQUlMVVJFKHN0YXR1 cykgJiYgc3RhdHVzICE9IFVfQlVGRkVSX09WRVJGTE9XX0VSUk9SKQogCQllcmVwb3J0KEVSUk9S LAotCQkJCShlcnJtc2coIiVzIGZhaWxlZDogJXMiLCAidWNudl90b1VDaGFycyIsIHVfZXJyb3JO YW1lKHN0YXR1cykpKSk7CisJCQkJKGVycm1zZygiJXMgZmFpbGVkOiAlcyIsICJ1Y252X3RvVUNo YXJzIiwKKwkJCQkJCWljdWxpYi0+ZXJyb3JOYW1lKHN0YXR1cykpKSk7CiAJcmV0dXJuIHVsZW47 CiB9CiAKQEAgLTI1OTIsMTYgKzI3MzgsMTcgQEAgdWNoYXJfbGVuZ3RoKFVDb252ZXJ0ZXIgKmNv bnZlcnRlciwgY29uc3QgY2hhciAqc3RyLCBzaXplX3QgbGVuKQogICogcmV0dXJuIHRoZSBsZW5n dGggKGluIFVDaGFycykuCiAgKi8KIHN0YXRpYyBpbnQzMl90Ci11Y2hhcl9jb252ZXJ0KFVDb252 ZXJ0ZXIgKmNvbnZlcnRlciwgVUNoYXIgKmRlc3QsIGludDMyX3QgZGVzdGxlbiwKLQkJCSAgY29u c3QgY2hhciAqc3JjLCBzaXplX3Qgc3JjbGVuKQordWNoYXJfY29udmVydChwZ19pY3VfbGlicmFy eSAqaWN1bGliLCBVQ29udmVydGVyICpjb252ZXJ0ZXIsIFVDaGFyICpkZXN0LAorCQkJICBpbnQz Ml90IGRlc3RsZW4sIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IHNyY2xlbikKIHsKIAlVRXJyb3JD b2RlCXN0YXR1cyA9IFVfWkVST19FUlJPUjsKIAlpbnQzMl90CQl1bGVuOwogCXN0YXR1cyA9IFVf WkVST19FUlJPUjsKLQl1bGVuID0gdWNudl90b1VDaGFycyhjb252ZXJ0ZXIsIGRlc3QsIGRlc3Rs ZW4sIHNyYywgc3JjbGVuLCAmc3RhdHVzKTsKKwl1bGVuID0gaWN1bGliLT50b1VDaGFycyhjb252 ZXJ0ZXIsIGRlc3QsIGRlc3RsZW4sIHNyYywgc3JjbGVuLCAmc3RhdHVzKTsKIAlpZiAoVV9GQUlM VVJFKHN0YXR1cykpCiAJCWVyZXBvcnQoRVJST1IsCi0JCQkJKGVycm1zZygiJXMgZmFpbGVkOiAl cyIsICJ1Y252X3RvVUNoYXJzIiwgdV9lcnJvck5hbWUoc3RhdHVzKSkpKTsKKwkJCQkoZXJybXNn KCIlcyBmYWlsZWQ6ICVzIiwgInVjbnZfdG9VQ2hhcnMiLAorCQkJCQkJaWN1bGliLT5lcnJvck5h bWUoc3RhdHVzKSkpKTsKIAlyZXR1cm4gdWxlbjsKIH0KIApAQCAtMjYxOCwxNiArMjc2NSwxNyBA QCB1Y2hhcl9jb252ZXJ0KFVDb252ZXJ0ZXIgKmNvbnZlcnRlciwgVUNoYXIgKmRlc3QsIGludDMy X3QgZGVzdGxlbiwKICAqIHJlc3VsdCBsZW5ndGggaW5zdGVhZC4KICAqLwogaW50MzJfdAotaWN1 X3RvX3VjaGFyKFVDaGFyICoqYnVmZl91Y2hhciwgY29uc3QgY2hhciAqYnVmZiwgc2l6ZV90IG5i eXRlcykKK2ljdV90b191Y2hhcihwZ19pY3VfbGlicmFyeSAqaWN1bGliLCBVQ2hhciAqKmJ1ZmZf dWNoYXIsIGNvbnN0IGNoYXIgKmJ1ZmYsCisJCQkgc2l6ZV90IG5ieXRlcykKIHsKIAlpbnQzMl90 IGxlbl91Y2hhcjsKIAotCWluaXRfaWN1X2NvbnZlcnRlcigpOworCWluaXRfaWN1X2NvbnZlcnRl cihpY3VsaWIpOwogCi0JbGVuX3VjaGFyID0gdWNoYXJfbGVuZ3RoKGljdV9jb252ZXJ0ZXIsIGJ1 ZmYsIG5ieXRlcyk7CisJbGVuX3VjaGFyID0gdWNoYXJfbGVuZ3RoKGljdWxpYiwgaWN1X2NvbnZl cnRlciwgYnVmZiwgbmJ5dGVzKTsKIAogCSpidWZmX3VjaGFyID0gcGFsbG9jKChsZW5fdWNoYXIg KyAxKSAqIHNpemVvZigqKmJ1ZmZfdWNoYXIpKTsKLQlsZW5fdWNoYXIgPSB1Y2hhcl9jb252ZXJ0 KGljdV9jb252ZXJ0ZXIsCisJbGVuX3VjaGFyID0gdWNoYXJfY29udmVydChpY3VsaWIsIGljdV9j b252ZXJ0ZXIsCiAJCQkJCQkJICAqYnVmZl91Y2hhciwgbGVuX3VjaGFyICsgMSwgYnVmZiwgbmJ5 dGVzKTsKIAogCXJldHVybiBsZW5fdWNoYXI7CkBAIC0yNjQ1LDMwICsyNzkzLDMyIEBAIGljdV90 b191Y2hhcihVQ2hhciAqKmJ1ZmZfdWNoYXIsIGNvbnN0IGNoYXIgKmJ1ZmYsIHNpemVfdCBuYnl0 ZXMpCiAgKiBUaGUgcmVzdWx0IHN0cmluZyBpcyBudWwtdGVybWluYXRlZC4KICAqLwogaW50MzJf dAotaWN1X2Zyb21fdWNoYXIoY2hhciAqKnJlc3VsdCwgY29uc3QgVUNoYXIgKmJ1ZmZfdWNoYXIs IGludDMyX3QgbGVuX3VjaGFyKQoraWN1X2Zyb21fdWNoYXIocGdfaWN1X2xpYnJhcnkgKmljdWxp YiwgY2hhciAqKnJlc3VsdCwgY29uc3QgVUNoYXIgKmJ1ZmZfdWNoYXIsCisJCQkgICBpbnQzMl90 IGxlbl91Y2hhcikKIHsKIAlVRXJyb3JDb2RlCXN0YXR1czsKIAlpbnQzMl90CQlsZW5fcmVzdWx0 OwogCi0JaW5pdF9pY3VfY29udmVydGVyKCk7CisJaW5pdF9pY3VfY29udmVydGVyKGljdWxpYik7 CiAKIAlzdGF0dXMgPSBVX1pFUk9fRVJST1I7Ci0JbGVuX3Jlc3VsdCA9IHVjbnZfZnJvbVVDaGFy cyhpY3VfY29udmVydGVyLCBOVUxMLCAwLAotCQkJCQkJCQkgYnVmZl91Y2hhciwgbGVuX3VjaGFy LCAmc3RhdHVzKTsKKwlsZW5fcmVzdWx0ID0gaWN1bGliLT5mcm9tVUNoYXJzKGljdV9jb252ZXJ0 ZXIsIE5VTEwsIDAsCisJCQkJCQkJCQlidWZmX3VjaGFyLCBsZW5fdWNoYXIsICZzdGF0dXMpOwog CWlmIChVX0ZBSUxVUkUoc3RhdHVzKSAmJiBzdGF0dXMgIT0gVV9CVUZGRVJfT1ZFUkZMT1dfRVJS T1IpCiAJCWVyZXBvcnQoRVJST1IsCiAJCQkJKGVycm1zZygiJXMgZmFpbGVkOiAlcyIsICJ1Y252 X2Zyb21VQ2hhcnMiLAotCQkJCQkJdV9lcnJvck5hbWUoc3RhdHVzKSkpKTsKKwkJCQkJCWljdWxp Yi0+ZXJyb3JOYW1lKHN0YXR1cykpKSk7CiAKIAkqcmVzdWx0ID0gcGFsbG9jKGxlbl9yZXN1bHQg KyAxKTsKIAogCXN0YXR1cyA9IFVfWkVST19FUlJPUjsKLQlsZW5fcmVzdWx0ID0gdWNudl9mcm9t VUNoYXJzKGljdV9jb252ZXJ0ZXIsICpyZXN1bHQsIGxlbl9yZXN1bHQgKyAxLAotCQkJCQkJCQkg YnVmZl91Y2hhciwgbGVuX3VjaGFyLCAmc3RhdHVzKTsKKwlsZW5fcmVzdWx0ID0gaWN1bGliLT5m cm9tVUNoYXJzKGljdV9jb252ZXJ0ZXIsICpyZXN1bHQsCisJCQkJCQkJCQlsZW5fcmVzdWx0ICsg MSwgYnVmZl91Y2hhciwKKwkJCQkJCQkJCWxlbl91Y2hhciwgJnN0YXR1cyk7CiAJaWYgKFVfRkFJ TFVSRShzdGF0dXMpKQogCQllcmVwb3J0KEVSUk9SLAogCQkJCShlcnJtc2coIiVzIGZhaWxlZDog JXMiLCAidWNudl9mcm9tVUNoYXJzIiwKLQkJCQkJCXVfZXJyb3JOYW1lKHN0YXR1cykpKSk7CisJ CQkJCQlpY3VsaWItPmVycm9yTmFtZShzdGF0dXMpKSkpOwogCiAJcmV0dXJuIGxlbl9yZXN1bHQ7 CiB9CkBAIC0yNjg0LDcgKzI4MzQsOCBAQCBpY3VfZnJvbV91Y2hhcihjaGFyICoqcmVzdWx0LCBj b25zdCBVQ2hhciAqYnVmZl91Y2hhciwgaW50MzJfdCBsZW5fdWNoYXIpCiAgKi8KIHBnX2F0dHJp YnV0ZV91bnVzZWQoKQogc3RhdGljIHZvaWQKLWljdV9zZXRfY29sbGF0aW9uX2F0dHJpYnV0ZXMo VUNvbGxhdG9yICpjb2xsYXRvciwgY29uc3QgY2hhciAqbG9jKQoraWN1X3NldF9jb2xsYXRpb25f YXR0cmlidXRlcyhwZ19pY3VfbGlicmFyeSAqaWN1bGliLCBVQ29sbGF0b3IgKmNvbGxhdG9yLAor CQkJCQkJCSBjb25zdCBjaGFyICpsb2MpCiB7CiAJY2hhcgkgICAqc3RyID0gYXNjX3RvbG93ZXIo bG9jLCBzdHJsZW4obG9jKSk7CiAKQEAgLTI3NTgsNyArMjkwOSw3IEBAIGljdV9zZXRfY29sbGF0 aW9uX2F0dHJpYnV0ZXMoVUNvbGxhdG9yICpjb2xsYXRvciwgY29uc3QgY2hhciAqbG9jKQogCQkJ CXN0YXR1cyA9IFVfSUxMRUdBTF9BUkdVTUVOVF9FUlJPUjsKIAogCQkJaWYgKHN0YXR1cyA9PSBV X1pFUk9fRVJST1IpCi0JCQkJdWNvbF9zZXRBdHRyaWJ1dGUoY29sbGF0b3IsIHVhdHRyLCB1dmFs dWUsICZzdGF0dXMpOworCQkJCWljdWxpYi0+c2V0QXR0cmlidXRlKGNvbGxhdG9yLCB1YXR0ciwg dXZhbHVlLCAmc3RhdHVzKTsKIAogCQkJLyoKIAkJCSAqIFByZXRlbmQgdGhlIGVycm9yIGNhbWUg ZnJvbSB1Y29sX29wZW4oKSwgZm9yIGNvbnNpc3RlbnQgZXJyb3IKQEAgLTI3NjcsNyArMjkxOCw3 IEBAIGljdV9zZXRfY29sbGF0aW9uX2F0dHJpYnV0ZXMoVUNvbGxhdG9yICpjb2xsYXRvciwgY29u c3QgY2hhciAqbG9jKQogCQkJaWYgKFVfRkFJTFVSRShzdGF0dXMpKQogCQkJCWVyZXBvcnQoRVJS T1IsCiAJCQkJCQkoZXJybXNnKCJjb3VsZCBub3Qgb3BlbiBjb2xsYXRvciBmb3IgbG9jYWxlIFwi JXNcIjogJXMiLAotCQkJCQkJCQlsb2MsIHVfZXJyb3JOYW1lKHN0YXR1cykpKSk7CisJCQkJCQkJ CWxvYywgaWN1bGliLT5lcnJvck5hbWUoc3RhdHVzKSkpKTsKIAkJfQogCX0KIH0KQEAgLTI3ODMs MTcgKzI5MzQsMTggQEAgY2hlY2tfaWN1X2xvY2FsZShjb25zdCBjaGFyICppY3VfbG9jYWxlKQog I2lmZGVmIFVTRV9JQ1UKIAlVQ29sbGF0b3IJKmNvbGxhdG9yOwogCVVFcnJvckNvZGUgICBzdGF0 dXM7CisJcGdfaWN1X2xpYnJhcnkgKmljdWxpYiA9IGdldF9pY3VfbGlicmFyeShJbnZhbGlkT2lk LCBpY3VfbG9jYWxlLCBOVUxMKTsKIAogCXN0YXR1cyA9IFVfWkVST19FUlJPUjsKLQljb2xsYXRv ciA9IHVjb2xfb3BlbihpY3VfbG9jYWxlLCAmc3RhdHVzKTsKKwljb2xsYXRvciA9IGljdWxpYi0+ b3BlbkNvbGxhdG9yKGljdV9sb2NhbGUsICZzdGF0dXMpOwogCWlmIChVX0ZBSUxVUkUoc3RhdHVz KSkKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJybXNnKCJjb3VsZCBub3Qgb3BlbiBjb2xsYXRv ciBmb3IgbG9jYWxlIFwiJXNcIjogJXMiLAotCQkJCQkJaWN1X2xvY2FsZSwgdV9lcnJvck5hbWUo c3RhdHVzKSkpKTsKKwkJCQkJCWljdV9sb2NhbGUsIGljdWxpYi0+ZXJyb3JOYW1lKHN0YXR1cykp KSk7CiAKIAlpZiAoVV9JQ1VfVkVSU0lPTl9NQUpPUl9OVU0gPCA1NCkKLQkJaWN1X3NldF9jb2xs YXRpb25fYXR0cmlidXRlcyhjb2xsYXRvciwgaWN1X2xvY2FsZSk7Ci0JdWNvbF9jbG9zZShjb2xs YXRvcik7CisJCWljdV9zZXRfY29sbGF0aW9uX2F0dHJpYnV0ZXMoaWN1bGliLCBjb2xsYXRvciwg aWN1X2xvY2FsZSk7CisJaWN1bGliLT5jbG9zZUNvbGxhdG9yKGNvbGxhdG9yKTsKICNlbHNlCiAJ ZXJlcG9ydChFUlJPUiwKIAkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVE KSwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL3BnX2xvY2FsZV9pbnRlcm5hbC5oIGIv c3JjL2luY2x1ZGUvdXRpbHMvcGdfbG9jYWxlX2ludGVybmFsLmgKaW5kZXggMzM0NjVhZDkyZC4u YjYwMDYwNDU4NSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvcGdfbG9jYWxlX2ludGVy bmFsLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvcGdfbG9jYWxlX2ludGVybmFsLmgKQEAgLTE0 LDYgKzE0LDggQEAKICNkZWZpbmUgX1BHX0xPQ0FMRV9JTlRFUk5BTF8KIAogI2lmZGVmIFVTRV9J Q1UKKyNpbmNsdWRlIDx1bmljb2RlL3VicmsuaD4KKyNpbmNsdWRlIDx1bmljb2RlL3VjbnYuaD4K ICNpbmNsdWRlIDx1bmljb2RlL3Vjb2wuaD4KICNlbmRpZgogCkBAIC0zMCw2ICszMiwxMDggQEAK ICNlbmRpZgogI2VuZGlmCiAKKyNpZmRlZiBVU0VfSUNVCisvKgorICogQW4gSUNVIGxpYnJhcnkg dmVyc2lvbiB0aGF0IHdlJ3JlIGVpdGhlciBsaW5rZWQgYWdhaW5zdCBvciBoYXZlIGxvYWRlZCBh dAorICogcnVudGltZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgcGdfaWN1X2xpYnJhcnkKK3sKKwlp bnQJCQltYWpvcl92ZXJzaW9uOworCWludAkJCW1pbm9yX3ZlcnNpb247CisJY2hhcgkgICAqbGli aWN1aTE4bl9uYW1lOworCWNoYXIJICAgKmxpYmljdXVjX25hbWU7CisJdm9pZAkJKCpnZXRJQ1VW ZXJzaW9uKSAoVVZlcnNpb25JbmZvIGluZm8pOworCXZvaWQJCSgqZ2V0VW5pY29kZVZlcnNpb24p IChVVmVyc2lvbkluZm8gaW50byk7CisJdm9pZAkJKCpnZXRDTERSVmVyc2lvbikgKFVWZXJzaW9u SW5mbyBpbmZvLCBVRXJyb3JDb2RlICpzdGF0dXMpOworCVVDb2xsYXRvciAgKigqb3BlbkNvbGxh dG9yKSAoY29uc3QgY2hhciAqbG9jLCBVRXJyb3JDb2RlICpzdGF0dXMpOworCXZvaWQJCSgqY2xv c2VDb2xsYXRvcikgKFVDb2xsYXRvciAqY29sbCk7CisJdm9pZAkJKCpnZXRDb2xsYXRvclZlcnNp b24pIChjb25zdCBVQ29sbGF0b3IgKmNvbGwsIFVWZXJzaW9uSW5mbyBpbmZvKTsKKwl2b2lkCQko KmdldFVDQVZlcnNpb24pIChjb25zdCBVQ29sbGF0b3IgKmNvbGwsIFVWZXJzaW9uSW5mbyBpbmZv KTsKKwl2b2lkCQkoKnZlcnNpb25Ub1N0cmluZykgKGNvbnN0IFVWZXJzaW9uSW5mbyB2ZXJzaW9u QXJyYXksCisJCQkJCQkJCQljaGFyICp2ZXJzaW9uU3RyaW5nKTsKKwlVQ29sbGF0aW9uUmVzdWx0 ICgqc3RyY29sbCkgKGNvbnN0IFVDb2xsYXRvciAqY29sbCwKKwkJCQkJCQkJIGNvbnN0IFVDaGFy ICpzb3VyY2UsCisJCQkJCQkJCSBpbnQzMl90IHNvdXJjZUxlbmd0aCwKKwkJCQkJCQkJIGNvbnN0 IFVDaGFyICp0YXJnZXQsCisJCQkJCQkJCSBpbnQzMl90IHRhcmdldExlbmd0aCk7CisJVUNvbGxh dGlvblJlc3VsdCAoKnN0cmNvbGxVVEY4KSAoY29uc3QgVUNvbGxhdG9yICpjb2xsLAorCQkJCQkJ CQkJIGNvbnN0IGNoYXIgKnNvdXJjZSwKKwkJCQkJCQkJCSBpbnQzMl90IHNvdXJjZUxlbmd0aCwK KwkJCQkJCQkJCSBjb25zdCBjaGFyICp0YXJnZXQsCisJCQkJCQkJCQkgaW50MzJfdCB0YXJnZXRM ZW5ndGgsCisJCQkJCQkJCQkgVUVycm9yQ29kZSAqc3RhdHVzKTsKKwlpbnQzMl90CQkoKmdldFNv cnRLZXkpIChjb25zdCBVQ29sbGF0b3IgKmNvbGwsCisJCQkJCQkJICAgY29uc3QgVUNoYXIgKnNv dXJjZSwKKwkJCQkJCQkgICBpbnQzMl90IHNvdXJjZUxlbmd0aCwKKwkJCQkJCQkgICB1aW50OF90 ICpyZXN1bHQsCisJCQkJCQkJICAgaW50MzJfdCByZXN1bHRMZW5ndGgpOworCWludDMyX3QJCSgq bmV4dFNvcnRLZXlQYXJ0KSAoY29uc3QgVUNvbGxhdG9yICpjb2xsLAorCQkJCQkJCQkJVUNoYXJJ dGVyYXRvciAqaXRlciwKKwkJCQkJCQkJCXVpbnQzMl90IHN0YXRlWzJdLAorCQkJCQkJCQkJdWlu dDhfdCAqZGVzdCwKKwkJCQkJCQkJCWludDMyX3QgY291bnQsCisJCQkJCQkJCQlVRXJyb3JDb2Rl ICpzdGF0dXMpOworCXZvaWQJCSgqc2V0VVRGOCkgKFVDaGFySXRlcmF0b3IgKml0ZXIsCisJCQkJ CQkJY29uc3QgY2hhciAqcywKKwkJCQkJCQlpbnQzMl90IGxlbmd0aCk7CisJY29uc3QgY2hhciAq KCplcnJvck5hbWUpIChVRXJyb3JDb2RlIGNvZGUpOworCWludDMyX3QJCSgqc3RyVG9VcHBlcikg KFVDaGFyICpkZXN0LAorCQkJCQkJCSAgIGludDMyX3QgZGVzdENhcGFjaXR5LAorCQkJCQkJCSAg IGNvbnN0IFVDaGFyICpzcmMsCisJCQkJCQkJICAgaW50MzJfdCBzcmNMZW5ndGgsCisJCQkJCQkJ ICAgY29uc3QgY2hhciAqbG9jYWxlLAorCQkJCQkJCSAgIFVFcnJvckNvZGUgKnBFcnJvckNvZGUp OworCWludDMyX3QJCSgqc3RyVG9Mb3dlcikgKFVDaGFyICpkZXN0LAorCQkJCQkJCSAgIGludDMy X3QgZGVzdENhcGFjaXR5LAorCQkJCQkJCSAgIGNvbnN0IFVDaGFyICpzcmMsCisJCQkJCQkJICAg aW50MzJfdCBzcmNMZW5ndGgsCisJCQkJCQkJICAgY29uc3QgY2hhciAqbG9jYWxlLAorCQkJCQkJ CSAgIFVFcnJvckNvZGUgKnBFcnJvckNvZGUpOworCWludDMyX3QJCSgqc3RyVG9UaXRsZSkgKFVD aGFyICpkZXN0LAorCQkJCQkJCSAgIGludDMyX3QgZGVzdENhcGFjaXR5LAorCQkJCQkJCSAgIGNv bnN0IFVDaGFyICpzcmMsCisJCQkJCQkJICAgaW50MzJfdCBzcmNMZW5ndGgsCisJCQkJCQkJICAg VUJyZWFrSXRlcmF0b3IgKnRpdGxlSXRlciwKKwkJCQkJCQkgICBjb25zdCBjaGFyICpsb2NhbGUs CisJCQkJCQkJICAgVUVycm9yQ29kZSAqcEVycm9yQ29kZSk7CisJdm9pZAkJKCpzZXRBdHRyaWJ1 dGUpIChVQ29sbGF0b3IgKmNvbGwsCisJCQkJCQkJCSBVQ29sQXR0cmlidXRlIGF0dHIsCisJCQkJ CQkJCSBVQ29sQXR0cmlidXRlVmFsdWUgdmFsdWUsCisJCQkJCQkJCSBVRXJyb3JDb2RlICpzdGF0 dXMpOworCVVDb252ZXJ0ZXIgKigqb3BlbkNvbnZlcnRlcikgKGNvbnN0IGNoYXIgKmNvbnZlcnRl ck5hbWUsCisJCQkJCQkJCSAgVUVycm9yQ29kZSAqICAJZXJyKTsKKwl2b2lkCQkoKmNsb3NlQ29u dmVydGVyKSAoVUNvbnZlcnRlciAqY29udmVydGVyKTsKKwlpbnQzMl90CQkoKmZyb21VQ2hhcnMp IChVQ29udmVydGVyICpjbnYsCisJCQkJCQkJICAgY2hhciAqZGVzdCwKKwkJCQkJCQkgICBpbnQz Ml90IGRlc3RDYXBhY2l0eSwKKwkJCQkJCQkgICBjb25zdCBVQ2hhciAqc3JjLAorCQkJCQkJCSAg IGludDMyX3Qgc3JjTGVuZ3RoLAorCQkJCQkJCSAgIFVFcnJvckNvZGUgKnBFcnJvckNvZGUpOwor CWludDMyX3QJCSgqdG9VQ2hhcnMpIChVQ29udmVydGVyICpjbnYsCisJCQkJCQkJIFVDaGFyICpk ZXN0LAorCQkJCQkJCSBpbnQzMl90IGRlc3RDYXBhY2l0eSwKKwkJCQkJCQkgY29uc3QgY2hhciAq c3JjLAorCQkJCQkJCSBpbnQzMl90IHNyY0xlbmd0aCwKKwkJCQkJCQkgVUVycm9yQ29kZSAqcEVy cm9yQ29kZSk7CisJaW50MzJfdAkJKCp0b0xhbmd1YWdlVGFnKSAoY29uc3QgY2hhciAqbG9jYWxl SUQsCisJCQkJCQkJCSAgY2hhciAqbGFuZ3RhZywKKwkJCQkJCQkJICBpbnQzMl90IGxhbmd0YWdD YXBhY2l0eSwKKwkJCQkJCQkJICBVQm9vbCBzdHJpY3QsCisJCQkJCQkJCSAgVUVycm9yQ29kZSAq ZXJyKTsKKwlpbnQzMl90CQkoKmdldERpc3BsYXlOYW1lKSAoY29uc3QgY2hhciAqbG9jYWxlSUQs CisJCQkJCQkJCSAgIGNvbnN0IGNoYXIgKmluTG9jYWxlSUQsCisJCQkJCQkJCSAgIFVDaGFyICpy ZXN1bHQsCisJCQkJCQkJCSAgIGludDMyX3QgbWF4UmVzdWx0U2l6ZSwKKwkJCQkJCQkJICAgVUVy cm9yQ29kZSAqZXJyKTsKKwlpbnQzMl90CQkoKmNvdW50QXZhaWxhYmxlKSAodm9pZCk7CisJY29u c3QgY2hhciAqKCpnZXRBdmFpbGFibGUpIChpbnQzMl90IG4pOworfSBwZ19pY3VfbGlicmFyeTsK KworI2RlZmluZSBQR19JQ1VfTElCKHgpICgoeCktPmluZm8uaWN1LmxpYikKKworI2VuZGlmCisK IC8qCiAgKiBXZSBkZWZpbmUgb3VyIG93biB3cmFwcGVyIGFyb3VuZCBsb2NhbGVfdCBzbyB3ZSBj YW4ga2VlcCB0aGUgc2FtZQogICogZnVuY3Rpb24gc2lnbmF0dXJlcyBmb3IgYWxsIGJ1aWxkcywg d2hpbGUgbm90IGhhdmluZyB0byBjcmVhdGUgYQpAQCAtNTMsNyArMTU3LDggQEAgc3RydWN0IHBn X2xvY2FsZV9zdHJ1Y3QKICNpZmRlZiBVU0VfSUNVCiAJCXN0cnVjdAogCQl7Ci0JCQlVQ29sbGF0 b3IJKnVjb2w7CisJCQlVQ29sbGF0b3IJCSp1Y29sOworCQkJcGdfaWN1X2xpYnJhcnkJKmxpYjsK IAkJfQkJCWljdTsKICNlbmRpZgogCQlpbnQJCQlkdW1teTsJCS8qIGluIGNhc2Ugd2UgaGF2ZSBu ZWl0aGVyIExPQ0FMRV9UIG5vciBJQ1UgKi8KQEAgLTYxLDggKzE2NiwxOSBAQCBzdHJ1Y3QgcGdf bG9jYWxlX3N0cnVjdAogfTsKIAogI2lmZGVmIFVTRV9JQ1UKLWV4dGVybiBpbnQzMl90IGljdV90 b191Y2hhcihVQ2hhciAqKmJ1ZmZfdWNoYXIsIGNvbnN0IGNoYXIgKmJ1ZmYsIHNpemVfdCBuYnl0 ZXMpOwotZXh0ZXJuIGludDMyX3QgaWN1X2Zyb21fdWNoYXIoY2hhciAqKnJlc3VsdCwgY29uc3Qg VUNoYXIgKmJ1ZmZfdWNoYXIsIGludDMyX3QgbGVuX3VjaGFyKTsKLSNlbmRpZgorCit0eXBlZGVm IHBnX2ljdV9saWJyYXJ5ICooKmdldF9pY3VfbGlicmFyeV9ob29rX3R5cGUpKAorCU9pZCBjb2xs aWQsIGNvbnN0IGNoYXIgKmxvY2FsZSwgY29uc3QgY2hhciAqdmVyc2lvbik7CisKK2V4dGVybiBQ R0RMTElNUE9SVCBnZXRfaWN1X2xpYnJhcnlfaG9va190eXBlIGdldF9pY3VfbGlicmFyeV9ob29r OworCitleHRlcm4gcGdfaWN1X2xpYnJhcnkgKmdldF9kZWZhdWx0X2ljdV9saWJyYXJ5KHZvaWQp OworZXh0ZXJuIHBnX2ljdV9saWJyYXJ5ICpnZXRfYnVpbHRpbl9pY3VfbGlicmFyeSh2b2lkKTsK K2V4dGVybiBpbnQzMl90IGljdV90b191Y2hhcihwZ19pY3VfbGlicmFyeSAqbGliLCBVQ2hhciAq KmJ1ZmZfdWNoYXIsCisJCQkJCQkJY29uc3QgY2hhciAqYnVmZiwgc2l6ZV90IG5ieXRlcyk7Citl eHRlcm4gaW50MzJfdCBpY3VfZnJvbV91Y2hhcihwZ19pY3VfbGlicmFyeSAqbGliLCBjaGFyICoq cmVzdWx0LAorCQkJCQkJCSAgY29uc3QgVUNoYXIgKmJ1ZmZfdWNoYXIsIGludDMyX3QgbGVuX3Vj aGFyKTsKKworI2VuZGlmCQkJCQkJCS8qIFVTRV9JQ1UgKi8KIAogI2VuZGlmCQkJCQkJCS8qIF9Q R19MT0NBTEVfSU5URVJOQUxfICovCi0tIAoyLjM0LjEKCg== --=-u4oNhfj6zIVO/ZOtTH+g--