Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.80) (envelope-from ) id 1V00jd-0007QV-0f for pgsql-hackers@arkaria.postgresql.org; Fri, 19 Jul 2013 02:47:58 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.80) (envelope-from ) id 1V00jc-0006kM-8R for pgsql-hackers@arkaria.postgresql.org; Fri, 19 Jul 2013 02:47:56 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtp (Exim 4.80) (envelope-from ) id 1V00jY-0006k6-7Y for pgsql-hackers@postgresql.org; Fri, 19 Jul 2013 02:47:52 +0000 Received: from moutng.kundenserver.de ([212.227.126.186]) by magus.postgresql.org with esmtp (Exim 4.80) (envelope-from ) id 1V00jJ-0002rB-Ru for pgsql-hackers@postgresql.org; Fri, 19 Jul 2013 02:47:51 +0000 Received: from [192.168.1.110] (mail.highperformancepostgresql.com [71.179.240.8]) by mrelayeu.kundenserver.de (node=mrbap2) with ESMTP (Nemesis) id 0MV2eD-1UdEfE47hN-00Y8J0; Fri, 19 Jul 2013 04:47:31 +0200 Message-ID: <51E8A8C1.2050700@2ndQuadrant.com> Date: Thu, 18 Jul 2013 22:47:29 -0400 From: Greg Smith User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20130620 Thunderbird/17.0.7 MIME-Version: 1.0 To: Karol Trzcionka CC: Mike Blackwell , Kohei KaiGai , pgsql-hackers@postgresql.org Subject: Re: [v9.4] row level security References: <51E880CF.3000902@gmail.com> In-Reply-To: <51E880CF.3000902@gmail.com> Content-Type: multipart/mixed; boundary="------------010803000201040801020009" X-Provags-ID: V02:K0:eLV+ZCkc8dQ2rAyZtbkX9J629oOdfkvp6IJgQKA7WRi jqGD4s6Q5BPlbl5T33ofJKIn2ql8bqykLxKppW30bOI0gpw+UR yR71YUTXp8Rnxe8oGs8rZdLk5Gnf2zk0Oz7fqPTW+LrSicix5M An/lUNe0d36/op5JKewnKtn8RkGClykQIocKSU8AKJ3bhDitCD MLTx76UX/5vbASHqZUuKjLfxRZlGrore4Mm2OPw6sg1GuizZLe ZKTe1RAjLMPauH1WNsERb2kpasUlgMoc2bLmue2A8KUFrOaVzt UHamoe1nLeIhBMYJt1WaA2hmn/lscE6oRLhkFmzY+efpJQwp9w drAd9UqZssUhZgz5Z7kg= X-Pg-Spam-Score: -1.9 (-) List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgsql-hackers Precedence: bulk Sender: pgsql-hackers-owner@postgresql.org This is a multi-part message in MIME format. --------------010803000201040801020009 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 7/18/13 7:57 PM, Karol Trzcionka wrote: > Current head 4cbe3ac3e86790d05c569de4585e5075a62a9b41 -> patch applies > correct (only change needed in parallel_schedule). > However it fails on own regression tests (other tests pass). I got a rejected hunk in src/backend/nodes/nodeFuncs.c as well as that parallel_schedule issue. Maybe you didn't get the nodeFuncs change but didn't notice that? That might explain why the tests didn't work for you either. Attached is an updated patch where I tried to only fix the two small hunks of bit rot. I get "All 140 tests passed" here, on a Mac no less. I did a brief code scan through the patch just to get a feel for how the feature is put together, and what you'd need to know for a deeper review. (I'm trying to get customer time approved to work on this a lot more) The code was easier to follow than I expected. The way it completely avoids even getting into the security label integration yet seems like a successful design partitioning. This isn't nearly as scary as the SEPostgres patches. There are some useful looking utility functions that dump information about what's going on too. The bulk of the complexity is how the feature modifies query nodes to restrict what rows come through them. Some familiarity with that part of the code is what you'd need to take on reviewing this in detail. That and a week of time to spend trudging through it. If anyone is looking for an educational challenge on query execution, marching through all of these changes to validate they work as expected would do that. -- Greg Smith 2ndQuadrant US greg@2ndQuadrant.com Baltimore, MD PostgreSQL Training, Services, and 24x7 Support www.2ndQuadrant.com --------------010803000201040801020009 Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0"; name="pgsql-v9.4-row-level-security.v3b.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="pgsql-v9.4-row-level-security.v3b.patch" ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9jYXRhbG9ncy5zZ21sIGIvZG9j L3NyYy9zZ21sL2NhdGFsb2dzLnNnbWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggNjcxNTc4Mi4uNmYzYzhmYwoqKiogYS9kb2Mvc3JjL3NnbWwvY2F0 YWxvZ3Muc2dtbAotLS0gYi9kb2Mvc3JjL3NnbWwvY2F0YWxvZ3Muc2dtbAoq KioqKioqKioqKioqKioKKioqIDIzNCwyMzkgKioqKgotLS0gMjM0LDI0NCAt LS0tCiAgICAgICA8L3Jvdz4KICAKICAgICAgIDxyb3c+CisgICAgICAgPGVu dHJ5PjxsaW5rIGxpbmtlbmQ9ImNhdGFsb2ctcGctcm93bGV2ZWxzZWMiPjxz dHJ1Y3RuYW1lPnBnX3Jvd2xldmVsc2VjPC9zdHJ1Y3RuYW1lPjwvbGluaz48 L2VudHJ5PgorICAgICAgIDxlbnRyeT5yb3ctbGV2ZWwgc2VjdXJpdHkgcG9s aWN5IG9mIHJlbGF0aW9uPC9lbnRyeT4KKyAgICAgIDwvcm93PgorIAorICAg ICAgPHJvdz4KICAgICAgICA8ZW50cnk+PGxpbmsgbGlua2VuZD0iY2F0YWxv Zy1wZy1zZWNsYWJlbCI+PHN0cnVjdG5hbWU+cGdfc2VjbGFiZWw8L3N0cnVj dG5hbWU+PC9saW5rPjwvZW50cnk+CiAgICAgICAgPGVudHJ5PnNlY3VyaXR5 IGxhYmVscyBvbiBkYXRhYmFzZSBvYmplY3RzPC9lbnRyeT4KICAgICAgIDwv cm93PgoqKioqKioqKioqKioqKioKKioqIDE4NDgsMTg1MyAqKioqCi0tLSAx ODUzLDE4NjggLS0tLQogICAgICAgPC9yb3c+CiAgCiAgICAgICA8cm93Pgor ICAgICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+cmVsaGFzcm93c2VjdXJpdHk8 L3N0cnVjdGZpZWxkPjwvZW50cnk+CisgICAgICAgPGVudHJ5Pjx0eXBlPmJv b2w8L3R5cGU+PC9lbnRyeT4KKyAgICAgICA8ZW50cnk+PC9lbnRyeT4KKyAg ICAgICA8ZW50cnk+CisgICAgICAgIFRydWUgaWYgdGFibGUgaGFzIHJvdy1z ZWN1cml0eSBwb2xpY3k7IHNlZQorICAgICAgICA8bGluayBsaW5rZW5kPSJj YXRhbG9nLXBnLXJvd3NlY3VyaXR5Ij48c3RydWN0bmFtZT5wZ19yb3dzZWN1 cml0eTwvc3RydWN0bmFtZT48L2xpbms+IGNhdGFsb2cKKyAgICAgICA8L2Vu dHJ5PgorICAgICAgPC9yb3c+CisgCisgICAgICA8cm93PgogICAgICAgIDxl bnRyeT48c3RydWN0ZmllbGQ+cmVsaGFzc3ViY2xhc3M8L3N0cnVjdGZpZWxk PjwvZW50cnk+CiAgICAgICAgPGVudHJ5Pjx0eXBlPmJvb2w8L3R5cGU+PC9l bnRyeT4KICAgICAgICA8ZW50cnk+PC9lbnRyeT4KKioqKioqKioqKioqKioq CioqKiA1MTEyLDUxMTcgKioqKgotLS0gNTEyNyw1MTgyIC0tLS0KICAKICAg PC9zZWN0MT4KICAKKyAgPHNlY3QxIGlkPSJjYXRhbG9nLXBnLXJvd3NlY3Vy aXR5Ij4KKyAgIDx0aXRsZT48c3RydWN0bmFtZT5wZ19yb3dsZXZlbHNlYzwv c3RydWN0bmFtZT48L3RpdGxlPgorIAorICAgPGluZGV4dGVybSB6b25lPSJj YXRhbG9nLXBnLXJvd3NlY3VyaXR5Ij4KKyAgICA8cHJpbWFyeT5wZ19yb3dz ZWN1cml0eTwvcHJpbWFyeT4KKyAgIDwvaW5kZXh0ZXJtPgorICAgPHBhcmE+ CisgICAgVGhlIGNhdGFsb2cgPHN0cnVjdG5hbWU+cGdfcm93c2VjdXJpdHk8 L3N0cnVjdG5hbWU+IHN0b3JlcyBleHByZXNzaW9uCisgICAgdHJlZSBvZiBy b3ctc2VjdXJpdHkgcG9saWN5IHRvIGJlIHBlcmZvcm1lZCBvbiBhIHBhcnRp Y3VsYXIgcmVsYXRpb24uCisgICA8L3BhcmE+CisgICA8dGFibGU+CisgICAg PHRpdGxlPjxzdHJ1Y3RuYW1lPnBnX3Jvd3NlY3VyaXR5PC9zdHJ1Y3RuYW1l PiBDb2x1bW5zPC90aXRsZT4KKyAgICA8dGdyb3VwIGNvbHM9IjQiPgorICAg ICA8dGhlYWQ+CisgICAgICA8cm93PgorICAgICAgIDxlbnRyeT5OYW1lPC9l bnRyeT4KKyAgICAgICA8ZW50cnk+VHlwZTwvZW50cnk+CisgICAgICAgPGVu dHJ5PlJlZmVyZW5jZXM8L2VudHJ5PgorICAgICAgIDxlbnRyeT5EZXNjcmlw dGlvbjwvZW50cnk+CisgICAgICA8L3Jvdz4KKyAgICAgPC90aGVhZD4KKyAg ICAgPHRib2R5PgorICAgICAgPHJvdz4KKyAgICAgICA8ZW50cnk+PHN0cnVj dGZpZWxkPnJzZWNyZWxpZDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKyAgICAg ICA8ZW50cnk+PHR5cGU+b2lkPC90eXBlPjwvZW50cnk+CisgICAgICAgPGVu dHJ5PjxsaXRlcmFsPjxsaW5rIGxpbmtlbmQ9ImNhdGFsb2ctcGctY2xhc3Mi PjxzdHJ1Y3RuYW1lPnBnX2NsYXNzPC9zdHJ1Y3RuYW1lPjwvbGluaz4ub2lk PC9saXRlcmFsPjwvZW50cnk+CisgICAgICAgPGVudHJ5PlRoZSB0YWJsZSB0 aGlzIHJvdy1zZWN1cml0eSBpcyBmb3I8L2VudHJ5PgorICAgICAgPC9yb3c+ CisgICAgICA8cm93PgorICAgICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+cnNl Y2NtZDwvc3RydWN0ZmllbGQ+PC9lbnRyeT4KKyAgICAgICA8ZW50cnk+PHR5 cGU+Y2hhcjwvdHlwZT48L2VudHJ5PgorICAgICAgIDxlbnRyeT48L2VudHJ5 PgorICAgICAgIDxlbnRyeT5UaGUgY29tbWFuZCB0aGlzIHJvdy1zZWN1cml0 eSBpcyBmb3IuICdhJyBtZWFuaW5nIGFsbCBpcyBvbmx5IHBvc3NpYmxlIHZh bHVlIHJpZ2h0IG5vdy48L2VudHJ5PgorICAgICAgPC9yb3c+CisgICAgICA8 cm93PgorICAgICAgIDxlbnRyeT48c3RydWN0ZmllbGQ+cnNlY3F1YWw8L3N0 cnVjdGZpZWxkPjwvZW50cnk+CisgICAgICAgPGVudHJ5Pjx0eXBlPnBnX25v ZGVfdHJlZTwvdHlwZT48L2VudHJ5PgorICAgICAgIDxlbnRyeT48L2VudHJ5 PgorICAgICAgIDxlbnRyeT5BbiBleHByZXNzaW9uIHRyZWUgdG8gYmUgcGVy Zm9ybWVkIGFzIHJvd2wtc2VjdXJpdHkgcG9saWN5PC9lbnRyeT4KKyAgICAg IDwvcm93PgorICAgICA8L3Rib2R5PgorICAgIDwvdGdyb3VwPgorICAgPC90 YWJsZT4KKyAgIDxub3RlPgorICAgIDxwYXJhPgorICAgICA8bGl0ZXJhbD5w Z19jbGFzcy5yZWxoYXNyb3dsZXZlbHNlYzwvbGl0ZXJhbD4KKyAgICAgbXVz dCBiZSB0cnVlIGlmIGEgdGFibGUgaGFzIHJvdy1sZXZlbCBzZWN1cml0eSBw b2xpY3kgaW4gdGhpcyBjYXRhbG9nLgorICAgIDwvcGFyYT4KKyAgIDwvbm90 ZT4KKyAgPC9zZWN0MT4KICAKICAgPHNlY3QxIGlkPSJjYXRhbG9nLXBnLXNl Y2xhYmVsIj4KICAgIDx0aXRsZT48c3RydWN0bmFtZT5wZ19zZWNsYWJlbDwv c3RydWN0bmFtZT48L3RpdGxlPgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21s L3JlZi9hbHRlcl90YWJsZS5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9hbHRl cl90YWJsZS5zZ21sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2MDlk NGEuLmIzODA4NTIKKioqIGEvZG9jL3NyYy9zZ21sL3JlZi9hbHRlcl90YWJs ZS5zZ21sCi0tLSBiL2RvYy9zcmMvc2dtbC9yZWYvYWx0ZXJfdGFibGUuc2dt bAoqKioqKioqKioqKioqKiogQUxURVIgVEFCTEUgWyBJRiBFWElTVFMgXSA8 cmVwbGFjZWFibGUgYwoqKiogNjksODAgKioqKgotLS0gNjksODQgLS0tLQog ICAgICBOT1QgT0YKICAgICAgT1dORVIgVE8gPHJlcGxhY2VhYmxlIGNsYXNz PSJQQVJBTUVURVIiPm5ld19vd25lcjwvcmVwbGFjZWFibGU+CiAgICAgIFNF VCBUQUJMRVNQQUNFIDxyZXBsYWNlYWJsZSBjbGFzcz0iUEFSQU1FVEVSIj5u ZXdfdGFibGVzcGFjZTwvcmVwbGFjZWFibGU+CisgICAgIFNFVCBST1cgU0VD VVJJVFkgRk9SIDxyZXBsYWNlYWJsZSBjbGFzcz0iUEFSQU1FVEVSIj5yb3dz ZWNfY29tbWFuZDwvcmVwbGFjZWFibGU+IFRPICg8cmVwbGFjZWFibGUgY2xh c3M9IlBBUkFNRVRFUiI+Y29uZGl0aW9uPC9yZXBsYWNlYWJsZT4pCisgICAg IFJFU0VUIFJPVyBTRUNVUklUWSBGT1IgPHJlcGxhY2VhYmxlIGNsYXNzPSJQ QVJBTUVURVIiPnJvd3NlY19jb21tYW5kPC9yZXBsYWNlYWJsZT4KICAKICA8 cGhyYXNlPmFuZCA8cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+dGFi bGVfY29uc3RyYWludF91c2luZ19pbmRleDwvcmVwbGFjZWFibGU+IGlzOjwv cGhyYXNlPgogIAogICAgICBbIENPTlNUUkFJTlQgPHJlcGxhY2VhYmxlIGNs YXNzPSJQQVJBTUVURVIiPmNvbnN0cmFpbnRfbmFtZTwvcmVwbGFjZWFibGU+ IF0KICAgICAgeyBVTklRVUUgfCBQUklNQVJZIEtFWSB9IFVTSU5HIElOREVY IDxyZXBsYWNlYWJsZSBjbGFzcz0iUEFSQU1FVEVSIj5pbmRleF9uYW1lPC9y ZXBsYWNlYWJsZT4KICAgICAgWyBERUZFUlJBQkxFIHwgTk9UIERFRkVSUkFC TEUgXSBbIElOSVRJQUxMWSBERUZFUlJFRCB8IElOSVRJQUxMWSBJTU1FRElB VEUgXQorIDxwaHJhc2U+YW5kIDxyZXBsYWNlYWJsZSBjbGFzcz0iUEFSQU1F VEVSIj5yb3dzZWNfY29tbWFuZDwvcmVwbGFjZWFibGU+IGlzOjwvcGhyYXNl PgorICAgICB7IEFMTCB8IFNFTEVDVCB8IElOU0VSVCB8IFVQREFURSB8IERF TEVURSB9CiAgPC9zeW5vcHNpcz4KICAgPC9yZWZzeW5vcHNpc2Rpdj4KICAK KioqKioqKioqKioqKioqIEFMVEVSIFRBQkxFIFsgSUYgRVhJU1RTIF0gPHJl cGxhY2VhYmxlIGMKKioqIDU4MCw1ODUgKioqKgotLS0gNTg0LDYxNCAtLS0t CiAgICAgPC92YXJsaXN0ZW50cnk+CiAgCiAgICAgPHZhcmxpc3RlbnRyeT4K KyAgICAgPHRlcm0+PGxpdGVyYWw+U0VUIFJPVyBTRUNVUklUWSBGT1IgPHJl cGxhY2VhYmxlIGNsYXNzPSJQQVJBTUVURVIiPnJvd3NlY19jb21tYW5kPC9y ZXBsYWNlYWJsZT4gVE8gKDxyZXBsYWNlYWJsZSBjbGFzcz0iUEFSQU1FVEVS Ij5jb25kaXRpb248L3JlcGxhY2VhYmxlPik8L2xpdGVyYWw+PC90ZXJtPgor ICAgICA8bGlzdGl0ZW0+CisgICAgICA8cGFyYT4KKyAgICAgICBUaGlzIGZv cm0gc2V0IHJvdy1sZXZlbCBzZWN1cml0eSBwb2xpY3kgb2YgdGhlIHRhYmxl LgorICAgICAgIFN1cHBsaWVkIDxyZXBsYWNlYWJsZSBjbGFzcz0iUEFSQU1F VEVSIj5jb25kaXRpb248L3JlcGxhY2VhYmxlPiBwZXJmb3JtcworICAgICAg IGFzIGlmIGl0IGlzIGltcGxpY2l0bHkgYXBwZW5kZWQgdG8gdGhlIHF1YWxp ZmllcnMgb2YgPGxpdGVyYWw+V0hFUkU8L2xpdGVyYWw+CisgICAgICAgY2xh dXNlLCBhbHRob3VnaCBtZWNoYW5pc20gZ3VhcmFudGVlcyB0byBldmFsdWF0 ZSB0aGlzIGNvbmRpdGlvbiBlYXJsaWVyCisgICAgICAgdGhhbiBhbnkgb3Ro ZXIgdXNlciBnaXZlbiBjb25kaXRpb24uCisgICAgICAgPGxpdGVyYWw+QUxM PC8+IGlzIHRoZSBvbmx5IHN1cHBvcnRlZCBjb21tYW5kIHR5cGUgcmlnaHQg bm93LgorICAgICAgIFNlZSBhbHNvIDx4cmVmIGxpbmtlbmQ9IlJPVy1TRUNV UklUWSI+LgorICAgICAgPC9wYXJhPgorICAgICA8L2xpc3RpdGVtPgorICAg IDwvdmFybGlzdGVudHJ5PgorIAorICAgIDx2YXJsaXN0ZW50cnk+CisgICAg IDx0ZXJtPjxsaXRlcmFsPlJFU0VUIFJPVyBTRUNVUklUWSBGT1IgPHJlcGxh Y2VhYmxlIGNsYXNzPSJQQVJBTUVURVIiPnJvd3NlY19jb21tYW5kPC9yZXBs YWNlYWJsZT48L2xpdGVyYWw+PC90ZXJtPgorICAgICA8bGlzdGl0ZW0+Cisg ICAgICA8cGFyYT4KKyAgICAgICBUaGlzIGZvcm0gcmVzZXQgcm93LWxldmVs IHNlY3VyaXR5IHBvbGljeSBvZiB0aGUgdGFibGUsIGlmIGV4aXN0cy4KKyAg ICAgICA8bGl0ZXJhbD5BTEw8Lz4gaXMgdGhlIG9ubHkgc3VwcG9ydGVkIGNv bW1hbmQgdHlwZSByaWdodCBub3cuCisgICAgICA8L3BhcmE+CisgICAgIDwv bGlzdGl0ZW0+CisgICAgPC92YXJsaXN0ZW50cnk+CisgCisgICAgPHZhcmxp c3RlbnRyeT4KICAgICAgPHRlcm0+PGxpdGVyYWw+UkVOQU1FPC9saXRlcmFs PjwvdGVybT4KICAgICAgPGxpc3RpdGVtPgogICAgICAgPHBhcmE+CioqKioq KioqKioqKioqKiBBTFRFUiBUQUJMRSBbIElGIEVYSVNUUyBdIDxyZXBsYWNl YWJsZSBjCioqKiA4MjEsODI2ICoqKioKLS0tIDg1MCw4NjkgLS0tLQogICAg ICAgIDwvbGlzdGl0ZW0+CiAgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAKKyAg ICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgPHRlcm0+PHJlcGxhY2VhYmxl IGNsYXNzPSJQQVJBTUVURVIiPmNvbmRpdGlvbjwvcmVwbGFjZWFibGU+PC90 ZXJtPgorICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAg ICAgICBBbiBleHByZXNzaW9uIHRoYXQgcmV0dXJucyBhIHZhbHVlIG9mIHR5 cGUgYm9vbGVhbi4gRXhwZWN0IGZvciBhIGNhc2UKKyAgICAgICAgIHdoZW4g cXVlcmllcyBhcmUgZXhlY3V0ZWQgd2l0aCBzdXBlcnVzZXIgcHJpdmlsZWdl LCBvbmx5IHJvd3MgZm9yIHdoaWNoCisgICAgICAgICB0aGlzIGV4cHJlc3Np b24gcmV0dXJucyB0cnVlIHdpbGwgYmUgZmV0Y2hlZCwgdXBkYXRlZCBvciBk ZWxldGVkLgorICAgICAgICAgVGhpcyBleHByZXNzaW9uIGNhbiByZWZlcmVu Y2UgY29sdW1ucyBvZiB0aGUgcmVsYXRpb24gYmVpbmcgY29uZmlndXJlZC4K KyAgICAgICAgIFN1Yi1xdWVyaWVzIGNhbiBiZSBjb250YWluZWQgd2l0aGlu IGV4cHJlc3Npb24gdHJlZSwgdW5sZXNzIHJlZmVyZW5jZWQKKyAgICAgICAg IHJlbGF0aW9uIHJlY3Vyc2l2ZWx5IHJlZmVyZW5jZXMgdGhlIHNhbWUgcmVs YXRpb24uCisgICAgICAgIDwvcGFyYT4KKyAgICAgICA8L2xpc3RpdGVtPgor ICAgICAgPC92YXJsaXN0ZW50cnk+CisgCiAgICAgIDwvdmFyaWFibGVsaXN0 PgogICA8L3JlZnNlY3QxPgogIApkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21s L3VzZXItbWFuYWcuc2dtbCBiL2RvYy9zcmMvc2dtbC91c2VyLW1hbmFnLnNn bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTc3YWM3YS4uMzRhNjk5 ZQoqKiogYS9kb2Mvc3JjL3NnbWwvdXNlci1tYW5hZy5zZ21sCi0tLSBiL2Rv Yy9zcmMvc2dtbC91c2VyLW1hbmFnLnNnbWwKKioqKioqKioqKioqKioqIERS T1AgUk9MRSA8cmVwbGFjZWFibGU+bmFtZTwvcmVwbGFjZWFibGUKKioqIDQz OSw0NDIgKioqKgotLS0gNDM5LDU4NyAtLS0tCiAgICA8L3BhcmE+CiAgIDwv c2VjdDE+CiAgCisgIDxzZWN0MSBpZD0icm93LXNlY3VyaXR5Ij4KKyAgIDx0 aXRsZT5Sb3ctc2VjdXJpdHk8L3RpdGxlPgorICAgPHBhcmE+CisgICAgPHBy b2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiB2OS4zIG9yIGxh dGVyIHByb3ZpZGVzCisgICAgcm93LXNlY3VyaXR5IGZlYXR1cmUsIGxpa2Ug c2V2ZXJhbCBjb21tZXJjaWFsIGRhdGFiYXNlCisgICAgbWFuYWdlbWVudCBz eXN0ZW0uIEl0IGFsbG93cyB0YWJsZSBvd25lciB0byBhc3NpZ24gYSBwYXJ0 aWN1bGFyCisgICAgY29uZGl0aW9uIHRoYXQgcGVyZm9ybXMgYXMgYSBzZWN1 cml0eSBwb2xpY3kgb2YgdGhlIHRhYmxlOyBvbmx5CisgICAgcm93cyB0aGF0 IHNhdGlzZmllcyB0aGUgY29uZGl0aW9uIHNob3VsZCBiZSB2aXNpYmxlLCBl eGNlcHQgZm9yCisgICAgYSBjYXNlIHdoZW4gc3VwZXJ1c2VyIHJ1bnMgcXVl cmllcy4KKyAgIDwvcGFyYT4KKyAgIDxwYXJhPgorICAgIFJvdy1zZWN1cml0 eSBwb2xpY3kgY2FuIGJlIHNldCB1c2luZyA8bGl0ZXJhbD5TRVQgUk9XIFNF Q1VSSVRZPC9saXRlcmFsPgorICAgIGNvbW1hbmQgb2YgPHhyZWYgbGlua2Vu ZD0iU1FMLUFMVEVSVEFCTEUiPiBzdGF0ZW1lbnQsIGFzIGFuIGV4cHJlc3Np b24KKyAgICBmb3JtIHRoYXQgcmV0dXJucyBhIHZhbHVlIG9mIHR5cGUgYm9v bGVhbi4gVGhpcyBleHByZXNzaW9uIGNhbiBjb250YWluCisgICAgcmVmZXJl bmNlcyB0byBjb2x1bW5zIG9mIHRoZSByZWxhdGlvbiwgc28gaXQgZW5hYmxl cyB0byBjb25zdHJ1Y3QKKyAgICBhcmJpdHJhcnkgcnVsZSB0byBtYWtlIGFj Y2VzcyBjb250cm9sIGRlY2lzaW9uIGJhc2VkIG9uIGNvbnRlbnRzIG9mCisg ICAgZWFjaCByb3dzLgorICAgPC9wYXJhPgorICAgPHBhcmE+CisgICAgRm9y IGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgPGxpdGVyYWw+Y3VzdG9tZXI8L2xp dGVyYWw+IHRhYmxlIGhhcworICAgIDxsaXRlcmFsPnVuYW1lPC9saXRlcmFs PiBmaWVsZCB0byBzdG9yZSB1c2VyIG5hbWUsIGFuZCBpdCBhc3N1bWUKKyAg ICB3ZSBkb24ndCB3YW50IHRvIGV4cG9zZSBhbnkgcHJvcGVydGllcyBvZiBv dGhlciBjdXN0b21lcnMuCisgICAgVGhlIGZvbGxvd2luZyBjb21tYW5kIHNl dCA8bGl0ZXJhbD5jdXJyZW50X3VzZXIgPSB1bmFtZTwvbGl0ZXJhbD4KKyAg ICBhcyByb3ctc2VjdXJpdHkgcG9saWN5IG9uIHRoZSA8bGl0ZXJhbD5jdXN0 b21lcjwvbGl0ZXJhbD4gdGFibGUuCisgPHNjcmVlbj4KKyBwb3N0Z3Jlcz0+ IEFMVEVSIFRBQkxFIGN1c3RvbWVyIFNFVCBST1cgU0VDVVJJVFkKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZPUiBBTEwgVE8gKGN1cnJl bnRfdXNlciA9IHVuYW1lKTsKKyBBTFRFUiBUQUJMRQorIDwvc2NyZWVuPgor ICAgIDx4cmVmIGxpbmtlbmQ9IlNRTC1FWFBMQUlOIj4gY29tbWFuZCBzaG93 cyBob3cgcm93LXNlY3VyaXR5IHBvbGljeQorICAgIHdvcmtzIG9uIHRoZSBz dXBwbGllZCBxdWVyeS4KKyA8c2NyZWVuPgorIHBvc3RncmVzPT4gRVhQTEFJ Tihjb3N0cyBvZmYpIFNFTEVDVCAqIEZST00gY3VzdG9tZXIgV0hFUkUgZl9s ZWFrKHVwYXNzd2QpOworICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTgor IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgIFN1YnF1ZXJ5IFNjYW4gb24gY3VzdG9tZXIKKyAgICBGaWx0ZXI6IGZf bGVhayhjdXN0b21lci51cGFzc3dkKQorICAgIC0+ICBTZXEgU2NhbiBvbiBj dXN0b21lciBjdXN0b21lcl8xCisgICAgICAgICAgRmlsdGVyOiAoImN1cnJl bnRfdXNlciIoKSA9IHVuYW1lKQorICg0IHJvd3MpCisgPC9zY3JlZW4+Cisg ICAgVGhpcyBxdWVyeSBleGVjdXRpb24gcGxhbiBtZWFucyB0aGUgcHJlY29u ZmlndXJlZCByb3ctc2VjdXJpdHkgcG9saWN5IGlzCisgICAgaW1wbGljaXRs eSBhZGRlZCwgYW5kIHNjYW4gcGxhbiBvbiB0aGUgdGFyZ2V0IHJlbGF0aW9u IGJlaW5nIHdyYXBwZWQgdXAKKyAgICB3aXRoIGEgc3ViLXF1ZXJ5LgorICAg IEl0IGVuc3VyZXMgdXNlciBnaXZlbiBxdWFsaWZpZXJzLCBpbmNsdWRpbmcg ZnVuY3Rpb25zIHdpdGggc2lkZSBlZmZlY3RzLAorICAgIGFyZSBuZXZlciBl eGVjdXRlZCBlYXJsaWVyIHRoYW4gdGhlIHJvdy1zZWN1cml0eSBwb2xpY3kg cmVnYXJkbGVzcyBvZgorICAgIGl0cyBjb3N0LCBleGNlcHQgZm9yIHRoZSBj YXNlcyB3aGVuIHRoZXNlIHdlcmUgZnVsbHkgbGVha3Byb29mLgorICAgIFRo aXMgZGVzaWduIGhlbHBzIHRvIHRhY2tsZSB0aGUgc2NlbmFyaW8gZGVzY3Jp YmVkIGluCisgICAgPHhyZWYgbGlua2VuZD0iUlVMRVMtUFJJVklMRUdFUyI+ OyB0aGF0IGludHJvZHVjZXMgdGhlIG9yZGVyIHRvIGV2YWx1YXRlCisgICAg cXVhbGlmaWVycyBpcyBzaWduaWZpY2FudCB0byBrZWVwIGNvbmZpZGVudGlh bGl0eSBvZiBpbnZpc2libGUgcm93cy4KKyAgIDwvcGFyYT4KKyAKKyAgIDxw YXJhPgorICAgIE9uIHRoZSBvdGhlciBoYW5kLCB0aGlzIGRlc2lnbiBhbGxv d3Mgc3VwZXJ1c2VycyB0byBieXBhc3MgY2hlY2tzIHdpdGgKKyAgICByb3ct c2VjdXJpdHkuCisgICAgSXQgZW5zdXJlcyA8YXBwbGljYXRpb24+cGdfZHVt cDwvYXBwbGljYXRpb24+IGNhbiBvYnRhaW4gYSBjb21wbGV0ZSBzZXQKKyAg ICBvZiBkYXRhYmFzZSBiYWNrdXAsIGFuZCBhdm9pZCB0byBleGVjdXRlIFRy b2phbiBob3JzZSB0cmFwLCBiZWluZyBpbmplY3RlZAorICAgIGFzIGEgcm93 LXNlY3VyaXR5IHBvbGljeSBvZiB1c2VyLWRlZmluZWQgdGFibGUsIHdpdGgg cHJpdmlsZWdlcyBvZgorICAgIHN1cGVydXNlci4KKyAgIDwvcGFyYT4KKyAK KyAgIDxwYXJhPgorICAgIEluIGNhc2Ugb2YgcXVlcmllcyBvbiBpbmhlcml0 ZWQgdGFibGVzLCByb3ctc2VjdXJpdHkgcG9saWN5IG9mIHRoZSBwYXJlbnQK KyAgICByZWxhdGlvbiBpcyBub3QgYXBwbGllZCB0byBjaGlsZCByZWxhdGlv bnMuIFNjb3BlIG9mIHRoZSByb3ctc2VjdXJpdHkKKyAgICBwb2xpY3kgaXMg bGltaXRlZCB0byB0aGUgcmVsYXRpb24gb24gd2hpY2ggaXQgaXMgc2V0Lgor IDxzY3JlZW4+CisgcG9zdGdyZXM9PiBFWFBMQUlOKGNvc3RzIG9mZikgU0VM RUNUICogRlJPTSB0MSBXSEVSRSBmX2xlYWsoeSk7CisgICAgICAgICAgICAg IFFVRVJZIFBMQU4KKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgIEFwcGVuZAorICAgIC0+ICBTdWJxdWVyeSBTY2FuIG9uIHQx CisgICAgICAgICAgRmlsdGVyOiBmX2xlYWsodDEueSkKKyAgICAgICAgICAt PiAgU2VxIFNjYW4gb24gdDEgdDFfMQorICAgICAgICAgICAgICAgIEZpbHRl cjogKCh4ICUgMikgPSAwKQorICAgIC0+ICBTZXEgU2NhbiBvbiB0MgorICAg ICAgICAgIEZpbHRlcjogZl9sZWFrKHkpCisgICAgLT4gIFN1YnF1ZXJ5IFNj YW4gb24gdDMKKyAgICAgICAgICBGaWx0ZXI6IGZfbGVhayh0My55KQorICAg ICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0MyB0M18xCisgICAgICAgICAgICAg ICAgRmlsdGVyOiAoKHggJSAyKSA9IDEpCisgKDExIHJvd3MpCisgPC9zY3Jl ZW4+CisgICAgIEluIHRoZSBhYm92ZSBleGFtcGxlLCA8bGl0ZXJhbD50MTwv bGl0ZXJhbD4gaGFzIGluaGVyaXRlZAorICAgICBjaGlsZCB0YWJsZSA8bGl0 ZXJhbD50MjwvbGl0ZXJhbD4gYW5kIDxsaXRlcmFsPnQzPC9saXRlcmFsPiwK KyAgICAgYW5kIHJvdy1zZWN1cml0eSBwb2xpY3kgaXMgc2V0IG9uIG9ubHkg PGxpdGVyYWw+dDE8L2xpdGVyYWw+LAorICAgICBhbmQgPGxpdGVyYWw+dDM8 L2xpdGVyYWw+LCBub3QgPGxpdGVyYWw+dDI8L2xpdGVyYWw+LgorIAorICAg ICBUaGUgcm93LXNlY3VyaXR5IHBvbGljeSBvZiA8bGl0ZXJhbD50MTwvbGl0 ZXJhbD4sIDxsaXRlcmFsPng8L2xpdGVyYWw+CisgICAgIG11c3QgYmUgZXZl bi1udW1iZXIsIGlzIGFwcGVuZGVkIG9ubHkgPGxpdGVyYWw+dDE8L2xpdGVy YWw+LAorICAgICBuZWl0aGVyIDxsaXRlcmFsPnQyPC9saXRlcmFsPiBub3Ig PGxpdGVyYWw+dDM8L2xpdGVyYWw+LgorICAgICBPbiB0aGUgY29udHJhcnks IDxsaXRlcmFsPnQzPC9saXRlcmFsPiBoYXMgZGlmZmVyZW50IHJvdy1zZWN1 cml0eSBwb2xpY3k7CisgICAgIDxsaXRlcmFsPng8L2xpdGVyYWw+IG11c3Qg YmUgb2RkLW51bWJlci4KKyAgIDwvcGFyYT4KKyAKKyAgIDxwYXJhPgorICAg IFJvdy1zZWN1cml0eSBmZWF0dXJlIGFsc28gd29ya3MgdG8gcXVlcmllcyBm b3Igd3JpdGVyLW9wZXJhdGlvbnM7IHN1Y2ggYXMKKyAgICA8eHJlZiBsaW5r ZW5kPSJTUUwtSU5TRVJUIj4sIDx4cmVmIGxpbmtlbmQ9IlNRTC1VUERBVEUi PiBvcgorICAgIDx4cmVmIGxpbmtlbmQ9IlNRTC1ERUxFVEUiPiBjb21tYW5k cy4KKyAgICBJdCBlbnN1cmVzIGFsbCB0aGUgbW9kaWZpZWQgcm93cyBzYXRp c2ZpZXMgY29uZmlndXJlZCByb3ctc2VjdXJpdHkgcG9saWN5LgorICAgIFRo ZSBiZWxvdyBxdWVyeSB0cmllcyB0byB1cGRhdGUgZS1tYWlsIGFkZHJlc3Mg b2YgdGhlCisgICAgPGxpdGVyYWw+Y3VzdG9tZXI8Lz4gdGFibGUsIGFuZCBj b25maWd1cmVkIHJvdy1zZWN1cml0eSBtYWtlcyBzdXJlIGFsbCB0aGUKKyAg ICBtb2RpZmllZCByb3dzJ3MgPGxpdGVyYWw+dW5hbWU8Lz4gZmllbGQgaGFz IHRvIG1hdGNoIHdpdGgKKyAgICA8bGl0ZXJhbD5jdXJyZW50X3VzZXI8Lz4u CisgICA8L3BhcmE+CisgPHNjcmVlbj4KKyBwb3N0Z3Jlcz0+IEVYUExBSU4g KGNvc3RzIG9mZikgVVBEQVRFIGN1c3RvbWVyIFNFVCBlbWFpbCA9ICdhbGlj ZUBleGFtcGxlLmNvbSc7CisgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQ TEFOCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAgVXBkYXRlIG9uIGN1c3RvbWVyCisgICAgLT4gIFN1 YnF1ZXJ5IFNjYW4gb24gY3VzdG9tZXIKKyAgICAgICAgICAtPiAgU2VxIFNj YW4gb24gY3VzdG9tZXIgY3VzdG9tZXJfMQorICAgICAgICAgICAgICAgIEZp bHRlcjogKCJjdXJyZW50X3VzZXIiKCkgPSB1bmFtZSkKKyAoNCByb3dzKQor IDwvc2NyZWVuPgorICAgPHBhcmE+CisgICAgTW9kaWZpY2F0aW9uIG9mIGEg Y2VydGFpbiB0YWJsZSBpcyBjb25zaXN0IG9mIHR3byBkaWZmZXJlbnQgc3R1 ZmZzOyBvbmUKKyAgICBpcyBmZXRjaCByb3dzIHRvIGJlIG1vZGlmaWVkIGZy b20gdGhlIHJlc3VsdCByZWxhdGlvbiAoZXhjZXB0IGZvcgorICAgIDxsaXRl cmFsPklOU0VSVDwvPiBjb21tYW5kKSwgc2Vjb25kIGlzIGluc2VydGlvbiBv ZiByb3dzIHRvIHRoZQorICAgIHJlc3VsdCByZWxhdGlvbi4gVXN1YWxseSwg YmVmb3JlLXJvdyB0cmlnZ2VyIG9yIGNoZWNrIGNvbnN0cmFpbnRzIGFyZQor ICAgIHJ1biBpbiB0aGUgc2Vjb25kIHBoYXNlLiBJbiBhZGRpdGlvbiwgcm93 LXNlY3VyaXR5IHBvbGljeSBpcyBhbHNvIGNoZWNrZWQKKyAgICBvbiB0aGlz IHN0YWdlLCB0byBwcmV2ZW50IHRvIGluc2VydCBvciB1cGRhdGUgcm93cyB3 aXRoIHVucHJpdmlsZWdlZAorICAgIHZhbHVlcy4KKyAgIDwvcGFyYT4KKyAK KyAgIDxwYXJhPgorICAgIFVubGlrZSBvdGhlciBjb21tZXJjaWFsIGRhdGFi YXNlIHN5c3RlbXMsIHdlIGRvbid0IGhhdmUgYW55IHBsYW4gdG8gYWxsb3cK KyAgICBpbmRpdmlkdWFsIHJvdy1zZWN1cml0eSBwb2xpY3kgZm9yIGVhY2gg Y29tbWFuZCB0eXBlLiBFdmVuIGlmIHdlIHdhbnQgdG8KKyAgICBwZXJmb3Jt IHdpdGggZGlmZmVyZW5jZSBwb2xpY3kgYmV0d2VlbiA8eHJlZiBsaW5rZW5k PSJTUUwtU0VMRUNUIj4gYW5kCisgICAgPHhyZWYgbGlua2VuZD0iU1FMLURF TEVURSI+LCA8bGl0ZXJhbD5SRVRVUk5JTkc8Lz4gY2xhdXNlIGNhbiBsZWFr IHRoZSByb3dzCisgICAgdG8gYmUgaW52aXNpYmxlIHVzaW5nIDx4cmVmIGxp bmtlbmQ9IlNRTC1ERUxFVEUiPiBjb21tYW5kLgorICAgPC9wYXJhPgorIAor ICAgPHBhcmE+CisgICAgRXZlbiB0aG91Z2ggaXQgaXMgbm90IGEgc3BlY2lm aWMgbWF0dGVyIGluIHJvdy1zZWN1cml0eSwgcGxlYXNlIGJlIGNhcmVmdWwK KyAgICBpZiB5b3UgcGxhbiB0byB1c2UgPGxpdGVyYWw+Y3VycmVudF91c2Vy PC8+IGluIHJvdy1sZXZlbCBzZWN1cml0eSBwb2xpY3kuCisgICAgPHhyZWYg bGlua2VuZD0iU1FMLURFQ0xBUkUiPiBhbmQgPHhyZWYgbGlua2VuZD0iU1FM LUZFVENIIj4gYWxsb3dzIHRvCisgICAgc3dpdGNoIGN1cnJlbnQgdXNlciBp ZGVudGlmaWVyIGR1cmluZyBleGVjdXRpb24gb2YgdGhlIHF1ZXJ5LgorICAg IFRodXMsIGl0IGNhbiBmZXRjaCB0aGUgZmlyc3QgMTAwIHJvd3Mgd2l0aCBw cml2aWxlZ2Ugb2YgPGxpdGVyYWw+YWxpY2U8Lz4sCisgICAgdGhlbiByZW1h aW5pbmcgcm93cyB3aXRoIHByaXZpbGVnZSBvZiA8bGl0ZXJhbD5ib2I8Lz4u IElmIGFuZCB3aGVuIHF1ZXJ5CisgICAgZXhlY3V0aW9uIHBsYW4gY29udGFp bnMgc29tZSBraW5kIG9mIG1hdGVyaWFsaXphdGlvbiBhbmQgcm93LXNlY3Vy aXR5CisgICAgcG9saWN5IGNvbnRhaW5zIDxsaXRlcmFsPmN1cnJlbnRfdXNl cjwvPiwgdGhlIGZldGNoZWQgdHVwbGVzIGluCisgICAgPGxpdGVyYWw+Ym9i PC8+J3Mgc2NyZWVuIG1pZ2h0IGJlIGV2YWx1YXRlZCBhY2NvcmRpbmcgdG8g dGhlIHByaXZpbGVnZSBvZgorICAgIDxsaXRlcmFsPmFsaWNlPC8+LgorICAg PC9wYXJhPgorICA8L3NlY3QxPgogIDwvY2hhcHRlcj4KZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2NhdGFsb2cvTWFrZWZpbGUgYi9zcmMvYmFja2VuZC9j YXRhbG9nL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0 ZDNmM2MuLjliNGU5ZjUKKioqIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9NYWtl ZmlsZQotLS0gYi9zcmMvYmFja2VuZC9jYXRhbG9nL01ha2VmaWxlCioqKioq KioqKioqKioqKiBPQkpTID0gY2F0YWxvZy5vIGRlcGVuZGVuY3kubyBoZWFw Lm8gaW5kCioqKiAxNSwyMSAqKioqCiAgICAgICAgIHBnX2NvbnN0cmFpbnQu byBwZ19jb252ZXJzaW9uLm8gXAogICAgICAgICBwZ19kZXBlbmQubyBwZ19l bnVtLm8gcGdfaW5oZXJpdHMubyBwZ19sYXJnZW9iamVjdC5vIHBnX25hbWVz cGFjZS5vIFwKICAgICAgICAgcGdfb3BlcmF0b3IubyBwZ19wcm9jLm8gcGdf cmFuZ2UubyBwZ19kYl9yb2xlX3NldHRpbmcubyBwZ19zaGRlcGVuZC5vIFwK ISAgICAgICAgcGdfdHlwZS5vIHN0b3JhZ2UubyB0b2FzdGluZy5vCiAgCiAg QktJRklMRVMgPSBwb3N0Z3Jlcy5ia2kgcG9zdGdyZXMuZGVzY3JpcHRpb24g cG9zdGdyZXMuc2hkZXNjcmlwdGlvbgogIAotLS0gMTUsMjEgLS0tLQogICAg ICAgICBwZ19jb25zdHJhaW50Lm8gcGdfY29udmVyc2lvbi5vIFwKICAgICAg ICAgcGdfZGVwZW5kLm8gcGdfZW51bS5vIHBnX2luaGVyaXRzLm8gcGdfbGFy Z2VvYmplY3QubyBwZ19uYW1lc3BhY2UubyBcCiAgICAgICAgIHBnX29wZXJh dG9yLm8gcGdfcHJvYy5vIHBnX3JhbmdlLm8gcGdfZGJfcm9sZV9zZXR0aW5n Lm8gcGdfc2hkZXBlbmQubyBcCiEgICAgICAgIHBnX3Jvd3NlY3VyaXR5Lm8g cGdfdHlwZS5vIHN0b3JhZ2UubyB0b2FzdGluZy5vCiAgCiAgQktJRklMRVMg PSBwb3N0Z3Jlcy5ia2kgcG9zdGdyZXMuZGVzY3JpcHRpb24gcG9zdGdyZXMu c2hkZXNjcmlwdGlvbgogIAoqKioqKioqKioqKioqKiogUE9TVEdSRVNfQktJ X1NSQ1MgPSAkKGFkZHByZWZpeCAkKHRvcF9zcgoqKiogMzksNDUgKioqKgog IAlwZ190c19jb25maWcuaCBwZ190c19jb25maWdfbWFwLmggcGdfdHNfZGlj dC5oIFwKICAJcGdfdHNfcGFyc2VyLmggcGdfdHNfdGVtcGxhdGUuaCBwZ19l eHRlbnNpb24uaCBcCiAgCXBnX2ZvcmVpZ25fZGF0YV93cmFwcGVyLmggcGdf Zm9yZWlnbl9zZXJ2ZXIuaCBwZ191c2VyX21hcHBpbmcuaCBcCiEgCXBnX2Zv cmVpZ25fdGFibGUuaCBcCiAgCXBnX2RlZmF1bHRfYWNsLmggcGdfc2VjbGFi ZWwuaCBwZ19zaHNlY2xhYmVsLmggcGdfY29sbGF0aW9uLmggcGdfcmFuZ2Uu aCBcCiAgCXRvYXN0aW5nLmggaW5kZXhpbmcuaCBcCiAgICAgICkKLS0tIDM5 LDQ1IC0tLS0KICAJcGdfdHNfY29uZmlnLmggcGdfdHNfY29uZmlnX21hcC5o IHBnX3RzX2RpY3QuaCBcCiAgCXBnX3RzX3BhcnNlci5oIHBnX3RzX3RlbXBs YXRlLmggcGdfZXh0ZW5zaW9uLmggXAogIAlwZ19mb3JlaWduX2RhdGFfd3Jh cHBlci5oIHBnX2ZvcmVpZ25fc2VydmVyLmggcGdfdXNlcl9tYXBwaW5nLmgg XAohIAlwZ19mb3JlaWduX3RhYmxlLmggcGdfcm93c2VjdXJpdHkuaCBcCiAg CXBnX2RlZmF1bHRfYWNsLmggcGdfc2VjbGFiZWwuaCBwZ19zaHNlY2xhYmVs LmggcGdfY29sbGF0aW9uLmggcGdfcmFuZ2UuaCBcCiAgCXRvYXN0aW5nLmgg aW5kZXhpbmcuaCBcCiAgICAgICkKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2NhdGFsb2cvZGVwZW5kZW5jeS5jIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9k ZXBlbmRlbmN5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmUxN2M5 Ni4uZDEzYjJlMQoqKiogYS9zcmMvYmFja2VuZC9jYXRhbG9nL2RlcGVuZGVu Y3kuYwotLS0gYi9zcmMvYmFja2VuZC9jYXRhbG9nL2RlcGVuZGVuY3kuYwoq KioqKioqKioqKioqKioKKioqIDQ1LDUwICoqKioKLS0tIDQ1LDUxIC0tLS0K ICAjaW5jbHVkZSAiY2F0YWxvZy9wZ19vcGZhbWlseS5oIgogICNpbmNsdWRl ICJjYXRhbG9nL3BnX3Byb2MuaCIKICAjaW5jbHVkZSAiY2F0YWxvZy9wZ19y ZXdyaXRlLmgiCisgI2luY2x1ZGUgImNhdGFsb2cvcGdfcm93c2VjdXJpdHku aCIKICAjaW5jbHVkZSAiY2F0YWxvZy9wZ190YWJsZXNwYWNlLmgiCiAgI2lu Y2x1ZGUgImNhdGFsb2cvcGdfdHJpZ2dlci5oIgogICNpbmNsdWRlICJjYXRh bG9nL3BnX3RzX2NvbmZpZy5oIgoqKioqKioqKioqKioqKiogZG9EZWxldGlv bihjb25zdCBPYmplY3RBZGRyZXNzICpvYmplY3QsIAoqKiogMTI0OSwxMjU0 ICoqKioKLS0tIDEyNTAsMTI1OSAtLS0tCiAgCQkJUmVtb3ZlRXZlbnRUcmln Z2VyQnlJZChvYmplY3QtPm9iamVjdElkKTsKICAJCQlicmVhazsKICAKKyAJ CWNhc2UgT0NMQVNTX1JPV1NFQ1VSSVRZOgorIAkJCVJlbW92ZVJvd1NlY3Vy aXR5QnlJZChvYmplY3QtPm9iamVjdElkKTsKKyAJCQlicmVhazsKKyAKICAJ CWRlZmF1bHQ6CiAgCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBvYmpl Y3QgY2xhc3M6ICV1IiwKICAJCQkJIG9iamVjdC0+Y2xhc3NJZCk7CioqKioq KioqKioqKioqKiBnZXRPYmplY3RDbGFzcyhjb25zdCBPYmplY3RBZGRyZXNz ICpvYmplCioqKiAyMzA4LDIzMTMgKioqKgotLS0gMjMxMywyMzIxIC0tLS0K ICAKICAJCWNhc2UgRXZlbnRUcmlnZ2VyUmVsYXRpb25JZDoKICAJCQlyZXR1 cm4gT0NMQVNTX0VWRU5UX1RSSUdHRVI7CisgCisgCQljYXNlIFJvd1NlY3Vy aXR5UmVsYXRpb25JZDoKKyAJCQlyZXR1cm4gT0NMQVNTX1JPV1NFQ1VSSVRZ OwogIAl9CiAgCiAgCS8qIHNob3VsZG4ndCBnZXQgaGVyZSAqLwpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9oZWFwLmMgYi9zcmMvYmFja2Vu ZC9jYXRhbG9nL2hlYXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2 NGNhMzEyLi43ZWI3YTE3CioqKiBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvaGVh cC5jCi0tLSBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvaGVhcC5jCioqKioqKioq KioqKioqKiBJbnNlcnRQZ0NsYXNzVHVwbGUoUmVsYXRpb24gcGdfY2xhc3Nf ZGVzCioqKiA3OTEsNzk2ICoqKioKLS0tIDc5MSw3OTcgLS0tLQogIAl2YWx1 ZXNbQW51bV9wZ19jbGFzc19yZWxoYXNwa2V5IC0gMV0gPSBCb29sR2V0RGF0 dW0ocmRfcmVsLT5yZWxoYXNwa2V5KTsKICAJdmFsdWVzW0FudW1fcGdfY2xh c3NfcmVsaGFzcnVsZXMgLSAxXSA9IEJvb2xHZXREYXR1bShyZF9yZWwtPnJl bGhhc3J1bGVzKTsKICAJdmFsdWVzW0FudW1fcGdfY2xhc3NfcmVsaGFzdHJp Z2dlcnMgLSAxXSA9IEJvb2xHZXREYXR1bShyZF9yZWwtPnJlbGhhc3RyaWdn ZXJzKTsKKyAJdmFsdWVzW0FudW1fcGdfY2xhc3NfcmVsaGFzcm93c2VjdXJp dHkgLSAxXSA9IEJvb2xHZXREYXR1bShyZF9yZWwtPnJlbGhhc3Jvd3NlY3Vy aXR5KTsKICAJdmFsdWVzW0FudW1fcGdfY2xhc3NfcmVsaGFzc3ViY2xhc3Mg LSAxXSA9IEJvb2xHZXREYXR1bShyZF9yZWwtPnJlbGhhc3N1YmNsYXNzKTsK ICAJdmFsdWVzW0FudW1fcGdfY2xhc3NfcmVsaXNwb3B1bGF0ZWQgLSAxXSA9 IEJvb2xHZXREYXR1bShyZF9yZWwtPnJlbGlzcG9wdWxhdGVkKTsKICAJdmFs dWVzW0FudW1fcGdfY2xhc3NfcmVsZnJvemVueGlkIC0gMV0gPSBUcmFuc2Fj dGlvbklkR2V0RGF0dW0ocmRfcmVsLT5yZWxmcm96ZW54aWQpOwpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9vYmplY3RhZGRyZXNzLmMgYi9z cmMvYmFja2VuZC9jYXRhbG9nL29iamVjdGFkZHJlc3MuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCA0ZDIyZjNhLi5iNGJjOWQ4CioqKiBhL3NyYy9i YWNrZW5kL2NhdGFsb2cvb2JqZWN0YWRkcmVzcy5jCi0tLSBiL3NyYy9iYWNr ZW5kL2NhdGFsb2cvb2JqZWN0YWRkcmVzcy5jCioqKioqKioqKioqKioqKiBn ZXRPYmplY3REZXNjcmlwdGlvbihjb25zdCBPYmplY3RBZGRyZXNzCioqKiAy MTQzLDIxNDggKioqKgotLS0gMjE0MywyMTk4IC0tLS0KICAJCQkJYnJlYWs7 CiAgCQkJfQogIAorIAkJY2FzZSBPQ0xBU1NfUk9XU0VDVVJJVFk6CisgCQkJ eworIAkJCQlSZWxhdGlvbglyc2VjX3JlbDsKKyAJCQkJU2NhbktleURhdGEJ c2tleTsKKyAJCQkJU3lzU2NhbkRlc2MJc3NjYW47CisgCQkJCUhlYXBUdXBs ZQl0dXBsZTsKKyAJCQkJRm9ybV9wZ19yb3dzZWN1cml0eQlmb3JtX3JzZWM7 CisgCisgCQkJCXJzZWNfcmVsID0gaGVhcF9vcGVuKFJvd1NlY3VyaXR5UmVs YXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKyAKKyAJCQkJU2NhbktleUlu aXQoJnNrZXksCisgCQkJCQkJCU9iamVjdElkQXR0cmlidXRlTnVtYmVyLAor IAkJCQkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lERVEsCisgCQkJ CQkJCU9iamVjdElkR2V0RGF0dW0ob2JqZWN0LT5vYmplY3RJZCkpOworIAkJ CQlzc2NhbiA9IHN5c3RhYmxlX2JlZ2luc2Nhbihyc2VjX3JlbCwgUm93U2Vj dXJpdHlPaWRJbmRleElkLAorIAkJCQkJCQkJCQkgICB0cnVlLCBTbmFwc2hv dE5vdywgMSwgJnNrZXkpOworIAkJCQl0dXBsZSA9IHN5c3RhYmxlX2dldG5l eHQoc3NjYW4pOworIAkJCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQodHVwbGUp KQorIAkJCQkJZWxvZyhFUlJPUiwgImNvdWxkIG5vdCBmaW5kIHR1cGxlIGZv ciByb3ctc2VjdXJpdHkgJXUiLAorIAkJCQkJCSBvYmplY3QtPm9iamVjdElk KTsKKyAJCQkJZm9ybV9yc2VjID0gKEZvcm1fcGdfcm93c2VjdXJpdHkpIEdF VFNUUlVDVCh0dXBsZSk7CisgCisgCQkJCWFwcGVuZFN0cmluZ0luZm8oJmJ1 ZmZlciwgXygicm93LXNlY3VyaXR5IG9mICIpKTsKKyAJCQkJZ2V0UmVsYXRp b25EZXNjcmlwdGlvbigmYnVmZmVyLCBmb3JtX3JzZWMtPnJzZWNyZWxpZCk7 CisgCQkJCXN3aXRjaCAoZm9ybV9yc2VjLT5yc2VjY21kKQorIAkJCQl7Cisg CQkJCQljYXNlIFJPV1NFQ1VSSVRZX0NNRF9BTEw6CisgCQkJCQkJYXBwZW5k U3RyaW5nSW5mbygmYnVmZmVyLCBfKCIgRk9SIEFMTCIpKTsKKyAJCQkJCQli cmVhazsKKyAJCQkJCWNhc2UgUk9XU0VDVVJJVFlfQ01EX1NFTEVDVDoKKyAJ CQkJCQlhcHBlbmRTdHJpbmdJbmZvKCZidWZmZXIsIF8oIiBGT1IgU0VMRUNU IikpOworIAkJCQkJCWJyZWFrOworIAkJCQkJY2FzZSBST1dTRUNVUklUWV9D TURfSU5TRVJUOgorIAkJCQkJCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZmZlciwg XygiIEZPUiBJTlNFUlQiKSk7CisgCQkJCQkJYnJlYWs7CisgCQkJCQljYXNl IFJPV1NFQ1VSSVRZX0NNRF9VUERBVEU6CisgCQkJCQkJYXBwZW5kU3RyaW5n SW5mbygmYnVmZmVyLCBfKCIgRk9SIFVQREFURSIpKTsKKyAJCQkJCQlicmVh azsKKyAJCQkJCWNhc2UgUk9XU0VDVVJJVFlfQ01EX0RFTEVURToKKyAJCQkJ CQlhcHBlbmRTdHJpbmdJbmZvKCZidWZmZXIsIF8oIiBGT1IgREVMRVRFIikp OworIAkJCQkJCWJyZWFrOworIAkJCQkJZGVmYXVsdDoKKyAJCQkJCQllbG9n KEVSUk9SLCAidW5leHBlY3RlZCByb3ctc2VjdXJpdHkgY29tbWFuZCB0eXBl OiAlYyIsCisgCQkJCQkJCSBmb3JtX3JzZWMtPnJzZWNjbWQpOworIAkJCQl9 CisgCQkJCXN5c3RhYmxlX2VuZHNjYW4oc3NjYW4pOworIAkJCQloZWFwX2Ns b3NlKHJzZWNfcmVsLCBBY2Nlc3NTaGFyZUxvY2spOworIAkJCQlicmVhazsK KyAJCQl9CisgCiAgCQlkZWZhdWx0OgogIAkJCWFwcGVuZFN0cmluZ0luZm8o JmJ1ZmZlciwgInVucmVjb2duaXplZCBvYmplY3QgJXUgJXUgJWQiLAogIAkJ CQkJCQkgb2JqZWN0LT5jbGFzc0lkLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvY2F0YWxvZy9wZ19yb3dzZWN1cml0eS5jIGIvc3JjL2JhY2tlbmQvY2F0 YWxvZy9wZ19yb3dzZWN1cml0eS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IC4uLjI1NzM5ZmYKKioqIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19y b3dzZWN1cml0eS5jCi0tLSBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvcGdfcm93 c2VjdXJpdHkuYwoqKioqKioqKioqKioqKioKKioqIDAgKioqKgotLS0gMSwz MzcgLS0tLQorIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAg KgorICAqIHBnX3Jvd3NlY3VyaXR5LmMKKyAgKiAgICByb3V0aW5lcyB0byBz dXBwb3J0IG1hbmlwdWxhdGlvbiBvZiB0aGUgcGdfcm93c2VjdXJpdHkgY2F0 YWxvZworICAqCisgICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIw MTIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgICog UG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBV bml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAgKgorICAqIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAgKi8KKyAjaW5jbHVkZSAicG9zdGdyZXMu aCIKKyAjaW5jbHVkZSAiYWNjZXNzL2dlbmFtLmgiCisgI2luY2x1ZGUgImFj Y2Vzcy9oZWFwYW0uaCIKKyAjaW5jbHVkZSAiYWNjZXNzL2h0dXBfZGV0YWls cy5oIgorICNpbmNsdWRlICJhY2Nlc3Mvc3lzYXR0ci5oIgorICNpbmNsdWRl ICJjYXRhbG9nL2RlcGVuZGVuY3kuaCIKKyAjaW5jbHVkZSAiY2F0YWxvZy9p bmRleGluZy5oIgorICNpbmNsdWRlICJjYXRhbG9nL3BnX2NsYXNzLmgiCisg I2luY2x1ZGUgImNhdGFsb2cvcGdfcm93c2VjdXJpdHkuaCIKKyAjaW5jbHVk ZSAiY2F0YWxvZy9wZ190eXBlLmgiCisgI2luY2x1ZGUgIm5vZGVzL25vZGVG dW5jcy5oIgorICNpbmNsdWRlICJvcHRpbWl6ZXIvY2xhdXNlcy5oIgorICNp bmNsdWRlICJwYXJzZXIvcGFyc2VfY2xhdXNlLmgiCisgI2luY2x1ZGUgInBh cnNlci9wYXJzZV9ub2RlLmgiCisgI2luY2x1ZGUgInBhcnNlci9wYXJzZV9y ZWxhdGlvbi5oIgorICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgorICNp bmNsdWRlICJ1dGlscy9mbWdyb2lkcy5oIgorICNpbmNsdWRlICJ1dGlscy9p bnZhbC5oIgorICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKKyAjaW5jbHVkZSAi dXRpbHMvc3lzY2FjaGUuaCIKKyAjaW5jbHVkZSAidXRpbHMvdHF1YWwuaCIK KyAKKyAvKgorICAqIExvYWQgcm93LXNlY3VyaXR5IHBvbGljeSBmcm9tIHRo ZSBjYXRhbG9nLCBhbmQga2VlcCBpdCBvbgorICAqIHRoZSByZWxhdGlvbiBj YWNoZS4KKyAgKi8KKyB2b2lkCisgUmVsYXRpb25CdWlsZFJvd1NlY3VyaXR5 KFJlbGF0aW9uIHJlbGF0aW9uKQorIHsKKyAJUmVsYXRpb24JCWNhdGFsb2c7 CisgCVNjYW5LZXlEYXRhCQlza2V5OworIAlTeXNTY2FuRGVzYwkJc3NjYW47 CisgCUhlYXBUdXBsZQkJdHVwbGU7CisgCU1lbW9yeUNvbnRleHQJb2xkY3h0 OworIAlNZW1vcnlDb250ZXh0CXJzY3h0ID0gTlVMTDsKKyAJUm93U2VjdXJp dHlEZXNjCSpyc2Rlc2MgPSBOVUxMOworIAorIAljYXRhbG9nID0gaGVhcF9v cGVuKFJvd1NlY3VyaXR5UmVsYXRpb25JZCwgQWNjZXNzU2hhcmVMb2NrKTsK KyAKKyAJU2NhbktleUluaXQoJnNrZXksCisgCQkJCUFudW1fcGdfcm93c2Vj dXJpdHlfcnNlY3JlbGlkLAorIAkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIs IEZfT0lERVEsCisgCQkJCU9iamVjdElkR2V0RGF0dW0oUmVsYXRpb25HZXRS ZWxpZChyZWxhdGlvbikpKTsKKyAJc3NjYW4gPSBzeXN0YWJsZV9iZWdpbnNj YW4oY2F0YWxvZywgUm93U2VjdXJpdHlSZWxpZEluZGV4SWQsIHRydWUsCisg CQkJCQkJCSAgIFNuYXBzaG90Tm93LCAxLCAmc2tleSk7CisgCVBHX1RSWSgp OworIAl7CisgCQl3aGlsZSAoSGVhcFR1cGxlSXNWYWxpZCh0dXBsZSA9IHN5 c3RhYmxlX2dldG5leHQoc3NjYW4pKSkKKyAJCXsKKyAJCQlEYXR1bQl2YWx1 ZTsKKyAJCQlib29sCWlzbnVsbDsKKyAJCQljaGFyICAgKnRlbXA7CisgCisg CQkJaWYgKCFyc2Rlc2MpCisgCQkJeworIAkJCQlyc2N4dCA9IEFsbG9jU2V0 Q29udGV4dENyZWF0ZShDYWNoZU1lbW9yeUNvbnRleHQsCisgCQkJCQkJCQkJ CQkgICJSb3ctc2VjdXJpdHkgZGVzY3JpcHRvciIsCisgCQkJCQkJCQkJCQkg IEFMTE9DU0VUX1NNQUxMX01JTlNJWkUsCisgCQkJCQkJCQkJCQkgIEFMTE9D U0VUX1NNQUxMX0lOSVRTSVpFLAorIAkJCQkJCQkJCQkJICBBTExPQ1NFVF9T TUFMTF9NQVhTSVpFKTsKKyAJCQkJb2xkY3h0ID0gTWVtb3J5Q29udGV4dFN3 aXRjaFRvKHJzY3h0KTsKKyAJCQkJcnNkZXNjID0gcGFsbG9jMChzaXplb2Yo Um93U2VjdXJpdHlEZXNjKSk7CisgCQkJCXJzZGVzYy0+cnNjeHQgPSByc2N4 dDsKKyAJCQkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN4dCk7CisgCQkJ fQorIAkJCXZhbHVlID0gaGVhcF9nZXRhdHRyKHR1cGxlLCBBbnVtX3BnX3Jv d3NlY3VyaXR5X3JzZWNjbWQsCisgCQkJCQkJCQkgUmVsYXRpb25HZXREZXNj cihjYXRhbG9nKSwgJmlzbnVsbCk7CisgCQkJQXNzZXJ0KCFpc251bGwpOwor IAorIAkJCWlmIChEYXR1bUdldENoYXIodmFsdWUpICE9IFJPV1NFQ1VSSVRZ X0NNRF9BTEwpCisgCQkJeworIAkJCQllcmVwb3J0KFdBUk5JTkcsCisgCQkJ CQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAor IAkJCQkJCSBlcnJtc2coIlBlci1jb21tYW5kIHJvdy1zZWN1cml0eSBub3Qg aW1wbGVtZW50ZWQiKSkpOworIAkJCQljb250aW51ZTsKKyAJCQl9CisgCisg CQkJdmFsdWUgPSBoZWFwX2dldGF0dHIodHVwbGUsIEFudW1fcGdfcm93c2Vj dXJpdHlfcnNlY3F1YWwsCisgCQkJCQkJCQkgUmVsYXRpb25HZXREZXNjcihj YXRhbG9nKSwgJmlzbnVsbCk7CisgCQkJQXNzZXJ0KCFpc251bGwpOworIAkJ CXRlbXAgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKHZhbHVlKTsKKyAKKyAJCQlv bGRjeHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8ocnNjeHQpOworIAkJCXJz ZGVzYy0+cnNhbGwucnNlY2lkID0gSGVhcFR1cGxlR2V0T2lkKHR1cGxlKTsK KyAJCQlyc2Rlc2MtPnJzYWxsLnF1YWwgPSAoRXhwciAqKSBzdHJpbmdUb05v ZGUodGVtcCk7CisgCQkJQXNzZXJ0KGV4cHJUeXBlKChOb2RlICopcnNkZXNj LT5yc2FsbC5xdWFsKSA9PSBCT09MT0lEKTsKKyAJCQlyc2Rlc2MtPnJzYWxs Lmhhc3N1YmxpbmtzCisgCQkJCT0gY29udGFpbl9zdWJwbGFucygoTm9kZSAq KXJzZGVzYy0+cnNhbGwucXVhbCk7CisgCQkJTWVtb3J5Q29udGV4dFN3aXRj aFRvKG9sZGN4dCk7CisgCisgCQkJcGZyZWUodGVtcCk7CisgCQl9CisgCX0K KyAJUEdfQ0FUQ0goKTsKKyAJeworIAkJaWYgKHJzY3h0ICE9IE5VTEwpCisg CQkJTWVtb3J5Q29udGV4dERlbGV0ZShyc2N4dCk7CisgCQlQR19SRV9USFJP VygpOworIAl9CisgCVBHX0VORF9UUlkoKTsKKyAKKyAJc3lzdGFibGVfZW5k c2Nhbihzc2Nhbik7CisgCWhlYXBfY2xvc2UoY2F0YWxvZywgQWNjZXNzU2hh cmVMb2NrKTsKKyAKKyAJcmVsYXRpb24tPnJzZGVzYyA9IHJzZGVzYzsKKyB9 CisgCisgLyoKKyAgKiBQYXJzZSB0aGUgc3VwcGxpZWQgcm93LXNlY3VyaXR5 IHBvbGljeSwgYW5kIGluc2VydC91cGRhdGUgYSByb3cKKyAgKiBvZiBwZ19y b3dzZWN1cml0eSBjYXRhbG9nLgorICAqLworIHN0YXRpYyB2b2lkCisgSW5z ZXJ0T3JVcGRhdGVQb2xpY3lSb3coUmVsYXRpb24gcmVsYXRpb24sIGNoYXIg cnNlY2NtZCwgTm9kZSAqY2xhdXNlKQorIHsKKyAJT2lkCQkJCXJlbGF0aW9u SWQgPSBSZWxhdGlvbkdldFJlbGlkKHJlbGF0aW9uKTsKKyAJT2lkCQkJCXJv d3NlY0lkOworIAlQYXJzZVN0YXRlCSAgICpwc3RhdGU7CisgCVJhbmdlVGJs RW50cnkgICpydGU7CisgCU5vZGUJCSAgICpxdWFsOworIAlSZWxhdGlvbgkJ Y2F0YWxvZzsKKyAJU2NhbktleURhdGEJCXNrZXlzWzJdOworIAlTeXNTY2Fu RGVzYwkJc3NjYW47CisgCUhlYXBUdXBsZQkJb2xkdHVwOworIAlIZWFwVHVw bGUJCW5ld3R1cDsKKyAJRGF0dW0JCQl2YWx1ZXNbTmF0dHNfcGdfcm93c2Vj dXJpdHldOworIAlib29sCQkJaXNudWxsW05hdHRzX3BnX3Jvd3NlY3VyaXR5 XTsKKyAJYm9vbAkJCXJlcGxhY2VzW05hdHRzX3BnX3Jvd3NlY3VyaXR5XTsK KyAJT2JqZWN0QWRkcmVzcwl0YXJnZXQ7CisgCU9iamVjdEFkZHJlc3MJbXlz ZWxmOworIAorIAkvKiBQYXJzZSB0aGUgc3VwcGxpZWQgY2xhdXNlICovCisg CXBzdGF0ZSA9IG1ha2VfcGFyc2VzdGF0ZShOVUxMKTsKKyAKKyAJcnRlID0g YWRkUmFuZ2VUYWJsZUVudHJ5Rm9yUmVsYXRpb24ocHN0YXRlLCByZWxhdGlv biwKKyAJCQkJCQkJCQkJTlVMTCwgZmFsc2UsIGZhbHNlKTsKKyAJYWRkUlRF dG9RdWVyeShwc3RhdGUsIHJ0ZSwgZmFsc2UsIHRydWUsIHRydWUpOworIAor IAlxdWFsID0gdHJhbnNmb3JtV2hlcmVDbGF1c2UocHN0YXRlLCBjb3B5T2Jq ZWN0KGNsYXVzZSksCisgCQkJCQkJCQlFWFBSX0tJTkRfUk9XX1NFQ1VSSVRZ LAorIAkJCQkJCQkJIlJPVyBTRUNVUklUWSIpOworIAkvKiB6ZXJvLWNsZWFy ICovCisgCW1lbXNldCh2YWx1ZXMsICAgMCwgc2l6ZW9mKHZhbHVlcykpOwor IAltZW1zZXQocmVwbGFjZXMsIDAsIHNpemVvZihyZXBsYWNlcykpOworIAlt ZW1zZXQoaXNudWxsLCAgIDAsIHNpemVvZihpc251bGwpKTsKKyAKKyAJLyog VXBkYXRlIG9yIEluc2VydCBhbiBlbnRyeSB0byBwZ19yb3dzZWN1cml0eSBj YXRhbG9nICAqLworIAljYXRhbG9nID0gaGVhcF9vcGVuKFJvd1NlY3VyaXR5 UmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CisgCisgCVNjYW5LZXlJ bml0KCZza2V5c1swXSwKKyAJCQkJQW51bV9wZ19yb3dzZWN1cml0eV9yc2Vj cmVsaWQsCisgCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwK KyAJCQkJT2JqZWN0SWRHZXREYXR1bShSZWxhdGlvbkdldFJlbGlkKHJlbGF0 aW9uKSkpOworIAlTY2FuS2V5SW5pdCgmc2tleXNbMV0sCisgCQkJCUFudW1f cGdfcm93c2VjdXJpdHlfcnNlY2NtZCwKKyAJCQkJQlRFcXVhbFN0cmF0ZWd5 TnVtYmVyLCBGX0NIQVJFUSwKKyAJCQkJQ2hhckdldERhdHVtKHJzZWNjbWQp KTsKKyAJc3NjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4oY2F0YWxvZywgUm93 U2VjdXJpdHlSZWxpZEluZGV4SWQsIHRydWUsCisgCQkJCQkJCSAgIFNuYXBz aG90Tm93LCAyLCBza2V5cyk7CisgCW9sZHR1cCA9IHN5c3RhYmxlX2dldG5l eHQoc3NjYW4pOworIAlpZiAoSGVhcFR1cGxlSXNWYWxpZChvbGR0dXApKQor IAl7CisgCQlyb3dzZWNJZCA9IEhlYXBUdXBsZUdldE9pZChvbGR0dXApOwor IAorIAkJcmVwbGFjZXNbQW51bV9wZ19yb3dzZWN1cml0eV9yc2VjcXVhbCAt IDFdID0gdHJ1ZTsKKyAJCXZhbHVlc1tBbnVtX3BnX3Jvd3NlY3VyaXR5X3Jz ZWNxdWFsIC0gMV0KKyAJCQk9IENTdHJpbmdHZXRUZXh0RGF0dW0obm9kZVRv U3RyaW5nKHF1YWwpKTsKKyAKKyAJCW5ld3R1cCA9IGhlYXBfbW9kaWZ5X3R1 cGxlKG9sZHR1cCwKKyAJCQkJCQkJCSAgIFJlbGF0aW9uR2V0RGVzY3IoY2F0 YWxvZyksCisgCQkJCQkJCQkgICB2YWx1ZXMsIGlzbnVsbCwgcmVwbGFjZXMp OworIAkJc2ltcGxlX2hlYXBfdXBkYXRlKGNhdGFsb2csICZuZXd0dXAtPnRf c2VsZiwgbmV3dHVwKTsKKyAKKyAJCWRlbGV0ZURlcGVuZGVuY3lSZWNvcmRz Rm9yKFJvd1NlY3VyaXR5UmVsYXRpb25JZCwgcm93c2VjSWQsIGZhbHNlKTsK KyAJfQorIAllbHNlCisgCXsKKyAJCXZhbHVlc1tBbnVtX3BnX3Jvd3NlY3Vy aXR5X3JzZWNyZWxpZCAtIDFdCisgCQkJPSBPYmplY3RJZEdldERhdHVtKHJl bGF0aW9uSWQpOworIAkJdmFsdWVzW0FudW1fcGdfcm93c2VjdXJpdHlfcnNl Y2NtZCAtIDFdCisgCQkJPSBDaGFyR2V0RGF0dW0ocnNlY2NtZCk7CisgCQl2 YWx1ZXNbQW51bV9wZ19yb3dzZWN1cml0eV9yc2VjcXVhbCAtIDFdCisgCQkJ PSBDU3RyaW5nR2V0VGV4dERhdHVtKG5vZGVUb1N0cmluZyhxdWFsKSk7Cisg CQluZXd0dXAgPSBoZWFwX2Zvcm1fdHVwbGUoUmVsYXRpb25HZXREZXNjcihj YXRhbG9nKSwKKyAJCQkJCQkJCSB2YWx1ZXMsIGlzbnVsbCk7CisgCQlyb3dz ZWNJZCA9IHNpbXBsZV9oZWFwX2luc2VydChjYXRhbG9nLCBuZXd0dXApOwor IAl9CisgCUNhdGFsb2dVcGRhdGVJbmRleGVzKGNhdGFsb2csIG5ld3R1cCk7 CisgCisgCWhlYXBfZnJlZXR1cGxlKG5ld3R1cCk7CisgCisgCS8qIHJlY29y ZHMgZGVwZW5kZW5jaWVzIG9mIHJvdy1zZWN1cml0eSBwb2xpY3kgYW5kIHJl bGF0aW9uL2NvbHVtbnMgKi8KKyAJdGFyZ2V0LmNsYXNzSWQgPSBSZWxhdGlv blJlbGF0aW9uSWQ7CisgCXRhcmdldC5vYmplY3RJZCA9IHJlbGF0aW9uSWQ7 CisgCXRhcmdldC5vYmplY3RTdWJJZCA9IDA7CisgCisgCW15c2VsZi5jbGFz c0lkID0gUm93U2VjdXJpdHlSZWxhdGlvbklkOworIAlteXNlbGYub2JqZWN0 SWQgPSByb3dzZWNJZDsKKyAJbXlzZWxmLm9iamVjdFN1YklkID0gMDsKKyAK KyAJcmVjb3JkRGVwZW5kZW5jeU9uKCZteXNlbGYsICZ0YXJnZXQsIERFUEVO REVOQ1lfQVVUTyk7CisgCisgCXJlY29yZERlcGVuZGVuY3lPbkV4cHIoJm15 c2VsZiwgcXVhbCwgcHN0YXRlLT5wX3J0YWJsZSwKKyAJCQkJCQkgICBERVBF TkRFTkNZX05PUk1BTCk7CisgCWZyZWVfcGFyc2VzdGF0ZShwc3RhdGUpOwor IAorIAlzeXN0YWJsZV9lbmRzY2FuKHNzY2FuKTsKKyAJaGVhcF9jbG9zZShj YXRhbG9nLCBSb3dFeGNsdXNpdmVMb2NrKTsKKyB9CisgCisgLyoKKyAgKiBS ZW1vdmUgcm93LXNlY3VyaXR5IHBvbGljeSByb3cgb2YgcGdfcm93c2VjdXJp dHkKKyAgKi8KKyBzdGF0aWMgdm9pZAorIERlbGV0ZVBvbGljeVJvdyhSZWxh dGlvbiByZWxhdGlvbiwgY2hhciByc2VjY21kKQorIHsKKyAJQXNzZXJ0KHJz ZWNjbWQgPT0gUk9XU0VDVVJJVFlfQ01EX0FMTCk7CisgCisgCWlmIChyZWxh dGlvbi0+cnNkZXNjKQorIAl7CisgCQlPYmplY3RBZGRyZXNzCWFkZHJlc3M7 CisgCisgCQlhZGRyZXNzLmNsYXNzSWQgPSBSb3dTZWN1cml0eVJlbGF0aW9u SWQ7CisgCQlhZGRyZXNzLm9iamVjdElkID0gcmVsYXRpb24tPnJzZGVzYy0+ cnNhbGwucnNlY2lkOworIAkJYWRkcmVzcy5vYmplY3RTdWJJZCA9IDA7Cisg CisgCQlwZXJmb3JtRGVsZXRpb24oJmFkZHJlc3MsIERST1BfUkVTVFJJQ1Qs IDApOworIAl9CisgCWVsc2UKKyAJeworIAkJLyogTm90aGluZyB0byBkbyBo ZXJlICovCisgCQllbG9nKElORk8sICJyZWxhdGlvbiAlcyBoYXMgbm8gcm93 LXNlY3VyaXR5IHBvbGljeSwgc2tpcHBlZCIsCisgCQkJIFJlbGF0aW9uR2V0 UmVsYXRpb25OYW1lKHJlbGF0aW9uKSk7CisgCX0KKyB9CisgCisgLyoKKyAg KiBHdXRzIG9mIHJvdy1zZWN1cml0eSBwb2xpY3kgZGVsZXRpb24uCisgICov Cisgdm9pZAorIFJlbW92ZVJvd1NlY3VyaXR5QnlJZChPaWQgcm93c2VjSWQp CisgeworIAlSZWxhdGlvbgljYXRhbG9nOworIAlTY2FuS2V5RGF0YQlza2V5 OworIAlTeXNTY2FuRGVzYwlzc2NhbjsKKyAJSGVhcFR1cGxlCXR1cGxlOwor IAlSZWxhdGlvbglyZWw7CisgCU9pZAkJCXJlbGlkOworIAorIAljYXRhbG9n ID0gaGVhcF9vcGVuKFJvd1NlY3VyaXR5UmVsYXRpb25JZCwgUm93RXhjbHVz aXZlTG9jayk7CisgCisgCVNjYW5LZXlJbml0KCZza2V5LAorIAkJCQlPYmpl Y3RJZEF0dHJpYnV0ZU51bWJlciwKKyAJCQkJQlRFcXVhbFN0cmF0ZWd5TnVt YmVyLCBGX09JREVRLAorIAkJCQlPYmplY3RJZEdldERhdHVtKHJvd3NlY0lk KSk7CisgCXNzY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKGNhdGFsb2csIFJv d1NlY3VyaXR5T2lkSW5kZXhJZCwgdHJ1ZSwKKyAJCQkJCQkJICAgU25hcHNo b3ROb3csIDEsICZza2V5KTsKKyAJdHVwbGUgPSBzeXN0YWJsZV9nZXRuZXh0 KHNzY2FuKTsKKyAJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHR1cGxlKSkKKyAJ CWVsb2coRVJST1IsICJjb3VsZCBub3QgZmluZCB0dXBsZSBmb3Igcm93LXNl Y3VyaXR5ICV1Iiwgcm93c2VjSWQpOworIAorIAkvKgorIAkgKiBPcGVuIGFu ZCBleGNsdXNpdmUtbG9jayB0aGUgcmVsYXRpb24gdGhlIHJvdy1zZWN1cml0 eSBiZWxvbmdzIHRvLgorIAkgKi8KKyAJcmVsaWQgPSAoKEZvcm1fcGdfcm93 c2VjdXJpdHkpIEdFVFNUUlVDVCh0dXBsZSkpLT5yc2VjcmVsaWQ7CisgCisg CXJlbCA9IGhlYXBfb3BlbihyZWxpZCwgQWNjZXNzRXhjbHVzaXZlTG9jayk7 CisgCisgCXNpbXBsZV9oZWFwX2RlbGV0ZShjYXRhbG9nLCAmdHVwbGUtPnRf c2VsZik7CisgCisgCS8qIEVuc3VyZSByZWxjYWNoZSBlbnRyaWVzIG9mIG90 aGVyIHNlc3Npb24gYmVpbmcgcmVidWlsdCAqLworIAlDYWNoZUludmFsaWRh dGVSZWxjYWNoZShyZWwpOworIAorIAloZWFwX2Nsb3NlKHJlbCwgTm9Mb2Nr KTsKKyAKKyAJc3lzdGFibGVfZW5kc2Nhbihzc2Nhbik7CisgCWhlYXBfY2xv c2UoY2F0YWxvZywgUm93RXhjbHVzaXZlTG9jayk7CisgfQorIAorIC8qCisg ICogQUxURVIgVEFCTEUgPG5hbWU+IFNFVCBST1cgU0VDVVJJVFkgKC4uLikg T1IKKyAgKiAgICAgICAgICAgICAgICAgICAgUkVTRVQgUk9XIFNFQ1VSSVRZ CisgICovCisgdm9pZAorIEFURXhlY1NldFJvd1NlY3VyaXR5KFJlbGF0aW9u IHJlbGF0aW9uLCBjb25zdCBjaGFyICpjbWRuYW1lLCBOb2RlICpjbGF1c2Up CisgeworIAlPaWQJCQlyZWxpZCA9IFJlbGF0aW9uR2V0UmVsaWQocmVsYXRp b24pOworIAljaGFyCQlyc2VjY21kOworIAorIAlpZiAoc3RyY21wKGNtZG5h bWUsICJhbGwiKSA9PSAwKQorIAkJcnNlY2NtZCA9IFJPV1NFQ1VSSVRZX0NN RF9BTEw7CisgCWVsc2UKKyAJCWVyZXBvcnQoRVJST1IsCisgCQkJCShlcnJj b2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKyAJCQkJIGVy cm1zZygiUm93LXNlY3VyaXR5IGZvciBcIiVzXCIgaXMgbm90IGltcGxlbWVu dGVkIHlldCIsCisgCQkJCQkJY21kbmFtZSkpKTsKKyAKKyAJaWYgKGNsYXVz ZSAhPSBOVUxMKQorIAl7CisgCQlJbnNlcnRPclVwZGF0ZVBvbGljeVJvdyhy ZWxhdGlvbiwgcnNlY2NtZCwgY2xhdXNlKTsKKyAKKyAJCS8qCisgCQkgKiBB bHNvLCB0dXJuIG9uIHJlbGhhc3Jvd3NlY3VyaXR5LCBpZiBub3QuCisgCQkg Ki8KKyAJCWlmICghUmVsYXRpb25HZXRGb3JtKHJlbGF0aW9uKS0+cmVsaGFz cm93c2VjdXJpdHkpCisgCQl7CisgCQkJUmVsYXRpb24JY2xhc3NfcmVsID0g aGVhcF9vcGVuKFJlbGF0aW9uUmVsYXRpb25JZCwKKyAJCQkJCQkJCQkJCSAg Um93RXhjbHVzaXZlTG9jayk7CisgCQkJSGVhcFR1cGxlCXR1cGxlOworIAor IAkJCXR1cGxlID0gU2VhcmNoU3lzQ2FjaGVDb3B5MShSRUxPSUQsIE9iamVj dElkR2V0RGF0dW0ocmVsaWQpKTsKKyAJCQlpZiAoIUhlYXBUdXBsZUlzVmFs aWQodHVwbGUpKQorIAkJCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZh aWxlZCBmb3IgcmVsYXRpb24gJXUiLCByZWxpZCk7CisgCisgCQkJKChGb3Jt X3BnX2NsYXNzKSBHRVRTVFJVQ1QodHVwbGUpKS0+cmVsaGFzcm93c2VjdXJp dHkgPSB0cnVlOworIAorIAkJCXNpbXBsZV9oZWFwX3VwZGF0ZShjbGFzc19y ZWwsICZ0dXBsZS0+dF9zZWxmLCB0dXBsZSk7CisgCQkJQ2F0YWxvZ1VwZGF0 ZUluZGV4ZXMoY2xhc3NfcmVsLCB0dXBsZSk7CisgCisgCQkJaGVhcF9mcmVl dHVwbGUodHVwbGUpOworIAkJCWhlYXBfY2xvc2UoY2xhc3NfcmVsLCBSb3dF eGNsdXNpdmVMb2NrKTsKKyAJCX0KKyAJfQorIAllbHNlCisgCQlEZWxldGVQ b2xpY3lSb3cocmVsYXRpb24sIHJzZWNjbWQpOworIAorIAlDYWNoZUludmFs aWRhdGVSZWxjYWNoZShyZWxhdGlvbik7CisgfQpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvY29tbWFuZHMvY29weS5jIGIvc3JjL2JhY2tlbmQvY29tbWFu ZHMvY29weS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxODE5Y2Mu LjljYjhmMWIKKioqIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvY29weS5jCi0t LSBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHkuYwoqKioqKioqKioqKioq KioKKioqIDI0LDI5ICoqKioKLS0tIDI0LDMwIC0tLS0KICAjaW5jbHVkZSAi YWNjZXNzL2h0dXBfZGV0YWlscy5oIgogICNpbmNsdWRlICJhY2Nlc3Mvc3lz YXR0ci5oIgogICNpbmNsdWRlICJhY2Nlc3MveGFjdC5oIgorICNpbmNsdWRl ICJjYXRhbG9nL2hlYXAuaCIKICAjaW5jbHVkZSAiY2F0YWxvZy9uYW1lc3Bh Y2UuaCIKICAjaW5jbHVkZSAiY2F0YWxvZy9wZ190eXBlLmgiCiAgI2luY2x1 ZGUgImNvbW1hbmRzL2NvcHkuaCIKKioqKioqKioqKioqKioqCioqKiAzNCw0 OCAqKioqCi0tLSAzNSw1MyAtLS0tCiAgI2luY2x1ZGUgImxpYnBxL3BxZm9y bWF0LmgiCiAgI2luY2x1ZGUgIm1iL3BnX3djaGFyLmgiCiAgI2luY2x1ZGUg Im1pc2NhZG1pbi5oIgorICNpbmNsdWRlICJub2Rlcy9tYWtlZnVuY3MuaCIK ICAjaW5jbHVkZSAib3B0aW1pemVyL2NsYXVzZXMuaCIKICAjaW5jbHVkZSAi b3B0aW1pemVyL3BsYW5uZXIuaCIKKyAjaW5jbHVkZSAib3B0aW1pemVyL3Jv d3NlY3VyaXR5LmgiCiAgI2luY2x1ZGUgInBhcnNlci9wYXJzZV9yZWxhdGlv bi5oIgorICNpbmNsdWRlICJwYXJzZXIvcGFyc2V0cmVlLmgiCiAgI2luY2x1 ZGUgInJld3JpdGUvcmV3cml0ZUhhbmRsZXIuaCIKICAjaW5jbHVkZSAic3Rv cmFnZS9mZC5oIgogICNpbmNsdWRlICJ0Y29wL3Rjb3Bwcm90LmgiCiAgI2lu Y2x1ZGUgInV0aWxzL2FjbC5oIgogICNpbmNsdWRlICJ1dGlscy9idWlsdGlu cy5oIgogICNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKKyAjaW5jbHVk ZSAidXRpbHMvc3lzY2FjaGUuaCIKICAjaW5jbHVkZSAidXRpbHMvbWVtdXRp bHMuaCIKICAjaW5jbHVkZSAidXRpbHMvcG9ydGFsLmgiCiAgI2luY2x1ZGUg InV0aWxzL3JlbC5oIgoqKioqKioqKioqKioqKiogRG9Db3B5KGNvbnN0IENv cHlTdG10ICpzdG10LCBjb25zdCBjaGFyIAoqKiogODE0LDgxOSAqKioqCi0t LSA4MTksODM5IC0tLS0KICAJCXJlbCA9IGhlYXBfb3BlbnJ2KHN0bXQtPnJl bGF0aW9uLAogIAkJCQkJCSAgKGlzX2Zyb20gPyBSb3dFeGNsdXNpdmVMb2Nr IDogQWNjZXNzU2hhcmVMb2NrKSk7CiAgCisgCQl0dXBEZXNjID0gUmVsYXRp b25HZXREZXNjcihyZWwpOworIAkJYXR0bnVtcyA9IENvcHlHZXRBdHRudW1z KHR1cERlc2MsIHJlbCwgc3RtdC0+YXR0bGlzdCk7CisgCisgCQkvKgorIAkJ ICogV2UgaGF2ZSB0byBydW4gcmVndWxhciBxdWVyeSwgaWYgdGhlIHRhcmdl dCByZWxhdGlvbiBoYXMKKyAgCQkgKiByb3ctbGV2ZWwgc2VjdXJpdHkgcG9s aWN5CisgCQkgKi8KKyAJCWlmIChjb3B5X3Jvd19zZWN1cml0eV9wb2xpY3ko KENvcHlTdG10ICopc3RtdCwgcmVsLCBhdHRudW1zKSkKKyAJCXsKKyAJCQlo ZWFwX2Nsb3NlKHJlbCwgTm9Mb2NrKTsJLyogY2xvc2Ugd2l0aCBrZWVwaW5n IGxvY2sgKi8KKyAJCQlyZWxpZCA9IEludmFsaWRPaWQ7CisgCQkJcmVsID0g TlVMTDsKKyAJCX0KKyAJCWVsc2UKKyAJCXsKICAJCXJlbGlkID0gUmVsYXRp b25HZXRSZWxpZChyZWwpOwogIAogIAkJcnRlID0gbWFrZU5vZGUoUmFuZ2VU YmxFbnRyeSk7CioqKioqKioqKioqKioqKiBEb0NvcHkoY29uc3QgQ29weVN0 bXQgKnN0bXQsIGNvbnN0IGNoYXIgCioqKiA4MjIsODI5ICoqKioKICAJCXJ0 ZS0+cmVsa2luZCA9IHJlbC0+cmRfcmVsLT5yZWxraW5kOwogIAkJcnRlLT5y ZXF1aXJlZFBlcm1zID0gcmVxdWlyZWRfYWNjZXNzOwogIAotIAkJdHVwRGVz YyA9IFJlbGF0aW9uR2V0RGVzY3IocmVsKTsKLSAJCWF0dG51bXMgPSBDb3B5 R2V0QXR0bnVtcyh0dXBEZXNjLCByZWwsIHN0bXQtPmF0dGxpc3QpOwogIAkJ Zm9yZWFjaChjdXIsIGF0dG51bXMpCiAgCQl7CiAgCQkJaW50CQkJYXR0bm8g PSBsZmlyc3RfaW50KGN1cikgLQotLS0gODQyLDg0NyAtLS0tCioqKioqKioq KioqKioqKiBEb0NvcHkoY29uc3QgQ29weVN0bXQgKnN0bXQsIGNvbnN0IGNo YXIgCioqKiA4MzUsODQwICoqKioKLS0tIDg1Myw4NTkgLS0tLQogIAkJCQly dGUtPnNlbGVjdGVkQ29scyA9IGJtc19hZGRfbWVtYmVyKHJ0ZS0+c2VsZWN0 ZWRDb2xzLCBhdHRubyk7CiAgCQl9CiAgCQlFeGVjQ2hlY2tSVFBlcm1zKGxp c3RfbWFrZTEocnRlKSwgdHJ1ZSk7CisgCQl9CiAgCX0KICAJZWxzZQogIAl7 CioqKioqKioqKioqKioqKiBQcm9jZXNzQ29weU9wdGlvbnMoQ29weVN0YXRl IGNzdGF0ZSwKKioqIDExOTMsMTE5OCAqKioqCi0tLSAxMjEyLDEyNjQgLS0t LQogIH0KICAKICAvKgorICAqIEFkanVzdCBRdWVyeSB0cmVlIGNvbnN0cnVj dGVkIHdpdGggcm93LWxldmVsIHNlY3VyaXR5IGZlYXR1cmUuCisgICogSWYg V0lUSCBPSURTIG9wdGlvbiB3YXMgc3VwcGxpZWQsIGl0IGFkZHMgVmFyIG5v ZGUgdG8gcmVmZXJlbmNlCisgICogb2JqZWN0LWlkIHN5c3RlbSBjb2x1bW4u CisgICovCisgc3RhdGljIHZvaWQKKyBmaXh1cF9vaWRfb2ZfcmxzX3F1ZXJ5 KFF1ZXJ5ICpxdWVyeSkKKyB7CisgCVJhbmdlVGJsRW50cnkgICpzdWJydGU7 CisgCVRhcmdldEVudHJ5CSAgICpzdWJ0bGU7CisgCVZhcgkJCSAgICpzdWJ2 YXI7CisgCUxpc3RDZWxsCSAgICpjZWxsOworIAlGb3JtX3BnX2F0dHJpYnV0 ZQlhdHRmb3JtCisgCQk9IFN5c3RlbUF0dHJpYnV0ZURlZmluaXRpb24oT2Jq ZWN0SWRBdHRyaWJ1dGVOdW1iZXIsIHRydWUpOworIAorIAlzdWJydGUgPSBy dF9mZXRjaCgoSW5kZXgpIDEsIHF1ZXJ5LT5ydGFibGUpOworIAlBc3NlcnQo c3VicnRlLT5ydGVraW5kID09IFJURV9SRUxBVElPTik7CisgCisgCWlmICgh U2VhcmNoU3lzQ2FjaGVFeGlzdHMyKEFUVE5VTSwKKyAJCQkJCQkJICAgT2Jq ZWN0SWRHZXREYXR1bShzdWJydGUtPnJlbGlkKSwKKyAJCQkJCQkJICAgSW50 MTZHZXREYXR1bShhdHRmb3JtLT5hdHRudW0pKSkKKyAJCWVyZXBvcnQoRVJS T1IsCisgCQkJCShlcnJjb2RlKEVSUkNPREVfVU5ERUZJTkVEX0NPTFVNTiks CisgCQkJCSBlcnJtc2coInRhYmxlIFwiJXNcIiBkb2VzIG5vdCBoYXZlIE9J RHMiLAorIAkJCQkJCWdldF9yZWxfbmFtZShzdWJydGUtPnJlbGlkKSkpKTsK KyAKKyAJc3VidmFyID0gbWFrZVZhcigoSW5kZXgpIDEsCisgCQkJCQkgYXR0 Zm9ybS0+YXR0bnVtLAorIAkJCQkJIGF0dGZvcm0tPmF0dHR5cGlkLAorIAkJ CQkJIGF0dGZvcm0tPmF0dHR5cG1vZCwKKyAJCQkJCSBhdHRmb3JtLT5hdHRj b2xsYXRpb24sCisgCQkJCQkgMCk7CisgCXN1YnRsZSA9IG1ha2VUYXJnZXRF bnRyeSgoRXhwciAqKSBzdWJ2YXIsCisgCQkJCQkJCSAwLAorIAkJCQkJCQkg cHN0cmR1cChOYW1lU3RyKGF0dGZvcm0tPmF0dG5hbWUpKSwKKyAJCQkJCQkJ IGZhbHNlKTsKKyAKKyAJcXVlcnktPnRhcmdldExpc3QgPSBsaXN0X2NvbmNh dChsaXN0X21ha2UxKHN1YnRsZSksCisgCQkJCQkJCQkJcXVlcnktPnRhcmdl dExpc3QpOworIAkvKiBhZGp1c3QgcmVzbm8gb2YgVGFyZ2V0RW50cnkgKi8K KyAJZm9yZWFjaCAoY2VsbCwgcXVlcnktPnRhcmdldExpc3QpCisgCXsKKyAJ CXN1YnRsZSA9IGxmaXJzdChjZWxsKTsKKyAJCXN1YnRsZS0+cmVzbm8rKzsK KyAJfQorIH0KKyAKKyAvKgogICAqIENvbW1vbiBzZXR1cCByb3V0aW5lcyB1 c2VkIGJ5IEJlZ2luQ29weUZyb20gYW5kIEJlZ2luQ29weVRvLgogICAqCiAg ICogSWZmIDxiaW5hcnk+LCB1bmxvYWQgb3IgcmVsb2FkIGluIHRoZSBiaW5h cnkgZm9ybWF0LCBhcyBvcHBvc2VkIHRvIHRoZQoqKioqKioqKioqKioqKiog QmVnaW5Db3B5KGJvb2wgaXNfZnJvbSwKKioqIDEyNjQsMTI2OSAqKioqCi0t LSAxMzMwLDEzNTQgLS0tLQogIAkJQXNzZXJ0KCFpc19mcm9tKTsKICAJCWNz dGF0ZS0+cmVsID0gTlVMTDsKICAKKyAJCS8qCisgCQkgKiBJbiBjYXNlIHdo ZW4gcmVndWxhciBDT1BZIFRPIHdhcyByZXBsYWNlZCBiZWNhdXNlIG9mIHJv dy1sZXZlbAorIAkJICogc2VjdXJpdHksICJyYXdfcXVlcnkiIG5vZGUgaGF2 ZSBhbHJlYWR5IGFuYWx5emVkIC8gcmV3cml0dGVuCisgCQkgKiBxdWVyeSB0 cmVlLgorIAkJICovCisgCQlpZiAoSXNBKHJhd19xdWVyeSwgUXVlcnkpKQor IAkJeworIAkJCXF1ZXJ5ID0gKFF1ZXJ5ICopIHJhd19xdWVyeTsKKyAKKyAJ CQlBc3NlcnQocXVlcnktPnF1ZXJ5U291cmNlID09IFFTUkNfUk9XX1NFQ1VS SVRZKTsKKyAJCQlpZiAoY3N0YXRlLT5vaWRzKQorIAkJCXsKKyAJCQkJZml4 dXBfb2lkX29mX3Jsc19xdWVyeShxdWVyeSk7CisgCQkJCWNzdGF0ZS0+b2lk cyA9IGZhbHNlOworIAkJCX0KKyAJCQlhdHRuYW1lbGlzdCA9IE5JTDsKKyAJ CX0KKyAJCWVsc2UKKyAJCXsKICAJCS8qIERvbid0IGFsbG93IENPUFkgdy8g T0lEcyBmcm9tIGEgc2VsZWN0ICovCiAgCQlpZiAoY3N0YXRlLT5vaWRzKQog IAkJCWVyZXBvcnQoRVJST1IsCioqKioqKioqKioqKioqKiBCZWdpbkNvcHko Ym9vbCBpc19mcm9tLAoqKiogMTI4OCwxMjkzICoqKioKLS0tIDEzNzMsMTM3 OSAtLS0tCiAgCQkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgcmV3cml0ZSBy ZXN1bHQiKTsKICAKICAJCXF1ZXJ5ID0gKFF1ZXJ5ICopIGxpbml0aWFsKHJl d3JpdHRlbik7CisgCQl9CiAgCiAgCQkvKiBUaGUgZ3JhbW1hciBhbGxvd3Mg U0VMRUNUIElOVE8sIGJ1dCB3ZSBkb24ndCBzdXBwb3J0IHRoYXQgKi8KICAJ CWlmIChxdWVyeS0+dXRpbGl0eVN0bXQgIT0gTlVMTCAmJgpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jIGIvc3Jj L2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDMyOGUyYTguLjAzNzQ2MjkKKioqIGEvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jCi0tLSBiL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuYwoqKioqKioqKioqKioqKiog RXZlbnRUcmlnZ2VyU3VwcG9ydHNPYmplY3RDbGFzcyhPYmplY3RDbAoqKiog OTkyLDk5NyAqKioqCi0tLSA5OTIsOTk4IC0tLS0KICAJCWNhc2UgT0NMQVNT X1VTRVJfTUFQUElORzoKICAJCWNhc2UgT0NMQVNTX0RFRkFDTDoKICAJCWNh c2UgT0NMQVNTX0VYVEVOU0lPTjoKKyAJCWNhc2UgT0NMQVNTX1JPV1NFQ1VS SVRZOgogIAkJCXJldHVybiB0cnVlOwogIAogIAkJY2FzZSBNQVhfT0NMQVNT OgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRz LmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCBjYjg3ZDkwLi43OWYzZmY0CioqKiBhL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCi0tLSBiL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCioqKioqKioqKioqKioqKgoqKiog MzcsNDIgKioqKgotLS0gMzcsNDMgLS0tLQogICNpbmNsdWRlICJjYXRhbG9n L3BnX2luaGVyaXRzX2ZuLmgiCiAgI2luY2x1ZGUgImNhdGFsb2cvcGdfbmFt ZXNwYWNlLmgiCiAgI2luY2x1ZGUgImNhdGFsb2cvcGdfb3BjbGFzcy5oIgor ICNpbmNsdWRlICJjYXRhbG9nL3BnX3Jvd3NlY3VyaXR5LmgiCiAgI2luY2x1 ZGUgImNhdGFsb2cvcGdfdGFibGVzcGFjZS5oIgogICNpbmNsdWRlICJjYXRh bG9nL3BnX3RyaWdnZXIuaCIKICAjaW5jbHVkZSAiY2F0YWxvZy9wZ190eXBl LmgiCioqKioqKioqKioqKioqKiBBbHRlclRhYmxlR2V0TG9ja0xldmVsKExp c3QgKmNtZHMpCioqKiAyNzg3LDI3OTIgKioqKgotLS0gMjc4OCwyNzk1IC0t LS0KICAJCQljYXNlIEFUX1NldFRhYmxlU3BhY2U6CQkvKiBtdXN0IHJld3Jp dGUgaGVhcCAqLwogIAkJCWNhc2UgQVRfRHJvcE5vdE51bGw6CQkvKiBtYXkg Y2hhbmdlIHNvbWUgU1FMIHBsYW5zICovCiAgCQkJY2FzZSBBVF9TZXROb3RO dWxsOgorIAkJCWNhc2UgQVRfU2V0Um93U2VjdXJpdHk6CisgCQkJY2FzZSBB VF9SZXNldFJvd1NlY3VyaXR5OgogIAkJCWNhc2UgQVRfR2VuZXJpY09wdGlv bnM6CiAgCQkJY2FzZSBBVF9BbHRlckNvbHVtbkdlbmVyaWNPcHRpb25zOgog IAkJCQljbWRfbG9ja21vZGUgPSBBY2Nlc3NFeGNsdXNpdmVMb2NrOwoqKioq KioqKioqKioqKiogQVRQcmVwQ21kKExpc3QgKip3cXVldWUsIFJlbGF0aW9u IHJlbCwgQQoqKiogMzE1NSwzMTYwICoqKioKLS0tIDMxNTgsMzE2NSAtLS0t CiAgCQljYXNlIEFUX0Ryb3BJbmhlcml0OgkvKiBOTyBJTkhFUklUICovCiAg CQljYXNlIEFUX0FkZE9mOgkJCS8qIE9GICovCiAgCQljYXNlIEFUX0Ryb3BP ZjogLyogTk9UIE9GICovCisgCQljYXNlIEFUX1NldFJvd1NlY3VyaXR5Ogor IAkJY2FzZSBBVF9SZXNldFJvd1NlY3VyaXR5OgogIAkJCUFUU2ltcGxlUGVy bWlzc2lvbnMocmVsLCBBVFRfVEFCTEUpOwogIAkJCS8qIFRoZXNlIGNvbW1h bmRzIG5ldmVyIHJlY3Vyc2UgKi8KICAJCQkvKiBObyBjb21tYW5kLXNwZWNp ZmljIHByZXAgbmVlZGVkICovCioqKioqKioqKioqKioqKiBBVEV4ZWNDbWQo TGlzdCAqKndxdWV1ZSwgQWx0ZXJlZFRhYmxlSW5mCioqKiAzNDQwLDM0NDUg KioqKgotLS0gMzQ0NSwzNDU2IC0tLS0KICAJCWNhc2UgQVRfRHJvcE9mOgog IAkJCUFURXhlY0Ryb3BPZihyZWwsIGxvY2ttb2RlKTsKICAJCQlicmVhazsK KyAJCWNhc2UgQVRfU2V0Um93U2VjdXJpdHk6CisgCQkJQVRFeGVjU2V0Um93 U2VjdXJpdHkocmVsLCBjbWQtPm5hbWUsIChOb2RlICopIGNtZC0+ZGVmKTsK KyAJCQlicmVhazsKKyAJCWNhc2UgQVRfUmVzZXRSb3dTZWN1cml0eToKKyAJ CQlBVEV4ZWNTZXRSb3dTZWN1cml0eShyZWwsIGNtZC0+bmFtZSwgTlVMTCk7 CisgCQkJYnJlYWs7CiAgCQljYXNlIEFUX0dlbmVyaWNPcHRpb25zOgogIAkJ CUFURXhlY0dlbmVyaWNPcHRpb25zKHJlbCwgKExpc3QgKikgY21kLT5kZWYp OwogIAkJCWJyZWFrOwoqKioqKioqKioqKioqKiogQVRFeGVjQWx0ZXJDb2x1 bW5UeXBlKEFsdGVyZWRUYWJsZUluZm8gKgoqKiogNzc4OSw3Nzk0ICoqKioK LS0tIDc4MDAsNzgyMSAtLS0tCiAgCQkJCUFzc2VydChkZWZhdWx0ZXhwcik7 CiAgCQkJCWJyZWFrOwogIAorIAkJCWNhc2UgT0NMQVNTX1JPV1NFQ1VSSVRZ OgorIAkJCQkvKgorIAkJCQkgKiBBIHJvdy1sZXZlbCBzZWN1cml0eSBwb2xp Y3kgY2FuIGRlcGVuZCBvbiBhIGNvbHVtbiBpbiBjYXNlCisgCQkJCSAqIHdo ZW4gdGhlIHBvbGljeSBjbGF1c2UgcmVmZXJlbmNlcyBhIHBhcnRpY3VsYXIg Y29sdW1uLgorIAkJCQkgKiBEdWUgdG8gc2FtZSByZWFzb24gd2h5IFRSSUdH RVIgLi4uIFdIRU4gZG9lcyBub3Qgc3VwcG9ydAorIAkJCQkgKiB0byBjaGFu Z2UgY29sdW1uJ3MgdHlwZSBiZWluZyByZWZlcmVuY2VkIGluIGNsYXVzZSwg cm93LQorIAkJCQkgKiBsZXZlbCBzZWN1cml0eSBwb2xpY3kgYWxzbyBkb2Vz IG5vdCBzdXBwb3J0IGl0LgorIAkJCQkgKi8KKyAJCQkJZXJlcG9ydChFUlJP UiwKKyAJCQkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBP UlRFRCksCisgCQkJCQkJIGVycm1zZygiY2Fubm90IGFsdGVyIHR5cGUgb2Yg YSBjb2x1bW4gdXNlZCBpbiBhIHJvdy1sZXZlbCBzZWN1cml0eSBwb2xpY3ki KSwKKyAJCQkJCQkgZXJyZGV0YWlsKCIlcyBkZXBlbmRzIG9uIGNvbHVtbiBc IiVzXCIiLAorIAkJCQkJCQkJICAgZ2V0T2JqZWN0RGVzY3JpcHRpb24oJmZv dW5kT2JqZWN0KSwKKyAJCQkJCQkJCSAgIGNvbE5hbWUpKSk7CisgCQkJCWJy ZWFrOworIAogIAkJCWNhc2UgT0NMQVNTX1BST0M6CiAgCQkJY2FzZSBPQ0xB U1NfVFlQRToKICAJCQljYXNlIE9DTEFTU19DQVNUOgpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvbm9kZXMvY29weWZ1bmNzLmMgYi9zcmMvYmFja2VuZC9u b2Rlcy9jb3B5ZnVuY3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBi Y2M2NDk2Li41YmFmY2I2CioqKiBhL3NyYy9iYWNrZW5kL25vZGVzL2NvcHlm dW5jcy5jCi0tLSBiL3NyYy9iYWNrZW5kL25vZGVzL2NvcHlmdW5jcy5jCioq KioqKioqKioqKioqKiBfY29weUFwcGVuZFJlbEluZm8oY29uc3QgQXBwZW5k UmVsSW5mbyAqCioqKiAxOTM2LDE5NDEgKioqKgotLS0gMTkzNiwxOTQyIC0t LS0KICAKICAJQ09QWV9TQ0FMQVJfRklFTEQocGFyZW50X3JlbGlkKTsKICAJ Q09QWV9TQ0FMQVJfRklFTEQoY2hpbGRfcmVsaWQpOworIAlDT1BZX1NDQUxB Ul9GSUVMRChjaGlsZF9yZXN1bHQpOwogIAlDT1BZX1NDQUxBUl9GSUVMRChw YXJlbnRfcmVsdHlwZSk7CiAgCUNPUFlfU0NBTEFSX0ZJRUxEKGNoaWxkX3Jl bHR5cGUpOwogIAlDT1BZX05PREVfRklFTEQodHJhbnNsYXRlZF92YXJzKTsK KioqKioqKioqKioqKioqIF9jb3B5UmFuZ2VUYmxFbnRyeShjb25zdCBSYW5n ZVRibEVudHJ5ICoKKioqIDE5NzcsMTk4MiAqKioqCi0tLSAxOTc4LDE5ODQg LS0tLQogIAlDT1BZX1NDQUxBUl9GSUVMRChyZWxraW5kKTsKICAJQ09QWV9O T0RFX0ZJRUxEKHN1YnF1ZXJ5KTsKICAJQ09QWV9TQ0FMQVJfRklFTEQoc2Vj dXJpdHlfYmFycmllcik7CisgCUNPUFlfU0NBTEFSX0ZJRUxEKHJvd3NlY19y ZWxpZCk7CiAgCUNPUFlfU0NBTEFSX0ZJRUxEKGpvaW50eXBlKTsKICAJQ09Q WV9OT0RFX0ZJRUxEKGpvaW5hbGlhc3ZhcnMpOwogIAlDT1BZX05PREVfRklF TEQoZnVuY2V4cHIpOwoqKioqKioqKioqKioqKiogX2NvcHlRdWVyeShjb25z dCBRdWVyeSAqZnJvbSkKKioqIDI0NDgsMjQ1MyAqKioqCi0tLSAyNDUwLDI0 NTYgLS0tLQogIAlDT1BZX1NDQUxBUl9GSUVMRChjYW5TZXRUYWcpOwogIAlD T1BZX05PREVfRklFTEQodXRpbGl0eVN0bXQpOwogIAlDT1BZX1NDQUxBUl9G SUVMRChyZXN1bHRSZWxhdGlvbik7CisgCUNPUFlfU0NBTEFSX0ZJRUxEKHNv dXJjZVJlbGF0aW9uKTsKICAJQ09QWV9TQ0FMQVJfRklFTEQoaGFzQWdncyk7 CiAgCUNPUFlfU0NBTEFSX0ZJRUxEKGhhc1dpbmRvd0Z1bmNzKTsKICAJQ09Q WV9TQ0FMQVJfRklFTEQoaGFzU3ViTGlua3MpOwpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvbm9kZXMvZXF1YWxmdW5jcy5jIGIvc3JjL2JhY2tlbmQvbm9k ZXMvZXF1YWxmdW5jcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdm OTczN2UuLjdmZDhmM2QKKioqIGEvc3JjL2JhY2tlbmQvbm9kZXMvZXF1YWxm dW5jcy5jCi0tLSBiL3NyYy9iYWNrZW5kL25vZGVzL2VxdWFsZnVuY3MuYwoq KioqKioqKioqKioqKiogX2VxdWFsQXBwZW5kUmVsSW5mbyhjb25zdCBBcHBl bmRSZWxJbmZvIAoqKiogODA3LDgxMiAqKioqCi0tLSA4MDcsODEzIC0tLS0K ICB7CiAgCUNPTVBBUkVfU0NBTEFSX0ZJRUxEKHBhcmVudF9yZWxpZCk7CiAg CUNPTVBBUkVfU0NBTEFSX0ZJRUxEKGNoaWxkX3JlbGlkKTsKKyAJQ09NUEFS RV9TQ0FMQVJfRklFTEQoY2hpbGRfcmVzdWx0KTsKICAJQ09NUEFSRV9TQ0FM QVJfRklFTEQocGFyZW50X3JlbHR5cGUpOwogIAlDT01QQVJFX1NDQUxBUl9G SUVMRChjaGlsZF9yZWx0eXBlKTsKICAJQ09NUEFSRV9OT0RFX0ZJRUxEKHRy YW5zbGF0ZWRfdmFycyk7CioqKioqKioqKioqKioqKiBfZXF1YWxRdWVyeShj b25zdCBRdWVyeSAqYSwgY29uc3QgUXVlcnkgCioqKiA4NDIsODQ3ICoqKioK LS0tIDg0Myw4NDkgLS0tLQogIAlDT01QQVJFX1NDQUxBUl9GSUVMRChjYW5T ZXRUYWcpOwogIAlDT01QQVJFX05PREVfRklFTEQodXRpbGl0eVN0bXQpOwog IAlDT01QQVJFX1NDQUxBUl9GSUVMRChyZXN1bHRSZWxhdGlvbik7CisgCUNP TVBBUkVfU0NBTEFSX0ZJRUxEKHNvdXJjZVJlbGF0aW9uKTsKICAJQ09NUEFS RV9TQ0FMQVJfRklFTEQoaGFzQWdncyk7CiAgCUNPTVBBUkVfU0NBTEFSX0ZJ RUxEKGhhc1dpbmRvd0Z1bmNzKTsKICAJQ09NUEFSRV9TQ0FMQVJfRklFTEQo aGFzU3ViTGlua3MpOwoqKioqKioqKioqKioqKiogX2VxdWFsUmFuZ2VUYmxF bnRyeShjb25zdCBSYW5nZVRibEVudHJ5IAoqKiogMjIyOCwyMjMzICoqKioK LS0tIDIyMzAsMjIzNiAtLS0tCiAgCUNPTVBBUkVfU0NBTEFSX0ZJRUxEKHJl bGtpbmQpOwogIAlDT01QQVJFX05PREVfRklFTEQoc3VicXVlcnkpOwogIAlD T01QQVJFX1NDQUxBUl9GSUVMRChzZWN1cml0eV9iYXJyaWVyKTsKKyAJQ09N UEFSRV9TQ0FMQVJfRklFTEQocm93c2VjX3JlbGlkKTsKICAJQ09NUEFSRV9T Q0FMQVJfRklFTEQoam9pbnR5cGUpOwogIAlDT01QQVJFX05PREVfRklFTEQo am9pbmFsaWFzdmFycyk7CiAgCUNPTVBBUkVfTk9ERV9GSUVMRChmdW5jZXhw cik7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9ub2Rlcy9ub2RlRnVuY3Mu YyBiL3NyYy9iYWNrZW5kL25vZGVzL25vZGVGdW5jcy5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IGE4OTZkNzYuLjJlZDc5MmYKKioqIGEvc3JjL2Jh Y2tlbmQvbm9kZXMvbm9kZUZ1bmNzLmMKLS0tIGIvc3JjL2JhY2tlbmQvbm9k ZXMvbm9kZUZ1bmNzLmMKKioqKioqKioqKioqKioqIHF1ZXJ5X3RyZWVfd2Fs a2VyKFF1ZXJ5ICpxdWVyeSwKKioqIDE4NzcsMTg4NCAqKioqCiAgCQlyZXR1 cm4gdHJ1ZTsKICAJaWYgKHdhbGtlcigoTm9kZSAqKSBxdWVyeS0+d2l0aENo ZWNrT3B0aW9ucywgY29udGV4dCkpCiAgCQlyZXR1cm4gdHJ1ZTsKISAJaWYg KHdhbGtlcigoTm9kZSAqKSBxdWVyeS0+cmV0dXJuaW5nTGlzdCwgY29udGV4 dCkpCiEgCQlyZXR1cm4gdHJ1ZTsKICAJaWYgKHdhbGtlcigoTm9kZSAqKSBx dWVyeS0+am9pbnRyZWUsIGNvbnRleHQpKQogIAkJcmV0dXJuIHRydWU7CiAg CWlmICh3YWxrZXIocXVlcnktPnNldE9wZXJhdGlvbnMsIGNvbnRleHQpKQot LS0gMTg3NywxODg3IC0tLS0KICAJCXJldHVybiB0cnVlOwogIAlpZiAod2Fs a2VyKChOb2RlICopIHF1ZXJ5LT53aXRoQ2hlY2tPcHRpb25zLCBjb250ZXh0 KSkKICAJCXJldHVybiB0cnVlOwohIAlpZiAoIShmbGFncyAmIFFUV19JR05P UkVfUkVUVVJOSU5HKSkKISAJewohIAkJaWYgKHdhbGtlcigoTm9kZSAqKSBx dWVyeS0+cmV0dXJuaW5nTGlzdCwgY29udGV4dCkpCiEgCQkJcmV0dXJuIHRy dWU7CiEgCX0KICAJaWYgKHdhbGtlcigoTm9kZSAqKSBxdWVyeS0+am9pbnRy ZWUsIGNvbnRleHQpKQogIAkJcmV0dXJuIHRydWU7CiAgCWlmICh3YWxrZXIo cXVlcnktPnNldE9wZXJhdGlvbnMsIGNvbnRleHQpKQoqKioqKioqKioqKioq KiogcXVlcnlfdHJlZV9tdXRhdG9yKFF1ZXJ5ICpxdWVyeSwKKioqIDI2MDMs MjYwOSAqKioqCiAgCiAgCU1VVEFURShxdWVyeS0+dGFyZ2V0TGlzdCwgcXVl cnktPnRhcmdldExpc3QsIExpc3QgKik7CiAgCU1VVEFURShxdWVyeS0+d2l0 aENoZWNrT3B0aW9ucywgcXVlcnktPndpdGhDaGVja09wdGlvbnMsIExpc3Qg Kik7CiEgCU1VVEFURShxdWVyeS0+cmV0dXJuaW5nTGlzdCwgcXVlcnktPnJl dHVybmluZ0xpc3QsIExpc3QgKik7CiAgCU1VVEFURShxdWVyeS0+am9pbnRy ZWUsIHF1ZXJ5LT5qb2ludHJlZSwgRnJvbUV4cHIgKik7CiAgCU1VVEFURShx dWVyeS0+c2V0T3BlcmF0aW9ucywgcXVlcnktPnNldE9wZXJhdGlvbnMsIE5v ZGUgKik7CiAgCU1VVEFURShxdWVyeS0+aGF2aW5nUXVhbCwgcXVlcnktPmhh dmluZ1F1YWwsIE5vZGUgKik7Ci0tLSAyNjA2LDI2MTUgLS0tLQogIAogIAlN VVRBVEUocXVlcnktPnRhcmdldExpc3QsIHF1ZXJ5LT50YXJnZXRMaXN0LCBM aXN0ICopOwogIAlNVVRBVEUocXVlcnktPndpdGhDaGVja09wdGlvbnMsIHF1 ZXJ5LT53aXRoQ2hlY2tPcHRpb25zLCBMaXN0ICopOwohICAJaWYgKCEoZmxh Z3MgJiBRVFdfSUdOT1JFX1JFVFVSTklORykpCiEgIAkJTVVUQVRFKHF1ZXJ5 LT5yZXR1cm5pbmdMaXN0LCBxdWVyeS0+cmV0dXJuaW5nTGlzdCwgTGlzdCAq KTsKISAgCWVsc2UKISAgCQlxdWVyeS0+cmV0dXJuaW5nTGlzdCA9IGNvcHlP YmplY3QocXVlcnktPnJldHVybmluZ0xpc3QpOwogIAlNVVRBVEUocXVlcnkt PmpvaW50cmVlLCBxdWVyeS0+am9pbnRyZWUsIEZyb21FeHByICopOwogIAlN VVRBVEUocXVlcnktPnNldE9wZXJhdGlvbnMsIHF1ZXJ5LT5zZXRPcGVyYXRp b25zLCBOb2RlICopOwogIAlNVVRBVEUocXVlcnktPmhhdmluZ1F1YWwsIHF1 ZXJ5LT5oYXZpbmdRdWFsLCBOb2RlICopOwpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvbm9kZXMvb3V0ZnVuY3MuYyBiL3NyYy9iYWNrZW5kL25vZGVzL291 dGZ1bmNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDhjZDlkYy4u NWI0YmJhZQoqKiogYS9zcmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5jCi0t LSBiL3NyYy9iYWNrZW5kL25vZGVzL291dGZ1bmNzLmMKKioqKioqKioqKioq KioqIF9vdXRBcHBlbmRSZWxJbmZvKFN0cmluZ0luZm8gc3RyLCBjb25zdCAK KioqIDE5MjMsMTkyOCAqKioqCi0tLSAxOTIzLDE5MjkgLS0tLQogIAogIAlX UklURV9VSU5UX0ZJRUxEKHBhcmVudF9yZWxpZCk7CiAgCVdSSVRFX1VJTlRf RklFTEQoY2hpbGRfcmVsaWQpOworIAlXUklURV9VSU5UX0ZJRUxEKGNoaWxk X3Jlc3VsdCk7CiAgCVdSSVRFX09JRF9GSUVMRChwYXJlbnRfcmVsdHlwZSk7 CiAgCVdSSVRFX09JRF9GSUVMRChjaGlsZF9yZWx0eXBlKTsKICAJV1JJVEVf Tk9ERV9GSUVMRCh0cmFuc2xhdGVkX3ZhcnMpOwoqKioqKioqKioqKioqKiog X291dFF1ZXJ5KFN0cmluZ0luZm8gc3RyLCBjb25zdCBRdWVyeSAqbgoqKiog MjIzNywyMjQyICoqKioKLS0tIDIyMzgsMjI0NCAtLS0tCiAgCQlhcHBlbmRT dHJpbmdJbmZvKHN0ciwgIiA6dXRpbGl0eVN0bXQgPD4iKTsKICAKICAJV1JJ VEVfSU5UX0ZJRUxEKHJlc3VsdFJlbGF0aW9uKTsKKyAJV1JJVEVfSU5UX0ZJ RUxEKHNvdXJjZVJlbGF0aW9uKTsKICAJV1JJVEVfQk9PTF9GSUVMRChoYXNB Z2dzKTsKICAJV1JJVEVfQk9PTF9GSUVMRChoYXNXaW5kb3dGdW5jcyk7CiAg CVdSSVRFX0JPT0xfRklFTEQoaGFzU3ViTGlua3MpOwoqKioqKioqKioqKioq KiogX291dFJhbmdlVGJsRW50cnkoU3RyaW5nSW5mbyBzdHIsIGNvbnN0IAoq KiogMjM3MiwyMzc3ICoqKioKLS0tIDIzNzQsMjM4MCAtLS0tCiAgCQljYXNl IFJURV9TVUJRVUVSWToKICAJCQlXUklURV9OT0RFX0ZJRUxEKHN1YnF1ZXJ5 KTsKICAJCQlXUklURV9CT09MX0ZJRUxEKHNlY3VyaXR5X2JhcnJpZXIpOwor IAkJCVdSSVRFX09JRF9GSUVMRChyb3dzZWNfcmVsaWQpOwogIAkJCWJyZWFr OwogIAkJY2FzZSBSVEVfSk9JTjoKICAJCQlXUklURV9FTlVNX0ZJRUxEKGpv aW50eXBlLCBKb2luVHlwZSk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9u b2Rlcy9yZWFkZnVuY3MuYyBiL3NyYy9iYWNrZW5kL25vZGVzL3JlYWRmdW5j cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjOWNiM2UuLjZjMWFm NjgKKioqIGEvc3JjL2JhY2tlbmQvbm9kZXMvcmVhZGZ1bmNzLmMKLS0tIGIv c3JjL2JhY2tlbmQvbm9kZXMvcmVhZGZ1bmNzLmMKKioqKioqKioqKioqKioq IF9yZWFkUXVlcnkodm9pZCkKKioqIDE5OSwyMDQgKioqKgotLS0gMTk5LDIw NSAtLS0tCiAgCVJFQURfQk9PTF9GSUVMRChjYW5TZXRUYWcpOwogIAlSRUFE X05PREVfRklFTEQodXRpbGl0eVN0bXQpOwogIAlSRUFEX0lOVF9GSUVMRChy ZXN1bHRSZWxhdGlvbik7CisgCVJFQURfSU5UX0ZJRUxEKHNvdXJjZVJlbGF0 aW9uKTsKICAJUkVBRF9CT09MX0ZJRUxEKGhhc0FnZ3MpOwogIAlSRUFEX0JP T0xfRklFTEQoaGFzV2luZG93RnVuY3MpOwogIAlSRUFEX0JPT0xfRklFTEQo aGFzU3ViTGlua3MpOwoqKioqKioqKioqKioqKiogX3JlYWRSYW5nZVRibEVu dHJ5KHZvaWQpCioqKiAxMjEzLDEyMTggKioqKgotLS0gMTIxNCwxMjIwIC0t LS0KICAJCWNhc2UgUlRFX1NVQlFVRVJZOgogIAkJCVJFQURfTk9ERV9GSUVM RChzdWJxdWVyeSk7CiAgCQkJUkVBRF9CT09MX0ZJRUxEKHNlY3VyaXR5X2Jh cnJpZXIpOworIAkJCVJFQURfT0lEX0ZJRUxEKHJvd3NlY19yZWxpZCk7CiAg CQkJYnJlYWs7CiAgCQljYXNlIFJURV9KT0lOOgogIAkJCVJFQURfRU5VTV9G SUVMRChqb2ludHlwZSwgSm9pblR5cGUpOwpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jIGIvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAxZTJmYTMuLjE4OTM1MTYKKioqIGEvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BsYW4vcGxhbm5lci5jCi0tLSBiL3NyYy9iYWNrZW5kL29wdGlt aXplci9wbGFuL3BsYW5uZXIuYwoqKioqKioqKioqKioqKioKKioqIDMzLDM4 ICoqKioKLS0tIDMzLDM5IC0tLS0KICAjaW5jbHVkZSAib3B0aW1pemVyL3Bs YW5tYWluLmgiCiAgI2luY2x1ZGUgIm9wdGltaXplci9wbGFubmVyLmgiCiAg I2luY2x1ZGUgIm9wdGltaXplci9wcmVwLmgiCisgI2luY2x1ZGUgIm9wdGlt aXplci9yb3dzZWN1cml0eS5oIgogICNpbmNsdWRlICJvcHRpbWl6ZXIvc3Vi c2VsZWN0LmgiCiAgI2luY2x1ZGUgIm9wdGltaXplci90bGlzdC5oIgogICNp bmNsdWRlICJwYXJzZXIvYW5hbHl6ZS5oIgoqKioqKioqKioqKioqKiogc3Rh bmRhcmRfcGxhbm5lcihRdWVyeSAqcGFyc2UsIGludCBjdXJzbwoqKiogMTc2 LDE4MSAqKioqCi0tLSAxNzcsMTgzIC0tLS0KICAJZ2xvYi0+bGFzdFBISWQg PSAwOwogIAlnbG9iLT5sYXN0Um93TWFya0lkID0gMDsKICAJZ2xvYi0+dHJh bnNpZW50UGxhbiA9IGZhbHNlOworIAlnbG9iLT5wbGFuVXNlcklkID0gSW52 YWxpZE9pZDsKICAKICAJLyogRGV0ZXJtaW5lIHdoYXQgZnJhY3Rpb24gb2Yg dGhlIHBsYW4gaXMgbGlrZWx5IHRvIGJlIHNjYW5uZWQgKi8KICAJaWYgKGN1 cnNvck9wdGlvbnMgJiBDVVJTT1JfT1BUX0ZBU1RfUExBTikKKioqKioqKioq KioqKioqIHN0YW5kYXJkX3BsYW5uZXIoUXVlcnkgKnBhcnNlLCBpbnQgY3Vy c28KKioqIDI1MywyNTggKioqKgotLS0gMjU1LDI2MSAtLS0tCiAgCXJlc3Vs dC0+cmVsYXRpb25PaWRzID0gZ2xvYi0+cmVsYXRpb25PaWRzOwogIAlyZXN1 bHQtPmludmFsSXRlbXMgPSBnbG9iLT5pbnZhbEl0ZW1zOwogIAlyZXN1bHQt Pm5QYXJhbUV4ZWMgPSBnbG9iLT5uUGFyYW1FeGVjOworIAlyZXN1bHQtPnBs YW5Vc2VySWQgPSBnbG9iLT5wbGFuVXNlcklkOwogIAogIAlyZXR1cm4gcmVz dWx0OwogIH0KKioqKioqKioqKioqKioqIHN1YnF1ZXJ5X3BsYW5uZXIoUGxh bm5lckdsb2JhbCAqZ2xvYiwgUXUKKioqIDQwMyw0MDggKioqKgotLS0gNDA2 LDQyNCAtLS0tCiAgCWV4cGFuZF9pbmhlcml0ZWRfdGFibGVzKHJvb3QpOwog IAogIAkvKgorIAkgKiBBcHBseSByb3ctc2VjdXJpdHkgcG9saWN5IG9mIHRo ZSByZWxhdGlvbiBiZWluZyByZWZlcmVuY2VkLAorIAkgKiBpZiBjb25maWd1 cmVkIHdpdGggZWl0aGVyIG9mIGJ1aWx0LWluIG9yIGV4dGVuc2lvbidzIGZl YXR1cmVzLgorIAkgKiBSYW5nZVRibEVudHJ5IG9mIHRoZSByZWxhdGlvbiB3 aXRoIHJvdy1zZWN1cml0eSBwb2xpY3kgc2hhbGwKKyAJICogYmUgcmVwbGFj ZWQgd2l0aCBhIHJvdy1zZWN1cml0eSBzdWJxdWVyeSB0aGF0IGhhcyBzaW1w bGUgc2NhbgorIAkgKiBvbiB0aGUgdGFyZ2V0IHJlbGF0aW9uIHdpdGggcm93 LXNlY3VyaXR5IHBvbGljeSBxdWFsaWZpZXJzLgorIAkgKgorIAkgKiBUaGlz IHJvdXRpbmUgYXNzdW1lcyBQbGFubmVySW5mbyBpcyBhbHJlYWR5IGhhbmRs ZWQgd2l0aAorIAkgKiBleHBhbmRfaW5oZXJpdGVkX3RhYmxlcywgdGh1cywg QXBwZW5kUmVsSW5mbyBvciBQbGFuUm93TWFyaworIAkgKiBoYXZlIHZhbGlk IGluZm9ybWF0aW9uLgorIAkgKi8KKyAJYXBwbHlfcm93X3NlY3VyaXR5X3Bv bGljeShyb290KTsKKyAKKyAJLyoKICAJICogU2V0IGhhc0hhdmluZ1F1YWwg dG8gcmVtZW1iZXIgaWYgSEFWSU5HIGNsYXVzZSBpcyBwcmVzZW50LiAgTmVl ZGVkCiAgCSAqIGJlY2F1c2UgcHJlcHJvY2Vzc19leHByZXNzaW9uIHdpbGwg cmVkdWNlIGEgY29uc3RhbnQtdHJ1ZSBjb25kaXRpb24gdG8KICAJICogYW4g ZW1wdHkgcXVhbCBsaXN0IC4uLiBidXQgIkhBVklORyBUUlVFIiBpcyBub3Qg YSBzZW1hbnRpYyBuby1vcC4KKioqKioqKioqKioqKioqIGluaGVyaXRhbmNl X3BsYW5uZXIoUGxhbm5lckluZm8gKnJvb3QpCioqKiA4ODcsODkyICoqKioK LS0tIDkwMyw5MTAgLS0tLQogIAkJCQkJbmV3cnRpID0gbGlzdF9sZW5ndGgo c3Vicm9vdC5wYXJzZS0+cnRhYmxlKSArIDE7CiAgCQkJCQlDaGFuZ2VWYXJO b2RlcygoTm9kZSAqKSBzdWJyb290LnBhcnNlLCBydGksIG5ld3J0aSwgMCk7 CiAgCQkJCQlDaGFuZ2VWYXJOb2RlcygoTm9kZSAqKSBzdWJyb290LnJvd01h cmtzLCBydGksIG5ld3J0aSwgMCk7CisgCQkJCQlpZiAoc3Vicm9vdC5wYXJz ZS0+c291cmNlUmVsYXRpb24gPT0gcnRpKQorIAkJCQkJCXN1YnJvb3QucGFy c2UtPnNvdXJjZVJlbGF0aW9uID0gbmV3cnRpOwogIAkJCQkJcnRlID0gY29w eU9iamVjdChydGUpOwogIAkJCQkJc3Vicm9vdC5wYXJzZS0+cnRhYmxlID0g bGFwcGVuZChzdWJyb290LnBhcnNlLT5ydGFibGUsCiAgCQkJCQkJCQkJCQkJ CXJ0ZSk7CioqKioqKioqKioqKioqKiBpbmhlcml0YW5jZV9wbGFubmVyKFBs YW5uZXJJbmZvICpyb290KQoqKiogOTUwLDk1NiAqKioqCiAgCQlyb290LT5p bml0X3BsYW5zID0gc3Vicm9vdC5pbml0X3BsYW5zOwogIAogIAkJLyogQnVp bGQgbGlzdCBvZiB0YXJnZXQtcmVsYXRpb24gUlQgaW5kZXhlcyAqLwohIAkJ cmVzdWx0UmVsYXRpb25zID0gbGFwcGVuZF9pbnQocmVzdWx0UmVsYXRpb25z LCBhcHBpbmZvLT5jaGlsZF9yZWxpZCk7CiAgCiAgCQkvKiBCdWlsZCBsaXN0 cyBvZiBwZXItcmVsYXRpb24gV0NPIGFuZCBSRVRVUk5JTkcgdGFyZ2V0bGlz dHMgKi8KICAJCWlmIChwYXJzZS0+d2l0aENoZWNrT3B0aW9ucykKLS0tIDk2 OCw5NzcgLS0tLQogIAkJcm9vdC0+aW5pdF9wbGFucyA9IHN1YnJvb3QuaW5p dF9wbGFuczsKICAKICAJCS8qIEJ1aWxkIGxpc3Qgb2YgdGFyZ2V0LXJlbGF0 aW9uIFJUIGluZGV4ZXMgKi8KISAJCXJlc3VsdFJlbGF0aW9ucyA9IGxhcHBl bmRfaW50KHJlc3VsdFJlbGF0aW9ucywKISAJCQkJCQkJCQkgIChhcHBpbmZv LT5jaGlsZF9yZXN1bHQgPiAwID8KISAJCQkJCQkJCQkgICBhcHBpbmZvLT5j aGlsZF9yZXN1bHQgOgohIAkJCQkJCQkJCSAgIGFwcGluZm8tPmNoaWxkX3Jl bGlkKSk7CiAgCiAgCQkvKiBCdWlsZCBsaXN0cyBvZiBwZXItcmVsYXRpb24g V0NPIGFuZCBSRVRVUk5JTkcgdGFyZ2V0bGlzdHMgKi8KICAJCWlmIChwYXJz ZS0+d2l0aENoZWNrT3B0aW9ucykKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L29wdGltaXplci9wcmVwL3ByZXB0bGlzdC5jIGIvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3ByZXAvcHJlcHRsaXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggZmI2N2Y5ZS4uNGFiZjQzNAoqKiogYS9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvcHJlcC9wcmVwdGxpc3QuYwotLS0gYi9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvcHJlcC9wcmVwdGxpc3QuYwoqKioqKioqKioqKioqKioKKioqIDM3 LDQ0ICoqKioKICAKICAKICBzdGF0aWMgTGlzdCAqZXhwYW5kX3RhcmdldGxp c3QoTGlzdCAqdGxpc3QsIGludCBjb21tYW5kX3R5cGUsCiEgCQkJCSAgSW5k ZXggcmVzdWx0X3JlbGF0aW9uLCBMaXN0ICpyYW5nZV90YWJsZSk7CiAgCiAg CiAgLyoKICAgKiBwcmVwcm9jZXNzX3RhcmdldGxpc3QKLS0tIDM3LDg0IC0t LS0KICAKICAKICBzdGF0aWMgTGlzdCAqZXhwYW5kX3RhcmdldGxpc3QoTGlz dCAqdGxpc3QsIGludCBjb21tYW5kX3R5cGUsCiEgCQkJCUluZGV4IHJlc3Vs dF9yZWxhdGlvbiwgTGlzdCAqcmFuZ2VfdGFibGUpOwogIAorIC8qCisgICog bG9va3VwX3ZhcmF0dG5vCisgICoKKyAgKiBUaGlzIHJvdXRpbmUgcmV0dXJu cyBhbiBhdHRyaWJ1dGUgbnVtYmVyIHRvIHJlZmVyZW5jZSBhIHBhcnRpY3Vs YXIKKyAgKiBhdHRyaWJ1dGUuIEluIGNhc2Ugd2hlbiB0aGUgdGFyZ2V0IHJl bGF0aW9uIGlzIHJlYWxseSByZWxhdGlvbiwKKyAgKiB3ZSBjYW4gcmVmZXJl bmNlIGFyYml0cmFyeSBhdHRyaWJ1dGUgKGluY2x1ZGluZyBzeXN0ZW0gY29s dW1uKQorICAqIHdpdGhvdXQgYW55IHRyYW5zbGF0aW9ucy4gSG93ZXZlciwg d2UgaGF2ZSB0byB0cmFuc2xhdGUgdmFyYXR0bm8KKyAgKiBvZiBWYXIgdGhh dCByZWZlcmVuY2VzIHN1Yi1xdWVyaWVzIGJlaW5nIG9yaWdpbmF0ZWQgZnJv bSByZWd1bGFyCisgICogcmVsYXRpb25zIHdpdGggcm93LWxldmVsIHNlY3Vy aXR5IHBvbGljeSBkdWUgdG8gbmF0dXJlIG9mIHN1Yi1xdWVyeQorICAqIHRo YXQgaGFzIG5vIHN5c3RlbS1jb2x1bW4uCisgICovCisgc3RhdGljIEF0dHJO dW1iZXIKKyBsb29rdXBfdmFyYXR0bm8oQXR0ck51bWJlciBhdHRubywgSW5k ZXggcnRfaW5kZXgsIExpc3QgKnJ0YWJsZXMpCisgeworIAlSYW5nZVRibEVu dHJ5ICAqcnRlID0gcnRfZmV0Y2gocnRfaW5kZXgsIHJ0YWJsZXMpOworIAor IAlpZiAocnRlLT5ydGVraW5kID09IFJURV9TVUJRVUVSWSAmJgorIAkJcnRl LT5zdWJxdWVyeS0+cXVlcnlTb3VyY2UgPT0gUVNSQ19ST1dfU0VDVVJJVFkp CisgCXsKKyAJCUxpc3RDZWxsICAgKmNlbGw7CisgCisgCQlmb3JlYWNoIChj ZWxsLCBydGUtPnN1YnF1ZXJ5LT50YXJnZXRMaXN0KQorIAkJeworIAkJCVRh cmdldEVudHJ5ICp0bGUgPSBsZmlyc3QoY2VsbCk7CisgCQkJVmFyCQkJKnZh cjsKKyAKKyAJCQlpZiAoSXNBKHRsZS0+ZXhwciwgQ29uc3QpKQorIAkJCQlj b250aW51ZTsKKyAKKyAJCQl2YXIgPSAoVmFyICopIHRsZS0+ZXhwcjsKKyAJ CQlBc3NlcnQoSXNBKHZhciwgVmFyKSk7CisgCisgCQkJaWYgKHZhci0+dmFy YXR0bm8gPT0gYXR0bm8pCisgCQkJCXJldHVybiB0bGUtPnJlc25vOworIAkJ fQorIAkJZWxvZyhFUlJPUiwgImludmFsaWQgYXR0bm8gJWQgb24gcm93LXNl Y3VyaXR5IHN1YnF1ZXJ5IHRhcmdldC1saXN0IiwKKyAJCQkgYXR0bm8pOwor IAl9CisgCXJldHVybiBhdHRubzsKKyB9CiAgCiAgLyoKICAgKiBwcmVwcm9j ZXNzX3RhcmdldGxpc3QKKioqKioqKioqKioqKioqIHByZXByb2Nlc3NfdGFy Z2V0bGlzdChQbGFubmVySW5mbyAqcm9vdCwKKioqIDczLDgwICoqKioKICAJ ICogMTAvOTQKICAJICovCiAgCWlmIChjb21tYW5kX3R5cGUgPT0gQ01EX0lO U0VSVCB8fCBjb21tYW5kX3R5cGUgPT0gQ01EX1VQREFURSkKICAJCXRsaXN0 ID0gZXhwYW5kX3RhcmdldGxpc3QodGxpc3QsIGNvbW1hbmRfdHlwZSwKISAJ CQkJCQkJCSAgcmVzdWx0X3JlbGF0aW9uLCByYW5nZV90YWJsZSk7CiAgCiAg CS8qCiAgCSAqIEFkZCBuZWNlc3NhcnkganVuayBjb2x1bW5zIGZvciByb3dt YXJrZWQgcmVscy4gIFRoZXNlIHZhbHVlcyBhcmUgbmVlZGVkCi0tLSAxMTMs MTI1IC0tLS0KICAJICogMTAvOTQKICAJICovCiAgCWlmIChjb21tYW5kX3R5 cGUgPT0gQ01EX0lOU0VSVCB8fCBjb21tYW5kX3R5cGUgPT0gQ01EX1VQREFU RSkKKyAJeworIAkJSW5kZXgJc291cmNlX3JlbGF0aW9uID0gKHBhcnNlLT5z b3VyY2VSZWxhdGlvbiA+IDAgPworIAkJCQkJCQkJICAgcGFyc2UtPnNvdXJj ZVJlbGF0aW9uIDoKKyAJCQkJCQkJCSAgIHJlc3VsdF9yZWxhdGlvbik7CiAg CQl0bGlzdCA9IGV4cGFuZF90YXJnZXRsaXN0KHRsaXN0LCBjb21tYW5kX3R5 cGUsCiEgCQkJCQkJCQkgIHNvdXJjZV9yZWxhdGlvbiwgcmFuZ2VfdGFibGUp OwohIAl9CiAgCiAgCS8qCiAgCSAqIEFkZCBuZWNlc3NhcnkganVuayBjb2x1 bW5zIGZvciByb3dtYXJrZWQgcmVscy4gIFRoZXNlIHZhbHVlcyBhcmUgbmVl ZGVkCioqKioqKioqKioqKioqKiBwcmVwcm9jZXNzX3RhcmdldGxpc3QoUGxh bm5lckluZm8gKnJvb3QsCioqKiA5NiwxMDIgKioqKgogIAkJewogIAkJCS8q IEl0J3MgYSByZWd1bGFyIHRhYmxlLCBzbyBmZXRjaCBpdHMgVElEICovCiAg CQkJdmFyID0gbWFrZVZhcihyYy0+cnRpLAohIAkJCQkJCSAgU2VsZkl0ZW1Q b2ludGVyQXR0cmlidXRlTnVtYmVyLAogIAkJCQkJCSAgVElET0lELAogIAkJ CQkJCSAgLTEsCiAgCQkJCQkJICBJbnZhbGlkT2lkLAotLS0gMTQxLDE0OCAt LS0tCiAgCQl7CiAgCQkJLyogSXQncyBhIHJlZ3VsYXIgdGFibGUsIHNvIGZl dGNoIGl0cyBUSUQgKi8KICAJCQl2YXIgPSBtYWtlVmFyKHJjLT5ydGksCiEg CQkJCQkJICBsb29rdXBfdmFyYXR0bm8oU2VsZkl0ZW1Qb2ludGVyQXR0cmli dXRlTnVtYmVyLAohIAkJCQkJCQkJCQkgIHJjLT5ydGksIHJhbmdlX3RhYmxl KSwKICAJCQkJCQkgIFRJRE9JRCwKICAJCQkJCQkgIC0xLAogIAkJCQkJCSAg SW52YWxpZE9pZCwKKioqKioqKioqKioqKioqIHByZXByb2Nlc3NfdGFyZ2V0 bGlzdChQbGFubmVySW5mbyAqcm9vdCwKKioqIDExMiwxMTggKioqKgogIAkJ CWlmIChyYy0+aXNQYXJlbnQpCiAgCQkJewogIAkJCQl2YXIgPSBtYWtlVmFy KHJjLT5ydGksCiEgCQkJCQkJCSAgVGFibGVPaWRBdHRyaWJ1dGVOdW1iZXIs CiAgCQkJCQkJCSAgT0lET0lELAogIAkJCQkJCQkgIC0xLAogIAkJCQkJCQkg IEludmFsaWRPaWQsCi0tLSAxNTgsMTY1IC0tLS0KICAJCQlpZiAocmMtPmlz UGFyZW50KQogIAkJCXsKICAJCQkJdmFyID0gbWFrZVZhcihyYy0+cnRpLAoh IAkJCQkJCQkgIGxvb2t1cF92YXJhdHRubyhUYWJsZU9pZEF0dHJpYnV0ZU51 bWJlciwKISAJCQkJCQkJCQkJCSAgcmMtPnJ0aSwgcmFuZ2VfdGFibGUpLAog IAkJCQkJCQkgIE9JRE9JRCwKICAJCQkJCQkJICAtMSwKICAJCQkJCQkJICBJ bnZhbGlkT2lkLAoqKioqKioqKioqKioqKiogcHJlcHJvY2Vzc190YXJnZXRs aXN0KFBsYW5uZXJJbmZvICpyb290LAoqKiogMTMwLDEzNiAqKioqCiAgCQkJ LyogTm90IGEgdGFibGUsIHNvIHdlIG5lZWQgdGhlIHdob2xlIHJvdyBhcyBh IGp1bmsgdmFyICovCiAgCQkJdmFyID0gbWFrZVdob2xlUm93VmFyKHJ0X2Zl dGNoKHJjLT5ydGksIHJhbmdlX3RhYmxlKSwKICAJCQkJCQkJCSAgcmMtPnJ0 aSwKISAJCQkJCQkJCSAgMCwKICAJCQkJCQkJCSAgZmFsc2UpOwogIAkJCXNu cHJpbnRmKHJlc25hbWUsIHNpemVvZihyZXNuYW1lKSwgIndob2xlcm93JXUi LCByYy0+cm93bWFya0lkKTsKICAJCQl0bGUgPSBtYWtlVGFyZ2V0RW50cnko KEV4cHIgKikgdmFyLAotLS0gMTc3LDE4MyAtLS0tCiAgCQkJLyogTm90IGEg dGFibGUsIHNvIHdlIG5lZWQgdGhlIHdob2xlIHJvdyBhcyBhIGp1bmsgdmFy ICovCiAgCQkJdmFyID0gbWFrZVdob2xlUm93VmFyKHJ0X2ZldGNoKHJjLT5y dGksIHJhbmdlX3RhYmxlKSwKICAJCQkJCQkJCSAgcmMtPnJ0aSwKISAJCQkJ CQkJCSAgbG9va3VwX3ZhcmF0dG5vKDAsIHJjLT5ydGksIHJhbmdlX3RhYmxl KSwKICAJCQkJCQkJCSAgZmFsc2UpOwogIAkJCXNucHJpbnRmKHJlc25hbWUs IHNpemVvZihyZXNuYW1lKSwgIndob2xlcm93JXUiLCByYy0+cm93bWFya0lk KTsKICAJCQl0bGUgPSBtYWtlVGFyZ2V0RW50cnkoKEV4cHIgKikgdmFyLAoq KioqKioqKioqKioqKiogZXhwYW5kX3RhcmdldGxpc3QoTGlzdCAqdGxpc3Qs IGludCBjb21tYQoqKiogMjk5LDMwNSAqKioqCiAgCQkJCQlpZiAoIWF0dF90 dXAtPmF0dGlzZHJvcHBlZCkKICAJCQkJCXsKICAJCQkJCQluZXdfZXhwciA9 IChOb2RlICopIG1ha2VWYXIocmVzdWx0X3JlbGF0aW9uLAohIAkJCQkJCQkJ CQkJCQlhdHRybm8sCiAgCQkJCQkJCQkJCQkJCWF0dHR5cGUsCiAgCQkJCQkJ CQkJCQkJCWF0dHR5cG1vZCwKICAJCQkJCQkJCQkJCQkJYXR0Y29sbGF0aW9u LAotLS0gMzQ2LDM1NCAtLS0tCiAgCQkJCQlpZiAoIWF0dF90dXAtPmF0dGlz ZHJvcHBlZCkKICAJCQkJCXsKICAJCQkJCQluZXdfZXhwciA9IChOb2RlICop IG1ha2VWYXIocmVzdWx0X3JlbGF0aW9uLAohIAkJCQkJCQkJCQkJCQlsb29r dXBfdmFyYXR0bm8oYXR0cm5vLAohIAkJCQkJCQkJCQkJCQkJcmVzdWx0X3Jl bGF0aW9uLAohIAkJCQkJCQkJCQkJCQkJcmFuZ2VfdGFibGUpLAogIAkJCQkJ CQkJCQkJCQlhdHR0eXBlLAogIAkJCQkJCQkJCQkJCQlhdHR0eXBtb2QsCiAg CQkJCQkJCQkJCQkJCWF0dGNvbGxhdGlvbiwKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL29wdGltaXplci9wcmVwL3ByZXB1bmlvbi5jIGIvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3ByZXAvcHJlcHVuaW9uLmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggZTI0OTYyOC4uMGNiYjAzNQoqKiogYS9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvcHJlcC9wcmVwdW5pb24uYwotLS0gYi9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvcHJlcC9wcmVwdW5pb24uYwoqKioqKioqKioqKioqKiog dHlwZWRlZiBzdHJ1Y3QKKioqIDU1LDYwICoqKioKLS0tIDU1LDYxIC0tLS0K ICB7CiAgCVBsYW5uZXJJbmZvICpyb290OwogIAlBcHBlbmRSZWxJbmZvICph cHBpbmZvOworIAlib29sCQlpbl9yZXR1cm5pbmc7CiAgfSBhZGp1c3RfYXBw ZW5kcmVsX2F0dHJzX2NvbnRleHQ7CiAgCiAgc3RhdGljIFBsYW4gKnJlY3Vy c2Vfc2V0X29wZXJhdGlvbnMoTm9kZSAqc2V0T3AsIFBsYW5uZXJJbmZvICpy b290LAoqKioqKioqKioqKioqKiogYWRqdXN0X2FwcGVuZHJlbF9hdHRycyhQ bGFubmVySW5mbyAqcm9vdAoqKiogMTU5NCwxNTk5ICoqKioKLS0tIDE1OTUs MTYwMSAtLS0tCiAgCiAgCWNvbnRleHQucm9vdCA9IHJvb3Q7CiAgCWNvbnRl eHQuYXBwaW5mbyA9IGFwcGluZm87CisgCWNvbnRleHQuaW5fcmV0dXJuaW5n ID0gZmFsc2U7CiAgCiAgCS8qCiAgCSAqIE11c3QgYmUgcHJlcGFyZWQgdG8g c3RhcnQgd2l0aCBhIFF1ZXJ5IG9yIGEgYmFyZSBleHByZXNzaW9uIHRyZWUu CioqKioqKioqKioqKioqKiBhZGp1c3RfYXBwZW5kcmVsX2F0dHJzKFBsYW5u ZXJJbmZvICpyb290CioqKiAxNjA1LDE2MTQgKioqKgogIAkJbmV3bm9kZSA9 IHF1ZXJ5X3RyZWVfbXV0YXRvcigoUXVlcnkgKikgbm9kZSwKICAJCQkJCQkJ CQkgYWRqdXN0X2FwcGVuZHJlbF9hdHRyc19tdXRhdG9yLAogIAkJCQkJCQkJ CSAodm9pZCAqKSAmY29udGV4dCwKISAJCQkJCQkJCQkgUVRXX0lHTk9SRV9S Q19TVUJRVUVSSUVTKTsKICAJCWlmIChuZXdub2RlLT5yZXN1bHRSZWxhdGlv biA9PSBhcHBpbmZvLT5wYXJlbnRfcmVsaWQpCiAgCQl7CiEgCQkJbmV3bm9k ZS0+cmVzdWx0UmVsYXRpb24gPSBhcHBpbmZvLT5jaGlsZF9yZWxpZDsKICAJ CQkvKiBGaXggdGxpc3QgcmVzbm9zIHRvbywgaWYgaXQncyBpbmhlcml0ZWQg VVBEQVRFICovCiAgCQkJaWYgKG5ld25vZGUtPmNvbW1hbmRUeXBlID09IENN RF9VUERBVEUpCiAgCQkJCW5ld25vZGUtPnRhcmdldExpc3QgPQotLS0gMTYw NywxNjM1IC0tLS0KICAJCW5ld25vZGUgPSBxdWVyeV90cmVlX211dGF0b3Io KFF1ZXJ5ICopIG5vZGUsCiAgCQkJCQkJCQkJIGFkanVzdF9hcHBlbmRyZWxf YXR0cnNfbXV0YXRvciwKICAJCQkJCQkJCQkgKHZvaWQgKikgJmNvbnRleHQs CiEgCQkJCQkJCQkJIFFUV19JR05PUkVfUkNfU1VCUVVFUklFUyB8CiEgCQkJ CQkJCQkJIFFUV19JR05PUkVfUkVUVVJOSU5HKTsKISAJCS8qCiEgCQkgKiBS ZXR1cm5pbmcgY2xhdXNlIG9uIHRoZSByZWxhdGlvbiBiZWluZyByZXBsYWNl ZCB3aXRoIHJvdy0KISAJCSAqIHNlY3VyaXR5IHN1YnF1ZXJ5IHNoYWxsIGJl IGhhbmRsZWQgaW4gYSBzcGVjaWFsIHdheSwgYmVjYXVzZQohIAkJICogb2Yg bm8gc3lzdGVtIGNvbHVtbnMgb24gc3VicXVlcnkuCiEgCQkgKiBWYXIgcmVm ZXJlbmNlcyB0byBzeXN0ZW0gY29sdW1uIG9yIHdob2xlLXJvdyByZWZlcmVu Y2UgbmVlZAohIAkJICogdG8gYmUgYWRqdXN0ZWQgdG8gcmVmZXJlbmNlIGFy dGlmaWNpYWwgY29sdW1ucyBvbiBiZWhhbGYgb2YKISAJCSAqIHRoZSB1bmRl cmx5aW5nIHRoZXNlIGNvbHVtbnMsIGhvd2V2ZXIsIFJFVFVSTkdJTiBjbGF1 c2UgaXMKISAJCSAqIGFuIGV4Y2VwdGlvbiBiZWNhdXNlIGl0cyBWYXIgbm9k ZXMgYXJlIGV2YWx1YXRlZCB0b3dhcmRzCiEgCQkgKiB0aGUgInJhdyIgdGFy Z2V0IHJlbGF0aW9uLCBub3QgYSBmZXRjaGVkIHR1cGxlLgohIAkJICovCiEg CQljb250ZXh0LmluX3JldHVybmluZyA9IHRydWU7CiEgCQluZXdub2RlLT5y ZXR1cm5pbmdMaXN0ID0gKExpc3QgKikKISAJCQlleHByZXNzaW9uX3RyZWVf bXV0YXRvcigoTm9kZSAqKSBuZXdub2RlLT5yZXR1cm5pbmdMaXN0LAohIAkJ CQkJCQkJCWFkanVzdF9hcHBlbmRyZWxfYXR0cnNfbXV0YXRvciwKISAJCQkJ CQkJCQkodm9pZCAqKSAmY29udGV4dCk7CiAgCQlpZiAobmV3bm9kZS0+cmVz dWx0UmVsYXRpb24gPT0gYXBwaW5mby0+cGFyZW50X3JlbGlkKQogIAkJewoh IAkJCW5ld25vZGUtPnJlc3VsdFJlbGF0aW9uID0gKGFwcGluZm8tPmNoaWxk X3Jlc3VsdCA+IDAgPwohIAkJCQkJCQkJCSAgIGFwcGluZm8tPmNoaWxkX3Jl c3VsdCA6CiEgCQkJCQkJCQkJICAgYXBwaW5mby0+Y2hpbGRfcmVsaWQpOwoh IAkJCW5ld25vZGUtPnNvdXJjZVJlbGF0aW9uID0gYXBwaW5mby0+Y2hpbGRf cmVsaWQ7CiAgCQkJLyogRml4IHRsaXN0IHJlc25vcyB0b28sIGlmIGl0J3Mg aW5oZXJpdGVkIFVQREFURSAqLwogIAkJCWlmIChuZXdub2RlLT5jb21tYW5k VHlwZSA9PSBDTURfVVBEQVRFKQogIAkJCQluZXdub2RlLT50YXJnZXRMaXN0 ID0KKioqKioqKioqKioqKioqIGFkanVzdF9hcHBlbmRyZWxfYXR0cnMoUGxh bm5lckluZm8gKnJvb3QKKioqIDE2MjQsMTYyOSAqKioqCi0tLSAxNjQ1LDE2 OTMgLS0tLQogIH0KICAKICBzdGF0aWMgTm9kZSAqCisgZml4dXBfdmFyX29u X3Jvd3NlY19zdWJxdWVyeShSYW5nZVRibEVudHJ5ICpydGUsIFZhciAqdmFy KQorIHsKKyAJTGlzdENlbGwgICAqY2VsbDsKKyAKKyAJQXNzZXJ0KHJ0ZS0+ cnRla2luZCA9PSBSVEVfU1VCUVVFUlkgJiYKKyAJCSAgIHJ0ZS0+c3VicXVl cnktPnF1ZXJ5U291cmNlID09IFFTUkNfUk9XX1NFQ1VSSVRZKTsKKyAJLyoK KyAJICogSW4gY2FzZSB3aGVuIHJvdy1sZXZlbCBzZWN1cml0eSBwb2xpY3kg aXMgYXBwbGllZCBvbiB0aGUgcmVmZXJlbmNlZAorIAkgKiB0YWJsZSwgaXRz IFJhbmdlVGJsRW50cnkgKFJURV9SRUxBVElPTikgaXMgcmVwbGFjZWQgd2l0 aCBzdWItcXVlcnkKKyAJICogdG8gZmlsdGVyIG91dCB1bnByaXZpbGVnZWQg cm93cyBvZiB1bmRlcmx5aW5nIHJlbGF0aW9uLgorIAkgKiBFdmVuIHRob3Vn aCByZWZlcmVuY2UgdG8gdGhpcyBzdWItcXVlcnkgc2hvdWxkIHBlcmZvcm0g YXMgaWYgb25lcworIAkgKiB0byByZWFsIHJlbGF0aW9ucywgc3lzdGVtIGNv bHVtbiBoYXMgdG8gYmUgY2FyZWQgaW4gc3BlY2lhbCB3YXkKKyAJICogZHVl IHRvIHRoZSBuYXR1cmUgb2Ygc3ViLXF1ZXJ5LgorIAkgKiBUYXJnZXQtZW50 cmllcyB0aGF0IHJlZmVyZW5jZSBzeXN0ZW0gY29sdW1ucyBzaG91bGQgYmUg YWRkZWQgb24KKyAJICogcm93bGV2ZWxzZWMuYywgc28gYWxsIHdlIG5lZWQg dG8gZG8gaGVyZSBpcyBsb29raW5nIHVwIHVuZGVybHlpbmcKKyAJICogdGFy Z2V0LWxpc3QgdGhhdCBjYW4gcmVmZXJlbmNlIHVuZGVybHlpbmcgc3lzdGVt IGNvbHVtbiwgYW5kIGZpeC0KKyAJICogdXAgdmFyYXR0bm8gb2YgdGhlIHJl ZmVyZW5jaW5nIFZhciBub2RlIHdpdGggcmVzbm8gb2YgVGFyZ2V0RW50cnku CisgCSAqLworIAlmb3JlYWNoIChjZWxsLCBydGUtPnN1YnF1ZXJ5LT50YXJn ZXRMaXN0KQorIAl7CisgCQlUYXJnZXRFbnRyeSAqc3VidGxlID0gbGZpcnN0 KGNlbGwpOworIAorIAkJaWYgKElzQShzdWJ0bGUtPmV4cHIsIFZhcikpCisg CQl7CisgCQkJVmFyCSAgICpzdWJ2YXIgPSAoVmFyICopIHN1YnRsZS0+ZXhw cjsKKyAJCQlWYXIJICAgKm5ld25vZGU7CisgCisgCQkJaWYgKHN1YnZhci0+ dmFyYXR0bm8gPT0gdmFyLT52YXJhdHRubykKKyAJCQl7CisgCQkJCW5ld25v ZGUgPSBjb3B5T2JqZWN0KHZhcik7CisgCQkJCW5ld25vZGUtPnZhcmF0dG5v ID0gc3VidGxlLT5yZXNubzsKKyAJCQkJcmV0dXJuIChOb2RlICopbmV3bm9k ZTsKKyAJCQl9CisgCQl9CisgCQllbHNlCisgCQkJQXNzZXJ0KElzQShzdWJ0 bGUtPmV4cHIsIENvbnN0KSk7CisgCX0KKyAJZWxvZyhFUlJPUiwgImNvdWxk IG5vdCBmaW5kIGFydGlmaWNpYWwgY29sdW1uIG9mICVkLCByZWxpZCAldSIs CisgCQkgdmFyLT52YXJhdHRubywgdmFyLT52YXJubyk7CisgCXJldHVybiBO VUxMOworIH0KKyAKKyBzdGF0aWMgTm9kZSAqCiAgYWRqdXN0X2FwcGVuZHJl bF9hdHRyc19tdXRhdG9yKE5vZGUgKm5vZGUsCiAgCQkJCQkJCSAgIGFkanVz dF9hcHBlbmRyZWxfYXR0cnNfY29udGV4dCAqY29udGV4dCkKICB7CioqKioq KioqKioqKioqKiBhZGp1c3RfYXBwZW5kcmVsX2F0dHJzX211dGF0b3IoTm9k ZSAqbm9kCioqKiAxNjM4LDE2NDUgKioqKgogIAkJaWYgKHZhci0+dmFybGV2 ZWxzdXAgPT0gMCAmJgogIAkJCXZhci0+dmFybm8gPT0gYXBwaW5mby0+cGFy ZW50X3JlbGlkKQogIAkJewohIAkJCXZhci0+dmFybm8gPSBhcHBpbmZvLT5j aGlsZF9yZWxpZDsKICAJCQl2YXItPnZhcm5vb2xkID0gYXBwaW5mby0+Y2hp bGRfcmVsaWQ7CiAgCQkJaWYgKHZhci0+dmFyYXR0bm8gPiAwKQogIAkJCXsK ICAJCQkJTm9kZQkgICAqbmV3bm9kZTsKLS0tIDE3MDIsMTcxMyAtLS0tCiAg CQlpZiAodmFyLT52YXJsZXZlbHN1cCA9PSAwICYmCiAgCQkJdmFyLT52YXJu byA9PSBhcHBpbmZvLT5wYXJlbnRfcmVsaWQpCiAgCQl7CiEgCQkJdmFyLT52 YXJubyA9IChjb250ZXh0LT5pbl9yZXR1cm5pbmcgJiYKISAJCQkJCQkgIGFw cGluZm8tPmNoaWxkX3Jlc3VsdCA+IDAgPwohIAkJCQkJCSAgYXBwaW5mby0+ Y2hpbGRfcmVzdWx0IDoKISAJCQkJCQkgIGFwcGluZm8tPmNoaWxkX3JlbGlk KTsKICAJCQl2YXItPnZhcm5vb2xkID0gYXBwaW5mby0+Y2hpbGRfcmVsaWQ7 CisgCiAgCQkJaWYgKHZhci0+dmFyYXR0bm8gPiAwKQogIAkJCXsKICAJCQkJ Tm9kZQkgICAqbmV3bm9kZTsKKioqKioqKioqKioqKioqIGFkanVzdF9hcHBl bmRyZWxfYXR0cnNfbXV0YXRvcihOb2RlICpub2QKKioqIDE2NjQsMTY2OSAq KioqCi0tLSAxNzMyLDE3NDUgLS0tLQogIAkJCQkgKi8KICAJCQkJaWYgKE9p ZElzVmFsaWQoYXBwaW5mby0+Y2hpbGRfcmVsdHlwZSkpCiAgCQkJCXsKKyAJ CQkJCVF1ZXJ5ICAgICAgICAgICpwYXJzZSA9IGNvbnRleHQtPnJvb3QtPnBh cnNlOworIAkJCQkJUmFuZ2VUYmxFbnRyeSAgKnJ0ZSA9IHJ0X2ZldGNoKGFw cGluZm8tPmNoaWxkX3JlbGlkLAorIAkJCQkJCQkJCQkJCSAgIHBhcnNlLT5y dGFibGUpOworIAkJCQkJaWYgKCFjb250ZXh0LT5pbl9yZXR1cm5pbmcgJiYK KyAJCQkJCQlydGUtPnJ0ZWtpbmQgPT0gUlRFX1NVQlFVRVJZICYmCisgCQkJ CQkJcnRlLT5zdWJxdWVyeS0+cXVlcnlTb3VyY2UgPT0gUVNSQ19ST1dfU0VD VVJJVFkpCisgCQkJCQkJdmFyID0gKFZhciAqKWZpeHVwX3Zhcl9vbl9yb3dz ZWNfc3VicXVlcnkocnRlLCB2YXIpOworIAogIAkJCQkJQXNzZXJ0KHZhci0+ dmFydHlwZSA9PSBhcHBpbmZvLT5wYXJlbnRfcmVsdHlwZSk7CiAgCQkJCQlp ZiAoYXBwaW5mby0+cGFyZW50X3JlbHR5cGUgIT0gYXBwaW5mby0+Y2hpbGRf cmVsdHlwZSkKICAJCQkJCXsKKioqKioqKioqKioqKioqIGFkanVzdF9hcHBl bmRyZWxfYXR0cnNfbXV0YXRvcihOb2RlICpub2QKKioqIDE3MDgsMTcxNCAq KioqCiAgCQkJCQlyZXR1cm4gKE5vZGUgKikgcm93ZXhwcjsKICAJCQkJfQog IAkJCX0KISAJCQkvKiBzeXN0ZW0gYXR0cmlidXRlcyBkb24ndCBuZWVkIGFu eSBvdGhlciB0cmFuc2xhdGlvbiAqLwogIAkJfQogIAkJcmV0dXJuIChOb2Rl ICopIHZhcjsKICAJfQotLS0gMTc4NCwxODAxIC0tLS0KICAJCQkJCXJldHVy biAoTm9kZSAqKSByb3dleHByOwogIAkJCQl9CiAgCQkJfQohIAkJCWVsc2UK ISAJCQl7CiEgCQkJCVF1ZXJ5CQkgICAqcGFyc2UgPSBjb250ZXh0LT5yb290 LT5wYXJzZTsKISAJCQkJUmFuZ2VUYmxFbnRyeSAgKnJ0ZTsKISAKISAJCQkJ cnRlID0gcnRfZmV0Y2goYXBwaW5mby0+Y2hpbGRfcmVsaWQsIHBhcnNlLT5y dGFibGUpOwohIAohIAkJCQlpZiAoIWNvbnRleHQtPmluX3JldHVybmluZyAm JgohIAkJCQkJcnRlLT5ydGVraW5kID09IFJURV9TVUJRVUVSWSAmJgohIAkJ CQkJcnRlLT5zdWJxdWVyeS0+cXVlcnlTb3VyY2UgPT0gUVNSQ19ST1dfU0VD VVJJVFkpCiEgCQkJCQlyZXR1cm4gZml4dXBfdmFyX29uX3Jvd3NlY19zdWJx dWVyeShydGUsIHZhcik7CiEgCQkJfQogIAkJfQogIAkJcmV0dXJuIChOb2Rl ICopIHZhcjsKICAJfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3V0aWwvTWFrZWZpbGUgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRp bC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYjJkMTZi Li4zZjVjYjE5CioqKiBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL01h a2VmaWxlCi0tLSBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL01ha2Vm aWxlCioqKioqKioqKioqKioqKiB0b3BfYnVpbGRkaXIgPSAuLi8uLi8uLi8u LgoqKiogMTMsMTggKioqKgogIGluY2x1ZGUgJCh0b3BfYnVpbGRkaXIpL3Ny Yy9NYWtlZmlsZS5nbG9iYWwKICAKICBPQkpTID0gY2xhdXNlcy5vIGpvaW5p bmZvLm8gcGF0aG5vZGUubyBwbGFjZWhvbGRlci5vIHBsYW5jYXQubyBwcmVk dGVzdC5vIFwKISAgICAgICAgcmVsbm9kZS5vIHJlc3RyaWN0aW5mby5vIHRs aXN0Lm8gdmFyLm8KICAKICBpbmNsdWRlICQodG9wX3NyY2Rpcikvc3JjL2Jh Y2tlbmQvY29tbW9uLm1rCi0tLSAxMywxOCAtLS0tCiAgaW5jbHVkZSAkKHRv cF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmdsb2JhbAogIAogIE9CSlMgPSBj bGF1c2VzLm8gam9pbmluZm8ubyBwYXRobm9kZS5vIHBsYWNlaG9sZGVyLm8g cGxhbmNhdC5vIHByZWR0ZXN0Lm8gXAohICAgICAgICByZWxub2RlLm8gcmVz dHJpY3RpbmZvLm8gdGxpc3QubyB2YXIubyByb3dzZWN1cml0eS5vCiAgCiAg aW5jbHVkZSAkKHRvcF9zcmNkaXIpL3NyYy9iYWNrZW5kL2NvbW1vbi5tawpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcm93c2Vj dXJpdHkuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3Jvd3NlY3Vy aXR5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggLi4uZDY4NmRmYQoq KiogYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9yb3dzZWN1cml0eS5j Ci0tLSBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3Jvd3NlY3VyaXR5 LmMKKioqKioqKioqKioqKioqCioqKiAwICoqKioKLS0tIDEsNzMzIC0tLS0K KyAvKgorICAqIG9wdGltaXplci91dGlsL3Jvd3NlY3VyaXR5LmMKKyAgKiAg ICBSb3V0aW5lcyB0byBzdXBwb3J0IHJvdy1zZWN1cml0eSBmZWF0dXJlCisg ICoKKyAgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAxMiwgUG9z dGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAgKiBQb3J0aW9u cyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNp dHkgb2YgQ2FsaWZvcm5pYQorICAqLworICNpbmNsdWRlICJwb3N0Z3Jlcy5o IgorIAorICNpbmNsdWRlICJhY2Nlc3MvaGVhcGFtLmgiCisgI2luY2x1ZGUg ImFjY2Vzcy9odHVwX2RldGFpbHMuaCIKKyAjaW5jbHVkZSAiYWNjZXNzL3N5 c2F0dHIuaCIKKyAjaW5jbHVkZSAiY2F0YWxvZy9wZ19jbGFzcy5oIgorICNp bmNsdWRlICJjYXRhbG9nL3BnX2luaGVyaXRzX2ZuLmgiCisgI2luY2x1ZGUg ImNhdGFsb2cvcGdfcm93c2VjdXJpdHkuaCIKKyAjaW5jbHVkZSAiY2F0YWxv Zy9wZ190eXBlLmgiCisgI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorICNpbmNs dWRlICJub2Rlcy9tYWtlZnVuY3MuaCIKKyAjaW5jbHVkZSAibm9kZXMvbm9k ZUZ1bmNzLmgiCisgI2luY2x1ZGUgIm5vZGVzL3BsYW5ub2Rlcy5oIgorICNp bmNsdWRlICJvcHRpbWl6ZXIvY2xhdXNlcy5oIgorICNpbmNsdWRlICJvcHRp bWl6ZXIvcHJlcC5oIgorICNpbmNsdWRlICJvcHRpbWl6ZXIvcm93c2VjdXJp dHkuaCIKKyAjaW5jbHVkZSAicGFyc2VyL3BhcnNldHJlZS5oIgorICNpbmNs dWRlICJyZXdyaXRlL3Jld3JpdGVIYW5kbGVyLmgiCisgI2luY2x1ZGUgInV0 aWxzL2xzeXNjYWNoZS5oIgorICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKKyAj aW5jbHVkZSAidXRpbHMvc3lzY2FjaGUuaCIKKyAjaW5jbHVkZSAidGNvcC91 dGlsaXR5LmgiCisgCisgLyogZmxhZ3MgdG8gcHVsbCByb3ctc2VjdXJpdHkg cG9saWN5ICovCisgI2RlZmluZSBSU0VDX0ZMQUdfSEFTX1NVQkxJTktTCQkJ MHgwMDAxCisgCisgLyogaG9vayB0byBhbGxvdyBleHRlbnNpb25zIHRvIGFw cGx5IHRoZWlyIG93biBzZWN1cml0eSBwb2xpY3kgKi8KKyByb3dfc2VjdXJp dHlfcG9saWN5X2hvb2tfdHlwZQlyb3dfc2VjdXJpdHlfcG9saWN5X2hvb2sg PSBOVUxMOworIAorIC8qCisgICogbWFrZV9hcnRpZmljaWFsX2NvbHVtbgor ICAqCisgICogSXQgbWFrZXMgYSB0YXJnZXQtZW50cnkgbm9kZSB0aGF0IHJl ZmVyZW5jZXMgdW5kZXJseWluZyBjb2x1bW4uCisgICogSXRzIHRsZS0+ZXhw ciBpcyB1c3VhbHkgVmFyIG5vZGUsIGJ1dCBtYXkgYmUgQ29uc3QgZm9yIGR1 bW15IE5VTEwKKyAgKiBpZiB0aGUgc3VwcGxpZWQgYXR0cmlidXRlIHdhcyBh bHJlYWR5IGRyb3BwZWQuCisgICovCisgc3RhdGljIFRhcmdldEVudHJ5ICoK KyBtYWtlX2FydGlmaWNpYWxfY29sdW1uKFJhbmdlVGJsRW50cnkgKnN1YnJ0 ZSwgQXR0ck51bWJlciBhdHRudW0pCisgeworIAlFeHByICAgKmV4cHI7Cisg CWNoYXIgICAqcmVzbmFtZTsKKyAKKyAJQXNzZXJ0KHN1YnJ0ZS0+cnRla2lu ZCA9PSBSVEVfUkVMQVRJT04gJiYgT2lkSXNWYWxpZChzdWJydGUtPnJlbGlk KSk7CisgCWlmIChhdHRudW0gPT0gSW52YWxpZEF0dHJOdW1iZXIpCisgCXsK KyAJCWV4cHIgPSAoRXhwciAqKSBtYWtlV2hvbGVSb3dWYXIoc3VicnRlLCAo SW5kZXgpIDEsIDAsIGZhbHNlKTsKKyAJCXJlc25hbWUgPSBnZXRfcmVsX25h bWUoc3VicnRlLT5yZWxpZCk7CisgCX0KKyAJZWxzZQorIAl7CisgCQlIZWFw VHVwbGUJdHVwbGU7CisgCQlGb3JtX3BnX2F0dHJpYnV0ZQlhdHRmb3JtOwor IAorIAkJdHVwbGUgPSBTZWFyY2hTeXNDYWNoZTIoQVRUTlVNLAorIAkJCQkJ CQkJT2JqZWN0SWRHZXREYXR1bShzdWJydGUtPnJlbGlkKSwKKyAJCQkJCQkJ CUludDE2R2V0RGF0dW0oYXR0bnVtKSk7CisgCQlpZiAoIUhlYXBUdXBsZUlz VmFsaWQodHVwbGUpKQorIAkJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAg ZmFpbGVkIGZvciBhdHRyaWJ1dGUgJWQgb2YgcmVsYXRpb24gJXUiLAorIAkJ CQkgYXR0bnVtLCBzdWJydGUtPnJlbGlkKTsKKyAJCWF0dGZvcm0gPSAoRm9y bV9wZ19hdHRyaWJ1dGUpIEdFVFNUUlVDVCh0dXBsZSk7CisgCisgCQlpZiAo YXR0Zm9ybS0+YXR0aXNkcm9wcGVkKQorIAkJeworIAkJCWNoYXIJbmFtZWJ1 ZltOQU1FREFUQUxFTl07CisgCisgCQkJLyogSW5zZXJ0IE5VTEwganVzdCBm b3IgYSBwbGFjZWhvbGRlciBvZiBkcm9wcGVkIGNvbHVtbiAqLworIAkJCWV4 cHIgPSAoRXhwciAqKSBtYWtlQ29uc3QoSU5UNE9JRCwKKyAJCQkJCQkJCQkg IC0xLAorIAkJCQkJCQkJCSAgSW52YWxpZE9pZCwKKyAJCQkJCQkJCQkgIHNp emVvZihpbnQzMiksCisgCQkJCQkJCQkJICAoRGF0dW0pIDAsCisgCQkJCQkJ CQkJICB0cnVlLAkJLyogaXNudWxsICovCisgCQkJCQkJCQkJICB0cnVlKTsJ LyogYnl2YWwgKi8KKyAJCQlzcHJpbnRmKG5hbWVidWYsICJkdW1teS0lZCIs IChpbnQpYXR0Zm9ybS0+YXR0bnVtKTsKKyAJCQlyZXNuYW1lID0gcHN0cmR1 cChuYW1lYnVmKTsKKyAJCX0KKyAJCWVsc2UKKyAJCXsKKyAJCQlleHByID0g KEV4cHIgKikgbWFrZVZhcigoSW5kZXgpIDEsCisgCQkJCQkJCQkJYXR0Zm9y bS0+YXR0bnVtLAorIAkJCQkJCQkJCWF0dGZvcm0tPmF0dHR5cGlkLAorIAkJ CQkJCQkJCWF0dGZvcm0tPmF0dHR5cG1vZCwKKyAJCQkJCQkJCQlhdHRmb3Jt LT5hdHRjb2xsYXRpb24sCisgCQkJCQkJCQkJMCk7CisgCQkJcmVzbmFtZSA9 IHBzdHJkdXAoTmFtZVN0cihhdHRmb3JtLT5hdHRuYW1lKSk7CisgCQl9Cisg CQlSZWxlYXNlU3lzQ2FjaGUodHVwbGUpOworIAl9CisgCXJldHVybiBtYWtl VGFyZ2V0RW50cnkoZXhwciwgLTEsIHJlc25hbWUsIGZhbHNlKTsKKyB9Cisg CisgLyoKKyAgKiBsb29rdXBfYXJ0aWZpY2lhbF9jb2x1bW4KKyAgKgorICAq IEl0IGxvb2tzLXVwIHJlc291cmNlIG51bWJlciBvZiB0aGUgdGFyZ2V0LWVu dHJ5IHJlbGV2YW50IHRvIHRoZSBnaXZlbgorICAqIFZhci1ub2RlIHRoYXQg cmVmZXJlbmNlcyB0aGUgcm93LXNlY3VyaXR5IHN1YnF1ZXJ5LiBJZiByZXF1 aXJlZCBjb2x1bW4KKyAgKiBpcyBub3QgaW4gdGhlIHN1YnF1ZXJ5J3MgdGFy Z2V0LWxpc3QsIHRoaXMgZnVuY3Rpb24gYWxzbyBhZGRzIG5ldyBvbmUKKyAg KiBhbmQgcmV0dXJucyBpdHMgcmVzb3VyY2UgbnVtYmVyLgorICAqLworIHN0 YXRpYyBBdHRyTnVtYmVyCisgbG9va3VwX2FydGlmaWNpYWxfY29sdW1uKFBs YW5uZXJJbmZvICpyb290LAorIAkJCQkJCSBSYW5nZVRibEVudHJ5ICpydGUs IEF0dHJOdW1iZXIgdmFyYXR0bm8pCisgeworIAlRdWVyeQkJICAgKnN1YnFy eTsKKyAJUmFuZ2VUYmxFbnRyeSAgKnN1YnJ0ZTsKKyAJVGFyZ2V0RW50cnkJ ICAgKnN1YnRsZTsKKyAJTGlzdENlbGwJICAgKmNlbGw7CisgCisgCUFzc2Vy dChydGUtPnJ0ZWtpbmQgPT0gUlRFX1NVQlFVRVJZICYmCisgCQkgICBydGUt PnN1YnF1ZXJ5LT5xdWVyeVNvdXJjZSA9PSBRU1JDX1JPV19TRUNVUklUWSk7 CisgCisgCXN1YnFyeSA9IHJ0ZS0+c3VicXVlcnk7CisgCWZvcmVhY2ggKGNl bGwsIHN1YnFyeS0+dGFyZ2V0TGlzdCkKKyAJeworIAkJc3VidGxlID0gbGZp cnN0KGNlbGwpOworIAorIAkJLyoKKyAJCSAqIElmIHJlZmVyZW5jZWQgYXJ0 aWZpY2FsIGNvbHVtbiBpcyBhbHJlYWR5IGNvbnN0cnVjdGVkIG9uIHRoZQor IAkJICogdGFyZ2V0LWxpc3Qgb2Ygcm93LXNlY3VyaXR5IHN1YnF1ZXJ5LCBu b3RoaW5nIHRvIGRvIGFueSBtb3JlLgorIAkJICovCisgCQlpZiAoSXNBKHN1 YnRsZS0+ZXhwciwgVmFyKSkKKyAJCXsKKyAJCQlWYXIJICAgKnN1YnZhciA9 IChWYXIgKilzdWJ0bGUtPmV4cHI7CisgCisgCQkJQXNzZXJ0KHN1YnZhci0+ dmFybm8gPT0gMSk7CisgCQkJaWYgKHN1YnZhci0+dmFyYXR0bm8gPT0gdmFy YXR0bm8pCisgCQkJCXJldHVybiBzdWJ0bGUtPnJlc25vOworIAkJfQorIAl9 CisgCisgCS8qCisgCSAqIE9LLCB3ZSBkb24ndCBoYXZlIGFuIGFydGlmaWNh bCBjb2x1bW4gcmVsZXZhbnQgdG8gdGhlIHJlcXVpcmVkIG9uZXMsCisgCSAq IHNvIGxldCdzIGNyZWF0ZSBhIG5ldyBhcnRpZmljYWwgY29sdW1uIG9uIGRl bWFuZC4KKyAJICovCisgCXN1YnJ0ZSA9IHJ0X2ZldGNoKChJbmRleCkgMSwg c3VicXJ5LT5ydGFibGUpOworIAlzdWJ0bGUgPSBtYWtlX2FydGlmaWNpYWxf Y29sdW1uKHN1YnJ0ZSwgdmFyYXR0bm8pOworIAlzdWJ0bGUtPnJlc25vID0g bGlzdF9sZW5ndGgoc3VicXJ5LT50YXJnZXRMaXN0KSArIDE7CisgCisgCXN1 YnFyeS0+dGFyZ2V0TGlzdCA9IGxhcHBlbmQoc3VicXJ5LT50YXJnZXRMaXN0 LCBzdWJ0bGUpOworIAlydGUtPmVyZWYtPmNvbG5hbWVzID0gbGFwcGVuZChy dGUtPmVyZWYtPmNvbG5hbWVzLAorIAkJCQkJCQkJICBtYWtlU3RyaW5nKHBz dHJkdXAoc3VidGxlLT5yZXNuYW1lKSkpOworIAlyZXR1cm4gc3VidGxlLT5y ZXNubzsKKyB9CisgCisgLyoKKyAgKiBmaXh1cF92YXJub2RlX3dhbGtlcgor ICAqCisgICogSXQgcmVjdXJzaXZlbHkgZml4ZXMgdXAgcmVmZXJlbmNlcyB0 byB0aGUgcmVsYXRpb24gdG8gYmUgcmVwbGFjZWQgYnkKKyAgKiByb3ctc2Vj dXJpdHkgc3ViLXF1ZXJ5LCBhbmQgYWRkcyBhcnRpZmljaWFsIGNvbHVtbnMg cmVsZXZhbnQgdG8gdGhlCisgICogdW5kZXJseWluZyBzeXN0ZW0gY29sdW1u cyBvciB3aG9sZSByb3ctcmVmZXJlbmNlIG9uIGRlbWFuZC4KKyAgKi8KKyB0 eXBlZGVmIHN0cnVjdCB7CisgCVBsYW5uZXJJbmZvCSpyb290OworIAlpbnQJ CXZhcmxldmVsc3VwOworIAlJbmRleCAgKnZhcnRyYW5zOworIH0gZml4dXBf dmFybm9kZV9jb250ZXh0OworIAorIHN0YXRpYyBib29sCisgZml4dXBfdmFy bm9kZV93YWxrZXIoTm9kZSAqbm9kZSwgZml4dXBfdmFybm9kZV9jb250ZXh0 ICpjb250ZXh0KQorIHsKKyAJaWYgKG5vZGUgPT0gTlVMTCkKKyAJCXJldHVy biBmYWxzZTsKKyAKKyAJaWYgKElzQShub2RlLCBWYXIpKQorIAl7CisgCQlW YXIJCQkgICAqdmFyID0gKFZhciAqKSBub2RlOworIAkJTGlzdAkJICAgKnJ0 YWJsZSA9IGNvbnRleHQtPnJvb3QtPnBhcnNlLT5ydGFibGU7CisgCQlSYW5n ZVRibEVudHJ5ICAqcnRlOworIAkJTGlzdENlbGwJICAgKmNlbGw7CisgCisg CQkvKgorIAkJICogSWdub3JlIGl0LCBpZiBWYXIgbm9kZSBkb2VzIG5vdCBy ZWZlcmVuY2UgdGhlIFF1ZXJ5IGN1cnJlbnRseQorIAkJICogd2UgZm9jdWVz IG9uLgorIAkJICovCisgCQlpZiAodmFyLT52YXJsZXZlbHN1cCAhPSBjb250 ZXh0LT52YXJsZXZlbHN1cCkKKyAJCQlyZXR1cm4gZmFsc2U7CisgCisgCQkv KgorIAkJICogVmFyIG5vZGVzIHRoYXQgcmVmZXJlbmNlIHRoZSByZWxhdGlv biBiZWluZyByZXBsYWNlZCBieSByb3ctCisgCQkgKiBzZWN1cml0eSBzdWIt cXVlcnkgaGFzIHRvIGJlIGFkanVzdGVkOyB0byByZWZlcmVuY2UgdGhlIHN1 Yi0KKyAJCSAqIHF1ZXJ5LCBpbnN0ZWFkIG9mIHRoZSBvcmlnaW5hbCByZWxh dGlvbi4KKyAJCSAqLworIAkJaWYgKGNvbnRleHQtPnZhcnRyYW5zW3Zhci0+ dmFybm9dICE9IDApCisgCQl7CisgCQkJcnRlID0gcnRfZmV0Y2goY29udGV4 dC0+dmFydHJhbnNbdmFyLT52YXJub10sIHJ0YWJsZSk7CisgCQkJaWYgKHJ0 ZS0+cnRla2luZCA9PSBSVEVfU1VCUVVFUlkgJiYKKyAJCQkJcnRlLT5zdWJx dWVyeS0+cXVlcnlTb3VyY2UgPT0gUVNSQ19ST1dfU0VDVVJJVFkpCisgCQkJ eworIAkJCQl2YXItPnZhcm5vID0gdmFyLT52YXJub29sZCA9IGNvbnRleHQt PnZhcnRyYW5zW3Zhci0+dmFybm9dOworIAkJCQl2YXItPnZhcmF0dG5vID0g bG9va3VwX2FydGlmaWNpYWxfY29sdW1uKGNvbnRleHQtPnJvb3QsCisgCQkJ CQkJCQkJCQkJCQkgcnRlLCB2YXItPnZhcmF0dG5vKTsKKyAJCQl9CisgCQl9 CisgCQllbHNlCisgCQl7CisgCQkJcnRlID0gcnRfZmV0Y2godmFyLT52YXJu bywgcnRhYmxlKTsKKyAJCQlpZiAoIXJ0ZS0+aW5oKQorIAkJCQlyZXR1cm4g ZmFsc2U7CisgCisgCQkJZm9yZWFjaCAoY2VsbCwgY29udGV4dC0+cm9vdC0+ YXBwZW5kX3JlbF9saXN0KQorIAkJCXsKKyAJCQkJQXBwZW5kUmVsSW5mbyAg KmFwcGluZm8gPSBsZmlyc3QoY2VsbCk7CisgCQkJCVJhbmdlVGJsRW50cnkg ICpjaGlsZF9ydGU7CisgCisgCQkJCWlmIChhcHBpbmZvLT5wYXJlbnRfcmVs aWQgIT0gdmFyLT52YXJubykKKyAJCQkJCWNvbnRpbnVlOworIAorIAkJCQlp ZiAodmFyLT52YXJhdHRubyA+IEludmFsaWRBdHRyTnVtYmVyKQorIAkJCQkJ Y29udGludWU7CisgCisgCQkJCWNoaWxkX3J0ZSA9IHJ0X2ZldGNoKGFwcGlu Zm8tPmNoaWxkX3JlbGlkLCBydGFibGUpOworIAkJCQlpZiAoY2hpbGRfcnRl LT5ydGVraW5kID09IFJURV9TVUJRVUVSWSAmJgorIAkJCQkJY2hpbGRfcnRl LT5zdWJxdWVyeS0+cXVlcnlTb3VyY2UgPT0gUVNSQ19ST1dfU0VDVVJJVFkp CisgCQkJCQkodm9pZCkgbG9va3VwX2FydGlmaWNpYWxfY29sdW1uKGNvbnRl eHQtPnJvb3QsCisgCQkJCQkJCQkJCQkJCWNoaWxkX3J0ZSwKKyAJCQkJCQkJ CQkJCQkJdmFyLT52YXJhdHRubyk7CisgCQkJfQorIAkJfQorIAl9CisgCWVs c2UgaWYgKElzQShub2RlLCBSYW5nZVRibFJlZikpCisgCXsKKyAJCVJhbmdl VGJsUmVmICAqcnRyID0gKFJhbmdlVGJsUmVmICopIG5vZGU7CisgCisgCQlp ZiAoY29udGV4dC0+dmFybGV2ZWxzdXAgPT0gMCAmJgorIAkJCWNvbnRleHQt PnZhcnRyYW5zW3J0ci0+cnRpbmRleF0gIT0gMCkKKyAJCQlydHItPnJ0aW5k ZXggPSBjb250ZXh0LT52YXJ0cmFuc1tydHItPnJ0aW5kZXhdOworIAl9Cisg CWVsc2UgaWYgKElzQShub2RlLCBRdWVyeSkpCisgCXsKKyAJCWJvb2wJcmVz dWx0OworIAorIAkJY29udGV4dC0+dmFybGV2ZWxzdXArKzsKKyAJCXJlc3Vs dCA9IHF1ZXJ5X3RyZWVfd2Fsa2VyKChRdWVyeSAqKSBub2RlLAorIAkJCQkJ CQkJICAgZml4dXBfdmFybm9kZV93YWxrZXIsCisgCQkJCQkJCQkgICAodm9p ZCAqKSBjb250ZXh0LCAwKTsKKyAJCWNvbnRleHQtPnZhcmxldmVsc3VwLS07 CisgCisgCQlyZXR1cm4gcmVzdWx0OworIAl9CisgCXJldHVybiBleHByZXNz aW9uX3RyZWVfd2Fsa2VyKG5vZGUsCisgCQkJCQkJCQkgIGZpeHVwX3Zhcm5v ZGVfd2Fsa2VyLAorIAkJCQkJCQkJICAodm9pZCAqKSBjb250ZXh0KTsKKyB9 CisgCisgLyoKKyAgKiBjaGVja19pbmZpbml0ZV9yZWN1cnNpb24KKyAgKgor ICAqIEl0IGlzIGEgd3Jvbmcgcm93LXNlY3VyaXR5IGNvbmZpZ3VyYXRpb24s IGlmIHdlIHRyeSB0byBleHBhbmQKKyAgKiB0aGUgcmVsYXRpb24gaW5zaWRl IG9mIHJvdy1zZWN1cml0eSBzdWJxdWVyeSBvcmlnaW5hdGVkIGZyb20KKyAg KiBzYW1lIHJlbGF0aW9uIQorICAqLworIHN0YXRpYyB2b2lkCisgY2hlY2tf aW5maW5pdGVfcmVjdXJzaW9uKFBsYW5uZXJJbmZvICpyb290LCBPaWQgcmVs aWQpCisgeworIAlQbGFubmVySW5mbwkgICAqcGFyZW50ID0gcm9vdC0+cGFy ZW50X3Jvb3Q7CisgCisgCWlmIChwYXJlbnQgJiYgcGFyZW50LT5wYXJzZS0+ cXVlcnlTb3VyY2UgPT0gUVNSQ19ST1dfU0VDVVJJVFkpCisgCXsKKyAJCVJh bmdlVGJsRW50cnkgICpydGUgPSBydF9mZXRjaCgxLCBwYXJlbnQtPnBhcnNl LT5ydGFibGUpOworIAorIAkJQXNzZXJ0KHJ0ZS0+cnRla2luZCA9PSBSVEVf UkVMQVRJT04gJiYgT2lkSXNWYWxpZChydGUtPnJlbGlkKSk7CisgCisgCQlp ZiAocmVsaWQgPT0gcnRlLT5yZWxpZCkKKyAJCQllcmVwb3J0KEVSUk9SLAor IAkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX09CSkVDVF9ERUZJTklU SU9OKSwKKyAJCQkJCSBlcnJtc2coImluZmluaXRlIHJlY3Vyc2lvbiBkZXRl Y3RlZCBmb3IgcmVsYXRpb24gXCIlc1wiIiwKKyAJCQkJCQkJZ2V0X3JlbF9u YW1lKHJlbGlkKSkpKTsKKyAJCWNoZWNrX2luZmluaXRlX3JlY3Vyc2lvbihw YXJlbnQsIHJlbGlkKTsKKyAJfQorIH0KKyAKKyAvKgorICAqIGV4cGFuZF9y dGVudHJ5X3dpdGhfcG9saWN5CisgICoKKyAgKiBJdCBleHRlbmRzIGEgcmFu Z2UtdGFibGUgZW50cnkgb2Ygcm93LXNlY3VyaXR5IHN1Yi1xdWVyeSB3aXRo IHN1cHBsaWVkCisgICogc2VjdXJpdHkgcG9saWN5LCBhbmQgYXBwZW5kIGl0 IG9uIHRoZSBwYXJzZS0+cnRhYmxlLgorICAqIFRoaXMgc3ViLXF1ZXJ5IGNv bnRhaW5zIGFydGlmaWNpYWwgY29sdW1ucyB0aGF0IHJlZmVyZW5jZSB1bmRl cmx5aW5nCisgICogcmVndWxhciBjb2x1bW5zIChhdCBsZWFzdCwgcmVmZXJl bmNlcyB0byBzeXN0ZW0gY29sdW1uIG9yIHdob2xlIG9mCisgICogdGFibGUg cmVmZXJlbmNlIHNoYWxsIGJlIGFkZGVkIG9uIGRlbWFuZCksIGFuZCBzaW1w bGUgc2NhbiBvbiB0aGUKKyAgKiB0YXJnZXQgcmVsYXRpb24uCisgICogQW55 IFZhciBub2RlcyB0aGF0IHJlZmVyZW5jZWQgdGhlIHJlbGF0aW9uIHBvaW50 ZWQgYnkgcnRpbmRleCBzaGFsbAorICAqIGJlIGFkanVzdGVkIHRvIHJlZmVy ZW5jZSB0aGlzIHN1Yi1xdWVyeSBpbnN0ZWFkLiB3YWxrZXIKKyAgKgorICAq LworIHN0YXRpYyBJbmRleAorIGV4cGFuZF9ydGVudHJ5X3dpdGhfcG9saWN5 KFBsYW5uZXJJbmZvICpyb290LCBJbmRleCBydGluZGV4LAorIAkJCQkJCSAg IEV4cHIgKnF1YWwsIGludCBmbGFncykKKyB7CisgCVF1ZXJ5CQkgICAqcGFy c2UgPSByb290LT5wYXJzZTsKKyAJUmFuZ2VUYmxFbnRyeSAgKnJ0ZSA9IHJ0 X2ZldGNoKHJ0aW5kZXgsIHBhcnNlLT5ydGFibGUpOworIAlRdWVyeQkJICAg KnN1YnFyeTsKKyAJUmFuZ2VUYmxFbnRyeSAgKnN1YnJ0ZTsKKyAJUmFuZ2VU YmxSZWYJICAgKnN1YnJ0cjsKKyAJVGFyZ2V0RW50cnkJICAgKnN1YnRsZTsK KyAJUmFuZ2VUYmxFbnRyeSAgKm5ld3J0ZTsKKyAJSGVhcFR1cGxlCQl0dXBs ZTsKKyAJQXR0ck51bWJlcgkJbmF0dHJzOworIAlBdHRyTnVtYmVyCQlhdHRu dW07CisgCUxpc3QJCSAgICp0YXJnZXRMaXN0ID0gTklMOworIAlMaXN0CQkg ICAqY29sTmFtZUxpc3QgPSBOSUw7CisgCVBsYW5Sb3dNYXJrCSAgICpyb3dt YXJrOworIAorIAlBc3NlcnQocnRlLT5ydGVraW5kID09IFJURV9SRUxBVElP TiAmJiAhcnRlLT5pbmgpOworIAorIAkvKiBjaGVjayByZWN1cnNpb24gdG8g cHJldmVudCBpbmZpbml0ZSBsb29wICovCisgCWNoZWNrX2luZmluaXRlX3Jl Y3Vyc2lvbihyb290LCBydGUtPnJlbGlkKTsKKyAKKyAJLyogRXhwYW5kIHZp ZXdzIGluc2lkZSBTdWJMaW5rIG5vZGUgKi8KKyAJaWYgKGZsYWdzICYgUlNF Q19GTEFHX0hBU19TVUJMSU5LUykKKyAJCVF1ZXJ5UmV3cml0ZUV4cHIoKE5v ZGUgKilxdWFsLCBsaXN0X21ha2UxX29pZChydGUtPnJlbGlkKSk7CisgCisg CS8qCisgCSAqIENvbnN0cnVjdGlvbiBvZiBzdWItcXVlcnkKKyAJICovCisg CXN1YnFyeSA9IChRdWVyeSAqKSBtYWtlTm9kZShRdWVyeSk7CisgCXN1YnFy eS0+Y29tbWFuZFR5cGUgPSBDTURfU0VMRUNUOworIAlzdWJxcnktPnF1ZXJ5 U291cmNlID0gUVNSQ19ST1dfU0VDVVJJVFk7CisgCisgCXN1YnJ0ZSA9IGNv cHlPYmplY3QocnRlKTsKKyAJc3VicXJ5LT5ydGFibGUgPSBsaXN0X21ha2Ux KHN1YnJ0ZSk7CisgCisgCXN1YnJ0ciA9IG1ha2VOb2RlKFJhbmdlVGJsUmVm KTsKKyAJc3VicnRyLT5ydGluZGV4ID0gMTsKKyAJc3VicXJ5LT5qb2ludHJl ZSA9IG1ha2VGcm9tRXhwcihsaXN0X21ha2UxKHN1YnJ0ciksIChOb2RlICop IHF1YWwpOworIAlpZiAoZmxhZ3MgJiBSU0VDX0ZMQUdfSEFTX1NVQkxJTktT KQorIAkJc3VicXJ5LT5oYXNTdWJMaW5rcyA9IHRydWU7CisgCisgCS8qCisg CSAqIENvbnN0cnVjdGlvbiBvZiBUYXJnZXRFbnRyaWVzIHRoYXQgcmVmZXJl bmNlIHVuZGVybHlpbmcgY29sdW1ucy4KKyAJICovCisgCXR1cGxlID0gU2Vh cmNoU3lzQ2FjaGUxKFJFTE9JRCwgT2JqZWN0SWRHZXREYXR1bShydGUtPnJl bGlkKSk7CisgCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0dXBsZSkpCisgCQll bG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcmVsYXRpb24g JXUiLCBydGUtPnJlbGlkKTsKKyAJbmF0dHJzID0gKChGb3JtX3BnX2NsYXNz KSBHRVRTVFJVQ1QodHVwbGUpKS0+cmVsbmF0dHM7CisgCVJlbGVhc2VTeXND YWNoZSh0dXBsZSk7CisgCisgCWZvciAoYXR0bnVtID0gMTsgYXR0bnVtIDw9 IG5hdHRyczsgYXR0bnVtKyspCisgCXsKKyAJCXN1YnRsZSA9IG1ha2VfYXJ0 aWZpY2lhbF9jb2x1bW4oc3VicnRlLCBhdHRudW0pOworIAkJc3VidGxlLT5y ZXNubyA9IGxpc3RfbGVuZ3RoKHRhcmdldExpc3QpICsgMTsKKyAJCUFzc2Vy dChzdWJ0bGUtPnJlc25vID09IGF0dG51bSk7CisgCisgCQl0YXJnZXRMaXN0 ID0gbGFwcGVuZCh0YXJnZXRMaXN0LCBzdWJ0bGUpOworIAkJY29sTmFtZUxp c3QgPSBsYXBwZW5kKGNvbE5hbWVMaXN0LAorIAkJCQkJCQkgIG1ha2VTdHJp bmcocHN0cmR1cChzdWJ0bGUtPnJlc25hbWUpKSk7CisgCX0KKyAJc3VicXJ5 LT50YXJnZXRMaXN0ID0gdGFyZ2V0TGlzdDsKKyAKKyAJLyogRXhwYW5kIFJl bmdlVGJsRW50cnkgd2l0aCB0aGlzIHN1Yi1xdWVyeSAqLworIAluZXdydGUg PSBtYWtlTm9kZShSYW5nZVRibEVudHJ5KTsKKyAJbmV3cnRlLT5ydGVraW5k ID0gUlRFX1NVQlFVRVJZOworIAluZXdydGUtPnN1YnF1ZXJ5ID0gc3VicXJ5 OworIAluZXdydGUtPnNlY3VyaXR5X2JhcnJpZXIgPSB0cnVlOworIAluZXdy dGUtPnJvd3NlY19yZWxpZCA9IHJ0ZS0+cmVsaWQ7CisgCW5ld3J0ZS0+ZXJl ZiA9IG1ha2VBbGlhcyhnZXRfcmVsX25hbWUocnRlLT5yZWxpZCksIGNvbE5h bWVMaXN0KTsKKyAKKyAJcGFyc2UtPnJ0YWJsZSA9IGxhcHBlbmQocGFyc2Ut PnJ0YWJsZSwgbmV3cnRlKTsKKyAKKyAJLyogUHVzaC1kb3duIHJvd21hcmss IGlmIG5lZWRlZCAqLworIAlyb3dtYXJrID0gZ2V0X3BsYW5fcm93bWFyayhy b290LT5yb3dNYXJrcywgcnRpbmRleCk7CisgCWlmIChyb3dtYXJrKQorIAl7 CisgCQkvKgorIAkJICogSW4gY2FzZSBvZiBpbmhlcml0ZWQgY2hpbGRyZW4s IHJ0aS9wcnRpIG9mIHJvd21hcmsgc2hhbGwgYmUKKyAJCSAqIGZpeGVkIHVw IGxhdGVyLCBvbiBpbmhlcml0YW5jZV9wbGFubmVyKCkuCisgCQkgKi8KKyAJ CWlmIChyb3dtYXJrLT5ydGkgPT0gcm93bWFyay0+cHJ0aSkKKyAJCQlyb3dt YXJrLT5ydGkgPSByb3dtYXJrLT5wcnRpID0gbGlzdF9sZW5ndGgocGFyc2Ut PnJ0YWJsZSk7CisgCQllbHNlCisgCQkJcm93bWFyay0+cnRpID0gbGlzdF9s ZW5ndGgocGFyc2UtPnJ0YWJsZSk7CisgCisgCQlsb29rdXBfYXJ0aWZpY2lh bF9jb2x1bW4ocm9vdCwgbmV3cnRlLCBTZWxmSXRlbVBvaW50ZXJBdHRyaWJ1 dGVOdW1iZXIpOworIAkJbG9va3VwX2FydGlmaWNpYWxfY29sdW1uKHJvb3Qs IG5ld3J0ZSwgVGFibGVPaWRBdHRyaWJ1dGVOdW1iZXIpOworIAl9CisgCisg CXJldHVybiBsaXN0X2xlbmd0aChwYXJzZS0+cnRhYmxlKTsKKyB9CisgCisg LyoKKyAgKiBwdWxsX3Jvd19zZWN1cml0eV9wb2xpY3kKKyAgKgorICAqIEl0 IHB1bGxzIHRoZSBjb25maWd1cmVkIHJvdy1zZWN1cml0eSBwb2xpY3kgb2Yg Ym90aCBidWlsdC1pbiBhbmQKKyAgKiBleHRlbnNpb25zLiBJZiBhbnksIGl0 IHJldHVybnMgZXhwcmVzc2lvbiB0cmVlLgorICAqLworIHN0YXRpYyBFeHBy ICoKKyBwdWxsX3Jvd19zZWN1cml0eV9wb2xpY3koQ21kVHlwZSBjbWQsIFJl bGF0aW9uIHJlbGF0aW9uLCBpbnQgKnBfZmxhZ3MpCisgeworIAlFeHByICAg KnF1YWxzID0gTlVMTDsKKyAJaW50CQlmbGFncyA9IDA7CisgCisgCS8qCisg CSAqIFB1bGwgdGhlIHJvdy1zZWN1cml0eSBwb2xpY3kgY29uZmlndXJlZCB3 aXRoIGJ1aWx0LWluIGZlYXR1cmVzLAorIAkgKiBpZiB1bnByaXZpbGVnZWQg dXNlcnMuIFBsZWFzZSBub3RlIHRoYXQgc3VwZXJ1c2VyIGNhbiBieXBhc3Mg aXQuCisgCSAqLworIAlpZiAocmVsYXRpb24tPnJzZGVzYyAmJiAhc3VwZXJ1 c2VyKCkpCisgCXsKKyAJCVJvd1NlY3VyaXR5RGVzYyAqcnNkZXNjID0gcmVs YXRpb24tPnJzZGVzYzsKKyAKKyAJCXF1YWxzID0gY29weU9iamVjdChyc2Rl c2MtPnJzYWxsLnF1YWwpOworIAkJaWYgKHJzZGVzYy0+cnNhbGwuaGFzc3Vi bGlua3MpCisgCQkJZmxhZ3MgfD0gUlNFQ19GTEFHX0hBU19TVUJMSU5LUzsK KyAJfQorIAorIAkvKgorIAkgKiBBbHNvLCBhc2sgZXh0ZW5zaW9ucyB3aGV0 aGVyIHRoZXkgd2FudCB0byBhcHBseSB0aGVpciBvd24KKyAJICogcm93LXNl Y3VyaXR5IHBvbGljeS4gSWYgYm90aCBidWlsdC1pbiBhbmQgZXh0ZW5zaW9u IGhhcworIAkgKiB0aGVpciBvd24gcG9saWN5LCBpdCBzaGFsbCBiZSBtZXJn ZWQuCisgCSAqLworIAlpZiAocm93X3NlY3VyaXR5X3BvbGljeV9ob29rKQor IAl7CisgCQlMaXN0ICAgKnRlbXA7CisgCisgCQl0ZW1wID0gKCpyb3dfc2Vj dXJpdHlfcG9saWN5X2hvb2spKGNtZCwgcmVsYXRpb24pOworIAkJaWYgKHRl bXAgIT0gTklMKQorIAkJeworIAkJCWlmICgoZmxhZ3MgJiBSU0VDX0ZMQUdf SEFTX1NVQkxJTktTKSA9PSAwICYmCisgCQkJCWNvbnRhaW5fc3VicGxhbnMo KE5vZGUgKikgdGVtcCkpCisgCQkJCWZsYWdzIHw9IFJTRUNfRkxBR19IQVNf U1VCTElOS1M7CisgCisgCQkJaWYgKHF1YWxzICE9IE5VTEwpCisgCQkJCXRl bXAgPSBsYXBwZW5kKHRlbXAsIHF1YWxzKTsKKyAKKyAJCQlpZiAobGlzdF9s ZW5ndGgodGVtcCkgPT0gMSkKKyAJCQkJcXVhbHMgPSAoRXhwciAqKWxpc3Rf aGVhZCh0ZW1wKTsKKyAJCQllbHNlIGlmIChsaXN0X2xlbmd0aCh0ZW1wKSA+ IDEpCisgCQkJCXF1YWxzID0gbWFrZUJvb2xFeHByKEFORF9FWFBSLCB0ZW1w LCAtMSk7CisgCQl9CisgCX0KKyAJKnBfZmxhZ3MgPSBmbGFnczsKKyAJcmV0 dXJuIHF1YWxzOworIH0KKyAKKyAvKgorICAqIGNvcHlfcm93X3NlY3VyaXR5 X3BvbGljeQorICAqCisgICogSXQgY29uc3RydWN0IGEgcm93LXNlY3VyaXR5 IHN1YnF1ZXJ5IGluc3RlYWQgb2YgcmF3IENPUFkgVE8gc3RhdGVtZW50LAor ICAqIGlmIHRhcmdldCByZWxhdGlvbiBoYXMgYSByb3ctbGV2ZWwgc2VjdXJp dHkgcG9saWN5CisgICovCisgYm9vbAorIGNvcHlfcm93X3NlY3VyaXR5X3Bv bGljeShDb3B5U3RtdCAqc3RtdCwgUmVsYXRpb24gcmVsLCBMaXN0ICphdHRu dW1zKQorIHsKKyAJRXhwcgkJICAqcXVhbHM7CisgCWludAkJCSAgIGZsYWdz OworIAlRdWVyeQkJICAqcGFyc2U7CisgCVJhbmdlVGJsRW50cnkgICpydGU7 CisgCVJhbmdlVGJsUmVmCSAgICpydHI7CisgCVRhcmdldEVudHJ5CSAgICp0 bGU7CisgCVZhcgkJCSAgICp2YXI7CisgCUxpc3RDZWxsCSAgICpjZWxsOwor IAorIAlpZiAoc3RtdC0+aXNfZnJvbSkKKyAJCXJldHVybiBmYWxzZTsKKyAK KyAJcXVhbHMgPSBwdWxsX3Jvd19zZWN1cml0eV9wb2xpY3koQ01EX1NFTEVD VCwgcmVsLCAmZmxhZ3MpOworIAlpZiAoIXF1YWxzKQorIAkJcmV0dXJuIGZh bHNlOworIAorIAlwYXJzZSA9IChRdWVyeSAqKSBtYWtlTm9kZShRdWVyeSk7 CisgCXBhcnNlLT5jb21tYW5kVHlwZSA9IENNRF9TRUxFQ1Q7CisgCXBhcnNl LT5xdWVyeVNvdXJjZSA9IFFTUkNfUk9XX1NFQ1VSSVRZOworIAorIAlydGUg PSBtYWtlTm9kZShSYW5nZVRibEVudHJ5KTsKKyAJcnRlLT5ydGVraW5kID0g UlRFX1JFTEFUSU9OOworIAlydGUtPnJlbGlkID0gUmVsYXRpb25HZXRSZWxp ZChyZWwpOworIAlydGUtPnJlbGtpbmQgPSBSZWxhdGlvbkdldEZvcm0ocmVs KS0+cmVsa2luZDsKKyAKKyAJZm9yZWFjaCAoY2VsbCwgYXR0bnVtcykKKyAJ eworIAkJSGVhcFR1cGxlCXR1cGxlOworIAkJRm9ybV9wZ19hdHRyaWJ1dGUJ YXR0Zm9ybTsKKyAJCUF0dHJOdW1iZXIJYXR0bm8gPSBsZmlyc3RfaW50KGNl bGwpOworIAorIAkJdHVwbGUgPSBTZWFyY2hTeXNDYWNoZTIoQVRUTlVNLAor IAkJCQkJCQkJT2JqZWN0SWRHZXREYXR1bShSZWxhdGlvbkdldFJlbGlkKHJl bCkpLAorIAkJCQkJCQkJSW50MTZHZXREYXR1bShhdHRubykpOworIAkJaWYg KCFIZWFwVHVwbGVJc1ZhbGlkKHR1cGxlKSkKKyAJCQllbG9nKEVSUk9SLCAi Y2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgYXR0cmlidXRlICVkIG9mIHJlbGF0 aW9uICVzIiwKKyAJCQkJIGF0dG5vLCBSZWxhdGlvbkdldFJlbGF0aW9uTmFt ZShyZWwpKTsKKyAJCWF0dGZvcm0gPSAoRm9ybV9wZ19hdHRyaWJ1dGUpIEdF VFNUUlVDVCh0dXBsZSk7CisgCisgCQl2YXIgPSBtYWtlVmFyKChJbmRleCkg MSwKKyAJCQkJCSAgYXR0Zm9ybS0+YXR0bnVtLAorIAkJCQkJICBhdHRmb3Jt LT5hdHR0eXBpZCwKKyAJCQkJCSAgYXR0Zm9ybS0+YXR0dHlwbW9kLAorIAkJ CQkJICBhdHRmb3JtLT5hdHRjb2xsYXRpb24sCisgCQkJCQkgIDApOworIAkJ dGxlID0gbWFrZVRhcmdldEVudHJ5KChFeHByICopIHZhciwKKyAJCQkJCQkJ ICBsaXN0X2xlbmd0aChwYXJzZS0+dGFyZ2V0TGlzdCkgKyAxLAorIAkJCQkJ CQkgIHBzdHJkdXAoTmFtZVN0cihhdHRmb3JtLT5hdHRuYW1lKSksCisgCQkJ CQkJCSAgZmFsc2UpOworIAkJcGFyc2UtPnRhcmdldExpc3QgPSBsYXBwZW5k KHBhcnNlLT50YXJnZXRMaXN0LCB0bGUpOworIAorIAkJUmVsZWFzZVN5c0Nh Y2hlKHR1cGxlKTsKKyAKKyAJCXJ0ZS0+c2VsZWN0ZWRDb2xzID0gYm1zX2Fk ZF9tZW1iZXIocnRlLT5zZWxlY3RlZENvbHMsCisgCQkJCQkJCQlhdHRubyAt IEZpcnN0TG93SW52YWxpZEhlYXBBdHRyaWJ1dGVOdW1iZXIpOworIAl9Cisg CXJ0ZS0+aW5Gcm9tQ2wgPSB0cnVlOworIAlydGUtPnJlcXVpcmVkUGVybXMg PSBBQ0xfU0VMRUNUOworIAorIAlydHIgPSBtYWtlTm9kZShSYW5nZVRibFJl Zik7CisgCXJ0ci0+cnRpbmRleCA9IDE7CisgCisgCXBhcnNlLT5qb2ludHJl ZSA9IG1ha2VGcm9tRXhwcihsaXN0X21ha2UxKHJ0ciksIChOb2RlICopIHF1 YWxzKTsKKyAJcGFyc2UtPnJ0YWJsZSA9IGxpc3RfbWFrZTEocnRlKTsKKyAJ aWYgKGZsYWdzICYgUlNFQ19GTEFHX0hBU19TVUJMSU5LUykKKyAJCXBhcnNl LT5oYXNTdWJMaW5rcyA9IHRydWU7CisgCisgCXN0bXQtPnF1ZXJ5ID0gKE5v ZGUgKikgcGFyc2U7CisgCisgCXJldHVybiB0cnVlOworIH0KKyAKKyAvKgor ICAqIGFwcGx5X3Jvd19zZWN1cml0eV9yZWxhdGlvbgorICAqCisgICogSXQg YXBwbGllcyByb3ctc2VjdXJpdHkgcG9saWN5IG9uIGEgcGFydGljdWxhciBy ZWxhdGlvbiBiZWluZyBzcGVjaWZpZWQuCisgICogSWYgdGhpcyByZWxhdGlv biBpcyB0b3Agb2YgdGhlIGluaGVyaXRhbmNlIHRyZWUsIGl0IGFsc28gY2hl Y2tzIGluaGVyaXRlZAorICAqIGNoaWxkcmVuLgorICAqLworIHN0YXRpYyBi b29sCisgYXBwbHlfcm93X3NlY3VyaXR5X3JlbGF0aW9uKFBsYW5uZXJJbmZv ICpyb290LCBJbmRleCAqdmFydHJhbnMsCisgCQkJCQkJCUNtZFR5cGUgY21k LCBJbmRleCBydGluZGV4KQorIHsKKyAJUXVlcnkJCSAgICpwYXJzZSA9IHJv b3QtPnBhcnNlOworIAlSYW5nZVRibEVudHJ5ICAqcnRlID0gcnRfZmV0Y2go cnRpbmRleCwgcGFyc2UtPnJ0YWJsZSk7CisgCWJvb2wJCQlyZXN1bHQgPSBm YWxzZTsKKyAKKyAJaWYgKCFydGUtPmluaCkKKyAJeworIAkJUmVsYXRpb24J cmVsOworIAkJRXhwcgkgICAqcXVhbDsKKyAJCWludAkJCWZsYWdzID0gMDsK KyAKKyAJCXJlbCA9IGhlYXBfb3BlbihydGUtPnJlbGlkLCBOb0xvY2spOwor IAkJcXVhbCA9IHB1bGxfcm93X3NlY3VyaXR5X3BvbGljeShjbWQsIHJlbCwg JmZsYWdzKTsKKyAJCWlmIChxdWFsKQorIAkJeworIAkJCXZhcnRyYW5zW3J0 aW5kZXhdCisgCQkJCT0gZXhwYW5kX3J0ZW50cnlfd2l0aF9wb2xpY3kocm9v dCwgcnRpbmRleCwgcXVhbCwgZmxhZ3MpOworIAkJCWlmIChwYXJzZS0+cmVz dWx0UmVsYXRpb24gPT0gcnRpbmRleCkKKyAJCQkJcGFyc2UtPnNvdXJjZVJl bGF0aW9uID0gdmFydHJhbnNbcnRpbmRleF07CisgCQkJcmVzdWx0ID0gdHJ1 ZTsKKyAJCX0KKyAJCWhlYXBfY2xvc2UocmVsLCBOb0xvY2spOworIAl9Cisg CWVsc2UKKyAJeworIAkJTGlzdENlbGwgICAqbGMxLCAqbGMyOworIAorIAkJ Zm9yZWFjaCAobGMxLCByb290LT5hcHBlbmRfcmVsX2xpc3QpCisgCQl7Cisg CQkJQXBwZW5kUmVsSW5mbyAgKmFwaW5mbyA9IGxmaXJzdChsYzEpOworIAor IAkJCWlmIChhcGluZm8tPnBhcmVudF9yZWxpZCAhPSBydGluZGV4KQorIAkJ CQljb250aW51ZTsKKyAKKyAJCQlpZiAoYXBwbHlfcm93X3NlY3VyaXR5X3Jl bGF0aW9uKHJvb3QsIHZhcnRyYW5zLCBjbWQsCisgCQkJCQkJCQkJCQlhcGlu Zm8tPmNoaWxkX3JlbGlkKSkKKyAJCQl7CisgCQkJCWlmIChwYXJzZS0+cmVz dWx0UmVsYXRpb24gPT0gcnRpbmRleCkKKyAJCQkJCWFwaW5mby0+Y2hpbGRf cmVzdWx0ID0gYXBpbmZvLT5jaGlsZF9yZWxpZDsKKyAJCQkJYXBpbmZvLT5j aGlsZF9yZWxpZCA9IHZhcnRyYW5zW2FwaW5mby0+Y2hpbGRfcmVsaWRdOwor IAkJCQlmb3JlYWNoIChsYzIsIGFwaW5mby0+dHJhbnNsYXRlZF92YXJzKQor IAkJCQl7CisgCQkJCQlWYXIgICAgKnZhciA9IGxmaXJzdChsYzIpOworIAor IAkJCQkJaWYgKHZhcikKKyAJCQkJCQl2YXItPnZhcm5vID0gYXBpbmZvLT5j aGlsZF9yZWxpZDsKKyAJCQkJfQorIAkJCQlyZXN1bHQgPSB0cnVlOworIAkJ CX0KKyAJCX0KKyAJfQorIAlyZXR1cm4gcmVzdWx0OworIH0KKyAKKyAvKgor ICAqIGFwcGx5X3Jvd19zZWN1cml0eV9yZWN1cnNpdmUKKyAgKgorICAqIHdh bGtlciBvbiBqb2luLXRyZWUKKyAgKi8KKyBzdGF0aWMgYm9vbAorIGFwcGx5 X3Jvd19zZWN1cml0eV9yZWN1cnNpdmUoUGxhbm5lckluZm8gKnJvb3QsIElu ZGV4ICp2YXJ0cmFucywgTm9kZSAqanRub2RlKQorIHsKKyAJYm9vbAlyZXN1 bHQgPSBmYWxzZTsKKyAKKyAJaWYgKGp0bm9kZSA9PSBOVUxMKQorIAkJcmV0 dXJuIGZhbHNlOworIAlpZiAoSXNBKGp0bm9kZSwgUmFuZ2VUYmxSZWYpKQor IAl7CisgCQlJbmRleAkJCXJ0aW5kZXggPSAoKFJhbmdlVGJsUmVmICopIGp0 bm9kZSktPnJ0aW5kZXg7CisgCQlRdWVyeQkJICAgKnBhcnNlID0gcm9vdC0+ cGFyc2U7CisgCQlSYW5nZVRibEVudHJ5ICAqcnRlID0gcnRfZmV0Y2gocnRp bmRleCwgcGFyc2UtPnJ0YWJsZSk7CisgCQlDbWRUeXBlCQkJY21kOworIAor IAkJLyogT25seSByZWxhdGlvbiBjYW4gaGF2ZSByb3ctc2VjdXJpdHkgcG9s aWN5ICovCisgCQlpZiAocnRlLT5ydGVraW5kICE9IFJURV9SRUxBVElPTikK KyAJCQlyZXR1cm4gZmFsc2U7CisgCisgCQkvKgorIAkJICogUHJldmVudHMg aW5maW5pdGUgcmVjdXJzaW9uLiBQbGVhc2Ugbm90ZSB0aGF0IHJ0aW5kZXgg PT0gMQorIAkJICogb2YgdGhlIHJvdy1zZWN1cml0eSBzdWJxdWVyeSBpcyBh IHJlbGF0aW9uIGJlaW5nIGFscmVhZHkKKyAJCSAqIHByb2Nlc3NlZCBvbiB0 aGUgdXBwZXIgbGV2ZWwuCisgCQkgKi8KKyAJCWlmIChwYXJzZS0+cXVlcnlT b3VyY2UgPT0gUVNSQ19ST1dfU0VDVVJJVFkgJiYgcnRpbmRleCA9PSAxKQor IAkJCXJldHVybiBmYWxzZTsKKyAKKyAJCS8qIElzIGl0IGEgcmVzdWx0IHJl bGF0aW9uIG9mIFVQREFURSBvciBERUxFVEUgY29tbWFuZD8gKi8KKyAJCWlm IChwYXJzZS0+cmVzdWx0UmVsYXRpb24gPT0gcnRpbmRleCkKKyAJCQljbWQg PSBwYXJzZS0+Y29tbWFuZFR5cGU7CisgCQllbHNlCisgCQkJY21kID0gQ01E X1NFTEVDVDsKKyAKKyAJCS8qIFRyeSB0byBhcHBseSByb3ctc2VjdXJpdHkg cG9saWN5LCBpZiBjb25maWd1cmVkICovCisgCQlyZXN1bHQgPSBhcHBseV9y b3dfc2VjdXJpdHlfcmVsYXRpb24ocm9vdCwgdmFydHJhbnMsIGNtZCwgcnRp bmRleCk7CisgCX0KKyAJZWxzZSBpZiAoSXNBKGp0bm9kZSwgRnJvbUV4cHIp KQorIAl7CisgCQlGcm9tRXhwciAgICpmID0gKEZyb21FeHByICopIGp0bm9k ZTsKKyAJCUxpc3RDZWxsICAgKmw7CisgCisgCQlmb3JlYWNoIChsLCBmLT5m cm9tbGlzdCkKKyAJCXsKKyAJCQlpZiAoYXBwbHlfcm93X3NlY3VyaXR5X3Jl Y3Vyc2l2ZShyb290LCB2YXJ0cmFucywgbGZpcnN0KGwpKSkKKyAJCQkJcmVz dWx0ID0gdHJ1ZTsKKyAJCX0KKyAJfQorIAllbHNlIGlmIChJc0EoanRub2Rl LCBKb2luRXhwcikpCisgCXsKKyAJCUpvaW5FeHByICAgKmogPSAoSm9pbkV4 cHIgKikganRub2RlOworIAorIAkJaWYgKGFwcGx5X3Jvd19zZWN1cml0eV9y ZWN1cnNpdmUocm9vdCwgdmFydHJhbnMsIGotPmxhcmcpKQorIAkJCXJlc3Vs dCA9IHRydWU7CisgCQlpZiAoYXBwbHlfcm93X3NlY3VyaXR5X3JlY3Vyc2l2 ZShyb290LCB2YXJ0cmFucywgai0+cmFyZykpCisgCQkJcmVzdWx0ID0gdHJ1 ZTsKKyAJfQorIAllbHNlCisgCQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCBu b2RlIHR5cGU6ICVkIiwgKGludCkgbm9kZVRhZyhqdG5vZGUpKTsKKyAKKyAJ cmV0dXJuIHJlc3VsdDsKKyB9CisgCisgLyoKKyAgKiBhcHBseV9yb3dfc2Vj dXJpdHlfcG9saWN5CisgICoKKyAgKiBFbnRyeXBvaW50IHRvIGFwcGx5IGNv bmZpZ3VyZWQgcm93LXNlY3VyaXR5IHBvbGljeSBvZiB0aGUgcmVsYXRpb24u CisgICoKKyAgKiBJbiBjYXNlIHdoZW4gdGhlIHN1cHBsaWVkIHF1ZXJ5IHJl ZmVyZW5jZXMgcmVsYXRpb25zIHdpdGggcm93LXNlY3VyaXR5CisgICogcG9s aWN5LCBpdHMgUmFuZ2VUYmxFbnRyeSBzaGFsbCBiZSByZXBsYWNlZCBieSBh IHJvdy1zZWN1cml0eSBzdWJxdWVyeQorICAqIHRoYXQgaGFzIHNpbXBsZSBz Y2FuIG9uIHRoZSByZWZlcmVuY2VkIHRhYmxlIHdpdGggcG9saWN5IHF1YWxp ZmllcnMuCisgICogT2YgY291cnNlLCBzZWN1cml0eS1iYXJyaWVyIHNoYWxs IGJlIHNldCBvbiB0aGUgc3VicXVlcnkgdG8gcHJldmVudAorICAqIHVuZXhw ZWN0ZWQgcHVzaC1kb3duIG9mIGZ1bmN0aW9ucyB3aXRob3V0IGxlYWtwcm9v ZiBmbGFnLgorICAqCisgICogRm9yIGV4YW1wbGUsIHdoZW4gdGFibGUgdDEg aGFzIGEgc2VjdXJpdHkgcG9saWN5ICIoeCAlIDIgPSAwKSIsIHRoZQorICAq IGZvbGxvd2luZyBxdWVyeToKKyAgKiAgIFNFTEVDVCAqIEZST00gdDEgV0hF UkUgZl9sZWFrKHkpCisgICogcGVyZm9ybXMgYXMgaWYKKyAgKiAgIFNFTEVD VCAqIEZST00gKAorICAqICAgICBTRUxFQ1QgeCwgeSBGUk9NIHQxIFdIRVJF ICh4ICUgMiA9IDApCisgICogICApIEFTIHQxIFdIRVJFIGZfbGVhayh5KQor ICAqIHdvdWxkIGJlIGdpdmVuLiBCZWNhdXNlIHRoZSBzdWItcXVlcnkgaGFz IHNlY3VyaXR5IGJhcnJpZXIgZmxhZywgCisgICogY29uZmlndXJlZCBzZWN1 cml0eSBwb2xpY3kgcXVhbGlmaWVyIGlzIGFsd2F5cyBleGVjdXRlZCBwcmlv ciB0bworICAqIHVzZXIgZ2l2ZW4gZnVuY3Rpb25zLgorICAqLworIHZvaWQK KyBhcHBseV9yb3dfc2VjdXJpdHlfcG9saWN5KFBsYW5uZXJJbmZvICpyb290 KQorIHsKKyAJUXVlcnkJICAgKnBhcnNlID0gcm9vdC0+cGFyc2U7CisgCU9p ZAkJCWN1cnJfdXNlcmlkOworIAlpbnQJCQljdXJyX3NlY2N4dDsKKyAJSW5k ZXgJICAgKnZhcnRyYW5zOworIAorIAkvKgorIAkgKiBNb2RlIGNoZWNrcy4g SW4gY2FzZSB3aGVuIFNFQ1VSSVRZX1JPV19MRVZFTF9ESVNBQkxFRCBpcyBz ZXQsCisgCSAqIG5vIHJvdy1sZXZlbCBzZWN1cml0eSBwb2xpY3kgc2hvdWxk IGJlIGFwcGxpZWQgcmVnYXJkbGVzcworIAkgKiB3aGV0aGVyIGl0IGlzIGJ1 aWx0LWluIG9yIGV4dGVuc2lvbi4KKyAJICovCisgCUdldFVzZXJJZEFuZFNl Y0NvbnRleHQoJmN1cnJfdXNlcmlkLCAmY3Vycl9zZWNjeHQpOworIAlpZiAo Y3Vycl9zZWNjeHQgJiBTRUNVUklUWV9ST1dfTEVWRUxfRElTQUJMRUQpCisg CQlyZXR1cm47CisgCisgCXZhcnRyYW5zID0gcGFsbG9jMChzaXplb2YoSW5k ZXgpICogKGxpc3RfbGVuZ3RoKHBhcnNlLT5ydGFibGUpICsgMSkpOworIAlp ZiAoYXBwbHlfcm93X3NlY3VyaXR5X3JlY3Vyc2l2ZShyb290LCB2YXJ0cmFu cywgKE5vZGUgKilwYXJzZS0+am9pbnRyZWUpKQorIAl7CisgCQlQbGFubmVy R2xvYmFsICAqZ2xvYiA9IHJvb3QtPmdsb2I7CisgCQlQbGFuSW52YWxJdGVt ICAqcGlfaXRlbTsKKyAJCWZpeHVwX3Zhcm5vZGVfY29udGV4dCBjb250ZXh0 OworIAorIAkJLyoKKyAJCSAqIENvbnN0cnVjdGVkIFBsYW4gd2l0aCByb3ct bGV2ZWwgc2VjdXJpdHkgcG9saWN5IGRlcGVuZHMgb24KKyAJCSAqIHByb3Bl cnRpZXMgb2YgY3VycmVudCB1c2VyIChkYXRhYmFzZSBzdXBlcnVzZXIgY2Fu IGJ5cGFzcworIAkJICogY29uZmlndXJlZCByb3ctc2VjdXJpdHkgcG9saWN5 ISksIHRodXMsIGl0IGhhcyB0byBiZQorIAkJICogaW52YWxpZGF0ZWQgd2hl biBpdHMgYXNzdW1wdGlvbiB3YXMgY2hhbmdlZC4KKyAJCSAqLworIAkJaWYg KCFPaWRJc1ZhbGlkKGdsb2ItPnBsYW5Vc2VySWQpKQorIAkJeworIAkJCS8q IFBsYW4gaW52YWxpZGF0aW9uIG9uIHNlc3Npb24gdXNlci1pZCAqLworIAkJ CWdsb2ItPnBsYW5Vc2VySWQgPSBHZXRVc2VySWQoKTsKKyAKKyAJCQkvKiBQ bGFuIGludmFsaWRhdGlvbiBvbiBjYXRhbG9nIHVwZGF0ZXMgb2YgcGdfYXV0 aGlkICovCisgCQkJcGlfaXRlbSA9IG1ha2VOb2RlKFBsYW5JbnZhbEl0ZW0p OworIAkJCXBpX2l0ZW0tPmNhY2hlSWQgPSBBVVRIT0lEOworIAkJCXBpX2l0 ZW0tPmhhc2hWYWx1ZSA9CisgCQkJCUdldFN5c0NhY2hlSGFzaFZhbHVlMShB VVRIT0lELAorIAkJCQkJCQkJCSAgT2JqZWN0SWRHZXREYXR1bShnbG9iLT5w bGFuVXNlcklkKSk7CisgCQkJZ2xvYi0+aW52YWxJdGVtcyA9IGxhcHBlbmQo Z2xvYi0+aW52YWxJdGVtcywgcGlfaXRlbSk7CisgCQl9CisgCQllbHNlCisg CQkJQXNzZXJ0KGdsb2ItPnBsYW5Vc2VySWQgPT0gR2V0VXNlcklkKCkpOwor IAorIAkJLyoKKyAJCSAqIFZhci1ub2RlcyB0aGF0IHJlZmVyZW5jZWQgUmFu Z2VUYmxFbnRyeSB0byBiZSByZXBsYWNlZCBieQorIAkJICogcm93LXNlY3Vy aXR5IHN1Yi1xdWVyeSBoYXZlIHRvIGJlIGFkanVzdGVkIGZvciBhcHByb3By aWF0ZQorIAkJICogcmVmZXJlbmNlIHRvIHRoZSB1bmRlcmx5aW5nIGFydGlm aWNpYWwgY29sdW1uIG9mIHRoZSByZWxhdGlvbi4KKyAJCSAqLworIAkJY29u dGV4dC5yb290ID0gcm9vdDsKKyAJCWNvbnRleHQudmFybGV2ZWxzdXAgPSAw OworIAkJY29udGV4dC52YXJ0cmFucyA9IHZhcnRyYW5zOworIAkJcXVlcnlf dHJlZV93YWxrZXIocGFyc2UsCisgCQkJCQkJICBmaXh1cF92YXJub2RlX3dh bGtlciwKKyAJCQkJCQkgICh2b2lkICopICZjb250ZXh0LAorIAkJCQkJCSAg UVRXX0lHTk9SRV9SRVRVUk5JTkcpOworIAl9CisgCXBmcmVlKHZhcnRyYW5z KTsKKyB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55 IGIvc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueQpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCBkOGQyYmRmLi5mNjg1ZTQzCioqKiBhL3NyYy9iYWNrZW5k L3BhcnNlci9ncmFtLnkKLS0tIGIvc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0u eQoqKioqKioqKioqKioqKiogc3RhdGljIE5vZGUgKm1ha2VSZWN1cnNpdmVW aWV3U2VsZWN0KGNoYQoqKiogMjU2LDI2MSAqKioqCi0tLSAyNTYsMjYyIC0t LS0KICAKICAldHlwZSA8bm9kZT4JYWx0ZXJfdGFibGVfY21kIGFsdGVyX3R5 cGVfY21kIG9wdF9jb2xsYXRlX2NsYXVzZQogICV0eXBlIDxsaXN0PglhbHRl cl90YWJsZV9jbWRzIGFsdGVyX3R5cGVfY21kcworICV0eXBlIDxzdHI+CQly b3dfc2VjdXJpdHlfY21kCiAgCiAgJXR5cGUgPGRiZWhhdmlvcj4Jb3B0X2Ry b3BfYmVoYXZpb3IKICAKKioqKioqKioqKioqKioqIGFsdGVyX3RhYmxlX2Nt ZDoKKioqIDIxNzQsMjE3OSAqKioqCi0tLSAyMTc1LDIxOTggLS0tLQogIAkJ CQkJbi0+ZGVmID0gKE5vZGUgKikkMjsKICAJCQkJCSQkID0gKE5vZGUgKilu OwogIAkJCQl9CisgCQkJLyogQUxURVIgVEFCTEUgPG5hbWU+IFNFVCBST1cg U0VDVVJJVFkgRk9SIDxjbWQ+IFRPICg8ZXhwcj4pICovCisgCQkJfCBTRVQg Uk9XIFNFQ1VSSVRZIEZPUiByb3dfc2VjdXJpdHlfY21kIFRPICcoJyBhX2V4 cHIgJyknCisgCQkJCXsKKyAJCQkJCUFsdGVyVGFibGVDbWQgKm4gPSBtYWtl Tm9kZShBbHRlclRhYmxlQ21kKTsKKyAJCQkJCW4tPnN1YnR5cGUgPSBBVF9T ZXRSb3dTZWN1cml0eTsKKyAJCQkJCW4tPm5hbWUgPSAkNTsKKyAJCQkJCW4t PmRlZiA9IChOb2RlICopICQ4OworIAkJCQkJJCQgPSAoTm9kZSAqKW47Cisg CQkJCX0KKyAJCQkvKiBBTFRFUiBUQUJMRSA8bmFtZT4gUkVTRVQgUk9XIFNF Q1VSSVRZIEZPUiA8Y21kPiAqLworIAkJCXwgUkVTRVQgUk9XIFNFQ1VSSVRZ IEZPUiByb3dfc2VjdXJpdHlfY21kCisgCQkJCXsKKyAJCQkJCUFsdGVyVGFi bGVDbWQgKm4gPSBtYWtlTm9kZShBbHRlclRhYmxlQ21kKTsKKyAJCQkJCW4t PnN1YnR5cGUgPSBBVF9SZXNldFJvd1NlY3VyaXR5OworIAkJCQkJbi0+bmFt ZSA9ICQ1OworIAkJCQkJbi0+ZGVmID0gTlVMTDsKKyAJCQkJCSQkID0gKE5v ZGUgKiluOworIAkJCQl9CiAgCQkJfCBhbHRlcl9nZW5lcmljX29wdGlvbnMK ICAJCQkJewogIAkJCQkJQWx0ZXJUYWJsZUNtZCAqbiA9IG1ha2VOb2RlKEFs dGVyVGFibGVDbWQpOwoqKioqKioqKioqKioqKiogcmVsb3B0aW9uX2VsZW06 CioqKiAyMjQ1LDIyNTAgKioqKgotLS0gMjI2NCwyMjc1IC0tLS0KICAJCQkJ fQogIAkJOwogIAorIHJvd19zZWN1cml0eV9jbWQ6IEFMTAl7ICQkID0gImFs bCI7IH0KKyAJCQl8IFNFTEVDVAl7ICQkID0gInNlbGVjdCI7IH0KKyAJCQl8 IElOU0VSVAl7ICQkID0gImluc2VydCI7IH0KKyAJCQl8IFVQREFURQl7ICQk ID0gInVwZGF0ZSI7IH0KKyAJCQl8IERFTEVURV9QCXsgJCQgPSAiZGVsZXRl IjsgfQorIAkJOwogIAogIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKgogICAqCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wYXJzZXIvcGFy c2VfYWdnLmMgYi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfYWdnLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGU0ZTFjZC4uZDkwNDllMAoqKiog YS9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfYWdnLmMKLS0tIGIvc3JjL2Jh Y2tlbmQvcGFyc2VyL3BhcnNlX2FnZy5jCioqKioqKioqKioqKioqKiB0cmFu c2Zvcm1BZ2dyZWdhdGVDYWxsKFBhcnNlU3RhdGUgKnBzdGF0CioqKiAyNzIs Mjc3ICoqKioKLS0tIDI3MiwyODAgLS0tLQogIAkJY2FzZSBFWFBSX0tJTkRf VFJJR0dFUl9XSEVOOgogIAkJCWVyciA9IF8oImFnZ3JlZ2F0ZSBmdW5jdGlv bnMgYXJlIG5vdCBhbGxvd2VkIGluIHRyaWdnZXIgV0hFTiBjb25kaXRpb25z Iik7CiAgCQkJYnJlYWs7CisgCQljYXNlIEVYUFJfS0lORF9ST1dfU0VDVVJJ VFk6CisgCQkJZXJyID0gXygiYWdncmVnYXRlIGZ1bmN0aW9ucyBhcmUgbm90 IGFsbG93ZWQgaW4gcm93LXNlY3VyaXR5IHBvbGljeSIpOworIAkJCWJyZWFr OwogIAogIAkJCS8qCiAgCQkJICogVGhlcmUgaXMgaW50ZW50aW9uYWxseSBu byBkZWZhdWx0OiBjYXNlIGhlcmUsIHNvIHRoYXQgdGhlCioqKioqKioqKioq KioqKiB0cmFuc2Zvcm1XaW5kb3dGdW5jQ2FsbChQYXJzZVN0YXRlICpwc3Rh CioqKiA1NDcsNTUyICoqKioKLS0tIDU1MCw1NTggLS0tLQogIAkJY2FzZSBF WFBSX0tJTkRfVFJJR0dFUl9XSEVOOgogIAkJCWVyciA9IF8oIndpbmRvdyBm dW5jdGlvbnMgYXJlIG5vdCBhbGxvd2VkIGluIHRyaWdnZXIgV0hFTiBjb25k aXRpb25zIik7CiAgCQkJYnJlYWs7CisgCQljYXNlIEVYUFJfS0lORF9ST1df U0VDVVJJVFk6CisgCQkJZXJyID0gXygid2luZG93IGZ1bmN0aW9ucyBhcmUg bm90IGFsbG93ZWQgaW4gcm93LXNlY3VyaXR5IHBvbGljeSIpOworIAkJCWJy ZWFrOwogIAogIAkJCS8qCiAgCQkJICogVGhlcmUgaXMgaW50ZW50aW9uYWxs eSBubyBkZWZhdWx0OiBjYXNlIGhlcmUsIHNvIHRoYXQgdGhlCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfZXhwci5jIGIvc3JjL2Jh Y2tlbmQvcGFyc2VyL3BhcnNlX2V4cHIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCA2OGI3MTFkLi5mYjA5YzhjCioqKiBhL3NyYy9iYWNrZW5kL3Bh cnNlci9wYXJzZV9leHByLmMKLS0tIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3Bh cnNlX2V4cHIuYwoqKioqKioqKioqKioqKiogdHJhbnNmb3JtU3ViTGluayhQ YXJzZVN0YXRlICpwc3RhdGUsIFN1YgoqKiogMTQ1OSwxNDY0ICoqKioKLS0t IDE0NTksMTQ2NSAtLS0tCiAgCQljYXNlIEVYUFJfS0lORF9PRkZTRVQ6CiAg CQljYXNlIEVYUFJfS0lORF9SRVRVUk5JTkc6CiAgCQljYXNlIEVYUFJfS0lO RF9WQUxVRVM6CisgCQljYXNlIEVYUFJfS0lORF9ST1dfU0VDVVJJVFk6CiAg CQkJLyogb2theSAqLwogIAkJCWJyZWFrOwogIAkJY2FzZSBFWFBSX0tJTkRf Q0hFQ0tfQ09OU1RSQUlOVDoKKioqKioqKioqKioqKioqIFBhcnNlRXhwcktp bmROYW1lKFBhcnNlRXhwcktpbmQgZXhwcktpbmQKKioqIDI2NDAsMjY0NSAq KioqCi0tLSAyNjQxLDI2NDggLS0tLQogIAkJCXJldHVybiAiRVhFQ1VURSI7 CiAgCQljYXNlIEVYUFJfS0lORF9UUklHR0VSX1dIRU46CiAgCQkJcmV0dXJu ICJXSEVOIjsKKyAJCWNhc2UgRVhQUl9LSU5EX1JPV19TRUNVUklUWToKKyAJ CQlyZXR1cm4gIlJPVyBTRUNVUklUWSI7CiAgCiAgCQkJLyoKICAJCQkgKiBU aGVyZSBpcyBpbnRlbnRpb25hbGx5IG5vIGRlZmF1bHQ6IGNhc2UgaGVyZSwg c28gdGhhdCB0aGUKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9w YXJzZV9yZWxhdGlvbi5jIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3Jl bGF0aW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTkyNTRjOC4u NzY4ZDUzMQoqKiogYS9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfcmVsYXRp b24uYwotLS0gYi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfcmVsYXRpb24u YwoqKioqKioqKioqKioqKiogZXhwYW5kUmVsQXR0cnMoUGFyc2VTdGF0ZSAq cHN0YXRlLCBSYW5nZQoqKiogMjA1OCwyMDYzICoqKioKLS0tIDIwNTgsMjA4 MiAtLS0tCiAgfQogIAogIC8qCisgICogZ2V0cmVsaWQKKyAgKgorICAqIEdl dCBPSUQgb2YgdGhlIHJlbGF0aW9uIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdp dmVuIHJhbmdlIGluZGV4LgorICAqIE5vdGUgdGhhdCBJbnZhbGlkT2lkIHdp bGwgYmUgcmV0dXJuZWQgaWYgdGhlIFJURSBpcyBmb3IgbmVpdGhlcgorICAq IHJlbGF0aW9uIG5vciBzdWItcXVlcnkgb3JpZ2luYXRlZCBmcm9tIGEgcmVs YXRpb24KKyAgKi8KKyBPaWQKKyBnZXRyZWxpZChJbmRleCByYW5nZWluZGV4 LCBMaXN0ICpyYW5nZXRhYmxlKQorIHsKKyAJUmFuZ2VUYmxFbnRyeSAgKnJ0 ZSA9IHJ0X2ZldGNoKHJhbmdlaW5kZXgsIHJhbmdldGFibGUpOworIAorIAlp ZiAocnRlLT5ydGVraW5kID09IFJURV9SRUxBVElPTikKKyAJCXJldHVybiBy dGUtPnJlbGlkOworIAlpZiAocnRlLT5ydGVraW5kID09IFJURV9TVUJRVUVS WSkKKyAJCXJldHVybiBydGUtPnJvd3NlY19yZWxpZDsKKyAJcmV0dXJuIElu dmFsaWRPaWQ7CisgfQorIAorIC8qCiAgICogZ2V0X3J0ZV9hdHRyaWJ1dGVf bmFtZQogICAqCQlHZXQgYW4gYXR0cmlidXRlIG5hbWUgZnJvbSBhIFJhbmdl VGJsRW50cnkKICAgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmV3cml0 ZS9yZXdyaXRlSGFuZGxlci5jIGIvc3JjL2JhY2tlbmQvcmV3cml0ZS9yZXdy aXRlSGFuZGxlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmNTI3 YmQuLjJkNjc1ZWQKKioqIGEvc3JjL2JhY2tlbmQvcmV3cml0ZS9yZXdyaXRl SGFuZGxlci5jCi0tLSBiL3NyYy9iYWNrZW5kL3Jld3JpdGUvcmV3cml0ZUhh bmRsZXIuYwoqKioqKioqKioqKioqKiogUXVlcnlSZXdyaXRlKFF1ZXJ5ICpw YXJzZXRyZWUpCioqKiAzMDk5LDMxMDEgKioqKgotLS0gMzA5OSwzMTE3IC0t LS0KICAKICAJcmV0dXJuIHJlc3VsdHM7CiAgfQorIAorIC8qCisgICogUXVl cnlSZXdyaXRlRXhwcgorICAqCisgICogVGhpcyByb3V0aW5lIHByb3ZpZGVz IGFuIGVudHJ5IHBvaW50IG9mIHF1ZXJ5IHJld3JpdGVyIHRvd2FyZHMKKyAg KiBhIGNlcnRhaW4gZXhwcmVzc2lvbiB0cmVlIHdpdGggU3ViTGluayBub2Rl OyBiZWluZyBhZGRlZCBhZnRlcgorICAqIHRoZSB0b3AgbGV2ZWwgcXVlcnkg cmV3cml0ZS4KKyAgKiBJdCBwcmltYXJpbHkgaW50ZW5kcyB0byBleHBhbmQg dmlld3MgYXBwZWFyZWQgaW4gdGhlIHF1YWxpZmllcnMKKyAgKiBhcHBlbmRl ZCB3aXRoIHJvdy1sZXZlbCBzZWN1cml0eSB3aGljaCBuZWVkcyB0byBtb2Rp ZnkgcXVlcnkKKyAgKiB0cmVlIGF0IGhlYWQgb2YgdGhlIHBsYW5uZXIgc3Rh Z2UuCisgICovCisgdm9pZAorIFF1ZXJ5UmV3cml0ZUV4cHIoTm9kZSAqbm9k ZSwgTGlzdCAqYWN0aXZlUklScykKKyB7CisgCWZpcmVSSVJvblN1Ykxpbmso bm9kZSwgYWN0aXZlUklScyk7CisgfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvdXRpbHMvYWR0L3JpX3RyaWdnZXJzLmMgYi9zcmMvYmFja2VuZC91dGls cy9hZHQvcmlfdHJpZ2dlcnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCA2NWVkYzFmLi5iMzZkYTk3CioqKiBhL3NyYy9iYWNrZW5kL3V0aWxzL2Fk dC9yaV90cmlnZ2Vycy5jCi0tLSBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9y aV90cmlnZ2Vycy5jCioqKioqKioqKioqKioqKiByaV9QZXJmb3JtQ2hlY2so Y29uc3QgUklfQ29uc3RyYWludEluZm8gCioqKiAzMDA4LDMwMTMgKioqKgot LS0gMzAwOCwzMDE0IC0tLS0KICAJaW50CQkJc3BpX3Jlc3VsdDsKICAJT2lk CQkJc2F2ZV91c2VyaWQ7CiAgCWludAkJCXNhdmVfc2VjX2NvbnRleHQ7Cisg CWludAkJCXRlbXBfc2VjX2NvbnRleHQ7CiAgCURhdHVtCQl2YWxzW1JJX01B WF9OVU1LRVlTICogMl07CiAgCWNoYXIJCW51bGxzW1JJX01BWF9OVU1LRVlT ICogMl07CiAgCioqKioqKioqKioqKioqKiByaV9QZXJmb3JtQ2hlY2soY29u c3QgUklfQ29uc3RyYWludEluZm8gCioqKiAzMDg3LDMwOTQgKioqKgogIAog IAkvKiBTd2l0Y2ggdG8gcHJvcGVyIFVJRCB0byBwZXJmb3JtIGNoZWNrIGFz ICovCiAgCUdldFVzZXJJZEFuZFNlY0NvbnRleHQoJnNhdmVfdXNlcmlkLCAm c2F2ZV9zZWNfY29udGV4dCk7CiAgCVNldFVzZXJJZEFuZFNlY0NvbnRleHQo UmVsYXRpb25HZXRGb3JtKHF1ZXJ5X3JlbCktPnJlbG93bmVyLAohIAkJCQkJ CSAgIHNhdmVfc2VjX2NvbnRleHQgfCBTRUNVUklUWV9MT0NBTF9VU0VSSURf Q0hBTkdFKTsKICAKICAJLyogRmluYWxseSB3ZSBjYW4gcnVuIHRoZSBxdWVy eS4gKi8KICAJc3BpX3Jlc3VsdCA9IFNQSV9leGVjdXRlX3NuYXBzaG90KHFw bGFuLAotLS0gMzA4OCwzMTA1IC0tLS0KICAKICAJLyogU3dpdGNoIHRvIHBy b3BlciBVSUQgdG8gcGVyZm9ybSBjaGVjayBhcyAqLwogIAlHZXRVc2VySWRB bmRTZWNDb250ZXh0KCZzYXZlX3VzZXJpZCwgJnNhdmVfc2VjX2NvbnRleHQp OworIAorIAkvKgorIAkgKiBSb3ctbGV2ZWwgc2VjdXJpdHkgc2hvdWxkIGJl IGRpc2FibGVkIGluIGNhc2Ugd2hlbiBmb3JlaWduLWtleQorIAkgKiByZWxh dGlvbiBpcyBxdWVyaWVkIHRvIGNoZWNrIGV4aXN0ZW5jZSBvZiB0dXBsZXMg dGhhdCByZWZlcmVuY2VzCisgCSAqIHRoZSBwcmltYXJ5LWtleSBiZWluZyBt b2RpZmllZC4KKyAJICovCisgCXRlbXBfc2VjX2NvbnRleHQgPSBzYXZlX3Nl Y19jb250ZXh0IHwgU0VDVVJJVFlfTE9DQUxfVVNFUklEX0NIQU5HRTsKKyAJ aWYgKHNvdXJjZV9pc19waykKKyAJCXRlbXBfc2VjX2NvbnRleHQgfD0gU0VD VVJJVFlfUk9XX0xFVkVMX0RJU0FCTEVEOworIAogIAlTZXRVc2VySWRBbmRT ZWNDb250ZXh0KFJlbGF0aW9uR2V0Rm9ybShxdWVyeV9yZWwpLT5yZWxvd25l ciwKISAJCQkJCQkgICB0ZW1wX3NlY19jb250ZXh0KTsKICAKICAJLyogRmlu YWxseSB3ZSBjYW4gcnVuIHRoZSBxdWVyeS4gKi8KICAJc3BpX3Jlc3VsdCA9 IFNQSV9leGVjdXRlX3NuYXBzaG90KHFwbGFuLApkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvdXRpbHMvY2FjaGUvcGxhbmNhY2hlLmMgYi9zcmMvYmFja2Vu ZC91dGlscy9jYWNoZS9wbGFuY2FjaGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAyNmNhZTk3Li5kMDVjZGU3CioqKiBhL3NyYy9iYWNrZW5kL3V0 aWxzL2NhY2hlL3BsYW5jYWNoZS5jCi0tLSBiL3NyYy9iYWNrZW5kL3V0aWxz L2NhY2hlL3BsYW5jYWNoZS5jCioqKioqKioqKioqKioqKgoqKiogNTMsNTgg KioqKgotLS0gNTMsNTkgLS0tLQogICNpbmNsdWRlICJjYXRhbG9nL25hbWVz cGFjZS5oIgogICNpbmNsdWRlICJleGVjdXRvci9leGVjdXRvci5oIgogICNp bmNsdWRlICJleGVjdXRvci9zcGkuaCIKKyAjaW5jbHVkZSAibWlzY2FkbWlu LmgiCiAgI2luY2x1ZGUgIm5vZGVzL25vZGVGdW5jcy5oIgogICNpbmNsdWRl ICJvcHRpbWl6ZXIvcGxhbm1haW4uaCIKICAjaW5jbHVkZSAib3B0aW1pemVy L3ByZXAuaCIKKioqKioqKioqKioqKioqIENoZWNrQ2FjaGVkUGxhbihDYWNo ZWRQbGFuU291cmNlICpwbGFuc28KKioqIDc5NCw3OTkgKioqKgotLS0gNzk1 LDgxMCAtLS0tCiAgCQlBY3F1aXJlRXhlY3V0b3JMb2NrcyhwbGFuLT5zdG10 X2xpc3QsIHRydWUpOwogIAogIAkJLyoKKyAJCSAqIElmIHBsYW4gd2FzIGNv bnN0cnVjdGVkIHdpdGggYXNzdW1wdGlvbiBvZiBhIHBhcnRpY3VsYXIgdXNl ci1pZCwKKyAJCSAqIGFuZCBpdCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgY3Vy cmVudCBvbmUsIHRoZSBjYWNoZWQtcGxhbiBzaGFsbAorIAkJICogYmUgaW52 YWxpZGF0ZWQgdG8gY29uc3RydWN0IHN1aXRhYmxlIHF1ZXJ5IHBsYW4uCisg CQkgKi8KKyAJCWlmIChwbGFuLT5pc192YWxpZCAmJgorIAkJCU9pZElzVmFs aWQocGxhbi0+cGxhblVzZXJJZCkgJiYKKyAJCQlwbGFuLT5wbGFuVXNlcklk ID09IEdldFVzZXJJZCgpKQorIAkJCXBsYW4tPmlzX3ZhbGlkID0gZmFsc2U7 CisgCisgCQkvKgogIAkJICogSWYgcGxhbiB3YXMgdHJhbnNpZW50LCBjaGVj ayB0byBzZWUgaWYgVHJhbnNhY3Rpb25YbWluIGhhcwogIAkJICogYWR2YW5j ZWQsIGFuZCBpZiBzbyBpbnZhbGlkYXRlIGl0LgogIAkJICovCioqKioqKioq KioqKioqKiBCdWlsZENhY2hlZFBsYW4oQ2FjaGVkUGxhblNvdXJjZSAqcGxh bnNvCioqKiA4NDYsODUxICoqKioKLS0tIDg1Nyw4NjQgLS0tLQogIHsKICAJ Q2FjaGVkUGxhbiAqcGxhbjsKICAJTGlzdAkgICAqcGxpc3Q7CisgCUxpc3RD ZWxsICAgKmNlbGw7CisgCU9pZAkJCXBsYW5Vc2VySWQgPSBJbnZhbGlkT2lk OwogIAlib29sCQlzbmFwc2hvdF9zZXQ7CiAgCWJvb2wJCXNwaV9wdXNoZWQ7 CiAgCU1lbW9yeUNvbnRleHQgcGxhbl9jb250ZXh0OwoqKioqKioqKioqKioq KiogQnVpbGRDYWNoZWRQbGFuKENhY2hlZFBsYW5Tb3VyY2UgKnBsYW5zbwoq KiogOTEzLDkxOCAqKioqCi0tLSA5MjYsOTQ5IC0tLS0KICAJCVBvcEFjdGl2 ZVNuYXBzaG90KCk7CiAgCiAgCS8qCisgCSAqIENoZWNrIHdoZXRoZXIgdGhl IGdlbmVyYXRlZCBwbGFuIGFzc3VtZXMgYSBwYXJ0aWN1bGFyIHVzZXItaWQs IG9yIG5vdC4KKyAJICogSW4gY2FzZSB3aGVuIGEgdmFsaWQgdXNlci1pZCBp cyByZWNvcmRlZCBvbiBQbGFubmVkU3RtdC0+cGxhblVzZXJJZCwKKyAJICog aXQgc2hvdWxkIGJlIGtlcHQgYW5kIHVzZWQgdG8gdmFsaWRhdGlvbiBjaGVj ayBvZiB0aGUgY2FjaGVkIHBsYW4KKyAJICogdW5kZXIgdGhlICJjdXJyZW50 IiB1c2VyLWlkLgorIAkgKi8KKyAJZm9yZWFjaCAoY2VsbCwgcGxpc3QpCisg CXsKKyAJCVBsYW5uZWRTdG10CSpwc3RtdCA9IGxmaXJzdChjZWxsKTsKKyAK KyAJCWlmIChJc0EocHN0bXQsIFBsYW5uZWRTdG10KSAmJiBPaWRJc1ZhbGlk KHBzdG10LT5wbGFuVXNlcklkKSkKKyAJCXsKKyAJCQlBc3NlcnQoIU9pZElz VmFsaWQocGxhblVzZXJJZCkgfHwgcGxhblVzZXJJZCA9PSBwc3RtdC0+cGxh blVzZXJJZCk7CisgCisgCQkJcGxhblVzZXJJZCA9IHBzdG10LT5wbGFuVXNl cklkOworIAkJfQorIAl9CisgCisgCS8qCiAgCSAqIE5vcm1hbGx5IHdlIG1h a2UgYSBkZWRpY2F0ZWQgbWVtb3J5IGNvbnRleHQgZm9yIHRoZSBDYWNoZWRQ bGFuIGFuZCBpdHMKICAJICogc3Vic2lkaWFyeSBkYXRhLiAgKEl0J3MgcHJv YmFibHkgbm90IGdvaW5nIHRvIGJlIGxhcmdlLCBidXQganVzdCBpbgogIAkg KiBjYXNlLCB1c2UgdGhlIGRlZmF1bHQgbWF4c2l6ZSBwYXJhbWV0ZXIuICBJ dCdzIHRyYW5zaWVudCBmb3IgdGhlCioqKioqKioqKioqKioqKiBCdWlsZENh Y2hlZFBsYW4oQ2FjaGVkUGxhblNvdXJjZSAqcGxhbnNvCioqKiA5NTUsOTYw ICoqKioKLS0tIDk4Niw5OTIgLS0tLQogIAlwbGFuLT5pc19vbmVzaG90ID0g cGxhbnNvdXJjZS0+aXNfb25lc2hvdDsKICAJcGxhbi0+aXNfc2F2ZWQgPSBm YWxzZTsKICAJcGxhbi0+aXNfdmFsaWQgPSB0cnVlOworIAlwbGFuLT5wbGFu VXNlcklkID0gcGxhblVzZXJJZDsKICAKICAJLyogYXNzaWduIGdlbmVyYXRp b24gbnVtYmVyIHRvIG5ldyBwbGFuICovCiAgCXBsYW4tPmdlbmVyYXRpb24g PSArKyhwbGFuc291cmNlLT5nZW5lcmF0aW9uKTsKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMgYi9zcmMvYmFja2Vu ZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDY2ZmI2M2IuLjgyOGMxMGUKKioqIGEvc3JjL2JhY2tlbmQvdXRp bHMvY2FjaGUvcmVsY2FjaGUuYwotLS0gYi9zcmMvYmFja2VuZC91dGlscy9j YWNoZS9yZWxjYWNoZS5jCioqKioqKioqKioqKioqKgoqKiogNTAsNTUgKioq KgotLS0gNTAsNTYgLS0tLQogICNpbmNsdWRlICJjYXRhbG9nL3BnX29wY2xh c3MuaCIKICAjaW5jbHVkZSAiY2F0YWxvZy9wZ19wcm9jLmgiCiAgI2luY2x1 ZGUgImNhdGFsb2cvcGdfcmV3cml0ZS5oIgorICNpbmNsdWRlICJjYXRhbG9n L3BnX3Jvd3NlY3VyaXR5LmgiCiAgI2luY2x1ZGUgImNhdGFsb2cvcGdfdGFi bGVzcGFjZS5oIgogICNpbmNsdWRlICJjYXRhbG9nL3BnX3RyaWdnZXIuaCIK ICAjaW5jbHVkZSAiY2F0YWxvZy9wZ190eXBlLmgiCioqKioqKioqKioqKioq KiBSZWxhdGlvbkJ1aWxkRGVzYyhPaWQgdGFyZ2V0UmVsSWQsIGJvb2wgCioq KiA5MzUsOTQwICoqKioKLS0tIDkzNiw5NDYgLS0tLQogIAllbHNlCiAgCQly ZWxhdGlvbi0+dHJpZ2Rlc2MgPSBOVUxMOwogIAorIAlpZiAocmVsYXRpb24t PnJkX3JlbC0+cmVsaGFzcm93c2VjdXJpdHkpCisgCQlSZWxhdGlvbkJ1aWxk Um93U2VjdXJpdHkocmVsYXRpb24pOworIAllbHNlCisgCQlyZWxhdGlvbi0+ cnNkZXNjID0gTlVMTDsKKyAKICAJLyoKICAJICogaWYgaXQncyBhbiBpbmRl eCwgaW5pdGlhbGl6ZSBpbmRleC1yZWxhdGVkIGluZm9ybWF0aW9uCiAgCSAq LwoqKioqKioqKioqKioqKiogUmVsYXRpb25EZXN0cm95UmVsYXRpb24oUmVs YXRpb24gcmVsYXRpbwoqKiogMTg0MiwxODQ3ICoqKioKLS0tIDE4NDgsMTg1 NSAtLS0tCiAgCQlNZW1vcnlDb250ZXh0RGVsZXRlKHJlbGF0aW9uLT5yZF9p bmRleGN4dCk7CiAgCWlmIChyZWxhdGlvbi0+cmRfcnVsZXNjeHQpCiAgCQlN ZW1vcnlDb250ZXh0RGVsZXRlKHJlbGF0aW9uLT5yZF9ydWxlc2N4dCk7Cisg CWlmIChyZWxhdGlvbi0+cnNkZXNjKQorIAkJTWVtb3J5Q29udGV4dERlbGV0 ZShyZWxhdGlvbi0+cnNkZXNjLT5yc2N4dCk7CiAgCWlmIChyZWxhdGlvbi0+ cmRfZmR3cm91dGluZSkKICAJCXBmcmVlKHJlbGF0aW9uLT5yZF9mZHdyb3V0 aW5lKTsKICAJcGZyZWUocmVsYXRpb24pOwoqKioqKioqKioqKioqKiogUmVs YXRpb25DYWNoZUluaXRpYWxpemVQaGFzZTModm9pZCkKKioqIDMxNjEsMzE2 NyAqKioqCiAgCQkJCXJlbGF0aW9uLT5yZF9yZWwtPnJlbGhhc3RyaWdnZXJz ID0gZmFsc2U7CiAgCQkJcmVzdGFydCA9IHRydWU7CiAgCQl9CiEgCiAgCQkv KiBSZWxlYXNlIGhvbGQgb24gdGhlIHJlbGF0aW9uICovCiAgCQlSZWxhdGlv bkRlY3JlbWVudFJlZmVyZW5jZUNvdW50KHJlbGF0aW9uKTsKICAKLS0tIDMx NjksMzE4MSAtLS0tCiAgCQkJCXJlbGF0aW9uLT5yZF9yZWwtPnJlbGhhc3Ry aWdnZXJzID0gZmFsc2U7CiAgCQkJcmVzdGFydCA9IHRydWU7CiAgCQl9CiEg CQlpZiAocmVsYXRpb24tPnJkX3JlbC0+cmVsaGFzcm93c2VjdXJpdHkgJiYg cmVsYXRpb24tPnJzZGVzYyA9PSBOVUxMKQohIAkJewohIAkJCVJlbGF0aW9u QnVpbGRSb3dTZWN1cml0eShyZWxhdGlvbik7CiEgCQkJaWYgKHJlbGF0aW9u LT5yc2Rlc2MgPT0gTlVMTCkKISAJCQkJcmVsYXRpb24tPnJkX3JlbC0+cmVs aGFzcm93c2VjdXJpdHkgPSBmYWxzZTsKISAJCQlyZXN0YXJ0ID0gdHJ1ZTsK ISAJCX0KICAJCS8qIFJlbGVhc2UgaG9sZCBvbiB0aGUgcmVsYXRpb24gKi8K ICAJCVJlbGF0aW9uRGVjcmVtZW50UmVmZXJlbmNlQ291bnQocmVsYXRpb24p OwogIAoqKioqKioqKioqKioqKiogbG9hZF9yZWxjYWNoZV9pbml0X2ZpbGUo Ym9vbCBzaGFyZWQpCioqKiA0NDA3LDQ0MTIgKioqKgotLS0gNDQyMSw0NDI3 IC0tLS0KICAJCXJlbC0+cmRfcnVsZXMgPSBOVUxMOwogIAkJcmVsLT5yZF9y dWxlc2N4dCA9IE5VTEw7CiAgCQlyZWwtPnRyaWdkZXNjID0gTlVMTDsKKyAJ CXJlbC0+cnNkZXNjID0gTlVMTDsKICAJCXJlbC0+cmRfaW5kZXhwcnMgPSBO SUw7CiAgCQlyZWwtPnJkX2luZHByZWQgPSBOSUw7CiAgCQlyZWwtPnJkX2V4 Y2xvcHMgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL2Nv bW1vbi5jIGIvc3JjL2Jpbi9wZ19kdW1wL2NvbW1vbi5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDI0N2FkOTIuLjk2MDNlZjQKKioqIGEvc3JjL2Jp bi9wZ19kdW1wL2NvbW1vbi5jCi0tLSBiL3NyYy9iaW4vcGdfZHVtcC9jb21t b24uYwoqKioqKioqKioqKioqKiogZ2V0U2NoZW1hRGF0YShBcmNoaXZlICpm b3V0LCBpbnQgKm51bVRhYgoqKiogMjQ0LDI0OSAqKioqCi0tLSAyNDQsMjUz IC0tLS0KICAJCXdyaXRlX21zZyhOVUxMLCAicmVhZGluZyByZXdyaXRlIHJ1 bGVzXG4iKTsKICAJZ2V0UnVsZXMoZm91dCwgJm51bVJ1bGVzKTsKICAKKyAJ aWYgKGdfdmVyYm9zZSkKKyAJCXdyaXRlX21zZyhOVUxMLCAicmVhZGluZyBy b3ctc2VjdXJpdHkgcG9saWNpZXNcbiIpOworIAlnZXRSb3dTZWN1cml0eShm b3V0LCB0YmxpbmZvLCBudW1UYWJsZXMpOworIAogIAkqbnVtVGFibGVzUHRy ID0gbnVtVGFibGVzOwogIAlyZXR1cm4gdGJsaW5mbzsKICB9CmRpZmYgLS1n aXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMgYi9z cmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggY2Q3NjY5Yi4uZTljYTI1MQoqKiogYS9zcmMv YmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKLS0tIGIvc3JjL2Jp bi9wZ19kdW1wL3BnX2JhY2t1cF9hcmNoaXZlci5jCioqKioqKioqKioqKioq KiBfcHJpbnRUb2NFbnRyeShBcmNoaXZlSGFuZGxlICpBSCwgVG9jRW50Cioq KiAzMTQ4LDMxNTMgKioqKgotLS0gMzE0OCwzMTU0IC0tLS0KICAJCQkJIHN0 cmNtcCh0ZS0+ZGVzYywgIklOREVYIikgPT0gMCB8fAogIAkJCQkgc3RyY21w KHRlLT5kZXNjLCAiUlVMRSIpID09IDAgfHwKICAJCQkJIHN0cmNtcCh0ZS0+ ZGVzYywgIlRSSUdHRVIiKSA9PSAwIHx8CisgCQkJCSBzdHJjbXAodGUtPmRl c2MsICJST1cgU0VDVVJJVFkiKSA9PSAwIHx8CiAgCQkJCSBzdHJjbXAodGUt PmRlc2MsICJVU0VSIE1BUFBJTkciKSA9PSAwKQogIAkJewogIAkJCS8qIHRo ZXNlIG9iamVjdCB0eXBlcyBkb24ndCBoYXZlIHNlcGFyYXRlIG93bmVycyAq LwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuYyBiL3Ny Yy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggOGJlYjVkMS4uODRmMjUxOQoqKiogYS9zcmMvYmluL3BnX2R1bXAv cGdfZHVtcC5jCi0tLSBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKKioq KioqKioqKioqKioqIHN0YXRpYyBjaGFyICpteUZvcm1hdFR5cGUoY29uc3Qg Y2hhciAqdHkKKioqIDI0OSwyNTQgKioqKgotLS0gMjQ5LDI1NSAtLS0tCiAg c3RhdGljIHZvaWQgZ2V0QmxvYnMoQXJjaGl2ZSAqZm91dCk7CiAgc3RhdGlj IHZvaWQgZHVtcEJsb2IoQXJjaGl2ZSAqZm91dCwgQmxvYkluZm8gKmJpbmZv KTsKICBzdGF0aWMgaW50CWR1bXBCbG9icyhBcmNoaXZlICpmb3V0LCB2b2lk ICphcmcpOworIHN0YXRpYyB2b2lkIGR1bXBSb3dTZWN1cml0eShBcmNoaXZl ICpmb3V0LCBSb3dTZWN1cml0eUluZm8gKnJzaW5mbyk7CiAgc3RhdGljIHZv aWQgZHVtcERhdGFiYXNlKEFyY2hpdmUgKkFIKTsKICBzdGF0aWMgdm9pZCBk dW1wRW5jb2RpbmcoQXJjaGl2ZSAqQUgpOwogIHN0YXRpYyB2b2lkIGR1bXBT dGRTdHJpbmdzKEFyY2hpdmUgKkFIKTsKKioqKioqKioqKioqKioqIGR1bXBC bG9icyhBcmNoaXZlICpmb3V0LCB2b2lkICphcmcpCioqKiAyNjg2LDI2OTEg KioqKgotLS0gMjY4NywyODIwIC0tLS0KICAJcmV0dXJuIDE7CiAgfQogIAor IC8qCisgICogZ2V0Um93U2VjdXJpdHkKKyAgKiAgICBnZXQgaW5mb3JtYXRp b24gYWJvdXQgZXZlcnkgcm93LXNlY3VyaXR5IHBvbGljeSBvbiBhIGR1bXBh YmxlIHRhYmxlCisgICovCisgdm9pZAorIGdldFJvd1NlY3VyaXR5KEFyY2hp dmUgKmZvdXQsIFRhYmxlSW5mbyB0YmxpbmZvW10sIGludCBudW1UYWJsZXMp CisgeworIAlQUUV4cEJ1ZmZlciBxdWVyeSA9IGNyZWF0ZVBRRXhwQnVmZmVy KCk7CisgCVBHcmVzdWx0ICAgKnJlczsKKyAJUm93U2VjdXJpdHlJbmZvCSpy c2luZm87CisgCWludAkJCWlfb2lkOworIAlpbnQJCQlpX3RhYmxlb2lkOwor IAlpbnQJCQlpX3JzZWNjbWQ7CisgCWludAkJCWlfcnNlY3F1YWw7CisgCWlu dAkJCWksIGosIG50dXBzOworIAorIAkvKiByb3ctc2VjdXJpdHkgaXMgbm90 IHN1cHBvcnRlZCBwcmlvciB0byB2OS40ICovCisgCWlmIChmb3V0LT5yZW1v dGVWZXJzaW9uIDwgOTA0MDApCisgCQlyZXR1cm47CisgCisgCWZvciAoaT0w OyBpIDwgbnVtVGFibGVzOyBpKyspCisgCXsKKyAJCVRhYmxlSW5mbyAgKnRi aW5mbyA9ICZ0YmxpbmZvW2ldOworIAorIAkJaWYgKCF0YmluZm8tPmhhc3Jv d3NlYyB8fCAhdGJpbmZvLT5kb2JqLmR1bXApCisgCQkJY29udGludWU7Cisg CisgCQlpZiAoZ192ZXJib3NlKQorIAkJCXdyaXRlX21zZyhOVUxMLCAicmVh ZGluZyByb3ctc2VjdXJpdHkgcG9saWN5IGZvciB0YWJsZSBcIiVzXCJcbiIs CisgCQkJCQkgIHRiaW5mby0+ZG9iai5uYW1lKTsKKyAKKyAJCS8qCisgCQkg KiBzZWxlY3QgdGFibGUgc2NoZW1hIHRvIGVuc3VyZSByZWdwcm9jIG5hbWUg aXMgcXVhbGlmaWVkIGlmIG5lZWRlZAorIAkJICovCisgCQlzZWxlY3RTb3Vy Y2VTY2hlbWEoZm91dCwgdGJpbmZvLT5kb2JqLm5hbWVzcGFjZS0+ZG9iai5u YW1lKTsKKyAKKyAJCXJlc2V0UFFFeHBCdWZmZXIocXVlcnkpOworIAorIAkJ YXBwZW5kUFFFeHBCdWZmZXIocXVlcnksCisgCQkJCQkJICAiU0VMRUNUIG9p ZCwgdGFibGVvaWQsIHMucnNlY2NtZCwgIgorIAkJCQkJCSAgInBnX2dldF9l eHByKHMucnNlY3F1YWwsIHMucnNlY3JlbGlkKSBBUyByc2VjcXVhbCAiCisg CQkJCQkJICAiRlJPTSBwZ19jYXRhbG9nLnBnX3Jvd3NlY3VyaXR5IHMgIgor IAkJCQkJCSAgIldIRVJFIHJzZWNyZWxpZCA9ICcldSciLAorIAkJCQkJCSAg dGJpbmZvLT5kb2JqLmNhdElkLm9pZCk7CisgCQlyZXMgPSBFeGVjdXRlU3Fs UXVlcnkoZm91dCwgcXVlcnktPmRhdGEsIFBHUkVTX1RVUExFU19PSyk7Cisg CisgCQludHVwcyA9IFBRbnR1cGxlcyhyZXMpOworIAorIAkJaV9vaWQgPSBQ UWZudW1iZXIocmVzLCAib2lkIik7CisgCQlpX3RhYmxlb2lkID0gUFFmbnVt YmVyKHJlcywgInRhYmxlb2lkIik7CisgCQlpX3JzZWNjbWQgPSBQUWZudW1i ZXIocmVzLCAicnNlY2NtZCIpOworIAkJaV9yc2VjcXVhbCA9IFBRZm51bWJl cihyZXMsICJyc2VjcXVhbCIpOworIAorIAkJcnNpbmZvID0gcGdfbWFsbG9j KG50dXBzICogc2l6ZW9mKFJvd1NlY3VyaXR5SW5mbykpOworIAkJZm9yIChq PTA7IGogPCBudHVwczsgaisrKQorIAkJeworIAkJCWNoYXIJbmFtZWJ1ZltO QU1FREFUQUxFTiArIDFdOworIAorIAkJCXJzaW5mb1tqXS5kb2JqLm9ialR5 cGUgPSBET19ST1dfU0VDVVJJVFk7CisgCQkJcnNpbmZvW2pdLmRvYmouY2F0 SWQudGFibGVvaWQgPQorIAkJCQlhdG9vaWQoUFFnZXR2YWx1ZShyZXMsIGos IGlfdGFibGVvaWQpKTsKKyAJCQlyc2luZm9bal0uZG9iai5jYXRJZC5vaWQg PSBhdG9vaWQoUFFnZXR2YWx1ZShyZXMsIGosIGlfb2lkKSk7CisgCQkJQXNz aWduRHVtcElkKCZyc2luZm9bal0uZG9iaik7CisgCQkJc25wcmludGYobmFt ZWJ1Ziwgc2l6ZW9mKG5hbWVidWYpLCAicm93LXNlY3VyaXR5IG9mICVzIiwK KyAJCQkJCSB0YmluZm8tPnJvbG5hbWUpOworIAkJCXJzaW5mb1tqXS5kb2Jq Lm5hbWUgPSBuYW1lYnVmOworIAkJCXJzaW5mb1tqXS5kb2JqLm5hbWVzcGFj ZSA9IHRiaW5mby0+ZG9iai5uYW1lc3BhY2U7CisgCQkJcnNpbmZvW2pdLnJz dGFibGUgPSB0YmluZm87CisgCQkJcnNpbmZvW2pdLnJzZWNjbWQgPSBwZ19z dHJkdXAoUFFnZXR2YWx1ZShyZXMsIGosIGlfcnNlY2NtZCkpOworIAkJCXJz aW5mb1tqXS5yc2VjcXVhbCA9IHBnX3N0cmR1cChQUWdldHZhbHVlKHJlcywg aiwgaV9yc2VjcXVhbCkpOworIAkJfQorIAkJUFFjbGVhcihyZXMpOworIAl9 CisgCWRlc3Ryb3lQUUV4cEJ1ZmZlcihxdWVyeSk7CisgfQorIAorIC8qCisg ICogZHVtcFJvd1NlY3VyaXR5CisgICogICAgZHVtcCB0aGUgZGVmaW5pdGlv biBvZiB0aGUgZ2l2ZW4gcm93LXNlY3VyaXR5IHBvbGljeQorICAqLworIHN0 YXRpYyB2b2lkCisgZHVtcFJvd1NlY3VyaXR5KEFyY2hpdmUgKmZvdXQsIFJv d1NlY3VyaXR5SW5mbyAqcnNpbmZvKQorIHsKKyAJVGFibGVJbmZvICAqdGJp bmZvID0gcnNpbmZvLT5yc3RhYmxlOworIAlQUUV4cEJ1ZmZlcglxdWVyeTsK KyAJUFFFeHBCdWZmZXIJZGVscXJ5OworIAljb25zdCBjaGFyICpjbWQ7Cisg CisgCWlmIChkYXRhT25seSB8fCAhdGJpbmZvLT5oYXNyb3dzZWMpCisgCQly ZXR1cm47CisgCisgCXF1ZXJ5ID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKKyAJ ZGVscXJ5ID0gY3JlYXRlUFFFeHBCdWZmZXIoKTsKKyAJYXBwZW5kUFFFeHBC dWZmZXIocXVlcnksICJBTFRFUiBUQUJMRSAlcyBTRVQgUk9XIFNFQ1VSSVRZ ICIsCisgCQkJCQkgIGZtdElkKHRiaW5mby0+ZG9iai5uYW1lKSk7CisgCWFw cGVuZFBRRXhwQnVmZmVyKGRlbHFyeSwgIkFMVEVSIFRBQkxFICVzIFJFU0VU IFJPVyBTRUNVUklUWSAiLAorIAkJCQkJICBmbXRJZCh0YmluZm8tPmRvYmou bmFtZSkpOworIAlpZiAoc3RyY21wKHJzaW5mby0+cnNlY2NtZCwgImEiKSA9 PSAwKQorIAkJY21kID0gIkFMTCI7CisgCWVsc2UgaWYgKHN0cmNtcChyc2lu Zm8tPnJzZWNjbWQsICJzIikgPT0gMCkKKyAJCWNtZCA9ICJTRUxFQ1QiOwor IAllbHNlIGlmIChzdHJjbXAocnNpbmZvLT5yc2VjY21kLCAiaSIpID09IDAp CisgCQljbWQgPSAiSU5TRVJUIjsKKyAJZWxzZSBpZiAoc3RyY21wKHJzaW5m by0+cnNlY2NtZCwgInUiKSA9PSAwKQorIAkJY21kID0gIlVQREFURSI7Cisg CWVsc2UgaWYgKHN0cmNtcChyc2luZm8tPnJzZWNjbWQsICJkIikgPT0gMCkK KyAJCWNtZCA9ICJERUxFVEUiOworIAllbHNlCisgCXsKKyAJCXdyaXRlX21z ZyhOVUxMLCAidW5leHBlY3RlZCBjb21tYW5kIHR5cGU6ICclcydcbiIsIHJz aW5mby0+cnNlY2NtZCk7CisgCQlleGl0X25pY2VseSgxKTsKKyAJfQorIAlh cHBlbmRQUUV4cEJ1ZmZlcihxdWVyeSwgIkZPUiAlcyBUTyAlcztcbiIsIGNt ZCwgcnNpbmZvLT5yc2VjcXVhbCk7CisgCWFwcGVuZFBRRXhwQnVmZmVyKGRl bHFyeSwgIkZPUiAlcztcbiIsIGNtZCk7CisgCisgCUFyY2hpdmVFbnRyeShm b3V0LCByc2luZm8tPmRvYmouY2F0SWQsIHJzaW5mby0+ZG9iai5kdW1wSWQs CisgCQkJCSByc2luZm8tPmRvYmoubmFtZSwKKyAJCQkJIHJzaW5mby0+ZG9i ai5uYW1lc3BhY2UtPmRvYmoubmFtZSwKKyAJCQkJIE5VTEwsCisgCQkJCSB0 YmluZm8tPnJvbG5hbWUsIGZhbHNlLAorIAkJCQkgIlJPVyBTRUNVUklUWSIs IFNFQ1RJT05fUE9TVF9EQVRBLAorIAkJCQkgcXVlcnktPmRhdGEsIGRlbHFy eS0+ZGF0YSwgTlVMTCwKKyAJCQkJIE5VTEwsIDAsCisgCQkJCSBOVUxMLCBO VUxMKTsKKyAKKyAJZGVzdHJveVBRRXhwQnVmZmVyKHF1ZXJ5KTsKKyB9Cisg CiAgc3RhdGljIHZvaWQKICBiaW5hcnlfdXBncmFkZV9zZXRfdHlwZV9vaWRz X2J5X3R5cGVfb2lkKEFyY2hpdmUgKmZvdXQsCiAgCQkJCQkJCQkJCSBQUUV4 cEJ1ZmZlciB1cGdyYWRlX2J1ZmZlciwKKioqKioqKioqKioqKioqIGdldFRh YmxlcyhBcmNoaXZlICpmb3V0LCBpbnQgKm51bVRhYmxlcykKKioqIDQyMTQs NDIxOSAqKioqCi0tLSA0MzQzLDQzNDkgLS0tLQogIAlpbnQJCQlpX3JlbGhh c3RyaWdnZXJzOwogIAlpbnQJCQlpX3JlbGhhc2luZGV4OwogIAlpbnQJCQlp X3JlbGhhc3J1bGVzOworIAlpbnQJCQlpX3JlbGhhc3Jvd3NlYzsKICAJaW50 CQkJaV9yZWxoYXNvaWRzOwogIAlpbnQJCQlpX3JlbGZyb3plbnhpZDsKICAJ aW50CQkJaV90b2FzdG9pZDsKKioqKioqKioqKioqKioqIGdldFRhYmxlcyhB cmNoaXZlICpmb3V0LCBpbnQgKm51bVRhYmxlcykKKioqIDQyNTIsNDI1OCAq KioqCiAgCSAqIHdlIGNhbm5vdCBjb3JyZWN0bHkgaWRlbnRpZnkgaW5oZXJp dGVkIGNvbHVtbnMsIG93bmVkIHNlcXVlbmNlcywgZXRjLgogIAkgKi8KICAK ISAJaWYgKGZvdXQtPnJlbW90ZVZlcnNpb24gPj0gOTAzMDApCiAgCXsKICAJ CS8qCiAgCQkgKiBMZWZ0IGpvaW4gdG8gcGljayB1cCBkZXBlbmRlbmN5IGlu Zm8gbGlua2luZyBzZXF1ZW5jZXMgdG8gdGhlaXIKLS0tIDQzODIsNDM4OCAt LS0tCiAgCSAqIHdlIGNhbm5vdCBjb3JyZWN0bHkgaWRlbnRpZnkgaW5oZXJp dGVkIGNvbHVtbnMsIG93bmVkIHNlcXVlbmNlcywgZXRjLgogIAkgKi8KICAK ISAJaWYgKGZvdXQtPnJlbW90ZVZlcnNpb24gPj0gOTA0MDApCiAgCXsKICAJ CS8qCiAgCQkgKiBMZWZ0IGpvaW4gdG8gcGljayB1cCBkZXBlbmRlbmN5IGlu Zm8gbGlua2luZyBzZXF1ZW5jZXMgdG8gdGhlaXIKKioqKioqKioqKioqKioq IGdldFRhYmxlcyhBcmNoaXZlICpmb3V0LCBpbnQgKm51bVRhYmxlcykKKioq IDQyNjQsNDI2OSAqKioqCi0tLSA0Mzk0LDQ0MzggLS0tLQogIAkJCQkJCSAg IiglcyBjLnJlbG93bmVyKSBBUyByb2xuYW1lLCAiCiAgCQkJCQkJICAiYy5y ZWxjaGVja3MsIGMucmVsaGFzdHJpZ2dlcnMsICIKICAJCQkJCQkgICJjLnJl bGhhc2luZGV4LCBjLnJlbGhhc3J1bGVzLCBjLnJlbGhhc29pZHMsICIKKyAJ CQkJCQkgICJjLnJlbGhhc3Jvd3NlY3VyaXR5LCAiCisgCQkJCQkJICAiYy5y ZWxmcm96ZW54aWQsIHRjLm9pZCBBUyB0b2lkLCAiCisgCQkJCQkJICAidGMu cmVsZnJvemVueGlkIEFTIHRmcm96ZW54aWQsICIKKyAJCQkJCQkgICJjLnJl bHBlcnNpc3RlbmNlLCBjLnJlbGlzcG9wdWxhdGVkLCAiCisgCQkJCQkJICAi Yy5yZWxwYWdlcywgIgorIAkJCQkJCSAgIkNBU0UgV0hFTiBjLnJlbG9mdHlw ZSA8PiAwIFRIRU4gYy5yZWxvZnR5cGU6OnBnX2NhdGFsb2cucmVndHlwZSBF TFNFIE5VTEwgRU5EIEFTIHJlbG9mdHlwZSwgIgorIAkJCQkJCSAgImQucmVm b2JqaWQgQVMgb3duaW5nX3RhYiwgIgorIAkJCQkJCSAgImQucmVmb2Jqc3Vi aWQgQVMgb3duaW5nX2NvbCwgIgorIAkJCQkJCSAgIihTRUxFQ1Qgc3BjbmFt ZSBGUk9NIHBnX3RhYmxlc3BhY2UgdCBXSEVSRSB0Lm9pZCA9IGMucmVsdGFi bGVzcGFjZSkgQVMgcmVsdGFibGVzcGFjZSwgIgorIAkJCQkJCSJhcnJheV90 b19zdHJpbmcoYy5yZWxvcHRpb25zLCAnLCAnKSBBUyByZWxvcHRpb25zLCAi CisgCQkJCQkJICAiYXJyYXlfdG9fc3RyaW5nKGFycmF5KFNFTEVDVCAndG9h c3QuJyB8fCB4IEZST00gdW5uZXN0KHRjLnJlbG9wdGlvbnMpIHgpLCAnLCAn KSBBUyB0b2FzdF9yZWxvcHRpb25zICIKKyAJCQkJCQkgICJGUk9NIHBnX2Ns YXNzIGMgIgorIAkJCQkJCSAgIkxFRlQgSk9JTiBwZ19kZXBlbmQgZCBPTiAi CisgCQkJCQkJICAiKGMucmVsa2luZCA9ICclYycgQU5EICIKKyAJCQkJCQkg ICJkLmNsYXNzaWQgPSBjLnRhYmxlb2lkIEFORCBkLm9iamlkID0gYy5vaWQg QU5EICIKKyAJCQkJCQkgICJkLm9ianN1YmlkID0gMCBBTkQgIgorIAkJCQkJ CSAgImQucmVmY2xhc3NpZCA9IGMudGFibGVvaWQgQU5EIGQuZGVwdHlwZSA9 ICdhJykgIgorIAkJCQkJICAgIkxFRlQgSk9JTiBwZ19jbGFzcyB0YyBPTiAo Yy5yZWx0b2FzdHJlbGlkID0gdGMub2lkKSAiCisgCQkJCSAgICJXSEVSRSBj LnJlbGtpbmQgaW4gKCclYycsICclYycsICclYycsICclYycsICclYycsICcl YycpICIKKyAJCQkJCQkgICJPUkRFUiBCWSBjLm9pZCIsCisgCQkJCQkJICB1 c2VybmFtZV9zdWJxdWVyeSwKKyAJCQkJCQkgIFJFTEtJTkRfU0VRVUVOQ0Us CisgCQkJCQkJICBSRUxLSU5EX1JFTEFUSU9OLCBSRUxLSU5EX1NFUVVFTkNF LAorIAkJCQkJCSAgUkVMS0lORF9WSUVXLCBSRUxLSU5EX0NPTVBPU0lURV9U WVBFLAorIAkJCQkJCSAgUkVMS0lORF9NQVRWSUVXLCBSRUxLSU5EX0ZPUkVJ R05fVEFCTEUpOworIAl9CisgCWVsc2UgaWYgKGZvdXQtPnJlbW90ZVZlcnNp b24gPj0gOTAzMDApCisgCXsKKyAJCS8qCisgCQkgKiBMZWZ0IGpvaW4gdG8g cGljayB1cCBkZXBlbmRlbmN5IGluZm8gbGlua2luZyBzZXF1ZW5jZXMgdG8g dGhlaXIKKyAJCSAqIG93bmluZyBjb2x1bW4sIGlmIGFueSAobm90ZSB0aGlz IGRlcGVuZGVuY3kgaXMgQVVUTyBhcyBvZiA4LjIpCisgCQkgKi8KKyAJCWFw cGVuZFBRRXhwQnVmZmVyKHF1ZXJ5LAorIAkJCQkJCSAgIlNFTEVDVCBjLnRh Ymxlb2lkLCBjLm9pZCwgYy5yZWxuYW1lLCAiCisgCQkJCQkJICAiYy5yZWxh Y2wsIGMucmVsa2luZCwgYy5yZWxuYW1lc3BhY2UsICIKKyAJCQkJCQkgICIo JXMgYy5yZWxvd25lcikgQVMgcm9sbmFtZSwgIgorIAkJCQkJCSAgImMucmVs Y2hlY2tzLCBjLnJlbGhhc3RyaWdnZXJzLCAiCisgCQkJCQkJICAiYy5yZWxo YXNpbmRleCwgYy5yZWxoYXNydWxlcywgYy5yZWxoYXNvaWRzLCAiCisgCQkJ CQkJICAiJ2YnOjpib29sIEFTIHJlbGhhc3Jvd3NlY3VyaXR5LCAiCiAgCQkJ CQkJICAiYy5yZWxmcm96ZW54aWQsIHRjLm9pZCBBUyB0b2lkLCAiCiAgCQkJ CQkJICAidGMucmVsZnJvemVueGlkIEFTIHRmcm96ZW54aWQsICIKICAJCQkJ CQkgICJjLnJlbHBlcnNpc3RlbmNlLCBjLnJlbGlzcG9wdWxhdGVkLCAiCioq KioqKioqKioqKioqKiBnZXRUYWJsZXMoQXJjaGl2ZSAqZm91dCwgaW50ICpu dW1UYWJsZXMpCioqKiA0MzAzLDQzMDggKioqKgotLS0gNDQ3Miw0NDc4IC0t LS0KICAJCQkJCQkgICIoJXMgYy5yZWxvd25lcikgQVMgcm9sbmFtZSwgIgog IAkJCQkJCSAgImMucmVsY2hlY2tzLCBjLnJlbGhhc3RyaWdnZXJzLCAiCiAg CQkJCQkJICAiYy5yZWxoYXNpbmRleCwgYy5yZWxoYXNydWxlcywgYy5yZWxo YXNvaWRzLCAiCisgCQkJCQkJICAiJ2YnOjpib29sIEFTIHJlbGhhc3Jvd3Nl Y3VyaXR5LCAiCiAgCQkJCQkJICAiYy5yZWxmcm96ZW54aWQsIHRjLm9pZCBB UyB0b2lkLCAiCiAgCQkJCQkJICAidGMucmVsZnJvemVueGlkIEFTIHRmcm96 ZW54aWQsICIKICAJCQkJCQkgICJjLnJlbHBlcnNpc3RlbmNlLCAndCcgYXMg cmVsaXNwb3B1bGF0ZWQsICIKKioqKioqKioqKioqKioqIGdldFRhYmxlcyhB cmNoaXZlICpmb3V0LCBpbnQgKm51bVRhYmxlcykKKioqIDQzNDAsNDM0NSAq KioqCi0tLSA0NTEwLDQ1MTYgLS0tLQogIAkJCQkJCSAgIiglcyBjLnJlbG93 bmVyKSBBUyByb2xuYW1lLCAiCiAgCQkJCQkJICAiYy5yZWxjaGVja3MsIGMu cmVsaGFzdHJpZ2dlcnMsICIKICAJCQkJCQkgICJjLnJlbGhhc2luZGV4LCBj LnJlbGhhc3J1bGVzLCBjLnJlbGhhc29pZHMsICIKKyAJCQkJCQkgICInZic6 OmJvb2wgQVMgcmVsaGFzcm93c2VjdXJpdHksICIKICAJCQkJCQkgICJjLnJl bGZyb3plbnhpZCwgdGMub2lkIEFTIHRvaWQsICIKICAJCQkJCQkgICJ0Yy5y ZWxmcm96ZW54aWQgQVMgdGZyb3plbnhpZCwgIgogIAkJCQkJCSAgIidwJyBB UyByZWxwZXJzaXN0ZW5jZSwgJ3QnIGFzIHJlbGlzcG9wdWxhdGVkLCAiCioq KioqKioqKioqKioqKiBnZXRUYWJsZXMoQXJjaGl2ZSAqZm91dCwgaW50ICpu dW1UYWJsZXMpCioqKiA0Mzc2LDQzODEgKioqKgotLS0gNDU0Nyw0NTUzIC0t LS0KICAJCQkJCQkgICIoJXMgYy5yZWxvd25lcikgQVMgcm9sbmFtZSwgIgog IAkJCQkJCSAgImMucmVsY2hlY2tzLCBjLnJlbGhhc3RyaWdnZXJzLCAiCiAg CQkJCQkJICAiYy5yZWxoYXNpbmRleCwgYy5yZWxoYXNydWxlcywgYy5yZWxo YXNvaWRzLCAiCisgCQkJCQkJICAiJ2YnOjpib29sIEFTIHJlbGhhc3Jvd3Nl Y3VyaXR5LCAiCiAgCQkJCQkJICAiYy5yZWxmcm96ZW54aWQsIHRjLm9pZCBB UyB0b2lkLCAiCiAgCQkJCQkJICAidGMucmVsZnJvemVueGlkIEFTIHRmcm96 ZW54aWQsICIKICAJCQkJCQkgICIncCcgQVMgcmVscGVyc2lzdGVuY2UsICd0 JyBhcyByZWxpc3BvcHVsYXRlZCwgIgoqKioqKioqKioqKioqKiogZ2V0VGFi bGVzKEFyY2hpdmUgKmZvdXQsIGludCAqbnVtVGFibGVzKQoqKiogNDQxMiw0 NDE3ICoqKioKLS0tIDQ1ODQsNDU5MCAtLS0tCiAgCQkJCQkJICAiKCVzIGMu cmVsb3duZXIpIEFTIHJvbG5hbWUsICIKICAJCQkJCSAgImMucmVsY2hlY2tz LCAoYy5yZWx0cmlnZ2VycyA8PiAwKSBBUyByZWxoYXN0cmlnZ2VycywgIgog IAkJCQkJCSAgImMucmVsaGFzaW5kZXgsIGMucmVsaGFzcnVsZXMsIGMucmVs aGFzb2lkcywgIgorIAkJCQkJCSAgIidmJzo6Ym9vbCBBUyByZWxoYXNyb3dz ZWN1cml0eSwgIgogIAkJCQkJCSAgImMucmVsZnJvemVueGlkLCB0Yy5vaWQg QVMgdG9pZCwgIgogIAkJCQkJCSAgInRjLnJlbGZyb3plbnhpZCBBUyB0ZnJv emVueGlkLCAiCiAgCQkJCQkJICAiJ3AnIEFTIHJlbHBlcnNpc3RlbmNlLCAn dCcgYXMgcmVsaXNwb3B1bGF0ZWQsICIKKioqKioqKioqKioqKioqIGdldFRh YmxlcyhBcmNoaXZlICpmb3V0LCBpbnQgKm51bVRhYmxlcykKKioqIDQ0NDgs NDQ1MyAqKioqCi0tLSA0NjIxLDQ2MjcgLS0tLQogIAkJCQkJCSAgIiglcyBy ZWxvd25lcikgQVMgcm9sbmFtZSwgIgogIAkJCQkJCSAgInJlbGNoZWNrcywg KHJlbHRyaWdnZXJzIDw+IDApIEFTIHJlbGhhc3RyaWdnZXJzLCAiCiAgCQkJ CQkJICAicmVsaGFzaW5kZXgsIHJlbGhhc3J1bGVzLCByZWxoYXNvaWRzLCAi CisgCQkJCQkJICAiJ2YnOjpib29sIEFTIHJlbGhhc3Jvd3NlY3VyaXR5LCAi CiAgCQkJCQkJICAiMCBBUyByZWxmcm96ZW54aWQsICIKICAJCQkJCQkgICIw IEFTIHRvaWQsICIKICAJCQkJCQkgICIwIEFTIHRmcm96ZW54aWQsICIKKioq KioqKioqKioqKioqIGdldFRhYmxlcyhBcmNoaXZlICpmb3V0LCBpbnQgKm51 bVRhYmxlcykKKioqIDQ0ODQsNDQ4OSAqKioqCi0tLSA0NjU4LDQ2NjQgLS0t LQogIAkJCQkJCSAgIiglcyByZWxvd25lcikgQVMgcm9sbmFtZSwgIgogIAkJ CQkJCSAgInJlbGNoZWNrcywgKHJlbHRyaWdnZXJzIDw+IDApIEFTIHJlbGhh c3RyaWdnZXJzLCAiCiAgCQkJCQkJICAicmVsaGFzaW5kZXgsIHJlbGhhc3J1 bGVzLCByZWxoYXNvaWRzLCAiCisgCQkJCQkJICAiJ2YnOjpib29sIEFTIHJl bGhhc3Jvd3NlY3VyaXR5LCAiCiAgCQkJCQkJICAiMCBBUyByZWxmcm96ZW54 aWQsICIKICAJCQkJCQkgICIwIEFTIHRvaWQsICIKICAJCQkJCQkgICIwIEFT IHRmcm96ZW54aWQsICIKKioqKioqKioqKioqKioqIGdldFRhYmxlcyhBcmNo aXZlICpmb3V0LCBpbnQgKm51bVRhYmxlcykKKioqIDQ1MTYsNDUyMSAqKioq Ci0tLSA0NjkxLDQ2OTcgLS0tLQogIAkJCQkJCSAgIiglcyByZWxvd25lcikg QVMgcm9sbmFtZSwgIgogIAkJCQkJCSAgInJlbGNoZWNrcywgKHJlbHRyaWdn ZXJzIDw+IDApIEFTIHJlbGhhc3RyaWdnZXJzLCAiCiAgCQkJCQkJICAicmVs aGFzaW5kZXgsIHJlbGhhc3J1bGVzLCByZWxoYXNvaWRzLCAiCisgCQkJCQkJ ICAiJ2YnOjpib29sIEFTIHJlbGhhc3Jvd3NlY3VyaXR5LCAiCiAgCQkJCQkJ ICAiMCBBUyByZWxmcm96ZW54aWQsICIKICAJCQkJCQkgICIwIEFTIHRvaWQs ICIKICAJCQkJCQkgICIwIEFTIHRmcm96ZW54aWQsICIKKioqKioqKioqKioq KioqIGdldFRhYmxlcyhBcmNoaXZlICpmb3V0LCBpbnQgKm51bVRhYmxlcykK KioqIDQ1NDMsNDU0OCAqKioqCi0tLSA0NzE5LDQ3MjUgLS0tLQogIAkJCQkJ CSAgInJlbGNoZWNrcywgKHJlbHRyaWdnZXJzIDw+IDApIEFTIHJlbGhhc3Ry aWdnZXJzLCAiCiAgCQkJCQkJICAicmVsaGFzaW5kZXgsIHJlbGhhc3J1bGVz LCAiCiAgCQkJCQkJICAiJ3QnOjpib29sIEFTIHJlbGhhc29pZHMsICIKKyAJ CQkJCQkgICInZic6OmJvb2wgQVMgcmVsaGFzcm93c2VjdXJpdHksICIKICAJ CQkJCQkgICIwIEFTIHJlbGZyb3plbnhpZCwgIgogIAkJCQkJCSAgIjAgQVMg dG9pZCwgIgogIAkJCQkJCSAgIjAgQVMgdGZyb3plbnhpZCwgIgoqKioqKioq KioqKioqKiogZ2V0VGFibGVzKEFyY2hpdmUgKmZvdXQsIGludCAqbnVtVGFi bGVzKQoqKiogNDU4MCw0NTg1ICoqKioKLS0tIDQ3NTcsNDc2MyAtLS0tCiAg CQkJCQkJICAicmVsY2hlY2tzLCAocmVsdHJpZ2dlcnMgPD4gMCkgQVMgcmVs aGFzdHJpZ2dlcnMsICIKICAJCQkJCQkgICJyZWxoYXNpbmRleCwgcmVsaGFz cnVsZXMsICIKICAJCQkJCQkgICIndCc6OmJvb2wgQVMgcmVsaGFzb2lkcywg IgorIAkJCQkJCSAgIidmJzo6Ym9vbCBBUyByZWxoYXNyb3dzZWN1cml0eSwg IgogIAkJCQkJCSAgIjAgYXMgcmVsZnJvemVueGlkLCAiCiAgCQkJCQkJICAi MCBBUyB0b2lkLCAiCiAgCQkJCQkJICAiMCBBUyB0ZnJvemVueGlkLCAiCioq KioqKioqKioqKioqKiBnZXRUYWJsZXMoQXJjaGl2ZSAqZm91dCwgaW50ICpu dW1UYWJsZXMpCioqKiA0NjI3LDQ2MzIgKioqKgotLS0gNDgwNSw0ODExIC0t LS0KICAJaV9yZWxoYXN0cmlnZ2VycyA9IFBRZm51bWJlcihyZXMsICJyZWxo YXN0cmlnZ2VycyIpOwogIAlpX3JlbGhhc2luZGV4ID0gUFFmbnVtYmVyKHJl cywgInJlbGhhc2luZGV4Iik7CiAgCWlfcmVsaGFzcnVsZXMgPSBQUWZudW1i ZXIocmVzLCAicmVsaGFzcnVsZXMiKTsKKyAJaV9yZWxoYXNyb3dzZWMgPSBQ UWZudW1iZXIocmVzLCAicmVsaGFzcm93c2VjdXJpdHkiKTsKICAJaV9yZWxo YXNvaWRzID0gUFFmbnVtYmVyKHJlcywgInJlbGhhc29pZHMiKTsKICAJaV9y ZWxmcm96ZW54aWQgPSBQUWZudW1iZXIocmVzLCAicmVsZnJvemVueGlkIik7 CiAgCWlfdG9hc3RvaWQgPSBQUWZudW1iZXIocmVzLCAidG9pZCIpOwoqKioq KioqKioqKioqKiogZ2V0VGFibGVzKEFyY2hpdmUgKmZvdXQsIGludCAqbnVt VGFibGVzKQoqKiogNDY3NSw0NjgwICoqKioKLS0tIDQ4NTQsNDg2MCAtLS0t CiAgCQl0YmxpbmZvW2ldLmhhc2luZGV4ID0gKHN0cmNtcChQUWdldHZhbHVl KHJlcywgaSwgaV9yZWxoYXNpbmRleCksICJ0IikgPT0gMCk7CiAgCQl0Ymxp bmZvW2ldLmhhc3J1bGVzID0gKHN0cmNtcChQUWdldHZhbHVlKHJlcywgaSwg aV9yZWxoYXNydWxlcyksICJ0IikgPT0gMCk7CiAgCQl0YmxpbmZvW2ldLmhh c3RyaWdnZXJzID0gKHN0cmNtcChQUWdldHZhbHVlKHJlcywgaSwgaV9yZWxo YXN0cmlnZ2VycyksICJ0IikgPT0gMCk7CisgCQl0YmxpbmZvW2ldLmhhc3Jv d3NlYyA9IChzdHJjbXAoUFFnZXR2YWx1ZShyZXMsIGksIGlfcmVsaGFzcm93 c2VjKSwgInQiKSA9PSAwKTsKICAJCXRibGluZm9baV0uaGFzb2lkcyA9IChz dHJjbXAoUFFnZXR2YWx1ZShyZXMsIGksIGlfcmVsaGFzb2lkcyksICJ0Iikg PT0gMCk7CiAgCQl0YmxpbmZvW2ldLnJlbGlzcG9wdWxhdGVkID0gKHN0cmNt cChQUWdldHZhbHVlKHJlcywgaSwgaV9yZWxpc3BvcHVsYXRlZCksICJ0Iikg PT0gMCk7CiAgCQl0YmxpbmZvW2ldLnJlbHBhZ2VzID0gYXRvaShQUWdldHZh bHVlKHJlcywgaSwgaV9yZWxwYWdlcykpOwoqKioqKioqKioqKioqKiogZHVt cER1bXBhYmxlT2JqZWN0KEFyY2hpdmUgKmZvdXQsIER1bXBhYgoqKiogNzc1 OCw3NzYzICoqKioKLS0tIDc5MzgsNzk0NiAtLS0tCiAgCQkJCQkJIE5VTEws IDAsCiAgCQkJCQkJIGR1bXBCbG9icywgTlVMTCk7CiAgCQkJYnJlYWs7Cisg CQljYXNlIERPX1JPV19TRUNVUklUWToKKyAJCQlkdW1wUm93U2VjdXJpdHko Zm91dCwgKFJvd1NlY3VyaXR5SW5mbyAqKSBkb2JqKTsKKyAJCQlicmVhazsK ICAJCWNhc2UgRE9fUFJFX0RBVEFfQk9VTkRBUlk6CiAgCQljYXNlIERPX1BP U1RfREFUQV9CT1VOREFSWToKICAJCQkvKiBuZXZlciBkdW1wZWQsIG5vdGhp bmcgdG8gZG8gKi8KKioqKioqKioqKioqKioqIGFkZEJvdW5kYXJ5RGVwZW5k ZW5jaWVzKER1bXBhYmxlT2JqZWN0ICoKKioqIDE0OTM2LDE0OTQxICoqKioK LS0tIDE1MTE5LDE1MTI1IC0tLS0KICAJCQljYXNlIERPX1RSSUdHRVI6CiAg CQkJY2FzZSBET19FVkVOVF9UUklHR0VSOgogIAkJCWNhc2UgRE9fREVGQVVM VF9BQ0w6CisgCQkJY2FzZSBET19ST1dfU0VDVVJJVFk6CiAgCQkJCS8qIFBv c3QtZGF0YSBvYmplY3RzOiBtdXN0IGNvbWUgYWZ0ZXIgdGhlIHBvc3QtZGF0 YSBib3VuZGFyeSAqLwogIAkJCQlhZGRPYmplY3REZXBlbmRlbmN5KGRvYmos IHBvc3REYXRhQm91bmQtPmR1bXBJZCk7CiAgCQkJCWJyZWFrOwpkaWZmIC0t Z2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuaCBiL3NyYy9iaW4vcGdf ZHVtcC9wZ19kdW1wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmM1 OTcxYy4uNGRjMDBkYgoqKiogYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5o Ci0tLSBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmgKKioqKioqKioqKioq KioqIHR5cGVkZWYgZW51bQoqKiogMTExLDExNyAqKioqCiAgCURPX1BSRV9E QVRBX0JPVU5EQVJZLAogIAlET19QT1NUX0RBVEFfQk9VTkRBUlksCiAgCURP X0VWRU5UX1RSSUdHRVIsCiEgCURPX1JFRlJFU0hfTUFUVklFVwogIH0gRHVt cGFibGVPYmplY3RUeXBlOwogIAogIHR5cGVkZWYgc3RydWN0IF9kdW1wYWJs ZU9iamVjdAotLS0gMTExLDExOCAtLS0tCiAgCURPX1BSRV9EQVRBX0JPVU5E QVJZLAogIAlET19QT1NUX0RBVEFfQk9VTkRBUlksCiAgCURPX0VWRU5UX1RS SUdHRVIsCiEgCURPX1JFRlJFU0hfTUFUVklFVywKISAJRE9fUk9XX1NFQ1VS SVRZLAogIH0gRHVtcGFibGVPYmplY3RUeXBlOwogIAogIHR5cGVkZWYgc3Ry dWN0IF9kdW1wYWJsZU9iamVjdAoqKioqKioqKioqKioqKiogdHlwZWRlZiBz dHJ1Y3QgX3RhYmxlSW5mbwoqKiogMjQ0LDI0OSAqKioqCi0tLSAyNDUsMjUx IC0tLS0KICAJYm9vbAkJaGFzaW5kZXg7CQkvKiBkb2VzIGl0IGhhdmUgYW55 IGluZGV4ZXM/ICovCiAgCWJvb2wJCWhhc3J1bGVzOwkJLyogZG9lcyBpdCBo YXZlIGFueSBydWxlcz8gKi8KICAJYm9vbAkJaGFzdHJpZ2dlcnM7CS8qIGRv ZXMgaXQgaGF2ZSBhbnkgdHJpZ2dlcnM/ICovCisgCWJvb2wJCWhhc3Jvd3Nl YzsJCS8qIGRvZXMgaXQgaGF2ZSBhbnkgcm93LXNlY3VyaXR5IHBvbGljeT8g Ki8KICAJYm9vbAkJaGFzb2lkczsJCS8qIGRvZXMgaXQgaGF2ZSBPSURzPyAq LwogIAl1aW50MzIJCWZyb3plbnhpZDsJCS8qIGZvciByZXN0b3JlIGZyb3pl biB4aWQgKi8KICAJT2lkCQkJdG9hc3Rfb2lkOwkJLyogZm9yIHJlc3RvcmUg dG9hc3QgZnJvemVuIHhpZCAqLwoqKioqKioqKioqKioqKiogdHlwZWRlZiBz dHJ1Y3QgX2Jsb2JJbmZvCioqKiA0ODIsNDg3ICoqKioKLS0tIDQ4NCw0OTcg LS0tLQogIAljaGFyCSAgICpibG9iYWNsOwogIH0gQmxvYkluZm87CiAgCisg dHlwZWRlZiBzdHJ1Y3QgX3Jvd1NlY3VyaXR5SW5mbworIHsKKyAJRHVtcGFi bGVPYmplY3QgZG9iajsKKyAJVGFibGVJbmZvICAqcnN0YWJsZTsKKyAJY2hh cgkgICAqcnNlY2NtZDsKKyAJY2hhcgkgICAqcnNlY3F1YWw7CisgfSBSb3dT ZWN1cml0eUluZm87CisgCiAgLyogZ2xvYmFsIGRlY2xzICovCiAgZXh0ZXJu IGJvb2wgZm9yY2VfcXVvdGVzOwkJLyogZG91YmxlLXF1b3RlcyBmb3IgaWRl bnRpZmllcnMgZmxhZyAqLwogIGV4dGVybiBib29sIGdfdmVyYm9zZTsJCQkv KiB2ZXJib3NlIGZsYWcgKi8KKioqKioqKioqKioqKioqIGV4dGVybiBEZWZh dWx0QUNMSW5mbyAqZ2V0RGVmYXVsdEFDTHMoQXIKKioqIDU3Myw1NzcgKioq KgotLS0gNTgzLDU4OCAtLS0tCiAgZXh0ZXJuIHZvaWQgZ2V0RXh0ZW5zaW9u TWVtYmVyc2hpcChBcmNoaXZlICpmb3V0LCBFeHRlbnNpb25JbmZvIGV4dGlu Zm9bXSwKICAJCQkJCSAgIGludCBudW1FeHRlbnNpb25zKTsKICBleHRlcm4g RXZlbnRUcmlnZ2VySW5mbyAqZ2V0RXZlbnRUcmlnZ2VycyhBcmNoaXZlICpm b3V0LCBpbnQgKm51bUV2ZW50VHJpZ2dlcnMpOworIGV4dGVybiB2b2lkIGdl dFJvd1NlY3VyaXR5KEFyY2hpdmUgKmZvdXQsIFRhYmxlSW5mbyB0YmxpbmZv W10sIGludCBudW1UYWJsZXMpOwogIAogICNlbmRpZiAgIC8qIFBHX0RVTVBf SCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXBfc29y dC5jIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXBfc29ydC5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDE0MWU3MTMuLjVjNTc3N2MKKioqIGEvc3Jj L2Jpbi9wZ19kdW1wL3BnX2R1bXBfc29ydC5jCi0tLSBiL3NyYy9iaW4vcGdf ZHVtcC9wZ19kdW1wX3NvcnQuYwoqKioqKioqKioqKioqKiogZGVzY3JpYmVE dW1wYWJsZU9iamVjdChEdW1wYWJsZU9iamVjdCAqbwoqKiogMTM0MiwxMzQ3 ICoqKioKLS0tIDEzNDIsMTM1MiAtLS0tCiAgCQkJCQkgIkJMT0IgREFUQSAg KElEICVkKSIsCiAgCQkJCQkgb2JqLT5kdW1wSWQpOwogIAkJCXJldHVybjsK KyAJCWNhc2UgRE9fUk9XX1NFQ1VSSVRZOgorIAkJCXNucHJpbnRmKGJ1Ziwg YnVmc2l6ZSwKKyAJCQkJCSAiUk9XLVNFQ1VSSVRZIFBPTElDWSAoSUQgJWQg T0lEICV1KSIsCisgCQkJCQkgb2JqLT5kdW1wSWQsIG9iai0+Y2F0SWQub2lk KTsKKyAJCQlyZXR1cm47CiAgCQljYXNlIERPX1BSRV9EQVRBX0JPVU5EQVJZ OgogIAkJCXNucHJpbnRmKGJ1ZiwgYnVmc2l6ZSwKICAJCQkJCSAiUFJFLURB VEEgQk9VTkRBUlkgIChJRCAlZCkiLApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9w c3FsL2Rlc2NyaWJlLmMgYi9zcmMvYmluL3BzcWwvZGVzY3JpYmUuYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YjZiOWMyLi5kYjVjMGU1CioqKiBh L3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jCi0tLSBiL3NyYy9iaW4vcHNxbC9k ZXNjcmliZS5jCioqKioqKioqKioqKioqKiBsaXN0VGFibGVzKGNvbnN0IGNo YXIgKnRhYnR5cGVzLCBjb25zdCBjCioqKiAyNjk4LDI3MDMgKioqKgotLS0g MjY5OCwyNzA3IC0tLS0KICAJCWFwcGVuZFBRRXhwQnVmZmVyKCZidWYsCiAg CQkJICAiLFxuICBwZ19jYXRhbG9nLm9ial9kZXNjcmlwdGlvbihjLm9pZCwg J3BnX2NsYXNzJykgYXMgXCIlc1wiIiwKICAJCQkJCQkgIGdldHRleHRfbm9v cCgiRGVzY3JpcHRpb24iKSk7CisgCQlpZiAocHNldC5zdmVyc2lvbiA+PSA5 MDMwMCkKKyAJCQlhcHBlbmRQUUV4cEJ1ZmZlcigmYnVmLAorIAkJCSAgIixc biBwZ19jYXRhbG9nLnBnX2dldF9leHByKHJzLnJzZWNxdWFsLCBjLm9pZCkg YXMgXCIlc1wiIiwKKyAJCQkJCQkJICBnZXR0ZXh0X25vb3AoIlJvdy1zZWN1 cml0eSIpKTsKICAJfQogIAogIAlhcHBlbmRQUUV4cEJ1ZmZlcigmYnVmLAoq KioqKioqKioqKioqKiogbGlzdFRhYmxlcyhjb25zdCBjaGFyICp0YWJ0eXBl cywgY29uc3QgYwoqKiogMjcwNywyNzEyICoqKioKLS0tIDI3MTEsMjcxOSAt LS0tCiAgCQlhcHBlbmRQUUV4cEJ1ZmZlcigmYnVmLAogIAkJCSAiXG4gICAg IExFRlQgSk9JTiBwZ19jYXRhbG9nLnBnX2luZGV4IGkgT04gaS5pbmRleHJl bGlkID0gYy5vaWQiCiAgCQkgICAiXG4gICAgIExFRlQgSk9JTiBwZ19jYXRh bG9nLnBnX2NsYXNzIGMyIE9OIGkuaW5kcmVsaWQgPSBjMi5vaWQiKTsKKyAJ aWYgKHZlcmJvc2UgJiYgcHNldC5zdmVyc2lvbiA+PSA5MDMwMCkKKyAJCWFw cGVuZFBRRXhwQnVmZmVyKCZidWYsCisgCQkgICAiXG4gICAgIExFRlQgSk9J TiBwZ19yb3dzZWN1cml0eSBycyBPTiBycy5yc2VjcmVsaWQgPSBjLm9pZCIp OwogIAogIAlhcHBlbmRQUUV4cEJ1ZmZlcigmYnVmLCAiXG5XSEVSRSBjLnJl bGtpbmQgSU4gKCIpOwogIAlpZiAoc2hvd1RhYmxlcykKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL2NhdGFsb2cvZGVwZW5kZW5jeS5oIGIvc3JjL2luY2x1 ZGUvY2F0YWxvZy9kZXBlbmRlbmN5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggM2FlZmJiNS4uYzk2ZThkNAoqKiogYS9zcmMvaW5jbHVkZS9jYXRh bG9nL2RlcGVuZGVuY3kuaAotLS0gYi9zcmMvaW5jbHVkZS9jYXRhbG9nL2Rl cGVuZGVuY3kuaAoqKioqKioqKioqKioqKiogdHlwZWRlZiBlbnVtIE9iamVj dENsYXNzCioqKiAxNDcsMTUyICoqKioKLS0tIDE0NywxNTMgLS0tLQogIAlP Q0xBU1NfREVGQUNMLAkJCQkvKiBwZ19kZWZhdWx0X2FjbCAqLwogIAlPQ0xB U1NfRVhURU5TSU9OLAkJCS8qIHBnX2V4dGVuc2lvbiAqLwogIAlPQ0xBU1Nf RVZFTlRfVFJJR0dFUiwJCS8qIHBnX2V2ZW50X3RyaWdnZXIgKi8KKyAJT0NM QVNTX1JPV1NFQ1VSSVRZLAkJCS8qIHBnX3Jvd3NlY3VyaXR5ICovCiAgCU1B WF9PQ0xBU1MJCQkJCS8qIE1VU1QgQkUgTEFTVCAqLwogIH0gT2JqZWN0Q2xh c3M7CiAgCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL2luZGV4 aW5nLmggYi9zcmMvaW5jbHVkZS9jYXRhbG9nL2luZGV4aW5nLmgKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMTkyNjhmYi4uMzMxYTY0YgoqKiogYS9z cmMvaW5jbHVkZS9jYXRhbG9nL2luZGV4aW5nLmgKLS0tIGIvc3JjL2luY2x1 ZGUvY2F0YWxvZy9pbmRleGluZy5oCioqKioqKioqKioqKioqKiBERUNMQVJF X1VOSVFVRV9JTkRFWChwZ19leHRlbnNpb25fbmFtZV9pCioqKiAzMTEsMzE2 ICoqKioKLS0tIDMxMSwzMjEgLS0tLQogIERFQ0xBUkVfVU5JUVVFX0lOREVY KHBnX3JhbmdlX3JuZ3R5cGlkX2luZGV4LCAzNTQyLCBvbiBwZ19yYW5nZSB1 c2luZyBidHJlZShybmd0eXBpZCBvaWRfb3BzKSk7CiAgI2RlZmluZSBSYW5n ZVR5cGlkSW5kZXhJZAkJCQkJMzU0MgogIAorIERFQ0xBUkVfVU5JUVVFX0lO REVYKHBnX3Jvd3NlY3VyaXR5X29pZF9pbmRleCwgMzgxOSwgb24gcGdfcm93 c2VjdXJpdHkgdXNpbmcgYnRyZWUob2lkIG9pZF9vcHMpKTsKKyAjZGVmaW5l IFJvd1NlY3VyaXR5T2lkSW5kZXhJZAkJCQkzODE5CisgREVDTEFSRV9VTklR VUVfSU5ERVgocGdfcm93c2VjdXJpdHlfcmVsaWRfaW5kZXgsIDM4MzksIG9u IHBnX3Jvd3NlY3VyaXR5IHVzaW5nIGJ0cmVlKHJzZWNyZWxpZCBvaWRfb3Bz LCByc2VjY21kIGNoYXJfb3BzKSk7CisgI2RlZmluZSBSb3dTZWN1cml0eVJl bGlkSW5kZXhJZAkJCQkzODM5CisgCiAgLyogbGFzdCBzdGVwIG9mIGluaXRp YWxpemF0aW9uIHNjcmlwdDogYnVpbGQgdGhlIGluZGV4ZXMgZGVjbGFyZWQg YWJvdmUgKi8KICBCVUlMRF9JTkRJQ0VTCiAgCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9jYXRhbG9nL3BnX2NsYXNzLmggYi9zcmMvaW5jbHVkZS9jYXRh bG9nL3BnX2NsYXNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDlj NGY2Zi4uNmExNjgxOQoqKiogYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX2Ns YXNzLmgKLS0tIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19jbGFzcy5oCioq KioqKioqKioqKioqKiBDQVRBTE9HKHBnX2NsYXNzLDEyNTkpIEJLSV9CT09U U1RSQVAgQktJCioqKiA2NCw2OSAqKioqCi0tLSA2NCw3MCAtLS0tCiAgCWJv b2wJCXJlbGhhc3BrZXk7CQkvKiBoYXMgKG9yIGhhcyBoYWQpIFBSSU1BUlkg S0VZIGluZGV4ICovCiAgCWJvb2wJCXJlbGhhc3J1bGVzOwkvKiBoYXMgKG9y IGhhcyBoYWQpIGFueSBydWxlcyAqLwogIAlib29sCQlyZWxoYXN0cmlnZ2Vy czsgLyogaGFzIChvciBoYXMgaGFkKSBhbnkgVFJJR0dFUnMgKi8KKyAJYm9v bAkJcmVsaGFzcm93c2VjdXJpdHk7CS8qIGhhcyAob3IgaGFzIGhhZCkgcm93 LXNlY3VyaXR5IHBvbGljeSAqLwogIAlib29sCQlyZWxoYXNzdWJjbGFzczsg LyogaGFzIChvciBoYXMgaGFkKSBkZXJpdmVkIGNsYXNzZXMgKi8KICAJYm9v bAkJcmVsaXNwb3B1bGF0ZWQ7IC8qIG1hdHZpZXcgY3VycmVudGx5IGhvbGRz IHF1ZXJ5IHJlc3VsdHMgKi8KICAJVHJhbnNhY3Rpb25JZCByZWxmcm96ZW54 aWQ7IC8qIGFsbCBYaWRzIDwgdGhpcyBhcmUgZnJvemVuIGluIHRoaXMgcmVs ICovCioqKioqKioqKioqKioqKiB0eXBlZGVmIEZvcm1EYXRhX3BnX2NsYXNz ICpGb3JtX3BnX2NsYXNzCioqKiA5Myw5OSAqKioqCiAgICogLS0tLS0tLS0t LS0tLS0tLQogICAqLwogIAohICNkZWZpbmUgTmF0dHNfcGdfY2xhc3MJCQkJ CTI4CiAgI2RlZmluZSBBbnVtX3BnX2NsYXNzX3JlbG5hbWUJCQkxCiAgI2Rl ZmluZSBBbnVtX3BnX2NsYXNzX3JlbG5hbWVzcGFjZQkJMgogICNkZWZpbmUg QW51bV9wZ19jbGFzc19yZWx0eXBlCQkJMwotLS0gOTQsMTAwIC0tLS0KICAg KiAtLS0tLS0tLS0tLS0tLS0tCiAgICovCiAgCiEgI2RlZmluZSBOYXR0c19w Z19jbGFzcwkJCQkJMjkKICAjZGVmaW5lIEFudW1fcGdfY2xhc3NfcmVsbmFt ZQkJCTEKICAjZGVmaW5lIEFudW1fcGdfY2xhc3NfcmVsbmFtZXNwYWNlCQky CiAgI2RlZmluZSBBbnVtX3BnX2NsYXNzX3JlbHR5cGUJCQkzCioqKioqKioq KioqKioqKiB0eXBlZGVmIEZvcm1EYXRhX3BnX2NsYXNzICpGb3JtX3BnX2Ns YXNzCioqKiAxMTYsMTI3ICoqKioKICAjZGVmaW5lIEFudW1fcGdfY2xhc3Nf cmVsaGFzcGtleQkJMjAKICAjZGVmaW5lIEFudW1fcGdfY2xhc3NfcmVsaGFz cnVsZXMJCTIxCiAgI2RlZmluZSBBbnVtX3BnX2NsYXNzX3JlbGhhc3RyaWdn ZXJzCTIyCiEgI2RlZmluZSBBbnVtX3BnX2NsYXNzX3JlbGhhc3N1YmNsYXNz CTIzCiEgI2RlZmluZSBBbnVtX3BnX2NsYXNzX3JlbGlzcG9wdWxhdGVkCTI0 CiEgI2RlZmluZSBBbnVtX3BnX2NsYXNzX3JlbGZyb3plbnhpZAkJMjUKISAj ZGVmaW5lIEFudW1fcGdfY2xhc3NfcmVsbWlubXhpZAkJMjYKISAjZGVmaW5l IEFudW1fcGdfY2xhc3NfcmVsYWNsCQkJMjcKISAjZGVmaW5lIEFudW1fcGdf Y2xhc3NfcmVsb3B0aW9ucwkJMjgKICAKICAvKiAtLS0tLS0tLS0tLS0tLS0t CiAgICoJCWluaXRpYWwgY29udGVudHMgb2YgcGdfY2xhc3MKLS0tIDExNywx MjkgLS0tLQogICNkZWZpbmUgQW51bV9wZ19jbGFzc19yZWxoYXNwa2V5CQky MAogICNkZWZpbmUgQW51bV9wZ19jbGFzc19yZWxoYXNydWxlcwkJMjEKICAj ZGVmaW5lIEFudW1fcGdfY2xhc3NfcmVsaGFzdHJpZ2dlcnMJMjIKISAjZGVm aW5lIEFudW1fcGdfY2xhc3NfcmVsaGFzcm93c2VjdXJpdHkJMjMKISAjZGVm aW5lIEFudW1fcGdfY2xhc3NfcmVsaGFzc3ViY2xhc3MJMjQKISAjZGVmaW5l IEFudW1fcGdfY2xhc3NfcmVsaXNwb3B1bGF0ZWQJMjUKISAjZGVmaW5lIEFu dW1fcGdfY2xhc3NfcmVsZnJvemVueGlkCQkyNgohICNkZWZpbmUgQW51bV9w Z19jbGFzc19yZWxtaW5teGlkCQkyNwohICNkZWZpbmUgQW51bV9wZ19jbGFz c19yZWxhY2wJCQkyOAohICNkZWZpbmUgQW51bV9wZ19jbGFzc19yZWxvcHRp b25zCQkyOQogIAogIC8qIC0tLS0tLS0tLS0tLS0tLS0KICAgKgkJaW5pdGlh bCBjb250ZW50cyBvZiBwZ19jbGFzcwoqKioqKioqKioqKioqKiogdHlwZWRl ZiBGb3JtRGF0YV9wZ19jbGFzcyAqRm9ybV9wZ19jbGFzcwoqKiogMTM2LDE0 OCAqKioqCiAgICogTm90ZTogIjMiIGluIHRoZSByZWxmcm96ZW54aWQgY29s dW1uIHN0YW5kcyBmb3IgRmlyc3ROb3JtYWxUcmFuc2FjdGlvbklkOwogICAq IHNpbWlsYXJseSwgIjEiIGluIHJlbG1pbm14aWQgc3RhbmRzIGZvciBGaXJz dE11bHRpWGFjdElkCiAgICovCiEgREFUQShpbnNlcnQgT0lEID0gMTI0NyAo ICBwZ190eXBlCQlQR05TUCA3MSAwIFBHVUlEIDAgMCAwIDAgMCAwIDAgZiBm IHAgciAzMCAwIHQgZiBmIGYgZiB0IDMgMSBfbnVsbF8gX251bGxfICkpOwog IERFU0NSKCIiKTsKISBEQVRBKGluc2VydCBPSUQgPSAxMjQ5ICggIHBnX2F0 dHJpYnV0ZQlQR05TUCA3NSAwIFBHVUlEIDAgMCAwIDAgMCAwIDAgZiBmIHAg ciAyMSAwIGYgZiBmIGYgZiB0IDMgMSBfbnVsbF8gX251bGxfICkpOwogIERF U0NSKCIiKTsKISBEQVRBKGluc2VydCBPSUQgPSAxMjU1ICggIHBnX3Byb2MJ CVBHTlNQIDgxIDAgUEdVSUQgMCAwIDAgMCAwIDAgMCBmIGYgcCByIDI3IDAg dCBmIGYgZiBmIHQgMyAxIF9udWxsXyBfbnVsbF8gKSk7CiAgREVTQ1IoIiIp OwohIERBVEEoaW5zZXJ0IE9JRCA9IDEyNTkgKCAgcGdfY2xhc3MJCVBHTlNQ IDgzIDAgUEdVSUQgMCAwIDAgMCAwIDAgMCBmIGYgcCByIDI4IDAgdCBmIGYg ZiBmIHQgMyAxIF9udWxsXyBfbnVsbF8gKSk7CiAgREVTQ1IoIiIpOwogIAog IAotLS0gMTM4LDE1MCAtLS0tCiAgICogTm90ZTogIjMiIGluIHRoZSByZWxm cm96ZW54aWQgY29sdW1uIHN0YW5kcyBmb3IgRmlyc3ROb3JtYWxUcmFuc2Fj dGlvbklkOwogICAqIHNpbWlsYXJseSwgIjEiIGluIHJlbG1pbm14aWQgc3Rh bmRzIGZvciBGaXJzdE11bHRpWGFjdElkCiAgICovCiEgREFUQShpbnNlcnQg T0lEID0gMTI0NyAoICBwZ190eXBlCQlQR05TUCA3MSAwIFBHVUlEIDAgMCAw IDAgMCAwIDAgZiBmIHAgciAzMCAwIHQgZiBmIGYgZiBmIHQgMyAxIF9udWxs XyBfbnVsbF8gKSk7CiAgREVTQ1IoIiIpOwohIERBVEEoaW5zZXJ0IE9JRCA9 IDEyNDkgKCAgcGdfYXR0cmlidXRlCVBHTlNQIDc1IDAgUEdVSUQgMCAwIDAg MCAwIDAgMCBmIGYgcCByIDIxIDAgZiBmIGYgZiBmIGYgdCAzIDEgX251bGxf IF9udWxsXyApKTsKICBERVNDUigiIik7CiEgREFUQShpbnNlcnQgT0lEID0g MTI1NSAoICBwZ19wcm9jCQlQR05TUCA4MSAwIFBHVUlEIDAgMCAwIDAgMCAw IDAgZiBmIHAgciAyNyAwIHQgZiBmIGYgZiBmIHQgMyAxIF9udWxsXyBfbnVs bF8gKSk7CiAgREVTQ1IoIiIpOwohIERBVEEoaW5zZXJ0IE9JRCA9IDEyNTkg KCAgcGdfY2xhc3MJCVBHTlNQIDgzIDAgUEdVSUQgMCAwIDAgMCAwIDAgMCBm IGYgcCByIDI5IDAgdCBmIGYgZiBmIGYgdCAzIDEgX251bGxfIF9udWxsXyAp KTsKICBERVNDUigiIik7CiAgCiAgCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9jYXRhbG9nL3BnX3Jvd3NlY3VyaXR5LmggYi9zcmMvaW5jbHVkZS9jYXRh bG9nL3BnX3Jvd3NlY3VyaXR5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggLi4uYTA2OGIzNQoqKiogYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Jv d3NlY3VyaXR5LmgKLS0tIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19yb3dz ZWN1cml0eS5oCioqKioqKioqKioqKioqKgoqKiogMCAqKioqCi0tLSAxLDc2 IC0tLS0KKyAvKgorICAqIHBnX3Jvd3NlY3VyaXR5LmgKKyAgKiAgIGRlZmlu aXRpb24gb2YgdGhlIHN5c3RlbSBjYXRhbG9nIGZvciByb3ctc2VjdXJpdHkg cG9saWN5IChwZ19yb3dzZWN1cml0eSkKKyAgKgorICAqIFBvcnRpb25zIENv cHlyaWdodCAoYykgMTk5Ni0yMDEyLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZl bG9wbWVudCBHcm91cAorICAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5 NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisg ICoKKyAgKi8KKyAjaWZuZGVmIFBHX1JPV1NFQ1VSSVRZX0gKKyAjZGVmaW5l IFBHX1JPV1NFQ1VSSVRZX0gKKyAKKyAjaW5jbHVkZSAiY2F0YWxvZy9nZW5i a2kuaCIKKyAjaW5jbHVkZSAibm9kZXMvcHJpbW5vZGVzLmgiCisgI2luY2x1 ZGUgInV0aWxzL21lbXV0aWxzLmgiCisgI2luY2x1ZGUgInV0aWxzL3JlbGNh Y2hlLmgiCisgCisgLyogLS0tLS0tLS0tLS0tLS0tLQorICAqCQlwZ19yb3ds ZXZlbHNlYyBkZWZpbml0aW9uLiBjcHAgdHVybnMgdGhpcyBpbnRvCisgICoJ CXR5cGVkZWYgc3RydWN0IEZvcm1EYXRhX3BnX3Jvd2xldmVsc2VjCisgICog LS0tLS0tLS0tLS0tLS0tLQorICAqLworICNkZWZpbmUgUm93U2VjdXJpdHlS ZWxhdGlvbklkCTM4MzgKKyAKKyBDQVRBTE9HKHBnX3Jvd3NlY3VyaXR5LDM4 MzgpCisgeworIAkvKiBPaWQgb2YgdGhlIHJlbGF0aW9uIHRoYXQgaGFzIHJv dy1zZWN1cml0eSBwb2xpY3kgKi8KKyAJT2lkCQkJCXJzZWNyZWxpZDsKKyAK KyAJLyogT25lIG9mIFJPV1NFQ1VSSVRZX0NNRF8qIGJlbG93ICovCisgCWNo YXIJCQlyc2VjY21kOworICNpZmRlZiBDQVRBTE9HX1ZBUkxFTgorIAlwZ19u b2RlX3RyZWUJcnNlY3F1YWw7CisgI2VuZGlmCisgfSBGb3JtRGF0YV9wZ19y b3dzZWN1cml0eTsKKyAKKyAvKiAtLS0tLS0tLS0tLS0tLS0tCisgICoJCUZv cm1fcGdfcm93bGV2ZWxzZWMgY29ycmVzcG9uZHMgdG8gYSBwb2ludGVyIHRv IGEgcm93IHdpdGgKKyAgKgkJdGhlIGZvcm1hdCBvZiBwZ19yb3dsZXZlbHNl YyByZWxhdGlvbi4KKyAgKiAtLS0tLS0tLS0tLS0tLS0tCisgICovCisgdHlw ZWRlZiBGb3JtRGF0YV9wZ19yb3dzZWN1cml0eSAqRm9ybV9wZ19yb3dzZWN1 cml0eTsKKyAKKyAvKiAtLS0tLS0tLS0tLS0tLS0tCisgICogCQljb21waWxl ciBjb25zdGFudHMgZm9yIHBnX3Jvd2xldmVsc2VjCisgICogLS0tLS0tLS0t LS0tLS0tLQorICAqLworICNkZWZpbmUgTmF0dHNfcGdfcm93c2VjdXJpdHkJ CQkJMworICNkZWZpbmUgQW51bV9wZ19yb3dzZWN1cml0eV9yc2VjcmVsaWQJ CTEKKyAjZGVmaW5lIEFudW1fcGdfcm93c2VjdXJpdHlfcnNlY2NtZAkJCTIK KyAjZGVmaW5lIEFudW1fcGdfcm93c2VjdXJpdHlfcnNlY3F1YWwJCTMKKyAK KyAjZGVmaW5lIFJPV1NFQ1VSSVRZX0NNRF9BTEwJCQknYScKKyAjZGVmaW5l IFJPV1NFQ1VSSVRZX0NNRF9TRUxFQ1QJCSdzJworICNkZWZpbmUgUk9XU0VD VVJJVFlfQ01EX0lOU0VSVAkJJ2knCisgI2RlZmluZSBST1dTRUNVUklUWV9D TURfVVBEQVRFCQkndScKKyAjZGVmaW5lIFJPV1NFQ1VSSVRZX0NNRF9ERUxF VEUJCSdkJworIAorIHR5cGVkZWYgc3RydWN0CisgeworIAlPaWQJCQlyc2Vj aWQ7CisgCUV4cHIJICAgKnF1YWw7CisgCWJvb2wJCWhhc3N1YmxpbmtzOwor IH0gUm93U2VjdXJpdHlFbnRyeTsKKyAKKyB0eXBlZGVmIHN0cnVjdAorIHsK KyAJTWVtb3J5Q29udGV4dAkJcnNjeHQ7CisgCVJvd1NlY3VyaXR5RW50cnkJ cnNhbGw7CS8qIHJvdy1zZWN1cml0eSBwb2xpY3kgZm9yIEFMTCAqLworIH0g Um93U2VjdXJpdHlEZXNjOworIAorIGV4dGVybiB2b2lkCVJlbGF0aW9uQnVp bGRSb3dTZWN1cml0eShSZWxhdGlvbiByZWxhdGlvbik7CisgZXh0ZXJuIHZv aWQJQVRFeGVjU2V0Um93U2VjdXJpdHkoUmVsYXRpb24gcmVsYXRpb24sCisg CQkJCQkJCQkgY29uc3QgY2hhciAqY21kbmFtZSwgTm9kZSAqY2xhdXNlKTsK KyBleHRlcm4gdm9pZAlSZW1vdmVSb3dTZWN1cml0eUJ5SWQoT2lkIHJlbGF0 aW9uSWQpOworIAorICNlbmRpZiAgLyogUEdfUk9XU0VDVVJJVFlfSCAqLwpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbWlzY2FkbWluLmggYi9zcmMvaW5j bHVkZS9taXNjYWRtaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBl ZGNlZDI5Li5iZDE0NTMxCioqKiBhL3NyYy9pbmNsdWRlL21pc2NhZG1pbi5o Ci0tLSBiL3NyYy9pbmNsdWRlL21pc2NhZG1pbi5oCioqKioqKioqKioqKioq KiBleHRlcm4gaW50CXRyYWNlX3JlY292ZXJ5KGludCB0cmFjZV9sZXZlCioq KiAyNzksMjg0ICoqKioKLS0tIDI3OSwyODUgLS0tLQogIC8qIGZsYWdzIHRv IGJlIE9SJ2QgdG8gZm9ybSBzZWNfY29udGV4dCAqLwogICNkZWZpbmUgU0VD VVJJVFlfTE9DQUxfVVNFUklEX0NIQU5HRQkweDAwMDEKICAjZGVmaW5lIFNF Q1VSSVRZX1JFU1RSSUNURURfT1BFUkFUSU9OCTB4MDAwMgorICNkZWZpbmUg U0VDVVJJVFlfUk9XX0xFVkVMX0RJU0FCTEVECQkweDAwMDQKICAKICBleHRl cm4gY2hhciAqRGF0YWJhc2VQYXRoOwogIApkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9l eGVjbm9kZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOThhZjI2 Li45M2M0MGYyCioqKiBhL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5o Ci0tLSBiL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCioqKioqKioq KioqKioqKiB0eXBlZGVmIHN0cnVjdCBKdW5rRmlsdGVyCioqKiAzMDgsMzEz ICoqKioKLS0tIDMwOCwzMTUgLS0tLQogICAqCQlDb25zdHJhaW50RXhwcnMJ CQlhcnJheSBvZiBjb25zdHJhaW50LWNoZWNraW5nIGV4cHIgc3RhdGVzCiAg ICoJCWp1bmtGaWx0ZXIJCQkJZm9yIHJlbW92aW5nIGp1bmsgYXR0cmlidXRl cyBmcm9tIHR1cGxlcwogICAqCQlwcm9qZWN0UmV0dXJuaW5nCQlmb3IgY29t cHV0aW5nIGEgUkVUVVJOSU5HIGxpc3QKKyAgKgkJcm93U2VjdXJpdHkJCQkJ Zm9yIHJvdy1zZWN1cml0eSBjaGVja3MKKyAgKgkJcm93U2VjUGFyYW1zCQkJ cGFyYW0tbGlzdCBpZiByb3ctc2VjdXJpdHkgaGFzIFN1YkxpbmsKICAgKiAt LS0tLS0tLS0tLS0tLS0tCiAgICovCiAgdHlwZWRlZiBzdHJ1Y3QgUmVzdWx0 UmVsSW5mbwoqKioqKioqKioqKioqKiogdHlwZWRlZiBzdHJ1Y3QgUmVzdWx0 UmVsSW5mbwoqKiogMzI5LDMzNCAqKioqCi0tLSAzMzEsMzM4IC0tLS0KICAJ TGlzdAkgICoqcmlfQ29uc3RyYWludEV4cHJzOwogIAlKdW5rRmlsdGVyICpy aV9qdW5rRmlsdGVyOwogIAlQcm9qZWN0aW9uSW5mbyAqcmlfcHJvamVjdFJl dHVybmluZzsKKyAJTm9kZQkgICAqcmlfcm93U2VjdXJpdHk7CisgCUxpc3QJ ICAgKnJpX3Jvd1NlY1BhcmFtczsKICB9IFJlc3VsdFJlbEluZm87CiAgCiAg LyogLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv bm9kZXMvbm9kZUZ1bmNzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9ub2RlRnVu Y3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNDkwMWNhLi5jYjMw MTEwCioqKiBhL3NyYy9pbmNsdWRlL25vZGVzL25vZGVGdW5jcy5oCi0tLSBi L3NyYy9pbmNsdWRlL25vZGVzL25vZGVGdW5jcy5oCioqKioqKioqKioqKioq KgoqKiogMjQsMjkgKioqKgotLS0gMjQsMzAgLS0tLQogICNkZWZpbmUgUVRX X0lHTk9SRV9SQU5HRV9UQUJMRQkJMHgwOAkJLyogc2tpcCByYW5nZXRhYmxl IGVudGlyZWx5ICovCiAgI2RlZmluZSBRVFdfRVhBTUlORV9SVEVTCQkJMHgx MAkJLyogZXhhbWluZSBSVEVzICovCiAgI2RlZmluZSBRVFdfRE9OVF9DT1BZ X1FVRVJZCQkJMHgyMAkJLyogZG8gbm90IGNvcHkgdG9wIFF1ZXJ5ICovCisg I2RlZmluZSBRVFdfSUdOT1JFX1JFVFVSTklORwkJMHg0MAkJLyogc2tpcCBy ZXR1cm5pbmcgY2xhdXNlICovCiAgCiAgCiAgZXh0ZXJuIE9pZAlleHByVHlw ZShjb25zdCBOb2RlICpleHByKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L25vZGVzL3BhcnNlbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNl bm9kZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NDE1ZTJjLi43 NDk0YjE5CioqKiBhL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaAot LS0gYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgKKioqKioqKioq KioqKioqIHR5cGVkZWYgZW51bSBRdWVyeVNvdXJjZQoqKiogMzEsMzcgKioq KgogIAlRU1JDX1BBUlNFUiwJCQkJLyogYWRkZWQgYnkgcGFyc2UgYW5hbHlz aXMgKG5vdyB1bnVzZWQpICovCiAgCVFTUkNfSU5TVEVBRF9SVUxFLAkJCS8q IGFkZGVkIGJ5IHVuY29uZGl0aW9uYWwgSU5TVEVBRCBydWxlICovCiAgCVFT UkNfUVVBTF9JTlNURUFEX1JVTEUsCQkvKiBhZGRlZCBieSBjb25kaXRpb25h bCBJTlNURUFEIHJ1bGUgKi8KISAJUVNSQ19OT05fSU5TVEVBRF9SVUxFCQkv KiBhZGRlZCBieSBub24tSU5TVEVBRCBydWxlICovCiAgfSBRdWVyeVNvdXJj ZTsKICAKICAvKiBTb3J0IG9yZGVyaW5nIG9wdGlvbnMgZm9yIE9SREVSIEJZ IGFuZCBDUkVBVEUgSU5ERVggKi8KLS0tIDMxLDM4IC0tLS0KICAJUVNSQ19Q QVJTRVIsCQkJCS8qIGFkZGVkIGJ5IHBhcnNlIGFuYWx5c2lzIChub3cgdW51 c2VkKSAqLwogIAlRU1JDX0lOU1RFQURfUlVMRSwJCQkvKiBhZGRlZCBieSB1 bmNvbmRpdGlvbmFsIElOU1RFQUQgcnVsZSAqLwogIAlRU1JDX1FVQUxfSU5T VEVBRF9SVUxFLAkJLyogYWRkZWQgYnkgY29uZGl0aW9uYWwgSU5TVEVBRCBy dWxlICovCiEgCVFTUkNfTk9OX0lOU1RFQURfUlVMRSwJCS8qIGFkZGVkIGJ5 IG5vbi1JTlNURUFEIHJ1bGUgKi8KISAJUVNSQ19ST1dfU0VDVVJJVFksCQkJ LyogYWRkZWQgYnkgcm93LXNlY3VyaXR5ICovCiAgfSBRdWVyeVNvdXJjZTsK ICAKICAvKiBTb3J0IG9yZGVyaW5nIG9wdGlvbnMgZm9yIE9SREVSIEJZIGFu ZCBDUkVBVEUgSU5ERVggKi8KKioqKioqKioqKioqKioqIHR5cGVkZWYgc3Ry dWN0IFF1ZXJ5CioqKiAxMTIsMTE4ICoqKioKICAKICAJaW50CQkJcmVzdWx0 UmVsYXRpb247IC8qIHJ0YWJsZSBpbmRleCBvZiB0YXJnZXQgcmVsYXRpb24g Zm9yCiAgCQkJCQkJCQkgKiBJTlNFUlQvVVBEQVRFL0RFTEVURTsgMCBmb3Ig U0VMRUNUICovCiEgCiAgCWJvb2wJCWhhc0FnZ3M7CQkvKiBoYXMgYWdncmVn YXRlcyBpbiB0bGlzdCBvciBoYXZpbmdRdWFsICovCiAgCWJvb2wJCWhhc1dp bmRvd0Z1bmNzOyAvKiBoYXMgd2luZG93IGZ1bmN0aW9ucyBpbiB0bGlzdCAq LwogIAlib29sCQloYXNTdWJMaW5rczsJLyogaGFzIHN1YnF1ZXJ5IFN1Ykxp bmsgKi8KLS0tIDExMywxMjEgLS0tLQogIAogIAlpbnQJCQlyZXN1bHRSZWxh dGlvbjsgLyogcnRhYmxlIGluZGV4IG9mIHRhcmdldCByZWxhdGlvbiBmb3IK ICAJCQkJCQkJCSAqIElOU0VSVC9VUERBVEUvREVMRVRFOyAwIGZvciBTRUxF Q1QgKi8KISAJaW50CQkJc291cmNlUmVsYXRpb247CS8qIHJ0YWJsZSBpbmRl eCBvZiBzb3VyY2UgcmVsYXRpb24gZm9yCiEgCQkJCQkJCQkgKiBVUERBVEUv REVMRVRFLCBpZiBub3QgaWRlbnRpY2FsIHdpdGgKISAJCQkJCQkJCSAqIHJl c3VsdFJlbGF0aW9uOyAwIGZvciBlbHNld2hlcmUgKi8KICAJYm9vbAkJaGFz QWdnczsJCS8qIGhhcyBhZ2dyZWdhdGVzIGluIHRsaXN0IG9yIGhhdmluZ1F1 YWwgKi8KICAJYm9vbAkJaGFzV2luZG93RnVuY3M7IC8qIGhhcyB3aW5kb3cg ZnVuY3Rpb25zIGluIHRsaXN0ICovCiAgCWJvb2wJCWhhc1N1YkxpbmtzOwkv KiBoYXMgc3VicXVlcnkgU3ViTGluayAqLwoqKioqKioqKioqKioqKiogdHlw ZWRlZiBzdHJ1Y3QgUmFuZ2VUYmxFbnRyeQoqKiogNzI3LDczMiAqKioqCi0t LSA3MzAsNzQwIC0tLS0KICAJICovCiAgCVF1ZXJ5CSAgICpzdWJxdWVyeTsJ CS8qIHRoZSBzdWItcXVlcnkgKi8KICAJYm9vbAkJc2VjdXJpdHlfYmFycmll cjsJCS8qIGlzIGZyb20gc2VjdXJpdHlfYmFycmllciB2aWV3PyAqLworIAlP aWQJCQlyb3dzZWNfcmVsaWQ7CS8qIE9JRCBvZiB0aGUgb3JpZ2luYWwgcmVs YXRpb24sIGlmIHRoaXMKKyAJCQkJCQkJCSAqIHN1Yi1xdWVyeSBvcmlnaW5h dGVkIGZyb20gcm93LXNlY3VyaXR5CisgCQkJCQkJCQkgKiBwb2xpY3kgb24g dGhlIHJlbGF0aW9uLiBFbHNld2hlcmUsIGl0CisgCQkJCQkJCQkgKiBzaG91 bGQgYmUgSW52YWxpZE9pZC4KKyAJCQkJCQkJCSAqLwogIAogIAkvKgogIAkg KiBGaWVsZHMgdmFsaWQgZm9yIGEgam9pbiBSVEUgKGVsc2UgTlVMTC96ZXJv KToKKioqKioqKioqKioqKioqIHR5cGVkZWYgZW51bSBBbHRlclRhYmxlVHlw ZQoqKiogMTI2NiwxMjcxICoqKioKLS0tIDEyNzQsMTI4MSAtLS0tCiAgCUFU X0Ryb3BJbmhlcml0LAkJCQkvKiBOTyBJTkhFUklUIHBhcmVudCAqLwogIAlB VF9BZGRPZiwJCQkJCS8qIE9GIDx0eXBlX25hbWU+ICovCiAgCUFUX0Ryb3BP ZiwJCQkJCS8qIE5PVCBPRiAqLworIAlBVF9TZXRSb3dTZWN1cml0eSwJCQkv KiBTRVQgUk9XIFNFQ1VSSVRZICguLi4pICovCisgCUFUX1Jlc2V0Um93U2Vj dXJpdHksCQkvKiBSRVNFVCBST1cgU0VDVVJJVFkgKi8KICAJQVRfR2VuZXJp Y09wdGlvbnMJCQkvKiBPUFRJT05TICguLi4pICovCiAgfSBBbHRlclRhYmxl VHlwZTsKICAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5u b2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggYWE0ZjEyYy4uYzA0MGMyMwoqKiogYS9z cmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaAotLS0gYi9zcmMvaW5jbHVk ZS9ub2Rlcy9wbGFubm9kZXMuaAoqKioqKioqKioqKioqKiogdHlwZWRlZiBz dHJ1Y3QgUGxhbm5lZFN0bXQKKioqIDY3LDcyICoqKioKLS0tIDY3LDc0IC0t LS0KICAJTGlzdAkgICAqaW52YWxJdGVtczsJCS8qIG90aGVyIGRlcGVuZGVu Y2llcywgYXMgUGxhbkludmFsSXRlbXMgKi8KICAKICAJaW50CQkJblBhcmFt RXhlYzsJCS8qIG51bWJlciBvZiBQQVJBTV9FWEVDIFBhcmFtcyB1c2VkICov CisgCisgCU9pZAkJCXBsYW5Vc2VySWQ7CQkvKiB1c2VyLWlkIHRoaXMgcGxh biBhc3N1bWVkLCBvciBJbnZhbGlkT2lkICovCiAgfSBQbGFubmVkU3RtdDsK ICAKICAvKiBtYWNybyBmb3IgZmV0Y2hpbmcgdGhlIFBsYW4gYXNzb2NpYXRl ZCB3aXRoIGEgU3ViUGxhbiBub2RlICovCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9ub2Rlcy9yZWxhdGlvbi5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcmVs YXRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMGE2MzZiLi5l ZDAxYjY1CioqKiBhL3NyYy9pbmNsdWRlL25vZGVzL3JlbGF0aW9uLmgKLS0t IGIvc3JjL2luY2x1ZGUvbm9kZXMvcmVsYXRpb24uaAoqKioqKioqKioqKioq KiogdHlwZWRlZiBzdHJ1Y3QgUGxhbm5lckdsb2JhbAoqKiogOTgsMTAzICoq KioKLS0tIDk4LDEwNSAtLS0tCiAgCUluZGV4CQlsYXN0Um93TWFya0lkOwkv KiBoaWdoZXN0IFBsYW5Sb3dNYXJrIElEIGFzc2lnbmVkICovCiAgCiAgCWJv b2wJCXRyYW5zaWVudFBsYW47CS8qIHJlZG8gcGxhbiB3aGVuIFRyYW5zYWN0 aW9uWG1pbiBjaGFuZ2VzPyAqLworIAorIAlPaWQJCQlwbGFuVXNlcklkOwkJ LyogVXNlci1JZCB0byBiZSBhc3N1bWVkIG9uIHRoaXMgcGxhbiAqLwogIH0g UGxhbm5lckdsb2JhbDsKICAKICAvKiBtYWNybyBmb3IgZmV0Y2hpbmcgdGhl IFBsYW4gYXNzb2NpYXRlZCB3aXRoIGEgU3ViUGxhbiBub2RlICovCioqKioq KioqKioqKioqKiB0eXBlZGVmIHN0cnVjdCBBcHBlbmRSZWxJbmZvCioqKiAx NDE2LDE0MjEgKioqKgotLS0gMTQxOCwxNDI3IC0tLS0KICAJICovCiAgCUlu ZGV4CQlwYXJlbnRfcmVsaWQ7CS8qIFJUIGluZGV4IG9mIGFwcGVuZCBwYXJl bnQgcmVsICovCiAgCUluZGV4CQljaGlsZF9yZWxpZDsJLyogUlQgaW5kZXgg b2YgYXBwZW5kIGNoaWxkIHJlbCAqLworIAlJbmRleAkJY2hpbGRfcmVzdWx0 OwkvKiBSVCBpbmRleCBvZiBhcHBlbmQgY2hpbGQgcmVsJ3Mgc291cmNlLAor IAkJCQkJCQkJICogaWYgc291cmNlIG9mIHJlc3VsdCByZWxhdGlvbiBpcyBu b3QKKyAJCQkJCQkJCSAqIGlkZW50aWNhbC4gRWxzZXdoZXJlLCAwLgorIAkJ CQkJCQkJICovCiAgCiAgCS8qCiAgCSAqIEZvciBhbiBpbmhlcml0YW5jZSBh cHBlbmRyZWwsIHRoZSBwYXJlbnQgYW5kIGNoaWxkIGFyZSBib3RoIHJlZ3Vs YXIKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL29wdGltaXplci9yb3dzZWN1 cml0eS5oIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3Jvd3NlY3VyaXR5LmgK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggLi4uZmY0ZGQ5YQoqKiogYS9z cmMvaW5jbHVkZS9vcHRpbWl6ZXIvcm93c2VjdXJpdHkuaAotLS0gYi9zcmMv aW5jbHVkZS9vcHRpbWl6ZXIvcm93c2VjdXJpdHkuaAoqKioqKioqKioqKioq KioKKioqIDAgKioqKgotLS0gMSwyNyAtLS0tCisgLyogLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorICAqCisgICogcm93c2VjdXJpdHkuaAorICAq ICAgIHByb3RvdHlwZXMgZm9yIG9wdGltaXplci9yb3dzZWN1cml0eS5jCisg ICoKKyAgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAxMiwgUG9z dGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAgKiBQb3J0aW9u cyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNp dHkgb2YgQ2FsaWZvcm5pYQorICAqCisgICogLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorICAqLworICNpZm5kZWYgUk9XU0VDVVJJVFlfSAorICNk ZWZpbmUgUk9XU0VDVVJJVFlfSAorIAorICNpbmNsdWRlICJub2Rlcy9leGVj bm9kZXMuaCIKKyAjaW5jbHVkZSAibm9kZXMvcGFyc2Vub2Rlcy5oIgorICNp bmNsdWRlICJub2Rlcy9yZWxhdGlvbi5oIgorICNpbmNsdWRlICJ1dGlscy9y ZWwuaCIKKyAKKyB0eXBlZGVmIExpc3QgKigqcm93X3NlY3VyaXR5X3BvbGlj eV9ob29rX3R5cGUpKENtZFR5cGUgY21kdHlwZSwKKyAJCQkJCQkJCQkJCSAg IFJlbGF0aW9uIHJlbGF0aW9uKTsKKyBleHRlcm4gUEdETExJTVBPUlQgcm93 X3NlY3VyaXR5X3BvbGljeV9ob29rX3R5cGUgcm93X3NlY3VyaXR5X3BvbGlj eV9ob29rOworIAorIGV4dGVybiBib29sCWNvcHlfcm93X3NlY3VyaXR5X3Bv bGljeShDb3B5U3RtdCAqc3RtdCwKKyAJCQkJCQkJCQkgUmVsYXRpb24gcmVs YXRpb24sIExpc3QgKmF0dG51bXMpOworIGV4dGVybiB2b2lkCWFwcGx5X3Jv d19zZWN1cml0eV9wb2xpY3koUGxhbm5lckluZm8gKnJvb3QpOworIAorICNl bmRpZgkvKiBST1dTRUNVUklUWV9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9wYXJzZXIvcGFyc2Vfbm9kZS5oIGIvc3JjL2luY2x1ZGUvcGFyc2Vy L3BhcnNlX25vZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZWEz YjA3Li4zOTEwODUzCioqKiBhL3NyYy9pbmNsdWRlL3BhcnNlci9wYXJzZV9u b2RlLmgKLS0tIGIvc3JjL2luY2x1ZGUvcGFyc2VyL3BhcnNlX25vZGUuaAoq KioqKioqKioqKioqKiogdHlwZWRlZiBlbnVtIFBhcnNlRXhwcktpbmQKKioq IDYzLDY5ICoqKioKICAJRVhQUl9LSU5EX0lOREVYX1BSRURJQ0FURSwJLyog aW5kZXggcHJlZGljYXRlICovCiAgCUVYUFJfS0lORF9BTFRFUl9DT0xfVFJB TlNGT1JNLAkJLyogdHJhbnNmb3JtIGV4cHIgaW4gQUxURVIgQ09MVU1OIFRZ UEUgKi8KICAJRVhQUl9LSU5EX0VYRUNVVEVfUEFSQU1FVEVSLAkvKiBwYXJh bWV0ZXIgdmFsdWUgaW4gRVhFQ1VURSAqLwohIAlFWFBSX0tJTkRfVFJJR0dF Ul9XSEVOCQkvKiBXSEVOIGNvbmRpdGlvbiBpbiBDUkVBVEUgVFJJR0dFUiAq LwogIH0gUGFyc2VFeHByS2luZDsKICAKICAKLS0tIDYzLDcwIC0tLS0KICAJ RVhQUl9LSU5EX0lOREVYX1BSRURJQ0FURSwJLyogaW5kZXggcHJlZGljYXRl ICovCiAgCUVYUFJfS0lORF9BTFRFUl9DT0xfVFJBTlNGT1JNLAkJLyogdHJh bnNmb3JtIGV4cHIgaW4gQUxURVIgQ09MVU1OIFRZUEUgKi8KICAJRVhQUl9L SU5EX0VYRUNVVEVfUEFSQU1FVEVSLAkvKiBwYXJhbWV0ZXIgdmFsdWUgaW4g RVhFQ1VURSAqLwohIAlFWFBSX0tJTkRfVFJJR0dFUl9XSEVOLAkJLyogV0hF TiBjb25kaXRpb24gaW4gQ1JFQVRFIFRSSUdHRVIgKi8KISAJRVhQUl9LSU5E X1JPV19TRUNVUklUWSwJCQkvKiBST1cgU0VDVVJJVFkgcG9saWN5IGZvciBh IHRhYmxlICovCiAgfSBQYXJzZUV4cHJLaW5kOwogIAogIApkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvcGFyc2VyL3BhcnNldHJlZS5oIGIvc3JjL2luY2x1 ZGUvcGFyc2VyL3BhcnNldHJlZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDk2MDhjYzYuLmI0ZTlkZjQKKioqIGEvc3JjL2luY2x1ZGUvcGFyc2Vy L3BhcnNldHJlZS5oCi0tLSBiL3NyYy9pbmNsdWRlL3BhcnNlci9wYXJzZXRy ZWUuaAoqKioqKioqKioqKioqKioKKioqIDMyLDQ1ICoqKioKICAJKChSYW5n ZVRibEVudHJ5ICopIGxpc3RfbnRoKHJhbmdldGFibGUsIChyYW5nZXRhYmxl X2luZGV4KS0xKSkKICAKICAvKgotICAqCQlnZXRyZWxpZAotICAqCiAgICoJ CUdpdmVuIHRoZSByYW5nZSBpbmRleCBvZiBhIHJlbGF0aW9uLCByZXR1cm4g dGhlIGNvcnJlc3BvbmRpbmcKICAgKgkJcmVsYXRpb24gT0lELiAgTm90ZSB0 aGF0IEludmFsaWRPaWQgd2lsbCBiZSByZXR1cm5lZCBpZiB0aGUKICAgKgkJ UlRFIGlzIGZvciBhIG5vbi1yZWxhdGlvbi10eXBlIFJURS4KICAgKi8KISAj ZGVmaW5lIGdldHJlbGlkKHJhbmdlaW5kZXgscmFuZ2V0YWJsZSkgXAohIAko cnRfZmV0Y2gocmFuZ2VpbmRleCwgcmFuZ2V0YWJsZSktPnJlbGlkKQogIAog IC8qCiAgICogR2l2ZW4gYW4gUlRFIGFuZCBhbiBhdHRyaWJ1dGUgbnVtYmVy LCByZXR1cm4gdGhlIGFwcHJvcHJpYXRlCi0tLSAzMiw0MiAtLS0tCiAgCSgo UmFuZ2VUYmxFbnRyeSAqKSBsaXN0X250aChyYW5nZXRhYmxlLCAocmFuZ2V0 YWJsZV9pbmRleCktMSkpCiAgCiAgLyoKICAgKgkJR2l2ZW4gdGhlIHJhbmdl IGluZGV4IG9mIGEgcmVsYXRpb24sIHJldHVybiB0aGUgY29ycmVzcG9uZGlu ZwogICAqCQlyZWxhdGlvbiBPSUQuICBOb3RlIHRoYXQgSW52YWxpZE9pZCB3 aWxsIGJlIHJldHVybmVkIGlmIHRoZQogICAqCQlSVEUgaXMgZm9yIGEgbm9u LXJlbGF0aW9uLXR5cGUgUlRFLgogICAqLwohIGV4dGVybiBPaWQJZ2V0cmVs aWQoSW5kZXggcmFuZ2VpbmRleCwgTGlzdCAqcmFuZ2V0YWJsZSk7CiAgCiAg LyoKICAgKiBHaXZlbiBhbiBSVEUgYW5kIGFuIGF0dHJpYnV0ZSBudW1iZXIs IHJldHVybiB0aGUgYXBwcm9wcmlhdGUKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL3Jld3JpdGUvcmV3cml0ZUhhbmRsZXIuaCBiL3NyYy9pbmNsdWRlL3Jl d3JpdGUvcmV3cml0ZUhhbmRsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCBmMDYwNGIwLi42YjZjMzY0CioqKiBhL3NyYy9pbmNsdWRlL3Jld3Jp dGUvcmV3cml0ZUhhbmRsZXIuaAotLS0gYi9zcmMvaW5jbHVkZS9yZXdyaXRl L3Jld3JpdGVIYW5kbGVyLmgKKioqKioqKioqKioqKioqCioqKiAxOCwyMyAq KioqCi0tLSAxOCwyNCAtLS0tCiAgI2luY2x1ZGUgIm5vZGVzL3BhcnNlbm9k ZXMuaCIKICAKICBleHRlcm4gTGlzdCAqUXVlcnlSZXdyaXRlKFF1ZXJ5ICpw YXJzZXRyZWUpOworIGV4dGVybiB2b2lkCVF1ZXJ5UmV3cml0ZUV4cHIoTm9k ZSAqbm9kZSwgTGlzdCAqYWN0aXZlUklScyk7CiAgZXh0ZXJuIHZvaWQgQWNx dWlyZVJld3JpdGVMb2NrcyhRdWVyeSAqcGFyc2V0cmVlLCBib29sIGZvclVw ZGF0ZVB1c2hlZERvd24pOwogIAogIGV4dGVybiBOb2RlICpidWlsZF9jb2x1 bW5fZGVmYXVsdChSZWxhdGlvbiByZWwsIGludCBhdHRybm8pOwpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvcGxhbmNhY2hlLmggYi9zcmMvaW5j bHVkZS91dGlscy9wbGFuY2FjaGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCA3MmY4NDkxLi4zNTgxOWZhCioqKiBhL3NyYy9pbmNsdWRlL3V0aWxz L3BsYW5jYWNoZS5oCi0tLSBiL3NyYy9pbmNsdWRlL3V0aWxzL3BsYW5jYWNo ZS5oCioqKioqKioqKioqKioqKiB0eXBlZGVmIHN0cnVjdCBDYWNoZWRQbGFu CioqKiAxMjgsMTMzICoqKioKLS0tIDEyOCwxMzUgLS0tLQogIAlib29sCQlp c19vbmVzaG90OwkJLyogaXMgaXQgYSAib25lc2hvdCIgcGxhbj8gKi8KICAJ Ym9vbAkJaXNfc2F2ZWQ7CQkvKiBpcyBDYWNoZWRQbGFuIGluIGEgbG9uZy1s aXZlZCBjb250ZXh0PyAqLwogIAlib29sCQlpc192YWxpZDsJCS8qIGlzIHRo ZSBzdG10X2xpc3QgY3VycmVudGx5IHZhbGlkPyAqLworIAlPaWQJCQlwbGFu VXNlcklkOwkJLyogaXMgdXNlci1pZCB0aGF0IGlzIGFzc3VtZWQgb24gdGhp cyBjYWNoZWQKKyAJCQkJCQkJCSAgIHBsYW4sIG9yIEludmFsaWRPaWQgaWYg cG9ydGFibGUgZm9yIGFueWJvZHkgKi8KICAJVHJhbnNhY3Rpb25JZCBzYXZl ZF94bWluOwkvKiBpZiB2YWxpZCwgcmVwbGFuIHdoZW4gVHJhbnNhY3Rpb25Y bWluCiAgCQkJCQkJCQkgKiBjaGFuZ2VzIGZyb20gdGhpcyB2YWx1ZSAqLwog IAlpbnQJCQlnZW5lcmF0aW9uOwkJLyogcGFyZW50J3MgZ2VuZXJhdGlvbiBu dW1iZXIgZm9yIHRoaXMgcGxhbiAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvdXRpbHMvcmVsLmggYi9zcmMvaW5jbHVkZS91dGlscy9yZWwuaApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ODljOWE4Li40ZTRhYzY1CioqKiBh L3NyYy9pbmNsdWRlL3V0aWxzL3JlbC5oCi0tLSBiL3NyYy9pbmNsdWRlL3V0 aWxzL3JlbC5oCioqKioqKioqKioqKioqKgoqKiogMTgsMjMgKioqKgotLS0g MTgsMjQgLS0tLQogICNpbmNsdWRlICJjYXRhbG9nL3BnX2FtLmgiCiAgI2lu Y2x1ZGUgImNhdGFsb2cvcGdfY2xhc3MuaCIKICAjaW5jbHVkZSAiY2F0YWxv Zy9wZ19pbmRleC5oIgorICNpbmNsdWRlICJjYXRhbG9nL3BnX3Jvd3NlY3Vy aXR5LmgiCiAgI2luY2x1ZGUgImZtZ3IuaCIKICAjaW5jbHVkZSAibm9kZXMv Yml0bWFwc2V0LmgiCiAgI2luY2x1ZGUgInJld3JpdGUvcHJzMmxvY2suaCIK KioqKioqKioqKioqKioqIHR5cGVkZWYgc3RydWN0IFJlbGF0aW9uRGF0YQoq KiogMTA5LDExNCAqKioqCi0tLSAxMTAsMTE2IC0tLS0KICAJUnVsZUxvY2sg ICAqcmRfcnVsZXM7CQkvKiByZXdyaXRlIHJ1bGVzICovCiAgCU1lbW9yeUNv bnRleHQgcmRfcnVsZXNjeHQ7CS8qIHByaXZhdGUgbWVtb3J5IGN4dCBmb3Ig cmRfcnVsZXMsIGlmIGFueSAqLwogIAlUcmlnZ2VyRGVzYyAqdHJpZ2Rlc2M7 CQkvKiBUcmlnZ2VyIGluZm8sIG9yIE5VTEwgaWYgcmVsIGhhcyBub25lICov CisgCVJvd1NlY3VyaXR5RGVzYwkqcnNkZXNjOwkvKiBSb3ctc2VjdXJpdHkg cG9saWN5LCBvciBOVUxMICovCiAgCiAgCS8qCiAgCSAqIHJkX29wdGlvbnMg aXMgc2V0IHdoZW5ldmVyIHJkX3JlbCBpcyBsb2FkZWQgaW50byB0aGUgcmVs Y2FjaGUgZW50cnkuCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL3Jvd3NlY3VyaXR5Lm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvcm93c2VjdXJpdHkub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IC4uLjA0NTkxZGYKKioqIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9yb3dzZWN1cml0eS5vdXQKLS0tIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9yb3dzZWN1cml0eS5vdXQKKioqKioqKioqKioqKioqCioqKiAwICoq KioKLS0tIDEsOTUwIC0tLS0KKyAtLQorIC0tIFRlc3Qgb2YgUm93LWxldmVs IHNlY3VyaXR5IGZlYXR1cmUKKyAtLQorIC0tIENsZWFuIHVwIGluIGNhc2Ug YSBwcmlvciByZWdyZXNzaW9uIHJ1biBmYWlsZWQKKyAtLSBTdXBwcmVzcyBO T1RJQ0UgbWVzc2FnZXMgd2hlbiB1c2Vycy9ncm91cHMgZG9uJ3QgZXhpc3QK KyBTRVQgY2xpZW50X21pbl9tZXNzYWdlcyBUTyAnd2FybmluZyc7CisgRFJP UCBVU0VSIElGIEVYSVNUUyBybHNfcmVncmVzc191c2VyMDsKKyBEUk9QIFVT RVIgSUYgRVhJU1RTIHJsc19yZWdyZXNzX3VzZXIxOworIERST1AgVVNFUiBJ RiBFWElTVFMgcmxzX3JlZ3Jlc3NfdXNlcjI7CisgRFJPUCBTQ0hFTUEgSUYg RVhJU1RTIHJsc19yZWdyZXNzX3NjaGVtYSBDQVNDQURFOworIFJFU0VUIGNs aWVudF9taW5fbWVzc2FnZXM7CisgLS0gaW5pdGlhbCBzZXR1cAorIENSRUFU RSBVU0VSIHJsc19yZWdyZXNzX3VzZXIwOworIENSRUFURSBVU0VSIHJsc19y ZWdyZXNzX3VzZXIxOworIENSRUFURSBVU0VSIHJsc19yZWdyZXNzX3VzZXIy OworIENSRUFURSBTQ0hFTUEgcmxzX3JlZ3Jlc3Nfc2NoZW1hOworIEdSQU5U IEFMTCBPTiBTQ0hFTUEgcmxzX3JlZ3Jlc3Nfc2NoZW1hIFRPIHB1YmxpYzsK KyBTRVQgc2VhcmNoX3BhdGggPSBybHNfcmVncmVzc19zY2hlbWE7CisgLS0g c2V0dXAgb2YgbWFsaWNpb3VzIGZ1bmN0aW9uCisgQ1JFQVRFIE9SIFJFUExB Q0UgRlVOQ1RJT04gZl9sZWFrKHRleHQpIFJFVFVSTlMgYm9vbAorICAgICBD T1NUIDAuMDAwMDAwMSBMQU5HVUFHRSBwbHBnc3FsCisgICAgIEFTICdCRUdJ TiBSQUlTRSBOT1RJQ0UgJydmX2xlYWsgPT4gJScnLCAkMTsgUkVUVVJOIHRy dWU7IEVORCc7CisgR1JBTlQgRVhFQ1VURSBPTiBGVU5DVElPTiBmX2xlYWso dGV4dCkgVE8gcHVibGljOworIC0tIEJBU0lDIFJvdy1MZXZlbCBTZWN1cml0 eSBTY2VuYXJpbworIFNFVCBTRVNTSU9OIEFVVEhPUklaQVRJT04gcmxzX3Jl Z3Jlc3NfdXNlcjA7CisgQ1JFQVRFIFRBQkxFIHVhY2NvdW50ICgKKyAgICAg cGd1c2VyICAgICAgbmFtZSBwcmltYXJ5IGtleSwKKyAgICAgc2VjbHYgICAg ICAgaW50CisgKTsKKyBJTlNFUlQgSU5UTyB1YWNjb3VudCBWQUxVRVMKKyAg ICAgKCdybHNfcmVncmVzc191c2VyMCcsIDk5KSwKKyAgICAgKCdybHNfcmVn cmVzc191c2VyMScsICAxKSwKKyAgICAgKCdybHNfcmVncmVzc191c2VyMics ICAyKSwKKyAgICAgKCdybHNfcmVncmVzc191c2VyMycsICAzKTsKKyBHUkFO VCBTRUxFQ1QgT04gdWFjY291bnQgVE8gcHVibGljOworIENSRUFURSBUQUJM RSBjYXRlZ29yeSAoCisgICAgIGNpZCAgICAgICAgIGludCBwcmltYXJ5IGtl eSwKKyAgICAgY25hbWUgICAgICAgdGV4dAorICk7CisgR1JBTlQgQUxMIE9O IGNhdGVnb3J5IFRPIHB1YmxpYzsKKyBJTlNFUlQgSU5UTyBjYXRlZ29yeSBW QUxVRVMKKyAgICAgKDExLCAnbm92ZWwnKSwKKyAgICAgKDIyLCAnc2NpZW5j ZSBmaWN0aW9uJyksCisgICAgICgzMywgJ3RlY2hub2xvZ3knKSwKKyAgICAg KDQ0LCAnbWFuZ2EnKTsKKyBDUkVBVEUgVEFCTEUgZG9jdW1lbnQgKAorICAg ICBkaWQgICAgICAgICBpbnQgcHJpbWFyeSBrZXksCisgICAgIGNpZCAgICAg ICAgIGludCByZWZlcmVuY2VzIGNhdGVnb3J5KGNpZCksCisgICAgIGRsZXZl bCAgICAgIGludCBub3QgbnVsbCwKKyAgICAgZGF1dGhvciAgICAgbmFtZSwK KyAgICAgZHRpdGxlICAgICAgdGV4dAorICk7CisgR1JBTlQgQUxMIE9OIGRv Y3VtZW50IFRPIHB1YmxpYzsKKyBJTlNFUlQgSU5UTyBkb2N1bWVudCBWQUxV RVMKKyAgICAgKCAxLCAxMSwgMSwgJ3Jsc19yZWdyZXNzX3VzZXIxJywgJ215 IGZpcnN0IG5vdmVsJyksCisgICAgICggMiwgMTEsIDIsICdybHNfcmVncmVz c191c2VyMScsICdteSBzZWNvbmQgbm92ZWwnKSwKKyAgICAgKCAzLCAyMiwg MiwgJ3Jsc19yZWdyZXNzX3VzZXIxJywgJ215IHNjaWVuY2UgZmljdGlvbicp LAorICAgICAoIDQsIDQ0LCAxLCAncmxzX3JlZ3Jlc3NfdXNlcjEnLCAnbXkg Zmlyc3QgbWFuZ2EnKSwKKyAgICAgKCA1LCA0NCwgMiwgJ3Jsc19yZWdyZXNz X3VzZXIxJywgJ215IHNlY29uZCBtYW5nYScpLAorICAgICAoIDYsIDIyLCAx LCAncmxzX3JlZ3Jlc3NfdXNlcjInLCAnZ3JlYXQgc2NpZW5jZSBmaWN0aW9u JyksCisgICAgICggNywgMzMsIDIsICdybHNfcmVncmVzc191c2VyMicsICdn cmVhdCB0ZWNobm9sb2d5IGJvb2snKSwKKyAgICAgKCA4LCA0NCwgMSwgJ3Js c19yZWdyZXNzX3VzZXIyJywgJ2dyZWF0IG1hbmdhJyk7CisgLS0gdXNlcidz IHNlY3VyaXR5IGxldmVsIG11c3QgaGlnaGVyIHRoYW4gb3IgZXF1YWwgdG8g ZG9jdW1lbnQncyBvbmUKKyBBTFRFUiBUQUJMRSBkb2N1bWVudCBTRVQgUk9X IFNFQ1VSSVRZIEZPUiBBTEwKKyAgICAgVE8gKGRsZXZlbCA8PSAoU0VMRUNU IHNlY2x2IEZST00gdWFjY291bnQgV0hFUkUgcGd1c2VyID0gY3VycmVudF91 c2VyKSk7CisgLS0gdmlld3BvaW50IGZyb20gcmxzX3JlZ3Jlc3NfdXNlcjEK KyBTRVQgU0VTU0lPTiBBVVRIT1JJWkFUSU9OIHJsc19yZWdyZXNzX3VzZXIx OworIFNFTEVDVCAqIEZST00gZG9jdW1lbnQgV0hFUkUgZl9sZWFrKGR0aXRs ZSk7CisgTk9USUNFOiAgZl9sZWFrID0+IG15IGZpcnN0IG5vdmVsCisgTk9U SUNFOiAgZl9sZWFrID0+IG15IGZpcnN0IG1hbmdhCisgTk9USUNFOiAgZl9s ZWFrID0+IGdyZWF0IHNjaWVuY2UgZmljdGlvbgorIE5PVElDRTogIGZfbGVh ayA9PiBncmVhdCBtYW5nYQorICBkaWQgfCBjaWQgfCBkbGV2ZWwgfCAgICAg IGRhdXRob3IgICAgICB8ICAgICAgICBkdGl0bGUgICAgICAgICAKKyAtLS0t LSstLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgICAgMSB8ICAxMSB8ICAgICAgMSB8IHJsc19y ZWdyZXNzX3VzZXIxIHwgbXkgZmlyc3Qgbm92ZWwKKyAgICA0IHwgIDQ0IHwg ICAgICAxIHwgcmxzX3JlZ3Jlc3NfdXNlcjEgfCBteSBmaXJzdCBtYW5nYQor ICAgIDYgfCAgMjIgfCAgICAgIDEgfCBybHNfcmVncmVzc191c2VyMiB8IGdy ZWF0IHNjaWVuY2UgZmljdGlvbgorICAgIDggfCAgNDQgfCAgICAgIDEgfCBy bHNfcmVncmVzc191c2VyMiB8IGdyZWF0IG1hbmdhCisgKDQgcm93cykKKyAK KyBTRUxFQ1QgKiBGUk9NIGRvY3VtZW50IE5BVFVSQUwgSk9JTiBjYXRlZ29y eSBXSEVSRSBmX2xlYWsoZHRpdGxlKTsKKyBOT1RJQ0U6ICBmX2xlYWsgPT4g bXkgZmlyc3Qgbm92ZWwKKyBOT1RJQ0U6ICBmX2xlYWsgPT4gbXkgZmlyc3Qg bWFuZ2EKKyBOT1RJQ0U6ICBmX2xlYWsgPT4gZ3JlYXQgc2NpZW5jZSBmaWN0 aW9uCisgTk9USUNFOiAgZl9sZWFrID0+IGdyZWF0IG1hbmdhCisgIGNpZCB8 IGRpZCB8IGRsZXZlbCB8ICAgICAgZGF1dGhvciAgICAgIHwgICAgICAgIGR0 aXRsZSAgICAgICAgIHwgICAgICBjbmFtZSAgICAgIAorIC0tLS0tKy0tLS0t Ky0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0KKyAgIDExIHwgICAxIHwgICAg ICAxIHwgcmxzX3JlZ3Jlc3NfdXNlcjEgfCBteSBmaXJzdCBub3ZlbCAgICAg ICAgfCBub3ZlbAorICAgMjIgfCAgIDYgfCAgICAgIDEgfCBybHNfcmVncmVz c191c2VyMiB8IGdyZWF0IHNjaWVuY2UgZmljdGlvbiB8IHNjaWVuY2UgZmlj dGlvbgorICAgNDQgfCAgIDggfCAgICAgIDEgfCBybHNfcmVncmVzc191c2Vy MiB8IGdyZWF0IG1hbmdhICAgICAgICAgICB8IG1hbmdhCisgICA0NCB8ICAg NCB8ICAgICAgMSB8IHJsc19yZWdyZXNzX3VzZXIxIHwgbXkgZmlyc3QgbWFu Z2EgICAgICAgIHwgbWFuZ2EKKyAoNCByb3dzKQorIAorIC0tIHZpZXdwb2lu dCBmcm9tIHJsc19yZWdyZXNzX3VzZXIyCisgU0VUIFNFU1NJT04gQVVUSE9S SVpBVElPTiBybHNfcmVncmVzc191c2VyMjsKKyBTRUxFQ1QgKiBGUk9NIGRv Y3VtZW50IFdIRVJFIGZfbGVhayhkdGl0bGUpOworIE5PVElDRTogIGZfbGVh ayA9PiBteSBmaXJzdCBub3ZlbAorIE5PVElDRTogIGZfbGVhayA9PiBteSBz ZWNvbmQgbm92ZWwKKyBOT1RJQ0U6ICBmX2xlYWsgPT4gbXkgc2NpZW5jZSBm aWN0aW9uCisgTk9USUNFOiAgZl9sZWFrID0+IG15IGZpcnN0IG1hbmdhCisg Tk9USUNFOiAgZl9sZWFrID0+IG15IHNlY29uZCBtYW5nYQorIE5PVElDRTog IGZfbGVhayA9PiBncmVhdCBzY2llbmNlIGZpY3Rpb24KKyBOT1RJQ0U6ICBm X2xlYWsgPT4gZ3JlYXQgdGVjaG5vbG9neSBib29rCisgTk9USUNFOiAgZl9s ZWFrID0+IGdyZWF0IG1hbmdhCisgIGRpZCB8IGNpZCB8IGRsZXZlbCB8ICAg ICAgZGF1dGhvciAgICAgIHwgICAgICAgIGR0aXRsZSAgICAgICAgIAorIC0t LS0tKy0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAgICAxIHwgIDExIHwgICAgICAxIHwgcmxz X3JlZ3Jlc3NfdXNlcjEgfCBteSBmaXJzdCBub3ZlbAorICAgIDIgfCAgMTEg fCAgICAgIDIgfCBybHNfcmVncmVzc191c2VyMSB8IG15IHNlY29uZCBub3Zl bAorICAgIDMgfCAgMjIgfCAgICAgIDIgfCBybHNfcmVncmVzc191c2VyMSB8 IG15IHNjaWVuY2UgZmljdGlvbgorICAgIDQgfCAgNDQgfCAgICAgIDEgfCBy bHNfcmVncmVzc191c2VyMSB8IG15IGZpcnN0IG1hbmdhCisgICAgNSB8ICA0 NCB8ICAgICAgMiB8IHJsc19yZWdyZXNzX3VzZXIxIHwgbXkgc2Vjb25kIG1h bmdhCisgICAgNiB8ICAyMiB8ICAgICAgMSB8IHJsc19yZWdyZXNzX3VzZXIy IHwgZ3JlYXQgc2NpZW5jZSBmaWN0aW9uCisgICAgNyB8ICAzMyB8ICAgICAg MiB8IHJsc19yZWdyZXNzX3VzZXIyIHwgZ3JlYXQgdGVjaG5vbG9neSBib29r CisgICAgOCB8ICA0NCB8ICAgICAgMSB8IHJsc19yZWdyZXNzX3VzZXIyIHwg Z3JlYXQgbWFuZ2EKKyAoOCByb3dzKQorIAorIFNFTEVDVCAqIEZST00gZG9j dW1lbnQgTkFUVVJBTCBKT0lOIGNhdGVnb3J5IFdIRVJFIGZfbGVhayhkdGl0 bGUpOworIE5PVElDRTogIGZfbGVhayA9PiBteSBmaXJzdCBub3ZlbAorIE5P VElDRTogIGZfbGVhayA9PiBteSBzZWNvbmQgbm92ZWwKKyBOT1RJQ0U6ICBm X2xlYWsgPT4gbXkgc2NpZW5jZSBmaWN0aW9uCisgTk9USUNFOiAgZl9sZWFr ID0+IG15IGZpcnN0IG1hbmdhCisgTk9USUNFOiAgZl9sZWFrID0+IG15IHNl Y29uZCBtYW5nYQorIE5PVElDRTogIGZfbGVhayA9PiBncmVhdCBzY2llbmNl IGZpY3Rpb24KKyBOT1RJQ0U6ICBmX2xlYWsgPT4gZ3JlYXQgdGVjaG5vbG9n eSBib29rCisgTk9USUNFOiAgZl9sZWFrID0+IGdyZWF0IG1hbmdhCisgIGNp ZCB8IGRpZCB8IGRsZXZlbCB8ICAgICAgZGF1dGhvciAgICAgIHwgICAgICAg IGR0aXRsZSAgICAgICAgIHwgICAgICBjbmFtZSAgICAgIAorIC0tLS0tKy0t LS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0KKyAgIDExIHwgICAyIHwg ICAgICAyIHwgcmxzX3JlZ3Jlc3NfdXNlcjEgfCBteSBzZWNvbmQgbm92ZWwg ICAgICAgfCBub3ZlbAorICAgMTEgfCAgIDEgfCAgICAgIDEgfCBybHNfcmVn cmVzc191c2VyMSB8IG15IGZpcnN0IG5vdmVsICAgICAgICB8IG5vdmVsCisg ICAyMiB8ICAgNiB8ICAgICAgMSB8IHJsc19yZWdyZXNzX3VzZXIyIHwgZ3Jl YXQgc2NpZW5jZSBmaWN0aW9uIHwgc2NpZW5jZSBmaWN0aW9uCisgICAyMiB8 ICAgMyB8ICAgICAgMiB8IHJsc19yZWdyZXNzX3VzZXIxIHwgbXkgc2NpZW5j ZSBmaWN0aW9uICAgIHwgc2NpZW5jZSBmaWN0aW9uCisgICAzMyB8ICAgNyB8 ICAgICAgMiB8IHJsc19yZWdyZXNzX3VzZXIyIHwgZ3JlYXQgdGVjaG5vbG9n eSBib29rIHwgdGVjaG5vbG9neQorICAgNDQgfCAgIDggfCAgICAgIDEgfCBy bHNfcmVncmVzc191c2VyMiB8IGdyZWF0IG1hbmdhICAgICAgICAgICB8IG1h bmdhCisgICA0NCB8ICAgNSB8ICAgICAgMiB8IHJsc19yZWdyZXNzX3VzZXIx IHwgbXkgc2Vjb25kIG1hbmdhICAgICAgIHwgbWFuZ2EKKyAgIDQ0IHwgICA0 IHwgICAgICAxIHwgcmxzX3JlZ3Jlc3NfdXNlcjEgfCBteSBmaXJzdCBtYW5n YSAgICAgICAgfCBtYW5nYQorICg4IHJvd3MpCisgCisgRVhQTEFJTiAoY29z dHMgb2ZmKSBTRUxFQ1QgKiBGUk9NIGRvY3VtZW50IFdIRVJFIGZfbGVhayhk dGl0bGUpOworICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgICAgICAgICAgICAKKyAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFN1 YnF1ZXJ5IFNjYW4gb24gZG9jdW1lbnQKKyAgICBGaWx0ZXI6IGZfbGVhayhk b2N1bWVudC5kdGl0bGUpCisgICAgLT4gIFNlcSBTY2FuIG9uIGRvY3VtZW50 IGRvY3VtZW50XzEKKyAgICAgICAgICBGaWx0ZXI6IChkbGV2ZWwgPD0gJDAp CisgICAgICAgICAgSW5pdFBsYW4gMSAocmV0dXJucyAkMCkKKyAgICAgICAg ICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHVhY2NvdW50X3BrZXkgb24gdWFj Y291bnQKKyAgICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChwZ3VzZXIg PSAiY3VycmVudF91c2VyIigpKQorICg3IHJvd3MpCisgCisgRVhQTEFJTiAo Y29zdHMgb2ZmKSBTRUxFQ1QgKiBGUk9NIGRvY3VtZW50IE5BVFVSQUwgSk9J TiBjYXRlZ29yeSBXSEVSRSBmX2xlYWsoZHRpdGxlKTsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICBIYXNoIEpvaW4KKyAgICBIYXNoIENvbmQ6IChjYXRlZ29yeS5jaWQgPSBk b2N1bWVudC5jaWQpCisgICAgLT4gIFNlcSBTY2FuIG9uIGNhdGVnb3J5Cisg ICAgLT4gIEhhc2gKKyAgICAgICAgICAtPiAgU3VicXVlcnkgU2NhbiBvbiBk b2N1bWVudAorICAgICAgICAgICAgICAgIEZpbHRlcjogZl9sZWFrKGRvY3Vt ZW50LmR0aXRsZSkKKyAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24g ZG9jdW1lbnQgZG9jdW1lbnRfMQorICAgICAgICAgICAgICAgICAgICAgIEZp bHRlcjogKGRsZXZlbCA8PSAkMCkKKyAgICAgICAgICAgICAgICAgICAgICBJ bml0UGxhbiAxIChyZXR1cm5zICQwKQorICAgICAgICAgICAgICAgICAgICAg ICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgdWFjY291bnRfcGtleSBvbiB1YWNj b3VudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29u ZDogKHBndXNlciA9ICJjdXJyZW50X3VzZXIiKCkpCisgKDExIHJvd3MpCisg CisgLS0gb25seSBvd25lciBjYW4gY2hhbmdlIHJvdy1sZXZlbCBzZWN1cml0 eQorIEFMVEVSIFRBQkxFIGRvY3VtZW50IFNFVCBST1cgU0VDVVJJVFkgRk9S IEFMTCBUTyAodHJ1ZSk7ICAgICAtLSBmYWlsCisgRVJST1I6ICBtdXN0IGJl IG93bmVyIG9mIHJlbGF0aW9uIGRvY3VtZW50CisgQUxURVIgVEFCTEUgZG9j dW1lbnQgUkVTRVQgUk9XIFNFQ1VSSVRZIEZPUiBBTEw7ICAgICAgICAgICAg IC0tIGZhaWwKKyBFUlJPUjogIG11c3QgYmUgb3duZXIgb2YgcmVsYXRpb24g ZG9jdW1lbnQKKyBTRVQgU0VTU0lPTiBBVVRIT1JJWkFUSU9OIHJsc19yZWdy ZXNzX3VzZXIwOworIEFMVEVSIFRBQkxFIGRvY3VtZW50IFNFVCBST1cgU0VD VVJJVFkgRk9SIEFMTCBUTyAoZGF1dGhvciA9IGN1cnJlbnRfdXNlcik7Cisg LS0gdmlld3BvaW50IGZyb20gcmxzX3JlZ3Jlc3NfdXNlcjEgYWdhaW4KKyBT RVQgU0VTU0lPTiBBVVRIT1JJWkFUSU9OIHJsc19yZWdyZXNzX3VzZXIxOwor IFNFTEVDVCAqIEZST00gZG9jdW1lbnQgV0hFUkUgZl9sZWFrKGR0aXRsZSk7 CisgTk9USUNFOiAgZl9sZWFrID0+IG15IGZpcnN0IG5vdmVsCisgTk9USUNF OiAgZl9sZWFrID0+IG15IHNlY29uZCBub3ZlbAorIE5PVElDRTogIGZfbGVh ayA9PiBteSBzY2llbmNlIGZpY3Rpb24KKyBOT1RJQ0U6ICBmX2xlYWsgPT4g bXkgZmlyc3QgbWFuZ2EKKyBOT1RJQ0U6ICBmX2xlYWsgPT4gbXkgc2Vjb25k IG1hbmdhCisgIGRpZCB8IGNpZCB8IGRsZXZlbCB8ICAgICAgZGF1dGhvciAg ICAgIHwgICAgICAgZHRpdGxlICAgICAgIAorIC0tLS0tKy0tLS0tKy0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAgICAxIHwgIDExIHwgICAgICAxIHwgcmxzX3JlZ3Jlc3NfdXNlcjEgfCBt eSBmaXJzdCBub3ZlbAorICAgIDIgfCAgMTEgfCAgICAgIDIgfCBybHNfcmVn cmVzc191c2VyMSB8IG15IHNlY29uZCBub3ZlbAorICAgIDMgfCAgMjIgfCAg ICAgIDIgfCBybHNfcmVncmVzc191c2VyMSB8IG15IHNjaWVuY2UgZmljdGlv bgorICAgIDQgfCAgNDQgfCAgICAgIDEgfCBybHNfcmVncmVzc191c2VyMSB8 IG15IGZpcnN0IG1hbmdhCisgICAgNSB8ICA0NCB8ICAgICAgMiB8IHJsc19y ZWdyZXNzX3VzZXIxIHwgbXkgc2Vjb25kIG1hbmdhCisgKDUgcm93cykKKyAK KyBTRUxFQ1QgKiBGUk9NIGRvY3VtZW50IE5BVFVSQUwgSk9JTiBjYXRlZ29y eSBXSEVSRSBmX2xlYWsoZHRpdGxlKTsKKyBOT1RJQ0U6ICBmX2xlYWsgPT4g bXkgZmlyc3Qgbm92ZWwKKyBOT1RJQ0U6ICBmX2xlYWsgPT4gbXkgc2Vjb25k IG5vdmVsCisgTk9USUNFOiAgZl9sZWFrID0+IG15IHNjaWVuY2UgZmljdGlv bgorIE5PVElDRTogIGZfbGVhayA9PiBteSBmaXJzdCBtYW5nYQorIE5PVElD RTogIGZfbGVhayA9PiBteSBzZWNvbmQgbWFuZ2EKKyAgY2lkIHwgZGlkIHwg ZGxldmVsIHwgICAgICBkYXV0aG9yICAgICAgfCAgICAgICBkdGl0bGUgICAg ICAgfCAgICAgIGNuYW1lICAgICAgCisgLS0tLS0rLS0tLS0rLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tLQorICAgMTEgfCAgIDEgfCAgICAgIDEgfCBybHNfcmVn cmVzc191c2VyMSB8IG15IGZpcnN0IG5vdmVsICAgICB8IG5vdmVsCisgICAx MSB8ICAgMiB8ICAgICAgMiB8IHJsc19yZWdyZXNzX3VzZXIxIHwgbXkgc2Vj b25kIG5vdmVsICAgIHwgbm92ZWwKKyAgIDIyIHwgICAzIHwgICAgICAyIHwg cmxzX3JlZ3Jlc3NfdXNlcjEgfCBteSBzY2llbmNlIGZpY3Rpb24gfCBzY2ll bmNlIGZpY3Rpb24KKyAgIDQ0IHwgICA0IHwgICAgICAxIHwgcmxzX3JlZ3Jl c3NfdXNlcjEgfCBteSBmaXJzdCBtYW5nYSAgICAgfCBtYW5nYQorICAgNDQg fCAgIDUgfCAgICAgIDIgfCBybHNfcmVncmVzc191c2VyMSB8IG15IHNlY29u ZCBtYW5nYSAgICB8IG1hbmdhCisgKDUgcm93cykKKyAKKyAtLSB2aWV3cG9p bnQgZnJvbSBybHNfcmVncmVzc191c2VyMiBhZ2FpbgorIFNFVCBTRVNTSU9O IEFVVEhPUklaQVRJT04gcmxzX3JlZ3Jlc3NfdXNlcjI7CisgU0VMRUNUICog RlJPTSBkb2N1bWVudCBXSEVSRSBmX2xlYWsoZHRpdGxlKTsKKyBOT1RJQ0U6 ICBmX2xlYWsgPT4gZ3JlYXQgc2NpZW5jZSBmaWN0aW9uCisgTk9USUNFOiAg Zl9sZWFrID0+IGdyZWF0IHRlY2hub2xvZ3kgYm9vaworIE5PVElDRTogIGZf bGVhayA9PiBncmVhdCBtYW5nYQorICBkaWQgfCBjaWQgfCBkbGV2ZWwgfCAg ICAgIGRhdXRob3IgICAgICB8ICAgICAgICBkdGl0bGUgICAgICAgICAKKyAt LS0tLSstLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgICAgNiB8ICAyMiB8ICAgICAgMSB8IHJs c19yZWdyZXNzX3VzZXIyIHwgZ3JlYXQgc2NpZW5jZSBmaWN0aW9uCisgICAg NyB8ICAzMyB8ICAgICAgMiB8IHJsc19yZWdyZXNzX3VzZXIyIHwgZ3JlYXQg dGVjaG5vbG9neSBib29rCisgICAgOCB8ICA0NCB8ICAgICAgMSB8IHJsc19y ZWdyZXNzX3VzZXIyIHwgZ3JlYXQgbWFuZ2EKKyAoMyByb3dzKQorIAorIFNF TEVDVCAqIEZST00gZG9jdW1lbnQgTkFUVVJBTCBKT0lOIGNhdGVnb3J5IFdI RVJFIGZfbGVhayhkdGl0bGUpOworIE5PVElDRTogIGZfbGVhayA9PiBncmVh dCBzY2llbmNlIGZpY3Rpb24KKyBOT1RJQ0U6ICBmX2xlYWsgPT4gZ3JlYXQg dGVjaG5vbG9neSBib29rCisgTk9USUNFOiAgZl9sZWFrID0+IGdyZWF0IG1h bmdhCisgIGNpZCB8IGRpZCB8IGRsZXZlbCB8ICAgICAgZGF1dGhvciAgICAg IHwgICAgICAgIGR0aXRsZSAgICAgICAgIHwgICAgICBjbmFtZSAgICAgIAor IC0tLS0tKy0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0KKyAgIDIy IHwgICA2IHwgICAgICAxIHwgcmxzX3JlZ3Jlc3NfdXNlcjIgfCBncmVhdCBz Y2llbmNlIGZpY3Rpb24gfCBzY2llbmNlIGZpY3Rpb24KKyAgIDMzIHwgICA3 IHwgICAgICAyIHwgcmxzX3JlZ3Jlc3NfdXNlcjIgfCBncmVhdCB0ZWNobm9s b2d5IGJvb2sgfCB0ZWNobm9sb2d5CisgICA0NCB8ICAgOCB8ICAgICAgMSB8 IHJsc19yZWdyZXNzX3VzZXIyIHwgZ3JlYXQgbWFuZ2EgICAgICAgICAgIHwg bWFuZ2EKKyAoMyByb3dzKQorIAorIEVYUExBSU4gKGNvc3RzIG9mZikgU0VM RUNUICogRlJPTSBkb2N1bWVudCBXSEVSRSBmX2xlYWsoZHRpdGxlKTsKKyAg ICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAg CisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICBTdWJxdWVyeSBTY2FuIG9uIGRvY3VtZW50CisgICAgRmlsdGVy OiBmX2xlYWsoZG9jdW1lbnQuZHRpdGxlKQorICAgIC0+ICBTZXEgU2NhbiBv biBkb2N1bWVudCBkb2N1bWVudF8xCisgICAgICAgICAgRmlsdGVyOiAoZGF1 dGhvciA9ICJjdXJyZW50X3VzZXIiKCkpCisgKDQgcm93cykKKyAKKyBFWFBM QUlOIChjb3N0cyBvZmYpIFNFTEVDVCAqIEZST00gZG9jdW1lbnQgTkFUVVJB TCBKT0lOIGNhdGVnb3J5IFdIRVJFIGZfbGVhayhkdGl0bGUpOworICAgICAg ICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAg ICAKKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgIE5lc3RlZCBMb29wCisgICAgLT4gIFN1YnF1ZXJ5 IFNjYW4gb24gZG9jdW1lbnQKKyAgICAgICAgICBGaWx0ZXI6IGZfbGVhayhk b2N1bWVudC5kdGl0bGUpCisgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGRv Y3VtZW50IGRvY3VtZW50XzEKKyAgICAgICAgICAgICAgICBGaWx0ZXI6IChk YXV0aG9yID0gImN1cnJlbnRfdXNlciIoKSkKKyAgICAtPiAgSW5kZXggU2Nh biB1c2luZyBjYXRlZ29yeV9wa2V5IG9uIGNhdGVnb3J5CisgICAgICAgICAg SW5kZXggQ29uZDogKGNpZCA9IGRvY3VtZW50LmNpZCkKKyAoNyByb3dzKQor IAorIC0tIGludGVyYWN0aW9uIG9mIEZLL1BLIGNvbnN0cmFpbnRzCisgU0VU IFNFU1NJT04gQVVUSE9SSVpBVElPTiBybHNfcmVncmVzc191c2VyMDsKKyBB TFRFUiBUQUJMRSBjYXRlZ29yeSBTRVQgUk9XIFNFQ1VSSVRZIEZPUiBBTEwK KyAgICAgVE8gKENBU0UgV0hFTiBjdXJyZW50X3VzZXIgPSAncmxzX3JlZ3Jl c3NfdXNlcjEnIFRIRU4gY2lkIElOICgxMSwgMzMpCisgICAgICAgICBXSEVO IGN1cnJlbnRfdXNlciA9ICdybHNfcmVncmVzc191c2VyMicgVEhFTiBjaWQg SU4gKDIyLCA0NCkKKyAgICAgICAgIEVMU0UgZmFsc2UgRU5EKTsKKyAtLSBj YW5ub3QgZGVsZXRlIFBLIHJlZmVyZW5jZWQgYnkgaW52aXNpYmxlIEZLCisg U0VUIFNFU1NJT04gQVVUSE9SSVpBVElPTiBybHNfcmVncmVzc191c2VyMTsK KyBTRUxFQ1QgKiBGUk9NIGRvY3VtZW50IGQgZnVsbCBvdXRlciBqb2luIGNh dGVnb3J5IGMgb24gZC5jaWQgPSBjLmNpZDsKKyAgZGlkIHwgY2lkIHwgZGxl dmVsIHwgICAgICBkYXV0aG9yICAgICAgfCAgICAgICBkdGl0bGUgICAgICAg fCBjaWQgfCAgIGNuYW1lICAgIAorIC0tLS0tKy0tLS0tKy0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0r LS0tLS0tLS0tLS0tCisgICAgMiB8ICAxMSB8ICAgICAgMiB8IHJsc19yZWdy ZXNzX3VzZXIxIHwgbXkgc2Vjb25kIG5vdmVsICAgIHwgIDExIHwgbm92ZWwK KyAgICAxIHwgIDExIHwgICAgICAxIHwgcmxzX3JlZ3Jlc3NfdXNlcjEgfCBt eSBmaXJzdCBub3ZlbCAgICAgfCAgMTEgfCBub3ZlbAorICAgICAgfCAgICAg fCAgICAgICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAg ICAgICB8ICAzMyB8IHRlY2hub2xvZ3kKKyAgICA1IHwgIDQ0IHwgICAgICAy IHwgcmxzX3JlZ3Jlc3NfdXNlcjEgfCBteSBzZWNvbmQgbWFuZ2EgICAgfCAg ICAgfCAKKyAgICA0IHwgIDQ0IHwgICAgICAxIHwgcmxzX3JlZ3Jlc3NfdXNl cjEgfCBteSBmaXJzdCBtYW5nYSAgICAgfCAgICAgfCAKKyAgICAzIHwgIDIy IHwgICAgICAyIHwgcmxzX3JlZ3Jlc3NfdXNlcjEgfCBteSBzY2llbmNlIGZp Y3Rpb24gfCAgICAgfCAKKyAoNiByb3dzKQorIAorIERFTEVURSBGUk9NIGNh dGVnb3J5IFdIRVJFIGNpZCA9IDMzOyAgICAtLSBmYWlsZWQKKyBFUlJPUjog IHVwZGF0ZSBvciBkZWxldGUgb24gdGFibGUgImNhdGVnb3J5IiB2aW9sYXRl cyBmb3JlaWduIGtleSBjb25zdHJhaW50ICJkb2N1bWVudF9jaWRfZmtleSIg b24gdGFibGUgImRvY3VtZW50IgorIERFVEFJTDogIEtleSAoY2lkKT0oMzMp IGlzIHN0aWxsIHJlZmVyZW5jZWQgZnJvbSB0YWJsZSAiZG9jdW1lbnQiLgor IC0tIGNhbm5vdCBpbnNlcnQgRksgcmVmZXJlbmNpbmcgaW52aXNpYmxlIFBL CisgU0VUIFNFU1NJT04gQVVUSE9SSVpBVElPTiBybHNfcmVncmVzc191c2Vy MjsKKyBTRUxFQ1QgKiBGUk9NIGRvY3VtZW50IGQgZnVsbCBvdXRlciBqb2lu IGNhdGVnb3J5IGMgb24gZC5jaWQgPSBjLmNpZDsKKyAgZGlkIHwgY2lkIHwg ZGxldmVsIHwgICAgICBkYXV0aG9yICAgICAgfCAgICAgICAgZHRpdGxlICAg ICAgICAgfCBjaWQgfCAgICAgIGNuYW1lICAgICAgCisgLS0tLS0rLS0tLS0r LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLSstLS0tLS0tLS0tLS0tLS0tLQorICAgIDYgfCAgMjIg fCAgICAgIDEgfCBybHNfcmVncmVzc191c2VyMiB8IGdyZWF0IHNjaWVuY2Ug ZmljdGlvbiB8ICAyMiB8IHNjaWVuY2UgZmljdGlvbgorICAgIDggfCAgNDQg fCAgICAgIDEgfCBybHNfcmVncmVzc191c2VyMiB8IGdyZWF0IG1hbmdhICAg ICAgICAgICB8ICA0NCB8IG1hbmdhCisgICAgNyB8ICAzMyB8ICAgICAgMiB8 IHJsc19yZWdyZXNzX3VzZXIyIHwgZ3JlYXQgdGVjaG5vbG9neSBib29rIHwg ICAgIHwgCisgKDMgcm93cykKKyAKKyBJTlNFUlQgSU5UTyBkb2N1bWVudCBW QUxVRVMgKDEwLCAzMywgMSwgY3VycmVudF91c2VyLCAnaG9nZScpOyAtLSBm YWlsZWQKKyBFUlJPUjogIGluc2VydCBvciB1cGRhdGUgb24gdGFibGUgImRv Y3VtZW50IiB2aW9sYXRlcyBmb3JlaWduIGtleSBjb25zdHJhaW50ICJkb2N1 bWVudF9jaWRfZmtleSIKKyBERVRBSUw6ICBLZXkgKGNpZCk9KDMzKSBpcyBu b3QgcHJlc2VudCBpbiB0YWJsZSAiY2F0ZWdvcnkiLgorIC0tIGRhdGFiYXNl IHN1cGVydXNlciBjYW4gYnlwYXNzIFJMUyBwb2xpY3kKKyBSRVNFVCBTRVNT SU9OIEFVVEhPUklaQVRJT047CisgU0VMRUNUICogRlJPTSBkb2N1bWVudDsK KyAgZGlkIHwgY2lkIHwgZGxldmVsIHwgICAgICBkYXV0aG9yICAgICAgfCAg ICAgICAgZHRpdGxlICAgICAgICAgCisgLS0tLS0rLS0tLS0rLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICAgIDEgfCAgMTEgfCAgICAgIDEgfCBybHNfcmVncmVzc191c2VyMSB8IG15 IGZpcnN0IG5vdmVsCisgICAgMiB8ICAxMSB8ICAgICAgMiB8IHJsc19yZWdy ZXNzX3VzZXIxIHwgbXkgc2Vjb25kIG5vdmVsCisgICAgMyB8ICAyMiB8ICAg ICAgMiB8IHJsc19yZWdyZXNzX3VzZXIxIHwgbXkgc2NpZW5jZSBmaWN0aW9u CisgICAgNCB8ICA0NCB8ICAgICAgMSB8IHJsc19yZWdyZXNzX3VzZXIxIHwg bXkgZmlyc3QgbWFuZ2EKKyAgICA1IHwgIDQ0IHwgICAgICAyIHwgcmxzX3Jl Z3Jlc3NfdXNlcjEgfCBteSBzZWNvbmQgbWFuZ2EKKyAgICA2IHwgIDIyIHwg ICAgICAxIHwgcmxzX3JlZ3Jlc3NfdXNlcjIgfCBncmVhdCBzY2llbmNlIGZp Y3Rpb24KKyAgICA3IHwgIDMzIHwgICAgICAyIHwgcmxzX3JlZ3Jlc3NfdXNl cjIgfCBncmVhdCB0ZWNobm9sb2d5IGJvb2sKKyAgICA4IHwgIDQ0IHwgICAg ICAxIHwgcmxzX3JlZ3Jlc3NfdXNlcjIgfCBncmVhdCBtYW5nYQorICg4IHJv d3MpCisgCisgU0VMRUNUICogRlJPTSBjYXRlZ29yeTsKKyAgY2lkIHwgICAg ICBjbmFtZSAgICAgIAorIC0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tCisgICAx MSB8IG5vdmVsCisgICAyMiB8IHNjaWVuY2UgZmljdGlvbgorICAgMzMgfCB0 ZWNobm9sb2d5CisgICA0NCB8IG1hbmdhCisgKDQgcm93cykKKyAKKyAtLQor IC0tIFRhYmxlIGluaGVyaXRhbmNlIGFuZCBSTFMgcG9saWN5CisgLS0KKyBT RVQgU0VTU0lPTiBBVVRIT1JJWkFUSU9OIHJsc19yZWdyZXNzX3VzZXIwOwor IENSRUFURSBUQUJMRSB0MSAoYSBpbnQsIGp1bmsxIHRleHQsIGIgdGV4dCkg V0lUSCBPSURTOworIEFMVEVSIFRBQkxFIHQxIERST1AgQ09MVU1OIGp1bmsx OyAgICAtLSBqdXN0IGEgZGlzdHVyYmluZyBmYWN0b3IKKyBHUkFOVCBBTEwg T04gdDEgVE8gcHVibGljOworIENPUFkgdDEgRlJPTSBzdGRpbiBXSVRIIChv aWRzKTsKKyBDUkVBVEUgVEFCTEUgdDIgKGMgZmxvYXQpIElOSEVSSVRTICh0 MSk7CisgQ09QWSB0MiBGUk9NIHN0ZGluIFdJVEggKG9pZHMpOworIENSRUFU RSBUQUJMRSB0MyAoYyB0ZXh0LCBiIHRleHQsIGEgaW50KSBXSVRIIE9JRFM7 CisgQUxURVIgVEFCTEUgdDMgSU5IRVJJVCB0MTsKKyBDT1BZIHQzKGEsYixj KSBGUk9NIHN0ZGluIFdJVEggKG9pZHMpOworIEFMVEVSIFRBQkxFIHQxIFNF VCBST1cgU0VDVVJJVFkgRk9SIEFMTCBUTyAoYSAlIDIgPSAwKTsgLS0gYmUg ZXZlbiBudW1iZXIKKyBBTFRFUiBUQUJMRSB0MiBTRVQgUk9XIFNFQ1VSSVRZ IEZPUiBBTEwgVE8gKGEgJSAyID0gMSk7IC0tIGJlIG9kZCBudW1iZXIKKyBT RUxFQ1QgKiBGUk9NIHQxOworICBhIHwgIGIgIAorIC0tLSstLS0tLQorICAy IHwgYmJiCisgIDQgfCBkZGQKKyAgMSB8IGFiYworICAzIHwgY2RlCisgIDEg fCB4eHgKKyAgMiB8IHl5eQorICAzIHwgenp6CisgKDcgcm93cykKKyAKKyBF WFBMQUlOIChjb3N0cyBvZmYpIFNFTEVDVCAqIEZST00gdDE7CisgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgIAorIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgQXBwZW5kCisgICAgLT4g IFN1YnF1ZXJ5IFNjYW4gb24gdDEKKyAgICAgICAgICAtPiAgU2VxIFNjYW4g b24gdDEgdDFfMQorICAgICAgICAgICAgICAgIEZpbHRlcjogKChhICUgMikg PSAwKQorICAgIC0+ICBTdWJxdWVyeSBTY2FuIG9uIHQyCisgICAgICAgICAg LT4gIFNlcSBTY2FuIG9uIHQyIHQyXzEKKyAgICAgICAgICAgICAgICBGaWx0 ZXI6ICgoYSAlIDIpID0gMSkKKyAgICAtPiAgU2VxIFNjYW4gb24gdDMKKyAo OCByb3dzKQorIAorIFNFTEVDVCAqIEZST00gdDEgV0hFUkUgZl9sZWFrKGIp OworIE5PVElDRTogIGZfbGVhayA9PiBiYmIKKyBOT1RJQ0U6ICBmX2xlYWsg PT4gZGRkCisgTk9USUNFOiAgZl9sZWFrID0+IGFiYworIE5PVElDRTogIGZf bGVhayA9PiBjZGUKKyBOT1RJQ0U6ICBmX2xlYWsgPT4geHh4CisgTk9USUNF OiAgZl9sZWFrID0+IHl5eQorIE5PVElDRTogIGZfbGVhayA9PiB6enoKKyAg YSB8ICBiICAKKyAtLS0rLS0tLS0KKyAgMiB8IGJiYgorICA0IHwgZGRkCisg IDEgfCBhYmMKKyAgMyB8IGNkZQorICAxIHwgeHh4CisgIDIgfCB5eXkKKyAg MyB8IHp6egorICg3IHJvd3MpCisgCisgRVhQTEFJTiAoY29zdHMgb2ZmKSBT RUxFQ1QgKiBGUk9NIHQxIFdIRVJFIGZfbGVhayhiKTsKKyAgICAgICAgICAg ICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgCisgLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBBcHBlbmQKKyAgICAtPiAgU3Vi cXVlcnkgU2NhbiBvbiB0MQorICAgICAgICAgIEZpbHRlcjogZl9sZWFrKHQx LmIpCisgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHQxIHQxXzEKKyAgICAg ICAgICAgICAgICBGaWx0ZXI6ICgoYSAlIDIpID0gMCkKKyAgICAtPiAgU3Vi cXVlcnkgU2NhbiBvbiB0MgorICAgICAgICAgIEZpbHRlcjogZl9sZWFrKHQy LmIpCisgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHQyIHQyXzEKKyAgICAg ICAgICAgICAgICBGaWx0ZXI6ICgoYSAlIDIpID0gMSkKKyAgICAtPiAgU2Vx IFNjYW4gb24gdDMKKyAgICAgICAgICBGaWx0ZXI6IGZfbGVhayhiKQorICgx MSByb3dzKQorIAorIC0tIHJlZmVyZW5jZSB0byBzeXN0ZW0gY29sdW1uCisg U0VMRUNUIG9pZCwgKiBGUk9NIHQxOworICBvaWQgfCBhIHwgIGIgIAorIC0t LS0tKy0tLSstLS0tLQorICAxMDIgfCAyIHwgYmJiCisgIDEwNCB8IDQgfCBk ZGQKKyAgMjAxIHwgMSB8IGFiYworICAyMDMgfCAzIHwgY2RlCisgIDMwMSB8 IDEgfCB4eHgKKyAgMzAyIHwgMiB8IHl5eQorICAzMDMgfCAzIHwgenp6Cisg KDcgcm93cykKKyAKKyBFWFBMQUlOIChjb3N0cyBvZmYpIFNFTEVDVCAqIEZS T00gdDE7CisgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAg IAorIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAg QXBwZW5kCisgICAgLT4gIFN1YnF1ZXJ5IFNjYW4gb24gdDEKKyAgICAgICAg ICAtPiAgU2VxIFNjYW4gb24gdDEgdDFfMQorICAgICAgICAgICAgICAgIEZp bHRlcjogKChhICUgMikgPSAwKQorICAgIC0+ICBTdWJxdWVyeSBTY2FuIG9u IHQyCisgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHQyIHQyXzEKKyAgICAg ICAgICAgICAgICBGaWx0ZXI6ICgoYSAlIDIpID0gMSkKKyAgICAtPiAgU2Vx IFNjYW4gb24gdDMKKyAoOCByb3dzKQorIAorIC0tIHJlZmVyZW5jZSB0byB3 aG9sZS1yb3cgcmVmZXJlbmNlCisgU0VMRUNUICosdDEgRlJPTSB0MTsKKyAg YSB8ICBiICB8ICAgdDEgICAgCisgLS0tKy0tLS0tKy0tLS0tLS0tLQorICAy IHwgYmJiIHwgKDIsYmJiKQorICA0IHwgZGRkIHwgKDQsZGRkKQorICAxIHwg YWJjIHwgKDEsYWJjKQorICAzIHwgY2RlIHwgKDMsY2RlKQorICAxIHwgeHh4 IHwgKDEseHh4KQorICAyIHwgeXl5IHwgKDIseXl5KQorICAzIHwgenp6IHwg KDMsenp6KQorICg3IHJvd3MpCisgCisgRVhQTEFJTiAoY29zdHMgb2ZmKSBT RUxFQ1QgKix0MSBGUk9NIHQxOworICAgICAgICAgICAgICBRVUVSWSBQTEFO ICAgICAgICAgICAgICAKKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgIEFwcGVuZAorICAgIC0+ICBTdWJxdWVyeSBTY2FuIG9u IHQxCisgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHQxIHQxXzEKKyAgICAg ICAgICAgICAgICBGaWx0ZXI6ICgoYSAlIDIpID0gMCkKKyAgICAtPiAgU3Vi cXVlcnkgU2NhbiBvbiB0MgorICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0 MiB0Ml8xCisgICAgICAgICAgICAgICAgRmlsdGVyOiAoKGEgJSAyKSA9IDEp CisgICAgLT4gIFNlcSBTY2FuIG9uIHQzCisgKDggcm93cykKKyAKKyAtLSBm b3Igc2hhcmUvdXBkYXRlIGxvY2sKKyBTRUxFQ1QgKiBGUk9NIHQxIEZPUiBT SEFSRTsKKyAgYSB8ICBiICAKKyAtLS0rLS0tLS0KKyAgMiB8IGJiYgorICA0 IHwgZGRkCisgIDEgfCBhYmMKKyAgMyB8IGNkZQorICAxIHwgeHh4CisgIDIg fCB5eXkKKyAgMyB8IHp6egorICg3IHJvd3MpCisgCisgRVhQTEFJTiAoY29z dHMgb2ZmKSBTRUxFQ1QgKiBGUk9NIHQxIEZPUiBTSEFSRTsKKyAgICAgICAg ICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgCisgLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBMb2Nr Um93cworICAgIC0+ICBBcHBlbmQKKyAgICAgICAgICAtPiAgU3VicXVlcnkg U2NhbiBvbiB0MQorICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0 MSB0MV8xCisgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAoKGEgJSAy KSA9IDApCisgICAgICAgICAgLT4gIFN1YnF1ZXJ5IFNjYW4gb24gdDIKKyAg ICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gdDIgdDJfMQorICAgICAg ICAgICAgICAgICAgICAgIEZpbHRlcjogKChhICUgMikgPSAxKQorICAgICAg ICAgIC0+ICBTZXEgU2NhbiBvbiB0MworICg5IHJvd3MpCisgCisgU0VMRUNU ICogRlJPTSB0MSBXSEVSRSBmX2xlYWsoYikgRk9SIFNIQVJFOworIE5PVElD RTogIGZfbGVhayA9PiBiYmIKKyBOT1RJQ0U6ICBmX2xlYWsgPT4gZGRkCisg Tk9USUNFOiAgZl9sZWFrID0+IGFiYworIE5PVElDRTogIGZfbGVhayA9PiBj ZGUKKyBOT1RJQ0U6ICBmX2xlYWsgPT4geHh4CisgTk9USUNFOiAgZl9sZWFr ID0+IHl5eQorIE5PVElDRTogIGZfbGVhayA9PiB6enoKKyAgYSB8ICBiICAK KyAtLS0rLS0tLS0KKyAgMiB8IGJiYgorICA0IHwgZGRkCisgIDEgfCBhYmMK KyAgMyB8IGNkZQorICAxIHwgeHh4CisgIDIgfCB5eXkKKyAgMyB8IHp6egor ICg3IHJvd3MpCisgCisgRVhQTEFJTiAoY29zdHMgb2ZmKSBTRUxFQ1QgKiBG Uk9NIHQxIFdIRVJFIGZfbGVhayhiKSBGT1IgU0hBUkU7CisgICAgICAgICAg ICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgIAorIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgTG9ja1Jv d3MKKyAgICAtPiAgQXBwZW5kCisgICAgICAgICAgLT4gIFN1YnF1ZXJ5IFNj YW4gb24gdDEKKyAgICAgICAgICAgICAgICBGaWx0ZXI6IGZfbGVhayh0MS5i KQorICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0MSB0MV8xCisg ICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAoKGEgJSAyKSA9IDApCisg ICAgICAgICAgLT4gIFN1YnF1ZXJ5IFNjYW4gb24gdDIKKyAgICAgICAgICAg ICAgICBGaWx0ZXI6IGZfbGVhayh0Mi5iKQorICAgICAgICAgICAgICAgIC0+ ICBTZXEgU2NhbiBvbiB0MiB0Ml8xCisgICAgICAgICAgICAgICAgICAgICAg RmlsdGVyOiAoKGEgJSAyKSA9IDEpCisgICAgICAgICAgLT4gIFNlcSBTY2Fu IG9uIHQzCisgICAgICAgICAgICAgICAgRmlsdGVyOiBmX2xlYWsoYikKKyAo MTIgcm93cykKKyAKKyAtLQorIC0tIENPUFkgVE8gc3RhdGVtZW50IAorIC0t CisgQ09QWSB0MSBUTyBzdGRvdXQ7CisgMgliYmIKKyA0CWRkZAorIENPUFkg dDEgVE8gc3Rkb3V0IFdJVEggT0lEUzsKKyAxMDIJMgliYmIKKyAxMDQJNAlk ZGQKKyBDT1BZIHQyKGMsYikgVE8gc3Rkb3V0IFdJVEggT0lEUzsKKyAyMDEJ MS4xCWFiYworIDIwMwkzLjMJY2RlCisgQ09QWSAoU0VMRUNUICogRlJPTSB0 MSkgVE8gc3Rkb3V0OworIDIJYmJiCisgNAlkZGQKKyAxCWFiYworIDMJY2Rl CisgMQl4eHgKKyAyCXl5eQorIDMJenp6CisgQ09QWSBkb2N1bWVudCBUTyBz dGRvdXQgV0lUSCBPSURTOwktLSBmYWlsZWQgKG5vIG9pZCBjb2x1bW4pCisg RVJST1I6ICB0YWJsZSAiZG9jdW1lbnQiIGRvZXMgbm90IGhhdmUgT0lEcwor IC0tCisgLS0gcmVjdXJzaXZlIFJMUyBhbmQgVklFV3MgaW4gcG9saWN5Cisg LS0KKyBDUkVBVEUgVEFCTEUgczEgKGEgaW50LCBiIHRleHQpOworIElOU0VS VCBJTlRPIHMxIChTRUxFQ1QgeCwgbWQ1KHg6OnRleHQpIEZST00gZ2VuZXJh dGVfc2VyaWVzKC0xMCwxMCkgeCk7CisgQ1JFQVRFIFRBQkxFIHMyICh4IGlu dCwgeSB0ZXh0KTsKKyBJTlNFUlQgSU5UTyBzMiAoU0VMRUNUIHgsIG1kNSh4 Ojp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygtNiw2KSB4KTsKKyBDUkVB VEUgVklFVyB2MiBBUyBTRUxFQ1QgKiBGUk9NIHMyIFdIRVJFIHkgbGlrZSAn JWFmJSc7CisgQUxURVIgVEFCTEUgczEgU0VUIFJPVyBTRUNVUklUWSBGT1Ig QUxMCisgICAgVE8gKGEgaW4gKHNlbGVjdCB4IGZyb20gczIgd2hlcmUgeSBs aWtlICclMmYlJykpOworIEFMVEVSIFRBQkxFIHMyIFNFVCBST1cgU0VDVVJJ VFkgRk9SIEFMTAorICAgIFRPICh4IGluIChzZWxlY3QgYSBmcm9tIHMxIHdo ZXJlIGIgbGlrZSAnJTIyJScpKTsKKyBTRUxFQ1QgKiBGUk9NIHMxIFdIRVJF IGZfbGVhayhiKTsJLS0gZmFpbCAoaW5maW5pdGUgcmVjdXJzaW9uKQorIEVS Uk9SOiAgaW5maW5pdGUgcmVjdXJzaW9uIGRldGVjdGVkIGZvciByZWxhdGlv biAiczEiCisgQUxURVIgVEFCTEUgczIgU0VUIFJPVyBTRUNVUklUWSBGT1Ig QUxMIFRPICh4ICUgMiA9IDApOworIFNFTEVDVCAqIEZST00gczEgV0hFUkUg Zl9sZWFrKGIpOwktLSBPSworIE5PVElDRTogIGZfbGVhayA9PiBjODFlNzI4 ZDlkNGMyZjYzNmYwNjdmODljYzE0ODYyYworIE5PVElDRTogIGZfbGVhayA9 PiBhODdmZjY3OWEyZjNlNzFkOTE4MWE2N2I3NTQyMTIyYworICBhIHwgICAg ICAgICAgICAgICAgYiAgICAgICAgICAgICAgICAgCisgLS0tKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMiB8IGM4MWU3MjhkOWQ0 YzJmNjM2ZjA2N2Y4OWNjMTQ4NjJjCisgIDQgfCBhODdmZjY3OWEyZjNlNzFk OTE4MWE2N2I3NTQyMTIyYworICgyIHJvd3MpCisgCisgRVhQTEFJTiBTRUxF Q1QgKiBGUk9NIG9ubHkgczEgV0hFUkUgZl9sZWFrKGIpOworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBTdWJxdWVy eSBTY2FuIG9uIHMxICAoY29zdD0yOC41NS4uNjEuNjcgcm93cz0yMDUgd2lk dGg9MzYpCisgICAgRmlsdGVyOiBmX2xlYWsoczEuYikKKyAgICAtPiAgSGFz aCBKb2luICAoY29zdD0yOC41NS4uNTUuNTIgcm93cz02MTUgd2lkdGg9MzYp CisgICAgICAgICAgSGFzaCBDb25kOiAoczFfMS5hID0gczIueCkKKyAgICAg ICAgICAtPiAgU2VxIFNjYW4gb24gczEgczFfMSAgKGNvc3Q9MC4wMC4uMjIu MzAgcm93cz0xMjMwIHdpZHRoPTM2KQorICAgICAgICAgIC0+ICBIYXNoICAo Y29zdD0yOC41NC4uMjguNTQgcm93cz0xIHdpZHRoPTQpCisgICAgICAgICAg ICAgICAgLT4gIEhhc2hBZ2dyZWdhdGUgIChjb3N0PTI4LjUzLi4yOC41NCBy b3dzPTEgd2lkdGg9NCkKKyAgICAgICAgICAgICAgICAgICAgICAtPiAgU3Vi cXVlcnkgU2NhbiBvbiBzMiAgKGNvc3Q9MC4wMC4uMjguNTIgcm93cz0xIHdp ZHRoPTQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAo czIueSB+fiAnJTJmJSc6OnRleHQpCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLT4gIFNlcSBTY2FuIG9uIHMyIHMyXzEgIChjb3N0PTAuMDAuLjI4 LjQ1IHJvd3M9NiB3aWR0aD0zNikKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBGaWx0ZXI6ICgoeCAlIDIpID0gMCkKKyAoMTEgcm93cykK KyAKKyBBTFRFUiBUQUJMRSBzMSBTRVQgUk9XIFNFQ1VSSVRZIEZPUiBBTEwK KyAgICBUTyAoYSBpbiAoc2VsZWN0IHggZnJvbSB2MikpOwkJLS0gdXNpbmcg VklFVyBpbiBSTFMgcG9saWN5CisgU0VMRUNUICogRlJPTSBzMSBXSEVSRSBm X2xlYWsoYik7CS0tIE9LCisgTk9USUNFOiAgZl9sZWFrID0+IDAyNjdhYWY2 MzJlODdhNjMyODhhMDgzMzFmMjJjN2MzCisgTk9USUNFOiAgZl9sZWFrID0+ IDE2NzkwOTFjNWE4ODBmYWY2ZmI1ZTYwODdlYjFiMmRjCisgIGEgIHwgICAg ICAgICAgICAgICAgYiAgICAgICAgICAgICAgICAgCisgLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIC00IHwgMDI2N2FhZjYz MmU4N2E2MzI4OGEwODMzMWYyMmM3YzMKKyAgIDYgfCAxNjc5MDkxYzVhODgw ZmFmNmZiNWU2MDg3ZWIxYjJkYworICgyIHJvd3MpCisgCisgRVhQTEFJTiAo Q09TVFMgT0ZGKSBTRUxFQ1QgKiBGUk9NIHMxIFdIRVJFIGZfbGVhayhiKTsK KyAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgICAgICAgICAgCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBTdWJxdWVyeSBT Y2FuIG9uIHMxCisgICAgRmlsdGVyOiBmX2xlYWsoczEuYikKKyAgICAtPiAg SGFzaCBKb2luCisgICAgICAgICAgSGFzaCBDb25kOiAoczFfMS5hID0gczIu eCkKKyAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gczEgczFfMQorICAgICAg ICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgLT4gIEhhc2hBZ2dyZWdh dGUKKyAgICAgICAgICAgICAgICAgICAgICAtPiAgU3VicXVlcnkgU2NhbiBv biBzMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHMy Lnkgfn4gJyVhZiUnOjp0ZXh0KQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC0+ICBTZXEgU2NhbiBvbiBzMiBzMl8xCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRmlsdGVyOiAoKHggJSAyKSA9IDApCisgKDEx IHJvd3MpCisgCisgU0VMRUNUIChTRUxFQ1QgeCBGUk9NIHMxIExJTUlUIDEp IHh4LCAqIEZST00gczIgV0hFUkUgeSBsaWtlICclMjglJzsKKyAgeHggfCB4 ICB8ICAgICAgICAgICAgICAgIHkgICAgICAgICAgICAgICAgIAorIC0tLS0r LS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIC02 IHwgLTYgfCA1OTZhM2QwNDQ4MTgxNjMzMGYwN2U0Zjk3NTEwYzI4ZgorICAt NCB8IC00IHwgMDI2N2FhZjYzMmU4N2E2MzI4OGEwODMzMWYyMmM3YzMKKyAg IDIgfCAgMiB8IGM4MWU3MjhkOWQ0YzJmNjM2ZjA2N2Y4OWNjMTQ4NjJjCisg KDMgcm93cykKKyAKKyBFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAoU0VM RUNUIHggRlJPTSBzMSBMSU1JVCAxKSB4eCwgKiBGUk9NIHMyIFdIRVJFIHkg bGlrZSAnJTI4JSc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBR VUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorICBTdWJxdWVyeSBTY2FuIG9uIHMyCisg ICAgRmlsdGVyOiAoczIueSB+fiAnJTI4JSc6OnRleHQpCisgICAgLT4gIFNl cSBTY2FuIG9uIHMyIHMyXzEKKyAgICAgICAgICBGaWx0ZXI6ICgoeCAlIDIp ID0gMCkKKyAgICBTdWJQbGFuIDEKKyAgICAgIC0+ICBMaW1pdAorICAgICAg ICAgICAgLT4gIFN1YnF1ZXJ5IFNjYW4gb24gczEKKyAgICAgICAgICAgICAg ICAgIC0+ICBOZXN0ZWQgTG9vcCBTZW1pIEpvaW4KKyAgICAgICAgICAgICAg ICAgICAgICAgIEpvaW4gRmlsdGVyOiAoczFfMS5hID0gczJfMi54KQorICAg ICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHMxIHMxXzEK KyAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBNYXRlcmlhbGl6ZQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFN1YnF1ZXJ5IFNjYW4g b24gczJfMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg RmlsdGVyOiAoczJfMi55IH5+ICclYWYlJzo6dGV4dCkKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBzMiBz Ml8zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBGaWx0ZXI6ICgoeCAlIDIpID0gMCkKKyAoMTUgcm93cykKKyAKKyBBTFRF UiBUQUJMRSBzMiBTRVQgUk9XIFNFQ1VSSVRZIEZPUiBBTEwKKyAgICBUTyAo eCBpbiAoc2VsZWN0IGEgZnJvbSBzMSB3aGVyZSBiIGxpa2UgJyVkMiUnKSk7 CisgU0VMRUNUICogRlJPTSBzMSBXSEVSRSBmX2xlYWsoYik7CS0tIGZhaWwg KGluZmluaXRlIHJlY3Vyc2lvbiB2aWEgdmlldykKKyBFUlJPUjogIGluZmlu aXRlIHJlY3Vyc2lvbiBkZXRlY3RlZCBmb3IgcmVsYXRpb24gInMxIgorIC0t IHByZXBhcmVkIHN0YXRlbWVudCB3aXRoIHJsc19yZWdyZXNzX3VzZXIwIHBy aXZpbGVnZQorIFBSRVBBUkUgcDEoaW50KSBBUyBTRUxFQ1QgKiBGUk9NIHQx IFdIRVJFIGEgPD0gJDE7CisgRVhFQ1VURSBwMSgyKTsKKyAgYSB8ICBiICAK KyAtLS0rLS0tLS0KKyAgMiB8IGJiYgorICAxIHwgYWJjCisgIDEgfCB4eHgK KyAgMiB8IHl5eQorICg0IHJvd3MpCisgCisgRVhQTEFJTiAoY29zdHMgb2Zm KSBFWEVDVVRFIHAxKDIpOworICAgICAgICAgICAgICAgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgICAgICAgICAgICAgICAKKyAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIEFwcGVu ZAorICAgIC0+ICBTdWJxdWVyeSBTY2FuIG9uIHQxCisgICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIHQxIHQxXzEKKyAgICAgICAgICAgICAgICBGaWx0ZXI6 ICgoYSA8PSAyKSBBTkQgKChhICUgMikgPSAwKSkKKyAgICAtPiAgU3VicXVl cnkgU2NhbiBvbiB0MgorICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0MiB0 Ml8xCisgICAgICAgICAgICAgICAgRmlsdGVyOiAoKGEgPD0gMikgQU5EICgo YSAlIDIpID0gMSkpCisgICAgLT4gIFNlcSBTY2FuIG9uIHQzCisgICAgICAg ICAgRmlsdGVyOiAoYSA8PSAyKQorICg5IHJvd3MpCisgCisgLS0gc3VwZXJ1 c2VyIGlzIGFsbG93ZWQgdG8gYnlwYXNzIFJMUyBjaGVja3MKKyBSRVNFVCBT RVNTSU9OIEFVVEhPUklaQVRJT047CisgU0VMRUNUICogRlJPTSB0MSBXSEVS RSBmX2xlYWsoYik7CisgTk9USUNFOiAgZl9sZWFrID0+IGFhYQorIE5PVElD RTogIGZfbGVhayA9PiBiYmIKKyBOT1RJQ0U6ICBmX2xlYWsgPT4gY2NjCisg Tk9USUNFOiAgZl9sZWFrID0+IGRkZAorIE5PVElDRTogIGZfbGVhayA9PiBh YmMKKyBOT1RJQ0U6ICBmX2xlYWsgPT4gYmNkCisgTk9USUNFOiAgZl9sZWFr ID0+IGNkZQorIE5PVElDRTogIGZfbGVhayA9PiBkZWYKKyBOT1RJQ0U6ICBm X2xlYWsgPT4geHh4CisgTk9USUNFOiAgZl9sZWFrID0+IHl5eQorIE5PVElD RTogIGZfbGVhayA9PiB6enoKKyAgYSB8ICBiICAKKyAtLS0rLS0tLS0KKyAg MSB8IGFhYQorICAyIHwgYmJiCisgIDMgfCBjY2MKKyAgNCB8IGRkZAorICAx IHwgYWJjCisgIDIgfCBiY2QKKyAgMyB8IGNkZQorICA0IHwgZGVmCisgIDEg fCB4eHgKKyAgMiB8IHl5eQorICAzIHwgenp6CisgKDExIHJvd3MpCisgCisg RVhQTEFJTiAoY29zdHMgb2ZmKSBTRUxFQ1QgKiBGUk9NIHQxIFdIRVJFIGZf bGVhayhiKTsKKyAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAKKyAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgQXBwZW5kCisgICAgLT4gIFNl cSBTY2FuIG9uIHQxCisgICAgICAgICAgRmlsdGVyOiBmX2xlYWsoYikKKyAg ICAtPiAgU2VxIFNjYW4gb24gdDIKKyAgICAgICAgICBGaWx0ZXI6IGZfbGVh ayhiKQorICAgIC0+ICBTZXEgU2NhbiBvbiB0MworICAgICAgICAgIEZpbHRl cjogZl9sZWFrKGIpCisgKDcgcm93cykKKyAKKyAtLSBwbGFuIGNhY2hlIHNo b3VsZCBiZSBpbnZhbGlkYXRlZAorIEVYRUNVVEUgcDEoMik7CisgIGEgfCAg YiAgCisgLS0tKy0tLS0tCisgIDEgfCBhYWEKKyAgMiB8IGJiYgorICAxIHwg YWJjCisgIDIgfCBiY2QKKyAgMSB8IHh4eAorICAyIHwgeXl5CisgKDYgcm93 cykKKyAKKyBFWFBMQUlOIChjb3N0cyBvZmYpIEVYRUNVVEUgcDEoMik7Cisg ICAgICAgICBRVUVSWSBQTEFOICAgICAgICAKKyAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorICBBcHBlbmQKKyAgICAtPiAgU2VxIFNjYW4gb24gdDEK KyAgICAgICAgICBGaWx0ZXI6IChhIDw9IDIpCisgICAgLT4gIFNlcSBTY2Fu IG9uIHQyCisgICAgICAgICAgRmlsdGVyOiAoYSA8PSAyKQorICAgIC0+ICBT ZXEgU2NhbiBvbiB0MworICAgICAgICAgIEZpbHRlcjogKGEgPD0gMikKKyAo NyByb3dzKQorIAorIFBSRVBBUkUgcDIoaW50KSBBUyBTRUxFQ1QgKiBGUk9N IHQxIFdIRVJFIGEgPSAkMTsKKyBFWEVDVVRFIHAyKDIpOworICBhIHwgIGIg IAorIC0tLSstLS0tLQorICAyIHwgYmJiCisgIDIgfCBiY2QKKyAgMiB8IHl5 eQorICgzIHJvd3MpCisgCisgRVhQTEFJTiAoY29zdHMgb2ZmKSBFWEVDVVRF IHAyKDIpOworICAgICAgICBRVUVSWSBQTEFOICAgICAgICAKKyAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgIEFwcGVuZAorICAgIC0+ICBTZXEgU2Nh biBvbiB0MQorICAgICAgICAgIEZpbHRlcjogKGEgPSAyKQorICAgIC0+ICBT ZXEgU2NhbiBvbiB0MgorICAgICAgICAgIEZpbHRlcjogKGEgPSAyKQorICAg IC0+ICBTZXEgU2NhbiBvbiB0MworICAgICAgICAgIEZpbHRlcjogKGEgPSAy KQorICg3IHJvd3MpCisgCisgLS0gYWxzbywgY2FzZSB3aGVuIHByaXZpbGVn ZSBzd2l0Y2ggZnJvbSBzdXBlcnVzZXIKKyBTRVQgU0VTU0lPTiBBVVRIT1JJ WkFUSU9OIHJsc19yZWdyZXNzX3VzZXIwOworIEVYRUNVVEUgcDIoMik7Cisg IGEgfCAgYiAgCisgLS0tKy0tLS0tCisgIDIgfCBiYmIKKyAgMiB8IHl5eQor ICgyIHJvd3MpCisgCisgRVhQTEFJTiAoY29zdHMgb2ZmKSBFWEVDVVRFIHAy KDIpOworICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAg ICAgICAgICAgICAgIAorIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBBcHBlbmQKKyAgICAtPiAgU3Vi cXVlcnkgU2NhbiBvbiB0MQorICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0 MSB0MV8xCisgICAgICAgICAgICAgICAgRmlsdGVyOiAoKGEgPSAyKSBBTkQg KChhICUgMikgPSAwKSkKKyAgICAtPiAgU3VicXVlcnkgU2NhbiBvbiB0Mgor ICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0MiB0Ml8xCisgICAgICAgICAg ICAgICAgRmlsdGVyOiAoKGEgPSAyKSBBTkQgKChhICUgMikgPSAxKSkKKyAg ICAtPiAgU2VxIFNjYW4gb24gdDMKKyAgICAgICAgICBGaWx0ZXI6IChhID0g MikKKyAoOSByb3dzKQorIAorIC0tCisgLS0gVVBEQVRFIC8gREVMRVRFIGFu ZCBSb3ctbGV2ZWwgc2VjdXJpdHkKKyAtLQorIFNFVCBTRVNTSU9OIEFVVEhP UklaQVRJT04gcmxzX3JlZ3Jlc3NfdXNlcjA7CisgRVhQTEFJTiAoY29zdHMg b2ZmKSBVUERBVEUgdDEgU0VUIGIgPSBiIHx8IGIgV0hFUkUgZl9sZWFrKGIp OworICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAKKyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFVwZGF0 ZSBvbiB0MQorICAgIC0+ICBTdWJxdWVyeSBTY2FuIG9uIHQxXzEKKyAgICAg ICAgICBGaWx0ZXI6IGZfbGVhayh0MV8xLmIpCisgICAgICAgICAgLT4gIFNl cSBTY2FuIG9uIHQxIHQxXzIKKyAgICAgICAgICAgICAgICBGaWx0ZXI6ICgo YSAlIDIpID0gMCkKKyAgICAtPiAgU3VicXVlcnkgU2NhbiBvbiB0MgorICAg ICAgICAgIEZpbHRlcjogZl9sZWFrKHQyLmIpCisgICAgICAgICAgLT4gIFNl cSBTY2FuIG9uIHQyIHQyXzEKKyAgICAgICAgICAgICAgICBGaWx0ZXI6ICgo YSAlIDIpID0gMSkKKyAgICAtPiAgU2VxIFNjYW4gb24gdDMKKyAgICAgICAg ICBGaWx0ZXI6IGZfbGVhayhiKQorICgxMSByb3dzKQorIAorIFVQREFURSB0 MSBTRVQgYiA9IGIgfHwgYiBXSEVSRSBmX2xlYWsoYik7CisgTk9USUNFOiAg Zl9sZWFrID0+IGJiYgorIE5PVElDRTogIGZfbGVhayA9PiBkZGQKKyBOT1RJ Q0U6ICBmX2xlYWsgPT4gYWJjCisgTk9USUNFOiAgZl9sZWFrID0+IGNkZQor IE5PVElDRTogIGZfbGVhayA9PiB4eHgKKyBOT1RJQ0U6ICBmX2xlYWsgPT4g eXl5CisgTk9USUNFOiAgZl9sZWFrID0+IHp6egorIEVYUExBSU4gKGNvc3Rz IG9mZikgVVBEQVRFIG9ubHkgdDEgU0VUIGIgPSBiIHx8ICdfdXBkdCcgV0hF UkUgZl9sZWFrKGIpOworICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAKKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgIFVwZGF0ZSBvbiB0MQorICAgIC0+ICBTdWJxdWVyeSBTY2FuIG9u IHQxXzEKKyAgICAgICAgICBGaWx0ZXI6IGZfbGVhayh0MV8xLmIpCisgICAg ICAgICAgLT4gIFNlcSBTY2FuIG9uIHQxIHQxXzIKKyAgICAgICAgICAgICAg ICBGaWx0ZXI6ICgoYSAlIDIpID0gMCkKKyAoNSByb3dzKQorIAorIFVQREFU RSBvbmx5IHQxIFNFVCBiID0gYiB8fCAnX3VwZHQnIFdIRVJFIGZfbGVhayhi KTsKKyBOT1RJQ0U6ICBmX2xlYWsgPT4gYmJiYmJiCisgTk9USUNFOiAgZl9s ZWFrID0+IGRkZGRkZAorIC0tIHJldHVybmluZyBjbGF1c2Ugd2l0aCBzeXN0 ZW0gY29sdW1uCisgVVBEQVRFIG9ubHkgdDEgU0VUIGIgPSBiIFdIRVJFIGZf bGVhayhiKSBSRVRVUk5JTkcgb2lkLCAqLCB0MTsKKyBOT1RJQ0U6ICBmX2xl YWsgPT4gYmJiYmJiX3VwZHQKKyBOT1RJQ0U6ICBmX2xlYWsgPT4gZGRkZGRk X3VwZHQKKyAgb2lkIHwgYSB8ICAgICAgYiAgICAgIHwgICAgICAgdDEgICAg ICAgIAorIC0tLS0tKy0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0tCisgIDEwMiB8IDIgfCBiYmJiYmJfdXBkdCB8ICgyLGJiYmJiYl91cGR0 KQorICAxMDQgfCA0IHwgZGRkZGRkX3VwZHQgfCAoNCxkZGRkZGRfdXBkdCkK KyAoMiByb3dzKQorIAorIFVQREFURSB0MSBTRVQgYiA9IGIgV0hFUkUgZl9s ZWFrKGIpIFJFVFVSTklORyAqOworIE5PVElDRTogIGZfbGVhayA9PiBiYmJi YmJfdXBkdAorIE5PVElDRTogIGZfbGVhayA9PiBkZGRkZGRfdXBkdAorIE5P VElDRTogIGZfbGVhayA9PiBhYmNhYmMKKyBOT1RJQ0U6ICBmX2xlYWsgPT4g Y2RlY2RlCisgTk9USUNFOiAgZl9sZWFrID0+IHh4eHh4eAorIE5PVElDRTog IGZfbGVhayA9PiB5eXl5eXkKKyBOT1RJQ0U6ICBmX2xlYWsgPT4genp6enp6 CisgIGEgfCAgICAgIGIgICAgICAKKyAtLS0rLS0tLS0tLS0tLS0tLQorICAy IHwgYmJiYmJiX3VwZHQKKyAgNCB8IGRkZGRkZF91cGR0CisgIDEgfCBhYmNh YmMKKyAgMyB8IGNkZWNkZQorICAxIHwgeHh4eHh4CisgIDIgfCB5eXl5eXkK KyAgMyB8IHp6enp6egorICg3IHJvd3MpCisgCisgVVBEQVRFIHQxIFNFVCBi ID0gYiBXSEVSRSBmX2xlYWsoYikgUkVUVVJOSU5HIG9pZCwgKiwgdDE7Cisg Tk9USUNFOiAgZl9sZWFrID0+IGJiYmJiYl91cGR0CisgTk9USUNFOiAgZl9s ZWFrID0+IGRkZGRkZF91cGR0CisgTk9USUNFOiAgZl9sZWFrID0+IGFiY2Fi YworIE5PVElDRTogIGZfbGVhayA9PiBjZGVjZGUKKyBOT1RJQ0U6ICBmX2xl YWsgPT4geHh4eHh4CisgTk9USUNFOiAgZl9sZWFrID0+IHl5eXl5eQorIE5P VElDRTogIGZfbGVhayA9PiB6enp6enoKKyAgb2lkIHwgYSB8ICAgICAgYiAg ICAgIHwgICAgICAgdDEgICAgICAgIAorIC0tLS0tKy0tLSstLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLS0tLS0tCisgIDEwMiB8IDIgfCBiYmJiYmJfdXBk dCB8ICgyLGJiYmJiYl91cGR0KQorICAxMDQgfCA0IHwgZGRkZGRkX3VwZHQg fCAoNCxkZGRkZGRfdXBkdCkKKyAgMjAxIHwgMSB8IGFiY2FiYyAgICAgIHwg KDEsYWJjYWJjKQorICAyMDMgfCAzIHwgY2RlY2RlICAgICAgfCAoMyxjZGVj ZGUpCisgIDMwMSB8IDEgfCB4eHh4eHggICAgICB8ICgxLHh4eHh4eCkKKyAg MzAyIHwgMiB8IHl5eXl5eSAgICAgIHwgKDIseXl5eXl5KQorICAzMDMgfCAz IHwgenp6enp6ICAgICAgfCAoMyx6enp6enopCisgKDcgcm93cykKKyAKKyBS RVNFVCBTRVNTSU9OIEFVVEhPUklaQVRJT047CisgU0VMRUNUICogRlJPTSB0 MTsKKyAgYSB8ICAgICAgYiAgICAgIAorIC0tLSstLS0tLS0tLS0tLS0tCisg IDEgfCBhYWEKKyAgMyB8IGNjYworICAyIHwgYmJiYmJiX3VwZHQKKyAgNCB8 IGRkZGRkZF91cGR0CisgIDIgfCBiY2QKKyAgNCB8IGRlZgorICAxIHwgYWJj YWJjCisgIDMgfCBjZGVjZGUKKyAgMSB8IHh4eHh4eAorICAyIHwgeXl5eXl5 CisgIDMgfCB6enp6enoKKyAoMTEgcm93cykKKyAKKyBTRVQgU0VTU0lPTiBB VVRIT1JJWkFUSU9OIHJsc19yZWdyZXNzX3VzZXIwOworIEVYUExBSU4gKGNv c3RzIG9mZikgREVMRVRFIEZST00gb25seSB0MSBXSEVSRSBmX2xlYWsoYik7 CisgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgIAorIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgRGVsZXRl IG9uIHQxCisgICAgLT4gIFN1YnF1ZXJ5IFNjYW4gb24gdDFfMQorICAgICAg ICAgIEZpbHRlcjogZl9sZWFrKHQxXzEuYikKKyAgICAgICAgICAtPiAgU2Vx IFNjYW4gb24gdDEgdDFfMgorICAgICAgICAgICAgICAgIEZpbHRlcjogKChh ICUgMikgPSAwKQorICg1IHJvd3MpCisgCisgRVhQTEFJTiAoY29zdHMgb2Zm KSBERUxFVEUgRlJPTSB0MSBXSEVSRSBmX2xlYWsoYik7CisgICAgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgIAorIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgRGVsZXRlIG9uIHQxCisgICAg LT4gIFN1YnF1ZXJ5IFNjYW4gb24gdDFfMQorICAgICAgICAgIEZpbHRlcjog Zl9sZWFrKHQxXzEuYikKKyAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gdDEg dDFfMgorICAgICAgICAgICAgICAgIEZpbHRlcjogKChhICUgMikgPSAwKQor ICAgIC0+ICBTdWJxdWVyeSBTY2FuIG9uIHQyCisgICAgICAgICAgRmlsdGVy OiBmX2xlYWsodDIuYikKKyAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gdDIg dDJfMQorICAgICAgICAgICAgICAgIEZpbHRlcjogKChhICUgMikgPSAxKQor ICAgIC0+ICBTZXEgU2NhbiBvbiB0MworICAgICAgICAgIEZpbHRlcjogZl9s ZWFrKGIpCisgKDExIHJvd3MpCisgCisgREVMRVRFIEZST00gb25seSB0MSBX SEVSRSBmX2xlYWsoYikgUkVUVVJOSU5HIG9pZCwgKiwgdDE7CisgTk9USUNF OiAgZl9sZWFrID0+IGJiYmJiYl91cGR0CisgTk9USUNFOiAgZl9sZWFrID0+ IGRkZGRkZF91cGR0CisgIG9pZCB8IGEgfCAgICAgIGIgICAgICB8ICAgICAg IHQxICAgICAgICAKKyAtLS0tLSstLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLQorICAxMDIgfCAyIHwgYmJiYmJiX3VwZHQgfCAoMixiYmJi YmJfdXBkdCkKKyAgMTA0IHwgNCB8IGRkZGRkZF91cGR0IHwgKDQsZGRkZGRk X3VwZHQpCisgKDIgcm93cykKKyAKKyBERUxFVEUgRlJPTSB0MSBXSEVSRSBm X2xlYWsoYikgUkVUVVJOSU5HIG9pZCwgKiwgdDE7CisgTk9USUNFOiAgZl9s ZWFrID0+IGFiY2FiYworIE5PVElDRTogIGZfbGVhayA9PiBjZGVjZGUKKyBO T1RJQ0U6ICBmX2xlYWsgPT4geHh4eHh4CisgTk9USUNFOiAgZl9sZWFrID0+ IHl5eXl5eQorIE5PVElDRTogIGZfbGVhayA9PiB6enp6enoKKyAgb2lkIHwg YSB8ICAgYiAgICB8ICAgICB0MSAgICAgCisgLS0tLS0rLS0tKy0tLS0tLS0t Ky0tLS0tLS0tLS0tLQorICAyMDEgfCAxIHwgYWJjYWJjIHwgKDEsYWJjYWJj KQorICAyMDMgfCAzIHwgY2RlY2RlIHwgKDMsY2RlY2RlKQorICAzMDEgfCAx IHwgeHh4eHh4IHwgKDEseHh4eHh4KQorICAzMDIgfCAyIHwgeXl5eXl5IHwg KDIseXl5eXl5KQorICAzMDMgfCAzIHwgenp6enp6IHwgKDMsenp6enp6KQor ICg1IHJvd3MpCisgCisgLS0KKyAtLSBUZXN0IHBzcWwgXGR0KyBjb21tYW5k CisgLS0KKyBBTFRFUiBUQUJMRSBjYXRlZ29yeSBSRVNFVCBST1cgU0VDVVJJ VFkgRk9SIEFMTDsgIC0tIHRvbyBsb25nIHF1YWwKKyBcZHQrCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IExpc3Qgb2YgcmVsYXRpb25zCisgICAgICAgIFNjaGVtYSAgICAgICB8ICAg TmFtZSAgIHwgVHlwZSAgfCAgICAgICBPd25lciAgICAgICB8ICAgIFNpemUg ICAgfCBEZXNjcmlwdGlvbiB8ICAgICAgICAgICBSb3ctc2VjdXJpdHkgICAg ICAgICAgIAorIC0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAg cmxzX3JlZ3Jlc3Nfc2NoZW1hIHwgY2F0ZWdvcnkgfCB0YWJsZSB8IHJsc19y ZWdyZXNzX3VzZXIwIHwgMTYga0IgICAgICB8ICAgICAgICAgICAgIHwgCisg IHJsc19yZWdyZXNzX3NjaGVtYSB8IGRvY3VtZW50IHwgdGFibGUgfCBybHNf cmVncmVzc191c2VyMCB8IDE2IGtCICAgICAgfCAgICAgICAgICAgICB8IChk YXV0aG9yID0gImN1cnJlbnRfdXNlciIoKSkKKyAgcmxzX3JlZ3Jlc3Nfc2No ZW1hIHwgczEgICAgICAgfCB0YWJsZSB8IHJsc19yZWdyZXNzX3VzZXIwIHwg MTYga0IgICAgICB8ICAgICAgICAgICAgIHwgKGEgSU4gKCBTRUxFQ1QgdjIu eCAgICAgICAgICAgICArCisgICAgICAgICAgICAgICAgICAgICB8ICAgICAg ICAgIHwgICAgICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAg fCAgICAgICAgICAgICB8ICAgIEZST00gdjIpKQorICBybHNfcmVncmVzc19z Y2hlbWEgfCBzMiAgICAgICB8IHRhYmxlIHwgcmxzX3JlZ3Jlc3NfdXNlcjAg fCAxNiBrQiAgICAgIHwgICAgICAgICAgICAgfCAoeCBJTiAoIFNFTEVDVCBz MS5hICAgICAgICAgICAgICsKKyAgICAgICAgICAgICAgICAgICAgIHwgICAg ICAgICAgfCAgICAgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAg ICB8ICAgICAgICAgICAgIHwgICAgRlJPTSBzMSAgICAgICAgICAgICAgICAg ICAgICArCisgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgIHwgICAg ICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgfCAgICAgICAg ICAgICB8ICAgV0hFUkUgKHMxLmIgfn4gJyVkMiUnOjp0ZXh0KSkpCisgIHJs c19yZWdyZXNzX3NjaGVtYSB8IHQxICAgICAgIHwgdGFibGUgfCBybHNfcmVn cmVzc191c2VyMCB8IDE2IGtCICAgICAgfCAgICAgICAgICAgICB8ICgoYSAl IDIpID0gMCkKKyAgcmxzX3JlZ3Jlc3Nfc2NoZW1hIHwgdDIgICAgICAgfCB0 YWJsZSB8IHJsc19yZWdyZXNzX3VzZXIwIHwgMTYga0IgICAgICB8ICAgICAg ICAgICAgIHwgKChhICUgMikgPSAxKQorICBybHNfcmVncmVzc19zY2hlbWEg fCB0MyAgICAgICB8IHRhYmxlIHwgcmxzX3JlZ3Jlc3NfdXNlcjAgfCAxNiBr QiAgICAgIHwgICAgICAgICAgICAgfCAKKyAgcmxzX3JlZ3Jlc3Nfc2NoZW1h IHwgdWFjY291bnQgfCB0YWJsZSB8IHJsc19yZWdyZXNzX3VzZXIwIHwgODE5 MiBieXRlcyB8ICAgICAgICAgICAgIHwgCisgKDggcm93cykKKyAKKyAtLQor IC0tIENsZWFuIHVwIG9iamVjdHMKKyAtLQorIFJFU0VUIFNFU1NJT04gQVVU SE9SSVpBVElPTjsKKyBEUk9QIFNDSEVNQSBybHNfcmVncmVzc19zY2hlbWEg Q0FTQ0FERTsKKyBOT1RJQ0U6ICBkcm9wIGNhc2NhZGVzIHRvIDEwIG90aGVy IG9iamVjdHMKKyBERVRBSUw6ICBkcm9wIGNhc2NhZGVzIHRvIGZ1bmN0aW9u IGZfbGVhayh0ZXh0KQorIGRyb3AgY2FzY2FkZXMgdG8gdGFibGUgdWFjY291 bnQKKyBkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIGNhdGVnb3J5CisgZHJvcCBj YXNjYWRlcyB0byB0YWJsZSBkb2N1bWVudAorIGRyb3AgY2FzY2FkZXMgdG8g dGFibGUgdDEKKyBkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHQyCisgZHJvcCBj YXNjYWRlcyB0byB0YWJsZSB0MworIGRyb3AgY2FzY2FkZXMgdG8gdGFibGUg czEKKyBkcm9wIGNhc2NhZGVzIHRvIHRhYmxlIHMyCisgZHJvcCBjYXNjYWRl cyB0byB2aWV3IHYyCisgRFJPUCBVU0VSIHJsc19yZWdyZXNzX3VzZXIwOwor IERST1AgVVNFUiBybHNfcmVncmVzc191c2VyMTsKKyBEUk9QIFVTRVIgcmxz X3JlZ3Jlc3NfdXNlcjI7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL3Nhbml0eV9jaGVjay5vdXQgYi9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL3Nhbml0eV9jaGVjay5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggNDMyZDM5YS4uM2I5MTIzZAoqKiogYS9zcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL3Nhbml0eV9jaGVjay5vdXQKLS0tIGIvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9zYW5pdHlfY2hlY2sub3V0CioqKioqKioqKioq KioqKiBTRUxFQ1QgcmVsbmFtZSwgcmVsaGFzaW5kZXgKKioqIDEyMCwxMjUg KioqKgotLS0gMTIwLDEyNiAtLS0tCiAgIHBnX3Byb2MgICAgICAgICAgICAg ICAgIHwgdAogICBwZ19yYW5nZSAgICAgICAgICAgICAgICB8IHQKICAgcGdf cmV3cml0ZSAgICAgICAgICAgICAgfCB0CisgIHBnX3Jvd3NlY3VyaXR5ICAg ICAgICAgIHwgdAogICBwZ19zZWNsYWJlbCAgICAgICAgICAgICB8IHQKICAg cGdfc2hkZXBlbmQgICAgICAgICAgICAgfCB0CiAgIHBnX3NoZGVzY3JpcHRp b24gICAgICAgIHwgdAoqKioqKioqKioqKioqKiogU0VMRUNUIHJlbG5hbWUs IHJlbGhhc2luZGV4CioqKiAxNjYsMTcyICoqKioKICAgdGltZXR6X3RibCAg ICAgICAgICAgICAgfCBmCiAgIHRpbnRlcnZhbF90YmwgICAgICAgICAgIHwg ZgogICB2YXJjaGFyX3RibCAgICAgICAgICAgICB8IGYKISAoMTU1IHJvd3Mp CiAgCiAgLS0KICAtLSBhbm90aGVyIHNhbml0eSBjaGVjazogZXZlcnkgc3lz dGVtIGNhdGFsb2cgdGhhdCBoYXMgT0lEcyBzaG91bGQgaGF2ZQotLS0gMTY3 LDE3MyAtLS0tCiAgIHRpbWV0el90YmwgICAgICAgICAgICAgIHwgZgogICB0 aW50ZXJ2YWxfdGJsICAgICAgICAgICB8IGYKICAgdmFyY2hhcl90YmwgICAg ICAgICAgICAgfCBmCiEgKDE1NiByb3dzKQogIAogIC0tCiAgLS0gYW5vdGhl ciBzYW5pdHkgY2hlY2s6IGV2ZXJ5IHN5c3RlbSBjYXRhbG9nIHRoYXQgaGFz IE9JRHMgc2hvdWxkIGhhdmUKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jl c3MvcGFyYWxsZWxfc2NoZWR1bGUgYi9zcmMvdGVzdC9yZWdyZXNzL3BhcmFs bGVsX3NjaGVkdWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkMDhl OGQuLjM2N2RmMDAKKioqIGEvc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9z Y2hlZHVsZQotLS0gYi9zcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVk dWxlCioqKioqKioqKioqKioqKiB0ZXN0OiBzZWxlY3RfaW50byBzZWxlY3Rf ZGlzdGluY3Qgc2VsZWN0CioqKiA4Myw4OSAqKioqCiAgIyAtLS0tLS0tLS0t CiAgIyBBbm90aGVyIGdyb3VwIG9mIHBhcmFsbGVsIHRlc3RzCiAgIyAtLS0t LS0tLS0tCiEgdGVzdDogcHJpdmlsZWdlcyBzZWN1cml0eV9sYWJlbCBjb2xs YXRlIG1hdHZpZXcgbG9jawogIAogICMgLS0tLS0tLS0tLQogICMgQW5vdGhl ciBncm91cCBvZiBwYXJhbGxlbCB0ZXN0cwotLS0gODMsODkgLS0tLQogICMg LS0tLS0tLS0tLQogICMgQW5vdGhlciBncm91cCBvZiBwYXJhbGxlbCB0ZXN0 cwogICMgLS0tLS0tLS0tLQohIHRlc3Q6IHByaXZpbGVnZXMgcm93c2VjdXJp dHkgc2VjdXJpdHlfbGFiZWwgY29sbGF0ZSBtYXR2aWV3IGxvY2sKICAKICAj IC0tLS0tLS0tLS0KICAjIEFub3RoZXIgZ3JvdXAgb2YgcGFyYWxsZWwgdGVz dHMKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc2VyaWFsX3NjaGVk dWxlIGIvc3JjL3Rlc3QvcmVncmVzcy9zZXJpYWxfc2NoZWR1bGUKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMWVkMDU5Yi4uNTg4M2E2NAoqKiogYS9z cmMvdGVzdC9yZWdyZXNzL3NlcmlhbF9zY2hlZHVsZQotLS0gYi9zcmMvdGVz dC9yZWdyZXNzL3NlcmlhbF9zY2hlZHVsZQoqKioqKioqKioqKioqKiogdGVz dDogZGVsZXRlCioqKiA5Myw5OCAqKioqCi0tLSA5Myw5OSAtLS0tCiAgdGVz dDogbmFtZXNwYWNlCiAgdGVzdDogcHJlcGFyZWRfeGFjdHMKICB0ZXN0OiBw cml2aWxlZ2VzCisgdGVzdDogcm93c2VjdXJpdHkKICB0ZXN0OiBzZWN1cml0 eV9sYWJlbAogIHRlc3Q6IGNvbGxhdGUKICB0ZXN0OiBtYXR2aWV3CmRpZmYg LS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9yb3dzZWN1cml0eS5zcWwg Yi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9yb3dzZWN1cml0eS5zcWwKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggLi4uNTVkNGFhZAoqKiogYS9zcmMvdGVz dC9yZWdyZXNzL3NxbC9yb3dzZWN1cml0eS5zcWwKLS0tIGIvc3JjL3Rlc3Qv cmVncmVzcy9zcWwvcm93c2VjdXJpdHkuc3FsCioqKioqKioqKioqKioqKgoq KiogMCAqKioqCi0tLSAxLDI5OCAtLS0tCisgLS0KKyAtLSBUZXN0IG9mIFJv dy1sZXZlbCBzZWN1cml0eSBmZWF0dXJlCisgLS0KKyAKKyAtLSBDbGVhbiB1 cCBpbiBjYXNlIGEgcHJpb3IgcmVncmVzc2lvbiBydW4gZmFpbGVkCisgCisg LS0gU3VwcHJlc3MgTk9USUNFIG1lc3NhZ2VzIHdoZW4gdXNlcnMvZ3JvdXBz IGRvbid0IGV4aXN0CisgU0VUIGNsaWVudF9taW5fbWVzc2FnZXMgVE8gJ3dh cm5pbmcnOworIAorIERST1AgVVNFUiBJRiBFWElTVFMgcmxzX3JlZ3Jlc3Nf dXNlcjA7CisgRFJPUCBVU0VSIElGIEVYSVNUUyBybHNfcmVncmVzc191c2Vy MTsKKyBEUk9QIFVTRVIgSUYgRVhJU1RTIHJsc19yZWdyZXNzX3VzZXIyOwor IAorIERST1AgU0NIRU1BIElGIEVYSVNUUyBybHNfcmVncmVzc19zY2hlbWEg Q0FTQ0FERTsKKyAKKyBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOworIAor IC0tIGluaXRpYWwgc2V0dXAKKyBDUkVBVEUgVVNFUiBybHNfcmVncmVzc191 c2VyMDsKKyBDUkVBVEUgVVNFUiBybHNfcmVncmVzc191c2VyMTsKKyBDUkVB VEUgVVNFUiBybHNfcmVncmVzc191c2VyMjsKKyAKKyBDUkVBVEUgU0NIRU1B IHJsc19yZWdyZXNzX3NjaGVtYTsKKyBHUkFOVCBBTEwgT04gU0NIRU1BIHJs c19yZWdyZXNzX3NjaGVtYSBUTyBwdWJsaWM7CisgU0VUIHNlYXJjaF9wYXRo ID0gcmxzX3JlZ3Jlc3Nfc2NoZW1hOworIAorIC0tIHNldHVwIG9mIG1hbGlj aW91cyBmdW5jdGlvbgorIENSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIGZf bGVhayh0ZXh0KSBSRVRVUk5TIGJvb2wKKyAgICAgQ09TVCAwLjAwMDAwMDEg TEFOR1VBR0UgcGxwZ3NxbAorICAgICBBUyAnQkVHSU4gUkFJU0UgTk9USUNF ICcnZl9sZWFrID0+ICUnJywgJDE7IFJFVFVSTiB0cnVlOyBFTkQnOworIEdS QU5UIEVYRUNVVEUgT04gRlVOQ1RJT04gZl9sZWFrKHRleHQpIFRPIHB1Ymxp YzsKKyAKKyAtLSBCQVNJQyBSb3ctTGV2ZWwgU2VjdXJpdHkgU2NlbmFyaW8K KyAKKyBTRVQgU0VTU0lPTiBBVVRIT1JJWkFUSU9OIHJsc19yZWdyZXNzX3Vz ZXIwOworIENSRUFURSBUQUJMRSB1YWNjb3VudCAoCisgICAgIHBndXNlciAg ICAgIG5hbWUgcHJpbWFyeSBrZXksCisgICAgIHNlY2x2ICAgICAgIGludAor ICk7CisgSU5TRVJUIElOVE8gdWFjY291bnQgVkFMVUVTCisgICAgICgncmxz X3JlZ3Jlc3NfdXNlcjAnLCA5OSksCisgICAgICgncmxzX3JlZ3Jlc3NfdXNl cjEnLCAgMSksCisgICAgICgncmxzX3JlZ3Jlc3NfdXNlcjInLCAgMiksCisg ICAgICgncmxzX3JlZ3Jlc3NfdXNlcjMnLCAgMyk7CisgR1JBTlQgU0VMRUNU IE9OIHVhY2NvdW50IFRPIHB1YmxpYzsKKyAKKyBDUkVBVEUgVEFCTEUgY2F0 ZWdvcnkgKAorICAgICBjaWQgICAgICAgICBpbnQgcHJpbWFyeSBrZXksCisg ICAgIGNuYW1lICAgICAgIHRleHQKKyApOworIEdSQU5UIEFMTCBPTiBjYXRl Z29yeSBUTyBwdWJsaWM7CisgSU5TRVJUIElOVE8gY2F0ZWdvcnkgVkFMVUVT CisgICAgICgxMSwgJ25vdmVsJyksCisgICAgICgyMiwgJ3NjaWVuY2UgZmlj dGlvbicpLAorICAgICAoMzMsICd0ZWNobm9sb2d5JyksCisgICAgICg0NCwg J21hbmdhJyk7CisgCisgQ1JFQVRFIFRBQkxFIGRvY3VtZW50ICgKKyAgICAg ZGlkICAgICAgICAgaW50IHByaW1hcnkga2V5LAorICAgICBjaWQgICAgICAg ICBpbnQgcmVmZXJlbmNlcyBjYXRlZ29yeShjaWQpLAorICAgICBkbGV2ZWwg ICAgICBpbnQgbm90IG51bGwsCisgICAgIGRhdXRob3IgICAgIG5hbWUsCisg ICAgIGR0aXRsZSAgICAgIHRleHQKKyApOworIEdSQU5UIEFMTCBPTiBkb2N1 bWVudCBUTyBwdWJsaWM7CisgSU5TRVJUIElOVE8gZG9jdW1lbnQgVkFMVUVT CisgICAgICggMSwgMTEsIDEsICdybHNfcmVncmVzc191c2VyMScsICdteSBm aXJzdCBub3ZlbCcpLAorICAgICAoIDIsIDExLCAyLCAncmxzX3JlZ3Jlc3Nf dXNlcjEnLCAnbXkgc2Vjb25kIG5vdmVsJyksCisgICAgICggMywgMjIsIDIs ICdybHNfcmVncmVzc191c2VyMScsICdteSBzY2llbmNlIGZpY3Rpb24nKSwK KyAgICAgKCA0LCA0NCwgMSwgJ3Jsc19yZWdyZXNzX3VzZXIxJywgJ215IGZp cnN0IG1hbmdhJyksCisgICAgICggNSwgNDQsIDIsICdybHNfcmVncmVzc191 c2VyMScsICdteSBzZWNvbmQgbWFuZ2EnKSwKKyAgICAgKCA2LCAyMiwgMSwg J3Jsc19yZWdyZXNzX3VzZXIyJywgJ2dyZWF0IHNjaWVuY2UgZmljdGlvbicp LAorICAgICAoIDcsIDMzLCAyLCAncmxzX3JlZ3Jlc3NfdXNlcjInLCAnZ3Jl YXQgdGVjaG5vbG9neSBib29rJyksCisgICAgICggOCwgNDQsIDEsICdybHNf cmVncmVzc191c2VyMicsICdncmVhdCBtYW5nYScpOworIAorIC0tIHVzZXIn cyBzZWN1cml0eSBsZXZlbCBtdXN0IGhpZ2hlciB0aGFuIG9yIGVxdWFsIHRv IGRvY3VtZW50J3Mgb25lCisgQUxURVIgVEFCTEUgZG9jdW1lbnQgU0VUIFJP VyBTRUNVUklUWSBGT1IgQUxMCisgICAgIFRPIChkbGV2ZWwgPD0gKFNFTEVD VCBzZWNsdiBGUk9NIHVhY2NvdW50IFdIRVJFIHBndXNlciA9IGN1cnJlbnRf dXNlcikpOworIAorIC0tIHZpZXdwb2ludCBmcm9tIHJsc19yZWdyZXNzX3Vz ZXIxCisgU0VUIFNFU1NJT04gQVVUSE9SSVpBVElPTiBybHNfcmVncmVzc191 c2VyMTsKKyBTRUxFQ1QgKiBGUk9NIGRvY3VtZW50IFdIRVJFIGZfbGVhayhk dGl0bGUpOworIFNFTEVDVCAqIEZST00gZG9jdW1lbnQgTkFUVVJBTCBKT0lO IGNhdGVnb3J5IFdIRVJFIGZfbGVhayhkdGl0bGUpOworIAorIC0tIHZpZXdw b2ludCBmcm9tIHJsc19yZWdyZXNzX3VzZXIyCisgU0VUIFNFU1NJT04gQVVU SE9SSVpBVElPTiBybHNfcmVncmVzc191c2VyMjsKKyBTRUxFQ1QgKiBGUk9N IGRvY3VtZW50IFdIRVJFIGZfbGVhayhkdGl0bGUpOworIFNFTEVDVCAqIEZS T00gZG9jdW1lbnQgTkFUVVJBTCBKT0lOIGNhdGVnb3J5IFdIRVJFIGZfbGVh ayhkdGl0bGUpOworIAorIEVYUExBSU4gKGNvc3RzIG9mZikgU0VMRUNUICog RlJPTSBkb2N1bWVudCBXSEVSRSBmX2xlYWsoZHRpdGxlKTsKKyBFWFBMQUlO IChjb3N0cyBvZmYpIFNFTEVDVCAqIEZST00gZG9jdW1lbnQgTkFUVVJBTCBK T0lOIGNhdGVnb3J5IFdIRVJFIGZfbGVhayhkdGl0bGUpOworIAorIC0tIG9u bHkgb3duZXIgY2FuIGNoYW5nZSByb3ctbGV2ZWwgc2VjdXJpdHkKKyBBTFRF UiBUQUJMRSBkb2N1bWVudCBTRVQgUk9XIFNFQ1VSSVRZIEZPUiBBTEwgVE8g KHRydWUpOyAgICAgLS0gZmFpbAorIEFMVEVSIFRBQkxFIGRvY3VtZW50IFJF U0VUIFJPVyBTRUNVUklUWSBGT1IgQUxMOyAgICAgICAgICAgICAtLSBmYWls CisgCisgU0VUIFNFU1NJT04gQVVUSE9SSVpBVElPTiBybHNfcmVncmVzc191 c2VyMDsKKyBBTFRFUiBUQUJMRSBkb2N1bWVudCBTRVQgUk9XIFNFQ1VSSVRZ IEZPUiBBTEwgVE8gKGRhdXRob3IgPSBjdXJyZW50X3VzZXIpOworIAorIC0t IHZpZXdwb2ludCBmcm9tIHJsc19yZWdyZXNzX3VzZXIxIGFnYWluCisgU0VU IFNFU1NJT04gQVVUSE9SSVpBVElPTiBybHNfcmVncmVzc191c2VyMTsKKyBT RUxFQ1QgKiBGUk9NIGRvY3VtZW50IFdIRVJFIGZfbGVhayhkdGl0bGUpOwor IFNFTEVDVCAqIEZST00gZG9jdW1lbnQgTkFUVVJBTCBKT0lOIGNhdGVnb3J5 IFdIRVJFIGZfbGVhayhkdGl0bGUpOworIAorIC0tIHZpZXdwb2ludCBmcm9t IHJsc19yZWdyZXNzX3VzZXIyIGFnYWluCisgU0VUIFNFU1NJT04gQVVUSE9S SVpBVElPTiBybHNfcmVncmVzc191c2VyMjsKKyBTRUxFQ1QgKiBGUk9NIGRv Y3VtZW50IFdIRVJFIGZfbGVhayhkdGl0bGUpOworIFNFTEVDVCAqIEZST00g ZG9jdW1lbnQgTkFUVVJBTCBKT0lOIGNhdGVnb3J5IFdIRVJFIGZfbGVhayhk dGl0bGUpOworIAorIEVYUExBSU4gKGNvc3RzIG9mZikgU0VMRUNUICogRlJP TSBkb2N1bWVudCBXSEVSRSBmX2xlYWsoZHRpdGxlKTsKKyBFWFBMQUlOIChj b3N0cyBvZmYpIFNFTEVDVCAqIEZST00gZG9jdW1lbnQgTkFUVVJBTCBKT0lO IGNhdGVnb3J5IFdIRVJFIGZfbGVhayhkdGl0bGUpOworIAorIC0tIGludGVy YWN0aW9uIG9mIEZLL1BLIGNvbnN0cmFpbnRzCisgU0VUIFNFU1NJT04gQVVU SE9SSVpBVElPTiBybHNfcmVncmVzc191c2VyMDsKKyBBTFRFUiBUQUJMRSBj YXRlZ29yeSBTRVQgUk9XIFNFQ1VSSVRZIEZPUiBBTEwKKyAgICAgVE8gKENB U0UgV0hFTiBjdXJyZW50X3VzZXIgPSAncmxzX3JlZ3Jlc3NfdXNlcjEnIFRI RU4gY2lkIElOICgxMSwgMzMpCisgICAgICAgICBXSEVOIGN1cnJlbnRfdXNl ciA9ICdybHNfcmVncmVzc191c2VyMicgVEhFTiBjaWQgSU4gKDIyLCA0NCkK KyAgICAgICAgIEVMU0UgZmFsc2UgRU5EKTsKKyAKKyAtLSBjYW5ub3QgZGVs ZXRlIFBLIHJlZmVyZW5jZWQgYnkgaW52aXNpYmxlIEZLCisgU0VUIFNFU1NJ T04gQVVUSE9SSVpBVElPTiBybHNfcmVncmVzc191c2VyMTsKKyBTRUxFQ1Qg KiBGUk9NIGRvY3VtZW50IGQgZnVsbCBvdXRlciBqb2luIGNhdGVnb3J5IGMg b24gZC5jaWQgPSBjLmNpZDsKKyBERUxFVEUgRlJPTSBjYXRlZ29yeSBXSEVS RSBjaWQgPSAzMzsgICAgLS0gZmFpbGVkCisgCisgLS0gY2Fubm90IGluc2Vy dCBGSyByZWZlcmVuY2luZyBpbnZpc2libGUgUEsKKyBTRVQgU0VTU0lPTiBB VVRIT1JJWkFUSU9OIHJsc19yZWdyZXNzX3VzZXIyOworIFNFTEVDVCAqIEZS T00gZG9jdW1lbnQgZCBmdWxsIG91dGVyIGpvaW4gY2F0ZWdvcnkgYyBvbiBk LmNpZCA9IGMuY2lkOworIElOU0VSVCBJTlRPIGRvY3VtZW50IFZBTFVFUyAo MTAsIDMzLCAxLCBjdXJyZW50X3VzZXIsICdob2dlJyk7IC0tIGZhaWxlZAor IAorIC0tIGRhdGFiYXNlIHN1cGVydXNlciBjYW4gYnlwYXNzIFJMUyBwb2xp Y3kKKyBSRVNFVCBTRVNTSU9OIEFVVEhPUklaQVRJT047CisgU0VMRUNUICog RlJPTSBkb2N1bWVudDsKKyBTRUxFQ1QgKiBGUk9NIGNhdGVnb3J5OworIAor IC0tCisgLS0gVGFibGUgaW5oZXJpdGFuY2UgYW5kIFJMUyBwb2xpY3kKKyAt LQorIFNFVCBTRVNTSU9OIEFVVEhPUklaQVRJT04gcmxzX3JlZ3Jlc3NfdXNl cjA7CisgCisgQ1JFQVRFIFRBQkxFIHQxIChhIGludCwganVuazEgdGV4dCwg YiB0ZXh0KSBXSVRIIE9JRFM7CisgQUxURVIgVEFCTEUgdDEgRFJPUCBDT0xV TU4ganVuazE7ICAgIC0tIGp1c3QgYSBkaXN0dXJiaW5nIGZhY3RvcgorIEdS QU5UIEFMTCBPTiB0MSBUTyBwdWJsaWM7CisgCisgQ09QWSB0MSBGUk9NIHN0 ZGluIFdJVEggKG9pZHMpOworIDEwMQkxCWFhYQorIDEwMgkyCWJiYgorIDEw MwkzCWNjYworIDEwNAk0CWRkZAorIFwuCisgCisgQ1JFQVRFIFRBQkxFIHQy IChjIGZsb2F0KSBJTkhFUklUUyAodDEpOworIENPUFkgdDIgRlJPTSBzdGRp biBXSVRIIChvaWRzKTsKKyAyMDEJMQlhYmMJMS4xCisgMjAyCTIJYmNkCTIu MgorIDIwMwkzCWNkZQkzLjMKKyAyMDQJNAlkZWYJNC40CisgXC4KKyAKKyBD UkVBVEUgVEFCTEUgdDMgKGMgdGV4dCwgYiB0ZXh0LCBhIGludCkgV0lUSCBP SURTOworIEFMVEVSIFRBQkxFIHQzIElOSEVSSVQgdDE7CisgQ09QWSB0Myhh LGIsYykgRlJPTSBzdGRpbiBXSVRIIChvaWRzKTsKKyAzMDEJMQl4eHgJWAor IDMwMgkyCXl5eQlZCisgMzAzCTMJenp6CVoKKyBcLgorIAorIEFMVEVSIFRB QkxFIHQxIFNFVCBST1cgU0VDVVJJVFkgRk9SIEFMTCBUTyAoYSAlIDIgPSAw KTsgLS0gYmUgZXZlbiBudW1iZXIKKyBBTFRFUiBUQUJMRSB0MiBTRVQgUk9X IFNFQ1VSSVRZIEZPUiBBTEwgVE8gKGEgJSAyID0gMSk7IC0tIGJlIG9kZCBu dW1iZXIKKyAKKyBTRUxFQ1QgKiBGUk9NIHQxOworIEVYUExBSU4gKGNvc3Rz IG9mZikgU0VMRUNUICogRlJPTSB0MTsKKyAKKyBTRUxFQ1QgKiBGUk9NIHQx IFdIRVJFIGZfbGVhayhiKTsKKyBFWFBMQUlOIChjb3N0cyBvZmYpIFNFTEVD VCAqIEZST00gdDEgV0hFUkUgZl9sZWFrKGIpOworIAorIC0tIHJlZmVyZW5j ZSB0byBzeXN0ZW0gY29sdW1uCisgU0VMRUNUIG9pZCwgKiBGUk9NIHQxOwor IEVYUExBSU4gKGNvc3RzIG9mZikgU0VMRUNUICogRlJPTSB0MTsKKyAKKyAt LSByZWZlcmVuY2UgdG8gd2hvbGUtcm93IHJlZmVyZW5jZQorIFNFTEVDVCAq LHQxIEZST00gdDE7CisgRVhQTEFJTiAoY29zdHMgb2ZmKSBTRUxFQ1QgKix0 MSBGUk9NIHQxOworIAorIC0tIGZvciBzaGFyZS91cGRhdGUgbG9jaworIFNF TEVDVCAqIEZST00gdDEgRk9SIFNIQVJFOworIEVYUExBSU4gKGNvc3RzIG9m ZikgU0VMRUNUICogRlJPTSB0MSBGT1IgU0hBUkU7CisgCisgU0VMRUNUICog RlJPTSB0MSBXSEVSRSBmX2xlYWsoYikgRk9SIFNIQVJFOworIEVYUExBSU4g KGNvc3RzIG9mZikgU0VMRUNUICogRlJPTSB0MSBXSEVSRSBmX2xlYWsoYikg Rk9SIFNIQVJFOworIAorIC0tCisgLS0gQ09QWSBUTyBzdGF0ZW1lbnQgCisg LS0KKyBDT1BZIHQxIFRPIHN0ZG91dDsKKyBDT1BZIHQxIFRPIHN0ZG91dCBX SVRIIE9JRFM7CisgQ09QWSB0MihjLGIpIFRPIHN0ZG91dCBXSVRIIE9JRFM7 CisgQ09QWSAoU0VMRUNUICogRlJPTSB0MSkgVE8gc3Rkb3V0OworIENPUFkg ZG9jdW1lbnQgVE8gc3Rkb3V0IFdJVEggT0lEUzsJLS0gZmFpbGVkIChubyBv aWQgY29sdW1uKQorIAorIC0tCisgLS0gcmVjdXJzaXZlIFJMUyBhbmQgVklF V3MgaW4gcG9saWN5CisgLS0KKyBDUkVBVEUgVEFCTEUgczEgKGEgaW50LCBi IHRleHQpOworIElOU0VSVCBJTlRPIHMxIChTRUxFQ1QgeCwgbWQ1KHg6OnRl eHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKC0xMCwxMCkgeCk7CisgCisgQ1JF QVRFIFRBQkxFIHMyICh4IGludCwgeSB0ZXh0KTsKKyBJTlNFUlQgSU5UTyBz MiAoU0VMRUNUIHgsIG1kNSh4Ojp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmll cygtNiw2KSB4KTsKKyBDUkVBVEUgVklFVyB2MiBBUyBTRUxFQ1QgKiBGUk9N IHMyIFdIRVJFIHkgbGlrZSAnJWFmJSc7CisgCisgQUxURVIgVEFCTEUgczEg U0VUIFJPVyBTRUNVUklUWSBGT1IgQUxMCisgICAgVE8gKGEgaW4gKHNlbGVj dCB4IGZyb20gczIgd2hlcmUgeSBsaWtlICclMmYlJykpOworIAorIEFMVEVS IFRBQkxFIHMyIFNFVCBST1cgU0VDVVJJVFkgRk9SIEFMTAorICAgIFRPICh4 IGluIChzZWxlY3QgYSBmcm9tIHMxIHdoZXJlIGIgbGlrZSAnJTIyJScpKTsK KyAKKyBTRUxFQ1QgKiBGUk9NIHMxIFdIRVJFIGZfbGVhayhiKTsJLS0gZmFp bCAoaW5maW5pdGUgcmVjdXJzaW9uKQorIAorIEFMVEVSIFRBQkxFIHMyIFNF VCBST1cgU0VDVVJJVFkgRk9SIEFMTCBUTyAoeCAlIDIgPSAwKTsKKyAKKyBT RUxFQ1QgKiBGUk9NIHMxIFdIRVJFIGZfbGVhayhiKTsJLS0gT0sKKyBFWFBM QUlOIFNFTEVDVCAqIEZST00gb25seSBzMSBXSEVSRSBmX2xlYWsoYik7Cisg CisgQUxURVIgVEFCTEUgczEgU0VUIFJPVyBTRUNVUklUWSBGT1IgQUxMCisg ICAgVE8gKGEgaW4gKHNlbGVjdCB4IGZyb20gdjIpKTsJCS0tIHVzaW5nIFZJ RVcgaW4gUkxTIHBvbGljeQorIFNFTEVDVCAqIEZST00gczEgV0hFUkUgZl9s ZWFrKGIpOwktLSBPSworIEVYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUICog RlJPTSBzMSBXSEVSRSBmX2xlYWsoYik7CisgCisgU0VMRUNUIChTRUxFQ1Qg eCBGUk9NIHMxIExJTUlUIDEpIHh4LCAqIEZST00gczIgV0hFUkUgeSBsaWtl ICclMjglJzsKKyBFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAoU0VMRUNU IHggRlJPTSBzMSBMSU1JVCAxKSB4eCwgKiBGUk9NIHMyIFdIRVJFIHkgbGlr ZSAnJTI4JSc7CisgCisgQUxURVIgVEFCTEUgczIgU0VUIFJPVyBTRUNVUklU WSBGT1IgQUxMCisgICAgVE8gKHggaW4gKHNlbGVjdCBhIGZyb20gczEgd2hl cmUgYiBsaWtlICclZDIlJykpOworIFNFTEVDVCAqIEZST00gczEgV0hFUkUg Zl9sZWFrKGIpOwktLSBmYWlsIChpbmZpbml0ZSByZWN1cnNpb24gdmlhIHZp ZXcpCisgCisgLS0gcHJlcGFyZWQgc3RhdGVtZW50IHdpdGggcmxzX3JlZ3Jl c3NfdXNlcjAgcHJpdmlsZWdlCisgUFJFUEFSRSBwMShpbnQpIEFTIFNFTEVD VCAqIEZST00gdDEgV0hFUkUgYSA8PSAkMTsKKyBFWEVDVVRFIHAxKDIpOwor IEVYUExBSU4gKGNvc3RzIG9mZikgRVhFQ1VURSBwMSgyKTsKKyAKKyAtLSBz dXBlcnVzZXIgaXMgYWxsb3dlZCB0byBieXBhc3MgUkxTIGNoZWNrcworIFJF U0VUIFNFU1NJT04gQVVUSE9SSVpBVElPTjsKKyBTRUxFQ1QgKiBGUk9NIHQx IFdIRVJFIGZfbGVhayhiKTsKKyBFWFBMQUlOIChjb3N0cyBvZmYpIFNFTEVD VCAqIEZST00gdDEgV0hFUkUgZl9sZWFrKGIpOworIAorIC0tIHBsYW4gY2Fj aGUgc2hvdWxkIGJlIGludmFsaWRhdGVkCisgRVhFQ1VURSBwMSgyKTsKKyBF WFBMQUlOIChjb3N0cyBvZmYpIEVYRUNVVEUgcDEoMik7CisgCisgUFJFUEFS RSBwMihpbnQpIEFTIFNFTEVDVCAqIEZST00gdDEgV0hFUkUgYSA9ICQxOwor IEVYRUNVVEUgcDIoMik7CisgRVhQTEFJTiAoY29zdHMgb2ZmKSBFWEVDVVRF IHAyKDIpOworIAorIC0tIGFsc28sIGNhc2Ugd2hlbiBwcml2aWxlZ2Ugc3dp dGNoIGZyb20gc3VwZXJ1c2VyCisgU0VUIFNFU1NJT04gQVVUSE9SSVpBVElP TiBybHNfcmVncmVzc191c2VyMDsKKyBFWEVDVVRFIHAyKDIpOworIEVYUExB SU4gKGNvc3RzIG9mZikgRVhFQ1VURSBwMigyKTsKKyAKKyAtLQorIC0tIFVQ REFURSAvIERFTEVURSBhbmQgUm93LWxldmVsIHNlY3VyaXR5CisgLS0KKyBT RVQgU0VTU0lPTiBBVVRIT1JJWkFUSU9OIHJsc19yZWdyZXNzX3VzZXIwOwor IEVYUExBSU4gKGNvc3RzIG9mZikgVVBEQVRFIHQxIFNFVCBiID0gYiB8fCBi IFdIRVJFIGZfbGVhayhiKTsKKyBVUERBVEUgdDEgU0VUIGIgPSBiIHx8IGIg V0hFUkUgZl9sZWFrKGIpOworIAorIEVYUExBSU4gKGNvc3RzIG9mZikgVVBE QVRFIG9ubHkgdDEgU0VUIGIgPSBiIHx8ICdfdXBkdCcgV0hFUkUgZl9sZWFr KGIpOworIFVQREFURSBvbmx5IHQxIFNFVCBiID0gYiB8fCAnX3VwZHQnIFdI RVJFIGZfbGVhayhiKTsKKyAKKyAtLSByZXR1cm5pbmcgY2xhdXNlIHdpdGgg c3lzdGVtIGNvbHVtbgorIFVQREFURSBvbmx5IHQxIFNFVCBiID0gYiBXSEVS RSBmX2xlYWsoYikgUkVUVVJOSU5HIG9pZCwgKiwgdDE7CisgVVBEQVRFIHQx IFNFVCBiID0gYiBXSEVSRSBmX2xlYWsoYikgUkVUVVJOSU5HICo7CisgVVBE QVRFIHQxIFNFVCBiID0gYiBXSEVSRSBmX2xlYWsoYikgUkVUVVJOSU5HIG9p ZCwgKiwgdDE7CisgCisgUkVTRVQgU0VTU0lPTiBBVVRIT1JJWkFUSU9OOwor IFNFTEVDVCAqIEZST00gdDE7CisgCisgU0VUIFNFU1NJT04gQVVUSE9SSVpB VElPTiBybHNfcmVncmVzc191c2VyMDsKKyBFWFBMQUlOIChjb3N0cyBvZmYp IERFTEVURSBGUk9NIG9ubHkgdDEgV0hFUkUgZl9sZWFrKGIpOworIEVYUExB SU4gKGNvc3RzIG9mZikgREVMRVRFIEZST00gdDEgV0hFUkUgZl9sZWFrKGIp OworIAorIERFTEVURSBGUk9NIG9ubHkgdDEgV0hFUkUgZl9sZWFrKGIpIFJF VFVSTklORyBvaWQsICosIHQxOworIERFTEVURSBGUk9NIHQxIFdIRVJFIGZf bGVhayhiKSBSRVRVUk5JTkcgb2lkLCAqLCB0MTsKKyAKKyAtLQorIC0tIFRl c3QgcHNxbCBcZHQrIGNvbW1hbmQKKyAtLQorIEFMVEVSIFRBQkxFIGNhdGVn b3J5IFJFU0VUIFJPVyBTRUNVUklUWSBGT1IgQUxMOyAgLS0gdG9vIGxvbmcg cXVhbAorIFxkdCsKKyAKKyAtLQorIC0tIENsZWFuIHVwIG9iamVjdHMKKyAt LQorIFJFU0VUIFNFU1NJT04gQVVUSE9SSVpBVElPTjsKKyAKKyBEUk9QIFND SEVNQSBybHNfcmVncmVzc19zY2hlbWEgQ0FTQ0FERTsKKyAKKyBEUk9QIFVT RVIgcmxzX3JlZ3Jlc3NfdXNlcjA7CisgRFJPUCBVU0VSIHJsc19yZWdyZXNz X3VzZXIxOworIERST1AgVVNFUiBybHNfcmVncmVzc191c2VyMjsK --------------010803000201040801020009 Content-Type: text/plain Content-Disposition: inline Content-Transfer-Encoding: 8bit MIME-Version: 1.0 -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers --------------010803000201040801020009--